small sysinst(8) without extended partitioning support

Rin Okuyama <[email protected]> Thu, 20 Sep 2018 18:04:40 +0900
Newsgroups gmane.os.netbsd.ports.atari,gmane.os.netbsd.current
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------39720A19D060170BB18E2AF7
Content-Type: text/plain; charset=us-ascii; format=flowed; delsp=yes
Content-Transfer-Encoding: 7bit

Hi,

Although the recent floppy overflow for atari was gone, I expected
that it surely occurs again in the near future.

I propose to add NOPARTMAN option to sysinst(8), which drops extended
partitioning support provided by partman.c. If this option is enabled,
about 30KB is reduced for crunched binary for atari install floppy.
It should be useful also for old ports with sysinst(8).

It requires

- separate extended partitioning stuffs from menu.mi to menu.pm
- 8 extra #if(n)def's

I've confirmed sysinst(8) with and without this option works on amd64.

Any suggestions?

Thanks,
rin

--------------39720A19D060170BB18E2AF7
Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0";
 name="sysinst_nopartman_20180920.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="sysinst_nopartman_20180920.patch"

SW5kZXg6IHVzci5zYmluL3N5c2luc3QvTWFrZWZpbGUuaW5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9ob21lL25ldGJzZC9zcmMvdXNyLnNiaW4vc3lzaW5zdC9NYWtlZmlsZS5pbmMs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIgTWFrZWZpbGUu
aW5jCi0tLSB1c3Iuc2Jpbi9zeXNpbnN0L01ha2VmaWxlLmluYwkxNiBTZXAgMjAxOCAwOTox
NToxMiAtMDAwMAkxLjEyCisrKyB1c3Iuc2Jpbi9zeXNpbnN0L01ha2VmaWxlLmluYwkyMCBT
ZXAgMjAxOCAwMDo1OTo0NiAtMDAwMApAQCAtMTMsMTggKzEzLDIyIEBAIFdBUk5TPQkJNAog
CiBTUkNTKz0JbWVudV9kZWZzLmMgbXNnX2RlZnMuYyBtYWluLmMgaW5zdGFsbC5jIHVwZ3Jh
ZGUuYyBcCiAJdHh0d2Fsay5jIHJ1bi5jIGZhY3Rvci5jIG5ldC5jIGRpc2tzLmMgZGlza3Nf
bGZzLmMgdXRpbC5jIGdlb20uYyBcCi0JbGFiZWwuYyB0YXJnZXQuYyBtZC5jIHNpemVtdWx0
bmFtZS5jIGNvbmZpZ21lbnUuYyBjaGVja3JjLmMgcGFydG1hbi5jCisJbGFiZWwuYyB0YXJn
ZXQuYyBtZC5jIHNpemVtdWx0bmFtZS5jIGNvbmZpZ21lbnUuYyBjaGVja3JjLmMKIAogU1JD
Uys9CSR7TURfT1BUSU9OUzpNQU9VVDJFTEY6Uy9BT1VUMkVMRi9hb3V0MmVsZi5jL30KIFNS
Q1MrPQkke01FTlVTX01EOk1tZW51cy5tYnI6Uy9tZW51cy5tYnIvbWJyLmMvfQogU1JDUys9
CSR7Q1BQRkxBR1M6TS1EV1NLQkQ6Uy8tRFdTS0JEL3dza2JkLmMvfQogU1JDUys9CSR7Tk9E
SVNLTEFCRUw6RDpVYnNkZGlza2xhYmVsLmMgc2F2ZW5ld2xhYmVsLmN9CitTUkNTKz0JJHtO
T1BBUlRNQU46RDpVcGFydG1hbi5jfQogCiBEUFNSQ1MrPSBkZWZzLmgKIAogU1lTSU5TVExB
Tkc/PQllbgogTEFOR1VBR0VTPz0JZGUgZW4gZXMgZnIgcGwKIAorTUVOVVNfTUk9CW1lbnVz
Lm1pCitNRU5VU19NSSs9CSR7Tk9QQVJUTUFOOkQ6VW1lbnVzLnBtfQorCiBNU0dfTUQ/PQlt
c2cubWQuJHtTWVNJTlNUTEFOR30KIE1FTlVTX01EPz0JbWVudXMubWQuJHtTWVNJTlNUTEFO
R30KIApAQCAtNDgsNyArNTIsOCBAQCBDQVRBTE9HRElSPQkvdXNyL3NoYXJlL3N5c2luc3Qv
Y2F0YWxvZwogQ1BQRkxBR1MrPQktSS4gLUkkey5DVVJESVJ9Ly4uLy4uIC1JJHsuQ1VSRElS
fSBcCiAJCS1EUkVMPVwiJHtESVNUUklCVkVSfVwiIC1ETUFDSD1cIiR7TUFDSElORX1cIiBc
CiAJCS1ETUFDSF8ke01BQ0hJTkV9IC1EQVJDSF8ke01BQ0hJTkVfQVJDSH0gXAotCQkke05P
RElTS0xBQkVMOkQtRE5PX0RJU0tMQUJFTH0KKwkJJHtOT0RJU0tMQUJFTDpELUROT19ESVNL
TEFCRUx9IFwKKwkJJHtOT1BBUlRNQU46RC1ETk9fUEFSVE1BTn0KIAogLmlmIGRlZmluZWQo
TkVUQlNEX09GRklDSUFMX1JFTEVBU0UpICYmICR7TkVUQlNEX09GRklDSUFMX1JFTEVBU0V9
ID09ICJ5ZXMiCiBDUFBGTEFHUys9IC1EU1lTSU5TVF9GVFBfSE9TVD1cImZ0cC5OZXRCU0Qu
b3JnXCIgLURORVRCU0RfT0ZGSUNJQUxfUkVMRUFTRQpAQCAtMTY4LDcgKzE3Myw3IEBAIG1z
Zy5kZWY6IG1zZy5taS4ke1NZU0lOU1RMQU5HfSAke01TR19NRH0KIAkke1RPT0xfU0VEfSAi
cy9AQE1BQ0hJTkVAQC8ke01BQ0hJTkV9LyIgfCBcCiAJJHtUT09MX0FXS30gLWYgJHtVTklG
X0FXS30gLXYgZGVmaW5lcz0iJHtNRF9PUFRJT05TfSIgPiAkey5UQVJHRVR9CiAKLW1lbnVz
LmRlZjogbWVudXMubWkgJHtNRU5VU19NRH0gbXNndG91Y2gKK21lbnVzLmRlZjogJHtNRU5V
U19NSX0gJHtNRU5VU19NRH0gbXNndG91Y2gKIAkke19NS1RBUkdFVF9DUkVBVEV9CiAJJHtU
T09MX1NFRH0gInMvQEBWRVJTSU9OQEAvJHtESVNUUklCVkVSfS8iICR7LkFMTFNSQ30gfCBc
CiAJJHtUT09MX1NFRH0gInMvQEBNQUNISU5FQEAvJHtNQUNISU5FfS8iIHwgXApJbmRleDog
dXNyLnNiaW4vc3lzaW5zdC9kZWZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUv
bmV0YnNkL3NyYy91c3Iuc2Jpbi9zeXNpbnN0L2RlZnMuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xOApkaWZmIC1wIC11IC1yMS4xOCBkZWZzLmgKLS0tIHVzci5zYmluL3N5c2luc3Qv
ZGVmcy5oCTE2IFNlcCAyMDE4IDA5OjE1OjEyIC0wMDAwCTEuMTgKKysrIHVzci5zYmluL3N5
c2luc3QvZGVmcy5oCTIwIFNlcCAyMDE4IDA4OjM5OjQ5IC0wMDAwCkBAIC02MTMsOSArNjEz
LDE2IEBAIHZvaWQJdW53aW5kX21vdW50cyh2b2lkKTsKIGludAl0YXJnZXRfbW91bnRlZCh2
b2lkKTsKIAogLyogZnJvbSBwYXJ0bWFuLmMgKi8KKyNpZm5kZWYgTk9fUEFSVE1BTgogaW50
IHBhcnRtYW4odm9pZCk7Ci1pbnQgcG1fcGFydHVzYWdlKHBtX2RldnNfdCAqLCBpbnQsIGlu
dCk7CiBpbnQgcG1fZ2V0cmVmZGV2KHBtX2RldnNfdCAqKTsKK3ZvaWQgdXBkYXRlX3dlZGdl
cyhjb25zdCBjaGFyICopOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnRtYW4odm9p
ZCkgeyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtX2dldHJlZmRldihwbV9k
ZXZzX3QgKnggX191bnVzZWQpIHsgcmV0dXJuIC0xOyB9CisjZGVmaW5lIHVwZGF0ZV93ZWRn
ZXMoeCkgX19ub3RoaW5nCisjZW5kaWYKK2ludCBwbV9wYXJ0dXNhZ2UocG1fZGV2c190ICos
IGludCwgaW50KTsKIHZvaWQgcG1fc2V0ZnN0eXBlKHBtX2RldnNfdCAqLCBpbnQsIGludCk7
CiBpbnQgcG1fZWRpdHBhcnQoaW50KTsKIHZvaWQgcG1fcmVuYW1lKHBtX2RldnNfdCAqKTsK
QEAgLTYyNiwxMyArNjMzLDE2IEBAIGludCBwbV9jZ2RfZWRpdCh2b2lkICosIHBhcnRfZW50
cnlfdCAqKTsKIGludCBwbV9ncHRfY29udmVydChwbV9kZXZzX3QgKik7CiB2b2lkIHBtX3dl
ZGdlc19maWxsKHBtX2RldnNfdCAqKTsKIHZvaWQgcG1fbWFrZV9ic2RfcGFydGl0aW9ucyhw
bV9kZXZzX3QgKik7Ci12b2lkIHVwZGF0ZV93ZWRnZXMoY29uc3QgY2hhciAqKTsKIAogLyog
ZmxhZ3Mgd2hldGhlciB0byBvZmZlciB0aGUgcmVzcGVjdGl2ZSBvcHRpb25zIChkZXBlbmRp
bmcgb24gaGVscGVyCiAgICBwcm9ncmFtcyBhdmFpbGFibGUgb24gaW5zdGFsbCBtZWRpYSAq
LwogaW50IGhhdmVfcmFpZCwgaGF2ZV92bmQsIGhhdmVfY2dkLCBoYXZlX2x2bSwgaGF2ZV9n
cHQsIGhhdmVfZGs7CiAvKiBpbml0aWFsaXplIGFib3ZlIHZhcmlhYmxlcyAqLworI2lmbmRl
ZiBOT19QQVJUTUFOCiB2b2lkIGNoZWNrX2F2YWlsYWJsZV9iaW5hcmllcyh2b2lkKTsKKyNl
bHNlCisjZGVmaW5lIGNoZWNrX2F2YWlsYWJsZV9iaW5hcmllcygpIF9fbm90aGluZworI2Vu
ZGlmCiAKIC8qIGZyb20gYnNkZGlza2xhYmVsLmMgKi8KIGludAltYWtlX2JzZF9wYXJ0aXRp
b25zKHZvaWQpOwpJbmRleDogdXNyLnNiaW4vc3lzaW5zdC9pbnN0YWxsLmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2hvbWUvbmV0YnNkL3NyYy91c3Iuc2Jpbi9zeXNpbnN0L2luc3Rh
bGwuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQgaW5zdGFs
bC5jCi0tLSB1c3Iuc2Jpbi9zeXNpbnN0L2luc3RhbGwuYwkxMCBNYXkgMjAxNSAxMDoxNDow
MiAtMDAwMAkxLjQKKysrIHVzci5zYmluL3N5c2luc3QvaW5zdGFsbC5jCTIwIFNlcCAyMDE4
IDAwOjQyOjA1IC0wMDAwCkBAIC00Nyw3ICs0NywxMSBAQCBkb19pbnN0YWxsKHZvaWQpCiB7
CiAJaW50IGZpbmRfZGlza3NfcmV0OwogCWludCByZXRjb2RlID0gMDsKKyNpZm5kZWYgTk9f
UEFSVE1BTgogCXBhcnRtYW5fZ28gPSAtMTsKKyNlbHNlCisJcGFydG1hbl9nbyA9IDA7Cisj
ZW5kaWYKIAogI2lmbmRlZiBERUJVRwogCW1zZ19kaXNwbGF5KE1TR19pbnN0YWxsdXN1cmUp
OwpJbmRleDogdXNyLnNiaW4vc3lzaW5zdC9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2hvbWUvbmV0YnNkL3NyYy91c3Iuc2Jpbi9zeXNpbnN0L21haW4uYyx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS45CmRpZmYgLXAgLXUgLXIxLjkgbWFpbi5jCi0tLSB1c3Iuc2Jpbi9z
eXNpbnN0L21haW4uYwkxMiBTZXAgMjAxOCAxMzo0NDowNSAtMDAwMAkxLjkKKysrIHVzci5z
YmluL3N5c2luc3QvbWFpbi5jCTIwIFNlcCAyMDE4IDAxOjMwOjIwIC0wMDAwCkBAIC0xNzks
NyArMTc5LDExIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCX0KIAogCS8qIGFy
Z3YgcHJvY2Vzc2luZyAqLwotCXdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgIkRy
OmY6QzpwIikpICE9IC0xKQorCXdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgIkRy
OmY6QzoiCisjaWZuZGVmIE5PX1BBUlRNQU4KKwkgICAgInAiCisjZW5kaWYKKwkgICAgKSkg
IT0gLTEpCiAJCXN3aXRjaChjaCkgewogCQljYXNlICdEJzoJLyogc2V0IHRvIGdldCBwYXN0
IGNlcnRhaW4gZXJyb3JzIGluIHRlc3RpbmcgKi8KIAkJCWRlYnVnID0gMTsKQEAgLTE5Niwx
MCArMjAwLDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJLyogRGVmaW5l
IGNvbG9ycyAqLwogCQkJc3NjYW5mKG9wdGFyZywgIiV1OiV1IiwgJmNscl9hcmcuYmcsICZj
bHJfYXJnLmZnKTsKIAkJCWJyZWFrOworI2lmbmRlZiBOT19QQVJUTUFOCiAJCWNhc2UgJ3An
OgogCQkJLyogUGFydGl0aW9uIHRvb2wgKi8KIAkJCXBhcnRtYW5fZ28gPSAxOwogCQkJYnJl
YWs7CisjZW5kaWYKIAkJY2FzZSAnPyc6CiAJCWRlZmF1bHQ6CiAJCQl1c2FnZSgpOwpJbmRl
eDogdXNyLnNiaW4vc3lzaW5zdC9tZW51cy5taQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
aG9tZS9uZXRic2Qvc3JjL3Vzci5zYmluL3N5c2luc3QvbWVudXMubWksdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTQKZGlmZiAtcCAtdSAtcjEuMTQgbWVudXMubWkKLS0tIHVzci5zYmlu
L3N5c2luc3QvbWVudXMubWkJMTEgU2VwIDIwMTggMDg6MDU6MTggLTAwMDAJMS4xNAorKysg
dXNyLnNiaW4vc3lzaW5zdC9tZW51cy5taQkyMCBTZXAgMjAxOCAwMToxMToyMCAtMDAwMApA
QCAtODQsNiArODQsNyBAQCByZW1vdmVfc3ViX21lbnUoaW50IG1lbnVJRCkKIAl9CiB9CiAK
KyNpZm5kZWYgTk9fUEFSVE1BTgogc3RhdGljIHZvaWQKIHJlbW92ZV9tZW51X29wdGlvbihp
bnQgbWVudUlELCBjb25zdCBjaGFyICpvcHRpb24pCiB7CkBAIC0xMDEsNiArMTAyLDcgQEAg
cmVtb3ZlX21lbnVfb3B0aW9uKGludCBtZW51SUQsIGNvbnN0IGNoYQogCQl9CiAJfQogfQor
I2VuZGlmCiAKIHZvaWQKIHJlbW92ZV9jb2xvcl9vcHRpb25zKCkKQEAgLTExMyw2ICsxMTUs
NyBAQCByZW1vdmVfY29sb3Jfb3B0aW9ucygpCiAJcmVtb3ZlX3N1Yl9tZW51KE1FTlVfY29s
b3JzKTsKIH0KIAorI2lmbmRlZiBOT19QQVJUTUFOCiB2b2lkCiByZW1vdmVfcmFpZF9vcHRp
b25zKCkKIHsKQEAgLTE1Miw2ICsxNTUsNyBAQCByZW1vdmVfY2dkX29wdGlvbnMoKQogCXJl
bW92ZV9tZW51X29wdGlvbihNRU5VX3BtZGlza2VudHJ5LCBNU0dfZW5jcnlwdCk7CiAJcmVt
b3ZlX21lbnVfb3B0aW9uKE1FTlVfcG1wYXJ0ZW50cnksIE1TR19lbmNyeXB0KTsKIH0KKyNl
bmRpZgogCiB9CiAKQEAgLTI3MSw3ICsyNzUsMTMgQEAgbWVudSB1dGlsaXR5LCB0aXRsZSBN
U0dfTmV0QlNEX1ZFUlNJT05fVQogCQkJbmV0d29ya191cCA9IDA7CiAJCQljb25maWdfbmV0
d29yaygpOwogCQl9OwotCW9wdGlvbiBNU0dfUGFydGl0aW9uX2FfZGlzaywgYWN0aW9uIHsg
cGFydG1hbl9nbyA9IDE7IHBhcnRtYW4oKTsgfTsKKwlvcHRpb24gTVNHX1BhcnRpdGlvbl9h
X2Rpc2ssCisJCWFjdGlvbiB7CisjaWZuZGVmIE5PX1BBUlRNQU4KKwkJCXBhcnRtYW5fZ28g
PSAxOworCQkJcGFydG1hbigpOworI2VuZGlmCisJCX07CiAJb3B0aW9uIE1TR19Mb2dnaW5n
X2Z1bmN0aW9ucywgYWN0aW9uIHsgZG9fbG9nZ2luZygpOyB9OwogCW9wdGlvbiBNU0dfQ29s
b3Jfc2NoZW1lLCBzdWIgbWVudSBjb2xvcnM7CiAJb3B0aW9uIE1TR19IYWx0X3RoZV9zeXN0
ZW0sIGV4aXQsCkBAIC02MjIsMTM4ICs2MzIsMyBAQCBtZW51IHVzZXJzaCwgdGl0bGUgTVNH
X1VzZXJfc2hlbGwsIG5vIGNsCiAJb3B0aW9uICIvYmluL3NoIiwgIGV4aXQsIGFjdGlvbiB7
IHVzaGVsbCA9ICIvYmluL3NoIjt9OyAKIAlvcHRpb24gIi9iaW4va3NoIiwgZXhpdCwgYWN0
aW9uIHsgdXNoZWxsID0gIi9iaW4va3NoIjt9OwogCW9wdGlvbiAiL2Jpbi9jc2giLCBleGl0
LCBhY3Rpb24geyB1c2hlbGwgPSAiL2Jpbi9jc2giO307Ci0KLQotbWVudSBwbWRpc2tlbnRy
eSwgeD01MCwgeT01LCBleGl0LCBkZWZhdWx0IGV4aXQ7Ci0Jb3B0aW9uIE1TR19lZGl0YnNk
cGFydCwgZXhpdCwgYWN0aW9uIHsgcG1fbWFrZV9ic2RfcGFydGl0aW9ucyhwbSk7IH07Ci0J
b3B0aW9uIE1TR19lZGl0bWJyLAkJZXhpdCwgYWN0aW9uIHsgbWRfZ2V0X2luZm8oKTsKLQkJ
CQkJCQkJCQkJbWRfcHJlX2Rpc2tsYWJlbCgpOwotCQkJCQkJCQkJCQltZW1zZXQoJnBtLT5i
c2RsYWJlbCwgMCwgc2l6ZW9mIHBtLT5ic2RsYWJlbCk7fTsKLQlvcHRpb24gTVNHX3N3aXRj
aGdwdCwJZXhpdCwgYWN0aW9uIHsgaWYgKHBtX2dwdF9jb252ZXJ0KHBtKSA9PSAwKQotCQkJ
CQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAtMSwgMSk7IH07Ci0Jb3B0aW9uIE1TR19yZW5h
bWVkaXNrLAlleGl0LCBhY3Rpb24geyBwbS0+dW5zYXZlZCA9IDE7IHBtX3JlbmFtZShwbSk7
IH07Ci0Jb3B0aW9uIE1TR19mbXRhc3JhaWQsCWV4aXQsIGFjdGlvbiB7IHBtLT51bnNhdmVk
ID0gMTsKLQkJCQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAtMSwgMSk7Ci0JCQkJCQkJCQkJ
CWxheW91dGtpbmQgPSBMWV9ORVdSQUlEOwotCQkJCQkJCQkJCQltZF9tYWtlX2JzZF9wYXJ0
aXRpb25zKCk7fTsKLQlvcHRpb24gTVNHX2ZtdGFzbHZtLAlleGl0LCBhY3Rpb24geyBwbS0+
dW5zYXZlZCA9IDE7Ci0JCQkJCQkJCQkJCXBtX3BhcnR1c2FnZShwbSwgLTEsIDEpOwotCQkJ
CQkJCQkJCQlsYXlvdXRraW5kID0gTFlfTkVXTFZNOwotCQkJCQkJCQkJCQltZF9tYWtlX2Jz
ZF9wYXJ0aXRpb25zKCk7IH07Ci0Jb3B0aW9uIE1TR19lbmNyeXB0LAkJZXhpdCwgYWN0aW9u
IHsgcG0tPnVuc2F2ZWQgPSAxOwotCQkJCQkJCQkJCQlwbV9wYXJ0dXNhZ2UocG0sIC0xLCAx
KTsKLQkJCQkJCQkJCQkJbGF5b3V0a2luZCA9IExZX05FV0NHRDsKLQkJCQkJCQkJCQkJbWRf
bWFrZV9ic2RfcGFydGl0aW9ucygpOwotCQkJCQkJCQkJCQlwbV9jZ2RfZWRpdCgwLCAmKHBh
cnRfZW50cnlfdCkKLQkJCQkJCQkJCQkJCXsuZGV2X3B0ciA9IHBtLCAuZGV2X251bSA9IFBB
UlRfRX0KLQkJCQkJCQkJCQkJKTsgfTsKLQlvcHRpb24gTVNHX3NldGJvb3RhYmxlLAlleGl0
LCBhY3Rpb24geyBwbS0+dW5zYXZlZCA9IDE7Ci0JCQkJCQkJCQkJCXBtLT5ib290YWJsZSA9
ICFwbS0+Ym9vdGFibGU7IH07Ci0Jb3B0aW9uIE1TR19lcmFzZSwJCW5leHQgbWVudSBzaHJl
ZF9tb2RlczsKLQlvcHRpb24gTVNHX3VuZG8sCQlleGl0LCBhY3Rpb24geyBsYWJlbF9yZWFk
KCk7IHBtLT51bnNhdmVkID0gMDsKLQkJCQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAtMSwg
MSk7IH07Ci0Jb3B0aW9uIE1TR191bmNvbmZpZywJZXhpdCwgYWN0aW9uIHsgaWYgKHBtX3Vu
Y29uZmlndXJlKHBtKSA9PSAwKQotCQkJCQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAtMSwg
MSk7IH07Ci0KLW1lbnUgcG1wYXJ0ZW50cnksIHg9NTAsIHk9NSwgZXhpdCwgZGVmYXVsdCBl
eGl0OwotCW9wdGlvbiBNU0dfZWRpdCwJCWV4aXQsIGFjdGlvbiB7IAotCQkJCQkJCQkJcG0t
PnVuc2F2ZWQgPSAxOwotCQkJCQkJCQkJaW50IHRwZnMgPSBwbS0+YnNkbGFiZWxbKihpbnQq
KWFyZ10ucGlfZnN0eXBlOwotCQkJCQkJCQkJaW50IHRwbHZtID0gcG0tPmJzZGxhYmVsWyoo
aW50KilhcmddLmx2bXB2OwotCQkJCQkJCQkJcG1fZWRpdHBhcnQoKihpbnQqKWFyZyk7Ci0J
CQkJCQkJCQlpZiAodHBmcyAhPSBwbS0+YnNkbGFiZWxbKihpbnQqKWFyZ10ucGlfZnN0eXBl
IHx8Ci0JCQkJCQkJCQkJdHBsdm0gIT0gcG0tPmJzZGxhYmVsWyooaW50KilhcmddLmx2bXB2
KQotCQkJCQkJCQkJCS8qIE9vcHMsIHBhcnRpdGlvbiB0eXBlIGNoYW5nZWQgKi8KLQkJCQkJ
CQkJCQlwbV9wYXJ0dXNhZ2UocG0sICooaW50KilhcmcsIDEpOwotCQkJCQkJCQl9OwotCW9w
dGlvbiBNU0dfZm10YXNyYWlkLAlleGl0LCBhY3Rpb24gewotCQkJCQkJCQkJaWYgKHBtLT5n
cHQgfHwgcG0tPmlzc3BlY2lhbCkgewotCQkJCQkJCQkJCXByb2Nlc3NfbWVudShNRU5VX29r
LCBfX1VOQ09OU1QoTVNHX25vdHN1cHBvcnRlZCkpOwotCQkJCQkJCQkJCXJldHVybiAtMTsK
LQkJCQkJCQkJCX0KLQkJCQkJCQkJCXBtLT51bnNhdmVkID0gMTsKLQkJCQkJCQkJCXBtX3Bh
cnR1c2FnZShwbSwgKihpbnQqKWFyZywgMSk7Ci0JCQkJCQkJCQlwbV9zZXRmc3R5cGUocG0s
ICooaW50KilhcmcsIEZTX1JBSUQpOwotCQkJCQkJCQl9OwotCW9wdGlvbiBNU0dfZm10YXNs
dm0sCWV4aXQsIGFjdGlvbiB7Ci0JCQkJCQkJCQlpZiAocG0tPmdwdCB8fCBwbS0+aXNzcGVj
aWFsKSB7Ci0JCQkJCQkJCQkJcHJvY2Vzc19tZW51KE1FTlVfb2ssIF9fVU5DT05TVChNU0df
bm90c3VwcG9ydGVkKSk7Ci0JCQkJCQkJCQkJcmV0dXJuIC0xOwotCQkJCQkJCQkJfQotCQkJ
CQkJCQkJcG0tPnVuc2F2ZWQgPSAxOwotCQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAqKGlu
dCopYXJnLCAxKTsKLQkJCQkJCQkJCXBtX3NldGZzdHlwZShwbSwgKihpbnQqKWFyZywgRlNf
QlNERkZTKTsKLQkJCQkJCQkJICAgIHBtLT5ic2RsYWJlbFsqKGludCopYXJnXS5sdm1wdiA9
IDE7Ci0JCQkJCQkJCX07Ci0Jb3B0aW9uIE1TR19lbmNyeXB0LAkJZXhpdCwgYWN0aW9uIHsK
LQkJCQkJCQkJCWlmIChwbS0+Z3B0IHx8IHBtLT5pc3NwZWNpYWwpIHsKLQkJCQkJCQkJCQlw
cm9jZXNzX21lbnUoTUVOVV9vaywgX19VTkNPTlNUKE1TR19ub3RzdXBwb3J0ZWQpKTsKLQkJ
CQkJCQkJCQlyZXR1cm4gLTE7Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCQlwbS0+dW5zYXZlZCA9
IDE7Ci0JCQkJCQkJCQlwbV9wYXJ0dXNhZ2UocG0sICooaW50KilhcmcsIDEpOwotCQkJCQkJ
CQkJcG1fc2V0ZnN0eXBlKHBtLCAqKGludCopYXJnLCBGU19DR0QpOwotCQkJCQkJCQkJcG1f
Y2dkX2VkaXQoMCwKLQkJCQkJCQkJCQkmKHBhcnRfZW50cnlfdCl7LmRldl9wdHIgPSBwbSwK
LQkJCQkJCQkJCQkJCQkJLmRldl9udW0gPSAqKGludCopYXJnfSk7Ci0JCQkJCQkJCX07Ci0J
b3B0aW9uIE1TR19lcmFzZSwJCW5leHQgbWVudSBzaHJlZF9tb2RlczsKLQlvcHRpb24gTVNH
X2RvdW1vdW50LAlleGl0LCBhY3Rpb24geyBwbV91bW91bnQocG0sICooaW50KilhcmcpOyB9
OwotCW9wdGlvbiBNU0dfRGVsZXRlX3BhcnRpdGlvbiwJZXhpdCwgYWN0aW9uIHsKLQkJCQkJ
CQkJCXBtLT51bnNhdmVkID0gMTsKLQkJCQkJCQkJCXBtX3BhcnR1c2FnZShwbSwgKihpbnQq
KWFyZywgMSk7Ci0JCQkJCQkJCQlpZiAocG0tPmlzc3BlY2lhbCkKLQkJCQkJCQkJCQlwbV91
bmNvbmZpZ3VyZShwbSk7Ci0JCQkJCQkJCQllbHNlCi0JCQkJCQkJCQkJcG0tPmJzZGxhYmVs
WyooaW50KilhcmddLnBpX2ZzdHlwZSA9IEZTX1VOVVNFRDsKLQkJCQkJCQkJCX07Ci0KLW1l
bnUgcG1ncHRlbnRyeSwgeD01MCwgeT04LCBleGl0LCBkZWZhdWx0IGV4aXQ7Ci0Jb3B0aW9u
IE1TR19lZGl0YnNkcGFydCwgZXhpdCwgYWN0aW9uIHsgcG1fbWFrZV9ic2RfcGFydGl0aW9u
cyhwbSk7IH07Ci0Jb3B0aW9uIE1TR19zd2l0Y2htYnIsCWV4aXQsIGFjdGlvbiB7IGlmIChw
bV9ncHRfY29udmVydChwbSkgPT0gMCkKLQkJCQkJCQkJCQkJCXBtX3BhcnR1c2FnZShwbSwg
LTEsIDEpOyB9OwotCW9wdGlvbiBNU0dfc2V0Ym9vdGFibGUsCWV4aXQsIGFjdGlvbiB7IHBt
LT51bnNhdmVkID0gMTsKLQkJCQkJCQkJCQkJCXBtLT5ib290YWJsZSA9ICFwbS0+Ym9vdGFi
bGU7IH07Ci0Jb3B0aW9uIE1TR19lcmFzZSwJCW5leHQgbWVudSBzaHJlZF9tb2RlczsKLQlv
cHRpb24gTVNHX3VuZG8sCQlleGl0LCBhY3Rpb24geyBsYWJlbF9yZWFkKCk7IHBtLT51bnNh
dmVkID0gMDsKLQkJCQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAtMSwgMSk7IH07Ci0Jb3B0
aW9uIE1TR191bmNvbmZpZywJZXhpdCwgYWN0aW9uIHsgaWYgKHBtX3VuY29uZmlndXJlKHBt
KSA9PSAwKQotCQkJCQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAtMSwgMSk7IH07Ci0KLW1l
bnUgc2hyZWRfbW9kZXMsIHg9NTAsIHk9NSwgZXhpdCwgZGVmYXVsdCBleGl0OwotCW9wdGlv
biBNU0dfZmlsbHplcm9zLAlleGl0LAotCQkJCQkJCWFjdGlvbiB7IHBtX3NocmVkKHBtLCAq
KGludCopYXJnLCBTSFJFRF9aRVJPUyk7IH07Ci0Jb3B0aW9uIE1TR19maWxscmFuZG9tLAll
eGl0LAotCQkJCQkJCWFjdGlvbiB7IHBtX3NocmVkKHBtLCAqKGludCopYXJnLCBTSFJFRF9S
QU5ET00pOyB9OwotCW9wdGlvbiBNU0dfZmlsbGNyeXB0bywJZXhpdCwKLQkJCQkJCQlhY3Rp
b24geyBwbV9zaHJlZChwbSwgKihpbnQqKWFyZywgU0hSRURfQ1JZUFRPKTsgfTsKLQotbWVu
dSByYWlkbGV2ZWw7Ci0Jb3B0aW9uIE1TR19yYWlkMCwgZXhpdCwgYWN0aW9uIHsgKihpbnQg
KilhcmcgPSAwOyB9OwotCW9wdGlvbiBNU0dfcmFpZDEsIGV4aXQsIGFjdGlvbiB7ICooaW50
ICopYXJnID0gMTsgfTsKLQlvcHRpb24gTVNHX3JhaWQ0LCBleGl0LCBhY3Rpb24geyAqKGlu
dCAqKWFyZyA9IDQ7IH07Ci0Jb3B0aW9uIE1TR19yYWlkNSwgZXhpdCwgYWN0aW9uIHsgKihp
bnQgKilhcmcgPSA1OyB9OwotCi1tZW51IGNnZF9lbmN0eXBlOwotCW9wdGlvbiAiYWVzLXh0
cyIsCQkJZXhpdCwgYWN0aW9uIHsgKihjb25zdCBjaGFyKiopYXJnID0gImFlcy14dHMiOyB9
OwotCW9wdGlvbiAiYWVzLWNiYyIsCQkJZXhpdCwgYWN0aW9uIHsgKihjb25zdCBjaGFyKiop
YXJnID0gImFlcy1jYmMiOyB9OwotCW9wdGlvbiAiM2Rlcy1jYmMiLAkJCWV4aXQsIGFjdGlv
biB7ICooY29uc3QgY2hhcioqKWFyZyA9ICIzZGVzLWNiYyI7IH07Ci0Jb3B0aW9uICJibG93
ZmlzaC1jYmMiLAkJZXhpdCwgYWN0aW9uIHsgKihjb25zdCBjaGFyKiopYXJnID0gImJsb3dm
aXNoLWNiYyI7IH07Ci0KLW1lbnUgY2dkX2l2dHlwZTsKLQlvcHRpb24gImVuY2Jsa25vMSIs
CQkJZXhpdCwgYWN0aW9uIHsgKihjb25zdCBjaGFyKiopYXJnID0gImVuY2Jsa25vMSI7IH07
Ci0Jb3B0aW9uICJlbmNibGtubzgiLAkJCWV4aXQsIGFjdGlvbiB7ICooY29uc3QgY2hhcioq
KWFyZyA9ICJlbmNibGtubzgiOyB9OwotCi1tZW51IGNnZF9rZXlnZW50eXBlOwotCW9wdGlv
biAicGtjczVfcGJrZGYyL3NoYTEiLAlleGl0LCBhY3Rpb24geyAqKGNvbnN0IGNoYXIqKilh
cmcgPSAicGtjczVfcGJrZGYyL3NoYTEiOyB9OwotCW9wdGlvbiAicGtjczVfcGJrZGYyIiwJ
CWV4aXQsIGFjdGlvbiB7ICooY29uc3QgY2hhcioqKWFyZyA9ICJwa2NzNV9wYmtkZjIiOyB9
OwotCW9wdGlvbiAic3RvcmVka2V5IiwJCQlleGl0LCBhY3Rpb24geyAqKGNvbnN0IGNoYXIq
KilhcmcgPSAic3RvcmVka2V5IjsgfTsKLQlvcHRpb24gInJhbmRvbWtleSIsCQkJZXhpdCwg
YWN0aW9uIHsgKihjb25zdCBjaGFyKiopYXJnID0gInJhbmRvbWtleSI7IH07Ci0Jb3B0aW9u
ICJ1cmFuZG9ta2V5IiwJCWV4aXQsIGFjdGlvbiB7ICooY29uc3QgY2hhcioqKWFyZyA9ICJ1
cmFuZG9ta2V5IjsgfTsKLQlvcHRpb24gInNoZWxsX2NtZCIsCQkJZXhpdCwgYWN0aW9uIHsg
Kihjb25zdCBjaGFyKiopYXJnID0gInNoZWxsX2NtZCI7IH07Ci0KLW1lbnUgY2dkX3Zlcmlm
eXR5cGU7Ci0Jb3B0aW9uICJub25lIiwJCQkJZXhpdCwgYWN0aW9uIHsgKihjb25zdCBjaGFy
KiopYXJnID0gIm5vbmUiOyB9OwotCW9wdGlvbiAiZGlza2xhYmVsIiwJCQlleGl0LCBhY3Rp
b24geyAqKGNvbnN0IGNoYXIqKilhcmcgPSAiZGlza2xhYmVsIjsgfTsKLQlvcHRpb24gImZm
cyIsCQkJCWV4aXQsIGFjdGlvbiB7ICooY29uc3QgY2hhcioqKWFyZyA9ICJmZnMiOyB9Owot
CW9wdGlvbiAicmUtZW50ZXIiLAkJCWV4aXQsIGFjdGlvbiB7ICooY29uc3QgY2hhcioqKWFy
ZyA9ICJyZS1lbnRlciI7IH07CkluZGV4OiB1c3Iuc2Jpbi9zeXNpbnN0L21lbnVzLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IHVzci5zYmluL3N5c2luc3QvbWVudXMucG0KZGlmZiAt
TiB1c3Iuc2Jpbi9zeXNpbnN0L21lbnVzLnBtCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMAorKysgdXNyLnNiaW4vc3lzaW5zdC9tZW51cy5wbQkyMCBTZXAgMjAx
OCAwMTo0Njo1MyAtMDAwMApAQCAtMCwwICsxLDE2NyBAQAorLyoJJE5ldEJTRCQJKi8KKy8q
CU5ldEJTRDogbWVudXMubWksdiAxLjE0IDIwMTgvMDkvMTEgMDg6MDU6MTggbWFydGluIEV4
cCAJCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBOZXRCU0QgRm91bmRh
dGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUg
aXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91
bmRhdGlvbgorICogYnkgRGF2aWQgTGFpZ2h0LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5F
VEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8qIE1lbnUgc3lzdGVtIGRlZmluaXRpb25zIC0tIGV4dGVuZGVk
IHBhcnRpdGlvbmluZyAqLworCittZW51IHBtZGlza2VudHJ5LCB4PTUwLCB5PTUsIGV4aXQs
IGRlZmF1bHQgZXhpdDsKKwlvcHRpb24gTVNHX2VkaXRic2RwYXJ0LCBleGl0LCBhY3Rpb24g
eyBwbV9tYWtlX2JzZF9wYXJ0aXRpb25zKHBtKTsgfTsKKwlvcHRpb24gTVNHX2VkaXRtYnIs
CQlleGl0LCBhY3Rpb24geyBtZF9nZXRfaW5mbygpOworCQkJCQkJCQkJCQltZF9wcmVfZGlz
a2xhYmVsKCk7CisJCQkJCQkJCQkJCW1lbXNldCgmcG0tPmJzZGxhYmVsLCAwLCBzaXplb2Yg
cG0tPmJzZGxhYmVsKTt9OworCW9wdGlvbiBNU0dfc3dpdGNoZ3B0LAlleGl0LCBhY3Rpb24g
eyBpZiAocG1fZ3B0X2NvbnZlcnQocG0pID09IDApCisJCQkJCQkJCQkJCQlwbV9wYXJ0dXNh
Z2UocG0sIC0xLCAxKTsgfTsKKwlvcHRpb24gTVNHX3JlbmFtZWRpc2ssCWV4aXQsIGFjdGlv
biB7IHBtLT51bnNhdmVkID0gMTsgcG1fcmVuYW1lKHBtKTsgfTsKKwlvcHRpb24gTVNHX2Zt
dGFzcmFpZCwJZXhpdCwgYWN0aW9uIHsgcG0tPnVuc2F2ZWQgPSAxOworCQkJCQkJCQkJCQlw
bV9wYXJ0dXNhZ2UocG0sIC0xLCAxKTsKKwkJCQkJCQkJCQkJbGF5b3V0a2luZCA9IExZX05F
V1JBSUQ7CisJCQkJCQkJCQkJCW1kX21ha2VfYnNkX3BhcnRpdGlvbnMoKTt9OworCW9wdGlv
biBNU0dfZm10YXNsdm0sCWV4aXQsIGFjdGlvbiB7IHBtLT51bnNhdmVkID0gMTsKKwkJCQkJ
CQkJCQkJcG1fcGFydHVzYWdlKHBtLCAtMSwgMSk7CisJCQkJCQkJCQkJCWxheW91dGtpbmQg
PSBMWV9ORVdMVk07CisJCQkJCQkJCQkJCW1kX21ha2VfYnNkX3BhcnRpdGlvbnMoKTsgfTsK
KwlvcHRpb24gTVNHX2VuY3J5cHQsCQlleGl0LCBhY3Rpb24geyBwbS0+dW5zYXZlZCA9IDE7
CisJCQkJCQkJCQkJCXBtX3BhcnR1c2FnZShwbSwgLTEsIDEpOworCQkJCQkJCQkJCQlsYXlv
dXRraW5kID0gTFlfTkVXQ0dEOworCQkJCQkJCQkJCQltZF9tYWtlX2JzZF9wYXJ0aXRpb25z
KCk7CisJCQkJCQkJCQkJCXBtX2NnZF9lZGl0KDAsICYocGFydF9lbnRyeV90KQorCQkJCQkJ
CQkJCQkJey5kZXZfcHRyID0gcG0sIC5kZXZfbnVtID0gUEFSVF9FfQorCQkJCQkJCQkJCQkp
OyB9OworCW9wdGlvbiBNU0dfc2V0Ym9vdGFibGUsCWV4aXQsIGFjdGlvbiB7IHBtLT51bnNh
dmVkID0gMTsKKwkJCQkJCQkJCQkJcG0tPmJvb3RhYmxlID0gIXBtLT5ib290YWJsZTsgfTsK
KwlvcHRpb24gTVNHX2VyYXNlLAkJbmV4dCBtZW51IHNocmVkX21vZGVzOworCW9wdGlvbiBN
U0dfdW5kbywJCWV4aXQsIGFjdGlvbiB7IGxhYmVsX3JlYWQoKTsgcG0tPnVuc2F2ZWQgPSAw
OworCQkJCQkJCQkJCQlwbV9wYXJ0dXNhZ2UocG0sIC0xLCAxKTsgfTsKKwlvcHRpb24gTVNH
X3VuY29uZmlnLAlleGl0LCBhY3Rpb24geyBpZiAocG1fdW5jb25maWd1cmUocG0pID09IDAp
CisJCQkJCQkJCQkJCQlwbV9wYXJ0dXNhZ2UocG0sIC0xLCAxKTsgfTsKKworbWVudSBwbXBh
cnRlbnRyeSwgeD01MCwgeT01LCBleGl0LCBkZWZhdWx0IGV4aXQ7CisJb3B0aW9uIE1TR19l
ZGl0LAkJZXhpdCwgYWN0aW9uIHsgCisJCQkJCQkJCQlwbS0+dW5zYXZlZCA9IDE7CisJCQkJ
CQkJCQlpbnQgdHBmcyA9IHBtLT5ic2RsYWJlbFsqKGludCopYXJnXS5waV9mc3R5cGU7CisJ
CQkJCQkJCQlpbnQgdHBsdm0gPSBwbS0+YnNkbGFiZWxbKihpbnQqKWFyZ10ubHZtcHY7CisJ
CQkJCQkJCQlwbV9lZGl0cGFydCgqKGludCopYXJnKTsKKwkJCQkJCQkJCWlmICh0cGZzICE9
IHBtLT5ic2RsYWJlbFsqKGludCopYXJnXS5waV9mc3R5cGUgfHwKKwkJCQkJCQkJCQl0cGx2
bSAhPSBwbS0+YnNkbGFiZWxbKihpbnQqKWFyZ10ubHZtcHYpCisJCQkJCQkJCQkJLyogT29w
cywgcGFydGl0aW9uIHR5cGUgY2hhbmdlZCAqLworCQkJCQkJCQkJCXBtX3BhcnR1c2FnZShw
bSwgKihpbnQqKWFyZywgMSk7CisJCQkJCQkJCX07CisJb3B0aW9uIE1TR19mbXRhc3JhaWQs
CWV4aXQsIGFjdGlvbiB7CisJCQkJCQkJCQlpZiAocG0tPmdwdCB8fCBwbS0+aXNzcGVjaWFs
KSB7CisJCQkJCQkJCQkJcHJvY2Vzc19tZW51KE1FTlVfb2ssIF9fVU5DT05TVChNU0dfbm90
c3VwcG9ydGVkKSk7CisJCQkJCQkJCQkJcmV0dXJuIC0xOworCQkJCQkJCQkJfQorCQkJCQkJ
CQkJcG0tPnVuc2F2ZWQgPSAxOworCQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAqKGludCop
YXJnLCAxKTsKKwkJCQkJCQkJCXBtX3NldGZzdHlwZShwbSwgKihpbnQqKWFyZywgRlNfUkFJ
RCk7CisJCQkJCQkJCX07CisJb3B0aW9uIE1TR19mbXRhc2x2bSwJZXhpdCwgYWN0aW9uIHsK
KwkJCQkJCQkJCWlmIChwbS0+Z3B0IHx8IHBtLT5pc3NwZWNpYWwpIHsKKwkJCQkJCQkJCQlw
cm9jZXNzX21lbnUoTUVOVV9vaywgX19VTkNPTlNUKE1TR19ub3RzdXBwb3J0ZWQpKTsKKwkJ
CQkJCQkJCQlyZXR1cm4gLTE7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlwbS0+dW5zYXZlZCA9
IDE7CisJCQkJCQkJCQlwbV9wYXJ0dXNhZ2UocG0sICooaW50KilhcmcsIDEpOworCQkJCQkJ
CQkJcG1fc2V0ZnN0eXBlKHBtLCAqKGludCopYXJnLCBGU19CU0RGRlMpOworCQkJCQkJCQkg
ICAgcG0tPmJzZGxhYmVsWyooaW50KilhcmddLmx2bXB2ID0gMTsKKwkJCQkJCQkJfTsKKwlv
cHRpb24gTVNHX2VuY3J5cHQsCQlleGl0LCBhY3Rpb24geworCQkJCQkJCQkJaWYgKHBtLT5n
cHQgfHwgcG0tPmlzc3BlY2lhbCkgeworCQkJCQkJCQkJCXByb2Nlc3NfbWVudShNRU5VX29r
LCBfX1VOQ09OU1QoTVNHX25vdHN1cHBvcnRlZCkpOworCQkJCQkJCQkJCXJldHVybiAtMTsK
KwkJCQkJCQkJCX0KKwkJCQkJCQkJCXBtLT51bnNhdmVkID0gMTsKKwkJCQkJCQkJCXBtX3Bh
cnR1c2FnZShwbSwgKihpbnQqKWFyZywgMSk7CisJCQkJCQkJCQlwbV9zZXRmc3R5cGUocG0s
ICooaW50KilhcmcsIEZTX0NHRCk7CisJCQkJCQkJCQlwbV9jZ2RfZWRpdCgwLAorCQkJCQkJ
CQkJCSYocGFydF9lbnRyeV90KXsuZGV2X3B0ciA9IHBtLAorCQkJCQkJCQkJCQkJCQkuZGV2
X251bSA9ICooaW50Kilhcmd9KTsKKwkJCQkJCQkJfTsKKwlvcHRpb24gTVNHX2VyYXNlLAkJ
bmV4dCBtZW51IHNocmVkX21vZGVzOworCW9wdGlvbiBNU0dfZG91bW91bnQsCWV4aXQsIGFj
dGlvbiB7IHBtX3Vtb3VudChwbSwgKihpbnQqKWFyZyk7IH07CisJb3B0aW9uIE1TR19EZWxl
dGVfcGFydGl0aW9uLAlleGl0LCBhY3Rpb24geworCQkJCQkJCQkJcG0tPnVuc2F2ZWQgPSAx
OworCQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAqKGludCopYXJnLCAxKTsKKwkJCQkJCQkJ
CWlmIChwbS0+aXNzcGVjaWFsKQorCQkJCQkJCQkJCXBtX3VuY29uZmlndXJlKHBtKTsKKwkJ
CQkJCQkJCWVsc2UKKwkJCQkJCQkJCQlwbS0+YnNkbGFiZWxbKihpbnQqKWFyZ10ucGlfZnN0
eXBlID0gRlNfVU5VU0VEOworCQkJCQkJCQkJfTsKKworbWVudSBwbWdwdGVudHJ5LCB4PTUw
LCB5PTgsIGV4aXQsIGRlZmF1bHQgZXhpdDsKKwlvcHRpb24gTVNHX2VkaXRic2RwYXJ0LCBl
eGl0LCBhY3Rpb24geyBwbV9tYWtlX2JzZF9wYXJ0aXRpb25zKHBtKTsgfTsKKwlvcHRpb24g
TVNHX3N3aXRjaG1iciwJZXhpdCwgYWN0aW9uIHsgaWYgKHBtX2dwdF9jb252ZXJ0KHBtKSA9
PSAwKQorCQkJCQkJCQkJCQkJcG1fcGFydHVzYWdlKHBtLCAtMSwgMSk7IH07CisJb3B0aW9u
IE1TR19zZXRib290YWJsZSwJZXhpdCwgYWN0aW9uIHsgcG0tPnVuc2F2ZWQgPSAxOworCQkJ
CQkJCQkJCQkJcG0tPmJvb3RhYmxlID0gIXBtLT5ib290YWJsZTsgfTsKKwlvcHRpb24gTVNH
X2VyYXNlLAkJbmV4dCBtZW51IHNocmVkX21vZGVzOworCW9wdGlvbiBNU0dfdW5kbywJCWV4
aXQsIGFjdGlvbiB7IGxhYmVsX3JlYWQoKTsgcG0tPnVuc2F2ZWQgPSAwOworCQkJCQkJCQkJ
CQlwbV9wYXJ0dXNhZ2UocG0sIC0xLCAxKTsgfTsKKwlvcHRpb24gTVNHX3VuY29uZmlnLAll
eGl0LCBhY3Rpb24geyBpZiAocG1fdW5jb25maWd1cmUocG0pID09IDApCisJCQkJCQkJCQkJ
CQlwbV9wYXJ0dXNhZ2UocG0sIC0xLCAxKTsgfTsKKworbWVudSBzaHJlZF9tb2RlcywgeD01
MCwgeT01LCBleGl0LCBkZWZhdWx0IGV4aXQ7CisJb3B0aW9uIE1TR19maWxsemVyb3MsCWV4
aXQsCisJCQkJCQkJYWN0aW9uIHsgcG1fc2hyZWQocG0sICooaW50KilhcmcsIFNIUkVEX1pF
Uk9TKTsgfTsKKwlvcHRpb24gTVNHX2ZpbGxyYW5kb20sCWV4aXQsCisJCQkJCQkJYWN0aW9u
IHsgcG1fc2hyZWQocG0sICooaW50KilhcmcsIFNIUkVEX1JBTkRPTSk7IH07CisJb3B0aW9u
IE1TR19maWxsY3J5cHRvLAlleGl0LAorCQkJCQkJCWFjdGlvbiB7IHBtX3NocmVkKHBtLCAq
KGludCopYXJnLCBTSFJFRF9DUllQVE8pOyB9OworCittZW51IHJhaWRsZXZlbDsKKwlvcHRp
b24gTVNHX3JhaWQwLCBleGl0LCBhY3Rpb24geyAqKGludCAqKWFyZyA9IDA7IH07CisJb3B0
aW9uIE1TR19yYWlkMSwgZXhpdCwgYWN0aW9uIHsgKihpbnQgKilhcmcgPSAxOyB9OworCW9w
dGlvbiBNU0dfcmFpZDQsIGV4aXQsIGFjdGlvbiB7ICooaW50ICopYXJnID0gNDsgfTsKKwlv
cHRpb24gTVNHX3JhaWQ1LCBleGl0LCBhY3Rpb24geyAqKGludCAqKWFyZyA9IDU7IH07CisK
K21lbnUgY2dkX2VuY3R5cGU7CisJb3B0aW9uICJhZXMteHRzIiwJCQlleGl0LCBhY3Rpb24g
eyAqKGNvbnN0IGNoYXIqKilhcmcgPSAiYWVzLXh0cyI7IH07CisJb3B0aW9uICJhZXMtY2Jj
IiwJCQlleGl0LCBhY3Rpb24geyAqKGNvbnN0IGNoYXIqKilhcmcgPSAiYWVzLWNiYyI7IH07
CisJb3B0aW9uICIzZGVzLWNiYyIsCQkJZXhpdCwgYWN0aW9uIHsgKihjb25zdCBjaGFyKiop
YXJnID0gIjNkZXMtY2JjIjsgfTsKKwlvcHRpb24gImJsb3dmaXNoLWNiYyIsCQlleGl0LCBh
Y3Rpb24geyAqKGNvbnN0IGNoYXIqKilhcmcgPSAiYmxvd2Zpc2gtY2JjIjsgfTsKKworbWVu
dSBjZ2RfaXZ0eXBlOworCW9wdGlvbiAiZW5jYmxrbm8xIiwJCQlleGl0LCBhY3Rpb24geyAq
KGNvbnN0IGNoYXIqKilhcmcgPSAiZW5jYmxrbm8xIjsgfTsKKwlvcHRpb24gImVuY2Jsa25v
OCIsCQkJZXhpdCwgYWN0aW9uIHsgKihjb25zdCBjaGFyKiopYXJnID0gImVuY2Jsa25vOCI7
IH07CisKK21lbnUgY2dkX2tleWdlbnR5cGU7CisJb3B0aW9uICJwa2NzNV9wYmtkZjIvc2hh
MSIsCWV4aXQsIGFjdGlvbiB7ICooY29uc3QgY2hhcioqKWFyZyA9ICJwa2NzNV9wYmtkZjIv
c2hhMSI7IH07CisJb3B0aW9uICJwa2NzNV9wYmtkZjIiLAkJZXhpdCwgYWN0aW9uIHsgKihj
b25zdCBjaGFyKiopYXJnID0gInBrY3M1X3Bia2RmMiI7IH07CisJb3B0aW9uICJzdG9yZWRr
ZXkiLAkJCWV4aXQsIGFjdGlvbiB7ICooY29uc3QgY2hhcioqKWFyZyA9ICJzdG9yZWRrZXki
OyB9OworCW9wdGlvbiAicmFuZG9ta2V5IiwJCQlleGl0LCBhY3Rpb24geyAqKGNvbnN0IGNo
YXIqKilhcmcgPSAicmFuZG9ta2V5IjsgfTsKKwlvcHRpb24gInVyYW5kb21rZXkiLAkJZXhp
dCwgYWN0aW9uIHsgKihjb25zdCBjaGFyKiopYXJnID0gInVyYW5kb21rZXkiOyB9OworCW9w
dGlvbiAic2hlbGxfY21kIiwJCQlleGl0LCBhY3Rpb24geyAqKGNvbnN0IGNoYXIqKilhcmcg
PSAic2hlbGxfY21kIjsgfTsKKworbWVudSBjZ2RfdmVyaWZ5dHlwZTsKKwlvcHRpb24gIm5v
bmUiLAkJCQlleGl0LCBhY3Rpb24geyAqKGNvbnN0IGNoYXIqKilhcmcgPSAibm9uZSI7IH07
CisJb3B0aW9uICJkaXNrbGFiZWwiLAkJCWV4aXQsIGFjdGlvbiB7ICooY29uc3QgY2hhcioq
KWFyZyA9ICJkaXNrbGFiZWwiOyB9OworCW9wdGlvbiAiZmZzIiwJCQkJZXhpdCwgYWN0aW9u
IHsgKihjb25zdCBjaGFyKiopYXJnID0gImZmcyI7IH07CisJb3B0aW9uICJyZS1lbnRlciIs
CQkJZXhpdCwgYWN0aW9uIHsgKihjb25zdCBjaGFyKiopYXJnID0gInJlLWVudGVyIjsgfTsK
SW5kZXg6IHVzci5zYmluL3N5c2luc3QvYXJjaC9hdGFyaS9NYWtlZmlsZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvaG9tZS9uZXRic2Qvc3JjL3Vzci5zYmluL3N5c2luc3QvYXJjaC9h
dGFyaS9NYWtlZmlsZSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXAgLXUgLXIx
LjIgTWFrZWZpbGUKLS0tIHVzci5zYmluL3N5c2luc3QvYXJjaC9hdGFyaS9NYWtlZmlsZQkx
MiBBdWcgMjAxNSAxODoyMDowMiAtMDAwMAkxLjIKKysrIHVzci5zYmluL3N5c2luc3QvYXJj
aC9hdGFyaS9NYWtlZmlsZQkyMCBTZXAgMjAxOCAwMToxNTozNyAtMDAwMApAQCAtOCw0ICs4
LDggQEAgTEFOR1VBR0VTPQllbiBkZQogCiBDUFBGTEFHUys9CS1EU1VQUE9SVF84XzNfU09V
UkNFX0ZJTEVTWVNURU0KIAorLmlmZGVmIFNNQUxMUFJPRworTk9QQVJUTUFOPQl5ZXMKKy5l
bmRpZgorCiAuaW5jbHVkZSAiLi4vLi4vTWFrZWZpbGUuaW5jIgo=
--------------39720A19D060170BB18E2AF7--