[PATCH]sbin/nos-tun WARNS=6, style
This is a MIME-formatted message. If you see this text it means that your
E-mail software does not support MIME-formatted messages.
--=_jive-20559-1111195846-0001-2
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
WARNS=6, style clean.
a brief comment at the beginning of the patch further states what the
patch does.
please review it.
--=_jive-20559-1111195846-0001-2
Content-Type: text/plain; charset=us-ascii; name="patch.nos-tun"
Content-Transfer-Encoding: base64
Content-ID: <20050319093715.F607@localhost>
Content-Description:
Content-Disposition: attachment; filename="patch.nos-tun"
MSkgIGJ1bXAgdXAgd2FybiBsZXZlbCB0byA2DQoyKSAgcmVvcmdhbml6ZSAi
aW5jbHVkZSIgYWNjb3JkaW5nIHRvIHN0eWxlKDkpDQozKSAgY2hhbmdlIGZ1
bmN0aW9uIG5hbWUgdXBwZXIgY2FzZSBpbml0YWlsIGxldHRlciB0byBsb3dl
ciBjYXNlDQo0KSAgY2xlYW4gdXAgZ2xvYmFsIHZhcmlhYmxlIHdoaXRlIHNw
YWNlDQo1KSAgbW92ZSBmdW5jdGlvbiBuYW1lIHRvIGEgc2VwZXJhdGUgbGlu
ZSwgd2hlcmUgZnVuY3Rpb24gaXMgZGVmaW5lZA0KNikgIHJlbW92ZSBvYnZp
b3VzIGNvbW1lbnRzLCBmaXggc29tZSBjb21tZW50cw0KNykgIHJlbmFtZSBs
b2NhbC12YXJpYmxlL2Z1bmN0aW9uLXBhcmFtZXRlciB0byBhdm9pZCBuYW1l
IGNvbGxpc2lvbg0KOCkgIG1ha2UgY2VydGFpbiBmdW5jdGlvbiBwYXJhbWV0
ZXJzIGNvbnN0IHdoZW4gZnVuY3Rpb24gb3BlcmF0aW9uIGRvZXMgbm90IGNo
YW5nZSB0aGVtDQo5KSAgYWRkIHdoaXRlIHNwYWNlIGJldHdlZW4gImlmIiBh
bmQgIigiLiAgYWRkIHdoaXRlIHNwYWNlIGJldHdlZW4gZnVuY3Rpb24gY2Fs
bHMgcGFyYW1ldGVyIGxpc3QuDQoxMCkgcmVtb3ZlIHVubmVjZXNzYXJ5ICJ7
IiAifSIgYWZ0ZXIgImlmIg0KMTEpIGNoYW5nZSAidXNhZ2UiIHN0cmluZyBh
Y2NvcmRpbmcgdG8gc3R5bGUgYW5kIG1hbiBwYWdlDQoxMikgMiB3aGl0ZSBz
cGFjZSBpbmRlbnQgLT4gMSB0YWIgaW5kZW50DQoNCkluZGV4OiBNYWtlZmls
ZQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9vcHQvZGZf
Y3ZzL3NyYy9zYmluL25vcy10dW4vTWFrZWZpbGUsdg0KcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjINCmRpZmYgLXUgLXIxLjIgTWFrZWZpbGUNCi0tLSBNYWtl
ZmlsZQkxNyBKdW4gMjAwMyAwNDoyNzozNCAtMDAwMAkxLjINCisrKyBNYWtl
ZmlsZQkxOCBNYXIgMjAwNSAxMzoxMjo1OSAtMDAwMA0KQEAgLTEsOCArMSw4
IEBADQogIyAkRnJlZUJTRDogc3JjL3NiaW4vbm9zLXR1bi9NYWtlZmlsZSx2
IDEuMS42LjEgMjAwMS8wNC8yNSAxMDo1ODo0NSBydSBFeHAgJA0KICMgJERy
YWdvbkZseTogc3JjL3NiaW4vbm9zLXR1bi9NYWtlZmlsZSx2IDEuMiAyMDAz
LzA2LzE3IDA0OjI3OjM0IGRpbGxvbiBFeHAgJA0KIA0KK1dBUk5TPz0JNg0K
IFBST0c9CW5vcy10dW4NCiBNQU49CW5vcy10dW4uOA0KIA0KIC5pbmNsdWRl
IDxic2QucHJvZy5taz4NCi0NCkluZGV4OiBub3MtdHVuLmMNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvb3B0L2RmX2N2cy9zcmMvc2Jp
bi9ub3MtdHVuL25vcy10dW4uYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NQ0KZGlmZiAtdSAtcjEuNSBub3MtdHVuLmMNCi0tLSBub3MtdHVuLmMJMTgg
RGVjIDIwMDQgMjE6NDM6MzkgLTAwMDAJMS41DQorKysgbm9zLXR1bi5jCTE4
IE1hciAyMDA1IDEzOjEyOjU5IC0wMDAwDQpAQCAtNTQsMzE1ICs1NCwzMDAg
QEANCiAgKiBNYXIuIDIzIDE5OTkgYnkgSXNhbyBTRUtJIDxpc2VraUBnb25n
b24uY29tPg0KICAqIEkgYWRkZWQgYSBuZXcgZmxhZyBmb3IgaXAgcHJvdG9j
b2wgbnVtYmVyLg0KICAqIFdlIGFyZSB1c2luZyA0IGFzIHByb3RvY29sIG51
bWJlciBpbiBhbXByLm9yZy4NCi0gKg0KICAqLw0KIA0KLSNpbmNsdWRlIDxm
Y250bC5oPg0KLSNpbmNsdWRlIDxuZXRkYi5oPg0KLSNpbmNsdWRlIDxzdGRp
by5oPg0KLSNpbmNsdWRlIDxzdGRsaWIuaD4NCi0jaW5jbHVkZSA8c3RyaW5n
Lmg+DQotI2luY2x1ZGUgPHN5c2xvZy5oPg0KKyNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4NCiAjaW5jbHVkZSA8c3lzL3NpZ25hbC5oPg0KICNpbmNsdWRlIDxz
eXMvc29ja2V0Lmg+DQogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPg0KKw0KICNp
bmNsdWRlIDxuZXRpbmV0L2luLmg+DQogI2luY2x1ZGUgPG5ldGluZXQvaW5f
c3lzdG0uaD4NCiAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPg0KICNpbmNsdWRl
IDxuZXQvaWYuaD4NCiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+DQorDQorI2lu
Y2x1ZGUgPGZjbnRsLmg+DQorI2luY2x1ZGUgPG5ldGRiLmg+DQorI2luY2x1
ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRl
IDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8c3lzbG9nLmg+DQogI2luY2x1ZGUg
PHVuaXN0ZC5oPg0KIA0KLS8qIFR1bm5lbCBpbnRlcmZhY2UgY29uZmlndXJh
dGlvbiBzdHVmZiAqLw0KLXN0YXRpYyBzdHJ1Y3QgaWZhbGlhc3JlcSBpZnJh
Ow0KLXN0YXRpYyBzdHJ1Y3QgaWZyZXEgaWZycTsNCitzdGF0aWMgc3RydWN0
IGlmYWxpYXNyZXEJaWZyYTsNCitzdGF0aWMgc3RydWN0IGlmcmVxCQlpZnJx
Ow0KKw0KK3N0YXRpYyBpbnQJbmV0OwkvKiBzb2NrZXQgZGVzY3JpcHRvciAq
Lw0KK3N0YXRpYyBpbnQJdHVuOwkvKiB0dW5uZWwgZGVzY3JpcHRvciAqLw0K
IA0KLS8qIEdsb2JhbCBkZXNjcmlwdG9ycyAqLw0KLWludCBuZXQ7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBzb2NrZXQgZGVzY3JpcHRvciAqLw0K
LWludCB0dW47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0dW5uZWwg
ZGVzY3JpcHRvciAqLw0KK3N0YXRpYyB2b2lkCXVzYWdlKHZvaWQpOw0KIA0K
LXN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpOw0KIA0KLWludCBTZXRfYWRkcmVz
cyhjaGFyICphZGRyLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbikNCitzdGF0
aWMgaW50DQorc2V0X2FkZHJlc3MoY29uc3QgY2hhciAqYWRkciwgc3RydWN0
IHNvY2thZGRyX2luICppbikNCiB7DQotICBzdHJ1Y3QgaG9zdGVudCAqaHA7
DQorCXN0cnVjdCBob3N0ZW50ICpocDsNCiANCi0gIGJ6ZXJvKChjaGFyICop
c2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7DQotICBzaW4tPnNpbl9m
YW1pbHkgPSBBRl9JTkVUOw0KLSAgaWYoKHNpbi0+c2luX2FkZHIuc19hZGRy
ID0gaW5ldF9hZGRyKGFkZHIpKSA9PSAodV9sb25nKS0xKSB7DQotICAgIGhw
ID0gZ2V0aG9zdGJ5bmFtZShhZGRyKTsNCi0gICAgaWYgKCFocCkgew0KLSAg
ICAgIHN5c2xvZyhMT0dfRVJSLCJ1bmtub3duIGhvc3QgJXMiLCBhZGRyKTsN
Ci0gICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICBzaW4tPnNpbl9mYW1p
bHkgPSBocC0+aF9hZGRydHlwZTsNCi0gICAgYmNvcHkoaHAtPmhfYWRkciwg
KGNhZGRyX3QpJnNpbi0+c2luX2FkZHIsIGhwLT5oX2xlbmd0aCk7DQotICB9
DQotICByZXR1cm4gMDsNCisJYnplcm8oaW4sIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHIpKTsNCisJaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOw0KKwlpZiAo
KGluLT5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIoYWRkcikpID09IElO
QUREUl9OT05FKSB7DQorCQlocCA9IGdldGhvc3RieW5hbWUoYWRkcik7DQor
CQlpZiAoIWhwKSB7DQorCQkJc3lzbG9nKExPR19FUlIsICJ1bmtub3duIGhv
c3QgJXMiLCBhZGRyKTsNCisJCQlyZXR1cm4gMTsNCisJCX0NCisJCWluLT5z
aW5fZmFtaWx5ID0gaHAtPmhfYWRkcnR5cGU7DQorCQliY29weShocC0+aF9h
ZGRyLCAmaW4tPnNpbl9hZGRyLCBocC0+aF9sZW5ndGgpOw0KKwl9DQorCXJl
dHVybiAwOw0KIH0NCiANCi1pbnQgdHVuX29wZW4oY2hhciAqZGV2bmFtZSwg
c3RydWN0IHNvY2thZGRyICpvdXJhZGRyLCBjaGFyICp0aGVpcmFkZHIpDQor
c3RhdGljIGludA0KK3R1bl9vcGVuKGNvbnN0IGNoYXIgKmRldl9uYW1lLCBj
b25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm91cmFkZHIsDQorCSBjb25zdCBjaGFy
ICp0aGVpcmFkZHIpDQogew0KLSAgaW50IHM7DQotICBzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKnNpbjsNCisJaW50IHM7DQorCXN0cnVjdCBzb2NrYWRkcl9pbiAq
aW47DQorDQorCS8qIE9wZW4gdHVuIGRldmljZSAqLw0KKwl0dW4gPSBvcGVu
KGRldl9uYW1lLCBPX1JEV1IpOw0KKwlpZiAodHVuIDwgMCkgew0KKwkJc3lz
bG9nKExPR19FUlIsICJjYW4ndCBvcGVuICVzIC0gJW0iLCBkZXZfbmFtZSk7
DQorCQlyZXR1cm4gMTsNCisJfQ0KKw0KKwkvKiBOYW1lIHRoZSBpbnRlcmZh
Y2UgKi8NCisJYnplcm8oJmlmcmEsIHNpemVvZihpZnJhKSk7DQorCWJ6ZXJv
KCZpZnJxLCBzaXplb2YoaWZycSkpOw0KKwlzdHJuY3B5KGlmcmEuaWZyYV9u
YW1lLCBkZXZfbmFtZSArIDUsIElGTkFNU0laKTsNCisJc3RybmNweShpZnJx
Lmlmcl9uYW1lLCBkZXZfbmFtZSArIDUsIElGTkFNU0laKTsNCisNCisJcyA9
IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsNCisJaWYgKHMgPCAw
KSB7DQorCQlzeXNsb2coTE9HX0VSUiwgImNhbid0IG9wZW4gc29ja2V0IC0g
JW0iKTsNCisJCWdvdG8gdHVuY19yZXR1cm47DQorCX0NCisNCisJLyoNCisJ
ICogRGVsZXRlIChwcmV2aW91cykgYWRkcmVzc2VzIGZvciBpbnRlcmZhY2UN
CisJICoNCisJICogWFhYDQorCSAqIE9uIEZyZWVCU0QgdGhpcyBpb2N0bCBy
ZXR1cm5zIGVycm9yDQorCSAqIHdoZW4gdHVuTiBoYXZlIG5vIGFkZHJlc3Nl
cywgc28gLSBsb2cgYW5kIGlnbm9yZSBpdC4NCisJICovDQorCWlmIChpb2N0
bChzLCBTSU9DRElGQUREUiwgJmlmcmEpIDwgMCkNCisJCXN5c2xvZyhMT0df
RVJSLCAiU0lPQ0RJRkFERFIgLSAlbSIpOw0KKw0KKwkvKiBTZXQgaW50ZXJm
YWNlIGFkZHJlc3MgKi8NCisJaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICop
JmlmcmEuaWZyYV9hZGRyOw0KKwliY29weShvdXJhZGRyLCBpbiwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpOw0KKwlpbi0+c2luX2xlbiA9IHNpemVv
ZigqaW4pOw0KKw0KKwkvKiBTZXQgZGVzdGluYXRpb24gYWRkcmVzcyAqLw0K
KwlpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyYS5pZnJhX2Jyb2Fk
YWRkcjsNCisJaWYgKHNldF9hZGRyZXNzKHRoZWlyYWRkciwgaW4pKSB7DQor
CQlzeXNsb2coTE9HX0VSUiwgImJhZCBkZXN0aW5hdGlvbiBhZGRyZXNzOiAl
cyIsIHRoZWlyYWRkcik7DQorCQlnb3RvIHN0dW5jX3JldHVybjsNCisJfQ0K
Kwlpbi0+c2luX2xlbiA9IHNpemVvZigqaW4pOw0KKw0KKwlpZiAoaW9jdGwo
cywgU0lPQ0FJRkFERFIsICZpZnJhKSA8IDApIHsNCisJCXN5c2xvZyhMT0df
RVJSLCAiY2FuJ3Qgc2V0IGludGVyZmFjZSBhZGRyZXNzIC0gJW0iKTsNCisJ
CWdvdG8gc3R1bmNfcmV0dXJuOw0KKwl9DQorDQorCS8qIEJyaW5nIHVwIHRo
ZSBpbnRlcmZhY2UgKi8NCisJaWYgKGlvY3RsKHMsIFNJT0NHSUZGTEFHUywg
JmlmcnEpIDwgMCkgew0KKwkJc3lzbG9nKExPR19FUlIsICJjYW4ndCBnZXQg
aW50ZXJmYWNlIGZsYWdzIC0gJW0iKTsNCisJCWdvdG8gc3R1bmNfcmV0dXJu
Ow0KKwl9DQorCWlmcnEuaWZyX2ZsYWdzIHw9IElGRl9VUDsNCisJaWYgKCEo
aW9jdGwocywgU0lPQ1NJRkZMQUdTLCAmaWZycSkgPCAwKSkgew0KKwkJY2xv
c2Uocyk7DQorCQlyZXR1cm4gMDsNCisJfQ0KKwlzeXNsb2coTE9HX0VSUiwg
ImNhbid0IHNldCBpbnRlcmZhY2UgVVAgLSAlbSIpOw0KIA0KLSAgLyogT3Bl
biB0dW4gZGV2aWNlICovDQotICB0dW4gPSBvcGVuIChkZXZuYW1lLCBPX1JE
V1IpOw0KLSAgaWYgKHR1biA8IDApIHsNCi0gICAgc3lzbG9nKExPR19FUlIs
ImNhbid0IG9wZW4gJXMgLSAlbSIsZGV2bmFtZSk7DQotICAgIHJldHVybigx
KTsNCi0gIH0NCi0NCi0gIC8qDQotICAgKiBBdCBmaXJzdCwgbmFtZSB0aGUg
aW50ZXJmYWNlLg0KLSAgICovDQotICBiemVybygoY2hhciAqKSZpZnJhLCBz
aXplb2YoaWZyYSkpOw0KLSAgYnplcm8oKGNoYXIgKikmaWZycSwgc2l6ZW9m
KGlmcnEpKTsNCi0NCi0gIHN0cm5jcHkoaWZycS5pZnJfbmFtZSwgZGV2bmFt
ZSs1LCBJRk5BTVNJWik7DQotICBzdHJuY3B5KGlmcmEuaWZyYV9uYW1lLCBk
ZXZuYW1lKzUsIElGTkFNU0laKTsNCi0NCi0gIHMgPSBzb2NrZXQoQUZfSU5F
VCwgU09DS19ER1JBTSwgMCk7DQotICBpZiAocyA8IDApIHsNCi0gICAgc3lz
bG9nKExPR19FUlIsImNhbid0IG9wZW4gc29ja2V0IC0gJW0iKTsNCi0gICAg
Z290byB0dW5jX3JldHVybjsNCi0gIH0NCi0NCi0gIC8qDQotICAgKiAgRGVs
ZXRlIChwcmV2aW91cykgYWRkcmVzc2VzIGZvciBpbnRlcmZhY2UNCi0gICAq
DQotICAgKiAgISEhIQ0KLSAgICogIE9uIEZyZWVCU0QgdGhpcyBpb2N0bCBy
ZXR1cm5zIGVycm9yDQotICAgKiAgd2hlbiB0dW5OIGhhdmUgbm8gYWRkcmVz
c2VzLCBzbyAtIGxvZyBhbmQgaWdub3JlIGl0Lg0KLSAgICoNCi0gICAqLw0K
LSAgaWYgKGlvY3RsKHMsIFNJT0NESUZBRERSLCAmaWZyYSkgPCAwKSB7DQot
ICAgIHN5c2xvZyhMT0dfRVJSLCJTSU9DRElGQUREUiAtICVtIik7DQotICB9
DQotDQotICAvKg0KLSAgICogIFNldCBpbnRlcmZhY2UgYWRkcmVzcw0KLSAg
ICovDQotICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJihpZnJhLmlm
cmFfYWRkcik7DQotICBiY29weShvdXJhZGRyLCBzaW4sIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKTsNCi0gIHNpbi0+c2luX2xlbiA9IHNpemVvZigq
c2luKTsNCi0NCi0gIC8qDQotICAgKiAgU2V0IGRlc3RpbmF0aW9uIGFkZHJl
c3MNCi0gICAqLw0KLSAgc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSYo
aWZyYS5pZnJhX2Jyb2FkYWRkcik7DQotICBpZihTZXRfYWRkcmVzcyh0aGVp
cmFkZHIsc2luKSkgew0KLSAgICBzeXNsb2coTE9HX0VSUiwiYmFkIGRlc3Rp
bmF0aW9uIGFkZHJlc3M6ICVzIix0aGVpcmFkZHIpOw0KLSAgICBnb3RvIHN0
dW5jX3JldHVybjsNCi0gIH0NCi0gIHNpbi0+c2luX2xlbiA9IHNpemVvZigq
c2luKTsNCi0NCi0gIGlmIChpb2N0bChzLCBTSU9DQUlGQUREUiwgJmlmcmEp
IDwgMCkgew0KLSAgICBzeXNsb2coTE9HX0VSUiwiY2FuJ3Qgc2V0IGludGVy
ZmFjZSBhZGRyZXNzIC0gJW0iKTsNCi0gICAgZ290byBzdHVuY19yZXR1cm47
DQotICB9DQotDQotICAvKg0KLSAgICogIE5vdywgYnJpbmcgdXAgdGhlIGlu
dGVyZmFjZS4NCi0gICAqLw0KLSAgaWYgKGlvY3RsKHMsIFNJT0NHSUZGTEFH
UywgJmlmcnEpIDwgMCkgew0KLSAgICBzeXNsb2coTE9HX0VSUiwiY2FuJ3Qg
Z2V0IGludGVyZmFjZSBmbGFncyAtICVtIik7DQotICAgIGdvdG8gc3R1bmNf
cmV0dXJuOw0KLSAgfQ0KLQ0KLSAgaWZycS5pZnJfZmxhZ3MgfD0gSUZGX1VQ
Ow0KLSAgaWYgKCEoaW9jdGwocywgU0lPQ1NJRkZMQUdTLCAmaWZycSkgPCAw
KSkgew0KLSAgICBjbG9zZShzKTsNCi0gICAgcmV0dXJuKDApOw0KLSAgfQ0K
LSAgc3lzbG9nKExPR19FUlIsImNhbid0IHNldCBpbnRlcmZhY2UgVVAgLSAl
bSIpOw0KIHN0dW5jX3JldHVybjoNCi0gIGNsb3NlKHMpOw0KKwljbG9zZShz
KTsNCiB0dW5jX3JldHVybjoNCi0gIGNsb3NlKHR1bik7DQotICByZXR1cm4o
MSk7DQorCWNsb3NlKHR1bik7DQorCXJldHVybiAxOw0KIH0NCiANCi12b2lk
IEZpbmlzaChpbnQgc2lnbnVtKQ0KK3N0YXRpYyB2b2lkDQorZmluaXNoKGlu
dCBzaWdudW0pDQogew0KLSAgaW50IHM7DQorCWludCBzOw0KIA0KLSAgc3lz
bG9nKExPR19JTkZPLCJleGl0aW5nIik7DQorCXN5c2xvZyhMT0dfSU5GTywg
ImV4aXRpbmciKTsNCiANCi0gIGNsb3NlKG5ldCk7DQorCWNsb3NlKG5ldCk7
DQorDQorCXMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7DQor
CWlmIChzIDwgMCkgew0KKwkJc3lzbG9nKExPR19FUlIsICJjYW4ndCBvcGVu
IHNvY2tldCAtICVtIik7DQorCQlnb3RvIGNsb3NpbmdfdHVuOw0KKwl9DQor
DQorCS8qIFNodXQgZG93biBpbnRlcmZhY2UgKi8NCisJaWYgKGlvY3RsKHMs
IFNJT0NHSUZGTEFHUywgJmlmcnEpIDwgMCkgew0KKwkJc3lzbG9nKExPR19F
UlIsICJjYW4ndCBnZXQgaW50ZXJmYWNlIGZsYWdzIC0gJW0iKTsNCisJCWdv
dG8gY2xvc2luZ19mZHM7DQorCX0NCisJaWZycS5pZnJfZmxhZ3MgJj0gfihJ
RkZfVVAgfCBJRkZfUlVOTklORyk7DQorCWlmIChpb2N0bChzLCBTSU9DU0lG
RkxBR1MsICZpZnJxKSA8IDApIHsNCisJCXN5c2xvZyhMT0dfRVJSLCJjYW4n
dCBzZXQgaW50ZXJmYWNlIERPV04gLSAlbSIpOw0KKwkJZ290byBjbG9zaW5n
X2ZkczsNCisJfQ0KKw0KKwkvKiBEZWxldGUgYWRkcmVzc2VzIGZvciBpbnRl
cmZhY2UgKi8NCisJYnplcm8oJmlmcmEuaWZyYV9hZGRyLCBzaXplb2YoaWZy
YS5pZnJhX2FkZHIpKTsNCisJYnplcm8oJmlmcmEuaWZyYV9icm9hZGFkZHIs
IHNpemVvZihpZnJhLmlmcmFfYWRkcikpOw0KKwliemVybygmaWZyYS5pZnJh
X21hc2ssIHNpemVvZihpZnJhLmlmcmFfYWRkcikpOw0KKwlpZiAoaW9jdGwo
cywgU0lPQ0RJRkFERFIsICZpZnJhKSA8IDApDQorCQlzeXNsb2coTE9HX0VS
UiwgImNhbid0IGRlbGV0ZSBpbnRlcmZhY2UncyBhZGRyZXNzZXMgLSAlbSIp
Ow0KIA0KLSAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsN
Ci0gIGlmIChzIDwgMCkgew0KLSAgICBzeXNsb2coTE9HX0VSUiwiY2FuJ3Qg
b3BlbiBzb2NrZXQgLSAlbSIpOw0KLSAgICBnb3RvIGNsb3NpbmdfdHVuOw0K
LSAgfQ0KLQ0KLSAgLyoNCi0gICAqICBTaHV0IGRvd24gaW50ZXJmYWNlLg0K
LSAgICovDQotICBpZiAoaW9jdGwocywgU0lPQ0dJRkZMQUdTLCAmaWZycSkg
PCAwKSB7DQotICAgIHN5c2xvZyhMT0dfRVJSLCJjYW4ndCBnZXQgaW50ZXJm
YWNlIGZsYWdzIC0gJW0iKTsNCi0gICAgZ290byBjbG9zaW5nX2ZkczsNCi0g
IH0NCi0NCi0gIGlmcnEuaWZyX2ZsYWdzICY9IH4oSUZGX1VQfElGRl9SVU5O
SU5HKTsNCi0gIGlmIChpb2N0bChzLCBTSU9DU0lGRkxBR1MsICZpZnJxKSA8
IDApIHsNCi0gICAgc3lzbG9nKExPR19FUlIsImNhbid0IHNldCBpbnRlcmZh
Y2UgRE9XTiAtICVtIik7DQotICAgIGdvdG8gY2xvc2luZ19mZHM7DQotICB9
DQotDQotICAvKg0KLSAgICogIERlbGV0ZSBhZGRyZXNzZXMgZm9yIGludGVy
ZmFjZQ0KLSAgICovDQotICBiemVybygmaWZyYS5pZnJhX2FkZHIsIHNpemVv
ZihpZnJhLmlmcmFfYWRkcikpOw0KLSAgYnplcm8oJmlmcmEuaWZyYV9icm9h
ZGFkZHIsIHNpemVvZihpZnJhLmlmcmFfYWRkcikpOw0KLSAgYnplcm8oJmlm
cmEuaWZyYV9tYXNrLCBzaXplb2YoaWZyYS5pZnJhX2FkZHIpKTsNCi0gIGlm
IChpb2N0bChzLCBTSU9DRElGQUREUiwgJmlmcmEpIDwgMCkgew0KLSAgICBz
eXNsb2coTE9HX0VSUiwiY2FuJ3QgZGVsZXRlIGludGVyZmFjZSdzIGFkZHJl
c3NlcyAtICVtIik7DQotICB9DQogY2xvc2luZ19mZHM6DQotICBjbG9zZShz
KTsNCisJY2xvc2Uocyk7DQogY2xvc2luZ190dW46DQotICBjbG9zZSh0dW4p
Ow0KLSAgY2xvc2Vsb2coKTsNCi0gIGV4aXQoc2lnbnVtKTsNCisJY2xvc2Uo
dHVuKTsNCisJY2xvc2Vsb2coKTsNCisJZXhpdChzaWdudW0pOw0KIH0NCiAN
Ci1pbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KK2ludA0KK21h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIHsNCi0gIGludCAgYywgbGVu
LCBpcG9mZjsNCisJaW50ICBjLCBsZW4sIGlwb2ZmOw0KIA0KLSAgY2hhciAq
ZGV2bmFtZSA9IE5VTEw7DQotICBjaGFyICpwb2ludF90byA9IE5VTEw7DQot
ICBjaGFyICp0b19wb2ludCA9IE5VTEw7DQotICBjaGFyICp0YXJnZXQ7DQot
ICBjaGFyICpwcm90b2NvbCA9IE5VTEw7DQotICBpbnQgcHJvdG51bTsNCi0N
Ci0gIHN0cnVjdCBzb2NrYWRkciB0X2xhZGRyOyAgICAgICAgICAvKiBTb3Vy
Y2UgYWRkcmVzcyBvZiB0dW5uZWwgKi8NCi0gIHN0cnVjdCBzb2NrYWRkciB3
aGVyZXRvOyAgICAgICAgICAvKiBEZXN0aW5hdGlvbiBvZiB0dW5uZWwgKi8N
Ci0gIHN0cnVjdCBzb2NrYWRkcl9pbiAqdG87DQotDQotICBjaGFyIGJ1Zlsw
eDIwMDBdOyAgICAgICAgICAgICAgICAgLyogUGFja2V0cyBidWZmZXIgKi8N
Ci0gIHN0cnVjdCBpcCAqaXAgPSAoc3RydWN0IGlwICopYnVmOw0KLQ0KLSAg
ZmRfc2V0IHJmZHMsIHdmZHMsIGVmZHM7ICAgICAgICAgIC8qIEZpbGUgZGVz
Y3JpcHRvcnMgZm9yIHNlbGVjdCgpICovDQotICBpbnQgbmZkczsgICAgICAg
ICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIGZyb20gc2VsZWN0KCkgKi8N
Ci0NCi0NCi0gIHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiZDpz
OnQ6cDoiKSkgIT0gLTEpIHsNCi0gICAgc3dpdGNoIChjKSB7DQotICAgIGNh
c2UgJ2QnOg0KLSAgICAgIHRvX3BvaW50ID0gb3B0YXJnOw0KLSAgICAgIGJy
ZWFrOw0KLSAgICBjYXNlICdzJzoNCi0gICAgICBwb2ludF90byA9IG9wdGFy
ZzsNCi0gICAgICBicmVhazsNCi0gICAgY2FzZSAndCc6DQotICAgICAgZGV2
bmFtZSA9IG9wdGFyZzsNCi0gICAgICBicmVhazsNCi0gICAgY2FzZSAncCc6
DQotICAgICAgcHJvdG9jb2wgPSBvcHRhcmc7DQotICAgICAgYnJlYWs7DQot
ICAgIH0NCi0gIH0NCi0gIGFyZ2MgLT0gb3B0aW5kOw0KLSAgYXJndiArPSBv
cHRpbmQ7DQotDQotICBpZiAoYXJnYyAhPSAxIHx8IChkZXZuYW1lID09IE5V
TEwpIHx8DQotICAgICAgKHBvaW50X3RvID09IE5VTEwpIHx8ICh0b19wb2lu
dCA9PSBOVUxMKSkgew0KLSAgICB1c2FnZSgpOw0KLSAgfQ0KLQ0KLSAgaWYo
cHJvdG9jb2wgPT0gTlVMTCkNCi0gICAgICBwcm90bnVtID0gOTQ7DQotICBl
bHNlDQotICAgICAgcHJvdG51bSA9IGF0b2kocHJvdG9jb2wpOw0KLQ0KLSAg
dGFyZ2V0ID0gKmFyZ3Y7DQotDQotICAvKiBFc3RhYmxpc2ggbG9nZ2luZyB0
aHJvdWdoICdzeXNsb2cnICovDQotICBvcGVubG9nKCJub3MtdHVuIiwgTE9H
X1BJRCwgTE9HX0RBRU1PTik7DQotDQotICBpZihTZXRfYWRkcmVzcyhwb2lu
dF90bywgKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZ0X2xhZGRyKSkgew0KLSAg
ICBjbG9zZWxvZygpOw0KLSAgICBleGl0KDIpOw0KLSAgfQ0KLQ0KLSAgaWYo
dHVuX29wZW4oZGV2bmFtZSwgJnRfbGFkZHIsIHRvX3BvaW50KSkgew0KLSAg
ICBjbG9zZWxvZygpOw0KLSAgICBleGl0KDMpOw0KLSAgfQ0KLQ0KLSAgdG8g
PSAoc3RydWN0IHNvY2thZGRyX2luICopJndoZXJldG87DQotICBpZihTZXRf
YWRkcmVzcyh0YXJnZXQsIHRvKSkNCi0gICAgRmluaXNoKDQpOw0KLQ0KLSAg
aWYgKChuZXQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19SQVcsIHByb3RudW0p
KSA8IDApIHsNCi0gICAgc3lzbG9nKExPR19FUlIsImNhbid0IG9wZW4gc29j
a2V0IC0gJW0iKTsNCi0gICAgRmluaXNoKDUpOw0KLSAgfQ0KLQ0KLSAgaWYg
KGNvbm5lY3QobmV0LCZ3aGVyZXRvLHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKSA8IDAgKSB7DQotICAgIHN5c2xvZyhMT0dfRVJSLCJjYW4ndCBjb25u
ZWN0IHRvIHRhcmdldCAtICVtIik7DQotICAgIGNsb3NlKG5ldCk7DQotICAg
IEZpbmlzaCg2KTsNCi0gIH0NCi0NCi0gIC8qICBEZW1vbml6ZSBpdCAqLw0K
LSAgZGFlbW9uKDAsMCk7DQotDQotICAvKiBJbnN0YWxsIHNpZ25hbCBoYW5k
bGVycyAqLw0KLSAgc2lnbmFsKFNJR0hVUCxGaW5pc2gpOw0KLSAgc2lnbmFs
KFNJR0lOVCxGaW5pc2gpOw0KLSAgc2lnbmFsKFNJR1RFUk0sRmluaXNoKTsN
Ci0NCi0gIGZvciAoOzspIHsNCi0gICAgLyogU2V0IGZpbGUgZGVzY3JpcHRv
cnMgZm9yIHNlbGVjdCgpICovDQotICAgIEZEX1pFUk8oJnJmZHMpOyBGRF9a
RVJPKCZ3ZmRzKTsgRkRfWkVSTygmZWZkcyk7DQotICAgIEZEX1NFVCh0dW4s
JnJmZHMpOyBGRF9TRVQobmV0LCZyZmRzKTsNCi0NCi0gICAgbmZkcyA9IHNl
bGVjdChuZXQrMTAsJnJmZHMsJndmZHMsJmVmZHMsTlVMTCk7DQotICAgIGlm
KG5mZHMgPCAwKSB7DQotICAgICAgc3lzbG9nKExPR19FUlIsImludGVycnVw
dGVkIHNlbGVjdCIpOw0KLSAgICAgIGNsb3NlKG5ldCk7DQotICAgICAgRmlu
aXNoKDcpOw0KLSAgICB9DQotICAgIGlmKG5mZHMgPT0gMCkgeyAgICAgICAg
IC8qIEltcG9zc2libGUgPyAqLw0KLSAgICAgIHN5c2xvZyhMT0dfRVJSLCJ0
aW1lb3V0IGluIHNlbGVjdCIpOw0KLSAgICAgIGNsb3NlKG5ldCk7DQotICAg
ICAgRmluaXNoKDgpOw0KLSAgICB9DQotDQotDQotICAgIGlmKEZEX0lTU0VU
KG5ldCwmcmZkcykpIHsNCi0gICAgICAvKiBSZWFkIGZyb20gc29ja2V0IC4u
LiAqLw0KLSAgICAgIGxlbiA9IHJlYWQobmV0LCBidWYsIHNpemVvZihidWYp
KTsNCi0gICAgICAvKiBDaGVjayBpZiB0aGlzIGlzICJvdXIiIHBhY2tldCAq
Lw0KLSAgICAgIGlmKChpcC0+aXBfc3JjKS5zX2FkZHIgPT0gKHRvLT5zaW5f
YWRkcikuc19hZGRyKSB7DQotCS8qIC4uLiBza2lwIGVuY2Fwc3VsYXRpb24g
aGVhZGVycyAuLi4gKi8NCi0JaXBvZmYgPSAoaXAtPmlwX2hsIDw8IDIpOw0K
LQkvKiAuLi4gYW5kIHdyaXRlIHRvIHR1bi1kZXZpY2UgKi8NCi0Jd3JpdGUo
dHVuLGJ1ZitpcG9mZixsZW4taXBvZmYpOw0KLSAgICAgIH0NCi0gICAgfQ0K
LQ0KLSAgICBpZihGRF9JU1NFVCh0dW4sJnJmZHMpKSB7DQotICAgICAgLyog
UmVhZCBmcm9tIHR1biAuLi4gKi8NCi0gICAgICBsZW4gPSByZWFkKHR1biwg
YnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgLyogLi4uIGFuZCBzZW5kIHRv
IG5ldHdvcmsgKi8NCi0gICAgICBpZihzZW5kKG5ldCwgYnVmLCBsZW4sMCkg
PD0gMCkgew0KLQlzeXNsb2coTE9HX0VSUiwiY2FuJ3Qgc2VuZCAtICVtIik7
DQotICAgICAgfQ0KLSAgICB9DQotICB9DQorCWNoYXIgKmRldl9uYW1lID0g
TlVMTDsNCisJY2hhciAqcG9pbnRfdG8gPSBOVUxMOw0KKwljaGFyICp0b19w
b2ludCA9IE5VTEw7DQorCWNoYXIgKnRhcmdldDsNCisJY2hhciAqcHJvdG9j
b2wgPSBOVUxMOw0KKwlpbnQgcHJvdG51bTsNCisNCisJc3RydWN0IHNvY2th
ZGRyIHRfbGFkZHI7CS8qIFNvdXJjZSBhZGRyZXNzIG9mIHR1bm5lbCAqLw0K
KwlzdHJ1Y3Qgc29ja2FkZHIgd2hlcmV0bzsJLyogRGVzdGluYXRpb24gb2Yg
dHVubmVsICovDQorCXN0cnVjdCBzb2NrYWRkcl9pbiAqdG87DQorDQorCWNo
YXIgYnVmWzB4MjAwMF07CQkvKiBQYWNrZXRzIGJ1ZmZlciAqLw0KKwlzdHJ1
Y3QgaXAgKmlwID0gKHN0cnVjdCBpcCAqKWJ1ZjsNCisNCisJZmRfc2V0IHJm
ZHMsIHdmZHMsIGVmZHM7DQorCWludCBuZmRzOw0KKw0KKw0KKwl3aGlsZSAo
KGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImQ6czp0OnA6IikpICE9IC0xKSB7
DQorCQlzd2l0Y2ggKGMpIHsNCisJCWNhc2UgJ2QnOg0KKwkJCXRvX3BvaW50
ID0gb3B0YXJnOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSAncyc6DQorCQkJcG9p
bnRfdG8gPSBvcHRhcmc7DQorCQkJYnJlYWs7DQorCQljYXNlICd0JzoNCisJ
CQlkZXZfbmFtZSA9IG9wdGFyZzsNCisJCQlicmVhazsNCisJCWNhc2UgJ3An
Og0KKwkJCXByb3RvY29sID0gb3B0YXJnOw0KKwkJCWJyZWFrOw0KKwkJfQ0K
Kwl9DQorCWFyZ2MgLT0gb3B0aW5kOw0KKwlhcmd2ICs9IG9wdGluZDsNCisN
CisJaWYgKGFyZ2MgIT0gMSB8fCBkZXZfbmFtZSA9PSBOVUxMIHx8DQorCSAg
ICBwb2ludF90byA9PSBOVUxMIHx8IHRvX3BvaW50ID09IE5VTEwpDQorCQl1
c2FnZSgpOw0KKw0KKwlpZiAocHJvdG9jb2wgPT0gTlVMTCkNCisJCXByb3Ru
dW0gPSA5NDsNCisJZWxzZQ0KKwkJcHJvdG51bSA9IGF0b2kocHJvdG9jb2wp
Ow0KKw0KKwl0YXJnZXQgPSAqYXJndjsNCisNCisJb3BlbmxvZygibm9zLXR1
biIsIExPR19QSUQsIExPR19EQUVNT04pOw0KKw0KKwlpZiAoc2V0X2FkZHJl
c3MocG9pbnRfdG8sIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmdF9sYWRkcikp
IHsNCisJCWNsb3NlbG9nKCk7DQorCQlleGl0KDIpOw0KKwl9DQorDQorCWlm
KHR1bl9vcGVuKGRldl9uYW1lLCAmdF9sYWRkciwgdG9fcG9pbnQpKSB7DQor
CQljbG9zZWxvZygpOw0KKwkJZXhpdCgzKTsNCisJfQ0KKw0KKwl0byA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW4gKikmd2hlcmV0bzsNCisJaWYoc2V0X2FkZHJl
c3ModGFyZ2V0LCB0bykpDQorCQlmaW5pc2goNCk7DQorDQorCWlmICgobmV0
ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfUkFXLCBwcm90bnVtKSkgPCAwKSB7
DQorCQlzeXNsb2coTE9HX0VSUiwgImNhbid0IG9wZW4gc29ja2V0IC0gJW0i
KTsNCisJCWZpbmlzaCg1KTsNCisJfQ0KKw0KKwlpZiAoY29ubmVjdChuZXQs
ICZ3aGVyZXRvLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwICkg
ew0KKwkJc3lzbG9nKExPR19FUlIsICJjYW4ndCBjb25uZWN0IHRvIHRhcmdl
dCAtICVtIik7DQorCQljbG9zZShuZXQpOw0KKwkJZmluaXNoKDYpOw0KKwl9
DQorDQorCWRhZW1vbigwLCAwKTsNCisNCisJc2lnbmFsKFNJR0hVUCwgZmlu
aXNoKTsNCisJc2lnbmFsKFNJR0lOVCwgZmluaXNoKTsNCisJc2lnbmFsKFNJ
R1RFUk0sIGZpbmlzaCk7DQorDQorCWZvciAoOzspIHsNCisJCUZEX1pFUk8o
JnJmZHMpOw0KKwkJRkRfWkVSTygmd2Zkcyk7DQorCQlGRF9aRVJPKCZlZmRz
KTsNCisJCUZEX1NFVCh0dW4sICZyZmRzKTsNCisJCUZEX1NFVChuZXQsICZy
ZmRzKTsNCisNCisJCW5mZHMgPSBzZWxlY3QobmV0ICsgMTAsICZyZmRzLCAm
d2ZkcywgJmVmZHMsIE5VTEwpOw0KKwkJaWYgKG5mZHMgPCAwKSB7DQorCQkJ
c3lzbG9nKExPR19FUlIsImludGVycnVwdGVkIHNlbGVjdCIpOw0KKwkJCWNs
b3NlKG5ldCk7DQorCQkJZmluaXNoKDcpOw0KKwkJfQ0KKwkJaWYgKG5mZHMg
PT0gMCkgewkvKiBYWFggSW1wb3NzaWJsZSA/ICovDQorCQkJc3lzbG9nKExP
R19FUlIsICJ0aW1lb3V0IGluIHNlbGVjdCIpOw0KKwkJCWNsb3NlKG5ldCk7
DQorCQkJZmluaXNoKDgpOw0KKwkJfQ0KKw0KKwkJaWYgKEZEX0lTU0VUKG5l
dCwmcmZkcykpIHsNCisJCQkvKiBSZWFkIGZyb20gbmV0d29yayAuLi4gKi8N
CisJCQlsZW4gPSByZWFkKG5ldCwgYnVmLCBzaXplb2YoYnVmKSk7DQorCQkJ
LyogQ2hlY2sgaWYgdGhpcyBpcyAib3VyIiBwYWNrZXQgKi8NCisJCQlpZiAo
aXAtPmlwX3NyYy5zX2FkZHIgPT0gdG8tPnNpbl9hZGRyLnNfYWRkcikgew0K
KwkJCQkvKiAuLi4gc2tpcCBlbmNhcHN1bGF0aW9uIGhlYWRlcnMgLi4uICov
DQorCQkJCWlwb2ZmID0gKGlwLT5pcF9obCA8PCAyKTsNCisJCQkJLyogLi4u
IGFuZCB3cml0ZSB0byB0dW4tZGV2aWNlICovDQorCQkJCXdyaXRlKHR1biwg
YnVmK2lwb2ZmLCBsZW4taXBvZmYpOw0KKwkJCX0NCisJCX0NCisNCisJCWlm
KEZEX0lTU0VUKHR1biwmcmZkcykpIHsNCisJCQkvKiBSZWFkIGZyb20gdHVu
IC4uLiAqLw0KKwkJCWxlbiA9IHJlYWQodHVuLCBidWYsIHNpemVvZihidWYp
KTsNCisJCQkvKiAuLi4gYW5kIHNlbmQgdG8gbmV0d29yayAqLw0KKwkJCWlm
KHNlbmQobmV0LCBidWYsIGxlbiwwKSA8PSAwKQ0KKwkJCQlzeXNsb2coTE9H
X0VSUiwiY2FuJ3Qgc2VuZCAtICVtIik7DQorICAgIAkJfQ0KKyAgCX0NCiB9
DQogDQogc3RhdGljIHZvaWQNCiB1c2FnZSh2b2lkKQ0KIHsNCiAJZnByaW50
ZihzdGRlcnIsDQotInVzYWdlOiBub3MtdHVuIC10IDx0dW5fbmFtZT4gLXMg
PHNvdXJjZV9hZGRyPiAtZCA8ZGVzdF9hZGRyPiAtcCA8cHJvdG9jb2xfbnVt
YmVyPiA8dGFyZ2V0X2FkZHI+XG4iKTsNCisidXNhZ2U6IG5vcy10dW4gLXQg
dHVuX25hbWUgLXMgc291cmNlX2FkZHIgLWQgZGVzdF9hZGRyIFstcCBwcm90
b2NvbF9udW1iZXJdIHRhcmdldF9hZGRyXG4iKTsNCiAJZXhpdCgxKTsNCiB9
DQotDQo=
--=_jive-20559-1111195846-0001-2--