--216.240.41.26.80.70713.1241972886.186.1
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Alexander Polakov <polachok@gmail.com> added the comment:
I tried to fix memory leak and null pointer free here.
_____________________________________________________
DragonFly issue tracker <bugs@lists.dragonflybsd.org>
<http://bugs.dragonflybsd.org/issue1359>
_____________________________________________________
--216.240.41.26.80.70713.1241972886.186.1
Content-Type: text/x-csrc
Content-Disposition: attachment;
filename="powernow.c"
Content-Transfer-Encoding: base64
LyoKICogQ29weXJpZ2h0IChjKSAyMDA0IE1hcnRpbiBWXHhlOWdpYXJkLgogKiBDb3B5cmlnaHQg
KGMpIDIwMDQtMjAwNSBCcnVubyBEdWNyb3QKICogQ29weXJpZ2h0IChjKSAyMDA0IEZVS1VEQSBO
b2J1aGlrbyA8bmZ1a3VkYUBzcGEuaXMudWVjLmFjLmpwPgogKiBDb3B5cmlnaHQgKGMpIDIwMDQs
IDIwMDYgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAqCiAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8g
VGhlIE5ldEJTRCBGb3VuZGF0aW9uCiAqIGJ5IEp1YW4gUm9tZXJvIFBhcmRpbmVzIGFuZCBNYXJ0
aW4gVmVnaWFyZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwogKiBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELgogKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsCiAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAogKiBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogKi8KLyogQU1EIFBPV0VSTk9XIEs4IGRyaXZlciAqLwoKI2luY2x1ZGUgPHN5cy9wYXJh
bS5oPgojaW5jbHVkZSA8c3lzL3N5c3RtLmg+CiNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CiNpbmNs
dWRlIDxzeXMva2VybmVsLmg+CiNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CiNpbmNsdWRlIDxzeXMv
c3lzY3RsLmg+CiNpbmNsdWRlIDxidXMvaXNhL2lzYS5oPgojaW5jbHVkZSA8bWFjaGluZS9jcHUu
aD4KI2luY2x1ZGUgPG1hY2hpbmUvcG1hcC5oPgojaW5jbHVkZSA8bWFjaGluZS9wYy9iaW9zLmg+
CiNpbmNsdWRlIDxtYWNoaW5lL2NwdWZ1bmMuaD4KI2luY2x1ZGUgPG1hY2hpbmUvbWRfdmFyLmg+
CiNpbmNsdWRlIDxtYWNoaW5lL3NwZWNpYWxyZWcuaD4KCiNkZWZpbmUgUE44X1NUQV9NRklEKHgp
ICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDNmKQojZGVmaW5lIFBOOF9TVEFfTVZJ
RCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNDgpICYgMHgxZikKI2RlZmluZSBQTjhfU1RB
X1NGSUQoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgzZikKCi8qCiAqIE1TUnMg
YW5kIGJpdHMgdXNlZCBieSBQb3dlck5vdyEgdGVjaG5vbG9neQogKi8KI2RlZmluZSBNU1JfQU1E
SzdfRklEVklEX0NUTCAgICAgICAgICAgIDB4YzAwMTAwNDEKI2RlZmluZSBNU1JfQU1ESzdfRklE
VklEX1NUQVRVUyAgICAgICAgIDB4YzAwMTAwNDIKI2RlZmluZSBBTURfUE5fRklEX1ZJRCAgICAg
ICAgICAgICAgICAgIDB4MDYKCiNkZWZpbmUgQklPU19TVEFSVCAgICAgICAgICAgICAgICAgICAg
ICAweGUwMDAwCiNkZWZpbmUgQklPU19MRU4gICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAw
CiNkZWZpbmUgQklPU19TVEVQICAgICAgICAgICAgICAgICAgICAgICAxNgoKI2RlZmluZSBQTjhf
UFNCX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MTQKI2RlZmluZSBQTjhfUFNCX1RPX1JWTyh4
KSAgICAgICAgICAgICAgICgoeCkgJiAweDAzKQojZGVmaW5lIFBOOF9QU0JfVE9fSVJUKHgpICAg
ICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDAzKQojZGVmaW5lIFBOOF9QU0JfVE9fTVZTKHgp
ICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDAzKQojZGVmaW5lIFBOOF9QU0JfVE9fQkFU
VCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNikgJiAweDAzKQovKiBCaXRmaWVsZHMgdXNlZCBi
eSBLOCAqLwojZGVmaW5lIFBOOF9DVFJfRklEKHgpICAgICAgICAgICAgICAgICAgKCh4KSAmIDB4
M2YpCiNkZWZpbmUgUE44X0NUUl9WSUQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MWYp
IDw8IDgpCiNkZWZpbmUgUE44X0NUUl9QRU5ESU5HKHgpICAgICAgICAgICAgICAoKCh4KSAmIDEp
IDw8IDMyKQojZGVmaW5lIFBOOF9TVEFfQ0ZJRCh4KSAgICAgICAgICAgICAgICAgKCh4KSAmIDB4
M2YpCiNkZWZpbmUgUE44X1NUQV9TRklEKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAm
IDB4M2YpCiNkZWZpbmUgUE44X1NUQV9NRklEKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAx
NikgJiAweDNmKQojZGVmaW5lIFBOOF9TVEFfUEVORElORyh4KSAgICAgICAgICAgICAgKCgoeCkg
Pj4gMzEpICYgMHgwMSkKI2RlZmluZSBQTjhfU1RBX0NWSUQoeCkgICAgICAgICAgICAgICAgICgo
KHgpID4+IDMyKSAmIDB4MWYpCiNkZWZpbmUgUE44X1NUQV9TVklEKHgpICAgICAgICAgICAgICAg
ICAoKCh4KSA+PiA0MCkgJiAweDFmKQojZGVmaW5lIFBOOF9TVEFfTVZJRCh4KSAgICAgICAgICAg
ICAgICAgKCgoeCkgPj4gNDgpICYgMHgxZikKI2RlZmluZSBQTjhfUExMX0xPQ0soeCkgICAgICAg
ICAgICAgICAgICgoeCkgKiAxMDAwLzUpCiNkZWZpbmUgV1JJVEVfRklEVklEKGZpZCwgdmlkLCBj
dHJsKSAgICBcCiAgICAgICAgd3Jtc3IoTVNSX0FNREs3X0ZJRFZJRF9DVEwsICAgICBcCiAgICAg
ICAgICAgICgoKGN0cmwpIDw8IDMyKSB8ICgxVUxMIDw8IDE2KSB8ICgodmlkKSA8PCA4KSB8IChm
aWQpKSkKI2RlZmluZSBDT1VOVF9PRkZfSVJUKGlydCkgICAgICAgICAgICAgIERFTEFZKDEwICog
KDEgPDwgKGlydCkpKQojZGVmaW5lIENPVU5UX09GRl9WU1QodnN0KSAgICAgICAgICAgICAgREVM
QVkoMjAgKiAodnN0KSkKI2RlZmluZSBGSURfVE9fVkNPX0ZJRChmaWQpICAgICAgICAgICAgIFwK
ICAgICAgICAoKChmaWQpIDwgOCkgPyAoOCArICgoZmlkKSA8PCAxKSkgOiAoZmlkKSkKCiNkZWZp
bmUgUkVBRF9QRU5ESU5HX1dBSVQoc3RhdHVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAoc3RhdHVzKSA9IHJkbXNyKE1TUl9BTURLN19G
SURWSURfU1RBVFVTKTsgICAgICBcCiAgICAgICAgfSB3aGlsZSAoUE44X1NUQV9QRU5ESU5HKHN0
YXR1cykpCiNkZWZpbmUgYWJzKHgpICggeCA8IDAgPyAteCA6IHggKQoKI2RlZmluZSBQT1dFUk5P
V19NQVhfU1RBVEVTICAgICAgICAgICAgIDE2CgpzdHJ1Y3Qgazhwbm93X3N0YXRlIHsKICAgICAg
ICBpbnQgZnJlcTsKICAgICAgICB1aW50OF90IGZpZDsKICAgICAgICB1aW50OF90IHZpZDsKfTsK
CnN0cnVjdCBrOHBub3dfY3B1X3N0YXRlIHsKICAgICAgICBzdHJ1Y3Qgazhwbm93X3N0YXRlIHN0
YXRlX3RhYmxlW1BPV0VSTk9XX01BWF9TVEFURVNdOwogICAgICAgIHVuc2lnbmVkIGludCBuX3N0
YXRlczsKICAgICAgICB1bnNpZ25lZCBpbnQgc2d0YzsKICAgICAgICB1bnNpZ25lZCBpbnQgdnN0
OwogICAgICAgIHVuc2lnbmVkIGludCBtdnM7CiAgICAgICAgdW5zaWduZWQgaW50IHBsbDsKICAg
ICAgICB1bnNpZ25lZCBpbnQgcnZvOwogICAgICAgIHVuc2lnbmVkIGludCBpcnQ7CiAgICAgICAg
aW50IGxvdzsKfTsKCnN0cnVjdCBwc2JfcyB7CiAgICAgICAgY2hhciBzaWduYXR1cmVbMTBdOyAg
ICAgLyogQU1ESzdQTk9XISAqLwogICAgICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgICAgICB1aW50
OF90IGZsYWdzOwogICAgICAgIHVpbnQxNl90IHR0aW1lOyAgICAgICAgIC8qIE1pbiBTZXR0bGlu
ZyB0aW1lICovCiAgICAgICAgdWludDhfdCByZXNlcnZlZDsKICAgICAgICB1aW50OF90IG5fcHN0
Owp9OwpzdHJ1Y3QgcHN0X3MgewogICAgICAgIHVpbnQzMl90IGNwdWlkOwogICAgICAgIHVpbnQ4
X3QgcGxsOwogICAgICAgIHVpbnQ4X3QgZmlkOwogICAgICAgIHVpbnQ4X3QgdmlkOwogICAgICAg
IHVpbnQ4X3Qgbl9zdGF0ZXM7Cn07CgpzdGF0aWMgc3RydWN0IGs4cG5vd19jcHVfc3RhdGUgKms4
cG5vd19jdXJyZW50X3N0YXRlID0gTlVMTDsKaW50IGNwdXNwZWVkOwoKaW50Cms4cG5vd19zdGF0
ZXMoc3RydWN0IGs4cG5vd19jcHVfc3RhdGUgKmNzdGF0ZSwgdWludDMyX3QgY3B1c2lnLAogICAg
dW5zaWduZWQgaW50IGZpZCwgdW5zaWduZWQgaW50IHZpZCk7CmludAprOHBub3dfZGVjb2RlX3Bz
dChzdHJ1Y3Qgazhwbm93X2NwdV9zdGF0ZSAqY3N0YXRlLCB1aW50OF90ICpwKTsKLyoKICogR2l2
ZW4gYSBzZXQgb2YgcGFpciBvZiBmaWQvdmlkLCBhbmQgbnVtYmVyIG9mIHBlcmZvcm1hbmNlIHN0
YXRlcywKICogY29tcHV0ZSBzdGF0ZV90YWJsZSB2aWEgYW4gaW5zZXJ0aW9uIHNvcnQuCiAqLwpp
bnQKazhwbm93X2RlY29kZV9wc3Qoc3RydWN0IGs4cG5vd19jcHVfc3RhdGUgKmNzdGF0ZSwgdWlu
dDhfdCAqcCkKewogICAgICAgIGludCBpLCBqLCBuOwogICAgICAgIHN0cnVjdCBrOHBub3dfc3Rh
dGUgc3RhdGU7CiAgICAgICAgZm9yIChuID0gMCwgaSA9IDA7IGkgPCBjc3RhdGUtPm5fc3RhdGVz
OyBpKyspIHsKICAgICAgICAgICAgICAgIHN0YXRlLmZpZCA9ICpwKys7CiAgICAgICAgICAgICAg
ICBzdGF0ZS52aWQgPSAqcCsrOwogICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAq
IFRoZSBtaW5pbXVtIHN1cHBvcnRlZCBmcmVxdWVuY3kgcGVyIHRoZSBkYXRhIHNoZWV0IGlzIDgw
ME1IegogICAgICAgICAgICAgICAgICogVGhlIG1heGltdW0gc3VwcG9ydGVkIGZyZXF1ZW5jeSBp
cyA1MDAwTUh6LgogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICBzdGF0ZS5mcmVx
ID0gODAwICsgc3RhdGUuZmlkICogMTAwOwogICAgICAgICAgICAgICAgaiA9IG47CiAgICAgICAg
ICAgICAgICB3aGlsZSAoaiA+IDAgJiYgY3N0YXRlLT5zdGF0ZV90YWJsZVtqIC0gMV0uZnJlcSA+
IHN0YXRlLmZyZXEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZjc3RhdGUtPnN0
YXRlX3RhYmxlW2pdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNzdGF0ZS0+c3RhdGVf
dGFibGVbaiAtIDFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBr
OHBub3dfc3RhdGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgLS1qOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgbWVtY3B5KCZjc3RhdGUtPnN0YXRlX3RhYmxlW2pdLCAmc3Rh
dGUsCgkJCSBzaXplb2Yoc3RydWN0IGs4cG5vd19zdGF0ZSkpOwogICAgICAgICAgICAgICAgbisr
OwogICAgICAgIH0KICAgICAgICByZXR1cm4gMTsKfQoKaW50Cms4cG5vd19zdGF0ZXMoc3RydWN0
IGs4cG5vd19jcHVfc3RhdGUgKmNzdGF0ZSwgdWludDMyX3QgY3B1c2lnLAogICAgdW5zaWduZWQg
aW50IGZpZCwgdW5zaWduZWQgaW50IHZpZCkKewogICAgICAgIHN0cnVjdCBwc2JfcyAqcHNiOwog
ICAgICAgIHN0cnVjdCBwc3RfcyAqcHN0OwogICAgICAgIHVpbnQ4X3QgKnA7CiAgICAgICAgaW50
IGk7CiAgICAgICAgZm9yIChwID0gKHVfaW50OF90ICopQklPU19QQUREUlRPVkFERFIoQklPU19T
VEFSVCk7CiAgICAgICAgICAgIHAgPCAodV9pbnQ4X3QgKilCSU9TX1BBRERSVE9WQUREUihCSU9T
X1NUQVJUICsgQklPU19MRU4pOyBwICs9CiAgICAgICAgICAgIEJJT1NfU1RFUCkgewogICAgICAg
ICAgICAgICAgaWYgKG1lbWNtcChwLCAiQU1ESzdQTk9XISIsIDEwKSA9PSAwKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHBzYiA9IChzdHJ1Y3QgcHNiX3MgKilwOwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocHNiLT52ZXJzaW9uICE9IFBOOF9QU0JfVkVSU0lPTikKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgICAgICAgY3N0
YXRlLT52c3QgPSBwc2ItPnR0aW1lOwogICAgICAgICAgICAgICAgICAgICAgICBjc3RhdGUtPnJ2
byA9IFBOOF9QU0JfVE9fUlZPKHBzYi0+cmVzZXJ2ZWQpOwogICAgICAgICAgICAgICAgICAgICAg
ICBjc3RhdGUtPmlydCA9IFBOOF9QU0JfVE9fSVJUKHBzYi0+cmVzZXJ2ZWQpOwogICAgICAgICAg
ICAgICAgICAgICAgICBjc3RhdGUtPm12cyA9IFBOOF9QU0JfVE9fTVZTKHBzYi0+cmVzZXJ2ZWQp
OwogICAgICAgICAgICAgICAgICAgICAgICBjc3RhdGUtPmxvdyA9IFBOOF9QU0JfVE9fQkFUVChw
c2ItPnJlc2VydmVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcCs9IHNpemVvZihzdHJ1Y3Qg
cHNiX3MpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHNiLT5uX3Bz
dDsgKytpKSB7CgkJCQlwc3QgPSAoc3RydWN0IHBzdF9zICopIHA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3N0YXRlLT5wbGwgPSBwc3QtPnBsbDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjc3RhdGUtPm5fc3RhdGVzID0gcHN0LT5uX3N0YXRlczsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChjcHVzaWcgPT0gcHN0LT5jcHVpZCAmJgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwc3QtPmZpZCA9PSBmaWQgJiYgcHN0LT52
aWQgPT0gdmlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKGs4cG5vd19kZWNvZGVfcHN0KGNzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwKz0gc2l6ZW9mIChzdHJ1Y3QgcHN0X3MpKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAg
Kz0gc2l6ZW9mKHN0cnVjdCBwc3RfcykgKyAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIGNzdGF0ZS0+bl9zdGF0ZXM7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQK
azhfcG93ZXJub3dfc2V0cGVyZih1bnNpZ25lZCBpbnQgZnJlcSkKewogICAgICAgIHVuc2lnbmVk
IGludCBpOwogICAgICAgIHVpbnQ2NF90IHN0YXR1czsKICAgICAgICB1aW50MzJfdCB2YWw7CiAg
ICAgICAgaW50IGNmaWQsIGN2aWQsIGZpZCA9IDAsIHZpZCA9IDA7CiAgICAgICAgaW50IHJ2bzsK
ICAgICAgICBzdHJ1Y3Qgazhwbm93X2NwdV9zdGF0ZSAqY3N0YXRlOwogICAgICAgIC8qCiAgICAg
ICAgICogV2UgZG9udCBkbyBhIGs4cG5vd19yZWFkX3BlbmRpbmdfd2FpdCBoZXJlLCBuZWVkIHRv
IGVuc3VyZSB0aGF0IHRoZQogICAgICAgICAqIGNoYW5nZSBwZW5kaW5nIGJpdCBpc24ndCBzdHVj
aywKICAgICAgICAgKi8KICAgICAgICBzdGF0dXMgPSByZG1zcihNU1JfQU1ESzdfRklEVklEX1NU
QVRVUyk7CiAgICAgICAgaWYgKFBOOF9TVEFfUEVORElORyhzdGF0dXMpKQogICAgICAgICAgICAg
ICAgcmV0dXJuIDE7CiAgICAgICAgY2ZpZCA9IFBOOF9TVEFfQ0ZJRChzdGF0dXMpOwogICAgICAg
IGN2aWQgPSBQTjhfU1RBX0NWSUQoc3RhdHVzKTsKICAgICAgICBjc3RhdGUgPSBrOHBub3dfY3Vy
cmVudF9zdGF0ZTsKCS8va3ByaW50ZigiJXM6IGNzdGF0ZS0+bl9zdGF0ZXM9JWRcbiIsIF9fZnVu
Y19fLCBjc3RhdGUtPm5fc3RhdGVzKTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5u
X3N0YXRlczsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoY3N0YXRlLT5zdGF0ZV90YWJsZVtp
XS5mcmVxID49IGZyZXEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9rcHJpbnRmKCIlczog
ZnJlcT0lZFxuIiwgX19mdW5jX18sIGZyZXEpOwogICAgICAgICAgICAgICAgICAgICAgICBmaWQg
PSBjc3RhdGUtPnN0YXRlX3RhYmxlW2ldLmZpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdmlk
ID0gY3N0YXRlLT5zdGF0ZV90YWJsZVtpXS52aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIC8v
a3ByaW50ZigiJXM6IGZpZD0lZCB2aWQ9JWRcbiIsIF9fZnVuY19fLCBmaWQsIHZpZCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgICBpZiAoZmlkID09IGNmaWQgJiYgdmlkID09IGN2aWQpIHsKICAgICAgICAgICAgICAgIGNw
dXNwZWVkID0gZnJlcTsKICAgICAgICAgICAgICAgIHJldHVybiAwOwoJfQogICAgICAgIC8qCiAg
ICAgICAgICogUGhhc2UgMTogUmFpc2UgY29yZSB2b2x0YWdlIHRvIHJlcXVlc3RlZCBWSUQgaWYg
ZnJlcXVlbmN5IGlzCiAgICAgICAgICogZ29pbmcgdXAuCiAgICAgICAgICovCiAgICAgICAgd2hp
bGUgKGN2aWQgPiB2aWQpIHsKICAgICAgICAgICAgICAgIHZhbCA9IGN2aWQgLSAoMSA8PCBjc3Rh
dGUtPm12cyk7CiAgICAgICAgICAgICAgICBXUklURV9GSURWSUQoY2ZpZCwgKHZhbCA+IDApID8g
dmFsIDogMCwgMVVMTCk7CiAgICAgICAgICAgICAgICBSRUFEX1BFTkRJTkdfV0FJVChzdGF0dXMp
OwogICAgICAgICAgICAgICAgY3ZpZCA9IFBOOF9TVEFfQ1ZJRChzdGF0dXMpOwogICAgICAgICAg
ICAgICAgQ09VTlRfT0ZGX1ZTVChjc3RhdGUtPnZzdCk7CiAgICAgICAgfQoKICAgICAgICAvKiAu
Li4gdGhlbiByYWlzZSB0byB2b2x0YWdlICsgUlZPIChpZiByZXF1aXJlZCkgKi8KICAgICAgICBm
b3IgKHJ2byA9IGNzdGF0ZS0+cnZvOyBydm8gPiAwICYmIGN2aWQgPiAwOyAtLXJ2bykgewogICAg
ICAgICAgICAgICAgLyogWFhYIEl0J3Mgbm90IGNsZWFyIGZyb20gc3BlYyBpZiB3ZSBoYXZlIHRv
IGRvIHRoYXQKICAgICAgICAgICAgICAgICAqIGluIDAuMjUgc3RlcCBvciBpbiBNVlMuICBUaGVy
ZWZvcmUgZG8gaXQgYXMgaXQncyBkb25lCiAgICAgICAgICAgICAgICAgKiB1bmRlciBMaW51eCAq
LwogICAgICAgICAgICAgICAgV1JJVEVfRklEVklEKGNmaWQsIGN2aWQgLSAxLCAxVUxMKTsKICAg
ICAgICAgICAgICAgIFJFQURfUEVORElOR19XQUlUKHN0YXR1cyk7CiAgICAgICAgICAgICAgICBj
dmlkID0gUE44X1NUQV9DVklEKHN0YXR1cyk7CiAgICAgICAgICAgICAgICBDT1VOVF9PRkZfVlNU
KGNzdGF0ZS0+dnN0KTsKICAgICAgICB9CgkgLyogUGhhc2UgMjogY2hhbmdlIHRvIHJlcXVlc3Rl
ZCBjb3JlIGZyZXF1ZW5jeSAqLwogICAgICAgIGlmIChjZmlkICE9IGZpZCkgewogICAgICAgICAg
ICAgICAgdWludDMyX3QgdmNvX2ZpZCwgdmNvX2NmaWQ7CiAgICAgICAgICAgICAgICB2Y29fZmlk
ID0gRklEX1RPX1ZDT19GSUQoZmlkKTsKICAgICAgICAgICAgICAgIHZjb19jZmlkID0gRklEX1RP
X1ZDT19GSUQoY2ZpZCk7CiAgICAgICAgICAgICAgICB3aGlsZSAoYWJzKHZjb19maWQgLSB2Y29f
Y2ZpZCkgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWQgPiBjZmlkKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmaWQgPiA2KQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2ZpZCArIDI7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsID0gRklEX1RPX1ZDT19GSUQoY2ZpZCkgKyAyOwogICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBjZmlkIC0g
MjsKICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfRklEVklEKHZhbCwgY3ZpZCwgKHVpbnQ2
NF90KWNzdGF0ZS0+cGxsICogMTAwMCAvIDUpOwogICAgICAgICAgICAgICAgICAgICAgICBSRUFE
X1BFTkRJTkdfV0FJVChzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICBjZmlkID0gUE44
X1NUQV9DRklEKHN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIENPVU5UX09GRl9JUlQo
Y3N0YXRlLT5pcnQpOwogICAgICAgICAgICAgICAgICAgICAgICB2Y29fY2ZpZCA9IEZJRF9UT19W
Q09fRklEKGNmaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgV1JJVEVfRklE
VklEKGZpZCwgY3ZpZCwgKHVpbnQ2NF90KSBjc3RhdGUtPnBsbCAqIDEwMDAgLyA1KTsKCQlSRUFE
X1BFTkRJTkdfV0FJVChzdGF0dXMpOwogICAgICAgICAgICAgICAgY2ZpZCA9IFBOOF9TVEFfQ0ZJ
RChzdGF0dXMpOwogICAgICAgICAgICAgICAgQ09VTlRfT0ZGX0lSVChjc3RhdGUtPmlydCk7CiAg
ICAgICAgfQoJIC8qIFBoYXNlIDM6IGNoYW5nZSB0byByZXF1ZXN0ZWQgdm9sdGFnZSAqLwogICAg
ICAgIGlmIChjdmlkICE9IHZpZCkgewogICAgICAgICAgICAgICAgV1JJVEVfRklEVklEKGNmaWQs
IHZpZCwgMVVMTCk7CiAgICAgICAgICAgICAgICBSRUFEX1BFTkRJTkdfV0FJVChzdGF0dXMpOwog
ICAgICAgICAgICAgICAgY3ZpZCA9IFBOOF9TVEFfQ1ZJRChzdGF0dXMpOwogICAgICAgICAgICAg
ICAgQ09VTlRfT0ZGX1ZTVChjc3RhdGUtPnZzdCk7CiAgICAgICAgfQogICAgICAgIGlmIChjZmlk
ID09IGZpZCB8fCBjdmlkID09IHZpZCkKICAgICAgICAgICAgICAgIGNwdXNwZWVkID0gY3N0YXRl
LT5zdGF0ZV90YWJsZVtpXS5mcmVxOwogICAgICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW50CnBv
d2Vybm93X3N5c2N0bF9oZWxwZXIoU1lTQ1RMX0hBTkRMRVJfQVJHUykKewogICAgICAgIGludCAg
ICAgIGZxLCBlcnIgPSAwOwogICAgICAgIGludCAgICAgIGk7CiAgICAgICAgc3RydWN0IGs4cG5v
d19jcHVfc3RhdGUgKmNzdGF0ZTsKICAgICAgICBzdHJ1Y3Qgazhwbm93X3N0YXRlICpzdGF0ZTsK
ICAgICAgICBjc3RhdGUgPSBrOHBub3dfY3VycmVudF9zdGF0ZTsKICAgICAgICBpZiAocmVxLT5u
ZXdwdHIgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgZXJyID0gU1lTQ1RMX0lOKHJlcSwgJmZx
LCBzaXplb2YoZnEpKTsKICAgICAgICAgICAgICAgIGlmIChlcnIpCiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICAgICBpZiAoZnEgIT0gY3B1c3BlZWQpIHsK
CQkJZm9yIChpID0gY3N0YXRlLT5uX3N0YXRlczsgaSA+IDA7IGktLSkgewoJCQkJc3RhdGUgPSAm
Y3N0YXRlLT5zdGF0ZV90YWJsZVtpLTFdOwoJCQkJaWYoZnEgPT0gc3RhdGUtPmZyZXEpIHsKCQkJ
CQlrOF9wb3dlcm5vd19zZXRwZXJmKGZxKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZXJyID0gU1lTQ1RMX09VVChyZXEsICZjcHVz
cGVlZCwgc2l6ZW9mKGNwdXNwZWVkKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBlcnI7Cn0K
CnN0YXRpYyBzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICAgbWFjaGRlcF9wb3dlcm5vd19jdHg7CnN0
YXRpYyBjaGFyIGZyZXFzX2F2YWlsYWJsZVs4MF07CgpzdGF0aWMgaW50CnBvd2Vybm93X2luaXQo
dm9pZCkKewogICAgICAgIHVpbnQ2NF90IHN0YXR1czsKCXNpemVfdCBsZW4sIGZyZXFfbGVuOwog
ICAgICAgIHVpbnQzMl90IG1heGZpZCwgbWF4dmlkLCBpOyAKICAgICAgICBzdHJ1Y3Qgazhwbm93
X2NwdV9zdGF0ZSAqY3N0YXRlOwogICAgICAgIHN0cnVjdCBrOHBub3dfc3RhdGUgKnN0YXRlOwoJ
Y29uc3QgY2hhciAqdGVjaG5hbWU7Cgl1X2ludDMyX3QgcmVnc1s0XTsKCWNwdXNwZWVkID0gMDsK
CXN0cnVjdCBzeXNjdGxfb2lkICAgICAgICpvaWQsICpsZWFmOwogICAgICAgIGRvX2NwdWlkKDB4
ODAwMDAwMDAsIHJlZ3MpOwogICAgICAgIGlmIChyZWdzWzBdIDwgMHg4MDAwMDAwNykKICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGRvX2NwdWlkKDB4ODAwMDAwMDcsIHJlZ3MpOwog
ICAgICAgIGlmICghKHJlZ3NbM10gJiBBTURfUE5fRklEX1ZJRCkpCiAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAvKiBFeHRlbmRlZCBDUFVJRCBzaWduYXR1cmUgdmFsdWUgKi8KICAg
ICAgICBkb19jcHVpZCgweDgwMDAwMDAxLCByZWdzKTsKICAgICAgICBjc3RhdGUgPSBrbWFsbG9j
KHNpemVvZihzdHJ1Y3Qgazhwbm93X2NwdV9zdGF0ZSksIE1fREVWQlVGLCBNX1dBSVRPSyk7CiAg
ICAgICAgaWYgKCFjc3RhdGUpIHsKCQlrcHJpbnRmKCJwb3dlcm5vdzogbm90IGVub3VnaCBtZW1v
cnlcbiIpOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7Cgl9CiAgICAgICAgY3N0YXRlLT5uX3N0
YXRlcyA9IDA7CgogICAgICAgIHN0YXR1cyA9IHJkbXNyKE1TUl9BTURLN19GSURWSURfU1RBVFVT
KTsKICAgICAgICBtYXhmaWQgPSBQTjhfU1RBX01GSUQoc3RhdHVzKTsKICAgICAgICBtYXh2aWQg
PSBQTjhfU1RBX01WSUQoc3RhdHVzKTsKCiAgICAgICAgaWYgKFBOOF9TVEFfU0ZJRChzdGF0dXMp
ICE9IFBOOF9TVEFfTUZJRChzdGF0dXMpKQogICAgICAgICAgICAgICAgdGVjaG5hbWUgPSAiUG93
ZXJOb3chIjsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0ZWNobmFtZSA9ICJDb29sYG4n
UXVpZXQiOwoKCWlmICghazhwbm93X3N0YXRlcyhjc3RhdGUsIDAsIG1heGZpZCwgbWF4dmlkKSkK
CQlrOHBub3dfc3RhdGVzKGNzdGF0ZSwgcmVnc1swXSwgbWF4ZmlkLCBtYXh2aWQpOwoKICAgICAg
ICBsZW4gPSAwOwogICAgICAgIGlmIChjc3RhdGUtPm5fc3RhdGVzKSB7CgkJZnJlcV9sZW4gPSBj
c3RhdGUtPm5fc3RhdGVzICogKHNpemVvZigiOTk5OSAiKS0xKSArIDE7CiAgICAgICAgICAgICAg
ICBrcHJpbnRmKCIlcyBzcGVlZHM6IiwKICAgICAgICAgICAgICAgICAgICB0ZWNobmFtZSk7CiAg
ICAgICAgICAgICAgICBmb3IgKGkgPSBjc3RhdGUtPm5fc3RhdGVzOyBpID4gMDsgaS0tKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJmNzdGF0ZS0+c3RhdGVfdGFibGVbaS0xXTsK
ICAgICAgICAgICAgICAgICAgICAgICAga3ByaW50ZigiICVkIiwgc3RhdGUtPmZyZXEpOwogICAg
ICAgICAgICAgICAgICAgICAgICBsZW4gKz0ga3NucHJpbnRmKGZyZXFzX2F2YWlsYWJsZSArIGxl
biwgZnJlcV9sZW4gLSBsZW4sICIlZCVzIiwKCQkJICAgIHN0YXRlLT5mcmVxLAoJCQkgICAgaSA+
IDEgPyAiICIgOiAiIik7CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAga3ByaW50
ZigiIE1IelxuIik7CiAgICAgICAgICAgICAgICBrOHBub3dfY3VycmVudF9zdGF0ZSA9IGNzdGF0
ZTsKCQlrOF9wb3dlcm5vd19zZXRwZXJmKGNzdGF0ZS0+c3RhdGVfdGFibGVbMF0uZnJlcSk7CiAg
ICAgICAgfSBlbHNlIHsKCQlrZnJlZShjc3RhdGUsIE1fREVWQlVGKTsKCQlrcHJpbnRmKCJwb3dl
cm5vdzogbm8gcG93ZXIgc3RhdGVzIGZvdW5kXG4iKTsKCQlyZXR1cm4gMjsKCX0KCgkgLyoKICAg
ICAgICAgKiBTZXR1cCB0aGUgc3lzY3RsIHN1Yi10cmVlIG1hY2hkZXAucG93ZXJub3cuKgogICAg
ICAgICAqLwogICAgICAgIG9pZCA9IFNZU0NUTF9BRERfTk9ERSgmbWFjaGRlcF9wb3dlcm5vd19j
dHgsCiAgICAgICAgICAgIFNZU0NUTF9TVEFUSUNfQ0hJTERSRU4oX21hY2hkZXApLCBPSURfQVVU
TywgInBvd2Vybm93IiwKICAgICAgICAgICAgQ1RMRkxBR19SRCwgTlVMTCwgIiIpOwogICAgICAg
IGlmIChvaWQgPT0gTlVMTCkKICAgICAgICAgICAgICAgIHJldHVybihFT1BOT1RTVVBQKTsKICAg
ICAgICBvaWQgPSBTWVNDVExfQUREX05PREUoJm1hY2hkZXBfcG93ZXJub3dfY3R4LCBTWVNDVExf
Q0hJTERSRU4ob2lkKSwKICAgICAgICAgICAgT0lEX0FVVE8sICJmcmVxdWVuY3kiLCBDVExGTEFH
X1JELCBOVUxMLCAiIik7CiAgICAgICAgaWYgKG9pZCA9PSBOVUxMKQogICAgICAgICAgICAgICAg
cmV0dXJuKEVPUE5PVFNVUFApOwogICAgICAgIGxlYWYgPSBTWVNDVExfQUREX1BST0MoJm1hY2hk
ZXBfcG93ZXJub3dfY3R4LCBTWVNDVExfQ0hJTERSRU4ob2lkKSwKICAgICAgICAgICAgT0lEX0FV
VE8sICJjdXJyZW50IiwgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLCBOVUxMLCAwLAogICAgICAg
ICAgICBwb3dlcm5vd19zeXNjdGxfaGVscGVyLCAiSSIsCiAgICAgICAgICAgICJDdXJyZW50IENQ
VSBmcmVxdWVuY3kgZm9yIEFNRCBQb3dlck5vdyEiKTsKICAgICAgICBpZiAobGVhZiA9PSBOVUxM
KQogICAgICAgICAgICAgICAgcmV0dXJuKEVPUE5PVFNVUFApOwogICAgICAgIGxlYWYgPSBTWVND
VExfQUREX1NUUklORygmbWFjaGRlcF9wb3dlcm5vd19jdHgsIFNZU0NUTF9DSElMRFJFTihvaWQp
LAogICAgICAgICAgICBPSURfQVVUTywgImF2YWlsYWJsZSIsIENUTEZMQUdfUkQsIGZyZXFzX2F2
YWlsYWJsZSwKICAgICAgICAgICAgc2l6ZW9mKGZyZXFzX2F2YWlsYWJsZSksCiAgICAgICAgICAg
ICJDUFUgZnJlcXVlbmNpZXMgc3VwcG9ydGVkIGJ5IEFNRCBQb3dlck5vdyEiKTsKICAgICAgICBp
ZiAobGVhZiA9PSBOVUxMKQogICAgICAgICAgICAgICAgcmV0dXJuKEVPUE5PVFNVUFApOwoJcmV0
dXJuKDApOwp9CgpzdGF0aWMgaW50CnBvd2Vybm93X21vZGV2aChzdHJ1Y3QgbW9kdWxlICptLCBp
bnQgd2hhdCwgdm9pZCAqYXJnIF9fdW51c2VkKSAKewoJaW50IGVycm9yOwoKCXN3aXRjaCh3aGF0
KSB7CgljYXNlIE1PRF9MT0FEOgoJCWVycm9yID0gc3lzY3RsX2N0eF9pbml0KCZtYWNoZGVwX3Bv
d2Vybm93X2N0eCk7CiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gMCkKICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CgkJZXJyb3IgPSBwb3dlcm5vd19pbml0KCk7CgkJYnJlYWs7Cglj
YXNlIE1PRF9VTkxPQUQ6CgkJaWYoazhwbm93X2N1cnJlbnRfc3RhdGUpCgkJCWtmcmVlKGs4cG5v
d19jdXJyZW50X3N0YXRlLCBNX0RFVkJVRik7CgkJZXJyb3IgPSBzeXNjdGxfY3R4X2ZyZWUoJm1h
Y2hkZXBfcG93ZXJub3dfY3R4KTsKCQlicmVhazsKCWRlZmF1bHQ6CgkJZXJyb3IgPSBFSU5WQUw7
CgkJYnJlYWs7Cgl9CglyZXR1cm4oZXJyb3IpOwp9CnN0YXRpYyBtb2R1bGVkYXRhX3QgcG93ZXJu
b3dfbW9kID0gewoJInBvd2Vybm93IiwKCXBvd2Vybm93X21vZGV2aCwKCU5VTEwsCn07CgpERUNM
QVJFX01PRFVMRShwb3dlcm5vdywgcG93ZXJub3dfbW9kLCBTSV9CT09UMl9LTEQsIFNJX09SREVS
X0FOWSk7Cg==
--216.240.41.26.80.70713.1241972886.186.1--