[patch] QNX-style scheduling v1.06

Adam McKee (amckee@poboxes.com)
Sun, 10 Aug 1997 22:22:55 -0600 (CST)


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.

--12583424-2086413006-871273375=:550
Content-Type: TEXT/PLAIN; charset=US-ASCII

I was going to wait for 2.0.31, but I thought "oh Hell", and I am
releasing this now to see how it works for people. With any luck it'll
patch cleanly against '31 when it is released.

Major changes from v1.05:

o if a task fork()s a lot, its children will start out demoted 1
run-queue (NOTE: same min-run-queue, but current run-queue =
parent's run-queue + 1). This may afford some modest defense
against fork-bombs, and provide fairer scheduling in general.

o a task is promoted 1 run-queue for every 100ms that it blocked.
This is instead of promoting back to the min-run-queue
unconditionally, which leaves the door *wide* open to abusive
behaviour.

o run-queue maintenance is done more often (every 200ms instead of
every 500ms).

o a task cannot get back to its min-run-queue by starvation - it
must block (for at least 100ms) to get back to its min-run-queue.

o better handling of SCHED_RR and SCHED_FIFO

****

Comments, criticism are much appreciated. I'd like to hear from an SMP
person to make sure I didn't break SMP in this version.

-- Adam

--12583424-2086413006-871273375=:550
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="QNX-scheduler-2.0.31-pre3-1.patch"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.95.970810222255.550C@titan.acua.org>
Content-Description:

LS0tIGxpbnV4L2ZzL3Byb2MvYXJyYXkuYy5vcmlnCVR1ZSBBdWcgIDUgMjM6
Mzg6NDMgMTk5Nw0KKysrIGxpbnV4L2ZzL3Byb2MvYXJyYXkuYwlUdWUgQXVn
ICA1IDIzOjM4OjQzIDE5OTcNCkBAIC02ODIsMTIgKzY4MiwzNCBAQA0KIAll
bHNlDQogCQl0dHlfcGdycCA9IC0xOw0KIA0KLQkvKiBzY2FsZSBwcmlvcml0
eSBhbmQgbmljZSB2YWx1ZXMgZnJvbSB0aW1lc2xpY2VzIHRvIC0yMC4uMjAg
Ki8NCisJLyogc2NhbGUgcHJpb3JpdHkgYW5kIG5pY2UgdmFsdWVzIGZyb20g
cnVuLXF1ZXVlICMgdG8gLTIwLi4yMCAqLw0KIAkvKiB0byBtYWtlIGl0IGxv
b2sgbGlrZSBhICJub3JtYWwiIHVuaXggcHJpb3JpdHkvbmljZSB2YWx1ZSAg
Ki8NCi0JcHJpb3JpdHkgPSB0c2stPmNvdW50ZXI7DQotCXByaW9yaXR5ID0g
MjAgLSAocHJpb3JpdHkgKiAxMCArIERFRl9QUklPUklUWSAvIDIpIC8gREVG
X1BSSU9SSVRZOw0KLQluaWNlID0gdHNrLT5wcmlvcml0eTsNCi0JbmljZSA9
IDIwIC0gKG5pY2UgKiAyMCArIERFRl9QUklPUklUWSAvIDIpIC8gREVGX1BS
SU9SSVRZOw0KKwlwcmlvcml0eSA9IHRzay0+cnVuX3E7DQorCWlmIChwcmlv
cml0eSA8IERFRl9SVU5fUVVFVUUpIHsNCisJICAgICAgICBwcmlvcml0eSAq
PSAxOTsNCisJCXByaW9yaXR5IC89IChERUZfUlVOX1FVRVVFIC0gMSk7DQor
CQlwcmlvcml0eSA9IC0yMCArIHByaW9yaXR5Ow0KKwl9IGVsc2UgaWYgKHBy
aW9yaXR5ID09IERFRl9SVU5fUVVFVUUpIHsNCisJICAgICAgICBwcmlvcml0
eSA9IDA7DQorCX0gZWxzZSB7DQorCSAgICAgICAgcHJpb3JpdHkgLT0gKERF
Rl9SVU5fUVVFVUUgKyAxKTsNCisJCXByaW9yaXR5ICo9IDE5Ow0KKwkJcHJp
b3JpdHkgLz0gKE5SX1JVTl9RVUVVRVMgLSBERUZfUlVOX1FVRVVFIC0gMik7
DQorCQlwcmlvcml0eSArPSAxOw0KKwl9DQorCW5pY2UgPSB0c2stPnJ1bl9x
X21pbjsNCisJaWYgKG5pY2UgPCBERUZfUlVOX1FVRVVFKSB7DQorCSAgICAg
ICAgbmljZSAqPSAxOTsNCisJCW5pY2UgLz0gKERFRl9SVU5fUVVFVUUgLSAx
KTsNCisJCW5pY2UgPSAtMjAgKyBuaWNlOw0KKwl9IGVsc2UgaWYgKG5pY2Ug
PT0gREVGX1JVTl9RVUVVRSkgew0KKwkgICAgICAgIG5pY2UgPSAwOw0KKwl9
IGVsc2Ugew0KKwkgICAgICAgIG5pY2UgLT0gKERFRl9SVU5fUVVFVUUgKyAx
KTsNCisJCW5pY2UgKj0gMTk7DQorCQluaWNlIC89IChOUl9SVU5fUVVFVUVT
IC0gREVGX1JVTl9RVUVVRSAtIDIpOw0KKwkJbmljZSArPSAxOw0KKwl9DQog
DQogCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwiJWQgKCVzKSAlYyAlZCAlZCAl
ZCAlZCAlZCAlbHUgJWx1IFwNCiAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsZCAl
bGQgJWxkICVsZCAlbGQgJWxkICVsdSAlbHUgJWxkICVsdSAlbHUgJWx1ICVs
dSAlbHUgXA0KLS0tIGxpbnV4L2tlcm5lbC9zeXMuYy5vcmlnCVR1ZSBBdWcg
IDUgMjM6Mzg6NDMgMTk5Nw0KKysrIGxpbnV4L2tlcm5lbC9zeXMuYwlUdWUg
QXVnICA1IDIzOjM4OjQzIDE5OTcNCkBAIC02NywyMyArNjcsMjUgQEANCiB7
DQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsNCiAJaW50IGVycm9yID0gRVNS
Q0g7DQotCXVuc2lnbmVkIGludCBwcmlvcml0eTsNCisJdW5zaWduZWQgaW50
IHJ1bl9xOw0KIA0KIAlpZiAod2hpY2ggPiAyIHx8IHdoaWNoIDwgMCkNCiAJ
CXJldHVybiAtRUlOVkFMOw0KIA0KLQkvKiBub3JtYWxpemU6IGF2b2lkIHNp
Z25lZCBkaXZpc2lvbiAocm91bmRpbmcgcHJvYmxlbXMpICovDQotCXByaW9y
aXR5ID0gbmljZXZhbDsNCi0JaWYgKG5pY2V2YWwgPCAwKQ0KLQkJcHJpb3Jp
dHkgPSAtbmljZXZhbDsNCi0JaWYgKHByaW9yaXR5ID4gMjApDQotCQlwcmlv
cml0eSA9IDIwOw0KLQlwcmlvcml0eSA9IChwcmlvcml0eSAqIERFRl9QUklP
UklUWSArIDEwKSAvIDIwICsgREVGX1BSSU9SSVRZOw0KLQ0KLQlpZiAobmlj
ZXZhbCA+PSAwKSB7DQotCQlwcmlvcml0eSA9IDIqREVGX1BSSU9SSVRZIC0g
cHJpb3JpdHk7DQotCQlpZiAoIXByaW9yaXR5KQ0KLQkJCXByaW9yaXR5ID0g
MTsNCisJaWYgKG5pY2V2YWwgPCAtMjApIG5pY2V2YWwgPSAtMjA7DQorCWVs
c2UgaWYgKG5pY2V2YWwgPiAyMCkgbmljZXZhbCA9IDIwOw0KKwlpZiAobmlj
ZXZhbCA8IDApIHsNCisJICBydW5fcSA9IC1uaWNldmFsIC0gMTsNCisJICBy
dW5fcSAqPSAoREVGX1JVTl9RVUVVRSAtIDEpOw0KKwkgIHJ1bl9xIC89IDE5
OyANCisJICBydW5fcSA9IERFRl9SVU5fUVVFVUUgLSAxIC0gcnVuX3E7DQor
CX0gZWxzZSBpZiAoIW5pY2V2YWwpIHsNCisJICBydW5fcSA9IERFRl9SVU5f
UVVFVUU7DQorCX0gZWxzZSB7DQorCSAgcnVuX3EgPSBuaWNldmFsIC0gMTsN
CisJICBydW5fcSAqPSAoTlJfUlVOX1FVRVVFUyAtIERFRl9SVU5fUVVFVUUg
LSAyKTsNCisJICBydW5fcSAvPSAxOTsNCisJICBydW5fcSA9IERFRl9SVU5f
UVVFVUUgKyAxICsgcnVuX3E7DQogCX0NCiANCiAJZm9yX2VhY2hfdGFzayhw
KSB7DQpAQCAtOTYsMTAgKzk4LDEwIEBADQogCQl9DQogCQlpZiAoZXJyb3Ig
PT0gRVNSQ0gpDQogCQkJZXJyb3IgPSAwOw0KLQkJaWYgKHByaW9yaXR5ID4g
cC0+cHJpb3JpdHkgJiYgIXN1c2VyKCkpDQotCQkJZXJyb3IgPSBFQUNDRVM7
DQorCQlpZiAocnVuX3EgPCBwLT5ydW5fcV9taW4gJiYgIXN1c2VyKCkpDQor
CQkgICAgICAgIGVycm9yID0gRUFDQ0VTOw0KIAkJZWxzZQ0KLQkJCXAtPnBy
aW9yaXR5ID0gcHJpb3JpdHk7DQorCQkgICAgICAgIHAtPnJ1bl9xX3N3ID0g
cnVuX3E7DQogCX0NCiAJcmV0dXJuIC1lcnJvcjsNCiB9DQpAQCAtMTEyLDcg
KzExNCw3IEBADQogYXNtbGlua2FnZSBpbnQgc3lzX2dldHByaW9yaXR5KGlu
dCB3aGljaCwgaW50IHdobykNCiB7DQogCXN0cnVjdCB0YXNrX3N0cnVjdCAq
cDsNCi0JbG9uZyBtYXhfcHJpbyA9IC1FU1JDSDsNCisJdW5zaWduZWQgaW50
IHJ1bl9xX21pbiA9IE5SX1JVTl9RVUVVRVM7DQogDQogCWlmICh3aGljaCA+
IDIgfHwgd2hpY2ggPCAwKQ0KIAkJcmV0dXJuIC1FSU5WQUw7DQpAQCAtMTIw
LDE0ICsxMjIsMjcgQEANCiAJZm9yX2VhY2hfdGFzayAocCkgew0KIAkJaWYg
KCFwcm9jX3NlbChwLCB3aGljaCwgd2hvKSkNCiAJCQljb250aW51ZTsNCi0J
CWlmIChwLT5wcmlvcml0eSA+IG1heF9wcmlvKQ0KLQkJCW1heF9wcmlvID0g
cC0+cHJpb3JpdHk7DQorCQlpZiAocC0+cnVuX3FfbWluIDwgcnVuX3FfbWlu
KQ0KKwkJCXJ1bl9xX21pbiA9IHAtPnJ1bl9xX21pbjsNCiAJfQ0KIA0KLQkv
KiBzY2FsZSB0aGUgcHJpb3JpdHkgZnJvbSB0aW1lc2xpY2UgdG8gMC4uNDAg
Ki8NCi0JaWYgKG1heF9wcmlvID4gMCkNCi0JCW1heF9wcmlvID0gKG1heF9w
cmlvICogMjAgKyBERUZfUFJJT1JJVFkvMikgLyBERUZfUFJJT1JJVFk7DQot
CXJldHVybiBtYXhfcHJpbzsNCisgICAgICAgIGlmIChydW5fcV9taW4gPT0g
TlJfUlVOX1FVRVVFUykNCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FU1JD
SDsNCisNCisJLyogc2NhbGUgdGhlIHJ1bl9xIHRvIDAuLjQwICovDQorCWlm
IChydW5fcV9taW4gPCBERUZfUlVOX1FVRVVFKSB7DQorCSAgICAgICAgcnVu
X3FfbWluICo9IDE5Ow0KKwkJcnVuX3FfbWluIC89IChERUZfUlVOX1FVRVVF
IC0gMSk7DQorCX0gZWxzZSBpZiAocnVuX3FfbWluID09IERFRl9SVU5fUVVF
VUUpIHsNCisJICAgICAgICBydW5fcV9taW4gPSAyMDsNCisJfSBlbHNlIHsN
CisJICAgICAgICBydW5fcV9taW4gLT0gKERFRl9SVU5fUVVFVUUgKyAxKTsN
CisJCXJ1bl9xX21pbiAqPSAxOTsNCisJCXJ1bl9xX21pbiAvPSAoTlJfUlVO
X1FVRVVFUyAtIERFRl9SVU5fUVVFVUUgLSAyKTsNCisJCXJ1bl9xX21pbiAr
PSAyMTsNCisJfQ0KKyAgICAgICAgcnVuX3FfbWluID0gNDAgLSBydW5fcV9t
aW47DQorCXJldHVybiBydW5fcV9taW47DQogfQ0KIA0KICNpZm5kZWYgX19h
bHBoYV9fDQotLS0gbGludXgva2VybmVsL3NjaGVkLmMub3JpZwlUdWUgQXVn
ICA1IDIzOjM4OjQzIDE5OTcNCisrKyBsaW51eC9rZXJuZWwvc2NoZWQuYwlT
dW4gQXVnIDEwIDIxOjM4OjM3IDE5OTcNCkBAIC03LDYgKzcsNyBAQA0KICAq
ICAxOTk2LTEyLTIzICBNb2RpZmllZCBieSBEYXZlIEdyb3RoZSB0byBmaXgg
YnVncyBpbiBzZW1hcGhvcmVzIGFuZA0KICAqICAgICAgICAgICAgICBtYWtl
IHNlbWFwaG9yZXMgU01QIHNhZmUNCiAgKiAgMTk5Ny0wMS0yOCAgTW9kaWZp
ZWQgYnkgRmlubiBBcm5lIEdhbmdzdGFkIHRvIG1ha2UgdGltZXJzIHNjYWxl
IGJldHRlci4NCisgKiAgMTk5Ny0wOC0wMSAgTW9kaWZpZWQgYnkgQWRhbSBN
Y0tlZSB0byB1c2UgbXVsdGktbGV2ZWwgZmVlZGJhY2sgc2NoZWR1bGluZy4N
CiAgKi8NCiANCiAvKg0KQEAgLTkyLDYgKzkzLDcgQEANCiBzdGF0aWMgc3Ry
dWN0IGZzX3N0cnVjdCBpbml0X2ZzID0gSU5JVF9GUzsNCiBzdGF0aWMgc3Ry
dWN0IGZpbGVzX3N0cnVjdCBpbml0X2ZpbGVzID0gSU5JVF9GSUxFUzsNCiBz
dGF0aWMgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgaW5pdF9zaWduYWxzID0gSU5J
VF9TSUdOQUxTOw0KK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBydW5f
cVtOUl9SVU5fUVVFVUVTXTsNCiANCiBzdHJ1Y3QgbW1fc3RydWN0IGluaXRf
bW0gPSBJTklUX01NOw0KIHN0cnVjdCB0YXNrX3N0cnVjdCBpbml0X3Rhc2sg
PSBJTklUX1RBU0s7DQpAQCAtMTA3LDIxICsxMDksNDcgQEANCiANCiBzdGF0
aWMgaW5saW5lIHZvaWQgYWRkX3RvX3J1bnF1ZXVlKHN0cnVjdCB0YXNrX3N0
cnVjdCAqIHApDQogew0KKyAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpx
X2hlYWQ7DQorCXVuc2lnbmVkIGxvbmcgdDsNCiAjaWZkZWYgX19TTVBfXw0K
IAlpbnQgY3B1PXNtcF9wcm9jZXNzb3JfaWQoKTsNCi0jZW5kaWYJDQorI2Vu
ZGlmDQorDQogI2lmIDEJLyogc2FuaXR5IHRlc3RzICovDQogCWlmIChwLT5u
ZXh0X3J1biB8fCBwLT5wcmV2X3J1bikgew0KIAkJcHJpbnRrKCJ0YXNrIGFs
cmVhZHkgb24gcnVuLXF1ZXVlXG4iKTsNCiAJCXJldHVybjsNCiAJfQ0KICNl
bmRpZg0KLQlpZiAocC0+Y291bnRlciA+IGN1cnJlbnQtPmNvdW50ZXIgKyAz
KQ0KKwkvKiBiYXNlZCBvbiBob3cgbG9uZyBwIHNsZXB0LCByZXNldCBwLT5y
dW5fcSAqLw0KKwlpZiAocC0+cnVuX3EgPiBwLT5ydW5fcV9taW4pIHsNCisJ
ICAgICAgICB0ID0gamlmZmllcyAtIHAtPmxhc3RfcnVuOw0KKwkJdCAvPSAo
MTAwKkhaLzEwMDApOw0KKwkJaWYgKHQgPD0gcC0+cnVuX3EgLSBwLT5ydW5f
cV9taW4pDQorCQkgICAgICAgIHAtPnJ1bl9xIC09IHQ7DQorCQllbHNlDQor
CQkgICAgICAgIHAtPnJ1bl9xID0gcC0+cnVuX3FfbWluOw0KKwl9DQorDQor
CXFfaGVhZCA9IHJ1bl9xW3AtPnJ1bl9xXTsNCisJaWYgKChwLT5ydW5fcSA8
IGN1cnJlbnQtPnJ1bl9xKSB8fA0KKwkgICAgKChwLT5ydW5fcSA9PSBjdXJy
ZW50LT5ydW5fcSkgJiYNCisJICAgICAocC0+Y291bnRlciA+IGN1cnJlbnQt
PmNvdW50ZXIgKyAzKSkpDQogCQluZWVkX3Jlc2NoZWQgPSAxOw0KIAlucl9y
dW5uaW5nKys7DQotCShwLT5wcmV2X3J1biA9IGluaXRfdGFzay5wcmV2X3J1
biktPm5leHRfcnVuID0gcDsNCi0JcC0+bmV4dF9ydW4gPSAmaW5pdF90YXNr
Ow0KLQlpbml0X3Rhc2sucHJldl9ydW4gPSBwOw0KKw0KKwlpZiAocV9oZWFk
ID09IE5VTEwpIHsNCisJICBydW5fcVtwLT5ydW5fcV0gPSBwOw0KKwkgIHAt
PnByZXZfcnVuID0gcDsNCisJICBwLT5uZXh0X3J1biA9IHA7DQorCX0gZWxz
ZSB7DQorCSAgcC0+cHJldl9ydW4gPSBxX2hlYWQtPnByZXZfcnVuOw0KKwkg
IHAtPm5leHRfcnVuID0gcV9oZWFkOw0KKwkgIHFfaGVhZC0+cHJldl9ydW4t
Pm5leHRfcnVuID0gcDsNCisJICBxX2hlYWQtPnByZXZfcnVuID0gcDsNCisJ
fQ0KKwlwLT5sYXN0X3J1biA9IGppZmZpZXM7DQorDQogI2lmZGVmIF9fU01Q
X18NCiAJLyogdGhpcyBpcyBzYWZlIG9ubHkgaWYgY2FsbGVkIHdpdGggY2xp
KCkqLw0KIAl3aGlsZShzZXRfYml0KDMxLCZzbXBfcHJvY2Vzc19hdmFpbGFi
bGUpKQ0KQEAgLTE1NCw4ICsxODIsOSBAQA0KIA0KIHN0YXRpYyBpbmxpbmUg
dm9pZCBkZWxfZnJvbV9ydW5xdWV1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBw
KQ0KIHsNCi0Jc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0ID0gcC0+bmV4dF9y
dW47DQogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiA9IHAtPnByZXZfcnVu
Ow0KKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQgPSBwLT5uZXh0X3J1bjsN
CisJc3RydWN0IHRhc2tfc3RydWN0ICpxX2hlYWQgPSBydW5fcVtwLT5ydW5f
cV07DQogDQogI2lmIDEJLyogc2FuaXR5IHRlc3RzICovDQogCWlmICghbmV4
dCB8fCAhcHJldikgew0KQEAgLTE3MiwyNiArMjAxLDU0IEBADQogCQlyZXR1
cm47DQogCX0NCiAJbnJfcnVubmluZy0tOw0KLQluZXh0LT5wcmV2X3J1biA9
IHByZXY7DQorDQorCS8qIHJlbW92ZSBsaW5rcyB0byBwICovDQogCXByZXYt
Pm5leHRfcnVuID0gbmV4dDsNCi0JcC0+bmV4dF9ydW4gPSBOVUxMOw0KKwlu
ZXh0LT5wcmV2X3J1biA9IHByZXY7DQorCS8qIHNldCBwJ3MgbGlua3MgKi8N
CiAJcC0+cHJldl9ydW4gPSBOVUxMOw0KKwlwLT5uZXh0X3J1biA9IE5VTEw7
DQorICAgICAgIAkvKiBpZiBwIHdhcyB0aGUgcV9oZWFkLCByZXNldCBxX2hl
YWQgKi8NCisJaWYgKHAgPT0gcV9oZWFkKSB7DQorCSAgICAgICAgaWYgKG5l
eHQgPT0gcCkNCisJICAgICAgICAgICAgICAgIHJ1bl9xW3AtPnJ1bl9xXSA9
IE5VTEw7DQorCQllbHNlDQorCQkgICAgICAgIHJ1bl9xW3AtPnJ1bl9xXSA9
IG5leHQ7DQorCX0NCisNCiB9DQogDQotc3RhdGljIGlubGluZSB2b2lkIG1v
dmVfbGFzdF9ydW5xdWV1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQ0KK3N0
YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfcnVucXVldWVzKHN0cnVjdCB0YXNr
X3N0cnVjdCAqIHAsIHVuc2lnbmVkIGludCBuZXdfcnVuX3EpDQogew0KLQlz
dHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQgPSBwLT5uZXh0X3J1bjsNCiAJc3Ry
dWN0IHRhc2tfc3RydWN0ICpwcmV2ID0gcC0+cHJldl9ydW47DQorCXN0cnVj
dCB0YXNrX3N0cnVjdCAqbmV4dCA9IHAtPm5leHRfcnVuOw0KKwlzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKnFfaGVhZCA9IHJ1bl9xW3AtPnJ1bl9xXTsNCiANCi0J
LyogcmVtb3ZlIGZyb20gbGlzdCAqLw0KLQluZXh0LT5wcmV2X3J1biA9IHBy
ZXY7DQorCS8qIHJlbW92ZSBsaW5rcyB0byBwICovDQogCXByZXYtPm5leHRf
cnVuID0gbmV4dDsNCi0JLyogYWRkIGJhY2sgdG8gbGlzdCAqLw0KLQlwLT5u
ZXh0X3J1biA9ICZpbml0X3Rhc2s7DQotCXByZXYgPSBpbml0X3Rhc2sucHJl
dl9ydW47DQotCWluaXRfdGFzay5wcmV2X3J1biA9IHA7DQotCXAtPnByZXZf
cnVuID0gcHJldjsNCi0JcHJldi0+bmV4dF9ydW4gPSBwOw0KKwluZXh0LT5w
cmV2X3J1biA9IHByZXY7DQorICAgICAgIAkvKiBpZiBwIHdhcyB0aGUgcV9o
ZWFkLCByZXNldCBxX2hlYWQgKi8NCisJaWYgKHAgPT0gcV9oZWFkKSB7DQor
CSAgICAgICAgaWYgKG5leHQgPT0gcCkNCisJICAgICAgICAgICAgICAgIHJ1
bl9xW3AtPnJ1bl9xXSA9IE5VTEw7DQorCQllbHNlDQorCQkgICAgICAgIHJ1
bl9xW3AtPnJ1bl9xXSA9IG5leHQ7DQorCX0NCisNCisJcC0+cnVuX3EgPSBu
ZXdfcnVuX3E7DQorCXFfaGVhZCA9IHJ1bl9xW3AtPnJ1bl9xXTsNCisJaWYg
KHFfaGVhZCA9PSBOVUxMKSB7DQorCSAgcnVuX3FbcC0+cnVuX3FdID0gcDsN
CisJICBwLT5wcmV2X3J1biA9IHA7DQorCSAgcC0+bmV4dF9ydW4gPSBwOw0K
Kwl9IGVsc2Ugew0KKwkgIHAtPnByZXZfcnVuID0gcV9oZWFkLT5wcmV2X3J1
bjsNCisJICBwLT5uZXh0X3J1biA9IHFfaGVhZDsNCisJICBxX2hlYWQtPnBy
ZXZfcnVuLT5uZXh0X3J1biA9IHA7DQorCSAgcV9oZWFkLT5wcmV2X3J1biA9
IHA7DQorCX0NCisJcC0+bGFzdF9ydW4gPSBqaWZmaWVzOw0KKwlwLT5jb3Vu
dGVyID0gREVGX1BSSU9SSVRZOw0KIH0NCiANCiAvKg0KQEAgLTI1MSwxMiAr
MzA4LDEzIEBADQogI2VuZGlmDQogDQogCS8qDQotCSAqIFJlYWx0aW1lIHBy
b2Nlc3MsIHNlbGVjdCB0aGUgZmlyc3Qgb25lIG9uIHRoZQ0KLQkgKiBydW5x
dWV1ZSAodGFraW5nIHByaW9yaXRpZXMgd2l0aGluIHByb2Nlc3Nlcw0KLQkg
KiBpbnRvIGFjY291bnQpLg0KKwkgKiAgU3BlY2lhbCB0cmVhdG1lbnQgb2Yg
U0NIRURfRklGTyBhbmQgU0NIRURfUlINCiAJICovDQotCWlmIChwLT5wb2xp
Y3kgIT0gU0NIRURfT1RIRVIpDQotCQlyZXR1cm4gMTAwMCArIHAtPnJ0X3By
aW9yaXR5Ow0KKwlpZiAocC0+cG9saWN5ICE9IFNDSEVEX0FEQVBUSVZFKSB7
DQorCSAgICAgICAgaWYgKHAtPnBvbGljeSA9PSBTQ0hFRF9GSUZPIHx8IHAt
PmNvdW50ZXIpDQorCQkgICAgICAgIHJldHVybiAxMDAwICsgcC0+cnRfcHJp
b3JpdHk7DQorCQllbHNlIHJldHVybiAwOw0KKwl9DQogDQogCS8qDQogCSAq
IEdpdmUgdGhlIHByb2Nlc3MgYSBmaXJzdC1hcHByb3hpbWF0aW9uIGdvb2Ru
ZXNzIHZhbHVlDQpAQCAtMjg0LDEwICszNDIsOCBAQA0KIH0NCiANCiAvKg0K
LSAqICAnc2NoZWR1bGUoKScgaXMgdGhlIHNjaGVkdWxlciBmdW5jdGlvbi4g
SXQncyBhIHZlcnkgc2ltcGxlIGFuZCBuaWNlDQotICogc2NoZWR1bGVyOiBp
dCdzIG5vdCBwZXJmZWN0LCBidXQgY2VydGFpbmx5IHdvcmtzIGZvciBtb3N0
IHRoaW5ncy4NCi0gKg0KLSAqIFRoZSBnb3RvIGlzICJpbnRlcmVzdGluZyIu
DQorICogJ3NjaGVkdWxlKCknIGltcGxlbWVudHMgUU5YLXN0eWxlIG11bHRp
LWxldmVsIGZlZWRiYWNrIHNjaGVkdWxpbmcuDQorICogSXQgZG9lcyBydW4t
cXVldWUgbWFpbnRlbmFuY2UgYW5kIHNlbGVjdHMgYSBwcm9jZXNzIHRvIHJ1
bi4NCiAgKg0KICAqICAgTk9URSEhICBUYXNrIDAgaXMgdGhlICdpZGxlJyB0
YXNrLCB3aGljaCBnZXRzIGNhbGxlZCB3aGVuIG5vIG90aGVyDQogICogdGFz
a3MgY2FuIHJ1bi4gSXQgY2FuIG5vdCBiZSBraWxsZWQsIGFuZCBpdCBjYW5u
b3Qgc2xlZXAuIFRoZSAnc3RhdGUnDQpAQCAtMjk1LDcgKzM1MSw4IEBADQog
ICovDQogYXNtbGlua2FnZSB2b2lkIHNjaGVkdWxlKHZvaWQpDQogew0KLQlp
bnQgYzsNCisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG5leHRfbWFp
bnRlbmFuY2UgPSAwOw0KKwlpbnQgYywgcSwgd2VpZ2h0Ow0KIAlzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKiBwOw0KIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwcmV2
LCAqIG5leHQ7DQogCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDA7DQpAQCAt
MzE5LDggKzM3Niw4IEBADQogCWNsaSgpOw0KIAkvKiBtb3ZlIGFuIGV4aGF1
c3RlZCBSUiBwcm9jZXNzIHRvIGJlIGxhc3QuLiAqLw0KIAlpZiAoIXByZXYt
PmNvdW50ZXIgJiYgcHJldi0+cG9saWN5ID09IFNDSEVEX1JSKSB7DQotCQlw
cmV2LT5jb3VudGVyID0gcHJldi0+cHJpb3JpdHk7DQotCQltb3ZlX2xhc3Rf
cnVucXVldWUocHJldik7DQorCQlwcmV2LT5jb3VudGVyID0gREVGX1BSSU9S
SVRZOw0KKwkJcnVuX3FbcHJldi0+cnVuX3FdID0gcHJldi0+bmV4dF9ydW47
DQogCX0NCiAJc3dpdGNoIChwcmV2LT5zdGF0ZSkgew0KIAkJY2FzZSBUQVNL
X0lOVEVSUlVQVElCTEU6DQpAQCAtMzM2LDEwICszOTMsNDAgQEANCiAJCQl9
DQogCQlkZWZhdWx0Og0KIAkJCWRlbF9mcm9tX3J1bnF1ZXVlKHByZXYpOw0K
KwkJCXByZXYtPmNvdW50ZXIgPSBERUZfUFJJT1JJVFk7DQorCQkJcHJldi0+
bGFzdF9ydW4gPSBqaWZmaWVzOw0KIAkJY2FzZSBUQVNLX1JVTk5JTkc6DQog
CX0NCi0JcCA9IGluaXRfdGFzay5uZXh0X3J1bjsNCiAJc3RpKCk7DQorDQor
CS8qDQorCSAqICBUYWtlIGNhcmUgb2YgcmUtbmljZWQgcHJvY2Vzc2VzLCBw
cm9tb3RlIHN0YXJ2aW5nIHByb2Nlc3Nlcw0KKwkgKi8NCisJaWYgKGppZmZp
ZXMgPj0gbmV4dF9tYWludGVuYW5jZSkgew0KKwkgICAgICAgIGZvcl9lYWNo
X3Rhc2socCkgew0KKwkJICAgICAgICBpZiAocC0+cnVuX3Ffc3cgPCBOUl9S
VU5fUVVFVUVTKSB7DQorCQkJICAgICAgICBjbGkoKTsNCisJCQkJaWYgKHAt
Pm5leHRfcnVuKSB7DQorCQkJCSAgICAgICAgcC0+cnVuX3FfbWluID0gcC0+
cnVuX3Ffc3c7DQorCQkJCSAgICAgICAgaWYgKHAtPnJ1bl9xICE9IHAtPnJ1
bl9xX3N3KQ0KKwkJCQkJICAgICAgICBzd2l0Y2hfcnVucXVldWVzKHAsIHAt
PnJ1bl9xX3N3KTsNCisJCQkJfSBlbHNlIHsNCisJCQkJCXAtPnJ1bl9xX21p
biA9IHAtPnJ1bl9xID0gcC0+cnVuX3Ffc3c7DQorCQkJCX0NCisJCQkJcC0+
cnVuX3Ffc3cgPSBOUl9SVU5fUVVFVUVTOw0KKwkJCQlzdGkoKTsNCisJCSAg
ICAgICAgfSBlbHNlIGlmIChwLT5uZXh0X3J1biAmJg0KKwkJCQkgICAoamlm
ZmllcyAtIHAtPmxhc3RfcnVuID49IEhaKSAmJg0KKwkJCQkgICAocC0+cnVu
X3EgPiBwLT5ydW5fcV9taW4gKyAxKSAmJg0KKwkJCQkgICBwcmV2LT5waWQp
DQorCQkJew0KKwkJCSAgICAgICAgY2xpKCk7DQorCQkJCXN3aXRjaF9ydW5x
dWV1ZXMocCwgcC0+cnVuX3EgLSAxKTsNCisJCQkJc3RpKCk7DQorCQkJfQ0K
KwkJfQ0KKwkJbmV4dF9tYWludGVuYW5jZSA9IGppZmZpZXMgKyAoMjAwKkha
LzEwMDApOw0KKwl9DQogCQ0KICNpZmRlZiBfX1NNUF9fDQogCS8qDQpAQCAt
MzUyLDI1ICs0MzksNTMgQEANCiAjZW5kaWYJDQogDQogLyoNCi0gKiBOb3Rl
ISB0aGVyZSBtYXkgYXBwZWFyIG5ldyB0YXNrcyBvbiB0aGUgcnVuLXF1ZXVl
IGR1cmluZyB0aGlzLCBhcw0KLSAqIGludGVycnVwdHMgYXJlIGVuYWJsZWQu
IEhvd2V2ZXIsIHRoZXkgd2lsbCBiZSBwdXQgb24gZnJvbnQgb2YgdGhlDQot
ICogbGlzdCwgc28gb3VyIGxpc3Qgc3RhcnRpbmcgYXQgInAiIGlzIGVzc2Vu
dGlhbGx5IGZpeGVkLg0KKyAqICBOb3RlISB0aGVyZSBtYXkgYXBwZWFyIG5l
dyB0YXNrcyBvbiB0aGUgcnVuLXF1ZXVlIGR1cmluZyB0aGlzLCBhcw0KKyAq
ICBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLiBIb3dldmVyLCB0aGV5IHdpbGwg
YmUgcHV0IG9uIGZyb250IG9mIHRoZQ0KKyAqICBsaXN0LCBzbyBvdXIgbGlz
dCBzdGFydGluZyBhdCAicCIgaXMgZXNzZW50aWFsbHkgZml4ZWQuDQogICov
DQotLyogdGhpcyBpcyB0aGUgc2NoZWR1bGVyIHByb3BlcjogKi8NCisgICAg
ICAgIC8qIHBpY2sgYSBwcm9jZXNzICovDQogCWMgPSAtMTAwMDsNCiAJbmV4
dCA9IGlkbGVfdGFzazsNCi0Jd2hpbGUgKHAgIT0gJmluaXRfdGFzaykgew0K
LQkJaW50IHdlaWdodCA9IGdvb2RuZXNzKHAsIHByZXYsIHRoaXNfY3B1KTsN
Ci0JCWlmICh3ZWlnaHQgPiBjKQ0KLQkJCWMgPSB3ZWlnaHQsIG5leHQgPSBw
Ow0KLQkJcCA9IHAtPm5leHRfcnVuOw0KKwlmb3IgKHEgPSAwOyBxIDwgTlJf
UlVOX1FVRVVFUzsgcSsrKSB7DQorCSAgICAgICAgcCA9IHJ1bl9xW3FdOw0K
KwkJaWYgKCFwKSBjb250aW51ZTsNCisJCWlmICghcC0+cGlkKSB7DQorCQkg
ICAgICAgIHAgPSBwLT5uZXh0X3J1bjsNCisJCQlpZiAoIXAtPnBpZCkgY29u
dGludWU7DQorCQl9DQorCQlkbyB7DQorCQkgICAgICAgIHdlaWdodCA9IGdv
b2RuZXNzKHAsIHByZXYsIHRoaXNfY3B1KTsNCisJCQlpZiAod2VpZ2h0ID4g
Yykgew0KKwkJCSAgICAgICAgYyA9IHdlaWdodDsNCisJCQkgICAgICAgIG5l
eHQgPSBwOw0KKwkJCX0NCisJCQlwID0gcC0+bmV4dF9ydW47DQorCQl9IHdo
aWxlIChwICE9IHJ1bl9xW3FdKTsNCisJCWlmICghYykgew0KKwkJICAgICAg
ICBwID0gcnVuX3FbcV07DQorCQkJZG8gew0KKwkJCSAgICAgICAgcC0+Y291
bnRlciA9IERFRl9QUklPUklUWTsNCisJCQkJcCA9IHAtPm5leHRfcnVuOw0K
KwkJCX0gd2hpbGUgKHAgIT0gcnVuX3FbcV0pOw0KKwkJfQ0KKwkJaWYgKGMg
PiAtMTAwMCkgYnJlYWs7DQogCX0NCisJbmV4dC0+bGFzdF9ydW4gPSBqaWZm
aWVzOw0KIA0KLQkvKiBpZiBhbGwgcnVubmFibGUgcHJvY2Vzc2VzIGhhdmUg
ImNvdW50ZXIgPT0gMCIsIHJlLWNhbGN1bGF0ZSBjb3VudGVycyAqLw0KLQlp
ZiAoIWMpIHsNCi0JCWZvcl9lYWNoX3Rhc2socCkNCi0JCQlwLT5jb3VudGVy
ID0gKHAtPmNvdW50ZXIgPj4gMSkgKyBwLT5wcmlvcml0eTsNCisJLyogUG9z
c2libHkgZGVtb3RlIHRoZSBwcmV2aW91cyB0YXNrICovDQorCWlmIChwcmV2
LT5waWQgJiYgbmV4dC0+cGlkICYmDQorCSAgICAobmV4dCAhPSBwcmV2KSAm
Jg0KKwkgICAgcHJldi0+bmV4dF9ydW4gJiYNCisJICAgICFwcmV2LT5jb3Vu
dGVyICYmDQorCSAgICAocSA9PSBwcmV2LT5ydW5fcSkgJiYNCisJICAgIChx
IDwgTlJfUlVOX1FVRVVFUyAtIDEpICYmDQorCSAgICAocHJldi0+cG9saWN5
ID09IFNDSEVEX0FEQVBUSVZFKSkNCisJew0KKwkgICAgICAgIGNsaSgpOw0K
KwkJc3dpdGNoX3J1bnF1ZXVlcyhwcmV2LCBwcmV2LT5ydW5fcSArIDEpOw0K
KwkJc3RpKCk7DQogCX0NCisNCiAjaWZkZWYgX19TTVBfXw0KIAkvKg0KIAkg
KglBbGxvY2F0ZSBwcm9jZXNzIHRvIENQVQ0KQEAgLTExMzQsNyArMTI0OSw3
IEBADQogCQkJcC0+Y291bnRlciA9IDA7DQogCQkJbmVlZF9yZXNjaGVkID0g
MTsNCiAJCX0NCi0JCWlmIChwLT5wcmlvcml0eSA8IERFRl9QUklPUklUWSkN
CisJCWlmIChwLT5ydW5fcSA+IERFRl9SVU5fUVVFVUUpDQogCQkJa3N0YXQu
Y3B1X25pY2UgKz0gdXNlcjsNCiAJCWVsc2UNCiAJCQlrc3RhdC5jcHVfdXNl
ciArPSB1c2VyOw0KQEAgLTExNzAsNyArMTI4NSw3IEBADQogCQkJfQ0KIAkJ
CXVwZGF0ZV9vbmVfcHJvY2VzcyhwLCB0aWNrcywgdXRpbWUsIHN0aW1lKTsN
CiANCi0JCQlpZiAocC0+cHJpb3JpdHkgPCBERUZfUFJJT1JJVFkpDQorCQkJ
aWYgKHAtPnJ1bl9xID4gREVGX1JVTl9RVUVVRSkNCiAJCQkJa3N0YXQuY3B1
X25pY2UgKz0gdXRpbWU7DQogCQkJZWxzZQ0KIAkJCQlrc3RhdC5jcHVfdXNl
ciArPSB1dGltZTsNCkBAIC0xMzgwLDE2ICsxNDk1LDE2IEBADQogCWlmIChw
b2xpY3kgPCAwKQ0KIAkJcG9saWN5ID0gcC0+cG9saWN5Ow0KIAllbHNlIGlm
IChwb2xpY3kgIT0gU0NIRURfRklGTyAmJiBwb2xpY3kgIT0gU0NIRURfUlIg
JiYNCi0JCSBwb2xpY3kgIT0gU0NIRURfT1RIRVIpDQorCQkgcG9saWN5ICE9
IFNDSEVEX0FEQVBUSVZFKQ0KIAkJcmV0dXJuIC1FSU5WQUw7DQogCQ0KIAkv
Kg0KIAkgKiBWYWxpZCBwcmlvcml0aWVzIGZvciBTQ0hFRF9GSUZPIGFuZCBT
Q0hFRF9SUiBhcmUgMS4uOTksIHZhbGlkDQotCSAqIHByaW9yaXR5IGZvciBT
Q0hFRF9PVEhFUiBpcyAwLg0KKwkgKiBwcmlvcml0eSBmb3IgU0NIRURfQURB
UFRJVkUgaXMgMC4NCiAJICovDQogCWlmIChscC5zY2hlZF9wcmlvcml0eSA8
IDAgfHwgbHAuc2NoZWRfcHJpb3JpdHkgPiA5OSkNCiAJCXJldHVybiAtRUlO
VkFMOw0KLQlpZiAoKHBvbGljeSA9PSBTQ0hFRF9PVEhFUikgIT0gKGxwLnNj
aGVkX3ByaW9yaXR5ID09IDApKQ0KKwlpZiAoKHBvbGljeSA9PSBTQ0hFRF9B
REFQVElWRSkgIT0gKGxwLnNjaGVkX3ByaW9yaXR5ID09IDApKQ0KIAkJcmV0
dXJuIC1FSU5WQUw7DQogDQogCWlmICgocG9saWN5ID09IFNDSEVEX0ZJRk8g
fHwgcG9saWN5ID09IFNDSEVEX1JSKSAmJiAhc3VzZXIoKSkNCkBAIC0xNDAw
LDkgKzE1MTUsMTAgQEANCiANCiAJcC0+cG9saWN5ID0gcG9saWN5Ow0KIAlw
LT5ydF9wcmlvcml0eSA9IGxwLnNjaGVkX3ByaW9yaXR5Ow0KKwlwLT5ydW5f
cV9zdyA9IHAtPnJ1bl9xX21pbjsNCiAJY2xpKCk7DQogCWlmIChwLT5uZXh0
X3J1bikNCi0JCW1vdmVfbGFzdF9ydW5xdWV1ZShwKTsNCisJICAgICAgICBy
dW5fcVtwLT5ydW5fcV0gPSBwLT5uZXh0X3J1bjsNCiAJc3RpKCk7DQogCW5l
ZWRfcmVzY2hlZCA9IDE7DQogCXJldHVybiAwOw0KQEAgLTE0NTksNyArMTU3
NSw3IEBADQogYXNtbGlua2FnZSBpbnQgc3lzX3NjaGVkX3lpZWxkKHZvaWQp
DQogew0KIAljbGkoKTsNCi0JbW92ZV9sYXN0X3J1bnF1ZXVlKGN1cnJlbnQp
Ow0KKwlydW5fcVtjdXJyZW50LT5ydW5fcV0gPSBjdXJyZW50LT5uZXh0X3J1
bjsNCiAJY3VycmVudC0+Y291bnRlciA9IDA7DQogCW5lZWRfcmVzY2hlZCA9
IDE7DQogCXN0aSgpOw0KQEAgLTE0NzIsNyArMTU4OCw3IEBADQogCSAgICAg
IGNhc2UgU0NIRURfRklGTzoNCiAJICAgICAgY2FzZSBTQ0hFRF9SUjoNCiAJ
CXJldHVybiA5OTsNCi0JICAgICAgY2FzZSBTQ0hFRF9PVEhFUjoNCisJICAg
ICAgY2FzZSBTQ0hFRF9BREFQVElWRToNCiAJCXJldHVybiAwOw0KIAl9DQog
DQpAQCAtMTQ4NSw3ICsxNjAxLDcgQEANCiAJICAgICAgY2FzZSBTQ0hFRF9G
SUZPOg0KIAkgICAgICBjYXNlIFNDSEVEX1JSOg0KIAkJcmV0dXJuIDE7DQot
CSAgICAgIGNhc2UgU0NIRURfT1RIRVI6DQorCSAgICAgIGNhc2UgU0NIRURf
QURBUFRJVkU6DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KQEAgLTE1NTMsNyAr
MTY2OSw3IEBADQogCQlyZXR1cm4gLUVJTlZBTDsNCiANCiAJaWYgKHQudHZf
c2VjID09IDAgJiYgdC50dl9uc2VjIDw9IDIwMDAwMDBMICYmDQotCSAgICBj
dXJyZW50LT5wb2xpY3kgIT0gU0NIRURfT1RIRVIpIHsNCisJICAgIGN1cnJl
bnQtPnBvbGljeSAhPSBTQ0hFRF9BREFQVElWRSkgew0KIAkJLyoNCiAJCSAq
IFNob3J0IGRlbGF5IHJlcXVlc3RzIHVwIHRvIDIgbXMgd2lsbCBiZSBoYW5k
bGVkIHdpdGgNCiAJCSAqIGhpZ2ggcHJlY2lzaW9uIGJ5IGEgYnVzeSB3YWl0
IGZvciBhbGwgcmVhbC10aW1lIHByb2Nlc3Nlcy4NCkBAIC0xNjQzLDcgKzE3
NTksNyBAQA0KIAkgKglXZSBoYXZlIHRvIGRvIGEgbGl0dGxlIG1hZ2ljIHRv
IGdldCB0aGUgZmlyc3QNCiAJICoJcHJvY2VzcyByaWdodCBpbiBTTVAgbW9k
ZS4NCiAJICovDQotCWludCBjcHU9c21wX3Byb2Nlc3Nvcl9pZCgpOw0KKwlp
bnQgaSwgY3B1PXNtcF9wcm9jZXNzb3JfaWQoKTsNCiAjaWZuZGVmIF9fU01Q
X18JDQogCWN1cnJlbnRfc2V0W2NwdV09JmluaXRfdGFzazsNCiAjZWxzZQ0K
QEAgLTE2NTQsNCArMTc3MCw5IEBADQogCWluaXRfYmgoVElNRVJfQkgsIHRp
bWVyX2JoKTsNCiAJaW5pdF9iaChUUVVFVUVfQkgsIHRxdWV1ZV9iaCk7DQog
CWluaXRfYmgoSU1NRURJQVRFX0JILCBpbW1lZGlhdGVfYmgpOw0KKw0KKwlm
b3IgKGkgPSAwOyBpIDwgTlJfUlVOX1FVRVVFUzsgaSsrKQ0KKwkgICAgICAg
IHJ1bl9xW2ldID0gTlVMTDsNCisJcnVuX3FbREVGX1JVTl9RVUVVRV0gPSAm
aW5pdF90YXNrOw0KKwlwcmludGsoIlFOWC1zdHlsZSBzY2hlZHVsaW5nIHYx
LjA2IDxhbWNrZWVAcG9ib3hlcy5jb20+XG4iKTsNCiB9DQotLS0gbGludXgv
a2VybmVsL2ZvcmsuYy5vcmlnCVR1ZSBBdWcgIDUgMjM6Mzg6NDMgMTk5Nw0K
KysrIGxpbnV4L2tlcm5lbC9mb3JrLmMJU3VuIEF1ZyAxMCAyMTo0NToyMyAx
OTk3DQpAQCAtMjE0LDcgKzIxNCw3IEBADQogew0KIAlpbnQgbnI7DQogCWlu
dCBlcnJvciA9IC1FTk9NRU07DQotCXVuc2lnbmVkIGxvbmcgbmV3X3N0YWNr
Ow0KKwl1bnNpZ25lZCBsb25nIG5ld19zdGFjaywgdDsNCiAJc3RydWN0IHRh
c2tfc3RydWN0ICpwOw0KIA0KIAlwID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAq
KSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOw0KQEAgLTI2Miw2
ICsyNjIsMjIgQEANCiAJcC0+bG9ja19kZXB0aCA9IDE7DQogI2VuZGlmDQog
CXAtPnN0YXJ0X3RpbWUgPSBqaWZmaWVzOw0KKwljdXJyZW50LT5ucl9mb3Jr
cysrOw0KKwlwLT5ucl9mb3JrcyA9IDA7DQorCS8qDQorCSAqICBJZiBhIHBy
b2Nlc3MgZm9ya3MgYSBsb3QsIGl0cyBjaGlsZHJlbiB3aWxsIHN0YXJ0IG91
dCBvbiBhIGhpZ2hlcg0KKwkgKiAgcnVuLXF1ZXVlLiAgUGVyaGFwcyB1c2Vm
dWwgZm9yIGRlZmVuZGluZyBmb3JrLWJvbWJzLCBhbmQgaGVscHMgdGhlDQor
CSAqICBzY2hlZHVsZXIgdG8gZGVhbCB3aXRoIHRhc2tzIGxpa2UgIm1ha2Ui
Lg0KKwkgKi8NCisJaWYgKChwLT5wb2xpY3kgPT0gU0NIRURfQURBUFRJVkUp
ICYmDQorCSAgICAocC0+cnVuX3EgPCBOUl9SVU5fUVVFVUVTIC0gMSkpDQor
ICAgICAgICB7DQorCSAgICAgICAgdCA9IGN1cnJlbnQtPnV0aW1lICsgY3Vy
cmVudC0+c3RpbWU7DQorCQl0IC89IDE1KkhaOw0KKwkJaWYgKCF0IHx8IChj
dXJyZW50LT5ucl9mb3JrcyAvIHQpKQ0KKwkJICAgICAgICBwLT5ydW5fcSsr
Ow0KKwl9DQorCXAtPnJ1bl9xX3N3ID0gTlJfUlVOX1FVRVVFUzsNCiAJdGFz
a1tucl0gPSBwOw0KIAlTRVRfTElOS1MocCk7DQogCW5yX3Rhc2tzKys7DQot
LS0gbGludXgvbW0vdm1zY2FuLmMub3JpZwlUdWUgQXVnICA1IDIzOjM4OjQz
IDE5OTcNCisrKyBsaW51eC9tbS92bXNjYW4uYwlUdWUgQXVnICA1IDIzOjM4
OjQzIDE5OTcNCkBAIC00NjUsNiArNDY1LDcgQEANCiAJY3VycmVudC0+cHJp
b3JpdHkgPSAzMjsgIC8qIEZpeG1lIC0tLSB3ZSBuZWVkIHRvIHN0YW5kYXJk
aXNlIG91cg0KIAkJCQkgICAgbmFtaW5ncyBmb3IgUE9TSVguNCByZWFsdGlt
ZSBzY2hlZHVsaW5nDQogCQkJCSAgICBwcmlvcml0aWVzLiAgKi8NCisJY3Vy
cmVudC0+cnVuX3Ffc3cgPSAwOw0KIA0KIAlpbml0X3N3YXBfdGltZXIoKTsN
CiAJDQotLS0gbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oLm9yaWcJVHVl
IEF1ZyAgNSAyMzozODo0MyAxOTk3DQorKysgbGludXgvaW5jbHVkZS9saW51
eC9zY2hlZC5oCVR1ZSBBdWcgIDUgMjM6NDM6NDUgMTk5Nw0KQEAgLTg3LDEw
ICs4NywxMyBAQA0KICNkZWZpbmUgVEFTS19TVE9QUEVECQk0DQogI2RlZmlu
ZSBUQVNLX1NXQVBQSU5HCQk1DQogDQorI2RlZmluZSBOUl9SVU5fUVVFVUVT
CQkzMgkvKiB0aGUgc2NoZWR1bGVyIHVzZXMgMzIgcnVuLXF1ZXVlcyAqLw0K
KyNkZWZpbmUgREVGX1JVTl9RVUVVRQkJMTUJLyogZGVmYXVsdCBydW4tcXVl
dWUgKi8NCisNCiAvKg0KICAqIFNjaGVkdWxpbmcgcG9saWNpZXMNCiAgKi8N
Ci0jZGVmaW5lIFNDSEVEX09USEVSCQkwDQorI2RlZmluZSBTQ0hFRF9BREFQ
VElWRQkJMA0KICNkZWZpbmUgU0NIRURfRklGTwkJMQ0KICNkZWZpbmUgU0NI
RURfUlIJCTINCiANCkBAIC0yNDQsNiArMjQ3LDkgQEANCiAJc3RydWN0IG1t
X3N0cnVjdCAqbW07DQogLyogc2lnbmFsIGhhbmRsZXJzICovDQogCXN0cnVj
dCBzaWduYWxfc3RydWN0ICpzaWc7DQorLyogUU5YLXN0eWxlIHNjaGVkdWxl
ciAqLw0KKyAgICAgICAgdW5zaWduZWQgbG9uZyBsYXN0X3J1biwgbnJfZm9y
a3M7DQorICAgICAgICB1bnNpZ25lZCBpbnQgcnVuX3EsIHJ1bl9xX21pbiwg
cnVuX3Ffc3c7DQogI2lmZGVmIF9fU01QX18NCiAJaW50IHByb2Nlc3NvcjsN
CiAJaW50IGxhc3RfcHJvY2Vzc29yOw0KQEAgLTI3NSw3ICsyODEsNyBAQA0K
ICAqLw0KICNkZWZpbmUgX1NUS19MSU0JKDgqMTAyNCoxMDI0KQ0KIA0KLSNk
ZWZpbmUgREVGX1BSSU9SSVRZCSgyMCpIWi8xMDApCS8qIDIwMCBtcyB0aW1l
IHNsaWNlcyAqLw0KKyNkZWZpbmUgREVGX1BSSU9SSVRZCSgyMDAqSFovMTAw
MCkJLyogMjAwIG1zIHRpbWUgc2xpY2VzICovDQogDQogLyoNCiAgKiAgSU5J
VF9UQVNLIGlzIHVzZWQgdG8gc2V0IHVwIHRoZSBmaXJzdCB0YXNrIHRhYmxl
LCB0b3VjaCBhdA0KQEAgLTI5Myw3ICsyOTksNyBAQA0KIC8qIHN1cHBsIGdy
cHMqLyB7Tk9HUk9VUCx9LCBcDQogLyogcHJvYyBsaW5rcyovICZpbml0X3Rh
c2ssJmluaXRfdGFzayxOVUxMLE5VTEwsTlVMTCxOVUxMLCBcDQogLyogdWlk
IGV0YyAqLwkwLDAsMCwwLDAsMCwwLDAsIFwNCi0vKiB0aW1lb3V0ICovCTAs
U0NIRURfT1RIRVIsMCwwLDAsMCwwLDAsMCwgXA0KKy8qIHRpbWVvdXQgKi8J
MCxTQ0hFRF9BREFQVElWRSwwLDAsMCwwLDAsMCwwLCBcDQogLyogdGltZXIg
Ki8JeyBOVUxMLCBOVUxMLCAwLCAwLCBpdF9yZWFsX2ZuIH0sIFwNCiAvKiB1
dGltZSAqLwkwLDAsMCwwLDAsIFwNCiAvKiBmbHQgKi8JMCwwLDAsMCwwLDAs
IFwNCkBAIC0zMDksNiArMzE1LDcgQEANCiAvKiBmaWxlcyAqLwkmaW5pdF9m
aWxlcywgXA0KIC8qIG1tICovCSZpbml0X21tLCBcDQogLyogc2lnbmFscyAq
LwkmaW5pdF9zaWduYWxzLCBcDQorLyogUU5YIHNjaGVkICovIDAsIDAsIERF
Rl9SVU5fUVVFVUUsIERFRl9SVU5fUVVFVUUsIE5SX1JVTl9RVUVVRVMgXA0K
IH0NCiANCiBleHRlcm4gc3RydWN0ICAgbW1fc3RydWN0IGluaXRfbW07DQo=
--12583424-2086413006-871273375=:550
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="QNX-scheduler-2.0.31-pre3-1.patch.README"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.95.970810222255.550D@titan.acua.org>
Content-Description:

ICAgICAgICAgICAgICAgICAgIFFOWC1zdHlsZSBTY2hlZHVsaW5nIHYxLjA2
IGZvciBMaW51eCAyLjANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnkNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBZGFtIE1jS2VlDQoNCg0KU3BlY2lhbCBub3RlOiBBIGdyZWF0IG1hbnkg
dGhhbmtzIHRvIFNjb3R0IFdhbGRlIDxzY290dEBzYXNrYXRvb24uY29tPiB3
aG8NCiAgICAgICAgICAgICAgZ2F2ZSBtZSBhY2Nlc3MgdG8gYSBkdWFsLVBd
Wy8yNjYgbWFjaGluZSBzbyBJIGNvdWxkIGdldCB0aGlzDQogICAgICAgICAg
ICAgIHBhdGNoIHdvcmtpbmcgd2l0aCBTTVAuICBZb3UgZGEgbWFuLCBTY290
dCENCiAgDQoNCklOVFJPRFVDVElPTg0KDQpUaGlzIHBhdGNoIHByb3ZpZGVz
IFFOWC1zdHlsZSBzY2hlZHVsaW5nIGZvciBMaW51eCAyLjAuICBUaGUgaW50
ZW50IGlzIHRvDQpwcm92aWRlIG1vcmUgZmxleGlibGUgYW5kIHBvd2VyZnVs
IHNjaGVkdWxpbmcsIGFuZCB0byBwcm92aWRlIGltcHJvdmVkDQppbnRlcmFj
dGl2ZSBwZXJmb3JtYW5jZSB1bmRlciBoZWF2eSBDUFUgbG9hZC4gIFRoaXMg
c2NoZWR1bGVyIGRvZXMgbm90IHByb3ZpZGUNCmluY3JlYXNlZCB0aHJvdWdo
cHV0IGhvd2V2ZXIuICBJbiBmYWN0LCB0aGVyZSBpcyBhIHZlcnkgc21hbGwg
cHJpY2UgdG8gcGF5IGluDQp0ZXJtcyBvZiB0aHJvdWdocHV0IGluIG9yZGVy
IHRvIGFjaGlldmUgdGhlIGFmb3JlbWVudGlvbmVkIGdvYWxzLiAgU28gdGhh
dCB5b3UNCmNhbiBhcHByZWNpYXRlIGV4YWN0bHkgd2hhdCB0aGUgcGF0Y2gg
ZG9lcywgSSB3aWxsIGdpdmUgYW4gKG92ZXJzaW1wbGlmaWVkKQ0KZXhwbGFu
YXRpb24gb2YgaG93IHNjaGVkdWxpbmcgaXMgbm9ybWFsbHkgZG9uZSB1bmRl
ciBMaW51eCAyLjAsIGZvbGxvd2VkIGJ5IGENCmRlc2NyaXB0aW9uIG9mIHRo
ZSBRTlggc2NoZWR1bGVyIChhcyBpbXBsZW1lbnRlZCkuICBJZiB5b3UgdXNl
IHRoaXMgcGF0Y2gsIHlvdQ0Kd2lsbCBuZWVkIHRvIHJlLXRoaW5rIGhvdyB5
b3UgcmUtbmljZSB0YXNrcywgc28gYSBicmllZiBkaXNjdXNzaW9uIG9mDQpy
ZS1uaWNpbmcgdGFza3MgaXMgZ2l2ZW4uDQoNCg0KTk9STUFMIFNDSEVEVUxJ
TkcgVU5ERVIgTElOVVggMi4wDQoNClRoZXJlIGlzIGEgc2luZ2xlIHJ1bi1x
dWV1ZS4gIEVhY2ggdGFzayBtYXkgYmUgYXNzaWduZWQgYSBwcmlvcml0eSBv
cg0KIm5pY2VuZXNzIiB3aGljaCB3aWxsIGRldGVybWluZSBob3cgbG9uZyBh
IHRpbWVzbGljZSBpdCBnZXRzLiAgRm9yIGV4YW1wbGUsIGlmDQp5b3UgZ2l2
ZSBhIHRhc2sgYSBuaWNlbmVzcyBvZiAtMjAsIHRoZSBrZXJuZWwgd2lsbCBu
b3QgZGlyZWN0bHkgdXNlIHRoZSAtMjAuDQpidXQgd2lsbCBpbnN0ZWFkIHVz
ZSB0aGlzIG51bWJlciB0byBkZXRlcm1pbmUgaG93IGxvbmcvb2Z0ZW4gdGhl
IHRhc2sgc2hvdWxkDQpiZSBhbGxvd2VkIHRvIHJ1bi4gIFRoZSAiY291bnRl
ciIgYXR0cmlidXRlIG9mIGVhY2ggdGFzayBkZXRlcm1pbmVzIGhvdyBtdWNo
DQp0aW1lIGl0IGhhcyBsZWZ0IGluIGl0cyB0aW1lc2xpY2UuICBBZnRlciBl
dmVyeSB0YXNrIG9uIHRoZSBydW4tcXVldWUgaGFzIHVzZWQNCnVwIGl0cyB0
aW1lc2xpY2UgKGNvdW50ZXIgPSAwKSwgdGhlIGNvdW50ZXIgZm9yIGVhY2gg
dGFzayBpcyByZXNldCB0byB0aGUNCm9yaWdpbmFsIHByaW9yaXR5LiAgVGhp
cyBzY2hlZHVsZXIgaGFzIHNvbWUgbmljZSBwcm9wZXJ0aWVzOg0KDQoJbyBJ
dCBvYmV5cyB0aGUgS0lTUyBwcmluY2lwbGUgKEtlZXAgSXQgU2ltcGxlLCBT
dHVwaWQhKS4gIFRoZXJlIGlzDQogICAgICAgICAgYWx3YXlzIGEgZGFuZ2Vy
IHRoYXQgdHJ5aW5nIHRvIGdldCAidG9vIGNsZXZlciIgd2lsbCBpbnRyb2R1
Y2UNCiAgICAgICAgICB1bmV4cGVjdGVkIHByb2JsZW1zLg0KDQoJbyBJdCBn
dWFyYW50ZWVzIHRoYXQgbm8gdGFzayB3aWxsIHN0YXJ2ZS4NCg0KCW8gSXQg
YWxsb3dzIHRoZSB1c2VyIHRvIGhhdmUgc29tZSBjb250cm9sIG92ZXIgdGhl
IHNjaGVkdWxpbmcuDQoNClNvbWUgZHJhd2JhY2tzOg0KDQoJbyBJbnRlcmFj
dGl2ZSBwZXJmb3JtYW5jZSB1bmRlciBoZWF2eSBDUFUgbG9hZCBpcyBub3Qg
Z29vZC4NCg0KCW8gTGltaXRlZCBjb250cm9sIG92ZXIgc2NoZWR1bGluZy4N
Cg0KDQpUSEUgUU5YIFNDSEVEVUxFUg0KDQpNeSB1bmRlcnN0YW5kaW5nIG9m
IHRoZSBRTlggc2NoZWR1bGVyIGlzIGJhc2VkIGVudGlyZWx5IG9uIGEgc2hv
cnQgYmx1cmIgSQ0KcmVhZCBhYm91dCBpdCwgc28gSSB3b3VsZCBub3QgYmUg
c3VycHJpc2VkIHRvIGZpbmQgdGhhdCB0aGUgZm9sbG93aW5nDQpkaXNjdXNz
aW9uIGNvbnRhaW5zIGVycm9ycyBhbmQvb3Igb21pc3Npb25zLiAgSG93ZXZl
ciwgcGxlYXNlIGRvIHJlYWQNCm9uLi4uIDotKQ0KDQpUaGVyZSBhcmUgMzIg
c2VwYXJhdGUgcnVuLXF1ZXVlcywgbnVtYmVyZWQgMC0zMS4gIFdoZW4gdGhl
IHNjaGVkdWxlciBpcw0KbG9va2luZyBmb3IgYSB0YXNrIHRvIHJ1biwgaXQg
d2lsbCBzZWxlY3QgYSB0YXNrIGZyb20gdGhlIGxvd2VzdC1udW1iZXJlZA0K
cnVuLXF1ZXVlIHRoYXQgaGFzIGEgcnVubmFibGUgdGFzayBvbiBpdC4gIFRo
aXMgbWVhbnMgdGhhdCwgZm9yIGV4YW1wbGUsIGENCnRhc2sgb24gcnVuLXF1
ZXVlIDEgd2lsbCAqbm90KiBydW4gdW50aWwgdGhlcmUgYXJlIG5vIHRhc2tz
IG9uIHJ1bi1xdWV1ZSAwDQp0aGF0IHdhbnQgdG8gcnVuLiAgVGhlIGluaXQg
dGFzayBoYXMgYSBtaW5pbXVtIHJ1bi1xdWV1ZSBvZiAxNS4gIE5ld2x5DQpj
cmVhdGVkIHRhc2tzIGluaGVyaXQgdGhlaXIgbWluaW11bSBydW4tcXVldWUg
ZnJvbSB0aGVpciBwYXJlbnQuDQoNClRocmVlIHNjaGVkdWxpbmcgcG9saWNp
ZXMgYXJlIHN1cHBvcnRlZDoNCg0KLS0tIEZJRk8NCg0KVGhlIHNlbGVjdGVk
IHRhc2sgd2lsbCBydW4gdW50aWw6DQoNCglvIGl0IGJsb2Nrcw0KCSAgLU9S
LQ0KCW8gYSB0YXNrIG9uIGEgbG93ZXItbnVtYmVyZWQgcnVuLXF1ZXVlIHdh
bnRzIHRvIHJ1bg0KDQotLS0gUm91bmQtUm9iaW4NCg0KVGhlIHNlbGVjdGVk
IHRhc2sgd2lsbCBydW4gdW50aWw6DQoNCglvIGl0IGJsb2Nrcw0KCSAgLU9S
LQ0KCW8gYSB0YXNrIG9uIGEgbG93ZXItbnVtYmVyZWQgcnVuLXF1ZXVlIHdh
bnRzIHRvIHJ1bg0KCSAgLU9SDQoJbyAyMDBtcyBoYXZlIHBhc3NlZA0KDQot
LS0gQWRhcHRpdmUNCg0KVGhpcyBpcyB0aGUgZGVmYXVsdCBwb2xpY3ksIGFu
ZCB0aGUgbW9zdCBpbnRlcmVzdGluZyBwb2xpY3kuICBBZGFwdGl2ZQ0Kc2No
ZWR1bGluZyBpcyBsaWtlIFJvdW5kLVJvYmluLCBidXQgaXQgYWxzbyB0cmll
cyB0byAiaW50ZWxsaWdlbnRseSIgbW92ZQ0KdGFza3MgYmV0d2VlbiBydW4t
cXVldWVzIGluIG9yZGVyIHRvIHByb3ZpZGUgZ29vZCBpbnRlcmFjdGl2ZSBy
ZXNwb25zZS4NCkhlcmUgYXJlIHRoZSBydWxlcyBmb3IgYWRhcHRpdmUgc2No
ZWR1bGluZzoNCg0KCW8gRWFjaCB0YXNrIGhhcyBhICdtaW5pbXVtIHJ1bi1x
dWV1ZScgYXR0cmlidXRlIHRoYXQgdGVsbHMgdGhlDQoJICBzY2hlZHVsZXIg
dGhlIGxvd2VzdC1udW1iZXJlZCBydW4tcXVldWUgdGhlIHRhc2sgY2FuIGJl
IG9uLg0KCSAgIk5vcm1hbCIgdGFza3MgaGF2ZSBtaW5pbXVtIHJ1bi1xdWV1
ZSA9IDE1Lg0KDQoJbyBXaGVuIGEgdGFzayBpcyBpbml0aWFsbHkgc3RhcnRl
ZCwgaXQgaW5oZXJpdHMgaXRzIGN1cnJlbnQgYW5kDQogICAgICAgICAgbWlu
aW11bSBydW4tcXVldWUgZnJvbSBpdHMgcGFyZW50LiAgU29tZXRoaW5nIEkg
aGF2ZSBhZGRlZDogaWYgdGhlDQoJICBwYXJlbnQgaXMgZm9yaygpJ2luZyBh
IGxvdCAoYXQgbGVhc3Qgb25jZSBwZXIgMTUgc2Vjb25kcyksIGl0cw0KCSAg
Y2hpbGRyZW4gd2lsbCBzdGFydCBvdXQgZGVtb3RlZCAxIHJ1bi1xdWV1ZSAo
aS5lLiBzYW1lIG1pbi1ydW4tcXVldWUNCgkgIGFzIHRoZSBwYXJlbnQsIGJ1
dCBjdXJyZW50IGN1cnJlbnQtcnVuLXF1ZXVlID0gbWluLXJ1bi1xdWV1ZSAr
IDEpLg0KDQoJbyBJZiBhIHRhc2sgYmxvY2tzIChkb2VzIG5vdCB1c2UgYWxs
IG9mIGl0cyB0aW1lc2xpY2UpLCBpdCB3aWxsDQoJICBiZSBwbGFjZWQgb24g
aXRzIG1pbmltdW0gcnVuLXF1ZXVlIHdoZW4gaXQgYmVjb21lcyBydW5uYWJs
ZSBhZ2Fpbi4NCgkgIEkgaGF2ZSBpbXBsZW1lbnRlZCBhIHNsaWdodCB2YXJp
YXRpb24gb24gdGhpczogdGhlIHRhc2sgd2lsbCBiZQ0KCSAgcHJvbW90ZWQg
YXQgbW9zdCBvbmUgcnVuLXF1ZXVlIGZvciBldmVyeSAxMDBtcyB0aGF0IGl0
IGJsb2Nrcy4gIEkNCgkgIGhvcGUgdGhhdCB0aGlzIG1ha2VzIGl0IGVmZmVj
dGl2ZWx5IHBvaW50bGVzcyBmb3IgYSB0YXNrIHRvIGRvDQoJICBzeXN0ZW0g
Y2FsbHMganVzdCB0byByZWdhaW4gaXRzIENQVSBwcmlvcml0eS4gIEl0IHNo
b3VsZCBhbHNvIHJlc3VsdA0KCSAgaW4gZ2VuZXJhbGx5IGZhaXJlciBzY2hl
ZHVsaW5nLg0KDQoJbyBJZiBhIHRhc2sgdXNlcyB1cCBhbGwgb2YgaXRzIHRp
bWVzbGljZSwgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZQ0KCSAgb3RoZXIg
dGFzayBvbiB0aGUgc2FtZSBydW4tcXVldWUgdGhhdCB3YW50cyB0byBydW4s
IGl0cyBydW4tcXVldWUNCgkgIHdpbGwgYmUgaW5jcmVtZW50ZWQgKCJkZW1v
dGlvbiIpLg0KDQoJbyBJZiBhIHRhc2sgaGFzIGJlZW4gc3RhcnZpbmcgZm9y
IG9uZSBzZWNvbmQsIGFuZCBpdHMgY3VycmVudCBydW4tcXVldWUNCgkgIGlz
IGdyZWF0ZXIgdGhhbiBpdHMgbWluaW11bSBydW4tcXVldWUsIGl0cyBydW4t
cXVldWUgd2lsbCBiZQ0KCSAgZGVjcmVtZW50ZWQgKCJwcm9tb3Rpb24iKS4g
IFNvbWV0aGluZyBJIGhhdmUgYWRkZWQ6IGEgdGFzayBjYW5ub3QNCgkgIGJl
IHByb21vdGVkIGJhY2sgdG8gaXRzIG1pbi1ydW4tcXVldWUgYmVjYXVzZSBv
ZiBzdGFydmF0aW9uIC0tIGl0DQoJICBtdXN0IGJsb2NrIChmb3IgYXQgbGVh
c3QgMTAwbXMpIHRvIGdldCBiYWNrIHRvIGl0cyBtaW4tcnVuLXF1ZXVlLg0K
DQpUaGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZXNlIHJ1bGVzIGlzIHRoYXQg
dGFza3Mgd2l0aCBoZWF2eSBDUFUgcmVxdWlyZW1lbnRzDQp3aWxsIHRlbmQg
dG8gbWlncmF0ZSB0byBoaWdoZXItbnVtYmVyZWQgcnVuLXF1ZXVlcywgd2hl
cmVhcyB0YXNrcyB3aXRoIGxpZ2h0DQpDUFUgcmVxdWlyZW1lbnRzIHdpbGwg
dGVuZCB0byBzdGF5IG9uIGxvd2VyLW51bWJlcmVkIHJ1bi1xdWV1ZXMuICBU
aGlzIGlzDQoqZ29vZCogZm9yIGludGVyYWN0aXZlIHBlcmZvcm1hbmNlIQ0K
DQoNClJFLU5JQ0lORyBPRiBUQVNLUyBXSVRIIFFOWCBTQ0hFRFVMSU5HDQoN
CldoZW4geW91IHJlLW5pY2UgYSB0YXNrLCB5b3UgYXJlIGFjdHVhbGx5IGNo
YW5naW5nIGl0cyBtaW5pbXVtIHJ1bi1xdWV1ZS4gIEZvcg0KZXhhbXBsZSwg
aWYgeW91IGdpdmUgeW91ciBYLXNlcnZlciBhIG5pY2VuZXNzIG9mIC0yMCwg
eW91IGFyZSBhY3R1YWxseSBzZXR0aW5nDQppdHMgbWluaW11bSBydW4tcXVl
dWUgdG8gMC4gIElmIHlvdSBnaXZlIGl0IGEgbmljZW5lc3Mgb2YgMjAsIHlv
dSBhcmUgc2V0dGluZw0KaXRzIG1pbmltdW0gcnVuLXF1ZXVlIHRvIDMxLiAg
VGhlIHByaW9yaXR5IG9mIGEgdGFzayBpcyBpdHMgKmN1cnJlbnQqDQpydW4t
cXVldWUgKHdoaWNoIG1heSBiZSBsYXJnZXIgdGhhbiBpdHMgbWluaW11bSBy
dW4tcXVldWUgaW4gdGhlIGNhc2Ugb2YgYW4NCmFkYXB0aXZlbHkgc2NoZWR1
bGVkIHRhc2spLg0KDQpZb3UgbXVzdCB0YWtlIGNhcmUgd2hlbiByZS1uaWNp
bmcgdGFza3MuICBVbmxpa2UgdGhlIG5vcm1hbCBMaW51eCBzY2hlZHVsZXIs
DQp0aGlzIHNjaGVkdWxlciBkb2VzIG5vdCBndWFyYW50ZWUgdGFza3Mgd2ls
bCBub3Qgc3RhcnZlLiAgV2hlbiB5b3UgcmUtbmljZSBhDQp0YXNrLCB5b3Ug
bWF5IHNob290IHlvdXJzZWxmIGluIHRoZSBmb290IGluIGEgY291cGxlIG9m
IGRpZmZlcmVudCB3YXlzOg0KDQoJbyBUaGUgdGFzayBob2dzIHRoZSBDUFUs
IGFuZCBzdGFydmVzIG91dCBvdGhlciB0YXNrcyAoaW4gdGhlIGNhc2Ugb2YN
CgkgIGEgbmVnYXRpdmUgbmljZW5lc3MpLg0KDQoJbyBUaGUgdGFzayBpcyBz
dGFydmVkIG91dCBieSBoaWdoZXItcHJpb3JpdHkgdGFza3MgKGluIHRoZSBj
YXNlIG9mIGENCgkgIHBvc2l0aXZlIG5pY2VuZXNzKS4NCg0KSGVyZSBhcmUg
YSBmZXcgZ2VuZXJhbCB0aXBzIGZvciByZS1uaWNpbmcgdGFza3M6DQoNCglv
IE9uIGEgbWFjaGluZSB3aG9zZSBwcmltYXJ5IGZ1bmN0aW9uIGlzIHdlYi1z
ZXJ2aW5nIG9yIG5ld3Mtc2VydmluZywNCgkgIHlvdSBtYXkgd2FudCB0byBn
aXZlIHRoZSBodHRwZCBvciBpbm5kIHRhc2sgYSBuZWdhdGl2ZSBuaWNlbmVz
cy4NCgkgIE90aGVyIHRhc2tzIHdvdWxkIHRoZW4gb25seSBiZSBhbGxvd2Vk
IHRvIGNvbnN1bWUgImxlZnQtb3ZlciIgQ1BVDQoJICB0aW1lLg0KDQoJbyBJ
dCdzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIGdpdmUgeW91ciBYLXNlcnZl
ciBhIG5lZ2F0aXZlIG5pY2VuZXNzLg0KCSAgSW50ZXJhY3RpdmUgcGVyZm9y
bWFuY2Ugd2lsbCBsaWtlbHkgYmVuZWZpdCBmcm9tIHRoaXMuDQoNCglvIFdo
ZW4gc3RhcnRpbmcgYSBDUFUtaW50ZW5zaXZlIGpvYiB0aGF0IG1heSB0YWtl
IGF3aGlsZSB0byBjb21wbGV0ZSwNCgkgIHlvdSBtYXkgd2FudCB0byBnaXZl
IGl0IGEgcG9zaXRpdmUgbmljZW5lc3MgdG8gZW5zdXJlIHRoZSBhYnNvbHV0
ZQ0KCSAgbWluaW11bSBpbXBhY3Qgb24gaW50ZXJhY3RpdmUgcGVyZm9ybWFu
Y2UuICBXaGVuIGNvbXBpbGluZyBhIGtlcm5lbCwNCgkgIHlvdSBtaWdodCBk
byAnbmljZSBtYWtlIHpsaWxvJyAtLSB1c2VycyBvZiB0aGUgc3lzdGVtIHdv
dWxkIHByb2JhYmx5DQoJICBub3QgZXZlbiBub3RpY2UgYW55IHNsb3dkb3du
IQ0KDQogICAgICAgIG8gSXQncyBhbG1vc3QgbmV2ZXIgYSBnb29kIGlkZWEg
dG8gZ2l2ZSBhIHRvdGFsbHkgQ1BVLWludGVuc2l2ZSB0YXNrDQogICAgICAg
ICAgYSBuZWdhdGl2ZSBuaWNlbmVzcy4gIERvaW5nIHRoaXMgd2l0aCB0aGUg
bm9ybWFsIExpbnV4IHNjaGVkdWxlcg0KICAgICAgICAgIGNhbiByZXN1bHQg
aW4gYSBzbHVnZ2lzaCBzeXN0ZW0gLS0gd2l0aCB0aGlzIHNjaGVkdWxlciBp
dCBjYW4gcmVzdWx0DQogICAgICAgICAgaW4gYW4gKnVudXNhYmxlKiBzeXN0
ZW0uDQoNCkluIGdlbmVyYWwsIGRvbid0IHJlLW5pY2UgYSB0YXNrIHVubGVz
cyB5b3UgdW5kZXJzdGFuZCBob3cgdGhlIHNjaGVkdWxlcg0Kd29ya3MsIGFu
ZCB5b3UgY2FuIHJlYWxseSBjb252aW5jZSB5b3Vyc2VsZiB0aGF0IGl0J3Mg
YSBnb29kIGlkZWEuDQoNCg0KT1RIRVIgTk9URVMNCg0KRG9uJ3QgYmUgc3Vy
cHJpc2VkIGlmIHlvdSBmaW5kIHRoYXQgeW91ciBsb2FkIGF2ZXJhZ2UgdGVu
ZHMgdG8gYmUgaGlnaGVyIHRoYW4NCml0IHdhcyB3aXRoIHRoZSBub3JtYWwg
TGludXggc2NoZWR1bGVyIC0tIHRoaXMgaXMgYSBwZXJmZWN0bHkgbm9ybWFs
IGVmZmVjdC4NCklmIGl0IHRlbmRzIHRvIGJlIGEgKmxvdCogaGlnaGVyLCB0
aGVuIHlvdSBtYXkgd2FudCB0byByZWNvbnNpZGVyIGhvdyB5b3UNCnJlLW5p
Y2UgdGFza3MuDQoNCkkgYW0gY29uc2lkZXJpbmcgYWRkaW5nIGEgc3lzdGVt
IGNhbGwgYW5kIHdyaXRpbmcgYSBjb3JyZXNwb25kaW5nIHVzZXItc3BhY2UN
CnV0aWxpdHkgdG8gbWFrZSB0aGUgc2NoZWR1bGluZyBtb3JlIGNvbmZpZ3Vy
YWJsZS4NCg0KDQpDT05DTFVTSU9ODQoNClBsZWFzZSBsZXQgbWUga25vdyBo
b3cgd2VsbCB0aGlzIHBhdGNoIHdvcmtzIGZvciB5b3UuICBJZiB5b3UgaGF2
ZSBjcml0aWNpc20NCmFuZC9vciBpZGVhcyB0byBtYWtlIHRoZSBwYXRjaCBi
ZXR0ZXIgYW5kIG1vcmUgcm9idXN0LCBJIHdvdWxkIGJlIHBhcnRpY3VsYXJs
eQ0KaW50ZXJlc3RlZCB0byBoZWFyIHRoZW0uDQoNCkhhcHB5IHRhc2stc3dp
dGNoaW5nIDotKQ0KDQoJLS0gQWRhbSBNY0tlZQkJPGFtY2tlZUBwb2JveGVz
LmNvbT4NCg==
--12583424-2086413006-871273375=:550--