Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rBa3J-00BQmh-Q1 for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Dec 2023 12:33:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rBa3G-007U3u-Hb for pgsql-hackers@arkaria.postgresql.org; Fri, 08 Dec 2023 12:33:54 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rBa3F-007U3m-Cf for pgsql-hackers@lists.postgresql.org; Fri, 08 Dec 2023 12:33:54 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rBa30-009PPV-Qi for pgsql-hackers@postgresql.org; Fri, 08 Dec 2023 12:33:51 +0000 Received: from [192.168.1.115] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4SmrCd5Zjwz49Q3J; Fri, 8 Dec 2023 14:33:33 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1702038814; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=XtUcGPUi9EHMyRWi2vZkMuNsT3U2fxSgQosH+udoPZk=; b=Pr/WoMmMfjbWVe6oRqCsVNjMUZZQe6z2qby98hIAn3FwEF0Pfz7mAiPLSRDZBV/nVzlG0a AyprF5AdWNoixU2Y8wMWsiTi+HP+yMTHsj3hb7JQjwmflM53EfUrkWJux8h5aqfRHZKIcO kOa/mua+DwkGTMy0q1PMN6lsBlrb/sq2rEmoxfor7U4a6K7JU8puVHXcWfFGDC6mNLN2Qs 0biMNlG0h1MpdhcsebDqQemyLAsS/IJUQvW07LZogPzQCpl6/6A9oOqQSHn4v3sV9mO1Y0 omodK9DX3CwnweMoTVViqsFJNs8CSGyDi/RyLmKq/uLdZlHxeeV5IUypuY52RA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1702038814; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=XtUcGPUi9EHMyRWi2vZkMuNsT3U2fxSgQosH+udoPZk=; b=m855URCiRhpWk3/VmnfxL9v2Zdxy6klPAQaKN6fnx1Dei0ctA5YNQrMSOZFF2De3BcmlfN lr/8bhXXeOoMY55g4QvSJsWMwaaVUwLn+PEH6d59CX78BeLL44mR6JtnQ0Xc1PM/2GmKsr 14ugvHDiKKpCtXpbkZfZSRoPIfZvE1rUVdB4LovNizK46IPweHtx9fm+u4B+GEFBKX6mNy gisQIYQETahbCzLYWIluCtxZpqcnSgitdQAg5ZzS7yD+VaexGGUZSxJI6kv1G+JxXGWqaT kcd+Q0uQMiLXYvzQBkvoukY61fRkNQ8uMEO6ZeZdcrBLKpqOw+y3BuPJy2qRcw== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1702038814; a=rsa-sha256; cv=none; b=jFCVgld7eqKAkKzd99JxPPTaTOSFemC7FT81b7UtuMSalYgVx5RlARTX7JaARaGPyLHa5s adizr5WRnKzdjWZcOJeAm0t2d5ofON42vFsnJY8dqO1uSOUX5nUat9ccSX7eE2CDr6vcem r6Ja6+WAxMSHmwDMKYeFKfGx4ptavOXbHRfIF3Pzzq5I2dLQ/f8FRQXXaX2uGi2d3nEFqj q/h5sV7DnwpMSxZJqwcuL3FIL3c1BRWTN2SMFh74cDhVmtd+7UWkueBQKWvfHwlNw7nJUV AqpaWBmUKlLOTwdpROIkF3BZxcH0ja1vPmZ67xnMjV3OhW0wfP4sVXNwqMAlHw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------oZdu1r1d4zA157Kzh0ND2Ywg" Message-ID: <59527c9b-c3f7-4d0c-a3f1-00d0ed5cc186@iki.fi> Date: Fri, 8 Dec 2023 14:33:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Refactoring backend fork+exec code Content-Language: en-US To: Andres Freund , Tristan Partin Cc: pgsql-hackers , Thomas Munro References: <7a59b073-5b5b-151e-7ed3-8b01ff7ce9ef@iki.fi> <20230710225043.svl7fqxecwshwc7a@awork3.anarazel.de> <119551e6-60f6-49b2-ae04-a382a89f900c@iki.fi> <20231130202648.7k6agmuizdilufnv@awork3.anarazel.de> From: Heikki Linnakangas In-Reply-To: <20231130202648.7k6agmuizdilufnv@awork3.anarazel.de> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------oZdu1r1d4zA157Kzh0ND2Ywg Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 30/11/2023 22:26, Andres Freund wrote: > On 2023-11-30 01:36:25 +0200, Heikki Linnakangas wrote: >> [...] >> 33 files changed, 1787 insertions(+), 2002 deletions(-) > > Well, that's not small... > > I think it may be worth splitting some of the file renaming out into a > separate commit, makes it harder to see what change here. Here you are (details at end of this email) >> + [PMC_AV_LAUNCHER] = {"autovacuum launcher", AutoVacLauncherMain, true}, >> + [PMC_AV_WORKER] = {"autovacuum worker", AutoVacWorkerMain, true}, >> + [PMC_BGWORKER] = {"bgworker", BackgroundWorkerMain, true}, >> + [PMC_SYSLOGGER] = {"syslogger", SysLoggerMain, false}, >> + >> + [PMC_STARTUP] = {"startup", StartupProcessMain, true}, >> + [PMC_BGWRITER] = {"bgwriter", BackgroundWriterMain, true}, >> + [PMC_ARCHIVER] = {"archiver", PgArchiverMain, true}, >> + [PMC_CHECKPOINTER] = {"checkpointer", CheckpointerMain, true}, >> + [PMC_WAL_WRITER] = {"wal_writer", WalWriterMain, true}, >> + [PMC_WAL_RECEIVER] = {"wal_receiver", WalReceiverMain, true}, >> +}; > > > It feels like we have too many different ways of documenting the type of a > process. This new PMC_ stuff, enum AuxProcType, enum BackendType. Agreed. And "am_walsender" and such variables. > Which then leads to code like this: > >> -CheckpointerMain(void) >> +CheckpointerMain(char *startup_data, size_t startup_data_len) >> { >> sigjmp_buf local_sigjmp_buf; >> MemoryContext checkpointer_context; >> >> + Assert(startup_data_len == 0); >> + >> + MyAuxProcType = CheckpointerProcess; >> + MyBackendType = B_CHECKPOINTER; >> + AuxiliaryProcessInit(); >> + > > For each type of child process. That seems a bit too redundant. Can't we > unify this at least somewhat? Can't we just reuse BackendType here? Sure, > there'd be pointless entry for B_INVALID, but that doesn't seem like a > problem, could even be useful, by pointing it to a function raising an error. There are a few differences: B_INVALID (and B_STANDALONE_BACKEND) are pointless for this array as you noted. But also, we don't know if the backend is a regular backend or WAL sender until authentication, so for a WAL sender, we'd need to change MyBackendType from B_BACKEND to B_WAL_SENDER after forking. Maybe that's ok. I didn't do anything about this yet, but I'll give it some more thought. >> + if (strncmp(argv[1], "--forkchild=", 12) != 0) >> + elog(FATAL, "invalid subpostmaster invocation (--forkchild argument missing)"); >> + entry_name = argv[1] + 12; >> + found = false; >> + for (int idx = 0; idx < lengthof(entry_kinds); idx++) >> + { >> + if (strcmp(entry_kinds[idx].name, entry_name) == 0) >> + { >> + child_type = idx; >> + found = true; >> + break; >> + } >> + } >> + if (!found) >> + elog(ERROR, "unknown child kind %s", entry_name); > > If we then have to search linearly, why don't we just pass the index into the > array? We could. I like the idea of a human-readable name on the command line, although I'm not sure if it's really visible anywhere. >> +void >> +BackendMain(char *startup_data, size_t startup_data_len) >> +{ > > Is there any remaining reason for this to live in postmaster.c? Given that > other backend types don't, that seems oddly assymmetrical. Gee, another yak to shave, thanks ;-). You're right, that makes a lot of sense. I added another patch that moves that to a new file, src/backend/tcop/backend_startup.c. ProcessStartupPacket() and friends go there too. It might make sense to do this before the other patches, but it's the last patch in the series now. I kept processCancelRequest() in postmaster.c because it looks at BackendList/ShmemBackendArray, which are static in postmaster.c. Some more refactoring might be in order there, perhaps moving those to a different file too. But that can be done separately, this split is pretty OK as is. On 30/11/2023 20:44, Tristan Partin wrote: >> From 8886db1ed6bae21bf6d77c9bb1230edbb55e24f9 Mon Sep 17 00:00:00 2001 >> From: Heikki Linnakangas >> Date: Thu, 30 Nov 2023 00:04:22 +0200 >> Subject: [PATCH v3 4/7] Pass CAC as argument to backend process > > For me, being new to the code, it would be nice to have more of an > explanation as to why this is "better." I don't doubt it; it would just > help me and future readers of this commit in the future. More of an > explanation in the commit message would suffice. Updated the commit message. It's mainly to pave the way for the next patches, which move the initialization of Port to the backend process, after forking. And that in turn paves the way for the patches after that. But also, very subjectively, it feels more natural to me. > My other comment on this commit is that we now seem to have lost the > context on what CAC stands for. Before we had the member variable to > explain it. A comment on the enum would be great or changing cac named > variables to canAcceptConnections. I did notice in patch 7 that there > are still some variables named canAcceptConnections around, so I'll > leave this comment up to you. Good point. The last patch in this series - which is new compared to previous patch version - moves CAC_state to a different header file again. I added a comment there. >> + if (fwrite(param, paramsz, 1, fp) != 1) >> + { >> + ereport(LOG, >> + (errcode_for_file_access(), >> + errmsg("could not write to file \"%s\": %m", tmpfilename))); >> + FreeFile(fp); >> + return -1; >> + } >> + >> + /* Release file */ >> + if (FreeFile(fp)) >> + { >> + ereport(LOG, >> + (errcode_for_file_access(), >> + errmsg("could not write to file \"%s\": %m", tmpfilename))); >> + return -1; >> + } > > Two pieces of feedback here. I generally find write(2) more useful than > fwrite(3) because write(2) will report a useful errno, whereas fwrite(2) > just uses ferror(3). The additional errno information might be valuable > context in the log message. Up to you if you think it is also valuable. In general I agree. This patch just moves existing code though, so I left it as is. > The log message if FreeFile() fails doesn't seem to make sense to me. > I didn't see any file writing in that code path, but it is possible that > I missed something. FreeFile() calls fclose(), which flushes the buffer. If fclose() fails, it's most likely because the write() to flush the buffer failed, so "could not write" is usually appropriate. (It feels ugly to me too, error handling with the buffered i/o functions is a bit messy. As you said, plain open()/write() is more clear.) >> + /* >> + * Need to reinitialize the SSL library in the backend, since the context >> + * structures contain function pointers and cannot be passed through the >> + * parameter file. >> + * >> + * If for some reason reload fails (maybe the user installed broken key >> + * files), soldier on without SSL; that's better than all connections >> + * becoming impossible. >> + * >> + * XXX should we do this in all child processes? For the moment it's >> + * enough to do it in backend children. >> + */ >> +#ifdef USE_SSL >> + if (EnableSSL) >> + { >> + if (secure_initialize(false) == 0) >> + LoadedSSL = true; >> + else >> + ereport(LOG, >> + (errmsg("SSL configuration could not be loaded in child process"))); >> + } >> +#endif > > Do other child process types do any non-local communication? No. Although in theory an extension-defined background worker could do whatever, including opening TLS connections. It's not clear if such a background worker would want the same initialization that we do in secure_initialize(), or something else. Here is a new patch set: > v5-0001-Pass-CAC-as-argument-to-backend-process.patch > v5-0002-Remove-ConnCreate-and-ConnFree-and-allocate-Port-.patch > v5-0003-Move-initialization-of-Port-struct-to-child-proce.patch These patches form a pretty well-contained unit. The gist is to move the initialization of the Port struct to after forking the backend process (in patch 3). I plan to polish and commit these next, so any final reviews on these are welcome. > v5-0004-Extract-registration-of-Win32-deadchild-callback-.patch > v5-0005-Move-some-functions-from-postmaster.c-to-new-sour.patch > v5-0006-Refactor-AuxProcess-startup.patch > v5-0007-Refactor-postmaster-child-process-launching.patch Patches 4-6 are refactorings that don't do much good on their own, but they help to make patch 7 much smaller and easier to review. I left out some of the code-moving that I had in previous patch versions: - Previously I moved fork_process() function from fork_process.c to the new launch_backend.c file. That might still make sense, there is nothing else in fork_process.c and the only caller is in launch_backend.c. But I'm not sure, and it can be done separately. - Previously I moved InitPostmasterChild from miscinit.c to the new launch_backend.c file. That might also still make sense, but I'm not 100% sure it's an improvement, and it can be done later if we want to. > v5-0008-Move-code-for-backend-startup-to-separate-file.patch This moves BackendMain() and friends from postmaster.c to a new file, per Andres's suggestion. -- Heikki Linnakangas Neon (https://neon.tech) --------------oZdu1r1d4zA157Kzh0ND2Ywg Content-Type: text/x-patch; charset=UTF-8; name="v5-0001-Pass-CAC-as-argument-to-backend-process.patch" Content-Disposition: attachment; filename="v5-0001-Pass-CAC-as-argument-to-backend-process.patch" Content-Transfer-Encoding: base64 RnJvbSAxOTdmNmQ0ZjVkYjc5MjQ5NzU3NjJjYjFkZTMzM2NhNzNjOWViYTBhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMzAgTm92IDIwMjMgMDA6MDQ6MjIgKzAyMDAK U3ViamVjdDogW1BBVENIIHY1IDEvOF0gUGFzcyBDQUMgYXMgYXJndW1lbnQgdG8gYmFja2Vu ZCBwcm9jZXNzCgpXZSB1c2VkIHRvIHNtdWdnbGUgaXQgdG8gdGhlIGNoaWxkIHByb2Nlc3Mg aW4gdGhlIFBvcnQgc3RydWN0LCBidXQgaXQKc2VlbXMgYmV0dGVyIHRvIHBhc3MgaXQgZG93 biBhcyBhIHNlcGFyYXRlIGFyZ3VtZW50LiBUaGlzIHBhdmVzIHRoZQp3YXkgZm9yIHRoZSBu ZXh0IGNvbW1pdHMsIGluIHdoaWNoIHdlIG1vdmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRo ZQpQb3J0IHN0cnVjdCB0byB0aGUgYmFja2VuZCBwcm9jZXNzLCBhZnRlciBmb3JraW5nLgoK UmV2aWV3ZWQtYnk6IFRyaXN0YW4gUGFydGluLCBBbmRyZXMgRnJldW5kCkRpc2N1c3Npb246 IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvN2E1OWIwNzMtNWI1Yi0x NTFlLTdlZDMtOGIwMWZmN2NlOWVmQGlraS5maQotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5jIHwgNDMgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KIHNy Yy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmggICAgICAgIHwgMTIgLS0tLS0tLS0KIDIgZmls ZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA2NTFiODVlYTc0Ni4uZTUzMDU3ZTgz YTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00MTYsNyArNDE2 LDE4IEBAIHN0YXRpYyB2b2lkIEhhbmRsZUNoaWxkQ3Jhc2goaW50IHBpZCwgaW50IGV4aXRz dGF0dXMsIGNvbnN0IGNoYXIgKnByb2NuYW1lKTsKIHN0YXRpYyB2b2lkIExvZ0NoaWxkRXhp dChpbnQgbGV2LCBjb25zdCBjaGFyICpwcm9jbmFtZSwKIAkJCQkJCSBpbnQgcGlkLCBpbnQg ZXhpdHN0YXR1cyk7CiBzdGF0aWMgdm9pZCBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQp Owotc3RhdGljIHZvaWQgQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCk7CisKK3R5cGVk ZWYgZW51bSBDQUNfc3RhdGUKK3sKKwlDQUNfT0ssCisJQ0FDX1NUQVJUVVAsCisJQ0FDX1NI VVRET1dOLAorCUNBQ19SRUNPVkVSWSwKKwlDQUNfTk9UQ09OU0lTVEVOVCwKKwlDQUNfVE9P TUFOWSwKK30gQ0FDX3N0YXRlOworCitzdGF0aWMgdm9pZCBCYWNrZW5kSW5pdGlhbGl6ZShQ b3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKTsKIHN0YXRpYyB2b2lkIEJhY2tlbmRSdW4oUG9y dCAqcG9ydCkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBzdGF0aWMgdm9pZCBFeGl0UG9z dG1hc3RlcihpbnQgc3RhdHVzKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIHN0YXRpYyBp bnQJU2VydmVyTG9vcCh2b2lkKTsKQEAgLTQ3Myw3ICs0ODQsNyBAQCB0eXBlZGVmIHN0cnVj dAogfSB3aW4zMl9kZWFkY2hpbGRfd2FpdGluZm87CiAjZW5kaWYJCQkJCQkJLyogV0lOMzIg Ki8KIAotc3RhdGljIHBpZF90IGJhY2tlbmRfZm9ya2V4ZWMoUG9ydCAqcG9ydCk7CitzdGF0 aWMgcGlkX3QgYmFja2VuZF9mb3JrZXhlYyhQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKTsK IHN0YXRpYyBwaWRfdCBpbnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltd LCBQb3J0ICpwb3J0LCBCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIpOwogCiAvKiBUeXBlIGZv ciBhIHNvY2tldCB0aGF0IGNhbiBiZSBpbmhlcml0ZWQgdG8gYSBjbGllbnQgcHJvY2VzcyAq LwpAQCAtNDAzNyw2ICs0MDQ4LDcgQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIHsK IAlCYWNrZW5kICAgICpibjsJCQkJLyogZm9yIGJhY2tlbmQgY2xlYW51cCAqLwogCXBpZF90 CQlwaWQ7CisJQ0FDX3N0YXRlCWNhYzsKIAogCS8qCiAJICogQ3JlYXRlIGJhY2tlbmQgZGF0 YSBzdHJ1Y3R1cmUuICBCZXR0ZXIgYmVmb3JlIHRoZSBmb3JrKCkgc28gd2UgY2FuCkBAIC00 MDY4LDggKzQwODAsOCBAQCBCYWNrZW5kU3RhcnR1cChQb3J0ICpwb3J0KQogCWJuLT5jYW5j ZWxfa2V5ID0gTXlDYW5jZWxLZXk7CiAKIAkvKiBQYXNzIGRvd24gY2FuQWNjZXB0Q29ubmVj dGlvbnMgc3RhdGUgKi8KLQlwb3J0LT5jYW5BY2NlcHRDb25uZWN0aW9ucyA9IGNhbkFjY2Vw dENvbm5lY3Rpb25zKEJBQ0tFTkRfVFlQRV9OT1JNQUwpOwotCWJuLT5kZWFkX2VuZCA9IChw b3J0LT5jYW5BY2NlcHRDb25uZWN0aW9ucyAhPSBDQUNfT0spOworCWNhYyA9IGNhbkFjY2Vw dENvbm5lY3Rpb25zKEJBQ0tFTkRfVFlQRV9OT1JNQUwpOworCWJuLT5kZWFkX2VuZCA9IChj YWMgIT0gQ0FDX09LKTsKIAogCS8qCiAJICogVW5sZXNzIGl0J3MgYSBkZWFkX2VuZCBjaGls ZCwgYXNzaWduIGl0IGEgY2hpbGQgc2xvdCBudW1iZXIKQEAgLTQwODMsNyArNDA5NSw3IEBA IEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQpCiAJYm4tPmJnd29ya2VyX25vdGlmeSA9IGZh bHNlOwogCiAjaWZkZWYgRVhFQ19CQUNLRU5ECi0JcGlkID0gYmFja2VuZF9mb3JrZXhlYyhw b3J0KTsKKwlwaWQgPSBiYWNrZW5kX2ZvcmtleGVjKHBvcnQsIGNhYyk7CiAjZWxzZQkJCQkJ CQkvKiAhRVhFQ19CQUNLRU5EICovCiAJcGlkID0gZm9ya19wcm9jZXNzKCk7CiAJaWYgKHBp ZCA9PSAwKQkJCQkvKiBjaGlsZCAqLwpAQCAtNDA5NSw3ICs0MTA3LDcgQEAgQmFja2VuZFN0 YXJ0dXAoUG9ydCAqcG9ydCkKIAkJQ2xvc2VQb3N0bWFzdGVyUG9ydHMoZmFsc2UpOwogCiAJ CS8qIFBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBhbmQgY29sbGVjdCBzdGFy dHVwIHBhY2tldCAqLwotCQlCYWNrZW5kSW5pdGlhbGl6ZShwb3J0KTsKKwkJQmFja2VuZElu aXRpYWxpemUocG9ydCwgY2FjKTsKIAogCQkvKiBBbmQgcnVuIHRoZSBiYWNrZW5kICovCiAJ CUJhY2tlbmRSdW4ocG9ydCk7CkBAIC00MTgyLDcgKzQxOTQsNyBAQCByZXBvcnRfZm9ya19m YWlsdXJlX3RvX2NsaWVudChQb3J0ICpwb3J0LCBpbnQgZXJybnVtKQogICogYnV0IGhhdmUg bm90IHlldCBzZXQgdXAgbW9zdCBvZiBvdXIgbG9jYWwgcG9pbnRlcnMgdG8gc2htZW0gc3Ry dWN0dXJlcy4KICAqLwogc3RhdGljIHZvaWQKLUJhY2tlbmRJbml0aWFsaXplKFBvcnQgKnBv cnQpCitCYWNrZW5kSW5pdGlhbGl6ZShQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKQogewog CWludAkJCXN0YXR1czsKIAlpbnQJCQlyZXQ7CkBAIC00MzE1LDcgKzQzMjcsNyBAQCBCYWNr ZW5kSW5pdGlhbGl6ZShQb3J0ICpwb3J0KQogCSAqIG5vdyBpbnN0ZWFkIG9mIHdhc3Rpbmcg Y3ljbGVzIG9uIGFuIGF1dGhlbnRpY2F0aW9uIGV4Y2hhbmdlLiAoVGhpcyBhbHNvCiAJICog YWxsb3dzIGEgcGdfcGluZyB1dGlsaXR5IHRvIGJlIHdyaXR0ZW4uKQogCSAqLwotCXN3aXRj aCAocG9ydC0+Y2FuQWNjZXB0Q29ubmVjdGlvbnMpCisJc3dpdGNoIChjYWMpCiAJewogCQlj YXNlIENBQ19TVEFSVFVQOgogCQkJZXJlcG9ydChGQVRBTCwKQEAgLTQ0NTMsMTUgKzQ0NjUs MTkgQEAgcG9zdG1hc3Rlcl9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdKQogICog cmV0dXJucyB0aGUgcGlkIG9mIHRoZSBmb3JrL2V4ZWMnZCBwcm9jZXNzLCBvciAtMSBvbiBm YWlsdXJlCiAgKi8KIHN0YXRpYyBwaWRfdAotYmFja2VuZF9mb3JrZXhlYyhQb3J0ICpwb3J0 KQorYmFja2VuZF9mb3JrZXhlYyhQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKQogewotCWNo YXIJICAgKmF2WzRdOworCWNoYXIJICAgKmF2WzVdOwogCWludAkJCWFjID0gMDsKKwljaGFy CQljYWNidWZbMTBdOwogCiAJYXZbYWMrK10gPSAicG9zdGdyZXMiOwogCWF2W2FjKytdID0g Ii0tZm9ya2JhY2tlbmQiOwogCWF2W2FjKytdID0gTlVMTDsJCQkvKiBmaWxsZWQgaW4gYnkg aW50ZXJuYWxfZm9ya2V4ZWMgKi8KIAorCXNucHJpbnRmKGNhY2J1Ziwgc2l6ZW9mKGNhY2J1 ZiksICIlZCIsIChpbnQpIGNhYyk7CisJYXZbYWMrK10gPSBjYWNidWY7CisKIAlhdlthY10g PSBOVUxMOwogCUFzc2VydChhYyA8IGxlbmd0aG9mKGF2KSk7CiAKQEAgLTQ4NjcsNyArNDg4 MywxMCBAQCBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCS8q IFJ1biBiYWNrZW5kIG9yIGFwcHJvcHJpYXRlIGNoaWxkICovCiAJaWYgKHN0cmNtcChhcmd2 WzFdLCAiLS1mb3JrYmFja2VuZCIpID09IDApCiAJewotCQlBc3NlcnQoYXJnYyA9PSAzKTsJ CS8qIHNob3VsZG4ndCBiZSBhbnkgbW9yZSBhcmdzICovCisJCUNBQ19zdGF0ZQljYWM7CisK KwkJQXNzZXJ0KGFyZ2MgPT0gNCk7CisJCWNhYyA9IChDQUNfc3RhdGUpIGF0b2koYXJndlsz XSk7CiAKIAkJLyoKIAkJICogTmVlZCB0byByZWluaXRpYWxpemUgdGhlIFNTTCBsaWJyYXJ5 IGluIHRoZSBiYWNrZW5kLCBzaW5jZSB0aGUKQEAgLTQ5MDEsNyArNDkyMCw3IEBAIFN1YlBv c3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCSAqIFBHUFJPQyBzbG90 cywgd2UgaGF2ZSBhbHJlYWR5IGluaXRpYWxpemVkIGxpYnBxIGFuZCBhcmUgYWJsZSB0bwog CQkgKiByZXBvcnQgdGhlIGVycm9yIHRvIHRoZSBjbGllbnQuCiAJCSAqLwotCQlCYWNrZW5k SW5pdGlhbGl6ZShwb3J0KTsKKwkJQmFja2VuZEluaXRpYWxpemUocG9ydCwgY2FjKTsKIAog CQkvKiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAkJSW5pdFNo bWVtQWNjZXNzKFVzZWRTaG1lbVNlZ0FkZHIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bGlicHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKaW5kZXgg YzU3ZWQxMmZiNmQuLjMzNWNiMmRlNDRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9saWJw cS9saWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKQEAgLTU4 LDE3ICs1OCw2IEBAIHR5cGVkZWYgc3RydWN0CiAjaW5jbHVkZSAibGlicHEvcHFjb21tLmgi CiAKIAotdHlwZWRlZiBlbnVtIENBQ19zdGF0ZQotewotCUNBQ19PSywKLQlDQUNfU1RBUlRV UCwKLQlDQUNfU0hVVERPV04sCi0JQ0FDX1JFQ09WRVJZLAotCUNBQ19OT1RDT05TSVNURU5U LAotCUNBQ19UT09NQU5ZLAotfSBDQUNfc3RhdGU7Ci0KLQogLyoKICAqIEdTU0FQSSBzcGVj aWZpYyBzdGF0ZSBpbmZvcm1hdGlvbgogICovCkBAIC0xNTYsNyArMTQ1LDYgQEAgdHlwZWRl ZiBzdHJ1Y3QgUG9ydAogCWludAkJCXJlbW90ZV9ob3N0bmFtZV9yZXNvbHY7IC8qIHNlZSBh Ym92ZSAqLwogCWludAkJCXJlbW90ZV9ob3N0bmFtZV9lcnJjb2RlOwkvKiBzZWUgYWJvdmUg Ki8KIAljaGFyCSAgICpyZW1vdGVfcG9ydDsJLyogdGV4dCByZXAgb2YgcmVtb3RlIHBvcnQg Ki8KLQlDQUNfc3RhdGUJY2FuQWNjZXB0Q29ubmVjdGlvbnM7CS8qIHBvc3RtYXN0ZXIgY29u bmVjdGlvbiBzdGF0dXMgKi8KIAogCS8qCiAJICogSW5mb3JtYXRpb24gdGhhdCBuZWVkcyB0 byBiZSBzYXZlZCBmcm9tIHRoZSBzdGFydHVwIHBhY2tldCBhbmQgcGFzc2VkCi0tIAoyLjM5 LjIKCg== --------------oZdu1r1d4zA157Kzh0ND2Ywg Content-Type: text/x-patch; charset=UTF-8; name="v5-0002-Remove-ConnCreate-and-ConnFree-and-allocate-Port-.patch" Content-Disposition: attachment; filename*0="v5-0002-Remove-ConnCreate-and-ConnFree-and-allocate-Port-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlYzk3YTBiNjhkZTc2MTI2NTA4NTA3ZmNiNDMwNWU2Y2FkMDlhMjBhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgOCBEZWMgMjAyMyAxMDozMDozNyArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjUgMi84XSBSZW1vdmUgQ29ubkNyZWF0ZSBhbmQgQ29ubkZyZWUs IGFuZCBhbGxvY2F0ZSBQb3J0IGluCiBzdGFjawoKQnkgYWxsb2NhdGluZyBQb3J0IGluIHN0 YWNrLCB3ZSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBvdXQtb2YtbWVtb3J5CmVycm9ycywg d2hpY2ggbWFrZXMgdGhlIGNvZGUgYSBsaXR0bGUgbGVzcyB2ZXJib3NlLgoKWFhYOiBUaGlz IHNob3VsZCBwZXJoYXBzIGJlIHNxdWFzaGVkIHdpdGggdGhlIG5leHQgY29tbWl0LiBJdCBj aGFuZ2VzCmhvdyB0aGUgUG9ydCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGFnYWluLiBCdXQg bWF5YmUgaXQncyBlYXNpZXIgdG8KcmV2aWV3IHNlcGFyYXRlbHkuCgpSZXZpZXdlZC1ieTog VHJpc3RhbiBQYXJ0aW4sIEFuZHJlcyBGcmV1bmQKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cu cG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC83YTU5YjA3My01YjViLTE1MWUtN2VkMy04YjAx ZmY3Y2U5ZWZAaWtpLmZpCi0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVy LmMgfCA2OCArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jICAgICAgICAgfCAgNiArLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5z ZXJ0aW9ucygrKSwgNjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYwppbmRleCBlNTMwNTdlODNhNy4uOGExMmNhNjk2ZGUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0zOTcsOCArMzk3LDYgQEAgc3RhdGljIHZvaWQg Q2xvc2VTZXJ2ZXJQb3J0cyhpbnQgc3RhdHVzLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQg dW5saW5rX2V4dGVybmFsX3BpZF9maWxlKGludCBzdGF0dXMsIERhdHVtIGFyZyk7CiBzdGF0 aWMgdm9pZCBnZXRJbnN0YWxsYXRpb25QYXRocyhjb25zdCBjaGFyICphcmd2MCk7CiBzdGF0 aWMgdm9pZCBjaGVja0NvbnRyb2xGaWxlKHZvaWQpOwotc3RhdGljIFBvcnQgKkNvbm5DcmVh dGUoaW50IHNlcnZlckZkKTsKLXN0YXRpYyB2b2lkIENvbm5GcmVlKFBvcnQgKnBvcnQpOwog c3RhdGljIHZvaWQgaGFuZGxlX3BtX3Btc2lnbmFsX3NpZ25hbChTSUdOQUxfQVJHUyk7CiBz dGF0aWMgdm9pZCBoYW5kbGVfcG1fY2hpbGRfZXhpdF9zaWduYWwoU0lHTkFMX0FSR1MpOwog c3RhdGljIHZvaWQgaGFuZGxlX3BtX3JlbG9hZF9yZXF1ZXN0X3NpZ25hbChTSUdOQUxfQVJH Uyk7CkBAIC0xNzcyLDIwICsxNzcwLDE4IEBAIFNlcnZlckxvb3Aodm9pZCkKIAogCQkJaWYg KGV2ZW50c1tpXS5ldmVudHMgJiBXTF9TT0NLRVRfQUNDRVBUKQogCQkJewotCQkJCVBvcnQJ ICAgKnBvcnQ7CisJCQkJUG9ydAkJcG9ydDsKIAotCQkJCXBvcnQgPSBDb25uQ3JlYXRlKGV2 ZW50c1tpXS5mZCk7Ci0JCQkJaWYgKHBvcnQpCi0JCQkJewotCQkJCQlCYWNrZW5kU3RhcnR1 cChwb3J0KTsKKwkJCQltZW1zZXQoJnBvcnQsIDAsIHNpemVvZihwb3J0KSk7CisJCQkJaWYg KFN0cmVhbUNvbm5lY3Rpb24oZXZlbnRzW2ldLmZkLCAmcG9ydCkgPT0gU1RBVFVTX09LKQor CQkJCQlCYWNrZW5kU3RhcnR1cCgmcG9ydCk7CiAKLQkJCQkJLyoKLQkJCQkJICogV2Ugbm8g bG9uZ2VyIG5lZWQgdGhlIG9wZW4gc29ja2V0IG9yIHBvcnQgc3RydWN0dXJlIGluCi0JCQkJ CSAqIHRoaXMgcHJvY2VzcwotCQkJCQkgKi8KLQkJCQkJU3RyZWFtQ2xvc2UocG9ydC0+c29j ayk7Ci0JCQkJCUNvbm5GcmVlKHBvcnQpOwotCQkJCX0KKwkJCQkvKgorCQkJCSAqIFdlIG5v IGxvbmdlciBuZWVkIHRoZSBvcGVuIHNvY2tldCBvciBwb3J0IHN0cnVjdHVyZSBpbiB0aGlz CisJCQkJICogcHJvY2VzcworCQkJCSAqLworCQkJCWlmIChwb3J0LnNvY2sgIT0gUEdJTlZB TElEX1NPQ0tFVCkKKwkJCQkJU3RyZWFtQ2xvc2UocG9ydC5zb2NrKTsKIAkJCX0KIAkJfQog CkBAIC0yNDQ3LDUwICsyNDQzLDYgQEAgY2FuQWNjZXB0Q29ubmVjdGlvbnMoaW50IGJhY2tl bmRfdHlwZSkKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KLS8qCi0gKiBDb25uQ3JlYXRlIC0t IGNyZWF0ZSBhIGxvY2FsIGNvbm5lY3Rpb24gZGF0YSBzdHJ1Y3R1cmUKLSAqCi0gKiBSZXR1 cm5zIE5VTEwgb24gZmFpbHVyZSwgb3RoZXIgdGhhbiBvdXQtb2YtbWVtb3J5IHdoaWNoIGlz IGZhdGFsLgotICovCi1zdGF0aWMgUG9ydCAqCi1Db25uQ3JlYXRlKGludCBzZXJ2ZXJGZCkK LXsKLQlQb3J0CSAgICpwb3J0OwotCi0JaWYgKCEocG9ydCA9IChQb3J0ICopIGNhbGxvYygx LCBzaXplb2YoUG9ydCkpKSkKLQl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJjb2RlKEVS UkNPREVfT1VUX09GX01FTU9SWSksCi0JCQkJIGVycm1zZygib3V0IG9mIG1lbW9yeSIpKSk7 Ci0JCUV4aXRQb3N0bWFzdGVyKDEpOwotCX0KLQotCWlmIChTdHJlYW1Db25uZWN0aW9uKHNl cnZlckZkLCBwb3J0KSAhPSBTVEFUVVNfT0spCi0JewotCQlpZiAocG9ydC0+c29jayAhPSBQ R0lOVkFMSURfU09DS0VUKQotCQkJU3RyZWFtQ2xvc2UocG9ydC0+c29jayk7Ci0JCUNvbm5G cmVlKHBvcnQpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gcG9ydDsKLX0KLQot Ci0vKgotICogQ29ubkZyZWUgLS0gZnJlZSBhIGxvY2FsIGNvbm5lY3Rpb24gZGF0YSBzdHJ1 Y3R1cmUKLSAqCi0gKiBDYWxsZXIgaGFzIGFscmVhZHkgY2xvc2VkIHRoZSBzb2NrZXQgaWYg YW55LCBzbyB0aGVyZSdzIG5vdCBtdWNoCi0gKiB0byBkbyBoZXJlLgotICovCi1zdGF0aWMg dm9pZAotQ29ubkZyZWUoUG9ydCAqcG9ydCkKLXsKLQlmcmVlKHBvcnQpOwotfQotCi0KIC8q CiAgKiBDbG9zZVBvc3RtYXN0ZXJQb3J0cyAtLSBjbG9zZSBhbGwgdGhlIHBvc3RtYXN0ZXIn cyBvcGVuIHNvY2tldHMKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggNzI5OGExODdkMTgu LjBkYzIxMzJkYWM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC00MjE0LDkgKzQyMTQsOSBA QCBQb3N0Z3Jlc01haW4oY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICp1c2VybmFt ZSkKIAkvKgogCSAqIElmIHRoZSBQb3N0bWFzdGVyQ29udGV4dCBpcyBzdGlsbCBhcm91bmQs IHJlY3ljbGUgdGhlIHNwYWNlOyB3ZSBkb24ndAogCSAqIG5lZWQgaXQgYW55bW9yZSBhZnRl ciBJbml0UG9zdGdyZXMgY29tcGxldGVzLiAgTm90ZSB0aGlzIGRvZXMgbm90IHRyYXNoCi0J ICogKk15UHJvY1BvcnQsIGJlY2F1c2UgQ29ubkNyZWF0ZSgpIGFsbG9jYXRlZCB0aGF0IHNw YWNlIHdpdGggbWFsbG9jKCkKLQkgKiAuLi4gZWxzZSB3ZSdkIG5lZWQgdG8gY29weSB0aGUg UG9ydCBkYXRhIGZpcnN0LiAgQWxzbywgc3Vic2lkaWFyeSBkYXRhCi0JICogc3VjaCBhcyB0 aGUgdXNlcm5hbWUgaXNuJ3QgbG9zdCBlaXRoZXI7IHNlZSBQcm9jZXNzU3RhcnR1cFBhY2tl dCgpLgorCSAqICpNeVByb2NQb3J0LCBiZWNhdXNlIHRoYXQgc3BhY2UgaXMgYWxsb2NhdGVk IGluIHN0YWNrIC4uLiBlbHNlIHdlJ2QKKwkgKiBuZWVkIHRvIGNvcHkgdGhlIFBvcnQgZGF0 YSBmaXJzdC4gIEFsc28sIHN1YnNpZGlhcnkgZGF0YSBzdWNoIGFzIHRoZQorCSAqIHVzZXJu YW1lIGlzbid0IGxvc3QgZWl0aGVyOyBzZWUgUHJvY2Vzc1N0YXJ0dXBQYWNrZXQoKS4KIAkg Ki8KIAlpZiAoUG9zdG1hc3RlckNvbnRleHQpCiAJewotLSAKMi4zOS4yCgo= --------------oZdu1r1d4zA157Kzh0ND2Ywg Content-Type: text/x-patch; charset=UTF-8; name="v5-0003-Move-initialization-of-Port-struct-to-child-proce.patch" Content-Disposition: attachment; filename*0="v5-0003-Move-initialization-of-Port-struct-to-child-proce.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjOWZjNWEzZjU1ZThkNmMwZTY5MzNlNDlhMjljMDE4M2M1ZjJjYTI2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgOCBEZWMgMjAyMyAxMzo1NDoyNCArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjUgMy84XSBNb3ZlIGluaXRpYWxpemF0aW9uIG9mIFBvcnQgc3Ry dWN0IHRvIGNoaWxkIHByb2Nlc3MKCkluIHBvc3RtYXN0ZXIsIHVzZSBhIG1vcmUgbGlnaHR3 ZWlnaHQgQ2xpZW50U29ja2V0IHN0cnVjdCB0aGF0CmVuY2Fwc3VsYXRlcyBqdXN0IHRoZSBz b2NrZXQgaXRzZWxmIGFuZCB0aGUgZW5kcG9pbnQgYWRkcmVzc2VzIHRoYXQKeW91IGdldCBm cm9tIGFjY2VwdCgpIGNhbGwuIENsaWVudFNvY2tldCBpcyBwYXNzZWQgdG8gdGhlIGNoaWxk CnByb2Nlc3MsIHdoaWNoIGluaXRpYWxpemVzIHRoZSBiaWdnZXIgUG9ydCBzdHJ1Y3QuIFRo aXMgbWFrZXMgaXQgbW9yZQpjbGVhciB3aGF0IGluZm9ybWF0aW9uIHBvc3RtYXN0ZXIgaW5p dGlhbGl6ZXMsIGFuZCB3aGF0IGlzIGxlZnQgdG8gdGhlCmNoaWxkIHByb2Nlc3MuCgpSZW5h bWUgdGhlIFN0cmVhbVNlcnZlclBvcnQsIFN0cmVhbUNvbm5lY3Rpb24gZnVuY3Rpb25zIHRv IG1ha2UgaXQKbW9yZSBjbGVhciB3aGF0IHRoZXkgZG8uIFJlbW92ZSBTdHJlYW1DbG9zZSwg cmVwbGFjaW5nIGl0IHdpdGggcGxhaW4KY2xvc2Vzb2NrZXQoKSBjYWxscy4KClJldmlld2Vk LWJ5OiBUcmlzdGFuIFBhcnRpbiwgQW5kcmVzIEZyZXVuZApEaXNjdXNzaW9uOiBodHRwczov L3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzdhNTliMDczLTViNWItMTUxZS03ZWQz LThiMDFmZjdjZTllZkBpa2kuZmkKLS0tCiBzcmMvYmFja2VuZC9saWJwcS9wcWNvbW0uYyAg ICAgICAgICB8ICA5NSArKysrKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVy L3Bvc3RtYXN0ZXIuYyB8IDE2MyArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMgICAgICAgICB8ICAgNSArLQogc3JjL2luY2x1ZGUv bGlicHEvbGlicHEtYmUuaCAgICAgICAgfCAgMjAgKysrLQogc3JjL2luY2x1ZGUvbGlicHEv bGlicHEuaCAgICAgICAgICAgfCAgIDYgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgIHwgICAxICsKIDYgZmlsZXMgY2hhbmdlZCwgMTYwIGluc2VydGlvbnMoKyks IDEzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9wcWNv bW0uYyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jCmluZGV4IDI4MDJlZmM2M2ZjLi45 ZWVkYTllZmZiMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvcHFjb21tLmMKKysr IGIvc3JjL2JhY2tlbmQvbGlicHEvcHFjb21tLmMKQEAgLTI5LDExICsyOSwxMSBAQAogICog SU5URVJGQUNFIFJPVVRJTkVTCiAgKgogICogc2V0dXAvdGVhcmRvd246Ci0gKgkJU3RyZWFt U2VydmVyUG9ydAktIE9wZW4gcG9zdG1hc3RlcidzIHNlcnZlciBwb3J0Ci0gKgkJU3RyZWFt Q29ubmVjdGlvbgktIENyZWF0ZSBuZXcgY29ubmVjdGlvbiB3aXRoIGNsaWVudAotICoJCVN0 cmVhbUNsb3NlCQkJLSBDbG9zZSBhIGNsaWVudC9iYWNrZW5kIGNvbm5lY3Rpb24KKyAqCQlM aXN0ZW5TZXJ2ZXJQb3J0CS0gT3BlbiBwb3N0bWFzdGVyJ3Mgc2VydmVyIHBvcnQKKyAqCQlB Y2NlcHRDbGllbnRDb25uZWN0aW9uIC0gQ3JlYXRlIG5ldyBjb25uZWN0aW9uIHdpdGggY2xp ZW50CisgKgkJSW5pdENsaWVudENvbm5lY3Rpb24gLSBJbml0aWFsaXplIGEgY2xpZW50IGNv bm5lY3Rpb24KICAqCQlUb3VjaFNvY2tldEZpbGVzCS0gUHJvdGVjdCBzb2NrZXQgZmlsZXMg YWdhaW5zdCAvdG1wIGNsZWFuZXJzCi0gKgkJcHFfaW5pdAkJCS0gaW5pdGlhbGl6ZSBsaWJw cSBhdCBiYWNrZW5kIHN0YXJ0dXAKKyAqCQlwcV9pbml0CQkJCS0gaW5pdGlhbGl6ZSBsaWJw cSBhdCBiYWNrZW5kIHN0YXJ0dXAKICAqCQlzb2NrZXRfY29tbV9yZXNldAktIHJlc2V0IGxp YnBxIGR1cmluZyBlcnJvciByZWNvdmVyeQogICoJCXNvY2tldF9jbG9zZQkJLSBzaHV0ZG93 biBsaWJwcSBhdCBiYWNrZW5kIGV4aXQKICAqCkBAIC0zMDQsNyArMzA0LDcgQEAgc29ja2V0 X2Nsb3NlKGludCBjb2RlLCBEYXR1bSBhcmcpCiAKIAogLyoKLSAqIFN0cmVhbVNlcnZlclBv cnQgLS0gb3BlbiBhICJsaXN0ZW5pbmciIHBvcnQgdG8gYWNjZXB0IGNvbm5lY3Rpb25zLgor ICogTGlzdGVuU2VydmVyUG9ydCAtLSBvcGVuIGEgImxpc3RlbmluZyIgcG9ydCB0byBhY2Nl cHQgY29ubmVjdGlvbnMuCiAgKgogICogZmFtaWx5IHNob3VsZCBiZSBBRl9VTklYIG9yIEFG X1VOU1BFQzsgcG9ydE51bWJlciBpcyB0aGUgcG9ydCBudW1iZXIuCiAgKiBGb3IgQUZfVU5J WCBwb3J0cywgaG9zdE5hbWUgc2hvdWxkIGJlIE5VTEwgYW5kIHVuaXhTb2NrZXREaXIgbXVz dCBiZQpAQCAtMzE5LDcgKzMxOSw3IEBAIHNvY2tldF9jbG9zZShpbnQgY29kZSwgRGF0dW0g YXJnKQogICogUkVUVVJOUzogU1RBVFVTX09LIG9yIFNUQVRVU19FUlJPUgogICovCiBpbnQK LVN0cmVhbVNlcnZlclBvcnQoaW50IGZhbWlseSwgY29uc3QgY2hhciAqaG9zdE5hbWUsIHVu c2lnbmVkIHNob3J0IHBvcnROdW1iZXIsCitMaXN0ZW5TZXJ2ZXJQb3J0KGludCBmYW1pbHks IGNvbnN0IGNoYXIgKmhvc3ROYW1lLCB1bnNpZ25lZCBzaG9ydCBwb3J0TnVtYmVyLAogCQkJ CSBjb25zdCBjaGFyICp1bml4U29ja2V0RGlyLAogCQkJCSBwZ3NvY2tldCBMaXN0ZW5Tb2Nr ZXRzW10sIGludCAqTnVtTGlzdGVuU29ja2V0cywgaW50IE1heExpc3RlbikKIHsKQEAgLTY4 NSw4ICs2ODUsOSBAQCBTZXR1cF9BRl9VTklYKGNvbnN0IGNoYXIgKnNvY2tfcGF0aCkKIAog CiAvKgotICogU3RyZWFtQ29ubmVjdGlvbiAtLSBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiB3 aXRoIGNsaWVudCB1c2luZwotICoJCXNlcnZlciBwb3J0LiAgU2V0IHBvcnQtPnNvY2sgdG8g dGhlIEZEIG9mIHRoZSBuZXcgY29ubmVjdGlvbi4KKyAqIEFjY2VwdENsaWVudENvbm5lY3Rp b24gLS0gYWNjZXB0IGEgbmV3IGNvbm5lY3Rpb24gd2l0aCBjbGllbnQgdXNpbmcKKyAqCQlz ZXJ2ZXIgcG9ydC4gIEZpbGxzICpjbGllbnRfc29jayB3aXRoIHRoZSBGRCBhbmQgZW5kcG9p bnQgaW5mbworICoJCW9mIHRoZSBuZXcgY29ubmVjdGlvbi4KICAqCiAgKiBBU1NVTUU6IHRo YXQgdGhpcyBkb2Vzbid0IG5lZWQgdG8gYmUgbm9uLWJsb2NraW5nIGJlY2F1c2UKICAqCQl0 aGUgUG9zdG1hc3RlciB3YWl0cyBmb3IgdGhlIHNvY2tldCB0byBiZSByZWFkeSB0byBhY2Nl cHQoKS4KQEAgLTY5NCwxMyArNjk1LDEzIEBAIFNldHVwX0FGX1VOSVgoY29uc3QgY2hhciAq c29ja19wYXRoKQogICogUkVUVVJOUzogU1RBVFVTX09LIG9yIFNUQVRVU19FUlJPUgogICov CiBpbnQKLVN0cmVhbUNvbm5lY3Rpb24ocGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0 KQorQWNjZXB0Q2xpZW50Q29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIENsaWVudFNv Y2tldCAqY2xpZW50X3NvY2spCiB7CiAJLyogYWNjZXB0IGNvbm5lY3Rpb24gYW5kIGZpbGwg aW4gdGhlIGNsaWVudCAocmVtb3RlKSBhZGRyZXNzICovCi0JcG9ydC0+cmFkZHIuc2FsZW4g PSBzaXplb2YocG9ydC0+cmFkZHIuYWRkcik7Ci0JaWYgKChwb3J0LT5zb2NrID0gYWNjZXB0 KHNlcnZlcl9mZCwKLQkJCQkJCQkgKHN0cnVjdCBzb2NrYWRkciAqKSAmcG9ydC0+cmFkZHIu YWRkciwKLQkJCQkJCQkgJnBvcnQtPnJhZGRyLnNhbGVuKSkgPT0gUEdJTlZBTElEX1NPQ0tF VCkKKwljbGllbnRfc29jay0+cmFkZHIuc2FsZW4gPSBzaXplb2YoY2xpZW50X3NvY2stPnJh ZGRyLmFkZHIpOworCWlmICgoY2xpZW50X3NvY2stPnNvY2sgPSBhY2NlcHQoc2VydmVyX2Zk LAorCQkJCQkJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSAmY2xpZW50X3NvY2stPnJhZGRyLmFk ZHIsCisJCQkJCQkJCQkmY2xpZW50X3NvY2stPnJhZGRyLnNhbGVuKSkgPT0gUEdJTlZBTElE X1NPQ0tFVCkKIAl7CiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJjb2RlX2Zvcl9zb2NrZXRf YWNjZXNzKCksCkBAIC03MTgsMTAgKzcxOSwxMCBAQCBTdHJlYW1Db25uZWN0aW9uKHBnc29j a2V0IHNlcnZlcl9mZCwgUG9ydCAqcG9ydCkKIAl9CiAKIAkvKiBmaWxsIGluIHRoZSBzZXJ2 ZXIgKGxvY2FsKSBhZGRyZXNzICovCi0JcG9ydC0+bGFkZHIuc2FsZW4gPSBzaXplb2YocG9y dC0+bGFkZHIuYWRkcik7Ci0JaWYgKGdldHNvY2tuYW1lKHBvcnQtPnNvY2ssCi0JCQkJCShz dHJ1Y3Qgc29ja2FkZHIgKikgJnBvcnQtPmxhZGRyLmFkZHIsCi0JCQkJCSZwb3J0LT5sYWRk ci5zYWxlbikgPCAwKQorCWNsaWVudF9zb2NrLT5sYWRkci5zYWxlbiA9IHNpemVvZihjbGll bnRfc29jay0+bGFkZHIuYWRkcik7CisJaWYgKGdldHNvY2tuYW1lKGNsaWVudF9zb2NrLT5z b2NrLAorCQkJCQkoc3RydWN0IHNvY2thZGRyICopICZjbGllbnRfc29jay0+bGFkZHIuYWRk ciwKKwkJCQkJJmNsaWVudF9zb2NrLT5sYWRkci5zYWxlbikgPCAwKQogCXsKIAkJZXJlcG9y dChMT0csCiAJCQkJKGVycm1zZygiJXMoKSBmYWlsZWQ6ICVtIiwgImdldHNvY2tuYW1lIikp KTsKQEAgLTcyOSw3ICs3MzAsNyBAQCBTdHJlYW1Db25uZWN0aW9uKHBnc29ja2V0IHNlcnZl cl9mZCwgUG9ydCAqcG9ydCkKIAl9CiAKIAkvKiBzZWxlY3QgTk9ERUxBWSBhbmQgS0VFUEFM SVZFIG9wdGlvbnMgaWYgaXQncyBhIFRDUCBjb25uZWN0aW9uICovCi0JaWYgKHBvcnQtPmxh ZGRyLmFkZHIuc3NfZmFtaWx5ICE9IEFGX1VOSVgpCisJaWYgKGNsaWVudF9zb2NrLT5sYWRk ci5hZGRyLnNzX2ZhbWlseSAhPSBBRl9VTklYKQogCXsKIAkJaW50CQkJb247CiAjaWZkZWYg V0lOMzIKQEAgLTc0MCw3ICs3NDEsNyBAQCBTdHJlYW1Db25uZWN0aW9uKHBnc29ja2V0IHNl cnZlcl9mZCwgUG9ydCAqcG9ydCkKIAogI2lmZGVmCVRDUF9OT0RFTEFZCiAJCW9uID0gMTsK LQkJaWYgKHNldHNvY2tvcHQocG9ydC0+c29jaywgSVBQUk9UT19UQ1AsIFRDUF9OT0RFTEFZ LAorCQlpZiAoc2V0c29ja29wdChjbGllbnRfc29jay0+c29jaywgSVBQUk9UT19UQ1AsIFRD UF9OT0RFTEFZLAogCQkJCQkgICAoY2hhciAqKSAmb24sIHNpemVvZihvbikpIDwgMCkKIAkJ ewogCQkJZXJlcG9ydChMT0csCkBAIC03NDksNyArNzUwLDcgQEAgU3RyZWFtQ29ubmVjdGlv bihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQpCiAJCX0KICNlbmRpZgogCQlvbiA9 IDE7Ci0JCWlmIChzZXRzb2Nrb3B0KHBvcnQtPnNvY2ssIFNPTF9TT0NLRVQsIFNPX0tFRVBB TElWRSwKKwkJaWYgKHNldHNvY2tvcHQoY2xpZW50X3NvY2stPnNvY2ssIFNPTF9TT0NLRVQs IFNPX0tFRVBBTElWRSwKIAkJCQkJICAgKGNoYXIgKikgJm9uLCBzaXplb2Yob24pKSA8IDAp CiAJCXsKIAkJCWVyZXBvcnQoTE9HLApAQCAtNzgxLDcgKzc4Miw3IEBAIFN0cmVhbUNvbm5l Y3Rpb24ocGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0KQogCQkgKiBodHRwczovL21z ZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2JiNzM2NTQ5JTI4dj12cy44NSUyOS5h c3B4CiAJCSAqLwogCQlvcHRsZW4gPSBzaXplb2Yob2xkb3B0KTsKLQkJaWYgKGdldHNvY2tv cHQocG9ydC0+c29jaywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAoY2hhciAqKSAmb2xkb3B0 LAorCQlpZiAoZ2V0c29ja29wdChjbGllbnRfc29jay0+c29jaywgU09MX1NPQ0tFVCwgU09f U05EQlVGLCAoY2hhciAqKSAmb2xkb3B0LAogCQkJCQkgICAmb3B0bGVuKSA8IDApCiAJCXsK IAkJCWVyZXBvcnQoTE9HLApAQCAtNzkxLDcgKzc5Miw3IEBAIFN0cmVhbUNvbm5lY3Rpb24o cGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0KQogCQluZXdvcHQgPSBQUV9TRU5EX0JV RkZFUl9TSVpFICogNDsKIAkJaWYgKG9sZG9wdCA8IG5ld29wdCkKIAkJewotCQkJaWYgKHNl dHNvY2tvcHQocG9ydC0+c29jaywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAoY2hhciAqKSAm bmV3b3B0LAorCQkJaWYgKHNldHNvY2tvcHQoY2xpZW50X3NvY2stPnNvY2ssIFNPTF9TT0NL RVQsIFNPX1NOREJVRiwgKGNoYXIgKikgJm5ld29wdCwKIAkJCQkJCSAgIHNpemVvZihuZXdv cHQpKSA8IDApCiAJCQl7CiAJCQkJZXJlcG9ydChMT0csCkBAIC04MDAsMTMgKzgwMSwzNCBA QCBTdHJlYW1Db25uZWN0aW9uKHBnc29ja2V0IHNlcnZlcl9mZCwgUG9ydCAqcG9ydCkKIAkJ CX0KIAkJfQogI2VuZGlmCisJfQorCXJldHVybiBTVEFUVVNfT0s7Cit9CisKKy8qCisgKiBJ bml0Q2xpZW50Q29ubmVjdGlvbiAtLSBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBmcm9tIHRo ZSBnaXZlbiBzb2NrZXQuCisgKgorICogVGhpcyBydW5zIGluIHRoZSBiYWNrZW5kIHByb2Nl c3MuCisgKi8KK1BvcnQgKgorSW5pdENsaWVudENvbm5lY3Rpb24oQ2xpZW50U29ja2V0ICpj bGllbnRfc29jaykKK3sKKwlQb3J0CSAgICpwb3J0OworCisJcG9ydCA9IHBhbGxvYzAoc2l6 ZW9mKFBvcnQpKTsKKwlwb3J0LT5zb2NrID0gY2xpZW50X3NvY2stPnNvY2s7CisJcG9ydC0+ bGFkZHIgPSBjbGllbnRfc29jay0+bGFkZHI7CisJcG9ydC0+cmFkZHIgPSBjbGllbnRfc29j ay0+cmFkZHI7CiAKKwkvKiBBcHBseSB0aGUgY3VycmVudCBrZWVwYWxpdmUgcGFyYW1ldGVy cyBpZiBpdCdzIGEgVENQIGNvbm5lY3Rpb24gKi8KKwlpZiAocG9ydC0+bGFkZHIuYWRkci5z c19mYW1pbHkgIT0gQUZfVU5JWCkKKwl7CiAJCS8qCi0JCSAqIEFsc28gYXBwbHkgdGhlIGN1 cnJlbnQga2VlcGFsaXZlIHBhcmFtZXRlcnMuICBJZiB3ZSBmYWlsIHRvIHNldCBhCi0JCSAq IHBhcmFtZXRlciwgZG9uJ3QgZXJyb3Igb3V0LCBiZWNhdXNlIHRoZXNlIGFyZW4ndCB1bml2 ZXJzYWxseQotCQkgKiBzdXBwb3J0ZWQuICAoTm90ZTogeW91IG1pZ2h0IHRoaW5rIHdlIG5l ZWQgdG8gcmVzZXQgdGhlIEdVQwotCQkgKiB2YXJpYWJsZXMgdG8gMCBpbiBzdWNoIGEgY2Fz ZSwgYnV0IGl0J3Mgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZQotCQkgKiBzaG93IGhvb2tz IGZvciB0aGVzZSB2YXJpYWJsZXMgcmVwb3J0IHRoZSB0cnV0aCBhbnl3YXkuKQorCQkgKiBJ ZiB3ZSBmYWlsIHRvIHNldCBhIHBhcmFtZXRlciwgZG9uJ3QgZXJyb3Igb3V0LCBiZWNhdXNl IHRoZXNlCisJCSAqIGFyZW4ndCB1bml2ZXJzYWxseSBzdXBwb3J0ZWQuICAoTm90ZTogeW91 IG1pZ2h0IHRoaW5rIHdlIG5lZWQgdG8KKwkJICogcmVzZXQgdGhlIEdVQyB2YXJpYWJsZXMg dG8gMCBpbiBzdWNoIGEgY2FzZSwgYnV0IGl0J3Mgbm90IG5lY2Vzc2FyeQorCQkgKiBiZWNh dXNlIHRoZSBzaG93IGhvb2tzIGZvciB0aGVzZSB2YXJpYWJsZXMgcmVwb3J0IHRoZSB0cnV0 aAorCQkgKiBhbnl3YXkuKQogCQkgKi8KIAkJKHZvaWQpIHBxX3NldGtlZXBhbGl2ZXNpZGxl KHRjcF9rZWVwYWxpdmVzX2lkbGUsIHBvcnQpOwogCQkodm9pZCkgcHFfc2V0a2VlcGFsaXZl c2ludGVydmFsKHRjcF9rZWVwYWxpdmVzX2ludGVydmFsLCBwb3J0KTsKQEAgLTgxNCwyNCAr ODM2LDcgQEAgU3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQgKnBv cnQpCiAJCSh2b2lkKSBwcV9zZXR0Y3B1c2VydGltZW91dCh0Y3BfdXNlcl90aW1lb3V0LCBw b3J0KTsKIAl9CiAKLQlyZXR1cm4gU1RBVFVTX09LOwotfQotCi0vKgotICogU3RyZWFtQ2xv c2UgLS0gY2xvc2UgYSBjbGllbnQvYmFja2VuZCBjb25uZWN0aW9uCi0gKgotICogTk9URTog dGhpcyBpcyBOT1QgdXNlZCB0byB0ZXJtaW5hdGUgYSBzZXNzaW9uOyBpdCBpcyBqdXN0IHVz ZWQgdG8gcmVsZWFzZQotICogdGhlIGZpbGUgZGVzY3JpcHRvciBpbiBhIHByb2Nlc3MgdGhh dCBzaG91bGQgbm8gbG9uZ2VyIGhhdmUgdGhlIHNvY2tldAotICogb3Blbi4gIChGb3IgZXhh bXBsZSwgdGhlIHBvc3RtYXN0ZXIgY2FsbHMgdGhpcyBhZnRlciBwYXNzaW5nIG93bmVyc2hp cAotICogb2YgdGhlIGNvbm5lY3Rpb24gdG8gYSBjaGlsZCBwcm9jZXNzLikgIEl0IGlzIGV4 cGVjdGVkIHRoYXQgc29tZW9uZSBlbHNlCi0gKiBzdGlsbCBoYXMgdGhlIHNvY2tldCBvcGVu LiAgU28sIHdlIG9ubHkgd2FudCB0byBjbG9zZSB0aGUgZGVzY3JpcHRvciwKLSAqIHdlIGRv IE5PVCB3YW50IHRvIHNlbmQgYW55dGhpbmcgdG8gdGhlIGZhciBlbmQuCi0gKi8KLXZvaWQK LVN0cmVhbUNsb3NlKHBnc29ja2V0IHNvY2spCi17Ci0JaWYgKGNsb3Nlc29ja2V0KHNvY2sp ICE9IDApCi0JCWVsb2coTE9HLCAiY291bGQgbm90IGNsb3NlIGNsaWVudCBvciBsaXN0ZW4g c29ja2V0OiAlbSIpOworCXJldHVybiBwb3J0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA4YTEyY2E2OTZkZS4uMjU3YTFiZWUzMzEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00MjUsMTUgKzQyNSwxNSBAQCB0 eXBlZGVmIGVudW0gQ0FDX3N0YXRlCiAJQ0FDX1RPT01BTlksCiB9IENBQ19zdGF0ZTsKIAot c3RhdGljIHZvaWQgQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNh Yyk7Ci1zdGF0aWMgdm9pZCBCYWNrZW5kUnVuKFBvcnQgKnBvcnQpIHBnX2F0dHJpYnV0ZV9u b3JldHVybigpOworc3RhdGljIHZvaWQgQmFja2VuZEluaXRpYWxpemUoQ2xpZW50U29ja2V0 ICpjbGllbnRfc29jaywgQ0FDX3N0YXRlIGNhYyk7CitzdGF0aWMgdm9pZCBCYWNrZW5kUnVu KHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogc3RhdGljIHZvaWQgRXhpdFBvc3Rt YXN0ZXIoaW50IHN0YXR1cykgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBzdGF0aWMgaW50 CVNlcnZlckxvb3Aodm9pZCk7Ci1zdGF0aWMgaW50CUJhY2tlbmRTdGFydHVwKFBvcnQgKnBv cnQpOworc3RhdGljIGludAlCYWNrZW5kU3RhcnR1cChDbGllbnRTb2NrZXQgKmNsaWVudF9z b2NrKTsKIHN0YXRpYyBpbnQJUHJvY2Vzc1N0YXJ0dXBQYWNrZXQoUG9ydCAqcG9ydCwgYm9v bCBzc2xfZG9uZSwgYm9vbCBnc3NfZG9uZSk7CiBzdGF0aWMgdm9pZCBTZW5kTmVnb3RpYXRl UHJvdG9jb2xWZXJzaW9uKExpc3QgKnVucmVjb2duaXplZF9wcm90b2NvbF9vcHRpb25zKTsK IHN0YXRpYyB2b2lkIHByb2Nlc3NDYW5jZWxSZXF1ZXN0KFBvcnQgKnBvcnQsIHZvaWQgKnBr dCk7Ci1zdGF0aWMgdm9pZCByZXBvcnRfZm9ya19mYWlsdXJlX3RvX2NsaWVudChQb3J0ICpw b3J0LCBpbnQgZXJybnVtKTsKK3N0YXRpYyB2b2lkIHJlcG9ydF9mb3JrX2ZhaWx1cmVfdG9f Y2xpZW50KENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIGludCBlcnJudW0pOwogc3RhdGlj IENBQ19zdGF0ZSBjYW5BY2NlcHRDb25uZWN0aW9ucyhpbnQgYmFja2VuZF90eXBlKTsKIHN0 YXRpYyBib29sIFJhbmRvbUNhbmNlbEtleShpbnQzMiAqY2FuY2VsX2tleSk7CiBzdGF0aWMg dm9pZCBzaWduYWxfY2hpbGQocGlkX3QgcGlkLCBpbnQgc2lnbmFsKTsKQEAgLTQ4Miw4ICs0 ODIsOCBAQCB0eXBlZGVmIHN0cnVjdAogfSB3aW4zMl9kZWFkY2hpbGRfd2FpdGluZm87CiAj ZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAotc3RhdGljIHBpZF90IGJhY2tlbmRfZm9ya2V4 ZWMoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYyk7Ci1zdGF0aWMgcGlkX3QgaW50ZXJuYWxf Zm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgUG9ydCAqcG9ydCwgQmFja2dyb3Vu ZFdvcmtlciAqd29ya2VyKTsKK3N0YXRpYyBwaWRfdCBiYWNrZW5kX2ZvcmtleGVjKENsaWVu dFNvY2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0ZSBjYWMpOworc3RhdGljIHBpZF90IGlu dGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIENsaWVudFNvY2tldCAq Y2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcik7CiAKIC8qIFR5cGUgZm9y IGEgc29ja2V0IHRoYXQgY2FuIGJlIGluaGVyaXRlZCB0byBhIGNsaWVudCBwcm9jZXNzICov CiAjaWZkZWYgV0lOMzIKQEAgLTUwMiw5ICs1MDIsOSBAQCB0eXBlZGVmIGludCBJbmhlcml0 YWJsZVNvY2tldDsKICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLQlib29sCQloYXNfcG9ydDsK LQlQb3J0CQlwb3J0OwotCUluaGVyaXRhYmxlU29ja2V0IHBvcnRzb2NrZXQ7CisJYm9vbAkJ aGFzX2NsaWVudF9zb2NrOworCUNsaWVudFNvY2tldCBjbGllbnRfc29jazsKKwlJbmhlcml0 YWJsZVNvY2tldCBpbmhfc29jazsKIAogCWJvb2wJCWhhc19iZ3dvcmtlcjsKIAlCYWNrZ3Jv dW5kV29ya2VyIGJnd29ya2VyOwpAQCAtNTUzLDEzICs1NTMsMTMgQEAgdHlwZWRlZiBzdHJ1 Y3QKIAljaGFyCQlwa2dsaWJfcGF0aFtNQVhQR1BBVEhdOwogfSBCYWNrZW5kUGFyYW1ldGVy czsKIAotc3RhdGljIHZvaWQgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgUG9y dCAqKnBvcnQsIEJhY2tncm91bmRXb3JrZXIgKip3b3JrZXIpOwotc3RhdGljIHZvaWQgcmVz dG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIFBvcnQg Kipwb3J0LCBCYWNrZ3JvdW5kV29ya2VyICoqd29ya2VyKTsKK3N0YXRpYyB2b2lkIHJlYWRf YmFja2VuZF92YXJpYWJsZXMoY2hhciAqaWQsIENsaWVudFNvY2tldCAqKmNsaWVudF9zb2Nr LCBCYWNrZ3JvdW5kV29ya2VyICoqd29ya2VyKTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfYmFj a2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQg KipjbGllbnRfc29jaywgQmFja2dyb3VuZFdvcmtlciAqKndvcmtlcik7CiAKICNpZm5kZWYg V0lOMzIKLXN0YXRpYyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFt ZXRlcnMgKnBhcmFtLCBQb3J0ICpwb3J0LCBCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIpOwor c3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAq cGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKndv cmtlcik7CiAjZWxzZQotc3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNr ZW5kUGFyYW1ldGVycyAqcGFyYW0sIFBvcnQgKnBvcnQsIEJhY2tncm91bmRXb3JrZXIgKndv cmtlciwKK3N0YXRpYyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFt ZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29y a2VyICp3b3JrZXIsCiAJCQkJCQkJCSAgIEhBTkRMRSBjaGlsZFByb2Nlc3MsIHBpZF90IGNo aWxkUGlkKTsKICNlbmRpZgogCkBAIC0xMjE5LDE0ICsxMjE5LDE0IEBAIFBvc3RtYXN0ZXJN YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQljaGFyCSAgICpjdXJob3N0ID0gKGNo YXIgKikgbGZpcnN0KGwpOwogCiAJCQlpZiAoc3RyY21wKGN1cmhvc3QsICIqIikgPT0gMCkK LQkJCQlzdGF0dXMgPSBTdHJlYW1TZXJ2ZXJQb3J0KEFGX1VOU1BFQywgTlVMTCwKKwkJCQlz dGF0dXMgPSBMaXN0ZW5TZXJ2ZXJQb3J0KEFGX1VOU1BFQywgTlVMTCwKIAkJCQkJCQkJCQkg ICh1bnNpZ25lZCBzaG9ydCkgUG9zdFBvcnROdW1iZXIsCiAJCQkJCQkJCQkJICBOVUxMLAog CQkJCQkJCQkJCSAgTGlzdGVuU29ja2V0cywKIAkJCQkJCQkJCQkgICZOdW1MaXN0ZW5Tb2Nr ZXRzLAogCQkJCQkJCQkJCSAgTUFYTElTVEVOKTsKIAkJCWVsc2UKLQkJCQlzdGF0dXMgPSBT dHJlYW1TZXJ2ZXJQb3J0KEFGX1VOU1BFQywgY3VyaG9zdCwKKwkJCQlzdGF0dXMgPSBMaXN0 ZW5TZXJ2ZXJQb3J0KEFGX1VOU1BFQywgY3VyaG9zdCwKIAkJCQkJCQkJCQkgICh1bnNpZ25l ZCBzaG9ydCkgUG9zdFBvcnROdW1iZXIsCiAJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJ CSAgTGlzdGVuU29ja2V0cywKQEAgLTEzMjAsNyArMTMyMCw3IEBAIFBvc3RtYXN0ZXJNYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsKIAkJCWNoYXIJICAgKnNvY2tldGRpciA9 IChjaGFyICopIGxmaXJzdChsKTsKIAotCQkJc3RhdHVzID0gU3RyZWFtU2VydmVyUG9ydChB Rl9VTklYLCBOVUxMLAorCQkJc3RhdHVzID0gTGlzdGVuU2VydmVyUG9ydChBRl9VTklYLCBO VUxMLAogCQkJCQkJCQkJICAodW5zaWduZWQgc2hvcnQpIFBvc3RQb3J0TnVtYmVyLAogCQkJ CQkJCQkJICBzb2NrZXRkaXIsCiAJCQkJCQkJCQkgIExpc3RlblNvY2tldHMsCkBAIC0xNTAw LDcgKzE1MDAsMTAgQEAgQ2xvc2VTZXJ2ZXJQb3J0cyhpbnQgc3RhdHVzLCBEYXR1bSBhcmcp CiAJICogY29uZGl0aW9uIGlmIGEgbmV3IHBvc3RtYXN0ZXIgd2FudHMgdG8gcmUtdXNlIHRo ZSBUQ1AgcG9ydCBudW1iZXIuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IE51bUxpc3RlblNv Y2tldHM7IGkrKykKLQkJU3RyZWFtQ2xvc2UoTGlzdGVuU29ja2V0c1tpXSk7CisJeworCQlp ZiAoY2xvc2Vzb2NrZXQoTGlzdGVuU29ja2V0c1tpXSkgIT0gMCkKKwkJCWVsb2coTE9HLCAi Y291bGQgbm90IGNsb3NlIGxpc3RlbiBzb2NrZXQ6ICVtIik7CisJfQogCU51bUxpc3RlblNv Y2tldHMgPSAwOwogCiAJLyoKQEAgLTE3NzAsMTggKzE3NzMsMjAgQEAgU2VydmVyTG9vcCh2 b2lkKQogCiAJCQlpZiAoZXZlbnRzW2ldLmV2ZW50cyAmIFdMX1NPQ0tFVF9BQ0NFUFQpCiAJ CQl7Ci0JCQkJUG9ydAkJcG9ydDsKKwkJCQlDbGllbnRTb2NrZXQgczsKIAotCQkJCW1lbXNl dCgmcG9ydCwgMCwgc2l6ZW9mKHBvcnQpKTsKLQkJCQlpZiAoU3RyZWFtQ29ubmVjdGlvbihl dmVudHNbaV0uZmQsICZwb3J0KSA9PSBTVEFUVVNfT0spCi0JCQkJCUJhY2tlbmRTdGFydHVw KCZwb3J0KTsKKwkJCQlpZiAoQWNjZXB0Q2xpZW50Q29ubmVjdGlvbihldmVudHNbaV0uZmQs ICZzKSA9PSBTVEFUVVNfT0spCisJCQkJCUJhY2tlbmRTdGFydHVwKCZzKTsKIAogCQkJCS8q CiAJCQkJICogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlIG9wZW4gc29ja2V0IG9yIHBvcnQgc3Ry dWN0dXJlIGluIHRoaXMKIAkJCQkgKiBwcm9jZXNzCiAJCQkJICovCi0JCQkJaWYgKHBvcnQu c29jayAhPSBQR0lOVkFMSURfU09DS0VUKQotCQkJCQlTdHJlYW1DbG9zZShwb3J0LnNvY2sp OworCQkJCWlmIChzLnNvY2sgIT0gUEdJTlZBTElEX1NPQ0tFVCkKKwkJCQl7CisJCQkJCWlm IChjbG9zZXNvY2tldChzLnNvY2spICE9IDApCisJCQkJCQllbG9nKExPRywgImNvdWxkIG5v dCBjbG9zZSBjbGllbnQgc29ja2V0OiAlbSIpOworCQkJCX0KIAkJCX0KIAkJfQogCkBAIC0y MTQ2LDExICsyMTUxLDcgQEAgcmV0cnkxOgogCiAJLyoKIAkgKiBOb3cgZmV0Y2ggcGFyYW1l dGVycyBvdXQgb2Ygc3RhcnR1cCBwYWNrZXQgYW5kIHNhdmUgdGhlbSBpbnRvIHRoZSBQb3J0 Ci0JICogc3RydWN0dXJlLiAgQWxsIGRhdGEgc3RydWN0dXJlcyBhdHRhY2hlZCB0byB0aGUg UG9ydCBzdHJ1Y3QgbXVzdCBiZQotCSAqIGFsbG9jYXRlZCBpbiBUb3BNZW1vcnlDb250ZXh0 IHNvIHRoYXQgdGhleSB3aWxsIHJlbWFpbiBhdmFpbGFibGUgaW4gYQotCSAqIHJ1bm5pbmcg YmFja2VuZCAoZXZlbiBhZnRlciBQb3N0bWFzdGVyQ29udGV4dCBpcyBkZXN0cm95ZWQpLiAg V2UgbmVlZAotCSAqIG5vdCB3b3JyeSBhYm91dCBsZWFraW5nIHRoaXMgc3RvcmFnZSBvbiBm YWlsdXJlLCBzaW5jZSB3ZSBhcmVuJ3QgaW4gdGhlCi0JICogcG9zdG1hc3RlciBwcm9jZXNz IGFueW1vcmUuCisJICogc3RydWN0dXJlLgogCSAqLwogCW9sZGNvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CiAKQEAgLTIyODYsNyArMjI4Nyw3 IEBAIHJldHJ5MToKIAkJcG9ydC0+ZGF0YWJhc2VfbmFtZVswXSA9ICdcMCc7CiAKIAkvKgot CSAqIERvbmUgcHV0dGluZyBzdHVmZiBpbiBUb3BNZW1vcnlDb250ZXh0LgorCSAqIERvbmUg ZmlsbGluZyB0aGUgUG9ydCBzdHJ1Y3R1cmUKIAkgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7CiAKQEAgLTI0OTAsNyArMjQ5MSwxMCBAQCBDbG9zZVBvc3RtYXN0 ZXJQb3J0cyhib29sIGFtX3N5c2xvZ2dlcikKIAlpZiAoTGlzdGVuU29ja2V0cykKIAl7CiAJ CWZvciAoaW50IGkgPSAwOyBpIDwgTnVtTGlzdGVuU29ja2V0czsgaSsrKQotCQkJU3RyZWFt Q2xvc2UoTGlzdGVuU29ja2V0c1tpXSk7CisJCXsKKwkJCWlmIChjbG9zZXNvY2tldChMaXN0 ZW5Tb2NrZXRzW2ldKSAhPSAwKQorCQkJCWVsb2coTE9HLCAiY291bGQgbm90IGNsb3NlIGxp c3RlbiBzb2NrZXQ6ICVtIik7CisJCX0KIAkJcGZyZWUoTGlzdGVuU29ja2V0cyk7CiAJfQog CU51bUxpc3RlblNvY2tldHMgPSAwOwpAQCAtMzk5Niw3ICs0MDAwLDcgQEAgVGVybWluYXRl Q2hpbGRyZW4oaW50IHNpZ25hbCkKICAqIE5vdGU6IGlmIHlvdSBjaGFuZ2UgdGhpcyBjb2Rl LCBhbHNvIGNvbnNpZGVyIFN0YXJ0QXV0b3ZhY3V1bVdvcmtlci4KICAqLwogc3RhdGljIGlu dAotQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKK0JhY2tlbmRTdGFydHVwKENsaWVudFNv Y2tldCAqY2xpZW50X3NvY2spCiB7CiAJQmFja2VuZCAgICAqYm47CQkJCS8qIGZvciBiYWNr ZW5kIGNsZWFudXAgKi8KIAlwaWRfdAkJcGlkOwpAQCAtNDA0Nyw3ICs0MDUxLDcgQEAgQmFj a2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAlibi0+Ymd3b3JrZXJfbm90aWZ5ID0gZmFsc2U7 CiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlwaWQgPSBiYWNrZW5kX2ZvcmtleGVjKHBvcnQs IGNhYyk7CisJcGlkID0gYmFja2VuZF9mb3JrZXhlYyhjbGllbnRfc29jaywgY2FjKTsKICNl bHNlCQkJCQkJCS8qICFFWEVDX0JBQ0tFTkQgKi8KIAlwaWQgPSBmb3JrX3Byb2Nlc3MoKTsK IAlpZiAocGlkID09IDApCQkJCS8qIGNoaWxkICovCkBAIC00MDU5LDEwICs0MDYzLDEwIEBA IEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQpCiAJCUNsb3NlUG9zdG1hc3RlclBvcnRzKGZh bHNlKTsKIAogCQkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gYW5kIGNv bGxlY3Qgc3RhcnR1cCBwYWNrZXQgKi8KLQkJQmFja2VuZEluaXRpYWxpemUocG9ydCwgY2Fj KTsKKwkJQmFja2VuZEluaXRpYWxpemUoY2xpZW50X3NvY2ssIGNhYyk7CiAKIAkJLyogQW5k IHJ1biB0aGUgYmFja2VuZCAqLwotCQlCYWNrZW5kUnVuKHBvcnQpOworCQlCYWNrZW5kUnVu KCk7CiAJfQogI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwogCkBAIC00MDc3LDE0 ICs0MDgxLDE0IEBAIEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQpCiAJCWVycm5vID0gc2F2 ZV9lcnJubzsKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycm1zZygiY291bGQgbm90IGZvcmsg bmV3IHByb2Nlc3MgZm9yIGNvbm5lY3Rpb246ICVtIikpKTsKLQkJcmVwb3J0X2ZvcmtfZmFp bHVyZV90b19jbGllbnQocG9ydCwgc2F2ZV9lcnJubyk7CisJCXJlcG9ydF9mb3JrX2ZhaWx1 cmVfdG9fY2xpZW50KGNsaWVudF9zb2NrLCBzYXZlX2Vycm5vKTsKIAkJcmV0dXJuIFNUQVRV U19FUlJPUjsKIAl9CiAKIAkvKiBpbiBwYXJlbnQsIHN1Y2Nlc3NmdWwgZm9yayAqLwogCWVy ZXBvcnQoREVCVUcyLAogCQkJKGVycm1zZ19pbnRlcm5hbCgiZm9ya2VkIG5ldyBiYWNrZW5k LCBwaWQ9JWQgc29ja2V0PSVkIiwKLQkJCQkJCQkgKGludCkgcGlkLCAoaW50KSBwb3J0LT5z b2NrKSkpOworCQkJCQkJCSAoaW50KSBwaWQsIChpbnQpIGNsaWVudF9zb2NrLT5zb2NrKSkp OwogCiAJLyoKIAkgKiBFdmVyeXRoaW5nJ3MgYmVlbiBzdWNjZXNzZnVsLCBpdCdzIHNhZmUg dG8gYWRkIHRoaXMgYmFja2VuZCB0byBvdXIgbGlzdApAQCAtNDExMSw3ICs0MTE1LDcgQEAg QmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKICAqIGl0J3Mgbm90IHVwIGFuZCBydW5uaW5n LgogICovCiBzdGF0aWMgdm9pZAotcmVwb3J0X2ZvcmtfZmFpbHVyZV90b19jbGllbnQoUG9y dCAqcG9ydCwgaW50IGVycm51bSkKK3JlcG9ydF9mb3JrX2ZhaWx1cmVfdG9fY2xpZW50KENs aWVudFNvY2tldCAqY2xpZW50X3NvY2ssIGludCBlcnJudW0pCiB7CiAJY2hhcgkJYnVmZmVy WzEwMDBdOwogCWludAkJCXJjOwpAQCAtNDEyMiwxMyArNDEyNiwxMyBAQCByZXBvcnRfZm9y a19mYWlsdXJlX3RvX2NsaWVudChQb3J0ICpwb3J0LCBpbnQgZXJybnVtKQogCQkJIHN0cmVy cm9yKGVycm51bSkpOwogCiAJLyogU2V0IHBvcnQgdG8gbm9uLWJsb2NraW5nLiAgRG9uJ3Qg ZG8gc2VuZCgpIGlmIHRoaXMgZmFpbHMgKi8KLQlpZiAoIXBnX3NldF9ub2Jsb2NrKHBvcnQt PnNvY2spKQorCWlmICghcGdfc2V0X25vYmxvY2soY2xpZW50X3NvY2stPnNvY2spKQogCQly ZXR1cm47CiAKIAkvKiBXZSdsbCByZXRyeSBhZnRlciBFSU5UUiwgYnV0IGlnbm9yZSBhbGwg b3RoZXIgZmFpbHVyZXMgKi8KIAlkbwogCXsKLQkJcmMgPSBzZW5kKHBvcnQtPnNvY2ssIGJ1 ZmZlciwgc3RybGVuKGJ1ZmZlcikgKyAxLCAwKTsKKwkJcmMgPSBzZW5kKGNsaWVudF9zb2Nr LT5zb2NrLCBidWZmZXIsIHN0cmxlbihidWZmZXIpICsgMSwgMCk7CiAJfSB3aGlsZSAocmMg PCAwICYmIGVycm5vID09IEVJTlRSKTsKIH0KIApAQCAtNDE0NiwxOCArNDE1MCwzMCBAQCBy ZXBvcnRfZm9ya19mYWlsdXJlX3RvX2NsaWVudChQb3J0ICpwb3J0LCBpbnQgZXJybnVtKQog ICogYnV0IGhhdmUgbm90IHlldCBzZXQgdXAgbW9zdCBvZiBvdXIgbG9jYWwgcG9pbnRlcnMg dG8gc2htZW0gc3RydWN0dXJlcy4KICAqLwogc3RhdGljIHZvaWQKLUJhY2tlbmRJbml0aWFs aXplKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpCitCYWNrZW5kSW5pdGlhbGl6ZShDbGll bnRTb2NrZXQgKmNsaWVudF9zb2NrLCBDQUNfc3RhdGUgY2FjKQogewogCWludAkJCXN0YXR1 czsKIAlpbnQJCQlyZXQ7CisJUG9ydAkgICAqcG9ydDsKIAljaGFyCQlyZW1vdGVfaG9zdFtO SV9NQVhIT1NUXTsKIAljaGFyCQlyZW1vdGVfcG9ydFtOSV9NQVhTRVJWXTsKIAlTdHJpbmdJ bmZvRGF0YSBwc19kYXRhOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKIAotCS8qIFNh dmUgcG9ydCBldGMuIGZvciBwcyBzdGF0dXMgKi8KKwkvKgorCSAqIENyZWF0ZSB0aGUgUG9y dCBzdHJ1Y3R1cmUuCisJICoKKwkgKiBUaGUgUG9ydCBzdHJ1Y3R1cmUgYW5kIGFsbCBkYXRh IHN0cnVjdHVyZXMgYXR0YWNoZWQgdG8gaXQgYXJlIGFsbG9jYXRlZAorCSAqIGluIFRvcE1l bW9yeUNvbnRleHQsIHNvIHRoYXQgdGhleSBzdXJ2aXZlIGludG8gUG9zdGdyZXNNYWluIGV4 ZWN1dGlvbi4KKwkgKiBXZSBuZWVkIG5vdCB3b3JyeSBhYm91dCBsZWFraW5nIHRoaXMgc3Rv cmFnZSBvbiBmYWlsdXJlLCBzaW5jZSB3ZQorCSAqIGFyZW4ndCBpbiB0aGUgcG9zdG1hc3Rl ciBwcm9jZXNzIGFueW1vcmUuCisJICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKKwlwb3J0ID0gSW5pdENsaWVudENvbm5lY3Rp b24oY2xpZW50X3NvY2spOwogCU15UHJvY1BvcnQgPSBwb3J0OworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjb250ZXh0KTsKIAotCS8qIFRlbGwgZmQuYyBhYm91dCB0aGUgbG9uZy1s aXZlZCBGRCBhc3NvY2lhdGVkIHdpdGggdGhlIHBvcnQgKi8KKwkvKiBUZWxsIGZkLmMgYWJv dXQgdGhlIGxvbmctbGl2ZWQgRkQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGllbnRfc29jayAq LwogCVJlc2VydmVFeHRlcm5hbEZEKCk7CiAKIAkvKgpAQCAtNDIxNiw4ICs0MjMyLDkgQEAg QmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKIAkgKiBTYXZl IHJlbW90ZV9ob3N0IGFuZCByZW1vdGVfcG9ydCBpbiBwb3J0IHN0cnVjdHVyZSAoYWZ0ZXIg dGhpcywgdGhleQogCSAqIHdpbGwgYXBwZWFyIGluIGxvZ19saW5lX3ByZWZpeCBkYXRhIGZv ciBsb2cgbWVzc2FnZXMpLgogCSAqLwotCXBvcnQtPnJlbW90ZV9ob3N0ID0gc3RyZHVwKHJl bW90ZV9ob3N0KTsKLQlwb3J0LT5yZW1vdGVfcG9ydCA9IHN0cmR1cChyZW1vdGVfcG9ydCk7 CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0 KTsKKwlwb3J0LT5yZW1vdGVfaG9zdCA9IHBzdHJkdXAocmVtb3RlX2hvc3QpOworCXBvcnQt PnJlbW90ZV9wb3J0ID0gcHN0cmR1cChyZW1vdGVfcG9ydCk7CiAKIAkvKiBBbmQgbm93IHdl IGNhbiBpc3N1ZSB0aGUgTG9nX2Nvbm5lY3Rpb25zIG1lc3NhZ2UsIGlmIHdhbnRlZCAqLwog CWlmIChMb2dfY29ubmVjdGlvbnMpCkBAIC00MjQ4LDcgKzQyNjUsOCBAQCBCYWNrZW5kSW5p dGlhbGl6ZShQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKQogCQlyZXQgPT0gMCAmJgogCQlz dHJzcG4ocmVtb3RlX2hvc3QsICIwMTIzNDU2Nzg5LiIpIDwgc3RybGVuKHJlbW90ZV9ob3N0 KSAmJgogCQlzdHJzcG4ocmVtb3RlX2hvc3QsICIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmOiIp IDwgc3RybGVuKHJlbW90ZV9ob3N0KSkKLQkJcG9ydC0+cmVtb3RlX2hvc3RuYW1lID0gc3Ry ZHVwKHJlbW90ZV9ob3N0KTsKKwkJcG9ydC0+cmVtb3RlX2hvc3RuYW1lID0gcHN0cmR1cChy ZW1vdGVfaG9zdCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCiAJ LyoKIAkgKiBSZWFkeSB0byBiZWdpbiBjbGllbnQgaW50ZXJhY3Rpb24uICBXZSB3aWxsIGdp dmUgdXAgYW5kIF9leGl0KDEpIGFmdGVyCkBAIC00MzY5LDcgKzQzODcsNyBAQCBCYWNrZW5k SW5pdGlhbGl6ZShQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKQogICoJCURvZXNuJ3QgcmV0 dXJuIGF0IGFsbC4KICAqLwogc3RhdGljIHZvaWQKLUJhY2tlbmRSdW4oUG9ydCAqcG9ydCkK K0JhY2tlbmRSdW4odm9pZCkKIHsKIAkvKgogCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBH UFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gIFdlIG11c3QgZG8gdGhpcwpAQCAtNDM4 Myw3ICs0NDAxLDcgQEAgQmFja2VuZFJ1bihQb3J0ICpwb3J0KQogCSAqLwogCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKIAotCVBvc3RncmVzTWFpbihwb3J0 LT5kYXRhYmFzZV9uYW1lLCBwb3J0LT51c2VyX25hbWUpOworCVBvc3RncmVzTWFpbihNeVBy b2NQb3J0LT5kYXRhYmFzZV9uYW1lLCBNeVByb2NQb3J0LT51c2VyX25hbWUpOwogfQogCiAK QEAgLTQ0MTcsNyArNDQzNSw3IEBAIHBvc3RtYXN0ZXJfZm9ya2V4ZWMoaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKICAqIHJldHVybnMgdGhlIHBpZCBvZiB0aGUgZm9yay9leGVjJ2QgcHJv Y2Vzcywgb3IgLTEgb24gZmFpbHVyZQogICovCiBzdGF0aWMgcGlkX3QKLWJhY2tlbmRfZm9y a2V4ZWMoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKK2JhY2tlbmRfZm9ya2V4ZWMoQ2xp ZW50U29ja2V0ICpjbGllbnRfc29jaywgQ0FDX3N0YXRlIGNhYykKIHsKIAljaGFyCSAgICph dls1XTsKIAlpbnQJCQlhYyA9IDA7CkBAIC00NDMzLDcgKzQ0NTEsNyBAQCBiYWNrZW5kX2Zv cmtleGVjKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpCiAJYXZbYWNdID0gTlVMTDsKIAlB c3NlcnQoYWMgPCBsZW5ndGhvZihhdikpOwogCi0JcmV0dXJuIGludGVybmFsX2ZvcmtleGVj KGFjLCBhdiwgcG9ydCwgTlVMTCk7CisJcmV0dXJuIGludGVybmFsX2ZvcmtleGVjKGFjLCBh diwgY2xpZW50X3NvY2ssIE5VTEwpOwogfQogCiAjaWZuZGVmIFdJTjMyCkBAIC00NDQ1LDcg KzQ0NjMsNyBAQCBiYWNrZW5kX2ZvcmtleGVjKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMp CiAgKiAtIGZvcmsoKTpzLCBhbmQgdGhlbiBleGVjKCk6cyB0aGUgY2hpbGQgcHJvY2Vzcwog ICovCiBzdGF0aWMgcGlkX3QKLWludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICph cmd2W10sIFBvcnQgKnBvcnQsIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcikKK2ludGVybmFs X2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIENsaWVudFNvY2tldCAqY2xpZW50 X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcikKIHsKIAlzdGF0aWMgdW5zaWduZWQg bG9uZyB0bXBCYWNrZW5kRmlsZU51bSA9IDA7CiAJcGlkX3QJCXBpZDsKQEAgLTQ0NjEsNyAr NDQ3OSw3IEBAIGludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIFBv cnQgKnBvcnQsIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcikKIAkgKi8KIAltZW1zZXQoJnBh cmFtLCAwLCBzaXplb2YoQmFja2VuZFBhcmFtZXRlcnMpKTsKIAotCWlmICghc2F2ZV9iYWNr ZW5kX3ZhcmlhYmxlcygmcGFyYW0sIHBvcnQsIHdvcmtlcikpCisJaWYgKCFzYXZlX2JhY2tl bmRfdmFyaWFibGVzKCZwYXJhbSwgY2xpZW50X3NvY2ssIHdvcmtlcikpCiAJCXJldHVybiAt MTsJCQkJLyogbG9nIG1hZGUgYnkgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyAqLwogCiAJLyog Q2FsY3VsYXRlIG5hbWUgZm9yIHRlbXAgZmlsZSAqLwpAQCAtNDc1OSw3ICs0Nzc3LDcgQEAg cmV0cnk6CiB2b2lkCiBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogewotCVBvcnQJICAgKnBvcnQ7CisJQ2xpZW50U29ja2V0ICpjbGllbnRfc29jazsKIAlC YWNrZ3JvdW5kV29ya2VyICp3b3JrZXI7CiAKIAkvKiBJbiBFWEVDX0JBQ0tFTkQgY2FzZSB3 ZSB3aWxsIG5vdCBoYXZlIGluaGVyaXRlZCB0aGVzZSBzZXR0aW5ncyAqLwpAQCAtNDc3NCw3 ICs0NzkyLDcgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAkJZWxvZyhGQVRBTCwgImludmFsaWQgc3VicG9zdG1hc3RlciBpbnZvY2F0aW9uIik7CiAK IAkvKiBSZWFkIGluIHRoZSB2YXJpYWJsZXMgZmlsZSAqLwotCXJlYWRfYmFja2VuZF92YXJp YWJsZXMoYXJndlsyXSwgJnBvcnQsICZ3b3JrZXIpOworCXJlYWRfYmFja2VuZF92YXJpYWJs ZXMoYXJndlsyXSwgJmNsaWVudF9zb2NrLCAmd29ya2VyKTsKIAogCS8qIENsb3NlIHRoZSBw b3N0bWFzdGVyJ3Mgc29ja2V0cyAoYXMgc29vbiBhcyB3ZSBrbm93IHRoZW0pICovCiAJQ2xv c2VQb3N0bWFzdGVyUG9ydHMoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmtsb2ciKSA9PSAwKTsK QEAgLTQ4NzIsMTMgKzQ4OTAsMTQgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAkJICogUEdQUk9DIHNsb3RzLCB3ZSBoYXZlIGFscmVhZHkgaW5pdGlh bGl6ZWQgbGlicHEgYW5kIGFyZSBhYmxlIHRvCiAJCSAqIHJlcG9ydCB0aGUgZXJyb3IgdG8g dGhlIGNsaWVudC4KIAkJICovCi0JCUJhY2tlbmRJbml0aWFsaXplKHBvcnQsIGNhYyk7CisJ CUJhY2tlbmRJbml0aWFsaXplKGNsaWVudF9zb2NrLCBjYWMpOwogCiAJCS8qIFJlc3RvcmUg YmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwogCQlJbml0U2htZW1BY2Nlc3MoVXNl ZFNobWVtU2VnQWRkcik7CiAKIAkJLyogQW5kIHJ1biB0aGUgYmFja2VuZCAqLwotCQlCYWNr ZW5kUnVuKHBvcnQpOwkJLyogZG9lcyBub3QgcmV0dXJuICovCisJCUJhY2tlbmRSdW4oKTsJ CQkvKiBkb2VzIG5vdCByZXR1cm4gKi8KKwogCX0KIAlpZiAoc3RyY21wKGFyZ3ZbMV0sICIt LWZvcmthdXgiKSA9PSAwKQogCXsKQEAgLTU5NTksMjQgKzU5NzgsMjQgQEAgc3RhdGljIHZv aWQgcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoU09DS0VUICpkZXN0LCBJbmhlcml0YWJsZVNv Y2tldCAqc3JjKTsKIC8qIFNhdmUgY3JpdGljYWwgYmFja2VuZCB2YXJpYWJsZXMgaW50byB0 aGUgQmFja2VuZFBhcmFtZXRlcnMgc3RydWN0ICovCiAjaWZuZGVmIFdJTjMyCiBzdGF0aWMg Ym9vbAotc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0s IFBvcnQgKnBvcnQsIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcikKK3NhdmVfYmFja2VuZF92 YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVu dF9zb2NrLCBCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIpCiAjZWxzZQogc3RhdGljIGJvb2wK LXNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0 ICpwb3J0LCBCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIsCitzYXZlX2JhY2tlbmRfdmFyaWFi bGVzKEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29j aywgQmFja2dyb3VuZFdvcmtlciAqd29ya2VyLAogCQkJCQkgICBIQU5ETEUgY2hpbGRQcm9j ZXNzLCBwaWRfdCBjaGlsZFBpZCkKICNlbmRpZgogewotCWlmIChwb3J0KQorCWlmIChjbGll bnRfc29jaykKIAl7Ci0JCW1lbWNweSgmcGFyYW0tPnBvcnQsIHBvcnQsIHNpemVvZihQb3J0 KSk7Ci0JCWlmICghd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KCZwYXJhbS0+cG9ydHNvY2tl dCwgcG9ydC0+c29jaywgY2hpbGRQaWQpKQorCQltZW1jcHkoJnBhcmFtLT5jbGllbnRfc29j aywgY2xpZW50X3NvY2ssIHNpemVvZihDbGllbnRTb2NrZXQpKTsKKwkJaWYgKCF3cml0ZV9p bmhlcml0YWJsZV9zb2NrZXQoJnBhcmFtLT5pbmhfc29jaywgY2xpZW50X3NvY2stPnNvY2ss IGNoaWxkUGlkKSkKIAkJCXJldHVybiBmYWxzZTsKLQkJcGFyYW0tPmhhc19wb3J0ID0gdHJ1 ZTsKKwkJcGFyYW0tPmhhc19jbGllbnRfc29jayA9IHRydWU7CiAJfQogCWVsc2UKIAl7Ci0J CW1lbXNldCgmcGFyYW0tPnBvcnQsIDAsIHNpemVvZihQb3J0KSk7Ci0JCXBhcmFtLT5oYXNf cG9ydCA9IGZhbHNlOworCQltZW1zZXQoJnBhcmFtLT5jbGllbnRfc29jaywgMCwgc2l6ZW9m KENsaWVudFNvY2tldCkpOworCQlwYXJhbS0+aGFzX2NsaWVudF9zb2NrID0gZmFsc2U7CiAJ fQogCiAJaWYgKHdvcmtlcikKQEAgLTYxNDMsNyArNjE2Miw3IEBAIHJlYWRfaW5oZXJpdGFi bGVfc29ja2V0KFNPQ0tFVCAqZGVzdCwgSW5oZXJpdGFibGVTb2NrZXQgKnNyYykKICNlbmRp ZgogCiBzdGF0aWMgdm9pZAotcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgUG9y dCAqKnBvcnQsIEJhY2tncm91bmRXb3JrZXIgKip3b3JrZXIpCityZWFkX2JhY2tlbmRfdmFy aWFibGVzKGNoYXIgKmlkLCBDbGllbnRTb2NrZXQgKipjbGllbnRfc29jaywgQmFja2dyb3Vu ZFdvcmtlciAqKndvcmtlcikKIHsKIAlCYWNrZW5kUGFyYW1ldGVycyBwYXJhbTsKIApAQCAt NjIxMCwyMSArNjIyOSwyMSBAQCByZWFkX2JhY2tlbmRfdmFyaWFibGVzKGNoYXIgKmlkLCBQ b3J0ICoqcG9ydCwgQmFja2dyb3VuZFdvcmtlciAqKndvcmtlcikKIAl9CiAjZW5kaWYKIAot CXJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBwb3J0LCB3b3JrZXIpOworCXJl c3RvcmVfYmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBjbGllbnRfc29jaywgd29ya2VyKTsK IH0KIAogLyogUmVzdG9yZSBjcml0aWNhbCBiYWNrZW5kIHZhcmlhYmxlcyBmcm9tIHRoZSBC YWNrZW5kUGFyYW1ldGVycyBzdHJ1Y3QgKi8KIHN0YXRpYyB2b2lkCi1yZXN0b3JlX2JhY2tl bmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwgUG9ydCAqKnBvcnQsIEJh Y2tncm91bmRXb3JrZXIgKip3b3JrZXIpCityZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKEJh Y2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwgQ2xpZW50U29ja2V0ICoqY2xpZW50X3NvY2ssIEJh Y2tncm91bmRXb3JrZXIgKip3b3JrZXIpCiB7Ci0JaWYgKHBhcmFtLT5oYXNfcG9ydCkKKwlp ZiAocGFyYW0tPmhhc19jbGllbnRfc29jaykKIAl7Ci0JCSpwb3J0ID0gKFBvcnQgKikgTWVt b3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihQb3J0KSk7Ci0JCW1l bWNweSgqcG9ydCwgJnBhcmFtLT5wb3J0LCBzaXplb2YoUG9ydCkpOwotCQlyZWFkX2luaGVy aXRhYmxlX3NvY2tldCgmKCpwb3J0KS0+c29jaywgJnBhcmFtLT5wb3J0c29ja2V0KTsKKwkJ KmNsaWVudF9zb2NrID0gKENsaWVudFNvY2tldCAqKSBNZW1vcnlDb250ZXh0QWxsb2MoVG9w TWVtb3J5Q29udGV4dCwgc2l6ZW9mKENsaWVudFNvY2tldCkpOworCQltZW1jcHkoKmNsaWVu dF9zb2NrLCAmcGFyYW0tPmNsaWVudF9zb2NrLCBzaXplb2YoQ2xpZW50U29ja2V0KSk7CisJ CXJlYWRfaW5oZXJpdGFibGVfc29ja2V0KCYoKmNsaWVudF9zb2NrKS0+c29jaywgJnBhcmFt LT5pbmhfc29jayk7CiAJfQogCWVsc2UKLQkJKnBvcnQgPSBOVUxMOworCQkqY2xpZW50X3Nv Y2sgPSBOVUxMOwogCiAJaWYgKHBhcmFtLT5oYXNfYmd3b3JrZXIpCiAJewpAQCAtNjI5MCw3 ICs2MzA5LDcgQEAgcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVy cyAqcGFyYW0sIFBvcnQgKipwb3J0LCBCYWNrZ3JvdW5kV29ya2UKIAkvKgogCSAqIFdlIG5l ZWQgdG8gcmVzdG9yZSBmZC5jJ3MgY291bnRzIG9mIGV4dGVybmFsbHktb3BlbmVkIEZEczsg dG8gYXZvaWQKIAkgKiBjb25mdXNpb24sIGJlIHN1cmUgdG8gZG8gdGhpcyBhZnRlciByZXN0 b3JpbmcgbWF4X3NhZmVfZmRzLiAgKE5vdGU6Ci0JICogQmFja2VuZEluaXRpYWxpemUgd2ls bCBoYW5kbGUgdGhpcyBmb3IgcG9ydC0+c29jay4pCisJICogQmFja2VuZEluaXRpYWxpemUg d2lsbCBoYW5kbGUgdGhpcyBmb3IgKCpjbGllbnRfc29jayktPnNvY2suKQogCSAqLwogI2lm bmRlZiBXSU4zMgogCWlmIChwb3N0bWFzdGVyX2FsaXZlX2Zkc1swXSA+PSAwKQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jCmluZGV4IDBkYzIxMzJkYWM1Li5mZmU1NTRlZjQzZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9z dGdyZXMuYwpAQCAtNDIxMywxMCArNDIxMyw3IEBAIFBvc3RncmVzTWFpbihjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCiAJLyoKIAkgKiBJZiB0aGUgUG9z dG1hc3RlckNvbnRleHQgaXMgc3RpbGwgYXJvdW5kLCByZWN5Y2xlIHRoZSBzcGFjZTsgd2Ug ZG9uJ3QKLQkgKiBuZWVkIGl0IGFueW1vcmUgYWZ0ZXIgSW5pdFBvc3RncmVzIGNvbXBsZXRl cy4gIE5vdGUgdGhpcyBkb2VzIG5vdCB0cmFzaAotCSAqICpNeVByb2NQb3J0LCBiZWNhdXNl IHRoYXQgc3BhY2UgaXMgYWxsb2NhdGVkIGluIHN0YWNrIC4uLiBlbHNlIHdlJ2QKLQkgKiBu ZWVkIHRvIGNvcHkgdGhlIFBvcnQgZGF0YSBmaXJzdC4gIEFsc28sIHN1YnNpZGlhcnkgZGF0 YSBzdWNoIGFzIHRoZQotCSAqIHVzZXJuYW1lIGlzbid0IGxvc3QgZWl0aGVyOyBzZWUgUHJv Y2Vzc1N0YXJ0dXBQYWNrZXQoKS4KKwkgKiBuZWVkIGl0IGFueW1vcmUgYWZ0ZXIgSW5pdFBv c3RncmVzIGNvbXBsZXRlcy4KIAkgKi8KIAlpZiAoUG9zdG1hc3RlckNvbnRleHQpCiAJewpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRl L2xpYnBxL2xpYnBxLWJlLmgKaW5kZXggMzM1Y2IyZGU0NGEuLjNmODU1MGViMjVlIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRl L2xpYnBxL2xpYnBxLWJlLmgKQEAgLTExMCwxMiArMTEwLDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg Q2xpZW50Q29ubmVjdGlvbkluZm8KIH0gQ2xpZW50Q29ubmVjdGlvbkluZm87CiAKIC8qCi0g KiBUaGlzIGlzIHVzZWQgYnkgdGhlIHBvc3RtYXN0ZXIgaW4gaXRzIGNvbW11bmljYXRpb24g d2l0aCBmcm9udGVuZHMuICBJdAotICogY29udGFpbnMgYWxsIHN0YXRlIGluZm9ybWF0aW9u IG5lZWRlZCBkdXJpbmcgdGhpcyBjb21tdW5pY2F0aW9uIGJlZm9yZSB0aGUKLSAqIGJhY2tl bmQgaXMgcnVuLiAgVGhlIFBvcnQgc3RydWN0dXJlIGlzIGtlcHQgaW4gbWFsbG9jJ2QgbWVt b3J5IGFuZCBpcwotICogc3RpbGwgYXZhaWxhYmxlIHdoZW4gYSBiYWNrZW5kIGlzIHJ1bm5p bmcgKHNlZSBNeVByb2NQb3J0KS4gIFRoZSBkYXRhCi0gKiBpdCBwb2ludHMgdG8gbXVzdCBh bHNvIGJlIG1hbGxvYydkLCBvciBlbHNlIHBhbGxvYydkIGluIFRvcE1lbW9yeUNvbnRleHQs Ci0gKiBzbyB0aGF0IGl0IHN1cnZpdmVzIGludG8gUG9zdGdyZXNNYWluIGV4ZWN1dGlvbiEK KyAqIFRoZSBQb3J0IHN0cnVjdHVyZSBob2xkcyBzdGF0ZSBpbmZvcm1hdGlvbiBhYm91dCBh IGNsaWVudCBjb25uZWN0aW9uIGluIGEKKyAqIGJhY2tlbmQgcHJvY2Vzcy4gIEl0IGlzIGF2 YWlsYWJsZSBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlIE15UHJvY1BvcnQuICBUaGUKKyAqIHN0 cnVjdCBhbmQgYWxsIHRoZSBkYXRhIGl0IHBvaW50cyBhcmUga2VwdCBpbiBUb3BNZW1vcnlD b250ZXh0LgogICoKICAqIHJlbW90ZV9ob3N0bmFtZSBpcyBzZXQgaWYgd2UgZGlkIGEgc3Vj Y2Vzc2Z1bCByZXZlcnNlIGxvb2t1cCBvZiB0aGUKICAqIGNsaWVudCdzIElQIGFkZHJlc3Mg ZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuCkBAIC0yMTcsNiArMjE0LDE3IEBAIHR5cGVkZWYg c3RydWN0IFBvcnQKICNlbmRpZgogfSBQb3J0OwogCisvKgorICogQ2xpZW50U29ja2V0IGhv bGRzIGEgc29ja2V0IGZvciBhbiBhY2NlcHRlZCBjb25uZWN0aW9uLCBhbG9uZyB3aXRoIHRo ZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVuZHBvaW50cy4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgQ2xpZW50U29ja2V0Cit7CisJcGdzb2NrZXQJc29jazsJCQkvKiBGaWxlIGRlc2Ny aXB0b3IgKi8KKwlTb2NrQWRkcglsYWRkcjsJCQkvKiBsb2NhbCBhZGRyIChwb3N0bWFzdGVy KSAqLworCVNvY2tBZGRyCXJhZGRyOwkJCS8qIHJlbW90ZSBhZGRyIChjbGllbnQpICovCit9 IENsaWVudFNvY2tldDsKKwogI2lmZGVmIFVTRV9TU0wKIC8qCiAgKglIYXJkY29kZWQgREgg cGFyYW1ldGVycywgdXNlZCBpbiBlcGhlbWVyYWwgREgga2V5aW5nLiAgKFNlZSBhbHNvCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS5oIGIvc3JjL2luY2x1ZGUvbGli cHEvbGlicHEuaAppbmRleCBhNjEwNGQ4Y2QwMi4uMTY5MTk0OTkzNjggMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmgKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvbGli cHEuaApAQCAtNjQsMTEgKzY0LDExIEBAIGV4dGVybiBQR0RMTElNUE9SVCBXYWl0RXZlbnRT ZXQgKkZlQmVXYWl0U2V0OwogI2RlZmluZSBGZUJlV2FpdFNldExhdGNoUG9zIDEKICNkZWZp bmUgRmVCZVdhaXRTZXRORXZlbnRzIDMKIAotZXh0ZXJuIGludAlTdHJlYW1TZXJ2ZXJQb3J0 KGludCBmYW1pbHksIGNvbnN0IGNoYXIgKmhvc3ROYW1lLAorZXh0ZXJuIGludAlMaXN0ZW5T ZXJ2ZXJQb3J0KGludCBmYW1pbHksIGNvbnN0IGNoYXIgKmhvc3ROYW1lLAogCQkJCQkJCSB1 bnNpZ25lZCBzaG9ydCBwb3J0TnVtYmVyLCBjb25zdCBjaGFyICp1bml4U29ja2V0RGlyLAog CQkJCQkJCSBwZ3NvY2tldCBMaXN0ZW5Tb2NrZXRbXSwgaW50ICpOdW1MaXN0ZW5Tb2NrZXRz LCBpbnQgTWF4TGlzdGVuKTsKLWV4dGVybiBpbnQJU3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tl dCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQpOwotZXh0ZXJuIHZvaWQgU3RyZWFtQ2xvc2UocGdz b2NrZXQgc29jayk7CitleHRlcm4gaW50CUFjY2VwdENsaWVudENvbm5lY3Rpb24ocGdzb2Nr ZXQgc2VydmVyX2ZkLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKK2V4dGVybiBQb3J0 ICpJbml0Q2xpZW50Q29ubmVjdGlvbihDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKIGV4 dGVybiB2b2lkIFRvdWNoU29ja2V0RmlsZXModm9pZCk7CiBleHRlcm4gdm9pZCBSZW1vdmVT b2NrZXRGaWxlcyh2b2lkKTsKIGV4dGVybiB2b2lkIHBxX2luaXQodm9pZCk7CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDBhMzI0YWE0ZTdlLi45MDIxN2M0OTM5YSAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM4Miw2ICszODIsNyBAQCBDbGllbnRD ZXJ0TW9kZQogQ2xpZW50Q2VydE5hbWUKIENsaWVudENvbm5lY3Rpb25JbmZvCiBDbGllbnRE YXRhCitDbGllbnRTb2NrZXQKIENsb25lUHRyVHlwZQogQ2xvc2VQb3J0YWxTdG10CiBDbG9z ZVB0clR5cGUKLS0gCjIuMzkuMgoK --------------oZdu1r1d4zA157Kzh0ND2Ywg Content-Type: text/x-patch; charset=UTF-8; name="v5-0004-Extract-registration-of-Win32-deadchild-callback-.patch" Content-Disposition: attachment; filename*0="v5-0004-Extract-registration-of-Win32-deadchild-callback-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlNjdkNTZjYTg3ZjMwMGQyNGNiMWI1NmNmNjdhOTA2M2E0OTZiNzBlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgOCBEZWMgMjAyMyAxMDozMTo0OSArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjUgNC84XSBFeHRyYWN0IHJlZ2lzdHJhdGlvbiBvZiBXaW4zMiBk ZWFkY2hpbGQgY2FsbGJhY2sgdG8KIHNlcGFyYXRlIGZ1bmN0aW9uCgpUaGUgbmV4dCBjb21t aXRzIHdpbGwgbW92ZSB0aGUgaW50ZXJuYWxfZm9ya2V4ZWMoKSBmdW5jdGlvbiB0bwpkaWZm ZXJlbnQgc291cmNlIGZpbGUsIGJ1dCBpdCBtYWtlcyBzZW5zZSB0byBrZWVwIGFsbCB0aGUg Y29kZSByZWxhdGVkCnRvIHRoZSB3aW4zMiB3YWl0cGlkKCkgZW11bGF0aW9uIGluIHBvc3Rt YXN0ZXIuYy4gU3BsaXQgaXQgb2ZmIHRvIGEKc2VwYXJhdGUgZnVuY3Rpb24gbm93LCB0byBt YWtlIHRoZSBjb21taXQgdGhhdCBtb3ZlcwppbnRlcm5hbF9mb3JrZXhlYygpIG1vcmUgbWVj aGFuaWNhbC4KLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyB8IDQ5 ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzAgaW5z ZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYwppbmRleCAyNTdhMWJlZTMzMS4uNDAyMmMzYzc1MGEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00NzEsNiArNDcxLDcgQEAgc3RhdGljIHZvaWQg SW5pdFBvc3RtYXN0ZXJEZWF0aFdhdGNoSGFuZGxlKHZvaWQpOwogCiBzdGF0aWMgcGlkX3Qg d2FpdHBpZChwaWRfdCBwaWQsIGludCAqZXhpdHN0YXR1cywgaW50IG9wdGlvbnMpOwogc3Rh dGljIHZvaWQgV0lOQVBJIHBnd2luMzJfZGVhZGNoaWxkX2NhbGxiYWNrKFBWT0lEIGxwUGFy YW1ldGVyLCBCT09MRUFOIFRpbWVyT3JXYWl0RmlyZWQpOworc3RhdGljIHZvaWQgcGd3aW4z Ml9yZWdpc3Rlcl9kZWFkY2hpbGRfY2FsbGJhY2soSEFORExFIHByb2NIYW5kbGUsIERXT1JE IHByb2NJZCk7CiAKIHN0YXRpYyBIQU5ETEUgd2luMzJDaGlsZFF1ZXVlOwogCkBAIC00NzM1 LDI2ICs0NzM2LDEwIEBAIHJldHJ5OgogCQlyZXR1cm4gLTE7CiAJfQogCi0JLyoKLQkgKiBR dWV1ZSBhIHdhaXRlciB0byBzaWduYWwgd2hlbiB0aGlzIGNoaWxkIGRpZXMuIFRoZSB3YWl0 IHdpbGwgYmUgaGFuZGxlZAotCSAqIGF1dG9tYXRpY2FsbHkgYnkgYW4gb3BlcmF0aW5nIHN5 c3RlbSB0aHJlYWQgcG9vbC4gIFRoZSBtZW1vcnkgd2lsbCBiZQotCSAqIGZyZWVkIGJ5IGEg bGF0ZXIgY2FsbCB0byB3YWl0cGlkKCkuCi0JICovCi0JY2hpbGRpbmZvID0gcGFsbG9jKHNp emVvZih3aW4zMl9kZWFkY2hpbGRfd2FpdGluZm8pKTsKLQljaGlsZGluZm8tPnByb2NIYW5k bGUgPSBwaS5oUHJvY2VzczsKLQljaGlsZGluZm8tPnByb2NJZCA9IHBpLmR3UHJvY2Vzc0lk OwotCi0JaWYgKCFSZWdpc3RlcldhaXRGb3JTaW5nbGVPYmplY3QoJmNoaWxkaW5mby0+d2Fp dEhhbmRsZSwKLQkJCQkJCQkJCSBwaS5oUHJvY2VzcywKLQkJCQkJCQkJCSBwZ3dpbjMyX2Rl YWRjaGlsZF9jYWxsYmFjaywKLQkJCQkJCQkJCSBjaGlsZGluZm8sCi0JCQkJCQkJCQkgSU5G SU5JVEUsCi0JCQkJCQkJCQkgV1RfRVhFQ1VURU9OTFlPTkNFIHwgV1RfRVhFQ1VURUlOV0FJ VFRIUkVBRCkpCi0JCWVyZXBvcnQoRkFUQUwsCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgiY291 bGQgbm90IHJlZ2lzdGVyIHByb2Nlc3MgZm9yIHdhaXQ6IGVycm9yIGNvZGUgJWx1IiwKLQkJ CQkJCQkJIEdldExhc3RFcnJvcigpKSkpOworCS8qIFNldCB1cCBub3RpZmljYXRpb24gd2hl biB0aGUgY2hpbGQgcHJvY2VzcyBkaWVzICovCisJcGd3aW4zMl9yZWdpc3Rlcl9kZWFkY2hp bGRfY2FsbGJhY2socGkuaFByb2Nlc3MsIHBpLmR3UHJvY2Vzc0lkKTsKIAotCS8qIERvbid0 IGNsb3NlIHBpLmhQcm9jZXNzIGhlcmUgLSB3YWl0cGlkKCkgbmVlZHMgYWNjZXNzIHRvIGl0 ICovCisJLyogRG9uJ3QgY2xvc2UgcGkuaFByb2Nlc3MsIGl0J3Mgb3duZWQgYnkgdGhlIGRl YWRjaGlsZCBjYWxsYmFjayBub3cgKi8KIAogCUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwog CkBAIC02NDQxLDYgKzY0MjYsMzIgQEAgcGd3aW4zMl9kZWFkY2hpbGRfY2FsbGJhY2soUFZP SUQgbHBQYXJhbWV0ZXIsIEJPT0xFQU4gVGltZXJPcldhaXRGaXJlZCkKIAkvKiBRdWV1ZSBT SUdDSExEIHNpZ25hbC4gKi8KIAlwZ19xdWV1ZV9zaWduYWwoU0lHQ0hMRCk7CiB9CisKKy8q CisgKiBRdWV1ZSBhIHdhaXRlciB0byBzaWduYWwgd2hlbiB0aGlzIGNoaWxkIGRpZXMuICBU aGUgd2FpdCB3aWxsIGJlIGhhbmRsZWQKKyAqIGF1dG9tYXRpY2FsbHkgYnkgYW4gb3BlcmF0 aW5nIHN5c3RlbSB0aHJlYWQgcG9vbC4gIFRoZSBtZW1vcnkgYW5kIHRoZQorICogcHJvY2Vz cyBoYW5kbGUgd2lsbCBiZSBmcmVlZCBieSBhIGxhdGVyIGNhbGwgdG8gd2FpdHBpZCgpLgor ICovCitzdGF0aWMgdm9pZAorcGd3aW4zMl9yZWdpc3Rlcl9kZWFkY2hpbGRfY2FsbGJhY2so SEFORExFIHByb2NIYW5kbGUsIERXT1JEIHByb2NJZCkKK3sKKwl3aW4zMl9kZWFkY2hpbGRf d2FpdGluZm8gKmNoaWxkaW5mbzsKKworCWNoaWxkaW5mbyA9IHBhbGxvYyhzaXplb2Yod2lu MzJfZGVhZGNoaWxkX3dhaXRpbmZvKSk7CisJY2hpbGRpbmZvLT5wcm9jSGFuZGxlID0gcHJv Y0hhbmRsZTsKKwljaGlsZGluZm8tPnByb2NJZCA9IHByb2NJZDsKKworCWlmICghUmVnaXN0 ZXJXYWl0Rm9yU2luZ2xlT2JqZWN0KCZjaGlsZGluZm8tPndhaXRIYW5kbGUsCisJCQkJCQkJ CQkgcHJvY0hhbmRsZSwKKwkJCQkJCQkJCSBwZ3dpbjMyX2RlYWRjaGlsZF9jYWxsYmFjaywK KwkJCQkJCQkJCSBjaGlsZGluZm8sCisJCQkJCQkJCQkgSU5GSU5JVEUsCisJCQkJCQkJCQkg V1RfRVhFQ1VURU9OTFlPTkNFIHwgV1RfRVhFQ1VURUlOV0FJVFRIUkVBRCkpCisJCWVyZXBv cnQoRkFUQUwsCisJCQkJKGVycm1zZ19pbnRlcm5hbCgiY291bGQgbm90IHJlZ2lzdGVyIHBy b2Nlc3MgZm9yIHdhaXQ6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCQkJIEdldExhc3RFcnJv cigpKSkpOworfQorCiAjZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAogLyoKLS0gCjIuMzku MgoK --------------oZdu1r1d4zA157Kzh0ND2Ywg Content-Type: text/x-patch; charset=UTF-8; name="v5-0005-Move-some-functions-from-postmaster.c-to-new-sour.patch" Content-Disposition: attachment; filename*0="v5-0005-Move-some-functions-from-postmaster.c-to-new-sour.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4NzQxNjYyZDhlZGNjZjk2MmE2ZDUxMDczZmExOGFjOGQxNjkzODFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgOCBEZWMgMjAyMyAxMDozMTo1NyArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjUgNS84XSBNb3ZlIHNvbWUgZnVuY3Rpb25zIGZyb20gcG9zdG1h c3Rlci5jIHRvIG5ldyBzb3VyY2UKIGZpbGUKClRoaXMganVzdCBtb3ZlcyB0aGUgZnVuY3Rp b25zLCB3aXRoIG5vIG90aGVyIGNoYW5nZXMsIHRvIG1ha2UgdGhlIG5leHQKY29tbWl0cyBz bWFsbGVyIGFuZCBlYXNpZXIgdG8gcmV2aWV3LiBUaGUgbW92ZWQgZnVuY3Rpb25zIGFyZSBy ZWxhdGVkCnRvIGZvcmtpbmcgYW5kIGV4ZWNpbmcgYSBuZXcgYmFja2VuZCBpbiBFWEVDX0JB Q0tFTkQgbW9kZS4KCk9uZSBub3Rld29ydGh5IGNoYW5nZSBpcyB0aGF0IHRoZSBjb2RlIHRv IHJlZ2lzdGVyIHdpbjMyIGRlYWRjaGlsZApjYWxsYmFjayBpcyBleHRyYWN0ZWQgdG8gYSBz ZXBhcmF0ZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkCmZyb20gdGhlIG5l dyBmaWxlIHdpdGhvdXQgZXhwb3NpbmcgcGd3aW4zMl9kZWFkY2hpbGRfY2FsbGJhY2soKS4K LS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jICAgIHwgODEzICsr KysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWls ZCAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5j ICAgICAgICB8IDc1OSArLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgfCAgIDEgLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9wb3N0bWFzdGVyLmggICAgICAgIHwgICA1ICsKIDYgZmlsZXMgY2hhbmdlZCwgODMwIGlu c2VydGlvbnMoKyksIDc1MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMv YmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9N YWtlZmlsZQppbmRleCAwNDc0NDhiMzRlYi4uYzc1YzU0MDE0M2EgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9NYWtlZmlsZQpAQCAtMjAsNiArMjAsNyBAQCBPQkpTID0gXAogCWNoZWNrcG9pbnRl ci5vIFwKIAlmb3JrX3Byb2Nlc3MubyBcCiAJaW50ZXJydXB0Lm8gXAorCWxhdW5jaF9iYWNr ZW5kLm8gXAogCXBnYXJjaC5vIFwKIAlwb3N0bWFzdGVyLm8gXAogCXN0YXJ0dXAubyBcCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY1ZjE0MWE5ZjVhCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCkBAIC0wLDAgKzEs ODEzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBsYXVuY2hfYmFja2VuZC5j CisgKgkgIEZ1bmN0aW9ucyBmb3IgbGF1bmNoaW5nIGJhY2tlbmRzIGFuZCBvdGhlciBwb3N0 bWFzdGVyIGNoaWxkCisgKgkgIHByb2Nlc3Nlcy4KKyAqCisgKiBPbiBVbml4IHN5c3RlbXMs IGEgbmV3IGNoaWxkIHByb2Nlc3MgaXMgbGF1bmNoZWQgd2l0aCBmb3JrKCkuICBJdCBpbmhl cml0cworICogYWxsIHRoZSBnbG9iYWwgdmFyaWFibGVzIGFuZCBkYXRhIHN0cnVjdHVyZXMg dGhhdCBoYWQgYmVlbiBpbml0aWFsaXplZCBpbgorICogdGhlIHBvc3RtYXN0ZXIuICBBZnRl ciBmb3JraW5nLCB0aGUgY2hpbGQgcHJvY2VzcyBjbG9zZXMgdGhlIGZpbGUKKyAqIGRlc2Ny aXB0b3JzIHRoYXQgYXJlIG5vdCBuZWVkZWQgaW4gdGhlIGNoaWxkIHByb2Nlc3MsIGFuZCBz ZXRzIHVwIHRoZQorICogbWVjaGFuaXNtIHRvIGRldGVjdCBkZWF0aCBvZiB0aGUgcGFyZW50 IHBvc3RtYXN0ZXIgcHJvY2VzcywgZXRjLiAgQWZ0ZXIKKyAqIHRoYXQsIGl0IGNhbGxzIHRo ZSByaWdodCBNYWluIGZ1bmN0aW9uIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiBjaGlsZAor ICogcHJvY2Vzcy4KKyAqCisgKiBJbiBFWEVDX0JBQ0tFTkQgbW9kZSwgd2hpY2ggaXMgdXNl ZCBvbiBXaW5kb3dzIGJ1dCBjYW4gYmUgZW5hYmxlZCBvbiBvdGhlcgorICogcGxhdGZvcm1z IGZvciB0ZXN0aW5nLCB0aGUgY2hpbGQgcHJvY2VzcyBpcyBsYXVuY2hlZCBieSBmb3JrKCkg KyBleGVjKCkgKG9yCisgKiBDcmVhdGVQcm9jZXNzKCkgb24gV2luZG93cykuICBJdCBkb2Vz IG5vdCBpbmhlcml0IHRoZSBzdGF0ZSBmcm9tIHRoZQorICogcG9zdG1hc3Rlciwgc28gaXQg bmVlZHMgdG8gcmUtYXR0YWNoIHRvIHRoZSBzaGFyZWQgbWVtb3J5LCByZS1pbml0aWFsaXpl CisgKiBnbG9iYWwgdmFyaWFibGVzLCByZS1sb2FkIHRoZSBjb25maWcgZmlsZSBldGMuCisg KgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgor ICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hf YmFja2VuZC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImFjY2Vz cy94bG9nLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfdXRpbHMuaCIKKyNpbmNsdWRlICJs aWJwcS9saWJwcS1iZS5oIgorI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCisjaW5jbHVk ZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMvcXVlcnlqdW1ibGUuaCIKKyNpbmNs dWRlICJwb3J0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgiCisjaW5j bHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9i Z3dvcmtlcl9pbnRlcm5hbHMuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3JpdGVyLmgi CisjaW5jbHVkZSAicG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaCIKKyNpbmNsdWRlICJwb3N0 bWFzdGVyL3BnYXJjaC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIgor I2luY2x1ZGUgInBvc3RtYXN0ZXIvc3RhcnR1cC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIv c3lzbG9nZ2VyLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci93YWx3cml0ZXIuaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZmQu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2ht ZW0uaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Btc2lnbmFsLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9wcm9jLmgiCisjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZGF0ZXRpbWUuaCIKKyNpbmNsdWRlICJ1 dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorCisjaW5jbHVkZSAi dXRpbHMvdGltZXN0YW1wLmgiCisKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKKyNpbmNsdWRlICJz dG9yYWdlL3NwaW4uaCIKKyNlbmRpZgorCisKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKKworLyog VHlwZSBmb3IgYSBzb2NrZXQgdGhhdCBjYW4gYmUgaW5oZXJpdGVkIHRvIGEgY2xpZW50IHBy b2Nlc3MgKi8KKyNpZmRlZiBXSU4zMgordHlwZWRlZiBzdHJ1Y3QKK3sKKwlTT0NLRVQJCW9y aWdzb2NrZXQ7CQkvKiBPcmlnaW5hbCBzb2NrZXQgdmFsdWUsIG9yIFBHSU5WQUxJRF9TT0NL RVQKKwkJCQkJCQkJICogaWYgbm90IGEgc29ja2V0ICovCisJV1NBUFJPVE9DT0xfSU5GTyB3 c2FpbmZvOworfSBJbmhlcml0YWJsZVNvY2tldDsKKyNlbHNlCit0eXBlZGVmIGludCBJbmhl cml0YWJsZVNvY2tldDsKKyNlbmRpZgorCisvKgorICogU3RydWN0dXJlIGNvbnRhaW5zIGFs bCB2YXJpYWJsZXMgcGFzc2VkIHRvIGV4ZWM6ZWQgYmFja2VuZHMKKyAqLwordHlwZWRlZiBz dHJ1Y3QKK3sKKwlib29sCQloYXNfY2xpZW50X3NvY2s7CisJQ2xpZW50U29ja2V0IGNsaWVu dF9zb2NrOworCUluaGVyaXRhYmxlU29ja2V0IGluaF9zb2NrOworCisJYm9vbAkJaGFzX2Jn d29ya2VyOworCUJhY2tncm91bmRXb3JrZXIgYmd3b3JrZXI7CisKKwljaGFyCQlEYXRhRGly W01BWFBHUEFUSF07CisJaW50MzIJCU15Q2FuY2VsS2V5OworCWludAkJCU15UE1DaGlsZFNs b3Q7CisjaWZuZGVmIFdJTjMyCisJdW5zaWduZWQgbG9uZyBVc2VkU2htZW1TZWdJRDsKKyNl bHNlCisJdm9pZAkgICAqU2htZW1Qcm90ZWN0aXZlUmVnaW9uOworCUhBTkRMRQkJVXNlZFNo bWVtU2VnSUQ7CisjZW5kaWYKKwl2b2lkCSAgICpVc2VkU2htZW1TZWdBZGRyOworCXNsb2Nr X3QgICAgKlNobWVtTG9jazsKKwlzdHJ1Y3QgYmtlbmQgKlNobWVtQmFja2VuZEFycmF5Owor I2lmbmRlZiBIQVZFX1NQSU5MT0NLUworCVBHU2VtYXBob3JlICpTcGlubG9ja1NlbWFBcnJh eTsKKyNlbmRpZgorCWludAkJCU5hbWVkTFdMb2NrVHJhbmNoZVJlcXVlc3RzOworCU5hbWVk TFdMb2NrVHJhbmNoZSAqTmFtZWRMV0xvY2tUcmFuY2hlQXJyYXk7CisJTFdMb2NrUGFkZGVk ICpNYWluTFdMb2NrQXJyYXk7CisJc2xvY2tfdCAgICAqUHJvY1N0cnVjdExvY2s7CisJUFJP Q19IRFIgICAqUHJvY0dsb2JhbDsKKwlQR1BST0MJICAgKkF1eGlsaWFyeVByb2NzOworCVBH UFJPQwkgICAqUHJlcGFyZWRYYWN0UHJvY3M7CisJUE1TaWduYWxEYXRhICpQTVNpZ25hbFN0 YXRlOworCXBpZF90CQlQb3N0bWFzdGVyUGlkOworCVRpbWVzdGFtcFR6IFBnU3RhcnRUaW1l OworCVRpbWVzdGFtcFR6IFBnUmVsb2FkVGltZTsKKwlwZ190aW1lX3QJZmlyc3Rfc3lzbG9n Z2VyX2ZpbGVfdGltZTsKKwlib29sCQlyZWRpcmVjdGlvbl9kb25lOworCWJvb2wJCUlzQmlu YXJ5VXBncmFkZTsKKwlib29sCQlxdWVyeV9pZF9lbmFibGVkOworCWludAkJCW1heF9zYWZl X2ZkczsKKwlpbnQJCQlNYXhCYWNrZW5kczsKKyNpZmRlZiBXSU4zMgorCUhBTkRMRQkJUG9z dG1hc3RlckhhbmRsZTsKKwlIQU5ETEUJCWluaXRpYWxfc2lnbmFsX3BpcGU7CisJSEFORExF CQlzeXNsb2dQaXBlWzJdOworI2Vsc2UKKwlpbnQJCQlwb3N0bWFzdGVyX2FsaXZlX2Zkc1sy XTsKKwlpbnQJCQlzeXNsb2dQaXBlWzJdOworI2VuZGlmCisJY2hhcgkJbXlfZXhlY19wYXRo W01BWFBHUEFUSF07CisJY2hhcgkJcGtnbGliX3BhdGhbTUFYUEdQQVRIXTsKK30gQmFja2Vu ZFBhcmFtZXRlcnM7CisKKyNkZWZpbmUgU2l6ZU9mQmFja2VuZFBhcmFtZXRlcnMoc3RhcnR1 cF9kYXRhX2xlbikgKG9mZnNldG9mKEJhY2tlbmRQYXJhbWV0ZXJzLCBzdGFydHVwX2RhdGEp ICsgc3RhcnR1cF9kYXRhX2xlbikKKwordm9pZAkJcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhj aGFyICppZCwgQ2xpZW50U29ja2V0ICoqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIg Kip3b3JrZXIpOworc3RhdGljIHZvaWQgcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNr ZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqKmNsaWVudF9zb2NrLCBCYWNr Z3JvdW5kV29ya2VyICoqd29ya2VyKTsKKworI2lmbmRlZiBXSU4zMgorc3RhdGljIGJvb2wg c2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVu dFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcik7CisjZWxz ZQorc3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVy cyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIg KndvcmtlciwKKwkJCQkJCQkJICAgSEFORExFIGNoaWxkUHJvY2VzcywgcGlkX3QgY2hpbGRQ aWQpOworI2VuZGlmCisKK3BpZF90CQlpbnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJnYywgY2hh ciAqYXJndltdLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29ya2Vy ICp3b3JrZXIpOworCisjaWZuZGVmIFdJTjMyCisKKy8qCisgKiBpbnRlcm5hbF9mb3JrZXhl YyBub24td2luMzIgaW1wbGVtZW50YXRpb24KKyAqCisgKiAtIHdyaXRlcyBvdXQgYmFja2Vu ZCB2YXJpYWJsZXMgdG8gdGhlIHBhcmFtZXRlciBmaWxlCisgKiAtIGZvcmsoKTpzLCBhbmQg dGhlbiBleGVjKCk6cyB0aGUgY2hpbGQgcHJvY2VzcworICovCitwaWRfdAoraW50ZXJuYWxf Zm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgQ2xpZW50U29ja2V0ICpjbGllbnRf c29jaywgQmFja2dyb3VuZFdvcmtlciAqd29ya2VyKQoreworCXN0YXRpYyB1bnNpZ25lZCBs b25nIHRtcEJhY2tlbmRGaWxlTnVtID0gMDsKKwlwaWRfdAkJcGlkOworCWNoYXIJCXRtcGZp bGVuYW1lW01BWFBHUEFUSF07CisJQmFja2VuZFBhcmFtZXRlcnMgcGFyYW07CisJRklMRQkg ICAqZnA7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBwYWRkaW5nIGJ5dGVzIGFyZSBpbml0aWFs aXplZCwgdG8gcHJldmVudCBWYWxncmluZCBmcm9tCisJICogY29tcGxhaW5pbmcgYWJvdXQg d3JpdGluZyB1bmluaXRpYWxpemVkIGJ5dGVzIHRvIHRoZSBmaWxlLiAgVGhpcyBpc24ndAor CSAqIHBlcmZvcm1hbmNlIGNyaXRpY2FsLCBhbmQgdGhlIHdpbjMyIGltcGxlbWVudGF0aW9u IGluaXRpYWxpemVzIHRoZQorCSAqIHBhZGRpbmcgYnl0ZXMgdG8gemVyb3MsIHNvIGRvIGl0 IGV2ZW4gd2hlbiBub3QgdXNpbmcgVmFsZ3JpbmQuCisJICovCisJbWVtc2V0KCZwYXJhbSwg MCwgc2l6ZW9mKEJhY2tlbmRQYXJhbWV0ZXJzKSk7CisKKwlpZiAoIXNhdmVfYmFja2VuZF92 YXJpYWJsZXMoJnBhcmFtLCBjbGllbnRfc29jaywgd29ya2VyKSkKKwkJcmV0dXJuIC0xOwkJ CQkvKiBsb2cgbWFkZSBieSBzYXZlX2JhY2tlbmRfdmFyaWFibGVzICovCisKKwkvKiBDYWxj dWxhdGUgbmFtZSBmb3IgdGVtcCBmaWxlICovCisJc25wcmludGYodG1wZmlsZW5hbWUsIE1B WFBHUEFUSCwgIiVzLyVzLmJhY2tlbmRfdmFyLiVkLiVsdSIsCisJCQkgUEdfVEVNUF9GSUxF U19ESVIsIFBHX1RFTVBfRklMRV9QUkVGSVgsCisJCQkgTXlQcm9jUGlkLCArK3RtcEJhY2tl bmRGaWxlTnVtKTsKKworCS8qIE9wZW4gZmlsZSAqLworCWZwID0gQWxsb2NhdGVGaWxlKHRt cGZpbGVuYW1lLCBQR19CSU5BUllfVyk7CisJaWYgKCFmcCkKKwl7CisJCS8qCisJCSAqIEFz IGluIE9wZW5UZW1wb3JhcnlGaWxlSW5UYWJsZXNwYWNlLCB0cnkgdG8gbWFrZSB0aGUgdGVt cC1maWxlCisJCSAqIGRpcmVjdG9yeSwgaWdub3JpbmcgZXJyb3JzLgorCQkgKi8KKwkJKHZv aWQpIE1ha2VQR0RpcmVjdG9yeShQR19URU1QX0ZJTEVTX0RJUik7CisKKwkJZnAgPSBBbGxv Y2F0ZUZpbGUodG1wZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFmcCkKKwkJewor CQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJ CQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQkJ dG1wZmlsZW5hbWUpKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAoZndyaXRl KCZwYXJhbSwgc2l6ZW9mKHBhcmFtKSwgMSwgZnApICE9IDEpCisJeworCQllcmVwb3J0KExP RywKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3Vs ZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCI6ICVtIiwgdG1wZmlsZW5hbWUpKSk7CisJCUZy ZWVGaWxlKGZwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFJlbGVhc2UgZmlsZSAqLwor CWlmIChGcmVlRmlsZShmcCkpCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgdG8gZmls ZSBcIiVzXCI6ICVtIiwgdG1wZmlsZW5hbWUpKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkv KiBNYWtlIHN1cmUgY2FsbGVyIHNldCB1cCBhcmd2IHByb3Blcmx5ICovCisJQXNzZXJ0KGFy Z2MgPj0gMyk7CisJQXNzZXJ0KGFyZ3ZbYXJnY10gPT0gTlVMTCk7CisJQXNzZXJ0KHN0cm5j bXAoYXJndlsxXSwgIi0tZm9yayIsIDYpID09IDApOworCUFzc2VydChhcmd2WzJdID09IE5V TEwpOworCisJLyogSW5zZXJ0IHRlbXAgZmlsZSBuYW1lIGFmdGVyIC0tZm9yayBhcmd1bWVu dCAqLworCWFyZ3ZbMl0gPSB0bXBmaWxlbmFtZTsKKworCS8qIEZpcmUgb2ZmIGV4ZWN2IGlu IGNoaWxkICovCisJaWYgKChwaWQgPSBmb3JrX3Byb2Nlc3MoKSkgPT0gMCkKKwl7CisJCWlm IChleGVjdihwb3N0Z3Jlc19leGVjX3BhdGgsIGFyZ3YpIDwgMCkKKwkJeworCQkJZXJlcG9y dChMT0csCisJCQkJCShlcnJtc2coImNvdWxkIG5vdCBleGVjdXRlIHNlcnZlciBwcm9jZXNz IFwiJXNcIjogJW0iLAorCQkJCQkJCXBvc3RncmVzX2V4ZWNfcGF0aCkpKTsKKwkJCS8qIFdl J3JlIGFscmVhZHkgaW4gdGhlIGNoaWxkIHByb2Nlc3MgaGVyZSwgY2FuJ3QgcmV0dXJuICov CisJCQlleGl0KDEpOworCQl9CisJfQorCisJcmV0dXJuIHBpZDsJCQkJCS8qIFBhcmVudCBy ZXR1cm5zIHBpZCwgb3IgLTEgb24gZm9yayBmYWlsdXJlICovCit9CisjZWxzZQkJCQkJCQkv KiBXSU4zMiAqLworCisvKgorICogaW50ZXJuYWxfZm9ya2V4ZWMgd2luMzIgaW1wbGVtZW50 YXRpb24KKyAqCisgKiAtIHN0YXJ0cyBiYWNrZW5kIHVzaW5nIENyZWF0ZVByb2Nlc3MoKSwg aW4gc3VzcGVuZGVkIHN0YXRlCisgKiAtIHdyaXRlcyBvdXQgYmFja2VuZCB2YXJpYWJsZXMg dG8gdGhlIHBhcmFtZXRlciBmaWxlCisgKgktIGR1cmluZyB0aGlzLCBkdXBsaWNhdGVzIGhh bmRsZXMgYW5kIHNvY2tldHMgcmVxdWlyZWQgZm9yCisgKgkgIGluaGVyaXRhbmNlIGludG8g dGhlIG5ldyBwcm9jZXNzCisgKiAtIHJlc3VtZXMgZXhlY3V0aW9uIG9mIHRoZSBuZXcgcHJv Y2VzcyBvbmNlIHRoZSBiYWNrZW5kIHBhcmFtZXRlcgorICoJIGZpbGUgaXMgY29tcGxldGUu CisgKi8KK3BpZF90CitpbnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltd LCBQb3J0ICpwb3J0LCBCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIpCit7CisJaW50CQkJcmV0 cnlfY291bnQgPSAwOworCVNUQVJUVVBJTkZPIHNpOworCVBST0NFU1NfSU5GT1JNQVRJT04g cGk7CisJaW50CQkJaTsKKwlpbnQJCQlqOworCWNoYXIJCWNtZExpbmVbTUFYUEdQQVRIICog Ml07CisJSEFORExFCQlwYXJhbUhhbmRsZTsKKwlCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW07 CisJU0VDVVJJVFlfQVRUUklCVVRFUyBzYTsKKwljaGFyCQlwYXJhbUhhbmRsZVN0clszMl07 CisJd2luMzJfZGVhZGNoaWxkX3dhaXRpbmZvICpjaGlsZGluZm87CisKKwkvKiBNYWtlIHN1 cmUgY2FsbGVyIHNldCB1cCBhcmd2IHByb3Blcmx5ICovCisJQXNzZXJ0KGFyZ2MgPj0gMyk7 CisJQXNzZXJ0KGFyZ3ZbYXJnY10gPT0gTlVMTCk7CisJQXNzZXJ0KHN0cm5jbXAoYXJndlsx XSwgIi0tZm9yayIsIDYpID09IDApOworCUFzc2VydChhcmd2WzJdID09IE5VTEwpOworCisJ LyogUmVzdW1lIGhlcmUgaWYgd2UgbmVlZCB0byByZXRyeSAqLworcmV0cnk6CisKKwkvKiBT ZXQgdXAgc2hhcmVkIG1lbW9yeSBmb3IgcGFyYW1ldGVyIHBhc3NpbmcgKi8KKwlaZXJvTWVt b3J5KCZzYSwgc2l6ZW9mKHNhKSk7CisJc2Eubkxlbmd0aCA9IHNpemVvZihzYSk7CisJc2Eu YkluaGVyaXRIYW5kbGUgPSBUUlVFOworCXBhcmFtSGFuZGxlID0gQ3JlYXRlRmlsZU1hcHBp bmcoSU5WQUxJRF9IQU5ETEVfVkFMVUUsCisJCQkJCQkJCQkmc2EsCisJCQkJCQkJCQlQQUdF X1JFQURXUklURSwKKwkJCQkJCQkJCTAsCisJCQkJCQkJCQlzaXplb2YoQmFja2VuZFBhcmFt ZXRlcnMpLAorCQkJCQkJCQkJTlVMTCk7CisJaWYgKHBhcmFtSGFuZGxlID09IElOVkFMSURf SEFORExFX1ZBTFVFKQorCXsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZygiY291bGQg bm90IGNyZWF0ZSBiYWNrZW5kIHBhcmFtZXRlciBmaWxlIG1hcHBpbmc6IGVycm9yIGNvZGUg JWx1IiwKKwkJCQkJCUdldExhc3RFcnJvcigpKSkpOworCQlyZXR1cm4gLTE7CisJfQorCisJ cGFyYW0gPSBNYXBWaWV3T2ZGaWxlKHBhcmFtSGFuZGxlLCBGSUxFX01BUF9XUklURSwgMCwg MCwgc2l6ZW9mKEJhY2tlbmRQYXJhbWV0ZXJzKSk7CisJaWYgKCFwYXJhbSkKKwl7CisJCWVy ZXBvcnQoTE9HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBtYXAgYmFja2VuZCBwYXJhbWV0 ZXIgbWVtb3J5OiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQlHZXRMYXN0RXJyb3IoKSkpKTsK KwkJQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyog SW5zZXJ0IHRlbXAgZmlsZSBuYW1lIGFmdGVyIC0tZm9yayBhcmd1bWVudCAqLworI2lmZGVm IF9XSU42NAorCXNwcmludGYocGFyYW1IYW5kbGVTdHIsICIlbGx1IiwgKExPTkdfUFRSKSBw YXJhbUhhbmRsZSk7CisjZWxzZQorCXNwcmludGYocGFyYW1IYW5kbGVTdHIsICIlbHUiLCAo RFdPUkQpIHBhcmFtSGFuZGxlKTsKKyNlbmRpZgorCWFyZ3ZbMl0gPSBwYXJhbUhhbmRsZVN0 cjsKKworCS8qIEZvcm1hdCB0aGUgY21kIGxpbmUgKi8KKwljbWRMaW5lW3NpemVvZihjbWRM aW5lKSAtIDFdID0gJ1wwJzsKKwljbWRMaW5lW3NpemVvZihjbWRMaW5lKSAtIDJdID0gJ1ww JzsKKwlzbnByaW50ZihjbWRMaW5lLCBzaXplb2YoY21kTGluZSkgLSAxLCAiXCIlc1wiIiwg cG9zdGdyZXNfZXhlY19wYXRoKTsKKwlpID0gMDsKKwl3aGlsZSAoYXJndlsrK2ldICE9IE5V TEwpCisJeworCQlqID0gc3RybGVuKGNtZExpbmUpOworCQlzbnByaW50ZihjbWRMaW5lICsg aiwgc2l6ZW9mKGNtZExpbmUpIC0gMSAtIGosICIgXCIlc1wiIiwgYXJndltpXSk7CisJfQor CWlmIChjbWRMaW5lW3NpemVvZihjbWRMaW5lKSAtIDJdICE9ICdcMCcpCisJeworCQllcmVw b3J0KExPRywKKwkJCQkoZXJybXNnKCJzdWJwcm9jZXNzIGNvbW1hbmQgbGluZSB0b28gbG9u ZyIpKSk7CisJCVVubWFwVmlld09mRmlsZShwYXJhbSk7CisJCUNsb3NlSGFuZGxlKHBhcmFt SGFuZGxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbXNldCgmcGksIDAsIHNpemVvZihw aSkpOworCW1lbXNldCgmc2ksIDAsIHNpemVvZihzaSkpOworCXNpLmNiID0gc2l6ZW9mKHNp KTsKKworCS8qCisJICogQ3JlYXRlIHRoZSBzdWJwcm9jZXNzIGluIGEgc3VzcGVuZGVkIHN0 YXRlLiBUaGlzIHdpbGwgYmUgcmVzdW1lZCBsYXRlciwKKwkgKiBvbmNlIHdlIGhhdmUgd3Jp dHRlbiBvdXQgdGhlIHBhcmFtZXRlciBmaWxlLgorCSAqLworCWlmICghQ3JlYXRlUHJvY2Vz cyhOVUxMLCBjbWRMaW5lLCBOVUxMLCBOVUxMLCBUUlVFLCBDUkVBVEVfU1VTUEVOREVELAor CQkJCQkgICBOVUxMLCBOVUxMLCAmc2ksICZwaSkpCisJeworCQllcmVwb3J0KExPRywKKwkJ CQkoZXJybXNnKCJDcmVhdGVQcm9jZXNzKCkgY2FsbCBmYWlsZWQ6ICVtIChlcnJvciBjb2Rl ICVsdSkiLAorCQkJCQkJR2V0TGFzdEVycm9yKCkpKSk7CisJCVVubWFwVmlld09mRmlsZShw YXJhbSk7CisJCUNsb3NlSGFuZGxlKHBhcmFtSGFuZGxlKTsKKwkJcmV0dXJuIC0xOworCX0K KworCWlmICghc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhwYXJhbSwgcG9ydCwgd29ya2VyLCBw aS5oUHJvY2VzcywgcGkuZHdQcm9jZXNzSWQpKQorCXsKKwkJLyoKKwkJICogbG9nIG1hZGUg Ynkgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcywgYnV0IHdlIGhhdmUgdG8gY2xlYW4gdXAgdGhl CisJCSAqIG1lc3Mgd2l0aCB0aGUgaGFsZi1zdGFydGVkIHByb2Nlc3MKKwkJICovCisJCWlm ICghVGVybWluYXRlUHJvY2VzcyhwaS5oUHJvY2VzcywgMjU1KSkKKwkJCWVyZXBvcnQoTE9H LAorCQkJCQkoZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgdGVybWluYXRlIHVuc3RhcnRl ZCBwcm9jZXNzOiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkp KSk7CisJCUNsb3NlSGFuZGxlKHBpLmhQcm9jZXNzKTsKKwkJQ2xvc2VIYW5kbGUocGkuaFRo cmVhZCk7CisJCVVubWFwVmlld09mRmlsZShwYXJhbSk7CisJCUNsb3NlSGFuZGxlKHBhcmFt SGFuZGxlKTsKKwkJcmV0dXJuIC0xOwkJCQkvKiBsb2cgbWFkZSBieSBzYXZlX2JhY2tlbmRf dmFyaWFibGVzICovCisJfQorCisJLyogRHJvcCB0aGUgcGFyYW1ldGVyIHNoYXJlZCBtZW1v cnkgdGhhdCBpcyBub3cgaW5oZXJpdGVkIHRvIHRoZSBiYWNrZW5kICovCisJaWYgKCFVbm1h cFZpZXdPZkZpbGUocGFyYW0pKQorCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJjb3Vs ZCBub3QgdW5tYXAgdmlldyBvZiBiYWNrZW5kIHBhcmFtZXRlciBmaWxlOiBlcnJvciBjb2Rl ICVsdSIsCisJCQkJCQlHZXRMYXN0RXJyb3IoKSkpKTsKKwlpZiAoIUNsb3NlSGFuZGxlKHBh cmFtSGFuZGxlKSkKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZygiY291bGQgbm90IGNs b3NlIGhhbmRsZSB0byBiYWNrZW5kIHBhcmFtZXRlciBmaWxlOiBlcnJvciBjb2RlICVsdSIs CisJCQkJCQlHZXRMYXN0RXJyb3IoKSkpKTsKKworCS8qCisJICogUmVzZXJ2ZSB0aGUgbWVt b3J5IHJlZ2lvbiB1c2VkIGJ5IG91ciBtYWluIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBiZWZv cmUKKwkgKiB3ZSByZXN1bWUgdGhlIGNoaWxkIHByb2Nlc3MuICBOb3JtYWxseSB0aGlzIHNo b3VsZCBzdWNjZWVkLCBidXQgaWYgQVNMUgorCSAqIGlzIGFjdGl2ZSB0aGVuIGl0IG1pZ2h0 IHNvbWV0aW1lcyBmYWlsIGR1ZSB0byB0aGUgc3RhY2sgb3IgaGVhcCBoYXZpbmcKKwkgKiBn b3R0ZW4gbWFwcGVkIGludG8gdGhhdCByYW5nZS4gIEluIHRoYXQgY2FzZSwganVzdCB0ZXJt aW5hdGUgdGhlCisJICogcHJvY2VzcyBhbmQgcmV0cnkuCisJICovCisJaWYgKCFwZ3dpbjMy X1Jlc2VydmVTaGFyZWRNZW1vcnlSZWdpb24ocGkuaFByb2Nlc3MpKQorCXsKKwkJLyogcGd3 aW4zMl9SZXNlcnZlU2hhcmVkTWVtb3J5UmVnaW9uIGFscmVhZHkgbWFkZSBhIGxvZyBlbnRy eSAqLworCQlpZiAoIVRlcm1pbmF0ZVByb2Nlc3MocGkuaFByb2Nlc3MsIDI1NSkpCisJCQll cmVwb3J0KExPRywKKwkJCQkJKGVycm1zZ19pbnRlcm5hbCgiY291bGQgbm90IHRlcm1pbmF0 ZSBwcm9jZXNzIHRoYXQgZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5OiBlcnJvciBjb2RlICVs dSIsCisJCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpKSk7CisJCUNsb3NlSGFuZGxlKHBpLmhQ cm9jZXNzKTsKKwkJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7CisJCWlmICgrK3JldHJ5X2Nv dW50IDwgMTAwKQorCQkJZ290byByZXRyeTsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1z ZygiZ2l2aW5nIHVwIGFmdGVyIHRvbyBtYW55IHRyaWVzIHRvIHJlc2VydmUgc2hhcmVkIG1l bW9yeSIpLAorCQkJCSBlcnJoaW50KCJUaGlzIG1pZ2h0IGJlIGNhdXNlZCBieSBBU0xSIG9y IGFudGl2aXJ1cyBzb2Z0d2FyZS4iKSkpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkg KiBOb3cgdGhhdCB0aGUgYmFja2VuZCB2YXJpYWJsZXMgYXJlIHdyaXR0ZW4gb3V0LCB3ZSBz dGFydCB0aGUgY2hpbGQKKwkgKiB0aHJlYWQgc28gaXQgY2FuIHN0YXJ0IGluaXRpYWxpemlu ZyB3aGlsZSB3ZSBzZXQgdXAgdGhlIHJlc3Qgb2YgdGhlCisJICogcGFyZW50IHN0YXRlLgor CSAqLworCWlmIChSZXN1bWVUaHJlYWQocGkuaFRocmVhZCkgPT0gLTEpCisJeworCQlpZiAo IVRlcm1pbmF0ZVByb2Nlc3MocGkuaFByb2Nlc3MsIDI1NSkpCisJCXsKKwkJCWVyZXBvcnQo TE9HLAorCQkJCQkoZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgdGVybWluYXRlIHVuc3Rh cnRhYmxlIHByb2Nlc3M6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCQkJCSBHZXRMYXN0RXJy b3IoKSkpKTsKKwkJCUNsb3NlSGFuZGxlKHBpLmhQcm9jZXNzKTsKKwkJCUNsb3NlSGFuZGxl KHBpLmhUaHJlYWQpOworCQkJcmV0dXJuIC0xOworCQl9CisJCUNsb3NlSGFuZGxlKHBpLmhQ cm9jZXNzKTsKKwkJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7CisJCWVyZXBvcnQoTE9HLAor CQkJCShlcnJtc2dfaW50ZXJuYWwoImNvdWxkIG5vdCByZXN1bWUgdGhyZWFkIG9mIHVuc3Rh cnRlZCBwcm9jZXNzOiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQkJCSBHZXRMYXN0RXJyb3Io KSkpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFNldCB1cCBub3RpZmljYXRpb24gd2hl biB0aGUgY2hpbGQgcHJvY2VzcyBkaWVzICovCisJcGd3aW4zMl9yZWdpc3Rlcl9kZWFkY2hp bGRfY2FsbGJhY2socGkuaFByb2Nlc3MsIHBpLmR3UHJvY2Vzc0lkKTsKKworCS8qIERvbid0 IGNsb3NlIHBpLmhQcm9jZXNzLCBpdCdzIG93bmVkIGJ5IHRoZSBkZWFkY2hpbGQgY2FsbGJh Y2sgbm93ICovCisKKwlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKKworCXJldHVybiBwaS5k d1Byb2Nlc3NJZDsKK30KKyNlbmRpZgkJCQkJCQkvKiBXSU4zMiAqLworCisvKgorICogVGhl IGZvbGxvd2luZyBuZWVkIHRvIGJlIGF2YWlsYWJsZSB0byB0aGUgc2F2ZS9yZXN0b3JlX2Jh Y2tlbmRfdmFyaWFibGVzCisgKiBmdW5jdGlvbnMuICBUaGV5IGFyZSBtYXJrZWQgTk9OX0VY RUNfU1RBVElDIGluIHRoZWlyIGhvbWUgbW9kdWxlcy4KKyAqLworZXh0ZXJuIHNsb2NrX3Qg KlNobWVtTG9jazsKK2V4dGVybiBzbG9ja190ICpQcm9jU3RydWN0TG9jazsKK2V4dGVybiBQ R1BST0MgKkF1eGlsaWFyeVByb2NzOworZXh0ZXJuIFBNU2lnbmFsRGF0YSAqUE1TaWduYWxT dGF0ZTsKK2V4dGVybiBwZ190aW1lX3QgZmlyc3Rfc3lzbG9nZ2VyX2ZpbGVfdGltZTsKK2V4 dGVybiBzdHJ1Y3QgYmtlbmQgKlNobWVtQmFja2VuZEFycmF5OworZXh0ZXJuIGJvb2wgcmVk aXJlY3Rpb25fZG9uZTsKKworLyogU2F2ZSBjcml0aWNhbCBiYWNrZW5kIHZhcmlhYmxlcyBp bnRvIHRoZSBCYWNrZW5kUGFyYW1ldGVycyBzdHJ1Y3QgKi8KKyNpZm5kZWYgV0lOMzIKKyNk ZWZpbmUgd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KGRlc3QsIHNyYywgY2hpbGRwaWQpICgo KihkZXN0KSA9IChzcmMpKSwgdHJ1ZSkKKyNkZWZpbmUgcmVhZF9pbmhlcml0YWJsZV9zb2Nr ZXQoZGVzdCwgc3JjKSAoKihkZXN0KSA9ICooc3JjKSkKKyNlbHNlCitzdGF0aWMgYm9vbCB3 cml0ZV9kdXBsaWNhdGVkX2hhbmRsZShIQU5ETEUgKmRlc3QsIEhBTkRMRSBzcmMsIEhBTkRM RSBjaGlsZCk7CitzdGF0aWMgYm9vbCB3cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoSW5oZXJp dGFibGVTb2NrZXQgKmRlc3QsIFNPQ0tFVCBzcmMsCisJCQkJCQkJCQkgcGlkX3QgY2hpbGRQ aWQpOworc3RhdGljIHZvaWQgcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoU09DS0VUICpkZXN0 LCBJbmhlcml0YWJsZVNvY2tldCAqc3JjKTsKKyNlbmRpZgorCisjaWZuZGVmIFdJTjMyCitz dGF0aWMgYm9vbAorc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAq cGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKndv cmtlcikKKyNlbHNlCitzdGF0aWMgYm9vbAorc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNr ZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2tn cm91bmRXb3JrZXIgKndvcmtlciwKKwkJCQkJICAgSEFORExFIGNoaWxkUHJvY2VzcywgcGlk X3QgY2hpbGRQaWQpCisjZW5kaWYKK3sKKwlpZiAoY2xpZW50X3NvY2spCisJeworCQltZW1j cHkoJnBhcmFtLT5jbGllbnRfc29jaywgY2xpZW50X3NvY2ssIHNpemVvZihDbGllbnRTb2Nr ZXQpKTsKKwkJaWYgKCF3cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoJnBhcmFtLT5pbmhfc29j aywgY2xpZW50X3NvY2stPnNvY2ssIGNoaWxkUGlkKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJ cGFyYW0tPmhhc19jbGllbnRfc29jayA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCW1lbXNl dCgmcGFyYW0tPmNsaWVudF9zb2NrLCAwLCBzaXplb2YoQ2xpZW50U29ja2V0KSk7CisJCXBh cmFtLT5oYXNfY2xpZW50X3NvY2sgPSBmYWxzZTsKKwl9CisKKwlpZiAod29ya2VyKQorCXsK KwkJbWVtY3B5KCZwYXJhbS0+Ymd3b3JrZXIsIHdvcmtlciwgc2l6ZW9mKEJhY2tncm91bmRX b3JrZXIpKTsKKwkJcGFyYW0tPmhhc19iZ3dvcmtlciA9IHRydWU7CisJfQorCWVsc2UKKwl7 CisJCW1lbXNldCgmcGFyYW0tPmJnd29ya2VyLCAwLCBzaXplb2YoQmFja2dyb3VuZFdvcmtl cikpOworCQlwYXJhbS0+aGFzX2Jnd29ya2VyID0gZmFsc2U7CisJfQorCisJc3RybGNweShw YXJhbS0+RGF0YURpciwgRGF0YURpciwgTUFYUEdQQVRIKTsKKworCXBhcmFtLT5NeUNhbmNl bEtleSA9IE15Q2FuY2VsS2V5OworCXBhcmFtLT5NeVBNQ2hpbGRTbG90ID0gTXlQTUNoaWxk U2xvdDsKKworI2lmZGVmIFdJTjMyCisJcGFyYW0tPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbiA9 IFNobWVtUHJvdGVjdGl2ZVJlZ2lvbjsKKyNlbmRpZgorCXBhcmFtLT5Vc2VkU2htZW1TZWdJ RCA9IFVzZWRTaG1lbVNlZ0lEOworCXBhcmFtLT5Vc2VkU2htZW1TZWdBZGRyID0gVXNlZFNo bWVtU2VnQWRkcjsKKworCXBhcmFtLT5TaG1lbUxvY2sgPSBTaG1lbUxvY2s7CisJcGFyYW0t PlNobWVtQmFja2VuZEFycmF5ID0gU2htZW1CYWNrZW5kQXJyYXk7CisKKyNpZm5kZWYgSEFW RV9TUElOTE9DS1MKKwlwYXJhbS0+U3BpbmxvY2tTZW1hQXJyYXkgPSBTcGlubG9ja1NlbWFB cnJheTsKKyNlbmRpZgorCXBhcmFtLT5OYW1lZExXTG9ja1RyYW5jaGVSZXF1ZXN0cyA9IE5h bWVkTFdMb2NrVHJhbmNoZVJlcXVlc3RzOworCXBhcmFtLT5OYW1lZExXTG9ja1RyYW5jaGVB cnJheSA9IE5hbWVkTFdMb2NrVHJhbmNoZUFycmF5OworCXBhcmFtLT5NYWluTFdMb2NrQXJy YXkgPSBNYWluTFdMb2NrQXJyYXk7CisJcGFyYW0tPlByb2NTdHJ1Y3RMb2NrID0gUHJvY1N0 cnVjdExvY2s7CisJcGFyYW0tPlByb2NHbG9iYWwgPSBQcm9jR2xvYmFsOworCXBhcmFtLT5B dXhpbGlhcnlQcm9jcyA9IEF1eGlsaWFyeVByb2NzOworCXBhcmFtLT5QcmVwYXJlZFhhY3RQ cm9jcyA9IFByZXBhcmVkWGFjdFByb2NzOworCXBhcmFtLT5QTVNpZ25hbFN0YXRlID0gUE1T aWduYWxTdGF0ZTsKKworCXBhcmFtLT5Qb3N0bWFzdGVyUGlkID0gUG9zdG1hc3RlclBpZDsK KwlwYXJhbS0+UGdTdGFydFRpbWUgPSBQZ1N0YXJ0VGltZTsKKwlwYXJhbS0+UGdSZWxvYWRU aW1lID0gUGdSZWxvYWRUaW1lOworCXBhcmFtLT5maXJzdF9zeXNsb2dnZXJfZmlsZV90aW1l ID0gZmlyc3Rfc3lzbG9nZ2VyX2ZpbGVfdGltZTsKKworCXBhcmFtLT5yZWRpcmVjdGlvbl9k b25lID0gcmVkaXJlY3Rpb25fZG9uZTsKKwlwYXJhbS0+SXNCaW5hcnlVcGdyYWRlID0gSXNC aW5hcnlVcGdyYWRlOworCXBhcmFtLT5xdWVyeV9pZF9lbmFibGVkID0gcXVlcnlfaWRfZW5h YmxlZDsKKwlwYXJhbS0+bWF4X3NhZmVfZmRzID0gbWF4X3NhZmVfZmRzOworCisJcGFyYW0t Pk1heEJhY2tlbmRzID0gTWF4QmFja2VuZHM7CisKKyNpZmRlZiBXSU4zMgorCXBhcmFtLT5Q b3N0bWFzdGVySGFuZGxlID0gUG9zdG1hc3RlckhhbmRsZTsKKwlpZiAoIXdyaXRlX2R1cGxp Y2F0ZWRfaGFuZGxlKCZwYXJhbS0+aW5pdGlhbF9zaWduYWxfcGlwZSwKKwkJCQkJCQkJIHBn d2luMzJfY3JlYXRlX3NpZ25hbF9saXN0ZW5lcihjaGlsZFBpZCksCisJCQkJCQkJCSBjaGls ZFByb2Nlc3MpKQorCQlyZXR1cm4gZmFsc2U7CisjZWxzZQorCW1lbWNweSgmcGFyYW0tPnBv c3RtYXN0ZXJfYWxpdmVfZmRzLCAmcG9zdG1hc3Rlcl9hbGl2ZV9mZHMsCisJCSAgIHNpemVv Zihwb3N0bWFzdGVyX2FsaXZlX2ZkcykpOworI2VuZGlmCisKKwltZW1jcHkoJnBhcmFtLT5z eXNsb2dQaXBlLCAmc3lzbG9nUGlwZSwgc2l6ZW9mKHN5c2xvZ1BpcGUpKTsKKworCXN0cmxj cHkocGFyYW0tPm15X2V4ZWNfcGF0aCwgbXlfZXhlY19wYXRoLCBNQVhQR1BBVEgpOworCisJ c3RybGNweShwYXJhbS0+cGtnbGliX3BhdGgsIHBrZ2xpYl9wYXRoLCBNQVhQR1BBVEgpOwor CisJcmV0dXJuIHRydWU7Cit9CisKKyNpZmRlZiBXSU4zMgorLyoKKyAqIER1cGxpY2F0ZSBh IGhhbmRsZSBmb3IgdXNhZ2UgaW4gYSBjaGlsZCBwcm9jZXNzLCBhbmQgd3JpdGUgdGhlIGNo aWxkCisgKiBwcm9jZXNzIGluc3RhbmNlIG9mIHRoZSBoYW5kbGUgdG8gdGhlIHBhcmFtZXRl ciBmaWxlLgorICovCitzdGF0aWMgYm9vbAord3JpdGVfZHVwbGljYXRlZF9oYW5kbGUoSEFO RExFICpkZXN0LCBIQU5ETEUgc3JjLCBIQU5ETEUgY2hpbGRQcm9jZXNzKQoreworCUhBTkRM RQkJaENoaWxkID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisKKwlpZiAoIUR1cGxpY2F0ZUhh bmRsZShHZXRDdXJyZW50UHJvY2VzcygpLAorCQkJCQkJIHNyYywKKwkJCQkJCSBjaGlsZFBy b2Nlc3MsCisJCQkJCQkgJmhDaGlsZCwKKwkJCQkJCSAwLAorCQkJCQkJIFRSVUUsCisJCQkJ CQkgRFVQTElDQVRFX0NMT1NFX1NPVVJDRSB8IERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCisJ eworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgZHVw bGljYXRlIGhhbmRsZSB0byBiZSB3cml0dGVuIHRvIGJhY2tlbmQgcGFyYW1ldGVyIGZpbGU6 IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJKmRlc3QgPSBoQ2hpbGQ7CisJcmV0dXJuIHRydWU7Cit9CisK Ky8qCisgKiBEdXBsaWNhdGUgYSBzb2NrZXQgZm9yIHVzYWdlIGluIGEgY2hpbGQgcHJvY2Vz cywgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcKKyAqIHN0cnVjdHVyZSB0byB0aGUgcGFyYW1l dGVyIGZpbGUuCisgKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgYSBudW1iZXIgb2YgTFNQ cyAoTGF5ZXJlZCBTZXJ2aWNlIFByb3ZpZGVycykgdmVyeQorICogY29tbW9uIG9uIFdpbmRv d3MgKGFudGl2aXJ1cywgZmlyZXdhbGxzLCBkb3dubG9hZCBtYW5hZ2VycyBldGMpIGJyZWFr CisgKiBzdHJhaWdodCBzb2NrZXQgaW5oZXJpdGFuY2UuCisgKi8KK3N0YXRpYyBib29sCit3 cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoSW5oZXJpdGFibGVTb2NrZXQgKmRlc3QsIFNPQ0tF VCBzcmMsIHBpZF90IGNoaWxkcGlkKQoreworCWRlc3QtPm9yaWdzb2NrZXQgPSBzcmM7CisJ aWYgKHNyYyAhPSAwICYmIHNyYyAhPSBQR0lOVkFMSURfU09DS0VUKQorCXsKKwkJLyogQWN0 dWFsIHNvY2tldCAqLworCQlpZiAoV1NBRHVwbGljYXRlU29ja2V0KHNyYywgY2hpbGRwaWQs ICZkZXN0LT53c2FpbmZvKSAhPSAwKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVy cm1zZygiY291bGQgbm90IGR1cGxpY2F0ZSBzb2NrZXQgJWQgZm9yIHVzZSBpbiBiYWNrZW5k OiBlcnJvciBjb2RlICVkIiwKKwkJCQkJCQkoaW50KSBzcmMsIFdTQUdldExhc3RFcnJvcigp KSkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCXJldHVybiB0cnVlOworfQorCisv KgorICogUmVhZCBhIGR1cGxpY2F0ZSBzb2NrZXQgc3RydWN0dXJlIGJhY2ssIGFuZCBnZXQg dGhlIHNvY2tldCBkZXNjcmlwdG9yLgorICovCitzdGF0aWMgdm9pZAorcmVhZF9pbmhlcml0 YWJsZV9zb2NrZXQoU09DS0VUICpkZXN0LCBJbmhlcml0YWJsZVNvY2tldCAqc3JjKQorewor CVNPQ0tFVAkJczsKKworCWlmIChzcmMtPm9yaWdzb2NrZXQgPT0gUEdJTlZBTElEX1NPQ0tF VCB8fCBzcmMtPm9yaWdzb2NrZXQgPT0gMCkKKwl7CisJCS8qIE5vdCBhIHJlYWwgc29ja2V0 ISAqLworCQkqZGVzdCA9IHNyYy0+b3JpZ3NvY2tldDsKKwl9CisJZWxzZQorCXsKKwkJLyog QWN0dWFsIHNvY2tldCwgc28gY3JlYXRlIGZyb20gc3RydWN0dXJlICovCisJCXMgPSBXU0FT b2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLAorCQkJCQkgIEZST01fUFJPVE9DT0xfSU5GTywK KwkJCQkJICBGUk9NX1BST1RPQ09MX0lORk8sCisJCQkJCSAgJnNyYy0+d3NhaW5mbywKKwkJ CQkJICAwLAorCQkJCQkgIDApOworCQlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKKwkJewor CQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgY3JlYXRlIGluaGVyaXRlZCBzb2NrZXQ6IGVy cm9yIGNvZGUgJWRcbiIsCisJCQkJCQkgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJZXhpdCgx KTsKKwkJfQorCQkqZGVzdCA9IHM7CisKKwkJLyoKKwkJICogVG8gbWFrZSBzdXJlIHdlIGRv bid0IGdldCB0d28gcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBzb2NrZXQsIGNsb3NlCisJCSAq IHRoZSBvcmlnaW5hbCBvbmUuIChUaGlzIHdvdWxkIGhhcHBlbiB3aGVuIGluaGVyaXRhbmNl IGFjdHVhbGx5CisJCSAqIHdvcmtzLi4KKwkJICovCisJCWNsb3Nlc29ja2V0KHNyYy0+b3Jp Z3NvY2tldCk7CisJfQorfQorI2VuZGlmCisKK3ZvaWQKK3JlYWRfYmFja2VuZF92YXJpYWJs ZXMoY2hhciAqaWQsIENsaWVudFNvY2tldCAqKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29y a2VyICoqd29ya2VyKQoreworCUJhY2tlbmRQYXJhbWV0ZXJzIHBhcmFtOworCisjaWZuZGVm IFdJTjMyCisJLyogTm9uLXdpbjMyIGltcGxlbWVudGF0aW9uIHJlYWRzIGZyb20gZmlsZSAq LworCUZJTEUJICAgKmZwOworCisJLyogT3BlbiBmaWxlICovCisJZnAgPSBBbGxvY2F0ZUZp bGUoaWQsIFBHX0JJTkFSWV9SKTsKKwlpZiAoIWZwKQorCXsKKwkJd3JpdGVfc3RkZXJyKCJj b3VsZCBub3Qgb3BlbiBiYWNrZW5kIHZhcmlhYmxlcyBmaWxlIFwiJXNcIjogJXNcbiIsCisJ CQkJCSBpZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoZnJl YWQoJnBhcmFtLCBzaXplb2YocGFyYW0pLCAxLCBmcCkgIT0gMSkKKwl7CisJCXdyaXRlX3N0 ZGVycigiY291bGQgbm90IHJlYWQgZnJvbSBiYWNrZW5kIHZhcmlhYmxlcyBmaWxlIFwiJXNc IjogJXNcbiIsCisJCQkJCSBpZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9 CisKKwkvKiBSZWxlYXNlIGZpbGUgKi8KKwlGcmVlRmlsZShmcCk7CisJaWYgKHVubGluayhp ZCkgIT0gMCkKKwl7CisJCXdyaXRlX3N0ZGVycigiY291bGQgbm90IHJlbW92ZSBmaWxlIFwi JXNcIjogJXNcbiIsCisJCQkJCSBpZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsK Kwl9CisjZWxzZQorCS8qIFdpbjMyIHZlcnNpb24gdXNlcyBtYXBwZWQgZmlsZSAqLworCUhB TkRMRQkJcGFyYW1IYW5kbGU7CisJQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtcDsKKworI2lm ZGVmIF9XSU42NAorCXBhcmFtSGFuZGxlID0gKEhBTkRMRSkgX2F0b2k2NChpZCk7CisjZWxz ZQorCXBhcmFtSGFuZGxlID0gKEhBTkRMRSkgYXRvbChpZCk7CisjZW5kaWYKKwlwYXJhbXAg PSBNYXBWaWV3T2ZGaWxlKHBhcmFtSGFuZGxlLCBGSUxFX01BUF9SRUFELCAwLCAwLCAwKTsK KwlpZiAoIXBhcmFtcCkKKwl7CisJCXdyaXRlX3N0ZGVycigiY291bGQgbm90IG1hcCB2aWV3 IG9mIGJhY2tlbmQgdmFyaWFibGVzOiBlcnJvciBjb2RlICVsdVxuIiwKKwkJCQkJIEdldExh c3RFcnJvcigpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwltZW1jcHkoJnBhcmFtLCBwYXJhbXAs IHNpemVvZihCYWNrZW5kUGFyYW1ldGVycykpOworCisJaWYgKCFVbm1hcFZpZXdPZkZpbGUo cGFyYW1wKSkKKwl7CisJCXdyaXRlX3N0ZGVycigiY291bGQgbm90IHVubWFwIHZpZXcgb2Yg YmFja2VuZCB2YXJpYWJsZXM6IGVycm9yIGNvZGUgJWx1XG4iLAorCQkJCQkgR2V0TGFzdEVy cm9yKCkpOworCQlleGl0KDEpOworCX0KKworCWlmICghQ2xvc2VIYW5kbGUocGFyYW1IYW5k bGUpKQorCXsKKwkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgY2xvc2UgaGFuZGxlIHRvIGJh Y2tlbmQgcGFyYW1ldGVyIHZhcmlhYmxlczogZXJyb3IgY29kZSAlbHVcbiIsCisJCQkJCSBH ZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoMSk7CisJfQorI2VuZGlmCisKKwlyZXN0b3JlX2Jh Y2tlbmRfdmFyaWFibGVzKCZwYXJhbSwgY2xpZW50X3NvY2ssIHdvcmtlcik7Cit9CisKKy8q IFJlc3RvcmUgY3JpdGljYWwgYmFja2VuZCB2YXJpYWJsZXMgZnJvbSB0aGUgQmFja2VuZFBh cmFtZXRlcnMgc3RydWN0ICovCitzdGF0aWMgdm9pZAorcmVzdG9yZV9iYWNrZW5kX3Zhcmlh YmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqKmNsaWVudF9z b2NrLCBCYWNrZ3JvdW5kV29ya2VyICoqd29ya2VyKQoreworCWlmIChwYXJhbS0+aGFzX2Ns aWVudF9zb2NrKQorCXsKKwkJKmNsaWVudF9zb2NrID0gKENsaWVudFNvY2tldCAqKSBNZW1v cnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9mKENsaWVudFNvY2tldCkp OworCQltZW1jcHkoKmNsaWVudF9zb2NrLCAmcGFyYW0tPmNsaWVudF9zb2NrLCBzaXplb2Yo Q2xpZW50U29ja2V0KSk7CisJCXJlYWRfaW5oZXJpdGFibGVfc29ja2V0KCYoKmNsaWVudF9z b2NrKS0+c29jaywgJnBhcmFtLT5pbmhfc29jayk7CisJfQorCWVsc2UKKwkJKmNsaWVudF9z b2NrID0gTlVMTDsKKworCWlmIChwYXJhbS0+aGFzX2Jnd29ya2VyKQorCXsKKwkJKndvcmtl ciA9IChCYWNrZ3JvdW5kV29ya2VyICopCisJCQlNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVt b3J5Q29udGV4dCwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKKwkJbWVtY3B5KCp3b3Jr ZXIsICZwYXJhbS0+Ymd3b3JrZXIsIHNpemVvZihCYWNrZ3JvdW5kV29ya2VyKSk7CisJfQor CWVsc2UKKwkJKndvcmtlciA9IE5VTEw7CisKKwlTZXREYXRhRGlyKHBhcmFtLT5EYXRhRGly KTsKKworCU15Q2FuY2VsS2V5ID0gcGFyYW0tPk15Q2FuY2VsS2V5OworCU15UE1DaGlsZFNs b3QgPSBwYXJhbS0+TXlQTUNoaWxkU2xvdDsKKworI2lmZGVmIFdJTjMyCisJU2htZW1Qcm90 ZWN0aXZlUmVnaW9uID0gcGFyYW0tPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbjsKKyNlbmRpZgor CVVzZWRTaG1lbVNlZ0lEID0gcGFyYW0tPlVzZWRTaG1lbVNlZ0lEOworCVVzZWRTaG1lbVNl Z0FkZHIgPSBwYXJhbS0+VXNlZFNobWVtU2VnQWRkcjsKKworCVNobWVtTG9jayA9IHBhcmFt LT5TaG1lbUxvY2s7CisJU2htZW1CYWNrZW5kQXJyYXkgPSBwYXJhbS0+U2htZW1CYWNrZW5k QXJyYXk7CisKKyNpZm5kZWYgSEFWRV9TUElOTE9DS1MKKwlTcGlubG9ja1NlbWFBcnJheSA9 IHBhcmFtLT5TcGlubG9ja1NlbWFBcnJheTsKKyNlbmRpZgorCU5hbWVkTFdMb2NrVHJhbmNo ZVJlcXVlc3RzID0gcGFyYW0tPk5hbWVkTFdMb2NrVHJhbmNoZVJlcXVlc3RzOworCU5hbWVk TFdMb2NrVHJhbmNoZUFycmF5ID0gcGFyYW0tPk5hbWVkTFdMb2NrVHJhbmNoZUFycmF5Owor CU1haW5MV0xvY2tBcnJheSA9IHBhcmFtLT5NYWluTFdMb2NrQXJyYXk7CisJUHJvY1N0cnVj dExvY2sgPSBwYXJhbS0+UHJvY1N0cnVjdExvY2s7CisJUHJvY0dsb2JhbCA9IHBhcmFtLT5Q cm9jR2xvYmFsOworCUF1eGlsaWFyeVByb2NzID0gcGFyYW0tPkF1eGlsaWFyeVByb2NzOwor CVByZXBhcmVkWGFjdFByb2NzID0gcGFyYW0tPlByZXBhcmVkWGFjdFByb2NzOworCVBNU2ln bmFsU3RhdGUgPSBwYXJhbS0+UE1TaWduYWxTdGF0ZTsKKworCVBvc3RtYXN0ZXJQaWQgPSBw YXJhbS0+UG9zdG1hc3RlclBpZDsKKwlQZ1N0YXJ0VGltZSA9IHBhcmFtLT5QZ1N0YXJ0VGlt ZTsKKwlQZ1JlbG9hZFRpbWUgPSBwYXJhbS0+UGdSZWxvYWRUaW1lOworCWZpcnN0X3N5c2xv Z2dlcl9maWxlX3RpbWUgPSBwYXJhbS0+Zmlyc3Rfc3lzbG9nZ2VyX2ZpbGVfdGltZTsKKwor CXJlZGlyZWN0aW9uX2RvbmUgPSBwYXJhbS0+cmVkaXJlY3Rpb25fZG9uZTsKKwlJc0JpbmFy eVVwZ3JhZGUgPSBwYXJhbS0+SXNCaW5hcnlVcGdyYWRlOworCXF1ZXJ5X2lkX2VuYWJsZWQg PSBwYXJhbS0+cXVlcnlfaWRfZW5hYmxlZDsKKwltYXhfc2FmZV9mZHMgPSBwYXJhbS0+bWF4 X3NhZmVfZmRzOworCisJTWF4QmFja2VuZHMgPSBwYXJhbS0+TWF4QmFja2VuZHM7CisKKyNp ZmRlZiBXSU4zMgorCVBvc3RtYXN0ZXJIYW5kbGUgPSBwYXJhbS0+UG9zdG1hc3RlckhhbmRs ZTsKKwlwZ3dpbjMyX2luaXRpYWxfc2lnbmFsX3BpcGUgPSBwYXJhbS0+aW5pdGlhbF9zaWdu YWxfcGlwZTsKKyNlbHNlCisJbWVtY3B5KCZwb3N0bWFzdGVyX2FsaXZlX2ZkcywgJnBhcmFt LT5wb3N0bWFzdGVyX2FsaXZlX2ZkcywKKwkJICAgc2l6ZW9mKHBvc3RtYXN0ZXJfYWxpdmVf ZmRzKSk7CisjZW5kaWYKKworCW1lbWNweSgmc3lzbG9nUGlwZSwgJnBhcmFtLT5zeXNsb2dQ aXBlLCBzaXplb2Yoc3lzbG9nUGlwZSkpOworCisJc3RybGNweShteV9leGVjX3BhdGgsIHBh cmFtLT5teV9leGVjX3BhdGgsIE1BWFBHUEFUSCk7CisKKwlzdHJsY3B5KHBrZ2xpYl9wYXRo LCBwYXJhbS0+cGtnbGliX3BhdGgsIE1BWFBHUEFUSCk7CisKKwkvKgorCSAqIFdlIG5lZWQg dG8gcmVzdG9yZSBmZC5jJ3MgY291bnRzIG9mIGV4dGVybmFsbHktb3BlbmVkIEZEczsgdG8g YXZvaWQKKwkgKiBjb25mdXNpb24sIGJlIHN1cmUgdG8gZG8gdGhpcyBhZnRlciByZXN0b3Jp bmcgbWF4X3NhZmVfZmRzLiAgKE5vdGU6CisJICogQmFja2VuZEluaXRpYWxpemUgd2lsbCBo YW5kbGUgdGhpcyBmb3IgKCpjbGllbnRfc29jayktPnNvY2suKQorCSAqLworI2lmbmRlZiBX SU4zMgorCWlmIChwb3N0bWFzdGVyX2FsaXZlX2Zkc1swXSA+PSAwKQorCQlSZXNlcnZlRXh0 ZXJuYWxGRCgpOworCWlmIChwb3N0bWFzdGVyX2FsaXZlX2Zkc1sxXSA+PSAwKQorCQlSZXNl cnZlRXh0ZXJuYWxGRCgpOworI2VuZGlmCit9CisKKyNlbmRpZgkJCQkJCQkvKiBFWEVDX0JB Q0tFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVp bGQgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkCmluZGV4IGNkYTkyMWZk MTBiLi4zMTNmNDZkNTk3YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9t ZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1aWxkCkBA IC04LDYgKzgsNyBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdjaGVja3BvaW50 ZXIuYycsCiAgICdmb3JrX3Byb2Nlc3MuYycsCiAgICdpbnRlcnJ1cHQuYycsCisgICdsYXVu Y2hfYmFja2VuZC5jJywKICAgJ3BnYXJjaC5jJywKICAgJ3Bvc3RtYXN0ZXIuYycsCiAgICdz dGFydHVwLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA0MDIy YzNjNzUwYS4uNTg2YWFjNzhkNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlICJsaWJwcS9saWJwcS5oIgogI2lu Y2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIK LSNpbmNsdWRlICJub2Rlcy9xdWVyeWp1bWJsZS5oIgogI2luY2x1ZGUgInBnX2dldG9wdC5o IgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnQvcGdfYnN3YXAuaCIKQEAg LTEzMCwxMCArMTI5LDYgQEAKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNs dWRlICJ1dGlscy92YXJsZW5hLmgiCiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLSNpbmNsdWRl ICJzdG9yYWdlL3NwaW4uaCIKLSNlbmRpZgotCiAKIC8qCiAgKiBQb3NzaWJsZSB0eXBlcyBv ZiBhIGJhY2tlbmQuIEJleW9uZCBiZWluZyB0aGUgcG9zc2libGUgYmtlbmRfdHlwZSB2YWx1 ZXMgaW4KQEAgLTE4Niw3ICsxODEsNyBAQCB0eXBlZGVmIHN0cnVjdCBia2VuZAogc3RhdGlj IGRsaXN0X2hlYWQgQmFja2VuZExpc3QgPSBETElTVF9TVEFUSUNfSU5JVChCYWNrZW5kTGlz dCk7CiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKLXN0YXRpYyBCYWNrZW5kICpTaG1lbUJhY2tl bmRBcnJheTsKK0JhY2tlbmQgICAgKlNobWVtQmFja2VuZEFycmF5OwogI2VuZGlmCiAKIEJh Y2tncm91bmRXb3JrZXIgKk15Qmd3b3JrZXJFbnRyeSA9IE5VTEw7CkBAIC00NzEsNyArNDY2 LDYgQEAgc3RhdGljIHZvaWQgSW5pdFBvc3RtYXN0ZXJEZWF0aFdhdGNoSGFuZGxlKHZvaWQp OwogCiBzdGF0aWMgcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQsIGludCAqZXhpdHN0YXR1cywg aW50IG9wdGlvbnMpOwogc3RhdGljIHZvaWQgV0lOQVBJIHBnd2luMzJfZGVhZGNoaWxkX2Nh bGxiYWNrKFBWT0lEIGxwUGFyYW1ldGVyLCBCT09MRUFOIFRpbWVyT3JXYWl0RmlyZWQpOwot c3RhdGljIHZvaWQgcGd3aW4zMl9yZWdpc3Rlcl9kZWFkY2hpbGRfY2FsbGJhY2soSEFORExF IHByb2NIYW5kbGUsIERXT1JEIHByb2NJZCk7CiAKIHN0YXRpYyBIQU5ETEUgd2luMzJDaGls ZFF1ZXVlOwogCkBAIC00ODQsODUgKzQ3OCwxMSBAQCB0eXBlZGVmIHN0cnVjdAogI2VuZGlm CQkJCQkJCS8qIFdJTjMyICovCiAKIHN0YXRpYyBwaWRfdCBiYWNrZW5kX2ZvcmtleGVjKENs aWVudFNvY2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0ZSBjYWMpOwotc3RhdGljIHBpZF90 IGludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIENsaWVudFNvY2tl dCAqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcik7Ci0KLS8qIFR5cGUg Zm9yIGEgc29ja2V0IHRoYXQgY2FuIGJlIGluaGVyaXRlZCB0byBhIGNsaWVudCBwcm9jZXNz ICovCi0jaWZkZWYgV0lOMzIKLXR5cGVkZWYgc3RydWN0Ci17Ci0JU09DS0VUCQlvcmlnc29j a2V0OwkJLyogT3JpZ2luYWwgc29ja2V0IHZhbHVlLCBvciBQR0lOVkFMSURfU09DS0VUCi0J CQkJCQkJCSAqIGlmIG5vdCBhIHNvY2tldCAqLwotCVdTQVBST1RPQ09MX0lORk8gd3NhaW5m bzsKLX0gSW5oZXJpdGFibGVTb2NrZXQ7Ci0jZWxzZQotdHlwZWRlZiBpbnQgSW5oZXJpdGFi bGVTb2NrZXQ7Ci0jZW5kaWYKLQotLyoKLSAqIFN0cnVjdHVyZSBjb250YWlucyBhbGwgdmFy aWFibGVzIHBhc3NlZCB0byBleGVjOmVkIGJhY2tlbmRzCi0gKi8KLXR5cGVkZWYgc3RydWN0 Ci17Ci0JYm9vbAkJaGFzX2NsaWVudF9zb2NrOwotCUNsaWVudFNvY2tldCBjbGllbnRfc29j azsKLQlJbmhlcml0YWJsZVNvY2tldCBpbmhfc29jazsKLQotCWJvb2wJCWhhc19iZ3dvcmtl cjsKLQlCYWNrZ3JvdW5kV29ya2VyIGJnd29ya2VyOwotCi0JY2hhcgkJRGF0YURpcltNQVhQ R1BBVEhdOwotCWludDMyCQlNeUNhbmNlbEtleTsKLQlpbnQJCQlNeVBNQ2hpbGRTbG90Owot I2lmbmRlZiBXSU4zMgotCXVuc2lnbmVkIGxvbmcgVXNlZFNobWVtU2VnSUQ7Ci0jZWxzZQot CXZvaWQJICAgKlNobWVtUHJvdGVjdGl2ZVJlZ2lvbjsKLQlIQU5ETEUJCVVzZWRTaG1lbVNl Z0lEOwotI2VuZGlmCi0Jdm9pZAkgICAqVXNlZFNobWVtU2VnQWRkcjsKLQlzbG9ja190ICAg ICpTaG1lbUxvY2s7Ci0JQmFja2VuZCAgICAqU2htZW1CYWNrZW5kQXJyYXk7Ci0jaWZuZGVm IEhBVkVfU1BJTkxPQ0tTCi0JUEdTZW1hcGhvcmUgKlNwaW5sb2NrU2VtYUFycmF5OwotI2Vu ZGlmCi0JaW50CQkJTmFtZWRMV0xvY2tUcmFuY2hlUmVxdWVzdHM7Ci0JTmFtZWRMV0xvY2tU cmFuY2hlICpOYW1lZExXTG9ja1RyYW5jaGVBcnJheTsKLQlMV0xvY2tQYWRkZWQgKk1haW5M V0xvY2tBcnJheTsKLQlzbG9ja190ICAgICpQcm9jU3RydWN0TG9jazsKLQlQUk9DX0hEUiAg ICpQcm9jR2xvYmFsOwotCVBHUFJPQwkgICAqQXV4aWxpYXJ5UHJvY3M7Ci0JUEdQUk9DCSAg ICpQcmVwYXJlZFhhY3RQcm9jczsKLQlQTVNpZ25hbERhdGEgKlBNU2lnbmFsU3RhdGU7Ci0J cGlkX3QJCVBvc3RtYXN0ZXJQaWQ7Ci0JVGltZXN0YW1wVHogUGdTdGFydFRpbWU7Ci0JVGlt ZXN0YW1wVHogUGdSZWxvYWRUaW1lOwotCXBnX3RpbWVfdAlmaXJzdF9zeXNsb2dnZXJfZmls ZV90aW1lOwotCWJvb2wJCXJlZGlyZWN0aW9uX2RvbmU7Ci0JYm9vbAkJSXNCaW5hcnlVcGdy YWRlOwotCWJvb2wJCXF1ZXJ5X2lkX2VuYWJsZWQ7Ci0JaW50CQkJbWF4X3NhZmVfZmRzOwot CWludAkJCU1heEJhY2tlbmRzOwotI2lmZGVmIFdJTjMyCi0JSEFORExFCQlQb3N0bWFzdGVy SGFuZGxlOwotCUhBTkRMRQkJaW5pdGlhbF9zaWduYWxfcGlwZTsKLQlIQU5ETEUJCXN5c2xv Z1BpcGVbMl07Ci0jZWxzZQotCWludAkJCXBvc3RtYXN0ZXJfYWxpdmVfZmRzWzJdOwotCWlu dAkJCXN5c2xvZ1BpcGVbMl07Ci0jZW5kaWYKLQljaGFyCQlteV9leGVjX3BhdGhbTUFYUEdQ QVRIXTsKLQljaGFyCQlwa2dsaWJfcGF0aFtNQVhQR1BBVEhdOwotfSBCYWNrZW5kUGFyYW1l dGVyczsKIAotc3RhdGljIHZvaWQgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwg Q2xpZW50U29ja2V0ICoqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKip3b3JrZXIp Owotc3RhdGljIHZvaWQgcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1l dGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29y a2VyICoqd29ya2VyKTsKIAotI2lmbmRlZiBXSU4zMgotc3RhdGljIGJvb2wgc2F2ZV9iYWNr ZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAq Y2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcik7Ci0jZWxzZQotc3RhdGlj IGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0s IENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKndvcmtlciwK LQkJCQkJCQkJICAgSEFORExFIGNoaWxkUHJvY2VzcywgcGlkX3QgY2hpbGRQaWQpOwotI2Vu ZGlmCisvKiBpbiBsYXVuY2hfYmFja2VuZC5jICovCitleHRlcm4gcGlkX3QgaW50ZXJuYWxf Zm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgQ2xpZW50U29ja2V0ICpjbGllbnRf c29jaywgQmFja2dyb3VuZFdvcmtlciAqd29ya2VyKTsKK2V4dGVybiB2b2lkIHJlYWRfYmFj a2VuZF92YXJpYWJsZXMoY2hhciAqaWQsIENsaWVudFNvY2tldCAqKmNsaWVudF9zb2NrLCBC YWNrZ3JvdW5kV29ya2VyICoqd29ya2VyKTsKIAogc3RhdGljIHZvaWQgU2htZW1CYWNrZW5k QXJyYXlBZGQoQmFja2VuZCAqYm4pOwogc3RhdGljIHZvaWQgU2htZW1CYWNrZW5kQXJyYXlS ZW1vdmUoQmFja2VuZCAqYm4pOwpAQCAtMTExNiwxMSArMTAzNiwxMSBAQCBQb3N0bWFzdGVy TWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJLyoKIAkgKiBDbGVhbiBvdXQgdGhl IHRlbXAgZGlyZWN0b3J5IHVzZWQgdG8gdHJhbnNtaXQgcGFyYW1ldGVycyB0byBjaGlsZAot CSAqIHByb2Nlc3NlcyAoc2VlIGludGVybmFsX2ZvcmtleGVjLCBiZWxvdykuICBXZSBtdXN0 IGRvIHRoaXMgYmVmb3JlCi0JICogbGF1bmNoaW5nIGFueSBjaGlsZCBwcm9jZXNzZXMsIGVs c2Ugd2UgaGF2ZSBhIHJhY2UgY29uZGl0aW9uOiB3ZSBjb3VsZAotCSAqIHJlbW92ZSBhIHBh cmFtZXRlciBmaWxlIGJlZm9yZSB0aGUgY2hpbGQgY2FuIHJlYWQgaXQuICBJdCBzaG91bGQg YmUKLQkgKiBzYWZlIHRvIGRvIHNvIG5vdywgYmVjYXVzZSB3ZSB2ZXJpZmllZCBlYXJsaWVy IHRoYXQgdGhlcmUgYXJlIG5vCi0JICogY29uZmxpY3RpbmcgUG9zdGdyZXMgcHJvY2Vzc2Vz IGluIHRoaXMgZGF0YSBkaXJlY3RvcnkuCisJICogcHJvY2Vzc2VzIChzZWUgaW50ZXJuYWxf Zm9ya2V4ZWMpLiAgV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSBsYXVuY2hpbmcKKwkgKiBhbnkg Y2hpbGQgcHJvY2Vzc2VzLCBlbHNlIHdlIGhhdmUgYSByYWNlIGNvbmRpdGlvbjogd2UgY291 bGQgcmVtb3ZlIGEKKwkgKiBwYXJhbWV0ZXIgZmlsZSBiZWZvcmUgdGhlIGNoaWxkIGNhbiBy ZWFkIGl0LiAgSXQgc2hvdWxkIGJlIHNhZmUgdG8gZG8KKwkgKiBzbyBub3csIGJlY2F1c2Ug d2UgdmVyaWZpZWQgZWFybGllciB0aGF0IHRoZXJlIGFyZSBubyBjb25mbGljdGluZworCSAq IFBvc3RncmVzIHByb2Nlc3NlcyBpbiB0aGlzIGRhdGEgZGlyZWN0b3J5LgogCSAqLwogCVJl bW92ZVBnVGVtcEZpbGVzSW5EaXIoUEdfVEVNUF9GSUxFU19ESVIsIHRydWUsIGZhbHNlKTsK ICNlbmRpZgpAQCAtNDQ1NSwyOTkgKzQzNzUsNiBAQCBiYWNrZW5kX2ZvcmtleGVjKENsaWVu dFNvY2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0ZSBjYWMpCiAJcmV0dXJuIGludGVybmFs X2ZvcmtleGVjKGFjLCBhdiwgY2xpZW50X3NvY2ssIE5VTEwpOwogfQogCi0jaWZuZGVmIFdJ TjMyCi0KLS8qCi0gKiBpbnRlcm5hbF9mb3JrZXhlYyBub24td2luMzIgaW1wbGVtZW50YXRp b24KLSAqCi0gKiAtIHdyaXRlcyBvdXQgYmFja2VuZCB2YXJpYWJsZXMgdG8gdGhlIHBhcmFt ZXRlciBmaWxlCi0gKiAtIGZvcmsoKTpzLCBhbmQgdGhlbiBleGVjKCk6cyB0aGUgY2hpbGQg cHJvY2VzcwotICovCi1zdGF0aWMgcGlkX3QKLWludGVybmFsX2ZvcmtleGVjKGludCBhcmdj LCBjaGFyICphcmd2W10sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2tncm91bmRX b3JrZXIgKndvcmtlcikKLXsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyB0bXBCYWNrZW5kRmls ZU51bSA9IDA7Ci0JcGlkX3QJCXBpZDsKLQljaGFyCQl0bXBmaWxlbmFtZVtNQVhQR1BBVEhd OwotCUJhY2tlbmRQYXJhbWV0ZXJzIHBhcmFtOwotCUZJTEUJICAgKmZwOwotCi0JLyoKLQkg KiBNYWtlIHN1cmUgcGFkZGluZyBieXRlcyBhcmUgaW5pdGlhbGl6ZWQsIHRvIHByZXZlbnQg VmFsZ3JpbmQgZnJvbQotCSAqIGNvbXBsYWluaW5nIGFib3V0IHdyaXRpbmcgdW5pbml0aWFs aXplZCBieXRlcyB0byB0aGUgZmlsZS4gIFRoaXMgaXNuJ3QKLQkgKiBwZXJmb3JtYW5jZSBj cml0aWNhbCwgYW5kIHRoZSB3aW4zMiBpbXBsZW1lbnRhdGlvbiBpbml0aWFsaXplcyB0aGUK LQkgKiBwYWRkaW5nIGJ5dGVzIHRvIHplcm9zLCBzbyBkbyBpdCBldmVuIHdoZW4gbm90IHVz aW5nIFZhbGdyaW5kLgotCSAqLwotCW1lbXNldCgmcGFyYW0sIDAsIHNpemVvZihCYWNrZW5k UGFyYW1ldGVycykpOwotCi0JaWYgKCFzYXZlX2JhY2tlbmRfdmFyaWFibGVzKCZwYXJhbSwg Y2xpZW50X3NvY2ssIHdvcmtlcikpCi0JCXJldHVybiAtMTsJCQkJLyogbG9nIG1hZGUgYnkg c2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyAqLwotCi0JLyogQ2FsY3VsYXRlIG5hbWUgZm9yIHRl bXAgZmlsZSAqLwotCXNucHJpbnRmKHRtcGZpbGVuYW1lLCBNQVhQR1BBVEgsICIlcy8lcy5i YWNrZW5kX3Zhci4lZC4lbHUiLAotCQkJIFBHX1RFTVBfRklMRVNfRElSLCBQR19URU1QX0ZJ TEVfUFJFRklYLAotCQkJIE15UHJvY1BpZCwgKyt0bXBCYWNrZW5kRmlsZU51bSk7Ci0KLQkv KiBPcGVuIGZpbGUgKi8KLQlmcCA9IEFsbG9jYXRlRmlsZSh0bXBmaWxlbmFtZSwgUEdfQklO QVJZX1cpOwotCWlmICghZnApCi0JewotCQkvKgotCQkgKiBBcyBpbiBPcGVuVGVtcG9yYXJ5 RmlsZUluVGFibGVzcGFjZSwgdHJ5IHRvIG1ha2UgdGhlIHRlbXAtZmlsZQotCQkgKiBkaXJl Y3RvcnksIGlnbm9yaW5nIGVycm9ycy4KLQkJICovCi0JCSh2b2lkKSBNYWtlUEdEaXJlY3Rv cnkoUEdfVEVNUF9GSUxFU19ESVIpOwotCi0JCWZwID0gQWxsb2NhdGVGaWxlKHRtcGZpbGVu YW1lLCBQR19CSU5BUllfVyk7Ci0JCWlmICghZnApCi0JCXsKLQkJCWVyZXBvcnQoTE9HLAot CQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQg bm90IGNyZWF0ZSBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkJCXRtcGZpbGVuYW1lKSkpOwot CQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JaWYgKGZ3cml0ZSgmcGFyYW0sIHNpemVvZihw YXJhbSksIDEsIGZwKSAhPSAxKQotCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIHRvIGZp bGUgXCIlc1wiOiAlbSIsIHRtcGZpbGVuYW1lKSkpOwotCQlGcmVlRmlsZShmcCk7Ci0JCXJl dHVybiAtMTsKLQl9Ci0KLQkvKiBSZWxlYXNlIGZpbGUgKi8KLQlpZiAoRnJlZUZpbGUoZnAp KQotCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCks Ci0JCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiOiAlbSIsIHRt cGZpbGVuYW1lKSkpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogTWFrZSBzdXJlIGNhbGxl ciBzZXQgdXAgYXJndiBwcm9wZXJseSAqLwotCUFzc2VydChhcmdjID49IDMpOwotCUFzc2Vy dChhcmd2W2FyZ2NdID09IE5VTEwpOwotCUFzc2VydChzdHJuY21wKGFyZ3ZbMV0sICItLWZv cmsiLCA2KSA9PSAwKTsKLQlBc3NlcnQoYXJndlsyXSA9PSBOVUxMKTsKLQotCS8qIEluc2Vy dCB0ZW1wIGZpbGUgbmFtZSBhZnRlciAtLWZvcmsgYXJndW1lbnQgKi8KLQlhcmd2WzJdID0g dG1wZmlsZW5hbWU7Ci0KLQkvKiBGaXJlIG9mZiBleGVjdiBpbiBjaGlsZCAqLwotCWlmICgo cGlkID0gZm9ya19wcm9jZXNzKCkpID09IDApCi0JewotCQlpZiAoZXhlY3YocG9zdGdyZXNf ZXhlY19wYXRoLCBhcmd2KSA8IDApCi0JCXsKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJy bXNnKCJjb3VsZCBub3QgZXhlY3V0ZSBzZXJ2ZXIgcHJvY2VzcyBcIiVzXCI6ICVtIiwKLQkJ CQkJCQlwb3N0Z3Jlc19leGVjX3BhdGgpKSk7Ci0JCQkvKiBXZSdyZSBhbHJlYWR5IGluIHRo ZSBjaGlsZCBwcm9jZXNzIGhlcmUsIGNhbid0IHJldHVybiAqLwotCQkJZXhpdCgxKTsKLQkJ fQotCX0KLQotCXJldHVybiBwaWQ7CQkJCQkvKiBQYXJlbnQgcmV0dXJucyBwaWQsIG9yIC0x IG9uIGZvcmsgZmFpbHVyZSAqLwotfQotI2Vsc2UJCQkJCQkJLyogV0lOMzIgKi8KLQotLyoK LSAqIGludGVybmFsX2ZvcmtleGVjIHdpbjMyIGltcGxlbWVudGF0aW9uCi0gKgotICogLSBz dGFydHMgYmFja2VuZCB1c2luZyBDcmVhdGVQcm9jZXNzKCksIGluIHN1c3BlbmRlZCBzdGF0 ZQotICogLSB3cml0ZXMgb3V0IGJhY2tlbmQgdmFyaWFibGVzIHRvIHRoZSBwYXJhbWV0ZXIg ZmlsZQotICoJLSBkdXJpbmcgdGhpcywgZHVwbGljYXRlcyBoYW5kbGVzIGFuZCBzb2NrZXRz IHJlcXVpcmVkIGZvcgotICoJICBpbmhlcml0YW5jZSBpbnRvIHRoZSBuZXcgcHJvY2Vzcwot ICogLSByZXN1bWVzIGV4ZWN1dGlvbiBvZiB0aGUgbmV3IHByb2Nlc3Mgb25jZSB0aGUgYmFj a2VuZCBwYXJhbWV0ZXIKLSAqCSBmaWxlIGlzIGNvbXBsZXRlLgotICovCi1zdGF0aWMgcGlk X3QKLWludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIFBvcnQgKnBv cnQsIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcikKLXsKLQlpbnQJCQlyZXRyeV9jb3VudCA9 IDA7Ci0JU1RBUlRVUElORk8gc2k7Ci0JUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKLQlpbnQJ CQlpOwotCWludAkJCWo7Ci0JY2hhcgkJY21kTGluZVtNQVhQR1BBVEggKiAyXTsKLQlIQU5E TEUJCXBhcmFtSGFuZGxlOwotCUJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbTsKLQlTRUNVUklU WV9BVFRSSUJVVEVTIHNhOwotCWNoYXIJCXBhcmFtSGFuZGxlU3RyWzMyXTsKLQl3aW4zMl9k ZWFkY2hpbGRfd2FpdGluZm8gKmNoaWxkaW5mbzsKLQotCS8qIE1ha2Ugc3VyZSBjYWxsZXIg c2V0IHVwIGFyZ3YgcHJvcGVybHkgKi8KLQlBc3NlcnQoYXJnYyA+PSAzKTsKLQlBc3NlcnQo YXJndlthcmdjXSA9PSBOVUxMKTsKLQlBc3NlcnQoc3RybmNtcChhcmd2WzFdLCAiLS1mb3Jr IiwgNikgPT0gMCk7Ci0JQXNzZXJ0KGFyZ3ZbMl0gPT0gTlVMTCk7Ci0KLQkvKiBSZXN1bWUg aGVyZSBpZiB3ZSBuZWVkIHRvIHJldHJ5ICovCi1yZXRyeToKLQotCS8qIFNldCB1cCBzaGFy ZWQgbWVtb3J5IGZvciBwYXJhbWV0ZXIgcGFzc2luZyAqLwotCVplcm9NZW1vcnkoJnNhLCBz aXplb2Yoc2EpKTsKLQlzYS5uTGVuZ3RoID0gc2l6ZW9mKHNhKTsKLQlzYS5iSW5oZXJpdEhh bmRsZSA9IFRSVUU7Ci0JcGFyYW1IYW5kbGUgPSBDcmVhdGVGaWxlTWFwcGluZyhJTlZBTElE X0hBTkRMRV9WQUxVRSwKLQkJCQkJCQkJCSZzYSwKLQkJCQkJCQkJCVBBR0VfUkVBRFdSSVRF LAotCQkJCQkJCQkJMCwKLQkJCQkJCQkJCXNpemVvZihCYWNrZW5kUGFyYW1ldGVycyksCi0J CQkJCQkJCQlOVUxMKTsKLQlpZiAocGFyYW1IYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFM VUUpCi0JewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY3JlYXRl IGJhY2tlbmQgcGFyYW1ldGVyIGZpbGUgbWFwcGluZzogZXJyb3IgY29kZSAlbHUiLAotCQkJ CQkJR2V0TGFzdEVycm9yKCkpKSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlwYXJhbSA9IE1h cFZpZXdPZkZpbGUocGFyYW1IYW5kbGUsIEZJTEVfTUFQX1dSSVRFLCAwLCAwLCBzaXplb2Yo QmFja2VuZFBhcmFtZXRlcnMpKTsKLQlpZiAoIXBhcmFtKQotCXsKLQkJZXJlcG9ydChMT0cs Ci0JCQkJKGVycm1zZygiY291bGQgbm90IG1hcCBiYWNrZW5kIHBhcmFtZXRlciBtZW1vcnk6 IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJCUdldExhc3RFcnJvcigpKSkpOwotCQlDbG9zZUhh bmRsZShwYXJhbUhhbmRsZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBJbnNlcnQgdGVt cCBmaWxlIG5hbWUgYWZ0ZXIgLS1mb3JrIGFyZ3VtZW50ICovCi0jaWZkZWYgX1dJTjY0Ci0J c3ByaW50ZihwYXJhbUhhbmRsZVN0ciwgIiVsbHUiLCAoTE9OR19QVFIpIHBhcmFtSGFuZGxl KTsKLSNlbHNlCi0Jc3ByaW50ZihwYXJhbUhhbmRsZVN0ciwgIiVsdSIsIChEV09SRCkgcGFy YW1IYW5kbGUpOwotI2VuZGlmCi0JYXJndlsyXSA9IHBhcmFtSGFuZGxlU3RyOwotCi0JLyog Rm9ybWF0IHRoZSBjbWQgbGluZSAqLwotCWNtZExpbmVbc2l6ZW9mKGNtZExpbmUpIC0gMV0g PSAnXDAnOwotCWNtZExpbmVbc2l6ZW9mKGNtZExpbmUpIC0gMl0gPSAnXDAnOwotCXNucHJp bnRmKGNtZExpbmUsIHNpemVvZihjbWRMaW5lKSAtIDEsICJcIiVzXCIiLCBwb3N0Z3Jlc19l eGVjX3BhdGgpOwotCWkgPSAwOwotCXdoaWxlIChhcmd2WysraV0gIT0gTlVMTCkKLQl7Ci0J CWogPSBzdHJsZW4oY21kTGluZSk7Ci0JCXNucHJpbnRmKGNtZExpbmUgKyBqLCBzaXplb2Yo Y21kTGluZSkgLSAxIC0gaiwgIiBcIiVzXCIiLCBhcmd2W2ldKTsKLQl9Ci0JaWYgKGNtZExp bmVbc2l6ZW9mKGNtZExpbmUpIC0gMl0gIT0gJ1wwJykKLQl7Ci0JCWVyZXBvcnQoTE9HLAot CQkJCShlcnJtc2coInN1YnByb2Nlc3MgY29tbWFuZCBsaW5lIHRvbyBsb25nIikpKTsKLQkJ VW5tYXBWaWV3T2ZGaWxlKHBhcmFtKTsKLQkJQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpOwot CQlyZXR1cm4gLTE7Ci0JfQotCi0JbWVtc2V0KCZwaSwgMCwgc2l6ZW9mKHBpKSk7Ci0JbWVt c2V0KCZzaSwgMCwgc2l6ZW9mKHNpKSk7Ci0Jc2kuY2IgPSBzaXplb2Yoc2kpOwotCi0JLyoK LQkgKiBDcmVhdGUgdGhlIHN1YnByb2Nlc3MgaW4gYSBzdXNwZW5kZWQgc3RhdGUuIFRoaXMg d2lsbCBiZSByZXN1bWVkIGxhdGVyLAotCSAqIG9uY2Ugd2UgaGF2ZSB3cml0dGVuIG91dCB0 aGUgcGFyYW1ldGVyIGZpbGUuCi0JICovCi0JaWYgKCFDcmVhdGVQcm9jZXNzKE5VTEwsIGNt ZExpbmUsIE5VTEwsIE5VTEwsIFRSVUUsIENSRUFURV9TVVNQRU5ERUQsCi0JCQkJCSAgIE5V TEwsIE5VTEwsICZzaSwgJnBpKSkKLQl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2co IkNyZWF0ZVByb2Nlc3MoKSBjYWxsIGZhaWxlZDogJW0gKGVycm9yIGNvZGUgJWx1KSIsCi0J CQkJCQlHZXRMYXN0RXJyb3IoKSkpKTsKLQkJVW5tYXBWaWV3T2ZGaWxlKHBhcmFtKTsKLQkJ Q2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKCFz YXZlX2JhY2tlbmRfdmFyaWFibGVzKHBhcmFtLCBwb3J0LCB3b3JrZXIsIHBpLmhQcm9jZXNz LCBwaS5kd1Byb2Nlc3NJZCkpCi0JewotCQkvKgotCQkgKiBsb2cgbWFkZSBieSBzYXZlX2Jh Y2tlbmRfdmFyaWFibGVzLCBidXQgd2UgaGF2ZSB0byBjbGVhbiB1cCB0aGUKLQkJICogbWVz cyB3aXRoIHRoZSBoYWxmLXN0YXJ0ZWQgcHJvY2VzcwotCQkgKi8KLQkJaWYgKCFUZXJtaW5h dGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAyNTUpKQotCQkJZXJlcG9ydChMT0csCi0JCQkJCShl cnJtc2dfaW50ZXJuYWwoImNvdWxkIG5vdCB0ZXJtaW5hdGUgdW5zdGFydGVkIHByb2Nlc3M6 IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJCQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsKLQkJQ2xv c2VIYW5kbGUocGkuaFByb2Nlc3MpOwotCQlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLQkJ VW5tYXBWaWV3T2ZGaWxlKHBhcmFtKTsKLQkJQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpOwot CQlyZXR1cm4gLTE7CQkJCS8qIGxvZyBtYWRlIGJ5IHNhdmVfYmFja2VuZF92YXJpYWJsZXMg Ki8KLQl9Ci0KLQkvKiBEcm9wIHRoZSBwYXJhbWV0ZXIgc2hhcmVkIG1lbW9yeSB0aGF0IGlz IG5vdyBpbmhlcml0ZWQgdG8gdGhlIGJhY2tlbmQgKi8KLQlpZiAoIVVubWFwVmlld09mRmls ZShwYXJhbSkpCi0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImNvdWxkIG5vdCB1bm1h cCB2aWV3IG9mIGJhY2tlbmQgcGFyYW1ldGVyIGZpbGU6IGVycm9yIGNvZGUgJWx1IiwKLQkJ CQkJCUdldExhc3RFcnJvcigpKSkpOwotCWlmICghQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUp KQotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgaGFuZGxl IHRvIGJhY2tlbmQgcGFyYW1ldGVyIGZpbGU6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJCUdl dExhc3RFcnJvcigpKSkpOwotCi0JLyoKLQkgKiBSZXNlcnZlIHRoZSBtZW1vcnkgcmVnaW9u IHVzZWQgYnkgb3VyIG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGJlZm9yZQotCSAqIHdl IHJlc3VtZSB0aGUgY2hpbGQgcHJvY2Vzcy4gIE5vcm1hbGx5IHRoaXMgc2hvdWxkIHN1Y2Nl ZWQsIGJ1dCBpZiBBU0xSCi0JICogaXMgYWN0aXZlIHRoZW4gaXQgbWlnaHQgc29tZXRpbWVz IGZhaWwgZHVlIHRvIHRoZSBzdGFjayBvciBoZWFwIGhhdmluZwotCSAqIGdvdHRlbiBtYXBw ZWQgaW50byB0aGF0IHJhbmdlLiAgSW4gdGhhdCBjYXNlLCBqdXN0IHRlcm1pbmF0ZSB0aGUK LQkgKiBwcm9jZXNzIGFuZCByZXRyeS4KLQkgKi8KLQlpZiAoIXBnd2luMzJfUmVzZXJ2ZVNo YXJlZE1lbW9yeVJlZ2lvbihwaS5oUHJvY2VzcykpCi0JewotCQkvKiBwZ3dpbjMyX1Jlc2Vy dmVTaGFyZWRNZW1vcnlSZWdpb24gYWxyZWFkeSBtYWRlIGEgbG9nIGVudHJ5ICovCi0JCWlm ICghVGVybWluYXRlUHJvY2VzcyhwaS5oUHJvY2VzcywgMjU1KSkKLQkJCWVyZXBvcnQoTE9H LAotCQkJCQkoZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgdGVybWluYXRlIHByb2Nlc3Mg dGhhdCBmYWlsZWQgdG8gcmVzZXJ2ZSBtZW1vcnk6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJ CQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsKLQkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOwot CQlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLQkJaWYgKCsrcmV0cnlfY291bnQgPCAxMDAp Ci0JCQlnb3RvIHJldHJ5OwotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJnaXZpbmcg dXAgYWZ0ZXIgdG9vIG1hbnkgdHJpZXMgdG8gcmVzZXJ2ZSBzaGFyZWQgbWVtb3J5IiksCi0J CQkJIGVycmhpbnQoIlRoaXMgbWlnaHQgYmUgY2F1c2VkIGJ5IEFTTFIgb3IgYW50aXZpcnVz IHNvZnR3YXJlLiIpKSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqIE5vdyB0aGF0 IHRoZSBiYWNrZW5kIHZhcmlhYmxlcyBhcmUgd3JpdHRlbiBvdXQsIHdlIHN0YXJ0IHRoZSBj aGlsZAotCSAqIHRocmVhZCBzbyBpdCBjYW4gc3RhcnQgaW5pdGlhbGl6aW5nIHdoaWxlIHdl IHNldCB1cCB0aGUgcmVzdCBvZiB0aGUKLQkgKiBwYXJlbnQgc3RhdGUuCi0JICovCi0JaWYg KFJlc3VtZVRocmVhZChwaS5oVGhyZWFkKSA9PSAtMSkKLQl7Ci0JCWlmICghVGVybWluYXRl UHJvY2VzcyhwaS5oUHJvY2VzcywgMjU1KSkKLQkJewotCQkJZXJlcG9ydChMT0csCi0JCQkJ CShlcnJtc2dfaW50ZXJuYWwoImNvdWxkIG5vdCB0ZXJtaW5hdGUgdW5zdGFydGFibGUgcHJv Y2VzczogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOwot CQkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOwotCQkJQ2xvc2VIYW5kbGUocGkuaFRocmVh ZCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOwot CQlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1z Z19pbnRlcm5hbCgiY291bGQgbm90IHJlc3VtZSB0aHJlYWQgb2YgdW5zdGFydGVkIHByb2Nl c3M6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOwotCQly ZXR1cm4gLTE7Ci0JfQotCi0JLyogU2V0IHVwIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBjaGls ZCBwcm9jZXNzIGRpZXMgKi8KLQlwZ3dpbjMyX3JlZ2lzdGVyX2RlYWRjaGlsZF9jYWxsYmFj ayhwaS5oUHJvY2VzcywgcGkuZHdQcm9jZXNzSWQpOwotCi0JLyogRG9uJ3QgY2xvc2UgcGku aFByb2Nlc3MsIGl0J3Mgb3duZWQgYnkgdGhlIGRlYWRjaGlsZCBjYWxsYmFjayBub3cgKi8K LQotCUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotCi0JcmV0dXJuIHBpLmR3UHJvY2Vzc0lk OwotfQotI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCi0KLQogLyoKICAqIFN1YlBvc3RtYXN0 ZXJNYWluIC0tIEdldCB0aGUgZm9yay9leGVjJ2QgcHJvY2VzcyBpbnRvIGEgc3RhdGUgZXF1 aXZhbGVudAogICoJCQl0byB3aGF0IGl0IHdvdWxkIGJlIGlmIHdlJ2Qgc2ltcGx5IGZvcmtl ZCBvbiBVbml4LCBhbmQgdGhlbgpAQCAtNTkzOSwzNzIgKzU1NjYsNiBAQCBQb3N0bWFzdGVy TWFya1BJREZvcldvcmtlck5vdGlmeShpbnQgcGlkKQogCiAjaWZkZWYgRVhFQ19CQUNLRU5E CiAKLS8qCi0gKiBUaGUgZm9sbG93aW5nIG5lZWQgdG8gYmUgYXZhaWxhYmxlIHRvIHRoZSBz YXZlL3Jlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMKLSAqIGZ1bmN0aW9ucy4gIFRoZXkgYXJl IG1hcmtlZCBOT05fRVhFQ19TVEFUSUMgaW4gdGhlaXIgaG9tZSBtb2R1bGVzLgotICovCi1l eHRlcm4gc2xvY2tfdCAqU2htZW1Mb2NrOwotZXh0ZXJuIHNsb2NrX3QgKlByb2NTdHJ1Y3RM b2NrOwotZXh0ZXJuIFBHUFJPQyAqQXV4aWxpYXJ5UHJvY3M7Ci1leHRlcm4gUE1TaWduYWxE YXRhICpQTVNpZ25hbFN0YXRlOwotZXh0ZXJuIHBnX3RpbWVfdCBmaXJzdF9zeXNsb2dnZXJf ZmlsZV90aW1lOwotCi0jaWZuZGVmIFdJTjMyCi0jZGVmaW5lIHdyaXRlX2luaGVyaXRhYmxl X3NvY2tldChkZXN0LCBzcmMsIGNoaWxkcGlkKSAoKCooZGVzdCkgPSAoc3JjKSksIHRydWUp Ci0jZGVmaW5lIHJlYWRfaW5oZXJpdGFibGVfc29ja2V0KGRlc3QsIHNyYykgKCooZGVzdCkg PSAqKHNyYykpCi0jZWxzZQotc3RhdGljIGJvb2wgd3JpdGVfZHVwbGljYXRlZF9oYW5kbGUo SEFORExFICpkZXN0LCBIQU5ETEUgc3JjLCBIQU5ETEUgY2hpbGQpOwotc3RhdGljIGJvb2wg d3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KEluaGVyaXRhYmxlU29ja2V0ICpkZXN0LCBTT0NL RVQgc3JjLAotCQkJCQkJCQkJIHBpZF90IGNoaWxkUGlkKTsKLXN0YXRpYyB2b2lkIHJlYWRf aW5oZXJpdGFibGVfc29ja2V0KFNPQ0tFVCAqZGVzdCwgSW5oZXJpdGFibGVTb2NrZXQgKnNy Yyk7Ci0jZW5kaWYKLQotCi0vKiBTYXZlIGNyaXRpY2FsIGJhY2tlbmQgdmFyaWFibGVzIGlu dG8gdGhlIEJhY2tlbmRQYXJhbWV0ZXJzIHN0cnVjdCAqLwotI2lmbmRlZiBXSU4zMgotc3Rh dGljIGJvb2wKLXNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBh cmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29ya2VyICp3b3Jr ZXIpCi0jZWxzZQotc3RhdGljIGJvb2wKLXNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2Vu ZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBCYWNrZ3Jv dW5kV29ya2VyICp3b3JrZXIsCi0JCQkJCSAgIEhBTkRMRSBjaGlsZFByb2Nlc3MsIHBpZF90 IGNoaWxkUGlkKQotI2VuZGlmCi17Ci0JaWYgKGNsaWVudF9zb2NrKQotCXsKLQkJbWVtY3B5 KCZwYXJhbS0+Y2xpZW50X3NvY2ssIGNsaWVudF9zb2NrLCBzaXplb2YoQ2xpZW50U29ja2V0 KSk7Ci0JCWlmICghd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KCZwYXJhbS0+aW5oX3NvY2ss IGNsaWVudF9zb2NrLT5zb2NrLCBjaGlsZFBpZCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCXBh cmFtLT5oYXNfY2xpZW50X3NvY2sgPSB0cnVlOwotCX0KLQllbHNlCi0JewotCQltZW1zZXQo JnBhcmFtLT5jbGllbnRfc29jaywgMCwgc2l6ZW9mKENsaWVudFNvY2tldCkpOwotCQlwYXJh bS0+aGFzX2NsaWVudF9zb2NrID0gZmFsc2U7Ci0JfQotCi0JaWYgKHdvcmtlcikKLQl7Ci0J CW1lbWNweSgmcGFyYW0tPmJnd29ya2VyLCB3b3JrZXIsIHNpemVvZihCYWNrZ3JvdW5kV29y a2VyKSk7Ci0JCXBhcmFtLT5oYXNfYmd3b3JrZXIgPSB0cnVlOwotCX0KLQllbHNlCi0Jewot CQltZW1zZXQoJnBhcmFtLT5iZ3dvcmtlciwgMCwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIp KTsKLQkJcGFyYW0tPmhhc19iZ3dvcmtlciA9IGZhbHNlOwotCX0KLQotCXN0cmxjcHkocGFy YW0tPkRhdGFEaXIsIERhdGFEaXIsIE1BWFBHUEFUSCk7Ci0KLQlwYXJhbS0+TXlDYW5jZWxL ZXkgPSBNeUNhbmNlbEtleTsKLQlwYXJhbS0+TXlQTUNoaWxkU2xvdCA9IE15UE1DaGlsZFNs b3Q7Ci0KLSNpZmRlZiBXSU4zMgotCXBhcmFtLT5TaG1lbVByb3RlY3RpdmVSZWdpb24gPSBT aG1lbVByb3RlY3RpdmVSZWdpb247Ci0jZW5kaWYKLQlwYXJhbS0+VXNlZFNobWVtU2VnSUQg PSBVc2VkU2htZW1TZWdJRDsKLQlwYXJhbS0+VXNlZFNobWVtU2VnQWRkciA9IFVzZWRTaG1l bVNlZ0FkZHI7Ci0KLQlwYXJhbS0+U2htZW1Mb2NrID0gU2htZW1Mb2NrOwotCXBhcmFtLT5T aG1lbUJhY2tlbmRBcnJheSA9IFNobWVtQmFja2VuZEFycmF5OwotCi0jaWZuZGVmIEhBVkVf U1BJTkxPQ0tTCi0JcGFyYW0tPlNwaW5sb2NrU2VtYUFycmF5ID0gU3BpbmxvY2tTZW1hQXJy YXk7Ci0jZW5kaWYKLQlwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlUmVxdWVzdHMgPSBOYW1l ZExXTG9ja1RyYW5jaGVSZXF1ZXN0czsKLQlwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlQXJy YXkgPSBOYW1lZExXTG9ja1RyYW5jaGVBcnJheTsKLQlwYXJhbS0+TWFpbkxXTG9ja0FycmF5 ID0gTWFpbkxXTG9ja0FycmF5OwotCXBhcmFtLT5Qcm9jU3RydWN0TG9jayA9IFByb2NTdHJ1 Y3RMb2NrOwotCXBhcmFtLT5Qcm9jR2xvYmFsID0gUHJvY0dsb2JhbDsKLQlwYXJhbS0+QXV4 aWxpYXJ5UHJvY3MgPSBBdXhpbGlhcnlQcm9jczsKLQlwYXJhbS0+UHJlcGFyZWRYYWN0UHJv Y3MgPSBQcmVwYXJlZFhhY3RQcm9jczsKLQlwYXJhbS0+UE1TaWduYWxTdGF0ZSA9IFBNU2ln bmFsU3RhdGU7Ci0KLQlwYXJhbS0+UG9zdG1hc3RlclBpZCA9IFBvc3RtYXN0ZXJQaWQ7Ci0J cGFyYW0tPlBnU3RhcnRUaW1lID0gUGdTdGFydFRpbWU7Ci0JcGFyYW0tPlBnUmVsb2FkVGlt ZSA9IFBnUmVsb2FkVGltZTsKLQlwYXJhbS0+Zmlyc3Rfc3lzbG9nZ2VyX2ZpbGVfdGltZSA9 IGZpcnN0X3N5c2xvZ2dlcl9maWxlX3RpbWU7Ci0KLQlwYXJhbS0+cmVkaXJlY3Rpb25fZG9u ZSA9IHJlZGlyZWN0aW9uX2RvbmU7Ci0JcGFyYW0tPklzQmluYXJ5VXBncmFkZSA9IElzQmlu YXJ5VXBncmFkZTsKLQlwYXJhbS0+cXVlcnlfaWRfZW5hYmxlZCA9IHF1ZXJ5X2lkX2VuYWJs ZWQ7Ci0JcGFyYW0tPm1heF9zYWZlX2ZkcyA9IG1heF9zYWZlX2ZkczsKLQotCXBhcmFtLT5N YXhCYWNrZW5kcyA9IE1heEJhY2tlbmRzOwotCi0jaWZkZWYgV0lOMzIKLQlwYXJhbS0+UG9z dG1hc3RlckhhbmRsZSA9IFBvc3RtYXN0ZXJIYW5kbGU7Ci0JaWYgKCF3cml0ZV9kdXBsaWNh dGVkX2hhbmRsZSgmcGFyYW0tPmluaXRpYWxfc2lnbmFsX3BpcGUsCi0JCQkJCQkJCSBwZ3dp bjMyX2NyZWF0ZV9zaWduYWxfbGlzdGVuZXIoY2hpbGRQaWQpLAotCQkJCQkJCQkgY2hpbGRQ cm9jZXNzKSkKLQkJcmV0dXJuIGZhbHNlOwotI2Vsc2UKLQltZW1jcHkoJnBhcmFtLT5wb3N0 bWFzdGVyX2FsaXZlX2ZkcywgJnBvc3RtYXN0ZXJfYWxpdmVfZmRzLAotCQkgICBzaXplb2Yo cG9zdG1hc3Rlcl9hbGl2ZV9mZHMpKTsKLSNlbmRpZgotCi0JbWVtY3B5KCZwYXJhbS0+c3lz bG9nUGlwZSwgJnN5c2xvZ1BpcGUsIHNpemVvZihzeXNsb2dQaXBlKSk7Ci0KLQlzdHJsY3B5 KHBhcmFtLT5teV9leGVjX3BhdGgsIG15X2V4ZWNfcGF0aCwgTUFYUEdQQVRIKTsKLQotCXN0 cmxjcHkocGFyYW0tPnBrZ2xpYl9wYXRoLCBwa2dsaWJfcGF0aCwgTUFYUEdQQVRIKTsKLQot CXJldHVybiB0cnVlOwotfQotCi0KLSNpZmRlZiBXSU4zMgotLyoKLSAqIER1cGxpY2F0ZSBh IGhhbmRsZSBmb3IgdXNhZ2UgaW4gYSBjaGlsZCBwcm9jZXNzLCBhbmQgd3JpdGUgdGhlIGNo aWxkCi0gKiBwcm9jZXNzIGluc3RhbmNlIG9mIHRoZSBoYW5kbGUgdG8gdGhlIHBhcmFtZXRl ciBmaWxlLgotICovCi1zdGF0aWMgYm9vbAotd3JpdGVfZHVwbGljYXRlZF9oYW5kbGUoSEFO RExFICpkZXN0LCBIQU5ETEUgc3JjLCBIQU5ETEUgY2hpbGRQcm9jZXNzKQotewotCUhBTkRM RQkJaENoaWxkID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0KLQlpZiAoIUR1cGxpY2F0ZUhh bmRsZShHZXRDdXJyZW50UHJvY2VzcygpLAotCQkJCQkJIHNyYywKLQkJCQkJCSBjaGlsZFBy b2Nlc3MsCi0JCQkJCQkgJmhDaGlsZCwKLQkJCQkJCSAwLAotCQkJCQkJIFRSVUUsCi0JCQkJ CQkgRFVQTElDQVRFX0NMT1NFX1NPVVJDRSB8IERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCi0J ewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgZHVw bGljYXRlIGhhbmRsZSB0byBiZSB3cml0dGVuIHRvIGJhY2tlbmQgcGFyYW1ldGVyIGZpbGU6 IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOwotCQlyZXR1 cm4gZmFsc2U7Ci0JfQotCi0JKmRlc3QgPSBoQ2hpbGQ7Ci0JcmV0dXJuIHRydWU7Ci19Ci0K LS8qCi0gKiBEdXBsaWNhdGUgYSBzb2NrZXQgZm9yIHVzYWdlIGluIGEgY2hpbGQgcHJvY2Vz cywgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcKLSAqIHN0cnVjdHVyZSB0byB0aGUgcGFyYW1l dGVyIGZpbGUuCi0gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgYSBudW1iZXIgb2YgTFNQ cyAoTGF5ZXJlZCBTZXJ2aWNlIFByb3ZpZGVycykgdmVyeQotICogY29tbW9uIG9uIFdpbmRv d3MgKGFudGl2aXJ1cywgZmlyZXdhbGxzLCBkb3dubG9hZCBtYW5hZ2VycyBldGMpIGJyZWFr Ci0gKiBzdHJhaWdodCBzb2NrZXQgaW5oZXJpdGFuY2UuCi0gKi8KLXN0YXRpYyBib29sCi13 cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoSW5oZXJpdGFibGVTb2NrZXQgKmRlc3QsIFNPQ0tF VCBzcmMsIHBpZF90IGNoaWxkcGlkKQotewotCWRlc3QtPm9yaWdzb2NrZXQgPSBzcmM7Ci0J aWYgKHNyYyAhPSAwICYmIHNyYyAhPSBQR0lOVkFMSURfU09DS0VUKQotCXsKLQkJLyogQWN0 dWFsIHNvY2tldCAqLwotCQlpZiAoV1NBRHVwbGljYXRlU29ja2V0KHNyYywgY2hpbGRwaWQs ICZkZXN0LT53c2FpbmZvKSAhPSAwKQotCQl7Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVy cm1zZygiY291bGQgbm90IGR1cGxpY2F0ZSBzb2NrZXQgJWQgZm9yIHVzZSBpbiBiYWNrZW5k OiBlcnJvciBjb2RlICVkIiwKLQkJCQkJCQkoaW50KSBzcmMsIFdTQUdldExhc3RFcnJvcigp KSkpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi0v KgotICogUmVhZCBhIGR1cGxpY2F0ZSBzb2NrZXQgc3RydWN0dXJlIGJhY2ssIGFuZCBnZXQg dGhlIHNvY2tldCBkZXNjcmlwdG9yLgotICovCi1zdGF0aWMgdm9pZAotcmVhZF9pbmhlcml0 YWJsZV9zb2NrZXQoU09DS0VUICpkZXN0LCBJbmhlcml0YWJsZVNvY2tldCAqc3JjKQotewot CVNPQ0tFVAkJczsKLQotCWlmIChzcmMtPm9yaWdzb2NrZXQgPT0gUEdJTlZBTElEX1NPQ0tF VCB8fCBzcmMtPm9yaWdzb2NrZXQgPT0gMCkKLQl7Ci0JCS8qIE5vdCBhIHJlYWwgc29ja2V0 ISAqLwotCQkqZGVzdCA9IHNyYy0+b3JpZ3NvY2tldDsKLQl9Ci0JZWxzZQotCXsKLQkJLyog QWN0dWFsIHNvY2tldCwgc28gY3JlYXRlIGZyb20gc3RydWN0dXJlICovCi0JCXMgPSBXU0FT b2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLAotCQkJCQkgIEZST01fUFJPVE9DT0xfSU5GTywK LQkJCQkJICBGUk9NX1BST1RPQ09MX0lORk8sCi0JCQkJCSAgJnNyYy0+d3NhaW5mbywKLQkJ CQkJICAwLAotCQkJCQkgIDApOwotCQlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKLQkJewot CQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgY3JlYXRlIGluaGVyaXRlZCBzb2NrZXQ6IGVy cm9yIGNvZGUgJWRcbiIsCi0JCQkJCQkgV1NBR2V0TGFzdEVycm9yKCkpOwotCQkJZXhpdCgx KTsKLQkJfQotCQkqZGVzdCA9IHM7Ci0KLQkJLyoKLQkJICogVG8gbWFrZSBzdXJlIHdlIGRv bid0IGdldCB0d28gcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBzb2NrZXQsIGNsb3NlCi0JCSAq IHRoZSBvcmlnaW5hbCBvbmUuIChUaGlzIHdvdWxkIGhhcHBlbiB3aGVuIGluaGVyaXRhbmNl IGFjdHVhbGx5Ci0JCSAqIHdvcmtzLi4KLQkJICovCi0JCWNsb3Nlc29ja2V0KHNyYy0+b3Jp Z3NvY2tldCk7Ci0JfQotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi1yZWFkX2JhY2tlbmRf dmFyaWFibGVzKGNoYXIgKmlkLCBDbGllbnRTb2NrZXQgKipjbGllbnRfc29jaywgQmFja2dy b3VuZFdvcmtlciAqKndvcmtlcikKLXsKLQlCYWNrZW5kUGFyYW1ldGVycyBwYXJhbTsKLQot I2lmbmRlZiBXSU4zMgotCS8qIE5vbi13aW4zMiBpbXBsZW1lbnRhdGlvbiByZWFkcyBmcm9t IGZpbGUgKi8KLQlGSUxFCSAgICpmcDsKLQotCS8qIE9wZW4gZmlsZSAqLwotCWZwID0gQWxs b2NhdGVGaWxlKGlkLCBQR19CSU5BUllfUik7Ci0JaWYgKCFmcCkKLQl7Ci0JCXdyaXRlX3N0 ZGVycigiY291bGQgbm90IG9wZW4gYmFja2VuZCB2YXJpYWJsZXMgZmlsZSBcIiVzXCI6ICVz XG4iLAotCQkJCQkgaWQsIHN0cmVycm9yKGVycm5vKSk7Ci0JCWV4aXQoMSk7Ci0JfQotCi0J aWYgKGZyZWFkKCZwYXJhbSwgc2l6ZW9mKHBhcmFtKSwgMSwgZnApICE9IDEpCi0JewotCQl3 cml0ZV9zdGRlcnIoImNvdWxkIG5vdCByZWFkIGZyb20gYmFja2VuZCB2YXJpYWJsZXMgZmls ZSBcIiVzXCI6ICVzXG4iLAotCQkJCQkgaWQsIHN0cmVycm9yKGVycm5vKSk7Ci0JCWV4aXQo MSk7Ci0JfQotCi0JLyogUmVsZWFzZSBmaWxlICovCi0JRnJlZUZpbGUoZnApOwotCWlmICh1 bmxpbmsoaWQpICE9IDApCi0JewotCQl3cml0ZV9zdGRlcnIoImNvdWxkIG5vdCByZW1vdmUg ZmlsZSBcIiVzXCI6ICVzXG4iLAotCQkJCQkgaWQsIHN0cmVycm9yKGVycm5vKSk7Ci0JCWV4 aXQoMSk7Ci0JfQotI2Vsc2UKLQkvKiBXaW4zMiB2ZXJzaW9uIHVzZXMgbWFwcGVkIGZpbGUg Ki8KLQlIQU5ETEUJCXBhcmFtSGFuZGxlOwotCUJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbXA7 Ci0KLSNpZmRlZiBfV0lONjQKLQlwYXJhbUhhbmRsZSA9IChIQU5ETEUpIF9hdG9pNjQoaWQp OwotI2Vsc2UKLQlwYXJhbUhhbmRsZSA9IChIQU5ETEUpIGF0b2woaWQpOwotI2VuZGlmCi0J cGFyYW1wID0gTWFwVmlld09mRmlsZShwYXJhbUhhbmRsZSwgRklMRV9NQVBfUkVBRCwgMCwg MCwgMCk7Ci0JaWYgKCFwYXJhbXApCi0JewotCQl3cml0ZV9zdGRlcnIoImNvdWxkIG5vdCBt YXAgdmlldyBvZiBiYWNrZW5kIHZhcmlhYmxlczogZXJyb3IgY29kZSAlbHVcbiIsCi0JCQkJ CSBHZXRMYXN0RXJyb3IoKSk7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JbWVtY3B5KCZwYXJhbSwg cGFyYW1wLCBzaXplb2YoQmFja2VuZFBhcmFtZXRlcnMpKTsKLQotCWlmICghVW5tYXBWaWV3 T2ZGaWxlKHBhcmFtcCkpCi0JewotCQl3cml0ZV9zdGRlcnIoImNvdWxkIG5vdCB1bm1hcCB2 aWV3IG9mIGJhY2tlbmQgdmFyaWFibGVzOiBlcnJvciBjb2RlICVsdVxuIiwKLQkJCQkJIEdl dExhc3RFcnJvcigpKTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQlpZiAoIUNsb3NlSGFuZGxlKHBh cmFtSGFuZGxlKSkKLQl7Ci0JCXdyaXRlX3N0ZGVycigiY291bGQgbm90IGNsb3NlIGhhbmRs ZSB0byBiYWNrZW5kIHBhcmFtZXRlciB2YXJpYWJsZXM6IGVycm9yIGNvZGUgJWx1XG4iLAot CQkJCQkgR2V0TGFzdEVycm9yKCkpOwotCQlleGl0KDEpOwotCX0KLSNlbmRpZgotCi0JcmVz dG9yZV9iYWNrZW5kX3ZhcmlhYmxlcygmcGFyYW0sIGNsaWVudF9zb2NrLCB3b3JrZXIpOwot fQotCi0vKiBSZXN0b3JlIGNyaXRpY2FsIGJhY2tlbmQgdmFyaWFibGVzIGZyb20gdGhlIEJh Y2tlbmRQYXJhbWV0ZXJzIHN0cnVjdCAqLwotc3RhdGljIHZvaWQKLXJlc3RvcmVfYmFja2Vu ZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKipj bGllbnRfc29jaywgQmFja2dyb3VuZFdvcmtlciAqKndvcmtlcikKLXsKLQlpZiAocGFyYW0t Pmhhc19jbGllbnRfc29jaykKLQl7Ci0JCSpjbGllbnRfc29jayA9IChDbGllbnRTb2NrZXQg KikgTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihDbGllbnRT b2NrZXQpKTsKLQkJbWVtY3B5KCpjbGllbnRfc29jaywgJnBhcmFtLT5jbGllbnRfc29jaywg c2l6ZW9mKENsaWVudFNvY2tldCkpOwotCQlyZWFkX2luaGVyaXRhYmxlX3NvY2tldCgmKCpj bGllbnRfc29jayktPnNvY2ssICZwYXJhbS0+aW5oX3NvY2spOwotCX0KLQllbHNlCi0JCSpj bGllbnRfc29jayA9IE5VTEw7Ci0KLQlpZiAocGFyYW0tPmhhc19iZ3dvcmtlcikKLQl7Ci0J CSp3b3JrZXIgPSAoQmFja2dyb3VuZFdvcmtlciAqKQotCQkJTWVtb3J5Q29udGV4dEFsbG9j KFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihCYWNrZ3JvdW5kV29ya2VyKSk7Ci0JCW1lbWNw eSgqd29ya2VyLCAmcGFyYW0tPmJnd29ya2VyLCBzaXplb2YoQmFja2dyb3VuZFdvcmtlcikp OwotCX0KLQllbHNlCi0JCSp3b3JrZXIgPSBOVUxMOwotCi0JU2V0RGF0YURpcihwYXJhbS0+ RGF0YURpcik7Ci0KLQlNeUNhbmNlbEtleSA9IHBhcmFtLT5NeUNhbmNlbEtleTsKLQlNeVBN Q2hpbGRTbG90ID0gcGFyYW0tPk15UE1DaGlsZFNsb3Q7Ci0KLSNpZmRlZiBXSU4zMgotCVNo bWVtUHJvdGVjdGl2ZVJlZ2lvbiA9IHBhcmFtLT5TaG1lbVByb3RlY3RpdmVSZWdpb247Ci0j ZW5kaWYKLQlVc2VkU2htZW1TZWdJRCA9IHBhcmFtLT5Vc2VkU2htZW1TZWdJRDsKLQlVc2Vk U2htZW1TZWdBZGRyID0gcGFyYW0tPlVzZWRTaG1lbVNlZ0FkZHI7Ci0KLQlTaG1lbUxvY2sg PSBwYXJhbS0+U2htZW1Mb2NrOwotCVNobWVtQmFja2VuZEFycmF5ID0gcGFyYW0tPlNobWVt QmFja2VuZEFycmF5OwotCi0jaWZuZGVmIEhBVkVfU1BJTkxPQ0tTCi0JU3BpbmxvY2tTZW1h QXJyYXkgPSBwYXJhbS0+U3BpbmxvY2tTZW1hQXJyYXk7Ci0jZW5kaWYKLQlOYW1lZExXTG9j a1RyYW5jaGVSZXF1ZXN0cyA9IHBhcmFtLT5OYW1lZExXTG9ja1RyYW5jaGVSZXF1ZXN0czsK LQlOYW1lZExXTG9ja1RyYW5jaGVBcnJheSA9IHBhcmFtLT5OYW1lZExXTG9ja1RyYW5jaGVB cnJheTsKLQlNYWluTFdMb2NrQXJyYXkgPSBwYXJhbS0+TWFpbkxXTG9ja0FycmF5OwotCVBy b2NTdHJ1Y3RMb2NrID0gcGFyYW0tPlByb2NTdHJ1Y3RMb2NrOwotCVByb2NHbG9iYWwgPSBw YXJhbS0+UHJvY0dsb2JhbDsKLQlBdXhpbGlhcnlQcm9jcyA9IHBhcmFtLT5BdXhpbGlhcnlQ cm9jczsKLQlQcmVwYXJlZFhhY3RQcm9jcyA9IHBhcmFtLT5QcmVwYXJlZFhhY3RQcm9jczsK LQlQTVNpZ25hbFN0YXRlID0gcGFyYW0tPlBNU2lnbmFsU3RhdGU7Ci0KLQlQb3N0bWFzdGVy UGlkID0gcGFyYW0tPlBvc3RtYXN0ZXJQaWQ7Ci0JUGdTdGFydFRpbWUgPSBwYXJhbS0+UGdT dGFydFRpbWU7Ci0JUGdSZWxvYWRUaW1lID0gcGFyYW0tPlBnUmVsb2FkVGltZTsKLQlmaXJz dF9zeXNsb2dnZXJfZmlsZV90aW1lID0gcGFyYW0tPmZpcnN0X3N5c2xvZ2dlcl9maWxlX3Rp bWU7Ci0KLQlyZWRpcmVjdGlvbl9kb25lID0gcGFyYW0tPnJlZGlyZWN0aW9uX2RvbmU7Ci0J SXNCaW5hcnlVcGdyYWRlID0gcGFyYW0tPklzQmluYXJ5VXBncmFkZTsKLQlxdWVyeV9pZF9l bmFibGVkID0gcGFyYW0tPnF1ZXJ5X2lkX2VuYWJsZWQ7Ci0JbWF4X3NhZmVfZmRzID0gcGFy YW0tPm1heF9zYWZlX2ZkczsKLQotCU1heEJhY2tlbmRzID0gcGFyYW0tPk1heEJhY2tlbmRz OwotCi0jaWZkZWYgV0lOMzIKLQlQb3N0bWFzdGVySGFuZGxlID0gcGFyYW0tPlBvc3RtYXN0 ZXJIYW5kbGU7Ci0JcGd3aW4zMl9pbml0aWFsX3NpZ25hbF9waXBlID0gcGFyYW0tPmluaXRp YWxfc2lnbmFsX3BpcGU7Ci0jZWxzZQotCW1lbWNweSgmcG9zdG1hc3Rlcl9hbGl2ZV9mZHMs ICZwYXJhbS0+cG9zdG1hc3Rlcl9hbGl2ZV9mZHMsCi0JCSAgIHNpemVvZihwb3N0bWFzdGVy X2FsaXZlX2ZkcykpOwotI2VuZGlmCi0KLQltZW1jcHkoJnN5c2xvZ1BpcGUsICZwYXJhbS0+ c3lzbG9nUGlwZSwgc2l6ZW9mKHN5c2xvZ1BpcGUpKTsKLQotCXN0cmxjcHkobXlfZXhlY19w YXRoLCBwYXJhbS0+bXlfZXhlY19wYXRoLCBNQVhQR1BBVEgpOwotCi0Jc3RybGNweShwa2ds aWJfcGF0aCwgcGFyYW0tPnBrZ2xpYl9wYXRoLCBNQVhQR1BBVEgpOwotCi0JLyoKLQkgKiBX ZSBuZWVkIHRvIHJlc3RvcmUgZmQuYydzIGNvdW50cyBvZiBleHRlcm5hbGx5LW9wZW5lZCBG RHM7IHRvIGF2b2lkCi0JICogY29uZnVzaW9uLCBiZSBzdXJlIHRvIGRvIHRoaXMgYWZ0ZXIg cmVzdG9yaW5nIG1heF9zYWZlX2Zkcy4gIChOb3RlOgotCSAqIEJhY2tlbmRJbml0aWFsaXpl IHdpbGwgaGFuZGxlIHRoaXMgZm9yICgqY2xpZW50X3NvY2spLT5zb2NrLikKLQkgKi8KLSNp Zm5kZWYgV0lOMzIKLQlpZiAocG9zdG1hc3Rlcl9hbGl2ZV9mZHNbMF0gPj0gMCkKLQkJUmVz ZXJ2ZUV4dGVybmFsRkQoKTsKLQlpZiAocG9zdG1hc3Rlcl9hbGl2ZV9mZHNbMV0gPj0gMCkK LQkJUmVzZXJ2ZUV4dGVybmFsRkQoKTsKLSNlbmRpZgotfQotCi0KIFNpemUKIFNobWVtQmFj a2VuZEFycmF5U2l6ZSh2b2lkKQogewpAQCAtNjQzMiw3ICs1NjkzLDcgQEAgcGd3aW4zMl9k ZWFkY2hpbGRfY2FsbGJhY2soUFZPSUQgbHBQYXJhbWV0ZXIsIEJPT0xFQU4gVGltZXJPcldh aXRGaXJlZCkKICAqIGF1dG9tYXRpY2FsbHkgYnkgYW4gb3BlcmF0aW5nIHN5c3RlbSB0aHJl YWQgcG9vbC4gIFRoZSBtZW1vcnkgYW5kIHRoZQogICogcHJvY2VzcyBoYW5kbGUgd2lsbCBi ZSBmcmVlZCBieSBhIGxhdGVyIGNhbGwgdG8gd2FpdHBpZCgpLgogICovCi1zdGF0aWMgdm9p ZAordm9pZAogcGd3aW4zMl9yZWdpc3Rlcl9kZWFkY2hpbGRfY2FsbGJhY2soSEFORExFIHBy b2NIYW5kbGUsIERXT1JEIHByb2NJZCkKIHsKIAl3aW4zMl9kZWFkY2hpbGRfd2FpdGluZm8g KmNoaWxkaW5mbzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvbGF1bmNoZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNo ZXIuYwppbmRleCA1MDE5MTBiNDQ1NC4uYTQwOThjMjNiMmIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJw b3N0bWFzdGVyL2Jnd29ya2VyLmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9mb3JrX3Byb2Nl c3MuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBv c3RtYXN0ZXIvcG9zdG1hc3Rlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxs YXVuY2hlci5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaAppbmRleCAzYjM4 ODljNThjMC4uNDVkNGI3OGMzYTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5oCkBAIC01OSwxMSArNTksMTYgQEAgZXh0ZXJuIGludAlNYXhMaXZlUG9zdG1hc3RlckNo aWxkcmVuKHZvaWQpOwogZXh0ZXJuIGJvb2wgUG9zdG1hc3Rlck1hcmtQSURGb3JXb3JrZXJO b3RpZnkoaW50KTsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAorCiBleHRlcm4gcGlkX3QgcG9z dG1hc3Rlcl9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKIGV4dGVybiB2b2lk IFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHBnX2F0dHJpYnV0 ZV9ub3JldHVybigpOwogCiBleHRlcm4gU2l6ZSBTaG1lbUJhY2tlbmRBcnJheVNpemUodm9p ZCk7CiBleHRlcm4gdm9pZCBTaG1lbUJhY2tlbmRBcnJheUFsbG9jYXRpb24odm9pZCk7CisK KyNpZmRlZiBXSU4zMgorZXh0ZXJuIHZvaWQgcGd3aW4zMl9yZWdpc3Rlcl9kZWFkY2hpbGRf Y2FsbGJhY2soSEFORExFIHByb2NIYW5kbGUsIERXT1JEIHByb2NJZCk7CisjZW5kaWYKICNl bmRpZgogCiAvKgotLSAKMi4zOS4yCgo= --------------oZdu1r1d4zA157Kzh0ND2Ywg Content-Type: text/x-patch; charset=UTF-8; name="v5-0006-Refactor-AuxProcess-startup.patch" Content-Disposition: attachment; filename="v5-0006-Refactor-AuxProcess-startup.patch" Content-Transfer-Encoding: base64 RnJvbSAzYjZmYzJiMDgyNjBkNDM3YmM5MDgzNzhjZmMwNTBmNTM4YzY0MzNlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgNCBEZWMgMjAyMyAxMzoyNDowMSArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjUgNi84XSBSZWZhY3RvciBBdXhQcm9jZXNzIHN0YXJ0dXAKCk9s ZDoKCiAgICBBdXhQcm9jZXNzTWFpbigpCiAgICAgIEluaXRpYWxpemUgYSBidW5jaCBvZiBz dHVmZgogICAgICA8YXV4IHByb2Nlc3Mgc3BlY2lmaWMgTWFpbiBmdW5jdGlvbj4oKQoKTmV3 OgoKICAgIEF1eFByb2Nlc3NNYWluKCkKICAgICAgPGF1eCBwcm9jZXNzIHNwZWNpZmljIE1h aW4gZnVuY3Rpb24+KCkKICAgICAgICBBdXhpbGlhcnlQcm9jZXNzSW5pdCgpCiAgICAgICAg ICBJbml0aWFsaXplIGEgYnVuY2ggb2Ygc3R1ZmYKClRoaXMgaXNuJ3QgdG9vIHVzZWZ1bCBh cyBpcywgYnV0IHRoZSBuZXh0IGNvbW1pdHMgd2lsbCByZW1vdmUgdGhlCkF1eFByb2Nlc3NN YWluKCkgZnVuY3Rpb24gYW5kIGRpc3BhdGNoIGRpcmVjdGx5IHRvIHRoZSBhdXgtcHJvY2Vz cwpzcGVjaWZpYyBNYWluIGZ1bmN0aW9uLCBsaWtlIHRoaXM6CgogICAgPGF1eCBwcm9jZXNz IHNwZWNpZmljIE1haW4gZnVuY3Rpb24+KCkKICAgICAgQXV4aWxpYXJ5UHJvY2Vzc0luaXQo KQogICAgICAgIEluaXRpYWxpemUgYSBidW5jaCBvZiBzdHVmZgoKVGhpcyBjb21taXQgbWFr ZXMgdGhhdCBuZXh0IGNvbW1pdCBzbWFsbGVyLgoKWFhYOiBXZSBub3cgaGF2ZSBmdW5jdGlv bnMgY2FsbGVkIEF1eGlsaWFyeVByb2Nlc3NJbml0KCkgYW5kCkluaXRBdXhpbGlhcnlQcm9j ZXNzKCkuIENvbmZ1c2luZy4KLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nl c3MuYyAgIHwgODYgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9w b3N0bWFzdGVyL2Jnd3JpdGVyLmMgICAgIHwgIDUgKysKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvY2hlY2twb2ludGVyLmMgfCAgNSArKwogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2Fy Y2guYyAgICAgICB8ICA1ICsrCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYyAg ICAgIHwgIDUgKysKIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMgICAgfCAg NSArKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyB8ICA1ICsrCiBz cmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCAgIHwgIDMgKy0KIDggZmlsZXMg Y2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgNTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2F1eHByb2Nlc3MuYwppbmRleCBiYWU2ZjY4YzQwMi4uZDYyYWRmNGM5OTMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCisrKyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCkBAIC00NCw3ICs0NCw2IEBA IHN0YXRpYyB2b2lkIFNodXRkb3duQXV4aWxpYXJ5UHJvY2VzcyhpbnQgY29kZSwgRGF0dW0g YXJnKTsKIAogQXV4UHJvY1R5cGUgTXlBdXhQcm9jVHlwZSA9IE5vdEFuQXV4UHJvY2VzczsJ LyogZGVjbGFyZWQgaW4gbWlzY2FkbWluLmggKi8KIAotCiAvKgogICoJIEF1eGlsaWFyeVBy b2Nlc3NNYWluCiAgKgpAQCAtNTgsMzMgKzU3LDU2IEBAIEF1eGlsaWFyeVByb2Nlc3NNYWlu KEF1eFByb2NUeXBlIGF1eHR5cGUpCiB7CiAJQXNzZXJ0KElzVW5kZXJQb3N0bWFzdGVyKTsK IAotCU15QXV4UHJvY1R5cGUgPSBhdXh0eXBlOwotCiAJc3dpdGNoIChNeUF1eFByb2NUeXBl KQogCXsKIAkJY2FzZSBTdGFydHVwUHJvY2VzczoKLQkJCU15QmFja2VuZFR5cGUgPSBCX1NU QVJUVVA7Ci0JCQlicmVhazsKKwkJCVN0YXJ0dXBQcm9jZXNzTWFpbigpOworCQkJcHJvY19l eGl0KDEpOworCiAJCWNhc2UgQXJjaGl2ZXJQcm9jZXNzOgotCQkJTXlCYWNrZW5kVHlwZSA9 IEJfQVJDSElWRVI7Ci0JCQlicmVhazsKKwkJCVBnQXJjaGl2ZXJNYWluKCk7CisJCQlwcm9j X2V4aXQoMSk7CisKIAkJY2FzZSBCZ1dyaXRlclByb2Nlc3M6Ci0JCQlNeUJhY2tlbmRUeXBl ID0gQl9CR19XUklURVI7Ci0JCQlicmVhazsKKwkJCUJhY2tncm91bmRXcml0ZXJNYWluKCk7 CisJCQlwcm9jX2V4aXQoMSk7CisKIAkJY2FzZSBDaGVja3BvaW50ZXJQcm9jZXNzOgotCQkJ TXlCYWNrZW5kVHlwZSA9IEJfQ0hFQ0tQT0lOVEVSOwotCQkJYnJlYWs7CisJCQlDaGVja3Bv aW50ZXJNYWluKCk7CisJCQlwcm9jX2V4aXQoMSk7CisKIAkJY2FzZSBXYWxXcml0ZXJQcm9j ZXNzOgotCQkJTXlCYWNrZW5kVHlwZSA9IEJfV0FMX1dSSVRFUjsKLQkJCWJyZWFrOworCQkJ V2FsV3JpdGVyTWFpbigpOworCQkJcHJvY19leGl0KDEpOworCiAJCWNhc2UgV2FsUmVjZWl2 ZXJQcm9jZXNzOgotCQkJTXlCYWNrZW5kVHlwZSA9IEJfV0FMX1JFQ0VJVkVSOwotCQkJYnJl YWs7CisJCQlXYWxSZWNlaXZlck1haW4oKTsKKwkJCXByb2NfZXhpdCgxKTsKKwogCQlkZWZh dWx0OgogCQkJZWxvZyhQQU5JQywgInVucmVjb2duaXplZCBwcm9jZXNzIHR5cGU6ICVkIiwg KGludCkgTXlBdXhQcm9jVHlwZSk7Ci0JCQlNeUJhY2tlbmRUeXBlID0gQl9JTlZBTElEOwor CQkJcHJvY19leGl0KDEpOworCX0KK30KKworLyoKKyAqCSBBdXhpbGlhcnlQcm9jZXNzSW5p dAorICoKKyAqCSBDb21tb24gaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgYXV4aWxpYXJ5IHBy b2Nlc3Nlcywgc3VjaCBhcyB0aGUgYmd3cml0ZXIsCisgKgkgd2Fsd3JpdGVyLCB3YWxyZWNl aXZlciwgYm9vdHN0cmFwcGVyIGFuZCB0aGUgc2hhcmVkIG1lbW9yeSBjaGVja2VyIGNvZGUu CisgKi8KK3ZvaWQKK0F1eGlsaWFyeVByb2Nlc3NJbml0KHZvaWQpCit7CisJLyogUmVsZWFz ZSBwb3N0bWFzdGVyJ3Mgd29ya2luZyBtZW1vcnkgY29udGV4dCAqLworCWlmIChQb3N0bWFz dGVyQ29udGV4dCkKKwl7CisJCU1lbW9yeUNvbnRleHREZWxldGUoUG9zdG1hc3RlckNvbnRl eHQpOworCQlQb3N0bWFzdGVyQ29udGV4dCA9IE5VTEw7CiAJfQogCisJQXNzZXJ0KElzVW5k ZXJQb3N0bWFzdGVyKTsKKwogCWluaXRfcHNfZGlzcGxheShOVUxMKTsKIAogCVNldFByb2Nl c3NpbmdNb2RlKEJvb3RzdHJhcFByb2Nlc3NpbmcpOwpAQCAtMTIyLDcgKzE0NCw2IEBAIEF1 eGlsaWFyeVByb2Nlc3NNYWluKEF1eFByb2NUeXBlIGF1eHR5cGUpCiAJICovCiAJQ3JlYXRl QXV4UHJvY2Vzc1Jlc291cmNlT3duZXIoKTsKIAotCiAJLyogSW5pdGlhbGl6ZSBiYWNrZW5k IHN0YXR1cyBpbmZvcm1hdGlvbiAqLwogCXBnc3RhdF9iZWluaXQoKTsKIAlwZ3N0YXRfYmVz dGFydCgpOwpAQCAtMTMxLDM3ICsxNTIsNiBAQCBBdXhpbGlhcnlQcm9jZXNzTWFpbihBdXhQ cm9jVHlwZSBhdXh0eXBlKQogCWJlZm9yZV9zaG1lbV9leGl0KFNodXRkb3duQXV4aWxpYXJ5 UHJvY2VzcywgMCk7CiAKIAlTZXRQcm9jZXNzaW5nTW9kZShOb3JtYWxQcm9jZXNzaW5nKTsK LQotCXN3aXRjaCAoTXlBdXhQcm9jVHlwZSkKLQl7Ci0JCWNhc2UgU3RhcnR1cFByb2Nlc3M6 Ci0JCQlTdGFydHVwUHJvY2Vzc01haW4oKTsKLQkJCXByb2NfZXhpdCgxKTsKLQotCQljYXNl IEFyY2hpdmVyUHJvY2VzczoKLQkJCVBnQXJjaGl2ZXJNYWluKCk7Ci0JCQlwcm9jX2V4aXQo MSk7Ci0KLQkJY2FzZSBCZ1dyaXRlclByb2Nlc3M6Ci0JCQlCYWNrZ3JvdW5kV3JpdGVyTWFp bigpOwotCQkJcHJvY19leGl0KDEpOwotCi0JCWNhc2UgQ2hlY2twb2ludGVyUHJvY2VzczoK LQkJCUNoZWNrcG9pbnRlck1haW4oKTsKLQkJCXByb2NfZXhpdCgxKTsKLQotCQljYXNlIFdh bFdyaXRlclByb2Nlc3M6Ci0JCQlXYWxXcml0ZXJNYWluKCk7Ci0JCQlwcm9jX2V4aXQoMSk7 Ci0KLQkJY2FzZSBXYWxSZWNlaXZlclByb2Nlc3M6Ci0JCQlXYWxSZWNlaXZlck1haW4oKTsK LQkJCXByb2NfZXhpdCgxKTsKLQotCQlkZWZhdWx0OgotCQkJZWxvZyhQQU5JQywgInVucmVj b2duaXplZCBwcm9jZXNzIHR5cGU6ICVkIiwgKGludCkgTXlBdXhQcm9jVHlwZSk7Ci0JCQlw cm9jX2V4aXQoMSk7Ci0JfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9iZ3dyaXRlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5j CmluZGV4IGQwMmRjMTdiOWMxLi45NWFiZGQ3ZmE2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv Ymd3cml0ZXIuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFs LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5j bHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9i Z3dyaXRlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCkBAIC05NSw2ICs5NiwxMCBAQCBCYWNrZ3Jv dW5kV3JpdGVyTWFpbih2b2lkKQogCWJvb2wJCXByZXZfaGliZXJuYXRlOwogCVdyaXRlYmFj a0NvbnRleHQgd2JfY29udGV4dDsKIAorCU15QXV4UHJvY1R5cGUgPSBCZ1dyaXRlclByb2Nl c3M7CisJTXlCYWNrZW5kVHlwZSA9IEJfQkdfV1JJVEVSOworCUF1eGlsaWFyeVByb2Nlc3NJ bml0KCk7CisKIAkvKgogCSAqIFByb3Blcmx5IGFjY2VwdCBvciBpZ25vcmUgc2lnbmFscyB0 aGF0IG1pZ2h0IGJlIHNlbnQgdG8gdXMuCiAJICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9j aGVja3BvaW50ZXIuYwppbmRleCBkYzJkYTVhMmNkOC4uMTg3MWFjNTI5MjEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYwpAQCAtNDIsNiArNDIsNyBAQAogI2lu Y2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAj aW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIv aW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc3luY3JlcC5oIgpAQCAtMTc0 LDYgKzE3NSwxMCBAQCBDaGVja3BvaW50ZXJNYWluKHZvaWQpCiAJc2lnam1wX2J1Zglsb2Nh bF9zaWdqbXBfYnVmOwogCU1lbW9yeUNvbnRleHQgY2hlY2twb2ludGVyX2NvbnRleHQ7CiAK KwlNeUF1eFByb2NUeXBlID0gQ2hlY2twb2ludGVyUHJvY2VzczsKKwlNeUJhY2tlbmRUeXBl ID0gQl9DSEVDS1BPSU5URVI7CisJQXV4aWxpYXJ5UHJvY2Vzc0luaXQoKTsKKwogCUNoZWNr cG9pbnRlclNobWVtLT5jaGVja3BvaW50ZXJfcGlkID0gTXlQcm9jUGlkOwogCiAJLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3BnYXJjaC5jCmluZGV4IGEyNTU1ZTg1NzhjLi41ZDVjNTczMzM0MCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYworKysgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk ZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2lu Y2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgog I2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rl ci9wZ2FyY2guaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCkBAIC0yMTMsNiArMjE0LDEw IEBAIFBnQXJjaENhblJlc3RhcnQodm9pZCkKIHZvaWQKIFBnQXJjaGl2ZXJNYWluKHZvaWQp CiB7CisJTXlBdXhQcm9jVHlwZSA9IEFyY2hpdmVyUHJvY2VzczsKKwlNeUJhY2tlbmRUeXBl ID0gQl9BUkNISVZFUjsKKwlBdXhpbGlhcnlQcm9jZXNzSW5pdCgpOworCiAJLyoKIAkgKiBJ Z25vcmUgYWxsIHNpZ25hbHMgdXN1YWxseSBib3VuZCB0byBzb21lIGFjdGlvbiBpbiB0aGUg cG9zdG1hc3RlciwKIAkgKiBleGNlcHQgZm9yIFNJR0hVUCwgU0lHVEVSTSwgU0lHVVNSMSwg U0lHVVNSMiwgYW5kIFNJR1FVSVQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL3N0YXJ0dXAuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCmluZGV4 IDA4MmM4NzBlMDNhLi4wZmRmYTE4MjJkYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9zdGFydHVwLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVw LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBv c3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3RhcnR1cC5o IgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5o IgpAQCAtMjQzLDYgKzI0NCwxMCBAQCBTdGFydHVwUHJvY0V4aXQoaW50IGNvZGUsIERhdHVt IGFyZykKIHZvaWQKIFN0YXJ0dXBQcm9jZXNzTWFpbih2b2lkKQogeworCU15QXV4UHJvY1R5 cGUgPSBTdGFydHVwUHJvY2VzczsKKwlNeUJhY2tlbmRUeXBlID0gQl9TVEFSVFVQOworCUF1 eGlsaWFyeVByb2Nlc3NJbml0KCk7CisKIAkvKiBBcnJhbmdlIHRvIGNsZWFuIHVwIGF0IHN0 YXJ0dXAgcHJvY2VzcyBleGl0ICovCiAJb25fc2htZW1fZXhpdChTdGFydHVwUHJvY0V4aXQs IDApOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5j IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYwppbmRleCA0OGJjOTIyMDVi NS4uMDU3NWQyYzk2N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fs d3JpdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYwpAQCAt NDgsNiArNDgsNyBAQAogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rl ci9hdXhwcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNp bmNsdWRlICJwb3N0bWFzdGVyL3dhbHdyaXRlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVm bWdyLmgiCkBAIC05NSw2ICs5NiwxMCBAQCBXYWxXcml0ZXJNYWluKHZvaWQpCiAJaW50CQkJ bGVmdF90aWxsX2hpYmVybmF0ZTsKIAlib29sCQloaWJlcm5hdGluZzsKIAorCU15QXV4UHJv Y1R5cGUgPSBXYWxXcml0ZXJQcm9jZXNzOworCU15QmFja2VuZFR5cGUgPSBCX1dBTF9XUklU RVI7CisJQXV4aWxpYXJ5UHJvY2Vzc0luaXQoKTsKKwogCS8qCiAJICogUHJvcGVybHkgYWNj ZXB0IG9yIGlnbm9yZSBzaWduYWxzIHRoZSBwb3N0bWFzdGVyIG1pZ2h0IHNlbmQgdXMKIAkg KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMKaW5kZXggMjZkZWQ5Mjhh NzEuLjUxZmQxZGU5YzhiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxyZWNlaXZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmMKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBv c3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0 LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKQEAgLTE5OSw2ICsyMDAsMTAgQEAgV2FsUmVjZWl2 ZXJNYWluKHZvaWQpCiAJY2hhcgkgICAqc2VuZGVyX2hvc3QgPSBOVUxMOwogCWludAkJCXNl bmRlcl9wb3J0ID0gMDsKIAorCU15QXV4UHJvY1R5cGUgPSBXYWxSZWNlaXZlclByb2Nlc3M7 CisJTXlCYWNrZW5kVHlwZSA9IEJfV0FMX1JFQ0VJVkVSOworCUF1eGlsaWFyeVByb2Nlc3NJ bml0KCk7CisKIAkvKgogCSAqIFdhbFJjdiBzaG91bGQgYmUgc2V0IHVwIGFscmVhZHkgKGlm IHdlIGFyZSBhIGJhY2tlbmQsIHdlIGluaGVyaXQgdGhpcwogCSAqIGJ5IGZvcmsoKSBvciBF WEVDX0JBQ0tFTkQgbWVjaGFuaXNtIGZyb20gdGhlIHBvc3RtYXN0ZXIpLgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmggYi9zcmMvaW5jbHVkZS9w b3N0bWFzdGVyL2F1eHByb2Nlc3MuaAppbmRleCA1YzJkNjUyN2ZmNi4uY2M3NWYyNDY4MTgg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oCisrKyBi L3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oCkBAIC0xMyw4ICsxMyw3IEBA CiAjaWZuZGVmIEFVWFBST0NFU1NfSAogI2RlZmluZSBBVVhQUk9DRVNTX0gKIAotI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgotCiBleHRlcm4gdm9pZCBBdXhpbGlhcnlQcm9jZXNzTWFpbihB dXhQcm9jVHlwZSBhdXh0eXBlKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2 b2lkIEF1eGlsaWFyeVByb2Nlc3NJbml0KHZvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogQVVY UFJPQ0VTU19IICovCi0tIAoyLjM5LjIKCg== --------------oZdu1r1d4zA157Kzh0ND2Ywg Content-Type: text/x-patch; charset=UTF-8; name="v5-0007-Refactor-postmaster-child-process-launching.patch" Content-Disposition: attachment; filename*0="v5-0007-Refactor-postmaster-child-process-launching.patch" Content-Transfer-Encoding: base64 RnJvbSA1OTZiZDQ1NDBkMGRjY2VmMzVjN2NiNGQ0NGNiMDg5MTA2MzY3NjljIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgOCBEZWMgMjAyMyAxMzozMTozNSArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjUgNy84XSBSZWZhY3RvciBwb3N0bWFzdGVyIGNoaWxkIHByb2Nl c3MgbGF1bmNoaW5nCgotIEludHJvZHVjZSBuZXcgcG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2go KSBmdW5jdGlvbiB0aGF0IGRlYWxzIHdpdGggdGhlCiAgZGlmZmVyZW5jZXMgYmV0d2VlbiBF WEVDX0JBQ0tFTkQgYW5kIGZvcmsgbW9kZS4KCi0gUmVmYWN0b3IgdGhlIG1lY2hhbmlzbSBv ZiBwYXNzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIHBhcmVudCB0bwogIGNoaWxkIHByb2Nl c3MuIEluc3RlYWQgb2YgdXNpbmcgZGlmZmVyZW50IGNvbW1hbmQtbGluZSBhcmd1bWVudHMg d2hlbgogIGxhdW5jaGluZyB0aGUgY2hpbGQgcHJvY2VzcyBpbiBFWEVDX0JBQ0tFTkQgbW9k ZSwgcGFzcyBhCiAgdmFyaWFibGUtbGVuZ3RoIGJsb2Igb2YgZGF0YSBhbG9uZyB3aXRoIGFs bCB0aGUgZ2xvYmFsIHZhcmlhYmxlcy4gVGhlCiAgY29udGVudHMgb2YgdGhhdCBibG9iIGRl cGVuZCBvbiB0aGUga2luZCBvZiBjaGlsZCBwcm9jZXNzIGJlaW5nCiAgbGF1bmNoZWQuIElu ICFFWEVDX0JBQ0tFTkQgbW9kZSwgd2UgdXNlIHRoZSBzYW1lIGJsb2IsIGJ1dCBpdCdzIHNp bXBseQogIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgdG8gY2hpbGQgcHJvY2Vzcy4KClJl dmlld2VkLWJ5OiBUcmlzdGFuIFBhcnRpbiwgQW5kcmVzIEZyZXVuZApEaXNjdXNzaW9uOiBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzdhNTliMDczLTViNWItMTUx ZS03ZWQzLThiMDFmZjdjZTllZkBpa2kuZmkKLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVy L2F1dG92YWN1dW0uYyAgICAgICAgIHwgMTUzICstLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9hdXhwcm9jZXNzLmMgICAgICAgICB8ICA0NSAtLQogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dvcmtlci5jICAgICAgICAgICB8ICAxNCArLQogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dyaXRlci5jICAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9jaGVja3BvaW50ZXIuYyAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9sYXVuY2hfYmFja2VuZC5jICAgICB8IDQxMSArKysrKysrKysrKystLS0tCiBzcmMv YmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jICAgICAgICAgICAgIHwgICA0ICstCiBzcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyAgICAgICAgIHwgNTE4ICsrKystLS0t LS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYyAgICAgICAg ICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5jICAgICAg ICAgIHwgMjc1ICsrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRl ci5jICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNl aXZlci5jICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMu YyAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5oICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vz cy5oICAgICAgICAgfCAgIDEgLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9p bnRlcm5hbHMuaCB8ICAgMiArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRlci5o ICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wZ2FyY2guaCAg ICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wb3N0bWFzdGVy LmggICAgICAgICB8ICA0NSArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9zdGFydHVwLmgg ICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9zeXNsb2dnZXIu aCAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWx3cml0ZXIu aCAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2 ZXIuaCAgICAgICB8ICAgMiArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICAgICB8ICAgMyArCiAyNCBmaWxlcyBjaGFuZ2VkLCA2MDIgaW5zZXJ0aW9ucygr KSwgOTE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMK aW5kZXggYjA0ZmNmYzhjOGQuLjY4NDkwNzJkM2MyIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2F1dG92YWN1dW0uYwpAQCAtODQsNyArODQsNiBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2Vm dW5jcy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgpAQCAtMzE1LDEzICsz MTQsNiBAQCBzdGF0aWMgV29ya2VySW5mbyBNeVdvcmtlckluZm8gPSBOVUxMOwogLyogUElE IG9mIGxhdW5jaGVyLCB2YWxpZCBvbmx5IGluIHdvcmtlciB3aGlsZSBzaHV0dGluZyBkb3du ICovCiBpbnQJCQlBdXRvdmFjdXVtTGF1bmNoZXJQaWQgPSAwOwogCi0jaWZkZWYgRVhFQ19C QUNLRU5ECi1zdGF0aWMgcGlkX3QgYXZsYXVuY2hlcl9mb3JrZXhlYyh2b2lkKTsKLXN0YXRp YyBwaWRfdCBhdndvcmtlcl9mb3JrZXhlYyh2b2lkKTsKLSNlbmRpZgotTk9OX0VYRUNfU1RB VElDIHZvaWQgQXV0b1ZhY1dvcmtlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgcGdf YXR0cmlidXRlX25vcmV0dXJuKCk7Ci1OT05fRVhFQ19TVEFUSUMgdm9pZCBBdXRvVmFjTGF1 bmNoZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHBnX2F0dHJpYnV0ZV9ub3JldHVy bigpOwotCiBzdGF0aWMgT2lkCWRvX3N0YXJ0X3dvcmtlcih2b2lkKTsKIHN0YXRpYyB2b2lk IEhhbmRsZUF1dG9WYWNMYXVuY2hlckludGVycnVwdHModm9pZCk7CiBzdGF0aWMgdm9pZCBB dXRvVmFjTGF1bmNoZXJTaHV0ZG93bih2b2lkKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsK QEAgLTM2NSw3NiArMzU3LDIxIEBAIHN0YXRpYyB2b2lkIGF2bF9zaWd1c3IyX2hhbmRsZXIo U0lHTkFMX0FSR1MpOwogICoJCQkJCSAgQVVUT1ZBQ1VVTSBMQVVOQ0hFUiBDT0RFCiAgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKIC8qCi0gKiBmb3JrZXhlYyBy b3V0aW5lIGZvciB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hlciBwcm9jZXNzLgotICoKLSAqIEZv cm1hdCB1cCB0aGUgYXJnbGlzdCwgdGhlbiBmb3JrIGFuZCBleGVjLgotICovCi1zdGF0aWMg cGlkX3QKLWF2bGF1bmNoZXJfZm9ya2V4ZWModm9pZCkKLXsKLQljaGFyCSAgICphdlsxMF07 Ci0JaW50CQkJYWMgPSAwOwotCi0JYXZbYWMrK10gPSAicG9zdGdyZXMiOwotCWF2W2FjKytd ID0gIi0tZm9ya2F2bGF1bmNoZXIiOwotCWF2W2FjKytdID0gTlVMTDsJCQkvKiBmaWxsZWQg aW4gYnkgcG9zdG1hc3Rlcl9mb3JrZXhlYyAqLwotCWF2W2FjXSA9IE5VTEw7Ci0KLQlBc3Nl cnQoYWMgPCBsZW5ndGhvZihhdikpOwotCi0JcmV0dXJuIHBvc3RtYXN0ZXJfZm9ya2V4ZWMo YWMsIGF2KTsKLX0KLSNlbmRpZgotCi0vKgotICogTWFpbiBlbnRyeSBwb2ludCBmb3IgYXV0 b3ZhY3V1bSBsYXVuY2hlciBwcm9jZXNzLCB0byBiZSBjYWxsZWQgZnJvbSB0aGUKLSAqIHBv c3RtYXN0ZXIuCisgKiBNYWluIGxvb3AgZm9yIHRoZSBhdXRvdmFjdXVtIGxhdW5jaGVyIHBy b2Nlc3MuCiAgKi8KLWludAotU3RhcnRBdXRvVmFjTGF1bmNoZXIodm9pZCkKK3ZvaWQKK0F1 dG9WYWNMYXVuY2hlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9k YXRhX2xlbikKIHsKLQlwaWRfdAkJQXV0b1ZhY1BJRDsKKwlzaWdqbXBfYnVmCWxvY2FsX3Np Z2ptcF9idWY7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlzd2l0Y2ggKChBdXRvVmFjUElE ID0gYXZsYXVuY2hlcl9mb3JrZXhlYygpKSkKLSNlbHNlCi0Jc3dpdGNoICgoQXV0b1ZhY1BJ RCA9IGZvcmtfcHJvY2VzcygpKSkKLSNlbmRpZgorCS8qIFJlbGVhc2UgcG9zdG1hc3Rlcidz IHdvcmtpbmcgbWVtb3J5IGNvbnRleHQgKi8KKwlpZiAoUG9zdG1hc3RlckNvbnRleHQpCiAJ ewotCQljYXNlIC0xOgotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coImNvdWxkIG5v dCBmb3JrIGF1dG92YWN1dW0gbGF1bmNoZXIgcHJvY2VzczogJW0iKSkpOwotCQkJcmV0dXJu IDA7Ci0KLSNpZm5kZWYgRVhFQ19CQUNLRU5ECi0JCWNhc2UgMDoKLQkJCS8qIGluIHBvc3Rt YXN0ZXIgY2hpbGQgLi4uICovCi0JCQlJbml0UG9zdG1hc3RlckNoaWxkKCk7Ci0KLQkJCS8q IENsb3NlIHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAqLwotCQkJQ2xvc2VQb3N0bWFzdGVy UG9ydHMoZmFsc2UpOwotCi0JCQlBdXRvVmFjTGF1bmNoZXJNYWluKDAsIE5VTEwpOwotCQkJ YnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAoaW50KSBBdXRvVmFjUElE OworCQlNZW1vcnlDb250ZXh0RGVsZXRlKFBvc3RtYXN0ZXJDb250ZXh0KTsKKwkJUG9zdG1h c3RlckNvbnRleHQgPSBOVUxMOwogCX0KIAotCS8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLwot CXJldHVybiAwOwotfQotCi0vKgotICogTWFpbiBsb29wIGZvciB0aGUgYXV0b3ZhY3V1bSBs YXVuY2hlciBwcm9jZXNzLgotICovCi1OT05fRVhFQ19TVEFUSUMgdm9pZAotQXV0b1ZhY0xh dW5jaGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCXNpZ2ptcF9idWYJbG9j YWxfc2lnam1wX2J1ZjsKLQogCWFtX2F1dG92YWN1dW1fbGF1bmNoZXIgPSB0cnVlOwogCiAJ TXlCYWNrZW5kVHlwZSA9IEJfQVVUT1ZBQ19MQVVOQ0hFUjsKQEAgLTE0MjMsNzggKzEzNjAs MjIgQEAgYXZsX3NpZ3VzcjJfaGFuZGxlcihTSUdOQUxfQVJHUykKICAqCQkJCQkgIEFVVE9W QUNVVU0gV09SS0VSIENPREUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmZGVmIEVYRUNfQkFD S0VORAotLyoKLSAqIGZvcmtleGVjIHJvdXRpbmVzIGZvciB0aGUgYXV0b3ZhY3V1bSB3b3Jr ZXIuCi0gKgotICogRm9ybWF0IHVwIHRoZSBhcmdsaXN0LCB0aGVuIGZvcmsgYW5kIGV4ZWMu Ci0gKi8KLXN0YXRpYyBwaWRfdAotYXZ3b3JrZXJfZm9ya2V4ZWModm9pZCkKLXsKLQljaGFy CSAgICphdlsxMF07Ci0JaW50CQkJYWMgPSAwOwotCi0JYXZbYWMrK10gPSAicG9zdGdyZXMi OwotCWF2W2FjKytdID0gIi0tZm9ya2F2d29ya2VyIjsKLQlhdlthYysrXSA9IE5VTEw7CQkJ LyogZmlsbGVkIGluIGJ5IHBvc3RtYXN0ZXJfZm9ya2V4ZWMgKi8KLQlhdlthY10gPSBOVUxM OwotCi0JQXNzZXJ0KGFjIDwgbGVuZ3Rob2YoYXYpKTsKLQotCXJldHVybiBwb3N0bWFzdGVy X2ZvcmtleGVjKGFjLCBhdik7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIE1haW4gZW50cnkgcG9p bnQgZm9yIGF1dG92YWN1dW0gd29ya2VyIHByb2Nlc3MuCi0gKgotICogVGhpcyBjb2RlIGlz IGhlYXZpbHkgYmFzZWQgb24gcGdhcmNoLmMsIHEudi4KLSAqLwotaW50Ci1TdGFydEF1dG9W YWNXb3JrZXIodm9pZCkKLXsKLQlwaWRfdAkJd29ya2VyX3BpZDsKLQotI2lmZGVmIEVYRUNf QkFDS0VORAotCXN3aXRjaCAoKHdvcmtlcl9waWQgPSBhdndvcmtlcl9mb3JrZXhlYygpKSkK LSNlbHNlCi0Jc3dpdGNoICgod29ya2VyX3BpZCA9IGZvcmtfcHJvY2VzcygpKSkKLSNlbmRp ZgotCXsKLQkJY2FzZSAtMToKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJjb3Vs ZCBub3QgZm9yayBhdXRvdmFjdXVtIHdvcmtlciBwcm9jZXNzOiAlbSIpKSk7Ci0JCQlyZXR1 cm4gMDsKLQotI2lmbmRlZiBFWEVDX0JBQ0tFTkQKLQkJY2FzZSAwOgotCQkJLyogaW4gcG9z dG1hc3RlciBjaGlsZCAuLi4gKi8KLQkJCUluaXRQb3N0bWFzdGVyQ2hpbGQoKTsKLQotCQkJ LyogQ2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRzICovCi0JCQlDbG9zZVBvc3RtYXN0 ZXJQb3J0cyhmYWxzZSk7Ci0KLQkJCUF1dG9WYWNXb3JrZXJNYWluKDAsIE5VTEwpOwotCQkJ YnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAoaW50KSB3b3JrZXJfcGlk OwotCX0KLQotCS8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLwotCXJldHVybiAwOwotfQotCiAv KgogICogQXV0b1ZhY1dvcmtlck1haW4KICAqLwotTk9OX0VYRUNfU1RBVElDIHZvaWQKLUF1 dG9WYWNXb3JrZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit2b2lkCitBdXRvVmFj V29ya2VyTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVu KQogewogCXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKIAlPaWQJCQlkYmlkOwogCisJ LyogUmVsZWFzZSBwb3N0bWFzdGVyJ3Mgd29ya2luZyBtZW1vcnkgY29udGV4dCAqLworCWlm IChQb3N0bWFzdGVyQ29udGV4dCkKKwl7CisJCU1lbW9yeUNvbnRleHREZWxldGUoUG9zdG1h c3RlckNvbnRleHQpOworCQlQb3N0bWFzdGVyQ29udGV4dCA9IE5VTEw7CisJfQorCiAJYW1f YXV0b3ZhY3V1bV93b3JrZXIgPSB0cnVlOwogCiAJTXlCYWNrZW5kVHlwZSA9IEJfQVVUT1ZB Q19XT1JLRVI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nl c3MuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jCmluZGV4IGQ2MmFk ZjRjOTkzLi5kYWQ1N2M1MmExNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXhwcm9jZXNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNz LmMKQEAgLTQ0LDUxICs0NCw2IEBAIHN0YXRpYyB2b2lkIFNodXRkb3duQXV4aWxpYXJ5UHJv Y2VzcyhpbnQgY29kZSwgRGF0dW0gYXJnKTsKIAogQXV4UHJvY1R5cGUgTXlBdXhQcm9jVHlw ZSA9IE5vdEFuQXV4UHJvY2VzczsJLyogZGVjbGFyZWQgaW4gbWlzY2FkbWluLmggKi8KIAot LyoKLSAqCSBBdXhpbGlhcnlQcm9jZXNzTWFpbgotICoKLSAqCSBUaGUgbWFpbiBlbnRyeSBw b2ludCBmb3IgYXV4aWxpYXJ5IHByb2Nlc3Nlcywgc3VjaCBhcyB0aGUgYmd3cml0ZXIsCi0g Kgkgd2Fsd3JpdGVyLCB3YWxyZWNlaXZlciwgYm9vdHN0cmFwcGVyIGFuZCB0aGUgc2hhcmVk IG1lbW9yeSBjaGVja2VyIGNvZGUuCi0gKgotICoJIFRoaXMgY29kZSBpcyBoZXJlIGp1c3Qg YmVjYXVzZSBvZiBoaXN0b3JpY2FsIHJlYXNvbnMuCi0gKi8KLXZvaWQKLUF1eGlsaWFyeVBy b2Nlc3NNYWluKEF1eFByb2NUeXBlIGF1eHR5cGUpCi17Ci0JQXNzZXJ0KElzVW5kZXJQb3N0 bWFzdGVyKTsKLQotCXN3aXRjaCAoTXlBdXhQcm9jVHlwZSkKLQl7Ci0JCWNhc2UgU3RhcnR1 cFByb2Nlc3M6Ci0JCQlTdGFydHVwUHJvY2Vzc01haW4oKTsKLQkJCXByb2NfZXhpdCgxKTsK LQotCQljYXNlIEFyY2hpdmVyUHJvY2VzczoKLQkJCVBnQXJjaGl2ZXJNYWluKCk7Ci0JCQlw cm9jX2V4aXQoMSk7Ci0KLQkJY2FzZSBCZ1dyaXRlclByb2Nlc3M6Ci0JCQlCYWNrZ3JvdW5k V3JpdGVyTWFpbigpOwotCQkJcHJvY19leGl0KDEpOwotCi0JCWNhc2UgQ2hlY2twb2ludGVy UHJvY2VzczoKLQkJCUNoZWNrcG9pbnRlck1haW4oKTsKLQkJCXByb2NfZXhpdCgxKTsKLQot CQljYXNlIFdhbFdyaXRlclByb2Nlc3M6Ci0JCQlXYWxXcml0ZXJNYWluKCk7Ci0JCQlwcm9j X2V4aXQoMSk7Ci0KLQkJY2FzZSBXYWxSZWNlaXZlclByb2Nlc3M6Ci0JCQlXYWxSZWNlaXZl ck1haW4oKTsKLQkJCXByb2NfZXhpdCgxKTsKLQotCQlkZWZhdWx0OgotCQkJZWxvZyhQQU5J QywgInVucmVjb2duaXplZCBwcm9jZXNzIHR5cGU6ICVkIiwgKGludCkgTXlBdXhQcm9jVHlw ZSk7Ci0JCQlwcm9jX2V4aXQoMSk7Ci0JfQotfQotCiAvKgogICoJIEF1eGlsaWFyeVByb2Nl c3NJbml0CiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtl ci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCmluZGV4IDNjOTljZjYw NDdiLi42MTBjMmE1Yjk0NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9i Z3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwpAQCAt NzIyLDE3ICs3MjIsMjcgQEAgYmd3b3JrZXJfZGllKFNJR05BTF9BUkdTKQogICogTWFpbiBl bnRyeSBwb2ludCBmb3IgYmFja2dyb3VuZCB3b3JrZXIgcHJvY2Vzc2VzLgogICovCiB2b2lk Ci1CYWNrZ3JvdW5kV29ya2VyTWFpbih2b2lkKQorQmFja2dyb3VuZFdvcmtlck1haW4oY2hh ciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIHsKIAlzaWdqbXBf YnVmCWxvY2FsX3NpZ2ptcF9idWY7Ci0JQmFja2dyb3VuZFdvcmtlciAqd29ya2VyID0gTXlC Z3dvcmtlckVudHJ5OworCUJhY2tncm91bmRXb3JrZXIgKndvcmtlcjsKIAliZ3dvcmtlcl9t YWluX3R5cGUgZW50cnlwdDsKIAorCS8qIFJlbGVhc2UgcG9zdG1hc3RlcidzIHdvcmtpbmcg bWVtb3J5IGNvbnRleHQgKi8KKwlpZiAoUG9zdG1hc3RlckNvbnRleHQpCisJeworCQlNZW1v cnlDb250ZXh0RGVsZXRlKFBvc3RtYXN0ZXJDb250ZXh0KTsKKwkJUG9zdG1hc3RlckNvbnRl eHQgPSBOVUxMOworCX0KKworCUFzc2VydChzdGFydHVwX2RhdGFfbGVuID09IHNpemVvZihC YWNrZ3JvdW5kV29ya2VyKSk7CisJd29ya2VyID0gKEJhY2tncm91bmRXb3JrZXIgKikgc3Rh cnR1cF9kYXRhOwogCWlmICh3b3JrZXIgPT0gTlVMTCkKIAkJZWxvZyhGQVRBTCwgInVuYWJs ZSB0byBmaW5kIGJnd29ya2VyIGVudHJ5Iik7CiAKIAlJc0JhY2tncm91bmRXb3JrZXIgPSB0 cnVlOwogCisJTXlCZ3dvcmtlckVudHJ5ID0gd29ya2VyOwogCU15QmFja2VuZFR5cGUgPSBC X0JHX1dPUktFUjsKIAlpbml0X3BzX2Rpc3BsYXkod29ya2VyLT5iZ3dfbmFtZSk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYwppbmRleCA5NWFiZGQ3ZmE2ZC4uMDI3NTkwZjgy NGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuYworKysg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMKQEAgLTg5LDEzICs4OSwxNSBA QCBzdGF0aWMgWExvZ1JlY1B0ciBsYXN0X3NuYXBzaG90X2xzbiA9IEludmFsaWRYTG9nUmVj UHRyOwogICogYmFzaWMgZXhlY3V0aW9uIGVudmlyb25tZW50LCBidXQgbm90IGVuYWJsZWQg c2lnbmFscyB5ZXQuCiAgKi8KIHZvaWQKLUJhY2tncm91bmRXcml0ZXJNYWluKHZvaWQpCitC YWNrZ3JvdW5kV3JpdGVyTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVw X2RhdGFfbGVuKQogewogCXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKIAlNZW1vcnlD b250ZXh0IGJnd3JpdGVyX2NvbnRleHQ7CiAJYm9vbAkJcHJldl9oaWJlcm5hdGU7CiAJV3Jp dGViYWNrQ29udGV4dCB3Yl9jb250ZXh0OwogCisJQXNzZXJ0KHN0YXJ0dXBfZGF0YV9sZW4g PT0gMCk7CisKIAlNeUF1eFByb2NUeXBlID0gQmdXcml0ZXJQcm9jZXNzOwogCU15QmFja2Vu ZFR5cGUgPSBCX0JHX1dSSVRFUjsKIAlBdXhpbGlhcnlQcm9jZXNzSW5pdCgpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIuYyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKaW5kZXggMTg3MWFjNTI5MjEuLjUyMDE0 ODE3MzJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKQEAgLTE3 MCwxMSArMTcwLDEzIEBAIHN0YXRpYyB2b2lkIFJlcUNoZWNrcG9pbnRIYW5kbGVyKFNJR05B TF9BUkdTKTsKICAqIGJhc2ljIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCwgYnV0IG5vdCBlbmFi bGVkIHNpZ25hbHMgeWV0LgogICovCiB2b2lkCi1DaGVja3BvaW50ZXJNYWluKHZvaWQpCitD aGVja3BvaW50ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0 YV9sZW4pCiB7CiAJc2lnam1wX2J1Zglsb2NhbF9zaWdqbXBfYnVmOwogCU1lbW9yeUNvbnRl eHQgY2hlY2twb2ludGVyX2NvbnRleHQ7CiAKKwlBc3NlcnQoc3RhcnR1cF9kYXRhX2xlbiA9 PSAwKTsKKwogCU15QXV4UHJvY1R5cGUgPSBDaGVja3BvaW50ZXJQcm9jZXNzOwogCU15QmFj a2VuZFR5cGUgPSBCX0NIRUNLUE9JTlRFUjsKIAlBdXhpbGlhcnlQcm9jZXNzSW5pdCgpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCmluZGV4IDY1ZjE0MWE5 ZjVhLi41MDA2OWNiZjM1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9s YXVuY2hfYmFja2VuZC5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2Jh Y2tlbmQuYwpAQCAtODQsMTcgKzg0LDEwIEBAIHR5cGVkZWYgaW50IEluaGVyaXRhYmxlU29j a2V0OwogI2VuZGlmCiAKIC8qCi0gKiBTdHJ1Y3R1cmUgY29udGFpbnMgYWxsIHZhcmlhYmxl cyBwYXNzZWQgdG8gZXhlYzplZCBiYWNrZW5kcworICogU3RydWN0dXJlIGNvbnRhaW5zIGFs bCBnbG9iYWwgdmFyaWFibGVzIHBhc3NlZCB0byBleGVjOmVkIGJhY2tlbmRzCiAgKi8KIHR5 cGVkZWYgc3RydWN0CiB7Ci0JYm9vbAkJaGFzX2NsaWVudF9zb2NrOwotCUNsaWVudFNvY2tl dCBjbGllbnRfc29jazsKLQlJbmhlcml0YWJsZVNvY2tldCBpbmhfc29jazsKLQotCWJvb2wJ CWhhc19iZ3dvcmtlcjsKLQlCYWNrZ3JvdW5kV29ya2VyIGJnd29ya2VyOwotCiAJY2hhcgkJ RGF0YURpcltNQVhQR1BBVEhdOwogCWludDMyCQlNeUNhbmNlbEtleTsKIAlpbnQJCQlNeVBN Q2hpbGRTbG90OwpAQCAtMTM3LDIyICsxMzAsMTI5IEBAIHR5cGVkZWYgc3RydWN0CiAjZW5k aWYKIAljaGFyCQlteV9leGVjX3BhdGhbTUFYUEdQQVRIXTsKIAljaGFyCQlwa2dsaWJfcGF0 aFtNQVhQR1BBVEhdOworCisJLyoKKwkgKiBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IGJhY2tl bmQgcHJvY2Vzc2VzLCBidXQgaXQncyBoZXJlIGJlY2F1c2UgcGFzc2luZworCSAqIGEgc29j a2V0IG5lZWRzIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBvbiBXaW5kb3dzLiAnY2xpZW50X3Nv Y2snIGlzIGFuCisJICogZXhwbGljaXQgYXJndW1lbnQgdG8gcG9zdG1hc3Rlcl9jaGlsZF9s YXVuY2gsIGJ1dCBpcyBzdG9yZWQgaW4KKwkgKiBNeUNsaWVudFNvY2tldCBpbiB0aGUgY2hp bGQgcHJvY2Vzcy4KKwkgKi8KKwlDbGllbnRTb2NrZXQgY2xpZW50X3NvY2s7CisJSW5oZXJp dGFibGVTb2NrZXQgaW5oX3NvY2s7CisKKwlzaXplX3QJCXN0YXJ0dXBfZGF0YV9sZW47CisJ Lyogc3RhcnR1cCBkYXRhIGZvbGxvd3MgKi8KKwljaGFyCQlzdGFydHVwX2RhdGFbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKIH0gQmFja2VuZFBhcmFtZXRlcnM7CiAKICNkZWZpbmUgU2l6 ZU9mQmFja2VuZFBhcmFtZXRlcnMoc3RhcnR1cF9kYXRhX2xlbikgKG9mZnNldG9mKEJhY2tl bmRQYXJhbWV0ZXJzLCBzdGFydHVwX2RhdGEpICsgc3RhcnR1cF9kYXRhX2xlbikKIAotdm9p ZAkJcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgQ2xpZW50U29ja2V0ICoqY2xp ZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKip3b3JrZXIpOwotc3RhdGljIHZvaWQgcmVz dG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVu dFNvY2tldCAqKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29ya2VyICoqd29ya2VyKTsKK3N0 YXRpYyB2b2lkIHJlYWRfYmFja2VuZF92YXJpYWJsZXMoY2hhciAqaWQsIGNoYXIgKipzdGFy dHVwX2RhdGEsIHNpemVfdCAqc3RhcnR1cF9kYXRhX2xlbik7CitzdGF0aWMgdm9pZCByZXN0 b3JlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSk7CiAKLSNp Zm5kZWYgV0lOMzIKLXN0YXRpYyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2Vu ZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBCYWNrZ3Jv dW5kV29ya2VyICp3b3JrZXIpOwotI2Vsc2UKLXN0YXRpYyBib29sIHNhdmVfYmFja2VuZF92 YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVu dF9zb2NrLCBCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIsCi0JCQkJCQkJCSAgIEhBTkRMRSBj aGlsZFByb2Nlc3MsIHBpZF90IGNoaWxkUGlkKTsKK3N0YXRpYyBib29sIHNhdmVfYmFja2Vu ZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNs aWVudF9zb2NrLAorI2lmZGVmIFdJTjMyCisJCQkJCQkJCSAgIEhBTkRMRSBjaGlsZFByb2Nl c3MsIHBpZF90IGNoaWxkUGlkLAogI2VuZGlmCisJCQkJCQkJCSAgIGNoYXIgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pOworCitzdGF0aWMgcGlkX3QgaW50ZXJu YWxfZm9ya2V4ZWMoY29uc3QgY2hhciAqY2hpbGRfa2luZCwgY2hhciAqc3RhcnR1cF9kYXRh LCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbiwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jayk7 CisKKyNlbmRpZgkJCQkJCQkvKiBFWEVDX0JBQ0tFTkQgKi8KKworLyoKKyAqIEluZm9ybWF0 aW9uIG5lZWRlZCB0byBsYXVuY2ggZGlmZmVyZW50IGtpbmRzIG9mIGNoaWxkIHByb2Nlc3Nl cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQJ CSgqbWFpbl9mbikgKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9s ZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworCWJvb2wJCXNobWVtX2F0dGFjaDsKK30J CQljaGlsZF9wcm9jZXNzX2tpbmQ7CisKK2NoaWxkX3Byb2Nlc3Nfa2luZCBjaGlsZF9wcm9j ZXNzX2tpbmRzW10gPSB7CisJW1BNQ19CQUNLRU5EXSA9IHsiYmFja2VuZCIsIEJhY2tlbmRN YWluLCB0cnVlfSwKKworCVtQTUNfQVZfTEFVTkNIRVJdID0geyJhdXRvdmFjdXVtIGxhdW5j aGVyIiwgQXV0b1ZhY0xhdW5jaGVyTWFpbiwgdHJ1ZX0sCisJW1BNQ19BVl9XT1JLRVJdID0g eyJhdXRvdmFjdXVtIHdvcmtlciIsIEF1dG9WYWNXb3JrZXJNYWluLCB0cnVlfSwKKwlbUE1D X0JHV09SS0VSXSA9IHsiYmd3b3JrZXIiLCBCYWNrZ3JvdW5kV29ya2VyTWFpbiwgdHJ1ZX0s CisJW1BNQ19TWVNMT0dHRVJdID0geyJzeXNsb2dnZXIiLCBTeXNMb2dnZXJNYWluLCBmYWxz ZX0sCisKKwlbUE1DX1NUQVJUVVBdID0geyJzdGFydHVwIiwgU3RhcnR1cFByb2Nlc3NNYWlu LCB0cnVlfSwKKwlbUE1DX0JHV1JJVEVSXSA9IHsiYmd3cml0ZXIiLCBCYWNrZ3JvdW5kV3Jp dGVyTWFpbiwgdHJ1ZX0sCisJW1BNQ19BUkNISVZFUl0gPSB7ImFyY2hpdmVyIiwgUGdBcmNo aXZlck1haW4sIHRydWV9LAorCVtQTUNfQ0hFQ0tQT0lOVEVSXSA9IHsiY2hlY2twb2ludGVy IiwgQ2hlY2twb2ludGVyTWFpbiwgdHJ1ZX0sCisJW1BNQ19XQUxfV1JJVEVSXSA9IHsid2Fs X3dyaXRlciIsIFdhbFdyaXRlck1haW4sIHRydWV9LAorCVtQTUNfV0FMX1JFQ0VJVkVSXSA9 IHsid2FsX3JlY2VpdmVyIiwgV2FsUmVjZWl2ZXJNYWluLCB0cnVlfSwKK307CisKK2NvbnN0 IGNoYXIgKgorUG9zdG1hc3RlckNoaWxkTmFtZShQb3N0bWFzdGVyQ2hpbGRUeXBlIGNoaWxk X3R5cGUpCit7CisJQXNzZXJ0KGNoaWxkX3R5cGUgPj0gMCAmJiBjaGlsZF90eXBlIDwgbGVu Z3Rob2YoY2hpbGRfcHJvY2Vzc19raW5kcykpOworCXJldHVybiBjaGlsZF9wcm9jZXNzX2tp bmRzW2NoaWxkX3R5cGVdLm5hbWU7Cit9CisKKy8qCisgKiBTdGFydCBhIG5ldyBwb3N0bWFz dGVyIGNoaWxkIHByb2Nlc3MuCisgKgorICogVGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBiZSBy ZXN0b3JlZCB0byByb3VnaGx5IHRoZSBzYW1lIHN0YXRlLCB3aGV0aGVyCisgKiBFWEVDX0JB Q0tFTkQgaXMgdXNlZCBvciBub3Q6IGl0IHdpbGwgYmUgYXR0YWNoZWQgdG8gc2hhcmVkIG1l bW9yeSwgYW5kIGZkcworICogYW5kIG90aGVyIHJlc291cmNlcyB0aGF0IHdlJ3ZlIGluaGVy aXRlZCBmcm9tIHBvc3RtYXN0ZXIgdGhhdCBhcmUgbm90CisgKiBuZWVkZWQgaW4gYSBjaGls ZCBwcm9jZXNzIGhhdmUgYmVlbiBjbG9zZWQuCisgKgorICogJ3N0YXJ0dXBfZGF0YScgaXMg YW4gb3B0aW9uYWwgY29udGlndW91cyBjaHVuayBvZiBkYXRhIHRoYXQgaXMgcGFzc2VkIHRv CisgKiB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAqLworcGlkX3QKK3Bvc3RtYXN0ZXJfY2hpbGRf bGF1bmNoKFBvc3RtYXN0ZXJDaGlsZFR5cGUgY2hpbGRfdHlwZSwgY2hhciAqc3RhcnR1cF9k YXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbiwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29j aykKK3sKKwlwaWRfdAkJcGlkOworCisJQXNzZXJ0KGNoaWxkX3R5cGUgPj0gMCAmJiBjaGls ZF90eXBlIDwgbGVuZ3Rob2YoY2hpbGRfcHJvY2Vzc19raW5kcykpOworCUFzc2VydChJc1Bv c3RtYXN0ZXJFbnZpcm9ubWVudCAmJiAhSXNVbmRlclBvc3RtYXN0ZXIpOworCisjaWZkZWYg RVhFQ19CQUNLRU5ECisJcGlkID0gaW50ZXJuYWxfZm9ya2V4ZWMoY2hpbGRfcHJvY2Vzc19r aW5kc1tjaGlsZF90eXBlXS5uYW1lLAorCQkJCQkJCXN0YXJ0dXBfZGF0YSwgc3RhcnR1cF9k YXRhX2xlbiwgY2xpZW50X3NvY2spOworCS8qIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYXJy aXZlIGluIFN1YlBvc3RtYXN0ZXJNYWluICovCisjZWxzZQkJCQkJCQkvKiAhRVhFQ19CQUNL RU5EICovCisJcGlkID0gZm9ya19wcm9jZXNzKCk7CisJaWYgKHBpZCA9PSAwKQkJCQkvKiBj aGlsZCAqLworCXsKKwkJLyogQ2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRzICovCisJ CUNsb3NlUG9zdG1hc3RlclBvcnRzKGNoaWxkX3R5cGUgPT0gUE1DX1NZU0xPR0dFUik7CiAK LXBpZF90CQlpbnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBDbGll bnRTb2NrZXQgKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIpOworCQkv KiBEZXRhbmdsZSBmcm9tIHBvc3RtYXN0ZXIgKi8KKwkJSW5pdFBvc3RtYXN0ZXJDaGlsZCgp OwogCisJCS8qCisJCSAqIEJlZm9yZSBibG93aW5nIGF3YXkgUG9zdG1hc3RlckNvbnRleHQg KGluIHRoZSBNYWluIGZ1bmN0aW9uKSwgc2F2ZQorCQkgKiB0aGUgc3RhcnR1cCBkYXRhLgor CQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCQlp ZiAoc3RhcnR1cF9kYXRhICE9IE5VTEwpCisJCXsKKwkJCWNoYXIJICAgKmNwID0gcGFsbG9j KHN0YXJ0dXBfZGF0YV9sZW4pOworCisJCQltZW1jcHkoY3AsIHN0YXJ0dXBfZGF0YSwgc3Rh cnR1cF9kYXRhX2xlbik7CisJCQlzdGFydHVwX2RhdGEgPSBjcDsKKwkJfQorCisJCWlmIChj bGllbnRfc29jaykKKwkJeworCQkJTXlDbGllbnRTb2NrZXQgPSBwYWxsb2Moc2l6ZW9mKENs aWVudFNvY2tldCkpOworCQkJbWVtY3B5KE15Q2xpZW50U29ja2V0LCBjbGllbnRfc29jaywg c2l6ZW9mKENsaWVudFNvY2tldCkpOworCQl9CisKKwkJY2hpbGRfcHJvY2Vzc19raW5kc1tj aGlsZF90eXBlXS5tYWluX2ZuKHN0YXJ0dXBfZGF0YSwgc3RhcnR1cF9kYXRhX2xlbik7CisJ CXBnX3VucmVhY2hhYmxlKCk7CQkvKiBtYWluX2ZuIG5ldmVyIHJldHVybnMgKi8KKwl9Cisj ZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5EICovCisJcmV0dXJuIHBpZDsKK30KKworI2lm ZGVmIEVYRUNfQkFDS0VORAogI2lmbmRlZiBXSU4zMgogCiAvKgpAQCAtMTYxLDI1ICsyNjEs MjUgQEAgcGlkX3QJCWludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10s IENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2sKICAqIC0gd3JpdGVzIG91dCBiYWNr ZW5kIHZhcmlhYmxlcyB0byB0aGUgcGFyYW1ldGVyIGZpbGUKICAqIC0gZm9yaygpOnMsIGFu ZCB0aGVuIGV4ZWMoKTpzIHRoZSBjaGlsZCBwcm9jZXNzCiAgKi8KLXBpZF90Ci1pbnRlcm5h bF9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBDbGllbnRTb2NrZXQgKmNsaWVu dF9zb2NrLCBCYWNrZ3JvdW5kV29ya2VyICp3b3JrZXIpCitzdGF0aWMgcGlkX3QKK2ludGVy bmFsX2ZvcmtleGVjKGNvbnN0IGNoYXIgKmNoaWxkX2tpbmQsIGNoYXIgKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2sp CiB7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgdG1wQmFja2VuZEZpbGVOdW0gPSAwOwogCXBp ZF90CQlwaWQ7CiAJY2hhcgkJdG1wZmlsZW5hbWVbTUFYUEdQQVRIXTsKLQlCYWNrZW5kUGFy YW1ldGVycyBwYXJhbTsKKwlzaXplX3QJCXBhcmFtc3o7CisJQmFja2VuZFBhcmFtZXRlcnMg KnBhcmFtOwogCUZJTEUJICAgKmZwOworCWNoYXIJICAgKmFyZ3ZbNF07CisJY2hhcgkJZm9y a2F2W01BWFBHUEFUSF07CiAKLQkvKgotCSAqIE1ha2Ugc3VyZSBwYWRkaW5nIGJ5dGVzIGFy ZSBpbml0aWFsaXplZCwgdG8gcHJldmVudCBWYWxncmluZCBmcm9tCi0JICogY29tcGxhaW5p bmcgYWJvdXQgd3JpdGluZyB1bmluaXRpYWxpemVkIGJ5dGVzIHRvIHRoZSBmaWxlLiAgVGhp cyBpc24ndAotCSAqIHBlcmZvcm1hbmNlIGNyaXRpY2FsLCBhbmQgdGhlIHdpbjMyIGltcGxl bWVudGF0aW9uIGluaXRpYWxpemVzIHRoZQotCSAqIHBhZGRpbmcgYnl0ZXMgdG8gemVyb3Ms IHNvIGRvIGl0IGV2ZW4gd2hlbiBub3QgdXNpbmcgVmFsZ3JpbmQuCi0JICovCi0JbWVtc2V0 KCZwYXJhbSwgMCwgc2l6ZW9mKEJhY2tlbmRQYXJhbWV0ZXJzKSk7Ci0KLQlpZiAoIXNhdmVf YmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBjbGllbnRfc29jaywgd29ya2VyKSkKKwlwYXJh bXN6ID0gU2l6ZU9mQmFja2VuZFBhcmFtZXRlcnMoc3RhcnR1cF9kYXRhX2xlbik7CisJcGFy YW0gPSBwYWxsb2MocGFyYW1zeik7CisJaWYgKCFzYXZlX2JhY2tlbmRfdmFyaWFibGVzKHBh cmFtLCBjbGllbnRfc29jaywgc3RhcnR1cF9kYXRhLCBzdGFydHVwX2RhdGFfbGVuKSkKKwl7 CisJCXBmcmVlKHBhcmFtKTsKIAkJcmV0dXJuIC0xOwkJCQkvKiBsb2cgbWFkZSBieSBzYXZl X2JhY2tlbmRfdmFyaWFibGVzICovCisJfQogCiAJLyogQ2FsY3VsYXRlIG5hbWUgZm9yIHRl bXAgZmlsZSAqLwogCXNucHJpbnRmKHRtcGZpbGVuYW1lLCBNQVhQR1BBVEgsICIlcy8lcy5i YWNrZW5kX3Zhci4lZC4lbHUiLApAQCAtMjA3LDcgKzMwNyw3IEBAIGludGVybmFsX2Zvcmtl eGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ss IEJhY2tncm91bmRXCiAJCX0KIAl9CiAKLQlpZiAoZndyaXRlKCZwYXJhbSwgc2l6ZW9mKHBh cmFtKSwgMSwgZnApICE9IDEpCisJaWYgKGZ3cml0ZShwYXJhbSwgcGFyYW1zeiwgMSwgZnAp ICE9IDEpCiAJewogCQllcmVwb3J0KExPRywKIAkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nl c3MoKSwKQEAgLTIyNSwxNCArMzI1LDEzIEBAIGludGVybmFsX2ZvcmtleGVjKGludCBhcmdj LCBjaGFyICphcmd2W10sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2tncm91bmRX CiAJCXJldHVybiAtMTsKIAl9CiAKLQkvKiBNYWtlIHN1cmUgY2FsbGVyIHNldCB1cCBhcmd2 IHByb3Blcmx5ICovCi0JQXNzZXJ0KGFyZ2MgPj0gMyk7Ci0JQXNzZXJ0KGFyZ3ZbYXJnY10g PT0gTlVMTCk7Ci0JQXNzZXJ0KHN0cm5jbXAoYXJndlsxXSwgIi0tZm9yayIsIDYpID09IDAp OwotCUFzc2VydChhcmd2WzJdID09IE5VTEwpOwotCi0JLyogSW5zZXJ0IHRlbXAgZmlsZSBu YW1lIGFmdGVyIC0tZm9yayBhcmd1bWVudCAqLworCS8qIHNldCB1cCBhcmd2IHByb3Blcmx5 ICovCisJYXJndlswXSA9ICJwb3N0Z3JlcyI7CisJc25wcmludGYoZm9ya2F2LCBNQVhQR1BB VEgsICItLWZvcmtjaGlsZD0lcyIsIGNoaWxkX2tpbmQpOworCWFyZ3ZbMV0gPSBmb3JrYXY7 CisJLyogSW5zZXJ0IHRlbXAgZmlsZSBuYW1lIGFmdGVyIC0tZm9ya2NoaWxkIGFyZ3VtZW50 ICovCiAJYXJndlsyXSA9IHRtcGZpbGVuYW1lOworCWFyZ3ZbM10gPSBOVUxMOwogCiAJLyog RmlyZSBvZmYgZXhlY3YgaW4gY2hpbGQgKi8KIAlpZiAoKHBpZCA9IGZvcmtfcHJvY2Vzcygp KSA9PSAwKQpAQCAtMjYxLDI2ICszNjAsMjEgQEAgaW50ZXJuYWxfZm9ya2V4ZWMoaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywgQmFja2dyb3Vu ZFcKICAqIC0gcmVzdW1lcyBleGVjdXRpb24gb2YgdGhlIG5ldyBwcm9jZXNzIG9uY2UgdGhl IGJhY2tlbmQgcGFyYW1ldGVyCiAgKgkgZmlsZSBpcyBjb21wbGV0ZS4KICAqLwotcGlkX3QK LWludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIFBvcnQgKnBvcnQs IEJhY2tncm91bmRXb3JrZXIgKndvcmtlcikKK3N0YXRpYyBwaWRfdAoraW50ZXJuYWxfZm9y a2V4ZWMoY29uc3QgY2hhciAqY2hpbGRfa2luZCwgY2hhciAqc3RhcnR1cF9kYXRhLCBzaXpl X3Qgc3RhcnR1cF9kYXRhX2xlbiwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaykKIHsKIAlp bnQJCQlyZXRyeV9jb3VudCA9IDA7CiAJU1RBUlRVUElORk8gc2k7CiAJUFJPQ0VTU19JTkZP Uk1BVElPTiBwaTsKLQlpbnQJCQlpOwotCWludAkJCWo7CiAJY2hhcgkJY21kTGluZVtNQVhQ R1BBVEggKiAyXTsKIAlIQU5ETEUJCXBhcmFtSGFuZGxlOwogCUJhY2tlbmRQYXJhbWV0ZXJz ICpwYXJhbTsKIAlTRUNVUklUWV9BVFRSSUJVVEVTIHNhOworCXNpemVfdAkJcGFyYW1zejsK IAljaGFyCQlwYXJhbUhhbmRsZVN0clszMl07Ci0Jd2luMzJfZGVhZGNoaWxkX3dhaXRpbmZv ICpjaGlsZGluZm87CisJaW50CQkJbDsKIAotCS8qIE1ha2Ugc3VyZSBjYWxsZXIgc2V0IHVw IGFyZ3YgcHJvcGVybHkgKi8KLQlBc3NlcnQoYXJnYyA+PSAzKTsKLQlBc3NlcnQoYXJndlth cmdjXSA9PSBOVUxMKTsKLQlBc3NlcnQoc3RybmNtcChhcmd2WzFdLCAiLS1mb3JrIiwgNikg PT0gMCk7Ci0JQXNzZXJ0KGFyZ3ZbMl0gPT0gTlVMTCk7CisJcGFyYW1zeiA9IFNpemVPZkJh Y2tlbmRQYXJhbWV0ZXJzKHN0YXJ0dXBfZGF0YV9sZW4pOwogCiAJLyogUmVzdW1lIGhlcmUg aWYgd2UgbmVlZCB0byByZXRyeSAqLwogcmV0cnk6CkBAIC0yOTMsNyArMzg3LDcgQEAgcmV0 cnk6CiAJCQkJCQkJCQkmc2EsCiAJCQkJCQkJCQlQQUdFX1JFQURXUklURSwKIAkJCQkJCQkJ CTAsCi0JCQkJCQkJCQlzaXplb2YoQmFja2VuZFBhcmFtZXRlcnMpLAorCQkJCQkJCQkJcGFy YW1zeiwKIAkJCQkJCQkJCU5VTEwpOwogCWlmIChwYXJhbUhhbmRsZSA9PSBJTlZBTElEX0hB TkRMRV9WQUxVRSkKIAl7CkBAIC0zMDIsOCArMzk2LDcgQEAgcmV0cnk6CiAJCQkJCQlHZXRM YXN0RXJyb3IoKSkpKTsKIAkJcmV0dXJuIC0xOwogCX0KLQotCXBhcmFtID0gTWFwVmlld09m RmlsZShwYXJhbUhhbmRsZSwgRklMRV9NQVBfV1JJVEUsIDAsIDAsIHNpemVvZihCYWNrZW5k UGFyYW1ldGVycykpOworCXBhcmFtID0gTWFwVmlld09mRmlsZShwYXJhbUhhbmRsZSwgRklM RV9NQVBfV1JJVEUsIDAsIDAsIHBhcmFtc3opOwogCWlmICghcGFyYW0pCiAJewogCQllcmVw b3J0KExPRywKQEAgLTMxMywyNSArNDA2LDE1IEBAIHJldHJ5OgogCQlyZXR1cm4gLTE7CiAJ fQogCi0JLyogSW5zZXJ0IHRlbXAgZmlsZSBuYW1lIGFmdGVyIC0tZm9yayBhcmd1bWVudCAq LworCS8qIEZvcm1hdCB0aGUgY21kIGxpbmUgKi8KICNpZmRlZiBfV0lONjQKIAlzcHJpbnRm KHBhcmFtSGFuZGxlU3RyLCAiJWxsdSIsIChMT05HX1BUUikgcGFyYW1IYW5kbGUpOwogI2Vs c2UKIAlzcHJpbnRmKHBhcmFtSGFuZGxlU3RyLCAiJWx1IiwgKERXT1JEKSBwYXJhbUhhbmRs ZSk7CiAjZW5kaWYKLQlhcmd2WzJdID0gcGFyYW1IYW5kbGVTdHI7Ci0KLQkvKiBGb3JtYXQg dGhlIGNtZCBsaW5lICovCi0JY21kTGluZVtzaXplb2YoY21kTGluZSkgLSAxXSA9ICdcMCc7 Ci0JY21kTGluZVtzaXplb2YoY21kTGluZSkgLSAyXSA9ICdcMCc7Ci0Jc25wcmludGYoY21k TGluZSwgc2l6ZW9mKGNtZExpbmUpIC0gMSwgIlwiJXNcIiIsIHBvc3RncmVzX2V4ZWNfcGF0 aCk7Ci0JaSA9IDA7Ci0Jd2hpbGUgKGFyZ3ZbKytpXSAhPSBOVUxMKQotCXsKLQkJaiA9IHN0 cmxlbihjbWRMaW5lKTsKLQkJc25wcmludGYoY21kTGluZSArIGosIHNpemVvZihjbWRMaW5l KSAtIDEgLSBqLCAiIFwiJXNcIiIsIGFyZ3ZbaV0pOwotCX0KLQlpZiAoY21kTGluZVtzaXpl b2YoY21kTGluZSkgLSAyXSAhPSAnXDAnKQorCWwgPSBzbnByaW50ZihjbWRMaW5lLCBzaXpl b2YoY21kTGluZSkgLSAxLCAiXCIlc1wiIC0tZm9ya2NoaWxkPVwiJXNcIiAlcyIsCisJCQkJ IHBvc3RncmVzX2V4ZWNfcGF0aCwgY2hpbGRfa2luZCwgcGFyYW1IYW5kbGVTdHIpOworCWlm IChsID49IHNpemVvZihjbWRMaW5lKSkKIAl7CiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJt c2coInN1YnByb2Nlc3MgY29tbWFuZCBsaW5lIHRvbyBsb25nIikpKTsKQEAgLTM1OSw3ICs0 NDIsNyBAQCByZXRyeToKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmICghc2F2ZV9iYWNrZW5k X3ZhcmlhYmxlcyhwYXJhbSwgcG9ydCwgd29ya2VyLCBwaS5oUHJvY2VzcywgcGkuZHdQcm9j ZXNzSWQpKQorCWlmICghc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhwYXJhbSwgY2xpZW50X3Nv Y2ssIHBpLmhQcm9jZXNzLCBwaS5kd1Byb2Nlc3NJZCwgc3RhcnR1cF9kYXRhLCBzdGFydHVw X2RhdGFfbGVuKSkKIAl7CiAJCS8qCiAJCSAqIGxvZyBtYWRlIGJ5IHNhdmVfYmFja2VuZF92 YXJpYWJsZXMsIGJ1dCB3ZSBoYXZlIHRvIGNsZWFuIHVwIHRoZQpAQCAtNDQ1LDYgKzUyOCwx MTcgQEAgcmV0cnk6CiB9CiAjZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAorLyoKKyAqIFN1 YlBvc3RtYXN0ZXJNYWluIC0tIEdldCB0aGUgZm9yay9leGVjJ2QgcHJvY2VzcyBpbnRvIGEg c3RhdGUgZXF1aXZhbGVudAorICoJCQl0byB3aGF0IGl0IHdvdWxkIGJlIGlmIHdlJ2Qgc2lt cGx5IGZvcmtlZCBvbiBVbml4LCBhbmQgdGhlbgorICoJCQlkaXNwYXRjaCB0byB0aGUgYXBw cm9wcmlhdGUgcGxhY2UuCisgKgorICogVGhlIGZpcnN0IHR3byBjb21tYW5kIGxpbmUgYXJn dW1lbnRzIGFyZSBleHBlY3RlZCB0byBiZSAiLS1mb3JrY2hpbGQ9PG5hbWU+IiwKKyAqIHdo ZXJlIDxuYW1lPiBpbmRpY2F0ZXMgd2hpY2ggcG9zdG1hc3RlciBjaGlsZCB3ZSBhcmUgdG8g YmVjb21lLCBhbmQKKyAqIHRoZSBuYW1lIG9mIGEgdmFyaWFibGVzIGZpbGUgdGhhdCB3ZSBj YW4gcmVhZCB0byBsb2FkIGRhdGEgdGhhdCB3b3VsZAorICogaGF2ZSBiZWVuIGluaGVyaXRl ZCBieSBmb3JrKCkgb24gVW5peC4KKyAqLwordm9pZAorU3ViUG9zdG1hc3Rlck1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyCSAgICpzdGFydHVwX2RhdGE7CisJc2l6 ZV90CQlzdGFydHVwX2RhdGFfbGVuOworCWNoYXIJICAgKmNoaWxkX2tpbmQ7CisJUG9zdG1h c3RlckNoaWxkVHlwZSBjaGlsZF90eXBlOworCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkv KiBJbiBFWEVDX0JBQ0tFTkQgY2FzZSB3ZSB3aWxsIG5vdCBoYXZlIGluaGVyaXRlZCB0aGVz ZSBzZXR0aW5ncyAqLworCUlzUG9zdG1hc3RlckVudmlyb25tZW50ID0gdHJ1ZTsKKwl3aGVy ZVRvU2VuZE91dHB1dCA9IERlc3ROb25lOworCisJLyogU2V0dXAgZXNzZW50aWFsIHN1YnN5 c3RlbXMgKHRvIGVuc3VyZSBlbG9nKCkgYmVoYXZlcyBzYW5lbHkpICovCisJSW5pdGlhbGl6 ZUdVQ09wdGlvbnMoKTsKKworCS8qIENoZWNrIHdlIGdvdCBhcHByb3ByaWF0ZSBhcmdzICov CisJaWYgKGFyZ2MgIT0gMykKKwkJZWxvZyhGQVRBTCwgImludmFsaWQgc3VicG9zdG1hc3Rl ciBpbnZvY2F0aW9uIik7CisKKwkvKiBGaW5kIHRoZSBlbnRyeSBpbiBjaGlsZF9wcm9jZXNz X2tpbmRzICovCisJaWYgKHN0cm5jbXAoYXJndlsxXSwgIi0tZm9ya2NoaWxkPSIsIDEyKSAh PSAwKQorCQllbG9nKEZBVEFMLCAiaW52YWxpZCBzdWJwb3N0bWFzdGVyIGludm9jYXRpb24g KC0tZm9ya2NoaWxkIGFyZ3VtZW50IG1pc3NpbmcpIik7CisJY2hpbGRfa2luZCA9IGFyZ3Zb MV0gKyAxMjsKKwlmb3VuZCA9IGZhbHNlOworCWZvciAoaW50IGlkeCA9IDA7IGlkeCA8IGxl bmd0aG9mKGNoaWxkX3Byb2Nlc3Nfa2luZHMpOyBpZHgrKykKKwl7CisJCWlmIChzdHJjbXAo Y2hpbGRfcHJvY2Vzc19raW5kc1tpZHhdLm5hbWUsIGNoaWxkX2tpbmQpID09IDApCisJCXsK KwkJCWNoaWxkX3R5cGUgPSBpZHg7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJ fQorCX0KKwlpZiAoIWZvdW5kKQorCQllbG9nKEVSUk9SLCAidW5rbm93biBjaGlsZCBraW5k ICVzIiwgY2hpbGRfa2luZCk7CisKKwkvKiBSZWFkIGluIHRoZSB2YXJpYWJsZXMgZmlsZSAq LworCXJlYWRfYmFja2VuZF92YXJpYWJsZXMoYXJndlsyXSwgJnN0YXJ0dXBfZGF0YSwgJnN0 YXJ0dXBfZGF0YV9sZW4pOworCisJLyogQ2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRz IChhcyBzb29uIGFzIHdlIGtub3cgdGhlbSkgKi8KKwlDbG9zZVBvc3RtYXN0ZXJQb3J0cyhj aGlsZF90eXBlID09IFBNQ19TWVNMT0dHRVIpOworCisJLyogU2V0dXAgYXMgcG9zdG1hc3Rl ciBjaGlsZCAqLworCUluaXRQb3N0bWFzdGVyQ2hpbGQoKTsKKworCS8qCisJICogSWYgYXBw cm9wcmlhdGUsIHBoeXNpY2FsbHkgcmUtYXR0YWNoIHRvIHNoYXJlZCBtZW1vcnkgc2VnbWVu dC4gV2Ugd2FudAorCSAqIHRvIGRvIHRoaXMgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyIHRv IGVuc3VyZSB0aGF0IHdlIGNhbiBhdHRhY2ggYXQgdGhlCisJICogc2FtZSBhZGRyZXNzIHRo ZSBwb3N0bWFzdGVyIHVzZWQuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2UgY2hvb3NlIG5v dAorCSAqIHRvIHJlLWF0dGFjaCwgd2UgbWF5IGhhdmUgb3RoZXIgY2xlYW51cCB0byBkby4K KwkgKgorCSAqIElmIHRlc3RpbmcgRVhFQ19CQUNLRU5EIG9uIExpbnV4LCB5b3Ugc2hvdWxk IHJ1biB0aGlzIGFzIHJvb3QgYmVmb3JlCisJICogc3RhcnRpbmcgdGhlIHBvc3RtYXN0ZXI6 CisJICoKKwkgKiBzeXNjdGwgLXcga2VybmVsLnJhbmRvbWl6ZV92YV9zcGFjZT0wCisJICoK KwkgKiBUaGlzIHByZXZlbnRzIHVzaW5nIHJhbmRvbWl6ZWQgc3RhY2sgYW5kIGNvZGUgYWRk cmVzc2VzIHRoYXQgY2F1c2UgdGhlCisJICogY2hpbGQgcHJvY2VzcydzIG1lbW9yeSBtYXAg dG8gYmUgZGlmZmVyZW50IGZyb20gdGhlIHBhcmVudCdzLCBtYWtpbmcgaXQKKwkgKiBzb21l dGltZXMgaW1wb3NzaWJsZSB0byBhdHRhY2ggdG8gc2hhcmVkIG1lbW9yeSBhdCB0aGUgZGVz aXJlZCBhZGRyZXNzLgorCSAqIFJldHVybiB0aGUgc2V0dGluZyB0byBpdHMgb2xkIHZhbHVl ICh1c3VhbGx5ICcxJyBvciAnMicpIHdoZW4gZmluaXNoZWQuCisJICovCisJaWYgKGNoaWxk X3Byb2Nlc3Nfa2luZHNbY2hpbGRfdHlwZV0uc2htZW1fYXR0YWNoKQorCQlQR1NoYXJlZE1l bW9yeVJlQXR0YWNoKCk7CisJZWxzZQorCQlQR1NoYXJlZE1lbW9yeU5vUmVBdHRhY2goKTsK KworCS8qIFJlYWQgaW4gcmVtYWluaW5nIEdVQyB2YXJpYWJsZXMgKi8KKwlyZWFkX25vbmRl ZmF1bHRfdmFyaWFibGVzKCk7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIGRhdGEgZGly ZWN0b3J5IGxvb2tzIHZhbGlkLCB3aGljaCB3aWxsIGFsc28gY2hlY2sgdGhlCisJICogcHJp dmlsZWdlcyBvbiB0aGUgZGF0YSBkaXJlY3RvcnkgYW5kIHVwZGF0ZSBvdXIgdW1hc2sgYW5k IGZpbGUvZ3JvdXAKKwkgKiB2YXJpYWJsZXMgZm9yIGNyZWF0aW5nIGZpbGVzIGxhdGVyLiAg Tm90ZTogdGhpcyBzaG91bGQgcmVhbGx5IGJlIGRvbmUKKwkgKiBiZWZvcmUgd2UgY3JlYXRl IGFueSBmaWxlcyBvciBkaXJlY3Rvcmllcy4KKwkgKi8KKwljaGVja0RhdGFEaXIoKTsKKwor CS8qCisJICogKHJlLSlyZWFkIGNvbnRyb2wgZmlsZSwgYXMgaXQgY29udGFpbnMgY29uZmln LiBUaGUgcG9zdG1hc3RlciB3aWxsCisJICogYWxyZWFkeSBoYXZlIHJlYWQgdGhpcywgYnV0 IHRoaXMgcHJvY2VzcyBkb2Vzbid0IGtub3cgYWJvdXQgdGhhdC4KKwkgKi8KKwlMb2NhbFBy b2Nlc3NDb250cm9sRmlsZShmYWxzZSk7CisKKwkvKgorCSAqIFJlbG9hZCBhbnkgbGlicmFy aWVzIHRoYXQgd2VyZSBwcmVsb2FkZWQgYnkgdGhlIHBvc3RtYXN0ZXIuICBTaW5jZSB3ZQor CSAqIGV4ZWMnZCB0aGlzIHByb2Nlc3MsIHRob3NlIGxpYnJhcmllcyBkaWRuJ3QgY29tZSBh bG9uZyB3aXRoIHVzOyBidXQgd2UKKwkgKiBzaG91bGQgbG9hZCB0aGVtIGludG8gYWxsIGNo aWxkIHByb2Nlc3NlcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlCisJICogbm9uLUVYRUNf QkFDS0VORCBiZWhhdmlvci4KKwkgKi8KKwlwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJh cmllcygpOworCisJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICov CisJaWYgKFVzZWRTaG1lbVNlZ0FkZHIgIT0gTlVMTCkKKwkJSW5pdFNobWVtQWNjZXNzKFVz ZWRTaG1lbVNlZ0FkZHIpOworCisJLyogUnVuIGJhY2tlbmQgb3IgYXBwcm9wcmlhdGUgY2hp bGQgKi8KKwljaGlsZF9wcm9jZXNzX2tpbmRzW2NoaWxkX3R5cGVdLm1haW5fZm4oc3RhcnR1 cF9kYXRhLCBzdGFydHVwX2RhdGFfbGVuKTsKKwlwZ191bnJlYWNoYWJsZSgpOwkJCS8qIG1h aW5fZm4gbmV2ZXIgcmV0dXJucyAqLworfQorCiAvKgogICogVGhlIGZvbGxvd2luZyBuZWVk IHRvIGJlIGF2YWlsYWJsZSB0byB0aGUgc2F2ZS9yZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVz CiAgKiBmdW5jdGlvbnMuICBUaGV5IGFyZSBtYXJrZWQgTk9OX0VYRUNfU1RBVElDIGluIHRo ZWlyIGhvbWUgbW9kdWxlcy4KQEAgLTQ2OCwzOCArNjYyLDIyIEBAIHN0YXRpYyBib29sIHdy aXRlX2luaGVyaXRhYmxlX3NvY2tldChJbmhlcml0YWJsZVNvY2tldCAqZGVzdCwgU09DS0VU IHNyYywKIHN0YXRpYyB2b2lkIHJlYWRfaW5oZXJpdGFibGVfc29ja2V0KFNPQ0tFVCAqZGVz dCwgSW5oZXJpdGFibGVTb2NrZXQgKnNyYyk7CiAjZW5kaWYKIAotI2lmbmRlZiBXSU4zMgot c3RhdGljIGJvb2wKLXNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMg KnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29ya2VyICp3 b3JrZXIpCi0jZWxzZQorCiBzdGF0aWMgYm9vbAotc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhC YWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJh Y2tncm91bmRXb3JrZXIgKndvcmtlciwKLQkJCQkJICAgSEFORExFIGNoaWxkUHJvY2Vzcywg cGlkX3QgY2hpbGRQaWQpCitzYXZlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0 ZXJzICpwYXJhbSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywKKyNpZmRlZiBXSU4zMgor CQkJCQkgICBIQU5ETEUgY2hpbGRQcm9jZXNzLCBwaWRfdCBjaGlsZFBpZCwKICNlbmRpZgor CQkJCQkgICBjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQog ewogCWlmIChjbGllbnRfc29jaykKLQl7CiAJCW1lbWNweSgmcGFyYW0tPmNsaWVudF9zb2Nr LCBjbGllbnRfc29jaywgc2l6ZW9mKENsaWVudFNvY2tldCkpOwotCQlpZiAoIXdyaXRlX2lu aGVyaXRhYmxlX3NvY2tldCgmcGFyYW0tPmluaF9zb2NrLCBjbGllbnRfc29jay0+c29jaywg Y2hpbGRQaWQpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlwYXJhbS0+aGFzX2NsaWVudF9zb2Nr ID0gdHJ1ZTsKLQl9CiAJZWxzZQotCXsKIAkJbWVtc2V0KCZwYXJhbS0+Y2xpZW50X3NvY2ss IDAsIHNpemVvZihDbGllbnRTb2NrZXQpKTsKLQkJcGFyYW0tPmhhc19jbGllbnRfc29jayA9 IGZhbHNlOwotCX0KLQotCWlmICh3b3JrZXIpCi0JewotCQltZW1jcHkoJnBhcmFtLT5iZ3dv cmtlciwgd29ya2VyLCBzaXplb2YoQmFja2dyb3VuZFdvcmtlcikpOwotCQlwYXJhbS0+aGFz X2Jnd29ya2VyID0gdHJ1ZTsKLQl9Ci0JZWxzZQotCXsKLQkJbWVtc2V0KCZwYXJhbS0+Ymd3 b3JrZXIsIDAsIHNpemVvZihCYWNrZ3JvdW5kV29ya2VyKSk7Ci0JCXBhcmFtLT5oYXNfYmd3 b3JrZXIgPSBmYWxzZTsKLQl9CisJaWYgKCF3cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoJnBh cmFtLT5pbmhfc29jaywKKwkJCQkJCQkJICBjbGllbnRfc29jayA/IGNsaWVudF9zb2NrLT5z b2NrIDogUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJCQkJICBjaGlsZFBpZCkpCisJCXJldHVy biBmYWxzZTsKIAogCXN0cmxjcHkocGFyYW0tPkRhdGFEaXIsIERhdGFEaXIsIE1BWFBHUEFU SCk7CiAKQEAgLTU1Niw2ICs3MzQsOSBAQCBzYXZlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tl bmRQYXJhbWV0ZXJzICpwYXJhbSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywgQmFjawog CiAJc3RybGNweShwYXJhbS0+cGtnbGliX3BhdGgsIHBrZ2xpYl9wYXRoLCBNQVhQR1BBVEgp OwogCisJcGFyYW0tPnN0YXJ0dXBfZGF0YV9sZW4gPSBzdGFydHVwX2RhdGFfbGVuOworCW1l bWNweShwYXJhbS0+c3RhcnR1cF9kYXRhLCBzdGFydHVwX2RhdGEsIHN0YXJ0dXBfZGF0YV9s ZW4pOworCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTY1Miw4ICs4MzMsOCBAQCByZWFkX2lu aGVyaXRhYmxlX3NvY2tldChTT0NLRVQgKmRlc3QsIEluaGVyaXRhYmxlU29ja2V0ICpzcmMp CiB9CiAjZW5kaWYKIAotdm9pZAotcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwg Q2xpZW50U29ja2V0ICoqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKip3b3JrZXIp CitzdGF0aWMgdm9pZAorcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgY2hhciAq KnN0YXJ0dXBfZGF0YSwgc2l6ZV90ICpzdGFydHVwX2RhdGFfbGVuKQogewogCUJhY2tlbmRQ YXJhbWV0ZXJzIHBhcmFtOwogCkBAIC02NzcsNiArODU4LDIxIEBAIHJlYWRfYmFja2VuZF92 YXJpYWJsZXMoY2hhciAqaWQsIENsaWVudFNvY2tldCAqKmNsaWVudF9zb2NrLCBCYWNrZ3Jv dW5kV29ya2VyICoqCiAJCWV4aXQoMSk7CiAJfQogCisJLyogcmVhZCBzdGFydHVwIGRhdGEg Ki8KKwkqc3RhcnR1cF9kYXRhX2xlbiA9IHBhcmFtLnN0YXJ0dXBfZGF0YV9sZW47CisJaWYg KHBhcmFtLnN0YXJ0dXBfZGF0YV9sZW4gPiAwKQorCXsKKwkJKnN0YXJ0dXBfZGF0YSA9IHBh bGxvYygqc3RhcnR1cF9kYXRhX2xlbik7CisJCWlmIChmcmVhZCgqc3RhcnR1cF9kYXRhLCAq c3RhcnR1cF9kYXRhX2xlbiwgMSwgZnApICE9IDEpCisJCXsKKwkJCXdyaXRlX3N0ZGVycigi Y291bGQgbm90IHJlYWQgc3RhcnR1cCBkYXRhIGZyb20gYmFja2VuZCB2YXJpYWJsZXMgZmls ZSBcIiVzXCI6ICVzXG4iLAorCQkJCQkJIGlkLCBzdHJlcnJvcihlcnJubykpOworCQkJZXhp dCgxKTsKKwkJfQorCX0KKwllbHNlCisJCSpzdGFydHVwX2RhdGEgPSBOVUxMOworCiAJLyog UmVsZWFzZSBmaWxlICovCiAJRnJlZUZpbGUoZnApOwogCWlmICh1bmxpbmsoaWQpICE9IDAp CkBAIC03MDUsNiArOTAxLDE2IEBAIHJlYWRfYmFja2VuZF92YXJpYWJsZXMoY2hhciAqaWQs IENsaWVudFNvY2tldCAqKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29ya2VyICoqCiAKIAlt ZW1jcHkoJnBhcmFtLCBwYXJhbXAsIHNpemVvZihCYWNrZW5kUGFyYW1ldGVycykpOwogCisJ LyogcmVhZCBzdGFydHVwIGRhdGEgKi8KKwkqc3RhcnR1cF9kYXRhX2xlbiA9IHBhcmFtLnN0 YXJ0dXBfZGF0YV9sZW47CisJaWYgKHBhcmFtLnN0YXJ0dXBfZGF0YV9sZW4gPiAwKQorCXsK KwkJKnN0YXJ0dXBfZGF0YSA9IHBhbGxvYyhwYXJhbXAtPnN0YXJ0dXBfZGF0YV9sZW4pOwor CQltZW1jcHkoKnN0YXJ0dXBfZGF0YSwgcGFyYW1wLT5zdGFydHVwX2RhdGEsIHBhcmFtLnN0 YXJ0dXBfZGF0YV9sZW4pOworCX0KKwllbHNlCisJCSpzdGFydHVwX2RhdGEgPSBOVUxMOwor CiAJaWYgKCFVbm1hcFZpZXdPZkZpbGUocGFyYW1wKSkKIAl7CiAJCXdyaXRlX3N0ZGVycigi Y291bGQgbm90IHVubWFwIHZpZXcgb2YgYmFja2VuZCB2YXJpYWJsZXM6IGVycm9yIGNvZGUg JWx1XG4iLApAQCAtNzIwLDMwICs5MjYsMTkgQEAgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhj aGFyICppZCwgQ2xpZW50U29ja2V0ICoqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIg KioKIAl9CiAjZW5kaWYKIAotCXJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBj bGllbnRfc29jaywgd29ya2VyKTsKKwlyZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKCZwYXJh bSk7CiB9CiAKIC8qIFJlc3RvcmUgY3JpdGljYWwgYmFja2VuZCB2YXJpYWJsZXMgZnJvbSB0 aGUgQmFja2VuZFBhcmFtZXRlcnMgc3RydWN0ICovCiBzdGF0aWMgdm9pZAotcmVzdG9yZV9i YWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tl dCAqKmNsaWVudF9zb2NrLCBCYWNrZ3JvdW5kV29ya2VyICoqd29ya2VyKQorcmVzdG9yZV9i YWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0pCiB7Ci0JaWYgKHBh cmFtLT5oYXNfY2xpZW50X3NvY2spCi0JewotCQkqY2xpZW50X3NvY2sgPSAoQ2xpZW50U29j a2V0ICopIE1lbW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoQ2xp ZW50U29ja2V0KSk7Ci0JCW1lbWNweSgqY2xpZW50X3NvY2ssICZwYXJhbS0+Y2xpZW50X3Nv Y2ssIHNpemVvZihDbGllbnRTb2NrZXQpKTsKLQkJcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQo JigqY2xpZW50X3NvY2spLT5zb2NrLCAmcGFyYW0tPmluaF9zb2NrKTsKLQl9Ci0JZWxzZQot CQkqY2xpZW50X3NvY2sgPSBOVUxMOwotCi0JaWYgKHBhcmFtLT5oYXNfYmd3b3JrZXIpCisJ aWYgKHBhcmFtLT5jbGllbnRfc29jay5zb2NrICE9IFBHSU5WQUxJRF9TT0NLRVQpCiAJewot CQkqd29ya2VyID0gKEJhY2tncm91bmRXb3JrZXIgKikKLQkJCU1lbW9yeUNvbnRleHRBbGxv YyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoQmFja2dyb3VuZFdvcmtlcikpOwotCQltZW1j cHkoKndvcmtlciwgJnBhcmFtLT5iZ3dvcmtlciwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIp KTsKKwkJTXlDbGllbnRTb2NrZXQgPSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wTWVtb3J5Q29u dGV4dCwgc2l6ZW9mKENsaWVudFNvY2tldCkpOworCQltZW1jcHkoTXlDbGllbnRTb2NrZXQs ICZwYXJhbS0+Y2xpZW50X3NvY2ssIHNpemVvZihDbGllbnRTb2NrZXQpKTsKKwkJcmVhZF9p bmhlcml0YWJsZV9zb2NrZXQoJk15Q2xpZW50U29ja2V0LT5zb2NrLCAmcGFyYW0tPmluaF9z b2NrKTsKIAl9Ci0JZWxzZQotCQkqd29ya2VyID0gTlVMTDsKIAogCVNldERhdGFEaXIocGFy YW0tPkRhdGFEaXIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bn YXJjaC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYwppbmRleCA1ZDVjNTcz MzM0MC4uYzdiMGEzZjEwNjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cGdhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYwpAQCAtMjEy LDggKzIxMiwxMCBAQCBQZ0FyY2hDYW5SZXN0YXJ0KHZvaWQpCiAKIC8qIE1haW4gZW50cnkg cG9pbnQgZm9yIGFyY2hpdmVyIHByb2Nlc3MgKi8KIHZvaWQKLVBnQXJjaGl2ZXJNYWluKHZv aWQpCitQZ0FyY2hpdmVyTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVw X2RhdGFfbGVuKQogeworCUFzc2VydChzdGFydHVwX2RhdGFfbGVuID09IDApOworCiAJTXlB dXhQcm9jVHlwZSA9IEFyY2hpdmVyUHJvY2VzczsKIAlNeUJhY2tlbmRUeXBlID0gQl9BUkNI SVZFUjsKIAlBdXhpbGlhcnlQcm9jZXNzSW5pdCgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYwppbmRleCA1ODZhYWM3OGQ1My4uNDg0MmNiMWJjZmQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0yLDkgKzIsOSBAQAogICoKICAqIHBvc3Rt YXN0ZXIuYwogICoJICBUaGlzIHByb2dyYW0gYWN0cyBhcyBhIGNsZWFyaW5nIGhvdXNlIGZv ciByZXF1ZXN0cyB0byB0aGUKLSAqCSAgUE9TVEdSRVMgc3lzdGVtLiAgRnJvbnRlbmQgcHJv Z3JhbXMgc2VuZCBhIHN0YXJ0dXAgbWVzc2FnZQotICoJICB0byB0aGUgUG9zdG1hc3RlciBh bmQgdGhlIHBvc3RtYXN0ZXIgdXNlcyB0aGUgaW5mbyBpbiB0aGUKLSAqCSAgbWVzc2FnZSB0 byBzZXR1cCBhIGJhY2tlbmQgcHJvY2Vzcy4KKyAqCSAgUE9TVEdSRVMgc3lzdGVtLiAgRnJv bnRlbmQgcHJvZ3JhbXMgY29ubmVjdCB0byB0aGUgUG9zdG1hc3RlciwKKyAqCSAgYW5kIHBv c3RtYXN0ZXIgZm9ya3MgYSBuZXcgYmFja2VuZCBwcm9jZXNzIHRvIGhhbmRsZSB0aGUKKyAq CSAgY29ubmVjdGlvbi4KICAqCiAgKgkgIFRoZSBwb3N0bWFzdGVyIGFsc28gbWFuYWdlcyBz eXN0ZW0td2lkZSBvcGVyYXRpb25zIHN1Y2ggYXMKICAqCSAgc3RhcnR1cCBhbmQgc2h1dGRv d24uIFRoZSBwb3N0bWFzdGVyIGl0c2VsZiBkb2Vzbid0IGRvIHRob3NlCkBAIC0xMDgsNyAr MTA4LDYgQEAKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29y a2VyX2ludGVybmFscy5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgi CiAjaW5jbHVkZSAicG9zdG1hc3Rlci9wZ2FyY2guaCIKICNpbmNsdWRlICJwb3N0bWFzdGVy L3Bvc3RtYXN0ZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5oIgpAQCAt MTE2LDcgKzExNSw2IEBACiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9mZC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCi0jaW5j bHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwu aCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90 LmgiCkBAIC00MjEsNyArNDE5LDYgQEAgdHlwZWRlZiBlbnVtIENBQ19zdGF0ZQogfSBDQUNf c3RhdGU7CiAKIHN0YXRpYyB2b2lkIEJhY2tlbmRJbml0aWFsaXplKENsaWVudFNvY2tldCAq Y2xpZW50X3NvY2ssIENBQ19zdGF0ZSBjYWMpOwotc3RhdGljIHZvaWQgQmFja2VuZFJ1bih2 b2lkKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIHN0YXRpYyB2b2lkIEV4aXRQb3N0bWFz dGVyKGludCBzdGF0dXMpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogc3RhdGljIGludAlT ZXJ2ZXJMb29wKHZvaWQpOwogc3RhdGljIGludAlCYWNrZW5kU3RhcnR1cChDbGllbnRTb2Nr ZXQgKmNsaWVudF9zb2NrKTsKQEAgLTQ0Miw3ICs0MzksNyBAQCBzdGF0aWMgaW50CUNvdW50 Q2hpbGRyZW4oaW50IHRhcmdldCk7CiBzdGF0aWMgYm9vbCBhc3NpZ25fYmFja2VuZGxpc3Rf ZW50cnkoUmVnaXN0ZXJlZEJnV29ya2VyICpydyk7CiBzdGF0aWMgdm9pZCBtYXliZV9zdGFy dF9iZ3dvcmtlcnModm9pZCk7CiBzdGF0aWMgYm9vbCBDcmVhdGVPcHRzRmlsZShpbnQgYXJn YywgY2hhciAqYXJndltdLCBjaGFyICpmdWxscHJvZ25hbWUpOwotc3RhdGljIHBpZF90IFN0 YXJ0Q2hpbGRQcm9jZXNzKEF1eFByb2NUeXBlIHR5cGUpOworc3RhdGljIHBpZF90IFN0YXJ0 Q2hpbGRQcm9jZXNzKFBvc3RtYXN0ZXJDaGlsZFR5cGUgdHlwZSk7CiBzdGF0aWMgdm9pZCBT dGFydEF1dG92YWN1dW1Xb3JrZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBNYXliZVN0YXJ0V2Fs UmVjZWl2ZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBJbml0UG9zdG1hc3RlckRlYXRoV2F0Y2hI YW5kbGUodm9pZCk7CkBAIC00NzcsMjMgKzQ3NCwxOCBAQCB0eXBlZGVmIHN0cnVjdAogfSB3 aW4zMl9kZWFkY2hpbGRfd2FpdGluZm87CiAjZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAot c3RhdGljIHBpZF90IGJhY2tlbmRfZm9ya2V4ZWMoQ2xpZW50U29ja2V0ICpjbGllbnRfc29j aywgQ0FDX3N0YXRlIGNhYyk7Ci0KLQotLyogaW4gbGF1bmNoX2JhY2tlbmQuYyAqLwotZXh0 ZXJuIHBpZF90IGludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIENs aWVudFNvY2tldCAqY2xpZW50X3NvY2ssIEJhY2tncm91bmRXb3JrZXIgKndvcmtlcik7Ci1l eHRlcm4gdm9pZCByZWFkX2JhY2tlbmRfdmFyaWFibGVzKGNoYXIgKmlkLCBDbGllbnRTb2Nr ZXQgKipjbGllbnRfc29jaywgQmFja2dyb3VuZFdvcmtlciAqKndvcmtlcik7Ci0KIHN0YXRp YyB2b2lkIFNobWVtQmFja2VuZEFycmF5QWRkKEJhY2tlbmQgKmJuKTsKIHN0YXRpYyB2b2lk IFNobWVtQmFja2VuZEFycmF5UmVtb3ZlKEJhY2tlbmQgKmJuKTsKICNlbmRpZgkJCQkJCQkv KiBFWEVDX0JBQ0tFTkQgKi8KIAotI2RlZmluZSBTdGFydHVwRGF0YUJhc2UoKQkJU3RhcnRD aGlsZFByb2Nlc3MoU3RhcnR1cFByb2Nlc3MpCi0jZGVmaW5lIFN0YXJ0QXJjaGl2ZXIoKQkJ CVN0YXJ0Q2hpbGRQcm9jZXNzKEFyY2hpdmVyUHJvY2VzcykKLSNkZWZpbmUgU3RhcnRCYWNr Z3JvdW5kV3JpdGVyKCkgU3RhcnRDaGlsZFByb2Nlc3MoQmdXcml0ZXJQcm9jZXNzKQotI2Rl ZmluZSBTdGFydENoZWNrcG9pbnRlcigpCQlTdGFydENoaWxkUHJvY2VzcyhDaGVja3BvaW50 ZXJQcm9jZXNzKQotI2RlZmluZSBTdGFydFdhbFdyaXRlcigpCQlTdGFydENoaWxkUHJvY2Vz cyhXYWxXcml0ZXJQcm9jZXNzKQotI2RlZmluZSBTdGFydFdhbFJlY2VpdmVyKCkJCVN0YXJ0 Q2hpbGRQcm9jZXNzKFdhbFJlY2VpdmVyUHJvY2VzcykKKyNkZWZpbmUgU3RhcnR1cERhdGFC YXNlKCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKFBNQ19TVEFSVFVQKQorI2RlZmluZSBTdGFydEFy Y2hpdmVyKCkJCQlTdGFydENoaWxkUHJvY2VzcyhQTUNfQVJDSElWRVIpCisjZGVmaW5lIFN0 YXJ0QmFja2dyb3VuZFdyaXRlcigpIFN0YXJ0Q2hpbGRQcm9jZXNzKFBNQ19CR1dSSVRFUikK KyNkZWZpbmUgU3RhcnRDaGVja3BvaW50ZXIoKQkJU3RhcnRDaGlsZFByb2Nlc3MoUE1DX0NI RUNLUE9JTlRFUikKKyNkZWZpbmUgU3RhcnRXYWxXcml0ZXIoKQkJU3RhcnRDaGlsZFByb2Nl c3MoUE1DX1dBTF9XUklURVIpCisjZGVmaW5lIFN0YXJ0V2FsUmVjZWl2ZXIoKQkJU3RhcnRD aGlsZFByb2Nlc3MoUE1DX1dBTF9SRUNFSVZFUikKKyNkZWZpbmUgU3RhcnRBdXRvVmFjTGF1 bmNoZXIoKQlTdGFydENoaWxkUHJvY2VzcyhQTUNfQVZfTEFVTkNIRVIpOworI2RlZmluZSBT dGFydEF1dG9WYWNXb3JrZXIoKQlTdGFydENoaWxkUHJvY2VzcyhQTUNfQVZfV09SS0VSKTsK IAogLyogTWFjcm9zIHRvIGNoZWNrIGV4aXQgc3RhdHVzIG9mIGEgY2hpbGQgcHJvY2VzcyAq LwogI2RlZmluZSBFWElUX1NUQVRVU18wKHN0KSAgKChzdCkgPT0gMCkKQEAgLTM5MTMsNiAr MzkwNSwxMiBAQCBUZXJtaW5hdGVDaGlsZHJlbihpbnQgc2lnbmFsKQogCQlzaWduYWxfY2hp bGQoUGdBcmNoUElELCBzaWduYWwpOwogfQogCisvKiBJbmZvcm1hdGlvbiBwYXNzZWQgZnJv bSBwb3N0bWFzdGVyIHRvIGJhY2tlbmQgcHJvY2VzcyAqLwordHlwZWRlZiBzdHJ1Y3QgQmFj a2VuZFN0YXJ0dXBJbmZvCit7CisJQ0FDX3N0YXRlCWNhbkFjY2VwdENvbm5lY3Rpb25zOwor fSBCYWNrZW5kU3RhcnR1cEluZm87CisKIC8qCiAgKiBCYWNrZW5kU3RhcnR1cCAtLSBzdGFy dCBiYWNrZW5kIHByb2Nlc3MKICAqCkBAIC0zOTI1LDcgKzM5MjMsNyBAQCBCYWNrZW5kU3Rh cnR1cChDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKQogewogCUJhY2tlbmQgICAgKmJuOwkJ CQkvKiBmb3IgYmFja2VuZCBjbGVhbnVwICovCiAJcGlkX3QJCXBpZDsKLQlDQUNfc3RhdGUJ Y2FjOworCUJhY2tlbmRTdGFydHVwSW5mbyBpbmZvOwogCiAJLyoKIAkgKiBDcmVhdGUgYmFj a2VuZCBkYXRhIHN0cnVjdHVyZS4gIEJldHRlciBiZWZvcmUgdGhlIGZvcmsoKSBzbyB3ZSBj YW4KQEAgLTM5NTQsMTEgKzM5NTIsMTAgQEAgQmFja2VuZFN0YXJ0dXAoQ2xpZW50U29ja2V0 ICpjbGllbnRfc29jaykKIAkJcmV0dXJuIFNUQVRVU19FUlJPUjsKIAl9CiAKLQlibi0+Y2Fu Y2VsX2tleSA9IE15Q2FuY2VsS2V5OwotCiAJLyogUGFzcyBkb3duIGNhbkFjY2VwdENvbm5l Y3Rpb25zIHN0YXRlICovCi0JY2FjID0gY2FuQWNjZXB0Q29ubmVjdGlvbnMoQkFDS0VORF9U WVBFX05PUk1BTCk7Ci0JYm4tPmRlYWRfZW5kID0gKGNhYyAhPSBDQUNfT0spOworCWluZm8u Y2FuQWNjZXB0Q29ubmVjdGlvbnMgPSBjYW5BY2NlcHRDb25uZWN0aW9ucyhCQUNLRU5EX1RZ UEVfTk9STUFMKTsKKwlibi0+ZGVhZF9lbmQgPSAoaW5mby5jYW5BY2NlcHRDb25uZWN0aW9u cyAhPSBDQUNfT0spOworCWJuLT5jYW5jZWxfa2V5ID0gTXlDYW5jZWxLZXk7CiAKIAkvKgog CSAqIFVubGVzcyBpdCdzIGEgZGVhZF9lbmQgY2hpbGQsIGFzc2lnbiBpdCBhIGNoaWxkIHNs b3QgbnVtYmVyCkBAIC0zOTcxLDI2ICszOTY4LDcgQEAgQmFja2VuZFN0YXJ0dXAoQ2xpZW50 U29ja2V0ICpjbGllbnRfc29jaykKIAkvKiBIYXNuJ3QgYXNrZWQgdG8gYmUgbm90aWZpZWQg YWJvdXQgYW55IGJnd29ya2VycyB5ZXQgKi8KIAlibi0+Ymd3b3JrZXJfbm90aWZ5ID0gZmFs c2U7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlwaWQgPSBiYWNrZW5kX2ZvcmtleGVjKGNs aWVudF9zb2NrLCBjYWMpOwotI2Vsc2UJCQkJCQkJLyogIUVYRUNfQkFDS0VORCAqLwotCXBp ZCA9IGZvcmtfcHJvY2VzcygpOwotCWlmIChwaWQgPT0gMCkJCQkJLyogY2hpbGQgKi8KLQl7 Ci0JCS8qIERldGFuZ2xlIGZyb20gcG9zdG1hc3RlciAqLwotCQlJbml0UG9zdG1hc3RlckNo aWxkKCk7Ci0KLQkJLyogQ2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRzICovCi0JCUNs b3NlUG9zdG1hc3RlclBvcnRzKGZhbHNlKTsKLQotCQkvKiBQZXJmb3JtIGFkZGl0aW9uYWwg aW5pdGlhbGl6YXRpb24gYW5kIGNvbGxlY3Qgc3RhcnR1cCBwYWNrZXQgKi8KLQkJQmFja2Vu ZEluaXRpYWxpemUoY2xpZW50X3NvY2ssIGNhYyk7Ci0KLQkJLyogQW5kIHJ1biB0aGUgYmFj a2VuZCAqLwotCQlCYWNrZW5kUnVuKCk7Ci0JfQotI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFD S0VORCAqLwotCisJcGlkID0gcG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2goUE1DX0JBQ0tFTkQs IChjaGFyICopICZpbmZvLCBzaXplb2YoaW5mbyksIGNsaWVudF9zb2NrKTsKIAlpZiAocGlk IDwgMCkKIAl7CiAJCS8qIGluIHBhcmVudCwgZm9yayBmYWlsZWQgKi8KQEAgLTQzMDAsMjY0 ICs0Mjc4LDU3IEBAIEJhY2tlbmRJbml0aWFsaXplKENsaWVudFNvY2tldCAqY2xpZW50X3Nv Y2ssIENBQ19zdGF0ZSBjYWMpCiAJc2V0X3BzX2Rpc3BsYXkoImluaXRpYWxpemluZyIpOwog fQogCi0KLS8qCi0gKiBCYWNrZW5kUnVuIC0tIHNldCB1cCB0aGUgYmFja2VuZCdzIGFyZ3Vt ZW50IGxpc3QgYW5kIGludm9rZSBQb3N0Z3Jlc01haW4oKQotICoKLSAqIHJldHVybnM6Ci0g KgkJRG9lc24ndCByZXR1cm4gYXQgYWxsLgotICovCi1zdGF0aWMgdm9pZAotQmFja2VuZFJ1 bih2b2lkKQotewotCS8qCi0JICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0cnVj dCBpbiBzaGFyZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlzCi0JICogYmVmb3JlIHdlIGNh biB1c2UgTFdMb2NrcyBvciBhY2Nlc3MgYW55IHNoYXJlZCBtZW1vcnkuCi0JICovCi0JSW5p dFByb2Nlc3MoKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHdlIGFyZW4ndCBpbiBQb3N0bWFz dGVyQ29udGV4dCBhbnltb3JlLiAgKFdlIGNhbid0IGRlbGV0ZSBpdAotCSAqIGp1c3QgeWV0 LCB0aG91Z2gsIGJlY2F1c2UgSW5pdFBvc3RncmVzIHdpbGwgbmVlZCB0aGUgSEJBIGRhdGEu KQotCSAqLwotCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKLQot CVBvc3RncmVzTWFpbihNeVByb2NQb3J0LT5kYXRhYmFzZV9uYW1lLCBNeVByb2NQb3J0LT51 c2VyX25hbWUpOwotfQotCi0KLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQotLyoKLSAqIHBvc3Rt YXN0ZXJfZm9ya2V4ZWMgLS0gZm9yayBhbmQgZXhlYyBhIHBvc3RtYXN0ZXIgc3VicHJvY2Vz cwotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHNldCB1cCB0aGUgYXJndiBhcnJheSBh bHJlYWR5LCBleGNlcHQgZm9yIGFyZ3ZbMl0KLSAqIHdoaWNoIHdpbGwgYmUgZmlsbGVkIHdp dGggdGhlIG5hbWUgb2YgdGhlIHRlbXAgdmFyaWFibGUgZmlsZS4KLSAqCi0gKiBSZXR1cm5z IHRoZSBjaGlsZCBwcm9jZXNzIFBJRCwgb3IgLTEgb24gZm9yayBmYWlsdXJlIChhIHN1aXRh YmxlIGVycm9yCi0gKiBtZXNzYWdlIGhhcyBiZWVuIGxvZ2dlZCBvbiBmYWlsdXJlKS4KLSAq Ci0gKiBBbGwgdXNlcyBvZiB0aGlzIHJvdXRpbmUgd2lsbCBkaXNwYXRjaCB0byBTdWJQb3N0 bWFzdGVyTWFpbiBpbiB0aGUKLSAqIGNoaWxkIHByb2Nlc3MuCi0gKi8KLXBpZF90Ci1wb3N0 bWFzdGVyX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JcmV0dXJuIGlu dGVybmFsX2ZvcmtleGVjKGFyZ2MsIGFyZ3YsIE5VTEwsIE5VTEwpOwotfQotCi0vKgotICog YmFja2VuZF9mb3JrZXhlYyAtLSBmb3JrL2V4ZWMgb2ZmIGEgYmFja2VuZCBwcm9jZXNzCi0g KgotICogU29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoV0lOMzIpIGRvbid0IGhhdmUgZm9yaygp IHNvIHdlIGhhdmUgdG8gc2ltdWxhdGUKLSAqIGl0IGJ5IHN0b3JpbmcgcGFyYW1ldGVycyB0 aGF0IG5lZWQgdG8gYmUgcGFzc2VkIHRvIHRoZSBjaGlsZCBhbmQKLSAqIHRoZW4gY3JlYXRl IGEgbmV3IGNoaWxkIHByb2Nlc3MuCi0gKgotICogcmV0dXJucyB0aGUgcGlkIG9mIHRoZSBm b3JrL2V4ZWMnZCBwcm9jZXNzLCBvciAtMSBvbiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBwaWRf dAotYmFja2VuZF9mb3JrZXhlYyhDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBDQUNfc3Rh dGUgY2FjKQotewotCWNoYXIJICAgKmF2WzVdOwotCWludAkJCWFjID0gMDsKLQljaGFyCQlj YWNidWZbMTBdOwotCi0JYXZbYWMrK10gPSAicG9zdGdyZXMiOwotCWF2W2FjKytdID0gIi0t Zm9ya2JhY2tlbmQiOwotCWF2W2FjKytdID0gTlVMTDsJCQkvKiBmaWxsZWQgaW4gYnkgaW50 ZXJuYWxfZm9ya2V4ZWMgKi8KLQotCXNucHJpbnRmKGNhY2J1Ziwgc2l6ZW9mKGNhY2J1Ziks ICIlZCIsIChpbnQpIGNhYyk7Ci0JYXZbYWMrK10gPSBjYWNidWY7Ci0KLQlhdlthY10gPSBO VUxMOwotCUFzc2VydChhYyA8IGxlbmd0aG9mKGF2KSk7Ci0KLQlyZXR1cm4gaW50ZXJuYWxf Zm9ya2V4ZWMoYWMsIGF2LCBjbGllbnRfc29jaywgTlVMTCk7Ci19Ci0KLS8qCi0gKiBTdWJQ b3N0bWFzdGVyTWFpbiAtLSBHZXQgdGhlIGZvcmsvZXhlYydkIHByb2Nlc3MgaW50byBhIHN0 YXRlIGVxdWl2YWxlbnQKLSAqCQkJdG8gd2hhdCBpdCB3b3VsZCBiZSBpZiB3ZSdkIHNpbXBs eSBmb3JrZWQgb24gVW5peCwgYW5kIHRoZW4KLSAqCQkJZGlzcGF0Y2ggdG8gdGhlIGFwcHJv cHJpYXRlIHBsYWNlLgotICoKLSAqIFRoZSBmaXJzdCB0d28gY29tbWFuZCBsaW5lIGFyZ3Vt ZW50cyBhcmUgZXhwZWN0ZWQgdG8gYmUgIi0tZm9ya0ZPTyIKLSAqICh3aGVyZSBGT08gaW5k aWNhdGVzIHdoaWNoIHBvc3RtYXN0ZXIgY2hpbGQgd2UgYXJlIHRvIGJlY29tZSksIGFuZAot ICogdGhlIG5hbWUgb2YgYSB2YXJpYWJsZXMgZmlsZSB0aGF0IHdlIGNhbiByZWFkIHRvIGxv YWQgZGF0YSB0aGF0IHdvdWxkCi0gKiBoYXZlIGJlZW4gaW5oZXJpdGVkIGJ5IGZvcmsoKSBv biBVbml4LiAgUmVtYWluaW5nIGFyZ3VtZW50cyBnbyB0byB0aGUKLSAqIHN1YnByb2Nlc3Mg Rm9vTWFpbigpIHJvdXRpbmUuCi0gKi8KIHZvaWQKLVN1YlBvc3RtYXN0ZXJNYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCitCYWNrZW5kTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNp emVfdCBzdGFydHVwX2RhdGFfbGVuKQogewotCUNsaWVudFNvY2tldCAqY2xpZW50X3NvY2s7 Ci0JQmFja2dyb3VuZFdvcmtlciAqd29ya2VyOwotCi0JLyogSW4gRVhFQ19CQUNLRU5EIGNh c2Ugd2Ugd2lsbCBub3QgaGF2ZSBpbmhlcml0ZWQgdGhlc2Ugc2V0dGluZ3MgKi8KLQlJc1Bv c3RtYXN0ZXJFbnZpcm9ubWVudCA9IHRydWU7Ci0Jd2hlcmVUb1NlbmRPdXRwdXQgPSBEZXN0 Tm9uZTsKLQotCS8qIFNldHVwIGVzc2VudGlhbCBzdWJzeXN0ZW1zICh0byBlbnN1cmUgZWxv ZygpIGJlaGF2ZXMgc2FuZWx5KSAqLwotCUluaXRpYWxpemVHVUNPcHRpb25zKCk7Ci0KLQkv KiBDaGVjayB3ZSBnb3QgYXBwcm9wcmlhdGUgYXJncyAqLwotCWlmIChhcmdjIDwgMykKLQkJ ZWxvZyhGQVRBTCwgImludmFsaWQgc3VicG9zdG1hc3RlciBpbnZvY2F0aW9uIik7CisJQmFj a2VuZFN0YXJ0dXBJbmZvICppbmZvID0gKEJhY2tlbmRTdGFydHVwSW5mbyAqKSBzdGFydHVw X2RhdGE7CiAKLQkvKiBSZWFkIGluIHRoZSB2YXJpYWJsZXMgZmlsZSAqLwotCXJlYWRfYmFj a2VuZF92YXJpYWJsZXMoYXJndlsyXSwgJmNsaWVudF9zb2NrLCAmd29ya2VyKTsKKwlBc3Nl cnQoc3RhcnR1cF9kYXRhX2xlbiA9PSBzaXplb2YoQmFja2VuZFN0YXJ0dXBJbmZvKSk7CisJ QXNzZXJ0KE15Q2xpZW50U29ja2V0ICE9IE5VTEwpOwogCi0JLyogQ2xvc2UgdGhlIHBvc3Rt YXN0ZXIncyBzb2NrZXRzIChhcyBzb29uIGFzIHdlIGtub3cgdGhlbSkgKi8KLQlDbG9zZVBv c3RtYXN0ZXJQb3J0cyhzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2xvZyIpID09IDApOwotCi0J LyogU2V0dXAgYXMgcG9zdG1hc3RlciBjaGlsZCAqLwotCUluaXRQb3N0bWFzdGVyQ2hpbGQo KTsKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKIAogCS8qCi0JICogSWYgYXBwcm9wcmlhdGUsIHBo eXNpY2FsbHkgcmUtYXR0YWNoIHRvIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gV2Ugd2FudAot CSAqIHRvIGRvIHRoaXMgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyIHRvIGVuc3VyZSB0aGF0 IHdlIGNhbiBhdHRhY2ggYXQgdGhlCi0JICogc2FtZSBhZGRyZXNzIHRoZSBwb3N0bWFzdGVy IHVzZWQuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2UgY2hvb3NlIG5vdAotCSAqIHRvIHJl LWF0dGFjaCwgd2UgbWF5IGhhdmUgb3RoZXIgY2xlYW51cCB0byBkby4KKwkgKiBOZWVkIHRv IHJlaW5pdGlhbGl6ZSB0aGUgU1NMIGxpYnJhcnkgaW4gdGhlIGJhY2tlbmQsIHNpbmNlIHRo ZSBjb250ZXh0CisJICogc3RydWN0dXJlcyBjb250YWluIGZ1bmN0aW9uIHBvaW50ZXJzIGFu ZCBjYW5ub3QgYmUgcGFzc2VkIHRocm91Z2ggdGhlCisJICogcGFyYW1ldGVyIGZpbGUuCiAJ ICoKLQkgKiBJZiB0ZXN0aW5nIEVYRUNfQkFDS0VORCBvbiBMaW51eCwgeW91IHNob3VsZCBy dW4gdGhpcyBhcyByb290IGJlZm9yZQotCSAqIHN0YXJ0aW5nIHRoZSBwb3N0bWFzdGVyOgor CSAqIElmIGZvciBzb21lIHJlYXNvbiByZWxvYWQgZmFpbHMgKG1heWJlIHRoZSB1c2VyIGlu c3RhbGxlZCBicm9rZW4ga2V5CisJICogZmlsZXMpLCBzb2xkaWVyIG9uIHdpdGhvdXQgU1NM OyB0aGF0J3MgYmV0dGVyIHRoYW4gYWxsIGNvbm5lY3Rpb25zCisJICogYmVjb21pbmcgaW1w b3NzaWJsZS4KIAkgKgotCSAqIHN5c2N0bCAtdyBrZXJuZWwucmFuZG9taXplX3ZhX3NwYWNl PTAKLQkgKgotCSAqIFRoaXMgcHJldmVudHMgdXNpbmcgcmFuZG9taXplZCBzdGFjayBhbmQg Y29kZSBhZGRyZXNzZXMgdGhhdCBjYXVzZSB0aGUKLQkgKiBjaGlsZCBwcm9jZXNzJ3MgbWVt b3J5IG1hcCB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgcGFyZW50J3MsIG1ha2luZyBpdAot CSAqIHNvbWV0aW1lcyBpbXBvc3NpYmxlIHRvIGF0dGFjaCB0byBzaGFyZWQgbWVtb3J5IGF0 IHRoZSBkZXNpcmVkIGFkZHJlc3MuCi0JICogUmV0dXJuIHRoZSBzZXR0aW5nIHRvIGl0cyBv bGQgdmFsdWUgKHVzdWFsbHkgJzEnIG9yICcyJykgd2hlbiBmaW5pc2hlZC4KKwkgKiBYWFgg c2hvdWxkIHdlIGRvIHRoaXMgaW4gYWxsIGNoaWxkIHByb2Nlc3Nlcz8gIEZvciB0aGUgbW9t ZW50IGl0J3MKKwkgKiBlbm91Z2ggdG8gZG8gaXQgaW4gYmFja2VuZCBjaGlsZHJlbi4KIAkg Ki8KLQlpZiAoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmtiYWNrZW5kIikgPT0gMCB8fAotCQlz dHJjbXAoYXJndlsxXSwgIi0tZm9ya2F2bGF1bmNoZXIiKSA9PSAwIHx8Ci0JCXN0cmNtcChh cmd2WzFdLCAiLS1mb3JrYXZ3b3JrZXIiKSA9PSAwIHx8Ci0JCXN0cmNtcChhcmd2WzFdLCAi LS1mb3JrYXV4IikgPT0gMCB8fAotCQlzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2Jnd29ya2Vy IikgPT0gMCkKLQkJUEdTaGFyZWRNZW1vcnlSZUF0dGFjaCgpOwotCWVsc2UKLQkJUEdTaGFy ZWRNZW1vcnlOb1JlQXR0YWNoKCk7Ci0KLQkvKiBSZWFkIGluIHJlbWFpbmluZyBHVUMgdmFy aWFibGVzICovCi0JcmVhZF9ub25kZWZhdWx0X3ZhcmlhYmxlcygpOworI2lmZGVmIFVTRV9T U0wKKwlpZiAoRW5hYmxlU1NMKQorCXsKKwkJaWYgKHNlY3VyZV9pbml0aWFsaXplKGZhbHNl KSA9PSAwKQorCQkJTG9hZGVkU1NMID0gdHJ1ZTsKKwkJZWxzZQorCQkJZXJlcG9ydChMT0cs CisJCQkJCShlcnJtc2coIlNTTCBjb25maWd1cmF0aW9uIGNvdWxkIG5vdCBiZSBsb2FkZWQg aW4gY2hpbGQgcHJvY2VzcyIpKSk7CisJfQorI2VuZGlmCisjZW5kaWYKIAotCS8qCi0JICog Q2hlY2sgdGhhdCB0aGUgZGF0YSBkaXJlY3RvcnkgbG9va3MgdmFsaWQsIHdoaWNoIHdpbGwg YWxzbyBjaGVjayB0aGUKLQkgKiBwcml2aWxlZ2VzIG9uIHRoZSBkYXRhIGRpcmVjdG9yeSBh bmQgdXBkYXRlIG91ciB1bWFzayBhbmQgZmlsZS9ncm91cAotCSAqIHZhcmlhYmxlcyBmb3Ig Y3JlYXRpbmcgZmlsZXMgbGF0ZXIuICBOb3RlOiB0aGlzIHNob3VsZCByZWFsbHkgYmUgZG9u ZQotCSAqIGJlZm9yZSB3ZSBjcmVhdGUgYW55IGZpbGVzIG9yIGRpcmVjdG9yaWVzLgotCSAq LwotCWNoZWNrRGF0YURpcigpOworCS8qIFBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXph dGlvbiBhbmQgY29sbGVjdCBzdGFydHVwIHBhY2tldCAqLworCUJhY2tlbmRJbml0aWFsaXpl KE15Q2xpZW50U29ja2V0LCBpbmZvLT5jYW5BY2NlcHRDb25uZWN0aW9ucyk7CiAKIAkvKgot CSAqIChyZS0pcmVhZCBjb250cm9sIGZpbGUsIGFzIGl0IGNvbnRhaW5zIGNvbmZpZy4gVGhl IHBvc3RtYXN0ZXIgd2lsbAotCSAqIGFscmVhZHkgaGF2ZSByZWFkIHRoaXMsIGJ1dCB0aGlz IHByb2Nlc3MgZG9lc24ndCBrbm93IGFib3V0IHRoYXQuCisJICogQ3JlYXRlIGEgcGVyLWJh Y2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlz CisJICogYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2NrcyBvciBhY2Nlc3MgYW55IHNoYXJlZCBt ZW1vcnkuCiAJICovCi0JTG9jYWxQcm9jZXNzQ29udHJvbEZpbGUoZmFsc2UpOworCUluaXRQ cm9jZXNzKCk7CiAKIAkvKgotCSAqIFJlbG9hZCBhbnkgbGlicmFyaWVzIHRoYXQgd2VyZSBw cmVsb2FkZWQgYnkgdGhlIHBvc3RtYXN0ZXIuICBTaW5jZSB3ZQotCSAqIGV4ZWMnZCB0aGlz IHByb2Nlc3MsIHRob3NlIGxpYnJhcmllcyBkaWRuJ3QgY29tZSBhbG9uZyB3aXRoIHVzOyBi dXQgd2UKLQkgKiBzaG91bGQgbG9hZCB0aGVtIGludG8gYWxsIGNoaWxkIHByb2Nlc3NlcyB0 byBiZSBjb25zaXN0ZW50IHdpdGggdGhlCi0JICogbm9uLUVYRUNfQkFDS0VORCBiZWhhdmlv ci4KKwkgKiBNYWtlIHN1cmUgd2UgYXJlbid0IGluIFBvc3RtYXN0ZXJDb250ZXh0IGFueW1v cmUuICAoV2UgY2FuJ3QgZGVsZXRlIGl0CisJICoganVzdCB5ZXQsIHRob3VnaCwgYmVjYXVz ZSBJbml0UG9zdGdyZXMgd2lsbCBuZWVkIHRoZSBIQkEgZGF0YS4pCiAJICovCi0JcHJvY2Vz c19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMoKTsKLQotCS8qIFJ1biBiYWNrZW5kIG9yIGFw cHJvcHJpYXRlIGNoaWxkICovCi0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYmFja2Vu ZCIpID09IDApCi0JewotCQlDQUNfc3RhdGUJY2FjOwotCi0JCUFzc2VydChhcmdjID09IDQp OwotCQljYWMgPSAoQ0FDX3N0YXRlKSBhdG9pKGFyZ3ZbM10pOwotCi0JCS8qCi0JCSAqIE5l ZWQgdG8gcmVpbml0aWFsaXplIHRoZSBTU0wgbGlicmFyeSBpbiB0aGUgYmFja2VuZCwgc2lu Y2UgdGhlCi0JCSAqIGNvbnRleHQgc3RydWN0dXJlcyBjb250YWluIGZ1bmN0aW9uIHBvaW50 ZXJzIGFuZCBjYW5ub3QgYmUgcGFzc2VkCi0JCSAqIHRocm91Z2ggdGhlIHBhcmFtZXRlciBm aWxlLgotCQkgKgotCQkgKiBJZiBmb3Igc29tZSByZWFzb24gcmVsb2FkIGZhaWxzIChtYXli ZSB0aGUgdXNlciBpbnN0YWxsZWQgYnJva2VuCi0JCSAqIGtleSBmaWxlcyksIHNvbGRpZXIg b24gd2l0aG91dCBTU0w7IHRoYXQncyBiZXR0ZXIgdGhhbiBhbGwKLQkJICogY29ubmVjdGlv bnMgYmVjb21pbmcgaW1wb3NzaWJsZS4KLQkJICoKLQkJICogWFhYIHNob3VsZCB3ZSBkbyB0 aGlzIGluIGFsbCBjaGlsZCBwcm9jZXNzZXM/ICBGb3IgdGhlIG1vbWVudCBpdCdzCi0JCSAq IGVub3VnaCB0byBkbyBpdCBpbiBiYWNrZW5kIGNoaWxkcmVuLgotCQkgKi8KLSNpZmRlZiBV U0VfU1NMCi0JCWlmIChFbmFibGVTU0wpCi0JCXsKLQkJCWlmIChzZWN1cmVfaW5pdGlhbGl6 ZShmYWxzZSkgPT0gMCkKLQkJCQlMb2FkZWRTU0wgPSB0cnVlOwotCQkJZWxzZQotCQkJCWVy ZXBvcnQoTE9HLAotCQkJCQkJKGVycm1zZygiU1NMIGNvbmZpZ3VyYXRpb24gY291bGQgbm90 IGJlIGxvYWRlZCBpbiBjaGlsZCBwcm9jZXNzIikpKTsKLQkJfQotI2VuZGlmCi0KLQkJLyoK LQkJICogUGVyZm9ybSBhZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGFuZCBjb2xsZWN0IHN0 YXJ0dXAgcGFja2V0LgotCQkgKgotCQkgKiBXZSB3YW50IHRvIGRvIHRoaXMgYmVmb3JlIElu aXRQcm9jZXNzKCkgZm9yIGEgY291cGxlIG9mIHJlYXNvbnM6IDEuCi0JCSAqIHNvIHRoYXQg d2UgYXJlbid0IGVhdGluZyB1cCBhIFBHUFJPQyBzbG90IHdoaWxlIHdhaXRpbmcgb24gdGhl Ci0JCSAqIGNsaWVudC4gMi4gc28gdGhhdCBpZiBJbml0UHJvY2VzcygpIGZhaWxzIGR1ZSB0 byBiZWluZyBvdXQgb2YKLQkJICogUEdQUk9DIHNsb3RzLCB3ZSBoYXZlIGFscmVhZHkgaW5p dGlhbGl6ZWQgbGlicHEgYW5kIGFyZSBhYmxlIHRvCi0JCSAqIHJlcG9ydCB0aGUgZXJyb3Ig dG8gdGhlIGNsaWVudC4KLQkJICovCi0JCUJhY2tlbmRJbml0aWFsaXplKGNsaWVudF9zb2Nr LCBjYWMpOwotCi0JCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAq LwotCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7Ci0KLQkJLyogQW5kIHJ1 biB0aGUgYmFja2VuZCAqLwotCQlCYWNrZW5kUnVuKCk7CQkJLyogZG9lcyBub3QgcmV0dXJu ICovCi0KLQl9Ci0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXV4IikgPT0gMCkKLQl7 Ci0JCUF1eFByb2NUeXBlIGF1eHR5cGU7Ci0KLQkJQXNzZXJ0KGFyZ2MgPT0gNCk7Ci0KLQkJ LyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCi0JCUluaXRTaG1l bUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKLQotCQlhdXh0eXBlID0gYXRvaShhcmd2WzNd KTsKLQkJQXV4aWxpYXJ5UHJvY2Vzc01haW4oYXV4dHlwZSk7CS8qIGRvZXMgbm90IHJldHVy biAqLwotCX0KLQlpZiAoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmthdmxhdW5jaGVyIikgPT0g MCkKLQl7Ci0JCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwot CQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7Ci0KLQkJQXV0b1ZhY0xhdW5j aGVyTWFpbihhcmdjIC0gMiwgYXJndiArIDIpOwkvKiBkb2VzIG5vdCByZXR1cm4gKi8KLQl9 Ci0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXZ3b3JrZXIiKSA9PSAwKQotCXsKLQkJ LyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCi0JCUluaXRTaG1l bUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKLQotCQlBdXRvVmFjV29ya2VyTWFpbihhcmdj IC0gMiwgYXJndiArIDIpOwkvKiBkb2VzIG5vdCByZXR1cm4gKi8KLQl9Ci0JaWYgKHN0cmNt cChhcmd2WzFdLCAiLS1mb3JrYmd3b3JrZXIiKSA9PSAwKQotCXsKLQkJLyogZG8gdGhpcyBh cyBlYXJseSBhcyBwb3NzaWJsZTsgaW4gcGFydGljdWxhciwgYmVmb3JlIEluaXRQcm9jZXNz KCkgKi8KLQkJSXNCYWNrZ3JvdW5kV29ya2VyID0gdHJ1ZTsKLQotCQkvKiBSZXN0b3JlIGJh c2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KLQkJSW5pdFNobWVtQWNjZXNzKFVzZWRT aG1lbVNlZ0FkZHIpOwotCi0JCU15Qmd3b3JrZXJFbnRyeSA9IHdvcmtlcjsKLQkJQmFja2dy b3VuZFdvcmtlck1haW4oKTsKLQl9Ci0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrbG9n IikgPT0gMCkKLQl7Ci0JCS8qIERvIG5vdCB3YW50IHRvIGF0dGFjaCB0byBzaGFyZWQgbWVt b3J5ICovCi0KLQkJU3lzTG9nZ2VyTWFpbihhcmdjLCBhcmd2KTsJLyogZG9lcyBub3QgcmV0 dXJuICovCi0JfQorCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsK IAotCWFib3J0KCk7CQkJCQkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KKwlQb3N0Z3Jlc01h aW4oTXlQcm9jUG9ydC0+ZGF0YWJhc2VfbmFtZSwgTXlQcm9jUG9ydC0+dXNlcl9uYW1lKTsK IH0KLSNlbmRpZgkJCQkJCQkvKiBFWEVDX0JBQ0tFTkQgKi8KIAogCiAvKgpAQCAtNDg1Miw5 MyArNDYyMywyMyBAQCBDb3VudENoaWxkcmVuKGludCB0YXJnZXQpCiAgKiB0byBzdGFydCBz dWJwcm9jZXNzLgogICovCiBzdGF0aWMgcGlkX3QKLVN0YXJ0Q2hpbGRQcm9jZXNzKEF1eFBy b2NUeXBlIHR5cGUpCitTdGFydENoaWxkUHJvY2VzcyhQb3N0bWFzdGVyQ2hpbGRUeXBlIHR5 cGUpCiB7CiAJcGlkX3QJCXBpZDsKIAotI2lmZGVmIEVYRUNfQkFDS0VORAotCXsKLQkJY2hh cgkgICAqYXZbMTBdOwotCQlpbnQJCQlhYyA9IDA7Ci0JCWNoYXIJCXR5cGVidWZbMzJdOwot Ci0JCS8qCi0JCSAqIFNldCB1cCBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGZvciBzdWJwcm9j ZXNzCi0JCSAqLwotCQlhdlthYysrXSA9ICJwb3N0Z3JlcyI7Ci0JCWF2W2FjKytdID0gIi0t Zm9ya2F1eCI7Ci0JCWF2W2FjKytdID0gTlVMTDsJCS8qIGZpbGxlZCBpbiBieSBwb3N0bWFz dGVyX2ZvcmtleGVjICovCi0KLQkJc25wcmludGYodHlwZWJ1Ziwgc2l6ZW9mKHR5cGVidWYp LCAiJWQiLCB0eXBlKTsKLQkJYXZbYWMrK10gPSB0eXBlYnVmOwotCi0JCWF2W2FjXSA9IE5V TEw7Ci0JCUFzc2VydChhYyA8IGxlbmd0aG9mKGF2KSk7Ci0KLQkJcGlkID0gcG9zdG1hc3Rl cl9mb3JrZXhlYyhhYywgYXYpOwotCX0KLSNlbHNlCQkJCQkJCS8qICFFWEVDX0JBQ0tFTkQg Ki8KLQlwaWQgPSBmb3JrX3Byb2Nlc3MoKTsKLQotCWlmIChwaWQgPT0gMCkJCQkJLyogY2hp bGQgKi8KLQl7Ci0JCUluaXRQb3N0bWFzdGVyQ2hpbGQoKTsKLQotCQkvKiBDbG9zZSB0aGUg cG9zdG1hc3RlcidzIHNvY2tldHMgKi8KLQkJQ2xvc2VQb3N0bWFzdGVyUG9ydHMoZmFsc2Up OwotCi0JCS8qIFJlbGVhc2UgcG9zdG1hc3RlcidzIHdvcmtpbmcgbWVtb3J5IGNvbnRleHQg Ki8KLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOwotCQlNZW1v cnlDb250ZXh0RGVsZXRlKFBvc3RtYXN0ZXJDb250ZXh0KTsKLQkJUG9zdG1hc3RlckNvbnRl eHQgPSBOVUxMOwotCi0JCUF1eGlsaWFyeVByb2Nlc3NNYWluKHR5cGUpOyAvKiBkb2VzIG5v dCByZXR1cm4gKi8KLQl9Ci0jZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5EICovCi0KKwlw aWQgPSBwb3N0bWFzdGVyX2NoaWxkX2xhdW5jaCh0eXBlLCBOVUxMLCAwLCBOVUxMKTsKIAlp ZiAocGlkIDwgMCkKIAl7CiAJCS8qIGluIHBhcmVudCwgZm9yayBmYWlsZWQgKi8KLQkJaW50 CQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCi0JCWVycm5vID0gc2F2ZV9lcnJubzsKLQkJc3dp dGNoICh0eXBlKQotCQl7Ci0JCQljYXNlIFN0YXJ0dXBQcm9jZXNzOgotCQkJCWVyZXBvcnQo TE9HLAotCQkJCQkJKGVycm1zZygiY291bGQgbm90IGZvcmsgc3RhcnR1cCBwcm9jZXNzOiAl bSIpKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFyY2hpdmVyUHJvY2VzczoKLQkJCQllcmVw b3J0KExPRywKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3JrIGFyY2hpdmVyIHByb2Nl c3M6ICVtIikpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQmdXcml0ZXJQcm9jZXNzOgotCQkJ CWVyZXBvcnQoTE9HLAotCQkJCQkJKGVycm1zZygiY291bGQgbm90IGZvcmsgYmFja2dyb3Vu ZCB3cml0ZXIgcHJvY2VzczogJW0iKSkpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDaGVja3Bv aW50ZXJQcm9jZXNzOgotCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJKGVycm1zZygiY291bGQg bm90IGZvcmsgY2hlY2twb2ludGVyIHByb2Nlc3M6ICVtIikpKTsKLQkJCQlicmVhazsKLQkJ CWNhc2UgV2FsV3JpdGVyUHJvY2VzczoKLQkJCQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJt c2coImNvdWxkIG5vdCBmb3JrIFdBTCB3cml0ZXIgcHJvY2VzczogJW0iKSkpOwotCQkJCWJy ZWFrOwotCQkJY2FzZSBXYWxSZWNlaXZlclByb2Nlc3M6Ci0JCQkJZXJlcG9ydChMT0csCi0J CQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBXQUwgcmVjZWl2ZXIgcHJvY2VzczogJW0i KSkpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQllcmVwb3J0KExPRywKLQkJCQkJ CShlcnJtc2coImNvdWxkIG5vdCBmb3JrIHByb2Nlc3M6ICVtIikpKTsKLQkJCQlicmVhazsK LQkJfQorCQkvKiBYWFg6IHRyYW5zbGF0aW9uPyAqLworCQllcmVwb3J0KExPRywKKwkJCQko ZXJybXNnKCJjb3VsZCBub3QgZm9yayAlcyBwcm9jZXNzOiAlbSIsIFBvc3RtYXN0ZXJDaGls ZE5hbWUodHlwZSkpKSk7CiAKIAkJLyoKIAkJICogZm9yayBmYWlsdXJlIGlzIGZhdGFsIGR1 cmluZyBzdGFydHVwLCBidXQgdGhlcmUncyBubyBuZWVkIHRvIGNob2tlCiAJCSAqIGltbWVk aWF0ZWx5IGlmIHN0YXJ0aW5nIG90aGVyIGNoaWxkIHR5cGVzIGZhaWxzLgogCQkgKi8KLQkJ aWYgKHR5cGUgPT0gU3RhcnR1cFByb2Nlc3MpCisJCWlmICh0eXBlID09IFBNQ19TVEFSVFVQ KQogCQkJRXhpdFBvc3RtYXN0ZXIoMSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTUyMDIsMjQg KzQ5MDMsNiBAQCBCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25hbHModm9pZCkKIAlzaWdw cm9jbWFzayhTSUdfU0VUTUFTSywgJlVuQmxvY2tTaWcsIE5VTEwpOwogfQogCi0jaWZkZWYg RVhFQ19CQUNLRU5ECi1zdGF0aWMgcGlkX3QKLWJnd29ya2VyX2ZvcmtleGVjKEJhY2tncm91 bmRXb3JrZXIgKndvcmtlcikKLXsKLQljaGFyCSAgICphdlsxMF07Ci0JaW50CQkJYWMgPSAw OwotCi0JYXZbYWMrK10gPSAicG9zdGdyZXMiOwotCWF2W2FjKytdID0gIi0tZm9ya2Jnd29y a2VyIjsKLQlhdlthYysrXSA9IE5VTEw7CQkJLyogZmlsbGVkIGluIGJ5IGludGVybmFsX2Zv cmtleGVjICovCi0JYXZbYWNdID0gTlVMTDsKLQotCUFzc2VydChhYyA8IGxlbmd0aG9mKGF2 KSk7Ci0KLQlyZXR1cm4gaW50ZXJuYWxfZm9ya2V4ZWMoYWMsIGF2LCBOVUxMLCB3b3JrZXIp OwotfQotI2VuZGlmCi0KIC8qCiAgKiBTdGFydCBhIG5ldyBiZ3dvcmtlci4KICAqIFN0YXJ0 aW5nIHRpbWUgY29uZGl0aW9ucyBtdXN0IGhhdmUgYmVlbiBjaGVja2VkIGFscmVhZHkuCkBA IC01MjU2LDY1ICs0OTM5LDMyIEBAIGRvX3N0YXJ0X2Jnd29ya2VyKFJlZ2lzdGVyZWRCZ1dv cmtlciAqcncpCiAJCQkoZXJybXNnX2ludGVybmFsKCJzdGFydGluZyBiYWNrZ3JvdW5kIHdv cmtlciBwcm9jZXNzIFwiJXNcIiIsCiAJCQkJCQkJIHJ3LT5yd193b3JrZXIuYmd3X25hbWUp KSk7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlzd2l0Y2ggKCh3b3JrZXJfcGlkID0gYmd3 b3JrZXJfZm9ya2V4ZWMoJnJ3LT5yd193b3JrZXIpKSkKLSNlbHNlCi0Jc3dpdGNoICgod29y a2VyX3BpZCA9IGZvcmtfcHJvY2VzcygpKSkKLSNlbmRpZgorCXdvcmtlcl9waWQgPSBwb3N0 bWFzdGVyX2NoaWxkX2xhdW5jaChQTUNfQkdXT1JLRVIsIChjaGFyICopICZydy0+cndfd29y a2VyLCBzaXplb2YoQmFja2dyb3VuZFdvcmtlciksIE5VTEwpOworCWlmICh3b3JrZXJfcGlk ID09IC0xKQogCXsKLQkJY2FzZSAtMToKLQkJCS8qIGluIHBvc3RtYXN0ZXIsIGZvcmsgZmFp bGVkIC4uLiAqLwotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coImNvdWxkIG5vdCBm b3JrIHdvcmtlciBwcm9jZXNzOiAlbSIpKSk7Ci0JCQkvKiB1bmRvIHdoYXQgYXNzaWduX2Jh Y2tlbmRsaXN0X2VudHJ5IGRpZCAqLwotCQkJUmVsZWFzZVBvc3RtYXN0ZXJDaGlsZFNsb3Qo cnctPnJ3X2NoaWxkX3Nsb3QpOwotCQkJcnctPnJ3X2NoaWxkX3Nsb3QgPSAwOwotCQkJcGZy ZWUocnctPnJ3X2JhY2tlbmQpOwotCQkJcnctPnJ3X2JhY2tlbmQgPSBOVUxMOwotCQkJLyog bWFyayBlbnRyeSBhcyBjcmFzaGVkLCBzbyB3ZSdsbCB0cnkgYWdhaW4gbGF0ZXIgKi8KLQkJ CXJ3LT5yd19jcmFzaGVkX2F0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCQkJYnJlYWs7 Ci0KLSNpZm5kZWYgRVhFQ19CQUNLRU5ECi0JCWNhc2UgMDoKLQkJCS8qIGluIHBvc3RtYXN0 ZXIgY2hpbGQgLi4uICovCi0JCQlJbml0UG9zdG1hc3RlckNoaWxkKCk7Ci0KLQkJCS8qIENs b3NlIHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAqLwotCQkJQ2xvc2VQb3N0bWFzdGVyUG9y dHMoZmFsc2UpOwotCi0JCQkvKgotCQkJICogQmVmb3JlIGJsb3dpbmcgYXdheSBQb3N0bWFz dGVyQ29udGV4dCwgc2F2ZSB0aGlzIGJnd29ya2VyJ3MKLQkJCSAqIGRhdGEgd2hlcmUgaXQg Y2FuIGZpbmQgaXQuCi0JCQkgKi8KLQkJCU15Qmd3b3JrZXJFbnRyeSA9IChCYWNrZ3JvdW5k V29ya2VyICopCi0JCQkJTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsIHNp emVvZihCYWNrZ3JvdW5kV29ya2VyKSk7Ci0JCQltZW1jcHkoTXlCZ3dvcmtlckVudHJ5LCAm cnctPnJ3X3dvcmtlciwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKLQotCQkJLyogUmVs ZWFzZSBwb3N0bWFzdGVyJ3Mgd29ya2luZyBtZW1vcnkgY29udGV4dCAqLwotCQkJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOwotCQkJTWVtb3J5Q29udGV4dERl bGV0ZShQb3N0bWFzdGVyQ29udGV4dCk7Ci0JCQlQb3N0bWFzdGVyQ29udGV4dCA9IE5VTEw7 Ci0KLQkJCUJhY2tncm91bmRXb3JrZXJNYWluKCk7CisJCS8qIGluIHBvc3RtYXN0ZXIsIGZv cmsgZmFpbGVkIC4uLiAqLworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJjb3VsZCBu b3QgZm9yayB3b3JrZXIgcHJvY2VzczogJW0iKSkpOworCQkvKiB1bmRvIHdoYXQgYXNzaWdu X2JhY2tlbmRsaXN0X2VudHJ5IGRpZCAqLworCQlSZWxlYXNlUG9zdG1hc3RlckNoaWxkU2xv dChydy0+cndfY2hpbGRfc2xvdCk7CisJCXJ3LT5yd19jaGlsZF9zbG90ID0gMDsKKwkJcGZy ZWUocnctPnJ3X2JhY2tlbmQpOworCQlydy0+cndfYmFja2VuZCA9IE5VTEw7CisJCS8qIG1h cmsgZW50cnkgYXMgY3Jhc2hlZCwgc28gd2UnbGwgdHJ5IGFnYWluIGxhdGVyICovCisJCXJ3 LT5yd19jcmFzaGVkX2F0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCQlyZXR1cm4gZmFs c2U7CisJfQogCi0JCQlleGl0KDEpOwkJCS8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KLQkJ CWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQkvKiBpbiBwb3N0bWFzdGVyLCBmb3Jr IHN1Y2Nlc3NmdWwgLi4uICovCi0JCQlydy0+cndfcGlkID0gd29ya2VyX3BpZDsKLQkJCXJ3 LT5yd19iYWNrZW5kLT5waWQgPSBydy0+cndfcGlkOwotCQkJUmVwb3J0QmFja2dyb3VuZFdv cmtlclBJRChydyk7Ci0JCQkvKiBhZGQgbmV3IHdvcmtlciB0byBsaXN0cyBvZiBiYWNrZW5k cyAqLwotCQkJZGxpc3RfcHVzaF9oZWFkKCZCYWNrZW5kTGlzdCwgJnJ3LT5yd19iYWNrZW5k LT5lbGVtKTsKKwkvKiBpbiBwb3N0bWFzdGVyLCBmb3JrIHN1Y2Nlc3NmdWwgLi4uICovCisJ cnctPnJ3X3BpZCA9IHdvcmtlcl9waWQ7CisJcnctPnJ3X2JhY2tlbmQtPnBpZCA9IHJ3LT5y d19waWQ7CisJUmVwb3J0QmFja2dyb3VuZFdvcmtlclBJRChydyk7CisJLyogYWRkIG5ldyB3 b3JrZXIgdG8gbGlzdHMgb2YgYmFja2VuZHMgKi8KKwlkbGlzdF9wdXNoX2hlYWQoJkJhY2tl bmRMaXN0LCAmcnctPnJ3X2JhY2tlbmQtPmVsZW0pOwogI2lmZGVmIEVYRUNfQkFDS0VORAot CQkJU2htZW1CYWNrZW5kQXJyYXlBZGQocnctPnJ3X2JhY2tlbmQpOworCVNobWVtQmFja2Vu ZEFycmF5QWRkKHJ3LT5yd19iYWNrZW5kKTsKICNlbmRpZgotCQkJcmV0dXJuIHRydWU7Ci0J fQotCi0JcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3N0YXJ0dXAuYwppbmRleCAwZmRmYTE4MjJkYi4uMDBkYzJiOTAzNTQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCisrKyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCkBAIC0yNDIsOCArMjQyLDEwIEBAIFN0YXJ0dXBQ cm9jRXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1TdGFydHVwUHJvY2Vzc01haW4odm9pZCkKK1N0 YXJ0dXBQcm9jZXNzTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2Rh dGFfbGVuKQogeworCUFzc2VydChzdGFydHVwX2RhdGFfbGVuID09IDApOworCiAJTXlBdXhQ cm9jVHlwZSA9IFN0YXJ0dXBQcm9jZXNzOwogCU15QmFja2VuZFR5cGUgPSBCX1NUQVJUVVA7 CiAJQXV4aWxpYXJ5UHJvY2Vzc0luaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvc3lzbG9nZ2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dl ci5jCmluZGV4IDk2ZGQwM2Q5ZTA2Li5jOTIzODQzNTMyZiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9zeXNsb2dnZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL3N5c2xvZ2dlci5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAicGdzdGF0Lmgi CiAjaW5jbHVkZSAicGd0aW1lLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgot I2luY2x1ZGUgInBvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1h c3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIK ICNpbmNsdWRlICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5oIgpAQCAtNTAsNiArNDksNyBAQAog I2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90 LmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMu aCIKICNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIKICNpbmNsdWRlICJ1dGlscy90aW1l c3RhbXAuaCIKIApAQCAtMTM0LDEwICsxMzQsNyBAQCBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0 b21pY190IHJvdGF0aW9uX3JlcXVlc3RlZCA9IGZhbHNlOwogI2lmZGVmIEVYRUNfQkFDS0VO RAogc3RhdGljIGludAlzeXNsb2dnZXJfZmRnZXQoRklMRSAqZmlsZSk7CiBzdGF0aWMgRklM RSAqc3lzbG9nZ2VyX2Zkb3BlbihpbnQgZmQpOwotc3RhdGljIHBpZF90IHN5c2xvZ2dlcl9m b3JrZXhlYyh2b2lkKTsKLXN0YXRpYyB2b2lkIHN5c2xvZ2dlcl9wYXJzZUFyZ3MoaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSk7CiAjZW5kaWYKLU5PTl9FWEVDX1NUQVRJQyB2b2lkIFN5c0xv Z2dlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgcGdfYXR0cmlidXRlX25vcmV0dXJu KCk7CiBzdGF0aWMgdm9pZCBwcm9jZXNzX3BpcGVfaW5wdXQoY2hhciAqbG9nYnVmZmVyLCBp bnQgKmJ5dGVzX2luX2xvZ2J1ZmZlcik7CiBzdGF0aWMgdm9pZCBmbHVzaF9waXBlX2lucHV0 KGNoYXIgKmxvZ2J1ZmZlciwgaW50ICpieXRlc19pbl9sb2didWZmZXIpOwogc3RhdGljIEZJ TEUgKmxvZ2ZpbGVfb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbW9k ZSwKQEAgLTE1NiwxMyArMTUzLDE5IEBAIHN0YXRpYyB2b2lkIHNldF9uZXh0X3JvdGF0aW9u X3RpbWUodm9pZCk7CiBzdGF0aWMgdm9pZCBzaWdVc3IxSGFuZGxlcihTSUdOQUxfQVJHUyk7 CiBzdGF0aWMgdm9pZCB1cGRhdGVfbWV0YWluZm9fZGF0YWZpbGUodm9pZCk7CiAKK3R5cGVk ZWYgc3RydWN0Cit7CisJaW50CQkJc3lzbG9nRmlsZTsKKwlpbnQJCQljc3Zsb2dGaWxlOwor CWludAkJCWpzb25sb2dGaWxlOworfSBzeXNsb2dnZXJfc3RhcnR1cF9kYXRhOwogCiAvKgog ICogTWFpbiBlbnRyeSBwb2ludCBmb3Igc3lzbG9nZ2VyIHByb2Nlc3MKICAqIGFyZ2MvYXJn diBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBvbmx5IGluIEVYRUNfQkFDS0VORCBjYXNlLgogICov Ci1OT05fRVhFQ19TVEFUSUMgdm9pZAotU3lzTG9nZ2VyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQordm9pZAorU3lzTG9nZ2VyTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVf dCBzdGFydHVwX2RhdGFfbGVuKQogewogI2lmbmRlZiBXSU4zMgogCWNoYXIJCWxvZ2J1ZmZl cltSRUFEX0JVRl9TSVpFXTsKQEAgLTE3NCwxMSArMTc3LDM0IEBAIFN5c0xvZ2dlck1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlwZ190aW1lX3QJbm93OwogCVdhaXRFdmVudFNl dCAqd2VzOwogCi0Jbm93ID0gTXlTdGFydFRpbWU7CisJLyogUmVsZWFzZSBwb3N0bWFzdGVy J3Mgd29ya2luZyBtZW1vcnkgY29udGV4dCAqLworCWlmIChQb3N0bWFzdGVyQ29udGV4dCkK Kwl7CisJCU1lbW9yeUNvbnRleHREZWxldGUoUG9zdG1hc3RlckNvbnRleHQpOworCQlQb3N0 bWFzdGVyQ29udGV4dCA9IE5VTEw7CisJfQogCisJLyoKKwkgKiBSZS1vcGVuIHRoZSBlcnJv ciBvdXRwdXQgZmlsZXMgdGhhdCB3ZXJlIG9wZW5lZCBieSBTeXNMb2dnZXJfU3RhcnQoKS4K KwkgKgorCSAqIFdlIGV4cGVjdCB0aGlzIHdpbGwgYWx3YXlzIHN1Y2NlZWQsIHdoaWNoIGlz IHRvbyBvcHRpbWlzdGljLCBidXQgaWYgaXQKKwkgKiBmYWlscyB0aGVyZSdzIG5vdCBhIGxv dCB3ZSBjYW4gZG8gdG8gcmVwb3J0IHRoZSBwcm9ibGVtIGFueXdheS4gIEFzCisJICogY29k ZWQsIHdlJ2xsIGp1c3QgY3Jhc2ggb24gYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgYWZ0 ZXIgZmFpbHVyZS4uLgorCSAqLwogI2lmZGVmIEVYRUNfQkFDS0VORAotCXN5c2xvZ2dlcl9w YXJzZUFyZ3MoYXJnYywgYXJndik7Ci0jZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5EICov CisJeworCQlzeXNsb2dnZXJfc3RhcnR1cF9kYXRhICppbmZvID0gKHN5c2xvZ2dlcl9zdGFy dHVwX2RhdGEgKikgc3RhcnR1cF9kYXRhOworCisJCUFzc2VydChzdGFydHVwX2RhdGFfbGVu ID09IHNpemVvZigqaW5mbykpOworCQlzeXNsb2dGaWxlID0gc3lzbG9nZ2VyX2Zkb3Blbihp bmZvLT5zeXNsb2dGaWxlKTsKKwkJY3N2bG9nRmlsZSA9IHN5c2xvZ2dlcl9mZG9wZW4oaW5m by0+Y3N2bG9nRmlsZSk7CisJCWpzb25sb2dGaWxlID0gc3lzbG9nZ2VyX2Zkb3BlbihpbmZv LT5qc29ubG9nRmlsZSk7CisJfQorI2Vsc2UKKwlBc3NlcnQoc3RhcnR1cF9kYXRhX2xlbiA9 PSAwKTsKKyNlbmRpZgorCisJbm93ID0gTXlTdGFydFRpbWU7CiAKIAlNeUJhY2tlbmRUeXBl ID0gQl9MT0dHRVI7CiAJaW5pdF9wc19kaXNwbGF5KE5VTEwpOwpAQCAtNTY4LDYgKzU5NCw5 IEBAIFN5c0xvZ2dlcl9TdGFydCh2b2lkKQogewogCXBpZF90CQlzeXNsb2dnZXJQaWQ7CiAJ Y2hhcgkgICAqZmlsZW5hbWU7CisjaWZkZWYgRVhFQ19CQUNLRU5ECisJc3lzbG9nZ2VyX3N0 YXJ0dXBfZGF0YSBzdGFydHVwX2RhdGE7CisjZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5E ICovCiAKIAlpZiAoIUxvZ2dpbmdfY29sbGVjdG9yKQogCQlyZXR1cm4gMDsKQEAgLTY2Nywx MTIgKzY5Niw5NSBAQCBTeXNMb2dnZXJfU3RhcnQodm9pZCkKIAl9CiAKICNpZmRlZiBFWEVD X0JBQ0tFTkQKLQlzd2l0Y2ggKChzeXNsb2dnZXJQaWQgPSBzeXNsb2dnZXJfZm9ya2V4ZWMo KSkpCisJc3RhcnR1cF9kYXRhLnN5c2xvZ0ZpbGUgPSBzeXNsb2dnZXJfZmRnZXQoc3lzbG9n RmlsZSk7CisJc3RhcnR1cF9kYXRhLmNzdmxvZ0ZpbGUgPSBzeXNsb2dnZXJfZmRnZXQoY3N2 bG9nRmlsZSk7CisJc3RhcnR1cF9kYXRhLmpzb25sb2dGaWxlID0gc3lzbG9nZ2VyX2ZkZ2V0 KGpzb25sb2dGaWxlKTsKKwlzeXNsb2dnZXJQaWQgPSBwb3N0bWFzdGVyX2NoaWxkX2xhdW5j aChQTUNfU1lTTE9HR0VSLCAoY2hhciAqKSAmc3RhcnR1cF9kYXRhLCBzaXplb2Yoc3RhcnR1 cF9kYXRhKSwgTlVMTCk7CiAjZWxzZQotCXN3aXRjaCAoKHN5c2xvZ2dlclBpZCA9IGZvcmtf cHJvY2VzcygpKSkKLSNlbmRpZgotCXsKLQkJY2FzZSAtMToKLQkJCWVyZXBvcnQoTE9HLAot CQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBzeXN0ZW0gbG9nZ2VyOiAlbSIpKSk7Ci0J CQlyZXR1cm4gMDsKLQotI2lmbmRlZiBFWEVDX0JBQ0tFTkQKLQkJY2FzZSAwOgotCQkJLyog aW4gcG9zdG1hc3RlciBjaGlsZCAuLi4gKi8KLQkJCUluaXRQb3N0bWFzdGVyQ2hpbGQoKTsK LQotCQkJLyogQ2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRzICovCi0JCQlDbG9zZVBv c3RtYXN0ZXJQb3J0cyh0cnVlKTsKLQotCQkJLyogRHJvcCBvdXIgY29ubmVjdGlvbiB0byBw b3N0bWFzdGVyJ3Mgc2hhcmVkIG1lbW9yeSwgYXMgd2VsbCAqLwotCQkJZHNtX2RldGFjaF9h bGwoKTsKLQkJCVBHU2hhcmVkTWVtb3J5RGV0YWNoKCk7CisJc3lzbG9nZ2VyUGlkID0gcG9z dG1hc3Rlcl9jaGlsZF9sYXVuY2goUE1DX1NZU0xPR0dFUiwgTlVMTCwgMCwgTlVMTCk7Cisj ZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5EICovCiAKLQkJCS8qIGRvIHRoZSB3b3JrICov Ci0JCQlTeXNMb2dnZXJNYWluKDAsIE5VTEwpOwotCQkJYnJlYWs7Ci0jZW5kaWYKKwlpZiAo c3lzbG9nZ2VyUGlkID09IC0xKQorCXsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZygi Y291bGQgbm90IGZvcmsgc3lzdGVtIGxvZ2dlcjogJW0iKSkpOworCQlyZXR1cm4gMDsKKwl9 CiAKLQkJZGVmYXVsdDoKLQkJCS8qIHN1Y2Nlc3MsIGluIHBvc3RtYXN0ZXIgKi8KKwkvKiBz dWNjZXNzLCBpbiBwb3N0bWFzdGVyICovCiAKLQkJCS8qIG5vdyB3ZSByZWRpcmVjdCBzdGRl cnIsIGlmIG5vdCBkb25lIGFscmVhZHkgKi8KLQkJCWlmICghcmVkaXJlY3Rpb25fZG9uZSkK LQkJCXsKKwkvKiBub3cgd2UgcmVkaXJlY3Qgc3RkZXJyLCBpZiBub3QgZG9uZSBhbHJlYWR5 ICovCisJaWYgKCFyZWRpcmVjdGlvbl9kb25lKQorCXsKICNpZmRlZiBXSU4zMgotCQkJCWlu dAkJCWZkOworCQlpbnQJCQlmZDsKICNlbmRpZgogCi0JCQkJLyoKLQkJCQkgKiBMZWF2ZSBh IGJyZWFkY3J1bWIgdHJhaWwgd2hlbiByZWRpcmVjdGluZywgaW4gY2FzZSB0aGUgdXNlcgot CQkJCSAqIGZvcmdldHMgdGhhdCByZWRpcmVjdGlvbiBpcyBhY3RpdmUgYW5kIGxvb2tzIG9u bHkgYXQgdGhlCi0JCQkJICogb3JpZ2luYWwgc3RkZXJyIHRhcmdldCBmaWxlLgotCQkJCSAq LwotCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJKGVycm1zZygicmVkaXJlY3RpbmcgbG9nIG91 dHB1dCB0byBsb2dnaW5nIGNvbGxlY3RvciBwcm9jZXNzIiksCi0JCQkJCQkgZXJyaGludCgi RnV0dXJlIGxvZyBvdXRwdXQgd2lsbCBhcHBlYXIgaW4gZGlyZWN0b3J5IFwiJXNcIi4iLAot CQkJCQkJCQkgTG9nX2RpcmVjdG9yeSkpKTsKKwkJLyoKKwkJICogTGVhdmUgYSBicmVhZGNy dW1iIHRyYWlsIHdoZW4gcmVkaXJlY3RpbmcsIGluIGNhc2UgdGhlIHVzZXIgZm9yZ2V0cwor CQkgKiB0aGF0IHJlZGlyZWN0aW9uIGlzIGFjdGl2ZSBhbmQgbG9va3Mgb25seSBhdCB0aGUg b3JpZ2luYWwgc3RkZXJyCisJCSAqIHRhcmdldCBmaWxlLgorCQkgKi8KKwkJZXJlcG9ydChM T0csCisJCQkJKGVycm1zZygicmVkaXJlY3RpbmcgbG9nIG91dHB1dCB0byBsb2dnaW5nIGNv bGxlY3RvciBwcm9jZXNzIiksCisJCQkJIGVycmhpbnQoIkZ1dHVyZSBsb2cgb3V0cHV0IHdp bGwgYXBwZWFyIGluIGRpcmVjdG9yeSBcIiVzXCIuIiwKKwkJCQkJCSBMb2dfZGlyZWN0b3J5 KSkpOwogCiAjaWZuZGVmIFdJTjMyCi0JCQkJZmZsdXNoKHN0ZG91dCk7Ci0JCQkJaWYgKGR1 cDIoc3lzbG9nUGlwZVsxXSwgU1RET1VUX0ZJTEVOTykgPCAwKQotCQkJCQllcmVwb3J0KEZB VEFMLAotCQkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkJCSBlcnJt c2coImNvdWxkIG5vdCByZWRpcmVjdCBzdGRvdXQ6ICVtIikpKTsKLQkJCQlmZmx1c2goc3Rk ZXJyKTsKLQkJCQlpZiAoZHVwMihzeXNsb2dQaXBlWzFdLCBTVERFUlJfRklMRU5PKSA8IDAp Ci0JCQkJCWVyZXBvcnQoRkFUQUwsCi0JCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCi0JCQkJCQkJIGVycm1zZygiY291bGQgbm90IHJlZGlyZWN0IHN0ZGVycjogJW0iKSkp OwotCQkJCS8qIE5vdyB3ZSBhcmUgZG9uZSB3aXRoIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBp cGUuICovCi0JCQkJY2xvc2Uoc3lzbG9nUGlwZVsxXSk7Ci0JCQkJc3lzbG9nUGlwZVsxXSA9 IC0xOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJaWYgKGR1cDIoc3lzbG9nUGlwZVsxXSwgU1RE T1VUX0ZJTEVOTykgPCAwKQorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVycmNvZGVfZm9y X2ZpbGVfYWNjZXNzKCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWRpcmVjdCBzdGRv dXQ6ICVtIikpKTsKKwkJZmZsdXNoKHN0ZGVycik7CisJCWlmIChkdXAyKHN5c2xvZ1BpcGVb MV0sIFNUREVSUl9GSUxFTk8pIDwgMCkKKwkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVkaXJl Y3Qgc3RkZXJyOiAlbSIpKSk7CisJCS8qIE5vdyB3ZSBhcmUgZG9uZSB3aXRoIHRoZSB3cml0 ZSBlbmQgb2YgdGhlIHBpcGUuICovCisJCWNsb3NlKHN5c2xvZ1BpcGVbMV0pOworCQlzeXNs b2dQaXBlWzFdID0gLTE7CiAjZWxzZQogCi0JCQkJLyoKLQkJCQkgKiBvcGVuIHRoZSBwaXBl IGluIGJpbmFyeSBtb2RlIGFuZCBtYWtlIHN1cmUgc3RkZXJyIGlzIGJpbmFyeQotCQkJCSAq IGFmdGVyIGl0J3MgYmVlbiBkdXAnZWQgaW50bywgdG8gYXZvaWQgZGlzdHVyYmluZyB0aGUg cGlwZQotCQkJCSAqIGNodW5raW5nIHByb3RvY29sLgotCQkJCSAqLwotCQkJCWZmbHVzaChz dGRlcnIpOwotCQkJCWZkID0gX29wZW5fb3NmaGFuZGxlKChpbnRwdHJfdCkgc3lzbG9nUGlw ZVsxXSwKLQkJCQkJCQkJCSBfT19BUFBFTkQgfCBfT19CSU5BUlkpOwotCQkJCWlmIChkdXAy KGZkLCBTVERFUlJfRklMRU5PKSA8IDApCi0JCQkJCWVyZXBvcnQoRkFUQUwsCi0JCQkJCQkJ KGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCQkJIGVycm1zZygiY291bGQgbm90 IHJlZGlyZWN0IHN0ZGVycjogJW0iKSkpOwotCQkJCWNsb3NlKGZkKTsKLQkJCQlfc2V0bW9k ZShTVERFUlJfRklMRU5PLCBfT19CSU5BUlkpOworCQkvKgorCQkgKiBvcGVuIHRoZSBwaXBl IGluIGJpbmFyeSBtb2RlIGFuZCBtYWtlIHN1cmUgc3RkZXJyIGlzIGJpbmFyeSBhZnRlcgor CQkgKiBpdCdzIGJlZW4gZHVwJ2VkIGludG8sIHRvIGF2b2lkIGRpc3R1cmJpbmcgdGhlIHBp cGUgY2h1bmtpbmcKKwkJICogcHJvdG9jb2wuCisJCSAqLworCQlmZmx1c2goc3RkZXJyKTsK KwkJZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKGludHB0cl90KSBzeXNsb2dQaXBlWzFdLAorCQkJ CQkJCSBfT19BUFBFTkQgfCBfT19CSU5BUlkpOworCQlpZiAoZHVwMihmZCwgU1RERVJSX0ZJ TEVOTykgPCAwKQorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVycmNvZGVfZm9yX2ZpbGVf YWNjZXNzKCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWRpcmVjdCBzdGRlcnI6ICVt IikpKTsKKwkJY2xvc2UoZmQpOworCQlfc2V0bW9kZShTVERFUlJfRklMRU5PLCBfT19CSU5B UlkpOwogCi0JCQkJLyoKLQkJCQkgKiBOb3cgd2UgYXJlIGRvbmUgd2l0aCB0aGUgd3JpdGUg ZW5kIG9mIHRoZSBwaXBlLgotCQkJCSAqIENsb3NlSGFuZGxlKCkgbXVzdCBub3QgYmUgY2Fs bGVkIGJlY2F1c2UgdGhlIHByZWNlZGluZwotCQkJCSAqIGNsb3NlKCkgY2xvc2VzIHRoZSB1 bmRlcmx5aW5nIGhhbmRsZS4KLQkJCQkgKi8KLQkJCQlzeXNsb2dQaXBlWzFdID0gMDsKKwkJ LyoKKwkJICogTm93IHdlIGFyZSBkb25lIHdpdGggdGhlIHdyaXRlIGVuZCBvZiB0aGUgcGlw ZS4gIENsb3NlSGFuZGxlKCkgbXVzdAorCQkgKiBub3QgYmUgY2FsbGVkIGJlY2F1c2UgdGhl IHByZWNlZGluZyBjbG9zZSgpIGNsb3NlcyB0aGUgdW5kZXJseWluZworCQkgKiBoYW5kbGUu CisJCSAqLworCQlzeXNsb2dQaXBlWzFdID0gMDsKICNlbmRpZgotCQkJCXJlZGlyZWN0aW9u X2RvbmUgPSB0cnVlOwotCQkJfQotCi0JCQkvKiBwb3N0bWFzdGVyIHdpbGwgbmV2ZXIgd3Jp dGUgdGhlIGZpbGUocyk7IGNsb3NlICdlbSAqLwotCQkJZmNsb3NlKHN5c2xvZ0ZpbGUpOwot CQkJc3lzbG9nRmlsZSA9IE5VTEw7Ci0JCQlpZiAoY3N2bG9nRmlsZSAhPSBOVUxMKQotCQkJ ewotCQkJCWZjbG9zZShjc3Zsb2dGaWxlKTsKLQkJCQljc3Zsb2dGaWxlID0gTlVMTDsKLQkJ CX0KLQkJCWlmIChqc29ubG9nRmlsZSAhPSBOVUxMKQotCQkJewotCQkJCWZjbG9zZShqc29u bG9nRmlsZSk7Ci0JCQkJanNvbmxvZ0ZpbGUgPSBOVUxMOwotCQkJfQotCQkJcmV0dXJuIChp bnQpIHN5c2xvZ2dlclBpZDsKKwkJcmVkaXJlY3Rpb25fZG9uZSA9IHRydWU7CiAJfQogCi0J Lyogd2Ugc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUgKi8KLQlyZXR1cm4gMDsKKwkvKiBwb3N0 bWFzdGVyIHdpbGwgbmV2ZXIgd3JpdGUgdGhlIGZpbGUocyk7IGNsb3NlICdlbSAqLworCWZj bG9zZShzeXNsb2dGaWxlKTsKKwlzeXNsb2dGaWxlID0gTlVMTDsKKwlpZiAoY3N2bG9nRmls ZSAhPSBOVUxMKQorCXsKKwkJZmNsb3NlKGNzdmxvZ0ZpbGUpOworCQljc3Zsb2dGaWxlID0g TlVMTDsKKwl9CisJaWYgKGpzb25sb2dGaWxlICE9IE5VTEwpCisJeworCQlmY2xvc2UoanNv bmxvZ0ZpbGUpOworCQlqc29ubG9nRmlsZSA9IE5VTEw7CisJfQorCXJldHVybiAoaW50KSBz eXNsb2dnZXJQaWQ7CiB9CiAKIApAQCAtODMxLDY5ICs4NDMsNiBAQCBzeXNsb2dnZXJfZmRv cGVuKGludCBmZCkKIAogCXJldHVybiBmaWxlOwogfQotCi0vKgotICogc3lzbG9nZ2VyX2Zv cmtleGVjKCkgLQotICoKLSAqIEZvcm1hdCB1cCB0aGUgYXJnbGlzdCBmb3IsIHRoZW4gZm9y ayBhbmQgZXhlYywgYSBzeXNsb2dnZXIgcHJvY2VzcwotICovCi1zdGF0aWMgcGlkX3QKLXN5 c2xvZ2dlcl9mb3JrZXhlYyh2b2lkKQotewotCWNoYXIJICAgKmF2WzEwXTsKLQlpbnQJCQlh YyA9IDA7Ci0JY2hhcgkJZmlsZW5vYnVmWzMyXTsKLQljaGFyCQljc3ZmaWxlbm9idWZbMzJd OwotCWNoYXIJCWpzb25maWxlbm9idWZbMzJdOwotCi0JYXZbYWMrK10gPSAicG9zdGdyZXMi OwotCWF2W2FjKytdID0gIi0tZm9ya2xvZyI7Ci0JYXZbYWMrK10gPSBOVUxMOwkJCS8qIGZp bGxlZCBpbiBieSBwb3N0bWFzdGVyX2ZvcmtleGVjICovCi0KLQkvKiBzdGF0aWMgdmFyaWFi bGVzICh0aG9zZSBub3QgcGFzc2VkIGJ5IHdyaXRlX2JhY2tlbmRfdmFyaWFibGVzKSAqLwot CXNucHJpbnRmKGZpbGVub2J1Ziwgc2l6ZW9mKGZpbGVub2J1ZiksICIlZCIsCi0JCQkgc3lz bG9nZ2VyX2ZkZ2V0KHN5c2xvZ0ZpbGUpKTsKLQlhdlthYysrXSA9IGZpbGVub2J1ZjsKLQlz bnByaW50Zihjc3ZmaWxlbm9idWYsIHNpemVvZihjc3ZmaWxlbm9idWYpLCAiJWQiLAotCQkJ IHN5c2xvZ2dlcl9mZGdldChjc3Zsb2dGaWxlKSk7Ci0JYXZbYWMrK10gPSBjc3ZmaWxlbm9i dWY7Ci0Jc25wcmludGYoanNvbmZpbGVub2J1Ziwgc2l6ZW9mKGpzb25maWxlbm9idWYpLCAi JWQiLAotCQkJIHN5c2xvZ2dlcl9mZGdldChqc29ubG9nRmlsZSkpOwotCWF2W2FjKytdID0g anNvbmZpbGVub2J1ZjsKLQotCWF2W2FjXSA9IE5VTEw7Ci0JQXNzZXJ0KGFjIDwgbGVuZ3Ro b2YoYXYpKTsKLQotCXJldHVybiBwb3N0bWFzdGVyX2ZvcmtleGVjKGFjLCBhdik7Ci19Ci0K LS8qCi0gKiBzeXNsb2dnZXJfcGFyc2VBcmdzKCkgLQotICoKLSAqIEV4dHJhY3QgZGF0YSBm cm9tIHRoZSBhcmdsaXN0IGZvciBleGVjJ2VkIHN5c2xvZ2dlciBwcm9jZXNzCi0gKi8KLXN0 YXRpYyB2b2lkCi1zeXNsb2dnZXJfcGFyc2VBcmdzKGludCBhcmdjLCBjaGFyICphcmd2W10p Ci17Ci0JaW50CQkJZmQ7Ci0KLQlBc3NlcnQoYXJnYyA9PSA2KTsKLQlhcmd2ICs9IDM7Ci0K LQkvKgotCSAqIFJlLW9wZW4gdGhlIGVycm9yIG91dHB1dCBmaWxlcyB0aGF0IHdlcmUgb3Bl bmVkIGJ5IFN5c0xvZ2dlcl9TdGFydCgpLgotCSAqCi0JICogV2UgZXhwZWN0IHRoaXMgd2ls bCBhbHdheXMgc3VjY2VlZCwgd2hpY2ggaXMgdG9vIG9wdGltaXN0aWMsIGJ1dCBpZiBpdAot CSAqIGZhaWxzIHRoZXJlJ3Mgbm90IGEgbG90IHdlIGNhbiBkbyB0byByZXBvcnQgdGhlIHBy b2JsZW0gYW55d2F5LiAgQXMKLQkgKiBjb2RlZCwgd2UnbGwganVzdCBjcmFzaCBvbiBhIG51 bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBhZnRlciBmYWlsdXJlLi4uCi0JICovCi0JZmQgPSBh dG9pKCphcmd2KyspOwotCXN5c2xvZ0ZpbGUgPSBzeXNsb2dnZXJfZmRvcGVuKGZkKTsKLQlm ZCA9IGF0b2koKmFyZ3YrKyk7Ci0JY3N2bG9nRmlsZSA9IHN5c2xvZ2dlcl9mZG9wZW4oZmQp OwotCWZkID0gYXRvaSgqYXJndisrKTsKLQlqc29ubG9nRmlsZSA9IHN5c2xvZ2dlcl9mZG9w ZW4oZmQpOwotfQogI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwogCiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5jCmluZGV4IDA1NzVkMmM5NjdkLi44OTk1MDM1MGFl ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYworKysg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5jCkBAIC04OSwxMyArODksMTUg QEAgc3RhdGljIHZvaWQgSGFuZGxlV2FsV3JpdGVySW50ZXJydXB0cyh2b2lkKTsKICAqIGJh c2ljIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCwgYnV0IG5vdCBlbmFibGVkIHNpZ25hbHMgeWV0 LgogICovCiB2b2lkCi1XYWxXcml0ZXJNYWluKHZvaWQpCitXYWxXcml0ZXJNYWluKGNoYXIg KnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiB7CiAJc2lnam1wX2J1 Zglsb2NhbF9zaWdqbXBfYnVmOwogCU1lbW9yeUNvbnRleHQgd2Fsd3JpdGVyX2NvbnRleHQ7 CiAJaW50CQkJbGVmdF90aWxsX2hpYmVybmF0ZTsKIAlib29sCQloaWJlcm5hdGluZzsKIAor CUFzc2VydChzdGFydHVwX2RhdGFfbGVuID09IDApOworCiAJTXlBdXhQcm9jVHlwZSA9IFdh bFdyaXRlclByb2Nlc3M7CiAJTXlCYWNrZW5kVHlwZSA9IEJfV0FMX1dSSVRFUjsKIAlBdXhp bGlhcnlQcm9jZXNzSW5pdCgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmMKaW5kZXggNTFmZDFkZTljOGIuLjliMDExMzI3MDRiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3dhbHJlY2VpdmVyLmMKQEAgLTE4NCw3ICsxODQsNyBAQCBQcm9jZXNzV2FsUmN2 SW50ZXJydXB0cyh2b2lkKQogCiAvKiBNYWluIGVudHJ5IHBvaW50IGZvciB3YWxyZWNlaXZl ciBwcm9jZXNzICovCiB2b2lkCi1XYWxSZWNlaXZlck1haW4odm9pZCkKK1dhbFJlY2VpdmVy TWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogewog CWNoYXIJCWNvbm5pbmZvW01BWENPTk5JTkZPXTsKIAljaGFyCSAgICp0bXBfY29ubmluZm87 CkBAIC0yMDAsNiArMjAwLDggQEAgV2FsUmVjZWl2ZXJNYWluKHZvaWQpCiAJY2hhcgkgICAq c2VuZGVyX2hvc3QgPSBOVUxMOwogCWludAkJCXNlbmRlcl9wb3J0ID0gMDsKIAorCUFzc2Vy dChzdGFydHVwX2RhdGFfbGVuID09IDApOworCiAJTXlBdXhQcm9jVHlwZSA9IFdhbFJlY2Vp dmVyUHJvY2VzczsKIAlNeUJhY2tlbmRUeXBlID0gQl9XQUxfUkVDRUlWRVI7CiAJQXV4aWxp YXJ5UHJvY2Vzc0luaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQv Z2xvYmFscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKaW5kZXggNjBi YzEyMTdmYjQuLmI2YzMwNTUwMjdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9p bml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwpA QCAtNDQsNiArNDQsNyBAQCB2b2xhdGlsZSB1aW50MzIgQ3JpdFNlY3Rpb25Db3VudCA9IDA7 CiBpbnQJCQlNeVByb2NQaWQ7CiBwZ190aW1lX3QJTXlTdGFydFRpbWU7CiBUaW1lc3RhbXBU eiBNeVN0YXJ0VGltZXN0YW1wOworc3RydWN0IENsaWVudFNvY2tldCAqTXlDbGllbnRTb2Nr ZXQ7CiBzdHJ1Y3QgUG9ydCAqTXlQcm9jUG9ydDsKIGludDMyCQlNeUNhbmNlbEtleTsKIGlu dAkJCU15UE1DaGlsZFNsb3Q7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVy L2F1dG92YWN1dW0uaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oCmlu ZGV4IGM5ZWYzMWFlNjZhLi5lZTEyZTQ3N2YxMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmgKQEAgLTU1LDE4ICs1NSwxNCBAQCBleHRlcm4gYm9vbCBJc0F1dG9WYWN1 dW1Xb3JrZXJQcm9jZXNzKHZvaWQpOwogI2RlZmluZSBJc0FueUF1dG9WYWN1dW1Qcm9jZXNz KCkgXAogCShJc0F1dG9WYWN1dW1MYXVuY2hlclByb2Nlc3MoKSB8fCBJc0F1dG9WYWN1dW1X b3JrZXJQcm9jZXNzKCkpCiAKLS8qIEZ1bmN0aW9ucyB0byBzdGFydCBhdXRvdmFjdXVtIHBy b2Nlc3MsIGNhbGxlZCBmcm9tIHBvc3RtYXN0ZXIgKi8KKy8qIGNhbGxlZCBmcm9tIHBvc3Rt YXN0ZXIgYXQgc2VydmVyIHN0YXJ0dXAgKi8KIGV4dGVybiB2b2lkIGF1dG92YWNfaW5pdCh2 b2lkKTsKLWV4dGVybiBpbnQJU3RhcnRBdXRvVmFjTGF1bmNoZXIodm9pZCk7Ci1leHRlcm4g aW50CVN0YXJ0QXV0b1ZhY1dvcmtlcih2b2lkKTsKIAogLyogY2FsbGVkIGZyb20gcG9zdG1h c3RlciB3aGVuIGEgd29ya2VyIGNvdWxkIG5vdCBiZSBmb3JrZWQgKi8KIGV4dGVybiB2b2lk IEF1dG9WYWNXb3JrZXJGYWlsZWQodm9pZCk7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLWV4 dGVybiB2b2lkIEF1dG9WYWNMYXVuY2hlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkg cGdfYXR0cmlidXRlX25vcmV0dXJuKCk7Ci1leHRlcm4gdm9pZCBBdXRvVmFjV29ya2VyTWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKLSNl bmRpZgorZXh0ZXJuIHZvaWQgQXV0b1ZhY0xhdW5jaGVyTWFpbihjaGFyICpzdGFydHVwX2Rh dGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsK K2V4dGVybiB2b2lkIEF1dG9WYWNXb3JrZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6 ZV90IHN0YXJ0dXBfZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogCiBleHRl cm4gYm9vbCBBdXRvVmFjdXVtUmVxdWVzdFdvcmsoQXV0b1ZhY3V1bVdvcmtJdGVtVHlwZSB0 eXBlLAogCQkJCQkJCQkgIE9pZCByZWxhdGlvbklkLCBCbG9ja051bWJlciBibGtubyk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCBiL3NyYy9p bmNsdWRlL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oCmluZGV4IGNjNzVmMjQ2ODE4Li43NTM5 NGNhMDE1NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXhwcm9jZXNz LmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgKQEAgLTEzLDcg KzEzLDYgQEAKICNpZm5kZWYgQVVYUFJPQ0VTU19ICiAjZGVmaW5lIEFVWFBST0NFU1NfSAog Ci1leHRlcm4gdm9pZCBBdXhpbGlhcnlQcm9jZXNzTWFpbihBdXhQcm9jVHlwZSBhdXh0eXBl KSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIGV4dGVybiB2b2lkIEF1eGlsaWFyeVByb2Nl c3NJbml0KHZvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogQVVYUFJPQ0VTU19IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oIGIv c3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaAppbmRleCAzMjNm MWUwNzI5MS4uNDA1NWQyZjU2MjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9i Z3dvcmtlcl9pbnRlcm5hbHMuaApAQCAtNTUsNiArNTUsNiBAQCBleHRlcm4gdm9pZCBGb3Jn ZXRVbnN0YXJ0ZWRCYWNrZ3JvdW5kV29ya2Vycyh2b2lkKTsKIGV4dGVybiB2b2lkIFJlc2V0 QmFja2dyb3VuZFdvcmtlckNyYXNoVGltZXModm9pZCk7CiAKIC8qIEVudHJ5IHBvaW50IGZv ciBiYWNrZ3JvdW5kIHdvcmtlciBwcm9jZXNzZXMgKi8KLWV4dGVybiB2b2lkIEJhY2tncm91 bmRXb3JrZXJNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIHZv aWQgQmFja2dyb3VuZFdvcmtlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiAKICNlbmRpZgkJCQkJ CQkvKiBCR1dPUktFUl9JTlRFUk5BTFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci9iZ3dyaXRlci5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRl ci5oCmluZGV4IGE2NjcyMjg3M2Y0Li5lZTU0ZmM0MDFlZiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvYmd3cml0ZXIuaApAQCAtMjcsOCArMjcsOCBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50 IENoZWNrUG9pbnRUaW1lb3V0OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBDaGVja1BvaW50 V2FybmluZzsKIGV4dGVybiBQR0RMTElNUE9SVCBkb3VibGUgQ2hlY2tQb2ludENvbXBsZXRp b25UYXJnZXQ7CiAKLWV4dGVybiB2b2lkIEJhY2tncm91bmRXcml0ZXJNYWluKHZvaWQpIHBn X2F0dHJpYnV0ZV9ub3JldHVybigpOwotZXh0ZXJuIHZvaWQgQ2hlY2twb2ludGVyTWFpbih2 b2lkKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIEJhY2tncm91bmRX cml0ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4p IHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIHZvaWQgQ2hlY2twb2ludGVyTWFp bihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRy aWJ1dGVfbm9yZXR1cm4oKTsKIAogZXh0ZXJuIHZvaWQgUmVxdWVzdENoZWNrcG9pbnQoaW50 IGZsYWdzKTsKIGV4dGVybiB2b2lkIENoZWNrcG9pbnRXcml0ZURlbGF5KGludCBmbGFncywg ZG91YmxlIHByb2dyZXNzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIv cGdhcmNoLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3BnYXJjaC5oCmluZGV4IDNiZDRm YWM3MWU1Li41NzdmYzE0ZTFkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9wZ2FyY2guaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3BnYXJjaC5oCkBAIC0y OSw3ICsyOSw3IEBACiBleHRlcm4gU2l6ZSBQZ0FyY2hTaG1lbVNpemUodm9pZCk7CiBleHRl cm4gdm9pZCBQZ0FyY2hTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gYm9vbCBQZ0FyY2hDYW5S ZXN0YXJ0KHZvaWQpOwotZXh0ZXJuIHZvaWQgUGdBcmNoaXZlck1haW4odm9pZCkgcGdfYXR0 cmlidXRlX25vcmV0dXJuKCk7CitleHRlcm4gdm9pZCBQZ0FyY2hpdmVyTWFpbihjaGFyICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1dGVfbm9y ZXR1cm4oKTsKIGV4dGVybiB2b2lkIFBnQXJjaFdha2V1cCh2b2lkKTsKIGV4dGVybiB2b2lk IFBnQXJjaEZvcmNlRGlyU2Nhbih2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuaAppbmRleCA0NWQ0Yjc4YzNhNi4uMDMxYTJmZjE1MjEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5oCkBAIC01OCwxMSArNTgsOSBAQCBleHRlcm4gaW50CU1h eExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4odm9pZCk7CiAKIGV4dGVybiBib29sIFBvc3RtYXN0 ZXJNYXJrUElERm9yV29ya2VyTm90aWZ5KGludCk7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQK LQotZXh0ZXJuIHBpZF90IHBvc3RtYXN0ZXJfZm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSk7Ci1leHRlcm4gdm9pZCBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIEJhY2tlbmRN YWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pIHBnX2F0 dHJpYnV0ZV9ub3JldHVybigpOwogCisjaWZkZWYgRVhFQ19CQUNLRU5ECiBleHRlcm4gU2l6 ZSBTaG1lbUJhY2tlbmRBcnJheVNpemUodm9pZCk7CiBleHRlcm4gdm9pZCBTaG1lbUJhY2tl bmRBcnJheUFsbG9jYXRpb24odm9pZCk7CiAKQEAgLTcxLDYgKzY5LDQ1IEBAIGV4dGVybiB2 b2lkIHBnd2luMzJfcmVnaXN0ZXJfZGVhZGNoaWxkX2NhbGxiYWNrKEhBTkRMRSBwcm9jSGFu ZGxlLCBEV09SRCBwcm9jSWQpCiAjZW5kaWYKICNlbmRpZgogCisvKiBpbiBsYXVuY2hfYmFj a2VuZC5jICovCisKKy8qIHRoaXMgYmV0dGVyIG1hdGNoIHRoZSBsaXN0IGluIGxhdW5jaF9i YWNrZW5kLmMgKi8KK3R5cGVkZWYgZW51bSBQb3N0bWFzdGVyQ2hpbGRUeXBlCit7CisJUE1D X0JBQ0tFTkQgPSAwLAorCVBNQ19BVl9MQVVOQ0hFUiwKKwlQTUNfQVZfV09SS0VSLAorCVBN Q19CR1dPUktFUiwKKwlQTUNfU1lTTE9HR0VSLAorCisJLyoKKwkgKiBzby1jYWxsZWQgImF1 eCBwcm9jZXNzZXMiLiAgVGhlc2UgYWNjZXNzIHNoYXJlZCBtZW1vcnksIGJ1dCBhcmUgbm90 CisJICogYXR0YWNoZWQgdG8gYW55IHBhcnRpY3VsYXIgZGF0YWJhc2UuICBPbmx5IG9uZSBv ZiBlYWNoIG9mIHRoZXNlIGNhbiBiZQorCSAqIHJ1bm5pbmcgYXQgYSB0aW1lLgorCSAqLwor CVBNQ19TVEFSVFVQLAorCVBNQ19CR1dSSVRFUiwKKwlQTUNfQVJDSElWRVIsCisJUE1DX0NI RUNLUE9JTlRFUiwKKwlQTUNfV0FMX1dSSVRFUiwKKwlQTUNfV0FMX1JFQ0VJVkVSLAorfSBQ b3N0bWFzdGVyQ2hpbGRUeXBlOworCisvKiBkZWZpbmVkIGluIGxpYnBxLWJlLmggKi8KK2V4 dGVybiBzdHJ1Y3QgQ2xpZW50U29ja2V0ICpNeUNsaWVudFNvY2tldDsKKworZXh0ZXJuIHBp ZF90IHBvc3RtYXN0ZXJfY2hpbGRfbGF1bmNoKFBvc3RtYXN0ZXJDaGlsZFR5cGUgY2hpbGRf dHlwZSwgY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbiwgc3Ry dWN0IENsaWVudFNvY2tldCAqc29jayk7CisKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKK2V4dGVy biB2b2lkIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHBnX2F0 dHJpYnV0ZV9ub3JldHVybigpOworI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorZXh0ZXJuIHZv aWQgcGd3aW4zMl9yZWdpc3Rlcl9kZWFkY2hpbGRfY2FsbGJhY2soSEFORExFIHByb2NIYW5k bGUsIERXT1JEIHByb2NJZCk7CisjZW5kaWYKKworY29uc3QgY2hhciAqUG9zdG1hc3RlckNo aWxkTmFtZShQb3N0bWFzdGVyQ2hpbGRUeXBlIGNoaWxkX3R5cGUpOworCiAvKgogICogTm90 ZTogTUFYX0JBQ0tFTkRTIGlzIGxpbWl0ZWQgdG8gMl4xOC0xIGJlY2F1c2UgdGhhdCdzIHRo ZSB3aWR0aCByZXNlcnZlZAogICogZm9yIGJ1ZmZlciByZWZlcmVuY2VzIGluIGJ1Zl9pbnRl cm5hbHMuaC4gIFRoaXMgbGltaXRhdGlvbiBjb3VsZCBiZSBsaWZ0ZWQKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1cC5oIGIvc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9zdGFydHVwLmgKaW5kZXggNmEyZTRjNDUyNmIuLmVjODg1MDYzYWFiIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N0YXJ0dXAuaAorKysgYi9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL3N0YXJ0dXAuaApAQCAtMjYsNyArMjYsNyBAQAogZXh0ZXJuIFBHRExM SU1QT1JUIGludCBsb2dfc3RhcnR1cF9wcm9ncmVzc19pbnRlcnZhbDsKIAogZXh0ZXJuIHZv aWQgSGFuZGxlU3RhcnR1cFByb2NJbnRlcnJ1cHRzKHZvaWQpOwotZXh0ZXJuIHZvaWQgU3Rh cnR1cFByb2Nlc3NNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJu IHZvaWQgU3RhcnR1cFByb2Nlc3NNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0 YXJ0dXBfZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogZXh0ZXJuIHZvaWQg UHJlUmVzdG9yZUNvbW1hbmQodm9pZCk7CiBleHRlcm4gdm9pZCBQb3N0UmVzdG9yZUNvbW1h bmQodm9pZCk7CiBleHRlcm4gYm9vbCBJc1Byb21vdGVTaWduYWxlZCh2b2lkKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3lzbG9nZ2VyLmggYi9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL3N5c2xvZ2dlci5oCmluZGV4IDM0ZGE3NzhmMWVmLi43ZGM0MWIzMGU3 YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9zeXNsb2dnZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N5c2xvZ2dlci5oCkBAIC04Niw5ICs4Niw3IEBA IGV4dGVybiBpbnQJU3lzTG9nZ2VyX1N0YXJ0KHZvaWQpOwogCiBleHRlcm4gdm9pZCB3cml0 ZV9zeXNsb2dnZXJfZmlsZShjb25zdCBjaGFyICpidWZmZXIsIGludCBjb3VudCwgaW50IGRl c3RpbmF0aW9uKTsKIAotI2lmZGVmIEVYRUNfQkFDS0VORAotZXh0ZXJuIHZvaWQgU3lzTG9n Z2VyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4o KTsKLSNlbmRpZgorZXh0ZXJuIHZvaWQgU3lzTG9nZ2VyTWFpbihjaGFyICpzdGFydHVwX2Rh dGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsK IAogZXh0ZXJuIGJvb2wgQ2hlY2tMb2dyb3RhdGVTaWduYWwodm9pZCk7CiBleHRlcm4gdm9p ZCBSZW1vdmVMb2dyb3RhdGVTaWduYWxGaWxlcyh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVy L3dhbHdyaXRlci5oCmluZGV4IDZlYmE3YWQ3OWNmLi45OWI3Y2MwN2ZiMiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWx3cml0ZXIuaAorKysgYi9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL3dhbHdyaXRlci5oCkBAIC0xOCw2ICsxOCw2IEBACiBleHRlcm4gUEdE TExJTVBPUlQgaW50IFdhbFdyaXRlckRlbGF5OwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBX YWxXcml0ZXJGbHVzaEFmdGVyOwogCi1leHRlcm4gdm9pZCBXYWxXcml0ZXJNYWluKHZvaWQp IHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIHZvaWQgV2FsV3JpdGVyTWFpbihj aGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1 dGVfbm9yZXR1cm4oKTsKIAogI2VuZGlmCQkJCQkJCS8qIF9XQUxXUklURVJfSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKaW5kZXggOTQ5ZTg3NGYyMTkuLmEz YTVhYjY4MTRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNl aXZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKQEAg LTQ1Niw3ICs0NTYsNyBAQCB3YWxyY3ZfY2xlYXJfcmVzdWx0KFdhbFJjdkV4ZWNSZXN1bHQg KndhbHJlcykKIH0KIAogLyogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIHdhbHJlY2Vp dmVyLmMgKi8KLWV4dGVybiB2b2lkIFdhbFJlY2VpdmVyTWFpbih2b2lkKSBwZ19hdHRyaWJ1 dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIFdhbFJlY2VpdmVyTWFpbihjaGFyICpzdGFy dHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1dGVfbm9yZXR1 cm4oKTsKIGV4dGVybiB2b2lkIFByb2Nlc3NXYWxSY3ZJbnRlcnJ1cHRzKHZvaWQpOwogZXh0 ZXJuIHZvaWQgV2FsUmN2Rm9yY2VSZXBseSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCA5MDIxN2M0OTM5YS4uMGU0MzMxMDBmMGUgMTAwNjQ0Ci0tLSBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0yMzAsNiArMjMwLDcgQEAgQllfSEFORExFX0ZJTEVfSU5G T1JNQVRJT04KIEJhY2tlbmQKIEJhY2tlbmRJZAogQmFja2VuZFBhcmFtZXRlcnMKK0JhY2tl bmRTdGFydHVwSW5mbwogQmFja2VuZFN0YXRlCiBCYWNrZW5kVHlwZQogQmFja2dyb3VuZFdv cmtlcgpAQCAtMjEyMSw2ICsyMTIyLDcgQEAgUG9ydGFsU3RyYXRlZ3kKIFBvc3RQYXJzZUNv bHVtblJlZkhvb2sKIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKIFBvc3RpbmdJdGVtCitQ b3N0bWFzdGVyQ2hpbGRUeXBlCiBQcmVQYXJzZUNvbHVtblJlZkhvb2sKIFByZWRDbGFzcwog UHJlZEl0ZXJJbmZvCkBAIC0zNzkyLDYgKzM3OTQsNyBAQCBzdWJzdGl0dXRlX2FjdHVhbF9w YXJhbWV0ZXJzX2NvbnRleHQKIHN1YnN0aXR1dGVfYWN0dWFsX3NyZl9wYXJhbWV0ZXJzX2Nv bnRleHQKIHN1YnN0aXR1dGVfcGh2X3JlbGlkc19jb250ZXh0CiBzeW1ib2wKK3N5c2xvZ2dl cl9zdGFydHVwX2RhdGEKIHRhYmxlc3BhY2VpbmZvCiB0ZVNlY3Rpb24KIHRlbXBfdGFibGVz cGFjZXNfZXh0cmEKLS0gCjIuMzkuMgoK --------------oZdu1r1d4zA157Kzh0ND2Ywg Content-Type: text/x-patch; charset=UTF-8; name="v5-0008-Move-code-for-backend-startup-to-separate-file.patch" Content-Disposition: attachment; filename*0="v5-0008-Move-code-for-backend-startup-to-separate-file.patch" Content-Transfer-Encoding: base64 RnJvbSBiNWIwN2ViMjU3Y2Q4Zjg1NmEzMTdmZTQ0OTljYzgzNTEyOWIyNDM4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgOCBEZWMgMjAyMyAxNDoyMzoyOCArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjUgOC84XSBNb3ZlIGNvZGUgZm9yIGJhY2tlbmQgc3RhcnR1cCB0 byBzZXBhcmF0ZSBmaWxlCgpUaGlzIGlzIGNvZGUgdGhhdCBydW5zIGluIHRoZSBiYWNrZW5k IHByb2Nlc3MgYWZ0ZXIgZm9ya2luZy4KLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuYyB8IDc2MyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNr ZW5kL3Rjb3AvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3Rjb3Av YmFja2VuZF9zdGFydHVwLmMgIHwgNzc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iYWNrZW5kL3Rjb3AvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIHwgICA0ICsKIHNyYy9pbmNsdWRlL3Rjb3Av YmFja2VuZF9zdGFydHVwLmggIHwgIDQxICsrCiA2IGZpbGVzIGNoYW5nZWQsIDgyOSBpbnNl cnRpb25zKCspLCA3NTggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jh Y2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9p bmNsdWRlL3Rjb3AvYmFja2VuZF9zdGFydHVwLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9z dG1hc3Rlci5jCmluZGV4IDQ4NDJjYjFiY2ZkLi4yYWZiMDE2Yzc2NyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTk2LDExICs5Niw5IEBACiAjaW5jbHVkZSAi Y29tbW9uL2ZpbGVfdXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vaXAuaCIKICNpbmNsdWRl ICJjb21tb24vcGdfcHJuZy5oIgotI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKICNpbmNs dWRlICJsaWIvaWxpc3QuaCIKICNpbmNsdWRlICJsaWJwcS9hdXRoLmgiCiAjaW5jbHVkZSAi bGlicHEvbGlicHEuaCIKLSNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUg ImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVkZSAicGdfZ2V0b3B0LmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCkBAIC0xMTcsMTMgKzExNSwxMSBAQAogI2luY2x1ZGUgInN0b3JhZ2UvaXBj LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJvYy5oIgorI2luY2x1ZGUgInRjb3AvYmFja2VuZF9zdGFydHVwLmgiCiAjaW5jbHVkZSAi dGNvcC90Y29wcHJvdC5oIgotI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvZGF0ZXRpbWUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2lu Y2x1ZGUgInV0aWxzL3BpZGZpbGUuaCIKLSNpbmNsdWRlICJ1dGlscy9wc19zdGF0dXMuaCIK LSNpbmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1w LmgiCiAjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCkBAIC0zNzYsNyArMzcyLDcgQEAg c3RhdGljIFdhaXRFdmVudFNldCAqcG1fd2FpdF9zZXQ7CiAKICNpZmRlZiBVU0VfU1NMCiAv KiBTZXQgd2hlbiBhbmQgaWYgU1NMIGhhcyBiZWVuIGluaXRpYWxpemVkIHByb3Blcmx5ICov Ci1zdGF0aWMgYm9vbCBMb2FkZWRTU0wgPSBmYWxzZTsKK2Jvb2wJCUxvYWRlZFNTTCA9IGZh bHNlOwogI2VuZGlmCiAKICNpZmRlZiBVU0VfQk9OSk9VUgpAQCAtMzk4LDkgKzM5NCw3IEBA IHN0YXRpYyB2b2lkIHByb2Nlc3NfcG1fcG1zaWduYWwodm9pZCk7CiBzdGF0aWMgdm9pZCBw cm9jZXNzX3BtX2NoaWxkX2V4aXQodm9pZCk7CiBzdGF0aWMgdm9pZCBwcm9jZXNzX3BtX3Jl bG9hZF9yZXF1ZXN0KHZvaWQpOwogc3RhdGljIHZvaWQgcHJvY2Vzc19wbV9zaHV0ZG93bl9y ZXF1ZXN0KHZvaWQpOwotc3RhdGljIHZvaWQgcHJvY2Vzc19zdGFydHVwX3BhY2tldF9kaWUo U0lHTkFMX0FSR1MpOwogc3RhdGljIHZvaWQgZHVtbXlfaGFuZGxlcihTSUdOQUxfQVJHUyk7 Ci1zdGF0aWMgdm9pZCBTdGFydHVwUGFja2V0VGltZW91dEhhbmRsZXIodm9pZCk7CiBzdGF0 aWMgdm9pZCBDbGVhbnVwQmFja2VuZChpbnQgcGlkLCBpbnQgZXhpdHN0YXR1cyk7CiBzdGF0 aWMgYm9vbCBDbGVhbnVwQmFja2dyb3VuZFdvcmtlcihpbnQgcGlkLCBpbnQgZXhpdHN0YXR1 cyk7CiBzdGF0aWMgdm9pZCBIYW5kbGVDaGlsZENyYXNoKGludCBwaWQsIGludCBleGl0c3Rh dHVzLCBjb25zdCBjaGFyICpwcm9jbmFtZSk7CkBAIC00MDgsMjMgKzQwMiw5IEBAIHN0YXRp YyB2b2lkIExvZ0NoaWxkRXhpdChpbnQgbGV2LCBjb25zdCBjaGFyICpwcm9jbmFtZSwKIAkJ CQkJCSBpbnQgcGlkLCBpbnQgZXhpdHN0YXR1cyk7CiBzdGF0aWMgdm9pZCBQb3N0bWFzdGVy U3RhdGVNYWNoaW5lKHZvaWQpOwogCi10eXBlZGVmIGVudW0gQ0FDX3N0YXRlCi17Ci0JQ0FD X09LLAotCUNBQ19TVEFSVFVQLAotCUNBQ19TSFVURE9XTiwKLQlDQUNfUkVDT1ZFUlksCi0J Q0FDX05PVENPTlNJU1RFTlQsCi0JQ0FDX1RPT01BTlksCi19IENBQ19zdGF0ZTsKLQotc3Rh dGljIHZvaWQgQmFja2VuZEluaXRpYWxpemUoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywg Q0FDX3N0YXRlIGNhYyk7CiBzdGF0aWMgdm9pZCBFeGl0UG9zdG1hc3RlcihpbnQgc3RhdHVz KSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIHN0YXRpYyBpbnQJU2VydmVyTG9vcCh2b2lk KTsKLXN0YXRpYyBpbnQJQmFja2VuZFN0YXJ0dXAoQ2xpZW50U29ja2V0ICpjbGllbnRfc29j ayk7Ci1zdGF0aWMgaW50CVByb2Nlc3NTdGFydHVwUGFja2V0KFBvcnQgKnBvcnQsIGJvb2wg c3NsX2RvbmUsIGJvb2wgZ3NzX2RvbmUpOwotc3RhdGljIHZvaWQgU2VuZE5lZ290aWF0ZVBy b3RvY29sVmVyc2lvbihMaXN0ICp1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9ucyk7Ci1z dGF0aWMgdm9pZCBwcm9jZXNzQ2FuY2VsUmVxdWVzdChQb3J0ICpwb3J0LCB2b2lkICpwa3Qp Oworc3RhdGljIGludAlCYWNrZW5kU3RhcnR1cChDbGllbnRTb2NrZXQgKnBvcnQpOwogc3Rh dGljIHZvaWQgcmVwb3J0X2ZvcmtfZmFpbHVyZV90b19jbGllbnQoQ2xpZW50U29ja2V0ICpj bGllbnRfc29jaywgaW50IGVycm51bSk7CiBzdGF0aWMgQ0FDX3N0YXRlIGNhbkFjY2VwdENv bm5lY3Rpb25zKGludCBiYWNrZW5kX3R5cGUpOwogc3RhdGljIGJvb2wgUmFuZG9tQ2FuY2Vs S2V5KGludDMyICpjYW5jZWxfa2V5KTsKQEAgLTE4NDEsNDEyICsxODIxLDE0IEBAIFNlcnZl ckxvb3Aodm9pZCkKIAl9CiB9CiAKLS8qCi0gKiBSZWFkIGEgY2xpZW50J3Mgc3RhcnR1cCBw YWNrZXQgYW5kIGRvIHNvbWV0aGluZyBhY2NvcmRpbmcgdG8gaXQuCi0gKgotICogUmV0dXJu cyBTVEFUVVNfT0sgb3IgU1RBVFVTX0VSUk9SLCBvciBtaWdodCBjYWxsIGVyZXBvcnQoRkFU QUwpIGFuZAotICogbm90IHJldHVybiBhdCBhbGwuCi0gKgotICogKE5vdGUgdGhhdCBlcmVw b3J0KEZBVEFMKSBzdHVmZiBpcyBzZW50IHRvIHRoZSBjbGllbnQsIHNvIG9ubHkgdXNlIGl0 Ci0gKiBpZiB0aGF0J3Mgd2hhdCB5b3Ugd2FudC4gIFJldHVybiBTVEFUVVNfRVJST1IgaWYg eW91IGRvbid0IHdhbnQgdG8KLSAqIHNlbmQgYW55dGhpbmcgdG8gdGhlIGNsaWVudCwgd2hp Y2ggd291bGQgdHlwaWNhbGx5IGJlIGFwcHJvcHJpYXRlCi0gKiBpZiB3ZSBkZXRlY3QgYSBj b21tdW5pY2F0aW9ucyBmYWlsdXJlLikKLSAqCi0gKiBTZXQgc3NsX2RvbmUgYW5kL29yIGdz c19kb25lIHdoZW4gbmVnb3RpYXRpb24gb2YgYW4gZW5jcnlwdGVkIGxheWVyCi0gKiAoY3Vy cmVudGx5LCBUTFMgb3IgR1NTQVBJKSBpcyBjb21wbGV0ZWQuIEEgc3VjY2Vzc2Z1bCBuZWdv dGlhdGlvbiBvZiBlaXRoZXIKLSAqIGVuY3J5cHRpb24gbGF5ZXIgc2V0cyBib3RoIGZsYWdz LCBidXQgYSByZWplY3RlZCBuZWdvdGlhdGlvbiBzZXRzIG9ubHkgdGhlCi0gKiBmbGFnIGZv ciB0aGF0IGxheWVyLCBzaW5jZSB0aGUgY2xpZW50IG1heSB3aXNoIHRvIHRyeSB0aGUgb3Ro ZXIgb25lLiBXZQotICogc2hvdWxkIG1ha2Ugbm8gYXNzdW1wdGlvbiBoZXJlIGFib3V0IHRo ZSBvcmRlciBpbiB3aGljaCB0aGUgY2xpZW50IG1heSBtYWtlCi0gKiByZXF1ZXN0cy4KLSAq Lwotc3RhdGljIGludAotUHJvY2Vzc1N0YXJ0dXBQYWNrZXQoUG9ydCAqcG9ydCwgYm9vbCBz c2xfZG9uZSwgYm9vbCBnc3NfZG9uZSkKLXsKLQlpbnQzMgkJbGVuOwotCWNoYXIJICAgKmJ1 ZjsKLQlQcm90b2NvbFZlcnNpb24gcHJvdG87Ci0JTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OwotCi0JcHFfc3RhcnRtc2dyZWFkKCk7Ci0KLQkvKgotCSAqIEdyYWIgdGhlIGZpcnN0IGJ5 dGUgb2YgdGhlIGxlbmd0aCB3b3JkIHNlcGFyYXRlbHksIHNvIHRoYXQgd2UgY2FuIHRlbGwK LQkgKiB3aGV0aGVyIHdlIGhhdmUgbm8gZGF0YSBhdCBhbGwgb3IgYW4gaW5jb21wbGV0ZSBw YWNrZXQuICAoVGhpcyBtaWdodAotCSAqIHNvdW5kIGluZWZmaWNpZW50LCBidXQgaXQncyBu b3QgcmVhbGx5LCBiZWNhdXNlIG9mIGJ1ZmZlcmluZyBpbgotCSAqIHBxY29tbS5jLikKLQkg Ki8KLQlpZiAocHFfZ2V0Ynl0ZXMoKGNoYXIgKikgJmxlbiwgMSkgPT0gRU9GKQotCXsKLQkJ LyoKLQkJICogSWYgd2UgZ2V0IG5vIGRhdGEgYXQgYWxsLCBkb24ndCBjbHV0dGVyIHRoZSBs b2cgd2l0aCBhIGNvbXBsYWludDsKLQkJICogc3VjaCBjYXNlcyBvZnRlbiBvY2N1ciBmb3Ig bGVnaXRpbWF0ZSByZWFzb25zLiAgQW4gZXhhbXBsZSBpcyB0aGF0Ci0JCSAqIHdlIG1pZ2h0 IGJlIGhlcmUgYWZ0ZXIgcmVzcG9uZGluZyB0byBORUdPVElBVEVfU1NMX0NPREUsIGFuZCBp ZiB0aGUKLQkJICogY2xpZW50IGRpZG4ndCBsaWtlIG91ciByZXNwb25zZSwgaXQnbGwgcHJv YmFibHkganVzdCBkcm9wIHRoZQotCQkgKiBjb25uZWN0aW9uLiAgU2VydmljZS1tb25pdG9y aW5nIHNvZnR3YXJlIGFsc28gb2Z0ZW4ganVzdCBvcGVucyBhbmQKLQkJICogY2xvc2VzIGEg Y29ubmVjdGlvbiB3aXRob3V0IHNlbmRpbmcgYW55dGhpbmcuICAoU28gZG8gcG9ydAotCQkg KiBzY2FubmVycywgd2hpY2ggbWF5IGJlIGxlc3MgYmVuaWduLCBidXQgaXQncyBub3QgcmVh bGx5IG91ciBqb2IgdG8KLQkJICogbm90aWNlIHRob3NlLikKLQkJICovCi0JCXJldHVybiBT VEFUVVNfRVJST1I7Ci0JfQotCi0JaWYgKHBxX2dldGJ5dGVzKCgoY2hhciAqKSAmbGVuKSAr IDEsIDMpID09IEVPRikKLQl7Ci0JCS8qIEdvdCBhIHBhcnRpYWwgbGVuZ3RoIHdvcmQsIHNv IGJsZWF0IGFib3V0IHRoYXQgKi8KLQkJaWYgKCFzc2xfZG9uZSAmJiAhZ3NzX2RvbmUpCi0J CQllcmVwb3J0KENPTU1FUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9W SU9MQVRJT04pLAotCQkJCQkgZXJybXNnKCJpbmNvbXBsZXRlIHN0YXJ0dXAgcGFja2V0Iikp KTsKLQkJcmV0dXJuIFNUQVRVU19FUlJPUjsKLQl9Ci0KLQlsZW4gPSBwZ19udG9oMzIobGVu KTsKLQlsZW4gLT0gNDsKLQotCWlmIChsZW4gPCAoaW50MzIpIHNpemVvZihQcm90b2NvbFZl cnNpb24pIHx8Ci0JCWxlbiA+IE1BWF9TVEFSVFVQX1BBQ0tFVF9MRU5HVEgpCi0JewotCQll cmVwb3J0KENPTU1FUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xB VElPTiksCi0JCQkJIGVycm1zZygiaW52YWxpZCBsZW5ndGggb2Ygc3RhcnR1cCBwYWNrZXQi KSkpOwotCQlyZXR1cm4gU1RBVFVTX0VSUk9SOwotCX0KLQotCS8qCi0JICogQWxsb2NhdGUg c3BhY2UgdG8gaG9sZCB0aGUgc3RhcnR1cCBwYWNrZXQsIHBsdXMgb25lIGV4dHJhIGJ5dGUg dGhhdCdzCi0JICogaW5pdGlhbGl6ZWQgdG8gYmUgemVyby4gIFRoaXMgZW5zdXJlcyB3ZSB3 aWxsIGhhdmUgbnVsbCB0ZXJtaW5hdGlvbiBvZgotCSAqIGFsbCBzdHJpbmdzIGluc2lkZSB0 aGUgcGFja2V0LgotCSAqLwotCWJ1ZiA9IHBhbGxvYyhsZW4gKyAxKTsKLQlidWZbbGVuXSA9 ICdcMCc7Ci0KLQlpZiAocHFfZ2V0Ynl0ZXMoYnVmLCBsZW4pID09IEVPRikKLQl7Ci0JCWVy ZXBvcnQoQ09NTUVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFU SU9OKSwKLQkJCQkgZXJybXNnKCJpbmNvbXBsZXRlIHN0YXJ0dXAgcGFja2V0IikpKTsKLQkJ cmV0dXJuIFNUQVRVU19FUlJPUjsKLQl9Ci0JcHFfZW5kbXNncmVhZCgpOwotCi0JLyoKLQkg KiBUaGUgZmlyc3QgZmllbGQgaXMgZWl0aGVyIGEgcHJvdG9jb2wgdmVyc2lvbiBudW1iZXIg b3IgYSBzcGVjaWFsCi0JICogcmVxdWVzdCBjb2RlLgotCSAqLwotCXBvcnQtPnByb3RvID0g cHJvdG8gPSBwZ19udG9oMzIoKigoUHJvdG9jb2xWZXJzaW9uICopIGJ1ZikpOwotCi0JaWYg KHByb3RvID09IENBTkNFTF9SRVFVRVNUX0NPREUpCi0JewotCQlpZiAobGVuICE9IHNpemVv ZihDYW5jZWxSZXF1ZXN0UGFja2V0KSkKLQkJewotCQkJZXJlcG9ydChDT01NRVJST1IsCi0J CQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKLQkJCQkJIGVycm1z ZygiaW52YWxpZCBsZW5ndGggb2Ygc3RhcnR1cCBwYWNrZXQiKSkpOwotCQkJcmV0dXJuIFNU QVRVU19FUlJPUjsKLQkJfQotCQlwcm9jZXNzQ2FuY2VsUmVxdWVzdChwb3J0LCBidWYpOwot CQkvKiBOb3QgcmVhbGx5IGFuIGVycm9yLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBwcm9jZWVk IGZ1cnRoZXIgKi8KLQkJcmV0dXJuIFNUQVRVU19FUlJPUjsKLQl9Ci0KLQlpZiAocHJvdG8g PT0gTkVHT1RJQVRFX1NTTF9DT0RFICYmICFzc2xfZG9uZSkKLQl7Ci0JCWNoYXIJCVNTTG9r OwotCi0jaWZkZWYgVVNFX1NTTAotCQkvKiBObyBTU0wgd2hlbiBkaXNhYmxlZCBvciBvbiBV bml4IHNvY2tldHMgKi8KLQkJaWYgKCFMb2FkZWRTU0wgfHwgcG9ydC0+bGFkZHIuYWRkci5z c19mYW1pbHkgPT0gQUZfVU5JWCkKLQkJCVNTTG9rID0gJ04nOwotCQllbHNlCi0JCQlTU0xv ayA9ICdTJzsJCS8qIFN1cHBvcnQgZm9yIFNTTCAqLwotI2Vsc2UKLQkJU1NMb2sgPSAnTic7 CQkJLyogTm8gc3VwcG9ydCBmb3IgU1NMICovCi0jZW5kaWYKLQotcmV0cnkxOgotCQlpZiAo c2VuZChwb3J0LT5zb2NrLCAmU1NMb2ssIDEsIDApICE9IDEpCi0JCXsKLQkJCWlmIChlcnJu byA9PSBFSU5UUikKLQkJCQlnb3RvIHJldHJ5MTsJLyogaWYgaW50ZXJydXB0ZWQsIGp1c3Qg cmV0cnkgKi8KLQkJCWVyZXBvcnQoQ09NTUVSUk9SLAotCQkJCQkoZXJyY29kZV9mb3Jfc29j a2V0X2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJmYWlsZWQgdG8gc2VuZCBTU0wgbmVnb3Rp YXRpb24gcmVzcG9uc2U6ICVtIikpKTsKLQkJCXJldHVybiBTVEFUVVNfRVJST1I7CS8qIGNs b3NlIHRoZSBjb25uZWN0aW9uICovCi0JCX0KLQotI2lmZGVmIFVTRV9TU0wKLQkJaWYgKFNT TG9rID09ICdTJyAmJiBzZWN1cmVfb3Blbl9zZXJ2ZXIocG9ydCkgPT0gLTEpCi0JCQlyZXR1 cm4gU1RBVFVTX0VSUk9SOwotI2VuZGlmCi0KLQkJLyoKLQkJICogQXQgdGhpcyBwb2ludCB3 ZSBzaG91bGQgaGF2ZSBubyBkYXRhIGFscmVhZHkgYnVmZmVyZWQuICBJZiB3ZSBkbywKLQkJ ICogaXQgd2FzIHJlY2VpdmVkIGJlZm9yZSB3ZSBwZXJmb3JtZWQgdGhlIFNTTCBoYW5kc2hh a2UsIHNvIGl0IHdhc24ndAotCQkgKiBlbmNyeXB0ZWQgYW5kIGluZGVlZCBtYXkgaGF2ZSBi ZWVuIGluamVjdGVkIGJ5IGEgbWFuLWluLXRoZS1taWRkbGUuCi0JCSAqIFdlIHJlcG9ydCB0 aGlzIGNhc2UgdG8gdGhlIGNsaWVudC4KLQkJICovCi0JCWlmIChwcV9idWZmZXJfaGFzX2Rh dGEoKSkKLQkJCWVyZXBvcnQoRkFUQUwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9D T0xfVklPTEFUSU9OKSwKLQkJCQkJIGVycm1zZygicmVjZWl2ZWQgdW5lbmNyeXB0ZWQgZGF0 YSBhZnRlciBTU0wgcmVxdWVzdCIpLAotCQkJCQkgZXJyZGV0YWlsKCJUaGlzIGNvdWxkIGJl IGVpdGhlciBhIGNsaWVudC1zb2Z0d2FyZSBidWcgb3IgZXZpZGVuY2Ugb2YgYW4gYXR0ZW1w dGVkIG1hbi1pbi10aGUtbWlkZGxlIGF0dGFjay4iKSkpOwotCi0JCS8qCi0JCSAqIHJlZ3Vs YXIgc3RhcnR1cCBwYWNrZXQsIGNhbmNlbCwgZXRjIHBhY2tldCBzaG91bGQgZm9sbG93LCBi dXQgbm90Ci0JCSAqIGFub3RoZXIgU1NMIG5lZ290aWF0aW9uIHJlcXVlc3QsIGFuZCBhIEdT UyByZXF1ZXN0IHNob3VsZCBvbmx5Ci0JCSAqIGZvbGxvdyBpZiBTU0wgd2FzIHJlamVjdGVk IChjbGllbnQgbWF5IG5lZ290aWF0ZSBpbiBlaXRoZXIgb3JkZXIpCi0JCSAqLwotCQlyZXR1 cm4gUHJvY2Vzc1N0YXJ0dXBQYWNrZXQocG9ydCwgdHJ1ZSwgU1NMb2sgPT0gJ1MnKTsKLQl9 Ci0JZWxzZSBpZiAocHJvdG8gPT0gTkVHT1RJQVRFX0dTU19DT0RFICYmICFnc3NfZG9uZSkK LQl7Ci0JCWNoYXIJCUdTU29rID0gJ04nOwotCi0jaWZkZWYgRU5BQkxFX0dTUwotCQkvKiBO byBHU1NBUEkgZW5jcnlwdGlvbiB3aGVuIG9uIFVuaXggc29ja2V0ICovCi0JCWlmIChwb3J0 LT5sYWRkci5hZGRyLnNzX2ZhbWlseSAhPSBBRl9VTklYKQotCQkJR1NTb2sgPSAnRyc7Ci0j ZW5kaWYKLQotCQl3aGlsZSAoc2VuZChwb3J0LT5zb2NrLCAmR1NTb2ssIDEsIDApICE9IDEp Ci0JCXsKLQkJCWlmIChlcnJubyA9PSBFSU5UUikKLQkJCQljb250aW51ZTsKLQkJCWVyZXBv cnQoQ09NTUVSUk9SLAotCQkJCQkoZXJyY29kZV9mb3Jfc29ja2V0X2FjY2VzcygpLAotCQkJ CQkgZXJybXNnKCJmYWlsZWQgdG8gc2VuZCBHU1NBUEkgbmVnb3RpYXRpb24gcmVzcG9uc2U6 ICVtIikpKTsKLQkJCXJldHVybiBTVEFUVVNfRVJST1I7CS8qIGNsb3NlIHRoZSBjb25uZWN0 aW9uICovCi0JCX0KLQotI2lmZGVmIEVOQUJMRV9HU1MKLQkJaWYgKEdTU29rID09ICdHJyAm JiBzZWN1cmVfb3Blbl9nc3NhcGkocG9ydCkgPT0gLTEpCi0JCQlyZXR1cm4gU1RBVFVTX0VS Uk9SOwotI2VuZGlmCi0KLQkJLyoKLQkJICogQXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgaGF2 ZSBubyBkYXRhIGFscmVhZHkgYnVmZmVyZWQuICBJZiB3ZSBkbywKLQkJICogaXQgd2FzIHJl Y2VpdmVkIGJlZm9yZSB3ZSBwZXJmb3JtZWQgdGhlIEdTUyBoYW5kc2hha2UsIHNvIGl0IHdh c24ndAotCQkgKiBlbmNyeXB0ZWQgYW5kIGluZGVlZCBtYXkgaGF2ZSBiZWVuIGluamVjdGVk IGJ5IGEgbWFuLWluLXRoZS1taWRkbGUuCi0JCSAqIFdlIHJlcG9ydCB0aGlzIGNhc2UgdG8g dGhlIGNsaWVudC4KLQkJICovCi0JCWlmIChwcV9idWZmZXJfaGFzX2RhdGEoKSkKLQkJCWVy ZXBvcnQoRkFUQUwsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9O KSwKLQkJCQkJIGVycm1zZygicmVjZWl2ZWQgdW5lbmNyeXB0ZWQgZGF0YSBhZnRlciBHU1NB UEkgZW5jcnlwdGlvbiByZXF1ZXN0IiksCi0JCQkJCSBlcnJkZXRhaWwoIlRoaXMgY291bGQg YmUgZWl0aGVyIGEgY2xpZW50LXNvZnR3YXJlIGJ1ZyBvciBldmlkZW5jZSBvZiBhbiBhdHRl bXB0ZWQgbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrLiIpKSk7Ci0KLQkJLyoKLQkJICogcmVn dWxhciBzdGFydHVwIHBhY2tldCwgY2FuY2VsLCBldGMgcGFja2V0IHNob3VsZCBmb2xsb3cs IGJ1dCBub3QKLQkJICogYW5vdGhlciBHU1MgbmVnb3RpYXRpb24gcmVxdWVzdCwgYW5kIGFu IFNTTCByZXF1ZXN0IHNob3VsZCBvbmx5Ci0JCSAqIGZvbGxvdyBpZiBHU1Mgd2FzIHJlamVj dGVkIChjbGllbnQgbWF5IG5lZ290aWF0ZSBpbiBlaXRoZXIgb3JkZXIpCi0JCSAqLwotCQly ZXR1cm4gUHJvY2Vzc1N0YXJ0dXBQYWNrZXQocG9ydCwgR1NTb2sgPT0gJ0cnLCB0cnVlKTsK LQl9Ci0KLQkvKiBDb3VsZCBhZGQgYWRkaXRpb25hbCBzcGVjaWFsIHBhY2tldCB0eXBlcyBo ZXJlICovCi0KLQkvKgotCSAqIFNldCBGcm9udGVuZFByb3RvY29sIG5vdyBzbyB0aGF0IGVy ZXBvcnQoKSBrbm93cyB3aGF0IGZvcm1hdCB0byBzZW5kIGlmCi0JICogd2UgZmFpbCBkdXJp bmcgc3RhcnR1cC4KLQkgKi8KLQlGcm9udGVuZFByb3RvY29sID0gcHJvdG87Ci0KLQkvKiBD aGVjayB0aGF0IHRoZSBtYWpvciBwcm90b2NvbCB2ZXJzaW9uIGlzIGluIHJhbmdlLiAqLwot CWlmIChQR19QUk9UT0NPTF9NQUpPUihwcm90bykgPCBQR19QUk9UT0NPTF9NQUpPUihQR19Q Uk9UT0NPTF9FQVJMSUVTVCkgfHwKLQkJUEdfUFJPVE9DT0xfTUFKT1IocHJvdG8pID4gUEdf UFJPVE9DT0xfTUFKT1IoUEdfUFJPVE9DT0xfTEFURVNUKSkKLQkJZXJlcG9ydChGQVRBTCwK LQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkJIGVy cm1zZygidW5zdXBwb3J0ZWQgZnJvbnRlbmQgcHJvdG9jb2wgJXUuJXU6IHNlcnZlciBzdXBw b3J0cyAldS4wIHRvICV1LiV1IiwKLQkJCQkJCVBHX1BST1RPQ09MX01BSk9SKHByb3RvKSwg UEdfUFJPVE9DT0xfTUlOT1IocHJvdG8pLAotCQkJCQkJUEdfUFJPVE9DT0xfTUFKT1IoUEdf UFJPVE9DT0xfRUFSTElFU1QpLAotCQkJCQkJUEdfUFJPVE9DT0xfTUFKT1IoUEdfUFJPVE9D T0xfTEFURVNUKSwKLQkJCQkJCVBHX1BST1RPQ09MX01JTk9SKFBHX1BST1RPQ09MX0xBVEVT VCkpKSk7Ci0KLQkvKgotCSAqIE5vdyBmZXRjaCBwYXJhbWV0ZXJzIG91dCBvZiBzdGFydHVw IHBhY2tldCBhbmQgc2F2ZSB0aGVtIGludG8gdGhlIFBvcnQKLQkgKiBzdHJ1Y3R1cmUuCi0J ICovCi0Jb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250 ZXh0KTsKLQotCS8qIEhhbmRsZSBwcm90b2NvbCB2ZXJzaW9uIDMgc3RhcnR1cCBwYWNrZXQg Ki8KLQl7Ci0JCWludDMyCQlvZmZzZXQgPSBzaXplb2YoUHJvdG9jb2xWZXJzaW9uKTsKLQkJ TGlzdAkgICAqdW5yZWNvZ25pemVkX3Byb3RvY29sX29wdGlvbnMgPSBOSUw7Ci0KLQkJLyoK LQkJICogU2NhbiBwYWNrZXQgYm9keSBmb3IgbmFtZS9vcHRpb24gcGFpcnMuICBXZSBjYW4g YXNzdW1lIGFueSBzdHJpbmcKLQkJICogYmVnaW5uaW5nIHdpdGhpbiB0aGUgcGFja2V0IGJv ZHkgaXMgbnVsbC10ZXJtaW5hdGVkLCB0aGFua3MgdG8KLQkJICogemVyb2luZyBleHRyYSBi eXRlIGFib3ZlLgotCQkgKi8KLQkJcG9ydC0+Z3VjX29wdGlvbnMgPSBOSUw7Ci0KLQkJd2hp bGUgKG9mZnNldCA8IGxlbikKLQkJewotCQkJY2hhcgkgICAqbmFtZXB0ciA9IGJ1ZiArIG9m ZnNldDsKLQkJCWludDMyCQl2YWxvZmZzZXQ7Ci0JCQljaGFyCSAgICp2YWxwdHI7Ci0KLQkJ CWlmICgqbmFtZXB0ciA9PSAnXDAnKQotCQkJCWJyZWFrOwkJCS8qIGZvdW5kIHBhY2tldCB0 ZXJtaW5hdG9yICovCi0JCQl2YWxvZmZzZXQgPSBvZmZzZXQgKyBzdHJsZW4obmFtZXB0cikg KyAxOwotCQkJaWYgKHZhbG9mZnNldCA+PSBsZW4pCi0JCQkJYnJlYWs7CQkJLyogbWlzc2lu ZyB2YWx1ZSwgd2lsbCBjb21wbGFpbiBiZWxvdyAqLwotCQkJdmFscHRyID0gYnVmICsgdmFs b2Zmc2V0OwotCi0JCQlpZiAoc3RyY21wKG5hbWVwdHIsICJkYXRhYmFzZSIpID09IDApCi0J CQkJcG9ydC0+ZGF0YWJhc2VfbmFtZSA9IHBzdHJkdXAodmFscHRyKTsKLQkJCWVsc2UgaWYg KHN0cmNtcChuYW1lcHRyLCAidXNlciIpID09IDApCi0JCQkJcG9ydC0+dXNlcl9uYW1lID0g cHN0cmR1cCh2YWxwdHIpOwotCQkJZWxzZSBpZiAoc3RyY21wKG5hbWVwdHIsICJvcHRpb25z IikgPT0gMCkKLQkJCQlwb3J0LT5jbWRsaW5lX29wdGlvbnMgPSBwc3RyZHVwKHZhbHB0cik7 Ci0JCQllbHNlIGlmIChzdHJjbXAobmFtZXB0ciwgInJlcGxpY2F0aW9uIikgPT0gMCkKLQkJ CXsKLQkJCQkvKgotCQkJCSAqIER1ZSB0byBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNvbmNl cm5zIHRoZSByZXBsaWNhdGlvbgotCQkJCSAqIHBhcmFtZXRlciBpcyBhIGh5YnJpZCBiZWFz dCB3aGljaCBhbGxvd3MgdGhlIHZhbHVlIHRvIGJlCi0JCQkJICogZWl0aGVyIGJvb2xlYW4g b3IgdGhlIHN0cmluZyAnZGF0YWJhc2UnLiBUaGUgbGF0dGVyCi0JCQkJICogY29ubmVjdHMg dG8gYSBzcGVjaWZpYyBkYXRhYmFzZSB3aGljaCBpcyBlLmcuIHJlcXVpcmVkIGZvcgotCQkJ CSAqIGxvZ2ljYWwgZGVjb2Rpbmcgd2hpbGUuCi0JCQkJICovCi0JCQkJaWYgKHN0cmNtcCh2 YWxwdHIsICJkYXRhYmFzZSIpID09IDApCi0JCQkJewotCQkJCQlhbV93YWxzZW5kZXIgPSB0 cnVlOwotCQkJCQlhbV9kYl93YWxzZW5kZXIgPSB0cnVlOwotCQkJCX0KLQkJCQllbHNlIGlm ICghcGFyc2VfYm9vbCh2YWxwdHIsICZhbV93YWxzZW5kZXIpKQotCQkJCQllcmVwb3J0KEZB VEFMLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUp LAotCQkJCQkJCSBlcnJtc2coImludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciBcIiVzXCI6 IFwiJXNcIiIsCi0JCQkJCQkJCQkicmVwbGljYXRpb24iLAotCQkJCQkJCQkJdmFscHRyKSwK LQkJCQkJCQkgZXJyaGludCgiVmFsaWQgdmFsdWVzIGFyZTogXCJmYWxzZVwiLCAwLCBcInRy dWVcIiwgMSwgXCJkYXRhYmFzZVwiLiIpKSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChzdHJuY21w KG5hbWVwdHIsICJfcHFfLiIsIDUpID09IDApCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBBbnkg b3B0aW9uIGJlZ2lubmluZyB3aXRoIF9wcV8uIGlzIHJlc2VydmVkIGZvciB1c2UgYXMgYQot CQkJCSAqIHByb3RvY29sLWxldmVsIG9wdGlvbiwgYnV0IGF0IHByZXNlbnQgbm8gc3VjaCBv cHRpb25zIGFyZQotCQkJCSAqIGRlZmluZWQuCi0JCQkJICovCi0JCQkJdW5yZWNvZ25pemVk X3Byb3RvY29sX29wdGlvbnMgPQotCQkJCQlsYXBwZW5kKHVucmVjb2duaXplZF9wcm90b2Nv bF9vcHRpb25zLCBwc3RyZHVwKG5hbWVwdHIpKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJ CQkvKiBBc3N1bWUgaXQncyBhIGdlbmVyaWMgR1VDIG9wdGlvbiAqLwotCQkJCXBvcnQtPmd1 Y19vcHRpb25zID0gbGFwcGVuZChwb3J0LT5ndWNfb3B0aW9ucywKLQkJCQkJCQkJCQkJcHN0 cmR1cChuYW1lcHRyKSk7Ci0JCQkJcG9ydC0+Z3VjX29wdGlvbnMgPSBsYXBwZW5kKHBvcnQt Pmd1Y19vcHRpb25zLAotCQkJCQkJCQkJCQlwc3RyZHVwKHZhbHB0cikpOwotCi0JCQkJLyoK LQkJCQkgKiBDb3B5IGFwcGxpY2F0aW9uX25hbWUgdG8gcG9ydCBpZiB3ZSBjb21lIGFjcm9z cyBpdC4gIFRoaXMKLQkJCQkgKiBpcyBkb25lIHNvIHdlIGNhbiBsb2cgdGhlIGFwcGxpY2F0 aW9uX25hbWUgaW4gdGhlCi0JCQkJICogY29ubmVjdGlvbiBhdXRob3JpemF0aW9uIG1lc3Nh Z2UuICBOb3RlIHRoYXQgdGhlIEdVQyB3b3VsZAotCQkJCSAqIGJlIHVzZWQgYnV0IHdlIGhh dmVuJ3QgZ29uZSB0aHJvdWdoIEdVQyBzZXR1cCB5ZXQuCi0JCQkJICovCi0JCQkJaWYgKHN0 cmNtcChuYW1lcHRyLCAiYXBwbGljYXRpb25fbmFtZSIpID09IDApCi0JCQkJewotCQkJCQlw b3J0LT5hcHBsaWNhdGlvbl9uYW1lID0gcGdfY2xlYW5fYXNjaWkodmFscHRyLCAwKTsKLQkJ CQl9Ci0JCQl9Ci0JCQlvZmZzZXQgPSB2YWxvZmZzZXQgKyBzdHJsZW4odmFscHRyKSArIDE7 Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB3ZSBkaWRuJ3QgZmluZCBhIHBhY2tldCB0ZXJtaW5h dG9yIGV4YWN0bHkgYXQgdGhlIGVuZCBvZiB0aGUKLQkJICogZ2l2ZW4gcGFja2V0IGxlbmd0 aCwgY29tcGxhaW4uCi0JCSAqLwotCQlpZiAob2Zmc2V0ICE9IGxlbiAtIDEpCi0JCQllcmVw b3J0KEZBVEFMLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiks Ci0JCQkJCSBlcnJtc2coImludmFsaWQgc3RhcnR1cCBwYWNrZXQgbGF5b3V0OiBleHBlY3Rl ZCB0ZXJtaW5hdG9yIGFzIGxhc3QgYnl0ZSIpKSk7Ci0KLQkJLyoKLQkJICogSWYgdGhlIGNs aWVudCByZXF1ZXN0ZWQgYSBuZXdlciBwcm90b2NvbCB2ZXJzaW9uIG9yIGlmIHRoZSBjbGll bnQKLQkJICogcmVxdWVzdGVkIGFueSBwcm90b2NvbCBvcHRpb25zIHdlIGRpZG4ndCByZWNv Z25pemUsIGxldCB0aGVtIGtub3cKLQkJICogdGhlIG5ld2VzdCBtaW5vciBwcm90b2NvbCB2 ZXJzaW9uIHdlIGRvIHN1cHBvcnQgYW5kIHRoZSBuYW1lcyBvZgotCQkgKiBhbnkgdW5yZWNv Z25pemVkIG9wdGlvbnMuCi0JCSAqLwotCQlpZiAoUEdfUFJPVE9DT0xfTUlOT1IocHJvdG8p ID4gUEdfUFJPVE9DT0xfTUlOT1IoUEdfUFJPVE9DT0xfTEFURVNUKSB8fAotCQkJdW5yZWNv Z25pemVkX3Byb3RvY29sX29wdGlvbnMgIT0gTklMKQotCQkJU2VuZE5lZ290aWF0ZVByb3Rv Y29sVmVyc2lvbih1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9ucyk7Ci0JfQotCi0JLyog Q2hlY2sgYSB1c2VyIG5hbWUgd2FzIGdpdmVuLiAqLwotCWlmIChwb3J0LT51c2VyX25hbWUg PT0gTlVMTCB8fCBwb3J0LT51c2VyX25hbWVbMF0gPT0gJ1wwJykKLQkJZXJlcG9ydChGQVRB TCwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfQVVUSE9SSVpBVElPTl9TUEVDSUZJ Q0FUSU9OKSwKLQkJCQkgZXJybXNnKCJubyBQb3N0Z3JlU1FMIHVzZXIgbmFtZSBzcGVjaWZp ZWQgaW4gc3RhcnR1cCBwYWNrZXQiKSkpOwotCi0JLyogVGhlIGRhdGFiYXNlIGRlZmF1bHRz IHRvIHRoZSB1c2VyIG5hbWUuICovCi0JaWYgKHBvcnQtPmRhdGFiYXNlX25hbWUgPT0gTlVM TCB8fCBwb3J0LT5kYXRhYmFzZV9uYW1lWzBdID09ICdcMCcpCi0JCXBvcnQtPmRhdGFiYXNl X25hbWUgPSBwc3RyZHVwKHBvcnQtPnVzZXJfbmFtZSk7Ci0KLQlpZiAoYW1fd2Fsc2VuZGVy KQotCQlNeUJhY2tlbmRUeXBlID0gQl9XQUxfU0VOREVSOwotCWVsc2UKLQkJTXlCYWNrZW5k VHlwZSA9IEJfQkFDS0VORDsKLQotCS8qCi0JICogTm9ybWFsIHdhbHNlbmRlciBiYWNrZW5k cywgZS5nLiBmb3Igc3RyZWFtaW5nIHJlcGxpY2F0aW9uLCBhcmUgbm90Ci0JICogY29ubmVj dGVkIHRvIGEgcGFydGljdWxhciBkYXRhYmFzZS4gQnV0IHdhbHNlbmRlcnMgdXNlZCBmb3Ig bG9naWNhbAotCSAqIHJlcGxpY2F0aW9uIG5lZWQgdG8gY29ubmVjdCB0byBhIHNwZWNpZmlj IGRhdGFiYXNlLiBXZSBhbGxvdyBzdHJlYW1pbmcKLQkgKiByZXBsaWNhdGlvbiBjb21tYW5k cyB0byBiZSBpc3N1ZWQgZXZlbiBpZiBjb25uZWN0ZWQgdG8gYSBkYXRhYmFzZSBhcyBpdAot CSAqIGNhbiBtYWtlIHNlbnNlIHRvIGZpcnN0IG1ha2UgYSBiYXNlYmFja3VwIGFuZCB0aGVu IHN0cmVhbSBjaGFuZ2VzCi0JICogc3RhcnRpbmcgZnJvbSB0aGF0LgotCSAqLwotCWlmIChh bV93YWxzZW5kZXIgJiYgIWFtX2RiX3dhbHNlbmRlcikKLQkJcG9ydC0+ZGF0YWJhc2VfbmFt ZVswXSA9ICdcMCc7Ci0KLQkvKgotCSAqIERvbmUgZmlsbGluZyB0aGUgUG9ydCBzdHJ1Y3R1 cmUKLQkgKi8KLQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Ci0KLQlyZXR1 cm4gU1RBVFVTX09LOwotfQotCi0vKgotICogU2VuZCBhIE5lZ290aWF0ZVByb3RvY29sVmVy c2lvbiB0byB0aGUgY2xpZW50LiAgVGhpcyBsZXRzIHRoZSBjbGllbnQga25vdwotICogdGhh dCB0aGV5IGhhdmUgcmVxdWVzdGVkIGEgbmV3ZXIgbWlub3IgcHJvdG9jb2wgdmVyc2lvbiB0 aGFuIHdlIGFyZSBhYmxlCi0gKiB0byBzcGVhay4gIFdlJ2xsIHNwZWFrIHRoZSBoaWdoZXN0 IHZlcnNpb24gd2Uga25vdyBhYm91dDsgdGhlIGNsaWVudCBjYW4sCi0gKiBvZiBjb3Vyc2Us IGFiYW5kb24gdGhlIGNvbm5lY3Rpb24gaWYgdGhhdCdzIGEgcHJvYmxlbS4KLSAqCi0gKiBX ZSBhbHNvIGluY2x1ZGUgaW4gdGhlIHJlc3BvbnNlIGEgbGlzdCBvZiBwcm90b2NvbCBvcHRp b25zIHdlIGRpZG4ndAotICogdW5kZXJzdGFuZC4gIFRoaXMgYWxsb3dzIGNsaWVudHMgdG8g aW5jbHVkZSBvcHRpb25hbCBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQKLSAqIGJlIHByZXNlbnQg ZWl0aGVyIGluIG5ld2VyIHByb3RvY29sIHZlcnNpb25zIG9yIHRoaXJkLXBhcnR5IHByb3Rv Y29sCi0gKiBleHRlbnNpb25zIHdpdGhvdXQgZmVhciBvZiBoYXZpbmcgdG8gcmVjb25uZWN0 IGlmIHRob3NlIG9wdGlvbnMgYXJlIG5vdAotICogdW5kZXJzdG9vZCwgd2hpbGUgYXQgdGhl IHNhbWUgdGltZSBtYWtpbmcgY2VydGFpbiB0aGF0IHRoZSBjbGllbnQgaXMgYXdhcmUKLSAq IG9mIHdoaWNoIG9wdGlvbnMgd2VyZSBhY3R1YWxseSBhY2NlcHRlZC4KLSAqLwotc3RhdGlj IHZvaWQKLVNlbmROZWdvdGlhdGVQcm90b2NvbFZlcnNpb24oTGlzdCAqdW5yZWNvZ25pemVk X3Byb3RvY29sX29wdGlvbnMpCi17Ci0JU3RyaW5nSW5mb0RhdGEgYnVmOwotCUxpc3RDZWxs ICAgKmxjOwotCi0JcHFfYmVnaW5tZXNzYWdlKCZidWYsIFBxTXNnX05lZ290aWF0ZVByb3Rv Y29sVmVyc2lvbik7Ci0JcHFfc2VuZGludDMyKCZidWYsIFBHX1BST1RPQ09MX0xBVEVTVCk7 Ci0JcHFfc2VuZGludDMyKCZidWYsIGxpc3RfbGVuZ3RoKHVucmVjb2duaXplZF9wcm90b2Nv bF9vcHRpb25zKSk7Ci0JZm9yZWFjaChsYywgdW5yZWNvZ25pemVkX3Byb3RvY29sX29wdGlv bnMpCi0JCXBxX3NlbmRzdHJpbmcoJmJ1ZiwgbGZpcnN0KGxjKSk7Ci0JcHFfZW5kbWVzc2Fn ZSgmYnVmKTsKLQotCS8qIG5vIG5lZWQgdG8gZmx1c2gsIHNvbWUgb3RoZXIgbWVzc2FnZSB3 aWxsIGZvbGxvdyAqLwotfQotCiAvKgogICogVGhlIGNsaWVudCBoYXMgc2VudCBhIGNhbmNl bCByZXF1ZXN0IHBhY2tldCwgbm90IGEgbm9ybWFsCiAgKiBzdGFydC1hLW5ldy1jb25uZWN0 aW9uIHBhY2tldC4gIFBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBwcm9jZXNzaW5nLgogICogTm90 aGluZyBpcyBzZW50IGJhY2sgdG8gdGhlIGNsaWVudC4KICAqLwotc3RhdGljIHZvaWQKLXBy b2Nlc3NDYW5jZWxSZXF1ZXN0KFBvcnQgKnBvcnQsIHZvaWQgKnBrdCkKK3ZvaWQKK3Byb2Nl c3NDYW5jZWxSZXF1ZXN0KGludCBiYWNrZW5kUElELCBpbnQzMiBjYW5jZWxBdXRoQ29kZSkK IHsKLQlDYW5jZWxSZXF1ZXN0UGFja2V0ICpjYW5jID0gKENhbmNlbFJlcXVlc3RQYWNrZXQg KikgcGt0OwotCWludAkJCWJhY2tlbmRQSUQ7Ci0JaW50MzIJCWNhbmNlbEF1dGhDb2RlOwog CUJhY2tlbmQgICAgKmJwOwogCiAjaWZuZGVmIEVYRUNfQkFDS0VORApAQCAtMjI1NSw5ICsx ODM3LDYgQEAgcHJvY2Vzc0NhbmNlbFJlcXVlc3QoUG9ydCAqcG9ydCwgdm9pZCAqcGt0KQog CWludAkJCWk7CiAjZW5kaWYKIAotCWJhY2tlbmRQSUQgPSAoaW50KSBwZ19udG9oMzIoY2Fu Yy0+YmFja2VuZFBJRCk7Ci0JY2FuY2VsQXV0aENvZGUgPSAoaW50MzIpIHBnX250b2gzMihj YW5jLT5jYW5jZWxBdXRoQ29kZSk7Ci0KIAkvKgogCSAqIFNlZSBpZiB3ZSBoYXZlIGEgbWF0 Y2hpbmcgYmFja2VuZC4gIEluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZSwgd2UgY2FuIG5vCiAJ ICogbG9uZ2VyIGFjY2VzcyB0aGUgcG9zdG1hc3RlcidzIG93biBiYWNrZW5kIGxpc3QsIGFu ZCBtdXN0IHJlbHkgb24gdGhlCkBAIC0zOTA1LDEyICszNDg0LDYgQEAgVGVybWluYXRlQ2hp bGRyZW4oaW50IHNpZ25hbCkKIAkJc2lnbmFsX2NoaWxkKFBnQXJjaFBJRCwgc2lnbmFsKTsK IH0KIAotLyogSW5mb3JtYXRpb24gcGFzc2VkIGZyb20gcG9zdG1hc3RlciB0byBiYWNrZW5k IHByb2Nlc3MgKi8KLXR5cGVkZWYgc3RydWN0IEJhY2tlbmRTdGFydHVwSW5mbwotewotCUNB Q19zdGF0ZQljYW5BY2NlcHRDb25uZWN0aW9uczsKLX0gQmFja2VuZFN0YXJ0dXBJbmZvOwot CiAvKgogICogQmFja2VuZFN0YXJ0dXAgLS0gc3RhcnQgYmFja2VuZCBwcm9jZXNzCiAgKgpA QCAtNDAzNSwzMDIgKzM2MDgsNiBAQCByZXBvcnRfZm9ya19mYWlsdXJlX3RvX2NsaWVudChD bGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBpbnQgZXJybnVtKQogCX0gd2hpbGUgKHJjIDwg MCAmJiBlcnJubyA9PSBFSU5UUik7CiB9CiAKLQotLyoKLSAqIEJhY2tlbmRJbml0aWFsaXpl IC0tIGluaXRpYWxpemUgYW4gaW50ZXJhY3RpdmUgKHBvc3RtYXN0ZXItY2hpbGQpCi0gKgkJ CQliYWNrZW5kIHByb2Nlc3MsIGFuZCBjb2xsZWN0IHRoZSBjbGllbnQncyBzdGFydHVwIHBh Y2tldC4KLSAqCi0gKiByZXR1cm5zOiBub3RoaW5nLiAgV2lsbCBub3QgcmV0dXJuIGF0IGFs bCBpZiB0aGVyZSdzIGFueSBmYWlsdXJlLgotICoKLSAqIE5vdGU6IHRoaXMgY29kZSBkb2Vz IG5vdCBkZXBlbmQgb24gaGF2aW5nIGFueSBhY2Nlc3MgdG8gc2hhcmVkIG1lbW9yeS4KLSAq IEluZGVlZCwgb3VyIGFwcHJvYWNoIHRvIFNJR1RFUk0vdGltZW91dCBoYW5kbGluZyAqcmVx dWlyZXMqIHRoYXQKLSAqIHNoYXJlZCBtZW1vcnkgbm90IGhhdmUgYmVlbiB0b3VjaGVkIHll dDsgc2VlIGNvbW1lbnRzIHdpdGhpbi4KLSAqIEluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZSwg d2UgYXJlIHBoeXNpY2FsbHkgYXR0YWNoZWQgdG8gc2hhcmVkIG1lbW9yeQotICogYnV0IGhh dmUgbm90IHlldCBzZXQgdXAgbW9zdCBvZiBvdXIgbG9jYWwgcG9pbnRlcnMgdG8gc2htZW0g c3RydWN0dXJlcy4KLSAqLwotc3RhdGljIHZvaWQKLUJhY2tlbmRJbml0aWFsaXplKENsaWVu dFNvY2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0ZSBjYWMpCi17Ci0JaW50CQkJc3RhdHVz OwotCWludAkJCXJldDsKLQlQb3J0CSAgICpwb3J0OwotCWNoYXIJCXJlbW90ZV9ob3N0W05J X01BWEhPU1RdOwotCWNoYXIJCXJlbW90ZV9wb3J0W05JX01BWFNFUlZdOwotCVN0cmluZ0lu Zm9EYXRhIHBzX2RhdGE7Ci0JTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwotCi0JLyoKLQkg KiBDcmVhdGUgdGhlIFBvcnQgc3RydWN0dXJlLgotCSAqCi0JICogVGhlIFBvcnQgc3RydWN0 dXJlIGFuZCBhbGwgZGF0YSBzdHJ1Y3R1cmVzIGF0dGFjaGVkIHRvIGl0IGFyZSBhbGxvY2F0 ZWQKLQkgKiBpbiBUb3BNZW1vcnlDb250ZXh0LCBzbyB0aGF0IHRoZXkgc3Vydml2ZSBpbnRv IFBvc3RncmVzTWFpbiBleGVjdXRpb24uCi0JICogV2UgbmVlZCBub3Qgd29ycnkgYWJvdXQg bGVha2luZyB0aGlzIHN0b3JhZ2Ugb24gZmFpbHVyZSwgc2luY2Ugd2UKLQkgKiBhcmVuJ3Qg aW4gdGhlIHBvc3RtYXN0ZXIgcHJvY2VzcyBhbnltb3JlLgotCSAqLwotCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7Ci0JcG9ydCA9IElu aXRDbGllbnRDb25uZWN0aW9uKGNsaWVudF9zb2NrKTsKLQlNeVByb2NQb3J0ID0gcG9ydDsK LQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Ci0KLQkvKiBUZWxsIGZkLmMg YWJvdXQgdGhlIGxvbmctbGl2ZWQgRkQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjbGllbnRfc29j ayAqLwotCVJlc2VydmVFeHRlcm5hbEZEKCk7Ci0KLQkvKgotCSAqIFByZUF1dGhEZWxheSBp cyBhIGRlYnVnZ2luZyBhaWQgZm9yIGludmVzdGlnYXRpbmcgcHJvYmxlbXMgaW4gdGhlCi0J ICogYXV0aGVudGljYXRpb24gY3ljbGU6IGl0IGNhbiBiZSBzZXQgaW4gcG9zdGdyZXNxbC5j b25mIHRvIGFsbG93IHRpbWUgdG8KLQkgKiBhdHRhY2ggdG8gdGhlIG5ld2x5LWZvcmtlZCBi YWNrZW5kIHdpdGggYSBkZWJ1Z2dlci4gIChTZWUgYWxzbwotCSAqIFBvc3RBdXRoRGVsYXks IHdoaWNoIHdlIGFsbG93IGNsaWVudHMgdG8gcGFzcyB0aHJvdWdoIFBHT1BUSU9OUywgYnV0 IGl0Ci0JICogaXMgbm90IGhvbm9yZWQgdW50aWwgYWZ0ZXIgYXV0aGVudGljYXRpb24uKQot CSAqLwotCWlmIChQcmVBdXRoRGVsYXkgPiAwKQotCQlwZ191c2xlZXAoUHJlQXV0aERlbGF5 ICogMTAwMDAwMEwpOwotCi0JLyogVGhpcyBmbGFnIHdpbGwgcmVtYWluIHNldCB1bnRpbCBJ bml0UG9zdGdyZXMgZmluaXNoZXMgYXV0aGVudGljYXRpb24gKi8KLQlDbGllbnRBdXRoSW5Q cm9ncmVzcyA9IHRydWU7CS8qIGxpbWl0IHZpc2liaWxpdHkgb2YgbG9nIG1lc3NhZ2VzICov Ci0KLQkvKiBzZXQgdGhlc2UgdG8gZW1wdHkgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQgYmVm b3JlIHdlIHNldCB0aGVtIHVwICovCi0JcG9ydC0+cmVtb3RlX2hvc3QgPSAiIjsKLQlwb3J0 LT5yZW1vdGVfcG9ydCA9ICIiOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIGxpYnBxIGFuZCBl bmFibGUgcmVwb3J0aW5nIG9mIGVyZXBvcnQgZXJyb3JzIHRvIHRoZSBjbGllbnQuCi0JICog TXVzdCBkbyB0aGlzIG5vdyBiZWNhdXNlIGF1dGhlbnRpY2F0aW9uIHVzZXMgbGlicHEgdG8g c2VuZCBtZXNzYWdlcy4KLQkgKi8KLQlwcV9pbml0KCk7CQkJCQkvKiBpbml0aWFsaXplIGxp YnBxIHRvIHRhbGsgdG8gY2xpZW50ICovCi0Jd2hlcmVUb1NlbmRPdXRwdXQgPSBEZXN0UmVt b3RlOyAvKiBub3cgc2FmZSB0byBlcmVwb3J0IHRvIGNsaWVudCAqLwotCi0JLyoKLQkgKiBX ZSBhcnJhbmdlIHRvIGRvIF9leGl0KDEpIGlmIHdlIHJlY2VpdmUgU0lHVEVSTSBvciB0aW1l b3V0IHdoaWxlIHRyeWluZwotCSAqIHRvIGNvbGxlY3QgdGhlIHN0YXJ0dXAgcGFja2V0OyB3 aGlsZSBTSUdRVUlUIHJlc3VsdHMgaW4gX2V4aXQoMikuCi0JICogT3RoZXJ3aXNlIHRoZSBw b3N0bWFzdGVyIGNhbm5vdCBzaHV0ZG93biB0aGUgZGF0YWJhc2UgRkFTVCBvciBJTU1FRAot CSAqIGNsZWFubHkgaWYgYSBidWdneSBjbGllbnQgZmFpbHMgdG8gc2VuZCB0aGUgcGFja2V0 IHByb21wdGx5LgotCSAqCi0JICogRXhpdGluZyB3aXRoIF9leGl0KDEpIGlzIG9ubHkgcG9z c2libGUgYmVjYXVzZSB3ZSBoYXZlIG5vdCB5ZXQgdG91Y2hlZAotCSAqIHNoYXJlZCBtZW1v cnk7IHRoZXJlZm9yZSBubyBvdXRzaWRlLXRoZS1wcm9jZXNzIHN0YXRlIG5lZWRzIHRvIGdl dAotCSAqIGNsZWFuZWQgdXAuCi0JICovCi0JcHFzaWduYWwoU0lHVEVSTSwgcHJvY2Vzc19z dGFydHVwX3BhY2tldF9kaWUpOwotCS8qIFNJR1FVSVQgaGFuZGxlciB3YXMgYWxyZWFkeSBz ZXQgdXAgYnkgSW5pdFBvc3RtYXN0ZXJDaGlsZCAqLwotCUluaXRpYWxpemVUaW1lb3V0cygp OwkJLyogZXN0YWJsaXNoZXMgU0lHQUxSTSBoYW5kbGVyICovCi0Jc2lncHJvY21hc2soU0lH X1NFVE1BU0ssICZTdGFydHVwQmxvY2tTaWcsIE5VTEwpOwotCi0JLyoKLQkgKiBHZXQgdGhl IHJlbW90ZSBob3N0IG5hbWUgYW5kIHBvcnQgZm9yIGxvZ2dpbmcgYW5kIHN0YXR1cyBkaXNw bGF5LgotCSAqLwotCXJlbW90ZV9ob3N0WzBdID0gJ1wwJzsKLQlyZW1vdGVfcG9ydFswXSA9 ICdcMCc7Ci0JaWYgKChyZXQgPSBwZ19nZXRuYW1laW5mb19hbGwoJnBvcnQtPnJhZGRyLmFk ZHIsIHBvcnQtPnJhZGRyLnNhbGVuLAotCQkJCQkJCQkgIHJlbW90ZV9ob3N0LCBzaXplb2Yo cmVtb3RlX2hvc3QpLAotCQkJCQkJCQkgIHJlbW90ZV9wb3J0LCBzaXplb2YocmVtb3RlX3Bv cnQpLAotCQkJCQkJCQkgIChsb2dfaG9zdG5hbWUgPyAwIDogTklfTlVNRVJJQ0hPU1QpIHwg TklfTlVNRVJJQ1NFUlYpKSAhPSAwKQotCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJKGVycm1z Z19pbnRlcm5hbCgicGdfZ2V0bmFtZWluZm9fYWxsKCkgZmFpbGVkOiAlcyIsCi0JCQkJCQkJ CSBnYWlfc3RyZXJyb3IocmV0KSkpKTsKLQotCS8qCi0JICogU2F2ZSByZW1vdGVfaG9zdCBh bmQgcmVtb3RlX3BvcnQgaW4gcG9ydCBzdHJ1Y3R1cmUgKGFmdGVyIHRoaXMsIHRoZXkKLQkg KiB3aWxsIGFwcGVhciBpbiBsb2dfbGluZV9wcmVmaXggZGF0YSBmb3IgbG9nIG1lc3NhZ2Vz KS4KLQkgKi8KLQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9y eUNvbnRleHQpOwotCXBvcnQtPnJlbW90ZV9ob3N0ID0gcHN0cmR1cChyZW1vdGVfaG9zdCk7 Ci0JcG9ydC0+cmVtb3RlX3BvcnQgPSBwc3RyZHVwKHJlbW90ZV9wb3J0KTsKLQotCS8qIEFu ZCBub3cgd2UgY2FuIGlzc3VlIHRoZSBMb2dfY29ubmVjdGlvbnMgbWVzc2FnZSwgaWYgd2Fu dGVkICovCi0JaWYgKExvZ19jb25uZWN0aW9ucykKLQl7Ci0JCWlmIChyZW1vdGVfcG9ydFsw XSkKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJjb25uZWN0aW9uIHJlY2VpdmVk OiBob3N0PSVzIHBvcnQ9JXMiLAotCQkJCQkJCXJlbW90ZV9ob3N0LAotCQkJCQkJCXJlbW90 ZV9wb3J0KSkpOwotCQllbHNlCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiY29u bmVjdGlvbiByZWNlaXZlZDogaG9zdD0lcyIsCi0JCQkJCQkJcmVtb3RlX2hvc3QpKSk7Ci0J fQotCi0JLyoKLQkgKiBJZiB3ZSBkaWQgYSByZXZlcnNlIGxvb2t1cCB0byBuYW1lLCB3ZSBt aWdodCBhcyB3ZWxsIHNhdmUgdGhlIHJlc3VsdHMKLQkgKiByYXRoZXIgdGhhbiBwb3NzaWJs eSByZXBlYXRpbmcgdGhlIGxvb2t1cCBkdXJpbmcgYXV0aGVudGljYXRpb24uCi0JICoKLQkg KiBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBzcGVjaWZ5IE5JX05BTUVSRVFEIGFib3Zl LCBiZWNhdXNlIHRoZW4gd2UnZAotCSAqIGdldCBub3RoaW5nIHVzZWZ1bCBmb3IgYSBjbGll bnQgd2l0aG91dCBhbiByRE5TIGVudHJ5LiAgVGhlcmVmb3JlLCB3ZQotCSAqIG11c3QgY2hl Y2sgd2hldGhlciB3ZSBnb3QgYSBudW1lcmljIElQdjQgb3IgSVB2NiBhZGRyZXNzLCBhbmQg bm90IHNhdmUKLQkgKiBpdCBpbnRvIHJlbW90ZV9ob3N0bmFtZSBpZiBzby4gIChUaGlzIHRl c3QgaXMgY29uc2VydmF0aXZlIGFuZCBtaWdodAotCSAqIHNvbWV0aW1lcyBjbGFzc2lmeSBh IGhvc3RuYW1lIGFzIG51bWVyaWMsIGJ1dCBhbiBlcnJvciBpbiB0aGF0Ci0JICogZGlyZWN0 aW9uIGlzIHNhZmU7IGl0IG9ubHkgcmVzdWx0cyBpbiBhIHBvc3NpYmxlIGV4dHJhIGxvb2t1 cC4pCi0JICovCi0JaWYgKGxvZ19ob3N0bmFtZSAmJgotCQlyZXQgPT0gMCAmJgotCQlzdHJz cG4ocmVtb3RlX2hvc3QsICIwMTIzNDU2Nzg5LiIpIDwgc3RybGVuKHJlbW90ZV9ob3N0KSAm JgotCQlzdHJzcG4ocmVtb3RlX2hvc3QsICIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmOiIpIDwg c3RybGVuKHJlbW90ZV9ob3N0KSkKLQkJcG9ydC0+cmVtb3RlX2hvc3RuYW1lID0gcHN0cmR1 cChyZW1vdGVfaG9zdCk7Ci0JTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwot Ci0JLyoKLQkgKiBSZWFkeSB0byBiZWdpbiBjbGllbnQgaW50ZXJhY3Rpb24uICBXZSB3aWxs IGdpdmUgdXAgYW5kIF9leGl0KDEpIGFmdGVyCi0JICogYSB0aW1lIGRlbGF5LCBzbyB0aGF0 IGEgYnJva2VuIGNsaWVudCBjYW4ndCBob2cgYSBjb25uZWN0aW9uCi0JICogaW5kZWZpbml0 ZWx5LiAgUHJlQXV0aERlbGF5IGFuZCBhbnkgRE5TIGludGVyYWN0aW9ucyBhYm92ZSBkb24n dCBjb3VudAotCSAqIGFnYWluc3QgdGhlIHRpbWUgbGltaXQuCi0JICoKLQkgKiBOb3RlOiBB dXRoZW50aWNhdGlvblRpbWVvdXQgaXMgYXBwbGllZCBoZXJlIHdoaWxlIHdhaXRpbmcgZm9y IHRoZQotCSAqIHN0YXJ0dXAgcGFja2V0LCBhbmQgdGhlbiBhZ2FpbiBpbiBJbml0UG9zdGdy ZXMgZm9yIHRoZSBkdXJhdGlvbiBvZiBhbnkKLQkgKiBhdXRoZW50aWNhdGlvbiBvcGVyYXRp b25zLiAgU28gYSBob3N0aWxlIGNsaWVudCBjb3VsZCB0aWUgdXAgdGhlCi0JICogcHJvY2Vz cyBmb3IgbmVhcmx5IHR3aWNlIEF1dGhlbnRpY2F0aW9uVGltZW91dCBiZWZvcmUgd2Uga2lj ayBoaW0gb2ZmLgotCSAqCi0JICogTm90ZTogYmVjYXVzZSBQb3N0Z3Jlc01haW4gd2lsbCBj YWxsIEluaXRpYWxpemVUaW1lb3V0cyBhZ2FpbiwgdGhlCi0JICogcmVnaXN0cmF0aW9uIG9m IFNUQVJUVVBfUEFDS0VUX1RJTUVPVVQgd2lsbCBiZSBsb3N0LiAgVGhpcyBpcyBva2F5Ci0J ICogc2luY2Ugd2UgbmV2ZXIgdXNlIGl0IGFnYWluIGFmdGVyIHRoaXMgZnVuY3Rpb24uCi0J ICovCi0JUmVnaXN0ZXJUaW1lb3V0KFNUQVJUVVBfUEFDS0VUX1RJTUVPVVQsIFN0YXJ0dXBQ YWNrZXRUaW1lb3V0SGFuZGxlcik7Ci0JZW5hYmxlX3RpbWVvdXRfYWZ0ZXIoU1RBUlRVUF9Q QUNLRVRfVElNRU9VVCwgQXV0aGVudGljYXRpb25UaW1lb3V0ICogMTAwMCk7Ci0KLQkvKgot CSAqIFJlY2VpdmUgdGhlIHN0YXJ0dXAgcGFja2V0ICh3aGljaCBtaWdodCB0dXJuIG91dCB0 byBiZSBhIGNhbmNlbCByZXF1ZXN0Ci0JICogcGFja2V0KS4KLQkgKi8KLQlzdGF0dXMgPSBQ cm9jZXNzU3RhcnR1cFBhY2tldChwb3J0LCBmYWxzZSwgZmFsc2UpOwotCi0JLyoKLQkgKiBJ ZiB3ZSdyZSBnb2luZyB0byByZWplY3QgdGhlIGNvbm5lY3Rpb24gZHVlIHRvIGRhdGFiYXNl IHN0YXRlLCBzYXkgc28KLQkgKiBub3cgaW5zdGVhZCBvZiB3YXN0aW5nIGN5Y2xlcyBvbiBh biBhdXRoZW50aWNhdGlvbiBleGNoYW5nZS4gKFRoaXMgYWxzbwotCSAqIGFsbG93cyBhIHBn X3BpbmcgdXRpbGl0eSB0byBiZSB3cml0dGVuLikKLQkgKi8KLQlzd2l0Y2ggKGNhYykKLQl7 Ci0JCWNhc2UgQ0FDX1NUQVJUVVA6Ci0JCQllcmVwb3J0KEZBVEFMLAotCQkJCQkoZXJyY29k ZShFUlJDT0RFX0NBTk5PVF9DT05ORUNUX05PVyksCi0JCQkJCSBlcnJtc2coInRoZSBkYXRh YmFzZSBzeXN0ZW0gaXMgc3RhcnRpbmcgdXAiKSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0FD X05PVENPTlNJU1RFTlQ6Ci0JCQlpZiAoRW5hYmxlSG90U3RhbmRieSkKLQkJCQllcmVwb3J0 KEZBVEFMLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09OTkVDVF9OT1cpLAot CQkJCQkJIGVycm1zZygidGhlIGRhdGFiYXNlIHN5c3RlbSBpcyBub3QgeWV0IGFjY2VwdGlu ZyBjb25uZWN0aW9ucyIpLAotCQkJCQkJIGVycmRldGFpbCgiQ29uc2lzdGVudCByZWNvdmVy eSBzdGF0ZSBoYXMgbm90IGJlZW4geWV0IHJlYWNoZWQuIikpKTsKLQkJCWVsc2UKLQkJCQll cmVwb3J0KEZBVEFMLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09OTkVDVF9O T1cpLAotCQkJCQkJIGVycm1zZygidGhlIGRhdGFiYXNlIHN5c3RlbSBpcyBub3QgYWNjZXB0 aW5nIGNvbm5lY3Rpb25zIiksCi0JCQkJCQkgZXJyZGV0YWlsKCJIb3Qgc3RhbmRieSBtb2Rl IGlzIGRpc2FibGVkLiIpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBDQUNfU0hVVERPV046Ci0J CQllcmVwb3J0KEZBVEFMLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT05ORUNU X05PVyksCi0JCQkJCSBlcnJtc2coInRoZSBkYXRhYmFzZSBzeXN0ZW0gaXMgc2h1dHRpbmcg ZG93biIpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBDQUNfUkVDT1ZFUlk6Ci0JCQllcmVwb3J0 KEZBVEFMLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT05ORUNUX05PVyksCi0J CQkJCSBlcnJtc2coInRoZSBkYXRhYmFzZSBzeXN0ZW0gaXMgaW4gcmVjb3ZlcnkgbW9kZSIp KSk7Ci0JCQlicmVhazsKLQkJY2FzZSBDQUNfVE9PTUFOWToKLQkJCWVyZXBvcnQoRkFUQUws Ci0JCQkJCShlcnJjb2RlKEVSUkNPREVfVE9PX01BTllfQ09OTkVDVElPTlMpLAotCQkJCQkg ZXJybXNnKCJzb3JyeSwgdG9vIG1hbnkgY2xpZW50cyBhbHJlYWR5IikpKTsKLQkJCWJyZWFr OwotCQljYXNlIENBQ19PSzoKLQkJCWJyZWFrOwotCX0KLQotCS8qCi0JICogRGlzYWJsZSB0 aGUgdGltZW91dCwgYW5kIHByZXZlbnQgU0lHVEVSTSBhZ2Fpbi4KLQkgKi8KLQlkaXNhYmxl X3RpbWVvdXQoU1RBUlRVUF9QQUNLRVRfVElNRU9VVCwgZmFsc2UpOwotCXNpZ3Byb2NtYXNr KFNJR19TRVRNQVNLLCAmQmxvY2tTaWcsIE5VTEwpOwotCi0JLyoKLQkgKiBBcyBhIHNhZmV0 eSBjaGVjayB0aGF0IG5vdGhpbmcgaW4gc3RhcnR1cCBoYXMgeWV0IHBlcmZvcm1lZAotCSAq IHNoYXJlZC1tZW1vcnkgbW9kaWZpY2F0aW9ucyB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgdW5k b25lIGlmIHdlIGhhZAotCSAqIGV4aXRlZCB0aHJvdWdoIFNJR1RFUk0gb3IgdGltZW91dCBh Ym92ZSwgY2hlY2sgdGhhdCBubyBvbl9zaG1lbV9leGl0Ci0JICogaGFuZGxlcnMgaGF2ZSBi ZWVuIHJlZ2lzdGVyZWQgeWV0LiAgKFRoaXMgaXNuJ3QgdGVycmlibHkgYnVsbGV0cHJvb2Ys Ci0JICogc2luY2Ugc29tZW9uZSBtaWdodCBtaXN1c2UgYW4gb25fcHJvY19leGl0IGhhbmRs ZXIgZm9yIHNobWVtIGNsZWFudXAsCi0JICogYnV0IGl0J3MgYSBjaGVhcCBhbmQgaGVscGZ1 bCBjaGVjay4gIFdlIGNhbm5vdCBkaXNhbGxvdyBvbl9wcm9jX2V4aXQKLQkgKiBoYW5kbGVy cyB1bmZvcnR1bmF0ZWx5LCBzaW5jZSBwcV9pbml0KCkgYWxyZWFkeSByZWdpc3RlcmVkIG9u ZS4pCi0JICovCi0JY2hlY2tfb25fc2htZW1fZXhpdF9saXN0c19hcmVfZW1wdHkoKTsKLQot CS8qCi0JICogU3RvcCBoZXJlIGlmIGl0IHdhcyBiYWQgb3IgYSBjYW5jZWwgcGFja2V0LiAg UHJvY2Vzc1N0YXJ0dXBQYWNrZXQKLQkgKiBhbHJlYWR5IGRpZCBhbnkgYXBwcm9wcmlhdGUg ZXJyb3IgcmVwb3J0aW5nLgotCSAqLwotCWlmIChzdGF0dXMgIT0gU1RBVFVTX09LKQotCQlw cm9jX2V4aXQoMCk7Ci0KLQkvKgotCSAqIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHVzZXIgYW5k IGRhdGFiYXNlIG5hbWUsIHdlIGNhbiBzZXQgdGhlIHByb2Nlc3MKLQkgKiB0aXRsZSBmb3Ig cHMuICBJdCdzIGdvb2QgdG8gZG8gdGhpcyBhcyBlYXJseSBhcyBwb3NzaWJsZSBpbiBzdGFy dHVwLgotCSAqLwotCWluaXRTdHJpbmdJbmZvKCZwc19kYXRhKTsKLQlpZiAoYW1fd2Fsc2Vu ZGVyKQotCQlhcHBlbmRTdHJpbmdJbmZvKCZwc19kYXRhLCAiJXMgIiwgR2V0QmFja2VuZFR5 cGVEZXNjKEJfV0FMX1NFTkRFUikpOwotCWFwcGVuZFN0cmluZ0luZm8oJnBzX2RhdGEsICIl cyAiLCBwb3J0LT51c2VyX25hbWUpOwotCWlmIChwb3J0LT5kYXRhYmFzZV9uYW1lWzBdICE9 ICdcMCcpCi0JCWFwcGVuZFN0cmluZ0luZm8oJnBzX2RhdGEsICIlcyAiLCBwb3J0LT5kYXRh YmFzZV9uYW1lKTsKLQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZwc19kYXRhLCBwb3J0LT5y ZW1vdGVfaG9zdCk7Ci0JaWYgKHBvcnQtPnJlbW90ZV9wb3J0WzBdICE9ICdcMCcpCi0JCWFw cGVuZFN0cmluZ0luZm8oJnBzX2RhdGEsICIoJXMpIiwgcG9ydC0+cmVtb3RlX3BvcnQpOwot Ci0JaW5pdF9wc19kaXNwbGF5KHBzX2RhdGEuZGF0YSk7Ci0JcGZyZWUocHNfZGF0YS5kYXRh KTsKLQotCXNldF9wc19kaXNwbGF5KCJpbml0aWFsaXppbmciKTsKLX0KLQotdm9pZAotQmFj a2VuZE1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikK LXsKLQlCYWNrZW5kU3RhcnR1cEluZm8gKmluZm8gPSAoQmFja2VuZFN0YXJ0dXBJbmZvICop IHN0YXJ0dXBfZGF0YTsKLQotCUFzc2VydChzdGFydHVwX2RhdGFfbGVuID09IHNpemVvZihC YWNrZW5kU3RhcnR1cEluZm8pKTsKLQlBc3NlcnQoTXlDbGllbnRTb2NrZXQgIT0gTlVMTCk7 Ci0KLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQotCS8qCi0JICogTmVlZCB0byByZWluaXRpYWxp emUgdGhlIFNTTCBsaWJyYXJ5IGluIHRoZSBiYWNrZW5kLCBzaW5jZSB0aGUgY29udGV4dAot CSAqIHN0cnVjdHVyZXMgY29udGFpbiBmdW5jdGlvbiBwb2ludGVycyBhbmQgY2Fubm90IGJl IHBhc3NlZCB0aHJvdWdoIHRoZQotCSAqIHBhcmFtZXRlciBmaWxlLgotCSAqCi0JICogSWYg Zm9yIHNvbWUgcmVhc29uIHJlbG9hZCBmYWlscyAobWF5YmUgdGhlIHVzZXIgaW5zdGFsbGVk IGJyb2tlbiBrZXkKLQkgKiBmaWxlcyksIHNvbGRpZXIgb24gd2l0aG91dCBTU0w7IHRoYXQn cyBiZXR0ZXIgdGhhbiBhbGwgY29ubmVjdGlvbnMKLQkgKiBiZWNvbWluZyBpbXBvc3NpYmxl LgotCSAqCi0JICogWFhYIHNob3VsZCB3ZSBkbyB0aGlzIGluIGFsbCBjaGlsZCBwcm9jZXNz ZXM/ICBGb3IgdGhlIG1vbWVudCBpdCdzCi0JICogZW5vdWdoIHRvIGRvIGl0IGluIGJhY2tl bmQgY2hpbGRyZW4uCi0JICovCi0jaWZkZWYgVVNFX1NTTAotCWlmIChFbmFibGVTU0wpCi0J ewotCQlpZiAoc2VjdXJlX2luaXRpYWxpemUoZmFsc2UpID09IDApCi0JCQlMb2FkZWRTU0wg PSB0cnVlOwotCQllbHNlCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiU1NMIGNv bmZpZ3VyYXRpb24gY291bGQgbm90IGJlIGxvYWRlZCBpbiBjaGlsZCBwcm9jZXNzIikpKTsK LQl9Ci0jZW5kaWYKLSNlbmRpZgotCi0JLyogUGVyZm9ybSBhZGRpdGlvbmFsIGluaXRpYWxp emF0aW9uIGFuZCBjb2xsZWN0IHN0YXJ0dXAgcGFja2V0ICovCi0JQmFja2VuZEluaXRpYWxp emUoTXlDbGllbnRTb2NrZXQsIGluZm8tPmNhbkFjY2VwdENvbm5lY3Rpb25zKTsKLQotCS8q Ci0JICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFyZWQgbWVt b3J5LiAgV2UgbXVzdCBkbyB0aGlzCi0JICogYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2NrcyBv ciBhY2Nlc3MgYW55IHNoYXJlZCBtZW1vcnkuCi0JICovCi0JSW5pdFByb2Nlc3MoKTsKLQot CS8qCi0JICogTWFrZSBzdXJlIHdlIGFyZW4ndCBpbiBQb3N0bWFzdGVyQ29udGV4dCBhbnlt b3JlLiAgKFdlIGNhbid0IGRlbGV0ZSBpdAotCSAqIGp1c3QgeWV0LCB0aG91Z2gsIGJlY2F1 c2UgSW5pdFBvc3RncmVzIHdpbGwgbmVlZCB0aGUgSEJBIGRhdGEuKQotCSAqLwotCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKLQotCVBvc3RncmVzTWFpbihN eVByb2NQb3J0LT5kYXRhYmFzZV9uYW1lLCBNeVByb2NQb3J0LT51c2VyX25hbWUpOwotfQot Ci0KIC8qCiAgKiBFeGl0UG9zdG1hc3RlciAtLSBjbGVhbnVwCiAgKgpAQCAtNDUxOSwyNSAr Mzc5Niw2IEBAIHByb2Nlc3NfcG1fcG1zaWduYWwodm9pZCkKIAl9CiB9CiAKLS8qCi0gKiBT SUdURVJNIHdoaWxlIHByb2Nlc3Npbmcgc3RhcnR1cCBwYWNrZXQuCi0gKgotICogUnVubmlu ZyBwcm9jX2V4aXQoKSBmcm9tIGEgc2lnbmFsIGhhbmRsZXIgd291bGQgYmUgcXVpdGUgdW5z YWZlLgotICogSG93ZXZlciwgc2luY2Ugd2UgaGF2ZSBub3QgeWV0IHRvdWNoZWQgc2hhcmVk IG1lbW9yeSwgd2UgY2FuIGp1c3QKLSAqIHB1bGwgdGhlIHBsdWcgYW5kIGV4aXQgd2l0aG91 dCBydW5uaW5nIGFueSBhdGV4aXQgaGFuZGxlcnMuCi0gKgotICogT25lIG1pZ2h0IGJlIHRl bXB0ZWQgdG8gdHJ5IHRvIHNlbmQgYSBtZXNzYWdlLCBvciBsb2cgb25lLCBpbmRpY2F0aW5n Ci0gKiB3aHkgd2UgYXJlIGRpc2Nvbm5lY3RpbmcuICBIb3dldmVyLCB0aGF0IHdvdWxkIGJl IHF1aXRlIHVuc2FmZSBpbiBpdHNlbGYuCi0gKiBBbHNvLCBpdCBzZWVtcyB1bmRlc2lyYWJs ZSB0byBwcm92aWRlIGNsdWVzIGFib3V0IHRoZSBkYXRhYmFzZSdzIHN0YXRlCi0gKiB0byBh IGNsaWVudCB0aGF0IGhhcyBub3QgeWV0IGNvbXBsZXRlZCBhdXRoZW50aWNhdGlvbiwgb3Ig ZXZlbiBzZW50IHVzCi0gKiBhIHN0YXJ0dXAgcGFja2V0LgotICovCi1zdGF0aWMgdm9pZAot cHJvY2Vzc19zdGFydHVwX3BhY2tldF9kaWUoU0lHTkFMX0FSR1MpCi17Ci0JX2V4aXQoMSk7 Ci19Ci0KIC8qCiAgKiBEdW1teSBzaWduYWwgaGFuZGxlcgogICoKQEAgLTQ1NTIsMTcgKzM4 MTAsNiBAQCBkdW1teV9oYW5kbGVyKFNJR05BTF9BUkdTKQogewogfQogCi0vKgotICogVGlt ZW91dCB3aGlsZSBwcm9jZXNzaW5nIHN0YXJ0dXAgcGFja2V0LgotICogQXMgZm9yIHByb2Nl c3Nfc3RhcnR1cF9wYWNrZXRfZGllKCksIHdlIGV4aXQgdmlhIF9leGl0KDEpLgotICovCi1z dGF0aWMgdm9pZAotU3RhcnR1cFBhY2tldFRpbWVvdXRIYW5kbGVyKHZvaWQpCi17Ci0JX2V4 aXQoMSk7Ci19Ci0KLQogLyoKICAqIEdlbmVyYXRlIGEgcmFuZG9tIGNhbmNlbCBrZXkuCiAg Ki8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvTWFrZWZpbGUgYi9zcmMvYmFja2Vu ZC90Y29wL01ha2VmaWxlCmluZGV4IGY2NjJhN2RkMWNmLi45MTE5NjY3MzQ1YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC90Y29w L01ha2VmaWxlCkBAIC0xMyw2ICsxMyw3IEBAIHRvcF9idWlsZGRpciA9IC4uLy4uLy4uCiBp bmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiAKIE9CSlMgPSBc CisJYmFja2VuZF9zdGFydHVwLm8gXAogCWNtZHRhZy5vIFwKIAlkZXN0Lm8gXAogCWZhc3Rw YXRoLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAu YyBiL3NyYy9iYWNrZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVwLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM1ODhjMjRjMjk0Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvdGNvcC9iYWNrZW5kX3N0YXJ0dXAuYwpAQCAtMCwwICsxLDc3NyBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYmFja2VuZF9zdGFydHVwLmMKKyAq CSAgQmFja2VuZCBzdGFydHVwIGNvZGUKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBv cnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNr ZW5kL3Rjb3AvYmFja2VuZF9zdGFydHVwLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgor CisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJjb21tb24vaXAuaCIKKyNp bmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAibGlicHEvbGlicHEuaCIKKyNp bmNsdWRlICJsaWJwcS9saWJwcS1iZS5oIgorI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0Lmgi CisjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIK KyNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKKyNpbmNsdWRlICJyZXBsaWNh dGlvbi93YWxzZW5kZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKKyNpbmNsdWRlICJ0 Y29wL2JhY2tlbmRfc3RhcnR1cC5oIgorI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgi CisjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZW91 dC5oIgorCitzdGF0aWMgdm9pZCBCYWNrZW5kSW5pdGlhbGl6ZShDbGllbnRTb2NrZXQgKmNs aWVudF9zb2NrLCBDQUNfc3RhdGUgY2FjKTsKK3N0YXRpYyBpbnQJUHJvY2Vzc1N0YXJ0dXBQ YWNrZXQoUG9ydCAqcG9ydCwgYm9vbCBzc2xfZG9uZSwgYm9vbCBnc3NfZG9uZSk7CitzdGF0 aWMgdm9pZCBTZW5kTmVnb3RpYXRlUHJvdG9jb2xWZXJzaW9uKExpc3QgKnVucmVjb2duaXpl ZF9wcm90b2NvbF9vcHRpb25zKTsKK3N0YXRpYyB2b2lkIHByb2Nlc3Nfc3RhcnR1cF9wYWNr ZXRfZGllKFNJR05BTF9BUkdTKTsKK3N0YXRpYyB2b2lkIFN0YXJ0dXBQYWNrZXRUaW1lb3V0 SGFuZGxlcih2b2lkKTsKKworLyoKKyAqIEVudHJ5IHBvaW50IGZvciBhIG5ldyBiYWNrZW5k IHByb2Nlc3MuCisgKgorICogSW5pdGlhbGl6ZSB0aGUgY29ubmVjdGlvbiwgcmVhZCB0aGUg c3RhcnR1cCBwYWNrZXQuCisgKi8KK3ZvaWQKK0JhY2tlbmRNYWluKGNoYXIgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCit7CisJQmFja2VuZFN0YXJ0dXBJbmZv ICppbmZvID0gKEJhY2tlbmRTdGFydHVwSW5mbyAqKSBzdGFydHVwX2RhdGE7CisKKwlBc3Nl cnQoc3RhcnR1cF9kYXRhX2xlbiA9PSBzaXplb2YoQmFja2VuZFN0YXJ0dXBJbmZvKSk7CisJ QXNzZXJ0KE15Q2xpZW50U29ja2V0ICE9IE5VTEwpOworCisjaWZkZWYgRVhFQ19CQUNLRU5E CisKKwkvKgorCSAqIE5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSBTU0wgbGlicmFyeSBpbiB0 aGUgYmFja2VuZCwgc2luY2UgdGhlIGNvbnRleHQKKwkgKiBzdHJ1Y3R1cmVzIGNvbnRhaW4g ZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGNhbm5vdCBiZSBwYXNzZWQgdGhyb3VnaCB0aGUKKwkg KiBwYXJhbWV0ZXIgZmlsZS4KKwkgKgorCSAqIElmIGZvciBzb21lIHJlYXNvbiByZWxvYWQg ZmFpbHMgKG1heWJlIHRoZSB1c2VyIGluc3RhbGxlZCBicm9rZW4ga2V5CisJICogZmlsZXMp LCBzb2xkaWVyIG9uIHdpdGhvdXQgU1NMOyB0aGF0J3MgYmV0dGVyIHRoYW4gYWxsIGNvbm5l Y3Rpb25zCisJICogYmVjb21pbmcgaW1wb3NzaWJsZS4KKwkgKgorCSAqIFhYWCBzaG91bGQg d2UgZG8gdGhpcyBpbiBhbGwgY2hpbGQgcHJvY2Vzc2VzPyAgRm9yIHRoZSBtb21lbnQgaXQn cworCSAqIGVub3VnaCB0byBkbyBpdCBpbiBiYWNrZW5kIGNoaWxkcmVuLiBYWFggZ29vZCBx dWVzdGlvbiBpbmRlZWQKKwkgKi8KKyNpZmRlZiBVU0VfU1NMCisJaWYgKEVuYWJsZVNTTCkK Kwl7CisJCWlmIChzZWN1cmVfaW5pdGlhbGl6ZShmYWxzZSkgPT0gMCkKKwkJCUxvYWRlZFNT TCA9IHRydWU7CisJCWVsc2UKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnKCJTU0wg Y29uZmlndXJhdGlvbiBjb3VsZCBub3QgYmUgbG9hZGVkIGluIGNoaWxkIHByb2Nlc3MiKSkp OworCX0KKyNlbmRpZgorI2VuZGlmCisKKwkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlh bGl6YXRpb24gYW5kIGNvbGxlY3Qgc3RhcnR1cCBwYWNrZXQgKi8KKwlCYWNrZW5kSW5pdGlh bGl6ZShNeUNsaWVudFNvY2tldCwgaW5mby0+Y2FuQWNjZXB0Q29ubmVjdGlvbnMpOworCisJ LyoKKwkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBt ZW1vcnkuICBXZSBtdXN0IGRvIHRoaXMKKwkgKiBiZWZvcmUgd2UgY2FuIHVzZSBMV0xvY2tz IG9yIGFjY2VzcyBhbnkgc2hhcmVkIG1lbW9yeS4KKwkgKi8KKwlJbml0UHJvY2VzcygpOwor CisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgYXJlbid0IGluIFBvc3RtYXN0ZXJDb250ZXh0IGFu eW1vcmUuICAoV2UgY2FuJ3QgZGVsZXRlIGl0CisJICoganVzdCB5ZXQsIHRob3VnaCwgYmVj YXVzZSBJbml0UG9zdGdyZXMgd2lsbCBuZWVkIHRoZSBIQkEgZGF0YS4pCisJICovCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJUG9zdGdyZXNNYWlu KE15UHJvY1BvcnQtPmRhdGFiYXNlX25hbWUsIE15UHJvY1BvcnQtPnVzZXJfbmFtZSk7Cit9 CisKKworLyoKKyAqIEJhY2tlbmRJbml0aWFsaXplIC0tIGluaXRpYWxpemUgYW4gaW50ZXJh Y3RpdmUgKHBvc3RtYXN0ZXItY2hpbGQpCisgKgkJCQliYWNrZW5kIHByb2Nlc3MsIGFuZCBj b2xsZWN0IHRoZSBjbGllbnQncyBzdGFydHVwIHBhY2tldC4KKyAqCisgKiByZXR1cm5zOiBu b3RoaW5nLiAgV2lsbCBub3QgcmV0dXJuIGF0IGFsbCBpZiB0aGVyZSdzIGFueSBmYWlsdXJl LgorICoKKyAqIE5vdGU6IHRoaXMgY29kZSBkb2VzIG5vdCBkZXBlbmQgb24gaGF2aW5nIGFu eSBhY2Nlc3MgdG8gc2hhcmVkIG1lbW9yeS4KKyAqIEluZGVlZCwgb3VyIGFwcHJvYWNoIHRv IFNJR1RFUk0vdGltZW91dCBoYW5kbGluZyAqcmVxdWlyZXMqIHRoYXQKKyAqIHNoYXJlZCBt ZW1vcnkgbm90IGhhdmUgYmVlbiB0b3VjaGVkIHlldDsgc2VlIGNvbW1lbnRzIHdpdGhpbi4K KyAqIEluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZSwgd2UgYXJlIHBoeXNpY2FsbHkgYXR0YWNo ZWQgdG8gc2hhcmVkIG1lbW9yeQorICogYnV0IGhhdmUgbm90IHlldCBzZXQgdXAgbW9zdCBv ZiBvdXIgbG9jYWwgcG9pbnRlcnMgdG8gc2htZW0gc3RydWN0dXJlcy4KKyAqLworc3RhdGlj IHZvaWQKK0JhY2tlbmRJbml0aWFsaXplKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIENB Q19zdGF0ZSBjYWMpCit7CisJaW50CQkJc3RhdHVzOworCWludAkJCXJldDsKKwlQb3J0CSAg ICpwb3J0OworCWNoYXIJCXJlbW90ZV9ob3N0W05JX01BWEhPU1RdOworCWNoYXIJCXJlbW90 ZV9wb3J0W05JX01BWFNFUlZdOworCVN0cmluZ0luZm9EYXRhIHBzX2RhdGE7CisJTWVtb3J5 Q29udGV4dCBvbGRjb250ZXh0OworCisJLyoKKwkgKiBDcmVhdGUgdGhlIFBvcnQgc3RydWN0 dXJlLgorCSAqCisJICogVGhlIFBvcnQgc3RydWN0dXJlIGFuZCBhbGwgZGF0YSBzdHJ1Y3R1 cmVzIGF0dGFjaGVkIHRvIGl0IGFyZSBhbGxvY2F0ZWQKKwkgKiBpbiBUb3BNZW1vcnlDb250 ZXh0LCBzbyB0aGF0IHRoZXkgc3Vydml2ZSBpbnRvIFBvc3RncmVzTWFpbiBleGVjdXRpb24u CisJICogV2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgbGVha2luZyB0aGlzIHN0b3JhZ2Ugb24g ZmFpbHVyZSwgc2luY2Ugd2UKKwkgKiBhcmVuJ3QgaW4gdGhlIHBvc3RtYXN0ZXIgcHJvY2Vz cyBhbnltb3JlLgorCSAqLworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o VG9wTWVtb3J5Q29udGV4dCk7CisJcG9ydCA9IEluaXRDbGllbnRDb25uZWN0aW9uKGNsaWVu dF9zb2NrKTsKKwlNeVByb2NQb3J0ID0gcG9ydDsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY29udGV4dCk7CisKKwkvKiBUZWxsIGZkLmMgYWJvdXQgdGhlIGxvbmctbGl2ZWQgRkQg YXNzb2NpYXRlZCB3aXRoIHRoZSBjbGllbnRfc29jayAqLworCVJlc2VydmVFeHRlcm5hbEZE KCk7CisKKwkvKgorCSAqIFByZUF1dGhEZWxheSBpcyBhIGRlYnVnZ2luZyBhaWQgZm9yIGlu dmVzdGlnYXRpbmcgcHJvYmxlbXMgaW4gdGhlCisJICogYXV0aGVudGljYXRpb24gY3ljbGU6 IGl0IGNhbiBiZSBzZXQgaW4gcG9zdGdyZXNxbC5jb25mIHRvIGFsbG93IHRpbWUgdG8KKwkg KiBhdHRhY2ggdG8gdGhlIG5ld2x5LWZvcmtlZCBiYWNrZW5kIHdpdGggYSBkZWJ1Z2dlci4g IChTZWUgYWxzbworCSAqIFBvc3RBdXRoRGVsYXksIHdoaWNoIHdlIGFsbG93IGNsaWVudHMg dG8gcGFzcyB0aHJvdWdoIFBHT1BUSU9OUywgYnV0IGl0CisJICogaXMgbm90IGhvbm9yZWQg dW50aWwgYWZ0ZXIgYXV0aGVudGljYXRpb24uKQorCSAqLworCWlmIChQcmVBdXRoRGVsYXkg PiAwKQorCQlwZ191c2xlZXAoUHJlQXV0aERlbGF5ICogMTAwMDAwMEwpOworCisJLyogVGhp cyBmbGFnIHdpbGwgcmVtYWluIHNldCB1bnRpbCBJbml0UG9zdGdyZXMgZmluaXNoZXMgYXV0 aGVudGljYXRpb24gKi8KKwlDbGllbnRBdXRoSW5Qcm9ncmVzcyA9IHRydWU7CS8qIGxpbWl0 IHZpc2liaWxpdHkgb2YgbG9nIG1lc3NhZ2VzICovCisKKwkvKiBzZXQgdGhlc2UgdG8gZW1w dHkgaW4gY2FzZSB0aGV5IGFyZSBuZWVkZWQgYmVmb3JlIHdlIHNldCB0aGVtIHVwICovCisJ cG9ydC0+cmVtb3RlX2hvc3QgPSAiIjsKKwlwb3J0LT5yZW1vdGVfcG9ydCA9ICIiOworCisJ LyoKKwkgKiBJbml0aWFsaXplIGxpYnBxIGFuZCBlbmFibGUgcmVwb3J0aW5nIG9mIGVyZXBv cnQgZXJyb3JzIHRvIHRoZSBjbGllbnQuCisJICogTXVzdCBkbyB0aGlzIG5vdyBiZWNhdXNl IGF1dGhlbnRpY2F0aW9uIHVzZXMgbGlicHEgdG8gc2VuZCBtZXNzYWdlcy4KKwkgKi8KKwlw cV9pbml0KCk7CQkJCQkvKiBpbml0aWFsaXplIGxpYnBxIHRvIHRhbGsgdG8gY2xpZW50ICov CisJd2hlcmVUb1NlbmRPdXRwdXQgPSBEZXN0UmVtb3RlOyAvKiBub3cgc2FmZSB0byBlcmVw b3J0IHRvIGNsaWVudCAqLworCisJLyoKKwkgKiBXZSBhcnJhbmdlIHRvIGRvIF9leGl0KDEp IGlmIHdlIHJlY2VpdmUgU0lHVEVSTSBvciB0aW1lb3V0IHdoaWxlIHRyeWluZworCSAqIHRv IGNvbGxlY3QgdGhlIHN0YXJ0dXAgcGFja2V0OyB3aGlsZSBTSUdRVUlUIHJlc3VsdHMgaW4g X2V4aXQoMikuCisJICogT3RoZXJ3aXNlIHRoZSBwb3N0bWFzdGVyIGNhbm5vdCBzaHV0ZG93 biB0aGUgZGF0YWJhc2UgRkFTVCBvciBJTU1FRAorCSAqIGNsZWFubHkgaWYgYSBidWdneSBj bGllbnQgZmFpbHMgdG8gc2VuZCB0aGUgcGFja2V0IHByb21wdGx5LgorCSAqCisJICogRXhp dGluZyB3aXRoIF9leGl0KDEpIGlzIG9ubHkgcG9zc2libGUgYmVjYXVzZSB3ZSBoYXZlIG5v dCB5ZXQgdG91Y2hlZAorCSAqIHNoYXJlZCBtZW1vcnk7IHRoZXJlZm9yZSBubyBvdXRzaWRl LXRoZS1wcm9jZXNzIHN0YXRlIG5lZWRzIHRvIGdldAorCSAqIGNsZWFuZWQgdXAuCisJICov CisJcHFzaWduYWwoU0lHVEVSTSwgcHJvY2Vzc19zdGFydHVwX3BhY2tldF9kaWUpOworCS8q IFNJR1FVSVQgaGFuZGxlciB3YXMgYWxyZWFkeSBzZXQgdXAgYnkgSW5pdFBvc3RtYXN0ZXJD aGlsZCAqLworCUluaXRpYWxpemVUaW1lb3V0cygpOwkJLyogZXN0YWJsaXNoZXMgU0lHQUxS TSBoYW5kbGVyICovCisJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZTdGFydHVwQmxvY2tT aWcsIE5VTEwpOworCisJLyoKKwkgKiBHZXQgdGhlIHJlbW90ZSBob3N0IG5hbWUgYW5kIHBv cnQgZm9yIGxvZ2dpbmcgYW5kIHN0YXR1cyBkaXNwbGF5LgorCSAqLworCXJlbW90ZV9ob3N0 WzBdID0gJ1wwJzsKKwlyZW1vdGVfcG9ydFswXSA9ICdcMCc7CisJaWYgKChyZXQgPSBwZ19n ZXRuYW1laW5mb19hbGwoJnBvcnQtPnJhZGRyLmFkZHIsIHBvcnQtPnJhZGRyLnNhbGVuLAor CQkJCQkJCQkgIHJlbW90ZV9ob3N0LCBzaXplb2YocmVtb3RlX2hvc3QpLAorCQkJCQkJCQkg IHJlbW90ZV9wb3J0LCBzaXplb2YocmVtb3RlX3BvcnQpLAorCQkJCQkJCQkgIChsb2dfaG9z dG5hbWUgPyAwIDogTklfTlVNRVJJQ0hPU1QpIHwgTklfTlVNRVJJQ1NFUlYpKSAhPSAwKQor CQllcmVwb3J0KFdBUk5JTkcsCisJCQkJKGVycm1zZ19pbnRlcm5hbCgicGdfZ2V0bmFtZWlu Zm9fYWxsKCkgZmFpbGVkOiAlcyIsCisJCQkJCQkJCSBnYWlfc3RyZXJyb3IocmV0KSkpKTsK KworCS8qCisJICogU2F2ZSByZW1vdGVfaG9zdCBhbmQgcmVtb3RlX3BvcnQgaW4gcG9ydCBz dHJ1Y3R1cmUgKGFmdGVyIHRoaXMsIHRoZXkKKwkgKiB3aWxsIGFwcGVhciBpbiBsb2dfbGlu ZV9wcmVmaXggZGF0YSBmb3IgbG9nIG1lc3NhZ2VzKS4KKwkgKi8KKwlvbGRjb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCXBvcnQtPnJlbW90 ZV9ob3N0ID0gcHN0cmR1cChyZW1vdGVfaG9zdCk7CisJcG9ydC0+cmVtb3RlX3BvcnQgPSBw c3RyZHVwKHJlbW90ZV9wb3J0KTsKKworCS8qIEFuZCBub3cgd2UgY2FuIGlzc3VlIHRoZSBM b2dfY29ubmVjdGlvbnMgbWVzc2FnZSwgaWYgd2FudGVkICovCisJaWYgKExvZ19jb25uZWN0 aW9ucykKKwl7CisJCWlmIChyZW1vdGVfcG9ydFswXSkKKwkJCWVyZXBvcnQoTE9HLAorCQkJ CQkoZXJybXNnKCJjb25uZWN0aW9uIHJlY2VpdmVkOiBob3N0PSVzIHBvcnQ9JXMiLAorCQkJ CQkJCXJlbW90ZV9ob3N0LAorCQkJCQkJCXJlbW90ZV9wb3J0KSkpOworCQllbHNlCisJCQll cmVwb3J0KExPRywKKwkJCQkJKGVycm1zZygiY29ubmVjdGlvbiByZWNlaXZlZDogaG9zdD0l cyIsCisJCQkJCQkJcmVtb3RlX2hvc3QpKSk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBkaWQg YSByZXZlcnNlIGxvb2t1cCB0byBuYW1lLCB3ZSBtaWdodCBhcyB3ZWxsIHNhdmUgdGhlIHJl c3VsdHMKKwkgKiByYXRoZXIgdGhhbiBwb3NzaWJseSByZXBlYXRpbmcgdGhlIGxvb2t1cCBk dXJpbmcgYXV0aGVudGljYXRpb24uCisJICoKKwkgKiBOb3RlIHRoYXQgd2UgZG9uJ3Qgd2Fu dCB0byBzcGVjaWZ5IE5JX05BTUVSRVFEIGFib3ZlLCBiZWNhdXNlIHRoZW4gd2UnZAorCSAq IGdldCBub3RoaW5nIHVzZWZ1bCBmb3IgYSBjbGllbnQgd2l0aG91dCBhbiByRE5TIGVudHJ5 LiAgVGhlcmVmb3JlLCB3ZQorCSAqIG11c3QgY2hlY2sgd2hldGhlciB3ZSBnb3QgYSBudW1l cmljIElQdjQgb3IgSVB2NiBhZGRyZXNzLCBhbmQgbm90IHNhdmUKKwkgKiBpdCBpbnRvIHJl bW90ZV9ob3N0bmFtZSBpZiBzby4gIChUaGlzIHRlc3QgaXMgY29uc2VydmF0aXZlIGFuZCBt aWdodAorCSAqIHNvbWV0aW1lcyBjbGFzc2lmeSBhIGhvc3RuYW1lIGFzIG51bWVyaWMsIGJ1 dCBhbiBlcnJvciBpbiB0aGF0CisJICogZGlyZWN0aW9uIGlzIHNhZmU7IGl0IG9ubHkgcmVz dWx0cyBpbiBhIHBvc3NpYmxlIGV4dHJhIGxvb2t1cC4pCisJICovCisJaWYgKGxvZ19ob3N0 bmFtZSAmJgorCQlyZXQgPT0gMCAmJgorCQlzdHJzcG4ocmVtb3RlX2hvc3QsICIwMTIzNDU2 Nzg5LiIpIDwgc3RybGVuKHJlbW90ZV9ob3N0KSAmJgorCQlzdHJzcG4ocmVtb3RlX2hvc3Qs ICIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmOiIpIDwgc3RybGVuKHJlbW90ZV9ob3N0KSkKKwkJ cG9ydC0+cmVtb3RlX2hvc3RuYW1lID0gcHN0cmR1cChyZW1vdGVfaG9zdCk7CisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJLyoKKwkgKiBSZWFkeSB0byBiZWdp biBjbGllbnQgaW50ZXJhY3Rpb24uICBXZSB3aWxsIGdpdmUgdXAgYW5kIF9leGl0KDEpIGFm dGVyCisJICogYSB0aW1lIGRlbGF5LCBzbyB0aGF0IGEgYnJva2VuIGNsaWVudCBjYW4ndCBo b2cgYSBjb25uZWN0aW9uCisJICogaW5kZWZpbml0ZWx5LiAgUHJlQXV0aERlbGF5IGFuZCBh bnkgRE5TIGludGVyYWN0aW9ucyBhYm92ZSBkb24ndCBjb3VudAorCSAqIGFnYWluc3QgdGhl IHRpbWUgbGltaXQuCisJICoKKwkgKiBOb3RlOiBBdXRoZW50aWNhdGlvblRpbWVvdXQgaXMg YXBwbGllZCBoZXJlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZQorCSAqIHN0YXJ0dXAgcGFja2V0 LCBhbmQgdGhlbiBhZ2FpbiBpbiBJbml0UG9zdGdyZXMgZm9yIHRoZSBkdXJhdGlvbiBvZiBh bnkKKwkgKiBhdXRoZW50aWNhdGlvbiBvcGVyYXRpb25zLiAgU28gYSBob3N0aWxlIGNsaWVu dCBjb3VsZCB0aWUgdXAgdGhlCisJICogcHJvY2VzcyBmb3IgbmVhcmx5IHR3aWNlIEF1dGhl bnRpY2F0aW9uVGltZW91dCBiZWZvcmUgd2Uga2ljayBoaW0gb2ZmLgorCSAqCisJICogTm90 ZTogYmVjYXVzZSBQb3N0Z3Jlc01haW4gd2lsbCBjYWxsIEluaXRpYWxpemVUaW1lb3V0cyBh Z2FpbiwgdGhlCisJICogcmVnaXN0cmF0aW9uIG9mIFNUQVJUVVBfUEFDS0VUX1RJTUVPVVQg d2lsbCBiZSBsb3N0LiAgVGhpcyBpcyBva2F5CisJICogc2luY2Ugd2UgbmV2ZXIgdXNlIGl0 IGFnYWluIGFmdGVyIHRoaXMgZnVuY3Rpb24uCisJICovCisJUmVnaXN0ZXJUaW1lb3V0KFNU QVJUVVBfUEFDS0VUX1RJTUVPVVQsIFN0YXJ0dXBQYWNrZXRUaW1lb3V0SGFuZGxlcik7CisJ ZW5hYmxlX3RpbWVvdXRfYWZ0ZXIoU1RBUlRVUF9QQUNLRVRfVElNRU9VVCwgQXV0aGVudGlj YXRpb25UaW1lb3V0ICogMTAwMCk7CisKKwkvKgorCSAqIFJlY2VpdmUgdGhlIHN0YXJ0dXAg cGFja2V0ICh3aGljaCBtaWdodCB0dXJuIG91dCB0byBiZSBhIGNhbmNlbCByZXF1ZXN0CisJ ICogcGFja2V0KS4KKwkgKi8KKwlzdGF0dXMgPSBQcm9jZXNzU3RhcnR1cFBhY2tldChwb3J0 LCBmYWxzZSwgZmFsc2UpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBnb2luZyB0byByZWplY3Qg dGhlIGNvbm5lY3Rpb24gZHVlIHRvIGRhdGFiYXNlIHN0YXRlLCBzYXkgc28KKwkgKiBub3cg aW5zdGVhZCBvZiB3YXN0aW5nIGN5Y2xlcyBvbiBhbiBhdXRoZW50aWNhdGlvbiBleGNoYW5n ZS4gKFRoaXMgYWxzbworCSAqIGFsbG93cyBhIHBnX3BpbmcgdXRpbGl0eSB0byBiZSB3cml0 dGVuLikKKwkgKi8KKwlzd2l0Y2ggKGNhYykKKwl7CisJCWNhc2UgQ0FDX1NUQVJUVVA6CisJ CQllcmVwb3J0KEZBVEFMLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT05ORUNU X05PVyksCisJCQkJCSBlcnJtc2coInRoZSBkYXRhYmFzZSBzeXN0ZW0gaXMgc3RhcnRpbmcg dXAiKSkpOworCQkJYnJlYWs7CisJCWNhc2UgQ0FDX05PVENPTlNJU1RFTlQ6CisJCQlpZiAo RW5hYmxlSG90U3RhbmRieSkKKwkJCQllcmVwb3J0KEZBVEFMLAorCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9DQU5OT1RfQ09OTkVDVF9OT1cpLAorCQkJCQkJIGVycm1zZygidGhlIGRhdGFi YXNlIHN5c3RlbSBpcyBub3QgeWV0IGFjY2VwdGluZyBjb25uZWN0aW9ucyIpLAorCQkJCQkJ IGVycmRldGFpbCgiQ29uc2lzdGVudCByZWNvdmVyeSBzdGF0ZSBoYXMgbm90IGJlZW4geWV0 IHJlYWNoZWQuIikpKTsKKwkJCWVsc2UKKwkJCQllcmVwb3J0KEZBVEFMLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09OTkVDVF9OT1cpLAorCQkJCQkJIGVycm1zZygidGhl IGRhdGFiYXNlIHN5c3RlbSBpcyBub3QgYWNjZXB0aW5nIGNvbm5lY3Rpb25zIiksCisJCQkJ CQkgZXJyZGV0YWlsKCJIb3Qgc3RhbmRieSBtb2RlIGlzIGRpc2FibGVkLiIpKSk7CisJCQli cmVhazsKKwkJY2FzZSBDQUNfU0hVVERPV046CisJCQllcmVwb3J0KEZBVEFMLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0NBTk5PVF9DT05ORUNUX05PVyksCisJCQkJCSBlcnJtc2coInRo ZSBkYXRhYmFzZSBzeXN0ZW0gaXMgc2h1dHRpbmcgZG93biIpKSk7CisJCQlicmVhazsKKwkJ Y2FzZSBDQUNfUkVDT1ZFUlk6CisJCQllcmVwb3J0KEZBVEFMLAorCQkJCQkoZXJyY29kZShF UlJDT0RFX0NBTk5PVF9DT05ORUNUX05PVyksCisJCQkJCSBlcnJtc2coInRoZSBkYXRhYmFz ZSBzeXN0ZW0gaXMgaW4gcmVjb3ZlcnkgbW9kZSIpKSk7CisJCQlicmVhazsKKwkJY2FzZSBD QUNfVE9PTUFOWToKKwkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf VE9PX01BTllfQ09OTkVDVElPTlMpLAorCQkJCQkgZXJybXNnKCJzb3JyeSwgdG9vIG1hbnkg Y2xpZW50cyBhbHJlYWR5IikpKTsKKwkJCWJyZWFrOworCQljYXNlIENBQ19PSzoKKwkJCWJy ZWFrOworCX0KKworCS8qCisJICogRGlzYWJsZSB0aGUgdGltZW91dCwgYW5kIHByZXZlbnQg U0lHVEVSTSBhZ2Fpbi4KKwkgKi8KKwlkaXNhYmxlX3RpbWVvdXQoU1RBUlRVUF9QQUNLRVRf VElNRU9VVCwgZmFsc2UpOworCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmQmxvY2tTaWcs IE5VTEwpOworCisJLyoKKwkgKiBBcyBhIHNhZmV0eSBjaGVjayB0aGF0IG5vdGhpbmcgaW4g c3RhcnR1cCBoYXMgeWV0IHBlcmZvcm1lZAorCSAqIHNoYXJlZC1tZW1vcnkgbW9kaWZpY2F0 aW9ucyB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgdW5kb25lIGlmIHdlIGhhZAorCSAqIGV4aXRl ZCB0aHJvdWdoIFNJR1RFUk0gb3IgdGltZW91dCBhYm92ZSwgY2hlY2sgdGhhdCBubyBvbl9z aG1lbV9leGl0CisJICogaGFuZGxlcnMgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgeWV0LiAgKFRo aXMgaXNuJ3QgdGVycmlibHkgYnVsbGV0cHJvb2YsCisJICogc2luY2Ugc29tZW9uZSBtaWdo dCBtaXN1c2UgYW4gb25fcHJvY19leGl0IGhhbmRsZXIgZm9yIHNobWVtIGNsZWFudXAsCisJ ICogYnV0IGl0J3MgYSBjaGVhcCBhbmQgaGVscGZ1bCBjaGVjay4gIFdlIGNhbm5vdCBkaXNh bGxvdyBvbl9wcm9jX2V4aXQKKwkgKiBoYW5kbGVycyB1bmZvcnR1bmF0ZWx5LCBzaW5jZSBw cV9pbml0KCkgYWxyZWFkeSByZWdpc3RlcmVkIG9uZS4pCisJICovCisJY2hlY2tfb25fc2ht ZW1fZXhpdF9saXN0c19hcmVfZW1wdHkoKTsKKworCS8qCisJICogU3RvcCBoZXJlIGlmIGl0 IHdhcyBiYWQgb3IgYSBjYW5jZWwgcGFja2V0LiAgUHJvY2Vzc1N0YXJ0dXBQYWNrZXQKKwkg KiBhbHJlYWR5IGRpZCBhbnkgYXBwcm9wcmlhdGUgZXJyb3IgcmVwb3J0aW5nLgorCSAqLwor CWlmIChzdGF0dXMgIT0gU1RBVFVTX09LKQorCQlwcm9jX2V4aXQoMCk7CisKKwkvKgorCSAq IE5vdyB0aGF0IHdlIGhhdmUgdGhlIHVzZXIgYW5kIGRhdGFiYXNlIG5hbWUsIHdlIGNhbiBz ZXQgdGhlIHByb2Nlc3MKKwkgKiB0aXRsZSBmb3IgcHMuICBJdCdzIGdvb2QgdG8gZG8gdGhp cyBhcyBlYXJseSBhcyBwb3NzaWJsZSBpbiBzdGFydHVwLgorCSAqLworCWluaXRTdHJpbmdJ bmZvKCZwc19kYXRhKTsKKwlpZiAoYW1fd2Fsc2VuZGVyKQorCQlhcHBlbmRTdHJpbmdJbmZv KCZwc19kYXRhLCAiJXMgIiwgR2V0QmFja2VuZFR5cGVEZXNjKEJfV0FMX1NFTkRFUikpOwor CWFwcGVuZFN0cmluZ0luZm8oJnBzX2RhdGEsICIlcyAiLCBwb3J0LT51c2VyX25hbWUpOwor CWlmIChwb3J0LT5kYXRhYmFzZV9uYW1lWzBdICE9ICdcMCcpCisJCWFwcGVuZFN0cmluZ0lu Zm8oJnBzX2RhdGEsICIlcyAiLCBwb3J0LT5kYXRhYmFzZV9uYW1lKTsKKwlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZwc19kYXRhLCBwb3J0LT5yZW1vdGVfaG9zdCk7CisJaWYgKHBvcnQt PnJlbW90ZV9wb3J0WzBdICE9ICdcMCcpCisJCWFwcGVuZFN0cmluZ0luZm8oJnBzX2RhdGEs ICIoJXMpIiwgcG9ydC0+cmVtb3RlX3BvcnQpOworCisJaW5pdF9wc19kaXNwbGF5KHBzX2Rh dGEuZGF0YSk7CisJcGZyZWUocHNfZGF0YS5kYXRhKTsKKworCXNldF9wc19kaXNwbGF5KCJp bml0aWFsaXppbmciKTsKK30KKworLyoKKyAqIFJlYWQgYSBjbGllbnQncyBzdGFydHVwIHBh Y2tldCBhbmQgZG8gc29tZXRoaW5nIGFjY29yZGluZyB0byBpdC4KKyAqCisgKiBSZXR1cm5z IFNUQVRVU19PSyBvciBTVEFUVVNfRVJST1IsIG9yIG1pZ2h0IGNhbGwgZXJlcG9ydChGQVRB TCkgYW5kCisgKiBub3QgcmV0dXJuIGF0IGFsbC4KKyAqCisgKiAoTm90ZSB0aGF0IGVyZXBv cnQoRkFUQUwpIHN0dWZmIGlzIHNlbnQgdG8gdGhlIGNsaWVudCwgc28gb25seSB1c2UgaXQK KyAqIGlmIHRoYXQncyB3aGF0IHlvdSB3YW50LiAgUmV0dXJuIFNUQVRVU19FUlJPUiBpZiB5 b3UgZG9uJ3Qgd2FudCB0bworICogc2VuZCBhbnl0aGluZyB0byB0aGUgY2xpZW50LCB3aGlj aCB3b3VsZCB0eXBpY2FsbHkgYmUgYXBwcm9wcmlhdGUKKyAqIGlmIHdlIGRldGVjdCBhIGNv bW11bmljYXRpb25zIGZhaWx1cmUuKQorICoKKyAqIFNldCBzc2xfZG9uZSBhbmQvb3IgZ3Nz X2RvbmUgd2hlbiBuZWdvdGlhdGlvbiBvZiBhbiBlbmNyeXB0ZWQgbGF5ZXIKKyAqIChjdXJy ZW50bHksIFRMUyBvciBHU1NBUEkpIGlzIGNvbXBsZXRlZC4gQSBzdWNjZXNzZnVsIG5lZ290 aWF0aW9uIG9mIGVpdGhlcgorICogZW5jcnlwdGlvbiBsYXllciBzZXRzIGJvdGggZmxhZ3Ms IGJ1dCBhIHJlamVjdGVkIG5lZ290aWF0aW9uIHNldHMgb25seSB0aGUKKyAqIGZsYWcgZm9y IHRoYXQgbGF5ZXIsIHNpbmNlIHRoZSBjbGllbnQgbWF5IHdpc2ggdG8gdHJ5IHRoZSBvdGhl ciBvbmUuIFdlCisgKiBzaG91bGQgbWFrZSBubyBhc3N1bXB0aW9uIGhlcmUgYWJvdXQgdGhl IG9yZGVyIGluIHdoaWNoIHRoZSBjbGllbnQgbWF5IG1ha2UKKyAqIHJlcXVlc3RzLgorICov CitzdGF0aWMgaW50CitQcm9jZXNzU3RhcnR1cFBhY2tldChQb3J0ICpwb3J0LCBib29sIHNz bF9kb25lLCBib29sIGdzc19kb25lKQoreworCWludDMyCQlsZW47CisJY2hhcgkgICAqYnVm OworCVByb3RvY29sVmVyc2lvbiBwcm90bzsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7 CisKKwlwcV9zdGFydG1zZ3JlYWQoKTsKKworCS8qCisJICogR3JhYiB0aGUgZmlyc3QgYnl0 ZSBvZiB0aGUgbGVuZ3RoIHdvcmQgc2VwYXJhdGVseSwgc28gdGhhdCB3ZSBjYW4gdGVsbAor CSAqIHdoZXRoZXIgd2UgaGF2ZSBubyBkYXRhIGF0IGFsbCBvciBhbiBpbmNvbXBsZXRlIHBh Y2tldC4gIChUaGlzIG1pZ2h0CisJICogc291bmQgaW5lZmZpY2llbnQsIGJ1dCBpdCdzIG5v dCByZWFsbHksIGJlY2F1c2Ugb2YgYnVmZmVyaW5nIGluCisJICogcHFjb21tLmMuKQorCSAq LworCWlmIChwcV9nZXRieXRlcygoY2hhciAqKSAmbGVuLCAxKSA9PSBFT0YpCisJeworCQkv KgorCQkgKiBJZiB3ZSBnZXQgbm8gZGF0YSBhdCBhbGwsIGRvbid0IGNsdXR0ZXIgdGhlIGxv ZyB3aXRoIGEgY29tcGxhaW50OworCQkgKiBzdWNoIGNhc2VzIG9mdGVuIG9jY3VyIGZvciBs ZWdpdGltYXRlIHJlYXNvbnMuICBBbiBleGFtcGxlIGlzIHRoYXQKKwkJICogd2UgbWlnaHQg YmUgaGVyZSBhZnRlciByZXNwb25kaW5nIHRvIE5FR09USUFURV9TU0xfQ09ERSwgYW5kIGlm IHRoZQorCQkgKiBjbGllbnQgZGlkbid0IGxpa2Ugb3VyIHJlc3BvbnNlLCBpdCdsbCBwcm9i YWJseSBqdXN0IGRyb3AgdGhlCisJCSAqIGNvbm5lY3Rpb24uICBTZXJ2aWNlLW1vbml0b3Jp bmcgc29mdHdhcmUgYWxzbyBvZnRlbiBqdXN0IG9wZW5zIGFuZAorCQkgKiBjbG9zZXMgYSBj b25uZWN0aW9uIHdpdGhvdXQgc2VuZGluZyBhbnl0aGluZy4gIChTbyBkbyBwb3J0CisJCSAq IHNjYW5uZXJzLCB3aGljaCBtYXkgYmUgbGVzcyBiZW5pZ24sIGJ1dCBpdCdzIG5vdCByZWFs bHkgb3VyIGpvYiB0bworCQkgKiBub3RpY2UgdGhvc2UuKQorCQkgKi8KKwkJcmV0dXJuIFNU QVRVU19FUlJPUjsKKwl9CisKKwlpZiAocHFfZ2V0Ynl0ZXMoKChjaGFyICopICZsZW4pICsg MSwgMykgPT0gRU9GKQorCXsKKwkJLyogR290IGEgcGFydGlhbCBsZW5ndGggd29yZCwgc28g YmxlYXQgYWJvdXQgdGhhdCAqLworCQlpZiAoIXNzbF9kb25lICYmICFnc3NfZG9uZSkKKwkJ CWVyZXBvcnQoQ09NTUVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJ T0xBVElPTiksCisJCQkJCSBlcnJtc2coImluY29tcGxldGUgc3RhcnR1cCBwYWNrZXQiKSkp OworCQlyZXR1cm4gU1RBVFVTX0VSUk9SOworCX0KKworCWxlbiA9IHBnX250b2gzMihsZW4p OworCWxlbiAtPSA0OworCisJaWYgKGxlbiA8IChpbnQzMikgc2l6ZW9mKFByb3RvY29sVmVy c2lvbikgfHwKKwkJbGVuID4gTUFYX1NUQVJUVVBfUEFDS0VUX0xFTkdUSCkKKwl7CisJCWVy ZXBvcnQoQ09NTUVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFU SU9OKSwKKwkJCQkgZXJybXNnKCJpbnZhbGlkIGxlbmd0aCBvZiBzdGFydHVwIHBhY2tldCIp KSk7CisJCXJldHVybiBTVEFUVVNfRVJST1I7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSBz cGFjZSB0byBob2xkIHRoZSBzdGFydHVwIHBhY2tldCwgcGx1cyBvbmUgZXh0cmEgYnl0ZSB0 aGF0J3MKKwkgKiBpbml0aWFsaXplZCB0byBiZSB6ZXJvLiAgVGhpcyBlbnN1cmVzIHdlIHdp bGwgaGF2ZSBudWxsIHRlcm1pbmF0aW9uIG9mCisJICogYWxsIHN0cmluZ3MgaW5zaWRlIHRo ZSBwYWNrZXQuCisJICovCisJYnVmID0gcGFsbG9jKGxlbiArIDEpOworCWJ1ZltsZW5dID0g J1wwJzsKKworCWlmIChwcV9nZXRieXRlcyhidWYsIGxlbikgPT0gRU9GKQorCXsKKwkJZXJl cG9ydChDT01NRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJ T04pLAorCQkJCSBlcnJtc2coImluY29tcGxldGUgc3RhcnR1cCBwYWNrZXQiKSkpOworCQly ZXR1cm4gU1RBVFVTX0VSUk9SOworCX0KKwlwcV9lbmRtc2dyZWFkKCk7CisKKwkvKgorCSAq IFRoZSBmaXJzdCBmaWVsZCBpcyBlaXRoZXIgYSBwcm90b2NvbCB2ZXJzaW9uIG51bWJlciBv ciBhIHNwZWNpYWwKKwkgKiByZXF1ZXN0IGNvZGUuCisJICovCisJcG9ydC0+cHJvdG8gPSBw cm90byA9IHBnX250b2gzMigqKChQcm90b2NvbFZlcnNpb24gKikgYnVmKSk7CisKKwlpZiAo cHJvdG8gPT0gQ0FOQ0VMX1JFUVVFU1RfQ09ERSkKKwl7CisJCUNhbmNlbFJlcXVlc3RQYWNr ZXQgKmNhbmM7CisJCWludAkJCWJhY2tlbmRQSUQ7CisJCWludDMyCQljYW5jZWxBdXRoQ29k ZTsKKworCQlpZiAobGVuICE9IHNpemVvZihDYW5jZWxSZXF1ZXN0UGFja2V0KSkKKwkJewor CQkJZXJlcG9ydChDT01NRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xf VklPTEFUSU9OKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBsZW5ndGggb2Ygc3RhcnR1cCBw YWNrZXQiKSkpOworCQkJcmV0dXJuIFNUQVRVU19FUlJPUjsKKwkJfQorCQljYW5jID0gKENh bmNlbFJlcXVlc3RQYWNrZXQgKikgYnVmOworCQliYWNrZW5kUElEID0gKGludCkgcGdfbnRv aDMyKGNhbmMtPmJhY2tlbmRQSUQpOworCQljYW5jZWxBdXRoQ29kZSA9IChpbnQzMikgcGdf bnRvaDMyKGNhbmMtPmNhbmNlbEF1dGhDb2RlKTsKKworCQlwcm9jZXNzQ2FuY2VsUmVxdWVz dChiYWNrZW5kUElELCBjYW5jZWxBdXRoQ29kZSk7CisJCS8qIE5vdCByZWFsbHkgYW4gZXJy b3IsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHByb2NlZWQgZnVydGhlciAqLworCQlyZXR1cm4g U1RBVFVTX0VSUk9SOworCX0KKworCWlmIChwcm90byA9PSBORUdPVElBVEVfU1NMX0NPREUg JiYgIXNzbF9kb25lKQorCXsKKwkJY2hhcgkJU1NMb2s7CisKKyNpZmRlZiBVU0VfU1NMCisJ CS8qIE5vIFNTTCB3aGVuIGRpc2FibGVkIG9yIG9uIFVuaXggc29ja2V0cyAqLworCQlpZiAo IUxvYWRlZFNTTCB8fCBwb3J0LT5sYWRkci5hZGRyLnNzX2ZhbWlseSA9PSBBRl9VTklYKQor CQkJU1NMb2sgPSAnTic7CisJCWVsc2UKKwkJCVNTTG9rID0gJ1MnOwkJLyogU3VwcG9ydCBm b3IgU1NMICovCisjZWxzZQorCQlTU0xvayA9ICdOJzsJCQkvKiBObyBzdXBwb3J0IGZvciBT U0wgKi8KKyNlbmRpZgorCityZXRyeTE6CisJCWlmIChzZW5kKHBvcnQtPnNvY2ssICZTU0xv aywgMSwgMCkgIT0gMSkKKwkJeworCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCWdvdG8g cmV0cnkxOwkvKiBpZiBpbnRlcnJ1cHRlZCwganVzdCByZXRyeSAqLworCQkJZXJlcG9ydChD T01NRVJST1IsCisJCQkJCShlcnJjb2RlX2Zvcl9zb2NrZXRfYWNjZXNzKCksCisJCQkJCSBl cnJtc2coImZhaWxlZCB0byBzZW5kIFNTTCBuZWdvdGlhdGlvbiByZXNwb25zZTogJW0iKSkp OworCQkJcmV0dXJuIFNUQVRVU19FUlJPUjsJLyogY2xvc2UgdGhlIGNvbm5lY3Rpb24gKi8K KwkJfQorCisjaWZkZWYgVVNFX1NTTAorCQlpZiAoU1NMb2sgPT0gJ1MnICYmIHNlY3VyZV9v cGVuX3NlcnZlcihwb3J0KSA9PSAtMSkKKwkJCXJldHVybiBTVEFUVVNfRVJST1I7CisjZW5k aWYKKworCQkvKgorCQkgKiBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBoYXZlIG5vIGRhdGEg YWxyZWFkeSBidWZmZXJlZC4gIElmIHdlIGRvLAorCQkgKiBpdCB3YXMgcmVjZWl2ZWQgYmVm b3JlIHdlIHBlcmZvcm1lZCB0aGUgU1NMIGhhbmRzaGFrZSwgc28gaXQgd2Fzbid0CisJCSAq IGVuY3J5cHRlZCBhbmQgaW5kZWVkIG1heSBoYXZlIGJlZW4gaW5qZWN0ZWQgYnkgYSBtYW4t aW4tdGhlLW1pZGRsZS4KKwkJICogV2UgcmVwb3J0IHRoaXMgY2FzZSB0byB0aGUgY2xpZW50 LgorCQkgKi8KKwkJaWYgKHBxX2J1ZmZlcl9oYXNfZGF0YSgpKQorCQkJZXJlcG9ydChGQVRB TCwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkg ZXJybXNnKCJyZWNlaXZlZCB1bmVuY3J5cHRlZCBkYXRhIGFmdGVyIFNTTCByZXF1ZXN0Iiks CisJCQkJCSBlcnJkZXRhaWwoIlRoaXMgY291bGQgYmUgZWl0aGVyIGEgY2xpZW50LXNvZnR3 YXJlIGJ1ZyBvciBldmlkZW5jZSBvZiBhbiBhdHRlbXB0ZWQgbWFuLWluLXRoZS1taWRkbGUg YXR0YWNrLiIpKSk7CisKKwkJLyoKKwkJICogcmVndWxhciBzdGFydHVwIHBhY2tldCwgY2Fu Y2VsLCBldGMgcGFja2V0IHNob3VsZCBmb2xsb3csIGJ1dCBub3QKKwkJICogYW5vdGhlciBT U0wgbmVnb3RpYXRpb24gcmVxdWVzdCwgYW5kIGEgR1NTIHJlcXVlc3Qgc2hvdWxkIG9ubHkK KwkJICogZm9sbG93IGlmIFNTTCB3YXMgcmVqZWN0ZWQgKGNsaWVudCBtYXkgbmVnb3RpYXRl IGluIGVpdGhlciBvcmRlcikKKwkJICovCisJCXJldHVybiBQcm9jZXNzU3RhcnR1cFBhY2tl dChwb3J0LCB0cnVlLCBTU0xvayA9PSAnUycpOworCX0KKwllbHNlIGlmIChwcm90byA9PSBO RUdPVElBVEVfR1NTX0NPREUgJiYgIWdzc19kb25lKQorCXsKKwkJY2hhcgkJR1NTb2sgPSAn Tic7CisKKyNpZmRlZiBFTkFCTEVfR1NTCisJCS8qIE5vIEdTU0FQSSBlbmNyeXB0aW9uIHdo ZW4gb24gVW5peCBzb2NrZXQgKi8KKwkJaWYgKHBvcnQtPmxhZGRyLmFkZHIuc3NfZmFtaWx5 ICE9IEFGX1VOSVgpCisJCQlHU1NvayA9ICdHJzsKKyNlbmRpZgorCisJCXdoaWxlIChzZW5k KHBvcnQtPnNvY2ssICZHU1NvaywgMSwgMCkgIT0gMSkKKwkJeworCQkJaWYgKGVycm5vID09 IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJZXJlcG9ydChDT01NRVJST1IsCisJCQkJCShl cnJjb2RlX2Zvcl9zb2NrZXRfYWNjZXNzKCksCisJCQkJCSBlcnJtc2coImZhaWxlZCB0byBz ZW5kIEdTU0FQSSBuZWdvdGlhdGlvbiByZXNwb25zZTogJW0iKSkpOworCQkJcmV0dXJuIFNU QVRVU19FUlJPUjsJLyogY2xvc2UgdGhlIGNvbm5lY3Rpb24gKi8KKwkJfQorCisjaWZkZWYg RU5BQkxFX0dTUworCQlpZiAoR1NTb2sgPT0gJ0cnICYmIHNlY3VyZV9vcGVuX2dzc2FwaShw b3J0KSA9PSAtMSkKKwkJCXJldHVybiBTVEFUVVNfRVJST1I7CisjZW5kaWYKKworCQkvKgor CQkgKiBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBoYXZlIG5vIGRhdGEgYWxyZWFkeSBidWZm ZXJlZC4gIElmIHdlIGRvLAorCQkgKiBpdCB3YXMgcmVjZWl2ZWQgYmVmb3JlIHdlIHBlcmZv cm1lZCB0aGUgR1NTIGhhbmRzaGFrZSwgc28gaXQgd2Fzbid0CisJCSAqIGVuY3J5cHRlZCBh bmQgaW5kZWVkIG1heSBoYXZlIGJlZW4gaW5qZWN0ZWQgYnkgYSBtYW4taW4tdGhlLW1pZGRs ZS4KKwkJICogV2UgcmVwb3J0IHRoaXMgY2FzZSB0byB0aGUgY2xpZW50LgorCQkgKi8KKwkJ aWYgKHBxX2J1ZmZlcl9oYXNfZGF0YSgpKQorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVy cmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLAorCQkJCQkgZXJybXNnKCJyZWNl aXZlZCB1bmVuY3J5cHRlZCBkYXRhIGFmdGVyIEdTU0FQSSBlbmNyeXB0aW9uIHJlcXVlc3Qi KSwKKwkJCQkJIGVycmRldGFpbCgiVGhpcyBjb3VsZCBiZSBlaXRoZXIgYSBjbGllbnQtc29m dHdhcmUgYnVnIG9yIGV2aWRlbmNlIG9mIGFuIGF0dGVtcHRlZCBtYW4taW4tdGhlLW1pZGRs ZSBhdHRhY2suIikpKTsKKworCQkvKgorCQkgKiByZWd1bGFyIHN0YXJ0dXAgcGFja2V0LCBj YW5jZWwsIGV0YyBwYWNrZXQgc2hvdWxkIGZvbGxvdywgYnV0IG5vdAorCQkgKiBhbm90aGVy IEdTUyBuZWdvdGlhdGlvbiByZXF1ZXN0LCBhbmQgYW4gU1NMIHJlcXVlc3Qgc2hvdWxkIG9u bHkKKwkJICogZm9sbG93IGlmIEdTUyB3YXMgcmVqZWN0ZWQgKGNsaWVudCBtYXkgbmVnb3Rp YXRlIGluIGVpdGhlciBvcmRlcikKKwkJICovCisJCXJldHVybiBQcm9jZXNzU3RhcnR1cFBh Y2tldChwb3J0LCBHU1NvayA9PSAnRycsIHRydWUpOworCX0KKworCS8qIENvdWxkIGFkZCBh ZGRpdGlvbmFsIHNwZWNpYWwgcGFja2V0IHR5cGVzIGhlcmUgKi8KKworCS8qCisJICogU2V0 IEZyb250ZW5kUHJvdG9jb2wgbm93IHNvIHRoYXQgZXJlcG9ydCgpIGtub3dzIHdoYXQgZm9y bWF0IHRvIHNlbmQgaWYKKwkgKiB3ZSBmYWlsIGR1cmluZyBzdGFydHVwLgorCSAqLworCUZy b250ZW5kUHJvdG9jb2wgPSBwcm90bzsKKworCS8qIENoZWNrIHRoYXQgdGhlIG1ham9yIHBy b3RvY29sIHZlcnNpb24gaXMgaW4gcmFuZ2UuICovCisJaWYgKFBHX1BST1RPQ09MX01BSk9S KHByb3RvKSA8IFBHX1BST1RPQ09MX01BSk9SKFBHX1BST1RPQ09MX0VBUkxJRVNUKSB8fAor CQlQR19QUk9UT0NPTF9NQUpPUihwcm90bykgPiBQR19QUk9UT0NPTF9NQUpPUihQR19QUk9U T0NPTF9MQVRFU1QpKQorCQllcmVwb3J0KEZBVEFMLAorCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJ1bnN1cHBvcnRlZCBmcm9u dGVuZCBwcm90b2NvbCAldS4ldTogc2VydmVyIHN1cHBvcnRzICV1LjAgdG8gJXUuJXUiLAor CQkJCQkJUEdfUFJPVE9DT0xfTUFKT1IocHJvdG8pLCBQR19QUk9UT0NPTF9NSU5PUihwcm90 byksCisJCQkJCQlQR19QUk9UT0NPTF9NQUpPUihQR19QUk9UT0NPTF9FQVJMSUVTVCksCisJ CQkJCQlQR19QUk9UT0NPTF9NQUpPUihQR19QUk9UT0NPTF9MQVRFU1QpLAorCQkJCQkJUEdf UFJPVE9DT0xfTUlOT1IoUEdfUFJPVE9DT0xfTEFURVNUKSkpKTsKKworCS8qCisJICogTm93 IGZldGNoIHBhcmFtZXRlcnMgb3V0IG9mIHN0YXJ0dXAgcGFja2V0IGFuZCBzYXZlIHRoZW0g aW50byB0aGUgUG9ydAorCSAqIHN0cnVjdHVyZS4KKwkgKi8KKwlvbGRjb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJLyogSGFuZGxlIHBy b3RvY29sIHZlcnNpb24gMyBzdGFydHVwIHBhY2tldCAqLworCXsKKwkJaW50MzIJCW9mZnNl dCA9IHNpemVvZihQcm90b2NvbFZlcnNpb24pOworCQlMaXN0CSAgICp1bnJlY29nbml6ZWRf cHJvdG9jb2xfb3B0aW9ucyA9IE5JTDsKKworCQkvKgorCQkgKiBTY2FuIHBhY2tldCBib2R5 IGZvciBuYW1lL29wdGlvbiBwYWlycy4gIFdlIGNhbiBhc3N1bWUgYW55IHN0cmluZworCQkg KiBiZWdpbm5pbmcgd2l0aGluIHRoZSBwYWNrZXQgYm9keSBpcyBudWxsLXRlcm1pbmF0ZWQs IHRoYW5rcyB0bworCQkgKiB6ZXJvaW5nIGV4dHJhIGJ5dGUgYWJvdmUuCisJCSAqLworCQlw b3J0LT5ndWNfb3B0aW9ucyA9IE5JTDsKKworCQl3aGlsZSAob2Zmc2V0IDwgbGVuKQorCQl7 CisJCQljaGFyCSAgICpuYW1lcHRyID0gYnVmICsgb2Zmc2V0OworCQkJaW50MzIJCXZhbG9m ZnNldDsKKwkJCWNoYXIJICAgKnZhbHB0cjsKKworCQkJaWYgKCpuYW1lcHRyID09ICdcMCcp CisJCQkJYnJlYWs7CQkJLyogZm91bmQgcGFja2V0IHRlcm1pbmF0b3IgKi8KKwkJCXZhbG9m ZnNldCA9IG9mZnNldCArIHN0cmxlbihuYW1lcHRyKSArIDE7CisJCQlpZiAodmFsb2Zmc2V0 ID49IGxlbikKKwkJCQlicmVhazsJCQkvKiBtaXNzaW5nIHZhbHVlLCB3aWxsIGNvbXBsYWlu IGJlbG93ICovCisJCQl2YWxwdHIgPSBidWYgKyB2YWxvZmZzZXQ7CisKKwkJCWlmIChzdHJj bXAobmFtZXB0ciwgImRhdGFiYXNlIikgPT0gMCkKKwkJCQlwb3J0LT5kYXRhYmFzZV9uYW1l ID0gcHN0cmR1cCh2YWxwdHIpOworCQkJZWxzZSBpZiAoc3RyY21wKG5hbWVwdHIsICJ1c2Vy IikgPT0gMCkKKwkJCQlwb3J0LT51c2VyX25hbWUgPSBwc3RyZHVwKHZhbHB0cik7CisJCQll bHNlIGlmIChzdHJjbXAobmFtZXB0ciwgIm9wdGlvbnMiKSA9PSAwKQorCQkJCXBvcnQtPmNt ZGxpbmVfb3B0aW9ucyA9IHBzdHJkdXAodmFscHRyKTsKKwkJCWVsc2UgaWYgKHN0cmNtcChu YW1lcHRyLCAicmVwbGljYXRpb24iKSA9PSAwKQorCQkJeworCQkJCS8qCisJCQkJICogRHVl IHRvIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgY29uY2VybnMgdGhlIHJlcGxpY2F0aW9uCisJ CQkJICogcGFyYW1ldGVyIGlzIGEgaHlicmlkIGJlYXN0IHdoaWNoIGFsbG93cyB0aGUgdmFs dWUgdG8gYmUKKwkJCQkgKiBlaXRoZXIgYm9vbGVhbiBvciB0aGUgc3RyaW5nICdkYXRhYmFz ZScuIFRoZSBsYXR0ZXIKKwkJCQkgKiBjb25uZWN0cyB0byBhIHNwZWNpZmljIGRhdGFiYXNl IHdoaWNoIGlzIGUuZy4gcmVxdWlyZWQgZm9yCisJCQkJICogbG9naWNhbCBkZWNvZGluZyB3 aGlsZS4KKwkJCQkgKi8KKwkJCQlpZiAoc3RyY21wKHZhbHB0ciwgImRhdGFiYXNlIikgPT0g MCkKKwkJCQl7CisJCQkJCWFtX3dhbHNlbmRlciA9IHRydWU7CisJCQkJCWFtX2RiX3dhbHNl bmRlciA9IHRydWU7CisJCQkJfQorCQkJCWVsc2UgaWYgKCFwYXJzZV9ib29sKHZhbHB0ciwg JmFtX3dhbHNlbmRlcikpCisJCQkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkJIGVycm1zZygiaW52 YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyIFwiJXNcIjogXCIlc1wiIiwKKwkJCQkJCQkJCSJy ZXBsaWNhdGlvbiIsCisJCQkJCQkJCQl2YWxwdHIpLAorCQkJCQkJCSBlcnJoaW50KCJWYWxp ZCB2YWx1ZXMgYXJlOiBcImZhbHNlXCIsIDAsIFwidHJ1ZVwiLCAxLCBcImRhdGFiYXNlXCIu IikpKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHN0cm5jbXAobmFtZXB0ciwgIl9wcV8uIiwgNSkg PT0gMCkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIEFueSBvcHRpb24gYmVnaW5uaW5nIHdpdGgg X3BxXy4gaXMgcmVzZXJ2ZWQgZm9yIHVzZSBhcyBhCisJCQkJICogcHJvdG9jb2wtbGV2ZWwg b3B0aW9uLCBidXQgYXQgcHJlc2VudCBubyBzdWNoIG9wdGlvbnMgYXJlCisJCQkJICogZGVm aW5lZC4KKwkJCQkgKi8KKwkJCQl1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9ucyA9CisJ CQkJCWxhcHBlbmQodW5yZWNvZ25pemVkX3Byb3RvY29sX29wdGlvbnMsIHBzdHJkdXAobmFt ZXB0cikpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIEFzc3VtZSBpdCdzIGEgZ2Vu ZXJpYyBHVUMgb3B0aW9uICovCisJCQkJcG9ydC0+Z3VjX29wdGlvbnMgPSBsYXBwZW5kKHBv cnQtPmd1Y19vcHRpb25zLAorCQkJCQkJCQkJCQlwc3RyZHVwKG5hbWVwdHIpKTsKKwkJCQlw b3J0LT5ndWNfb3B0aW9ucyA9IGxhcHBlbmQocG9ydC0+Z3VjX29wdGlvbnMsCisJCQkJCQkJ CQkJCXBzdHJkdXAodmFscHRyKSk7CisKKwkJCQkvKgorCQkJCSAqIENvcHkgYXBwbGljYXRp b25fbmFtZSB0byBwb3J0IGlmIHdlIGNvbWUgYWNyb3NzIGl0LiAgVGhpcworCQkJCSAqIGlz IGRvbmUgc28gd2UgY2FuIGxvZyB0aGUgYXBwbGljYXRpb25fbmFtZSBpbiB0aGUKKwkJCQkg KiBjb25uZWN0aW9uIGF1dGhvcml6YXRpb24gbWVzc2FnZS4gIE5vdGUgdGhhdCB0aGUgR1VD IHdvdWxkCisJCQkJICogYmUgdXNlZCBidXQgd2UgaGF2ZW4ndCBnb25lIHRocm91Z2ggR1VD IHNldHVwIHlldC4KKwkJCQkgKi8KKwkJCQlpZiAoc3RyY21wKG5hbWVwdHIsICJhcHBsaWNh dGlvbl9uYW1lIikgPT0gMCkKKwkJCQl7CisJCQkJCXBvcnQtPmFwcGxpY2F0aW9uX25hbWUg PSBwZ19jbGVhbl9hc2NpaSh2YWxwdHIsIDApOworCQkJCX0KKwkJCX0KKwkJCW9mZnNldCA9 IHZhbG9mZnNldCArIHN0cmxlbih2YWxwdHIpICsgMTsKKwkJfQorCisJCS8qCisJCSAqIElm IHdlIGRpZG4ndCBmaW5kIGEgcGFja2V0IHRlcm1pbmF0b3IgZXhhY3RseSBhdCB0aGUgZW5k IG9mIHRoZQorCQkgKiBnaXZlbiBwYWNrZXQgbGVuZ3RoLCBjb21wbGFpbi4KKwkJICovCisJ CWlmIChvZmZzZXQgIT0gbGVuIC0gMSkKKwkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfUFJPVE9DT0xfVklPTEFUSU9OKSwKKwkJCQkJIGVycm1zZygiaW52YWxp ZCBzdGFydHVwIHBhY2tldCBsYXlvdXQ6IGV4cGVjdGVkIHRlcm1pbmF0b3IgYXMgbGFzdCBi eXRlIikpKTsKKworCQkvKgorCQkgKiBJZiB0aGUgY2xpZW50IHJlcXVlc3RlZCBhIG5ld2Vy IHByb3RvY29sIHZlcnNpb24gb3IgaWYgdGhlIGNsaWVudAorCQkgKiByZXF1ZXN0ZWQgYW55 IHByb3RvY29sIG9wdGlvbnMgd2UgZGlkbid0IHJlY29nbml6ZSwgbGV0IHRoZW0ga25vdwor CQkgKiB0aGUgbmV3ZXN0IG1pbm9yIHByb3RvY29sIHZlcnNpb24gd2UgZG8gc3VwcG9ydCBh bmQgdGhlIG5hbWVzIG9mCisJCSAqIGFueSB1bnJlY29nbml6ZWQgb3B0aW9ucy4KKwkJICov CisJCWlmIChQR19QUk9UT0NPTF9NSU5PUihwcm90bykgPiBQR19QUk9UT0NPTF9NSU5PUihQ R19QUk9UT0NPTF9MQVRFU1QpIHx8CisJCQl1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9u cyAhPSBOSUwpCisJCQlTZW5kTmVnb3RpYXRlUHJvdG9jb2xWZXJzaW9uKHVucmVjb2duaXpl ZF9wcm90b2NvbF9vcHRpb25zKTsKKwl9CisKKwkvKiBDaGVjayBhIHVzZXIgbmFtZSB3YXMg Z2l2ZW4uICovCisJaWYgKHBvcnQtPnVzZXJfbmFtZSA9PSBOVUxMIHx8IHBvcnQtPnVzZXJf bmFtZVswXSA9PSAnXDAnKQorCQllcmVwb3J0KEZBVEFMLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9BVVRIT1JJWkFUSU9OX1NQRUNJRklDQVRJT04pLAorCQkJCSBlcnJtc2co Im5vIFBvc3RncmVTUUwgdXNlciBuYW1lIHNwZWNpZmllZCBpbiBzdGFydHVwIHBhY2tldCIp KSk7CisKKwkvKiBUaGUgZGF0YWJhc2UgZGVmYXVsdHMgdG8gdGhlIHVzZXIgbmFtZS4gKi8K KwlpZiAocG9ydC0+ZGF0YWJhc2VfbmFtZSA9PSBOVUxMIHx8IHBvcnQtPmRhdGFiYXNlX25h bWVbMF0gPT0gJ1wwJykKKwkJcG9ydC0+ZGF0YWJhc2VfbmFtZSA9IHBzdHJkdXAocG9ydC0+ dXNlcl9uYW1lKTsKKworCWlmIChhbV93YWxzZW5kZXIpCisJCU15QmFja2VuZFR5cGUgPSBC X1dBTF9TRU5ERVI7CisJZWxzZQorCQlNeUJhY2tlbmRUeXBlID0gQl9CQUNLRU5EOworCisJ LyoKKwkgKiBOb3JtYWwgd2Fsc2VuZGVyIGJhY2tlbmRzLCBlLmcuIGZvciBzdHJlYW1pbmcg cmVwbGljYXRpb24sIGFyZSBub3QKKwkgKiBjb25uZWN0ZWQgdG8gYSBwYXJ0aWN1bGFyIGRh dGFiYXNlLiBCdXQgd2Fsc2VuZGVycyB1c2VkIGZvciBsb2dpY2FsCisJICogcmVwbGljYXRp b24gbmVlZCB0byBjb25uZWN0IHRvIGEgc3BlY2lmaWMgZGF0YWJhc2UuIFdlIGFsbG93IHN0 cmVhbWluZworCSAqIHJlcGxpY2F0aW9uIGNvbW1hbmRzIHRvIGJlIGlzc3VlZCBldmVuIGlm IGNvbm5lY3RlZCB0byBhIGRhdGFiYXNlIGFzIGl0CisJICogY2FuIG1ha2Ugc2Vuc2UgdG8g Zmlyc3QgbWFrZSBhIGJhc2ViYWNrdXAgYW5kIHRoZW4gc3RyZWFtIGNoYW5nZXMKKwkgKiBz dGFydGluZyBmcm9tIHRoYXQuCisJICovCisJaWYgKGFtX3dhbHNlbmRlciAmJiAhYW1fZGJf d2Fsc2VuZGVyKQorCQlwb3J0LT5kYXRhYmFzZV9uYW1lWzBdID0gJ1wwJzsKKworCS8qCisJ ICogRG9uZSBmaWxsaW5nIHRoZSBQb3J0IHN0cnVjdHVyZQorCSAqLworCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXJldHVybiBTVEFUVVNfT0s7Cit9CisKKy8q CisgKiBTZW5kIGEgTmVnb3RpYXRlUHJvdG9jb2xWZXJzaW9uIHRvIHRoZSBjbGllbnQuICBU aGlzIGxldHMgdGhlIGNsaWVudCBrbm93CisgKiB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQg YSBuZXdlciBtaW5vciBwcm90b2NvbCB2ZXJzaW9uIHRoYW4gd2UgYXJlIGFibGUKKyAqIHRv IHNwZWFrLiAgV2UnbGwgc3BlYWsgdGhlIGhpZ2hlc3QgdmVyc2lvbiB3ZSBrbm93IGFib3V0 OyB0aGUgY2xpZW50IGNhbiwKKyAqIG9mIGNvdXJzZSwgYWJhbmRvbiB0aGUgY29ubmVjdGlv biBpZiB0aGF0J3MgYSBwcm9ibGVtLgorICoKKyAqIFdlIGFsc28gaW5jbHVkZSBpbiB0aGUg cmVzcG9uc2UgYSBsaXN0IG9mIHByb3RvY29sIG9wdGlvbnMgd2UgZGlkbid0CisgKiB1bmRl cnN0YW5kLiAgVGhpcyBhbGxvd3MgY2xpZW50cyB0byBpbmNsdWRlIG9wdGlvbmFsIHBhcmFt ZXRlcnMgdGhhdCBtaWdodAorICogYmUgcHJlc2VudCBlaXRoZXIgaW4gbmV3ZXIgcHJvdG9j b2wgdmVyc2lvbnMgb3IgdGhpcmQtcGFydHkgcHJvdG9jb2wKKyAqIGV4dGVuc2lvbnMgd2l0 aG91dCBmZWFyIG9mIGhhdmluZyB0byByZWNvbm5lY3QgaWYgdGhvc2Ugb3B0aW9ucyBhcmUg bm90CisgKiB1bmRlcnN0b29kLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIG1ha2luZyBjZXJ0 YWluIHRoYXQgdGhlIGNsaWVudCBpcyBhd2FyZQorICogb2Ygd2hpY2ggb3B0aW9ucyB3ZXJl IGFjdHVhbGx5IGFjY2VwdGVkLgorICovCitzdGF0aWMgdm9pZAorU2VuZE5lZ290aWF0ZVBy b3RvY29sVmVyc2lvbihMaXN0ICp1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9ucykKK3sK KwlTdHJpbmdJbmZvRGF0YSBidWY7CisJTGlzdENlbGwgICAqbGM7CisKKwlwcV9iZWdpbm1l c3NhZ2UoJmJ1ZiwgUHFNc2dfTmVnb3RpYXRlUHJvdG9jb2xWZXJzaW9uKTsKKwlwcV9zZW5k aW50MzIoJmJ1ZiwgUEdfUFJPVE9DT0xfTEFURVNUKTsKKwlwcV9zZW5kaW50MzIoJmJ1Ziwg bGlzdF9sZW5ndGgodW5yZWNvZ25pemVkX3Byb3RvY29sX29wdGlvbnMpKTsKKwlmb3JlYWNo KGxjLCB1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9ucykKKwkJcHFfc2VuZHN0cmluZygm YnVmLCBsZmlyc3QobGMpKTsKKwlwcV9lbmRtZXNzYWdlKCZidWYpOworCisJLyogbm8gbmVl ZCB0byBmbHVzaCwgc29tZSBvdGhlciBtZXNzYWdlIHdpbGwgZm9sbG93ICovCit9CisKKwor LyoKKyAqIFNJR1RFUk0gd2hpbGUgcHJvY2Vzc2luZyBzdGFydHVwIHBhY2tldC4KKyAqCisg KiBSdW5uaW5nIHByb2NfZXhpdCgpIGZyb20gYSBzaWduYWwgaGFuZGxlciB3b3VsZCBiZSBx dWl0ZSB1bnNhZmUuCisgKiBIb3dldmVyLCBzaW5jZSB3ZSBoYXZlIG5vdCB5ZXQgdG91Y2hl ZCBzaGFyZWQgbWVtb3J5LCB3ZSBjYW4ganVzdAorICogcHVsbCB0aGUgcGx1ZyBhbmQgZXhp dCB3aXRob3V0IHJ1bm5pbmcgYW55IGF0ZXhpdCBoYW5kbGVycy4KKyAqCisgKiBPbmUgbWln aHQgYmUgdGVtcHRlZCB0byB0cnkgdG8gc2VuZCBhIG1lc3NhZ2UsIG9yIGxvZyBvbmUsIGlu ZGljYXRpbmcKKyAqIHdoeSB3ZSBhcmUgZGlzY29ubmVjdGluZy4gIEhvd2V2ZXIsIHRoYXQg d291bGQgYmUgcXVpdGUgdW5zYWZlIGluIGl0c2VsZi4KKyAqIEFsc28sIGl0IHNlZW1zIHVu ZGVzaXJhYmxlIHRvIHByb3ZpZGUgY2x1ZXMgYWJvdXQgdGhlIGRhdGFiYXNlJ3Mgc3RhdGUK KyAqIHRvIGEgY2xpZW50IHRoYXQgaGFzIG5vdCB5ZXQgY29tcGxldGVkIGF1dGhlbnRpY2F0 aW9uLCBvciBldmVuIHNlbnQgdXMKKyAqIGEgc3RhcnR1cCBwYWNrZXQuCisgKi8KK3N0YXRp YyB2b2lkCitwcm9jZXNzX3N0YXJ0dXBfcGFja2V0X2RpZShTSUdOQUxfQVJHUykKK3sKKwlf ZXhpdCgxKTsKK30KKworLyoKKyAqIFRpbWVvdXQgd2hpbGUgcHJvY2Vzc2luZyBzdGFydHVw IHBhY2tldC4KKyAqIEFzIGZvciBwcm9jZXNzX3N0YXJ0dXBfcGFja2V0X2RpZSgpLCB3ZSBl eGl0IHZpYSBfZXhpdCgxKS4KKyAqLworc3RhdGljIHZvaWQKK1N0YXJ0dXBQYWNrZXRUaW1l b3V0SGFuZGxlcih2b2lkKQoreworCV9leGl0KDEpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdGNvcC9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL3Rjb3AvbWVzb24uYnVpbGQK aW5kZXggNTVjNDk4MDlmZTguLjVjZTQwMDMzMzgzIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC90Y29wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvbWVzb24uYnVpbGQK QEAgLTEsNiArMSw3IEBACiAjIENvcHlyaWdodCAoYykgMjAyMi0yMDIzLCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogCiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMo CisgICdiYWNrZW5kX3N0YXJ0dXAuYycsCiAgICdjbWR0YWcuYycsCiAgICdkZXN0LmMnLAog ICAnZmFzdHBhdGguYycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3Bv c3RtYXN0ZXIuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oCmluZGV4 IDAzMWEyZmYxNTIxLi45ODY3MDIwMjA3MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9z dG1hc3Rlci9wb3N0bWFzdGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wb3N0 bWFzdGVyLmgKQEAgLTUwLDYgKzUwLDkgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBwb3N0 bWFzdGVyX2FsaXZlX2Zkc1syXTsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IGNoYXIg KnByb2duYW1lOwogCisvKiBYWFg6IHdoZXJlIGRvZXMgdGhpcyBiZWxvbmc/ICovCitleHRl cm4gYm9vbCBMb2FkZWRTU0w7CisKIGV4dGVybiB2b2lkIFBvc3RtYXN0ZXJNYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogZXh0ZXJuIHZv aWQgQ2xvc2VQb3N0bWFzdGVyUG9ydHMoYm9vbCBhbV9zeXNsb2dnZXIpOwogZXh0ZXJuIHZv aWQgSW5pdFByb2Nlc3NHbG9iYWxzKHZvaWQpOwpAQCAtNTksNiArNjIsNyBAQCBleHRlcm4g aW50CU1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4odm9pZCk7CiBleHRlcm4gYm9vbCBQb3N0 bWFzdGVyTWFya1BJREZvcldvcmtlck5vdGlmeShpbnQpOwogCiBleHRlcm4gdm9pZCBCYWNr ZW5kTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBw Z19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIHByb2Nlc3NDYW5jZWxSZXF1 ZXN0KGludCBiYWNrZW5kUElELCBpbnQzMiBjYW5jZWxBdXRoQ29kZSk7CiAKICNpZmRlZiBF WEVDX0JBQ0tFTkQKIGV4dGVybiBTaXplIFNobWVtQmFja2VuZEFycmF5U2l6ZSh2b2lkKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvYmFja2VuZF9zdGFydHVwLmggYi9zcmMv aW5jbHVkZS90Y29wL2JhY2tlbmRfc3RhcnR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi42NDNhYTcxNTBiNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9p bmNsdWRlL3Rjb3AvYmFja2VuZF9zdGFydHVwLmgKQEAgLTAsMCArMSw0MSBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogYmFja2VuZF9zdGFydHVwLmgKKyAqCSAgcHJvdG90 eXBlcyBmb3IgYmFja2VuZF9zdGFydHVwLmMuCisgKgorICoKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2 ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS90Y29wL2JhY2tlbmRf c3RhcnR1cC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgQkFD S0VORF9TVEFSVFVQX0gKKyNkZWZpbmUgQkFDS0VORF9TVEFSVFVQX0gKKworLyoKKyAqIENB Q19zdGF0ZSBpcyBwYXNzZWQgZnJvbSBwb3N0bWFzdGVyIHRvIHRoZSBiYWNrZW5kIHByb2Nl c3MsIHRvIGluZGljYXRlCisgKiB3aGV0aGVyIHRoZSBjb25uZWN0aW9uIHNob3VsZCBiZSBh Y2NlcHRlZCwgb3IgaWYgdGhlIHByb2Nlc3Mgc2hvdWxkIGp1c3QKKyAqIHNlbmQgYW4gZXJy b3IgdG8gdGhlIGNsaWVudCBhbmQgY2xvc2UgdGhlIGNubmVjdGlvbi4gIE5vdGUgdGhhdCB0 aGUKKyAqIGNvbm5lY3Rpb24gY2FuIGZhaWwgZm9yIHZhcmlvdXMgcmVhc29ucyBldmVuIGlm IHBvc3RtYXN0ZXIgcGFzc2VkIENBQ19PSy4KKyAqLwordHlwZWRlZiBlbnVtIENBQ19zdGF0 ZQoreworCUNBQ19PSywKKwlDQUNfU1RBUlRVUCwKKwlDQUNfU0hVVERPV04sCisJQ0FDX1JF Q09WRVJZLAorCUNBQ19OT1RDT05TSVNURU5ULAorCUNBQ19UT09NQU5ZLAorfSBDQUNfc3Rh dGU7CisKKy8qIEluZm9ybWF0aW9uIHBhc3NlZCBmcm9tIHBvc3RtYXN0ZXIgdG8gYmFja2Vu ZCBwcm9jZXNzIGluICdzdGFydHVwX2RhdGEnICovCit0eXBlZGVmIHN0cnVjdCBCYWNrZW5k U3RhcnR1cEluZm8KK3sKKwlDQUNfc3RhdGUJY2FuQWNjZXB0Q29ubmVjdGlvbnM7Cit9IEJh Y2tlbmRTdGFydHVwSW5mbzsKKworZXh0ZXJuIHZvaWQgQmFja2VuZE1haW4oY2hhciAqc3Rh cnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikgcGdfYXR0cmlidXRlX25vcmV0 dXJuKCk7CisKKyNlbmRpZgkJCQkJCQkvKiBCQUNLRU5EX1NUQVJUVVBfSCAqLwotLSAKMi4z OS4yCgo= --------------oZdu1r1d4zA157Kzh0ND2Ywg--