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.96) (envelope-from ) id 1vRfMD-001n8h-21 for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Dec 2025 23:37:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vRfMB-00APEA-0O for pgsql-hackers@arkaria.postgresql.org; Fri, 05 Dec 2025 23:36:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vRfMA-00APE2-1Y for pgsql-hackers@lists.postgresql.org; Fri, 05 Dec 2025 23:36:59 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vRfM7-003MP7-1t for pgsql-hackers@lists.postgresql.org; Fri, 05 Dec 2025 23:36:58 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (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 4dNST02gffz49QBk; Sat, 06 Dec 2025 01:36:52 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1764977813; 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=13hp7eWpaR6sBYhPotJGRv+9nNV2rO4kQswW73afdfg=; b=oog9j2HA49aiP9vF1SsdU0xdpTlCCV2/uf6dE/PF0bbqlR6a0njdLJG8ui6Gfz8cKZvQnw hd7BNz1oRHtDDp7fJGymwWVZNM4C1YSKE1mfbY045KILj7ZnhUWWN6/w3PIA1aIKyE6KSk 0DQwdln/a28JZ51syOlWcJtqrp1ibrbmKOVVVybLqtntq/kiHhFhI3DB2Oj8+7hUXEnbYE 27CBi/lQ9QLwWwct3JXXxbJVFY2FtH1IlfnvwurCFQpGwn6hurnJB77bmgayPRQGwFcaxU Y3v6UTIRZEuWzaQWKVCk0PywJwJnkApAaePMteYqYOXi+5QZN5Tt/5k9lXI1Cw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1764977813; 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=13hp7eWpaR6sBYhPotJGRv+9nNV2rO4kQswW73afdfg=; b=sWI9Lx5wr8xWZINg2w6EM03A2Bo0QzBExBfGEGhqiHkKyBifnzxG9LkT5S6vp9xaNGJeWu bqdxqeQ3zSpENAApZMTclvQIuKvHnXYFM4838t72akrrOIMzsyKwjh01oblZRWnz8UHo0/ auQBsZPJMAJAdAJ8ycPcNfERfKztYWC1K+vFioZrLAnGvc5HMkIJWaAem+svT0I2HOxQ6c Dy3Hzxk3Pefx5I+uR9WR/McAIqilsSW9Wn/AvTBkXUFV43D6aH+tmSdxXy2v3nFH+WDHwn REcEy/dKE+jFOngU61h/s9dv8E/1M2KK4LpCy034ZhLDyddjP5QBFOK3U8bJ5g== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1764977813; b=HZfVzpK/M2YfhzBIx7NBkiGJfN5E53tWGZcXvAH2sXN8YcKd6HP0CfLgErNiXuubbX5yjX lvAjdlAvmPSYHIPMDn/tW2/0tuT8pQEPX7sfzuzwPDM/3b64LhlKya+CIv6lBfasf3GYRU Pwjcm/Hf+sDMFiwQxcUC2OAm7uB2ZlSbuWdUCnRZVVft/x5KliGOsKryvqfZv/fcDWUTnh YSsfvyS+qaeblDAganwej63p6TJjgbtPdZ0oCbhgQMgvXLkAqCPTqb8n3HFiuUCMvJ7J/h bzJ0hZuADUHCvi1i5/ThycKy98nXaPpu8FPE3MLX8SkUHCzdn0CJxhFTh4gIDw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------Mh0O0oQEG4RlVt2m409CzgGo" Message-ID: <2c62322e-a0e3-49cd-b369-370718a8efd8@iki.fi> Date: Sat, 6 Dec 2025 01:36:46 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC: make mxidoff 64 bits To: Ashutosh Bapat , Maxim Orlov Cc: Alvaro Herrera , Alexander Korotkov , wenhui qiu , Postgres hackers References: <2bc58592-9d74-4af0-bdd1-1a88e8683f7c@iki.fi> <36531c0e-292c-409d-bbc7-a252cf6e910a@iki.fi> <54aa8f65-f0e4-4464-b543-e0399c1cab1e@iki.fi> <4a9dda70-0af7-41a4-9636-b168f2fc48ef@iki.fi> <46cc45e9-fddd-44bc-bcb3-96889aafd921@iki.fi> <6c298bc4-7029-4c1d-bf16-3e094842ce32@iki.fi> Content-Language: en-US From: Heikki Linnakangas In-Reply-To: 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. --------------Mh0O0oQEG4RlVt2m409CzgGo Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit After a little detour to the "IPC/MultixactCreation on the Standby server" issue [1], I'm back to working on this. New patch version attached, addressing your comments and Maxim's. On 05/12/2025 15:42, Ashutosh Bapat wrote: > There is duplication of code/functionality between server and > pg_upgrade. With it we carry all the risks that come with > code/functionality duplication like the copies going out of sync. > There may be a valid reason to do that but it's not documented in the > comments. At-least both mutlixact_new.c and slru_io.c are not as well > commented as their server counterparts. I understand that the SLRU > code in the server deals with shared memory which is not needed in > pg_upgrade; pg_upgrade will not need more than one buffer in memory > and pg_upgrade code doesn't need to deal with lock and it can not deal > with locks. That means the code required by pg_upgrade is much simpler > than that on the server. But there's also non-trivial code which is > required in both the cases. WIll it be possible to extract parts of > slru.c which deal with IO into slru_io.c, make it part of the core and > then use it in pg_upgrade as well as slru.c? Or whether it's possible > to make SLRU use local memory? And throwing some FRONTEND magic to the > mix, we may be able to avoid duplication. Have we tried this or > something else to avoid duplication? Sorry, if this has been discussed > earlier. Please point me to the relevant discussion if so. That's a fair point, but I think it's better to have some code duplication in this case, than trying to write code that works for both the server and for pg_upgrade. The needs are so different. > 007_multixact_conversion.pl fires thousands of queries through > BackgroundPsql which prints debug output for each of the queries. When > running this file with oldinstall set, > 2.2M regress_log_007_multixact_conversion (size of file) > 77874 regress_log_007_multixact_conversion (wc -l output) > > > Since this output is also copied in testlog.txt, the effect is two-fold. > > > Most, if not all, of this output is useless. It also makes it hard to > find the output we are looking for. PFA patch which reduces this > output. The patch adds a flag verbose to query_safe() and query() to > toggle this output. With the patch the sizes are > 27K regress_log_007_multixact_conversion > 588 regress_log_007_multixact_conversion > > > And it makes the test faster by about a second or two on my laptop. > Something on those lines or other is required to reduce the output > from query_safe(). Nice! That log bloat was the reason I bundled together the "COMMIT; BEGIN; SELECT ...;" steps into one statement in the loop. Your solution addresses it more directly. I turned 'verbose' into a keyword parameter, for future extensibility of those functions, so you now call it like "$node->query_safe("SELECT 1", verbose => 0);". I also set "log_statements=none" in those connections, to reduce the noise in the server log too. > Some more comments > +++ b/src/bin/pg_upgrade/multixact_old.c > > > We may need to introduce new _new and then _old will become _older. > Should we rename the files to have pre19 and post19 or some similar > suffixes which make it clear what is meant by old and new? +1. I renamed multixact_old.c to multixact_pre_v19.c. And multixact_new.c to multixact_rewrite.c. I also moved the "convert_multixact" function that drives the conversion to multixact_rewrite.c. The idea is that if in the future we change the format again, we will have: multixact_pre_v19.c # for reading -v19 files multixact_pre_v24.c # for reading v19-v23 files multixact_rewrite.c # for writing new files Hard to predict what a possible future format might look like and how we'd want to organize the code then, though. This can be changed then if needed, but it makes sense now. > +static inline int64 > +MultiXactIdToOffsetPage(MultiXactId multi) > > > The prologue mentions that the definitions are copy-pasted from > multixact.c from version 18, but they share the names with functions > in the current version. I think that's going to be a good source of > confusion especially in a file which is a few hundred lines long. Can > we rename them to have "Old" prefix or something similar? Fair. On the other hand, having the same names makes it easier to see what the real differences with the server functions are. Not sure what's best here.. As long as we use the same names, it's important that multixact_pre_v19.c doesn't #include the new definitions. I added some comments on that, and also this safeguard: #define MultiXactOffset should_not_be_used That actually caught one (harmless) instance in the file where we had not renamed MultiXactOffset to OldMultiXactOffset. I'm not entirely happy with the "Old" prefix here, because as you pointed out, we might end up needing "older" or "oldold" in the future. I couldn't come up with anything better though. "PreV19MultiXactOffset" is quite a mouthful. > +# Dump contents of the 'mxofftest' table, created by mxact_workload > +sub get_dump_for_comparison > > > This local function shares its name with a local function in > 002_pg_upgrade.pl. Better to use a separate name. Also it's not > "dumping" data using "pg_dump", so "dump" in the name can be > misleading. Renamed to "get_test_table_contents" > + $newnode->start; > + my $new_dump = get_dump_for_comparison($newnode, "newnode_${tag}_dump"); > + $newnode->stop; > > > There is no code which actually looks at the multixact offsets here to > make sure that the conversion happened correctly. I guess the test > relies on visibility checks for that. Anyway, we need a comment > explaining why just comparing the contents of the table is enough to > ensure correct conversion. Better if we can add an explicit test that > the offsets were converted correctly. I don't have any idea of how to > do that right now, though. Maybe use pg_get_multixact_members() > somehow in the query to extract data out of the table? Agreed, the verification here is quite weak. I didn't realize that pg_get_multixact_members() exists! That might indeed be handy here, but I'm not sure how exactly to construct the test. A direct C function like test_create_multixact() in test_multixact.c would be handy here, but we'd need to compile and do run that in the old cluster, which seems difficult. > + compare_files($old_dump, $new_dump, > + 'dump outputs from original and restored regression databases match'); > > > A shared test name too :); but there is not regression database here. Fixed :-) > + > + note ">>> case #${tag}\n" > + . " oldnode mxoff from ${start_mxoff} to ${finish_mxoff}\n" > + . " newnode mxoff ${new_next_mxoff}\n"; > > > Should we check that some condition holds between finish_mxoff and > new_next_mxoff? Got something in mind that we could check? On 04/12/2025 17:33, Maxim Orlov wrote: > On Thu, 4 Dec 2025 at 13:39, Heikki Linnakangas wrote: >> However, that doesn't hold for pg_upgrade. pg_upgrade will try to read >> all the multixids. So we need to make the multixact reading code >> tolerant of the situations that could be present after a crash. I think >> the right philosophy here is that we try to read all the old multixids, >> and do our best to interpret them the same way that the old server >> would. > > Something like attached? +1 > Now previous scheme of upgrade with the bytes joggling start > looking not so bad. Just a funny thought that came to my mind. :-) >> Perhaps we should check that all the files exist and have the correct >> sizes in the pre-check stage > > Not sure about it. Because SLRU does not support "holes", simply > checking if the first and last multixacts exist will be enough. But > we'll do it anyway in a real conversion. Yeah, the point would be to complain if there are holes when there shouldn't be. As a sanity check. There's a reason to not do that though: if you use pg_resetwal to skip over some multixids, you end up with holes. We shouldn't encourage people to use pg_resetwal, but it seems reasonable to tolerate it if you have done it. I worked some more on this. One notable change is that in light of the "IPC/MultixactCreation on the Standby server" changes [1], we need to always write the next multixid's offset, even if the next multixid itself is invalid. Because otherwise the previous multixid is unreadable too. The SlruReadSwitchPageSlow() function didn't handle short reads properly. As a result, if an SLRU file was shorter than expected, the buffer kept its old contents when switching to read the missing page. Fixed that so that the missing part is read as all-zeros instead. I removed the warnings from some of the invalid multixid cases, like if the offset or some of the members are zeros. Those cases can legitimately happen after crash and restart, so we shouldn't complain about them. If a multixid has more than one updating member, I kept that as a fatal error. That really should not happen. To summarize, the behavior now is that if an old SLRU file does not exist, you get an error. If an SLRU file is too short, you get warnings and the missing pages are read as all-zeros, i.e. all the multixids on the missing pages are considered invalid. If an individual multixid is invalid, because the offset is zero, it's silently written as invalid in the new file too. I'm still not 100% sure what the desired behavior for missing files is. For now, I didn't include the pre-checks for the first and last files in this version. You can end up with missing files if you skip over many multixids with pg_resetwal. Or it could be a sign of lost data. If it's lost data, would you prefer for the upgrade to fail, or continue upgrading the data that you have? The conversion shouldn't make things worse, if the data was already lost, but then again, if something really bad has happened, all bets are off and perhaps it would be best to abort and complain loudly. [1] https://www.postgresql.org/message-id/172e5723-d65f-4eec-b512-14beacb326ce@yandex.ru - Heikki --------------Mh0O0oQEG4RlVt2m409CzgGo Content-Type: text/x-patch; charset=UTF-8; name="v28-0001-pg_resetwal-Reject-negative-and-out-of-range-arg.patch" Content-Disposition: attachment; filename*0="v28-0001-pg_resetwal-Reject-negative-and-out-of-range-arg.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1NWFmNWNlMjVhN2EzZjQ2NGZhZWVlYThkOGJmNWFiMjE1YzczZjM0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTkgTm92IDIwMjUgMTY6MzY6MDAgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyOCAxLzZdIHBnX3Jlc2V0d2FsOiBSZWplY3QgbmVnYXRpdmUg YW5kIG91dCBvZiByYW5nZQogYXJndW1lbnRzCgpUaGUgc3RydG91bCgpIGZ1bmN0aW9uIHRo YXQgd2UgdXNlZCB0byBwYXJzZSBtYW55IG9mIHRoZSBvcHRpb25zCmFjY2VwdHMgbmVnYXRp dmUgdmFsdWVzLCBhbmQgc2lsZW50bHkgd3JhcHMgdGhlbSB0byB0aGUgZXF1aXZhbGVudAp1 bnNpZ25lZCB2YWx1ZXMuIEZvciBleGFtcGxlLCAtMSBiZWNvbWVzIDB4RkZGRkZGRkYsIG9u IHBsYXRmb3Jtcwp3aGVyZSB1bnNpZ25lZCBsb25nIGlzIDMyIGJpdHMgd2lkZS4gQWxzbywg b24gcGxhdGZvcm1zIHdoZXJlCiJ1bnNpZ25lZCBsb25nIiBpcyA2NCBiaXRzIHdpZGUsIHdl IHNpbGVudGx5IGNhc3RlZCB2YWx1ZXMgbGFyZ2VyIHRoYW4KVUlOVDMyX01BWCB0byB0aGUg ZXF1aXZhbGVudCAzMi1iaXQgdmFsdWUuIEJvdGggb2YgdGhvc2UgYmVoYXZpb3JzCnNlZW0g dW5kZXNpcmVhYmxlLCBzbyB0aWdodGVuIHVwIHRoZSBwYXJzaW5nIHRvIHJlamVjdCBuZWdh dGl2ZSBhbmQKdG9vIGxhcmdlIHZhbHVlcy4KLS0tCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3Bn X3Jlc2V0d2FsLmMgIHwgNjQgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBzcmMv YmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsIHwgMTkgKysrKysrKystCiAyIGZpbGVz IGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVz ZXR3YWwvcGdfcmVzZXR3YWwuYwppbmRleCA4ZDVkOTgwNTI3OS4uOGNhOGRhZDAxYTAgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYworKysgYi9zcmMv YmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKQEAgLTkyLDYgKzkyLDcgQEAgc3RhdGlj IHZvaWQgS2lsbEV4aXN0aW5nQXJjaGl2ZVN0YXR1cyh2b2lkKTsKIHN0YXRpYyB2b2lkIEtp bGxFeGlzdGluZ1dBTFN1bW1hcmllcyh2b2lkKTsKIHN0YXRpYyB2b2lkIFdyaXRlRW1wdHlY TE9HKHZvaWQpOwogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCk7CitzdGF0aWMgdWludDMyIHN0 cnRvdWludDMyX3N0cmljdChjb25zdCBjaGFyICpyZXN0cmljdCBzLCBjaGFyICoqcmVzdHJp Y3QgZW5kcHRyLCBpbnQgYmFzZSk7CiAKIAogaW50CkBAIC0xMjAsNyArMTIxLDYgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCU11bHRpWGFjdElkIHNldF9vbGRlc3RteGlk ID0gMDsKIAljaGFyCSAgICplbmRwdHI7CiAJY2hhcgkgICAqZW5kcHRyMjsKLQlpbnQ2NAkJ dG1waTY0OwogCWNoYXIJICAgKkRhdGFEaXIgPSBOVUxMOwogCWNoYXIJICAgKmxvZ19mbmFt ZSA9IE5VTEw7CiAJaW50CQkJZmQ7CkBAIC0xNjIsNyArMTYyLDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdlJzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJ c2V0X3hpZF9lcG9jaCA9IHN0cnRvdWwob3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQlzZXRf eGlkX2Vwb2NoID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CiAJ CQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vICE9 IDApCiAJCQkJewogCQkJCQkvKi0tLS0tLQpAQCAtMTc3LDcgKzE3Nyw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAndSc6CiAJCQkJZXJybm8gPSAwOwot CQkJCXNldF9vbGRlc3RfeGlkID0gc3RydG91bChvcHRhcmcsICZlbmRwdHIsIDApOworCQkJ CXNldF9vbGRlc3RfeGlkID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwg MCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVy cm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQg Zm9yIG9wdGlvbiAlcyIsICItdSIpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAneCc6CiAJCQkJZXJybm8gPSAwOwotCQkJ CXNldF94aWQgPSBzdHJ0b3VsKG9wdGFyZywgJmVuZHB0ciwgMCk7CisJCQkJc2V0X3hpZCA9 IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRw dHIgPT0gb3B0YXJnIHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsK IAkJCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAi LXgiKTsKQEAgLTIwMyw3ICsyMDMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAKIAkJCWNhc2UgJ2MnOgogCQkJCWVycm5vID0gMDsKLQkJCQlzZXRfb2xkZXN0X2NvbW1p dF90c194aWQgPSBzdHJ0b3VsKG9wdGFyZywgJmVuZHB0ciwgMCk7CisJCQkJc2V0X29sZGVz dF9jb21taXRfdHNfeGlkID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwg MCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnLCcgfHwgZXJy bm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBhcmd1bWVudCBm b3Igb3B0aW9uICVzIiwgIi1jIik7CkBAIC0yMjksNyArMjI5LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdvJzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJ c2V0X29pZCA9IHN0cnRvdWwob3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQlzZXRfb2lkID0g c3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0 ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vICE9IDApCiAJCQkJewog CQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlvbiAlcyIsICIt byIpOwpAQCAtMjQyLDcgKzI0Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAogCQkJY2FzZSAnbSc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9teGlkID0gc3RydG91 bChvcHRhcmcsICZlbmRwdHIsIDApOworCQkJCXNldF9teGlkID0gc3RydG91aW50MzJfc3Ry aWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwg KmVuZHB0ciAhPSAnLCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJv cigiaW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1tIik7CkBAIC0yNTAsNyAr MjUwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCQlleGl0KDEpOwog CQkJCX0KIAotCQkJCXNldF9vbGRlc3RteGlkID0gc3RydG91bChlbmRwdHIgKyAxLCAmZW5k cHRyMiwgMCk7CisJCQkJc2V0X29sZGVzdG14aWQgPSBzdHJ0b3VpbnQzMl9zdHJpY3QoZW5k cHRyICsgMSwgJmVuZHB0cjIsIDApOwogCQkJCWlmIChlbmRwdHIyID09IGVuZHB0ciArIDEg fHwgKmVuZHB0cjIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsKIAkJCQkJcGdfbG9n X2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAiLW0iKTsKQEAgLTI2 OSwxNyArMjY5LDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2Fz ZSAnTyc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXRtcGk2NCA9IHN0cnRvaTY0KG9wdGFyZywg JmVuZHB0ciwgMCk7CisJCQkJc2V0X214b2ZmID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFy ZywgJmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAh PSAnXDAnIHx8IGVycm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFs aWQgYXJndW1lbnQgZm9yIG9wdGlvbiAlcyIsICItTyIpOwogCQkJCQlwZ19sb2dfZXJyb3Jf aGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25h bWUpOwogCQkJCQlleGl0KDEpOwogCQkJCX0KLQkJCQlpZiAodG1waTY0IDwgMCB8fCB0bXBp NjQgPiAoaW50NjQpIE1heE11bHRpWGFjdE9mZnNldCkKLQkJCQkJcGdfZmF0YWwoIm11bHRp dHJhbnNhY3Rpb24gb2Zmc2V0ICgtTykgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICV1IiwgTWF4 TXVsdGlYYWN0T2Zmc2V0KTsKLQotCQkJCXNldF9teG9mZiA9IChNdWx0aVhhY3RPZmZzZXQp IHRtcGk2NDsKIAkJCQlteG9mZl9naXZlbiA9IHRydWU7CiAJCQkJYnJlYWs7CiAKQEAgLTEy MTQsMyArMTIxMCw0NSBAQCB1c2FnZSh2b2lkKQogCXByaW50ZihfKCJcblJlcG9ydCBidWdz IHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21l IHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKIH0KKworLyoK KyAqIHN0cnRvdWludDMyX3N0cmljdCAtLSBsaWtlIHN0cnRvdWwoKSwgYnV0IHJldHVybnMg dWludDMyIGFuZCBkb2Vzbid0IGFjY2VwdAorICogbmVnYXRpdmUgdmFsdWVzCisgKi8KK3N0 YXRpYyB1aW50MzIKK3N0cnRvdWludDMyX3N0cmljdChjb25zdCBjaGFyICpyZXN0cmljdCBz LCBjaGFyICoqcmVzdHJpY3QgZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25n IHZhbDsKKwlib29sCQlpc19uZWc7CisKKwkvKiBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSAq LworCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJcysrOworCisJLyoKKwkgKiBJcyBpdCBuZWdh dGl2ZT8gIFdlIHN0aWxsIGNhbGwgc3RydG91bCgpIGlmIGl0IHdhcywgdG8gc2V0ICdlbmRw dHInLgorCSAqIChUaGUgY3VycmVudCBjYWxsZXJzIGRvbid0IGNhcmUgdGhvdWdoLikKKwkg Ki8KKwlpc19uZWcgPSAoKnMgPT0gJy0nKTsKKworCXZhbCA9IHN0cnRvdWwocywgZW5kcHRy LCBiYXNlKTsKKworCS8qIHJlamVjdCBpZiBpdCB3YXMgbmVnYXRpdmUgKi8KKwlpZiAoZXJy bm8gPT0gMCAmJiBpc19uZWcpCisJeworCQllcnJubyA9IEVSQU5HRTsKKwkJdmFsID0gMDsK Kwl9CisKKwkvKgorCSAqIHJlamVjdCB2YWx1ZXMgbGFyZ2VyIHRoYW4gVUlOVDMyX01BWCBv biBwbGF0Zm9ybXMgd2hlcmUgbG9uZyBpcyA2NCBiaXRzCisJICogd2lkZS4KKwkgKi8KKwlp ZiAoZXJybm8gPT0gMCAmJiB2YWwgIT0gKHVpbnQzMikgdmFsKQorCXsKKwkJZXJybm8gPSBF UkFOR0U7CisJCXZhbCA9IFVJTlQzMl9NQVg7CisJfQorCisJcmV0dXJuICh1aW50MzIpIHZh bDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwg Yi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCmluZGV4IDkwZWNiOGFmZTE4 Li5lOTc4MGRiZTJhNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9i YXNpYy5wbAorKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCkBAIC0x MDMsNyArMTAzLDcgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdmYWlscyB3aXRoIGluY29y cmVjdCAtZSBvcHRpb24nKTsKIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19yZXNldHdh bCcsICctZScgPT4gJy0xJywgJG5vZGUtPmRhdGFfZGlyIF0sCi0JcXIvbXVzdCBub3QgYmUg LTEvLAorCXFyL2Vycm9yOiBpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gLWUvLAogCSdm YWlscyB3aXRoIC1lIHZhbHVlIC0xJyk7CiAjIC1sCiBjb21tYW5kX2ZhaWxzX2xpa2UoCkBA IC0xNDUsNyArMTQ1LDcgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdmYWlscyB3aXRoIGlu Y29ycmVjdCAtTyBvcHRpb24nKTsKIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19yZXNl dHdhbCcsICctTycgPT4gJy0xJywgJG5vZGUtPmRhdGFfZGlyIF0sCi0JcXIvbXVzdCBiZSBi ZXR3ZWVuIDAgYW5kIDQyOTQ5NjcyOTUvLAorCXFyL2Vycm9yOiBpbnZhbGlkIGFyZ3VtZW50 IGZvciBvcHRpb24gLU8vLAogCSdmYWlscyB3aXRoIC1PIHZhbHVlIC0xJyk7CiAjIC0td2Fs LXNlZ3NpemUKIGNvbW1hbmRfZmFpbHNfbGlrZSgKQEAgLTE3NSw2ICsxNzUsMjEgQEAgY29t bWFuZF9mYWlsc19saWtlKAogCXFyL211c3QgYmUgZ3JlYXRlciB0aGFuLywKIAknZmFpbHMg d2l0aCAteCB2YWx1ZSB0b28gc21hbGwnKTsKIAorIyBDaGVjayBvdXQgb2YgcmFuZ2UgdmFs dWVzIHdpdGggLXguIFRoZXNlIGFyZSBmb3JiaWRkZW4gZm9yIGFsbCBvdGhlcgorIyAzMi1i aXQgdmFsdWVzIHRvbywgYnV0IHdlIHVzZSBqdXN0IC14IHRvIGV4ZXJjaXNlIHRoZSBwYXJz aW5nLgorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc2V0d2FsJywgJy14JyA9PiAn LTEnLCAkbm9kZS0+ZGF0YV9kaXIgXSwKKwlxci9lcnJvcjogaW52YWxpZCBhcmd1bWVudCBm b3Igb3B0aW9uIC14LywKKwknZmFpbHMgd2l0aCAteCB2YWx1ZSAtMScpOworY29tbWFuZF9m YWlsc19saWtlKAorCVsgJ3BnX3Jlc2V0d2FsJywgJy14JyA9PiAnLTEwMCcsICRub2RlLT5k YXRhX2RpciBdLAorCXFyL2Vycm9yOiBpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gLXgv LAorCSdmYWlscyB3aXRoIG5lZ2F0aXZlIC14IHZhbHVlJyk7Citjb21tYW5kX2ZhaWxzX2xp a2UoCisJWyAncGdfcmVzZXR3YWwnLCAnLXgnID0+ICcxMDAwMDAwMDAwMCcsICRub2RlLT5k YXRhX2RpciBdLAorCXFyL2Vycm9yOiBpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gLXgv LAorCSdmYWlscyB3aXRoIC14IHZhbHVlIHRvbyBsYXJnZScpOworCiAjIC0tY2hhci1zaWdu ZWRuZXNzCiBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJWyAncGdfcmVzZXR3YWwnLCAnLS1jaGFy LXNpZ25lZG5lc3MnLCAnZm9vJywgJG5vZGUtPmRhdGFfZGlyIF0sCi0tIAoyLjQ3LjMKCg== --------------Mh0O0oQEG4RlVt2m409CzgGo Content-Type: text/x-patch; charset=UTF-8; name="v28-0002-pg_resetwal-Use-separate-flags-for-whether-an-op.patch" Content-Disposition: attachment; filename*0="v28-0002-pg_resetwal-Use-separate-flags-for-whether-an-op.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhZmIzNzAzNzQyZTJlZjY5YjE5NDIwODkxZDdkODdlODFlZTllMGM1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMyBEZWMgMjAyNSAyMDo0ODo0OCArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjI4IDIvNl0gcGdfcmVzZXR3YWw6IFVzZSBzZXBhcmF0ZSBmbGFn cyBmb3Igd2hldGhlciBhbiBvcHRpb24KIGlzIGdpdmVuCgpDdXJyZW50bHksIHdlIHVzZSBz cGVjaWFsIHZhbHVlcyB0aGF0IGFyZSBvdGhlcndpc2UgaW52YWxpZCBmb3IgZWFjaApvcHRp b24gdG8gaW5kaWNhdGUgIm9wdGlvbiB3YXMgbm90IGdpdmVuIi4gUmVwbGFjZSB0aGF0IHdp dGggc2VwYXJhdGUKYm9vbGVhbiB2YXJpYWJsZXMgZm9yIGVhY2ggb3B0aW9uLiBJdCBzZWVt cyBtb3JlIGNsZWFyIHRvIGJlIGV4cGxpY2l0LgoKV2Ugd2VyZSBhbHJlYWR5IGRvaW5nIHRo YXQgZm9yIHRoZSAtbSBvcHRpb24sIGJlY2F1c2UgdGhlcmUgd2VyZSBubwppbnZhbGlkIHZh bHVlcyBmb3IgbmV4dE11bHRpIHRoYXQgd2UgY291bGQgdXNlIChzaW5jZSBjb21taXQKOTQ5 MzljNWYzYSkuCi0tLQogc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jIHwgMTY2 ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDk1IGlu c2VydGlvbnMoKyksIDcxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf cmVzZXR3YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3 YWwuYwppbmRleCA4Y2E4ZGFkMDFhMC4uYzY2N2ExMWNiNmEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYworKysgYi9zcmMvYmluL3BnX3Jlc2V0d2Fs L3BnX3Jlc2V0d2FsLmMKQEAgLTY0LDIxICs2NCw0MyBAQCBzdGF0aWMgQ29udHJvbEZpbGVE YXRhIENvbnRyb2xGaWxlOyAvKiBwZ19jb250cm9sIHZhbHVlcyAqLwogc3RhdGljIFhMb2dT ZWdObyBuZXdYbG9nU2VnTm87CS8qIG5ldyBYTE9HIHNlZ21lbnQgIyAqLwogc3RhdGljIGJv b2wgZ3Vlc3NlZCA9IGZhbHNlOwkvKiBUIGlmIHdlIGhhZCB0byBndWVzcyBhdCBhbnkgdmFs dWVzICovCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7Ci1zdGF0aWMgdWludDMyIHNl dF94aWRfZXBvY2ggPSAodWludDMyKSAtMTsKLXN0YXRpYyBUcmFuc2FjdGlvbklkIHNldF9v bGRlc3RfeGlkID0gMDsKLXN0YXRpYyBUcmFuc2FjdGlvbklkIHNldF94aWQgPSAwOwotc3Rh dGljIFRyYW5zYWN0aW9uSWQgc2V0X29sZGVzdF9jb21taXRfdHNfeGlkID0gMDsKLXN0YXRp YyBUcmFuc2FjdGlvbklkIHNldF9uZXdlc3RfY29tbWl0X3RzX3hpZCA9IDA7Ci1zdGF0aWMg T2lkCXNldF9vaWQgPSAwOwotc3RhdGljIGJvb2wgbXhpZF9naXZlbiA9IGZhbHNlOwotc3Rh dGljIE11bHRpWGFjdElkIHNldF9teGlkID0gMDsKLXN0YXRpYyBib29sIG14b2ZmX2dpdmVu ID0gZmFsc2U7Ci1zdGF0aWMgTXVsdGlYYWN0T2Zmc2V0IHNldF9teG9mZiA9IDA7CisKKy8q CisgKiBOZXcgdmFsdWVzIGdpdmVuIG9uIHRoZSBjb21tYW5kLWxpbmUKKyAqLworc3RhdGlj IGJvb2wgbmV4dF94aWRfZXBvY2hfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyB1aW50MzIgbmV4 dF94aWRfZXBvY2hfdmFsOworCitzdGF0aWMgYm9vbCBvbGRlc3RfeGlkX2dpdmVuID0gZmFs c2U7CitzdGF0aWMgVHJhbnNhY3Rpb25JZCBvbGRlc3RfeGlkX3ZhbDsKKworc3RhdGljIGJv b2wgbmV4dF94aWRfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyBUcmFuc2FjdGlvbklkIG5leHRf eGlkX3ZhbDsKKworc3RhdGljIGJvb2wgY29tbWl0X3RzX3hpZHNfZ2l2ZW4gPSBmYWxzZTsK K3N0YXRpYyBUcmFuc2FjdGlvbklkIG9sZGVzdF9jb21taXRfdHNfeGlkX3ZhbDsKK3N0YXRp YyBUcmFuc2FjdGlvbklkIG5ld2VzdF9jb21taXRfdHNfeGlkX3ZhbDsKKworc3RhdGljIGJv b2wgbmV4dF9vaWRfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyBPaWQJbmV4dF9vaWRfdmFsOwor CitzdGF0aWMgYm9vbCBteGlkc19naXZlbiA9IGZhbHNlOworc3RhdGljIE11bHRpWGFjdElk IG5leHRfbXhpZF92YWw7CitzdGF0aWMgTXVsdGlYYWN0SWQgb2xkZXN0X214aWRfdmFsID0g MDsKKworc3RhdGljIGJvb2wgbmV4dF9teG9mZl9naXZlbiA9IGZhbHNlOworc3RhdGljIE11 bHRpWGFjdE9mZnNldCBuZXh0X214b2ZmX3ZhbDsKKworc3RhdGljIGJvb2wgd2FsX3NlZ3Np emVfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyBpbnQJd2FsX3NlZ3NpemVfdmFsOworCitzdGF0 aWMgYm9vbCBjaGFyX3NpZ25lZG5lc3NfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyBib29sIGNo YXJfc2lnbmVkbmVzc192YWw7CisKKwogc3RhdGljIFRpbWVMaW5lSUQgbWluWGxvZ1RsaSA9 IDA7CiBzdGF0aWMgWExvZ1NlZ05vIG1pblhsb2dTZWdObyA9IDA7CiBzdGF0aWMgaW50CVdh bFNlZ1N6Owotc3RhdGljIGludAlzZXRfd2FsX3NlZ3NpemU7Ci1zdGF0aWMgaW50CXNldF9j aGFyX3NpZ25lZG5lc3MgPSAtMTsKIAogc3RhdGljIHZvaWQgQ2hlY2tEYXRhVmVyc2lvbih2 b2lkKTsKIHN0YXRpYyBib29sIHJlYWRfY29udHJvbGZpbGUodm9pZCk7CkBAIC0xMTgsNyAr MTQwLDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWludAkJCWM7CiAJYm9v bAkJZm9yY2UgPSBmYWxzZTsKIAlib29sCQlub3VwZGF0ZSA9IGZhbHNlOwotCU11bHRpWGFj dElkIHNldF9vbGRlc3RteGlkID0gMDsKIAljaGFyCSAgICplbmRwdHI7CiAJY2hhcgkgICAq ZW5kcHRyMjsKIAljaGFyCSAgICpEYXRhRGlyID0gTlVMTDsKQEAgLTE2Miw3ICsxODMsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ2UnOgogCQkJCWVy cm5vID0gMDsKLQkJCQlzZXRfeGlkX2Vwb2NoID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFy ZywgJmVuZHB0ciwgMCk7CisJCQkJbmV4dF94aWRfZXBvY2hfdmFsID0gc3RydG91aW50MzJf c3RyaWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcg fHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vICE9IDApCiAJCQkJewogCQkJCQkvKi0tLS0t LQpAQCAtMTcxLDQ2ICsxOTIsNDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CQkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5m b3JtYXRpb24uIiwgcHJvZ25hbWUpOwogCQkJCQlleGl0KDEpOwogCQkJCX0KLQkJCQlpZiAo c2V0X3hpZF9lcG9jaCA9PSAtMSkKLQkJCQkJcGdfZmF0YWwoInRyYW5zYWN0aW9uIElEIGVw b2NoICgtZSkgbXVzdCBub3QgYmUgLTEiKTsKKwkJCQluZXh0X3hpZF9lcG9jaF9naXZlbiA9 IHRydWU7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3UnOgogCQkJCWVycm5vID0gMDsKLQkJ CQlzZXRfb2xkZXN0X3hpZCA9IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIs IDApOworCQkJCW9sZGVzdF94aWRfdmFsID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywg JmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAn XDAnIHx8IGVycm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQg YXJndW1lbnQgZm9yIG9wdGlvbiAlcyIsICItdSIpOwogCQkJCQlwZ19sb2dfZXJyb3JfaGlu dCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUp OwogCQkJCQlleGl0KDEpOwogCQkJCX0KLQkJCQlpZiAoIVRyYW5zYWN0aW9uSWRJc05vcm1h bChzZXRfb2xkZXN0X3hpZCkpCisJCQkJaWYgKCFUcmFuc2FjdGlvbklkSXNOb3JtYWwob2xk ZXN0X3hpZF92YWwpKQogCQkJCQlwZ19mYXRhbCgib2xkZXN0IHRyYW5zYWN0aW9uIElEICgt dSkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXUiLCBGaXJzdE5vcm1hbFRy YW5zYWN0aW9uSWQpOworCQkJCW9sZGVzdF94aWRfZ2l2ZW4gPSB0cnVlOwogCQkJCWJyZWFr OwogCiAJCQljYXNlICd4JzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJc2V0X3hpZCA9IHN0cnRv dWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOworCQkJCW5leHRfeGlkX3ZhbCA9 IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRw dHIgPT0gb3B0YXJnIHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsK IAkJCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAi LXgiKTsKIAkJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBt b3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKIAkJCQkJZXhpdCgxKTsKIAkJCQl9Ci0J CQkJaWYgKCFUcmFuc2FjdGlvbklkSXNOb3JtYWwoc2V0X3hpZCkpCisJCQkJaWYgKCFUcmFu c2FjdGlvbklkSXNOb3JtYWwobmV4dF94aWRfdmFsKSkKIAkJCQkJcGdfZmF0YWwoInRyYW5z YWN0aW9uIElEICgteCkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXUiLCBG aXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpOworCQkJCW5leHRfeGlkX2dpdmVuID0gdHJ1ZTsK IAkJCQlicmVhazsKIAogCQkJY2FzZSAnYyc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9v bGRlc3RfY29tbWl0X3RzX3hpZCA9IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRw dHIsIDApOworCQkJCW9sZGVzdF9jb21taXRfdHNfeGlkX3ZhbCA9IHN0cnRvdWludDMyX3N0 cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRwdHIgPT0gb3B0YXJnIHx8 ICplbmRwdHIgIT0gJywnIHx8IGVycm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJy b3IoImludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlvbiAlcyIsICItYyIpOwogCQkJCQlwZ19s b2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24u IiwgcHJvZ25hbWUpOwogCQkJCQlleGl0KDEpOwogCQkJCX0KLQkJCQlzZXRfbmV3ZXN0X2Nv bW1pdF90c194aWQgPSBzdHJ0b3VsKGVuZHB0ciArIDEsICZlbmRwdHIyLCAwKTsKKwkJCQlu ZXdlc3RfY29tbWl0X3RzX3hpZF92YWwgPSBzdHJ0b3VsKGVuZHB0ciArIDEsICZlbmRwdHIy LCAwKTsKIAkJCQlpZiAoZW5kcHRyMiA9PSBlbmRwdHIgKyAxIHx8ICplbmRwdHIyICE9ICdc MCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBh cmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1jIik7CkBAIC0yMTgsMzEgKzI0MCwzMyBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJCWV4aXQoMSk7CiAJCQkJfQogCi0J CQkJaWYgKHNldF9vbGRlc3RfY29tbWl0X3RzX3hpZCA8IEZpcnN0Tm9ybWFsVHJhbnNhY3Rp b25JZCAmJgotCQkJCQlzZXRfb2xkZXN0X2NvbW1pdF90c194aWQgIT0gSW52YWxpZFRyYW5z YWN0aW9uSWQpCisJCQkJaWYgKG9sZGVzdF9jb21taXRfdHNfeGlkX3ZhbCA8IEZpcnN0Tm9y bWFsVHJhbnNhY3Rpb25JZCAmJgorCQkJCQlvbGRlc3RfY29tbWl0X3RzX3hpZF92YWwgIT0g SW52YWxpZFRyYW5zYWN0aW9uSWQpCiAJCQkJCXBnX2ZhdGFsKCJ0cmFuc2FjdGlvbiBJRCAo LWMpIG11c3QgYmUgZWl0aGVyICV1IG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAldSIs IEludmFsaWRUcmFuc2FjdGlvbklkLCBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpOwogCi0J CQkJaWYgKHNldF9uZXdlc3RfY29tbWl0X3RzX3hpZCA8IEZpcnN0Tm9ybWFsVHJhbnNhY3Rp b25JZCAmJgotCQkJCQlzZXRfbmV3ZXN0X2NvbW1pdF90c194aWQgIT0gSW52YWxpZFRyYW5z YWN0aW9uSWQpCisJCQkJaWYgKG5ld2VzdF9jb21taXRfdHNfeGlkX3ZhbCA8IEZpcnN0Tm9y bWFsVHJhbnNhY3Rpb25JZCAmJgorCQkJCQluZXdlc3RfY29tbWl0X3RzX3hpZF92YWwgIT0g SW52YWxpZFRyYW5zYWN0aW9uSWQpCiAJCQkJCXBnX2ZhdGFsKCJ0cmFuc2FjdGlvbiBJRCAo LWMpIG11c3QgYmUgZWl0aGVyICV1IG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAldSIs IEludmFsaWRUcmFuc2FjdGlvbklkLCBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpOworCQkJ CWNvbW1pdF90c194aWRzX2dpdmVuID0gdHJ1ZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAn byc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9vaWQgPSBzdHJ0b3VpbnQzMl9zdHJpY3Qo b3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQluZXh0X29pZF92YWwgPSBzdHJ0b3VpbnQzMl9z dHJpY3Qob3B0YXJnLCAmZW5kcHRyLCAwKTsKIAkJCQlpZiAoZW5kcHRyID09IG9wdGFyZyB8 fCAqZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19l cnJvcigiaW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1vIik7CiAJCQkJCXBn X2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iLCBwcm9nbmFtZSk7CiAJCQkJCWV4aXQoMSk7CiAJCQkJfQotCQkJCWlmIChzZXRfb2lk ID09IDApCisJCQkJaWYgKG5leHRfb2lkX3ZhbCA9PSAwKQogCQkJCQlwZ19mYXRhbCgiT0lE ICgtbykgbXVzdCBub3QgYmUgMCIpOworCQkJCW5leHRfb2lkX2dpdmVuID0gdHJ1ZTsKIAkJ CQlicmVhazsKIAogCQkJY2FzZSAnbSc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9teGlk ID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CisJCQkJbmV4dF9t eGlkX3ZhbCA9IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJ CWlmIChlbmRwdHIgPT0gb3B0YXJnIHx8ICplbmRwdHIgIT0gJywnIHx8IGVycm5vICE9IDAp CiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlv biAlcyIsICItbSIpOwpAQCAtMjUwLDcgKzI3NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkJCQkJZXhpdCgxKTsKIAkJCQl9CiAKLQkJCQlzZXRfb2xkZXN0bXhpZCA9 IHN0cnRvdWludDMyX3N0cmljdChlbmRwdHIgKyAxLCAmZW5kcHRyMiwgMCk7CisJCQkJb2xk ZXN0X214aWRfdmFsID0gc3RydG91aW50MzJfc3RyaWN0KGVuZHB0ciArIDEsICZlbmRwdHIy LCAwKTsKIAkJCQlpZiAoZW5kcHRyMiA9PSBlbmRwdHIgKyAxIHx8ICplbmRwdHIyICE9ICdc MCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBh cmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1tIik7CkBAIC0yNjIsMjEgKzI4NiwyMSBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJICogWFhYIEl0J2QgYmUgbmljZSB0 byBoYXZlIG1vcmUgc2FuaXR5IGNoZWNrcyBoZXJlLCBlLmcuIHNvCiAJCQkJICogdGhhdCBv bGRlc3QgaXMgbm90IHdyYXBwZWQgYXJvdW5kIHcuci50LiBuZXh0TXVsdGkuCiAJCQkJICov Ci0JCQkJaWYgKHNldF9vbGRlc3RteGlkID09IDApCisJCQkJaWYgKG9sZGVzdF9teGlkX3Zh bCA9PSAwKQogCQkJCQlwZ19mYXRhbCgib2xkZXN0IG11bHRpdHJhbnNhY3Rpb24gSUQgKC1t KSBtdXN0IG5vdCBiZSAwIik7Ci0JCQkJbXhpZF9naXZlbiA9IHRydWU7CisJCQkJbXhpZHNf Z2l2ZW4gPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdPJzoKIAkJCQllcnJubyA9 IDA7Ci0JCQkJc2V0X214b2ZmID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0 ciwgMCk7CisJCQkJbmV4dF9teG9mZl92YWwgPSBzdHJ0b3VpbnQzMl9zdHJpY3Qob3B0YXJn LCAmZW5kcHRyLCAwKTsKIAkJCQlpZiAoZW5kcHRyID09IG9wdGFyZyB8fCAqZW5kcHRyICE9 ICdcMCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJvcigiaW52YWxp ZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1PIik7CiAJCQkJCXBnX2xvZ19lcnJvcl9o aW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFt ZSk7CiAJCQkJCWV4aXQoMSk7CiAJCQkJfQotCQkJCW14b2ZmX2dpdmVuID0gdHJ1ZTsKKwkJ CQluZXh0X214b2ZmX2dpdmVuID0gdHJ1ZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnbCc6 CkBAIC0zMDAsOSArMzI0LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAog CQkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLS13YWwtc2Vnc2l6ZSIsIDEs IDEwMjQsICZ3YWxfc2Vnc2l6ZV9tYikpCiAJCQkJCQlleGl0KDEpOwotCQkJCQlzZXRfd2Fs X3NlZ3NpemUgPSB3YWxfc2Vnc2l6ZV9tYiAqIDEwMjQgKiAxMDI0OwotCQkJCQlpZiAoIUlz VmFsaWRXYWxTZWdTaXplKHNldF93YWxfc2Vnc2l6ZSkpCisJCQkJCXdhbF9zZWdzaXplX3Zh bCA9IHdhbF9zZWdzaXplX21iICogMTAyNCAqIDEwMjQ7CisJCQkJCWlmICghSXNWYWxpZFdh bFNlZ1NpemUod2FsX3NlZ3NpemVfdmFsKSkKIAkJCQkJCXBnX2ZhdGFsKCJhcmd1bWVudCBv ZiAlcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGJldHdlZW4gMSBhbmQgMTAyNCIsICItLXdh bC1zZWdzaXplIik7CisJCQkJCXdhbF9zZWdzaXplX2dpdmVuID0gdHJ1ZTsKIAkJCQkJYnJl YWs7CiAJCQkJfQogCkBAIC0zMTEsMTUgKzMzNiwxNiBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCQkJCWVycm5vID0gMDsKIAogCQkJCQlpZiAocGdfc3RyY2FzZWNtcChv cHRhcmcsICJzaWduZWQiKSA9PSAwKQotCQkJCQkJc2V0X2NoYXJfc2lnbmVkbmVzcyA9IDE7 CisJCQkJCQljaGFyX3NpZ25lZG5lc3NfdmFsID0gdHJ1ZTsKIAkJCQkJZWxzZSBpZiAocGdf c3RyY2FzZWNtcChvcHRhcmcsICJ1bnNpZ25lZCIpID09IDApCi0JCQkJCQlzZXRfY2hhcl9z aWduZWRuZXNzID0gMDsKKwkJCQkJCWNoYXJfc2lnbmVkbmVzc192YWwgPSBmYWxzZTsKIAkJ CQkJZWxzZQogCQkJCQl7CiAJCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQg Zm9yIG9wdGlvbiAlcyIsICItLWNoYXItc2lnbmVkbmVzcyIpOwogCQkJCQkJcGdfbG9nX2Vy cm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHBy b2duYW1lKTsKIAkJCQkJCWV4aXQoMSk7CiAJCQkJCX0KKwkJCQkJY2hhcl9zaWduZWRuZXNz X2dpdmVuID0gdHJ1ZTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC00MDcsOCArNDMzLDgg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCS8qCiAJICogSWYgbm8gbmV3IFdB TCBzZWdtZW50IHNpemUgd2FzIHNwZWNpZmllZCwgdXNlIHRoZSBjb250cm9sIGZpbGUgdmFs dWUuCiAJICovCi0JaWYgKHNldF93YWxfc2Vnc2l6ZSAhPSAwKQotCQlXYWxTZWdTeiA9IHNl dF93YWxfc2Vnc2l6ZTsKKwlpZiAod2FsX3NlZ3NpemVfZ2l2ZW4pCisJCVdhbFNlZ1N6ID0g d2FsX3NlZ3NpemVfdmFsOwogCWVsc2UKIAkJV2FsU2VnU3ogPSBDb250cm9sRmlsZS54bG9n X3NlZ19zaXplOwogCkBAIC00MzEsNDIgKzQ1Nyw0MyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJICogQWRqdXN0IGZpZWxkcyBpZiByZXF1aXJlZCBieSBzd2l0Y2hlcy4g IChEbyB0aGlzIG5vdyBzbyB0aGF0IHByaW50b3V0LAogCSAqIGlmIGFueSwgaW5jbHVkZXMg dGhlc2UgdmFsdWVzLikKIAkgKi8KLQlpZiAoc2V0X3hpZF9lcG9jaCAhPSAtMSkKKwlpZiAo bmV4dF94aWRfZXBvY2hfZ2l2ZW4pCiAJCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5l eHRYaWQgPQotCQkJRnVsbFRyYW5zYWN0aW9uSWRGcm9tRXBvY2hBbmRYaWQoc2V0X3hpZF9l cG9jaCwKKwkJCUZ1bGxUcmFuc2FjdGlvbklkRnJvbUVwb2NoQW5kWGlkKG5leHRfeGlkX2Vw b2NoX3ZhbCwKIAkJCQkJCQkJCQkJIFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChDb250cm9s RmlsZS5jaGVja1BvaW50Q29weS5uZXh0WGlkKSk7CiAKLQlpZiAoc2V0X29sZGVzdF94aWQg IT0gMCkKKwlpZiAob2xkZXN0X3hpZF9naXZlbikKIAl7Ci0JCUNvbnRyb2xGaWxlLmNoZWNr UG9pbnRDb3B5Lm9sZGVzdFhpZCA9IHNldF9vbGRlc3RfeGlkOworCQlDb250cm9sRmlsZS5j aGVja1BvaW50Q29weS5vbGRlc3RYaWQgPSBvbGRlc3RfeGlkX3ZhbDsKIAkJQ29udHJvbEZp bGUuY2hlY2tQb2ludENvcHkub2xkZXN0WGlkREIgPSBJbnZhbGlkT2lkOwogCX0KIAotCWlm IChzZXRfeGlkICE9IDApCisJaWYgKG5leHRfeGlkX2dpdmVuKQogCQlDb250cm9sRmlsZS5j aGVja1BvaW50Q29weS5uZXh0WGlkID0KIAkJCUZ1bGxUcmFuc2FjdGlvbklkRnJvbUVwb2No QW5kWGlkKEVwb2NoRnJvbUZ1bGxUcmFuc2FjdGlvbklkKENvbnRyb2xGaWxlLmNoZWNrUG9p bnRDb3B5Lm5leHRYaWQpLAotCQkJCQkJCQkJCQkgc2V0X3hpZCk7CisJCQkJCQkJCQkJCSBu ZXh0X3hpZF92YWwpOwogCi0JaWYgKHNldF9vbGRlc3RfY29tbWl0X3RzX3hpZCAhPSAwKQot CQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RDb21taXRUc1hpZCA9IHNldF9v bGRlc3RfY29tbWl0X3RzX3hpZDsKLQlpZiAoc2V0X25ld2VzdF9jb21taXRfdHNfeGlkICE9 IDApCi0JCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5ld2VzdENvbW1pdFRzWGlkID0g c2V0X25ld2VzdF9jb21taXRfdHNfeGlkOworCWlmIChjb21taXRfdHNfeGlkc19naXZlbikK Kwl7CisJCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdENvbW1pdFRzWGlkID0g b2xkZXN0X2NvbW1pdF90c194aWRfdmFsOworCQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29w eS5uZXdlc3RDb21taXRUc1hpZCA9IG5ld2VzdF9jb21taXRfdHNfeGlkX3ZhbDsKKwl9CiAK LQlpZiAoc2V0X29pZCAhPSAwKQotCQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0 T2lkID0gc2V0X29pZDsKKwlpZiAobmV4dF9vaWRfZ2l2ZW4pCisJCUNvbnRyb2xGaWxlLmNo ZWNrUG9pbnRDb3B5Lm5leHRPaWQgPSBuZXh0X29pZF92YWw7CiAKLQlpZiAobXhpZF9naXZl bikKKwlpZiAobXhpZHNfZ2l2ZW4pCiAJewotCQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29w eS5uZXh0TXVsdGkgPSBzZXRfbXhpZDsKKwkJQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHku bmV4dE11bHRpID0gbmV4dF9teGlkX3ZhbDsKIAotCQlDb250cm9sRmlsZS5jaGVja1BvaW50 Q29weS5vbGRlc3RNdWx0aSA9IHNldF9vbGRlc3RteGlkOworCQlDb250cm9sRmlsZS5jaGVj a1BvaW50Q29weS5vbGRlc3RNdWx0aSA9IG9sZGVzdF9teGlkX3ZhbDsKIAkJaWYgKENvbnRy b2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdE11bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkK IAkJCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdE11bHRpICs9IEZpcnN0TXVs dGlYYWN0SWQ7CiAJCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdE11bHRpREIg PSBJbnZhbGlkT2lkOwogCX0KIAotCWlmIChteG9mZl9naXZlbikKLQkJQ29udHJvbEZpbGUu Y2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0ID0gc2V0X214b2ZmOworCWlmIChuZXh0 X214b2ZmX2dpdmVuKQorCQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0TXVsdGlP ZmZzZXQgPSBuZXh0X214b2ZmX3ZhbDsKIAogCWlmIChtaW5YbG9nVGxpID4gQ29udHJvbEZp bGUuY2hlY2tQb2ludENvcHkuVGhpc1RpbWVMaW5lSUQpCiAJewpAQCAtNDc0LDExICs1MDEs MTEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlDb250cm9sRmlsZS5jaGVj a1BvaW50Q29weS5QcmV2VGltZUxpbmVJRCA9IG1pblhsb2dUbGk7CiAJfQogCi0JaWYgKHNl dF93YWxfc2Vnc2l6ZSAhPSAwKQorCWlmICh3YWxfc2Vnc2l6ZV9naXZlbikKIAkJQ29udHJv bEZpbGUueGxvZ19zZWdfc2l6ZSA9IFdhbFNlZ1N6OwogCi0JaWYgKHNldF9jaGFyX3NpZ25l ZG5lc3MgIT0gLTEpCi0JCUNvbnRyb2xGaWxlLmRlZmF1bHRfY2hhcl9zaWduZWRuZXNzID0g KHNldF9jaGFyX3NpZ25lZG5lc3MgPT0gMSk7CisJaWYgKGNoYXJfc2lnbmVkbmVzc19naXZl bikKKwkJQ29udHJvbEZpbGUuZGVmYXVsdF9jaGFyX3NpZ25lZG5lc3MgPSBjaGFyX3NpZ25l ZG5lc3NfdmFsOwogCiAJaWYgKG1pblhsb2dTZWdObyA+IG5ld1hsb2dTZWdObykKIAkJbmV3 WGxvZ1NlZ05vID0gbWluWGxvZ1NlZ05vOwpAQCAtODA5LDcgKzgzNiw3IEBAIFByaW50TmV3 Q29udHJvbFZhbHVlcyh2b2lkKQogCQkJCSBuZXdYbG9nU2VnTm8sIFdhbFNlZ1N6KTsKIAlw cmludGYoXygiRmlyc3QgbG9nIHNlZ21lbnQgYWZ0ZXIgcmVzZXQ6ICAgICAgICAlc1xuIiks IGZuYW1lKTsKIAotCWlmIChteGlkX2dpdmVuKQorCWlmIChteGlkc19naXZlbikKIAl7CiAJ CXByaW50ZihfKCJOZXh0TXVsdGlYYWN0SWQ6ICAgICAgICAgICAgICAgICAgICAgICV1XG4i KSwKIAkJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aSk7CkBAIC04 MTksMjUgKzg0NiwyNSBAQCBQcmludE5ld0NvbnRyb2xWYWx1ZXModm9pZCkKIAkJCSAgIENv bnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdE11bHRpREIpOwogCX0KIAotCWlmICht eG9mZl9naXZlbikKKwlpZiAobmV4dF9teG9mZl9naXZlbikKIAl7CiAJCXByaW50ZihfKCJO ZXh0TXVsdGlPZmZzZXQ6ICAgICAgICAgICAgICAgICAgICAgICV1XG4iKSwKIAkJCSAgIENv bnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJfQogCi0JaWYg KHNldF9vaWQgIT0gMCkKKwlpZiAobmV4dF9vaWRfZ2l2ZW4pCiAJewogCQlwcmludGYoXygi TmV4dE9JRDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAldVxuIiksCiAJCQkgICBD b250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0T2lkKTsKIAl9CiAKLQlpZiAoc2V0X3hp ZCAhPSAwKQorCWlmIChuZXh0X3hpZF9naXZlbikKIAl7CiAJCXByaW50ZihfKCJOZXh0WElE OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICV1XG4iKSwKIAkJCSAgIFhpZEZyb21G dWxsVHJhbnNhY3Rpb25JZChDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0WGlkKSk7 CiAJfQogCi0JaWYgKHNldF9vbGRlc3RfeGlkICE9IDApCisJaWYgKG9sZGVzdF94aWRfZ2l2 ZW4pCiAJewogCQlwcmludGYoXygiT2xkZXN0WElEOiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAldVxuIiksCiAJCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RY aWQpOwpAQCAtODQ1LDI0ICs4NzIsMjEgQEAgUHJpbnROZXdDb250cm9sVmFsdWVzKHZvaWQp CiAJCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RYaWREQik7CiAJfQog Ci0JaWYgKHNldF94aWRfZXBvY2ggIT0gLTEpCisJaWYgKG5leHRfeGlkX2Vwb2NoX2dpdmVu KQogCXsKIAkJcHJpbnRmKF8oIk5leHRYSUQgZXBvY2g6ICAgICAgICAgICAgICAgICAgICAg ICAgJXVcbiIpLAogCQkJICAgRXBvY2hGcm9tRnVsbFRyYW5zYWN0aW9uSWQoQ29udHJvbEZp bGUuY2hlY2tQb2ludENvcHkubmV4dFhpZCkpOwogCX0KIAotCWlmIChzZXRfb2xkZXN0X2Nv bW1pdF90c194aWQgIT0gMCkKKwlpZiAoY29tbWl0X3RzX3hpZHNfZ2l2ZW4pCiAJewogCQlw cmludGYoXygib2xkZXN0Q29tbWl0VHNYaWQ6ICAgICAgICAgICAgICAgICAgICAldVxuIiks CiAJCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RDb21taXRUc1hpZCk7 Ci0JfQotCWlmIChzZXRfbmV3ZXN0X2NvbW1pdF90c194aWQgIT0gMCkKLQl7CiAJCXByaW50 ZihfKCJuZXdlc3RDb21taXRUc1hpZDogICAgICAgICAgICAgICAgICAgICV1XG4iKSwKIAkJ CSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5ld2VzdENvbW1pdFRzWGlkKTsKIAl9 CiAKLQlpZiAoc2V0X3dhbF9zZWdzaXplICE9IDApCisJaWYgKHdhbF9zZWdzaXplX2dpdmVu KQogCXsKIAkJcHJpbnRmKF8oIkJ5dGVzIHBlciBXQUwgc2VnbWVudDogICAgICAgICAgICAg ICAgJXVcbiIpLAogCQkJICAgQ29udHJvbEZpbGUueGxvZ19zZWdfc2l6ZSk7Ci0tIAoyLjQ3 LjMKCg== --------------Mh0O0oQEG4RlVt2m409CzgGo Content-Type: text/x-patch; charset=UTF-8; name="v28-0003-Move-pg_multixact-SLRU-page-format-definitions-t.patch" Content-Disposition: attachment; filename*0="v28-0003-Move-pg_multixact-SLRU-page-format-definitions-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1YzBiYzMxMjQyYTlkYTEyMmRmNWZmYmVhYzFjMGUzMjYyYjA3ZDQ2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMyBEZWMgMjAyNSAyMDowNzo0NyArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjI4IDMvNl0gTW92ZSBwZ19tdWx0aXhhY3QgU0xSVSBwYWdlIGZv cm1hdCBkZWZpbml0aW9ucyB0byBhCiBzZXBhcmF0ZSBoZWFkZXIKClRoaXMgbWFrZXMgdGhl bSBhY2Nlc3NpYmxlIGZyb20gcGdfdXBncmFkZSwgbmVlZGVkIGJ5IHRoZSBuZXh0IGNvbW1p dC4KSSdtIGRvaW5nIHRoaXMgbWVjaGFuaWNhbCBtb3ZlIGFzIGEgc2VwYXJhdGUgY29tbWl0 IHRvIG1ha2UgdGhlIG5leHQKY29tbWl0J3MgY2hhbmdlcyB0byB0aGVzZSBkZWZpbml0aW9u cyBtb3JlIG9idmlvdXMuCgpBdXRob3I6IE1heGltIE9ybG92IDxvcmxvdm1nQGdtYWlsLmNv bT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9D QUNHJTNEZXpiWm9fM19mbnglM0RTNUJmZXB3UmZ0enJwSiUyQjdXRVQ0RWtUVTZ3bmpEVHNu amdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYyAgfCAxMjAgKy0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9tdWx0aXhhY3RfaW50ZXJuYWwuaCB8IDE0MCArKysrKysrKysrKysrKysrKysrKysrKysK IDIgZmlsZXMgY2hhbmdlZCwgMTQxIGluc2VydGlvbnMoKyksIDExOSBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVy bmFsLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhh Y3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IDhl ZDNmZDlkMDcxLi4xNGQ0NmZiNzYxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v bXVsdGl4YWN0LmMKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog CiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy9tdWx0 aXhhY3RfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2xydS5oIgogI2luY2x1ZGUg ImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZV9ybWdyLmgi CkBAIC04OCwxMjUgKzg5LDYgQEAKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogCiAK LS8qCi0gKiBEZWZpbmVzIGZvciBNdWx0aVhhY3RPZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFn ZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMKLSAqIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGlu IFBvc3RncmVzLgotICoKLSAqIE5vdGU6IGJlY2F1c2UgTXVsdGlYYWN0T2Zmc2V0cyBhcmUg MzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhGRkZGRkZGRiwKLSAqIE11bHRpWGFjdCBw YWdlIG51bWJlcmluZyBhbHNvIHdyYXBzIGFyb3VuZCBhdAotICogMHhGRkZGRkZGRi9NVUxU SVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSwgYW5kIHNlZ21lbnQgbnVtYmVyaW5nIGF0Ci0gKiAw eEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFL1NMUlVfUEFHRVNfUEVSX1NF R01FTlQuICBXZSBuZWVkCi0gKiB0YWtlIG5vIGV4cGxpY2l0IG5vdGljZSBvZiB0aGF0IGZh Y3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZwotICogc2VnbWVudCBh bmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlTXVsdGlYYWN0IChzZWUKLSAqIE11bHRpWGFj dE9mZnNldFBhZ2VQcmVjZWRlcykuCi0gKi8KLQotLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBl ciBvZmZzZXQgKi8KLSNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tT WiAvIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKQotCi1zdGF0aWMgaW5saW5lIGludDY0Ci1N dWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkKLXsKLQlyZXR1cm4g bXVsdGkgLyBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKLX0KLQotc3RhdGljIGlubGlu ZSBpbnQKLU11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKLXsK LQlyZXR1cm4gbXVsdGkgJSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKLX0KLQotc3Rh dGljIGlubGluZSBpbnQ2NAotTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoTXVsdGlYYWN0 SWQgbXVsdGkpCi17Ci0JcmV0dXJuIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKSAv IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci19Ci0KLS8qCi0gKiBUaGUgc2l0dWF0aW9uIGZv ciBtZW1iZXJzIGlzIGEgYml0IG1vcmUgY29tcGxleDogd2Ugc3RvcmUgb25lIGJ5dGUgb2YK LSAqIGFkZGl0aW9uYWwgZmxhZyBiaXRzIGZvciBlYWNoIFRyYW5zYWN0aW9uSWQuICBUbyBk byB0aGlzIHdpdGhvdXQgZ2V0dGluZwotICogaW50byBhbGlnbm1lbnQgaXNzdWVzLCB3ZSBz dG9yZSBmb3VyIGJ5dGVzIG9mIGZsYWdzLCBhbmQgdGhlbiB0aGUKLSAqIGNvcnJlc3BvbmRp bmcgNCBYaWRzLiAgRWFjaCBzdWNoIDUtd29yZCAoMjAtYnl0ZSkgc2V0IHdlIGNhbGwgYSAi Z3JvdXAiLCBhbmQKLSAqIGFyZSBzdG9yZWQgYXMgYSB3aG9sZSBpbiBwYWdlcy4gIFRodXMs IHdpdGggOGtCIEJMQ0tTWiwgd2Uga2VlcCA0MDkgZ3JvdXBzCi0gKiBwZXIgcGFnZS4gIFRo aXMgd2FzdGVzIDEyIGJ5dGVzIHBlciBwYWdlLCBidXQgdGhhdCdzIE9LIC0tIHNpbXBsaWNp dHkgKGFuZAotICogcGVyZm9ybWFuY2UpIHRydW1wcyBzcGFjZSBlZmZpY2llbmN5IGhlcmUu Ci0gKgotICogTm90ZSB0aGF0IHRoZSAib2Zmc2V0IiBtYWNyb3Mgd29yayB3aXRoIGJ5dGUg b2Zmc2V0LCBub3QgYXJyYXkgaW5kZXhlcywgc28KLSAqIGFyaXRobWV0aWMgbXVzdCBiZSBk b25lIHVzaW5nICJjaGFyICoiIHBvaW50ZXJzLgotICovCi0vKiBXZSBuZWVkIGVpZ2h0IGJp dHMgcGVyIHhhY3QsIHNvIG9uZSB4YWN0IGZpdHMgaW4gYSBieXRlICovCi0jZGVmaW5lIE1Y QUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUCQkJOAotI2RlZmluZSBNWEFDVF9NRU1CRVJfRkxB R1NfUEVSX0JZVEUJCQkxCi0jZGVmaW5lIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0sJKCgx IDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpCi0KLS8qIGhvdyBtYW55IGZ1 bGwgYnl0ZXMgb2YgZmxhZ3MgYXJlIHRoZXJlIGluIGEgZ3JvdXA/ICovCi0jZGVmaW5lIE1V TFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQCQk0Ci0jZGVmaW5lIE1VTFRJWEFDVF9NRU1C RVJTX1BFUl9NRU1CRVJHUk9VUAlcCi0JKE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQ ICogTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFKQotLyogc2l6ZSBpbiBieXRlcyBvZiBh IGNvbXBsZXRlIGdyb3VwICovCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpF IFwKLQkoc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01F TUJFUkdST1VQICsgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVApCi0jZGVmaW5lIE1V TFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1C RVJHUk9VUF9TSVpFKQotI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCi0J KE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfTUVNQkVSR1JPVVApCi0KLS8qCi0gKiBCZWNhdXNlIHRoZSBudW1iZXIgb2YgaXRlbXMg cGVyIHBhZ2UgaXMgbm90IGEgZGl2aXNvciBvZiB0aGUgbGFzdCBpdGVtCi0gKiBudW1iZXIg KG1lbWJlciAweEZGRkZGRkZGKSwgdGhlIGxhc3Qgc2VnbWVudCBkb2VzIG5vdCB1c2UgdGhl IG1heGltdW0gbnVtYmVyCi0gKiBvZiBwYWdlcywgYW5kIG1vcmVvdmVyIHRoZSBsYXN0IHVz ZWQgcGFnZSB0aGVyZWluIGRvZXMgbm90IHVzZSB0aGUgc2FtZQotICogbnVtYmVyIG9mIGl0 ZW1zIGFzIHByZXZpb3VzIHBhZ2VzLiAgKEFub3RoZXIgd2F5IHRvIHNheSBpdCBpcyB0aGF0 IHRoZQotICogMHhGRkZGRkZGRiBtZW1iZXIgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUg b2YgdGhlIGxhc3QgcGFnZSwgc28gdGhlIHBhZ2UKLSAqIGhhcyBzb21lIGVtcHR5IHNwYWNl IGFmdGVyIHRoYXQgaXRlbS4pCi0gKgotICogVGhpcyBjb25zdGFudCBpcyB0aGUgbnVtYmVy IG9mIG1lbWJlcnMgaW4gdGhlIGxhc3QgcGFnZSBvZiB0aGUgbGFzdCBzZWdtZW50LgotICov Ci0jZGVmaW5lIE1BWF9NRU1CRVJTX0lOX0xBU1RfTUVNQkVSU19QQUdFIFwKLQkJKCh1aW50 MzIpICgoMHhGRkZGRkZGRiAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFKSArIDEpKQot Ci0vKiBwYWdlIGluIHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICovCi1zdGF0aWMg aW5saW5lIGludDY0Ci1NWE9mZnNldFRvTWVtYmVyUGFnZShNdWx0aVhhY3RPZmZzZXQgb2Zm c2V0KQotewotCXJldHVybiBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsK LX0KLQotc3RhdGljIGlubGluZSBpbnQ2NAotTVhPZmZzZXRUb01lbWJlclNlZ21lbnQoTXVs dGlYYWN0T2Zmc2V0IG9mZnNldCkKLXsKLQlyZXR1cm4gTVhPZmZzZXRUb01lbWJlclBhZ2Uo b2Zmc2V0KSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci19Ci0KLS8qIExvY2F0aW9uIChi eXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJl ciAqLwotc3RhdGljIGlubGluZSBpbnQKLU1YT2Zmc2V0VG9GbGFnc09mZnNldChNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0KQotewotCU11bHRpWGFjdE9mZnNldCBncm91cCA9IG9mZnNldCAv IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKLQlpbnQJCQlncm91cG9ucGcg PSBncm91cCAlIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0U7Ci0JaW50CQkJYnl0 ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFOwotCi0JcmV0 dXJuIGJ5dGVvZmY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1NWE9mZnNldFRvRmxhZ3NC aXRTaGlmdChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQotewotCWludAkJCW1lbWJlcl9pbl9n cm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKLQlp bnQJCQlic2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1CRVJfQklUU19QRVJf WEFDVDsKLQotCXJldHVybiBic2hpZnQ7Ci19Ci0KLS8qIExvY2F0aW9uIChieXRlIG9mZnNl dCB3aXRoaW4gcGFnZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBtZW1iZXIgKi8KLXN0 YXRpYyBpbmxpbmUgaW50Ci1NWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE11bHRpWGFjdE9mZnNl dCBvZmZzZXQpCi17Ci0JaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElY QUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOwotCi0JcmV0dXJuIE1YT2Zmc2V0VG9GbGFn c09mZnNldChvZmZzZXQpICsKLQkJTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKwot CQltZW1iZXJfaW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7Ci19Ci0KIC8qIE11 bHRpeGFjdCBtZW1iZXJzIHdyYXBhcm91bmQgdGhyZXNob2xkcy4gKi8KICNkZWZpbmUgTVVM VElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRAkJKE1heE11bHRpWGFjdE9mZnNldCAvIDIp CiAjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVTSE9MRAlcCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjliNTZkZWFlZjMxCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTQwIEBA CisvKgorICogbXVsdGl4YWN0X2ludGVybmFsLmgKKyAqCisgKiBQb3N0Z3JlU1FMIG11bHRp LXRyYW5zYWN0aW9uLWxvZyBtYW5hZ2VyIGludGVybmFsIGRlY2xhcmF0aW9ucworICoKKyAq IFRoZXNlIGZ1bmN0aW9ucyBhbmQgZGVmaW5pdGlvbnMgYXJlIGZvciBkZWFsaW5nIHdpdGgg cGdfbXVsdGl4YWN0IHBhZ2VzLgorICogVGhleSBhcmUgaW50ZXJuYWwgdG8gbXVsdGl4YWN0 LmMsIGJ1dCB0aGV5IGFyZSBleHBvcnRlZCBoZXJlIHRvIGFsbG93CisgKiBwZ191cGdyYWRl IHRvIHdyaXRlIHBnX211bHRpeGFjdCBmaWxlcyBkaXJlY3RseS4KKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNz L211bHRpeGFjdF9pbnRlcm5hbC5oCisgKi8KKyNpZm5kZWYgTVVMVElYQUNUX0lOVEVSTkFM X0gKKyNkZWZpbmUgTVVMVElYQUNUX0lOVEVSTkFMX0gKKworI2luY2x1ZGUgImFjY2Vzcy9t dWx0aXhhY3QuaCIKKworCisvKgorICogRGVmaW5lcyBmb3IgTXVsdGlYYWN0T2Zmc2V0IHBh Z2Ugc2l6ZXMuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1NaIGFzIGlzCisgKiB1c2VkIGV2 ZXJ5d2hlcmUgZWxzZSBpbiBQb3N0Z3Jlcy4KKyAqCisgKiBOb3RlOiBiZWNhdXNlIE11bHRp WGFjdE9mZnNldHMgYXJlIDMyIGJpdHMgYW5kIHdyYXAgYXJvdW5kIGF0IDB4RkZGRkZGRkYs CisgKiBNdWx0aVhhY3QgcGFnZSBudW1iZXJpbmcgYWxzbyB3cmFwcyBhcm91bmQgYXQKKyAq IDB4RkZGRkZGRkYvTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UsIGFuZCBzZWdtZW50IG51 bWJlcmluZyBhdAorICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRS9T TFJVX1BBR0VTX1BFUl9TRUdNRU5ULiAgV2UgbmVlZAorICogdGFrZSBubyBleHBsaWNpdCBu b3RpY2Ugb2YgdGhhdCBmYWN0IGluIHRoaXMgbW9kdWxlLCBleGNlcHQgd2hlbiBjb21wYXJp bmcKKyAqIHNlZ21lbnQgYW5kIHBhZ2UgbnVtYmVycyBpbiBUcnVuY2F0ZU11bHRpWGFjdCAo c2VlCisgKiBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMpLgorICovCisKKy8qIFdlIG5l ZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0ICovCisjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRT X1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkKKworc3RhdGlj IGlubGluZSBpbnQ2NAorTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoTXVsdGlYYWN0SWQgbXVs dGkpCit7CisJcmV0dXJuIG11bHRpIC8gTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0U7Cit9 CisKK3N0YXRpYyBpbmxpbmUgaW50CitNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkoTXVsdGlY YWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpICUgTVVMVElYQUNUX09GRlNFVFNfUEVS X1BBR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50NjQKK011bHRpWGFjdElkVG9PZmZzZXRT ZWdtZW50KE11bHRpWGFjdElkIG11bHRpKQoreworCXJldHVybiBNdWx0aVhhY3RJZFRvT2Zm c2V0UGFnZShtdWx0aSkgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworfQorCisvKgorICog VGhlIHNpdHVhdGlvbiBmb3IgbWVtYmVycyBpcyBhIGJpdCBtb3JlIGNvbXBsZXg6IHdlIHN0 b3JlIG9uZSBieXRlIG9mCisgKiBhZGRpdGlvbmFsIGZsYWcgYml0cyBmb3IgZWFjaCBUcmFu c2FjdGlvbklkLiAgVG8gZG8gdGhpcyB3aXRob3V0IGdldHRpbmcKKyAqIGludG8gYWxpZ25t ZW50IGlzc3Vlcywgd2Ugc3RvcmUgZm91ciBieXRlcyBvZiBmbGFncywgYW5kIHRoZW4gdGhl CisgKiBjb3JyZXNwb25kaW5nIDQgWGlkcy4gIEVhY2ggc3VjaCA1LXdvcmQgKDIwLWJ5dGUp IHNldCB3ZSBjYWxsIGEgImdyb3VwIiwgYW5kCisgKiBhcmUgc3RvcmVkIGFzIGEgd2hvbGUg aW4gcGFnZXMuICBUaHVzLCB3aXRoIDhrQiBCTENLU1osIHdlIGtlZXAgNDA5IGdyb3Vwcwor ICogcGVyIHBhZ2UuICBUaGlzIHdhc3RlcyAxMiBieXRlcyBwZXIgcGFnZSwgYnV0IHRoYXQn cyBPSyAtLSBzaW1wbGljaXR5IChhbmQKKyAqIHBlcmZvcm1hbmNlKSB0cnVtcHMgc3BhY2Ug ZWZmaWNpZW5jeSBoZXJlLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgIm9mZnNldCIgbWFjcm9z IHdvcmsgd2l0aCBieXRlIG9mZnNldCwgbm90IGFycmF5IGluZGV4ZXMsIHNvCisgKiBhcml0 aG1ldGljIG11c3QgYmUgZG9uZSB1c2luZyAiY2hhciAqIiBwb2ludGVycy4KKyAqLworLyog V2UgbmVlZCBlaWdodCBiaXRzIHBlciB4YWN0LCBzbyBvbmUgeGFjdCBmaXRzIGluIGEgYnl0 ZSAqLworI2RlZmluZSBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVAkJCTgKKyNkZWZpbmUg TVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFCQkJMQorI2RlZmluZSBNWEFDVF9NRU1CRVJf WEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKQor CisvKiBob3cgbWFueSBmdWxsIGJ5dGVzIG9mIGZsYWdzIGFyZSB0aGVyZSBpbiBhIGdyb3Vw PyAqLworI2RlZmluZSBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUAkJNAorI2RlZmlu ZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAJXAorCShNVUxUSVhBQ1RfRkxB R0JZVEVTX1BFUl9HUk9VUCAqIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURSkKKy8qIHNp emUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0ZSBncm91cCAqLworI2RlZmluZSBNVUxUSVhBQ1Rf TUVNQkVSR1JPVVBfU0laRSBcCisJKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIE1VTFRJWEFD VF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCArIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dS T1VQKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1og LyBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJF UlNfUEVSX1BBR0UJXAorCShNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICogTVVM VElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQKQorCisvKgorICogQmVjYXVzZSB0aGUg bnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlIGlzIG5vdCBhIGRpdmlzb3Igb2YgdGhlIGxhc3Qg aXRlbQorICogbnVtYmVyIChtZW1iZXIgMHhGRkZGRkZGRiksIHRoZSBsYXN0IHNlZ21lbnQg ZG9lcyBub3QgdXNlIHRoZSBtYXhpbXVtIG51bWJlcgorICogb2YgcGFnZXMsIGFuZCBtb3Jl b3ZlciB0aGUgbGFzdCB1c2VkIHBhZ2UgdGhlcmVpbiBkb2VzIG5vdCB1c2UgdGhlIHNhbWUK KyAqIG51bWJlciBvZiBpdGVtcyBhcyBwcmV2aW91cyBwYWdlcy4gIChBbm90aGVyIHdheSB0 byBzYXkgaXQgaXMgdGhhdCB0aGUKKyAqIDB4RkZGRkZGRkYgbWVtYmVyIGlzIHNvbWV3aGVy ZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXN0IHBhZ2UsIHNvIHRoZSBwYWdlCisgKiBoYXMg c29tZSBlbXB0eSBzcGFjZSBhZnRlciB0aGF0IGl0ZW0uKQorICoKKyAqIFRoaXMgY29uc3Rh bnQgaXMgdGhlIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIGxh c3Qgc2VnbWVudC4KKyAqLworI2RlZmluZSBNQVhfTUVNQkVSU19JTl9MQVNUX01FTUJFUlNf UEFHRSBcCisJCSgodWludDMyKSAoKDB4RkZGRkZGRkYgJSBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfUEFHRSkgKyAxKSkKKworLyogcGFnZSBpbiB3aGljaCBhIG1lbWJlciBpcyB0byBiZSBm b3VuZCAqLworc3RhdGljIGlubGluZSBpbnQ2NAorTVhPZmZzZXRUb01lbWJlclBhZ2UoTXVs dGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlyZXR1cm4gb2Zmc2V0IC8gTVVMVElYQUNUX01F TUJFUlNfUEVSX1BBR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50NjQKK01YT2Zmc2V0VG9N ZW1iZXJTZWdtZW50KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJcmV0dXJuIE1YT2Zm c2V0VG9NZW1iZXJQYWdlKG9mZnNldCkgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworfQor CisvKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIGZsYWcgd29yZCBm b3IgYSBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvRmxh Z3NPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlNdWx0aVhhY3RPZmZzZXQg Z3JvdXAgPSBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7CisJ aW50CQkJZ3JvdXBvbnBnID0gZ3JvdXAgJSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9Q QUdFOworCWludAkJCWJ5dGVvZmYgPSBncm91cG9ucGcgKiBNVUxUSVhBQ1RfTUVNQkVSR1JP VVBfU0laRTsKKworCXJldHVybiBieXRlb2ZmOworfQorCitzdGF0aWMgaW5saW5lIGludAor TVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlp bnQJCQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJf TUVNQkVSR1JPVVA7CisJaW50CQkJYnNoaWZ0ID0gbWVtYmVyX2luX2dyb3VwICogTVhBQ1Rf TUVNQkVSX0JJVFNfUEVSX1hBQ1Q7CisKKwlyZXR1cm4gYnNoaWZ0OworfQorCisvKiBMb2Nh dGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIFRyYW5zYWN0aW9uSWQgb2YgZ2l2 ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb01lbWJlck9mZnNl dChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJlcl9pbl9ncm91cCA9 IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKworCXJldHVy biBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KSArCisJCU1VTFRJWEFDVF9GTEFHQllU RVNfUEVSX0dST1VQICsKKwkJbWVtYmVyX2luX2dyb3VwICogc2l6ZW9mKFRyYW5zYWN0aW9u SWQpOworfQorCisjZW5kaWYJCQkJCQkJLyogTVVMVElYQUNUX0lOVEVSTkFMX0ggKi8KLS0g CjIuNDcuMwoK --------------Mh0O0oQEG4RlVt2m409CzgGo Content-Type: text/x-patch; charset=UTF-8; name="v28-0004-FIXME-bump-catversion.patch" Content-Disposition: attachment; filename="v28-0004-FIXME-bump-catversion.patch" Content-Transfer-Encoding: base64 RnJvbSBjN2VjZGFlYTY1ZDEzMTE0ZjMyYzFjMjMwNGZhZmQ4NTAwYzJiMzY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyOCA0LzZdIEZJWE1FOiBidW1wIGNhdHZlcnNpb24KClRvIGF2b2lkIGNvbnN0YW50IENG LWJvdCBjb21wbGFpbnMsIG1ha2UgY2F0dmVyc2lvbiBidW1wIGluIGEgc2VwYXJhdGUKY29t bWl0LgoKVGhpcyBpcyB0byBiZSBzcXVhc2hlZCB3aXRoIHRoZSBtYWluIGNvbW1pdCBiZWZv cmUgcHVzaGluZy4KCk5PVEU6IGtlZXAgaXQgaW4gc3luYyB3aXRoIE1VTFRJWEFDVE9GRlNF VF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUgotLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVy c2lvbi5oIHwgMyArKy0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24u aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IGQxM2VkNjJhZjQ2 Li5iMDE2MmMyYmY2MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJz aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3LDYg KzU3LDcgQEAKICAqLwogCiAvKgkJCQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxP R19WRVJTSU9OX05PCTIwMjUxMjA1MQorLy8gRklYTUU6IGJ1bXAgaXQKKyNkZWZpbmUgQ0FU QUxPR19WRVJTSU9OX05PCTk5OTk5OTk5OQogCiAjZW5kaWYKLS0gCjIuNDcuMwoK --------------Mh0O0oQEG4RlVt2m409CzgGo Content-Type: text/x-patch; charset=UTF-8; name="v28-0005-Widen-MultiXactOffset-to-64-bits.patch" Content-Disposition: attachment; filename="v28-0005-Widen-MultiXactOffset-to-64-bits.patch" Content-Transfer-Encoding: base64 RnJvbSA3ZTcyZjQzZmJlOWE1YjM3NTg4NDc1YjkxZDA3YzE5NjBjNTQxMTQ3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMyBEZWMgMjAyNSAyMDoxMTo1MCArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjI4IDUvNl0gV2lkZW4gTXVsdGlYYWN0T2Zmc2V0IHRvIDY0IGJp dHMKClRoaXMgZWxpbWluYXRlcyBvZmZzZXQgd3JhcGFyb3VuZCBhbmQgdGhlIDJeMzIgbGlt aXQgb24gdGhlIHRvdGFsCm51bWJlciBvZiBtdWx0aXhpZCBtZW1iZXJzLiBNdWx0aXhpZHMg YXJlIHN0aWxsIGxpbWl0ZWQgdG8gMl4zMSwgYnV0CnRoaXMgaXMgYSBuaWNlIGltcHJvdmVt ZW50IGJlY2F1c2UgJ21lbWJlcnMnIGNhbiBncm93IG11Y2ggZmFzdGVyIHRoYW4KdGhlIG51 bWJlciBvZiBtdWx0aXhpZHMuIE9uIHN1Y2ggc3lzdGVtcywgeW91IGNhbiBub3cgcnVuIGxv bmdlcgpiZWZvcmUgaGl0dGluZyBoYXJkIGxpbWl0cyBvciB0cmlnZ2VyaW5nIGFudGktd3Jh cGFyb3VuZCB2YWN1dW1zLgoKTm90IGhhdmluZyB0byBkZWFsIHdpdGggb2Zmc2V0IHdyYXBh cm91bmQgYWxzbyBzaW1wbGlmaWVzIHRoZSBjb2RlIGFuZApyZW1vdmVzIHNvbWUgZ25hcmx5 IGNvcm5lciBjYXNlcy4KCldlIG5vIGxvbmdlciBuZWVkIHRvIHBlcmZvcm0gZW1lcmdlbmN5 IGFudGktd3JhcGFyb3VuZCBmcmVlemluZwpiZWNhdXNlIG9mIHJ1bm5pbmcgb3V0IG9mICdt ZW1iZXJzJyBzcGFjZSwgc28gdGhlIG9mZnNldCBzdG9wIGxpbWl0IGlzCmdvbmUuIEJ1dCB5 b3UgbWlnaHQgc3RpbGwgbm90IHdhbnQgJ21lbWJlcnMnIHRvIGNvbnN1bWUgaHVnZSBhbW91 bnRzCm9mIGRpc2sgc3BhY2UuIEZvciB0aGF0IHJlYXNvbiwgSSBrZXB0IHRoZSBsb2dpYyBm b3IgbG93ZXJpbmcgdmFjdXVtJ3MKbXVsdGl4aWQgZnJlZXppbmcgY3V0b2ZmIGlmIGEgbGFy Z2UgYW1vdW50IG9mICdtZW1iZXJzJyBzcGFjZSBpcwp1c2VkLiBUaGUgdGhyZXNob2xkcyBm b3IgdGhhdCBhcmUgcm91Z2hseSB0aGUgc2FtZSBhcyB0aGUgInNhZmUiIGFuZAoiZGFuZ2Vy IiB0aHJlc2hvbGRzIHVzZWQgYmVmb3JlLCAyIGJpbGxpb24gdHJhbnNhY3Rpb25zIGFuZCA0 IGJpbGxpb24KdHJhbnNhY3Rpb25zLiBUaGlzIGtlZXBzIHRoZSBiZWhhdmlvciBmb3IgdGhl IGZyZWV6ZSBjdXRvZmYgcm91Z2hseQp0aGUgc2FtZSBhcyBiZWZvcmUgLiBJdCBtaWdodCBt YWtlIHNlbnNlIHRvIG1ha2UgdGhpcyBzbWFydGVyIG9yCmNvbmZpZ3VyYWJsZSwgbm93IHRo YXQgdGhlIHRocmVzaG9sZCBpcyBvbmx5IG5lZWRlZCB0byBtYW5hZ2UgZGlzawp1c2FnZSwg YnV0IHRoYXQncyBsZWZ0IGZvciB0aGUgZnV0dXJlLgoKQWRkIGNvZGUgdG8gcGdfdXBncmFk ZSB0byBjb252ZXJ0IG11bHRpdHJhbnNhY3Rpb25zIGZyb20gdGhlIG9sZCB0bwp0aGUgbmV3 IGZvcm1hdC4gQmVjYXVzZSBwZ191cGdyYWRlIG5vdyByZXdyaXRlcyB0aGUgZmlsZXMgaW4g dGhlIG5ldwpmb3JtYXQsIHdlIGNhbiBnZXQgcmlkIG9mIHNvbWUgaGFja3Mgd2UgaGFkIHB1 dCBpbiBwbGFjZSB0byBkZWFsIHdpdGgKb2xkIGJ1Z3MgYW5kIHVwZ3JhZGVkIGNsdXN0ZXJz LgoKQXV0aG9yOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ClJldmlld2VkLWJ5 OiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KUmV2aWV3 ZWQtYnk6IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+ClJldmll d2VkLWJ5OiB3ZW5odWkgcWl1IDxxaXV3ZW5odWlmeEBnbWFpbC5jb20+CkRpc2N1c3Npb246 IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FDRyUzRGV6YVdnN19u dC04ZXk0YUt2Mnc5TGN1THRoSGtud0Nhd21CZ0VlVG5KckpUY3dAbWFpbC5nbWFpbC5jb20K LS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc2V0d2FsLnNnbWwgICAgICAgICAgICAgfCAg MTMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyAgICAgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyAgICAg ICAgfCA1NTAgKysrKy0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dyZWNvdmVyeS5jICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtLmMgICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9wb3N0bWFz dGVyL2F1dG92YWN1dW0uYyAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfY29udHJv bGRhdGEvcGdfY29udHJvbGRhdGEuYyAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19yZXNl dHdhbC9wZ19yZXNldHdhbC5jICAgICAgICAgICAgIHwgIDM4ICstCiBzcmMvYmluL3BnX3Jl c2V0d2FsL3QvMDAxX2Jhc2ljLnBsICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdf dXBncmFkZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvYmluL3Bn X3VwZ3JhZGUvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2Jpbi9w Z191cGdyYWRlL211bHRpeGFjdF9yZWFkX3YxOC5jICAgICAgIHwgMzM3ICsrKysrKysrKysr CiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3JlYWRfdjE4LmggICAgICAgfCAgMzcg KysKIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmV3cml0ZS5jICAgICAgICB8IDE5 NSArKysrKysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jICAgICAgICAgICAg ICAgfCAgODEgKystCiBzcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oICAgICAgICAg ICAgICAgfCAgMTIgKy0KIHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMgICAgICAgICAg ICAgICAgICB8IDI1OCArKysrKysrKwogc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaCAg ICAgICAgICAgICAgICAgIHwgIDUyICsrCiAuLi4vcGdfdXBncmFkZS90LzAwN19tdWx0aXhh Y3RfY29udmVyc2lvbi5wbCAgfCAzMzkgKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vz cy9tdWx0aXhhY3QuaCAgICAgICAgICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvYWNj ZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oICAgICAgIHwgIDIzICstCiBzcmMvaW5jbHVkZS9j LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIC4uLi90ZXN0X3Ns cnUvdC8wMDJfbXVsdGl4YWN0X3dyYXBhcm91bmQucGwgICB8ICAgMiArLQogLi4uL3Blcmwv UG9zdGdyZVNRTC9UZXN0L0JhY2tncm91bmRQc3FsLnBtICAgIHwgIDE1ICstCiBzcmMvdGVz dC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtICAgICAgfCAgMjEgKy0KIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMyArCiAyOCBm aWxlcyBjaGFuZ2VkLCAxNTAwIGluc2VydGlvbnMoKyksIDUyMCBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3JlYWRfdjE4 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3Jl YWRfdjE4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4 YWN0X3Jld3JpdGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9z bHJ1X2lvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9p by5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRp eGFjdF9jb252ZXJzaW9uLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19y ZXNldHdhbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXNldHdhbC5zZ21sCmluZGV4 IDJjMDE5YzJhYWM2Li40MWYyYjFkNDgwYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Jl Zi9wZ19yZXNldHdhbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzZXR3YWwu c2dtbApAQCAtMjY3LDE0ICsyNjcsMTcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAg ICAgICBBIHNhZmUgdmFsdWUgZm9yIHRoZSBuZXh0IG11bHRpdHJhbnNhY3Rpb24gSUQgKGZp cnN0IHBhcnQpIGNhbiBiZQogICAgICAgZGV0ZXJtaW5lZCBieSBsb29raW5nIGZvciB0aGUg bnVtZXJpY2FsbHkgbGFyZ2VzdCBmaWxlIG5hbWUgaW4gdGhlCiAgICAgICBkaXJlY3Rvcnkg PGZpbGVuYW1lPnBnX211bHRpeGFjdC9vZmZzZXRzPC9maWxlbmFtZT4gdW5kZXIgdGhlIGRh dGEgZGlyZWN0b3J5LAotICAgICAgYWRkaW5nIG9uZSwgYW5kIHRoZW4gbXVsdGlwbHlpbmcg YnkgNjU1MzYgKDB4MTAwMDApLiAgQ29udmVyc2VseSwgYSBzYWZlCisgICAgICBhZGRpbmcg b25lLCBhbmQgdGhlbiBtdWx0aXBseWluZyBieSAzMjc2OCAoMHg4MDAwKS4gIENvbnZlcnNl bHksIGEgc2FmZQogICAgICAgdmFsdWUgZm9yIHRoZSBvbGRlc3QgbXVsdGl0cmFuc2FjdGlv biBJRCAoc2Vjb25kIHBhcnQgb2YKICAgICAgIDxvcHRpb24+LW08L29wdGlvbj4pIGNhbiBi ZSBkZXRlcm1pbmVkIGJ5IGxvb2tpbmcgZm9yIHRoZSBudW1lcmljYWxseSBzbWFsbGVzdAot ICAgICAgZmlsZSBuYW1lIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhbmQgbXVsdGlwbHlpbmcg YnkgNjU1MzYuICBUaGUgZmlsZQotICAgICAgbmFtZXMgYXJlIGluIGhleGFkZWNpbWFsLCBz byB0aGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBzcGVjaWZ5Ci0gICAgICB0aGUg b3B0aW9uIHZhbHVlIGluIGhleGFkZWNpbWFsIGFuZCBhcHBlbmQgZm91ciB6ZXJvZXMuCisg ICAgICBmaWxlIG5hbWUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFuZCBtdWx0aXBseWluZyBi eSAzMjc2OCAoMHg4MDAwKS4KKyAgICAgIE5vdGUgdGhhdCB0aGUgZmlsZSBuYW1lcyBhcmUg aW4gaGV4YWRlY2ltYWwuICBJdCBpcyB1c3VhbGx5IGVhc2llc3QKKyAgICAgIHRvIHNwZWNp ZnkgdGhlIG9wdGlvbiB2YWx1ZSBpbiBoZXhhZGVjaW1hbCB0b28uICBGb3IgZXhhbXBsZSwg aWYKKyAgICAgIDxmaWxlbmFtZT4wMDBGPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4wMDA3 PC9maWxlbmFtZT4gYXJlIHRoZSBncmVhdGVzdCBhbmQKKyAgICAgIHNtYWxsZXN0IGVudHJp ZXMgaW4gPGZpbGVuYW1lPnBnX211bHRpeGFjdC9vZmZzZXRzPC9maWxlbmFtZT4sCisgICAg ICA8bGl0ZXJhbD4tbSAweDgwMDAwLDB4MzgwMDA8L2xpdGVyYWw+IHdpbGwgd29yay4KICAg ICAgPC9wYXJhPgotICAgICA8IS0tIDY1NTM2ID0gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAq IEJMQ0tTWiAvIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpIC0tPgorICAgICA8IS0tIDMyNzY4 ID0gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAqIEJMQ0tTWiAvIHNpemVvZihNdWx0aVhhY3RP ZmZzZXQpIC0tPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jCmluZGV4IDNjYTA1ODJkYjM2 Li4wNTJkZDBhNGNlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L214YWN0ZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRl c2MuYwpAQCAtNjUsNyArNjUsNyBAQCBtdWx0aXhhY3RfZGVzYyhTdHJpbmdJbmZvIGJ1Ziwg WExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXhsX211bHRpeGFjdF9jcmVhdGUgKnhscmVj ID0gKHhsX211bHRpeGFjdF9jcmVhdGUgKikgcmVjOwogCQlpbnQJCQlpOwogCi0JCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiJXUgb2Zmc2V0ICV1IG5tZW1iZXJzICVkOiAiLCB4bHJlYy0+ bWlkLAorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiV1IG9mZnNldCAlIiBQUkl1NjQgIiBu bWVtYmVycyAlZDogIiwgeGxyZWMtPm1pZCwKIAkJCQkJCSB4bHJlYy0+bW9mZiwgeGxyZWMt Pm5tZW1iZXJzKTsKIAkJZm9yIChpID0gMDsgaSA8IHhscmVjLT5ubWVtYmVyczsgaSsrKQog CQkJb3V0X21lbWJlcihidWYsICZ4bHJlYy0+bWVtYmVyc1tpXSk7CkBAIC03NCw3ICs3NCw3 IEBAIG11bHRpeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJl Y29yZCkKIAl7CiAJCXhsX211bHRpeGFjdF90cnVuY2F0ZSAqeGxyZWMgPSAoeGxfbXVsdGl4 YWN0X3RydW5jYXRlICopIHJlYzsKIAotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm9mZnNl dHMgWyV1LCAldSksIG1lbWJlcnMgWyV1LCAldSkiLAorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1 ZiwgIm9mZnNldHMgWyV1LCAldSksIG1lbWJlcnMgWyUiIFBSSXU2NCAiLCAlIiBQUkl1NjQg IikiLAogCQkJCQkJIHhscmVjLT5zdGFydFRydW5jT2ZmLCB4bHJlYy0+ZW5kVHJ1bmNPZmYs CiAJCQkJCQkgeGxyZWMtPnN0YXJ0VHJ1bmNNZW1iLCB4bHJlYy0+ZW5kVHJ1bmNNZW1iKTsK IAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2Mu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCmluZGV4IGNkNmMy YTJmNjUwLi40NDEwMzRmNTkyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL3hsb2dkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hs b2dkZXNjLmMKQEAgLTY2LDcgKzY2LDcgQEAgeGxvZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBY TG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJQ2hlY2tQb2ludCAqY2hlY2twb2ludCA9IChD aGVja1BvaW50ICopIHJlYzsKIAogCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlZG8gJVgv JTA4WDsgIgotCQkJCQkJICJ0bGkgJXU7IHByZXYgdGxpICV1OyBmcHcgJXM7IHdhbF9sZXZl bCAlczsgeGlkICV1OiV1OyBvaWQgJXU7IG11bHRpICV1OyBvZmZzZXQgJXU7ICIKKwkJCQkJ CSAidGxpICV1OyBwcmV2IHRsaSAldTsgZnB3ICVzOyB3YWxfbGV2ZWwgJXM7IHhpZCAldTol dTsgb2lkICV1OyBtdWx0aSAldTsgb2Zmc2V0ICUiIFBSSXU2NCAiOyAiCiAJCQkJCQkgIm9s ZGVzdCB4aWQgJXUgaW4gREIgJXU7IG9sZGVzdCBtdWx0aSAldSBpbiBEQiAldTsgIgogCQkJ CQkJICJvbGRlc3QvbmV3ZXN0IGNvbW1pdCB0aW1lc3RhbXAgeGlkOiAldS8ldTsgIgogCQkJ CQkJICJvbGRlc3QgcnVubmluZyB4aWQgJXU7ICVzIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggMTRkNDZmYjc2MWIuLmRmZmEwYzhlN2Q0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtODksMTAgKzg5LDE0 IEBACiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIAogCi0vKiBNdWx0aXhhY3QgbWVt YmVycyB3cmFwYXJvdW5kIHRocmVzaG9sZHMuICovCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1C RVJfU0FGRV9USFJFU0hPTEQJCShNYXhNdWx0aVhhY3RPZmZzZXQgLyAyKQotI2RlZmluZSBN VUxUSVhBQ1RfTUVNQkVSX0RBTkdFUl9USFJFU0hPTEQJXAotCShNYXhNdWx0aVhhY3RPZmZz ZXQgLSBNYXhNdWx0aVhhY3RPZmZzZXQgLyA0KQorLyoKKyAqIFRocmVzaG9sZHMgdXNlZCB0 byBrZWVwIG1lbWJlcnMgZGlzayB1c2FnZSBpbiBjaGVjayB3aGVuIG11bHRpeGlkcyBoYXZl IGEKKyAqIGxvdCBvZiBtZW1iZXJzLiAgV2hlbiBNVUxUSVhBQ1RfTUVNQkVSX0xPV19USFJF U0hPTEQgaXMgcmVhY2hlZCwgdmFjdXVtCisgKiBzdGFydHMgZnJlZXppbmcgbXVsdGl4aWRz IG1vcmUgYWdncmVzc2l2ZWx5LCBldmVuIGlmIHRoZSBub3JtYWwgbXVsdGl4aWQKKyAqIGFn ZSBsaW1pdHMgaGF2ZW4ndCBiZWVuIHJlYWNoZWQgeWV0LgorICovCisjZGVmaW5lIE1VTFRJ WEFDVF9NRU1CRVJfTE9XX1RIUkVTSE9MRAkJVUlOVDY0Q09OU1QoMjAwMDAwMDAwMCkKKyNk ZWZpbmUgTVVMVElYQUNUX01FTUJFUl9ISUdIX1RIUkVTSE9MRAkJVUlOVDY0Q09OU1QoNDAw MDAwMDAwMCkKIAogc3RhdGljIGlubGluZSBNdWx0aVhhY3RJZAogUHJldmlvdXNNdWx0aVhh Y3RJZChNdWx0aVhhY3RJZCBtdWx0aSkKQEAgLTEzNywxMSArMTQxLDkgQEAgdHlwZWRlZiBz dHJ1Y3QgTXVsdGlYYWN0U3RhdGVEYXRhCiAKIAkvKgogCSAqIE9sZGVzdCBtdWx0aXhhY3Qg b2Zmc2V0IHRoYXQgaXMgcG90ZW50aWFsbHkgcmVmZXJlbmNlZCBieSBhIG11bHRpeGFjdAot CSAqIHJlZmVyZW5jZWQgYnkgYSByZWxhdGlvbi4gIFdlIGRvbid0IGFsd2F5cyBrbm93IHRo aXMgdmFsdWUsIHNvIHRoZXJlJ3MKLQkgKiBhIGZsYWcgaGVyZSB0byBpbmRpY2F0ZSB3aGV0 aGVyIG9yIG5vdCB3ZSBjdXJyZW50bHkgZG8uCisJICogcmVmZXJlbmNlZCBieSBhIHJlbGF0 aW9uLgogCSAqLwogCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0JYm9vbAkJb2xk ZXN0T2Zmc2V0S25vd247CiAKIAkvKiBzdXBwb3J0IGZvciBhbnRpLXdyYXBhcm91bmQgbWVh c3VyZXMgKi8KIAlNdWx0aVhhY3RJZCBtdWx0aVZhY0xpbWl0OwpAQCAtMTQ5LDkgKzE1MSw2 IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQogCU11bHRpWGFjdElkIG11 bHRpU3RvcExpbWl0OwogCU11bHRpWGFjdElkIG11bHRpV3JhcExpbWl0OwogCi0JLyogc3Vw cG9ydCBmb3IgbWVtYmVycyBhbnRpLXdyYXBhcm91bmQgbWVhc3VyZXMgKi8KLQlNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0U3RvcExpbWl0OwkvKiBrbm93biBpZiBvbGRlc3RPZmZzZXRLbm93 biAqLwotCiAJLyoKIAkgKiBQZXItYmFja2VuZCBkYXRhIHN0YXJ0cyBoZXJlLiAgV2UgaGF2 ZSB0d28gYXJyYXlzIHN0b3JlZCBpbiB0aGUgYXJlYQogCSAqIGltbWVkaWF0ZWx5IGZvbGxv d2luZyB0aGUgTXVsdGlYYWN0U3RhdGVEYXRhIHN0cnVjdC4gRWFjaCBpcyBpbmRleGVkIGJ5 CkBAIC0yNzIsMTMgKzI3MSw5IEBAIHN0YXRpYyB2b2lkIG1YYWN0Q2FjaGVQdXQoTXVsdGlY YWN0SWQgbXVsdGksIGludCBubWVtYmVycywKIC8qIG1hbmFnZW1lbnQgb2YgU0xSVSBpbmZy YXN0cnVjdHVyZSAqLwogc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVz KGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RNZW1i ZXJQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKLXN0YXRpYyBib29s IE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLAotCQkJ CQkJCQkJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDIpOwogc3RhdGljIHZvaWQgRXh0ZW5kTXVs dGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11 bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpOwot c3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdE9mZnNldCBi b3VuZGFyeSwKLQkJCQkJCQkJCSBNdWx0aVhhY3RPZmZzZXQgc3RhcnQsIHVpbnQzMiBkaXN0 YW5jZSk7Ci1zdGF0aWMgYm9vbCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0 dXApOworc3RhdGljIHZvaWQgU2V0T2Zmc2V0VmFjdXVtTGltaXQodm9pZCk7CiBzdGF0aWMg Ym9vbCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0 T2Zmc2V0ICpyZXN1bHQpOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1bmNhdGVYbG9nUmVjKE9p ZCBvbGRlc3RNdWx0aURCLAogCQkJCQkJCQkgIE11bHRpWGFjdElkIHN0YXJ0VHJ1bmNPZmYs CkBAIC0xMDczLDkwICsxMDY4LDIyIEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVy cywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpCiAJRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KHJl c3VsdCArIDEpOwogCiAJLyoKLQkgKiBSZXNlcnZlIHRoZSBtZW1iZXJzIHNwYWNlLCBzaW1p bGFybHkgdG8gYWJvdmUuICBBbHNvLCBiZSBjYXJlZnVsIG5vdCB0bwotCSAqIHJldHVybiB6 ZXJvIGFzIHRoZSBzdGFydGluZyBvZmZzZXQgZm9yIGFueSBtdWx0aXhhY3QuIFNlZQotCSAq IEdldE11bHRpWGFjdElkTWVtYmVycygpIGZvciBtb3RpdmF0aW9uLgorCSAqIFJlc2VydmUg dGhlIG1lbWJlcnMgc3BhY2UsIHNpbWlsYXJseSB0byBhYm92ZS4KIAkgKi8KIAluZXh0T2Zm c2V0ID0gTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQ7Ci0JaWYgKG5leHRPZmZzZXQgPT0g MCkKLQl7Ci0JCSpvZmZzZXQgPSAxOwotCQlubWVtYmVycysrOwkJCQkvKiBhbGxvY2F0ZSBt ZW1iZXIgc2xvdCAwIHRvbyAqLwotCX0KLQllbHNlCi0JCSpvZmZzZXQgPSBuZXh0T2Zmc2V0 OwotCi0JLyotLS0tLS0tLS0tCi0JICogUHJvdGVjdCBhZ2FpbnN0IG92ZXJydW4gb2YgdGhl IG1lbWJlcnMgc3BhY2UgYXMgd2VsbCwgd2l0aCB0aGUKLQkgKiBmb2xsb3dpbmcgcnVsZXM6 Ci0JICoKLQkgKiBJZiB3ZSdyZSBwYXN0IG9mZnNldFN0b3BMaW1pdCwgcmVmdXNlIHRvIGdl bmVyYXRlIG1vcmUgbXVsdGlzLgotCSAqIElmIHdlJ3JlIGNsb3NlIHRvIG9mZnNldFN0b3BM aW1pdCwgZW1pdCBhIHdhcm5pbmcuCi0JICoKLQkgKiBBcmJpdHJhcmlseSwgd2Ugc3RhcnQg ZW1pdHRpbmcgd2FybmluZ3Mgd2hlbiB3ZSdyZSAyMCBzZWdtZW50cyBvciBsZXNzCi0JICog ZnJvbSBvZmZzZXRTdG9wTGltaXQuCi0JICoKLQkgKiBOb3RlIHdlIGhhdmVuJ3QgdXBkYXRl ZCB0aGUgc2hhcmVkIHN0YXRlIHlldCwgc28gaWYgd2UgZmFpbCBhdCB0aGlzCi0JICogcG9p bnQsIHRoZSBtdWx0aXhhY3QgSUQgd2UgZ3JhYmJlZCBjYW4gc3RpbGwgYmUgdXNlZCBieSB0 aGUgbmV4dCBndXkuCi0JICoKLQkgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gcG9pbnQgaW4g Zm9yY2luZyBhdXRvdmFjdXVtIHJ1bnMgaGVyZTogdGhlCi0JICogbXVsdGl4YWN0IGZyZWV6 ZSBzZXR0aW5ncyB3b3VsZCBoYXZlIHRvIGJlIHJlZHVjZWQgZm9yIHRoYXQgdG8gaGF2ZSBh bnkKLQkgKiBlZmZlY3QuCi0JICotLS0tLS0tLS0tCi0JICovCi0jZGVmaW5lIE9GRlNFVF9X QVJOX1NFR01FTlRTCTIwCi0JaWYgKE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93 biAmJgotCQlNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0U3RhdGUtPm9mZnNl dFN0b3BMaW1pdCwgbmV4dE9mZnNldCwKLQkJCQkJCQkJIG5tZW1iZXJzKSkKLQl7Ci0JCS8q IHNlZSBjb21tZW50IGluIHRoZSBjb3JyZXNwb25kaW5nIG9mZnNldHMgd3JhcGFyb3VuZCBj YXNlICovCi0JCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX1NUQVJUX0FVVE9WQUNf TEFVTkNIRVIpOwotCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9Q Uk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKLQkJCQkgZXJybXNnKCJtdWx0aXhhY3QgXCJtZW1i ZXJzXCIgbGltaXQgZXhjZWVkZWQiKSwKLQkJCQkgZXJyZGV0YWlsX3BsdXJhbCgiVGhpcyBj b21tYW5kIHdvdWxkIGNyZWF0ZSBhIG11bHRpeGFjdCB3aXRoICV1IG1lbWJlcnMsIGJ1dCB0 aGUgcmVtYWluaW5nIHNwYWNlIGlzIG9ubHkgZW5vdWdoIGZvciAldSBtZW1iZXIuIiwKLQkJ CQkJCQkJICAiVGhpcyBjb21tYW5kIHdvdWxkIGNyZWF0ZSBhIG11bHRpeGFjdCB3aXRoICV1 IG1lbWJlcnMsIGJ1dCB0aGUgcmVtYWluaW5nIHNwYWNlIGlzIG9ubHkgZW5vdWdoIGZvciAl dSBtZW1iZXJzLiIsCi0JCQkJCQkJCSAgTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1p dCAtIG5leHRPZmZzZXQgLSAxLAotCQkJCQkJCQkgIG5tZW1iZXJzLAotCQkJCQkJCQkgIE11 bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0IC0gMSksCi0JCQkJ IGVycmhpbnQoIkV4ZWN1dGUgYSBkYXRhYmFzZS13aWRlIFZBQ1VVTSBpbiBkYXRhYmFzZSB3 aXRoIE9JRCAldSB3aXRoIHJlZHVjZWQgXCJ2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9taW5f YWdlXCIgYW5kIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlXCIgc2V0dGlu Z3MuIiwKLQkJCQkJCSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0TXVsdGlYYWN0REIpKSk7Ci0J fQogCiAJLyoKLQkgKiBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBraWNrIGF1dG92YWN1dW0g aW50byBhY3Rpb24sIHRvIHByZXZlbnQgbWVtYmVycwotCSAqIHdyYXBhcm91bmQuIE5CIHdl IHVzZSBhIG11Y2ggbGFyZ2VyIHdpbmRvdyB0byB0cmlnZ2VyIGF1dG92YWN1dW0gdGhhbgot CSAqIGp1c3QgdGhlIHdhcm5pbmcgbGltaXQuIFRoZSB3YXJuaW5nIGlzIGp1c3QgYSBtZWFz dXJlIG9mIGxhc3QgcmVzb3J0IC0KLQkgKiB0aGlzIGlzIGluIGxpbmUgd2l0aCBHZXROZXdU cmFuc2FjdGlvbklkJ3MgYmVoYXZpb3VyLgorCSAqIE9mZnNldHMgYXJlIDY0LWJpdCBpbnRl Z2VycyBhbmQgd2lsbCBuZXZlciB3cmFwIGFyb3VuZC4gIEZpcnN0bHksIGl0CisJICogd291 bGQgdGFrZSBhbiB1bnJlYWxpc3RpYyBhbW91bnQgb2YgdGltZSBhbmQgcmVzb3VyY2VzIHRv IGNvbnN1bWUgMl42NAorCSAqIG9mZnNldHMuICBTZWNvbmRseSwgbXVsdGl4aWQgY3JlYXRp b24gaXMgV0FMLWxvZ2dlZCwgc28geW91IHdvdWxkIHJ1bgorCSAqIG91dCBvZiBMU05zIGJl Zm9yZSByZWFjaGluZyBvZmZzZXQgd3JhcGFyb3VuZC4gIE5ldmVydGhlbGVzcywgY2hlY2sg Zm9yCisJICogd3JhcGFyb3VuZCBhcyBhIHNhbml0eSBjaGVjay4KIAkgKi8KLQlpZiAoIU11 bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93biB8fAotCQkoTXVsdGlYYWN0U3RhdGUt Pm5leHRPZmZzZXQgLSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0Ci0JCSA+IE1VTFRJ WEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpKQotCXsKLQkJLyoKLQkJICogVG8gYXZvaWQg c3dhbXBpbmcgdGhlIHBvc3RtYXN0ZXIgd2l0aCBzaWduYWxzLCB3ZSBpc3N1ZSB0aGUgYXV0 b3ZhYwotCQkgKiByZXF1ZXN0IG9ubHkgd2hlbiBjcm9zc2luZyBhIHNlZ21lbnQgYm91bmRh cnkuIFdpdGggZGVmYXVsdAotCQkgKiBjb21waWxhdGlvbiBzZXR0aW5ncyB0aGF0J3Mgcm91 Z2hseSBhZnRlciA1MGsgbWVtYmVycy4gIFRoaXMgc3RpbGwKLQkJICogZ2l2ZXMgcGxlbnR5 IG9mIGNoYW5jZXMgYmVmb3JlIHdlIGdldCBpbnRvIHJlYWwgdHJvdWJsZS4KLQkJICovCi0J CWlmICgoTVhPZmZzZXRUb01lbWJlclBhZ2UobmV4dE9mZnNldCkgLyBTTFJVX1BBR0VTX1BF Ul9TRUdNRU5UKSAhPQotCQkJKE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG5leHRPZmZzZXQgKyBu bWVtYmVycykgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSkKLQkJCVNlbmRQb3N0bWFzdGVy U2lnbmFsKFBNU0lHTkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIpOwotCX0KLQotCWlmIChN dWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gJiYKLQkJTXVsdGlYYWN0T2Zmc2V0 V291bGRXcmFwKE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQsCi0JCQkJCQkJCSBu ZXh0T2Zmc2V0LAotCQkJCQkJCQkgbm1lbWJlcnMgKyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJf UEFHRSAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgKiBPRkZTRVRfV0FSTl9TRUdNRU5UUykp Ci0JCWVyZXBvcnQoV0FSTklORywKKwlpZiAobmV4dE9mZnNldCArIG5tZW1iZXJzIDwgbmV4 dE9mZnNldCkKKwkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dS QU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJtc2dfcGx1cmFsKCJkYXRhYmFzZSB3aXRo IE9JRCAldSBtdXN0IGJlIHZhY3V1bWVkIGJlZm9yZSAlZCBtb3JlIG11bHRpeGFjdCBtZW1i ZXIgaXMgdXNlZCIsCi0JCQkJCQkJICAgImRhdGFiYXNlIHdpdGggT0lEICV1IG11c3QgYmUg dmFjdXVtZWQgYmVmb3JlICVkIG1vcmUgbXVsdGl4YWN0IG1lbWJlcnMgYXJlIHVzZWQiLAot CQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0 ICsgbm1lbWJlcnMsCi0JCQkJCQkJICAgTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFj dERCLAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0 T2Zmc2V0ICsgbm1lbWJlcnMpLAotCQkJCSBlcnJoaW50KCJFeGVjdXRlIGEgZGF0YWJhc2Ut d2lkZSBWQUNVVU0gaW4gdGhhdCBkYXRhYmFzZSB3aXRoIHJlZHVjZWQgXCJ2YWN1dW1fbXVs dGl4YWN0X2ZyZWV6ZV9taW5fYWdlXCIgYW5kIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVf dGFibGVfYWdlXCIgc2V0dGluZ3MuIikpKTsKKwkJCQkgZXJybXNnKCJNdWx0aVhhY3QgbWVt YmVycyB3b3VsZCB3cmFwIGFyb3VuZCIpKSk7CisJKm9mZnNldCA9IG5leHRPZmZzZXQ7CiAK IAlFeHRlbmRNdWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwgbm1lbWJlcnMpOwogCkBAIC0x MTc3LDggKzExMDQsNyBAQCBHZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11bHRp WGFjdE9mZnNldCAqb2Zmc2V0KQogCSAqIHRoZSBuZXh0IGl0ZXJhdGlvbi4gIEJ1dCBub3Rl IHRoYXQgbmV4dE1YYWN0IG1heSBiZSBJbnZhbGlkTXVsdGlYYWN0SWQKIAkgKiBvciB0aGUg Zmlyc3QgdmFsdWUgb24gYSBzZWdtZW50LWJlZ2lubmluZyBwYWdlIGFmdGVyIHRoaXMgcm91 dGluZQogCSAqIGV4aXRzLCBzbyBhbnlvbmUgZWxzZSBsb29raW5nIGF0IHRoZSB2YXJpYWJs ZSBtdXN0IGJlIHByZXBhcmVkIHRvIGRlYWwKLQkgKiB3aXRoIGVpdGhlciBjYXNlLiAgU2lt aWxhcmx5LCBuZXh0T2Zmc2V0IG1heSBiZSB6ZXJvLCBidXQgd2Ugd29uJ3QgdXNlCi0JICog dGhhdCBhcyB0aGUgYWN0dWFsIHN0YXJ0IG9mZnNldCBvZiB0aGUgbmV4dCBtdWx0aXhhY3Qu CisJICogd2l0aCBlaXRoZXIgY2FzZS4KIAkgKi8KIAkoTXVsdGlYYWN0U3RhdGUtPm5leHRN WGFjdCkrKzsKIApAQCAtMTE4Niw3ICsxMTEyLDggQEAgR2V0TmV3TXVsdGlYYWN0SWQoaW50 IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCkKIAogCUxXTG9ja1JlbGVhc2Uo TXVsdGlYYWN0R2VuTG9jayk7CiAKLQlkZWJ1Z19lbG9nNChERUJVRzIsICJHZXROZXc6IHJl dHVybmluZyAldSBvZmZzZXQgJXUiLCByZXN1bHQsICpvZmZzZXQpOworCWRlYnVnX2Vsb2c0 KERFQlVHMiwgIkdldE5ldzogcmV0dXJuaW5nICV1IG9mZnNldCAlIiBQUkl1NjQsCisJCQkJ cmVzdWx0LCAqb2Zmc2V0KTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjI4LDcgKzEx NTUsNiBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRp WGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJTXVs dGlYYWN0T2Zmc2V0IG9mZnNldDsKIAlpbnQJCQlsZW5ndGg7Ci0JaW50CQkJdHJ1ZWxlbmd0 aDsKIAlNdWx0aVhhY3RJZCBvbGRlc3RNWGFjdDsKIAlNdWx0aVhhY3RJZCBuZXh0TVhhY3Q7 CiAJTXVsdGlYYWN0TWVtYmVyICpwdHI7CkBAIC0xMzA0LDE2ICsxMjMwLDcgQEAgR2V0TXVs dGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKipt ZW1iZXJzLAogCSAqIEZpbmQgb3V0IHRoZSBvZmZzZXQgYXQgd2hpY2ggd2UgbmVlZCB0byBz dGFydCByZWFkaW5nIE11bHRpWGFjdE1lbWJlcnMKIAkgKiBhbmQgdGhlIG51bWJlciBvZiBt ZW1iZXJzIGluIHRoZSBtdWx0aXhhY3QuICBXZSBkZXRlcm1pbmUgdGhlIGxhdHRlciBhcwog CSAqIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBtdWx0aXhhY3QncyBzdGFydGluZyBv ZmZzZXQgYW5kIHRoZSBuZXh0Ci0JICogb25lJ3MuICBIb3dldmVyLCB0aGVyZSBpcyBvbmUg Y29ybmVyIGNhc2UgdG8gd29ycnkgYWJvdXQ6Ci0JICoKLQkgKiBCZWNhdXNlIEdldE5ld011 bHRpWGFjdElkIHNraXBzIG92ZXIgb2Zmc2V0IHplcm8sIHRvIHJlc2VydmUgemVybyBmb3IK LQkgKiB0byBtZWFuICJ1bnNldCIsIHRoZXJlIGlzIGFuIGFtYmlndWl0eSBuZWFyIHRoZSBw b2ludCBvZiBvZmZzZXQKLQkgKiB3cmFwYXJvdW5kLiAgSWYgd2Ugc2VlIG5leHQgbXVsdGl4 YWN0J3Mgb2Zmc2V0IGlzIG9uZSwgaXMgdGhhdCBvdXIKLQkgKiBtdWx0aXhhY3QncyBhY3R1 YWwgZW5kcG9pbnQsIG9yIGRpZCBpdCBlbmQgYXQgemVybyB3aXRoIGEgc3Vic2VxdWVudAot CSAqIGluY3JlbWVudD8gIFdlIGhhbmRsZSB0aGlzIHVzaW5nIHRoZSBrbm93bGVkZ2UgdGhh dCBpZiB0aGUgemVybyd0aAotCSAqIG1lbWJlciBzbG90IHdhc24ndCBmaWxsZWQsIGl0J2xs IGNvbnRhaW4gemVybywgYW5kIHplcm8gaXNuJ3QgYSB2YWxpZAotCSAqIHRyYW5zYWN0aW9u IElEIHNvIGl0IGNhbid0IGJlIGEgbXVsdGl4YWN0IG1lbWJlci4gIFRoZXJlZm9yZSwgaWYg d2UKLQkgKiByZWFkIGEgemVybyBmcm9tIHRoZSBtZW1iZXJzIGFycmF5LCBqdXN0IGlnbm9y ZSBpdC4KKwkgKiBvbmUncy4KIAkgKi8KIAlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0 UGFnZShtdWx0aSk7CiAJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0 aSk7CkBAIC0xMzgwLDEwICsxMjk3LDExIEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0 aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlMV0xvY2tSZWxl YXNlKGxvY2spOwogCWxvY2sgPSBOVUxMOwogCisJLyogQSBtdWx0aXhpZCB3aXRoIHplcm8g bWVtYmVycyBzaG91bGQgbm90IGhhcHBlbiAqLworCUFzc2VydChsZW5ndGggPiAwKTsKKwog CS8qIHJlYWQgdGhlIG1lbWJlcnMgKi8KIAlwdHIgPSAoTXVsdGlYYWN0TWVtYmVyICopIHBh bGxvYyhsZW5ndGggKiBzaXplb2YoTXVsdGlYYWN0TWVtYmVyKSk7Ci0KLQl0cnVlbGVuZ3Ro ID0gMDsKIAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro OyBpKyssIG9mZnNldCsrKQogCXsKQEAgLTE0MjAsMzcgKzEzMzgsMjcgQEAgR2V0TXVsdGlY YWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1i ZXJzLAogCiAJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKQogCQkJKE11bHRpWGFjdE1l bWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKLQot CQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKCp4YWN0cHRyKSkKLQkJewotCQkJLyogQ29y bmVyIGNhc2U6IHdlIG11c3QgYmUgbG9va2luZyBhdCB1bnVzZWQgc2xvdCB6ZXJvICovCi0J CQlBc3NlcnQob2Zmc2V0ID09IDApOwotCQkJY29udGludWU7Ci0JCX0KKwkJQXNzZXJ0KFRy YW5zYWN0aW9uSWRJc1ZhbGlkKCp4YWN0cHRyKSk7CiAKIAkJZmxhZ3NvZmYgPSBNWE9mZnNl dFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKIAkJYnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdzQml0 U2hpZnQob2Zmc2V0KTsKIAkJZmxhZ3NwdHIgPSAodWludDMyICopIChNdWx0aVhhY3RNZW1i ZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGZsYWdzb2ZmKTsKIAotCQlw dHJbdHJ1ZWxlbmd0aF0ueGlkID0gKnhhY3RwdHI7Ci0JCXB0clt0cnVlbGVuZ3RoXS5zdGF0 dXMgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNL OwotCQl0cnVlbGVuZ3RoKys7CisJCXB0cltpXS54aWQgPSAqeGFjdHB0cjsKKwkJcHRyW2ld LnN0YXR1cyA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNUX0JJ VE1BU0s7CiAJfQogCiAJTFdMb2NrUmVsZWFzZShsb2NrKTsKIAotCS8qIEEgbXVsdGl4aWQg d2l0aCB6ZXJvIG1lbWJlcnMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQlBc3NlcnQodHJ1ZWxl bmd0aCA+IDApOwotCiAJLyoKIAkgKiBDb3B5IHRoZSByZXN1bHQgaW50byB0aGUgbG9jYWwg Y2FjaGUuCiAJICovCi0JbVhhY3RDYWNoZVB1dChtdWx0aSwgdHJ1ZWxlbmd0aCwgcHRyKTsK KwltWGFjdENhY2hlUHV0KG11bHRpLCBsZW5ndGgsIHB0cik7CiAKIAlkZWJ1Z19lbG9nMyhE RUJVRzIsICJHZXRNZW1iZXJzOiBubyBjYWNoZSBmb3IgJXMiLAotCQkJCW14aWRfdG9fc3Ry aW5nKG11bHRpLCB0cnVlbGVuZ3RoLCBwdHIpKTsKKwkJCQlteGlkX3RvX3N0cmluZyhtdWx0 aSwgbGVuZ3RoLCBwdHIpKTsKIAkqbWVtYmVycyA9IHB0cjsKLQlyZXR1cm4gdHJ1ZWxlbmd0 aDsKKwlyZXR1cm4gbGVuZ3RoOwogfQogCiAvKgpAQCAtMTg1Nyw3ICsxNzY1LDcgQEAgTXVs dGlYYWN0U2htZW1Jbml0KHZvaWQpCiAJCQkJICAicGdfbXVsdGl4YWN0L21lbWJlcnMiLCBM V1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwKIAkJCQkgIExXVFJBTkNIRV9NVUxU SVhBQ1RNRU1CRVJfU0xSVSwKIAkJCQkgIFNZTkNfSEFORExFUl9NVUxUSVhBQ1RfTUVNQkVS LAotCQkJCSAgZmFsc2UpOworCQkJCSAgdHJ1ZSk7CiAJLyogZG9lc24ndCBjYWxsIFNpbXBs ZUxydVRydW5jYXRlKCkgb3IgbWVldCBjcml0ZXJpYSBmb3IgdW5pdCB0ZXN0cyAqLwogCiAJ LyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIHN0YXRlIHN0cnVjdCAqLwpAQCAtMTkxMiw0OCAr MTgyMCw2IEBAIEJvb3RTdHJhcE11bHRpWGFjdCh2b2lkKQogCVNpbXBsZUxydVplcm9BbmRX cml0ZVBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCAwKTsKIH0KIAotLyoKLSAqIE1heWJlRXh0 ZW5kT2Zmc2V0U2xydQotICoJCUV4dGVuZCB0aGUgb2Zmc2V0cyBTTFJVIGFyZWEsIGlmIG5l Y2Vzc2FyeQotICoKLSAqIEFmdGVyIGEgYmluYXJ5IHVwZ3JhZGUgZnJvbSA8PSA5LjIsIHRo ZSBwZ19tdWx0aXhhY3Qvb2Zmc2V0cyBTTFJVIGFyZWEgbWlnaHQKLSAqIGNvbnRhaW4gZmls ZXMgdGhhdCBhcmUgc2hvcnRlciB0aGFuIG5lY2Vzc2FyeTsgdGhpcyB3b3VsZCBvY2N1ciBp ZiB0aGUgb2xkCi0gKiBpbnN0YWxsYXRpb24gaGFkIHVzZWQgbXVsdGl4YWN0cyBiZXlvbmQg dGhlIGZpcnN0IHBhZ2UgKGZpbGVzIGNhbm5vdCBiZQotICogY29waWVkLCBiZWNhdXNlIHRo ZSBvbi1kaXNrIHJlcHJlc2VudGF0aW9uIGlzIGRpZmZlcmVudCkuICBwZ191cGdyYWRlIHdv dWxkCi0gKiB1cGRhdGUgcGdfY29udHJvbCB0byBzZXQgdGhlIG5leHQgb2Zmc2V0IHZhbHVl IHRvIGJlIGF0IHRoYXQgcG9zaXRpb24sIHNvCi0gKiB0aGF0IHR1cGxlcyBtYXJrZWQgYXMg bG9ja2VkIGJ5IHN1Y2ggTXVsdGlYYWN0cyB3b3VsZCBiZSBzZWVuIGFzIHZpc2libGUKLSAq IHdpdGhvdXQgaGF2aW5nIHRvIGNvbnN1bHQgbXVsdGl4YWN0LiAgSG93ZXZlciwgdHJ5aW5n IHRvIGNyZWF0ZSBhbmQgdXNlIGEKLSAqIG5ldyBNdWx0aVhhY3RJZCB3b3VsZCByZXN1bHQg aW4gYW4gZXJyb3IgYmVjYXVzZSB0aGUgcGFnZSBvbiB3aGljaCB0aGUgbmV3Ci0gKiB2YWx1 ZSB3b3VsZCByZXNpZGUgZG9lcyBub3QgZXhpc3QuICBUaGlzIHJvdXRpbmUgaXMgaW4gY2hh cmdlIG9mIGNyZWF0aW5nCi0gKiBzdWNoIHBhZ2VzLgotICovCi1zdGF0aWMgdm9pZAotTWF5 YmVFeHRlbmRPZmZzZXRTbHJ1KHZvaWQpCi17Ci0JaW50NjQJCXBhZ2VubzsKLQlMV0xvY2sJ ICAgKmxvY2s7Ci0KLQlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhh Y3RTdGF0ZS0+bmV4dE1YYWN0KTsKLQlsb2NrID0gU2ltcGxlTHJ1R2V0QmFua0xvY2soTXVs dGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pOwotCi0JTFdMb2NrQWNxdWlyZShsb2NrLCBMV19F WENMVVNJVkUpOwotCi0JaWYgKCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3QoTXVs dGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKQotCXsKLQkJaW50CQkJc2xvdG5vOwotCi0JCS8q Ci0JCSAqIEZvcnR1bmF0ZWx5IGZvciB1cywgU2ltcGxlTHJ1V3JpdGVQYWdlIGlzIGFscmVh ZHkgcHJlcGFyZWQgdG8gZGVhbAotCQkgKiB3aXRoIGNyZWF0aW5nIGEgbmV3IHNlZ21lbnQg ZmlsZSBldmVuIGlmIHRoZSBwYWdlIHdlJ3JlIHdyaXRpbmcgaXMKLQkJICogbm90IHRoZSBm aXJzdCBpbiBpdCwgc28gdGhpcyBpcyBlbm91Z2guCi0JCSAqLwotCQlzbG90bm8gPSBTaW1w bGVMcnVaZXJvUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2Vubyk7Ci0JCVNpbXBsZUxy dVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7Ci0JfQotCi0JTFdMb2Nr UmVsZWFzZShsb2NrKTsKLX0KLQogLyoKICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgT05DRSBk dXJpbmcgcG9zdG1hc3RlciBvciBzdGFuZGFsb25lLWJhY2tlbmQgc3RhcnR1cC4KICAqCkBA IC0yMDkyLDggKzE5NTgsOCBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJTXVsdGlYYWN0U3Rh dGUtPmZpbmlzaGVkU3RhcnR1cCA9IHRydWU7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RH ZW5Mb2NrKTsKIAotCS8qIE5vdyBjb21wdXRlIGhvdyBmYXIgYXdheSB0aGUgbmV4dCBtZW1i ZXJzIHdyYXBhcm91bmQgaXMuICovCi0JU2V0TXVsdGlYYWN0SWRMaW1pdChvbGRlc3RNWGFj dCwgb2xkZXN0TVhhY3REQiwgdHJ1ZSk7CisJLyogTm93IGNvbXB1dGUgaG93IGZhciBhd2F5 IHRoZSBuZXh0IG11bHRpeGlkIHdyYXBhcm91bmQgaXMuICovCisJU2V0TXVsdGlYYWN0SWRM aW1pdChvbGRlc3RNWGFjdCwgb2xkZXN0TVhhY3REQik7CiB9CiAKIC8qCkBAIC0yMTE0LDcg KzE5ODAsNyBAQCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBpc19zaHV0ZG93biwK IAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJZGVidWdfZWxvZzYoREVC VUcyLAotCQkJCSJNdWx0aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11bHRpICV1LCBuZXh0 T2Zmc2V0ICV1LCBvbGRlc3RNdWx0aSAldSBpbiBEQiAldSIsCisJCQkJIk11bHRpWGFjdDog Y2hlY2twb2ludCBpcyBuZXh0TXVsdGkgJXUsIG5leHRPZmZzZXQgJSIgUFJJdTY0ICIsIG9s ZGVzdE11bHRpICV1IGluIERCICV1IiwKIAkJCQkqbmV4dE11bHRpLCAqbmV4dE11bHRpT2Zm c2V0LCAqb2xkZXN0TXVsdGksICpvbGRlc3RNdWx0aURCKTsKIH0KIApAQCAtMjE0OSwyNiAr MjAxNSwxMiBAQCB2b2lkCiBNdWx0aVhhY3RTZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQgbmV4 dE11bHRpLAogCQkJCQkgIE11bHRpWGFjdE9mZnNldCBuZXh0TXVsdGlPZmZzZXQpCiB7Ci0J ZGVidWdfZWxvZzQoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8g JXUgb2Zmc2V0ICV1IiwKKwlkZWJ1Z19lbG9nNChERUJVRzIsICJNdWx0aVhhY3Q6IHNldHRp bmcgbmV4dCBtdWx0aSB0byAldSBvZmZzZXQgJSIgUFJJdTY0LAogCQkJCW5leHRNdWx0aSwg bmV4dE11bHRpT2Zmc2V0KTsKIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExX X0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCA9IG5leHRNdWx0aTsK IAlNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCA9IG5leHRNdWx0aU9mZnNldDsKIAlMV0xv Y2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwotCi0JLyoKLQkgKiBEdXJpbmcgYSBiaW5h cnkgdXBncmFkZSwgbWFrZSBzdXJlIHRoYXQgdGhlIG9mZnNldHMgU0xSVSBpcyBsYXJnZQot CSAqIGVub3VnaCB0byBjb250YWluIHRoZSBuZXh0IHZhbHVlIHRoYXQgd291bGQgYmUgY3Jl YXRlZC4KLQkgKgotCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyBwcmV0dHkgZWFybHkgZHVyaW5n IHRoZSBmaXJzdCBzdGFydHVwIGluIGJpbmFyeQotCSAqIHVwZ3JhZGUgbW9kZTogYmVmb3Jl IFN0YXJ0dXBNdWx0aVhhY3QoKSBpbiBmYWN0LCBiZWNhdXNlIHRoaXMgcm91dGluZQotCSAq IGlzIGNhbGxlZCBldmVuIGJlZm9yZSB0aGF0IGJ5IFN0YXJ0dXBYTE9HKCkuICBBbmQgd2Ug Y2FuJ3QgZG8gaXQKLQkgKiBlYXJsaWVyIHRoYW4gYXQgdGhpcyBwb2ludCwgYmVjYXVzZSBk dXJpbmcgdGhhdCBmaXJzdCBjYWxsIG9mIHRoaXMKLQkgKiByb3V0aW5lIHdlIGRldGVybWlu ZSB0aGUgTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCB2YWx1ZSB0aGF0Ci0JICogTWF5YmVF eHRlbmRPZmZzZXRTbHJ1IG5lZWRzLgotCSAqLwotCWlmIChJc0JpbmFyeVVwZ3JhZGUpCi0J CU1heWJlRXh0ZW5kT2Zmc2V0U2xydSgpOwogfQogCiAvKgpAQCAtMjE3NiwyOCArMjAyOCwy NCBAQCBNdWx0aVhhY3RTZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQgbmV4dE11bHRpLAogICog ZGF0bWlubXhpZCAoaWUsIHRoZSBvbGRlc3QgTXVsdGlYYWN0SWQgdGhhdCBtaWdodCBleGlz dCBpbiBhbnkgZGF0YWJhc2UKICAqIG9mIG91ciBjbHVzdGVyKSwgYW5kIHRoZSBPSUQgb2Yg dGhlIChvciBhKSBkYXRhYmFzZSB3aXRoIHRoYXQgdmFsdWUuCiAgKgotICogaXNfc3RhcnR1 cCBpcyB0cnVlIHdoZW4gd2UgYXJlIGp1c3Qgc3RhcnRpbmcgdGhlIGNsdXN0ZXIsIGZhbHNl IHdoZW4gd2UKLSAqIGFyZSB1cGRhdGluZyBzdGF0ZSBpbiBhIHJ1bm5pbmcgY2x1c3Rlci4g IFRoaXMgb25seSBhZmZlY3RzIGxvZyBtZXNzYWdlcy4KKyAqIFRoaXMgYWxzbyB1cGRhdGVz IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQsIGJ5IGxvb2tpbmcgdXAgdGhlIG9mZnNl dCBvZgorICogTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdElkLgogICovCiB2b2lk Ci1TZXRNdWx0aVhhY3RJZExpbWl0KE11bHRpWGFjdElkIG9sZGVzdF9kYXRtaW5teGlkLCBP aWQgb2xkZXN0X2RhdG9pZCwKLQkJCQkJYm9vbCBpc19zdGFydHVwKQorU2V0TXVsdGlYYWN0 SWRMaW1pdChNdWx0aVhhY3RJZCBvbGRlc3RfZGF0bWlubXhpZCwgT2lkIG9sZGVzdF9kYXRv aWQpCiB7CiAJTXVsdGlYYWN0SWQgbXVsdGlWYWNMaW1pdDsKIAlNdWx0aVhhY3RJZCBtdWx0 aVdhcm5MaW1pdDsKIAlNdWx0aVhhY3RJZCBtdWx0aVN0b3BMaW1pdDsKIAlNdWx0aVhhY3RJ ZCBtdWx0aVdyYXBMaW1pdDsKIAlNdWx0aVhhY3RJZCBjdXJNdWx0aTsKLQlib29sCQluZWVk c19vZmZzZXRfdmFjdXVtOwogCiAJQXNzZXJ0KE11bHRpWGFjdElkSXNWYWxpZChvbGRlc3Rf ZGF0bWlubXhpZCkpOwogCiAJLyoKIAkgKiBXZSBwcmV0ZW5kIHRoYXQgYSB3cmFwIHdpbGwg aGFwcGVuIGhhbGZ3YXkgdGhyb3VnaCB0aGUgbXVsdGl4YWN0IElECiAJICogc3BhY2UsIGJ1 dCB0aGF0J3Mgbm90IHJlYWxseSB0cnVlLCBiZWNhdXNlIG11bHRpeGFjdHMgd3JhcCBkaWZm ZXJlbnRseQotCSAqIGZyb20gdHJhbnNhY3Rpb24gSURzLiAgTm90ZSB0aGF0LCBzZXBhcmF0 ZWx5IGZyb20gYW55IGNvbmNlcm4gYWJvdXQKLQkgKiBtdWx0aXhhY3QgSURzIHdyYXBwaW5n LCB3ZSBtdXN0IGVuc3VyZSB0aGF0IG11bHRpeGFjdCBtZW1iZXJzIGRvIG5vdAotCSAqIHdy YXAuICBMaW1pdHMgZm9yIHRoYXQgYXJlIHNldCBpbiBTZXRPZmZzZXRWYWN1dW1MaW1pdCwg bm90IGhlcmUuCisJICogZnJvbSB0cmFuc2FjdGlvbiBJRHMuCiAJICovCiAJbXVsdGlXcmFw TGltaXQgPSBvbGRlc3RfZGF0bWlubXhpZCArIChNYXhNdWx0aVhhY3RJZCA+PiAxKTsKIAlp ZiAobXVsdGlXcmFwTGltaXQgPCBGaXJzdE11bHRpWGFjdElkKQpAQCAtMjI2NSw4ICsyMTEz LDEzIEBAIFNldE11bHRpWGFjdElkTGltaXQoTXVsdGlYYWN0SWQgb2xkZXN0X2RhdG1pbm14 aWQsIE9pZCBvbGRlc3RfZGF0b2lkLAogCiAJQXNzZXJ0KCFJblJlY292ZXJ5KTsKIAotCS8q IFNldCBsaW1pdHMgZm9yIG9mZnNldCB2YWN1dW0uICovCi0JbmVlZHNfb2Zmc2V0X3ZhY3V1 bSA9IFNldE9mZnNldFZhY3V1bUxpbWl0KGlzX3N0YXJ0dXApOworCS8qCisJICogT2Zmc2V0 cyBhcmUgNjQtYml0cyB3aWRlIGFuZCBuZXZlciB3cmFwIGFyb3VuZCwgc28gd2UgZG9uJ3Qg bmVlZCB0bworCSAqIGNvbnNpZGVyIHRoZW0gZm9yIGVtZXJnZW5jeSBhdXRvdmFjdXVtIHB1 cnBvc2VzLiAgQnV0IG5vdyB0aGF0IHdlJ3JlIGluCisJICogYSBjb25zaXN0ZW50IHN0YXRl LCBkZXRlcm1pbmUgTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldCwgdG8gYmUgdXNlZAor CSAqIHRvIGNhbGN1bGF0ZSBmcmVlemluZyBjdXRvZmYgdG8ga2VlcCB0aGUgb2Zmc2V0cyBk aXNrIHVzYWdlIGluIGNoZWNrLgorCSAqLworCVNldE9mZnNldFZhY3V1bUxpbWl0KCk7CiAK IAkvKgogCSAqIElmIHBhc3QgdGhlIGF1dG92YWN1dW0gZm9yY2UgcG9pbnQsIGltbWVkaWF0 ZWx5IHNpZ25hbCBhbiBhdXRvdmFjCkBAIC0yMjc1LDggKzIxMjgsNyBAQCBTZXRNdWx0aVhh Y3RJZExpbWl0KE11bHRpWGFjdElkIG9sZGVzdF9kYXRtaW5teGlkLCBPaWQgb2xkZXN0X2Rh dG9pZCwKIAkgKiBkYXRhYmFzZSwgaXQnbGwgY2FsbCBoZXJlLCBhbmQgd2UnbGwgc2lnbmFs IHRoZSBwb3N0bWFzdGVyIHRvIHN0YXJ0CiAJICogYW5vdGhlciBpdGVyYXRpb24gaW1tZWRp YXRlbHkgaWYgdGhlcmUgYXJlIHN0aWxsIGFueSBvbGQgZGF0YWJhc2VzLgogCSAqLwotCWlm ICgoTXVsdGlYYWN0SWRQcmVjZWRlcyhtdWx0aVZhY0xpbWl0LCBjdXJNdWx0aSkgfHwKLQkJ IG5lZWRzX29mZnNldF92YWN1dW0pICYmIElzVW5kZXJQb3N0bWFzdGVyKQorCWlmIChNdWx0 aVhhY3RJZFByZWNlZGVzKG11bHRpVmFjTGltaXQsIGN1ck11bHRpKSAmJiBJc1VuZGVyUG9z dG1hc3RlcikKIAkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfU1RBUlRfQVVUT1ZB Q19MQVVOQ0hFUik7CiAKIAkvKiBHaXZlIGFuIGltbWVkaWF0ZSB3YXJuaW5nIGlmIHBhc3Qg dGhlIHdyYXAgd2FybiBwb2ludCAqLwpAQCAtMjMzOCw5ICsyMTkwLDkgQEAgTXVsdGlYYWN0 QWR2YW5jZU5leHRNWGFjdChNdWx0aVhhY3RJZCBtaW5NdWx0aSwKIAkJZGVidWdfZWxvZzMo REVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8gJXUiLCBtaW5NdWx0 aSk7CiAJCU11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgPSBtaW5NdWx0aTsKIAl9Ci0JaWYg KE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0LCBt aW5NdWx0aU9mZnNldCkpCisJaWYgKE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0IDwgbWlu TXVsdGlPZmZzZXQpCiAJewotCQlkZWJ1Z19lbG9nMyhERUJVRzIsICJNdWx0aVhhY3Q6IHNl dHRpbmcgbmV4dCBvZmZzZXQgdG8gJXUiLAorCQlkZWJ1Z19lbG9nMyhERUJVRzIsICJNdWx0 aVhhY3Q6IHNldHRpbmcgbmV4dCBvZmZzZXQgdG8gJSIgUFJJVTY0LAogCQkJCQltaW5NdWx0 aU9mZnNldCk7CiAJCU11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0ID0gbWluTXVsdGlPZmZz ZXQ7CiAJfQpAQCAtMjM1OSw3ICsyMjExLDcgQEAgTXVsdGlYYWN0QWR2YW5jZU9sZGVzdChN dWx0aVhhY3RJZCBvbGRlc3RNdWx0aSwgT2lkIG9sZGVzdE11bHRpREIpCiAJQXNzZXJ0KElu UmVjb3ZlcnkpOwogCiAJaWYgKE11bHRpWGFjdElkUHJlY2VkZXMoTXVsdGlYYWN0U3RhdGUt Pm9sZGVzdE11bHRpWGFjdElkLCBvbGRlc3RNdWx0aSkpCi0JCVNldE11bHRpWGFjdElkTGlt aXQob2xkZXN0TXVsdGksIG9sZGVzdE11bHRpREIsIGZhbHNlKTsKKwkJU2V0TXVsdGlYYWN0 SWRMaW1pdChvbGRlc3RNdWx0aSwgb2xkZXN0TXVsdGlEQik7CiB9CiAKIC8qCkBAIC0yNDQy LDI3ICsyMjk0LDExIEBAIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQg b2Zmc2V0LCBpbnQgbm1lbWJlcnMpCiAJCQlMV0xvY2tSZWxlYXNlKGxvY2spOwogCQl9CiAK LQkJLyoKLQkJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRpbGwgZW5kIG9mIGN1 cnJlbnQgcGFnZS4gIENhcmVmdWw6IGlmCi0JCSAqIGFkZGl0aW9uIG9mIHVuc2lnbmVkIGlu dHMgd3JhcHMgYXJvdW5kLCB3ZSdyZSBhdCB0aGUgbGFzdCBwYWdlIG9mCi0JCSAqIHRoZSBs YXN0IHNlZ21lbnQ7IHNpbmNlIHRoYXQgcGFnZSBob2xkcyBhIGRpZmZlcmVudCBudW1iZXIg b2YgaXRlbXMKLQkJICogdGhhbiBvdGhlciBwYWdlcywgd2UgbmVlZCB0byBkbyBpdCBkaWZm ZXJlbnRseS4KLQkJICovCi0JCWlmIChvZmZzZXQgKyBNQVhfTUVNQkVSU19JTl9MQVNUX01F TUJFUlNfUEFHRSA8IG9mZnNldCkKLQkJewotCQkJLyoKLQkJCSAqIFRoaXMgaXMgdGhlIGxh c3QgcGFnZSBvZiB0aGUgbGFzdCBzZWdtZW50OyB3ZSBjYW4gY29tcHV0ZSB0aGUKLQkJCSAq IG51bWJlciBvZiBpdGVtcyBsZWZ0IHRvIGFsbG9jYXRlIGluIGl0IHdpdGhvdXQgbW9kdWxv Ci0JCQkgKiBhcml0aG1ldGljLgotCQkJICovCi0JCQlkaWZmZXJlbmNlID0gTWF4TXVsdGlY YWN0T2Zmc2V0IC0gb2Zmc2V0ICsgMTsKLQkJfQotCQllbHNlCi0JCQlkaWZmZXJlbmNlID0g TVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgLSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVS U19QRVJfUEFHRTsKKwkJLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRpbGwgZW5k IG9mIGN1cnJlbnQgcGFnZS4gKi8KKwkJZGlmZmVyZW5jZSA9IE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9QQUdFIC0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7CiAKIAkJ LyoKLQkJICogQWR2YW5jZSB0byBuZXh0IHBhZ2UsIHRha2luZyBjYXJlIHRvIHByb3Blcmx5 IGhhbmRsZSB0aGUgd3JhcGFyb3VuZAotCQkgKiBjYXNlLiAgT0sgaWYgbm1lbWJlcnMgZ29l cyBuZWdhdGl2ZS4KKwkJICogQWR2YW5jZSB0byBuZXh0IHBhZ2UuICBPSyBpZiBubWVtYmVy cyBnb2VzIG5lZ2F0aXZlLgogCQkgKi8KIAkJbm1lbWJlcnMgLT0gZGlmZmVyZW5jZTsKIAkJ b2Zmc2V0ICs9IGRpZmZlcmVuY2U7CkBAIC0yNTI0LDI4ICsyMzYwLDE3IEBAIEdldE9sZGVz dE11bHRpWGFjdElkKHZvaWQpCiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgaG93IGFnZ3Jlc3Np dmVseSB3ZSBuZWVkIHRvIHZhY3V1bSBpbiBvcmRlciB0byBwcmV2ZW50IG1lbWJlcgotICog d3JhcGFyb3VuZC4KLSAqCi0gKiBUbyBkbyBzbyBkZXRlcm1pbmUgd2hhdCdzIHRoZSBvbGRl c3QgbWVtYmVyIG9mZnNldCBhbmQgaW5zdGFsbCB0aGUgbGltaXQKLSAqIGluZm8gaW4gTXVs dGlYYWN0U3RhdGUsIHdoZXJlIGl0IGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgb3ZlcnJ1biBv ZiBvbGQgZGF0YQotICogaW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLgotICoKLSAqIFRoZSBy ZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiBlbWVyZ2VuY3kgYXV0b3ZhY3V1bSBpcyByZXF1aXJl ZCBhbmQgZmFsc2UKLSAqIG90aGVyd2lzZS4KKyAqIENhbGN1bGF0ZSB0aGUgb2xkZXN0IG1l bWJlciBvZmZzZXQgYW5kIGluc3RhbGwgaXQgaW4gTXVsdGlYYWN0U3RhdGUsIHdoZXJlCisg KiBpdCBjYW4gYmUgdXNlZCB0byBhZGp1c3QgbXVsdGl4aWQgZnJlZXppbmcgY3V0b2Zmcy4K ICAqLwotc3RhdGljIGJvb2wKLVNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1 cCkKK3N0YXRpYyB2b2lkCitTZXRPZmZzZXRWYWN1dW1MaW1pdCh2b2lkKQogewogCU11bHRp WGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwogCU11bHRpWGFjdElkIG5leHRNWGFjdDsKIAlN dWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0ID0gMDsJLyogcGxhY2F0ZSBjb21waWxlciAq LwotCU11bHRpWGFjdE9mZnNldCBwcmV2T2xkZXN0T2Zmc2V0OwogCU11bHRpWGFjdE9mZnNl dCBuZXh0T2Zmc2V0OwogCWJvb2wJCW9sZGVzdE9mZnNldEtub3duID0gZmFsc2U7Ci0JYm9v bAkJcHJldk9sZGVzdE9mZnNldEtub3duOwotCU11bHRpWGFjdE9mZnNldCBvZmZzZXRTdG9w TGltaXQgPSAwOwotCU11bHRpWGFjdE9mZnNldCBwcmV2T2Zmc2V0U3RvcExpbWl0OwogCiAJ LyoKIAkgKiBOQjogSGF2ZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgdHJ1bmNhdGlvbiwgd2Ug bWlnaHQgb3RoZXJ3aXNlIHRyeSB0bwpAQCAtMjU1OCw5ICsyMzgzLDYgQEAgU2V0T2Zmc2V0 VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCW9sZGVzdE11bHRpWGFjdElkID0gTXVs dGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdElkOwogCW5leHRNWGFjdCA9IE11bHRpWGFj dFN0YXRlLT5uZXh0TVhhY3Q7CiAJbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0 T2Zmc2V0OwotCXByZXZPbGRlc3RPZmZzZXRLbm93biA9IE11bHRpWGFjdFN0YXRlLT5vbGRl c3RPZmZzZXRLbm93bjsKLQlwcmV2T2xkZXN0T2Zmc2V0ID0gTXVsdGlYYWN0U3RhdGUtPm9s ZGVzdE9mZnNldDsKLQlwcmV2T2Zmc2V0U3RvcExpbWl0ID0gTXVsdGlYYWN0U3RhdGUtPm9m ZnNldFN0b3BMaW1pdDsKIAlBc3NlcnQoTXVsdGlYYWN0U3RhdGUtPmZpbmlzaGVkU3RhcnR1 cCk7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIApAQCAtMjU4MywxMjEg KzI0MDUsMzkgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCWVs c2UKIAl7CiAJCS8qCi0JCSAqIEZpZ3VyZSBvdXQgd2hlcmUgdGhlIG9sZGVzdCBleGlzdGlu ZyBtdWx0aXhhY3QncyBvZmZzZXRzIGFyZQotCQkgKiBzdG9yZWQuIER1ZSB0byBidWdzIGlu IGVhcmx5IHJlbGVhc2Ugb2YgUG9zdGdyZVNRTCA5LjMuWCBhbmQgOS40LlgsCi0JCSAqIHRo ZSBzdXBwb3NlZGx5LWVhcmxpZXN0IG11bHRpeGFjdCBtaWdodCBub3QgcmVhbGx5IGV4aXN0 LiAgV2UgYXJlCi0JCSAqIGNhcmVmdWwgbm90IHRvIGZhaWwgaW4gdGhhdCBjYXNlLgorCQkg KiBMb29rIHVwIHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIG9sZGVzdCBleGlzdGluZyBtdWx0 aXhhY3QncyBtZW1iZXJzCisJCSAqIGFyZSBzdG9yZWQuICBJZiB3ZSBjYW5ub3QgZmluZCBp dCwgYmUgY2FyZWZ1bCBub3QgdG8gZmFpbCwgYW5kCisJCSAqIGxlYXZlIG9sZGVzdE9mZnNl dCB1bmNoYW5nZWQuICBvbGRlc3RPZmZzZXQgaXMgaW5pdGlhbGl6ZWQgdG8gemVybworCQkg KiBhdCBzeXN0ZW0gc3RhcnR1cCwgd2hpY2ggcHJldmVudHMgdHJ1bmNhdGluZyBtZW1iZXJz IHVudGlsIGEgcHJvcGVyCisJCSAqIHZhbHVlIGlzIGNhbGN1bGF0ZWQuCisJCSAqCisJCSAq IChXZSBoYWQgYnVncyBpbiBlYXJseSByZWxlYXNlcyBvZiBQb3N0Z3JlU1FMIDkuMy5YIGFu ZCA5LjQuWCB3aGVyZQorCQkgKiB0aGUgc3VwcG9zZWRseS1lYXJsaWVzdCBtdWx0aXhhY3Qg bWlnaHQgbm90IHJlYWxseSBleGlzdC4gIFRob3NlCisJCSAqIHNob3VsZCBiZSBsb25nIGdv bmUgYnkgbm93LCBzbyB0aGlzIHNob3VsZCBub3QgZmFpbCwgYnV0IGxldCdzCisJCSAqIHN0 aWxsIGJlIGRlZmVuc2l2ZS4pCiAJCSAqLwogCQlvbGRlc3RPZmZzZXRLbm93biA9CiAJCQlm aW5kX211bHRpeGFjdF9zdGFydChvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCk7 CiAKIAkJaWYgKG9sZGVzdE9mZnNldEtub3duKQogCQkJZXJlcG9ydChERUJVRzEsCi0JCQkJ CShlcnJtc2dfaW50ZXJuYWwoIm9sZGVzdCBNdWx0aVhhY3RJZCBtZW1iZXIgaXMgYXQgb2Zm c2V0ICV1IiwKKwkJCQkJKGVycm1zZ19pbnRlcm5hbCgib2xkZXN0IE11bHRpWGFjdElkIG1l bWJlciBpcyBhdCBvZmZzZXQgJSIgUFJJdTY0LAogCQkJCQkJCQkJIG9sZGVzdE9mZnNldCkp KTsKIAkJZWxzZQogCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coIk11bHRpWGFjdCBt ZW1iZXIgd3JhcGFyb3VuZCBwcm90ZWN0aW9ucyBhcmUgZGlzYWJsZWQgYmVjYXVzZSBvbGRl c3QgY2hlY2twb2ludGVkIE11bHRpWGFjdCAldSBkb2VzIG5vdCBleGlzdCBvbiBkaXNrIiwK KwkJCQkJKGVycm1zZygib2xkZXN0IGNoZWNrcG9pbnRlZCBNdWx0aVhhY3QgJXUgZG9lcyBu b3QgZXhpc3Qgb24gZGlzayIsCiAJCQkJCQkJb2xkZXN0TXVsdGlYYWN0SWQpKSk7CiAJfQog CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RUcnVuY2F0aW9uTG9jayk7CiAKLQkvKgotCSAq IElmIHdlIGNhbiwgY29tcHV0ZSBsaW1pdHMgKGFuZCBpbnN0YWxsIHRoZW0gTXVsdGlYYWN0 U3RhdGUpIHRvIHByZXZlbnQKLQkgKiBvdmVycnVuIG9mIG9sZCBkYXRhIGluIHRoZSBtZW1i ZXJzIFNMUlUgYXJlYS4gV2UgY2FuIG9ubHkgZG8gc28gaWYgdGhlCi0JICogb2xkZXN0IG9m ZnNldCBpcyBrbm93biB0aG91Z2guCi0JICovCisJLyogSW5zdGFsbCB0aGUgY29tcHV0ZWQg dmFsdWUgKi8KIAlpZiAob2xkZXN0T2Zmc2V0S25vd24pCiAJewotCQkvKiBtb3ZlIGJhY2sg dG8gc3RhcnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VnbWVudCAqLwotCQlvZmZzZXRTdG9w TGltaXQgPSBvbGRlc3RPZmZzZXQgLSAob2xkZXN0T2Zmc2V0ICUKLQkJCQkJCQkJCQkgIChN VUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRSAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpKTsK LQotCQkvKiBhbHdheXMgbGVhdmUgb25lIHNlZ21lbnQgYmVmb3JlIHRoZSB3cmFwYXJvdW5k IHBvaW50ICovCi0JCW9mZnNldFN0b3BMaW1pdCAtPSAoTVVMVElYQUNUX01FTUJFUlNfUEVS X1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKLQotCQlpZiAoIXByZXZPbGRlc3RP ZmZzZXRLbm93biAmJiAhaXNfc3RhcnR1cCkKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJy bXNnKCJNdWx0aVhhY3QgbWVtYmVyIHdyYXBhcm91bmQgcHJvdGVjdGlvbnMgYXJlIG5vdyBl bmFibGVkIikpKTsKLQotCQllcmVwb3J0KERFQlVHMSwKLQkJCQkoZXJybXNnX2ludGVybmFs KCJNdWx0aVhhY3QgbWVtYmVyIHN0b3AgbGltaXQgaXMgbm93ICV1IGJhc2VkIG9uIE11bHRp WGFjdCAldSIsCi0JCQkJCQkJCSBvZmZzZXRTdG9wTGltaXQsIG9sZGVzdE11bHRpWGFjdElk KSkpOwotCX0KLQllbHNlIGlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCi0JewotCQkvKgot CQkgKiBJZiB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRoaXMgdGltZSwg YnV0IHdlIGhhdmUgYQotCQkgKiB2YWx1ZSBmcm9tIGEgcHJldmlvdXMgcGFzcyB0aHJvdWdo IHRoaXMgZnVuY3Rpb24sIHVzZSB0aGUgb2xkCi0JCSAqIHZhbHVlcyByYXRoZXIgdGhhbiBh dXRvbWF0aWNhbGx5IGZvcmNpbmcgYW4gZW1lcmdlbmN5IGF1dG92YWN1dW0KLQkJICogY3lj bGUgYWdhaW4uCi0JCSAqLwotCQlvbGRlc3RPZmZzZXQgPSBwcmV2T2xkZXN0T2Zmc2V0Owot CQlvbGRlc3RPZmZzZXRLbm93biA9IHRydWU7Ci0JCW9mZnNldFN0b3BMaW1pdCA9IHByZXZP ZmZzZXRTdG9wTGltaXQ7CisJCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2VuTG9jaywgTFdf RVhDTFVTSVZFKTsKKwkJTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldCA9IG9sZGVzdE9m ZnNldDsKKwkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAl9Ci0KLQkvKiBJ bnN0YWxsIHRoZSBjb21wdXRlZCB2YWx1ZXMgKi8KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFj dEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNl dCA9IG9sZGVzdE9mZnNldDsKLQlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24g PSBvbGRlc3RPZmZzZXRLbm93bjsKLQlNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0 ID0gb2Zmc2V0U3RvcExpbWl0OwotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7 Ci0KLQkvKgotCSAqIERvIHdlIG5lZWQgYW4gZW1lcmdlbmN5IGF1dG92YWN1dW0/CUlmIHdl J3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgotCSAqLwotCXJldHVybiAhb2xkZXN0T2Zmc2V0 S25vd24gfHwKLQkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1RfTUVN QkVSX1NBRkVfVEhSRVNIT0xEKTsKLX0KLQotLyoKLSAqIFJldHVybiB3aGV0aGVyIGFkZGlu ZyAiZGlzdGFuY2UiIHRvICJzdGFydCIgd291bGQgbW92ZSBwYXN0ICJib3VuZGFyeSIuCi0g KgotICogV2UgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkZGl0aW9uIGlz ICJ3cmFwcGluZyBhcm91bmQiIHRoZQotICogYm91bmRhcnkgcG9pbnQsIGhlbmNlIHRoZSBu YW1lLiAgVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgcmVndWxhcgotICog Ml4zMS1tb2R1bG8gYXJpdGhtZXRpYyBoZXJlIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxl IHRvIHVzZSB0aGUgd2hvbGUgb2YKLSAqIHRoZSAyXjMyLTEgc3BhY2UgaGVyZSwgYWxsb3dp bmcgZm9yIG1vcmUgbXVsdGl4YWN0cyB0aGFuIHdvdWxkIGZpdAotICogb3RoZXJ3aXNlLgot ICovCi1zdGF0aWMgYm9vbAotTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdE9m ZnNldCBib3VuZGFyeSwgTXVsdGlYYWN0T2Zmc2V0IHN0YXJ0LAotCQkJCQkJIHVpbnQzMiBk aXN0YW5jZSkKLXsKLQlNdWx0aVhhY3RPZmZzZXQgZmluaXNoOwotCi0JLyoKLQkgKiBOb3Rl IHRoYXQgb2Zmc2V0IG51bWJlciAwIGlzIG5vdCB1c2VkIChzZWUgR2V0TXVsdGlYYWN0SWRN ZW1iZXJzKSwgc28KLQkgKiBpZiB0aGUgYWRkaXRpb24gd3JhcHMgYXJvdW5kIHRoZSBVSU5U X01BWCBib3VuZGFyeSwgc2tpcCB0aGF0IHZhbHVlLgotCSAqLwotCWZpbmlzaCA9IHN0YXJ0 ICsgZGlzdGFuY2U7Ci0JaWYgKGZpbmlzaCA8IHN0YXJ0KQotCQlmaW5pc2grKzsKLQotCS8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1lcmljYWxs eSBncmVhdGVyIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50LCBhbnkKLQkgKiB2YWx1ZSBudW1l cmljYWxseSBiZXR3ZWVuIHRoZSB0d28gaXMgbm90IHdyYXBwZWQ6Ci0JICoKLQkgKgk8LS0t LVMtLS0tQi0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIHdyYXBwZWQgcGFzdCBCIChhbmQgVUlO VF9NQVgpCi0JICoJCSBbLS0tKQkJID0gRiBub3Qgd3JhcHBlZAotCSAqCQkJICBbLS0tLV0g PSBGIHdyYXBwZWQgcGFzdCBCCi0JICoKLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1l cmljYWxseSBsZXNzIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50IChpLmUuIHRoZQotCSAqIFVJ TlRfTUFYIHdyYXBhcm91bmQgb2NjdXJzIHNvbWV3aGVyZSBpbiBiZXR3ZWVuKSB0aGVuIGFs bCB2YWx1ZXMgaW4KLQkgKiBiZXR3ZWVuIGFyZSB3cmFwcGVkOgotCSAqCi0JICoJPC0tLS1C LS0tLVMtLS0tPgotCSAqCVstLS0pCQkJID0gRiBub3Qgd3JhcHBlZCBwYXN0IEIgKGJ1dCB3 cmFwcGVkIHBhc3QgVUlOVF9NQVgpCi0JICoJCSBbLS0tKQkJID0gRiB3cmFwcGVkIHBhc3Qg QiAoYW5kIFVJTlRfTUFYKQotCSAqCQkJICBbLS0tLV0gPSBGIG5vdCB3cmFwcGVkCi0JICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotCSAqLwotCWlmIChzdGFydCA8IGJvdW5kYXJ5KQotCQlyZXR1 cm4gZmluaXNoID49IGJvdW5kYXJ5IHx8IGZpbmlzaCA8IHN0YXJ0OwotCWVsc2UKLQkJcmV0 dXJuIGZpbmlzaCA+PSBib3VuZGFyeSAmJiBmaW5pc2ggPCBzdGFydDsKIH0KIAogLyoKQEAg LTI3NTEsMzcgKzI0OTEsMjMgQEAgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQg bXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KQogICogbWVtYmVyczogTnVtYmVyIG9m IG1lbWJlciBlbnRyaWVzIChuZXh0T2Zmc2V0IC0gb2xkZXN0T2Zmc2V0KQogICogb2xkZXN0 TXVsdGlYYWN0SWQ6IE9sZGVzdCBNdWx0aVhhY3QgSUQgc3RpbGwgaW4gdXNlCiAgKiBvbGRl c3RPZmZzZXQ6IE9sZGVzdCBvZmZzZXQgc3RpbGwgaW4gdXNlCi0gKgotICogUmV0dXJucyBm YWxzZSBpZiB1bmFibGUgdG8gZGV0ZXJtaW5lLCB0aGUgb2xkZXN0IG9mZnNldCBiZWluZyB1 bmtub3duLgogICovCi1ib29sCit2b2lkCiBHZXRNdWx0aVhhY3RJbmZvKHVpbnQzMiAqbXVs dGl4YWN0cywgTXVsdGlYYWN0T2Zmc2V0ICptZW1iZXJzLAogCQkJCSBNdWx0aVhhY3RJZCAq b2xkZXN0TXVsdGlYYWN0SWQsIE11bHRpWGFjdE9mZnNldCAqb2xkZXN0T2Zmc2V0KQogewog CU11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0OwogCU11bHRpWGFjdElkIG5leHRNdWx0aVhh Y3RJZDsKLQlib29sCQlvbGRlc3RPZmZzZXRLbm93bjsKIAogCUxXTG9ja0FjcXVpcmUoTXVs dGlYYWN0R2VuTG9jaywgTFdfU0hBUkVEKTsKIAluZXh0T2Zmc2V0ID0gTXVsdGlYYWN0U3Rh dGUtPm5leHRPZmZzZXQ7CiAJKm9sZGVzdE11bHRpWGFjdElkID0gTXVsdGlYYWN0U3RhdGUt Pm9sZGVzdE11bHRpWGFjdElkOwogCW5leHRNdWx0aVhhY3RJZCA9IE11bHRpWGFjdFN0YXRl LT5uZXh0TVhhY3Q7CiAJKm9sZGVzdE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RP ZmZzZXQ7Ci0Jb2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zm c2V0S25vd247CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAotCWlmICgh b2xkZXN0T2Zmc2V0S25vd24pCi0JewotCQkqbWVtYmVycyA9IDA7Ci0JCSptdWx0aXhhY3Rz ID0gMDsKLQkJKm9sZGVzdE11bHRpWGFjdElkID0gSW52YWxpZE11bHRpWGFjdElkOwotCQkq b2xkZXN0T2Zmc2V0ID0gMDsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQogCSptZW1iZXJzID0g bmV4dE9mZnNldCAtICpvbGRlc3RPZmZzZXQ7CiAJKm11bHRpeGFjdHMgPSBuZXh0TXVsdGlY YWN0SWQgLSAqb2xkZXN0TXVsdGlYYWN0SWQ7Ci0JcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBA IC0yNzkwLDI2ICsyNTE2LDI3IEBAIEdldE11bHRpWGFjdEluZm8odWludDMyICptdWx0aXhh Y3RzLCBNdWx0aVhhY3RPZmZzZXQgKm1lbWJlcnMsCiAgKiB2YWN1dW1fbXVsdGl4YWN0X2Zy ZWV6ZV90YWJsZV9hZ2Ugd29yayB0b2dldGhlciB0byBtYWtlIHN1cmUgd2UgbmV2ZXIgaGF2 ZQogICogdG9vIG1hbnkgbXVsdGl4YWN0czsgd2UgaG9wZSB0aGF0LCBhdCBsZWFzdCB1bmRl ciBub3JtYWwgY2lyY3Vtc3RhbmNlcywKICAqIHRoaXMgd2lsbCBhbHNvIGJlIHN1ZmZpY2ll bnQgdG8ga2VlcCB1cyBmcm9tIHVzaW5nIHRvbyBtYW55IG9mZnNldHMuCi0gKiBIb3dldmVy LCBpZiB0aGUgYXZlcmFnZSBtdWx0aXhhY3QgaGFzIG1hbnkgbWVtYmVycywgd2UgbWlnaHQg ZXhoYXVzdCB0aGUKLSAqIG1lbWJlcnMgc3BhY2Ugd2hpbGUgc3RpbGwgdXNpbmcgZmV3IGVu b3VnaCBtZW1iZXJzIHRoYXQgdGhlc2UgbGltaXRzIGZhaWwKLSAqIHRvIHRyaWdnZXIgcmVs bWlubXhpZCBhZHZhbmNlbWVudCBieSBWQUNVVU0uICBBdCB0aGF0IHBvaW50LCB3ZSdkIGhh dmUgbm8KLSAqIGNob2ljZSBidXQgdG8gc3RhcnQgZmFpbGluZyBtdWx0aXhhY3QtY3JlYXRp bmcgb3BlcmF0aW9ucyB3aXRoIGFuIGVycm9yLgotICoKLSAqIFRvIHByZXZlbnQgdGhhdCwg aWYgbW9yZSB0aGFuIGEgdGhyZXNob2xkIHBvcnRpb24gb2YgdGhlIG1lbWJlcnMgc3BhY2Ug aXMKLSAqIHVzZWQsIHdlIGVmZmVjdGl2ZWx5IHJlZHVjZSBhdXRvdmFjdXVtX211bHRpeGFj dF9mcmVlemVfbWF4X2FnZSBhbmQKLSAqIHRvIGEgdmFsdWUganVzdCBsZXNzIHRoYW4gdGhl IG51bWJlciBvZiBtdWx0aXhhY3RzIGluIHVzZS4gIFdlIGhvcGUgdGhhdAotICogdGhpcyB3 aWxsIHF1aWNrbHkgdHJpZ2dlciBhdXRvdmFjdXVtaW5nIG9uIHRoZSB0YWJsZSBvciB0YWJs ZXMgd2l0aCB0aGUKLSAqIG9sZGVzdCByZWxtaW5teGlkLCB0aHVzIGFsbG93aW5nIGRhdG1p bm14aWQgdmFsdWVzIHRvIGFkdmFuY2UgYW5kIHJlbW92aW5nCi0gKiBzb21lIG1lbWJlcnMu Ci0gKgotICogQXMgdGhlIGZyYWN0aW9uIG9mIHRoZSBtZW1iZXIgc3BhY2UgY3VycmVudGx5 IGluIHVzZSBncm93cywgd2UgYmVjb21lCi0gKiBtb3JlIGFnZ3Jlc3NpdmUgaW4gY2xhbXBp bmcgdGhpcyB2YWx1ZS4gIFRoYXQgbm90IG9ubHkgY2F1c2VzIGF1dG92YWN1dW0KLSAqIHRv IHJhbXAgdXAsIGJ1dCBhbHNvIG1ha2VzIGFueSBtYW51YWwgdmFjdXVtcyB0aGUgdXNlciBp c3N1ZXMgbW9yZQotICogYWdncmVzc2l2ZS4gIFRoaXMgaGFwcGVucyBiZWNhdXNlIHZhY3V1 bV9nZXRfY3V0b2ZmcygpIHdpbGwgY2xhbXAgdGhlCi0gKiBmcmVlemUgdGFibGUgYW5kIHRo ZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0b2ZmcyBiYXNlZCBvbiB0aGUgZWZmZWN0aXZlCi0g KiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSB0aGlzIGZ1bmN0aW9uIHJl dHVybnMuICBJbiB0aGUgd29yc3QKLSAqIGNhc2UsIHdlJ2xsIGNsYWltIHRoZSBmcmVlemVf bWF4X2FnZSB0byB6ZXJvLCBhbmQgZXZlcnkgdmFjdXVtIG9mIGFueQotICogdGFibGUgd2ls bCBmcmVlemUgZXZlcnkgbXVsdGl4YWN0LgorICogSG93ZXZlciwgaWYgdGhlIGF2ZXJhZ2Ug bXVsdGl4YWN0IGhhcyBtYW55IG1lbWJlcnMsIHdlIG1pZ2h0IGFjY3VtdWxhdGUgYQorICog bGFyZ2UgYW1vdW50IG9mIG1lbWJlcnMsIGNvbnN1bWluZyBkaXNrIHNwYWNlLCB3aGlsZSBz dGlsbCB1c2luZyBmZXcgZW5vdWdoCisgKiBtdWx0aXhpZHMgdGhhdCB0aGUgbXVsdGl4aWQg bGltaXRzIGZhaWwgdG8gdHJpZ2dlciByZWxtaW5teGlkIGFkdmFuY2VtZW50CisgKiBieSBW QUNVVU0uCisgKgorICogVG8gcHJldmVudCB0aGF0LCBpZiB0aGUgbWVtYmVycyBzcGFjZSB1 c2FnZSBleGNlZWRzIGEgdGhyZXNob2xkCisgKiAoTVVMVElYQUNUX01FTUJFUl9MT1dfVEhS RVNIT0xEKSwgd2UgZWZmZWN0aXZlbHkgcmVkdWNlCisgKiBhdXRvdmFjdXVtX211bHRpeGFj dF9mcmVlemVfbWF4X2FnZSB0byBhIHZhbHVlIGp1c3QgbGVzcyB0aGFuIHRoZSBudW1iZXIg b2YKKyAqIG11bHRpeGFjdHMgaW4gdXNlLiAgV2UgaG9wZSB0aGF0IHRoaXMgd2lsbCBxdWlj a2x5IHRyaWdnZXIgYXV0b3ZhY3V1bWluZyBvbgorICogdGhlIHRhYmxlIG9yIHRhYmxlcyB3 aXRoIHRoZSBvbGRlc3QgcmVsbWlubXhpZCwgdGh1cyBhbGxvd2luZyBkYXRtaW5teGlkCisg KiB2YWx1ZXMgdG8gYWR2YW5jZSBhbmQgcmVtb3Zpbmcgc29tZSBtZW1iZXJzLgorICoKKyAq IEFzIHRoZSBhbW91bnQgb2YgdGhlIG1lbWJlciBzcGFjZSBpbiB1c2UgZ3Jvd3MsIHdlIGJl Y29tZSBtb3JlIGFnZ3Jlc3NpdmUKKyAqIGluIGNsYW1waW5nIHRoaXMgdmFsdWUuICBUaGF0 IG5vdCBvbmx5IGNhdXNlcyBhdXRvdmFjdXVtIHRvIHJhbXAgdXAsIGJ1dAorICogYWxzbyBt YWtlcyBhbnkgbWFudWFsIHZhY3V1bXMgdGhlIHVzZXIgaXNzdWVzIG1vcmUgYWdncmVzc2l2 ZS4gIFRoaXMKKyAqIGhhcHBlbnMgYmVjYXVzZSB2YWN1dW1fZ2V0X2N1dG9mZnMoKSB3aWxs IGNsYW1wIHRoZSBmcmVlemUgdGFibGUgYW5kIHRoZQorICogbWluaW11bSBmcmVlemUgYWdl IGN1dG9mZnMgYmFzZWQgb24gdGhlIGVmZmVjdGl2ZQorICogYXV0b3ZhY3V1bV9tdWx0aXhh Y3RfZnJlZXplX21heF9hZ2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgQXQgdGhlIGV4dHJl bWUsCisgKiB3aGVuIHRoZSBtZW1iZXJzIHVzYWdlIHJlYWNoZXMgTVVMVElYQUNUX01FTUJF Ul9ISUdIX1RIUkVTSE9MRCwgd2UgY2xhbXAKKyAqIGZyZWV6ZV9tYXhfYWdlIHRvIHplcm8s IGFuZCBldmVyeSB2YWN1dW0gb2YgYW55IHRhYmxlIHdpbGwgZnJlZXplIGV2ZXJ5CisgKiBt dWx0aXhhY3QuCiAgKi8KIGludAogTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKHZv aWQpCkBAIC0yODIyLDIxICsyNTQ5LDI3IEBAIE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVz aG9sZCh2b2lkKQogCU11bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwogCU11bHRpWGFj dE9mZnNldCBvbGRlc3RPZmZzZXQ7CiAKLQkvKiBJZiB3ZSBjYW4ndCBkZXRlcm1pbmUgbWVt YmVyIHNwYWNlIHV0aWxpemF0aW9uLCBhc3N1bWUgdGhlIHdvcnN0LiAqLwotCWlmICghR2V0 TXVsdGlYYWN0SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RNdWx0aVhhY3RJ ZCwgJm9sZGVzdE9mZnNldCkpCi0JCXJldHVybiAwOworCS8qIFJlYWQgdGhlIGN1cnJlbnQg b2Zmc2V0cyBhbmQgbWVtYmVycyB1c2FnZS4gKi8KKwlHZXRNdWx0aVhhY3RJbmZvKCZtdWx0 aXhhY3RzLCAmbWVtYmVycywgJm9sZGVzdE11bHRpWGFjdElkLCAmb2xkZXN0T2Zmc2V0KTsK IAogCS8qIElmIG1lbWJlciBzcGFjZSB1dGlsaXphdGlvbiBpcyBsb3csIG5vIHNwZWNpYWwg YWN0aW9uIGlzIHJlcXVpcmVkLiAqLwotCWlmIChtZW1iZXJzIDw9IE1VTFRJWEFDVF9NRU1C RVJfU0FGRV9USFJFU0hPTEQpCisJaWYgKG1lbWJlcnMgPD0gTVVMVElYQUNUX01FTUJFUl9M T1dfVEhSRVNIT0xEKQogCQlyZXR1cm4gYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21h eF9hZ2U7CiAKIAkvKgogCSAqIENvbXB1dGUgYSB0YXJnZXQgZm9yIHJlbG1pbm14aWQgYWR2 YW5jZW1lbnQuICBUaGUgbnVtYmVyIG9mIG11bHRpeGFjdHMKIAkgKiB3ZSB0cnkgdG8gZWxp bWluYXRlIGZyb20gdGhlIHN5c3RlbSBpcyBiYXNlZCBvbiBob3cgZmFyIHdlIGFyZSBwYXN0 Ci0JICogTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRC4KLQkgKi8KLQlmcmFjdGlv biA9IChkb3VibGUpIChtZW1iZXJzIC0gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9M RCkgLwotCQkoTVVMVElYQUNUX01FTUJFUl9EQU5HRVJfVEhSRVNIT0xEIC0gTVVMVElYQUNU X01FTUJFUl9TQUZFX1RIUkVTSE9MRCk7CisJICogTVVMVElYQUNUX01FTUJFUl9MT1dfVEhS RVNIT0xELgorCSAqCisJICogVGhlIHdheSB0aGlzIGZvcm11bGEgd29ya3MgaXMgdGhhdCB3 aGVuIG1lbWJlcnMgaXMgZXhhY3RseSBhdCB0aGUgbG93CisJICogdGhyZXNob2xkLCBmcmFj dGlvbiA9IDAuMCwgYW5kIHdlIHNldCBmcmVlemVfbWF4X2FnZSBlcXVhbCB0bworCSAqIG14 aWRfYWdlKG9sZGVzdE11bHRpWGFjdElkKS4gIEFzIG1lbWJlcnMgZ3Jvd3MgZnVydGhlciwg dG93YXJkcyB0aGUKKwkgKiBoaWdoIHRocmVzaG9sZCwgZnJhY3Rpb24gZ3Jvd3MgbGluZWFy bHkgZnJvbSAwLjAgdG8gMS4wLCBhbmQgdGhlIHJlc3VsdAorCSAqIHNocmlua3MgZnJvbSBt eGlkX2FnZShvbGRlc3RNdWx0aVhhY3RJZCkgdG8gMC4gIEJleW9uZCB0aGUgaGlnaAorCSAq IHRocmVzaG9sZCwgZnJhY3Rpb24gPiAxLjAgYW5kIHRoZSByZXN1bHQgaXMgY2xhbXBlZCB0 byAwLgorCSAqLworCWZyYWN0aW9uID0gKGRvdWJsZSkgKG1lbWJlcnMgLSBNVUxUSVhBQ1Rf TUVNQkVSX0xPV19USFJFU0hPTEQpIC8KKwkJKE1VTFRJWEFDVF9NRU1CRVJfSElHSF9USFJF U0hPTEQgLSBNVUxUSVhBQ1RfTUVNQkVSX0xPV19USFJFU0hPTEQpOwogCXZpY3RpbV9tdWx0 aXhhY3RzID0gbXVsdGl4YWN0cyAqIGZyYWN0aW9uOwogCiAJLyogZnJhY3Rpb24gY291bGQg YmUgPiAxLjAsIGJ1dCBsb3dlc3QgcG9zc2libGUgZnJlZXplIGFnZSBpcyB6ZXJvICovCkBA IC0yODc3LDM2ICsyNjEwLDEyIEBAIFNscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QoU2xydUN0 bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLCB2b2lkICpkYXRhCiAKIC8q CiAgKiBEZWxldGUgbWVtYmVycyBzZWdtZW50cyBbb2xkZXN0LCBuZXdPbGRlc3QpCi0gKgot ICogVGhlIG1lbWJlcnMgU0xSVSBjYW4sIGluIGNvbnRyYXN0IHRvIHRoZSBvZmZzZXRzIG9u ZSwgYmUgZmlsbGVkIHRvIGFsbW9zdAotICogdGhlIGZ1bGwgcmFuZ2UgYXQgb25jZS4gVGhp cyBtZWFucyBTaW1wbGVMcnVUcnVuY2F0ZSgpIGNhbid0IHRyaXZpYWxseSBiZQotICogdXNl ZCAtIGluc3RlYWQgdGhlIHRvLWJlLWRlbGV0ZWQgcmFuZ2UgaXMgY29tcHV0ZWQgdXNpbmcg dGhlIG9mZnNldHMKLSAqIFNMUlUuIEMuZi4gVHJ1bmNhdGVNdWx0aVhhY3QoKS4KICAqLwog c3RhdGljIHZvaWQKIFBlcmZvcm1NZW1iZXJzVHJ1bmNhdGlvbihNdWx0aVhhY3RPZmZzZXQg b2xkZXN0T2Zmc2V0LCBNdWx0aVhhY3RPZmZzZXQgbmV3T2xkZXN0T2Zmc2V0KQogewotCWNv bnN0IGludDY0IG1heHNlZ21lbnQgPSBNWE9mZnNldFRvTWVtYmVyU2VnbWVudChNYXhNdWx0 aVhhY3RPZmZzZXQpOwotCWludDY0CQlzdGFydHNlZ21lbnQgPSBNWE9mZnNldFRvTWVtYmVy U2VnbWVudChvbGRlc3RPZmZzZXQpOwotCWludDY0CQllbmRzZWdtZW50ID0gTVhPZmZzZXRU b01lbWJlclNlZ21lbnQobmV3T2xkZXN0T2Zmc2V0KTsKLQlpbnQ2NAkJc2VnbWVudCA9IHN0 YXJ0c2VnbWVudDsKLQotCS8qCi0JICogRGVsZXRlIGFsbCB0aGUgc2VnbWVudHMgYnV0IHRo ZSBsYXN0IG9uZS4gVGhlIGxhc3Qgc2VnbWVudCBjYW4gc3RpbGwKLQkgKiBjb250YWluLCBw b3NzaWJseSBwYXJ0aWFsbHksIHZhbGlkIGRhdGEuCi0JICovCi0Jd2hpbGUgKHNlZ21lbnQg IT0gZW5kc2VnbWVudCkKLQl7Ci0JCWVsb2coREVCVUcyLCAidHJ1bmNhdGluZyBtdWx0aXhh Y3QgbWVtYmVycyBzZWdtZW50ICUiIFBSSXg2NCwKLQkJCSBzZWdtZW50KTsKLQkJU2xydURl bGV0ZVNlZ21lbnQoTXVsdGlYYWN0TWVtYmVyQ3RsLCBzZWdtZW50KTsKLQotCQkvKiBtb3Zl IHRvIG5leHQgc2VnbWVudCwgaGFuZGxpbmcgd3JhcGFyb3VuZCBjb3JyZWN0bHkgKi8KLQkJ aWYgKHNlZ21lbnQgPT0gbWF4c2VnbWVudCkKLQkJCXNlZ21lbnQgPSAwOwotCQllbHNlCi0J CQlzZWdtZW50ICs9IDE7Ci0JfQorCVNpbXBsZUxydVRydW5jYXRlKE11bHRpWGFjdE1lbWJl ckN0bCwKKwkJCQkJICBNWE9mZnNldFRvTWVtYmVyUGFnZShuZXdPbGRlc3RPZmZzZXQpKTsK IH0KIAogLyoKQEAgLTMwNTAsNyArMjc1OSw3IEBAIFRydW5jYXRlTXVsdGlYYWN0KE11bHRp WGFjdElkIG5ld09sZGVzdE11bHRpLCBPaWQgbmV3T2xkZXN0TXVsdGlEQikKIAogCWVsb2co REVCVUcxLCAicGVyZm9ybWluZyBtdWx0aXhhY3QgdHJ1bmNhdGlvbjogIgogCQkgIm9mZnNl dHMgWyV1LCAldSksIG9mZnNldHMgc2VnbWVudHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4NjQg IiksICIKLQkJICJtZW1iZXJzIFsldSwgJXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4 NjQgIiwgJSIgUFJJeDY0ICIpIiwKKwkJICJtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJ dTY0ICIpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpIiwK IAkJIG9sZGVzdE11bHRpLCBuZXdPbGRlc3RNdWx0aSwKIAkJIE11bHRpWGFjdElkVG9PZmZz ZXRTZWdtZW50KG9sZGVzdE11bHRpKSwKIAkJIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50 KG5ld09sZGVzdE11bHRpKSwKQEAgLTMwOTEsNiArMjgwMCw3IEBAIFRydW5jYXRlTXVsdGlY YWN0KE11bHRpWGFjdElkIG5ld09sZGVzdE11bHRpLCBPaWQgbmV3T2xkZXN0TXVsdGlEQikK IAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVs dGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdElkID0gbmV3T2xkZXN0TXVsdGk7CiAJTXVs dGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdERCID0gbmV3T2xkZXN0TXVsdGlEQjsKKwlN dWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0ID0gbmV3T2xkZXN0T2Zmc2V0OwogCUxXTG9j a1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKIAkvKiBGaXJzdCB0cnVuY2F0ZSBtZW1i ZXJzICovCkBAIC0zMTMwLDIwICsyODQwLDEzIEBAIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVj ZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpCiAKIC8qCiAgKiBEZWNpZGUgd2hldGhl ciBhIE11bHRpWGFjdE1lbWJlciBwYWdlIG51bWJlciBpcyAib2xkZXIiIGZvciB0cnVuY2F0 aW9uCi0gKiBwdXJwb3Nlcy4gIFRoZXJlIGlzIG5vICJpbnZhbGlkIG9mZnNldCBudW1iZXIi IHNvIHVzZSB0aGUgbnVtYmVycyB2ZXJiYXRpbS4KKyAqIHB1cnBvc2VzLiAgVGhlcmUgaXMg bm8gImludmFsaWQgb2Zmc2V0IG51bWJlciIgYW5kIG1lbWJlcnMgbmV2ZXIgd3JhcAorICog YXJvdW5kLCBzbyB1c2UgdGhlIG51bWJlcnMgdmVyYmF0aW0uCiAgKi8KIHN0YXRpYyBib29s CiBNdWx0aVhhY3RNZW1iZXJQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2Uy KQogewotCU11bHRpWGFjdE9mZnNldCBvZmZzZXQxOwotCU11bHRpWGFjdE9mZnNldCBvZmZz ZXQyOwotCi0Jb2Zmc2V0MSA9ICgoTXVsdGlYYWN0T2Zmc2V0KSBwYWdlMSkgKiBNVUxUSVhB Q1RfTUVNQkVSU19QRVJfUEFHRTsKLQlvZmZzZXQyID0gKChNdWx0aVhhY3RPZmZzZXQpIHBh Z2UyKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOwotCi0JcmV0dXJuIChNdWx0aVhh Y3RPZmZzZXRQcmVjZWRlcyhvZmZzZXQxLCBvZmZzZXQyKSAmJgotCQkJTXVsdGlYYWN0T2Zm c2V0UHJlY2VkZXMob2Zmc2V0MSwKLQkJCQkJCQkJCW9mZnNldDIgKyBNVUxUSVhBQ1RfTUVN QkVSU19QRVJfUEFHRSAtIDEpKTsKKwlyZXR1cm4gcGFnZTEgPCBwYWdlMjsKIH0KIAogLyoK QEAgLTMxNzUsMTcgKzI4NzgsNiBAQCBNdWx0aVhhY3RJZFByZWNlZGVzT3JFcXVhbHMoTXVs dGlYYWN0SWQgbXVsdGkxLCBNdWx0aVhhY3RJZCBtdWx0aTIpCiB9CiAKIAotLyoKLSAqIERl Y2lkZSB3aGljaCBvZiB0d28gb2Zmc2V0cyBpcyBlYXJsaWVyLgotICovCi1zdGF0aWMgYm9v bAotTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDEsIE11 bHRpWGFjdE9mZnNldCBvZmZzZXQyKQotewotCWludDMyCQlkaWZmID0gKGludDMyKSAob2Zm c2V0MSAtIG9mZnNldDIpOwotCi0JcmV0dXJuIChkaWZmIDwgMCk7Ci19Ci0KIC8qCiAgKiBX cml0ZSBhIFRSVU5DQVRFIHhsb2cgcmVjb3JkCiAgKgpAQCAtMzI3OCw3ICsyOTcwLDcgQEAg bXVsdGl4YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJZWxvZyhERUJV RzEsICJyZXBsYXlpbmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJCSAib2Zmc2V0cyBb JXUsICV1KSwgb2Zmc2V0cyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSwg IgotCQkJICJtZW1iZXJzIFsldSwgJXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQg IiwgJSIgUFJJeDY0ICIpIiwKKwkJCSAibWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2 NCAiKSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCiAJ CQkgeGxyZWMuc3RhcnRUcnVuY09mZiwgeGxyZWMuZW5kVHJ1bmNPZmYsCiAJCQkgTXVsdGlY YWN0SWRUb09mZnNldFNlZ21lbnQoeGxyZWMuc3RhcnRUcnVuY09mZiksCiAJCQkgTXVsdGlY YWN0SWRUb09mZnNldFNlZ21lbnQoeGxyZWMuZW5kVHJ1bmNPZmYpLApAQCAtMzI5Myw3ICsy OTg1LDcgQEAgbXVsdGl4YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCSAq IEFkdmFuY2UgdGhlIGhvcml6b24gdmFsdWVzLCBzbyB0aGV5J3JlIGN1cnJlbnQgYXQgdGhl IGVuZCBvZgogCQkgKiByZWNvdmVyeS4KIAkJICovCi0JCVNldE11bHRpWGFjdElkTGltaXQo eGxyZWMuZW5kVHJ1bmNPZmYsIHhscmVjLm9sZGVzdE11bHRpREIsIGZhbHNlKTsKKwkJU2V0 TXVsdGlYYWN0SWRMaW1pdCh4bHJlYy5lbmRUcnVuY09mZiwgeGxyZWMub2xkZXN0TXVsdGlE Qik7CiAKIAkJUGVyZm9ybU1lbWJlcnNUcnVuY2F0aW9uKHhscmVjLnN0YXJ0VHJ1bmNNZW1i LCB4bHJlYy5lbmRUcnVuY01lbWIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMK aW5kZXggMjJkMGEyZThjM2EuLmEwMDBiOGJkNTA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZy5jCkBAIC01MTM5LDcgKzUxMzksNyBAQCBCb290U3RyYXBYTE9HKHVpbnQzMiBk YXRhX2NoZWNrc3VtX3ZlcnNpb24pCiAJCUZ1bGxUcmFuc2FjdGlvbklkRnJvbUVwb2NoQW5k WGlkKDAsIEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZCk7CiAJY2hlY2tQb2ludC5uZXh0T2lk ID0gRmlyc3RHZW5ia2lPYmplY3RJZDsKIAljaGVja1BvaW50Lm5leHRNdWx0aSA9IEZpcnN0 TXVsdGlYYWN0SWQ7Ci0JY2hlY2tQb2ludC5uZXh0TXVsdGlPZmZzZXQgPSAwOworCWNoZWNr UG9pbnQubmV4dE11bHRpT2Zmc2V0ID0gMTsKIAljaGVja1BvaW50Lm9sZGVzdFhpZCA9IEZp cnN0Tm9ybWFsVHJhbnNhY3Rpb25JZDsKIAljaGVja1BvaW50Lm9sZGVzdFhpZERCID0gVGVt cGxhdGUxRGJPaWQ7CiAJY2hlY2tQb2ludC5vbGRlc3RNdWx0aSA9IEZpcnN0TXVsdGlYYWN0 SWQ7CkBAIC01MTU1LDcgKzUxNTUsNyBAQCBCb290U3RyYXBYTE9HKHVpbnQzMiBkYXRhX2No ZWNrc3VtX3ZlcnNpb24pCiAJTXVsdGlYYWN0U2V0TmV4dE1YYWN0KGNoZWNrUG9pbnQubmV4 dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCk7CiAJQWR2YW5jZU9sZGVzdENs b2dYaWQoY2hlY2tQb2ludC5vbGRlc3RYaWQpOwogCVNldFRyYW5zYWN0aW9uSWRMaW1pdChj aGVja1BvaW50Lm9sZGVzdFhpZCwgY2hlY2tQb2ludC5vbGRlc3RYaWREQik7Ci0JU2V0TXVs dGlYYWN0SWRMaW1pdChjaGVja1BvaW50Lm9sZGVzdE11bHRpLCBjaGVja1BvaW50Lm9sZGVz dE11bHRpREIsIHRydWUpOworCVNldE11bHRpWGFjdElkTGltaXQoY2hlY2tQb2ludC5vbGRl c3RNdWx0aSwgY2hlY2tQb2ludC5vbGRlc3RNdWx0aURCKTsKIAlTZXRDb21taXRUc0xpbWl0 KEludmFsaWRUcmFuc2FjdGlvbklkLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CiAKIAkvKiBT ZXQgdXAgdGhlIFhMT0cgcGFnZSBoZWFkZXIgKi8KQEAgLTU2MzYsNyArNTYzNiw3IEBAIFN0 YXJ0dXBYTE9HKHZvaWQpCiAJTXVsdGlYYWN0U2V0TmV4dE1YYWN0KGNoZWNrUG9pbnQubmV4 dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCk7CiAJQWR2YW5jZU9sZGVzdENs b2dYaWQoY2hlY2tQb2ludC5vbGRlc3RYaWQpOwogCVNldFRyYW5zYWN0aW9uSWRMaW1pdChj aGVja1BvaW50Lm9sZGVzdFhpZCwgY2hlY2tQb2ludC5vbGRlc3RYaWREQik7Ci0JU2V0TXVs dGlYYWN0SWRMaW1pdChjaGVja1BvaW50Lm9sZGVzdE11bHRpLCBjaGVja1BvaW50Lm9sZGVz dE11bHRpREIsIHRydWUpOworCVNldE11bHRpWGFjdElkTGltaXQoY2hlY2tQb2ludC5vbGRl c3RNdWx0aSwgY2hlY2tQb2ludC5vbGRlc3RNdWx0aURCKTsKIAlTZXRDb21taXRUc0xpbWl0 KGNoZWNrUG9pbnQub2xkZXN0Q29tbWl0VHNYaWQsCiAJCQkJCSBjaGVja1BvaW50Lm5ld2Vz dENvbW1pdFRzWGlkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVj b3ZlcnkuYwppbmRleCAyMWI4ZjE3OWJhMC4uNTFkZWEzNDJhNGQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC04ODYsNyArODg2LDcgQEAg SW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndh c1NodXRkb3duX3B0ciwKIAkJCQkJCQkgVTY0RnJvbUZ1bGxUcmFuc2FjdGlvbklkKGNoZWNr UG9pbnQubmV4dFhpZCksCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE9pZCkpKTsKIAllcmVw b3J0KERFQlVHMSwKLQkJCShlcnJtc2dfaW50ZXJuYWwoIm5leHQgTXVsdGlYYWN0SWQ6ICV1 OyBuZXh0IE11bHRpWGFjdE9mZnNldDogJXUiLAorCQkJKGVycm1zZ19pbnRlcm5hbCgibmV4 dCBNdWx0aVhhY3RJZDogJXU7IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAlIiBQUkl1NjQsCiAJ CQkJCQkJIGNoZWNrUG9pbnQubmV4dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9mZnNl dCkpKTsKIAllcmVwb3J0KERFQlVHMSwKIAkJCShlcnJtc2dfaW50ZXJuYWwoIm9sZGVzdCB1 bmZyb3plbiB0cmFuc2FjdGlvbiBJRDogJXUsIGluIGRhdGFiYXNlICV1IiwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvdmFjdXVtLmMKaW5kZXggZTc4NWRkNTVjZTUuLjc3ODBlYTZlYWUzIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW0uYwpAQCAtMTE0NSw4ICsxMTQ1LDggQEAgdmFjdXVtX2dldF9jdXRvZmZz KFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAogCS8qCiAJICog QWxzbyBjb21wdXRlIHRoZSBtdWx0aXhhY3QgYWdlIGZvciB3aGljaCBmcmVlemluZyBpcyB1 cmdlbnQuICBUaGlzIGlzCi0JICogbm9ybWFsbHkgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJl ZXplX21heF9hZ2UsIGJ1dCBtYXkgYmUgbGVzcyBpZiB3ZSBhcmUKLQkgKiBzaG9ydCBvZiBt dWx0aXhhY3QgbWVtYmVyIHNwYWNlLgorCSAqIG5vcm1hbGx5IGF1dG92YWN1dW1fbXVsdGl4 YWN0X2ZyZWV6ZV9tYXhfYWdlLCBidXQgbWF5IGJlIGxlc3MgaWYKKwkgKiBtdWx0aXhhY3Qg bWVtYmVycyBhcmUgYmxvYXRlZC4KIAkgKi8KIAllZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6 ZV9tYXhfYWdlID0gTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7CiAKQEAgLTE5 NzEsNyArMTk3MSw3IEBAIHZhY190cnVuY2F0ZV9jbG9nKFRyYW5zYWN0aW9uSWQgZnJvemVu WElELAogCSAqIHNpZ25hbGluZyB0d2ljZT8KIAkgKi8KIAlTZXRUcmFuc2FjdGlvbklkTGlt aXQoZnJvemVuWElELCBvbGRlc3R4aWRfZGF0b2lkKTsKLQlTZXRNdWx0aVhhY3RJZExpbWl0 KG1pbk11bHRpLCBtaW5tdWx0aV9kYXRvaWQsIGZhbHNlKTsKKwlTZXRNdWx0aVhhY3RJZExp bWl0KG1pbk11bHRpLCBtaW5tdWx0aV9kYXRvaWQpOwogCiAJTFdMb2NrUmVsZWFzZShXcmFw TGltaXRzVmFjdXVtTG9jayk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5j CmluZGV4IDFjMzg0ODhmMmNiLi5mNDgzMGY4OTZmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmMKQEAgLTE5MzYsOCArMTkzNiw4IEBAIGRvX2F1dG92YWN1dW0odm9p ZCkKIAogCS8qCiAJICogQ29tcHV0ZSB0aGUgbXVsdGl4YWN0IGFnZSBmb3Igd2hpY2ggZnJl ZXppbmcgaXMgdXJnZW50LiAgVGhpcyBpcwotCSAqIG5vcm1hbGx5IGF1dG92YWN1dW1fbXVs dGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLCBidXQgbWF5IGJlIGxlc3MgaWYgd2UgYXJlCi0JICog c2hvcnQgb2YgbXVsdGl4YWN0IG1lbWJlciBzcGFjZS4KKwkgKiBub3JtYWxseSBhdXRvdmFj dXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgYnV0IG1heSBiZSBsZXNzIGlmCisJICog bXVsdGl4YWN0IG1lbWJlcnMgYXJlIGJsb2F0ZWQuCiAJICovCiAJZWZmZWN0aXZlX211bHRp eGFjdF9mcmVlemVfbWF4X2FnZSA9IE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgp OwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRh LmMgYi9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMKaW5kZXggMzBh ZDQ2OTEyZTEuLmE0MDYwMzA5YWUwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2NvbnRyb2xk YXRhL3BnX2NvbnRyb2xkYXRhLmMKKysrIGIvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19j b250cm9sZGF0YS5jCkBAIC0yNzEsNyArMjcxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE9pZCk7CiAJ cHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElkOiAgJXVcbiIp LAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE11bHRpKTsKLQlwcmlu dGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAldVxuIiksCisJ cHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJSIgUFJJ dTY0ICJcbiIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE11bHRp T2Zmc2V0KTsKIAlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RYSUQ6ICAg ICAgICAldVxuIiksCiAJCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5vbGRlc3RY aWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jIGIv c3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jCmluZGV4IGM2NjdhMTFjYjZhLi5k NWRlNGE3MTcxYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdh bC5jCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwpAQCAtMTE1LDYg KzExNSw3IEBAIHN0YXRpYyB2b2lkIEtpbGxFeGlzdGluZ1dBTFN1bW1hcmllcyh2b2lkKTsK IHN0YXRpYyB2b2lkIFdyaXRlRW1wdHlYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQgdXNhZ2Uo dm9pZCk7CiBzdGF0aWMgdWludDMyIHN0cnRvdWludDMyX3N0cmljdChjb25zdCBjaGFyICpy ZXN0cmljdCBzLCBjaGFyICoqcmVzdHJpY3QgZW5kcHRyLCBpbnQgYmFzZSk7CitzdGF0aWMg dWludDY0IHN0cnRvdWludDY0X3N0cmljdChjb25zdCBjaGFyICpyZXN0cmljdCBzLCBjaGFy ICoqcmVzdHJpY3QgZW5kcHRyLCBpbnQgYmFzZSk7CiAKIAogaW50CkBAIC0yOTMsNyArMjk0 LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdPJzoKIAkJ CQllcnJubyA9IDA7Ci0JCQkJbmV4dF9teG9mZl92YWwgPSBzdHJ0b3VpbnQzMl9zdHJpY3Qo b3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQluZXh0X214b2ZmX3ZhbCA9IHN0cnRvdWludDY0 X3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRwdHIgPT0gb3B0YXJn IHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsKIAkJCQkJcGdfbG9n X2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAiLU8iKTsKQEAgLTc3 Miw3ICs3NzMsNyBAQCBQcmludENvbnRyb2xWYWx1ZXMoYm9vbCBndWVzc2VkKQogCQkgICBD b250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0T2lkKTsKIAlwcmludGYoXygiTGF0ZXN0 IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlYYWN0SWQ6ICAldVxuIiksCiAJCSAgIENvbnRyb2xG aWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aSk7Ci0JcHJpbnRmKF8oIkxhdGVzdCBjaGVj a3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJXVcbiIpLAorCXByaW50ZihfKCJMYXRlc3Qg Y2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDogICUiIFBSSXU2NCAiXG4iKSwKIAkJICAg Q29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsKIAlwcmludGYo XygiTGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RYSUQ6ICAgICAgICAldVxuIiksCiAJCSAg IENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdFhpZCk7CkBAIC04NDgsNyArODQ5 LDcgQEAgUHJpbnROZXdDb250cm9sVmFsdWVzKHZvaWQpCiAKIAlpZiAobmV4dF9teG9mZl9n aXZlbikKIAl7Ci0JCXByaW50ZihfKCJOZXh0TXVsdGlPZmZzZXQ6ICAgICAgICAgICAgICAg ICAgICAgICV1XG4iKSwKKwkJcHJpbnRmKF8oIk5leHRNdWx0aU9mZnNldDogICAgICAgICAg ICAgICAgICAgICAgJSIgUFJJdTY0ICJcbiIpLAogCQkJICAgQ29udHJvbEZpbGUuY2hlY2tQ b2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsKIAl9CiAKQEAgLTEyNzYsMyArMTI3NywzNCBA QCBzdHJ0b3VpbnQzMl9zdHJpY3QoY29uc3QgY2hhciAqcmVzdHJpY3QgcywgY2hhciAqKnJl c3RyaWN0IGVuZHB0ciwgaW50IGJhc2UpCiAKIAlyZXR1cm4gKHVpbnQzMikgdmFsOwogfQor CisvKgorICogc3RydG91aW50NjRfc3RyaWN0IC0tIGxpa2Ugc3RydG91NjQoKSwgYnV0IGRv ZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHZhbHVlcworICovCitzdGF0aWMgdWludDY0CitzdHJ0 b3VpbnQ2NF9zdHJpY3QoY29uc3QgY2hhciAqcmVzdHJpY3QgcywgY2hhciAqKnJlc3RyaWN0 IGVuZHB0ciwgaW50IGJhc2UpCit7CisJdWludDY0CQl2YWw7CisJYm9vbAkJaXNfbmVnOwor CisJLyogc2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKwl3aGlsZSAoaXNzcGFjZSgqcykp CisJCXMrKzsKKworCS8qCisJICogSXMgaXQgbmVnYXRpdmU/ICBXZSBzdGlsbCBjYWxsIHN0 cnRvdTY0KCkgaWYgaXQgd2FzLCB0byBzZXQgJ2VuZHB0cicuCisJICogKFRoZSBjdXJyZW50 IGNhbGxlcnMgZG9uJ3QgY2FyZSB0aG91Z2guKQorCSAqLworCWlzX25lZyA9ICgqcyA9PSAn LScpOworCisJdmFsID0gc3RydG91NjQocywgZW5kcHRyLCBiYXNlKTsKKworCS8qIHJlamVj dCBpZiBpdCB3YXMgbmVnYXRpdmUgKi8KKwlpZiAoZXJybm8gPT0gMCAmJiBpc19uZWcpCisJ eworCQllcnJubyA9IEVSQU5HRTsKKwkJdmFsID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsOwor fQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbCBiL3Ny Yy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKaW5kZXggZTk3ODBkYmUyYTYuLjRh ZTUxZWU1NzRlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2lj LnBsCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKQEAgLTIzMCw3 ICsyMzAsNyBAQCBwdXNoIEBjbWQsCiAgIHNwcmludGYoIiVkLCVkIiwgaGV4KCRmaWxlc1sw XSkgPT0gMCA/IDMgOiBoZXgoJGZpbGVzWzBdKSwgaGV4KCRmaWxlc1stMV0pKTsKIAogQGZp bGVzID0gZ2V0X3NscnVfZmlsZXMoJ3BnX211bHRpeGFjdC9vZmZzZXRzJyk7Ci0kbXVsdCA9 IDMyICogJGJsY2tzeiAvIDQ7CiskbXVsdCA9IDMyICogJGJsY2tzeiAvIDg7CiAjIC0tbXVs dGl4YWN0LWlkcyBhcmd1bWVudCBpcyAibmV3LG9sZCIKIHB1c2ggQGNtZCwKICAgJy0tbXVs dGl4YWN0LWlkcycgPT4gc3ByaW50ZigiJWQsJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z191cGdyYWRlL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ191cGdyYWRlL01ha2VmaWxlCmluZGV4 IDY5ZmNmNTkzY2FlLi4xMmY3NDdiMmM1OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdy YWRlL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmlsZQpAQCAtMTgs MTEgKzE4LDE0IEBAIE9CSlMgPSBcCiAJZmlsZS5vIFwKIAlmdW5jdGlvbi5vIFwKIAlpbmZv Lm8gXAorCW11bHRpeGFjdF9yZXdyaXRlLm8gXAorCW11bHRpeGFjdF9yZWFkX3YxOC5vIFwK IAlvcHRpb24ubyBcCiAJcGFyYWxsZWwubyBcCiAJcGdfdXBncmFkZS5vIFwKIAlyZWxmaWxl bnVtYmVyLm8gXAogCXNlcnZlci5vIFwKKwlzbHJ1X2lvLm8gXAogCXRhYmxlc3BhY2UubyBc CiAJdGFzay5vIFwKIAl1dGlsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRl L21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkCmluZGV4IGFj OTkyZjBkMTRiLi43YmQ3MDYyYjYyZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRl L21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZApAQCAt OCwxMSArOCwxNCBAQCBwZ191cGdyYWRlX3NvdXJjZXMgPSBmaWxlcygKICAgJ2ZpbGUuYycs CiAgICdmdW5jdGlvbi5jJywKICAgJ2luZm8uYycsCisgICdtdWx0aXhhY3RfcmV3cml0ZS5j JywKKyAgJ211bHRpeGFjdF9yZWFkX3YxOC5jJywKICAgJ29wdGlvbi5jJywKICAgJ3BhcmFs bGVsLmMnLAogICAncGdfdXBncmFkZS5jJywKICAgJ3JlbGZpbGVudW1iZXIuYycsCiAgICdz ZXJ2ZXIuYycsCisgICdzbHJ1X2lvLmMnLAogICAndGFibGVzcGFjZS5jJywKICAgJ3Rhc2su YycsCiAgICd1dGlsLmMnLApAQCAtNDcsNiArNTAsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAn dC8wMDRfc3Vic2NyaXB0aW9uLnBsJywKICAgICAgICd0LzAwNV9jaGFyX3NpZ25lZG5lc3Mu cGwnLAogICAgICAgJ3QvMDA2X3RyYW5zZmVyX21vZGVzLnBsJywKKyAgICAgICd0LzAwN19t dWx0aXhhY3RfY29udmVyc2lvbi5wbCcsCiAgICAgXSwKICAgICAndGVzdF9rd2FyZ3MnOiB7 J3ByaW9yaXR5JzogNDB9LCAjIHBnX3VwZ3JhZGUgdGVzdHMgYXJlIHNsb3cKICAgfSwKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmVhZF92MTguYyBiL3Ny Yy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmVhZF92MTguYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmI1Mzc2NjhhMmMKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3JlYWRfdjE4LmMKQEAgLTAsMCArMSwz MzcgQEAKKy8qCisgKiBtdWx0aXhhY3RfcmVhZF92MTguYworICoKKyAqIEZ1bmN0aW9ucyB0 byByZWFkIG11bHRpeGFjdCBTTFJVcyBmcm9tIGNsdXN0ZXIgb2YgUG9zdGdyZVNRTCB2ZXJz aW9uIDE4IGFuZAorICogb2xkZXIuIEluIHZlcnNpb24gMTksIHRoZSBtdWx0aXhpZCBvZmZz ZXRzIHdlcmUgZXhwYW5kZWQgZnJvbSAzMiB0byA2NAorICogYml0cy4KKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3JlYWRfdjE4LmMKKyAqLworCisjaW5j bHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgIm11bHRpeGFjdF9yZWFkX3YxOC5o IgorI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKKworLyoKKyAqIE5PVEU6IGJlbG93IGFyZSBh IGJ1bmNoIG9mIGRlZmluaXRpb25zIHRoYXQgYXJlIGNvcHktcGFzdGVkIGZyb20KKyAqIG11 bHRpeGFjdC5jIGZyb20gdmVyc2lvbiAxOC4gIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcyBm aWxlIGRvZXNuJ3QKKyAqICNpbmNsdWRlIHRoZSBuZXcgZGVmaW5pdGlvbnMgd2l0aCBzYW1l IG5hbWVzIGZyb20gIm11bHRpeGFjdF9pbnRlcm5hbC5oIiEKKyAqCisgKiBUbyBhdm9pZCBj b25mdXNpb24gaW4gdGhlIGZ1bmN0aW9ucyBleHBvc2VkIG91dHNpZGUgdGhpcyBzb3VyY2Ug ZmlsZSwKKyAqIHRob3VnaCwgd2UgdXNlIE9sZE11bHRpWGFjdE9mZnNldCB0byByZXByZXNl bnQgdGhlIG9sZC1zdHlsZSAzMi1iaXQKKyAqIG11bHRpeGlkIG9mZnNldHMuIFRoZSBuZXcg NjQtYml0IE11bHRpWGFjdE9mZnNldCBzaG91bGQgbm90IGJlIHVzZWQKKyAqIGFueXdoZXJl IGluIHRoaXMgZmlsZS4KKyAqLworI2RlZmluZSBNdWx0aVhhY3RPZmZzZXQgc2hvdWxkX25v dF9iZV91c2VkCisKKy8qIFdlIG5lZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0IGFuZCA4IGJ5 dGVzIHBlciBiYXNlIGZvciBlYWNoIHBhZ2UuICovCisjZGVmaW5lIE1VTFRJWEFDVF9PRkZT RVRTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoT2xkTXVsdGlYYWN0T2Zmc2V0KSkKKwor c3RhdGljIGlubGluZSBpbnQ2NAorTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoTXVsdGlYYWN0 SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpIC8gTVVMVElYQUNUX09GRlNFVFNfUEVSX1BB R0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnko TXVsdGlYYWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpICUgTVVMVElYQUNUX09GRlNF VFNfUEVSX1BBR0U7Cit9CisKKy8qCisgKiBUaGUgc2l0dWF0aW9uIGZvciBtZW1iZXJzIGlz IGEgYml0IG1vcmUgY29tcGxleDogd2Ugc3RvcmUgb25lIGJ5dGUgb2YKKyAqIGFkZGl0aW9u YWwgZmxhZyBiaXRzIGZvciBlYWNoIFRyYW5zYWN0aW9uSWQuICBUbyBkbyB0aGlzIHdpdGhv dXQgZ2V0dGluZworICogaW50byBhbGlnbm1lbnQgaXNzdWVzLCB3ZSBzdG9yZSBmb3VyIGJ5 dGVzIG9mIGZsYWdzLCBhbmQgdGhlbiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgNCBYaWRzLiAg RWFjaCBzdWNoIDUtd29yZCAoMjAtYnl0ZSkgc2V0IHdlIGNhbGwgYSAiZ3JvdXAiLCBhbmQK KyAqIGFyZSBzdG9yZWQgYXMgYSB3aG9sZSBpbiBwYWdlcy4gIFRodXMsIHdpdGggOGtCIEJM Q0tTWiwgd2Uga2VlcCA0MDkgZ3JvdXBzCisgKiBwZXIgcGFnZS4gIFRoaXMgd2FzdGVzIDEy IGJ5dGVzIHBlciBwYWdlLCBidXQgdGhhdCdzIE9LIC0tIHNpbXBsaWNpdHkgKGFuZAorICog cGVyZm9ybWFuY2UpIHRydW1wcyBzcGFjZSBlZmZpY2llbmN5IGhlcmUuCisgKgorICogTm90 ZSB0aGF0IHRoZSAib2Zmc2V0IiBtYWNyb3Mgd29yayB3aXRoIGJ5dGUgb2Zmc2V0LCBub3Qg YXJyYXkgaW5kZXhlcywgc28KKyAqIGFyaXRobWV0aWMgbXVzdCBiZSBkb25lIHVzaW5nICJj aGFyICoiIHBvaW50ZXJzLgorICovCisvKiBXZSBuZWVkIGVpZ2h0IGJpdHMgcGVyIHhhY3Qs IHNvIG9uZSB4YWN0IGZpdHMgaW4gYSBieXRlICovCisjZGVmaW5lIE1YQUNUX01FTUJFUl9C SVRTX1BFUl9YQUNUCQkJOAorI2RlZmluZSBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUJ CQkxCisjZGVmaW5lIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0sJKCgxIDw8IE1YQUNUX01F TUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpCisKKy8qIGhvdyBtYW55IGZ1bGwgYnl0ZXMgb2Yg ZmxhZ3MgYXJlIHRoZXJlIGluIGEgZ3JvdXA/ICovCisjZGVmaW5lIE1VTFRJWEFDVF9GTEFH QllURVNfUEVSX0dST1VQCQk0CisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1C RVJHUk9VUAlcCisJKE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICogTVhBQ1RfTUVN QkVSX0ZMQUdTX1BFUl9CWVRFKQorLyogc2l6ZSBpbiBieXRlcyBvZiBhIGNvbXBsZXRlIGdy b3VwICovCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFIFwKKwkoc2l6ZW9m KFRyYW5zYWN0aW9uSWQpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQICsg TVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVApCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1C RVJHUk9VUFNfUEVSX1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpF KQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCisJKE1VTFRJWEFDVF9N RU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JP VVApCisKKy8qIHBhZ2UgaW4gd2hpY2ggYSBtZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KK3N0 YXRpYyBpbmxpbmUgaW50NjQKK01YT2Zmc2V0VG9NZW1iZXJQYWdlKE9sZE11bHRpWGFjdE9m ZnNldCBvZmZzZXQpCit7CisJcmV0dXJuIG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BF Ul9QQUdFOworfQorCisvKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9m IGZsYWcgd29yZCBmb3IgYSBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitN WE9mZnNldFRvRmxhZ3NPZmZzZXQoT2xkTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlP bGRNdWx0aVhhY3RPZmZzZXQgZ3JvdXAgPSBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfTUVNQkVSR1JPVVA7CisJaW50CQkJZ3JvdXBvbnBnID0gZ3JvdXAgJSBNVUxUSVhBQ1Rf TUVNQkVSR1JPVVBTX1BFUl9QQUdFOworCWludAkJCWJ5dGVvZmYgPSBncm91cG9ucGcgKiBN VUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRTsKKworCXJldHVybiBieXRlb2ZmOworfQorCisv KiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIFRyYW5zYWN0aW9uSWQg b2YgZ2l2ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb01lbWJl ck9mZnNldChPbGRNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJlcl9p bl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsK KworCXJldHVybiBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KSArCisJCU1VTFRJWEFD VF9GTEFHQllURVNfUEVSX0dST1VQICsKKwkJbWVtYmVyX2luX2dyb3VwICogc2l6ZW9mKFRy YW5zYWN0aW9uSWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb0ZsYWdz Qml0U2hpZnQoT2xkTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJCQltZW1iZXJf aW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7 CisJaW50CQkJYnNoaWZ0ID0gbWVtYmVyX2luX2dyb3VwICogTVhBQ1RfTUVNQkVSX0JJVFNf UEVSX1hBQ1Q7CisKKwlyZXR1cm4gYnNoaWZ0OworfQorCisvKgorICogQ29uc3RydWN0IHJl YWRlciBvZiBvbGQgbXVsdGl4YWN0cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBtYWxsb2NlZCBt ZW1vcnkgdXNlZCBieSB0aGUgYWxsIG90aGVyIGNhbGxzIGluIHRoaXMgbW9kdWxlLgorICov CitPbGRNdWx0aVhhY3RSZWFkZXIgKgorQWxsb2NPbGRNdWx0aVhhY3RSZWFkKGNoYXIgKnBn ZGF0YSwgTXVsdGlYYWN0SWQgbmV4dE11bHRpLAorCQkJCQkgIE9sZE11bHRpWGFjdE9mZnNl dCBuZXh0T2Zmc2V0KQoreworCU9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUgPSBzdGF0ZSA9 IHBnX21hbGxvYyhzaXplb2YoKnN0YXRlKSk7CisJY2hhcgkJZGlyW01BWFBHUEFUSF0gPSB7 MH07CisKKwlzdGF0ZS0+bmV4dE1YYWN0ID0gbmV4dE11bHRpOworCXN0YXRlLT5uZXh0T2Zm c2V0ID0gbmV4dE9mZnNldDsKKworCXBnX3NwcmludGYoZGlyLCAiJXMvcGdfbXVsdGl4YWN0 L29mZnNldHMiLCBwZ2RhdGEpOworCXN0YXRlLT5vZmZzZXQgPSBBbGxvY1NscnVSZWFkKGRp ciwgZmFsc2UpOworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19tdWx0aXhhY3QvbWVtYmVy cyIsIHBnZGF0YSk7CisJc3RhdGUtPm1lbWJlcnMgPSBBbGxvY1NscnVSZWFkKGRpciwgZmFs c2UpOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogVGhpcyBpcyBhIHNpbXBsaWZp ZWQgdmVyc2lvbiBvZiB0aGUgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKCkgc2VydmVyCisgKiBm dW5jdGlvbjoKKyAqCisgKiAtIE9ubHkgcmV0dXJuIHRoZSB1cGRhdGluZyBtZW1iZXIsIGlm IGFueS4gIFVwZ3JhZGUgb25seSBjYXJlcyBhYm91dCB0aGUKKyAqICAgdXBkYXRlcnMuICBJ ZiB0aGVyZSBpcyBubyB1cGRhdGluZyBtZW1iZXIsIHJldHVybiBzb21ld2hhdCBhcmJpdHJh cmlseQorICogICB0aGUgZmlyc3QgbG9ja2luZy1vbmx5IG1lbWJlciwgYmVjYXVzZSB3ZSBk b24ndCBoYXZlIGFueSB3YXkgdG8gcmVwcmVzZW50CisgKiAgICJubyBtZW1iZXJzIi4KKyAq CisgKiAtIEJlY2F1c2UgdGhlcmUncyBubyBjb25jdXJyZW50IGFjdGl2aXR5LCBXZSBkb24n dCBuZWVkIHRvIHdvcnJ5IGFib3V0CisgKiAgIGxvY2tpbmcgYW5kIHNvbWUgY29ybmVyIGNh c2VzLgorICoKKyAqIC0gRG9uJ3QgYmFpbCBvdXQgb24gaW52YWxpZCBlbnRyaWVzLiAgSWYg dGhlIHNlcnZlciBjcmFzaGVzLCBpdCBjYW4gbGVhdmUKKyAqICAgaW52YWxpZCBvciBoYWxm LXdyaXR0ZW4gZW50cmllcyBvbiBkaXNrLiBTdWNoIG11bHRpeGlkcyB3b24ndCBhcHBlYXIK KyAqICAgYW55d2hlcmUgZWxzZSBvbiBkaXNrLCBzbyB0aGUgc2VydmVyIHdpbGwgbmV2ZXIg dHJ5IHRvIHJlYWQgdGhlbS4gIER1cmluZworICogICB1cGdyYWRlLCBob3dldmVyLCB3ZSBz Y2FuIHRocm91Z2ggYWxsIG11bHRpeGlkcyBpbiBvcmRlciwgYW5kIHdpbGwKKyAqICAgZW5j b3VudGVyIHN1Y2ggaW52YWxpZCBidXQgdW5yZWZlcmVuY2VkIG11bHRpeGlkcyB0b28uCisg KgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIHRoZSBtdWx0aXhhY3Qg d2FzIGludmFsaWQuCisgKi8KK2Jvb2wKK0dldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVy KE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUsIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJ CSAgTXVsdGlYYWN0TWVtYmVyICptZW1iZXIpCit7CisJTXVsdGlYYWN0SWQgbmV4dE1YYWN0 LAorCQkJCW5leHRPZmZzZXQsCisJCQkJdG1wTVhhY3Q7CisJaW50NjQJCXBhZ2VubywKKwkJ CQlwcmV2X3BhZ2VubzsKKwlpbnQJCQllbnRyeW5vLAorCQkJCWxlbmd0aDsKKwljaGFyCSAg ICpidWY7CisJT2xkTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHIsCisJCQkJb2Zmc2V0OworCU9s ZE11bHRpWGFjdE9mZnNldCBuZXh0TVhPZmZzZXQ7CisJVHJhbnNhY3Rpb25JZCByZXN1bHRf eGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJTXVsdGlYYWN0U3RhdHVzIHJlc3VsdF9z dGF0dXMgPSAwOworCisJbmV4dE1YYWN0ID0gc3RhdGUtPm5leHRNWGFjdDsKKwluZXh0T2Zm c2V0ID0gc3RhdGUtPm5leHRPZmZzZXQ7CisKKwkvKgorCSAqIENvbW1lbnQgY29waWVkIGZy b20gR2V0TXVsdGlYYWN0SWRNZW1iZXJzIGluIFBvc3RncmVTUUwgdjE4CisJICogbXVsdGl4 YWN0LmM6CisJICoKKwkgKiBGaW5kIG91dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHdlIG5lZWQg dG8gc3RhcnQgcmVhZGluZyBNdWx0aVhhY3RNZW1iZXJzCisJICogYW5kIHRoZSBudW1iZXIg b2YgbWVtYmVycyBpbiB0aGUgbXVsdGl4YWN0LiAgV2UgZGV0ZXJtaW5lIHRoZSBsYXR0ZXIg YXMKKwkgKiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgbXVsdGl4YWN0J3Mgc3RhcnRp bmcgb2Zmc2V0IGFuZCB0aGUgbmV4dAorCSAqIG9uZSdzLiAgSG93ZXZlciwgdGhlcmUgYXJl IHNvbWUgY29ybmVyIGNhc2VzIHRvIHdvcnJ5IGFib3V0OgorCSAqCisJICogMS4gVGhpcyBt dWx0aXhhY3QgbWF5IGJlIHRoZSBsYXRlc3Qgb25lIGNyZWF0ZWQsIGluIHdoaWNoIGNhc2Ug dGhlcmUgaXMKKwkgKiBubyBuZXh0IG9uZSB0byBsb29rIGF0LiAgVGhlIG5leHQgbXVsdGl4 YWN0J3Mgb2Zmc2V0IHNob3VsZCBiZSBzZXQKKwkgKiBhbHJlYWR5LCBhcyB3ZSBzZXQgaXQg aW4gUmVjb3JkTmV3TXVsdGlYYWN0KCksIGJ1dCB3ZSB1c2VkIHRvIG5vdCBkbworCSAqIHRo YXQgaW4gb2xkZXIgbWlub3IgdmVyc2lvbnMuICBUbyBjb3BlIHdpdGggdGhhdCBjYXNlLCBp ZiB0aGlzCisJICogbXVsdGl4YWN0IGlzIHRoZSBsYXRlc3Qgb25lIGNyZWF0ZWQsIHVzZSB0 aGUgbmV4dE9mZnNldCB2YWx1ZSB3ZSByZWFkCisJICogYWJvdmUgYXMgdGhlIGVuZHBvaW50 LgorCSAqCisJICogMi4gQmVjYXVzZSBHZXROZXdNdWx0aVhhY3RJZCBza2lwcyBvdmVyIG9m ZnNldCB6ZXJvLCB0byByZXNlcnZlIHplcm8KKwkgKiBmb3IgdG8gbWVhbiAidW5zZXQiLCB0 aGVyZSBpcyBhbiBhbWJpZ3VpdHkgbmVhciB0aGUgcG9pbnQgb2Ygb2Zmc2V0CisJICogd3Jh cGFyb3VuZC4gIElmIHdlIHNlZSBuZXh0IG11bHRpeGFjdCdzIG9mZnNldCBpcyBvbmUsIGlz IHRoYXQgb3VyCisJICogbXVsdGl4YWN0J3MgYWN0dWFsIGVuZHBvaW50LCBvciBkaWQgaXQg ZW5kIGF0IHplcm8gd2l0aCBhIHN1YnNlcXVlbnQKKwkgKiBpbmNyZW1lbnQ/ICBXZSBoYW5k bGUgdGhpcyB1c2luZyB0aGUga25vd2xlZGdlIHRoYXQgaWYgdGhlIHplcm8ndGgKKwkgKiBt ZW1iZXIgc2xvdCB3YXNuJ3QgZmlsbGVkLCBpdCdsbCBjb250YWluIHplcm8sIGFuZCB6ZXJv IGlzbid0IGEgdmFsaWQKKwkgKiB0cmFuc2FjdGlvbiBJRCBzbyBpdCBjYW4ndCBiZSBhIG11 bHRpeGFjdCBtZW1iZXIuICBUaGVyZWZvcmUsIGlmIHdlCisJICogcmVhZCBhIHplcm8gZnJv bSB0aGUgbWVtYmVycyBhcnJheSwganVzdCBpZ25vcmUgaXQuCisJICovCisKKwlwYWdlbm8g PSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CisJZW50cnlubyA9IE11bHRpWGFj dElkVG9PZmZzZXRFbnRyeShtdWx0aSk7CisKKwlidWYgPSBTbHJ1UmVhZFN3aXRjaFBhZ2Uo c3RhdGUtPm9mZnNldCwgcGFnZW5vKTsKKwlvZmZwdHIgPSAoT2xkTXVsdGlYYWN0T2Zmc2V0 ICopIGJ1ZjsKKwlvZmZwdHIgKz0gZW50cnlubzsKKwlvZmZzZXQgPSAqb2ZmcHRyOworCisJ aWYgKG9mZnNldCA9PSAwKQorCXsKKwkJLyogSW52YWxpZCBlbnRyeSAqLworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJLyoKKwkgKiBVc2UgdGhlIHNhbWUgaW5jcmVtZW50IHJ1bGUgYXMg R2V0TmV3TXVsdGlYYWN0SWQoKSwgdGhhdCBpcywgZG9uJ3QKKwkgKiBoYW5kbGUgd3JhcGFy b3VuZCBleHBsaWNpdGx5IHVudGlsIG5lZWRlZC4KKwkgKi8KKwl0bXBNWGFjdCA9IG11bHRp ICsgMTsKKworCWlmIChuZXh0TVhhY3QgPT0gdG1wTVhhY3QpCisJeworCQkvKiBDb3JuZXIg Y2FzZSAxOiB0aGVyZSBpcyBubyBuZXh0IG11bHRpeGFjdCAqLworCQluZXh0TVhPZmZzZXQg PSBuZXh0T2Zmc2V0OworCX0KKwllbHNlCisJeworCQkvKiBoYW5kbGUgd3JhcGFyb3VuZCBp ZiBuZWVkZWQgKi8KKwkJaWYgKHRtcE1YYWN0IDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJCXRt cE1YYWN0ID0gRmlyc3RNdWx0aVhhY3RJZDsKKworCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsK KworCQlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZSh0bXBNWGFjdCk7CisJCWVu dHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkodG1wTVhhY3QpOworCisJCWlmIChw YWdlbm8gIT0gcHJldl9wYWdlbm8pCisJCQlidWYgPSBTbHJ1UmVhZFN3aXRjaFBhZ2Uoc3Rh dGUtPm9mZnNldCwgcGFnZW5vKTsKKworCQlvZmZwdHIgPSAoT2xkTXVsdGlYYWN0T2Zmc2V0 ICopIGJ1ZjsKKwkJb2ZmcHRyICs9IGVudHJ5bm87CisJCW5leHRNWE9mZnNldCA9ICpvZmZw dHI7CisJfQorCisJaWYgKG5leHRNWE9mZnNldCA9PSAwKQorCXsKKwkJLyogSW52YWxpZCBl bnRyeSAqLworCQlyZXR1cm4gZmFsc2U7CisJfQorCWxlbmd0aCA9IG5leHRNWE9mZnNldCAt IG9mZnNldDsKKworCS8qIHJlYWQgdGhlIG1lbWJlcnMgKi8KKwlwcmV2X3BhZ2VubyA9IC0x OworCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyssIG9mZnNldCsrKQorCXsKKwkJ VHJhbnNhY3Rpb25JZCAqeGFjdHB0cjsKKwkJdWludDMyCSAgICpmbGFnc3B0cjsKKwkJaW50 CQkJZmxhZ3NvZmY7CisJCWludAkJCWJzaGlmdDsKKwkJaW50CQkJbWVtYmVyb2ZmOworCQlN dWx0aVhhY3RTdGF0dXMgc3RhdHVzOworCisJCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQ YWdlKG9mZnNldCk7CisJCW1lbWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQob2Zm c2V0KTsKKworCQlpZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQorCQl7CisJCQlidWYgPSBT bHJ1UmVhZFN3aXRjaFBhZ2Uoc3RhdGUtPm1lbWJlcnMsIHBhZ2Vubyk7CisJCQlwcmV2X3Bh Z2VubyA9IHBhZ2VubzsKKwkJfQorCisJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAo YnVmICsgbWVtYmVyb2ZmKTsKKwkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0 cikpCisJCXsKKwkJCS8qCisJCQkgKiBDb3JuZXIgY2FzZSAyOiB3ZSBhcmUgbG9va2luZyBh dCB1bnVzZWQgc2xvdCB6ZXJvCisJCQkgKi8KKwkJCWlmIChvZmZzZXQgPT0gMCkKKwkJCQlj b250aW51ZTsKKworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSB0aGlzIGlzIGFuIGludmFsaWQg ZW50cnkgdGhhdCBzaG91bGQgbm90IGJlCisJCQkgKiByZWZlcmVuY2VkIGZyb20gYW55d2hl cmUgaW4gdGhlIGhlYXAuICBXZSBjb3VsZCByZXR1cm4gJ2ZhbHNlJworCQkJICogaGVyZSwg YnV0IHdlIHByZWZlciB0byBjb250aW51ZSByZWFkaW5nIHRoZSBtZW1iZXJzIGFuZAorCQkJ ICogY29udmVydGluZyB0aGVtIHRoZSBiZXN0IHdlIGNhbiwgdG8gcHJlc2VydmUgZXZpZGVu Y2UgaW4gY2FzZQorCQkJICogdGhpcyBpcyBjb3JydXB0aW9uIHRoYXQgc2hvdWxkIG5vdCBo YXBwZW4uCisJCQkgKi8KKwkJfQorCisJCWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zm c2V0KG9mZnNldCk7CisJCWJzaGlmdCA9IE1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNl dCk7CisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoYnVmICsgZmxhZ3NvZmYpOworCisJCXN0 YXR1cyA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1B U0s7CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIHVwZGF0aW5nIFhJRCBhbW9uZyB0aGUg bWVtYmVycywgb3IgZmlyc3QgbG9ja2luZyBYSUQKKwkJICogaWYgbm8gdXBkYXRpbmcgWElE LgorCQkgKi8KKwkJaWYgKElTVVBEQVRFX2Zyb21fbXhzdGF0dXMoc3RhdHVzKSkKKwkJewor CQkJLyogc2FuaXR5IGNoZWNrICovCisJCQlpZiAoSVNVUERBVEVfZnJvbV9teHN0YXR1cyhy ZXN1bHRfc3RhdHVzKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIGRvbid0IGV4cGVjdCB0 byBzZWUgbW9yZSB0aGFuIG9uZSB1cGRhdGluZyBtZW1iZXIsIGV2ZW4KKwkJCQkgKiBpZiB0 aGUgc2VydmVyIGhhZCBjcmFzaGVkLgorCQkJCSAqLworCQkJCXBnX2ZhdGFsKCJtdWx0aXhh Y3QgJXUgaGFzIG1vcmUgdGhhbiBvbmUgdXBkYXRpbmcgbWVtYmVyIiwKKwkJCQkJCSBtdWx0 aSk7CisJCQl9CisJCQlyZXN1bHRfeGlkID0gKnhhY3RwdHI7CisJCQlyZXN1bHRfc3RhdHVz ID0gc3RhdHVzOworCQl9CisJCWVsc2UgaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChyZXN1 bHRfeGlkKSkKKwkJeworCQkJcmVzdWx0X3hpZCA9ICp4YWN0cHRyOworCQkJcmVzdWx0X3N0 YXR1cyA9IHN0YXR1czsKKwkJfQorCX0KKworCW1lbWJlci0+eGlkID0gcmVzdWx0X3hpZDsK KwltZW1iZXItPnN0YXR1cyA9IHJlc3VsdF9zdGF0dXM7CisJcmV0dXJuIHRydWU7Cit9CisK Ky8qCisgKiBGcmVlcyB0aGUgbWFsbG9jZWQgcmVhZGVyLgorICovCit2b2lkCitGcmVlT2xk TXVsdGlYYWN0UmVhZGVyKE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUpCit7CisJRnJlZVNs cnVSZWFkKHN0YXRlLT5vZmZzZXQpOworCUZyZWVTbHJ1UmVhZChzdGF0ZS0+bWVtYmVycyk7 CisKKwlwZnJlZShzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUv bXVsdGl4YWN0X3JlYWRfdjE4LmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3Jl YWRfdjE4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhlZTgy YTE0YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFj dF9yZWFkX3YxOC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBtdWx0aXhhY3RfcmVhZF92 MTguaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmVhZF92 MTguaAorICovCisjaWZuZGVmIE1VTFRJWEFDVF9SRUFEX1YxOF9ICisjZGVmaW5lIE1VTFRJ WEFDVF9SRUFEX1YxOF9ICisKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisjaW5j bHVkZSAic2xydV9pby5oIgorCisvKgorICogTXVsdGlYYWN0T2Zmc2V0IGNoYW5nZWQgZnJv bSB1aW50MzIgdG8gdWludDY0IGJldHdlZW4gdmVyc2lvbnMgMTggYW5kIDE5LgorICogT2xk TXVsdGlYYWN0T2Zmc2V0IGlzIHVzZWQgdG8gcmVwcmVzZW50IGEgMzItYml0IG9mZnNldCBm cm9tIHRoZSBvbGQKKyAqIGNsdXN0ZXIuCisgKi8KK3R5cGVkZWYgdWludDMyIE9sZE11bHRp WGFjdE9mZnNldDsKKwordHlwZWRlZiBzdHJ1Y3QgT2xkTXVsdGlYYWN0UmVhZGVyCit7CisJ TXVsdGlYYWN0SWQgbmV4dE1YYWN0OworCU9sZE11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0 OworCisJU2xydVNlZ1N0YXRlICpvZmZzZXQ7CisJU2xydVNlZ1N0YXRlICptZW1iZXJzOwor fSBPbGRNdWx0aVhhY3RSZWFkZXI7CisKK2V4dGVybiBPbGRNdWx0aVhhY3RSZWFkZXIgKkFs bG9jT2xkTXVsdGlYYWN0UmVhZChjaGFyICpwZ2RhdGEsCisJCQkJCQkJCQkJCQkgTXVsdGlY YWN0SWQgbmV4dE11bHRpLAorCQkJCQkJCQkJCQkJIE9sZE11bHRpWGFjdE9mZnNldCBuZXh0 T2Zmc2V0KTsKK2V4dGVybiBib29sIEdldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVyKE9s ZE11bHRpWGFjdFJlYWRlciAqc3RhdGUsCisJCQkJCQkJCQkJICBNdWx0aVhhY3RJZCBtdWx0 aSwKKwkJCQkJCQkJCQkgIE11bHRpWGFjdE1lbWJlciAqbWVtYmVyKTsKK2V4dGVybiB2b2lk IEZyZWVPbGRNdWx0aVhhY3RSZWFkZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpyZWFkZXIpOwor CisjZW5kaWYJCQkJCQkJLyogTVVMVElYQUNUX1JFQURfVjE4X0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmV3cml0ZS5jIGIvc3JjL2Jpbi9wZ191 cGdyYWRlL211bHRpeGFjdF9yZXdyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmQ0ODNiMmZmMzFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9w Z191cGdyYWRlL211bHRpeGFjdF9yZXdyaXRlLmMKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisg KiBtdWx0aXhhY3RfcmV3cml0ZS5jCisgKgorICogRnVuY3Rpb25zIHRvIGNvbnZlcnQgbXVs dGl4YWN0IFNMUlVzIGZyb20gdGhlIHByZS12MTkgZm9ybWF0IHRvIHRoZSBjdXJyZW50Cisg KiBmb3JtYXQgd2l0aCA2NC1iaXQgTXVsdGlYYWN0T2Zmc2V0cy4KKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBz cmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3Jld3JpdGUuYworICovCisKKyNpbmNsdWRl ICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdF9pbnRlcm5h bC5oIgorI2luY2x1ZGUgIm11bHRpeGFjdF9yZWFkX3YxOC5oIgorI2luY2x1ZGUgInBnX3Vw Z3JhZGUuaCIKKworc3RhdGljIHZvaWQgUmVjb3JkTXVsdGlYYWN0T2Zmc2V0KFNscnVTZWdT dGF0ZSAqb2Zmc2V0c193cml0ZXIsIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJCQkgIE11 bHRpWGFjdE9mZnNldCBvZmZzZXQpOworc3RhdGljIHZvaWQgUmVjb3JkTXVsdGlYYWN0TWVt YmVycyhTbHJ1U2VnU3RhdGUgKm1lbWJlcnNfd3JpdGVyLAorCQkJCQkJCQkgICBNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0LAorCQkJCQkJCQkgICBpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1l bWJlciAqbWVtYmVycyk7CisKKy8qCisgKiBDb252ZXJ0IHBnX211bHRpeGFjdC9vZmZzZXQg YW5kIC9tZW1iZXJzIGZyb20gdGhlIG9sZCBwcmUtdjE5IGZvcm1hdCB3aXRoCisgKiAzMi1i aXQgb2Zmc2V0cyB0byB0aGUgY3VycmVudCBmb3JtYXQuCisgKgorICogTXVsdGl4aWRzIGlu IHRoZSByYW5nZSBbZnJvbV9tdWx0aSwgdG9fbXVsdGkpIGFyZSByZWFkIGZyb20gdGhlIG9s ZAorICogY2x1c3RlciwgYW5kIHdyaXR0ZW4gaW4gdGhlIG5ldyBmb3JtYXQuICBBbiBpbXBv cnRhbnQgZWRnZSBjYXNlIGlzIHRoYXQgaWYKKyAqIGZyb21fbXVsdGkgPT0gdG9fbXVsdGks IHRoaXMgaW5pdGlhbGl6ZXMgdGhlIG5ldyBwZ19tdWx0aXhhY3QgZmlsZXMgaW4gdGhlCisg KiBuZXcgZm9ybWF0IHdpdGhvdXQgdHJ5aW5nIHRvIG9wZW4gYW55IG9sZCBmaWxlcy4gIChX ZSByZWx5IG9uIHRoYXQgd2hlbgorICogdXBncmFkaW5nIGZyb20gUG9zdGdyZVNRTCB2ZXJz aW9uIDkuMiBvciBiZWxvdy4pCisgKgorICogUmV0dXJucyB0aGUgbmV3IG5leHRPZmZzZXQg dmFsdWU7IHRoZSBjYWxsZXIgc2hvdWxkIHNldCBpdCBpbiB0aGUgbmV3CisgKiBjb250cm9s IGZpbGUuICBUaGUgbmV3IG1lbWJlcnMgYWx3YXlzIHN0YXJ0IGZyb20gb2Zmc2V0IDEsIHJl Z2FyZGxlc3Mgb2YKKyAqIHRoZSBvZmZzZXQgcmFuZ2UgdXNlZCBpbiB0aGUgb2xkIGNsdXN0 ZXIuCisgKi8KK011bHRpWGFjdE9mZnNldAorcmV3cml0ZV9tdWx0aXhhY3RzKE11bHRpWGFj dElkIGZyb21fbXVsdGksIE11bHRpWGFjdElkIHRvX211bHRpKQoreworCU11bHRpWGFjdElk IG9sZGVzdF9tdWx0aSwKKwkJCQluZXh0X211bHRpOworCU11bHRpWGFjdE9mZnNldCBuZXh0 X29mZnNldDsKKwlTbHJ1U2VnU3RhdGUgKm9mZnNldHNfd3JpdGVyOworCVNscnVTZWdTdGF0 ZSAqbWVtYmVyc193cml0ZXI7CisJY2hhcgkJZGlyW01BWFBHUEFUSF0gPSB7MH07CisJYm9v bAkJcHJldl9tdWx0aXhpZF92YWxpZCA9IGZhbHNlOworCisJLyoKKwkgKiBUaGUgcmFuZ2Ug b2YgdmFsaWQgbXVsdGkgWElEcyBpcyB1bmNoYW5nZWQgYnkgdGhlIGNvbnZlcnNpb24gKHRo ZXkgYXJlCisJICogcmVmZXJlbmNlZCBmcm9tIHRoZSBoZWFwIHRhYmxlcyksIGJ1dCB0aGUg bWVtYmVycyBTTFJVIGlzIHJld3JpdHRlbiB0bworCSAqIHN0YXJ0IGZyb20gb2Zmc2V0IDEu CisJICovCisJb2xkZXN0X211bHRpID0gZnJvbV9tdWx0aTsKKwluZXh0X211bHRpID0gdG9f bXVsdGk7CisJbmV4dF9vZmZzZXQgPSAxOworCisJLyogUHJlcGFyZSB0byB3cml0ZSB0aGUg bmV3IFNMUlUgZmlsZXMgKi8KKwlwZ19zcHJpbnRmKGRpciwgIiVzL3BnX211bHRpeGFjdC9v ZmZzZXRzIiwgbmV3X2NsdXN0ZXIucGdkYXRhKTsKKwlvZmZzZXRzX3dyaXRlciA9IEFsbG9j U2xydVdyaXRlKGRpciwgZmFsc2UpOworCVNscnVXcml0ZVN3aXRjaFBhZ2Uob2Zmc2V0c193 cml0ZXIsIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKGZyb21fbXVsdGkpKTsKKworCXBnX3Nw cmludGYoZGlyLCAiJXMvcGdfbXVsdGl4YWN0L21lbWJlcnMiLCBuZXdfY2x1c3Rlci5wZ2Rh dGEpOworCW1lbWJlcnNfd3JpdGVyID0gQWxsb2NTbHJ1V3JpdGUoZGlyLCB0cnVlIC8qIHVz ZSBsb25nIHNlZ21lbnQgbmFtZXMgKi8gKTsKKwlTbHJ1V3JpdGVTd2l0Y2hQYWdlKG1lbWJl cnNfd3JpdGVyLCBNWE9mZnNldFRvTWVtYmVyUGFnZShuZXh0X29mZnNldCkpOworCisJLyoK KwkgKiBDb252ZXJ0IG9sZCBtdWx0aXhpZHMsIGlmIG5lZWRlZCwgYnkgcmVhZGluZyB0aGVt IG9uZS1ieS1vbmUgZnJvbSB0aGUKKwkgKiBvbGQgY2x1c3Rlci4KKwkgKi8KKwlpZiAodG9f bXVsdGkgIT0gZnJvbV9tdWx0aSkKKwl7CisJCU9sZE11bHRpWGFjdFJlYWRlciAqb2xkX3Jl YWRlcjsKKworCQlvbGRfcmVhZGVyID0gQWxsb2NPbGRNdWx0aVhhY3RSZWFkKG9sZF9jbHVz dGVyLnBnZGF0YSwKKwkJCQkJCQkJCQkgICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtw bnRfbnh0bXVsdGksCisJCQkJCQkJCQkJICAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hr cG50X254dG14b2ZmKTsKKworCQlmb3IgKE11bHRpWGFjdElkIG11bHRpID0gb2xkZXN0X211 bHRpOyBtdWx0aSAhPSBuZXh0X211bHRpOykKKwkJeworCQkJTXVsdGlYYWN0TWVtYmVyIG1l bWJlcjsKKwkJCWJvb2wJCW11bHRpeGlkX3ZhbGlkOworCisJCQkvKgorCQkJICogUmVhZCB0 aGlzIG11bHRpeGlkJ3MgbWVtYmVycy4KKwkJCSAqCisJCQkgKiBMb2NraW5nLW9ubHkgWElE cyB0aGF0IG1heSBiZSBwYXJ0IG9mIG11bHRpLXhpZHMgZG9uJ3QgbWF0dGVyCisJCQkgKiBh ZnRlciB1cGdyYWRlLCBhcyB0aGVyZSBjYW4gYmUgbm8gdHJhbnNhY3Rpb25zIHJ1bm5pbmcg YWNyb3NzCisJCQkgKiB1cGdyYWRlLiAgU28gYXMgYSBzbWFsbCBvcHRpbWl6YXRpb24sIHdl IG9ubHkgcmVhZCBvbmUgbWVtYmVyCisJCQkgKiBmcm9tIGVhY2ggbXVsdGl4aWQ6IHRoZSBv bmUgdXBkYXRpbmcgb25lLCBvciBpZiB0aGVyZSB3YXMgbm8KKwkJCSAqIHVwZGF0ZSwgYXJi aXRyYXJpbHkgdGhlIGZpcnN0IGxvY2tpbmcgeGlkLgorCQkJICovCisJCQltdWx0aXhpZF92 YWxpZCA9IEdldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVyKG9sZF9yZWFkZXIsIG11bHRp LCAmbWVtYmVyKTsKKworCQkJLyoKKwkJCSAqIFdyaXRlIHRoZSBuZXcgb2Zmc2V0IHRvIHBn X211bHRpeGFjdC9vZmZzZXRzLgorCQkJICoKKwkJCSAqIElmIHRoZSBvbGQgbXVsdGl4aWQg d2FzIGludmFsaWQsIHdlIHN0aWxsIG5lZWQgdG8gd3JpdGUgdGhpcworCQkJICogb2Zmc2V0 IGlmIHRoZSAqcHJldmlvdXMqIG11bHRpeGlkIHdhcyB2YWxpZC4gIFRoYXQncyBiZWNhdXNl CisJCQkgKiB0aGUgd2hlbiByZWFkaW5nIGEgbXVsdGl4aWRzLCB0aGUgbnVtYmVyIG9mIG1l bWJlcnMgaXMKKwkJCSAqIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu IHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dAorCQkJICogbXVsdGl4aWQncyBvZmZzZXRzLgor CQkJICovCisJCQlSZWNvcmRNdWx0aVhhY3RPZmZzZXQob2Zmc2V0c193cml0ZXIsIG11bHRp LAorCQkJCQkJCQkgIChtdWx0aXhpZF92YWxpZCB8fCBwcmV2X211bHRpeGlkX3ZhbGlkKSA/ IG5leHRfb2Zmc2V0IDogMCk7CisKKwkJCWlmIChtdWx0aXhpZF92YWxpZCkKKwkJCXsKKwkJ CQlSZWNvcmRNdWx0aVhhY3RNZW1iZXJzKG1lbWJlcnNfd3JpdGVyLCBuZXh0X29mZnNldCwg MSwgJm1lbWJlcik7CisJCQkJbmV4dF9vZmZzZXQgKz0gMTsKKwkJCX0KKworCQkJLyogQWR2 YW5jZSB0byBuZXh0IG11bHRpeGlkLCBoYW5kbGluZyB3cmFwYXJvdW5kICovCisJCQltdWx0 aSsrOworCQkJaWYgKG11bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJCQltdWx0aSA9IEZp cnN0TXVsdGlYYWN0SWQ7CisJCQlwcmV2X211bHRpeGlkX3ZhbGlkID0gbXVsdGl4aWRfdmFs aWQ7CisJCX0KKworCQlGcmVlT2xkTXVsdGlYYWN0UmVhZGVyKG9sZF9yZWFkZXIpOworCX0K KworCS8qIHdyaXRlIHRoZSBmaW5hbCAnbmV4dCcgb2Zmc2V0IHRvIHRoZSBsYXN0IFNMUlUg cGFnZSAqLworCVJlY29yZE11bHRpWGFjdE9mZnNldChvZmZzZXRzX3dyaXRlciwgbmV4dF9t dWx0aSwKKwkJCQkJCSAgcHJldl9tdWx0aXhpZF92YWxpZCA/IG5leHRfb2Zmc2V0IDogMCk7 CisKKwkvKiBSZWxlYXNlIHJlc291cmNlcyAqLworCUZyZWVTbHJ1V3JpdGUob2Zmc2V0c193 cml0ZXIpOworCUZyZWVTbHJ1V3JpdGUobWVtYmVyc193cml0ZXIpOworCisJcmV0dXJuIG5l eHRfb2Zmc2V0OworfQorCisKKy8qCisgKiBXcml0ZSBvbmUgb2Zmc2V0IHRvIHRoZSBvZmZz ZXQgU0xSVQorICovCitzdGF0aWMgdm9pZAorUmVjb3JkTXVsdGlYYWN0T2Zmc2V0KFNscnVT ZWdTdGF0ZSAqb2Zmc2V0c193cml0ZXIsIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkgIE11 bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJaW50NjQJCXBhZ2VubzsKKwlpbnQJCQllbnRy eW5vOworCWNoYXIJICAgKmJ1ZjsKKwlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKKworCXBh Z2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKKwllbnRyeW5vID0gTXVs dGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKKworCWJ1ZiA9IFNscnVXcml0ZVN3aXRj aFBhZ2Uob2Zmc2V0c193cml0ZXIsIHBhZ2Vubyk7CisJb2ZmcHRyID0gKE11bHRpWGFjdE9m ZnNldCAqKSBidWY7CisJb2ZmcHRyW2VudHJ5bm9dID0gb2Zmc2V0OworfQorCisvKgorICog V3JpdGUgdGhlIG1lbWJlcnMgZm9yIG9uZSBtdWx0aXhpZCBpbiB0aGUgbWVtYmVycyBTTFJV CisgKgorICogKEN1cnJlbnRseSwgdGhpcyBpcyBvbmx5IGV2ZXIgY2FsbGVkIHdpdGggbm1l bWJlcnMgPT0gMSkKKyAqLworc3RhdGljIHZvaWQKK1JlY29yZE11bHRpWGFjdE1lbWJlcnMo U2xydVNlZ1N0YXRlICptZW1iZXJzX3dyaXRlciwKKwkJCQkJICAgTXVsdGlYYWN0T2Zmc2V0 IG9mZnNldCwKKwkJCQkJICAgaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RNZW1iZXIgKm1lbWJl cnMpCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBubWVtYmVyczsgaSsrLCBvZmZzZXQrKykK Kwl7CisJCWludDY0CQlwYWdlbm87CisJCWNoYXIJICAgKmJ1ZjsKKwkJVHJhbnNhY3Rpb25J ZCAqbWVtYmVycHRyOworCQl1aW50MzIJICAgKmZsYWdzcHRyOworCQl1aW50MzIJCWZsYWdz dmFsOworCQlpbnQJCQlic2hpZnQ7CisJCWludAkJCWZsYWdzb2ZmOworCQlpbnQJCQltZW1i ZXJvZmY7CisKKwkJQXNzZXJ0KG1lbWJlcnNbaV0uc3RhdHVzIDw9IE11bHRpWGFjdFN0YXR1 c1VwZGF0ZSk7CisKKwkJcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsK KwkJbWVtYmVyb2ZmID0gTVhPZmZzZXRUb01lbWJlck9mZnNldChvZmZzZXQpOworCQlmbGFn c29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOworCQlic2hpZnQgPSBNWE9m ZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOworCisJCWJ1ZiA9IFNscnVXcml0ZVN3aXRj aFBhZ2UobWVtYmVyc193cml0ZXIsIHBhZ2Vubyk7CisKKwkJbWVtYmVycHRyID0gKFRyYW5z YWN0aW9uSWQgKikgKGJ1ZiArIG1lbWJlcm9mZik7CisKKwkJKm1lbWJlcnB0ciA9IG1lbWJl cnNbaV0ueGlkOworCisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoYnVmICsgZmxhZ3NvZmYp OworCisJCWZsYWdzdmFsID0gKmZsYWdzcHRyOworCQlmbGFnc3ZhbCAmPSB+KCgoMSA8PCBN WEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKSA8PCBic2hpZnQpOworCQlmbGFnc3Zh bCB8PSAobWVtYmVyc1tpXS5zdGF0dXMgPDwgYnNoaWZ0KTsKKwkJKmZsYWdzcHRyID0gZmxh Z3N2YWw7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3Jh ZGUuYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKaW5kZXggNDkwZTk4ZmEy NmYuLmIzNDA1YzIyMTM1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBn cmFkZS5jCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKQEAgLTQzLDYg KzQzLDcgQEAKIAogI2luY2x1ZGUgPHRpbWUuaD4KIAorI2luY2x1ZGUgImFjY2Vzcy9tdWx0 aXhhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzX2QuaCIKICNpbmNsdWRlICJj b21tb24vZmlsZV9wZXJtLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKQEAgLTgw NywxNSArODA4LDE1IEBAIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogCQkJICBuZXdfY2x1 c3Rlci5wZ2RhdGEpOwogCWNoZWNrX29rKCk7CiAKLQkvKgotCSAqIElmIHRoZSBvbGQgc2Vy dmVyIGlzIGJlZm9yZSB0aGUgTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSIGNoYW5n ZQotCSAqIChzZWUgcGdfdXBncmFkZS5oKSBhbmQgdGhlIG5ldyBzZXJ2ZXIgaXMgYWZ0ZXIs IHRoZW4gd2UgZG9uJ3QgY29weQotCSAqIHBnX211bHRpeGFjdCBmaWxlcywgYnV0IHdlIG5l ZWQgdG8gcmVzZXQgcGdfY29udHJvbCBzbyB0aGF0IHRoZSBuZXcKLQkgKiBzZXJ2ZXIgZG9l c24ndCBhdHRlbXB0IHRvIHJlYWQgbXVsdGlzIG9sZGVyIHRoYW4gdGhlIGN1dG9mZiB2YWx1 ZS4KLQkgKi8KLQlpZiAob2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxU SVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgJiYKLQkJbmV3X2NsdXN0ZXIuY29udHJvbGRh dGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIpCisJLyogQ29w eSBvciBjb252ZXJ0IHBnX211bHRpeGFjdCBmaWxlcyAqLworCUFzc2VydChuZXdfY2x1c3Rl ci5jb250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZF Uik7CisJQXNzZXJ0KG5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVMVElY QUNUT0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSKTsKKwlpZiAob2xkX2NsdXN0ZXIuY29u dHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9W RVIpCiAJeworCQkvKiBObyBjaGFuZ2UgaW4gbXVsdGl4YWN0IGZvcm1hdCwganVzdCBjb3B5 IHRoZSBmaWxlcyAqLworCQlNdWx0aVhhY3RJZCBuZXdfbnh0bXVsdGkgPSBvbGRfY2x1c3Rl ci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGk7CisJCU11bHRpWGFjdE9mZnNldCBuZXdf bnh0bXhvZmYgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhvZmY7CisK IAkJY29weV9zdWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9vZmZzZXRzIiwgInBnX211bHRp eGFjdC9vZmZzZXRzIik7CiAJCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ19tdWx0aXhhY3QvbWVt YmVycyIsICJwZ19tdWx0aXhhY3QvbWVtYmVycyIpOwogCkBAIC04MjYsMzggKzgyNyw2NCBA QCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAkJICogY291bnRlcnMgaGVyZSBhbmQgdGhl IG9sZGVzdCBtdWx0aSBwcmVzZW50IG9uIHN5c3RlbS4KIAkJICovCiAJCWV4ZWNfcHJvZyhV VElMSVRZX0xPR19GSUxFLCBOVUxMLCB0cnVlLCB0cnVlLAotCQkJCSAgIlwiJXMvcGdfcmVz ZXR3YWxcIiAtTyAldSAtbSAldSwldSBcIiVzXCIiLAotCQkJCSAgbmV3X2NsdXN0ZXIuYmlu ZGlyLAotCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG14b2ZmLAot CQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpLAorCQkJCSAg IlwiJXMvcGdfcmVzZXR3YWxcIiAtTyAlIiBQUkl1NjQgIiAtbSAldSwldSBcIiVzXCIiLAor CQkJCSAgbmV3X2NsdXN0ZXIuYmluZGlyLCBuZXdfbnh0bXhvZmYsIG5ld19ueHRtdWx0aSwK IAkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9vbGRzdE11bHRpLAogCQkJ CSAgbmV3X2NsdXN0ZXIucGdkYXRhKTsKIAkJY2hlY2tfb2soKTsKIAl9Ci0JZWxzZSBpZiAo bmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hB TkdFX0NBVF9WRVIpCisJZWxzZQogCXsKKwkJLyogQ29udmVyc2lvbiBpcyBuZWVkZWQgKi8K KwkJTXVsdGlYYWN0SWQgbnh0bXVsdGk7CisJCU11bHRpWGFjdElkIG9sZHN0TXVsdGk7CisJ CU11bHRpWGFjdE9mZnNldCBueHRteG9mZjsKKwogCQkvKgotCQkgKiBSZW1vdmUgb2Zmc2V0 cy8wMDAwIGZpbGUgY3JlYXRlZCBieSBpbml0ZGIgdGhhdCBubyBsb25nZXIgbWF0Y2hlcwot CQkgKiB0aGUgbmV3IG11bHRpLXhpZCB2YWx1ZS4gICJtZW1iZXJzIiBzdGFydHMgYXQgemVy byBzbyBubyBuZWVkIHRvCi0JCSAqIHJlbW92ZSBpdC4KKwkJICogRGV0ZXJtaW5lIHRoZSBy YW5nZSBvZiBtdWx0aXhhY3RzIHRvIGNvbnZlcnQuCiAJCSAqLwotCQlyZW1vdmVfbmV3X3N1 YmRpcigicGdfbXVsdGl4YWN0L29mZnNldHMiLCBmYWxzZSk7CisJCW54dG11bHRpID0gb2xk X2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpOworCQlpZiAob2xkX2NsdXN0 ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9W RVIpCisJCQlvbGRzdE11bHRpID0gb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X29s ZHN0TXVsdGk7CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEluIFBvc3RncmVTUUwgOS4y IGFuZCBiZWxvdywgbXVsdGl0cmFuc2FjdGlvbnMgd2VyZSBvbmx5IHVzZWQKKwkJCSAqIGZv ciByb3cgbG9ja2luZywgYW5kIGFzIHN1Y2ggZG9uJ3QgbmVlZCB0byBiZSBwcmVzZXJ2ZWQg ZHVyaW5nCisJCQkgKiB1cGdyYWRlLiAgSW4gdGhhdCBjYXNlLCB3ZSB1dGlsaXplIGNvbnZl cnRfbXVsdGl4YWN0cygpIGp1c3QgdG8KKwkJCSAqIGluaXRpYWxpemUgbmV3LCBlbXB0eSBm aWxlcyBpbiB0aGUgbmV3IGZvcm1hdC4KKwkJCSAqCisJCQkgKiBJdCdzIGltcG9ydGFudCB0 aGF0IHRoZSBvbGRlc3QgbXVsdGkgaXMgc2V0IHRvIHRoZSBsYXRlc3QgdmFsdWUKKwkJCSAq IHVzZWQgYnkgdGhlIG9sZCBzeXN0ZW0sIHNvIHRoYXQgbXVsdGl4YWN0LmMgcmV0dXJucyB0 aGUgZW1wdHkKKwkJCSAqIHNldCBmb3IgbXVsdGlzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBv biBkaXNrLgorCQkJICovCisJCQlvbGRzdE11bHRpID0gbnh0bXVsdGk7CisJCX0KKwkJLyog aGFuZGxlIHdyYXBhcm91bmQgKi8KKwkJaWYgKG54dG11bHRpIDwgRmlyc3RNdWx0aVhhY3RJ ZCkKKwkJCW54dG11bHRpID0gRmlyc3RNdWx0aVhhY3RJZDsKKwkJaWYgKG9sZHN0TXVsdGkg PCBGaXJzdE11bHRpWGFjdElkKQorCQkJb2xkc3RNdWx0aSA9IEZpcnN0TXVsdGlYYWN0SWQ7 CiAKLQkJcHJlcF9zdGF0dXMoIlNldHRpbmcgb2xkZXN0IG11bHRpeGFjdCBJRCBpbiBuZXcg Y2x1c3RlciIpOworCQkvKgorCQkgKiBSZW1vdmUgdGhlIGZpbGVzIGNyZWF0ZWQgYnkgaW5p dGRiIGluIHRoZSBuZXcgY2x1c3Rlci4KKwkJICogY29udmVydF9tdWx0aXhhY3RzKCkgd2ls bCBjcmVhdGUgbmV3IG9uZXMuCisJCSAqLworCQlyZW1vdmVfbmV3X3N1YmRpcigicGdfbXVs dGl4YWN0L21lbWJlcnMiLCBmYWxzZSk7CisJCXJlbW92ZV9uZXdfc3ViZGlyKCJwZ19tdWx0 aXhhY3Qvb2Zmc2V0cyIsIGZhbHNlKTsKIAogCQkvKgotCQkgKiBXZSBkb24ndCBwcmVzZXJ2 ZSBmaWxlcyBpbiB0aGlzIGNhc2UsIGJ1dCBpdCdzIGltcG9ydGFudCB0aGF0IHRoZQotCQkg KiBvbGRlc3QgbXVsdGkgaXMgc2V0IHRvIHRoZSBsYXRlc3QgdmFsdWUgdXNlZCBieSB0aGUg b2xkIHN5c3RlbSwgc28KLQkJICogdGhhdCBtdWx0aXhhY3QuYyByZXR1cm5zIHRoZSBlbXB0 eSBzZXQgZm9yIG11bHRpcyB0aGF0IG1pZ2h0IGJlCi0JCSAqIHByZXNlbnQgb24gZGlzay4g IFdlIHNldCBuZXh0IG11bHRpIHRvIHRoZSB2YWx1ZSBmb2xsb3dpbmcgdGhhdDsgaXQKLQkJ ICogbWlnaHQgZW5kIHVwIHdyYXBwZWQgYXJvdW5kIChpLmUuIDApIGlmIHRoZSBvbGQgY2x1 c3RlciBoYWQKLQkJICogbmV4dD1NYXhNdWx0aVhhY3RJZCwgYnV0IG11bHRpeGFjdC5jIGNh biBjb3BlIHdpdGggdGhhdCBqdXN0IGZpbmUuCisJCSAqIENyZWF0ZSBuZXcgcGdfbXVsdGl4 YWN0IGZpbGVzLCBjb252ZXJ0aW5nIG9sZCBvbmVzIGlmIG5lZWRlZC4KIAkJICovCisJCXBy ZXBfc3RhdHVzKCJDb252ZXJ0aW5nIHBnX211bHRpeGFjdCBmaWxlcyIpOworCQlueHRteG9m ZiA9IHJld3JpdGVfbXVsdGl4YWN0cyhvbGRzdE11bHRpLCBueHRtdWx0aSk7CisJCWNoZWNr X29rKCk7CisKKwkJcHJlcF9zdGF0dXMoIlNldHRpbmcgbmV4dCBtdWx0aXhhY3QgSUQgYW5k IG9mZnNldCBmb3IgbmV3IGNsdXN0ZXIiKTsKIAkJZXhlY19wcm9nKFVUSUxJVFlfTE9HX0ZJ TEUsIE5VTEwsIHRydWUsIHRydWUsCi0JCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1tICV1 LCV1IFwiJXNcIiIsCisJCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1PICUiIFBSSXU2NCAi IC1tICV1LCV1IFwiJXNcIiIsCiAJCQkJICBuZXdfY2x1c3Rlci5iaW5kaXIsCi0JCQkJICBv bGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGkgKyAxLAotCQkJCSAgb2xk X2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpLAorCQkJCSAgbnh0bXhvZmYs IG54dG11bHRpLCBvbGRzdE11bHRpLAogCQkJCSAgbmV3X2NsdXN0ZXIucGdkYXRhKTsKIAkJ Y2hlY2tfb2soKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBn cmFkZS5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaAppbmRleCBlODYzMzZm NGJlOS4uNDhmMTVkZmY1ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191 cGdyYWRlLmgKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaApAQCAtMTE0 LDYgKzExNCwxMyBAQCBleHRlcm4gY2hhciAqb3V0cHV0X2ZpbGVzW107CiAgKi8KICNkZWZp bmUgTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSIDIwMTMwMTIzMQogCisvKgorICog TXVsdGlYYWN0T2Zmc2V0IHdhcyBjaGFuZ2VkIGZyb20gMzItYml0IHRvIDY0LWJpdCBpbiB2 ZXJzaW9uIDE5LCBhdCB0aGlzCisgKiBjYXRhbG9nIHZlcnNpb24uICBwZ19tdWx0aXhhY3Qg ZmlsZXMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgd2hlbiB1cGdyYWRpbmcKKyAqIGFjcm9zcyB0 aGlzIHZlcnNpb24uCisgKi8KKyNkZWZpbmUgTVVMVElYQUNUT0ZGU0VUX0ZPUk1BVENIQU5H RV9DQVRfVkVSIDk5OTk5OTk5OQorCiAvKgogICogbGFyZ2Ugb2JqZWN0IGNodW5rIHNpemUg YWRkZWQgdG8gcGdfY29udHJvbGRhdGEsCiAgKiBjb21taXQgNWY5M2MzNzgwNWU3NDg1NDg4 NDgwOTE2YjQ1ODVlMDk4ZDNjYzg4MwpAQCAtMjM1LDcgKzI0Miw3IEBAIHR5cGVkZWYgc3Ry dWN0CiAJdWludDMyCQljaGtwbnRfbnh0ZXBvY2g7CiAJdWludDMyCQljaGtwbnRfbnh0b2lk OwogCXVpbnQzMgkJY2hrcG50X254dG11bHRpOwotCXVpbnQzMgkJY2hrcG50X254dG14b2Zm OworCXVpbnQ2NAkJY2hrcG50X254dG14b2ZmOwogCXVpbnQzMgkJY2hrcG50X29sZHN0TXVs dGk7CiAJdWludDMyCQljaGtwbnRfb2xkc3R4aWQ7CiAJdWludDMyCQlhbGlnbjsKQEAgLTQ5 OSw2ICs1MDYsOSBAQCB2b2lkCQlvbGRfOV82X2ludmFsaWRhdGVfaGFzaF9pbmRleGVzKENs dXN0ZXJJbmZvICpjbHVzdGVyLAogCiB2b2lkCQlyZXBvcnRfZXh0ZW5zaW9uX3VwZGF0ZXMo Q2x1c3RlckluZm8gKmNsdXN0ZXIpOwogCisvKiBtdWx0aXhhY3RfcmV3cml0ZS5jICovCitN dWx0aVhhY3RPZmZzZXQgcmV3cml0ZV9tdWx0aXhhY3RzKE11bHRpWGFjdElkIGZyb21fbXVs dGksIE11bHRpWGFjdElkIHRvX211bHRpKTsKKwogLyogcGFyYWxsZWwuYyAqLwogdm9pZAkJ cGFyYWxsZWxfZXhlY19wcm9nKGNvbnN0IGNoYXIgKmxvZ19maWxlLCBjb25zdCBjaGFyICpv cHRfbG9nX2ZpbGUsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmli dXRlX3ByaW50ZigzLCA0KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1 X2lvLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MjA0NDUyODliOQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKQEAgLTAsMCArMSwyNTggQEAKKy8qCisg KiBzbHJ1X2lvLmMKKyAqCisgKiBSb3V0aW5lcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBT TFJVIGZpbGVzIGR1cmluZyB1cGdyYWRlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBn cmFkZS9zbHJ1X2lvLmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2lu Y2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJjb21tb24vZmVfbWVtdXRpbHMuaCIKKyNp bmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfdXRp bHMuaCIKKyNpbmNsdWRlICJwb3J0L3BnX2lvdmVjLmgiCisjaW5jbHVkZSAicGdfdXBncmFk ZS5oIgorI2luY2x1ZGUgInNscnVfaW8uaCIKKworc3RhdGljIFNscnVTZWdTdGF0ZSAqQWxs b2NTbHJ1U2VnU3RhdGUoY29uc3QgY2hhciAqZGlyKTsKK3N0YXRpYyBjaGFyICpTbHJ1Rmls ZU5hbWUoU2xydVNlZ1N0YXRlICpzdGF0ZSwgaW50NjQgc2Vnbm8pOworc3RhdGljIHZvaWQg U2xydUZsdXNoKFNscnVTZWdTdGF0ZSAqc3RhdGUpOworCitzdGF0aWMgU2xydVNlZ1N0YXRl ICoKK0FsbG9jU2xydVNlZ1N0YXRlKGNvbnN0IGNoYXIgKmRpcikKK3sKKwlTbHJ1U2VnU3Rh dGUgKnN0YXRlID0gcGdfbWFsbG9jKHNpemVvZigqc3RhdGUpKTsKKworCXN0YXRlLT5kaXIg PSBwc3RyZHVwKGRpcik7CisJc3RhdGUtPmZuID0gTlVMTDsKKwlzdGF0ZS0+ZmQgPSAtMTsK KwlzdGF0ZS0+c2Vnbm8gPSAtMTsKKwlzdGF0ZS0+cGFnZW5vID0gMDsKKworCXJldHVybiBz dGF0ZTsKK30KKworLyogc2ltaWxhciB0byB0aGUgYmFja2VuZCBmdW5jdGlvbiB3aXRoIHRo ZSBzYW1lIG5hbWUgKi8KK3N0YXRpYyBjaGFyICoKK1NscnVGaWxlTmFtZShTbHJ1U2VnU3Rh dGUgKnN0YXRlLCBpbnQ2NCBzZWdubykKK3sKKwlpZiAoc3RhdGUtPmxvbmdfc2VnbWVudF9u YW1lcykKKwl7CisJCUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1Qo MHhGRkZGRkZGRkZGRkZGRkYpKTsKKwkJcmV0dXJuIHBzcHJpbnRmKCIlcy8lMDE1IiBQUklY NjQsIHN0YXRlLT5kaXIsIHNlZ25vKTsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KHNlZ25v ID49IDAgJiYgc2Vnbm8gPD0gSU5UNjRDT05TVCgweEZGRkZGRikpOworCQlyZXR1cm4gcHNw cmludGYoIiVzLyUwNFgiLCBzdGF0ZS0+ZGlyLCAodW5zaWduZWQgaW50KSBzZWdubyk7CisJ fQorfQorCisvKgorICogQ3JlYXRlIHNscnUgcmVhZGVyIGZvciBkaXIuCisgKgorICogUmV0 dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFsbCBvdGhlciByZWFkIGNh bGxzIGluIHRoaXMgbW9kdWxlLgorICovCitTbHJ1U2VnU3RhdGUgKgorQWxsb2NTbHJ1UmVh ZChjb25zdCBjaGFyICpkaXIsIGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKQoreworCVNscnVT ZWdTdGF0ZSAqc3RhdGUgPSBBbGxvY1NscnVTZWdTdGF0ZShkaXIpOworCisJc3RhdGUtPndy aXRpbmcgPSBmYWxzZTsKKwlzdGF0ZS0+bG9uZ19zZWdtZW50X25hbWVzID0gbG9uZ19zZWdt ZW50X25hbWVzOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogT3BlbiBnaXZlbiBw YWdlIGZvciByZWFkaW5nLgorICoKKyAqIFJlYWRpbmcgY2FuIGJlIGRvbmUgaW4gcmFuZG9t IG9yZGVyLgorICovCitjaGFyICoKK1NscnVSZWFkU3dpdGNoUGFnZVNsb3coU2xydVNlZ1N0 YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpbnQ2NAkJc2Vnbm87CisJc3NpemVf dAkJYnl0ZXNfcmVhZDsKKwlvZmZfdAkJb2Zmc2V0OworCisJQXNzZXJ0KCFzdGF0ZS0+d3Jp dGluZyk7CS8qIHJlYWQgb25seSBtb2RlICovCisKKwlpZiAoc3RhdGUtPnNlZ25vICE9IC0x ICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5vKQorCQlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRh OworCisJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCWlmIChz ZWdubyAhPSBzdGF0ZS0+c2Vnbm8pCisJeworCQlpZiAoc3RhdGUtPnNlZ25vICE9IC0xKQor CQl7CisJCQljbG9zZShzdGF0ZS0+ZmQpOworCQkJc3RhdGUtPmZkID0gLTE7CisKKwkJCXBn X2ZyZWUoc3RhdGUtPmZuKTsKKwkJCXN0YXRlLT5mbiA9IE5VTEw7CisKKwkJCXN0YXRlLT5z ZWdubyA9IC0xOworCQl9CisKKwkJLyogT3BlbiBuZXcgc2VnbWVudCAqLworCQlzdGF0ZS0+ Zm4gPSBTbHJ1RmlsZU5hbWUoc3RhdGUsIHNlZ25vKTsKKwkJaWYgKChzdGF0ZS0+ZmQgPSBv cGVuKHN0YXRlLT5mbiwgT19SRE9OTFkgfCBQR19CSU5BUlksIDApKSA8IDApCisJCQlwZ19m YXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsKKwl9 CisJc3RhdGUtPnNlZ25vID0gc2Vnbm87CisKKwlvZmZzZXQgPSAocGFnZW5vICUgU0xSVV9Q QUdFU19QRVJfU0VHTUVOVCkgKiBCTENLU1o7CisJYnl0ZXNfcmVhZCA9IDA7CisJd2hpbGUg KGJ5dGVzX3JlYWQgPCBCTENLU1opCisJeworCQlzc2l6ZV90CQlyYzsKKworCQlyYyA9IHBn X3ByZWFkKHN0YXRlLT5mZCwKKwkJCQkJICAmc3RhdGUtPmJ1Zi5kYXRhICsgYnl0ZXNfcmVh ZCwKKwkJCQkJICBCTENLU1ogLSBieXRlc19yZWFkLAorCQkJCQkgIG9mZnNldCArIGJ5dGVz X3JlYWQpOworCQlpZiAocmMgPCAwKQorCQl7CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJ CQkJY29udGludWU7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6 ICVtIiwgc3RhdGUtPmZuKTsKKwkJfQorCQlpZiAocmMgPT0gMCkKKwkJeworCQkJLyogdW5l eHBlY3RlZCBFT0YgKi8KKwkJCXBnX2xvZyhQR19XQVJOSU5HLCAidW5leHBlY3RlZCBFT0Yg cmVhZGluZyBmaWxlIFwiJXNcIiBhdCBvZmZzZXQgJXpkLCByZWFkaW5nIGFzIHplcm9zIiwg c3RhdGUtPmZuLAorCQkJCSAgIG9mZnNldCArIGJ5dGVzX3JlYWQpOworCQkJbWVtc2V0KCZz dGF0ZS0+YnVmLmRhdGEgKyBieXRlc19yZWFkLCAwLCBCTENLU1ogLSBieXRlc19yZWFkKTsK KwkJCWJyZWFrOworCQl9CisJCWJ5dGVzX3JlYWQgKz0gcmM7CisJfQorCXN0YXRlLT5wYWdl bm8gPSBwYWdlbm87CisKKwlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOworfQorCisvKgorICog RnJlZXMgdGhlIG1hbGxvY2VkIHJlYWRlci4KKyAqLwordm9pZAorRnJlZVNscnVSZWFkKFNs cnVTZWdTdGF0ZSAqc3RhdGUpCit7CisJQXNzZXJ0KCFzdGF0ZS0+d3JpdGluZyk7CS8qIHJl YWQgb25seSBtb2RlICovCisKKwlpZiAoc3RhdGUtPmZkICE9IC0xKQorCQljbG9zZShzdGF0 ZS0+ZmQpOworCXBnX2ZyZWUoc3RhdGUpOworfQorCisvKgorICogQ3JlYXRlIHNscnUgd3Jp dGVyIGZvciBkaXIuCisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQg YnkgdGhlIGFsbCBvdGhlciB3cml0ZSBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLworU2xy dVNlZ1N0YXRlICoKK0FsbG9jU2xydVdyaXRlKGNvbnN0IGNoYXIgKmRpciwgYm9vbCBsb25n X3NlZ21lbnRfbmFtZXMpCit7CisJU2xydVNlZ1N0YXRlICpzdGF0ZSA9IEFsbG9jU2xydVNl Z1N0YXRlKGRpcik7CisKKwlzdGF0ZS0+d3JpdGluZyA9IHRydWU7CisJc3RhdGUtPmxvbmdf c2VnbWVudF9uYW1lcyA9IGxvbmdfc2VnbWVudF9uYW1lczsKKworCXJldHVybiBzdGF0ZTsK K30KKworLyoKKyAqIE9wZW4gdGhlIGdpdmVuIHBhZ2UgZm9yIHdyaXRpbmcuCisgKgorICog Tk9URTogVGhpcyB1c2VzIE9fRVhDTCB3aGVuIHN0ZXBwaW5nIHRvIGEgbmV3IHNlZ21lbnQs IHNvIHRoaXMgYXNzdW1lcyB0aGF0CisgKiBlYWNoIHNlZ21lbnQgaXMgd3JpdHRlbiBpbiBm dWxsIGJlZm9yZSBtb3Zpbmcgb24gdG8gbmV4dCBvbmUuICBUaGlzCisgKiBsaW1pdGF0aW9u IHdvdWxkIGJlIGVhc3kgdG8gbGlmdCBpZiBuZWVkZWQsIGJ1dCBpdCBmaXRzIHRoZSB1c2Fn ZSBwYXR0ZXJuIG9mCisgKiBjdXJyZW50IGNhbGxlcnMuCisgKi8KK2NoYXIgKgorU2xydVdy aXRlU3dpdGNoUGFnZVNsb3coU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykK K3sKKwlpbnQ2NAkJc2Vnbm87CisJb2ZmX3QJCW9mZnNldDsKKworCWlmIChzdGF0ZS0+c2Vn bm8gIT0gLTEgJiYgcGFnZW5vID09IHN0YXRlLT5wYWdlbm8pCisJCXJldHVybiBzdGF0ZS0+ YnVmLmRhdGE7CisKKwlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7 CisJb2Zmc2V0ID0gKHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpICogQkxDS1Na OworCisJU2xydUZsdXNoKHN0YXRlKTsKKwltZW1zZXQoc3RhdGUtPmJ1Zi5kYXRhLCAwLCBC TENLU1opOworCisJaWYgKHNlZ25vICE9IHN0YXRlLT5zZWdubykKKwl7CisJCWlmIChzdGF0 ZS0+c2Vnbm8gIT0gLTEpCisJCXsKKwkJCWNsb3NlKHN0YXRlLT5mZCk7CisJCQlzdGF0ZS0+ ZmQgPSAtMTsKKworCQkJcGdfZnJlZShzdGF0ZS0+Zm4pOworCQkJc3RhdGUtPmZuID0gTlVM TDsKKworCQkJc3RhdGUtPnNlZ25vID0gLTE7CisJCX0KKworCQkvKiBDcmVhdGUgdGhlIHNl Z21lbnQgKi8KKwkJc3RhdGUtPmZuID0gU2xydUZpbGVOYW1lKHN0YXRlLCBzZWdubyk7CisJ CWlmICgoc3RhdGUtPmZkID0gb3BlbihzdGF0ZS0+Zm4sIE9fUkRXUiB8IE9fQ1JFQVQgfCBP X0VYQ0wgfCBQR19CSU5BUlksCisJCQkJCQkJICBwZ19maWxlX2NyZWF0ZV9tb2RlKSkgPCAw KQorCQl7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjogJW0i LCBzdGF0ZS0+Zm4pOworCQl9CisKKwkJc3RhdGUtPnNlZ25vID0gc2Vnbm87CisKKwkJaWYg KG9mZnNldCA+IDApCisJCXsKKwkJCWlmIChwZ19wd3JpdGVfemVyb3Moc3RhdGUtPmZkLCBv ZmZzZXQsIDApIDwgMCkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIGZpbGUgXCIl c1wiOiAlbSIsIHN0YXRlLT5mbik7CisJCX0KKwl9CisKKwlzdGF0ZS0+cGFnZW5vID0gcGFn ZW5vOworCisJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKK30KKworc3RhdGljIHZvaWQKK1Ns cnVGbHVzaChTbHJ1U2VnU3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBpb3ZlYyBpb3ZlYyA9 IHsKKwkJLmlvdl9iYXNlID0gJnN0YXRlLT5idWYsCisJCS5pb3ZfbGVuID0gQkxDS1NaLAor CX07CisJb2ZmX3QJCW9mZnNldDsKKworCWlmIChzdGF0ZS0+c2Vnbm8gPT0gLTEpCisJCXJl dHVybjsKKworCW9mZnNldCA9IChzdGF0ZS0+cGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VH TUVOVCkgKiBCTENLU1o7CisKKwlpZiAocGdfcHdyaXRldl93aXRoX3JldHJ5KHN0YXRlLT5m ZCwgJmlvdmVjLCAxLCBvZmZzZXQpIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0 ZSBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworfQorCisvKgorICogRnJlZXMgdGhl IG1hbGxvY2VkIHdyaXRlci4KKyAqLwordm9pZAorRnJlZVNscnVXcml0ZShTbHJ1U2VnU3Rh dGUgKnN0YXRlKQoreworCUFzc2VydChzdGF0ZS0+d3JpdGluZyk7CisKKwlTbHJ1Rmx1c2go c3RhdGUpOworCisJaWYgKHN0YXRlLT5mZCAhPSAtMSkKKwkJY2xvc2Uoc3RhdGUtPmZkKTsK KwlwZ19mcmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9z bHJ1X2lvLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YzgwYTY3OWI0ZAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmgKQEAgLTAsMCArMSw1MiBAQAorLyoK KyAqIHNscnVfaW8uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lv LmgKKyAqLworCisjaWZuZGVmIFNMUlVfSU9fSAorI2RlZmluZSBTTFJVX0lPX0gKKworLyoK KyAqIFN0YXRlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcgYW4gU0xSVSwgd2l0aCBhIG9uZSBw YWdlIGJ1ZmZlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2xydVNlZ1N0YXRlCit7CisJYm9v bAkJd3JpdGluZzsKKwlib29sCQlsb25nX3NlZ21lbnRfbmFtZXM7CisKKwljaGFyCSAgICpk aXI7CisJY2hhcgkgICAqZm47CisJaW50CQkJZmQ7CisJaW50NjQJCXNlZ25vOworCXVpbnQ2 NAkJcGFnZW5vOworCisJUEdBbGlnbmVkQmxvY2sgYnVmOworfSBTbHJ1U2VnU3RhdGU7CisK K2V4dGVybiBTbHJ1U2VnU3RhdGUgKkFsbG9jU2xydVJlYWQoY29uc3QgY2hhciAqZGlyLCBi b29sIGxvbmdfc2VnbWVudF9uYW1lcyk7CitleHRlcm4gY2hhciAqU2xydVJlYWRTd2l0Y2hQ YWdlU2xvdyhTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKTsKK2V4dGVybiB2 b2lkIEZyZWVTbHJ1UmVhZChTbHJ1U2VnU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIGlubGlu ZSBjaGFyICoKK1NscnVSZWFkU3dpdGNoUGFnZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50 NjQgcGFnZW5vKQoreworCWlmIChzdGF0ZS0+c2Vnbm8gIT0gLTEgJiYgcGFnZW5vID09IHN0 YXRlLT5wYWdlbm8pCisJCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7CisJcmV0dXJuIFNscnVS ZWFkU3dpdGNoUGFnZVNsb3coc3RhdGUsIHBhZ2Vubyk7Cit9CisKK2V4dGVybiBTbHJ1U2Vn U3RhdGUgKkFsbG9jU2xydVdyaXRlKGNvbnN0IGNoYXIgKmRpciwgYm9vbCBsb25nX3NlZ21l bnRfbmFtZXMpOworZXh0ZXJuIGNoYXIgKlNscnVXcml0ZVN3aXRjaFBhZ2VTbG93KFNscnVT ZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgRnJlZVNscnVX cml0ZShTbHJ1U2VnU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIGlubGluZSBjaGFyICoKK1Ns cnVXcml0ZVN3aXRjaFBhZ2UoU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykK K3sKKwlpZiAoc3RhdGUtPnNlZ25vICE9IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5v KQorCQlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOworCXJldHVybiBTbHJ1V3JpdGVTd2l0Y2hQ YWdlU2xvdyhzdGF0ZSwgcGFnZW5vKTsKK30KKworI2VuZGlmCQkJCQkJCS8qIFNMUlVfSU9f SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRpeGFjdF9j b252ZXJzaW9uLnBsIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRpeGFjdF9jb252 ZXJzaW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mODRi ZDU2NjhiZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS90LzAwN19t dWx0aXhhY3RfY29udmVyc2lvbi5wbApAQCAtMCwwICsxLDMzOSBAQAorIyBDb3B5cmlnaHQg KGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVmVy c2lvbiAxOSBleHBhbmRlZCBNdWx0aVhhY3RPZmZzZXQgZnJvbSAzMiB0byA2NCBiaXRzLiBV cGdyYWRpbmcKKyMgYWNyb3NzIHRoYXQgcmVxdWlyZXMgcmV3cml0aW5nIHRoZSBTTFJVIGZp bGVzIHRvIHRoZSBuZXcgZm9ybWF0LgorIyBUaGlzIGZpbGUgY29udGFpbnMgdGVzdHMgZm9y IHRoZSBjb252ZXJzaW9uLgorIworIyBUbyBydW4sIHNldCAnb2xkaW5zdGFsbCcgRU5WIHZh cmlhYmxlIHRvIHBvaW50IHRvIGEgcHJlLXYxOQorIyBpbnN0YWxsYXRpb24uIElmIGl0J3Mg bm90IHNldCwgb3IgaWYgaXQgcG9pbnRzIHRvIGEgdjE5IG9yIGFib3ZlCisjIGluc3RhbGxh dGlvbiwgdGhpcyBzdGlsbCBwZXJmb3JtcyBhIHZlcnkgYmFzaWMgdGVzdCwgdXBncmFkaW5n IGEKKyMgY2x1c3RlciB3aXRoIHNvbWUgbXVsdGl4YWN0cy4gSXQncyBub3QgdmVyeSBpbnRl cmVzdGluZywgaG93ZXZlciwKKyMgYmVjYXVzZSB0aGVyZSdzIG5vIGNvbnZlcnNpb24gaW52 b2x2ZWQgaW4gdGhhdCBjYXNlLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgTWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9y ZTsKKworIyBUZW1wIGRpciBmb3IgYSBkdW1wcy4KK215ICR0ZW1wZGlyID0gUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM6OnRlbXBkaXI7CisKKyMgQSB3b3JrbG9hZCB0aGF0IGNvbnN1bWVz IG11bHRpeGlkcy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0bworIyBnZW5lcmF0ZSBzb21l IG11bHRpeGlkcyBpbiB0aGUgb2xkIGNsdXN0ZXIsIHNvIHRoYXQgd2UgY2FuIHRlc3QKKyMg dXBncmFkaW5nIHRoZW0uIFRoZSB3b3JrbG9hZCBpcyBhIG1peCBvZiBLRVkgU0hBUkUgbG9j a2luZyBxdWVyaWVzCisjIGFuZCBVUERBVEVzLCBhbmQgY29tbWl0cyBhbmQgYWJvcnRzLCB0 byBnZW5lcmF0ZSBhIG1peCBvZiBtdWx0aXhpZHMKKyMgd2l0aCBkaWZmZXJlbnQgc3RhdHVz ZXMuIEl0IGNvbnN1bWVzIGFyb3VuZCAzMDAwIG11bHRpeGlkcyB3aXRoCisjIDMwMDAwIG1l bWJlcnMuIFRoYXQncyBlbm91Z2ggdG8gc3BhbiBtb3JlIHRoYW4gb25lIG11bHRpeGlkcwor IyAnb2Zmc2V0cycgcGFnZSwgYW5kIG1vcmUgdGhhbiBvbmUgJ21lbWJlcnMnIHNlZ21lbnQu CisjCisjIFRoZSB3b3JrbG9hZCBsZWF2ZXMgYmVoaW5kIGEgdGFibGUgY2FsbGVkICdteG9m ZnRlc3QnIGNvbnRhaW5pbmcgYQorIyBzbWFsbCBudW1iZXIgb2Ygcm93cyByZWZlcmVuY2lu ZyBzb21lIG9mIHRoZSBnZW5lcmF0ZWQgbXVsdGl4aWRzLgorIworIyBCZWNhdXNlIHRoaXMg ZnVuY3Rpb24gaXMgdXNlZCB0byBnZW5lcmF0ZSB0ZXN0IGRhdGEgb24gdGhlIG9sZAorIyBp bnN0YWxsYXRpb24sIGl0IG5lZWRzIHRvIHdvcmsgd2l0aCBvbGRlciBQb3N0Z3JlU1FMIHNl cnZlcgorIyB2ZXJzaW9ucy4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjbHVz dGVyIHRvIGNvbm5lY3QgdG8sIHRoZSBzZWNvbmQgYXJndW1lbnQKKyMgaXMgYSBjbHVzdGVy IHVzaW5nIHRoZSBuZXcgdmVyc2lvbi4gV2UgbmVlZCB0aGUgJ3BzcWwnIGJpbmFyeSBmcm9t CisjIHRoZSBuZXcgdmVyc2lvbiwgdGhlIG5ldyBjbHVzdGVyIGlzIG90aGVyd2lzZSB1bnVz ZWQuIChXZSBuZWVkIHRvCisjIHVzZSB0aGUgbmV3ICdwc3FsJyBiZWNhdXNlIHNvbWUgb2Yg dGhlIG1vcmUgYWR2YW5jZWQgYmFja2dyb3VuZCBwc3FsCisjIHBlcmwgbW9kdWxlIGZlYXR1 cmVzIGRlcGVuZCBvbiBhIGZhaXJseSByZWNlbnQgcHNxbCB2ZXJzaW9uLikKK3N1YiBteGFj dF93b3JrbG9hZAoreworCW15ICRub2RlID0gc2hpZnQ7ICAgICAgICMgQ2x1c3RlciB0byBj b25uZWN0IHRvCisJbXkgJGJpbm5vZGUgPSBzaGlmdDsgICAgIyBVc2UgdGhlIHBzcWwgYmlu YXJ5IGZyb20gdGhpcyBjbHVzdGVyCisKKwlteSAkY29ubnN0ciA9ICRub2RlLT5jb25uc3Ry KCdwb3N0Z3JlcycpOworCisJJG5vZGUtPnN0YXJ0OworCSRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXFbCisJCUNSRUFURSBUQUJMRSBteG9mZnRlc3QgKGlkIElOVCBQUklNQVJZ IEtFWSwgbl91cGRhdGVkIElOVCkKKwkJICBXSVRIIChBVVRPVkFDVVVNX0VOQUJMRUQ9RkFM U0UpOworCQlJTlNFUlQgSU5UTyBteG9mZnRlc3QgU0VMRUNUIEcsIDAgRlJPTSBHRU5FUkFU RV9TRVJJRVMoMSwgNTApIEc7CisJXSk7CisKKwlteSAkbmNsaWVudHMgPSAyMDsKKwlteSAk dXBkYXRlX2V2ZXJ5ID0gMTM7CisJbXkgJGFib3J0X2V2ZXJ5ID0gMTE7CisJbXkgQGNvbm5l Y3Rpb25zID0gKCk7CisKKwkjIFNpbGVuY2UgdGhlIGxvZ2dpbmcgb2YgdGhlIHN0YXRlbWVu dHMgd2UgcnVuIHRvIGF2b2lkCisJIyB1bm5lY2Vzc2FyaWx5IGJsb2F0aW5nIHRoZSB0ZXN0 IGxvZ3MuIFRoaXMgcnVucyBiZWZvcmUgdGhlCisJIyB1cGdyYWRlIHdlJ3JlIHRlc3Rpbmcs IHNvIHRoZSBkZXRhaWxzIHNob3VsZCBub3QgYmUgdmVyeQorCSMgaW50ZXJlc3RpbmcgZm9y IGRlYnVnZ2luZy4gQnV0IGlmIG5lZWRlZCwgeW91IGNhbiBtYWtlIGl0IG1vcmUKKwkjIHZl cmJvc2UgYnkgc2V0dGluZyB0aGlzLgorCW15ICR2ZXJib3NlID0gMDsKKworCSMgT3BlbiBt dWx0aXBsZSBjb25uZWN0aW9ucyB0byB0aGUgZGF0YWJhc2UuIFN0YXJ0IGEgdHJhbnNhY3Rp b24KKwkjIGluIGVhY2ggY29ubmVjdGlvbi4KKwlmb3IgKDAgLi4gJG5jbGllbnRzKQorCXsK KwkJIyBVc2UgdGhlIHBzcWwgYmluYXJ5IGZyb20gdGhlIG5ldyBpbnN0YWxsYXRpb24uIFRo ZQorCQkjIEJhY2tncm91bmRQc3FsIGZ1bmN0aW9uYWxpdHkgZG9lc24ndCB3b3JrIHdpdGgg b2xkZXIgcHNxbAorCQkjIHZlcnNpb25zLgorCQlteSAkY29ubiA9ICRiaW5ub2RlLT5iYWNr Z3JvdW5kX3BzcWwoJycsCisJCQljb25uc3RyID0+ICRub2RlLT5jb25uc3RyKCdwb3N0Z3Jl cycpKTsKKworCQkkY29ubi0+cXVlcnlfc2FmZSgiU0VUIGxvZ19zdGF0ZW1lbnQ9bm9uZSIs IHZlcmJvc2UgPT4gJHZlcmJvc2UpIHVubGVzcyAkdmVyYm9zZTsKKwkJJGNvbm4tPnF1ZXJ5 X3NhZmUoIlNFVCBlbmFibGVfc2Vxc2Nhbj1vZmYiLCB2ZXJib3NlID0+ICR2ZXJib3NlKTsK KwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIiwgdmVyYm9zZSA9PiAkdmVyYm9zZSk7CisK KwkJcHVzaChAY29ubmVjdGlvbnMsICRjb25uKTsKKwl9CisKKwkjIFJ1biBxdWVyaWVzIHVz aW5nIGN5Y2xpbmcgdGhyb3VnaCB0aGUgY29ubmVjdGlvbnMgaW4gYQorCSMgcm91bmQtcm9i aW4gZmFzaGlvbi4gV2Uga2VlcCBhIHRyYW5zYWN0aW9uIG9wZW4gaW4gZWFjaAorCSMgY29u bmVjdGlvbiBhdCBhbGwgdGltZXMsIGFuZCBsb2NrL3VwZGF0ZSB0aGUgcm93cy4gV2l0aCAx MAorCSMgY29ubmVjdGlvbnMsIGVhY2ggU0VMRUNUIEZPUiBLRVkgU0hBUkUgcXVlcnkgZ2Vu ZXJhdGVzIGEgbmV3CisJIyBtdWx0aXhpZCwgY29udGFpbmluZyB0aGUgMTAgWElEcyBvZiBh bGwgdGhlIHRyYW5zYWN0aW9ucyBydW5uaW5nCisJIyBhdCB0aGUgdGltZS4KKwlmb3IgKG15 ICRpID0gMDsgJGkgPCAzMDAwOyAkaSsrKQorCXsKKwkJbXkgJGNvbm4gPSAkY29ubmVjdGlv bnNbICRpICUgJG5jbGllbnRzIF07CisKKwkJbXkgJHNxbDsKKwkJaWYgKCRpICUgJGFib3J0 X2V2ZXJ5ID09IDApCisJCXsKKwkJCSRzcWwgPSAiQUJPUlQ7ICI7CisJCX0KKwkJZWxzZQor CQl7CisJCQkkc3FsID0gIkNPTU1JVDsgIjsKKwkJfQorCQkkc3FsIC49ICJCRUdJTjsgIjsK KworCQlpZiAoJGkgJSAkdXBkYXRlX2V2ZXJ5ID09IDApCisJCXsKKwkJCSRzcWwgLj0gcXFb CisJCQkgIFVQREFURSBteG9mZnRlc3QgU0VUIG5fdXBkYXRlZCA9IG5fdXBkYXRlZCArIDEg V0hFUkUgaWQgPSAke2l9ICUgNTA7CisJCQldOworCQl9CisJCWVsc2UKKwkJeworCQkJbXkg JHRocmVzaG9sZCA9IGludCgkaSAvIDMwMDAgKiA1MCk7CisJCQkkc3FsIC49IHFxWworCQkJ ICBzZWxlY3QgY291bnQoKikgZnJvbSAoCisJCQkJU0VMRUNUICogRlJPTSBteG9mZnRlc3Qg V0hFUkUgaWQgPj0gJHRocmVzaG9sZCBGT1IgS0VZIFNIQVJFCisJCQkgICkgYXMgeAorCQkJ XTsKKwkJfQorCQkkY29ubi0+cXVlcnlfc2FmZSgkc3FsLCB2ZXJib3NlID0+ICR2ZXJib3Nl KTsKKwl9CisKKwlmb3IgbXkgJGNvbm4gKEBjb25uZWN0aW9ucykKKwl7CisJCSRjb25uLT5x dWl0KCk7CisJfQorCisJJG5vZGUtPnN0b3A7CisJcmV0dXJuOworfQorCisjIFJldHVybiBj b250ZW50cyBvZiB0aGUgJ214b2ZmdGVzdCcgdGFibGUsIGNyZWF0ZWQgYnkgbXhhY3Rfd29y a2xvYWQKK3N1YiBnZXRfdGVzdF90YWJsZV9jb250ZW50cworeworCW15ICgkbm9kZSwgJGZp bGVfcHJlZml4KSA9IEBfOworCisJbXkgJGNvbnRlbnRzID0gJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCQkiU0VMRUNUIGN0aWQsIHhtaW4sIHhtYXgsICogRlJPTSBteG9mZnRl c3QiKTsKKworCW15ICRkdW1wZmlsZSA9ICR0ZW1wZGlyIC4gJy8nIC4gJGZpbGVfcHJlZml4 IC4gJy5zcWwnOworCW9wZW4obXkgJGRoLCAnPicsICRkdW1wZmlsZSkKKwkgIHx8IGRpZSAi Y291bGQgbm90IG9wZW4gJGR1bXBmaWxlIGZvciB3cml0aW5nICQhIjsKKwlwcmludCAkZGgg JGNvbnRlbnRzOworCWNsb3NlKCRkaCk7CisKKwlyZXR1cm4gJGR1bXBmaWxlOworfQorCisj IFJlYWQgTmV4dE11bHRpT2Zmc2V0IGZyb20gdGhlIGNvbnRyb2wgZmlsZQorIworIyBOb3Rl OiBUaGlzIGlzIHVzZWQgb24gYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3IGluc3RhbGxhdGlv biwgc28gdGhlCisjIGNvbW1hbmQgYXJndW1lbnRzIGFuZCB0aGUgb3V0cHV0IHBhcnNpbmcg dXNlZCBoZXJlIG11c3Qgd29yayB3aXRoCisjIGFsbCBQb3N0Z3JlU1FMIHZlcnNpb25zIHN1 cHBvcnRlZCBieSB0aGUgdGVzdC4KK3N1YiByZWFkX25leHRfbXhvZmYKK3sKKwlteSAkbm9k ZSA9IHNoaWZ0OworCisJbXkgJHBnX2NvbnRyb2xkYXRhX3BhdGggPSAkbm9kZS0+aW5zdGFs bGVkX2NvbW1hbmQoJ3BnX2NvbnRyb2xkYXRhJyk7CisJbXkgKCRzdGRvdXQsICRzdGRlcnIp ID0KKwkgIHJ1bl9jb21tYW5kKFsgJHBnX2NvbnRyb2xkYXRhX3BhdGgsICRub2RlLT5kYXRh X2RpciBdKTsKKwkkc3Rkb3V0ID1+IC9eTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlP ZmZzZXQ6XHMqKC4qKSQvbQorCSAgb3IgZGllICJjb3VsZCBub3QgcmVhZCBOZXh0TXVsdGlP ZmZzZXQgZnJvbSBwZ19jb250cm9sZGF0YSI7CisJcmV0dXJuICQxOworfQorCisjIFJlc2V0 IGEgY2x1c3RlcidzIG9sZGVzdCBtdWx0aXhhY3Qtb2Zmc2V0IHRvIGdpdmVuIG9mZnNldC4K KyMKKyMgTm90ZTogVGhpcyBpcyB1c2VkIG9uIGJvdGggdGhlIG9sZCBhbmQgdGhlIG5ldyBp bnN0YWxsYXRpb24sIHNvIHRoZQorIyBjb21tYW5kIGFyZ3VtZW50cyBhbmQgdGhlIG91dHB1 dCBwYXJzaW5nIHVzZWQgaGVyZSBtdXN0IHdvcmsgd2l0aAorIyBhbGwgUG9zdGdyZVNRTCB2 ZXJzaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIHRlc3QuCitzdWIgcmVzZXRfbXhvZmZfcHJlX3Yx OQoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgJG9mZnNldCA9IHNoaWZ0OworCisJbXkg JHBnX3Jlc2V0d2FsX3BhdGggPSAkbm9kZS0+aW5zdGFsbGVkX2NvbW1hbmQoJ3BnX3Jlc2V0 d2FsJyk7CisJIyBHZXQgYmxvY2sgc2l6ZQorCW15ICgkb3V0LCAkZXJyKSA9CisJICBydW5f Y29tbWFuZChbICRwZ19yZXNldHdhbF9wYXRoLCAnLS1kcnktcnVuJywgJG5vZGUtPmRhdGFf ZGlyIF0pOworCSRvdXQgPX4gL15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykkL20gb3Ig ZGllOworCW15ICRibGNrc3ogPSAkMTsKKwkjIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgaXMg YWx3YXlzIDMyIG9uIHByZS0xOSB2ZXJzaW9uCisJbXkgJHNscnVfcGFnZXNfcGVyX3NlZ21l bnQgPSAzMjsKKworCSMgVmVyaWZ5IHRoYXQgbm8gbXVsdGl4aWRzIGFyZSBjdXJyZW50bHkg aW4gdXNlLiBSZXNldHRpbmcgd291bGQKKwkjIGRlc3Ryb3kgdGhlbS4gKEEgZnJlc2hseSBp bml0aWFsaXplZCBjbHVzdGVyIGhhcyBubyBtdWx0aXhpZHMuKQorCSRvdXQgPX4gL15MYXRl c3QgY2hlY2twb2ludCdzIE5leHRNdWx0aVhhY3RJZDogKihcZCspJC9tIG9yIGRpZTsKKwlt eSAkbmV4dF9teGlkID0gJDE7CisJJG91dCA9fiAvXkxhdGVzdCBjaGVja3BvaW50J3Mgb2xk ZXN0TXVsdGlYaWQ6ICooXGQrKSQvbSBvciBkaWU7CisJbXkgJG9sZGVzdF9teGlkID0gJDE7 CisJZGllICJjbHVzdGVyIGhhcyBzb21lIG11bHRpeGlkcyBpbiB1c2UiIHVubGVzcyAkbmV4 dF9teGlkID09ICRvbGRlc3RfbXhpZDsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNldCB1c2lu ZyBwZ19yZXNldHdhbAorCW15IEBjbWQgPSAoCisJCSRwZ19yZXNldHdhbF9wYXRoLAorCQkn LS1wZ2RhdGEnID0+ICRub2RlLT5kYXRhX2RpciwKKwkJJy0tbXVsdGl4YWN0LW9mZnNldCcg PT4gJG9mZnNldCk7CisJY29tbWFuZF9vayhcQGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0 LW9mZnNldCcpOworCisJIyBwZ19yZXNldHdhbCBqdXN0IHVwZGF0ZXMgdGhlIGNvbnRyb2wg ZmlsZS4gVGhlIGNsdXN0ZXIgd2lsbAorCSMgcmVmdXNlIHRvIHN0YXJ0IHVwLCBpZiB0aGUg U0xSVSBzZWdtZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlCisJIyBvZmZzZXQgZG9lcyBub3Qg ZXhpc3QuIENyZWF0ZSBhIGR1bW15IHNlZ21lbnQgdGhhdCBjb3ZlcnMgdGhlCisJIyBnaXZl biBvZmZzZXQsIGZpbGxlZCB3aXRoIHplcm9zLiBCdXQgZmlyc3QgcmVtb3ZlIGFueSBvbGQK KwkjIHNlZ21lbnRzLgorCXVubGluayBnbG9iICRub2RlLT5kYXRhX2RpciAuICIvcGdfbXVs dGl4YWN0L21lbWJlcnMvKiI7CisKKwlteSAkbXVsdCA9IDMyICogaW50KCRibGNrc3ogLyAy MCkgKiA0OworCW15ICRzZWduYW1lID0gc3ByaW50ZiAiJTA0WCIsICRvZmZzZXQgLyAkbXVs dDsKKworCW15ICRwYXRoID0gJG5vZGUtPmRhdGFfZGlyIC4gIi9wZ19tdWx0aXhhY3QvbWVt YmVycy8iIC4gJHNlZ25hbWU7CisKKwlteSAkbnVsbF9ibG9jayA9ICJceDAwIiB4ICRibGNr c3o7CisJb3BlbihteSAkZGgsICc+JywgJHBhdGgpCisJICB8fCBkaWUgImNvdWxkIG5vdCBv cGVuICRwYXRoIGZvciB3cml0aW5nICQhIjsKKwlmb3IgKDAgLi4gJHNscnVfcGFnZXNfcGVy X3NlZ21lbnQpCisJeworCQlwcmludCAkZGggJG51bGxfYmxvY2s7CisJfQorCWNsb3NlKCRk aCk7Cit9CisKKyMgTWFpbiB0ZXN0IHdvcmtob3JzZSByb3V0aW5lLgorIyBEdW1wIGRhdGEg b24gb2xkIHZlcnNpb24sIHJ1biBwZ191cGdyYWRlLCBjb21wYXJlIGRhdGEgYWZ0ZXIgdXBn cmFkZS4KK3N1YiB1cGdyYWRlX2FuZF9jb21wYXJlCit7CisJbXkgJHRhZyA9IHNoaWZ0Owor CW15ICRvbGRub2RlID0gc2hpZnQ7CisJbXkgJG5ld25vZGUgPSBzaGlmdDsKKworCWNvbW1h bmRfb2soCisJCVsKKwkJCSdwZ191cGdyYWRlJywgJy0tbm8tc3luYycsCisJCQknLS1vbGQt ZGF0YWRpcicgPT4gJG9sZG5vZGUtPmRhdGFfZGlyLAorCQkJJy0tbmV3LWRhdGFkaXInID0+ ICRuZXdub2RlLT5kYXRhX2RpciwKKwkJCSctLW9sZC1iaW5kaXInID0+ICRvbGRub2RlLT5j b25maWdfZGF0YSgnLS1iaW5kaXInKSwKKwkJCSctLW5ldy1iaW5kaXInID0+ICRuZXdub2Rl LT5jb25maWdfZGF0YSgnLS1iaW5kaXInKSwKKwkJCSctLXNvY2tldGRpcicgPT4gJG5ld25v ZGUtPmhvc3QsCisJCQknLS1vbGQtcG9ydCcgPT4gJG9sZG5vZGUtPnBvcnQsCisJCQknLS1u ZXctcG9ydCcgPT4gJG5ld25vZGUtPnBvcnQsCisJCV0sCisJCSdydW4gb2YgcGdfdXBncmFk ZSBmb3IgbmV3IGluc3RhbmNlJyk7CisKKwkjIE5vdGU6IHdlIGRvIHRoaXMgKmFmdGVyKiBy dW5uaW5nIHBnX3VwZ3JhZGUsIHRvIGVuc3VyZSB0aGF0IHdlCisJIyBkb24ndCBzZXQgYWxs IHRoZSBoaW50IGJpdHMgYmVmb3JlIHVwZ3JhZGUgYnkgZG9pbmcgdGhlIFNFTEVDVAorCSMg b24gdGhlIHRhYmxlLgorCSRvbGRub2RlLT5zdGFydDsKKwlteSAkb2xkX2R1bXAgPSBnZXRf dGVzdF90YWJsZV9jb250ZW50cygkb2xkbm9kZSwgIm9sZG5vZGVfJHt0YWd9X2R1bXAiKTsK Kwkkb2xkbm9kZS0+c3RvcDsKKworCSRuZXdub2RlLT5zdGFydDsKKwlteSAkbmV3X2R1bXAg PSBnZXRfdGVzdF90YWJsZV9jb250ZW50cygkbmV3bm9kZSwgIm5ld25vZGVfJHt0YWd9X2R1 bXAiKTsKKwkkbmV3bm9kZS0+c3RvcDsKKworCWNvbXBhcmVfZmlsZXMoJG9sZF9kdW1wLCAk bmV3X2R1bXAsCisJCSd0ZXN0IHRhYmxlIGNvbnRlbnRzIGZyb20gb3JpZ2luYWwgYW5kIHVw Z3JhZGVkIGRhdGFiYXNlcyBtYXRjaCcpOworfQorCitteSAkb2xkX3ZlcnNpb247CisKKyMg QmFzaWMgc2NlbmFyaW86IENyZWF0ZSBhIGNsdXN0ZXIgdXNpbmcgb2xkIGluc3RhbGxhdGlv biwgcnVuCisjIG11bHRpeGlkLWNyZWF0aW5nIHdvcmtsb2FkIG9uIGl0LCB0aGVuIHVwZ3Jh ZGUuCisjCisjIFRoaXMgd29ya3MgZXZlbiBldmVuIGlmIHRoZSBvbGQgYW5kIG5ldyB2ZXJz aW9uIGlzIHRoZSBzYW1lLAorIyBhbHRob3VnaCBpdCdzIG5vdCB2ZXJ5IGludGVyZXN0aW5n IGFzIHRoZSBjb252ZXJzaW9uIHJvdXRpbmVzIG9ubHkKKyMgcnVuIHdoZW4gdXBncmFkaW5n IGZyb20gYSBwcmUtdjE5IGNsdXN0ZXIuCit7CisJbXkgJHRhZyA9ICdiYXNpYyc7CisJbXkg JG9sZCA9CisJICBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIiR7dGFnfV9vbGRu b2RlIiwKKwkJaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOworCW15ICRuZXcg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIiR7dGFnfV9uZXdub2RlIik7CisK Kwkkb2xkLT5pbml0KGV4dHJhID0+IFsnLWsnXSk7CisKKwkkb2xkX3ZlcnNpb24gPSAkb2xk LT5wZ192ZXJzaW9uOworCW5vdGUgIm9sZCBpbnN0YWxsYXRpb24gaXMgdmVyc2lvbiAkb2xk X3ZlcnNpb25cbiI7CisKKwkjIFJ1biB0aGUgd29ya2xvYWQKKwlteSAkc3RhcnRfbXhvZmYg PSByZWFkX25leHRfbXhvZmYoJG9sZCk7CisJbXhhY3Rfd29ya2xvYWQoJG9sZCwgJG5ldyk7 CisJbXkgJGZpbmlzaF9teG9mZiA9IHJlYWRfbmV4dF9teG9mZigkb2xkKTsKKworCSRuZXct PmluaXQ7CisJdXBncmFkZV9hbmRfY29tcGFyZSgkdGFnLCAkb2xkLCAkbmV3KTsKKworCW15 ICRuZXdfbmV4dF9teG9mZiA9IHJlYWRfbmV4dF9teG9mZigkbmV3KTsKKworCW5vdGUgIj4+ PiBjYXNlICMke3RhZ31cbiIKKwkgIC4gIiBvbGRub2RlIG14b2ZmIGZyb20gJHtzdGFydF9t eG9mZn0gdG8gJHtmaW5pc2hfbXhvZmZ9XG4iCisJICAuICIgbmV3bm9kZSBteG9mZiAke25l d19uZXh0X214b2ZmfVxuIjsKK30KKworIyBXcmFwYXJvdW5kIHNjZW5hcmlvOiBUaGlzIGlz IHRoZSBzYW1lIGFzIHRoZSBiYXNpYyBzY2VuYXJpbywgYnV0IHRoZQorIyBvbGQgY2x1c3Rl ciBnb2VzIHRocm91Z2ggbXhvZmZzZXQgd3JhcGFyb3VuZC4KKyMKKyMgVGhpcyByZXF1aXJl cyB0aGUgb2xkIGluc3RhbGxhdGlvbiB0byBiZSB2ZXJzaW9uIDE5IG9mIG9sZGVyLAorIyBi ZWNhdXNlIHRoZSBoYWNrcyB3ZSB1c2UgdG8gcmVzZXQgdGhlIG9sZCBjbHVzdGVyIHRvIGEg c3RhdGUganVzdAorIyBiZWZvcmUgdGhlIHdyYXBhcm91bmQgcmVseSBvbiB0aGUgcHJlLXYx OSBmaWxlIGZvcm1hdC4gSW4gdmVyc2lvbgorIyAxOSwgb2Zmc2V0cyBubyBsb25nZXIgd3Jh cCBhcm91bmQgYW55d2F5LgorU0tJUDoKK3sKKwlza2lwCisJICAic2tpcHBpbmcgbXhvZmZz ZXQgY29udmVyc2lvbiB0ZXN0cyBiZWNhdXNlIHVwZ3JhZGluZyBmcm9tIHRoZSBvbGQgdmVy c2lvbiBkb2VzIG5vdCByZXF1aXJlIGNvbnZlcnNpb24iCisJICBpZiAoJG9sZF92ZXJzaW9u ID49ICcxOWRldmVsJyk7CisKKwlteSAkdGFnID0gJ3dyYXBhcm91bmQnOworCW15ICRvbGQg PQorCSAgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCIke3RhZ31fb2xkbm9kZSIs CisJCWluc3RhbGxfcGF0aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKwlteSAkbmV3ID0gUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCIke3RhZ31fbmV3bm9kZSIpOworCisJJG9s ZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCisJIyBSZXNldCB0aGUgTmV4dE11bHRpT2Zm c2V0IHZhbHVlIGluIHRoZSAgb2xkIGNsdXN0ZXIgdG8ganVzdCBiZWZvcmUgMzItYml0IHdy YXBhcm91bmQuCisJcmVzZXRfbXhvZmZfcHJlX3YxOSgkb2xkLCAweEZGRkZFQzc3KTsKKwor CSMgUnVuIHRoZSB3b3JrbG9hZC4gVGhpcyBjcm9zc2VzIHRoZSB3cmFwYXJvdW5kLgorCW15 ICRzdGFydF9teG9mZiA9IHJlYWRfbmV4dF9teG9mZigkb2xkKTsKKwlteGFjdF93b3JrbG9h ZCgkb2xkLCAkbmV3KTsKKwlteSAkZmluaXNoX214b2ZmID0gcmVhZF9uZXh0X214b2ZmKCRv bGQpOworCisJIyBWZXJpZnkgdGhhdCB3cmFwYXJvdW5kIGhhcHBlbmVkLgorCWNtcF9vaygk ZmluaXNoX214b2ZmLCAnPCcsICRzdGFydF9teG9mZiwKKwkJIm14b2ZmIHdyYXBwZWQgYXJv dW5kIGluIG9sZCBjbHVzdGVyIik7CisKKwkkbmV3LT5pbml0OworCXVwZ3JhZGVfYW5kX2Nv bXBhcmUoJHRhZywgJG9sZCwgJG5ldyk7CisKKwlteSAkbmV3X25leHRfbXhvZmYgPSByZWFk X25leHRfbXhvZmYoJG5ldyk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iCisJICAu ICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2Zm fVxuIgorCSAgLiAiIG5ld25vZGUgbXhvZmYgJHtuZXdfbmV4dF9teG9mZn1cbiI7Cit9CisK K2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRp eGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCmluZGV4IDgyZTRiYjkw ZGQ1Li42NDMzZmUxNjM2NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRp eGFjdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaApAQCAtMjgsOCAr MjgsNiBAQAogCiAjZGVmaW5lIE11bHRpWGFjdElkSXNWYWxpZChtdWx0aSkgKChtdWx0aSkg IT0gSW52YWxpZE11bHRpWGFjdElkKQogCi0jZGVmaW5lIE1heE11bHRpWGFjdE9mZnNldAko KE11bHRpWGFjdE9mZnNldCkgMHhGRkZGRkZGRikKLQogLyoKICAqIFBvc3NpYmxlIG11bHRp eGFjdCBsb2NrIG1vZGVzICgic3RhdHVzIikuICBUaGUgZmlyc3QgZm91ciBtb2RlcyBhcmUg Zm9yCiAgKiB0dXBsZSBsb2NrcyAoRk9SIEtFWSBTSEFSRSwgRk9SIFNIQVJFLCBGT1IgTk8g S0VZIFVQREFURSwgRk9SIFVQREFURSk7IHRoZQpAQCAtMTExLDcgKzEwOSw3IEBAIGV4dGVy biBib29sIE11bHRpWGFjdElkSXNSdW5uaW5nKE11bHRpWGFjdElkIG11bHRpLCBib29sIGlz TG9ja09ubHkpOwogZXh0ZXJuIHZvaWQgTXVsdGlYYWN0SWRTZXRPbGRlc3RNZW1iZXIodm9p ZCk7CiBleHRlcm4gaW50CUdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0 aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAkJCQkJCQkJICBib29sIGZyb21fcGd1 cGdyYWRlLCBib29sIGlzTG9ja09ubHkpOwotZXh0ZXJuIGJvb2wgR2V0TXVsdGlYYWN0SW5m byh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywKK2V4dGVy biB2b2lkIEdldE11bHRpWGFjdEluZm8odWludDMyICptdWx0aXhhY3RzLCBNdWx0aVhhY3RP ZmZzZXQgKm1lbWJlcnMsCiAJCQkJCQkJIE11bHRpWGFjdElkICpvbGRlc3RNdWx0aVhhY3RJ ZCwKIAkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0ICpvbGRlc3RPZmZzZXQpOwogZXh0ZXJuIGJv b2wgTXVsdGlYYWN0SWRQcmVjZWRlcyhNdWx0aVhhY3RJZCBtdWx0aTEsIE11bHRpWGFjdElk IG11bHRpMik7CkBAIC0xMzEsOCArMTI5LDcgQEAgZXh0ZXJuIHZvaWQgQm9vdFN0cmFwTXVs dGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhcnR1cE11bHRpWGFjdCh2b2lkKTsKIGV4 dGVybiB2b2lkIFRyaW1NdWx0aVhhY3Qodm9pZCk7CiBleHRlcm4gdm9pZCBTZXRNdWx0aVhh Y3RJZExpbWl0KE11bHRpWGFjdElkIG9sZGVzdF9kYXRtaW5teGlkLAotCQkJCQkJCQlPaWQg b2xkZXN0X2RhdG9pZCwKLQkJCQkJCQkJYm9vbCBpc19zdGFydHVwKTsKKwkJCQkJCQkJT2lk IG9sZGVzdF9kYXRvaWQpOwogZXh0ZXJuIHZvaWQgTXVsdGlYYWN0R2V0Q2hlY2twdE11bHRp KGJvb2wgaXNfc2h1dGRvd24sCiAJCQkJCQkJCQkgTXVsdGlYYWN0SWQgKm5leHRNdWx0aSwK IAkJCQkJCQkJCSBNdWx0aVhhY3RPZmZzZXQgKm5leHRNdWx0aU9mZnNldCwKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaAppbmRleCA5YjU2ZGVhZWYzMS4uYzRk ZDFhYTA0NGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50 ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgK QEAgLTIxLDE3ICsyMSw5IEBACiAvKgogICogRGVmaW5lcyBmb3IgTXVsdGlYYWN0T2Zmc2V0 IHBhZ2Ugc2l6ZXMuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1NaIGFzIGlzCiAgKiB1c2Vk IGV2ZXJ5d2hlcmUgZWxzZSBpbiBQb3N0Z3Jlcy4KLSAqCi0gKiBOb3RlOiBiZWNhdXNlIE11 bHRpWGFjdE9mZnNldHMgYXJlIDMyIGJpdHMgYW5kIHdyYXAgYXJvdW5kIGF0IDB4RkZGRkZG RkYsCi0gKiBNdWx0aVhhY3QgcGFnZSBudW1iZXJpbmcgYWxzbyB3cmFwcyBhcm91bmQgYXQK LSAqIDB4RkZGRkZGRkYvTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UsIGFuZCBzZWdtZW50 IG51bWJlcmluZyBhdAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFH RS9TTFJVX1BBR0VTX1BFUl9TRUdNRU5ULiAgV2UgbmVlZAotICogdGFrZSBubyBleHBsaWNp dCBub3RpY2Ugb2YgdGhhdCBmYWN0IGluIHRoaXMgbW9kdWxlLCBleGNlcHQgd2hlbiBjb21w YXJpbmcKLSAqIHNlZ21lbnQgYW5kIHBhZ2UgbnVtYmVycyBpbiBUcnVuY2F0ZU11bHRpWGFj dCAoc2VlCi0gKiBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMpLgogICovCiAKLS8qIFdl IG5lZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0ICovCisvKiBXZSBuZWVkIDggYnl0ZXMgcGVy IG9mZnNldCAqLwogI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1Na IC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCiAKIHN0YXRpYyBpbmxpbmUgaW50NjQKQEAg LTgwLDE5ICs3Miw2IEBAIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KE11bHRpWGFjdElk IG11bHRpKQogI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCiAJKE1VTFRJ WEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVN QkVSR1JPVVApCiAKLS8qCi0gKiBCZWNhdXNlIHRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBh Z2UgaXMgbm90IGEgZGl2aXNvciBvZiB0aGUgbGFzdCBpdGVtCi0gKiBudW1iZXIgKG1lbWJl ciAweEZGRkZGRkZGKSwgdGhlIGxhc3Qgc2VnbWVudCBkb2VzIG5vdCB1c2UgdGhlIG1heGlt dW0gbnVtYmVyCi0gKiBvZiBwYWdlcywgYW5kIG1vcmVvdmVyIHRoZSBsYXN0IHVzZWQgcGFn ZSB0aGVyZWluIGRvZXMgbm90IHVzZSB0aGUgc2FtZQotICogbnVtYmVyIG9mIGl0ZW1zIGFz IHByZXZpb3VzIHBhZ2VzLiAgKEFub3RoZXIgd2F5IHRvIHNheSBpdCBpcyB0aGF0IHRoZQot ICogMHhGRkZGRkZGRiBtZW1iZXIgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhl IGxhc3QgcGFnZSwgc28gdGhlIHBhZ2UKLSAqIGhhcyBzb21lIGVtcHR5IHNwYWNlIGFmdGVy IHRoYXQgaXRlbS4pCi0gKgotICogVGhpcyBjb25zdGFudCBpcyB0aGUgbnVtYmVyIG9mIG1l bWJlcnMgaW4gdGhlIGxhc3QgcGFnZSBvZiB0aGUgbGFzdCBzZWdtZW50LgotICovCi0jZGVm aW5lIE1BWF9NRU1CRVJTX0lOX0xBU1RfTUVNQkVSU19QQUdFIFwKLQkJKCh1aW50MzIpICgo MHhGRkZGRkZGRiAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFKSArIDEpKQotCiAvKiBw YWdlIGluIHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICovCiBzdGF0aWMgaW5saW5l IGludDY0CiBNWE9mZnNldFRvTWVtYmVyUGFnZShNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYy5oIGIvc3JjL2luY2x1ZGUvYy5oCmluZGV4IGNj ZDJiNjU0ZDQ1Li42MmNiZjdhMmVlYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYy5oCisr KyBiL3NyYy9pbmNsdWRlL2MuaApAQCAtNjY5LDcgKzY2OSw3IEBAIHR5cGVkZWYgdWludDMy IFN1YlRyYW5zYWN0aW9uSWQ7CiAvKiBNdWx0aVhhY3RJZCBtdXN0IGJlIGVxdWl2YWxlbnQg dG8gVHJhbnNhY3Rpb25JZCwgdG8gZml0IGluIHRfeG1heCAqLwogdHlwZWRlZiBUcmFuc2Fj dGlvbklkIE11bHRpWGFjdElkOwogCi10eXBlZGVmIHVpbnQzMiBNdWx0aVhhY3RPZmZzZXQ7 Cit0eXBlZGVmIHVpbnQ2NCBNdWx0aVhhY3RPZmZzZXQ7CiAKIHR5cGVkZWYgdWludDMyIENv bW1hbmRJZDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdC8w MDJfbXVsdGl4YWN0X3dyYXBhcm91bmQucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xy dS90LzAwMl9tdWx0aXhhY3Rfd3JhcGFyb3VuZC5wbAppbmRleCAxNjkzMzNmYzU2NC4uMjcy ZDhlNmZiMDggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3QvMDAy X211bHRpeGFjdF93cmFwYXJvdW5kLnBsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9z bHJ1L3QvMDAyX211bHRpeGFjdF93cmFwYXJvdW5kLnBsCkBAIC0zNyw3ICszNyw3IEBAIG15 ICRzbHJ1X3BhZ2VzX3Blcl9zZWdtZW50ID0gJDE7CiAKICMgaW5pdGlhbGl6ZSB0aGUgJ29m ZnNldHMnIFNMUlUgZmlsZSBjb250YWluaW5nIHRoZSBuZXcgbmV4dCBtdWx0aXhpZAogIyB3 aXRoIHplcm9zCi1teSAkbXVsdGl4YWN0X29mZnNldHNfcGVyX3BhZ2UgPSAkYmxja3N6IC8g NDsgICAjIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpID09IDQKK215ICRtdWx0aXhhY3Rfb2Zm c2V0c19wZXJfcGFnZSA9ICRibGNrc3ogLyA4OyAgICMgc2l6ZW9mKE11bHRpWGFjdE9mZnNl dCkgPT0gOAogbXkgJHNlZ25vID0KICAgaW50KDB4RkZGRkZGRjggLyAkbXVsdGl4YWN0X29m ZnNldHNfcGVyX3BhZ2UgLyAkc2xydV9wYWdlc19wZXJfc2VnbWVudCk7CiBteSAkc2xydV9m aWxlID0gc3ByaW50ZignJXMvcGdfbXVsdGl4YWN0L29mZnNldHMvJTA0WCcsICRub2RlX3Bn ZGF0YSwgJHNlZ25vKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9U ZXN0L0JhY2tncm91bmRQc3FsLnBtIGIvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3Qv QmFja2dyb3VuZFBzcWwucG0KaW5kZXggNjBiYmQ1ZGQ0NDUuLjk4MjVhYWE5YmI0IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9CYWNrZ3JvdW5kUHNxbC5w bQorKysgYi9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9CYWNrZ3JvdW5kUHNxbC5w bQpAQCAtMjMwLDE4ICsyMzAsMjMgQEAgRXhlY3V0ZXMgYSBxdWVyeSBpbiB0aGUgY3VycmVu dCBzZXNzaW9uIGFuZCByZXR1cm5zIHRoZSBvdXRwdXQgaW4gc2NhbGFyCiBjb250ZXh0IGFu ZCAob3V0cHV0LCBlcnJvcikgaW4gbGlzdCBjb250ZXh0IHdoZXJlIGVycm9yIGlzIDEgaW4g Y2FzZSB0aGVyZQogd2FzIG91dHB1dCBnZW5lcmF0ZWQgb24gc3RkZXJyIHdoZW4gZXhlY3V0 aW5nIHRoZSBxdWVyeS4KIAorQnkgZGVmYXVsdCwgdGhlIHF1ZXJ5IGFuZCBpdHMgcmVzdWx0 cyBhcmUgcHJpbnRlZCB0byB0aGUgdGVzdCBvdXRwdXQuIFRoaXMKK2NhbiBiZSBkaXNhYmxl ZCBieSBwYXNzaW5nIHRoZSBrZXl3b3JkIHBhcmFtZXRlciB2ZXJib3NlID0+IGZhbHNlLgor CiA9Y3V0CiAKIHN1YiBxdWVyeQogewotCW15ICgkc2VsZiwgJHF1ZXJ5KSA9IEBfOworCW15 ICgkc2VsZiwgJHF1ZXJ5LCAlcGFyYW1zKSA9IEBfOwogCW15ICRyZXQ7CiAJbXkgJG91dHB1 dDsKIAlteSAkcXVlcnlfY250ID0gJHNlbGYtPntxdWVyeV9jbnR9Kys7CiAKKwkkcGFyYW1z e3ZlcmJvc2V9ID0gMSB1bmxlc3MgZGVmaW5lZCAkcGFyYW1ze3ZlcmJvc2V9OworCiAJbG9j YWwgJFRlc3Q6OkJ1aWxkZXI6OkxldmVsID0gJFRlc3Q6OkJ1aWxkZXI6OkxldmVsICsgMTsK IAotCW5vdGUgImlzc3VpbmcgcXVlcnkgJHF1ZXJ5X2NudCB2aWEgYmFja2dyb3VuZCBwc3Fs OiAkcXVlcnkiOworCW5vdGUgImlzc3VpbmcgcXVlcnkgJHF1ZXJ5X2NudCB2aWEgYmFja2dy b3VuZCBwc3FsOiAkcXVlcnkiIHVubGVzcyAhJHBhcmFtc3t2ZXJib3NlfTsKIAogCSRzZWxm LT57dGltZW91dH0tPnN0YXJ0KCkgaWYgKGRlZmluZWQoJHNlbGYtPntxdWVyeV90aW1lcl9y ZXN0YXJ0fSkpOwogCkBAIC0yODAsNyArMjg1LDcgQEAgc3ViIHF1ZXJ5CiAJICBleHBsYWlu IHsKIAkJc3Rkb3V0ID0+ICRzZWxmLT57c3Rkb3V0fSwKIAkJc3RkZXJyID0+ICRzZWxmLT57 c3RkZXJyfSwKLQkgIH07CisJICB9IHVubGVzcyAhJHBhcmFtc3t2ZXJib3NlfTsKIAogCSMg UmVtb3ZlIGJhbm5lciBmcm9tIHN0ZG91dCBhbmQgc3RkZXJyLCBvdXIgY2FsbGVyIGRvZXNu J3QgY2FyZS4gIFRoZQogCSMgZmlyc3QgbmV3bGluZSBpcyBvcHRpb25hbCwgYXMgdGhlcmUg d291bGQgbm90IGJlIG9uZSBpZiBjb25zdW1pbmcgYW4KQEAgLTMwOCw5ICszMTMsOSBAQCBR dWVyeSBmYWlsdXJlIGlzIGRldGVybWluZWQgYnkgaXQgcHJvZHVjaW5nIG91dHB1dCBvbiBz dGRlcnIuCiAKIHN1YiBxdWVyeV9zYWZlCiB7Ci0JbXkgKCRzZWxmLCAkcXVlcnkpID0gQF87 CisJbXkgKCRzZWxmLCAkcXVlcnksICVwYXJhbXMpID0gQF87CiAKLQlteSAkcmV0ID0gJHNl bGYtPnF1ZXJ5KCRxdWVyeSk7CisJbXkgJHJldCA9ICRzZWxmLT5xdWVyeSgkcXVlcnksICVw YXJhbXMpOwogCiAJaWYgKCRzZWxmLT57c3RkZXJyfSBuZSAiIikKIAl7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtIGIvc3JjL3Rlc3Qv cGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbQppbmRleCA3NDc1MjhjNGFmMS4uMjk1 OTg4YjhiODcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0Ns dXN0ZXIucG0KKysrIGIvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5w bQpAQCAtMTc5MywxMyArMTc5MywyMCBAQCBzdWIgX2dldF9lbnYKIAlyZXR1cm4gKCVpbnN0 X2Vudik7CiB9CiAKLSMgUHJpdmF0ZSByb3V0aW5lIHRvIGdldCBhbiBpbnN0YWxsYXRpb24g cGF0aCBxdWFsaWZpZWQgY29tbWFuZC4KLSMKLSMgSVBDOjpSdW4gbWFpbnRhaW5zIGEgY2Fj aGUsICVjbWRfY2FjaGUsIG1hcHBpbmcgY29tbWFuZHMgdG8gcGF0aHMuICBUZXN0cwotIyB3 aGljaCB1c2Ugbm9kZXMgc3Bhbm5pbmcgbW9yZSB0aGFuIG9uZSBwb3N0Z3JlcyBpbnN0YWxs YXRpb24gcGF0aCBuZWVkIHRvCi0jIGF2b2lkIGNvbmZ1c2luZyB3aGljaCBpbnN0YWxsYXRp b24ncyBiaW5hcmllcyBnZXQgcnVuLiAgU2V0dGluZyAkRU5We1BBVEh9IGlzCi0jIGluc3Vm ZmljaWVudCwgYXMgSVBDOjpSdW4gZG9lcyBub3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBwYXRo IGhhcyBjaGFuZ2VkIHNpbmNlCi0jIGNhY2hpbmcgYSBjb21tYW5kLgorPXBvZAorCis9aXRl bSAkbm9kZS0+aW5zdGFsbGVkX2NvbW1hbmQoY21kKQorCitHZXQgYW4gaW5zdGFsbGF0aW9u IHBhdGggcXVhbGlmaWVkIGNvbW1hbmQuCisKK0lQQzo6UnVuIG1haW50YWlucyBhIGNhY2hl LCAlY21kX2NhY2hlLCBtYXBwaW5nIGNvbW1hbmRzIHRvIHBhdGhzLiAgVGVzdHMKK3doaWNo IHVzZSBub2RlcyBzcGFubmluZyBtb3JlIHRoYW4gb25lIHBvc3RncmVzIGluc3RhbGxhdGlv biBwYXRoIG5lZWQgdG8KK2F2b2lkIGNvbmZ1c2luZyB3aGljaCBpbnN0YWxsYXRpb24ncyBi aW5hcmllcyBnZXQgcnVuLiAgU2V0dGluZyAkRU5We1BBVEh9IGlzCitpbnN1ZmZpY2llbnQs IGFzIElQQzo6UnVuIGRvZXMgbm90IGNoZWNrIHRvIHNlZSBpZiB0aGUgcGF0aCBoYXMgY2hh bmdlZCBzaW5jZQorY2FjaGluZyBhIGNvbW1hbmQuCisKKz1jdXQKKwogc3ViIGluc3RhbGxl ZF9jb21tYW5kCiB7CiAJbXkgKCRzZWxmLCAkY21kKSA9IEBfOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCBjMWFkODBhNDE4ZC4uZjY5ZTY4ZTZkYmQgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNzMxLDYgKzE3MzEsNyBAQCBNdWx0aVhhY3RNZW1i ZXIKIE11bHRpWGFjdE9mZnNldAogTXVsdGlYYWN0U3RhdGVEYXRhCiBNdWx0aVhhY3RTdGF0 dXMKK011bHRpWGFjdFdyaXRlcgogTXVsdGlyYW5nZUlPRGF0YQogTXVsdGlyYW5nZVBhcnNl U3RhdGUKIE11bHRpcmFuZ2VUeXBlCkBAIC0xODE2LDYgKzE4MTcsNyBAQCBPZmZzZXRWYXJO b2Rlc19jb250ZXh0CiBPaWQKIE9pZE9wdGlvbnMKIE9rZXlzU3RhdGUKK09sZE11bHRpWGFj dFJlYWRlcgogT2xkVG9OZXdNYXBwaW5nCiBPbGRUb05ld01hcHBpbmdEYXRhCiBPbkNvbW1p dEFjdGlvbgpAQCAtMjgxNCw2ICsyODE2LDcgQEAgU2xydUN0bERhdGEKIFNscnVFcnJvckNh dXNlCiBTbHJ1UGFnZVN0YXR1cwogU2xydVNjYW5DYWxsYmFjaworU2xydVNlZ1N0YXRlCiBT bHJ1U2hhcmVkCiBTbHJ1U2hhcmVkRGF0YQogU2xydVdyaXRlQWxsCi0tIAoyLjQ3LjMKCg== --------------Mh0O0oQEG4RlVt2m409CzgGo Content-Type: text/x-patch; charset=UTF-8; name="v28-0006-Add-runtime-checks-for-bogus-multixact-offsets.patch" Content-Disposition: attachment; filename*0="v28-0006-Add-runtime-checks-for-bogus-multixact-offsets.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSA3MDZkMDQyMWFlMjMxMTkzODJiYmU0MWJmMzg1NzBiMWI0Y2I2ZWRmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgNCBEZWMgMjAyNSAxNTozMTozOSArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjI4IDYvNl0gQWRkIHJ1bnRpbWUgY2hlY2tzIGZvciBib2d1cyBt dWx0aXhhY3Qgb2Zmc2V0cwoKVGhlc2UgYXJlIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIDY0 IGJpdCBvZmZzZXRzLCBidXQgbWFrZXMgc2Vuc2UgSQp0aGluawotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIHwgMzMgKysrKysrKysrKysrKysrKy0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3Qu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IGRmZmEw YzhlN2Q0Li5kYzljNDI1N2E5OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVs dGl4YWN0LmMKQEAgLTExNTQsNiArMTE1NCw3IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhN dWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlpbnQJCQlz bG90bm87CiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJTXVsdGlYYWN0T2Zmc2V0IG9m ZnNldDsKKwlNdWx0aVhhY3RPZmZzZXQgbmV4dE1YT2Zmc2V0OwogCWludAkJCWxlbmd0aDsK IAlNdWx0aVhhY3RJZCBvbGRlc3RNWGFjdDsKIAlNdWx0aVhhY3RJZCBuZXh0TVhhY3Q7CkBA IC0xMjQ1LDEyICsxMjQ2LDE0IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJ ZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlvZmZwdHIgKz0gZW50cnlu bzsKIAlvZmZzZXQgPSAqb2ZmcHRyOwogCi0JQXNzZXJ0KG9mZnNldCAhPSAwKTsKKwlpZiAo b2Zmc2V0ID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9E QVRBX0NPUlJVUFRFRCksCisJCQkJIGVycm1zZygiTXVsdGlYYWN0ICV1IGhhcyBpbnZhbGlk IG9mZnNldCIsIG11bHRpKSkpOwogCiAJLyogcmVhZCBuZXh0IG11bHRpJ3Mgb2Zmc2V0ICov CiAJewogCQlNdWx0aVhhY3RJZCB0bXBNWGFjdDsKLQkJTXVsdGlYYWN0T2Zmc2V0IG5leHRN WE9mZnNldDsKIAogCQkvKiBoYW5kbGUgd3JhcGFyb3VuZCBpZiBuZWVkZWQgKi8KIAkJdG1w TVhhY3QgPSBtdWx0aSArIDE7CkBAIC0xMjg0LDIxICsxMjg3LDI3IEBAIEdldE11bHRpWGFj dElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVy cywKIAkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwt PnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKIAkJb2ZmcHRyICs9IGVudHJ5bm87CiAJ CW5leHRNWE9mZnNldCA9ICpvZmZwdHI7Ci0KLQkJaWYgKG5leHRNWE9mZnNldCA9PSAwKQot CQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRF RCksCi0JCQkJCSBlcnJtc2coIk11bHRpWGFjdCAldSBoYXMgaW52YWxpZCBuZXh0IG9mZnNl dCIsCi0JCQkJCQkJbXVsdGkpKSk7Ci0KLQkJbGVuZ3RoID0gbmV4dE1YT2Zmc2V0IC0gb2Zm c2V0OwogCX0KIAogCUxXTG9ja1JlbGVhc2UobG9jayk7CiAJbG9jayA9IE5VTEw7CiAKLQkv KiBBIG11bHRpeGlkIHdpdGggemVybyBtZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICovCi0J QXNzZXJ0KGxlbmd0aCA+IDApOworCS8qIFNhbml0eSBjaGVjayB0aGUgbmV4dCBvZmZzZXQg Ki8KKwlpZiAobmV4dE1YT2Zmc2V0ID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCisJCQkJIGVycm1zZygiTXVsdGlYYWN0 ICV1IGhhcyBpbnZhbGlkIG5leHQgb2Zmc2V0IiwgbXVsdGkpKSk7CisJaWYgKG5leHRNWE9m ZnNldCA8IG9mZnNldCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0RBVEFfQ09SUlVQVEVEKSwKKwkJCQkgZXJybXNnKCJNdWx0aVhhY3QgJXUgaGFzIG9mZnNl dCAoJSIgUFJJdTY0IikgZ3JlYXRlciB0aGFuIGl0cyBuZXh0IG9mZnNldCAgKCUiIFBSSXU2 NCIpIiwKKwkJCQkJCW11bHRpLCBvZmZzZXQsIG5leHRNWE9mZnNldCkpKTsKKwlpZiAobmV4 dE1YT2Zmc2V0IC0gb2Zmc2V0ID4gSU5UMzJfTUFYKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCSBlcnJtc2coIk11bHRp WGFjdCAldSBoYXMgdG9vIG1hbnkgbWVtYmVycyAoJSIgUFJJdTY0ICIpIiwKKwkJCQkJCW11 bHRpLCBuZXh0TVhPZmZzZXQgLSBvZmZzZXQpKSk7CisJbGVuZ3RoID0gbmV4dE1YT2Zmc2V0 IC0gb2Zmc2V0OwogCiAJLyogcmVhZCB0aGUgbWVtYmVycyAqLwogCXB0ciA9IChNdWx0aVhh Y3RNZW1iZXIgKikgcGFsbG9jKGxlbmd0aCAqIHNpemVvZihNdWx0aVhhY3RNZW1iZXIpKTsK LS0gCjIuNDcuMwoK --------------Mh0O0oQEG4RlVt2m409CzgGo--