[7790] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

SCSI patches against 2.3.35.

daemon@ATHENA.MIT.EDU (Eric Youngdale)
Mon Jan 3 00:34:16 2000

Date:   Mon, 3 Jan 2000 00:27:30 -0500 (EST)
From: Eric Youngdale <eric@andante.org>
To: linux-scsi@vger.rutgers.edu
Message-ID: <Pine.LNX.4.10.10001012209360.20014-200000@gwyn.tux.org>
MIME-Version: 1.0
Content-Type: MULTIPART/MIXED; BOUNDARY="1624180858-891426471-946783114=:20014"
Content-ID: <Pine.LNX.4.10.10001022353390.20014@gwyn.tux.org>

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

--1624180858-891426471-946783114=:20014
Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
Content-ID: <Pine.LNX.4.10.10001022353391.20014@gwyn.tux.org>


	I am enclosing patches against linux-2.3.35 - these should
correct a couple of issues that people have reported.

	1) I *think* I have finally fixed the DMA exhaustion warning
message problem.  The cause is that scsi_malloc can only return bounce
buffer segments of <= PAGE_SIZE, and I had forgotten this little detail. I
am toying with the idea of scaling this pool down to a small emergency
allocation and relying upon kmalloc(size, GFP_DMA) for the bulk of the
work, but now is not the time to try anything like that. The fix was to
scsi_merge.c, and was a little ugly. People with hosts that do ISA DMA
would see a little more overhead in doing the extra computations, but
ultimately it needs to be done right and if people want high performance
they shouldn't be using ISA bus host adapters.  The thing that scares me
about these changes is that they worked the first time :-).  I will be
testing them a bit more myself.

	2) I have corrected an issue where the ppa driver would hang up if
you inserted the module without media in the drive and then later inserted
media.

	3) I fixed the bug I mentioned in the earlier message, where a
single SCpnt was getting queued to the low-level driver in some instances
when there are bad sectors.

	4) I fixed a secondary bug that comes up when a device is taken
offline where the scatter-gather table and bounce buffers were not being
deallocated, and the DMA pool is exhausted.

	5) I have cleaned out a bit more dead code that I have identified,
and updated some stale comments here and there.

	There is something else I am still looking at - a remnant of the
bugs I discovered when looking at error handling.  It seems that in some
cases when you get MEDIUM_ERROR it launches into the error handler thread,
and ultimately takes the thing offline.  Not the correct behavior - it
should just report the thing up to the higher levels.

	Taking devices offline still isn't optimal.  It breaks the cycle
of infinite attempts to remedy the error (which is good), but the device
is unusable, unmountable, etc, etc).  I think I need to play with
scsi_debug and fix it to allow just enough access so that you can unmount
the sucker.

-Eric

"The world was a library, and its books were the stones, leaves,
 brooks, grass, and the birds of the earth.   We learned to do what only
 a student of nature ever learns, and that was to feel beauty."
			Chief Luther Standing Bear - Teton Sioux

--1624180858-891426471-946783114=:20014
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=linux35a
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.10.10001030027300.20014@gwyn.tux.org>
Content-Description: Patches against 2.3.35
Content-Disposition: attachment; filename=linux35a

LS0tIGxpbnV4L0NSRURJVFMufjF+CVN1biBEZWMgMjYgMjI6MzQ6MDQgMTk5
OQ0KKysrIGxpbnV4L0NSRURJVFMJU2F0IEphbiAgMSAyMTo0Mjo1MCAyMDAw
DQpAQCAtMjM5OCw3ICsyMzk4LDcgQEANCiBTOiBVU0ENCiANCiBOOiBFcmlj
IFlvdW5nZGFsZQ0KLUU6IGVyaWNAYWliLmNvbQ0KK0U6IGVyaWNAYW5kYW50
ZS5vcmcNCiBEOiBHZW5lcmFsIGtlcm5lbCBoYWNrZXINCiBEOiBTQ1NJIGlz
bzk2NjAgYW5kIEVMRg0KIFM6IDE3IENhbnRlcmJ1cnkgU3F1YXJlICMxMDEN
CkluZGV4OiBsaW51eC9kcml2ZXJzL3Njc2kvc2NzaS5jDQpkaWZmIC1jIGxp
bnV4L2RyaXZlcnMvc2NzaS9zY3NpLmM6MS4xLjEuNSBsaW51eC9kcml2ZXJz
L3Njc2kvc2NzaS5jOjEuNw0KKioqIGxpbnV4L2RyaXZlcnMvc2NzaS9zY3Np
LmM6MS4xLjEuNQlUaHUgRGVjIDMwIDAwOjEzOjU5IDE5OTkNCi0tLSBsaW51
eC9kcml2ZXJzL3Njc2kvc2NzaS5jCVN1biBKYW4gIDIgMjM6NDU6MDUgMjAw
MA0KKioqKioqKioqKioqKioqDQoqKiogMSw2ICoqKioNCiAgLyoNCiAgICog
IHNjc2kuYyBDb3B5cmlnaHQgKEMpIDE5OTIgRHJldyBFY2toYXJkdA0KISAg
KiAgICAgICAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSBFcmlj
IFlvdW5nZGFsZQ0KICAgKg0KICAgKiAgZ2VuZXJpYyBtaWQtbGV2ZWwgU0NT
SSBkcml2ZXINCiAgICogICAgICBJbml0aWFsIHZlcnNpb25zOiBEcmV3IEVj
a2hhcmR0DQotLS0gMSw2IC0tLS0NCiAgLyoNCiAgICogIHNjc2kuYyBDb3B5
cmlnaHQgKEMpIDE5OTIgRHJldyBFY2toYXJkdA0KISAgKiAgICAgICAgIENv
cHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5OSBFcmljIFlvdW5n
ZGFsZQ0KICAgKg0KICAgKiAgZ2VuZXJpYyBtaWQtbGV2ZWwgU0NTSSBkcml2
ZXINCiAgICogICAgICBJbml0aWFsIHZlcnNpb25zOiBEcmV3IEVja2hhcmR0
DQoqKioqKioqKioqKioqKioNCioqKiAxMywxOSAqKioqDQogICAqICAgICAg
VG9tbXkgVGhvcm4gPHR0aG9ybj4NCiAgICogICAgICBUaG9tYXMgV3VlbnNj
aGUgPHR3QGZnYjEuZmdiLm13LnR1LW11ZW5jaGVuLmRlPg0KICAgKg0KISAg
KiAgTW9kaWZpZWQgYnkgRXJpYyBZb3VuZ2RhbGUgZXJpY0BhbmRhbnRlLmpp
Yy5jb20gb3IgZXJpY3lAZ251LmFpLm1pdC5lZHUgdG8NCiAgICogIGFkZCBz
Y2F0dGVyLWdhdGhlciwgbXVsdGlwbGUgb3V0c3RhbmRpbmcgcmVxdWVzdCwg
YW5kIG90aGVyDQogICAqICBlbmhhbmNlbWVudHMuDQogICAqDQotLS0gMTMs
MTkgLS0tLQ0KICAgKiAgICAgIFRvbW15IFRob3JuIDx0dGhvcm4+DQogICAq
ICAgICAgVGhvbWFzIFd1ZW5zY2hlIDx0d0BmZ2IxLmZnYi5tdy50dS1tdWVu
Y2hlbi5kZT4NCiAgICoNCiEgICogIE1vZGlmaWVkIGJ5IEVyaWMgWW91bmdk
YWxlIGVyaWNAYW5kYW50ZS5vcmcgb3IgZXJpY3lAZ251LmFpLm1pdC5lZHUg
dG8NCiAgICogIGFkZCBzY2F0dGVyLWdhdGhlciwgbXVsdGlwbGUgb3V0c3Rh
bmRpbmcgcmVxdWVzdCwgYW5kIG90aGVyDQogICAqICBlbmhhbmNlbWVudHMu
DQogICAqDQoqKioqKioqKioqKioqKioNCioqKiAxNTMsMTYxICoqKioNCiAg
ICovDQogIHVuc2lnbmVkIGludCBzY3NpX2xvZ2dpbmdfbGV2ZWwgPSAwOw0K
ICANCi0gdm9sYXRpbGUgc3RydWN0IFNjc2lfSG9zdCAqaG9zdF9hY3RpdmUg
PSBOVUxMOw0KLSANCi0gDQogIGNvbnN0IGNoYXIgKmNvbnN0IHNjc2lfZGV2
aWNlX3R5cGVzW01BWF9TQ1NJX0RFVklDRV9DT0RFXSA9DQogIHsNCiAgCSJE
aXJlY3QtQWNjZXNzICAgICIsDQotLS0gMTUzLDE1OCAtLS0tDQoqKioqKioq
KioqKioqKioNCioqKiAxOTMsMjA2ICoqKioNCiAgZXh0ZXJuIHZvaWQgc2Nz
aV9vbGRfZG9uZShTY3NpX0NtbmQgKiBTQ3BudCk7DQogIGV4dGVybiB2b2lk
IHNjc2lfb2xkX3RpbWVzX291dChTY3NpX0NtbmQgKiBTQ3BudCk7DQogIA0K
LSAjZGVmaW5lIFNDU0lfQkxPQ0soREVWSUNFLCBIT1NUKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAJICAgICAgICAo
KEhPU1QtPmJsb2NrICYmIGhvc3RfYWN0aXZlICYmIEhPU1QgIT0gaG9zdF9h
Y3RpdmUpICAgICAgICAgIFwNCi0gICAJCXx8ICgoSE9TVCktPmNhbl9xdWV1
ZSAmJiBIT1NULT5ob3N0X2J1c3kgPj0gSE9TVC0+Y2FuX3F1ZXVlKSAgXA0K
LSAJICAgICAgICB8fCAoKEhPU1QpLT5ob3N0X2Jsb2NrZWQpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gCSAgICAgICAgfHwg
KChERVZJQ0UpICE9IE5VTEwgJiYgKERFVklDRSktPmRldmljZV9ibG9ja2Vk
KSApDQotIA0KLSANCi0gDQogIHN0cnVjdCBkZXZfaW5mbyB7DQogIAljb25z
dCBjaGFyICp2ZW5kb3I7DQogIAljb25zdCBjaGFyICptb2RlbDsNCi0tLSAx
OTAsMTk1IC0tLS0NCioqKioqKioqKioqKioqKg0KKioqIDQ5Niw1MDEgKioq
Kg0KLS0tIDQ4NSw0OTEgLS0tLQ0KICAJICogdGhpbmdzIGFyZSBxdWlldC4N
CiAgCSAqLw0KICAJYXRvbWljX2luYygmc2hwbnQtPmhvc3RfYWN0aXZlKTsN
CisgCWF0b21pY19pbmMoJlNEcG50LT5kZXZpY2VfYWN0aXZlKTsNCiAgDQog
IAlpZiAoaGFyZGNvZGVkID09IDEpIHsNCiAgCQlTY3NpX0RldmljZSAqb2xk
U0RwbnQgPSBTRHBudDsNCioqKioqKioqKioqKioqKg0KKioqIDU3Nyw1ODIg
KioqKg0KLS0tIDU2Nyw1NzMgLS0tLQ0KICAJICogc28gd2Uga25vdyB3aGVu
IGV2ZXJ5dGhpbmcgaXMgcXVpZXQuDQogIAkgKi8NCiAgCWF0b21pY19kZWMo
JnNocG50LT5ob3N0X2FjdGl2ZSk7DQorIAlhdG9taWNfZGVjKCZTRHBudC0+
ZGV2aWNlX2FjdGl2ZSk7DQogIA0KICAgICAgICBsZWF2ZToNCiAgDQoqKioq
KioqKioqKioqKioNCioqKiAxMDc3LDEwOTMgKioqKg0KICAJCQkJCSAgICB8
fCBTRHBudC0+aWQgIT0gZGV2aWNlLT5pZA0KICAJCQkJCSAgICB8fCBTRHBu
dCA9PSBkZXZpY2UpIHsNCiAgIAkJCQkJCWNvbnRpbnVlOw0KLSAJCQkJCX0N
Ci0gCQkJCQlmb3IgKFNDcG50ID0gU0RwbnQtPmRldmljZV9xdWV1ZTsNCi0g
CQkJCQkgICAgIFNDcG50Ow0KLSAJCQkJCSAgICAgU0NwbnQgPSBTQ3BudC0+
bmV4dCkgew0KLSAJCQkJCQlpZiAoU0NwbnQtPnJlcXVlc3QucnFfc3RhdHVz
ICE9IFJRX0lOQUNUSVZFKSB7DQotIAkJCQkJCQlicmVhazsNCi0gCQkJCQkJ
fQ0KLSAJCQkJCX0NCi0gCQkJCQlpZiAoU0NwbnQpIHsNCi0gCQkJCQkJYnJl
YWs7DQogIAkJCQkJfQ0KICAJCQkJfQ0KICAJCQkJaWYgKFNEcG50KSB7DQog
IAkJCQkJLyoNCi0tLSAxMDY4LDEwNzggLS0tLQ0KICAJCQkJCSAgICB8fCBT
RHBudC0+aWQgIT0gZGV2aWNlLT5pZA0KICAJCQkJCSAgICB8fCBTRHBudCA9
PSBkZXZpY2UpIHsNCiAgIAkJCQkJCWNvbnRpbnVlOw0KICAJCQkJCX0NCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBh
dG9taWNfcmVhZCgmU0RwbnQtPmRldmljZV9hY3RpdmUpICE9IDApDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQ0KICAJCQkJfQ0KICAJCQkJaWYgKFNEcG50KSB7DQogIAkJCQkJ
LyoNCioqKioqKioqKioqKioqKg0KKioqIDExNzMsMTE3OCAqKioqDQotLS0g
MTE1OCwxMTY0IC0tLS0NCiAgCVNDcG50LT5yZXF1ZXN0LnNlbSA9IE5VTEw7
CS8qIEFuZCBubyBvbmUgaXMgd2FpdGluZyBmb3IgdGhpcw0KICAJCQkJCSAq
IHRvIGNvbXBsZXRlICovDQogIAlhdG9taWNfaW5jKCZTQ3BudC0+aG9zdC0+
aG9zdF9hY3RpdmUpOw0KKyAJYXRvbWljX2luYygmU0NwbnQtPmRldmljZS0+
ZGV2aWNlX2FjdGl2ZSk7DQogIA0KICAJU0NwbnQtPmJ1ZmZlciAgPSBOVUxM
Ow0KICAJU0NwbnQtPmJ1ZmZsZW4gPSAwOw0KKioqKioqKioqKioqKioqDQoq
KiogMTE4NCwxMTg5ICoqKioNCi0tLSAxMTcwLDExNzYgLS0tLQ0KICAJU0Nw
bnQtPnRyYW5zZmVyc2l6ZSA9IDA7CS8qIE5vIGRlZmF1bHQgdHJhbnNmZXIg
c2l6ZSAqLw0KICAJU0NwbnQtPmNtZF9sZW4gPSAwOw0KICANCisgICAgICAg
ICBTQ3BudC0+cmVzdWx0ID0gMDsNCiAgCVNDcG50LT51bmRlcmZsb3cgPSAw
OwkvKiBEbyBub3QgZmxhZyB1bmRlcmZsb3cgY29uZGl0aW9ucyAqLw0KICAJ
U0NwbnQtPnJlc2lkID0gMDsNCiAgCVNDcG50LT5zdGF0ZSA9IFNDU0lfU1RB
VEVfSU5JVElBTElaSU5HOw0KKioqKioqKioqKioqKioqDQoqKiogMTIyNSwx
MjM0ICoqKioNCi0tLSAxMjEyLDEyMjQgLS0tLQ0KICANCiAgCXNwaW5fbG9j
a19pcnFzYXZlKCZkZXZpY2VfcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogIA0K
KyAgICAgICAgIFNEcG50ID0gU0NwbnQtPmRldmljZTsNCisgDQogIAlTQ3Bu
dC0+cmVxdWVzdC5ycV9zdGF0dXMgPSBSUV9JTkFDVElWRTsNCiAgCVNDcG50
LT5zdGF0ZSA9IFNDU0lfU1RBVEVfVU5VU0VEOw0KICAJU0NwbnQtPm93bmVy
ID0gU0NTSV9PV05FUl9OT0JPRFk7DQogIAlhdG9taWNfZGVjKCZTQ3BudC0+
aG9zdC0+aG9zdF9hY3RpdmUpOw0KKyAJYXRvbWljX2RlYygmU0RwbnQtPmRl
dmljZV9hY3RpdmUpOw0KICANCiAgCVNDU0lfTE9HX01MUVVFVUUoNSwgcHJp
bnRrKCJEZWFjdGl2YXRpbmcgY29tbWFuZCBmb3IgZGV2aWNlICVkIChhY3Rp
dmU9JWQsIGZhaWxlZD0lZClcbiIsDQogIAkJCQkgICBTQ3BudC0+dGFyZ2V0
LA0KKioqKioqKioqKioqKioqDQoqKiogMTI1MSwxMjU4ICoqKioNCiAgCQl1
cChTQ3BudC0+aG9zdC0+ZWhfd2FpdCk7DQogIAl9DQogIA0KLSAgICAgICAg
IFNEcG50ID0gU0NwbnQtPmRldmljZTsNCi0gDQogIAlzcGluX3VubG9ja19p
cnFyZXN0b3JlKCZkZXZpY2VfcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogIA0K
ICAgICAgICAgIC8qDQotLS0gMTI0MSwxMjQ2IC0tLS0NCioqKioqKioqKioq
KioqKg0KKioqIDEzNjcsMTM3MiAqKioqDQotLS0gMTM1NSwxMzYxIC0tLS0N
CiAgCQkJaWYgKHJ0biAhPSAwKSB7DQogIAkJCQlzY3NpX2RlbGV0ZV90aW1l
cihTQ3BudCk7DQogIAkJCQlzY3NpX21scXVldWVfaW5zZXJ0KFNDcG50LCBT
Q1NJX01MUVVFVUVfSE9TVF9CVVNZKTsNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1NJX0xPR19NTFFVRVVFKDMsIHByaW50aygicXVl
dWVjb21tYW5kIDogcmVxdWVzdCByZWplY3RlZFxuIikpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgDQogIAkJCX0NCiAgCQl9IGVsc2Ugew0K
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgm
aW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQoqKioqKioqKioqKioqKioNCioq
KiAxNDM4LDE0NDQgKioqKg0KICAJCSBpbnQgdGltZW91dCwgaW50IHJldHJp
ZXMpDQogIHsNCiAgCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBTQ3BudC0+
aG9zdDsNCi0gCVNjc2lfRGV2aWNlICpkZXZpY2UgPSBTQ3BudC0+ZGV2aWNl
Ow0KICANCiAgCUFTU0VSVF9MT0NLKCZpb19yZXF1ZXN0X2xvY2ssIDApOw0K
ICANCi0tLSAxNDI3LDE0MzIgLS0tLQ0KKioqKioqKioqKioqKioqDQoqKiog
MTY5MywxNjk4ICoqKioNCi0tLSAxNjgxLDE2ODggLS0tLQ0KICAJCQkJICog
ZnJvbSBiZWluZyBzZW50IHRvIHRoZSBkZXZpY2UsIHNvIHdlIHNob3VsZG4n
dCBlbmQgdXANCiAgCQkJCSAqIHdpdGggdG9ucyBvZiB0aGluZ3MgYmVpbmcg
c2VudCBkb3duIHRoYXQgc2hvdWxkbid0IGJlLg0KICAJCQkJICovDQorIAkJ
CQlTQ1NJX0xPR19NTENPTVBMRVRFKDMsIHByaW50aygiQ29tbWFuZCByZWpl
Y3RlZCBhcyBkZXZpY2UgcXVldWUgZnVsbCwgcHV0IG9uIG1sIHF1ZXVlICVw
XG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDcG50KSk7DQogIAkJCQlzY3Np
X21scXVldWVfaW5zZXJ0KFNDcG50LCBTQ1NJX01MUVVFVUVfREVWSUNFX0JV
U1kpOw0KICAJCQkJYnJlYWs7DQogIAkJCWRlZmF1bHQ6DQpJbmRleDogbGlu
dXgvZHJpdmVycy9zY3NpL3Njc2kuaA0KZGlmZiAtYyBsaW51eC9kcml2ZXJz
L3Njc2kvc2NzaS5oOjEuMS4xLjQgbGludXgvZHJpdmVycy9zY3NpL3Njc2ku
aDoxLjQNCioqKiBsaW51eC9kcml2ZXJzL3Njc2kvc2NzaS5oOjEuMS4xLjQJ
V2VkIERlYyAyMiAxMDoyODo0NCAxOTk5DQotLS0gbGludXgvZHJpdmVycy9z
Y3NpL3Njc2kuaAlTdW4gSmFuICAyIDIzOjQ1OjA1IDIwMDANCioqKioqKioq
KioqKioqKg0KKioqIDQzMCw0MzcgKioqKg0KICANCiAgZXh0ZXJuIFNjc2lf
Q21uZCAqc2NzaV9hbGxvY2F0ZV9kZXZpY2UoU2NzaV9EZXZpY2UgKiwgaW50
LCBpbnQpOw0KICANCi0gZXh0ZXJuIFNjc2lfQ21uZCAqc2NzaV9yZXF1ZXN0
X3F1ZXVlYWJsZShzdHJ1Y3QgcmVxdWVzdCAqLCBTY3NpX0RldmljZSAqKTsN
Ci0gDQogIGV4dGVybiB2b2lkIHNjc2lfcmVsZWFzZV9jb21tYW5kKFNjc2lf
Q21uZCAqKTsNCiAgDQogIGV4dGVybiBpbnQgbWF4X3Njc2lfaG9zdHM7DQot
LS0gNDMwLDQzNSAtLS0tDQoqKioqKioqKioqKioqKioNCioqKiA0NjEsNDY2
ICoqKioNCi0tLSA0NTksNDY1IC0tLS0NCiAgCQkJCQkgICBkZXZpY2UgaXMg
YnVzeSAqLw0KICAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsNCiAgCXJlcXVl
c3RfcXVldWVfdCByZXF1ZXN0X3F1ZXVlOw0KKyAgICAgICAgIGF0b21pY190
ICAgICAgICAgICAgICAgIGRldmljZV9hY3RpdmU7IC8qIGNvbW1hbmRzIGNo
ZWNrZWQgb3V0IGZvciBkZXZpY2UgKi8NCiAgCXZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0IGRldmljZV9idXN5OwkvKiBjb21tYW5kcyBhY3R1YWxseSBhY3Rp
dmUgb24gbG93LWxldmVsICovDQogIAlpbnQgKCpzY3NpX2luaXRfaW9fZm4p
IChTY3NpX0NtbmQgKik7CS8qIFVzZWQgdG8gaW5pdGlhbGl6ZQ0KICAJCQkJ
CQkgICBuZXcgcmVxdWVzdCAqLw0KKioqKioqKioqKioqKioqDQoqKiogNjg3
LDY5MiAqKioqDQotLS0gNjg2LDY5MiAtLS0tDQogIGV4dGVybiB2b2lkIHNj
c2lfaW9fY29tcGxldGlvbihTY3NpX0NtbmQgKiBTQ3BudCwgaW50IGdvb2Rf
c2VjdG9ycywNCiAgCQkJICAgICAgIGludCBibG9ja19zZWN0b3JzKTsNCiAg
DQorIGV4dGVybiBzdHJ1Y3QgU2NzaV9EZXZpY2VfVGVtcGxhdGUgKnNjc2lf
Z2V0X3JlcXVlc3RfZGV2KHN0cnVjdCByZXF1ZXN0ICopOw0KICANCiAgI2lm
IGRlZmluZWQoTUFKT1JfTlIpICYmIChNQUpPUl9OUiAhPSBTQ1NJX1RBUEVf
TUFKT1IpDQogICNpbmNsdWRlICJob3N0cy5oIg0KSW5kZXg6IGxpbnV4L2Ry
aXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMNCmRpZmYgLWMgbGludXgvZHJpdmVy
cy9zY3NpL3Njc2lfZXJyb3IuYzoxLjEuMS41IGxpbnV4L2RyaXZlcnMvc2Nz
aS9zY3NpX2Vycm9yLmM6MS41DQoqKiogbGludXgvZHJpdmVycy9zY3NpL3Nj
c2lfZXJyb3IuYzoxLjEuMS41CVRodSBEZWMgMzAgMDA6MTQ6MDAgMTk5OQ0K
LS0tIGxpbnV4L2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMJU3VuIEphbiAg
MiAyMzo0NTowNSAyMDAwDQoqKioqKioqKioqKioqKioNCioqKiAxNTAsMTU2
ICoqKioNCiAgDQogIAlydG4gPSBkZWxfdGltZXIoJlNDc2V0LT5laF90aW1l
b3V0KTsNCiAgDQohIAlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSg1LCBwcmlu
dGsoIkNsZWFyaW5nIHRpbWVyIGZvciBjb21tYW5kICVwXG4iLCBTQ3NldCkp
Ow0KICANCiAgCVNDc2V0LT5laF90aW1lb3V0LmRhdGEgPSAodW5zaWduZWQg
bG9uZykgTlVMTDsNCiAgCVNDc2V0LT5laF90aW1lb3V0LmZ1bmN0aW9uID0g
TlVMTDsNCi0tLSAxNTAsMTU2IC0tLS0NCiAgDQogIAlydG4gPSBkZWxfdGlt
ZXIoJlNDc2V0LT5laF90aW1lb3V0KTsNCiAgDQohIAlTQ1NJX0xPR19FUlJP
Ul9SRUNPVkVSWSg1LCBwcmludGsoIkNsZWFyaW5nIHRpbWVyIGZvciBjb21t
YW5kICVwICVkXG4iLCBTQ3NldCwgcnRuKSk7DQogIA0KICAJU0NzZXQtPmVo
X3RpbWVvdXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBOVUxMOw0KICAJU0Nz
ZXQtPmVoX3RpbWVvdXQuZnVuY3Rpb24gPSBOVUxMOw0KSW5kZXg6IGxpbnV4
L2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMNCmRpZmYgLWMgbGludXgvZHJp
dmVycy9zY3NpL3Njc2lfaW9jdGwuYzoxLjEuMS4zIGxpbnV4L2RyaXZlcnMv
c2NzaS9zY3NpX2lvY3RsLmM6MS4zDQoqKiogbGludXgvZHJpdmVycy9zY3Np
L3Njc2lfaW9jdGwuYzoxLjEuMS4zCVdlZCBEZWMgMjIgMTA6Mjg6NDQgMTk5
OQ0KLS0tIGxpbnV4L2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMJU2F0IEph
biAgMSAyMTozOToyMyAyMDAwDQoqKioqKioqKioqKioqKioNCioqKiAxMTcs
MTI5ICoqKioNCiAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVFI7DQog
ICAgICAgICAgfQ0KICANCiEgCXsNCiEgCQlERUNMQVJFX01VVEVYX0xPQ0tF
RChzZW0pOw0KISAJCVNDcG50LT5yZXF1ZXN0LnNlbSA9ICZzZW07DQohIAkJ
c2NzaV9kb19jbWQoU0NwbnQsIGNtZCwgTlVMTCwgMCwgc2NzaV9pb2N0bF9k
b25lLCB0aW1lb3V0LCByZXRyaWVzKTsNCiEgCQlkb3duKCZzZW0pOw0KISAJ
CVNDcG50LT5yZXF1ZXN0LnNlbSA9IE5VTEw7DQohIAl9DQogIA0KICAJU0NT
SV9MT0dfSU9DVEwoMiwgcHJpbnRrKCJJb2N0bCByZXR1cm5lZCAgMHgleFxu
IiwgU0NwbnQtPnJlc3VsdCkpOw0KICANCi0tLSAxMTcsMTIzIC0tLS0NCiAg
ICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVFI7DQogICAgICAgICAgfQ0K
ICANCiEgICAgICAgICBzY3NpX3dhaXRfY21kKFNDcG50LCBjbWQsIE5VTEws
IDAsIHNjc2lfaW9jdGxfZG9uZSwgdGltZW91dCwgcmV0cmllcyk7DQogIA0K
ICAJU0NTSV9MT0dfSU9DVEwoMiwgcHJpbnRrKCJJb2N0bCByZXR1cm5lZCAg
MHgleFxuIiwgU0NwbnQtPnJlc3VsdCkpOw0KICANCioqKioqKioqKioqKioq
Kg0KKioqIDMwNiwzMTkgKioqKg0KICAgICAgICAgICAgICAgICAgcmV0dXJu
IC1FSU5UUjsNCiAgICAgICAgICB9DQogIA0KISAJew0KISAJCURFQ0xBUkVf
TVVURVhfTE9DS0VEKHNlbSk7DQohIAkJU0NwbnQtPnJlcXVlc3Quc2VtID0g
JnNlbTsNCiEgCQlzY3NpX2RvX2NtZChTQ3BudCwgY21kLCBidWYsIG5lZWRl
ZCwgc2NzaV9pb2N0bF9kb25lLA0KISAJCQkgICAgdGltZW91dCwgcmV0cmll
cyk7DQohIAkJZG93bigmc2VtKTsNCiEgCQlTQ3BudC0+cmVxdWVzdC5zZW0g
PSBOVUxMOw0KISAJfQ0KICANCiAgCS8qIA0KICAJICogSWYgdGhlcmUgd2Fz
IGFuIGVycm9yIGNvbmRpdGlvbiwgcGFzcyB0aGUgaW5mbyBiYWNrIHRvIHRo
ZSB1c2VyLiANCi0tLSAzMDAsMzA3IC0tLS0NCiAgICAgICAgICAgICAgICAg
IHJldHVybiAtRUlOVFI7DQogICAgICAgICAgfQ0KICANCiEgICAgICAgICBz
Y3NpX3dhaXRfY21kKFNDcG50LCBjbWQsIGJ1ZiwgbmVlZGVkLCBzY3NpX2lv
Y3RsX2RvbmUsDQohICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LCBy
ZXRyaWVzKTsNCiAgDQogIAkvKiANCiAgCSAqIElmIHRoZXJlIHdhcyBhbiBl
cnJvciBjb25kaXRpb24sIHBhc3MgdGhlIGluZm8gYmFjayB0byB0aGUgdXNl
ci4gDQpJbmRleDogbGludXgvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMNCmRp
ZmYgLWMgbGludXgvZHJpdmVycy9zY3NpL3Njc2lfbGliLmM6MS4xLjEuNCBs
aW51eC9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxLjYNCioqKiBsaW51eC9k
cml2ZXJzL3Njc2kvc2NzaV9saWIuYzoxLjEuMS40CVRodSBEZWMgMzAgMDA6
MTQ6MDEgMTk5OQ0KLS0tIGxpbnV4L2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5j
CVN1biBKYW4gIDIgMjM6NDU6MDUgMjAwMA0KKioqKioqKioqKioqKioqDQoq
KiogMjk0LDMwNCAqKioqDQogICAqIEZ1bmN0aW9uOiAgICBzY3NpX2VuZF9y
ZXF1ZXN0KCkNCiAgICoNCiAgICogUHVycG9zZTogICAgIFBvc3QtcHJvY2Vz
c2luZyBvZiBjb21wbGV0ZWQgY29tbWFuZHMgY2FsbGVkIGZyb20gaW50ZXJy
dXB0DQohICAqICAgICAgICAgICAgICBoYW5kbGVyLg0KICAgKg0KICAgKiBB
cmd1bWVudHM6ICAgU0NwbnQgICAgLSBjb21tYW5kIHRoYXQgaXMgY29tcGxl
dGUuDQogICAqICAgICAgICAgICAgICB1cHRvZGF0ZSAtIDEgaWYgSS9PIGlu
ZGljYXRlcyBzdWNjZXNzLCAwIGZvciBJL08gZXJyb3IuDQogICAqICAgICAg
ICAgICAgICBzZWN0b3JzICAtIG51bWJlciBvZiBzZWN0b3JzIHdlIHdhbnQg
dG8gbWFyay4NCiAgICoNCiAgICogTG9jayBzdGF0dXM6IEFzc3VtZWQgdGhh
dCBsb2NrIGlzIG5vdCBoZWxkIHVwb24gZW50cnkuDQogICAqDQotLS0gMjk0
LDMwNSAtLS0tDQogICAqIEZ1bmN0aW9uOiAgICBzY3NpX2VuZF9yZXF1ZXN0
KCkNCiAgICoNCiAgICogUHVycG9zZTogICAgIFBvc3QtcHJvY2Vzc2luZyBv
ZiBjb21wbGV0ZWQgY29tbWFuZHMgY2FsbGVkIGZyb20gaW50ZXJydXB0DQoh
ICAqICAgICAgICAgICAgICBoYW5kbGVyIG9yIGEgYm90dG9tLWhhbGYgaGFu
ZGxlci4NCiAgICoNCiAgICogQXJndW1lbnRzOiAgIFNDcG50ICAgIC0gY29t
bWFuZCB0aGF0IGlzIGNvbXBsZXRlLg0KICAgKiAgICAgICAgICAgICAgdXB0
b2RhdGUgLSAxIGlmIEkvTyBpbmRpY2F0ZXMgc3VjY2VzcywgMCBmb3IgSS9P
IGVycm9yLg0KICAgKiAgICAgICAgICAgICAgc2VjdG9ycyAgLSBudW1iZXIg
b2Ygc2VjdG9ycyB3ZSB3YW50IHRvIG1hcmsuDQorICAqCQlyZXF1ZXVlICAt
IGluZGljYXRlcyB3aGV0aGVyIHdlIHNob3VsZCByZXF1ZXVlIGxlZnRvdmVy
cy4NCiAgICoNCiAgICogTG9jayBzdGF0dXM6IEFzc3VtZWQgdGhhdCBsb2Nr
IGlzIG5vdCBoZWxkIHVwb24gZW50cnkuDQogICAqDQoqKioqKioqKioqKioq
KioNCioqKiAzMTAsMzE2ICoqKioNCiAgICoJCVdlIGFyZSBndWFyYW50ZWVp
bmcgdGhhdCB0aGUgcmVxdWVzdCBxdWV1ZSB3aWxsIGJlIGdvb3NlZA0KICAg
KgkJYXQgc29tZSBwb2ludCBkdXJpbmcgdGhpcyBjYWxsLg0KICAgKi8NCiEg
U2NzaV9DbW5kICpzY3NpX2VuZF9yZXF1ZXN0KFNjc2lfQ21uZCAqIFNDcG50
LCBpbnQgdXB0b2RhdGUsIGludCBzZWN0b3JzKQ0KICB7DQogIAlzdHJ1Y3Qg
cmVxdWVzdCAqcmVxOw0KICAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsNCi0t
LSAzMTEsMzIwIC0tLS0NCiAgICoJCVdlIGFyZSBndWFyYW50ZWVpbmcgdGhh
dCB0aGUgcmVxdWVzdCBxdWV1ZSB3aWxsIGJlIGdvb3NlZA0KICAgKgkJYXQg
c29tZSBwb2ludCBkdXJpbmcgdGhpcyBjYWxsLg0KICAgKi8NCiEgc3RhdGlj
IFNjc2lfQ21uZCAqX19zY3NpX2VuZF9yZXF1ZXN0KFNjc2lfQ21uZCAqIFND
cG50LCANCiEgCQkJCSAgICAgaW50IHVwdG9kYXRlLCANCiEgCQkJCSAgICAg
aW50IHNlY3RvcnMsDQohIAkJCQkgICAgIGludCByZXF1ZXVlKQ0KICB7DQog
IAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOw0KICAJc3RydWN0IGJ1ZmZlcl9oZWFk
ICpiaDsNCioqKioqKioqKioqKioqKg0KKioqIDM0OCwzNTMgKioqKg0KLS0t
IDM1MiwzNjIgLS0tLQ0KICAJaWYgKHJlcS0+YmgpIHsNCiAgICAgICAgICAg
ICAgICAgIHJlcXVlc3RfcXVldWVfdCAqcTsNCiAgDQorIAkJaWYoICFyZXF1
ZXVlICkNCisgCQl7DQorIAkJCXJldHVybiBTQ3BudDsNCisgCQl9DQorIA0K
ICAgICAgICAgICAgICAgICAgcSA9ICZTQ3BudC0+ZGV2aWNlLT5yZXF1ZXN0
X3F1ZXVlOw0KICANCiAgCQlyZXEtPmJ1ZmZlciA9IGJoLT5iX2RhdGE7DQoq
KioqKioqKioqKioqKioNCioqKiAzNzcsMzgyICoqKioNCi0tLSAzODYsNDcw
IC0tLS0NCiAgfQ0KICANCiAgLyoNCisgICogRnVuY3Rpb246ICAgIHNjc2lf
ZW5kX3JlcXVlc3QoKQ0KKyAgKg0KKyAgKiBQdXJwb3NlOiAgICAgUG9zdC1w
cm9jZXNzaW5nIG9mIGNvbXBsZXRlZCBjb21tYW5kcyBjYWxsZWQgZnJvbSBp
bnRlcnJ1cHQNCisgICogICAgICAgICAgICAgIGhhbmRsZXIgb3IgYSBib3R0
b20taGFsZiBoYW5kbGVyLg0KKyAgKg0KKyAgKiBBcmd1bWVudHM6ICAgU0Nw
bnQgICAgLSBjb21tYW5kIHRoYXQgaXMgY29tcGxldGUuDQorICAqICAgICAg
ICAgICAgICB1cHRvZGF0ZSAtIDEgaWYgSS9PIGluZGljYXRlcyBzdWNjZXNz
LCAwIGZvciBJL08gZXJyb3IuDQorICAqICAgICAgICAgICAgICBzZWN0b3Jz
ICAtIG51bWJlciBvZiBzZWN0b3JzIHdlIHdhbnQgdG8gbWFyay4NCisgICoN
CisgICogTG9jayBzdGF0dXM6IEFzc3VtZWQgdGhhdCBsb2NrIGlzIG5vdCBo
ZWxkIHVwb24gZW50cnkuDQorICAqDQorICAqIFJldHVybnM6ICAgICBOb3Ro
aW5nDQorICAqDQorICAqIE5vdGVzOiAgICAgICBUaGlzIGlzIGNhbGxlZCBm
b3IgYmxvY2sgZGV2aWNlIHJlcXVlc3RzIGluIG9yZGVyIHRvDQorICAqICAg
ICAgICAgICAgICBtYXJrIHNvbWUgbnVtYmVyIG9mIHNlY3RvcnMgYXMgY29t
cGxldGUuDQorICAqIA0KKyAgKgkJV2UgYXJlIGd1YXJhbnRlZWluZyB0aGF0
IHRoZSByZXF1ZXN0IHF1ZXVlIHdpbGwgYmUgZ29vc2VkDQorICAqCQlhdCBz
b21lIHBvaW50IGR1cmluZyB0aGlzIGNhbGwuDQorICAqLw0KKyBTY3NpX0Nt
bmQgKnNjc2lfZW5kX3JlcXVlc3QoU2NzaV9DbW5kICogU0NwbnQsIGludCB1
cHRvZGF0ZSwgaW50IHNlY3RvcnMpDQorIHsNCisgCXJldHVybiBfX3Njc2lf
ZW5kX3JlcXVlc3QoU0NwbnQsIHVwdG9kYXRlLCBzZWN0b3JzLCAxKTsNCisg
fQ0KKyANCisgLyoNCisgICogRnVuY3Rpb246ICAgIHNjc2lfcmVsZWFzZV9i
dWZmZXJzKCkNCisgICoNCisgICogUHVycG9zZTogICAgIENvbXBsZXRpb24g
cHJvY2Vzc2luZyBmb3IgYmxvY2sgZGV2aWNlIEkvTyByZXF1ZXN0cy4NCisg
ICoNCisgICogQXJndW1lbnRzOiAgIFNDcG50ICAgLSBjb21tYW5kIHRoYXQg
d2UgYXJlIGJhaWxpbmcuDQorICAqDQorICAqIExvY2sgc3RhdHVzOiBBc3N1
bWVkIHRoYXQgbm8gbG9jayBpcyBoZWxkIHVwb24gZW50cnkuDQorICAqDQor
ICAqIFJldHVybnM6ICAgICBOb3RoaW5nDQorICAqDQorICAqIE5vdGVzOiAg
ICAgICBJbiB0aGUgZXZlbnQgdGhhdCBhbiB1cHBlciBsZXZlbCBkcml2ZXIg
cmVqZWN0cyBhDQorICAqCQljb21tYW5kLCB3ZSBtdXN0IHJlbGVhc2UgcmVz
b3VyY2VzIGFsbG9jYXRlZCBkdXJpbmcNCisgICoJCXRoZSBfX2luaXRfaW8o
KSBmdW5jdGlvbi4gIFByaW1hcmlseSB0aGlzIHdvdWxkIGludm9sdmUNCisg
ICoJCXRoZSBzY2F0dGVyLWdhdGhlciB0YWJsZSwgYW5kIHBvdGVudGlhbGx5
IGFueSBib3VuY2UNCisgICoJCWJ1ZmZlcnMuDQorICAqLw0KKyBzdGF0aWMg
dm9pZCBzY3NpX3JlbGVhc2VfYnVmZmVycyhTY3NpX0NtbmQgKiBTQ3BudCkN
Cisgew0KKyAJQVNTRVJUX0xPQ0soJmlvX3JlcXVlc3RfbG9jaywgMCk7DQor
IA0KKyAJLyoNCisgCSAqIEZyZWUgdXAgYW55IGluZGlyZWN0aW9uIGJ1ZmZl
cnMgd2UgYWxsb2NhdGVkIGZvciBETUEgcHVycG9zZXMuIA0KKyAJICogRm9y
IHRoZSBjYXNlIG9mIGEgUkVBRCwgd2UgbmVlZCB0byBjb3B5IHRoZSBkYXRh
IG91dCBvZiB0aGUNCisgCSAqIGJvdW5jZSBidWZmZXIgYW5kIGludG8gdGhl
IHJlYWwgYnVmZmVyLg0KKyAJICovDQorIAlpZiAoU0NwbnQtPnVzZV9zZykg
ew0KKyAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dwbnQ7DQorIAkJaW50IGk7
DQorIA0KKyAJCXNncG50ID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKSBTQ3Bu
dC0+cmVxdWVzdF9idWZmZXI7DQorIA0KKyAJCWZvciAoaSA9IDA7IGkgPCBT
Q3BudC0+dXNlX3NnOyBpKyspIHsNCisgCQkJaWYgKHNncG50W2ldLmFsdF9h
ZGRyZXNzKSB7DQorIAkJCQlzY3NpX2ZyZWUoc2dwbnRbaV0uYWRkcmVzcywg
c2dwbnRbaV0ubGVuZ3RoKTsNCisgCQkJfQ0KKyAJCX0NCisgCQlzY3NpX2Zy
ZWUoU0NwbnQtPnJlcXVlc3RfYnVmZmVyLCBTQ3BudC0+c2dsaXN0X2xlbik7
DQorIAl9IGVsc2Ugew0KKyAJCWlmIChTQ3BudC0+cmVxdWVzdF9idWZmZXIg
IT0gU0NwbnQtPnJlcXVlc3QuYnVmZmVyKSB7DQorIAkJCXNjc2lfZnJlZShT
Q3BudC0+cmVxdWVzdF9idWZmZXIsIFNDcG50LT5yZXF1ZXN0X2J1ZmZsZW4p
Ow0KKyAJCX0NCisgCX0NCisgDQorIAkvKg0KKyAJICogWmVybyB0aGVzZSBv
dXQuICBUaGV5IG5vdyBwb2ludCB0byBmcmVlZCBtZW1vcnksIGFuZCBpdCBp
cw0KKyAJICogZGFuZ2Vyb3VzIHRvIGhhbmcgb250byB0aGUgcG9pbnRlcnMu
DQorIAkgKi8NCisgCVNDcG50LT5idWZmZXIgID0gTlVMTDsNCisgCVNDcG50
LT5idWZmbGVuID0gMDsNCisgCVNDcG50LT5yZXF1ZXN0X2J1ZmZlciA9IE5V
TEw7DQorIAlTQ3BudC0+cmVxdWVzdF9idWZmbGVuID0gMDsNCisgfQ0KKyAN
CisgLyoNCiAgICogRnVuY3Rpb246ICAgIHNjc2lfaW9fY29tcGxldGlvbigp
DQogICAqDQogICAqIFB1cnBvc2U6ICAgICBDb21wbGV0aW9uIHByb2Nlc3Np
bmcgZm9yIGJsb2NrIGRldmljZSBJL08gcmVxdWVzdHMuDQoqKioqKioqKioq
KioqKioNCioqKiA0NzEsNDg0ICoqKioNCiAgCQkgKiBJZiBtdWx0aXBsZSBz
ZWN0b3JzIGFyZSByZXF1ZXN0ZWQgaW4gb25lIGJ1ZmZlciwgdGhlbg0KICAJ
CSAqIHRoZXkgd2lsbCBoYXZlIGJlZW4gZmluaXNoZWQgb2ZmIGJ5IHRoZSBm
aXJzdCBjb21tYW5kLg0KICAJCSAqIElmIG5vdCwgdGhlbiB3ZSBoYXZlIGEg
bXVsdGktYnVmZmVyIGNvbW1hbmQuDQohIAkJICovDQohIAkJU0NwbnQgPSBz
Y3NpX2VuZF9yZXF1ZXN0KFNDcG50LCAxLCBnb29kX3NlY3RvcnMpOw0KICAN
CiAgCQkvKg0KICAJCSAqIElmIHRoZSBjb21tYW5kIGNvbXBsZXRlZCB3aXRo
b3V0IGVycm9yLCB0aGVuIGVpdGhlciBmaW5pc2ggb2ZmIHRoZQ0KICAJCSAq
IHJlc3Qgb2YgdGhlIGNvbW1hbmQsIG9yIHN0YXJ0IGEgbmV3IG9uZS4NCiAg
CQkgKi8NCiEgCQlpZiAocmVzdWx0ID09IDApIHsNCiAgCQkJcmV0dXJuOw0K
ICAJCX0NCiAgCX0NCi0tLSA1NTksNTgxIC0tLS0NCiAgCQkgKiBJZiBtdWx0
aXBsZSBzZWN0b3JzIGFyZSByZXF1ZXN0ZWQgaW4gb25lIGJ1ZmZlciwgdGhl
bg0KICAJCSAqIHRoZXkgd2lsbCBoYXZlIGJlZW4gZmluaXNoZWQgb2ZmIGJ5
IHRoZSBmaXJzdCBjb21tYW5kLg0KICAJCSAqIElmIG5vdCwgdGhlbiB3ZSBo
YXZlIGEgbXVsdGktYnVmZmVyIGNvbW1hbmQuDQohIAkJICoNCiEgCQkgKiBJ
ZiBibG9ja19zZWN0b3JzICE9IDAsIGl0IG1lYW5zIHdlIGhhZCBhIG1lZGl1
bSBlcnJvcg0KISAJCSAqIG9mIHNvbWUgc29ydCwgYW5kIHRoYXQgd2Ugd2Fu
dCB0byBtYXJrIHNvbWUgbnVtYmVyIG9mDQohIAkJICogc2VjdG9ycyBhcyBu
b3QgdXB0b2RhdGUuICBUaHVzIHdlIHdhbnQgdG8gaW5oaWJpdA0KISAJCSAq
IHJlcXVldWVpbmcgcmlnaHQgaGVyZSAtIHdlIHdpbGwgcmVxdWV1ZSBkb3du
IGJlbG93DQohIAkJICogd2hlbiB3ZSBoYW5kbGUgdGhlIGJhZCBzZWN0b3Jz
Lg0KISAJCSAqLw0KISAJCVNDcG50ID0gX19zY3NpX2VuZF9yZXF1ZXN0KFND
cG50LCANCiEgCQkJCQkgICAxLCANCiEgCQkJCQkgICBnb29kX3NlY3RvcnMs
DQohIAkJCQkJICAgcmVzdWx0ID09IDApOw0KICANCiAgCQkvKg0KICAJCSAq
IElmIHRoZSBjb21tYW5kIGNvbXBsZXRlZCB3aXRob3V0IGVycm9yLCB0aGVu
IGVpdGhlciBmaW5pc2ggb2ZmIHRoZQ0KICAJCSAqIHJlc3Qgb2YgdGhlIGNv
bW1hbmQsIG9yIHN0YXJ0IGEgbmV3IG9uZS4NCiAgCQkgKi8NCiEgCQlpZiAo
cmVzdWx0ID09IDAgfHwgU0NwbnQgPT0gTlVMTCApIHsNCiAgCQkJcmV0dXJu
Ow0KICAJCX0NCiAgCX0NCioqKioqKioqKioqKioqKg0KKioqIDU2MSw1Njcg
KioqKg0KICAJCX0NCiAgCX0JCQkvKiBkcml2ZXIgYnl0ZSAhPSAwICovDQog
IAlpZiAocmVzdWx0KSB7DQohIAkJcHJpbnRrKCJTQ1NJIGRpc2sgZXJyb3Ig
OiBob3N0ICVkIGNoYW5uZWwgJWQgaWQgJWQgbHVuICVkIHJldHVybiBjb2Rl
ID0gJXhcbiIsDQogIAkJICAgICAgIFNDcG50LT5kZXZpY2UtPmhvc3QtPmhv
c3Rfbm8sDQogIAkJICAgICAgIFNDcG50LT5kZXZpY2UtPmNoYW5uZWwsDQog
IAkJICAgICAgIFNDcG50LT5kZXZpY2UtPmlkLA0KLS0tIDY1OCw2NjggLS0t
LQ0KICAJCX0NCiAgCX0JCQkvKiBkcml2ZXIgYnl0ZSAhPSAwICovDQogIAlp
ZiAocmVzdWx0KSB7DQohIAkJc3RydWN0IFNjc2lfRGV2aWNlX1RlbXBsYXRl
ICpTVHBudDsNCiEgDQohIAkJU1RwbnQgPSBzY3NpX2dldF9yZXF1ZXN0X2Rl
digmU0NwbnQtPnJlcXVlc3QpOw0KISAJCXByaW50aygiU0NTSSAlcyBlcnJv
ciA6IGhvc3QgJWQgY2hhbm5lbCAlZCBpZCAlZCBsdW4gJWQgcmV0dXJuIGNv
ZGUgPSAleFxuIiwNCiEgCQkgICAgICAgKFNUcG50ID8gU1RwbnQtPm5hbWUg
OiAiZGV2aWNlIiksDQogIAkJICAgICAgIFNDcG50LT5kZXZpY2UtPmhvc3Qt
Pmhvc3Rfbm8sDQogIAkJICAgICAgIFNDcG50LT5kZXZpY2UtPmNoYW5uZWws
DQogIAkJICAgICAgIFNDcG50LT5kZXZpY2UtPmlkLA0KKioqKioqKioqKioq
KioqDQoqKiogNTY5LDU3NCAqKioqDQotLS0gNjcwLDY4MCAtLS0tDQogIA0K
ICAJCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKQ0K
ICAJCQlwcmludF9zZW5zZSgic2QiLCBTQ3BudCk7DQorIAkJLyoNCisgCQkg
KiBNYXJrIGEgc2luZ2xlIGJ1ZmZlciBhcyBub3QgdXB0b2RhdGUuICBRdWV1
ZSB0aGUgcmVtYWluZGVyLg0KKyAJCSAqIFdlIHNvbWV0aW1lcyBnZXQgdGhp
cyBjcnVmdCBpbiB0aGUgZXZlbnQgdGhhdCBhIG1lZGl1bSBlcnJvcg0KKyAJ
CSAqIGlzbid0IHByb3Blcmx5IHJlcG9ydGVkLg0KKyAJCSAqLw0KICAJCVND
cG50ID0gc2NzaV9lbmRfcmVxdWVzdChTQ3BudCwgMCwgU0NwbnQtPnJlcXVl
c3QuY3VycmVudF9ucl9zZWN0b3JzKTsNCiAgCQlyZXR1cm47DQogIAl9DQoq
KioqKioqKioqKioqKioNCioqKiA3MDIsNzA3ICoqKioNCi0tLSA4MDgsODM4
IC0tLS0NCiAgCQl9IGVsc2Ugew0KICAJCQlTRHBudC0+c3RhcnZlZCA9IDA7
DQogIAkJfQ0KKyANCisgIAkJLyoNCisgCQkgKiBGSVhNRShlcmljKQ0KKyAJ
CSAqIEkgYW0gbm90IHN1cmUgd2hlcmUgdGhlIGJlc3QgcGxhY2UgdG8gZG8g
dGhpcyBpcy4gIFdlIG5lZWQNCisgCQkgKiB0byBob29rIGluIGEgcGxhY2Ug
d2hlcmUgd2UgYXJlIGxpa2VseSB0byBjb21lIGlmIGluIHVzZXINCisgCQkg
KiBzcGFjZS4gICBUZWNobmljYWxseSB0aGUgZXJyb3IgaGFuZGxpbmcgdGhy
ZWFkIHNob3VsZCBiZQ0KKyAJCSAqIGRvaW5nIHRoaXMgY3JhcCwgYnV0IHRo
ZSBlcnJvciBoYW5kbGVyIGlzbid0IHVzZWQgYnkNCisgCQkgKiBtb3N0IGhv
c3RzLg0KKyAJCSAqLw0KKyAJCWlmIChTRHBudC0+d2FzX3Jlc2V0KSB7DQor
IAkJCS8qDQorIAkJCSAqIFdlIG5lZWQgdG8gcmVsb2NrIHRoZSBkb29yLCBi
dXQgd2UgbWlnaHQNCisgCQkJICogYmUgaW4gYW4gaW50ZXJydXB0IGhhbmRs
ZXIuICBPbmx5IGRvIHRoaXMNCisgCQkJICogZnJvbSB1c2VyIHNwYWNlLCBz
aW5jZSB3ZSBkbyBub3Qgd2FudCB0bw0KKyAJCQkgKiBzbGVlcCBmcm9tIGFu
IGludGVycnVwdC4NCisgCQkJICovDQorIAkJCVNEcG50LT53YXNfcmVzZXQg
PSAwOw0KKyAJCQlpZiAoU0RwbnQtPnJlbW92YWJsZSAmJiAhaW5faW50ZXJy
dXB0KCkpIHsNCisgCQkJCXNwaW5fdW5sb2NrX2lycSgmaW9fcmVxdWVzdF9s
b2NrKTsNCisgCQkJCXNjc2lfaW9jdGwoU0RwbnQsIFNDU0lfSU9DVExfRE9P
UkxPQ0ssIDApOw0KKyAJCQkJc3Bpbl9sb2NrX2lycSgmaW9fcmVxdWVzdF9s
b2NrKTsNCisgCQkJCWNvbnRpbnVlOw0KKyAJCQl9DQorIAkJfQ0KKyANCiAg
CQkvKg0KICAJCSAqIExvb3AgdGhyb3VnaCBhbGwgb2YgdGhlIHJlcXVlc3Rz
IGluIHRoaXMgcXVldWUsIGFuZCBmaW5kDQogIAkJICogb25lIHRoYXQgaXMg
cXVldWVhYmxlLg0KKioqKioqKioqKioqKioqDQoqKiogNzY4LDc5NyAqKioq
DQogIAkJU0RwbnQtPmRldmljZV9idXN5Kys7DQogIA0KICAJCS8qDQotIAkJ
ICogRklYTUUoZXJpYykNCi0gCQkgKiBJIGFtIG5vdCBzdXJlIHdoZXJlIHRo
ZSBiZXN0IHBsYWNlIHRvIGRvIHRoaXMgaXMuICBXZSBuZWVkDQotIAkJICog
dG8gaG9vayBpbiBhIHBsYWNlIHdoZXJlIHdlIGFyZSBsaWtlbHkgdG8gY29t
ZSBpZiBpbiB1c2VyDQotIAkJICogc3BhY2UuICAgVGVjaG5pY2FsbHkgdGhl
IGVycm9yIGhhbmRsaW5nIHRocmVhZCBzaG91bGQgYmUNCi0gCQkgKiBkb2lu
ZyB0aGlzIGNyYXAsIGJ1dCB0aGUgZXJyb3IgaGFuZGxlciBpc24ndCB1c2Vk
IGJ5DQotIAkJICogbW9zdCBob3N0cy4NCi0gCQkgKi8NCi0gCQlpZiAoU0Rw
bnQtPndhc19yZXNldCkgew0KLSAJCQkvKg0KLSAJCQkgKiBXZSBuZWVkIHRv
IHJlbG9jayB0aGUgZG9vciwgYnV0IHdlIG1pZ2h0DQotIAkJCSAqIGJlIGlu
IGFuIGludGVycnVwdCBoYW5kbGVyLiAgT25seSBkbyB0aGlzDQotIAkJCSAq
IGZyb20gdXNlciBzcGFjZSwgc2luY2Ugd2UgZG8gbm90IHdhbnQgdG8NCi0g
CQkJICogc2xlZXAgZnJvbSBhbiBpbnRlcnJ1cHQuDQotIAkJCSAqLw0KLSAJ
CQlpZiAoU0RwbnQtPnJlbW92YWJsZSAmJiAhaW5faW50ZXJydXB0KCkpIHsN
Ci0gCQkJCXNwaW5fdW5sb2NrX2lycSgmaW9fcmVxdWVzdF9sb2NrKTsNCi0g
CQkJCXNjc2lfaW9jdGwoU0RwbnQsIFNDU0lfSU9DVExfRE9PUkxPQ0ssIDAp
Ow0KLSAJCQkJU0RwbnQtPndhc19yZXNldCA9IDA7DQotIAkJCQlzcGluX2xv
Y2tfaXJxKCZpb19yZXF1ZXN0X2xvY2spOw0KLSAJCQkJY29udGludWU7DQot
IAkJCX0NCi0gCQkJU0RwbnQtPndhc19yZXNldCA9IDA7DQotIAkJfQ0KLSAJ
CS8qDQogIAkJICogRmluYWxseSwgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGxv
Y2ssIHdlIGNvcHkgdGhlDQogIAkJICogcmVxdWVzdCB0byB0aGUgY29tbWFu
ZCBibG9jaywgYW5kIHJlbW92ZSB0aGUNCiAgCQkgKiByZXF1ZXN0IGZyb20g
dGhlIHJlcXVlc3QgbGlzdC4gICBOb3RlIHRoYXQgd2UgYWx3YXlzDQotLS0g
ODk5LDkwNCAtLS0tDQoqKioqKioqKioqKioqKioNCioqKiA4NDIsODQ3ICoq
KioNCi0tLSA5NDksOTU4IC0tLS0NCiAgCQkJICogZ2V0IHRob3NlIGFsbG9j
YXRlZCBoZXJlLiAgDQogIAkJCSAqLw0KICAJCQlpZiAoIVNEcG50LT5zY3Np
X2luaXRfaW9fZm4oU0NwbnQpKSB7DQorIAkJCQlTSHBudC0+aG9zdF9idXN5
LS07DQorIAkJCQlTRHBudC0+ZGV2aWNlX2J1c3ktLTsNCisgCQkJCXNjc2lf
ZW5kX3JlcXVlc3QoU0NwbnQsIDAsIA0KKyAJCQkJCQkgU0NwbnQtPnJlcXVl
c3QubnJfc2VjdG9ycyk7DQogIAkJCQlzcGluX2xvY2tfaXJxKCZpb19yZXF1
ZXN0X2xvY2spOw0KICAJCQkJY29udGludWU7DQogIAkJCX0NCioqKioqKioq
KioqKioqKg0KKioqIDg0OSw4NTQgKioqKg0KLS0tIDk2MCw5NzAgLS0tLQ0K
ICAJCQkgKiBJbml0aWFsaXplIHRoZSBhY3R1YWwgU0NTSSBjb21tYW5kIGZv
ciB0aGlzIHJlcXVlc3QuDQogIAkJCSAqLw0KICAJCQlpZiAoIVNUcG50LT5p
bml0X2NvbW1hbmQoU0NwbnQpKSB7DQorIAkJCQlTSHBudC0+aG9zdF9idXN5
LS07DQorIAkJCQlTRHBudC0+ZGV2aWNlX2J1c3ktLTsNCisgCQkJCXNjc2lf
cmVsZWFzZV9idWZmZXJzKFNDcG50KTsNCisgCQkJCXNjc2lfZW5kX3JlcXVl
c3QoU0NwbnQsIDAsIA0KKyAJCQkJCQkgU0NwbnQtPnJlcXVlc3QubnJfc2Vj
dG9ycyk7DQogIAkJCQlzcGluX2xvY2tfaXJxKCZpb19yZXF1ZXN0X2xvY2sp
Ow0KICAJCQkJY29udGludWU7DQogIAkJCX0NCkluZGV4OiBsaW51eC9kcml2
ZXJzL3Njc2kvc2NzaV9tZXJnZS5jDQpkaWZmIC1jIGxpbnV4L2RyaXZlcnMv
c2NzaS9zY3NpX21lcmdlLmM6MS4xLjEuNCBsaW51eC9kcml2ZXJzL3Njc2kv
c2NzaV9tZXJnZS5jOjEuNA0KKioqIGxpbnV4L2RyaXZlcnMvc2NzaS9zY3Np
X21lcmdlLmM6MS4xLjEuNAlUaHUgRGVjIDMwIDAwOjE0OjAxIDE5OTkNCi0t
LSBsaW51eC9kcml2ZXJzL3Njc2kvc2NzaV9tZXJnZS5jCVdlZCBEZWMgMjkg
MjM6MjU6NTggMTk5OQ0KKioqKioqKioqKioqKioqDQoqKiogNjEsNjYgKioq
Kg0KLS0tIDYxLDc0IC0tLS0NCiAgI2luY2x1ZGUgImNvbnN0YW50cy5oIg0K
ICAjaW5jbHVkZSA8c2NzaS9zY3NpX2lvY3RsLmg+DQogIA0KKyAvKg0KKyAg
KiBUaGlzIG1lYW5zIHRoYXQgYm91bmNlIGJ1ZmZlcnMgY2Fubm90IGJlIGFs
bG9jYXRlZCBpbiBjaHVua3MgPiBQQUdFX1NJWkUuDQorICAqIFVsdGltYXRl
bHkgd2Ugc2hvdWxkIGdldCBhd2F5IGZyb20gdXNpbmcgYSBkZWRpY2F0ZWQg
RE1BIGJvdW5jZSBidWZmZXINCisgICogcG9vbCwgYW5kIHdlIHNob3VsZCBp
bnN0ZWFkIHRyeSBhbmQgdXNlIGttYWxsb2MoKSBpbnN0ZWFkLiAgSWYgd2Ug
Y2FuDQorICAqIGVsaW1pbmF0ZSB0aGlzIHBvb2wsIHRoZW4gdGhpcyByZXN0
cmljdGlvbiB3b3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLg0KKyAgKi8NCisg
I2RlZmluZSBETUFfU0VHTUVOVF9TSVpFX0xJTUlURUQNCisgDQogICNpZmRl
ZiBDT05GSUdfU0NTSV9ERUJVR19RVUVVRVMNCiAgLyoNCiAgICogRW5hYmxl
IGEgYnVuY2ggb2YgYWRkaXRpb25hbCBjb25zaXN0ZW5jeSBjaGVja2luZy4g
ICBUdXJuIHRoaXMgb2ZmDQoqKioqKioqKioqKioqKioNCioqKiA5NywxMDgg
KioqKg0KICAgKiBUaGlzIGNhbiBiZSByZW1vdmVkIGZvciBvcHRpbWl6YXRp
b24uDQogICAqLw0KICAjZGVmaW5lIFNBTklUWV9DSEVDSyhyZXEsIF9DTFVT
VEVSLCBfRE1BKQkJCQlcDQohICAgICBpZiggcmVxLT5ucl9zZWdtZW50cyAh
PSBfX2NvdW50X3NlZ21lbnRzKHJlcSwgX0NMVVNURVIsIF9ETUEpICkJXA0K
ICAgICAgewkJCQkJCQkJCVwNCiAgCV9fbGFiZWxfXyBoZXJlOwkJCQkJCQlc
DQogIGhlcmU6CQkJCQkJCQkJXA0KICAJcHJpbnRrKCJJbmNvcnJlY3Qgc2Vn
bWVudCBjb3VudCBhdCAweCVwIiwgJiZoZXJlKTsJCVwNCiEgCWR1bXBfc3Rh
dHMocmVxLCBfQ0xVU1RFUiwgX0RNQSwgX19jb3VudF9zZWdtZW50cyhyZXEs
IF9DTFVTVEVSLCBfRE1BKSk7IFwNCiAgICAgIH0NCiAgI2Vsc2UNCiAgI2Rl
ZmluZSBTQU5JVFlfQ0hFQ0socmVxLCBfQ0xVU1RFUiwgX0RNQSkNCi0tLSAx
MDUsMTE2IC0tLS0NCiAgICogVGhpcyBjYW4gYmUgcmVtb3ZlZCBmb3Igb3B0
aW1pemF0aW9uLg0KICAgKi8NCiAgI2RlZmluZSBTQU5JVFlfQ0hFQ0socmVx
LCBfQ0xVU1RFUiwgX0RNQSkJCQkJXA0KISAgICAgaWYoIHJlcS0+bnJfc2Vn
bWVudHMgIT0gX19jb3VudF9zZWdtZW50cyhyZXEsIF9DTFVTVEVSLCBfRE1B
LCBOVUxMKSApCVwNCiAgICAgIHsJCQkJCQkJCQlcDQogIAlfX2xhYmVsX18g
aGVyZTsJCQkJCQkJXA0KICBoZXJlOgkJCQkJCQkJCVwNCiAgCXByaW50aygi
SW5jb3JyZWN0IHNlZ21lbnQgY291bnQgYXQgMHglcCIsICYmaGVyZSk7CQlc
DQohIAlkdW1wX3N0YXRzKHJlcSwgX0NMVVNURVIsIF9ETUEsIF9fY291bnRf
c2VnbWVudHMocmVxLCBfQ0xVU1RFUiwgX0RNQSwgTlVMTCkpOyBcDQogICAg
ICB9DQogICNlbHNlDQogICNkZWZpbmUgU0FOSVRZX0NIRUNLKHJlcSwgX0NM
VVNURVIsIF9ETUEpDQoqKioqKioqKioqKioqKioNCioqKiAxNjYsMTcxICoq
KioNCi0tLSAxNzQsMTgxIC0tLS0NCiAgICogICAgICAgICAgICAgIGRtYV9o
b3N0IC0gMSBpZiB0aGlzIGhvc3QgaGFzIElTQSBETUEgaXNzdWVzIChidXMg
ZG9lc24ndA0KICAgKiAgICAgICAgICAgICAgICAgICAgICBleHBvc2UgYWxs
IG9mIHRoZSBhZGRyZXNzIGxpbmVzLCBzbyB0aGF0IERNQSBjYW5ub3QNCiAg
ICogICAgICAgICAgICAgICAgICAgICAgYmUgZG9uZSBmcm9tIGFuIGFyYml0
cmFyeSBhZGRyZXNzKS4NCisgICoJCXJlbWFpbmRlciAtIHVzZWQgdG8gbGlt
aXQgc2l6ZSBvZiBhbnkgZ2l2ZW4gc2VnbWVudCB0bw0KKyAgKgkJCVBBR0Vf
U0laRS4NCiAgICoNCiAgICogUmV0dXJuczogICAgIENvdW50IG9mIHRoZSBu
dW1iZXIgb2YgU0cgc2VnbWVudHMgZm9yIHRoZSByZXF1ZXN0Lg0KICAgKg0K
KioqKioqKioqKioqKioqDQoqKiogMTc1LDE4NSAqKioqDQogICAqLw0KICBf
X2lubGluZSBzdGF0aWMgaW50IF9fY291bnRfc2VnbWVudHMoc3RydWN0IHJl
cXVlc3QgKnJlcSwNCiAgCQkJCSAgICAgaW50IHVzZV9jbHVzdGVyaW5nLA0K
ISAJCQkJICAgICBpbnQgZG1hX2hvc3QpDQogIHsNCiAgCWludCByZXQgPSAx
Ow0KICAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsNCiAgDQogIAlmb3IgKGJo
ID0gcmVxLT5iaDsgYmgtPmJfcmVxbmV4dCAhPSBOVUxMOyBiaCA9IGJoLT5i
X3JlcW5leHQpIHsNCiAgCQlpZiAodXNlX2NsdXN0ZXJpbmcpIHsNCiAgCQkJ
LyogDQotLS0gMTg1LDIwMSAtLS0tDQogICAqLw0KICBfX2lubGluZSBzdGF0
aWMgaW50IF9fY291bnRfc2VnbWVudHMoc3RydWN0IHJlcXVlc3QgKnJlcSwN
CiAgCQkJCSAgICAgaW50IHVzZV9jbHVzdGVyaW5nLA0KISAJCQkJICAgICBp
bnQgZG1hX2hvc3QsDQohIAkJCQkgICAgIGludCAqIHJlbWFpbmRlcikNCiAg
ew0KICAJaW50IHJldCA9IDE7DQorIAlpbnQgcmVxc2l6ZSA9IDA7DQogIAlz
dHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOw0KICANCisgCWlmKCByZW1haW5kZXIg
IT0gTlVMTCApIHsNCisgCQlyZXFzaXplID0gKnJlbWFpbmRlcjsNCisgCX0N
CisgDQogIAlmb3IgKGJoID0gcmVxLT5iaDsgYmgtPmJfcmVxbmV4dCAhPSBO
VUxMOyBiaCA9IGJoLT5iX3JlcW5leHQpIHsNCiAgCQlpZiAodXNlX2NsdXN0
ZXJpbmcpIHsNCiAgCQkJLyogDQoqKioqKioqKioqKioqKioNCioqKiAxOTEs
MjA3ICoqKioNCi0tLSAyMDcsMjQ5IC0tLS0NCiAgCQkJaWYgKGRtYV9ob3N0
ICYmDQogIAkJCSAgICB2aXJ0X3RvX3BoeXMoYmgtPmJfZGF0YSkgLSAxID09
IElTQV9ETUFfVEhSRVNIT0xEKSB7DQogIAkJCQlyZXQrKzsNCisgCQkJCXJl
cXNpemUgPSBiaC0+Yl9zaXplOw0KICAJCQl9IGVsc2UgaWYgKENPTlRJR1VP
VVNfQlVGRkVSUyhiaCwgYmgtPmJfcmVxbmV4dCkpIHsNCiAgCQkJCS8qDQog
IAkJCQkgKiBUaGlzIG9uZSBpcyBPSy4gIExldCBpdCBnby4NCisgCQkJCSAq
LyANCisgI2lmZGVmIERNQV9TRUdNRU5UX1NJWkVfTElNSVRFRA0KKyAJCQkJ
LyogTm90ZSBzY3NpX21hbGxvYyBpcyBvbmx5IGFibGUgdG8gaGFuZCBvdXQN
CisgCQkJCSAqIGNodW5rcyBvZiBtZW1vcnkgaW4gc2l6ZXMgb2YgUEFHRV9T
SVpFIG9yDQorIAkJCQkgKiBsZXNzLiAgVGh1cyB3ZSBuZWVkIHRvIGtlZXAg
dHJhY2sgb2YNCisgCQkJCSAqIHRoZSBzaXplIG9mIHRoZSBwaWVjZSB0aGF0
IHdlIGhhdmUNCisgCQkJCSAqIHNlZW4gc28gZmFyLCBhbmQgaWYgd2UgaGF2
ZSBoaXQNCisgCQkJCSAqIHRoZSBsaW1pdCBvZiBQQUdFX1NJWkUsIHRoZW4g
d2UgYXJlDQorIAkJCQkgKiBraW5kIG9mIHNjcmV3ZWQgYW5kIHdlIG5lZWQg
dG8gc3RhcnQNCisgCQkJCSAqIGFub3RoZXIgc2VnbWVudC4NCiAgCQkJCSAq
Lw0KKyAJCQkJaWYoIGRtYV9ob3N0DQorIAkJCQkgICAgJiYgdmlydF90b19w
aHlzKGJoLT5iX2RhdGEpIC0gMSA+PSBJU0FfRE1BX1RIUkVTSE9MRA0KKyAJ
CQkJICAgICYmIHJlcXNpemUgKyBiaC0+Yl9zaXplID4gUEFHRV9TSVpFICkN
CisgCQkJCXsNCisgCQkJCQlyZXQrKzsNCisgCQkJCQlyZXFzaXplID0gYmgt
PmJfc2l6ZTsNCisgCQkJCQljb250aW51ZTsNCisgCQkJCX0NCisgI2VuZGlm
DQorIAkJCQlyZXFzaXplICs9IGJoLT5iX3NpemU7DQogIAkJCQljb250aW51
ZTsNCiAgCQkJfQ0KICAJCQlyZXQrKzsNCisgCQkJcmVxc2l6ZSA9IGJoLT5i
X3NpemU7DQogIAkJfSBlbHNlIHsNCiAgCQkJcmV0Kys7DQorIAkJCXJlcXNp
emUgPSBiaC0+Yl9zaXplOw0KICAJCX0NCiAgCX0NCisgCWlmKCByZW1haW5k
ZXIgIT0gTlVMTCApIHsNCisgCQkqcmVtYWluZGVyID0gcmVxc2l6ZTsNCisg
CX0NCiAgCXJldHVybiByZXQ7DQogIH0NCiAgDQoqKioqKioqKioqKioqKioN
CioqKiAyMzksMjQ1ICoqKioNCiAgDQogIAlyZXEtPm5yX3NlZ21lbnRzID0g
X19jb3VudF9zZWdtZW50cyhyZXEsIA0KICAJCQkJCSAgICBDTFVTVEVSQUJM
RV9ERVZJQ0UoU0hwbnQsIFNEcG50KSwNCiEgCQkJCQkgICAgU0hwbnQtPnVu
Y2hlY2tlZF9pc2FfZG1hKTsNCiAgfQ0KICANCiAgLyoNCi0tLSAyODEsMjg3
IC0tLS0NCiAgDQogIAlyZXEtPm5yX3NlZ21lbnRzID0gX19jb3VudF9zZWdt
ZW50cyhyZXEsIA0KICAJCQkJCSAgICBDTFVTVEVSQUJMRV9ERVZJQ0UoU0hw
bnQsIFNEcG50KSwNCiEgCQkJCQkgICAgU0hwbnQtPnVuY2hlY2tlZF9pc2Ff
ZG1hLCBOVUxMKTsNCiAgfQ0KICANCiAgLyoNCioqKioqKioqKioqKioqKg0K
KioqIDI4MiwyODcgKioqKg0KLS0tIDMyNCwzMzAgLS0tLQ0KICAJCQkJICAg
IGludCBkbWFfaG9zdCkNCiAgew0KICAJdW5zaWduZWQgaW50IHNlY3Rvciwg
Y291bnQ7DQorIAl1bnNpZ25lZCBpbnQgc2VnbWVudF9zaXplID0gMDsNCiAg
CVNjc2lfRGV2aWNlICpTRHBudDsNCiAgCXN0cnVjdCBTY3NpX0hvc3QgKlNI
cG50Ow0KICANCioqKioqKioqKioqKioqKg0KKioqIDMzNCwzMzkgKioqKg0K
LS0tIDM3NywzOTMgLS0tLQ0KICAJCQkJZ290byBuZXdfc2VnbWVudDsNCiAg
CQkJfQ0KICAJCQlpZiAoQ09OVElHVU9VU19CVUZGRVJTKHJlcS0+Ymh0YWls
LCBiaCkpIHsNCisgI2lmZGVmIERNQV9TRUdNRU5UX1NJWkVfTElNSVRFRA0K
KyAJCQkJaWYoIGRtYV9ob3N0DQorIAkJCQkgICAgJiYgdmlydF90b19waHlz
KGJoLT5iX2RhdGEpIC0gMSA+PSBJU0FfRE1BX1RIUkVTSE9MRCApIHsNCisg
CQkJCQlzZWdtZW50X3NpemUgPSAwOw0KKyAJCQkJCWNvdW50ID0gX19jb3Vu
dF9zZWdtZW50cyhyZXEsIHVzZV9jbHVzdGVyaW5nLCBkbWFfaG9zdCwgJnNl
Z21lbnRfc2l6ZSk7DQorIAkJCQkJaWYoIHNlZ21lbnRfc2l6ZSArIGJoLT5i
X3NpemUgPiBQQUdFX1NJWkUgKQ0KKyAJCQkJCXsNCisgCQkJCQkJZ290byBu
ZXdfc2VnbWVudDsNCisgCQkJCQl9DQorIAkJCQl9DQorICNlbmRpZg0KICAJ
CQkJLyoNCiAgCQkJCSAqIFRoaXMgb25lIGlzIE9LLiAgTGV0IGl0IGdvLg0K
ICAJCQkJICovDQoqKioqKioqKioqKioqKioNCioqKiAzNTQsMzU5ICoqKioN
Ci0tLSA0MDgsNDIzIC0tLS0NCiAgCQkJCWdvdG8gbmV3X3NlZ21lbnQ7DQog
IAkJCX0NCiAgCQkJaWYgKENPTlRJR1VPVVNfQlVGRkVSUyhiaCwgcmVxLT5i
aCkpIHsNCisgI2lmZGVmIERNQV9TRUdNRU5UX1NJWkVfTElNSVRFRA0KKyAJ
CQkJaWYoIGRtYV9ob3N0DQorIAkJCQkgICAgJiYgdmlydF90b19waHlzKGJo
LT5iX2RhdGEpIC0gMSA+PSBJU0FfRE1BX1RIUkVTSE9MRCApIHsNCisgCQkJ
CQlzZWdtZW50X3NpemUgPSBiaC0+Yl9zaXplOw0KKyAJCQkJCWNvdW50ID0g
X19jb3VudF9zZWdtZW50cyhyZXEsIHVzZV9jbHVzdGVyaW5nLCBkbWFfaG9z
dCwgJnNlZ21lbnRfc2l6ZSk7DQorIAkJCQkJaWYoIGNvdW50ICE9IHJlcS0+
bnJfc2VnbWVudHMgKSB7DQorIAkJCQkJCWdvdG8gbmV3X3NlZ21lbnQ7DQor
IAkJCQkJfQ0KKyAJCQkJfQ0KKyAjZW5kaWYNCiAgCQkJCS8qDQogIAkJCQkg
KiBUaGlzIG9uZSBpcyBPSy4gIExldCBpdCBnby4NCiAgCQkJCSAqLw0KKioq
KioqKioqKioqKioqDQoqKiogNDc3LDQ4MiAqKioqDQotLS0gNTQxLDU2NSAt
LS0tDQogIAkJICAgIHZpcnRfdG9fcGh5cyhyZXEtPmJodGFpbC0+Yl9kYXRh
KSAtIDEgPT0gSVNBX0RNQV9USFJFU0hPTEQpIHsNCiAgCQkJZ290byBkb250
X2NvbWJpbmU7DQogIAkJfQ0KKyAjaWZkZWYgRE1BX1NFR01FTlRfU0laRV9M
SU1JVEVEDQorIAkJLyoNCisgCQkgKiBXZSBjdXJyZW50bHkgY2FuIG9ubHkg
YWxsb2NhdGUgc2NhdHRlci1nYXRoZXIgYm91bmNlDQorIAkJICogYnVmZmVy
cyBpbiBjaHVua3Mgb2YgUEFHRV9TSVpFIG9yIGxlc3MuDQorIAkJICovDQor
IAkJaWYgKGRtYV9ob3N0DQorIAkJICAgICYmIENPTlRJR1VPVVNfQlVGRkVS
UyhyZXEtPmJodGFpbCwgbmV4dC0+YmgpDQorIAkJICAgICYmIHZpcnRfdG9f
cGh5cyhyZXEtPmJodGFpbC0+Yl9kYXRhKSAtIDEgPj0gSVNBX0RNQV9USFJF
U0hPTEQgKQ0KKyAJCXsNCisgCQkJaW50IHNlZ21lbnRfc2l6ZSA9IDA7DQor
IAkJCWludCBjb3VudCA9IDA7DQorIA0KKyAJCQljb3VudCA9IF9fY291bnRf
c2VnbWVudHMocmVxLCB1c2VfY2x1c3RlcmluZywgZG1hX2hvc3QsICZzZWdt
ZW50X3NpemUpOw0KKyAJCQljb3VudCArPSBfX2NvdW50X3NlZ21lbnRzKG5l
eHQsIHVzZV9jbHVzdGVyaW5nLCBkbWFfaG9zdCwgJnNlZ21lbnRfc2l6ZSk7
DQorIAkJCWlmKCBjb3VudCAhPSByZXEtPm5yX3NlZ21lbnRzICsgbmV4dC0+
bnJfc2VnbWVudHMgKSB7DQorIAkJCQlnb3RvIGRvbnRfY29tYmluZTsNCisg
CQkJfQ0KKyAJCX0NCisgI2VuZGlmDQogIAkJaWYgKENPTlRJR1VPVVNfQlVG
RkVSUyhyZXEtPmJodGFpbCwgbmV4dC0+YmgpKSB7DQogIAkJCS8qDQogIAkJ
CSAqIFRoaXMgb25lIGlzIE9LLiAgTGV0IGl0IGdvLg0KKioqKioqKioqKioq
KioqDQoqKiogNjExLDYxNyAqKioqDQogIAkgKiBGaXJzdCB3ZSBuZWVkIHRv
IGtub3cgaG93IG1hbnkgc2NhdHRlciBnYXRoZXIgc2VnbWVudHMgYXJlIG5l
ZWRlZC4NCiAgCSAqLw0KICAJaWYgKCFzZ19jb3VudF92YWxpZCkgew0KISAJ
CWNvdW50ID0gX19jb3VudF9zZWdtZW50cyhyZXEsIHVzZV9jbHVzdGVyaW5n
LCBkbWFfaG9zdCk7DQogIAl9IGVsc2Ugew0KICAJCWNvdW50ID0gcmVxLT5u
cl9zZWdtZW50czsNCiAgCX0NCi0tLSA2OTQsNzAwIC0tLS0NCiAgCSAqIEZp
cnN0IHdlIG5lZWQgdG8ga25vdyBob3cgbWFueSBzY2F0dGVyIGdhdGhlciBz
ZWdtZW50cyBhcmUgbmVlZGVkLg0KICAJICovDQogIAlpZiAoIXNnX2NvdW50
X3ZhbGlkKSB7DQohIAkJY291bnQgPSBfX2NvdW50X3NlZ21lbnRzKHJlcSwg
dXNlX2NsdXN0ZXJpbmcsIGRtYV9ob3N0LCBOVUxMKTsNCiAgCX0gZWxzZSB7
DQogIAkJY291bnQgPSByZXEtPm5yX3NlZ21lbnRzOw0KICAJfQ0KKioqKioq
KioqKioqKioqDQoqKiogNjcyLDY4NSAqKioqDQogIAkJCQkvKiBOb3RoaW5n
IC0gZmFsbCB0aHJvdWdoICovDQogIAkJCX0gZWxzZSBpZiAoQ09OVElHVU9V
U19CVUZGRVJTKGJocHJldiwgYmgpKSB7DQogIAkJCQkvKg0KISAJCQkJICog
VGhpcyBvbmUgaXMgT0suICBMZXQgaXQgZ28uDQogIAkJCQkgKi8NCiEgCQkJ
CXNncG50W2NvdW50IC0gMV0ubGVuZ3RoICs9IGJoLT5iX3NpemU7DQohIAkJ
CQlpZiAoIWRtYV9ob3N0KSB7DQogIAkJCQkJU0NwbnQtPnJlcXVlc3RfYnVm
ZmxlbiArPSBiaC0+Yl9zaXplOw0KICAJCQkJfQ0KLSAJCQkJYmhwcmV2ID0g
Ymg7DQotIAkJCQljb250aW51ZTsNCiAgCQkJfQ0KICAJCX0NCiAgCQljb3Vu
dCsrOw0KLS0tIDc1NSw3ODMgLS0tLQ0KICAJCQkJLyogTm90aGluZyAtIGZh
bGwgdGhyb3VnaCAqLw0KICAJCQl9IGVsc2UgaWYgKENPTlRJR1VPVVNfQlVG
RkVSUyhiaHByZXYsIGJoKSkgew0KICAJCQkJLyoNCiEgCQkJCSAqIFRoaXMg
b25lIGlzIE9LLiAgTGV0IGl0IGdvLiAgTm90ZSB0aGF0IHdlDQohIAkJCQkg
KiBkbyBub3QgaGF2ZSB0aGUgYWJpbGl0eSB0byBhbGxvY2F0ZQ0KISAJCQkJ
ICogYm91bmNlIGJ1ZmZlciBzZWdtZW50cyA+IFBBR0VfU0laRSwgc28NCiEg
CQkJCSAqIGZvciBub3cgd2UgbGltaXQgdGhlIHRoaW5nLg0KICAJCQkJICov
DQohIAkJCQlpZiggZG1hX2hvc3QgKSB7DQohICNpZmRlZiBETUFfU0VHTUVO
VF9TSVpFX0xJTUlURUQNCiEgCQkJCQlpZiggc2dwbnRbY291bnQgLSAxXS5s
ZW5ndGggKyBiaC0+Yl9zaXplIDw9IFBBR0VfU0laRSApIHsNCiEgCQkJCQkJ
c2dwbnRbY291bnQgLSAxXS5sZW5ndGggKz0gYmgtPmJfc2l6ZTsNCiEgCQkJ
CQkJYmhwcmV2ID0gYmg7DQohIAkJCQkJCWNvbnRpbnVlOw0KISAJCQkJCX0N
CiEgI2Vsc2UNCiEgCQkJCQlzZ3BudFtjb3VudCAtIDFdLmxlbmd0aCArPSBi
aC0+Yl9zaXplOw0KISAJCQkJCWJocHJldiA9IGJoOw0KISAJCQkJCWNvbnRp
bnVlOw0KISAjZW5kaWYNCiEgCQkJCX0gZWxzZSB7DQohIAkJCQkJc2dwbnRb
Y291bnQgLSAxXS5sZW5ndGggKz0gYmgtPmJfc2l6ZTsNCiAgCQkJCQlTQ3Bu
dC0+cmVxdWVzdF9idWZmbGVuICs9IGJoLT5iX3NpemU7DQorIAkJCQkJYmhw
cmV2ID0gYmg7DQorIAkJCQkJY29udGludWU7DQogIAkJCQl9DQogIAkJCX0N
CiAgCQl9DQogIAkJY291bnQrKzsNCkluZGV4OiBsaW51eC9kcml2ZXJzL3Nj
c2kvc2NzaV9vYnNvbGV0ZS5jDQpkaWZmIC1jIGxpbnV4L2RyaXZlcnMvc2Nz
aS9zY3NpX29ic29sZXRlLmM6MS4xLjEuMiBsaW51eC9kcml2ZXJzL3Njc2kv
c2NzaV9vYnNvbGV0ZS5jOjEuNA0KKioqIGxpbnV4L2RyaXZlcnMvc2NzaS9z
Y3NpX29ic29sZXRlLmM6MS4xLjEuMglTYXQgRGVjIDE4IDE3OjQ5OjQxIDE5
OTkNCi0tLSBsaW51eC9kcml2ZXJzL3Njc2kvc2NzaV9vYnNvbGV0ZS5jCVNh
dCBKYW4gIDEgMjE6Mzk6MjMgMjAwMA0KKioqKioqKioqKioqKioqDQoqKiog
MSw1ICoqKioNCiAgLyoNCiEgICogIHNjc2kuYyBDb3B5cmlnaHQgKEMpIDE5
OTIgRHJldyBFY2toYXJkdA0KICAgKiAgICAgICAgIENvcHlyaWdodCAoQykg
MTk5MywgMTk5NCwgMTk5NSBFcmljIFlvdW5nZGFsZQ0KICAgKg0KICAgKiAg
Z2VuZXJpYyBtaWQtbGV2ZWwgU0NTSSBkcml2ZXINCi0tLSAxLDUgLS0tLQ0K
ICAvKg0KISAgKiAgc2NzaV9vYnNvbGV0ZS5jIENvcHlyaWdodCAoQykgMTk5
MiBEcmV3IEVja2hhcmR0DQogICAqICAgICAgICAgQ29weXJpZ2h0IChDKSAx
OTkzLCAxOTk0LCAxOTk1IEVyaWMgWW91bmdkYWxlDQogICAqDQogICAqICBn
ZW5lcmljIG1pZC1sZXZlbCBTQ1NJIGRyaXZlcg0KKioqKioqKioqKioqKioq
DQoqKiogODcsOTUgKioqKg0KICANCiAgZXh0ZXJuIGludCBzY3NpX2Rpc3Bh
dGNoX2NtZChTY3NpX0NtbmQgKiBTQ3BudCk7DQogIA0KISBleHRlcm4gdm9s
YXRpbGUgc3RydWN0IFNjc2lfSG9zdCAqaG9zdF9hY3RpdmU7DQohICNkZWZp
bmUgU0NTSV9CTE9DSyhIT1NUKSAoKEhPU1QtPmJsb2NrICYmIGhvc3RfYWN0
aXZlICYmIEhPU1QgIT0gaG9zdF9hY3RpdmUpIFwNCiEgCQkJICB8fCAoSE9T
VC0+Y2FuX3F1ZXVlICYmIEhPU1QtPmhvc3RfYnVzeSA+PSBIT1NULT5jYW5f
cXVldWUpKQ0KICANCiAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZ2VuZXJpY19z
ZW5zZVs2XSA9DQogIHtSRVFVRVNUX1NFTlNFLCAwLCAwLCAwLCAyNTUsIDB9
Ow0KLS0tIDg3LDkzIC0tLS0NCiAgDQogIGV4dGVybiBpbnQgc2NzaV9kaXNw
YXRjaF9jbWQoU2NzaV9DbW5kICogU0NwbnQpOw0KICANCiEgI2RlZmluZSBT
Q1NJX0JMT0NLKEhPU1QpIChIT1NULT5jYW5fcXVldWUgJiYgSE9TVC0+aG9z
dF9idXN5ID49IEhPU1QtPmNhbl9xdWV1ZSkNCiAgDQogIHN0YXRpYyB1bnNp
Z25lZCBjaGFyIGdlbmVyaWNfc2Vuc2VbNl0gPQ0KICB7UkVRVUVTVF9TRU5T
RSwgMCwgMCwgMCwgMjU1LCAwfTsNCioqKioqKioqKioqKioqKg0KKioqIDMz
NCwzMzkgKioqKg0KLS0tIDMzMiwzMzggLS0tLQ0KICAJaW50IGNoZWNrZWQ7
DQogIAlpbnQgb2xkdG87DQogIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0g
U0NwbnQtPmhvc3Q7DQorICAgICAgICAgU2NzaV9EZXZpY2UgKiBkZXZpY2Ug
PSBTQ3BudC0+ZGV2aWNlOw0KICAJaW50IHJlc3VsdCA9IFNDcG50LT5yZXN1
bHQ7DQogIAlTQ3BudC0+c2VyaWFsX251bWJlciA9IDA7DQogIAlTQ3BudC0+
c2VyaWFsX251bWJlcl9hdF90aW1lb3V0ID0gMDsNCioqKioqKioqKioqKioq
Kg0KKioqIDY1NSw2NjAgKioqKg0KLS0tIDY1NCw2NjAgLS0tLQ0KICAJCXBy
aW50aygiQ2FsbGluZyBkb25lIGZ1bmN0aW9uIC0gYXQgYWRkcmVzcyAlcFxu
IiwgU0NwbnQtPmRvbmUpOw0KICAjZW5kaWYNCiAgCQlob3N0LT5ob3N0X2J1
c3ktLTsJLyogSW5kaWNhdGUgdGhhdCB3ZSBhcmUgZnJlZSAqLw0KKyAgICAg
ICAgICAgICAgICAgZGV2aWNlLT5kZXZpY2VfYnVzeS0tOwkvKiBEZWNyZW1l
bnQgZGV2aWNlIHVzYWdlIGNvdW50ZXIuICovDQogIA0KICAJCVNDcG50LT5y
ZXN1bHQgPSByZXN1bHQgfCAoKGV4aXQgJiAweGZmKSA8PCAyNCk7DQogIAkJ
U0NwbnQtPnVzZV9zZyA9IFNDcG50LT5vbGRfdXNlX3NnOw0KSW5kZXg6IGxp
bnV4L2RyaXZlcnMvc2NzaS9zY3NpX3F1ZXVlLmMNCmRpZmYgLWMgbGludXgv
ZHJpdmVycy9zY3NpL3Njc2lfcXVldWUuYzoxLjEuMS4zIGxpbnV4L2RyaXZl
cnMvc2NzaS9zY3NpX3F1ZXVlLmM6MS4zDQoqKiogbGludXgvZHJpdmVycy9z
Y3NpL3Njc2lfcXVldWUuYzoxLjEuMS4zCVdlZCBEZWMgMjIgMTA6Mjg6NDUg
MTk5OQ0KLS0tIGxpbnV4L2RyaXZlcnMvc2NzaS9zY3NpX3F1ZXVlLmMJU3Vu
IEphbiAgMiAyMzo0NTowNSAyMDAwDQoqKioqKioqKioqKioqKioNCioqKiAx
MzMsMTM4ICoqKioNCi0tLSAxMzMsMTQ1IC0tLS0NCiAgCWNtZC0+YmhfbmV4
dCA9IE5VTEw7DQogIA0KICAJLyoNCisgCSAqIERlY3JlbWVudCB0aGUgY291
bnRlcnMsIHNpbmNlIHRoZXNlIGNvbW1hbmRzIGFyZSBubyBsb25nZXINCisg
CSAqIGFjdGl2ZSBvbiB0aGUgaG9zdC9kZXZpY2UuDQorIAkgKi8NCisgCWNt
ZC0+aG9zdC0+aG9zdF9idXN5LS07DQorIAljbWQtPmRldmljZS0+ZGV2aWNl
X2J1c3ktLTsNCisgDQorIAkvKg0KICAJICogSW5zZXJ0IHRoaXMgY29tbWFu
ZCBhdCB0aGUgaGVhZCBvZiB0aGUgcXVldWUgZm9yIGl0J3MgZGV2aWNlLg0K
ICAJICogSXQgd2lsbCBnbyBiZWZvcmUgYWxsIG90aGVyIGNvbW1hbmRzIHRo
YXQgYXJlIGFscmVhZHkgaW4gdGhlIHF1ZXVlLg0KICAJICovDQpJbmRleDog
bGludXgvZHJpdmVycy9zY3NpL3NkLmMNCmRpZmYgLWMgbGludXgvZHJpdmVy
cy9zY3NpL3NkLmM6MS4xLjEuNCBsaW51eC9kcml2ZXJzL3Njc2kvc2QuYzox
LjcNCioqKiBsaW51eC9kcml2ZXJzL3Njc2kvc2QuYzoxLjEuMS40CVRodSBE
ZWMgMzAgMDA6MTQ6MDIgMTk5OQ0KLS0tIGxpbnV4L2RyaXZlcnMvc2NzaS9z
ZC5jCVN1biBKYW4gIDIgMjM6NDU6MDUgMjAwMA0KKioqKioqKioqKioqKioq
DQoqKiogMjMyLDIzOCAqKioqDQotLS0gMjMyLDI0MCAtLS0tDQogIHsNCiAg
CWludCBkZXYsIGRldm0sIGJsb2NrLCB0aGlzX2NvdW50Ow0KICAJU2NzaV9E
aXNrICpkcG50Ow0KKyAjaWYgQ09ORklHX1NDU0lfTE9HR0lORw0KICAJY2hh
ciBuYnVmZls2XTsNCisgI2VuZGlmDQogIA0KICAJZGV2bSA9IFNEX1BBUlRJ
VElPTihTQ3BudC0+cmVxdWVzdC5ycV9kZXYpOw0KICAJZGV2ID0gREVWSUNF
X05SKFNDcG50LT5yZXF1ZXN0LnJxX2Rldik7DQoqKioqKioqKioqKioqKioN
CioqKiAyNDgsMjU0ICoqKioNCiAgCSAgICAhZHBudC0+ZGV2aWNlLT5vbmxp
bmUgfHwNCiAgIAkgICAgYmxvY2sgKyBTQ3BudC0+cmVxdWVzdC5ucl9zZWN0
b3JzID4gc2RbZGV2bV0ubnJfc2VjdHMpIHsNCiAgCQlTQ1NJX0xPR19ITFFV
RVVFKDIsIHByaW50aygiRmluaXNoaW5nICVsZCBzZWN0b3JzXG4iLCBTQ3Bu
dC0+cmVxdWVzdC5ucl9zZWN0b3JzKSk7DQotIAkJU0NwbnQgPSBzY3NpX2Vu
ZF9yZXF1ZXN0KFNDcG50LCAwLCBTQ3BudC0+cmVxdWVzdC5ucl9zZWN0b3Jz
KTsNCiAgCQlTQ1NJX0xPR19ITFFVRVVFKDIsIHByaW50aygiUmV0cnkgd2l0
aCAweCVwXG4iLCBTQ3BudCkpOw0KICAJCXJldHVybiAwOw0KICAJfQ0KLS0t
IDI1MCwyNTUgLS0tLQ0KKioqKioqKioqKioqKioqDQoqKiogMjU5LDI2NSAq
KioqDQogIAkJICogYml0IGhhcyBiZWVuIHJlc2V0DQogIAkJICovDQogIAkJ
LyogcHJpbnRrKCJTQ1NJIGRpc2sgaGFzIGJlZW4gY2hhbmdlZC4gUHJvaGli
aXRpbmcgZnVydGhlciBJL08uXG4iKTsgKi8NCi0gCQlTQ3BudCA9IHNjc2lf
ZW5kX3JlcXVlc3QoU0NwbnQsIDAsIFNDcG50LT5yZXF1ZXN0Lm5yX3NlY3Rv
cnMpOw0KICAJCXJldHVybiAwOw0KICAJfQ0KICAJU0NTSV9MT0dfSExRVUVV
RSgyLCBzZF9kZXZuYW1lKGRldm0sIG5idWZmKSk7DQotLS0gMjYwLDI2NSAt
LS0tDQoqKioqKioqKioqKioqKioNCioqKiAyODAsMjg2ICoqKioNCiAgCWlm
IChkcG50LT5kZXZpY2UtPnNlY3Rvcl9zaXplID09IDEwMjQpIHsNCiAgCQlp
ZiAoKGJsb2NrICYgMSkgfHwgKFNDcG50LT5yZXF1ZXN0Lm5yX3NlY3RvcnMg
JiAxKSkgew0KICAJCQlwcmludGsoInNkLmM6QmFkIGJsb2NrIG51bWJlciBy
ZXF1ZXN0ZWQiKTsNCi0gCQkJU0NwbnQgPSBzY3NpX2VuZF9yZXF1ZXN0KFND
cG50LCAwLCBTQ3BudC0+cmVxdWVzdC5ucl9zZWN0b3JzKTsNCiAgCQkJcmV0
dXJuIDA7DQogIAkJfSBlbHNlIHsNCiAgCQkJYmxvY2sgPSBibG9jayA+PiAx
Ow0KLS0tIDI4MCwyODUgLS0tLQ0KKioqKioqKioqKioqKioqDQoqKiogMjkw
LDI5NiAqKioqDQogIAlpZiAoZHBudC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZSA9
PSAyMDQ4KSB7DQogIAkJaWYgKChibG9jayAmIDMpIHx8IChTQ3BudC0+cmVx
dWVzdC5ucl9zZWN0b3JzICYgMykpIHsNCiAgCQkJcHJpbnRrKCJzZC5jOkJh
ZCBibG9jayBudW1iZXIgcmVxdWVzdGVkIik7DQotIAkJCVNDcG50ID0gc2Nz
aV9lbmRfcmVxdWVzdChTQ3BudCwgMCwgU0NwbnQtPnJlcXVlc3QubnJfc2Vj
dG9ycyk7DQogIAkJCXJldHVybiAwOw0KICAJCX0gZWxzZSB7DQogIAkJCWJs
b2NrID0gYmxvY2sgPj4gMjsNCi0tLSAyODksMjk0IC0tLS0NCioqKioqKioq
KioqKioqKg0KKioqIDMwMCwzMDYgKioqKg0KICAJc3dpdGNoIChTQ3BudC0+
cmVxdWVzdC5jbWQpIHsNCiAgCWNhc2UgV1JJVEU6DQogIAkJaWYgKCFkcG50
LT5kZXZpY2UtPndyaXRlYWJsZSkgew0KLSAJCQlTQ3BudCA9IHNjc2lfZW5k
X3JlcXVlc3QoU0NwbnQsIDAsIFNDcG50LT5yZXF1ZXN0Lm5yX3NlY3RvcnMp
Ow0KICAJCQlyZXR1cm4gMDsNCiAgCQl9DQogIAkJU0NwbnQtPmNtbmRbMF0g
PSBXUklURV82Ow0KLS0tIDI5OCwzMDMgLS0tLQ0KKioqKioqKioqKioqKioq
DQoqKiogNTIwLDUyNiAqKioqDQotLS0gNTE3LDUyNSAtLS0tDQogIHN0YXRp
YyB2b2lkIHJ3X2ludHIoU2NzaV9DbW5kICogU0NwbnQpDQogIHsNCiAgCWlu
dCByZXN1bHQgPSBTQ3BudC0+cmVzdWx0Ow0KKyAjaWYgQ09ORklHX1NDU0lf
TE9HR0lORw0KICAJY2hhciBuYnVmZls2XTsNCisgI2VuZGlmDQogIAlpbnQg
dGhpc19jb3VudCA9IFNDcG50LT5idWZmbGVuID4+IDk7DQogIAlpbnQgZ29v
ZF9zZWN0b3JzID0gKHJlc3VsdCA9PSAwID8gdGhpc19jb3VudCA6IDApOw0K
ICAJaW50IGJsb2NrX3NlY3RvcnMgPSAxOw0KKioqKioqKioqKioqKioqDQoq
KiogNjU4LDY3NyAqKioqDQogIAlyZXR1cm4gcmV0dmFsOw0KICB9DQogIA0K
LSBzdGF0aWMgdm9pZCBzZF93YWl0X2NtZChTY3NpX0NtbmQgKiBTQ3BudCwg
Y29uc3Qgdm9pZCAqY21uZCwNCi0gCSAgICAgIHZvaWQgKmJ1ZmZlciwgdW5z
aWduZWQgYnVmZmxlbiwgdm9pZCAoKmRvbmUpIChTY3NpX0NtbmQgKiksDQot
IAkJCWludCB0aW1lb3V0LCBpbnQgcmV0cmllcykNCi0gew0KLSAJREVDTEFS
RV9NVVRFWF9MT0NLRUQoc2VtKTsNCi0gDQotIAlTQ3BudC0+cmVxdWVzdC5z
ZW0gPSAmc2VtOw0KLSAJU0NwbnQtPnJlcXVlc3QucnFfc3RhdHVzID0gUlFf
U0NTSV9CVVNZOw0KLSAJc2NzaV9kb19jbWQoU0NwbnQsICh2b2lkICopIGNt
bmQsDQotIAkJICAgIGJ1ZmZlciwgYnVmZmxlbiwgZG9uZSwgdGltZW91dCwg
cmV0cmllcyk7DQotIAlkb3duKCZzZW0pOw0KLSAJU0NwbnQtPnJlcXVlc3Qu
c2VtID0gTlVMTDsNCi0gfQ0KLSANCiAgc3RhdGljIHZvaWQgc2RfaW5pdF9k
b25lKFNjc2lfQ21uZCAqIFNDcG50KQ0KICB7DQogIAlzdHJ1Y3QgcmVxdWVz
dCAqcmVxOw0KLS0tIDY1Nyw2NjIgLS0tLQ0KKioqKioqKioqKioqKioqDQoq
KiogNzI5LDczNSAqKioqDQogIAkJCVNDcG50LT5zZW5zZV9idWZmZXJbMF0g
PSAwOw0KICAJCQlTQ3BudC0+c2Vuc2VfYnVmZmVyWzJdID0gMDsNCiAgDQoh
IAkJCXNkX3dhaXRfY21kIChTQ3BudCwgKHZvaWQgKikgY21kLCAodm9pZCAq
KSBidWZmZXIsDQogIAkJCQkwLyo1MTIqLywgc2RfaW5pdF9kb25lLCAgU0Rf
VElNRU9VVCwgTUFYX1JFVFJJRVMpOw0KICANCiAgCQkJdGhlX3Jlc3VsdCA9
IFNDcG50LT5yZXN1bHQ7DQotLS0gNzE0LDcyMCAtLS0tDQogIAkJCVNDcG50
LT5zZW5zZV9idWZmZXJbMF0gPSAwOw0KICAJCQlTQ3BudC0+c2Vuc2VfYnVm
ZmVyWzJdID0gMDsNCiAgDQohIAkJCXNjc2lfd2FpdF9jbWQgKFNDcG50LCAo
dm9pZCAqKSBjbWQsICh2b2lkICopIGJ1ZmZlciwNCiAgCQkJCTAvKjUxMiov
LCBzZF9pbml0X2RvbmUsICBTRF9USU1FT1VULCBNQVhfUkVUUklFUyk7DQog
IA0KICAJCQl0aGVfcmVzdWx0ID0gU0NwbnQtPnJlc3VsdDsNCioqKioqKioq
KioqKioqKg0KKioqIDc1NSw3NjEgKioqKg0KICAJCQkJU0NwbnQtPnNlbnNl
X2J1ZmZlclswXSA9IDA7DQogIAkJCQlTQ3BudC0+c2Vuc2VfYnVmZmVyWzJd
ID0gMDsNCiAgDQohIAkJCQlzZF93YWl0X2NtZChTQ3BudCwgKHZvaWQgKikg
Y21kLCAodm9pZCAqKSBidWZmZXIsDQogIAkJCQkJICAgIDUxMiwgc2RfaW5p
dF9kb25lLCBTRF9USU1FT1VULCBNQVhfUkVUUklFUyk7DQogIAkJCX0NCiAg
CQkJc3BpbnRpbWUgPSAxOw0KLS0tIDc0MCw3NDYgLS0tLQ0KICAJCQkJU0Nw
bnQtPnNlbnNlX2J1ZmZlclswXSA9IDA7DQogIAkJCQlTQ3BudC0+c2Vuc2Vf
YnVmZmVyWzJdID0gMDsNCiAgDQohIAkJCQlzY3NpX3dhaXRfY21kKFNDcG50
LCAodm9pZCAqKSBjbWQsICh2b2lkICopIGJ1ZmZlciwNCiAgCQkJCQkgICAg
NTEyLCBzZF9pbml0X2RvbmUsIFNEX1RJTUVPVVQsIE1BWF9SRVRSSUVTKTsN
CiAgCQkJfQ0KICAJCQlzcGludGltZSA9IDE7DQoqKioqKioqKioqKioqKioN
CioqKiA3ODUsNzkxICoqKioNCiAgCQlTQ3BudC0+c2Vuc2VfYnVmZmVyWzBd
ID0gMDsNCiAgCQlTQ3BudC0+c2Vuc2VfYnVmZmVyWzJdID0gMDsNCiAgDQoh
IAkJc2Rfd2FpdF9jbWQoU0NwbnQsICh2b2lkICopIGNtZCwgKHZvaWQgKikg
YnVmZmVyLA0KICAJCQkgICAgOCwgc2RfaW5pdF9kb25lLCBTRF9USU1FT1VU
LCBNQVhfUkVUUklFUyk7DQogIA0KICAJCXRoZV9yZXN1bHQgPSBTQ3BudC0+
cmVzdWx0Ow0KLS0tIDc3MCw3NzYgLS0tLQ0KICAJCVNDcG50LT5zZW5zZV9i
dWZmZXJbMF0gPSAwOw0KICAJCVNDcG50LT5zZW5zZV9idWZmZXJbMl0gPSAw
Ow0KICANCiEgCQlzY3NpX3dhaXRfY21kKFNDcG50LCAodm9pZCAqKSBjbWQs
ICh2b2lkICopIGJ1ZmZlciwNCiAgCQkJICAgIDgsIHNkX2luaXRfZG9uZSwg
U0RfVElNRU9VVCwgTUFYX1JFVFJJRVMpOw0KICANCiAgCQl0aGVfcmVzdWx0
ID0gU0NwbnQtPnJlc3VsdDsNCioqKioqKioqKioqKioqKg0KKioqIDkzNiw5
NDIgKioqKg0KICAJCVNDcG50LT5zZW5zZV9idWZmZXJbMl0gPSAwOw0KICAN
CiAgCQkvKiBzYW1lIGNvZGUgYXMgUkVBRENBUEEgISEgKi8NCiEgCQlzZF93
YWl0X2NtZChTQ3BudCwgKHZvaWQgKikgY21kLCAodm9pZCAqKSBidWZmZXIs
DQogIAkJCSAgICA1MTIsIHNkX2luaXRfZG9uZSwgU0RfVElNRU9VVCwgTUFY
X1JFVFJJRVMpOw0KICANCiAgCQl0aGVfcmVzdWx0ID0gU0NwbnQtPnJlc3Vs
dDsNCi0tLSA5MjEsOTI3IC0tLS0NCiAgCQlTQ3BudC0+c2Vuc2VfYnVmZmVy
WzJdID0gMDsNCiAgDQogIAkJLyogc2FtZSBjb2RlIGFzIFJFQURDQVBBICEh
ICovDQohIAkJc2NzaV93YWl0X2NtZChTQ3BudCwgKHZvaWQgKikgY21kLCAo
dm9pZCAqKSBidWZmZXIsDQogIAkJCSAgICA1MTIsIHNkX2luaXRfZG9uZSwg
U0RfVElNRU9VVCwgTUFYX1JFVFJJRVMpOw0KICANCiAgCQl0aGVfcmVzdWx0
ID0gU0NwbnQtPnJlc3VsdDsNCkluZGV4OiBsaW51eC9kcml2ZXJzL3Njc2kv
c3IuYw0KZGlmZiAtYyBsaW51eC9kcml2ZXJzL3Njc2kvc3IuYzoxLjEuMS4z
IGxpbnV4L2RyaXZlcnMvc2NzaS9zci5jOjEuMw0KKioqIGxpbnV4L2RyaXZl
cnMvc2NzaS9zci5jOjEuMS4xLjMJV2VkIERlYyAyMiAxMDoyODo0NyAxOTk5
DQotLS0gbGludXgvZHJpdmVycy9zY3NpL3NyLmMJU3VuIEphbiAgMiAyMzo0
NTowNSAyMDAwDQoqKioqKioqKioqKioqKioNCioqKiAyNjcsMjczICoqKioN
CiAgCQkvKg0KICAJCSAqIFVtbSwgeWVhaCwgcmlnaHQuICAgU3dhcHBpbmcg
dG8gYSBjZHJvbS4gIE5pY2UgdHJ5Lg0KICAJCSAqLw0KLSAJCVNDcG50ID0g
c2NzaV9lbmRfcmVxdWVzdChTQ3BudCwgMCwgU0NwbnQtPnJlcXVlc3QubnJf
c2VjdG9ycyk7DQogIAkJcmV0dXJuIDA7DQogIAl9DQogIAlTQ1NJX0xPR19I
TFFVRVVFKDEsIHByaW50aygiRG9pbmcgc3IgcmVxdWVzdCwgZGV2ID0gJWQs
IGJsb2NrID0gJWRcbiIsIGRldm0sIGJsb2NrKSk7DQotLS0gMjY3LDI3MiAt
LS0tDQoqKioqKioqKioqKioqKioNCioqKiAyNzYsMjgyICoqKioNCiAgCSAg
ICAhc2NzaV9DRHNbZGV2XS5kZXZpY2UgfHwNCiAgCSAgICAhc2NzaV9DRHNb
ZGV2XS5kZXZpY2UtPm9ubGluZSkgew0KICAJCVNDU0lfTE9HX0hMUVVFVUUo
MiwgcHJpbnRrKCJGaW5pc2hpbmcgJWxkIHNlY3RvcnNcbiIsIFNDcG50LT5y
ZXF1ZXN0Lm5yX3NlY3RvcnMpKTsNCi0gCQlTQ3BudCA9IHNjc2lfZW5kX3Jl
cXVlc3QoU0NwbnQsIDAsIFNDcG50LT5yZXF1ZXN0Lm5yX3NlY3RvcnMpOw0K
ICAJCVNDU0lfTE9HX0hMUVVFVUUoMiwgcHJpbnRrKCJSZXRyeSB3aXRoIDB4
JXBcbiIsIFNDcG50KSk7DQogIAkJcmV0dXJuIDA7DQogIAl9DQotLS0gMjc1
LDI4MCAtLS0tDQoqKioqKioqKioqKioqKioNCioqKiAyODYsMjkyICoqKioN
CiAgCQkgKiBiaXQgaGFzIGJlZW4gcmVzZXQNCiAgCQkgKi8NCiAgCQkvKiBw
cmludGsoIlNDU0kgZGlzayBoYXMgYmVlbiBjaGFuZ2VkLiBQcm9oaWJpdGlu
ZyBmdXJ0aGVyIEkvTy5cbiIpOyAqLw0KLSAJCVNDcG50ID0gc2NzaV9lbmRf
cmVxdWVzdChTQ3BudCwgMCwgU0NwbnQtPnJlcXVlc3QubnJfc2VjdG9ycyk7
DQogIAkJcmV0dXJuIDA7DQogIAl9DQogIAkvKg0KLS0tIDI4NCwyODkgLS0t
LQ0KKioqKioqKioqKioqKioqDQoqKiogMzAwLDMxMyAqKioqDQogIAkJCXBy
aW50aygic3I6IGNhbid0IHN3aXRjaCBibG9ja3NpemU6IGluIGludGVycnVw
dFxuIik7DQogIAl9DQogIAlpZiAoU0NwbnQtPnJlcXVlc3QuY21kID09IFdS
SVRFKSB7DQotIAkJU0NwbnQgPSBzY3NpX2VuZF9yZXF1ZXN0KFNDcG50LCAw
LCBTQ3BudC0+cmVxdWVzdC5ucl9zZWN0b3JzKTsNCiAgCQlyZXR1cm4gMDsN
CiAgCX0NCiAgCWlmIChzY3NpX0NEc1tkZXZdLmRldmljZS0+c2VjdG9yX3Np
emUgPT0gMTAyNCkgew0KICAJCWlmICgoYmxvY2sgJiAxKSB8fCAoU0NwbnQt
PnJlcXVlc3QubnJfc2VjdG9ycyAmIDEpKSB7DQogIAkJCXByaW50aygic3Iu
YzpCYWQgMUsgYmxvY2sgbnVtYmVyIHJlcXVlc3RlZCAoJWQgJWxkKSIsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgU0NwbnQt
PnJlcXVlc3QubnJfc2VjdG9ycyk7DQotIAkJCVNDcG50ID0gc2NzaV9lbmRf
cmVxdWVzdChTQ3BudCwgMCwgU0NwbnQtPnJlcXVlc3QubnJfc2VjdG9ycyk7
DQogIAkJCXJldHVybiAwOw0KICAJCX0gZWxzZSB7DQogIAkJCWJsb2NrID0g
YmxvY2sgPj4gMTsNCi0tLSAyOTcsMzA4IC0tLS0NCioqKioqKioqKioqKioq
Kg0KKioqIDMxOCwzMjQgKioqKg0KICAJCWlmICgoYmxvY2sgJiAzKSB8fCAo
U0NwbnQtPnJlcXVlc3QubnJfc2VjdG9ycyAmIDMpKSB7DQogIAkJCXByaW50
aygic3IuYzpCYWQgMksgYmxvY2sgbnVtYmVyIHJlcXVlc3RlZCAoJWQgJWxk
KSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywg
U0NwbnQtPnJlcXVlc3QubnJfc2VjdG9ycyk7DQotIAkJCVNDcG50ID0gc2Nz
aV9lbmRfcmVxdWVzdChTQ3BudCwgMCwgU0NwbnQtPnJlcXVlc3QubnJfc2Vj
dG9ycyk7DQogIAkJCXJldHVybiAwOw0KICAJCX0gZWxzZSB7DQogIAkJCWJs
b2NrID0gYmxvY2sgPj4gMjsNCi0tLSAzMTMsMzE4IC0tLS0NCioqKioqKioq
KioqKioqKg0KKioqIDMyOCwzMzQgKioqKg0KICAJc3dpdGNoIChTQ3BudC0+
cmVxdWVzdC5jbWQpIHsNCiAgCWNhc2UgV1JJVEU6DQogIAkJaWYgKCFzY3Np
X0NEc1tkZXZdLmRldmljZS0+d3JpdGVhYmxlKSB7DQotIAkJCVNDcG50ID0g
c2NzaV9lbmRfcmVxdWVzdChTQ3BudCwgMCwgU0NwbnQtPnJlcXVlc3QubnJf
c2VjdG9ycyk7DQogIAkJCXJldHVybiAwOw0KICAJCX0NCiAgCQlTQ3BudC0+
Y21uZFswXSA9IFdSSVRFXzEwOw0KLS0tIDMyMiwzMjcgLS0tLQ0K
--1624180858-891426471-946783114=:20014--

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.rutgers.edu

home help back first fref pref prev next nref lref last post