SO_BINDTODEVICE patch for 2.0.30

Christoph Lameter (clameter@waterf.org)
Tue, 5 Aug 1997 08:25:28 -0700 (PDT)


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.

---1463811840-1602367619-870794728=:13301
Content-Type: TEXT/PLAIN; charset=US-ASCII

Due to popular demand here a post of the SO_BINDTODEVICE patch. It will
enable the dhcpd package for Debian to serve multiple Network Cards.

Patch and more information can be found at:

http://gunpowder.Stanford.EDU/software/LinuxChanges.html

On Tue, 5 Aug 1997, Trent Johnson wrote:

>Hi,
>
>Could you send me a copy of the so_bindtodevice patch. Am I correct in
>think that this patch will allow me to run a dhcp server that servers
>networks on two different ethernet cards?
>
>Trent

--- +++ --- +++ --- +++ --- +++ --- +++ --- +++ --- +++ ---

---1463811840-1602367619-870794728=:13301
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="lsobind.30-"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.970805082528.13301B@waterf.org>
Content-Description: SO_BINDTODEVICE patch

ZGlmZiAtdSAtciBsaW51eC9kcml2ZXJzL25ldC9uZXdfdHVubmVsLmMgbGlu
dXgtbW9kaWZpZWQvZHJpdmVycy9uZXQvbmV3X3R1bm5lbC5jDQotLS0gbGlu
dXgvZHJpdmVycy9uZXQvbmV3X3R1bm5lbC5jCVN1biBNYXIgMjQgMDI6NDc6
MzkgMTk5Ng0KKysrIGxpbnV4LW1vZGlmaWVkL2RyaXZlcnMvbmV0L25ld190
dW5uZWwuYwlGcmkgTWF5ICAyIDEwOjQ4OjM1IDE5OTcNCkBAIC0xNjEsNyAr
MTYxLDcgQEANCiAJICogIHJvdXRpbmcgdGFibGVzDQogCSAqLw0KIAlpcGgg
PSAoc3RydWN0IGlwaGRyICopIHNrYi0+ZGF0YTsNCi0JaWYgKChydCA9IGlw
X3J0X3JvdXRlKGlwaC0+ZGFkZHIsIDApKSA9PSBOVUxMKQ0KKwlpZiAoKHJ0
ID0gaXBfcnRfcm91dGUoaXBoLT5kYWRkciwgMCwgc2tiLT5zaz9za2ItPnNr
LT5ib3VuZF9kZXZpY2U6TlVMTCkpID09IE5VTEwpDQogCXsgDQogCQkvKiBO
byByb3V0ZSB0byBob3N0ICovDQogCQkvKiBXaGVyZSBkaWQgdGhlIHBhY2tl
dCBjb21lIGZyb20/ICovDQpAQCAtMTk0LDcgKzE5NCw3IEBADQogCX0NCiAJ
aXBfcnRfcHV0KHJ0KTsNCiANCi0JaWYgKChydCA9IGlwX3J0X3JvdXRlKHRh
cmdldCwgMCkpID09IE5VTEwpDQorCWlmICgocnQgPSBpcF9ydF9yb3V0ZSh0
YXJnZXQsIDAsIHNrYi0+c2s/c2tiLT5zay0+Ym91bmRfZGV2aWNlOk5VTEwp
KSA9PSBOVUxMKQ0KIAl7IA0KIAkJLyogTm8gcm91dGUgdG8gaG9zdCAqLw0K
IAkJLyogV2hlcmUgZGlkIHRoZSBwYWNrZXQgY29tZSBmcm9tPyAqLw0KZGlm
ZiAtdSAtciBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3NvY2tldC5oIGxpbnV4
LW1vZGlmaWVkL2luY2x1ZGUvYXNtLWkzODYvc29ja2V0LmgNCi0tLSBsaW51
eC9pbmNsdWRlL2FzbS1pMzg2L3NvY2tldC5oCVN1biBNYXIgMjQgMDI6NDc6
MzkgMTk5Ng0KKysrIGxpbnV4LW1vZGlmaWVkL2luY2x1ZGUvYXNtLWkzODYv
c29ja2V0LmgJV2VkIEFwciAxNiAxMjoyNTo1NyAxOTk3DQpAQCAtMjIsNCAr
MjIsNiBAQA0KICNkZWZpbmUgU09fQlNEQ09NUEFUCTE0DQogLyogVG8gYWRk
IDojZGVmaW5lIFNPX1JFVVNFUE9SVCAxNSAqLw0KIA0KKyNkZWZpbmUgU09f
QklORFRPREVWSUNFIDI1DQorDQogI2VuZGlmIC8qIF9BU01fU09DS0VUX0gg
Ki8NCmRpZmYgLXUgLXIgbGludXgvaW5jbHVkZS9saW51eC9yb3V0ZS5oIGxp
bnV4LW1vZGlmaWVkL2luY2x1ZGUvbGludXgvcm91dGUuaA0KLS0tIGxpbnV4
L2luY2x1ZGUvbGludXgvcm91dGUuaAlUdWUgT2N0ICA4IDA5OjQ4OjQwIDE5
OTYNCisrKyBsaW51eC1tb2RpZmllZC9pbmNsdWRlL2xpbnV4L3JvdXRlLmgJ
VGh1IEFwciAxNyAxNTo1NDoyNCAxOTk3DQpAQCAtNTIsNiArNTIsNyBAQA0K
ICNkZWZpbmUgUlRGX1dJTkRPVwkweDAwODAJCS8qIHBlciByb3V0ZSB3aW5k
b3cgY2xhbXBpbmcJICAqLw0KICNkZWZpbmUgUlRGX0lSVFQJMHgwMTAwCQkv
KiBJbml0aWFsIHJvdW5kIHRyaXAgdGltZQkgICovDQogI2RlZmluZSBSVEZf
UkVKRUNUCTB4MDIwMAkJLyogUmVqZWN0IHJvdXRlCQkJICAqLw0KKyNkZWZp
bmUgUlRGX05PVENBQ0hFRAkweDA0MDAJCS8qIHRoaXMgcm91dGUgaXNuJ3Qg
Y2FjaGVkICAgICAgICAqLw0KIA0KIC8qDQogICoJVGhpcyBzdHJ1Y3R1cmUg
aXMgcGFzc2VkIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyIHNwYWNlIGJ5IG5l
dGxpbmsNCmRpZmYgLXUgLXIgbGludXgvaW5jbHVkZS9uZXQvcm91dGUuaCBs
aW51eC1tb2RpZmllZC9pbmNsdWRlL25ldC9yb3V0ZS5oDQotLS0gbGludXgv
aW5jbHVkZS9uZXQvcm91dGUuaAlGcmkgTWFyIDI4IDE2OjEwOjU3IDE5OTcN
CisrKyBsaW51eC1tb2RpZmllZC9pbmNsdWRlL25ldC9yb3V0ZS5oCVR1ZSBB
cHIgMjIgMTQ6NDY6NDYgMTk5Nw0KQEAgLTEzLDYgKzEzLDcgQEANCiAgKgkJ
QWxhbiBDb3gJOglSZWZvcm1hdHRlZC4gQWRkZWQgaXBfcnRfbG9jYWwoKQ0K
ICAqCQlBbGFuIENveAk6CVN1cHBvcnQgZm9yIFRDUCBwYXJhbWV0ZXJzLg0K
ICAqCQlBbGV4ZXkgS3V6bmV0c292OglNYWpvciBjaGFuZ2VzIGZvciBuZXcg
cm91dGluZyBjb2RlLg0KKyAqICAgICAgICAgICAgICBFbGxpb3QgUG9nZXIg
ICAgOiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBTT19CSU5EVE9ERVZJQ0Uu
DQogICoNCiAgKglGSVhNRToNCiAgKgkJTWFrZSBhdG9taWMgb3BzIG1vcmUg
Z2VuZXJpYyBhbmQgaGlkZSB0aGVtIGluIGFzbS8uLi4NCkBAIC04Myw3ICs4
NCw3IEBADQogZXh0ZXJuIHZvaWQJCWlwX3J0X2ZsdXNoKHN0cnVjdCBkZXZp
Y2UgKmRldik7DQogZXh0ZXJuIHZvaWQJCWlwX3J0X3VwZGF0ZShpbnQgZXZl
bnQsIHN0cnVjdCBkZXZpY2UgKmRldik7DQogZXh0ZXJuIHZvaWQJCWlwX3J0
X3JlZGlyZWN0KF9fdTMyIHNyYywgX191MzIgZHN0LCBfX3UzMiBndywgc3Ry
dWN0IGRldmljZSAqZGV2KTsNCi1leHRlcm4gc3RydWN0IHJ0YWJsZQkqaXBf
cnRfc2xvd19yb3V0ZShfX3UzMiBkYWRkciwgaW50IGxvY2FsKTsNCitleHRl
cm4gc3RydWN0IHJ0YWJsZQkqaXBfcnRfc2xvd19yb3V0ZShfX3UzMiBkYWRk
ciwgaW50IGxvY2FsLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOw0KIGV4dGVybiBp
bnQJCXJ0X2dldF9pbmZvKGNoYXIgKiBidWZmZXIsIGNoYXIgKipzdGFydCwg
b2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBpbnQgZHVtbXkpOw0KIGV4dGVy
biBpbnQJCXJ0X2NhY2hlX2dldF9pbmZvKGNoYXIgKmJ1ZmZlciwgY2hhciAq
KnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCBkdW1teSk7
DQogZXh0ZXJuIGludAkJaXBfcnRfaW9jdGwodW5zaWduZWQgaW50IGNtZCwg
dm9pZCAqYXJnKTsNCkBAIC0xMzEsOSArMTMyLDkgQEANCiAjZW5kaWYNCiAN
CiAjaWZkZWYgQ09ORklHX0tFUk5FTEQNCi1leHRlcm4gc3RydWN0IHJ0YWJs
ZSAqIGlwX3J0X3JvdXRlKF9fdTMyIGRhZGRyLCBpbnQgbG9jYWwpOw0KK2V4
dGVybiBzdHJ1Y3QgcnRhYmxlICogaXBfcnRfcm91dGUoX191MzIgZGFkZHIs
IGludCBsb2NhbCwgc3RydWN0IGRldmljZSAqZGV2KTsNCiAjZWxzZQ0KLWV4
dGVybiBfX2lubGluZV9fIHN0cnVjdCBydGFibGUgKiBpcF9ydF9yb3V0ZShf
X3UzMiBkYWRkciwgaW50IGxvY2FsKQ0KK2V4dGVybiBfX2lubGluZV9fIHN0
cnVjdCBydGFibGUgKiBpcF9ydF9yb3V0ZShfX3UzMiBkYWRkciwgaW50IGxv
Y2FsLCBzdHJ1Y3QgZGV2aWNlICpkZXYpDQogI2lmbmRlZiBNT0RVTEUNCiB7
DQogCXN0cnVjdCBydGFibGUgKiBydGg7DQpAQCAtMTQyLDcgKzE0Myw4IEBA
DQogDQogCWZvciAocnRoPWlwX3J0X2hhc2hfdGFibGVbaXBfcnRfaGFzaF9j
b2RlKGRhZGRyKV5sb2NhbF07IHJ0aDsgcnRoPXJ0aC0+cnRfbmV4dCkNCiAJ
ew0KLQkJaWYgKHJ0aC0+cnRfZHN0ID09IGRhZGRyKQ0KKwkJLyogSWYgYW4g
aW50ZXJmYWNlIGlzIHNwZWNpZmllZCwgbWFrZSBzdXJlIHRoaXMgcm91dGUg
cG9pbnRzIHRvIGl0LiAqLw0KKwkJaWYgKCAocnRoLT5ydF9kc3QgPT0gZGFk
ZHIpICYmICgoZGV2PT1OVUxMKSB8fCAoZGV2PT1ydGgtPnJ0X2RldikpICkN
CiAJCXsNCiAJCQlydGgtPnJ0X2xhc3R1c2UgPSBqaWZmaWVzOw0KIAkJCWF0
b21pY19pbmMoJnJ0aC0+cnRfdXNlKTsNCkBAIC0xNTEsMjMgKzE1MywyMyBA
QA0KIAkJCXJldHVybiBydGg7DQogCQl9DQogCX0NCi0JcmV0dXJuIGlwX3J0
X3Nsb3dfcm91dGUgKGRhZGRyLCBsb2NhbCk7DQorCXJldHVybiBpcF9ydF9z
bG93X3JvdXRlIChkYWRkciwgbG9jYWwsIGRldik7DQogfQ0KICNlbHNlDQog
Ow0KICNlbmRpZg0KICNlbmRpZg0KIA0KLWV4dGVybiBfX2lubGluZV9fIHN0
cnVjdCBydGFibGUgKiBpcF9jaGVja19yb3V0ZShzdHJ1Y3QgcnRhYmxlICoq
IHJwLA0KLQkJCQkJCSAgICAgICBfX3UzMiBkYWRkciwgaW50IGxvY2FsKQ0K
K2V4dGVybiBfX2lubGluZV9fIHN0cnVjdCBydGFibGUgKiBpcF9jaGVja19y
b3V0ZShzdHJ1Y3QgcnRhYmxlICoqIHJwLCBfX3UzMiBkYWRkciwgDQorCQkJ
CQkJIGludCBsb2NhbCwgc3RydWN0IGRldmljZSAqZGV2KQ0KIHsNCiAJc3Ry
dWN0IHJ0YWJsZSAqIHJ0ID0gKnJwOw0KIA0KLQlpZiAoIXJ0IHx8IHJ0LT5y
dF9kc3QgIT0gZGFkZHIgfHwgIShydC0+cnRfZmxhZ3MmUlRGX1VQKQ0KKwlp
ZiAoIXJ0IHx8IHJ0LT5ydF9kc3QgIT0gZGFkZHIgfHwgIShydC0+cnRfZmxh
Z3MmUlRGX1VQKSB8fCAoZGV2IT1OVUxMKQ0KIAkgICAgfHwgKChsb2NhbD09
MSleKChydC0+cnRfZmxhZ3MmUlRGX0xPQ0FMKSAhPSAwKSkpDQogCXsNCiAJ
CWlwX3J0X3B1dChydCk7DQotCQlydCA9IGlwX3J0X3JvdXRlKGRhZGRyLCBs
b2NhbCk7DQorCQlydCA9IGlwX3J0X3JvdXRlKGRhZGRyLCBsb2NhbCwgZGV2
KTsNCiAJCSpycCA9IHJ0Ow0KIAl9DQogCXJldHVybiBydDsNCmRpZmYgLXUg
LXIgbGludXgvaW5jbHVkZS9uZXQvc29jay5oIGxpbnV4LW1vZGlmaWVkL2lu
Y2x1ZGUvbmV0L3NvY2suaA0KLS0tIGxpbnV4L2luY2x1ZGUvbmV0L3NvY2su
aAlUdWUgQXByICA4IDA4OjQ3OjQ3IDE5OTcNCisrKyBsaW51eC1tb2RpZmll
ZC9pbmNsdWRlL25ldC9zb2NrLmgJVHVlIEFwciAyMiAxNDo0MTo1NCAxOTk3
DQpAQCAtMjMsNiArMjMsNyBAQA0KICAqCVBhdWxpbmUgTWlkZGVsaW5rCToJ
aWRlbnRkIHN1cHBvcnQNCiAgKgkJQWxhbiBDb3gJOglFbGltaW5hdGUgbG93
IGxldmVsIHJlY3YvcmVjdmZyb20NCiAgKgkJRGF2aWQgUy4gTWlsbGVyCToJ
TmV3IHNvY2tldCBsb29rdXAgYXJjaGl0ZWN0dXJlIGZvciBJU1MuDQorICog
ICAgICAgICAgICAgIEVsbGlvdCBQb2dlciAgICA6ICAgICAgIE5ldyBmaWVs
ZCBmb3IgU09fQklORFRPREVWSUNFIG9wdGlvbi4NCiAgKg0KICAqCQlUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yDQogICoJCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQpAQCAtMTkyLDYg
KzE5Myw3IEBADQogCQkJCWJyb2FkY2FzdCwNCiAJCQkJbm9uYWdsZSwNCiAJ
CQkJYnNkaXNtOw0KKwlzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAqIGJvdW5k
X2RldmljZTsNCiAJdW5zaWduZWQgbG9uZwkgICAgICAgIGxpbmdlcnRpbWU7
DQogCWludAkJCXByb2M7DQogDQpkaWZmIC11IC1yIGxpbnV4L25ldC9jb3Jl
L3NvY2suYyBsaW51eC1tb2RpZmllZC9uZXQvY29yZS9zb2NrLmMNCi0tLSBs
aW51eC9uZXQvY29yZS9zb2NrLmMJVHVlIE9jdCAyOSAxNzo0Mjo0MiAxOTk2
DQorKysgbGludXgtbW9kaWZpZWQvbmV0L2NvcmUvc29jay5jCVRodSBBcHIg
MTcgMTU6NTQ6MjggMTk5Nw0KQEAgLTcxLDYgKzcxLDcgQEANCiAgKgkJQWxh
biBDb3gJOiAJR2VuZXJpYyBzb2NrZXQgYWxsb2NhdGlvbiB0byBtYWtlIGhv
b2tzDQogICoJCQkJCWVhc2llciAoc3VnZ2VzdGVkIGJ5IENyYWlnIE1ldHop
Lg0KICAqCQlNaWNoYWVsIFBhbGwJOglTT19FUlJPUiByZXR1cm5zIHBvc2l0
aXZlIGVycm5vIGFnYWluDQorICogICAgICAgICAgICAgIEVsbGlvdCBQb2dl
ciAgICA6ICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFNPX0JJTkRUT0RFVklD
RS4NCiAgKg0KICAqIFRvIEZpeDoNCiAgKg0KQEAgLTEyOCw2ICsxMjksNyBA
QA0KIAlpbnQgdmFsYm9vbDsNCiAJaW50IGVycjsNCiAJc3RydWN0IGxpbmdl
ciBsaW5nOw0KKwlzdHJ1Y3QgaWZyZXEgcmVxOw0KIA0KIAkvKg0KIAkgKglP
cHRpb25zIHdpdGhvdXQgYXJndW1lbnRzDQpAQCAtMjMzLDYgKzIzNSwzNCBA
QA0KIAkJCXNrLT5ic2Rpc20gPSB2YWxib29sOw0KIAkJCXJldHVybiAwOw0K
IAkJCQ0KKyAJICAgICAgICBjYXNlIFNPX0JJTkRUT0RFVklDRToNCisgCQkJ
LyogQmluZCB0aGlzIHNvY2tldCB0byBhIHBhcnRpY3VsYXIgZGV2aWNlIGxp
a2UgImV0aDAiLA0KKyAJCQkgKiBhcyBzcGVjaWZpZWQgaW4gYW4gaWZyZXEg
c3RydWN0dXJlLiAgSWYgdGhlIGRldmljZSANCisgCQkJICogaXMgIiIsIHNv
Y2tldCBpcyBOT1QgYm91bmQgdG8gYSBkZXZpY2UuICovDQorIAkJCWlmICgh
dmFsYm9vbCkgew0KKyAJCQkJc2stPmJvdW5kX2RldmljZSA9IE5VTEw7DQor
IAkJCX0gZWxzZSB7DQorIAkJCQllcnI9dmVyaWZ5X2FyZWEoVkVSSUZZX1JF
QUQsb3B0dmFsLHNpemVvZihyZXEpKTsNCisgCQkJCWlmKGVycikNCisgCQkJ
CQlyZXR1cm4gZXJyOw0KKyAJCQkJbWVtY3B5X2Zyb21mcygmcmVxLG9wdHZh
bCxzaXplb2YocmVxKSk7DQorDQorCQkJCS8qIFJlbW92ZSBhbnkgY2FjaGVk
IHJvdXRlIGZvciB0aGlzIHNvY2tldC4gKi8NCisJCQkJaWYgKHNrLT5pcF9y
b3V0ZV9jYWNoZSkgew0KKwkJCQkJaXBfcnRfcHV0KHNrLT5pcF9yb3V0ZV9j
YWNoZSk7DQorCQkJCQlzay0+aXBfcm91dGVfY2FjaGU9TlVMTDsNCisJCQkJ
fQ0KKw0KKyAJCQkJaWYgKCoocmVxLmlmcl9uYW1lKSA9PSAnXDAnKSB7DQor
IAkJCQkJc2stPmJvdW5kX2RldmljZSA9IE5VTEw7DQorIAkJCQl9IGVsc2Ug
ew0KKyAJCQkJCXNrLT5ib3VuZF9kZXZpY2UgPSBkZXZfZ2V0KHJlcS5pZnJf
bmFtZSk7DQorIAkJCQkJaWYgKHNrLT5ib3VuZF9kZXZpY2UgPT0gTlVMTCkN
CisgCQkJCQkJcmV0dXJuIC1FSU5WQUw7DQorIAkJCQl9DQorIAkJCX0NCisg
IAkJCXJldHVybiAwOw0KKw0KIAkJZGVmYXVsdDoNCiAJCSAgCXJldHVybigt
RU5PUFJPVE9PUFQpOw0KICAgCX0NCmRpZmYgLXUgLXIgbGludXgvbmV0L2lw
djQvYXJwLmMgbGludXgtbW9kaWZpZWQvbmV0L2lwdjQvYXJwLmMNCi0tLSBs
aW51eC9uZXQvaXB2NC9hcnAuYwlUdWUgQXByICA4IDA4OjQ3OjQ3IDE5OTcN
CisrKyBsaW51eC1tb2RpZmllZC9uZXQvaXB2NC9hcnAuYwlUaHUgQXByIDE3
IDA5OjUwOjMzIDE5OTcNCkBAIC0xOTc1LDcgKzE5NzUsNyBAQA0KIAkJCQlt
ZW1jcHkoaGEsIHByb3h5X2VudHJ5LT5oYSwgZGV2LT5hZGRyX2xlbik7DQog
CQkJCWFycF91bmxvY2soKTsNCiANCi0JCQkJcnQgPSBpcF9ydF9yb3V0ZSh0
aXAsIDApOw0KKwkJCQlydCA9IGlwX3J0X3JvdXRlKHRpcCwgMCwgTlVMTCk7
DQogCQkJCWlmIChydCAgJiYgcnQtPnJ0X2RldiAhPSBkZXYpDQogCQkJCQlh
cnBfc2VuZChBUlBPUF9SRVBMWSxFVEhfUF9BUlAsc2lwLGRldix0aXAsc2hh
LGhhLHNoYSk7DQogCQkJCWlwX3J0X3B1dChydCk7DQpAQCAtMjA0OCw3ICsy
MDQ4LDcgQEANCiAJCWlmICghZGV2KQ0KIAkJew0KIAkJCXN0cnVjdCBydGFi
bGUgKiBydDsNCi0JCQlydCA9IGlwX3J0X3JvdXRlKGlwLCAwKTsNCisJCQly
dCA9IGlwX3J0X3JvdXRlKGlwLCAwLCBOVUxMKTsNCiAJCQlpZiAoIXJ0KQ0K
IAkJCQlyZXR1cm4gLUVORVRVTlJFQUNIOw0KIAkJCWRldiA9IHJ0LT5ydF9k
ZXY7DQpkaWZmIC11IC1yIGxpbnV4L25ldC9pcHY0L2ljbXAuYyBsaW51eC1t
b2RpZmllZC9uZXQvaXB2NC9pY21wLmMNCi0tLSBsaW51eC9uZXQvaXB2NC9p
Y21wLmMJVHVlIEFwciAgOCAwODo0Nzo0NyAxOTk3DQorKysgbGludXgtbW9k
aWZpZWQvbmV0L2lwdjQvaWNtcC5jCVdlZCBBcHIgMTYgMTM6MTI6MDkgMTk5
Nw0KQEAgLTM5LDYgKzM5LDcgQEANCiAgKgkJVGhvbWFzIFF1aW5vdAk6CUlD
TVAgRGVzdCBVbnJlYWNoIGNvZGVzIHVwIHRvIDE1IGFyZQ0KICAqCQkJCQl2
YWxpZCAoUkZDIDE4MTIpLg0KICAqCQlBbGFuIENveAk6CVNwb29maW5nIGFu
ZCBqdW5rIGljbXAgcHJvdGVjdGlvbnMuDQorICogICAgICAgICAgICAgIEVs
bGlvdCBQb2dlciAgICA6ICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFNPX0JJ
TkRUT0RFVklDRS4NCiAgKg0KICAqDQogICogUkZDMTEyMiAoSG9zdCBSZXF1
aXJlbWVudHMgLS0gQ29tbS4gTGF5ZXIpIFN0YXR1czoNCkBAIC05OTIsOCAr
OTkzLDggQEANCiAgKi8NCiANCiAvKiBUaGlzIHNob3VsZCB3b3JrIHdpdGgg
dGhlIG5ldyBoYXNoZXMgbm93LiAtRGF2ZU0gKi8NCi1leHRlcm4gc3RydWN0
IHNvY2sgKnRjcF92NF9sb29rdXAodTMyIHNhZGRyLCB1MTYgc3BvcnQsIHUz
MiBkYWRkciwgdTE2IGRwb3J0KTsNCi1leHRlcm4gc3RydWN0IHNvY2sgKnVk
cF92NF9sb29rdXAodTMyIHNhZGRyLCB1MTYgc3BvcnQsIHUzMiBkYWRkciwg
dTE2IGRwb3J0KTsNCitleHRlcm4gc3RydWN0IHNvY2sgKnRjcF92NF9sb29r
dXAodTMyIHNhZGRyLCB1MTYgc3BvcnQsIHUzMiBkYWRkciwgdTE2IGRwb3J0
LCBzdHJ1Y3QgZGV2aWNlICpkZXYpOw0KK2V4dGVybiBzdHJ1Y3Qgc29jayAq
dWRwX3Y0X2xvb2t1cCh1MzIgc2FkZHIsIHUxNiBzcG9ydCwgdTMyIGRhZGRy
LCB1MTYgZHBvcnQsIHN0cnVjdCBkZXZpY2UgKmRldik7DQogDQogaW50IGlj
bXBfY2hrYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KIHsNCkBAIC0xMDA5
LDcgKzEwMTAsOCBAQA0KIAkJCXsNCiAJCQlzdHJ1Y3QgdGNwaGRyICp0aCA9
IChzdHJ1Y3QgdGNwaGRyICopKCgodW5zaWduZWQgY2hhciAqKWlwaCkrKGlw
aC0+aWhsPDwyKSk7DQogDQotCQkJc2sgPSB0Y3BfdjRfbG9va3VwKGlwaC0+
c2FkZHIsIHRoLT5zb3VyY2UsIGlwaC0+ZGFkZHIsIHRoLT5kZXN0KTsNCisJ
CQlzayA9IHRjcF92NF9sb29rdXAoaXBoLT5zYWRkciwgdGgtPnNvdXJjZSwg
aXBoLT5kYWRkciwgdGgtPmRlc3QsDQorCQkJCQkgICBza2ItPmRldik7DQog
CQkJaWYgKCFzaykgcmV0dXJuIDA7DQogCQkJaWYgKHNrLT5zYWRkciAhPSBp
cGgtPnNhZGRyKSByZXR1cm4gMDsNCiAJCQlpZiAoc2stPmRhZGRyICE9IGlw
aC0+ZGFkZHIpIHJldHVybiAwOw0KQEAgLTEwMjMsNyArMTAyNSw4IEBADQog
CQkJew0KIAkJCXN0cnVjdCB1ZHBoZHIgKnVoID0gKHN0cnVjdCB1ZHBoZHIg
KikoKCh1bnNpZ25lZCBjaGFyICopaXBoKSsoaXBoLT5paGw8PDIpKTsNCiAN
Ci0JCQlzayA9IHVkcF92NF9sb29rdXAoaXBoLT5zYWRkciwgdWgtPnNvdXJj
ZSwgaXBoLT5kYWRkciwgdWgtPmRlc3QpOw0KKwkJCXNrID0gdWRwX3Y0X2xv
b2t1cChpcGgtPnNhZGRyLCB1aC0+c291cmNlLCBpcGgtPmRhZGRyLCB1aC0+
ZGVzdCwNCisJCQkJCSAgIHNrYi0+ZGV2KTsNCiAJCQlpZiAoIXNrKSByZXR1
cm4gMDsNCiAJCQlpZiAoc2stPnNhZGRyICE9IGlwaC0+c2FkZHIgJiYgaXBf
Y2hrX2FkZHIoaXBoLT5zYWRkcikgIT0gSVNfTVlBRERSKQ0KIAkJCQlyZXR1
cm4gMDsNCmRpZmYgLXUgLXIgbGludXgvbmV0L2lwdjQvaXBfYWxpYXMuYyBs
aW51eC1tb2RpZmllZC9uZXQvaXB2NC9pcF9hbGlhcy5jDQotLS0gbGludXgv
bmV0L2lwdjQvaXBfYWxpYXMuYwlNb24gTWF5IDEzIDAyOjE1OjI0IDE5OTYN
CisrKyBsaW51eC1tb2RpZmllZC9uZXQvaXB2NC9pcF9hbGlhcy5jCVRodSBB
cHIgMTcgMDk6NTE6MDQgMTk5Nw0KQEAgLTEwMiw3ICsxMDIsNyBAQA0KIAkg
KgluZXRfYWxpYXMgbW9kdWxlIHdpbGwgY2hlY2sgaWYgcmV0dXJuZWQgZGV2
aWNlIGlzIG1haW5fZGV2J3MgYWxpYXMNCiAJICovDQogDQotCXJ0ID0gaXBf
cnRfcm91dGUoYWRkciwgMCk7DQorCXJ0ID0gaXBfcnRfcm91dGUoYWRkciwg
MCwgTlVMTCk7DQogCWlmKHJ0KQ0KIAl7DQogCQlkZXY9cnQtPnJ0X2RldjsN
CmRpZmYgLXUgLXIgbGludXgvbmV0L2lwdjQvaXBfZm9yd2FyZC5jIGxpbnV4
LW1vZGlmaWVkL25ldC9pcHY0L2lwX2ZvcndhcmQuYw0KLS0tIGxpbnV4L25l
dC9pcHY0L2lwX2ZvcndhcmQuYwlUdWUgQXByICA4IDA4OjQ3OjQ3IDE5OTcN
CisrKyBsaW51eC1tb2RpZmllZC9uZXQvaXB2NC9pcF9mb3J3YXJkLmMJVGh1
IEFwciAxNyAwOTo1MjoyOCAxOTk3DQpAQCAtMTc3LDcgKzE3Nyw3IEBADQog
CQkgKiBhbmQgZ2l2ZSBpdCB0byB0aGUgSVAgc2VuZGVyIGZvciBmdXJ0aGVy
IHByb2Nlc3NpbmcuDQogCQkgKi8NCiANCi0JCXJ0ID0gaXBfcnRfcm91dGUo
dGFyZ2V0X2FkZHIsIDApOw0KKwkJcnQgPSBpcF9ydF9yb3V0ZSh0YXJnZXRf
YWRkciwgMCwgTlVMTCk7DQogDQogCQlpZiAocnQgPT0gTlVMTCkNCiAJCXsN
CmRpZmYgLXUgLXIgbGludXgvbmV0L2lwdjQvaXBfb3V0cHV0LmMgbGludXgt
bW9kaWZpZWQvbmV0L2lwdjQvaXBfb3V0cHV0LmMNCi0tLSBsaW51eC9uZXQv
aXB2NC9pcF9vdXRwdXQuYwlUdWUgT2N0IDI5IDE3OjQyOjQyIDE5OTYNCisr
KyBsaW51eC1tb2RpZmllZC9uZXQvaXB2NC9pcF9vdXRwdXQuYwlGcmkgQXBy
IDE4IDE1OjQzOjU5IDE5OTcNCkBAIC0yNiw2ICsyNiw3IEBADQogICoJCUFs
ZXhhbmRlciBEZW1lbnNoaW46CU1pc3Npbmcgc2svc2tiIGZyZWUgaW4gaXBf
cXVldWVfeG1pdA0KICAqCQkJCQkoaW4gY2FzZSBpZiBwYWNrZXQgbm90IGFj
Y2VwdGVkIGJ5DQogICoJCQkJCW91dHB1dCBmaXJld2FsbCBydWxlcykNCisg
KiAgICAgICAgICAgICAgRWxsaW90IFBvZ2VyICAgIDogICAgICAgQWRkZWQg
c3VwcG9ydCBmb3IgU09fQklORFRPREVWSUNFLg0KICAqLw0KIA0KICNpbmNs
dWRlIDxhc20vc2VnbWVudC5oPg0KQEAgLTIxOCw3ICsyMTksNyBAQA0KICNl
bmRpZg0KIAlpZiAocnApDQogCXsNCi0JCXJ0ID0gaXBfY2hlY2tfcm91dGUo
cnAsIGRhZGRyLCBza2ItPmxvY2Fscm91dGUpOw0KKwkJcnQgPSBpcF9jaGVj
a19yb3V0ZShycCwgZGFkZHIsIHNrYi0+bG9jYWxyb3V0ZSwgKmRldik7DQog
CQkvKg0KIAkJICogSWYgcnAgIT0gTlVMTCBydF9wdXQgZm9sbG93aW5nIGJl
bG93IHNob3VsZCBub3QNCiAJCSAqIHJlbGVhc2Ugcm91dGUsIHNvIHRoYXQu
Li4NCkBAIC0yMjcsNyArMjI4LDcgQEANCiAJCQlhdG9taWNfaW5jKCZydC0+
cnRfcmVmY250KTsNCiAJfQ0KIAllbHNlDQotCQlydCA9IGlwX3J0X3JvdXRl
KGRhZGRyLCBza2ItPmxvY2Fscm91dGUpOw0KKwkJcnQgPSBpcF9ydF9yb3V0
ZShkYWRkciwgc2tiLT5sb2NhbHJvdXRlLCAqZGV2KTsNCiANCiANCiAJaWYg
KCpkZXYgPT0gTlVMTCkNCkBAIC01OTAsNyArNTkxLDcgQEANCiAjZW5kaWYJ
DQogCQlydCA9IGlwX2NoZWNrX3JvdXRlKCZzay0+aXBfcm91dGVfY2FjaGUs
IGRhZGRyLA0KIAkJCQkgICAgc2stPmxvY2Fscm91dGUgfHwgKGZsYWdzJk1T
R19ET05UUk9VVEUpIHx8DQotCQkJCSAgICAob3B0ICYmIG9wdC0+aXNfc3Ry
aWN0cm91dGUpKTsNCisJCQkJICAgIChvcHQgJiYgb3B0LT5pc19zdHJpY3Ry
b3V0ZSksIHNrLT5ib3VuZF9kZXZpY2UpOw0KIAkJaWYgKHJ0ID09IE5VTEwp
IA0KIAkJew0KIAkJCWlwX3N0YXRpc3RpY3MuSXBPdXROb1JvdXRlcysrOw0K
ZGlmZiAtdSAtciBsaW51eC9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGxpbnV4
LW1vZGlmaWVkL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMNCi0tLSBsaW51eC9u
ZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCVR1ZSBBcHIgIDggMDg6NDc6NDcgMTk5
Nw0KKysrIGxpbnV4LW1vZGlmaWVkL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMJ
RnJpIEFwciAxOCAxNTo0NDo0MSAxOTk3DQpAQCAtMTIsNiArMTIsNyBAQA0K
ICAqCQlNYXJ0aW4gTWFyZXMJOglUT1Mgc2V0dGluZyBmaXhlZC4NCiAgKgkJ
QWxhbiBDb3gJOglGaXhlZCBhIGNvdXBsZSBvZiBvb3BzZXMgaW4gTWFydGlu
J3MgDQogICoJCQkJCVRPUyB0d2Vha3MuDQorICogICAgICAgICAgICAgIEVs
bGlvdCBQb2dlciAgICA6ICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFNPX0JJ
TkRUT0RFVklDRS4NCiAgKi8NCiANCiAjaW5jbHVkZSA8bGludXgvY29uZmln
Lmg+DQpAQCAtMjkzLDcgKzI5NCw3IEBADQogCQkJCS8qDQogCQkJCSAqCU5v
dCBzZXQgc28gc2Nhbi4NCiAJCQkJICovDQotCQkJCWlmKChydD1pcF9ydF9y
b3V0ZShtcmVxLmltcl9tdWx0aWFkZHIuc19hZGRyLDApKSE9TlVMTCkNCisJ
CQkJaWYoKHJ0PWlwX3J0X3JvdXRlKG1yZXEuaW1yX211bHRpYWRkci5zX2Fk
ZHIsMCxzay0+Ym91bmRfZGV2aWNlKSkhPU5VTEwpDQogCQkJCXsNCiAJCQkJ
CWRldj1ydC0+cnRfZGV2Ow0KIAkJCQkJYXRvbWljX2RlYygmcnQtPnJ0X3Vz
ZSk7DQpAQCAtMzQ1LDcgKzM0Niw3IEBADQogIA0KIAkJCWlmKG1yZXEuaW1y
X2ludGVyZmFjZS5zX2FkZHI9PUlOQUREUl9BTlkpIA0KIAkJCXsNCi0JCQkJ
aWYoKHJ0PWlwX3J0X3JvdXRlKG1yZXEuaW1yX211bHRpYWRkci5zX2FkZHIs
MCkpIT1OVUxMKQ0KKwkJCQlpZigocnQ9aXBfcnRfcm91dGUobXJlcS5pbXJf
bXVsdGlhZGRyLnNfYWRkciwwLHNrLT5ib3VuZF9kZXZpY2UpKSE9TlVMTCkN
CiAJCQkgICAgICAgIHsNCiAJCQkJCWRldj1ydC0+cnRfZGV2Ow0KIAkJCQkJ
YXRvbWljX2RlYygmcnQtPnJ0X3VzZSk7DQpkaWZmIC11IC1yIGxpbnV4L25l
dC9pcHY0L3JhcnAuYyBsaW51eC1tb2RpZmllZC9uZXQvaXB2NC9yYXJwLmMN
Ci0tLSBsaW51eC9uZXQvaXB2NC9yYXJwLmMJVHVlIE9jdCAyOSAxNzo0Mjo0
MiAxOTk2DQorKysgbGludXgtbW9kaWZpZWQvbmV0L2lwdjQvcmFycC5jCVRo
dSBBcHIgMTcgMDk6NTc6MTggMTk5Nw0KQEAgLTM1NCw3ICszNTQsNyBAQA0K
ICAqCUlzIGl0IHJlYWNoYWJsZSBkaXJlY3RseSA/DQogICovDQogICANCi0J
cnQgPSBpcF9ydF9yb3V0ZShpcCwgMCk7DQorCXJ0ID0gaXBfcnRfcm91dGUo
aXAsIDAsIE5VTEwpOw0KIAlpZiAocnQgPT0gTlVMTCkNCiAJCXJldHVybiAt
RU5FVFVOUkVBQ0g7DQogCWRldiA9IHJ0LT5ydF9kZXY7DQpkaWZmIC11IC1y
IGxpbnV4L25ldC9pcHY0L3JvdXRlLmMgbGludXgtbW9kaWZpZWQvbmV0L2lw
djQvcm91dGUuYw0KLS0tIGxpbnV4L25ldC9pcHY0L3JvdXRlLmMJVHVlIEFw
ciAgOCAwODo0Nzo0NyAxOTk3DQorKysgbGludXgtbW9kaWZpZWQvbmV0L2lw
djQvcm91dGUuYwlGcmkgQXByIDE4IDE1OjQ1OjAyIDE5OTcNCkBAIC00Miw2
ICs0Miw3IEBADQogICoJCUJqb3JuIEVrd2FsbAk6CUtlcm5lbGQgcm91dGUg
c3VwcG9ydC4NCiAgKgkJQWxhbiBDb3gJOglNdWx0aWNhc3QgZml4ZWQgKEkg
aG9wZSkNCiAgKiAJCVBhdmVsIEtyYXV6CToJTGltaXRlZCBicm9hZGNhc3Qg
Zml4ZWQNCisgKiAgICAgICAgICAgICAgRWxsaW90IFBvZ2VyICAgIDogICAg
ICAgQWRkZWQgc3VwcG9ydCBmb3IgU09fQklORFRPREVWSUNFLg0KICAqDQog
ICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAgKgkJbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCkBA
IC0yNDcsOSArMjQ4LDExIEBADQogICoJICBIb3N0IDE5My4yMzMuNy4xMjkg
aXMgbG9jYWxseSB1bnJlYWNoYWJsZSwNCiAgKgkgIGJ1dCBvbGQgKDw9MS4z
LjM3KSBjb2RlIHdpbGwgc2VuZCBwYWNrZXRzIGRlc3RpbmVkIGZvciBpdCB0
byBldGgxLg0KICAqDQorICogQ2FsbGluZyByb3V0aW5lIGNhbiBzcGVjaWZ5
IGEgcGFydGljdWxhciBpbnRlcmZhY2UgYnkgc2V0dGluZyBkZXYuICBJZiBk
ZXY9PU5VTEwsDQorICogYW55IGludGVyZmFjZSB3aWxsIGRvLg0KICAqLw0K
IA0KLXN0YXRpYyBzdHJ1Y3QgZmliX25vZGUgKiBmaWJfbG9va3VwX2xvY2Fs
KF9fdTMyIGRzdCkNCitzdGF0aWMgc3RydWN0IGZpYl9ub2RlICogZmliX2xv
b2t1cF9sb2NhbChfX3UzMiBkc3QsIHN0cnVjdCBkZXZpY2UgKmRldikNCiB7
DQogCXN0cnVjdCBmaWJfem9uZSAqIGZ6Ow0KIAlzdHJ1Y3QgZmliX25vZGUg
KiBmOw0KQEAgLTI2Nyw2ICsyNzAsOCBAQA0KIAkJew0KIAkJCWlmICgoZHN0
IF4gZi0+ZmliX2RzdCkgJiBmei0+ZnpfbWFzaykNCiAJCQkJY29udGludWU7
DQorCQkJaWYgKCAoZGV2ICE9IE5VTEwpICYmIChkZXYgIT0gZi0+ZmliX2lu
Zm8tPmZpYl9kZXYpICkNCisJCQkJY29udGludWU7DQogCQkJaWYgKCEoZi0+
ZmliX2luZm8tPmZpYl9mbGFncyAmIFJURl9HQVRFV0FZKSkNCiAJCQkJcmV0
dXJuIGY7DQogCQkJbG9uZ2VzdF9tYXRjaF9mb3VuZCA9IDE7DQpAQCAtMjg5
LDcgKzI5NCw3IEBADQogICoJCXJvdXRlIGFkZCAtaG9zdCAxOTMuMjMzLjcu
MjU1IGV0aDANCiAgKi8NCiANCi1zdGF0aWMgc3RydWN0IGZpYl9ub2RlICog
ZmliX2xvb2t1cChfX3UzMiBkc3QpDQorc3RhdGljIHN0cnVjdCBmaWJfbm9k
ZSAqIGZpYl9sb29rdXAoX191MzIgZHN0LCBzdHJ1Y3QgZGV2aWNlICpkZXYp
DQogew0KIAlzdHJ1Y3QgZmliX3pvbmUgKiBmejsNCiAJc3RydWN0IGZpYl9u
b2RlICogZjsNCkBAIC0zMDUsNiArMzEwLDggQEANCiAJCXsNCiAJCQlpZiAo
KGRzdCBeIGYtPmZpYl9kc3QpICYgZnotPmZ6X21hc2spDQogCQkJCWNvbnRp
bnVlOw0KKwkJCWlmICggKGRldiAhPSBOVUxMKSAmJiAoZGV2ICE9IGYtPmZp
Yl9pbmZvLT5maWJfZGV2KSApDQorCQkJCWNvbnRpbnVlOw0KIAkJCXJldHVy
biBmOw0KIAkJfQ0KIAl9DQpAQCAtMTI1NCw3ICsxMjYxLDcgQEANCiAJc3Ry
dWN0IHJ0X3JlcSAqIHJ0cjsNCiAJc3RydWN0IHJ0YWJsZSAqIHJ0Ow0KIA0K
LQlydCA9IGlwX3J0X3JvdXRlKGRzdCwgMCk7DQorCXJ0ID0gaXBfcnRfcm91
dGUoZHN0LCAwLCBOVUxMKTsNCiAJaWYgKCFydCkNCiAJCXJldHVybjsNCiAN
CkBAIC0xMzIzLDcgKzEzMzAsNyBAQA0KIAkJaWYgKHJ0aC0+cnRfZ2F0ZXdh
eSAhPSBkYWRkcikNCiAJCXsNCiAJCQlpcF9ydF9mYXN0X3VubG9jaygpOw0K
LQkJCXJ0ZyA9IGlwX3J0X3JvdXRlKHJ0aC0+cnRfZ2F0ZXdheSwgMCk7DQor
CQkJcnRnID0gaXBfcnRfcm91dGUocnRoLT5ydF9nYXRld2F5LCAwLCBOVUxM
KTsNCiAJCQlpcF9ydF9mYXN0X2xvY2soKTsNCiAJCX0NCiANCkBAIC0xMzk1
LDcgKzE0MDIsNyBAQA0KICAgIA0KICAqLw0KIA0KLXN0cnVjdCBydGFibGUg
KiBpcF9ydF9zbG93X3JvdXRlIChfX3UzMiBkYWRkciwgaW50IGxvY2FsKQ0K
K3N0cnVjdCBydGFibGUgKiBpcF9ydF9zbG93X3JvdXRlIChfX3UzMiBkYWRk
ciwgaW50IGxvY2FsLCBzdHJ1Y3QgZGV2aWNlICpkZXYpDQogew0KIAl1bnNp
Z25lZCBoYXNoID0gaXBfcnRfaGFzaF9jb2RlKGRhZGRyKV5sb2NhbDsNCiAJ
c3RydWN0IHJ0YWJsZSAqIHJ0aDsNCkBAIC0xNDE1LDkgKzE0MjIsOSBAQA0K
IAl9DQogDQogCWlmIChsb2NhbCkNCi0JCWYgPSBmaWJfbG9va3VwX2xvY2Fs
KGRhZGRyKTsNCisJCWYgPSBmaWJfbG9va3VwX2xvY2FsKGRhZGRyLCBkZXYp
Ow0KIAllbHNlDQotCQlmID0gZmliX2xvb2t1cCAoZGFkZHIpOw0KKwkJZiA9
IGZpYl9sb29rdXAgKGRhZGRyLCBkZXYpOw0KIA0KIAlpZiAoZikNCiAJew0K
QEAgLTE0OTAsNyArMTQ5NywxNSBAQA0KIAkJcnRoLT5ydF9nYXRld2F5ID0g
cnRoLT5ydF9kc3Q7DQogDQogCWlmIChpcF9ydF9sb2NrID09IDEpDQotCQly
dF9jYWNoZV9hZGQoaGFzaCwgcnRoKTsNCisJew0KKwkJLyogRG9uJ3QgYWRk
IHRoaXMgdG8gdGhlIHJ0X2NhY2hlIGlmIGEgZGV2aWNlIHdhcyBzcGVjaWZp
ZWQsDQorCQkgKiBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgc2tpcHBlZCBiZXR0
ZXIgcm91dGVzIHdoaWNoIGRpZG4ndA0KKwkJICogcG9pbnQgYXQgdGhlIHJp
Z2h0IGRldmljZS4gKi8NCisJCWlmIChkZXYgIT0gTlVMTCkNCisJCQlydGgt
PnJ0X2ZsYWdzIHw9IFJURl9OT1RDQUNIRUQ7DQorCQllbHNlDQorCQkJcnRf
Y2FjaGVfYWRkKGhhc2gsIHJ0aCk7DQorCX0NCiAJZWxzZQ0KIAl7DQogCQly
dF9mcmVlKHJ0aCk7DQpAQCAtMTUwNyw5ICsxNTIyLDE0IEBADQogew0KIAlp
ZiAocnQpDQogCQlhdG9taWNfZGVjKCZydC0+cnRfcmVmY250KTsNCisJDQor
CS8qIElmIHRoaXMgcnRhYmxlIGVudHJ5IGlzIG5vdCBpbiB0aGUgY2FjaGUs
IHdlJ2QgYmV0dGVyIGZyZWUgaXQgb25jZSB0aGUNCisJICogcmVmY250IGdv
ZXMgdG8gemVybywgYmVjYXVzZSBub2JvZHkgZWxzZSB3aWxsLi4uICovDQor
CWlmICggcnQgJiYgKHJ0LT5ydF9mbGFncyAmIFJURl9OT1RDQUNIRUQpICYm
ICghcnQtPnJ0X3JlZmNudCkgKQ0KKwkJcnRfZnJlZShydCk7DQogfQ0KIA0K
LXN0cnVjdCBydGFibGUgKiBpcF9ydF9yb3V0ZShfX3UzMiBkYWRkciwgaW50
IGxvY2FsKQ0KK3N0cnVjdCBydGFibGUgKiBpcF9ydF9yb3V0ZShfX3UzMiBk
YWRkciwgaW50IGxvY2FsLCBzdHJ1Y3QgZGV2aWNlICpkZXYpDQogew0KIAlz
dHJ1Y3QgcnRhYmxlICogcnRoOw0KIA0KQEAgLTE1MTcsNyArMTUzNyw4IEBA
DQogDQogCWZvciAocnRoPWlwX3J0X2hhc2hfdGFibGVbaXBfcnRfaGFzaF9j
b2RlKGRhZGRyKV5sb2NhbF07IHJ0aDsgcnRoPXJ0aC0+cnRfbmV4dCkNCiAJ
ew0KLQkJaWYgKHJ0aC0+cnRfZHN0ID09IGRhZGRyKQ0KKwkJLyogSWYgYSBu
ZXR3b3JrIGRldmljZSBpcyBzcGVjaWZpZWQsIG1ha2Ugc3VyZSB0aGlzIHJv
dXRlIHBvaW50cyB0byBpdC4gKi8NCisJCWlmICggKHJ0aC0+cnRfZHN0ID09
IGRhZGRyKSAmJiAoKGRldj09TlVMTCkgfHwgKGRldj09cnRoLT5ydF9kZXYp
KSApDQogCQl7DQogCQkJcnRoLT5ydF9sYXN0dXNlID0gamlmZmllczsNCiAJ
CQlhdG9taWNfaW5jKCZydGgtPnJ0X3VzZSk7DQpAQCAtMTUyNiw3ICsxNTQ3
LDcgQEANCiAJCQlyZXR1cm4gcnRoOw0KIAkJfQ0KIAl9DQotCXJldHVybiBp
cF9ydF9zbG93X3JvdXRlIChkYWRkciwgbG9jYWwpOw0KKwlyZXR1cm4gaXBf
cnRfc2xvd19yb3V0ZSAoZGFkZHIsIGxvY2FsLCBkZXYpOw0KIH0NCiANCiAv
Kg0KZGlmZiAtdSAtciBsaW51eC9uZXQvaXB2NC90Y3AuYyBsaW51eC1tb2Rp
ZmllZC9uZXQvaXB2NC90Y3AuYw0KLS0tIGxpbnV4L25ldC9pcHY0L3RjcC5j
CVR1ZSBBcHIgIDggMDg6NDc6NDcgMTk5Nw0KKysrIGxpbnV4LW1vZGlmaWVk
L25ldC9pcHY0L3RjcC5jCUZyaSBBcHIgMTggMTU6NDU6NDIgMTk5Nw0KQEAg
LTIwNSw2ICsyMDUsNyBAQA0KICAqCQlUaGVvZG9yZSBUcydvCToJRG8gc2Vj
dXJlIFRDUCBzZXF1ZW5jZSBudW1iZXJzLg0KICAqCQlEYXZpZCBTLiBNaWxs
ZXIJOglOZXcgc29ja2V0IGxvb2t1cCBhcmNoaXRlY3R1cmUgZm9yIElTUy4N
CiAgKgkJCQkJVGhpcyBjb2RlIGlzIGRlZGljYXRlZCB0byBKb2huIER5c29u
Lg0KKyAqICAgICAgICAgICAgICBFbGxpb3QgUG9nZXIgICAgOiAgICAgICBB
ZGRlZCBzdXBwb3J0IGZvciBTT19CSU5EVE9ERVZJQ0UuDQogICoJCQkJCQ0K
ICAqIFRvIEZpeDoNCiAgKgkJRmFzdCBwYXRoIHRoZSBjb2RlLiBUd28gdGhp
bmdzIGhlcmUgLSBmaXggdGhlIHdpbmRvdyBjYWxjdWxhdGlvbg0KQEAgLTQ3
MSw2ICs0NzIsMTIgQEANCiAJCQl1bnNpZ25lZCBjaGFyIHN0YXRlID0gc2sy
LT5zdGF0ZTsNCiAJCQlpbnQgc2syX3JldXNlID0gc2syLT5yZXVzZTsNCiAN
CisJCQkvKiBUd28gc29ja2V0cyBjYW4gYmUgYm91bmQgdG8gdGhlIHNhbWUg
cG9ydCBpZiB0aGV5J3JlDQorCQkJICogYm91bmQgdG8gZGlmZmVyZW50IGlu
dGVyZmFjZXMuLi4gKi8NCisJCQlpZiAoc2stPmJvdW5kX2RldmljZSAhPSBz
azItPmJvdW5kX2RldmljZSkgew0KKwkJCQljb250aW51ZTsNCisJCQl9DQor
DQogCQkJaWYoIXNrMi0+cmN2X3NhZGRyIHx8ICFzay0+cmN2X3NhZGRyKSB7
DQogCQkJCWlmKCghc2syX3JldXNlKQkJCXx8DQogCQkJCSAgICghc2tfcmV1
c2UpCQkJfHwNCkBAIC0yMTk3LDYgKzIyMDQsOSBAQA0KIAlidWZmLT5zayA9
IHNrOw0KIAlidWZmLT5mcmVlID0gMDsNCiAJYnVmZi0+bG9jYWxyb3V0ZSA9
IHNrLT5sb2NhbHJvdXRlOw0KKw0KKwkvKiBJZiB0aGlzIHNvY2tldCBpcyBi
b3VuZCB0byBhIHBhcnRpY3VsYXIgZGV2aWNlLCBtYWtlIHN1cmUgd2UgdXNl
IGl0LiAqLw0KKwlkZXYgPSBzay0+Ym91bmRfZGV2aWNlOw0KIA0KIAkvKg0K
IAkgKglQdXQgaW4gdGhlIElQIGhlYWRlciBhbmQgcm91dGluZyBzdHVmZi4N
CmRpZmYgLXUgLXIgbGludXgvbmV0L2lwdjQvdGNwX2lucHV0LmMgbGludXgt
bW9kaWZpZWQvbmV0L2lwdjQvdGNwX2lucHV0LmMNCi0tLSBsaW51eC9uZXQv
aXB2NC90Y3BfaW5wdXQuYwlUdWUgQXByICA4IDA4OjQ3OjQ3IDE5OTcNCisr
KyBsaW51eC1tb2RpZmllZC9uZXQvaXB2NC90Y3BfaW5wdXQuYwlUdWUgQXBy
IDIyIDE1OjQ2OjI5IDE5OTcNCkBAIC0zMyw2ICszMyw3IEBADQogICoJCQkJ
Ogl3aXRoIFNZTiBmbG9vZGluZyBhdHRhY2tzLg0KICAqCQlEYXZpZCBTLiBN
aWxsZXIJOglOZXcgc29ja2V0IGxvb2t1cCBhcmNoaXRlY3R1cmUgZm9yIElT
Uy4NCiAgKgkJCQkJVGhpcyBjb2RlIGlzIGRlZGljYXRlZCB0byBKb2huIER5
c29uLg0KKyAqICAgICAgICAgICAgICBFbGxpb3QgUG9nZXIgICAgOiAgICAg
ICBBZGRlZCBzdXBwb3J0IGZvciBTT19CSU5EVE9ERVZJQ0UuDQogICovDQog
DQogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPg0KQEAgLTIyOSwyMCArMjMw
LDQyIEBADQogICogWFhYIGhhc2ggdHdpY2UsIG9uY2UgZm9yIGxvY2FsIGFk
ZHJlc3NlcyBib3VuZCwgYW5kIG9uY2UgZm9yDQogICogWFhYIHRoZSBsb2Nh
bCBhZGRyZXNzIHdpbGRjYXJkZWQgKGJlY2F1c2UgdGhlIGhhc2ggaXMgZGlm
ZmVyZW50KS4NCiAgKi8NCi1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92NF9s
b29rdXBfbG9uZ3dheSh1MzIgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGhudW0p
DQorc3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfdjRfbG9va3VwX2xvbmd3YXko
dTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBobnVtLA0KKwkJCQkJICBzdHJ1
Y3QgZGV2aWNlICpkZXYpDQogew0KIAlzdHJ1Y3Qgc29jayAqc2sgPSB0Y3Bf
bGlzdGVuaW5nX2hhc2hbdGNwX2xoYXNoZm4oaG51bSldOw0KIAlzdHJ1Y3Qg
c29jayAqcmVzdWx0ID0gTlVMTDsNCisJaW50IHNjb3JlLCBoaXNjb3JlOw0K
IA0KKwloaXNjb3JlID0gMDsNCiAJZm9yKDsgc2s7IHNrID0gc2stPm5leHQp
IHsNCiAJCWlmKHNrLT5udW0gPT0gaG51bSkgew0KIAkJCV9fdTMyIHJjdl9z
YWRkciA9IHNrLT5yY3Zfc2FkZHI7DQorCQkJc2NvcmUgPSAxOw0KIA0KKwkJ
CS8qIElmIHRoaXMgc29ja2V0IGlzIGJvdW5kIHRvIGEgcGFydGljdWxhciBJ
UCBhZGRyZXNzLA0KKwkJCSAqIGRvZXMgdGhlIGRlc3QgSVBhZGRyIG9mIHRo
ZSBwYWNrZXQgbWF0Y2ggaXQ/ICovDQogCQkJaWYocmN2X3NhZGRyKSB7DQot
CQkJCWlmKHJjdl9zYWRkciA9PSBkYWRkcikNCi0JCQkJCXJldHVybiBzazsg
LyogQmVzdCBwb3NzaWJsZSBtYXRjaC4gKi8NCi0JCQl9IGVsc2UgaWYoIXJl
c3VsdCkNCisJCQkJaWYocmN2X3NhZGRyICE9IGRhZGRyKQ0KKwkJCQkJY29u
dGludWU7DQorCQkJCXNjb3JlKys7DQorCQkJfQ0KKw0KKwkJCS8qIElmIHRo
aXMgc29ja2V0IGlzIGJvdW5kIHRvIGEgcGFydGljdWxhciBpbnRlcmZhY2Us
DQorCQkJICogZGlkIHRoZSBwYWNrZXQgY29tZSBpbiBvbiBpdD8gKi8NCisJ
CQlpZiAoc2stPmJvdW5kX2RldmljZSkgew0KKwkJCQlpZiAoZGV2ICE9IHNr
LT5ib3VuZF9kZXZpY2UpDQorCQkJCQljb250aW51ZTsNCisJCQkJc2NvcmUr
KzsNCisJCQl9DQorDQorCQkJLyogQ2hlY2sgdGhlIHNjb3JlLS1tYXggaXMg
My4gKi8NCisJCQlpZiAoc2NvcmUgPT0gMykNCisJCQkJcmV0dXJuIHNrOyAv
KiBCZXN0IHBvc3NpYmxlIG1hdGNoLiAqLw0KKwkJCWlmIChzY29yZSA+IGhp
c2NvcmUpIHsNCisJCQkJaGlzY29yZSA9IHNjb3JlOw0KIAkJCQlyZXN1bHQg
PSBzazsNCisJCQl9DQogCQl9DQogCX0NCiAJcmV0dXJuIHJlc3VsdDsNCkBA
IC0yNTIsNyArMjc1LDggQEANCiAgKiB3ZSBuZWVkIG5vdCBjaGVjayBpdCBm
b3IgVENQIGxvb2t1cHMgYW55bW9yZSwgdGhhbmtzIEFsZXhleS4gLURhdmVN
DQogICovDQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqX190Y3BfdjRf
bG9va3VwKHN0cnVjdCB0Y3BoZHIgKnRoLA0KLQkJCQkJICAgdTMyIHNhZGRy
LCB1MTYgc3BvcnQsIHUzMiBkYWRkciwgdTE2IGRwb3J0KQ0KKwkJCQkJICAg
dTMyIHNhZGRyLCB1MTYgc3BvcnQsIHUzMiBkYWRkciwgDQorCQkJCQkgICB1
MTYgZHBvcnQsIHN0cnVjdCBkZXZpY2UgKmRldikNCiB7DQogCXVuc2lnbmVk
IHNob3J0IGhudW0gPSBudG9ocyhkcG9ydCk7DQogCXN0cnVjdCBzb2NrICpz
azsNCkBAIC0yNjYsMTYgKzI5MCwxOCBAQA0KIAkJaWYoc2stPmRhZGRyCQk9
PSBzYWRkcgkJJiYgLyogcmVtb3RlIGFkZHJlc3MgKi8NCiAJCSAgIHNrLT5k
dW1teV90aC5kZXN0CT09IHNwb3J0CQkmJiAvKiByZW1vdGUgcG9ydCAgICAq
Lw0KIAkJICAgc2stPm51bQkJPT0gaG51bQkJCSYmIC8qIGxvY2FsIHBvcnQg
ICAgICovDQotCQkgICBzay0+cmN2X3NhZGRyCT09IGRhZGRyKQkJICAgLyog
bG9jYWwgYWRkcmVzcyAgKi8NCisJCSAgIHNrLT5yY3Zfc2FkZHIJPT0gZGFk
ZHIJCSYmIC8qIGxvY2FsIGFkZHJlc3MgICovDQorCQkgICAoKHNrLT5ib3Vu
ZF9kZXZpY2U9PU5VTEwpIHx8IChzay0+Ym91bmRfZGV2aWNlPT1kZXYpKSAg
KQ0KIAkJCWdvdG8gaGl0OyAvKiBZb3Ugc3VuayBteSBiYXR0bGVzaGlwISAq
Lw0KLQlzayA9IHRjcF92NF9sb29rdXBfbG9uZ3dheShkYWRkciwgaG51bSk7
DQorCXNrID0gdGNwX3Y0X2xvb2t1cF9sb25nd2F5KGRhZGRyLCBobnVtLCBk
ZXYpOw0KIGhpdDoNCiAJcmV0dXJuIHNrOw0KIH0NCiAgDQotX19pbmxpbmVf
XyBzdHJ1Y3Qgc29jayAqdGNwX3Y0X2xvb2t1cCh1MzIgc2FkZHIsIHUxNiBz
cG9ydCwgdTMyIGRhZGRyLCB1MTYgZHBvcnQpDQorX19pbmxpbmVfXyBzdHJ1
Y3Qgc29jayAqdGNwX3Y0X2xvb2t1cCh1MzIgc2FkZHIsIHUxNiBzcG9ydCwg
dTMyIGRhZGRyLCB1MTYgZHBvcnQsDQorCQkJCSAgICAgIHN0cnVjdCBkZXZp
Y2UgKmRldikNCiB7DQotCXJldHVybiBfX3RjcF92NF9sb29rdXAoMCwgc2Fk
ZHIsIHNwb3J0LCBkYWRkciwgZHBvcnQpOw0KKwlyZXR1cm4gX190Y3BfdjRf
bG9va3VwKDAsIHNhZGRyLCBzcG9ydCwgZGFkZHIsIGRwb3J0LCBkZXYpOw0K
IH0NCiANCiAjaWZkZWYgQ09ORklHX0lQX1RSQU5TUEFSRU5UX1BST1hZDQpA
QCAtMjk1LDcgKzMyMSw4IEBADQogDQogc3RydWN0IHNvY2sgKnRjcF92NF9w
cm94eV9sb29rdXAodW5zaWduZWQgc2hvcnQgbnVtLCB1bnNpZ25lZCBsb25n
IHJhZGRyLA0KIAkJCQkgdW5zaWduZWQgc2hvcnQgcm51bSwgdW5zaWduZWQg
bG9uZyBsYWRkciwNCi0JCQkJIHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2ln
bmVkIHNob3J0IHBudW0pDQorCQkJCSB1bnNpZ25lZCBsb25nIHBhZGRyLCB1
bnNpZ25lZCBzaG9ydCBwbnVtLA0KKwkJCQkgc3RydWN0IGRldmljZSAqZGV2
KQ0KIHsNCiAJc3RydWN0IHNvY2sgKnMsICpyZXN1bHQgPSBOVUxMOw0KIAlp
bnQgYmFkbmVzcyA9IC0xOw0KQEAgLTMyNyw3ICszNTQsMTIgQEANCiAJCQkJ
CWNvbnRpbnVlOw0KIAkJCQlzY29yZSsrOw0KIAkJCX0NCi0JCQlpZihzY29y
ZSA9PSAzICYmIHMtPm51bSA9PSBobnVtKSB7DQorCQkJaWYocy0+Ym91bmRf
ZGV2aWNlKSB7DQorCQkJCWlmIChzLT5ib3VuZF9kZXZpY2UgIT0gZGV2KQ0K
KwkJCQkJY29udGludWU7DQorCQkJCXNjb3JlKys7DQorCQkJfQ0KKwkJCWlm
KHNjb3JlID09IDQgJiYgcy0+bnVtID09IGhudW0pIHsNCiAJCQkJcmVzdWx0
ID0gczsNCiAJCQkJYnJlYWs7DQogCQkJfSBlbHNlIGlmKHNjb3JlID4gYmFk
bmVzcyAmJiAocy0+bnVtID09IGhwbnVtIHx8IHMtPnJjdl9zYWRkcikpIHsN
CkBAIC03NTgsNyArNzkwLDggQEANCiAJICogCU5vdGUgdXNlIG9mIHNrLT51
c2VyX21zcywgc2luY2UgdXNlciBoYXMgbm8gZGlyZWN0IGFjY2VzcyB0byBu
ZXdzayANCiAJICovDQogDQotCXJ0ID0gaXBfcnRfcm91dGUobmV3c2stPm9w
dCAmJiBuZXdzay0+b3B0LT5zcnIgPyBuZXdzay0+b3B0LT5mYWRkciA6IHNh
ZGRyLCAwKTsNCisJcnQgPSBpcF9ydF9yb3V0ZShuZXdzay0+b3B0ICYmIG5l
d3NrLT5vcHQtPnNyciA/IG5ld3NrLT5vcHQtPmZhZGRyIDogc2FkZHIsIDAs
DQorCQkJIHNrLT5ib3VuZF9kZXZpY2UpOw0KIAluZXdzay0+aXBfcm91dGVf
Y2FjaGUgPSBydDsNCiAJDQogCWlmKHJ0IT1OVUxMICYmIChydC0+cnRfZmxh
Z3MmUlRGX1dJTkRPVykpDQpAQCAtMTAwMSw3ICsxMDM0LDggQEANCiAJbmV3
c2stPmlwX3R0bD1zay0+aXBfdHRsOw0KIAluZXdzay0+aXBfdG9zPXNrYi0+
aXBfaGRyLT50b3M7DQogDQotCXJ0ID0gaXBfcnRfcm91dGUobmV3c2stPm9w
dCAmJiBuZXdzay0+b3B0LT5zcnIgPyBuZXdzay0+b3B0LT5mYWRkciA6IHNh
ZGRyLCAwKTsNCisJcnQgPSBpcF9ydF9yb3V0ZShuZXdzay0+b3B0ICYmIG5l
d3NrLT5vcHQtPnNyciA/IG5ld3NrLT5vcHQtPmZhZGRyIDogc2FkZHIsIDAs
DQorCQkJIHNrLT5ib3VuZF9kZXZpY2UpOw0KIAluZXdzay0+aXBfcm91dGVf
Y2FjaGUgPSBydDsNCiAJDQogCWlmIChydCE9TlVMTCAmJiAocnQtPnJ0X2Zs
YWdzJlJURl9XSU5ET1cpKQ0KQEAgLTIxOTYsNyArMjIzMCw3IEBADQogCXN0
cnVjdCB0Y3BoZHIgKnRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLT5oLnJh
dyArIGlwaC0+aWhsKjQpOw0KIAlzdHJ1Y3Qgc29jayAqc2s7DQogDQotCXNr
ID0gdGNwX3Y0X2xvb2t1cChpcGgtPnNhZGRyLCB0aC0+c291cmNlLCBpcGgt
PmRhZGRyLCB0aC0+ZGVzdCk7DQorCXNrID0gdGNwX3Y0X2xvb2t1cChpcGgt
PnNhZGRyLCB0aC0+c291cmNlLCBpcGgtPmRhZGRyLCB0aC0+ZGVzdCwgc2ti
LT5kZXYpOw0KIAlpZiAoIXNrKQ0KIAkJcmV0dXJuIDA7DQogCS8qIDAgbWVh
bnMgYWNjZXB0IGFsbCBMT0NBTCBhZGRyZXNzZXMgaGVyZSwgbm90IGFsbCB0
aGUgd29ybGQuLi4gKi8NCkBAIC0yMjYyLDcgKzIyOTYsNyBAQA0KICNpZmRl
ZiBDT05GSUdfU1lOX0NPT0tJRVMNCiByZXRyeV9zZWFyY2g6DQogI2VuZGlm
DQotCQlzayA9IF9fdGNwX3Y0X2xvb2t1cCh0aCwgc2FkZHIsIHRoLT5zb3Vy
Y2UsIGRhZGRyLCB0aC0+ZGVzdCk7DQorCQlzayA9IF9fdGNwX3Y0X2xvb2t1
cCh0aCwgc2FkZHIsIHRoLT5zb3VyY2UsIGRhZGRyLCB0aC0+ZGVzdCwgZGV2
KTsNCiAJCWlmICghc2spDQogCQkJZ290byBub190Y3Bfc29ja2V0Ow0KIAkJ
c2tiLT5zayA9IHNrOw0KQEAgLTI1NzIsNyArMjYwNiw3IEBADQogCQkJc2st
PnNodXRkb3duID0gU0hVVERPV05fTUFTSzsNCiAjaWZkZWYgQ09ORklHX0lQ
X1RSQU5TUEFSRU5UX1BST1hZDQogCQkJc2sgPSB0Y3BfdjRfcHJveHlfbG9v
a3VwKHRoLT5kZXN0LCBzYWRkciwgdGgtPnNvdXJjZSwgZGFkZHIsDQotCQkJ
CQkJIGRldi0+cGFfYWRkciwgc2tiLT5yZWRpcnBvcnQpOw0KKwkJCQkJCSBk
ZXYtPnBhX2FkZHIsIHNrYi0+cmVkaXJwb3J0LCBkZXYpOw0KICNlbHNlDQog
CQkJc2sgPSBOVUxMOw0KICNlbmRpZg0KZGlmZiAtdSAtciBsaW51eC9uZXQv
aXB2NC90Y3Bfb3V0cHV0LmMgbGludXgtbW9kaWZpZWQvbmV0L2lwdjQvdGNw
X291dHB1dC5jDQotLS0gbGludXgvbmV0L2lwdjQvdGNwX291dHB1dC5jCVR1
ZSBBcHIgIDggMDg6NDc6NDcgMTk5Nw0KKysrIGxpbnV4LW1vZGlmaWVkL25l
dC9pcHY0L3RjcF9vdXRwdXQuYwlGcmkgQXByIDE4IDE1OjQ2OjU4IDE5OTcN
CkBAIC0zMiw2ICszMiw3IEBADQogICoJCQkJICB0aHVzIHRoZSBvdXRnb2lu
ZyBkZXZpY2UgZG9lcyBhcyB3ZWxsLCB3aGVuDQogICoJCQkJICBza2IncyBh
cmUgb24gdGhlIHJldHJhbnNtaXQgcXVldWUgd2hpY2ggc3RpbGwNCiAgKgkJ
CQkgIHJlZmVyIHRvIHRoZSBvbGQgb2Jzb2xldGUgZGVzdGluYXRpb24uDQor
ICogICAgICAgICAgICAgIEVsbGlvdCBQb2dlciAgICA6IEFkZGVkIHN1cHBv
cnQgZm9yIFNPX0JJTkRUT0RFVklDRS4NCiAgKi8NCiANCiAjaW5jbHVkZSA8
bGludXgvY29uZmlnLmg+DQpAQCAtNDkxLDcgKzQ5Miw4IEBADQogCQkJLyog
QU5LOiBVR0xZLCBidXQgdGhlIGJ1ZywgdGhhdCB3YXMgaGVyZSwgc2hvdWxk
IGJlIGZpeGVkLg0KIAkJCSAqLw0KIAkJCXN0cnVjdCBvcHRpb25zICogIG9w
dCA9IChzdHJ1Y3Qgb3B0aW9ucyopc2tiLT5wcm90b19wcml2Ow0KLQkJCXJ0
ID0gaXBfY2hlY2tfcm91dGUoJnNrLT5pcF9yb3V0ZV9jYWNoZSwgb3B0LT5z
cnI/b3B0LT5mYWRkcjppcGgtPmRhZGRyLCBza2ItPmxvY2Fscm91dGUpOw0K
KwkJCXJ0ID0gaXBfY2hlY2tfcm91dGUoJnNrLT5pcF9yb3V0ZV9jYWNoZSwg
b3B0LT5zcnI/b3B0LT5mYWRkcjppcGgtPmRhZGRyLA0KKwkJCQkJICAgIHNr
Yi0+bG9jYWxyb3V0ZSwgc2stPmJvdW5kX2RldmljZSk7DQogCSAgICAgICAg
fQ0KIA0KIAkJaXBoLT5pZCA9IGh0b25zKGlwX2lkX2NvdW50KyspOw0KZGlm
ZiAtdSAtciBsaW51eC9uZXQvaXB2NC91ZHAuYyBsaW51eC1tb2RpZmllZC9u
ZXQvaXB2NC91ZHAuYw0KLS0tIGxpbnV4L25ldC9pcHY0L3VkcC5jCVR1ZSBB
cHIgIDggMDg6NDc6NDcgMTk5Nw0KKysrIGxpbnV4LW1vZGlmaWVkL25ldC9p
cHY0L3VkcC5jCVR1ZSBBcHIgMjIgMTU6NDQ6MzggMTk5Nw0KQEAgLTUyLDYg
KzUyLDcgQEANCiAgKgkJRGF2aWQgUy4gTWlsbGVyCToJTmV3IHNvY2tldCBs
b29rdXAgYXJjaGl0ZWN0dXJlIGZvciBJU1MuDQogICoJCQkJCUxhc3Qgc29j
a2V0IGNhY2hlIHJldGFpbmVkIGFzIGl0DQogICoJCQkJCWRvZXMgaGF2ZSBh
IGhpZ2ggaGl0IHJhdGUuDQorICogICAgICAgICAgICAgIEVsbGlvdCBQb2dl
ciAgICA6ICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFNPX0JJTkRUT0RFVklD
RS4NCiAgKg0KICAqDQogICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCkBAIC0xMzAs
NiArMTMxLDEyIEBADQogCQlpZigoc2syLT5udW0gPT0gc251bSkgJiYgKHNr
MiAhPSBzaykpIHsNCiAJCQlpbnQgc2syX3JldXNlID0gc2syLT5yZXVzZTsN
CiANCisJCQkvKiBUd28gc29ja2V0cyBjYW4gYmUgYm91bmQgdG8gdGhlIHNh
bWUgcG9ydCBpZiB0aGV5J3JlDQorCQkJICogYm91bmQgdG8gZGlmZmVyZW50
IGludGVyZmFjZXMuLi4gKi8NCisJCQlpZiAoc2stPmJvdW5kX2RldmljZSAh
PSBzazItPmJvdW5kX2RldmljZSkgew0KKwkJCQljb250aW51ZTsNCisJCQl9
DQorDQogCQkJaWYoIXNrMi0+cmN2X3NhZGRyIHx8ICFzay0+cmN2X3NhZGRy
KSB7DQogCQkJCWlmKCghc2syX3JldXNlKSB8fCAoIXNrX3JldXNlKSkgew0K
IAkJCQkJcmV0dmFsID0gMTsNCkBAIC0yNTUsNyArMjYyLDggQEANCiAvKiBV
RFAgaXMgbmVhcmx5IGFsd2F5cyB3aWxkY2FyZHMgb3V0IHRoZSB3YXpvbywg
aXQgbWFrZXMgbm8gc2Vuc2UgdG8gdHJ5DQogICogaGFyZGVyIHRoYW4gdGhp
cy4gLURhdmVNDQogICovDQotX19pbmxpbmVfXyBzdHJ1Y3Qgc29jayAqdWRw
X3Y0X2xvb2t1cCh1MzIgc2FkZHIsIHUxNiBzcG9ydCwgdTMyIGRhZGRyLCB1
MTYgZHBvcnQpDQorX19pbmxpbmVfXyBzdHJ1Y3Qgc29jayAqdWRwX3Y0X2xv
b2t1cCh1MzIgc2FkZHIsIHUxNiBzcG9ydCwgdTMyIGRhZGRyLCB1MTYgZHBv
cnQsDQorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikNCiB7DQogCXN0
cnVjdCBzb2NrICpzaywgKnJlc3VsdCA9IE5VTEw7DQogCXVuc2lnbmVkIHNo
b3J0IGhudW0gPSBudG9ocyhkcG9ydCk7DQpAQCAtMjc5LDcgKzI4NywxNSBA
QA0KIAkJCQkJY29udGludWU7DQogCQkJCXNjb3JlKys7DQogCQkJfQ0KLQkJ
CWlmKHNjb3JlID09IDMpIHsNCisJCQkvKiBJZiB0aGlzIHNvY2tldCBpcyBi
b3VuZCB0byBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLA0KKwkJCSAqIGRpZCB0
aGUgcGFja2V0IGNvbWUgaW4gb24gaXQ/ICovDQorCQkJaWYgKHNrLT5ib3Vu
ZF9kZXZpY2UpIHsNCisJCQkJaWYgKGRldiA9PSBzay0+Ym91bmRfZGV2aWNl
KQ0KKwkJCQkJc2NvcmUrKzsNCisJCQkJZWxzZQ0KKwkJCQkJY29udGludWU7
ICAvKiBtaXNtYXRjaC0tbm90IHRoaXMgc29jayAqLw0KKwkJCX0NCisJCQlp
ZihzY29yZSA9PSA0KSB7DQogCQkJCXJlc3VsdCA9IHNrOw0KIAkJCQlicmVh
azsNCiAJCQl9IGVsc2UgaWYoc2NvcmUgPiBiYWRuZXNzKSB7DQpAQCAtMzA4
LDcgKzMyNCw4IEBADQogDQogc3RydWN0IHNvY2sgKnVkcF92NF9wcm94eV9s
b29rdXAodW5zaWduZWQgc2hvcnQgbnVtLCB1bnNpZ25lZCBsb25nIHJhZGRy
LA0KIAkJCQkgdW5zaWduZWQgc2hvcnQgcm51bSwgdW5zaWduZWQgbG9uZyBs
YWRkciwNCi0JCQkJIHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIHNo
b3J0IHBudW0pDQorCQkJCSB1bnNpZ25lZCBsb25nIHBhZGRyLCB1bnNpZ25l
ZCBzaG9ydCBwbnVtLA0KKwkJCQkgc3RydWN0IGRldmljZSAqZGV2KQ0KIHsN
CiAJc3RydWN0IHNvY2sgKnMsICpyZXN1bHQgPSBOVUxMOw0KIAlpbnQgYmFk
bmVzcyA9IC0xOw0KQEAgLTM0MCw3ICszNTcsMTQgQEANCiAJCQkJCWNvbnRp
bnVlOw0KIAkJCQlzY29yZSsrOw0KIAkJCX0NCi0JCQlpZihzY29yZSA9PSAz
ICYmIHMtPm51bSA9PSBobnVtKSB7DQorCQkJLyogSWYgdGhpcyBzb2NrZXQg
aXMgYm91bmQgdG8gYSBwYXJ0aWN1bGFyIGludGVyZmFjZSwNCisJCQkgKiBk
aWQgdGhlIHBhY2tldCBjb21lIGluIG9uIGl0PyAqLw0KKwkJCWlmKHMtPmJv
dW5kX2RldmljZSkgew0KKwkJCQlpZiAocy0+Ym91bmRfZGV2aWNlICE9IGRl
dikNCisJCQkJCWNvbnRpbnVlOw0KKwkJCQlzY29yZSsrOw0KKwkJCX0NCisJ
CQlpZihzY29yZSA9PSA0ICYmIHMtPm51bSA9PSBobnVtKSB7DQogCQkJCXJl
c3VsdCA9IHM7DQogCQkJCWJyZWFrOw0KIAkJCX0gZWxzZSBpZihzY29yZSA+
IGJhZG5lc3MgJiYgKHMtPm51bSA9PSBocG51bSB8fCBzLT5yY3Zfc2FkZHIp
KSB7DQpAQCAtMzYzLDcgKzM4Nyw4IEBADQogCQkJCQkgICAgIHVuc2lnbmVk
IHNob3J0IG51bSwNCiAJCQkJCSAgICAgdW5zaWduZWQgbG9uZyByYWRkciwN
CiAJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcm51bSwNCi0JCQkJCSAgICAg
dW5zaWduZWQgbG9uZyBsYWRkcikNCisJCQkJCSAgICAgdW5zaWduZWQgbG9u
ZyBsYWRkciwNCisJCQkJCSAgICAgc3RydWN0IGRldmljZSAqZGV2KQ0KIHsN
CiAJc3RydWN0IHNvY2sgKnMgPSBzazsNCiAJdW5zaWduZWQgc2hvcnQgaG51
bSA9IG50b2hzKG51bSk7DQpAQCAtMzcyLDYgKzM5Nyw3IEBADQogCQkgICAg
KHMtPmRlYWQgJiYgKHMtPnN0YXRlID09IFRDUF9DTE9TRSkpCQl8fA0KIAkJ
ICAgIChzLT5kYWRkciAmJiBzLT5kYWRkciE9cmFkZHIpCQkJfHwNCiAJCSAg
ICAocy0+ZHVtbXlfdGguZGVzdCAhPSBybnVtICYmIHMtPmR1bW15X3RoLmRl
c3QgIT0gMCkgfHwNCisJCSAgICAoKHMtPmJvdW5kX2RldmljZSkgJiYgKHMt
PmJvdW5kX2RldmljZSE9ZGV2KSkgICAgICAgfHwNCiAJCSAgICAocy0+cmN2
X3NhZGRyICAmJiBzLT5yY3Zfc2FkZHIgIT0gbGFkZHIpKQ0KIAkJCWNvbnRp
bnVlOw0KIAkJYnJlYWs7DQpAQCAtNDA4LDcgKzQzNCw3IEBADQogCQ0KIAl1
aCA9IChzdHJ1Y3QgdWRwaGRyICopaGVhZGVyOyAgDQogICAgDQotCXNrID0g
dWRwX3Y0X2xvb2t1cChkYWRkciwgdWgtPmRlc3QsIHNhZGRyLCB1aC0+c291
cmNlKTsNCisJc2sgPSB1ZHBfdjRfbG9va3VwKGRhZGRyLCB1aC0+ZGVzdCwg
c2FkZHIsIHVoLT5zb3VyY2UsIE5VTEwpOw0KIAlpZiAoc2sgPT0gTlVMTCkg
DQogCSAgCXJldHVybjsJLyogTm8gc29ja2V0IGZvciBlcnJvciAqLw0KICAg
CQ0KQEAgLTg1MCw3ICs4NzYsNyBAQA0KIAlpZighc2stPmJyb2FkY2FzdCAm
JiBpcF9jaGtfYWRkcih1c2luLT5zaW5fYWRkci5zX2FkZHIpPT1JU19CUk9B
RENBU1QpDQogCQlyZXR1cm4gLUVBQ0NFUzsJCQkvKiBNdXN0IHR1cm4gYnJv
YWRjYXN0IG9uIGZpcnN0ICovDQogICAJDQotICAJcnQ9aXBfcnRfcm91dGUo
KF9fdTMyKXVzaW4tPnNpbl9hZGRyLnNfYWRkciwgc2stPmxvY2Fscm91dGUp
Ow0KKyAgCXJ0PWlwX3J0X3JvdXRlKChfX3UzMil1c2luLT5zaW5fYWRkci5z
X2FkZHIsIHNrLT5sb2NhbHJvdXRlLCBzay0+Ym91bmRfZGV2aWNlKTsNCiAg
IAlpZiAocnQ9PU5VTEwpDQogICAJCXJldHVybiAtRU5FVFVOUkVBQ0g7DQog
ICAJaWYoIXNrLT5zYWRkcikNCkBAIC05MTgsNyArOTQ0LDcgQEANCiAJc3Ry
dWN0IHVkcGhkciAqdWggPSAoc3RydWN0IHVkcGhkciAqKShza2ItPmgucmF3
ICsgaXBoLT5paGwqNCk7DQogCXN0cnVjdCBzb2NrICpzazsNCiANCi0Jc2sg
PSB1ZHBfdjRfbG9va3VwKGlwaC0+c2FkZHIsIHVoLT5zb3VyY2UsIGlwaC0+
ZGFkZHIsIHVoLT5kZXN0KTsNCisJc2sgPSB1ZHBfdjRfbG9va3VwKGlwaC0+
c2FkZHIsIHVoLT5zb3VyY2UsIGlwaC0+ZGFkZHIsIHVoLT5kZXN0LCBza2It
PmRldik7DQogCWlmICghc2spDQogCQlyZXR1cm4gMDsNCiAJLyogMCBtZWFu
cyBhY2NlcHQgYWxsIExPQ0FMIGFkZHJlc3NlcyBoZXJlLCBub3QgYWxsIHRo
ZSB3b3JsZC4uLiAqLw0KQEAgLTk0MCw3ICs5NjYsNyBAQA0KIA0KIAlTT0NL
SEFTSF9MT0NLKCk7DQogCXNrID0gdWRwX2hhc2hbbnRvaHModWgtPmRlc3Qp
ICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXTsNCi0Jc2sgPSB1ZHBfdjRfbWNh
c3RfbmV4dChzaywgdWgtPmRlc3QsIHNhZGRyLCB1aC0+c291cmNlLCBkYWRk
cik7DQorCXNrID0gdWRwX3Y0X21jYXN0X25leHQoc2ssIHVoLT5kZXN0LCBz
YWRkciwgdWgtPnNvdXJjZSwgZGFkZHIsIHNrYi0+ZGV2KTsNCiAJaWYoc2sp
IHsNCiAJCXN0cnVjdCBzb2NrICpza25leHQgPSBOVUxMOw0KIA0KQEAgLTk0
OCw3ICs5NzQsNyBAQA0KIAkJCXN0cnVjdCBza19idWZmICpza2IxID0gc2ti
Ow0KIA0KIAkJCXNrbmV4dCA9IHVkcF92NF9tY2FzdF9uZXh0KHNrLT5uZXh0
LCB1aC0+ZGVzdCwgc2FkZHIsDQotCQkJCQkJICAgdWgtPnNvdXJjZSwgZGFk
ZHIpOw0KKwkJCQkJCSAgIHVoLT5zb3VyY2UsIGRhZGRyLCBza2ItPmRldik7
DQogCQkJaWYoc2tuZXh0KQ0KIAkJCQlza2IxID0gc2tiX2Nsb25lKHNrYiwg
R0ZQX0FUT01JQyk7DQogDQpAQCAtMTA2NiwxMCArMTA5MiwxMCBAQA0KICNp
ZmRlZiBDT05GSUdfSVBfVFJBTlNQQVJFTlRfUFJPWFkNCiAJaWYoc2tiLT5y
ZWRpcnBvcnQpDQogCQlzayA9IHVkcF92NF9wcm94eV9sb29rdXAodWgtPmRl
c3QsIHNhZGRyLCB1aC0+c291cmNlLA0KLQkJCQkJIGRhZGRyLCBkZXYtPnBh
X2FkZHIsIHNrYi0+cmVkaXJwb3J0KTsNCisJCQkJCSBkYWRkciwgZGV2LT5w
YV9hZGRyLCBza2ItPnJlZGlycG9ydCwgZGV2KTsNCiAJZWxzZQ0KICNlbmRp
Zg0KLQlzayA9IHVkcF92NF9sb29rdXAoc2FkZHIsIHVoLT5zb3VyY2UsIGRh
ZGRyLCB1aC0+ZGVzdCk7DQorCXNrID0gdWRwX3Y0X2xvb2t1cChzYWRkciwg
dWgtPnNvdXJjZSwgZGFkZHIsIHVoLT5kZXN0LCBkZXYpOw0KIAkNCiAJaWYg
KHNrID09IE5VTEwpIA0KICAgCXsNCg==
---1463811840-1602367619-870794728=:13301--