Date: Mon, 4 May 2015 09:34:14 +0000 From: "hselasky (Hans Petter Selasky)" <phabric-noreply@FreeBSD.org> To: freebsd-net@freebsd.org Subject: [Differential] [Closed] D1438: FreeBSD callout rewrite and cleanup Message-ID: <a17c2070cbe9bbfcdf7c7bdb3c763fdd@localhost.localdomain> In-Reply-To: <differential-rev-PHID-DREV-o4lr3ts4fgj46hyp6sg3-req@FreeBSD.org> References: <differential-rev-PHID-DREV-o4lr3ts4fgj46hyp6sg3-req@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--b1_a17c2070cbe9bbfcdf7c7bdb3c763fdd Content-Type: text/plain; charset = "utf-8" Content-Transfer-Encoding: 8bit This revision was automatically updated to reflect the committed changes. Closed by commit rS282414: Major callout subsystem cleanup and rewrite: (authored by hselasky). CHANGED PRIOR TO COMMIT https://reviews.freebsd.org/D1438?vs=4870&id=5170#toc REPOSITORY rS FreeBSD src repository REVISION DETAIL https://reviews.freebsd.org/D1438 AFFECTED FILES projects/hps_head/share/man/man9/Makefile projects/hps_head/share/man/man9/timeout.9 projects/hps_head/sys/kern/init_main.c projects/hps_head/sys/kern/kern_clocksource.c projects/hps_head/sys/kern/kern_condvar.c projects/hps_head/sys/kern/kern_lock.c projects/hps_head/sys/kern/kern_switch.c projects/hps_head/sys/kern/kern_synch.c projects/hps_head/sys/kern/kern_thread.c projects/hps_head/sys/kern/kern_timeout.c projects/hps_head/sys/kern/subr_sleepqueue.c projects/hps_head/sys/ofed/include/linux/completion.h projects/hps_head/sys/ofed/include/linux/linux_compat.c projects/hps_head/sys/sys/_callout.h projects/hps_head/sys/sys/callout.h projects/hps_head/sys/sys/proc.h EMAIL PREFERENCES https://reviews.freebsd.org/settings/panel/emailpreferences/ To: hselasky, jhb, adrian, markj, emaste, sbruno, imp, lstewart, rwatson, gnn, rrs, kostikbel, delphij, neel, erj Cc: avg, jch, wblock, freebsd-net --b1_a17c2070cbe9bbfcdf7c7bdb3c763fdd Content-Type: text/x-patch; charset=utf-8; name="D1438.5170.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="D1438.5170.patch" ZGlmZiAtLWdpdCBhL3Byb2plY3RzL2hwc19oZWFkL3N5cy9zeXMvY2FsbG91dC5oIGIvcHJvamVj dHMvaHBzX2hlYWQvc3lzL3N5cy9jYWxsb3V0LmgKLS0tIGEvcHJvamVjdHMvaHBzX2hlYWQvc3lz L3N5cy9jYWxsb3V0LmgKKysrIGIvcHJvamVjdHMvaHBzX2hlYWQvc3lzL3N5cy9jYWxsb3V0LmgK QEAgLTQ1LDEwICs0NSwxMiBAQAogI2RlZmluZQlDQUxMT1VUX1BFTkRJTkcJCTB4MDAwNCAvKiBj YWxsb3V0IGlzIHdhaXRpbmcgZm9yIHRpbWVvdXQgKi8KICNkZWZpbmUJQ0FMTE9VVF9NUFNBRkUJ CTB4MDAwOCAvKiBjYWxsb3V0IGhhbmRsZXIgaXMgbXAgc2FmZSAqLwogI2RlZmluZQlDQUxMT1VU X1JFVFVSTlVOTE9DS0VECTB4MDAxMCAvKiBoYW5kbGVyIHJldHVybnMgd2l0aCBtdHggdW5sb2Nr ZWQgKi8KLSNkZWZpbmUJQ0FMTE9VVF9TSEFSRURMT0NLCTB4MDAyMCAvKiBjYWxsb3V0IGxvY2sg aGVsZCBpbiBzaGFyZWQgbW9kZSAqLwotI2RlZmluZQlDQUxMT1VUX0RGUk1JR1JBVElPTgkweDAw NDAgLyogY2FsbG91dCBpbiBkZWZlcnJlZCBtaWdyYXRpb24gbW9kZSAqLworI2RlZmluZQlDQUxM T1VUX1VOVVNFRF81CTB4MDAyMCAvKiAtLWF2YWlsYWJsZS0tICovCisjZGVmaW5lCUNBTExPVVRf REVGUkVTVEFSVAkweDAwNDAgLyogY2FsbG91dCByZXN0YXJ0IGlzIGRlZmVycmVkICovCiAjZGVm aW5lCUNBTExPVVRfUFJPQ0VTU0VECTB4MDA4MCAvKiBjYWxsb3V0IGluIHdoZWVsIG9yIHByb2Nl c3NpbmcgbGlzdD8gKi8KICNkZWZpbmUJQ0FMTE9VVF9ESVJFQ1QgCQkweDAxMDAgLyogYWxsb3cg ZXhlYyBmcm9tIGh3IGludCBjb250ZXh0ICovCisjZGVmaW5lCUNBTExPVVRfU0VUX0xDKHgpCSgo KHgpICYgNykgPDwgMTYpIC8qIHNldCBsb2NrIGNsYXNzICovCisjZGVmaW5lCUNBTExPVVRfR0VU X0xDKHgpCSgoKHgpID4+IDE2KSAmIDcpIC8qIGdldCBsb2NrIGNsYXNzICovCiAKICNkZWZpbmUJ Q19ESVJFQ1RfRVhFQwkJMHgwMDAxIC8qIGRpcmVjdCBleGVjdXRpb24gb2YgY2FsbG91dCAqLwog I2RlZmluZQlDX1BSRUxCSVRTCQk3CkBAIC02MywyNSArNjUsMTAgQEAKIH07CiAKICNpZmRlZiBf S0VSTkVMCi0vKiAKLSAqIE5vdGUgdGhlIGZsYWdzIGZpZWxkIGlzIGFjdHVhbGx5ICp0d28qIGZp ZWxkcy4gVGhlIGNfZmxhZ3MKLSAqIGZpZWxkIGlzIHRoZSBvbmUgdGhhdCBjYWxsZXIgb3BlcmF0 aW9ucyB0aGF0IG1heSwgb3IgbWF5IG5vdCBoYXZlCi0gKiBhIGxvY2sgdG91Y2hlcyBpLmUuIGNh bGxvdXRfZGVhY3RpdmF0ZSgpLiBUaGUgb3RoZXIsIHRoZSBjX2lmbGFncywKLSAqIGlzIHRoZSBp bnRlcm5hbCBmbGFncyB0aGF0ICptdXN0KiBiZSBrZXB0IGNvcnJlY3Qgb24gd2hpY2ggdGhlCi0g KiBjYWxsb3V0IHN5c3RlbSBkZXBlbmQgb24gZS5nLiBjYWxsb3V0X3BlbmRpbmcoKS4KLSAqIFRo ZSBjX2lmbGFnIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY2FsbG91dCBzeXN0ZW0gdG8gZGV0 ZXJtaW5lIHdoaWNoCi0gKiBsaXN0IHRoZSBjYWxsb3V0IGlzIG9uIGFuZCB0cmFjayBpbnRlcm5h bCBzdGF0ZS4gQ2FsbGVycyAqc2hvdWxkIG5vdCogCi0gKiB1c2UgdGhlIGNfZmxhZ3MgZmllbGQg ZGlyZWN0bHkgYnV0IHNob3VsZCB1c2UgdGhlIG1hY3JvcyBwcm92aWRlZC4KLSAqICAKLSAqIFRo ZSBjX2lmbGFncyBmaWVsZCBob2xkcyBpbnRlcm5hbCBmbGFncyB0aGF0IGFyZSBwcm90ZWN0ZWQg YnkgaW50ZXJuYWwKLSAqIGxvY2tzIG9mIHRoZSBjYWxsb3V0IHN1YnN5c3RlbS4gIFRoZSBjX2Zs YWdzIGZpZWxkIGhvbGRzIGV4dGVybmFsIGZsYWdzLgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQg aXRzIG93biBsb2NrIHdoaWxlIG1hbmlwdWxhdGluZyBvciByZWFkaW5nIGV4dGVybmFsCi0gKiBm bGFncyB2aWEgY2FsbG91dF9hY3RpdmUoKSwgY2FsbG91dF9kZWFjdGl2YXRlKCksIGNhbGxvdXRf cmVzZXQqKCksIG9yCi0gKiBjYWxsb3V0X3N0b3AoKSB0byBhdm9pZCByYWNlcy4KLSAqLwogI2Rl ZmluZQljYWxsb3V0X2FjdGl2ZShjKQkoKGMpLT5jX2ZsYWdzICYgQ0FMTE9VVF9BQ1RJVkUpCiAj ZGVmaW5lCWNhbGxvdXRfZGVhY3RpdmF0ZShjKQkoKGMpLT5jX2ZsYWdzICY9IH5DQUxMT1VUX0FD VElWRSkKLSNkZWZpbmUJY2FsbG91dF9kcmFpbihjKQlfY2FsbG91dF9zdG9wX3NhZmUoYywgMSkK K2ludAljYWxsb3V0X2RyYWluKHN0cnVjdCBjYWxsb3V0ICopOworaW50CWNhbGxvdXRfZHJhaW5f YXN5bmMoc3RydWN0IGNhbGxvdXQgKiwgY2FsbG91dF9mdW5jX3QgKiwgdm9pZCAqKTsKIHZvaWQJ Y2FsbG91dF9pbml0KHN0cnVjdCBjYWxsb3V0ICosIGludCk7CiB2b2lkCV9jYWxsb3V0X2luaXRf bG9jayhzdHJ1Y3QgY2FsbG91dCAqLCBzdHJ1Y3QgbG9ja19vYmplY3QgKiwgaW50KTsKICNkZWZp bmUJY2FsbG91dF9pbml0X210eChjLCBtdHgsIGZsYWdzKQkJCQkJXApAQCAtOTMsOSArODAsOSBA QAogI2RlZmluZQljYWxsb3V0X2luaXRfcncoYywgcncsIGZsYWdzKQkJCQkJXAogCV9jYWxsb3V0 X2luaXRfbG9jaygoYyksICgocncpICE9IE5VTEwpID8gJihydyktPmxvY2tfb2JqZWN0IDoJXAog CSAgIE5VTEwsIChmbGFncykpCi0jZGVmaW5lCWNhbGxvdXRfcGVuZGluZyhjKQkoKGMpLT5jX2lm bGFncyAmIENBTExPVVRfUEVORElORykKKyNkZWZpbmUJY2FsbG91dF9wZW5kaW5nKGMpCSgoYykt PmNfZmxhZ3MgJiBDQUxMT1VUX1BFTkRJTkcpCiBpbnQJY2FsbG91dF9yZXNldF9zYnRfb24oc3Ry dWN0IGNhbGxvdXQgKiwgc2JpbnRpbWVfdCwgc2JpbnRpbWVfdCwKLQkgICAgdm9pZCAoKikodm9p ZCAqKSwgdm9pZCAqLCBpbnQsIGludCk7CisJICAgIGNhbGxvdXRfZnVuY190ICosIHZvaWQgKiwg aW50LCBpbnQpOwogI2RlZmluZQljYWxsb3V0X3Jlc2V0X3NidChjLCBzYnQsIHByLCBmbiwgYXJn LCBmbGFncykJCQlcCiAgICAgY2FsbG91dF9yZXNldF9zYnRfb24oKGMpLCAoc2J0KSwgKHByKSwg KGZuKSwgKGFyZyksIC0xLCAoZmxhZ3MpKQogI2RlZmluZQljYWxsb3V0X3Jlc2V0X3NidF9jdXJj cHUoYywgc2J0LCBwciwgZm4sIGFyZywgZmxhZ3MpCQlcCkBAIC0xMTksOCArMTA2LDcgQEAKIGlu dAljYWxsb3V0X3NjaGVkdWxlX29uKHN0cnVjdCBjYWxsb3V0ICosIGludCwgaW50KTsKICNkZWZp bmUJY2FsbG91dF9zY2hlZHVsZV9jdXJjcHUoYywgb25fdGljaykJCQkJXAogICAgIGNhbGxvdXRf c2NoZWR1bGVfb24oKGMpLCAob25fdGljayksIFBDUFVfR0VUKGNwdWlkKSkKLSNkZWZpbmUJY2Fs bG91dF9zdG9wKGMpCQlfY2FsbG91dF9zdG9wX3NhZmUoYywgMCkKLWludAlfY2FsbG91dF9zdG9w X3NhZmUoc3RydWN0IGNhbGxvdXQgKiwgaW50KTsKK2ludAljYWxsb3V0X3N0b3Aoc3RydWN0IGNh bGxvdXQgKik7CiB2b2lkCWNhbGxvdXRfcHJvY2VzcyhzYmludGltZV90IG5vdyk7CiAKICNlbmRp ZgpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL3N5cy9fY2FsbG91dC5oIGIvcHJv amVjdHMvaHBzX2hlYWQvc3lzL3N5cy9fY2FsbG91dC5oCi0tLSBhL3Byb2plY3RzL2hwc19oZWFk L3N5cy9zeXMvX2NhbGxvdXQuaAorKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMvc3lzL19jYWxs b3V0LmgKQEAgLTQ2LDYgKzQ2LDggQEAKIFNMSVNUX0hFQUQoY2FsbG91dF9zbGlzdCwgY2FsbG91 dCk7CiBUQUlMUV9IRUFEKGNhbGxvdXRfdGFpbHEsIGNhbGxvdXQpOwogCit0eXBlZGVmIHZvaWQg Y2FsbG91dF9mdW5jX3Qodm9pZCAqKTsKKwogc3RydWN0IGNhbGxvdXQgewogCXVuaW9uIHsKIAkJ TElTVF9FTlRSWShjYWxsb3V0KSBsZTsKQEAgLTU1LDEwICs1Nyw5IEBACiAJc2JpbnRpbWVfdCBj X3RpbWU7CQkJLyogdGlja3MgdG8gdGhlIGV2ZW50ICovCiAJc2JpbnRpbWVfdCBjX3ByZWNpc2lv bjsJCQkvKiBkZWx0YSBhbGxvd2VkIHdydCBvcHQgKi8KIAl2b2lkCSpjX2FyZzsJCQkJLyogZnVu Y3Rpb24gYXJndW1lbnQgKi8KLQl2b2lkCSgqY19mdW5jKSh2b2lkICopOwkJLyogZnVuY3Rpb24g dG8gY2FsbCAqLworCWNhbGxvdXRfZnVuY190ICpjX2Z1bmM7CQkJLyogZnVuY3Rpb24gdG8gY2Fs bCAqLwogCXN0cnVjdCBsb2NrX29iamVjdCAqY19sb2NrOwkJLyogbG9jayB0byBoYW5kbGUgKi8K LQlzaG9ydAljX2ZsYWdzOwkJCS8qIFVzZXIgU3RhdGUgKi8KLQlzaG9ydAljX2lmbGFnczsJCQkv KiBJbnRlcm5hbCBTdGF0ZSAqLworCWludAljX2ZsYWdzOwkJCS8qIHN0YXRlIG9mIHRoaXMgZW50 cnkgKi8KIAl2b2xhdGlsZSBpbnQgY19jcHU7CQkJLyogQ1BVIHdlJ3JlIHNjaGVkdWxlZCBvbiAq LwogfTsKIApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL3N5cy9wcm9jLmggYi9w cm9qZWN0cy9ocHNfaGVhZC9zeXMvc3lzL3Byb2MuaAotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9z eXMvc3lzL3Byb2MuaAorKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMvc3lzL3Byb2MuaApAQCAt MzA4LDYgKzMwOCw3IEBACiAJfSB0ZF91cmV0b2ZmOwkJCS8qIChrKSBTeXNjYWxsIGF1eCByZXR1 cm5zLiAqLwogI2RlZmluZSB0ZF9yZXR2YWwJdGRfdXJldG9mZi50ZHVfcmV0dmFsCiAJc3RydWN0 IGNhbGxvdXQJdGRfc2xwY2FsbG91dDsJLyogKGgpIENhbGxvdXQgZm9yIHNsZWVwLiAqLworCXN0 cnVjdCBtdHgJdGRfc2xwbXV0ZXg7CS8qIChoKSBNdXRleCBmb3Igc2xlZXAgY2FsbG91dCAqLwog CXN0cnVjdCB0cmFwZnJhbWUgKnRkX2ZyYW1lOwkvKiAoaykgKi8KIAlzdHJ1Y3Qgdm1fb2JqZWN0 ICp0ZF9rc3RhY2tfb2JqOy8qIChhKSBLc3RhY2sgb2JqZWN0LiAqLwogCXZtX29mZnNldF90CXRk X2tzdGFjazsJLyogKGEpIEtlcm5lbCBWQSBvZiBrc3RhY2suICovCkBAIC0zNjQsNyArMzY1LDcg QEAKICNkZWZpbmUJVERGX0FMTFBST0NTVVNQCTB4MDAwMDAyMDAgLyogc3VzcGVuZGVkIGJ5IFNJ TkdMRV9BTExQUk9DICovCiAjZGVmaW5lCVRERl9CT1VOREFSWQkweDAwMDAwNDAwIC8qIFRocmVh ZCBzdXNwZW5kZWQgYXQgdXNlciBib3VuZGFyeSAqLwogI2RlZmluZQlUREZfQVNUUEVORElORwkw eDAwMDAwODAwIC8qIFRocmVhZCBoYXMgc29tZSBhc3luY2hyb25vdXMgZXZlbnRzLiAqLwotI2Rl ZmluZQlUREZfVElNT0ZBSUwJMHgwMDAwMTAwMCAvKiBUaW1lb3V0IGZyb20gc2xlZXAgYWZ0ZXIg d2Ugd2VyZSBhd2FrZS4gKi8KKyNkZWZpbmUJVERGX1VOVVNFRDEyCTB4MDAwMDEwMDAgLyogLS1h dmFpbGFibGUtLSAqLwogI2RlZmluZQlUREZfU0JEUlkJMHgwMDAwMjAwMCAvKiBTdG9wIG9ubHkg b24gdXNlcm1vZGUgYm91bmRhcnkuICovCiAjZGVmaW5lCVRERl9VUElCTE9DS0VECTB4MDAwMDQw MDAgLyogVGhyZWFkIGJsb2NrZWQgb24gdXNlciBQSSBtdXRleC4gKi8KICNkZWZpbmUJVERGX05F RURTVVNQQ0hLCTB4MDAwMDgwMDAgLyogVGhyZWFkIG1heSBuZWVkIHRvIHN1c3BlbmQuICovCkBA IC03MDYsNyArNzA3LDcgQEAKICNkZWZpbmUJU1dUX09XRVBSRUVNUFQJCTIJLyogU3dpdGNoaW5n IGR1ZSB0byBvcGVwcmVlbXB0LiAqLwogI2RlZmluZQlTV1RfVFVSTlNUSUxFCQkzCS8qIFR1cm5z dGlsZSBjb250ZW50aW9uLiAqLwogI2RlZmluZQlTV1RfU0xFRVBRCQk0CS8qIFNsZWVwcSB3YWl0 LiAqLwotI2RlZmluZQlTV1RfU0xFRVBRVElNTwkJNQkvKiBTbGVlcHEgdGltZW91dCB3YWl0LiAq LworI2RlZmluZQlTV1RfVU5VU0VENQkJNQkvKiAtLWF2YWlsYWJsZS0tICovCiAjZGVmaW5lCVNX VF9SRUxJTlFVSVNICQk2CS8qIHlpZWxkIGNhbGwuICovCiAjZGVmaW5lCVNXVF9ORUVEUkVTQ0hF RAkJNwkvKiBORUVEUkVTQ0hFRCB3YXMgc2V0LiAqLwogI2RlZmluZQlTV1RfSURMRQkJOAkvKiBT d2l0Y2hpbmcgZnJvbSB0aGUgaWRsZSB0aHJlYWQuICovCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9o cHNfaGVhZC9zeXMvb2ZlZC9pbmNsdWRlL2xpbnV4L2NvbXBsZXRpb24uaCBiL3Byb2plY3RzL2hw c19oZWFkL3N5cy9vZmVkL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCi0tLSBhL3Byb2plY3Rz L2hwc19oZWFkL3N5cy9vZmVkL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCisrKyBiL3Byb2pl Y3RzL2hwc19oZWFkL3N5cy9vZmVkL2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oCkBAIC02NCwz ICs2NCw0IEBACiBleHRlcm4gaW50IGxpbnV4X2NvbXBsZXRpb25fZG9uZShzdHJ1Y3QgY29tcGxl dGlvbiAqKTsKIAogI2VuZGlmCQkJCQkvKiBfTElOVVhfQ09NUExFVElPTl9IXyAqLworCmRpZmYg LS1naXQgYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMvb2ZlZC9pbmNsdWRlL2xpbnV4L2xpbnV4X2Nv bXBhdC5jIGIvcHJvamVjdHMvaHBzX2hlYWQvc3lzL29mZWQvaW5jbHVkZS9saW51eC9saW51eF9j b21wYXQuYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMvb2ZlZC9pbmNsdWRlL2xpbnV4L2xp bnV4X2NvbXBhdC5jCisrKyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9vZmVkL2luY2x1ZGUvbGlu dXgvbGludXhfY29tcGF0LmMKQEAgLTg0Niw3ICs4NDYsOSBAQAogCQlpZiAoYy0+ZG9uZSkKIAkJ CWJyZWFrOwogCQlzbGVlcHFfYWRkKGMsIE5VTEwsICJjb21wbGV0aW9uIiwgZmxhZ3MsIDApOwor CQlzbGVlcHFfcmVsZWFzZShjKTsKIAkJc2xlZXBxX3NldF90aW1lb3V0KGMsIGxpbnV4X3RpbWVy X2ppZmZpZXNfdW50aWwoZW5kKSk7CisJCXNsZWVwcV9sb2NrKGMpOwogCQlpZiAoZmxhZ3MgJiBT TEVFUFFfSU5URVJSVVBUSUJMRSkKIAkJCXJldCA9IHNsZWVwcV90aW1lZHdhaXRfc2lnKGMsIDAp OwogCQllbHNlCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9zdWJyX3Ns ZWVwcXVldWUuYyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL3N1YnJfc2xlZXBxdWV1ZS5j Ci0tLSBhL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL3N1YnJfc2xlZXBxdWV1ZS5jCisrKyBi L3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL3N1YnJfc2xlZXBxdWV1ZS5jCkBAIC0xNTIsNyAr MTUyLDggQEAKICAqLwogc3RhdGljIGludAlzbGVlcHFfY2F0Y2hfc2lnbmFscyh2b2lkICp3Y2hh biwgaW50IHByaSk7CiBzdGF0aWMgaW50CXNsZWVwcV9jaGVja19zaWduYWxzKHZvaWQpOwotc3Rh dGljIGludAlzbGVlcHFfY2hlY2tfdGltZW91dCh2b2lkKTsKK3N0YXRpYyBpbnQJc2xlZXBxX2No ZWNrX3RpbWVvdXQoc3RydWN0IHRocmVhZCAqKTsKK3N0YXRpYyB2b2lkCXNsZWVwcV9zdG9wX3Rp bWVvdXQoc3RydWN0IHRocmVhZCAqKTsKICNpZmRlZiBJTlZBUklBTlRTCiBzdGF0aWMgdm9pZAlz bGVlcHFfZHRvcih2b2lkICptZW0sIGludCBzaXplLCB2b2lkICphcmcpOwogI2VuZGlmCkBAIC0z NzMsMTcgKzM3NCwxNCBAQAogc2xlZXBxX3NldF90aW1lb3V0X3NidCh2b2lkICp3Y2hhbiwgc2Jp bnRpbWVfdCBzYnQsIHNiaW50aW1lX3QgcHIsCiAgICAgaW50IGZsYWdzKQogewotCXN0cnVjdCBz bGVlcHF1ZXVlX2NoYWluICpzYzsKIAlzdHJ1Y3QgdGhyZWFkICp0ZDsKIAogCXRkID0gY3VydGhy ZWFkOwotCXNjID0gU0NfTE9PS1VQKHdjaGFuKTsKLQltdHhfYXNzZXJ0KCZzYy0+c2NfbG9jaywg TUFfT1dORUQpOwotCU1QQVNTKFREX09OX1NMRUVQUSh0ZCkpOwotCU1QQVNTKHRkLT50ZF9zbGVl cHF1ZXVlID09IE5VTEwpOwotCU1QQVNTKHdjaGFuICE9IE5VTEwpOworCisJbXR4X2xvY2tfc3Bp bigmdGQtPnRkX3NscG11dGV4KTsKIAljYWxsb3V0X3Jlc2V0X3NidF9vbigmdGQtPnRkX3NscGNh bGxvdXQsIHNidCwgcHIsCiAJICAgIHNsZWVwcV90aW1lb3V0LCB0ZCwgUENQVV9HRVQoY3B1aWQp LCBmbGFncyB8IENfRElSRUNUX0VYRUMpOworCW10eF91bmxvY2tfc3BpbigmdGQtPnRkX3NscG11 dGV4KTsKIH0KIAogLyoKQEAgLTU1OSwxMSArNTU3LDggQEAKICAqIENoZWNrIHRvIHNlZSBpZiB3 ZSB0aW1lZCBvdXQuCiAgKi8KIHN0YXRpYyBpbnQKLXNsZWVwcV9jaGVja190aW1lb3V0KHZvaWQp CitzbGVlcHFfY2hlY2tfdGltZW91dChzdHJ1Y3QgdGhyZWFkICp0ZCkKIHsKLQlzdHJ1Y3QgdGhy ZWFkICp0ZDsKLQotCXRkID0gY3VydGhyZWFkOwogCVRIUkVBRF9MT0NLX0FTU0VSVCh0ZCwgTUFf T1dORUQpOwogCiAJLyoKQEAgLTU3MywyOCArNTY4LDIxIEBACiAJCXRkLT50ZF9mbGFncyAmPSB+ VERGX1RJTUVPVVQ7CiAJCXJldHVybiAoRVdPVUxEQkxPQ0spOwogCX0KLQotCS8qCi0JICogSWYg VERGX1RJTU9GQUlMIGlzIHNldCwgdGhlIHRpbWVvdXQgcmFuIGFmdGVyIHdlIGhhZAotCSAqIGFs cmVhZHkgYmVlbiB3b2tlbiB1cC4KLQkgKi8KLQlpZiAodGQtPnRkX2ZsYWdzICYgVERGX1RJTU9G QUlMKQotCQl0ZC0+dGRfZmxhZ3MgJj0gflRERl9USU1PRkFJTDsKLQotCS8qCi0JICogSWYgY2Fs bG91dF9zdG9wKCkgZmFpbHMsIHRoZW4gdGhlIHRpbWVvdXQgaXMgcnVubmluZyBvbgotCSAqIGFu b3RoZXIgQ1BVLCBzbyBzeW5jaHJvbml6ZSB3aXRoIGl0IHRvIGF2b2lkIGhhdmluZyBpdAotCSAq IGFjY2lkZW50YWxseSB3YWtlIHVwIGEgc3Vic2VxdWVudCBzbGVlcC4KLQkgKi8KLQllbHNlIGlm IChjYWxsb3V0X3N0b3AoJnRkLT50ZF9zbHBjYWxsb3V0KSA9PSAwKSB7Ci0JCXRkLT50ZF9mbGFn cyB8PSBUREZfVElNRU9VVDsKLQkJVERfU0VUX1NMRUVQSU5HKHRkKTsKLQkJbWlfc3dpdGNoKFNX X0lOVk9MIHwgU1dUX1NMRUVQUVRJTU8sIE5VTEwpOwotCX0KIAlyZXR1cm4gKDApOwogfQogCiAv KgorICogQXRvbWljYWxseSBzdG9wIHRoZSB0aW1lb3V0IGJ5IHVzaW5nIGEgbXV0ZXguCisgKi8K K3N0YXRpYyB2b2lkCitzbGVlcHFfc3RvcF90aW1lb3V0KHN0cnVjdCB0aHJlYWQgKnRkKQorewor CW10eF9sb2NrX3NwaW4oJnRkLT50ZF9zbHBtdXRleCk7CisJY2FsbG91dF9zdG9wKCZ0ZC0+dGRf c2xwY2FsbG91dCk7CisJbXR4X3VubG9ja19zcGluKCZ0ZC0+dGRfc2xwbXV0ZXgpOworfQorCisv KgogICogQ2hlY2sgdG8gc2VlIGlmIHdlIHdlcmUgYXdva2VuIGJ5IGEgc2lnbmFsLgogICovCiBz dGF0aWMgaW50CkBAIC02NjQsOSArNjUyLDExIEBACiAJTVBBU1MoISh0ZC0+dGRfZmxhZ3MgJiBU REZfU0lOVFIpKTsKIAl0aHJlYWRfbG9jayh0ZCk7CiAJc2xlZXBxX3N3aXRjaCh3Y2hhbiwgcHJp KTsKLQlydmFsID0gc2xlZXBxX2NoZWNrX3RpbWVvdXQoKTsKKwlydmFsID0gc2xlZXBxX2NoZWNr X3RpbWVvdXQodGQpOwogCXRocmVhZF91bmxvY2sodGQpOwogCisJc2xlZXBxX3N0b3BfdGltZW91 dCh0ZCk7CisKIAlyZXR1cm4gKHJ2YWwpOwogfQogCkBAIC02NzcsMTIgKzY2NywxOCBAQAogaW50 CiBzbGVlcHFfdGltZWR3YWl0X3NpZyh2b2lkICp3Y2hhbiwgaW50IHByaSkKIHsKKwlzdHJ1Y3Qg dGhyZWFkICp0ZDsKIAlpbnQgcmNhdGNoLCBydmFsdCwgcnZhbHM7CiAKKwl0ZCA9IGN1cnRocmVh ZDsKKwogCXJjYXRjaCA9IHNsZWVwcV9jYXRjaF9zaWduYWxzKHdjaGFuLCBwcmkpOwotCXJ2YWx0 ID0gc2xlZXBxX2NoZWNrX3RpbWVvdXQoKTsKKwlydmFsdCA9IHNsZWVwcV9jaGVja190aW1lb3V0 KHRkKTsKIAlydmFscyA9IHNsZWVwcV9jaGVja19zaWduYWxzKCk7Ci0JdGhyZWFkX3VubG9jayhj dXJ0aHJlYWQpOworCXRocmVhZF91bmxvY2sodGQpOworCisJc2xlZXBxX3N0b3BfdGltZW91dCh0 ZCk7CisKIAlpZiAocmNhdGNoKQogCQlyZXR1cm4gKHJjYXRjaCk7CiAJaWYgKHJ2YWxzKQpAQCAt ODg5LDY0ICs4ODUsNDkgQEAKIHN0YXRpYyB2b2lkCiBzbGVlcHFfdGltZW91dCh2b2lkICphcmcp CiB7Ci0Jc3RydWN0IHNsZWVwcXVldWVfY2hhaW4gKnNjOwotCXN0cnVjdCBzbGVlcHF1ZXVlICpz cTsKLQlzdHJ1Y3QgdGhyZWFkICp0ZDsKLQl2b2lkICp3Y2hhbjsKLQlpbnQgd2FrZXVwX3N3YXBw ZXI7CisJc3RydWN0IHRocmVhZCAqdGQgPSBhcmc7CisJaW50IHdha2V1cF9zd2FwcGVyID0gMDsK IAotCXRkID0gYXJnOwotCXdha2V1cF9zd2FwcGVyID0gMDsKIAlDVFIzKEtUUl9QUk9DLCAic2xl ZXBxX3RpbWVvdXQ6IHRocmVhZCAlcCAocGlkICVsZCwgJXMpIiwKIAkgICAgKHZvaWQgKil0ZCwg KGxvbmcpdGQtPnRkX3Byb2MtPnBfcGlkLCAodm9pZCAqKXRkLT50ZF9uYW1lKTsKIAotCS8qCi0J ICogRmlyc3QsIHNlZSBpZiB0aGUgdGhyZWFkIGlzIGFzbGVlcCBhbmQgZ2V0IHRoZSB3YWl0IGNo YW5uZWwgaWYKLQkgKiBpdCBpcy4KLQkgKi8KLQl0aHJlYWRfbG9jayh0ZCk7Ci0JaWYgKFREX0lT X1NMRUVQSU5HKHRkKSAmJiBURF9PTl9TTEVFUFEodGQpKSB7Ci0JCXdjaGFuID0gdGQtPnRkX3dj aGFuOwotCQlzYyA9IFNDX0xPT0tVUCh3Y2hhbik7Ci0JCVRIUkVBRF9MT0NLUFRSX0FTU0VSVCh0 ZCwgJnNjLT5zY19sb2NrKTsKLQkJc3EgPSBzbGVlcHFfbG9va3VwKHdjaGFuKTsKLQkJTVBBU1Mo c3EgIT0gTlVMTCk7Ci0JCXRkLT50ZF9mbGFncyB8PSBUREZfVElNRU9VVDsKLQkJd2FrZXVwX3N3 YXBwZXIgPSBzbGVlcHFfcmVzdW1lX3RocmVhZChzcSwgdGQsIDApOwotCQl0aHJlYWRfdW5sb2Nr KHRkKTsKLQkJaWYgKHdha2V1cF9zd2FwcGVyKQotCQkJa2lja19wcm9jMCgpOwotCQlyZXR1cm47 Ci0JfQorCS8qIEhhbmRsZSB0aGUgdGhyZWUgY2FzZXMgd2hpY2ggY2FuIGhhcHBlbiAqLwogCi0J LyoKLQkgKiBJZiB0aGUgdGhyZWFkIGlzIG9uIHRoZSBTTEVFUFEgYnV0IGlzbid0IHNsZWVwaW5n IHlldCwgaXQKLQkgKiBjYW4gZWl0aGVyIGJlIG9uIGFub3RoZXIgQ1BVIGluIGJldHdlZW4gc2xl ZXBxX2FkZCgpIGFuZAotCSAqIG9uZSBvZiB0aGUgc2xlZXBxXyp3YWl0KigpIHJvdXRpbmVzIG9y IGl0IGNhbiBiZSBpbgotCSAqIHNsZWVwcV9jYXRjaF9zaWduYWxzKCkuCi0JICovCisJdGhyZWFk X2xvY2sodGQpOwogCWlmIChURF9PTl9TTEVFUFEodGQpKSB7Ci0JCXRkLT50ZF9mbGFncyB8PSBU REZfVElNRU9VVDsKLQkJdGhyZWFkX3VubG9jayh0ZCk7Ci0JCXJldHVybjsKLQl9CisJCWlmIChU RF9JU19TTEVFUElORyh0ZCkpIHsKKwkJCXN0cnVjdCBzbGVlcHF1ZXVlX2NoYWluICpzYzsKKwkJ CXN0cnVjdCBzbGVlcHF1ZXVlICpzcTsKKwkJCXZvaWQgKndjaGFuOwogCi0JLyoKLQkgKiBOb3cg Y2hlY2sgZm9yIHRoZSBlZGdlIGNhc2VzLiAgRmlyc3QsIGlmIFRERl9USU1FT1VUIGlzIHNldCwK LQkgKiB0aGVuIHRoZSBvdGhlciB0aHJlYWQgaGFzIGFscmVhZHkgeWllbGRlZCB0byB1cywgc28g Y2xlYXIKLQkgKiB0aGUgZmxhZyBhbmQgcmVzdW1lIGl0LiAgSWYgVERGX1RJTUVPVVQgaXMgbm90 IHNldCwgdGhlbiB0aGUKLQkgKiB3ZSBrbm93IHRoYXQgdGhlIG90aGVyIHRocmVhZCBpcyBub3Qg b24gYSBzbGVlcCBxdWV1ZSwgYnV0IGl0Ci0JICogaGFzbid0IHJlc3VtZWQgZXhlY3V0aW9uIHll dC4gIEluIHRoYXQgY2FzZSwgc2V0IFRERl9USU1PRkFJTAotCSAqIHRvIGxldCBpdCBrbm93IHRo YXQgdGhlIHRpbWVvdXQgaGFzIGFscmVhZHkgcnVuIGFuZCBkb2Vzbid0Ci0JICogbmVlZCB0byBi ZSBjYW5jZWxlZC4KLQkgKi8KLQlpZiAodGQtPnRkX2ZsYWdzICYgVERGX1RJTUVPVVQpIHsKLQkJ TVBBU1MoVERfSVNfU0xFRVBJTkcodGQpKTsKLQkJdGQtPnRkX2ZsYWdzICY9IH5UREZfVElNRU9V VDsKLQkJVERfQ0xSX1NMRUVQSU5HKHRkKTsKLQkJd2FrZXVwX3N3YXBwZXIgPSBzZXRydW5uYWJs ZSh0ZCk7Ci0JfSBlbHNlCi0JCXRkLT50ZF9mbGFncyB8PSBUREZfVElNT0ZBSUw7CisJCQkvKgor CQkJICogQ2FzZSBJIC0gdGhyZWFkIGlzIGFzbGVlcCBhbmQgbmVlZHMgdG8gYmUKKwkJCSAqIGF3 b2tlbjoKKwkJCSAqLworCQkJd2NoYW4gPSB0ZC0+dGRfd2NoYW47CisJCQlzYyA9IFNDX0xPT0tV UCh3Y2hhbik7CisJCQlUSFJFQURfTE9DS1BUUl9BU1NFUlQodGQsICZzYy0+c2NfbG9jayk7CisJ CQlzcSA9IHNsZWVwcV9sb29rdXAod2NoYW4pOworCQkJTVBBU1Moc3EgIT0gTlVMTCk7CisJCQl0 ZC0+dGRfZmxhZ3MgfD0gVERGX1RJTUVPVVQ7CisJCQl3YWtldXBfc3dhcHBlciA9IHNsZWVwcV9y ZXN1bWVfdGhyZWFkKHNxLCB0ZCwgMCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQ2FzZSBJ SSAtIGNhbmNlbCBnb2luZyB0byBzbGVlcCBieSBzZXR0aW5nCisJCQkgKiB0aGUgdGltZW91dCBm bGFnIGJlY2F1c2UgdGhlIHRhcmdldCB0aHJlYWQKKwkJCSAqIGlzIG5vdCBhc2xlZXAgeWV0LiBJ dCBjYW4gYmUgb24gYW5vdGhlciBDUFUKKwkJCSAqIGluIGJldHdlZW4gc2xlZXBxX2FkZCgpIGFu ZCBvbmUgb2YgdGhlCisJCQkgKiBzbGVlcHFfKndhaXQqKCkgcm91dGluZXMgb3IgaXQgY2FuIGJl IGluCisJCQkgKiBzbGVlcHFfY2F0Y2hfc2lnbmFscygpLgorCQkJICovCisJCQl0ZC0+dGRfZmxh Z3MgfD0gVERGX1RJTUVPVVQ7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBDYXNlIElJSSAt IHRocmVhZCBpcyBhbHJlYWR5IHdva2VuIHVwIGJ5IGEgd2FrZXVwCisJCSAqIGNhbGwgYW5kIHNo b3VsZCBub3QgdGltZW91dC4gTm90aGluZyB0byBkbyEKKwkJICovCisJfQogCXRocmVhZF91bmxv Y2sodGQpOwogCWlmICh3YWtldXBfc3dhcHBlcikKIAkJa2lja19wcm9jMCgpOwpkaWZmIC0tZ2l0 IGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vybl90aW1lb3V0LmMgYi9wcm9qZWN0cy9o cHNfaGVhZC9zeXMva2Vybi9rZXJuX3RpbWVvdXQuYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9z eXMva2Vybi9rZXJuX3RpbWVvdXQuYworKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9r ZXJuX3RpbWVvdXQuYwpAQCAtNTQsNiArNTQsOCBAQAogI2luY2x1ZGUgPHN5cy9sb2NrLmg+CiAj aW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUg PHN5cy9ybWxvY2suaD4KKyNpbmNsdWRlIDxzeXMvcndsb2NrLmg+CiAjaW5jbHVkZSA8c3lzL3By b2MuaD4KICNpbmNsdWRlIDxzeXMvc2R0Lmg+CiAjaW5jbHVkZSA8c3lzL3NsZWVwcXVldWUuaD4K QEAgLTc1LDI4ICs3NywyNSBAQAogICAgICJzdHJ1Y3QgY2FsbG91dCAqIik7CiAKICNpZmRlZiBD QUxMT1VUX1BST0ZJTElORwotc3RhdGljIGludCBhdmdfZGVwdGg7Ci1TWVNDVExfSU5UKF9kZWJ1 ZywgT0lEX0FVVE8sIHRvX2F2Z19kZXB0aCwgQ1RMRkxBR19SRCwgJmF2Z19kZXB0aCwgMCwKK3N0 YXRpYyBpbnQgYXZnX2RlcHRoWzJdOworU1lTQ1RMX0lOVChfZGVidWcsIE9JRF9BVVRPLCB0b19h dmdfZGVwdGgsIENUTEZMQUdfUkQsICZhdmdfZGVwdGhbMF0sIDAsCiAgICAgIkF2ZXJhZ2UgbnVt YmVyIG9mIGl0ZW1zIGV4YW1pbmVkIHBlciBzb2Z0Y2xvY2sgY2FsbC4gVW5pdHMgPSAxLzEwMDAi KTsKLXN0YXRpYyBpbnQgYXZnX2djYWxsczsKLVNZU0NUTF9JTlQoX2RlYnVnLCBPSURfQVVUTywg dG9fYXZnX2djYWxscywgQ1RMRkxBR19SRCwgJmF2Z19nY2FsbHMsIDAsCitzdGF0aWMgaW50IGF2 Z19nY2FsbHNbMl07CitTWVNDVExfSU5UKF9kZWJ1ZywgT0lEX0FVVE8sIHRvX2F2Z19nY2FsbHMs IENUTEZMQUdfUkQsICZhdmdfZ2NhbGxzWzBdLCAwLAogICAgICJBdmVyYWdlIG51bWJlciBvZiBH aWFudCBjYWxsb3V0cyBtYWRlIHBlciBzb2Z0Y2xvY2sgY2FsbC4gVW5pdHMgPSAxLzEwMDAiKTsK LXN0YXRpYyBpbnQgYXZnX2xvY2tjYWxsczsKLVNZU0NUTF9JTlQoX2RlYnVnLCBPSURfQVVUTywg dG9fYXZnX2xvY2tjYWxscywgQ1RMRkxBR19SRCwgJmF2Z19sb2NrY2FsbHMsIDAsCitzdGF0aWMg aW50IGF2Z19sb2NrY2FsbHNbMl07CitTWVNDVExfSU5UKF9kZWJ1ZywgT0lEX0FVVE8sIHRvX2F2 Z19sb2NrY2FsbHMsIENUTEZMQUdfUkQsICZhdmdfbG9ja2NhbGxzWzBdLCAwLAogICAgICJBdmVy YWdlIG51bWJlciBvZiBsb2NrIGNhbGxvdXRzIG1hZGUgcGVyIHNvZnRjbG9jayBjYWxsLiBVbml0 cyA9IDEvMTAwMCIpOwotc3RhdGljIGludCBhdmdfbXBjYWxsczsKLVNZU0NUTF9JTlQoX2RlYnVn LCBPSURfQVVUTywgdG9fYXZnX21wY2FsbHMsIENUTEZMQUdfUkQsICZhdmdfbXBjYWxscywgMCwK K3N0YXRpYyBpbnQgYXZnX21wY2FsbHNbMl07CitTWVNDVExfSU5UKF9kZWJ1ZywgT0lEX0FVVE8s IHRvX2F2Z19tcGNhbGxzLCBDVExGTEFHX1JELCAmYXZnX21wY2FsbHNbMF0sIDAsCiAgICAgIkF2 ZXJhZ2UgbnVtYmVyIG9mIE1QIGNhbGxvdXRzIG1hZGUgcGVyIHNvZnRjbG9jayBjYWxsLiBVbml0 cyA9IDEvMTAwMCIpOwotc3RhdGljIGludCBhdmdfZGVwdGhfZGlyOwotU1lTQ1RMX0lOVChfZGVi dWcsIE9JRF9BVVRPLCB0b19hdmdfZGVwdGhfZGlyLCBDVExGTEFHX1JELCAmYXZnX2RlcHRoX2Rp ciwgMCwKK1NZU0NUTF9JTlQoX2RlYnVnLCBPSURfQVVUTywgdG9fYXZnX2RlcHRoX2RpciwgQ1RM RkxBR19SRCwgJmF2Z19kZXB0aFsxXSwgMCwKICAgICAiQXZlcmFnZSBudW1iZXIgb2YgZGlyZWN0 IGNhbGxvdXRzIGV4YW1pbmVkIHBlciBjYWxsb3V0X3Byb2Nlc3MgY2FsbC4gIgogICAgICJVbml0 cyA9IDEvMTAwMCIpOwotc3RhdGljIGludCBhdmdfbG9ja2NhbGxzX2RpcjsKIFNZU0NUTF9JTlQo X2RlYnVnLCBPSURfQVVUTywgdG9fYXZnX2xvY2tjYWxsc19kaXIsIENUTEZMQUdfUkQsCi0gICAg JmF2Z19sb2NrY2FsbHNfZGlyLCAwLCAiQXZlcmFnZSBudW1iZXIgb2YgbG9jayBkaXJlY3QgY2Fs bG91dHMgbWFkZSBwZXIgIgorICAgICZhdmdfbG9ja2NhbGxzWzFdLCAwLCAiQXZlcmFnZSBudW1i ZXIgb2YgbG9jayBkaXJlY3QgY2FsbG91dHMgbWFkZSBwZXIgIgogICAgICJjYWxsb3V0X3Byb2Nl c3MgY2FsbC4gVW5pdHMgPSAxLzEwMDAiKTsKLXN0YXRpYyBpbnQgYXZnX21wY2FsbHNfZGlyOwot U1lTQ1RMX0lOVChfZGVidWcsIE9JRF9BVVRPLCB0b19hdmdfbXBjYWxsc19kaXIsIENUTEZMQUdf UkQsICZhdmdfbXBjYWxsc19kaXIsCitTWVNDVExfSU5UKF9kZWJ1ZywgT0lEX0FVVE8sIHRvX2F2 Z19tcGNhbGxzX2RpciwgQ1RMRkxBR19SRCwgJmF2Z19tcGNhbGxzWzFdLAogICAgIDAsICJBdmVy YWdlIG51bWJlciBvZiBNUCBkaXJlY3QgY2FsbG91dHMgbWFkZSBwZXIgY2FsbG91dF9wcm9jZXNz IGNhbGwuICIKICAgICAiVW5pdHMgPSAxLzEwMDAiKTsKICNlbmRpZgpAQCAtMTI0LDY0ICsxMjMs MjMwIEBACiAgKi8KIHVfaW50IGNhbGx3aGVlbHNpemUsIGNhbGx3aGVlbG1hc2s7CiAKKyNkZWZp bmUJQ0FMTE9VVF9SRVRfTk9STUFMCTAKKyNkZWZpbmUJQ0FMTE9VVF9SRVRfQ0FOQ0VMTEVECTEK KyNkZWZpbmUJQ0FMTE9VVF9SRVRfRFJBSU5JTkcJMgorCitzdHJ1Y3QgY2FsbG91dF9hcmdzIHsK KwlzYmludGltZV90IHRpbWU7CQkvKiBhYnNvbHV0ZSB0aW1lIGZvciB0aGUgZXZlbnQgKi8KKwlz YmludGltZV90IHByZWNpc2lvbjsJCS8qIGRlbHRhIGFsbG93ZWQgd3J0IG9wdCAqLworCXZvaWQJ KmFyZzsJCQkvKiBmdW5jdGlvbiBhcmd1bWVudCAqLworCWNhbGxvdXRfZnVuY190ICpmdW5jOwkJ LyogZnVuY3Rpb24gdG8gY2FsbCAqLworCWludAlmbGFnczsJCQkvKiBmbGFncyBwYXNzZWQgdG8g Y2FsbG91dF9yZXNldCgpICovCisJaW50CWNwdTsJCQkvKiBDUFUgd2UncmUgc2NoZWR1bGVkIG9u ICovCit9OworCit0eXBlZGVmIHZvaWQgY2FsbG91dF9tdXRleF9vcF90KHN0cnVjdCBsb2NrX29i amVjdCAqKTsKKworc3RydWN0IGNhbGxvdXRfbXV0ZXhfb3BzIHsKKwljYWxsb3V0X211dGV4X29w X3QgKmxvY2s7CisJY2FsbG91dF9tdXRleF9vcF90ICp1bmxvY2s7Cit9OworCitlbnVtIHsKKwlD QUxMT1VUX0xDX1VOVVNFRF8wLAorCUNBTExPVVRfTENfVU5VU0VEXzEsCisJQ0FMTE9VVF9MQ19V TlVTRURfMiwKKwlDQUxMT1VUX0xDX1VOVVNFRF8zLAorCUNBTExPVVRfTENfU1BJTiwKKwlDQUxM T1VUX0xDX01VVEVYLAorCUNBTExPVVRfTENfUlcsCisJQ0FMTE9VVF9MQ19STSwKK307CisKK3N0 YXRpYyB2b2lkCitjYWxsb3V0X211dGV4X29wX25vbmUoc3RydWN0IGxvY2tfb2JqZWN0ICpsb2Nr KQoreworfQorCitzdGF0aWMgdm9pZAorY2FsbG91dF9tdXRleF9sb2NrKHN0cnVjdCBsb2NrX29i amVjdCAqbG9jaykKK3sKKworCW10eF9sb2NrKChzdHJ1Y3QgbXR4ICopbG9jayk7Cit9CisKK3N0 YXRpYyB2b2lkCitjYWxsb3V0X211dGV4X3VubG9jayhzdHJ1Y3QgbG9ja19vYmplY3QgKmxvY2sp Cit7CisKKwltdHhfdW5sb2NrKChzdHJ1Y3QgbXR4ICopbG9jayk7Cit9CisKK3N0YXRpYyB2b2lk CitjYWxsb3V0X211dGV4X2xvY2tfc3BpbihzdHJ1Y3QgbG9ja19vYmplY3QgKmxvY2spCit7CisK KwltdHhfbG9ja19zcGluKChzdHJ1Y3QgbXR4ICopbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitj YWxsb3V0X211dGV4X3VubG9ja19zcGluKHN0cnVjdCBsb2NrX29iamVjdCAqbG9jaykKK3sKKwor CW10eF91bmxvY2tfc3Bpbigoc3RydWN0IG10eCAqKWxvY2spOworfQorCitzdGF0aWMgdm9pZAor Y2FsbG91dF9ybV93bG9jayhzdHJ1Y3QgbG9ja19vYmplY3QgKmxvY2spCit7CisKKwlybV93bG9j aygoc3RydWN0IHJtbG9jayAqKWxvY2spOworfQorCitzdGF0aWMgdm9pZAorY2FsbG91dF9ybV93 dW5sb2NrKHN0cnVjdCBsb2NrX29iamVjdCAqbG9jaykKK3sKKworCXJtX3d1bmxvY2soKHN0cnVj dCBybWxvY2sgKilsb2NrKTsKK30KKworc3RhdGljIHZvaWQKK2NhbGxvdXRfcndfd2xvY2soc3Ry dWN0IGxvY2tfb2JqZWN0ICpsb2NrKQoreworCisJcndfd2xvY2soKHN0cnVjdCByd2xvY2sgKils b2NrKTsKK30KKworc3RhdGljIHZvaWQKK2NhbGxvdXRfcndfd3VubG9jayhzdHJ1Y3QgbG9ja19v YmplY3QgKmxvY2spCit7CisKKwlyd193dW5sb2NrKChzdHJ1Y3Qgcndsb2NrICopbG9jayk7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FsbG91dF9tdXRleF9vcHMgY2FsbG91dF9tdXRleF9v cHNbOF0gPSB7CisJW0NBTExPVVRfTENfVU5VU0VEXzBdID0geworCQkubG9jayA9IGNhbGxvdXRf bXV0ZXhfb3Bfbm9uZSwKKwkJLnVubG9jayA9IGNhbGxvdXRfbXV0ZXhfb3Bfbm9uZSwKKwl9LAor CVtDQUxMT1VUX0xDX1VOVVNFRF8xXSA9IHsKKwkJLmxvY2sgPSBjYWxsb3V0X211dGV4X29wX25v bmUsCisJCS51bmxvY2sgPSBjYWxsb3V0X211dGV4X29wX25vbmUsCisJfSwKKwlbQ0FMTE9VVF9M Q19VTlVTRURfMl0gPSB7CisJCS5sb2NrID0gY2FsbG91dF9tdXRleF9vcF9ub25lLAorCQkudW5s b2NrID0gY2FsbG91dF9tdXRleF9vcF9ub25lLAorCX0sCisJW0NBTExPVVRfTENfVU5VU0VEXzNd ID0geworCQkubG9jayA9IGNhbGxvdXRfbXV0ZXhfb3Bfbm9uZSwKKwkJLnVubG9jayA9IGNhbGxv dXRfbXV0ZXhfb3Bfbm9uZSwKKwl9LAorCVtDQUxMT1VUX0xDX1NQSU5dID0geworCQkubG9jayA9 IGNhbGxvdXRfbXV0ZXhfbG9ja19zcGluLAorCQkudW5sb2NrID0gY2FsbG91dF9tdXRleF91bmxv Y2tfc3BpbiwKKwl9LAorCVtDQUxMT1VUX0xDX01VVEVYXSA9IHsKKwkJLmxvY2sgPSBjYWxsb3V0 X211dGV4X2xvY2ssCisJCS51bmxvY2sgPSBjYWxsb3V0X211dGV4X3VubG9jaywKKwl9LAorCVtD QUxMT1VUX0xDX1JXXSA9IHsKKwkJLmxvY2sgPSBjYWxsb3V0X3J3X3dsb2NrLAorCQkudW5sb2Nr ID0gY2FsbG91dF9yd193dW5sb2NrLAorCX0sCisJW0NBTExPVVRfTENfUk1dID0geworCQkubG9j ayA9IGNhbGxvdXRfcm1fd2xvY2ssCisJCS51bmxvY2sgPSBjYWxsb3V0X3JtX3d1bmxvY2ssCisJ fSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FsbG91dF9sb2NrX2NsaWVudChpbnQgY19m bGFncywgc3RydWN0IGxvY2tfb2JqZWN0ICpjX2xvY2spCit7CisKKwljYWxsb3V0X211dGV4X29w c1tDQUxMT1VUX0dFVF9MQyhjX2ZsYWdzKV0ubG9jayhjX2xvY2spOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQKK2NhbGxvdXRfdW5sb2NrX2NsaWVudChpbnQgY19mbGFncywgc3RydWN0IGxvY2tf b2JqZWN0ICpjX2xvY2spCit7CisKKwljYWxsb3V0X211dGV4X29wc1tDQUxMT1VUX0dFVF9MQyhj X2ZsYWdzKV0udW5sb2NrKGNfbG9jayk7Cit9CisKIC8qCi0gKiBUaGUgY2FsbG91dCBjcHUgZXhl YyBlbnRpdGllcyByZXByZXNlbnQgaW5mb3JtYXRpb25zIG5lY2Vzc2FyeSBmb3IKLSAqIGRlc2Ny aWJpbmcgdGhlIHN0YXRlIG9mIGNhbGxvdXRzIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBDUFUg YW5kIHRoZSBvbmVzCi0gKiBuZWNlc3NhcnkgZm9yIG1pZ3JhdGluZyBjYWxsb3V0cyB0byB0aGUg bmV3IGNhbGxvdXQgY3B1LiBJbiBwYXJ0aWN1bGFyLAotICogdGhlIGZpcnN0IGVudHJ5IG9mIHRo ZSBhcnJheSBjY19leGVjX2VudGl0eSBob2xkcyBpbmZvcm1hdGlvbnMgZm9yIGNhbGxvdXQKLSAq IHJ1bm5pbmcgaW4gU1dJIHRocmVhZCBjb250ZXh0LCB3aGlsZSB0aGUgc2Vjb25kIG9uZSBob2xk cyBpbmZvcm1hdGlvbnMKLSAqIGZvciBjYWxsb3V0IHJ1bm5pbmcgZGlyZWN0bHkgZnJvbSBoYXJk d2FyZSBpbnRlcnJ1cHQgY29udGV4dC4KLSAqIFRoZSBjYWNoZWQgaW5mb3JtYXRpb25zIGFyZSB2 ZXJ5IGltcG9ydGFudCBmb3IgZGVmZXJyaW5nIG1pZ3JhdGlvbiB3aGVuCi0gKiB0aGUgbWlncmF0 aW5nIGNhbGxvdXQgaXMgYWxyZWFkeSBydW5uaW5nLgorICogVGhlIGNhbGxvdXQgQ1BVIGV4ZWMg c3RydWN0dXJlIHJlcHJlc2VudCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yCisgKiBkZXNjcmli aW5nIHRoZSBzdGF0ZSBvZiBjYWxsb3V0cyBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgQ1BVIGFu ZAorICogZm9yIGhhbmRsaW5nIGRlZmVycmVkIGNhbGxvdXQgcmVzdGFydHMuCisgKgorICogSW4g cGFydGljdWxhciwgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheSBjY19leGVjX2VudGl0eSBo b2xkcworICogaW5mb3JtYXRpb24gZm9yIGNhbGxvdXRzIHJ1bm5pbmcgZnJvbSB0aGUgU1dJIHRo cmVhZCBjb250ZXh0LCB3aGlsZQorICogdGhlIHNlY29uZCBvbmUgaG9sZHMgaW5mb3JtYXRpb24g Zm9yIGNhbGxvdXRzIHJ1bm5pbmcgZGlyZWN0bHkgZnJvbQorICogdGhlIGhhcmR3YXJlIGludGVy cnVwdCBjb250ZXh0LgogICovCiBzdHJ1Y3QgY2NfZXhlYyB7CisJLyoKKwkgKiBUaGUgImNjX2N1 cnIiIHBvaW50cyB0byB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjYWxsb3V0IGFuZAorCSAqIGlz IHByb3RlY3RlZCBieSB0aGUgImNjX2xvY2siIHNwaW5sb2NrLiBJZiBubyBjYWxsYmFjayBpcwor CSAqIGN1cnJlbnRseSBleGVjdXRpbmcgaXQgaXMgZXF1YWwgdG8gIk5VTEwiLgorCSAqLwogCXN0 cnVjdCBjYWxsb3V0CQkqY2NfY3VycjsKLSNpZmRlZiBTTVAKLQl2b2lkCQkJKCpjZV9taWdyYXRp b25fZnVuYykodm9pZCAqKTsKLQl2b2lkCQkJKmNlX21pZ3JhdGlvbl9hcmc7Ci0JaW50CQkJY2Vf bWlncmF0aW9uX2NwdTsKLQlzYmludGltZV90CQljZV9taWdyYXRpb25fdGltZTsKLQlzYmludGlt ZV90CQljZV9taWdyYXRpb25fcHJlYzsKKwkvKgorCSAqIFRoZSAiY2NfcmVzdGFydF9hcmdzIiBz dHJ1Y3R1cmUgaG9sZHMgdGhlIGFyZ3VtZW50IGZvciBhCisJICogZGVmZXJyZWQgY2FsbGJhY2sg cmVzdGFydCBhbmQgaXMgcHJvdGVjdGVkIGJ5IHRoZSAiY2NfbG9jayIKKwkgKiBzcGlubG9jay4g VGhlIHN0cnVjdHVyZSBpcyBvbmx5IHZhbGlkIGlmICJjY19yZXN0YXJ0IiBpcworCSAqICJ0cnVl Ii4gSWYgImNjX3Jlc3RhcnQiIGlzICJmYWxzZSIgdGhlIGluZm9ybWF0aW9uIGluIHRoZQorCSAq ICJjY19yZXN0YXJ0X2FyZ3MiIHN0cnVjdHVyZSBzaGFsbCBiZSBpZ25vcmVkLgorCSAqLworCXN0 cnVjdCBjYWxsb3V0X2FyZ3MJY2NfcmVzdGFydF9hcmdzOworCWJvb2wJCQljY19yZXN0YXJ0Owor CS8qCisJICogVGhlICJjY19jYW5jZWwiIHZhcmlhYmxlIGFsbG93cyB0aGUgY3VycmVudGx5IHBl bmRpbmcKKwkgKiBjYWxsYmFjayB0byBiZSBhdG9taWNhbGx5IGNhbmNlbGxlZC4gVGhpcyBmaWVs ZCBpcyB3cml0ZQorCSAqIHByb3RlY3RlZCBieSB0aGUgImNjX2xvY2siIHNwaW5sb2NrLgorCSAq LworCWJvb2wgY2NfY2FuY2VsOworCS8qCisJICogVGhlICJjY19kcmFpbl9mbiIgcG9pbnRzIHRv IGEgZnVuY3Rpb24gd2hpY2ggc2hhbGwgYmUKKwkgKiBjYWxsZWQgd2l0aCB0aGUgYXJndW1lbnQg c3RvcmVkIGluICJjY19kcmFpbl9hcmciIHdoZW4gYW4KKwkgKiBhc3luY2hyb25vdXMgZHJhaW4g aXMgcGVyZm9ybWVkLiBUaGlzIGZpZWxkIGlzIHdyaXRlCisJICogcHJvdGVjdGVkIGJ5IHRoZSAi Y2NfbG9jayIgc3BpbmxvY2suCisJICovCisJY2FsbG91dF9mdW5jX3QgKmNjX2RyYWluX2ZuOwor CXZvaWQgKmNjX2RyYWluX2FyZzsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSB1 c2VkIGZvciBjYWxsb3V0IHByb2ZpbGluZyBvbmx5OgorCSAqLworI2lmZGVmIENBTExPVVRfUFJP RklMSU5HCisJaW50IGNjX2RlcHRoOworCWludCBjY19tcGNhbGxzOworCWludCBjY19sb2NrY2Fs bHM7CisJaW50IGNjX2djYWxsczsKICNlbmRpZgotCWJvb2wJCQljY19jYW5jZWw7Ci0JYm9vbAkJ CWNjX3dhaXRpbmc7CiB9OwogCiAvKgotICogVGhlcmUgaXMgb25lIHN0cnVjdCBjYWxsb3V0X2Nw dSBwZXIgY3B1LCBob2xkaW5nIGFsbCByZWxldmFudAorICogVGhlcmUgaXMgb25lICJzdHJ1Y3Qg Y2FsbG91dF9jcHUiIHBlciBDUFUsIGhvbGRpbmcgYWxsIHJlbGV2YW50CiAgKiBzdGF0ZSBmb3Ig dGhlIGNhbGxvdXQgcHJvY2Vzc2luZyB0aHJlYWQgb24gdGhlIGluZGl2aWR1YWwgQ1BVLgogICov CiBzdHJ1Y3QgY2FsbG91dF9jcHUgewogCXN0cnVjdCBtdHhfcGFkYWxpZ24JY2NfbG9jazsKIAlz dHJ1Y3QgY2NfZXhlYyAJCWNjX2V4ZWNfZW50aXR5WzJdOwotCXN0cnVjdCBjYWxsb3V0CQkqY2Nf bmV4dDsKIAlzdHJ1Y3QgY2FsbG91dAkJKmNjX2NhbGxvdXQ7CiAJc3RydWN0IGNhbGxvdXRfbGlz dAkqY2NfY2FsbHdoZWVsOworCXN0cnVjdCBjYWxsb3V0X2xpc3QJY2NfdG1wbGlzdDsKIAlzdHJ1 Y3QgY2FsbG91dF90YWlscQljY19leHBpcmVxOwogCXN0cnVjdCBjYWxsb3V0X3NsaXN0CWNjX2Nh bGxmcmVlOwogCXNiaW50aW1lX3QJCWNjX2ZpcnN0ZXZlbnQ7CiAJc2JpbnRpbWVfdAkJY2NfbGFz dHNjYW47CiAJdm9pZAkJCSpjY19jb29raWU7Ci0JdV9pbnQJCQljY19idWNrZXQ7Ci0JdV9pbnQJ CQljY19pbml0ZWQ7CiAJY2hhcgkJCWNjX2t0cl9ldmVudF9uYW1lWzIwXTsKIH07CiAKLSNkZWZp bmUJY2FsbG91dF9taWdyYXRpbmcoYykJKChjKS0+Y19pZmxhZ3MgJiBDQUxMT1VUX0RGUk1JR1JB VElPTikKKyNkZWZpbmUJY2NfZXhlY19jdXJyKGNjLCBkaXIpCQkoY2MpLT5jY19leGVjX2VudGl0 eVsoZGlyKV0uY2NfY3VycgorI2RlZmluZQljY19leGVjX3Jlc3RhcnRfYXJncyhjYywgZGlyKQko Y2MpLT5jY19leGVjX2VudGl0eVsoZGlyKV0uY2NfcmVzdGFydF9hcmdzCisjZGVmaW5lCWNjX2V4 ZWNfcmVzdGFydChjYywgZGlyKQkoY2MpLT5jY19leGVjX2VudGl0eVsoZGlyKV0uY2NfcmVzdGFy dAorI2RlZmluZQljY19leGVjX2NhbmNlbChjYywgZGlyKQkJKGNjKS0+Y2NfZXhlY19lbnRpdHlb KGRpcildLmNjX2NhbmNlbAorI2RlZmluZQljY19leGVjX2RyYWluX2ZuKGNjLCBkaXIpCShjYykt PmNjX2V4ZWNfZW50aXR5WyhkaXIpXS5jY19kcmFpbl9mbgorI2RlZmluZQljY19leGVjX2RyYWlu X2FyZyhjYywgZGlyKQkoY2MpLT5jY19leGVjX2VudGl0eVsoZGlyKV0uY2NfZHJhaW5fYXJnCisj ZGVmaW5lCWNjX2V4ZWNfZGVwdGgoY2MsIGRpcikJCShjYyktPmNjX2V4ZWNfZW50aXR5WyhkaXIp XS5jY19kZXB0aAorI2RlZmluZQljY19leGVjX21wY2FsbHMoY2MsIGRpcikJKGNjKS0+Y2NfZXhl Y19lbnRpdHlbKGRpcildLmNjX21wY2FsbHMKKyNkZWZpbmUJY2NfZXhlY19sb2NrY2FsbHMoY2Ms IGRpcikJKGNjKS0+Y2NfZXhlY19lbnRpdHlbKGRpcildLmNjX2xvY2tjYWxscworI2RlZmluZQlj Y19leGVjX2djYWxscyhjYywgZGlyKQkJKGNjKS0+Y2NfZXhlY19lbnRpdHlbKGRpcildLmNjX2dj YWxscwogCi0jZGVmaW5lCWNjX2V4ZWNfY3VycihjYywgZGlyKQkJY2MtPmNjX2V4ZWNfZW50aXR5 W2Rpcl0uY2NfY3VycgotI2RlZmluZQljY19leGVjX25leHQoY2MpCQljYy0+Y2NfbmV4dAotI2Rl ZmluZQljY19leGVjX2NhbmNlbChjYywgZGlyKQkJY2MtPmNjX2V4ZWNfZW50aXR5W2Rpcl0uY2Nf Y2FuY2VsCi0jZGVmaW5lCWNjX2V4ZWNfd2FpdGluZyhjYywgZGlyKQljYy0+Y2NfZXhlY19lbnRp dHlbZGlyXS5jY193YWl0aW5nCiAjaWZkZWYgU01QCi0jZGVmaW5lCWNjX21pZ3JhdGlvbl9mdW5j KGNjLCBkaXIpCWNjLT5jY19leGVjX2VudGl0eVtkaXJdLmNlX21pZ3JhdGlvbl9mdW5jCi0jZGVm aW5lCWNjX21pZ3JhdGlvbl9hcmcoY2MsIGRpcikJY2MtPmNjX2V4ZWNfZW50aXR5W2Rpcl0uY2Vf bWlncmF0aW9uX2FyZwotI2RlZmluZQljY19taWdyYXRpb25fY3B1KGNjLCBkaXIpCWNjLT5jY19l eGVjX2VudGl0eVtkaXJdLmNlX21pZ3JhdGlvbl9jcHUKLSNkZWZpbmUJY2NfbWlncmF0aW9uX3Rp bWUoY2MsIGRpcikJY2MtPmNjX2V4ZWNfZW50aXR5W2Rpcl0uY2VfbWlncmF0aW9uX3RpbWUKLSNk ZWZpbmUJY2NfbWlncmF0aW9uX3ByZWMoY2MsIGRpcikJY2MtPmNjX2V4ZWNfZW50aXR5W2Rpcl0u Y2VfbWlncmF0aW9uX3ByZWMKLQogc3RydWN0IGNhbGxvdXRfY3B1IGNjX2NwdVtNQVhDUFVdOwot I2RlZmluZQlDUFVCTE9DSwlNQVhDUFUKKyNkZWZpbmUJQ1BVQkxPQ0sJLTEKICNkZWZpbmUJQ0Nf Q1BVKGNwdSkJKCZjY19jcHVbKGNwdSldKQogI2RlZmluZQlDQ19TRUxGKCkJQ0NfQ1BVKFBDUFVf R0VUKGNwdWlkKSkKICNlbHNlCkBAIC0xOTYsNjcgKzM2MSwxMyBAQAogc3RhdGljIGludCB0aW1l b3V0X2NwdTsKIAogc3RhdGljIHZvaWQJY2FsbG91dF9jcHVfaW5pdChzdHJ1Y3QgY2FsbG91dF9j cHUgKmNjLCBpbnQgY3B1KTsKLXN0YXRpYyB2b2lkCXNvZnRjbG9ja19jYWxsX2NjKHN0cnVjdCBj YWxsb3V0ICpjLCBzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLAotI2lmZGVmIENBTExPVVRfUFJPRklM SU5HCi0JCSAgICBpbnQgKm1wY2FsbHMsIGludCAqbG9ja2NhbGxzLCBpbnQgKmdjYWxscywKLSNl bmRpZgotCQkgICAgaW50IGRpcmVjdCk7CitzdGF0aWMgdm9pZAlzb2Z0Y2xvY2tfY2FsbF9jYyhz dHJ1Y3QgY2FsbG91dCAqYywgc3RydWN0IGNhbGxvdXRfY3B1ICpjYywgY29uc3QgaW50IGRpcmVj dCk7CiAKIHN0YXRpYyBNQUxMT0NfREVGSU5FKE1fQ0FMTE9VVCwgImNhbGxvdXQiLCAiQ2FsbG91 dCBkYXRhc3RydWN0dXJlcyIpOwogCi0vKioKLSAqIExvY2tlZCBieSBjY19sb2NrOgotICogICBj Y19jdXJyICAgICAgICAgLSBJZiBhIGNhbGxvdXQgaXMgaW4gcHJvZ3Jlc3MsIGl0IGlzIGNjX2N1 cnIuCi0gKiAgICAgICAgICAgICAgICAgICAgIElmIGNjX2N1cnIgaXMgbm9uLU5VTEwsIHRocmVh ZHMgd2FpdGluZyBpbgotICogICAgICAgICAgICAgICAgICAgICBjYWxsb3V0X2RyYWluKCkgd2ls bCBiZSB3b2tlbiB1cCBhcyBzb29uIGFzIHRoZQotICogICAgICAgICAgICAgICAgICAgICByZWxl dmFudCBjYWxsb3V0IGNvbXBsZXRlcy4KLSAqICAgY2NfY2FuY2VsICAgICAgIC0gQ2hhbmdpbmcg dG8gMSB3aXRoIGJvdGggY2FsbG91dF9sb2NrIGFuZCBjY19sb2NrIGhlbGQKLSAqICAgICAgICAg ICAgICAgICAgICAgZ3VhcmFudGVlcyB0aGF0IHRoZSBjdXJyZW50IGNhbGxvdXQgd2lsbCBub3Qg cnVuLgotICogICAgICAgICAgICAgICAgICAgICBUaGUgc29mdGNsb2NrKCkgZnVuY3Rpb24gc2V0 cyB0aGlzIHRvIDAgYmVmb3JlIGl0Ci0gKiAgICAgICAgICAgICAgICAgICAgIGRyb3BzIGNhbGxv dXRfbG9jayB0byBhY3F1aXJlIGNfbG9jaywgYW5kIGl0IGNhbGxzCi0gKiAgICAgICAgICAgICAg ICAgICAgIHRoZSBoYW5kbGVyIG9ubHkgaWYgY3Vycl9jYW5jZWxsZWQgaXMgc3RpbGwgMCBhZnRl cgotICogICAgICAgICAgICAgICAgICAgICBjY19sb2NrIGlzIHN1Y2Nlc3NmdWxseSBhY3F1aXJl ZC4KLSAqICAgY2Nfd2FpdGluZyAgICAgIC0gSWYgYSB0aHJlYWQgaXMgd2FpdGluZyBpbiBjYWxs b3V0X2RyYWluKCksIHRoZW4KLSAqICAgICAgICAgICAgICAgICAgICAgY2FsbG91dF93YWl0IGlz IG5vbnplcm8uICBTZXQgb25seSB3aGVuCi0gKiAgICAgICAgICAgICAgICAgICAgIGNjX2N1cnIg aXMgbm9uLU5VTEwuCi0gKi8KLQotLyoKLSAqIFJlc2V0cyB0aGUgZXhlY3V0aW9uIGVudGl0eSB0 aWVkIHRvIGEgc3BlY2lmaWMgY2FsbG91dCBjcHUuCi0gKi8KLXN0YXRpYyB2b2lkCi1jY19jY2Vf Y2xlYW51cChzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLCBpbnQgZGlyZWN0KQotewotCi0JY2NfZXhl Y19jdXJyKGNjLCBkaXJlY3QpID0gTlVMTDsKLQljY19leGVjX2NhbmNlbChjYywgZGlyZWN0KSA9 IGZhbHNlOwotCWNjX2V4ZWNfd2FpdGluZyhjYywgZGlyZWN0KSA9IGZhbHNlOwotI2lmZGVmIFNN UAotCWNjX21pZ3JhdGlvbl9jcHUoY2MsIGRpcmVjdCkgPSBDUFVCTE9DSzsKLQljY19taWdyYXRp b25fdGltZShjYywgZGlyZWN0KSA9IDA7Ci0JY2NfbWlncmF0aW9uX3ByZWMoY2MsIGRpcmVjdCkg PSAwOwotCWNjX21pZ3JhdGlvbl9mdW5jKGNjLCBkaXJlY3QpID0gTlVMTDsKLQljY19taWdyYXRp b25fYXJnKGNjLCBkaXJlY3QpID0gTlVMTDsKLSNlbmRpZgotfQotCi0vKgotICogQ2hlY2tzIGlm IG1pZ3JhdGlvbiBpcyByZXF1ZXN0ZWQgYnkgYSBzcGVjaWZpYyBjYWxsb3V0IGNwdS4KLSAqLwot c3RhdGljIGludAotY2NfY2NlX21pZ3JhdGluZyhzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLCBpbnQg ZGlyZWN0KQotewotCi0jaWZkZWYgU01QCi0JcmV0dXJuIChjY19taWdyYXRpb25fY3B1KGNjLCBk aXJlY3QpICE9IENQVUJMT0NLKTsKLSNlbHNlCi0JcmV0dXJuICgwKTsKLSNlbmRpZgotfQotCiAv KgotICogS2VybmVsIGxvdyBsZXZlbCBjYWxsd2hlZWwgaW5pdGlhbGl6YXRpb24KLSAqIGNhbGxl ZCBvbiBjcHUwIGR1cmluZyBrZXJuZWwgc3RhcnR1cC4KKyAqIEtlcm5lbCBsb3cgbGV2ZWwgY2Fs bHdoZWVsIGluaXRpYWxpemF0aW9uIGNhbGxlZCBmcm9tIGNwdTAgZHVyaW5nCisgKiBrZXJuZWwg c3RhcnR1cDoKICAqLwogc3RhdGljIHZvaWQKIGNhbGxvdXRfY2FsbHdoZWVsX2luaXQodm9pZCAq ZHVtbXkpCkBAIC0zMTEsNTQgKzQyMiw1MiBAQAogCiAJbXR4X2luaXQoJmNjLT5jY19sb2NrLCAi Y2FsbG91dCIsIE5VTEwsIE1UWF9TUElOIHwgTVRYX1JFQ1VSU0UpOwogCVNMSVNUX0lOSVQoJmNj LT5jY19jYWxsZnJlZSk7Ci0JY2MtPmNjX2luaXRlZCA9IDE7CiAJY2MtPmNjX2NhbGx3aGVlbCA9 IG1hbGxvYyhzaXplb2Yoc3RydWN0IGNhbGxvdXRfbGlzdCkgKiBjYWxsd2hlZWxzaXplLAogCSAg ICBNX0NBTExPVVQsIE1fV0FJVE9LKTsKIAlmb3IgKGkgPSAwOyBpIDwgY2FsbHdoZWVsc2l6ZTsg aSsrKQogCQlMSVNUX0lOSVQoJmNjLT5jY19jYWxsd2hlZWxbaV0pOwogCVRBSUxRX0lOSVQoJmNj LT5jY19leHBpcmVxKTsKKwlMSVNUX0lOSVQoJmNjLT5jY190bXBsaXN0KTsKIAljYy0+Y2NfZmly c3RldmVudCA9IFNCVF9NQVg7Ci0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykKLQkJY2NfY2NlX2Ns ZWFudXAoY2MsIGkpOwogCXNucHJpbnRmKGNjLT5jY19rdHJfZXZlbnRfbmFtZSwgc2l6ZW9mKGNj LT5jY19rdHJfZXZlbnRfbmFtZSksCiAJICAgICJjYWxsd2hlZWwgY3B1ICVkIiwgY3B1KTsKIAlp ZiAoY2MtPmNjX2NhbGxvdXQgPT0gTlVMTCkJLyogT25seSBjcHUwIGhhbmRsZXMgdGltZW91dCg5 KSAqLwogCQlyZXR1cm47CiAJZm9yIChpID0gMDsgaSA8IG5jYWxsb3V0OyBpKyspIHsKIAkJYyA9 ICZjYy0+Y2NfY2FsbG91dFtpXTsKIAkJY2FsbG91dF9pbml0KGMsIDApOwotCQljLT5jX2lmbGFn cyA9IENBTExPVVRfTE9DQUxfQUxMT0M7CisJCWMtPmNfZmxhZ3MgfD0gQ0FMTE9VVF9MT0NBTF9B TExPQzsKIAkJU0xJU1RfSU5TRVJUX0hFQUQoJmNjLT5jY19jYWxsZnJlZSwgYywgY19saW5rcy5z bGUpOwogCX0KIH0KIAotI2lmZGVmIFNNUAotLyoKLSAqIFN3aXRjaGVzIHRoZSBjcHUgdGllZCB0 byBhIHNwZWNpZmljIGNhbGxvdXQuCi0gKiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBhIGxvY2tlZCBp bmNvbWluZyBjYWxsb3V0IGNwdSBhbmQgcmV0dXJucyB3aXRoCi0gKiBsb2NrZWQgb3V0Y29taW5n IGNhbGxvdXQgY3B1LgotICovCi1zdGF0aWMgc3RydWN0IGNhbGxvdXRfY3B1ICoKLWNhbGxvdXRf Y3B1X3N3aXRjaChzdHJ1Y3QgY2FsbG91dCAqYywgc3RydWN0IGNhbGxvdXRfY3B1ICpjYywgaW50 IG5ld19jcHUpCisjaWZkZWYgQ0FMTE9VVF9QUk9GSUxJTkcKK3N0YXRpYyBpbmxpbmUgdm9pZAor Y2FsbG91dF9jbGVhcl9zdGF0cyhzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLCBjb25zdCBpbnQgZGly ZWN0KQogewotCXN0cnVjdCBjYWxsb3V0X2NwdSAqbmV3X2NjOwotCi0JTVBBU1MoYyAhPSBOVUxM ICYmIGNjICE9IE5VTEwpOwotCUNDX0xPQ0tfQVNTRVJUKGNjKTsKKwljY19leGVjX2RlcHRoKGNj LCBkaXJlY3QpID0gMDsKKwljY19leGVjX21wY2FsbHMoY2MsIGRpcmVjdCkgPSAwOworCWNjX2V4 ZWNfbG9ja2NhbGxzKGNjLCBkaXJlY3QpID0gMDsKKwljY19leGVjX2djYWxscyhjYywgZGlyZWN0 KSA9IDA7Cit9CisjZW5kaWYKIAotCS8qCi0JICogQXZvaWQgaW50ZXJydXB0cyBhbmQgcHJlZW1w dGlvbiBmaXJpbmcgYWZ0ZXIgdGhlIGNhbGxvdXQgY3B1Ci0JICogaXMgYmxvY2tlZCBpbiBvcmRl ciB0byBhdm9pZCBkZWFkbG9ja3MgYXMgdGhlIG5ldyB0aHJlYWQKLQkgKiBtYXkgYmUgd2lsbGlu ZyB0byBhY3F1aXJlIHRoZSBjYWxsb3V0IGNwdSBsb2NrLgotCSAqLwotCWMtPmNfY3B1ID0gQ1BV QkxPQ0s7Ci0Jc3BpbmxvY2tfZW50ZXIoKTsKLQlDQ19VTkxPQ0soY2MpOwotCW5ld19jYyA9IEND X0NQVShuZXdfY3B1KTsKLQlDQ19MT0NLKG5ld19jYyk7Ci0Jc3BpbmxvY2tfZXhpdCgpOwotCWMt PmNfY3B1ID0gbmV3X2NwdTsKLQlyZXR1cm4gKG5ld19jYyk7CisjaWZkZWYgQ0FMTE9VVF9QUk9G SUxJTkcKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FsbG91dF91cGRhdGVfc3RhdHMoc3RydWN0IGNh bGxvdXRfY3B1ICpjYywgY29uc3QgaW50IGRpcmVjdCkKK3sKKwlhdmdfZGVwdGhbZGlyZWN0XSAr PQorCSAgICAoY2NfZXhlY19kZXB0aChjYywgZGlyZWN0KSAqIDEwMDAgLQorCSAgICBhdmdfZGVw dGhbZGlyZWN0XSkgPj4gODsKKwlhdmdfbXBjYWxsc1tkaXJlY3RdICs9CisJICAgIChjY19leGVj X21wY2FsbHMoY2MsIGRpcmVjdCkgKiAxMDAwIC0KKwkgICAgYXZnX21wY2FsbHNbZGlyZWN0XSkg Pj4gODsKKwlhdmdfbG9ja2NhbGxzW2RpcmVjdF0gKz0KKwkgICAgKGNjX2V4ZWNfbG9ja2NhbGxz KGNjLCBkaXJlY3QpICogMTAwMCAtCisJICAgIGF2Z19sb2NrY2FsbHNbZGlyZWN0XSkgPj4gODsK KwlhdmdfZ2NhbGxzW2RpcmVjdF0gKz0KKwkgICAgKGNjX2V4ZWNfZ2NhbGxzKGNjLCBkaXJlY3Qp ICogMTAwMCAtCisJICAgIGF2Z19nY2FsbHNbZGlyZWN0XSkgPj4gODsKIH0KICNlbmRpZgogCkBA IC00MjksMTkgKzUzOCwxOSBAQAogdm9pZAogY2FsbG91dF9wcm9jZXNzKHNiaW50aW1lX3Qgbm93 KQogewotCXN0cnVjdCBjYWxsb3V0ICp0bXAsICp0bXBuOworCXN0cnVjdCBjYWxsb3V0ICp0bXA7 CiAJc3RydWN0IGNhbGxvdXRfY3B1ICpjYzsKIAlzdHJ1Y3QgY2FsbG91dF9saXN0ICpzYzsKIAlz YmludGltZV90IGZpcnN0LCBsYXN0LCBtYXgsIHRtcF9tYXg7CiAJdWludDMyX3QgbG9va2FoZWFk OwogCXVfaW50IGZpcnN0YiwgbGFzdGIsIG5vd2I7Ci0jaWZkZWYgQ0FMTE9VVF9QUk9GSUxJTkcK LQlpbnQgZGVwdGhfZGlyID0gMCwgbXBjYWxsc19kaXIgPSAwLCBsb2NrY2FsbHNfZGlyID0gMDsK LSNlbmRpZgogCiAJY2MgPSBDQ19TRUxGKCk7Ci0JbXR4X2xvY2tfc3Bpbl9mbGFncygmY2MtPmNj X2xvY2ssIE1UWF9RVUlFVCk7CisJQ0NfTE9DSyhjYyk7CiAKKyNpZmRlZiBDQUxMT1VUX1BST0ZJ TElORworCWNhbGxvdXRfY2xlYXJfc3RhdHMoY2MsIDEpOworI2VuZGlmCiAJLyogQ29tcHV0ZSB0 aGUgYnVja2V0cyBvZiB0aGUgbGFzdCBzY2FuIGFuZCBwcmVzZW50IHRpbWVzLiAqLwogCWZpcnN0 YiA9IGNhbGxvdXRfaGFzaChjYy0+Y2NfbGFzdHNjYW4pOwogCWNjLT5jY19sYXN0c2NhbiA9IG5v dzsKQEAgLTQ3NCw2MSArNTgzLDU5IEBACiAJLyogSXRlcmF0ZSBjYWxsd2hlZWwgZnJvbSBmaXJz dGIgdG8gbm93YiBhbmQgdGhlbiB1cCB0byBsYXN0Yi4gKi8KIAlkbyB7CiAJCXNjID0gJmNjLT5j Y19jYWxsd2hlZWxbZmlyc3RiICYgY2FsbHdoZWVsbWFza107Ci0JCXRtcCA9IExJU1RfRklSU1Qo c2MpOwotCQl3aGlsZSAodG1wICE9IE5VTEwpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRtcCA9IExJ U1RfRklSU1Qoc2MpOworCQkJaWYgKHRtcCA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQlMSVNU X1JFTU9WRSh0bXAsIGNfbGlua3MubGUpOworCiAJCQkvKiBSdW4gdGhlIGNhbGxvdXQgaWYgcHJl c2VudCB0aW1lIHdpdGhpbiBhbGxvd2VkLiAqLwogCQkJaWYgKHRtcC0+Y190aW1lIDw9IG5vdykg ewogCQkJCS8qCi0JCQkJICogQ29uc3VtZXIgdG9sZCB1cyB0aGUgY2FsbG91dCBtYXkgYmUgcnVu Ci0JCQkJICogZGlyZWN0bHkgZnJvbSBoYXJkd2FyZSBpbnRlcnJ1cHQgY29udGV4dC4KKwkJCQkg KiBDb25zdW1lciB0b2xkIHVzIHRoZSBjYWxsb3V0IG1heSBiZQorCQkJCSAqIHJ1biBkaXJlY3Rs eSBmcm9tIHRoZSBoYXJkd2FyZQorCQkJCSAqIGludGVycnVwdCBjb250ZXh0OgogCQkJCSAqLwot CQkJCWlmICh0bXAtPmNfaWZsYWdzICYgQ0FMTE9VVF9ESVJFQ1QpIHsKLSNpZmRlZiBDQUxMT1VU X1BST0ZJTElORwotCQkJCQkrK2RlcHRoX2RpcjsKLSNlbmRpZgotCQkJCQljY19leGVjX25leHQo Y2MpID0KLQkJCQkJICAgIExJU1RfTkVYVCh0bXAsIGNfbGlua3MubGUpOwotCQkJCQljYy0+Y2Nf YnVja2V0ID0gZmlyc3RiICYgY2FsbHdoZWVsbWFzazsKLQkJCQkJTElTVF9SRU1PVkUodG1wLCBj X2xpbmtzLmxlKTsKLQkJCQkJc29mdGNsb2NrX2NhbGxfY2ModG1wLCBjYywKLSNpZmRlZiBDQUxM T1VUX1BST0ZJTElORwotCQkJCQkgICAgJm1wY2FsbHNfZGlyLCAmbG9ja2NhbGxzX2RpciwgTlVM TCwKLSNlbmRpZgotCQkJCQkgICAgMSk7Ci0JCQkJCXRtcCA9IGNjX2V4ZWNfbmV4dChjYyk7Ci0J CQkJCWNjX2V4ZWNfbmV4dChjYykgPSBOVUxMOworCQkJCWlmICh0bXAtPmNfZmxhZ3MgJiBDQUxM T1VUX0RJUkVDVCkgeworCQkJCQlzb2Z0Y2xvY2tfY2FsbF9jYyh0bXAsIGNjLCAxKTsKIAkJCQl9 IGVsc2UgewotCQkJCQl0bXBuID0gTElTVF9ORVhUKHRtcCwgY19saW5rcy5sZSk7Ci0JCQkJCUxJ U1RfUkVNT1ZFKHRtcCwgY19saW5rcy5sZSk7CiAJCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZjYy0+ Y2NfZXhwaXJlcSwKIAkJCQkJICAgIHRtcCwgY19saW5rcy50cWUpOwotCQkJCQl0bXAtPmNfaWZs YWdzIHw9IENBTExPVVRfUFJPQ0VTU0VEOwotCQkJCQl0bXAgPSB0bXBuOworCQkJCQl0bXAtPmNf ZmxhZ3MgfD0gQ0FMTE9VVF9QUk9DRVNTRUQ7CiAJCQkJfQogCQkJCWNvbnRpbnVlOwogCQkJfQor CisJCQkvKiBpbnNlcnQgY2FsbG91dCBpbnRvIHRlbXBvcmFyeSBsaXN0ICovCisJCQlMSVNUX0lO U0VSVF9IRUFEKCZjYy0+Y2NfdG1wbGlzdCwgdG1wLCBjX2xpbmtzLmxlKTsKKwkJCQogCQkJLyog U2tpcCBldmVudHMgZnJvbSBkaXN0YW50IGZ1dHVyZS4gKi8KIAkJCWlmICh0bXAtPmNfdGltZSA+ PSBtYXgpCi0JCQkJZ290byBuZXh0OworCQkJCWNvbnRpbnVlOworCiAJCQkvKgogCQkJICogRXZl bnQgbWluaW1hbCB0aW1lIGlzIGJpZ2dlciB0aGFuIHByZXNlbnQgbWF4aW1hbAogCQkJICogdGlt ZSwgc28gaXQgY2Fubm90IGJlIGFnZ3JlZ2F0ZWQuCiAJCQkgKi8KIAkJCWlmICh0bXAtPmNfdGlt ZSA+IGxhc3QpIHsKIAkJCQlsYXN0YiA9IG5vd2I7Ci0JCQkJZ290byBuZXh0OworCQkJCWNvbnRp bnVlOwogCQkJfQogCQkJLyogVXBkYXRlIGZpcnN0IGFuZCBsYXN0IHRpbWUsIHJlc3BlY3Rpbmcg dGhpcyBldmVudC4gKi8KIAkJCWlmICh0bXAtPmNfdGltZSA8IGZpcnN0KQogCQkJCWZpcnN0ID0g dG1wLT5jX3RpbWU7CiAJCQl0bXBfbWF4ID0gdG1wLT5jX3RpbWUgKyB0bXAtPmNfcHJlY2lzaW9u OwogCQkJaWYgKHRtcF9tYXggPCBsYXN0KQogCQkJCWxhc3QgPSB0bXBfbWF4OwotbmV4dDoKLQkJ CXRtcCA9IExJU1RfTkVYVCh0bXAsIGNfbGlua3MubGUpOwogCQl9CisKKwkJLyogUHV0IHRlbXBv cmFyeSBsaXN0IGJhY2sgaW50byB0aGUgbWFpbiBidWNrZXQgKi8KKwkJTElTVF9TV0FQKHNjLCAm Y2MtPmNjX3RtcGxpc3QsIGNhbGxvdXQsIGNfbGlua3MubGUpOworCQkKIAkJLyogUHJvY2VlZCB3 aXRoIHRoZSBuZXh0IGJ1Y2tldC4gKi8KIAkJZmlyc3RiKys7CisKIAkJLyoKIAkJICogU3RvcCBp ZiB3ZSBsb29rZWQgYWZ0ZXIgcHJlc2VudCB0aW1lIGFuZCBmb3VuZAogCQkgKiBzb21lIGV2ZW50 IHdlIGNhbid0IGV4ZWN1dGUgYXQgbm93LgpAQCAtNTQwLDE0ICs2NDcsMTMgQEAKIAljcHVfbmV3 X2NhbGxvdXQoY3VyY3B1LCBsYXN0LCBmaXJzdCk7CiAjZW5kaWYKICNpZmRlZiBDQUxMT1VUX1BS T0ZJTElORwotCWF2Z19kZXB0aF9kaXIgKz0gKGRlcHRoX2RpciAqIDEwMDAgLSBhdmdfZGVwdGhf ZGlyKSA+PiA4OwotCWF2Z19tcGNhbGxzX2RpciArPSAobXBjYWxsc19kaXIgKiAxMDAwIC0gYXZn X21wY2FsbHNfZGlyKSA+PiA4OwotCWF2Z19sb2NrY2FsbHNfZGlyICs9IChsb2NrY2FsbHNfZGly ICogMTAwMCAtIGF2Z19sb2NrY2FsbHNfZGlyKSA+PiA4OworCWNhbGxvdXRfdXBkYXRlX3N0YXRz KGNjLCAxKTsKICNlbmRpZgotCW10eF91bmxvY2tfc3Bpbl9mbGFncygmY2MtPmNjX2xvY2ssIE1U WF9RVUlFVCk7CisJQ0NfVU5MT0NLKGNjKTsKIAkvKgotCSAqIHN3aV9zY2hlZCBhY3F1aXJlcyB0 aGUgdGhyZWFkIGxvY2ssIHNvIHdlIGRvbid0IHdhbnQgdG8gY2FsbCBpdAotCSAqIHdpdGggY2Nf bG9jayBoZWxkOyBpbmNvcnJlY3QgbG9ja2luZyBvcmRlci4KKwkgKiAic3dpX3NjaGVkKCkiIGFj cXVpcmVzIHRoZSB0aHJlYWQgbG9jayBhbmQgd2UgZG9uJ3Qgd2FudCB0bworCSAqIGNhbGwgaXQg aGF2aW5nIGNjX2xvY2sgaGVsZCBiZWNhdXNlIGl0IGxlYWRzIHRvIGEgbG9ja2luZworCSAqIG9y ZGVyIHJldmVyc2FsIGlzc3VlLgogCSAqLwogCWlmICghVEFJTFFfRU1QVFkoJmNjLT5jY19leHBp cmVxKSkKIAkJc3dpX3NjaGVkKGNjLT5jY19jb29raWUsIDApOwpAQCAtNTYzLDggKzY2OSw3IEBA CiAJCWNwdSA9IGMtPmNfY3B1OwogI2lmZGVmIFNNUAogCQlpZiAoY3B1ID09IENQVUJMT0NLKSB7 Ci0JCQl3aGlsZSAoYy0+Y19jcHUgPT0gQ1BVQkxPQ0spCi0JCQkJY3B1X3NwaW53YWl0KCk7CisJ CQljcHVfc3BpbndhaXQoKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAjZW5kaWYKQEAgLTU3NywzMiAr NjgyLDU2IEBACiAJcmV0dXJuIChjYyk7CiB9CiAKLXN0YXRpYyB2b2lkCi1jYWxsb3V0X2NjX2Fk ZChzdHJ1Y3QgY2FsbG91dCAqYywgc3RydWN0IGNhbGxvdXRfY3B1ICpjYywKLSAgICBzYmludGlt ZV90IHNidCwgc2JpbnRpbWVfdCBwcmVjaXNpb24sIHZvaWQgKCpmdW5jKSh2b2lkICopLAotICAg IHZvaWQgKmFyZywgaW50IGNwdSwgaW50IGZsYWdzKQorc3RhdGljIHN0cnVjdCBjYWxsb3V0X2Nw dSAqCitjYWxsb3V0X2NjX2FkZF9sb2NrZWQoc3RydWN0IGNhbGxvdXQgKmMsIHN0cnVjdCBjYWxs b3V0X2NwdSAqY2MsCisgICAgc3RydWN0IGNhbGxvdXRfYXJncyAqY29hKQogewotCWludCBidWNr ZXQ7CisjaWZuZGVmIE5PX0VWRU5UVElNRVJTCisJc2JpbnRpbWVfdCBzYnQ7CisjZW5kaWYKKwl1 X2ludCBidWNrZXQ7CiAKIAlDQ19MT0NLX0FTU0VSVChjYyk7Ci0JaWYgKHNidCA8IGNjLT5jY19s YXN0c2NhbikKLQkJc2J0ID0gY2MtPmNjX2xhc3RzY2FuOwotCWMtPmNfYXJnID0gYXJnOwotCWMt PmNfaWZsYWdzIHw9IENBTExPVVRfUEVORElORzsKLQljLT5jX2lmbGFncyAmPSB+Q0FMTE9VVF9Q Uk9DRVNTRUQ7Ci0JYy0+Y19mbGFncyB8PSBDQUxMT1VUX0FDVElWRTsKLQlpZiAoZmxhZ3MgJiBD X0RJUkVDVF9FWEVDKQotCQljLT5jX2lmbGFncyB8PSBDQUxMT1VUX0RJUkVDVDsKLQljLT5jX2Z1 bmMgPSBmdW5jOwotCWMtPmNfdGltZSA9IHNidDsKLQljLT5jX3ByZWNpc2lvbiA9IHByZWNpc2lv bjsKKworCS8qIHVwZGF0ZSBmbGFncyBiZWZvcmUgc3dhcHBpbmcgbG9ja3MsIGlmIGFueSAqLwor CWMtPmNfZmxhZ3MgJj0gfihDQUxMT1VUX1BST0NFU1NFRCB8IENBTExPVVRfRElSRUNUIHwgQ0FM TE9VVF9ERUZSRVNUQVJUKTsKKwlpZiAoY29hLT5mbGFncyAmIENfRElSRUNUX0VYRUMpCisJCWMt PmNfZmxhZ3MgfD0gKENBTExPVVRfQUNUSVZFIHwgQ0FMTE9VVF9QRU5ESU5HIHwgQ0FMTE9VVF9E SVJFQ1QpOworCWVsc2UKKwkJYy0+Y19mbGFncyB8PSAoQ0FMTE9VVF9BQ1RJVkUgfCBDQUxMT1VU X1BFTkRJTkcpOworCisjaWZkZWYgU01QCisJLyogb25seSBzZXQgdGhlICJjX2NwdSIgaWYgdGhl IENQVSBudW1iZXIgY2hhbmdlZCBhbmQgaXMgdmFsaWQgKi8KKwlpZiAoYy0+Y19jcHUgIT0gY29h LT5jcHUgJiYgY29hLT5jcHUgPiBDUFVCTE9DSyAmJgorCSAgICBjb2EtPmNwdSA8PSBtcF9tYXhp ZCAmJiAhQ1BVX0FCU0VOVChjb2EtPmNwdSkpIHsKKwkJLyoKKwkJICogQXZvaWQgaW50ZXJydXB0 cyBhbmQgcHJlZW1wdGlvbiBmaXJpbmcgYWZ0ZXIgdGhlCisJCSAqIGNhbGxvdXQgQ1BVIGlzIGJs b2NrZWQgaW4gb3JkZXIgdG8gYXZvaWQgZGVhZGxvY2tzCisJCSAqIGFzIHRoZSBuZXcgdGhyZWFk IG1heSBiZSB3aWxsaW5nIHRvIGFjcXVpcmUgdGhlCisJCSAqIGNhbGxvdXQgQ1BVIGxvY2s6CisJ CSAqLworCQljLT5jX2NwdSA9IENQVUJMT0NLOworCQlzcGlubG9ja19lbnRlcigpOworCQlDQ19V TkxPQ0soY2MpOworCQljYyA9IENDX0NQVShjb2EtPmNwdSk7CisJCUNDX0xPQ0soY2MpOworCQlz cGlubG9ja19leGl0KCk7CisJCWMtPmNfY3B1ID0gY29hLT5jcHU7CisJfQorI2VuZGlmCisJaWYg KGNvYS0+dGltZSA8IGNjLT5jY19sYXN0c2NhbikKKwkJY29hLT50aW1lID0gY2MtPmNjX2xhc3Rz Y2FuOworCWMtPmNfYXJnID0gY29hLT5hcmc7CisJYy0+Y19mdW5jID0gY29hLT5mdW5jOworCWMt PmNfdGltZSA9IGNvYS0+dGltZTsKKwljLT5jX3ByZWNpc2lvbiA9IGNvYS0+cHJlY2lzaW9uOwor CiAJYnVja2V0ID0gY2FsbG91dF9nZXRfYnVja2V0KGMtPmNfdGltZSk7CiAJQ1RSMyhLVFJfQ0FM TE9VVCwgInByZWNpc2lvbiBzZXQgZm9yICVwOiAlZC4lMDh4IiwKIAkgICAgYywgKGludCkoYy0+ Y19wcmVjaXNpb24gPj4gMzIpLAogCSAgICAodV9pbnQpKGMtPmNfcHJlY2lzaW9uICYgMHhmZmZm ZmZmZikpOwogCUxJU1RfSU5TRVJUX0hFQUQoJmNjLT5jY19jYWxsd2hlZWxbYnVja2V0XSwgYywg Y19saW5rcy5sZSk7Ci0JaWYgKGNjLT5jY19idWNrZXQgPT0gYnVja2V0KQotCQljY19leGVjX25l eHQoY2MpID0gYzsKKwogI2lmbmRlZiBOT19FVkVOVFRJTUVSUwogCS8qCiAJICogSW5mb3JtIHRo ZSBldmVudHRpbWVycyg0KSBzdWJzeXN0ZW0gdGhlcmUncyBhIG5ldyBjYWxsb3V0CkBAIC02MTMs MTA1ICs3NDIsOTcgQEAKIAlzYnQgPSBjLT5jX3RpbWUgKyBjLT5jX3ByZWNpc2lvbjsKIAlpZiAo c2J0IDwgY2MtPmNjX2ZpcnN0ZXZlbnQpIHsKIAkJY2MtPmNjX2ZpcnN0ZXZlbnQgPSBzYnQ7Ci0J CWNwdV9uZXdfY2FsbG91dChjcHUsIHNidCwgYy0+Y190aW1lKTsKKwkJY3B1X25ld19jYWxsb3V0 KGMtPmNfY3B1LCBzYnQsIGMtPmNfdGltZSk7CiAJfQogI2VuZGlmCisJcmV0dXJuIChjYyk7CiB9 CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGNhbGxvdXRfY2NfZGVsKHN0cnVj dCBjYWxsb3V0ICpjLCBzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjKQogewogCi0JaWYgKChjLT5jX2lm bGFncyAmIENBTExPVVRfTE9DQUxfQUxMT0MpID09IDApCi0JCXJldHVybjsKIAljLT5jX2Z1bmMg PSBOVUxMOwogCVNMSVNUX0lOU0VSVF9IRUFEKCZjYy0+Y2NfY2FsbGZyZWUsIGMsIGNfbGlua3Mu c2xlKTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogc29mdGNsb2NrX2Nh bGxfY2Moc3RydWN0IGNhbGxvdXQgKmMsIHN0cnVjdCBjYWxsb3V0X2NwdSAqY2MsCi0jaWZkZWYg Q0FMTE9VVF9QUk9GSUxJTkcKLSAgICBpbnQgKm1wY2FsbHMsIGludCAqbG9ja2NhbGxzLCBpbnQg KmdjYWxscywKLSNlbmRpZgotICAgIGludCBkaXJlY3QpCisgICAgY29uc3QgaW50IGRpcmVjdCkK IHsKLQlzdHJ1Y3Qgcm1fcHJpb3RyYWNrZXIgdHJhY2tlcjsKLQl2b2lkICgqY19mdW5jKSh2b2lk ICopOworCWNhbGxvdXRfZnVuY190ICpjX2Z1bmM7CiAJdm9pZCAqY19hcmc7Ci0Jc3RydWN0IGxv Y2tfY2xhc3MgKmNsYXNzOwogCXN0cnVjdCBsb2NrX29iamVjdCAqY19sb2NrOwotCXVpbnRwdHJf dCBsb2NrX3N0YXR1czsKLQlpbnQgY19pZmxhZ3M7Ci0jaWZkZWYgU01QCi0Jc3RydWN0IGNhbGxv dXRfY3B1ICpuZXdfY2M7Ci0Jdm9pZCAoKm5ld19mdW5jKSh2b2lkICopOwotCXZvaWQgKm5ld19h cmc7Ci0JaW50IGZsYWdzLCBuZXdfY3B1OwotCXNiaW50aW1lX3QgbmV3X3ByZWMsIG5ld190aW1l OwotI2VuZGlmCisJaW50IGNfZmxhZ3M7CiAjaWYgZGVmaW5lZChESUFHTk9TVElDKSB8fCBkZWZp bmVkKENBTExPVVRfUFJPRklMSU5HKSAKIAlzYmludGltZV90IHNidDEsIHNidDI7CiAJc3RydWN0 IHRpbWVzcGVjIHRzMjsKIAlzdGF0aWMgc2JpbnRpbWVfdCBtYXhkdCA9IDIgKiBTQlRfMU1TOwkv KiAyIG1zZWMgKi8KIAlzdGF0aWMgdGltZW91dF90ICpsYXN0ZnVuYzsKICNlbmRpZgogCi0JS0FT U0VSVCgoYy0+Y19pZmxhZ3MgJiBDQUxMT1VUX1BFTkRJTkcpID09IENBTExPVVRfUEVORElORywK LQkgICAgKCJzb2Z0Y2xvY2tfY2FsbF9jYzogcGVuZCAlcCAleCIsIGMsIGMtPmNfaWZsYWdzKSk7 Ci0JS0FTU0VSVCgoYy0+Y19mbGFncyAmIENBTExPVVRfQUNUSVZFKSA9PSBDQUxMT1VUX0FDVElW RSwKLQkgICAgKCJzb2Z0Y2xvY2tfY2FsbF9jYzogYWN0ICVwICV4IiwgYywgYy0+Y19mbGFncykp OwotCWNsYXNzID0gKGMtPmNfbG9jayAhPSBOVUxMKSA/IExPQ0tfQ0xBU1MoYy0+Y19sb2NrKSA6 IE5VTEw7Ci0JbG9ja19zdGF0dXMgPSAwOwotCWlmIChjLT5jX2ZsYWdzICYgQ0FMTE9VVF9TSEFS RURMT0NLKSB7Ci0JCWlmIChjbGFzcyA9PSAmbG9ja19jbGFzc19ybSkKLQkJCWxvY2tfc3RhdHVz ID0gKHVpbnRwdHJfdCkmdHJhY2tlcjsKLQkJZWxzZQotCQkJbG9ja19zdGF0dXMgPSAxOwotCX0K KwlLQVNTRVJUKChjLT5jX2ZsYWdzICYgKENBTExPVVRfUEVORElORyB8IENBTExPVVRfQUNUSVZF KSkgPT0KKwkgICAgKENBTExPVVRfUEVORElORyB8IENBTExPVVRfQUNUSVZFKSwKKwkgICAgKCJz b2Z0Y2xvY2tfY2FsbF9jYzogcGVuZHxhY3QgJXAgJXgiLCBjLCBjLT5jX2ZsYWdzKSk7CisKIAlj X2xvY2sgPSBjLT5jX2xvY2s7CiAJY19mdW5jID0gYy0+Y19mdW5jOwogCWNfYXJnID0gYy0+Y19h cmc7Ci0JY19pZmxhZ3MgPSBjLT5jX2lmbGFnczsKLQlpZiAoYy0+Y19pZmxhZ3MgJiBDQUxMT1VU X0xPQ0FMX0FMTE9DKQotCQljLT5jX2lmbGFncyA9IENBTExPVVRfTE9DQUxfQUxMT0M7Ci0JZWxz ZQotCQljLT5jX2lmbGFncyAmPSB+Q0FMTE9VVF9QRU5ESU5HOwotCQorCWNfZmxhZ3MgPSBjLT5j X2ZsYWdzOworCisJLyogcmVtb3ZlIHBlbmRpbmcgYml0ICovCisJYy0+Y19mbGFncyAmPSB+Q0FM TE9VVF9QRU5ESU5HOworCisJLyogcmVzZXQgb3VyIGxvY2FsIHN0YXRlICovCiAJY2NfZXhlY19j dXJyKGNjLCBkaXJlY3QpID0gYzsKLQljY19leGVjX2NhbmNlbChjYywgZGlyZWN0KSA9IGZhbHNl OwotCUNDX1VOTE9DSyhjYyk7CisJY2NfZXhlY19yZXN0YXJ0KGNjLCBkaXJlY3QpID0gZmFsc2U7 CisJY2NfZXhlY19kcmFpbl9mbihjYywgZGlyZWN0KSA9IE5VTEw7CisJY2NfZXhlY19kcmFpbl9h cmcoY2MsIGRpcmVjdCkgPSBOVUxMOworCiAJaWYgKGNfbG9jayAhPSBOVUxMKSB7Ci0JCWNsYXNz LT5sY19sb2NrKGNfbG9jaywgbG9ja19zdGF0dXMpOworCQljY19leGVjX2NhbmNlbChjYywgZGly ZWN0KSA9IGZhbHNlOworCQlDQ19VTkxPQ0soY2MpOworCisJCS8qIHVubG9ja2VkIHJlZ2lvbiBm b3Igc3dpdGNoaW5nIGxvY2tzICovCisKKwkJY2FsbG91dF9sb2NrX2NsaWVudChjX2ZsYWdzLCBj X2xvY2spOworCiAJCS8qCi0JCSAqIFRoZSBjYWxsb3V0IG1heSBoYXZlIGJlZW4gY2FuY2VsbGVk Ci0JCSAqIHdoaWxlIHdlIHN3aXRjaGVkIGxvY2tzLgorCQkgKiBDaGVjayBpZiB0aGUgY2FsbG91 dCBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCB3aGlsZQorCQkgKiB3ZSB3ZXJlIHN3aXRjaGluZyBs b2Nrcy4gRXZlbiB0aG91Z2ggdGhlIGNhbGxvdXQgaXMKKwkJICogc3BlY2lmeWluZyBhIGxvY2ss IGl0IG1pZ2h0IG5vdCBiZSBjZXJ0YWluIHRoaXMKKwkJICogbG9jayBpcyBsb2NrZWQgd2hlbiBz dGFydGluZyBhbmQgc3RvcHBpbmcgY2FsbG91dHMuCiAJCSAqLworCQlDQ19MT0NLKGNjKTsKIAkJ aWYgKGNjX2V4ZWNfY2FuY2VsKGNjLCBkaXJlY3QpKSB7Ci0JCQljbGFzcy0+bGNfdW5sb2NrKGNf bG9jayk7Ci0JCQlnb3RvIHNraXA7CisJCQljYWxsb3V0X3VubG9ja19jbGllbnQoY19mbGFncywg Y19sb2NrKTsKKwkJCWdvdG8gc2tpcF9jY19sb2NrZWQ7CiAJCX0KLQkJLyogVGhlIGNhbGxvdXQg Y2Fubm90IGJlIHN0b3BwZWQgbm93LiAqLwotCQljY19leGVjX2NhbmNlbChjYywgZGlyZWN0KSA9 IHRydWU7CiAJCWlmIChjX2xvY2sgPT0gJkdpYW50LmxvY2tfb2JqZWN0KSB7CiAjaWZkZWYgQ0FM TE9VVF9QUk9GSUxJTkcKLQkJCSgqZ2NhbGxzKSsrOworCQkJY2NfZXhlY19nY2FsbHMoY2MsIGRp cmVjdCkrKzsKICNlbmRpZgogCQkJQ1RSMyhLVFJfQ0FMTE9VVCwgImNhbGxvdXQgZ2lhbnQgJXAg ZnVuYyAlcCBhcmcgJXAiLAogCQkJICAgIGMsIGNfZnVuYywgY19hcmcpOwogCQl9IGVsc2Ugewog I2lmZGVmIENBTExPVVRfUFJPRklMSU5HCi0JCQkoKmxvY2tjYWxscykrKzsKKwkJCWNjX2V4ZWNf bG9ja2NhbGxzKGNjLCBkaXJlY3QpKys7CiAjZW5kaWYKIAkJCUNUUjMoS1RSX0NBTExPVVQsICJj YWxsb3V0IGxvY2sgJXAgZnVuYyAlcCBhcmcgJXAiLAogCQkJICAgIGMsIGNfZnVuYywgY19hcmcp OwogCQl9CiAJfSBlbHNlIHsKICNpZmRlZiBDQUxMT1VUX1BST0ZJTElORwotCQkoKm1wY2FsbHMp Kys7CisJCWNjX2V4ZWNfbXBjYWxscyhjYywgZGlyZWN0KSsrOwogI2VuZGlmCiAJCUNUUjMoS1RS X0NBTExPVVQsICJjYWxsb3V0ICVwIGZ1bmMgJXAgYXJnICVwIiwKIAkJICAgIGMsIGNfZnVuYywg Y19hcmcpOwogCX0KKwkvKiBUaGUgY2FsbG91dCBjYW5ub3QgYmUgc3RvcHBlZCBub3chICovCisJ Y2NfZXhlY19jYW5jZWwoY2MsIGRpcmVjdCkgPSB0cnVlOworCUNDX1VOTE9DSyhjYyk7CisKKwkv KiB1bmxvY2tlZCByZWdpb24gKi8KIAlLVFJfU1RBVEUzKEtUUl9TQ0hFRCwgImNhbGxvdXQiLCBj Yy0+Y2Nfa3RyX2V2ZW50X25hbWUsICJydW5uaW5nIiwKIAkgICAgImZ1bmM6JXAiLCBjX2Z1bmMs ICJhcmc6JXAiLCBjX2FyZywgImRpcmVjdDolZCIsIGRpcmVjdCk7CiAjaWYgZGVmaW5lZChESUFH Tk9TVElDKSB8fCBkZWZpbmVkKENBTExPVVRfUFJPRklMSU5HKQpAQCAtNzM4LDg1ICs4NTksNDYg QEAKICNlbmRpZgogCUtUUl9TVEFURTAoS1RSX1NDSEVELCAiY2FsbG91dCIsIGNjLT5jY19rdHJf ZXZlbnRfbmFtZSwgImlkbGUiKTsKIAlDVFIxKEtUUl9DQUxMT1VULCAiY2FsbG91dCAlcCBmaW5p c2hlZCIsIGMpOwotCWlmICgoY19pZmxhZ3MgJiBDQUxMT1VUX1JFVFVSTlVOTE9DS0VEKSA9PSAw KQotCQljbGFzcy0+bGNfdW5sb2NrKGNfbG9jayk7Ci1za2lwOgorCisJLyoKKwkgKiBBdCB0aGlz IHBvaW50IHRoZSBjYWxsYmFjayBzdHJ1Y3R1cmUgbWlnaHQgaGF2ZSBiZWVuIGZyZWVkLAorCSAq IHNvIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHByZXZpb3VzbHkgY29waWVkIHZhbHVlIG9mCisJICog ImMtPmNfZmxhZ3MiOgorCSAqLworCWlmICgoY19mbGFncyAmIENBTExPVVRfUkVUVVJOVU5MT0NL RUQpID09IDApCisJCWNhbGxvdXRfdW5sb2NrX2NsaWVudChjX2ZsYWdzLCBjX2xvY2spOworCiAJ Q0NfTE9DSyhjYyk7CisKK3NraXBfY2NfbG9ja2VkOgogCUtBU1NFUlQoY2NfZXhlY19jdXJyKGNj LCBkaXJlY3QpID09IGMsICgibWlzaGFuZGxlZCBjY19jdXJyIikpOwogCWNjX2V4ZWNfY3Vycihj YywgZGlyZWN0KSA9IE5VTEw7Ci0JaWYgKGNjX2V4ZWNfd2FpdGluZyhjYywgZGlyZWN0KSkgewor CisJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgd2hpY2ggbmVlZHMgZHJhaW5pbmcgKi8K KwlpZiAoY2NfZXhlY19kcmFpbl9mbihjYywgZGlyZWN0KSAhPSBOVUxMKSB7CiAJCS8qCi0JCSAq IFRoZXJlIGlzIHNvbWVvbmUgd2FpdGluZyBmb3IgdGhlCi0JCSAqIGNhbGxvdXQgdG8gY29tcGxl dGUuCi0JCSAqIElmIHRoZSBjYWxsb3V0IHdhcyBzY2hlZHVsZWQgZm9yCi0JCSAqIG1pZ3JhdGlv biBqdXN0IGNhbmNlbCBpdC4KKwkJICogVW5sb2NrIHRoZSBDUFUgY2FsbG91dCBsYXN0LCBzbyB0 aGF0IGFueSB1c2Ugb2YKKwkJICogc3RydWN0dXJlcyBiZWxvbmdpbmcgdG8gdGhlIGNhbGxvdXQg YXJlIGNvbXBsZXRlOgogCQkgKi8KLQkJaWYgKGNjX2NjZV9taWdyYXRpbmcoY2MsIGRpcmVjdCkp IHsKLQkJCWNjX2NjZV9jbGVhbnVwKGNjLCBkaXJlY3QpOwotCi0JCQkvKgotCQkJICogSXQgc2hv dWxkIGJlIGFzc2VydCBoZXJlIHRoYXQgdGhlIGNhbGxvdXQgaXMgbm90Ci0JCQkgKiBkZXN0cm95 ZWQgYnV0IHRoYXQgaXMgbm90IGVhc3kuCi0JCQkgKi8KLQkJCWMtPmNfaWZsYWdzICY9IH5DQUxM T1VUX0RGUk1JR1JBVElPTjsKLQkJfQotCQljY19leGVjX3dhaXRpbmcoY2MsIGRpcmVjdCkgPSBm YWxzZTsKIAkJQ0NfVU5MT0NLKGNjKTsKLQkJd2FrZXVwKCZjY19leGVjX3dhaXRpbmcoY2MsIGRp cmVjdCkpOworCQkvKiBjYWxsIGRyYWluIGZ1bmN0aW9uIHVubG9ja2VkICovCisJCWNjX2V4ZWNf ZHJhaW5fZm4oY2MsIGRpcmVjdCkoCisJCSAgICBjY19leGVjX2RyYWluX2FyZyhjYywgZGlyZWN0 KSk7CiAJCUNDX0xPQ0soY2MpOwotCX0gZWxzZSBpZiAoY2NfY2NlX21pZ3JhdGluZyhjYywgZGly ZWN0KSkgewotCQlLQVNTRVJUKChjX2lmbGFncyAmIENBTExPVVRfTE9DQUxfQUxMT0MpID09IDAs Ci0JCSAgICAoIk1pZ3JhdGluZyBsZWdhY3kgY2FsbG91dCAlcCIsIGMpKTsKLSNpZmRlZiBTTVAK LQkJLyoKLQkJICogSWYgdGhlIGNhbGxvdXQgd2FzIHNjaGVkdWxlZCBmb3IKLQkJICogbWlncmF0 aW9uIGp1c3QgcGVyZm9ybSBpdCBub3cuCi0JCSAqLwotCQluZXdfY3B1ID0gY2NfbWlncmF0aW9u X2NwdShjYywgZGlyZWN0KTsKLQkJbmV3X3RpbWUgPSBjY19taWdyYXRpb25fdGltZShjYywgZGly ZWN0KTsKLQkJbmV3X3ByZWMgPSBjY19taWdyYXRpb25fcHJlYyhjYywgZGlyZWN0KTsKLQkJbmV3 X2Z1bmMgPSBjY19taWdyYXRpb25fZnVuYyhjYywgZGlyZWN0KTsKLQkJbmV3X2FyZyA9IGNjX21p Z3JhdGlvbl9hcmcoY2MsIGRpcmVjdCk7Ci0JCWNjX2NjZV9jbGVhbnVwKGNjLCBkaXJlY3QpOwot Ci0JCS8qCi0JCSAqIEl0IHNob3VsZCBiZSBhc3NlcnQgaGVyZSB0aGF0IHRoZSBjYWxsb3V0IGlz IG5vdCBkZXN0cm95ZWQKLQkJICogYnV0IHRoYXQgaXMgbm90IGVhc3kuCi0JCSAqCi0JCSAqIEFz IGZpcnN0IHRoaW5nLCBoYW5kbGUgZGVmZXJyZWQgY2FsbG91dCBzdG9wcy4KLQkJICovCi0JCWlm ICghY2FsbG91dF9taWdyYXRpbmcoYykpIHsKLQkJCUNUUjMoS1RSX0NBTExPVVQsCi0JCQkgICAg ICJkZWZlcnJlZCBjYW5jZWxsZWQgJXAgZnVuYyAlcCBhcmcgJXAiLAotCQkJICAgICBjLCBuZXdf ZnVuYywgbmV3X2FyZyk7Ci0JCQljYWxsb3V0X2NjX2RlbChjLCBjYyk7Ci0JCQlyZXR1cm47CisJ fSBlbHNlIGlmIChjX2ZsYWdzICYgQ0FMTE9VVF9MT0NBTF9BTExPQykgeworCQkvKiByZXR1cm4g Y2FsbG91dCBiYWNrIHRvIGZyZWVsaXN0ICovCisJCWNhbGxvdXRfY2NfZGVsKGMsIGNjKTsKKwl9 IGVsc2UgaWYgKGNjX2V4ZWNfcmVzdGFydChjYywgZGlyZWN0KSkgeworCQlzdHJ1Y3QgY2FsbG91 dF9jcHUgKm5ld19jYzsKKwkJLyogW3JlLV1zY2hlZHVsZSBjYWxsb3V0LCBpZiBhbnkgKi8KKwkJ bmV3X2NjID0gY2FsbG91dF9jY19hZGRfbG9ja2VkKGMsIGNjLAorCQkgICAgJmNjX2V4ZWNfcmVz dGFydF9hcmdzKGNjLCBkaXJlY3QpKTsKKwkJaWYgKG5ld19jYyAhPSBjYykgeworCQkJLyogc3dp dGNoIGxvY2tzIGJhY2sgYWdhaW4gKi8KKwkJCUNDX1VOTE9DSyhuZXdfY2MpOworCQkJQ0NfTE9D SyhjYyk7CiAJCX0KLQkJYy0+Y19pZmxhZ3MgJj0gfkNBTExPVVRfREZSTUlHUkFUSU9OOwotCi0J CW5ld19jYyA9IGNhbGxvdXRfY3B1X3N3aXRjaChjLCBjYywgbmV3X2NwdSk7Ci0JCWZsYWdzID0g KGRpcmVjdCkgPyBDX0RJUkVDVF9FWEVDIDogMDsKLQkJY2FsbG91dF9jY19hZGQoYywgbmV3X2Nj LCBuZXdfdGltZSwgbmV3X3ByZWMsIG5ld19mdW5jLAotCQkgICAgbmV3X2FyZywgbmV3X2NwdSwg ZmxhZ3MpOwotCQlDQ19VTkxPQ0sobmV3X2NjKTsKLQkJQ0NfTE9DSyhjYyk7Ci0jZWxzZQotCQlw YW5pYygibWlncmF0aW9uIHNob3VsZCBub3QgaGFwcGVuIik7Ci0jZW5kaWYKIAl9Ci0JLyoKLQkg KiBJZiB0aGUgY3VycmVudCBjYWxsb3V0IGlzIGxvY2FsbHkgYWxsb2NhdGVkIChmcm9tCi0JICog dGltZW91dCg5KSkgdGhlbiBwdXQgaXQgb24gdGhlIGZyZWVsaXN0LgotCSAqCi0JICogTm90ZTog d2UgbmVlZCB0byBjaGVjayB0aGUgY2FjaGVkIGNvcHkgb2YgY19pZmxhZ3MgYmVjYXVzZQotCSAq IGlmIGl0IHdhcyBub3QgbG9jYWwsIHRoZW4gaXQncyBub3Qgc2FmZSB0byBkZXJlZiB0aGUKLQkg KiBjYWxsb3V0IHBvaW50ZXIuCi0JICovCi0JS0FTU0VSVCgoY19pZmxhZ3MgJiBDQUxMT1VUX0xP Q0FMX0FMTE9DKSA9PSAwIHx8Ci0JICAgIGMtPmNfaWZsYWdzID09IENBTExPVVRfTE9DQUxfQUxM T0MsCi0JICAgICgiY29ycnVwdGVkIGNhbGxvdXQiKSk7Ci0JaWYgKGNfaWZsYWdzICYgQ0FMTE9V VF9MT0NBTF9BTExPQykKLQkJY2FsbG91dF9jY19kZWwoYywgY2MpOwogfQogCiAvKgpAQCAtODQw LDI4ICs5MjIsMTggQEAKIHsKIAlzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjOwogCXN0cnVjdCBjYWxs b3V0ICpjOwotI2lmZGVmIENBTExPVVRfUFJPRklMSU5HCi0JaW50IGRlcHRoID0gMCwgZ2NhbGxz ID0gMCwgbG9ja2NhbGxzID0gMCwgbXBjYWxscyA9IDA7Ci0jZW5kaWYKIAogCWNjID0gKHN0cnVj dCBjYWxsb3V0X2NwdSAqKWFyZzsKIAlDQ19MT0NLKGNjKTsKLQl3aGlsZSAoKGMgPSBUQUlMUV9G SVJTVCgmY2MtPmNjX2V4cGlyZXEpKSAhPSBOVUxMKSB7Ci0JCVRBSUxRX1JFTU9WRSgmY2MtPmNj X2V4cGlyZXEsIGMsIGNfbGlua3MudHFlKTsKLQkJc29mdGNsb2NrX2NhbGxfY2MoYywgY2MsCiAj aWZkZWYgQ0FMTE9VVF9QUk9GSUxJTkcKLQkJICAgICZtcGNhbGxzLCAmbG9ja2NhbGxzLCAmZ2Nh bGxzLAotI2VuZGlmCi0JCSAgICAwKTsKLSNpZmRlZiBDQUxMT1VUX1BST0ZJTElORwotCQkrK2Rl cHRoOworCWNhbGxvdXRfY2xlYXJfc3RhdHMoY2MsIDApOwogI2VuZGlmCisJd2hpbGUgKChjID0g VEFJTFFfRklSU1QoJmNjLT5jY19leHBpcmVxKSkgIT0gTlVMTCkgeworCQlUQUlMUV9SRU1PVkUo JmNjLT5jY19leHBpcmVxLCBjLCBjX2xpbmtzLnRxZSk7CisJCXNvZnRjbG9ja19jYWxsX2NjKGMs IGNjLCAwKTsKIAl9CiAjaWZkZWYgQ0FMTE9VVF9QUk9GSUxJTkcKLQlhdmdfZGVwdGggKz0gKGRl cHRoICogMTAwMCAtIGF2Z19kZXB0aCkgPj4gODsKLQlhdmdfbXBjYWxscyArPSAobXBjYWxscyAq IDEwMDAgLSBhdmdfbXBjYWxscykgPj4gODsKLQlhdmdfbG9ja2NhbGxzICs9IChsb2NrY2FsbHMg KiAxMDAwIC0gYXZnX2xvY2tjYWxscykgPj4gODsKLQlhdmdfZ2NhbGxzICs9IChnY2FsbHMgKiAx MDAwIC0gYXZnX2djYWxscykgPj4gODsKKwljYWxsb3V0X3VwZGF0ZV9zdGF0cyhjYywgMCk7CiAj ZW5kaWYKIAlDQ19VTkxPQ0soY2MpOwogfQpAQCAtODk3LDE3ICs5NjksMTkgQEAKIAkJLyogWFhY IEF0dGVtcHQgdG8gbWFsbG9jIGZpcnN0ICovCiAJCXBhbmljKCJ0aW1lb3V0IHRhYmxlIGZ1bGwi KTsKIAlTTElTVF9SRU1PVkVfSEVBRCgmY2MtPmNjX2NhbGxmcmVlLCBjX2xpbmtzLnNsZSk7Ci0J Y2FsbG91dF9yZXNldChuZXcsIHRvX3RpY2tzLCBmdG4sIGFyZyk7CiAJaGFuZGxlLmNhbGxvdXQg PSBuZXc7CiAJQ0NfVU5MT0NLKGNjKTsKIAorCWNhbGxvdXRfcmVzZXQobmV3LCB0b190aWNrcywg ZnRuLCBhcmcpOworCiAJcmV0dXJuIChoYW5kbGUpOwogfQogCiB2b2lkCiB1bnRpbWVvdXQodGlt ZW91dF90ICpmdG4sIHZvaWQgKmFyZywgc3RydWN0IGNhbGxvdXRfaGFuZGxlIGhhbmRsZSkKIHsK IAlzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjOworCWJvb2wgbWF0Y2g7CiAKIAkvKgogCSAqIENoZWNr IGZvciBhIGhhbmRsZSB0aGF0IHdhcyBpbml0aWFsaXplZApAQCAtOTE4LDE3ICs5OTIsMTMxIEBA CiAJCXJldHVybjsKIAogCWNjID0gY2FsbG91dF9sb2NrKGhhbmRsZS5jYWxsb3V0KTsKLQlpZiAo aGFuZGxlLmNhbGxvdXQtPmNfZnVuYyA9PSBmdG4gJiYgaGFuZGxlLmNhbGxvdXQtPmNfYXJnID09 IGFyZykKLQkJY2FsbG91dF9zdG9wKGhhbmRsZS5jYWxsb3V0KTsKKwltYXRjaCA9IChoYW5kbGUu Y2FsbG91dC0+Y19mdW5jID09IGZ0biAmJiBoYW5kbGUuY2FsbG91dC0+Y19hcmcgPT0gYXJnKTsK IAlDQ19VTkxPQ0soY2MpOworCisJaWYgKG1hdGNoKQorCQljYWxsb3V0X3N0b3AoaGFuZGxlLmNh bGxvdXQpOwogfQogCiB2b2lkCiBjYWxsb3V0X2hhbmRsZV9pbml0KHN0cnVjdCBjYWxsb3V0X2hh bmRsZSAqaGFuZGxlKQogewogCWhhbmRsZS0+Y2FsbG91dCA9IE5VTEw7CiB9CiAKK3N0YXRpYyBp bnQKK2NhbGxvdXRfcmVzdGFydF9hc3luYyhzdHJ1Y3QgY2FsbG91dCAqYywgc3RydWN0IGNhbGxv dXRfYXJncyAqY29hLAorICAgIGNhbGxvdXRfZnVuY190ICpkcmFpbl9mbiwgdm9pZCAqZHJhaW5f YXJnKQoreworCXN0cnVjdCBjYWxsb3V0X2NwdSAqY2M7CisJaW50IGNhbmNlbGxlZDsKKwlpbnQg ZGlyZWN0OworCisJY2MgPSBjYWxsb3V0X2xvY2soYyk7CisKKwkvKiBGaWd1cmUgb3V0IGlmIHRo ZSBjYWxsb3V0IGlzIGRpcmVjdCBvciBub3QgKi8KKwlkaXJlY3QgPSAoKGMtPmNfZmxhZ3MgJiBD QUxMT1VUX0RJUkVDVCkgIT0gMCk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBjYWxsYmFjayBp cyBjdXJyZW50bHkgc2NoZWR1bGVkIGZvcgorCSAqIGNvbXBsZXRpb246CisJICovCisJaWYgKGNj X2V4ZWNfY3VycihjYywgZGlyZWN0KSA9PSBjKSB7CisJCS8qCisJCSAqIFRyeSB0byBwcmV2ZW50 IHRoZSBjYWxsYmFjayBmcm9tIHJ1bm5pbmcgYnkgc2V0dGluZworCQkgKiB0aGUgImNjX2NhbmNl bCIgdmFyaWFibGUgdG8gInRydWUiLiBBbHNvIGNoZWNrIGlmCisJCSAqIHRoZSBjYWxsb3V0IHdh cyBwcmV2aW91c2x5IHN1YmplY3QgdG8gYSBkZWZlcnJlZAorCQkgKiBjYWxsb3V0IHJlc3RhcnQ6 CisJCSAqLworCQlpZiAoY2NfZXhlY19jYW5jZWwoY2MsIGRpcmVjdCkgPT0gZmFsc2UgfHwKKwkJ ICAgIChjLT5jX2ZsYWdzICYgQ0FMTE9VVF9ERUZSRVNUQVJUKSAhPSAwKSB7CisJCQljY19leGVj X2NhbmNlbChjYywgZGlyZWN0KSA9IHRydWU7CisJCQljYW5jZWxsZWQgPSBDQUxMT1VUX1JFVF9D QU5DRUxMRUQ7CisJCX0gZWxzZSB7CisJCQljYW5jZWxsZWQgPSBDQUxMT1VUX1JFVF9OT1JNQUw7 CisJCX0KKworCQkvKgorCQkgKiBQcmV2ZW50IGNhbGxiYWNrIHJlc3RhcnQgaWYgImNhbGxvdXRf ZHJhaW5feHh4KCkiCisJCSAqIGlzIGJlaW5nIGNhbGxlZCBvciB3ZSBhcmUgc3RvcHBpbmcgdGhl IGNhbGxvdXQgb3IKKwkJICogdGhlIGNhbGxiYWNrIHdhcyBwcmVhbGxvY2F0ZWQgYnkgdXM6CisJ CSAqLworCQlpZiAoY2NfZXhlY19kcmFpbl9mbihjYywgZGlyZWN0KSAhPSBOVUxMIHx8CisJCSAg ICBjb2EgPT0gTlVMTCB8fCAoYy0+Y19mbGFncyAmIENBTExPVVRfTE9DQUxfQUxMT0MpICE9IDAp IHsKKwkJCUNUUjQoS1RSX0NBTExPVVQsICIlcyAlcCBmdW5jICVwIGFyZyAlcCIsCisJCQkgICAg Y2FuY2VsbGVkID8gImNhbmNlbGxlZCBhbmQgZHJhaW5pbmciIDogImRyYWluaW5nIiwKKwkJCSAg ICBjLCBjLT5jX2Z1bmMsIGMtPmNfYXJnKTsKKworCQkJLyogY2xlYXIgb2xkIGZsYWdzLCBpZiBh bnkgKi8KKwkJCWMtPmNfZmxhZ3MgJj0gfihDQUxMT1VUX0FDVElWRSB8IENBTExPVVRfUEVORElO RyB8CisJCQkgICAgQ0FMTE9VVF9ERUZSRVNUQVJUIHwgQ0FMTE9VVF9QUk9DRVNTRUQpOworCisJ CQkvKiBjbGVhciByZXN0YXJ0IGZsYWcsIGlmIGFueSAqLworCQkJY2NfZXhlY19yZXN0YXJ0KGNj LCBkaXJlY3QpID0gZmFsc2U7CisKKwkJCS8qIHNldCBkcmFpbiBmdW5jdGlvbiwgaWYgYW55ICov CisJCQlpZiAoZHJhaW5fZm4gIT0gTlVMTCkgeworCQkJCWNjX2V4ZWNfZHJhaW5fZm4oY2MsIGRp cmVjdCkgPSBkcmFpbl9mbjsKKwkJCQljY19leGVjX2RyYWluX2FyZyhjYywgZGlyZWN0KSA9IGRy YWluX2FyZzsKKwkJCQljYW5jZWxsZWQgfD0gQ0FMTE9VVF9SRVRfRFJBSU5JTkc7CisJCQl9CisJ CX0gZWxzZSB7CisJCQlDVFI0KEtUUl9DQUxMT1VULCAiJXMgJXAgZnVuYyAlcCBhcmcgJXAiLAor CQkJICAgIGNhbmNlbGxlZCA/ICJjYW5jZWxsZWQgYW5kIHJlc3RhcnRpbmciIDogInJlc3RhcnRp bmciLAorCQkJICAgIGMsIGMtPmNfZnVuYywgYy0+Y19hcmcpOworCisJCQkvKiBnZXQgdXMgYmFj ayBpbnRvIHRoZSBnYW1lICovCisJCQljLT5jX2ZsYWdzIHw9IChDQUxMT1VUX0FDVElWRSB8IENB TExPVVRfUEVORElORyB8CisJCQkgICAgQ0FMTE9VVF9ERUZSRVNUQVJUKTsKKwkJCWMtPmNfZmxh Z3MgJj0gfkNBTExPVVRfUFJPQ0VTU0VEOworCisJCQkvKiBlbmFibGUgZGVmZXJyZWQgcmVzdGFy dCAqLworCQkJY2NfZXhlY19yZXN0YXJ0KGNjLCBkaXJlY3QpID0gdHJ1ZTsKKworCQkJLyogc3Rv cmUgYXJndW1lbnRzIGZvciB0aGUgZGVmZXJyZWQgcmVzdGFydCwgaWYgYW55ICovCisJCQljY19l eGVjX3Jlc3RhcnRfYXJncyhjYywgZGlyZWN0KSA9ICpjb2E7CisJCX0KKwl9IGVsc2UgeworCQkv KiBzdG9wIGNhbGxvdXQgKi8KKwkJaWYgKGMtPmNfZmxhZ3MgJiBDQUxMT1VUX1BFTkRJTkcpIHsK KwkJCS8qCisJCQkgKiBUaGUgY2FsbGJhY2sgaGFzIG5vdCB5ZXQgYmVlbiBleGVjdXRlZCwgYW5k CisJCQkgKiB3ZSBzaW1wbHkganVzdCBuZWVkIHRvIHVubGluayBpdDoKKwkJCSAqLworCQkJaWYg KChjLT5jX2ZsYWdzICYgQ0FMTE9VVF9QUk9DRVNTRUQpID09IDApIHsKKwkJCQlMSVNUX1JFTU9W RShjLCBjX2xpbmtzLmxlKTsKKwkJCX0gZWxzZSB7CisJCQkJVEFJTFFfUkVNT1ZFKCZjYy0+Y2Nf ZXhwaXJlcSwgYywgY19saW5rcy50cWUpOworCQkJfQorCQkJY2FuY2VsbGVkID0gQ0FMTE9VVF9S RVRfQ0FOQ0VMTEVEOworCQl9IGVsc2UgeworCQkJY2FuY2VsbGVkID0gQ0FMTE9VVF9SRVRfTk9S TUFMOworCQl9CisKKwkJQ1RSNChLVFJfQ0FMTE9VVCwgIiVzICVwIGZ1bmMgJXAgYXJnICVwIiwK KwkJICAgIGNhbmNlbGxlZCA/ICJyZXNjaGVkdWxlZCIgOiAic2NoZWR1bGVkIiwKKwkJICAgIGMs IGMtPmNfZnVuYywgYy0+Y19hcmcpOworCisJCS8qIFtyZS1dc2NoZWR1bGUgY2FsbG91dCwgaWYg YW55ICovCisJCWlmIChjb2EgIT0gTlVMTCkgeworCQkJY2MgPSBjYWxsb3V0X2NjX2FkZF9sb2Nr ZWQoYywgY2MsIGNvYSk7CisJCX0gZWxzZSB7CisJCQkvKiBjbGVhciBvbGQgZmxhZ3MsIGlmIGFu eSAqLworCQkJYy0+Y19mbGFncyAmPSB+KENBTExPVVRfQUNUSVZFIHwgQ0FMTE9VVF9QRU5ESU5H IHwKKwkJCSAgICBDQUxMT1VUX0RFRlJFU1RBUlQgfCBDQUxMT1VUX1BST0NFU1NFRCk7CisKKwkJ CS8qIHJldHVybiBjYWxsYmFjayB0byBwcmUtYWxsb2NhdGVkIGxpc3QsIGlmIGFueSAqLworCQkJ aWYgKChjLT5jX2ZsYWdzICYgQ0FMTE9VVF9MT0NBTF9BTExPQykgJiYKKwkJCSAgICBjYW5jZWxs ZWQgIT0gQ0FMTE9VVF9SRVRfTk9STUFMKSB7CisJCQkJY2FsbG91dF9jY19kZWwoYywgY2MpOwor CQkJfQorCQl9CisJfQorCUNDX1VOTE9DSyhjYyk7CisJcmV0dXJuIChjYW5jZWxsZWQpOworfQor CiAvKgogICogTmV3IGludGVyZmFjZTsgY2xpZW50cyBhbGxvY2F0ZSB0aGVpciBvd24gY2FsbG91 dCBzdHJ1Y3R1cmVzLgogICoKQEAgLTk0NywzMyArMTEzNSwzMiBAQAogICovCiBpbnQKIGNhbGxv dXRfcmVzZXRfc2J0X29uKHN0cnVjdCBjYWxsb3V0ICpjLCBzYmludGltZV90IHNidCwgc2JpbnRp bWVfdCBwcmVjaXNpb24sCi0gICAgdm9pZCAoKmZ0bikodm9pZCAqKSwgdm9pZCAqYXJnLCBpbnQg Y3B1LCBpbnQgZmxhZ3MpCisgICAgY2FsbG91dF9mdW5jX3QgKmZ0biwgdm9pZCAqYXJnLCBpbnQg Y3B1LCBpbnQgZmxhZ3MpCiB7Ci0Jc2JpbnRpbWVfdCB0b19zYnQsIHByOwotCXN0cnVjdCBjYWxs b3V0X2NwdSAqY2M7Ci0JaW50IGNhbmNlbGxlZCwgZGlyZWN0OwotCWludCBpZ25vcmVfY3B1PTA7 CisJc3RydWN0IGNhbGxvdXRfYXJncyBjb2E7CiAKLQljYW5jZWxsZWQgPSAwOwotCWlmIChjcHUg PT0gLTEpIHsKLQkJaWdub3JlX2NwdSA9IDE7Ci0JfSBlbHNlIGlmICgoY3B1ID49IE1BWENQVSkg fHwKLQkJICAgKChDQ19DUFUoY3B1KSktPmNjX2luaXRlZCA9PSAwKSkgewotCQkvKiBJbnZhbGlk IENQVSBzcGVjICovCi0JCXBhbmljKCJJbnZhbGlkIENQVSBpbiBjYWxsb3V0ICVkIiwgY3B1KTsK LQl9Ci0JaWYgKGZsYWdzICYgQ19BQlNPTFVURSkgewotCQl0b19zYnQgPSBzYnQ7CisJLyogc3Rv cmUgYXJndW1lbnRzIGZvciBjYWxsb3V0IGFkZCBmdW5jdGlvbiAqLworCWNvYS5mdW5jID0gZnRu OworCWNvYS5hcmcgPSBhcmc7CisJY29hLnByZWNpc2lvbiA9IHByZWNpc2lvbjsKKwljb2EuZmxh Z3MgPSBmbGFnczsKKwljb2EuY3B1ID0gY3B1OworCisJLyogY29tcHV0ZSB0aGUgcmVzdCBvZiB0 aGUgYXJndW1lbnRzIG5lZWRlZCAqLworCWlmIChjb2EuZmxhZ3MgJiBDX0FCU09MVVRFKSB7CisJ CWNvYS50aW1lID0gc2J0OwogCX0gZWxzZSB7Ci0JCWlmICgoZmxhZ3MgJiBDX0hBUkRDTE9DSykg JiYgKHNidCA8IHRpY2tfc2J0KSkKKwkJc2JpbnRpbWVfdCBwcjsKKworCQlpZiAoKGNvYS5mbGFn cyAmIENfSEFSRENMT0NLKSAmJiAoc2J0IDwgdGlja19zYnQpKQogCQkJc2J0ID0gdGlja19zYnQ7 Ci0JCWlmICgoZmxhZ3MgJiBDX0hBUkRDTE9DSykgfHwKKwkJaWYgKChjb2EuZmxhZ3MgJiBDX0hB UkRDTE9DSykgfHwKICNpZmRlZiBOT19FVkVOVFRJTUVSUwogCQkgICAgc2J0ID49IHNidF90aW1l dGhyZXNob2xkKSB7Ci0JCQl0b19zYnQgPSBnZXRzYmludXB0aW1lKCk7CisJCQljb2EudGltZSA9 IGdldHNiaW51cHRpbWUoKTsKIAogCQkJLyogQWRkIHNhZmV0eSBiZWx0IGZvciB0aGUgY2FzZSBv ZiBoeiA+IDEwMDAuICovCi0JCQl0b19zYnQgKz0gdGNfdGlja19zYnQgLSB0aWNrX3NidDsKKwkJ CWNvYS50aW1lICs9IHRjX3RpY2tfc2J0IC0gdGlja19zYnQ7CiAjZWxzZQogCQkgICAgc2J0ID49 IHNidF90aWNrdGhyZXNob2xkKSB7CiAJCQkvKgpAQCAtOTgzLDE1MCArMTE3MCwyOSBAQAogCQkJ ICogYWN0aXZlIG9uZXMuCiAJCQkgKi8KICNpZmRlZiBfX0xQNjRfXwotCQkJdG9fc2J0ID0gRFBD UFVfR0VUKGhhcmRjbG9ja3RpbWUpOworCQkJY29hLnRpbWUgPSBEUENQVV9HRVQoaGFyZGNsb2Nr dGltZSk7CiAjZWxzZQogCQkJc3BpbmxvY2tfZW50ZXIoKTsKLQkJCXRvX3NidCA9IERQQ1BVX0dF VChoYXJkY2xvY2t0aW1lKTsKKwkJCWNvYS50aW1lID0gRFBDUFVfR0VUKGhhcmRjbG9ja3RpbWUp OwogCQkJc3BpbmxvY2tfZXhpdCgpOwogI2VuZGlmCiAjZW5kaWYKLQkJCWlmICgoZmxhZ3MgJiBD X0hBUkRDTE9DSykgPT0gMCkKLQkJCQl0b19zYnQgKz0gdGlja19zYnQ7CisJCQlpZiAoKGNvYS5m bGFncyAmIENfSEFSRENMT0NLKSA9PSAwKQorCQkJCWNvYS50aW1lICs9IHRpY2tfc2J0OwogCQl9 IGVsc2UKLQkJCXRvX3NidCA9IHNiaW51cHRpbWUoKTsKLQkJaWYgKFNCVF9NQVggLSB0b19zYnQg PCBzYnQpCi0JCQl0b19zYnQgPSBTQlRfTUFYOworCQkJY29hLnRpbWUgPSBzYmludXB0aW1lKCk7 CisJCWlmIChTQlRfTUFYIC0gY29hLnRpbWUgPCBzYnQpCisJCQljb2EudGltZSA9IFNCVF9NQVg7 CiAJCWVsc2UKLQkJCXRvX3NidCArPSBzYnQ7Ci0JCXByID0gKChDX1BSRUxHRVQoZmxhZ3MpIDwg MCkgPyBzYnQgPj4gdGNfcHJlY2V4cCA6Ci0JCSAgICBzYnQgPj4gQ19QUkVMR0VUKGZsYWdzKSk7 Ci0JCWlmIChwciA+IHByZWNpc2lvbikKLQkJCXByZWNpc2lvbiA9IHByOwotCX0KLQkvKiAKLQkg KiBUaGlzIGZsYWcgdXNlZCB0byBiZSBhZGRlZCBieSBjYWxsb3V0X2NjX2FkZCwgYnV0IHRoZQot CSAqIGZpcnN0IHRpbWUgeW91IGNhbGwgdGhpcyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGUKLQkg KiB3cm9uZyBkaXJlY3QgZmxhZyBpZiB3ZSBkb24ndCBkbyBpdCBiZWZvcmUgd2UgYWRkLgotCSAq LwotCWlmIChmbGFncyAmIENfRElSRUNUX0VYRUMpIHsKLQkJZGlyZWN0ID0gMTsKLQl9IGVsc2Ug ewotCQlkaXJlY3QgPSAwOwotCX0KLQlLQVNTRVJUKCFkaXJlY3QgfHwgYy0+Y19sb2NrID09IE5V TEwsCi0JICAgICgiJXM6IGRpcmVjdCBjYWxsb3V0ICVwIGhhcyBsb2NrIiwgX19mdW5jX18sIGMp KTsKLQljYyA9IGNhbGxvdXRfbG9jayhjKTsKLQkvKgotCSAqIERvbid0IGFsbG93IG1pZ3JhdGlv biBvZiBwcmUtYWxsb2NhdGVkIGNhbGxvdXRzIGxlc3QgdGhleQotCSAqIGJlY29tZSB1bmJhbGFu Y2VkIG9yIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciBkb2VzCi0JICogbm90IGNhcmUu IAotCSAqLwotCWlmICgoYy0+Y19pZmxhZ3MgJiBDQUxMT1VUX0xPQ0FMX0FMTE9DKSB8fAotCSAg ICBpZ25vcmVfY3B1KSB7Ci0JCWNwdSA9IGMtPmNfY3B1OworCQkJY29hLnRpbWUgKz0gc2J0Owor CQlwciA9ICgoQ19QUkVMR0VUKGNvYS5mbGFncykgPCAwKSA/IHNidCA+PiB0Y19wcmVjZXhwIDoK KwkJICAgIHNidCA+PiBDX1BSRUxHRVQoY29hLmZsYWdzKSk7CisJCWlmIChwciA+IGNvYS5wcmVj aXNpb24pCisJCQljb2EucHJlY2lzaW9uID0gcHI7CiAJfQogCi0JaWYgKGNjX2V4ZWNfY3Vycihj YywgZGlyZWN0KSA9PSBjKSB7Ci0JCS8qCi0JCSAqIFdlJ3JlIGJlaW5nIGFza2VkIHRvIHJlc2No ZWR1bGUgYSBjYWxsb3V0IHdoaWNoIGlzCi0JCSAqIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4gIElm IHRoZXJlIGlzIGEgbG9jayB0aGVuIHdlCi0JCSAqIGNhbiBjYW5jZWwgdGhlIGNhbGxvdXQgaWYg aXQgaGFzIG5vdCByZWFsbHkgc3RhcnRlZC4KLQkJICovCi0JCWlmIChjLT5jX2xvY2sgIT0gTlVM TCAmJiBjY19leGVjX2NhbmNlbChjYywgZGlyZWN0KSkKLQkJCWNhbmNlbGxlZCA9IGNjX2V4ZWNf Y2FuY2VsKGNjLCBkaXJlY3QpID0gdHJ1ZTsKLQkJaWYgKGNjX2V4ZWNfd2FpdGluZyhjYywgZGly ZWN0KSkgewotCQkJLyoKLQkJCSAqIFNvbWVvbmUgaGFzIGNhbGxlZCBjYWxsb3V0X2RyYWluIHRv IGtpbGwgdGhpcwotCQkJICogY2FsbG91dC4gIERvbid0IHJlc2NoZWR1bGUuCi0JCQkgKi8KLQkJ CUNUUjQoS1RSX0NBTExPVVQsICIlcyAlcCBmdW5jICVwIGFyZyAlcCIsCi0JCQkgICAgY2FuY2Vs bGVkID8gImNhbmNlbGxlZCIgOiAiZmFpbGVkIHRvIGNhbmNlbCIsCi0JCQkgICAgYywgYy0+Y19m dW5jLCBjLT5jX2FyZyk7Ci0JCQlDQ19VTkxPQ0soY2MpOwotCQkJcmV0dXJuIChjYW5jZWxsZWQp OwotCQl9Ci0jaWZkZWYgU01QCi0JCWlmIChjYWxsb3V0X21pZ3JhdGluZyhjKSkgewotCQkJLyog Ci0JCQkgKiBUaGlzIG9ubHkgb2NjdXJzIHdoZW4gYSBzZWNvbmQgY2FsbG91dF9yZXNldF9zYnRf b24KLQkJCSAqIGlzIG1hZGUgYWZ0ZXIgYSBwcmV2aW91cyBvbmUgbW92ZWQgaXQgaW50bwotCQkJ ICogZGVmZXJyZWQgbWlncmF0aW9uIChiZWxvdykuIE5vdGUgd2UgZG8gKm5vdCogY2hhbmdlCi0J CQkgKiB0aGUgcHJldl9jcHUgZXZlbiB0aG91Z2ggdGhlIHByZXZpb3VzIHRhcmdldCBtYXkKLQkJ CSAqIGJlIGRpZmZlcmVudC4KLQkJCSAqLwotCQkJY2NfbWlncmF0aW9uX2NwdShjYywgZGlyZWN0 KSA9IGNwdTsKLQkJCWNjX21pZ3JhdGlvbl90aW1lKGNjLCBkaXJlY3QpID0gdG9fc2J0OwotCQkJ Y2NfbWlncmF0aW9uX3ByZWMoY2MsIGRpcmVjdCkgPSBwcmVjaXNpb247Ci0JCQljY19taWdyYXRp b25fZnVuYyhjYywgZGlyZWN0KSA9IGZ0bjsKLQkJCWNjX21pZ3JhdGlvbl9hcmcoY2MsIGRpcmVj dCkgPSBhcmc7Ci0JCQljYW5jZWxsZWQgPSAxOwotCQkJQ0NfVU5MT0NLKGNjKTsKLQkJCXJldHVy biAoY2FuY2VsbGVkKTsKLQkJfQotI2VuZGlmCi0JfQotCWlmIChjLT5jX2lmbGFncyAmIENBTExP VVRfUEVORElORykgewotCQlpZiAoKGMtPmNfaWZsYWdzICYgQ0FMTE9VVF9QUk9DRVNTRUQpID09 IDApIHsKLQkJCWlmIChjY19leGVjX25leHQoY2MpID09IGMpCi0JCQkJY2NfZXhlY19uZXh0KGNj KSA9IExJU1RfTkVYVChjLCBjX2xpbmtzLmxlKTsKLQkJCUxJU1RfUkVNT1ZFKGMsIGNfbGlua3Mu bGUpOwotCQl9IGVsc2UgewotCQkJVEFJTFFfUkVNT1ZFKCZjYy0+Y2NfZXhwaXJlcSwgYywgY19s aW5rcy50cWUpOwotCQl9Ci0JCWNhbmNlbGxlZCA9IDE7Ci0JCWMtPmNfaWZsYWdzICY9IH4gQ0FM TE9VVF9QRU5ESU5HOwotCQljLT5jX2ZsYWdzICY9IH4gQ0FMTE9VVF9BQ1RJVkU7Ci0JfQotCi0j aWZkZWYgU01QCi0JLyoKLQkgKiBJZiB0aGUgY2FsbG91dCBtdXN0IG1pZ3JhdGUgdHJ5IHRvIHBl cmZvcm0gaXQgaW1tZWRpYXRlbHkuCi0JICogSWYgdGhlIGNhbGxvdXQgaXMgY3VycmVudGx5IHJ1 bm5pbmcsIGp1c3QgZGVmZXIgdGhlIG1pZ3JhdGlvbgotCSAqIHRvIGEgbW9yZSBhcHByb3ByaWF0 ZSBtb21lbnQuCi0JICovCi0JaWYgKGMtPmNfY3B1ICE9IGNwdSkgewotCQlpZiAoY2NfZXhlY19j dXJyKGNjLCBkaXJlY3QpID09IGMpIHsKLQkJCS8qIAotCQkJICogUGVuZGluZyB3aWxsIGhhdmUg YmVlbiByZW1vdmVkIHNpbmNlIHdlIGFyZQotCQkJICogYWN0dWFsbHkgZXhlY3V0aW5nIHRoZSBj YWxsb3V0IG9uIGFub3RoZXIKLQkJCSAqIENQVS4gVGhhdCBjYWxsb3V0IHNob3VsZCBiZSB3YWl0 aW5nIG9uIHRoZQotCQkJICogbG9jayB0aGUgY2FsbGVyIGhvbGRzLiBJZiB3ZSBzZXQgYm90aAot CQkJICogYWN0aXZlL2FuZC9wZW5kaW5nIGFmdGVyIHdlIHJldHVybiBhbmQgdGhlCi0JCQkgKiBs b2NrIG9uIHRoZSBleGVjdXRpbmcgY2FsbG91dCBwcm9jZWVkcywgaXQKLQkJCSAqIHdpbGwgdGhl biBzZWUgcGVuZGluZyBpcyB0cnVlIGFuZCByZXR1cm4uCi0JCQkgKiBBdCB0aGUgcmV0dXJuIGZy b20gdGhlIGFjdHVhbCBjYWxsb3V0IGV4ZWN1dGlvbgotCQkJICogdGhlIG1pZ3JhdGlvbiB3aWxs IG9jY3VyIGluIHNvZnRjbG9ja19jYWxsX2NjCi0JCQkgKiBhbmQgdGhpcyBuZXcgY2FsbG91dCB3 aWxsIGJlIHBsYWNlZCBvbiB0aGUgCi0JCQkgKiBuZXcgQ1BVIHZpYSBhIGNhbGwgdG8gY2FsbG91 dF9jcHVfc3dpdGNoKCkgd2hpY2gKLQkJCSAqIHdpbGwgZ2V0IHRoZSBsb2NrIG9uIHRoZSByaWdo dCBDUFUgZm9sbG93ZWQKLQkJCSAqIGJ5IGEgY2FsbCBjYWxsb3V0X2NjX2FkZCgpIHdoaWNoIHdp bGwgYWRkIGl0IHRoZXJlLgotCQkJICogKHNlZSBhYm92ZSBpbiBzb2Z0Y2xvY2tfY2FsbF9jYygp KS4KLQkJCSAqLwotCQkJY2NfbWlncmF0aW9uX2NwdShjYywgZGlyZWN0KSA9IGNwdTsKLQkJCWNj X21pZ3JhdGlvbl90aW1lKGNjLCBkaXJlY3QpID0gdG9fc2J0OwotCQkJY2NfbWlncmF0aW9uX3By ZWMoY2MsIGRpcmVjdCkgPSBwcmVjaXNpb247Ci0JCQljY19taWdyYXRpb25fZnVuYyhjYywgZGly ZWN0KSA9IGZ0bjsKLQkJCWNjX21pZ3JhdGlvbl9hcmcoY2MsIGRpcmVjdCkgPSBhcmc7Ci0JCQlj LT5jX2lmbGFncyB8PSAoQ0FMTE9VVF9ERlJNSUdSQVRJT04gfCBDQUxMT1VUX1BFTkRJTkcpOwot CQkJYy0+Y19mbGFncyB8PSBDQUxMT1VUX0FDVElWRTsKLQkJCUNUUjYoS1RSX0NBTExPVVQsCi0J CSAgICAibWlncmF0aW9uIG9mICVwIGZ1bmMgJXAgYXJnICVwIGluICVkLiUwOHggdG8gJXUgZGVm ZXJyZWQiLAotCQkJICAgIGMsIGMtPmNfZnVuYywgYy0+Y19hcmcsIChpbnQpKHRvX3NidCA+PiAz MiksCi0JCQkgICAgKHVfaW50KSh0b19zYnQgJiAweGZmZmZmZmZmKSwgY3B1KTsKLQkJCUNDX1VO TE9DSyhjYyk7Ci0JCQlyZXR1cm4gKGNhbmNlbGxlZCk7Ci0JCX0KLQkJY2MgPSBjYWxsb3V0X2Nw dV9zd2l0Y2goYywgY2MsIGNwdSk7Ci0JfQotI2VuZGlmCi0KLQljYWxsb3V0X2NjX2FkZChjLCBj YywgdG9fc2J0LCBwcmVjaXNpb24sIGZ0biwgYXJnLCBjcHUsIGZsYWdzKTsKLQlDVFI2KEtUUl9D QUxMT1VULCAiJXNzY2hlZHVsZWQgJXAgZnVuYyAlcCBhcmcgJXAgaW4gJWQuJTA4eCIsCi0JICAg IGNhbmNlbGxlZCA/ICJyZSIgOiAiIiwgYywgYy0+Y19mdW5jLCBjLT5jX2FyZywgKGludCkodG9f c2J0ID4+IDMyKSwKLQkgICAgKHVfaW50KSh0b19zYnQgJiAweGZmZmZmZmZmKSk7Ci0JQ0NfVU5M T0NLKGNjKTsKLQotCXJldHVybiAoY2FuY2VsbGVkKTsKKwkvKiBnZXQgY2FsbGJhY2sgc3RhcnRl ZCwgaWYgYW55ICovCisJcmV0dXJuIChjYWxsb3V0X3Jlc3RhcnRfYXN5bmMoYywgJmNvYSwgTlVM TCwgTlVMTCkpOwogfQogCiAvKgpAQCAtMTE0NSwyNzAgKzEyMTEsMTA2IEBACiB9CiAKIGludAot X2NhbGxvdXRfc3RvcF9zYWZlKHN0cnVjdCBjYWxsb3V0ICpjLCBpbnQgc2FmZSkKK2NhbGxvdXRf c3RvcChzdHJ1Y3QgY2FsbG91dCAqYykKIHsKLQlzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjLCAqb2xk X2NjOwotCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzczsKLQlpbnQgZGlyZWN0LCBzcV9sb2NrZWQs IHVzZV9sb2NrOwotCWludCBub3Rfb25fYV9saXN0OwotCi0JaWYgKHNhZmUpCi0JCVdJVE5FU1Nf V0FSTihXQVJOX0dJQU5UT0sgfCBXQVJOX1NMRUVQT0ssIGMtPmNfbG9jaywKLQkJICAgICJjYWxs aW5nICVzIiwgX19mdW5jX18pOworCS8qIGdldCBjYWxsYmFjayBzdG9wcGVkLCBpZiBhbnkgKi8K KwlyZXR1cm4gKGNhbGxvdXRfcmVzdGFydF9hc3luYyhjLCBOVUxMLCBOVUxMLCBOVUxMKSk7Cit9 CiAKLQkvKgotCSAqIFNvbWUgb2xkIHN1YnN5c3RlbXMgZG9uJ3QgaG9sZCBHaWFudCB3aGlsZSBy dW5uaW5nIGEgY2FsbG91dF9zdG9wKCksCi0JICogc28ganVzdCBkaXNjYXJkIHRoaXMgY2hlY2sg Zm9yIHRoZSBtb21lbnQuCi0JICovCi0JaWYgKCFzYWZlICYmIGMtPmNfbG9jayAhPSBOVUxMKSB7 Ci0JCWlmIChjLT5jX2xvY2sgPT0gJkdpYW50LmxvY2tfb2JqZWN0KQotCQkJdXNlX2xvY2sgPSBt dHhfb3duZWQoJkdpYW50KTsKLQkJZWxzZSB7Ci0JCQl1c2VfbG9jayA9IDE7Ci0JCQljbGFzcyA9 IExPQ0tfQ0xBU1MoYy0+Y19sb2NrKTsKLQkJCWNsYXNzLT5sY19hc3NlcnQoYy0+Y19sb2NrLCBM QV9YTE9DS0VEKTsKLQkJfQotCX0gZWxzZQotCQl1c2VfbG9jayA9IDA7Ci0JaWYgKGMtPmNfaWZs YWdzICYgQ0FMTE9VVF9ESVJFQ1QpIHsKLQkJZGlyZWN0ID0gMTsKLQl9IGVsc2UgewotCQlkaXJl Y3QgPSAwOwotCX0KLQlzcV9sb2NrZWQgPSAwOwotCW9sZF9jYyA9IE5VTEw7Ci1hZ2FpbjoKLQlj YyA9IGNhbGxvdXRfbG9jayhjKTsKK3N0YXRpYyB2b2lkCitjYWxsb3V0X2RyYWluX2Z1bmN0aW9u KHZvaWQgKmFyZykKK3sKKwl3YWtldXAoYXJnKTsKK30KIAotCWlmICgoYy0+Y19pZmxhZ3MgJiAo Q0FMTE9VVF9ERlJNSUdSQVRJT04gfCBDQUxMT1VUX1BFTkRJTkcpKSA9PQotCSAgICAoQ0FMTE9V VF9ERlJNSUdSQVRJT04gfCBDQUxMT1VUX1BFTkRJTkcpICYmCi0JICAgICgoYy0+Y19mbGFncyAm IENBTExPVVRfQUNUSVZFKSA9PSBDQUxMT1VUX0FDVElWRSkpIHsKLQkJLyoKLQkJICogU3BlY2lh bCBjYXNlIHdoZXJlIHRoaXMgc2xpcHBlZCBpbiB3aGlsZSB3ZQotCQkgKiB3ZXJlIG1pZ3JhdGlu ZyAqYXMqIHRoZSBjYWxsb3V0IGlzIGFib3V0IHRvCi0JCSAqIGV4ZWN1dGUuIFRoZSBjYWxsZXIg cHJvYmFibHkgaG9sZHMgdGhlIGxvY2sKLQkJICogdGhlIGNhbGxvdXQgd2FudHMuCi0JCSAqCi0J CSAqIEdldCByaWQgb2YgdGhlIG1pZ3JhdGlvbiBmaXJzdC4gVGhlbiBzZXQKLQkJICogdGhlIGZs YWcgdGhhdCB0ZWxscyB0aGlzIGNvZGUgKm5vdCogdG8KLQkJICogdHJ5IHRvIHJlbW92ZSBpdCBm cm9tIGFueSBsaXN0cyAoaXRzIG5vdAotCQkgKiBvbiBvbmUgeWV0KS4gV2hlbiB0aGUgY2FsbG91 dCB3aGVlbCBydW5zLAotCQkgKiBpdCB3aWxsIGlnbm9yZSB0aGlzIGNhbGxvdXQuCi0JCSAqLwot CQljLT5jX2lmbGFncyAmPSB+Q0FMTE9VVF9QRU5ESU5HOwotCQljLT5jX2ZsYWdzICY9IH5DQUxM T1VUX0FDVElWRTsKLQkJbm90X29uX2FfbGlzdCA9IDE7Ci0JfSBlbHNlIHsKLQkJbm90X29uX2Ff bGlzdCA9IDA7Ci0JfQoraW50CitjYWxsb3V0X2RyYWluX2FzeW5jKHN0cnVjdCBjYWxsb3V0ICpj LCBjYWxsb3V0X2Z1bmNfdCAqZm4sIHZvaWQgKmFyZykKK3sKKwkvKiBnZXQgY2FsbGJhY2sgc3Rv cHBlZCwgaWYgYW55ICovCisJcmV0dXJuIChjYWxsb3V0X3Jlc3RhcnRfYXN5bmMoCisJICAgIGMs IE5VTEwsIGZuLCBhcmcpICYgQ0FMTE9VVF9SRVRfRFJBSU5JTkcpOworfQogCi0JLyoKLQkgKiBJ ZiB0aGUgY2FsbG91dCB3YXMgbWlncmF0aW5nIHdoaWxlIHRoZSBjYWxsb3V0IGNwdSBsb2NrIHdh cwotCSAqIGRyb3BwZWQsICBqdXN0IGRyb3AgdGhlIHNsZWVwcXVldWUgbG9jayBhbmQgY2hlY2sg dGhlIHN0YXRlcwotCSAqIGFnYWluLgotCSAqLwotCWlmIChzcV9sb2NrZWQgIT0gMCAmJiBjYyAh PSBvbGRfY2MpIHsKLSNpZmRlZiBTTVAKLQkJQ0NfVU5MT0NLKGNjKTsKLQkJc2xlZXBxX3JlbGVh c2UoJmNjX2V4ZWNfd2FpdGluZyhvbGRfY2MsIGRpcmVjdCkpOwotCQlzcV9sb2NrZWQgPSAwOwot CQlvbGRfY2MgPSBOVUxMOwotCQlnb3RvIGFnYWluOwotI2Vsc2UKLQkJcGFuaWMoIm1pZ3JhdGlv biBzaG91bGQgbm90IGhhcHBlbiIpOwotI2VuZGlmCi0JfQoraW50CitjYWxsb3V0X2RyYWluKHN0 cnVjdCBjYWxsb3V0ICpjKQoreworCWludCBjYW5jZWxsZWQ7CiAKLQkvKgotCSAqIElmIHRoZSBj YWxsb3V0IGlzbid0IHBlbmRpbmcsIGl0J3Mgbm90IG9uIHRoZSBxdWV1ZSwgc28KLQkgKiBkb24n dCBhdHRlbXB0IHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBxdWV1ZS4gIFdlIGNhbiB0cnkgdG8KLQkg KiBzdG9wIGl0IGJ5IG90aGVyIG1lYW5zIGhvd2V2ZXIuCi0JICovCi0JaWYgKCEoYy0+Y19pZmxh Z3MgJiBDQUxMT1VUX1BFTkRJTkcpKSB7Ci0JCWMtPmNfZmxhZ3MgJj0gfkNBTExPVVRfQUNUSVZF OworCVdJVE5FU1NfV0FSTihXQVJOX0dJQU5UT0sgfCBXQVJOX1NMRUVQT0ssIE5VTEwsCisJICAg ICJEcmFpbmluZyBjYWxsb3V0Iik7CisKKwljYWxsb3V0X2xvY2tfY2xpZW50KGMtPmNfZmxhZ3Ms IGMtPmNfbG9jayk7CisKKwkvKiBhdCB0aGlzIHBvaW50IHRoZSAiYy0+Y19jcHUiIGZpZWxkIGlz IG5vdCBjaGFuZ2luZyAqLworCisJY2FuY2VsbGVkID0gY2FsbG91dF9kcmFpbl9hc3luYyhjLCAm Y2FsbG91dF9kcmFpbl9mdW5jdGlvbiwgYyk7CisKKwlpZiAoY2FuY2VsbGVkICE9IENBTExPVVRf UkVUX05PUk1BTCkgeworCQlzdHJ1Y3QgY2FsbG91dF9jcHUgKmNjOworCQlpbnQgZGlyZWN0Owor CisJCUNUUjMoS1RSX0NBTExPVVQsICJuZWVkIHRvIGRyYWluICVwIGZ1bmMgJXAgYXJnICVwIiwK KwkJICAgIGMsIGMtPmNfZnVuYywgYy0+Y19hcmcpOworCisJCWNjID0gY2FsbG91dF9sb2NrKGMp OworCQlkaXJlY3QgPSAoKGMtPmNfZmxhZ3MgJiBDQUxMT1VUX0RJUkVDVCkgIT0gMCk7CiAKIAkJ LyoKLQkJICogSWYgaXQgd2Fzbid0IG9uIHRoZSBxdWV1ZSBhbmQgaXQgaXNuJ3QgdGhlIGN1cnJl bnQKLQkJICogY2FsbG91dCwgdGhlbiB3ZSBjYW4ndCBzdG9wIGl0LCBzbyBqdXN0IGJhaWwuCisJ CSAqIFdlJ3ZlIGdvdHRlbiBvdXIgY2FsbG91dCBDUFUgbG9jaywgaXQgaXMgc2FmZSB0bworCQkg KiBkcm9wIHRoZSBpbml0aWFsIGxvY2s6CiAJCSAqLwotCQlpZiAoY2NfZXhlY19jdXJyKGNjLCBk aXJlY3QpICE9IGMpIHsKLQkJCUNUUjMoS1RSX0NBTExPVVQsICJmYWlsZWQgdG8gc3RvcCAlcCBm dW5jICVwIGFyZyAlcCIsCi0JCQkgICAgYywgYy0+Y19mdW5jLCBjLT5jX2FyZyk7Ci0JCQlDQ19V TkxPQ0soY2MpOwotCQkJaWYgKHNxX2xvY2tlZCkKLQkJCQlzbGVlcHFfcmVsZWFzZSgmY2NfZXhl Y193YWl0aW5nKGNjLCBkaXJlY3QpKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KKwkJY2FsbG91dF91 bmxvY2tfY2xpZW50KGMtPmNfZmxhZ3MsIGMtPmNfbG9jayk7CiAKLQkJaWYgKHNhZmUpIHsKLQkJ CS8qCi0JCQkgKiBUaGUgY3VycmVudCBjYWxsb3V0IGlzIHJ1bm5pbmcgKG9yIGp1c3QKLQkJCSAq IGFib3V0IHRvIHJ1bikgYW5kIGJsb2NraW5nIGlzIGFsbG93ZWQsIHNvCi0JCQkgKiBqdXN0IHdh aXQgZm9yIHRoZSBjdXJyZW50IGludm9jYXRpb24gdG8KLQkJCSAqIGZpbmlzaC4KLQkJCSAqLwot CQkJd2hpbGUgKGNjX2V4ZWNfY3VycihjYywgZGlyZWN0KSA9PSBjKSB7Ci0JCQkJLyoKLQkJCQkg KiBVc2UgZGlyZWN0IGNhbGxzIHRvIHNsZWVwcXVldWUgaW50ZXJmYWNlCi0JCQkJICogaW5zdGVh ZCBvZiBjdi9tc2xlZXAgaW4gb3JkZXIgdG8gYXZvaWQKLQkJCQkgKiBhIExPUiBiZXR3ZWVuIGNj X2xvY2sgYW5kIHNsZWVwcXVldWUKLQkJCQkgKiBjaGFpbiBzcGlubG9ja3MuICBUaGlzIHBpZWNl IG9mIGNvZGUKLQkJCQkgKiBlbXVsYXRlcyBhIG1zbGVlcF9zcGluKCkgY2FsbCBhY3R1YWxseS4K LQkJCQkgKgotCQkJCSAqIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgc2xlZXBxdWV1ZSBjaGFpbgot CQkJCSAqIGxvY2tlZCwgdGhlbiB3ZSBjYW4gc2FmZWx5IGJsb2NrLiAgSWYgd2UKLQkJCQkgKiBk b24ndCBhbHJlYWR5IGhhdmUgaXQgbG9ja2VkLCBob3dldmVyLAotCQkJCSAqIHdlIGhhdmUgdG8g ZHJvcCB0aGUgY2NfbG9jayB0byBsb2NrCi0JCQkJICogaXQuICBUaGlzIG9wZW5zIHNldmVyYWwg cmFjZXMsIHNvIHdlCi0JCQkJICogcmVzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9uY2Ugd2UgaGF2 ZQotCQkJCSAqIGJvdGggbG9ja3MuICBJZiBub3RoaW5nIGhhcyBjaGFuZ2VkLCB0aGVuCi0JCQkJ ICogd2Ugd2lsbCBlbmQgdXAgYmFjayBoZXJlIHdpdGggc3FfbG9ja2VkCi0JCQkJICogc2V0Lgot CQkJCSAqLwotCQkJCWlmICghc3FfbG9ja2VkKSB7Ci0JCQkJCUNDX1VOTE9DSyhjYyk7Ci0JCQkJ CXNsZWVwcV9sb2NrKAotCQkJCQkgICAgJmNjX2V4ZWNfd2FpdGluZyhjYywgZGlyZWN0KSk7Ci0J CQkJCXNxX2xvY2tlZCA9IDE7Ci0JCQkJCW9sZF9jYyA9IGNjOwotCQkJCQlnb3RvIGFnYWluOwot CQkJCX0KKwkJLyogV2FpdCBmb3IgZHJhaW4gdG8gY29tcGxldGUgKi8KKworCQl3aGlsZSAoY2Nf ZXhlY19jdXJyKGNjLCBkaXJlY3QpID09IGMpCisJCQltc2xlZXBfc3BpbihjLCAoc3RydWN0IG10 eCAqKSZjYy0+Y2NfbG9jaywgImNvZHJhaW4iLCAwKTsKIAotCQkJCS8qCi0JCQkJICogTWlncmF0 aW9uIGNvdWxkIGJlIGNhbmNlbGxlZCBoZXJlLCBidXQKLQkJCQkgKiBhcyBsb25nIGFzIGl0IGlz IHN0aWxsIG5vdCBzdXJlIHdoZW4gaXQKLQkJCQkgKiB3aWxsIGJlIHBhY2tlZCB1cCwganVzdCBs ZXQgc29mdGNsb2NrKCkKLQkJCQkgKiB0YWtlIGNhcmUgb2YgaXQuCi0JCQkJICovCi0JCQkJY2Nf ZXhlY193YWl0aW5nKGNjLCBkaXJlY3QpID0gdHJ1ZTsKLQkJCQlEUk9QX0dJQU5UKCk7Ci0JCQkJ Q0NfVU5MT0NLKGNjKTsKLQkJCQlzbGVlcHFfYWRkKAotCQkJCSAgICAmY2NfZXhlY193YWl0aW5n KGNjLCBkaXJlY3QpLAotCQkJCSAgICAmY2MtPmNjX2xvY2subG9ja19vYmplY3QsICJjb2RyYWlu IiwKLQkJCQkgICAgU0xFRVBRX1NMRUVQLCAwKTsKLQkJCQlzbGVlcHFfd2FpdCgKLQkJCQkgICAg JmNjX2V4ZWNfd2FpdGluZyhjYywgZGlyZWN0KSwKLQkJCQkJICAgICAwKTsKLQkJCQlzcV9sb2Nr ZWQgPSAwOwotCQkJCW9sZF9jYyA9IE5VTEw7Ci0KLQkJCQkvKiBSZWFjcXVpcmUgbG9ja3MgcHJl dmlvdXNseSByZWxlYXNlZC4gKi8KLQkJCQlQSUNLVVBfR0lBTlQoKTsKLQkJCQlDQ19MT0NLKGNj KTsKLQkJCX0KLQkJfSBlbHNlIGlmICh1c2VfbG9jayAmJgotCQkJICAgIWNjX2V4ZWNfY2FuY2Vs KGNjLCBkaXJlY3QpKSB7Ci0JCQkKLQkJCS8qCi0JCQkgKiBUaGUgY3VycmVudCBjYWxsb3V0IGlz IHdhaXRpbmcgZm9yIGl0cwotCQkJICogbG9jayB3aGljaCB3ZSBob2xkLiAgQ2FuY2VsIHRoZSBj YWxsb3V0Ci0JCQkgKiBhbmQgcmV0dXJuLiAgQWZ0ZXIgb3VyIGNhbGxlciBkcm9wcyB0aGUKLQkJ CSAqIGxvY2ssIHRoZSBjYWxsb3V0IHdpbGwgYmUgc2tpcHBlZCBpbgotCQkJICogc29mdGNsb2Nr KCkuCi0JCQkgKi8KLQkJCWNjX2V4ZWNfY2FuY2VsKGNjLCBkaXJlY3QpID0gdHJ1ZTsKLQkJCUNU UjMoS1RSX0NBTExPVVQsICJjYW5jZWxsZWQgJXAgZnVuYyAlcCBhcmcgJXAiLAotCQkJICAgIGMs IGMtPmNfZnVuYywgYy0+Y19hcmcpOwotCQkJS0FTU0VSVCghY2NfY2NlX21pZ3JhdGluZyhjYywg ZGlyZWN0KSwKLQkJCSAgICAoImNhbGxvdXQgd3JvbmdseSBzY2hlZHVsZWQgZm9yIG1pZ3JhdGlv biIpKTsKLQkJCWlmIChjYWxsb3V0X21pZ3JhdGluZyhjKSkgewotCQkJCWMtPmNfaWZsYWdzICY9 IH5DQUxMT1VUX0RGUk1JR1JBVElPTjsKLSNpZmRlZiBTTVAKLQkJCQljY19taWdyYXRpb25fY3B1 KGNjLCBkaXJlY3QpID0gQ1BVQkxPQ0s7Ci0JCQkJY2NfbWlncmF0aW9uX3RpbWUoY2MsIGRpcmVj dCkgPSAwOwotCQkJCWNjX21pZ3JhdGlvbl9wcmVjKGNjLCBkaXJlY3QpID0gMDsKLQkJCQljY19t aWdyYXRpb25fZnVuYyhjYywgZGlyZWN0KSA9IE5VTEw7Ci0JCQkJY2NfbWlncmF0aW9uX2FyZyhj YywgZGlyZWN0KSA9IE5VTEw7Ci0jZW5kaWYKLQkJCX0KLQkJCUNDX1VOTE9DSyhjYyk7Ci0JCQlL QVNTRVJUKCFzcV9sb2NrZWQsICgic2xlZXBxdWV1ZSBjaGFpbiBsb2NrZWQiKSk7Ci0JCQlyZXR1 cm4gKDEpOwotCQl9IGVsc2UgaWYgKGNhbGxvdXRfbWlncmF0aW5nKGMpKSB7Ci0JCQkvKgotCQkJ ICogVGhlIGNhbGxvdXQgaXMgY3VycmVudGx5IGJlaW5nIHNlcnZpY2VkCi0JCQkgKiBhbmQgdGhl ICJuZXh0IiBjYWxsb3V0IGlzIHNjaGVkdWxlZCBhdAotCQkJICogaXRzIGNvbXBsZXRpb24gd2l0 aCBhIG1pZ3JhdGlvbi4gV2UgcmVtb3ZlCi0JCQkgKiB0aGUgbWlncmF0aW9uIGZsYWcgc28gaXQg Kndvbid0KiBnZXQgcmVzY2hlZHVsZWQsCi0JCQkgKiBidXQgd2UgY2FuJ3Qgc3RvcCB0aGUgb25l IHRoYXRzIHJ1bm5pbmcgc28KLQkJCSAqIHdlIHJldHVybiAwLgotCQkJICovCi0JCQljLT5jX2lm bGFncyAmPSB+Q0FMTE9VVF9ERlJNSUdSQVRJT047Ci0jaWZkZWYgU01QCi0JCQkvKiAKLQkJCSAq IFdlIGNhbid0IGNhbGwgY2NfY2NlX2NsZWFudXAgaGVyZSBzaW5jZQotCQkJICogaWYgd2UgZG8g aXQgd2lsbCByZW1vdmUgLmNlX2N1cnIgYW5kCi0JCQkgKiBpdHMgc3RpbGwgcnVubmluZy4gVGhp cyB3aWxsIHByZXZlbnQgYQotCQkJICogcmVzY2hlZHVsZSBvZiB0aGUgY2FsbG91dCB3aGVuIHRo ZSAKLQkJCSAqIGV4ZWN1dGlvbiBjb21wbGV0ZXMuCi0JCQkgKi8KLQkJCWNjX21pZ3JhdGlvbl9j cHUoY2MsIGRpcmVjdCkgPSBDUFVCTE9DSzsKLQkJCWNjX21pZ3JhdGlvbl90aW1lKGNjLCBkaXJl Y3QpID0gMDsKLQkJCWNjX21pZ3JhdGlvbl9wcmVjKGNjLCBkaXJlY3QpID0gMDsKLQkJCWNjX21p Z3JhdGlvbl9mdW5jKGNjLCBkaXJlY3QpID0gTlVMTDsKLQkJCWNjX21pZ3JhdGlvbl9hcmcoY2Ms IGRpcmVjdCkgPSBOVUxMOwotI2VuZGlmCi0JCQlDVFIzKEtUUl9DQUxMT1VULCAicG9zdHBvbmlu ZyBzdG9wICVwIGZ1bmMgJXAgYXJnICVwIiwKLQkJCSAgICBjLCBjLT5jX2Z1bmMsIGMtPmNfYXJn KTsKLQkJCUNDX1VOTE9DSyhjYyk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCUNUUjMoS1RSX0NB TExPVVQsICJmYWlsZWQgdG8gc3RvcCAlcCBmdW5jICVwIGFyZyAlcCIsCi0JCSAgICBjLCBjLT5j X2Z1bmMsIGMtPmNfYXJnKTsKIAkJQ0NfVU5MT0NLKGNjKTsKLQkJS0FTU0VSVCghc3FfbG9ja2Vk LCAoInNsZWVwcXVldWUgY2hhaW4gc3RpbGwgbG9ja2VkIikpOwotCQlyZXR1cm4gKDApOworCX0g ZWxzZSB7CisJCWNhbGxvdXRfdW5sb2NrX2NsaWVudChjLT5jX2ZsYWdzLCBjLT5jX2xvY2spOwog CX0KLQlpZiAoc3FfbG9ja2VkKQotCQlzbGVlcHFfcmVsZWFzZSgmY2NfZXhlY193YWl0aW5nKGNj LCBkaXJlY3QpKTsKLQotCWMtPmNfaWZsYWdzICY9IH5DQUxMT1VUX1BFTkRJTkc7Ci0JYy0+Y19m bGFncyAmPSB+Q0FMTE9VVF9BQ1RJVkU7CiAKIAlDVFIzKEtUUl9DQUxMT1VULCAiY2FuY2VsbGVk ICVwIGZ1bmMgJXAgYXJnICVwIiwKIAkgICAgYywgYy0+Y19mdW5jLCBjLT5jX2FyZyk7Ci0JaWYg KG5vdF9vbl9hX2xpc3QgPT0gMCkgewotCQlpZiAoKGMtPmNfaWZsYWdzICYgQ0FMTE9VVF9QUk9D RVNTRUQpID09IDApIHsKLQkJCWlmIChjY19leGVjX25leHQoY2MpID09IGMpCi0JCQkJY2NfZXhl Y19uZXh0KGNjKSA9IExJU1RfTkVYVChjLCBjX2xpbmtzLmxlKTsKLQkJCUxJU1RfUkVNT1ZFKGMs IGNfbGlua3MubGUpOwotCQl9IGVsc2UgewotCQkJVEFJTFFfUkVNT1ZFKCZjYy0+Y2NfZXhwaXJl cSwgYywgY19saW5rcy50cWUpOwotCQl9Ci0JfQotCWNhbGxvdXRfY2NfZGVsKGMsIGNjKTsKLQlD Q19VTkxPQ0soY2MpOwotCXJldHVybiAoMSk7CisKKwlyZXR1cm4gKGNhbmNlbGxlZCAmIENBTExP VVRfUkVUX0NBTkNFTExFRCk7CiB9CiAKIHZvaWQKIGNhbGxvdXRfaW5pdChzdHJ1Y3QgY2FsbG91 dCAqYywgaW50IG1wc2FmZSkKIHsKLQliemVybyhjLCBzaXplb2YgKmMpOwogCWlmIChtcHNhZmUp IHsKLQkJYy0+Y19sb2NrID0gTlVMTDsKLQkJYy0+Y19pZmxhZ3MgPSBDQUxMT1VUX1JFVFVSTlVO TE9DS0VEOworCQlfY2FsbG91dF9pbml0X2xvY2soYywgTlVMTCwgQ0FMTE9VVF9SRVRVUk5VTkxP Q0tFRCk7CiAJfSBlbHNlIHsKLQkJYy0+Y19sb2NrID0gJkdpYW50LmxvY2tfb2JqZWN0OwotCQlj LT5jX2lmbGFncyA9IDA7CisJCV9jYWxsb3V0X2luaXRfbG9jayhjLCAmR2lhbnQubG9ja19vYmpl Y3QsIDApOwogCX0KLQljLT5jX2NwdSA9IHRpbWVvdXRfY3B1OwogfQogCiB2b2lkCiBfY2FsbG91 dF9pbml0X2xvY2soc3RydWN0IGNhbGxvdXQgKmMsIHN0cnVjdCBsb2NrX29iamVjdCAqbG9jaywg aW50IGZsYWdzKQogewogCWJ6ZXJvKGMsIHNpemVvZiAqYyk7CisJS0FTU0VSVCgoZmxhZ3MgJiB+ Q0FMTE9VVF9SRVRVUk5VTkxPQ0tFRCkgPT0gMCwKKwkgICAgKCJjYWxsb3V0X2luaXRfbG9jazog YmFkIGZsYWdzIDB4JTA4eCIsIGZsYWdzKSk7CisJZmxhZ3MgJj0gQ0FMTE9VVF9SRVRVUk5VTkxP Q0tFRDsKKwlpZiAobG9jayAhPSBOVUxMKSB7CisJCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9 IExPQ0tfQ0xBU1MobG9jayk7CisJCWlmIChjbGFzcyA9PSAmbG9ja19jbGFzc19tdHhfc2xlZXAp CisJCQlmbGFncyB8PSBDQUxMT1VUX1NFVF9MQyhDQUxMT1VUX0xDX01VVEVYKTsKKwkJZWxzZSBp ZiAoY2xhc3MgPT0gJmxvY2tfY2xhc3NfbXR4X3NwaW4pCisJCQlmbGFncyB8PSBDQUxMT1VUX1NF VF9MQyhDQUxMT1VUX0xDX1NQSU4pOworCQllbHNlIGlmIChjbGFzcyA9PSAmbG9ja19jbGFzc19y bSkKKwkJCWZsYWdzIHw9IENBTExPVVRfU0VUX0xDKENBTExPVVRfTENfUk0pOworCQllbHNlIGlm IChjbGFzcyA9PSAmbG9ja19jbGFzc19ydykKKwkJCWZsYWdzIHw9IENBTExPVVRfU0VUX0xDKENB TExPVVRfTENfUlcpOworCQllbHNlCisJCQlwYW5pYygiY2FsbG91dF9pbml0X2xvY2s6IFVuc3Vw cG9ydGVkIGxvY2sgY2xhc3MgJyVzJ1xuIiwgY2xhc3MtPmxjX25hbWUpOworCX0gZWxzZSB7CisJ CWZsYWdzIHw9IENBTExPVVRfU0VUX0xDKENBTExPVVRfTENfVU5VU0VEXzApOworCX0KIAljLT5j X2xvY2sgPSBsb2NrOwotCUtBU1NFUlQoKGZsYWdzICYgfihDQUxMT1VUX1JFVFVSTlVOTE9DS0VE IHwgQ0FMTE9VVF9TSEFSRURMT0NLKSkgPT0gMCwKLQkgICAgKCJjYWxsb3V0X2luaXRfbG9jazog YmFkIGZsYWdzICVkIiwgZmxhZ3MpKTsKLQlLQVNTRVJUKGxvY2sgIT0gTlVMTCB8fCAoZmxhZ3Mg JiBDQUxMT1VUX1JFVFVSTlVOTE9DS0VEKSA9PSAwLAotCSAgICAoImNhbGxvdXRfaW5pdF9sb2Nr OiBDQUxMT1VUX1JFVFVSTlVOTE9DS0VEIHdpdGggbm8gbG9jayIpKTsKLQlLQVNTRVJUKGxvY2sg PT0gTlVMTCB8fCAhKExPQ0tfQ0xBU1MobG9jayktPmxjX2ZsYWdzICYKLQkgICAgKExDX1NQSU5M T0NLIHwgTENfU0xFRVBBQkxFKSksICgiJXM6IGludmFsaWQgbG9jayBjbGFzcyIsCi0JICAgIF9f ZnVuY19fKSk7Ci0JYy0+Y19pZmxhZ3MgPSBmbGFncyAmIChDQUxMT1VUX1JFVFVSTlVOTE9DS0VE IHwgQ0FMTE9VVF9TSEFSRURMT0NLKTsKKwljLT5jX2ZsYWdzID0gZmxhZ3M7CiAJYy0+Y19jcHUg PSB0aW1lb3V0X2NwdTsKIH0KIApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tl cm4va2Vybl9jb25kdmFyLmMgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2NvbmR2 YXIuYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2NvbmR2YXIuYworKysg Yi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2NvbmR2YXIuYwpAQCAtMzEzLDE1ICsz MTMsMTMgQEAKIAlEUk9QX0dJQU5UKCk7CiAKIAlzbGVlcHFfYWRkKGN2cCwgbG9jaywgY3ZwLT5j dl9kZXNjcmlwdGlvbiwgU0xFRVBRX0NPTkRWQVIsIDApOworCXNsZWVwcV9yZWxlYXNlKGN2cCk7 CiAJc2xlZXBxX3NldF90aW1lb3V0X3NidChjdnAsIHNidCwgcHIsIGZsYWdzKTsKIAlpZiAobG9j ayAhPSAmR2lhbnQubG9ja19vYmplY3QpIHsKLQkJaWYgKGNsYXNzLT5sY19mbGFncyAmIExDX1NM RUVQQUJMRSkKLQkJCXNsZWVwcV9yZWxlYXNlKGN2cCk7CiAJCVdJVE5FU1NfU0FWRShsb2NrLCBs b2NrX3dpdG5lc3MpOwogCQlsb2NrX3N0YXRlID0gY2xhc3MtPmxjX3VubG9jayhsb2NrKTsKLQkJ aWYgKGNsYXNzLT5sY19mbGFncyAmIExDX1NMRUVQQUJMRSkKLQkJCXNsZWVwcV9sb2NrKGN2cCk7 CiAJfQorCXNsZWVwcV9sb2NrKGN2cCk7CiAJcnZhbCA9IHNsZWVwcV90aW1lZHdhaXQoY3ZwLCAw KTsKIAogI2lmZGVmIEtUUkFDRQpAQCAtMzgzLDE1ICszODEsMTMgQEAKIAogCXNsZWVwcV9hZGQo Y3ZwLCBsb2NrLCBjdnAtPmN2X2Rlc2NyaXB0aW9uLCBTTEVFUFFfQ09ORFZBUiB8CiAJICAgIFNM RUVQUV9JTlRFUlJVUFRJQkxFLCAwKTsKKwlzbGVlcHFfcmVsZWFzZShjdnApOwogCXNsZWVwcV9z ZXRfdGltZW91dF9zYnQoY3ZwLCBzYnQsIHByLCBmbGFncyk7CiAJaWYgKGxvY2sgIT0gJkdpYW50 LmxvY2tfb2JqZWN0KSB7Ci0JCWlmIChjbGFzcy0+bGNfZmxhZ3MgJiBMQ19TTEVFUEFCTEUpCi0J CQlzbGVlcHFfcmVsZWFzZShjdnApOwogCQlXSVRORVNTX1NBVkUobG9jaywgbG9ja193aXRuZXNz KTsKIAkJbG9ja19zdGF0ZSA9IGNsYXNzLT5sY191bmxvY2sobG9jayk7Ci0JCWlmIChjbGFzcy0+ bGNfZmxhZ3MgJiBMQ19TTEVFUEFCTEUpCi0JCQlzbGVlcHFfbG9jayhjdnApOwogCX0KKwlzbGVl cHFfbG9jayhjdnApOwogCXJ2YWwgPSBzbGVlcHFfdGltZWR3YWl0X3NpZyhjdnAsIDApOwogCiAj aWZkZWYgS1RSQUNFCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9pbml0 X21haW4uYyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2luaXRfbWFpbi5jCi0tLSBhL3By b2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2luaXRfbWFpbi5jCisrKyBiL3Byb2plY3RzL2hwc19o ZWFkL3N5cy9rZXJuL2luaXRfbWFpbi5jCkBAIC01MDYsNyArNTA2LDggQEAKIAogCWNhbGxvdXRf aW5pdF9tdHgoJnAtPnBfaXRjYWxsb3V0LCAmcC0+cF9tdHgsIDApOwogCWNhbGxvdXRfaW5pdF9t dHgoJnAtPnBfbGltY28sICZwLT5wX210eCwgMCk7Ci0JY2FsbG91dF9pbml0KCZ0ZC0+dGRfc2xw Y2FsbG91dCwgQ0FMTE9VVF9NUFNBRkUpOworCW10eF9pbml0KCZ0ZC0+dGRfc2xwbXV0ZXgsICJ0 ZF9zbHBtdXRleCIsIE5VTEwsIE1UWF9TUElOKTsKKwljYWxsb3V0X2luaXRfbXR4KCZ0ZC0+dGRf c2xwY2FsbG91dCwgJnRkLT50ZF9zbHBtdXRleCwgMCk7CiAKIAkvKiBDcmVhdGUgY3JlZGVudGlh bHMuICovCiAJbmV3Y3JlZCA9IGNyZ2V0KCk7CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9ocHNfaGVh ZC9zeXMva2Vybi9rZXJuX3N3aXRjaC5jIGIvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vy bl9zd2l0Y2guYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX3N3aXRjaC5j CisrKyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2tlcm5fc3dpdGNoLmMKQEAgLTkzLDgg KzkzLDYgQEAKICAgICAmRFBDUFVfTkFNRShzY2hlZF9zd2l0Y2hfc3RhdHNbU1dUX1RVUk5TVElM RV0pLCAiIik7CiBTQ0hFRF9TVEFUX0RFRklORV9WQVIoc2xlZXBxLAogICAgICZEUENQVV9OQU1F KHNjaGVkX3N3aXRjaF9zdGF0c1tTV1RfU0xFRVBRXSksICIiKTsKLVNDSEVEX1NUQVRfREVGSU5F X1ZBUihzbGVlcHF0aW1vLAotICAgICZEUENQVV9OQU1FKHNjaGVkX3N3aXRjaF9zdGF0c1tTV1Rf U0xFRVBRVElNT10pLCAiIik7CiBTQ0hFRF9TVEFUX0RFRklORV9WQVIocmVsaW5xdWlzaCwgCiAg ICAgJkRQQ1BVX05BTUUoc2NoZWRfc3dpdGNoX3N0YXRzW1NXVF9SRUxJTlFVSVNIXSksICIiKTsK IFNDSEVEX1NUQVRfREVGSU5FX1ZBUihuZWVkcmVzY2hlZCwKZGlmZiAtLWdpdCBhL3Byb2plY3Rz L2hwc19oZWFkL3N5cy9rZXJuL2tlcm5fdGhyZWFkLmMgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMv a2Vybi9rZXJuX3RocmVhZC5jCi0tLSBhL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2tlcm5f dGhyZWFkLmMKKysrIGIvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vybl90aHJlYWQuYwpA QCAtMTQ5LDYgKzE0OSw5IEBACiAJYXVkaXRfdGhyZWFkX2FsbG9jKHRkKTsKICNlbmRpZgogCXVt dHhfdGhyZWFkX2FsbG9jKHRkKTsKKworCW10eF9pbml0KCZ0ZC0+dGRfc2xwbXV0ZXgsICJ0ZF9z bHBtdXRleCIsIE5VTEwsIE1UWF9TUElOKTsKKwljYWxsb3V0X2luaXRfbXR4KCZ0ZC0+dGRfc2xw Y2FsbG91dCwgJnRkLT50ZF9zbHBtdXRleCwgMCk7CiAJcmV0dXJuICgwKTsKIH0KIApAQCAtMTYy LDYgKzE2NSwxMCBAQAogCiAJdGQgPSAoc3RydWN0IHRocmVhZCAqKW1lbTsKIAorCS8qIG1ha2Ug c3VyZSB0byBkcmFpbiBhbnkgdXNlIG9mIHRoZSAidGQtPnRkX3NscGNhbGxvdXQiICovCisJY2Fs bG91dF9kcmFpbigmdGQtPnRkX3NscGNhbGxvdXQpOworCW10eF9kZXN0cm95KCZ0ZC0+dGRfc2xw bXV0ZXgpOworCiAjaWZkZWYgSU5WQVJJQU5UUwogCS8qIFZlcmlmeSB0aGF0IHRoaXMgdGhyZWFk IGlzIGluIGEgc2FmZSBzdGF0ZSB0byBmcmVlLiAqLwogCXN3aXRjaCAodGQtPnRkX3N0YXRlKSB7 CkBAIC01NDQsNyArNTUxLDYgQEAKIAlMSVNUX0lOSVQoJnRkLT50ZF9scHJvZlswXSk7CiAJTElT VF9JTklUKCZ0ZC0+dGRfbHByb2ZbMV0pOwogCXNpZ3F1ZXVlX2luaXQoJnRkLT50ZF9zaWdxdWV1 ZSwgcCk7Ci0JY2FsbG91dF9pbml0KCZ0ZC0+dGRfc2xwY2FsbG91dCwgQ0FMTE9VVF9NUFNBRkUp OwogCVRBSUxRX0lOU0VSVF9UQUlMKCZwLT5wX3RocmVhZHMsIHRkLCB0ZF9wbGlzdCk7CiAJcC0+ cF9udW10aHJlYWRzKys7CiB9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vy bi9rZXJuX2Nsb2Nrc291cmNlLmMgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2Ns b2Nrc291cmNlLmMKLS0tIGEvcHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vybl9jbG9ja3Nv dXJjZS5jCisrKyBiL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJuL2tlcm5fY2xvY2tzb3VyY2Uu YwpAQCAtMTYwLDYgKzE2MCw5IEBACiAJaW50IHVzZXJtb2RlOwogCWludCBkb25lLCBydW5zOwog CisJS0FTU0VSVChjdXJ0aHJlYWQtPnRkX2NyaXRuZXN0ICE9IDAsCisJICAgICgiTXVzdCBiZSBp biBhIGNyaXRpY2FsIHNlY3Rpb24iKSk7CisKIAlDVFIzKEtUUl9TUEFSRTIsICJoYW5kbGUgYXQg JWQ6ICBub3cgICVkLiUwOHgiLAogCSAgICBjdXJjcHUsIChpbnQpKG5vdyA+PiAzMiksICh1X2lu dCkobm93ICYgMHhmZmZmZmZmZikpOwogCWRvbmUgPSAwOwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMv aHBzX2hlYWQvc3lzL2tlcm4va2Vybl9sb2NrLmMgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vy bi9rZXJuX2xvY2suYwotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2xvY2su YworKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX2xvY2suYwpAQCAtMjEwLDkg KzIxMCwxMSBAQAogCUdJQU5UX1NBVkUoKTsKIAlzbGVlcHFfYWRkKCZsay0+bG9ja19vYmplY3Qs IE5VTEwsIHdtZXNnLCBTTEVFUFFfTEsgfCAoY2F0Y2ggPwogCSAgICBTTEVFUFFfSU5URVJSVVBU SUJMRSA6IDApLCBxdWV1ZSk7Ci0JaWYgKChmbGFncyAmIExLX1RJTUVMT0NLKSAmJiB0aW1vKQor CWlmICgoZmxhZ3MgJiBMS19USU1FTE9DSykgJiYgdGltbykgeworCQlzbGVlcHFfcmVsZWFzZSgm bGstPmxvY2tfb2JqZWN0KTsKIAkJc2xlZXBxX3NldF90aW1lb3V0KCZsay0+bG9ja19vYmplY3Qs IHRpbW8pOwotCisJCXNsZWVwcV9sb2NrKCZsay0+bG9ja19vYmplY3QpOworCX0KIAkvKgogCSAq IERlY2lzaW9uYWwgc3dpdGNoIGZvciByZWFsIHNsZWVwaW5nLgogCSAqLwpkaWZmIC0tZ2l0IGEv cHJvamVjdHMvaHBzX2hlYWQvc3lzL2tlcm4va2Vybl9zeW5jaC5jIGIvcHJvamVjdHMvaHBzX2hl YWQvc3lzL2tlcm4va2Vybl9zeW5jaC5jCi0tLSBhL3Byb2plY3RzL2hwc19oZWFkL3N5cy9rZXJu L2tlcm5fc3luY2guYworKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zeXMva2Vybi9rZXJuX3N5bmNo LmMKQEAgLTIxOSwxMiArMjE5LDE2IEBACiAJICogcmV0dXJuIGZyb20gY3Vyc2lnKCkuCiAJICov CiAJc2xlZXBxX2FkZChpZGVudCwgbG9jaywgd21lc2csIHNsZWVwcV9mbGFncywgMCk7Ci0JaWYg KHNidCAhPSAwKQotCQlzbGVlcHFfc2V0X3RpbWVvdXRfc2J0KGlkZW50LCBzYnQsIHByLCBmbGFn cyk7CiAJaWYgKGxvY2sgIT0gTlVMTCAmJiBjbGFzcy0+bGNfZmxhZ3MgJiBMQ19TTEVFUEFCTEUp IHsKIAkJc2xlZXBxX3JlbGVhc2UoaWRlbnQpOwogCQlXSVRORVNTX1NBVkUobG9jaywgbG9ja193 aXRuZXNzKTsKIAkJbG9ja19zdGF0ZSA9IGNsYXNzLT5sY191bmxvY2sobG9jayk7CisJCWlmIChz YnQgIT0gMCkKKwkJCXNsZWVwcV9zZXRfdGltZW91dF9zYnQoaWRlbnQsIHNidCwgcHIsIGZsYWdz KTsKKwkJc2xlZXBxX2xvY2soaWRlbnQpOworCX0gZWxzZSBpZiAoc2J0ICE9IDApIHsKKwkJc2xl ZXBxX3JlbGVhc2UoaWRlbnQpOworCQlzbGVlcHFfc2V0X3RpbWVvdXRfc2J0KGlkZW50LCBzYnQs IHByLCBmbGFncyk7CiAJCXNsZWVwcV9sb2NrKGlkZW50KTsKIAl9CiAJaWYgKHNidCAhPSAwICYm IGNhdGNoKQpAQCAtMjg5LDggKzI5MywxMSBAQAogCSAqIFdlIHB1dCBvdXJzZWx2ZXMgb24gdGhl IHNsZWVwIHF1ZXVlIGFuZCBzdGFydCBvdXIgdGltZW91dC4KIAkgKi8KIAlzbGVlcHFfYWRkKGlk ZW50LCAmbXR4LT5sb2NrX29iamVjdCwgd21lc2csIFNMRUVQUV9TTEVFUCwgMCk7Ci0JaWYgKHNi dCAhPSAwKQorCWlmIChzYnQgIT0gMCkgeworCQlzbGVlcHFfcmVsZWFzZShpZGVudCk7CiAJCXNs ZWVwcV9zZXRfdGltZW91dF9zYnQoaWRlbnQsIHNidCwgcHIsIGZsYWdzKTsKKwkJc2xlZXBxX2xv Y2soaWRlbnQpOworCX0KIAogCS8qCiAJICogQ2FuJ3QgY2FsbCBrdHJhY2Ugd2l0aCBhbnkgc3Bp biBsb2NrcyBoZWxkIHNvIGl0IGNhbiBsb2NrIHRoZQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBz X2hlYWQvc2hhcmUvbWFuL21hbjkvTWFrZWZpbGUgYi9wcm9qZWN0cy9ocHNfaGVhZC9zaGFyZS9t YW4vbWFuOS9NYWtlZmlsZQotLS0gYS9wcm9qZWN0cy9ocHNfaGVhZC9zaGFyZS9tYW4vbWFuOS9N YWtlZmlsZQorKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zaGFyZS9tYW4vbWFuOS9NYWtlZmlsZQpA QCAtMTU3Myw2ICsxNTczLDcgQEAKIAl0aW1lb3V0LjkgY2FsbG91dF9hY3RpdmUuOSBcCiAJdGlt ZW91dC45IGNhbGxvdXRfZGVhY3RpdmF0ZS45IFwKIAl0aW1lb3V0LjkgY2FsbG91dF9kcmFpbi45 IFwKKwl0aW1lb3V0LjkgY2FsbG91dF9kcmFpbl9hc3luYy45IFwKIAl0aW1lb3V0LjkgY2FsbG91 dF9oYW5kbGVfaW5pdC45IFwKIAl0aW1lb3V0LjkgY2FsbG91dF9pbml0LjkgXAogCXRpbWVvdXQu OSBjYWxsb3V0X2luaXRfbXR4LjkgXApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvaHBzX2hlYWQvc2hh cmUvbWFuL21hbjkvdGltZW91dC45IGIvcHJvamVjdHMvaHBzX2hlYWQvc2hhcmUvbWFuL21hbjkv dGltZW91dC45Ci0tLSBhL3Byb2plY3RzL2hwc19oZWFkL3NoYXJlL21hbi9tYW45L3RpbWVvdXQu OQorKysgYi9wcm9qZWN0cy9ocHNfaGVhZC9zaGFyZS9tYW4vbWFuOS90aW1lb3V0LjkKQEAgLTI5 LDEzICsyOSwxNCBAQAogLlwiCiAuXCIgJEZyZWVCU0QkCiAuXCIKLS5EZCBPY3RvYmVyIDgsIDIw MTQKKy5EZCBKYW51YXJ5IDI0LCAyMDE1CiAuRHQgVElNRU9VVCA5CiAuT3MKIC5TaCBOQU1FCiAu Tm0gY2FsbG91dF9hY3RpdmUgLAogLk5tIGNhbGxvdXRfZGVhY3RpdmF0ZSAsCiAuTm0gY2FsbG91 dF9kcmFpbiAsCisuTm0gY2FsbG91dF9kcmFpbl9hc3luYyAsCiAuTm0gY2FsbG91dF9oYW5kbGVf aW5pdCAsCiAuTm0gY2FsbG91dF9pbml0ICwKIC5ObSBjYWxsb3V0X2luaXRfbXR4ICwKQEAgLTYz LDI1NiArNjQsMjM0IEBACiAuSW4gc3lzL3N5c3RtLmgKIC5CZCAtbGl0ZXJhbAogdHlwZWRlZiB2 b2lkIHRpbWVvdXRfdCAodm9pZCAqKTsKK3R5cGVkZWYgdm9pZCBjYWxsb3V0X2Z1bmNfdCAodm9p ZCAqKTsKIC5FZAotLkZ0IGludAotLkZuIGNhbGxvdXRfYWN0aXZlICJzdHJ1Y3QgY2FsbG91dCAq YyIKLS5GdCB2b2lkCi0uRm4gY2FsbG91dF9kZWFjdGl2YXRlICJzdHJ1Y3QgY2FsbG91dCAqYyIK LS5GdCBpbnQKLS5GbiBjYWxsb3V0X2RyYWluICJzdHJ1Y3QgY2FsbG91dCAqYyIKLS5GdCB2b2lk Ci0uRm4gY2FsbG91dF9oYW5kbGVfaW5pdCAic3RydWN0IGNhbGxvdXRfaGFuZGxlICpoYW5kbGUi Ci0uQmQgLWxpdGVyYWwKLXN0cnVjdCBjYWxsb3V0X2hhbmRsZSBoYW5kbGUgPSBDQUxMT1VUX0hB TkRMRV9JTklUSUFMSVpFUigmaGFuZGxlKTsKLS5FZAotLkZ0IHZvaWQKLS5GbiBjYWxsb3V0X2lu aXQgInN0cnVjdCBjYWxsb3V0ICpjIiAiaW50IG1wc2FmZSIKLS5GdCB2b2lkCi0uRm4gY2FsbG91 dF9pbml0X210eCAic3RydWN0IGNhbGxvdXQgKmMiICJzdHJ1Y3QgbXR4ICptdHgiICJpbnQgZmxh Z3MiCi0uRnQgdm9pZAotLkZuIGNhbGxvdXRfaW5pdF9ybSAic3RydWN0IGNhbGxvdXQgKmMiICJz dHJ1Y3Qgcm1sb2NrICpybSIgImludCBmbGFncyIKLS5GdCB2b2lkCi0uRm4gY2FsbG91dF9pbml0 X3J3ICJzdHJ1Y3QgY2FsbG91dCAqYyIgInN0cnVjdCByd2xvY2sgKnJ3IiAiaW50IGZsYWdzIgot LkZ0IGludAotLkZuIGNhbGxvdXRfcGVuZGluZyAic3RydWN0IGNhbGxvdXQgKmMiCi0uRnQgaW50 Ci0uRm4gY2FsbG91dF9yZXNldCAic3RydWN0IGNhbGxvdXQgKmMiICJpbnQgdGlja3MiICJ0aW1l b3V0X3QgKmZ1bmMiICJ2b2lkICphcmciCi0uRnQgaW50Ci0uRm4gY2FsbG91dF9yZXNldF9jdXJj cHUgInN0cnVjdCBjYWxsb3V0ICpjIiAiaW50IHRpY2tzIiAidGltZW91dF90ICpmdW5jIiBcCi0i dm9pZCAqYXJnIgotLkZ0IGludAotLkZuIGNhbGxvdXRfcmVzZXRfb24gInN0cnVjdCBjYWxsb3V0 ICpjIiAiaW50IHRpY2tzIiAidGltZW91dF90ICpmdW5jIiBcCi0idm9pZCAqYXJnIiAiaW50IGNw dSIKLS5GdCBpbnQKLS5GbiBjYWxsb3V0X3Jlc2V0X3NidCAic3RydWN0IGNhbGxvdXQgKmMiICJz YmludGltZV90IHNidCIgXAotInNiaW50aW1lX3QgcHIiICJ0aW1lb3V0X3QgKmZ1bmMiICJ2b2lk ICphcmciICJpbnQgZmxhZ3MiCi0uRnQgaW50Ci0uRm4gY2FsbG91dF9yZXNldF9zYnRfY3VyY3B1 ICJzdHJ1Y3QgY2FsbG91dCAqYyIgInNiaW50aW1lX3Qgc2J0IiBcCi0ic2JpbnRpbWVfdCBwciIg InRpbWVvdXRfdCAqZnVuYyIgInZvaWQgKmFyZyIgImludCBmbGFncyIKLS5GdCBpbnQKLS5GbiBj YWxsb3V0X3Jlc2V0X3NidF9vbiAic3RydWN0IGNhbGxvdXQgKmMiICJzYmludGltZV90IHNidCIg XAotInNiaW50aW1lX3QgcHIiICJ0aW1lb3V0X3QgKmZ1bmMiICJ2b2lkICphcmciICJpbnQgY3B1 IiAiaW50IGZsYWdzIgotLkZ0IGludAotLkZuIGNhbGxvdXRfc2NoZWR1bGUgInN0cnVjdCBjYWxs b3V0ICpjIiAiaW50IHRpY2tzIgotLkZ0IGludAotLkZuIGNhbGxvdXRfc2NoZWR1bGVfY3VyY3B1 ICJzdHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNrcyIKLS5GdCBpbnQKLS5GbiBjYWxsb3V0X3Nj aGVkdWxlX29uICJzdHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNrcyIgImludCBjcHUiCi0uRnQg aW50Ci0uRm4gY2FsbG91dF9zY2hlZHVsZV9zYnQgInN0cnVjdCBjYWxsb3V0ICpjIiAic2JpbnRp bWVfdCBzYnQiIFwKLSJzYmludGltZV90IHByIiAiaW50IGZsYWdzIgotLkZ0IGludAotLkZuIGNh bGxvdXRfc2NoZWR1bGVfc2J0X2N1cmNwdSAic3RydWN0IGNhbGxvdXQgKmMiICJzYmludGltZV90 IHNidCIgXAotInNiaW50aW1lX3QgcHIiICJpbnQgZmxhZ3MiCi0uRnQgaW50Ci0uRm4gY2FsbG91 dF9zY2hlZHVsZV9zYnRfb24gInN0cnVjdCBjYWxsb3V0ICpjIiAic2JpbnRpbWVfdCBzYnQiIFwK LSJzYmludGltZV90IHByIiAiaW50IGNwdSIgImludCBmbGFncyIKLS5GdCBpbnQKLS5GbiBjYWxs b3V0X3N0b3AgInN0cnVjdCBjYWxsb3V0ICpjIgotLkZ0IHN0cnVjdCBjYWxsb3V0X2hhbmRsZQot LkZuIHRpbWVvdXQgInRpbWVvdXRfdCAqZnVuYyIgInZvaWQgKmFyZyIgImludCB0aWNrcyIKLS5G dCB2b2lkCi0uRm4gdW50aW1lb3V0ICJ0aW1lb3V0X3QgKmZ1bmMiICJ2b2lkICphcmciICJzdHJ1 Y3QgY2FsbG91dF9oYW5kbGUgaGFuZGxlIgogLlNoIERFU0NSSVBUSU9OCiBUaGUKIC5ObSBjYWxs b3V0Ci1BUEkgaXMgdXNlZCB0byBzY2hlZHVsZSBhIGNhbGwgdG8gYW4gYXJiaXRyYXJ5IGZ1bmN0 aW9uIGF0IGEgc3BlY2lmaWMKLXRpbWUgaW4gdGhlIGZ1dHVyZS4KLUNvbnN1bWVycyBvZiB0aGlz IEFQSSBhcmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUgYSBjYWxsb3V0IHN0cnVjdHVyZQotLlBxIHN0 cnVjdCBjYWxsb3V0CitBUEkgaXMgdXNlZCB0byBzY2hlZHVsZSBhIG9uZS10aW1lIGNhbGwgdG8g YW4gYXJiaXRyYXJ5IGZ1bmN0aW9uIGF0IGEKK3NwZWNpZmljIHRpbWUgaW4gdGhlIGZ1dHVyZS4K K0NvbnN1bWVycyBvZiB0aGlzIEFQSSBhcmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUgYQorLkZ0IHN0 cnVjdCBjYWxsb3V0CiBmb3IgZWFjaCBwZW5kaW5nIGZ1bmN0aW9uIGludm9jYXRpb24uCi1UaGlz IHN0cnVjdHVyZSBzdG9yZXMgc3RhdGUgYWJvdXQgdGhlIHBlbmRpbmcgZnVuY3Rpb24gaW52b2Nh dGlvbiBpbmNsdWRpbmcKLXRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYW5kIHRoZSB0aW1lIGF0 IHdoaWNoIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgaW52b2tlZC4KLVBlbmRpbmcgZnVuY3Rpb24g Y2FsbHMgY2FuIGJlIGNhbmNlbGxlZCBvciByZXNjaGVkdWxlZCB0byBhIGRpZmZlcmVudCB0aW1l LgotSW4gYWRkaXRpb24sCi1hIGNhbGxvdXQgc3RydWN0dXJlIG1heSBiZSByZXVzZWQgdG8gc2No ZWR1bGUgYSBuZXcgZnVuY3Rpb24gY2FsbCBhZnRlciBhCi1zY2hlZHVsZWQgY2FsbCBpcyBjb21w bGV0ZWQuCi0uUHAKLUNhbGxvdXRzIG9ubHkgcHJvdmlkZSBhIHNpbmdsZS1zaG90IG1vZGUuCi1J ZiBhIGNvbnN1bWVyIHJlcXVpcmVzIGEgcGVyaW9kaWMgdGltZXIsCi1pdCBtdXN0IGV4cGxpY2l0 bHkgcmVzY2hlZHVsZSBlYWNoIGZ1bmN0aW9uIGNhbGwuCi1UaGlzIGlzIG5vcm1hbGx5IGRvbmUg YnkgcmVzY2hlZHVsaW5nIHRoZSBzdWJzZXF1ZW50IGNhbGwgd2l0aGluIHRoZSBjYWxsZWQKLWZ1 bmN0aW9uLgotLlBwCi1DYWxsb3V0IGZ1bmN0aW9ucyBtdXN0IG5vdCBzbGVlcC4KLVRoZXkgbWF5 IG5vdCBhY3F1aXJlIHNsZWVwYWJsZSBsb2NrcywKLXdhaXQgb24gY29uZGl0aW9uIHZhcmlhYmxl cywKLXBlcmZvcm0gYmxvY2tpbmcgYWxsb2NhdGlvbiByZXF1ZXN0cywKLW9yIGludm9rZSBhbnkg b3RoZXIgYWN0aW9uIHRoYXQgbWlnaHQgc2xlZXAuCi0uUHAKLUVhY2ggY2FsbG91dCBzdHJ1Y3R1 cmUgbXVzdCBiZSBpbml0aWFsaXplZCBieQotLkZuIGNhbGxvdXRfaW5pdCAsCi0uRm4gY2FsbG91 dF9pbml0X210eCAsCi0uRm4gY2FsbG91dF9pbml0X3JtICwKLW9yCi0uRm4gY2FsbG91dF9pbml0 X3J3Ci1iZWZvcmUgaXQgaXMgcGFzc2VkIHRvIGFueSBvZiB0aGUgb3RoZXIgY2FsbG91dCBmdW5j dGlvbnMuCiBUaGUKKy5GdCBzdHJ1Y3QgY2FsbG91dAorc3RvcmVzIHRoZSBmdWxsIHN0YXRlIGFi b3V0IGFueSBwZW5kaW5nIGZ1bmN0aW9uIGNhbGwgYW5kCittdXN0IGJlIGRyYWluZWQgYnkgYSBj YWxsIHRvCisuRm4gY2FsbG91dF9kcmFpbgorb3IKKy5GbiBjYWxsb3V0X2RyYWluX2FzeW5jCiti ZWZvcmUgZnJlZWluZy4KKy5TaCBJTklUSUFMSVpBVElPTgorLkZ0IHZvaWQKKy5GbiBjYWxsb3V0 X2hhbmRsZV9pbml0ICJzdHJ1Y3QgY2FsbG91dF9oYW5kbGUgKmhhbmRsZSIKK1RoaXMgZnVuY3Rp b24gaXMgZGVwcmVjYXRlZC4KK1BsZWFzZSB1c2UKIC5GbiBjYWxsb3V0X2luaXQKLWZ1bmN0aW9u IGluaXRpYWxpemVzIGEgY2FsbG91dCBzdHJ1Y3R1cmUgaW4KLS5GYSBjCi10aGF0IGlzIG5vdCBh c3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsb2NrLgoraW5zdGVhZC4KK1RoaXMgZnVuY3Rpb24g aXMgdXNlZCB0byBwcmVwYXJlIGEKKy5GdCBzdHJ1Y3QgY2FsbG91dF9oYW5kbGUKK2JlZm9yZSBp dCBjYW4gYmUgdXNlZCB0aGUgZmlyc3QgdGltZS4KK0lmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IG9uIGEgcGVuZGluZyB0aW1lb3V0LCB0aGUgcGVuZGluZyB0aW1lb3V0CitjYW5ub3QgYmUgY2Fu Y2VsbGVkIGFuZCB0aGUKKy5GbiB1bnRpbWVvdXQKK2Z1bmN0aW9uIHdpbGwgcmV0dXJuIGFzIGlm IG5vIHRpbWVvdXQgd2FzIHBlbmRpbmcuCisuUHAKKy5GbiBDQUxMT1VUX0hBTkRMRV9JTklUSUFM SVpFUiAiJmhhbmRsZSIKK1RoaXMgbWFjcm8gaXMgZGVwcmVjYXRlZC4KK1RoaXMgbWFjcm8gaXMg dXNlZCB0byBzdGF0aWNhbGx5IGluaXRpYWxpemUgYQorLkZ0IHN0cnVjdCBjYWxsb3V0X2hhbmRs ZSAuCitQbGVhc2UgdXNlCisuRm4gY2FsbG91dF9pbml0CitpbnN0ZWFkLgorLlBwCisuRnQgdm9p ZAorLkZuIGNhbGxvdXRfaW5pdCAic3RydWN0IGNhbGxvdXQgKmMiICJpbnQgbXBzYWZlIgorVGhp cyBmdW5jdGlvbiBwcmVwYXJlcyBhCisuRnQgc3RydWN0IGNhbGxvdXQKK2JlZm9yZSBpdCBjYW4g YmUgdXNlZC4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gdGhlIGNhbGxv dXQgaXMgcGVuZGluZyBhIHRpbWVvdXQuCiBJZiB0aGUKIC5GYSBtcHNhZmUKLWFyZ3VtZW50IGlz IHplcm8sCi10aGUgY2FsbG91dCBzdHJ1Y3R1cmUgaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUKLS5E cSBtdWx0aS1wcm9jZXNzb3Igc2FmZSA7Ci1hbmQgdGhlIEdpYW50IGxvY2sgd2lsbCBiZSBhY3F1 aXJlZCBiZWZvcmUgY2FsbGluZyB0aGUgY2FsbG91dCBmdW5jdGlvbgotYW5kIHJlbGVhc2VkIHdo ZW4gdGhlIGNhbGxvdXQgZnVuY3Rpb24gcmV0dXJucy4KLS5QcAotVGhlCi0uRm4gY2FsbG91dF9p bml0X210eCAsCi0uRm4gY2FsbG91dF9pbml0X3JtICwKLWFuZAotLkZuIGNhbGxvdXRfaW5pdF9y dwotZnVuY3Rpb25zIGluaXRpYWxpemUgYSBjYWxsb3V0IHN0cnVjdHVyZSBpbgotLkZhIGMKLXRo YXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgbG9jay4KLVRoZSBsb2NrIGlzIHNwZWNp ZmllZCBieSB0aGUKLS5GYSBtdHggLAotLkZhIHJtICwKLW9yCi0uRmEgcncKLXBhcmFtZXRlci4K LVRoZSBhc3NvY2lhdGVkIGxvY2sgbXVzdCBiZSBoZWxkIHdoaWxlIHN0b3BwaW5nIG9yIHJlc2No ZWR1bGluZyB0aGUKLWNhbGxvdXQuCi1UaGUgY2FsbG91dCBzdWJzeXN0ZW0gYWNxdWlyZXMgdGhl IGFzc29jaWF0ZWQgbG9jayBiZWZvcmUgY2FsbGluZyB0aGUKLWNhbGxvdXQgZnVuY3Rpb24gYW5k IHJlbGVhc2VzIGl0IGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLgotSWYgdGhlIGNhbGxvdXQg d2FzIGNhbmNlbGxlZCB3aGlsZSB0aGUgY2FsbG91dCBzdWJzeXN0ZW0gd2FpdGVkIGZvciB0aGUK LWFzc29jaWF0ZWQgbG9jaywKLXRoZSBjYWxsb3V0IGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQsCi1h bmQgdGhlIGFzc29jaWF0ZWQgbG9jayBpcyByZWxlYXNlZC4KLVRoaXMgZW5zdXJlcyB0aGF0IHN0 b3BwaW5nIG9yIHJlc2NoZWR1bGluZyB0aGUgY2FsbG91dCB3aWxsIGFib3J0IGFueQotcHJldmlv dXNseSBzY2hlZHVsZWQgaW52b2NhdGlvbi4KLS5QcAotT25seSByZWd1bGFyIG11dGV4ZXMgbWF5 IGJlIHVzZWQgd2l0aAotLkZuIGNhbGxvdXRfaW5pdF9tdHggOwotc3BpbiBtdXRleGVzIGFyZSBu b3Qgc3VwcG9ydGVkLgotQSBzbGVlcGFibGUgcmVhZC1tb3N0bHkgbG9jawotLlBvCi1vbmUgaW5p dGlhbGl6ZWQgd2l0aCB0aGUKLS5EdiBSTV9TTEVFUEFCTEUKLWZsYWcKLS5QYwotbWF5IG5vdCBi ZSB1c2VkIHdpdGgKLS5GbiBjYWxsb3V0X2luaXRfcm0gLgotU2ltaWxhcmx5LCBvdGhlciBzbGVl cGFibGUgbG9jayB0eXBlcyBzdWNoIGFzCi0uWHIgc3ggOQotYW5kCi0uWHIgbG9ja21nciA5Ci1j YW5ub3QgYmUgdXNlZCB3aXRoIGNhbGxvdXRzIGJlY2F1c2Ugc2xlZXBpbmcgaXMgbm90IHBlcm1p dHRlZCBpbgotdGhlIGNhbGxvdXQgc3Vic3lzdGVtLgorYXJndW1lbnQgaXMgbm9uLXplcm8sIHRo ZSBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIHJ1bm5pbmcgdW5sb2NrZWQKK2FuZCB0aGUgY2Fs bGJhY2sgaXMgc28tY2FsbGVkICJtcHNhZmUiLgorLkJmIFN5CitJdCBpcyB0aGUgYXBwbGljYXRp b24ncyBlbnRpcmUgcmVzcG9uc2liaWxpdHkgdG8gbm90IGNhbGwgYW55CisuRm4gY2FsbG91dF94 eHgKK2Z1bmN0aW9ucywgaW5jbHVkaW5nIHRoZQorLkZuIGNhbGxvdXRfZHJhaW4KK2Z1bmN0aW9u LCBzaW11bHRhbmVvdXNseSBvbiB0aGUgc2FtZSBjYWxsb3V0IHdoZW4gdGhlCisuRmEgbXBzYWZl Cithcmd1bWVudCBpcyBub24temVyby4KK090aGVyd2lzZSwgdW5kZWZpbmVkIGJlaGF2aW9yIGNh biBoYXBwZW4uCitBdm9pZCBzaW11bHRhbmVvdXMgY2FsbHMgYnkgb2J0YWluaW5nIGFuIGV4Y2x1 c2l2ZSBsb2NrIGJlZm9yZSBjYWxsaW5nCithbnkKKy5GbiBjYWxsb3V0X3h4eAorZnVuY3Rpb25z IG90aGVyIHRoYW4gdGhlCisuRm4gY2FsbG91dF9kcmFpbgorZnVuY3Rpb24uCisuRWYKK0lmIHRo ZQorLkZhIG1wc2FmZQorYXJndW1lbnQgaXMgemVybywgdGhlIEdpYW50IG11dGV4IHdpbGwgYmUg bG9ja2VkIGJlZm9yZSB0aGUgY2FsbGJhY2sKK2Z1bmN0aW9uIGlzIGNhbGxlZC4KK0lmIHRoZQor LkZhIG1wc2FmZQorYXJndW1lbnQgaXMgemVybywgdGhlIEdpYW50IG11dGV4IGlzIGV4cGVjdGVk IHRvIGJlIGxvY2tlZCB3aGVuIGNhbGxpbmcKK2FueQorLkZuIGNhbGxvdXRfeHh4CitmdW5jdGlv bnMgd2hpY2ggc3RhcnQgYW5kIHN0b3AgYSBjYWxsb3V0IG90aGVyIHRoYW4gdGhlCisuRm4gY2Fs bG91dF9kcmFpbgorZnVuY3Rpb24uCiAuUHAKLVRoZXNlCisuRnQgdm9pZAorLkZuIGNhbGxvdXRf aW5pdF9tdHggInN0cnVjdCBjYWxsb3V0ICpjIiAic3RydWN0IG10eCAqbXR4IiAiaW50IGZsYWdz IgorVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBhCisuRnQgc3RydWN0IGNhbGxvdXQKK2JlZm9yZSBp dCBjYW4gYmUgdXNlZC4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gdGhl IGNhbGxvdXQgaXMgcGVuZGluZyBhIHRpbWVvdXQuCitUaGUKKy5GYSBtdHgKK2FyZ3VtZW50IGlz IGEgcG9pbnRlciB0byBhIHZhbGlkIHNwaW5sb2NrIHR5cGUgb2YgbXV0ZXggb3IgYSB2YWxpZAor cmVndWxhciBub24tc2xlZXBhYmxlIG11dGV4IHdoaWNoIHRoZSBjYWxsYmFjayBzdWJzeXN0ZW0g d2lsbCBsb2NrCitiZWZvcmUgY2FsbGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCitUaGUgc3Bl Y2lmaWVkIG11dGV4IGlzIGV4cGVjdGVkIHRvIGJlIGxvY2tlZCB3aGVuIGNhbGxpbmcgYW55Cisu Rm4gY2FsbG91dF94eHgKK2Z1bmN0aW9ucyB3aGljaCBzdGFydCBhbmQgc3RvcCBhIGNhbGxvdXQg b3RoZXIgdGhhbiB0aGUKKy5GbiBjYWxsb3V0X2RyYWluCitmdW5jdGlvbi4KK1ZhbGlkCiAuRmEg ZmxhZ3MKLW1heSBiZSBzcGVjaWZpZWQgZm9yCi0uRm4gY2FsbG91dF9pbml0X210eCAsCi0uRm4g Y2FsbG91dF9pbml0X3JtICwKLW9yCi0uRm4gY2FsbG91dF9pbml0X3J3IDoKK2FyZToKIC5CbCAt dGFnIC13aWR0aCAiLkR2IENBTExPVVRfUkVUVVJOVU5MT0NLRUQiCiAuSXQgRHYgQ0FMTE9VVF9S RVRVUk5VTkxPQ0tFRAotVGhlIGNhbGxvdXQgZnVuY3Rpb24gd2lsbCByZWxlYXNlIHRoZSBhc3Nv Y2lhdGVkIGxvY2sgaXRzZWxmLAotc28gdGhlIGNhbGxvdXQgc3Vic3lzdGVtIHNob3VsZCBub3Qg YXR0ZW1wdCB0byB1bmxvY2sgaXQKLWFmdGVyIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIHJldHVybnMu Ci0uSXQgRHYgQ0FMTE9VVF9TSEFSRURMT0NLCi1UaGUgbG9jayBpcyBvbmx5IGFjcXVpcmVkIGlu IHJlYWQgbW9kZSB3aGVuIHJ1bm5pbmcgdGhlIGNhbGxvdXQgaGFuZGxlci4KLVRoaXMgZmxhZyBp cyBpZ25vcmVkIGJ5Ci0uRm4gY2FsbG91dF9pbml0X210eCAuCitUaGUgY2FsbG91dCBmdW5jdGlv biBpcyBhc3N1bWVkIHRvIGhhdmUgcmVsZWFzZWQgdGhlIHNwZWNpZmllZCBtdXRleAorYmVmb3Jl IHJldHVybmluZy4KKy5JdCBEdiAwCitUaGUgY2FsbG91dCBzdWJzeXN0ZW0gd2lsbCByZWxlYXNl IHRoZSBzcGVjaWZpZWQgbXV0ZXggYWZ0ZXIgdGhlCitjYWxsb3V0IGZ1bmN0aW9uIGhhcyByZXR1 cm5lZC4KIC5FbAogLlBwCi1UaGUgZnVuY3Rpb24KLS5GbiBjYWxsb3V0X3N0b3AKLWNhbmNlbHMg YSBjYWxsb3V0Ci0uRmEgYwotaWYgaXQgaXMgY3VycmVudGx5IHBlbmRpbmcuCi1JZiB0aGUgY2Fs bG91dCBpcyBwZW5kaW5nLCB0aGVuCi0uRm4gY2FsbG91dF9zdG9wCi1yZXR1cm5zIGEgbm9uLXpl cm8gdmFsdWUuCi1JZiB0aGUgY2FsbG91dCBpcyBub3Qgc2V0LAotaGFzIGFscmVhZHkgYmVlbiBz ZXJ2aWNlZCwKLW9yIGlzIGN1cnJlbnRseSBiZWluZyBzZXJ2aWNlZCwKLXRoZW4gemVybyB3aWxs IGJlIHJldHVybmVkLgotSWYgdGhlIGNhbGxvdXQgaGFzIGFuIGFzc29jaWF0ZWQgbG9jaywKLXRo ZW4gdGhhdCBsb2NrIG11c3QgYmUgaGVsZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgot LlBwCi1UaGUgZnVuY3Rpb24KLS5GbiBjYWxsb3V0X2RyYWluCi1pcyBpZGVudGljYWwgdG8KLS5G biBjYWxsb3V0X3N0b3AKLWV4Y2VwdCB0aGF0IGl0IHdpbGwgd2FpdCBmb3IgdGhlIGNhbGxvdXQK LS5GYSBjCi10byBjb21wbGV0ZSBpZiBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgotVGhpcyBm dW5jdGlvbiBNVVNUIE5PVCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhbnkKLWxvY2tzIG9uIHdo aWNoIHRoZSBjYWxsb3V0IG1pZ2h0IGJsb2NrLCBvciBkZWFkbG9jayB3aWxsIHJlc3VsdC4KLU5v dGUgdGhhdCBpZiB0aGUgY2FsbG91dCBzdWJzeXN0ZW0gaGFzIGFscmVhZHkgYmVndW4gcHJvY2Vz c2luZyB0aGlzCi1jYWxsb3V0LCB0aGVuIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIG1heSBiZSBpbnZv a2VkIGJlZm9yZQotLkZuIGNhbGxvdXRfZHJhaW4KLXJldHVybnMuCi1Ib3dldmVyLCB0aGUgY2Fs bG91dCBzdWJzeXN0ZW0gZG9lcyBndWFyYW50ZWUgdGhhdCB0aGUgY2FsbG91dCB3aWxsIGJlCi1m dWxseSBzdG9wcGVkIGJlZm9yZQotLkZuIGNhbGxvdXRfZHJhaW4KLXJldHVybnMuCisuRnQgdm9p ZAorLkZuIGNhbGxvdXRfaW5pdF9ybSAic3RydWN0IGNhbGxvdXQgKmMiICJzdHJ1Y3Qgcm1sb2Nr ICpybSIgImludCBmbGFncyIKK1RoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0bworLkZuIGNhbGxv dXRfaW5pdF9tdHggLAorYnV0IGl0IGFjY2VwdHMgYSByZWFkLW1vc3RseSB0eXBlIG9mIGxvY2su CitUaGUgcmVhZC1tb3N0bHkgbG9jayBtdXN0IG5vdCBiZSBpbml0aWFsaXplZCB3aXRoIHRoZQor LkR2IFJNX1NMRUVQQUJMRQorZmxhZy4KIC5QcAotVGhlCisuRnQgdm9pZAorLkZuIGNhbGxvdXRf aW5pdF9ydyAic3RydWN0IGNhbGxvdXQgKmMiICJzdHJ1Y3Qgcndsb2NrICpydyIgImludCBmbGFn cyIKK1RoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0bworLkZuIGNhbGxvdXRfaW5pdF9tdHggLAor YnV0IGl0IGFjY2VwdHMgYSByZWFkL3dyaXRlIHR5cGUgb2YgbG9jay4KKy5TaCBTQ0hFRFVMSU5H IENBTExPVVRTCisuRnQgc3RydWN0IGNhbGxvdXRfaGFuZGxlCisuRm4gdGltZW91dCAidGltZW91 dF90ICpmdW5jIiAidm9pZCAqYXJnIiAiaW50IHRpY2tzIgorVGhpcyBmdW5jdGlvbiBpcyBkZXBy ZWNhdGVkLgorUGxlYXNlIHVzZQogLkZuIGNhbGxvdXRfcmVzZXQKLWFuZAotLkZuIGNhbGxvdXRf c2NoZWR1bGUKLWZ1bmN0aW9uIGZhbWlsaWVzIHNjaGVkdWxlIGEgZnV0dXJlIGZ1bmN0aW9uIGlu dm9jYXRpb24gZm9yIGNhbGxvdXQKLS5GYSBjIC4KLUlmCi0uRmEgYwotYWxyZWFkeSBoYXMgYSBw ZW5kaW5nIGNhbGxvdXQsCi1pdCBpcyBjYW5jZWxsZWQgYmVmb3JlIHRoZSBuZXcgaW52b2NhdGlv biBpcyBzY2hlZHVsZWQuCi1UaGVzZSBmdW5jdGlvbnMgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUg aWYgYSBwZW5kaW5nIGNhbGxvdXQgd2FzIGNhbmNlbGxlZAotYW5kIHplcm8gaWYgdGhlcmUgd2Fz IG5vIHBlbmRpbmcgY2FsbG91dC4KLUlmIHRoZSBjYWxsb3V0IGhhcyBhbiBhc3NvY2lhdGVkIGxv Y2ssCi10aGVuIHRoYXQgbG9jayBtdXN0IGJlIGhlbGQgd2hlbiBhbnkgb2YgdGhlc2UgZnVuY3Rp b25zIGFyZSBjYWxsZWQuCi0uUHAKLVRoZSB0aW1lIGF0IHdoaWNoIHRoZSBjYWxsb3V0IGZ1bmN0 aW9uIHdpbGwgYmUgaW52b2tlZCBpcyBkZXRlcm1pbmVkIGJ5Ci1laXRoZXIgdGhlCi0uRmEgdGlj a3MKLWFyZ3VtZW50IG9yIHRoZQotLkZhIHNidCAsCi0uRmEgcHIgLAotYW5kCi0uRmEgZmxhZ3MK LWFyZ3VtZW50cy4KLVdoZW4KLS5GYSB0aWNrcwotaXMgdXNlZCwKLXRoZSBjYWxsb3V0IGlzIHNj aGVkdWxlZCB0byBleGVjdXRlIGFmdGVyCitpbnN0ZWFkLgorVGhpcyBmdW5jdGlvbiBzY2hlZHVs ZXMgYSBjYWxsIHRvCisuRmEgZnVuYwordG8gdGFrZSBwbGFjZSBhZnRlcgogLkZhIHRpY2tzIE5z IE5vIC9oegogc2Vjb25kcy4KIE5vbi1wb3NpdGl2ZSB2YWx1ZXMgb2YKIC5GYSB0aWNrcwogYXJl IHNpbGVudGx5IGNvbnZlcnRlZCB0byB0aGUgdmFsdWUKIC5TcSAxIC4KLS5QcAogVGhlCi0uRmEg c2J0ICwKLS5GYSBwciAsCi1hbmQKLS5GYSBmbGFncwotYXJndW1lbnRzIHByb3ZpZGUgbW9yZSBj b250cm9sIG92ZXIgdGhlIHNjaGVkdWxlZCB0aW1lIGluY2x1ZGluZwotc3VwcG9ydCBmb3IgaGln aGVyIHJlc29sdXRpb24gdGltZXMsCi1zcGVjaWZ5aW5nIHRoZSBwcmVjaXNpb24gb2YgdGhlIHNj aGVkdWxlZCB0aW1lLAotYW5kIHNldHRpbmcgYW4gYWJzb2x1dGUgZGVhZGxpbmUgaW5zdGVhZCBv ZiBhIHJlbGF0aXZlIHRpbWVvdXQuCi1UaGUgY2FsbG91dCBpcyBzY2hlZHVsZWQgdG8gZXhlY3V0 ZSBpbiBhIHRpbWUgd2luZG93IHdoaWNoIGJlZ2lucyBhdAotdGhlIHRpbWUgc3BlY2lmaWVkIGlu CisuRmEgZnVuYworYXJndW1lbnQgaXMgYSB2YWxpZCBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhh dCB0YWtlcyBhIHNpbmdsZQorLkZhIHZvaWQgKgorYXJndW1lbnQuCitVcG9uIGludm9jYXRpb24s IHRoZQorLkZhIGZ1bmMKK2Z1bmN0aW9uIHdpbGwgcmVjZWl2ZQorLkZhIGFyZworYXMgaXRzIG9u bHkgYXJndW1lbnQuCitUaGUgR2lhbnQgbG9jayBpcyBsb2NrZWQgd2hlbiB0aGUKKy5GYSBhcmcK K2Z1bmN0aW9uIGlzIGludm9rZWQgYW5kIHNob3VsZCBub3QgYmUgdW5sb2NrZWQgYnkgdGhpcyBm dW5jdGlvbi4KK1RoZSByZXR1cm5lZCB2YWx1ZSBmcm9tCisuRm4gdGltZW91dAoraXMgYQorLkZ0 IHN0cnVjdCBjYWxsb3V0X2hhbmRsZQorc3RydWN0dXJlIHdoaWNoIGNhbiBiZSB1c2VkIGluIGNv bmp1bmN0aW9uIHdpdGggdGhlCisuRm4gdW50aW1lb3V0CitmdW5jdGlvbiB0byByZXF1ZXN0IHRo YXQgYSBzY2hlZHVsZWQgdGltZW91dCBiZSBjYW5jZWxsZWQuCitBcyBoYW5kbGVzIGFyZSByZWN5 Y2xlZCBieSB0aGUgc3lzdGVtLCBpdCBpcyBwb3NzaWJsZSwgYWx0aG91Z2ggdW5saWtlbHksCit0 aGF0IGEgaGFuZGxlIGZyb20gb25lIGludm9jYXRpb24gb2YKKy5GbiB0aW1lb3V0CittYXkgbWF0 Y2ggdGhlIGhhbmRsZSBvZiBhbm90aGVyIGludm9jYXRpb24gb2YKKy5GbiB0aW1lb3V0CitpZiBi b3RoIGNhbGxzIHVzZWQgdGhlIHNhbWUgZnVuY3Rpb24gcG9pbnRlciBhbmQgYXJndW1lbnQsIGFu ZCB0aGUgZmlyc3QKK3RpbWVvdXQgaXMgZXhwaXJlZCBvciBjYW5jZWxsZWQgYmVmb3JlIHRoZSBz ZWNvbmQgY2FsbC4KK1BsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZnVuY3Rpb24gYW5kIGFyZ3VtZW50 IHBvaW50ZXJzIGFyZSB1bmlxdWUgd2hlbiB1c2luZyB0aGlzIGZ1bmN0aW9uLgorLlBwCisuRnQg aW50CisuRm4gY2FsbG91dF9yZXNldCAic3RydWN0IGNhbGxvdXQgKmMiICJpbnQgdGlja3MiICJj YWxsb3V0X2Z1bmNfdCAqZnVuYyIgInZvaWQgKmFyZyIKK1RoaXMgZnVuY3Rpb24gaXMgdXNlZCB0 byBzY2hlZHVsZSBvciByZS1zY2hlZHVsZSBhIGNhbGxvdXQuCitUaGlzIGZ1bmN0aW9uIGF0IGZp cnN0IHN0b3BzIHRoZSBjYWxsb3V0IGdpdmVuIGJ5IHRoZQorLkZhIGMKK2FyZ3VtZW50LCBpZiBh bnkuCitUaGVuIGl0IHdpbGwgc3RhcnQgdGhlIGNhbGxvdXQgZ2l2ZW4gYnkgdGhlCisuRmEgYwor YXJndW1lbnQuCitUaGUgcmVsYXRpdmUgdGltZSB1bnRpbCB0aGUgdGltZW91dCBjYWxsYmFjayBo YXBwZW5zIGlzIGdpdmVuIGJ5IHRoZQorLkZhIHRpY2tzCithcmd1bWVudC4KK1RoZSBudW1iZXIg b2YgdGlja3MgaW4gYSBzZWNvbmQgaXMgZGVmaW5lZCBieQorLkR2IGh6CithbmQgY2FuIHZhcnkg ZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLXplcm8g dmFsdWUgaWYgdGhlIGdpdmVuIGNhbGxvdXQgd2FzIHBlbmRpbmcgYW5kCit0aGUgY2FsbGJhY2sg ZnVuY3Rpb24gd2FzIHByZXZlbnRlZCBmcm9tIGJlaW5nIGNhbGxlZC4KK090aGVyd2lzZSwgYSB2 YWx1ZSBvZiB6ZXJvIGlzIHJldHVybmVkLgorSWYgYSBsb2NrIGlzIGFzc29jaWF0ZWQgd2l0aCB0 aGUgY2FsbG91dCBnaXZlbiBieSB0aGUKKy5GYSBjCithcmd1bWVudCBhbmQgaXQgaXMgZXhjbHVz aXZseSBsb2NrZWQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhpcworZnVuY3Rpb24g d2lsbCBhbHdheXMgZW5zdXJlIHRoYXQgcHJldmlvdXMgY2FsbGJhY2sgZnVuY3Rpb24sIGlmIGFu eSwKK2lzIG5ldmVyIHJlYWNoZWQuCitJbiBvdGhlciB3b3JkcywgdGhlIGNhbGxvdXQgd2lsbCBi ZSBhdG9taWNhbGx5IHJlc3RhcnRlZC4KK090aGVyd2lzZSwgdGhlcmUgaXMgbm8gc3VjaCBndWFy YW50ZWUuCitUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgZ2l2ZW4gYnkKKy5GYSBmdW5jCithbmQg aXRzIGZ1bmN0aW9uIGFyZ3VtZW50IGlzIGdpdmVuIGJ5CisuRmEgYXJnIC4KKy5QcAorLkZ0IGlu dAorLkZuIGNhbGxvdXRfcmVzZXRfY3VyY3B1ICJzdHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNr cyIgImNhbGxvdXRfZnVuY190ICpmdW5jIiBcCisidm9pZCAqYXJnIgorVGhpcyBmdW5jdGlvbiB3 b3JrcyB0aGUgc2FtZSBsaWtlIHRoZQorLkZuIGNhbGxvdXRfcmVzZXQKK2Z1bmN0aW9uIGV4Y2Vw dCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZ2l2ZW4gYnkgdGhlCisuRmEgZnVuYworYXJndW1lbnQg d2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgc2FtZSBDUFUgd2hpY2ggY2FsbGVkIHRoaXMgZnVuY3Rp b24uCisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3Jlc2V0X29uICJzdHJ1Y3QgY2FsbG91dCAq YyIgImludCB0aWNrcyIgImNhbGxvdXRfZnVuY190ICpmdW5jIiBcCisidm9pZCAqYXJnIiAiaW50 IGNwdSIKK1RoaXMgZnVuY3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBjYWxsb3V0 X3Jlc2V0CitmdW5jdGlvbiBleGNlcHQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGdpdmVuIGJ5IHRo ZQorLkZhIGZ1bmMKK2FyZ3VtZW50IHdpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIENQVSBnaXZlbiBi eSB0aGUKKy5GYSBjcHUKK2FyZ3VtZW50LgorLlBwCisuRnQgaW50CisuRm4gY2FsbG91dF9yZXNl dF9zYnQgInN0cnVjdCBjYWxsb3V0ICpjIiAic2JpbnRpbWVfdCBzYnQiIFwKKyJzYmludGltZV90 IHByIiAiY2FsbG91dF9mdW5jX3QgKmZ1bmMiICJ2b2lkICphcmciICJpbnQgZmxhZ3MiCitUaGlz IGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGxpa2UgdGhlCisuRm4gY2FsbG91dF9yZXNldAorZnVu Y3Rpb24gZXhjZXB0IHRoZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSB0aW1lIGFmdGVyIHdoaWNoIHRo ZSB0aW1lb3V0CitjYWxsYmFjayBzaG91bGQgaGFwcGVuIGlzIGdpdmVuIGJ5IHRoZQogLkZhIHNi dAotYW5kIGV4dGVuZHMgZm9yIHRoZSBhbW91bnQgb2YgdGltZSBzcGVjaWZpZWQgaW4KK2FyZ3Vt ZW50IGFuZCBleHRlbmRzIGZvciB0aGUgYW1vdW50IG9mIHRpbWUgc3BlY2lmaWVkIGluCiAuRmEg cHIgLgorVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gaGlnaCBwcmVjaXNpb24gdGltZW91dHMg YXJlIG5lZWRlZC4KIElmCiAuRmEgc2J0CiBzcGVjaWZpZXMgYSB0aW1lIGluIHRoZSBwYXN0LApA QCAtMzIyLDEyICszMDEsMTMgQEAKIGFsbG93cyB0aGUgY2FsbG91dCBzdWJzeXN0ZW0gdG8gY29h bGVzY2UgY2FsbG91dHMgc2NoZWR1bGVkIGNsb3NlIHRvIGVhY2gKIG90aGVyIGludG8gZmV3ZXIg dGltZXIgaW50ZXJydXB0cywKIHJlZHVjaW5nIHByb2Nlc3Npbmcgb3ZlcmhlYWQgYW5kIHBvd2Vy IGNvbnN1bXB0aW9uLgotVGhlc2UKK1RoZQogLkZhIGZsYWdzCi1tYXkgYmUgc3BlY2lmaWVkIHRv IGFkanVzdCB0aGUgaW50ZXJwcmV0YXRpb24gb2YKK2FyZ3VtZW50IG1heSBiZSBub24temVybyB0 byBhZGp1c3QgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZQogLkZhIHNidAogYW5kCi0uRmEgcHIg OgorLkZhIHByCithcmd1bWVudHM6CiAuQmwgLXRhZyAtd2lkdGggIi5EdiBDX0RJUkVDVF9FWEVD IgogLkl0IER2IENfQUJTT0xVVEUKIEhhbmRsZSB0aGUKQEAgLTM0Nyw3ICszMjcsNyBAQAogYW5k IHNob3VsZCBiZSBhcyBzbWFsbCBhcyBwb3NzaWJsZSBiZWNhdXNlIHRoZXkgcnVuIHdpdGggYWJz b2x1dGUgcHJpb3JpdHkuCiAuSXQgRm4gQ19QUkVMCiBTcGVjaWZpZXMgcmVsYXRpdmUgZXZlbnQg dGltZSBwcmVjaXNpb24gYXMgYmluYXJ5IGxvZ2FyaXRobSBvZiB0aW1lIGludGVydmFsCi1kaXZp ZGVkIGJ5IGFjY2VwdGFibGUgdGltZSBkZXZpYXRpb246IDEgLS0gMS8yLCAyIC0tIDEvNCwgZXRj LgorZGl2aWRlZCBieSBhY2NlcHRhYmxlIHRpbWUgZGV2aWF0aW9uOiAxIC0tIDEvMiwgMiAtLSAx LzQsIGFuZCBzbyBvbi4KIE5vdGUgdGhhdCB0aGUgbGFyZ2VyIG9mCiAuRmEgcHIKIG9yIHRoaXMg dmFsdWUgaXMgdXNlZCBhcyB0aGUgbGVuZ3RoIG9mIHRoZSB0aW1lIHdpbmRvdy4KQEAgLTM2MCwx MTcgKzM0MCwyMTYgQEAKIGNhbGxzIGlmIHBvc3NpYmxlLgogLkVsCiAuUHAKLVRoZQotLkZuIGNh bGxvdXRfcmVzZXQKLWZ1bmN0aW9ucyBhY2NlcHQgYQorLkZ0IGludAorLkZuIGNhbGxvdXRfcmVz ZXRfc2J0X2N1cmNwdSAic3RydWN0IGNhbGxvdXQgKmMiICJzYmludGltZV90IHNidCIgXAorInNi aW50aW1lX3QgcHIiICJjYWxsb3V0X2Z1bmNfdCAqZnVuYyIgInZvaWQgKmFyZyIgImludCBmbGFn cyIKK1RoaXMgZnVuY3Rpb24gd29ya3MgbGlrZQorLkZuIGNhbGxvdXRfcmVzZXRfc2J0ICwKK2V4 Y2VwdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZ2l2ZW4gYnkgdGhlCiAuRmEgZnVuYwotYXJndW1l bnQgd2hpY2ggaWRlbnRpZmllcyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHRp bWUgZXhwaXJlcy4KLUl0IG11c3QgYmUgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCB0YWtl cyBhIHNpbmdsZQotLkZhIHZvaWQgKgotYXJndW1lbnQuCi1VcG9uIGludm9jYXRpb24sCithcmd1 bWVudCB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBDUFUgd2hpY2ggY2FsbGVkIHRoaXMgZnVuY3Rp b24uCisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3Jlc2V0X3NidF9vbiAic3RydWN0IGNhbGxv dXQgKmMiICJzYmludGltZV90IHNidCIgXAorInNiaW50aW1lX3QgcHIiICJjYWxsb3V0X2Z1bmNf dCAqZnVuYyIgInZvaWQgKmFyZyIgImludCBjcHUiICJpbnQgZmxhZ3MiCitUaGlzIGZ1bmN0aW9u IHdvcmtzIGxpa2UKKy5GbiBjYWxsb3V0X3Jlc2V0X3NidCAsCitleGNlcHQgdGhlIGNhbGxiYWNr IGZ1bmN0aW9uIGdpdmVuIGJ5CiAuRmEgZnVuYwotd2lsbCByZWNlaXZlCi0uRmEgYXJnCi1hcyBp dHMgb25seSBhcmd1bWVudC4KLVRoZQotLkZuIGNhbGxvdXRfc2NoZWR1bGUKLWZ1bmN0aW9ucyBy ZXVzZSB0aGUKK3dpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIENQVSBnaXZlbiBieQorLkZhIGNwdSAu CisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3NjaGVkdWxlICJzdHJ1Y3QgY2FsbG91dCAqYyIg ImludCB0aWNrcyIKK1RoaXMgZnVuY3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBj YWxsb3V0X3Jlc2V0CitmdW5jdGlvbiBleGNlcHQgaXQgcmUtdXNlcyB0aGUgY2FsbGJhY2sgZnVu Y3Rpb24gYW5kIHRoZSBjYWxsYmFjayBhcmd1bWVudAorYWxyZWFkeSBzdG9yZWQgaW4gdGhlCisu UHEgc3RydWN0IGNhbGxvdXQKK3N0cnVjdHVyZS4KKy5QcAorLkZ0IGludAorLkZuIGNhbGxvdXRf c2NoZWR1bGVfY3VyY3B1ICJzdHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNrcyIKK1RoaXMgZnVu Y3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBjYWxsb3V0X3Jlc2V0X2N1cmNwdQor ZnVuY3Rpb24gZXhjZXB0IGl0IHJlLXVzZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB0aGUg Y2FsbGJhY2sgYXJndW1lbnQKK2FscmVhZHkgc3RvcmVkIGluIHRoZQorLlBxIHN0cnVjdCBjYWxs b3V0CitzdHJ1Y3R1cmUuCisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3NjaGVkdWxlX29uICJz dHJ1Y3QgY2FsbG91dCAqYyIgImludCB0aWNrcyIgImludCBjcHUiCitUaGlzIGZ1bmN0aW9uIHdv cmtzIHRoZSBzYW1lIGxpa2UgdGhlCisuRm4gY2FsbG91dF9yZXNldF9vbgorZnVuY3Rpb24gZXhj ZXB0IGl0IHJlLXVzZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB0aGUgY2FsbGJhY2sgYXJn dW1lbnQKK2FscmVhZHkgc3RvcmVkIGluIHRoZQorLlBxIHN0cnVjdCBjYWxsb3V0CitzdHJ1Y3R1 cmUuCisuUHAKKy5GdCBpbnQKKy5GbiBjYWxsb3V0X3NjaGVkdWxlX3NidCAic3RydWN0IGNhbGxv dXQgKmMiICJzYmludGltZV90IHNidCIgXAorInNiaW50aW1lX3QgcHIiICJpbnQgZmxhZ3MiCitU aGlzIGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGxpa2UgdGhlCisuRm4gY2FsbG91dF9yZXNldF9z YnQKK2Z1bmN0aW9uIGV4Y2VwdCBpdCByZS11c2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbmQg dGhlIGNhbGxiYWNrIGFyZ3VtZW50CithbHJlYWR5IHN0b3JlZCBpbiB0aGUKKy5QcSBzdHJ1Y3Qg Y2FsbG91dAorc3RydWN0dXJlLgorLlBwCisuRnQgaW50CisuRm4gY2FsbG91dF9zY2hlZHVsZV9z YnRfY3VyY3B1ICJzdHJ1Y3QgY2FsbG91dCAqYyIgInNiaW50aW1lX3Qgc2J0IiBcCisic2JpbnRp bWVfdCBwciIgImludCBmbGFncyIKK1RoaXMgZnVuY3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0 aGUKKy5GbiBjYWxsb3V0X3Jlc2V0X3NidF9jdXJjcHUKK2Z1bmN0aW9uIGV4Y2VwdCBpdCByZS11 c2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdGhlIGNhbGxiYWNrIGFyZ3VtZW50CithbHJl YWR5IHN0b3JlZCBpbiB0aGUKKy5QcSBzdHJ1Y3QgY2FsbG91dAorc3RydWN0dXJlLgorLlBwCisu RnQgaW50CisuRm4gY2FsbG91dF9zY2hlZHVsZV9zYnRfb24gInN0cnVjdCBjYWxsb3V0ICpjIiAi c2JpbnRpbWVfdCBzYnQiIFwKKyJzYmludGltZV90IHByIiAiaW50IGNwdSIgImludCBmbGFncyIK K1RoaXMgZnVuY3Rpb24gd29ya3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBjYWxsb3V0X3Jlc2V0 X3NidF9vbgorZnVuY3Rpb24gZXhjZXB0IGl0IHJlLXVzZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9u IGFuZCB0aGUgY2FsbGJhY2sgYXJndW1lbnQKK2FscmVhZHkgc3RvcmVkIGluIHRoZQorLlBxIHN0 cnVjdCBjYWxsb3V0CitzdHJ1Y3R1cmUuCisuU2ggQ0hFQ0tJTkcgVEhFIFNUQVRFIE9GIENBTExP VVRTCisuRnQgaW50CisuRm4gY2FsbG91dF9wZW5kaW5nICJzdHJ1Y3QgY2FsbG91dCAqYyIKK1Ro aXMgZnVuY3Rpb24gcmV0dXJucyBub24temVybyBpZiB0aGUgY2FsbG91dCBwb2ludGVkIHRvIGJ5 IHRoZQorLkZhIGMKK2FyZ3VtZW50IGlzIHBlbmRpbmcgZm9yIGNhbGxiYWNrLgorRWxzZSB0aGlz IGZ1bmN0aW9uIHJldHVybnMgemVyby4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHdoZW4g aW5zaWRlIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIGlmIHRoZQorY2FsbG91dCBpcyBub3QgcmUtc2No ZWR1bGVkLgorLlBwCisuRnQgaW50CisuRm4gY2FsbG91dF9hY3RpdmUgInN0cnVjdCBjYWxsb3V0 ICpjIgorVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCByZXR1cm5zIG5vbi16ZXJvIGlm IHRoZSBjYWxsb3V0Citwb2ludGVkIHRvIGJ5IHRoZQorLkZhIGMKK2FyZ3VtZW50IHdhcyBzY2hl ZHVsZWQgaW4gdGhlIHBhc3QuCitFbHNlIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvLgorVGhp cyBmdW5jdGlvbiBhbHNvIHJldHVybnMgemVybyBhZnRlciB0aGUKKy5GbiBjYWxsb3V0X2RlYWN0 aXZhdGUKK29yIHRoZQorLkZuIGNhbGxvdXRfc3RvcAorb3IgdGhlCisuRm4gY2FsbG91dF9kcmFp bgorb3IgdGhlCisuRm4gY2FsbG91dF9kcmFpbl9hc3luYworZnVuY3Rpb24gaXMgY2FsbGVkIG9u IHRoZSBzYW1lIGNhbGxvdXQgYXMgZ2l2ZW4gYnkgdGhlCisuRmEgYworYXJndW1lbnQuCisuUHAK Ky5GdCB2b2lkCisuRm4gY2FsbG91dF9kZWFjdGl2YXRlICJzdHJ1Y3QgY2FsbG91dCAqYyIKK1Ro aXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBhbmQgZW5zdXJlcyB0aGF0IHN1YnNlcXVlbnQgY2Fs bHMgdG8gdGhlCisuRm4gY2FsbG91dF9hY3RpdmF0ZQorZnVuY3Rpb24gcmV0dXJucyB6ZXJvIHVu dGlsIHRoZSBjYWxsb3V0IGlzIHNjaGVkdWxlZCBhZ2Fpbi4KKy5TaCBTVE9QUElORyBDQUxMT1VU UworLkZ0IHZvaWQKKy5GbiB1bnRpbWVvdXQgInRpbWVvdXRfdCAqZnVuYyIgInZvaWQgKmFyZyIg InN0cnVjdCBjYWxsb3V0X2hhbmRsZSBoYW5kbGUiCitUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0 ZWQgYW5kIGNhbmNlbHMgdGhlIHRpbWVvdXQgYXNzb2NpYXRlZCB3aXRoIHRoZQorLkZhIGhhbmRs ZQorYXJndW1lbnQgdXNpbmcgdGhlIGZ1bmN0aW9uIHBvaW50ZWQgdG8gYnkgdGhlCiAuRmEgZnVu YwotYW5kCithcmd1bWVudCBhbmQgaGF2aW5nIHRoZQogLkZhIGFyZwotYXJndW1lbnRzIGZyb20g dGhlIHByZXZpb3VzIGNhbGxvdXQuCi1Ob3RlIHRoYXQgb25lIG9mIHRoZQotLkZuIGNhbGxvdXRf cmVzZXQKLWZ1bmN0aW9ucyBtdXN0IGFsd2F5cyBiZSBjYWxsZWQgdG8gaW5pdGlhbGl6ZQorYXJn dW1lbnRzIHRvIHZhbGlkYXRlIHRoZSBoYW5kbGUuCitJZiB0aGUgaGFuZGxlIGRvZXMgbm90IGNv cnJlc3BvbmQgdG8gYSB0aW1lb3V0IHdpdGgKK3RoZSBmdW5jdGlvbgogLkZhIGZ1bmMKLWFuZAor dGFraW5nIHRoZSBhcmd1bWVudAogLkZhIGFyZwotYmVmb3JlIG9uZSBvZiB0aGUKLS5GbiBjYWxs b3V0X3NjaGVkdWxlCi1mdW5jdGlvbnMgY2FuIGJlIHVzZWQuCitubyBhY3Rpb24gaXMgdGFrZW4u IFRoZQorLkZhIGhhbmRsZQorbXVzdCBiZSBpbml0aWFsaXplZCBieSBhIHByZXZpb3VzIGNhbGwg dG8KKy5GbiB0aW1lb3V0ICwKKy5GbiBjYWxsb3V0X2hhbmRsZV9pbml0CitvciBhc3NpZ25lZCB0 aGUgdmFsdWUgb2YKKy5GbiBDQUxMT1VUX0hBTkRMRV9JTklUSUFMSVpFUiAiJmhhbmRsZSIKK2Jl Zm9yZSBiZWluZyBwYXNzZWQgdG8KKy5GbiB1bnRpbWVvdXQgLgorVGhlIGJlaGF2aW9yIG9mIGNh bGxpbmcKKy5GbiB1bnRpbWVvdXQKK3dpdGggYW4gdW5pbml0aWFsaXplZCBoYW5kbGUKK2lzIHVu ZGVmaW5lZC4KIC5QcAotVGhlIGNhbGxvdXQgc3Vic3lzdGVtIHByb3ZpZGVzIGEgc29mdGNsb2Nr IHRocmVhZCBmb3IgZWFjaCBDUFUgaW4gdGhlIHN5c3RlbS4KLUNhbGxvdXRzIGFyZSBhc3NpZ25l ZCB0byBhIHNpbmdsZSBDUFUgYW5kIGFyZSBleGVjdXRlZCBieSB0aGUgc29mdGNsb2NrIHRocmVh ZAotZm9yIHRoYXQgQ1BVLgotSW5pdGlhbGx5LAotY2FsbG91dHMgYXJlIGFzc2lnbmVkIHRvIENQ VSAwLgotVGhlCi0uRm4gY2FsbG91dF9yZXNldF9vbiAsCi0uRm4gY2FsbG91dF9yZXNldF9zYnRf b24gLAotLkZuIGNhbGxvdXRfc2NoZWR1bGVfb24KLWFuZAotLkZuIGNhbGxvdXRfc2NoZWR1bGVf c2J0X29uCi1mdW5jdGlvbnMgYXNzaWduIHRoZSBjYWxsb3V0IHRvIENQVQotLkZhIGNwdSAuCi1U aGUKLS5GbiBjYWxsb3V0X3Jlc2V0X2N1cmNwdSAsCi0uRm4gY2FsbG91dF9yZXNldF9zYnRfY3Vy cHUgLAotLkZuIGNhbGxvdXRfc2NoZWR1bGVfY3VyY3B1Ci1hbmQKLS5GbiBjYWxsb3V0X3NjaGVk dWxlX3NidF9jdXJjcHUKLWZ1bmN0aW9ucyBhc3NpZ24gdGhlIGNhbGxvdXQgdG8gdGhlIGN1cnJl bnQgQ1BVLgotVGhlCi0uRm4gY2FsbG91dF9yZXNldCAsCi0uRm4gY2FsbG91dF9yZXNldF9zYnQg LAotLkZuIGNhbGxvdXRfc2NoZWR1bGUKLWFuZAotLkZuIGNhbGxvdXRfc2NoZWR1bGVfc2J0Ci1m dW5jdGlvbnMgc2NoZWR1bGUgdGhlIGNhbGxvdXQgdG8gZXhlY3V0ZSBpbiB0aGUgc29mdGNsb2Nr IHRocmVhZCBvZiB0aGUgQ1BVCi10byB3aGljaCBpdCBpcyBjdXJyZW50bHkgYXNzaWduZWQuCisu RnQgaW50CisuRm4gY2FsbG91dF9zdG9wICJzdHJ1Y3QgY2FsbG91dCAqYyIKK1RoaXMgZnVuY3Rp b24gaXMgdXNlZCB0byBzdG9wIGEgdGltZW91dCBmdW5jdGlvbiBpbnZvY2F0aW9uIGFzc29jaWF0 ZWQgd2l0aCB0aGUgY2FsbG91dCBwb2ludGVkIHRvIGJ5IHRoZQorLkZhIGMKK2FyZ3VtZW50LCBp biBhIG5vbi1ibG9ja2luZyBmYXNoaW9uLgorVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIG11 bHRpcGxlIHRpbWVzIGluIGEgcm93IHdpdGggbm8gc2lkZSBlZmZlY3RzLCBldmVuIGlmIHRoZSBj YWxsb3V0IGlzIGFscmVhZHkgc3RvcHBlZC4gVGhpcyBmdW5jdGlvbiBob3dldmVyIHNob3VsZCBu b3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgY2FsbG91dCBoYXMgYmVlbiBpbml0aWFsaXplZC4KK1Ro aXMgZnVuY3Rpb24gcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGlmIHRoZSBnaXZlbiBjYWxsb3V0 IHdhcyBwZW5kaW5nIGFuZAordGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdhcyBwcmV2ZW50ZWQgZnJv bSBiZWluZyBjYWxsZWQuCitFbHNlIGEgdmFsdWUgb2YgemVybyBpcyByZXR1cm5lZC4KK0lmIGEg bG9jayBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbGxvdXQgZ2l2ZW4gYnkgdGhlCisuRmEgYwor YXJndW1lbnQgYW5kIGl0IGlzIGV4Y2x1c2l2bHkgbG9ja2VkIHdoZW4gdGhpcyBmdW5jdGlvbiBp cyBjYWxsZWQsIHRoZQorLkZuIGNhbGxvdXRfc3RvcAorZnVuY3Rpb24gd2lsbCBhbHdheXMgZW5z dXJlIHRoYXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG5ldmVyIHJlYWNoZWQuCitJbiBvdGhl ciB3b3JkcyB0aGUgY2FsbG91dCB3aWxsIGJlIGF0b21pY2FsbHkgc3RvcHBlZC4KK0Vsc2UgdGhl cmUgaXMgbm8gc3VjaCBndWFyYW50ZWUuCisuU2ggRFJBSU5JTkcgQ0FMTE9VVFMKKy5GdCBpbnQK Ky5GbiBjYWxsb3V0X2RyYWluICJzdHJ1Y3QgY2FsbG91dCAqYyIKK1RoaXMgZnVuY3Rpb24gd29y a3MgdGhlIHNhbWUgbGlrZSB0aGUKKy5GbiBjYWxsb3V0X3N0b3AKK2Z1bmN0aW9uIGV4Y2VwdCBp dCBlbnN1cmVzIHRoYXQgYWxsIGNhbGxiYWNrIGZ1bmN0aW9ucyBoYXZlIHJldHVybmVkIGFuZCB0 aGVyZSBhcmUgbm8gbW9yZSByZWZlcmVuY2VzIHRvIHRoZSBjYWxsb3V0IHBvaW50ZWQgdG8gYnkg dGhlCisuRmEgYworYXJndW1lbnQgaW5zaWRlIHRoZSBjYWxsb3V0IHN1YnN5c3RlbSBiZWZvcmUg aXQgcmV0dXJucy4KK0Fsc28gdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGxvY2ssIGlm IGFueSwgYXNzb2NpYXRlZCB3aXRoIHRoZQorY2FsbG91dCBpcyBubyBsb25nZXIgYmVpbmcgdXNl ZC4KK1doZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBpdCBpcyBzYWZlIHRvIGZyZWUgdGhlIGNh bGxvdXQgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgdGhlCisuRmEgYworYXJndW1lbnQuCiAuUHAK Ky5GdCBpbnQKKy5GbiBjYWxsb3V0X2RyYWluX2FzeW5jICJzdHJ1Y3QgY2FsbG91dCAqYyIgImNh bGxvdXRfZnVuY190ICpmbiIgInZvaWQgKmFyZyIKK1RoaXMgZnVuY3Rpb24gaXMgbm9uLWJsb2Nr aW5nIGFuZCB3b3JrcyB0aGUgc2FtZSBsaWtlIHRoZQorLkZuIGNhbGxvdXRfc3RvcAorZnVuY3Rp b24gZXhjZXB0IGlmIGl0IHJldHVybnMgbm9uLXplcm8gaXQgbWVhbnMgdGhlIGNhbGxiYWNrIGZ1 bmN0aW9uIHBvaW50ZWQgdG8gYnkgdGhlCisuRmEgZm4KK2FyZ3VtZW50IHdpbGwgYmUgY2FsbGVk IGJhY2sgd2l0aCB0aGUKKy5GYSBhcmcKK2FyZ3VtZW50IHdoZW4gYWxsIHJlZmVyZW5jZXMgdG8g dGhlIGNhbGxvdXQgcG9pbnRlZCB0byBieSB0aGUKKy5GYSBjCithcmd1bWVudCBhcmUgZ29uZS4K K0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBub24temVybyBpdCBzaG91bGQgbm90IGJlIGNhbGxl ZCBhZ2FpbiB1bnRpbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLgorSWYg dGhlCisuRm4gY2FsbG91dF9kcmFpbgorb3IKKy5GbiBjYWxsb3V0X2RyYWluX2FzeW5jCitmdW5j dGlvbnMgYXJlIGNhbGxlZCB3aGlsZSBhbiBhc3luY2hyb25vdXMgZHJhaW4gaXMgcGVuZGluZywK K3ByZXZpb3VzbHkgcGVuZGluZyBhc3luY2hyb25vdXMgZHJhaW5zIG1pZ2h0IGdldCBjYW5jZWxs ZWQuCitJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgemVybywgaXQgaXMgc2FmZSB0byBmcmVlIHRo ZSBjYWxsb3V0IHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IHRoZQorLkZhIGMKK2FyZ3VtZW50IHJp Z2h0IGF3YXkuCisuU2ggQ0FMTE9VVCBGVU5DVElPTiBSRVNUUklDVElPTlMKK0NhbGxvdXQgZnVu Y3Rpb25zIG11c3Qgbm90IHNsZWVwLgorVGhleSBtYXkgbm90IGFjcXVpcmUgc2xlZXBhYmxlIGxv Y2tzLCB3YWl0IG9uIGNvbmRpdGlvbiB2YXJpYWJsZXMsCitwZXJmb3JtIGJsb2NraW5nIGFsbG9j YXRpb24gcmVxdWVzdHMsIG9yIGludm9rZSBhbnkgb3RoZXIgYWN0aW9uIHRoYXQKK21pZ2h0IHNs ZWVwLgorLlNoIENBTExPVVQgU1VCU1lTVEVNIElOVEVSTkFMUworVGhlIGNhbGxvdXQgc3Vic3lz dGVtIGhhcyBpdHMgb3duIHNldCBvZiBzcGlubG9ja3MgdG8gcHJvdGVjdCBpdHMgaW50ZXJuYWwg c3RhdGUuCitUaGUgY2FsbG91dCBzdWJzeXN0ZW0gcHJvdmlkZXMgYSBzb2Z0Y2xvY2sgdGhyZWFk IGZvciBlYWNoIENQVSBpbiB0aGUKK3N5c3RlbS4KK0NhbGxvdXRzIGFyZSBhc3NpZ25lZCB0byBh IHNpbmdsZSBDUFUgYW5kIGFyZSBleGVjdXRlZCBieSB0aGUKK3NvZnRjbG9jayB0aHJlYWQgZm9y IHRoYXQgQ1BVLgorSW5pdGlhbGx5LCBjYWxsb3V0cyBhcmUgYXNzaWduZWQgdG8gQ1BVIDAuCiBT b2Z0Y2xvY2sgdGhyZWFkcyBhcmUgbm90IHBpbm5lZCB0byB0aGVpciByZXNwZWN0aXZlIENQVXMg YnkgZGVmYXVsdC4KIFRoZSBzb2Z0Y2xvY2sgdGhyZWFkIGZvciBDUFUgMCBjYW4gYmUgcGlubmVk IHRvIENQVSAwIGJ5IHNldHRpbmcgdGhlCiAuVmEga2Vybi5waW5fZGVmYXVsdF9zd2kKIGxvYWRl ciB0dW5hYmxlIHRvIGEgbm9uLXplcm8gdmFsdWUuCiBTb2Z0Y2xvY2sgdGhyZWFkcyBmb3IgQ1BV cyBvdGhlciB0aGFuIHplcm8gY2FuIGJlIHBpbm5lZCB0byB0aGVpcgogcmVzcGVjdGl2ZSBDUFVz IGJ5IHNldHRpbmcgdGhlCiAuVmEga2Vybi5waW5fcGNwdV9zd2kKIGxvYWRlciB0dW5hYmxlIHRv IGEgbm9uLXplcm8gdmFsdWUuCi0uUHAKLVRoZSBtYWNyb3MKLS5GbiBjYWxsb3V0X3BlbmRpbmcg LAotLkZuIGNhbGxvdXRfYWN0aXZlCi1hbmQKLS5GbiBjYWxsb3V0X2RlYWN0aXZhdGUKLXByb3Zp ZGUgYWNjZXNzIHRvIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjYWxsb3V0LgotVGhlCi0uRm4g Y2FsbG91dF9wZW5kaW5nCi1tYWNybyBjaGVja3Mgd2hldGhlciBhIGNhbGxvdXQgaXMKLS5FbSBw ZW5kaW5nIDsKLWEgY2FsbG91dCBpcyBjb25zaWRlcmVkCi0uRW0gcGVuZGluZwotd2hlbiBhIHRp bWVvdXQgaGFzIGJlZW4gc2V0IGJ1dCB0aGUgdGltZSBoYXMgbm90IHlldCBhcnJpdmVkLgotTm90 ZSB0aGF0IG9uY2UgdGhlIHRpbWVvdXQgdGltZSBhcnJpdmVzIGFuZCB0aGUgY2FsbG91dCBzdWJz eXN0ZW0KLXN0YXJ0cyB0byBwcm9jZXNzIHRoaXMgY2FsbG91dCwKLS5GbiBjYWxsb3V0X3BlbmRp bmcKLXdpbGwgcmV0dXJuCi0uRHYgRkFMU0UKLWV2ZW4gdGhvdWdoIHRoZSBjYWxsb3V0IGZ1bmN0 aW9uIG1heSBub3QgaGF2ZSBmaW5pc2hlZAotLlBxIG9yIGV2ZW4gYmVndW4KLWV4ZWN1dGluZy4K LVRoZQotLkZuIGNhbGxvdXRfYWN0aXZlCi1tYWNybyBjaGVja3Mgd2hldGhlciBhIGNhbGxvdXQg aXMgbWFya2VkIGFzCi0uRW0gYWN0aXZlICwKLWFuZCB0aGUKLS5GbiBjYWxsb3V0X2RlYWN0aXZh dGUKLW1hY3JvIGNsZWFycyB0aGUgY2FsbG91dCdzCi0uRW0gYWN0aXZlCi1mbGFnLgotVGhlIGNh bGxvdXQgc3Vic3lzdGVtIG1hcmtzIGEgY2FsbG91dCBhcwotLkVtIGFjdGl2ZQotd2hlbiBhIHRp bWVvdXQgaXMgc2V0IGFuZCBpdCBjbGVhcnMgdGhlCi0uRW0gYWN0aXZlCi1mbGFnIGluCi0uRm4g Y2FsbG91dF9zdG9wCi1hbmQKLS5GbiBjYWxsb3V0X2RyYWluICwKLWJ1dCBpdAotLkVtIGRvZXMg bm90Ci1jbGVhciBpdCB3aGVuIGEgY2FsbG91dCBleHBpcmVzIG5vcm1hbGx5IHZpYSB0aGUgZXhl Y3V0aW9uIG9mIHRoZQotY2FsbG91dCBmdW5jdGlvbi4KLS5TcyAiQXZvaWRpbmcgUmFjZSBDb25k aXRpb25zIgorLlNoICJBVk9JRElORyBSQUNFIENPTkRJVElPTlMiCiBUaGUgY2FsbG91dCBzdWJz eXN0ZW0gaW52b2tlcyBjYWxsb3V0IGZ1bmN0aW9ucyBmcm9tIGl0cyBvd24gdGhyZWFkCiBjb250 ZXh0LgogV2l0aG91dCBzb21lIGtpbmQgb2Ygc3luY2hyb25pemF0aW9uLApAQCAtNTMxLDkgKzYx MCw4IEBACiAuUGMKIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgY2FsbG91dCB3YXMgcmVt b3ZlZC4KIElmIGl0IGlzIGtub3duIHRoYXQgdGhlIGNhbGxvdXQgd2FzIHNldCBhbmQgdGhlIGNh bGxvdXQgZnVuY3Rpb24gaGFzCi1ub3QgeWV0IGV4ZWN1dGVkLCB0aGVuIGEgcmV0dXJuIHZhbHVl IG9mCi0uRHYgRkFMU0UKLWluZGljYXRlcyB0aGF0IHRoZSBjYWxsb3V0IGZ1bmN0aW9uIGlzIGFi b3V0IHRvIGJlIGNhbGxlZC4KK25vdCB5ZXQgZXhlY3V0ZWQsIHRoZW4gYSByZXR1cm4gdmFsdWUg b2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUKK2NhbGxvdXQgZnVuY3Rpb24gaXMgYWJvdXQgdG8g YmUgY2FsbGVkLgogRm9yIGV4YW1wbGU6CiAuQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKIGlm IChzYy0+c2NfZmxhZ3MgJiBTQ0ZMR19DQUxMT1VUX1JVTk5JTkcpIHsKQEAgLTU4OSwxNiArNjY3 LDE0IEBACiAuRW0gcGVuZGluZwogZmxhZyBhbmQgcmV0dXJuIHdpdGhvdXQgYWN0aW9uIGlmCiAu Rm4gY2FsbG91dF9wZW5kaW5nCi1yZXR1cm5zCi0uRHYgVFJVRSAuCityZXR1cm5zIG5vbi16ZXJv LgogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbG91dCB3YXMgcmVzY2hlZHVsZWQgdXNpbmcK IC5GbiBjYWxsb3V0X3Jlc2V0CiBqdXN0IGJlZm9yZSB0aGUgY2FsbG91dCBmdW5jdGlvbiB3YXMg aW52b2tlZC4KIElmCiAuRm4gY2FsbG91dF9hY3RpdmUKLXJldHVybnMKLS5EdiBGQUxTRQotdGhl biB0aGUgY2FsbG91dCBmdW5jdGlvbiBzaG91bGQgYWxzbyByZXR1cm4gd2l0aG91dCBhY3Rpb24u CityZXR1cm5zIHplcm8gdGhlbiB0aGUgY2FsbG91dCBmdW5jdGlvbiBzaG91bGQgYWxzbyByZXR1 cm4gd2l0aG91dAorYWN0aW9uLgogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbG91dCBoYXMg YmVlbiBzdG9wcGVkLgogRmluYWxseSwgdGhlIGNhbGxvdXQgZnVuY3Rpb24gc2hvdWxkIGNhbGwK IC5GbiBjYWxsb3V0X2RlYWN0aXZhdGUKQEAgLTY2OCwxMjkgKzc0NCwxMyBAQAogb3IgcmVsZWFz aW5nIHRoZSBzdG9yYWdlIGZvciB0aGUgY2FsbG91dCBzdHJ1Y3R1cmUuCiAuU2ggTEVHQUNZIEFQ SQogLkJmIFN5Ci1UaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBhIGxlZ2FjeSBBUEkgdGhhdCB3aWxs IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KLU5ldyBjb2RlIHNob3VsZCBub3QgdXNl IHRoZXNlIHJvdXRpbmVzLgotLkVmCi0uUHAKLVRoZSBmdW5jdGlvbgotLkZuIHRpbWVvdXQKLXNj aGVkdWxlcyBhIGNhbGwgdG8gdGhlIGZ1bmN0aW9uIGdpdmVuIGJ5IHRoZSBhcmd1bWVudAotLkZh IGZ1bmMKLXRvIHRha2UgcGxhY2UgYWZ0ZXIKLS5GYSB0aWNrcyBOcyBObyAvaHoKLXNlY29uZHMu Ci1Ob24tcG9zaXRpdmUgdmFsdWVzIG9mCi0uRmEgdGlja3MKLWFyZSBzaWxlbnRseSBjb252ZXJ0 ZWQgdG8gdGhlIHZhbHVlCi0uU3EgMSAuCi0uRmEgZnVuYwotc2hvdWxkIGJlIGEgcG9pbnRlciB0 byBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYQotLkZhIHZvaWQgKgotYXJndW1lbnQuCi1VcG9uIGlu dm9jYXRpb24sCi0uRmEgZnVuYwotd2lsbCByZWNlaXZlCi0uRmEgYXJnCi1hcyBpdHMgb25seSBh cmd1bWVudC4KLVRoZSByZXR1cm4gdmFsdWUgZnJvbQorVGhlCiAuRm4gdGltZW91dAotaXMgYQot LkZ0IHN0cnVjdCBjYWxsb3V0X2hhbmRsZQotd2hpY2ggY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rp b24gd2l0aCB0aGUKLS5GbiB1bnRpbWVvdXQKLWZ1bmN0aW9uIHRvIHJlcXVlc3QgdGhhdCBhIHNj aGVkdWxlZCB0aW1lb3V0IGJlIGNhbmNlbGVkLgotLlBwCi1UaGUgZnVuY3Rpb24KLS5GbiBjYWxs b3V0X2hhbmRsZV9pbml0Ci1jYW4gYmUgdXNlZCB0byBpbml0aWFsaXplIGEgaGFuZGxlIHRvIGEg c3RhdGUgd2hpY2ggd2lsbCBjYXVzZQotYW55IGNhbGxzIHRvCi0uRm4gdW50aW1lb3V0Ci13aXRo IHRoYXQgaGFuZGxlIHRvIHJldHVybiB3aXRoIG5vIHNpZGUKLWVmZmVjdHMuCi0uUHAKLUFzc2ln bmluZyBhIGNhbGxvdXQgaGFuZGxlIHRoZSB2YWx1ZSBvZgotLkZuIENBTExPVVRfSEFORExFX0lO SVRJQUxJWkVSCi1wZXJmb3JtcyB0aGUgc2FtZSBmdW5jdGlvbiBhcwotLkZuIGNhbGxvdXRfaGFu ZGxlX2luaXQKLWFuZCBpcyBwcm92aWRlZCBmb3IgdXNlIG9uIHN0YXRpY2FsbHkgZGVjbGFyZWQg b3IgZ2xvYmFsIGNhbGxvdXQgaGFuZGxlcy4KLS5QcAotVGhlIGZ1bmN0aW9uCi0uRm4gdW50aW1l b3V0Ci1jYW5jZWxzIHRoZSB0aW1lb3V0IGFzc29jaWF0ZWQgd2l0aAotLkZhIGhhbmRsZQotdXNp bmcgdGhlCi0uRmEgZnVuYwogYW5kCi0uRmEgYXJnCi1hcmd1bWVudHMgdG8gdmFsaWRhdGUgdGhl IGhhbmRsZS4KLUlmIHRoZSBoYW5kbGUgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHRpbWVvdXQg d2l0aAotdGhlIGZ1bmN0aW9uCi0uRmEgZnVuYwotdGFraW5nIHRoZSBhcmd1bWVudAotLkZhIGFy Zwotbm8gYWN0aW9uIGlzIHRha2VuLgotLkZhIGhhbmRsZQotbXVzdCBiZSBpbml0aWFsaXplZCBi eSBhIHByZXZpb3VzIGNhbGwgdG8KLS5GbiB0aW1lb3V0ICwKLS5GbiBjYWxsb3V0X2hhbmRsZV9p bml0ICwKLW9yIGFzc2lnbmVkIHRoZSB2YWx1ZSBvZgotLkZuIENBTExPVVRfSEFORExFX0lOSVRJ QUxJWkVSICImaGFuZGxlIgotYmVmb3JlIGJlaW5nIHBhc3NlZCB0bwotLkZuIHVudGltZW91dCAu Ci1UaGUgYmVoYXZpb3Igb2YgY2FsbGluZwogLkZuIHVudGltZW91dAotd2l0aCBhbiB1bmluaXRp YWxpemVkIGhhbmRsZQotaXMgdW5kZWZpbmVkLgotLlBwCi1BcyBoYW5kbGVzIGFyZSByZWN5Y2xl ZCBieSB0aGUgc3lzdGVtLCBpdCBpcyBwb3NzaWJsZSAoYWx0aG91Z2ggdW5saWtlbHkpCi10aGF0 IGEgaGFuZGxlIGZyb20gb25lIGludm9jYXRpb24gb2YKLS5GbiB0aW1lb3V0Ci1tYXkgbWF0Y2gg dGhlIGhhbmRsZSBvZiBhbm90aGVyIGludm9jYXRpb24gb2YKLS5GbiB0aW1lb3V0Ci1pZiBib3Ro IGNhbGxzIHVzZWQgdGhlIHNhbWUgZnVuY3Rpb24gcG9pbnRlciBhbmQgYXJndW1lbnQsIGFuZCB0 aGUgZmlyc3QKLXRpbWVvdXQgaXMgZXhwaXJlZCBvciBjYW5jZWxlZCBiZWZvcmUgdGhlIHNlY29u ZCBjYWxsLgotVGhlIHRpbWVvdXQgZmFjaWxpdHkgb2ZmZXJzIE8oMSkgcnVubmluZyB0aW1lIGZv cgotLkZuIHRpbWVvdXQKLWFuZAotLkZuIHVudGltZW91dCAuCi1UaW1lb3V0cyBhcmUgZXhlY3V0 ZWQgZnJvbQotLkZuIHNvZnRjbG9jawotd2l0aCB0aGUKLS5WYSBHaWFudAotbG9jayBoZWxkLgot VGh1cyB0aGV5IGFyZSBwcm90ZWN0ZWQgZnJvbSByZS1lbnRyYW5jeS4KLS5TaCBSRVRVUk4gVkFM VUVTCi1UaGUKLS5GbiBjYWxsb3V0X2FjdGl2ZQotbWFjcm8gcmV0dXJucyB0aGUgc3RhdGUgb2Yg YSBjYWxsb3V0J3MKLS5FbSBhY3RpdmUKLWZsYWcuCi0uUHAKLVRoZQotLkZuIGNhbGxvdXRfcGVu ZGluZwotbWFjcm8gcmV0dXJucyB0aGUgc3RhdGUgb2YgYSBjYWxsb3V0J3MKLS5FbSBwZW5kaW5n Ci1mbGFnLgotLlBwCi1UaGUKLS5GbiBjYWxsb3V0X3Jlc2V0Ci1hbmQKLS5GbiBjYWxsb3V0X3Nj aGVkdWxlCi1mdW5jdGlvbiBmYW1pbGllcyByZXR1cm4gbm9uLXplcm8gaWYgdGhlIGNhbGxvdXQg d2FzIHBlbmRpbmcgYmVmb3JlIHRoZSBuZXcKLWZ1bmN0aW9uIGludm9jYXRpb24gd2FzIHNjaGVk dWxlZC4KLS5QcAotVGhlCi0uRm4gY2FsbG91dF9zdG9wCi1hbmQKLS5GbiBjYWxsb3V0X2RyYWlu Ci1mdW5jdGlvbnMgcmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBjYWxsb3V0IHdhcyBzdGlsbCBwZW5k aW5nIHdoZW4gaXQgd2FzCi1jYWxsZWQgb3IgemVybyBvdGhlcndpc2UuCi1UaGUKLS5GbiB0aW1l b3V0Ci1mdW5jdGlvbiByZXR1cm5zIGEKLS5GdCBzdHJ1Y3QgY2FsbG91dF9oYW5kbGUKLXRoYXQg Y2FuIGJlIHBhc3NlZCB0bwotLkZuIHVudGltZW91dCAuCitmdW5jdGlvbnMgYXJlIGEgbGVnYWN5 IEFQSSB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorTmV3IGNvZGUg c2hvdWxkIG5vdCB1c2UgdGhlc2Ugcm91dGluZXMuCisuRWYKIC5TaCBISVNUT1JZCiBUaGUgY3Vy cmVudCB0aW1lb3V0IGFuZCB1bnRpbWVvdXQgcm91dGluZXMgYXJlIGJhc2VkIG9uIHRoZSB3b3Jr IG9mCiAuQW4gQWRhbSBNLiBDb3N0ZWxsbwpAQCAtODE1LDQgKzc3NSw0IEBACiAuQngKIGxpbmtl ZCBsaXN0CiBjYWxsb3V0IG1lY2hhbmlzbSB3aGljaCBvZmZlcmVkIE8obikgaW5zZXJ0aW9uIGFu ZCByZW1vdmFsIHJ1bm5pbmcgdGltZQotYnV0IGRpZCBub3QgZ2VuZXJhdGUgb3IgcmVxdWlyZSBo YW5kbGVzIGZvciB1bnRpbWVvdXQgb3BlcmF0aW9ucy4KK2FuZCBkaWQgbm90IGdlbmVyYXRlIG9y IHJlcXVpcmUgaGFuZGxlcyBmb3IgdW50aW1lb3V0IG9wZXJhdGlvbnMuCgo= --b1_a17c2070cbe9bbfcdf7c7bdb3c763fdd--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?a17c2070cbe9bbfcdf7c7bdb3c763fdd>