Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kecDx-0004hy-09 for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Nov 2020 10:59:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kecDv-00080P-VT for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Nov 2020 10:59:03 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kecDv-00080H-BA for pgsql-hackers@lists.postgresql.org; Mon, 16 Nov 2020 10:59:03 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kecDr-0001JV-0G for pgsql-hackers@postgresql.org; Mon, 16 Nov 2020 10:59:02 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 9EF6A6151A; Mon, 16 Nov 2020 19:58:55 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_4eec7642b7fdf89e5fb1eb7a286a084a" Date: Mon, 16 Nov 2020 19:58:55 +0900 From: torikoshia To: "Georgios Kokolatos Kyotaro Horiguchi" Cc: pgsql-hackers@postgresql.org Subject: Re: Get memory contexts of an arbitrary backend process In-Reply-To: <160502083340.7362.4386116585349115146.pgcf@coridan.postgresql.org> References: <0271f440ac77f2a4180e0e56ebd944d1@oss.nttdata.com> <270ec80dbbebfb5c6f2b9fdd7a7858b5@oss.nttdata.com> <160502083340.7362.4386116585349115146.pgcf@coridan.postgresql.org> Message-ID: <064d510f2d33edc37dfd6b8f3b6bd30e@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com User-Agent: Roundcube Webmail/1.1.9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_4eec7642b7fdf89e5fb1eb7a286a084a Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2020-10-28 15:32, torikoshia wrote: > On 2020-10-23 13:46, Kyotaro Horiguchi wrote: >> I think we might need to step-back to basic design of this feature >> since this patch seems to have unhandled corner cases that are >> difficult to find. I've written out the basic design below and attached corresponding patch. # Communication flow between the dumper and the requester - (1) When REQUESTING memory context dumping, the dumper adds an entry to the shared memory. The entry manages the dump state and it is set to 'REQUESTING'. - (2) The dumper sends the signal to the dumper and wait on the latch. - (3) The dumper looks into the corresponding shared memory entry and changes its state to 'DUMPING'. - (4) When the dumper completes dumping, it changes the state to 'DONE' and set the latch. - (5) The dumper reads the dump file and shows it to the user. Finally, the dumper removes the dump file and reset the shared memory entry. # Query cancellation - When the requestor cancels dumping, e.g. signaling using ctrl-C, the requestor changes the status of the shared memory entry to 'CANCELING'. - The dumper checks the status when it tries to change the state to 'DONE' at (4), and if the state is 'CANCELING', it removes the dump file and reset the shared memory entry. # Cleanup dump file and the shared memory entry - In the normal case, the dumper removes the dump file and resets the shared memory entry as described in (5). - When something like query cancellation or process termination happens on the dumper after (1) and before (3), in other words, the state is 'REQUESTING', the requestor does the cleanup. - When something happens on the dumper or the requestor after (3) and before (4), in other words, the state is 'DUMPING', the dumper does the cleanup. Specifically, if the requestor cancels the query, it just changes the state to 'CANCELING' and the dumper notices it and cleans up things later. OTOH, when the dumper fails to dump, it cleans up the dump file and deletes the entry on the shared memory. - When something happens on the requestor after (4), i.e., the state is 'DONE', the requestor does the cleanup. - In the case of receiving SIGKILL or power failure, all dump files are removed in the crash recovery process. Although there was a suggestion that shared memory hash table should be changed to more efficient structures, I haven't done it in this patch. I think it can be treated separately, I'm going to work on that later. On 2020-11-11 00:07, Georgios Kokolatos wrote: > Hi, > > I noticed that this patch fails on the cfbot. > For this, I changed the status to: 'Waiting on Author'. > > Cheers, > //Georgios > > The new status of this patch is: Waiting on Author Thanks for your notification and updated the patch. Changed the status to: 'Waiting on Author'. Regards, -- Atsushi Torikoshi --=_4eec7642b7fdf89e5fb1eb7a286a084a Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v4-0001-Enabled-pg_get_backend_memory_contexts-to-collect.patch Content-Disposition: attachment; filename=v4-0001-Enabled-pg_get_backend_memory_contexts-to-collect.patch; size=32150 RnJvbSBjNmQwNmIxMWQxNjk2MWFjZDU5YmZhMDIyYWY1MmNiNWZjNjY4YjNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IE1vbiwgMTYgTm92IDIwMjAgMTE6NDk6MDMgKzA5MDAKU3ViamVjdDog W1BBVENIIHY0XSBFbmFibGVkIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpIHRvIGNv bGxlY3QKIGFyYml0cmFyeSBiYWNrZW5kIHByb2Nlc3MncyBtZW1vcnkgY29udGV4dHMuCgpQcmV2 aXNvdWx5LCBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKSBjb3VsZCBvbmx5IGdldCB0 aGUKbG9jYWwgbWVtb3J5IGNvbnRleHRzLiBUaGlzIHBhdGNoIGVuYWJsZXMgdG8gZ2V0IG1lbW9y eSBjb250ZXh0cwpvZiB0aGUgYXJiaXRyYXJ5IGJhY2tlbmQgcHJvY2VzcyB3aGljaCBQSUQgaXMg c3BlY2lmaWVkIGJ5IHRoZQphcmd1bWVudC4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMgICAgICAgICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ3N0YXQu YyAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1 cC5jICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAg ICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAg ICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dCAg ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAg fCAgIDUgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jICAgICAgICAgICAgfCA2 MTUgKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMgICAgICAgICAgICAg ICAgICAgICAgfCAgIDMgKy0KIHNyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFj a3VwLnBsIHwgICA0ICstCiBzcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMgICAgICAgICAgICAg ICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAg ICB8ICAxMSArLQogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvcGdzdGF0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDMgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAgICAgICAgICAgIHwgICAx ICsKIHNyYy9pbmNsdWRlL3V0aWxzL21jeHRmdW5jcy5oICAgICAgICAgICAgICAgIHwgIDUyICsr CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAgICAgICAgICB8ICAgMiArLQog MTkgZmlsZXMgY2hhbmdlZCwgNjk3IGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3V0aWxzL21jeHRmdW5jcy5oCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZy5jCmluZGV4IGExMDc4YTdjZmMuLmY2MjhmYThiNTMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nLmMKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3N5 bmMuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5o IgorI2luY2x1ZGUgInV0aWxzL21jeHRmdW5jcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsbWFw cGVyLmgiCkBAIC02OTg2LDYgKzY5ODcsMTIgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJICovCiAJ CXBnc3RhdF9yZXNldF9hbGwoKTsKIAorCQkvKgorCQkgKiBSZXNldCBkdW1wZWQgZmlsZXMgaW4g cGdfbWVtdXNhZ2UsIGJlY2F1c2UgdGFyZ2V0IHByb2Nlc3NlcyBkbworCQkgKiBub3QgZXhpc3Qg YW55IG1vcmUuCisJCSAqLworCQlSZW1vdmVNZW1jeHRGaWxlKDApOworCiAJCS8qCiAJCSAqIElm IHRoZXJlIHdhcyBhIGJhY2t1cCBsYWJlbCBmaWxlLCBpdCdzIGRvbmUgaXRzIGpvYiBhbmQgdGhl IGluZm8KIAkJICogaGFzIG5vdyBiZWVuIHByb3BhZ2F0ZWQgaW50byBwZ19jb250cm9sLiAgV2Ug bXVzdCBnZXQgcmlkIG9mIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fdmlld3Muc3FsIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4 IDJlNGFhMWM0YjYuLjA2YjBiZDE2YjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv c3lzdGVtX3ZpZXdzLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5z cWwKQEAgLTU1NSwxMCArNTU1LDEwIEBAIFJFVk9LRSBBTEwgT04gcGdfc2htZW1fYWxsb2NhdGlv bnMgRlJPTSBQVUJMSUM7CiBSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19nZXRfc2htZW1f YWxsb2NhdGlvbnMoKSBGUk9NIFBVQkxJQzsKIAogQ1JFQVRFIFZJRVcgcGdfYmFja2VuZF9tZW1v cnlfY29udGV4dHMgQVMKLSAgICBTRUxFQ1QgKiBGUk9NIHBnX2dldF9iYWNrZW5kX21lbW9yeV9j b250ZXh0cygpOworICAgIFNFTEVDVCAqIEZST00gcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzKE5VTEwpOwogCiBSRVZPS0UgQUxMIE9OIHBnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIEZS T00gUFVCTElDOwotUkVWT0tFIEVYRUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X2JhY2tlbmRfbWVt b3J5X2NvbnRleHRzKCkgRlJPTSBQVUJMSUM7CitSRVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBw Z19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgRlJPTSBQVUJMSUM7CiAKIC0tIFN0YXRpc3Rp Y3Mgdmlld3MKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ3N0YXQuYyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdzdGF0LmMKaW5kZXggZTc2ZTYyN2M2Yi4uMjI1MzU0 MzU0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ3N0YXQuYworKysgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bnc3RhdC5jCkBAIC00MDI0LDYgKzQwMjQsOSBAQCBwZ3N0 YXRfZ2V0X3dhaXRfaXBjKFdhaXRFdmVudElQQyB3KQogCQljYXNlIFdBSVRfRVZFTlRfWEFDVF9H Uk9VUF9VUERBVEU6CiAJCQlldmVudF9uYW1lID0gIlhhY3RHcm91cFVwZGF0ZSI7CiAJCQlicmVh azsKKwkJY2FzZSBXQUlUX0VWRU5UX01FTU9SWV9DT05URVhUX0RVTVA6CisJCQlldmVudF9uYW1l ID0gIk1lbW9yeUNvbnRleHREdW1wIjsKKwkJCWJyZWFrOwogCQkJLyogbm8gZGVmYXVsdCBjYXNl LCBzbyB0aGF0IGNvbXBpbGVyIHdpbGwgd2FybiAqLwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vYmFzZWJhY2t1cC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v YmFzZWJhY2t1cC5jCmluZGV4IGI4OWRmMDFmYTcuLjNlZGI1OTE5NTIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2Jhc2ViYWNrdXAuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9iYXNlYmFja3VwLmMKQEAgLTE4NCw2ICsxODQsOSBAQCBzdGF0aWMgY29uc3QgY2hh ciAqY29uc3QgZXhjbHVkZURpckNvbnRlbnRzW10gPQogCS8qIENvbnRlbnRzIHplcm9lZCBvbiBz dGFydHVwLCBzZWUgU3RhcnR1cFNVQlRSQU5TKCkuICovCiAJInBnX3N1YnRyYW5zIiwKIAorCS8q IFNraXAgbWVtb3J5IGNvbnRleHQgZHVtcGVkIGZpbGVzLiAqLworCSJwZ19tZW11c2FnZSIsCisK IAkvKiBlbmQgb2YgbGlzdCAqLwogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXgg OTZjMmFhYWJiZC4uOTJmMjFhZDJiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtNDUsNiAr NDUsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInN0b3Jh Z2Uvc2ludmFsYWR0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCisjaW5jbHVkZSAidXRp bHMvbWN4dGZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCiAvKiBHVUNzICov CkBAIC0yNjcsNiArMjY4LDcgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lk KQogCUJUcmVlU2htZW1Jbml0KCk7CiAJU3luY1NjYW5TaG1lbUluaXQoKTsKIAlBc3luY1NobWVt SW5pdCgpOworCU1jeHREdW1wU2htZW1Jbml0KCk7CiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4IGZmZTY3YWNlYTEuLmExZTg4OTA2 NDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKQEAgLTI4LDYgKzI4LDcgQEAK ICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWwuaCIK ICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvbWN4dGZ1bmNzLmgi CiAKIC8qCiAgKiBUaGUgU0lHVVNSMSBzaWduYWwgaXMgbXVsdGlwbGV4ZWQgdG8gc3VwcG9ydCBz aWduYWxpbmcgbXVsdGlwbGUgZXZlbnQKQEAgLTU2Nyw2ICs1NjgsOSBAQCBwcm9jc2lnbmFsX3Np Z3VzcjFfaGFuZGxlcihTSUdOQUxfQVJHUykKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdf QkFSUklFUikpCiAJCUhhbmRsZVByb2NTaWduYWxCYXJyaWVySW50ZXJydXB0KCk7CiAKKwlpZiAo Q2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfRFVNUF9NRU1DWFQpKQorCQlIYW5kbGVQcm9jU2lnbmFs RHVtcE1lbW9yeSgpOworCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1JFQ09WRVJZX0NP TkZMSUNUX0RBVEFCQVNFKSkKIAkJUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQUk9DU0lHX1JF Q09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xv Y2tuYW1lcy50eHQKaW5kZXggNzc0MjkyZmQ5NC4uNjAzNjcxM2YxMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL2x3bG9ja25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2xtZ3IvbHdsb2NrbmFtZXMudHh0CkBAIC01MywzICs1Myw0IEBAIFhhY3RUcnVuY2F0 aW9uTG9jawkJCQkJNDQKICMgNDUgd2FzIFhhY3RUcnVuY2F0aW9uTG9jayB1bnRpbCByZW1vdmFs IG9mIEJhY2tlbmRSYW5kb21Mb2NrCiBXcmFwTGltaXRzVmFjdXVtTG9jawkJCQk0NgogTm90aWZ5 UXVldWVUYWlsTG9jawkJCQkJNDcKK01jeHREdW1wSGFzaExvY2sJCQkJCTQ4CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVz LmMKaW5kZXggNDExY2ZhZGJmZi4uZThmNDE3NWM0OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtNzUs NiArNzUsNyBAQAogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ0Y29wL3V0 aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9t Y3h0ZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxz L3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKQEAgLTUzOSw2ICs1NDAs MTAgQEAgUHJvY2Vzc0NsaWVudFJlYWRJbnRlcnJ1cHQoYm9vbCBibG9ja2VkKQogCQkvKiBQcm9j ZXNzIG5vdGlmeSBpbnRlcnJ1cHRzLCBpZiBhbnkgKi8KIAkJaWYgKG5vdGlmeUludGVycnVwdFBl bmRpbmcpCiAJCQlQcm9jZXNzTm90aWZ5SW50ZXJydXB0KCk7CisKKwkJLyogUHJvY2VzcyBtZW1v cnkgY29udGV4dHMgZHVtcCBpbnRlcnJ1cHRzLCBpZiBhbnkgKi8KKwkJaWYgKFByb2NTaWduYWxE dW1wTWVtb3J5UGVuZGluZykKKwkJCVByb2Nlc3NEdW1wTWVtb3J5SW50ZXJydXB0KCk7CiAJfQog CWVsc2UgaWYgKFByb2NEaWVQZW5kaW5nKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9tY3h0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwpp bmRleCA1MGUxYjA3ZmYwLi41NjQyMjRlYTNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvbWN4dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5j CkBAIC0xNSwzMCArMTUsOTIgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY29tbW9uL2xv Z2dpbmcuaCIKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJz dG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIKKyNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvcHJvY3NpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htZW0uaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL21jeHRmdW5jcy5oIgorCisvKiBU aGUgbWF4IGJ5dGVzIGZvciBzaG93aW5nIG5hbWVzIGFuZCBpZGVudGlmaWVycyBvZiBNZW1vcnlD b250ZXh0LiAqLworI2RlZmluZSBNRU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkUJMTAyNAorCisv KiBOdW1iZXIgb2YgY29sdW1ucyBpbiBwZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyB2aWV3ICov CisjZGVmaW5lIFBHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05URVhUU19DT0xTCTkKIAotLyogLS0t LS0tLS0tLQotICogVGhlIG1heCBieXRlcyBmb3Igc2hvd2luZyBpZGVudGlmaWVycyBvZiBNZW1v cnlDb250ZXh0LgotICogLS0tLS0tLS0tLQorLyogSGFzaCBmb3IgbWFuYWdpbmcgdGhlIHN0YXR1 cyBvZiBtZW1vcnkgY29udGV4dCBkdW1wLiAqLworc3RhdGljIEhUQUIgKm1jeHRkdW1wSGFzaCA9 IE5VTEw7CisKKworLyoKKyAqIE1jeHRSZXFLaWxsCisgKgkJQ2xlYW51cCBmdW5jdGlvbiBmb3Ig bWVtb3J5IGNvbnRleHQgZHVtcCByZXF1ZXN0b3IuCisgKgorICogQ2FsbGVkIHdoZW4gdGhlIGNh bGxlciBvZiBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQorICogZXhpdHMuCiAgKi8K LSNkZWZpbmUgTUVNT1JZX0NPTlRFWFRfSURFTlRfRElTUExBWV9TSVpFCTEwMjQKK3N0YXRpYyB2 b2lkCitNY3h0UmVxS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKQoreworCW1jeHRkdW1wRW50cnkJ KmVudHJ5OworCWludAkJZHVtcF9zdGF0dXM7CisJaW50CQlkc3RfcGlkID0gRGF0dW1HZXRJbnQz MihhcmcpOzsKKworCUxXTG9ja0FjcXVpcmUoTWN4dER1bXBIYXNoTG9jaywgTFdfRVhDTFVTSVZF KTsKKworCWVudHJ5ID0gKG1jeHRkdW1wRW50cnkgKikgaGFzaF9zZWFyY2gobWN4dGR1bXBIYXNo LCAmZHN0X3BpZCwgSEFTSF9GSU5ELCBOVUxMKTsKKworCWlmIChlbnRyeSA9PSBOVUxMKQorCQll bG9nKEVSUk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0ZWQiKTsKKworCWR1bXBfc3RhdHVzID0gZW50 cnktPmR1bXBfc3RhdHVzOworCisJaWYgKGR1bXBfc3RhdHVzID09IE1DWFREVU1QU1RBVFVTX1JF UVVFU1RJTkcpCisJeworCQllbG9nKERFQlVHMiwgInJlbW92aW5nICVkIGVudHJ5IGF0IE1DWFRE VU1QU1RBVFVTX1JFUVVFU1RJTkcuIiAsIGRzdF9waWQpOworCQloYXNoX3NlYXJjaChtY3h0ZHVt cEhhc2gsICZkc3RfcGlkLCBIQVNIX1JFTU9WRSwgTlVMTCk7CisJfQorCisJZWxzZSBpZiAoZHVt cF9zdGF0dXMgPT0gTUNYVERVTVBTVEFUVVNfRFVNUElORykKKwl7CisJCWVudHJ5LT5kdW1wX3N0 YXR1cyA9IE1DWFREVU1QU1RBVFVTX0NBTkNFTElORzsKKwkJZWxvZyhERUJVRzIsICJzdGF0dXMg Y2hhbmdlZCBmcm9tIE1DWFREVU1QU1RBVFVTX0RVTVBJTkcgdG8gTUNYVERVTVBTVEFUVVNfQ0FO Q0VMSU5HLiIpOworCX0KKwllbHNlIGlmIChkdW1wX3N0YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19E T05FKQorCXsKKwkJaGFzaF9zZWFyY2gobWN4dGR1bXBIYXNoLCAmZHN0X3BpZCwgSEFTSF9SRU1P VkUsIE5VTEwpOworCisJCS8qIGZvciBkZWJ1ZyAqLworCQllbG9nKERFQlVHMiwgInJlbW92aW5n IGR1bXAgZmlsZSBvZiBQSUQgJWQgYXQgTUNYVERVTVBTVEFUVVNfRE9ORS4iLCBkc3RfcGlkKTsK KwkJUmVtb3ZlTWVtY3h0RmlsZShkc3RfcGlkKTsKKwl9CisJTFdMb2NrUmVsZWFzZShNY3h0RHVt cEhhc2hMb2NrKTsKK30KIAogLyoKICAqIFB1dE1lbW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3Jl CiAgKgkJT25lIHJlY3Vyc2lvbiBsZXZlbCBmb3IgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzLgorICoKKyAqIE5vdGU6IFdoZW4gZnBvdXQgaXMgbm90IE5VTEwsIGZlcnJvcigpIGNoZWNr IG11c3QgYmUgZG9uZSBieSB0aGUgY2FsbGVyLgogICovCiBzdGF0aWMgdm9pZAogUHV0TWVtb3J5 Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUoVHVwbGVzdG9yZXN0YXRlICp0dXBzdG9yZSwKIAkJCQkJ CQkJVHVwbGVEZXNjIHR1cGRlc2MsIE1lbW9yeUNvbnRleHQgY29udGV4dCwKLQkJCQkJCQkJY29u c3QgY2hhciAqcGFyZW50LCBpbnQgbGV2ZWwpCisJCQkJCQkJCWNvbnN0IGNoYXIgKnBhcmVudCwg aW50IGxldmVsLCBGSUxFICpmcG91dCkKIHsKLSNkZWZpbmUgUEdfR0VUX0JBQ0tFTkRfTUVNT1JZ X0NPTlRFWFRTX0NPTFMJOQotCiAJRGF0dW0JCXZhbHVlc1tQR19HRVRfQkFDS0VORF9NRU1PUllf Q09OVEVYVFNfQ09MU107CiAJYm9vbAkJbnVsbHNbUEdfR0VUX0JBQ0tFTkRfTUVNT1JZX0NPTlRF WFRTX0NPTFNdOworCWNoYXIJCWNsaXBwZWRfaWRlbnRbTUVNT1JZX0NPTlRFWFRfRElTUExBWV9T SVpFXTsKIAlNZW1vcnlDb250ZXh0Q291bnRlcnMgc3RhdDsKIAlNZW1vcnlDb250ZXh0IGNoaWxk OwogCWNvbnN0IGNoYXIgKm5hbWU7CkBAIC03NCwxNCArMTM2LDEyIEBAIFB1dE1lbW9yeUNvbnRl eHRzU3RhdHNUdXBsZVN0b3JlKFR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmUsCiAJaWYgKGlkZW50 KQogCXsKIAkJaW50CQlpZGxlbiA9IHN0cmxlbihpZGVudCk7Ci0JCWNoYXIJCWNsaXBwZWRfaWRl bnRbTUVNT1JZX0NPTlRFWFRfSURFTlRfRElTUExBWV9TSVpFXTsKLQogCQkvKgogCQkgKiBTb21l IGlkZW50aWZpZXJzIHN1Y2ggYXMgU1FMIHF1ZXJ5IHN0cmluZyBjYW4gYmUgdmVyeSBsb25nLAog CQkgKiB0cnVuY2F0ZSBvdmVyc2l6ZSBpZGVudGlmaWVycy4KIAkJICovCi0JCWlmIChpZGxlbiA+ PSBNRU1PUllfQ09OVEVYVF9JREVOVF9ESVNQTEFZX1NJWkUpCi0JCQlpZGxlbiA9IHBnX21iY2xp cGxlbihpZGVudCwgaWRsZW4sIE1FTU9SWV9DT05URVhUX0lERU5UX0RJU1BMQVlfU0laRSAtIDEp OworCQlpZiAoaWRsZW4gPj0gTUVNT1JZX0NPTlRFWFRfRElTUExBWV9TSVpFKQorCQkJaWRsZW4g PSBwZ19tYmNsaXBsZW4oaWRlbnQsIGlkbGVuLCBNRU1PUllfQ09OVEVYVF9ESVNQTEFZX1NJWkUg LSAxKTsKIAogCQltZW1jcHkoY2xpcHBlZF9pZGVudCwgaWRlbnQsIGlkbGVuKTsKIAkJY2xpcHBl ZF9pZGVudFtpZGxlbl0gPSAnXDAnOwpAQCAtMTAxLDEzICsxNjEsMTk4IEBAIFB1dE1lbW9yeUNv bnRleHRzU3RhdHNUdXBsZVN0b3JlKFR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmUsCiAJdmFsdWVz WzZdID0gSW50NjRHZXREYXR1bShzdGF0LmZyZWVzcGFjZSk7CiAJdmFsdWVzWzddID0gSW50NjRH ZXREYXR1bShzdGF0LmZyZWVjaHVua3MpOwogCXZhbHVlc1s4XSA9IEludDY0R2V0RGF0dW0oc3Rh dC50b3RhbHNwYWNlIC0gc3RhdC5mcmVlc3BhY2UpOwotCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHR1 cHN0b3JlLCB0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKTsKKworCS8qCisJICogU2luY2UgcGdfZ2V0 X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCkgaXMgY2FsbGVkIGZyb20gbG9jYWwgcHJvY2VzcywK KwkgKiBzaW1wbHkgcHV0IHR1cGxlcy4KKwkgKi8KKwlpZihmcG91dCA9PSBOVUxMKQorCQl0dXBs ZXN0b3JlX3B1dHZhbHVlcyh0dXBzdG9yZSwgdHVwZGVzYywgdmFsdWVzLCBudWxscyk7CisKKwkv KgorCSAqIFdyaXRlIG91dCB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCBpbmZvcm1hdGlvbiBp biB0aGUgZm9ybSBvZgorCSAqICJrZXk6IHZhbHVlIiBwYWlycyB0byB0aGUgZmlsZSBzcGVjaWZp ZWQgYnkgdGhlIHJlcXVlc3Rvci4KKwkgKi8KKwllbHNlCisJeworCQkvKgorCQkgKiBNYWtlIGVh Y2ggbWVtb3J5IGNvbnRleHQgaW5mb3JtYXRpb24gc3RhcnRzIHdpdGggJ0QnLgorCQkgKiBUaGlz IGlzIGNoZWNrZWQgYnkgdGhlIHJlcXVlc3RvciB3aGVuIHJlYWRpbmcgdGhlIGZpbGUuCisJCSAq LworCQlmcHV0YygnRCcsIGZwb3V0KTsKKworCQlmcHJpbnRmKGZwb3V0LAorCQkJIm5hbWU6ICVz LCBpZGVudDogJXMsIHBhcmVudDogJXMsIGxldmVsOiAlZCwgdG90YWxfYnl0ZXM6ICVsdSwgXAor CQkJdG90YWxfbmJsb2NrczogJWx1LCBmcmVlX2J5dGVzOiAlbHUsIGZyZWVfY2h1bmtzOiAlbHUs IHVzZWRfYnl0ZXM6ICVsdSxcbiIsCisJCQluYW1lLAorCQkJaWRlbnQgPyBjbGlwcGVkX2lkZW50 IDogIm5vbmUiLAorCQkJcGFyZW50ID8gcGFyZW50IDogIm5vbmUiLCBsZXZlbCwKKwkJCXN0YXQu dG90YWxzcGFjZSwKKwkJCXN0YXQubmJsb2NrcywKKwkJCXN0YXQuZnJlZXNwYWNlLAorCQkJc3Rh dC5mcmVlY2h1bmtzLAorCQkJc3RhdC50b3RhbHNwYWNlIC0gc3RhdC5mcmVlc3BhY2UpOworCX0K IAogCWZvciAoY2hpbGQgPSBjb250ZXh0LT5maXJzdGNoaWxkOyBjaGlsZCAhPSBOVUxMOyBjaGls ZCA9IGNoaWxkLT5uZXh0Y2hpbGQpCiAJewogCQlQdXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVT dG9yZSh0dXBzdG9yZSwgdHVwZGVzYywKLQkJCQkJCQkJICBjaGlsZCwgbmFtZSwgbGV2ZWwgKyAx KTsKKwkJCQkJCQkJICBjaGlsZCwgbmFtZSwgbGV2ZWwgKyAxLCBmcG91dCk7CisJfQorfQorCisv KgorICogQWRkRW50cnlUb01jeHRkdW1wSGFzaAorICogCQlBZGQgYW4gZW50cnkgdG8gTWN4dGR1 bXBIYXNoIGZvciBzcGVjaWZpZWQgUElELgorICovCitzdGF0aWMgbWN4dGR1bXBFbnRyeSAqCitB ZGRFbnRyeVRvTWN4dGR1bXBIYXNoKGludCBwaWQpCit7CisJbWN4dGR1bXBFbnRyeQkqZW50cnk7 CisJYm9vbAkJZm91bmQ7CisKKwkvKgorCSAqIFdlIG9ubHkgYWxsb3cgb25lIHNlc3Npb24gcGVy IHRhcmdldCBwcm9jZXNzIHRvIHJlcXVlc3QgYSBtZW1vcnkKKwkgKiBkdW1wIGF0IGEgdGltZS4K KwkgKiBJZiBtY3h0ZHVtcEhhc2ggaGFzIGNvcnJlc3BvbmRpbmcgZW50cnksIHdhaXQgdW50aWwg aXQgaGFzIHJlbW92ZWQuCisJICovCisJd2hpbGUgKHRydWUpCisJeworCQlMV0xvY2tBY3F1aXJl KE1jeHREdW1wSGFzaExvY2ssIExXX1NIQVJFRCk7CisJCWVudHJ5ID0gKG1jeHRkdW1wRW50cnkg KikgaGFzaF9zZWFyY2gobWN4dGR1bXBIYXNoLCAmcGlkLAorCQkJSEFTSF9FTlRFUiwgJmZvdW5k KTsKKworCQlpZiAoIWZvdW5kKQorCQl7CisJCQkvKiBOZWVkIGV4Y2x1c2l2ZSBsb2NrIHRvIG1h a2UgYSBuZXcgaGFzaHRhYmxlIGVudHJ5ICovCisJCQlMV0xvY2tSZWxlYXNlKE1jeHREdW1wSGFz aExvY2spOworCQkJTFdMb2NrQWNxdWlyZShNY3h0RHVtcEhhc2hMb2NrLCBMV19FWENMVVNJVkUp OworCisJCQllbnRyeS0+ZHVtcF9zdGF0dXMgPSBNQ1hURFVNUFNUQVRVU19SRVFVRVNUSU5HOwor CQkJZW50cnktPnNyY19waWQgPSBNeVByb2NQaWQ7CisKKwkJCUxXTG9ja1JlbGVhc2UoTWN4dER1 bXBIYXNoTG9jayk7CisKKwkJCXJldHVybiBlbnRyeTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVy ZXBvcnQoSU5GTywKKwkJCQkJKGVycm1zZygiUElEICVkIGlzIGxvb2tlZCB1cCBieSBhbm90aGVy IHByb2Nlc3MiLCBwaWQpKSk7CisKKwkJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBIYXNoTG9jayk7 CisKKwkJCXBnX3VzbGVlcCg1MDAwMDAwTCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBQdXREdW1w ZWRWYWx1ZXNPblR1cGxlc3RvcmUKKyAqCQlSZWFkIHNwZWNpZmllZCBtZW1vcnkgY29udGV4dCBk dW1wIGZpbGUgYW5kIHB1dCBpdHMgdmFsdWVzCisgKgkJb24gdGhlIHR1cGxlIHN0b3JlLgorICov CitzdGF0aWMgdm9pZAorUHV0RHVtcGVkVmFsdWVzT25UdXBsZXN0b3JlKGNoYXIgKmR1bXBmaWxl LCBUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3JlLAorCQkJCQkJCQlUdXBsZURlc2MgdHVwZGVzYywg aW50IHBpZCkKK3sKKwlGSUxFCSAJKmZwaW47CisJaW50CQlmb3JtYXRfaWQ7CisKKwlpZiAoKGZw aW4gPSBBbGxvY2F0ZUZpbGUoZHVtcGZpbGUsICJyIikpID09IE5VTEwpCisJeworCQlpZiAoZXJy bm8gIT0gRU5PRU5UKQorCQkJZXJlcG9ydChMT0csIChlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAorCQkJCWVycm1zZygiY291bGQgbm90IG9wZW4gbWVtb3J5IGNvbnRleHQgZHVtcCBmaWxlIFwi JXNcIjogJW0iLAorCQkJCQlkdW1wZmlsZSkpKTsKKwl9CisKKwkvKiBWZXJpZnkgaXQncyBvZiB0 aGUgZXhwZWN0ZWQgZm9ybWF0LiAqLworCWlmIChmcmVhZCgmZm9ybWF0X2lkLCAxLCBzaXplb2Yo Zm9ybWF0X2lkKSwgZnBpbikgIT0gc2l6ZW9mKGZvcm1hdF9pZCkgfHwKKwkJZm9ybWF0X2lkICE9 IFBHX01FTUNPTlRFWFRfRklMRV9GT1JNQVRfSUQpCisJeworCQllcmVwb3J0KFdBUk5JTkcsCisJ CQkJKGVycm1zZygiY29ycnVwdGVkIG1lbW9yeSBjb250ZXh0IGR1bXAgZmlsZSBcIiVzXCIiLCBk dW1wZmlsZSkpKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIFJlYWQgZHVtcCBmaWxlIGFuZCBw dXQgdmFsdWVzIG9uIHR1cGxlIHN0b3JlLiAqLworCXdoaWxlICh0cnVlKQorCXsKKwkJRGF0dW0J CXZhbHVlc1tQR19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09MU107CisJCWJvb2wJCW51 bGxzW1BHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05URVhUU19DT0xTXTsKKwkJY2hhciAJCW5hbWVb TUVNT1JZX0NPTlRFWFRfRElTUExBWV9TSVpFXTsKKwkJY2hhciAJCXBhcmVudFtNRU1PUllfQ09O VEVYVF9ESVNQTEFZX1NJWkVdOworCQljaGFyIAkJY2xpcHBlZF9pZGVudFtNRU1PUllfQ09OVEVY VF9ESVNQTEFZX1NJWkVdOworCQlpbnQgCQlsZXZlbDsKKwkJU2l6ZQl0b3RhbF9ieXRlczsKKwkJ U2l6ZQl0b3RhbF9uYmxvY2tzOworCQlTaXplCWZyZWVfYnl0ZXM7CisJCVNpemUJZnJlZV9jaHVu a3M7CisJCVNpemUJdXNlZF9ieXRlczsKKworCQltZW1zZXQodmFsdWVzLCAwLCBzaXplb2YodmFs dWVzKSk7CisJCW1lbXNldChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7CisKKwkJc3dpdGNoIChm Z2V0YyhmcGluKSkKKwkJeworCQkJLyogJ0QnCUEgbWVtb3J5IGNvbnRleHQgaW5mb3JtYXRpb24g Zm9sbG93cy4gKi8KKwkJCWNhc2UgJ0QnOgorCQkJCWlmIChmc2NhbmYoZnBpbiwgIm5hbWU6ICUx MDIzW14sXSwgaWRlbnQ6ICUxMDIzW14sXSwgcGFyZW50OiAlMTAyM1teLF0sIFwKKwkJCQkJbGV2 ZWw6ICVkLCB0b3RhbF9ieXRlczogJWx1LCB0b3RhbF9uYmxvY2tzOiAlbHUsIFwKKwkJCQkJZnJl ZV9ieXRlczogJWx1LCBmcmVlX2NodW5rczogJWx1LCB1c2VkX2J5dGVzOiAlbHUsXG4iLAorCQkJ CQluYW1lLCBjbGlwcGVkX2lkZW50LCBwYXJlbnQsICZsZXZlbCwgJnRvdGFsX2J5dGVzLCAmdG90 YWxfbmJsb2NrcywKKwkJCQkJCSZmcmVlX2J5dGVzLCAmZnJlZV9jaHVua3MsICZ1c2VkX2J5dGVz KQorCQkJCQkhPSBQR19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09MUykKKwkJCQl7CisJ CQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCShlcnJtc2coImNvcnJ1cHRlZCBtZW1vcnkgY29u dGV4dCBkdW1wIGZpbGUgXCIlc1wiIiwKKwkJCQkJCQlkdW1wZmlsZSkpKTsKKwkJCQkJZ290byBk b25lOworCQkJCX0KKworCQkJCXZhbHVlc1swXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0obmFtZSk7 CisKKwkJCQlpZiAoc3RyY21wKGNsaXBwZWRfaWRlbnQsICJub25lIikpCisJCQkJCXZhbHVlc1sx XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oY2xpcHBlZF9pZGVudCk7CisJCQkJZWxzZQorCQkJCQlu dWxsc1sxXSA9IHRydWU7CisKKwkJCQlpZiAoc3RyY21wKHBhcmVudCwgIm5vbmUiKSkKKwkJCQkJ dmFsdWVzWzJdID0gQ1N0cmluZ0dldFRleHREYXR1bShwYXJlbnQpOworCQkJCWVsc2UKKwkJCQkJ bnVsbHNbMl0gPSB0cnVlOworCisJCQkJdmFsdWVzWzNdID0gSW50MzJHZXREYXR1bShsZXZlbCk7 CisJCQkJdmFsdWVzWzRdID0gSW50NjRHZXREYXR1bSh0b3RhbF9ieXRlcyk7CisJCQkJdmFsdWVz WzVdID0gSW50NjRHZXREYXR1bSh0b3RhbF9uYmxvY2tzKTsKKwkJCQl2YWx1ZXNbNl0gPSBJbnQ2 NEdldERhdHVtKGZyZWVfYnl0ZXMpOworCQkJCXZhbHVlc1s3XSA9IEludDY0R2V0RGF0dW0oZnJl ZV9jaHVua3MpOworCQkJCXZhbHVlc1s4XSA9IEludDY0R2V0RGF0dW0odXNlZF9ieXRlcyk7CisK KwkJCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyh0dXBzdG9yZSwgdHVwZGVzYywgdmFsdWVzLCBudWxs cyk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ0UnOgorCQkJCWdvdG8gZG9uZTsKKworCQkJZGVm YXVsdDoKKwkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkoZXJybXNnKCJjb3JydXB0ZWQgbWVt b3J5IGNvbnRleHQgZHVtcCBmaWxlIFwiJXNcIiIsCisJCQkJCQkJZHVtcGZpbGUpKSk7CisJCQkJ Z290byBkb25lOworCQl9CiAJfQorZG9uZToKKwlGcmVlRmlsZShmcGluKTsKKwl1bmxpbmsoZHVt cGZpbGUpOworCisJTFdMb2NrQWNxdWlyZShNY3h0RHVtcEhhc2hMb2NrLCBMV19FWENMVVNJVkUp OworCisJaWYgKGhhc2hfc2VhcmNoKG1jeHRkdW1wSGFzaCwgJnBpZCwgSEFTSF9SRU1PVkUsIE5V TEwpID09IE5VTEwpCisJCWVsb2coRVJST1IsICJoYXNoIHRhYmxlIGNvcnJ1cHRlZCIpOworCisJ TFdMb2NrUmVsZWFzZShNY3h0RHVtcEhhc2hMb2NrKTsKIH0KIAogLyoKQEAgLTExNyw2ICszNjIs OCBAQCBQdXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVTdG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1 cHN0b3JlLAogRGF0dW0KIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElP Tl9BUkdTKQogeworCWludAkJCWRzdF9waWQgPSBQR19BUkdJU05VTEwoMCkgPyAtMSA6IFBHX0dF VEFSR19JTlQzMigwKTsKKwogCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZv ICopIGZjaW5mby0+cmVzdWx0aW5mbzsKIAlUdXBsZURlc2MJdHVwZGVzYzsKIAlUdXBsZXN0b3Jl c3RhdGUgKnR1cHN0b3JlOwpAQCAtMTQ3LDExICszOTQsMzQ5IEBAIHBnX2dldF9iYWNrZW5kX21l bW9yeV9jb250ZXh0cyhQR19GVU5DVElPTl9BUkdTKQogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZGNvbnRleHQpOwogCi0JUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUodHVwc3Rv cmUsIHR1cGRlc2MsCi0JCQkJCQkJCVRvcE1lbW9yeUNvbnRleHQsIE5VTEwsIDApOworCS8qCisJ ICogSWYgdGhlIHRhcmdldCBpcyBsb2NhbCBwcm9jZXNzLCBzaW1wbHkgbG9vayBpbnRvIG1lbW9y eSBjb250ZXh0cworCSAqIHJlY3Vyc2l2ZWx5LgorCSAqLworCWlmIChkc3RfcGlkID09IC0xIHx8 IGRzdF9waWQgPT0gTXlQcm9jUGlkKQorCQlQdXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVTdG9y ZSh0dXBzdG9yZSwgdHVwZGVzYywKKwkJCQkJCQkJVG9wTWVtb3J5Q29udGV4dCwgIiIsIDAsIE5V TEwpOworCisJLyoKKwkgKiBUYXJnZXQgcHJvY2VzcyBpcyBub3QgbG9jYWwuCisJICogU2VuZCBz aWduYWwgZm9yIGR1bXBpbmcgbWVtb3J5IGNvbnRleHRzIHRvIHRoZSB0YXJnZXQgcHJvY2VzcywK KwkgKiBhbmQgcmVhZCB0aGUgZHVtcCBmaWxlLgorCSAqLworCWVsc2UKKwl7CisJCWNoYXIJCWR1 bXBmaWxlW01BWFBHUEFUSF07CisJCW1jeHRkdW1wRW50cnkJKmVudHJ5OworCQlQR1BST0MJIAkq cHJvYzsKKworCQlzbnByaW50ZihkdW1wZmlsZSwgc2l6ZW9mKGR1bXBmaWxlKSwgIiVzLyVkIiwg UEdfTUVNVVNBR0VfRElSLCBkc3RfcGlkKTsKKworCQkvKgorCQkgKiBDaGVjayB3aGV0aGVyIHRo ZSB0YXJnZXQgcHJvY2VzcyBpcyBQb3N0Z3JlU1FMIGJhY2tlbmQgcHJvY2Vzcy4KKwkJICoKKwkJ ICogSWYgdGhlIHRhcmdldCBwcm9jZXNzIGRpZXMgYWZ0ZXIgdGhpcyBwb2ludCBhbmQgYmVmb3Jl IHNlbmRpbmcgc2lnbmFsLAorCQkgKiB1c2VycyBhcmUgZXhwZWN0ZWQgdG8gY2FuY2VsIHRoZSBy ZXF1ZXN0LgorCQkgKi8KKworCQkvKiBUT0RPOiBDaGVjayBhbHNvIHdoZXRoZXIgYmFja2VuZCBv ciBub3QuICovCisJCXByb2MgPSBCYWNrZW5kUGlkR2V0UHJvYyhkc3RfcGlkKTsKKworCQlpZiAo cHJvYyA9PSBOVUxMKQorCQl7CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJtc2coIlBJ RCAlZCBpcyBub3QgYSBQb3N0Z3JlU1FMIHNlcnZlciBwcm9jZXNzIiwgZHN0X3BpZCkpKTsKKwor CQkJcmV0dXJuIChEYXR1bSkgMTsKKwkJfQorCisJCS8qCisJCSAqIFRoZSBFTlNVUkUgc3R1ZmYg ZW5zdXJlcyB3ZSBjbGVhbiB1cCB0aGUgc2hhcmVkIG1lbW9yeSBlbnRyeSBhbmQgZmlsZXMKKwkJ ICogb24gZmFpbHVyZS4KKwkJICovCisJCVBHX0VOU1VSRV9FUlJPUl9DTEVBTlVQKE1jeHRSZXFL aWxsLCAoRGF0dW0pIEludDMyR2V0RGF0dW0oZHN0X3BpZCkpOworCQl7CisJCQllbnRyeSA9IEFk ZEVudHJ5VG9NY3h0ZHVtcEhhc2goZHN0X3BpZCk7CisKKwkJCVNlbmRQcm9jU2lnbmFsKGRzdF9w aWQsIFBST0NTSUdfRFVNUF9NRU1DWFQsIEludmFsaWRCYWNrZW5kSWQpOworCisJCQkvKiBXYWl0 IHVudGlsIHRhcmdldCBwcm9jZXNzIGZpbmlzaGVzIGR1bXBpbmcgZmlsZS4gKi8KKwkJCWZvciAo OzspCisJCQl7CisJCQkJLyogQ2hlY2sgZm9yIGR1bXAgY2FuY2VsIHJlcXVlc3QuICovCisJCQkJ Q0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkJCS8qIE11c3QgcmVzZXQgdGhlIGxhdGNoIGJl Zm9yZSB0ZXN0aW5nIHN0YXRlLiAqLworCQkJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJCQkv KiBDaGVjayB3aGV0aGVyIHRoZSBkdW1wIGhhcyBjb21wbGV0ZWQuICovCisJCQkJTFdMb2NrQWNx dWlyZShNY3h0RHVtcEhhc2hMb2NrLCBMV19TSEFSRUQpOworCQkJCWVudHJ5ID0gKG1jeHRkdW1w RW50cnkgKikgaGFzaF9zZWFyY2gobWN4dGR1bXBIYXNoLCAmZHN0X3BpZCwgSEFTSF9GSU5ELCBO VUxMKTsKKworCQkJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICog RHVtcGVyIHNlZW1zIHRvIGNsZWFudXAgdGhlIGVucnkgYmVjYXVzZSBvZiBmYWlsdXJlcyBvcgor CQkJCQkgKiBjYW5jZWxsYXRpb24uCisJCQkJCSAqIFNpbmNlIHRoZSBkdW1wZXIgaGFzIGFscmVh ZHkgcmVtb3ZlZCB0aGUgZHVtcCBmaWxlLCB0aGUKKwkJCQkJICogcmVxdWVzdG9yIGNhbiBzaW1w bHkgZXhpdC4KKwkJCQkJICovCisJCQkJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBIYXNoTG9jayk7 CisJCQkJCXR1cGxlc3RvcmVfZG9uZXN0b3JpbmcodHVwc3RvcmUpOworCisJCQkJCXJldHVybiAo RGF0dW0pIDA7CisJCQkJfQorCisJCQkJaWYgKGVudHJ5LT5kdW1wX3N0YXR1cyA9PSBNQ1hURFVN UFNUQVRVU19DQU5DRUxJTkcpCisJCQkJeworCQkJCQkvKiBSZXF1ZXN0IGhhcyBjYW5jZWxlZC4g RXhpdCB3aXRob3V0IGR1bXBpbmcuICovCisJCQkJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBIYXNo TG9jayk7CisJCQkJCXR1cGxlc3RvcmVfZG9uZXN0b3JpbmcodHVwc3RvcmUpOworCisJCQkJCXJl dHVybiAoRGF0dW0pIDA7CisJCQkJfQorCisJCQkJZWxzZSBpZiAoZW50cnktPmR1bXBfc3RhdHVz ID09IE1DWFREVU1QU1RBVFVTX0RPTkUpCisJCQkJeworCQkJCQkvKiBEdW1waW5nIGhhcyBjb21w bGV0ZWQuICovCisJCQkJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBIYXNoTG9jayk7CisJCQkJCWJy ZWFrOworCQkJCX0KKworCQkJCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBIYXNoTG9jayk7CisKKwkJ CQkvKgorCQkJCSAqIFRoZSBzdGF0ZSBpcyBlaXRoZXIgdGhlIGR1bXBlciBpcyBpbiB0aGUgbWlk ZGxlIG9mIGEgZHVtcCwKKwkJCQkgKiBvciB0aGUgcmVxdWVzdCBoYXNuJ3QgYmVlbiByZWFjaGVk IHlldC4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoZW50cnktPmR1bXBfc3RhdHVzID09IE1DWFREVU1Q U1RBVFVTX1JFUVVFU1RJTkcgfHwKKwkJCQkJZW50cnktPmR1bXBfc3RhdHVzID09IE1DWFREVU1Q U1RBVFVTX0RVTVBJTkcpOworCisJCQkJLyoKKwkJCQkgKiBXYWl0LiBXZSBleHBlY3QgdG8gZ2V0 IGEgbGF0Y2ggc2lnbmFsIGJhY2sgZnJvbSB0aGUgZHVtcGVyLAorCQkJCSAqIGJ1dCB1c2UgYSB0 aW1lb3V0IHRvIGVuYWJsZSBjYW5jZWxsYXRpb24uCisJCQkJICovCisJCQkJKHZvaWQpIFdhaXRM YXRjaChNeUxhdGNoLAorCQkJCQkJV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRf T05fUE1fREVBVEgsCisJCQkJCQkxMDAwTCwgV0FJVF9FVkVOVF9NRU1PUllfQ09OVEVYVF9EVU1Q KTsKKwkJCX0KKwkJfQorCQlQR19FTkRfRU5TVVJFX0VSUk9SX0NMRUFOVVAoTWN4dFJlcUtpbGws IChEYXR1bSkgSW50MzJHZXREYXR1bShkc3RfcGlkKSk7CisKKwkJLyogUmVhZCB2YWx1ZXMgZnJv bSB0aGUgZHVtcCBmaWxlIGFuZCBwdXQgdGhlbSBvbiB0dXBsZXN0b3JlLiAqLworCQlQdXREdW1w ZWRWYWx1ZXNPblR1cGxlc3RvcmUoZHVtcGZpbGUsIHR1cHN0b3JlLCB0dXBkZXNjLCBkc3RfcGlk KTsKKwl9CiAKIAkvKiBjbGVhbiB1cCBhbmQgcmV0dXJuIHRoZSB0dXBsZXN0b3JlICovCiAJdHVw bGVzdG9yZV9kb25lc3RvcmluZyh0dXBzdG9yZSk7CiAKIAlyZXR1cm4gKERhdHVtKSAwOwogfQor CisvKgorICogZHVtcF9tZW1vcnlfY29udGV4dHMKKyAqIAkJRHVtcCBsb2NhbCBtZW1vcnkgY29u dGV4dHMgdG8gYSBmaWxlLgorICovCitzdGF0aWMgdm9pZAorZHVtcF9tZW1vcnlfY29udGV4dHMo dm9pZCkKK3sKKwlGSUxFCQkqZnBvdXQ7CisJY2hhcgkJZHVtcGZpbGVbTUFYUEdQQVRIXTsKKwlp bnQJCWZvcm1hdF9pZDsKKwlwaWRfdAkJc3JjX3BpZDsKKwlQR1BST0MJIAkqc3JjX3Byb2M7CisJ bWN4dGR1bXBFbnRyeQkqZW50cnk7CisKKwlzbnByaW50ZihkdW1wZmlsZSwgc2l6ZW9mKGR1bXBm aWxlKSwgIiVzLyVkIiwgUEdfTUVNVVNBR0VfRElSLCBNeVByb2NQaWQpOworCisJTFdMb2NrQWNx dWlyZShNY3h0RHVtcEhhc2hMb2NrLCBMV19FWENMVVNJVkUpOworCWVudHJ5ID0gKG1jeHRkdW1w RW50cnkgKikgaGFzaF9zZWFyY2gobWN4dGR1bXBIYXNoLCAmTXlQcm9jUGlkLCBIQVNIX0ZJTkQs IE5VTEwpOworCisJaWYgKGVudHJ5ID09IE5VTEwpCisJeworCQkvKgorCQkgKiBUaGUgZHVtcCBy ZXF1ZXN0IHNlZW1zIHRvIGhhdmUgY2FuY2VsZWQgYWxyZWFkeS4KKwkJICogRXhpdCB3aXRob3V0 IGR1bXBpbmcuCisJCSAqLworCQlMV0xvY2tSZWxlYXNlKE1jeHREdW1wSGFzaExvY2spOworCQly ZXR1cm47CisJfQorCisJZW50cnktPmR1bXBfc3RhdHVzID0gTUNYVERVTVBTVEFUVVNfRFVNUElO RzsKKwlzcmNfcGlkID0gZW50cnktPnNyY19waWQ7CisKKwlMV0xvY2tSZWxlYXNlKE1jeHREdW1w SGFzaExvY2spOworCisJZnBvdXQgPSBBbGxvY2F0ZUZpbGUoZHVtcGZpbGUsICJ3Iik7CisKKwlp ZiAoZnBvdXQgPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSBtZW1vcnkgY29udGV4 dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJZHVtcGZpbGUpKSk7CisJCUZyZWVGaWxlKGZwb3V0 KTsKKworCQlMV0xvY2tBY3F1aXJlKE1jeHREdW1wSGFzaExvY2ssIExXX0VYQ0xVU0lWRSk7CisK KwkJaWYgKGhhc2hfc2VhcmNoKG1jeHRkdW1wSGFzaCwgJk15UHJvY1BpZCwgSEFTSF9SRU1PVkUs IE5VTEwpID09IE5VTEwpCisJCQllbG9nKEVSUk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0ZWQiKTsK KworCQlMV0xvY2tSZWxlYXNlKE1jeHREdW1wSGFzaExvY2spOworCisJCXJldHVybjsKKwl9CisK Kwlmb3JtYXRfaWQgPSBQR19NRU1DT05URVhUX0ZJTEVfRk9STUFUX0lEOworCWZ3cml0ZSgmZm9y bWF0X2lkLCBzaXplb2YoZm9ybWF0X2lkKSwgMSwgZnBvdXQpOworCisJLyogTG9vayBpbnRvIGVh Y2ggbWVtb3J5IGNvbnRleHQgZnJvbSBUb3BNZW1vcnlDb250ZXh0IHJlY3Vyc2l2ZWx5LiAqLwor CVB1dE1lbW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKE5VTEwsIE5VTEwsCisJCQkJCQkJVG9w TWVtb3J5Q29udGV4dCwgTlVMTCwgMCwgZnBvdXQpOworCisJLyoKKwkgKiBNYWtlIGR1bXAgZmls ZSBlbmRzIHdpdGggJ0UnLgorCSAqIFRoaXMgaXMgY2hlY2tlZCBieSB0aGUgcmVxdWVzdG9yIGxh dGVyLgorCSAqLworCWZwdXRjKCdFJywgZnBvdXQpOworCisJaWYgKGZlcnJvcihmcG91dCkpCisJ eworCQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkg ZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgZHVtcCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJZHVt cGZpbGUpKSk7CisJCUZyZWVGaWxlKGZwb3V0KTsKKwkJdW5saW5rKGR1bXBmaWxlKTsKKworCQlM V0xvY2tBY3F1aXJlKE1jeHREdW1wSGFzaExvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkJaWYgKGhh c2hfc2VhcmNoKG1jeHRkdW1wSGFzaCwgJk15UHJvY1BpZCwgSEFTSF9SRU1PVkUsIE5VTEwpID09 IE5VTEwpCisJCQllbG9nKEVSUk9SLCAiaGFzaCB0YWJsZSBjb3JydXB0ZWQiKTsKKworCQlMV0xv Y2tSZWxlYXNlKE1jeHREdW1wSGFzaExvY2spOworCisJCXJldHVybjsKKwl9CisKKwkvKiBObyBt b3JlIG91dHB1dCB0byBiZSBkb25lLiBDbG9zZSBmaWxlLiAqLworCWVsc2UgaWYgKEZyZWVGaWxl KGZwb3V0KSA8IDApCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgZHVtcCBmaWxlIFwiJXNcIjog JW0iLAorCQkJCQkJZHVtcGZpbGUpKSk7CisJfQorCisJTFdMb2NrQWNxdWlyZShNY3h0RHVtcEhh c2hMb2NrLCBMV19FWENMVVNJVkUpOworCWVudHJ5ID0gKG1jeHRkdW1wRW50cnkgKikgaGFzaF9z ZWFyY2gobWN4dGR1bXBIYXNoLCAmTXlQcm9jUGlkLCBIQVNIX0ZJTkQsIE5VTEwpOworCisJLyog RHVyaW5nIGR1bXBpbmcsIHRoZSByZXF1ZXN0b3IgY2FuY2VsZWQgdGhlIHJlcXVlc3QuICovCisJ aWYgKGVudHJ5LT5kdW1wX3N0YXR1cyA9PSBNQ1hURFVNUFNUQVRVU19DQU5DRUxJTkcpCisJewor CQl1bmxpbmsoZHVtcGZpbGUpOworCisJCWlmIChoYXNoX3NlYXJjaChtY3h0ZHVtcEhhc2gsICZN eVByb2NQaWQsIEhBU0hfUkVNT1ZFLCBOVUxMKSA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwgImhh c2ggdGFibGUgY29ycnVwdGVkIik7CisKKwkJTFdMb2NrUmVsZWFzZShNY3h0RHVtcEhhc2hMb2Nr KTsKKworCQlyZXR1cm47CisJfQorCisJLyogIER1bXAgaGFzIHN1Y2NlZWRlZCwgbm90aWZ5IGl0 IHRvIHRoZSByZXF1ZXN0LiAqLworCWVudHJ5LT5kdW1wX3N0YXR1cyA9IE1DWFREVU1QU1RBVFVT X0RPTkU7CisJTFdMb2NrUmVsZWFzZShNY3h0RHVtcEhhc2hMb2NrKTsKKwlzcmNfcHJvYyA9IEJh Y2tlbmRQaWRHZXRQcm9jKHNyY19waWQpOworCVNldExhdGNoKCYoc3JjX3Byb2MtPnByb2NMYXRj aCkpOworCisJcmV0dXJuOworfQorCisvKgorICogUHJvY2Vzc0R1bXBNZW1vcnlJbnRlcnJ1cHQK KyAqCQlUaGUgcG9ydGlvbiBvZiBtZW1vcnkgY29udGV4dCBkdW1wIGludGVycnVwdCBoYW5kbGlu ZyB0aGF0IHJ1bnMKKyAqCQlvdXRzaWRlIG9mIHRoZSBzaWduYWwgaGFuZGxlci4KKyAqLwordm9p ZAorUHJvY2Vzc0R1bXBNZW1vcnlJbnRlcnJ1cHQodm9pZCkKK3sKKwlQcm9jU2lnbmFsRHVtcE1l bW9yeVBlbmRpbmcgPSBmYWxzZTsKKwlkdW1wX21lbW9yeV9jb250ZXh0cygpOworfQorCisvKgor ICogSGFuZGxlUHJvY1NpZ25hbER1bXBNZW1vcnkKKyAqIAkJSGFuZGxlIHJlY2VpcHQgb2YgYW4g aW50ZXJydXB0IGluZGljYXRpbmcgYSBtZW1vcnkgY29udGV4dCBkdW1wLgorICoJCVNpZ25hbCBo YW5kbGVyIHBvcnRpb24gb2YgaW50ZXJydXB0IGhhbmRsaW5nLgorICovCit2b2lkCitIYW5kbGVQ cm9jU2lnbmFsRHVtcE1lbW9yeSh2b2lkKQoreworCVByb2NTaWduYWxEdW1wTWVtb3J5UGVuZGlu ZyA9IHRydWU7Cit9CisKKy8qCisgKiBNY3h0RHVtcFNobWVtSW5pdAorICogCQlJbml0aWFsaXpl IG1jeHRkdW1wIGhhc2ggdGFibGUuCisgKi8KK3ZvaWQKK01jeHREdW1wU2htZW1Jbml0KHZvaWQp Cit7CisJSEFTSENUTAkJaW5mbzsKKworCU1lbVNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsK KwlpbmZvLmtleXNpemUgPSBzaXplb2YocGlkX3QpOworCWluZm8uZW50cnlzaXplID0gc2l6ZW9m KG1jeHRkdW1wRW50cnkpOworCisJTFdMb2NrQWNxdWlyZShNY3h0RHVtcEhhc2hMb2NrLCBMV19F WENMVVNJVkUpOworCisJbWN4dGR1bXBIYXNoID0gU2htZW1Jbml0SGFzaCgibWN4dGR1bXAgaGFz aCIsCisJCQkJCQkJICAgU0hNRU1fTUVNQ09OVEVYVF9TSVpFLAorCQkJCQkJCSAgIFNITUVNX01F TUNPTlRFWFRfU0laRSwKKwkJCQkJCQkgICAmaW5mbywKKwkJCQkJCQkgICBIQVNIX0VMRU0gfCBI QVNIX0JMT0JTKTsKKworCUxXTG9ja1JlbGVhc2UoTWN4dER1bXBIYXNoTG9jayk7Cit9CisKKy8q CisgKiBSZW1vdmVNZW1jeHRGaWxlCisgKgkgCVJlbW92ZSBkdW1wIGZpbGVzLgorICovCit2b2lk CitSZW1vdmVNZW1jeHRGaWxlKGludCBwaWQpCit7CisJRElSCQkqZGlyOworCXN0cnVjdCAJZGly ZW50ICpkdW1wZmlsZTsKKworCWlmIChwaWQgPT0gMCkKKwl7CisJCWRpciA9IEFsbG9jYXRlRGly KFBHX01FTVVTQUdFX0RJUik7CisJCXdoaWxlICgoZHVtcGZpbGUgPSBSZWFkRGlyKGRpciwgUEdf TUVNVVNBR0VfRElSKSkgIT0gTlVMTCkKKwkJeworCQkJY2hhcgkJZHVtcGZpbGVwYXRoWzMyXTsK KworCQkJaWYgKHN0cmNtcChkdW1wZmlsZS0+ZF9uYW1lLCAiLiIpID09IDAgfHwgc3RyY21wKGR1 bXBmaWxlLT5kX25hbWUsICIuLiIpID09IDApCisJCQkJY29udGludWU7CisKKwkJCXNwcmludGYo ZHVtcGZpbGVwYXRoLCAiJXMvJXMiLCBQR19NRU1VU0FHRV9ESVIsIGR1bXBmaWxlLT5kX25hbWUp OworCisJCQllcmVwb3J0KERFQlVHMiwKKwkJCQkJKGVycm1zZygicmVtb3ZpbmcgZmlsZSBcIiVz XCIiLCBkdW1wZmlsZXBhdGgpKSk7CisKKwkJCWlmICh1bmxpbmsoZHVtcGZpbGVwYXRoKSA8IDAp CisJCQl7CisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZW1vdmUgZmlsZSBcIiVzXCI6ICVtIiwgZHVt cGZpbGVwYXRoKSkpOworCQkJfQorCQl9CisJCUZyZWVEaXIoZGlyKTsKKwl9CisJZWxzZQorCXsK KwkJY2hhcgkJc3RyX3BpZFsxMl07CisJCWNoYXIJCWR1bXBmaWxlcGF0aFszMl07CisJCXN0cnVj dCAJCXN0YXQgc3RhdF90bXA7CisKKwkJcGdfbHRvYShwaWQsIHN0cl9waWQpOworCQlzcHJpbnRm KGR1bXBmaWxlcGF0aCwgIiVzLyVzIiwgUEdfTUVNVVNBR0VfRElSLCBzdHJfcGlkKTsKKworCQll cmVwb3J0KERFQlVHMiwKKwkJCQkoZXJybXNnKCJyZW1vdmluZyBmaWxlIFwiJXNcIiIsIGR1bXBm aWxlcGF0aCkpKTsKKworCQlpZiAoc3RhdChkdW1wZmlsZXBhdGgsICZzdGF0X3RtcCkgPT0gMCkK KwkJeworCQkJaWYgKHVubGluayhkdW1wZmlsZXBhdGgpIDwgMCkKKwkJCXsKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygi Y291bGQgbm90IHJlbW92ZSBmaWxlIFwiJXNcIjogJW0iLCBkdW1wZmlsZXBhdGgpKSk7CisJCQl9 CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmluZGV4IDZhYjgyMTY4MzkuLjQ2 MzMzN2Y2NjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0zMyw2ICszMyw3IEBAIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jRGllUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2ln X2F0b21pY190IENsaWVudENvbm5lY3Rpb25Mb3N0ID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRv bWljX3QgSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxzZTsKK3Zv bGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsRHVtcE1lbW9yeVBlbmRpbmcgPSBmYWxzZTsK IHZvbGF0aWxlIHVpbnQzMiBJbnRlcnJ1cHRIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWlu dDMyIFF1ZXJ5Q2FuY2VsSG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxlIHVpbnQzMiBDcml0U2Vj dGlvbkNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5jIGIvc3Jj L2Jpbi9pbml0ZGIvaW5pdGRiLmMKaW5kZXggZWUzYmZhODJmNC4uNTJjZGIyNjI3MiAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKKysrIGIvc3JjL2Jpbi9pbml0ZGIvaW5pdGRi LmMKQEAgLTIyMSw3ICsyMjEsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3ViZGlyc1td ID0gewogCSJwZ194YWN0IiwKIAkicGdfbG9naWNhbCIsCiAJInBnX2xvZ2ljYWwvc25hcHNob3Rz IiwKLQkicGdfbG9naWNhbC9tYXBwaW5ncyIKKwkicGdfbG9naWNhbC9tYXBwaW5ncyIsCisJInBn X21lbXVzYWdlIgogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2Jhc2ViYWNrdXAvdC8w MTBfcGdfYmFzZWJhY2t1cC5wbCBiL3NyYy9iaW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNl YmFja3VwLnBsCmluZGV4IGY2NzRhN2M5NGUuLjM0MGE4MGZjMTEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfYmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBsCisrKyBiL3NyYy9iaW4vcGdf YmFzZWJhY2t1cC90LzAxMF9wZ19iYXNlYmFja3VwLnBsCkBAIC02LDcgKzYsNyBAQCB1c2UgRmls ZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7CiB1c2UgRmlsZTo6UGF0aCBxdyhybXRy ZWUpOwogdXNlIFBvc3RncmVzTm9kZTsKIHVzZSBUZXN0TGliOwotdXNlIFRlc3Q6Ok1vcmUgdGVz dHMgPT4gMTA5OwordXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMTEwOwogCiBwcm9ncmFtX2hlbHBf b2soJ3BnX2Jhc2ViYWNrdXAnKTsKIHByb2dyYW1fdmVyc2lvbl9vaygncGdfYmFzZWJhY2t1cCcp OwpAQCAtMTI0LDcgKzEyNCw3IEBAIGlzX2RlZXBseSgKIAogIyBDb250ZW50cyBvZiB0aGVzZSBk aXJlY3RvcmllcyBzaG91bGQgbm90IGJlIGNvcGllZC4KIGZvcmVhY2ggbXkgJGRpcm5hbWUgKAot CXF3KHBnX2R5bnNobWVtIHBnX25vdGlmeSBwZ19yZXBsc2xvdCBwZ19zZXJpYWwgcGdfc25hcHNo b3RzIHBnX3N0YXRfdG1wIHBnX3N1YnRyYW5zKQorCXF3KHBnX2R5bnNobWVtIHBnX25vdGlmeSBw Z19yZXBsc2xvdCBwZ19zZXJpYWwgcGdfc25hcHNob3RzIHBnX3N0YXRfdG1wIHBnX3N1YnRyYW5z IHBnX21lbXVzYWdlKQogICApCiB7CiAJaXNfZGVlcGx5KApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19yZXdpbmQvZmlsZW1hcC5jIGIvc3JjL2Jpbi9wZ19yZXdpbmQvZmlsZW1hcC5jCmluZGV4IDMx NGIwNjRiMjIuLjNiNmFjZTYxMDggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmV3aW5kL2ZpbGVt YXAuYworKysgYi9zcmMvYmluL3BnX3Jld2luZC9maWxlbWFwLmMKQEAgLTExOSw2ICsxMTksOSBA QCBzdGF0aWMgY29uc3QgY2hhciAqZXhjbHVkZURpckNvbnRlbnRzW10gPQogCS8qIENvbnRlbnRz IHplcm9lZCBvbiBzdGFydHVwLCBzZWUgU3RhcnR1cFNVQlRSQU5TKCkuICovCiAJInBnX3N1YnRy YW5zIiwKIAorCS8qIFNraXAgbWVtb3J5IGNvbnRleHQgZHVtcGVkIGZpbGVzLiAqLworCSJwZ19t ZW11c2FnZSIsCisKIAkvKiBlbmQgb2YgbGlzdCAqLwogCU5VTEwKIH07CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdAppbmRleCBjMDFkYTRiZjAxLi4zNzRlMjFjZmE3IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKQEAgLTc4NDcsMTIgKzc4NDcsMTEgQEAKICMgbWVtb3J5IGNvbnRleHQgb2YgbG9jYWwg YmFja2VuZAogeyBvaWQgPT4gJzIyODInLAogICBkZXNjciA9PiAnaW5mb3JtYXRpb24gYWJvdXQg YWxsIG1lbW9yeSBjb250ZXh0cyBvZiBsb2NhbCBiYWNrZW5kJywKLSAgcHJvbmFtZSA9PiAncGdf Z2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJywgcHJvcm93cyA9PiAnMTAwJywKLSAgcHJvcmV0 c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAncicsCi0gIHBy b3JldHR5cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICcnLAotICBwcm9hbGxhcmd0eXBl cyA9PiAne3RleHQsdGV4dCx0ZXh0LGludDQsaW50OCxpbnQ4LGludDgsaW50OCxpbnQ4fScsCi0g IHByb2FyZ21vZGVzID0+ICd7byxvLG8sbyxvLG8sbyxvLG99JywKLSAgcHJvYXJnbmFtZXMgPT4g J3tuYW1lLCBpZGVudCwgcGFyZW50LCBsZXZlbCwgdG90YWxfYnl0ZXMsIHRvdGFsX25ibG9ja3Ms IGZyZWVfYnl0ZXMsIGZyZWVfY2h1bmtzLCB1c2VkX2J5dGVzfScsCisgIHByb25hbWUgPT4gJ3Bn X2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cycsIHByb3Jvd3MgPT4gJzEwMCcsIHByb2lzc3Ry aWN0ID0+ICdmJywKKyAgcHJvcmV0c2V0ID0+ICd0JywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9w YXJhbGxlbCA9PiAncicsIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsCisgIHByb2FyZ3R5cGVzID0+ ICdpbnQ0JywgcHJvYWxsYXJndHlwZXMgPT4gJ3tpbnQ0LHRleHQsdGV4dCx0ZXh0LGludDQsaW50 OCxpbnQ4LGludDgsaW50OCxpbnQ4fScsCisgIHByb2FyZ21vZGVzID0+ICd7aSxvLG8sbyxvLG8s byxvLG8sb30nLAorICBwcm9hcmduYW1lcyA9PiAne3BpZCwgbmFtZSwgaWRlbnQsIHBhcmVudCwg bGV2ZWwsIHRvdGFsX2J5dGVzLCB0b3RhbF9uYmxvY2tzLCBmcmVlX2J5dGVzLCBmcmVlX2NodW5r cywgdXNlZF9ieXRlc30nLAogICBwcm9zcmMgPT4gJ3BnX2dldF9iYWNrZW5kX21lbW9yeV9jb250 ZXh0cycgfSwKIAogIyBub24tcGVyc2lzdGVudCBzZXJpZXMgZ2VuZXJhdG9yCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4 IDcyZTMzNTIzOTguLjgxMjAzMmJiMTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1p bi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC04Myw2ICs4Myw3IEBAIGV4dGVy biBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUXVlcnlDYW5jZWxQZW5kaW5nOwog ZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jRGllUGVuZGluZzsK IGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZUluVHJhbnNhY3Rp b25TZXNzaW9uVGltZW91dFBlbmRpbmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2ln X2F0b21pY190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZzsKK2V4dGVybiBQR0RMTElNUE9SVCB2 b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJvY1NpZ25hbER1bXBNZW1vcnlQZW5kaW5nOwogCiBleHRl cm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5lY3Rpb25Mb3N0 OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wZ3N0YXQuaCBiL3NyYy9pbmNsdWRlL3Bnc3Rh dC5oCmluZGV4IDI1N2U1MTViZmUuLjI3MjEyODMwYzkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3Bnc3RhdC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC05NTgsNyArOTU4LDggQEAg dHlwZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9SRVBMSUNBVElPTl9TTE9UX0RST1AsCiAJV0FJVF9F VkVOVF9TQUZFX1NOQVBTSE9ULAogCVdBSVRfRVZFTlRfU1lOQ19SRVAsCi0JV0FJVF9FVkVOVF9Y QUNUX0dST1VQX1VQREFURQorCVdBSVRfRVZFTlRfWEFDVF9HUk9VUF9VUERBVEUsCisJV0FJVF9F VkVOVF9NRU1PUllfQ09OVEVYVF9EVU1QCiB9IFdhaXRFdmVudElQQzsKIAogLyogLS0tLS0tLS0t LQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAppbmRleCA1Y2IzOTY5N2YzLi5kNGE3YWUwNzYxIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaAorKysgYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaApAQCAtMzQsNiArMzQsNyBAQCB0eXBlZGVmIGVudW0K IAlQUk9DU0lHX1BBUkFMTEVMX01FU1NBR0UsCS8qIG1lc3NhZ2UgZnJvbSBjb29wZXJhdGluZyBw YXJhbGxlbCBiYWNrZW5kICovCiAJUFJPQ1NJR19XQUxTTkRfSU5JVF9TVE9QUElORywJLyogYXNr IHdhbHNlbmRlcnMgdG8gcHJlcGFyZSBmb3Igc2h1dGRvd24gICovCiAJUFJPQ1NJR19CQVJSSUVS LAkJCS8qIGdsb2JhbCBiYXJyaWVyIGludGVycnVwdCAgKi8KKwlQUk9DU0lHX0RVTVBfTUVNQ1hU LAkJLyogcmVxdWVzdCBkdW1waW5nIG1lbW9yeSBjb250ZXh0IGludGVycnVwdCAqLwogCiAJLyog UmVjb3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1Rf REFUQUJBU0UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9tY3h0ZnVuY3MuaCBiL3Ny Yy9pbmNsdWRlL3V0aWxzL21jeHRmdW5jcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjkzMDYyZWUxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS91dGls cy9tY3h0ZnVuY3MuaApAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBtY3h0ZnVuY3MuaAorICoJICBEZWNsYXJhdGlvbnMgZm9yIHNob3dpbmcgYmFja2VuZCBtZW1v cnkgY29udGV4dC4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMCwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoK KyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3V0aWxzL21jeHRmdW5jcy5oCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgTUNYVF9ICisjZGVmaW5lIE1DWFRf SAorCisvKiBEaXJlY3RvcnkgdG8gc3RvcmUgZHVtcGVkIG1lbW9yeSBmaWxlcyAqLworI2RlZmlu ZSBQR19NRU1VU0FHRV9ESVIJCSJwZ19tZW11c2FnZSIKKworI2RlZmluZSBQR19NRU1DT05URVhU X0ZJTEVfRk9STUFUX0lECTB4MDFCNUJDOUUKKworLyoKKyAqIFNpemUgb2YgdGhlIHNobWVtIGhh c2ggdGFibGUgc2l6ZShub3QgYSBoYXJkIGxpbWl0KS4KKyAqCisgKiBBbHRob3VnaCBpdCBtYXkg YmUgYmV0dGVyIHRvIGluY3JlYXNlIHRoaXMgbnVtYmVyIGluIHRoZSBmdXR1cmUgKGUuZy4sCisg KiBhZGRpbmcgdmlld3MgZm9yIGFsbCB0aGUgYmFja2VuZCBwcm9jZXNzIG9mIG1lbW9yeSBjb250 ZXh0cyksIGN1cnJlbnRseQorICogc21hbGwgbnVtYmVyIHdvdWxkIGJlIGVub3VnaC4KKyAqLwor I2RlZmluZSBTSE1FTV9NRU1DT05URVhUX1NJWkUJCSA2NAorCit0eXBlZGVmIGVudW0gTWN4dER1 bXBTdGF0dXMKK3sKKwlNQ1hURFVNUFNUQVRVU19SRVFVRVNUSU5HLAorCU1DWFREVU1QU1RBVFVT X0RVTVBJTkcsCisJTUNYVERVTVBTVEFUVVNfRE9ORSwKKwlNQ1hURFVNUFNUQVRVU19DQU5DRUxJ TkcKK30gTWN4dER1bXBTdGF0dXM7CisKK3R5cGVkZWYgc3RydWN0IG1jeHRkdW1wRW50cnkKK3sK KwlwaWRfdAkJZHN0X3BpZDsJCS8qIHBpZCBvZiB0aGUgc2lnbmFsIHJlY2VpdmVyICovCisJcGlk X3QJCXNyY19waWQ7CQkvKiBwaWQgb2YgdGhlIHNpZ25hbCBzZW5kZXIgKi8KKwlNY3h0RHVtcFN0 YXR1cwlkdW1wX3N0YXR1czsJCS8qIGR1bXAgc3RhdHVzICovCit9IG1jeHRkdW1wRW50cnk7CisK K2V4dGVybiB2b2lkIFByb2Nlc3NEdW1wTWVtb3J5SW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZv aWQgSGFuZGxlUHJvY1NpZ25hbER1bXBNZW1vcnkodm9pZCk7CitleHRlcm4gdm9pZCBNY3h0RHVt cFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFJlbW92ZU1jeHREdW1wRmlsZShpbnQpOwor ZXh0ZXJuIHZvaWQgUmVtb3ZlTWVtY3h0RmlsZShpbnQpOworI2VuZGlmCQkJCQkJCS8qIE1DWFRf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAppbmRleCAwOTdmZjVkMTExLi5kMzMy MGU1YjM0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApAQCAtMTMzMyw3ICsxMzMz LDcgQEAgcGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHN8IFNFTEVDVCBwZ19nZXRfYmFja2VuZF9t ZW1vcnlfY29udGV4dHMubmFtZSwKICAgICBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMu ZnJlZV9ieXRlcywKICAgICBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMuZnJlZV9jaHVu a3MsCiAgICAgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzLnVzZWRfYnl0ZXMKLSAgIEZS T00gcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCkgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzKG5hbWUsIGlkZW50LCBwYXJlbnQsIGxldmVsLCB0b3RhbF9ieXRlcywgdG90YWxf bmJsb2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVua3MsIHVzZWRfYnl0ZXMpOworICAgRlJPTSBw Z19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoTlVMTDo6aW50ZWdlcikgcGdfZ2V0X2JhY2tl bmRfbWVtb3J5X2NvbnRleHRzKG5hbWUsIGlkZW50LCBwYXJlbnQsIGxldmVsLCB0b3RhbF9ieXRl cywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywgZnJlZV9jaHVua3MsIHVzZWRfYnl0ZXMpOwog cGdfY29uZmlnfCBTRUxFQ1QgcGdfY29uZmlnLm5hbWUsCiAgICAgcGdfY29uZmlnLnNldHRpbmcK ICAgIEZST00gcGdfY29uZmlnKCkgcGdfY29uZmlnKG5hbWUsIHNldHRpbmcpOwotLSAKMi4xOC4x Cgo= --=_4eec7642b7fdf89e5fb1eb7a286a084a--