[Stk] WAV reading

Gary Scavone gary@ccrma.Stanford.EDU
Fri, 28 Mar 2003 09:41:25 -0800 (PST)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--1084984517-400078837-1048873231=:12874
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.LNX.4.44.0303280940481.12874@ccrma-gate.stanford.edu>


I forgot that there was a bug fix (not yet released) for 8-bit WAV
files in the WvIn and WvOut classes.  The WAV standard is
inconsistent, in that most formats use signed integers, but 8-bit data 
is unsigned.  So, if your files were recorded in 8-bit, try using the 
attached updates.

--gary

On Fri, 28 Mar 2003, Gary Scavone wrote:

>>
>>In almost all cases, this is caused by omission of the preprocessor 
>>definition __LITTLE_ENDIAN__.
>>
>>--gary
>>
>>On Fri, 28 Mar 2003 wborkowsk@poczta.onet.pl wrote:
>>
>>>>Hi,
>>>>I would like to use STK in my research, but I
>>>>can't force it to read a majority of my WAV 
>>>>files (by play example)
>>>>Expecially my own, which were recorded by 
>>>>Windows Sound Recorder.
>>>>I took a look into the archive of the list and
>>>>found that problem was mentioned, but is it
>>>>solved?
>>>>I attached the zip file including 4 files -
>>>>only sound002.wav work OK. For rest there 
>>>>are a reading error.
>>>>
>>>>Sincerelly
>>>>Wojciech Borkowski
>>>>=====================================
>>>>http://www.iss.uw.edu.pl/~borkowsk
>>>>=====================================

--1084984517-400078837-1048873231=:12874
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="WvOut.cpp"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.44.0303280940310.12874@ccrma-gate.stanford.edu>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="WvOut.cpp"

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8NCi8qISBcY2xhc3MgV3ZPdXQNCiAgICBcYnJpZWYgU1RLIGF1
ZGlvIGRhdGEgb3V0cHV0IGJhc2UgY2xhc3MuDQoNCiAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIG91dHB1dCBzdXBwb3J0IGZvciB2YXJpb3VzDQogICAgYXVk
aW8gZmlsZSBmb3JtYXRzLiAgSXQgYWxzbyBzZXJ2ZXMgYXMgYSBiYXNlDQog
ICAgY2xhc3MgZm9yICJyZWFsdGltZSIgc3RyZWFtaW5nIHN1YmNsYXNzZXMu
DQoNCiAgICBXdk91dCB3cml0ZXMgc2FtcGxlcyB0byBhbiBhdWRpbyBmaWxl
LiAgSXQNCiAgICBzdXBwb3J0cyBtdWx0aS1jaGFubmVsIGRhdGEgaW4gaW50
ZXJsZWF2ZWQNCiAgICBmb3JtYXQuICBJdCBpcyBpbXBvcnRhbnQgdG8gZGlz
dGluZ3Vpc2ggdGhlDQogICAgdGljaygpIG1ldGhvZHMsIHdoaWNoIG91dHB1
dCBzaW5nbGUgc2FtcGxlcw0KICAgIHRvIGFsbCBjaGFubmVscyBpbiBhIHNh
bXBsZSBmcmFtZSwgZnJvbSB0aGUNCiAgICB0aWNrRnJhbWUoKSBtZXRob2Qs
IHdoaWNoIHRha2VzIGEgcG9pbnRlcg0KICAgIHRvIG11bHRpLWNoYW5uZWwg
c2FtcGxlIGZyYW1lIGRhdGEuDQoNCiAgICBXdk91dCBjdXJyZW50bHkgc3Vw
cG9ydHMgV0FWLCBBSUZGLCBBSUZDLCBTTkQNCiAgICAoQVUpLCBNQVQtZmls
ZSAoTWF0bGFiKSwgYW5kIFNUSyBSQVcgZmlsZQ0KICAgIGZvcm1hdHMuICBT
aWduZWQgaW50ZWdlciAoOC0sIDE2LSwgYW5kIDMyLWJpdCkNCiAgICBhbmQg
ZmxvYXRpbmctIHBvaW50ICgzMi0gYW5kIDY0LWJpdCkgZGF0YSB0eXBlcw0K
ICAgIGFyZSBzdXBwb3J0ZWQuICBTVEsgUkFXIGZpbGVzIHVzZSAxNi1iaXQN
CiAgICBpbnRlZ2VycyBieSBkZWZpbml0aW9uLiAgTUFULWZpbGVzIHdpbGwg
YWx3YXlzDQogICAgYmUgd3JpdHRlbiBhcyA2NC1iaXQgZmxvYXRzLiAgSWYg
YSBkYXRhIHR5cGUNCiAgICBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IG1hdGNo
IHRoZSBzcGVjaWZpZWQgZmlsZQ0KICAgIHR5cGUsIHRoZSBkYXRhIHR5cGUg
d2lsbCBhdXRvbWF0aWNhbGx5IGJlDQogICAgbW9kaWZpZWQuICBVbmNvbXBy
ZXNzZWQgZGF0YSB0eXBlcyBhcmUgbm90DQogICAgc3VwcG9ydGVkLg0KDQog
ICAgQ3VycmVudGx5LCBXdk91dCBpcyBub24taW50ZXJwb2xhdGluZyBhbmQg
dGhlDQogICAgb3V0cHV0IHJhdGUgaXMgYWx3YXlzIFN0azo6c2FtcGxlUmF0
ZSgpLg0KDQogICAgYnkgUGVycnkgUi4gQ29vayBhbmQgR2FyeSBQLiBTY2F2
b25lLCAxOTk1IC0gMjAwMi4NCiovDQovKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQojaW5jbHVkZSAi
V3ZPdXQuaCINCiNpbmNsdWRlICJzdHJpbmcuaCINCiNpbmNsdWRlICJtYXRo
LmgiDQoNCmNvbnN0IFd2T3V0OjpGSUxFX1RZUEUgV3ZPdXQgOjogV1ZPVVRf
UkFXID0gMTsNCmNvbnN0IFd2T3V0OjpGSUxFX1RZUEUgV3ZPdXQgOjogV1ZP
VVRfV0FWID0gMjsNCmNvbnN0IFd2T3V0OjpGSUxFX1RZUEUgV3ZPdXQgOjog
V1ZPVVRfU05EID0gMzsNCmNvbnN0IFd2T3V0OjpGSUxFX1RZUEUgV3ZPdXQg
OjogV1ZPVVRfQUlGID0gNDsNCmNvbnN0IFd2T3V0OjpGSUxFX1RZUEUgV3ZP
dXQgOjogV1ZPVVRfTUFUID0gNTsNCg0KLy8gV0FWIGhlYWRlciBzdHJ1Y3R1
cmUuIFNlZSBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMyMzYxLnR4
dA0KLy8gZm9yIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBmb3JtYXQgY29kZXMu
DQpzdHJ1Y3Qgd2F2aGRyIHsNCiAgY2hhciByaWZmWzRdOyAgICAgICAgICAg
Ly8gIlJJRkYiDQogIFNJTlQzMiBmaWxlX3NpemU7ICAgICAgLy8gaW4gYnl0
ZXMNCiAgY2hhciB3YXZlWzRdOyAgICAgICAgICAgLy8gIldBVkUiDQogIGNo
YXIgZm10WzRdOyAgICAgICAgICAgIC8vICJmbXQgIg0KICBTSU5UMzIgY2h1
bmtfc2l6ZTsgICAgIC8vIGluIGJ5dGVzICgxNiBmb3IgUENNKQ0KICBTSU5U
MTYgZm9ybWF0X3RhZzsgICAgIC8vIDE9UENNLCAyPUFEUENNLCAzPUlFRUUg
ZmxvYXQsIDY9QS1MYXcsIDc9TXUtTGF3DQogIFNJTlQxNiBudW1fY2hhbnM7
ICAgICAgLy8gMT1tb25vLCAyPXN0ZXJlbw0KICBTSU5UMzIgc2FtcGxlX3Jh
dGU7DQogIFNJTlQzMiBieXRlc19wZXJfc2VjOw0KICBTSU5UMTYgYnl0ZXNf
cGVyX3NhbXA7IC8vIDI9MTYtYml0IG1vbm8sIDQ9MTYtYml0IHN0ZXJlbw0K
ICBTSU5UMTYgYml0c19wZXJfc2FtcDsNCiAgY2hhciBkYXRhWzRdOyAgICAg
ICAgICAgLy8gImRhdGEiDQogIFNJTlQzMiBkYXRhX2xlbmd0aDsgICAgLy8g
aW4gYnl0ZXMNCn07DQoNCi8vIFNORCAoQVUpIGhlYWRlciBzdHJ1Y3R1cmUg
KE5lWFQgYW5kIFN1bikuDQpzdHJ1Y3Qgc25kaGRyIHsNCiAgY2hhciBwcmVm
WzRdOw0KICBTSU5UMzIgaGRyX2xlbmd0aDsNCiAgU0lOVDMyIGRhdGFfbGVu
Z3RoOw0KICBTSU5UMzIgZm9ybWF0Ow0KICBTSU5UMzIgc2FtcGxlX3JhdGU7
DQogIFNJTlQzMiBudW1fY2hhbm5lbHM7DQogIGNoYXIgY29tbWVudFsxNl07
DQp9Ow0KDQovLyBBSUZGL0FJRkMgaGVhZGVyIHN0cnVjdHVyZSAuLi4gb25s
eSB0aGUgcGFydCBjb21tb24gdG8gYm90aA0KLy8gZm9ybWF0cy4NCnN0cnVj
dCBhaWZoZHIgew0KICBjaGFyIGZvcm1bNF07ICAgICAgICAgICAgICAgLy8g
IkZPUk0iDQogIFNJTlQzMiBmb3JtX3NpemU7ICAgICAgICAgIC8vIGluIGJ5
dGVzDQogIGNoYXIgYWlmZls0XTsgICAgICAgICAgICAgICAvLyAiQUlGRiIg
b3IgIkFJRkMiDQogIGNoYXIgY29tbVs0XTsgICAgICAgICAgICAgICAvLyAi
Q09NTSINCiAgU0lOVDMyIGNvbW1fc2l6ZTsgICAgICAgICAgLy8gIkNPTU0i
IGNodW5rIHNpemUgKDE4IGZvciBBSUZGLCAyNCBmb3IgQUlGQykNCiAgU0lO
VDE2IG51bV9jaGFuczsgICAgICAgICAgLy8gbnVtYmVyIG9mIGNoYW5uZWxz
DQogIHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ZyYW1lczsgLy8gc2FtcGxlIGZy
YW1lcyBvZiBhdWRpbyBkYXRhDQogIFNJTlQxNiBzYW1wbGVfc2l6ZTsgICAg
ICAgIC8vIGluIGJpdHMNCiAgdW5zaWduZWQgY2hhciBzcmF0ZVsxMF07ICAg
ICAgLy8gSUVFRSA3NTQgZmxvYXRpbmcgcG9pbnQgZm9ybWF0DQp9Ow0KDQpz
dHJ1Y3QgYWlmc3NuZCB7DQogIGNoYXIgc3NuZFs0XTsgICAgICAgICAgICAg
ICAvLyAiU1NORCINCiAgU0lOVDMyIHNzbmRfc2l6ZTsgICAgICAgICAgLy8g
IlNTTkQiIGNodW5rIHNpemUNCiAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7ICAg
ICAgICAgLy8gZGF0YSBvZmZzZXQgaW4gZGF0YSBibG9jayAoc2hvdWxkIGJl
IDApDQogIHVuc2lnbmVkIGxvbmcgYmxvY2tfc2l6ZTsgICAgIC8vIG5vdCB1
c2VkIGJ5IFNUSyAoc2hvdWxkIGJlIDApDQp9Ow0KDQovLyBNQVQtZmlsZSA1
IGhlYWRlciBzdHJ1Y3R1cmUuDQpzdHJ1Y3QgbWF0aGRyIHsNCiAgY2hhciBo
ZWFkaW5nWzEyNF07ICAgLy8gSGVhZGVyIHRleHQgZmllbGQNCiAgU0lOVDE2
IGhmZlsyXTsgICAgICAvLyBIZWFkZXIgZmxhZyBmaWVsZHMNCiAgU0lOVDMy
IGFkZlsxMV07ICAgICAvLyBBcnJheSBkYXRhIGZvcm1hdCBmaWVsZHMNCiAg
Ly8gVGhlcmUncyBtb3JlLCBidXQgaXQncyBvZiB2YXJpYWJsZSBsZW5ndGgN
Cn07DQoNCld2T3V0IDo6IFd2T3V0KCkNCnsNCiAgaW5pdCgpOw0KfQ0KDQpX
dk91dDo6V3ZPdXQoIGNvbnN0IGNoYXIgKmZpbGVOYW1lLCB1bnNpZ25lZCBp
bnQgbkNoYW5uZWxzLCBGSUxFX1RZUEUgdHlwZSwgU3RrOjpTVEtfRk9STUFU
IGZvcm1hdCApDQp7DQogIGluaXQoKTsNCiAgb3BlbkZpbGUoIGZpbGVOYW1l
LCBuQ2hhbm5lbHMsIHR5cGUsIGZvcm1hdCApOw0KfQ0KDQpXdk91dCA6OiB+
V3ZPdXQoKQ0Kew0KICBjbG9zZUZpbGUoKTsNCg0KICBpZiAoZGF0YSkNCiAg
ICBkZWxldGUgW10gZGF0YTsNCn0NCg0Kdm9pZCBXdk91dCA6OiBpbml0KCkN
CnsNCiAgZmQgPSAwOw0KICBkYXRhID0gMDsNCiAgZmlsZVR5cGUgPSAwOw0K
ICBkYXRhVHlwZSA9IDA7DQogIGNoYW5uZWxzID0gMDsNCiAgY291bnRlciA9
IDA7DQogIHRvdGFsQ291bnQgPSAwOw0KfQ0KDQp2b2lkIFd2T3V0IDo6IGNs
b3NlRmlsZSggdm9pZCApDQp7DQogIGlmICggZmQgKSB7DQogICAgLy8gSWYg
dGhlcmUncyBhbiBleGlzdGluZyBmaWxlLCBjbG9zZSBpdCBmaXJzdC4NCiAg
ICB3cml0ZURhdGEoIGNvdW50ZXIgKTsNCg0KICAgIGlmICggZmlsZVR5cGUg
PT0gV1ZPVVRfUkFXICkNCiAgICAgIGZjbG9zZSggZmQgKTsNCiAgICBlbHNl
IGlmICggZmlsZVR5cGUgPT0gV1ZPVVRfV0FWICkNCiAgICAgIGNsb3NlV2F2
RmlsZSgpOw0KICAgIGVsc2UgaWYgKCBmaWxlVHlwZSA9PSBXVk9VVF9TTkQg
KQ0KICAgICAgY2xvc2VTbmRGaWxlKCk7DQogICAgZWxzZSBpZiAoIGZpbGVU
eXBlID09IFdWT1VUX0FJRiApDQogICAgICBjbG9zZUFpZkZpbGUoKTsNCiAg
ICBlbHNlIGlmICggZmlsZVR5cGUgPT0gV1ZPVVRfTUFUICkNCiAgICAgIGNs
b3NlTWF0RmlsZSgpOw0KICAgIGZkID0gMDsNCg0KICAgIHByaW50ZigiJWYg
U2Vjb25kcyBDb21wdXRlZFxuXG4iLCBnZXRUaW1lKCkgKTsNCiAgICB0b3Rh
bENvdW50ID0gMDsNCiAgfQ0KfQ0KDQp2b2lkIFd2T3V0IDo6IG9wZW5GaWxl
KCBjb25zdCBjaGFyICpmaWxlTmFtZSwgdW5zaWduZWQgaW50IG5DaGFubmVs
cywgV3ZPdXQ6OkZJTEVfVFlQRSB0eXBlLCBTdGs6OlNUS19GT1JNQVQgZm9y
bWF0ICkNCnsNCiAgY2xvc2VGaWxlKCk7DQoNCiAgaWYgKCBuQ2hhbm5lbHMg
PCAxICkgew0KICAgIHNwcmludGYobXNnLCAiV3ZPdXQ6IHRoZSBjaGFubmVs
cyBhcmd1bWVudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvISIpOw0KICAg
IGhhbmRsZUVycm9yKCBtc2csIFN0a0Vycm9yOjpGVU5DVElPTl9BUkdVTUVO
VCApOw0KICB9DQoNCiAgdW5zaWduZWQgaW50IGxhc3RDaGFubmVscyA9IGNo
YW5uZWxzOw0KICBjaGFubmVscyA9IG5DaGFubmVsczsNCiAgZmlsZVR5cGUg
PSB0eXBlOw0KDQogIGlmICggZm9ybWF0ICE9IFNUS19TSU5UOCAmJiBmb3Jt
YXQgIT0gU1RLX1NJTlQxNiAmJg0KICAgICAgIGZvcm1hdCAhPSBTVEtfU0lO
VDMyICYmIGZvcm1hdCAhPSBTVEtfRkxPQVQzMiAmJiANCiAgICAgICBmb3Jt
YXQgIT0gU1RLX0ZMT0FUNjQgKSB7DQogICAgc3ByaW50ZiggbXNnLCAiV3ZP
dXQ6IFVua25vd24gZGF0YSB0eXBlIHNwZWNpZmllZCAoJWxkKS4iLCBmb3Jt
YXQgKTsNCiAgICBoYW5kbGVFcnJvcihtc2csIFN0a0Vycm9yOjpGVU5DVElP
Tl9BUkdVTUVOVCk7DQogIH0gDQogIGRhdGFUeXBlID0gZm9ybWF0Ow0KDQog
IGJvb2wgcmVzdWx0ID0gZmFsc2U7DQogIGlmICggZmlsZVR5cGUgPT0gV1ZP
VVRfUkFXICkgew0KICAgIGlmICggY2hhbm5lbHMgIT0gMSApIHsNCiAgICAg
IHNwcmludGYobXNnLCAiV3ZPdXQ6IFNUSyBSQVcgZmlsZXMgYXJlLCBieSBk
ZWZpbml0aW9uLCBhbHdheXMgbW9uYXVyYWwgKGNoYW5uZWxzID0gJWQgbm90
IHN1cHBvcnRlZCkhIiwgbkNoYW5uZWxzKTsNCiAgICAgIGhhbmRsZUVycm9y
KCBtc2csIFN0a0Vycm9yOjpGVU5DVElPTl9BUkdVTUVOVCApOw0KICAgIH0N
CiAgICByZXN1bHQgPSBzZXRSYXdGaWxlKCBmaWxlTmFtZSApOw0KICB9DQog
IGVsc2UgaWYgKCBmaWxlVHlwZSA9PSBXVk9VVF9XQVYgKQ0KICAgIHJlc3Vs
dCA9IHNldFdhdkZpbGUoIGZpbGVOYW1lICk7DQogIGVsc2UgaWYgKCBmaWxl
VHlwZSA9PSBXVk9VVF9TTkQgKQ0KICAgIHJlc3VsdCA9IHNldFNuZEZpbGUo
IGZpbGVOYW1lICk7DQogIGVsc2UgaWYgKCBmaWxlVHlwZSA9PSBXVk9VVF9B
SUYgKQ0KICAgIHJlc3VsdCA9IHNldEFpZkZpbGUoIGZpbGVOYW1lICk7DQog
IGVsc2UgaWYgKCBmaWxlVHlwZSA9PSBXVk9VVF9NQVQgKQ0KICAgIHJlc3Vs
dCA9IHNldE1hdEZpbGUoIGZpbGVOYW1lICk7DQogIGVsc2Ugew0KICAgIHNw
cmludGYobXNnLCAiV3ZPdXQ6IFVua25vd24gZmlsZSB0eXBlIHNwZWNpZmll
ZCAoJWxkKS4iLCBmaWxlVHlwZSk7DQogICAgaGFuZGxlRXJyb3IobXNnLCBT
dGtFcnJvcjo6RlVOQ1RJT05fQVJHVU1FTlQpOw0KICB9DQoNCiAgaWYgKCBy
ZXN1bHQgPT0gZmFsc2UgKQ0KICAgIGhhbmRsZUVycm9yKG1zZywgU3RrRXJy
b3I6OkZJTEVfRVJST1IpOw0KDQogIC8vIEFsbG9jYXRlIG5ldyBtZW1vcnkg
aWYgbmVjZXNzYXJ5Lg0KICBpZiAoIGxhc3RDaGFubmVscyA8IGNoYW5uZWxz
ICkgew0KICAgIGlmICggZGF0YSApIGRlbGV0ZSBbXSBkYXRhOw0KICAgIGRh
dGEgPSAoTVlfRkxPQVQgKikgbmV3IE1ZX0ZMT0FUW0JVRkZFUl9TSVpFKmNo
YW5uZWxzXTsNCiAgfQ0KICBjb3VudGVyID0gMDsNCn0NCg0KYm9vbCBXdk91
dCA6OiBzZXRSYXdGaWxlKCBjb25zdCBjaGFyICpmaWxlTmFtZSApDQp7DQog
IGNoYXIgbmFtZVsxMjhdOw0KICBzdHJuY3B5KG5hbWUsIGZpbGVOYW1lLCAx
MjgpOw0KICBpZiAoIHN0cnN0cihuYW1lLCAiLnJhdyIpID09IE5VTEwpIHN0
cmNhdChuYW1lLCAiLnJhdyIpOw0KICBmZCA9IGZvcGVuKG5hbWUsICJ3YiIp
Ow0KICBpZiAoICFmZCApIHsNCiAgICBzcHJpbnRmKG1zZywgIld2T3V0OiBD
b3VsZCBub3QgY3JlYXRlIFJBVyBmaWxlOiAlcyIsIG5hbWUpOw0KICAgIHJl
dHVybiBmYWxzZTsNCiAgfQ0KDQogIGlmICggZGF0YVR5cGUgIT0gU1RLX1NJ
TlQxNiApIHsNCiAgICBkYXRhVHlwZSA9IFNUS19TSU5UMTY7DQogICAgc3By
aW50Zihtc2csICJXdk91dDogVXNpbmcgMTYtYml0IHNpZ25lZCBpbnRlZ2Vy
IGRhdGEgZm9ybWF0IGZvciBmaWxlICVzLiIsIG5hbWUpOw0KICAgIGhhbmRs
ZUVycm9yKG1zZywgU3RrRXJyb3I6OldBUk5JTkcpOw0KICB9DQoNCiAgYnl0
ZXN3YXAgPSBmYWxzZTsNCiNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXw0KICBi
eXRlc3dhcCA9IHRydWU7DQojZW5kaWYNCg0KICBwcmludGYoIlxuQ3JlYXRp
bmcgUkFXIGZpbGU6ICVzXG4iLCBuYW1lKTsNCiAgcmV0dXJuIHRydWU7DQp9
DQoNCmJvb2wgV3ZPdXQgOjogc2V0V2F2RmlsZSggY29uc3QgY2hhciAqZmls
ZU5hbWUgKQ0Kew0KICBjaGFyIG5hbWVbMTI4XTsNCiAgc3RybmNweShuYW1l
LCBmaWxlTmFtZSwgMTI4KTsNCiAgaWYgKCBzdHJzdHIobmFtZSwgIi53YXYi
KSA9PSBOVUxMKSBzdHJjYXQobmFtZSwgIi53YXYiKTsNCiAgZmQgPSBmb3Bl
bihuYW1lLCAid2IiKTsNCiAgaWYgKCAhZmQgKSB7DQogICAgc3ByaW50Ziht
c2csICJXdk91dDogQ291bGQgbm90IGNyZWF0ZSBXQVYgZmlsZTogJXMiLCBu
YW1lKTsNCiAgICByZXR1cm4gZmFsc2U7DQogIH0NCg0KDQoNCiAgc3RydWN0
IHdhdmhkciBoZHIgPSB7IlJJRiIsIDQ0LCAiV0FWIiwgImZtdCIsIDE2LCAx
LCAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgKFNJTlQzMikgU3RrOjpz
YW1wbGVSYXRlKCksIDAsIDIsIDE2LCAiZGF0IiwgMH07DQogIGhkci5yaWZm
WzNdID0gJ0YnOw0KICBoZHIud2F2ZVszXSA9ICdFJzsNCiAgaGRyLmZtdFsz
XSAgPSAnICc7DQogIGhkci5kYXRhWzNdID0gJ2EnOw0KICBoZHIubnVtX2No
YW5zID0gKFNJTlQxNikgY2hhbm5lbHM7DQogIGlmICggZGF0YVR5cGUgPT0g
U1RLX1NJTlQ4ICkNCiAgICBoZHIuYml0c19wZXJfc2FtcCA9IDg7DQogIGVs
c2UgaWYgKCBkYXRhVHlwZSA9PSBTVEtfU0lOVDE2ICkNCiAgICBoZHIuYml0
c19wZXJfc2FtcCA9IDE2Ow0KICBlbHNlIGlmICggZGF0YVR5cGUgPT0gU1RL
X1NJTlQzMiApDQogICAgaGRyLmJpdHNfcGVyX3NhbXAgPSAzMjsNCiAgZWxz
ZSBpZiAoIGRhdGFUeXBlID09IFNUS19GTE9BVDMyICkgew0KICAgIGhkci5m
b3JtYXRfdGFnID0gMzsNCiAgICBoZHIuYml0c19wZXJfc2FtcCA9IDMyOw0K
ICB9DQogIGVsc2UgaWYgKCBkYXRhVHlwZSA9PSBTVEtfRkxPQVQ2NCApIHsN
CiAgICBoZHIuZm9ybWF0X3RhZyA9IDM7DQogICAgaGRyLmJpdHNfcGVyX3Nh
bXAgPSA2NDsNCiAgfQ0KICBoZHIuYnl0ZXNfcGVyX3NhbXAgPSAoU0lOVDE2
KSAoY2hhbm5lbHMgKiBoZHIuYml0c19wZXJfc2FtcCAvIDgpOw0KICBoZHIu
Ynl0ZXNfcGVyX3NlYyA9IChTSU5UMzIpIChoZHIuc2FtcGxlX3JhdGUgKiBo
ZHIuYnl0ZXNfcGVyX3NhbXApOw0KDQogIGJ5dGVzd2FwID0gZmFsc2U7DQoj
aWZuZGVmIF9fTElUVExFX0VORElBTl9fDQogIGJ5dGVzd2FwID0gdHJ1ZTsN
CiAgc3dhcDMyKCh1bnNpZ25lZCBjaGFyICopJmhkci5maWxlX3NpemUpOw0K
ICBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikmaGRyLmNodW5rX3NpemUpOw0K
ICBzd2FwMTYoKHVuc2lnbmVkIGNoYXIgKikmaGRyLmZvcm1hdF90YWcpOw0K
ICBzd2FwMTYoKHVuc2lnbmVkIGNoYXIgKikmaGRyLm51bV9jaGFucyk7DQog
IHN3YXAzMigodW5zaWduZWQgY2hhciAqKSZoZHIuc2FtcGxlX3JhdGUpOw0K
ICBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikmaGRyLmJ5dGVzX3Blcl9zZWMp
Ow0KICBzd2FwMTYoKHVuc2lnbmVkIGNoYXIgKikmaGRyLmJ5dGVzX3Blcl9z
YW1wKTsNCiAgc3dhcDE2KCh1bnNpZ25lZCBjaGFyICopJmhkci5iaXRzX3Bl
cl9zYW1wKTsNCiNlbmRpZg0KDQogIGlmICggZndyaXRlKCZoZHIsIDQsIDEx
LCBmZCkgIT0gMTEgKSB7DQogICAgc3ByaW50Zihtc2csICJXdk91dDogQ291
bGQgbm90IHdyaXRlIFdBViBoZWFkZXIgZm9yIGZpbGUgJXMiLCBuYW1lKTsN
CiAgICByZXR1cm4gZmFsc2U7DQogIH0NCg0KICBwcmludGYoIlxuQ3JlYXRp
bmcgV0FWIGZpbGU6ICVzXG4iLCBuYW1lKTsNCiAgcmV0dXJuIHRydWU7DQp9
DQoNCnZvaWQgV3ZPdXQgOjogY2xvc2VXYXZGaWxlKCB2b2lkICkNCnsNCiAg
aW50IGJ5dGVzX3Blcl9zYW1wbGUgPSAxOw0KICBpZiAoIGRhdGFUeXBlID09
IFNUS19TSU5UMTYgKQ0KICAgIGJ5dGVzX3Blcl9zYW1wbGUgPSAyOw0KICBl
bHNlIGlmICggZGF0YVR5cGUgPT0gU1RLX1NJTlQzMiB8fCBkYXRhVHlwZSA9
PSBTVEtfRkxPQVQzMiApDQogICAgYnl0ZXNfcGVyX3NhbXBsZSA9IDQ7DQog
IGVsc2UgaWYgKCBkYXRhVHlwZSA9PSBTVEtfRkxPQVQ2NCApDQogICAgYnl0
ZXNfcGVyX3NhbXBsZSA9IDg7DQoNCiAgU0lOVDMyIGJ5dGVzID0gdG90YWxD
b3VudCAqIGNoYW5uZWxzICogYnl0ZXNfcGVyX3NhbXBsZTsNCiNpZm5kZWYg
X19MSVRUTEVfRU5ESUFOX18NCiAgc3dhcDMyKCh1bnNpZ25lZCBjaGFyICop
JmJ5dGVzKTsNCiNlbmRpZg0KICBmc2VlayhmZCwgNDAsIFNFRUtfU0VUKTsg
Ly8ganVtcCB0byBkYXRhIGxlbmd0aA0KICBmd3JpdGUoJmJ5dGVzLCA0LCAx
LCBmZCk7DQoNCiAgYnl0ZXMgPSB0b3RhbENvdW50ICogY2hhbm5lbHMgKiBi
eXRlc19wZXJfc2FtcGxlICsgNDQ7DQojaWZuZGVmIF9fTElUVExFX0VORElB
Tl9fDQogIHN3YXAzMigodW5zaWduZWQgY2hhciAqKSZieXRlcyk7DQojZW5k
aWYNCiAgZnNlZWsoZmQsIDQsIFNFRUtfU0VUKTsgLy8ganVtcCB0byBmaWxl
IHNpemUNCiAgZndyaXRlKCZieXRlcywgNCwgMSwgZmQpOw0KICBmY2xvc2Uo
IGZkICk7DQp9DQoNCmJvb2wgV3ZPdXQgOjogc2V0U25kRmlsZSggY29uc3Qg
Y2hhciAqZmlsZU5hbWUgKQ0Kew0KICBjaGFyIG5hbWVbMTI4XTsNCiAgc3Ry
bmNweShuYW1lLCBmaWxlTmFtZSwgMTI4KTsNCiAgaWYgKCBzdHJzdHIobmFt
ZSwgIi5zbmQiKSA9PSBOVUxMKSBzdHJjYXQobmFtZSwgIi5zbmQiKTsNCiAg
ZmQgPSBmb3BlbihuYW1lLCAid2IiKTsNCiAgaWYgKCAhZmQgKSB7DQogICAg
c3ByaW50Zihtc2csICJXdk91dDogQ291bGQgbm90IGNyZWF0ZSBTTkQgZmls
ZTogJXMiLCBuYW1lKTsNCiAgICByZXR1cm4gZmFsc2U7DQogIH0NCg0KICBz
dHJ1Y3Qgc25kaGRyIGhkciA9IHsiLnNuIiwgNDAsIDAsIDMsIChTSU5UMzIp
IFN0azo6c2FtcGxlUmF0ZSgpLCAxLCAiQ3JlYXRlZCBieSBTVEsifTsNCiAg
aGRyLnByZWZbM10gPSAnZCc7DQogIGhkci5udW1fY2hhbm5lbHMgPSBjaGFu
bmVsczsNCiAgaWYgKCBkYXRhVHlwZSA9PSBTVEtfU0lOVDggKQ0KICAgIGhk
ci5mb3JtYXQgPSAyOw0KICBlbHNlIGlmICggZGF0YVR5cGUgPT0gU1RLX1NJ
TlQxNiApDQogICAgaGRyLmZvcm1hdCA9IDM7DQogIGVsc2UgaWYgKCBkYXRh
VHlwZSA9PSBTVEtfU0lOVDMyICkNCiAgICBoZHIuZm9ybWF0ID0gNTsNCiAg
ZWxzZSBpZiAoIGRhdGFUeXBlID09IFNUS19GTE9BVDMyICkNCiAgICBoZHIu
Zm9ybWF0ID0gNjsNCiAgZWxzZSBpZiAoIGRhdGFUeXBlID09IFNUS19GTE9B
VDY0ICkNCiAgICBoZHIuZm9ybWF0ID0gNzsNCg0KICBieXRlc3dhcCA9IGZh
bHNlOw0KI2lmZGVmIF9fTElUVExFX0VORElBTl9fDQogIGJ5dGVzd2FwID0g
dHJ1ZTsNCiAgc3dhcDMyICgodW5zaWduZWQgY2hhciAqKSZoZHIuaGRyX2xl
bmd0aCk7DQogIHN3YXAzMiAoKHVuc2lnbmVkIGNoYXIgKikmaGRyLmZvcm1h
dCk7DQogIHN3YXAzMiAoKHVuc2lnbmVkIGNoYXIgKikmaGRyLnNhbXBsZV9y
YXRlKTsNCiAgc3dhcDMyICgodW5zaWduZWQgY2hhciAqKSZoZHIubnVtX2No
YW5uZWxzKTsNCiNlbmRpZg0KDQogIGlmICggZndyaXRlKCZoZHIsIDQsIDEw
LCBmZCkgIT0gMTAgKSB7DQogICAgc3ByaW50Zihtc2csICJXdk91dDogQ291
bGQgbm90IHdyaXRlIFNORCBoZWFkZXIgZm9yIGZpbGUgJXMiLCBuYW1lKTsN
CiAgICByZXR1cm4gZmFsc2U7DQogIH0NCg0KICBwcmludGYoIlxuQ3JlYXRp
bmcgU05EIGZpbGU6ICVzXG4iLCBuYW1lKTsNCiAgcmV0dXJuIHRydWU7DQp9
DQoNCnZvaWQgV3ZPdXQgOjogY2xvc2VTbmRGaWxlKCB2b2lkICkNCnsNCiAg
aW50IGJ5dGVzX3Blcl9zYW1wbGUgPSAxOw0KICBpZiAoIGRhdGFUeXBlID09
IFNUS19TSU5UMTYgKQ0KICAgIGJ5dGVzX3Blcl9zYW1wbGUgPSAyOw0KICBl
bHNlIGlmICggZGF0YVR5cGUgPT0gU1RLX1NJTlQzMiApDQogICAgYnl0ZXNf
cGVyX3NhbXBsZSA9IDQ7DQogIGVsc2UgaWYgKCBkYXRhVHlwZSA9PSBTVEtf
RkxPQVQzMiApDQogICAgYnl0ZXNfcGVyX3NhbXBsZSA9IDQ7DQogIGVsc2Ug
aWYgKCBkYXRhVHlwZSA9PSBTVEtfRkxPQVQ2NCApDQogICAgYnl0ZXNfcGVy
X3NhbXBsZSA9IDg7DQoNCiAgU0lOVDMyIGJ5dGVzID0gdG90YWxDb3VudCAq
IGJ5dGVzX3Blcl9zYW1wbGUgKiBjaGFubmVsczsNCiNpZmRlZiBfX0xJVFRM
RV9FTkRJQU5fXw0KICBzd2FwMzIgKCh1bnNpZ25lZCBjaGFyICopJmJ5dGVz
KTsNCiNlbmRpZg0KICBmc2VlayhmZCwgOCwgU0VFS19TRVQpOyAvLyBqdW1w
IHRvIGRhdGEgc2l6ZQ0KICBmd3JpdGUoJmJ5dGVzLCA0LCAxLCBmZCk7DQog
IGZjbG9zZShmZCk7DQp9DQoNCmJvb2wgV3ZPdXQgOjogc2V0QWlmRmlsZSgg
Y29uc3QgY2hhciAqZmlsZU5hbWUgKQ0Kew0KICBjaGFyIG5hbWVbMTI4XTsN
CiAgc3RybmNweShuYW1lLCBmaWxlTmFtZSwgMTI4KTsNCiAgaWYgKCBzdHJz
dHIobmFtZSwgIi5haWYiKSA9PSBOVUxMKSBzdHJjYXQobmFtZSwgIi5haWYi
KTsNCiAgZmQgPSBmb3BlbihuYW1lLCAid2IiKTsNCiAgaWYgKCAhZmQgKSB7
DQogICAgc3ByaW50Zihtc2csICJXdk91dDogQ291bGQgbm90IGNyZWF0ZSBB
SUYgZmlsZTogJXMiLCBuYW1lKTsNCiAgICByZXR1cm4gZmFsc2U7DQogIH0N
Cg0KICAvLyBDb21tb24gcGFydHMgb2YgQUlGRi9BSUZDIGhlYWRlci4NCiAg
c3RydWN0IGFpZmhkciBoZHIgPSB7IkZPUiIsIDQ2LCAiQUlGIiwgIkNPTSIs
IDE4LCAwLCAwLCAxNiwgIjAifTsNCiAgc3RydWN0IGFpZnNzbmQgc3NuZCA9
IHsiU1NOIiwgOCwgMCwgMH07DQogIGhkci5mb3JtWzNdID0gJ00nOw0KICBo
ZHIuYWlmZlszXSA9ICdGJzsNCiAgaGRyLmNvbW1bM10gPSAnTSc7DQogIHNz
bmQuc3NuZFszXSA9ICdEJzsNCiAgaGRyLm51bV9jaGFucyA9IGNoYW5uZWxz
Ow0KICBpZiAoIGRhdGFUeXBlID09IFNUS19TSU5UOCApDQogICAgaGRyLnNh
bXBsZV9zaXplID0gODsNCiAgZWxzZSBpZiAoIGRhdGFUeXBlID09IFNUS19T
SU5UMTYgKQ0KICAgIGhkci5zYW1wbGVfc2l6ZSA9IDE2Ow0KICBlbHNlIGlm
ICggZGF0YVR5cGUgPT0gU1RLX1NJTlQzMiApDQogICAgaGRyLnNhbXBsZV9z
aXplID0gMzI7DQogIGVsc2UgaWYgKCBkYXRhVHlwZSA9PSBTVEtfRkxPQVQz
MiApIHsNCiAgICBoZHIuYWlmZlszXSA9ICdDJzsNCiAgICBoZHIuc2FtcGxl
X3NpemUgPSAzMjsNCiAgICBoZHIuY29tbV9zaXplID0gMjQ7DQogIH0NCiAg
ZWxzZSBpZiAoIGRhdGFUeXBlID09IFNUS19GTE9BVDY0ICkgew0KICAgIGhk
ci5haWZmWzNdID0gJ0MnOw0KICAgIGhkci5zYW1wbGVfc2l6ZSA9IDY0Ow0K
ICAgIGhkci5jb21tX3NpemUgPSAyNDsNCiAgfQ0KDQogIC8vIEZvciBBSUZG
IGZpbGVzLCB0aGUgc2FtcGxlIHJhdGUgaXMgc3RvcmVkIGluIGEgMTAtYnl0
ZSwNCiAgLy8gSUVFRSBTdGFuZGFyZCA3NTQgZmxvYXRpbmcgcG9pbnQgbnVt
YmVyLCBzbyB3ZSBuZWVkIHRvDQogIC8vIGNvbnZlcnQgdG8gdGhhdC4NCiAg
U0lOVDE2IGk7DQogIHVuc2lnbmVkIGxvbmcgZXhwOw0KICB1bnNpZ25lZCBs
b25nIHJhdGUgPSAodW5zaWduZWQgbG9uZykgU3RrOjpzYW1wbGVSYXRlKCk7
DQogIG1lbXNldChoZHIuc3JhdGUsIDAsIDEwKTsNCiAgZXhwID0gcmF0ZTsN
CiAgZm9yIChpPTA7IGk8MzI7IGkrKykgew0KICAgIGV4cCA+Pj0gMTsNCiAg
ICBpZiAoIWV4cCkgYnJlYWs7DQogIH0NCiAgaSArPSAxNjM4MzsNCiNpZmRl
ZiBfX0xJVFRMRV9FTkRJQU5fXw0KICBzd2FwMTYoKHVuc2lnbmVkIGNoYXIg
KikmaSk7DQojZW5kaWYNCiAgKihTSU5UMTYgKikoaGRyLnNyYXRlKSA9IChT
SU5UMTYpIGk7DQoNCiAgZm9yIChpPTMyOyBpOyBpLS0pIHsNCiAgICBpZiAo
cmF0ZSAmIDB4ODAwMDAwMDApIGJyZWFrOw0KICAgIHJhdGUgPDw9IDE7DQog
IH0NCg0KI2lmZGVmIF9fTElUVExFX0VORElBTl9fDQogIHN3YXAzMigodW5z
aWduZWQgY2hhciAqKSZyYXRlKTsNCiNlbmRpZg0KICAqKHVuc2lnbmVkIGxv
bmcgKikoaGRyLnNyYXRlKzIpID0gKHVuc2lnbmVkIGxvbmcpIHJhdGU7DQoN
CiAgYnl0ZXN3YXAgPSBmYWxzZTsgIA0KI2lmZGVmIF9fTElUVExFX0VORElB
Tl9fDQogIGJ5dGVzd2FwID0gdHJ1ZTsNCiAgc3dhcDMyKCh1bnNpZ25lZCBj
aGFyICopJmhkci5mb3JtX3NpemUpOw0KICBzd2FwMzIoKHVuc2lnbmVkIGNo
YXIgKikmaGRyLmNvbW1fc2l6ZSk7DQogIHN3YXAxNigodW5zaWduZWQgY2hh
ciAqKSZoZHIubnVtX2NoYW5zKTsNCiAgc3dhcDE2KCh1bnNpZ25lZCBjaGFy
ICopJmhkci5zYW1wbGVfc2l6ZSk7DQogIHN3YXAzMigodW5zaWduZWQgY2hh
ciAqKSZzc25kLnNzbmRfc2l6ZSk7DQogIHN3YXAzMigodW5zaWduZWQgY2hh
ciAqKSZzc25kLm9mZnNldCk7DQogIHN3YXAzMigodW5zaWduZWQgY2hhciAq
KSZzc25kLmJsb2NrX3NpemUpOw0KI2VuZGlmDQoNCiAgLy8gVGhlIHN0cnVj
dHVyZSBib3VuZGFyaWVzIGRvbid0IGFsbG93IGEgc2luZ2xlIHdyaXRlIG9m
IDU0IGJ5dGVzLg0KICBpZiAoIGZ3cml0ZSgmaGRyLCA0LCA1LCBmZCkgIT0g
NSApIGdvdG8gZXJyb3I7DQogIGlmICggZndyaXRlKCZoZHIubnVtX2NoYW5z
LCAyLCAxLCBmZCkgIT0gMSApIGdvdG8gZXJyb3I7DQogIGlmICggZndyaXRl
KCZoZHIuc2FtcGxlX2ZyYW1lcywgNCwgMSwgZmQpICE9IDEgKSBnb3RvIGVy
cm9yOw0KICBpZiAoIGZ3cml0ZSgmaGRyLnNhbXBsZV9zaXplLCAyLCAxLCBm
ZCkgIT0gMSApIGdvdG8gZXJyb3I7DQogIGlmICggZndyaXRlKCZoZHIuc3Jh
dGUsIDEwLCAxLCBmZCkgIT0gMSApIGdvdG8gZXJyb3I7DQoNCiAgaWYgKCBk
YXRhVHlwZSA9PSBTVEtfRkxPQVQzMiApIHsNCiAgICBjaGFyIHR5cGVbNF0g
PSB7J2YnLCdsJywnMycsJzInfTsNCiAgICBjaGFyIHplcm9lc1syXSA9IHsg
MCwgMCB9Ow0KICAgIGlmICggZndyaXRlKCZ0eXBlLCA0LCAxLCBmZCkgIT0g
MSApIGdvdG8gZXJyb3I7DQogICAgaWYgKCBmd3JpdGUoJnplcm9lcywgMiwg
MSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KICB9DQogIGVsc2UgaWYgKCBk
YXRhVHlwZSA9PSBTVEtfRkxPQVQ2NCApIHsNCiAgICBjaGFyIHR5cGVbNF0g
PSB7J2YnLCdsJywnNicsJzQnfTsNCiAgICBjaGFyIHplcm9lc1syXSA9IHsg
MCwgMCB9Ow0KICAgIGlmICggZndyaXRlKCZ0eXBlLCA0LCAxLCBmZCkgIT0g
MSApIGdvdG8gZXJyb3I7DQogICAgaWYgKCBmd3JpdGUoJnplcm9lcywgMiwg
MSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KICB9DQogIA0KICBpZiAoIGZ3
cml0ZSgmc3NuZCwgNCwgNCwgZmQpICE9IDQgKSBnb3RvIGVycm9yOw0KDQog
IHByaW50ZigiXG5DcmVhdGluZyBBSUYgZmlsZTogJXNcbiIsIG5hbWUpOw0K
ICByZXR1cm4gdHJ1ZTsNCg0KIGVycm9yOg0KICBzcHJpbnRmKG1zZywgIld2
T3V0OiBDb3VsZCBub3Qgd3JpdGUgQUlGIGhlYWRlciBmb3IgZmlsZSAlcyIs
IG5hbWUpOw0KICByZXR1cm4gZmFsc2U7DQp9DQoNCnZvaWQgV3ZPdXQgOjog
Y2xvc2VBaWZGaWxlKCB2b2lkICkNCnsNCiAgdW5zaWduZWQgbG9uZyBmcmFt
ZXMgPSAodW5zaWduZWQgbG9uZykgdG90YWxDb3VudDsNCiNpZmRlZiBfX0xJ
VFRMRV9FTkRJQU5fXw0KICBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikmZnJh
bWVzKTsNCiNlbmRpZg0KICBmc2VlayhmZCwgMjIsIFNFRUtfU0VUKTsgLy8g
anVtcCB0byAiQ09NTSIgc2FtcGxlX2ZyYW1lcw0KICBmd3JpdGUoJmZyYW1l
cywgNCwgMSwgZmQpOw0KDQogIGludCBieXRlc19wZXJfc2FtcGxlID0gMTsN
CiAgaWYgKCBkYXRhVHlwZSA9PSBTVEtfU0lOVDE2ICkNCiAgICBieXRlc19w
ZXJfc2FtcGxlID0gMjsNCiAgZWxzZSBpZiAoIGRhdGFUeXBlID09IFNUS19T
SU5UMzIgfHwgZGF0YVR5cGUgPT0gU1RLX0ZMT0FUMzIgKQ0KICAgIGJ5dGVz
X3Blcl9zYW1wbGUgPSA0Ow0KICBlbHNlIGlmICggZGF0YVR5cGUgPT0gU1RL
X0ZMT0FUNjQgKQ0KICAgIGJ5dGVzX3Blcl9zYW1wbGUgPSA4Ow0KDQogIHVu
c2lnbmVkIGxvbmcgYnl0ZXMgPSB0b3RhbENvdW50ICogYnl0ZXNfcGVyX3Nh
bXBsZSAqIGNoYW5uZWxzICsgNDY7DQogIGlmICggZGF0YVR5cGUgPT0gU1RL
X0ZMT0FUMzIgfHwgZGF0YVR5cGUgPT0gU1RLX0ZMT0FUNjQgKSBieXRlcyAr
PSA2Ow0KI2lmZGVmIF9fTElUVExFX0VORElBTl9fDQogIHN3YXAzMigodW5z
aWduZWQgY2hhciAqKSZieXRlcyk7DQojZW5kaWYNCiAgZnNlZWsoZmQsIDQs
IFNFRUtfU0VUKTsgLy8ganVtcCB0byBmaWxlIHNpemUNCiAgZndyaXRlKCZi
eXRlcywgNCwgMSwgZmQpOw0KDQogIGJ5dGVzID0gdG90YWxDb3VudCAqIGJ5
dGVzX3Blcl9zYW1wbGUgKiBjaGFubmVscyArIDg7DQogIGlmICggZGF0YVR5
cGUgPT0gU1RLX0ZMT0FUMzIgfHwgZGF0YVR5cGUgPT0gU1RLX0ZMT0FUNjQg
KSBieXRlcyArPSA2Ow0KI2lmZGVmIF9fTElUVExFX0VORElBTl9fDQogIHN3
YXAzMigodW5zaWduZWQgY2hhciAqKSZieXRlcyk7DQojZW5kaWYNCiAgaWYg
KCBkYXRhVHlwZSA9PSBTVEtfRkxPQVQzMiB8fCBkYXRhVHlwZSA9PSBTVEtf
RkxPQVQ2NCApDQogICAgZnNlZWsoZmQsIDQ4LCBTRUVLX1NFVCk7IC8vIGp1
bXAgdG8gIlNTTkQiIGNodW5rIHNpemUNCiAgZWxzZQ0KICAgIGZzZWVrKGZk
LCA0MiwgU0VFS19TRVQpOyAvLyBqdW1wIHRvICJTU05EIiBjaHVuayBzaXpl
DQogIGZ3cml0ZSgmYnl0ZXMsIDQsIDEsIGZkKTsNCg0KICBmY2xvc2UoIGZk
ICk7DQp9DQoNCmJvb2wgV3ZPdXQgOjogc2V0TWF0RmlsZSggY29uc3QgY2hh
ciAqZmlsZU5hbWUgKQ0Kew0KICBjaGFyIG5hbWVbMTI4XTsNCiAgc3RybmNw
eShuYW1lLCBmaWxlTmFtZSwgMTI4KTsNCiAgaWYgKCBzdHJzdHIobmFtZSwg
Ii5tYXQiKSA9PSBOVUxMKSBzdHJjYXQobmFtZSwgIi5tYXQiKTsNCiAgZmQg
PSBmb3BlbihuYW1lLCAidytiIik7DQogIGlmICggIWZkICkgew0KICAgIHNw
cmludGYobXNnLCAiV3ZPdXQ6IENvdWxkIG5vdCBjcmVhdGUgTUFUIGZpbGU6
ICVzIiwgbmFtZSk7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQoNCiAgaWYg
KCBkYXRhVHlwZSAhPSBTVEtfRkxPQVQ2NCApIHsNCiAgICBkYXRhVHlwZSA9
IFNUS19GTE9BVDY0Ow0KICAgIHNwcmludGYobXNnLCAiV3ZPdXQ6IFVzaW5n
IDY0LWJpdCBmbG9hdGluZy1wb2ludCBkYXRhIGZvcm1hdCBmb3IgZmlsZSAl
cyIsIG5hbWUpOw0KICAgIGhhbmRsZUVycm9yKG1zZywgU3RrRXJyb3I6OldB
Uk5JTkcpOw0KICB9DQoNCiAgc3RydWN0IG1hdGhkciBoZHI7DQogIHN0cmNw
eShoZHIuaGVhZGluZywiTUFUTEFCIDUuMCBNQVQtZmlsZSwgR2VuZXJhdGVk
IHVzaW5nIHRoZSBTeW50aGVzaXMgVG9vbEtpdCBpbiBDKysgKFNUSykuIEJ5
IFBlcnJ5IFIuIENvb2sgYW5kIEdhcnkgUC4gU2Nhdm9uZSwgMTk5NS0yMDAy
LiIpOw0KDQogIGludCBpOw0KICBmb3IgKGk9c3RybGVuKGhkci5oZWFkaW5n
KTtpPDEyNDtpKyspIGhkci5oZWFkaW5nW2ldID0gJyAnOw0KDQogIC8vIEhl
YWRlciBGbGFnIEZpZWxkcw0KICBoZHIuaGZmWzBdID0gKFNJTlQxNikgMHgw
MTAwOyAgIC8vIFZlcnNpb24gZmllbGQNCiAgaGRyLmhmZlsxXSA9IChTSU5U
MTYpICdNJzsgICAgICAvLyBFbmRpYW4gaW5kaWNhdG9yIGZpZWxkICgiTUki
KQ0KICBoZHIuaGZmWzFdIDw8PSA4Ow0KICBoZHIuaGZmWzFdICs9ICdJJzsN
Cg0KICBoZHIuYWRmWzBdID0gKFNJTlQzMikgMTQ7ICAgICAgIC8vIE1hdGxh
YiBhcnJheSBkYXRhIHR5cGUgdmFsdWUNCiAgaGRyLmFkZlsxXSA9IChTSU5U
MzIpIDA7ICAgICAgICAvLyBTaXplIG9mIGZpbGUgYWZ0ZXIgdGhpcyBwb2lu
dCB0byBlbmQgKGluIGJ5dGVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRG9uJ3Qga25vdyBzaXplIHlldC4NCg0KICAvLyBOdW1l
cmljIEFycmF5IFN1YmVsZW1lbnRzICg0KToNCiAgLy8gMS4gQXJyYXkgRmxh
Z3MNCiAgaGRyLmFkZlsyXSA9IChTSU5UMzIpIDY7ICAgICAgICAvLyBNYXRs
YWIgMzItYml0IHVuc2lnbmVkIGludGVnZXIgZGF0YSB0eXBlIHZhbHVlDQog
IGhkci5hZGZbM10gPSAoU0lOVDMyKSA4OyAgICAgICAgLy8gOCBieXRlcyBv
ZiBkYXRhIHRvIGZvbGxvdw0KICBoZHIuYWRmWzRdID0gKFNJTlQzMikgNjsg
ICAgICAgIC8vIERvdWJsZS1wcmVjaXNpb24gYXJyYXksIG5vIGFycmF5IGZs
YWdzIHNldA0KICBoZHIuYWRmWzVdID0gKFNJTlQzMikgMDsgICAgICAgIC8v
IDQgYnl0ZXMgdW5kZWZpbmVkDQogIC8vIDIuIEFycmF5IERpbWVuc2lvbnMN
CiAgaGRyLmFkZls2XSA9IChTSU5UMzIpIDU7ICAgICAgICAvLyBNYXRsYWIg
MzItYml0IHNpZ25lZCBpbnRlZ2VyIGRhdGEgdHlwZSB2YWx1ZQ0KICBoZHIu
YWRmWzddID0gKFNJTlQzMikgODsgICAgICAgIC8vIDggYnl0ZXMgb2YgZGF0
YSB0byBmb2xsb3cgKDJEIGFycmF5KQ0KICBoZHIuYWRmWzhdID0gKFNJTlQz
MikgY2hhbm5lbHM7IC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiByb3dzDQog
IGhkci5hZGZbOV0gPSAoU0lOVDMyKSAwOyAgICAgICAgLy8gVGhpcyBpcyB0
aGUgbnVtYmVyIG9mIGNvbHVtbnMNCg0KICAvLyAzLiBBcnJheSBOYW1lDQog
IC8vIFdlJ2xsIHVzZSBmaWxlTmFtZSBmb3IgdGhlIG1hdGxhYiBhcnJheSBu
YW1lIChhcyB3ZWxsIGFzIHRoZSBmaWxlIG5hbWUpLg0KICAvLyBJZiBmaWxl
TmFtZSBpcyA0IGNoYXJhY3RlcnMgb3IgbGVzcywgd2UgaGF2ZSB0byB1c2Ug
YSBjb21wcmVzc2VkIGRhdGEgZWxlbWVudA0KICAvLyBmb3JtYXQgZm9yIHRo
ZSBhcnJheSBuYW1lIGRhdGEgZWxlbWVudC4gIE90aGVyd2lzZSwgdGhlIGFy
cmF5IG5hbWUgbXVzdA0KICAvLyBiZSBmb3JtYXR0ZWQgaW4gOC1ieXRlIGlu
Y3JlbWVudHMgKHVwIHRvIDMxIGNoYXJhY3RlcnMgKyBOVUxMKS4NCiAgU0lO
VDMyIG5hbWVsZW5ndGggPSAoU0lOVDMyKSBzdHJsZW4oZmlsZU5hbWUpOw0K
ICBpZiAoc3Ryc3RyKGZpbGVOYW1lLCAiLm1hdCIpKSBuYW1lbGVuZ3RoIC09
IDQ7DQogIGlmIChuYW1lbGVuZ3RoID4gMzEpIG5hbWVsZW5ndGggPSAzMTsg
Ly8gVHJ1bmNhdGUgbmFtZSB0byAzMSBjaGFyYWN0ZXJzLg0KICBjaGFyIGFy
cmF5TmFtZVs2NF07DQogIHN0cm5jcHkoYXJyYXlOYW1lLCBmaWxlTmFtZSwg
bmFtZWxlbmd0aCk7DQogIGFycmF5TmFtZVtuYW1lbGVuZ3RoXSA9ICdcMCc7
DQogIGlmIChuYW1lbGVuZ3RoID4gNCkgew0KICAgIGhkci5hZGZbMTBdID0g
KFNJTlQzMikgMTsgICAgICAgIC8vIE1hdGxhYiA4LWJpdCBzaWduZWQgaW50
ZWdlciBkYXRhIHR5cGUgdmFsdWUNCiAgfQ0KICBlbHNlIHsgLy8gQ29tcHJl
c3NlZCBkYXRhIGVsZW1lbnQgZm9ybWF0DQogICAgaGRyLmFkZlsxMF0gPSBu
YW1lbGVuZ3RoOw0KICAgIGhkci5hZGZbMTBdIDw8PSAxNjsNCiAgICBoZHIu
YWRmWzEwXSArPSAxOw0KICB9DQogIFNJTlQzMiBoZWFkc2l6ZSA9IDQwOyAg
ICAgICAgLy8gTnVtYmVyIG9mIGJ5dGVzIGluIGRhdGEgZWxlbWVudCBzbyBm
YXIuDQoNCiAgLy8gV3JpdGUgdGhlIGZpeGVkIHBvcnRpb24gb2YgdGhlIGhl
YWRlcg0KICBpZiAoIGZ3cml0ZSgmaGRyLCAxNzIsIDEsIGZkKSAhPSAxICkg
Z290byBlcnJvcjsNCg0KICAvLyBXcml0ZSBNQVRMQUIgYXJyYXkgbmFtZQ0K
ICBTSU5UMzIgdG1wOw0KICBpZiAobmFtZWxlbmd0aCA+IDQpIHsNCiAgICBp
ZiAoIGZ3cml0ZSgmbmFtZWxlbmd0aCwgNCwgMSwgZmQpICE9IDEpIGdvdG8g
ZXJyb3I7DQogICAgaWYgKCBmd3JpdGUoYXJyYXlOYW1lLCBuYW1lbGVuZ3Ro
LCAxLCBmZCkgIT0gMSApIGdvdG8gZXJyb3I7DQogICAgdG1wID0gKFNJTlQz
MikgY2VpbCgoZmxvYXQpbmFtZWxlbmd0aCAvIDgpOw0KICAgIGlmICggZnNl
ZWsoZmQsIHRtcCo4LW5hbWVsZW5ndGgsIFNFRUtfQ1VSKSA9PSAtMSApIGdv
dG8gZXJyb3I7DQogICAgaGVhZHNpemUgKz0gdG1wICogODsNCiAgfQ0KICBl
bHNlIHsgLy8gQ29tcHJlc3NlZCBkYXRhIGVsZW1lbnQgZm9ybWF0DQogICAg
aWYgKCBmd3JpdGUoYXJyYXlOYW1lLCBuYW1lbGVuZ3RoLCAxLCBmZCkgIT0g
MSApIGdvdG8gZXJyb3I7DQogICAgdG1wID0gNCAtIG5hbWVsZW5ndGg7DQog
ICAgaWYgKCBmc2VlayhmZCwgdG1wLCBTRUVLX0NVUikgPT0gLTEgKSBnb3Rv
IGVycm9yOw0KICB9DQoNCiAgLy8gRmluaXNoIHdyaXRpbmcga25vd24gaGVh
ZGVyIGluZm9ybWF0aW9uDQogIHRtcCA9IDk7ICAgICAgICAvLyBNYXRsYWIg
SUVFRSA3NTQgZG91YmxlIGRhdGEgdHlwZQ0KICBpZiAoIGZ3cml0ZSgmdG1w
LCA0LCAxLCBmZCkgIT0gMSApIGdvdG8gZXJyb3I7DQogIHRtcCA9IDA7ICAg
ICAgICAvLyBTaXplIG9mIHJlYWwgcGFydCBzdWJlbGVtZW50IGluIGJ5dGVz
ICg4IHBlciBzYW1wbGUpDQogIGlmICggZndyaXRlKCZ0bXAsIDQsIDEsIGZk
KSAhPSAxICkgZ290byBlcnJvcjsNCiAgaGVhZHNpemUgKz0gODsgIC8vIFRv
dGFsIG51bWJlciBvZiBieXRlcyBpbiBkYXRhIGVsZW1lbnQgc28gZmFyDQoN
CiAgaWYgKCBmc2VlayhmZCwgMTMyLCBTRUVLX1NFVCkgPT0gLTEgKSBnb3Rv
IGVycm9yOw0KICBpZiAoIGZ3cml0ZSgmaGVhZHNpemUsIDQsIDEsIGZkKSAh
PSAxICkgZ290byBlcnJvcjsgLy8gV3JpdGUgaGVhZGVyIHNpemUgLi4uIHdp
bGwgdXBkYXRlIGF0IGVuZA0KICBpZiAoIGZzZWVrKGZkLCAwLCBTRUVLX0VO
RCkgPT0gLTEgKSBnb3RvIGVycm9yOw0KDQogIGJ5dGVzd2FwID0gZmFsc2U7
DQogIHByaW50ZigiXG5DcmVhdGluZyBNQVQtZmlsZSAoJXMpIGNvbnRhaW5p
bmcgTUFUTEFCIGFycmF5OiAlc1xuIiwgbmFtZSwgYXJyYXlOYW1lKTsNCiAg
cmV0dXJuIHRydWU7DQoNCiBlcnJvcjoNCiAgc3ByaW50Zihtc2csICJXdk91
dDogQ291bGQgbm90IHdyaXRlIE1BVC1maWxlIGhlYWRlciBmb3IgZmlsZSAl
cyIsIG5hbWUpOw0KICByZXR1cm4gZmFsc2U7DQp9DQoNCnZvaWQgV3ZPdXQg
OjogY2xvc2VNYXRGaWxlKCB2b2lkICkNCnsNCiAgZnNlZWsoZmQsIDE2NCwg
U0VFS19TRVQpOyAvLyBqdW1wIHRvIG51bWJlciBvZiBjb2x1bW5zDQogIGZ3
cml0ZSgmdG90YWxDb3VudCwgNCwgMSwgZmQpOw0KDQogIFNJTlQzMiBoZWFk
c2l6ZSwgdGVtcDsNCiAgZnNlZWsoZmQsIDEzMiwgU0VFS19TRVQpOyAgLy8g
anVtcCB0byBoZWFkZXIgc2l6ZQ0KICBmcmVhZCgmaGVhZHNpemUsIDQsIDEs
IGZkKTsNCiAgdGVtcCA9IGhlYWRzaXplOw0KICBoZWFkc2l6ZSArPSAoU0lO
VDMyKSAodG90YWxDb3VudCAqIDggKiBjaGFubmVscyk7DQogIGZzZWVrKGZk
LCAxMzIsIFNFRUtfU0VUKTsNCiAgLy8gV3JpdGUgZmlsZSBzaXplIChtaW51
cyBzb21lIGhlYWRlciBpbmZvKQ0KICBmd3JpdGUoJmhlYWRzaXplLCA0LCAx
LCBmZCk7DQoNCiAgZnNlZWsoZmQsIHRlbXArMTMyLCBTRUVLX1NFVCk7IC8v
IGp1bXB0IHRvIGRhdGEgc2l6ZSAoaW4gYnl0ZXMpDQogIHRlbXAgPSB0b3Rh
bENvdW50ICogOCAqIGNoYW5uZWxzOw0KICBmd3JpdGUoJnRlbXAsIDQsIDEs
IGZkKTsNCg0KICBmY2xvc2UoZmQpOw0KfQ0KDQp1bnNpZ25lZCBsb25nIFd2
T3V0IDo6IGdldEZyYW1lcyggdm9pZCApIGNvbnN0DQp7DQogIHJldHVybiB0
b3RhbENvdW50Ow0KfQ0KDQpNWV9GTE9BVCBXdk91dCA6OiBnZXRUaW1lKCB2
b2lkICkgY29uc3QNCnsNCiAgcmV0dXJuIChNWV9GTE9BVCkgdG90YWxDb3Vu
dCAvIFN0azo6c2FtcGxlUmF0ZSgpOw0KfQ0KDQp2b2lkIFd2T3V0IDo6IHdy
aXRlRGF0YSggdW5zaWduZWQgbG9uZyBmcmFtZXMgKQ0Kew0KICBpZiAoIGRh
dGFUeXBlID09IFNUS19TSU5UOCApIHsNCiAgICBpZiAoIGZpbGVUeXBlID09
IFdWT1VUX1dBViApIHsgLy8gOC1iaXQgV0FWIGRhdGEgaXMgdW5zaWduZWQh
DQogICAgICB1bnNpZ25lZCBjaGFyIHNhbXBsZTsNCiAgICAgIGZvciAoIHVu
c2lnbmVkIGxvbmcgaz0wOyBrPGZyYW1lcypjaGFubmVsczsgaysrICkgew0K
ICAgICAgICBzYW1wbGUgPSAodW5zaWduZWQgY2hhcikgKGRhdGFba10gKiAx
MjcuMCArIDEyOC4wKTsNCiAgICAgICAgaWYgKCBmd3JpdGUoJnNhbXBsZSwg
MSwgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KICAgICAgfQ0KICAgIH0N
CiAgICBlbHNlIHsNCiAgICAgIHNpZ25lZCBjaGFyIHNhbXBsZTsNCiAgICAg
IGZvciAoIHVuc2lnbmVkIGxvbmcgaz0wOyBrPGZyYW1lcypjaGFubmVsczsg
aysrICkgew0KICAgICAgICBzYW1wbGUgPSAoc2lnbmVkIGNoYXIpIChkYXRh
W2tdICogMTI3LjApOw0KICAgICAgICAvL3NhbXBsZSA9ICgoc2lnbmVkIGNo
YXIpICgoIGRhdGFba10gKyAxLjAgKSAqIDEyNy41ICsgMC41KSkgLSAxMjg7
DQogICAgICAgIGlmICggZndyaXRlKCZzYW1wbGUsIDEsIDEsIGZkKSAhPSAx
ICkgZ290byBlcnJvcjsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgZWxzZSBp
ZiAoIGRhdGFUeXBlID09IFNUS19TSU5UMTYgKSB7DQogICAgU0lOVDE2IHNh
bXBsZTsNCiAgICBmb3IgKCB1bnNpZ25lZCBsb25nIGs9MDsgazxmcmFtZXMq
Y2hhbm5lbHM7IGsrKyApIHsNCiAgICAgIHNhbXBsZSA9IChTSU5UMTYpIChk
YXRhW2tdICogMzI3NjcuMCk7DQogICAgICAvL3NhbXBsZSA9ICgoU0lOVDE2
KSAoKCBkYXRhW2tdICsgMS4wICkgKiAzMjc2Ny41ICsgMC41KSkgLSAzMjc2
ODsNCiAgICAgIGlmICggYnl0ZXN3YXAgKSBzd2FwMTYoICh1bnNpZ25lZCBj
aGFyICopJnNhbXBsZSApOw0KICAgICAgaWYgKCBmd3JpdGUoJnNhbXBsZSwg
MiwgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KICAgIH0NCiAgfQ0KICBl
bHNlIGlmICggZGF0YVR5cGUgPT0gU1RLX1NJTlQzMiApIHsNCiAgICBTSU5U
MzIgc2FtcGxlOw0KICAgIGZvciAoIHVuc2lnbmVkIGxvbmcgaz0wOyBrPGZy
YW1lcypjaGFubmVsczsgaysrICkgew0KICAgICAgc2FtcGxlID0gKFNJTlQz
MikgKGRhdGFba10gKiAyMTQ3NDgzNjQ3LjApOw0KICAgICAgLy9zYW1wbGUg
PSAoKFNJTlQzMikgKCggZGF0YVtrXSArIDEuMCApICogMjE0NzQ4MzY0Ny41
ICsgMC41KSkgLSAyMTQ3NDgzNjQ4Ow0KICAgICAgaWYgKCBieXRlc3dhcCAp
IHN3YXAzMiggKHVuc2lnbmVkIGNoYXIgKikmc2FtcGxlICk7DQogICAgICBp
ZiAoIGZ3cml0ZSgmc2FtcGxlLCA0LCAxLCBmZCkgIT0gMSApIGdvdG8gZXJy
b3I7DQogICAgfQ0KICB9DQogIGVsc2UgaWYgKCBkYXRhVHlwZSA9PSBTVEtf
RkxPQVQzMiApIHsNCiAgICBGTE9BVDMyIHNhbXBsZTsNCiAgICBmb3IgKCB1
bnNpZ25lZCBsb25nIGs9MDsgazxmcmFtZXMqY2hhbm5lbHM7IGsrKyApIHsN
CiAgICAgIHNhbXBsZSA9IChGTE9BVDMyKSAoZGF0YVtrXSk7DQogICAgICBp
ZiAoIGJ5dGVzd2FwICkgc3dhcDMyKCAodW5zaWduZWQgY2hhciAqKSZzYW1w
bGUgKTsNCiAgICAgIGlmICggZndyaXRlKCZzYW1wbGUsIDQsIDEsIGZkKSAh
PSAxICkgZ290byBlcnJvcjsNCiAgICB9DQogIH0NCiAgZWxzZSBpZiAoIGRh
dGFUeXBlID09IFNUS19GTE9BVDY0ICkgew0KICAgIEZMT0FUNjQgc2FtcGxl
Ow0KICAgIGZvciAoIHVuc2lnbmVkIGxvbmcgaz0wOyBrPGZyYW1lcypjaGFu
bmVsczsgaysrICkgew0KICAgICAgc2FtcGxlID0gKEZMT0FUNjQpIChkYXRh
W2tdKTsNCiAgICAgIGlmICggYnl0ZXN3YXAgKSBzd2FwNjQoICh1bnNpZ25l
ZCBjaGFyICopJnNhbXBsZSApOw0KICAgICAgaWYgKCBmd3JpdGUoJnNhbXBs
ZSwgOCwgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KICAgIH0NCiAgfQ0K
ICByZXR1cm47DQoNCiBlcnJvcjoNCiAgc3ByaW50Zihtc2csICJXdk91dDog
RXJyb3Igd3JpdGluZyBkYXRhIHRvIGZpbGUuIik7DQogIGhhbmRsZUVycm9y
KG1zZywgU3RrRXJyb3I6OkZJTEVfRVJST1IpOw0KfQ0KDQp2b2lkIFd2T3V0
IDo6IHRpY2soY29uc3QgTVlfRkxPQVQgc2FtcGxlKQ0Kew0KICBpZiAoICFm
ZCApIHJldHVybjsNCg0KICBmb3IgKCB1bnNpZ25lZCBpbnQgaj0wOyBqPGNo
YW5uZWxzOyBqKysgKQ0KICAgIGRhdGFbY291bnRlcipjaGFubmVscytqXSA9
IHNhbXBsZTsNCg0KICBjb3VudGVyKys7DQogIHRvdGFsQ291bnQrKzsNCg0K
ICBpZiAoIGNvdW50ZXIgPT0gQlVGRkVSX1NJWkUgKSB7DQogICAgd3JpdGVE
YXRhKCBCVUZGRVJfU0laRSApOw0KICAgIGNvdW50ZXIgPSAwOw0KICB9DQp9
DQoNCnZvaWQgV3ZPdXQgOjogdGljayhjb25zdCBNWV9GTE9BVCAqdmVjdG9y
LCB1bnNpZ25lZCBpbnQgdmVjdG9yU2l6ZSkNCnsNCiAgaWYgKCAhZmQgKSBy
ZXR1cm47DQoNCiAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPHZlY3RvclNp
emU7IGkrKykNCiAgICB0aWNrKCB2ZWN0b3JbaV0gKTsNCn0NCg0Kdm9pZCBX
dk91dCA6OiB0aWNrRnJhbWUoY29uc3QgTVlfRkxPQVQgKmZyYW1lVmVjdG9y
LCB1bnNpZ25lZCBpbnQgZnJhbWVzKQ0Kew0KICBpZiAoICFmZCApIHJldHVy
bjsNCg0KICB1bnNpZ25lZCBpbnQgajsNCiAgZm9yICggdW5zaWduZWQgaW50
IGk9MDsgaTxmcmFtZXM7IGkrKyApIHsNCiAgICBmb3IgKCBqPTA7IGo8Y2hh
bm5lbHM7IGorKyApIHsNCiAgICAgIGRhdGFbY291bnRlcipjaGFubmVscytq
XSA9IGZyYW1lVmVjdG9yW2kqY2hhbm5lbHMral07DQogICAgfQ0KICAgIGNv
dW50ZXIrKzsNCiAgICB0b3RhbENvdW50Kys7DQoNCiAgICBpZiAoIGNvdW50
ZXIgPT0gQlVGRkVSX1NJWkUgKSB7DQogICAgICB3cml0ZURhdGEoIEJVRkZF
Ul9TSVpFICk7DQogICAgICBjb3VudGVyID0gMDsNCiAgICB9DQogIH0NCn0N
Cg==
--1084984517-400078837-1048873231=:12874
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="WvIn.cpp"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.44.0303280940311.12874@ccrma-gate.stanford.edu>
Content-Description: 
Content-Disposition: ATTACHMENT; FILENAME="WvIn.cpp"

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8NCi8qISBcY2xhc3MgV3ZJbg0KICAgIFxicmllZiBTVEsgYXVk
aW8gZGF0YSBpbnB1dCBiYXNlIGNsYXNzLg0KDQogICAgVGhpcyBjbGFzcyBw
cm92aWRlcyBpbnB1dCBzdXBwb3J0IGZvciB2YXJpb3VzDQogICAgYXVkaW8g
ZmlsZSBmb3JtYXRzLiAgSXQgYWxzbyBzZXJ2ZXMgYXMgYSBiYXNlDQogICAg
Y2xhc3MgZm9yICJyZWFsdGltZSIgc3RyZWFtaW5nIHN1YmNsYXNzZXMuDQoN
CiAgICBXdkluIGxvYWRzIHRoZSBjb250ZW50cyBvZiBhbiBhdWRpbyBmaWxl
IGZvcg0KICAgIHN1YnNlcXVlbnQgb3V0cHV0LiAgTGluZWFyIGludGVycG9s
YXRpb24gaXMNCiAgICB1c2VkIGZvciBmcmFjdGlvbmFsICJyZWFkIHJhdGVz
Ii4NCg0KICAgIFd2SW4gc3VwcG9ydHMgbXVsdGktY2hhbm5lbCBkYXRhIGlu
IGludGVybGVhdmVkDQogICAgZm9ybWF0LiAgSXQgaXMgaW1wb3J0YW50IHRv
IGRpc3Rpbmd1aXNoIHRoZQ0KICAgIHRpY2soKSBtZXRob2RzLCB3aGljaCBy
ZXR1cm4gc2FtcGxlcyBwcm9kdWNlZA0KICAgIGJ5IGF2ZXJhZ2luZyBhY3Jv
c3Mgc2FtcGxlIGZyYW1lcywgZnJvbSB0aGUgDQogICAgdGlja0ZyYW1lKCkg
bWV0aG9kcywgd2hpY2ggcmV0dXJuIHBvaW50ZXJzIHRvDQogICAgbXVsdGkt
Y2hhbm5lbCBzYW1wbGUgZnJhbWVzLiAgRm9yIHNpbmdsZS1jaGFubmVsDQog
ICAgZGF0YSwgdGhlc2UgbWV0aG9kcyByZXR1cm4gZXF1aXZhbGVudCB2YWx1
ZXMuDQoNCiAgICBTbWFsbCBmaWxlcyBhcmUgY29tcGxldGVseSByZWFkIGlu
dG8gbG9jYWwgbWVtb3J5DQogICAgZHVyaW5nIGluc3RhbnRpYXRpb24uICBM
YXJnZSBmaWxlcyBhcmUgcmVhZA0KICAgIGluY3JlbWVudGFsbHkgZnJvbSBk
aXNrLiAgVGhlIGZpbGUgc2l6ZSB0aHJlc2hvbGQNCiAgICBhbmQgdGhlIGlu
Y3JlbWVudCBzaXplIHZhbHVlcyBhcmUgZGVmaW5lZCBpbg0KICAgIFd2SW4u
aC4NCg0KICAgIFd2SW4gY3VycmVudGx5IHN1cHBvcnRzIFdBViwgQUlGRiwg
U05EIChBVSksDQogICAgTUFULWZpbGUgKE1hdGxhYiksIGFuZCBTVEsgUkFX
IGZpbGUgZm9ybWF0cy4NCiAgICBTaWduZWQgaW50ZWdlciAoOC0sIDE2LSwg
YW5kIDMyLWJpdCkgYW5kIGZsb2F0aW5nLQ0KICAgIHBvaW50ICgzMi0gYW5k
IDY0LWJpdCkgZGF0YSB0eXBlcyBhcmUgc3VwcG9ydGVkLg0KICAgIFVuY29t
cHJlc3NlZCBkYXRhIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkLiAgSWYNCiAg
ICB1c2luZyBNQVQtZmlsZXMsIGRhdGEgc2hvdWxkIGJlIHNhdmVkIGluIGFu
IGFycmF5DQogICAgd2l0aCBlYWNoIGRhdGEgY2hhbm5lbCBmaWxsaW5nIGEg
bWF0cml4IHJvdy4NCg0KICAgIGJ5IFBlcnJ5IFIuIENvb2sgYW5kIEdhcnkg
UC4gU2Nhdm9uZSwgMTk5NSAtIDIwMDIuDQoqLw0KLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2lu
Y2x1ZGUgIld2SW4uaCINCiNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KI2luY2x1
ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPG1hdGguaD4NCiNpbmNsdWRl
IDxzdHJpbmcuaD4NCg0KV3ZJbiA6OiBXdkluKCkNCnsNCiAgaW5pdCgpOw0K
fQ0KDQpXdkluIDo6IFd2SW4oIGNvbnN0IGNoYXIgKmZpbGVOYW1lLCBib29s
IHJhdyApDQp7DQogIGluaXQoKTsNCiAgb3BlbkZpbGUoIGZpbGVOYW1lLCBy
YXcgKTsNCn0NCg0KV3ZJbiA6OiB+V3ZJbigpDQp7DQogIGlmIChmZCkNCiAg
ICBmY2xvc2UoZmQpOw0KDQogIGlmIChkYXRhKQ0KICAgIGRlbGV0ZSBbXSBk
YXRhOw0KDQogIGlmIChsYXN0T3V0cHV0KQ0KICAgIGRlbGV0ZSBbXSBsYXN0
T3V0cHV0Ow0KfQ0KDQp2b2lkIFd2SW4gOjogaW5pdCggdm9pZCApDQp7DQog
IGZkID0gMDsNCiAgZGF0YSA9IDA7DQogIGxhc3RPdXRwdXQgPSAwOw0KICBj
aHVua2luZyA9IGZhbHNlOw0KICBmaW5pc2hlZCA9IHRydWU7DQogIGludGVy
cG9sYXRlID0gZmFsc2U7DQogIGJ1ZmZlclNpemUgPSAwOw0KICBjaGFubmVs
cyA9IDA7DQogIHRpbWUgPSAwLjA7DQp9DQoNCnZvaWQgV3ZJbiA6OiBjbG9z
ZUZpbGUoIHZvaWQgKQ0Kew0KICBpZiAoIGZkICkgZmNsb3NlKCBmZCApOw0K
ICBmaW5pc2hlZCA9IHRydWU7DQp9DQoNCnZvaWQgV3ZJbiA6OiBvcGVuRmls
ZSggY29uc3QgY2hhciAqZmlsZU5hbWUsIGJvb2wgcmF3ICkNCnsNCiAgY2xv
c2VGaWxlKCk7DQoNCiAgLy8gVHJ5IHRvIG9wZW4gdGhlIGZpbGUuDQogIGZk
ID0gZm9wZW4oZmlsZU5hbWUsICJyYiIpOw0KICBpZiAoIWZkKSB7DQogICAg
c3ByaW50Zihtc2csICJXdkluOiBDb3VsZCBub3Qgb3BlbiBvciBmaW5kIGZp
bGUgKCVzKS4iLCBmaWxlTmFtZSk7DQogICAgaGFuZGxlRXJyb3IobXNnLCBT
dGtFcnJvcjo6RklMRV9OT1RfRk9VTkQpOw0KICB9DQoNCiAgdW5zaWduZWQg
bG9uZyBsYXN0Q2hhbm5lbHMgPSBjaGFubmVsczsNCiAgdW5zaWduZWQgbG9u
ZyBzYW1wbGVzLCBsYXN0U2FtcGxlcyA9IChidWZmZXJTaXplKzEpKmNoYW5u
ZWxzOw0KICBib29sIHJlc3VsdCA9IGZhbHNlOw0KICBpZiAoIHJhdyApDQog
ICAgcmVzdWx0ID0gZ2V0UmF3SW5mbyggZmlsZU5hbWUgKTsNCiAgZWxzZSB7
DQogICAgY2hhciBoZWFkZXJbMTJdOw0KICAgIGlmICggZnJlYWQoJmhlYWRl
ciwgNCwgMywgZmQpICE9IDMgKSBnb3RvIGVycm9yOw0KICAgIGlmICggIXN0
cm5jbXAoaGVhZGVyLCAiUklGRiIsIDQpICYmDQogICAgICAgICAhc3RybmNt
cCgmaGVhZGVyWzhdLCAiV0FWRSIsIDQpICkNCiAgICAgIHJlc3VsdCA9IGdl
dFdhdkluZm8oIGZpbGVOYW1lICk7DQogICAgZWxzZSBpZiAoICFzdHJuY21w
KGhlYWRlciwgIi5zbmQiLCA0KSApDQogICAgICByZXN1bHQgPSBnZXRTbmRJ
bmZvKCBmaWxlTmFtZSApOw0KICAgIGVsc2UgaWYgKCAhc3RybmNtcChoZWFk
ZXIsICJGT1JNIiwgNCkgJiYNCiAgICAgICAgICAgICAgKCFzdHJuY21wKCZo
ZWFkZXJbOF0sICJBSUZGIiwgNCkgfHwgIXN0cm5jbXAoJmhlYWRlcls4XSwg
IkFJRkMiLCA0KSApICkNCiAgICAgIHJlc3VsdCA9IGdldEFpZkluZm8oIGZp
bGVOYW1lICk7DQogICAgZWxzZSB7DQogICAgICBpZiAoIGZzZWVrKGZkLCAx
MjYsIFNFRUtfU0VUKSA9PSAtMSApIGdvdG8gZXJyb3I7DQogICAgICBpZiAo
IGZyZWFkKCZoZWFkZXIsIDIsIDEsIGZkKSAhPSAxICkgZ290byBlcnJvcjsN
CiAgICAgIGlmICghc3RybmNtcChoZWFkZXIsICJNSSIsIDIpIHx8DQogICAg
ICAgICAgIXN0cm5jbXAoaGVhZGVyLCAiSU0iLCAyKSApDQogICAgICAgIHJl
c3VsdCA9IGdldE1hdEluZm8oIGZpbGVOYW1lICk7DQogICAgICBlbHNlIHsN
CiAgICAgICAgc3ByaW50Zihtc2csICJXdkluOiBGaWxlICglcykgZm9ybWF0
IHVua25vd24uIiwgZmlsZU5hbWUpOw0KICAgICAgICBoYW5kbGVFcnJvciht
c2csIFN0a0Vycm9yOjpGSUxFX1VOS05PV05fRk9STUFUKTsNCiAgICAgIH0N
CiAgICB9DQogIH0NCg0KICBpZiAoIHJlc3VsdCA9PSBmYWxzZSApDQogICAg
aGFuZGxlRXJyb3IobXNnLCBTdGtFcnJvcjo6RklMRV9FUlJPUik7DQoNCiAg
Ly8gQWxsb2NhdGUgbmV3IG1lbW9yeSBpZiBuZWNlc3NhcnkuDQogIHNhbXBs
ZXMgPSAoYnVmZmVyU2l6ZSsxKSpjaGFubmVsczsNCiAgaWYgKCBsYXN0U2Ft
cGxlcyA8IHNhbXBsZXMgKSB7DQogICAgaWYgKCBkYXRhICkgZGVsZXRlIFtd
IGRhdGE7DQogICAgZGF0YSA9IChNWV9GTE9BVCAqKSBuZXcgTVlfRkxPQVRb
c2FtcGxlc107DQogIH0NCiAgaWYgKCBsYXN0Q2hhbm5lbHMgPCBjaGFubmVs
cyApIHsNCiAgICBpZiAoIGxhc3RPdXRwdXQgKSBkZWxldGUgW10gbGFzdE91
dHB1dDsNCiAgICBsYXN0T3V0cHV0ID0gKE1ZX0ZMT0FUICopIG5ldyBNWV9G
TE9BVFtjaGFubmVsc107DQogIH0NCg0KICBpZiAoIGZtb2QocmF0ZSwgMS4w
KSAhPSAwLjAgKSBpbnRlcnBvbGF0ZSA9IHRydWU7DQogIGNodW5rUG9pbnRl
ciA9IDA7DQogIHJlc2V0KCk7DQogIHJlYWREYXRhKCAwICk7ICAvLyBMb2Fk
IGZpbGUgZGF0YS4NCiAgbm9ybWFsaXplKCk7DQogIGZpbmlzaGVkID0gZmFs
c2U7DQogIHJldHVybjsNCg0KIGVycm9yOg0KICBzcHJpbnRmKG1zZywgIld2
SW46IEVycm9yIHJlYWRpbmcgZmlsZSAoJXMpLiIsIGZpbGVOYW1lKTsNCiAg
aGFuZGxlRXJyb3IobXNnLCBTdGtFcnJvcjo6RklMRV9FUlJPUik7DQp9DQoN
CmJvb2wgV3ZJbiA6OiBnZXRSYXdJbmZvKCBjb25zdCBjaGFyICpmaWxlTmFt
ZSApDQp7DQogIC8vIFVzZSB0aGUgc3lzdGVtIGNhbGwgInN0YXQiIHRvIGRl
dGVybWluZSB0aGUgZmlsZSBsZW5ndGguDQogIHN0cnVjdCBzdGF0IGZpbGVz
dGF0Ow0KICBpZiAoIHN0YXQoZmlsZU5hbWUsICZmaWxlc3RhdCkgPT0gLTEg
KSB7DQogICAgc3ByaW50Zihtc2csICJXdkluOiBDb3VsZCBub3Qgc3RhdCBS
QVcgZmlsZSAoJXMpLiIsIGZpbGVOYW1lKTsNCiAgICByZXR1cm4gZmFsc2U7
DQogIH0NCg0KICBmaWxlU2l6ZSA9IChsb25nKSBmaWxlc3RhdC5zdF9zaXpl
IC8gMjsgIC8vIGxlbmd0aCBpbiAyLWJ5dGUgc2FtcGxlcw0KICBidWZmZXJT
aXplID0gZmlsZVNpemU7DQogIGlmIChmaWxlU2l6ZSA+IENIVU5LX1RIUkVT
SE9MRCkgew0KICAgIGNodW5raW5nID0gdHJ1ZTsNCiAgICBidWZmZXJTaXpl
ID0gQ0hVTktfU0laRTsNCiAgICBnYWluID0gMS4wIC8gMzI3NjguMDsNCiAg
fQ0KDQogIC8vIFNUSyByYXd3YXZlIGZpbGVzIGhhdmUgbm8gaGVhZGVyIGFu
ZCBhcmUgYXNzdW1lZCB0byBjb250YWluIGENCiAgLy8gbW9ub3Bob25pYyBz
dHJlYW0gb2YgMTYtYml0IHNpZ25lZCBpbnRlZ2VycyBpbiBiaWctZW5kaWFu
IGJ5dGUNCiAgLy8gb3JkZXIgd2l0aCBhIHNhbXBsZSByYXRlIG9mIDIyMDUw
IEh6Lg0KICBjaGFubmVscyA9IDE7DQogIGRhdGFPZmZzZXQgPSAwOw0KICBy
YXRlID0gKE1ZX0ZMT0FUKSAyMjA1MC4wIC8gU3RrOjpzYW1wbGVSYXRlKCk7
DQogIGZpbGVSYXRlID0gMjIwNTAuMDsNCiAgaW50ZXJwb2xhdGUgPSBmYWxz
ZTsNCiAgZGF0YVR5cGUgPSBTVEtfU0lOVDE2Ow0KICBieXRlc3dhcCA9IGZh
bHNlOw0KI2lmZGVmIF9fTElUVExFX0VORElBTl9fDQogIGJ5dGVzd2FwID0g
dHJ1ZTsNCiNlbmRpZg0KDQogIHJldHVybiB0cnVlOw0KfQ0KDQpib29sIFd2
SW4gOjogZ2V0V2F2SW5mbyggY29uc3QgY2hhciAqZmlsZU5hbWUgKQ0Kew0K
ICAvLyBGaW5kICJmb3JtYXQiIGNodW5rIC4uLiBpdCBtdXN0IGNvbWUgYmVm
b3JlIHRoZSAiZGF0YSIgY2h1bmsuDQogIGNoYXIgaWRbNF07DQogIFNJTlQz
MiBjaHVua1NpemU7DQogIGlmICggZnJlYWQoJmlkLCA0LCAxLCBmZCkgIT0g
MSApIGdvdG8gZXJyb3I7DQogIHdoaWxlICggc3RybmNtcChpZCwgImZtdCAi
LCA0KSApIHsNCiAgICBpZiAoIGZyZWFkKCZjaHVua1NpemUsIDQsIDEsIGZk
KSAhPSAxICkgZ290byBlcnJvcjsNCiNpZm5kZWYgX19MSVRUTEVfRU5ESUFO
X18NCiAgICBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikmY2h1bmtTaXplKTsN
CiNlbmRpZg0KICAgIGlmICggZnNlZWsoZmQsIGNodW5rU2l6ZSwgU0VFS19D
VVIpID09IC0xICkgZ290byBlcnJvcjsNCiAgICBpZiAoIGZyZWFkKCZpZCwg
NCwgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KICB9DQoNCiAgLy8gQ2hl
Y2sgdGhhdCB0aGUgZGF0YSBpcyBub3QgY29tcHJlc3NlZC4NCiAgU0lOVDE2
IGZvcm1hdF90YWc7DQogIGlmICggZnJlYWQoJmNodW5rU2l6ZSwgNCwgMSwg
ZmQpICE9IDEgKSBnb3RvIGVycm9yOyAvLyBSZWFkIGZtdCBjaHVuayBzaXpl
Lg0KICBpZiAoIGZyZWFkKCZmb3JtYXRfdGFnLCAyLCAxLCBmZCkgIT0gMSAp
IGdvdG8gZXJyb3I7DQojaWZuZGVmIF9fTElUVExFX0VORElBTl9fDQogIHN3
YXAxNigodW5zaWduZWQgY2hhciAqKSZmb3JtYXRfdGFnKTsNCiNlbmRpZg0K
ICBpZiAoZm9ybWF0X3RhZyAhPSAxICYmIGZvcm1hdF90YWcgIT0gMyApIHsg
Ly8gUENNID0gMSwgRkxPQVQgPSAzDQogICAgc3ByaW50Zihtc2csICJXdklu
OiAlcyBjb250YWlucyBhbiB1bnN1cHBvcnRlZCBkYXRhIGZvcm1hdCB0eXBl
ICglZCkuIiwgZmlsZU5hbWUsIGZvcm1hdF90YWcpOw0KICAgIHJldHVybiBm
YWxzZTsNCiAgfQ0KDQogIC8vIEdldCBudW1iZXIgb2YgY2hhbm5lbHMgZnJv
bSB0aGUgaGVhZGVyLg0KICBTSU5UMTYgdGVtcDsNCiAgaWYgKCBmcmVhZCgm
dGVtcCwgMiwgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KI2lmbmRlZiBf
X0xJVFRMRV9FTkRJQU5fXw0KICBzd2FwMTYoKHVuc2lnbmVkIGNoYXIgKikm
dGVtcCk7DQojZW5kaWYNCiAgY2hhbm5lbHMgPSAodW5zaWduZWQgaW50ICkg
dGVtcDsNCg0KICAvLyBHZXQgZmlsZSBzYW1wbGUgcmF0ZSBmcm9tIHRoZSBo
ZWFkZXIuDQogIFNJTlQzMiBzcmF0ZTsNCiAgaWYgKCBmcmVhZCgmc3JhdGUs
IDQsIDEsIGZkKSAhPSAxICkgZ290byBlcnJvcjsNCiNpZm5kZWYgX19MSVRU
TEVfRU5ESUFOX18NCiAgc3dhcDMyKCh1bnNpZ25lZCBjaGFyICopJnNyYXRl
KTsNCiNlbmRpZg0KICBmaWxlUmF0ZSA9IChNWV9GTE9BVCkgc3JhdGU7DQoN
CiAgLy8gU2V0IGRlZmF1bHQgcmF0ZSBiYXNlZCBvbiBmaWxlIHNhbXBsaW5n
IHJhdGUuDQogIHJhdGUgPSAoTVlfRkxPQVQpICggc3JhdGUgLyBTdGs6OnNh
bXBsZVJhdGUoKSApOw0KDQogIC8vIERldGVybWluZSB0aGUgZGF0YSB0eXBl
Lg0KICBkYXRhVHlwZSA9IDA7DQogIGlmICggZnNlZWsoZmQsIDYsIFNFRUtf
Q1VSKSA9PSAtMSApIGdvdG8gZXJyb3I7ICAgLy8gTG9jYXRlIGJpdHNfcGVy
X3NhbXBsZSBpbmZvLg0KICBpZiAoIGZyZWFkKCZ0ZW1wLCAyLCAxLCBmZCkg
IT0gMSApIGdvdG8gZXJyb3I7DQojaWZuZGVmIF9fTElUVExFX0VORElBTl9f
DQogIHN3YXAxNigodW5zaWduZWQgY2hhciAqKSZ0ZW1wKTsNCiNlbmRpZg0K
ICBpZiAoIGZvcm1hdF90YWcgPT0gMSApIHsNCiAgICBpZiAodGVtcCA9PSA4
KQ0KICAgICAgZGF0YVR5cGUgPSBTVEtfU0lOVDg7DQogICAgZWxzZSBpZiAo
dGVtcCA9PSAxNikNCiAgICAgIGRhdGFUeXBlID0gU1RLX1NJTlQxNjsNCiAg
ICBlbHNlIGlmICh0ZW1wID09IDMyKQ0KICAgICAgZGF0YVR5cGUgPSBTVEtf
U0lOVDMyOw0KICB9DQogIGVsc2UgaWYgKCBmb3JtYXRfdGFnID09IDMgKSB7
DQogICAgaWYgKHRlbXAgPT0gMzIpDQogICAgICBkYXRhVHlwZSA9IFNUS19G
TE9BVDMyOw0KICAgIGVsc2UgaWYgKHRlbXAgPT0gNjQpDQogICAgICBkYXRh
VHlwZSA9IFNUS19GTE9BVDY0Ow0KICB9DQogIGlmICggZGF0YVR5cGUgPT0g
MCApIHsNCiAgICBzcHJpbnRmKG1zZywgIld2SW46ICVkIGJpdHMgcGVyIHNh
bXBsZSB3aXRoIGRhdGEgZm9ybWF0ICVkIGFyZSBub3Qgc3VwcG9ydGVkICgl
cykuIiwgdGVtcCwgZm9ybWF0X3RhZywgZmlsZU5hbWUpOw0KICAgIHJldHVy
biBmYWxzZTsNCiAgfQ0KDQogIC8vIEp1bXAgb3ZlciBhbnkgcmVtYWluaW5n
IHBhcnQgb2YgdGhlICJmbXQiIGNodW5rLg0KICBpZiAoIGZzZWVrKGZkLCBj
aHVua1NpemUtMTYsIFNFRUtfQ1VSKSA9PSAtMSApIGdvdG8gZXJyb3I7DQoN
CiAgLy8gRmluZCAiZGF0YSIgY2h1bmsgLi4uIGl0IG11c3QgY29tZSBhZnRl
ciB0aGUgImZtdCIgY2h1bmsuDQogIGlmICggZnJlYWQoJmlkLCA0LCAxLCBm
ZCkgIT0gMSApIGdvdG8gZXJyb3I7DQogIHdoaWxlICggc3RybmNtcChpZCwg
ImRhdGEiLCA0KSApIHsNCiAgICBpZiAoIGZyZWFkKCZjaHVua1NpemUsIDQs
IDEsIGZkKSAhPSAxICkgZ290byBlcnJvcjsNCiNpZm5kZWYgX19MSVRUTEVf
RU5ESUFOX18NCiAgICBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikmY2h1bmtT
aXplKTsNCiNlbmRpZg0KICAgIGlmICggZnNlZWsoZmQsIGNodW5rU2l6ZSwg
U0VFS19DVVIpID09IC0xICkgZ290byBlcnJvcjsNCiAgICBpZiAoIGZyZWFk
KCZpZCwgNCwgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KICB9DQoNCiAg
Ly8gR2V0IGxlbmd0aCBvZiBkYXRhIGZyb20gdGhlIGhlYWRlci4NCiAgU0lO
VDMyIGJ5dGVzOw0KICBpZiAoIGZyZWFkKCZieXRlcywgNCwgMSwgZmQpICE9
IDEgKSBnb3RvIGVycm9yOw0KI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXw0K
ICBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMpOw0KI2VuZGlmDQog
IGZpbGVTaXplID0gOCAqIGJ5dGVzIC8gdGVtcCAvIGNoYW5uZWxzOyAgLy8g
c2FtcGxlIGZyYW1lcw0KICBidWZmZXJTaXplID0gZmlsZVNpemU7DQogIGlm
IChmaWxlU2l6ZSA+IENIVU5LX1RIUkVTSE9MRCkgew0KICAgIGNodW5raW5n
ID0gdHJ1ZTsNCiAgICBidWZmZXJTaXplID0gQ0hVTktfU0laRTsNCiAgfQ0K
DQogIGRhdGFPZmZzZXQgPSBmdGVsbChmZCk7DQogIGJ5dGVzd2FwID0gZmFs
c2U7DQojaWZuZGVmIF9fTElUVExFX0VORElBTl9fDQogIGJ5dGVzd2FwID0g
dHJ1ZTsNCiNlbmRpZg0KDQogIHJldHVybiB0cnVlOw0KDQogZXJyb3I6DQog
IHNwcmludGYobXNnLCAiV3ZJbjogRXJyb3IgcmVhZGluZyBXQVYgZmlsZSAo
JXMpLiIsIGZpbGVOYW1lKTsNCiAgcmV0dXJuIGZhbHNlOw0KfQ0KDQpib29s
IFd2SW4gOjogZ2V0U25kSW5mbyggY29uc3QgY2hhciAqZmlsZU5hbWUgKQ0K
ew0KICAvLyBEZXRlcm1pbmUgdGhlIGRhdGEgdHlwZS4NCiAgU0lOVDMyIGZv
cm1hdDsNCiAgaWYgKCBmc2VlayhmZCwgMTIsIFNFRUtfU0VUKSA9PSAtMSAp
IGdvdG8gZXJyb3I7ICAgLy8gTG9jYXRlIGZvcm1hdA0KICBpZiAoIGZyZWFk
KCZmb3JtYXQsIDQsIDEsIGZkKSAhPSAxICkgZ290byBlcnJvcjsNCiNpZmRl
ZiBfX0xJVFRMRV9FTkRJQU5fXw0KICAgIHN3YXAzMigodW5zaWduZWQgY2hh
ciAqKSZmb3JtYXQpOw0KI2VuZGlmDQogIGlmIChmb3JtYXQgPT0gMikgZGF0
YVR5cGUgPSBTVEtfU0lOVDg7DQogIGVsc2UgaWYgKGZvcm1hdCA9PSAzKSBk
YXRhVHlwZSA9IFNUS19TSU5UMTY7DQogIGVsc2UgaWYgKGZvcm1hdCA9PSA1
KSBkYXRhVHlwZSA9IFNUS19TSU5UMzI7DQogIGVsc2UgaWYgKGZvcm1hdCA9
PSA2KSBkYXRhVHlwZSA9IFNUS19GTE9BVDMyOw0KICBlbHNlIGlmIChmb3Jt
YXQgPT0gNykgZGF0YVR5cGUgPSBTVEtfRkxPQVQ2NDsNCiAgZWxzZSB7DQog
ICAgc3ByaW50Zihtc2csICJXdkluOiBkYXRhIGZvcm1hdCBpbiBmaWxlICVz
IGlzIG5vdCBzdXBwb3J0ZWQuIiwgZmlsZU5hbWUpOw0KICAgIHJldHVybiBm
YWxzZTsNCiAgfQ0KDQogIC8vIEdldCBmaWxlIHNhbXBsZSByYXRlIGZyb20g
dGhlIGhlYWRlci4NCiAgU0lOVDMyIHNyYXRlOw0KICBpZiAoIGZyZWFkKCZz
cmF0ZSwgNCwgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KI2lmZGVmIF9f
TElUVExFX0VORElBTl9fDQogIHN3YXAzMigodW5zaWduZWQgY2hhciAqKSZz
cmF0ZSk7DQojZW5kaWYNCiAgZmlsZVJhdGUgPSAoTVlfRkxPQVQpIHNyYXRl
Ow0KDQogIC8vIFNldCBkZWZhdWx0IHJhdGUgYmFzZWQgb24gZmlsZSBzYW1w
bGluZyByYXRlLg0KICByYXRlID0gKE1ZX0ZMT0FUKSAoIHNyYXRlIC8gc2Ft
cGxlUmF0ZSgpICk7DQoNCiAgLy8gR2V0IG51bWJlciBvZiBjaGFubmVscyBm
cm9tIHRoZSBoZWFkZXIuDQogIFNJTlQzMiBjaGFuczsNCiAgaWYgKCBmcmVh
ZCgmY2hhbnMsIDQsIDEsIGZkKSAhPSAxICkgZ290byBlcnJvcjsNCiNpZmRl
ZiBfX0xJVFRMRV9FTkRJQU5fXw0KICBzd2FwMzIoKHVuc2lnbmVkIGNoYXIg
KikmY2hhbnMpOw0KI2VuZGlmDQogIGNoYW5uZWxzID0gY2hhbnM7DQoNCiAg
aWYgKCBmc2VlayhmZCwgNCwgU0VFS19TRVQpID09IC0xICkgZ290byBlcnJv
cjsNCiAgaWYgKCBmcmVhZCgmZGF0YU9mZnNldCwgNCwgMSwgZmQpICE9IDEg
KSBnb3RvIGVycm9yOw0KI2lmZGVmIF9fTElUVExFX0VORElBTl9fDQogIHN3
YXAzMigodW5zaWduZWQgY2hhciAqKSZkYXRhT2Zmc2V0KTsNCiNlbmRpZg0K
DQogIC8vIEdldCBsZW5ndGggb2YgZGF0YSBmcm9tIHRoZSBoZWFkZXIuDQog
IGlmICggZnJlYWQoJmZpbGVTaXplLCA0LCAxLCBmZCkgIT0gMSApIGdvdG8g
ZXJyb3I7DQojaWZkZWYgX19MSVRUTEVfRU5ESUFOX18NCiAgc3dhcDMyKCh1
bnNpZ25lZCBjaGFyICopJmZpbGVTaXplKTsNCiNlbmRpZg0KICBmaWxlU2l6
ZSAvPSAyICogY2hhbm5lbHM7ICAvLyBDb252ZXJ0IHRvIHNhbXBsZSBmcmFt
ZXMuDQogIGJ1ZmZlclNpemUgPSBmaWxlU2l6ZTsNCiAgaWYgKGZpbGVTaXpl
ID4gQ0hVTktfVEhSRVNIT0xEKSB7DQogICAgY2h1bmtpbmcgPSB0cnVlOw0K
ICAgIGJ1ZmZlclNpemUgPSBDSFVOS19TSVpFOw0KICB9DQoNCiAgYnl0ZXN3
YXAgPSBmYWxzZTsNCiNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXw0KICBieXRl
c3dhcCA9IHRydWU7DQojZW5kaWYNCg0KICByZXR1cm4gdHJ1ZTsNCg0KIGVy
cm9yOg0KICBzcHJpbnRmKG1zZywgIld2SW46IEVycm9yIHJlYWRpbmcgU05E
IGZpbGUgKCVzKS4iLCBmaWxlTmFtZSk7DQogIHJldHVybiBmYWxzZTsNCn0N
Cg0KYm9vbCBXdkluIDo6IGdldEFpZkluZm8oIGNvbnN0IGNoYXIgKmZpbGVO
YW1lICkNCnsNCiAgYm9vbCBhaWZjID0gZmFsc2U7DQogIGNoYXIgaWRbNF07
DQoNCiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBBSUZGIG9yIEFJ
RkMuDQogIGlmICggZnNlZWsoZmQsIDgsIFNFRUtfU0VUKSA9PSAtMSApIGdv
dG8gZXJyb3I7DQogIGlmICggZnJlYWQoJmlkLCA0LCAxLCBmZCkgIT0gMSAp
IGdvdG8gZXJyb3I7DQogIGlmICggIXN0cm5jbXAoaWQsICJBSUZDIiwgNCkg
KSBhaWZjID0gdHJ1ZTsNCg0KICAvLyBGaW5kICJjb21tb24iIGNodW5rDQog
IFNJTlQzMiBjaHVua1NpemU7DQogIGlmICggZnJlYWQoJmlkLCA0LCAxLCBm
ZCkgIT0gMSkgZ290byBlcnJvcjsNCiAgd2hpbGUgKCBzdHJuY21wKGlkLCAi
Q09NTSIsIDQpICkgew0KICAgIGlmICggZnJlYWQoJmNodW5rU2l6ZSwgNCwg
MSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KI2lmZGVmIF9fTElUVExFX0VO
RElBTl9fDQogICAgc3dhcDMyKCh1bnNpZ25lZCBjaGFyICopJmNodW5rU2l6
ZSk7DQojZW5kaWYNCiAgICBpZiAoIGZzZWVrKGZkLCBjaHVua1NpemUsIFNF
RUtfQ1VSKSA9PSAtMSApIGdvdG8gZXJyb3I7DQogICAgaWYgKCBmcmVhZCgm
aWQsIDQsIDEsIGZkKSAhPSAxICkgZ290byBlcnJvcjsNCiAgfQ0KDQogIC8v
IEdldCBudW1iZXIgb2YgY2hhbm5lbHMgZnJvbSB0aGUgaGVhZGVyLg0KICBT
SU5UMTYgdGVtcDsNCiAgaWYgKCBmc2VlayhmZCwgNCwgU0VFS19DVVIpID09
IC0xICkgZ290byBlcnJvcjsgLy8gSnVtcCBvdmVyIGNodW5rIHNpemUNCiAg
aWYgKCBmcmVhZCgmdGVtcCwgMiwgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9y
Ow0KI2lmZGVmIF9fTElUVExFX0VORElBTl9fDQogIHN3YXAxNigodW5zaWdu
ZWQgY2hhciAqKSZ0ZW1wKTsNCiNlbmRpZg0KICBjaGFubmVscyA9IHRlbXA7
DQoNCiAgLy8gR2V0IGxlbmd0aCBvZiBkYXRhIGZyb20gdGhlIGhlYWRlci4N
CiAgU0lOVDMyIGZyYW1lczsNCiAgaWYgKCBmcmVhZCgmZnJhbWVzLCA0LCAx
LCBmZCkgIT0gMSApIGdvdG8gZXJyb3I7DQojaWZkZWYgX19MSVRUTEVfRU5E
SUFOX18NCiAgc3dhcDMyKCh1bnNpZ25lZCBjaGFyICopJmZyYW1lcyk7DQoj
ZW5kaWYNCiAgZmlsZVNpemUgPSBmcmFtZXM7IC8vIHNhbXBsZSBmcmFtZXMN
CiAgYnVmZmVyU2l6ZSA9IGZpbGVTaXplOw0KICBpZiAoZmlsZVNpemUgPiBD
SFVOS19USFJFU0hPTEQpIHsNCiAgICBjaHVua2luZyA9IHRydWU7DQogICAg
YnVmZmVyU2l6ZSA9IENIVU5LX1NJWkU7DQogIH0NCg0KICAvLyBSZWFkIHRo
ZSBudW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlLg0KICBpZiAoIGZyZWFkKCZ0
ZW1wLCAyLCAxLCBmZCkgIT0gMSApIGdvdG8gZXJyb3I7DQojaWZkZWYgX19M
SVRUTEVfRU5ESUFOX18NCiAgc3dhcDE2KCh1bnNpZ25lZCBjaGFyICopJnRl
bXApOw0KI2VuZGlmDQoNCiAgLy8gR2V0IGZpbGUgc2FtcGxlIHJhdGUgZnJv
bSB0aGUgaGVhZGVyLiAgRm9yIEFJRkYgZmlsZXMsIHRoaXMgdmFsdWUNCiAg
Ly8gaXMgc3RvcmVkIGluIGEgMTAtYnl0ZSwgSUVFRSBTdGFuZGFyZCA3NTQg
ZmxvYXRpbmcgcG9pbnQgbnVtYmVyLA0KICAvLyBzbyB3ZSBuZWVkIHRvIGNv
bnZlcnQgaXQgZmlyc3QuDQogIHVuc2lnbmVkIGNoYXIgc3JhdGVbMTBdOw0K
ICB1bnNpZ25lZCBjaGFyIGV4cDsNCiAgdW5zaWduZWQgbG9uZyBtYW50aXNz
YTsNCiAgdW5zaWduZWQgbG9uZyBsYXN0Ow0KICBpZiAoIGZyZWFkKCZzcmF0
ZSwgMTAsIDEsIGZkKSAhPSAxICkgZ290byBlcnJvcjsNCiAgbWFudGlzc2Eg
PSAodW5zaWduZWQgbG9uZykgKih1bnNpZ25lZCBsb25nICopKHNyYXRlKzIp
Ow0KI2lmZGVmIF9fTElUVExFX0VORElBTl9fDQogIHN3YXAzMigodW5zaWdu
ZWQgY2hhciAqKSZtYW50aXNzYSk7DQojZW5kaWYNCiAgZXhwID0gMzAgLSAq
KHNyYXRlKzEpOw0KICBsYXN0ID0gMDsNCiAgd2hpbGUgKGV4cC0tKSB7DQog
ICAgbGFzdCA9IG1hbnRpc3NhOw0KICAgIG1hbnRpc3NhID4+PSAxOw0KICB9
DQogIGlmIChsYXN0ICYgMHgwMDAwMDAwMSkgbWFudGlzc2ErKzsNCiAgZmls
ZVJhdGUgPSAoTVlfRkxPQVQpIG1hbnRpc3NhOw0KDQogIC8vIFNldCBkZWZh
dWx0IHJhdGUgYmFzZWQgb24gZmlsZSBzYW1wbGluZyByYXRlLg0KICByYXRl
ID0gKE1ZX0ZMT0FUKSAoIGZpbGVSYXRlIC8gc2FtcGxlUmF0ZSgpICk7DQoN
CiAgLy8gRGV0ZXJtaW5lIHRoZSBkYXRhIGZvcm1hdC4NCiAgZGF0YVR5cGUg
PSAwOw0KICBpZiAoIGFpZmMgPT0gZmFsc2UgKSB7DQogICAgaWYgKCB0ZW1w
ID09IDggKSBkYXRhVHlwZSA9IFNUS19TSU5UODsNCiAgICBlbHNlIGlmICgg
dGVtcCA9PSAxNiApIGRhdGFUeXBlID0gU1RLX1NJTlQxNjsNCiAgICBlbHNl
IGlmICggdGVtcCA9PSAzMiApIGRhdGFUeXBlID0gU1RLX1NJTlQzMjsNCiAg
fQ0KICBlbHNlIHsNCiAgICBpZiAoIGZyZWFkKCZpZCwgNCwgMSwgZmQpICE9
IDEgKSBnb3RvIGVycm9yOw0KICAgIGlmICggKCFzdHJuY21wKGlkLCAiZmwz
MiIsIDQpIHx8ICFzdHJuY21wKGlkLCAiRkwzMiIsIDQpKSAmJiB0ZW1wID09
IDMyICkgZGF0YVR5cGUgPSBTVEtfRkxPQVQzMjsNCiAgICBlbHNlIGlmICgg
KCFzdHJuY21wKGlkLCAiZmw2NCIsIDQpIHx8ICFzdHJuY21wKGlkLCAiRkw2
NCIsIDQpKSAmJiB0ZW1wID09IDY0ICkgZGF0YVR5cGUgPSBTVEtfRkxPQVQ2
NDsNCiAgfQ0KICBpZiAoIGRhdGFUeXBlID09IDAgKSB7DQogICAgc3ByaW50
Zihtc2csICJXdkluOiAlZCBiaXRzIHBlciBzYW1wbGUgaW4gZmlsZSAlcyBh
cmUgbm90IHN1cHBvcnRlZC4iLCB0ZW1wLCBmaWxlTmFtZSk7DQogICAgcmV0
dXJuIGZhbHNlOw0KICB9DQoNCiAgLy8gU3RhcnQgYXQgdG9wIHRvIGZpbmQg
ZGF0YSAoU1NORCkgY2h1bmsgLi4uIGNodW5rIG9yZGVyIGlzIHVuZGVmaW5l
ZC4NCiAgaWYgKCBmc2VlayhmZCwgMTIsIFNFRUtfU0VUKSA9PSAtMSApIGdv
dG8gZXJyb3I7DQoNCiAgLy8gRmluZCBkYXRhIChTU05EKSBjaHVuaw0KICBp
ZiAoIGZyZWFkKCZpZCwgNCwgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0K
ICB3aGlsZSAoIHN0cm5jbXAoaWQsICJTU05EIiwgNCkgKSB7DQogICAgaWYg
KCBmcmVhZCgmY2h1bmtTaXplLCA0LCAxLCBmZCkgIT0gMSApIGdvdG8gZXJy
b3I7DQojaWZkZWYgX19MSVRUTEVfRU5ESUFOX18NCiAgICBzd2FwMzIoKHVu
c2lnbmVkIGNoYXIgKikmY2h1bmtTaXplKTsNCiNlbmRpZg0KICAgIGlmICgg
ZnNlZWsoZmQsIGNodW5rU2l6ZSwgU0VFS19DVVIpID09IC0xICkgZ290byBl
cnJvcjsNCiAgICBpZiAoIGZyZWFkKCZpZCwgNCwgMSwgZmQpICE9IDEgKSBn
b3RvIGVycm9yOw0KICB9DQoNCiAgLy8gU2tpcCBvdmVyIGNodW5rIHNpemUs
IG9mZnNldCwgYW5kIGJsb2Nrc2l6ZSBmaWVsZHMNCiAgaWYgKCBmc2Vlayhm
ZCwgMTIsIFNFRUtfQ1VSKSA9PSAtMSApIGdvdG8gZXJyb3I7DQoNCiAgZGF0
YU9mZnNldCA9IGZ0ZWxsKGZkKTsNCiAgYnl0ZXN3YXAgPSBmYWxzZTsNCiNp
ZmRlZiBfX0xJVFRMRV9FTkRJQU5fXw0KICBieXRlc3dhcCA9IHRydWU7DQoj
ZW5kaWYNCg0KICByZXR1cm4gdHJ1ZTsNCg0KIGVycm9yOg0KICBzcHJpbnRm
KG1zZywgIld2SW46IEVycm9yIHJlYWRpbmcgQUlGRiBmaWxlICglcykuIiwg
ZmlsZU5hbWUpOw0KICByZXR1cm4gZmFsc2U7DQp9DQoNCmJvb2wgV3ZJbiA6
OiBnZXRNYXRJbmZvKCBjb25zdCBjaGFyICpmaWxlTmFtZSApDQp7DQogIC8v
IFZlcmlmeSB0aGlzIGlzIGEgdmVyc2lvbiA1IE1BVC1maWxlIGZvcm1hdC4N
CiAgY2hhciBoZWFkWzRdOw0KICBpZiAoIGZzZWVrKGZkLCAwLCBTRUVLX1NF
VCkgPT0gLTEgKSBnb3RvIGVycm9yOw0KICBpZiAoIGZyZWFkKCZoZWFkLCA0
LCAxLCBmZCkgIT0gMSApIGdvdG8gZXJyb3I7DQogIC8vIElmIGFueSBvZiB0
aGUgZmlyc3QgNCBjaGFyYWN0ZXJzIG9mIHRoZSBoZWFkZXIgPSAwLCB0aGVu
IHRoaXMgaXMNCiAgLy8gYSBWZXJzaW9uIDQgTUFULWZpbGUuDQogIGlmICgg
c3Ryc3RyKGhlYWQsICIwIikgKSB7DQogICAgc3ByaW50Zihtc2csICJXdklu
OiAlcyBhcHBlYXJzIHRvIGJlIGEgVmVyc2lvbiA0IE1BVC1maWxlLCB3aGlj
aCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZC4iLA0KICAgICAgICAgICAg
ZmlsZU5hbWUpOw0KICAgIHJldHVybiBmYWxzZTsNCiAgfQ0KDQogIC8vIERl
dGVybWluZSB0aGUgZW5kaWFuLW5lc3Mgb2YgdGhlIGZpbGUuDQogIGNoYXIg
bWlbMl07DQogIGJ5dGVzd2FwID0gZmFsc2U7DQogIC8vIExvY2F0ZSAiTSIg
YW5kICJJIiBjaGFyYWN0ZXJzIGluIGhlYWRlci4NCiAgaWYgKCBmc2Vlayhm
ZCwgMTI2LCBTRUVLX1NFVCkgPT0gLTEgKSBnb3RvIGVycm9yOw0KICBpZiAo
IGZyZWFkKCZtaSwgMiwgMSwgZmQpICE9IDEpIGdvdG8gZXJyb3I7DQojaWZk
ZWYgX19MSVRUTEVfRU5ESUFOX18NCiAgaWYgKCAhc3RybmNtcChtaSwgIk1J
IiwgMikgKQ0KICAgIGJ5dGVzd2FwID0gdHJ1ZTsNCiAgZWxzZSBpZiAoIHN0
cm5jbXAobWksICJJTSIsIDIpICkgZ290byBlcnJvcjsNCiNlbHNlDQogIGlm
ICggIXN0cm5jbXAobWksICJJTSIsIDIpKQ0KICAgIGJ5dGVzd2FwID0gdHJ1
ZTsNCiAgZWxzZSBpZiAoIHN0cm5jbXAobWksICJNSSIsIDIpICkgZ290byBl
cnJvcjsNCiNlbmRpZg0KDQogIC8vIENoZWNrIHRoZSBkYXRhIGVsZW1lbnQg
dHlwZQ0KICBTSU5UMzIgZGF0YXR5cGU7DQogIGlmICggZnJlYWQoJmRhdGF0
eXBlLCA0LCAxLCBmZCkgIT0gMSApIGdvdG8gZXJyb3I7DQogIGlmICggYnl0
ZXN3YXAgKSBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikmZGF0YXR5cGUpOw0K
ICBpZiAoZGF0YXR5cGUgIT0gMTQpIHsNCiAgICBzcHJpbnRmKG1zZywgIld2
SW46IFRoZSBmaWxlIGRvZXMgbm90IGNvbnRhaW4gYSBzaW5nbGUgTWF0bGFi
IGFycmF5IChvciBtYXRyaXgpIGRhdGEgZWxlbWVudC4iKTsNCiAgICByZXR1
cm4gZmFsc2U7DQogIH0NCg0KICAvLyBEZXRlcm1pbmUgdGhlIGFycmF5IGRh
dGEgdHlwZS4NCiAgU0lOVDMyIHRtcDsNCiAgU0lOVDMyIHNpemU7DQogIGlm
ICggZnNlZWsoZmQsIDE2OCwgU0VFS19TRVQpID09IC0xICkgZ290byBlcnJv
cjsNCiAgaWYgKCBmcmVhZCgmdG1wLCA0LCAxLCBmZCkgIT0gMSApIGdvdG8g
ZXJyb3I7DQogIGlmIChieXRlc3dhcCkgc3dhcDMyKCh1bnNpZ25lZCBjaGFy
ICopJnRtcCk7DQogIGlmICh0bXAgPT0gMSkgeyAgLy8gYXJyYXkgbmFtZSA+
IDQgY2hhcmFjdGVycw0KICAgIGlmICggZnJlYWQoJnRtcCwgNCwgMSwgZmQp
ICE9IDEgKSBnb3RvIGVycm9yOyAgLy8gZ2V0IGFycmF5IG5hbWUgbGVuZ3Ro
DQogICAgaWYgKGJ5dGVzd2FwKSBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikm
dG1wKTsNCiAgICBzaXplID0gKFNJTlQzMikgY2VpbCgoZmxvYXQpdG1wIC8g
OCk7DQogICAgaWYgKCBmc2VlayhmZCwgc2l6ZSo4LCBTRUVLX0NVUikgPT0g
LTEgKSBnb3RvIGVycm9yOyAgLy8ganVtcCBvdmVyIGFycmF5IG5hbWUNCiAg
fQ0KICBlbHNlIHsgLy8gYXJyYXkgbmFtZSA8PSA0IGNoYXJhY3RlcnMsIGNv
bXByZXNzZWQgZGF0YSBlbGVtZW50DQogICAgaWYgKCBmc2VlayhmZCwgNCwg
U0VFS19DVVIpID09IC0xICkgZ290byBlcnJvcjsNCiAgfQ0KICBpZiAoIGZy
ZWFkKCZ0bXAsIDQsIDEsIGZkKSAhPSAxICkgZ290byBlcnJvcjsNCiAgaWYg
KGJ5dGVzd2FwKSBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikmdG1wKTsNCiAg
aWYgKCB0bXAgPT0gMSApIGRhdGFUeXBlID0gU1RLX1NJTlQ4Ow0KICBlbHNl
IGlmICggdG1wID09IDMgKSBkYXRhVHlwZSA9IFNUS19TSU5UMTY7DQogIGVs
c2UgaWYgKCB0bXAgPT0gNSApIGRhdGFUeXBlID0gU1RLX1NJTlQzMjsNCiAg
ZWxzZSBpZiAoIHRtcCA9PSA3ICkgZGF0YVR5cGUgPSBTVEtfRkxPQVQzMjsN
CiAgZWxzZSBpZiAoIHRtcCA9PSA5ICkgZGF0YVR5cGUgPSBTVEtfRkxPQVQ2
NDsNCiAgZWxzZSB7DQogICAgc3ByaW50Zihtc2csICJXdkluOiBUaGUgTUFU
LWZpbGUgYXJyYXkgZGF0YSBmb3JtYXQgKCVkKSBpcyBub3Qgc3VwcG9ydGVk
LiIsIHRtcCk7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQoNCiAgLy8gR2V0
IG51bWJlciBvZiByb3dzIGZyb20gdGhlIGhlYWRlci4NCiAgU0lOVDMyIHJv
d3M7DQogIGlmICggZnNlZWsoZmQsIDE2MCwgU0VFS19TRVQpID09IC0xICkg
Z290byBlcnJvcjsNCiAgaWYgKCBmcmVhZCgmcm93cywgNCwgMSwgZmQpICE9
IDEgKSBnb3RvIGVycm9yOw0KICBpZiAoYnl0ZXN3YXApIHN3YXAzMigodW5z
aWduZWQgY2hhciAqKSZyb3dzKTsNCg0KICAvLyBHZXQgbnVtYmVyIG9mIGNv
bHVtbnMgZnJvbSB0aGUgaGVhZGVyLg0KICBTSU5UMzIgY29sdW1uczsNCiAg
aWYgKCBmcmVhZCgmY29sdW1ucyw0LCAxLCBmZCkgIT0gMSApIGdvdG8gZXJy
b3I7DQogIGlmIChieXRlc3dhcCkgc3dhcDMyKCh1bnNpZ25lZCBjaGFyICop
JmNvbHVtbnMpOw0KDQogIC8vIEFzc3VtZSBjaGFubmVscyA9IHNtYWxsZXIg
b2Ygcm93cyBvciBjb2x1bW5zLg0KICBpZiAocm93cyA8IGNvbHVtbnMpIHsN
CiAgICBjaGFubmVscyA9IHJvd3M7DQogICAgZmlsZVNpemUgPSBjb2x1bW5z
Ow0KICB9DQogIGVsc2Ugew0KICAgIHNwcmludGYobXNnLCAiV3ZJbjogVHJh
bnNwb3NlIHRoZSBNQVQtZmlsZSBhcnJheSBzbyB0aGF0IGF1ZGlvIGNoYW5u
ZWxzIGZpbGwgbWF0cml4IHJvd3MgKG5vdCBjb2x1bW5zKS4iKTsNCiAgICBy
ZXR1cm4gZmFsc2U7DQogIH0NCiAgYnVmZmVyU2l6ZSA9IGZpbGVTaXplOw0K
ICBpZiAoZmlsZVNpemUgPiBDSFVOS19USFJFU0hPTEQpIHsNCiAgICBjaHVu
a2luZyA9IHRydWU7DQogICAgYnVmZmVyU2l6ZSA9IENIVU5LX1NJWkU7DQog
IH0NCg0KICAvLyBNb3ZlIHJlYWQgcG9pbnRlciB0byB0aGUgZGF0YSBpbiB0
aGUgZmlsZS4NCiAgU0lOVDMyIGhlYWRzaXplOw0KICBpZiAoIGZzZWVrKGZk
LCAxMzIsIFNFRUtfU0VUKSA9PSAtMSApIGdvdG8gZXJyb3I7DQogIGlmICgg
ZnJlYWQoJmhlYWRzaXplLCA0LCAxLCBmZCkgIT0gMSApIGdvdG8gZXJyb3I7
IC8vIGZpbGUgc2l6ZSBmcm9tIDEzMm5kIGJ5dGUNCiAgaWYgKGJ5dGVzd2Fw
KSBzd2FwMzIoKHVuc2lnbmVkIGNoYXIgKikmaGVhZHNpemUpOw0KICBoZWFk
c2l6ZSAtPSBmaWxlU2l6ZSAqIDggKiBjaGFubmVsczsNCiAgaWYgKCBmc2Vl
ayhmZCwgaGVhZHNpemUsIFNFRUtfQ1VSKSA9PSAtMSApIGdvdG8gZXJyb3I7
DQogIGRhdGFPZmZzZXQgPSBmdGVsbChmZCk7DQoNCiAgLy8gQXNzdW1lIE1B
VC1maWxlcyBoYXZlIDQ0MTAwIEh6IHNhbXBsZSByYXRlLg0KICBmaWxlUmF0
ZSA9IDQ0MTAwLjA7DQoNCiAgLy8gU2V0IGRlZmF1bHQgcmF0ZSBiYXNlZCBv
biBmaWxlIHNhbXBsaW5nIHJhdGUuDQogIHJhdGUgPSAoTVlfRkxPQVQpICgg
ZmlsZVJhdGUgLyBzYW1wbGVSYXRlKCkgKTsNCg0KICByZXR1cm4gdHJ1ZTsN
Cg0KIGVycm9yOg0KICBzcHJpbnRmKG1zZywgIld2SW46IEVycm9yIHJlYWRp
bmcgTUFULWZpbGUgKCVzKS4iLCBmaWxlTmFtZSk7DQogIHJldHVybiBmYWxz
ZTsNCn0NCg0Kdm9pZCBXdkluIDo6IHJlYWREYXRhKCB1bnNpZ25lZCBsb25n
IGluZGV4ICkNCnsNCiAgd2hpbGUgKGluZGV4IDwgKHVuc2lnbmVkIGxvbmcp
Y2h1bmtQb2ludGVyKSB7DQogICAgLy8gTmVnYXRpdmUgcmF0ZS4NCiAgICBj
aHVua1BvaW50ZXIgLT0gQ0hVTktfU0laRTsNCiAgICBidWZmZXJTaXplID0g
Q0hVTktfU0laRTsNCiAgICBpZiAoY2h1bmtQb2ludGVyIDwgMCkgew0KICAg
ICAgYnVmZmVyU2l6ZSArPSBjaHVua1BvaW50ZXI7DQogICAgICBjaHVua1Bv
aW50ZXIgPSAwOw0KICAgIH0NCiAgfQ0KICB3aGlsZSAoaW5kZXggPj0gY2h1
bmtQb2ludGVyK2J1ZmZlclNpemUpIHsNCiAgICAvLyBQb3NpdGl2ZSByYXRl
Lg0KICAgIGNodW5rUG9pbnRlciArPSBDSFVOS19TSVpFOw0KICAgIGJ1ZmZl
clNpemUgPSBDSFVOS19TSVpFOw0KICAgIGlmICggKHVuc2lnbmVkIGxvbmcp
Y2h1bmtQb2ludGVyK0NIVU5LX1NJWkUgPj0gZmlsZVNpemUpIHsNCiAgICAg
IGJ1ZmZlclNpemUgPSBmaWxlU2l6ZSAtIGNodW5rUG9pbnRlcjsNCiAgICB9
DQogIH0NCg0KICBsb25nIGksIGxlbmd0aCA9IGJ1ZmZlclNpemU7DQogIGJv
b2wgZW5kZmlsZSA9IChjaHVua1BvaW50ZXIrYnVmZmVyU2l6ZSA9PSBmaWxl
U2l6ZSk7DQogIGlmICggIWVuZGZpbGUgKSBsZW5ndGggKz0gMTsNCg0KICAv
LyBSZWFkIHNhbXBsZXMgaW50byBkYXRhW10uICBVc2UgTVlfRkxPQVQgZGF0
YSBzdHJ1Y3R1cmUNCiAgLy8gdG8gc3RvcmUgc2FtcGxlcy4NCiAgaWYgKCBk
YXRhVHlwZSA9PSBTVEtfU0lOVDE2ICkgew0KICAgIFNJTlQxNiAqYnVmID0g
KFNJTlQxNiAqKWRhdGE7DQogICAgaWYgKGZzZWVrKGZkLCBkYXRhT2Zmc2V0
Kyhsb25nKShjaHVua1BvaW50ZXIqY2hhbm5lbHMqMiksIFNFRUtfU0VUKSA9
PSAtMSkgZ290byBlcnJvcjsNCiAgICBpZiAoZnJlYWQoYnVmLCBsZW5ndGgq
Y2hhbm5lbHMsIDIsIGZkKSAhPSAyICkgZ290byBlcnJvcjsNCiAgICBpZiAo
IGJ5dGVzd2FwICkgew0KICAgICAgU0lOVDE2ICpwdHIgPSBidWY7DQogICAg
ICBmb3IgKGk9bGVuZ3RoKmNoYW5uZWxzLTE7IGk+PTA7IGktLSkNCiAgICAg
ICAgc3dhcDE2KCh1bnNpZ25lZCBjaGFyICopKHB0cisrKSk7DQogICAgfQ0K
ICAgIGZvciAoaT1sZW5ndGgqY2hhbm5lbHMtMTsgaT49MDsgaS0tKQ0KICAg
ICAgZGF0YVtpXSA9IGJ1ZltpXTsNCiAgfQ0KICBlbHNlIGlmICggZGF0YVR5
cGUgPT0gU1RLX1NJTlQzMiApIHsNCiAgICBTSU5UMzIgKmJ1ZiA9IChTSU5U
MzIgKilkYXRhOw0KICAgIGlmIChmc2VlayhmZCwgZGF0YU9mZnNldCsobG9u
ZykoY2h1bmtQb2ludGVyKmNoYW5uZWxzKjQpLCBTRUVLX1NFVCkgPT0gLTEp
IGdvdG8gZXJyb3I7DQogICAgaWYgKGZyZWFkKGJ1ZiwgbGVuZ3RoKmNoYW5u
ZWxzLCA0LCBmZCkgIT0gNCApIGdvdG8gZXJyb3I7DQogICAgaWYgKCBieXRl
c3dhcCApIHsNCiAgICAgIFNJTlQzMiAqcHRyID0gYnVmOw0KICAgICAgZm9y
IChpPWxlbmd0aCpjaGFubmVscy0xOyBpPj0wOyBpLS0pDQogICAgICAgIHN3
YXAzMigodW5zaWduZWQgY2hhciAqKShwdHIrKykpOw0KICAgIH0NCiAgICBm
b3IgKGk9bGVuZ3RoKmNoYW5uZWxzLTE7IGk+PTA7IGktLSkNCiAgICAgIGRh
dGFbaV0gPSBidWZbaV07DQogIH0NCiAgZWxzZSBpZiAoIGRhdGFUeXBlID09
IFNUS19GTE9BVDMyICkgew0KICAgIEZMT0FUMzIgKmJ1ZiA9IChGTE9BVDMy
ICopZGF0YTsNCiAgICBpZiAoZnNlZWsoZmQsIGRhdGFPZmZzZXQrKGxvbmcp
KGNodW5rUG9pbnRlcipjaGFubmVscyo0KSwgU0VFS19TRVQpID09IC0xKSBn
b3RvIGVycm9yOw0KICAgIGlmIChmcmVhZChidWYsIGxlbmd0aCpjaGFubmVs
cywgNCwgZmQpICE9IDQgKSBnb3RvIGVycm9yOw0KICAgIGlmICggYnl0ZXN3
YXAgKSB7DQogICAgICBGTE9BVDMyICpwdHIgPSBidWY7DQogICAgICBmb3Ig
KGk9bGVuZ3RoKmNoYW5uZWxzLTE7IGk+PTA7IGktLSkNCiAgICAgICAgc3dh
cDMyKCh1bnNpZ25lZCBjaGFyICopKHB0cisrKSk7DQogICAgfQ0KICAgIGZv
ciAoaT1sZW5ndGgqY2hhbm5lbHMtMTsgaT49MDsgaS0tKQ0KICAgICAgZGF0
YVtpXSA9IGJ1ZltpXTsNCiAgfQ0KICBlbHNlIGlmICggZGF0YVR5cGUgPT0g
U1RLX0ZMT0FUNjQgKSB7DQogICAgRkxPQVQ2NCAqYnVmID0gKEZMT0FUNjQg
KilkYXRhOw0KICAgIGlmIChmc2VlayhmZCwgZGF0YU9mZnNldCsobG9uZyko
Y2h1bmtQb2ludGVyKmNoYW5uZWxzKjgpLCBTRUVLX1NFVCkgPT0gLTEpIGdv
dG8gZXJyb3I7DQogICAgaWYgKGZyZWFkKGJ1ZiwgbGVuZ3RoKmNoYW5uZWxz
LCA4LCBmZCkgIT0gOCApIGdvdG8gZXJyb3I7DQogICAgaWYgKCBieXRlc3dh
cCApIHsNCiAgICAgIEZMT0FUNjQgKnB0ciA9IGJ1ZjsNCiAgICAgIGZvciAo
aT1sZW5ndGgqY2hhbm5lbHMtMTsgaT49MDsgaS0tKQ0KICAgICAgICBzd2Fw
NjQoKHVuc2lnbmVkIGNoYXIgKikocHRyKyspKTsNCiAgICB9DQogICAgZm9y
IChpPWxlbmd0aCpjaGFubmVscy0xOyBpPj0wOyBpLS0pDQogICAgICBkYXRh
W2ldID0gYnVmW2ldOw0KICB9DQogIGVsc2UgaWYgKCBkYXRhVHlwZSA9PSBT
VEtfU0lOVDggKSB7DQogICAgdW5zaWduZWQgY2hhciAqYnVmID0gKHVuc2ln
bmVkIGNoYXIgKilkYXRhOw0KICAgIGlmIChmc2VlayhmZCwgZGF0YU9mZnNl
dCsobG9uZykoY2h1bmtQb2ludGVyKmNoYW5uZWxzKSwgU0VFS19TRVQpID09
IC0xKSBnb3RvIGVycm9yOw0KICAgIGlmIChmcmVhZChidWYsIGxlbmd0aCpj
aGFubmVscywgMSwgZmQpICE9IDEgKSBnb3RvIGVycm9yOw0KICAgIGZvciAo
aT1sZW5ndGgqY2hhbm5lbHMtMTsgaT49MDsgaS0tKQ0KICAgICAgZGF0YVtp
XSA9IGJ1ZltpXSAtIDEyOC4wOyAgLy8gOC1iaXQgV0FWIGRhdGEgaXMgdW5z
aWduZWQhDQogIH0NCg0KICAvLyBJZiBhdCBlbmQgb2YgZmlsZSwgcmVwZWF0
IGxhc3Qgc2FtcGxlIGZyYW1lIGZvciBpbnRlcnBvbGF0aW9uLg0KICBpZiAo
IGVuZGZpbGUgKSB7DQogICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPGNo
YW5uZWxzOyBqKyspDQogICAgICBkYXRhW2J1ZmZlclNpemUqY2hhbm5lbHMr
al0gPSBkYXRhWyhidWZmZXJTaXplLTEpKmNoYW5uZWxzK2pdOw0KICB9DQoN
CiAgaWYgKCFjaHVua2luZykgew0KICAgIGZjbG9zZShmZCk7DQogICAgZmQg
PSAwOw0KICB9DQoNCiAgcmV0dXJuOw0KDQogZXJyb3I6DQogIHNwcmludGYo
bXNnLCAiV3ZJbjogRXJyb3IgcmVhZGluZyBmaWxlIGRhdGEuIik7DQogIGhh
bmRsZUVycm9yKG1zZywgU3RrRXJyb3I6OkZJTEVfRVJST1IpOw0KfQ0KDQp2
b2lkIFd2SW4gOjogcmVzZXQodm9pZCkNCnsNCiAgdGltZSA9IChNWV9GTE9B
VCkgMC4wOw0KICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8Y2hhbm5lbHM7
IGkrKykNCiAgICBsYXN0T3V0cHV0W2ldID0gKE1ZX0ZMT0FUKSAwLjA7DQog
IGZpbmlzaGVkID0gZmFsc2U7DQp9DQoNCnZvaWQgV3ZJbiA6OiBub3JtYWxp
emUodm9pZCkNCnsNCiAgdGhpcy0+bm9ybWFsaXplKChNWV9GTE9BVCkgMS4w
KTsNCn0NCg0KLy8gTm9ybWFsaXplIGFsbCBjaGFubmVscyBlcXVhbGx5IGJ5
IHRoZSBncmVhdGVzdCBtYWduaXR1ZGUgaW4gYWxsIG9mIHRoZSBkYXRhLg0K
dm9pZCBXdkluIDo6IG5vcm1hbGl6ZShNWV9GTE9BVCBwZWFrKQ0Kew0KICBp
ZiAoY2h1bmtpbmcpIHsNCiAgICBpZiAoIGRhdGFUeXBlID09IFNUS19TSU5U
OCApIGdhaW4gPSBwZWFrIC8gMTI4LjA7DQogICAgZWxzZSBpZiAoIGRhdGFU
eXBlID09IFNUS19TSU5UMTYgKSBnYWluID0gcGVhayAvIDMyNzY4LjA7DQog
ICAgZWxzZSBpZiAoIGRhdGFUeXBlID09IFNUS19TSU5UMzIgKSBnYWluID0g
cGVhayAvIDIxNDc0ODM2NDguMDsNCiAgICBlbHNlIGlmICggZGF0YVR5cGUg
PT0gU1RLX0ZMT0FUMzIgfHwgZGF0YVR5cGUgPT0gU1RLX0ZMT0FUNjQgKSBn
YWluID0gcGVhazsNCg0KICAgIHJldHVybjsNCiAgfQ0KDQogIHVuc2lnbmVk
IGxvbmcgaTsNCiAgTVlfRkxPQVQgbWF4ID0gKE1ZX0ZMT0FUKSAwLjA7DQoN
CiAgZm9yIChpPTA7IGk8Y2hhbm5lbHMqYnVmZmVyU2l6ZTsgaSsrKSB7DQog
ICAgaWYgKGZhYnMoZGF0YVtpXSkgPiBtYXgpDQogICAgICBtYXggPSAoTVlf
RkxPQVQpIGZhYnMoKGRvdWJsZSkgZGF0YVtpXSk7DQogIH0NCg0KICBpZiAo
bWF4ID4gMC4wKSB7DQogICAgbWF4ID0gKE1ZX0ZMT0FUKSAxLjAgLyBtYXg7
DQogICAgbWF4ICo9IHBlYWs7DQogICAgZm9yIChpPTA7aTw9Y2hhbm5lbHMq
YnVmZmVyU2l6ZTtpKyspDQoJICAgIGRhdGFbaV0gKj0gbWF4Ow0KICB9DQp9
DQoNCnVuc2lnbmVkIGxvbmcgV3ZJbiA6OiBnZXRTaXplKHZvaWQpIGNvbnN0
DQp7DQogIHJldHVybiBmaWxlU2l6ZTsNCn0NCg0KdW5zaWduZWQgaW50IFd2
SW4gOjogZ2V0Q2hhbm5lbHModm9pZCkgY29uc3QNCnsNCiAgcmV0dXJuIGNo
YW5uZWxzOw0KfQ0KDQpNWV9GTE9BVCBXdkluIDo6IGdldEZpbGVSYXRlKHZv
aWQpIGNvbnN0DQp7DQogIHJldHVybiBmaWxlUmF0ZTsNCn0NCg0KYm9vbCBX
dkluIDo6IGlzRmluaXNoZWQodm9pZCkgY29uc3QNCnsNCiAgcmV0dXJuIGZp
bmlzaGVkOw0KfQ0KDQp2b2lkIFd2SW4gOjogc2V0UmF0ZShNWV9GTE9BVCBh
UmF0ZSkNCnsNCiAgcmF0ZSA9IGFSYXRlOw0KDQogIC8vIElmIG5lZ2F0aXZl
IHJhdGUgYW5kIGF0IGJlZ2lubmluZyBvZiBzb3VuZCwgbW92ZSBwb2ludGVy
IHRvIGVuZA0KICAvLyBvZiBzb3VuZC4NCiAgaWYgKCAocmF0ZSA8IDApICYm
ICh0aW1lID09IDAuMCkgKSB0aW1lICs9IHJhdGUgKyBmaWxlU2l6ZTsNCg0K
ICBpZiAoZm1vZChyYXRlLCAxLjApICE9IDAuMCkgaW50ZXJwb2xhdGUgPSB0
cnVlOw0KICBlbHNlIGludGVycG9sYXRlID0gZmFsc2U7DQp9DQoNCnZvaWQg
V3ZJbiA6OiBhZGRUaW1lKE1ZX0ZMT0FUIGFUaW1lKSAgIA0Kew0KICAvLyBB
ZGQgYW4gYWJzb2x1dGUgdGltZSBpbiBzYW1wbGVzIA0KICB0aW1lICs9IGFU
aW1lOw0KDQogIGlmICh0aW1lIDwgMC4wKSB0aW1lID0gMC4wOw0KICBpZiAo
dGltZSA+PSBmaWxlU2l6ZSkgew0KICAgIHRpbWUgPSBmaWxlU2l6ZTsNCiAg
ICBmaW5pc2hlZCA9IHRydWU7DQogIH0NCn0NCg0Kdm9pZCBXdkluIDo6IHNl
dEludGVycG9sYXRlKGJvb2wgZG9JbnRlcnBvbGF0ZSkNCnsNCiAgaW50ZXJw
b2xhdGUgPSBkb0ludGVycG9sYXRlOw0KfQ0KDQpjb25zdCBNWV9GTE9BVCAq
V3ZJbiA6OiBsYXN0RnJhbWUodm9pZCkgY29uc3QNCnsNCiAgcmV0dXJuIGxh
c3RPdXRwdXQ7DQp9DQoNCk1ZX0ZMT0FUIFd2SW4gOjogbGFzdE91dCh2b2lk
KSBjb25zdA0Kew0KICBpZiAoIGNoYW5uZWxzID09IDEgKQ0KICAgIHJldHVy
biAqbGFzdE91dHB1dDsNCg0KICBNWV9GTE9BVCBvdXRwdXQgPSAwLjA7DQog
IGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxjaGFubmVsczsgaSsrICkgew0K
ICAgIG91dHB1dCArPSBsYXN0T3V0cHV0W2ldOw0KICB9DQogIHJldHVybiBv
dXRwdXQgLyBjaGFubmVsczsNCn0NCg0KTVlfRkxPQVQgV3ZJbiA6OiB0aWNr
KHZvaWQpDQp7DQogIHRpY2tGcmFtZSgpOw0KICByZXR1cm4gbGFzdE91dCgp
Ow0KfQ0KDQpNWV9GTE9BVCAqV3ZJbiA6OiB0aWNrKE1ZX0ZMT0FUICp2ZWN0
b3IsIHVuc2lnbmVkIGludCB2ZWN0b3JTaXplKQ0Kew0KICBmb3IgKCB1bnNp
Z25lZCBpbnQgaT0wOyBpPHZlY3RvclNpemU7IGkrKyApDQogICAgdmVjdG9y
W2ldID0gdGljaygpOw0KDQogIHJldHVybiB2ZWN0b3I7DQp9DQoNCmNvbnN0
IE1ZX0ZMT0FUICpXdkluIDo6IHRpY2tGcmFtZSh2b2lkKQ0Kew0KICByZWdp
c3RlciBNWV9GTE9BVCB0eW1lLCBhbHBoYTsNCiAgcmVnaXN0ZXIgdW5zaWdu
ZWQgbG9uZyBpLCBpbmRleDsNCg0KICBpZiAoZmluaXNoZWQpIHJldHVybiBs
YXN0T3V0cHV0Ow0KDQogIHR5bWUgPSB0aW1lOw0KICBpZiAoY2h1bmtpbmcp
IHsNCiAgICAvLyBDaGVjayB0aGUgdGltZSBhZGRyZXNzIHZzLiBvdXIgY3Vy
cmVudCBidWZmZXIgbGltaXRzLg0KICAgIGlmICggKHR5bWUgPCBjaHVua1Bv
aW50ZXIpIHx8ICh0eW1lID49IGNodW5rUG9pbnRlcitidWZmZXJTaXplKSAp
DQogICAgICB0aGlzLT5yZWFkRGF0YSgobG9uZykgdHltZSk7DQogICAgLy8g
QWRqdXN0IGluZGV4IGZvciB0aGUgY3VycmVudCBidWZmZXIuDQogICAgdHlt
ZSAtPSBjaHVua1BvaW50ZXI7DQogIH0NCg0KICAvLyBJbnRlZ2VyIHBhcnQg
b2YgdGltZSBhZGRyZXNzLg0KICBpbmRleCA9IChsb25nKSB0eW1lOw0KDQog
IGlmIChpbnRlcnBvbGF0ZSkgew0KICAgIC8vIExpbmVhciBpbnRlcnBvbGF0
aW9uIC4uLiBmcmFjdGlvbmFsIHBhcnQgb2YgdGltZSBhZGRyZXNzLg0KICAg
IGFscGhhID0gdHltZSAtIChNWV9GTE9BVCkgaW5kZXg7DQogICAgaW5kZXgg
Kj0gY2hhbm5lbHM7DQogICAgZm9yIChpPTA7IGk8Y2hhbm5lbHM7IGkrKykg
ew0KICAgICAgbGFzdE91dHB1dFtpXSA9IGRhdGFbaW5kZXhdOw0KICAgICAg
bGFzdE91dHB1dFtpXSArPSAoYWxwaGEgKiAoZGF0YVtpbmRleCtjaGFubmVs
c10gLSBsYXN0T3V0cHV0W2ldKSk7DQogICAgICBpbmRleCsrOw0KICAgIH0N
CiAgfQ0KICBlbHNlIHsNCiAgICBpbmRleCAqPSBjaGFubmVsczsNCiAgICBm
b3IgKGk9MDsgaTxjaGFubmVsczsgaSsrKQ0KICAgICAgbGFzdE91dHB1dFtp
XSA9IGRhdGFbaW5kZXgrK107DQogIH0NCg0KICBpZiAoY2h1bmtpbmcpIHsN
CiAgICAvLyBTY2FsZSBvdXRwdXRzIGJ5IGdhaW4uDQogICAgZm9yIChpPTA7
IGk8Y2hhbm5lbHM7IGkrKykgIGxhc3RPdXRwdXRbaV0gKj0gZ2FpbjsNCiAg
fQ0KDQogIC8vIEluY3JlbWVudCB0aW1lLCB3aGljaCBjYW4gYmUgbmVnYXRp
dmUuDQogIHRpbWUgKz0gcmF0ZTsNCiAgaWYgKCB0aW1lIDwgMC4wIHx8IHRp
bWUgPj0gZmlsZVNpemUgKSBmaW5pc2hlZCA9IHRydWU7DQoNCiAgcmV0dXJu
IGxhc3RPdXRwdXQ7DQp9DQoNCk1ZX0ZMT0FUICpXdkluIDo6IHRpY2tGcmFt
ZShNWV9GTE9BVCAqZnJhbWVWZWN0b3IsIHVuc2lnbmVkIGludCBmcmFtZXMp
DQp7DQogIHVuc2lnbmVkIGludCBqOw0KICBmb3IgKCB1bnNpZ25lZCBpbnQg
aT0wOyBpPGZyYW1lczsgaSsrICkgew0KICAgIHRpY2tGcmFtZSgpOw0KICAg
IGZvciAoIGo9MDsgajxjaGFubmVsczsgaisrICkNCiAgICAgIGZyYW1lVmVj
dG9yW2kqY2hhbm5lbHMral0gPSBsYXN0T3V0cHV0W2pdOw0KICB9DQoNCiAg
cmV0dXJuIGZyYW1lVmVjdG9yOw0KfQ0K
--1084984517-400078837-1048873231=:12874--