Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Jul 2014 18:50:34 -0500
From:      Bryan Venteicher <bryanv@daemoninthecloset.org>
To:        freebsd-net@freebsd.org
Subject:   Add netbw option to systat
Message-ID:  <CAMo0n6QD7tbObfSihfK8Sqgza-Td%2BSmfLubAcLhrBQBKfM5Fjg@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
--001a11c21fc0e8049204fd3e8e11
Content-Type: text/plain; charset=UTF-8

Awhile back, DragonlyFlyBSD added a netbw option to systat that I've ported
to FreeBSD and found handy at various times:

   netbw      Display aggregate and per-connection TCP receive and transmit
                      rates.  Only active TCP connections are shown.

Leading to output such as:

tcp accepts        connects                 rcv 1.192G snd 15.77K rexmit

  192.168.10.80:22      192.168.10.20:23103 rcv        snd 415.7  [  NTSX ]
  192.168.10.80:22      192.168.10.20:46560 rcv 19.80M snd 14.47K [  NTSX ]
  192.168.10.80:22      192.168.10.20:60699 rcv        snd 886.3  [  NTSX ]
  192.168.10.81:5201    192.168.10.51:60844 rcv 293.2M snd        [R  TSX ]
  192.168.10.81:5201    192.168.10.51:60845 rcv 293.5M snd        [R  TSX ]
  192.168.10.81:5201    192.168.10.51:60846 rcv 293.2M snd        [R  TSX ]
  192.168.10.81:5201    192.168.10.51:60847 rcv 292.9M snd        [R  TSX ]

It uses the sequences number from the 'struct tcpcb' to derive the rates,
which is usually good but certainly not perfect (i.e., don't set the
interval too long).

I'd like to commit this if anybody else thinks they'd find it useful.

http://people.freebsd.org/~bryanv/patches/systat-netbw.patch

--001a11c21fc0e8049204fd3e8e11
Content-Type: text/x-patch; charset=US-ASCII; name="systat-netbw.patch"
Content-Disposition: attachment; filename="systat-netbw.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hx5alovy0

RnJvbSBkMGE0ZjI4MmYzZTM2ZWI1M2NiMGE1MGE2NGFhNDU5N2U1MmI3ZDQyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBWZW50ZWljaGVyIDxicnlhbnZAZGFlbW9uaW50aGVj
bG9zZXQub3JnPgpEYXRlOiBUdWUsIDEgSnVsIDIwMTQgMDA6NTE6MjkgLTA1MDAKU3ViamVjdDog
W1BBVENIXSBBZGQgJ25ldGJ3JyBkaXNwbGF5IHRvIHN5c3RhdAoKLS0tCiB1c3IuYmluL3N5c3Rh
dC9NYWtlZmlsZSB8ICAgMiArLQogdXNyLmJpbi9zeXN0YXQvY21kdGFiLmMgfCAgIDMgKwogdXNy
LmJpbi9zeXN0YXQvZXh0ZXJuLmggfCAgIDcgKwogdXNyLmJpbi9zeXN0YXQvbmV0YncuYyAgfCA0
NzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB1c3Iu
YmluL3N5c3RhdC9zeXN0YXQuMSB8ICAgNCArCiA1IGZpbGVzIGNoYW5nZWQsIDQ5MSBpbnNlcnRp
b25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdXNyLmJpbi9zeXN0YXQv
bmV0YncuYwoKZGlmZiAtLWdpdCBhL3Vzci5iaW4vc3lzdGF0L01ha2VmaWxlIGIvdXNyLmJpbi9z
eXN0YXQvTWFrZWZpbGUKaW5kZXggMWJiMmRhMC4uYTE3ZTRkZCAxMDA2NDQKLS0tIGEvdXNyLmJp
bi9zeXN0YXQvTWFrZWZpbGUKKysrIGIvdXNyLmJpbi9zeXN0YXQvTWFrZWZpbGUKQEAgLTcsNyAr
Nyw3IEBAIFBST0c9CXN5c3RhdAogU1JDUz0JY21kcy5jIGNtZHRhYi5jIGRldnMuYyBmZXRjaC5j
IGlvc3RhdC5jIGtleWJvYXJkLmMgbWFpbi5jIFwKIAluZXRjbWRzLmMgbmV0c3RhdC5jIHBpZ3Mu
YyBzd2FwLmMgaWNtcC5jIFwKIAltb2RlLmMgaXAuYyB0Y3AuYyBcCi0Jdm1zdGF0LmMgY29udnRi
bC5jIGlmY21kcy5jIGlmc3RhdC5jCisJdm1zdGF0LmMgY29udnRibC5jIGlmY21kcy5jIGlmc3Rh
dC5jIG5ldGJ3LmMKIAogLmlmICR7TUtfSU5FVDZfU1VQUE9SVH0gIT0gIm5vIgogU1JDUys9CWlj
bXA2LmMgaXA2LmMKZGlmZiAtLWdpdCBhL3Vzci5iaW4vc3lzdGF0L2NtZHRhYi5jIGIvdXNyLmJp
bi9zeXN0YXQvY21kdGFiLmMKaW5kZXggYzljOWU3ZC4uMGUyMjVlYyAxMDA2NDQKLS0tIGEvdXNy
LmJpbi9zeXN0YXQvY21kdGFiLmMKKysrIGIvdXNyLmJpbi9zeXN0YXQvY21kdGFiLmMKQEAgLTU1
LDYgKzU1LDkgQEAgc3RydWN0CWNtZHRhYiBjbWR0YWJbXSA9IHsKIAl7ICJuZXRzdGF0IiwJc2hv
d25ldHN0YXQsCWZldGNobmV0c3RhdCwJbGFiZWxuZXRzdGF0LAogCSAgaW5pdG5ldHN0YXQsCW9w
ZW5uZXRzdGF0LAljbG9zZW5ldHN0YXQsCWNtZG5ldHN0YXQsCiAJICAwLAkJQ0ZfTE9BREFWIH0s
CisJeyAibmV0YnciLAlzaG93bmV0YncsCWZldGNobmV0YncsCWxhYmVsbmV0YncsCisJICBpbml0
bmV0YncsCW9wZW5uZXRidywJY2xvc2VuZXRidywJTlVMTCwKKwkgIDAsCQkwIH0sCiAJeyAiaWNt
cCIsCXNob3dpY21wLAlmZXRjaGljbXAsCWxhYmVsaWNtcCwKIAkgIGluaXRpY21wLAlvcGVuaWNt
cCwJY2xvc2VpY21wLAljbWRtb2RlLAogCSAgcmVzZXRpY21wLAlDRl9MT0FEQVYgfSwKZGlmZiAt
LWdpdCBhL3Vzci5iaW4vc3lzdGF0L2V4dGVybi5oIGIvdXNyLmJpbi9zeXN0YXQvZXh0ZXJuLmgK
aW5kZXggMTdmZmZjMS4uMzhkNDA4NCAxMDA2NDQKLS0tIGEvdXNyLmJpbi9zeXN0YXQvZXh0ZXJu
LmgKKysrIGIvdXNyLmJpbi9zeXN0YXQvZXh0ZXJuLmgKQEAgLTc2LDYgKzc2LDcgQEAgdm9pZAkg
Y2xvc2Vpb3N0YXQoV0lORE9XICopOwogdm9pZAkgY2xvc2VpcChXSU5ET1cgKik7CiB2b2lkCSBj
bG9zZWlwNihXSU5ET1cgKik7CiB2b2lkCSBjbG9zZWtyZShXSU5ET1cgKik7Cit2b2lkCSBjbG9z
ZW5ldGJ3KFdJTkRPVyAqKTsKIHZvaWQJIGNsb3NlbmV0c3RhdChXSU5ET1cgKik7CiB2b2lkCSBj
bG9zZXBpZ3MoV0lORE9XICopOwogdm9pZAkgY2xvc2Vzd2FwKFdJTkRPVyAqKTsKQEAgLTgzLDYg
Kzg0LDcgQEAgdm9pZAkgY2xvc2V0Y3AoV0lORE9XICopOwogaW50CSBjbWRpZnN0YXQoY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOwogaW50CSBjbWRpb3N0YXQoY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICopOwogaW50CSBjbWRrcmUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworaW50
CSBjbWRuZXRidyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBpbnQJIGNtZG5ldHN0YXQo
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogc3RydWN0CSBjbWR0YWIgKmxvb2t1cChjb25z
dCBjaGFyICopOwogdm9pZAkgY29tbWFuZChjb25zdCBjaGFyICopOwpAQCAtOTgsNiArMTAwLDcg
QEAgdm9pZAkgZmV0Y2hpcCh2b2lkKTsKIHZvaWQJIGZldGNoaXA2KHZvaWQpOwogdm9pZAkgZmV0
Y2hpb3N0YXQodm9pZCk7CiB2b2lkCSBmZXRjaGtyZSh2b2lkKTsKK3ZvaWQJIGZldGNobmV0Ynco
dm9pZCk7CiB2b2lkCSBmZXRjaG5ldHN0YXQodm9pZCk7CiB2b2lkCSBmZXRjaHBpZ3Modm9pZCk7
CiB2b2lkCSBmZXRjaHN3YXAodm9pZCk7CkBAIC0xMTEsNiArMTE0LDcgQEAgaW50CSBpbml0aXAo
dm9pZCk7CiBpbnQJIGluaXRpcDYodm9pZCk7CiBpbnQJIGluaXRpb3N0YXQodm9pZCk7CiBpbnQJ
IGluaXRrcmUodm9pZCk7CitpbnQJIGluaXRuZXRidyh2b2lkKTsKIGludAkgaW5pdG5ldHN0YXQo
dm9pZCk7CiBpbnQJIGluaXRwaWdzKHZvaWQpOwogaW50CSBpbml0c3dhcCh2b2lkKTsKQEAgLTEy
NCw2ICsxMjgsNyBAQCB2b2lkCSBsYWJlbGlwKHZvaWQpOwogdm9pZAkgbGFiZWxpcDYodm9pZCk7
CiB2b2lkCSBsYWJlbGlvc3RhdCh2b2lkKTsKIHZvaWQJIGxhYmVsa3JlKHZvaWQpOwordm9pZAkg
bGFiZWxuZXRidyh2b2lkKTsKIHZvaWQJIGxhYmVsbmV0c3RhdCh2b2lkKTsKIHZvaWQJIGxhYmVs
cGlncyh2b2lkKTsKIHZvaWQJIGxhYmVscyh2b2lkKTsKQEAgLTEzOSw2ICsxNDQsNyBAQCBXSU5E
T1cJKm9wZW5pcCh2b2lkKTsKIFdJTkRPVwkqb3BlbmlwNih2b2lkKTsKIFdJTkRPVwkqb3Blbmlv
c3RhdCh2b2lkKTsKIFdJTkRPVwkqb3BlbmtyZSh2b2lkKTsKK1dJTkRPVwkqb3Blbm5ldGJ3KHZv
aWQpOwogV0lORE9XCSpvcGVubmV0c3RhdCh2b2lkKTsKIFdJTkRPVwkqb3BlbnBpZ3Modm9pZCk7
CiBXSU5ET1cJKm9wZW5zd2FwKHZvaWQpOwpAQCAtMTU2LDYgKzE2Miw3IEBAIHZvaWQJIHNob3dp
cCh2b2lkKTsKIHZvaWQJIHNob3dpcDYodm9pZCk7CiB2b2lkCSBzaG93aW9zdGF0KHZvaWQpOwog
dm9pZAkgc2hvd2tyZSh2b2lkKTsKK3ZvaWQJIHNob3duZXRidyh2b2lkKTsKIHZvaWQJIHNob3du
ZXRzdGF0KHZvaWQpOwogdm9pZAkgc2hvd3BpZ3Modm9pZCk7CiB2b2lkCSBzaG93c3dhcCh2b2lk
KTsKZGlmZiAtLWdpdCBhL3Vzci5iaW4vc3lzdGF0L25ldGJ3LmMgYi91c3IuYmluL3N5c3RhdC9u
ZXRidy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NWFmNWYKLS0tIC9k
ZXYvbnVsbAorKysgYi91c3IuYmluL3N5c3RhdC9uZXRidy5jCkBAIC0wLDAgKzEsNDc2IEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBEcmFnb25GbHkgUHJvamVjdC4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBj
b250cmlidXRlZCB0byBUaGUgRHJhZ29uRmx5IFByb2plY3QKKyAqIGJ5IE1hdHRoZXcgRGlsbG9u
IDxkaWxsb25AYmFja3BsYW5lLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBUaGUgRHJhZ29uRmx5IFByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMs
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElT
JycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNpbmNsdWRlIDxzeXMvdHJlZS5o
PgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+Cisj
aW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVk
ZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBh
L2luZXQuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5
c3RtLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2lmZGVmIElORVQ2CisjaW5jbHVkZSA8
bmV0aW5ldC9pcDYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldGluZXQvaW5fcGNiLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pY21wX3Zhci5oPgor
I2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3RjcGlwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3Bfc2VxLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC90Y3BfZnNtLmg+CisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF9k
ZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC91ZHBf
dmFyLmg+CisKKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUg
PG5ldGRiLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j
bHVkZSA8bmxpc3QuaD4KKyNpbmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgInN5c3RhdC5oIgor
I2luY2x1ZGUgImV4dGVybi5oIgorCisvKiBSZWR1Y2UgZGlmZiBmcm9tIERyYWdvbmZseUJTRC4g
Ki8KK3VuaW9uIGluX2RlcGVuZGFkZHIgeworCXN0cnVjdCBpbl9hZGRyXzRpbjYgaWQ0Nl9hZGRy
OworCXN0cnVjdCBpbjZfYWRkciBpZDZfYWRkcjsKK307Cit0eXBlZGVmIGludDMyX3QgdGNwX3Nl
cV9kaWZmX3Q7CisjZGVmaW5lIHM2X2FkZHIxNiBfX3U2X2FkZHIuX191Nl9hZGRyMTYKKworc3Ry
dWN0IG15dGNwY2IgeworCVJCX0VOVFJZKG15dGNwY2IpCXJiX25vZGU7CisJaW50CQkJc2VxOwor
CXN0cnVjdCB4dGNwY2IJCXh0Y3A7CisJc3RydWN0IHh0Y3BjYgkJbGFzdF94dGNwOworfTsKKwor
c3RhdGljIGludAorbXl0Y3BjYl9jbXAoc3RydWN0IG15dGNwY2IgKnRjcDEsIHN0cnVjdCBteXRj
cGNiICp0Y3AyKQoreworCWludCByOworCisJLyoKKwkgKiBMb3cgbG9jYWwgb3IgZm9yZWlnbiBw
b3J0IGNvbWVzIGZpcnN0IChsb2NhbCBoYXMgcHJpb3JpdHkpLgorCSAqLworCWlmIChudG9ocyh0
Y3AxLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19pZS5pZV9scG9ydCkgPj0gMTAyNCAmJgorCSAg
ICBudG9ocyh0Y3AyLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19pZS5pZV9scG9ydCkgPj0gMTAy
NCkgeworCQlpZiAobnRvaHModGNwMS0+eHRjcC54dF9pbnAuaW5wX2luYy5pbmNfaWUuaWVfZnBv
cnQpIDwKKwkJICAgIG50b2hzKHRjcDItPnh0Y3AueHRfaW5wLmlucF9pbmMuaW5jX2llLmllX2Zw
b3J0KSkKKwkJCXJldHVybigtMSk7CisJCWlmIChudG9ocyh0Y3AxLT54dGNwLnh0X2lucC5pbnBf
aW5jLmluY19pZS5pZV9mcG9ydCkgPgorCQkgICAgbnRvaHModGNwMi0+eHRjcC54dF9pbnAuaW5w
X2luYy5pbmNfaWUuaWVfZnBvcnQpKQorCQkJcmV0dXJuKDEpOworCX0KKworCWlmIChudG9ocyh0
Y3AxLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19pZS5pZV9scG9ydCkgPAorCSAgICBudG9ocyh0
Y3AyLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19pZS5pZV9scG9ydCkpCisJCXJldHVybigtMSk7
CisJaWYgKG50b2hzKHRjcDEtPnh0Y3AueHRfaW5wLmlucF9pbmMuaW5jX2llLmllX2xwb3J0KSA+
CisJICAgIG50b2hzKHRjcDItPnh0Y3AueHRfaW5wLmlucF9pbmMuaW5jX2llLmllX2xwb3J0KSkK
KwkJcmV0dXJuKDEpOworCWlmIChudG9ocyh0Y3AxLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19p
ZS5pZV9mcG9ydCkgPAorCSAgICBudG9ocyh0Y3AyLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19p
ZS5pZV9mcG9ydCkpCisJCXJldHVybigtMSk7CisJaWYgKG50b2hzKHRjcDEtPnh0Y3AueHRfaW5w
LmlucF9pbmMuaW5jX2llLmllX2Zwb3J0KSA+CisJICAgIG50b2hzKHRjcDItPnh0Y3AueHRfaW5w
LmlucF9pbmMuaW5jX2llLmllX2Zwb3J0KSkKKwkJcmV0dXJuKDEpOworCisJLyoKKwkgKiBTb3J0
IElQVjQgdnMgSVBWNiBhZGRyZXNzZXMKKwkgKi8KKwlpZiAoKHRjcDEtPnh0Y3AueHRfaW5wLmlu
cF92ZmxhZyAmIChJTlBfSVBWNHxJTlBfSVBWNikpIDwKKwkgICAgKHRjcDItPnh0Y3AueHRfaW5w
LmlucF92ZmxhZyAmIChJTlBfSVBWNHxJTlBfSVBWNikpKQorCQlyZXR1cm4oLTEpOworCWlmICgo
dGNwMS0+eHRjcC54dF9pbnAuaW5wX3ZmbGFnICYgKElOUF9JUFY0fElOUF9JUFY2KSkgPgorCSAg
ICAodGNwMi0+eHRjcC54dF9pbnAuaW5wX3ZmbGFnICYgKElOUF9JUFY0fElOUF9JUFY2KSkpCisJ
CXJldHVybigxKTsKKworCS8qCisJICogTG9jYWwgYW5kIGZvcmVpZ24gYWRkcmVzc2VzCisJICov
CisJaWYgKHRjcDEtPnh0Y3AueHRfaW5wLmlucF92ZmxhZyAmIElOUF9JUFY0KSB7CisJCWlmIChu
dG9obCh0Y3AxLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19pZS5pZV9sYWRkci5zX2FkZHIpIDwK
KwkJICAgIG50b2hsKHRjcDItPnh0Y3AueHRfaW5wLmlucF9pbmMuaW5jX2llLmllX2xhZGRyLnNf
YWRkcikpCisJCQlyZXR1cm4oLTEpOworCQlpZiAobnRvaGwodGNwMS0+eHRjcC54dF9pbnAuaW5w
X2luYy5pbmNfaWUuaWVfbGFkZHIuc19hZGRyKSA+CisJCSAgICBudG9obCh0Y3AyLT54dGNwLnh0
X2lucC5pbnBfaW5jLmluY19pZS5pZV9sYWRkci5zX2FkZHIpKQorCQkJcmV0dXJuKDEpOworCQlp
ZiAobnRvaGwodGNwMS0+eHRjcC54dF9pbnAuaW5wX2luYy5pbmNfaWUuaWVfZmFkZHIuc19hZGRy
KSA8CisJCSAgICBudG9obCh0Y3AyLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19pZS5pZV9mYWRk
ci5zX2FkZHIpKQorCQkJcmV0dXJuKC0xKTsKKwkJaWYgKG50b2hsKHRjcDEtPnh0Y3AueHRfaW5w
LmlucF9pbmMuaW5jX2llLmllX2ZhZGRyLnNfYWRkcikgPgorCQkgICAgbnRvaGwodGNwMi0+eHRj
cC54dF9pbnAuaW5wX2luYy5pbmNfaWUuaWVfZmFkZHIuc19hZGRyKSkKKwkJCXJldHVybigxKTsK
Kwl9IGVsc2UgaWYgKHRjcDEtPnh0Y3AueHRfaW5wLmlucF92ZmxhZyAmIElOUF9JUFY2KSB7CisJ
CXIgPSBiY21wKCZ0Y3AxLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19pZS5pZTZfZmFkZHIsCisJ
CQkgJnRjcDItPnh0Y3AueHRfaW5wLmlucF9pbmMuaW5jX2llLmllNl9mYWRkciwKKwkJCSBzaXpl
b2YodGNwMS0+eHRjcC54dF9pbnAuaW5wX2luYy5pbmNfaWUuaWU2X2ZhZGRyKSk7CisJCWlmIChy
KQorCQkJcmV0dXJuKHIpOworCX0gZWxzZSB7CisJCXIgPSBiY21wKCZ0Y3AxLT54dGNwLnh0X2lu
cC5pbnBfaW5jLmluY19pZS5pZTZfZmFkZHIsCisJCQkgJnRjcDItPnh0Y3AueHRfaW5wLmlucF9p
bmMuaW5jX2llLmllNl9mYWRkciwKKwkJCSBzaXplb2YodGNwMS0+eHRjcC54dF9pbnAuaW5wX2lu
Yy5pbmNfaWUuaWU2X2ZhZGRyKSk7CisJCWlmIChyKQorCQkJcmV0dXJuKHIpOworCX0KKwlyZXR1
cm4oMCk7Cit9CisKK3N0cnVjdCBteXRjcGNiX3RyZWU7CitzdGF0aWMgUkJfSEVBRChteXRjcGNi
X3RyZWUsIG15dGNwY2IpOworUkJfUFJPVE9UWVBFX1NUQVRJQyhteXRjcGNiX3RyZWUsIG15dGNw
Y2IsIHJiX25vZGUsIG15dGNwY2JfY21wKTsKK1JCX0dFTkVSQVRFX1NUQVRJQyhteXRjcGNiX3Ry
ZWUsIG15dGNwY2IsIHJiX25vZGUsIG15dGNwY2JfY21wKTsKKworc3RhdGljIHN0cnVjdCBteXRj
cGNiX3RyZWUgbXl0Y3BfdHJlZTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0dl9jdXJyOworc3Rh
dGljIHN0cnVjdCB0aW1ldmFsIHR2X2xhc3Q7CitzdGF0aWMgc3RydWN0IHRjcHN0YXQgdGNwX2N1
cnI7CitzdGF0aWMgc3RydWN0IHRjcHN0YXQgdGNwX2xhc3Q7CitzdGF0aWMgaW50IHRjcF9wY2Jf
c2VxOworCitzdGF0aWMgY29uc3QgY2hhciAqbnVtdG9rKGRvdWJsZSB2YWx1ZSk7CitzdGF0aWMg
dm9pZCBuZXRid2xpbmUoaW50IHJvdywgc3RydWN0IG15dGNwY2IgKmVsbSwgZG91YmxlIGRlbHRh
X3RpbWUpOworc3RhdGljIGNvbnN0IGNoYXIgKm5ldGFkZHJzdHIodV9jaGFyIHZmbGFncywgdW5p
b24gaW5fZGVwZW5kYWRkciAqZGVwYWRkciwKKwkJICAgICAgIHVfaW50MTZfdCBwb3J0KTsKK3N0
YXRpYyB2b2lkIHVwZGF0ZXBjYihzdHJ1Y3QgeHRjcGNiICp4dGNwKTsKKworI2RlZmluZSBERUxU
QVJBVEUoZmllbGQpCVwKKwkoKGRvdWJsZSkodGNwX2N1cnIuZmllbGQgLSB0Y3BfbGFzdC5maWVs
ZCkgLyBkZWx0YV90aW1lKQorCisjZGVmaW5lIERFTFRBRUxNKGZpZWxkKQkJXAorCSgoZG91Ymxl
KSh0Y3Bfc2VxX2RpZmZfdCkoZWxtLT54dGNwLmZpZWxkIC0JCVwKKwkJCQkgIGVsbS0+bGFzdF94
dGNwLmZpZWxkKSAvCVwKKwkgZGVsdGFfdGltZSkKKworI2RlZmluZSBERUxUQUVMTVNDQUxFKGZp
ZWxkLCBzY2FsZSkJCVwKKwkoKGRvdWJsZSkoKHRjcF9zZXFfZGlmZl90KShlbG0tPnh0Y3AuZmll
bGQgLQkJXAorCQkJCSAgIGVsbS0+bGFzdF94dGNwLmZpZWxkKSA8PCBzY2FsZSkgLyBcCisJIGRl
bHRhX3RpbWUpCisKK1dJTkRPVyAqCitvcGVubmV0Yncodm9pZCkKK3sKKwlSQl9JTklUKCZteXRj
cF90cmVlKTsKKwlyZXR1cm4gKHN1YndpbihzdGRzY3IsIExJTkVTLTAtMSwgMCwgMCwgMCkpOwor
fQorCit2b2lkCitjbG9zZW5ldGJ3KFdJTkRPVyAqdykKK3sKKwlzdHJ1Y3QgbXl0Y3BjYiAqbXl0
Y3A7CisKKwl3aGlsZSAoKG15dGNwID0gUkJfUk9PVCgmbXl0Y3BfdHJlZSkpICE9IE5VTEwpIHsK
KwkJUkJfUkVNT1ZFKG15dGNwY2JfdHJlZSwgJm15dGNwX3RyZWUsIG15dGNwKTsKKwkJZnJlZSht
eXRjcCk7CisJfQorCisJaWYgKHcgIT0gTlVMTCkgeworCQl3Y2xlYXIodyk7CisJCXdyZWZyZXNo
KHcpOworCQlkZWx3aW4odyk7CisJfQorfQorCitpbnQKK2luaXRuZXRidyh2b2lkKQoreworCXJl
dHVybigxKTsKK30KKwordm9pZAorZmV0Y2huZXRidyh2b2lkKQoreworCXN0cnVjdCB4aW5wZ2Vu
ICppbnBnOworCXN0cnVjdCB4dGNwY2IgKnh0cDsKKwljaGFyICpjdXIsICplbmQ7CisJc2l6ZV90
IGxlbjsKKworCS8qCisJICogRXh0cmFjdCBQQ0IgbGlzdAorCSAqLworCWlucGcgPSAoc3RydWN0
IHhpbnBnZW4gKilzeXNjdGxfZHlucmVhZCgibmV0LmluZXQudGNwLnBjYmxpc3QiLCAmbGVuKTsK
KwlpZiAoaW5wZyA9PSBOVUxMKQorCQlyZXR1cm47CisJLyoKKwkgKiBXZSBjdXJyZW50bHkgZG8g
bm8gcmVxdWlyZSBhIGNvbnNpc3RlbnQgcGNiIGxpc3QuCisJICogVHJ5IHRvIGJlIHJvYnVzdCBp
biBjYXNlIG9mIHN0cnVjdCBzaXplIGNoYW5nZXMKKwkgKi8KKwljdXIgPSAoKGNoYXIgKilpbnBn
KSArIGlucGctPnhpZ19sZW47CisJLyogVGhlcmUgaXMgYWxzbyBhIHRyYWlsaW5nIHN0cnVjdCB4
aW5wZ2VuICovCisJZW5kID0gKChjaGFyICopaW5wZykgKyBsZW4gLSBpbnBnLT54aWdfbGVuOwor
CWlmIChlbmQgPD0gY3VyKSB7CisJCWZyZWUoaW5wZyk7CisJCXJldHVybjsKKwl9CisJKyt0Y3Bf
cGNiX3NlcTsKKwl4dHAgPSAoc3RydWN0IHh0Y3BjYiAqKWN1cjsKKwl3aGlsZSAoY3VyICsgeHRw
LT54dF9sZW4gPD0gZW5kKSB7CisJCXVwZGF0ZXBjYih4dHApOworCQljdXIgKz0geHRwLT54dF9s
ZW47CisJCXh0cCA9IChzdHJ1Y3QgeHRjcGNiICopY3VyOworCX0KKwlmcmVlKGlucGcpOworCisJ
LyoKKwkgKiBHZW5lcmFsIHN0YXRzCisJICovCisJdGNwX2xhc3QgPSB0Y3BfY3VycjsKKwlsZW4g
PSBzaXplb2YodGNwX2N1cnIpOworCWlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnRjcC5zdGF0
cyIsICZ0Y3BfY3VyciwgJmxlbiwgTlVMTCwgMCkgPCAwKQorCQlyZXR1cm47CisJdHZfbGFzdCA9
IHR2X2N1cnI7CisJZ2V0dGltZW9mZGF5KCZ0dl9jdXJyLCBOVUxMKTsKK30KKwordm9pZAorbGFi
ZWxuZXRidyh2b2lkKQoreworCXdtb3ZlKHduZCwgMCwgMCk7CisJd2NscnRvYm90KHduZCk7Cisj
aWYgMAorCW12d2FkZHN0cih3bmQsIDAsIExBRERSLCAiTG9jYWwgQWRkcmVzcyIpOworCW12d2Fk
ZHN0cih3bmQsIDAsIEZBRERSLCAiRm9yZWlnbiBBZGRyZXNzIik7CisJbXZ3YWRkc3RyKHduZCwg
MCwgUFJPVE8sICJQcm90byIpOworCW12d2FkZHN0cih3bmQsIDAsIFJDVkNDLCAiUmVjdi1RIik7
CisJbXZ3YWRkc3RyKHduZCwgMCwgU05EQ0MsICJTZW5kLVEiKTsKKwltdndhZGRzdHIod25kLCAw
LCBTVEFURSwgIihzdGF0ZSkiKTsKKyNlbmRpZgorfQorCit2b2lkCitzaG93bmV0Yncodm9pZCkK
K3sKKwlkb3VibGUgZGVsdGFfdGltZTsKKwlzdHJ1Y3QgbXl0Y3BjYiAqZWxtLCAqdGVsbTsKKwlp
bnQgcm93OworCisJZGVsdGFfdGltZSA9IChkb3VibGUpKHR2X2N1cnIudHZfc2VjIC0gdHZfbGFz
dC50dl9zZWMpIC0gMS4wICsKKwkJICAgICAodHZfY3Vyci50dl91c2VjICsgMTAwMDAwMCAtIHR2
X2xhc3QudHZfdXNlYykgLyAxZTY7CisJaWYgKGRlbHRhX3RpbWUgPCAwLjEpCisJCXJldHVybjsK
KworCW12d3ByaW50dyh3bmQsIDAsIDAsCisJCSAgInRjcCBhY2NlcHRzICVzIGNvbm5lY3RzICVz
ICIKKwkJICAiICAgICAgICAgcmN2ICVzIHNuZCAlcyByZXhtaXQgJXMiLAorCQkgIG51bXRvayhE
RUxUQVJBVEUodGNwc19hY2NlcHRzKSksCisJCSAgbnVtdG9rKERFTFRBUkFURSh0Y3BzX2Nvbm5l
Y3RzKSAtIERFTFRBUkFURSh0Y3BzX2FjY2VwdHMpKSwKKwkJICBudW10b2soREVMVEFSQVRFKHRj
cHNfcmN2Ynl0ZSkpLAorCQkgIG51bXRvayhERUxUQVJBVEUodGNwc19zbmRieXRlKSksCisJCSAg
bnVtdG9rKERFTFRBUkFURSh0Y3BzX3NuZHJleG1pdGJ5dGUpKSk7CisKKwlyb3cgPSAyOworCVJC
X0ZPUkVBQ0hfU0FGRShlbG0sIG15dGNwY2JfdHJlZSwgJm15dGNwX3RyZWUsIHRlbG0pIHsKKwkJ
aWYgKGVsbS0+c2VxID09IHRjcF9wY2Jfc2VxICYmCisJCSAgICAoZWxtLT54dGNwLnh0X3NvY2tl
dC5zb19yY3Yuc2JfY2MgfHwKKwkJICAgICBlbG0tPnh0Y3AueHRfc29ja2V0LnNvX3NuZC5zYl9j
YyB8fAorCQkgICAgIERFTFRBRUxNKHh0X3RwLnNuZF9tYXgpIHx8CisJCSAgICAgREVMVEFFTE0o
eHRfdHAucmN2X254dCkKKwkJICAgICkpIHsKKwkJCWlmIChyb3cgPCBMSU5FUyAtIDMpCisJCQkJ
bmV0YndsaW5lKHJvdywgZWxtLCBkZWx0YV90aW1lKTsKKwkJCSsrcm93OworCQl9IGVsc2UgaWYg
KGVsbS0+c2VxICE9IHRjcF9wY2Jfc2VxKSB7CisJCQlSQl9SRU1PVkUobXl0Y3BjYl90cmVlLCAm
bXl0Y3BfdHJlZSwgZWxtKTsKKwkJCWZyZWUoZWxtKTsKKwkJfQorCX0KKwl3bW92ZSh3bmQsIHJv
dywgMCk7CisJd2NscnRvYm90KHduZCk7CisJbXZ3cHJpbnR3KHduZCwgTElORVMtMiwgMCwKKwkJ
ICAiUmF0ZS9zZWMsICIKKwkJICAiUj1yeHBlbmQgVD10eHBlbmQgTj1ub2RlbGF5IFQ9dHN0bXAg
IgorCQkgICJTPXNhY2sgWD13aW5zY2FsZSBGPWZhc3RyZWMiKTsKK30KKworc3RhdGljIHZvaWQK
K25ldGJ3bGluZShpbnQgcm93LCBzdHJ1Y3QgbXl0Y3BjYiAqZWxtLCBkb3VibGUgZGVsdGFfdGlt
ZSkKK3sKKwltdndwcmludHcod25kLCByb3csIDAsCisJCSAgIiVzICVzICIKKwkJICAvKiJyeGIg
JXMgdHhiICVzICIqLworCQkgICJyY3YgJXMgc25kICVzICIKKwkJICAiWyVjJWMlYyVjJWMlYyVj
XSIsCisJCSAgbmV0YWRkcnN0cigKKwkJICAgIGVsbS0+eHRjcC54dF9pbnAuaW5wX3ZmbGFnLAor
CQkgICAgKHVuaW9uIGluX2RlcGVuZGFkZHIgKikmZWxtLT54dGNwLnh0X2lucC5pbnBfaW5jLmlu
Y19pZS4KKwkJCWllX2RlcGVuZGxhZGRyLAorCQkgICAgbnRvaHMoZWxtLT54dGNwLnh0X2lucC5p
bnBfaW5jLmluY19pZS5pZV9scG9ydCkpLAorCQkgIG5ldGFkZHJzdHIoCisJCSAgICBlbG0tPnh0
Y3AueHRfaW5wLmlucF92ZmxhZywKKwkJICAgICh1bmlvbiBpbl9kZXBlbmRhZGRyKikmZWxtLT54
dGNwLnh0X2lucC5pbnBfaW5jLmluY19pZS4KKwkJCWllX2RlcGVuZGZhZGRyLAorCQkgICAgbnRv
aHMoZWxtLT54dGNwLnh0X2lucC5pbnBfaW5jLmluY19pZS5pZV9mcG9ydCkpLAorCQkvKgorCQkg
IG51bXRvayhlbG0tPnh0Y3AueHRfc29ja2V0LnNvX3Jjdi5zYl9jYyksCisJCSAgbnVtdG9rKGVs
bS0+eHRjcC54dF9zb2NrZXQuc29fc25kLnNiX2NjKSwKKwkJKi8KKwkJICBudW10b2soREVMVEFF
TE0oeHRfdHAucmN2X254dCkpLAorCQkgIG51bXRvayhERUxUQUVMTSh4dF90cC5zbmRfbWF4KSks
CisJCSAgKGVsbS0+eHRjcC54dF9zb2NrZXQuc29fcmN2LnNiX2NjID4gMTUwMDAgPworCQkgICAn
UicgOiAnICcpLAorCQkgIChlbG0tPnh0Y3AueHRfc29ja2V0LnNvX3NuZC5zYl9jYyA+IDE1MDAw
ID8KKwkJICAgJ1QnIDogJyAnKSwKKwkJICAoKGVsbS0+eHRjcC54dF90cC50X2ZsYWdzICYgVEZf
Tk9ERUxBWSkgPworCQkgICAnTicgOiAnICcpLAorCQkgICgoZWxtLT54dGNwLnh0X3RwLnRfZmxh
Z3MgJiBURl9SQ1ZEX1RTVE1QKSA/CisJCSAgICdUJyA6ICcgJyksCisJCSAgKChlbG0tPnh0Y3Au
eHRfdHAudF9mbGFncyAmIFRGX1NBQ0tfUEVSTUlUKSA/CisJCSAgICdTJyA6ICcgJyksCisJCSAg
KChlbG0tPnh0Y3AueHRfdHAudF9mbGFncyAmIFRGX1JDVkRfU0NBTEUpID8KKwkJICAgJ1gnIDog
JyAnKSwKKwkJICAoKGVsbS0+eHRjcC54dF90cC50X2ZsYWdzICYgVEZfRkFTVFJFQ09WRVJZKSA/
CisJCSAgICdGJyA6ICcgJykKKwkpOworCXdjbHJ0b2VvbCh3bmQpOworfQorCisjaWYgMAoraW50
CitjbWRuZXRidyhjb25zdCBjaGFyICpjbWQgX191bnVzZWQsIGNoYXIgKmFyZ3MgX191bnVzZWQp
Cit7CisJZmV0Y2huZXRidygpOworCXNob3duZXRidygpOworCXJlZnJlc2goKTsKKworCXJldHVy
biAoMCk7Cit9CisjZW5kaWYKKworI2RlZmluZSBNQVhJTkRFWEVTIDgKKworc3RhdGljIGNvbnN0
IGNoYXIgKgorbnVtdG9rKGRvdWJsZSB2YWx1ZSkKK3sKKwlzdGF0aWMgY2hhciBidWZbTUFYSU5E
RVhFU11bMzJdOworCXN0YXRpYyBpbnQgbmV4dGk7CisJc3RhdGljIGNvbnN0IGNoYXIgKnN1ZmZp
eGVzW10gPSB7ICIgIiwgIksiLCAiTSIsICJHIiwgIlQiLCBOVUxMIH07CisJaW50IHN1ZmZpeCA9
IDA7CisJY29uc3QgY2hhciAqZm10OworCisJd2hpbGUgKHZhbHVlID49IDEwMDAuMCAmJiBzdWZm
aXhlc1tzdWZmaXgrMV0pIHsKKwkJdmFsdWUgLz0gMTAwMC4wOworCQkrK3N1ZmZpeDsKKwl9CisJ
bmV4dGkgPSAobmV4dGkgKyAxKSAlIE1BWElOREVYRVM7CisJaWYgKHZhbHVlIDwgMC4wMDEpIHsK
KwkJZm10ID0gIiAgICAgICI7CisJfSBlbHNlIGlmICh2YWx1ZSA8IDEuMCkgeworCQlmbXQgPSAi
JTUuM2YlcyI7CisJfSBlbHNlIGlmICh2YWx1ZSA8IDEwLjApIHsKKwkJZm10ID0gIiU1LjNmJXMi
OworCX0gZWxzZSBpZiAodmFsdWUgPCAxMDAuMCkgeworCQlmbXQgPSAiJTUuMmYlcyI7CisJfSBl
bHNlIHsKKwkJZm10ID0gIiU1LjFmJXMiOworCX0KKwlzbnByaW50ZihidWZbbmV4dGldLCBzaXpl
b2YoYnVmW25leHRpXSksCisJCSBmbXQsIHZhbHVlLCBzdWZmaXhlc1tzdWZmaXhdKTsKKwlyZXR1
cm4gKGJ1ZltuZXh0aV0pOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCituZXRhZGRyc3RyKHVf
Y2hhciB2ZmxhZ3MsIHVuaW9uIGluX2RlcGVuZGFkZHIgKmRlcGFkZHIsIHVfaW50MTZfdCBwb3J0
KQoreworCXN0YXRpYyBjaGFyIGJ1ZltNQVhJTkRFWEVTXVs2NF07CisJc3RhdGljIGludCBuZXh0
YTsKKwljaGFyIGJ1ZmlwWzY0XTsKKworCW5leHRhID0gKG5leHRhICsgMSkgJSBNQVhJTkRFWEVT
OworCisJaWYgKHZmbGFncyAmIElOUF9JUFY0KSB7CisJCXNucHJpbnRmKGJ1ZmlwLCBzaXplb2Yo
YnVmaXApLAorCQkJICIlZC4lZC4lZC4lZCIsCisJCQkgKG50b2hsKGRlcGFkZHItPmlkNDZfYWRk
ci5pYTQ2X2FkZHI0LnNfYWRkcikgPj4gMjQpICYKKwkJCSAgMjU1LAorCQkJIChudG9obChkZXBh
ZGRyLT5pZDQ2X2FkZHIuaWE0Nl9hZGRyNC5zX2FkZHIpID4+IDE2KSAmCisJCQkgIDI1NSwKKwkJ
CSAobnRvaGwoZGVwYWRkci0+aWQ0Nl9hZGRyLmlhNDZfYWRkcjQuc19hZGRyKSA+PiA4KSAmCisJ
CQkgIDI1NSwKKwkJCSAobnRvaGwoZGVwYWRkci0+aWQ0Nl9hZGRyLmlhNDZfYWRkcjQuc19hZGRy
KSA+PiAwKSAmCisJCQkgIDI1NSk7CisJCXNucHJpbnRmKGJ1ZltuZXh0YV0sIHNpemVvZihidWZb
bmV4dGFdKSwKKwkJCSAiJTE1czolLTVkIiwgYnVmaXAsIHBvcnQpOworCX0gZWxzZSBpZiAodmZs
YWdzICYgSU5QX0lQVjYpIHsKKwkJc25wcmludGYoYnVmaXAsIHNpemVvZihidWZpcCksCisJCQkg
IiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eCIsCisJCQkgbnRvaHMoZGVw
YWRkci0+aWQ2X2FkZHIuczZfYWRkcjE2WzBdKSwKKwkJCSBudG9ocyhkZXBhZGRyLT5pZDZfYWRk
ci5zNl9hZGRyMTZbMV0pLAorCQkJIG50b2hzKGRlcGFkZHItPmlkNl9hZGRyLnM2X2FkZHIxNlsy
XSksCisJCQkgbnRvaHMoZGVwYWRkci0+aWQ2X2FkZHIuczZfYWRkcjE2WzNdKSwKKwkJCSBudG9o
cyhkZXBhZGRyLT5pZDZfYWRkci5zNl9hZGRyMTZbNF0pLAorCQkJIG50b2hzKGRlcGFkZHItPmlk
Nl9hZGRyLnM2X2FkZHIxNls1XSksCisJCQkgbnRvaHMoZGVwYWRkci0+aWQ2X2FkZHIuczZfYWRk
cjE2WzZdKSwKKwkJCSBudG9ocyhkZXBhZGRyLT5pZDZfYWRkci5zNl9hZGRyMTZbN10pKTsKKwkJ
c25wcmludGYoYnVmW25leHRhXSwgc2l6ZW9mKGJ1ZltuZXh0YV0pLAorCQkJICIlMzlzOiUtNWQi
LCBidWZpcCwgcG9ydCk7CisJfSBlbHNlIHsKKwkJc25wcmludGYoYnVmaXAsIHNpemVvZihidWZp
cCksICI8dW5rbm93bj4iKTsKKwkJc25wcmludGYoYnVmW25leHRhXSwgc2l6ZW9mKGJ1ZltuZXh0
YV0pLAorCQkJICIlMTVzOiUtNWQiLCBidWZpcCwgcG9ydCk7CisJfQorCXJldHVybiAoYnVmW25l
eHRhXSk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVwY2Ioc3RydWN0IHh0Y3BjYiAqeHRjcCkK
K3sKKwlzdHJ1Y3QgbXl0Y3BjYiBkdW1teTsKKwlzdHJ1Y3QgbXl0Y3BjYiAqZWxtOworCisJZHVt
bXkueHRjcCA9ICp4dGNwOworCWlmICgoZWxtID0gUkJfRklORChteXRjcGNiX3RyZWUsICZteXRj
cF90cmVlLCAmZHVtbXkpKSA9PSBOVUxMKSB7CisJCWVsbSA9IG1hbGxvYyhzaXplb2YoKmVsbSkp
OworCQliemVybyhlbG0sIHNpemVvZigqZWxtKSk7CisJCWVsbS0+eHRjcCA9ICp4dGNwOworCQll
bG0tPmxhc3RfeHRjcCA9ICp4dGNwOworCQlSQl9JTlNFUlQobXl0Y3BjYl90cmVlLCAmbXl0Y3Bf
dHJlZSwgZWxtKTsKKwl9IGVsc2UgeworCQllbG0tPmxhc3RfeHRjcCA9IGVsbS0+eHRjcDsKKwkJ
ZWxtLT54dGNwID0gKnh0Y3A7CisJfQorCWVsbS0+c2VxID0gdGNwX3BjYl9zZXE7Cit9CmRpZmYg
LS1naXQgYS91c3IuYmluL3N5c3RhdC9zeXN0YXQuMSBiL3Vzci5iaW4vc3lzdGF0L3N5c3RhdC4x
CmluZGV4IDVmYzMyNTcuLjBhYjE3MzggMTAwNjQ0Ci0tLSBhL3Vzci5iaW4vc3lzdGF0L3N5c3Rh
dC4xCisrKyBiL3Vzci5iaW4vc3lzdGF0L3N5c3RhdC4xCkBAIC05NCw2ICs5NCw3IEBAIHRvIGJl
IG9uZSBvZjoKIC5JYyBpb3N0YXQgLAogLkljIGlwICwKIC5JYyBpcDYgLAorLkljIG5ldGJ3ICwK
IC5JYyBuZXRzdGF0ICwKIC5JYyBwaWdzICwKIC5JYyBzd2FwICwKQEAgLTQ0MSw2ICs0NDIsOSBA
QCBEaXNwbGF5IHN0YXRpc3RpY3MgYXZlcmFnZWQgb3ZlciB0aGUgcmVmcmVzaCBpbnRlcnZhbCAo
dGhlIGRlZmF1bHQpLgogLkl0IENtIHplcm8KIFJlc2V0IHJ1bm5pbmcgc3RhdGlzdGljcyB0byB6
ZXJvLgogLkVsCisuSXQgSWMgbmV0YncKK0Rpc3BsYXkgYWdncmVnYXRlIGFuZCBwZXItY29ubmVj
dGlvbiBUQ1AgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmF0ZXMuCitPbmx5IGFjdGl2ZSBUQ1AgY29u
bmVjdGlvbnMgYXJlIHNob3duLgogLkl0IEljIG5ldHN0YXQKIERpc3BsYXksIGluIHRoZSBsb3dl
ciB3aW5kb3csIG5ldHdvcmsgY29ubmVjdGlvbnMuCiBCeSBkZWZhdWx0LAotLSAKMS44LjUuNAoK
--001a11c21fc0e8049204fd3e8e11--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAMo0n6QD7tbObfSihfK8Sqgza-Td%2BSmfLubAcLhrBQBKfM5Fjg>