Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Dec 2004 17:50:21 +0600
From:      "musikcom" <musikcom@ngs.ru>
To:        freebsd-questions@freebsd.org
Subject:   Trouble with ULE scheduler
Message-ID:  <web-8514806@mx1.intranet.ru>

next in thread | raw e-mail | index | archive | help
This is a multi-part MIME message

--_===8514806====mx1.intranet.ru===_
Content-Type: text/plain; charset="KOI8-R"; format="flowed"
Content-Transfer-Encoding: 8bit

Hello!
I have some trouble with ULE scheduler. I have installed 
FreeBSD 5.3 When I try to use ULE scheduler (by editing 
GENERIC file), the message "The SCHED_ULE scheduler is 
broken. Please use SCHED_4BSD" message appear.

I do these steps:

cd /sys/i386/conf	OK
edit GENERIC		OK
config GENERIC		OK
cd ../compile/GENERIC	OK
make depend		FAILURE

I send copy of GENERIC, sched_ule.c files in attachment 
and also file out.txt

Please, help!!!
---------------------------------------------------------
http://mobile.ngs.ru/games - Java-игры для мобильников и не только...
http://love.ngs.ru - Знакомства в Новосибирске







--_===8514806====mx1.intranet.ru===_
Content-Type: text/plain
Content-Disposition: attachment;
 filename="Generic"
Content-Transfer-Encoding: base64

IwojIEdFTkVSSUMgLS0gR2VuZXJpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBG
cmVlQlNEL2kzODYKIwojIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZmlsZSwgcGxl
YXNlIHJlYWQgdGhlIGhhbmRib29rIHNlY3Rpb24gb24KIyBLZXJuZWwgQ29uZmlndXJhdGlv
biBGaWxlczoKIwojICAgIGh0dHA6Ly93d3cuRnJlZUJTRC5vcmcvZG9jL2VuX1VTLklTTzg4
NTktMS9ib29rcy9oYW5kYm9vay9rZXJuZWxjb25maWctY29uZmlnLmh0bWwKIwojIFRoZSBo
YW5kYm9vayBpcyBhbHNvIGF2YWlsYWJsZSBsb2NhbGx5IGluIC91c3Ivc2hhcmUvZG9jL2hh
bmRib29rCiMgaWYgeW91J3ZlIGluc3RhbGxlZCB0aGUgZG9jIGRpc3RyaWJ1dGlvbiwgb3Ro
ZXJ3aXNlIGFsd2F5cyBzZWUgdGhlCiMgRnJlZUJTRCBXb3JsZCBXaWRlIFdlYiBzZXJ2ZXIg
KGh0dHA6Ly93d3cuRnJlZUJTRC5vcmcvKSBmb3IgdGhlCiMgbGF0ZXN0IGluZm9ybWF0aW9u
LgojCiMgQW4gZXhoYXVzdGl2ZSBsaXN0IG9mIG9wdGlvbnMgYW5kIG1vcmUgZGV0YWlsZWQg
ZXhwbGFuYXRpb25zIG9mIHRoZQojIGRldmljZSBsaW5lcyBpcyBhbHNvIHByZXNlbnQgaW4g
dGhlIC4uLy4uL2NvbmYvTk9URVMgYW5kIE5PVEVTIGZpbGVzLgojIElmIHlvdSBhcmUgaW4g
ZG91YnQgYXMgdG8gdGhlIHB1cnBvc2Ugb3IgbmVjZXNzaXR5IG9mIGEgbGluZSwgY2hlY2sg
Zmlyc3QKIyBpbiBOT1RFUy4KIwojICRGcmVlQlNEOiBzcmMvc3lzL2kzODYvY29uZi9HRU5F
UklDLHYgMS40MTMuMi42LjIuMiAyMDA0LzEwLzI0IDE4OjAyOjUyIHNjb3R0bCBFeHAgJAoK
bWFjaGluZQkJaTM4NgpjcHUJCUk0ODZfQ1BVCmNwdQkJSTU4Nl9DUFUKY3B1CQlJNjg2X0NQ
VQppZGVudAkJR0VORVJJQwoKIyBUbyBzdGF0aWNhbGx5IGNvbXBpbGUgaW4gZGV2aWNlIHdp
cmluZyBpbnN0ZWFkIG9mIC9ib290L2RldmljZS5oaW50cwojaGludHMJCSJHRU5FUklDLmhp
bnRzIgkJIyBEZWZhdWx0IHBsYWNlcyB0byBsb29rIGZvciBkZXZpY2VzLgoKb3B0aW9ucyAJ
U0NIRURfVUxFCQkjIDRCU0Qgc2NoZWR1bGVyCm9wdGlvbnMgCUlORVQJCQkjIEludGVyTkVU
d29ya2luZwpvcHRpb25zIAlJTkVUNgkJCSMgSVB2NiBjb21tdW5pY2F0aW9ucyBwcm90b2Nv
bHMKb3B0aW9ucyAJRkZTCQkJIyBCZXJrZWxleSBGYXN0IEZpbGVzeXN0ZW0Kb3B0aW9ucyAJ
U09GVFVQREFURVMJCSMgRW5hYmxlIEZGUyBzb2Z0IHVwZGF0ZXMgc3VwcG9ydApvcHRpb25z
IAlVRlNfQUNMCQkJIyBTdXBwb3J0IGZvciBhY2Nlc3MgY29udHJvbCBsaXN0cwpvcHRpb25z
IAlVRlNfRElSSEFTSAkJIyBJbXByb3ZlIHBlcmZvcm1hbmNlIG9uIGJpZyBkaXJlY3Rvcmll
cwpvcHRpb25zIAlNRF9ST09UCQkJIyBNRCBpcyBhIHBvdGVudGlhbCByb290IGRldmljZQpv
cHRpb25zIAlORlNDTElFTlQJCSMgTmV0d29yayBGaWxlc3lzdGVtIENsaWVudApvcHRpb25z
IAlORlNTRVJWRVIJCSMgTmV0d29yayBGaWxlc3lzdGVtIFNlcnZlcgpvcHRpb25zIAlORlNf
Uk9PVAkJIyBORlMgdXNhYmxlIGFzIC8sIHJlcXVpcmVzIE5GU0NMSUVOVApvcHRpb25zIAlN
U0RPU0ZTCQkJIyBNU0RPUyBGaWxlc3lzdGVtCm9wdGlvbnMgCUNEOTY2MAkJCSMgSVNPIDk2
NjAgRmlsZXN5c3RlbQpvcHRpb25zIAlQUk9DRlMJCQkjIFByb2Nlc3MgZmlsZXN5c3RlbSAo
cmVxdWlyZXMgUFNFVURPRlMpCm9wdGlvbnMgCVBTRVVET0ZTCQkjIFBzZXVkby1maWxlc3lz
dGVtIGZyYW1ld29yawpvcHRpb25zIAlHRU9NX0dQVAkJIyBHVUlEIFBhcnRpdGlvbiBUYWJs
ZXMuCm9wdGlvbnMgCUNPTVBBVF80MwkJIyBDb21wYXRpYmxlIHdpdGggQlNEIDQuMyBbS0VF
UCBUSElTIV0Kb3B0aW9ucyAJQ09NUEFUX0ZSRUVCU0Q0CQkjIENvbXBhdGlibGUgd2l0aCBG
cmVlQlNENApvcHRpb25zIAlTQ1NJX0RFTEFZPTE1MDAwCSMgRGVsYXkgKGluIG1zKSBiZWZv
cmUgcHJvYmluZyBTQ1NJCm9wdGlvbnMgCUtUUkFDRQkJCSMga3RyYWNlKDEpIHN1cHBvcnQK
b3B0aW9ucyAJU1lTVlNITQkJCSMgU1lTVi1zdHlsZSBzaGFyZWQgbWVtb3J5Cm9wdGlvbnMg
CVNZU1ZNU0cJCQkjIFNZU1Ytc3R5bGUgbWVzc2FnZSBxdWV1ZXMKb3B0aW9ucyAJU1lTVlNF
TQkJCSMgU1lTVi1zdHlsZSBzZW1hcGhvcmVzCm9wdGlvbnMgCV9LUE9TSVhfUFJJT1JJVFlf
U0NIRURVTElORyAjIFBPU0lYIFAxMDAzXzFCIHJlYWwtdGltZSBleHRlbnNpb25zCm9wdGlv
bnMgCUtCRF9JTlNUQUxMX0NERVYJIyBpbnN0YWxsIGEgQ0RFViBlbnRyeSBpbiAvZGV2Cm9w
dGlvbnMgCUFIQ19SRUdfUFJFVFRZX1BSSU5UCSMgUHJpbnQgcmVnaXN0ZXIgYml0ZmllbGRz
IGluIGRlYnVnCgkJCQkJIyBvdXRwdXQuICBBZGRzIH4xMjhrIHRvIGRyaXZlci4Kb3B0aW9u
cyAJQUhEX1JFR19QUkVUVFlfUFJJTlQJIyBQcmludCByZWdpc3RlciBiaXRmaWVsZHMgaW4g
ZGVidWcKCQkJCQkjIG91dHB1dC4gIEFkZHMgfjIxNWsgdG8gZHJpdmVyLgpvcHRpb25zIAlB
REFQVElWRV9HSUFOVAkJIyBHaWFudCBtdXRleCBpcyBhZGFwdGl2ZS4KCmRldmljZQkJYXBp
YwkJIyBJL08gQVBJQwoKIyBCdXMgc3VwcG9ydC4gIERvIG5vdCByZW1vdmUgaXNhLCBldmVu
IGlmIHlvdSBoYXZlIG5vIGlzYSBzbG90cwpkZXZpY2UJCWlzYQpkZXZpY2UJCWVpc2EKZGV2
aWNlCQlwY2kKCiMgRmxvcHB5IGRyaXZlcwpkZXZpY2UJCWZkYwoKIyBBVEEgYW5kIEFUQVBJ
IGRldmljZXMKZGV2aWNlCQlhdGEKZGV2aWNlCQlhdGFkaXNrCQkjIEFUQSBkaXNrIGRyaXZl
cwpkZXZpY2UJCWF0YXJhaWQJCSMgQVRBIFJBSUQgZHJpdmVzCmRldmljZQkJYXRhcGljZAkJ
IyBBVEFQSSBDRFJPTSBkcml2ZXMKZGV2aWNlCQlhdGFwaWZkCQkjIEFUQVBJIGZsb3BweSBk
cml2ZXMKZGV2aWNlCQlhdGFwaXN0CQkjIEFUQVBJIHRhcGUgZHJpdmVzCm9wdGlvbnMgCUFU
QV9TVEFUSUNfSUQJIyBTdGF0aWMgZGV2aWNlIG51bWJlcmluZwoKIyBTQ1NJIENvbnRyb2xs
ZXJzCmRldmljZQkJYWhiCQkjIEVJU0EgQUhBMTc0MiBmYW1pbHkKZGV2aWNlCQlhaGMJCSMg
QUhBMjk0MCBhbmQgb25ib2FyZCBBSUM3eHh4IGRldmljZXMKZGV2aWNlCQlhaGQJCSMgQUhB
MzkzMjAvMjkzMjAgYW5kIG9uYm9hcmQgQUlDNzl4eCBkZXZpY2VzCmRldmljZQkJYW1kCQkj
IEFNRCA1M0M5NzQgKFRla3JhbSBEQy0zOTAoVCkpCmRldmljZQkJaXNwCQkjIFFsb2dpYyBm
YW1pbHkKZGV2aWNlCQltcHQJCSMgTFNJLUxvZ2ljIE1QVC1GdXNpb24KI2RldmljZQkJbmNy
CQkjIE5DUi9TeW1iaW9zIExvZ2ljCmRldmljZQkJc3ltCQkjIE5DUi9TeW1iaW9zIExvZ2lj
IChuZXdlciBjaGlwc2V0cyArIHRob3NlIG9mIGBuY3InKQpkZXZpY2UJCXRybQkJIyBUZWty
YW0gREMzOTVVL1VXL0YgREMzMTVVIGFkYXB0ZXJzCgpkZXZpY2UJCWFkdgkJIyBBZHZhbnN5
cyBTQ1NJIGFkYXB0ZXJzCmRldmljZQkJYWR3CQkjIEFkdmFuc3lzIHdpZGUgU0NTSSBhZGFw
dGVycwpkZXZpY2UJCWFoYQkJIyBBZGFwdGVjIDE1NHggU0NTSSBhZGFwdGVycwpkZXZpY2UJ
CWFpYwkJIyBBZGFwdGVjIDE1WzAxMl14IFNDU0kgYWRhcHRlcnMsIEFJQy02WzIzXTYwLgpk
ZXZpY2UJCWJ0CQkjIEJ1c2xvZ2ljL015bGV4IE11bHRpTWFzdGVyIFNDU0kgYWRhcHRlcnMK
CmRldmljZQkJbmN2CQkjIE5DUiA1M0M1MDAKZGV2aWNlCQluc3AJCSMgV29ya2JpdCBOaW5q
YSBTQ1NJLTMKZGV2aWNlCQlzdGcJCSMgVE1DIDE4QzMwLzE4QzUwCgojIFNDU0kgcGVyaXBo
ZXJhbHMKZGV2aWNlCQlzY2J1cwkJIyBTQ1NJIGJ1cyAocmVxdWlyZWQgZm9yIFNDU0kpCmRl
dmljZQkJY2gJCSMgU0NTSSBtZWRpYSBjaGFuZ2VycwpkZXZpY2UJCWRhCQkjIERpcmVjdCBB
Y2Nlc3MgKGRpc2tzKQpkZXZpY2UJCXNhCQkjIFNlcXVlbnRpYWwgQWNjZXNzICh0YXBlIGV0
YykKZGV2aWNlCQljZAkJIyBDRApkZXZpY2UJCXBhc3MJCSMgUGFzc3Rocm91Z2ggZGV2aWNl
IChkaXJlY3QgU0NTSSBhY2Nlc3MpCmRldmljZQkJc2VzCQkjIFNDU0kgRW52aXJvbm1lbnRh
bCBTZXJ2aWNlcyAoYW5kIFNBRi1URSkKCiMgUkFJRCBjb250cm9sbGVycyBpbnRlcmZhY2Vk
IHRvIHRoZSBTQ1NJIHN1YnN5c3RlbQpkZXZpY2UJCWFtcgkJIyBBTUkgTWVnYVJBSUQKZGV2
aWNlCQlhc3IJCSMgRFBUIFNtYXJ0UkFJRCBWLCBWSSBhbmQgQWRhcHRlYyBTQ1NJIFJBSUQK
ZGV2aWNlCQljaXNzCQkjIENvbXBhcSBTbWFydCBSQUlEIDUqCmRldmljZQkJZHB0CQkjIERQ
VCBTbWFydGNhY2hlIElJSSwgSVYgLSBTZWUgTk9URVMgZm9yIG9wdGlvbnMKZGV2aWNlCQlo
cHRtdgkJIyBIaWdocG9pbnQgUm9ja2V0UkFJRCAxODJ4CmRldmljZQkJaWlyCQkjIEludGVs
IEludGVncmF0ZWQgUkFJRApkZXZpY2UJCWlwcwkJIyBJQk0gKEFkYXB0ZWMpIFNlcnZlUkFJ
RApkZXZpY2UJCW1seQkJIyBNeWxleCBBY2NlbGVSQUlEL2VYdHJlbWVSQUlECmRldmljZQkJ
dHdhCQkjIDN3YXJlIDkwMDAgc2VyaWVzIFBBVEEvU0FUQSBSQUlECgojIFJBSUQgY29udHJv
bGxlcnMKZGV2aWNlCQlhYWMJCSMgQWRhcHRlYyBGU0EgUkFJRApkZXZpY2UJCWFhY3AJCSMg
U0NTSSBwYXNzdGhyb3VnaCBmb3IgYWFjIChyZXF1aXJlcyBDQU0pCmRldmljZQkJaWRhCQkj
IENvbXBhcSBTbWFydCBSQUlECmRldmljZQkJbWx4CQkjIE15bGV4IERBQzk2MCBmYW1pbHkK
ZGV2aWNlCQlwc3QJCSMgUHJvbWlzZSBTdXBlcnRyYWsgU1g2MDAwCmRldmljZQkJdHdlCQkj
IDN3YXJlIEFUQSBSQUlECgojIGF0a2JkYzAgY29udHJvbHMgYm90aCB0aGUga2V5Ym9hcmQg
YW5kIHRoZSBQUy8yIG1vdXNlCmRldmljZQkJYXRrYmRjCQkjIEFUIGtleWJvYXJkIGNvbnRy
b2xsZXIKZGV2aWNlCQlhdGtiZAkJIyBBVCBrZXlib2FyZApkZXZpY2UJCXBzbQkJIyBQUy8y
IG1vdXNlCgpkZXZpY2UJCXZnYQkJIyBWR0EgdmlkZW8gY2FyZCBkcml2ZXIKCmRldmljZQkJ
c3BsYXNoCQkjIFNwbGFzaCBzY3JlZW4gYW5kIHNjcmVlbiBzYXZlciBzdXBwb3J0CgojIHN5
c2NvbnMgaXMgdGhlIGRlZmF1bHQgY29uc29sZSBkcml2ZXIsIHJlc2VtYmxpbmcgYW4gU0NP
IGNvbnNvbGUKZGV2aWNlCQlzYwoKIyBFbmFibGUgdGhpcyBmb3IgdGhlIHBjdnQgKFZUMjIw
IGNvbXBhdGlibGUpIGNvbnNvbGUgZHJpdmVyCiNkZXZpY2UJCXZ0CiNvcHRpb25zIAlYU0VS
VkVSCQkjIHN1cHBvcnQgZm9yIFggc2VydmVyIG9uIGEgdnQgY29uc29sZQojb3B0aW9ucyAJ
RkFUX0NVUlNPUgkjIHN0YXJ0IHdpdGggYmxvY2sgY3Vyc29yCgpkZXZpY2UJCWFncAkJIyBz
dXBwb3J0IHNldmVyYWwgQUdQIGNoaXBzZXRzCgojIEZsb2F0aW5nIHBvaW50IHN1cHBvcnQg
LSBkbyBub3QgZGlzYWJsZS4KZGV2aWNlCQlucHgKCiMgUG93ZXIgbWFuYWdlbWVudCBzdXBw
b3J0IChzZWUgTk9URVMgZm9yIG1vcmUgb3B0aW9ucykKI2RldmljZQkJYXBtCiMgQWRkIHN1
c3BlbmQvcmVzdW1lIHN1cHBvcnQgZm9yIHRoZSBpODI1NC4KZGV2aWNlCQlwbXRpbWVyCgoj
IFBDQ0FSRCAoUENNQ0lBKSBzdXBwb3J0CiMgUENNQ0lBIGFuZCBjYXJkYnVzIGJyaWRnZSBz
dXBwb3J0CmRldmljZQkJY2JiCQkjIGNhcmRidXMgKHllbnRhKSBicmlkZ2UKZGV2aWNlCQlw
Y2NhcmQJCSMgUEMgQ2FyZCAoMTYtYml0KSBidXMKZGV2aWNlCQljYXJkYnVzCQkjIENhcmRC
dXMgKDMyLWJpdCkgYnVzCgojIFNlcmlhbCAoQ09NKSBwb3J0cwpkZXZpY2UJCXNpbwkJIyA4
MjUwLCAxNls0NV01MCBiYXNlZCBzZXJpYWwgcG9ydHMKCiMgUGFyYWxsZWwgcG9ydApkZXZp
Y2UJCXBwYwpkZXZpY2UJCXBwYnVzCQkjIFBhcmFsbGVsIHBvcnQgYnVzIChyZXF1aXJlZCkK
ZGV2aWNlCQlscHQJCSMgUHJpbnRlcgpkZXZpY2UJCXBsaXAJCSMgVENQL0lQIG92ZXIgcGFy
YWxsZWwKZGV2aWNlCQlwcGkJCSMgUGFyYWxsZWwgcG9ydCBpbnRlcmZhY2UgZGV2aWNlCiNk
ZXZpY2UJCXZwbwkJIyBSZXF1aXJlcyBzY2J1cyBhbmQgZGEKCiMgSWYgeW91J3ZlIGdvdCBh
ICJkdW1iIiBzZXJpYWwgb3IgcGFyYWxsZWwgUENJIGNhcmQgdGhhdCBpcwojIHN1cHBvcnRl
ZCBieSB0aGUgcHVjKDQpIGdsdWUgZHJpdmVyLCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZwoj
IGxpbmUgdG8gZW5hYmxlIGl0IChjb25uZWN0cyB0byB0aGUgc2lvIGFuZC9vciBwcGMgZHJp
dmVycyk6CiNkZXZpY2UgICAgICAgICBwdWMKCiMgUENJIEV0aGVybmV0IE5JQ3MuCmRldmlj
ZQkJZGUJCSMgREVDL0ludGVsIERDMjF4NHggKGBgVHVsaXAnJykKZGV2aWNlCQllbQkJIyBJ
bnRlbCBQUk8vMTAwMCBhZGFwdGVyIEdpZ2FiaXQgRXRoZXJuZXQgQ2FyZApkZXZpY2UJCWl4
Z2IJCSMgSW50ZWwgUFJPLzEwR2JFIEV0aGVybmV0IENhcmQKZGV2aWNlCQl0eHAJCSMgM0Nv
bSAzY1I5OTAgKGBgVHlwaG9vbicnKQpkZXZpY2UJCXZ4CQkjIDNDb20gM2M1OTAsIDNjNTk1
IChgYFZvcnRleCcnKQoKIyBQQ0kgRXRoZXJuZXQgTklDcyB0aGF0IHVzZSB0aGUgY29tbW9u
IE1JSSBidXMgY29udHJvbGxlciBjb2RlLgojIE5PVEU6IEJlIHN1cmUgdG8ga2VlcCB0aGUg
J2RldmljZSBtaWlidXMnIGxpbmUgaW4gb3JkZXIgdG8gdXNlIHRoZXNlIE5JQ3MhCmRldmlj
ZQkJbWlpYnVzCQkjIE1JSSBidXMgc3VwcG9ydApkZXZpY2UJCWJmZQkJIyBCcm9hZGNvbSBC
Q000NDB4IDEwLzEwMCBFdGhlcm5ldApkZXZpY2UJCWJnZQkJIyBCcm9hZGNvbSBCQ001NzB4
eCBHaWdhYml0IEV0aGVybmV0CmRldmljZQkJZGMJCSMgREVDL0ludGVsIDIxMTQzIGFuZCB2
YXJpb3VzIHdvcmthbGlrZXMKZGV2aWNlCQlmeHAJCSMgSW50ZWwgRXRoZXJFeHByZXNzIFBS
Ty8xMDBCICg4MjU1NywgODI1NTgpCmRldmljZQkJbGdlCQkjIExldmVsIDEgTFhUMTAwMSBn
aWdhYml0IGV0aGVybmV0CmRldmljZQkJbmdlCQkjIE5hdFNlbWkgRFA4MzgyMCBnaWdhYml0
IGV0aGVybmV0CmRldmljZQkJcGNuCQkjIEFNRCBBbTc5Qzk3eCBQQ0kgMTAvMTAwIChwcmVj
ZWRlbmNlIG92ZXIgJ2xuYycpCmRldmljZQkJcmUJCSMgUmVhbFRlayA4MTM5QysvODE2OS84
MTY5Uy84MTEwUwpkZXZpY2UJCXJsCQkjIFJlYWxUZWsgODEyOS84MTM5CmRldmljZQkJc2YJ
CSMgQWRhcHRlYyBBSUMtNjkxNSAoYGBTdGFyZmlyZScnKQpkZXZpY2UJCXNpcwkJIyBTaWxp
Y29uIEludGVncmF0ZWQgU3lzdGVtcyBTaVMgOTAwL1NpUyA3MDE2CmRldmljZQkJc2sJCSMg
U3lzS29ubmVjdCBTSy05ODR4ICYgU0stOTgyeCBnaWdhYml0IEV0aGVybmV0CmRldmljZQkJ
c3RlCQkjIFN1bmRhbmNlIFNUMjAxIChELUxpbmsgREZFLTU1MFRYKQpkZXZpY2UJCXRpCQkj
IEFsdGVvbiBOZXR3b3JrcyBUaWdvbiBJL0lJIGdpZ2FiaXQgRXRoZXJuZXQKZGV2aWNlCQl0
bAkJIyBUZXhhcyBJbnN0cnVtZW50cyBUaHVuZGVyTEFOCmRldmljZQkJdHgJCSMgU01DIEV0
aGVyUG93ZXIgSUkgKDgzYzE3MCBgYEVQSUMnJykKZGV2aWNlCQl2Z2UJCSMgVklBIFZUNjEy
eCBnaWdhYml0IGV0aGVybmV0CmRldmljZQkJdnIJCSMgVklBIFJoaW5lLCBSaGluZSBJSQpk
ZXZpY2UJCXdiCQkjIFdpbmJvbmQgVzg5Qzg0MEYKZGV2aWNlCQl4bAkJIyAzQ29tIDNjOTB4
IChgYEJvb21lcmFuZycnLCBgYEN5Y2xvbmUnJykKCiMgSVNBIEV0aGVybmV0IE5JQ3MuICBw
Y2NhcmQgTklDcyBpbmNsdWRlZC4KZGV2aWNlCQljcwkJIyBDcnlzdGFsIFNlbWljb25kdWN0
b3IgQ1M4OXgwIE5JQwojICdkZXZpY2UgZWQnIHJlcXVpcmVzICdkZXZpY2UgbWlpYnVzJwpk
ZXZpY2UJCWVkCQkjIE5FWzEyXTAwMCwgU01DIFVsdHJhLCAzYzUwMywgRFM4MzkwIGNhcmRz
CmRldmljZQkJZXgJCSMgSW50ZWwgRXRoZXJFeHByZXNzIFByby8xMCBhbmQgUHJvLzEwKwpk
ZXZpY2UJCWVwCQkjIEV0aGVybGluayBJSUkgYmFzZWQgY2FyZHMKZGV2aWNlCQlmZQkJIyBG
dWppdHN1IE1CODY5NnggYmFzZWQgY2FyZHMKZGV2aWNlCQlpZQkJIyBFdGhlckV4cHJlc3Mg
OC8xNiwgM0M1MDcsIFN0YXJMQU4gMTAgZXRjLgpkZXZpY2UJCWxuYwkJIyBORTIxMDAsIE5F
MzItVkwgTGFuY2UgRXRoZXJuZXQgY2FyZHMKZGV2aWNlCQlzbgkJIyBTTUMncyA5MDAwIHNl
cmllcyBvZiBFdGhlcm5ldCBjaGlwcwpkZXZpY2UJCXhlCQkjIFhpcmNvbSBwY2NhcmQgRXRo
ZXJuZXQKCiMgSVNBIGRldmljZXMgdGhhdCB1c2UgdGhlIG9sZCBJU0Egc2hpbXMKI2Rldmlj
ZQkJbGUKCiMgV2lyZWxlc3MgTklDIGNhcmRzCmRldmljZQkJd2xhbgkJIyA4MDIuMTEgc3Vw
cG9ydApkZXZpY2UJCWFuCQkjIEFpcm9uZXQgNDUwMC80ODAwIDgwMi4xMSB3aXJlbGVzcyBO
SUNzLgpkZXZpY2UJCWF3aQkJIyBCYXlTdGFjayA2NjAgYW5kIG90aGVycwpkZXZpY2UJCXdp
CQkjIFdhdmVMQU4vSW50ZXJzaWwvU3ltYm9sIDgwMi4xMSB3aXJlbGVzcyBOSUNzLgojZGV2
aWNlCQl3bAkJIyBPbGRlciBub24gODAyLjExIFdhdmVsYW4gd2lyZWxlc3MgTklDLgoKIyBQ
c2V1ZG8gZGV2aWNlcy4KZGV2aWNlCQlsb29wCQkjIE5ldHdvcmsgbG9vcGJhY2sKZGV2aWNl
CQltZW0JCSMgTWVtb3J5IGFuZCBrZXJuZWwgbWVtb3J5IGRldmljZXMKZGV2aWNlCQlpbwkJ
IyBJL08gZGV2aWNlCmRldmljZQkJcmFuZG9tCQkjIEVudHJvcHkgZGV2aWNlCmRldmljZQkJ
ZXRoZXIJCSMgRXRoZXJuZXQgc3VwcG9ydApkZXZpY2UJCXNsCQkjIEtlcm5lbCBTTElQCmRl
dmljZQkJcHBwCQkjIEtlcm5lbCBQUFAKZGV2aWNlCQl0dW4JCSMgUGFja2V0IHR1bm5lbC4K
ZGV2aWNlCQlwdHkJCSMgUHNldWRvLXR0eXMgKHRlbG5ldCBldGMpCmRldmljZQkJbWQJCSMg
TWVtb3J5ICJkaXNrcyIKZGV2aWNlCQlnaWYJCSMgSVB2NiBhbmQgSVB2NCB0dW5uZWxpbmcK
ZGV2aWNlCQlmYWl0aAkJIyBJUHY2LXRvLUlQdjQgcmVsYXlpbmcgKHRyYW5zbGF0aW9uKQoK
IyBUaGUgYGJwZicgZGV2aWNlIGVuYWJsZXMgdGhlIEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIu
CiMgQmUgYXdhcmUgb2YgdGhlIGFkbWluaXN0cmF0aXZlIGNvbnNlcXVlbmNlcyBvZiBlbmFi
bGluZyB0aGlzIQpkZXZpY2UJCWJwZgkJIyBCZXJrZWxleSBwYWNrZXQgZmlsdGVyCgojIFVT
QiBzdXBwb3J0CmRldmljZQkJdWhjaQkJIyBVSENJIFBDSS0+VVNCIGludGVyZmFjZQpkZXZp
Y2UJCW9oY2kJCSMgT0hDSSBQQ0ktPlVTQiBpbnRlcmZhY2UKZGV2aWNlCQl1c2IJCSMgVVNC
IEJ1cyAocmVxdWlyZWQpCiNkZXZpY2UJCXVkYnAJCSMgVVNCIERvdWJsZSBCdWxrIFBpcGUg
ZGV2aWNlcwpkZXZpY2UJCXVnZW4JCSMgR2VuZXJpYwpkZXZpY2UJCXVoaWQJCSMgIkh1bWFu
IEludGVyZmFjZSBEZXZpY2VzIgpkZXZpY2UJCXVrYmQJCSMgS2V5Ym9hcmQKZGV2aWNlCQl1
bHB0CQkjIFByaW50ZXIKZGV2aWNlCQl1bWFzcwkJIyBEaXNrcy9NYXNzIHN0b3JhZ2UgLSBS
ZXF1aXJlcyBzY2J1cyBhbmQgZGEKZGV2aWNlCQl1bXMJCSMgTW91c2UKZGV2aWNlCQl1cmlv
CQkjIERpYW1vbmQgUmlvIDUwMCBNUDMgcGxheWVyCmRldmljZQkJdXNjYW5uZXIJIyBTY2Fu
bmVycwojIFVTQiBFdGhlcm5ldCwgcmVxdWlyZXMgbWlpCmRldmljZQkJYXVlCQkjIEFETXRl
ayBVU0IgRXRoZXJuZXQKZGV2aWNlCQlheGUJCSMgQVNJWCBFbGVjdHJvbmljcyBVU0IgRXRo
ZXJuZXQKZGV2aWNlCQljdWUJCSMgQ0FUQyBVU0IgRXRoZXJuZXQKZGV2aWNlCQlrdWUJCSMg
S2F3YXNha2kgTFNJIFVTQiBFdGhlcm5ldApkZXZpY2UJCXJ1ZQkJIyBSZWFsVGVrIFJUTDgx
NTAgVVNCIEV0aGVybmV0CgojIEZpcmVXaXJlIHN1cHBvcnQKZGV2aWNlCQlmaXJld2lyZQkj
IEZpcmVXaXJlIGJ1cyBjb2RlCmRldmljZQkJc2JwCQkjIFNDU0kgb3ZlciBGaXJlV2lyZSAo
UmVxdWlyZXMgc2NidXMgYW5kIGRhKQpkZXZpY2UJCWZ3ZQkJIyBFdGhlcm5ldCBvdmVyIEZp
cmVXaXJlIChub24tc3RhbmRhcmQhKQo=

--_===8514806====mx1.intranet.ru===_
Content-Type: text/plain
Content-Disposition: attachment;
 filename="sched_ule.c"
Content-Transfer-Encoding: base64

LyotDQogKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMywgSmVmZnJleSBSb2JlcnNvbiA8amVm
ZkBmcmVlYnNkLm9yZz4NCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0DQogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCiAqIGFyZSBtZXQ6DQogKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0K
ICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQg
dGhlIGZvbGxvd2luZw0KICogICAgZGlzY2xhaW1lci4NCiAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQog
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlDQogKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICoNCiAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SDQogKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTDQogKiBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
Lg0KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULA0KICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUDQogKiBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsDQogKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkNCiAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQNCiAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRg0KICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAqLw0KDQojaW5jbHVkZSA8c3lz
L2NkZWZzLmg+DQpfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMva2Vybi9zY2hlZF91bGUu
Yyx2IDEuMTIxLjIuMTAuMi4xIDIwMDQvMTAvMjYgMDI6MjI6NTQgc2NvdHRsIEV4cCAkIik7
DQoNCiNpbmNsdWRlIDxvcHRfc2NoZWQuaD4NCg0KI2RlZmluZSBrc2UgdGRfc2NoZWQNCg0K
I2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KI2luY2x1ZGUgPHN5cy9zeXN0bS5oPg0KI2luY2x1
ZGUgPHN5cy9rZGIuaD4NCiNpbmNsdWRlIDxzeXMva2VybmVsLmg+DQojaW5jbHVkZSA8c3lz
L2t0ci5oPg0KI2luY2x1ZGUgPHN5cy9sb2NrLmg+DQojaW5jbHVkZSA8c3lzL211dGV4Lmg+
DQojaW5jbHVkZSA8c3lzL3Byb2MuaD4NCiNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4NCiNp
bmNsdWRlIDxzeXMvcmVzb3VyY2V2YXIuaD4NCiNpbmNsdWRlIDxzeXMvc2NoZWQuaD4NCiNp
bmNsdWRlIDxzeXMvc21wLmg+DQojaW5jbHVkZSA8c3lzL3N4Lmg+DQojaW5jbHVkZSA8c3lz
L3N5c2N0bC5oPg0KI2luY2x1ZGUgPHN5cy9zeXNwcm90by5oPg0KI2luY2x1ZGUgPHN5cy92
bW1ldGVyLmg+DQojaWZkZWYgS1RSQUNFDQojaW5jbHVkZSA8c3lzL3Vpby5oPg0KI2luY2x1
ZGUgPHN5cy9rdHJhY2UuaD4NCiNlbmRpZg0KDQojaW5jbHVkZSA8bWFjaGluZS9jcHUuaD4N
CiNpbmNsdWRlIDxtYWNoaW5lL3NtcC5oPg0KDQojZGVmaW5lIEtUUl9VTEUJS1RSX05GUw0K
DQojZXJyb3IgIlRoZSBTQ0hFRF9VTEUgc2NoZWR1bGVyIGlzIGJyb2tlbi4gIFBsZWFzZSB1
c2UgU0NIRURfNEJTRCINCg0KLyogZGVjYXkgOTUlIG9mIGBwX3BjdGNwdScgaW4gNjAgc2Vj
b25kczsgc2VlIENDUFVfU0hJRlQgYmVmb3JlIGNoYW5naW5nICovDQovKiBYWFggVGhpcyBp
cyBib2d1cyBjb21wYXRhYmlsaXR5IGNyYXAgZm9yIHBzICovDQpzdGF0aWMgZml4cHRfdCAg
Y2NwdSA9IDAuOTUxMjI5NDI0NTAwNzE0MDA5MDkgKiBGU0NBTEU7IC8qIGV4cCgtMS8yMCkg
Ki8NClNZU0NUTF9JTlQoX2tlcm4sIE9JRF9BVVRPLCBjY3B1LCBDVExGTEFHX1JELCAmY2Nw
dSwgMCwgIiIpOw0KDQpzdGF0aWMgdm9pZCBzY2hlZF9zZXR1cCh2b2lkICpkdW1teSk7DQpT
WVNJTklUKHNjaGVkX3NldHVwLCBTSV9TVUJfUlVOX1FVRVVFLCBTSV9PUkRFUl9GSVJTVCwg
c2NoZWRfc2V0dXAsIE5VTEwpDQoNCnN0YXRpYyBTWVNDVExfTk9ERShfa2VybiwgT0lEX0FV
VE8sIHNjaGVkLCBDVExGTEFHX1JXLCAwLCAiU2NoZWR1bGVyIik7DQoNClNZU0NUTF9TVFJJ
TkcoX2tlcm5fc2NoZWQsIE9JRF9BVVRPLCBuYW1lLCBDVExGTEFHX1JELCAidWxlIiwgMCwN
CiAgICAiU2NoZWR1bGVyIG5hbWUiKTsNCg0Kc3RhdGljIGludCBzbGljZV9taW4gPSAxOw0K
U1lTQ1RMX0lOVChfa2Vybl9zY2hlZCwgT0lEX0FVVE8sIHNsaWNlX21pbiwgQ1RMRkxBR19S
VywgJnNsaWNlX21pbiwgMCwgIiIpOw0KDQpzdGF0aWMgaW50IHNsaWNlX21heCA9IDEwOw0K
U1lTQ1RMX0lOVChfa2Vybl9zY2hlZCwgT0lEX0FVVE8sIHNsaWNlX21heCwgQ1RMRkxBR19S
VywgJnNsaWNlX21heCwgMCwgIiIpOw0KDQppbnQgcmVhbHN0YXRoejsNCmludCB0aWNraW5j
ciA9IDE7DQoNCiNpZmRlZiBQUkVFTVBUSU9ODQpzdGF0aWMgdm9pZA0KcHJpbnRmX2NhZGRy
X3Qodm9pZCAqZGF0YSkNCnsNCglwcmludGYoIiVzIiwgKGNoYXIgKilkYXRhKTsNCn0NCnN0
YXRpYyBjaGFyIHByZWVtcHRfd2FybmluZ1tdID0NCiAgICAiV0FSTklORzogS2VybmVsIFBS
RUVNUFRJT04gaXMgdW5zdGFibGUgdW5kZXIgU0NIRURfVUxFLlxuIjsgDQpTWVNJTklUKHBy
ZWVtcHRfd2FybmluZywgU0lfU1VCX0NPUFlSSUdIVCwgU0lfT1JERVJfQU5ZLCBwcmludGZf
Y2FkZHJfdCwNCiAgICBwcmVlbXB0X3dhcm5pbmcpDQojZW5kaWYNCg0KLyoNCiAqIFRoZSBz
Y2hlZHVsYWJsZSBlbnRpdHkgdGhhdCBjYW4gYmUgZ2l2ZW4gYSBjb250ZXh0IHRvIHJ1bi4N
CiAqIEEgcHJvY2VzcyBtYXkgaGF2ZSBzZXZlcmFsIG9mIHRoZXNlLiBQcm9iYWJseSBvbmUg
cGVyIHByb2Nlc3Nvcg0KICogYnV0IHBvc2libHkgYSBmZXcgbW9yZS4gSW4gdGhpcyB1bml2
ZXJzZSB0aGV5IGFyZSBncm91cGVkDQogKiB3aXRoIGEgS1NFRyB0aGF0IGNvbnRhaW5zIHRo
ZSBwcmlvcml0eSBhbmQgbmljZW5lc3MNCiAqIGZvciB0aGUgZ3JvdXAuDQogKi8NCnN0cnVj
dCBrc2Ugew0KCVRBSUxRX0VOVFJZKGtzZSkga2Vfa2dsaXN0OwkvKiAoKikgUXVldWUgb2Yg
dGhyZWFkcyBpbiBrZV9rc2VncnAuICovDQoJVEFJTFFfRU5UUlkoa3NlKSBrZV9rZ3JsaXN0
OwkvKiAoKikgUXVldWUgb2YgdGhyZWFkcyBpbiB0aGlzIHN0YXRlLiovDQoJVEFJTFFfRU5U
Ulkoa3NlKSBrZV9wcm9jcTsJLyogKGoveikgUnVuIHF1ZXVlLiAqLw0KCWludAkJa2VfZmxh
Z3M7CS8qIChqKSBLRUZfKiBmbGFncy4gKi8NCglzdHJ1Y3QgdGhyZWFkCSprZV90aHJlYWQ7
CS8qICgqKSBBY3RpdmUgYXNzb2NpYXRlZCB0aHJlYWQuICovDQoJZml4cHRfdAkJa2VfcGN0
Y3B1OwkvKiAoaikgJWNwdSBkdXJpbmcgcF9zd3RpbWUuICovDQoJdV9jaGFyCQlrZV9vbmNw
dTsJLyogKGopIFdoaWNoIGNwdSB3ZSBhcmUgb24uICovDQoJY2hhcgkJa2VfcnFpbmRleDsJ
LyogKGopIFJ1biBxdWV1ZSBpbmRleC4gKi8NCgllbnVtIHsNCgkJS0VTX1RIUkVBRCA9IDB4
MCwJLyogc2xhdmVkIHRvIHRocmVhZCBzdGF0ZSAqLw0KCQlLRVNfT05SVU5RDQoJfSBrZV9z
dGF0ZTsJCQkvKiAoaikgdGhyZWFkIHNjaGVkIHNwZWNpZmljIHN0YXR1cy4gKi8NCglpbnQJ
CWtlX3NscHRpbWU7DQoJaW50CQlrZV9zbGljZTsNCglzdHJ1Y3QgcnVucQkqa2VfcnVucTsN
Cgl1X2NoYXIJCWtlX2NwdTsJCS8qIENQVSB0aGF0IHdlIGhhdmUgYWZmaW5pdHkgZm9yLiAq
Lw0KCS8qIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBvbmx5IHVzZWQgZm9yIHBjdGNw
dSBjYWxjdWxhdGlvbiAqLw0KCWludAkJa2VfbHRpY2s7CS8qIExhc3QgdGljayB0aGF0IHdl
IHdlcmUgcnVubmluZyBvbiAqLw0KCWludAkJa2VfZnRpY2s7CS8qIEZpcnN0IHRpY2sgdGhh
dCB3ZSB3ZXJlIHJ1bm5pbmcgb24gKi8NCglpbnQJCWtlX3RpY2tzOwkvKiBUaWNrIGNvdW50
ICovDQoNCn07DQoNCg0KI2RlZmluZSB0ZF9rc2UgdGRfc2NoZWQNCiNkZWZpbmUJdGRfc2xw
dGltZQkJdGRfa3NlLT5rZV9zbHB0aW1lDQojZGVmaW5lIGtlX3Byb2MJCQlrZV90aHJlYWQt
PnRkX3Byb2MNCiNkZWZpbmUga2Vfa3NlZ3JwCQlrZV90aHJlYWQtPnRkX2tzZWdycA0KDQov
KiBmbGFncyBrZXB0IGluIGtlX2ZsYWdzICovDQojZGVmaW5lCUtFRl9TQ0hFRDAJMHgwMDAw
MQkvKiBGb3Igc2NoZWR1bGVyLXNwZWNpZmljIHVzZS4gKi8NCiNkZWZpbmUJS0VGX1NDSEVE
MQkweDAwMDAyCS8qIEZvciBzY2hlZHVsZXItc3BlY2lmaWMgdXNlLiAqLw0KI2RlZmluZQlL
RUZfU0NIRUQyCTB4MDAwMDQJLyogRm9yIHNjaGVkdWxlci1zcGVjaWZpYyB1c2UuICovDQoj
ZGVmaW5lCUtFRl9TQ0hFRDMJMHgwMDAwOAkvKiBGb3Igc2NoZWR1bGVyLXNwZWNpZmljIHVz
ZS4gKi8NCiNkZWZpbmUJS0VGX0RJRFJVTgkweDAyMDAwCS8qIFRocmVhZCBhY3R1YWxseSBy
YW4uICovDQojZGVmaW5lCUtFRl9FWElUCTB4MDQwMDAJLyogVGhyZWFkIGlzIGJlaW5nIGtp
bGxlZC4gKi8NCg0KLyoNCiAqIFRoZXNlIGRhdGFzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQg
d2l0aGluIHRoZWlyIHBhcmVudCBkYXRhc3RydWN0dXJlIGJ1dA0KICogYXJlIHNjaGVkdWxl
ciBzcGVjaWZpYy4NCiAqLw0KDQojZGVmaW5lCWtlX2Fzc2lnbglrZV9wcm9jcS50cWVfbmV4
dA0KDQojZGVmaW5lCUtFRl9BU1NJR05FRAlLRUZfU0NIRUQwCS8qIFRocmVhZCBpcyBiZWlu
ZyBtaWdyYXRlZC4gKi8NCiNkZWZpbmUJS0VGX0JPVU5ECUtFRl9TQ0hFRDEJLyogVGhyZWFk
IGNhbiBub3QgbWlncmF0ZS4gKi8NCiNkZWZpbmUJS0VGX1hGRVJBQkxFCUtFRl9TQ0hFRDIJ
LyogVGhyZWFkIHdhcyBhZGRlZCBhcyB0cmFuc2ZlcmFibGUuICovDQojZGVmaW5lCUtFRl9I
T0xECUtFRl9TQ0hFRDMJLyogVGhyZWFkIGlzIHRlbXBvcmFyaWx5IGJvdW5kLiAqLw0KDQpz
dHJ1Y3Qga2dfc2NoZWQgew0KCXN0cnVjdCB0aHJlYWQJKnNrZ19sYXN0X2Fzc2lnbmVkOyAv
KiAoaikgTGFzdCB0aHJlYWQgYXNzaWduZWQgdG8gKi8NCgkJCQkJICAgLyogdGhlIHN5c3Rl
bSBzY2hlZHVsZXIgKi8NCglpbnQJc2tnX3NscHRpbWU7CQkvKiBOdW1iZXIgb2YgdGlja3Mg
d2Ugdm9sLiBzbGVwdCAqLw0KCWludAlza2dfcnVudGltZTsJCS8qIE51bWJlciBvZiB0aWNr
cyB3ZSB3ZXJlIHJ1bm5pbmcgKi8NCglpbnQJc2tnX2F2YWlsX29wZW5uaW5nczsJLyogKGop
IE51bSB1bmZpbGxlZCBzbG90cyBpbiBncm91cC4qLw0KCWludAlza2dfY29uY3VycmVuY3k7
CS8qIChqKSBOdW0gdGhyZWFkcyByZXF1ZXN0ZWQgaW4gZ3JvdXAuKi8NCglpbnQJc2tnX3J1
bnFfdGhyZWFkczsJLyogKGopIE51bSBLU0VzIG9uIHJ1bnEuICovDQp9Ow0KI2RlZmluZSBr
Z19sYXN0X2Fzc2lnbmVkCWtnX3NjaGVkLT5za2dfbGFzdF9hc3NpZ25lZA0KI2RlZmluZSBr
Z19hdmFpbF9vcGVubmluZ3MJa2dfc2NoZWQtPnNrZ19hdmFpbF9vcGVubmluZ3MNCiNkZWZp
bmUga2dfY29uY3VycmVuY3kJCWtnX3NjaGVkLT5za2dfY29uY3VycmVuY3kNCiNkZWZpbmUg
a2dfcnVucV90aHJlYWRzCQlrZ19zY2hlZC0+c2tnX3J1bnFfdGhyZWFkcw0KI2RlZmluZSBr
Z19ydW50aW1lCQlrZ19zY2hlZC0+c2tnX3J1bnRpbWUNCiNkZWZpbmUga2dfc2xwdGltZQkJ
a2dfc2NoZWQtPnNrZ19zbHB0aW1lDQoNCiNkZWZpbmUgU0xPVF9SRUxFQVNFKGtnKQkJCQkJ
CVwNCmRvIHsJCQkJCQkJCQlcDQoJa2ctPmtnX2F2YWlsX29wZW5uaW5ncysrOyAJCQkJCVwN
CglDVFIzKEtUUl9SVU5RLCAia2cgJXAoJWQpIFNsb3QgcmVsZWFzZWQgKC0+JWQpIiwJCVwN
CglrZywJCQkJCQkJCVwNCglrZy0+a2dfY29uY3VycmVuY3ksCQkJCQkJXA0KCSBrZy0+a2df
YXZhaWxfb3Blbm5pbmdzKTsJCQkJCVwNCgkvKktBU1NFUlQoKGtnLT5rZ19hdmFpbF9vcGVu
bmluZ3MgPD0ga2ctPmtnX2NvbmN1cnJlbmN5KSwJXA0KCSAgICAoInNsb3RzIG91dCBvZiB3
aGFjayIpKTsgKi8JCQkJCVwNCn0gd2hpbGUgKDApDQoNCiNkZWZpbmUgU0xPVF9VU0Uoa2cp
CQkJCQkJCVwNCmRvIHsJCQkJCQkJCQlcDQoJa2ctPmtnX2F2YWlsX29wZW5uaW5ncy0tOyAJ
CQkJCVwNCglDVFIzKEtUUl9SVU5RLCAia2cgJXAoJWQpIFNsb3QgdXNlZCAoLT4lZCkiLAkJ
CVwNCglrZywJCQkJCQkJCVwNCglrZy0+a2dfY29uY3VycmVuY3ksCQkJCQkJXA0KCSBrZy0+
a2dfYXZhaWxfb3Blbm5pbmdzKTsJCQkJCVwNCgkvKktBU1NFUlQoKGtnLT5rZ19hdmFpbF9v
cGVubmluZ3MgPj0gMCksCQkJXA0KCSAgICAoInNsb3RzIG91dCBvZiB3aGFjayIpKTsqLyAJ
CQkJCVwNCn0gd2hpbGUgKDApDQoNCnN0YXRpYyBzdHJ1Y3Qga3NlIGtzZTA7DQpzdGF0aWMg
c3RydWN0IGtnX3NjaGVkIGtnX3NjaGVkMDsNCg0KLyoNCiAqIFRoZSBwcmlvcml0eSBpcyBw
cmltYXJpbHkgZGV0ZXJtaW5lZCBieSB0aGUgaW50ZXJhY3Rpdml0eSBzY29yZS4gIFRodXMs
IHdlDQogKiBnaXZlIGxvd2VyKGJldHRlcikgcHJpb3JpdGllcyB0byBrc2UgZ3JvdXBzIHRo
YXQgdXNlIGxlc3MgQ1BVLiAgVGhlIG5pY2UNCiAqIHZhbHVlIGlzIHRoZW4gZGlyZWN0bHkg
YWRkZWQgdG8gdGhpcyB0byBhbGxvdyBuaWNlIHRvIGhhdmUgc29tZSBlZmZlY3QNCiAqIG9u
IGxhdGVuY3kuDQogKg0KICogUFJJX1JBTkdFOglUb3RhbCBwcmlvcml0eSByYW5nZSBmb3Ig
dGltZXNoYXJlIHRocmVhZHMuDQogKiBQUklfTlJFU1Y6CU51bWJlciBvZiBuaWNlIHZhbHVl
cy4NCiAqIFBSSV9CQVNFOglUaGUgc3RhcnQgb2YgdGhlIGR5bmFtaWMgcmFuZ2UuDQogKi8N
CiNkZWZpbmUJU0NIRURfUFJJX1JBTkdFCQkoUFJJX01BWF9USU1FU0hBUkUgLSBQUklfTUlO
X1RJTUVTSEFSRSArIDEpDQojZGVmaW5lCVNDSEVEX1BSSV9OUkVTVgkJKChQUklPX01BWCAt
IFBSSU9fTUlOKSArIDEpDQojZGVmaW5lCVNDSEVEX1BSSV9OSEFMRgkJKFNDSEVEX1BSSV9O
UkVTViAvIDIpDQojZGVmaW5lCVNDSEVEX1BSSV9CQVNFCQkoUFJJX01JTl9USU1FU0hBUkUp
DQojZGVmaW5lCVNDSEVEX1BSSV9JTlRFUkFDVChzY29yZSkJCQkJCVwNCiAgICAoKHNjb3Jl
KSAqIFNDSEVEX1BSSV9SQU5HRSAvIFNDSEVEX0lOVEVSQUNUX01BWCkNCg0KLyoNCiAqIFRo
ZXNlIGRldGVybWluZSB0aGUgaW50ZXJhY3Rpdml0eSBvZiBhIHByb2Nlc3MuDQogKg0KICog
U0xQX1JVTl9NQVg6CU1heGltdW0gYW1vdW50IG9mIHNsZWVwIHRpbWUgKyBydW4gdGltZSB3
ZSdsbCBhY2N1bXVsYXRlDQogKgkJYmVmb3JlIHRocm90dGxpbmcgYmFjay4NCiAqIFNMUF9S
VU5fRk9SSzoJTWF4aW11bSBzbHArcnVuIHRpbWUgdG8gaW5oZXJpdCBhdCBmb3JrIHRpbWUu
DQogKiBJTlRFUkFDVF9NQVg6CU1heGltdW0gaW50ZXJhY3Rpdml0eSB2YWx1ZS4gIFNtYWxs
ZXIgaXMgYmV0dGVyLg0KICogSU5URVJBQ1RfVEhSRVNIOglUaHJlc2hob2xkIGZvciBwbGFj
ZW1lbnQgb24gdGhlIGN1cnJlbnQgcnVucS4NCiAqLw0KI2RlZmluZQlTQ0hFRF9TTFBfUlVO
X01BWAkoKGh6ICogNSkgPDwgMTApDQojZGVmaW5lCVNDSEVEX1NMUF9SVU5fRk9SSwkoKGh6
IC8gMikgPDwgMTApDQojZGVmaW5lCVNDSEVEX0lOVEVSQUNUX01BWAkoMTAwKQ0KI2RlZmlu
ZQlTQ0hFRF9JTlRFUkFDVF9IQUxGCShTQ0hFRF9JTlRFUkFDVF9NQVggLyAyKQ0KI2RlZmlu
ZQlTQ0hFRF9JTlRFUkFDVF9USFJFU0gJKDMwKQ0KDQovKg0KICogVGhlc2UgcGFyYW1ldGVy
cyBhbmQgbWFjcm9zIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgdGltZSBzbGljZSB0aGF0
IGlzDQogKiBncmFudGVkIHRvIGVhY2ggdGhyZWFkLg0KICoNCiAqIFNMSUNFX01JTjoJTWlu
aW11bSB0aW1lIHNsaWNlIGdyYW50ZWQsIGluIHVuaXRzIG9mIHRpY2tzLg0KICogU0xJQ0Vf
TUFYOglNYXhpbXVtIHRpbWUgc2xpY2UgZ3JhbnRlZC4NCiAqIFNMSUNFX1JBTkdFOglSYW5n
ZSBvZiBhdmFpbGFibGUgdGltZSBzbGljZXMgc2NhbGVkIGJ5IGh6Lg0KICogU0xJQ0VfU0NB
TEU6CVRoZSBudW1iZXIgc2xpY2VzIGdyYW50ZWQgcGVyIHZhbCBpbiB0aGUgcmFuZ2Ugb2Yg
WzAsIG1heF0uDQogKiBTTElDRV9OSUNFOiAgRGV0ZXJtaW5lIHRoZSBhbW91bnQgb2Ygc2xp
Y2UgZ3JhbnRlZCB0byBhIHNjYWxlZCBuaWNlLg0KICogU0xJQ0VfTlRIUkVTSDoJVGhlIG5p
Y2UgY3V0b2ZmIHBvaW50IGZvciBzbGljZSBhc3NpZ25tZW50Lg0KICovDQojZGVmaW5lCVND
SEVEX1NMSUNFX01JTgkJCShzbGljZV9taW4pDQojZGVmaW5lCVNDSEVEX1NMSUNFX01BWAkJ
CShzbGljZV9tYXgpDQojZGVmaW5lCVNDSEVEX1NMSUNFX0lOVEVSQUNUSVZFCQkoc2xpY2Vf
bWF4KQ0KI2RlZmluZQlTQ0hFRF9TTElDRV9OVEhSRVNICShTQ0hFRF9QUklfTkhBTEYgLSAx
KQ0KI2RlZmluZQlTQ0hFRF9TTElDRV9SQU5HRQkJKFNDSEVEX1NMSUNFX01BWCAtIFNDSEVE
X1NMSUNFX01JTiArIDEpDQojZGVmaW5lCVNDSEVEX1NMSUNFX1NDQUxFKHZhbCwgbWF4KQko
KCh2YWwpICogU0NIRURfU0xJQ0VfUkFOR0UpIC8gKG1heCkpDQojZGVmaW5lCVNDSEVEX1NM
SUNFX05JQ0UobmljZSkJCQkJCQlcDQogICAgKFNDSEVEX1NMSUNFX01BWCAtIFNDSEVEX1NM
SUNFX1NDQUxFKChuaWNlKSwgU0NIRURfU0xJQ0VfTlRIUkVTSCkpDQoNCi8qDQogKiBUaGlz
IG1hY3JvIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHRocmVhZCBiZWxvbmdzIG9u
IHRoZSBjdXJyZW50IG9yDQogKiBuZXh0IHJ1biBxdWV1ZS4NCiAqLw0KI2RlZmluZQlTQ0hF
RF9JTlRFUkFDVElWRShrZykJCQkJCQlcDQogICAgKHNjaGVkX2ludGVyYWN0X3Njb3JlKGtn
KSA8IFNDSEVEX0lOVEVSQUNUX1RIUkVTSCkNCiNkZWZpbmUJU0NIRURfQ1VSUihrZywga2Up
CQkJCQkJXA0KICAgIChrZS0+a2VfdGhyZWFkLT50ZF9wcmlvcml0eSA8IGtnLT5rZ191c2Vy
X3ByaSB8fAkJCVwNCiAgICBTQ0hFRF9JTlRFUkFDVElWRShrZykpDQoNCi8qDQogKiBDcHUg
cGVyY2VudGFnZSBjb21wdXRhdGlvbiBtYWNyb3MgYW5kIGRlZmluZXMuDQogKg0KICogU0NI
RURfQ1BVX1RJTUU6CU51bWJlciBvZiBzZWNvbmRzIHRvIGF2ZXJhZ2UgdGhlIGNwdSB1c2Fn
ZSBhY3Jvc3MuDQogKiBTQ0hFRF9DUFVfVElDS1M6CU51bWJlciBvZiBoeiB0aWNrcyB0byBh
dmVyYWdlIHRoZSBjcHUgdXNhZ2UgYWNyb3NzLg0KICovDQoNCiNkZWZpbmUJU0NIRURfQ1BV
X1RJTUUJMTANCiNkZWZpbmUJU0NIRURfQ1BVX1RJQ0tTCShoeiAqIFNDSEVEX0NQVV9USU1F
KQ0KDQovKg0KICoga3NlcSAtIHBlciBwcm9jZXNzb3IgcnVucXMgYW5kIHN0YXRpc3RpY3Mu
DQogKi8NCnN0cnVjdCBrc2VxIHsNCglzdHJ1Y3QgcnVucQlrc3FfaWRsZTsJCS8qIFF1ZXVl
IG9mIElETEUgdGhyZWFkcy4gKi8NCglzdHJ1Y3QgcnVucQlrc3FfdGltZXNoYXJlWzJdOwkv
KiBSdW4gcXVldWVzIGZvciAhSURMRS4gKi8NCglzdHJ1Y3QgcnVucQkqa3NxX25leHQ7CQkv
KiBOZXh0IHRpbWVzaGFyZSBxdWV1ZS4gKi8NCglzdHJ1Y3QgcnVucQkqa3NxX2N1cnI7CQkv
KiBDdXJyZW50IHF1ZXVlLiAqLw0KCWludAkJa3NxX2xvYWRfdGltZXNoYXJlOwkvKiBMb2Fk
IGZvciB0aW1lc2hhcmUuICovDQoJaW50CQlrc3FfbG9hZDsJCS8qIEFnZ3JlZ2F0ZSBsb2Fk
LiAqLw0KCXNob3J0CQlrc3FfbmljZVtTQ0hFRF9QUklfTlJFU1ZdOyAvKiBLU0VzIGluIGVh
Y2ggbmljZSBiaW4uICovDQoJc2hvcnQJCWtzcV9uaWNlbWluOwkJLyogTGVhc3QgbmljZS4g
Ki8NCiNpZmRlZiBTTVANCglpbnQJCQlrc3FfdHJhbnNmZXJhYmxlOw0KCUxJU1RfRU5UUlko
a3NlcSkJa3NxX3NpYmxpbmdzOwkvKiBOZXh0IGluIGtzZXEgZ3JvdXAuICovDQoJc3RydWN0
IGtzZXFfZ3JvdXAJKmtzcV9ncm91cDsJLyogT3VyIHByb2Nlc3NvciBncm91cC4gKi8NCgl2
b2xhdGlsZSBzdHJ1Y3Qga3NlCSprc3FfYXNzaWduZWQ7CS8qIGFzc2lnbmVkIGJ5IGFub3Ro
ZXIgQ1BVLiAqLw0KI2Vsc2UNCglpbnQJCWtzcV9zeXNsb2FkOwkJLyogRm9yIGxvYWRhdmcs
ICFJVEhEIGxvYWQuICovDQojZW5kaWYNCn07DQoNCiNpZmRlZiBTTVANCi8qDQogKiBrc2Vx
IGdyb3VwcyBhcmUgZ3JvdXBzIG9mIHByb2Nlc3NvcnMgd2hpY2ggY2FuIGNoZWFwbHkgc2hh
cmUgdGhyZWFkcy4gIFdoZW4NCiAqIG9uZSBwcm9jZXNzb3IgaW4gdGhlIGdyb3VwIGdvZXMg
aWRsZSBpdCB3aWxsIGNoZWNrIHRoZSBydW5xcyBvZiB0aGUgb3RoZXINCiAqIHByb2Nlc3Nv
cnMgaW4gaXRzIGdyb3VwIHByaW9yIHRvIGhhbHRpbmcgYW5kIHdhaXRpbmcgZm9yIGFuIGlu
dGVycnVwdC4NCiAqIFRoZXNlIGdyb3VwcyBhcmUgc3VpdGFibGUgZm9yIFNNVCAoU3ltZXRy
aWMgTXVsdGktVGhyZWFkaW5nKSBhbmQgbm90IE5VTUEuDQogKiBJbiBhIG51bWEgZW52aXJv
bm1lbnQgd2UnZCB3YW50IGFuIGlkbGUgYml0bWFwIHBlciBncm91cCBhbmQgYSB0d28gdGll
cmVkDQogKiBsb2FkIGJhbGFuY2VyLg0KICovDQpzdHJ1Y3Qga3NlcV9ncm91cCB7DQoJaW50
CWtzZ19jcHVzOwkJLyogQ291bnQgb2YgQ1BVcyBpbiB0aGlzIGtzZXEgZ3JvdXAuICovDQoJ
Y3B1bWFza190IGtzZ19jcHVtYXNrOwkJLyogTWFzayBvZiBjcHVzIGluIHRoaXMgZ3JvdXAu
ICovDQoJY3B1bWFza190IGtzZ19pZGxlbWFzazsJCS8qIElkbGUgY3B1cyBpbiB0aGlzIGdy
b3VwLiAqLw0KCWNwdW1hc2tfdCBrc2dfbWFzazsJCS8qIEJpdCBtYXNrIGZvciBmaXJzdCBj
cHUuICovDQoJaW50CWtzZ19sb2FkOwkJLyogVG90YWwgbG9hZCBvZiB0aGlzIGdyb3VwLiAq
Lw0KCWludAlrc2dfdHJhbnNmZXJhYmxlOwkvKiBUcmFuc2ZlcmFibGUgbG9hZCBvZiB0aGlz
IGdyb3VwLiAqLw0KCUxJU1RfSEVBRCgsIGtzZXEpCWtzZ19tZW1iZXJzOyAvKiBMaW5rZWQg
bGlzdCBvZiBhbGwgbWVtYmVycy4gKi8NCn07DQojZW5kaWYNCg0KLyoNCiAqIE9uZSBrc2Ug
cXVldWUgcGVyIHByb2Nlc3Nvci4NCiAqLw0KI2lmZGVmIFNNUA0Kc3RhdGljIGNwdW1hc2tf
dCBrc2VxX2lkbGU7DQpzdGF0aWMgaW50IGtzZ19tYXhpZDsNCnN0YXRpYyBzdHJ1Y3Qga3Nl
cQlrc2VxX2NwdVtNQVhDUFVdOw0Kc3RhdGljIHN0cnVjdCBrc2VxX2dyb3VwIGtzZXFfZ3Jv
dXBzW01BWENQVV07DQpzdGF0aWMgaW50IGJhbF90aWNrOw0Kc3RhdGljIGludCBnYmFsX3Rp
Y2s7DQoNCiNkZWZpbmUJS1NFUV9TRUxGKCkJKCZrc2VxX2NwdVtQQ1BVX0dFVChjcHVpZCld
KQ0KI2RlZmluZQlLU0VRX0NQVSh4KQkoJmtzZXFfY3B1Wyh4KV0pDQojZGVmaW5lCUtTRVFf
SUQoeCkJKCh4KSAtIGtzZXFfY3B1KQ0KI2RlZmluZQlLU0VRX0dST1VQKHgpCSgma3NlcV9n
cm91cHNbKHgpXSkNCiNlbHNlCS8qICFTTVAgKi8NCnN0YXRpYyBzdHJ1Y3Qga3NlcQlrc2Vx
X2NwdTsNCg0KI2RlZmluZQlLU0VRX1NFTEYoKQkoJmtzZXFfY3B1KQ0KI2RlZmluZQlLU0VR
X0NQVSh4KQkoJmtzZXFfY3B1KQ0KI2VuZGlmDQoNCnN0YXRpYyB2b2lkCXNsb3RfZmlsbChz
dHJ1Y3Qga3NlZ3JwICprZyk7DQpzdGF0aWMgc3RydWN0IGtzZSAqc2NoZWRfY2hvb3NlKHZv
aWQpOwkJLyogWFhYIFNob3VsZCBiZSB0aHJlYWQgKiAqLw0Kc3RhdGljIHZvaWQgc2NoZWRf
YWRkX2ludGVybmFsKHN0cnVjdCB0aHJlYWQgKnRkLCBpbnQgcHJlZW1wdGl2ZSk7DQpzdGF0
aWMgdm9pZCBzY2hlZF9zbGljZShzdHJ1Y3Qga3NlICprZSk7DQpzdGF0aWMgdm9pZCBzY2hl
ZF9wcmlvcml0eShzdHJ1Y3Qga3NlZ3JwICprZyk7DQpzdGF0aWMgaW50IHNjaGVkX2ludGVy
YWN0X3Njb3JlKHN0cnVjdCBrc2VncnAgKmtnKTsNCnN0YXRpYyB2b2lkIHNjaGVkX2ludGVy
YWN0X3VwZGF0ZShzdHJ1Y3Qga3NlZ3JwICprZyk7DQpzdGF0aWMgdm9pZCBzY2hlZF9pbnRl
cmFjdF9mb3JrKHN0cnVjdCBrc2VncnAgKmtnKTsNCnN0YXRpYyB2b2lkIHNjaGVkX3BjdGNw
dV91cGRhdGUoc3RydWN0IGtzZSAqa2UpOw0KDQovKiBPcGVyYXRpb25zIG9uIHBlciBwcm9j
ZXNzb3IgcXVldWVzICovDQpzdGF0aWMgc3RydWN0IGtzZSAqIGtzZXFfY2hvb3NlKHN0cnVj
dCBrc2VxICprc2VxKTsNCnN0YXRpYyB2b2lkIGtzZXFfc2V0dXAoc3RydWN0IGtzZXEgKmtz
ZXEpOw0Kc3RhdGljIHZvaWQga3NlcV9sb2FkX2FkZChzdHJ1Y3Qga3NlcSAqa3NlcSwgc3Ry
dWN0IGtzZSAqa2UpOw0Kc3RhdGljIHZvaWQga3NlcV9sb2FkX3JlbShzdHJ1Y3Qga3NlcSAq
a3NlcSwgc3RydWN0IGtzZSAqa2UpOw0Kc3RhdGljIF9faW5saW5lIHZvaWQga3NlcV9ydW5x
X2FkZChzdHJ1Y3Qga3NlcSAqa3NlcSwgc3RydWN0IGtzZSAqa2UpOw0Kc3RhdGljIF9faW5s
aW5lIHZvaWQga3NlcV9ydW5xX3JlbShzdHJ1Y3Qga3NlcSAqa3NlcSwgc3RydWN0IGtzZSAq
a2UpOw0Kc3RhdGljIHZvaWQga3NlcV9uaWNlX2FkZChzdHJ1Y3Qga3NlcSAqa3NlcSwgaW50
IG5pY2UpOw0Kc3RhdGljIHZvaWQga3NlcV9uaWNlX3JlbShzdHJ1Y3Qga3NlcSAqa3NlcSwg
aW50IG5pY2UpOw0Kdm9pZCBrc2VxX3ByaW50KGludCBjcHUpOw0KI2lmZGVmIFNNUA0Kc3Rh
dGljIGludCBrc2VxX3RyYW5zZmVyKHN0cnVjdCBrc2VxICprc3EsIHN0cnVjdCBrc2UgKmtl
LCBpbnQgY2xhc3MpOw0Kc3RhdGljIHN0cnVjdCBrc2UgKnJ1bnFfc3RlYWwoc3RydWN0IHJ1
bnEgKnJxKTsNCnN0YXRpYyB2b2lkIHNjaGVkX2JhbGFuY2Uodm9pZCk7DQpzdGF0aWMgdm9p
ZCBzY2hlZF9iYWxhbmNlX2dyb3Vwcyh2b2lkKTsNCnN0YXRpYyB2b2lkIHNjaGVkX2JhbGFu
Y2VfZ3JvdXAoc3RydWN0IGtzZXFfZ3JvdXAgKmtzZyk7DQpzdGF0aWMgdm9pZCBzY2hlZF9i
YWxhbmNlX3BhaXIoc3RydWN0IGtzZXEgKmhpZ2gsIHN0cnVjdCBrc2VxICpsb3cpOw0Kc3Rh
dGljIHZvaWQga3NlcV9tb3ZlKHN0cnVjdCBrc2VxICpmcm9tLCBpbnQgY3B1KTsNCnN0YXRp
YyBpbnQga3NlcV9pZGxlZChzdHJ1Y3Qga3NlcSAqa3NlcSk7DQpzdGF0aWMgdm9pZCBrc2Vx
X25vdGlmeShzdHJ1Y3Qga3NlICprZSwgaW50IGNwdSk7DQpzdGF0aWMgdm9pZCBrc2VxX2Fz
c2lnbihzdHJ1Y3Qga3NlcSAqKTsNCnN0YXRpYyBzdHJ1Y3Qga3NlICprc2VxX3N0ZWFsKHN0
cnVjdCBrc2VxICprc2VxLCBpbnQgc3RlYWxpZGxlKTsNCi8qDQogKiBPbiBQNCBYZW9ucyB0
aGUgcm91bmQtcm9iaW4gaW50ZXJydXB0IGRlbGl2ZXJ5IGlzIGJyb2tlbi4gIEFzIGEgcmVz
dWx0IG9mDQogKiB0aGlzLCB3ZSBjYW4ndCBwaW4gaW50ZXJydXB0cyB0byB0aGUgY3B1IHRo
YXQgdGhleSB3ZXJlIGRlbGl2ZXJlZCB0bywgDQogKiBvdGhlcndpc2UgYWxsIGl0aHJlYWRz
IG9ubHkgcnVuIG9uIENQVSAwLg0KICovDQojaWZkZWYgX19pMzg2X18NCiNkZWZpbmUJS1NF
X0NBTl9NSUdSQVRFKGtlLCBjbGFzcykJCQkJCVwNCiAgICAoKGtlKS0+a2VfdGhyZWFkLT50
ZF9waW5uZWQgPT0gMCAmJiAoKGtlKS0+a2VfZmxhZ3MgJiBLRUZfQk9VTkQpID09IDApDQoj
ZWxzZSAvKiAhX19pMzg2X18gKi8NCiNkZWZpbmUJS1NFX0NBTl9NSUdSQVRFKGtlLCBjbGFz
cykJCQkJCVwNCiAgICAoKGNsYXNzKSAhPSBQUklfSVRIRCAmJiAoa2UpLT5rZV90aHJlYWQt
PnRkX3Bpbm5lZCA9PSAwICYmCQlcDQogICAgKChrZSktPmtlX2ZsYWdzICYgS0VGX0JPVU5E
KSA9PSAwKQ0KI2VuZGlmIC8qICFfX2kzODZfXyAqLw0KI2VuZGlmDQoNCnZvaWQNCmtzZXFf
cHJpbnQoaW50IGNwdSkNCnsNCglzdHJ1Y3Qga3NlcSAqa3NlcTsNCglpbnQgaTsNCg0KCWtz
ZXEgPSBLU0VRX0NQVShjcHUpOw0KDQoJcHJpbnRmKCJrc2VxOlxuIik7DQoJcHJpbnRmKCJc
dGxvYWQ6ICAgICAgICAgICAlZFxuIiwga3NlcS0+a3NxX2xvYWQpOw0KCXByaW50ZigiXHRs
b2FkIFRJTUVTSEFSRTogJWRcbiIsIGtzZXEtPmtzcV9sb2FkX3RpbWVzaGFyZSk7DQojaWZk
ZWYgU01QDQoJcHJpbnRmKCJcdGxvYWQgdHJhbnNmZXJhYmxlOiAlZFxuIiwga3NlcS0+a3Nx
X3RyYW5zZmVyYWJsZSk7DQojZW5kaWYNCglwcmludGYoIlx0bmljZW1pbjpcdCVkXG4iLCBr
c2VxLT5rc3FfbmljZW1pbik7DQoJcHJpbnRmKCJcdG5pY2UgY291bnRzOlxuIik7DQoJZm9y
IChpID0gMDsgaSA8IFNDSEVEX1BSSV9OUkVTVjsgaSsrKQ0KCQlpZiAoa3NlcS0+a3NxX25p
Y2VbaV0pDQoJCQlwcmludGYoIlx0XHQlZCA9ICVkXG4iLA0KCQkJICAgIGkgLSBTQ0hFRF9Q
UklfTkhBTEYsIGtzZXEtPmtzcV9uaWNlW2ldKTsNCn0NCg0Kc3RhdGljIF9faW5saW5lIHZv
aWQNCmtzZXFfcnVucV9hZGQoc3RydWN0IGtzZXEgKmtzZXEsIHN0cnVjdCBrc2UgKmtlKQ0K
ew0KI2lmZGVmIFNNUA0KCWlmIChLU0VfQ0FOX01JR1JBVEUoa2UsIFBSSV9CQVNFKGtlLT5r
ZV9rc2VncnAtPmtnX3ByaV9jbGFzcykpKSB7DQoJCWtzZXEtPmtzcV90cmFuc2ZlcmFibGUr
KzsNCgkJa3NlcS0+a3NxX2dyb3VwLT5rc2dfdHJhbnNmZXJhYmxlKys7DQoJCWtlLT5rZV9m
bGFncyB8PSBLRUZfWEZFUkFCTEU7DQoJfQ0KI2VuZGlmDQoJcnVucV9hZGQoa2UtPmtlX3J1
bnEsIGtlLCAwKTsNCn0NCg0Kc3RhdGljIF9faW5saW5lIHZvaWQNCmtzZXFfcnVucV9yZW0o
c3RydWN0IGtzZXEgKmtzZXEsIHN0cnVjdCBrc2UgKmtlKQ0Kew0KI2lmZGVmIFNNUA0KCWlm
IChrZS0+a2VfZmxhZ3MgJiBLRUZfWEZFUkFCTEUpIHsNCgkJa3NlcS0+a3NxX3RyYW5zZmVy
YWJsZS0tOw0KCQlrc2VxLT5rc3FfZ3JvdXAtPmtzZ190cmFuc2ZlcmFibGUtLTsNCgkJa2Ut
PmtlX2ZsYWdzICY9IH5LRUZfWEZFUkFCTEU7DQoJfQ0KI2VuZGlmDQoJcnVucV9yZW1vdmUo
a2UtPmtlX3J1bnEsIGtlKTsNCn0NCg0Kc3RhdGljIHZvaWQNCmtzZXFfbG9hZF9hZGQoc3Ry
dWN0IGtzZXEgKmtzZXEsIHN0cnVjdCBrc2UgKmtlKQ0Kew0KCWludCBjbGFzczsNCgltdHhf
YXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7DQoJY2xhc3MgPSBQUklfQkFTRShrZS0+
a2Vfa3NlZ3JwLT5rZ19wcmlfY2xhc3MpOw0KCWlmIChjbGFzcyA9PSBQUklfVElNRVNIQVJF
KQ0KCQlrc2VxLT5rc3FfbG9hZF90aW1lc2hhcmUrKzsNCglrc2VxLT5rc3FfbG9hZCsrOw0K
CWlmIChjbGFzcyAhPSBQUklfSVRIRCAmJiAoa2UtPmtlX3Byb2MtPnBfZmxhZyAmIFBfTk9M
T0FEKSA9PSAwKQ0KI2lmZGVmIFNNUA0KCQlrc2VxLT5rc3FfZ3JvdXAtPmtzZ19sb2FkKys7
DQojZWxzZQ0KCQlrc2VxLT5rc3Ffc3lzbG9hZCsrOw0KI2VuZGlmDQoJaWYgKGtlLT5rZV9r
c2VncnAtPmtnX3ByaV9jbGFzcyA9PSBQUklfVElNRVNIQVJFKQ0KCQlDVFI2KEtUUl9VTEUs
DQoJCSAgICAiQWRkIGtzZSAlcCB0byAlcCAoc2xpY2U6ICVkLCBwcmk6ICVkLCBuaWNlOiAl
ZCglZCkpIiwNCgkJICAgIGtlLCBrZS0+a2VfcnVucSwga2UtPmtlX3NsaWNlLCBrZS0+a2Vf
dGhyZWFkLT50ZF9wcmlvcml0eSwNCgkJICAgIGtlLT5rZV9wcm9jLT5wX25pY2UsIGtzZXEt
PmtzcV9uaWNlbWluKTsNCglpZiAoa2UtPmtlX2tzZWdycC0+a2dfcHJpX2NsYXNzID09IFBS
SV9USU1FU0hBUkUpDQoJCWtzZXFfbmljZV9hZGQoa3NlcSwga2UtPmtlX3Byb2MtPnBfbmlj
ZSk7DQp9DQoNCnN0YXRpYyB2b2lkDQprc2VxX2xvYWRfcmVtKHN0cnVjdCBrc2VxICprc2Vx
LCBzdHJ1Y3Qga3NlICprZSkNCnsNCglpbnQgY2xhc3M7DQoJbXR4X2Fzc2VydCgmc2NoZWRf
bG9jaywgTUFfT1dORUQpOw0KCWNsYXNzID0gUFJJX0JBU0Uoa2UtPmtlX2tzZWdycC0+a2df
cHJpX2NsYXNzKTsNCglpZiAoY2xhc3MgPT0gUFJJX1RJTUVTSEFSRSkNCgkJa3NlcS0+a3Nx
X2xvYWRfdGltZXNoYXJlLS07DQoJaWYgKGNsYXNzICE9IFBSSV9JVEhEICAmJiAoa2UtPmtl
X3Byb2MtPnBfZmxhZyAmIFBfTk9MT0FEKSA9PSAwKQ0KI2lmZGVmIFNNUA0KCQlrc2VxLT5r
c3FfZ3JvdXAtPmtzZ19sb2FkLS07DQojZWxzZQ0KCQlrc2VxLT5rc3Ffc3lzbG9hZC0tOw0K
I2VuZGlmDQoJa3NlcS0+a3NxX2xvYWQtLTsNCglrZS0+a2VfcnVucSA9IE5VTEw7DQoJaWYg
KGtlLT5rZV9rc2VncnAtPmtnX3ByaV9jbGFzcyA9PSBQUklfVElNRVNIQVJFKQ0KCQlrc2Vx
X25pY2VfcmVtKGtzZXEsIGtlLT5rZV9wcm9jLT5wX25pY2UpOw0KfQ0KDQpzdGF0aWMgdm9p
ZA0Ka3NlcV9uaWNlX2FkZChzdHJ1Y3Qga3NlcSAqa3NlcSwgaW50IG5pY2UpDQp7DQoJbXR4
X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KCS8qIE5vcm1hbGl6ZSB0byB6ZXJv
LiAqLw0KCWtzZXEtPmtzcV9uaWNlW25pY2UgKyBTQ0hFRF9QUklfTkhBTEZdKys7DQoJaWYg
KG5pY2UgPCBrc2VxLT5rc3FfbmljZW1pbiB8fCBrc2VxLT5rc3FfbG9hZF90aW1lc2hhcmUg
PT0gMSkNCgkJa3NlcS0+a3NxX25pY2VtaW4gPSBuaWNlOw0KfQ0KDQpzdGF0aWMgdm9pZA0K
a3NlcV9uaWNlX3JlbShzdHJ1Y3Qga3NlcSAqa3NlcSwgaW50IG5pY2UpIA0Kew0KCWludCBu
Ow0KDQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KCS8qIE5vcm1hbGl6
ZSB0byB6ZXJvLiAqLw0KCW4gPSBuaWNlICsgU0NIRURfUFJJX05IQUxGOw0KCWtzZXEtPmtz
cV9uaWNlW25dLS07DQoJS0FTU0VSVChrc2VxLT5rc3FfbmljZVtuXSA+PSAwLCAoIk5lZ2F0
aXZlIG5pY2UgY291bnQuIikpOw0KDQoJLyoNCgkgKiBJZiB0aGlzIHdhc24ndCB0aGUgc21h
bGxlc3QgbmljZSB2YWx1ZSBvciB0aGVyZSBhcmUgbW9yZSBpbg0KCSAqIHRoaXMgYnVja2V0
IHdlIGNhbiBqdXN0IHJldHVybi4gIE90aGVyd2lzZSB3ZSBoYXZlIHRvIHJlY2FsY3VsYXRl
DQoJICogdGhlIHNtYWxsZXN0IG5pY2UuDQoJICovDQoJaWYgKG5pY2UgIT0ga3NlcS0+a3Nx
X25pY2VtaW4gfHwNCgkgICAga3NlcS0+a3NxX25pY2Vbbl0gIT0gMCB8fA0KCSAgICBrc2Vx
LT5rc3FfbG9hZF90aW1lc2hhcmUgPT0gMCkNCgkJcmV0dXJuOw0KDQoJZm9yICg7IG4gPCBT
Q0hFRF9QUklfTlJFU1Y7IG4rKykNCgkJaWYgKGtzZXEtPmtzcV9uaWNlW25dKSB7DQoJCQlr
c2VxLT5rc3FfbmljZW1pbiA9IG4gLSBTQ0hFRF9QUklfTkhBTEY7DQoJCQlyZXR1cm47DQoJ
CX0NCn0NCg0KI2lmZGVmIFNNUA0KLyoNCiAqIHNjaGVkX2JhbGFuY2UgaXMgYSBzaW1wbGUg
Q1BVIGxvYWQgYmFsYW5jaW5nIGFsZ29yaXRobS4gIEl0IG9wZXJhdGVzIGJ5DQogKiBmaW5k
aW5nIHRoZSBsZWFzdCBsb2FkZWQgYW5kIG1vc3QgbG9hZGVkIGNwdSBhbmQgZXF1YWxpemlu
ZyB0aGVpciBsb2FkDQogKiBieSBtaWdyYXRpbmcgc29tZSBwcm9jZXNzZXMuDQogKg0KICog
RGVhbGluZyBvbmx5IHdpdGggdHdvIENQVXMgYXQgYSB0aW1lIGhhcyB0d28gYWR2YW50YWdl
cy4gIEZpcnN0bHksIG1vc3QNCiAqIGluc3RhbGxhdGlvbnMgd2lsbCBvbmx5IGhhdmUgMiBj
cHVzLiAgU2Vjb25kbHksIGxvYWQgYmFsYW5jaW5nIHRvbyBtdWNoIGF0DQogKiBvbmNlIGNh
biBoYXZlIGFuIHVucGxlYXNhbnQgZWZmZWN0IG9uIHRoZSBzeXN0ZW0uICBUaGUgc2NoZWR1
bGVyIHJhcmVseSBoYXMNCiAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBtYWtlIHBlcmZlY3Qg
ZGVjaXNpb25zLiAgU28gdGhpcyBhbGdvcml0aG0gY2hvb3Nlcw0KICogYWxnb3JpdGhtIHNp
bXBsaWNpdHkgYW5kIG1vcmUgZ3JhZHVhbCBlZmZlY3RzIG9uIGxvYWQgaW4gbGFyZ2VyIHN5
c3RlbXMuDQogKg0KICogSXQgY291bGQgYmUgaW1wcm92ZWQgYnkgY29uc2lkZXJpbmcgdGhl
IHByaW9yaXRpZXMgYW5kIHNsaWNlcyBhc3NpZ25lZCB0bw0KICogZWFjaCB0YXNrIHByaW9y
IHRvIGJhbGFuY2luZyB0aGVtLiAgVGhlcmUgYXJlIG1hbnkgcGF0aG9sb2dpY2FsIGNhc2Vz
IHdpdGgNCiAqIGFueSBhcHByb2FjaCBhbmQgc28gdGhlIHNlbWkgcmFuZG9tIGFsZ29yaXRo
bSBiZWxvdyBtYXkgd29yayBhcyB3ZWxsIGFzIGFueS4NCiAqDQogKi8NCnN0YXRpYyB2b2lk
DQpzY2hlZF9iYWxhbmNlKHZvaWQpDQp7DQoJc3RydWN0IGtzZXFfZ3JvdXAgKmhpZ2g7DQoJ
c3RydWN0IGtzZXFfZ3JvdXAgKmxvdzsNCglzdHJ1Y3Qga3NlcV9ncm91cCAqa3NnOw0KCWlu
dCBjbnQ7DQoJaW50IGk7DQoNCglpZiAoc21wX3N0YXJ0ZWQgPT0gMCkNCgkJZ290byBvdXQ7
DQoJbG93ID0gaGlnaCA9IE5VTEw7DQoJaSA9IHJhbmRvbSgpICUgKGtzZ19tYXhpZCArIDEp
Ow0KCWZvciAoY250ID0gMDsgY250IDw9IGtzZ19tYXhpZDsgY250KyspIHsNCgkJa3NnID0g
S1NFUV9HUk9VUChpKTsNCgkJLyoNCgkJICogRmluZCB0aGUgQ1BVIHdpdGggdGhlIGhpZ2hl
c3QgbG9hZCB0aGF0IGhhcyBzb21lDQoJCSAqIHRocmVhZHMgdG8gdHJhbnNmZXIuDQoJCSAq
Lw0KCQlpZiAoKGhpZ2ggPT0gTlVMTCB8fCBrc2ctPmtzZ19sb2FkID4gaGlnaC0+a3NnX2xv
YWQpDQoJCSAgICAmJiBrc2ctPmtzZ190cmFuc2ZlcmFibGUpDQoJCQloaWdoID0ga3NnOw0K
CQlpZiAobG93ID09IE5VTEwgfHwga3NnLT5rc2dfbG9hZCA8IGxvdy0+a3NnX2xvYWQpDQoJ
CQlsb3cgPSBrc2c7DQoJCWlmICgrK2kgPiBrc2dfbWF4aWQpDQoJCQlpID0gMDsNCgl9DQoJ
aWYgKGxvdyAhPSBOVUxMICYmIGhpZ2ggIT0gTlVMTCAmJiBoaWdoICE9IGxvdykNCgkJc2No
ZWRfYmFsYW5jZV9wYWlyKExJU1RfRklSU1QoJmhpZ2gtPmtzZ19tZW1iZXJzKSwNCgkJICAg
IExJU1RfRklSU1QoJmxvdy0+a3NnX21lbWJlcnMpKTsNCm91dDoNCgliYWxfdGljayA9IHRp
Y2tzICsgKHJhbmRvbSgpICUgKGh6ICogMikpOw0KfQ0KDQpzdGF0aWMgdm9pZA0Kc2NoZWRf
YmFsYW5jZV9ncm91cHModm9pZCkNCnsNCglpbnQgaTsNCg0KCW10eF9hc3NlcnQoJnNjaGVk
X2xvY2ssIE1BX09XTkVEKTsNCglpZiAoc21wX3N0YXJ0ZWQpDQoJCWZvciAoaSA9IDA7IGkg
PD0ga3NnX21heGlkOyBpKyspDQoJCQlzY2hlZF9iYWxhbmNlX2dyb3VwKEtTRVFfR1JPVVAo
aSkpOw0KCWdiYWxfdGljayA9IHRpY2tzICsgKHJhbmRvbSgpICUgKGh6ICogMikpOw0KfQ0K
DQpzdGF0aWMgdm9pZA0Kc2NoZWRfYmFsYW5jZV9ncm91cChzdHJ1Y3Qga3NlcV9ncm91cCAq
a3NnKQ0Kew0KCXN0cnVjdCBrc2VxICprc2VxOw0KCXN0cnVjdCBrc2VxICpoaWdoOw0KCXN0
cnVjdCBrc2VxICpsb3c7DQoJaW50IGxvYWQ7DQoNCglpZiAoa3NnLT5rc2dfdHJhbnNmZXJh
YmxlID09IDApDQoJCXJldHVybjsNCglsb3cgPSBOVUxMOw0KCWhpZ2ggPSBOVUxMOw0KCUxJ
U1RfRk9SRUFDSChrc2VxLCAma3NnLT5rc2dfbWVtYmVycywga3NxX3NpYmxpbmdzKSB7DQoJ
CWxvYWQgPSBrc2VxLT5rc3FfbG9hZDsNCgkJaWYgKGhpZ2ggPT0gTlVMTCB8fCBsb2FkID4g
aGlnaC0+a3NxX2xvYWQpDQoJCQloaWdoID0ga3NlcTsNCgkJaWYgKGxvdyA9PSBOVUxMIHx8
IGxvYWQgPCBsb3ctPmtzcV9sb2FkKQ0KCQkJbG93ID0ga3NlcTsNCgl9DQoJaWYgKGhpZ2gg
IT0gTlVMTCAmJiBsb3cgIT0gTlVMTCAmJiBoaWdoICE9IGxvdykNCgkJc2NoZWRfYmFsYW5j
ZV9wYWlyKGhpZ2gsIGxvdyk7DQp9DQoNCnN0YXRpYyB2b2lkDQpzY2hlZF9iYWxhbmNlX3Bh
aXIoc3RydWN0IGtzZXEgKmhpZ2gsIHN0cnVjdCBrc2VxICpsb3cpDQp7DQoJaW50IHRyYW5z
ZmVyYWJsZTsNCglpbnQgaGlnaF9sb2FkOw0KCWludCBsb3dfbG9hZDsNCglpbnQgbW92ZTsN
CglpbnQgZGlmZjsNCglpbnQgaTsNCg0KCS8qDQoJICogSWYgd2UncmUgdHJhbnNmZXJpbmcg
d2l0aGluIGEgZ3JvdXAgd2UgaGF2ZSB0byB1c2UgdGhpcyBzcGVjaWZpYw0KCSAqIGtzZXEn
cyB0cmFuc2ZlcmFibGUgY291bnQsIG90aGVyd2lzZSB3ZSBjYW4gc3RlYWwgZnJvbSBvdGhl
ciBtZW1iZXJzDQoJICogb2YgdGhlIGdyb3VwLg0KCSAqLw0KCWlmIChoaWdoLT5rc3FfZ3Jv
dXAgPT0gbG93LT5rc3FfZ3JvdXApIHsNCgkJdHJhbnNmZXJhYmxlID0gaGlnaC0+a3NxX3Ry
YW5zZmVyYWJsZTsNCgkJaGlnaF9sb2FkID0gaGlnaC0+a3NxX2xvYWQ7DQoJCWxvd19sb2Fk
ID0gbG93LT5rc3FfbG9hZDsNCgl9IGVsc2Ugew0KCQl0cmFuc2ZlcmFibGUgPSBoaWdoLT5r
c3FfZ3JvdXAtPmtzZ190cmFuc2ZlcmFibGU7DQoJCWhpZ2hfbG9hZCA9IGhpZ2gtPmtzcV9n
cm91cC0+a3NnX2xvYWQ7DQoJCWxvd19sb2FkID0gbG93LT5rc3FfZ3JvdXAtPmtzZ19sb2Fk
Ow0KCX0NCglpZiAodHJhbnNmZXJhYmxlID09IDApDQoJCXJldHVybjsNCgkvKg0KCSAqIERl
dGVybWluZSB3aGF0IHRoZSBpbWJhbGFuY2UgaXMgYW5kIHRoZW4gYWRqdXN0IHRoYXQgdG8g
aG93IG1hbnkNCgkgKiBrc2VzIHdlIGFjdHVhbGx5IGhhdmUgdG8gZ2l2ZSB1cCAodHJhbnNm
ZXJhYmxlKS4NCgkgKi8NCglkaWZmID0gaGlnaF9sb2FkIC0gbG93X2xvYWQ7DQoJbW92ZSA9
IGRpZmYgLyAyOw0KCWlmIChkaWZmICYgMHgxKQ0KCQltb3ZlKys7DQoJbW92ZSA9IG1pbiht
b3ZlLCB0cmFuc2ZlcmFibGUpOw0KCWZvciAoaSA9IDA7IGkgPCBtb3ZlOyBpKyspDQoJCWtz
ZXFfbW92ZShoaWdoLCBLU0VRX0lEKGxvdykpOw0KCXJldHVybjsNCn0NCg0Kc3RhdGljIHZv
aWQNCmtzZXFfbW92ZShzdHJ1Y3Qga3NlcSAqZnJvbSwgaW50IGNwdSkNCnsNCglzdHJ1Y3Qg
a3NlcSAqa3NlcTsNCglzdHJ1Y3Qga3NlcSAqdG87DQoJc3RydWN0IGtzZSAqa2U7DQoNCglr
c2VxID0gZnJvbTsNCgl0byA9IEtTRVFfQ1BVKGNwdSk7DQoJa2UgPSBrc2VxX3N0ZWFsKGtz
ZXEsIDEpOw0KCWlmIChrZSA9PSBOVUxMKSB7DQoJCXN0cnVjdCBrc2VxX2dyb3VwICprc2c7
DQoNCgkJa3NnID0ga3NlcS0+a3NxX2dyb3VwOw0KCQlMSVNUX0ZPUkVBQ0goa3NlcSwgJmtz
Zy0+a3NnX21lbWJlcnMsIGtzcV9zaWJsaW5ncykgew0KCQkJaWYgKGtzZXEgPT0gZnJvbSB8
fCBrc2VxLT5rc3FfdHJhbnNmZXJhYmxlID09IDApDQoJCQkJY29udGludWU7DQoJCQlrZSA9
IGtzZXFfc3RlYWwoa3NlcSwgMSk7DQoJCQlicmVhazsNCgkJfQ0KCQlpZiAoa2UgPT0gTlVM
TCkNCgkJCXBhbmljKCJrc2VxX21vdmU6IE5vIEtTRXMgYXZhaWxhYmxlIHdpdGggYSAiDQoJ
CQkgICAgInRyYW5zZmVyYWJsZSBjb3VudCBvZiAlZFxuIiwgDQoJCQkgICAga3NnLT5rc2df
dHJhbnNmZXJhYmxlKTsNCgl9DQoJaWYgKGtzZXEgPT0gdG8pDQoJCXJldHVybjsNCglrZS0+
a2Vfc3RhdGUgPSBLRVNfVEhSRUFEOw0KCWtzZXFfcnVucV9yZW0oa3NlcSwga2UpOw0KCWtz
ZXFfbG9hZF9yZW0oa3NlcSwga2UpOw0KCWtzZXFfbm90aWZ5KGtlLCBjcHUpOw0KfQ0KDQpz
dGF0aWMgaW50DQprc2VxX2lkbGVkKHN0cnVjdCBrc2VxICprc2VxKQ0Kew0KCXN0cnVjdCBr
c2VxX2dyb3VwICprc2c7DQoJc3RydWN0IGtzZXEgKnN0ZWFsOw0KCXN0cnVjdCBrc2UgKmtl
Ow0KDQoJa3NnID0ga3NlcS0+a3NxX2dyb3VwOw0KCS8qDQoJICogSWYgd2UncmUgaW4gYSBj
cHUgZ3JvdXAsIHRyeSBhbmQgc3RlYWwga3NlcyBmcm9tIGFub3RoZXIgY3B1IGluDQoJICog
dGhlIGdyb3VwIGJlZm9yZSBpZGxpbmcuDQoJICovDQoJaWYgKGtzZy0+a3NnX2NwdXMgPiAx
ICYmIGtzZy0+a3NnX3RyYW5zZmVyYWJsZSkgew0KCQlMSVNUX0ZPUkVBQ0goc3RlYWwsICZr
c2ctPmtzZ19tZW1iZXJzLCBrc3Ffc2libGluZ3MpIHsNCgkJCWlmIChzdGVhbCA9PSBrc2Vx
IHx8IHN0ZWFsLT5rc3FfdHJhbnNmZXJhYmxlID09IDApDQoJCQkJY29udGludWU7DQoJCQlr
ZSA9IGtzZXFfc3RlYWwoc3RlYWwsIDApOw0KCQkJaWYgKGtlID09IE5VTEwpDQoJCQkJY29u
dGludWU7DQoJCQlrZS0+a2Vfc3RhdGUgPSBLRVNfVEhSRUFEOw0KCQkJa3NlcV9ydW5xX3Jl
bShzdGVhbCwga2UpOw0KCQkJa3NlcV9sb2FkX3JlbShzdGVhbCwga2UpOw0KCQkJa2UtPmtl
X2NwdSA9IFBDUFVfR0VUKGNwdWlkKTsNCgkJCXNjaGVkX2FkZF9pbnRlcm5hbChrZS0+a2Vf
dGhyZWFkLCAwKTsNCgkJCXJldHVybiAoMCk7DQoJCX0NCgl9DQoJLyoNCgkgKiBXZSBvbmx5
IHNldCB0aGUgaWRsZWQgYml0IHdoZW4gYWxsIG9mIHRoZSBjcHVzIGluIHRoZSBncm91cCBh
cmUNCgkgKiBpZGxlLiAgT3RoZXJ3aXNlIHdlIGNvdWxkIGdldCBpbnRvIGEgc2l0dWF0aW9u
IHdoZXJlIGEgS1NFIGJvdW5jZXMNCgkgKiBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHR3byBp
ZGxlIGNvcmVzIG9uIHNlcGVyYXRlIHBoeXNpY2FsIENQVXMuDQoJICovDQoJa3NnLT5rc2df
aWRsZW1hc2sgfD0gUENQVV9HRVQoY3B1bWFzayk7DQoJaWYgKGtzZy0+a3NnX2lkbGVtYXNr
ICE9IGtzZy0+a3NnX2NwdW1hc2spDQoJCXJldHVybiAoMSk7DQoJYXRvbWljX3NldF9pbnQo
JmtzZXFfaWRsZSwga3NnLT5rc2dfbWFzayk7DQoJcmV0dXJuICgxKTsNCn0NCg0Kc3RhdGlj
IHZvaWQNCmtzZXFfYXNzaWduKHN0cnVjdCBrc2VxICprc2VxKQ0Kew0KCXN0cnVjdCBrc2Ug
Km5rZTsNCglzdHJ1Y3Qga3NlICprZTsNCg0KCWRvIHsNCgkJKih2b2xhdGlsZSBzdHJ1Y3Qg
a3NlICoqKSZrZSA9IGtzZXEtPmtzcV9hc3NpZ25lZDsNCgl9IHdoaWxlKCFhdG9taWNfY21w
c2V0X3B0cigma3NlcS0+a3NxX2Fzc2lnbmVkLCBrZSwgTlVMTCkpOw0KCWZvciAoOyBrZSAh
PSBOVUxMOyBrZSA9IG5rZSkgew0KCQlua2UgPSBrZS0+a2VfYXNzaWduOw0KCQlrZS0+a2Vf
ZmxhZ3MgJj0gfktFRl9BU1NJR05FRDsNCgkJc2NoZWRfYWRkX2ludGVybmFsKGtlLT5rZV90
aHJlYWQsIDApOw0KCX0NCn0NCg0Kc3RhdGljIHZvaWQNCmtzZXFfbm90aWZ5KHN0cnVjdCBr
c2UgKmtlLCBpbnQgY3B1KQ0Kew0KCXN0cnVjdCBrc2VxICprc2VxOw0KCXN0cnVjdCB0aHJl
YWQgKnRkOw0KCXN0cnVjdCBwY3B1ICpwY3B1Ow0KCWludCBwcmlvOw0KDQoJa2UtPmtlX2Nw
dSA9IGNwdTsNCglrZS0+a2VfZmxhZ3MgfD0gS0VGX0FTU0lHTkVEOw0KCXByaW8gPSBrZS0+
a2VfdGhyZWFkLT50ZF9wcmlvcml0eTsNCg0KCWtzZXEgPSBLU0VRX0NQVShjcHUpOw0KDQoJ
LyoNCgkgKiBQbGFjZSBhIEtTRSBvbiBhbm90aGVyIGNwdSdzIHF1ZXVlIGFuZCBmb3JjZSBh
IHJlc2NoZWQuDQoJICovDQoJZG8gew0KCQkqKHZvbGF0aWxlIHN0cnVjdCBrc2UgKiopJmtl
LT5rZV9hc3NpZ24gPSBrc2VxLT5rc3FfYXNzaWduZWQ7DQoJfSB3aGlsZSghYXRvbWljX2Nt
cHNldF9wdHIoJmtzZXEtPmtzcV9hc3NpZ25lZCwga2UtPmtlX2Fzc2lnbiwga2UpKTsNCgkv
Kg0KCSAqIFdpdGhvdXQgc2NoZWRfbG9jayB3ZSBjb3VsZCBsb3NlIGEgcmFjZSB3aGVyZSB3
ZSBzZXQgTkVFRFJFU0NIRUQNCgkgKiBvbiBhIHRocmVhZCB0aGF0IGlzIHN3aXRjaGVkIG91
dCBiZWZvcmUgdGhlIElQSSBpcyBkZWxpdmVyZWQuICBUaGlzDQoJICogd291bGQgbGVhZCB1
cyB0byBtaXNzIHRoZSByZXNjaGVkLiAgVGhpcyB3aWxsIGJlIGEgcHJvYmxlbSBvbmNlDQoJ
ICogc2NoZWRfbG9jayBpcyBwdXNoZWQgZG93bi4NCgkgKi8NCglwY3B1ID0gcGNwdV9maW5k
KGNwdSk7DQoJdGQgPSBwY3B1LT5wY19jdXJ0aHJlYWQ7DQoJaWYgKGtlLT5rZV90aHJlYWQt
PnRkX3ByaW9yaXR5IDwgdGQtPnRkX3ByaW9yaXR5IHx8DQoJICAgIHRkID09IHBjcHUtPnBj
X2lkbGV0aHJlYWQpIHsNCgkJdGQtPnRkX2ZsYWdzIHw9IFRERl9ORUVEUkVTQ0hFRDsNCgkJ
aXBpX3NlbGVjdGVkKDEgPDwgY3B1LCBJUElfQVNUKTsNCgl9DQp9DQoNCnN0YXRpYyBzdHJ1
Y3Qga3NlICoNCnJ1bnFfc3RlYWwoc3RydWN0IHJ1bnEgKnJxKQ0Kew0KCXN0cnVjdCBycWhl
YWQgKnJxaDsNCglzdHJ1Y3QgcnFiaXRzICpycWI7DQoJc3RydWN0IGtzZSAqa2U7DQoJaW50
IHdvcmQ7DQoJaW50IGJpdDsNCg0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVE
KTsNCglycWIgPSAmcnEtPnJxX3N0YXR1czsNCglmb3IgKHdvcmQgPSAwOyB3b3JkIDwgUlFC
X0xFTjsgd29yZCsrKSB7DQoJCWlmIChycWItPnJxYl9iaXRzW3dvcmRdID09IDApDQoJCQlj
b250aW51ZTsNCgkJZm9yIChiaXQgPSAwOyBiaXQgPCBSUUJfQlBXOyBiaXQrKykgew0KCQkJ
aWYgKChycWItPnJxYl9iaXRzW3dvcmRdICYgKDF1bCA8PCBiaXQpKSA9PSAwKQ0KCQkJCWNv
bnRpbnVlOw0KCQkJcnFoID0gJnJxLT5ycV9xdWV1ZXNbYml0ICsgKHdvcmQgPDwgUlFCX0wy
QlBXKV07DQoJCQlUQUlMUV9GT1JFQUNIKGtlLCBycWgsIGtlX3Byb2NxKSB7DQoJCQkJaWYg
KEtTRV9DQU5fTUlHUkFURShrZSwNCgkJCQkgICAgUFJJX0JBU0Uoa2UtPmtlX2tzZWdycC0+
a2dfcHJpX2NsYXNzKSkpDQoJCQkJCXJldHVybiAoa2UpOw0KCQkJfQ0KCQl9DQoJfQ0KCXJl
dHVybiAoTlVMTCk7DQp9DQoNCnN0YXRpYyBzdHJ1Y3Qga3NlICoNCmtzZXFfc3RlYWwoc3Ry
dWN0IGtzZXEgKmtzZXEsIGludCBzdGVhbGlkbGUpDQp7DQoJc3RydWN0IGtzZSAqa2U7DQoN
CgkvKg0KCSAqIFN0ZWFsIGZyb20gbmV4dCBmaXJzdCB0byB0cnkgdG8gZ2V0IGEgbm9uLWlu
dGVyYWN0aXZlIHRhc2sgdGhhdA0KCSAqIG1heSBub3QgaGF2ZSBydW4gZm9yIGEgd2hpbGUu
DQoJICovDQoJaWYgKChrZSA9IHJ1bnFfc3RlYWwoa3NlcS0+a3NxX25leHQpKSAhPSBOVUxM
KQ0KCQlyZXR1cm4gKGtlKTsNCglpZiAoKGtlID0gcnVucV9zdGVhbChrc2VxLT5rc3FfY3Vy
cikpICE9IE5VTEwpDQoJCXJldHVybiAoa2UpOw0KCWlmIChzdGVhbGlkbGUpDQoJCXJldHVy
biAocnVucV9zdGVhbCgma3NlcS0+a3NxX2lkbGUpKTsNCglyZXR1cm4gKE5VTEwpOw0KfQ0K
DQppbnQNCmtzZXFfdHJhbnNmZXIoc3RydWN0IGtzZXEgKmtzZXEsIHN0cnVjdCBrc2UgKmtl
LCBpbnQgY2xhc3MpDQp7DQoJc3RydWN0IGtzZXFfZ3JvdXAgKmtzZzsNCglpbnQgY3B1Ow0K
DQoJaWYgKHNtcF9zdGFydGVkID09IDApDQoJCXJldHVybiAoMCk7DQoJY3B1ID0gMDsNCgkv
Kg0KCSAqIElmIG91ciBsb2FkIGV4Y2VlZHMgYSBjZXJ0YWluIHRocmVzaG9sZCB3ZSBzaG91
bGQgYXR0ZW1wdCB0bw0KCSAqIHJlYXNzaWduIHRoaXMgdGhyZWFkLiAgVGhlIGZpcnN0IGNh
bmRpZGF0ZSBpcyB0aGUgY3B1IHRoYXQNCgkgKiBvcmlnaW5hbGx5IHJhbiB0aGUgdGhyZWFk
LiAgSWYgaXQgaXMgaWRsZSwgYXNzaWduIGl0IHRoZXJlLCANCgkgKiBvdGhlcndpc2UsIHBp
Y2sgYW4gaWRsZSBjcHUuDQoJICoNCgkgKiBUaGUgdGhyZXNob2xkIGF0IHdoaWNoIHdlIHN0
YXJ0IHRvIHJlYXNzaWduIGtzZXMgaGFzIGEgbGFyZ2UgaW1wYWN0DQoJICogb24gdGhlIG92
ZXJhbGwgcGVyZm9ybWFuY2Ugb2YgdGhlIHN5c3RlbS4gIFR1bmVkIHRvbyBoaWdoIGFuZA0K
CSAqIHNvbWUgQ1BVcyBtYXkgaWRsZS4gIFRvbyBsb3cgYW5kIHRoZXJlIHdpbGwgYmUgZXhj
ZXNzIG1pZ3JhdGlvbg0KCSAqIGFuZCBjb250ZXh0IHN3aXRjaGVzLg0KCSAqLw0KCWtzZyA9
IGtzZXEtPmtzcV9ncm91cDsNCglpZiAoa3NnLT5rc2dfbG9hZCA+IGtzZy0+a3NnX2NwdXMg
JiYga3NlcV9pZGxlKSB7DQoJCWtzZyA9IEtTRVFfQ1BVKGtlLT5rZV9jcHUpLT5rc3FfZ3Jv
dXA7DQoJCWlmIChrc2VxX2lkbGUgJiBrc2ctPmtzZ19tYXNrKSB7DQoJCQljcHUgPSBmZnMo
a3NnLT5rc2dfaWRsZW1hc2spOw0KCQkJaWYgKGNwdSkNCgkJCQlnb3RvIG1pZ3JhdGU7DQoJ
CX0NCgkJLyoNCgkJICogTXVsdGlwbGUgY3B1cyBjb3VsZCBmaW5kIHRoaXMgYml0IHNpbXVs
dGFuZW91c2x5DQoJCSAqIGJ1dCB0aGUgcmFjZSBzaG91bGRuJ3QgYmUgdGVycmlibGUuDQoJ
CSAqLw0KCQljcHUgPSBmZnMoa3NlcV9pZGxlKTsNCgkJaWYgKGNwdSkNCgkJCWdvdG8gbWln
cmF0ZTsNCgl9DQoJLyoNCgkgKiBJZiBhbm90aGVyIGNwdSBpbiB0aGlzIGdyb3VwIGhhcyBp
ZGxlZCwgYXNzaWduIGEgdGhyZWFkIG92ZXINCgkgKiB0byB0aGVtIGFmdGVyIGNoZWNraW5n
IHRvIHNlZSBpZiB0aGVyZSBhcmUgaWRsZWQgZ3JvdXBzLg0KCSAqLw0KCWtzZyA9IGtzZXEt
PmtzcV9ncm91cDsNCglpZiAoa3NnLT5rc2dfaWRsZW1hc2spIHsNCgkJY3B1ID0gZmZzKGtz
Zy0+a3NnX2lkbGVtYXNrKTsNCgkJaWYgKGNwdSkNCgkJCWdvdG8gbWlncmF0ZTsNCgl9DQoJ
LyoNCgkgKiBObyBuZXcgQ1BVIHdhcyBmb3VuZC4NCgkgKi8NCglyZXR1cm4gKDApOw0KbWln
cmF0ZToNCgkvKg0KCSAqIE5vdyB0aGF0IHdlJ3ZlIGZvdW5kIGFuIGlkbGUgQ1BVLCBtaWdy
YXRlIHRoZSB0aHJlYWQuDQoJICovDQoJY3B1LS07DQoJa2UtPmtlX3J1bnEgPSBOVUxMOw0K
CWtzZXFfbm90aWZ5KGtlLCBjcHUpOw0KDQoJcmV0dXJuICgxKTsNCn0NCg0KI2VuZGlmCS8q
IFNNUCAqLw0KDQovKg0KICogUGljayB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHdlIGhh
dmUgYW5kIHJldHVybiBpdC4NCiAqLw0KDQpzdGF0aWMgc3RydWN0IGtzZSAqDQprc2VxX2No
b29zZShzdHJ1Y3Qga3NlcSAqa3NlcSkNCnsNCglzdHJ1Y3Qga3NlICprZTsNCglzdHJ1Y3Qg
cnVucSAqc3dhcDsNCg0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVEKTsNCglz
d2FwID0gTlVMTDsNCg0KCWZvciAoOzspIHsNCgkJa2UgPSBydW5xX2Nob29zZShrc2VxLT5r
c3FfY3Vycik7DQoJCWlmIChrZSA9PSBOVUxMKSB7DQoJCQkvKg0KCQkJICogV2UgYWxyZWFk
eSBzd2FwcGVkIG9uY2UgYW5kIGRpZG4ndCBnZXQgYW55d2hlcmUuDQoJCQkgKi8NCgkJCWlm
IChzd2FwKQ0KCQkJCWJyZWFrOw0KCQkJc3dhcCA9IGtzZXEtPmtzcV9jdXJyOw0KCQkJa3Nl
cS0+a3NxX2N1cnIgPSBrc2VxLT5rc3FfbmV4dDsNCgkJCWtzZXEtPmtzcV9uZXh0ID0gc3dh
cDsNCgkJCWNvbnRpbnVlOw0KCQl9DQoJCS8qDQoJCSAqIElmIHdlIGVuY291bnRlciBhIHNs
aWNlIG9mIDAgdGhlIGtzZSBpcyBpbiBhDQoJCSAqIFRJTUVTSEFSRSBrc2UgZ3JvdXAgYW5k
IGl0cyBuaWNlIHdhcyB0b28gZmFyIG91dA0KCQkgKiBvZiB0aGUgcmFuZ2UgdGhhdCByZWNl
aXZlcyBzbGljZXMuIA0KCQkgKi8NCgkJaWYgKGtlLT5rZV9zbGljZSA9PSAwKSB7DQoJCQly
dW5xX3JlbW92ZShrZS0+a2VfcnVucSwga2UpOw0KCQkJc2NoZWRfc2xpY2Uoa2UpOw0KCQkJ
a2UtPmtlX3J1bnEgPSBrc2VxLT5rc3FfbmV4dDsNCgkJCXJ1bnFfYWRkKGtlLT5rZV9ydW5x
LCBrZSwgMCk7DQoJCQljb250aW51ZTsNCgkJfQ0KCQlyZXR1cm4gKGtlKTsNCgl9DQoNCgly
ZXR1cm4gKHJ1bnFfY2hvb3NlKCZrc2VxLT5rc3FfaWRsZSkpOw0KfQ0KDQpzdGF0aWMgdm9p
ZA0Ka3NlcV9zZXR1cChzdHJ1Y3Qga3NlcSAqa3NlcSkNCnsNCglydW5xX2luaXQoJmtzZXEt
PmtzcV90aW1lc2hhcmVbMF0pOw0KCXJ1bnFfaW5pdCgma3NlcS0+a3NxX3RpbWVzaGFyZVsx
XSk7DQoJcnVucV9pbml0KCZrc2VxLT5rc3FfaWRsZSk7DQoJa3NlcS0+a3NxX2N1cnIgPSAm
a3NlcS0+a3NxX3RpbWVzaGFyZVswXTsNCglrc2VxLT5rc3FfbmV4dCA9ICZrc2VxLT5rc3Ff
dGltZXNoYXJlWzFdOw0KCWtzZXEtPmtzcV9sb2FkID0gMDsNCglrc2VxLT5rc3FfbG9hZF90
aW1lc2hhcmUgPSAwOw0KfQ0KDQpzdGF0aWMgdm9pZA0Kc2NoZWRfc2V0dXAodm9pZCAqZHVt
bXkpDQp7DQojaWZkZWYgU01QDQoJaW50IGJhbGFuY2VfZ3JvdXBzOw0KCWludCBpOw0KI2Vu
ZGlmDQoNCglzbGljZV9taW4gPSAoaHovMTAwKTsJLyogMTBtcyAqLw0KCXNsaWNlX21heCA9
IChoei83KTsJLyogfjE0MG1zICovDQoNCiNpZmRlZiBTTVANCgliYWxhbmNlX2dyb3VwcyA9
IDA7DQoJLyoNCgkgKiBJbml0aWFsaXplIHRoZSBrc2Vxcy4NCgkgKi8NCglmb3IgKGkgPSAw
OyBpIDwgTUFYQ1BVOyBpKyspIHsNCgkJc3RydWN0IGtzZXEgKmtzcTsNCg0KCQlrc3EgPSAm
a3NlcV9jcHVbaV07DQoJCWtzcS0+a3NxX2Fzc2lnbmVkID0gTlVMTDsNCgkJa3NlcV9zZXR1
cCgma3NlcV9jcHVbaV0pOw0KCX0NCglpZiAoc21wX3RvcG9sb2d5ID09IE5VTEwpIHsNCgkJ
c3RydWN0IGtzZXFfZ3JvdXAgKmtzZzsNCgkJc3RydWN0IGtzZXEgKmtzcTsNCg0KCQlmb3Ig
KGkgPSAwOyBpIDwgTUFYQ1BVOyBpKyspIHsNCgkJCWtzcSA9ICZrc2VxX2NwdVtpXTsNCgkJ
CWtzZyA9ICZrc2VxX2dyb3Vwc1tpXTsNCgkJCS8qDQoJCQkgKiBTZXR1cCBhIGtzZXEgZ3Jv
dXAgd2l0aCBvbmUgbWVtYmVyLg0KCQkJICovDQoJCQlrc3EtPmtzcV90cmFuc2ZlcmFibGUg
PSAwOw0KCQkJa3NxLT5rc3FfZ3JvdXAgPSBrc2c7DQoJCQlrc2ctPmtzZ19jcHVzID0gMTsN
CgkJCWtzZy0+a3NnX2lkbGVtYXNrID0gMDsNCgkJCWtzZy0+a3NnX2NwdW1hc2sgPSBrc2ct
PmtzZ19tYXNrID0gMSA8PCBpOw0KCQkJa3NnLT5rc2dfbG9hZCA9IDA7DQoJCQlrc2ctPmtz
Z190cmFuc2ZlcmFibGUgPSAwOw0KCQkJTElTVF9JTklUKCZrc2ctPmtzZ19tZW1iZXJzKTsN
CgkJCUxJU1RfSU5TRVJUX0hFQUQoJmtzZy0+a3NnX21lbWJlcnMsIGtzcSwga3NxX3NpYmxp
bmdzKTsNCgkJfQ0KCX0gZWxzZSB7DQoJCXN0cnVjdCBrc2VxX2dyb3VwICprc2c7DQoJCXN0
cnVjdCBjcHVfZ3JvdXAgKmNnOw0KCQlpbnQgajsNCg0KCQlmb3IgKGkgPSAwOyBpIDwgc21w
X3RvcG9sb2d5LT5jdF9jb3VudDsgaSsrKSB7DQoJCQljZyA9ICZzbXBfdG9wb2xvZ3ktPmN0
X2dyb3VwW2ldOw0KCQkJa3NnID0gJmtzZXFfZ3JvdXBzW2ldOw0KCQkJLyoNCgkJCSAqIElu
aXRpYWxpemUgdGhlIGdyb3VwLg0KCQkJICovDQoJCQlrc2ctPmtzZ19pZGxlbWFzayA9IDA7
DQoJCQlrc2ctPmtzZ19sb2FkID0gMDsNCgkJCWtzZy0+a3NnX3RyYW5zZmVyYWJsZSA9IDA7
DQoJCQlrc2ctPmtzZ19jcHVzID0gY2ctPmNnX2NvdW50Ow0KCQkJa3NnLT5rc2dfY3B1bWFz
ayA9IGNnLT5jZ19tYXNrOw0KCQkJTElTVF9JTklUKCZrc2ctPmtzZ19tZW1iZXJzKTsNCgkJ
CS8qDQoJCQkgKiBGaW5kIGFsbCBvZiB0aGUgZ3JvdXAgbWVtYmVycyBhbmQgYWRkIHRoZW0u
DQoJCQkgKi8NCgkJCWZvciAoaiA9IDA7IGogPCBNQVhDUFU7IGorKykgew0KCQkJCWlmICgo
Y2ctPmNnX21hc2sgJiAoMSA8PCBqKSkgIT0gMCkgew0KCQkJCQlpZiAoa3NnLT5rc2dfbWFz
ayA9PSAwKQ0KCQkJCQkJa3NnLT5rc2dfbWFzayA9IDEgPDwgajsNCgkJCQkJa3NlcV9jcHVb
al0ua3NxX3RyYW5zZmVyYWJsZSA9IDA7DQoJCQkJCWtzZXFfY3B1W2pdLmtzcV9ncm91cCA9
IGtzZzsNCgkJCQkJTElTVF9JTlNFUlRfSEVBRCgma3NnLT5rc2dfbWVtYmVycywNCgkJCQkJ
ICAgICZrc2VxX2NwdVtqXSwga3NxX3NpYmxpbmdzKTsNCgkJCQl9DQoJCQl9DQoJCQlpZiAo
a3NnLT5rc2dfY3B1cyA+IDEpDQoJCQkJYmFsYW5jZV9ncm91cHMgPSAxOw0KCQl9DQoJCWtz
Z19tYXhpZCA9IHNtcF90b3BvbG9neS0+Y3RfY291bnQgLSAxOw0KCX0NCgkvKg0KCSAqIFN0
YWdnZXIgdGhlIGdyb3VwIGFuZCBnbG9iYWwgbG9hZCBiYWxhbmNlciBzbyB0aGV5IGRvIG5v
dA0KCSAqIGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuDQoJICovDQoJYmFsX3RpY2sgPSB0
aWNrcyArIGh6Ow0KCWlmIChiYWxhbmNlX2dyb3VwcykNCgkJZ2JhbF90aWNrID0gdGlja3Mg
KyAoaHogLyAyKTsNCiNlbHNlDQoJa3NlcV9zZXR1cChLU0VRX1NFTEYoKSk7DQojZW5kaWYN
CgltdHhfbG9ja19zcGluKCZzY2hlZF9sb2NrKTsNCglrc2VxX2xvYWRfYWRkKEtTRVFfU0VM
RigpLCAma3NlMCk7DQoJbXR4X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsNCn0NCg0KLyoN
CiAqIFNjYWxlIHRoZSBzY2hlZHVsaW5nIHByaW9yaXR5IGFjY29yZGluZyB0byB0aGUgImlu
dGVyYWN0aXZpdHkiIG9mIHRoaXMNCiAqIHByb2Nlc3MuDQogKi8NCnN0YXRpYyB2b2lkDQpz
Y2hlZF9wcmlvcml0eShzdHJ1Y3Qga3NlZ3JwICprZykNCnsNCglpbnQgcHJpOw0KDQoJaWYg
KGtnLT5rZ19wcmlfY2xhc3MgIT0gUFJJX1RJTUVTSEFSRSkNCgkJcmV0dXJuOw0KDQoJcHJp
ID0gU0NIRURfUFJJX0lOVEVSQUNUKHNjaGVkX2ludGVyYWN0X3Njb3JlKGtnKSk7DQoJcHJp
ICs9IFNDSEVEX1BSSV9CQVNFOw0KCXByaSArPSBrZy0+a2dfcHJvYy0+cF9uaWNlOw0KDQoJ
aWYgKHByaSA+IFBSSV9NQVhfVElNRVNIQVJFKQ0KCQlwcmkgPSBQUklfTUFYX1RJTUVTSEFS
RTsNCgllbHNlIGlmIChwcmkgPCBQUklfTUlOX1RJTUVTSEFSRSkNCgkJcHJpID0gUFJJX01J
Tl9USU1FU0hBUkU7DQoNCglrZy0+a2dfdXNlcl9wcmkgPSBwcmk7DQoNCglyZXR1cm47DQp9
DQoNCi8qDQogKiBDYWxjdWxhdGUgYSB0aW1lIHNsaWNlIGJhc2VkIG9uIHRoZSBwcm9wZXJ0
aWVzIG9mIHRoZSBrc2VnIGFuZCB0aGUgcnVucQ0KICogdGhhdCB3ZSdyZSBvbi4gIFRoaXMg
aXMgb25seSBmb3IgUFJJX1RJTUVTSEFSRSBrc2VncnBzLg0KICovDQpzdGF0aWMgdm9pZA0K
c2NoZWRfc2xpY2Uoc3RydWN0IGtzZSAqa2UpDQp7DQoJc3RydWN0IGtzZXEgKmtzZXE7DQoJ
c3RydWN0IGtzZWdycCAqa2c7DQoNCglrZyA9IGtlLT5rZV9rc2VncnA7DQoJa3NlcSA9IEtT
RVFfQ1BVKGtlLT5rZV9jcHUpOw0KDQoJLyoNCgkgKiBSYXRpb25hbGU6DQoJICogS1NFcyBp
biBpbnRlcmFjdGl2ZSBrc2VncyBnZXQgYSBtaW5pbWFsIHNsaWNlIHNvIHRoYXQgd2UNCgkg
KiBxdWlja2x5IG5vdGljZSBpZiBpdCBhYnVzZXMgaXRzIGFkdmFudGFnZS4NCgkgKg0KCSAq
IEtTRXMgaW4gbm9uLWludGVyYWN0aXZlIGtzZWdzIGFyZSBhc3NpZ25lZCBhIHNsaWNlIHRo
YXQgaXMNCgkgKiBiYXNlZCBvbiB0aGUga3NlZ3MgbmljZSB2YWx1ZSByZWxhdGl2ZSB0byB0
aGUgbGVhc3QgbmljZSBrc2VnDQoJICogb24gdGhlIHJ1biBxdWV1ZSBmb3IgdGhpcyBjcHUu
DQoJICoNCgkgKiBJZiB0aGUgS1NFIGlzIGxlc3MgbmljZSB0aGFuIGFsbCBvdGhlcnMgaXQg
Z2V0cyB0aGUgbWF4aW11bQ0KCSAqIHNsaWNlIGFuZCBvdGhlciBLU0VzIHdpbGwgYWRqdXN0
IHRoZWlyIHNsaWNlIHJlbGF0aXZlIHRvDQoJICogdGhpcyB3aGVuIHRoZXkgZmlyc3QgZXhw
aXJlLg0KCSAqDQoJICogVGhlcmUgaXMgMjAgcG9pbnQgd2luZG93IHRoYXQgc3RhcnRzIHJl
bGF0aXZlIHRvIHRoZSBsZWFzdA0KCSAqIG5pY2Uga3NlIG9uIHRoZSBydW4gcXVldWUuICBT
bGljZSBzaXplIGlzIGRldGVybWluZWQgYnkNCgkgKiB0aGUga3NlIGRpc3RhbmNlIGZyb20g
dGhlIGxhc3QgbmljZSBrc2VncnAuDQoJICoNCgkgKiBJZiB0aGUga3NlIGlzIG91dHNpZGUg
b2YgdGhlIHdpbmRvdyBpdCB3aWxsIGdldCBubyBzbGljZQ0KCSAqIGFuZCB3aWxsIGJlIHJl
ZXZhbHVhdGVkIGVhY2ggdGltZSBpdCBpcyBzZWxlY3RlZCBvbiB0aGUNCgkgKiBydW4gcXVl
dWUuICBUaGUgZXhjZXB0aW9uIHRvIHRoaXMgaXMgbmljZSAwIGtzZWdzIHdoZW4NCgkgKiBh
IG5pY2UgLTIwIGlzIHJ1bm5pbmcuICBUaGV5IGFyZSBhbHdheXMgZ3JhbnRlZCBhIG1pbmlt
dW0NCgkgKiBzbGljZS4NCgkgKi8NCglpZiAoIVNDSEVEX0lOVEVSQUNUSVZFKGtnKSkgew0K
CQlpbnQgbmljZTsNCg0KCQluaWNlID0ga2ctPmtnX3Byb2MtPnBfbmljZSArICgwIC0ga3Nl
cS0+a3NxX25pY2VtaW4pOw0KCQlpZiAoa3NlcS0+a3NxX2xvYWRfdGltZXNoYXJlID09IDAg
fHwNCgkJICAgIGtnLT5rZ19wcm9jLT5wX25pY2UgPCBrc2VxLT5rc3FfbmljZW1pbikNCgkJ
CWtlLT5rZV9zbGljZSA9IFNDSEVEX1NMSUNFX01BWDsNCgkJZWxzZSBpZiAobmljZSA8PSBT
Q0hFRF9TTElDRV9OVEhSRVNIKQ0KCQkJa2UtPmtlX3NsaWNlID0gU0NIRURfU0xJQ0VfTklD
RShuaWNlKTsNCgkJZWxzZSBpZiAoa2ctPmtnX3Byb2MtPnBfbmljZSA9PSAwKQ0KCQkJa2Ut
PmtlX3NsaWNlID0gU0NIRURfU0xJQ0VfTUlOOw0KCQllbHNlDQoJCQlrZS0+a2Vfc2xpY2Ug
PSAwOw0KCX0gZWxzZQ0KCQlrZS0+a2Vfc2xpY2UgPSBTQ0hFRF9TTElDRV9JTlRFUkFDVElW
RTsNCg0KCUNUUjYoS1RSX1VMRSwNCgkgICAgIlNsaWNlZCAlcCglZCkgKG5pY2U6ICVkLCBu
aWNlbWluOiAlZCwgbG9hZDogJWQsIGludGVyYWN0aXZlOiAlZCkiLA0KCSAgICBrZSwga2Ut
PmtlX3NsaWNlLCBrZy0+a2dfcHJvYy0+cF9uaWNlLCBrc2VxLT5rc3FfbmljZW1pbiwNCgkg
ICAga3NlcS0+a3NxX2xvYWRfdGltZXNoYXJlLCBTQ0hFRF9JTlRFUkFDVElWRShrZykpOw0K
DQoJcmV0dXJuOw0KfQ0KDQovKg0KICogVGhpcyByb3V0aW5lIGVuZm9yY2VzIGEgbWF4aW11
bSBsaW1pdCBvbiB0aGUgYW1vdW50IG9mIHNjaGVkdWxpbmcgaGlzdG9yeQ0KICoga2VwdC4g
IEl0IGlzIGNhbGxlZCBhZnRlciBlaXRoZXIgdGhlIHNscHRpbWUgb3IgcnVudGltZSBpcyBh
ZGp1c3RlZC4NCiAqIFRoaXMgcm91dGluZSB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseSB3
aGVuIHNscCBvciBydW4gdGltZXMgaGF2ZSBiZWVuDQogKiBhZGp1c3RlZCB0byBtb3JlIHRo
YW4gZG91YmxlIHRoZWlyIG1heGltdW0uDQogKi8NCnN0YXRpYyB2b2lkDQpzY2hlZF9pbnRl
cmFjdF91cGRhdGUoc3RydWN0IGtzZWdycCAqa2cpDQp7DQoJaW50IHN1bTsNCg0KCXN1bSA9
IGtnLT5rZ19ydW50aW1lICsga2ctPmtnX3NscHRpbWU7DQoJaWYgKHN1bSA8IFNDSEVEX1NM
UF9SVU5fTUFYKQ0KCQlyZXR1cm47DQoJLyoNCgkgKiBJZiB3ZSBoYXZlIGV4Y2VlZGVkIGJ5
IG1vcmUgdGhhbiAxLzV0aCB0aGVuIHRoZSBhbGdvcml0aG0gYmVsb3cNCgkgKiB3aWxsIG5v
dCBicmluZyB1cyBiYWNrIGludG8gcmFuZ2UuICBEaXZpZGluZyBieSB0d28gaGVyZSBmb3Jj
ZXMNCgkgKiB1cyBpbnRvIHRoZSByYW5nZSBvZiBbNC81ICogU0NIRURfSU5URVJBQ1RfTUFY
LCBTQ0hFRF9JTlRFUkFDVF9NQVhdDQoJICovDQoJaWYgKHN1bSA+IChTQ0hFRF9TTFBfUlVO
X01BWCAvIDUpICogNikgew0KCQlrZy0+a2dfcnVudGltZSAvPSAyOw0KCQlrZy0+a2dfc2xw
dGltZSAvPSAyOw0KCQlyZXR1cm47DQoJfQ0KCWtnLT5rZ19ydW50aW1lID0gKGtnLT5rZ19y
dW50aW1lIC8gNSkgKiA0Ow0KCWtnLT5rZ19zbHB0aW1lID0gKGtnLT5rZ19zbHB0aW1lIC8g
NSkgKiA0Ow0KfQ0KDQpzdGF0aWMgdm9pZA0Kc2NoZWRfaW50ZXJhY3RfZm9yayhzdHJ1Y3Qg
a3NlZ3JwICprZykNCnsNCglpbnQgcmF0aW87DQoJaW50IHN1bTsNCg0KCXN1bSA9IGtnLT5r
Z19ydW50aW1lICsga2ctPmtnX3NscHRpbWU7DQoJaWYgKHN1bSA+IFNDSEVEX1NMUF9SVU5f
Rk9SSykgew0KCQlyYXRpbyA9IHN1bSAvIFNDSEVEX1NMUF9SVU5fRk9SSzsNCgkJa2ctPmtn
X3J1bnRpbWUgLz0gcmF0aW87DQoJCWtnLT5rZ19zbHB0aW1lIC89IHJhdGlvOw0KCX0NCn0N
Cg0Kc3RhdGljIGludA0Kc2NoZWRfaW50ZXJhY3Rfc2NvcmUoc3RydWN0IGtzZWdycCAqa2cp
DQp7DQoJaW50IGRpdjsNCg0KCWlmIChrZy0+a2dfcnVudGltZSA+IGtnLT5rZ19zbHB0aW1l
KSB7DQoJCWRpdiA9IG1heCgxLCBrZy0+a2dfcnVudGltZSAvIFNDSEVEX0lOVEVSQUNUX0hB
TEYpOw0KCQlyZXR1cm4gKFNDSEVEX0lOVEVSQUNUX0hBTEYgKw0KCQkgICAgKFNDSEVEX0lO
VEVSQUNUX0hBTEYgLSAoa2ctPmtnX3NscHRpbWUgLyBkaXYpKSk7DQoJfSBpZiAoa2ctPmtn
X3NscHRpbWUgPiBrZy0+a2dfcnVudGltZSkgew0KCQlkaXYgPSBtYXgoMSwga2ctPmtnX3Ns
cHRpbWUgLyBTQ0hFRF9JTlRFUkFDVF9IQUxGKTsNCgkJcmV0dXJuIChrZy0+a2dfcnVudGlt
ZSAvIGRpdik7DQoJfQ0KDQoJLyoNCgkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgc2xwdGltZSBh
bmQgcnVudGltZSBhcmUgMC4NCgkgKi8NCglyZXR1cm4gKDApOw0KDQp9DQoNCi8qDQogKiBW
ZXJ5IGVhcmx5IGluIHRoZSBib290IHNvbWUgc2V0dXAgb2Ygc2NoZWR1bGVyLXNwZWNpZmlj
DQogKiBwYXJ0cyBvZiBwcm9jMCBhbmQgb2Ygc29lbSBzY2hlZHVsZXIgcmVzb3VyY2VzIG5l
ZWRzIHRvIGJlIGRvbmUuDQogKiBDYWxsZWQgZnJvbToNCiAqICBwcm9jMF9pbml0KCkNCiAq
Lw0Kdm9pZA0Kc2NoZWRpbml0KHZvaWQpDQp7DQoJLyoNCgkgKiBTZXQgdXAgdGhlIHNjaGVk
dWxlciBzcGVjaWZpYyBwYXJ0cyBvZiBwcm9jMC4NCgkgKi8NCglwcm9jMC5wX3NjaGVkID0g
TlVMTDsgLyogWFhYICovDQoJa3NlZ3JwMC5rZ19zY2hlZCA9ICZrZ19zY2hlZDA7DQoJdGhy
ZWFkMC50ZF9zY2hlZCA9ICZrc2UwOw0KCWtzZTAua2VfdGhyZWFkID0gJnRocmVhZDA7DQoJ
a3NlMC5rZV9vbmNwdSA9IE5PQ1BVOyAvKiB3cm9uZy4uIGNhbiB3ZSB1c2UgUENQVShjcHVp
ZCkgeWV0PyAqLw0KCWtzZTAua2Vfc3RhdGUgPSBLRVNfVEhSRUFEOw0KCWtnX3NjaGVkMC5z
a2dfY29uY3VycmVuY3kgPSAxOw0KCWtnX3NjaGVkMC5za2dfYXZhaWxfb3Blbm5pbmdzID0g
MDsgLyogd2UgYXJlIGFscmVhZHkgcnVubmluZyAqLw0KfQ0KDQovKg0KICogVGhpcyBpcyBv
bmx5IHNvbWV3aGF0IGFjY3VyYXRlIHNpbmNlIGdpdmVuIG1hbnkgcHJvY2Vzc2VzIG9mIHRo
ZSBzYW1lDQogKiBwcmlvcml0eSB0aGV5IHdpbGwgc3dpdGNoIHdoZW4gdGhlaXIgc2xpY2Vz
IHJ1biBvdXQsIHdoaWNoIHdpbGwgYmUNCiAqIGF0IG1vc3QgU0NIRURfU0xJQ0VfTUFYLg0K
ICovDQppbnQNCnNjaGVkX3JyX2ludGVydmFsKHZvaWQpDQp7DQoJcmV0dXJuIChTQ0hFRF9T
TElDRV9NQVgpOw0KfQ0KDQpzdGF0aWMgdm9pZA0Kc2NoZWRfcGN0Y3B1X3VwZGF0ZShzdHJ1
Y3Qga3NlICprZSkNCnsNCgkvKg0KCSAqIEFkanVzdCBjb3VudGVycyBhbmQgd2F0ZXJtYXJr
IGZvciBwY3RjcHUgY2FsYy4NCgkgKi8NCglpZiAoa2UtPmtlX2x0aWNrID4gdGlja3MgLSBT
Q0hFRF9DUFVfVElDS1MpIHsNCgkJLyoNCgkJICogU2hpZnQgdGhlIHRpY2sgY291bnQgb3V0
IHNvIHRoYXQgdGhlIGRpdmlkZSBkb2Vzbid0DQoJCSAqIHJvdW5kIGF3YXkgb3VyIHJlc3Vs
dHMuDQoJCSAqLw0KCQlrZS0+a2VfdGlja3MgPDw9IDEwOw0KCQlrZS0+a2VfdGlja3MgPSAo
a2UtPmtlX3RpY2tzIC8gKHRpY2tzIC0ga2UtPmtlX2Z0aWNrKSkgKg0KCQkJICAgIFNDSEVE
X0NQVV9USUNLUzsNCgkJa2UtPmtlX3RpY2tzID4+PSAxMDsNCgl9IGVsc2UNCgkJa2UtPmtl
X3RpY2tzID0gMDsNCglrZS0+a2VfbHRpY2sgPSB0aWNrczsNCglrZS0+a2VfZnRpY2sgPSBr
ZS0+a2VfbHRpY2sgLSBTQ0hFRF9DUFVfVElDS1M7DQp9DQoNCnZvaWQNCnNjaGVkX3ByaW8o
c3RydWN0IHRocmVhZCAqdGQsIHVfY2hhciBwcmlvKQ0Kew0KCXN0cnVjdCBrc2UgKmtlOw0K
DQoJa2UgPSB0ZC0+dGRfa3NlOw0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09XTkVE
KTsNCglpZiAoVERfT05fUlVOUSh0ZCkpIHsNCgkJLyoNCgkJICogSWYgdGhlIHByaW9yaXR5
IGhhcyBiZWVuIGVsZXZhdGVkIGR1ZSB0byBwcmlvcml0eQ0KCQkgKiBwcm9wYWdhdGlvbiwg
d2UgbWF5IGhhdmUgdG8gbW92ZSBvdXJzZWx2ZXMgdG8gYSBuZXcNCgkJICogcXVldWUuICBX
ZSBzdGlsbCBjYWxsIGFkanVzdHJ1bnF1ZXVlIGJlbG93IGluIGNhc2Uga3NlDQoJCSAqIG5l
ZWRzIHRvIGZpeCB0aGluZ3MgdXAuDQoJCSAqLw0KCQlpZiAocHJpbyA8IHRkLT50ZF9wcmlv
cml0eSAmJiBrZSAmJg0KCQkgICAgKGtlLT5rZV9mbGFncyAmIEtFRl9BU1NJR05FRCkgPT0g
MCAmJg0KCQkgICAga2UtPmtlX3J1bnEgIT0gS1NFUV9DUFUoa2UtPmtlX2NwdSktPmtzcV9j
dXJyKSB7DQoJCQlydW5xX3JlbW92ZShrZS0+a2VfcnVucSwga2UpOw0KCQkJa2UtPmtlX3J1
bnEgPSBLU0VRX0NQVShrZS0+a2VfY3B1KS0+a3NxX2N1cnI7DQoJCQlydW5xX2FkZChrZS0+
a2VfcnVucSwga2UsIDApOw0KCQl9DQoJCS8qDQoJCSAqIEhvbGQgdGhpcyBrc2Ugb24gdGhp
cyBjcHUgc28gdGhhdCBzY2hlZF9wcmlvKCkgZG9lc24ndA0KCQkgKiBjYXVzZSBleGNlc3Np
dmUgbWlncmF0aW9uLiAgV2Ugb25seSB3YW50IG1pZ3JhdGlvbiB0bw0KCQkgKiBoYXBwZW4g
YXMgdGhlIHJlc3VsdCBvZiBhIHdha2V1cC4NCgkJICovDQoJCWtlLT5rZV9mbGFncyB8PSBL
RUZfSE9MRDsNCgkJYWRqdXN0cnVucXVldWUodGQsIHByaW8pOw0KCX0gZWxzZQ0KCQl0ZC0+
dGRfcHJpb3JpdHkgPSBwcmlvOw0KfQ0KDQp2b2lkDQpzY2hlZF9zd2l0Y2goc3RydWN0IHRo
cmVhZCAqdGQsIHN0cnVjdCB0aHJlYWQgKm5ld3RkLCBpbnQgZmxhZ3MpDQp7DQoJc3RydWN0
IGtzZSAqa2U7DQoNCgltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7DQoNCglr
ZSA9IHRkLT50ZF9rc2U7DQoNCgl0ZC0+dGRfbGFzdGNwdSA9IHRkLT50ZF9vbmNwdTsNCgl0
ZC0+dGRfb25jcHUgPSBOT0NQVTsNCgl0ZC0+dGRfZmxhZ3MgJj0gflRERl9ORUVEUkVTQ0hF
RDsNCgl0ZC0+dGRfcGZsYWdzICY9IH5URFBfT1dFUFJFRU1QVDsNCg0KCS8qDQoJICogSWYg
dGhlIEtTRSBoYXMgYmVlbiBhc3NpZ25lZCBpdCBtYXkgYmUgaW4gdGhlIHByb2Nlc3Mgb2Yg
c3dpdGNoaW5nDQoJICogdG8gdGhlIG5ldyBjcHUuICBUaGlzIGlzIHRoZSBjYXNlIGluIHNj
aGVkX2JpbmQoKS4NCgkgKi8NCglpZiAoKGtlLT5rZV9mbGFncyAmIEtFRl9BU1NJR05FRCkg
PT0gMCkgew0KCQlpZiAodGQgPT0gUENQVV9HRVQoaWRsZXRocmVhZCkpIHsNCgkJCVREX1NF
VF9DQU5fUlVOKHRkKTsNCgkJfSBlbHNlIHsNCgkJCS8qIFdlIGFyZSBlbmRpbmcgb3VyIHJ1
biBzbyBtYWtlIG91ciBzbG90IGF2YWlsYWJsZSBhZ2FpbiAqLw0KCQkJU0xPVF9SRUxFQVNF
KHRkLT50ZF9rc2VncnApOw0KCQkJaWYgKFREX0lTX1JVTk5JTkcodGQpKSB7DQoJCQkJa3Nl
cV9sb2FkX3JlbShLU0VRX0NQVShrZS0+a2VfY3B1KSwga2UpOw0KCQkJCS8qDQoJCQkJICog
RG9uJ3QgYWxsb3cgdGhlIHRocmVhZCB0byBtaWdyYXRlDQoJCQkJICogZnJvbSBhIHByZWVt
cHRpb24uDQoJCQkJICovDQoJCQkJa2UtPmtlX2ZsYWdzIHw9IEtFRl9IT0xEOw0KCQkJCXNl
dHJ1bnF1ZXVlKHRkLCBTUlFfT1VSU0VMRnxTUlFfWUlFTERJTkcpOw0KCQkJfSBlbHNlIHsN
CgkJCQlpZiAoa2UtPmtlX3J1bnEpIHsNCgkJCQkJa3NlcV9sb2FkX3JlbShLU0VRX0NQVShr
ZS0+a2VfY3B1KSwga2UpOw0KCQkJCX0gZWxzZSBpZiAoKHRkLT50ZF9mbGFncyAmIFRERl9J
RExFVEQpID09IDApDQoJCQkJCWtkYl9iYWNrdHJhY2UoKTsNCgkJCQkvKg0KCQkJCSAqIFdl
IHdpbGwgbm90IGJlIG9uIHRoZSBydW4gcXVldWUuDQoJCQkJICogU28gd2UgbXVzdCBiZSBz
bGVlcGluZyBvciBzaW1pbGFyLg0KCQkJCSAqIERvbid0IHVzZSB0aGUgc2xvdCBpZiB3ZSB3
aWxsIG5lZWQgaXQgDQoJCQkJICogZm9yIG5ld3RkLg0KCQkJCSAqLw0KCQkJCWlmICgodGQt
PnRkX3Byb2MtPnBfZmxhZyAmIFBfSEFEVEhSRUFEUykgJiYNCgkJCQkgICAgKG5ld3RkID09
IE5VTEwgfHwNCgkJCQkgICAgbmV3dGQtPnRkX2tzZWdycCAhPSB0ZC0+dGRfa3NlZ3JwKSkN
CgkJCQkJc2xvdF9maWxsKHRkLT50ZF9rc2VncnApOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmIChu
ZXd0ZCAhPSBOVUxMKSB7DQoJCS8qDQoJCSAqIElmIHdlIGJyaW5nIGluIGEgdGhyZWFkLCAN
CgkJICogdGhlbiBhY2NvdW50IGZvciBpdCBhcyBpZiBpdCBoYWQgYmVlbiBhZGRlZCB0byB0
aGUNCgkJICogcnVuIHF1ZXVlIGFuZCB0aGVuIGNob3Nlbi4NCgkJICovDQoJCW5ld3RkLT50
ZF9rc2UtPmtlX2ZsYWdzIHw9IEtFRl9ESURSVU47DQoJCVNMT1RfVVNFKG5ld3RkLT50ZF9r
c2VncnApOw0KCQlURF9TRVRfUlVOTklORyhuZXd0ZCk7DQoJCWtzZXFfbG9hZF9hZGQoS1NF
UV9TRUxGKCksIG5ld3RkLT50ZF9rc2UpOw0KCX0gZWxzZQ0KCQluZXd0ZCA9IGNob29zZXRo
cmVhZCgpOw0KCWlmICh0ZCAhPSBuZXd0ZCkNCgkJY3B1X3N3aXRjaCh0ZCwgbmV3dGQpOw0K
CXNjaGVkX2xvY2subXR4X2xvY2sgPSAodWludHB0cl90KXRkOw0KDQoJdGQtPnRkX29uY3B1
ID0gUENQVV9HRVQoY3B1aWQpOw0KfQ0KDQp2b2lkDQpzY2hlZF9uaWNlKHN0cnVjdCBwcm9j
ICpwLCBpbnQgbmljZSkNCnsNCglzdHJ1Y3Qga3NlZ3JwICprZzsNCglzdHJ1Y3Qga3NlICpr
ZTsNCglzdHJ1Y3QgdGhyZWFkICp0ZDsNCglzdHJ1Y3Qga3NlcSAqa3NlcTsNCg0KCVBST0Nf
TE9DS19BU1NFUlQocCwgTUFfT1dORUQpOw0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1B
X09XTkVEKTsNCgkvKg0KCSAqIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBuaWNlIGNvdW50cyBm
b3IgcnVubmluZyBLU0VzLg0KCSAqLw0KCUZPUkVBQ0hfS1NFR1JQX0lOX1BST0MocCwga2cp
IHsNCgkJaWYgKGtnLT5rZ19wcmlfY2xhc3MgPT0gUFJJX1RJTUVTSEFSRSkgew0KCQkJRk9S
RUFDSF9USFJFQURfSU5fR1JPVVAoa2csIHRkKSB7DQoJCQkJa2UgPSB0ZC0+dGRfa3NlOw0K
CQkJCWlmIChrZS0+a2VfcnVucSA9PSBOVUxMKQ0KCQkJCQljb250aW51ZTsNCgkJCQlrc2Vx
ID0gS1NFUV9DUFUoa2UtPmtlX2NwdSk7DQoJCQkJa3NlcV9uaWNlX3JlbShrc2VxLCBwLT5w
X25pY2UpOw0KCQkJCWtzZXFfbmljZV9hZGQoa3NlcSwgbmljZSk7DQoJCQl9DQoJCX0NCgl9
DQoJcC0+cF9uaWNlID0gbmljZTsNCglGT1JFQUNIX0tTRUdSUF9JTl9QUk9DKHAsIGtnKSB7
DQoJCXNjaGVkX3ByaW9yaXR5KGtnKTsNCgkJRk9SRUFDSF9USFJFQURfSU5fR1JPVVAoa2cs
IHRkKQ0KCQkJdGQtPnRkX2ZsYWdzIHw9IFRERl9ORUVEUkVTQ0hFRDsNCgl9DQp9DQoNCnZv
aWQNCnNjaGVkX3NsZWVwKHN0cnVjdCB0aHJlYWQgKnRkKQ0Kew0KCW10eF9hc3NlcnQoJnNj
aGVkX2xvY2ssIE1BX09XTkVEKTsNCg0KCXRkLT50ZF9zbHB0aW1lID0gdGlja3M7DQoJdGQt
PnRkX2Jhc2VfcHJpID0gdGQtPnRkX3ByaW9yaXR5Ow0KDQoJQ1RSMihLVFJfVUxFLCAic2xl
ZXAgdGhyZWFkICVwICh0aWNrOiAlZCkiLA0KCSAgICB0ZCwgdGQtPnRkX3NscHRpbWUpOw0K
fQ0KDQp2b2lkDQpzY2hlZF93YWtldXAoc3RydWN0IHRocmVhZCAqdGQpDQp7DQoJbXR4X2Fz
c2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KDQoJLyoNCgkgKiBMZXQgdGhlIGtzZWcg
a25vdyBob3cgbG9uZyB3ZSBzbGVwdCBmb3IuICBUaGlzIGlzIGJlY2F1c2UgcHJvY2Vzcw0K
CSAqIGludGVyYWN0aXZpdHkgYmVoYXZpb3IgaXMgbW9kZWxlZCBpbiB0aGUga3NlZy4NCgkg
Ki8NCglpZiAodGQtPnRkX3NscHRpbWUpIHsNCgkJc3RydWN0IGtzZWdycCAqa2c7DQoJCWlu
dCBoenRpY2tzOw0KDQoJCWtnID0gdGQtPnRkX2tzZWdycDsNCgkJaHp0aWNrcyA9ICh0aWNr
cyAtIHRkLT50ZF9zbHB0aW1lKSA8PCAxMDsNCgkJaWYgKGh6dGlja3MgPj0gU0NIRURfU0xQ
X1JVTl9NQVgpIHsNCgkJCWtnLT5rZ19zbHB0aW1lID0gU0NIRURfU0xQX1JVTl9NQVg7DQoJ
CQlrZy0+a2dfcnVudGltZSA9IDE7DQoJCX0gZWxzZSB7DQoJCQlrZy0+a2dfc2xwdGltZSAr
PSBoenRpY2tzOw0KCQkJc2NoZWRfaW50ZXJhY3RfdXBkYXRlKGtnKTsNCgkJfQ0KCQlzY2hl
ZF9wcmlvcml0eShrZyk7DQoJCXNjaGVkX3NsaWNlKHRkLT50ZF9rc2UpOw0KCQlDVFIyKEtU
Ul9VTEUsICJ3YWtldXAgdGhyZWFkICVwICglZCB0aWNrcykiLCB0ZCwgaHp0aWNrcyk7DQoJ
CXRkLT50ZF9zbHB0aW1lID0gMDsNCgl9DQoJc2V0cnVucXVldWUodGQsIFNSUV9CT1JJTkcp
Ow0KfQ0KDQovKg0KICogUGVuYWxpemUgdGhlIHBhcmVudCBmb3IgY3JlYXRpbmcgYSBuZXcg
Y2hpbGQgYW5kIGluaXRpYWxpemUgdGhlIGNoaWxkJ3MNCiAqIHByaW9yaXR5Lg0KICovDQp2
b2lkDQpzY2hlZF9mb3JrKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3QgdGhyZWFkICpjaGls
ZHRkKQ0Kew0KDQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KDQoJc2No
ZWRfZm9ya19rc2VncnAodGQsIGNoaWxkdGQtPnRkX2tzZWdycCk7DQoJc2NoZWRfZm9ya190
aHJlYWQodGQsIGNoaWxkdGQpOw0KfQ0KDQp2b2lkDQpzY2hlZF9mb3JrX2tzZWdycChzdHJ1
Y3QgdGhyZWFkICp0ZCwgc3RydWN0IGtzZWdycCAqY2hpbGQpDQp7DQoJc3RydWN0IGtzZWdy
cCAqa2cgPSB0ZC0+dGRfa3NlZ3JwOw0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09X
TkVEKTsNCg0KCWNoaWxkLT5rZ19zbHB0aW1lID0ga2ctPmtnX3NscHRpbWU7DQoJY2hpbGQt
PmtnX3J1bnRpbWUgPSBrZy0+a2dfcnVudGltZTsNCgljaGlsZC0+a2dfdXNlcl9wcmkgPSBr
Zy0+a2dfdXNlcl9wcmk7DQoJc2NoZWRfaW50ZXJhY3RfZm9yayhjaGlsZCk7DQoJa2ctPmtn
X3J1bnRpbWUgKz0gdGlja2luY3IgPDwgMTA7DQoJc2NoZWRfaW50ZXJhY3RfdXBkYXRlKGtn
KTsNCg0KCUNUUjYoS1RSX1VMRSwgInNjaGVkX2Zvcmtfa3NlZ3JwOiAlZCglZCwgJWQpIC0g
JWQoJWQsICVkKSIsDQoJICAgIGtnLT5rZ19wcm9jLT5wX3BpZCwga2ctPmtnX3NscHRpbWUs
IGtnLT5rZ19ydW50aW1lLCANCgkgICAgY2hpbGQtPmtnX3Byb2MtPnBfcGlkLCBjaGlsZC0+
a2dfc2xwdGltZSwgY2hpbGQtPmtnX3J1bnRpbWUpOw0KfQ0KDQp2b2lkDQpzY2hlZF9mb3Jr
X3RocmVhZChzdHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHRocmVhZCAqY2hpbGQpDQp7DQoJ
c3RydWN0IGtzZSAqa2U7DQoJc3RydWN0IGtzZSAqa2UyOw0KDQoJc2NoZWRfbmV3dGhyZWFk
KGNoaWxkKTsNCglrZSA9IHRkLT50ZF9rc2U7DQoJa2UyID0gY2hpbGQtPnRkX2tzZTsNCglr
ZTItPmtlX3NsaWNlID0gMTsJLyogQXR0ZW1wdCB0byBxdWlja2x5IGxlYXJuIGludGVyYWN0
aXZpdHkuICovDQoJa2UyLT5rZV9jcHUgPSBrZS0+a2VfY3B1Ow0KCWtlMi0+a2VfcnVucSA9
IE5VTEw7DQoNCgkvKiBHcmFiIG91ciBwYXJlbnRzIGNwdSBlc3RpbWF0aW9uIGluZm9ybWF0
aW9uLiAqLw0KCWtlMi0+a2VfdGlja3MgPSBrZS0+a2VfdGlja3M7DQoJa2UyLT5rZV9sdGlj
ayA9IGtlLT5rZV9sdGljazsNCglrZTItPmtlX2Z0aWNrID0ga2UtPmtlX2Z0aWNrOw0KfQ0K
DQp2b2lkDQpzY2hlZF9jbGFzcyhzdHJ1Y3Qga3NlZ3JwICprZywgaW50IGNsYXNzKQ0Kew0K
CXN0cnVjdCBrc2VxICprc2VxOw0KCXN0cnVjdCBrc2UgKmtlOw0KCXN0cnVjdCB0aHJlYWQg
KnRkOw0KCWludCBuY2xhc3M7DQoJaW50IG9jbGFzczsNCg0KCW10eF9hc3NlcnQoJnNjaGVk
X2xvY2ssIE1BX09XTkVEKTsNCglpZiAoa2ctPmtnX3ByaV9jbGFzcyA9PSBjbGFzcykNCgkJ
cmV0dXJuOw0KDQoJbmNsYXNzID0gUFJJX0JBU0UoY2xhc3MpOw0KCW9jbGFzcyA9IFBSSV9C
QVNFKGtnLT5rZ19wcmlfY2xhc3MpOw0KCUZPUkVBQ0hfVEhSRUFEX0lOX0dST1VQKGtnLCB0
ZCkgew0KCQlrZSA9IHRkLT50ZF9rc2U7DQoJCWlmIChrZS0+a2Vfc3RhdGUgIT0gS0VTX09O
UlVOUSAmJg0KCQkgICAga2UtPmtlX3N0YXRlICE9IEtFU19USFJFQUQpDQoJCQljb250aW51
ZTsNCgkJa3NlcSA9IEtTRVFfQ1BVKGtlLT5rZV9jcHUpOw0KDQojaWZkZWYgU01QDQoJCS8q
DQoJCSAqIE9uIFNNUCBpZiB3ZSdyZSBvbiB0aGUgUlVOUSB3ZSBtdXN0IGFkanVzdCB0aGUg
dHJhbnNmZXJhYmxlDQoJCSAqIGNvdW50IGJlY2F1c2UgY291bGQgYmUgY2hhbmdpbmcgdG8g
b3IgZnJvbSBhbiBpbnRlcnJ1cHQNCgkJICogY2xhc3MuDQoJCSAqLw0KCQlpZiAoa2UtPmtl
X3N0YXRlID09IEtFU19PTlJVTlEpIHsNCgkJCWlmIChLU0VfQ0FOX01JR1JBVEUoa2UsIG9j
bGFzcykpIHsNCgkJCQlrc2VxLT5rc3FfdHJhbnNmZXJhYmxlLS07DQoJCQkJa3NlcS0+a3Nx
X2dyb3VwLT5rc2dfdHJhbnNmZXJhYmxlLS07DQoJCQl9DQoJCQlpZiAoS1NFX0NBTl9NSUdS
QVRFKGtlLCBuY2xhc3MpKSB7DQoJCQkJa3NlcS0+a3NxX3RyYW5zZmVyYWJsZSsrOw0KCQkJ
CWtzZXEtPmtzcV9ncm91cC0+a3NnX3RyYW5zZmVyYWJsZSsrOw0KCQkJfQ0KCQl9DQojZW5k
aWYNCgkJaWYgKG9jbGFzcyA9PSBQUklfVElNRVNIQVJFKSB7DQoJCQlrc2VxLT5rc3FfbG9h
ZF90aW1lc2hhcmUtLTsNCgkJCWtzZXFfbmljZV9yZW0oa3NlcSwga2ctPmtnX3Byb2MtPnBf
bmljZSk7DQoJCX0NCgkJaWYgKG5jbGFzcyA9PSBQUklfVElNRVNIQVJFKSB7DQoJCQlrc2Vx
LT5rc3FfbG9hZF90aW1lc2hhcmUrKzsNCgkJCWtzZXFfbmljZV9hZGQoa3NlcSwga2ctPmtn
X3Byb2MtPnBfbmljZSk7DQoJCX0NCgl9DQoNCglrZy0+a2dfcHJpX2NsYXNzID0gY2xhc3M7
DQp9DQoNCi8qDQogKiBSZXR1cm4gc29tZSBvZiB0aGUgY2hpbGQncyBwcmlvcml0eSBhbmQg
aW50ZXJhY3Rpdml0eSB0byB0aGUgcGFyZW50Lg0KICogQXZvaWQgdXNpbmcgc2NoZWRfZXhp
dF90aHJlYWQgdG8gYXZvaWQgaGF2aW5nIHRvIGRlY2lkZSB3aGljaA0KICogdGhyZWFkIGlu
IHRoZSBwYXJlbnQgZ2V0cyB0aGUgaG9ub3VyIHNpbmNlIGl0IGlzbid0IHVzZWQuDQogKi8N
CnZvaWQNCnNjaGVkX2V4aXQoc3RydWN0IHByb2MgKnAsIHN0cnVjdCB0aHJlYWQgKmNoaWxk
dGQpDQp7DQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQpOw0KCXNjaGVkX2V4
aXRfa3NlZ3JwKEZJUlNUX0tTRUdSUF9JTl9QUk9DKHApLCBjaGlsZHRkKTsNCglrc2VxX2xv
YWRfcmVtKEtTRVFfQ1BVKGNoaWxkdGQtPnRkX2tzZS0+a2VfY3B1KSwgY2hpbGR0ZC0+dGRf
a3NlKTsNCn0NCg0Kdm9pZA0Kc2NoZWRfZXhpdF9rc2VncnAoc3RydWN0IGtzZWdycCAqa2cs
IHN0cnVjdCB0aHJlYWQgKnRkKQ0Kew0KCS8qIGtnLT5rZ19zbHB0aW1lICs9IHRkLT50ZF9r
c2VncnAtPmtnX3NscHRpbWU7ICovDQoJa2ctPmtnX3J1bnRpbWUgKz0gdGQtPnRkX2tzZWdy
cC0+a2dfcnVudGltZTsNCglzY2hlZF9pbnRlcmFjdF91cGRhdGUoa2cpOw0KfQ0KDQp2b2lk
DQpzY2hlZF9leGl0X3RocmVhZChzdHJ1Y3QgdGhyZWFkICp0ZCwgc3RydWN0IHRocmVhZCAq
Y2hpbGR0ZCkNCnsNCglrc2VxX2xvYWRfcmVtKEtTRVFfQ1BVKGNoaWxkdGQtPnRkX2tzZS0+
a2VfY3B1KSwgY2hpbGR0ZC0+dGRfa3NlKTsNCn0NCg0Kdm9pZA0Kc2NoZWRfY2xvY2soc3Ry
dWN0IHRocmVhZCAqdGQpDQp7DQoJc3RydWN0IGtzZXEgKmtzZXE7DQoJc3RydWN0IGtzZWdy
cCAqa2c7DQoJc3RydWN0IGtzZSAqa2U7DQoNCgltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBN
QV9PV05FRCk7DQoJa3NlcSA9IEtTRVFfU0VMRigpOw0KI2lmZGVmIFNNUA0KCWlmICh0aWNr
cyA9PSBiYWxfdGljaykNCgkJc2NoZWRfYmFsYW5jZSgpOw0KCWlmICh0aWNrcyA9PSBnYmFs
X3RpY2spDQoJCXNjaGVkX2JhbGFuY2VfZ3JvdXBzKCk7DQoJLyoNCgkgKiBXZSBjb3VsZCBo
YXZlIGJlZW4gYXNzaWduZWQgYSBub24gcmVhbC10aW1lIHRocmVhZCB3aXRob3V0IGFuDQoJ
ICogSVBJLg0KCSAqLw0KCWlmIChrc2VxLT5rc3FfYXNzaWduZWQpDQoJCWtzZXFfYXNzaWdu
KGtzZXEpOwkvKiBQb3RlbnRpYWxseSBzZXRzIE5FRURSRVNDSEVEICovDQojZW5kaWYNCgkv
Kg0KCSAqIHNjaGVkX3NldHVwKCkgYXBwYXJlbnRseSBoYXBwZW5zIHByaW9yIHRvIHN0YXRo
eiBiZWluZyBzZXQuICBXZQ0KCSAqIG5lZWQgdG8gcmVzb2x2ZSB0aGUgdGltZXJzIGVhcmxp
ZXIgaW4gdGhlIGJvb3Qgc28gd2UgY2FuIGF2b2lkDQoJICogY2FsY3VsYXRpbmcgdGhpcyBo
ZXJlLg0KCSAqLw0KCWlmIChyZWFsc3RhdGh6ID09IDApIHsNCgkJcmVhbHN0YXRoeiA9IHN0
YXRoeiA/IHN0YXRoeiA6IGh6Ow0KCQl0aWNraW5jciA9IGh6IC8gcmVhbHN0YXRoejsNCgkJ
LyoNCgkJICogWFhYIFRoaXMgZG9lcyBub3Qgd29yayBmb3IgdmFsdWVzIG9mIHN0YXRoeiB0
aGF0IGFyZSBtdWNoDQoJCSAqIGxhcmdlciB0aGFuIGh6Lg0KCQkgKi8NCgkJaWYgKHRpY2tp
bmNyID09IDApDQoJCQl0aWNraW5jciA9IDE7DQoJfQ0KDQoJa2UgPSB0ZC0+dGRfa3NlOw0K
CWtnID0ga2UtPmtlX2tzZWdycDsNCg0KCS8qIEFkanVzdCB0aWNrcyBmb3IgcGN0Y3B1ICov
DQoJa2UtPmtlX3RpY2tzKys7DQoJa2UtPmtlX2x0aWNrID0gdGlja3M7DQoNCgkvKiBHbyB1
cCB0byBvbmUgc2Vjb25kIGJleW9uZCBvdXIgbWF4IGFuZCB0aGVuIHRyaW0gYmFjayBkb3du
ICovDQoJaWYgKGtlLT5rZV9mdGljayArIFNDSEVEX0NQVV9USUNLUyArIGh6IDwga2UtPmtl
X2x0aWNrKQ0KCQlzY2hlZF9wY3RjcHVfdXBkYXRlKGtlKTsNCg0KCWlmICh0ZC0+dGRfZmxh
Z3MgJiBUREZfSURMRVREKQ0KCQlyZXR1cm47DQoNCglDVFI0KEtUUl9VTEUsICJUaWNrIHRo
cmVhZCAlcCAoc2xpY2U6ICVkLCBzbHB0aW1lOiAlZCwgcnVudGltZTogJWQpIiwNCgkgICAg
dGQsIGtlLT5rZV9zbGljZSwga2ctPmtnX3NscHRpbWUgPj4gMTAsIGtnLT5rZ19ydW50aW1l
ID4+IDEwKTsNCgkvKg0KCSAqIFdlIG9ubHkgZG8gc2xpY2luZyBjb2RlIGZvciBUSU1FU0hB
UkUga3NlZ3Jwcy4NCgkgKi8NCglpZiAoa2ctPmtnX3ByaV9jbGFzcyAhPSBQUklfVElNRVNI
QVJFKQ0KCQlyZXR1cm47DQoJLyoNCgkgKiBXZSB1c2VkIGEgdGljayBjaGFyZ2UgaXQgdG8g
dGhlIGtzZWdycCBzbyB0aGF0IHdlIGNhbiBjb21wdXRlIG91cg0KCSAqIGludGVyYWN0aXZp
dHkuDQoJICovDQoJa2ctPmtnX3J1bnRpbWUgKz0gdGlja2luY3IgPDwgMTA7DQoJc2NoZWRf
aW50ZXJhY3RfdXBkYXRlKGtnKTsNCg0KCS8qDQoJICogV2UgdXNlZCB1cCBvbmUgdGltZSBz
bGljZS4NCgkgKi8NCglpZiAoLS1rZS0+a2Vfc2xpY2UgPiAwKQ0KCQlyZXR1cm47DQoJLyoN
CgkgKiBXZSdyZSBvdXQgb2YgdGltZSwgcmVjb21wdXRlIHByaW9yaXRpZXMgYW5kIHJlcXVl
dWUuDQoJICovDQoJa3NlcV9sb2FkX3JlbShrc2VxLCBrZSk7DQoJc2NoZWRfcHJpb3JpdHko
a2cpOw0KCXNjaGVkX3NsaWNlKGtlKTsNCglpZiAoU0NIRURfQ1VSUihrZywga2UpKQ0KCQlr
ZS0+a2VfcnVucSA9IGtzZXEtPmtzcV9jdXJyOw0KCWVsc2UNCgkJa2UtPmtlX3J1bnEgPSBr
c2VxLT5rc3FfbmV4dDsNCglrc2VxX2xvYWRfYWRkKGtzZXEsIGtlKTsNCgl0ZC0+dGRfZmxh
Z3MgfD0gVERGX05FRURSRVNDSEVEOw0KfQ0KDQppbnQNCnNjaGVkX3J1bm5hYmxlKHZvaWQp
DQp7DQoJc3RydWN0IGtzZXEgKmtzZXE7DQoJaW50IGxvYWQ7DQoNCglsb2FkID0gMTsNCg0K
CWtzZXEgPSBLU0VRX1NFTEYoKTsNCiNpZmRlZiBTTVANCglpZiAoa3NlcS0+a3NxX2Fzc2ln
bmVkKSB7DQoJCW10eF9sb2NrX3NwaW4oJnNjaGVkX2xvY2spOw0KCQlrc2VxX2Fzc2lnbihr
c2VxKTsNCgkJbXR4X3VubG9ja19zcGluKCZzY2hlZF9sb2NrKTsNCgl9DQojZW5kaWYNCglp
ZiAoKGN1cnRocmVhZC0+dGRfZmxhZ3MgJiBUREZfSURMRVREKSAhPSAwKSB7DQoJCWlmIChr
c2VxLT5rc3FfbG9hZCA+IDApDQoJCQlnb3RvIG91dDsNCgl9IGVsc2UNCgkJaWYgKGtzZXEt
PmtzcV9sb2FkIC0gMSA+IDApDQoJCQlnb3RvIG91dDsNCglsb2FkID0gMDsNCm91dDoNCgly
ZXR1cm4gKGxvYWQpOw0KfQ0KDQp2b2lkDQpzY2hlZF91c2VycmV0KHN0cnVjdCB0aHJlYWQg
KnRkKQ0Kew0KCXN0cnVjdCBrc2VncnAgKmtnOw0KDQoJa2cgPSB0ZC0+dGRfa3NlZ3JwOw0K
CQ0KCWlmICh0ZC0+dGRfcHJpb3JpdHkgIT0ga2ctPmtnX3VzZXJfcHJpKSB7DQoJCW10eF9s
b2NrX3NwaW4oJnNjaGVkX2xvY2spOw0KCQl0ZC0+dGRfcHJpb3JpdHkgPSBrZy0+a2dfdXNl
cl9wcmk7DQoJCW10eF91bmxvY2tfc3Bpbigmc2NoZWRfbG9jayk7DQoJfQ0KfQ0KDQpzdHJ1
Y3Qga3NlICoNCnNjaGVkX2Nob29zZSh2b2lkKQ0Kew0KCXN0cnVjdCBrc2VxICprc2VxOw0K
CXN0cnVjdCBrc2UgKmtlOw0KDQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFfT1dORUQp
Ow0KCWtzZXEgPSBLU0VRX1NFTEYoKTsNCiNpZmRlZiBTTVANCnJlc3RhcnQ6DQoJaWYgKGtz
ZXEtPmtzcV9hc3NpZ25lZCkNCgkJa3NlcV9hc3NpZ24oa3NlcSk7DQojZW5kaWYNCglrZSA9
IGtzZXFfY2hvb3NlKGtzZXEpOw0KCWlmIChrZSkgew0KI2lmZGVmIFNNUA0KCQlpZiAoa2Ut
PmtlX2tzZWdycC0+a2dfcHJpX2NsYXNzID09IFBSSV9JRExFKQ0KCQkJaWYgKGtzZXFfaWRs
ZWQoa3NlcSkgPT0gMCkNCgkJCQlnb3RvIHJlc3RhcnQ7DQojZW5kaWYNCgkJa3NlcV9ydW5x
X3JlbShrc2VxLCBrZSk7DQoJCWtlLT5rZV9zdGF0ZSA9IEtFU19USFJFQUQ7DQoNCgkJaWYg
KGtlLT5rZV9rc2VncnAtPmtnX3ByaV9jbGFzcyA9PSBQUklfVElNRVNIQVJFKSB7DQoJCQlD
VFI0KEtUUl9VTEUsICJSdW4gdGhyZWFkICVwIGZyb20gJXAgKHNsaWNlOiAlZCwgcHJpOiAl
ZCkiLA0KCQkJICAgIGtlLT5rZV90aHJlYWQsIGtlLT5rZV9ydW5xLCBrZS0+a2Vfc2xpY2Us
DQoJCQkgICAga2UtPmtlX3RocmVhZC0+dGRfcHJpb3JpdHkpOw0KCQl9DQoJCXJldHVybiAo
a2UpOw0KCX0NCiNpZmRlZiBTTVANCglpZiAoa3NlcV9pZGxlZChrc2VxKSA9PSAwKQ0KCQln
b3RvIHJlc3RhcnQ7DQojZW5kaWYNCglyZXR1cm4gKE5VTEwpOw0KfQ0KDQp2b2lkDQpzY2hl
ZF9hZGQoc3RydWN0IHRocmVhZCAqdGQsIGludCBmbGFncykNCnsNCg0KCS8qIGxldCBqZWZm
IHdvcmsgb3V0IGhvdyB0byBtYXAgdGhlIGZsYWdzIGJldHRlciAqLw0KCS8qIEknbSBvcGVu
IHRvIHN1Z2dlc3Rpb25zICovDQoJaWYgKGZsYWdzICYgU1JRX1lJRUxESU5HKQ0KCQkvKg0K
CQkgKiBQcmVlbXB0aW5nIGR1cmluZyBzd2l0Y2hpbmcgY2FuIGJlIGJhZCBKVUpVDQoJCSAq
IGVzcGVjaWFsbHkgZm9yIEtTRSBwcm9jZXNzZXMNCgkJICovDQoJCXNjaGVkX2FkZF9pbnRl
cm5hbCh0ZCwgMCk7DQoJZWxzZQ0KCQlzY2hlZF9hZGRfaW50ZXJuYWwodGQsIDEpOw0KfQ0K
DQpzdGF0aWMgdm9pZA0Kc2NoZWRfYWRkX2ludGVybmFsKHN0cnVjdCB0aHJlYWQgKnRkLCBp
bnQgcHJlZW1wdGl2ZSkNCnsNCglzdHJ1Y3Qga3NlcSAqa3NlcTsNCglzdHJ1Y3Qga3NlZ3Jw
ICprZzsNCglzdHJ1Y3Qga3NlICprZTsNCiNpZmRlZiBTTVANCglpbnQgY2FubWlncmF0ZTsN
CiNlbmRpZg0KCWludCBjbGFzczsNCg0KCW10eF9hc3NlcnQoJnNjaGVkX2xvY2ssIE1BX09X
TkVEKTsNCglrZSA9IHRkLT50ZF9rc2U7DQoJa2cgPSB0ZC0+dGRfa3NlZ3JwOw0KCWlmIChr
ZS0+a2VfZmxhZ3MgJiBLRUZfQVNTSUdORUQpDQoJCXJldHVybjsNCglrc2VxID0gS1NFUV9T
RUxGKCk7DQoJS0FTU0VSVChrZS0+a2Vfc3RhdGUgIT0gS0VTX09OUlVOUSwNCgkgICAgKCJz
Y2hlZF9hZGQ6IGtzZSAlcCAoJXMpIGFscmVhZHkgaW4gcnVuIHF1ZXVlIiwga2UsDQoJICAg
IGtlLT5rZV9wcm9jLT5wX2NvbW0pKTsNCglLQVNTRVJUKGtlLT5rZV9wcm9jLT5wX3NmbGFn
ICYgUFNfSU5NRU0sDQoJICAgICgic2NoZWRfYWRkOiBwcm9jZXNzIHN3YXBwZWQgb3V0Iikp
Ow0KCUtBU1NFUlQoa2UtPmtlX3J1bnEgPT0gTlVMTCwNCgkgICAgKCJzY2hlZF9hZGQ6IEtT
RSAlcCBpcyBzdGlsbCBhc3NpZ25lZCB0byBhIHJ1biBxdWV1ZSIsIGtlKSk7DQoNCgljbGFz
cyA9IFBSSV9CQVNFKGtnLT5rZ19wcmlfY2xhc3MpOw0KCXN3aXRjaCAoY2xhc3MpIHsNCglj
YXNlIFBSSV9JVEhEOg0KCWNhc2UgUFJJX1JFQUxUSU1FOg0KCQlrZS0+a2VfcnVucSA9IGtz
ZXEtPmtzcV9jdXJyOw0KCQlrZS0+a2Vfc2xpY2UgPSBTQ0hFRF9TTElDRV9NQVg7DQoJCWtl
LT5rZV9jcHUgPSBQQ1BVX0dFVChjcHVpZCk7DQoJCWJyZWFrOw0KCWNhc2UgUFJJX1RJTUVT
SEFSRToNCgkJaWYgKFNDSEVEX0NVUlIoa2csIGtlKSkNCgkJCWtlLT5rZV9ydW5xID0ga3Nl
cS0+a3NxX2N1cnI7DQoJCWVsc2UNCgkJCWtlLT5rZV9ydW5xID0ga3NlcS0+a3NxX25leHQ7
DQoJCWJyZWFrOw0KCWNhc2UgUFJJX0lETEU6DQoJCS8qDQoJCSAqIFRoaXMgaXMgZm9yIHBy
aW9yaXR5IHByb3AuDQoJCSAqLw0KCQlpZiAoa2UtPmtlX3RocmVhZC0+dGRfcHJpb3JpdHkg
PCBQUklfTUlOX0lETEUpDQoJCQlrZS0+a2VfcnVucSA9IGtzZXEtPmtzcV9jdXJyOw0KCQll
bHNlDQoJCQlrZS0+a2VfcnVucSA9ICZrc2VxLT5rc3FfaWRsZTsNCgkJa2UtPmtlX3NsaWNl
ID0gU0NIRURfU0xJQ0VfTUlOOw0KCQlicmVhazsNCglkZWZhdWx0Og0KCQlwYW5pYygiVW5r
bm93biBwcmkgY2xhc3MuIik7DQoJCWJyZWFrOw0KCX0NCiNpZmRlZiBTTVANCgkvKg0KCSAq
IERvbid0IG1pZ3JhdGUgcnVubmluZyB0aHJlYWRzIGhlcmUuICBGb3JjZSB0aGUgbG9uZyB0
ZXJtIGJhbGFuY2VyDQoJICogdG8gZG8gaXQuDQoJICovDQoJY2FubWlncmF0ZSA9IEtTRV9D
QU5fTUlHUkFURShrZSwgY2xhc3MpOw0KCWlmIChrZS0+a2VfZmxhZ3MgJiBLRUZfSE9MRCkg
ew0KCQlrZS0+a2VfZmxhZ3MgJj0gfktFRl9IT0xEOw0KCQljYW5taWdyYXRlID0gMDsNCgl9
DQoJLyoNCgkgKiBJZiB0aGlzIHRocmVhZCBpcyBwaW5uZWQgb3IgYm91bmQsIG5vdGlmeSB0
aGUgdGFyZ2V0IGNwdS4NCgkgKi8NCglpZiAoIWNhbm1pZ3JhdGUgJiYga2UtPmtlX2NwdSAh
PSBQQ1BVX0dFVChjcHVpZCkgKSB7DQoJCWtlLT5rZV9ydW5xID0gTlVMTDsNCgkJa3NlcV9u
b3RpZnkoa2UsIGtlLT5rZV9jcHUpOw0KCQlyZXR1cm47DQoJfQ0KCS8qDQoJICogSWYgd2Ug
aGFkIGJlZW4gaWRsZSwgY2xlYXIgb3VyIGJpdCBpbiB0aGUgZ3JvdXAgYW5kIHBvdGVudGlh
bGx5DQoJICogdGhlIGdsb2JhbCBiaXRtYXAuICBJZiBub3QsIHNlZSBpZiB3ZSBzaG91bGQg
dHJhbnNmZXIgdGhpcyB0aHJlYWQuDQoJICovDQoJaWYgKChjbGFzcyA9PSBQUklfVElNRVNI
QVJFIHx8IGNsYXNzID09IFBSSV9SRUFMVElNRSkgJiYNCgkgICAgKGtzZXEtPmtzcV9ncm91
cC0+a3NnX2lkbGVtYXNrICYgUENQVV9HRVQoY3B1bWFzaykpICE9IDApIHsNCgkJLyoNCgkJ
ICogQ2hlY2sgdG8gc2VlIGlmIG91ciBncm91cCBpcyB1bmlkbGluZywgYW5kIGlmIHNvLCBy
ZW1vdmUgaXQNCgkJICogZnJvbSB0aGUgZ2xvYmFsIGlkbGUgbWFzay4NCgkJICovDQoJCWlm
IChrc2VxLT5rc3FfZ3JvdXAtPmtzZ19pZGxlbWFzayA9PQ0KCQkgICAga3NlcS0+a3NxX2dy
b3VwLT5rc2dfY3B1bWFzaykNCgkJCWF0b21pY19jbGVhcl9pbnQoJmtzZXFfaWRsZSwga3Nl
cS0+a3NxX2dyb3VwLT5rc2dfbWFzayk7DQoJCS8qDQoJCSAqIE5vdyByZW1vdmUgb3Vyc2Vs
dmVzIGZyb20gdGhlIGdyb3VwIHNwZWNpZmljIGlkbGUgbWFzay4NCgkJICovDQoJCWtzZXEt
PmtzcV9ncm91cC0+a3NnX2lkbGVtYXNrICY9IH5QQ1BVX0dFVChjcHVtYXNrKTsNCgl9IGVs
c2UgaWYgKGtzZXEtPmtzcV9sb2FkID4gMSAmJiBjYW5taWdyYXRlKQ0KCQlpZiAoa3NlcV90
cmFuc2Zlcihrc2VxLCBrZSwgY2xhc3MpKQ0KCQkJcmV0dXJuOw0KCWtlLT5rZV9jcHUgPSBQ
Q1BVX0dFVChjcHVpZCk7DQojZW5kaWYNCgkvKg0KCSAqIFhYWCBXaXRoIHByZWVtcHRpb24g
dGhpcyBpcyBub3QgbmVjZXNzYXJ5Lg0KCSAqLw0KCWlmICh0ZC0+dGRfcHJpb3JpdHkgPCBj
dXJ0aHJlYWQtPnRkX3ByaW9yaXR5ICYmDQoJICAgIGtlLT5rZV9ydW5xID09IGtzZXEtPmtz
cV9jdXJyKQ0KCQljdXJ0aHJlYWQtPnRkX2ZsYWdzIHw9IFRERl9ORUVEUkVTQ0hFRDsNCglp
ZiAocHJlZW1wdGl2ZSAmJiBtYXliZV9wcmVlbXB0KHRkKSkNCgkJcmV0dXJuOw0KCVNMT1Rf
VVNFKHRkLT50ZF9rc2VncnApOw0KCWtlLT5rZV9rc2VncnAtPmtnX3J1bnFfdGhyZWFkcysr
Ow0KCWtlLT5rZV9zdGF0ZSA9IEtFU19PTlJVTlE7DQoNCglrc2VxX3J1bnFfYWRkKGtzZXEs
IGtlKTsNCglrc2VxX2xvYWRfYWRkKGtzZXEsIGtlKTsNCn0NCg0Kdm9pZA0Kc2NoZWRfcmVt
KHN0cnVjdCB0aHJlYWQgKnRkKQ0Kew0KCXN0cnVjdCBrc2VxICprc2VxOw0KCXN0cnVjdCBr
c2UgKmtlOw0KDQoJa2UgPSB0ZC0+dGRfa3NlOw0KCS8qDQoJICogSXQgaXMgc2FmZSB0byBq
dXN0IHJldHVybiBoZXJlIGJlY2F1c2Ugc2NoZWRfcmVtKCkgaXMgb25seSBldmVyDQoJICog
dXNlZCBpbiBwbGFjZXMgd2hlcmUgd2UncmUgaW1tZWRpYXRlbHkgZ29pbmcgdG8gYWRkIHRo
ZQ0KCSAqIGtzZSBiYWNrIG9uIGFnYWluLiAgSW4gdGhhdCBjYXNlIGl0J2xsIGJlIGFkZGVk
IHdpdGggdGhlIGNvcnJlY3QNCgkgKiB0aHJlYWQgYW5kIHByaW9yaXR5IHdoZW4gdGhlIGNh
bGxlciBkcm9wcyB0aGUgc2NoZWRfbG9jay4NCgkgKi8NCglpZiAoa2UtPmtlX2ZsYWdzICYg
S0VGX0FTU0lHTkVEKQ0KCQlyZXR1cm47DQoJbXR4X2Fzc2VydCgmc2NoZWRfbG9jaywgTUFf
T1dORUQpOw0KCUtBU1NFUlQoKGtlLT5rZV9zdGF0ZSA9PSBLRVNfT05SVU5RKSwNCgkgICAg
KCJzY2hlZF9yZW06IEtTRSBub3Qgb24gcnVuIHF1ZXVlIikpOw0KDQoJa2UtPmtlX3N0YXRl
ID0gS0VTX1RIUkVBRDsNCglTTE9UX1JFTEVBU0UodGQtPnRkX2tzZWdycCk7DQoJa2UtPmtl
X2tzZWdycC0+a2dfcnVucV90aHJlYWRzLS07DQoJa3NlcSA9IEtTRVFfQ1BVKGtlLT5rZV9j
cHUpOw0KCWtzZXFfcnVucV9yZW0oa3NlcSwga2UpOw0KCWtzZXFfbG9hZF9yZW0oa3NlcSwg
a2UpOw0KfQ0KDQpmaXhwdF90DQpzY2hlZF9wY3RjcHUoc3RydWN0IHRocmVhZCAqdGQpDQp7
DQoJZml4cHRfdCBwY3RjcHU7DQoJc3RydWN0IGtzZSAqa2U7DQoNCglwY3RjcHUgPSAwOw0K
CWtlID0gdGQtPnRkX2tzZTsNCglpZiAoa2UgPT0gTlVMTCkNCgkJcmV0dXJuICgwKTsNCg0K
CW10eF9sb2NrX3NwaW4oJnNjaGVkX2xvY2spOw0KCWlmIChrZS0+a2VfdGlja3MpIHsNCgkJ
aW50IHJ0aWNrOw0KDQoJCS8qDQoJCSAqIERvbid0IHVwZGF0ZSBtb3JlIGZyZXF1ZW50bHkg
dGhhbiB0d2ljZSBhIHNlY29uZC4gIEFsbG93aW5nDQoJCSAqIHRoaXMgY2F1c2VzIHRoZSBj
cHUgdXNhZ2UgdG8gZGVjYXkgYXdheSB0b28gcXVpY2tseSBkdWUgdG8NCgkJICogcm91bmRp
bmcgZXJyb3JzLg0KCQkgKi8NCgkJaWYgKGtlLT5rZV9mdGljayArIFNDSEVEX0NQVV9USUNL
UyA8IGtlLT5rZV9sdGljayB8fA0KCQkgICAga2UtPmtlX2x0aWNrIDwgKHRpY2tzIC0gKGh6
IC8gMikpKQ0KCQkJc2NoZWRfcGN0Y3B1X3VwZGF0ZShrZSk7DQoJCS8qIEhvdyBtYW55IHJ0
aWNrIHBlciBzZWNvbmQgPyAqLw0KCQlydGljayA9IG1pbihrZS0+a2VfdGlja3MgLyBTQ0hF
RF9DUFVfVElNRSwgU0NIRURfQ1BVX1RJQ0tTKTsNCgkJcGN0Y3B1ID0gKEZTQ0FMRSAqICgo
RlNDQUxFICogcnRpY2spL3JlYWxzdGF0aHopKSA+PiBGU0hJRlQ7DQoJfQ0KDQoJa2UtPmtl
X3Byb2MtPnBfc3d0aW1lID0ga2UtPmtlX2x0aWNrIC0ga2UtPmtlX2Z0aWNrOw0KCW10eF91
bmxvY2tfc3Bpbigmc2NoZWRfbG9jayk7DQoNCglyZXR1cm4gKHBjdGNwdSk7DQp9DQoNCnZv
aWQNCnNjaGVkX2JpbmQoc3RydWN0IHRocmVhZCAqdGQsIGludCBjcHUpDQp7DQoJc3RydWN0
IGtzZSAqa2U7DQoNCgltdHhfYXNzZXJ0KCZzY2hlZF9sb2NrLCBNQV9PV05FRCk7DQoJa2Ug
PSB0ZC0+dGRfa3NlOw0KCWtlLT5rZV9mbGFncyB8PSBLRUZfQk9VTkQ7DQojaWZkZWYgU01Q
DQoJaWYgKFBDUFVfR0VUKGNwdWlkKSA9PSBjcHUpDQoJCXJldHVybjsNCgkvKiBzY2hlZF9y
ZW0gd2l0aG91dCB0aGUgcnVucV9yZW1vdmUgKi8NCglrZS0+a2Vfc3RhdGUgPSBLRVNfVEhS
RUFEOw0KCWtlLT5rZV9rc2VncnAtPmtnX3J1bnFfdGhyZWFkcy0tOw0KCWtzZXFfbG9hZF9y
ZW0oS1NFUV9DUFUoa2UtPmtlX2NwdSksIGtlKTsNCglrc2VxX25vdGlmeShrZSwgY3B1KTsN
CgkvKiBXaGVuIHdlIHJldHVybiBmcm9tIG1pX3N3aXRjaCB3ZSdsbCBiZSBvbiB0aGUgY29y
cmVjdCBjcHUuICovDQoJbWlfc3dpdGNoKFNXX1ZPTCwgTlVMTCk7DQojZW5kaWYNCn0NCg0K
dm9pZA0Kc2NoZWRfdW5iaW5kKHN0cnVjdCB0aHJlYWQgKnRkKQ0Kew0KCW10eF9hc3NlcnQo
JnNjaGVkX2xvY2ssIE1BX09XTkVEKTsNCgl0ZC0+dGRfa3NlLT5rZV9mbGFncyAmPSB+S0VG
X0JPVU5EOw0KfQ0KDQppbnQNCnNjaGVkX2xvYWQodm9pZCkNCnsNCiNpZmRlZiBTTVANCglp
bnQgdG90YWw7DQoJaW50IGk7DQoNCgl0b3RhbCA9IDA7DQoJZm9yIChpID0gMDsgaSA8PSBr
c2dfbWF4aWQ7IGkrKykNCgkJdG90YWwgKz0gS1NFUV9HUk9VUChpKS0+a3NnX2xvYWQ7DQoJ
cmV0dXJuICh0b3RhbCk7DQojZWxzZQ0KCXJldHVybiAoS1NFUV9TRUxGKCktPmtzcV9zeXNs
b2FkKTsNCiNlbmRpZg0KfQ0KDQppbnQNCnNjaGVkX3NpemVvZl9rc2VncnAodm9pZCkNCnsN
CglyZXR1cm4gKHNpemVvZihzdHJ1Y3Qga3NlZ3JwKSArIHNpemVvZihzdHJ1Y3Qga2dfc2No
ZWQpKTsNCn0NCg0KaW50DQpzY2hlZF9zaXplb2ZfcHJvYyh2b2lkKQ0Kew0KCXJldHVybiAo
c2l6ZW9mKHN0cnVjdCBwcm9jKSk7DQp9DQoNCmludA0Kc2NoZWRfc2l6ZW9mX3RocmVhZCh2
b2lkKQ0Kew0KCXJldHVybiAoc2l6ZW9mKHN0cnVjdCB0aHJlYWQpICsgc2l6ZW9mKHN0cnVj
dCB0ZF9zY2hlZCkpOw0KfQ0KI2RlZmluZSBLRVJOX1NXSVRDSF9JTkNMVURFIDENCiNpbmNs
dWRlICJrZXJuL2tlcm5fc3dpdGNoLmMiDQo=

--_===8514806====mx1.intranet.ru===_
Content-Type: text/plain
Content-Disposition: attachment;
 filename="out.txt"
Content-Transfer-Encoding: base64

cm0gLWYgLm9sZGRlcA0KaWYgWyAtZiAuZGVwZW5kIF07IHRoZW4gbXYgLmRlcGVuZCAub2xk
ZGVwOyBmaQ0KbWFrZSBfa2VybmVsLWRlcGVuZA0KaWYgWyAtZiAub2xkZGVwIF07IHRoZW4g
bXYgLm9sZGRlcCAuZGVwZW5kOyBmaQ0Kcm0gLWYgLm5ld2RlcA0KbWFrZSAtViBDRklMRVMg
LVYgU1lTVEVNX0NGSUxFUyAtViBHRU5fQ0ZJTEVTIHwgIE1LREVQX0NQUD0iY2MgLUUiIEND
PSJjYyIgeGFyZ3MgbWtkZXAgLWEgLWYgLm5ld2RlcCAtTyAtcGlwZSAgLVdhbGwgLVdyZWR1
bmRhbnQtZGVjbHMgLVduZXN0ZWQtZXh0ZXJucyAtV3N0cmljdC1wcm90b3R5cGVzICAtV21p
c3NpbmctcHJvdG90eXBlcyAtV3BvaW50ZXItYXJpdGggLVdpbmxpbmUgLVdjYXN0LXF1YWwg
IC1mZm9ybWF0LWV4dGVuc2lvbnMgLXN0ZD1jOTkgIC1ub3N0ZGluYyAtSS0gIC1JLiAtSS4u
Ly4uLy4uIC1JLi4vLi4vLi4vY29udHJpYi9kZXYvYWNwaWNhIC1JLi4vLi4vLi4vY29udHJp
Yi9hbHRxIC1JLi4vLi4vLi4vY29udHJpYi9pcGZpbHRlciAtSS4uLy4uLy4uL2NvbnRyaWIv
cGYgLUkuLi8uLi8uLi9jb250cmliL2Rldi9hdGggLUkuLi8uLi8uLi9jb250cmliL2Rldi9h
dGgvZnJlZWJzZCAtSS4uLy4uLy4uL2NvbnRyaWIvbmdhdG0gLURfS0VSTkVMIC1pbmNsdWRl
IG9wdF9nbG9iYWwuaCAtZm5vLWNvbW1vbiAtZmlubGluZS1saW1pdD04MDAwIC0tcGFyYW0g
aW5saW5lLXVuaXQtZ3Jvd3RoPTEwMCAtLXBhcmFtIGxhcmdlLWZ1bmN0aW9uLWdyb3d0aD0x
MDAwICAtbW5vLWFsaWduLWxvbmctc3RyaW5ncyAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFy
eT0yIC1mZnJlZXN0YW5kaW5nDQouLi8uLi8uLi9rZXJuL3NjaGVkX3VsZS5jOjYwOjI6ICNl
cnJvciAiVGhlIFNDSEVEX1VMRSBzY2hlZHVsZXIgaXMgYnJva2VuLiBQbGVhc2UgdXNlIFND
SEVEXzRCU0QiDQpta2RlcDogY29tcGlsZSBmYWlsZWQNCioqKiBFcnJvciBjb2RlIDENCg0K
U3RvcCBpbiAvdXNyL3NyYy9zeXMvaTM4Ni9jb21waWxlL0dFTkVSSUMuDQoqKiogRXJyb3Ig
Y29kZSAxDQoNClN0b3AgaW4gL3Vzci9zcmMvc3lzL2kzODYvY29tcGlsZS9HRU5FUklDLg0K

--_===8514806====mx1.intranet.ru===_--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?web-8514806>