<?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>197661</bug_id>
          
          <creation_ts>2019-05-07 08:55:28 -0700</creation_ts>
          <short_desc>Rename ConnectionMac.mm to ConnectionCocoa.mm since it is used on both macOS and iOS</short_desc>
          <delta_ts>2019-05-07 11:53:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1533927</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-05-07 08:55:28 -0700</bug_when>
    <thetext>Rename ConnectionMac.mm to ConnectionCocoa.mm since it is used on both macOS and iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1533932</commentid>
    <comment_count>1</comment_count>
      <attachid>369289</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-05-07 09:02:51 -0700</bug_when>
    <thetext>Created attachment 369289
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1533939</commentid>
    <comment_count>2</comment_count>
      <attachid>369291</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-05-07 09:10:45 -0700</bug_when>
    <thetext>Created attachment 369291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1533944</commentid>
    <comment_count>3</comment_count>
      <attachid>369293</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-05-07 09:15:49 -0700</bug_when>
    <thetext>Created attachment 369293
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534006</commentid>
    <comment_count>4</comment_count>
      <attachid>369293</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-07 11:52:29 -0700</bug_when>
    <thetext>Comment on attachment 369293
Patch

Clearing flags on attachment: 369293

Committed r245021: &lt;https://trac.webkit.org/changeset/245021&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534007</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-05-07 11:52:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1534010</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-05-07 11:53:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/50549423&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369289</attachid>
            <date>2019-05-07 09:02:51 -0700</date>
            <delta_ts>2019-05-07 09:10:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197661-20190507090250.patch</filename>
            <type>text/plain</type>
            <size>78264</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg4Y2U0NWVlMzAzZDhhOGUz
M2U5YjNkNDFhNjJhZDE3OTYxNjc3OGUuLmU4NmFmZTYxM2NkOTg1NDk0MTM2MDhiZDQwOWFhOGY4
OGM2NWM5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTktMDUtMDcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgQ29ubmVjdGlvbk1hYy5t
bSB0byBDb25uZWN0aW9uQ29jb2EubW0gc2luY2UgaXQgaXMgdXNlZCBvbiBib3RoIG1hY09TIGFu
ZCBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NzY2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9Db25uZWN0aW9uTWFjLm1tLgorICAgICAgICAoSVBD
OjpDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZzo6Y3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0
aW9uV2F0Y2hkb2cpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRv
Zzo6Q29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cpOgorICAgICAgICAoSVBDOjpDb25uZWN0
aW9uVGVybWluYXRpb25XYXRjaGRvZzo6d2F0Y2hkb2dUaW1lckZpcmVkKToKKyAgICAgICAgKElQ
Qzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKElQQzo6Q29ubmVj
dGlvbjo6Y2FuY2VsUmVjZWl2ZVNvdXJjZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnRl
cm1pbmF0ZVNvb24pOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxp
emUpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpvcGVuKToKKyAgICAgICAgKElQQzo6Q29u
bmVjdGlvbjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9y
bUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzIGNvbnN0KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlv
bjo6c2VuZE91dGdvaW5nTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OmluaXRp
YWxpemVTZW5kU291cmNlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6cmVzdW1lU2VuZFNv
dXJjZSk6CisgICAgICAgIChJUEM6OmNyZWF0ZU1lc3NhZ2VEZWNvZGVyKToKKyAgICAgICAgKElQ
Qzo6cmVhZEZyb21NYWNoUG9ydCk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnJlY2VpdmVT
b3VyY2VFdmVudEhhbmRsZXIpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVy
IGNvbnN0KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6Z2V0QXVkaXRUb2tlbik6CisgICAg
ICAgIChJUEM6OkNvbm5lY3Rpb246OmtpbGwpOgorICAgICAgICAoSVBDOjpBY2Nlc3NpYmlsaXR5
UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246
OndpbGxTZW5kU3luY01lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpkaWRSZWNl
aXZlU3luY1JlcGx5KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6cmVtb3RlUHJvY2Vzc0lE
IGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvY29jb2EvSW1wb3J0YW5jZUFzc2VydGlv
bi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL0ltcG9ydGFu
Y2VBc3NlcnRpb24uaC4KKyAgICAgICAgKElQQzo6SW1wb3J0YW5jZUFzc2VydGlvbjo6SW1wb3J0
YW5jZUFzc2VydGlvbik6CisgICAgICAgIChJUEM6OkltcG9ydGFuY2VBc3NlcnRpb246On5JbXBv
cnRhbmNlQXNzZXJ0aW9uKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvY29jb2EvTWFjaE1lc3Nh
Z2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hN
ZXNzYWdlLmNwcC4KKyAgICAgICAgKElQQzo6TWFjaE1lc3NhZ2U6OmNyZWF0ZSk6CisgICAgICAg
IChJUEM6Ok1hY2hNZXNzYWdlOjpNYWNoTWVzc2FnZSk6CisgICAgICAgIChJUEM6Ok1hY2hNZXNz
YWdlOjp+TWFjaE1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpNYWNoTWVzc2FnZTo6bWVzc2FnZVNp
emUpOgorICAgICAgICAoSVBDOjpNYWNoTWVzc2FnZTo6bGVha0Rlc2NyaXB0b3JzKToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvY29jb2EvTWFjaE1lc3NhZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9NYWNoTWVzc2FnZS5oLgorICAgICAgICAoSVBDOjpN
YWNoTWVzc2FnZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChJUEM6Ok1hY2hNZXNzYWdlOjpoZWFk
ZXIpOgorICAgICAgICAoSVBDOjpNYWNoTWVzc2FnZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSBjb25z
dCk6CisgICAgICAgIChJUEM6Ok1hY2hNZXNzYWdlOjptZXNzYWdlTmFtZSBjb25zdCk6CisgICAg
ICAgICogUGxhdGZvcm0vSVBDL2NvY29hL01hY2hQb3J0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaFBvcnQuaC4KKyAgICAgICAgKElQQzo6TWFjaFBv
cnQ6Ok1hY2hQb3J0KToKKyAgICAgICAgKElQQzo6TWFjaFBvcnQ6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChJUEM6Ok1hY2hQb3J0OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpNYWNoUG9ydDo6
cG9ydCBjb25zdCk6CisgICAgICAgIChJUEM6Ok1hY2hQb3J0OjpkaXNwb3NpdGlvbiBjb25zdCk6
CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlc0NvY29hLnR4
dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxOS0w
NS0wNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBb
bWFjT1NdIEF2b2lkIGNyYXNoaW5nIHRoZSBVSSBwcm9jZXNzIHdoZW4gd3JpdGluZyBlbXB0eSBk
YXRhIHRvIHRoZSBwYXN0ZWJvYXJkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9jb2NvYS9Db25uZWN0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9jb2NvYS9Db25uZWN0aW9uQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTBhMjlmMDk5ZGRkNmNjOTcy
ZTVlZWM1MzVkMzcxYzdjZWY0OTFhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbQpAQCAtMCwwICsxLDY1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDb25uZWN0aW9u
LmgiCisKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIkltcG9ydGFuY2VBc3Nl
cnRpb24uaCIKKyNpbXBvcnQgIk1hY2hNZXNzYWdlLmgiCisjaW1wb3J0ICJNYWNoUG9ydC5oIgor
I2ltcG9ydCAiTWFjaFV0aWxpdGllcy5oIgorI2ltcG9ydCAiV0tDcmFzaFJlcG9ydGVyLmgiCisj
aW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KKyNpbXBvcnQgPG1hY2gvbWFjaF9lcnJv
ci5oPgorI2ltcG9ydCA8bWFjaC92bV9tYXAuaD4KKyNpbXBvcnQgPHN5cy9tbWFuLmg+CisjaW1w
b3J0IDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKyNpbXBv
cnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyNpbXBvcnQgIlByb2Nlc3NBc3NlcnRpb24uaCIKKyNpbXBvcnQgPFVJS2l0L1VJQWNjZXNzaWJp
bGl0eS5oPgorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNpbXBvcnQgPEFYUnVudGlt
ZS9BWERlZmluZXMuaD4KKyNpbXBvcnQgPEFYUnVudGltZS9BWE5vdGlmaWNhdGlvbkNvbnN0YW50
cy5oPgorI2Vsc2UKKyNkZWZpbmUga0FYUGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbiAwCisj
ZW5kaWYKKworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQorI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzUHJpdi5oPgorI2Vsc2UKK3R5cGVkZWYgZW51bSB7CisgICAgQVhTdXNwZW5kU3RhdHVzUnVu
bmluZyA9IDAsCisgICAgQVhTdXNwZW5kU3RhdHVzU3VzcGVuZGVkLAorfSBBWFN1c3BlbmRTdGF0
dXM7CisjZW5kaWYKKworZXh0ZXJuICJDIiBBWEVycm9yIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nl
c3NTdXNwZW5kU3RhdHVzKEFYU3VzcGVuZFN0YXR1cyk7CisKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisKK25hbWVzcGFjZSBJUEMgeworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZU1lc3Nh
Z2VNYXhTaXplID0gNDA5NjsKKworLy8gQXJiaXRyYXJ5IG1lc3NhZ2UgSURzIHRoYXQgZG8gbm90
IGNvbGxpZGUgd2l0aCBNYWNoIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyAodXNlZCBteSBpbml0aWFs
cykuCitjb25zdGV4cHIgbWFjaF9tc2dfaWRfdCBpbmxpbmVCb2R5TWVzc2FnZUlEID0gMHhkYmEw
ZGJhOworY29uc3RleHByIG1hY2hfbXNnX2lkX3Qgb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRCA9IDB4
ZGJhMWRiYTsKKworLy8gQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cgZG9lcyB0d28gdGhp
bmdzOgorLy8gMSkgSXQgc2V0cyBhIHdhdGNoZG9nIHRpbWVyIHRvIGtpbGwgdGhlIHBlZXJlZCBw
cm9jZXNzLgorLy8gMikgT24gaU9TLCBtYWtlIHRoZSBwcm9jZXNzIHJ1bm5hYmxlIGZvciB0aGUg
ZHVyYXRpb24gb2YgdGhlIHdhdGNoZG9nCisvLyAgICB0byBlbnN1cmUgaXQgaGFzIGEgY2hhbmNl
IHRvIHRlcm1pbmF0ZSBjbGVhbmx5LgorY2xhc3MgQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hk
b2cgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUNvbm5lY3Rpb25UZXJtaW5hdGlv
bldhdGNoZG9nKE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9uX3Q+JiB4cGNDb25uZWN0aW9uLCBT
ZWNvbmRzIGludGVydmFsKQorICAgIHsKKyAgICAgICAgbmV3IENvbm5lY3Rpb25UZXJtaW5hdGlv
bldhdGNoZG9nKHhwY0Nvbm5lY3Rpb24sIGludGVydmFsKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIENvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nKE9TT2JqZWN0UHRyPHhwY19jb25u
ZWN0aW9uX3Q+JiB4cGNDb25uZWN0aW9uLCBTZWNvbmRzIGludGVydmFsKQorICAgICAgICA6IG1f
eHBjQ29ubmVjdGlvbih4cGNDb25uZWN0aW9uKQorICAgICAgICAsIG1fd2F0Y2hkb2dUaW1lcihS
dW5Mb29wOjptYWluKCksIHRoaXMsICZDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZzo6d2F0
Y2hkb2dUaW1lckZpcmVkKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgICwgbV9h
c3NlcnRpb24oc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OlByb2Nlc3NBbmRVSUFzc2VydGlvbj4o
eHBjX2Nvbm5lY3Rpb25fZ2V0X3BpZChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpLCAiQ29ubmVjdGlv
blRlcm1pbmF0aW9uV2F0Y2hkb2ciX3MsIFdlYktpdDo6QXNzZXJ0aW9uU3RhdGU6OkJhY2tncm91
bmQpKQorI2VuZGlmCisgICAgeworICAgICAgICBtX3dhdGNoZG9nVGltZXIuc3RhcnRPbmVTaG90
KGludGVydmFsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB3YXRjaGRvZ1RpbWVyRmlyZWQoKQor
ICAgIHsKKyAgICAgICAgeHBjX2Nvbm5lY3Rpb25fa2lsbChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCks
IFNJR0tJTEwpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisKKyAgICBPU09iamVjdFB0
cjx4cGNfY29ubmVjdGlvbl90PiBtX3hwY0Nvbm5lY3Rpb247CisgICAgUnVuTG9vcDo6VGltZXI8
Q29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2c+IG1fd2F0Y2hkb2dUaW1lcjsKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlByb2Nlc3NBbmRV
SUFzc2VydGlvbj4gbV9hc3NlcnRpb247CisjZW5kaWYKK307CisgICAgCit2b2lkIENvbm5lY3Rp
b246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFtX2lzQ29ubmVjdGVkKSB7Cisg
ICAgICAgIGlmIChtX3NlbmRQb3J0KSB7CisgICAgICAgICAgICBBU1NFUlQoIW1faXNTZXJ2ZXIp
OworICAgICAgICAgICAgZGVhbGxvY2F0ZVNlbmRSaWdodFNhZmVseShtX3NlbmRQb3J0KTsKKyAg
ICAgICAgICAgIG1fc2VuZFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX3JlY2VpdmVTb3VyY2UpIHsKKyAgICAgICAgICAgIC8vIEZvciBhIHNob3J0IHBl
cmlvZCBvZiB0aW1lLCB3aGVuIG1faXNTZXJ2ZXIgaXMgdHJ1ZSBhbmQgb3BlbigpIGhhcyBiZWVu
IGNhbGxlZCwgbV9yZWNlaXZlU291cmNlIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgICAg
ICAvLyBidXQgbV9pc0Nvbm5lY3RlZCBoYXMgbm90IGJlZW4gc2V0IHRvIHRydWUgeWV0LiBJbiB0
aGlzIGNhc2UsIHdlIG5lZWQgdG8gY2FuY2VsIG1fcmVjZWl2ZVNvdXJjZSBpbnN0ZWFkIG9mIGRl
c3Ryb3lpbmcKKyAgICAgICAgICAgIC8vIG1fcmVjZWl2ZVBvcnQgb3Vyc2VsdmVzLgorICAgICAg
ICAgICAgQVNTRVJUKG1faXNTZXJ2ZXIpOworICAgICAgICAgICAgY2FuY2VsUmVjZWl2ZVNvdXJj
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fcmVjZWl2ZVBvcnQpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2lzU2VydmVyKTsKKyNpZiAhUExBVEZPUk0oV0FUQ0hPUykKKyAgICAgICAg
ICAgIG1hY2hfcG9ydF91bmd1YXJkKG1hY2hfdGFza19zZWxmKCksIG1fcmVjZWl2ZVBvcnQsIHJl
aW50ZXJwcmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4odGhpcykpOworI2VuZGlmCisgICAg
ICAgICAgICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9y
dCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKKyAgICAgICAgICAgIG1fcmVjZWl2ZVBv
cnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlID0gbnVsbHB0cjsKKyAgICBtX2lz
SW5pdGlhbGl6aW5nU2VuZFNvdXJjZSA9IGZhbHNlOworICAgIG1faXNDb25uZWN0ZWQgPSBmYWxz
ZTsKKworICAgIEFTU0VSVChtX3NlbmRQb3J0KTsKKyAgICBBU1NFUlQobV9yZWNlaXZlUG9ydCk7
CisKKyAgICAvLyBVbnJlZ2lzdGVyIG91ciBwb3J0cy4KKyAgICBkaXNwYXRjaF9zb3VyY2VfY2Fu
Y2VsKG1fc2VuZFNvdXJjZSk7CisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX3NlbmRTb3VyY2UpOwor
ICAgIG1fc2VuZFNvdXJjZSA9IG51bGxwdHI7CisgICAgbV9zZW5kUG9ydCA9IE1BQ0hfUE9SVF9O
VUxMOworCisgICAgY2FuY2VsUmVjZWl2ZVNvdXJjZSgpOworfQorCit2b2lkIENvbm5lY3Rpb246
OmNhbmNlbFJlY2VpdmVTb3VyY2UoKQoreworICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwobV9y
ZWNlaXZlU291cmNlKTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcmVjZWl2ZVNvdXJjZSk7Cisg
ICAgbV9yZWNlaXZlU291cmNlID0gbnVsbHB0cjsKKyAgICBtX3JlY2VpdmVQb3J0ID0gTUFDSF9Q
T1JUX05VTEw7Cit9CisgICAgCit2b2lkIENvbm5lY3Rpb246OnRlcm1pbmF0ZVNvb24oU2Vjb25k
cyBpbnRlcnZhbCkKK3sKKyAgICBpZiAobV94cGNDb25uZWN0aW9uKQorICAgICAgICBDb25uZWN0
aW9uVGVybWluYXRpb25XYXRjaGRvZzo6Y3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hk
b2cobV94cGNDb25uZWN0aW9uLCBpbnRlcnZhbCk7Cit9CisgICAgCit2b2lkIENvbm5lY3Rpb246
OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKCFN
QUNIX1BPUlRfVkFMSUQoaWRlbnRpZmllci5wb3J0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1faXNTZXJ2ZXIpIHsKKyAgICAgICAgbV9yZWNlaXZlUG9ydCA9IGlkZW50aWZpZXIucG9y
dDsKKyAgICAgICAgbV9zZW5kUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworCisjaWYgIVBMQVRGT1JN
KFdBVENIT1MpCisgICAgICAgIG1hY2hfcG9ydF9ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCBtX3Jl
Y2VpdmVQb3J0LCByZWludGVycHJldF9jYXN0PG1hY2hfcG9ydF9jb250ZXh0X3Q+KHRoaXMpLCB0
cnVlKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIG1fcmVjZWl2ZVBvcnQgPSBNQUNI
X1BPUlRfTlVMTDsKKyAgICAgICAgbV9zZW5kUG9ydCA9IGlkZW50aWZpZXIucG9ydDsKKyAgICB9
CisKKyAgICBtX3NlbmRTb3VyY2UgPSBudWxscHRyOworICAgIG1fcmVjZWl2ZVNvdXJjZSA9IG51
bGxwdHI7CisKKyAgICBtX3hwY0Nvbm5lY3Rpb24gPSBpZGVudGlmaWVyLnhwY0Nvbm5lY3Rpb247
Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6b3BlbigpCit7CisgICAgaWYgKG1faXNTZXJ2ZXIpIHsK
KyAgICAgICAgQVNTRVJUKG1fcmVjZWl2ZVBvcnQpOworICAgICAgICBBU1NFUlQoIW1fc2VuZFBv
cnQpOworICAgICAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fcmVjZWl2ZVBvcnQpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fcmVjZWl2ZVBvcnQpOworICAgICAgICBBU1NF
UlQobV9zZW5kUG9ydCk7CisgICAgICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQobV9zZW5kUG9y
dCkpOworCisgICAgICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3Nl
bGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZtX3JlY2VpdmVQb3J0KTsKKyAgICAgICAg
aWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgYWxsb2NhdGUgbWFjaCBwb3J0LCBlcnJvciAleDogJXMiLCBrciwgbWFjaF9lcnJvcl9zdHJp
bmcoa3IpKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyNpZiAhUExBVEZPUk0o
V0FUQ0hPUykKKyAgICAgICAgbWFjaF9wb3J0X2d1YXJkKG1hY2hfdGFza19zZWxmKCksIG1fcmVj
ZWl2ZVBvcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4odGhpcyksIHRy
dWUpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIG1hY2hfcG9ydF9zZXRf
YXR0cmlidXRlcyhtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQb3J0LCBNQUNIX1BPUlRfREVO
QVBfUkVDRUlWRVIsIChtYWNoX3BvcnRfaW5mb190KTAsIDApOworI2VuZGlmCisKKyAgICAgICAg
bV9pc0Nvbm5lY3RlZCA9IHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBTZW5kIHRoZSBpbml0
aWFsaXplIG1lc3NhZ2UsIHdoaWNoIGNvbnRhaW5zIGEgc2VuZCByaWdodCBmb3IgdGhlIHNlcnZl
ciB0byB1c2UuCisgICAgICAgIGF1dG8gZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8RW5jb2Rl
cj4oIklQQyIsICJJbml0aWFsaXplQ29ubmVjdGlvbiIsIDApOworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUoTWFjaFBvcnQobV9yZWNlaXZlUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpKTsK
KworICAgICAgICBpbml0aWFsaXplU2VuZFNvdXJjZSgpOworCisgICAgICAgIHNlbmRNZXNzYWdl
KFdURk1vdmUoZW5jb2RlciksIHsgfSk7CisgICAgfQorCisgICAgLy8gQ2hhbmdlIHRoZSBtZXNz
YWdlIHF1ZXVlIGxlbmd0aCBmb3IgdGhlIHJlY2VpdmUgcG9ydC4KKyAgICBzZXRNYWNoUG9ydFF1
ZXVlTGVuZ3RoKG1fcmVjZWl2ZVBvcnQsIE1BQ0hfUE9SVF9RTElNSVRfTEFSR0UpOworCisgICAg
bV9yZWNlaXZlU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0Vf
VFlQRV9NQUNIX1JFQ1YsIG1fcmVjZWl2ZVBvcnQsIDAsIG1fY29ubmVjdGlvblF1ZXVlLT5kaXNw
YXRjaFF1ZXVlKCkpOworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihtX3Jl
Y2VpdmVTb3VyY2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAg
ICAgICAgcmVjZWl2ZVNvdXJjZUV2ZW50SGFuZGxlcigpOworICAgIH0pOworICAgIGRpc3BhdGNo
X3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXIobV9yZWNlaXZlU291cmNlLCBbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCByZWNlaXZlUG9ydCA9IG1fcmVjZWl2ZVBvcnRdIHsKKyNpZiAh
UExBVEZPUk0oV0FUQ0hPUykKKyAgICAgICAgbWFjaF9wb3J0X3VuZ3VhcmQobWFjaF90YXNrX3Nl
bGYoKSwgcmVjZWl2ZVBvcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4o
cHJvdGVjdGVkVGhpcy5wdHIoKSkpOworI2VuZGlmCisgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVm
cyhtYWNoX3Rhc2tfc2VsZigpLCByZWNlaXZlUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUs
IC0xKTsKKyAgICB9KTsKKworICAgIHJlZigpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fY29ubmVj
dGlvblF1ZXVlLT5kaXNwYXRjaFF1ZXVlKCksIF57CisgICAgICAgIGRpc3BhdGNoX3Jlc3VtZSht
X3JlY2VpdmVTb3VyY2UpOworCisgICAgICAgIGlmIChtX3NlbmRTb3VyY2UpCisgICAgICAgICAg
ICBkaXNwYXRjaF9yZXN1bWUobV9zZW5kU291cmNlKTsKKworICAgICAgICBkZXJlZigpOworICAg
IH0pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6c2VuZE1lc3Nh
Z2Uoc3RkOjp1bmlxdWVfcHRyPE1hY2hNZXNzYWdlPiBtZXNzYWdlKQoreworICAgIEFTU0VSVCht
ZXNzYWdlKTsKKyAgICBBU1NFUlQoIW1fcGVuZGluZ091dGdvaW5nTWFjaE1lc3NhZ2UpOworICAg
IEFTU0VSVCghbV9pc0luaXRpYWxpemluZ1NlbmRTb3VyY2UpOworCisgICAgLy8gU2VuZCB0aGUg
bWVzc2FnZS4KKyAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF9tc2cobWVzc2FnZS0+aGVhZGVy
KCksIE1BQ0hfU0VORF9NU0cgfCBNQUNIX1NFTkRfVElNRU9VVCB8IE1BQ0hfU0VORF9OT1RJRlks
IG1lc3NhZ2UtPnNpemUoKSwgMCwgTUFDSF9QT1JUX05VTEwsIE1BQ0hfTVNHX1RJTUVPVVRfTk9O
RSwgTUFDSF9QT1JUX05VTEwpOworICAgIHN3aXRjaCAoa3IpIHsKKyAgICBjYXNlIE1BQ0hfTVNH
X1NVQ0NFU1M6CisgICAgICAgIC8vIFRoZSBrZXJuZWwgaGFzIGFscmVhZHkgYWRvcHRlZCB0aGUg
ZGVzY3JpcHRvcnMuCisgICAgICAgIG1lc3NhZ2UtPmxlYWtEZXNjcmlwdG9ycygpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTUFDSF9TRU5EX1RJTUVEX09VVDoKKyAgICAgICAg
Ly8gV2UgdGltZWQgb3V0LCBzdGFzaCBhd2F5IHRoZSBtZXNzYWdlIGZvciBsYXRlci4KKyAgICAg
ICAgbV9wZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgTUFDSF9TRU5EX0lOVkFMSURfREVTVDoKKyAg
ICAgICAgLy8gVGhlIG90aGVyIGVuZCBoYXMgZGlzYXBwZWFyZWQsIHdlJ2xsIGdldCBhIGRlYWQg
bmFtZSBub3RpZmljYXRpb24gd2hpY2ggd2lsbCBjYXVzZSB1cyB0byBiZSBpbnZhbGlkYXRlZC4K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgV2ViS2l0Ojpz
ZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlvbigoX19icmlkZ2UgQ0ZT
dHJpbmdSZWYpW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJVbmhhbmRsZWQgZXJyb3IgY29k
ZSAleCwgbWVzc2FnZSAnJXM6OiVzJyIsIGtyLCBtZXNzYWdlLT5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkuZGF0YSgpLCBtZXNzYWdlLT5tZXNzYWdlTmFtZSgpLmRhdGEoKV0pOworICAgICAgICBDUkFT
SCgpOworICAgIH0KK30KKworYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2lu
Z01lc3NhZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fcGVuZGluZ091dGdvaW5nTWFjaE1l
c3NhZ2UgJiYgIW1faXNJbml0aWFsaXppbmdTZW5kU291cmNlOworfQorCitib29sIENvbm5lY3Rp
b246OnNlbmRPdXRnb2luZ01lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IGVuY29kZXIp
Cit7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlICYmICFtX2lzSW5p
dGlhbGl6aW5nU2VuZFNvdXJjZSk7CisKKyAgICBhdXRvIGF0dGFjaG1lbnRzID0gZW5jb2Rlci0+
cmVsZWFzZUF0dGFjaG1lbnRzKCk7CisgICAgCisgICAgYXV0byBudW1iZXJPZlBvcnREZXNjcmlw
dG9ycyA9IHN0ZDo6Y291bnRfaWYoYXR0YWNobWVudHMuYmVnaW4oKSwgYXR0YWNobWVudHMuZW5k
KCksIFtdKGF1dG8mIGF0dGFjaG1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gYXR0YWNobWVu
dC50eXBlKCkgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRUeXBlOworICAgIH0pOworCisgICAgYm9v
bCBtZXNzYWdlQm9keUlzT09MID0gZmFsc2U7CisgICAgYXV0byBtZXNzYWdlU2l6ZSA9IE1hY2hN
ZXNzYWdlOjptZXNzYWdlU2l6ZShlbmNvZGVyLT5idWZmZXJTaXplKCksIG51bWJlck9mUG9ydERl
c2NyaXB0b3JzLCBtZXNzYWdlQm9keUlzT09MKTsKKyAgICBpZiAobWVzc2FnZVNpemUgPiBpbmxp
bmVNZXNzYWdlTWF4U2l6ZSkgeworICAgICAgICBtZXNzYWdlQm9keUlzT09MID0gdHJ1ZTsKKyAg
ICAgICAgbWVzc2FnZVNpemUgPSBNYWNoTWVzc2FnZTo6bWVzc2FnZVNpemUoMCwgbnVtYmVyT2ZQ
b3J0RGVzY3JpcHRvcnMsIG1lc3NhZ2VCb2R5SXNPT0wpOworICAgIH0KKworICAgIGF1dG8gbWVz
c2FnZSA9IE1hY2hNZXNzYWdlOjpjcmVhdGUoZW5jb2Rlci0+bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LnRvU3RyaW5nKCksIGVuY29kZXItPm1lc3NhZ2VOYW1lKCkudG9TdHJpbmcoKSwgbWVzc2FnZVNp
emUpOworCisgICAgYXV0byogaGVhZGVyID0gbWVzc2FnZS0+aGVhZGVyKCk7CisgICAgaGVhZGVy
LT5tc2doX2JpdHMgPSBNQUNIX01TR0hfQklUUyhNQUNIX01TR19UWVBFX0NPUFlfU0VORCwgMCk7
CisgICAgaGVhZGVyLT5tc2doX3NpemUgPSBtZXNzYWdlU2l6ZTsKKyAgICBoZWFkZXItPm1zZ2hf
cmVtb3RlX3BvcnQgPSBtX3NlbmRQb3J0OworICAgIGhlYWRlci0+bXNnaF9sb2NhbF9wb3J0ID0g
TUFDSF9QT1JUX05VTEw7CisgICAgaGVhZGVyLT5tc2doX2lkID0gbWVzc2FnZUJvZHlJc09PTCA/
IG91dE9mTGluZUJvZHlNZXNzYWdlSUQgOiBpbmxpbmVCb2R5TWVzc2FnZUlEOworCisgICAgYXV0
byogbWVzc2FnZURhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihoZWFkZXIgKyAxKTsK
KworICAgIGJvb2wgaXNDb21wbGV4ID0gbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMgfHwgbWVzc2Fn
ZUJvZHlJc09PTDsKKyAgICBpZiAoaXNDb21wbGV4KSB7CisgICAgICAgIGhlYWRlci0+bXNnaF9i
aXRzIHw9IE1BQ0hfTVNHSF9CSVRTX0NPTVBMRVg7CisKKyAgICAgICAgYXV0byogYm9keSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfYm9keV90Kj4obWVzc2FnZURhdGEpOworICAgICAgICBi
b2R5LT5tc2doX2Rlc2NyaXB0b3JfY291bnQgPSBudW1iZXJPZlBvcnREZXNjcmlwdG9ycyArIG1l
c3NhZ2VCb2R5SXNPT0w7CisgICAgICAgIG1lc3NhZ2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oYm9keSArIDEpOworCisgICAgICAgIGF1dG8gZ2V0RGVzY3JpcHRvckFuZEFkdmFu
Y2UgPSBbXSh1aW50OF90KiYgZGF0YSwgc3RkOjpzaXplX3QgdG9BZHZhbmNlKSB7CisgICAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19kZXNjcmlwdG9yX3QqPihzdGQ6
OmV4Y2hhbmdlKGRhdGEsIGRhdGEgKyB0b0FkdmFuY2UpKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBmb3IgKGF1dG8mIGF0dGFjaG1lbnQgOiBhdHRhY2htZW50cykgeworICAgICAgICAgICAgQVNT
RVJUKGF0dGFjaG1lbnQudHlwZSgpID09IEF0dGFjaG1lbnQ6Ok1hY2hQb3J0VHlwZSk7CisgICAg
ICAgICAgICBpZiAoYXR0YWNobWVudC50eXBlKCkgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRUeXBl
KSB7CisgICAgICAgICAgICAgICAgYXV0byogZGVzY3JpcHRvciA9IGdldERlc2NyaXB0b3JBbmRB
ZHZhbmNlKG1lc3NhZ2VEYXRhLCBzaXplb2YobWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3QpKTsK
KyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5wb3J0Lm5hbWUgPSBhdHRhY2htZW50LnBvcnQo
KTsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5wb3J0LmRpc3Bvc2l0aW9uID0gYXR0YWNo
bWVudC5kaXNwb3NpdGlvbigpOworICAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItPnBvcnQudHlw
ZSA9IE1BQ0hfTVNHX1BPUlRfREVTQ1JJUFRPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtZXNzYWdlQm9keUlzT09MKSB7CisgICAgICAgICAgICBhdXRvKiBkZXNj
cmlwdG9yID0gZ2V0RGVzY3JpcHRvckFuZEFkdmFuY2UobWVzc2FnZURhdGEsIHNpemVvZihtYWNo
X21zZ19vb2xfZGVzY3JpcHRvcl90KSk7CisgICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRfb2Zf
bGluZS5hZGRyZXNzID0gZW5jb2Rlci0+YnVmZmVyKCk7CisgICAgICAgICAgICBkZXNjcmlwdG9y
LT5vdXRfb2ZfbGluZS5zaXplID0gZW5jb2Rlci0+YnVmZmVyU2l6ZSgpOworICAgICAgICAgICAg
ZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuY29weSA9IE1BQ0hfTVNHX1ZJUlRVQUxfQ09QWTsKKyAg
ICAgICAgICAgIGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLmRlYWxsb2NhdGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLnR5cGUgPSBNQUNIX01TR19PT0xfREVT
Q1JJUFRPUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENvcHkgdGhlIGRhdGEgaWYgaXQg
aXMgbm90IGJlaW5nIHNlbnQgb3V0LW9mLWxpbmUuCisgICAgaWYgKCFtZXNzYWdlQm9keUlzT09M
KQorICAgICAgICBtZW1jcHkobWVzc2FnZURhdGEsIGVuY29kZXItPmJ1ZmZlcigpLCBlbmNvZGVy
LT5idWZmZXJTaXplKCkpOworCisgICAgQVNTRVJUKG1fc2VuZFBvcnQpOworICAgIEFTU0VSVChN
QUNIX1BPUlRfVkFMSUQobV9zZW5kUG9ydCkpOworCisgICAgcmV0dXJuIHNlbmRNZXNzYWdlKFdU
Rk1vdmUobWVzc2FnZSkpOworfQorCit2b2lkIENvbm5lY3Rpb246OmluaXRpYWxpemVTZW5kU291
cmNlKCkKK3sKKyAgICBtX3NlbmRTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BB
VENIX1NPVVJDRV9UWVBFX01BQ0hfU0VORCwgbV9zZW5kUG9ydCwgRElTUEFUQ0hfTUFDSF9TRU5E
X0RFQUQgfCBESVNQQVRDSF9NQUNIX1NFTkRfUE9TU0lCTEUsIG1fY29ubmVjdGlvblF1ZXVlLT5k
aXNwYXRjaFF1ZXVlKCkpOworICAgIG1faXNJbml0aWFsaXppbmdTZW5kU291cmNlID0gdHJ1ZTsK
KworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfcmVnaXN0cmF0aW9uX2hhbmRsZXIobV9zZW5kU291
cmNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIGlm
ICghbV9zZW5kU291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2lzSW5pdGlh
bGl6aW5nU2VuZFNvdXJjZSA9IGZhbHNlOworICAgICAgICByZXN1bWVTZW5kU291cmNlKCk7Cisg
ICAgfSk7CisgICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKG1fc2VuZFNvdXJj
ZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBpZiAo
IW1fc2VuZFNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB1bnNpZ25lZCBs
b25nIGRhdGEgPSBkaXNwYXRjaF9zb3VyY2VfZ2V0X2RhdGEobV9zZW5kU291cmNlKTsKKworICAg
ICAgICBpZiAoZGF0YSAmIERJU1BBVENIX01BQ0hfU0VORF9ERUFEKSB7CisgICAgICAgICAgICBj
b25uZWN0aW9uRGlkQ2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChkYXRhICYgRElTUEFUQ0hfTUFDSF9TRU5EX1BPU1NJQkxFKSB7CisgICAgICAg
ICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aHkgd2UgZ2V0IHNwdXJpb3VzIERJU1BBVENIX01B
Q0hfU0VORF9QT1NTSUJMRSBldmVudHMuCisgICAgICAgICAgICByZXN1bWVTZW5kU291cmNlKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIEFTU0VSVChN
QUNIX1BPUlRfVkFMSUQobV9zZW5kUG9ydCkpOworICAgIG1hY2hfcG9ydF90IHNlbmRQb3J0ID0g
bV9zZW5kUG9ydDsKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2NhbmNlbF9oYW5kbGVyKG1fc2Vu
ZFNvdXJjZSwgXnsKKyAgICAgICAgLy8gUmVsZWFzZSBvdXIgc2VuZCByaWdodC4KKyAgICAgICAg
ZGVhbGxvY2F0ZVNlbmRSaWdodFNhZmVseShzZW5kUG9ydCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
Q29ubmVjdGlvbjo6cmVzdW1lU2VuZFNvdXJjZSgpCit7CisgICAgQVNTRVJUKCFtX2lzSW5pdGlh
bGl6aW5nU2VuZFNvdXJjZSk7CisgICAgaWYgKG1fcGVuZGluZ091dGdvaW5nTWFjaE1lc3NhZ2Up
CisgICAgICAgIHNlbmRNZXNzYWdlKFdURk1vdmUobV9wZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2Fn
ZSkpOworICAgIHNlbmRPdXRnb2luZ01lc3NhZ2VzKCk7Cit9CisKK3N0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8RGVjb2Rlcj4gY3JlYXRlTWVzc2FnZURlY29kZXIobWFjaF9tc2dfaGVhZGVyX3QqIGhl
YWRlcikKK3sKKyAgICBpZiAoIShoZWFkZXItPm1zZ2hfYml0cyAmIE1BQ0hfTVNHSF9CSVRTX0NP
TVBMRVgpKSB7CisgICAgICAgIC8vIFdlIGhhdmUgYSBzaW1wbGUgbWVzc2FnZS4KKyAgICAgICAg
dWludDhfdCogYm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGhlYWRlciArIDEpOwor
ICAgICAgICBzaXplX3QgYm9keVNpemUgPSBoZWFkZXItPm1zZ2hfc2l6ZSAtIHNpemVvZihtYWNo
X21zZ19oZWFkZXJfdCk7CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RGVjb2Rl
cj4oYm9keSwgYm9keVNpemUsIG51bGxwdHIsIFZlY3RvcjxBdHRhY2htZW50PiB7IH0pOworICAg
IH0KKworICAgIGJvb2wgbWVzc2FnZUJvZHlJc09PTCA9IGhlYWRlci0+bXNnaF9pZCA9PSBvdXRP
ZkxpbmVCb2R5TWVzc2FnZUlEOworCisgICAgbWFjaF9tc2dfYm9keV90KiBib2R5ID0gcmVpbnRl
cnByZXRfY2FzdDxtYWNoX21zZ19ib2R5X3QqPihoZWFkZXIgKyAxKTsKKyAgICBtYWNoX21zZ19z
aXplX3QgbnVtRGVzY3JpcHRvcnMgPSBib2R5LT5tc2doX2Rlc2NyaXB0b3JfY291bnQ7CisgICAg
QVNTRVJUKG51bURlc2NyaXB0b3JzKTsKKworICAgIHVpbnQ4X3QqIGRlc2NyaXB0b3JEYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYm9keSArIDEpOworCisgICAgLy8gSWYgdGhlIG1l
c3NhZ2UgYm9keSB3YXMgc2VudCBvdXQtb2YtbGluZSwgZG9uJ3QgdHJlYXQgdGhlIGxhc3QgZGVz
Y3JpcHRvcgorICAgIC8vIGFzIGFuIGF0dGFjaG1lbnQsIHNpbmNlIGl0IGlzIHJlYWxseSB0aGUg
bWVzc2FnZSBib2R5LgorICAgIGlmIChtZXNzYWdlQm9keUlzT09MKQorICAgICAgICAtLW51bURl
c2NyaXB0b3JzOworCisgICAgLy8gQnVpbGQgYXR0YWNobWVudCBsaXN0CisgICAgVmVjdG9yPEF0
dGFjaG1lbnQ+IGF0dGFjaG1lbnRzKG51bURlc2NyaXB0b3JzKTsKKworICAgIGZvciAobWFjaF9t
c2dfc2l6ZV90IGkgPSAwOyBpIDwgbnVtRGVzY3JpcHRvcnM7ICsraSkgeworICAgICAgICBtYWNo
X21zZ19kZXNjcmlwdG9yX3QqIGRlc2NyaXB0b3IgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNn
X2Rlc2NyaXB0b3JfdCo+KGRlc2NyaXB0b3JEYXRhKTsKKyAgICAgICAgQVNTRVJUKGRlc2NyaXB0
b3ItPnR5cGUudHlwZSA9PSBNQUNIX01TR19QT1JUX0RFU0NSSVBUT1IpOworICAgICAgICBpZiAo
ZGVzY3JpcHRvci0+dHlwZS50eXBlICE9IE1BQ0hfTVNHX1BPUlRfREVTQ1JJUFRPUikKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGF0dGFjaG1lbnRzW251bURlc2NyaXB0
b3JzIC0gaSAtIDFdID0gQXR0YWNobWVudChkZXNjcmlwdG9yLT5wb3J0Lm5hbWUsIGRlc2NyaXB0
b3ItPnBvcnQuZGlzcG9zaXRpb24pOworICAgICAgICBkZXNjcmlwdG9yRGF0YSArPSBzaXplb2Yo
bWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3QpOworICAgIH0KKworICAgIGlmIChtZXNzYWdlQm9k
eUlzT09MKSB7CisgICAgICAgIG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCogZGVzY3JpcHRvciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfZGVzY3JpcHRvcl90Kj4oZGVzY3JpcHRvckRhdGEpOwor
ICAgICAgICBBU1NFUlQoZGVzY3JpcHRvci0+dHlwZS50eXBlID09IE1BQ0hfTVNHX09PTF9ERVND
UklQVE9SKTsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3ItPnR5cGUudHlwZSAhPSBNQUNIX01TR19P
T0xfREVTQ1JJUFRPUikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHVp
bnQ4X3QqIG1lc3NhZ2VCb2R5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc2NyaXB0b3ItPm91
dF9vZl9saW5lLmFkZHJlc3MpOworICAgICAgICBzaXplX3QgbWVzc2FnZUJvZHlTaXplID0gZGVz
Y3JpcHRvci0+b3V0X29mX2xpbmUuc2l6ZTsKKworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxEZWNvZGVyPihtZXNzYWdlQm9keSwgbWVzc2FnZUJvZHlTaXplLCBbXShjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgICAgIHZtX2RlYWxsb2NhdGUo
bWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGJ1ZmZlciks
IGxlbmd0aCk7CisgICAgICAgIH0sIFdURk1vdmUoYXR0YWNobWVudHMpKTsKKyAgICB9CisKKyAg
ICB1aW50OF90KiBtZXNzYWdlQm9keSA9IGRlc2NyaXB0b3JEYXRhOworICAgIHNpemVfdCBtZXNz
YWdlQm9keVNpemUgPSBoZWFkZXItPm1zZ2hfc2l6ZSAtIChkZXNjcmlwdG9yRGF0YSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGhlYWRlcikpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8RGVjb2Rlcj4obWVzc2FnZUJvZHksIG1lc3NhZ2VCb2R5U2l6ZSwgbnVsbHB0ciwgV1RG
TW92ZShhdHRhY2htZW50cykpOworfQorCisvLyBUaGUgcmVjZWl2ZSBidWZmZXIgc2l6ZSBzaG91
bGQgYWx3YXlzIGluY2x1ZGUgdGhlIG1heGltdW0gdHJhaWxlciBzaXplLgorc3RhdGljIGNvbnN0
IHNpemVfdCByZWNlaXZlQnVmZmVyU2l6ZSA9IGlubGluZU1lc3NhZ2VNYXhTaXplICsgTUFYX1RS
QUlMRVJfU0laRTsKK3R5cGVkZWYgVmVjdG9yPGNoYXIsIHJlY2VpdmVCdWZmZXJTaXplPiBSZWNl
aXZlQnVmZmVyOworCitzdGF0aWMgbWFjaF9tc2dfaGVhZGVyX3QqIHJlYWRGcm9tTWFjaFBvcnQo
bWFjaF9wb3J0X3QgbWFjaFBvcnQsIFJlY2VpdmVCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBBU1NF
UlQoTUFDSF9QT1JUX1ZBTElEKG1hY2hQb3J0KSk7CisKKyAgICBidWZmZXIucmVzaXplKHJlY2Vp
dmVCdWZmZXJTaXplKTsKKworICAgIG1hY2hfbXNnX2hlYWRlcl90KiBoZWFkZXIgPSByZWludGVy
cHJldF9jYXN0PG1hY2hfbXNnX2hlYWRlcl90Kj4oYnVmZmVyLmRhdGEoKSk7CisgICAga2Vybl9y
ZXR1cm5fdCBrciA9IG1hY2hfbXNnKGhlYWRlciwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9SQ1ZfTEFS
R0UgfCBNQUNIX1JDVl9USU1FT1VUIHwgTUFDSF9SQ1ZfVk9VQ0hFUiwgMCwgYnVmZmVyLnNpemUo
KSwgbWFjaFBvcnQsIDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICBpZiAoa3IgPT0gTUFDSF9SQ1Zf
VElNRURfT1VUKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChrciA9PSBNQUNI
X1JDVl9UT09fTEFSR0UpIHsKKyAgICAgICAgLy8gVGhlIG1lc3NhZ2Ugd2FzIHRvbyBsYXJnZSwg
cmVzaXplIHRoZSBidWZmZXIgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgYnVmZmVyLnJlc2l6ZSho
ZWFkZXItPm1zZ2hfc2l6ZSArIE1BWF9UUkFJTEVSX1NJWkUpOworICAgICAgICBoZWFkZXIgPSBy
ZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2hlYWRlcl90Kj4oYnVmZmVyLmRhdGEoKSk7CisgICAg
ICAgIAorICAgICAgICBrciA9IG1hY2hfbXNnKGhlYWRlciwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9S
Q1ZfTEFSR0UgfCBNQUNIX1JDVl9USU1FT1VUIHwgTUFDSF9SQ1ZfVk9VQ0hFUiwgMCwgYnVmZmVy
LnNpemUoKSwgbWFjaFBvcnQsIDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgQVNTRVJUKGty
ICE9IE1BQ0hfUkNWX1RPT19MQVJHRSk7CisgICAgfQorCisgICAgaWYgKGtyICE9IE1BQ0hfTVNH
X1NVQ0NFU1MpIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIFdlYktpdDo6c2V0Q3Jh
c2hSZXBvcnRBcHBsaWNhdGlvblNwZWNpZmljSW5mb3JtYXRpb24oKF9fYnJpZGdlIENGU3RyaW5n
UmVmKVtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiVW5oYW5kbGVkIGVycm9yIGNvZGUgJXgg
ZnJvbSBtYWNoX21zZywgcmVjZWl2ZSBwb3J0IGlzICV4Iiwga3IsIG1hY2hQb3J0XSk7CisjZW5k
aWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIHJldHVybiBoZWFkZXI7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cmVj
ZWl2ZVNvdXJjZUV2ZW50SGFuZGxlcigpCit7CisgICAgUmVjZWl2ZUJ1ZmZlciBidWZmZXI7CisK
KyAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fcmVjZWl2ZVBvcnQpKTsKKyAgICBtYWNoX21z
Z19oZWFkZXJfdCogaGVhZGVyID0gcmVhZEZyb21NYWNoUG9ydChtX3JlY2VpdmVQb3J0LCBidWZm
ZXIpOworICAgIGlmICghaGVhZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGhl
YWRlci0+bXNnaF9pZCkgeworICAgIGNhc2UgTUFDSF9OT1RJRllfTk9fU0VOREVSUzoKKyAgICAg
ICAgQVNTRVJUKG1faXNTZXJ2ZXIpOworICAgICAgICBpZiAoIW1fc2VuZFBvcnQpCisgICAgICAg
ICAgICBjb25uZWN0aW9uRGlkQ2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBp
bmxpbmVCb2R5TWVzc2FnZUlEOgorICAgIGNhc2Ugb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1BQ0hfTk9USUZZX1NFTkRfT05DRToKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPERlY29k
ZXI+IGRlY29kZXIgPSBjcmVhdGVNZXNzYWdlRGVjb2RlcihoZWFkZXIpOworICAgIGlmICghZGVj
b2RlcikKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGRlY29kZXIt
PnNldEltcG9ydGFuY2VBc3NlcnRpb24oc3RkOjptYWtlX3VuaXF1ZTxJbXBvcnRhbmNlQXNzZXJ0
aW9uPihoZWFkZXIpKTsKKyNlbmRpZgorCisgICAgaWYgKGRlY29kZXItPm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSAiSVBDIiAmJiBkZWNvZGVyLT5tZXNzYWdlTmFtZSgpID09ICJJbml0aWFsaXpl
Q29ubmVjdGlvbiIpIHsKKyAgICAgICAgQVNTRVJUKG1faXNTZXJ2ZXIpOworICAgICAgICBBU1NF
UlQoIW1faXNDb25uZWN0ZWQpOworICAgICAgICBBU1NFUlQoIW1fc2VuZFBvcnQpOworCisgICAg
ICAgIE1hY2hQb3J0IHBvcnQ7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBvcnQpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogRGlzY29ubmVjdC4KKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIG1fc2VuZFBvcnQgPSBwb3J0LnBvcnQoKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChtX3NlbmRQb3J0KSB7CisgICAgICAgICAgICBBU1NFUlQoTUFDSF9QT1JU
X1ZBTElEKG1fcmVjZWl2ZVBvcnQpKTsKKyAgICAgICAgICAgIG1hY2hfcG9ydF90IHByZXZpb3Vz
Tm90aWZpY2F0aW9uUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworICAgICAgICAgICAgYXV0byBrciA9
IG1hY2hfcG9ydF9yZXF1ZXN0X25vdGlmaWNhdGlvbihtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2Vp
dmVQb3J0LCBNQUNIX05PVElGWV9OT19TRU5ERVJTLCAwLCBNQUNIX1BPUlRfTlVMTCwgTUFDSF9N
U0dfVFlQRV9NT1ZFX1NFTkRfT05DRSwgJnByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCk7CisgICAg
ICAgICAgICBBU1NFUlQoa3IgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICAgICAgICAgIGlmIChrciAh
PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBtYWNoX3BvcnRfcmVxdWVz
dF9ub3RpZmljYXRpb24gZmFpbHMsICdwcmV2aW91c05vdGlmaWNhdGlvblBvcnQnIHdpbGwgYmUg
dW5pbml0aWFsaXplZC4KKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIm1hY2hfcG9ydF9yZXF1
ZXN0X25vdGlmaWNhdGlvbiBmYWlsZWQ6ICgleCkgJXMiLCBrciwgbWFjaF9lcnJvcl9zdHJpbmco
a3IpKTsKKyAgICAgICAgICAgICAgICBwcmV2aW91c05vdGlmaWNhdGlvblBvcnQgPSBNQUNIX1BP
UlRfTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHByZXZpb3VzTm90aWZp
Y2F0aW9uUG9ydCAhPSBNQUNIX1BPUlRfTlVMTCkKKyAgICAgICAgICAgICAgICBkZWFsbG9jYXRl
U2VuZFJpZ2h0U2FmZWx5KHByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCk7CisKKyAgICAgICAgICAg
IGluaXRpYWxpemVTZW5kU291cmNlKCk7CisgICAgICAgICAgICBkaXNwYXRjaF9yZXN1bWUobV9z
ZW5kU291cmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOwor
CisgICAgICAgIC8vIFNlbmQgYW55IHBlbmRpbmcgb3V0Z29pbmcgbWVzc2FnZXMuCisgICAgICAg
IHNlbmRPdXRnb2luZ01lc3NhZ2VzKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAg
fQorCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKGRlY29kZXItPm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSAiSVBDIiAmJiBkZWNvZGVyLT5tZXNzYWdlTmFtZSgpID09ICJTZXRF
eGNlcHRpb25Qb3J0IikgeworICAgICAgICBpZiAobV9pc1NlcnZlcikgeworICAgICAgICAgICAg
Ly8gU2VydmVyIGNvbm5lY3Rpb25zIGFyZW4ndCBzdXBwb3NlZCB0byBoYXZlIHRoZWlyIGV4Y2Vw
dGlvbiBwb3J0cyBvdmVycmlkZGVuLiBUcmVhdCB0aGlzIGFzIGFuIGludmFsaWQgbWVzc2FnZS4K
KyAgICAgICAgICAgIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lUmVmZXJlbmNl
ID0gZGVjb2Rlci0+bWVzc2FnZVJlY2VpdmVyTmFtZSgpOworICAgICAgICAgICAgU3RyaW5nIG1l
c3NhZ2VSZWNlaXZlck5hbWUoU3RyaW5nKG1lc3NhZ2VSZWNlaXZlck5hbWVSZWZlcmVuY2UuZGF0
YSgpLCBtZXNzYWdlUmVjZWl2ZXJOYW1lUmVmZXJlbmNlLnNpemUoKSkpOworICAgICAgICAgICAg
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lUmVmZXJlbmNlID0gZGVjb2Rlci0+bWVzc2FnZU5h
bWUoKTsKKyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlTmFtZShTdHJpbmcobWVzc2FnZU5hbWVS
ZWZlcmVuY2UuZGF0YSgpLCBtZXNzYWdlTmFtZVJlZmVyZW5jZS5zaXplKCkpKTsKKworICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIG1lc3NhZ2VSZWNlaXZlck5hbWUgPSBXVEZNb3ZlKG1lc3NhZ2VSZWNlaXZlck5hbWUp
LCBtZXNzYWdlTmFtZSA9IFdURk1vdmUobWVzc2FnZU5hbWUpXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdl
KG1lc3NhZ2VSZWNlaXZlck5hbWUudXRmOCgpLCBtZXNzYWdlTmFtZS51dGY4KCkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWFjaFBv
cnQgZXhjZXB0aW9uUG9ydDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZXhjZXB0aW9u
UG9ydCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2V0TWFjaEV4Y2VwdGlvblBv
cnQoZXhjZXB0aW9uUG9ydC5wb3J0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKFdURk1vdmUoZGVjb2RlcikpOworfSAgICAK
KworSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIENvbm5lY3Rpb246OmlkZW50aWZpZXIoKSBj
b25zdAoreworICAgIHJldHVybiBJZGVudGlmaWVyKG1faXNTZXJ2ZXIgPyBtX3JlY2VpdmVQb3J0
IDogbV9zZW5kUG9ydCwgbV94cGNDb25uZWN0aW9uKTsKK30KKworT3B0aW9uYWw8YXVkaXRfdG9r
ZW5fdD4gQ29ubmVjdGlvbjo6Z2V0QXVkaXRUb2tlbigpCit7CisgICAgaWYgKCFtX3hwY0Nvbm5l
Y3Rpb24pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisgICAgYXVkaXRfdG9r
ZW5fdCBhdWRpdFRva2VuOworICAgIHhwY19jb25uZWN0aW9uX2dldF9hdWRpdF90b2tlbihtX3hw
Y0Nvbm5lY3Rpb24uZ2V0KCksICZhdWRpdFRva2VuKTsKKyAgICByZXR1cm4gV1RGTW92ZShhdWRp
dFRva2VuKTsKK30KKworYm9vbCBDb25uZWN0aW9uOjpraWxsKCkKK3sKKyAgICBpZiAobV94cGND
b25uZWN0aW9uKSB7CisgICAgICAgIHhwY19jb25uZWN0aW9uX2tpbGwobV94cGNDb25uZWN0aW9u
LmdldCgpLCBTSUdLSUxMKTsKKyAgICAgICAgbV93YXNLaWxsZWQgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitzdGF0aWMg
dm9pZCBBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihib29sIHN1c3Bl
bmRlZCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgX0FYVUlFbGVtZW50Tm90aWZ5UHJvY2Vz
c1N1c3BlbmRTdGF0dXMoc3VzcGVuZGVkID8gQVhTdXNwZW5kU3RhdHVzU3VzcGVuZGVkIDogQVhT
dXNwZW5kU3RhdHVzUnVubmluZyk7CisjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFVJ
QWNjZXNzaWJpbGl0eVBvc3ROb3RpZmljYXRpb24oa0FYUGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNh
dGlvbiwgQHsgQCJwaWQiIDogQChnZXRwaWQoKSksIEAic3VzcGVuZGVkIiA6IEAoc3VzcGVuZGVk
KSB9KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHN1c3BlbmRlZCk7CisjZW5kaWYKK30KKyAg
ICAKK3ZvaWQgQ29ubmVjdGlvbjo6d2lsbFNlbmRTeW5jTWVzc2FnZShPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKK3sKKyAgICBpZiAoc2VuZFN5bmNPcHRpb25zLmNv
bnRhaW5zKElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNw
ZW5kKSAmJiBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQor
ICAgICAgICBBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbih0cnVlKTsK
K30KKwordm9pZCBDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5k
U3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQoreworICAgIGlmIChzZW5kU3luY09wdGlvbnMu
Y29udGFpbnMoSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1
c3BlbmQpICYmIFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkp
CisgICAgICAgIEFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGZhbHNl
KTsKK30KKworcGlkX3QgQ29ubmVjdGlvbjo6cmVtb3RlUHJvY2Vzc0lEKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1feHBjQ29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
eHBjX2Nvbm5lY3Rpb25fZ2V0X3BpZChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpOworfQorICAgIAor
fSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9jb2NvYS9JbXBvcnRhbmNlQXNzZXJ0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9jb2NvYS9JbXBvcnRhbmNlQXNzZXJ0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjJiZDg4NTQ0NzVhMDJh
ODRiMzI0NzdlMGRiZjkyOWUxNzQ4ZGU1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL2NvY29hL0ltcG9ydGFuY2VBc3NlcnRpb24uaApAQCAtMCwwICsxLDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNp
bmNsdWRlIDxtYWNoL21lc3NhZ2UuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEltcG9y
dGFuY2VBc3NlcnRpb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEltcG9ydGFuY2VBc3NlcnRpb24pOworCitwdWJsaWM6CisgICAgZXhw
bGljaXQgSW1wb3J0YW5jZUFzc2VydGlvbihtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVyKQorICAg
ICAgICA6IG1fdm91Y2hlcigwKQorICAgIHsKKyAgICAgICAgaWYgKE1BQ0hfTVNHSF9CSVRTX0hB
U19WT1VDSEVSKGhlYWRlci0+bXNnaF9iaXRzKSkgeworICAgICAgICAgICAgbV92b3VjaGVyID0g
aGVhZGVyLT5tc2doX3ZvdWNoZXJfcG9ydDsKKyAgICAgICAgICAgIGhlYWRlci0+bXNnaF92b3Vj
aGVyX3BvcnQgPSBNQUNIX1ZPVUNIRVJfTlVMTDsKKyAgICAgICAgICAgIGhlYWRlci0+bXNnaF9i
aXRzICY9IH4oTUFDSF9NU0dIX0JJVFNfVk9VQ0hFUl9NQVNLIHwgTUFDSF9NU0dIX0JJVFNfUkFJ
U0VJTVApOworICAgICAgICB9CisgICAgfQorCisgICAgfkltcG9ydGFuY2VBc3NlcnRpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fdm91Y2hlcikgeworICAgICAgICAgICAga2Vybl9yZXR1cm5f
dCBrciA9IG1hY2hfdm91Y2hlcl9kZWFsbG9jYXRlKG1fdm91Y2hlcik7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGtyLCAha3IpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAg
IG1hY2hfdm91Y2hlcl90IG1fdm91Y2hlcjsKK307CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL2NvY29hL01hY2hN
ZXNzYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL2NvY29hL01hY2hNZXNzYWdl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lYzg0Yzk2YTEzOWFmODA1ZjEzZjA3YWM3Y2JlMDI0YjBmNTNkYTIz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvTWFj
aE1lc3NhZ2UuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTWFjaE1lc3NhZ2UuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisKK25hbWVzcGFjZSBJUEMgeworCitzdGQ6OnVuaXF1
ZV9wdHI8TWFjaE1lc3NhZ2U+IE1hY2hNZXNzYWdlOjpjcmVhdGUoQ1N0cmluZyYmIG1lc3NhZ2VS
ZWNlaXZlck5hbWUsIENTdHJpbmcmJiBtZXNzYWdlTmFtZSwgc2l6ZV90IHNpemUpCit7CisgICAg
dm9pZCogbWVtb3J5ID0gV1RGOjpmYXN0WmVyb2VkTWFsbG9jKHNpemVvZihNYWNoTWVzc2FnZSkg
KyBzaXplKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE1hY2hNZXNzYWdlPiB7IG5ldyAo
Tm90TnVsbCwgbWVtb3J5KSBNYWNoTWVzc2FnZSB7IFdURk1vdmUobWVzc2FnZVJlY2VpdmVyTmFt
ZSksIFdURk1vdmUobWVzc2FnZU5hbWUpLCBzaXplIH0gfTsKK30KKworTWFjaE1lc3NhZ2U6Ok1h
Y2hNZXNzYWdlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYgbWVzc2Fn
ZU5hbWUsIHNpemVfdCBzaXplKQorICAgIDogbV9tZXNzYWdlUmVjZWl2ZXJOYW1lKFdURk1vdmUo
bWVzc2FnZVJlY2VpdmVyTmFtZSkpCisgICAgLCBtX21lc3NhZ2VOYW1lKFdURk1vdmUobWVzc2Fn
ZU5hbWUpKQorICAgICwgbV9zaXplIHsgc2l6ZSB9Cit7Cit9CisKK01hY2hNZXNzYWdlOjp+TWFj
aE1lc3NhZ2UoKQoreworICAgIGlmIChtX3Nob3VsZEZyZWVEZXNjcmlwdG9ycykKKyAgICAgICAg
OjptYWNoX21zZ19kZXN0cm95KGhlYWRlcigpKTsKK30KKworc2l6ZV90IE1hY2hNZXNzYWdlOjpt
ZXNzYWdlU2l6ZShzaXplX3QgYm9keVNpemUsIHNpemVfdCBwb3J0RGVzY3JpcHRvckNvdW50LCBz
aXplX3QgbWVtb3J5RGVzY3JpcHRvckNvdW50KQoreworICAgIHNpemVfdCBtZXNzYWdlU2l6ZSA9
IHNpemVvZihtYWNoX21zZ19oZWFkZXJfdCkgKyBib2R5U2l6ZTsKKworICAgIGlmIChwb3J0RGVz
Y3JpcHRvckNvdW50IHx8IG1lbW9yeURlc2NyaXB0b3JDb3VudCkgeworICAgICAgICBtZXNzYWdl
U2l6ZSArPSBzaXplb2YobWFjaF9tc2dfYm9keV90KTsKKyAgICAgICAgbWVzc2FnZVNpemUgKz0g
KHBvcnREZXNjcmlwdG9yQ291bnQgKiBzaXplb2YobWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3Qp
KTsKKyAgICAgICAgbWVzc2FnZVNpemUgKz0gKG1lbW9yeURlc2NyaXB0b3JDb3VudCAqIHNpemVv
ZihtYWNoX21zZ19vb2xfZGVzY3JpcHRvcl90KSk7CisgICAgfQorCisgICAgcmV0dXJuIHJvdW5k
X21zZyhtZXNzYWdlU2l6ZSk7Cit9CisKK3ZvaWQgTWFjaE1lc3NhZ2U6OmxlYWtEZXNjcmlwdG9y
cygpCit7CisgICAgbV9zaG91bGRGcmVlRGVzY3JpcHRvcnMgPSBmYWxzZTsKK30KKworfQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9jb2NvYS9NYWNoTWVzc2FnZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
Y29jb2EvTWFjaE1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDEzMWM3ZjBkM2VmYTM4YWY0MDU0ZTI3
NmQ0ZmMyODZjOTM0NDJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvY29jb2EvTWFjaE1lc3NhZ2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShDT0NPQSkKKworI2luY2x1ZGUgPG1hY2gvbWVz
c2FnZS5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBNYWNoTWVzc2FnZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNYWNo
TWVzc2FnZT4gY3JlYXRlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYg
bWVzc2FnZU5hbWUsIHNpemVfdCk7CisgICAgfk1hY2hNZXNzYWdlKCk7CisKKyAgICBzdGF0aWMg
c2l6ZV90IG1lc3NhZ2VTaXplKHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IHBvcnREZXNjcmlwdG9y
Q291bnQsIHNpemVfdCBtZW1vcnlEZXNjcmlwdG9yQ291bnQpOworCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVy
KCkgeyByZXR1cm4gbV9tZXNzYWdlSGVhZGVyOyB9CisKKyAgICB2b2lkIGxlYWtEZXNjcmlwdG9y
cygpOworCisgICAgY29uc3QgQ1N0cmluZyYgbWVzc2FnZVJlY2VpdmVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTmFtZTsgfQorICAgIGNvbnN0IENTdHJpbmcmIG1lc3Nh
Z2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlTmFtZTsgfQorCitwcml2YXRlOgorICAg
IE1hY2hNZXNzYWdlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYgbWVz
c2FnZU5hbWUsIHNpemVfdCk7CisKKyAgICBDU3RyaW5nIG1fbWVzc2FnZVJlY2VpdmVyTmFtZTsK
KyAgICBDU3RyaW5nIG1fbWVzc2FnZU5hbWU7CisgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICBib29s
IG1fc2hvdWxkRnJlZURlc2NyaXB0b3JzIHsgdHJ1ZSB9OworICAgIG1hY2hfbXNnX2hlYWRlcl90
IG1fbWVzc2FnZUhlYWRlcltdOworfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0Ep
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9jb2NvYS9NYWNoUG9ydC5o
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvTWFjaFBvcnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZDBjMzY0MDgyMzc3ZWNhMzZlMzNiOGZjYjg1MWNiNjc1OTBhYzRmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvTWFjaFBvcnQuaApAQCAtMCww
ICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBdHRhY2ht
ZW50LmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKKworbmFt
ZXNwYWNlIElQQyB7CisKK2NsYXNzIE1hY2hQb3J0IHsKK3B1YmxpYzoKKyAgICBNYWNoUG9ydCgp
CisgICAgICAgIDogbV9wb3J0KE1BQ0hfUE9SVF9OVUxMKQorICAgICAgICAsIG1fZGlzcG9zaXRp
b24oMCkKKyAgICB7CisgICAgfQorCisgICAgTWFjaFBvcnQobWFjaF9wb3J0X25hbWVfdCBwb3J0
LCBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbikKKyAgICAgICAgOiBtX3BvcnQocG9y
dCkKKyAgICAgICAgLCBtX2Rpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
ZW5jb2RlciA8PCBBdHRhY2htZW50KG1fcG9ydCwgbV9kaXNwb3NpdGlvbik7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1hY2hQb3J0JiBwKQorICAg
IHsKKyAgICAgICAgQXR0YWNobWVudCBhdHRhY2htZW50OworICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGF0dGFjaG1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgcC5tX3BvcnQgPSBhdHRhY2htZW50LnBvcnQoKTsKKyAgICAgICAgcC5tX2Rpc3Bv
c2l0aW9uID0gYXR0YWNobWVudC5kaXNwb3NpdGlvbigpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBtYWNoX3BvcnRfbmFtZV90IHBvcnQoKSBjb25zdCB7IHJldHVybiBtX3Bv
cnQ7IH0KKyAgICBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzcG9zaXRpb247IH0KKworcHJpdmF0ZToKKyAgICBtYWNoX3BvcnRfbmFtZV90IG1f
cG9ydDsKKyAgICBtYWNoX21zZ190eXBlX25hbWVfdCBtX2Rpc3Bvc2l0aW9uOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9t
YWMvQ29ubmVjdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9Db25u
ZWN0aW9uTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzVmMTFjMGNhY2Q5
YTdkODcyOTg4NjI0Y2IyOTQ1MzAxMzIzNWJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9Db25uZWN0
aW9uTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiQ29ubmVjdGlvbi5oIgotCi0jaW1wb3J0
ICJEYXRhUmVmZXJlbmNlLmgiCi0jaW1wb3J0ICJJbXBvcnRhbmNlQXNzZXJ0aW9uLmgiCi0jaW1w
b3J0ICJNYWNoTWVzc2FnZS5oIgotI2ltcG9ydCAiTWFjaFBvcnQuaCIKLSNpbXBvcnQgIk1hY2hV
dGlsaXRpZXMuaCIKLSNpbXBvcnQgIldLQ3Jhc2hSZXBvcnRlci5oIgotI2ltcG9ydCA8V2ViQ29y
ZS9BWE9iamVjdENhY2hlLmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hfZXJyb3IuaD4KLSNpbXBvcnQg
PG1hY2gvdm1fbWFwLmg+Ci0jaW1wb3J0IDxzeXMvbW1hbi5oPgotI2ltcG9ydCA8d3RmL01hY2hT
ZW5kUmlnaHQuaD4KLSNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+Ci0jaW1wb3J0IDx3dGYvc3BpL2Rh
cndpbi9YUENTUEkuaD4KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW1wb3J0ICJQcm9j
ZXNzQXNzZXJ0aW9uLmgiCi0jaW1wb3J0IDxVSUtpdC9VSUFjY2Vzc2liaWxpdHkuaD4KLQotI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxBWFJ1bnRpbWUvQVhEZWZpbmVzLmg+
Ci0jaW1wb3J0IDxBWFJ1bnRpbWUvQVhOb3RpZmljYXRpb25Db25zdGFudHMuaD4KLSNlbHNlCi0j
ZGVmaW5lIGtBWFBpZFN0YXR1c0NoYW5nZWROb3RpZmljYXRpb24gMAotI2VuZGlmCi0KLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNp
bXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlc1ByaXYuaD4KLSNl
bHNlCi10eXBlZGVmIGVudW0gewotICAgIEFYU3VzcGVuZFN0YXR1c1J1bm5pbmcgPSAwLAotICAg
IEFYU3VzcGVuZFN0YXR1c1N1c3BlbmRlZCwKLX0gQVhTdXNwZW5kU3RhdHVzOwotI2VuZGlmCi0K
LWV4dGVybiAiQyIgQVhFcnJvciBfQVhVSUVsZW1lbnROb3RpZnlQcm9jZXNzU3VzcGVuZFN0YXR1
cyhBWFN1c3BlbmRTdGF0dXMpOwotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi1uYW1lc3Bh
Y2UgSVBDIHsKLQotc3RhdGljIGNvbnN0IHNpemVfdCBpbmxpbmVNZXNzYWdlTWF4U2l6ZSA9IDQw
OTY7Ci0KLS8vIEFyYml0cmFyeSBtZXNzYWdlIElEcyB0aGF0IGRvIG5vdCBjb2xsaWRlIHdpdGgg
TWFjaCBub3RpZmljYXRpb24gbWVzc2FnZXMgKHVzZWQgbXkgaW5pdGlhbHMpLgotY29uc3RleHBy
IG1hY2hfbXNnX2lkX3QgaW5saW5lQm9keU1lc3NhZ2VJRCA9IDB4ZGJhMGRiYTsKLWNvbnN0ZXhw
ciBtYWNoX21zZ19pZF90IG91dE9mTGluZUJvZHlNZXNzYWdlSUQgPSAweGRiYTFkYmE7Ci0KLS8v
IENvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nIGRvZXMgdHdvIHRoaW5nczoKLS8vIDEpIEl0
IHNldHMgYSB3YXRjaGRvZyB0aW1lciB0byBraWxsIHRoZSBwZWVyZWQgcHJvY2Vzcy4KLS8vIDIp
IE9uIGlPUywgbWFrZSB0aGUgcHJvY2VzcyBydW5uYWJsZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRo
ZSB3YXRjaGRvZwotLy8gICAgdG8gZW5zdXJlIGl0IGhhcyBhIGNoYW5jZSB0byB0ZXJtaW5hdGUg
Y2xlYW5seS4KLWNsYXNzIENvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBjcmVhdGVDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZyhPU09i
amVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiYgeHBjQ29ubmVjdGlvbiwgU2Vjb25kcyBpbnRlcnZh
bCkKLSAgICB7Ci0gICAgICAgIG5ldyBDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZyh4cGND
b25uZWN0aW9uLCBpbnRlcnZhbCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBDb25uZWN0
aW9uVGVybWluYXRpb25XYXRjaGRvZyhPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiYgeHBj
Q29ubmVjdGlvbiwgU2Vjb25kcyBpbnRlcnZhbCkKLSAgICAgICAgOiBtX3hwY0Nvbm5lY3Rpb24o
eHBjQ29ubmVjdGlvbikKLSAgICAgICAgLCBtX3dhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigp
LCB0aGlzLCAmQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2c6OndhdGNoZG9nVGltZXJGaXJl
ZCkKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAsIG1fYXNzZXJ0aW9uKHN0ZDo6
bWFrZV91bmlxdWU8V2ViS2l0OjpQcm9jZXNzQW5kVUlBc3NlcnRpb24+KHhwY19jb25uZWN0aW9u
X2dldF9waWQobV94cGNDb25uZWN0aW9uLmdldCgpKSwgIkNvbm5lY3Rpb25UZXJtaW5hdGlvbldh
dGNoZG9nIl9zLCBXZWJLaXQ6OkFzc2VydGlvblN0YXRlOjpCYWNrZ3JvdW5kKSkKLSNlbmRpZgot
ICAgIHsKLSAgICAgICAgbV93YXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgd2F0Y2hkb2dUaW1lckZpcmVkKCkKLSAgICB7Ci0gICAgICAg
IHhwY19jb25uZWN0aW9uX2tpbGwobV94cGNDb25uZWN0aW9uLmdldCgpLCBTSUdLSUxMKTsKLSAg
ICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgfQotCi0gICAgT1NPYmplY3RQdHI8eHBjX2Nvbm5lY3Rp
b25fdD4gbV94cGNDb25uZWN0aW9uOwotICAgIFJ1bkxvb3A6OlRpbWVyPENvbm5lY3Rpb25UZXJt
aW5hdGlvbldhdGNoZG9nPiBtX3dhdGNoZG9nVGltZXI7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpQcm9jZXNzQW5kVUlBc3NlcnRpb24+IG1f
YXNzZXJ0aW9uOwotI2VuZGlmCi19OwotICAgIAotdm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUlu
dmFsaWRhdGUoKQotewotICAgIGlmICghbV9pc0Nvbm5lY3RlZCkgewotICAgICAgICBpZiAobV9z
ZW5kUG9ydCkgewotICAgICAgICAgICAgQVNTRVJUKCFtX2lzU2VydmVyKTsKLSAgICAgICAgICAg
IGRlYWxsb2NhdGVTZW5kUmlnaHRTYWZlbHkobV9zZW5kUG9ydCk7Ci0gICAgICAgICAgICBtX3Nl
bmRQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9yZWNl
aXZlU291cmNlKSB7Ci0gICAgICAgICAgICAvLyBGb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZSwg
d2hlbiBtX2lzU2VydmVyIGlzIHRydWUgYW5kIG9wZW4oKSBoYXMgYmVlbiBjYWxsZWQsIG1fcmVj
ZWl2ZVNvdXJjZSBoYXMgYmVlbiBpbml0aWFsaXplZAotICAgICAgICAgICAgLy8gYnV0IG1faXND
b25uZWN0ZWQgaGFzIG5vdCBiZWVuIHNldCB0byB0cnVlIHlldC4gSW4gdGhpcyBjYXNlLCB3ZSBu
ZWVkIHRvIGNhbmNlbCBtX3JlY2VpdmVTb3VyY2UgaW5zdGVhZCBvZiBkZXN0cm95aW5nCi0gICAg
ICAgICAgICAvLyBtX3JlY2VpdmVQb3J0IG91cnNlbHZlcy4KLSAgICAgICAgICAgIEFTU0VSVCht
X2lzU2VydmVyKTsKLSAgICAgICAgICAgIGNhbmNlbFJlY2VpdmVTb3VyY2UoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtX3JlY2VpdmVQb3J0KSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9p
c1NlcnZlcik7Ci0jaWYgIVBMQVRGT1JNKFdBVENIT1MpCi0gICAgICAgICAgICBtYWNoX3BvcnRf
dW5ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQb3J0LCByZWludGVycHJldF9jYXN0
PG1hY2hfcG9ydF9jb250ZXh0X3Q+KHRoaXMpKTsKLSNlbmRpZgotICAgICAgICAgICAgbWFjaF9w
b3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIG1fcmVjZWl2ZVBvcnQsIE1BQ0hfUE9SVF9S
SUdIVF9SRUNFSVZFLCAtMSk7Ci0gICAgICAgICAgICBtX3JlY2VpdmVQb3J0ID0gTUFDSF9QT1JU
X05VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wZW5k
aW5nT3V0Z29pbmdNYWNoTWVzc2FnZSA9IG51bGxwdHI7Ci0gICAgbV9pc0luaXRpYWxpemluZ1Nl
bmRTb3VyY2UgPSBmYWxzZTsKLSAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7Ci0KLSAgICBBU1NF
UlQobV9zZW5kUG9ydCk7Ci0gICAgQVNTRVJUKG1fcmVjZWl2ZVBvcnQpOwotCi0gICAgLy8gVW5y
ZWdpc3RlciBvdXIgcG9ydHMuCi0gICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChtX3NlbmRTb3Vy
Y2UpOwotICAgIGRpc3BhdGNoX3JlbGVhc2UobV9zZW5kU291cmNlKTsKLSAgICBtX3NlbmRTb3Vy
Y2UgPSBudWxscHRyOwotICAgIG1fc2VuZFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLQotICAgIGNh
bmNlbFJlY2VpdmVTb3VyY2UoKTsKLX0KLQotdm9pZCBDb25uZWN0aW9uOjpjYW5jZWxSZWNlaXZl
U291cmNlKCkKLXsKLSAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKG1fcmVjZWl2ZVNvdXJjZSk7
Ci0gICAgZGlzcGF0Y2hfcmVsZWFzZShtX3JlY2VpdmVTb3VyY2UpOwotICAgIG1fcmVjZWl2ZVNv
dXJjZSA9IG51bGxwdHI7Ci0gICAgbV9yZWNlaXZlUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotfQot
ICAgIAotdm9pZCBDb25uZWN0aW9uOjp0ZXJtaW5hdGVTb29uKFNlY29uZHMgaW50ZXJ2YWwpCi17
Ci0gICAgaWYgKG1feHBjQ29ubmVjdGlvbikKLSAgICAgICAgQ29ubmVjdGlvblRlcm1pbmF0aW9u
V2F0Y2hkb2c6OmNyZWF0ZUNvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nKG1feHBjQ29ubmVj
dGlvbiwgaW50ZXJ2YWwpOwotfQotICAgIAotdm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRp
YWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIGlmICghTUFDSF9QT1JUX1ZBTElE
KGlkZW50aWZpZXIucG9ydCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzU2VydmVy
KSB7Ci0gICAgICAgIG1fcmVjZWl2ZVBvcnQgPSBpZGVudGlmaWVyLnBvcnQ7Ci0gICAgICAgIG1f
c2VuZFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLQotI2lmICFQTEFURk9STShXQVRDSE9TKQotICAg
ICAgICBtYWNoX3BvcnRfZ3VhcmQobWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9ydCwgcmVp
bnRlcnByZXRfY2FzdDxtYWNoX3BvcnRfY29udGV4dF90Pih0aGlzKSwgdHJ1ZSk7Ci0jZW5kaWYK
LSAgICB9IGVsc2UgewotICAgICAgICBtX3JlY2VpdmVQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0g
ICAgICAgIG1fc2VuZFBvcnQgPSBpZGVudGlmaWVyLnBvcnQ7Ci0gICAgfQotCi0gICAgbV9zZW5k
U291cmNlID0gbnVsbHB0cjsKLSAgICBtX3JlY2VpdmVTb3VyY2UgPSBudWxscHRyOwotCi0gICAg
bV94cGNDb25uZWN0aW9uID0gaWRlbnRpZmllci54cGNDb25uZWN0aW9uOwotfQotCi1ib29sIENv
bm5lY3Rpb246Om9wZW4oKQotewotICAgIGlmIChtX2lzU2VydmVyKSB7Ci0gICAgICAgIEFTU0VS
VChtX3JlY2VpdmVQb3J0KTsKLSAgICAgICAgQVNTRVJUKCFtX3NlbmRQb3J0KTsKLSAgICAgICAg
QVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtX3JlY2VpdmVQb3J0KSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKCFtX3JlY2VpdmVQb3J0KTsKLSAgICAgICAgQVNTRVJUKG1fc2VuZFBvcnQp
OwotICAgICAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fc2VuZFBvcnQpKTsKLQotICAgICAg
ICBhdXRvIGtyID0gbWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9S
VF9SSUdIVF9SRUNFSVZFLCAmbV9yZWNlaXZlUG9ydCk7Ci0gICAgICAgIGlmIChrciAhPSBLRVJO
X1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIG1h
Y2ggcG9ydCwgZXJyb3IgJXg6ICVzIiwga3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSk7Ci0gICAg
ICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0jaWYgIVBMQVRGT1JNKFdBVENIT1MpCi0gICAg
ICAgIG1hY2hfcG9ydF9ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQb3J0LCByZWlu
dGVycHJldF9jYXN0PG1hY2hfcG9ydF9jb250ZXh0X3Q+KHRoaXMpLCB0cnVlKTsKLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBtYWNoX3BvcnRfc2V0X2F0dHJpYnV0ZXMobWFj
aF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9ydCwgTUFDSF9QT1JUX0RFTkFQX1JFQ0VJVkVSLCAo
bWFjaF9wb3J0X2luZm9fdCkwLCAwKTsKLSNlbmRpZgotCi0gICAgICAgIG1faXNDb25uZWN0ZWQg
PSB0cnVlOwotICAgICAgICAKLSAgICAgICAgLy8gU2VuZCB0aGUgaW5pdGlhbGl6ZSBtZXNzYWdl
LCB3aGljaCBjb250YWlucyBhIHNlbmQgcmlnaHQgZm9yIHRoZSBzZXJ2ZXIgdG8gdXNlLgotICAg
ICAgICBhdXRvIGVuY29kZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEVuY29kZXI+KCJJUEMiLCAiSW5p
dGlhbGl6ZUNvbm5lY3Rpb24iLCAwKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKE1hY2hQb3J0
KG1fcmVjZWl2ZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKSk7Ci0KLSAgICAgICAgaW5p
dGlhbGl6ZVNlbmRTb3VyY2UoKTsKLQotICAgICAgICBzZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29k
ZXIpLCB7IH0pOwotICAgIH0KLQotICAgIC8vIENoYW5nZSB0aGUgbWVzc2FnZSBxdWV1ZSBsZW5n
dGggZm9yIHRoZSByZWNlaXZlIHBvcnQuCi0gICAgc2V0TWFjaFBvcnRRdWV1ZUxlbmd0aChtX3Jl
Y2VpdmVQb3J0LCBNQUNIX1BPUlRfUUxJTUlUX0xBUkdFKTsKLQotICAgIFJlZlB0cjxDb25uZWN0
aW9uPiBjb25uZWN0aW9uKHRoaXMpOwotICAgIG1fcmVjZWl2ZVNvdXJjZSA9IGRpc3BhdGNoX3Nv
dXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9SRUNWLCBtX3JlY2VpdmVQb3J0
LCAwLCBtX2Nvbm5lY3Rpb25RdWV1ZS0+ZGlzcGF0Y2hRdWV1ZSgpKTsKLSAgICBkaXNwYXRjaF9z
b3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIobV9yZWNlaXZlU291cmNlLCBbY29ubmVjdGlvbl0gewot
ICAgICAgICBjb25uZWN0aW9uLT5yZWNlaXZlU291cmNlRXZlbnRIYW5kbGVyKCk7Ci0gICAgfSk7
Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9jYW5jZWxfaGFuZGxlcihtX3JlY2VpdmVTb3VyY2Us
IFtjb25uZWN0aW9uLCByZWNlaXZlUG9ydCA9IG1fcmVjZWl2ZVBvcnRdIHsKLSNpZiBQTEFURk9S
TShXQVRDSE9TKQotICAgICAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0jZWxzZQotICAg
ICAgICBtYWNoX3BvcnRfdW5ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCByZWNlaXZlUG9ydCwgcmVp
bnRlcnByZXRfY2FzdDxtYWNoX3BvcnRfY29udGV4dF90Pihjb25uZWN0aW9uLmdldCgpKSk7Ci0j
ZW5kaWYKLSAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIHJlY2Vp
dmVQb3J0LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwotICAgIH0pOwotCi0gICAgcmVm
KCk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMobV9jb25uZWN0aW9uUXVldWUtPmRpc3BhdGNoUXVldWUo
KSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKG1fcmVjZWl2ZVNvdXJjZSk7Ci0KLSAgICAg
ICAgaWYgKG1fc2VuZFNvdXJjZSkKLSAgICAgICAgICAgIGRpc3BhdGNoX3Jlc3VtZShtX3NlbmRT
b3VyY2UpOwotCi0gICAgICAgIGRlcmVmKCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDb25uZWN0aW9uOjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8TWFjaE1l
c3NhZ2U+IG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKG1lc3NhZ2UpOwotICAgIEFTU0VSVCghbV9w
ZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2FnZSk7Ci0gICAgQVNTRVJUKCFtX2lzSW5pdGlhbGl6aW5n
U2VuZFNvdXJjZSk7Ci0KLSAgICAvLyBTZW5kIHRoZSBtZXNzYWdlLgotICAgIGtlcm5fcmV0dXJu
X3Qga3IgPSBtYWNoX21zZyhtZXNzYWdlLT5oZWFkZXIoKSwgTUFDSF9TRU5EX01TRyB8IE1BQ0hf
U0VORF9USU1FT1VUIHwgTUFDSF9TRU5EX05PVElGWSwgbWVzc2FnZS0+c2l6ZSgpLCAwLCBNQUNI
X1BPUlRfTlVMTCwgTUFDSF9NU0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7Ci0gICAg
c3dpdGNoIChrcikgewotICAgIGNhc2UgTUFDSF9NU0dfU1VDQ0VTUzoKLSAgICAgICAgLy8gVGhl
IGtlcm5lbCBoYXMgYWxyZWFkeSBhZG9wdGVkIHRoZSBkZXNjcmlwdG9ycy4KLSAgICAgICAgbWVz
c2FnZS0+bGVha0Rlc2NyaXB0b3JzKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2Fz
ZSBNQUNIX1NFTkRfVElNRURfT1VUOgotICAgICAgICAvLyBXZSB0aW1lZCBvdXQsIHN0YXNoIGF3
YXkgdGhlIG1lc3NhZ2UgZm9yIGxhdGVyLgotICAgICAgICBtX3BlbmRpbmdPdXRnb2luZ01hY2hN
ZXNzYWdlID0gV1RGTW92ZShtZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Y2FzZSBNQUNIX1NFTkRfSU5WQUxJRF9ERVNUOgotICAgICAgICAvLyBUaGUgb3RoZXIgZW5kIGhh
cyBkaXNhcHBlYXJlZCwgd2UnbGwgZ2V0IGEgZGVhZCBuYW1lIG5vdGlmaWNhdGlvbiB3aGljaCB3
aWxsIGNhdXNlIHVzIHRvIGJlIGludmFsaWRhdGVkLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBXZWJLaXQ6OnNldENyYXNoUmVwb3J0QXBwbGljYXRpb25T
cGVjaWZpY0luZm9ybWF0aW9uKChfX2JyaWRnZSBDRlN0cmluZ1JlZilbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIlVuaGFuZGxlZCBlcnJvciBjb2RlICV4LCBtZXNzYWdlICclczo6JXMnIiwg
a3IsIG1lc3NhZ2UtPm1lc3NhZ2VSZWNlaXZlck5hbWUoKS5kYXRhKCksIG1lc3NhZ2UtPm1lc3Nh
Z2VOYW1lKCkuZGF0YSgpXSk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotfQotCi1ib29sIENv
bm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5nTWVzc2FnZXMoKSBjb25zdAotewotICAg
IHJldHVybiAhbV9wZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2FnZSAmJiAhbV9pc0luaXRpYWxpemlu
Z1NlbmRTb3VyY2U7Ci19Ci0KLWJvb2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShz
dGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2RlcikKLXsKLSAgICBBU1NFUlQoIW1fcGVuZGlu
Z091dGdvaW5nTWFjaE1lc3NhZ2UgJiYgIW1faXNJbml0aWFsaXppbmdTZW5kU291cmNlKTsKLQot
ICAgIGF1dG8gYXR0YWNobWVudHMgPSBlbmNvZGVyLT5yZWxlYXNlQXR0YWNobWVudHMoKTsKLSAg
ICAKLSAgICBhdXRvIG51bWJlck9mUG9ydERlc2NyaXB0b3JzID0gc3RkOjpjb3VudF9pZihhdHRh
Y2htZW50cy5iZWdpbigpLCBhdHRhY2htZW50cy5lbmQoKSwgW10oYXV0byYgYXR0YWNobWVudCkg
eyByZXR1cm4gYXR0YWNobWVudC50eXBlKCkgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRUeXBlOyB9
KTsKLSAgICBib29sIG1lc3NhZ2VCb2R5SXNPT0wgPSBmYWxzZTsKLSAgICBhdXRvIG1lc3NhZ2VT
aXplID0gTWFjaE1lc3NhZ2U6Om1lc3NhZ2VTaXplKGVuY29kZXItPmJ1ZmZlclNpemUoKSwgbnVt
YmVyT2ZQb3J0RGVzY3JpcHRvcnMsIG1lc3NhZ2VCb2R5SXNPT0wpOwotICAgIGlmIChtZXNzYWdl
U2l6ZSA+IGlubGluZU1lc3NhZ2VNYXhTaXplKSB7Ci0gICAgICAgIG1lc3NhZ2VCb2R5SXNPT0wg
PSB0cnVlOwotICAgICAgICBtZXNzYWdlU2l6ZSA9IE1hY2hNZXNzYWdlOjptZXNzYWdlU2l6ZSgw
LCBudW1iZXJPZlBvcnREZXNjcmlwdG9ycywgbWVzc2FnZUJvZHlJc09PTCk7Ci0gICAgfQotCi0g
ICAgYXV0byBtZXNzYWdlID0gTWFjaE1lc3NhZ2U6OmNyZWF0ZShlbmNvZGVyLT5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkudG9TdHJpbmcoKSwgZW5jb2Rlci0+bWVzc2FnZU5hbWUoKS50b1N0cmluZygp
LCBtZXNzYWdlU2l6ZSk7Ci0KLSAgICBhdXRvKiBoZWFkZXIgPSBtZXNzYWdlLT5oZWFkZXIoKTsK
LSAgICBoZWFkZXItPm1zZ2hfYml0cyA9IE1BQ0hfTVNHSF9CSVRTKE1BQ0hfTVNHX1RZUEVfQ09Q
WV9TRU5ELCAwKTsKLSAgICBoZWFkZXItPm1zZ2hfc2l6ZSA9IG1lc3NhZ2VTaXplOwotICAgIGhl
YWRlci0+bXNnaF9yZW1vdGVfcG9ydCA9IG1fc2VuZFBvcnQ7Ci0gICAgaGVhZGVyLT5tc2doX2xv
Y2FsX3BvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICBoZWFkZXItPm1zZ2hfaWQgPSBtZXNzYWdl
Qm9keUlzT09MID8gb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRCA6IGlubGluZUJvZHlNZXNzYWdlSUQ7
Ci0KLSAgICBhdXRvKiBtZXNzYWdlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGhl
YWRlciArIDEpOwotCi0gICAgYm9vbCBpc0NvbXBsZXggPSBudW1iZXJPZlBvcnREZXNjcmlwdG9y
cyB8fCBtZXNzYWdlQm9keUlzT09MOwotICAgIGlmIChpc0NvbXBsZXgpIHsKLSAgICAgICAgaGVh
ZGVyLT5tc2doX2JpdHMgfD0gTUFDSF9NU0dIX0JJVFNfQ09NUExFWDsKLQotICAgICAgICBhdXRv
KiBib2R5ID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19ib2R5X3QqPihtZXNzYWdlRGF0YSk7
Ci0gICAgICAgIGJvZHktPm1zZ2hfZGVzY3JpcHRvcl9jb3VudCA9IG51bWJlck9mUG9ydERlc2Ny
aXB0b3JzICsgbWVzc2FnZUJvZHlJc09PTDsKLSAgICAgICAgbWVzc2FnZURhdGEgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihib2R5ICsgMSk7Ci0KLSAgICAgICAgYXV0byBnZXREZXNjcmlw
dG9yQW5kQWR2YW5jZSA9IFtdKHVpbnQ4X3QqJiBkYXRhLCBzdGQ6OnNpemVfdCB0b0FkdmFuY2Up
IHsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2NyaXB0
b3JfdCo+KHN0ZDo6ZXhjaGFuZ2UoZGF0YSwgZGF0YSArIHRvQWR2YW5jZSkpOwotICAgICAgICB9
OwotCi0gICAgICAgIGZvciAoYXV0byYgYXR0YWNobWVudCA6IGF0dGFjaG1lbnRzKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoYXR0YWNobWVudC50eXBlKCkgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRU
eXBlKTsKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50LnR5cGUoKSA9PSBBdHRhY2htZW50OjpN
YWNoUG9ydFR5cGUpIHsKLSAgICAgICAgICAgICAgICBhdXRvKiBkZXNjcmlwdG9yID0gZ2V0RGVz
Y3JpcHRvckFuZEFkdmFuY2UobWVzc2FnZURhdGEsIHNpemVvZihtYWNoX21zZ19wb3J0X2Rlc2Ny
aXB0b3JfdCkpOwotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItPnBvcnQubmFtZSA9IGF0dGFj
aG1lbnQucG9ydCgpOwotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItPnBvcnQuZGlzcG9zaXRp
b24gPSBhdHRhY2htZW50LmRpc3Bvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRv
ci0+cG9ydC50eXBlID0gTUFDSF9NU0dfUE9SVF9ERVNDUklQVE9SOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lc3NhZ2VCb2R5SXNPT0wpIHsKLSAgICAgICAgICAg
IGF1dG8qIGRlc2NyaXB0b3IgPSBnZXREZXNjcmlwdG9yQW5kQWR2YW5jZShtZXNzYWdlRGF0YSwg
c2l6ZW9mKG1hY2hfbXNnX29vbF9kZXNjcmlwdG9yX3QpKTsKLSAgICAgICAgICAgIGRlc2NyaXB0
b3ItPm91dF9vZl9saW5lLmFkZHJlc3MgPSBlbmNvZGVyLT5idWZmZXIoKTsKLSAgICAgICAgICAg
IGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLnNpemUgPSBlbmNvZGVyLT5idWZmZXJTaXplKCk7Ci0g
ICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5jb3B5ID0gTUFDSF9NU0dfVklSVFVB
TF9DT1BZOwotICAgICAgICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuZGVhbGxvY2F0ZSA9
IGZhbHNlOwotICAgICAgICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUudHlwZSA9IE1BQ0hf
TVNHX09PTF9ERVNDUklQVE9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29weSB0aGUg
ZGF0YSBpZiBpdCBpcyBub3QgYmVpbmcgc2VudCBvdXQtb2YtbGluZS4KLSAgICBpZiAoIW1lc3Nh
Z2VCb2R5SXNPT0wpCi0gICAgICAgIG1lbWNweShtZXNzYWdlRGF0YSwgZW5jb2Rlci0+YnVmZmVy
KCksIGVuY29kZXItPmJ1ZmZlclNpemUoKSk7Ci0KLSAgICBBU1NFUlQobV9zZW5kUG9ydCk7Ci0g
ICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtX3NlbmRQb3J0KSk7Ci0KLSAgICByZXR1cm4gc2Vu
ZE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6aW5pdGlh
bGl6ZVNlbmRTb3VyY2UoKQotewotICAgIG1fc2VuZFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9j
cmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9TRU5ELCBtX3NlbmRQb3J0LCBESVNQQVRD
SF9NQUNIX1NFTkRfREVBRCB8IERJU1BBVENIX01BQ0hfU0VORF9QT1NTSUJMRSwgbV9jb25uZWN0
aW9uUXVldWUtPmRpc3BhdGNoUXVldWUoKSk7Ci0gICAgbV9pc0luaXRpYWxpemluZ1NlbmRTb3Vy
Y2UgPSB0cnVlOwotCi0gICAgUmVmUHRyPENvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0g
ICAgZGlzcGF0Y2hfc291cmNlX3NldF9yZWdpc3RyYXRpb25faGFuZGxlcihtX3NlbmRTb3VyY2Us
IFtjb25uZWN0aW9uXSB7Ci0gICAgICAgIGlmICghY29ubmVjdGlvbi0+bV9zZW5kU291cmNlKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25uZWN0aW9uLT5tX2lzSW5pdGlhbGl6aW5n
U2VuZFNvdXJjZSA9IGZhbHNlOwotICAgICAgICBjb25uZWN0aW9uLT5yZXN1bWVTZW5kU291cmNl
KCk7Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKG1fc2Vu
ZFNvdXJjZSwgW2Nvbm5lY3Rpb25dIHsKLSAgICAgICAgaWYgKCFjb25uZWN0aW9uLT5tX3NlbmRT
b3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRh
ID0gZGlzcGF0Y2hfc291cmNlX2dldF9kYXRhKGNvbm5lY3Rpb24tPm1fc2VuZFNvdXJjZSk7Ci0K
LSAgICAgICAgaWYgKGRhdGEgJiBESVNQQVRDSF9NQUNIX1NFTkRfREVBRCkgewotICAgICAgICAg
ICAgY29ubmVjdGlvbi0+Y29ubmVjdGlvbkRpZENsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGF0YSAmIERJU1BBVENIX01BQ0hfU0VORF9QT1NT
SUJMRSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2h5IHdlIGdldCBzcHVy
aW91cyBESVNQQVRDSF9NQUNIX1NFTkRfUE9TU0lCTEUgZXZlbnRzLgotICAgICAgICAgICAgY29u
bmVjdGlvbi0+cmVzdW1lU2VuZFNvdXJjZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfSk7Ci0KLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fc2VuZFBvcnQpKTsK
LSAgICBtYWNoX3BvcnRfdCBzZW5kUG9ydCA9IG1fc2VuZFBvcnQ7Ci0gICAgZGlzcGF0Y2hfc291
cmNlX3NldF9jYW5jZWxfaGFuZGxlcihtX3NlbmRTb3VyY2UsIF57Ci0gICAgICAgIC8vIFJlbGVh
c2Ugb3VyIHNlbmQgcmlnaHQuCi0gICAgICAgIGRlYWxsb2NhdGVTZW5kUmlnaHRTYWZlbHkoc2Vu
ZFBvcnQpOwotICAgIH0pOwotfQotCi12b2lkIENvbm5lY3Rpb246OnJlc3VtZVNlbmRTb3VyY2Uo
KQotewotICAgIEFTU0VSVCghbV9pc0luaXRpYWxpemluZ1NlbmRTb3VyY2UpOwotICAgIGlmICht
X3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlKQotICAgICAgICBzZW5kTWVzc2FnZShXVEZNb3Zl
KG1fcGVuZGluZ091dGdvaW5nTWFjaE1lc3NhZ2UpKTsKLSAgICBzZW5kT3V0Z29pbmdNZXNzYWdl
cygpOwotfQotCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IGNyZWF0ZU1lc3NhZ2VE
ZWNvZGVyKG1hY2hfbXNnX2hlYWRlcl90KiBoZWFkZXIpCi17Ci0gICAgaWYgKCEoaGVhZGVyLT5t
c2doX2JpdHMgJiBNQUNIX01TR0hfQklUU19DT01QTEVYKSkgewotICAgICAgICAvLyBXZSBoYXZl
IGEgc2ltcGxlIG1lc3NhZ2UuCi0gICAgICAgIHVpbnQ4X3QqIGJvZHkgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihoZWFkZXIgKyAxKTsKLSAgICAgICAgc2l6ZV90IGJvZHlTaXplID0gaGVh
ZGVyLT5tc2doX3NpemUgLSBzaXplb2YobWFjaF9tc2dfaGVhZGVyX3QpOwotCi0gICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPERlY29kZXI+KGJvZHksIGJvZHlTaXplLCBudWxscHRyLCBW
ZWN0b3I8QXR0YWNobWVudD4geyB9KTsKLSAgICB9Ci0KLSAgICBib29sIG1lc3NhZ2VCb2R5SXNP
T0wgPSBoZWFkZXItPm1zZ2hfaWQgPT0gb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRDsKLQotICAgIG1h
Y2hfbXNnX2JvZHlfdCogYm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfYm9keV90Kj4o
aGVhZGVyICsgMSk7Ci0gICAgbWFjaF9tc2dfc2l6ZV90IG51bURlc2NyaXB0b3JzID0gYm9keS0+
bXNnaF9kZXNjcmlwdG9yX2NvdW50OwotICAgIEFTU0VSVChudW1EZXNjcmlwdG9ycyk7Ci0KLSAg
ICB1aW50OF90KiBkZXNjcmlwdG9yRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJv
ZHkgKyAxKTsKLQotICAgIC8vIElmIHRoZSBtZXNzYWdlIGJvZHkgd2FzIHNlbnQgb3V0LW9mLWxp
bmUsIGRvbid0IHRyZWF0IHRoZSBsYXN0IGRlc2NyaXB0b3IKLSAgICAvLyBhcyBhbiBhdHRhY2ht
ZW50LCBzaW5jZSBpdCBpcyByZWFsbHkgdGhlIG1lc3NhZ2UgYm9keS4KLSAgICBpZiAobWVzc2Fn
ZUJvZHlJc09PTCkKLSAgICAgICAgLS1udW1EZXNjcmlwdG9yczsKLQotICAgIC8vIEJ1aWxkIGF0
dGFjaG1lbnQgbGlzdAotICAgIFZlY3RvcjxBdHRhY2htZW50PiBhdHRhY2htZW50cyhudW1EZXNj
cmlwdG9ycyk7Ci0KLSAgICBmb3IgKG1hY2hfbXNnX3NpemVfdCBpID0gMDsgaSA8IG51bURlc2Ny
aXB0b3JzOyArK2kpIHsKLSAgICAgICAgbWFjaF9tc2dfZGVzY3JpcHRvcl90KiBkZXNjcmlwdG9y
ID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19kZXNjcmlwdG9yX3QqPihkZXNjcmlwdG9yRGF0
YSk7Ci0gICAgICAgIEFTU0VSVChkZXNjcmlwdG9yLT50eXBlLnR5cGUgPT0gTUFDSF9NU0dfUE9S
VF9ERVNDUklQVE9SKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3ItPnR5cGUudHlwZSAhPSBNQUNI
X01TR19QT1JUX0RFU0NSSVBUT1IpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
ICAgICBhdHRhY2htZW50c1tudW1EZXNjcmlwdG9ycyAtIGkgLSAxXSA9IEF0dGFjaG1lbnQoZGVz
Y3JpcHRvci0+cG9ydC5uYW1lLCBkZXNjcmlwdG9yLT5wb3J0LmRpc3Bvc2l0aW9uKTsKLSAgICAg
ICAgZGVzY3JpcHRvckRhdGEgKz0gc2l6ZW9mKG1hY2hfbXNnX3BvcnRfZGVzY3JpcHRvcl90KTsK
LSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZUJvZHlJc09PTCkgewotICAgICAgICBtYWNoX21zZ19k
ZXNjcmlwdG9yX3QqIGRlc2NyaXB0b3IgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2Ny
aXB0b3JfdCo+KGRlc2NyaXB0b3JEYXRhKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3ItPnR5
cGUudHlwZSA9PSBNQUNIX01TR19PT0xfREVTQ1JJUFRPUik7Ci0gICAgICAgIGlmIChkZXNjcmlw
dG9yLT50eXBlLnR5cGUgIT0gTUFDSF9NU0dfT09MX0RFU0NSSVBUT1IpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICB1aW50OF90KiBtZXNzYWdlQm9keSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5hZGRyZXNzKTsKLSAgICAgICAg
c2l6ZV90IG1lc3NhZ2VCb2R5U2l6ZSA9IGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLnNpemU7Ci0K
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RGVjb2Rlcj4obWVzc2FnZUJvZHksIG1l
c3NhZ2VCb2R5U2l6ZSwgW10oY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgbGVuZ3RoKSB7
Ci0gICAgICAgICAgICB2bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm1fYWRkcmVzc190PihidWZmZXIpLCBsZW5ndGgpOwotICAgICAgICB9LCBXVEZNb3Zl
KGF0dGFjaG1lbnRzKSk7Ci0gICAgfQotCi0gICAgdWludDhfdCogbWVzc2FnZUJvZHkgPSBkZXNj
cmlwdG9yRGF0YTsKLSAgICBzaXplX3QgbWVzc2FnZUJvZHlTaXplID0gaGVhZGVyLT5tc2doX3Np
emUgLSAoZGVzY3JpcHRvckRhdGEgLSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihoZWFkZXIp
KTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPERlY29kZXI+KG1lc3NhZ2VCb2R5LCBt
ZXNzYWdlQm9keVNpemUsIG51bGxwdHIsIFdURk1vdmUoYXR0YWNobWVudHMpKTsKLX0KLQotLy8g
VGhlIHJlY2VpdmUgYnVmZmVyIHNpemUgc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRoZSBtYXhpbXVt
IHRyYWlsZXIgc2l6ZS4KLXN0YXRpYyBjb25zdCBzaXplX3QgcmVjZWl2ZUJ1ZmZlclNpemUgPSBp
bmxpbmVNZXNzYWdlTWF4U2l6ZSArIE1BWF9UUkFJTEVSX1NJWkU7Ci10eXBlZGVmIFZlY3Rvcjxj
aGFyLCByZWNlaXZlQnVmZmVyU2l6ZT4gUmVjZWl2ZUJ1ZmZlcjsKLQotc3RhdGljIG1hY2hfbXNn
X2hlYWRlcl90KiByZWFkRnJvbU1hY2hQb3J0KG1hY2hfcG9ydF90IG1hY2hQb3J0LCBSZWNlaXZl
QnVmZmVyJiBidWZmZXIpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtYWNoUG9ydCkp
OwotCi0gICAgYnVmZmVyLnJlc2l6ZShyZWNlaXZlQnVmZmVyU2l6ZSk7Ci0KLSAgICBtYWNoX21z
Z19oZWFkZXJfdCogaGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19oZWFkZXJfdCo+
KGJ1ZmZlci5kYXRhKCkpOwotICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX21zZyhoZWFkZXIs
IE1BQ0hfUkNWX01TRyB8IE1BQ0hfUkNWX0xBUkdFIHwgTUFDSF9SQ1ZfVElNRU9VVCB8IE1BQ0hf
UkNWX1ZPVUNIRVIsIDAsIGJ1ZmZlci5zaXplKCksIG1hY2hQb3J0LCAwLCBNQUNIX1BPUlRfTlVM
TCk7Ci0gICAgaWYgKGtyID09IE1BQ0hfUkNWX1RJTUVEX09VVCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBpZiAoa3IgPT0gTUFDSF9SQ1ZfVE9PX0xBUkdFKSB7Ci0gICAgICAgIC8v
IFRoZSBtZXNzYWdlIHdhcyB0b28gbGFyZ2UsIHJlc2l6ZSB0aGUgYnVmZmVyIGFuZCB0cnkgYWdh
aW4uCi0gICAgICAgIGJ1ZmZlci5yZXNpemUoaGVhZGVyLT5tc2doX3NpemUgKyBNQVhfVFJBSUxF
Ul9TSVpFKTsKLSAgICAgICAgaGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19oZWFk
ZXJfdCo+KGJ1ZmZlci5kYXRhKCkpOwotICAgICAgICAKLSAgICAgICAga3IgPSBtYWNoX21zZyho
ZWFkZXIsIE1BQ0hfUkNWX01TRyB8IE1BQ0hfUkNWX0xBUkdFIHwgTUFDSF9SQ1ZfVElNRU9VVCB8
IE1BQ0hfUkNWX1ZPVUNIRVIsIDAsIGJ1ZmZlci5zaXplKCksIG1hY2hQb3J0LCAwLCBNQUNIX1BP
UlRfTlVMTCk7Ci0gICAgICAgIEFTU0VSVChrciAhPSBNQUNIX1JDVl9UT09fTEFSR0UpOwotICAg
IH0KLQotICAgIGlmIChrciAhPSBNQUNIX01TR19TVUNDRVNTKSB7Ci0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgICAgICBXZWJLaXQ6OnNldENyYXNoUmVwb3J0QXBwbGljYXRpb25TcGVjaWZpY0lu
Zm9ybWF0aW9uKChfX2JyaWRnZSBDRlN0cmluZ1JlZilbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIlVuaGFuZGxlZCBlcnJvciBjb2RlICV4IGZyb20gbWFjaF9tc2csIHJlY2VpdmUgcG9ydCBp
cyAleCIsIGtyLCBtYWNoUG9ydF0pOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGVhZGVy
OwotfQotCi12b2lkIENvbm5lY3Rpb246OnJlY2VpdmVTb3VyY2VFdmVudEhhbmRsZXIoKQotewot
ICAgIFJlY2VpdmVCdWZmZXIgYnVmZmVyOwotCi0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRCht
X3JlY2VpdmVQb3J0KSk7Ci0gICAgbWFjaF9tc2dfaGVhZGVyX3QqIGhlYWRlciA9IHJlYWRGcm9t
TWFjaFBvcnQobV9yZWNlaXZlUG9ydCwgYnVmZmVyKTsKLSAgICBpZiAoIWhlYWRlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChoZWFkZXItPm1zZ2hfaWQpIHsKLSAgICBjYXNlIE1B
Q0hfTk9USUZZX05PX1NFTkRFUlM6Ci0gICAgICAgIEFTU0VSVChtX2lzU2VydmVyKTsKLSAgICAg
ICAgaWYgKCFtX3NlbmRQb3J0KQotICAgICAgICAgICAgY29ubmVjdGlvbkRpZENsb3NlKCk7Ci0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgaW5saW5lQm9keU1lc3NhZ2VJRDoKLSAgICBjYXNl
IG91dE9mTGluZUJvZHlNZXNzYWdlSUQ6Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNQUNI
X05PVElGWV9TRU5EX09OQ0U6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBkZWNvZGVyID0gY3JlYXRlTWVzc2FnZURl
Y29kZXIoaGVhZGVyKTsKLSAgICBpZiAoIWRlY29kZXIpCi0gICAgICAgIHJldHVybjsKLQotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBkZWNvZGVyLT5zZXRJbXBvcnRhbmNlQXNzZXJ0aW9uKHN0ZDo6
bWFrZV91bmlxdWU8SW1wb3J0YW5jZUFzc2VydGlvbj4oaGVhZGVyKSk7Ci0jZW5kaWYKLQotICAg
IGlmIChkZWNvZGVyLT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gIklQQyIgJiYgZGVjb2Rlci0+
bWVzc2FnZU5hbWUoKSA9PSAiSW5pdGlhbGl6ZUNvbm5lY3Rpb24iKSB7Ci0gICAgICAgIEFTU0VS
VChtX2lzU2VydmVyKTsKLSAgICAgICAgQVNTRVJUKCFtX2lzQ29ubmVjdGVkKTsKLSAgICAgICAg
QVNTRVJUKCFtX3NlbmRQb3J0KTsKLQotICAgICAgICBNYWNoUG9ydCBwb3J0OwotICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShwb3J0KSkgewotICAgICAgICAgICAgLy8gRklYTUU6IERpc2Nv
bm5lY3QuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3NlbmRQ
b3J0ID0gcG9ydC5wb3J0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9zZW5kUG9ydCkgewot
ICAgICAgICAgICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtX3JlY2VpdmVQb3J0KSk7Ci0gICAg
ICAgICAgICBtYWNoX3BvcnRfdCBwcmV2aW91c05vdGlmaWNhdGlvblBvcnQgPSBNQUNIX1BPUlRf
TlVMTDsKLSAgICAgICAgICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfcmVxdWVzdF9ub3RpZmljYXRp
b24obWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9ydCwgTUFDSF9OT1RJRllfTk9fU0VOREVS
UywgMCwgTUFDSF9QT1JUX05VTEwsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EX09OQ0UsICZwcmV2
aW91c05vdGlmaWNhdGlvblBvcnQpOwotICAgICAgICAgICAgQVNTRVJUKGtyID09IEtFUk5fU1VD
Q0VTUyk7Ci0gICAgICAgICAgICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSWYgbWFjaF9wb3J0X3JlcXVlc3Rfbm90aWZpY2F0aW9uIGZhaWxzLCAncHJldmlv
dXNOb3RpZmljYXRpb25Qb3J0JyB3aWxsIGJlIHVuaW5pdGlhbGl6ZWQuCi0gICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJtYWNoX3BvcnRfcmVxdWVzdF9ub3RpZmljYXRpb24gZmFpbGVkOiAoJXgp
ICVzIiwga3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSk7Ci0gICAgICAgICAgICAgICAgcHJldmlv
dXNOb3RpZmljYXRpb25Qb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChwcmV2aW91c05vdGlmaWNhdGlvblBvcnQgIT0gTUFDSF9QT1JUX05VTEwp
Ci0gICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVNlbmRSaWdodFNhZmVseShwcmV2aW91c05vdGlm
aWNhdGlvblBvcnQpOwotCi0gICAgICAgICAgICBpbml0aWFsaXplU2VuZFNvdXJjZSgpOwotICAg
ICAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKG1fc2VuZFNvdXJjZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsKLQotICAgICAgICAvLyBTZW5kIGFueSBwZW5kaW5n
IG91dGdvaW5nIG1lc3NhZ2VzLgotICAgICAgICBzZW5kT3V0Z29pbmdNZXNzYWdlcygpOwotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGlmIChkZWNvZGVyLT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gIklQQyIgJiYgZGVj
b2Rlci0+bWVzc2FnZU5hbWUoKSA9PSAiU2V0RXhjZXB0aW9uUG9ydCIpIHsKLSAgICAgICAgaWYg
KG1faXNTZXJ2ZXIpIHsKLSAgICAgICAgICAgIC8vIFNlcnZlciBjb25uZWN0aW9ucyBhcmVuJ3Qg
c3VwcG9zZWQgdG8gaGF2ZSB0aGVpciBleGNlcHRpb24gcG9ydHMgb3ZlcnJpZGRlbi4gVHJlYXQg
dGhpcyBhcyBhbiBpbnZhbGlkIG1lc3NhZ2UuCi0gICAgICAgICAgICBTdHJpbmdSZWZlcmVuY2Ug
bWVzc2FnZVJlY2VpdmVyTmFtZVJlZmVyZW5jZSA9IGRlY29kZXItPm1lc3NhZ2VSZWNlaXZlck5h
bWUoKTsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlUmVjZWl2ZXJOYW1lKFN0cmluZyhtZXNz
YWdlUmVjZWl2ZXJOYW1lUmVmZXJlbmNlLmRhdGEoKSwgbWVzc2FnZVJlY2VpdmVyTmFtZVJlZmVy
ZW5jZS5zaXplKCkpKTsKLSAgICAgICAgICAgIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZVJl
ZmVyZW5jZSA9IGRlY29kZXItPm1lc3NhZ2VOYW1lKCk7Ci0gICAgICAgICAgICBTdHJpbmcgbWVz
c2FnZU5hbWUoU3RyaW5nKG1lc3NhZ2VOYW1lUmVmZXJlbmNlLmRhdGEoKSwgbWVzc2FnZU5hbWVS
ZWZlcmVuY2Uuc2l6ZSgpKSk7Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBtZXNzYWdlUmVjZWl2ZXJOYW1lID0g
V1RGTW92ZShtZXNzYWdlUmVjZWl2ZXJOYW1lKSwgbWVzc2FnZU5hbWUgPSBXVEZNb3ZlKG1lc3Nh
Z2VOYW1lKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaXNw
YXRjaERpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShtZXNzYWdlUmVjZWl2ZXJOYW1lLnV0ZjgoKSwg
bWVzc2FnZU5hbWUudXRmOCgpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIE1hY2hQb3J0IGV4Y2VwdGlvblBvcnQ7Ci0gICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKGV4Y2VwdGlvblBvcnQpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHNldE1hY2hFeGNlcHRpb25Qb3J0KGV4Y2VwdGlvblBvcnQucG9ydCgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgcHJvY2Vzc0luY29taW5nTWVzc2Fn
ZShXVEZNb3ZlKGRlY29kZXIpKTsKLX0gICAgCi0KLUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmll
ciBDb25uZWN0aW9uOjppZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSWRlbnRpZmll
cihtX2lzU2VydmVyID8gbV9yZWNlaXZlUG9ydCA6IG1fc2VuZFBvcnQsIG1feHBjQ29ubmVjdGlv
bik7Ci19Ci0KLU9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IENvbm5lY3Rpb246OmdldEF1ZGl0VG9r
ZW4oKQotewotICAgIGlmICghbV94cGNDb25uZWN0aW9uKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIAotICAgIGF1ZGl0X3Rva2VuX3QgYXVkaXRUb2tlbjsKLSAgICB4cGNfY29u
bmVjdGlvbl9nZXRfYXVkaXRfdG9rZW4obV94cGNDb25uZWN0aW9uLmdldCgpLCAmYXVkaXRUb2tl
bik7Ci0gICAgcmV0dXJuIFdURk1vdmUoYXVkaXRUb2tlbik7Ci19Ci0KLWJvb2wgQ29ubmVjdGlv
bjo6a2lsbCgpCi17Ci0gICAgaWYgKG1feHBjQ29ubmVjdGlvbikgewotICAgICAgICB4cGNfY29u
bmVjdGlvbl9raWxsKG1feHBjQ29ubmVjdGlvbi5nZXQoKSwgU0lHS0lMTCk7Ci0gICAgICAgIG1f
d2FzS2lsbGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotICAgIAotc3RhdGljIHZvaWQgQWNjZXNzaWJpbGl0eVByb2Nlc3NTdXNw
ZW5kZWROb3RpZmljYXRpb24oYm9vbCBzdXNwZW5kZWQpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nlc3NTdXNwZW5kU3RhdHVzKHN1c3BlbmRlZCA/IEFY
U3VzcGVuZFN0YXR1c1N1c3BlbmRlZCA6IEFYU3VzcGVuZFN0YXR1c1J1bm5pbmcpOwotI2VsaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBVSUFjY2Vzc2liaWxpdHlQb3N0Tm90aWZpY2F0aW9u
KGtBWFBpZFN0YXR1c0NoYW5nZWROb3RpZmljYXRpb24sIEB7IEAicGlkIiA6IEAoZ2V0cGlkKCkp
LCBAInN1c3BlbmRlZCIgOiBAKHN1c3BlbmRlZCkgfSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShzdXNwZW5kZWQpOwotI2VuZGlmCi19Ci0gICAgCi12b2lkIENvbm5lY3Rpb246OndpbGxTZW5k
U3luY01lc3NhZ2UoT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCi17
Ci0gICAgaWYgKHNlbmRTeW5jT3B0aW9ucy5jb250YWlucyhJUEM6OlNlbmRTeW5jT3B0aW9uOjpJ
bmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkgJiYgV2ViQ29yZTo6QVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgQWNjZXNzaWJpbGl0eVByb2Nlc3NT
dXNwZW5kZWROb3RpZmljYXRpb24odHJ1ZSk7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6ZGlkUmVj
ZWl2ZVN5bmNSZXBseShPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykK
LXsKLSAgICBpZiAoc2VuZFN5bmNPcHRpb25zLmNvbnRhaW5zKElQQzo6U2VuZFN5bmNPcHRpb246
OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSAmJiBXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICBBY2Nlc3NpYmlsaXR5UHJvY2Vz
c1N1c3BlbmRlZE5vdGlmaWNhdGlvbihmYWxzZSk7Ci19Ci0KLXBpZF90IENvbm5lY3Rpb246OnJl
bW90ZVByb2Nlc3NJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3hwY0Nvbm5lY3Rpb24pCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHhwY19jb25uZWN0aW9uX2dldF9waWQobV94cGND
b25uZWN0aW9uLmdldCgpKTsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL0ltcG9ydGFuY2VBc3NlcnRpb24uaCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9JbXBvcnRhbmNlQXNzZXJ0aW9uLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmOTBiMDQzNDE4MmJkMDg1MWVhOTQ2NDgzMGU4
MjY2MmI2OGIxNDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL0ltcG9ydGFuY2VBc3NlcnRpb24uaAor
KysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEltcG9y
dGFuY2VBc3NlcnRpb25faAotI2RlZmluZSBJbXBvcnRhbmNlQXNzZXJ0aW9uX2gKLQotI2lmIFBM
QVRGT1JNKE1BQykKLQotI2luY2x1ZGUgPG1hY2gvbWVzc2FnZS5oPgotCi1uYW1lc3BhY2UgSVBD
IHsKLQotY2xhc3MgSW1wb3J0YW5jZUFzc2VydGlvbiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1wb3J0YW5jZUFzc2VydGlvbik7Ci0K
LXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbXBvcnRhbmNlQXNzZXJ0aW9uKG1hY2hfbXNnX2hlYWRl
cl90KiBoZWFkZXIpCi0gICAgICAgIDogbV92b3VjaGVyKDApCi0gICAgewotICAgICAgICBpZiAo
TUFDSF9NU0dIX0JJVFNfSEFTX1ZPVUNIRVIoaGVhZGVyLT5tc2doX2JpdHMpKSB7Ci0gICAgICAg
ICAgICBtX3ZvdWNoZXIgPSBoZWFkZXItPm1zZ2hfdm91Y2hlcl9wb3J0OwotICAgICAgICAgICAg
aGVhZGVyLT5tc2doX3ZvdWNoZXJfcG9ydCA9IE1BQ0hfVk9VQ0hFUl9OVUxMOwotICAgICAgICAg
ICAgaGVhZGVyLT5tc2doX2JpdHMgJj0gfihNQUNIX01TR0hfQklUU19WT1VDSEVSX01BU0sgfCBN
QUNIX01TR0hfQklUU19SQUlTRUlNUCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB+SW1wb3J0
YW5jZUFzc2VydGlvbigpCi0gICAgewotICAgICAgICBpZiAobV92b3VjaGVyKSB7Ci0gICAgICAg
ICAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF92b3VjaGVyX2RlYWxsb2NhdGUobV92b3VjaGVy
KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoa3IsICFrcik7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgbWFjaF92b3VjaGVyX3QgbV92b3VjaGVyOwotfTsKLQotfQotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi0jZW5kaWYgLy8gSW1wb3J0YW5jZUFzc2VydGlvbl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaE1lc3NhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hNZXNzYWdlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM4NGM5NmExMzlhZjgwNWYxM2YwN2FjN2NiZTAy
NGIwZjUzZGEyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaE1lc3NhZ2UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJNYWNoTWVzc2FnZS5oIgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNs
dWRlIDxtYWNoL21hY2guaD4KLQotbmFtZXNwYWNlIElQQyB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxN
YWNoTWVzc2FnZT4gTWFjaE1lc3NhZ2U6OmNyZWF0ZShDU3RyaW5nJiYgbWVzc2FnZVJlY2VpdmVy
TmFtZSwgQ1N0cmluZyYmIG1lc3NhZ2VOYW1lLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiBt
ZW1vcnkgPSBXVEY6OmZhc3RaZXJvZWRNYWxsb2Moc2l6ZW9mKE1hY2hNZXNzYWdlKSArIHNpemUp
OwotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TWFjaE1lc3NhZ2U+IHsgbmV3IChOb3ROdWxs
LCBtZW1vcnkpIE1hY2hNZXNzYWdlIHsgV1RGTW92ZShtZXNzYWdlUmVjZWl2ZXJOYW1lKSwgV1RG
TW92ZShtZXNzYWdlTmFtZSksIHNpemUgfSB9OwotfQotCi1NYWNoTWVzc2FnZTo6TWFjaE1lc3Nh
Z2UoQ1N0cmluZyYmIG1lc3NhZ2VSZWNlaXZlck5hbWUsIENTdHJpbmcmJiBtZXNzYWdlTmFtZSwg
c2l6ZV90IHNpemUpCi0gICAgOiBtX21lc3NhZ2VSZWNlaXZlck5hbWUoV1RGTW92ZShtZXNzYWdl
UmVjZWl2ZXJOYW1lKSkKLSAgICAsIG1fbWVzc2FnZU5hbWUoV1RGTW92ZShtZXNzYWdlTmFtZSkp
Ci0gICAgLCBtX3NpemUgeyBzaXplIH0KLXsKLX0KLQotTWFjaE1lc3NhZ2U6On5NYWNoTWVzc2Fn
ZSgpCi17Ci0gICAgaWYgKG1fc2hvdWxkRnJlZURlc2NyaXB0b3JzKQotICAgICAgICA6Om1hY2hf
bXNnX2Rlc3Ryb3koaGVhZGVyKCkpOwotfQotCi1zaXplX3QgTWFjaE1lc3NhZ2U6Om1lc3NhZ2VT
aXplKHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IHBvcnREZXNjcmlwdG9yQ291bnQsIHNpemVfdCBt
ZW1vcnlEZXNjcmlwdG9yQ291bnQpCi17Ci0gICAgc2l6ZV90IG1lc3NhZ2VTaXplID0gc2l6ZW9m
KG1hY2hfbXNnX2hlYWRlcl90KSArIGJvZHlTaXplOwotCi0gICAgaWYgKHBvcnREZXNjcmlwdG9y
Q291bnQgfHwgbWVtb3J5RGVzY3JpcHRvckNvdW50KSB7Ci0gICAgICAgIG1lc3NhZ2VTaXplICs9
IHNpemVvZihtYWNoX21zZ19ib2R5X3QpOwotICAgICAgICBtZXNzYWdlU2l6ZSArPSAocG9ydERl
c2NyaXB0b3JDb3VudCAqIHNpemVvZihtYWNoX21zZ19wb3J0X2Rlc2NyaXB0b3JfdCkpOwotICAg
ICAgICBtZXNzYWdlU2l6ZSArPSAobWVtb3J5RGVzY3JpcHRvckNvdW50ICogc2l6ZW9mKG1hY2hf
bXNnX29vbF9kZXNjcmlwdG9yX3QpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcm91bmRfbXNnKG1l
c3NhZ2VTaXplKTsKLX0KLQotdm9pZCBNYWNoTWVzc2FnZTo6bGVha0Rlc2NyaXB0b3JzKCkKLXsK
LSAgICBtX3Nob3VsZEZyZWVEZXNjcmlwdG9ycyA9IGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L21hYy9NYWNoTWVzc2FnZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hN
ZXNzYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMTMxYzdmMGQzZWZhMzhh
ZjQwNTRlMjc2ZDRmYzI4NmM5MzQ0MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hNZXNzYWdl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLQotI2luY2x1ZGUgPG1hY2gvbWVzc2FnZS5oPgot
I2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJUEMgewotCi1jbGFzcyBNYWNoTWVzc2FnZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNYWNoTWVzc2FnZT4g
Y3JlYXRlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYgbWVzc2FnZU5h
bWUsIHNpemVfdCk7Ci0gICAgfk1hY2hNZXNzYWdlKCk7Ci0KLSAgICBzdGF0aWMgc2l6ZV90IG1l
c3NhZ2VTaXplKHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IHBvcnREZXNjcmlwdG9yQ291bnQsIHNp
emVfdCBtZW1vcnlEZXNjcmlwdG9yQ291bnQpOwotCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KLSAgICBtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVyKCkgeyByZXR1
cm4gbV9tZXNzYWdlSGVhZGVyOyB9Ci0KLSAgICB2b2lkIGxlYWtEZXNjcmlwdG9ycygpOwotCi0g
ICAgY29uc3QgQ1N0cmluZyYgbWVzc2FnZVJlY2VpdmVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWVzc2FnZVJlY2VpdmVyTmFtZTsgfQotICAgIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2VOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXNzYWdlTmFtZTsgfQotCi1wcml2YXRlOgotICAgIE1hY2hNZXNz
YWdlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYgbWVzc2FnZU5hbWUs
IHNpemVfdCk7Ci0KLSAgICBDU3RyaW5nIG1fbWVzc2FnZVJlY2VpdmVyTmFtZTsKLSAgICBDU3Ry
aW5nIG1fbWVzc2FnZU5hbWU7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICBib29sIG1fc2hvdWxk
RnJlZURlc2NyaXB0b3JzIHsgdHJ1ZSB9OwotICAgIG1hY2hfbXNnX2hlYWRlcl90IG1fbWVzc2Fn
ZUhlYWRlcltdOwotfTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaFBvcnQuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9NYWNoUG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5MTQ0YTA1MmVhMGNmNDI5ZTgwNzM2NjE1OGQ0ZDE4MjM3MjQxZTJiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL21hYy9NYWNoUG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgTWFjaFBvcnRfaAotI2RlZmluZSBNYWNoUG9ydF9oCi0KLSNp
bmNsdWRlICJBdHRhY2htZW50LmgiCi0jaW5jbHVkZSAiRGVjb2Rlci5oIgotI2luY2x1ZGUgIkVu
Y29kZXIuaCIKLQotbmFtZXNwYWNlIElQQyB7Ci0KLWNsYXNzIE1hY2hQb3J0IHsKLXB1YmxpYzoK
LSAgICBNYWNoUG9ydCgpCi0gICAgICAgIDogbV9wb3J0KE1BQ0hfUE9SVF9OVUxMKQotICAgICAg
ICAsIG1fZGlzcG9zaXRpb24oMCkKLSAgICB7Ci0gICAgfQotCi0gICAgTWFjaFBvcnQobWFjaF9w
b3J0X25hbWVfdCBwb3J0LCBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbikKLSAgICAg
ICAgOiBtX3BvcnQocG9ydCkKLSAgICAgICAgLCBtX2Rpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgZW5jb2RlciA8PCBBdHRhY2htZW50KG1fcG9ydCwgbV9kaXNwb3NpdGlv
bik7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1h
Y2hQb3J0JiBwKQotICAgIHsKLSAgICAgICAgQXR0YWNobWVudCBhdHRhY2htZW50OwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGF0dGFjaG1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAKLSAgICAgICAgcC5tX3BvcnQgPSBhdHRhY2htZW50LnBvcnQoKTsKLSAg
ICAgICAgcC5tX2Rpc3Bvc2l0aW9uID0gYXR0YWNobWVudC5kaXNwb3NpdGlvbigpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBtYWNoX3BvcnRfbmFtZV90IHBvcnQoKSBjb25z
dCB7IHJldHVybiBtX3BvcnQ7IH0KLSAgICBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zaXRpb247IH0KLQotcHJpdmF0ZToKLSAgICBtYWNo
X3BvcnRfbmFtZV90IG1fcG9ydDsKLSAgICBtYWNoX21zZ190eXBlX25hbWVfdCBtX2Rpc3Bvc2l0
aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSVBDCi0KLSNlbmRpZiAvLyBNYWNoUG9ydF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCA0NDA4NGE2MmVhMjE3NzI3NWY2MDNiMzEzZjBmMTQ0
NDRmZGM0MWU3Li5kMTZjMTIxMmY3ZjYzODcyNjk3OTIwZWFlODdlYmQ0MWI0NWM5OTcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTQyLDggKzQyLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0
X1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0KICAg
ICBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KIAotICAgIFBs
YXRmb3JtL0lQQy9tYWMvQ29ubmVjdGlvbk1hYy5tbQotICAgIFBsYXRmb3JtL0lQQy9tYWMvTWFj
aE1lc3NhZ2UuY3BwCisgICAgUGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbQor
ICAgIFBsYXRmb3JtL0lQQy9jb2NvYS9NYWNoTWVzc2FnZS5jcHAKIAogICAgIFBsYXRmb3JtL2Nm
L01vZHVsZUNGLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZWQ0YjBmMGZiNmMyMDgw
MjY1MDg4MmNiYjg0MWM3NWY5ZjllOWZlMC4uY2VkMWI5MzcwZWY1NWMzMTc2MDE3MzQwOGU1NTkz
N2Y3YTAxOGU4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNzQsOCArNzQsOCBAQCBQbGF0
Zm9ybS9mb3VuZGF0aW9uL0xvZ2dpbmdGb3VuZGF0aW9uLm1tCiBQbGF0Zm9ybS9pb3MvQWNjZXNz
aWJpbGl0eUlPUy5tbQogUGxhdGZvcm0vaW9zL1BheW1lbnRBdXRob3JpemF0aW9uQ29udHJvbGxl
ci5tbQogCi1QbGF0Zm9ybS9JUEMvbWFjL0Nvbm5lY3Rpb25NYWMubW0KLVBsYXRmb3JtL0lQQy9t
YWMvTWFjaE1lc3NhZ2UuY3BwCitQbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY2EubW0K
K1BsYXRmb3JtL0lQQy9jb2NvYS9NYWNoTWVzc2FnZS5jcHAKIAogUGxhdGZvcm0vbWFjL0xheWVy
SG9zdGluZ0NvbnRleHQubW0KIFBsYXRmb3JtL21hYy9NYWNoVXRpbGl0aWVzLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzc4Nzli
NTRhYzYzMDFjNDg1ZTIwZDRkZTRlZWZmNThmM2E2MDlhNC4uMzJjNjgyMGY4MGNhOTUzM2U4ZGFi
N2IxZjc2N2NiN2VmMzhmYWMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDYzLDcgKzIwNjMsNyBAQAogCQkxQTJEOTU2RDEyODQ4
NTY0MDAxRUI5NjIgLyogQXV4aWxpYXJ5UHJvY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBdXhpbGlhcnlQcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFBMkQ5NTZFMTI4NDg1NjQwMDFFQjk2MiAvKiBBdXhpbGlhcnlQcm9jZXNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1eGlsaWFyeVByb2Nlc3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTMwMDY2QzExMTBGNEY3MDAzMTkzN0MgLyog
UmVzcG9uc2l2ZW5lc3NUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZXNwb25zaXZlbmVzc1RpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBMzBF
QUM1MTE1RDdEQTMwMDUzRTkzNyAvKiBDb25uZWN0aW9uTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29ubmVjdGlvbk1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUEzMEVBQzUxMTVEN0RBMzAwNTNFOTM3IC8qIENvbm5lY3Rpb25Db2Nv
YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbm5lY3Rpb25D
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzMzRERUExNkRFOEI2ODAw
NkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0b3JhZ2VBcmVhTWFw
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTMzNERFQjE2REU4
Rjg4MDA2QThFMzggLyogU3RvcmFnZUFyZWFNYXBNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RvcmFnZUFyZWFNYXBNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9TdG9yYWdlQXJlYU1hcE1lc3Nh
Z2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFB
MzM0REVDMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaDsgcGF0
aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNTQ5MCw3ICs1NDkwLDcgQEAKIAkJ
MUFFMDBENjgxODMyN0MxMjAwMDg3REQ3IC8qIElQQyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkNDNTZGNzUxMTU5OTU1RTAwMUNDQUY5IC8qIG1hYyAq
LywKKwkJCQlCQ0M1NkY3NTExNTk5NTVFMDAxQ0NBRjkgLyogY29jb2EgKi8sCiAJCQkJMUFFRkQy
NzgxMUQxNkM4MTAwODIxOUQzIC8qIEFyZ3VtZW50Q29kZXIuaCAqLywKIAkJCQkxQTNENjEwNDEz
QTdGMDNBMDBGOTVENEUgLyogQXJndW1lbnRDb2RlcnMuY3BwICovLAogCQkJCTFBRUZEMkY2MTFE
MTgwN0IwMDgyMTlEMyAvKiBBcmd1bWVudENvZGVycy5oICovLApAQCAtODMzMiwxNiArODMzMiwx
NiBAQAogCQkJcGF0aCA9IFdlYkNvbnRlbnRTZXJ2aWNlOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKLQkJQkNDNTZGNzUxMTU5OTU1RTAwMUNDQUY5IC8qIG1hYyAqLyA9IHsKKwkJ
QkNDNTZGNzUxMTU5OTU1RTAwMUNDQUY5IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkxQTMwRUFDNTExNUQ3REEzMDA1M0U5MzcgLyogQ29u
bmVjdGlvbk1hYy5tbSAqLywKKwkJCQkxQTMwRUFDNTExNUQ3REEzMDA1M0U5MzcgLyogQ29ubmVj
dGlvbkNvY29hLm1tICovLAogCQkJCTFBMUVDNjlEMTg3MjA5MjEwMEI5NTFGMCAvKiBJbXBvcnRh
bmNlQXNzZXJ0aW9uLmggKi8sCiAJCQkJMUE2RDg2QkYxREY3NTI2NTAwNzc0NUU4IC8qIE1hY2hN
ZXNzYWdlLmNwcCAqLywKIAkJCQkxQTZEODZDMDFERjc1MjY1MDA3NzQ1RTggLyogTWFjaE1lc3Nh
Z2UuaCAqLywKIAkJCQlCQ0M1NkY3NzExNTk5NTdEMDAxQ0NBRjkgLyogTWFjaFBvcnQuaCAqLywK
IAkJCSk7Ci0JCQlwYXRoID0gbWFjOworCQkJcGF0aCA9IGNvY29hOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKIAkJfTsKIAkJQkNDRjA4NUMxMTNGM0I3NTAwQzY1MEM1IC8qIG1hYyAqLyA9
IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369291</attachid>
            <date>2019-05-07 09:10:45 -0700</date>
            <delta_ts>2019-05-07 09:15:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197661-20190507091044.patch</filename>
            <type>text/plain</type>
            <size>78265</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg4Y2U0NWVlMzAzZDhhOGUz
M2U5YjNkNDFhNjJhZDE3OTYxNjc3OGUuLmU4NmFmZTYxM2NkOTg1NDk0MTM2MDhiZDQwOWFhOGY4
OGM2NWM5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTktMDUtMDcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgQ29ubmVjdGlvbk1hYy5t
bSB0byBDb25uZWN0aW9uQ29jb2EubW0gc2luY2UgaXQgaXMgdXNlZCBvbiBib3RoIG1hY09TIGFu
ZCBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NzY2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9Db25uZWN0aW9uTWFjLm1tLgorICAgICAgICAoSVBD
OjpDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZzo6Y3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0
aW9uV2F0Y2hkb2cpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRv
Zzo6Q29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cpOgorICAgICAgICAoSVBDOjpDb25uZWN0
aW9uVGVybWluYXRpb25XYXRjaGRvZzo6d2F0Y2hkb2dUaW1lckZpcmVkKToKKyAgICAgICAgKElQ
Qzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKElQQzo6Q29ubmVj
dGlvbjo6Y2FuY2VsUmVjZWl2ZVNvdXJjZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnRl
cm1pbmF0ZVNvb24pOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxp
emUpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpvcGVuKToKKyAgICAgICAgKElQQzo6Q29u
bmVjdGlvbjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9y
bUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzIGNvbnN0KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlv
bjo6c2VuZE91dGdvaW5nTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OmluaXRp
YWxpemVTZW5kU291cmNlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6cmVzdW1lU2VuZFNv
dXJjZSk6CisgICAgICAgIChJUEM6OmNyZWF0ZU1lc3NhZ2VEZWNvZGVyKToKKyAgICAgICAgKElQ
Qzo6cmVhZEZyb21NYWNoUG9ydCk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnJlY2VpdmVT
b3VyY2VFdmVudEhhbmRsZXIpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVy
IGNvbnN0KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6Z2V0QXVkaXRUb2tlbik6CisgICAg
ICAgIChJUEM6OkNvbm5lY3Rpb246OmtpbGwpOgorICAgICAgICAoSVBDOjpBY2Nlc3NpYmlsaXR5
UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246
OndpbGxTZW5kU3luY01lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpkaWRSZWNl
aXZlU3luY1JlcGx5KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6cmVtb3RlUHJvY2Vzc0lE
IGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvY29jb2EvSW1wb3J0YW5jZUFzc2VydGlv
bi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL0ltcG9ydGFu
Y2VBc3NlcnRpb24uaC4KKyAgICAgICAgKElQQzo6SW1wb3J0YW5jZUFzc2VydGlvbjo6SW1wb3J0
YW5jZUFzc2VydGlvbik6CisgICAgICAgIChJUEM6OkltcG9ydGFuY2VBc3NlcnRpb246On5JbXBv
cnRhbmNlQXNzZXJ0aW9uKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvY29jb2EvTWFjaE1lc3Nh
Z2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hN
ZXNzYWdlLmNwcC4KKyAgICAgICAgKElQQzo6TWFjaE1lc3NhZ2U6OmNyZWF0ZSk6CisgICAgICAg
IChJUEM6Ok1hY2hNZXNzYWdlOjpNYWNoTWVzc2FnZSk6CisgICAgICAgIChJUEM6Ok1hY2hNZXNz
YWdlOjp+TWFjaE1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpNYWNoTWVzc2FnZTo6bWVzc2FnZVNp
emUpOgorICAgICAgICAoSVBDOjpNYWNoTWVzc2FnZTo6bGVha0Rlc2NyaXB0b3JzKToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvY29jb2EvTWFjaE1lc3NhZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9NYWNoTWVzc2FnZS5oLgorICAgICAgICAoSVBDOjpN
YWNoTWVzc2FnZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChJUEM6Ok1hY2hNZXNzYWdlOjpoZWFk
ZXIpOgorICAgICAgICAoSVBDOjpNYWNoTWVzc2FnZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSBjb25z
dCk6CisgICAgICAgIChJUEM6Ok1hY2hNZXNzYWdlOjptZXNzYWdlTmFtZSBjb25zdCk6CisgICAg
ICAgICogUGxhdGZvcm0vSVBDL2NvY29hL01hY2hQb3J0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaFBvcnQuaC4KKyAgICAgICAgKElQQzo6TWFjaFBv
cnQ6Ok1hY2hQb3J0KToKKyAgICAgICAgKElQQzo6TWFjaFBvcnQ6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChJUEM6Ok1hY2hQb3J0OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpNYWNoUG9ydDo6
cG9ydCBjb25zdCk6CisgICAgICAgIChJUEM6Ok1hY2hQb3J0OjpkaXNwb3NpdGlvbiBjb25zdCk6
CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlc0NvY29hLnR4
dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxOS0w
NS0wNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBb
bWFjT1NdIEF2b2lkIGNyYXNoaW5nIHRoZSBVSSBwcm9jZXNzIHdoZW4gd3JpdGluZyBlbXB0eSBk
YXRhIHRvIHRoZSBwYXN0ZWJvYXJkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9jb2NvYS9Db25uZWN0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9jb2NvYS9Db25uZWN0aW9uQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTBhMjlmMDk5ZGRkNmNjOTcy
ZTVlZWM1MzVkMzcxYzdjZWY0OTFhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbQpAQCAtMCwwICsxLDY1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDb25uZWN0aW9u
LmgiCisKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIkltcG9ydGFuY2VBc3Nl
cnRpb24uaCIKKyNpbXBvcnQgIk1hY2hNZXNzYWdlLmgiCisjaW1wb3J0ICJNYWNoUG9ydC5oIgor
I2ltcG9ydCAiTWFjaFV0aWxpdGllcy5oIgorI2ltcG9ydCAiV0tDcmFzaFJlcG9ydGVyLmgiCisj
aW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KKyNpbXBvcnQgPG1hY2gvbWFjaF9lcnJv
ci5oPgorI2ltcG9ydCA8bWFjaC92bV9tYXAuaD4KKyNpbXBvcnQgPHN5cy9tbWFuLmg+CisjaW1w
b3J0IDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKyNpbXBv
cnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyNpbXBvcnQgIlByb2Nlc3NBc3NlcnRpb24uaCIKKyNpbXBvcnQgPFVJS2l0L1VJQWNjZXNzaWJp
bGl0eS5oPgorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNpbXBvcnQgPEFYUnVudGlt
ZS9BWERlZmluZXMuaD4KKyNpbXBvcnQgPEFYUnVudGltZS9BWE5vdGlmaWNhdGlvbkNvbnN0YW50
cy5oPgorI2Vsc2UKKyNkZWZpbmUga0FYUGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbiAwCisj
ZW5kaWYKKworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQorI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzUHJpdi5oPgorI2Vsc2UKK3R5cGVkZWYgZW51bSB7CisgICAgQVhTdXNwZW5kU3RhdHVzUnVu
bmluZyA9IDAsCisgICAgQVhTdXNwZW5kU3RhdHVzU3VzcGVuZGVkLAorfSBBWFN1c3BlbmRTdGF0
dXM7CisjZW5kaWYKKworZXh0ZXJuICJDIiBBWEVycm9yIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nl
c3NTdXNwZW5kU3RhdHVzKEFYU3VzcGVuZFN0YXR1cyk7CisKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisKK25hbWVzcGFjZSBJUEMgeworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZU1lc3Nh
Z2VNYXhTaXplID0gNDA5NjsKKworLy8gQXJiaXRyYXJ5IG1lc3NhZ2UgSURzIHRoYXQgZG8gbm90
IGNvbGxpZGUgd2l0aCBNYWNoIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyAodXNlZCBteSBpbml0aWFs
cykuCitjb25zdGV4cHIgbWFjaF9tc2dfaWRfdCBpbmxpbmVCb2R5TWVzc2FnZUlEID0gMHhkYmEw
ZGJhOworY29uc3RleHByIG1hY2hfbXNnX2lkX3Qgb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRCA9IDB4
ZGJhMWRiYTsKKworLy8gQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cgZG9lcyB0d28gdGhp
bmdzOgorLy8gMSkgSXQgc2V0cyBhIHdhdGNoZG9nIHRpbWVyIHRvIGtpbGwgdGhlIHBlZXJlZCBw
cm9jZXNzLgorLy8gMikgT24gaU9TLCBtYWtlIHRoZSBwcm9jZXNzIHJ1bm5hYmxlIGZvciB0aGUg
ZHVyYXRpb24gb2YgdGhlIHdhdGNoZG9nCisvLyAgICB0byBlbnN1cmUgaXQgaGFzIGEgY2hhbmNl
IHRvIHRlcm1pbmF0ZSBjbGVhbmx5LgorY2xhc3MgQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hk
b2cgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUNvbm5lY3Rpb25UZXJtaW5hdGlv
bldhdGNoZG9nKE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9uX3Q+JiB4cGNDb25uZWN0aW9uLCBT
ZWNvbmRzIGludGVydmFsKQorICAgIHsKKyAgICAgICAgbmV3IENvbm5lY3Rpb25UZXJtaW5hdGlv
bldhdGNoZG9nKHhwY0Nvbm5lY3Rpb24sIGludGVydmFsKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIENvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nKE9TT2JqZWN0UHRyPHhwY19jb25u
ZWN0aW9uX3Q+JiB4cGNDb25uZWN0aW9uLCBTZWNvbmRzIGludGVydmFsKQorICAgICAgICA6IG1f
eHBjQ29ubmVjdGlvbih4cGNDb25uZWN0aW9uKQorICAgICAgICAsIG1fd2F0Y2hkb2dUaW1lcihS
dW5Mb29wOjptYWluKCksIHRoaXMsICZDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZzo6d2F0
Y2hkb2dUaW1lckZpcmVkKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgICwgbV9h
c3NlcnRpb24oc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OlByb2Nlc3NBbmRVSUFzc2VydGlvbj4o
eHBjX2Nvbm5lY3Rpb25fZ2V0X3BpZChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpLCAiQ29ubmVjdGlv
blRlcm1pbmF0aW9uV2F0Y2hkb2ciX3MsIFdlYktpdDo6QXNzZXJ0aW9uU3RhdGU6OkJhY2tncm91
bmQpKQorI2VuZGlmCisgICAgeworICAgICAgICBtX3dhdGNoZG9nVGltZXIuc3RhcnRPbmVTaG90
KGludGVydmFsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB3YXRjaGRvZ1RpbWVyRmlyZWQoKQor
ICAgIHsKKyAgICAgICAgeHBjX2Nvbm5lY3Rpb25fa2lsbChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCks
IFNJR0tJTEwpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisKKyAgICBPU09iamVjdFB0
cjx4cGNfY29ubmVjdGlvbl90PiBtX3hwY0Nvbm5lY3Rpb247CisgICAgUnVuTG9vcDo6VGltZXI8
Q29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2c+IG1fd2F0Y2hkb2dUaW1lcjsKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlByb2Nlc3NBbmRV
SUFzc2VydGlvbj4gbV9hc3NlcnRpb247CisjZW5kaWYKK307CisgICAgCit2b2lkIENvbm5lY3Rp
b246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFtX2lzQ29ubmVjdGVkKSB7Cisg
ICAgICAgIGlmIChtX3NlbmRQb3J0KSB7CisgICAgICAgICAgICBBU1NFUlQoIW1faXNTZXJ2ZXIp
OworICAgICAgICAgICAgZGVhbGxvY2F0ZVNlbmRSaWdodFNhZmVseShtX3NlbmRQb3J0KTsKKyAg
ICAgICAgICAgIG1fc2VuZFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX3JlY2VpdmVTb3VyY2UpIHsKKyAgICAgICAgICAgIC8vIEZvciBhIHNob3J0IHBl
cmlvZCBvZiB0aW1lLCB3aGVuIG1faXNTZXJ2ZXIgaXMgdHJ1ZSBhbmQgb3BlbigpIGhhcyBiZWVu
IGNhbGxlZCwgbV9yZWNlaXZlU291cmNlIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgICAg
ICAvLyBidXQgbV9pc0Nvbm5lY3RlZCBoYXMgbm90IGJlZW4gc2V0IHRvIHRydWUgeWV0LiBJbiB0
aGlzIGNhc2UsIHdlIG5lZWQgdG8gY2FuY2VsIG1fcmVjZWl2ZVNvdXJjZSBpbnN0ZWFkIG9mIGRl
c3Ryb3lpbmcKKyAgICAgICAgICAgIC8vIG1fcmVjZWl2ZVBvcnQgb3Vyc2VsdmVzLgorICAgICAg
ICAgICAgQVNTRVJUKG1faXNTZXJ2ZXIpOworICAgICAgICAgICAgY2FuY2VsUmVjZWl2ZVNvdXJj
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fcmVjZWl2ZVBvcnQpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2lzU2VydmVyKTsKKyNpZiAhUExBVEZPUk0oV0FUQ0hPUykKKyAgICAgICAg
ICAgIG1hY2hfcG9ydF91bmd1YXJkKG1hY2hfdGFza19zZWxmKCksIG1fcmVjZWl2ZVBvcnQsIHJl
aW50ZXJwcmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4odGhpcykpOworI2VuZGlmCisgICAg
ICAgICAgICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9y
dCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKKyAgICAgICAgICAgIG1fcmVjZWl2ZVBv
cnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlID0gbnVsbHB0cjsKKyAgICBtX2lz
SW5pdGlhbGl6aW5nU2VuZFNvdXJjZSA9IGZhbHNlOworICAgIG1faXNDb25uZWN0ZWQgPSBmYWxz
ZTsKKworICAgIEFTU0VSVChtX3NlbmRQb3J0KTsKKyAgICBBU1NFUlQobV9yZWNlaXZlUG9ydCk7
CisKKyAgICAvLyBVbnJlZ2lzdGVyIG91ciBwb3J0cy4KKyAgICBkaXNwYXRjaF9zb3VyY2VfY2Fu
Y2VsKG1fc2VuZFNvdXJjZSk7CisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX3NlbmRTb3VyY2UpOwor
ICAgIG1fc2VuZFNvdXJjZSA9IG51bGxwdHI7CisgICAgbV9zZW5kUG9ydCA9IE1BQ0hfUE9SVF9O
VUxMOworCisgICAgY2FuY2VsUmVjZWl2ZVNvdXJjZSgpOworfQorCit2b2lkIENvbm5lY3Rpb246
OmNhbmNlbFJlY2VpdmVTb3VyY2UoKQoreworICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwobV9y
ZWNlaXZlU291cmNlKTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcmVjZWl2ZVNvdXJjZSk7Cisg
ICAgbV9yZWNlaXZlU291cmNlID0gbnVsbHB0cjsKKyAgICBtX3JlY2VpdmVQb3J0ID0gTUFDSF9Q
T1JUX05VTEw7Cit9CisgICAgCit2b2lkIENvbm5lY3Rpb246OnRlcm1pbmF0ZVNvb24oU2Vjb25k
cyBpbnRlcnZhbCkKK3sKKyAgICBpZiAobV94cGNDb25uZWN0aW9uKQorICAgICAgICBDb25uZWN0
aW9uVGVybWluYXRpb25XYXRjaGRvZzo6Y3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hk
b2cobV94cGNDb25uZWN0aW9uLCBpbnRlcnZhbCk7Cit9CisgICAgCit2b2lkIENvbm5lY3Rpb246
OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKCFN
QUNIX1BPUlRfVkFMSUQoaWRlbnRpZmllci5wb3J0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1faXNTZXJ2ZXIpIHsKKyAgICAgICAgbV9yZWNlaXZlUG9ydCA9IGlkZW50aWZpZXIucG9y
dDsKKyAgICAgICAgbV9zZW5kUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworCisjaWYgIVBMQVRGT1JN
KFdBVENIT1MpCisgICAgICAgIG1hY2hfcG9ydF9ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCBtX3Jl
Y2VpdmVQb3J0LCByZWludGVycHJldF9jYXN0PG1hY2hfcG9ydF9jb250ZXh0X3Q+KHRoaXMpLCB0
cnVlKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIG1fcmVjZWl2ZVBvcnQgPSBNQUNI
X1BPUlRfTlVMTDsKKyAgICAgICAgbV9zZW5kUG9ydCA9IGlkZW50aWZpZXIucG9ydDsKKyAgICB9
CisKKyAgICBtX3NlbmRTb3VyY2UgPSBudWxscHRyOworICAgIG1fcmVjZWl2ZVNvdXJjZSA9IG51
bGxwdHI7CisKKyAgICBtX3hwY0Nvbm5lY3Rpb24gPSBpZGVudGlmaWVyLnhwY0Nvbm5lY3Rpb247
Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6b3BlbigpCit7CisgICAgaWYgKG1faXNTZXJ2ZXIpIHsK
KyAgICAgICAgQVNTRVJUKG1fcmVjZWl2ZVBvcnQpOworICAgICAgICBBU1NFUlQoIW1fc2VuZFBv
cnQpOworICAgICAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fcmVjZWl2ZVBvcnQpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fcmVjZWl2ZVBvcnQpOworICAgICAgICBBU1NF
UlQobV9zZW5kUG9ydCk7CisgICAgICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQobV9zZW5kUG9y
dCkpOworCisgICAgICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3Nl
bGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZtX3JlY2VpdmVQb3J0KTsKKyAgICAgICAg
aWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgYWxsb2NhdGUgbWFjaCBwb3J0LCBlcnJvciAleDogJXMiLCBrciwgbWFjaF9lcnJvcl9zdHJp
bmcoa3IpKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyNpZiAhUExBVEZPUk0o
V0FUQ0hPUykKKyAgICAgICAgbWFjaF9wb3J0X2d1YXJkKG1hY2hfdGFza19zZWxmKCksIG1fcmVj
ZWl2ZVBvcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4odGhpcyksIHRy
dWUpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIG1hY2hfcG9ydF9zZXRf
YXR0cmlidXRlcyhtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQb3J0LCBNQUNIX1BPUlRfREVO
QVBfUkVDRUlWRVIsIChtYWNoX3BvcnRfaW5mb190KTAsIDApOworI2VuZGlmCisKKyAgICAgICAg
bV9pc0Nvbm5lY3RlZCA9IHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBTZW5kIHRoZSBpbml0
aWFsaXplIG1lc3NhZ2UsIHdoaWNoIGNvbnRhaW5zIGEgc2VuZCByaWdodCBmb3IgdGhlIHNlcnZl
ciB0byB1c2UuCisgICAgICAgIGF1dG8gZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8RW5jb2Rl
cj4oIklQQyIsICJJbml0aWFsaXplQ29ubmVjdGlvbiIsIDApOworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUoTWFjaFBvcnQobV9yZWNlaXZlUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpKTsK
KworICAgICAgICBpbml0aWFsaXplU2VuZFNvdXJjZSgpOworCisgICAgICAgIHNlbmRNZXNzYWdl
KFdURk1vdmUoZW5jb2RlciksIHsgfSk7CisgICAgfQorCisgICAgLy8gQ2hhbmdlIHRoZSBtZXNz
YWdlIHF1ZXVlIGxlbmd0aCBmb3IgdGhlIHJlY2VpdmUgcG9ydC4KKyAgICBzZXRNYWNoUG9ydFF1
ZXVlTGVuZ3RoKG1fcmVjZWl2ZVBvcnQsIE1BQ0hfUE9SVF9RTElNSVRfTEFSR0UpOworCisgICAg
bV9yZWNlaXZlU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0Vf
VFlQRV9NQUNIX1JFQ1YsIG1fcmVjZWl2ZVBvcnQsIDAsIG1fY29ubmVjdGlvblF1ZXVlLT5kaXNw
YXRjaFF1ZXVlKCkpOworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihtX3Jl
Y2VpdmVTb3VyY2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAg
ICAgICAgcmVjZWl2ZVNvdXJjZUV2ZW50SGFuZGxlcigpOworICAgIH0pOworICAgIGRpc3BhdGNo
X3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRsZXIobV9yZWNlaXZlU291cmNlLCBbcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpLCByZWNlaXZlUG9ydCA9IG1fcmVjZWl2ZVBvcnRdIHsKKyNpZiAh
UExBVEZPUk0oV0FUQ0hPUykKKyAgICAgICAgbWFjaF9wb3J0X3VuZ3VhcmQobWFjaF90YXNrX3Nl
bGYoKSwgcmVjZWl2ZVBvcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4o
cHJvdGVjdGVkVGhpcy5wdHIoKSkpOworI2VuZGlmCisgICAgICAgIG1hY2hfcG9ydF9tb2RfcmVm
cyhtYWNoX3Rhc2tfc2VsZigpLCByZWNlaXZlUG9ydCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUs
IC0xKTsKKyAgICB9KTsKKworICAgIHJlZigpOworICAgIGRpc3BhdGNoX2FzeW5jKG1fY29ubmVj
dGlvblF1ZXVlLT5kaXNwYXRjaFF1ZXVlKCksIF57CisgICAgICAgIGRpc3BhdGNoX3Jlc3VtZSht
X3JlY2VpdmVTb3VyY2UpOworCisgICAgICAgIGlmIChtX3NlbmRTb3VyY2UpCisgICAgICAgICAg
ICBkaXNwYXRjaF9yZXN1bWUobV9zZW5kU291cmNlKTsKKworICAgICAgICBkZXJlZigpOworICAg
IH0pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6c2VuZE1lc3Nh
Z2Uoc3RkOjp1bmlxdWVfcHRyPE1hY2hNZXNzYWdlPiBtZXNzYWdlKQoreworICAgIEFTU0VSVCht
ZXNzYWdlKTsKKyAgICBBU1NFUlQoIW1fcGVuZGluZ091dGdvaW5nTWFjaE1lc3NhZ2UpOworICAg
IEFTU0VSVCghbV9pc0luaXRpYWxpemluZ1NlbmRTb3VyY2UpOworCisgICAgLy8gU2VuZCB0aGUg
bWVzc2FnZS4KKyAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF9tc2cobWVzc2FnZS0+aGVhZGVy
KCksIE1BQ0hfU0VORF9NU0cgfCBNQUNIX1NFTkRfVElNRU9VVCB8IE1BQ0hfU0VORF9OT1RJRlks
IG1lc3NhZ2UtPnNpemUoKSwgMCwgTUFDSF9QT1JUX05VTEwsIE1BQ0hfTVNHX1RJTUVPVVRfTk9O
RSwgTUFDSF9QT1JUX05VTEwpOworICAgIHN3aXRjaCAoa3IpIHsKKyAgICBjYXNlIE1BQ0hfTVNH
X1NVQ0NFU1M6CisgICAgICAgIC8vIFRoZSBrZXJuZWwgaGFzIGFscmVhZHkgYWRvcHRlZCB0aGUg
ZGVzY3JpcHRvcnMuCisgICAgICAgIG1lc3NhZ2UtPmxlYWtEZXNjcmlwdG9ycygpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgTUFDSF9TRU5EX1RJTUVEX09VVDoKKyAgICAgICAg
Ly8gV2UgdGltZWQgb3V0LCBzdGFzaCBhd2F5IHRoZSBtZXNzYWdlIGZvciBsYXRlci4KKyAgICAg
ICAgbV9wZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhc2UgTUFDSF9TRU5EX0lOVkFMSURfREVTVDoKKyAg
ICAgICAgLy8gVGhlIG90aGVyIGVuZCBoYXMgZGlzYXBwZWFyZWQsIHdlJ2xsIGdldCBhIGRlYWQg
bmFtZSBub3RpZmljYXRpb24gd2hpY2ggd2lsbCBjYXVzZSB1cyB0byBiZSBpbnZhbGlkYXRlZC4K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgV2ViS2l0Ojpz
ZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlvbigoX19icmlkZ2UgQ0ZT
dHJpbmdSZWYpW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJVbmhhbmRsZWQgZXJyb3IgY29k
ZSAleCwgbWVzc2FnZSAnJXM6OiVzJyIsIGtyLCBtZXNzYWdlLT5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkuZGF0YSgpLCBtZXNzYWdlLT5tZXNzYWdlTmFtZSgpLmRhdGEoKV0pOworICAgICAgICBDUkFT
SCgpOworICAgIH0KK30KKworYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2lu
Z01lc3NhZ2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fcGVuZGluZ091dGdvaW5nTWFjaE1l
c3NhZ2UgJiYgIW1faXNJbml0aWFsaXppbmdTZW5kU291cmNlOworfQorCitib29sIENvbm5lY3Rp
b246OnNlbmRPdXRnb2luZ01lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPEVuY29kZXI+IGVuY29kZXIp
Cit7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlICYmICFtX2lzSW5p
dGlhbGl6aW5nU2VuZFNvdXJjZSk7CisKKyAgICBhdXRvIGF0dGFjaG1lbnRzID0gZW5jb2Rlci0+
cmVsZWFzZUF0dGFjaG1lbnRzKCk7CisgICAgCisgICAgYXV0byBudW1iZXJPZlBvcnREZXNjcmlw
dG9ycyA9IHN0ZDo6Y291bnRfaWYoYXR0YWNobWVudHMuYmVnaW4oKSwgYXR0YWNobWVudHMuZW5k
KCksIFtdKGF1dG8mIGF0dGFjaG1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gYXR0YWNobWVu
dC50eXBlKCkgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRUeXBlOworICAgIH0pOworCisgICAgYm9v
bCBtZXNzYWdlQm9keUlzT09MID0gZmFsc2U7CisgICAgYXV0byBtZXNzYWdlU2l6ZSA9IE1hY2hN
ZXNzYWdlOjptZXNzYWdlU2l6ZShlbmNvZGVyLT5idWZmZXJTaXplKCksIG51bWJlck9mUG9ydERl
c2NyaXB0b3JzLCBtZXNzYWdlQm9keUlzT09MKTsKKyAgICBpZiAobWVzc2FnZVNpemUgPiBpbmxp
bmVNZXNzYWdlTWF4U2l6ZSkgeworICAgICAgICBtZXNzYWdlQm9keUlzT09MID0gdHJ1ZTsKKyAg
ICAgICAgbWVzc2FnZVNpemUgPSBNYWNoTWVzc2FnZTo6bWVzc2FnZVNpemUoMCwgbnVtYmVyT2ZQ
b3J0RGVzY3JpcHRvcnMsIG1lc3NhZ2VCb2R5SXNPT0wpOworICAgIH0KKworICAgIGF1dG8gbWVz
c2FnZSA9IE1hY2hNZXNzYWdlOjpjcmVhdGUoZW5jb2Rlci0+bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LnRvU3RyaW5nKCksIGVuY29kZXItPm1lc3NhZ2VOYW1lKCkudG9TdHJpbmcoKSwgbWVzc2FnZVNp
emUpOworCisgICAgYXV0byogaGVhZGVyID0gbWVzc2FnZS0+aGVhZGVyKCk7CisgICAgaGVhZGVy
LT5tc2doX2JpdHMgPSBNQUNIX01TR0hfQklUUyhNQUNIX01TR19UWVBFX0NPUFlfU0VORCwgMCk7
CisgICAgaGVhZGVyLT5tc2doX3NpemUgPSBtZXNzYWdlU2l6ZTsKKyAgICBoZWFkZXItPm1zZ2hf
cmVtb3RlX3BvcnQgPSBtX3NlbmRQb3J0OworICAgIGhlYWRlci0+bXNnaF9sb2NhbF9wb3J0ID0g
TUFDSF9QT1JUX05VTEw7CisgICAgaGVhZGVyLT5tc2doX2lkID0gbWVzc2FnZUJvZHlJc09PTCA/
IG91dE9mTGluZUJvZHlNZXNzYWdlSUQgOiBpbmxpbmVCb2R5TWVzc2FnZUlEOworCisgICAgYXV0
byogbWVzc2FnZURhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihoZWFkZXIgKyAxKTsK
KworICAgIGJvb2wgaXNDb21wbGV4ID0gbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMgfHwgbWVzc2Fn
ZUJvZHlJc09PTDsKKyAgICBpZiAoaXNDb21wbGV4KSB7CisgICAgICAgIGhlYWRlci0+bXNnaF9i
aXRzIHw9IE1BQ0hfTVNHSF9CSVRTX0NPTVBMRVg7CisKKyAgICAgICAgYXV0byogYm9keSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfYm9keV90Kj4obWVzc2FnZURhdGEpOworICAgICAgICBi
b2R5LT5tc2doX2Rlc2NyaXB0b3JfY291bnQgPSBudW1iZXJPZlBvcnREZXNjcmlwdG9ycyArIG1l
c3NhZ2VCb2R5SXNPT0w7CisgICAgICAgIG1lc3NhZ2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oYm9keSArIDEpOworCisgICAgICAgIGF1dG8gZ2V0RGVzY3JpcHRvckFuZEFkdmFu
Y2UgPSBbXSh1aW50OF90KiYgZGF0YSwgc3RkOjpzaXplX3QgdG9BZHZhbmNlKSB7CisgICAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19kZXNjcmlwdG9yX3QqPihzdGQ6
OmV4Y2hhbmdlKGRhdGEsIGRhdGEgKyB0b0FkdmFuY2UpKTsKKyAgICAgICAgfTsKKworICAgICAg
ICBmb3IgKGF1dG8mIGF0dGFjaG1lbnQgOiBhdHRhY2htZW50cykgeworICAgICAgICAgICAgQVNT
RVJUKGF0dGFjaG1lbnQudHlwZSgpID09IEF0dGFjaG1lbnQ6Ok1hY2hQb3J0VHlwZSk7CisgICAg
ICAgICAgICBpZiAoYXR0YWNobWVudC50eXBlKCkgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRUeXBl
KSB7CisgICAgICAgICAgICAgICAgYXV0byogZGVzY3JpcHRvciA9IGdldERlc2NyaXB0b3JBbmRB
ZHZhbmNlKG1lc3NhZ2VEYXRhLCBzaXplb2YobWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3QpKTsK
KyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5wb3J0Lm5hbWUgPSBhdHRhY2htZW50LnBvcnQo
KTsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5wb3J0LmRpc3Bvc2l0aW9uID0gYXR0YWNo
bWVudC5kaXNwb3NpdGlvbigpOworICAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItPnBvcnQudHlw
ZSA9IE1BQ0hfTVNHX1BPUlRfREVTQ1JJUFRPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtZXNzYWdlQm9keUlzT09MKSB7CisgICAgICAgICAgICBhdXRvKiBkZXNj
cmlwdG9yID0gZ2V0RGVzY3JpcHRvckFuZEFkdmFuY2UobWVzc2FnZURhdGEsIHNpemVvZihtYWNo
X21zZ19vb2xfZGVzY3JpcHRvcl90KSk7CisgICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRfb2Zf
bGluZS5hZGRyZXNzID0gZW5jb2Rlci0+YnVmZmVyKCk7CisgICAgICAgICAgICBkZXNjcmlwdG9y
LT5vdXRfb2ZfbGluZS5zaXplID0gZW5jb2Rlci0+YnVmZmVyU2l6ZSgpOworICAgICAgICAgICAg
ZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuY29weSA9IE1BQ0hfTVNHX1ZJUlRVQUxfQ09QWTsKKyAg
ICAgICAgICAgIGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLmRlYWxsb2NhdGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLnR5cGUgPSBNQUNIX01TR19PT0xfREVT
Q1JJUFRPUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENvcHkgdGhlIGRhdGEgaWYgaXQg
aXMgbm90IGJlaW5nIHNlbnQgb3V0LW9mLWxpbmUuCisgICAgaWYgKCFtZXNzYWdlQm9keUlzT09M
KQorICAgICAgICBtZW1jcHkobWVzc2FnZURhdGEsIGVuY29kZXItPmJ1ZmZlcigpLCBlbmNvZGVy
LT5idWZmZXJTaXplKCkpOworCisgICAgQVNTRVJUKG1fc2VuZFBvcnQpOworICAgIEFTU0VSVChN
QUNIX1BPUlRfVkFMSUQobV9zZW5kUG9ydCkpOworCisgICAgcmV0dXJuIHNlbmRNZXNzYWdlKFdU
Rk1vdmUobWVzc2FnZSkpOworfQorCit2b2lkIENvbm5lY3Rpb246OmluaXRpYWxpemVTZW5kU291
cmNlKCkKK3sKKyAgICBtX3NlbmRTb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3JlYXRlKERJU1BB
VENIX1NPVVJDRV9UWVBFX01BQ0hfU0VORCwgbV9zZW5kUG9ydCwgRElTUEFUQ0hfTUFDSF9TRU5E
X0RFQUQgfCBESVNQQVRDSF9NQUNIX1NFTkRfUE9TU0lCTEUsIG1fY29ubmVjdGlvblF1ZXVlLT5k
aXNwYXRjaFF1ZXVlKCkpOworICAgIG1faXNJbml0aWFsaXppbmdTZW5kU291cmNlID0gdHJ1ZTsK
KworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfcmVnaXN0cmF0aW9uX2hhbmRsZXIobV9zZW5kU291
cmNlLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIGlm
ICghbV9zZW5kU291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2lzSW5pdGlh
bGl6aW5nU2VuZFNvdXJjZSA9IGZhbHNlOworICAgICAgICByZXN1bWVTZW5kU291cmNlKCk7Cisg
ICAgfSk7CisgICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKG1fc2VuZFNvdXJj
ZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBpZiAo
IW1fc2VuZFNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB1bnNpZ25lZCBs
b25nIGRhdGEgPSBkaXNwYXRjaF9zb3VyY2VfZ2V0X2RhdGEobV9zZW5kU291cmNlKTsKKworICAg
ICAgICBpZiAoZGF0YSAmIERJU1BBVENIX01BQ0hfU0VORF9ERUFEKSB7CisgICAgICAgICAgICBj
b25uZWN0aW9uRGlkQ2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChkYXRhICYgRElTUEFUQ0hfTUFDSF9TRU5EX1BPU1NJQkxFKSB7CisgICAgICAg
ICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aHkgd2UgZ2V0IHNwdXJpb3VzIERJU1BBVENIX01B
Q0hfU0VORF9QT1NTSUJMRSBldmVudHMuCisgICAgICAgICAgICByZXN1bWVTZW5kU291cmNlKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIEFTU0VSVChN
QUNIX1BPUlRfVkFMSUQobV9zZW5kUG9ydCkpOworICAgIG1hY2hfcG9ydF90IHNlbmRQb3J0ID0g
bV9zZW5kUG9ydDsKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2NhbmNlbF9oYW5kbGVyKG1fc2Vu
ZFNvdXJjZSwgXnsKKyAgICAgICAgLy8gUmVsZWFzZSBvdXIgc2VuZCByaWdodC4KKyAgICAgICAg
ZGVhbGxvY2F0ZVNlbmRSaWdodFNhZmVseShzZW5kUG9ydCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
Q29ubmVjdGlvbjo6cmVzdW1lU2VuZFNvdXJjZSgpCit7CisgICAgQVNTRVJUKCFtX2lzSW5pdGlh
bGl6aW5nU2VuZFNvdXJjZSk7CisgICAgaWYgKG1fcGVuZGluZ091dGdvaW5nTWFjaE1lc3NhZ2Up
CisgICAgICAgIHNlbmRNZXNzYWdlKFdURk1vdmUobV9wZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2Fn
ZSkpOworICAgIHNlbmRPdXRnb2luZ01lc3NhZ2VzKCk7Cit9CisKK3N0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8RGVjb2Rlcj4gY3JlYXRlTWVzc2FnZURlY29kZXIobWFjaF9tc2dfaGVhZGVyX3QqIGhl
YWRlcikKK3sKKyAgICBpZiAoIShoZWFkZXItPm1zZ2hfYml0cyAmIE1BQ0hfTVNHSF9CSVRTX0NP
TVBMRVgpKSB7CisgICAgICAgIC8vIFdlIGhhdmUgYSBzaW1wbGUgbWVzc2FnZS4KKyAgICAgICAg
dWludDhfdCogYm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGhlYWRlciArIDEpOwor
ICAgICAgICBzaXplX3QgYm9keVNpemUgPSBoZWFkZXItPm1zZ2hfc2l6ZSAtIHNpemVvZihtYWNo
X21zZ19oZWFkZXJfdCk7CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RGVjb2Rl
cj4oYm9keSwgYm9keVNpemUsIG51bGxwdHIsIFZlY3RvcjxBdHRhY2htZW50PiB7IH0pOworICAg
IH0KKworICAgIGJvb2wgbWVzc2FnZUJvZHlJc09PTCA9IGhlYWRlci0+bXNnaF9pZCA9PSBvdXRP
ZkxpbmVCb2R5TWVzc2FnZUlEOworCisgICAgbWFjaF9tc2dfYm9keV90KiBib2R5ID0gcmVpbnRl
cnByZXRfY2FzdDxtYWNoX21zZ19ib2R5X3QqPihoZWFkZXIgKyAxKTsKKyAgICBtYWNoX21zZ19z
aXplX3QgbnVtRGVzY3JpcHRvcnMgPSBib2R5LT5tc2doX2Rlc2NyaXB0b3JfY291bnQ7CisgICAg
QVNTRVJUKG51bURlc2NyaXB0b3JzKTsKKworICAgIHVpbnQ4X3QqIGRlc2NyaXB0b3JEYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYm9keSArIDEpOworCisgICAgLy8gSWYgdGhlIG1l
c3NhZ2UgYm9keSB3YXMgc2VudCBvdXQtb2YtbGluZSwgZG9uJ3QgdHJlYXQgdGhlIGxhc3QgZGVz
Y3JpcHRvcgorICAgIC8vIGFzIGFuIGF0dGFjaG1lbnQsIHNpbmNlIGl0IGlzIHJlYWxseSB0aGUg
bWVzc2FnZSBib2R5LgorICAgIGlmIChtZXNzYWdlQm9keUlzT09MKQorICAgICAgICAtLW51bURl
c2NyaXB0b3JzOworCisgICAgLy8gQnVpbGQgYXR0YWNobWVudCBsaXN0CisgICAgVmVjdG9yPEF0
dGFjaG1lbnQ+IGF0dGFjaG1lbnRzKG51bURlc2NyaXB0b3JzKTsKKworICAgIGZvciAobWFjaF9t
c2dfc2l6ZV90IGkgPSAwOyBpIDwgbnVtRGVzY3JpcHRvcnM7ICsraSkgeworICAgICAgICBtYWNo
X21zZ19kZXNjcmlwdG9yX3QqIGRlc2NyaXB0b3IgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNn
X2Rlc2NyaXB0b3JfdCo+KGRlc2NyaXB0b3JEYXRhKTsKKyAgICAgICAgQVNTRVJUKGRlc2NyaXB0
b3ItPnR5cGUudHlwZSA9PSBNQUNIX01TR19QT1JUX0RFU0NSSVBUT1IpOworICAgICAgICBpZiAo
ZGVzY3JpcHRvci0+dHlwZS50eXBlICE9IE1BQ0hfTVNHX1BPUlRfREVTQ1JJUFRPUikKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGF0dGFjaG1lbnRzW251bURlc2NyaXB0
b3JzIC0gaSAtIDFdID0gQXR0YWNobWVudChkZXNjcmlwdG9yLT5wb3J0Lm5hbWUsIGRlc2NyaXB0
b3ItPnBvcnQuZGlzcG9zaXRpb24pOworICAgICAgICBkZXNjcmlwdG9yRGF0YSArPSBzaXplb2Yo
bWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3QpOworICAgIH0KKworICAgIGlmIChtZXNzYWdlQm9k
eUlzT09MKSB7CisgICAgICAgIG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCogZGVzY3JpcHRvciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfZGVzY3JpcHRvcl90Kj4oZGVzY3JpcHRvckRhdGEpOwor
ICAgICAgICBBU1NFUlQoZGVzY3JpcHRvci0+dHlwZS50eXBlID09IE1BQ0hfTVNHX09PTF9ERVND
UklQVE9SKTsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3ItPnR5cGUudHlwZSAhPSBNQUNIX01TR19P
T0xfREVTQ1JJUFRPUikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHVp
bnQ4X3QqIG1lc3NhZ2VCb2R5ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc2NyaXB0b3ItPm91
dF9vZl9saW5lLmFkZHJlc3MpOworICAgICAgICBzaXplX3QgbWVzc2FnZUJvZHlTaXplID0gZGVz
Y3JpcHRvci0+b3V0X29mX2xpbmUuc2l6ZTsKKworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxEZWNvZGVyPihtZXNzYWdlQm9keSwgbWVzc2FnZUJvZHlTaXplLCBbXShjb25zdCB1aW50
OF90KiBidWZmZXIsIHNpemVfdCBsZW5ndGgpIHsKKyAgICAgICAgICAgIHZtX2RlYWxsb2NhdGUo
bWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGJ1ZmZlciks
IGxlbmd0aCk7CisgICAgICAgIH0sIFdURk1vdmUoYXR0YWNobWVudHMpKTsKKyAgICB9CisKKyAg
ICB1aW50OF90KiBtZXNzYWdlQm9keSA9IGRlc2NyaXB0b3JEYXRhOworICAgIHNpemVfdCBtZXNz
YWdlQm9keVNpemUgPSBoZWFkZXItPm1zZ2hfc2l6ZSAtIChkZXNjcmlwdG9yRGF0YSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGhlYWRlcikpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8RGVjb2Rlcj4obWVzc2FnZUJvZHksIG1lc3NhZ2VCb2R5U2l6ZSwgbnVsbHB0ciwgV1RG
TW92ZShhdHRhY2htZW50cykpOworfQorCisvLyBUaGUgcmVjZWl2ZSBidWZmZXIgc2l6ZSBzaG91
bGQgYWx3YXlzIGluY2x1ZGUgdGhlIG1heGltdW0gdHJhaWxlciBzaXplLgorc3RhdGljIGNvbnN0
IHNpemVfdCByZWNlaXZlQnVmZmVyU2l6ZSA9IGlubGluZU1lc3NhZ2VNYXhTaXplICsgTUFYX1RS
QUlMRVJfU0laRTsKK3R5cGVkZWYgVmVjdG9yPGNoYXIsIHJlY2VpdmVCdWZmZXJTaXplPiBSZWNl
aXZlQnVmZmVyOworCitzdGF0aWMgbWFjaF9tc2dfaGVhZGVyX3QqIHJlYWRGcm9tTWFjaFBvcnQo
bWFjaF9wb3J0X3QgbWFjaFBvcnQsIFJlY2VpdmVCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBBU1NF
UlQoTUFDSF9QT1JUX1ZBTElEKG1hY2hQb3J0KSk7CisKKyAgICBidWZmZXIucmVzaXplKHJlY2Vp
dmVCdWZmZXJTaXplKTsKKworICAgIG1hY2hfbXNnX2hlYWRlcl90KiBoZWFkZXIgPSByZWludGVy
cHJldF9jYXN0PG1hY2hfbXNnX2hlYWRlcl90Kj4oYnVmZmVyLmRhdGEoKSk7CisgICAga2Vybl9y
ZXR1cm5fdCBrciA9IG1hY2hfbXNnKGhlYWRlciwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9SQ1ZfTEFS
R0UgfCBNQUNIX1JDVl9USU1FT1VUIHwgTUFDSF9SQ1ZfVk9VQ0hFUiwgMCwgYnVmZmVyLnNpemUo
KSwgbWFjaFBvcnQsIDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICBpZiAoa3IgPT0gTUFDSF9SQ1Zf
VElNRURfT1VUKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChrciA9PSBNQUNI
X1JDVl9UT09fTEFSR0UpIHsKKyAgICAgICAgLy8gVGhlIG1lc3NhZ2Ugd2FzIHRvbyBsYXJnZSwg
cmVzaXplIHRoZSBidWZmZXIgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgYnVmZmVyLnJlc2l6ZSho
ZWFkZXItPm1zZ2hfc2l6ZSArIE1BWF9UUkFJTEVSX1NJWkUpOworICAgICAgICBoZWFkZXIgPSBy
ZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2hlYWRlcl90Kj4oYnVmZmVyLmRhdGEoKSk7CisgICAg
ICAgIAorICAgICAgICBrciA9IG1hY2hfbXNnKGhlYWRlciwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9S
Q1ZfTEFSR0UgfCBNQUNIX1JDVl9USU1FT1VUIHwgTUFDSF9SQ1ZfVk9VQ0hFUiwgMCwgYnVmZmVy
LnNpemUoKSwgbWFjaFBvcnQsIDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgQVNTRVJUKGty
ICE9IE1BQ0hfUkNWX1RPT19MQVJHRSk7CisgICAgfQorCisgICAgaWYgKGtyICE9IE1BQ0hfTVNH
X1NVQ0NFU1MpIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIFdlYktpdDo6c2V0Q3Jh
c2hSZXBvcnRBcHBsaWNhdGlvblNwZWNpZmljSW5mb3JtYXRpb24oKF9fYnJpZGdlIENGU3RyaW5n
UmVmKVtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiVW5oYW5kbGVkIGVycm9yIGNvZGUgJXgg
ZnJvbSBtYWNoX21zZywgcmVjZWl2ZSBwb3J0IGlzICV4Iiwga3IsIG1hY2hQb3J0XSk7CisjZW5k
aWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIHJldHVybiBoZWFkZXI7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cmVj
ZWl2ZVNvdXJjZUV2ZW50SGFuZGxlcigpCit7CisgICAgUmVjZWl2ZUJ1ZmZlciBidWZmZXI7CisK
KyAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fcmVjZWl2ZVBvcnQpKTsKKyAgICBtYWNoX21z
Z19oZWFkZXJfdCogaGVhZGVyID0gcmVhZEZyb21NYWNoUG9ydChtX3JlY2VpdmVQb3J0LCBidWZm
ZXIpOworICAgIGlmICghaGVhZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGhl
YWRlci0+bXNnaF9pZCkgeworICAgIGNhc2UgTUFDSF9OT1RJRllfTk9fU0VOREVSUzoKKyAgICAg
ICAgQVNTRVJUKG1faXNTZXJ2ZXIpOworICAgICAgICBpZiAoIW1fc2VuZFBvcnQpCisgICAgICAg
ICAgICBjb25uZWN0aW9uRGlkQ2xvc2UoKTsKKyAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBp
bmxpbmVCb2R5TWVzc2FnZUlEOgorICAgIGNhc2Ugb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRDoKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1BQ0hfTk9USUZZX1NFTkRfT05DRToKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPERlY29k
ZXI+IGRlY29kZXIgPSBjcmVhdGVNZXNzYWdlRGVjb2RlcihoZWFkZXIpOworICAgIGlmICghZGVj
b2RlcikKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGRlY29kZXIt
PnNldEltcG9ydGFuY2VBc3NlcnRpb24oc3RkOjptYWtlX3VuaXF1ZTxJbXBvcnRhbmNlQXNzZXJ0
aW9uPihoZWFkZXIpKTsKKyNlbmRpZgorCisgICAgaWYgKGRlY29kZXItPm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSAiSVBDIiAmJiBkZWNvZGVyLT5tZXNzYWdlTmFtZSgpID09ICJJbml0aWFsaXpl
Q29ubmVjdGlvbiIpIHsKKyAgICAgICAgQVNTRVJUKG1faXNTZXJ2ZXIpOworICAgICAgICBBU1NF
UlQoIW1faXNDb25uZWN0ZWQpOworICAgICAgICBBU1NFUlQoIW1fc2VuZFBvcnQpOworCisgICAg
ICAgIE1hY2hQb3J0IHBvcnQ7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBvcnQpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogRGlzY29ubmVjdC4KKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIG1fc2VuZFBvcnQgPSBwb3J0LnBvcnQoKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChtX3NlbmRQb3J0KSB7CisgICAgICAgICAgICBBU1NFUlQoTUFDSF9QT1JU
X1ZBTElEKG1fcmVjZWl2ZVBvcnQpKTsKKyAgICAgICAgICAgIG1hY2hfcG9ydF90IHByZXZpb3Vz
Tm90aWZpY2F0aW9uUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworICAgICAgICAgICAgYXV0byBrciA9
IG1hY2hfcG9ydF9yZXF1ZXN0X25vdGlmaWNhdGlvbihtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2Vp
dmVQb3J0LCBNQUNIX05PVElGWV9OT19TRU5ERVJTLCAwLCBNQUNIX1BPUlRfTlVMTCwgTUFDSF9N
U0dfVFlQRV9NT1ZFX1NFTkRfT05DRSwgJnByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCk7CisgICAg
ICAgICAgICBBU1NFUlQoa3IgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICAgICAgICAgIGlmIChrciAh
PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBtYWNoX3BvcnRfcmVxdWVz
dF9ub3RpZmljYXRpb24gZmFpbHMsICdwcmV2aW91c05vdGlmaWNhdGlvblBvcnQnIHdpbGwgYmUg
dW5pbml0aWFsaXplZC4KKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIm1hY2hfcG9ydF9yZXF1
ZXN0X25vdGlmaWNhdGlvbiBmYWlsZWQ6ICgleCkgJXMiLCBrciwgbWFjaF9lcnJvcl9zdHJpbmco
a3IpKTsKKyAgICAgICAgICAgICAgICBwcmV2aW91c05vdGlmaWNhdGlvblBvcnQgPSBNQUNIX1BP
UlRfTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHByZXZpb3VzTm90aWZp
Y2F0aW9uUG9ydCAhPSBNQUNIX1BPUlRfTlVMTCkKKyAgICAgICAgICAgICAgICBkZWFsbG9jYXRl
U2VuZFJpZ2h0U2FmZWx5KHByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCk7CisKKyAgICAgICAgICAg
IGluaXRpYWxpemVTZW5kU291cmNlKCk7CisgICAgICAgICAgICBkaXNwYXRjaF9yZXN1bWUobV9z
ZW5kU291cmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOwor
CisgICAgICAgIC8vIFNlbmQgYW55IHBlbmRpbmcgb3V0Z29pbmcgbWVzc2FnZXMuCisgICAgICAg
IHNlbmRPdXRnb2luZ01lc3NhZ2VzKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAg
fQorCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKGRlY29kZXItPm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSAiSVBDIiAmJiBkZWNvZGVyLT5tZXNzYWdlTmFtZSgpID09ICJTZXRF
eGNlcHRpb25Qb3J0IikgeworICAgICAgICBpZiAobV9pc1NlcnZlcikgeworICAgICAgICAgICAg
Ly8gU2VydmVyIGNvbm5lY3Rpb25zIGFyZW4ndCBzdXBwb3NlZCB0byBoYXZlIHRoZWlyIGV4Y2Vw
dGlvbiBwb3J0cyBvdmVycmlkZGVuLiBUcmVhdCB0aGlzIGFzIGFuIGludmFsaWQgbWVzc2FnZS4K
KyAgICAgICAgICAgIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lUmVmZXJlbmNl
ID0gZGVjb2Rlci0+bWVzc2FnZVJlY2VpdmVyTmFtZSgpOworICAgICAgICAgICAgU3RyaW5nIG1l
c3NhZ2VSZWNlaXZlck5hbWUoU3RyaW5nKG1lc3NhZ2VSZWNlaXZlck5hbWVSZWZlcmVuY2UuZGF0
YSgpLCBtZXNzYWdlUmVjZWl2ZXJOYW1lUmVmZXJlbmNlLnNpemUoKSkpOworICAgICAgICAgICAg
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lUmVmZXJlbmNlID0gZGVjb2Rlci0+bWVzc2FnZU5h
bWUoKTsKKyAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlTmFtZShTdHJpbmcobWVzc2FnZU5hbWVS
ZWZlcmVuY2UuZGF0YSgpLCBtZXNzYWdlTmFtZVJlZmVyZW5jZS5zaXplKCkpKTsKKworICAgICAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyksIG1lc3NhZ2VSZWNlaXZlck5hbWUgPSBXVEZNb3ZlKG1lc3NhZ2VSZWNlaXZlck5hbWUp
LCBtZXNzYWdlTmFtZSA9IFdURk1vdmUobWVzc2FnZU5hbWUpXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdl
KG1lc3NhZ2VSZWNlaXZlck5hbWUudXRmOCgpLCBtZXNzYWdlTmFtZS51dGY4KCkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTWFjaFBv
cnQgZXhjZXB0aW9uUG9ydDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZXhjZXB0aW9u
UG9ydCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2V0TWFjaEV4Y2VwdGlvblBv
cnQoZXhjZXB0aW9uUG9ydC5wb3J0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlm
CisKKyAgICBwcm9jZXNzSW5jb21pbmdNZXNzYWdlKFdURk1vdmUoZGVjb2RlcikpOworfSAgICAK
KworSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIENvbm5lY3Rpb246OmlkZW50aWZpZXIoKSBj
b25zdAoreworICAgIHJldHVybiBJZGVudGlmaWVyKG1faXNTZXJ2ZXIgPyBtX3JlY2VpdmVQb3J0
IDogbV9zZW5kUG9ydCwgbV94cGNDb25uZWN0aW9uKTsKK30KKworT3B0aW9uYWw8YXVkaXRfdG9r
ZW5fdD4gQ29ubmVjdGlvbjo6Z2V0QXVkaXRUb2tlbigpCit7CisgICAgaWYgKCFtX3hwY0Nvbm5l
Y3Rpb24pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgCisgICAgYXVkaXRfdG9r
ZW5fdCBhdWRpdFRva2VuOworICAgIHhwY19jb25uZWN0aW9uX2dldF9hdWRpdF90b2tlbihtX3hw
Y0Nvbm5lY3Rpb24uZ2V0KCksICZhdWRpdFRva2VuKTsKKyAgICByZXR1cm4gV1RGTW92ZShhdWRp
dFRva2VuKTsKK30KKworYm9vbCBDb25uZWN0aW9uOjpraWxsKCkKK3sKKyAgICBpZiAobV94cGND
b25uZWN0aW9uKSB7CisgICAgICAgIHhwY19jb25uZWN0aW9uX2tpbGwobV94cGNDb25uZWN0aW9u
LmdldCgpLCBTSUdLSUxMKTsKKyAgICAgICAgbV93YXNLaWxsZWQgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitzdGF0aWMg
dm9pZCBBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihib29sIHN1c3Bl
bmRlZCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgX0FYVUlFbGVtZW50Tm90aWZ5UHJvY2Vz
c1N1c3BlbmRTdGF0dXMoc3VzcGVuZGVkID8gQVhTdXNwZW5kU3RhdHVzU3VzcGVuZGVkIDogQVhT
dXNwZW5kU3RhdHVzUnVubmluZyk7CisjZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFVJ
QWNjZXNzaWJpbGl0eVBvc3ROb3RpZmljYXRpb24oa0FYUGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNh
dGlvbiwgQHsgQCJwaWQiIDogQChnZXRwaWQoKSksIEAic3VzcGVuZGVkIiA6IEAoc3VzcGVuZGVk
KSB9KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHN1c3BlbmRlZCk7CisjZW5kaWYKK30KKyAg
ICAKK3ZvaWQgQ29ubmVjdGlvbjo6d2lsbFNlbmRTeW5jTWVzc2FnZShPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykKK3sKKyAgICBpZiAoc2VuZFN5bmNPcHRpb25zLmNv
bnRhaW5zKElQQzo6U2VuZFN5bmNPcHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNw
ZW5kKSAmJiBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQor
ICAgICAgICBBY2Nlc3NpYmlsaXR5UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbih0cnVlKTsK
K30KKwordm9pZCBDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5k
U3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQoreworICAgIGlmIChzZW5kU3luY09wdGlvbnMu
Y29udGFpbnMoSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1
c3BlbmQpICYmIFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkp
CisgICAgICAgIEFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGZhbHNl
KTsKK30KKworcGlkX3QgQ29ubmVjdGlvbjo6cmVtb3RlUHJvY2Vzc0lEKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1feHBjQ29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
eHBjX2Nvbm5lY3Rpb25fZ2V0X3BpZChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpOworfQorICAgIAor
fSAvLyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9jb2NvYS9JbXBvcnRhbmNlQXNzZXJ0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9jb2NvYS9JbXBvcnRhbmNlQXNzZXJ0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjJiZDg4NTQ0NzVhMDJh
ODRiMzI0NzdlMGRiZjkyOWUxNzQ4ZGU1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL2NvY29hL0ltcG9ydGFuY2VBc3NlcnRpb24uaApAQCAtMCwwICsxLDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNp
bmNsdWRlIDxtYWNoL21lc3NhZ2UuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIEltcG9y
dGFuY2VBc3NlcnRpb24geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEltcG9ydGFuY2VBc3NlcnRpb24pOworCitwdWJsaWM6CisgICAgZXhw
bGljaXQgSW1wb3J0YW5jZUFzc2VydGlvbihtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVyKQorICAg
ICAgICA6IG1fdm91Y2hlcigwKQorICAgIHsKKyAgICAgICAgaWYgKE1BQ0hfTVNHSF9CSVRTX0hB
U19WT1VDSEVSKGhlYWRlci0+bXNnaF9iaXRzKSkgeworICAgICAgICAgICAgbV92b3VjaGVyID0g
aGVhZGVyLT5tc2doX3ZvdWNoZXJfcG9ydDsKKyAgICAgICAgICAgIGhlYWRlci0+bXNnaF92b3Vj
aGVyX3BvcnQgPSBNQUNIX1ZPVUNIRVJfTlVMTDsKKyAgICAgICAgICAgIGhlYWRlci0+bXNnaF9i
aXRzICY9IH4oTUFDSF9NU0dIX0JJVFNfVk9VQ0hFUl9NQVNLIHwgTUFDSF9NU0dIX0JJVFNfUkFJ
U0VJTVApOworICAgICAgICB9CisgICAgfQorCisgICAgfkltcG9ydGFuY2VBc3NlcnRpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fdm91Y2hlcikgeworICAgICAgICAgICAga2Vybl9yZXR1cm5f
dCBrciA9IG1hY2hfdm91Y2hlcl9kZWFsbG9jYXRlKG1fdm91Y2hlcik7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGtyLCAha3IpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAg
IG1hY2hfdm91Y2hlcl90IG1fdm91Y2hlcjsKK307CisKK30KKworI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL2NvY29hL01hY2hN
ZXNzYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL2NvY29hL01hY2hNZXNzYWdl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lYzg0Yzk2YTEzOWFmODA1ZjEzZjA3YWM3Y2JlMDI0YjBmNTNkYTIz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvTWFj
aE1lc3NhZ2UuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiTWFjaE1lc3NhZ2UuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisKK25hbWVzcGFjZSBJUEMgeworCitzdGQ6OnVuaXF1
ZV9wdHI8TWFjaE1lc3NhZ2U+IE1hY2hNZXNzYWdlOjpjcmVhdGUoQ1N0cmluZyYmIG1lc3NhZ2VS
ZWNlaXZlck5hbWUsIENTdHJpbmcmJiBtZXNzYWdlTmFtZSwgc2l6ZV90IHNpemUpCit7CisgICAg
dm9pZCogbWVtb3J5ID0gV1RGOjpmYXN0WmVyb2VkTWFsbG9jKHNpemVvZihNYWNoTWVzc2FnZSkg
KyBzaXplKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE1hY2hNZXNzYWdlPiB7IG5ldyAo
Tm90TnVsbCwgbWVtb3J5KSBNYWNoTWVzc2FnZSB7IFdURk1vdmUobWVzc2FnZVJlY2VpdmVyTmFt
ZSksIFdURk1vdmUobWVzc2FnZU5hbWUpLCBzaXplIH0gfTsKK30KKworTWFjaE1lc3NhZ2U6Ok1h
Y2hNZXNzYWdlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYgbWVzc2Fn
ZU5hbWUsIHNpemVfdCBzaXplKQorICAgIDogbV9tZXNzYWdlUmVjZWl2ZXJOYW1lKFdURk1vdmUo
bWVzc2FnZVJlY2VpdmVyTmFtZSkpCisgICAgLCBtX21lc3NhZ2VOYW1lKFdURk1vdmUobWVzc2Fn
ZU5hbWUpKQorICAgICwgbV9zaXplIHsgc2l6ZSB9Cit7Cit9CisKK01hY2hNZXNzYWdlOjp+TWFj
aE1lc3NhZ2UoKQoreworICAgIGlmIChtX3Nob3VsZEZyZWVEZXNjcmlwdG9ycykKKyAgICAgICAg
OjptYWNoX21zZ19kZXN0cm95KGhlYWRlcigpKTsKK30KKworc2l6ZV90IE1hY2hNZXNzYWdlOjpt
ZXNzYWdlU2l6ZShzaXplX3QgYm9keVNpemUsIHNpemVfdCBwb3J0RGVzY3JpcHRvckNvdW50LCBz
aXplX3QgbWVtb3J5RGVzY3JpcHRvckNvdW50KQoreworICAgIHNpemVfdCBtZXNzYWdlU2l6ZSA9
IHNpemVvZihtYWNoX21zZ19oZWFkZXJfdCkgKyBib2R5U2l6ZTsKKworICAgIGlmIChwb3J0RGVz
Y3JpcHRvckNvdW50IHx8IG1lbW9yeURlc2NyaXB0b3JDb3VudCkgeworICAgICAgICBtZXNzYWdl
U2l6ZSArPSBzaXplb2YobWFjaF9tc2dfYm9keV90KTsKKyAgICAgICAgbWVzc2FnZVNpemUgKz0g
KHBvcnREZXNjcmlwdG9yQ291bnQgKiBzaXplb2YobWFjaF9tc2dfcG9ydF9kZXNjcmlwdG9yX3Qp
KTsKKyAgICAgICAgbWVzc2FnZVNpemUgKz0gKG1lbW9yeURlc2NyaXB0b3JDb3VudCAqIHNpemVv
ZihtYWNoX21zZ19vb2xfZGVzY3JpcHRvcl90KSk7CisgICAgfQorCisgICAgcmV0dXJuIHJvdW5k
X21zZyhtZXNzYWdlU2l6ZSk7Cit9CisKK3ZvaWQgTWFjaE1lc3NhZ2U6OmxlYWtEZXNjcmlwdG9y
cygpCit7CisgICAgbV9zaG91bGRGcmVlRGVzY3JpcHRvcnMgPSBmYWxzZTsKK30KKworfQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9jb2NvYS9NYWNoTWVzc2FnZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
Y29jb2EvTWFjaE1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDEzMWM3ZjBkM2VmYTM4YWY0MDU0ZTI3
NmQ0ZmMyODZjOTM0NDJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvY29jb2EvTWFjaE1lc3NhZ2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShDT0NPQSkKKworI2luY2x1ZGUgPG1hY2gvbWVz
c2FnZS5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJUEMgeworCitjbGFzcyBNYWNoTWVzc2FnZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNYWNo
TWVzc2FnZT4gY3JlYXRlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYg
bWVzc2FnZU5hbWUsIHNpemVfdCk7CisgICAgfk1hY2hNZXNzYWdlKCk7CisKKyAgICBzdGF0aWMg
c2l6ZV90IG1lc3NhZ2VTaXplKHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IHBvcnREZXNjcmlwdG9y
Q291bnQsIHNpemVfdCBtZW1vcnlEZXNjcmlwdG9yQ291bnQpOworCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVy
KCkgeyByZXR1cm4gbV9tZXNzYWdlSGVhZGVyOyB9CisKKyAgICB2b2lkIGxlYWtEZXNjcmlwdG9y
cygpOworCisgICAgY29uc3QgQ1N0cmluZyYgbWVzc2FnZVJlY2VpdmVyTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTmFtZTsgfQorICAgIGNvbnN0IENTdHJpbmcmIG1lc3Nh
Z2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlTmFtZTsgfQorCitwcml2YXRlOgorICAg
IE1hY2hNZXNzYWdlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYgbWVz
c2FnZU5hbWUsIHNpemVfdCk7CisKKyAgICBDU3RyaW5nIG1fbWVzc2FnZVJlY2VpdmVyTmFtZTsK
KyAgICBDU3RyaW5nIG1fbWVzc2FnZU5hbWU7CisgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICBib29s
IG1fc2hvdWxkRnJlZURlc2NyaXB0b3JzIHsgdHJ1ZSB9OworICAgIG1hY2hfbXNnX2hlYWRlcl90
IG1fbWVzc2FnZUhlYWRlcltdOworfTsKKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0Ep
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9jb2NvYS9NYWNoUG9ydC5o
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvTWFjaFBvcnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZDBjMzY0MDgyMzc3ZWNhMzZlMzNiOGZjYjg1MWNiNjc1OTBhYzRmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvTWFjaFBvcnQuaApAQCAtMCww
ICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBdHRhY2ht
ZW50LmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKKworbmFt
ZXNwYWNlIElQQyB7CisKK2NsYXNzIE1hY2hQb3J0IHsKK3B1YmxpYzoKKyAgICBNYWNoUG9ydCgp
CisgICAgICAgIDogbV9wb3J0KE1BQ0hfUE9SVF9OVUxMKQorICAgICAgICAsIG1fZGlzcG9zaXRp
b24oMCkKKyAgICB7CisgICAgfQorCisgICAgTWFjaFBvcnQobWFjaF9wb3J0X25hbWVfdCBwb3J0
LCBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbikKKyAgICAgICAgOiBtX3BvcnQocG9y
dCkKKyAgICAgICAgLCBtX2Rpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
ZW5jb2RlciA8PCBBdHRhY2htZW50KG1fcG9ydCwgbV9kaXNwb3NpdGlvbik7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1hY2hQb3J0JiBwKQorICAg
IHsKKyAgICAgICAgQXR0YWNobWVudCBhdHRhY2htZW50OworICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGF0dGFjaG1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgcC5tX3BvcnQgPSBhdHRhY2htZW50LnBvcnQoKTsKKyAgICAgICAgcC5tX2Rpc3Bv
c2l0aW9uID0gYXR0YWNobWVudC5kaXNwb3NpdGlvbigpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBtYWNoX3BvcnRfbmFtZV90IHBvcnQoKSBjb25zdCB7IHJldHVybiBtX3Bv
cnQ7IH0KKyAgICBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzcG9zaXRpb247IH0KKworcHJpdmF0ZToKKyAgICBtYWNoX3BvcnRfbmFtZV90IG1f
cG9ydDsKKyAgICBtYWNoX21zZ190eXBlX25hbWVfdCBtX2Rpc3Bvc2l0aW9uOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9t
YWMvQ29ubmVjdGlvbk1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9Db25u
ZWN0aW9uTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzVmMTFjMGNhY2Q5
YTdkODcyOTg4NjI0Y2IyOTQ1MzAxMzIzNWJhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9Db25uZWN0
aW9uTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiQ29ubmVjdGlvbi5oIgotCi0jaW1wb3J0
ICJEYXRhUmVmZXJlbmNlLmgiCi0jaW1wb3J0ICJJbXBvcnRhbmNlQXNzZXJ0aW9uLmgiCi0jaW1w
b3J0ICJNYWNoTWVzc2FnZS5oIgotI2ltcG9ydCAiTWFjaFBvcnQuaCIKLSNpbXBvcnQgIk1hY2hV
dGlsaXRpZXMuaCIKLSNpbXBvcnQgIldLQ3Jhc2hSZXBvcnRlci5oIgotI2ltcG9ydCA8V2ViQ29y
ZS9BWE9iamVjdENhY2hlLmg+Ci0jaW1wb3J0IDxtYWNoL21hY2hfZXJyb3IuaD4KLSNpbXBvcnQg
PG1hY2gvdm1fbWFwLmg+Ci0jaW1wb3J0IDxzeXMvbW1hbi5oPgotI2ltcG9ydCA8d3RmL01hY2hT
ZW5kUmlnaHQuaD4KLSNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+Ci0jaW1wb3J0IDx3dGYvc3BpL2Rh
cndpbi9YUENTUEkuaD4KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW1wb3J0ICJQcm9j
ZXNzQXNzZXJ0aW9uLmgiCi0jaW1wb3J0IDxVSUtpdC9VSUFjY2Vzc2liaWxpdHkuaD4KLQotI2lm
IFVTRShBUFBMRV9JTlRFUk5BTF9TREspCi0jaW1wb3J0IDxBWFJ1bnRpbWUvQVhEZWZpbmVzLmg+
Ci0jaW1wb3J0IDxBWFJ1bnRpbWUvQVhOb3RpZmljYXRpb25Db25zdGFudHMuaD4KLSNlbHNlCi0j
ZGVmaW5lIGtBWFBpZFN0YXR1c0NoYW5nZWROb3RpZmljYXRpb24gMAotI2VuZGlmCi0KLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNp
bXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlc1ByaXYuaD4KLSNl
bHNlCi10eXBlZGVmIGVudW0gewotICAgIEFYU3VzcGVuZFN0YXR1c1J1bm5pbmcgPSAwLAotICAg
IEFYU3VzcGVuZFN0YXR1c1N1c3BlbmRlZCwKLX0gQVhTdXNwZW5kU3RhdHVzOwotI2VuZGlmCi0K
LWV4dGVybiAiQyIgQVhFcnJvciBfQVhVSUVsZW1lbnROb3RpZnlQcm9jZXNzU3VzcGVuZFN0YXR1
cyhBWFN1c3BlbmRTdGF0dXMpOwotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi1uYW1lc3Bh
Y2UgSVBDIHsKLQotc3RhdGljIGNvbnN0IHNpemVfdCBpbmxpbmVNZXNzYWdlTWF4U2l6ZSA9IDQw
OTY7Ci0KLS8vIEFyYml0cmFyeSBtZXNzYWdlIElEcyB0aGF0IGRvIG5vdCBjb2xsaWRlIHdpdGgg
TWFjaCBub3RpZmljYXRpb24gbWVzc2FnZXMgKHVzZWQgbXkgaW5pdGlhbHMpLgotY29uc3RleHBy
IG1hY2hfbXNnX2lkX3QgaW5saW5lQm9keU1lc3NhZ2VJRCA9IDB4ZGJhMGRiYTsKLWNvbnN0ZXhw
ciBtYWNoX21zZ19pZF90IG91dE9mTGluZUJvZHlNZXNzYWdlSUQgPSAweGRiYTFkYmE7Ci0KLS8v
IENvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nIGRvZXMgdHdvIHRoaW5nczoKLS8vIDEpIEl0
IHNldHMgYSB3YXRjaGRvZyB0aW1lciB0byBraWxsIHRoZSBwZWVyZWQgcHJvY2Vzcy4KLS8vIDIp
IE9uIGlPUywgbWFrZSB0aGUgcHJvY2VzcyBydW5uYWJsZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRo
ZSB3YXRjaGRvZwotLy8gICAgdG8gZW5zdXJlIGl0IGhhcyBhIGNoYW5jZSB0byB0ZXJtaW5hdGUg
Y2xlYW5seS4KLWNsYXNzIENvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgdm9pZCBjcmVhdGVDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZyhPU09i
amVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiYgeHBjQ29ubmVjdGlvbiwgU2Vjb25kcyBpbnRlcnZh
bCkKLSAgICB7Ci0gICAgICAgIG5ldyBDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZyh4cGND
b25uZWN0aW9uLCBpbnRlcnZhbCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBDb25uZWN0
aW9uVGVybWluYXRpb25XYXRjaGRvZyhPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiYgeHBj
Q29ubmVjdGlvbiwgU2Vjb25kcyBpbnRlcnZhbCkKLSAgICAgICAgOiBtX3hwY0Nvbm5lY3Rpb24o
eHBjQ29ubmVjdGlvbikKLSAgICAgICAgLCBtX3dhdGNoZG9nVGltZXIoUnVuTG9vcDo6bWFpbigp
LCB0aGlzLCAmQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2c6OndhdGNoZG9nVGltZXJGaXJl
ZCkKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAsIG1fYXNzZXJ0aW9uKHN0ZDo6
bWFrZV91bmlxdWU8V2ViS2l0OjpQcm9jZXNzQW5kVUlBc3NlcnRpb24+KHhwY19jb25uZWN0aW9u
X2dldF9waWQobV94cGNDb25uZWN0aW9uLmdldCgpKSwgIkNvbm5lY3Rpb25UZXJtaW5hdGlvbldh
dGNoZG9nIl9zLCBXZWJLaXQ6OkFzc2VydGlvblN0YXRlOjpCYWNrZ3JvdW5kKSkKLSNlbmRpZgot
ICAgIHsKLSAgICAgICAgbV93YXRjaGRvZ1RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZhbCk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgd2F0Y2hkb2dUaW1lckZpcmVkKCkKLSAgICB7Ci0gICAgICAg
IHhwY19jb25uZWN0aW9uX2tpbGwobV94cGNDb25uZWN0aW9uLmdldCgpLCBTSUdLSUxMKTsKLSAg
ICAgICAgZGVsZXRlIHRoaXM7Ci0gICAgfQotCi0gICAgT1NPYmplY3RQdHI8eHBjX2Nvbm5lY3Rp
b25fdD4gbV94cGNDb25uZWN0aW9uOwotICAgIFJ1bkxvb3A6OlRpbWVyPENvbm5lY3Rpb25UZXJt
aW5hdGlvbldhdGNoZG9nPiBtX3dhdGNoZG9nVGltZXI7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpQcm9jZXNzQW5kVUlBc3NlcnRpb24+IG1f
YXNzZXJ0aW9uOwotI2VuZGlmCi19OwotICAgIAotdm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUlu
dmFsaWRhdGUoKQotewotICAgIGlmICghbV9pc0Nvbm5lY3RlZCkgewotICAgICAgICBpZiAobV9z
ZW5kUG9ydCkgewotICAgICAgICAgICAgQVNTRVJUKCFtX2lzU2VydmVyKTsKLSAgICAgICAgICAg
IGRlYWxsb2NhdGVTZW5kUmlnaHRTYWZlbHkobV9zZW5kUG9ydCk7Ci0gICAgICAgICAgICBtX3Nl
bmRQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9yZWNl
aXZlU291cmNlKSB7Ci0gICAgICAgICAgICAvLyBGb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZSwg
d2hlbiBtX2lzU2VydmVyIGlzIHRydWUgYW5kIG9wZW4oKSBoYXMgYmVlbiBjYWxsZWQsIG1fcmVj
ZWl2ZVNvdXJjZSBoYXMgYmVlbiBpbml0aWFsaXplZAotICAgICAgICAgICAgLy8gYnV0IG1faXND
b25uZWN0ZWQgaGFzIG5vdCBiZWVuIHNldCB0byB0cnVlIHlldC4gSW4gdGhpcyBjYXNlLCB3ZSBu
ZWVkIHRvIGNhbmNlbCBtX3JlY2VpdmVTb3VyY2UgaW5zdGVhZCBvZiBkZXN0cm95aW5nCi0gICAg
ICAgICAgICAvLyBtX3JlY2VpdmVQb3J0IG91cnNlbHZlcy4KLSAgICAgICAgICAgIEFTU0VSVCht
X2lzU2VydmVyKTsKLSAgICAgICAgICAgIGNhbmNlbFJlY2VpdmVTb3VyY2UoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtX3JlY2VpdmVQb3J0KSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9p
c1NlcnZlcik7Ci0jaWYgIVBMQVRGT1JNKFdBVENIT1MpCi0gICAgICAgICAgICBtYWNoX3BvcnRf
dW5ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQb3J0LCByZWludGVycHJldF9jYXN0
PG1hY2hfcG9ydF9jb250ZXh0X3Q+KHRoaXMpKTsKLSNlbmRpZgotICAgICAgICAgICAgbWFjaF9w
b3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIG1fcmVjZWl2ZVBvcnQsIE1BQ0hfUE9SVF9S
SUdIVF9SRUNFSVZFLCAtMSk7Ci0gICAgICAgICAgICBtX3JlY2VpdmVQb3J0ID0gTUFDSF9QT1JU
X05VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wZW5k
aW5nT3V0Z29pbmdNYWNoTWVzc2FnZSA9IG51bGxwdHI7Ci0gICAgbV9pc0luaXRpYWxpemluZ1Nl
bmRTb3VyY2UgPSBmYWxzZTsKLSAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7Ci0KLSAgICBBU1NF
UlQobV9zZW5kUG9ydCk7Ci0gICAgQVNTRVJUKG1fcmVjZWl2ZVBvcnQpOwotCi0gICAgLy8gVW5y
ZWdpc3RlciBvdXIgcG9ydHMuCi0gICAgZGlzcGF0Y2hfc291cmNlX2NhbmNlbChtX3NlbmRTb3Vy
Y2UpOwotICAgIGRpc3BhdGNoX3JlbGVhc2UobV9zZW5kU291cmNlKTsKLSAgICBtX3NlbmRTb3Vy
Y2UgPSBudWxscHRyOwotICAgIG1fc2VuZFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLQotICAgIGNh
bmNlbFJlY2VpdmVTb3VyY2UoKTsKLX0KLQotdm9pZCBDb25uZWN0aW9uOjpjYW5jZWxSZWNlaXZl
U291cmNlKCkKLXsKLSAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKG1fcmVjZWl2ZVNvdXJjZSk7
Ci0gICAgZGlzcGF0Y2hfcmVsZWFzZShtX3JlY2VpdmVTb3VyY2UpOwotICAgIG1fcmVjZWl2ZVNv
dXJjZSA9IG51bGxwdHI7Ci0gICAgbV9yZWNlaXZlUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotfQot
ICAgIAotdm9pZCBDb25uZWN0aW9uOjp0ZXJtaW5hdGVTb29uKFNlY29uZHMgaW50ZXJ2YWwpCi17
Ci0gICAgaWYgKG1feHBjQ29ubmVjdGlvbikKLSAgICAgICAgQ29ubmVjdGlvblRlcm1pbmF0aW9u
V2F0Y2hkb2c6OmNyZWF0ZUNvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nKG1feHBjQ29ubmVj
dGlvbiwgaW50ZXJ2YWwpOwotfQotICAgIAotdm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRp
YWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVyKQotewotICAgIGlmICghTUFDSF9QT1JUX1ZBTElE
KGlkZW50aWZpZXIucG9ydCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lzU2VydmVy
KSB7Ci0gICAgICAgIG1fcmVjZWl2ZVBvcnQgPSBpZGVudGlmaWVyLnBvcnQ7Ci0gICAgICAgIG1f
c2VuZFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLQotI2lmICFQTEFURk9STShXQVRDSE9TKQotICAg
ICAgICBtYWNoX3BvcnRfZ3VhcmQobWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9ydCwgcmVp
bnRlcnByZXRfY2FzdDxtYWNoX3BvcnRfY29udGV4dF90Pih0aGlzKSwgdHJ1ZSk7Ci0jZW5kaWYK
LSAgICB9IGVsc2UgewotICAgICAgICBtX3JlY2VpdmVQb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0g
ICAgICAgIG1fc2VuZFBvcnQgPSBpZGVudGlmaWVyLnBvcnQ7Ci0gICAgfQotCi0gICAgbV9zZW5k
U291cmNlID0gbnVsbHB0cjsKLSAgICBtX3JlY2VpdmVTb3VyY2UgPSBudWxscHRyOwotCi0gICAg
bV94cGNDb25uZWN0aW9uID0gaWRlbnRpZmllci54cGNDb25uZWN0aW9uOwotfQotCi1ib29sIENv
bm5lY3Rpb246Om9wZW4oKQotewotICAgIGlmIChtX2lzU2VydmVyKSB7Ci0gICAgICAgIEFTU0VS
VChtX3JlY2VpdmVQb3J0KTsKLSAgICAgICAgQVNTRVJUKCFtX3NlbmRQb3J0KTsKLSAgICAgICAg
QVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtX3JlY2VpdmVQb3J0KSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKCFtX3JlY2VpdmVQb3J0KTsKLSAgICAgICAgQVNTRVJUKG1fc2VuZFBvcnQp
OwotICAgICAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fc2VuZFBvcnQpKTsKLQotICAgICAg
ICBhdXRvIGtyID0gbWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9S
VF9SSUdIVF9SRUNFSVZFLCAmbV9yZWNlaXZlUG9ydCk7Ci0gICAgICAgIGlmIChrciAhPSBLRVJO
X1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIG1h
Y2ggcG9ydCwgZXJyb3IgJXg6ICVzIiwga3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSk7Ci0gICAg
ICAgICAgICBDUkFTSCgpOwotICAgICAgICB9Ci0jaWYgIVBMQVRGT1JNKFdBVENIT1MpCi0gICAg
ICAgIG1hY2hfcG9ydF9ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQb3J0LCByZWlu
dGVycHJldF9jYXN0PG1hY2hfcG9ydF9jb250ZXh0X3Q+KHRoaXMpLCB0cnVlKTsKLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBtYWNoX3BvcnRfc2V0X2F0dHJpYnV0ZXMobWFj
aF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9ydCwgTUFDSF9QT1JUX0RFTkFQX1JFQ0VJVkVSLCAo
bWFjaF9wb3J0X2luZm9fdCkwLCAwKTsKLSNlbmRpZgotCi0gICAgICAgIG1faXNDb25uZWN0ZWQg
PSB0cnVlOwotICAgICAgICAKLSAgICAgICAgLy8gU2VuZCB0aGUgaW5pdGlhbGl6ZSBtZXNzYWdl
LCB3aGljaCBjb250YWlucyBhIHNlbmQgcmlnaHQgZm9yIHRoZSBzZXJ2ZXIgdG8gdXNlLgotICAg
ICAgICBhdXRvIGVuY29kZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEVuY29kZXI+KCJJUEMiLCAiSW5p
dGlhbGl6ZUNvbm5lY3Rpb24iLCAwKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKE1hY2hQb3J0
KG1fcmVjZWl2ZVBvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKSk7Ci0KLSAgICAgICAgaW5p
dGlhbGl6ZVNlbmRTb3VyY2UoKTsKLQotICAgICAgICBzZW5kTWVzc2FnZShXVEZNb3ZlKGVuY29k
ZXIpLCB7IH0pOwotICAgIH0KLQotICAgIC8vIENoYW5nZSB0aGUgbWVzc2FnZSBxdWV1ZSBsZW5n
dGggZm9yIHRoZSByZWNlaXZlIHBvcnQuCi0gICAgc2V0TWFjaFBvcnRRdWV1ZUxlbmd0aChtX3Jl
Y2VpdmVQb3J0LCBNQUNIX1BPUlRfUUxJTUlUX0xBUkdFKTsKLQotICAgIFJlZlB0cjxDb25uZWN0
aW9uPiBjb25uZWN0aW9uKHRoaXMpOwotICAgIG1fcmVjZWl2ZVNvdXJjZSA9IGRpc3BhdGNoX3Nv
dXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9SRUNWLCBtX3JlY2VpdmVQb3J0
LCAwLCBtX2Nvbm5lY3Rpb25RdWV1ZS0+ZGlzcGF0Y2hRdWV1ZSgpKTsKLSAgICBkaXNwYXRjaF9z
b3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIobV9yZWNlaXZlU291cmNlLCBbY29ubmVjdGlvbl0gewot
ICAgICAgICBjb25uZWN0aW9uLT5yZWNlaXZlU291cmNlRXZlbnRIYW5kbGVyKCk7Ci0gICAgfSk7
Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9jYW5jZWxfaGFuZGxlcihtX3JlY2VpdmVTb3VyY2Us
IFtjb25uZWN0aW9uLCByZWNlaXZlUG9ydCA9IG1fcmVjZWl2ZVBvcnRdIHsKLSNpZiBQTEFURk9S
TShXQVRDSE9TKQotICAgICAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7Ci0jZWxzZQotICAg
ICAgICBtYWNoX3BvcnRfdW5ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCByZWNlaXZlUG9ydCwgcmVp
bnRlcnByZXRfY2FzdDxtYWNoX3BvcnRfY29udGV4dF90Pihjb25uZWN0aW9uLmdldCgpKSk7Ci0j
ZW5kaWYKLSAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZzKG1hY2hfdGFza19zZWxmKCksIHJlY2Vp
dmVQb3J0LCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwotICAgIH0pOwotCi0gICAgcmVm
KCk7Ci0gICAgZGlzcGF0Y2hfYXN5bmMobV9jb25uZWN0aW9uUXVldWUtPmRpc3BhdGNoUXVldWUo
KSwgXnsKLSAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKG1fcmVjZWl2ZVNvdXJjZSk7Ci0KLSAgICAg
ICAgaWYgKG1fc2VuZFNvdXJjZSkKLSAgICAgICAgICAgIGRpc3BhdGNoX3Jlc3VtZShtX3NlbmRT
b3VyY2UpOwotCi0gICAgICAgIGRlcmVmKCk7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBDb25uZWN0aW9uOjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8TWFjaE1l
c3NhZ2U+IG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKG1lc3NhZ2UpOwotICAgIEFTU0VSVCghbV9w
ZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2FnZSk7Ci0gICAgQVNTRVJUKCFtX2lzSW5pdGlhbGl6aW5n
U2VuZFNvdXJjZSk7Ci0KLSAgICAvLyBTZW5kIHRoZSBtZXNzYWdlLgotICAgIGtlcm5fcmV0dXJu
X3Qga3IgPSBtYWNoX21zZyhtZXNzYWdlLT5oZWFkZXIoKSwgTUFDSF9TRU5EX01TRyB8IE1BQ0hf
U0VORF9USU1FT1VUIHwgTUFDSF9TRU5EX05PVElGWSwgbWVzc2FnZS0+c2l6ZSgpLCAwLCBNQUNI
X1BPUlRfTlVMTCwgTUFDSF9NU0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7Ci0gICAg
c3dpdGNoIChrcikgewotICAgIGNhc2UgTUFDSF9NU0dfU1VDQ0VTUzoKLSAgICAgICAgLy8gVGhl
IGtlcm5lbCBoYXMgYWxyZWFkeSBhZG9wdGVkIHRoZSBkZXNjcmlwdG9ycy4KLSAgICAgICAgbWVz
c2FnZS0+bGVha0Rlc2NyaXB0b3JzKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2Fz
ZSBNQUNIX1NFTkRfVElNRURfT1VUOgotICAgICAgICAvLyBXZSB0aW1lZCBvdXQsIHN0YXNoIGF3
YXkgdGhlIG1lc3NhZ2UgZm9yIGxhdGVyLgotICAgICAgICBtX3BlbmRpbmdPdXRnb2luZ01hY2hN
ZXNzYWdlID0gV1RGTW92ZShtZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Y2FzZSBNQUNIX1NFTkRfSU5WQUxJRF9ERVNUOgotICAgICAgICAvLyBUaGUgb3RoZXIgZW5kIGhh
cyBkaXNhcHBlYXJlZCwgd2UnbGwgZ2V0IGEgZGVhZCBuYW1lIG5vdGlmaWNhdGlvbiB3aGljaCB3
aWxsIGNhdXNlIHVzIHRvIGJlIGludmFsaWRhdGVkLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBXZWJLaXQ6OnNldENyYXNoUmVwb3J0QXBwbGljYXRpb25T
cGVjaWZpY0luZm9ybWF0aW9uKChfX2JyaWRnZSBDRlN0cmluZ1JlZilbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIlVuaGFuZGxlZCBlcnJvciBjb2RlICV4LCBtZXNzYWdlICclczo6JXMnIiwg
a3IsIG1lc3NhZ2UtPm1lc3NhZ2VSZWNlaXZlck5hbWUoKS5kYXRhKCksIG1lc3NhZ2UtPm1lc3Nh
Z2VOYW1lKCkuZGF0YSgpXSk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotfQotCi1ib29sIENv
bm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5nTWVzc2FnZXMoKSBjb25zdAotewotICAg
IHJldHVybiAhbV9wZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2FnZSAmJiAhbV9pc0luaXRpYWxpemlu
Z1NlbmRTb3VyY2U7Ci19Ci0KLWJvb2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShz
dGQ6OnVuaXF1ZV9wdHI8RW5jb2Rlcj4gZW5jb2RlcikKLXsKLSAgICBBU1NFUlQoIW1fcGVuZGlu
Z091dGdvaW5nTWFjaE1lc3NhZ2UgJiYgIW1faXNJbml0aWFsaXppbmdTZW5kU291cmNlKTsKLQot
ICAgIGF1dG8gYXR0YWNobWVudHMgPSBlbmNvZGVyLT5yZWxlYXNlQXR0YWNobWVudHMoKTsKLSAg
ICAKLSAgICBhdXRvIG51bWJlck9mUG9ydERlc2NyaXB0b3JzID0gc3RkOjpjb3VudF9pZihhdHRh
Y2htZW50cy5iZWdpbigpLCBhdHRhY2htZW50cy5lbmQoKSwgW10oYXV0byYgYXR0YWNobWVudCkg
eyByZXR1cm4gYXR0YWNobWVudC50eXBlKCkgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRUeXBlOyB9
KTsKLSAgICBib29sIG1lc3NhZ2VCb2R5SXNPT0wgPSBmYWxzZTsKLSAgICBhdXRvIG1lc3NhZ2VT
aXplID0gTWFjaE1lc3NhZ2U6Om1lc3NhZ2VTaXplKGVuY29kZXItPmJ1ZmZlclNpemUoKSwgbnVt
YmVyT2ZQb3J0RGVzY3JpcHRvcnMsIG1lc3NhZ2VCb2R5SXNPT0wpOwotICAgIGlmIChtZXNzYWdl
U2l6ZSA+IGlubGluZU1lc3NhZ2VNYXhTaXplKSB7Ci0gICAgICAgIG1lc3NhZ2VCb2R5SXNPT0wg
PSB0cnVlOwotICAgICAgICBtZXNzYWdlU2l6ZSA9IE1hY2hNZXNzYWdlOjptZXNzYWdlU2l6ZSgw
LCBudW1iZXJPZlBvcnREZXNjcmlwdG9ycywgbWVzc2FnZUJvZHlJc09PTCk7Ci0gICAgfQotCi0g
ICAgYXV0byBtZXNzYWdlID0gTWFjaE1lc3NhZ2U6OmNyZWF0ZShlbmNvZGVyLT5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkudG9TdHJpbmcoKSwgZW5jb2Rlci0+bWVzc2FnZU5hbWUoKS50b1N0cmluZygp
LCBtZXNzYWdlU2l6ZSk7Ci0KLSAgICBhdXRvKiBoZWFkZXIgPSBtZXNzYWdlLT5oZWFkZXIoKTsK
LSAgICBoZWFkZXItPm1zZ2hfYml0cyA9IE1BQ0hfTVNHSF9CSVRTKE1BQ0hfTVNHX1RZUEVfQ09Q
WV9TRU5ELCAwKTsKLSAgICBoZWFkZXItPm1zZ2hfc2l6ZSA9IG1lc3NhZ2VTaXplOwotICAgIGhl
YWRlci0+bXNnaF9yZW1vdGVfcG9ydCA9IG1fc2VuZFBvcnQ7Ci0gICAgaGVhZGVyLT5tc2doX2xv
Y2FsX3BvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICBoZWFkZXItPm1zZ2hfaWQgPSBtZXNzYWdl
Qm9keUlzT09MID8gb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRCA6IGlubGluZUJvZHlNZXNzYWdlSUQ7
Ci0KLSAgICBhdXRvKiBtZXNzYWdlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGhl
YWRlciArIDEpOwotCi0gICAgYm9vbCBpc0NvbXBsZXggPSBudW1iZXJPZlBvcnREZXNjcmlwdG9y
cyB8fCBtZXNzYWdlQm9keUlzT09MOwotICAgIGlmIChpc0NvbXBsZXgpIHsKLSAgICAgICAgaGVh
ZGVyLT5tc2doX2JpdHMgfD0gTUFDSF9NU0dIX0JJVFNfQ09NUExFWDsKLQotICAgICAgICBhdXRv
KiBib2R5ID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19ib2R5X3QqPihtZXNzYWdlRGF0YSk7
Ci0gICAgICAgIGJvZHktPm1zZ2hfZGVzY3JpcHRvcl9jb3VudCA9IG51bWJlck9mUG9ydERlc2Ny
aXB0b3JzICsgbWVzc2FnZUJvZHlJc09PTDsKLSAgICAgICAgbWVzc2FnZURhdGEgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihib2R5ICsgMSk7Ci0KLSAgICAgICAgYXV0byBnZXREZXNjcmlw
dG9yQW5kQWR2YW5jZSA9IFtdKHVpbnQ4X3QqJiBkYXRhLCBzdGQ6OnNpemVfdCB0b0FkdmFuY2Up
IHsKLSAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2NyaXB0
b3JfdCo+KHN0ZDo6ZXhjaGFuZ2UoZGF0YSwgZGF0YSArIHRvQWR2YW5jZSkpOwotICAgICAgICB9
OwotCi0gICAgICAgIGZvciAoYXV0byYgYXR0YWNobWVudCA6IGF0dGFjaG1lbnRzKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoYXR0YWNobWVudC50eXBlKCkgPT0gQXR0YWNobWVudDo6TWFjaFBvcnRU
eXBlKTsKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50LnR5cGUoKSA9PSBBdHRhY2htZW50OjpN
YWNoUG9ydFR5cGUpIHsKLSAgICAgICAgICAgICAgICBhdXRvKiBkZXNjcmlwdG9yID0gZ2V0RGVz
Y3JpcHRvckFuZEFkdmFuY2UobWVzc2FnZURhdGEsIHNpemVvZihtYWNoX21zZ19wb3J0X2Rlc2Ny
aXB0b3JfdCkpOwotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItPnBvcnQubmFtZSA9IGF0dGFj
aG1lbnQucG9ydCgpOwotICAgICAgICAgICAgICAgIGRlc2NyaXB0b3ItPnBvcnQuZGlzcG9zaXRp
b24gPSBhdHRhY2htZW50LmRpc3Bvc2l0aW9uKCk7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRv
ci0+cG9ydC50eXBlID0gTUFDSF9NU0dfUE9SVF9ERVNDUklQVE9SOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lc3NhZ2VCb2R5SXNPT0wpIHsKLSAgICAgICAgICAg
IGF1dG8qIGRlc2NyaXB0b3IgPSBnZXREZXNjcmlwdG9yQW5kQWR2YW5jZShtZXNzYWdlRGF0YSwg
c2l6ZW9mKG1hY2hfbXNnX29vbF9kZXNjcmlwdG9yX3QpKTsKLSAgICAgICAgICAgIGRlc2NyaXB0
b3ItPm91dF9vZl9saW5lLmFkZHJlc3MgPSBlbmNvZGVyLT5idWZmZXIoKTsKLSAgICAgICAgICAg
IGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLnNpemUgPSBlbmNvZGVyLT5idWZmZXJTaXplKCk7Ci0g
ICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5jb3B5ID0gTUFDSF9NU0dfVklSVFVB
TF9DT1BZOwotICAgICAgICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuZGVhbGxvY2F0ZSA9
IGZhbHNlOwotICAgICAgICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUudHlwZSA9IE1BQ0hf
TVNHX09PTF9ERVNDUklQVE9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29weSB0aGUg
ZGF0YSBpZiBpdCBpcyBub3QgYmVpbmcgc2VudCBvdXQtb2YtbGluZS4KLSAgICBpZiAoIW1lc3Nh
Z2VCb2R5SXNPT0wpCi0gICAgICAgIG1lbWNweShtZXNzYWdlRGF0YSwgZW5jb2Rlci0+YnVmZmVy
KCksIGVuY29kZXItPmJ1ZmZlclNpemUoKSk7Ci0KLSAgICBBU1NFUlQobV9zZW5kUG9ydCk7Ci0g
ICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtX3NlbmRQb3J0KSk7Ci0KLSAgICByZXR1cm4gc2Vu
ZE1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6aW5pdGlh
bGl6ZVNlbmRTb3VyY2UoKQotewotICAgIG1fc2VuZFNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9j
cmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZUEVfTUFDSF9TRU5ELCBtX3NlbmRQb3J0LCBESVNQQVRD
SF9NQUNIX1NFTkRfREVBRCB8IERJU1BBVENIX01BQ0hfU0VORF9QT1NTSUJMRSwgbV9jb25uZWN0
aW9uUXVldWUtPmRpc3BhdGNoUXVldWUoKSk7Ci0gICAgbV9pc0luaXRpYWxpemluZ1NlbmRTb3Vy
Y2UgPSB0cnVlOwotCi0gICAgUmVmUHRyPENvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0g
ICAgZGlzcGF0Y2hfc291cmNlX3NldF9yZWdpc3RyYXRpb25faGFuZGxlcihtX3NlbmRTb3VyY2Us
IFtjb25uZWN0aW9uXSB7Ci0gICAgICAgIGlmICghY29ubmVjdGlvbi0+bV9zZW5kU291cmNlKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjb25uZWN0aW9uLT5tX2lzSW5pdGlhbGl6aW5n
U2VuZFNvdXJjZSA9IGZhbHNlOwotICAgICAgICBjb25uZWN0aW9uLT5yZXN1bWVTZW5kU291cmNl
KCk7Ci0gICAgfSk7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKG1fc2Vu
ZFNvdXJjZSwgW2Nvbm5lY3Rpb25dIHsKLSAgICAgICAgaWYgKCFjb25uZWN0aW9uLT5tX3NlbmRT
b3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRh
ID0gZGlzcGF0Y2hfc291cmNlX2dldF9kYXRhKGNvbm5lY3Rpb24tPm1fc2VuZFNvdXJjZSk7Ci0K
LSAgICAgICAgaWYgKGRhdGEgJiBESVNQQVRDSF9NQUNIX1NFTkRfREVBRCkgewotICAgICAgICAg
ICAgY29ubmVjdGlvbi0+Y29ubmVjdGlvbkRpZENsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGF0YSAmIERJU1BBVENIX01BQ0hfU0VORF9QT1NT
SUJMRSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2h5IHdlIGdldCBzcHVy
aW91cyBESVNQQVRDSF9NQUNIX1NFTkRfUE9TU0lCTEUgZXZlbnRzLgotICAgICAgICAgICAgY29u
bmVjdGlvbi0+cmVzdW1lU2VuZFNvdXJjZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfSk7Ci0KLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fc2VuZFBvcnQpKTsK
LSAgICBtYWNoX3BvcnRfdCBzZW5kUG9ydCA9IG1fc2VuZFBvcnQ7Ci0gICAgZGlzcGF0Y2hfc291
cmNlX3NldF9jYW5jZWxfaGFuZGxlcihtX3NlbmRTb3VyY2UsIF57Ci0gICAgICAgIC8vIFJlbGVh
c2Ugb3VyIHNlbmQgcmlnaHQuCi0gICAgICAgIGRlYWxsb2NhdGVTZW5kUmlnaHRTYWZlbHkoc2Vu
ZFBvcnQpOwotICAgIH0pOwotfQotCi12b2lkIENvbm5lY3Rpb246OnJlc3VtZVNlbmRTb3VyY2Uo
KQotewotICAgIEFTU0VSVCghbV9pc0luaXRpYWxpemluZ1NlbmRTb3VyY2UpOwotICAgIGlmICht
X3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlKQotICAgICAgICBzZW5kTWVzc2FnZShXVEZNb3Zl
KG1fcGVuZGluZ091dGdvaW5nTWFjaE1lc3NhZ2UpKTsKLSAgICBzZW5kT3V0Z29pbmdNZXNzYWdl
cygpOwotfQotCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IGNyZWF0ZU1lc3NhZ2VE
ZWNvZGVyKG1hY2hfbXNnX2hlYWRlcl90KiBoZWFkZXIpCi17Ci0gICAgaWYgKCEoaGVhZGVyLT5t
c2doX2JpdHMgJiBNQUNIX01TR0hfQklUU19DT01QTEVYKSkgewotICAgICAgICAvLyBXZSBoYXZl
IGEgc2ltcGxlIG1lc3NhZ2UuCi0gICAgICAgIHVpbnQ4X3QqIGJvZHkgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihoZWFkZXIgKyAxKTsKLSAgICAgICAgc2l6ZV90IGJvZHlTaXplID0gaGVh
ZGVyLT5tc2doX3NpemUgLSBzaXplb2YobWFjaF9tc2dfaGVhZGVyX3QpOwotCi0gICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPERlY29kZXI+KGJvZHksIGJvZHlTaXplLCBudWxscHRyLCBW
ZWN0b3I8QXR0YWNobWVudD4geyB9KTsKLSAgICB9Ci0KLSAgICBib29sIG1lc3NhZ2VCb2R5SXNP
T0wgPSBoZWFkZXItPm1zZ2hfaWQgPT0gb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRDsKLQotICAgIG1h
Y2hfbXNnX2JvZHlfdCogYm9keSA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfYm9keV90Kj4o
aGVhZGVyICsgMSk7Ci0gICAgbWFjaF9tc2dfc2l6ZV90IG51bURlc2NyaXB0b3JzID0gYm9keS0+
bXNnaF9kZXNjcmlwdG9yX2NvdW50OwotICAgIEFTU0VSVChudW1EZXNjcmlwdG9ycyk7Ci0KLSAg
ICB1aW50OF90KiBkZXNjcmlwdG9yRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJv
ZHkgKyAxKTsKLQotICAgIC8vIElmIHRoZSBtZXNzYWdlIGJvZHkgd2FzIHNlbnQgb3V0LW9mLWxp
bmUsIGRvbid0IHRyZWF0IHRoZSBsYXN0IGRlc2NyaXB0b3IKLSAgICAvLyBhcyBhbiBhdHRhY2ht
ZW50LCBzaW5jZSBpdCBpcyByZWFsbHkgdGhlIG1lc3NhZ2UgYm9keS4KLSAgICBpZiAobWVzc2Fn
ZUJvZHlJc09PTCkKLSAgICAgICAgLS1udW1EZXNjcmlwdG9yczsKLQotICAgIC8vIEJ1aWxkIGF0
dGFjaG1lbnQgbGlzdAotICAgIFZlY3RvcjxBdHRhY2htZW50PiBhdHRhY2htZW50cyhudW1EZXNj
cmlwdG9ycyk7Ci0KLSAgICBmb3IgKG1hY2hfbXNnX3NpemVfdCBpID0gMDsgaSA8IG51bURlc2Ny
aXB0b3JzOyArK2kpIHsKLSAgICAgICAgbWFjaF9tc2dfZGVzY3JpcHRvcl90KiBkZXNjcmlwdG9y
ID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19kZXNjcmlwdG9yX3QqPihkZXNjcmlwdG9yRGF0
YSk7Ci0gICAgICAgIEFTU0VSVChkZXNjcmlwdG9yLT50eXBlLnR5cGUgPT0gTUFDSF9NU0dfUE9S
VF9ERVNDUklQVE9SKTsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3ItPnR5cGUudHlwZSAhPSBNQUNI
X01TR19QT1JUX0RFU0NSSVBUT1IpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
ICAgICBhdHRhY2htZW50c1tudW1EZXNjcmlwdG9ycyAtIGkgLSAxXSA9IEF0dGFjaG1lbnQoZGVz
Y3JpcHRvci0+cG9ydC5uYW1lLCBkZXNjcmlwdG9yLT5wb3J0LmRpc3Bvc2l0aW9uKTsKLSAgICAg
ICAgZGVzY3JpcHRvckRhdGEgKz0gc2l6ZW9mKG1hY2hfbXNnX3BvcnRfZGVzY3JpcHRvcl90KTsK
LSAgICB9Ci0KLSAgICBpZiAobWVzc2FnZUJvZHlJc09PTCkgewotICAgICAgICBtYWNoX21zZ19k
ZXNjcmlwdG9yX3QqIGRlc2NyaXB0b3IgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2Ny
aXB0b3JfdCo+KGRlc2NyaXB0b3JEYXRhKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3ItPnR5
cGUudHlwZSA9PSBNQUNIX01TR19PT0xfREVTQ1JJUFRPUik7Ci0gICAgICAgIGlmIChkZXNjcmlw
dG9yLT50eXBlLnR5cGUgIT0gTUFDSF9NU0dfT09MX0RFU0NSSVBUT1IpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICB1aW50OF90KiBtZXNzYWdlQm9keSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5hZGRyZXNzKTsKLSAgICAgICAg
c2l6ZV90IG1lc3NhZ2VCb2R5U2l6ZSA9IGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLnNpemU7Ci0K
LSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RGVjb2Rlcj4obWVzc2FnZUJvZHksIG1l
c3NhZ2VCb2R5U2l6ZSwgW10oY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgbGVuZ3RoKSB7
Ci0gICAgICAgICAgICB2bV9kZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm1fYWRkcmVzc190PihidWZmZXIpLCBsZW5ndGgpOwotICAgICAgICB9LCBXVEZNb3Zl
KGF0dGFjaG1lbnRzKSk7Ci0gICAgfQotCi0gICAgdWludDhfdCogbWVzc2FnZUJvZHkgPSBkZXNj
cmlwdG9yRGF0YTsKLSAgICBzaXplX3QgbWVzc2FnZUJvZHlTaXplID0gaGVhZGVyLT5tc2doX3Np
emUgLSAoZGVzY3JpcHRvckRhdGEgLSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihoZWFkZXIp
KTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPERlY29kZXI+KG1lc3NhZ2VCb2R5LCBt
ZXNzYWdlQm9keVNpemUsIG51bGxwdHIsIFdURk1vdmUoYXR0YWNobWVudHMpKTsKLX0KLQotLy8g
VGhlIHJlY2VpdmUgYnVmZmVyIHNpemUgc2hvdWxkIGFsd2F5cyBpbmNsdWRlIHRoZSBtYXhpbXVt
IHRyYWlsZXIgc2l6ZS4KLXN0YXRpYyBjb25zdCBzaXplX3QgcmVjZWl2ZUJ1ZmZlclNpemUgPSBp
bmxpbmVNZXNzYWdlTWF4U2l6ZSArIE1BWF9UUkFJTEVSX1NJWkU7Ci10eXBlZGVmIFZlY3Rvcjxj
aGFyLCByZWNlaXZlQnVmZmVyU2l6ZT4gUmVjZWl2ZUJ1ZmZlcjsKLQotc3RhdGljIG1hY2hfbXNn
X2hlYWRlcl90KiByZWFkRnJvbU1hY2hQb3J0KG1hY2hfcG9ydF90IG1hY2hQb3J0LCBSZWNlaXZl
QnVmZmVyJiBidWZmZXIpCi17Ci0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtYWNoUG9ydCkp
OwotCi0gICAgYnVmZmVyLnJlc2l6ZShyZWNlaXZlQnVmZmVyU2l6ZSk7Ci0KLSAgICBtYWNoX21z
Z19oZWFkZXJfdCogaGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19oZWFkZXJfdCo+
KGJ1ZmZlci5kYXRhKCkpOwotICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX21zZyhoZWFkZXIs
IE1BQ0hfUkNWX01TRyB8IE1BQ0hfUkNWX0xBUkdFIHwgTUFDSF9SQ1ZfVElNRU9VVCB8IE1BQ0hf
UkNWX1ZPVUNIRVIsIDAsIGJ1ZmZlci5zaXplKCksIG1hY2hQb3J0LCAwLCBNQUNIX1BPUlRfTlVM
TCk7Ci0gICAgaWYgKGtyID09IE1BQ0hfUkNWX1RJTUVEX09VVCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBpZiAoa3IgPT0gTUFDSF9SQ1ZfVE9PX0xBUkdFKSB7Ci0gICAgICAgIC8v
IFRoZSBtZXNzYWdlIHdhcyB0b28gbGFyZ2UsIHJlc2l6ZSB0aGUgYnVmZmVyIGFuZCB0cnkgYWdh
aW4uCi0gICAgICAgIGJ1ZmZlci5yZXNpemUoaGVhZGVyLT5tc2doX3NpemUgKyBNQVhfVFJBSUxF
Ul9TSVpFKTsKLSAgICAgICAgaGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19oZWFk
ZXJfdCo+KGJ1ZmZlci5kYXRhKCkpOwotICAgICAgICAKLSAgICAgICAga3IgPSBtYWNoX21zZyho
ZWFkZXIsIE1BQ0hfUkNWX01TRyB8IE1BQ0hfUkNWX0xBUkdFIHwgTUFDSF9SQ1ZfVElNRU9VVCB8
IE1BQ0hfUkNWX1ZPVUNIRVIsIDAsIGJ1ZmZlci5zaXplKCksIG1hY2hQb3J0LCAwLCBNQUNIX1BP
UlRfTlVMTCk7Ci0gICAgICAgIEFTU0VSVChrciAhPSBNQUNIX1JDVl9UT09fTEFSR0UpOwotICAg
IH0KLQotICAgIGlmIChrciAhPSBNQUNIX01TR19TVUNDRVNTKSB7Ci0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgICAgICBXZWJLaXQ6OnNldENyYXNoUmVwb3J0QXBwbGljYXRpb25TcGVjaWZpY0lu
Zm9ybWF0aW9uKChfX2JyaWRnZSBDRlN0cmluZ1JlZilbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIlVuaGFuZGxlZCBlcnJvciBjb2RlICV4IGZyb20gbWFjaF9tc2csIHJlY2VpdmUgcG9ydCBp
cyAleCIsIGtyLCBtYWNoUG9ydF0pOwotI2VuZGlmCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gaGVhZGVy
OwotfQotCi12b2lkIENvbm5lY3Rpb246OnJlY2VpdmVTb3VyY2VFdmVudEhhbmRsZXIoKQotewot
ICAgIFJlY2VpdmVCdWZmZXIgYnVmZmVyOwotCi0gICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRCht
X3JlY2VpdmVQb3J0KSk7Ci0gICAgbWFjaF9tc2dfaGVhZGVyX3QqIGhlYWRlciA9IHJlYWRGcm9t
TWFjaFBvcnQobV9yZWNlaXZlUG9ydCwgYnVmZmVyKTsKLSAgICBpZiAoIWhlYWRlcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChoZWFkZXItPm1zZ2hfaWQpIHsKLSAgICBjYXNlIE1B
Q0hfTk9USUZZX05PX1NFTkRFUlM6Ci0gICAgICAgIEFTU0VSVChtX2lzU2VydmVyKTsKLSAgICAg
ICAgaWYgKCFtX3NlbmRQb3J0KQotICAgICAgICAgICAgY29ubmVjdGlvbkRpZENsb3NlKCk7Ci0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgaW5saW5lQm9keU1lc3NhZ2VJRDoKLSAgICBjYXNl
IG91dE9mTGluZUJvZHlNZXNzYWdlSUQ6Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNQUNI
X05PVElGWV9TRU5EX09OQ0U6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBkZWNvZGVyID0gY3JlYXRlTWVzc2FnZURl
Y29kZXIoaGVhZGVyKTsKLSAgICBpZiAoIWRlY29kZXIpCi0gICAgICAgIHJldHVybjsKLQotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICBkZWNvZGVyLT5zZXRJbXBvcnRhbmNlQXNzZXJ0aW9uKHN0ZDo6
bWFrZV91bmlxdWU8SW1wb3J0YW5jZUFzc2VydGlvbj4oaGVhZGVyKSk7Ci0jZW5kaWYKLQotICAg
IGlmIChkZWNvZGVyLT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gIklQQyIgJiYgZGVjb2Rlci0+
bWVzc2FnZU5hbWUoKSA9PSAiSW5pdGlhbGl6ZUNvbm5lY3Rpb24iKSB7Ci0gICAgICAgIEFTU0VS
VChtX2lzU2VydmVyKTsKLSAgICAgICAgQVNTRVJUKCFtX2lzQ29ubmVjdGVkKTsKLSAgICAgICAg
QVNTRVJUKCFtX3NlbmRQb3J0KTsKLQotICAgICAgICBNYWNoUG9ydCBwb3J0OwotICAgICAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShwb3J0KSkgewotICAgICAgICAgICAgLy8gRklYTUU6IERpc2Nv
bm5lY3QuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBtX3NlbmRQ
b3J0ID0gcG9ydC5wb3J0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9zZW5kUG9ydCkgewot
ICAgICAgICAgICAgQVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtX3JlY2VpdmVQb3J0KSk7Ci0gICAg
ICAgICAgICBtYWNoX3BvcnRfdCBwcmV2aW91c05vdGlmaWNhdGlvblBvcnQgPSBNQUNIX1BPUlRf
TlVMTDsKLSAgICAgICAgICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfcmVxdWVzdF9ub3RpZmljYXRp
b24obWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9ydCwgTUFDSF9OT1RJRllfTk9fU0VOREVS
UywgMCwgTUFDSF9QT1JUX05VTEwsIE1BQ0hfTVNHX1RZUEVfTU9WRV9TRU5EX09OQ0UsICZwcmV2
aW91c05vdGlmaWNhdGlvblBvcnQpOwotICAgICAgICAgICAgQVNTRVJUKGtyID09IEtFUk5fU1VD
Q0VTUyk7Ci0gICAgICAgICAgICBpZiAoa3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSWYgbWFjaF9wb3J0X3JlcXVlc3Rfbm90aWZpY2F0aW9uIGZhaWxzLCAncHJldmlv
dXNOb3RpZmljYXRpb25Qb3J0JyB3aWxsIGJlIHVuaW5pdGlhbGl6ZWQuCi0gICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJtYWNoX3BvcnRfcmVxdWVzdF9ub3RpZmljYXRpb24gZmFpbGVkOiAoJXgp
ICVzIiwga3IsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSk7Ci0gICAgICAgICAgICAgICAgcHJldmlv
dXNOb3RpZmljYXRpb25Qb3J0ID0gTUFDSF9QT1JUX05VTEw7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChwcmV2aW91c05vdGlmaWNhdGlvblBvcnQgIT0gTUFDSF9QT1JUX05VTEwp
Ci0gICAgICAgICAgICAgICAgZGVhbGxvY2F0ZVNlbmRSaWdodFNhZmVseShwcmV2aW91c05vdGlm
aWNhdGlvblBvcnQpOwotCi0gICAgICAgICAgICBpbml0aWFsaXplU2VuZFNvdXJjZSgpOwotICAg
ICAgICAgICAgZGlzcGF0Y2hfcmVzdW1lKG1fc2VuZFNvdXJjZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsKLQotICAgICAgICAvLyBTZW5kIGFueSBwZW5kaW5n
IG91dGdvaW5nIG1lc3NhZ2VzLgotICAgICAgICBzZW5kT3V0Z29pbmdNZXNzYWdlcygpOwotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGlmIChkZWNvZGVyLT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gIklQQyIgJiYgZGVj
b2Rlci0+bWVzc2FnZU5hbWUoKSA9PSAiU2V0RXhjZXB0aW9uUG9ydCIpIHsKLSAgICAgICAgaWYg
KG1faXNTZXJ2ZXIpIHsKLSAgICAgICAgICAgIC8vIFNlcnZlciBjb25uZWN0aW9ucyBhcmVuJ3Qg
c3VwcG9zZWQgdG8gaGF2ZSB0aGVpciBleGNlcHRpb24gcG9ydHMgb3ZlcnJpZGRlbi4gVHJlYXQg
dGhpcyBhcyBhbiBpbnZhbGlkIG1lc3NhZ2UuCi0gICAgICAgICAgICBTdHJpbmdSZWZlcmVuY2Ug
bWVzc2FnZVJlY2VpdmVyTmFtZVJlZmVyZW5jZSA9IGRlY29kZXItPm1lc3NhZ2VSZWNlaXZlck5h
bWUoKTsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlUmVjZWl2ZXJOYW1lKFN0cmluZyhtZXNz
YWdlUmVjZWl2ZXJOYW1lUmVmZXJlbmNlLmRhdGEoKSwgbWVzc2FnZVJlY2VpdmVyTmFtZVJlZmVy
ZW5jZS5zaXplKCkpKTsKLSAgICAgICAgICAgIFN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZVJl
ZmVyZW5jZSA9IGRlY29kZXItPm1lc3NhZ2VOYW1lKCk7Ci0gICAgICAgICAgICBTdHJpbmcgbWVz
c2FnZU5hbWUoU3RyaW5nKG1lc3NhZ2VOYW1lUmVmZXJlbmNlLmRhdGEoKSwgbWVzc2FnZU5hbWVS
ZWZlcmVuY2Uuc2l6ZSgpKSk7Ci0KLSAgICAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBtZXNzYWdlUmVjZWl2ZXJOYW1lID0g
V1RGTW92ZShtZXNzYWdlUmVjZWl2ZXJOYW1lKSwgbWVzc2FnZU5hbWUgPSBXVEZNb3ZlKG1lc3Nh
Z2VOYW1lKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5kaXNw
YXRjaERpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShtZXNzYWdlUmVjZWl2ZXJOYW1lLnV0ZjgoKSwg
bWVzc2FnZU5hbWUudXRmOCgpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIE1hY2hQb3J0IGV4Y2VwdGlvblBvcnQ7Ci0gICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKGV4Y2VwdGlvblBvcnQpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHNldE1hY2hFeGNlcHRpb25Qb3J0KGV4Y2VwdGlvblBvcnQucG9ydCgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgcHJvY2Vzc0luY29taW5nTWVzc2Fn
ZShXVEZNb3ZlKGRlY29kZXIpKTsKLX0gICAgCi0KLUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmll
ciBDb25uZWN0aW9uOjppZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSWRlbnRpZmll
cihtX2lzU2VydmVyID8gbV9yZWNlaXZlUG9ydCA6IG1fc2VuZFBvcnQsIG1feHBjQ29ubmVjdGlv
bik7Ci19Ci0KLU9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IENvbm5lY3Rpb246OmdldEF1ZGl0VG9r
ZW4oKQotewotICAgIGlmICghbV94cGNDb25uZWN0aW9uKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIAotICAgIGF1ZGl0X3Rva2VuX3QgYXVkaXRUb2tlbjsKLSAgICB4cGNfY29u
bmVjdGlvbl9nZXRfYXVkaXRfdG9rZW4obV94cGNDb25uZWN0aW9uLmdldCgpLCAmYXVkaXRUb2tl
bik7Ci0gICAgcmV0dXJuIFdURk1vdmUoYXVkaXRUb2tlbik7Ci19Ci0KLWJvb2wgQ29ubmVjdGlv
bjo6a2lsbCgpCi17Ci0gICAgaWYgKG1feHBjQ29ubmVjdGlvbikgewotICAgICAgICB4cGNfY29u
bmVjdGlvbl9raWxsKG1feHBjQ29ubmVjdGlvbi5nZXQoKSwgU0lHS0lMTCk7Ci0gICAgICAgIG1f
d2FzS2lsbGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotICAgIAotc3RhdGljIHZvaWQgQWNjZXNzaWJpbGl0eVByb2Nlc3NTdXNw
ZW5kZWROb3RpZmljYXRpb24oYm9vbCBzdXNwZW5kZWQpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nlc3NTdXNwZW5kU3RhdHVzKHN1c3BlbmRlZCA/IEFY
U3VzcGVuZFN0YXR1c1N1c3BlbmRlZCA6IEFYU3VzcGVuZFN0YXR1c1J1bm5pbmcpOwotI2VsaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBVSUFjY2Vzc2liaWxpdHlQb3N0Tm90aWZpY2F0aW9u
KGtBWFBpZFN0YXR1c0NoYW5nZWROb3RpZmljYXRpb24sIEB7IEAicGlkIiA6IEAoZ2V0cGlkKCkp
LCBAInN1c3BlbmRlZCIgOiBAKHN1c3BlbmRlZCkgfSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShzdXNwZW5kZWQpOwotI2VuZGlmCi19Ci0gICAgCi12b2lkIENvbm5lY3Rpb246OndpbGxTZW5k
U3luY01lc3NhZ2UoT3B0aW9uU2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCi17
Ci0gICAgaWYgKHNlbmRTeW5jT3B0aW9ucy5jb250YWlucyhJUEM6OlNlbmRTeW5jT3B0aW9uOjpJ
bmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZCkgJiYgV2ViQ29yZTo6QVhPYmplY3RDYWNo
ZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgQWNjZXNzaWJpbGl0eVByb2Nlc3NT
dXNwZW5kZWROb3RpZmljYXRpb24odHJ1ZSk7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6ZGlkUmVj
ZWl2ZVN5bmNSZXBseShPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucykK
LXsKLSAgICBpZiAoc2VuZFN5bmNPcHRpb25zLmNvbnRhaW5zKElQQzo6U2VuZFN5bmNPcHRpb246
OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSAmJiBXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICBBY2Nlc3NpYmlsaXR5UHJvY2Vz
c1N1c3BlbmRlZE5vdGlmaWNhdGlvbihmYWxzZSk7Ci19Ci0KLXBpZF90IENvbm5lY3Rpb246OnJl
bW90ZVByb2Nlc3NJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3hwY0Nvbm5lY3Rpb24pCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHhwY19jb25uZWN0aW9uX2dldF9waWQobV94cGND
b25uZWN0aW9uLmdldCgpKTsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL0ltcG9ydGFuY2VBc3NlcnRpb24uaCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9JbXBvcnRhbmNlQXNzZXJ0aW9uLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmOTBiMDQzNDE4MmJkMDg1MWVhOTQ2NDgzMGU4
MjY2MmI2OGIxNDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL0ltcG9ydGFuY2VBc3NlcnRpb24uaAor
KysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEltcG9y
dGFuY2VBc3NlcnRpb25faAotI2RlZmluZSBJbXBvcnRhbmNlQXNzZXJ0aW9uX2gKLQotI2lmIFBM
QVRGT1JNKE1BQykKLQotI2luY2x1ZGUgPG1hY2gvbWVzc2FnZS5oPgotCi1uYW1lc3BhY2UgSVBD
IHsKLQotY2xhc3MgSW1wb3J0YW5jZUFzc2VydGlvbiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1wb3J0YW5jZUFzc2VydGlvbik7Ci0K
LXB1YmxpYzoKLSAgICBleHBsaWNpdCBJbXBvcnRhbmNlQXNzZXJ0aW9uKG1hY2hfbXNnX2hlYWRl
cl90KiBoZWFkZXIpCi0gICAgICAgIDogbV92b3VjaGVyKDApCi0gICAgewotICAgICAgICBpZiAo
TUFDSF9NU0dIX0JJVFNfSEFTX1ZPVUNIRVIoaGVhZGVyLT5tc2doX2JpdHMpKSB7Ci0gICAgICAg
ICAgICBtX3ZvdWNoZXIgPSBoZWFkZXItPm1zZ2hfdm91Y2hlcl9wb3J0OwotICAgICAgICAgICAg
aGVhZGVyLT5tc2doX3ZvdWNoZXJfcG9ydCA9IE1BQ0hfVk9VQ0hFUl9OVUxMOwotICAgICAgICAg
ICAgaGVhZGVyLT5tc2doX2JpdHMgJj0gfihNQUNIX01TR0hfQklUU19WT1VDSEVSX01BU0sgfCBN
QUNIX01TR0hfQklUU19SQUlTRUlNUCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB+SW1wb3J0
YW5jZUFzc2VydGlvbigpCi0gICAgewotICAgICAgICBpZiAobV92b3VjaGVyKSB7Ci0gICAgICAg
ICAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF92b3VjaGVyX2RlYWxsb2NhdGUobV92b3VjaGVy
KTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoa3IsICFrcik7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLXByaXZhdGU6Ci0gICAgbWFjaF92b3VjaGVyX3QgbV92b3VjaGVyOwotfTsKLQotfQotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi0jZW5kaWYgLy8gSW1wb3J0YW5jZUFzc2VydGlvbl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaE1lc3NhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hNZXNzYWdlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM4NGM5NmExMzlhZjgwNWYxM2YwN2FjN2NiZTAy
NGIwZjUzZGEyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaE1lc3NhZ2UuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJNYWNoTWVzc2FnZS5oIgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0KLSNpbmNs
dWRlIDxtYWNoL21hY2guaD4KLQotbmFtZXNwYWNlIElQQyB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxN
YWNoTWVzc2FnZT4gTWFjaE1lc3NhZ2U6OmNyZWF0ZShDU3RyaW5nJiYgbWVzc2FnZVJlY2VpdmVy
TmFtZSwgQ1N0cmluZyYmIG1lc3NhZ2VOYW1lLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkKiBt
ZW1vcnkgPSBXVEY6OmZhc3RaZXJvZWRNYWxsb2Moc2l6ZW9mKE1hY2hNZXNzYWdlKSArIHNpemUp
OwotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TWFjaE1lc3NhZ2U+IHsgbmV3IChOb3ROdWxs
LCBtZW1vcnkpIE1hY2hNZXNzYWdlIHsgV1RGTW92ZShtZXNzYWdlUmVjZWl2ZXJOYW1lKSwgV1RG
TW92ZShtZXNzYWdlTmFtZSksIHNpemUgfSB9OwotfQotCi1NYWNoTWVzc2FnZTo6TWFjaE1lc3Nh
Z2UoQ1N0cmluZyYmIG1lc3NhZ2VSZWNlaXZlck5hbWUsIENTdHJpbmcmJiBtZXNzYWdlTmFtZSwg
c2l6ZV90IHNpemUpCi0gICAgOiBtX21lc3NhZ2VSZWNlaXZlck5hbWUoV1RGTW92ZShtZXNzYWdl
UmVjZWl2ZXJOYW1lKSkKLSAgICAsIG1fbWVzc2FnZU5hbWUoV1RGTW92ZShtZXNzYWdlTmFtZSkp
Ci0gICAgLCBtX3NpemUgeyBzaXplIH0KLXsKLX0KLQotTWFjaE1lc3NhZ2U6On5NYWNoTWVzc2Fn
ZSgpCi17Ci0gICAgaWYgKG1fc2hvdWxkRnJlZURlc2NyaXB0b3JzKQotICAgICAgICA6Om1hY2hf
bXNnX2Rlc3Ryb3koaGVhZGVyKCkpOwotfQotCi1zaXplX3QgTWFjaE1lc3NhZ2U6Om1lc3NhZ2VT
aXplKHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IHBvcnREZXNjcmlwdG9yQ291bnQsIHNpemVfdCBt
ZW1vcnlEZXNjcmlwdG9yQ291bnQpCi17Ci0gICAgc2l6ZV90IG1lc3NhZ2VTaXplID0gc2l6ZW9m
KG1hY2hfbXNnX2hlYWRlcl90KSArIGJvZHlTaXplOwotCi0gICAgaWYgKHBvcnREZXNjcmlwdG9y
Q291bnQgfHwgbWVtb3J5RGVzY3JpcHRvckNvdW50KSB7Ci0gICAgICAgIG1lc3NhZ2VTaXplICs9
IHNpemVvZihtYWNoX21zZ19ib2R5X3QpOwotICAgICAgICBtZXNzYWdlU2l6ZSArPSAocG9ydERl
c2NyaXB0b3JDb3VudCAqIHNpemVvZihtYWNoX21zZ19wb3J0X2Rlc2NyaXB0b3JfdCkpOwotICAg
ICAgICBtZXNzYWdlU2l6ZSArPSAobWVtb3J5RGVzY3JpcHRvckNvdW50ICogc2l6ZW9mKG1hY2hf
bXNnX29vbF9kZXNjcmlwdG9yX3QpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcm91bmRfbXNnKG1l
c3NhZ2VTaXplKTsKLX0KLQotdm9pZCBNYWNoTWVzc2FnZTo6bGVha0Rlc2NyaXB0b3JzKCkKLXsK
LSAgICBtX3Nob3VsZEZyZWVEZXNjcmlwdG9ycyA9IGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZiAv
LyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBD
L21hYy9NYWNoTWVzc2FnZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hN
ZXNzYWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMTMxYzdmMGQzZWZhMzhh
ZjQwNTRlMjc2ZDRmYzI4NmM5MzQ0MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hNZXNzYWdl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLQotI2luY2x1ZGUgPG1hY2gvbWVzc2FnZS5oPgot
I2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJUEMgewotCi1jbGFzcyBNYWNoTWVzc2FnZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxNYWNoTWVzc2FnZT4g
Y3JlYXRlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYgbWVzc2FnZU5h
bWUsIHNpemVfdCk7Ci0gICAgfk1hY2hNZXNzYWdlKCk7Ci0KLSAgICBzdGF0aWMgc2l6ZV90IG1l
c3NhZ2VTaXplKHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IHBvcnREZXNjcmlwdG9yQ291bnQsIHNp
emVfdCBtZW1vcnlEZXNjcmlwdG9yQ291bnQpOwotCi0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KLSAgICBtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVyKCkgeyByZXR1
cm4gbV9tZXNzYWdlSGVhZGVyOyB9Ci0KLSAgICB2b2lkIGxlYWtEZXNjcmlwdG9ycygpOwotCi0g
ICAgY29uc3QgQ1N0cmluZyYgbWVzc2FnZVJlY2VpdmVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWVzc2FnZVJlY2VpdmVyTmFtZTsgfQotICAgIGNvbnN0IENTdHJpbmcmIG1lc3NhZ2VOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXNzYWdlTmFtZTsgfQotCi1wcml2YXRlOgotICAgIE1hY2hNZXNz
YWdlKENTdHJpbmcmJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYgbWVzc2FnZU5hbWUs
IHNpemVfdCk7Ci0KLSAgICBDU3RyaW5nIG1fbWVzc2FnZVJlY2VpdmVyTmFtZTsKLSAgICBDU3Ry
aW5nIG1fbWVzc2FnZU5hbWU7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLSAgICBib29sIG1fc2hvdWxk
RnJlZURlc2NyaXB0b3JzIHsgdHJ1ZSB9OwotICAgIG1hY2hfbXNnX2hlYWRlcl90IG1fbWVzc2Fn
ZUhlYWRlcltdOwotfTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaFBvcnQuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9NYWNoUG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5MTQ0YTA1MmVhMGNmNDI5ZTgwNzM2NjE1OGQ0ZDE4MjM3MjQxZTJiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL21hYy9NYWNoUG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgTWFjaFBvcnRfaAotI2RlZmluZSBNYWNoUG9ydF9oCi0KLSNp
bmNsdWRlICJBdHRhY2htZW50LmgiCi0jaW5jbHVkZSAiRGVjb2Rlci5oIgotI2luY2x1ZGUgIkVu
Y29kZXIuaCIKLQotbmFtZXNwYWNlIElQQyB7Ci0KLWNsYXNzIE1hY2hQb3J0IHsKLXB1YmxpYzoK
LSAgICBNYWNoUG9ydCgpCi0gICAgICAgIDogbV9wb3J0KE1BQ0hfUE9SVF9OVUxMKQotICAgICAg
ICAsIG1fZGlzcG9zaXRpb24oMCkKLSAgICB7Ci0gICAgfQotCi0gICAgTWFjaFBvcnQobWFjaF9w
b3J0X25hbWVfdCBwb3J0LCBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlvbikKLSAgICAg
ICAgOiBtX3BvcnQocG9ydCkKLSAgICAgICAgLCBtX2Rpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgZW5jb2RlciA8PCBBdHRhY2htZW50KG1fcG9ydCwgbV9kaXNwb3NpdGlv
bik7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIE1h
Y2hQb3J0JiBwKQotICAgIHsKLSAgICAgICAgQXR0YWNobWVudCBhdHRhY2htZW50OwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGF0dGFjaG1lbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAKLSAgICAgICAgcC5tX3BvcnQgPSBhdHRhY2htZW50LnBvcnQoKTsKLSAg
ICAgICAgcC5tX2Rpc3Bvc2l0aW9uID0gYXR0YWNobWVudC5kaXNwb3NpdGlvbigpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBtYWNoX3BvcnRfbmFtZV90IHBvcnQoKSBjb25z
dCB7IHJldHVybiBtX3BvcnQ7IH0KLSAgICBtYWNoX21zZ190eXBlX25hbWVfdCBkaXNwb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zaXRpb247IH0KLQotcHJpdmF0ZToKLSAgICBtYWNo
X3BvcnRfbmFtZV90IG1fcG9ydDsKLSAgICBtYWNoX21zZ190eXBlX25hbWVfdCBtX2Rpc3Bvc2l0
aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSVBDCi0KLSNlbmRpZiAvLyBNYWNoUG9ydF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCA0NDA4NGE2MmVhMjE3NzI3NWY2MDNiMzEzZjBmMTQ0
NDRmZGM0MWU3Li5kMTZjMTIxMmY3ZjYzODcyNjk3OTIwZWFlODdlYmQ0MWI0NWM5OTcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTQyLDggKzQyLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0
X1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0KICAg
ICBOZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KIAotICAgIFBs
YXRmb3JtL0lQQy9tYWMvQ29ubmVjdGlvbk1hYy5tbQotICAgIFBsYXRmb3JtL0lQQy9tYWMvTWFj
aE1lc3NhZ2UuY3BwCisgICAgUGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbQor
ICAgIFBsYXRmb3JtL0lQQy9jb2NvYS9NYWNoTWVzc2FnZS5jcHAKIAogICAgIFBsYXRmb3JtL2Nm
L01vZHVsZUNGLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZWQ0YjBmMGZiNmMyMDgw
MjY1MDg4MmNiYjg0MWM3NWY5ZjllOWZlMC4uZDNhYzk3YzExNTk3Y2QyY2NhZDU0YWFjN2EyN2E0
NTU0NzQxMjA4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNzQsOCArNzQsOCBAQCBQbGF0
Zm9ybS9mb3VuZGF0aW9uL0xvZ2dpbmdGb3VuZGF0aW9uLm1tCiBQbGF0Zm9ybS9pb3MvQWNjZXNz
aWJpbGl0eUlPUy5tbQogUGxhdGZvcm0vaW9zL1BheW1lbnRBdXRob3JpemF0aW9uQ29udHJvbGxl
ci5tbQogCi1QbGF0Zm9ybS9JUEMvbWFjL0Nvbm5lY3Rpb25NYWMubW0KLVBsYXRmb3JtL0lQQy9t
YWMvTWFjaE1lc3NhZ2UuY3BwCitQbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNvY29hLm1t
CitQbGF0Zm9ybS9JUEMvY29jb2EvTWFjaE1lc3NhZ2UuY3BwCiAKIFBsYXRmb3JtL21hYy9MYXll
ckhvc3RpbmdDb250ZXh0Lm1tCiBQbGF0Zm9ybS9tYWMvTWFjaFV0aWxpdGllcy5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM3ODc5
YjU0YWM2MzAxYzQ4NWUyMGQ0ZGU0ZWVmZjU4ZjNhNjA5YTQuLjMyYzY4MjBmODBjYTk1MzNlOGRh
YjdiMWY3NjdjYjdlZjM4ZmFjMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjA2Myw3ICsyMDYzLDcgQEAKIAkJMUEyRDk1NkQxMjg0
ODU2NDAwMUVCOTYyIC8qIEF1eGlsaWFyeVByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXV4aWxpYXJ5UHJvY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTJEOTU2RTEyODQ4NTY0MDAxRUI5NjIgLyogQXV4aWxpYXJ5UHJvY2Vzcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdXhpbGlhcnlQcm9jZXNzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzMDA2NkMxMTEwRjRGNzAwMzE5MzdDIC8q
IFJlc3BvbnNpdmVuZXNzVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVzcG9uc2l2ZW5lc3NUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTMw
RUFDNTExNUQ3REEzMDA1M0U5MzcgLyogQ29ubmVjdGlvbk1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbm5lY3Rpb25NYWMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFBMzBFQUM1MTE1RDdEQTMwMDUzRTkzNyAvKiBDb25uZWN0aW9uQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb25uZWN0aW9u
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMzM0REVBMTZERThCNjgw
MDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcC5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTdG9yYWdlQXJlYU1h
cC5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzMzRERUIxNkRF
OEY4ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0b3JhZ2VBcmVhTWFwTWVzc2FnZVJlY2Vp
dmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvU3RvcmFnZUFyZWFNYXBNZXNz
YWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkx
QTMzNERFQzE2REU4Rjg4MDA2QThFMzggLyogU3RvcmFnZUFyZWFNYXBNZXNzYWdlcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdG9yYWdlQXJlYU1hcE1lc3NhZ2VzLmg7IHBh
dGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1N0b3JhZ2VBcmVhTWFwTWVzc2FnZXMuaDsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTU0OTAsNyArNTQ5MCw3IEBACiAJ
CTFBRTAwRDY4MTgzMjdDMTIwMDA4N0RENyAvKiBJUEMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUJDQzU2Rjc1MTE1OTk1NUUwMDFDQ0FGOSAvKiBtYWMg
Ki8sCisJCQkJQkNDNTZGNzUxMTU5OTU1RTAwMUNDQUY5IC8qIGNvY29hICovLAogCQkJCTFBRUZE
Mjc4MTFEMTZDODEwMDgyMTlEMyAvKiBBcmd1bWVudENvZGVyLmggKi8sCiAJCQkJMUEzRDYxMDQx
M0E3RjAzQTAwRjk1RDRFIC8qIEFyZ3VtZW50Q29kZXJzLmNwcCAqLywKIAkJCQkxQUVGRDJGNjEx
RDE4MDdCMDA4MjE5RDMgLyogQXJndW1lbnRDb2RlcnMuaCAqLywKQEAgLTgzMzIsMTYgKzgzMzIs
MTYgQEAKIAkJCXBhdGggPSBXZWJDb250ZW50U2VydmljZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07Ci0JCUJDQzU2Rjc1MTE1OTk1NUUwMDFDQ0FGOSAvKiBtYWMgKi8gPSB7CisJ
CUJDQzU2Rjc1MTE1OTk1NUUwMDFDQ0FGOSAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUEzMEVBQzUxMTVEN0RBMzAwNTNFOTM3IC8qIENv
bm5lY3Rpb25NYWMubW0gKi8sCisJCQkJMUEzMEVBQzUxMTVEN0RBMzAwNTNFOTM3IC8qIENvbm5l
Y3Rpb25Db2NvYS5tbSAqLywKIAkJCQkxQTFFQzY5RDE4NzIwOTIxMDBCOTUxRjAgLyogSW1wb3J0
YW5jZUFzc2VydGlvbi5oICovLAogCQkJCTFBNkQ4NkJGMURGNzUyNjUwMDc3NDVFOCAvKiBNYWNo
TWVzc2FnZS5jcHAgKi8sCiAJCQkJMUE2RDg2QzAxREY3NTI2NTAwNzc0NUU4IC8qIE1hY2hNZXNz
YWdlLmggKi8sCiAJCQkJQkNDNTZGNzcxMTU5OTU3RDAwMUNDQUY5IC8qIE1hY2hQb3J0LmggKi8s
CiAJCQkpOwotCQkJcGF0aCA9IG1hYzsKKwkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CiAJCX07CiAJCUJDQ0YwODVDMTEzRjNCNzUwMEM2NTBDNSAvKiBtYWMgKi8g
PSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>369293</attachid>
            <date>2019-05-07 09:15:49 -0700</date>
            <delta_ts>2019-05-07 11:52:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-197661-20190507091549.patch</filename>
            <type>text/plain</type>
            <size>78273</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ1MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDg4Y2U0NWVlMzAzZDhhOGUz
M2U5YjNkNDFhNjJhZDE3OTYxNjc3OGUuLmU4NmFmZTYxM2NkOTg1NDk0MTM2MDhiZDQwOWFhOGY4
OGM2NWM5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTktMDUtMDcgIENocmlzIER1
bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgQ29ubmVjdGlvbk1hYy5t
bSB0byBDb25uZWN0aW9uQ29jb2EubW0gc2luY2UgaXQgaXMgdXNlZCBvbiBib3RoIG1hY09TIGFu
ZCBpT1MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NzY2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbTogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9Db25uZWN0aW9uTWFjLm1tLgorICAgICAgICAoSVBD
OjpDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZzo6Y3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0
aW9uV2F0Y2hkb2cpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRv
Zzo6Q29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cpOgorICAgICAgICAoSVBDOjpDb25uZWN0
aW9uVGVybWluYXRpb25XYXRjaGRvZzo6d2F0Y2hkb2dUaW1lckZpcmVkKToKKyAgICAgICAgKElQ
Qzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKToKKyAgICAgICAgKElQQzo6Q29ubmVj
dGlvbjo6Y2FuY2VsUmVjZWl2ZVNvdXJjZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnRl
cm1pbmF0ZVNvb24pOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxp
emUpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpvcGVuKToKKyAgICAgICAgKElQQzo6Q29u
bmVjdGlvbjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9y
bUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzIGNvbnN0KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlv
bjo6c2VuZE91dGdvaW5nTWVzc2FnZSk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OmluaXRp
YWxpemVTZW5kU291cmNlKToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6cmVzdW1lU2VuZFNv
dXJjZSk6CisgICAgICAgIChJUEM6OmNyZWF0ZU1lc3NhZ2VEZWNvZGVyKToKKyAgICAgICAgKElQ
Qzo6cmVhZEZyb21NYWNoUG9ydCk6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246OnJlY2VpdmVT
b3VyY2VFdmVudEhhbmRsZXIpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjppZGVudGlmaWVy
IGNvbnN0KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6Z2V0QXVkaXRUb2tlbik6CisgICAg
ICAgIChJUEM6OkNvbm5lY3Rpb246OmtpbGwpOgorICAgICAgICAoSVBDOjpBY2Nlc3NpYmlsaXR5
UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbik6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246
OndpbGxTZW5kU3luY01lc3NhZ2UpOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjpkaWRSZWNl
aXZlU3luY1JlcGx5KToKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6cmVtb3RlUHJvY2Vzc0lE
IGNvbnN0KToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvY29jb2EvSW1wb3J0YW5jZUFzc2VydGlv
bi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL0ltcG9ydGFu
Y2VBc3NlcnRpb24uaC4KKyAgICAgICAgKElQQzo6SW1wb3J0YW5jZUFzc2VydGlvbjo6SW1wb3J0
YW5jZUFzc2VydGlvbik6CisgICAgICAgIChJUEM6OkltcG9ydGFuY2VBc3NlcnRpb246On5JbXBv
cnRhbmNlQXNzZXJ0aW9uKToKKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvY29jb2EvTWFjaE1lc3Nh
Z2UuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hN
ZXNzYWdlLmNwcC4KKyAgICAgICAgKElQQzo6TWFjaE1lc3NhZ2U6OmNyZWF0ZSk6CisgICAgICAg
IChJUEM6Ok1hY2hNZXNzYWdlOjpNYWNoTWVzc2FnZSk6CisgICAgICAgIChJUEM6Ok1hY2hNZXNz
YWdlOjp+TWFjaE1lc3NhZ2UpOgorICAgICAgICAoSVBDOjpNYWNoTWVzc2FnZTo6bWVzc2FnZVNp
emUpOgorICAgICAgICAoSVBDOjpNYWNoTWVzc2FnZTo6bGVha0Rlc2NyaXB0b3JzKToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvY29jb2EvTWFjaE1lc3NhZ2UuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9NYWNoTWVzc2FnZS5oLgorICAgICAgICAoSVBDOjpN
YWNoTWVzc2FnZTo6c2l6ZSBjb25zdCk6CisgICAgICAgIChJUEM6Ok1hY2hNZXNzYWdlOjpoZWFk
ZXIpOgorICAgICAgICAoSVBDOjpNYWNoTWVzc2FnZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSBjb25z
dCk6CisgICAgICAgIChJUEM6Ok1hY2hNZXNzYWdlOjptZXNzYWdlTmFtZSBjb25zdCk6CisgICAg
ICAgICogUGxhdGZvcm0vSVBDL2NvY29hL01hY2hQb3J0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaFBvcnQuaC4KKyAgICAgICAgKElQQzo6TWFjaFBv
cnQ6Ok1hY2hQb3J0KToKKyAgICAgICAgKElQQzo6TWFjaFBvcnQ6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChJUEM6Ok1hY2hQb3J0OjpkZWNvZGUpOgorICAgICAgICAoSVBDOjpNYWNoUG9ydDo6
cG9ydCBjb25zdCk6CisgICAgICAgIChJUEM6Ok1hY2hQb3J0OjpkaXNwb3NpdGlvbiBjb25zdCk6
CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlc0NvY29hLnR4
dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxOS0w
NS0wNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBb
bWFjT1NdIEF2b2lkIGNyYXNoaW5nIHRoZSBVSSBwcm9jZXNzIHdoZW4gd3JpdGluZyBlbXB0eSBk
YXRhIHRvIHRoZSBwYXN0ZWJvYXJkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9jb2NvYS9Db25uZWN0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9jb2NvYS9Db25uZWN0aW9uQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzcwMmFjYzdkZjUxYmQ4NDZi
OTNhZjY0YmYwNzBhNGMxMDAzOTE5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vSVBDL2NvY29hL0Nvbm5lY3Rpb25Db2NvYS5tbQpAQCAtMCwwICsxLDY1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDb25uZWN0aW9u
LmgiCisKKyNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKKyNpbXBvcnQgIkltcG9ydGFuY2VBc3Nl
cnRpb24uaCIKKyNpbXBvcnQgIk1hY2hNZXNzYWdlLmgiCisjaW1wb3J0ICJNYWNoUG9ydC5oIgor
I2ltcG9ydCAiTWFjaFV0aWxpdGllcy5oIgorI2ltcG9ydCAiV0tDcmFzaFJlcG9ydGVyLmgiCisj
aW1wb3J0IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KKyNpbXBvcnQgPG1hY2gvbWFjaF9lcnJv
ci5oPgorI2ltcG9ydCA8bWFjaC92bV9tYXAuaD4KKyNpbXBvcnQgPHN5cy9tbWFuLmg+CisjaW1w
b3J0IDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKyNpbXBv
cnQgPHd0Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyNpbXBvcnQgIlByb2Nlc3NBc3NlcnRpb24uaCIKKyNpbXBvcnQgPFVJS2l0L1VJQWNjZXNzaWJp
bGl0eS5oPgorCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNpbXBvcnQgPEFYUnVudGlt
ZS9BWERlZmluZXMuaD4KKyNpbXBvcnQgPEFYUnVudGltZS9BWE5vdGlmaWNhdGlvbkNvbnN0YW50
cy5oPgorI2Vsc2UKKyNkZWZpbmUga0FYUGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbiAwCisj
ZW5kaWYKKworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQorI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZp
Y2VzUHJpdi5oPgorI2Vsc2UKK3R5cGVkZWYgZW51bSB7CisgICAgQVhTdXNwZW5kU3RhdHVzUnVu
bmluZyA9IDAsCisgICAgQVhTdXNwZW5kU3RhdHVzU3VzcGVuZGVkLAorfSBBWFN1c3BlbmRTdGF0
dXM7CisjZW5kaWYKKworZXh0ZXJuICJDIiBBWEVycm9yIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nl
c3NTdXNwZW5kU3RhdHVzKEFYU3VzcGVuZFN0YXR1cyk7CisKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCisKK25hbWVzcGFjZSBJUEMgeworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZU1lc3Nh
Z2VNYXhTaXplID0gNDA5NjsKKworLy8gQXJiaXRyYXJ5IG1lc3NhZ2UgSURzIHRoYXQgZG8gbm90
IGNvbGxpZGUgd2l0aCBNYWNoIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyAodXNlZCBteSBpbml0aWFs
cykuCitjb25zdGV4cHIgbWFjaF9tc2dfaWRfdCBpbmxpbmVCb2R5TWVzc2FnZUlEID0gMHhkYmEw
ZGJhOworY29uc3RleHByIG1hY2hfbXNnX2lkX3Qgb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRCA9IDB4
ZGJhMWRiYTsKKworLy8gQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cgZG9lcyB0d28gdGhp
bmdzOgorLy8gMSkgSXQgc2V0cyBhIHdhdGNoZG9nIHRpbWVyIHRvIGtpbGwgdGhlIHBlZXJlZCBw
cm9jZXNzLgorLy8gMikgT24gaU9TLCBtYWtlIHRoZSBwcm9jZXNzIHJ1bm5hYmxlIGZvciB0aGUg
ZHVyYXRpb24gb2YgdGhlIHdhdGNoZG9nCisvLyAgICB0byBlbnN1cmUgaXQgaGFzIGEgY2hhbmNl
IHRvIHRlcm1pbmF0ZSBjbGVhbmx5LgorY2xhc3MgQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hk
b2cgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUNvbm5lY3Rpb25UZXJtaW5hdGlv
bldhdGNoZG9nKE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9uX3Q+JiB4cGNDb25uZWN0aW9uLCBT
ZWNvbmRzIGludGVydmFsKQorICAgIHsKKyAgICAgICAgbmV3IENvbm5lY3Rpb25UZXJtaW5hdGlv
bldhdGNoZG9nKHhwY0Nvbm5lY3Rpb24sIGludGVydmFsKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIENvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nKE9TT2JqZWN0UHRyPHhwY19jb25u
ZWN0aW9uX3Q+JiB4cGNDb25uZWN0aW9uLCBTZWNvbmRzIGludGVydmFsKQorICAgICAgICA6IG1f
eHBjQ29ubmVjdGlvbih4cGNDb25uZWN0aW9uKQorICAgICAgICAsIG1fd2F0Y2hkb2dUaW1lcihS
dW5Mb29wOjptYWluKCksIHRoaXMsICZDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZzo6d2F0
Y2hkb2dUaW1lckZpcmVkKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgICwgbV9h
c3NlcnRpb24oc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OlByb2Nlc3NBbmRVSUFzc2VydGlvbj4o
eHBjX2Nvbm5lY3Rpb25fZ2V0X3BpZChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpLCAiQ29ubmVjdGlv
blRlcm1pbmF0aW9uV2F0Y2hkb2ciX3MsIFdlYktpdDo6QXNzZXJ0aW9uU3RhdGU6OkJhY2tncm91
bmQpKQorI2VuZGlmCisgICAgeworICAgICAgICBtX3dhdGNoZG9nVGltZXIuc3RhcnRPbmVTaG90
KGludGVydmFsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB3YXRjaGRvZ1RpbWVyRmlyZWQoKQor
ICAgIHsKKyAgICAgICAgeHBjX2Nvbm5lY3Rpb25fa2lsbChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCks
IFNJR0tJTEwpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisKKyAgICBPU09iamVjdFB0
cjx4cGNfY29ubmVjdGlvbl90PiBtX3hwY0Nvbm5lY3Rpb247CisgICAgUnVuTG9vcDo6VGltZXI8
Q29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2c+IG1fd2F0Y2hkb2dUaW1lcjsKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlByb2Nlc3NBbmRV
SUFzc2VydGlvbj4gbV9hc3NlcnRpb247CisjZW5kaWYKK307CisgICAgCit2b2lkIENvbm5lY3Rp
b246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFtX2lzQ29ubmVjdGVkKSB7Cisg
ICAgICAgIGlmIChtX3NlbmRQb3J0KSB7CisgICAgICAgICAgICBBU1NFUlQoIW1faXNTZXJ2ZXIp
OworICAgICAgICAgICAgZGVhbGxvY2F0ZVNlbmRSaWdodFNhZmVseShtX3NlbmRQb3J0KTsKKyAg
ICAgICAgICAgIG1fc2VuZFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX3JlY2VpdmVTb3VyY2UpIHsKKyAgICAgICAgICAgIC8vIEZvciBhIHNob3J0IHBl
cmlvZCBvZiB0aW1lLCB3aGVuIG1faXNTZXJ2ZXIgaXMgdHJ1ZSBhbmQgb3BlbigpIGhhcyBiZWVu
IGNhbGxlZCwgbV9yZWNlaXZlU291cmNlIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgICAg
ICAvLyBidXQgbV9pc0Nvbm5lY3RlZCBoYXMgbm90IGJlZW4gc2V0IHRvIHRydWUgeWV0LiBJbiB0
aGlzIGNhc2UsIHdlIG5lZWQgdG8gY2FuY2VsIG1fcmVjZWl2ZVNvdXJjZSBpbnN0ZWFkIG9mIGRl
c3Ryb3lpbmcKKyAgICAgICAgICAgIC8vIG1fcmVjZWl2ZVBvcnQgb3Vyc2VsdmVzLgorICAgICAg
ICAgICAgQVNTRVJUKG1faXNTZXJ2ZXIpOworICAgICAgICAgICAgY2FuY2VsUmVjZWl2ZVNvdXJj
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fcmVjZWl2ZVBvcnQpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2lzU2VydmVyKTsKKyNpZiAhUExBVEZPUk0oV0FUQ0hPUykKKyAgICAgICAg
ICAgIG1hY2hfcG9ydF91bmd1YXJkKG1hY2hfdGFza19zZWxmKCksIG1fcmVjZWl2ZVBvcnQsIHJl
aW50ZXJwcmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4odGhpcykpOworI2VuZGlmCisgICAg
ICAgICAgICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9y
dCwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKKyAgICAgICAgICAgIG1fcmVjZWl2ZVBv
cnQgPSBNQUNIX1BPUlRfTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlID0gbnVsbHB0cjsKKyAgICBtX2lz
SW5pdGlhbGl6aW5nU2VuZFNvdXJjZSA9IGZhbHNlOworICAgIG1faXNDb25uZWN0ZWQgPSBmYWxz
ZTsKKworICAgIEFTU0VSVChtX3NlbmRQb3J0KTsKKyAgICBBU1NFUlQobV9yZWNlaXZlUG9ydCk7
CisKKyAgICAvLyBVbnJlZ2lzdGVyIG91ciBwb3J0cy4KKyAgICBkaXNwYXRjaF9zb3VyY2VfY2Fu
Y2VsKG1fc2VuZFNvdXJjZSk7CisgICAgZGlzcGF0Y2hfcmVsZWFzZShtX3NlbmRTb3VyY2UpOwor
ICAgIG1fc2VuZFNvdXJjZSA9IG51bGxwdHI7CisgICAgbV9zZW5kUG9ydCA9IE1BQ0hfUE9SVF9O
VUxMOworCisgICAgY2FuY2VsUmVjZWl2ZVNvdXJjZSgpOworfQorCit2b2lkIENvbm5lY3Rpb246
OmNhbmNlbFJlY2VpdmVTb3VyY2UoKQoreworICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwobV9y
ZWNlaXZlU291cmNlKTsKKyAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcmVjZWl2ZVNvdXJjZSk7Cisg
ICAgbV9yZWNlaXZlU291cmNlID0gbnVsbHB0cjsKKyAgICBtX3JlY2VpdmVQb3J0ID0gTUFDSF9Q
T1JUX05VTEw7Cit9CisgICAgCit2b2lkIENvbm5lY3Rpb246OnRlcm1pbmF0ZVNvb24oU2Vjb25k
cyBpbnRlcnZhbCkKK3sKKyAgICBpZiAobV94cGNDb25uZWN0aW9uKQorICAgICAgICBDb25uZWN0
aW9uVGVybWluYXRpb25XYXRjaGRvZzo6Y3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hk
b2cobV94cGNDb25uZWN0aW9uLCBpbnRlcnZhbCk7Cit9CisgICAgCit2b2lkIENvbm5lY3Rpb246
OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKCFN
QUNIX1BPUlRfVkFMSUQoaWRlbnRpZmllci5wb3J0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1faXNTZXJ2ZXIpIHsKKyAgICAgICAgbV9yZWNlaXZlUG9ydCA9IGlkZW50aWZpZXIucG9y
dDsKKyAgICAgICAgbV9zZW5kUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOworCisjaWYgIVBMQVRGT1JN
KFdBVENIT1MpCisgICAgICAgIG1hY2hfcG9ydF9ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCBtX3Jl
Y2VpdmVQb3J0LCByZWludGVycHJldF9jYXN0PG1hY2hfcG9ydF9jb250ZXh0X3Q+KHRoaXMpLCB0
cnVlKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIG1fcmVjZWl2ZVBvcnQgPSBNQUNI
X1BPUlRfTlVMTDsKKyAgICAgICAgbV9zZW5kUG9ydCA9IGlkZW50aWZpZXIucG9ydDsKKyAgICB9
CisKKyAgICBtX3NlbmRTb3VyY2UgPSBudWxscHRyOworICAgIG1fcmVjZWl2ZVNvdXJjZSA9IG51
bGxwdHI7CisKKyAgICBtX3hwY0Nvbm5lY3Rpb24gPSBpZGVudGlmaWVyLnhwY0Nvbm5lY3Rpb247
Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6b3BlbigpCit7CisgICAgaWYgKG1faXNTZXJ2ZXIpIHsK
KyAgICAgICAgQVNTRVJUKG1fcmVjZWl2ZVBvcnQpOworICAgICAgICBBU1NFUlQoIW1fc2VuZFBv
cnQpOworICAgICAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fcmVjZWl2ZVBvcnQpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoIW1fcmVjZWl2ZVBvcnQpOworICAgICAgICBBU1NF
UlQobV9zZW5kUG9ydCk7CisgICAgICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQobV9zZW5kUG9y
dCkpOworCisgICAgICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3Nl
bGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZtX3JlY2VpdmVQb3J0KTsKKyAgICAgICAg
aWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgYWxsb2NhdGUgbWFjaCBwb3J0LCBlcnJvciAleDogJXMiLCBrciwgbWFjaF9lcnJvcl9zdHJp
bmcoa3IpKTsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKyNpZiAhUExBVEZPUk0o
V0FUQ0hPUykKKyAgICAgICAgbWFjaF9wb3J0X2d1YXJkKG1hY2hfdGFza19zZWxmKCksIG1fcmVj
ZWl2ZVBvcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4odGhpcyksIHRy
dWUpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIG1hY2hfcG9ydF9zZXRf
YXR0cmlidXRlcyhtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQb3J0LCBNQUNIX1BPUlRfREVO
QVBfUkVDRUlWRVIsIChtYWNoX3BvcnRfaW5mb190KTAsIDApOworI2VuZGlmCisKKyAgICAgICAg
bV9pc0Nvbm5lY3RlZCA9IHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBTZW5kIHRoZSBpbml0
aWFsaXplIG1lc3NhZ2UsIHdoaWNoIGNvbnRhaW5zIGEgc2VuZCByaWdodCBmb3IgdGhlIHNlcnZl
ciB0byB1c2UuCisgICAgICAgIGF1dG8gZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8RW5jb2Rl
cj4oIklQQyIsICJJbml0aWFsaXplQ29ubmVjdGlvbiIsIDApOworICAgICAgICBlbmNvZGVyLT5l
bmNvZGUoTWFjaFBvcnQobV9yZWNlaXZlUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpKTsK
KworICAgICAgICBpbml0aWFsaXplU2VuZFNvdXJjZSgpOworCisgICAgICAgIHNlbmRNZXNzYWdl
KFdURk1vdmUoZW5jb2RlciksIHsgfSk7CisgICAgfQorCisgICAgLy8gQ2hhbmdlIHRoZSBtZXNz
YWdlIHF1ZXVlIGxlbmd0aCBmb3IgdGhlIHJlY2VpdmUgcG9ydC4KKyAgICBzZXRNYWNoUG9ydFF1
ZXVlTGVuZ3RoKG1fcmVjZWl2ZVBvcnQsIE1BQ0hfUE9SVF9RTElNSVRfTEFSR0UpOworCisgICAg
bV9yZWNlaXZlU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0Vf
VFlQRV9NQUNIX1JFQ1YsIG1fcmVjZWl2ZVBvcnQsIDAsIG1fY29ubmVjdGlvblF1ZXVlLT5kaXNw
YXRjaFF1ZXVlKCkpOworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihtX3Jl
Y2VpdmVTb3VyY2UsIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cih0aGlzKV0gewor
ICAgICAgICByZWNlaXZlU291cmNlRXZlbnRIYW5kbGVyKCk7CisgICAgfSk7CisgICAgZGlzcGF0
Y2hfc291cmNlX3NldF9jYW5jZWxfaGFuZGxlcihtX3JlY2VpdmVTb3VyY2UsIFtwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZlB0cih0aGlzKSwgcmVjZWl2ZVBvcnQgPSBtX3JlY2VpdmVQb3J0XSB7Cisj
aWYgIVBMQVRGT1JNKFdBVENIT1MpCisgICAgICAgIG1hY2hfcG9ydF91bmd1YXJkKG1hY2hfdGFz
a19zZWxmKCksIHJlY2VpdmVQb3J0LCByZWludGVycHJldF9jYXN0PG1hY2hfcG9ydF9jb250ZXh0
X3Q+KHByb3RlY3RlZFRoaXMuZ2V0KCkpKTsKKyNlbmRpZgorICAgICAgICBtYWNoX3BvcnRfbW9k
X3JlZnMobWFjaF90YXNrX3NlbGYoKSwgcmVjZWl2ZVBvcnQsIE1BQ0hfUE9SVF9SSUdIVF9SRUNF
SVZFLCAtMSk7CisgICAgfSk7CisKKyAgICByZWYoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2Nv
bm5lY3Rpb25RdWV1ZS0+ZGlzcGF0Y2hRdWV1ZSgpLCBeeworICAgICAgICBkaXNwYXRjaF9yZXN1
bWUobV9yZWNlaXZlU291cmNlKTsKKworICAgICAgICBpZiAobV9zZW5kU291cmNlKQorICAgICAg
ICAgICAgZGlzcGF0Y2hfcmVzdW1lKG1fc2VuZFNvdXJjZSk7CisKKyAgICAgICAgZGVyZWYoKTsK
KyAgICB9KTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rpb246OnNlbmRN
ZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxNYWNoTWVzc2FnZT4gbWVzc2FnZSkKK3sKKyAgICBBU1NF
UlQobWVzc2FnZSk7CisgICAgQVNTRVJUKCFtX3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlKTsK
KyAgICBBU1NFUlQoIW1faXNJbml0aWFsaXppbmdTZW5kU291cmNlKTsKKworICAgIC8vIFNlbmQg
dGhlIG1lc3NhZ2UuCisgICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfbXNnKG1lc3NhZ2UtPmhl
YWRlcigpLCBNQUNIX1NFTkRfTVNHIHwgTUFDSF9TRU5EX1RJTUVPVVQgfCBNQUNIX1NFTkRfTk9U
SUZZLCBtZXNzYWdlLT5zaXplKCksIDAsIE1BQ0hfUE9SVF9OVUxMLCBNQUNIX01TR19USU1FT1VU
X05PTkUsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICBzd2l0Y2ggKGtyKSB7CisgICAgY2FzZSBNQUNI
X01TR19TVUNDRVNTOgorICAgICAgICAvLyBUaGUga2VybmVsIGhhcyBhbHJlYWR5IGFkb3B0ZWQg
dGhlIGRlc2NyaXB0b3JzLgorICAgICAgICBtZXNzYWdlLT5sZWFrRGVzY3JpcHRvcnMoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIE1BQ0hfU0VORF9USU1FRF9PVVQ6CisgICAg
ICAgIC8vIFdlIHRpbWVkIG91dCwgc3Rhc2ggYXdheSB0aGUgbWVzc2FnZSBmb3IgbGF0ZXIuCisg
ICAgICAgIG1fcGVuZGluZ091dGdvaW5nTWFjaE1lc3NhZ2UgPSBXVEZNb3ZlKG1lc3NhZ2UpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIE1BQ0hfU0VORF9JTlZBTElEX0RFU1Q6
CisgICAgICAgIC8vIFRoZSBvdGhlciBlbmQgaGFzIGRpc2FwcGVhcmVkLCB3ZSdsbCBnZXQgYSBk
ZWFkIG5hbWUgbm90aWZpY2F0aW9uIHdoaWNoIHdpbGwgY2F1c2UgdXMgdG8gYmUgaW52YWxpZGF0
ZWQuCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFdlYktp
dDo6c2V0Q3Jhc2hSZXBvcnRBcHBsaWNhdGlvblNwZWNpZmljSW5mb3JtYXRpb24oKF9fYnJpZGdl
IENGU3RyaW5nUmVmKVtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiVW5oYW5kbGVkIGVycm9y
IGNvZGUgJXgsIG1lc3NhZ2UgJyVzOjolcyciLCBrciwgbWVzc2FnZS0+bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLmRhdGEoKSwgbWVzc2FnZS0+bWVzc2FnZU5hbWUoKS5kYXRhKCldKTsKKyAgICAgICAg
Q1JBU0goKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0
Z29pbmdNZXNzYWdlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3BlbmRpbmdPdXRnb2luZ01h
Y2hNZXNzYWdlICYmICFtX2lzSW5pdGlhbGl6aW5nU2VuZFNvdXJjZTsKK30KKworYm9vbCBDb25u
ZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNv
ZGVyKQoreworICAgIEFTU0VSVCghbV9wZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2FnZSAmJiAhbV9p
c0luaXRpYWxpemluZ1NlbmRTb3VyY2UpOworCisgICAgYXV0byBhdHRhY2htZW50cyA9IGVuY29k
ZXItPnJlbGVhc2VBdHRhY2htZW50cygpOworICAgIAorICAgIGF1dG8gbnVtYmVyT2ZQb3J0RGVz
Y3JpcHRvcnMgPSBzdGQ6OmNvdW50X2lmKGF0dGFjaG1lbnRzLmJlZ2luKCksIGF0dGFjaG1lbnRz
LmVuZCgpLCBbXShhdXRvJiBhdHRhY2htZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0dGFj
aG1lbnQudHlwZSgpID09IEF0dGFjaG1lbnQ6Ok1hY2hQb3J0VHlwZTsKKyAgICB9KTsKKworICAg
IGJvb2wgbWVzc2FnZUJvZHlJc09PTCA9IGZhbHNlOworICAgIGF1dG8gbWVzc2FnZVNpemUgPSBN
YWNoTWVzc2FnZTo6bWVzc2FnZVNpemUoZW5jb2Rlci0+YnVmZmVyU2l6ZSgpLCBudW1iZXJPZlBv
cnREZXNjcmlwdG9ycywgbWVzc2FnZUJvZHlJc09PTCk7CisgICAgaWYgKG1lc3NhZ2VTaXplID4g
aW5saW5lTWVzc2FnZU1heFNpemUpIHsKKyAgICAgICAgbWVzc2FnZUJvZHlJc09PTCA9IHRydWU7
CisgICAgICAgIG1lc3NhZ2VTaXplID0gTWFjaE1lc3NhZ2U6Om1lc3NhZ2VTaXplKDAsIG51bWJl
ck9mUG9ydERlc2NyaXB0b3JzLCBtZXNzYWdlQm9keUlzT09MKTsKKyAgICB9CisKKyAgICBhdXRv
IG1lc3NhZ2UgPSBNYWNoTWVzc2FnZTo6Y3JlYXRlKGVuY29kZXItPm1lc3NhZ2VSZWNlaXZlck5h
bWUoKS50b1N0cmluZygpLCBlbmNvZGVyLT5tZXNzYWdlTmFtZSgpLnRvU3RyaW5nKCksIG1lc3Nh
Z2VTaXplKTsKKworICAgIGF1dG8qIGhlYWRlciA9IG1lc3NhZ2UtPmhlYWRlcigpOworICAgIGhl
YWRlci0+bXNnaF9iaXRzID0gTUFDSF9NU0dIX0JJVFMoTUFDSF9NU0dfVFlQRV9DT1BZX1NFTkQs
IDApOworICAgIGhlYWRlci0+bXNnaF9zaXplID0gbWVzc2FnZVNpemU7CisgICAgaGVhZGVyLT5t
c2doX3JlbW90ZV9wb3J0ID0gbV9zZW5kUG9ydDsKKyAgICBoZWFkZXItPm1zZ2hfbG9jYWxfcG9y
dCA9IE1BQ0hfUE9SVF9OVUxMOworICAgIGhlYWRlci0+bXNnaF9pZCA9IG1lc3NhZ2VCb2R5SXNP
T0wgPyBvdXRPZkxpbmVCb2R5TWVzc2FnZUlEIDogaW5saW5lQm9keU1lc3NhZ2VJRDsKKworICAg
IGF1dG8qIG1lc3NhZ2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oaGVhZGVyICsg
MSk7CisKKyAgICBib29sIGlzQ29tcGxleCA9IG51bWJlck9mUG9ydERlc2NyaXB0b3JzIHx8IG1l
c3NhZ2VCb2R5SXNPT0w7CisgICAgaWYgKGlzQ29tcGxleCkgeworICAgICAgICBoZWFkZXItPm1z
Z2hfYml0cyB8PSBNQUNIX01TR0hfQklUU19DT01QTEVYOworCisgICAgICAgIGF1dG8qIGJvZHkg
PSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2JvZHlfdCo+KG1lc3NhZ2VEYXRhKTsKKyAgICAg
ICAgYm9keS0+bXNnaF9kZXNjcmlwdG9yX2NvdW50ID0gbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMg
KyBtZXNzYWdlQm9keUlzT09MOworICAgICAgICBtZXNzYWdlRGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGJvZHkgKyAxKTsKKworICAgICAgICBhdXRvIGdldERlc2NyaXB0b3JBbmRB
ZHZhbmNlID0gW10odWludDhfdComIGRhdGEsIHN0ZDo6c2l6ZV90IHRvQWR2YW5jZSkgeworICAg
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfZGVzY3JpcHRvcl90Kj4o
c3RkOjpleGNoYW5nZShkYXRhLCBkYXRhICsgdG9BZHZhbmNlKSk7CisgICAgICAgIH07CisKKyAg
ICAgICAgZm9yIChhdXRvJiBhdHRhY2htZW50IDogYXR0YWNobWVudHMpIHsKKyAgICAgICAgICAg
IEFTU0VSVChhdHRhY2htZW50LnR5cGUoKSA9PSBBdHRhY2htZW50OjpNYWNoUG9ydFR5cGUpOwor
ICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQudHlwZSgpID09IEF0dGFjaG1lbnQ6Ok1hY2hQb3J0
VHlwZSkgeworICAgICAgICAgICAgICAgIGF1dG8qIGRlc2NyaXB0b3IgPSBnZXREZXNjcmlwdG9y
QW5kQWR2YW5jZShtZXNzYWdlRGF0YSwgc2l6ZW9mKG1hY2hfbXNnX3BvcnRfZGVzY3JpcHRvcl90
KSk7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+cG9ydC5uYW1lID0gYXR0YWNobWVudC5w
b3J0KCk7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+cG9ydC5kaXNwb3NpdGlvbiA9IGF0
dGFjaG1lbnQuZGlzcG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLT5wb3J0
LnR5cGUgPSBNQUNIX01TR19QT1JUX0RFU0NSSVBUT1I7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAobWVzc2FnZUJvZHlJc09PTCkgeworICAgICAgICAgICAgYXV0byog
ZGVzY3JpcHRvciA9IGdldERlc2NyaXB0b3JBbmRBZHZhbmNlKG1lc3NhZ2VEYXRhLCBzaXplb2Yo
bWFjaF9tc2dfb29sX2Rlc2NyaXB0b3JfdCkpOworICAgICAgICAgICAgZGVzY3JpcHRvci0+b3V0
X29mX2xpbmUuYWRkcmVzcyA9IGVuY29kZXItPmJ1ZmZlcigpOworICAgICAgICAgICAgZGVzY3Jp
cHRvci0+b3V0X29mX2xpbmUuc2l6ZSA9IGVuY29kZXItPmJ1ZmZlclNpemUoKTsKKyAgICAgICAg
ICAgIGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLmNvcHkgPSBNQUNIX01TR19WSVJUVUFMX0NPUFk7
CisgICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5kZWFsbG9jYXRlID0gZmFsc2U7
CisgICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS50eXBlID0gTUFDSF9NU0dfT09M
X0RFU0NSSVBUT1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb3B5IHRoZSBkYXRhIGlm
IGl0IGlzIG5vdCBiZWluZyBzZW50IG91dC1vZi1saW5lLgorICAgIGlmICghbWVzc2FnZUJvZHlJ
c09PTCkKKyAgICAgICAgbWVtY3B5KG1lc3NhZ2VEYXRhLCBlbmNvZGVyLT5idWZmZXIoKSwgZW5j
b2Rlci0+YnVmZmVyU2l6ZSgpKTsKKworICAgIEFTU0VSVChtX3NlbmRQb3J0KTsKKyAgICBBU1NF
UlQoTUFDSF9QT1JUX1ZBTElEKG1fc2VuZFBvcnQpKTsKKworICAgIHJldHVybiBzZW5kTWVzc2Fn
ZShXVEZNb3ZlKG1lc3NhZ2UpKTsKK30KKwordm9pZCBDb25uZWN0aW9uOjppbml0aWFsaXplU2Vu
ZFNvdXJjZSgpCit7CisgICAgbV9zZW5kU291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShE
SVNQQVRDSF9TT1VSQ0VfVFlQRV9NQUNIX1NFTkQsIG1fc2VuZFBvcnQsIERJU1BBVENIX01BQ0hf
U0VORF9ERUFEIHwgRElTUEFUQ0hfTUFDSF9TRU5EX1BPU1NJQkxFLCBtX2Nvbm5lY3Rpb25RdWV1
ZS0+ZGlzcGF0Y2hRdWV1ZSgpKTsKKyAgICBtX2lzSW5pdGlhbGl6aW5nU2VuZFNvdXJjZSA9IHRy
dWU7CisKKyAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X3JlZ2lzdHJhdGlvbl9oYW5kbGVyKG1fc2Vu
ZFNvdXJjZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpXSB7CisgICAg
ICAgIGlmICghbV9zZW5kU291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2lz
SW5pdGlhbGl6aW5nU2VuZFNvdXJjZSA9IGZhbHNlOworICAgICAgICByZXN1bWVTZW5kU291cmNl
KCk7CisgICAgfSk7CisgICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVyKG1fc2Vu
ZFNvdXJjZSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKHRoaXMpXSB7CisgICAg
ICAgIGlmICghbV9zZW5kU291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHVu
c2lnbmVkIGxvbmcgZGF0YSA9IGRpc3BhdGNoX3NvdXJjZV9nZXRfZGF0YShtX3NlbmRTb3VyY2Up
OworCisgICAgICAgIGlmIChkYXRhICYgRElTUEFUQ0hfTUFDSF9TRU5EX0RFQUQpIHsKKyAgICAg
ICAgICAgIGNvbm5lY3Rpb25EaWRDbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGRhdGEgJiBESVNQQVRDSF9NQUNIX1NFTkRfUE9TU0lCTEUpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoeSB3ZSBnZXQgc3B1cmlvdXMgRElT
UEFUQ0hfTUFDSF9TRU5EX1BPU1NJQkxFIGV2ZW50cy4KKyAgICAgICAgICAgIHJlc3VtZVNlbmRT
b3VyY2UoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pOworCisgICAg
QVNTRVJUKE1BQ0hfUE9SVF9WQUxJRChtX3NlbmRQb3J0KSk7CisgICAgbWFjaF9wb3J0X3Qgc2Vu
ZFBvcnQgPSBtX3NlbmRQb3J0OworICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfY2FuY2VsX2hhbmRs
ZXIobV9zZW5kU291cmNlLCBeeworICAgICAgICAvLyBSZWxlYXNlIG91ciBzZW5kIHJpZ2h0Lgor
ICAgICAgICBkZWFsbG9jYXRlU2VuZFJpZ2h0U2FmZWx5KHNlbmRQb3J0KTsKKyAgICB9KTsKK30K
Kwordm9pZCBDb25uZWN0aW9uOjpyZXN1bWVTZW5kU291cmNlKCkKK3sKKyAgICBBU1NFUlQoIW1f
aXNJbml0aWFsaXppbmdTZW5kU291cmNlKTsKKyAgICBpZiAobV9wZW5kaW5nT3V0Z29pbmdNYWNo
TWVzc2FnZSkKKyAgICAgICAgc2VuZE1lc3NhZ2UoV1RGTW92ZShtX3BlbmRpbmdPdXRnb2luZ01h
Y2hNZXNzYWdlKSk7CisgICAgc2VuZE91dGdvaW5nTWVzc2FnZXMoKTsKK30KKworc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiBjcmVhdGVNZXNzYWdlRGVjb2RlcihtYWNoX21zZ19oZWFk
ZXJfdCogaGVhZGVyKQoreworICAgIGlmICghKGhlYWRlci0+bXNnaF9iaXRzICYgTUFDSF9NU0dI
X0JJVFNfQ09NUExFWCkpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBhIHNpbXBsZSBtZXNzYWdlLgor
ICAgICAgICB1aW50OF90KiBib2R5ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oaGVhZGVy
ICsgMSk7CisgICAgICAgIHNpemVfdCBib2R5U2l6ZSA9IGhlYWRlci0+bXNnaF9zaXplIC0gc2l6
ZW9mKG1hY2hfbXNnX2hlYWRlcl90KTsKKworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxEZWNvZGVyPihib2R5LCBib2R5U2l6ZSwgbnVsbHB0ciwgVmVjdG9yPEF0dGFjaG1lbnQ+IHsg
fSk7CisgICAgfQorCisgICAgYm9vbCBtZXNzYWdlQm9keUlzT09MID0gaGVhZGVyLT5tc2doX2lk
ID09IG91dE9mTGluZUJvZHlNZXNzYWdlSUQ7CisKKyAgICBtYWNoX21zZ19ib2R5X3QqIGJvZHkg
PSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2JvZHlfdCo+KGhlYWRlciArIDEpOworICAgIG1h
Y2hfbXNnX3NpemVfdCBudW1EZXNjcmlwdG9ycyA9IGJvZHktPm1zZ2hfZGVzY3JpcHRvcl9jb3Vu
dDsKKyAgICBBU1NFUlQobnVtRGVzY3JpcHRvcnMpOworCisgICAgdWludDhfdCogZGVzY3JpcHRv
ckRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihib2R5ICsgMSk7CisKKyAgICAvLyBJ
ZiB0aGUgbWVzc2FnZSBib2R5IHdhcyBzZW50IG91dC1vZi1saW5lLCBkb24ndCB0cmVhdCB0aGUg
bGFzdCBkZXNjcmlwdG9yCisgICAgLy8gYXMgYW4gYXR0YWNobWVudCwgc2luY2UgaXQgaXMgcmVh
bGx5IHRoZSBtZXNzYWdlIGJvZHkuCisgICAgaWYgKG1lc3NhZ2VCb2R5SXNPT0wpCisgICAgICAg
IC0tbnVtRGVzY3JpcHRvcnM7CisKKyAgICAvLyBCdWlsZCBhdHRhY2htZW50IGxpc3QKKyAgICBW
ZWN0b3I8QXR0YWNobWVudD4gYXR0YWNobWVudHMobnVtRGVzY3JpcHRvcnMpOworCisgICAgZm9y
IChtYWNoX21zZ19zaXplX3QgaSA9IDA7IGkgPCBudW1EZXNjcmlwdG9yczsgKytpKSB7CisgICAg
ICAgIG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCogZGVzY3JpcHRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
bWFjaF9tc2dfZGVzY3JpcHRvcl90Kj4oZGVzY3JpcHRvckRhdGEpOworICAgICAgICBBU1NFUlQo
ZGVzY3JpcHRvci0+dHlwZS50eXBlID09IE1BQ0hfTVNHX1BPUlRfREVTQ1JJUFRPUik7CisgICAg
ICAgIGlmIChkZXNjcmlwdG9yLT50eXBlLnR5cGUgIT0gTUFDSF9NU0dfUE9SVF9ERVNDUklQVE9S
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgYXR0YWNobWVudHNbbnVt
RGVzY3JpcHRvcnMgLSBpIC0gMV0gPSBBdHRhY2htZW50KGRlc2NyaXB0b3ItPnBvcnQubmFtZSwg
ZGVzY3JpcHRvci0+cG9ydC5kaXNwb3NpdGlvbik7CisgICAgICAgIGRlc2NyaXB0b3JEYXRhICs9
IHNpemVvZihtYWNoX21zZ19wb3J0X2Rlc2NyaXB0b3JfdCk7CisgICAgfQorCisgICAgaWYgKG1l
c3NhZ2VCb2R5SXNPT0wpIHsKKyAgICAgICAgbWFjaF9tc2dfZGVzY3JpcHRvcl90KiBkZXNjcmlw
dG9yID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19kZXNjcmlwdG9yX3QqPihkZXNjcmlwdG9y
RGF0YSk7CisgICAgICAgIEFTU0VSVChkZXNjcmlwdG9yLT50eXBlLnR5cGUgPT0gTUFDSF9NU0df
T09MX0RFU0NSSVBUT1IpOworICAgICAgICBpZiAoZGVzY3JpcHRvci0+dHlwZS50eXBlICE9IE1B
Q0hfTVNHX09PTF9ERVNDUklQVE9SKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAgICAgdWludDhfdCogbWVzc2FnZUJvZHkgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZGVzY3Jp
cHRvci0+b3V0X29mX2xpbmUuYWRkcmVzcyk7CisgICAgICAgIHNpemVfdCBtZXNzYWdlQm9keVNp
emUgPSBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5zaXplOworCisgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPERlY29kZXI+KG1lc3NhZ2VCb2R5LCBtZXNzYWdlQm9keVNpemUsIFtdKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IGxlbmd0aCkgeworICAgICAgICAgICAgdm1fZGVh
bGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4o
YnVmZmVyKSwgbGVuZ3RoKTsKKyAgICAgICAgfSwgV1RGTW92ZShhdHRhY2htZW50cykpOworICAg
IH0KKworICAgIHVpbnQ4X3QqIG1lc3NhZ2VCb2R5ID0gZGVzY3JpcHRvckRhdGE7CisgICAgc2l6
ZV90IG1lc3NhZ2VCb2R5U2l6ZSA9IGhlYWRlci0+bXNnaF9zaXplIC0gKGRlc2NyaXB0b3JEYXRh
IC0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oaGVhZGVyKSk7CisKKyAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxEZWNvZGVyPihtZXNzYWdlQm9keSwgbWVzc2FnZUJvZHlTaXplLCBudWxs
cHRyLCBXVEZNb3ZlKGF0dGFjaG1lbnRzKSk7Cit9CisKKy8vIFRoZSByZWNlaXZlIGJ1ZmZlciBz
aXplIHNob3VsZCBhbHdheXMgaW5jbHVkZSB0aGUgbWF4aW11bSB0cmFpbGVyIHNpemUuCitzdGF0
aWMgY29uc3Qgc2l6ZV90IHJlY2VpdmVCdWZmZXJTaXplID0gaW5saW5lTWVzc2FnZU1heFNpemUg
KyBNQVhfVFJBSUxFUl9TSVpFOwordHlwZWRlZiBWZWN0b3I8Y2hhciwgcmVjZWl2ZUJ1ZmZlclNp
emU+IFJlY2VpdmVCdWZmZXI7CisKK3N0YXRpYyBtYWNoX21zZ19oZWFkZXJfdCogcmVhZEZyb21N
YWNoUG9ydChtYWNoX3BvcnRfdCBtYWNoUG9ydCwgUmVjZWl2ZUJ1ZmZlciYgYnVmZmVyKQorewor
ICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQobWFjaFBvcnQpKTsKKworICAgIGJ1ZmZlci5yZXNp
emUocmVjZWl2ZUJ1ZmZlclNpemUpOworCisgICAgbWFjaF9tc2dfaGVhZGVyX3QqIGhlYWRlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfaGVhZGVyX3QqPihidWZmZXIuZGF0YSgpKTsKKyAg
ICBrZXJuX3JldHVybl90IGtyID0gbWFjaF9tc2coaGVhZGVyLCBNQUNIX1JDVl9NU0cgfCBNQUNI
X1JDVl9MQVJHRSB8IE1BQ0hfUkNWX1RJTUVPVVQgfCBNQUNIX1JDVl9WT1VDSEVSLCAwLCBidWZm
ZXIuc2l6ZSgpLCBtYWNoUG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOworICAgIGlmIChrciA9PSBN
QUNIX1JDVl9USU1FRF9PVVQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGty
ID09IE1BQ0hfUkNWX1RPT19MQVJHRSkgeworICAgICAgICAvLyBUaGUgbWVzc2FnZSB3YXMgdG9v
IGxhcmdlLCByZXNpemUgdGhlIGJ1ZmZlciBhbmQgdHJ5IGFnYWluLgorICAgICAgICBidWZmZXIu
cmVzaXplKGhlYWRlci0+bXNnaF9zaXplICsgTUFYX1RSQUlMRVJfU0laRSk7CisgICAgICAgIGhl
YWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2dfaGVhZGVyX3QqPihidWZmZXIuZGF0YSgp
KTsKKyAgICAgICAgCisgICAgICAgIGtyID0gbWFjaF9tc2coaGVhZGVyLCBNQUNIX1JDVl9NU0cg
fCBNQUNIX1JDVl9MQVJHRSB8IE1BQ0hfUkNWX1RJTUVPVVQgfCBNQUNIX1JDVl9WT1VDSEVSLCAw
LCBidWZmZXIuc2l6ZSgpLCBtYWNoUG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOworICAgICAgICBB
U1NFUlQoa3IgIT0gTUFDSF9SQ1ZfVE9PX0xBUkdFKTsKKyAgICB9CisKKyAgICBpZiAoa3IgIT0g
TUFDSF9NU0dfU1VDQ0VTUykgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgV2ViS2l0
OjpzZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlvbigoX19icmlkZ2Ug
Q0ZTdHJpbmdSZWYpW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJVbmhhbmRsZWQgZXJyb3Ig
Y29kZSAleCBmcm9tIG1hY2hfbXNnLCByZWNlaXZlIHBvcnQgaXMgJXgiLCBrciwgbWFjaFBvcnRd
KTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGhlYWRlcjsKK30KKwordm9pZCBDb25uZWN0
aW9uOjpyZWNlaXZlU291cmNlRXZlbnRIYW5kbGVyKCkKK3sKKyAgICBSZWNlaXZlQnVmZmVyIGJ1
ZmZlcjsKKworICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQobV9yZWNlaXZlUG9ydCkpOworICAg
IG1hY2hfbXNnX2hlYWRlcl90KiBoZWFkZXIgPSByZWFkRnJvbU1hY2hQb3J0KG1fcmVjZWl2ZVBv
cnQsIGJ1ZmZlcik7CisgICAgaWYgKCFoZWFkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHN3
aXRjaCAoaGVhZGVyLT5tc2doX2lkKSB7CisgICAgY2FzZSBNQUNIX05PVElGWV9OT19TRU5ERVJT
OgorICAgICAgICBBU1NFUlQobV9pc1NlcnZlcik7CisgICAgICAgIGlmICghbV9zZW5kUG9ydCkK
KyAgICAgICAgICAgIGNvbm5lY3Rpb25EaWRDbG9zZSgpOworICAgICAgICByZXR1cm47CisKKyAg
ICBjYXNlIGlubGluZUJvZHlNZXNzYWdlSUQ6CisgICAgY2FzZSBvdXRPZkxpbmVCb2R5TWVzc2Fn
ZUlEOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTUFDSF9OT1RJRllfU0VORF9PTkNFOgor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8RGVjb2Rlcj4gZGVjb2RlciA9IGNyZWF0ZU1lc3NhZ2VEZWNvZGVyKGhlYWRlcik7CisgICAg
aWYgKCFkZWNvZGVyKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
ZGVjb2Rlci0+c2V0SW1wb3J0YW5jZUFzc2VydGlvbihzdGQ6Om1ha2VfdW5pcXVlPEltcG9ydGFu
Y2VBc3NlcnRpb24+KGhlYWRlcikpOworI2VuZGlmCisKKyAgICBpZiAoZGVjb2Rlci0+bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09ICJJUEMiICYmIGRlY29kZXItPm1lc3NhZ2VOYW1lKCkgPT0gIklu
aXRpYWxpemVDb25uZWN0aW9uIikgeworICAgICAgICBBU1NFUlQobV9pc1NlcnZlcik7CisgICAg
ICAgIEFTU0VSVCghbV9pc0Nvbm5lY3RlZCk7CisgICAgICAgIEFTU0VSVCghbV9zZW5kUG9ydCk7
CisKKyAgICAgICAgTWFjaFBvcnQgcG9ydDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
cG9ydCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEaXNjb25uZWN0LgorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9zZW5kUG9ydCA9IHBvcnQucG9ydCgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fc2VuZFBvcnQpIHsKKyAgICAgICAgICAgIEFTU0VSVChN
QUNIX1BPUlRfVkFMSUQobV9yZWNlaXZlUG9ydCkpOworICAgICAgICAgICAgbWFjaF9wb3J0X3Qg
cHJldmlvdXNOb3RpZmljYXRpb25Qb3J0ID0gTUFDSF9QT1JUX05VTEw7CisgICAgICAgICAgICBh
dXRvIGtyID0gbWFjaF9wb3J0X3JlcXVlc3Rfbm90aWZpY2F0aW9uKG1hY2hfdGFza19zZWxmKCks
IG1fcmVjZWl2ZVBvcnQsIE1BQ0hfTk9USUZZX05PX1NFTkRFUlMsIDAsIE1BQ0hfUE9SVF9OVUxM
LCBNQUNIX01TR19UWVBFX01PVkVfU0VORF9PTkNFLCAmcHJldmlvdXNOb3RpZmljYXRpb25Qb3J0
KTsKKyAgICAgICAgICAgIEFTU0VSVChrciA9PSBLRVJOX1NVQ0NFU1MpOworICAgICAgICAgICAg
aWYgKGtyICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIC8vIElmIG1hY2hfcG9y
dF9yZXF1ZXN0X25vdGlmaWNhdGlvbiBmYWlscywgJ3ByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCcg
d2lsbCBiZSB1bmluaXRpYWxpemVkLgorICAgICAgICAgICAgICAgIExPR19FUlJPUigibWFjaF9w
b3J0X3JlcXVlc3Rfbm90aWZpY2F0aW9uIGZhaWxlZDogKCV4KSAlcyIsIGtyLCBtYWNoX2Vycm9y
X3N0cmluZyhrcikpOworICAgICAgICAgICAgICAgIHByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCA9
IE1BQ0hfUE9SVF9OVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJldmlv
dXNOb3RpZmljYXRpb25Qb3J0ICE9IE1BQ0hfUE9SVF9OVUxMKQorICAgICAgICAgICAgICAgIGRl
YWxsb2NhdGVTZW5kUmlnaHRTYWZlbHkocHJldmlvdXNOb3RpZmljYXRpb25Qb3J0KTsKKworICAg
ICAgICAgICAgaW5pdGlhbGl6ZVNlbmRTb3VyY2UoKTsKKyAgICAgICAgICAgIGRpc3BhdGNoX3Jl
c3VtZShtX3NlbmRTb3VyY2UpOworICAgICAgICB9CisKKyAgICAgICAgbV9pc0Nvbm5lY3RlZCA9
IHRydWU7CisKKyAgICAgICAgLy8gU2VuZCBhbnkgcGVuZGluZyBvdXRnb2luZyBtZXNzYWdlcy4K
KyAgICAgICAgc2VuZE91dGdvaW5nTWVzc2FnZXMoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoZGVjb2Rlci0+
bWVzc2FnZVJlY2VpdmVyTmFtZSgpID09ICJJUEMiICYmIGRlY29kZXItPm1lc3NhZ2VOYW1lKCkg
PT0gIlNldEV4Y2VwdGlvblBvcnQiKSB7CisgICAgICAgIGlmIChtX2lzU2VydmVyKSB7CisgICAg
ICAgICAgICAvLyBTZXJ2ZXIgY29ubmVjdGlvbnMgYXJlbid0IHN1cHBvc2VkIHRvIGhhdmUgdGhl
aXIgZXhjZXB0aW9uIHBvcnRzIG92ZXJyaWRkZW4uIFRyZWF0IHRoaXMgYXMgYW4gaW52YWxpZCBt
ZXNzYWdlLgorICAgICAgICAgICAgU3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWVS
ZWZlcmVuY2UgPSBkZWNvZGVyLT5tZXNzYWdlUmVjZWl2ZXJOYW1lKCk7CisgICAgICAgICAgICBT
dHJpbmcgbWVzc2FnZVJlY2VpdmVyTmFtZShTdHJpbmcobWVzc2FnZVJlY2VpdmVyTmFtZVJlZmVy
ZW5jZS5kYXRhKCksIG1lc3NhZ2VSZWNlaXZlck5hbWVSZWZlcmVuY2Uuc2l6ZSgpKSk7CisgICAg
ICAgICAgICBTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWVSZWZlcmVuY2UgPSBkZWNvZGVyLT5t
ZXNzYWdlTmFtZSgpOworICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2VOYW1lKFN0cmluZyhtZXNz
YWdlTmFtZVJlZmVyZW5jZS5kYXRhKCksIG1lc3NhZ2VOYW1lUmVmZXJlbmNlLnNpemUoKSkpOwor
CisgICAgICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Byb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKSwgbWVzc2FnZVJlY2VpdmVyTmFtZSA9IFdURk1vdmUobWVzc2FnZVJlY2Vp
dmVyTmFtZSksIG1lc3NhZ2VOYW1lID0gV1RGTW92ZShtZXNzYWdlTmFtZSldKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZGlzcGF0Y2hEaWRSZWNlaXZlSW52YWxp
ZE1lc3NhZ2UobWVzc2FnZVJlY2VpdmVyTmFtZS51dGY4KCksIG1lc3NhZ2VOYW1lLnV0ZjgoKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBNYWNoUG9ydCBleGNlcHRpb25Qb3J0OworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShl
eGNlcHRpb25Qb3J0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzZXRNYWNoRXhj
ZXB0aW9uUG9ydChleGNlcHRpb25Qb3J0LnBvcnQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYKKworICAgIHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoV1RGTW92ZShkZWNvZGVyKSk7
Cit9ICAgIAorCitJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgQ29ubmVjdGlvbjo6aWRlbnRp
ZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIElkZW50aWZpZXIobV9pc1NlcnZlciA/IG1fcmVj
ZWl2ZVBvcnQgOiBtX3NlbmRQb3J0LCBtX3hwY0Nvbm5lY3Rpb24pOworfQorCitPcHRpb25hbDxh
dWRpdF90b2tlbl90PiBDb25uZWN0aW9uOjpnZXRBdWRpdFRva2VuKCkKK3sKKyAgICBpZiAoIW1f
eHBjQ29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAKKyAgICBh
dWRpdF90b2tlbl90IGF1ZGl0VG9rZW47CisgICAgeHBjX2Nvbm5lY3Rpb25fZ2V0X2F1ZGl0X3Rv
a2VuKG1feHBjQ29ubmVjdGlvbi5nZXQoKSwgJmF1ZGl0VG9rZW4pOworICAgIHJldHVybiBXVEZN
b3ZlKGF1ZGl0VG9rZW4pOworfQorCitib29sIENvbm5lY3Rpb246OmtpbGwoKQoreworICAgIGlm
IChtX3hwY0Nvbm5lY3Rpb24pIHsKKyAgICAgICAgeHBjX2Nvbm5lY3Rpb25fa2lsbChtX3hwY0Nv
bm5lY3Rpb24uZ2V0KCksIFNJR0tJTEwpOworICAgICAgICBtX3dhc0tpbGxlZCA9IHRydWU7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAK
K3N0YXRpYyB2b2lkIEFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGJv
b2wgc3VzcGVuZGVkKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBfQVhVSUVsZW1lbnROb3Rp
ZnlQcm9jZXNzU3VzcGVuZFN0YXR1cyhzdXNwZW5kZWQgPyBBWFN1c3BlbmRTdGF0dXNTdXNwZW5k
ZWQgOiBBWFN1c3BlbmRTdGF0dXNSdW5uaW5nKTsKKyNlbGlmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgVUlBY2Nlc3NpYmlsaXR5UG9zdE5vdGlmaWNhdGlvbihrQVhQaWRTdGF0dXNDaGFuZ2Vk
Tm90aWZpY2F0aW9uLCBAeyBAInBpZCIgOiBAKGdldHBpZCgpKSwgQCJzdXNwZW5kZWQiIDogQChz
dXNwZW5kZWQpIH0pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3VzcGVuZGVkKTsKKyNlbmRp
ZgorfQorICAgIAordm9pZCBDb25uZWN0aW9uOjp3aWxsU2VuZFN5bmNNZXNzYWdlKE9wdGlvblNl
dDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNPcHRpb25zKQoreworICAgIGlmIChzZW5kU3luY09w
dGlvbnMuY29udGFpbnMoSVBDOjpTZW5kU3luY09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNz
V2lsbFN1c3BlbmQpICYmIFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkpCisgICAgICAgIEFjY2Vzc2liaWxpdHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9u
KHRydWUpOworfQorCit2b2lkIENvbm5lY3Rpb246OmRpZFJlY2VpdmVTeW5jUmVwbHkoT3B0aW9u
U2V0PFNlbmRTeW5jT3B0aW9uPiBzZW5kU3luY09wdGlvbnMpCit7CisgICAgaWYgKHNlbmRTeW5j
T3B0aW9ucy5jb250YWlucyhJUEM6OlNlbmRTeW5jT3B0aW9uOjpJbmZvcm1QbGF0Zm9ybVByb2Nl
c3NXaWxsU3VzcGVuZCkgJiYgV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSkKKyAgICAgICAgQWNjZXNzaWJpbGl0eVByb2Nlc3NTdXNwZW5kZWROb3RpZmljYXRp
b24oZmFsc2UpOworfQorCitwaWRfdCBDb25uZWN0aW9uOjpyZW1vdGVQcm9jZXNzSUQoKSBjb25z
dAoreworICAgIGlmICghbV94cGNDb25uZWN0aW9uKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiB4cGNfY29ubmVjdGlvbl9nZXRfcGlkKG1feHBjQ29ubmVjdGlvbi5nZXQoKSk7Cit9
CisgICAgCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL2NvY29hL0ltcG9ydGFuY2VBc3NlcnRpb24uaCBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL2NvY29hL0ltcG9ydGFuY2VBc3NlcnRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmJkODg1
NDQ3NWEwMmE4NGIzMjQ3N2UwZGJmOTI5ZTE3NDhkZTUzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvSW1wb3J0YW5jZUFzc2VydGlvbi5oCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1B
QykKKworI2luY2x1ZGUgPG1hY2gvbWVzc2FnZS5oPgorCituYW1lc3BhY2UgSVBDIHsKKworY2xh
c3MgSW1wb3J0YW5jZUFzc2VydGlvbiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1wb3J0YW5jZUFzc2VydGlvbik7CisKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBJbXBvcnRhbmNlQXNzZXJ0aW9uKG1hY2hfbXNnX2hlYWRlcl90KiBoZWFk
ZXIpCisgICAgICAgIDogbV92b3VjaGVyKDApCisgICAgeworICAgICAgICBpZiAoTUFDSF9NU0dI
X0JJVFNfSEFTX1ZPVUNIRVIoaGVhZGVyLT5tc2doX2JpdHMpKSB7CisgICAgICAgICAgICBtX3Zv
dWNoZXIgPSBoZWFkZXItPm1zZ2hfdm91Y2hlcl9wb3J0OworICAgICAgICAgICAgaGVhZGVyLT5t
c2doX3ZvdWNoZXJfcG9ydCA9IE1BQ0hfVk9VQ0hFUl9OVUxMOworICAgICAgICAgICAgaGVhZGVy
LT5tc2doX2JpdHMgJj0gfihNQUNIX01TR0hfQklUU19WT1VDSEVSX01BU0sgfCBNQUNIX01TR0hf
QklUU19SQUlTRUlNUCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+SW1wb3J0YW5jZUFzc2Vy
dGlvbigpCisgICAgeworICAgICAgICBpZiAobV92b3VjaGVyKSB7CisgICAgICAgICAgICBrZXJu
X3JldHVybl90IGtyID0gbWFjaF92b3VjaGVyX2RlYWxsb2NhdGUobV92b3VjaGVyKTsKKyAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoa3IsICFrcik7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZh
dGU6CisgICAgbWFjaF92b3VjaGVyX3QgbV92b3VjaGVyOworfTsKKworfQorCisjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29j
b2EvTWFjaE1lc3NhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvY29jb2EvTWFj
aE1lc3NhZ2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjODRjOTZhMTM5YWY4MDVmMTNmMDdhYzdjYmUwMjRi
MGY1M2RhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9j
b2NvYS9NYWNoTWVzc2FnZS5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYWNoTWVzc2FnZS5oIgorCisjaWYgUExBVEZPUk0o
Q09DT0EpCisKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKworbmFtZXNwYWNlIElQQyB7CisKK3N0
ZDo6dW5pcXVlX3B0cjxNYWNoTWVzc2FnZT4gTWFjaE1lc3NhZ2U6OmNyZWF0ZShDU3RyaW5nJiYg
bWVzc2FnZVJlY2VpdmVyTmFtZSwgQ1N0cmluZyYmIG1lc3NhZ2VOYW1lLCBzaXplX3Qgc2l6ZSkK
K3sKKyAgICB2b2lkKiBtZW1vcnkgPSBXVEY6OmZhc3RaZXJvZWRNYWxsb2Moc2l6ZW9mKE1hY2hN
ZXNzYWdlKSArIHNpemUpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8TWFjaE1lc3NhZ2U+
IHsgbmV3IChOb3ROdWxsLCBtZW1vcnkpIE1hY2hNZXNzYWdlIHsgV1RGTW92ZShtZXNzYWdlUmVj
ZWl2ZXJOYW1lKSwgV1RGTW92ZShtZXNzYWdlTmFtZSksIHNpemUgfSB9OworfQorCitNYWNoTWVz
c2FnZTo6TWFjaE1lc3NhZ2UoQ1N0cmluZyYmIG1lc3NhZ2VSZWNlaXZlck5hbWUsIENTdHJpbmcm
JiBtZXNzYWdlTmFtZSwgc2l6ZV90IHNpemUpCisgICAgOiBtX21lc3NhZ2VSZWNlaXZlck5hbWUo
V1RGTW92ZShtZXNzYWdlUmVjZWl2ZXJOYW1lKSkKKyAgICAsIG1fbWVzc2FnZU5hbWUoV1RGTW92
ZShtZXNzYWdlTmFtZSkpCisgICAgLCBtX3NpemUgeyBzaXplIH0KK3sKK30KKworTWFjaE1lc3Nh
Z2U6On5NYWNoTWVzc2FnZSgpCit7CisgICAgaWYgKG1fc2hvdWxkRnJlZURlc2NyaXB0b3JzKQor
ICAgICAgICA6Om1hY2hfbXNnX2Rlc3Ryb3koaGVhZGVyKCkpOworfQorCitzaXplX3QgTWFjaE1l
c3NhZ2U6Om1lc3NhZ2VTaXplKHNpemVfdCBib2R5U2l6ZSwgc2l6ZV90IHBvcnREZXNjcmlwdG9y
Q291bnQsIHNpemVfdCBtZW1vcnlEZXNjcmlwdG9yQ291bnQpCit7CisgICAgc2l6ZV90IG1lc3Nh
Z2VTaXplID0gc2l6ZW9mKG1hY2hfbXNnX2hlYWRlcl90KSArIGJvZHlTaXplOworCisgICAgaWYg
KHBvcnREZXNjcmlwdG9yQ291bnQgfHwgbWVtb3J5RGVzY3JpcHRvckNvdW50KSB7CisgICAgICAg
IG1lc3NhZ2VTaXplICs9IHNpemVvZihtYWNoX21zZ19ib2R5X3QpOworICAgICAgICBtZXNzYWdl
U2l6ZSArPSAocG9ydERlc2NyaXB0b3JDb3VudCAqIHNpemVvZihtYWNoX21zZ19wb3J0X2Rlc2Ny
aXB0b3JfdCkpOworICAgICAgICBtZXNzYWdlU2l6ZSArPSAobWVtb3J5RGVzY3JpcHRvckNvdW50
ICogc2l6ZW9mKG1hY2hfbXNnX29vbF9kZXNjcmlwdG9yX3QpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcm91bmRfbXNnKG1lc3NhZ2VTaXplKTsKK30KKwordm9pZCBNYWNoTWVzc2FnZTo6bGVha0Rl
c2NyaXB0b3JzKCkKK3sKKyAgICBtX3Nob3VsZEZyZWVEZXNjcmlwdG9ycyA9IGZhbHNlOworfQor
Cit9CisKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL2NvY29hL01hY2hNZXNzYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9jb2NvYS9NYWNoTWVzc2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwMTMxYzdmMGQzZWZhMzhh
ZjQwNTRlMjc2ZDRmYzI4NmM5MzQ0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9jb2NvYS9NYWNoTWVzc2FnZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSA8
bWFjaC9tZXNzYWdlLmg+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIElQQyB7CisKK2NsYXNzIE1hY2hNZXNzYWdlIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPE1hY2hNZXNzYWdlPiBjcmVhdGUoQ1N0cmluZyYmIG1lc3NhZ2VSZWNlaXZlck5hbWUsIENT
dHJpbmcmJiBtZXNzYWdlTmFtZSwgc2l6ZV90KTsKKyAgICB+TWFjaE1lc3NhZ2UoKTsKKworICAg
IHN0YXRpYyBzaXplX3QgbWVzc2FnZVNpemUoc2l6ZV90IGJvZHlTaXplLCBzaXplX3QgcG9ydERl
c2NyaXB0b3JDb3VudCwgc2l6ZV90IG1lbW9yeURlc2NyaXB0b3JDb3VudCk7CisKKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIG1hY2hfbXNnX2hlYWRlcl90
KiBoZWFkZXIoKSB7IHJldHVybiBtX21lc3NhZ2VIZWFkZXI7IH0KKworICAgIHZvaWQgbGVha0Rl
c2NyaXB0b3JzKCk7CisKKyAgICBjb25zdCBDU3RyaW5nJiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJOYW1lOyB9CisgICAgY29uc3QgQ1N0cmlu
ZyYgbWVzc2FnZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2VOYW1lOyB9CisKK3ByaXZh
dGU6CisgICAgTWFjaE1lc3NhZ2UoQ1N0cmluZyYmIG1lc3NhZ2VSZWNlaXZlck5hbWUsIENTdHJp
bmcmJiBtZXNzYWdlTmFtZSwgc2l6ZV90KTsKKworICAgIENTdHJpbmcgbV9tZXNzYWdlUmVjZWl2
ZXJOYW1lOworICAgIENTdHJpbmcgbV9tZXNzYWdlTmFtZTsKKyAgICBzaXplX3QgbV9zaXplOwor
ICAgIGJvb2wgbV9zaG91bGRGcmVlRGVzY3JpcHRvcnMgeyB0cnVlIH07CisgICAgbWFjaF9tc2df
aGVhZGVyX3QgbV9tZXNzYWdlSGVhZGVyW107Cit9OworCit9CisKKyNlbmRpZiAvLyBQTEFURk9S
TShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL2NvY29hL01h
Y2hQb3J0LmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9jb2NvYS9NYWNoUG9ydC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjBkMGMzNjQwODIzNzdlY2EzNmUzM2I4ZmNiODUxY2I2NzU5MGFjNGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9jb2NvYS9NYWNoUG9ydC5o
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkF0dGFjaG1lbnQuaCIKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAiRW5jb2Rlci5o
IgorCituYW1lc3BhY2UgSVBDIHsKKworY2xhc3MgTWFjaFBvcnQgeworcHVibGljOgorICAgIE1h
Y2hQb3J0KCkKKyAgICAgICAgOiBtX3BvcnQoTUFDSF9QT1JUX05VTEwpCisgICAgICAgICwgbV9k
aXNwb3NpdGlvbigwKQorICAgIHsKKyAgICB9CisKKyAgICBNYWNoUG9ydChtYWNoX3BvcnRfbmFt
ZV90IHBvcnQsIG1hY2hfbXNnX3R5cGVfbmFtZV90IGRpc3Bvc2l0aW9uKQorICAgICAgICA6IG1f
cG9ydChwb3J0KQorICAgICAgICAsIG1fZGlzcG9zaXRpb24oZGlzcG9zaXRpb24pCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBlbmNvZGVyIDw8IEF0dGFjaG1lbnQobV9wb3J0LCBtX2Rpc3Bvc2l0aW9uKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgTWFjaFBvcnQm
IHApCisgICAgeworICAgICAgICBBdHRhY2htZW50IGF0dGFjaG1lbnQ7CisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoYXR0YWNobWVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBwLm1fcG9ydCA9IGF0dGFjaG1lbnQucG9ydCgpOworICAgICAgICBw
Lm1fZGlzcG9zaXRpb24gPSBhdHRhY2htZW50LmRpc3Bvc2l0aW9uKCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIG1hY2hfcG9ydF9uYW1lX3QgcG9ydCgpIGNvbnN0IHsgcmV0
dXJuIG1fcG9ydDsgfQorICAgIG1hY2hfbXNnX3R5cGVfbmFtZV90IGRpc3Bvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kaXNwb3NpdGlvbjsgfQorCitwcml2YXRlOgorICAgIG1hY2hfcG9ydF9u
YW1lX3QgbV9wb3J0OworICAgIG1hY2hfbXNnX3R5cGVfbmFtZV90IG1fZGlzcG9zaXRpb247Cit9
OworCit9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSVBDL21hYy9Db25uZWN0aW9uTWFjLm1tIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
bWFjL0Nvbm5lY3Rpb25NYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNWYx
MWMwY2FjZDlhN2Q4NzI5ODg2MjRjYjI5NDUzMDEzMjM1YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFj
L0Nvbm5lY3Rpb25NYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw2NTQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJDb25uZWN0aW9uLmgiCi0K
LSNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKLSNpbXBvcnQgIkltcG9ydGFuY2VBc3NlcnRpb24u
aCIKLSNpbXBvcnQgIk1hY2hNZXNzYWdlLmgiCi0jaW1wb3J0ICJNYWNoUG9ydC5oIgotI2ltcG9y
dCAiTWFjaFV0aWxpdGllcy5oIgotI2ltcG9ydCAiV0tDcmFzaFJlcG9ydGVyLmgiCi0jaW1wb3J0
IDxXZWJDb3JlL0FYT2JqZWN0Q2FjaGUuaD4KLSNpbXBvcnQgPG1hY2gvbWFjaF9lcnJvci5oPgot
I2ltcG9ydCA8bWFjaC92bV9tYXAuaD4KLSNpbXBvcnQgPHN5cy9tbWFuLmg+Ci0jaW1wb3J0IDx3
dGYvTWFjaFNlbmRSaWdodC5oPgotI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KLSNpbXBvcnQgPHd0
Zi9zcGkvZGFyd2luL1hQQ1NQSS5oPgotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbXBv
cnQgIlByb2Nlc3NBc3NlcnRpb24uaCIKLSNpbXBvcnQgPFVJS2l0L1VJQWNjZXNzaWJpbGl0eS5o
PgotCi0jaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKLSNpbXBvcnQgPEFYUnVudGltZS9BWERl
ZmluZXMuaD4KLSNpbXBvcnQgPEFYUnVudGltZS9BWE5vdGlmaWNhdGlvbkNvbnN0YW50cy5oPgot
I2Vsc2UKLSNkZWZpbmUga0FYUGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbiAwCi0jZW5kaWYK
LQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0KLSNpZiBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQotI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzUHJp
di5oPgotI2Vsc2UKLXR5cGVkZWYgZW51bSB7Ci0gICAgQVhTdXNwZW5kU3RhdHVzUnVubmluZyA9
IDAsCi0gICAgQVhTdXNwZW5kU3RhdHVzU3VzcGVuZGVkLAotfSBBWFN1c3BlbmRTdGF0dXM7Ci0j
ZW5kaWYKLQotZXh0ZXJuICJDIiBBWEVycm9yIF9BWFVJRWxlbWVudE5vdGlmeVByb2Nlc3NTdXNw
ZW5kU3RhdHVzKEFYU3VzcGVuZFN0YXR1cyk7Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0K
LW5hbWVzcGFjZSBJUEMgewotCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGlubGluZU1lc3NhZ2VNYXhT
aXplID0gNDA5NjsKLQotLy8gQXJiaXRyYXJ5IG1lc3NhZ2UgSURzIHRoYXQgZG8gbm90IGNvbGxp
ZGUgd2l0aCBNYWNoIG5vdGlmaWNhdGlvbiBtZXNzYWdlcyAodXNlZCBteSBpbml0aWFscykuCi1j
b25zdGV4cHIgbWFjaF9tc2dfaWRfdCBpbmxpbmVCb2R5TWVzc2FnZUlEID0gMHhkYmEwZGJhOwot
Y29uc3RleHByIG1hY2hfbXNnX2lkX3Qgb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRCA9IDB4ZGJhMWRi
YTsKLQotLy8gQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cgZG9lcyB0d28gdGhpbmdzOgot
Ly8gMSkgSXQgc2V0cyBhIHdhdGNoZG9nIHRpbWVyIHRvIGtpbGwgdGhlIHBlZXJlZCBwcm9jZXNz
LgotLy8gMikgT24gaU9TLCBtYWtlIHRoZSBwcm9jZXNzIHJ1bm5hYmxlIGZvciB0aGUgZHVyYXRp
b24gb2YgdGhlIHdhdGNoZG9nCi0vLyAgICB0byBlbnN1cmUgaXQgaGFzIGEgY2hhbmNlIHRvIHRl
cm1pbmF0ZSBjbGVhbmx5LgotY2xhc3MgQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cgewot
cHVibGljOgotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUNvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNo
ZG9nKE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9uX3Q+JiB4cGNDb25uZWN0aW9uLCBTZWNvbmRz
IGludGVydmFsKQotICAgIHsKLSAgICAgICAgbmV3IENvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNo
ZG9nKHhwY0Nvbm5lY3Rpb24sIGludGVydmFsKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAg
IENvbm5lY3Rpb25UZXJtaW5hdGlvbldhdGNoZG9nKE9TT2JqZWN0UHRyPHhwY19jb25uZWN0aW9u
X3Q+JiB4cGNDb25uZWN0aW9uLCBTZWNvbmRzIGludGVydmFsKQotICAgICAgICA6IG1feHBjQ29u
bmVjdGlvbih4cGNDb25uZWN0aW9uKQotICAgICAgICAsIG1fd2F0Y2hkb2dUaW1lcihSdW5Mb29w
OjptYWluKCksIHRoaXMsICZDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZzo6d2F0Y2hkb2dU
aW1lckZpcmVkKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgICwgbV9hc3NlcnRp
b24oc3RkOjptYWtlX3VuaXF1ZTxXZWJLaXQ6OlByb2Nlc3NBbmRVSUFzc2VydGlvbj4oeHBjX2Nv
bm5lY3Rpb25fZ2V0X3BpZChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpLCAiQ29ubmVjdGlvblRlcm1p
bmF0aW9uV2F0Y2hkb2ciX3MsIFdlYktpdDo6QXNzZXJ0aW9uU3RhdGU6OkJhY2tncm91bmQpKQot
I2VuZGlmCi0gICAgewotICAgICAgICBtX3dhdGNoZG9nVGltZXIuc3RhcnRPbmVTaG90KGludGVy
dmFsKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB3YXRjaGRvZ1RpbWVyRmlyZWQoKQotICAgIHsK
LSAgICAgICAgeHBjX2Nvbm5lY3Rpb25fa2lsbChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCksIFNJR0tJ
TEwpOwotICAgICAgICBkZWxldGUgdGhpczsKLSAgICB9Ci0KLSAgICBPU09iamVjdFB0cjx4cGNf
Y29ubmVjdGlvbl90PiBtX3hwY0Nvbm5lY3Rpb247Ci0gICAgUnVuTG9vcDo6VGltZXI8Q29ubmVj
dGlvblRlcm1pbmF0aW9uV2F0Y2hkb2c+IG1fd2F0Y2hkb2dUaW1lcjsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlByb2Nlc3NBbmRVSUFzc2Vy
dGlvbj4gbV9hc3NlcnRpb247Ci0jZW5kaWYKLX07Ci0gICAgCi12b2lkIENvbm5lY3Rpb246OnBs
YXRmb3JtSW52YWxpZGF0ZSgpCi17Ci0gICAgaWYgKCFtX2lzQ29ubmVjdGVkKSB7Ci0gICAgICAg
IGlmIChtX3NlbmRQb3J0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1faXNTZXJ2ZXIpOwotICAg
ICAgICAgICAgZGVhbGxvY2F0ZVNlbmRSaWdodFNhZmVseShtX3NlbmRQb3J0KTsKLSAgICAgICAg
ICAgIG1fc2VuZFBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChtX3JlY2VpdmVTb3VyY2UpIHsKLSAgICAgICAgICAgIC8vIEZvciBhIHNob3J0IHBlcmlvZCBv
ZiB0aW1lLCB3aGVuIG1faXNTZXJ2ZXIgaXMgdHJ1ZSBhbmQgb3BlbigpIGhhcyBiZWVuIGNhbGxl
ZCwgbV9yZWNlaXZlU291cmNlIGhhcyBiZWVuIGluaXRpYWxpemVkCi0gICAgICAgICAgICAvLyBi
dXQgbV9pc0Nvbm5lY3RlZCBoYXMgbm90IGJlZW4gc2V0IHRvIHRydWUgeWV0LiBJbiB0aGlzIGNh
c2UsIHdlIG5lZWQgdG8gY2FuY2VsIG1fcmVjZWl2ZVNvdXJjZSBpbnN0ZWFkIG9mIGRlc3Ryb3lp
bmcKLSAgICAgICAgICAgIC8vIG1fcmVjZWl2ZVBvcnQgb3Vyc2VsdmVzLgotICAgICAgICAgICAg
QVNTRVJUKG1faXNTZXJ2ZXIpOwotICAgICAgICAgICAgY2FuY2VsUmVjZWl2ZVNvdXJjZSgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fcmVjZWl2ZVBvcnQpIHsKLSAgICAgICAgICAgIEFT
U0VSVChtX2lzU2VydmVyKTsKLSNpZiAhUExBVEZPUk0oV0FUQ0hPUykKLSAgICAgICAgICAgIG1h
Y2hfcG9ydF91bmd1YXJkKG1hY2hfdGFza19zZWxmKCksIG1fcmVjZWl2ZVBvcnQsIHJlaW50ZXJw
cmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4odGhpcykpOwotI2VuZGlmCi0gICAgICAgICAg
ICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYoKSwgbV9yZWNlaXZlUG9ydCwgTUFD
SF9QT1JUX1JJR0hUX1JFQ0VJVkUsIC0xKTsKLSAgICAgICAgICAgIG1fcmVjZWl2ZVBvcnQgPSBN
QUNIX1BPUlRfTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlID0gbnVsbHB0cjsKLSAgICBtX2lzSW5pdGlh
bGl6aW5nU2VuZFNvdXJjZSA9IGZhbHNlOwotICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKLQot
ICAgIEFTU0VSVChtX3NlbmRQb3J0KTsKLSAgICBBU1NFUlQobV9yZWNlaXZlUG9ydCk7Ci0KLSAg
ICAvLyBVbnJlZ2lzdGVyIG91ciBwb3J0cy4KLSAgICBkaXNwYXRjaF9zb3VyY2VfY2FuY2VsKG1f
c2VuZFNvdXJjZSk7Ci0gICAgZGlzcGF0Y2hfcmVsZWFzZShtX3NlbmRTb3VyY2UpOwotICAgIG1f
c2VuZFNvdXJjZSA9IG51bGxwdHI7Ci0gICAgbV9zZW5kUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwot
Ci0gICAgY2FuY2VsUmVjZWl2ZVNvdXJjZSgpOwotfQotCi12b2lkIENvbm5lY3Rpb246OmNhbmNl
bFJlY2VpdmVTb3VyY2UoKQotewotICAgIGRpc3BhdGNoX3NvdXJjZV9jYW5jZWwobV9yZWNlaXZl
U291cmNlKTsKLSAgICBkaXNwYXRjaF9yZWxlYXNlKG1fcmVjZWl2ZVNvdXJjZSk7Ci0gICAgbV9y
ZWNlaXZlU291cmNlID0gbnVsbHB0cjsKLSAgICBtX3JlY2VpdmVQb3J0ID0gTUFDSF9QT1JUX05V
TEw7Ci19Ci0gICAgCi12b2lkIENvbm5lY3Rpb246OnRlcm1pbmF0ZVNvb24oU2Vjb25kcyBpbnRl
cnZhbCkKLXsKLSAgICBpZiAobV94cGNDb25uZWN0aW9uKQotICAgICAgICBDb25uZWN0aW9uVGVy
bWluYXRpb25XYXRjaGRvZzo6Y3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cobV94
cGNDb25uZWN0aW9uLCBpbnRlcnZhbCk7Ci19Ci0gICAgCi12b2lkIENvbm5lY3Rpb246OnBsYXRm
b3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCi17Ci0gICAgaWYgKCFNQUNIX1BP
UlRfVkFMSUQoaWRlbnRpZmllci5wb3J0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aXNTZXJ2ZXIpIHsKLSAgICAgICAgbV9yZWNlaXZlUG9ydCA9IGlkZW50aWZpZXIucG9ydDsKLSAg
ICAgICAgbV9zZW5kUG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotCi0jaWYgIVBMQVRGT1JNKFdBVENI
T1MpCi0gICAgICAgIG1hY2hfcG9ydF9ndWFyZChtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQ
b3J0LCByZWludGVycHJldF9jYXN0PG1hY2hfcG9ydF9jb250ZXh0X3Q+KHRoaXMpLCB0cnVlKTsK
LSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcmVjZWl2ZVBvcnQgPSBNQUNIX1BPUlRf
TlVMTDsKLSAgICAgICAgbV9zZW5kUG9ydCA9IGlkZW50aWZpZXIucG9ydDsKLSAgICB9Ci0KLSAg
ICBtX3NlbmRTb3VyY2UgPSBudWxscHRyOwotICAgIG1fcmVjZWl2ZVNvdXJjZSA9IG51bGxwdHI7
Ci0KLSAgICBtX3hwY0Nvbm5lY3Rpb24gPSBpZGVudGlmaWVyLnhwY0Nvbm5lY3Rpb247Ci19Ci0K
LWJvb2wgQ29ubmVjdGlvbjo6b3BlbigpCi17Ci0gICAgaWYgKG1faXNTZXJ2ZXIpIHsKLSAgICAg
ICAgQVNTRVJUKG1fcmVjZWl2ZVBvcnQpOwotICAgICAgICBBU1NFUlQoIW1fc2VuZFBvcnQpOwot
ICAgICAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fcmVjZWl2ZVBvcnQpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBBU1NFUlQoIW1fcmVjZWl2ZVBvcnQpOwotICAgICAgICBBU1NFUlQobV9z
ZW5kUG9ydCk7Ci0gICAgICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQobV9zZW5kUG9ydCkpOwot
Ci0gICAgICAgIGF1dG8ga3IgPSBtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwg
TUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZtX3JlY2VpdmVQb3J0KTsKLSAgICAgICAgaWYgKGty
ICE9IEtFUk5fU1VDQ0VTUykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYWxs
b2NhdGUgbWFjaCBwb3J0LCBlcnJvciAleDogJXMiLCBrciwgbWFjaF9lcnJvcl9zdHJpbmcoa3Ip
KTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSNpZiAhUExBVEZPUk0oV0FUQ0hP
UykKLSAgICAgICAgbWFjaF9wb3J0X2d1YXJkKG1hY2hfdGFza19zZWxmKCksIG1fcmVjZWl2ZVBv
cnQsIHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9wb3J0X2NvbnRleHRfdD4odGhpcyksIHRydWUpOwot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIG1hY2hfcG9ydF9zZXRfYXR0cmli
dXRlcyhtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQb3J0LCBNQUNIX1BPUlRfREVOQVBfUkVD
RUlWRVIsIChtYWNoX3BvcnRfaW5mb190KTAsIDApOwotI2VuZGlmCi0KLSAgICAgICAgbV9pc0Nv
bm5lY3RlZCA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICAvLyBTZW5kIHRoZSBpbml0aWFsaXpl
IG1lc3NhZ2UsIHdoaWNoIGNvbnRhaW5zIGEgc2VuZCByaWdodCBmb3IgdGhlIHNlcnZlciB0byB1
c2UuCi0gICAgICAgIGF1dG8gZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8RW5jb2Rlcj4oIklQ
QyIsICJJbml0aWFsaXplQ29ubmVjdGlvbiIsIDApOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGUo
TWFjaFBvcnQobV9yZWNlaXZlUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpKTsKLQotICAg
ICAgICBpbml0aWFsaXplU2VuZFNvdXJjZSgpOwotCi0gICAgICAgIHNlbmRNZXNzYWdlKFdURk1v
dmUoZW5jb2RlciksIHsgfSk7Ci0gICAgfQotCi0gICAgLy8gQ2hhbmdlIHRoZSBtZXNzYWdlIHF1
ZXVlIGxlbmd0aCBmb3IgdGhlIHJlY2VpdmUgcG9ydC4KLSAgICBzZXRNYWNoUG9ydFF1ZXVlTGVu
Z3RoKG1fcmVjZWl2ZVBvcnQsIE1BQ0hfUE9SVF9RTElNSVRfTEFSR0UpOwotCi0gICAgUmVmUHRy
PENvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV9yZWNlaXZlU291cmNlID0gZGlz
cGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9NQUNIX1JFQ1YsIG1fcmVj
ZWl2ZVBvcnQsIDAsIG1fY29ubmVjdGlvblF1ZXVlLT5kaXNwYXRjaFF1ZXVlKCkpOwotICAgIGRp
c3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihtX3JlY2VpdmVTb3VyY2UsIFtjb25uZWN0
aW9uXSB7Ci0gICAgICAgIGNvbm5lY3Rpb24tPnJlY2VpdmVTb3VyY2VFdmVudEhhbmRsZXIoKTsK
LSAgICB9KTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2NhbmNlbF9oYW5kbGVyKG1fcmVjZWl2
ZVNvdXJjZSwgW2Nvbm5lY3Rpb24sIHJlY2VpdmVQb3J0ID0gbV9yZWNlaXZlUG9ydF0gewotI2lm
IFBMQVRGT1JNKFdBVENIT1MpCi0gICAgICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKLSNl
bHNlCi0gICAgICAgIG1hY2hfcG9ydF91bmd1YXJkKG1hY2hfdGFza19zZWxmKCksIHJlY2VpdmVQ
b3J0LCByZWludGVycHJldF9jYXN0PG1hY2hfcG9ydF9jb250ZXh0X3Q+KGNvbm5lY3Rpb24uZ2V0
KCkpKTsKLSNlbmRpZgotICAgICAgICBtYWNoX3BvcnRfbW9kX3JlZnMobWFjaF90YXNrX3NlbGYo
KSwgcmVjZWl2ZVBvcnQsIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAtMSk7Ci0gICAgfSk7Ci0K
LSAgICByZWYoKTsKLSAgICBkaXNwYXRjaF9hc3luYyhtX2Nvbm5lY3Rpb25RdWV1ZS0+ZGlzcGF0
Y2hRdWV1ZSgpLCBeewotICAgICAgICBkaXNwYXRjaF9yZXN1bWUobV9yZWNlaXZlU291cmNlKTsK
LQotICAgICAgICBpZiAobV9zZW5kU291cmNlKQotICAgICAgICAgICAgZGlzcGF0Y2hfcmVzdW1l
KG1fc2VuZFNvdXJjZSk7Ci0KLSAgICAgICAgZGVyZWYoKTsKLSAgICB9KTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIENvbm5lY3Rpb246OnNlbmRNZXNzYWdlKHN0ZDo6dW5pcXVlX3B0
cjxNYWNoTWVzc2FnZT4gbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQobWVzc2FnZSk7Ci0gICAgQVNT
RVJUKCFtX3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlKTsKLSAgICBBU1NFUlQoIW1faXNJbml0
aWFsaXppbmdTZW5kU291cmNlKTsKLQotICAgIC8vIFNlbmQgdGhlIG1lc3NhZ2UuCi0gICAga2Vy
bl9yZXR1cm5fdCBrciA9IG1hY2hfbXNnKG1lc3NhZ2UtPmhlYWRlcigpLCBNQUNIX1NFTkRfTVNH
IHwgTUFDSF9TRU5EX1RJTUVPVVQgfCBNQUNIX1NFTkRfTk9USUZZLCBtZXNzYWdlLT5zaXplKCks
IDAsIE1BQ0hfUE9SVF9OVUxMLCBNQUNIX01TR19USU1FT1VUX05PTkUsIE1BQ0hfUE9SVF9OVUxM
KTsKLSAgICBzd2l0Y2ggKGtyKSB7Ci0gICAgY2FzZSBNQUNIX01TR19TVUNDRVNTOgotICAgICAg
ICAvLyBUaGUga2VybmVsIGhhcyBhbHJlYWR5IGFkb3B0ZWQgdGhlIGRlc2NyaXB0b3JzLgotICAg
ICAgICBtZXNzYWdlLT5sZWFrRGVzY3JpcHRvcnMoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBjYXNlIE1BQ0hfU0VORF9USU1FRF9PVVQ6Ci0gICAgICAgIC8vIFdlIHRpbWVkIG91dCwg
c3Rhc2ggYXdheSB0aGUgbWVzc2FnZSBmb3IgbGF0ZXIuCi0gICAgICAgIG1fcGVuZGluZ091dGdv
aW5nTWFjaE1lc3NhZ2UgPSBXVEZNb3ZlKG1lc3NhZ2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBjYXNlIE1BQ0hfU0VORF9JTlZBTElEX0RFU1Q6Ci0gICAgICAgIC8vIFRoZSBvdGhl
ciBlbmQgaGFzIGRpc2FwcGVhcmVkLCB3ZSdsbCBnZXQgYSBkZWFkIG5hbWUgbm90aWZpY2F0aW9u
IHdoaWNoIHdpbGwgY2F1c2UgdXMgdG8gYmUgaW52YWxpZGF0ZWQuCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFdlYktpdDo6c2V0Q3Jhc2hSZXBvcnRBcHBs
aWNhdGlvblNwZWNpZmljSW5mb3JtYXRpb24oKF9fYnJpZGdlIENGU3RyaW5nUmVmKVtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiVW5oYW5kbGVkIGVycm9yIGNvZGUgJXgsIG1lc3NhZ2UgJyVz
OjolcyciLCBrciwgbWVzc2FnZS0+bWVzc2FnZVJlY2VpdmVyTmFtZSgpLmRhdGEoKSwgbWVzc2Fn
ZS0+bWVzc2FnZU5hbWUoKS5kYXRhKCldKTsKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci19Ci0K
LWJvb2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICFtX3BlbmRpbmdPdXRnb2luZ01hY2hNZXNzYWdlICYmICFtX2lzSW5p
dGlhbGl6aW5nU2VuZFNvdXJjZTsKLX0KLQotYm9vbCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdN
ZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyKQotewotICAgIEFTU0VSVCgh
bV9wZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2FnZSAmJiAhbV9pc0luaXRpYWxpemluZ1NlbmRTb3Vy
Y2UpOwotCi0gICAgYXV0byBhdHRhY2htZW50cyA9IGVuY29kZXItPnJlbGVhc2VBdHRhY2htZW50
cygpOwotICAgIAotICAgIGF1dG8gbnVtYmVyT2ZQb3J0RGVzY3JpcHRvcnMgPSBzdGQ6OmNvdW50
X2lmKGF0dGFjaG1lbnRzLmJlZ2luKCksIGF0dGFjaG1lbnRzLmVuZCgpLCBbXShhdXRvJiBhdHRh
Y2htZW50KSB7IHJldHVybiBhdHRhY2htZW50LnR5cGUoKSA9PSBBdHRhY2htZW50OjpNYWNoUG9y
dFR5cGU7IH0pOwotICAgIGJvb2wgbWVzc2FnZUJvZHlJc09PTCA9IGZhbHNlOwotICAgIGF1dG8g
bWVzc2FnZVNpemUgPSBNYWNoTWVzc2FnZTo6bWVzc2FnZVNpemUoZW5jb2Rlci0+YnVmZmVyU2l6
ZSgpLCBudW1iZXJPZlBvcnREZXNjcmlwdG9ycywgbWVzc2FnZUJvZHlJc09PTCk7Ci0gICAgaWYg
KG1lc3NhZ2VTaXplID4gaW5saW5lTWVzc2FnZU1heFNpemUpIHsKLSAgICAgICAgbWVzc2FnZUJv
ZHlJc09PTCA9IHRydWU7Ci0gICAgICAgIG1lc3NhZ2VTaXplID0gTWFjaE1lc3NhZ2U6Om1lc3Nh
Z2VTaXplKDAsIG51bWJlck9mUG9ydERlc2NyaXB0b3JzLCBtZXNzYWdlQm9keUlzT09MKTsKLSAg
ICB9Ci0KLSAgICBhdXRvIG1lc3NhZ2UgPSBNYWNoTWVzc2FnZTo6Y3JlYXRlKGVuY29kZXItPm1l
c3NhZ2VSZWNlaXZlck5hbWUoKS50b1N0cmluZygpLCBlbmNvZGVyLT5tZXNzYWdlTmFtZSgpLnRv
U3RyaW5nKCksIG1lc3NhZ2VTaXplKTsKLQotICAgIGF1dG8qIGhlYWRlciA9IG1lc3NhZ2UtPmhl
YWRlcigpOwotICAgIGhlYWRlci0+bXNnaF9iaXRzID0gTUFDSF9NU0dIX0JJVFMoTUFDSF9NU0df
VFlQRV9DT1BZX1NFTkQsIDApOwotICAgIGhlYWRlci0+bXNnaF9zaXplID0gbWVzc2FnZVNpemU7
Ci0gICAgaGVhZGVyLT5tc2doX3JlbW90ZV9wb3J0ID0gbV9zZW5kUG9ydDsKLSAgICBoZWFkZXIt
Pm1zZ2hfbG9jYWxfcG9ydCA9IE1BQ0hfUE9SVF9OVUxMOwotICAgIGhlYWRlci0+bXNnaF9pZCA9
IG1lc3NhZ2VCb2R5SXNPT0wgPyBvdXRPZkxpbmVCb2R5TWVzc2FnZUlEIDogaW5saW5lQm9keU1l
c3NhZ2VJRDsKLQotICAgIGF1dG8qIG1lc3NhZ2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oaGVhZGVyICsgMSk7Ci0KLSAgICBib29sIGlzQ29tcGxleCA9IG51bWJlck9mUG9ydERl
c2NyaXB0b3JzIHx8IG1lc3NhZ2VCb2R5SXNPT0w7Ci0gICAgaWYgKGlzQ29tcGxleCkgewotICAg
ICAgICBoZWFkZXItPm1zZ2hfYml0cyB8PSBNQUNIX01TR0hfQklUU19DT01QTEVYOwotCi0gICAg
ICAgIGF1dG8qIGJvZHkgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2JvZHlfdCo+KG1lc3Nh
Z2VEYXRhKTsKLSAgICAgICAgYm9keS0+bXNnaF9kZXNjcmlwdG9yX2NvdW50ID0gbnVtYmVyT2ZQ
b3J0RGVzY3JpcHRvcnMgKyBtZXNzYWdlQm9keUlzT09MOwotICAgICAgICBtZXNzYWdlRGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJvZHkgKyAxKTsKLQotICAgICAgICBhdXRvIGdl
dERlc2NyaXB0b3JBbmRBZHZhbmNlID0gW10odWludDhfdComIGRhdGEsIHN0ZDo6c2l6ZV90IHRv
QWR2YW5jZSkgewotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9tc2df
ZGVzY3JpcHRvcl90Kj4oc3RkOjpleGNoYW5nZShkYXRhLCBkYXRhICsgdG9BZHZhbmNlKSk7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgZm9yIChhdXRvJiBhdHRhY2htZW50IDogYXR0YWNobWVudHMp
IHsKLSAgICAgICAgICAgIEFTU0VSVChhdHRhY2htZW50LnR5cGUoKSA9PSBBdHRhY2htZW50OjpN
YWNoUG9ydFR5cGUpOwotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQudHlwZSgpID09IEF0dGFj
aG1lbnQ6Ok1hY2hQb3J0VHlwZSkgewotICAgICAgICAgICAgICAgIGF1dG8qIGRlc2NyaXB0b3Ig
PSBnZXREZXNjcmlwdG9yQW5kQWR2YW5jZShtZXNzYWdlRGF0YSwgc2l6ZW9mKG1hY2hfbXNnX3Bv
cnRfZGVzY3JpcHRvcl90KSk7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+cG9ydC5uYW1l
ID0gYXR0YWNobWVudC5wb3J0KCk7Ci0gICAgICAgICAgICAgICAgZGVzY3JpcHRvci0+cG9ydC5k
aXNwb3NpdGlvbiA9IGF0dGFjaG1lbnQuZGlzcG9zaXRpb24oKTsKLSAgICAgICAgICAgICAgICBk
ZXNjcmlwdG9yLT5wb3J0LnR5cGUgPSBNQUNIX01TR19QT1JUX0RFU0NSSVBUT1I7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWVzc2FnZUJvZHlJc09PTCkgewotICAg
ICAgICAgICAgYXV0byogZGVzY3JpcHRvciA9IGdldERlc2NyaXB0b3JBbmRBZHZhbmNlKG1lc3Nh
Z2VEYXRhLCBzaXplb2YobWFjaF9tc2dfb29sX2Rlc2NyaXB0b3JfdCkpOwotICAgICAgICAgICAg
ZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuYWRkcmVzcyA9IGVuY29kZXItPmJ1ZmZlcigpOwotICAg
ICAgICAgICAgZGVzY3JpcHRvci0+b3V0X29mX2xpbmUuc2l6ZSA9IGVuY29kZXItPmJ1ZmZlclNp
emUoKTsKLSAgICAgICAgICAgIGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLmNvcHkgPSBNQUNIX01T
R19WSVJUVUFMX0NPUFk7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS5kZWFs
bG9jYXRlID0gZmFsc2U7Ci0gICAgICAgICAgICBkZXNjcmlwdG9yLT5vdXRfb2ZfbGluZS50eXBl
ID0gTUFDSF9NU0dfT09MX0RFU0NSSVBUT1I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBD
b3B5IHRoZSBkYXRhIGlmIGl0IGlzIG5vdCBiZWluZyBzZW50IG91dC1vZi1saW5lLgotICAgIGlm
ICghbWVzc2FnZUJvZHlJc09PTCkKLSAgICAgICAgbWVtY3B5KG1lc3NhZ2VEYXRhLCBlbmNvZGVy
LT5idWZmZXIoKSwgZW5jb2Rlci0+YnVmZmVyU2l6ZSgpKTsKLQotICAgIEFTU0VSVChtX3NlbmRQ
b3J0KTsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fc2VuZFBvcnQpKTsKLQotICAgIHJl
dHVybiBzZW5kTWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKTsKLX0KLQotdm9pZCBDb25uZWN0aW9u
Ojppbml0aWFsaXplU2VuZFNvdXJjZSgpCi17Ci0gICAgbV9zZW5kU291cmNlID0gZGlzcGF0Y2hf
c291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQRV9NQUNIX1NFTkQsIG1fc2VuZFBvcnQs
IERJU1BBVENIX01BQ0hfU0VORF9ERUFEIHwgRElTUEFUQ0hfTUFDSF9TRU5EX1BPU1NJQkxFLCBt
X2Nvbm5lY3Rpb25RdWV1ZS0+ZGlzcGF0Y2hRdWV1ZSgpKTsKLSAgICBtX2lzSW5pdGlhbGl6aW5n
U2VuZFNvdXJjZSA9IHRydWU7Ci0KLSAgICBSZWZQdHI8Q29ubmVjdGlvbj4gY29ubmVjdGlvbih0
aGlzKTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X3JlZ2lzdHJhdGlvbl9oYW5kbGVyKG1fc2Vu
ZFNvdXJjZSwgW2Nvbm5lY3Rpb25dIHsKLSAgICAgICAgaWYgKCFjb25uZWN0aW9uLT5tX3NlbmRT
b3VyY2UpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNvbm5lY3Rpb24tPm1faXNJbml0
aWFsaXppbmdTZW5kU291cmNlID0gZmFsc2U7Ci0gICAgICAgIGNvbm5lY3Rpb24tPnJlc3VtZVNl
bmRTb3VyY2UoKTsKLSAgICB9KTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRs
ZXIobV9zZW5kU291cmNlLCBbY29ubmVjdGlvbl0gewotICAgICAgICBpZiAoIWNvbm5lY3Rpb24t
Pm1fc2VuZFNvdXJjZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB1bnNpZ25lZCBs
b25nIGRhdGEgPSBkaXNwYXRjaF9zb3VyY2VfZ2V0X2RhdGEoY29ubmVjdGlvbi0+bV9zZW5kU291
cmNlKTsKLQotICAgICAgICBpZiAoZGF0YSAmIERJU1BBVENIX01BQ0hfU0VORF9ERUFEKSB7Ci0g
ICAgICAgICAgICBjb25uZWN0aW9uLT5jb25uZWN0aW9uRGlkQ2xvc2UoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkYXRhICYgRElTUEFUQ0hfTUFDSF9T
RU5EX1BPU1NJQkxFKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aHkgd2Ug
Z2V0IHNwdXJpb3VzIERJU1BBVENIX01BQ0hfU0VORF9QT1NTSUJMRSBldmVudHMuCi0gICAgICAg
ICAgICBjb25uZWN0aW9uLT5yZXN1bWVTZW5kU291cmNlKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIEFTU0VSVChNQUNIX1BPUlRfVkFMSUQobV9zZW5k
UG9ydCkpOwotICAgIG1hY2hfcG9ydF90IHNlbmRQb3J0ID0gbV9zZW5kUG9ydDsKLSAgICBkaXNw
YXRjaF9zb3VyY2Vfc2V0X2NhbmNlbF9oYW5kbGVyKG1fc2VuZFNvdXJjZSwgXnsKLSAgICAgICAg
Ly8gUmVsZWFzZSBvdXIgc2VuZCByaWdodC4KLSAgICAgICAgZGVhbGxvY2F0ZVNlbmRSaWdodFNh
ZmVseShzZW5kUG9ydCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cmVzdW1lU2Vu
ZFNvdXJjZSgpCi17Ci0gICAgQVNTRVJUKCFtX2lzSW5pdGlhbGl6aW5nU2VuZFNvdXJjZSk7Ci0g
ICAgaWYgKG1fcGVuZGluZ091dGdvaW5nTWFjaE1lc3NhZ2UpCi0gICAgICAgIHNlbmRNZXNzYWdl
KFdURk1vdmUobV9wZW5kaW5nT3V0Z29pbmdNYWNoTWVzc2FnZSkpOwotICAgIHNlbmRPdXRnb2lu
Z01lc3NhZ2VzKCk7Ci19Ci0KLXN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gY3JlYXRl
TWVzc2FnZURlY29kZXIobWFjaF9tc2dfaGVhZGVyX3QqIGhlYWRlcikKLXsKLSAgICBpZiAoISho
ZWFkZXItPm1zZ2hfYml0cyAmIE1BQ0hfTVNHSF9CSVRTX0NPTVBMRVgpKSB7Ci0gICAgICAgIC8v
IFdlIGhhdmUgYSBzaW1wbGUgbWVzc2FnZS4KLSAgICAgICAgdWludDhfdCogYm9keSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGhlYWRlciArIDEpOwotICAgICAgICBzaXplX3QgYm9keVNp
emUgPSBoZWFkZXItPm1zZ2hfc2l6ZSAtIHNpemVvZihtYWNoX21zZ19oZWFkZXJfdCk7Ci0KLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RGVjb2Rlcj4oYm9keSwgYm9keVNpemUsIG51
bGxwdHIsIFZlY3RvcjxBdHRhY2htZW50PiB7IH0pOwotICAgIH0KLQotICAgIGJvb2wgbWVzc2Fn
ZUJvZHlJc09PTCA9IGhlYWRlci0+bXNnaF9pZCA9PSBvdXRPZkxpbmVCb2R5TWVzc2FnZUlEOwot
Ci0gICAgbWFjaF9tc2dfYm9keV90KiBib2R5ID0gcmVpbnRlcnByZXRfY2FzdDxtYWNoX21zZ19i
b2R5X3QqPihoZWFkZXIgKyAxKTsKLSAgICBtYWNoX21zZ19zaXplX3QgbnVtRGVzY3JpcHRvcnMg
PSBib2R5LT5tc2doX2Rlc2NyaXB0b3JfY291bnQ7Ci0gICAgQVNTRVJUKG51bURlc2NyaXB0b3Jz
KTsKLQotICAgIHVpbnQ4X3QqIGRlc2NyaXB0b3JEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oYm9keSArIDEpOwotCi0gICAgLy8gSWYgdGhlIG1lc3NhZ2UgYm9keSB3YXMgc2VudCBv
dXQtb2YtbGluZSwgZG9uJ3QgdHJlYXQgdGhlIGxhc3QgZGVzY3JpcHRvcgotICAgIC8vIGFzIGFu
IGF0dGFjaG1lbnQsIHNpbmNlIGl0IGlzIHJlYWxseSB0aGUgbWVzc2FnZSBib2R5LgotICAgIGlm
IChtZXNzYWdlQm9keUlzT09MKQotICAgICAgICAtLW51bURlc2NyaXB0b3JzOwotCi0gICAgLy8g
QnVpbGQgYXR0YWNobWVudCBsaXN0Ci0gICAgVmVjdG9yPEF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRz
KG51bURlc2NyaXB0b3JzKTsKLQotICAgIGZvciAobWFjaF9tc2dfc2l6ZV90IGkgPSAwOyBpIDwg
bnVtRGVzY3JpcHRvcnM7ICsraSkgewotICAgICAgICBtYWNoX21zZ19kZXNjcmlwdG9yX3QqIGRl
c2NyaXB0b3IgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2Rlc2NyaXB0b3JfdCo+KGRlc2Ny
aXB0b3JEYXRhKTsKLSAgICAgICAgQVNTRVJUKGRlc2NyaXB0b3ItPnR5cGUudHlwZSA9PSBNQUNI
X01TR19QT1JUX0RFU0NSSVBUT1IpOwotICAgICAgICBpZiAoZGVzY3JpcHRvci0+dHlwZS50eXBl
ICE9IE1BQ0hfTVNHX1BPUlRfREVTQ1JJUFRPUikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgICAgIGF0dGFjaG1lbnRzW251bURlc2NyaXB0b3JzIC0gaSAtIDFdID0gQXR0YWNo
bWVudChkZXNjcmlwdG9yLT5wb3J0Lm5hbWUsIGRlc2NyaXB0b3ItPnBvcnQuZGlzcG9zaXRpb24p
OwotICAgICAgICBkZXNjcmlwdG9yRGF0YSArPSBzaXplb2YobWFjaF9tc2dfcG9ydF9kZXNjcmlw
dG9yX3QpOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdlQm9keUlzT09MKSB7Ci0gICAgICAgIG1h
Y2hfbXNnX2Rlc2NyaXB0b3JfdCogZGVzY3JpcHRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWFjaF9t
c2dfZGVzY3JpcHRvcl90Kj4oZGVzY3JpcHRvckRhdGEpOwotICAgICAgICBBU1NFUlQoZGVzY3Jp
cHRvci0+dHlwZS50eXBlID09IE1BQ0hfTVNHX09PTF9ERVNDUklQVE9SKTsKLSAgICAgICAgaWYg
KGRlc2NyaXB0b3ItPnR5cGUudHlwZSAhPSBNQUNIX01TR19PT0xfREVTQ1JJUFRPUikKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHVpbnQ4X3QqIG1lc3NhZ2VCb2R5ID0g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGRlc2NyaXB0b3ItPm91dF9vZl9saW5lLmFkZHJlc3MpOwot
ICAgICAgICBzaXplX3QgbWVzc2FnZUJvZHlTaXplID0gZGVzY3JpcHRvci0+b3V0X29mX2xpbmUu
c2l6ZTsKLQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxEZWNvZGVyPihtZXNzYWdl
Qm9keSwgbWVzc2FnZUJvZHlTaXplLCBbXShjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBs
ZW5ndGgpIHsKLSAgICAgICAgICAgIHZtX2RlYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgcmVp
bnRlcnByZXRfY2FzdDx2bV9hZGRyZXNzX3Q+KGJ1ZmZlciksIGxlbmd0aCk7Ci0gICAgICAgIH0s
IFdURk1vdmUoYXR0YWNobWVudHMpKTsKLSAgICB9Ci0KLSAgICB1aW50OF90KiBtZXNzYWdlQm9k
eSA9IGRlc2NyaXB0b3JEYXRhOwotICAgIHNpemVfdCBtZXNzYWdlQm9keVNpemUgPSBoZWFkZXIt
Pm1zZ2hfc2l6ZSAtIChkZXNjcmlwdG9yRGF0YSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGhlYWRlcikpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RGVjb2Rlcj4obWVzc2Fn
ZUJvZHksIG1lc3NhZ2VCb2R5U2l6ZSwgbnVsbHB0ciwgV1RGTW92ZShhdHRhY2htZW50cykpOwot
fQotCi0vLyBUaGUgcmVjZWl2ZSBidWZmZXIgc2l6ZSBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdGhl
IG1heGltdW0gdHJhaWxlciBzaXplLgotc3RhdGljIGNvbnN0IHNpemVfdCByZWNlaXZlQnVmZmVy
U2l6ZSA9IGlubGluZU1lc3NhZ2VNYXhTaXplICsgTUFYX1RSQUlMRVJfU0laRTsKLXR5cGVkZWYg
VmVjdG9yPGNoYXIsIHJlY2VpdmVCdWZmZXJTaXplPiBSZWNlaXZlQnVmZmVyOwotCi1zdGF0aWMg
bWFjaF9tc2dfaGVhZGVyX3QqIHJlYWRGcm9tTWFjaFBvcnQobWFjaF9wb3J0X3QgbWFjaFBvcnQs
IFJlY2VpdmVCdWZmZXImIGJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1h
Y2hQb3J0KSk7Ci0KLSAgICBidWZmZXIucmVzaXplKHJlY2VpdmVCdWZmZXJTaXplKTsKLQotICAg
IG1hY2hfbXNnX2hlYWRlcl90KiBoZWFkZXIgPSByZWludGVycHJldF9jYXN0PG1hY2hfbXNnX2hl
YWRlcl90Kj4oYnVmZmVyLmRhdGEoKSk7Ci0gICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfbXNn
KGhlYWRlciwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9SQ1ZfTEFSR0UgfCBNQUNIX1JDVl9USU1FT1VU
IHwgTUFDSF9SQ1ZfVk9VQ0hFUiwgMCwgYnVmZmVyLnNpemUoKSwgbWFjaFBvcnQsIDAsIE1BQ0hf
UE9SVF9OVUxMKTsKLSAgICBpZiAoa3IgPT0gTUFDSF9SQ1ZfVElNRURfT1VUKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChrciA9PSBNQUNIX1JDVl9UT09fTEFSR0UpIHsKLSAg
ICAgICAgLy8gVGhlIG1lc3NhZ2Ugd2FzIHRvbyBsYXJnZSwgcmVzaXplIHRoZSBidWZmZXIgYW5k
IHRyeSBhZ2Fpbi4KLSAgICAgICAgYnVmZmVyLnJlc2l6ZShoZWFkZXItPm1zZ2hfc2l6ZSArIE1B
WF9UUkFJTEVSX1NJWkUpOwotICAgICAgICBoZWFkZXIgPSByZWludGVycHJldF9jYXN0PG1hY2hf
bXNnX2hlYWRlcl90Kj4oYnVmZmVyLmRhdGEoKSk7Ci0gICAgICAgIAotICAgICAgICBrciA9IG1h
Y2hfbXNnKGhlYWRlciwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9SQ1ZfTEFSR0UgfCBNQUNIX1JDVl9U
SU1FT1VUIHwgTUFDSF9SQ1ZfVk9VQ0hFUiwgMCwgYnVmZmVyLnNpemUoKSwgbWFjaFBvcnQsIDAs
IE1BQ0hfUE9SVF9OVUxMKTsKLSAgICAgICAgQVNTRVJUKGtyICE9IE1BQ0hfUkNWX1RPT19MQVJH
RSk7Ci0gICAgfQotCi0gICAgaWYgKGtyICE9IE1BQ0hfTVNHX1NVQ0NFU1MpIHsKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi0gICAgICAgIFdlYktpdDo6c2V0Q3Jhc2hSZXBvcnRBcHBsaWNhdGlvblNw
ZWNpZmljSW5mb3JtYXRpb24oKF9fYnJpZGdlIENGU3RyaW5nUmVmKVtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiVW5oYW5kbGVkIGVycm9yIGNvZGUgJXggZnJvbSBtYWNoX21zZywgcmVjZWl2
ZSBwb3J0IGlzICV4Iiwga3IsIG1hY2hQb3J0XSk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVy
biBoZWFkZXI7Ci19Ci0KLXZvaWQgQ29ubmVjdGlvbjo6cmVjZWl2ZVNvdXJjZUV2ZW50SGFuZGxl
cigpCi17Ci0gICAgUmVjZWl2ZUJ1ZmZlciBidWZmZXI7Ci0KLSAgICBBU1NFUlQoTUFDSF9QT1JU
X1ZBTElEKG1fcmVjZWl2ZVBvcnQpKTsKLSAgICBtYWNoX21zZ19oZWFkZXJfdCogaGVhZGVyID0g
cmVhZEZyb21NYWNoUG9ydChtX3JlY2VpdmVQb3J0LCBidWZmZXIpOwotICAgIGlmICghaGVhZGVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKGhlYWRlci0+bXNnaF9pZCkgewotICAg
IGNhc2UgTUFDSF9OT1RJRllfTk9fU0VOREVSUzoKLSAgICAgICAgQVNTRVJUKG1faXNTZXJ2ZXIp
OwotICAgICAgICBpZiAoIW1fc2VuZFBvcnQpCi0gICAgICAgICAgICBjb25uZWN0aW9uRGlkQ2xv
c2UoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBpbmxpbmVCb2R5TWVzc2FnZUlEOgot
ICAgIGNhc2Ugb3V0T2ZMaW5lQm9keU1lc3NhZ2VJRDoKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIE1BQ0hfTk9USUZZX1NFTkRfT05DRToKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+IGRlY29kZXIgPSBjcmVhdGVN
ZXNzYWdlRGVjb2RlcihoZWFkZXIpOwotICAgIGlmICghZGVjb2RlcikKLSAgICAgICAgcmV0dXJu
OwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIGRlY29kZXItPnNldEltcG9ydGFuY2VBc3NlcnRp
b24oc3RkOjptYWtlX3VuaXF1ZTxJbXBvcnRhbmNlQXNzZXJ0aW9uPihoZWFkZXIpKTsKLSNlbmRp
ZgotCi0gICAgaWYgKGRlY29kZXItPm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSAiSVBDIiAmJiBk
ZWNvZGVyLT5tZXNzYWdlTmFtZSgpID09ICJJbml0aWFsaXplQ29ubmVjdGlvbiIpIHsKLSAgICAg
ICAgQVNTRVJUKG1faXNTZXJ2ZXIpOwotICAgICAgICBBU1NFUlQoIW1faXNDb25uZWN0ZWQpOwot
ICAgICAgICBBU1NFUlQoIW1fc2VuZFBvcnQpOwotCi0gICAgICAgIE1hY2hQb3J0IHBvcnQ7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBvcnQpKSB7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogRGlzY29ubmVjdC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IG1fc2VuZFBvcnQgPSBwb3J0LnBvcnQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX3NlbmRQ
b3J0KSB7Ci0gICAgICAgICAgICBBU1NFUlQoTUFDSF9QT1JUX1ZBTElEKG1fcmVjZWl2ZVBvcnQp
KTsKLSAgICAgICAgICAgIG1hY2hfcG9ydF90IHByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCA9IE1B
Q0hfUE9SVF9OVUxMOwotICAgICAgICAgICAgYXV0byBrciA9IG1hY2hfcG9ydF9yZXF1ZXN0X25v
dGlmaWNhdGlvbihtYWNoX3Rhc2tfc2VsZigpLCBtX3JlY2VpdmVQb3J0LCBNQUNIX05PVElGWV9O
T19TRU5ERVJTLCAwLCBNQUNIX1BPUlRfTlVMTCwgTUFDSF9NU0dfVFlQRV9NT1ZFX1NFTkRfT05D
RSwgJnByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCk7Ci0gICAgICAgICAgICBBU1NFUlQoa3IgPT0g
S0VSTl9TVUNDRVNTKTsKLSAgICAgICAgICAgIGlmIChrciAhPSBLRVJOX1NVQ0NFU1MpIHsKLSAg
ICAgICAgICAgICAgICAvLyBJZiBtYWNoX3BvcnRfcmVxdWVzdF9ub3RpZmljYXRpb24gZmFpbHMs
ICdwcmV2aW91c05vdGlmaWNhdGlvblBvcnQnIHdpbGwgYmUgdW5pbml0aWFsaXplZC4KLSAgICAg
ICAgICAgICAgICBMT0dfRVJST1IoIm1hY2hfcG9ydF9yZXF1ZXN0X25vdGlmaWNhdGlvbiBmYWls
ZWQ6ICgleCkgJXMiLCBrciwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpKTsKLSAgICAgICAgICAgICAg
ICBwcmV2aW91c05vdGlmaWNhdGlvblBvcnQgPSBNQUNIX1BPUlRfTlVMTDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHByZXZpb3VzTm90aWZpY2F0aW9uUG9ydCAhPSBNQUNIX1BP
UlRfTlVMTCkKLSAgICAgICAgICAgICAgICBkZWFsbG9jYXRlU2VuZFJpZ2h0U2FmZWx5KHByZXZp
b3VzTm90aWZpY2F0aW9uUG9ydCk7Ci0KLSAgICAgICAgICAgIGluaXRpYWxpemVTZW5kU291cmNl
KCk7Ci0gICAgICAgICAgICBkaXNwYXRjaF9yZXN1bWUobV9zZW5kU291cmNlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOwotCi0gICAgICAgIC8vIFNlbmQgYW55
IHBlbmRpbmcgb3V0Z29pbmcgbWVzc2FnZXMuCi0gICAgICAgIHNlbmRPdXRnb2luZ01lc3NhZ2Vz
KCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKGRlY29kZXItPm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSAiSVBD
IiAmJiBkZWNvZGVyLT5tZXNzYWdlTmFtZSgpID09ICJTZXRFeGNlcHRpb25Qb3J0IikgewotICAg
ICAgICBpZiAobV9pc1NlcnZlcikgewotICAgICAgICAgICAgLy8gU2VydmVyIGNvbm5lY3Rpb25z
IGFyZW4ndCBzdXBwb3NlZCB0byBoYXZlIHRoZWlyIGV4Y2VwdGlvbiBwb3J0cyBvdmVycmlkZGVu
LiBUcmVhdCB0aGlzIGFzIGFuIGludmFsaWQgbWVzc2FnZS4KLSAgICAgICAgICAgIFN0cmluZ1Jl
ZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lUmVmZXJlbmNlID0gZGVjb2Rlci0+bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpOwotICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2VSZWNlaXZlck5hbWUoU3Ry
aW5nKG1lc3NhZ2VSZWNlaXZlck5hbWVSZWZlcmVuY2UuZGF0YSgpLCBtZXNzYWdlUmVjZWl2ZXJO
YW1lUmVmZXJlbmNlLnNpemUoKSkpOwotICAgICAgICAgICAgU3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VOYW1lUmVmZXJlbmNlID0gZGVjb2Rlci0+bWVzc2FnZU5hbWUoKTsKLSAgICAgICAgICAgIFN0
cmluZyBtZXNzYWdlTmFtZShTdHJpbmcobWVzc2FnZU5hbWVSZWZlcmVuY2UuZGF0YSgpLCBtZXNz
YWdlTmFtZVJlZmVyZW5jZS5zaXplKCkpKTsKLQotICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIG1lc3NhZ2VSZWNlaXZl
ck5hbWUgPSBXVEZNb3ZlKG1lc3NhZ2VSZWNlaXZlck5hbWUpLCBtZXNzYWdlTmFtZSA9IFdURk1v
dmUobWVzc2FnZU5hbWUpXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPmRpc3BhdGNoRGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKG1lc3NhZ2VSZWNlaXZlck5hbWUu
dXRmOCgpLCBtZXNzYWdlTmFtZS51dGY4KCkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTWFjaFBvcnQgZXhjZXB0aW9uUG9ydDsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZXhjZXB0aW9uUG9ydCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgc2V0TWFjaEV4Y2VwdGlvblBvcnQoZXhjZXB0aW9uUG9ydC5wb3J0
KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBwcm9jZXNzSW5jb21p
bmdNZXNzYWdlKFdURk1vdmUoZGVjb2RlcikpOwotfSAgICAKLQotSVBDOjpDb25uZWN0aW9uOjpJ
ZGVudGlmaWVyIENvbm5lY3Rpb246OmlkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJldHVybiBJ
ZGVudGlmaWVyKG1faXNTZXJ2ZXIgPyBtX3JlY2VpdmVQb3J0IDogbV9zZW5kUG9ydCwgbV94cGND
b25uZWN0aW9uKTsKLX0KLQotT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4gQ29ubmVjdGlvbjo6Z2V0
QXVkaXRUb2tlbigpCi17Ci0gICAgaWYgKCFtX3hwY0Nvbm5lY3Rpb24pCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgCi0gICAgYXVkaXRfdG9rZW5fdCBhdWRpdFRva2VuOwotICAg
IHhwY19jb25uZWN0aW9uX2dldF9hdWRpdF90b2tlbihtX3hwY0Nvbm5lY3Rpb24uZ2V0KCksICZh
dWRpdFRva2VuKTsKLSAgICByZXR1cm4gV1RGTW92ZShhdWRpdFRva2VuKTsKLX0KLQotYm9vbCBD
b25uZWN0aW9uOjpraWxsKCkKLXsKLSAgICBpZiAobV94cGNDb25uZWN0aW9uKSB7Ci0gICAgICAg
IHhwY19jb25uZWN0aW9uX2tpbGwobV94cGNDb25uZWN0aW9uLmdldCgpLCBTSUdLSUxMKTsKLSAg
ICAgICAgbV93YXNLaWxsZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gICAgCi1zdGF0aWMgdm9pZCBBY2Nlc3NpYmlsaXR5UHJv
Y2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbihib29sIHN1c3BlbmRlZCkKLXsKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgX0FYVUlFbGVtZW50Tm90aWZ5UHJvY2Vzc1N1c3BlbmRTdGF0dXMoc3VzcGVu
ZGVkID8gQVhTdXNwZW5kU3RhdHVzU3VzcGVuZGVkIDogQVhTdXNwZW5kU3RhdHVzUnVubmluZyk7
Ci0jZWxpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFVJQWNjZXNzaWJpbGl0eVBvc3ROb3Rp
ZmljYXRpb24oa0FYUGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbiwgQHsgQCJwaWQiIDogQChn
ZXRwaWQoKSksIEAic3VzcGVuZGVkIiA6IEAoc3VzcGVuZGVkKSB9KTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHN1c3BlbmRlZCk7Ci0jZW5kaWYKLX0KLSAgICAKLXZvaWQgQ29ubmVjdGlvbjo6
d2lsbFNlbmRTeW5jTWVzc2FnZShPcHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0
aW9ucykKLXsKLSAgICBpZiAoc2VuZFN5bmNPcHRpb25zLmNvbnRhaW5zKElQQzo6U2VuZFN5bmNP
cHRpb246OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kKSAmJiBXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQotICAgICAgICBBY2Nlc3NpYmlsaXR5
UHJvY2Vzc1N1c3BlbmRlZE5vdGlmaWNhdGlvbih0cnVlKTsKLX0KLQotdm9pZCBDb25uZWN0aW9u
OjpkaWRSZWNlaXZlU3luY1JlcGx5KE9wdGlvblNldDxTZW5kU3luY09wdGlvbj4gc2VuZFN5bmNP
cHRpb25zKQotewotICAgIGlmIChzZW5kU3luY09wdGlvbnMuY29udGFpbnMoSVBDOjpTZW5kU3lu
Y09wdGlvbjo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQpICYmIFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCi0gICAgICAgIEFjY2Vzc2liaWxp
dHlQcm9jZXNzU3VzcGVuZGVkTm90aWZpY2F0aW9uKGZhbHNlKTsKLX0KLQotcGlkX3QgQ29ubmVj
dGlvbjo6cmVtb3RlUHJvY2Vzc0lEKCkgY29uc3QKLXsKLSAgICBpZiAoIW1feHBjQ29ubmVjdGlv
bikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4geHBjX2Nvbm5lY3Rpb25fZ2V0X3Bp
ZChtX3hwY0Nvbm5lY3Rpb24uZ2V0KCkpOwotfQotICAgIAotfSAvLyBuYW1lc3BhY2UgSVBDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvSW1wb3J0YW5jZUFzc2Vy
dGlvbi5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL0ltcG9ydGFuY2VBc3NlcnRp
b24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY5MGIwNDM0MTgyYmQwODUxZWE5
NDY0ODMwZTgyNjYyYjY4YjE0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvSW1wb3J0YW5jZUFzc2Vy
dGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgSW1wb3J0YW5jZUFzc2VydGlvbl9oCi0jZGVmaW5lIEltcG9ydGFuY2VBc3NlcnRpb25faAot
Ci0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW5jbHVkZSA8bWFjaC9tZXNzYWdlLmg+Ci0KLW5hbWVz
cGFjZSBJUEMgewotCi1jbGFzcyBJbXBvcnRhbmNlQXNzZXJ0aW9uIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbXBvcnRhbmNlQXNzZXJ0
aW9uKTsKLQotcHVibGljOgotICAgIGV4cGxpY2l0IEltcG9ydGFuY2VBc3NlcnRpb24obWFjaF9t
c2dfaGVhZGVyX3QqIGhlYWRlcikKLSAgICAgICAgOiBtX3ZvdWNoZXIoMCkKLSAgICB7Ci0gICAg
ICAgIGlmIChNQUNIX01TR0hfQklUU19IQVNfVk9VQ0hFUihoZWFkZXItPm1zZ2hfYml0cykpIHsK
LSAgICAgICAgICAgIG1fdm91Y2hlciA9IGhlYWRlci0+bXNnaF92b3VjaGVyX3BvcnQ7Ci0gICAg
ICAgICAgICBoZWFkZXItPm1zZ2hfdm91Y2hlcl9wb3J0ID0gTUFDSF9WT1VDSEVSX05VTEw7Ci0g
ICAgICAgICAgICBoZWFkZXItPm1zZ2hfYml0cyAmPSB+KE1BQ0hfTVNHSF9CSVRTX1ZPVUNIRVJf
TUFTSyB8IE1BQ0hfTVNHSF9CSVRTX1JBSVNFSU1QKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IH5JbXBvcnRhbmNlQXNzZXJ0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3ZvdWNoZXIpIHsK
LSAgICAgICAgICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBtYWNoX3ZvdWNoZXJfZGVhbGxvY2F0ZSht
X3ZvdWNoZXIpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChrciwgIWtyKTsKLSAgICAgICAg
fQotICAgIH0KLQotcHJpdmF0ZToKLSAgICBtYWNoX3ZvdWNoZXJfdCBtX3ZvdWNoZXI7Ci19Owot
Ci19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KLSNlbmRpZiAvLyBJbXBvcnRhbmNlQXNz
ZXJ0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9NYWNo
TWVzc2FnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFjaE1lc3NhZ2Uu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzg0Yzk2YTEzOWFmODA1ZjEzZjA3
YWM3Y2JlMDI0YjBmNTNkYTIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9NYWNoTWVzc2FnZS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIk1hY2hNZXNzYWdlLmgiCi0KLSNpZiBQTEFURk9STShDT0NPQSkK
LQotI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgotCi1uYW1lc3BhY2UgSVBDIHsKLQotc3RkOjp1bmlx
dWVfcHRyPE1hY2hNZXNzYWdlPiBNYWNoTWVzc2FnZTo6Y3JlYXRlKENTdHJpbmcmJiBtZXNzYWdl
UmVjZWl2ZXJOYW1lLCBDU3RyaW5nJiYgbWVzc2FnZU5hbWUsIHNpemVfdCBzaXplKQotewotICAg
IHZvaWQqIG1lbW9yeSA9IFdURjo6ZmFzdFplcm9lZE1hbGxvYyhzaXplb2YoTWFjaE1lc3NhZ2Up
ICsgc2l6ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxNYWNoTWVzc2FnZT4geyBuZXcg
KE5vdE51bGwsIG1lbW9yeSkgTWFjaE1lc3NhZ2UgeyBXVEZNb3ZlKG1lc3NhZ2VSZWNlaXZlck5h
bWUpLCBXVEZNb3ZlKG1lc3NhZ2VOYW1lKSwgc2l6ZSB9IH07Ci19Ci0KLU1hY2hNZXNzYWdlOjpN
YWNoTWVzc2FnZShDU3RyaW5nJiYgbWVzc2FnZVJlY2VpdmVyTmFtZSwgQ1N0cmluZyYmIG1lc3Nh
Z2VOYW1lLCBzaXplX3Qgc2l6ZSkKLSAgICA6IG1fbWVzc2FnZVJlY2VpdmVyTmFtZShXVEZNb3Zl
KG1lc3NhZ2VSZWNlaXZlck5hbWUpKQotICAgICwgbV9tZXNzYWdlTmFtZShXVEZNb3ZlKG1lc3Nh
Z2VOYW1lKSkKLSAgICAsIG1fc2l6ZSB7IHNpemUgfQotewotfQotCi1NYWNoTWVzc2FnZTo6fk1h
Y2hNZXNzYWdlKCkKLXsKLSAgICBpZiAobV9zaG91bGRGcmVlRGVzY3JpcHRvcnMpCi0gICAgICAg
IDo6bWFjaF9tc2dfZGVzdHJveShoZWFkZXIoKSk7Ci19Ci0KLXNpemVfdCBNYWNoTWVzc2FnZTo6
bWVzc2FnZVNpemUoc2l6ZV90IGJvZHlTaXplLCBzaXplX3QgcG9ydERlc2NyaXB0b3JDb3VudCwg
c2l6ZV90IG1lbW9yeURlc2NyaXB0b3JDb3VudCkKLXsKLSAgICBzaXplX3QgbWVzc2FnZVNpemUg
PSBzaXplb2YobWFjaF9tc2dfaGVhZGVyX3QpICsgYm9keVNpemU7Ci0KLSAgICBpZiAocG9ydERl
c2NyaXB0b3JDb3VudCB8fCBtZW1vcnlEZXNjcmlwdG9yQ291bnQpIHsKLSAgICAgICAgbWVzc2Fn
ZVNpemUgKz0gc2l6ZW9mKG1hY2hfbXNnX2JvZHlfdCk7Ci0gICAgICAgIG1lc3NhZ2VTaXplICs9
IChwb3J0RGVzY3JpcHRvckNvdW50ICogc2l6ZW9mKG1hY2hfbXNnX3BvcnRfZGVzY3JpcHRvcl90
KSk7Ci0gICAgICAgIG1lc3NhZ2VTaXplICs9IChtZW1vcnlEZXNjcmlwdG9yQ291bnQgKiBzaXpl
b2YobWFjaF9tc2dfb29sX2Rlc2NyaXB0b3JfdCkpOwotICAgIH0KLQotICAgIHJldHVybiByb3Vu
ZF9tc2cobWVzc2FnZVNpemUpOwotfQotCi12b2lkIE1hY2hNZXNzYWdlOjpsZWFrRGVzY3JpcHRv
cnMoKQotewotICAgIG1fc2hvdWxkRnJlZURlc2NyaXB0b3JzID0gZmFsc2U7Ci19Ci0KLX0KLQot
I2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvbWFjL01hY2hNZXNzYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9t
YWMvTWFjaE1lc3NhZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAxMzFjN2Yw
ZDNlZmEzOGFmNDA1NGUyNzZkNGZjMjg2YzkzNDQyYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9tYWMvTWFj
aE1lc3NhZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotCi0jaW5jbHVkZSA8bWFjaC9tZXNz
YWdlLmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIElQQyB7Ci0KLWNsYXNzIE1hY2hNZXNzYWdlIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPE1hY2hN
ZXNzYWdlPiBjcmVhdGUoQ1N0cmluZyYmIG1lc3NhZ2VSZWNlaXZlck5hbWUsIENTdHJpbmcmJiBt
ZXNzYWdlTmFtZSwgc2l6ZV90KTsKLSAgICB+TWFjaE1lc3NhZ2UoKTsKLQotICAgIHN0YXRpYyBz
aXplX3QgbWVzc2FnZVNpemUoc2l6ZV90IGJvZHlTaXplLCBzaXplX3QgcG9ydERlc2NyaXB0b3JD
b3VudCwgc2l6ZV90IG1lbW9yeURlc2NyaXB0b3JDb3VudCk7Ci0KLSAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIG1hY2hfbXNnX2hlYWRlcl90KiBoZWFkZXIo
KSB7IHJldHVybiBtX21lc3NhZ2VIZWFkZXI7IH0KLQotICAgIHZvaWQgbGVha0Rlc2NyaXB0b3Jz
KCk7Ci0KLSAgICBjb25zdCBDU3RyaW5nJiBtZXNzYWdlUmVjZWl2ZXJOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJOYW1lOyB9Ci0gICAgY29uc3QgQ1N0cmluZyYgbWVzc2Fn
ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX21lc3NhZ2VOYW1lOyB9Ci0KLXByaXZhdGU6Ci0gICAg
TWFjaE1lc3NhZ2UoQ1N0cmluZyYmIG1lc3NhZ2VSZWNlaXZlck5hbWUsIENTdHJpbmcmJiBtZXNz
YWdlTmFtZSwgc2l6ZV90KTsKLQotICAgIENTdHJpbmcgbV9tZXNzYWdlUmVjZWl2ZXJOYW1lOwot
ICAgIENTdHJpbmcgbV9tZXNzYWdlTmFtZTsKLSAgICBzaXplX3QgbV9zaXplOwotICAgIGJvb2wg
bV9zaG91bGRGcmVlRGVzY3JpcHRvcnMgeyB0cnVlIH07Ci0gICAgbWFjaF9tc2dfaGVhZGVyX3Qg
bV9tZXNzYWdlSGVhZGVyW107Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL21hYy9NYWNoUG9ydC5oIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hQb3J0LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDkxNDRhMDUyZWEwY2Y0MjllODA3MzY2MTU4ZDRkMTgyMzcyNDFlMmIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvbWFjL01hY2hQb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBNYWNoUG9ydF9oCi0jZGVmaW5lIE1hY2hQb3J0
X2gKLQotI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKLSNpbmNsdWRlICJEZWNvZGVyLmgiCi0jaW5j
bHVkZSAiRW5jb2Rlci5oIgotCi1uYW1lc3BhY2UgSVBDIHsKLQotY2xhc3MgTWFjaFBvcnQgewot
cHVibGljOgotICAgIE1hY2hQb3J0KCkKLSAgICAgICAgOiBtX3BvcnQoTUFDSF9QT1JUX05VTEwp
Ci0gICAgICAgICwgbV9kaXNwb3NpdGlvbigwKQotICAgIHsKLSAgICB9Ci0KLSAgICBNYWNoUG9y
dChtYWNoX3BvcnRfbmFtZV90IHBvcnQsIG1hY2hfbXNnX3R5cGVfbmFtZV90IGRpc3Bvc2l0aW9u
KQotICAgICAgICA6IG1fcG9ydChwb3J0KQotICAgICAgICAsIG1fZGlzcG9zaXRpb24oZGlzcG9z
aXRpb24pCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIp
IGNvbnN0Ci0gICAgewotICAgICAgICBlbmNvZGVyIDw8IEF0dGFjaG1lbnQobV9wb3J0LCBtX2Rp
c3Bvc2l0aW9uKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgTWFjaFBvcnQmIHApCi0gICAgewotICAgICAgICBBdHRhY2htZW50IGF0dGFjaG1lbnQ7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYXR0YWNobWVudCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBwLm1fcG9ydCA9IGF0dGFjaG1lbnQucG9y
dCgpOwotICAgICAgICBwLm1fZGlzcG9zaXRpb24gPSBhdHRhY2htZW50LmRpc3Bvc2l0aW9uKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIG1hY2hfcG9ydF9uYW1lX3QgcG9y
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9ydDsgfQotICAgIG1hY2hfbXNnX3R5cGVfbmFtZV90IGRp
c3Bvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NpdGlvbjsgfQotCi1wcml2YXRlOgot
ICAgIG1hY2hfcG9ydF9uYW1lX3QgbV9wb3J0OwotICAgIG1hY2hfbXNnX3R5cGVfbmFtZV90IG1f
ZGlzcG9zaXRpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBJUEMKLQotI2VuZGlmIC8vIE1hY2hQ
b3J0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDQ0MDg0YTYyZWEyMTc3Mjc1ZjYwM2Iz
MTNmMGYxNDQ0NGZkYzQxZTcuLmQxNmMxMjEyZjdmNjM4NzI2OTc5MjBlYWU4N2ViZDQxYjQ1Yzk5
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291
cmNlL1dlYktpdC9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtNDIsOCArNDIsOCBAQCBsaXN0KEFQUEVO
RCBXZWJLaXRfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01h
Yy5tbQogICAgIE5ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQog
Ci0gICAgUGxhdGZvcm0vSVBDL21hYy9Db25uZWN0aW9uTWFjLm1tCi0gICAgUGxhdGZvcm0vSVBD
L21hYy9NYWNoTWVzc2FnZS5jcHAKKyAgICBQbGF0Zm9ybS9JUEMvY29jb2EvQ29ubmVjdGlvbkNv
Y29hLm1tCisgICAgUGxhdGZvcm0vSVBDL2NvY29hL01hY2hNZXNzYWdlLmNwcAogCiAgICAgUGxh
dGZvcm0vY2YvTW9kdWxlQ0YuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCBlZDRiMGYw
ZmI2YzIwODAyNjUwODgyY2JiODQxYzc1ZjlmOWU5ZmUwLi5kM2FjOTdjMTE1OTdjZDJjY2FkNTRh
YWM3YTI3YTQ1NTQ3NDEyMDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2Nv
YS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC03NCw4ICs3NCw4
IEBAIFBsYXRmb3JtL2ZvdW5kYXRpb24vTG9nZ2luZ0ZvdW5kYXRpb24ubW0KIFBsYXRmb3JtL2lv
cy9BY2Nlc3NpYmlsaXR5SU9TLm1tCiBQbGF0Zm9ybS9pb3MvUGF5bWVudEF1dGhvcml6YXRpb25D
b250cm9sbGVyLm1tCiAKLVBsYXRmb3JtL0lQQy9tYWMvQ29ubmVjdGlvbk1hYy5tbQotUGxhdGZv
cm0vSVBDL21hYy9NYWNoTWVzc2FnZS5jcHAKK1BsYXRmb3JtL0lQQy9jb2NvYS9Db25uZWN0aW9u
Q29jb2EubW0KK1BsYXRmb3JtL0lQQy9jb2NvYS9NYWNoTWVzc2FnZS5jcHAKIAogUGxhdGZvcm0v
bWFjL0xheWVySG9zdGluZ0NvbnRleHQubW0KIFBsYXRmb3JtL21hYy9NYWNoVXRpbGl0aWVzLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMzc4NzliNTRhYzYzMDFjNDg1ZTIwZDRkZTRlZWZmNThmM2E2MDlhNC4uMzJjNjgyMGY4MGNh
OTUzM2U4ZGFiN2IxZjc2N2NiN2VmMzhmYWMxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDYzLDcgKzIwNjMsNyBAQAogCQkxQTJE
OTU2RDEyODQ4NTY0MDAxRUI5NjIgLyogQXV4aWxpYXJ5UHJvY2Vzcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBdXhpbGlhcnlQcm9jZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBMkQ5NTZFMTI4NDg1NjQwMDFFQjk2MiAvKiBBdXhpbGlhcnlQcm9jZXNz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1eGlsaWFyeVByb2Nl
c3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTMwMDY2QzExMTBGNEY3MDAz
MTkzN0MgLyogUmVzcG9uc2l2ZW5lc3NUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZXNwb25zaXZlbmVzc1RpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTFBMzBFQUM1MTE1RDdEQTMwMDUzRTkzNyAvKiBDb25uZWN0aW9uTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29ubmVjdGlvbk1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUEzMEVBQzUxMTVEN0RBMzAwNTNFOTM3IC8qIENvbm5l
Y3Rpb25Db2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENv
bm5lY3Rpb25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUEzMzRERUEx
NkRFOEI2ODAwNkE4RTM4IC8qIFN0b3JhZ2VBcmVhTWFwLm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0b3Jh
Z2VBcmVhTWFwLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTMz
NERFQjE2REU4Rjg4MDA2QThFMzggLyogU3RvcmFnZUFyZWFNYXBNZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RvcmFnZUFyZWFNYXBNZXNz
YWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9TdG9yYWdlQXJl
YU1hcE1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTFBMzM0REVDMTZERThGODgwMDZBOEUzOCAvKiBTdG9yYWdlQXJlYU1hcE1lc3NhZ2Vz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0b3JhZ2VBcmVhTWFwTWVzc2Fn
ZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvU3RvcmFnZUFyZWFNYXBNZXNzYWdl
cy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNTQ5MCw3ICs1NDkw
LDcgQEAKIAkJMUFFMDBENjgxODMyN0MxMjAwMDg3REQ3IC8qIElQQyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkNDNTZGNzUxMTU5OTU1RTAwMUNDQUY5
IC8qIG1hYyAqLywKKwkJCQlCQ0M1NkY3NTExNTk5NTVFMDAxQ0NBRjkgLyogY29jb2EgKi8sCiAJ
CQkJMUFFRkQyNzgxMUQxNkM4MTAwODIxOUQzIC8qIEFyZ3VtZW50Q29kZXIuaCAqLywKIAkJCQkx
QTNENjEwNDEzQTdGMDNBMDBGOTVENEUgLyogQXJndW1lbnRDb2RlcnMuY3BwICovLAogCQkJCTFB
RUZEMkY2MTFEMTgwN0IwMDgyMTlEMyAvKiBBcmd1bWVudENvZGVycy5oICovLApAQCAtODMzMiwx
NiArODMzMiwxNiBAQAogCQkJcGF0aCA9IFdlYkNvbnRlbnRTZXJ2aWNlOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkNDNTZGNzUxMTU5OTU1RTAwMUNDQUY5IC8qIG1hYyAq
LyA9IHsKKwkJQkNDNTZGNzUxMTU5OTU1RTAwMUNDQUY5IC8qIGNvY29hICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkxQTMwRUFDNTExNUQ3REEzMDA1M0U5
MzcgLyogQ29ubmVjdGlvbk1hYy5tbSAqLywKKwkJCQkxQTMwRUFDNTExNUQ3REEzMDA1M0U5Mzcg
LyogQ29ubmVjdGlvbkNvY29hLm1tICovLAogCQkJCTFBMUVDNjlEMTg3MjA5MjEwMEI5NTFGMCAv
KiBJbXBvcnRhbmNlQXNzZXJ0aW9uLmggKi8sCiAJCQkJMUE2RDg2QkYxREY3NTI2NTAwNzc0NUU4
IC8qIE1hY2hNZXNzYWdlLmNwcCAqLywKIAkJCQkxQTZEODZDMDFERjc1MjY1MDA3NzQ1RTggLyog
TWFjaE1lc3NhZ2UuaCAqLywKIAkJCQlCQ0M1NkY3NzExNTk5NTdEMDAxQ0NBRjkgLyogTWFjaFBv
cnQuaCAqLywKIAkJCSk7Ci0JCQlwYXRoID0gbWFjOworCQkJcGF0aCA9IGNvY29hOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKIAkJQkNDRjA4NUMxMTNGM0I3NTAwQzY1MEM1IC8q
IG1hYyAqLyA9IHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>