Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vI9k4-00FR8f-DJ for pgsql-hackers@arkaria.postgresql.org; Sun, 09 Nov 2025 18:02:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vI9k1-0081AA-Tb for pgsql-hackers@arkaria.postgresql.org; Sun, 09 Nov 2025 18:02:17 +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.94.2) (envelope-from ) id 1vI9k1-00819Y-9Y for pgsql-hackers@lists.postgresql.org; Sun, 09 Nov 2025 18:02:17 +0000 Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vI9jv-006qCz-21 for pgsql-hackers@postgresql.org; Sun, 09 Nov 2025 18:02:16 +0000 Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-594330147efso2204287e87.2 for ; Sun, 09 Nov 2025 10:02:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762711330; x=1763316130; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9DZlE/7X3KPrUYoGajnTwcPr7W59QuLQvtB2WNyoEo0=; b=WINIfFgJXwnjBcPljGy26PRD2TKVPyyadxgGSlJCTLI6WXXzMx9i8xq91Do0XTev3P OFC/swBo+ExH2jhi1OEyaHmJwP6xD0SDEgc8j9QBKVdB4oSuw74j2hZgpnMCOab10k7C MF9ADhIHrCFZKMTiEhTOEWtN8+p6uMlmwU3OhUYHmKkgpqdoZP6UrWrISasX0J7zX7DZ DpUSQzcy9FOoL8bd5mfLt/463bm79cKIHqgX2sYFqmhDzKh8gBAKBOnLpNKV/Zyng9RF Boz8wdFVeNL07yH2nk8ETq5vC5foLjMm7sIZCiXO7/pMqy7vTEqfCOcadMvcXo4iwC0v qHcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762711330; x=1763316130; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9DZlE/7X3KPrUYoGajnTwcPr7W59QuLQvtB2WNyoEo0=; b=A2olQDmKgfImDFyQMPFBSzS0tAWRNH1cfJfhTW/AK6JNGzynv5tY6BKntcrtmU1M+y Gfq0Z8AmzPNqTWSG6J1SePUgFgsCELtACSKIJyrMDlYTN4zu0Pzztd7pCfervIk/7muy d8FkSYUF9vvbJX/u7WNveTyUGn4wgGyiHITHNCrU/lvRF8cNaZwlPVHVqgrhbJoA+6iM AVqkGRgBQ6F9CtQklQRCtbBACfSfdFDUBnY71kRsjDr9dU9YfvPZsyLzuEijfdq0b5gH ylOiLPD90SSihq5frsQ3ihhO34LINw5TgtIIDdUI0Y6yRjdiVXhpwHrfLJv6avDiaGyD gxNw== X-Forwarded-Encrypted: i=1; AJvYcCUQRhE6jQmHAsDd3LOlvtqYoyeBWlJoMM4X4/veR0wOSL4IJDtOKn44NK2MgREz1D6DNkFjdxv6R0oqwNzr@postgresql.org X-Gm-Message-State: AOJu0Yw+Jw18ZH+yDtbsO9mUJjmxHa1IuBk1gM8e2HuGWBFBDI7ZNx3Q /mjtPElBnfAvrHcgPIJvMfhUES9lq+TqWnefOlY5LLROSvhZGrpurzsNOzVCe+FknCHIbwff7UF py5AZ7KbY+DWN4XzB0ZvStWOGoWNDVitq06Fm X-Gm-Gg: ASbGnctOQFZylmfNeuPuJSsfqhHcp2WqiP7z2Pv0V0lJouLt6wBVDjdC234qdpK3Eww GIYt3Y2Wz8mNgAz/cFfIhgFn2feucLz5Vzo3GmvPHexrVU1K7JiVhluFsI4/6P3d0996DzZzVIs g8s17okCm8BIDCxhDGZT104GSMLQOKdmlHFU7If8k4KbFozT0EtJEU+0wUS4dS7NBgdANXMzDbb Q2oviP/HgptrtzgVfUG6wDXcVQg8CgMZYhNTy464+ha/EQTsJUxj6DP5r9rS0K1Yq+jG1E= X-Google-Smtp-Source: AGHT+IHxND9VPdKtZwASP0t73b1fPJ78hFF1+v4ZTVQvqQAgR0eq6j9wr5bzPvmoB8A25rszpfN97HT3hTEgS7/YJJM= X-Received: by 2002:a05:6512:23a6:b0:594:3399:981 with SMTP id 2adb3069b0e04-5945f1cb2ccmr1457827e87.39.1762711330112; Sun, 09 Nov 2025 10:02:10 -0800 (PST) MIME-Version: 1.0 References: <202505181556.3n6oiowvntyr@alvherre.pgsql> In-Reply-To: From: Mihail Nikalayeu Date: Sun, 9 Nov 2025 19:02:00 +0100 X-Gm-Features: AWmQ_blrUEXm5Psiw9LUzuy3ubDaYtjy66j1ZxZLPoWcLPoICalcaBOt7yG0-Ws Message-ID: Subject: Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements To: Sergey Sargsyan Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Andres Freund , Michael Paquier , PostgreSQL Hackers , Andrey Borodin , Melanie Plageman , Matthias van de Meent Content-Type: multipart/mixed; boundary="000000000000ac6d6606432d3652" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ac6d6606432d3652 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello! This is a rebased version. Also I decided to keep only part 3 for now, because we need some common solution to keep the horizon advance for both INDEX and REPACK operations [0]. More complex solution description and benchmark results are available at [3= ]. PART 3 STIR-based validation phase CIC That part is about a way to replace the second phase of CIC in a more effective way (and with the ability to allow horizon advance as an additional bonus). The role of the second phase is to find tuples which are not present in the index built by the first scan, because: - some of them were too new for the snapshot used during the first phase - even if we were to use SnapshotSelf to accept all alive tuples =E2=80=93 some of them may be inserted in pages already visited by the scan The main idea is: - before starting the first scan lets prepare a special auxiliary super-lightweight index (it is not even an index or access method, just pretends to be) with the same columns, expressions and predicates - that access method (Short Term Index Replacement =E2=80=93 STIR) just appends TID of new coming tuples, without WAL, minimum locking, simplest append-only structure, without actual indexed data - it remembers all new TIDs inserted to the table during the first phase - once our main (target) index receives updates itself we may safely clear "ready" flag on STIR - if our first phase scan missed something =E2=80=93 it is guaranteed to be present in that STIR index - so, instead of requirement to compare the whole table to the index, we need only to compare to TIDs stored in the STIR - as a bonus we may reset snapshots during the comparison without risk of any issues caused by HOT pruning (the issue [2] caused revert of [1]). That approach provides a significant performance boost in terms of time required to build the index. STIR itself theoretically causes some performance impact, but I was not able to detect it. Also, some optimizations are applied to it (see below). Details of benchmarks are presented below as well. Commits are: - Add STIR access method and flags related to auxiliary indexes This one adds STIR code and some flags to distinguish real and auxiliary indexes. - Add Datum storage support to tuplestore Add ability to store Datum in tuplestore. It is used by the following commits to leverage performance boost from prefetching of the pages during the validation phase. - Use auxiliary indexes for concurrent index operations The main part is here. It contains all the logic for creation of auxiliary index, managing its lifecycle, new validation phase and so on (including progress reporting, some documentation updates, ability to have an unlogged index for logged tables, etc). At the same time it still relies on a single referenced snapshot during the validation phase. - Track and drop auxiliary indexes in DROP/REINDEX That commit adds different techniques to avoid any additional administration requirements to deal with auxiliary indexes in case of error during the index build (junk auxiliary indexes). It adds dependency tracking, special logic for handling REINDEX calls and other small things to make the administrator's life a little bit easier. - Optimize auxiliary index handling Since the STIR index does not contain any actual data we may skip preparation of that during tuple insert. Commit implements such optimization. - Refresh snapshot periodically during index validation Adds logic to the new validation phase to reset the snapshot every so often. Currently it does it every 4096 pages visited. Probably a caveat here is the requirement to call InvalidateCatalogSnapshot to make sure xmin propagates. But AFAIK the same may happen between transaction boundaries in CIC anyway - and ShareUpdateExclusiveLock on table is enough. [0]: https://www.postgresql.org/message-id/flat/202510301734.pj4uds3mqxx4%4= 0alvherre.pgsql#fd20662912580a89b860790f9729aaff [1]: https://github.com/postgres/postgres/commit/d9d076222f5b94a85e0e318339= cfc44b8f26022d [2]: https://www.postgresql.org/message-id/flat/20220524190133.j6ee7zh4f5ed= t5je%40alap3.anarazel.de#1781408f40034c414ad6738140c118ef [3]: https://www.postgresql.org/message-id/CADzfLwVOcZ9mg8gOG+KXWurt=3DMHRc= qNv3XSECYoXyM3ENrxyfQ@mail.gmail.com Best regards, Mikhail. --000000000000ac6d6606432d3652 Content-Type: text/plain; charset="UTF-8"; name="v26-0005-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Disposition: attachment; filename="v26-0005-Use-auxiliary-indexes-for-concurrent-index-opera.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhrw6pew4 RnJvbSA5ODA0MDc3YWNhMTkyMGQwOGUxMDA3YTMyMzg3YzcyZjBmZGVhN2ZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNTowMzoxMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI2IDUvOF0gVXNlIGF1eGlsaWFyeSBpbmRleGVzIGZvciBjb25jdXJyZW50IGluZGV4 IG9wZXJhdGlvbnMKClJlcGxhY2UgdGhlIHNlY29uZCB0YWJsZSBmdWxsIHNjYW4gaW4gY29uY3Vy cmVudCBpbmRleCBidWlsZHMgd2l0aCBhbiBhdXhpbGlhcnkgaW5kZXggYXBwcm9hY2g6Ci0gY3Jl YXRlIGEgU1RJUiAgYXV4aWxpYXJ5IGluZGV4IHdpdGggdGhlIHNhbWUgcHJlZGljYXRlIChpZiBl eGlzdHMpIGFzIGluIG1haW4gaW5kZXgKLSB1c2UgaXQgdG8gdHJhY2sgdHVwbGVzIGluc2VydGVk IGR1cmluZyB0aGUgZmlyc3QgcGhhc2UKLSBtZXJnZSBhdXhpbGlhcnkgaW5kZXggd2l0aCBtYWlu IGluZGV4IGR1cmluZyB2YWxpZGF0aW9uIHRvIGNhdGNoIHVwIG5ldyBpbmRleCB3aXRoIGFueSB0 dXBsZXMgbWlzc2VkIGR1cmluZyB0aGUgZmlyc3QgcGhhc2UKLSBhdXRvbWF0aWNhbGx5IGRyb3Ag YXV4aWxpYXJ5IHdoZW4gbWFpbiBpbmRleCBpcyByZWFkeQoKVG8gbWVyZ2UgbWFpbiBhbmQgYXV4 aWxpYXJ5IGluZGV4ZXM6Ci0gaW5kZXhfYnVsa19kZWxldGUgY2FsbGVkIGZvciBib3RoLCBUSURz IHB1dCBpbnRvIHR1cGxlc29ydAotIGJvdGggdHVwbGVzb3J0IGFyZSBiZWluZyBzb3J0ZWQKLSBi b3RoIHR1cGxlc29ydCBzY2FubmVkIHdpdGggdHdvIHBvaW50ZXJzIGxvb2tpbmcgZm9yIHRoZSBU SURzIHByZXNlbnQgaW4gYXV4aWxpYXJ5IGluZGV4LCBidXQgYWJzZW50IGluIG1haW4gb25lCi0g YWxsIHN1Y2ggVElEcyBhcmUgcHV0IGludG8gdHVwbGVzdG9yZQotIGFsbCBUSURzIGluIHR1cGxl c3RvcmUgYXJlIGZldGNoZWQgdXNpbmcgdGhlIHN0cmVhbSwgdHVwbGVzdG9yZSB1c2VkIGluIGhl YXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuX3JlYWRfc3RyZWFtX25leHQgdG8gcHJvdmlkZSB0aGUg bmV4dCBwYWdlIHRvIHByZWZldGNoCi0gaWYgZmV0Y2hlZCB0dXBsZSBpcyBhbGl2ZSAtIGl0IGlz IGluc2VydGVkIGludG8gdGhlIG1haW4gaW5kZXgKClRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBm b3IgYSBzZWNvbmQgZnVsbCB0YWJsZSBzY2FuIGR1cmluZyB2YWxpZGF0aW9uLCBpbXByb3Zpbmcg cGVyZm9ybWFuY2UgZXNwZWNpYWxseSBmb3IgbGFyZ2UgdGFibGVzLiBBZmZlY3RzIGJvdGggQ1JF QVRFIElOREVYIENPTkNVUlJFTlRMWSBhbmQgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgb3Bl cmF0aW9ucy4KLS0tCiBkb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5zZ21sICAgICAgICAgICAgICAg fCAgMjYgKy0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwgICAgICAgICB8ICAz NCArLQogZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwgICAgICAgICAgICAgIHwgIDQxICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUuSE9UICAgICAgICAgfCAgMTMgKy0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8IDU0NCArKysrKysrKysr KysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgICB8 IDMxNCArKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCAg ICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAg IHwgMzQ0ICsrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jICAgICAg ICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAg ICAgIHwgIDEyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgICAg fCAgIDkgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmggICAgICAgICAgICB8ICAx MyArLQogc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICAgIHwgICAzICst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgfCAgNDIgKysKIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0ICAgICB8ICAgMyArLQogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQgICAgICAgIHwgIDE3ICstCiBzcmMvdGVzdC9y ZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsICAgICAgfCAgMjEgKwogMTcgZmlsZXMgY2hhbmdl ZCwgMTEyMyBpbnNlcnRpb25zKCspLCAzMzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwK aW5kZXggMjc0MWMxMzg1OTMuLjg2OGIwMjVlMmVkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv bW9uaXRvcmluZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTY0 MDcsNiArNjQwNywxOCBAQCBGUk9NIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaWRzZXQoKSBBUyBiYWNr ZW5kaWQ7CiAgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCiAgICAgICA8L2VudHJ5 PgogICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeT48bGl0ZXJhbD53YWl0aW5n IGZvciB3cml0ZXJzIHRvIHVzZSBhdXhpbGlhcnkgaW5kZXg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgIDxlbnRyeT4KKyAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZPC9j b21tYW5kPiBvciA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgd2Fp dGluZyBmb3IgdHJhbnNhY3Rpb25zCisgICAgICAgd2l0aCB3cml0ZSBsb2NrcyB0aGF0IGNhbiBw b3RlbnRpYWxseSBzZWUgdGhlIHRhYmxlIHRvIGZpbmlzaCwgdG8gZW5zdXJlIHVzZSBvZiBhdXhp bGlhcnkgaW5kZXggZm9yIG5ldyB0dXBsZXMgaW4KKyAgICAgICBmdXR1cmUgdHJhbnNhY3Rpb25z LgorICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25jdXJyZW50IG1v ZGUuCisgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5sb2NrZXJzX3RvdGFsPC9zdHJ1Y3RuYW1l PiwgPHN0cnVjdG5hbWU+bG9ja2Vyc19kb25lPC9zdHJ1Y3RuYW1lPgorICAgICAgIGFuZCA8c3Ry dWN0bmFtZT5jdXJyZW50X2xvY2tlcl9waWQ8L3N0cnVjdG5hbWU+IGNvbnRhaW4gdGhlIHByb2dy ZXNzCisgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCisgICAgICA8L2VudHJ5Pgor ICAgICA8L3Jvdz4KICAgICAgPHJvdz4KICAgICAgIDxlbnRyeT48bGl0ZXJhbD5idWlsZGluZyBp bmRleDwvbGl0ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgpAQCAtNjQ0NywxMyArNjQ1OSwx MiBAQCBGUk9NIHBnX3N0YXRfZ2V0X2JhY2tlbmRfaWRzZXQoKSBBUyBiYWNrZW5kaWQ7CiAgICAg ICA8L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICAgPHJvdz4KLSAgICAgIDxlbnRyeT48bGl0ZXJh bD5pbmRleCB2YWxpZGF0aW9uOiBzY2FubmluZyB0YWJsZTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgPGVudHJ5PjxsaXRlcmFsPmluZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlczwvbGl0 ZXJhbD48L2VudHJ5PgogICAgICAgPGVudHJ5PgotICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRF WCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGlzIHNjYW5uaW5nIHRoZSB0YWJsZQotICAgICAgIHRv IHZhbGlkYXRlIHRoZSBpbmRleCB0dXBsZXMgY29sbGVjdGVkIGluIHRoZSBwcmV2aW91cyB0d28g cGhhc2VzLgorICAgICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1h bmQ+IG1lcmdpbmcgY29udGVudCBvZiBhdXhpbGlhcnkgaW5kZXggd2l0aCB0aGUgdGFyZ2V0IGlu ZGV4LgogICAgICAgIFRoaXMgcGhhc2UgaXMgc2tpcHBlZCB3aGVuIG5vdCBpbiBjb25jdXJyZW50 IG1vZGUuCi0gICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT5ibG9ja3NfdG90YWw8L3N0cnVjdG5h bWU+IChzZXQgdG8gdGhlIHRvdGFsIHNpemUgb2YgdGhlIHRhYmxlKQotICAgICAgIGFuZCA8c3Ry dWN0bmFtZT5ibG9ja3NfZG9uZTwvc3RydWN0bmFtZT4gY29udGFpbiB0aGUgcHJvZ3Jlc3MgaW5m b3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCisgICAgICAgQ29sdW1ucyA8c3RydWN0bmFtZT50dXBs ZXNfdG90YWw8L3N0cnVjdG5hbWU+IChzZXQgdG8gdGhlIG51bWJlciBvZiB0dXBsZXMgdG8gYmUg bWVyZ2VkKQorICAgICAgIGFuZCA8c3RydWN0bmFtZT50dXBsZXNfZG9uZTwvc3RydWN0bmFtZT4g Y29udGFpbiB0aGUgcHJvZ3Jlc3MgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGhhc2UuCiAgICAgICA8 L2VudHJ5PgogICAgICA8L3Jvdz4KICAgICAgPHJvdz4KQEAgLTY0NzAsOCArNjQ4MSw5IEBAIEZS T00gcGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldCgpIEFTIGJhY2tlbmRpZDsKICAgICAgPHJvdz4K ICAgICAgIDxlbnRyeT48bGl0ZXJhbD53YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBtYXJraW5n IGRlYWQ8L2xpdGVyYWw+PC9lbnRyeT4KICAgICAgIDxlbnRyeT4KLSAgICAgICA8Y29tbWFuZD5S RUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgd2FpdGluZyBmb3IgdHJhbnNhY3Rpb25z Ci0gICAgICAgd2l0aCByZWFkIGxvY2tzIG9uIHRoZSB0YWJsZSB0byBmaW5pc2gsIGJlZm9yZSBt YXJraW5nIHRoZSBvbGQgaW5kZXggZGVhZC4KKyAgICAgICA8Y29tbWFuZD5DUkVBVEUgSU5ERVgg Q09OQ1VSUkVOVExZPC9jb21tYW5kPiBpcyB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbnMKKyAgICAg ICAgd2l0aCByZWFkIGxvY2tzIG9uIHRoZSB0YWJsZSB0byBmaW5pc2gsIGJlZm9yZSBtYXJraW5n IHRoZSBhdXhpbGlhcnkgaW5kZXggYXMgZGVhZC4KKyAgICAgICA8Y29tbWFuZD5SRUlOREVYIENP TkNVUlJFTlRMWTwvY29tbWFuZD4gaXMgYWxzbyB3YWl0aW5nIGJlZm9yZSBtYXJraW5nIHRoZSBv bGQgaW5kZXggYXMgZGVhZC4KICAgICAgICBUaGlzIHBoYXNlIGlzIHNraXBwZWQgd2hlbiBub3Qg aW4gY29uY3VycmVudCBtb2RlLgogICAgICAgIENvbHVtbnMgPHN0cnVjdG5hbWU+bG9ja2Vyc190 b3RhbDwvc3RydWN0bmFtZT4sIDxzdHJ1Y3RuYW1lPmxvY2tlcnNfZG9uZTwvc3RydWN0bmFtZT4K ICAgICAgICBhbmQgPHN0cnVjdG5hbWU+Y3VycmVudF9sb2NrZXJfcGlkPC9zdHJ1Y3RuYW1lPiBj b250YWluIHRoZSBwcm9ncmVzcwpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf aW5kZXguc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKaW5kZXggYmI3 NTA1ZDE3MWIuLmJhMzg3ZjI4OTc3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9pbmRleC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKQEAg LTYyMCwxMCArNjIwLDEwIEBAIENSRUFURSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZ IF0gWyBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9CiAgICAgb3V0IHdyaXRl cy4gIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgc3BlY2lmeWluZyB0aGUKICAgICA8bGl0ZXJh bD5DT05DVVJSRU5UTFk8L2xpdGVyYWw+IG9wdGlvbiBvZiA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8 L2NvbW1hbmQ+LgogICAgIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwKLSAgICA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3QgcGVyZm9ybSB0d28gc2NhbnMgb2YgdGhl IHRhYmxlLCBhbmQgaW4KLSAgICBhZGRpdGlvbiBpdCBtdXN0IHdhaXQgZm9yIGFsbCBleGlzdGlu ZyB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseQotICAgIG1vZGlmeSBvciB1c2Ug dGhlIGluZGV4IHRvIHRlcm1pbmF0ZS4gIFRodXMKLSAgICB0aGlzIG1ldGhvZCByZXF1aXJlcyBt b3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4IGJ1aWxkIGFuZCB0YWtlcworICAg IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJmb3JtIHRhYmxl IHNjYW4gZm9sbG93ZWQgYnkKKyAgICB2YWxpZGF0aW9uIHBoYXNlLCBhbmQgaW4gYWRkaXRpb24g aXQgbXVzdCB3YWl0IGZvciBhbGwgZXhpc3RpbmcgdHJhbnNhY3Rpb25zCisgICAgdGhhdCBjb3Vs ZCBwb3RlbnRpYWxseSBtb2RpZnkgb3IgdXNlIHRoZSBpbmRleCB0byB0ZXJtaW5hdGUuICBUaHVz CisgICAgdGhpcyBtZXRob2QgcmVxdWlyZXMgbW9yZSB0b3RhbCB3b3JrIHRoYW4gYSBzdGFuZGFy ZCBpbmRleCBidWlsZCBhbmQgbWF5IHRha2UKICAgICBzaWduaWZpY2FudGx5IGxvbmdlciB0byBj b21wbGV0ZS4gIEhvd2V2ZXIsIHNpbmNlIGl0IGFsbG93cyBub3JtYWwKICAgICBvcGVyYXRpb25z IHRvIGNvbnRpbnVlIHdoaWxlIHRoZSBpbmRleCBpcyBidWlsdCwgdGhpcyBtZXRob2QgaXMgdXNl ZnVsIGZvcgogICAgIGFkZGluZyBuZXcgaW5kZXhlcyBpbiBhIHByb2R1Y3Rpb24gZW52aXJvbm1l bnQuICBPZiBjb3Vyc2UsIHRoZSBleHRyYSBDUFUKQEAgLTYzMSwxNCArNjMxLDE0IEBAIENSRUFU RSBbIFVOSVFVRSBdIElOREVYIFsgQ09OQ1VSUkVOVExZIF0gWyBbIElGIE5PVCBFWElTVFMgXSA8 cmVwbGFjZWFibGUgY2xhc3M9CiAgICA8L3BhcmE+CiAKICAgIDxwYXJhPgotICAgIEluIGEgY29u Y3VycmVudCBpbmRleCBidWlsZCwgdGhlIGluZGV4IGlzIGFjdHVhbGx5IGVudGVyZWQgYXMgYW4K LSAgICA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGludG8KLSAgICB0aGUgc3lzdGVtIGNh dGFsb2dzIGluIG9uZSB0cmFuc2FjdGlvbiwgdGhlbiB0d28gdGFibGUgc2NhbnMgb2NjdXIgaW4K LSAgICB0d28gbW9yZSB0cmFuc2FjdGlvbnMuICBCZWZvcmUgZWFjaCB0YWJsZSBzY2FuLCB0aGUg aW5kZXggYnVpbGQgbXVzdAorICAgIEluIGEgY29uY3VycmVudCBpbmRleCBidWlsZCwgdGhlIG1h aW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzIGlzIGFjdHVhbGx5CisgICAgZW50ZXJlZCBhcyBhbiA8 cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGludG8KKyAgICB0aGUgc3lzdGVtIGNhdGFsb2dz IGluIG9uZSB0cmFuc2FjdGlvbiwgdGhlbiB0d28gcGhhc2VzIG9jY3VyIGluCisgICAgbXVsdGlw bGUgdHJhbnNhY3Rpb25zLiAgQmVmb3JlIGVhY2ggcGhhc2UsIHRoZSBpbmRleCBidWlsZCBtdXN0 CiAgICAgd2FpdCBmb3IgZXhpc3RpbmcgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBtb2RpZmllZCB0 aGUgdGFibGUgdG8gdGVybWluYXRlLgotICAgIEFmdGVyIHRoZSBzZWNvbmQgc2NhbiwgdGhlIGlu ZGV4IGJ1aWxkIG11c3Qgd2FpdCBmb3IgYW55IHRyYW5zYWN0aW9ucworICAgIEFmdGVyIHRoZSBz ZWNvbmQgcGhhc2UsIHRoZSBpbmRleCBidWlsZCBtdXN0IHdhaXQgZm9yIGFueSB0cmFuc2FjdGlv bnMKICAgICB0aGF0IGhhdmUgYSBzbmFwc2hvdCAoc2VlIDx4cmVmIGxpbmtlbmQ9Im12Y2MiLz4p IHByZWRhdGluZyB0aGUgc2Vjb25kCi0gICAgc2NhbiB0byB0ZXJtaW5hdGUsIGluY2x1ZGluZyB0 cmFuc2FjdGlvbnMgdXNlZCBieSBhbnkgcGhhc2Ugb2YgY29uY3VycmVudAorICAgIHBoYXNlIHRv IHRlcm1pbmF0ZSwgaW5jbHVkaW5nIHRyYW5zYWN0aW9ucyB1c2VkIGJ5IGFueSBwaGFzZSBvZiBj b25jdXJyZW50CiAgICAgaW5kZXggYnVpbGRzIG9uIG90aGVyIHRhYmxlcywgaWYgdGhlIGluZGV4 ZXMgaW52b2x2ZWQgYXJlIHBhcnRpYWwgb3IgaGF2ZQogICAgIGNvbHVtbnMgdGhhdCBhcmUgbm90 IHNpbXBsZSBjb2x1bW4gcmVmZXJlbmNlcy4KICAgICBUaGVuIGZpbmFsbHkgdGhlIGluZGV4IGNh biBiZSBtYXJrZWQgPHF1b3RlPnZhbGlkPC9xdW90ZT4gYW5kIHJlYWR5IGZvciB1c2UsCkBAIC02 NTEsMTAgKzY1MSwxMSBAQCBDUkVBVEUgWyBVTklRVUUgXSBJTkRFWCBbIENPTkNVUlJFTlRMWSBd IFsgWyBJRiBOT1QgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPQogICAgPHBhcmE+CiAgICAg SWYgYSBwcm9ibGVtIGFyaXNlcyB3aGlsZSBzY2FubmluZyB0aGUgdGFibGUsIHN1Y2ggYXMgYSBk ZWFkbG9jayBvciBhCiAgICAgdW5pcXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgs IHRoZSA8Y29tbWFuZD5DUkVBVEUgSU5ERVg8L2NvbW1hbmQ+Ci0gICAgY29tbWFuZCB3aWxsIGZh aWwgYnV0IGxlYXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4LiBUaGlz IGluZGV4Ci0gICAgd2lsbCBiZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcyBiZWNhdXNl IGl0IG1pZ2h0IGJlIGluY29tcGxldGU7Ci0gICAgaG93ZXZlciBpdCB3aWxsIHN0aWxsIGNvbnN1 bWUgdXBkYXRlIG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPgot ICAgIDxjb21tYW5kPlxkPC9jb21tYW5kPiBjb21tYW5kIHdpbGwgcmVwb3J0IHN1Y2ggYW4gaW5k ZXggYXMgPGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD46CisgICAgY29tbWFuZCB3aWxsIGZhaWwg YnV0IGxlYXZlIGJlaGluZCBhbiA8cXVvdGU+aW52YWxpZDwvcXVvdGU+IGluZGV4IGFuZCBpdHMK KyAgICBhc3NvY2lhdGVkIGF1eGlsaWFyeSBpbmRleC4gVGhlc2UgaW5kZXhlcworICAgIHdpbGwg YmUgaWdub3JlZCBmb3IgcXVlcnlpbmcgcHVycG9zZXMgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIGlu Y29tcGxldGU7CisgICAgaG93ZXZlciB0aGV5IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUgb3Zl cmhlYWQuIFRoZSA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+CisgICAgPGNvbW1hbmQ+ XGQ8L2NvbW1hbmQ+IGNvbW1hbmQgd2lsbCByZXBvcnQgc3VjaCBpbmRleGVzIGFzIDxsaXRlcmFs PklOVkFMSUQ8L2xpdGVyYWw+OgogCiA8cHJvZ3JhbWxpc3Rpbmc+CiBwb3N0Z3Jlcz0jIFxkIHRh YgpAQCAtNjY0LDExICs2NjUsMTIgQEAgcG9zdGdyZXM9IyBcZCB0YWIKICBjb2wgICAgfCBpbnRl Z2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfAogSW5kZXhlczoKICAgICAiaWR4IiBidHJlZSAo Y29sKSBJTlZBTElECisgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECiA8L3Byb2dy YW1saXN0aW5nPgogCiAgICAgVGhlIHJlY29tbWVuZGVkIHJlY292ZXJ5Ci0gICAgbWV0aG9kIGlu IHN1Y2ggY2FzZXMgaXMgdG8gZHJvcCB0aGUgaW5kZXggYW5kIHRyeSBhZ2FpbiB0byBwZXJmb3Jt Ci0gICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uICAoQW5v dGhlciBwb3NzaWJpbGl0eSBpcworICAgIG1ldGhvZCBpbiBzdWNoIGNhc2VzIGlzIHRvIGRyb3Ag dGhlc2UgaW5kZXhlcyBhbmQgdHJ5IGFnYWluIHRvIHBlcmZvcm0KKyAgICA8Y29tbWFuZD5DUkVB VEUgSU5ERVggQ09OQ1VSUkVOVExZPC9jb21tYW5kPi4gKEFub3RoZXIgcG9zc2liaWxpdHkgaXMK ICAgICB0byByZWJ1aWxkIHRoZSBpbmRleCB3aXRoIDxjb21tYW5kPlJFSU5ERVggSU5ERVggQ09O Q1VSUkVOVExZPC9jb21tYW5kPikuCiAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9yZWYvcmVpbmRleC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKaW5k ZXggMTg1Y2Q3NWNhMzAuLjk3ZjU1MWE1NWE2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVm L3JlaW5kZXguc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbApAQCAtMzY4 LDkgKzM2OCw4IEBAIFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5v cHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAgICAgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBzdXBwb3J0cyByZWJ1aWxkaW5nIGluZGV4ZXMgd2l0aCBt aW5pbXVtIGxvY2tpbmcKICAgICBvZiB3cml0ZXMuICBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJ5 IHNwZWNpZnlpbmcgdGhlCiAgICAgPGxpdGVyYWw+Q09OQ1VSUkVOVExZPC9saXRlcmFsPiBvcHRp b24gb2YgPGNvbW1hbmQ+UkVJTkRFWDwvY29tbWFuZD4uIFdoZW4gdGhpcyBvcHRpb24KLSAgICBp cyB1c2VkLCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IG11c3QgcGVyZm9y bSB0d28gc2NhbnMgb2YgdGhlIHRhYmxlCi0gICAgZm9yIGVhY2ggaW5kZXggdGhhdCBuZWVkcyB0 byBiZSByZWJ1aWx0IGFuZCB3YWl0IGZvciB0ZXJtaW5hdGlvbiBvZgotICAgIGFsbCBleGlzdGlu ZyB0cmFuc2FjdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSB1c2UgdGhlIGluZGV4LgorICAg IGlzIHVzZWQsIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gbXVzdCBwZXJm b3JtIHNldmVyYWwgc3RlcHMgdG8gZW5zdXJlIGRhdGEKKyAgICBjb25zaXN0ZW5jeSB3aGlsZSBh bGxvd2luZyBub3JtYWwgb3BlcmF0aW9ucyB0byBjb250aW51ZS4KICAgICBUaGlzIG1ldGhvZCBy ZXF1aXJlcyBtb3JlIHRvdGFsIHdvcmsgdGhhbiBhIHN0YW5kYXJkIGluZGV4CiAgICAgcmVidWls ZCBhbmQgdGFrZXMgc2lnbmlmaWNhbnRseSBsb25nZXIgdG8gY29tcGxldGUgYXMgaXQgbmVlZHMg dG8gd2FpdAogICAgIGZvciB1bmZpbmlzaGVkIHRyYW5zYWN0aW9ucyB0aGF0IG1pZ2h0IG1vZGlm eSB0aGUgaW5kZXguIEhvd2V2ZXIsIHNpbmNlCkBAIC0zODgsNyArMzg3LDcgQEAgUkVJTkRFWCBb ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFss IC4uLl0gKSBdIHsgREEKICAgICA8b3JkZXJlZGxpc3Q+CiAgICAgIDxsaXN0aXRlbT4KICAgICAg IDxwYXJhPgotICAgICAgIEEgbmV3IHRyYW5zaWVudCBpbmRleCBkZWZpbml0aW9uIGlzIGFkZGVk IHRvIHRoZSBjYXRhbG9nCisgICAgICAgQSBuZXcgdHJhbnNpZW50IGluZGV4IGRlZmluaXRpb24g YW5kIGFuIGF1eGlsaWFyeSBpbmRleCBhcmUgYWRkZWQgdG8gdGhlIGNhdGFsb2cKICAgICAgICA8 bGl0ZXJhbD5wZ19pbmRleDwvbGl0ZXJhbD4uICBUaGlzIGRlZmluaXRpb24gd2lsbCBiZSB1c2Vk IHRvIHJlcGxhY2UKICAgICAgICB0aGUgb2xkIGluZGV4LiAgQSA8bGl0ZXJhbD5TSEFSRSBVUERB VEUgRVhDTFVTSVZFPC9saXRlcmFsPiBsb2NrIGF0CiAgICAgICAgc2Vzc2lvbiBsZXZlbCBpcyB0 YWtlbiBvbiB0aGUgaW5kZXhlcyBiZWluZyByZWluZGV4ZWQgYXMgd2VsbCBhcyB0aGVpcgpAQCAt Mzk4LDcgKzM5NywxNSBAQCBSRUlOREVYIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIF0geyBEQQogCiAgICAgIDxsaXN0aXRl bT4KICAgICAgIDxwYXJhPgotICAgICAgIEEgZmlyc3QgcGFzcyB0byBidWlsZCB0aGUgaW5kZXgg aXMgZG9uZSBmb3IgZWFjaCBuZXcgaW5kZXguICBPbmNlIHRoZQorICAgICAgIFRoZSBhdXhpbGlh cnkgaW5kZXggaXMgbWFya2VkIGFzICJyZWFkeSBmb3IgaW5zZXJ0cyIsIG1ha2luZworICAgICAg IGl0IHZpc2libGUgdG8gb3RoZXIgc2Vzc2lvbnMuIFRoaXMgaW5kZXggZWZmaWNpZW50bHkgdHJh Y2tzIGFsbCBuZXcKKyAgICAgICB0dXBsZXMgZHVyaW5nIHRoZSByZWluZGV4IHByb2Nlc3MuCisg ICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAg PHBhcmE+CisgICAgICAgVGhlIG5ldyBtYWluIGluZGV4IGlzIGJ1aWx0IGJ5IHNjYW5uaW5nIHRo ZSB0YWJsZS4gIE9uY2UgdGhlCiAgICAgICAgaW5kZXggaXMgYnVpbHQsIGl0cyBmbGFnIDxsaXRl cmFsPnBnX2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IGlzCiAgICAgICAgc3dpdGNoZWQgdG8g PHF1b3RlPnRydWU8L3F1b3RlPiB0byBtYWtlIGl0IHJlYWR5IGZvciBpbnNlcnRzLCBtYWtpbmcg aXQKICAgICAgICB2aXNpYmxlIHRvIG90aGVyIHNlc3Npb25zIG9uY2UgdGhlIHRyYW5zYWN0aW9u IHRoYXQgcGVyZm9ybWVkIHRoZSBidWlsZApAQCAtNDA5LDkgKzQxNiw5IEBAIFJFSU5ERVggWyAo IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAu Li5dICkgXSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+Ci0gICAgICAgVGhl biBhIHNlY29uZCBwYXNzIGlzIHBlcmZvcm1lZCB0byBhZGQgdHVwbGVzIHRoYXQgd2VyZSBhZGRl ZCB3aGlsZSB0aGUKLSAgICAgICBmaXJzdCBwYXNzIHdhcyBydW5uaW5nLiAgVGhpcyBzdGVwIGlz IGFsc28gZG9uZSBpbiBhIHNlcGFyYXRlCi0gICAgICAgdHJhbnNhY3Rpb24gZm9yIGVhY2ggaW5k ZXguCisgICAgICAgQSB2YWxpZGF0aW9uIHBoYXNlIG1lcmdlcyBhbnkgbWlzc2luZyBlbnRyaWVz IGZyb20gdGhlIGF1eGlsaWFyeSBpbmRleAorICAgICAgIGludG8gdGhlIG1haW4gaW5kZXgsIGVu c3VyaW5nIGFsbCBjb25jdXJyZW50IGNoYW5nZXMgYXJlIGNhcHR1cmVkLgorICAgICAgIFRoaXMg c3RlcCBpcyBhbHNvIGRvbmUgaW4gYSBzZXBhcmF0ZSB0cmFuc2FjdGlvbiBmb3IgZWFjaCBpbmRl eC4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KIApAQCAtNDI4LDcgKzQzNSw3IEBA IFJFSU5ERVggWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxh Y2VhYmxlPiBbLCAuLi5dICkgXSB7IERBCiAKICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+ Ci0gICAgICAgVGhlIG9sZCBpbmRleGVzIGhhdmUgPGxpdGVyYWw+cGdfaW5kZXguaW5kaXNyZWFk eTwvbGl0ZXJhbD4gc3dpdGNoZWQgdG8KKyAgICAgICBUaGUgb2xkIGFuZCBhdXhpbGlhcnkgaW5k ZXhlcyBoYXZlIDxsaXRlcmFsPnBnX2luZGV4LmluZGlzcmVhZHk8L2xpdGVyYWw+IHN3aXRjaGVk IHRvCiAgICAgICAgPHF1b3RlPmZhbHNlPC9xdW90ZT4gdG8gcHJldmVudCBhbnkgbmV3IHR1cGxl IGluc2VydGlvbnMsIGFmdGVyIHdhaXRpbmcKICAgICAgICBmb3IgcnVubmluZyBxdWVyaWVzIHRo YXQgbWlnaHQgcmVmZXJlbmNlIHRoZSBvbGQgaW5kZXggdG8gY29tcGxldGUuCiAgICAgICA8L3Bh cmE+CkBAIC00MzYsNyArNDQzLDcgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKIAogICAgICA8 bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBUaGUgb2xkIGluZGV4ZXMgYXJlIGRyb3Bw ZWQuICBUaGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCisgICAgICAgVGhlIG9sZCBhbmQgYXV4aWxp YXJ5IGluZGV4ZXMgYXJlIGRyb3BwZWQuICBUaGUgPGxpdGVyYWw+U0hBUkUgVVBEQVRFCiAgICAg ICAgRVhDTFVTSVZFPC9saXRlcmFsPiBzZXNzaW9uIGxvY2tzIGZvciB0aGUgaW5kZXhlcyBhbmQg dGhlIHRhYmxlIGFyZQogICAgICAgIHJlbGVhc2VkLgogICAgICAgPC9wYXJhPgpAQCAtNDQ3LDEx ICs0NTQsMTEgQEAgUkVJTkRFWCBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9w dGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLl0gKSBdIHsgREEKICAgIDxwYXJhPgogICAgIElmIGEg cHJvYmxlbSBhcmlzZXMgd2hpbGUgcmVidWlsZGluZyB0aGUgaW5kZXhlcywgc3VjaCBhcyBhCiAg ICAgdW5pcXVlbmVzcyB2aW9sYXRpb24gaW4gYSB1bmlxdWUgaW5kZXgsIHRoZSA8Y29tbWFuZD5S RUlOREVYPC9jb21tYW5kPgotICAgIGNvbW1hbmQgd2lsbCBmYWlsIGJ1dCBsZWF2ZSBiZWhpbmQg YW4gPHF1b3RlPmludmFsaWQ8L3F1b3RlPiBuZXcgaW5kZXggaW4gYWRkaXRpb24gdG8KLSAgICB0 aGUgcHJlLWV4aXN0aW5nIG9uZS4gVGhpcyBpbmRleCB3aWxsIGJlIGlnbm9yZWQgZm9yIHF1ZXJ5 aW5nIHB1cnBvc2VzCi0gICAgYmVjYXVzZSBpdCBtaWdodCBiZSBpbmNvbXBsZXRlOyBob3dldmVy IGl0IHdpbGwgc3RpbGwgY29uc3VtZSB1cGRhdGUKKyAgICBjb21tYW5kIHdpbGwgZmFpbCBidXQg bGVhdmUgYmVoaW5kIGFuIDxxdW90ZT5pbnZhbGlkPC9xdW90ZT4gbmV3IGluZGV4IGFuZCBpdHMg YXV4aWxpYXJ5IGluZGV4IGluIGFkZGl0aW9uIHRvCisgICAgdGhlIHByZS1leGlzdGluZyBvbmUu IFRoZXNlIGluZGV4ZXMgd2lsbCBiZSBpZ25vcmVkIGZvciBxdWVyeWluZyBwdXJwb3NlcworICAg IGJlY2F1c2UgdGhleSBtaWdodCBiZSBpbmNvbXBsZXRlOyBob3dldmVyIHRoZXkgd2lsbCBzdGls bCBjb25zdW1lIHVwZGF0ZQogICAgIG92ZXJoZWFkLiBUaGUgPGFwcGxpY2F0aW9uPnBzcWw8L2Fw cGxpY2F0aW9uPiA8Y29tbWFuZD5cZDwvY29tbWFuZD4gY29tbWFuZCB3aWxsIHJlcG9ydAotICAg IHN1Y2ggYW4gaW5kZXggYXMgPGxpdGVyYWw+SU5WQUxJRDwvbGl0ZXJhbD46CisgICAgc3VjaCBp bmRleGVzIGFzIDxsaXRlcmFsPklOVkFMSUQ8L2xpdGVyYWw+OgogCiA8cHJvZ3JhbWxpc3Rpbmc+ CiBwb3N0Z3Jlcz0jIFxkIHRhYgpAQCAtNDYyLDEyICs0NjksMTQgQEAgcG9zdGdyZXM9IyBcZCB0 YWIKIEluZGV4ZXM6CiAgICAgImlkeCIgYnRyZWUgKGNvbCkKICAgICAiaWR4X2NjbmV3IiBidHJl ZSAoY29sKSBJTlZBTElECisgICAgImlkeF9jY2F1eCIgc3RpciAoY29sKSBJTlZBTElECisKIDwv cHJvZ3JhbWxpc3Rpbmc+CiAKICAgICBJZiB0aGUgaW5kZXggbWFya2VkIDxsaXRlcmFsPklOVkFM SUQ8L2xpdGVyYWw+IGlzIHN1ZmZpeGVkCi0gICAgPGxpdGVyYWw+X2NjbmV3PC9saXRlcmFsPiwg dGhlbiBpdCBjb3JyZXNwb25kcyB0byB0aGUgdHJhbnNpZW50CisgICAgPGxpdGVyYWw+X2NjbmV3 PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5fY2NhdXg8L2xpdGVyYWw+LCB0aGVuIGl0IGNvcnJlc3Bv bmRzIHRvIHRoZSB0cmFuc2llbnQgb3IgYXV4aWxpYXJ5CiAgICAgaW5kZXggY3JlYXRlZCBkdXJp bmcgdGhlIGNvbmN1cnJlbnQgb3BlcmF0aW9uLCBhbmQgdGhlIHJlY29tbWVuZGVkCi0gICAgcmVj b3ZlcnkgbWV0aG9kIGlzIHRvIGRyb3AgaXQgdXNpbmcgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0 ZXJhbD4sCisgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGRyb3AgdGhlc2UgaW5kZXhlcyB1c2lu ZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPiwKICAgICB0aGVuIGF0dGVtcHQgPGNvbW1h bmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGFnYWluLgogICAgIElmIHRoZSBpbnZh bGlkIGluZGV4IGlzIGluc3RlYWQgc3VmZml4ZWQgPGxpdGVyYWw+X2Njb2xkPC9saXRlcmFsPiwK ICAgICBpdCBjb3JyZXNwb25kcyB0byB0aGUgb3JpZ2luYWwgaW5kZXggd2hpY2ggY291bGQgbm90 IGJlIGRyb3BwZWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFETUUu SE9UIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVAppbmRleCA3NGU0MDdmMzc1 YS4uMjhlMmExNjA0YzQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURN RS5IT1QKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVApAQCAtMzc1LDYg KzM3NSwxMSBAQCBjb25zdHJhaW50IG9uIHdoaWNoIHVwZGF0ZXMgY2FuIGJlIEhPVC4gIE90aGVy IHRyYW5zYWN0aW9ucyBtdXN0IGluY2x1ZGUKIHN1Y2ggYW4gaW5kZXggd2hlbiBkZXRlcm1pbmlu ZyBIT1Qtc2FmZXR5IG9mIHVwZGF0ZXMsIGV2ZW4gdGhvdWdoIHRoZXkKIG11c3QgaWdub3JlIGl0 IGZvciBib3RoIGluc2VydGlvbiBhbmQgc2VhcmNoaW5nIHB1cnBvc2VzLgogCitBbHNvLCBzcGVj aWFsIGF1eGlsaWFyeSBpbmRleCBpcyBjcmVhdGVkIHRoZSBzYW1lIHdheS4gSXQgbWFya2VkIGFz CisicmVhZHkgZm9yIGluc2VydHMiIHdpdGhvdXQgYW55IGFjdHVhbCB0YWJsZSBzY2FuLiBJdHMg cHVycG9zZSBpcyBjb2xsZWN0CituZXcgdHVwbGVzIGluc2VydGVkIGludG8gdGFibGUgd2hpbGUg b3VyIHRhcmdldCBpbmRleCBpcyBzdGlsbCAibm90IHJlYWR5Citmb3IgaW5zZXJ0cyIKKwogV2Ug bXVzdCBkbyB0aGlzIHRvIGF2b2lkIG1ha2luZyBpbmNvcnJlY3QgaW5kZXggZW50cmllcy4gIEZv ciBleGFtcGxlLAogc3VwcG9zZSB3ZSBhcmUgYnVpbGRpbmcgYW4gaW5kZXggb24gY29sdW1uIFgg YW5kIHdlIG1ha2UgYW4gaW5kZXggZW50cnkgZm9yCiBhIG5vbi1IT1QgdHVwbGUgd2l0aCBYPTEu ICBUaGVuIHNvbWUgb3RoZXIgYmFja2VuZCwgdW5hd2FyZSB0aGF0IFggaXMgYW4KQEAgLTM5NCwx MCArMzk5LDEwIEBAIGVudHJ5IGF0IHRoZSByb290IG9mIHRoZSBIT1QtdXBkYXRlIGNoYWluIGJ1 dCB3ZSB1c2UgdGhlIGtleSB2YWx1ZSBmcm9tIHRoZQogbGl2ZSB0dXBsZS4KIAogV2UgbWFyayB0 aGUgaW5kZXggb3BlbiBmb3IgaW5zZXJ0cyAoYnV0IHN0aWxsIG5vdCByZWFkeSBmb3IgcmVhZHMp IHRoZW4KLXdlIGFnYWluIHdhaXQgZm9yIHRyYW5zYWN0aW9ucyB3aGljaCBoYXZlIHRoZSB0YWJs ZSBvcGVuLiAgVGhlbiB3ZSB0YWtlCi1hIHNlY29uZCByZWZlcmVuY2Ugc25hcHNob3QgYW5kIHZh bGlkYXRlIHRoZSBpbmRleC4gIFRoaXMgc2VhcmNoZXMgZm9yCi10dXBsZXMgbWlzc2luZyBmcm9t IHRoZSBpbmRleCwgYW5kIGluc2VydHMgYW55IG1pc3Npbmcgb25lcy4gIEFnYWluLAotdGhlIGlu ZGV4IGVudHJpZXMgaGF2ZSB0byBoYXZlIFRJRHMgZXF1YWwgdG8gSE9ULWNoYWluIHJvb3QgVElE cywgYnV0Cit3ZSBhZ2FpbiB3YWl0IGZvciB0cmFuc2FjdGlvbnMgd2hpY2ggaGF2ZSB0aGUgdGFi bGUgb3Blbi4gIFRoZW4gdmFsaWRhdGUKK3RoZSBpbmRleC4gIFRoaXMgc2VhcmNoZXMgZm9yIHR1 cGxlcyBtaXNzaW5nIGZyb20gdGhlIGluZGV4IGluIGF1eGlsaWFyeQoraW5kZXgsIGFuZCBpbnNl cnRzIGFueSBtaXNzaW5nIG9uZXMgaWYgdGhlbSB2aXNpYmxlIHRvIHJlZmVyZW5jZSBzbmFwc2hv dC4KK0FnYWluLCB0aGUgaW5kZXggZW50cmllcyBoYXZlIHRvIGhhdmUgVElEcyBlcXVhbCB0byBI T1QtY2hhaW4gcm9vdCBUSURzLCBidXQKIHRoZSB2YWx1ZSB0byBiZSBpbnNlcnRlZCBpcyB0aGUg b25lIGZyb20gdGhlIGxpdmUgdHVwbGUuCiAKIFRoZW4gd2Ugd2FpdCB1bnRpbCBldmVyeSB0cmFu c2FjdGlvbiB0aGF0IGNvdWxkIGhhdmUgYSBzbmFwc2hvdCBvbGRlciB0aGFuCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCBiY2JhYzg0NGJiNi4uYzg1ZTUzMzJi YTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNDEsNiAr NDEsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv bG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCisjaW5jbHVkZSAic3RvcmFn ZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJzdG9y YWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgpAQCAtMTc0MywyNDIgKzE3 NDQsNDA1IEBAIGhlYXBhbV9pbmRleF9idWlsZF9yYW5nZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwKIAlyZXR1cm4gcmVsdHVwbGVzOwogfQogCisvKgorICogQ2FsY3VsYXRlIHNldCBkaWZm ZXJlbmNlIChyZWxhdGl2ZSBjb21wbGVtZW50KSBvZiBtYWluIGFuZCBhdXgKKyAqIHNldHMuCisg KgorICogQWxsIHJlY29yZHMgd2hpY2ggYXJlIHByZXNlbnQgaW4gYXV4bGlhcnkgdHVwbGVzb3J0 IGJ1dCBub3QgaXMKKyAqIG1haW4gYXJlIGFkZGVkIHRvIHRoZSBzdG9yZS4KKyAqCisgKiBJbiBz ZXQgdGhlb3J5IG5vdGF0aW9uIHN0b3JlID0gYXV4IC0gbWFpbiBvciBzdG9yZSA9IGF1eCAvIG1h aW4uCisgKgorICogcmV0dXJucyBudW1iZXIgb2YgaXRlbXMgYWRkZWQgdG8gc3RvcmUKKyAqLwor c3RhdGljIGludAoraGVhcGFtX2luZGV4X3ZhbGlkYXRlX3R1cGxlc29ydF9kaWZmZXJlbmNlKFR1 cGxlc29ydHN0YXRlICAqbWFpbiwKKwkJCQkJCQkJCQkgICBUdXBsZXNvcnRzdGF0ZSAgKmF1eCwK KwkJCQkJCQkJCQkgICBUdXBsZXN0b3Jlc3RhdGUgKnN0b3JlKQoreworCWludAkJCQludW0gPSAw OworCS8qIHN0YXRlIHZhcmlhYmxlcyBmb3IgdGhlIG1lcmdlICovCisJSXRlbVBvaW50ZXIgCWlu ZGV4Y3Vyc29yID0gTlVMTCwKKwkJCQkJYXV4aW5kZXhjdXJzb3IgPSBOVUxMOworCUl0ZW1Qb2lu dGVyRGF0YSBkZWNvZGVkLAorCQkJCQlhdXhkZWNvZGVkOworCWJvb2wJCQl0dXBsZXNvcnRfZW1w dHkgPSBmYWxzZSwKKwkJCQkJYXV4dHVwbGVzb3J0X2VtcHR5ID0gZmFsc2U7CisKKwkvKiBJbml0 aWFsaXplIHBvaW50ZXJzLiAqLworCUl0ZW1Qb2ludGVyU2V0SW52YWxpZCgmZGVjb2RlZCk7CisJ SXRlbVBvaW50ZXJTZXRJbnZhbGlkKCZhdXhkZWNvZGVkKTsKKworCS8qCisJICogTWFpbiBsb29w OiB3ZSBzdGVwIHRocm91Z2ggdGhlIGF1eGlsaWFyeSBzb3J0IChhdXhTdGF0ZS0+dHVwbGVzb3J0 KSwKKwkgKiB3aGljaCBob2xkcyBUSURzIHRoYXQgbXVzdCBjb21wYXJlZCB0byB0aG9zZSBmcm9t IHRoZSAibWFpbiIgc29ydAorCSAqIChzdGF0ZS0+dHVwbGVzb3J0KS4KKwkgKi8KKwl3aGlsZSAo IWF1eHR1cGxlc29ydF9lbXB0eSkKKwl7CisJCURhdHVtCQl0c192YWw7CisJCWJvb2wJCXRzX2lz bnVsbDsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKgorCQkqIEF0dGVtcHQgdG8g ZmV0Y2ggdGhlIG5leHQgVElEIGZyb20gdGhlIGF1eGlsaWFyeSBzb3J0LiBJZiBpdCdzCisJCSog ZW1wdHksIHdlIHNldCBhdXhpbmRleGN1cnNvciB0byBOVUxMLgorCQkqLworCQlhdXh0dXBsZXNv cnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKGF1eCwgdHJ1ZSwKKwkJCQkJCQkJCQkJCSBm YWxzZSwgJnRzX3ZhbCwgJnRzX2lzbnVsbCwKKwkJCQkJCQkJCQkJCSBOVUxMKTsKKwkJQXNzZXJ0 KGF1eHR1cGxlc29ydF9lbXB0eSB8fCAhdHNfaXNudWxsKTsKKwkJaWYgKCFhdXh0dXBsZXNvcnRf ZW1wdHkpCisJCXsKKwkJCWl0ZW1wdHJfZGVjb2RlKCZhdXhkZWNvZGVkLCBEYXR1bUdldEludDY0 KHRzX3ZhbCkpOworCQkJYXV4aW5kZXhjdXJzb3IgPSAmYXV4ZGVjb2RlZDsKKwkJfQorCQllbHNl CisJCXsKKwkJCWF1eGluZGV4Y3Vyc29yID0gTlVMTDsKKwkJfQorCisJCS8qCisJCSogSWYgdGhl IGF1eGlsaWFyeSBzb3J0IGlzIG5vdCB5ZXQgZW1wdHksIHdlIG5vdyB0cnkgdG8gc3luY2hyb25p emUKKwkJKiB0aGUgIm1haW4iIHNvcnQgY3Vyc29yIChpbmRleGN1cnNvcikgd2l0aCBhdXhpbmRl eGN1cnNvci4gV2UgYWR2YW5jZQorCQkqIHRoZSBtYWluIHNvcnQgY3Vyc29yIHVudGlsIHdlJ3Zl IHJlYWNoZWQgb3IgcGFzc2VkIHRoZSBhdXhpbGlhcnkgVElELgorCQkqLworCQlpZiAoIWF1eHR1 cGxlc29ydF9lbXB0eSkKKwkJeworCQkJLyoKKwkJCSAqIE1vdmUgdGhlIG1haW4gc29ydCBmb3J3 YXJkIHdoaWxlOgorCQkJICogICAoMSkgSXQncyBub3QgZXhoYXVzdGVkICh0dXBsZXNvcnRfZW1w dHkgPT0gZmFsc2UpLCBhbmQKKwkJCSAqICAgKDIpIEVpdGhlciBpbmRleGN1cnNvciBpcyBOVUxM IChmaXJzdCBpdGVyYXRpb24pIG9yCisJCQkgKiAgICAgICBpbmRleGN1cnNvciA8IGF1eGluZGV4 Y3Vyc29yIGluIFRJRCBvcmRlci4KKwkJCSAqLworCQkJd2hpbGUgKCF0dXBsZXNvcnRfZW1wdHkg JiYgKGluZGV4Y3Vyc29yID09IE5VTEwgfHwgLyogbnVsbCBvbiBmaXJzdCB0aW1lIGhlcmUgKi8K KwkJCQkJCUl0ZW1Qb2ludGVyQ29tcGFyZShpbmRleGN1cnNvciwgYXV4aW5kZXhjdXJzb3IpIDwg MCkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBHZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIG1haW4g c29ydC4gSWYgaXQncyBlbXB0eSwKKwkJCQkgKiB3ZSBzZXQgaW5kZXhjdXJzb3IgdG8gTlVMTC4K KwkJCQkgKi8KKwkJCQl0dXBsZXNvcnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKG1haW4s IHRydWUsCisJCQkJCQkJCQkJCQkJICBmYWxzZSwgJnRzX3ZhbCwgJnRzX2lzbnVsbCwKKwkJCQkJ CQkJCQkJCQkgIE5VTEwpOworCQkJCUFzc2VydCh0dXBsZXNvcnRfZW1wdHkgfHwgIXRzX2lzbnVs bCk7CisKKwkJCQlpZiAoIXR1cGxlc29ydF9lbXB0eSkKKwkJCQl7CisJCQkJCWl0ZW1wdHJfZGVj b2RlKCZkZWNvZGVkLCBEYXR1bUdldEludDY0KHRzX3ZhbCkpOworCQkJCQlpbmRleGN1cnNvciA9 ICZkZWNvZGVkOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpbmRleGN1cnNvciA9IE5V TEw7CisJCQkJfQorCisJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKwkJCX0KKworCQkJLyoK KwkJCSAqIE5vdywgaWYgZWl0aGVyOgorCQkJICogIC0gdGhlIG1haW4gc29ydCBpcyBlbXB0eSwg b3IKKwkJCSAqICAtIGluZGV4Y3Vyc29yID4gYXV4aW5kZXhjdXJzb3IsCisJCQkgKgorCQkJICog dGhlbiBhdXhpbmRleGN1cnNvciBpZGVudGlmaWVzIGEgVElEIHRoYXQgZG9lc24ndCBhcHBlYXIg aW4KKwkJCSAqIHRoZSBtYWluIHNvcnQuIFdlIGxpa2VseSBuZWVkIHRvIGluc2VydCBpdAorCQkJ ICogaW50byB0aGUgdGFyZ2V0IGluZGV4IGlmIGl04oCZcyB2aXNpYmxlIGluIHRoZSBoZWFwLgor CQkJICovCisJCQlpZiAodHVwbGVzb3J0X2VtcHR5IHx8IEl0ZW1Qb2ludGVyQ29tcGFyZShpbmRl eGN1cnNvciwgYXV4aW5kZXhjdXJzb3IpID4gMCkKKwkJCXsKKwkJCQl0dXBsZXN0b3JlX3B1dGRh dHVtKHN0b3JlLCBJbnQ2NEdldERhdHVtKGl0ZW1wdHJfZW5jb2RlKGF1eGluZGV4Y3Vyc29yKSkp OworCQkJCW51bSsrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIG51bTsKK30KKwordHlwZWRl ZiBzdHJ1Y3QgVmFsaWRhdGVJbmRleFNjYW5TdGF0ZQoreworCVR1cGxlc3RvcmVzdGF0ZQkJKnN0 b3JlOworCUJsb2NrTnVtYmVyCQkJcHJldl9ibG9ja19udW1iZXI7CisJT2Zmc2V0TnVtYmVyCQlw cmV2X29mZl9vZmZzZXRfbnVtYmVyOworfSBWYWxpZGF0ZUluZGV4U2NhblN0YXRlOworCisvKgor ICogVGhpcyBpcyBSZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBpbXBsZW1lbnRhdGlvbiB3aGljaCB3 b3JrcyBhcyBmb2xsb3dzOgorICoKKyAqIDEpIEl0IGl0ZXJhdGVzIG92ZXIgYSBzb3J0ZWQgdHVw bGVzdG9yZSwgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGFuIGVuY29kZWQKKyAqICAgIEl0ZW1Qb2lu dGVyCisgKgorICogMikgSXQgcmV0dXJucyB0aGUgY3VycmVudCBCbG9ja051bWJlciBhbmQgY29s bGVjdHMgYWxsIE9mZnNldE51bWJlcnMKKyAqICAgIGZvciB0aGF0IGJsb2NrIGluIHBlcl9idWZm ZXJfZGF0YS4KKyAqCisgKiAzKSBPbmNlIHRoZSBjb2RlIGVuY291bnRlcnMgYSBuZXcgQmxvY2tO dW1iZXIsIGl0IHN0b3BzIHJlYWRpbmcgbW9yZQorICogICAgb2Zmc2V0cyBhbmQgc2F2ZXMgdGhl IE9mZnNldE51bWJlciBvZiB0aGUgbmV3IGJsb2NrIGZvciB0aGUgbmV4dCBjYWxsLgorICoKKyAq IDQpIFRoZSBsaXN0IG9mIG9mZnNldHMgZm9yIGEgYmxvY2sgaXMgYWx3YXlzIHRlcm1pbmF0ZWQg d2l0aCBJbnZhbGlkT2Zmc2V0TnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5k ZWQgdG8gYmUgcmVwZWF0ZWRseSBjYWxsZWQsIGVhY2ggdGltZSByZXR1cm5pbmcKKyAqIHRoZSBu ZXh0IGJsb2NrIGFuZCBpdHMgY29ycmVzcG9uZGluZyBzZXQgb2Ygb2Zmc2V0cy4KKyAqLworc3Rh dGljIEJsb2NrTnVtYmVyCitoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9yZWFkX3N0cmVhbV9u ZXh0KAorCQkJCQkJCQkgIFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJICB2b2lkICp2b2lk X2NhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJICB2b2lkICp2b2lkX3Blcl9idWZmZXJf ZGF0YQorCQkJCQkJCQkgICkKK3sKKwlib29sIHNob3VkX2ZyZWU7CisJRGF0dW0gZGF0dW07CisJ QmxvY2tOdW1iZXIgcmVzdWx0ID0gSW52YWxpZEJsb2NrTnVtYmVyOworCWludCBpID0gMDsKKwor CS8qCisJICogUmV0cmlldmUgdGhlIHNwZWNpYWxpemVkIGNhbGxiYWNrIHN0YXRlIGFuZCB0aGUg b3V0cHV0IGJ1ZmZlci4KKwkgKiBjYWxsYmFja19wcml2YXRlX2RhdGEga2VlcHMgdHJhY2sgb2Yg dGhlIHByZXZpb3VzIGJsb2NrIGFuZCBvZmZzZXQKKwkgKiBmcm9tIGEgcHJpb3IgaW52b2NhdGlv biwgaWYgYW55LgorCSAqLworCVZhbGlkYXRlSW5kZXhTY2FuU3RhdGUgKmNhbGxiYWNrX3ByaXZh dGVfZGF0YSA9IHZvaWRfY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCU9mZnNldE51bWJlciAqcGVy X2J1ZmZlcl9kYXRhID0gdm9pZF9wZXJfYnVmZmVyX2RhdGE7CisKKwkvKgorCSAqIElmIHRoZXJl IGlzIGEgImxlZnRvdmVyIiBvZmZzZXQgbnVtYmVyIGZyb20gdGhlIHByZXZpb3VzIGludm9jYXRp b24sCisJICogaXQgbWVhbnMgd2UgaGFkIHN3aXRjaGVkIHRvIGEgbmV3IGJsb2NrIGluIHRoZSBt aWRkbGUgb2YgdGhlIGxhc3QgY2FsbC4KKwkgKiBXZSBwbGFjZSB0aGF0IGxlZnRvdmVyIG9mZnNl dCBudW1iZXIgaW50byB0aGUgYnVmZmVyIGZpcnN0LgorCSAqLworCWlmIChjYWxsYmFja19wcml2 YXRlX2RhdGEtPnByZXZfb2ZmX29mZnNldF9udW1iZXIgIT0gSW52YWxpZE9mZnNldE51bWJlcikK Kwl7CisJCUFzc2VydChjYWxsYmFja19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyICE9 IEludmFsaWRCbG9ja051bWJlcik7CisJCS8qCisJCSAqICdyZXN1bHQnIGlzIHRoZSBibG9jayBu dW1iZXIgdG8gcmV0dXJuLiBXZSBzZXQgaXQgdG8gdGhlIGJsb2NrCisJCSAqIGZyb20gdGhlIHBy ZXZpb3VzIGxlZnRvdmVyIG9mZnNldC4KKwkJICovCisJCXJlc3VsdCA9IGNhbGxiYWNrX3ByaXZh dGVfZGF0YS0+cHJldl9ibG9ja19udW1iZXI7CisJCS8qIFBsYWNlIGxlZnRvdmVyIG9mZnNldCBu dW1iZXIgaW4gdGhlIG91dHB1dCBidWZmZXIuICovCisJCXBlcl9idWZmZXJfZGF0YVtpKytdID0g Y2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZl9vZmZzZXRfbnVtYmVyOworCQkvKgorCQkg KiBDbGVhciB0aGUgbGVmdG92ZXIgb2Zmc2V0IG51bWJlciBzbyBpdCB3b24ndCBiZSByZXVzZWQg dW5sZXNzCisJCSAqIHdlIGVuY291bnRlciBhbm90aGVyIGJsb2NrIGNoYW5nZS4KKwkJICovCisJ CWNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9vZmZfb2Zmc2V0X251bWJlciA9IEludmFsaWRP ZmZzZXROdW1iZXI7CisJfQorCisJLyoKKwkgKiBSZWFkIGZyb20gdGhlIHR1cGxlc3RvcmUgdW50 aWwgd2UgZWl0aGVyIHJ1biBvdXQgb2YgdHVwbGVzIG9yIHdlCisJICogZW5jb3VudGVyIGEgYmxv Y2sgY2hhbmdlLiBGb3IgZWFjaCB0dXBsZToKKwkgKgorCSAqICAgMSkgRGVjb2RlIGl0cyBibG9j ay9vZmZzZXQgZnJvbSB0aGUgRGF0dW0uCisJICogICAyKSBJZiBpdCdzIHRoZSBmaXJzdCB0aW1l IGluIHRoaXMgY2FsbCAocHJldl9ibG9ja19udW1iZXIgPT0gSW52YWxpZEJsb2NrTnVtYmVyKSwK KwkgKiAgICAgIGluaXRpYWxpemUgcHJldl9ibG9ja19udW1iZXIuCisJICogICAzKSBJZiB0aGUg YmxvY2sgbnVtYmVyIG1hdGNoZXMgdGhlIGN1cnJlbnQgYmxvY2ssIGNvbGxlY3QgdGhlIG9mZnNl dC4KKwkgKiAgIDQpIElmIHRoZSBibG9jayBudW1iZXIgZGlmZmVycywgc2F2ZSB0aGF0IG9mZnNl dCBhcyBsZWZ0b3ZlciBhbmQgYnJlYWsKKwkgKiAgICAgIHNvIHRoYXQgdGhlIG5leHQgY2FsbCBj YW4gaGFuZGxlIHRoZSBuZXcgYmxvY2suCisJICovCisJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0ZGF0 dW0oY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5zdG9yZSwgdHJ1ZSwgJnNob3VkX2ZyZWUsICZkYXR1 bSkpCisJeworCQlCbG9ja051bWJlciBuZXh0X2Jsb2NrX251bWJlcjsKKwkJSXRlbVBvaW50ZXJE YXRhIG5leHRfZGF0YTsKKworCQkvKiBEZWNvZGUgdGhlIGRhdHVtIGludG8gYW4gSXRlbVBvaW50 ZXIgKGJsb2NrICsgb2Zmc2V0KS4gKi8KKwkJaXRlbXB0cl9kZWNvZGUoJm5leHRfZGF0YSwgRGF0 dW1HZXRJbnQ2NChkYXR1bSkpOworCQluZXh0X2Jsb2NrX251bWJlciA9IEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIoJm5leHRfZGF0YSk7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZW4ndCBzZXQg YSBibG9jayBudW1iZXIgeWV0IHRoaXMgcm91bmQsIGluaXRpYWxpemUgaXQKKwkJICogdXNpbmcg dGhlIGZpcnN0IHR1cGxlIHdlIHJlYWQuCisJCSAqLworCQlpZiAoY2FsbGJhY2tfcHJpdmF0ZV9k YXRhLT5wcmV2X2Jsb2NrX251bWJlciA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCisJCQljYWxsYmFj a19wcml2YXRlX2RhdGEtPnByZXZfYmxvY2tfbnVtYmVyID0gbmV4dF9ibG9ja19udW1iZXI7CisK KwkJLyoKKwkJICogQWx3YXlzIHNldCB0aGUgcmVzdWx0IHRvIGJlIHRoZSAiY3VycmVudCIgYmxv Y2sgbnVtYmVyCisJCSAqIHdlIGFyZSBmaWxsaW5nIG9mZnNldHMgZm9yLgorCQkgKi8KKwkJcmVz dWx0ID0gY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlcjsKKworCQkvKgor CQkgKiBJZiB0aGlzIHR1cGxlIGlzIGZyb20gdGhlIHNhbWUgYmxvY2ssIGp1c3Qgc3RvcmUgaXRz IG9mZnNldAorCQkgKiBpbiBvdXIgcGVyX2J1ZmZlcl9kYXRhIGFycmF5LgorCQkgKi8KKwkJaWYg KG5leHRfYmxvY2tfbnVtYmVyID09IGNhbGxiYWNrX3ByaXZhdGVfZGF0YS0+cHJldl9ibG9ja19u dW1iZXIpCisJCXsKKwkJCXBlcl9idWZmZXJfZGF0YVtpKytdID0gSXRlbVBvaW50ZXJHZXRPZmZz ZXROdW1iZXIoJm5leHRfZGF0YSk7CisKKwkJCS8qIEZyZWUgdGhlIGRhdHVtIGlmIG5lZWRlZC4g Ki8KKwkJCWlmIChzaG91ZF9mcmVlKQorCQkJCXBmcmVlKERhdHVtR2V0UG9pbnRlcihkYXR1bSkp OworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZSBibG9jayBqdXN0IGNoYW5n ZWQsIHN0b3JlIHRoZSBvZmZzZXQgb2YgdGhlIG5ldyBibG9jaworCQkJICogYXMgbGVmdG92ZXIg Zm9yIHRoZSBuZXh0IGludm9jYXRpb24gYW5kIGJyZWFrIG91dC4KKwkJCSAqLworCQkJY2FsbGJh Y2tfcHJpdmF0ZV9kYXRhLT5wcmV2X2Jsb2NrX251bWJlciA9IG5leHRfYmxvY2tfbnVtYmVyOwor CQkJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLT5wcmV2X29mZl9vZmZzZXRfbnVtYmVyID0gIEl0ZW1Q b2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZuZXh0X2RhdGEpOworCisJCQkvKiBGcmVlIHRoZSBkYXR1 bSBpZiBuZWVkZWQuICovCisJCQlpZiAoc2hvdWRfZnJlZSkKKwkJCQlwZnJlZShEYXR1bUdldFBv aW50ZXIoZGF0dW0pKTsKKworCQkJLyogQnJlYWsgdG8gbGV0IHRoZSBuZXh0IGNhbGwgaGFuZGxl IHRoZSBuZXcgYmxvY2suICovCisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogVGVybWlu YXRlIHRoZSBsaXN0IG9mIG9mZnNldHMgZm9yIHRoaXMgYmxvY2sgd2l0aCBhbiBJbnZhbGlkT2Zm c2V0TnVtYmVyLgorCSAqLworCXBlcl9idWZmZXJfZGF0YVtpXSA9IEludmFsaWRPZmZzZXROdW1i ZXI7CisJcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIHZvaWQKIGhlYXBhbV9pbmRleF92YWxp ZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCSAgIFJlbGF0aW9uIGluZGV4 UmVsYXRpb24sCiAJCQkJCQkgICBJbmRleEluZm8gKmluZGV4SW5mbywKIAkJCQkJCSAgIFNuYXBz aG90IHNuYXBzaG90LAotCQkJCQkJICAgVmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSkKKwkJCQkJ CSAgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCisJCQkJCQkgICBWYWxpZGF0ZUluZGV4U3Rh dGUgKmF1eFN0YXRlKQogewotCVRhYmxlU2NhbkRlc2Mgc2NhbjsKLQlIZWFwU2NhbkRlc2MgaHNj YW47Ci0JSGVhcFR1cGxlCWhlYXBUdXBsZTsKIAlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlT XTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwotCUV4cHJTdGF0ZSAgKnByZWRpY2F0 ZTsKLQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlFU3RhdGUJICAgKmVzdGF0ZTsKLQlFeHByQ29u dGV4dCAqZWNvbnRleHQ7Ci0JQmxvY2tOdW1iZXIgcm9vdF9ibGtubyA9IEludmFsaWRCbG9ja051 bWJlcjsKLQlPZmZzZXROdW1iZXIgcm9vdF9vZmZzZXRzW01heEhlYXBUdXBsZXNQZXJQYWdlXTsK LQlib29sCQlpbl9pbmRleFtNYXhIZWFwVHVwbGVzUGVyUGFnZV07Ci0JQmxvY2tOdW1iZXIgcHJl dmlvdXNfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KLQkvKiBzdGF0ZSB2YXJpYWJsZXMg Zm9yIHRoZSBtZXJnZSAqLwotCUl0ZW1Qb2ludGVyIGluZGV4Y3Vyc29yID0gTlVMTDsKLQlJdGVt UG9pbnRlckRhdGEgZGVjb2RlZDsKLQlib29sCQl0dXBsZXNvcnRfZW1wdHkgPSBmYWxzZTsKKwor CVR1cGxlVGFibGVTbG90ICAqc2xvdDsKKwlFU3RhdGUJCQkqZXN0YXRlOworCUV4cHJDb250ZXh0 CQkqZWNvbnRleHQ7CisJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5ID0gR2V0QWNjZXNz U3RyYXRlZ3koQkFTX0JVTEtSRUFEKTsKKworCWludAkJCQludW1fdG9fY2hlY2s7CisJVHVwbGVz dG9yZXN0YXRlICp0dXBsZXNfZm9yX2NoZWNrOworCVZhbGlkYXRlSW5kZXhTY2FuU3RhdGUgY2Fs bGJhY2tfcHJpdmF0ZV9kYXRhOworCisJQnVmZmVyIGJ1ZjsKKwlPZmZzZXROdW1iZXIqIHR1cGxl czsKKwlSZWFkU3RyZWFtICpyZWFkX3N0cmVhbTsKKworCS8qIFVzZSAxMCUgb2YgbWVtb3J5IGZv ciB0dXBsZSBzdG9yZS4gKi8KKwlpbnQJCXN0b3JlX3dvcmtfbWVtX3BhcnQgPSBtYWludGVuYW5j ZV93b3JrX21lbSAvIDEwOworCisJLyoKKwkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4IHZhbHVlcyBm b3IgdGhlIHNvcnQsIHJhdGhlciB0aGFuIGRpcmVjdGx5IHNvcnRpbmcKKwkgKiBpdGVtIHBvaW50 ZXJzLiAgVGhpcyBjYW4gYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIsIHByaW1hcmlseSBiZWNhdXNl IFRJRAorCSAqIGlzIGEgcGFzcy1ieS1yZWZlcmVuY2UgdHlwZSBvbiBhbGwgcGxhdGZvcm1zLCB3 aGVyZWFzIGludDggaXMKKwkgKiBwYXNzLWJ5LXZhbHVlIG9uIG1vc3QgcGxhdGZvcm1zLgorCSAq LworCXR1cGxlc19mb3JfY2hlY2sgPSAgdHVwbGVzdG9yZV9iZWdpbl9kYXR1bShJTlQ4T0lELCBm YWxzZSwgZmFsc2UsIHN0b3JlX3dvcmtfbWVtX3BhcnQpOwogCiAJLyoKIAkgKiBzYW5pdHkgY2hl Y2tzCiAJICovCiAJQXNzZXJ0KE9pZElzVmFsaWQoaW5kZXhSZWxhdGlvbi0+cmRfcmVsLT5yZWxh bSkpOwogCi0JLyoKLQkgKiBOZWVkIGFuIEVTdGF0ZSBmb3IgZXZhbHVhdGlvbiBvZiBpbmRleCBl eHByZXNzaW9ucyBhbmQgcGFydGlhbC1pbmRleAotCSAqIHByZWRpY2F0ZXMuICBBbHNvIGEgc2xv dCB0byBob2xkIHRoZSBjdXJyZW50IHR1cGxlLgotCSAqLworCW51bV90b19jaGVjayA9IGhlYXBh bV9pbmRleF92YWxpZGF0ZV90dXBsZXNvcnRfZGlmZmVyZW5jZShzdGF0ZS0+dHVwbGVzb3J0LAor CQkJCQkJCQkJCQkJCQkgYXV4U3RhdGUtPnR1cGxlc29ydCwKKwkJCQkJCQkJCQkJCQkJIHR1cGxl c19mb3JfY2hlY2spOworCisJLyogSXQgaXMgb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGNsb3NlIHR1 cGxlIHNvcnQgYXMgZmFzdCBhcyB3ZSBjYW4gKi8KKwl0dXBsZXNvcnRfZW5kKHN0YXRlLT50dXBs ZXNvcnQpOworCXR1cGxlc29ydF9lbmQoYXV4U3RhdGUtPnR1cGxlc29ydCk7CisKKwlzdGF0ZS0+ dHVwbGVzb3J0ID0gYXV4U3RhdGUtPnR1cGxlc29ydCA9IE5VTEw7CisKIAllc3RhdGUgPSBDcmVh dGVFeGVjdXRvclN0YXRlKCk7CiAJZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVz dGF0ZSk7CiAJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2Ny KGhlYXBSZWxhdGlvbiksCi0JCQkJCQkJCQkmVFRTT3BzSGVhcFR1cGxlKTsKKwkJCQkJCQkJCSZU VFNPcHNCdWZmZXJIZWFwVHVwbGUpOwogCiAJLyogQXJyYW5nZSBmb3IgZWNvbnRleHQncyBzY2Fu IHR1cGxlIHRvIGJlIHRoZSB0dXBsZSB1bmRlciB0ZXN0ICovCiAJZWNvbnRleHQtPmVjeHRfc2Nh bnR1cGxlID0gc2xvdDsKIAotCS8qIFNldCB1cCBleGVjdXRpb24gc3RhdGUgZm9yIHByZWRpY2F0 ZSwgaWYgYW55LiAqLwotCXByZWRpY2F0ZSA9IEV4ZWNQcmVwYXJlUXVhbChpbmRleEluZm8tPmlp X1ByZWRpY2F0ZSwgZXN0YXRlKTsKKwljYWxsYmFja19wcml2YXRlX2RhdGEucHJldl9ibG9ja19u dW1iZXIgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLnN0b3Jl ID0gdHVwbGVzX2Zvcl9jaGVjazsKKwljYWxsYmFja19wcml2YXRlX2RhdGEucHJldl9vZmZfb2Zm c2V0X251bWJlciA9IEludmFsaWRPZmZzZXROdW1iZXI7CiAKLQkvKgotCSAqIFByZXBhcmUgZm9y IHNjYW4gb2YgdGhlIGJhc2UgcmVsYXRpb24uICBXZSBuZWVkIGp1c3QgdGhvc2UgdHVwbGVzCi0J ICogc2F0aXNmeWluZyB0aGUgcGFzc2VkLWluIHJlZmVyZW5jZSBzbmFwc2hvdC4gIFdlIG11c3Qg ZGlzYWJsZSBzeW5jc2NhbgotCSAqIGhlcmUsIGJlY2F1c2UgaXQncyBjcml0aWNhbCB0aGF0IHdl IHJlYWQgZnJvbSBibG9jayB6ZXJvIGZvcndhcmQgdG8KLQkgKiBtYXRjaCB0aGUgc29ydGVkIFRJ RHMuCi0JICovCi0Jc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChoZWFwUmVsYXRpb24sCS8q IHJlbGF0aW9uICovCi0JCQkJCQkJCSBzbmFwc2hvdCwJLyogc25hcHNob3QgKi8KLQkJCQkJCQkJ IDAsIC8qIG51bWJlciBvZiBrZXlzICovCi0JCQkJCQkJCSBOVUxMLAkvKiBzY2FuIGtleSAqLwot CQkJCQkJCQkgdHJ1ZSwJLyogYnVmZmVyIGFjY2VzcyBzdHJhdGVneSBPSyAqLwotCQkJCQkJCQkg ZmFsc2UpOwkvKiBzeW5jc2NhbiBub3QgT0sgKi8KLQloc2NhbiA9IChIZWFwU2NhbkRlc2MpIHNj YW47CisJcmVhZF9zdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVB TV9NQUlOVEVOQU5DRSB8IFJFQURfU1RSRUFNX1VTRV9CQVRDSElORywKKwkJCQkJCQkJCQkJCQkJ IGJzdHJhdGVneSwKKwkJCQkJCQkJCQkJCQkJIGhlYXBSZWxhdGlvbiwgTUFJTl9GT1JLTlVNLAor CQkJCQkJCQkJCQkJCQkgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fcmVhZF9zdHJlYW1fbmV4 dCwKKwkJCQkJCQkJCQkJCQkJICZjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJCQkJ CSAoTWF4SGVhcFR1cGxlc1BlclBhZ2UgKyAxKSAqIHNpemVvZihPZmZzZXROdW1iZXIpKTsKIAot CXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfU0NBTl9CTE9DS1NfVE9UQUws Ci0JCQkJCQkJCSBoc2Nhbi0+cnNfbmJsb2Nrcyk7CisJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9w YXJhbShQUk9HUkVTU19DUkVBVEVJRFhfVFVQTEVTX1RPVEFMLCBudW1fdG9fY2hlY2spOworCXBn c3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1RVUExFU19ET05F LCAwKTsKIAotCS8qCi0JICogU2NhbiBhbGwgdHVwbGVzIG1hdGNoaW5nIHRoZSBzbmFwc2hvdC4K LQkgKi8KLQl3aGlsZSAoKGhlYXBUdXBsZSA9IGhlYXBfZ2V0bmV4dChzY2FuLCBGb3J3YXJkU2Nh bkRpcmVjdGlvbikpICE9IE5VTEwpCisJd2hpbGUgKChidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1 ZmZlcihyZWFkX3N0cmVhbSwgKHZvaWQqKSAmdHVwbGVzKSkgIT0gSW52YWxpZEJ1ZmZlcikKIAl7 Ci0JCUl0ZW1Qb2ludGVyIGhlYXBjdXJzb3IgPSAmaGVhcFR1cGxlLT50X3NlbGY7Ci0JCUl0ZW1Q b2ludGVyRGF0YSByb290VHVwbGU7Ci0JCU9mZnNldE51bWJlciByb290X29mZm51bTsKKwkJSGVh cFR1cGxlRGF0YQloZWFwX3R1cGxlX2RhdGFbTWF4SGVhcFR1cGxlc1BlclBhZ2VdOworCQlpbnQg aTsKKwkJT2Zmc2V0TnVtYmVyIG9mZjsKKwkJQmxvY2tOdW1iZXIgYmxvY2tfbnVtYmVyOwogCiAJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJc3RhdGUtPmh0dXBzICs9IDE7CisJCUxvY2tC dWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCWJsb2NrX251bWJlciA9IEJ1ZmZlckdl dEJsb2NrTnVtYmVyKGJ1Zik7CiAKLQkJaWYgKChwcmV2aW91c19ibGtubyA9PSBJbnZhbGlkQmxv Y2tOdW1iZXIpIHx8Ci0JCQkoaHNjYW4tPnJzX2NibG9jayAhPSBwcmV2aW91c19ibGtubykpCisJ CWkgPSAwOworCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9mZnNldE51bWJl cikKIAkJewotCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19TQ0FOX0JM T0NLU19ET05FLAotCQkJCQkJCQkJCSBoc2Nhbi0+cnNfY2Jsb2NrKTsKLQkJCXByZXZpb3VzX2Js a25vID0gaHNjYW4tPnJzX2NibG9jazsKKwkJCUl0ZW1Qb2ludGVyRGF0YSB0aWQ7CisJCQlib29s CQlhbGxfZGVhZCwgZm91bmQ7CisJCQlJdGVtUG9pbnRlclNldCgmdGlkLCBibG9ja19udW1iZXIs IG9mZik7CisKKwkJCWZvdW5kID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcigmdGlkLCBoZWFwUmVs YXRpb24sIGJ1Ziwgc25hcHNob3QsCisJCQkJCQkJCQkJICAgJmhlYXBfdHVwbGVfZGF0YVtpXSwg JmFsbF9kZWFkLCB0cnVlKTsKKwkJCWlmICghZm91bmQpCisJCQkJSXRlbVBvaW50ZXJTZXRJbnZh bGlkKCZoZWFwX3R1cGxlX2RhdGFbaV0udF9zZWxmKTsKKwkJCWkrKzsKIAkJfQorCQlMb2NrQnVm ZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKIAotCQkvKgotCQkgKiBBcyBjb21tZW50ZWQg aW4gdGFibGVfaW5kZXhfYnVpbGRfc2Nhbiwgd2Ugc2hvdWxkIGluZGV4IGhlYXAtb25seQotCQkg KiB0dXBsZXMgdW5kZXIgdGhlIFRJRHMgb2YgdGhlaXIgcm9vdCB0dXBsZXM7IHNvIHdoZW4gd2Ug YWR2YW5jZSBvbnRvCi0JCSAqIGEgbmV3IGhlYXAgcGFnZSwgYnVpbGQgYSBtYXAgb2Ygcm9vdCBp dGVtIG9mZnNldHMgb24gdGhlIHBhZ2UuCi0JCSAqCi0JCSAqIFRoaXMgY29tcGxpY2F0ZXMgbWVy Z2luZyBhZ2FpbnN0IHRoZSB0dXBsZXNvcnQgb3V0cHV0OiB3ZSB3aWxsCi0JCSAqIHZpc2l0IHRo ZSBsaXZlIHR1cGxlcyBpbiBvcmRlciBieSB0aGVpciBvZmZzZXRzLCBidXQgdGhlIHJvb3QKLQkJ ICogb2Zmc2V0cyB0aGF0IHdlIG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSBpbmRleCBjb250 ZW50cyBtaWdodCBiZQotCQkgKiBvcmRlcmVkIGRpZmZlcmVudGx5LiAgU28gd2UgbWlnaHQgaGF2 ZSB0byAibG9vayBiYWNrIiB3aXRoaW4gdGhlCi0JCSAqIHR1cGxlc29ydCBvdXRwdXQsIGJ1dCBv bmx5IHdpdGhpbiB0aGUgY3VycmVudCBwYWdlLiAgV2UgaGFuZGxlIHRoYXQKLQkJICogYnkga2Vl cGluZyBhIGJvb2wgYXJyYXkgaW5faW5kZXhbXSBzaG93aW5nIGFsbCB0aGUKLQkJICogYWxyZWFk eS1wYXNzZWQtb3ZlciB0dXBsZXNvcnQgb3V0cHV0IFRJRHMgb2YgdGhlIGN1cnJlbnQgcGFnZS4g V2UKLQkJICogY2xlYXIgdGhhdCBhcnJheSBoZXJlLCB3aGVuIGFkdmFuY2luZyBvbnRvIGEgbmV3 IGhlYXAgcGFnZS4KLQkJICovCi0JCWlmIChoc2Nhbi0+cnNfY2Jsb2NrICE9IHJvb3RfYmxrbm8p CisJCWkgPSAwOworCQl3aGlsZSAoKG9mZiA9IHR1cGxlc1tpXSkgIT0gSW52YWxpZE9mZnNldE51 bWJlcikKIAkJewotCQkJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoaHNjYW4tPnJzX2NidWYp OwotCi0JCQlMb2NrQnVmZmVyKGhzY2FuLT5yc19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7Ci0J CQloZWFwX2dldF9yb290X3R1cGxlcyhwYWdlLCByb290X29mZnNldHMpOwotCQkJTG9ja0J1ZmZl cihoc2Nhbi0+cnNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQotCQkJbWVtc2V0KGluX2lu ZGV4LCAwLCBzaXplb2YoaW5faW5kZXgpKTsKLQotCQkJcm9vdF9ibGtubyA9IGhzY2FuLT5yc19j YmxvY2s7Ci0JCX0KLQotCQkvKiBDb252ZXJ0IGFjdHVhbCB0dXBsZSBUSUQgdG8gcm9vdCBUSUQg Ki8KLQkJcm9vdFR1cGxlID0gKmhlYXBjdXJzb3I7Ci0JCXJvb3Rfb2ZmbnVtID0gSXRlbVBvaW50 ZXJHZXRPZmZzZXROdW1iZXIoaGVhcGN1cnNvcik7Ci0KLQkJaWYgKEhlYXBUdXBsZUlzSGVhcE9u bHkoaGVhcFR1cGxlKSkKLQkJewotCQkJcm9vdF9vZmZudW0gPSByb290X29mZnNldHNbcm9vdF9v ZmZudW0gLSAxXTsKLQkJCWlmICghT2Zmc2V0TnVtYmVySXNWYWxpZChyb290X29mZm51bSkpCi0J CQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQp LAotCQkJCQkJIGVycm1zZ19pbnRlcm5hbCgiZmFpbGVkIHRvIGZpbmQgcGFyZW50IHR1cGxlIGZv ciBoZWFwLW9ubHkgdHVwbGUgYXQgKCV1LCV1KSBpbiB0YWJsZSBcIiVzXCIiLAotCQkJCQkJCQkJ CSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKGhlYXBjdXJzb3IpLAotCQkJCQkJCQkJCSBJdGVt UG9pbnRlckdldE9mZnNldE51bWJlcihoZWFwY3Vyc29yKSwKLQkJCQkJCQkJCQkgUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUoaGVhcFJlbGF0aW9uKSkpKTsKLQkJCUl0ZW1Qb2ludGVyU2V0T2Zmc2V0 TnVtYmVyKCZyb290VHVwbGUsIHJvb3Rfb2ZmbnVtKTsKLQkJfQotCi0JCS8qCi0JCSAqICJtZXJn ZSIgYnkgc2tpcHBpbmcgdGhyb3VnaCB0aGUgaW5kZXggdHVwbGVzIHVudGlsIHdlIGZpbmQgb3Ig cGFzcwotCQkgKiB0aGUgY3VycmVudCByb290IHR1cGxlLgotCQkgKi8KLQkJd2hpbGUgKCF0dXBs ZXNvcnRfZW1wdHkgJiYKLQkJCSAgICghaW5kZXhjdXJzb3IgfHwKLQkJCQlJdGVtUG9pbnRlckNv bXBhcmUoaW5kZXhjdXJzb3IsICZyb290VHVwbGUpIDwgMCkpCi0JCXsKLQkJCURhdHVtCQl0c192 YWw7Ci0JCQlib29sCQl0c19pc251bGw7Ci0KLQkJCWlmIChpbmRleGN1cnNvcikKKwkJCWlmIChJ dGVtUG9pbnRlcklzVmFsaWQoJmhlYXBfdHVwbGVfZGF0YVtpXS50X3NlbGYpKQogCQkJeworCQkJ CUl0ZW1Qb2ludGVyRGF0YSByb290X3RpZDsKKwkJCQlJdGVtUG9pbnRlclNldCgmcm9vdF90aWQs IGJsb2NrX251bWJlciwgb2ZmKTsKKworCQkJCS8qIFJlc2V0IHRoZSBwZXItdHVwbGUgbWVtb3J5 IGNvbnRleHQgZm9yIHRoZSBuZXh0IGZldGNoLiAqLworCQkJCU1lbW9yeUNvbnRleHRSZXNldChl Y29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5KTsKKwkJCQlFeGVjU3RvcmVCdWZmZXJIZWFw VHVwbGUoJmhlYXBfdHVwbGVfZGF0YVtpXSwgc2xvdCwgYnVmKTsKKworCQkJCS8qIENvbXB1dGUg dGhlIGtleSB2YWx1ZXMgYW5kIG51bGwgZmxhZ3MgZm9yIHRoaXMgdHVwbGUuICovCisJCQkJRm9y bUluZGV4RGF0dW0oaW5kZXhJbmZvLAorCQkJCQkJCSAgIHNsb3QsCisJCQkJCQkJICAgZXN0YXRl LAorCQkJCQkJCSAgIHZhbHVlcywKKwkJCQkJCQkgICBpc251bGwpOworCiAJCQkJLyoKLQkJCQkg KiBSZW1lbWJlciBpbmRleCBpdGVtcyBzZWVuIGVhcmxpZXIgb24gdGhlIGN1cnJlbnQgaGVhcCBw YWdlCisJCQkJICogSW5zZXJ0IHRoZSB0dXBsZSBpbnRvIHRoZSB0YXJnZXQgaW5kZXguCiAJCQkJ ICovCi0JCQkJaWYgKEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoaW5kZXhjdXJzb3IpID09IHJv b3RfYmxrbm8pCi0JCQkJCWluX2luZGV4W0l0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKGluZGV4 Y3Vyc29yKSAtIDFdID0gdHJ1ZTsKKwkJCQlpbmRleF9pbnNlcnQoaW5kZXhSZWxhdGlvbiwKKwkJ CQkJCQkgdmFsdWVzLAorCQkJCQkJCSBpc251bGwsCisJCQkJCQkJICZyb290X3RpZCwgLyogaW5z ZXJ0IHJvb3QgdHVwbGUgKi8KKwkJCQkJCQkgaGVhcFJlbGF0aW9uLAorCQkJCQkJCSBpbmRleElu Zm8tPmlpX1VuaXF1ZSA/CisJCQkJCQkJIFVOSVFVRV9DSEVDS19ZRVMgOiBVTklRVUVfQ0hFQ0tf Tk8sCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBpbmRleEluZm8pOwogCQkJfQogCi0JCQl0dXBs ZXNvcnRfZW1wdHkgPSAhdHVwbGVzb3J0X2dldGRhdHVtKHN0YXRlLT50dXBsZXNvcnQsIHRydWUs Ci0JCQkJCQkJCQkJCQkgIGZhbHNlLCAmdHNfdmFsLCAmdHNfaXNudWxsLAotCQkJCQkJCQkJCQkJ ICBOVUxMKTsKLQkJCUFzc2VydCh0dXBsZXNvcnRfZW1wdHkgfHwgIXRzX2lzbnVsbCk7Ci0JCQlp ZiAoIXR1cGxlc29ydF9lbXB0eSkKLQkJCXsKLQkJCQlpdGVtcHRyX2RlY29kZSgmZGVjb2RlZCwg RGF0dW1HZXRJbnQ2NCh0c192YWwpKTsKLQkJCQlpbmRleGN1cnNvciA9ICZkZWNvZGVkOwotCQkJ fQotCQkJZWxzZQotCQkJewotCQkJCS8qIEJlIHRpZHkgKi8KLQkJCQlpbmRleGN1cnNvciA9IE5V TEw7Ci0JCQl9CisJCQlzdGF0ZS0+aHR1cHMgKz0gMTsKKwkJCXBnc3RhdF9wcm9ncmVzc19pbmNy X3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9UVVBMRVNfRE9ORSwgMSk7CisJCQlpKys7CiAJCX0K IAotCQkvKgotCQkgKiBJZiB0aGUgdHVwbGVzb3J0IGhhcyBvdmVyc2hvdCAqYW5kKiB3ZSBkaWRu J3Qgc2VlIGEgbWF0Y2ggZWFybGllciwKLQkJICogdGhlbiB0aGlzIHR1cGxlIGlzIG1pc3Npbmcg ZnJvbSB0aGUgaW5kZXgsIHNvIGluc2VydCBpdC4KLQkJICovCi0JCWlmICgodHVwbGVzb3J0X2Vt cHR5IHx8Ci0JCQkgSXRlbVBvaW50ZXJDb21wYXJlKGluZGV4Y3Vyc29yLCAmcm9vdFR1cGxlKSA+ IDApICYmCi0JCQkhaW5faW5kZXhbcm9vdF9vZmZudW0gLSAxXSkKLQkJewotCQkJTWVtb3J5Q29u dGV4dFJlc2V0KGVjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnkpOwotCi0JCQkvKiBTZXQg dXAgZm9yIHByZWRpY2F0ZSBvciBleHByZXNzaW9uIGV2YWx1YXRpb24gKi8KLQkJCUV4ZWNTdG9y ZUhlYXBUdXBsZShoZWFwVHVwbGUsIHNsb3QsIGZhbHNlKTsKLQotCQkJLyoKLQkJCSAqIEluIGEg cGFydGlhbCBpbmRleCwgZGlzY2FyZCB0dXBsZXMgdGhhdCBkb24ndCBzYXRpc2Z5IHRoZQotCQkJ ICogcHJlZGljYXRlLgotCQkJICovCi0JCQlpZiAocHJlZGljYXRlICE9IE5VTEwpCi0JCQl7Ci0J CQkJaWYgKCFFeGVjUXVhbChwcmVkaWNhdGUsIGVjb250ZXh0KSkKLQkJCQkJY29udGludWU7Ci0J CQl9Ci0KLQkJCS8qCi0JCQkgKiBGb3IgdGhlIGN1cnJlbnQgaGVhcCB0dXBsZSwgZXh0cmFjdCBh bGwgdGhlIGF0dHJpYnV0ZXMgd2UgdXNlCi0JCQkgKiBpbiB0aGlzIGluZGV4LCBhbmQgbm90ZSB3 aGljaCBhcmUgbnVsbC4gIFRoaXMgYWxzbyBwZXJmb3JtcwotCQkJICogZXZhbHVhdGlvbiBvZiBh bnkgZXhwcmVzc2lvbnMgbmVlZGVkLgotCQkJICovCi0JCQlGb3JtSW5kZXhEYXR1bShpbmRleElu Zm8sCi0JCQkJCQkgICBzbG90LAotCQkJCQkJICAgZXN0YXRlLAotCQkJCQkJICAgdmFsdWVzLAot CQkJCQkJICAgaXNudWxsKTsKLQotCQkJLyoKLQkJCSAqIFlvdSdkIHRoaW5rIHdlIHNob3VsZCBn byBhaGVhZCBhbmQgYnVpbGQgdGhlIGluZGV4IHR1cGxlIGhlcmUsCi0JCQkgKiBidXQgc29tZSBp bmRleCBBTXMgd2FudCB0byBkbyBmdXJ0aGVyIHByb2Nlc3Npbmcgb24gdGhlIGRhdGEKLQkJCSAq IGZpcnN0LiBTbyBwYXNzIHRoZSB2YWx1ZXNbXSBhbmQgaXNudWxsW10gYXJyYXlzLCBpbnN0ZWFk LgotCQkJICovCi0KLQkJCS8qCi0JCQkgKiBJZiB0aGUgdHVwbGUgaXMgYWxyZWFkeSBjb21taXR0 ZWQgZGVhZCwgeW91IG1pZ2h0IHRoaW5rIHdlCi0JCQkgKiBjb3VsZCBzdXBwcmVzcyB1bmlxdWVu ZXNzIGNoZWNraW5nLCBidXQgdGhpcyBpcyBubyBsb25nZXIgdHJ1ZQotCQkJICogaW4gdGhlIHBy ZXNlbmNlIG9mIEhPVCwgYmVjYXVzZSB0aGUgaW5zZXJ0IGlzIGFjdHVhbGx5IGEgcHJveHkKLQkJ CSAqIGZvciBhIHVuaXF1ZW5lc3MgY2hlY2sgb24gdGhlIHdob2xlIEhPVC1jaGFpbi4gIFRoYXQg aXMsIHRoZQotCQkJICogdHVwbGUgd2UgaGF2ZSBoZXJlIGNvdWxkIGJlIGRlYWQgYmVjYXVzZSBp dCB3YXMgYWxyZWFkeQotCQkJICogSE9ULXVwZGF0ZWQsIGFuZCBpZiBzbyB0aGUgdXBkYXRpbmcg dHJhbnNhY3Rpb24gd2lsbCBub3QgaGF2ZQotCQkJICogdGhvdWdodCBpdCBzaG91bGQgaW5zZXJ0 IGluZGV4IGVudHJpZXMuICBUaGUgaW5kZXggQU0gd2lsbAotCQkJICogY2hlY2sgdGhlIHdob2xl IEhPVC1jaGFpbiBhbmQgY29ycmVjdGx5IGRldGVjdCBhIGNvbmZsaWN0IGlmCi0JCQkgKiB0aGVy ZSBpcyBvbmUuCi0JCQkgKi8KLQotCQkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRpb24sCi0JCQkJ CQkgdmFsdWVzLAotCQkJCQkJIGlzbnVsbCwKLQkJCQkJCSAmcm9vdFR1cGxlLAotCQkJCQkJIGhl YXBSZWxhdGlvbiwKLQkJCQkJCSBpbmRleEluZm8tPmlpX1VuaXF1ZSA/Ci0JCQkJCQkgVU5JUVVF X0NIRUNLX1lFUyA6IFVOSVFVRV9DSEVDS19OTywKLQkJCQkJCSBmYWxzZSwKLQkJCQkJCSBpbmRl eEluZm8pOwotCi0JCQlzdGF0ZS0+dHVwc19pbnNlcnRlZCArPSAxOwotCQl9CisJCVJlbGVhc2VC dWZmZXIoYnVmKTsKIAl9CiAKLQl0YWJsZV9lbmRzY2FuKHNjYW4pOwotCiAJRXhlY0Ryb3BTaW5n bGVUdXBsZVRhYmxlU2xvdChzbG90KTsKIAogCUZyZWVFeGVjdXRvclN0YXRlKGVzdGF0ZSk7CiAK KwlyZWFkX3N0cmVhbV9lbmQocmVhZF9zdHJlYW0pOworCXR1cGxlc3RvcmVfZW5kKHR1cGxlc19m b3JfY2hlY2spOworCiAJLyogVGhlc2UgbWF5IGhhdmUgYmVlbiBwb2ludGluZyB0byB0aGUgbm93 LWdvbmUgZXN0YXRlICovCiAJaW5kZXhJbmZvLT5paV9FeHByZXNzaW9uc1N0YXRlID0gTklMOwog CWluZGV4SW5mby0+aWlfUHJlZGljYXRlU3RhdGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCmluZGV4 IDhlNTA5YTUxYzExLi42YTRiMzQ4ZGQxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpAQCAtNzE0LDExICs3 MTQsMTYgQEAgVXBkYXRlSW5kZXhSZWxhdGlvbihPaWQgaW5kZXhvaWQsCiAgKgkJCWFscmVhZHkg ZXhpc3RzLgogICoJCUlOREVYX0NSRUFURV9QQVJUSVRJT05FRDoKICAqCQkJY3JlYXRlIGEgcGFy dGl0aW9uZWQgaW5kZXggKHRhYmxlIG11c3QgYmUgcGFydGl0aW9uZWQpCisgKgkJSU5ERVhfQ1JF QVRFX0FVWElMSUFSWToKKyAqCQkJbWFyayBpbmRleCBhcyBhdXhpbGlhcnkgaW5kZXgKICAqIGNv bnN0cl9mbGFnczogZmxhZ3MgcGFzc2VkIHRvIGluZGV4X2NvbnN0cmFpbnRfY3JlYXRlCiAgKgkJ KG9ubHkgaWYgSU5ERVhfQ1JFQVRFX0FERF9DT05TVFJBSU5UIGlzIHNldCkKICAqIGFsbG93X3N5 c3RlbV90YWJsZV9tb2RzOiBhbGxvdyB0YWJsZSB0byBiZSBhIHN5c3RlbSBjYXRhbG9nCiAgKiBp c19pbnRlcm5hbDogaWYgdHJ1ZSwgcG9zdCBjcmVhdGlvbiBob29rIGZvciBuZXcgaW5kZXgKICAq IGNvbnN0cmFpbnRJZDogaWYgbm90IE5VTEwsIHJlY2VpdmVzIE9JRCBvZiBjcmVhdGVkIGNvbnN0 cmFpbnQKKyAqIHJlbHBlcnNpc3RlbmNlOiBwZXJzaXN0ZW5jZSBsZXZlbCB0byB1c2UgZm9yIGlu ZGV4LiBJbiBtb3N0IG9mIHRoZQorICoJCWNhc2VzIGl0IGlzIHNob3VsZCBiZSBlcXVhbCB0byBw ZXJzaXN0ZW5jZSBsZXZlbCBvZiB0YWJsZSwKKyAqCQlhdXhpbGlhcnkgaW5kZXhlcyBhcmUgb25s eSBleGNlcHRpb24gaGVyZS4KICAqCiAgKiBSZXR1cm5zIHRoZSBPSUQgb2YgdGhlIGNyZWF0ZWQg aW5kZXguCiAgKi8KQEAgLTc1OSw2ICs3NjQsNyBAQCBpbmRleF9jcmVhdGUoUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogCWJvb2wJCWludmFsaWQgPSAoZmxhZ3MgJiBJTkRFWF9DUkVBVEVfSU5WQUxJ RCkgIT0gMDsKIAlib29sCQljb25jdXJyZW50ID0gKGZsYWdzICYgSU5ERVhfQ1JFQVRFX0NPTkNV UlJFTlQpICE9IDA7CiAJYm9vbAkJcGFydGl0aW9uZWQgPSAoZmxhZ3MgJiBJTkRFWF9DUkVBVEVf UEFSVElUSU9ORUQpICE9IDA7CisJYm9vbAkJYXV4aWxpYXJ5ID0gKGZsYWdzICYgSU5ERVhfQ1JF QVRFX0FVWElMSUFSWSkgIT0gMDsKIAljaGFyCQlyZWxraW5kOwogCVRyYW5zYWN0aW9uSWQgcmVs ZnJvemVueGlkOwogCU11bHRpWGFjdElkIHJlbG1pbm14aWQ7CkBAIC03ODQsNyArNzkwLDEwIEBA IGluZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJbmFtZXNwYWNlSWQgPSBSZWxh dGlvbkdldE5hbWVzcGFjZShoZWFwUmVsYXRpb24pOwogCXNoYXJlZF9yZWxhdGlvbiA9IGhlYXBS ZWxhdGlvbi0+cmRfcmVsLT5yZWxpc3NoYXJlZDsKIAltYXBwZWRfcmVsYXRpb24gPSBSZWxhdGlv bklzTWFwcGVkKGhlYXBSZWxhdGlvbik7Ci0JcmVscGVyc2lzdGVuY2UgPSBoZWFwUmVsYXRpb24t PnJkX3JlbC0+cmVscGVyc2lzdGVuY2U7CisJaWYgKGF1eGlsaWFyeSkKKwkJcmVscGVyc2lzdGVu Y2UgPSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRDsgLyogYXV4IGluZGV4ZXMgYXJlIGFsd2F5cyB1 bmxvZ2dlZCAqLworCWVsc2UKKwkJcmVscGVyc2lzdGVuY2UgPSBoZWFwUmVsYXRpb24tPnJkX3Jl bC0+cmVscGVyc2lzdGVuY2U7CiAKIAkvKgogCSAqIGNoZWNrIHBhcmFtZXRlcnMKQEAgLTc5Miw2 ICs4MDEsMTEgQEAgaW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAlpZiAoaW5k ZXhJbmZvLT5paV9OdW1JbmRleEF0dHJzIDwgMSkKIAkJZWxvZyhFUlJPUiwgIm11c3QgaW5kZXgg YXQgbGVhc3Qgb25lIGNvbHVtbiIpOwogCisJaWYgKGluZGV4SW5mby0+aWlfQW0gPT0gU1RJUl9B TV9PSUQgJiYgIWF1eGlsaWFyeSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygidXNlci1kZWZpbmVkIGlu ZGV4ZXMgd2l0aCBTVElSIGFjY2VzcyBtZXRob2QgYXJlIG5vdCBzdXBwb3J0ZWQiKSkpOworCiAJ aWYgKCFhbGxvd19zeXN0ZW1fdGFibGVfbW9kcyAmJgogCQlJc1N5c3RlbVJlbGF0aW9uKGhlYXBS ZWxhdGlvbikgJiYKIAkJSXNOb3JtYWxQcm9jZXNzaW5nTW9kZSgpKQpAQCAtMTM5Nyw3ICsxNDEx LDggQEAgaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlv biwgT2lkIG9sZEluZGV4SWQsCiAJCQkJCQkJZmFsc2UsCS8qIG5vdCByZWFkeSBmb3IgaW5zZXJ0 cyAqLwogCQkJCQkJCXRydWUsCiAJCQkJCQkJaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtc3Vt bWFyaXppbmcsCi0JCQkJCQkJb2xkSW5mby0+aWlfV2l0aG91dE92ZXJsYXBzKTsKKwkJCQkJCQlv bGRJbmZvLT5paV9XaXRob3V0T3ZlcmxhcHMsCisJCQkJCQkJZmFsc2UpOwogCiAJLyoKIAkgKiBF eHRyYWN0IHRoZSBsaXN0IG9mIGNvbHVtbiBuYW1lcyBhbmQgdGhlIGNvbHVtbiBudW1iZXJzIGZv ciB0aGUgbmV3CkBAIC0xNDcyLDYgKzE0ODcsMTU0IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVh dGVfY29weShSZWxhdGlvbiBoZWFwUmVsYXRpb24sIE9pZCBvbGRJbmRleElkLAogCXJldHVybiBu ZXdJbmRleElkOwogfQogCisvKgorICogaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgKKyAq CisgKiBDcmVhdGUgY29uY3VycmVudGx5IGFuIGF1eGlsaWFyeSBpbmRleCBiYXNlZCBvbiB0aGUg ZGVmaW5pdGlvbiBvZiB0aGUgb25lCisgKiBwcm92aWRlZCBieSBjYWxsZXIuICBUaGUgaW5kZXgg aXMgaW5zZXJ0ZWQgaW50byBjYXRhbG9ncyBhbmQgbmVlZHMgdG8gYmUKKyAqIGJ1aWx0IGxhdGVy IG9uLiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgY29uY3VycmVudCByZWluZGV4IHByb2Nlc3Npbmcu CisgKgorICogInRhYmxlc3BhY2VPaWQiIGlzIHRoZSB0YWJsZXNwYWNlIHRvIHVzZSBmb3IgdGhp cyBpbmRleC4KKyAqLworT2lkCitpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChSZWxhdGlv biBoZWFwUmVsYXRpb24sIE9pZCBtYWluSW5kZXhJZCwKKwkJCQkJCQkgICBPaWQgdGFibGVzcGFj ZU9pZCwgY29uc3QgY2hhciAqbmV3TmFtZSkKK3sKKwlSZWxhdGlvbglpbmRleFJlbGF0aW9uOwor CUluZGV4SW5mbyAgKm9sZEluZm8sCisJCQkqbmV3SW5mbzsKKwlPaWQJCQluZXdJbmRleElkID0g SW52YWxpZE9pZDsKKwlIZWFwVHVwbGUJaW5kZXhUdXBsZTsKKworCUxpc3QJICAgKmluZGV4Q29s TmFtZXMgPSBOSUw7CisJTGlzdAkgICAqaW5kZXhFeHBycyA9IE5JTDsKKwlMaXN0CSAgICppbmRl eFByZWRzID0gTklMOworCisJT2lkICphdXhPcGNsYXNzSWRzOworCWludDE2ICphdXhDb2xvcHRp b25zOworCisJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4obWFpbkluZGV4SWQsIFJvd0V4Y2x1 c2l2ZUxvY2spOworCisJLyogVGhlIG5ldyBpbmRleCBuZWVkcyBzb21lIGluZm9ybWF0aW9uIGZy b20gdGhlIG9sZCBpbmRleCAqLworCW9sZEluZm8gPSBCdWlsZEluZGV4SW5mbyhpbmRleFJlbGF0 aW9uKTsKKworCS8qCisJICogQnVpbGQgb2YgYW4gYXV4aWxpYXJ5IGluZGV4IHdpdGggZXhjbHVz aW9uIGNvbnN0cmFpbnRzIGlzIG5vdAorCSAqIHN1cHBvcnRlZC4KKwkgKi8KKwlpZiAob2xkSW5m by0+aWlfRXhjbHVzaW9uT3BzICE9IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJZXJybXNnKCJhdXhpbGlh cnkgaW5kZXggY3JlYXRpb24gZm9yIGV4Y2x1c2lvbiBjb25zdHJhaW50cyBpcyBub3Qgc3VwcG9y dGVkIikpKTsKKworCS8qIEdldCB0aGUgYXJyYXkgb2YgY2xhc3MgYW5kIGNvbHVtbiBvcHRpb25z IElEcyBmcm9tIGluZGV4IGluZm8gKi8KKwlpbmRleFR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKElO REVYUkVMSUQsIE9iamVjdElkR2V0RGF0dW0obWFpbkluZGV4SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoaW5kZXhUdXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBpbmRleCAldSIsIG1haW5JbmRleElkKTsKKworCisJLyoKKwkgKiBGZXRjaCB0aGUgbGlz dCBvZiBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcyBkaXJlY3RseSBmcm9tIHRoZQorCSAqIGNh dGFsb2dzLiAgVGhpcyBjYW5ub3QgcmVseSBvbiB0aGUgaW5mb3JtYXRpb24gZnJvbSBJbmRleElu Zm8gb2YgdGhlCisJICogb2xkIGluZGV4IGFzIHRoZXNlIGhhdmUgYmVlbiBmbGF0dGVuZWQgZm9y IHRoZSBwbGFubmVyLgorCSAqLworCWlmIChvbGRJbmZvLT5paV9FeHByZXNzaW9ucyAhPSBOSUwp CisJeworCQlEYXR1bQkJZXhwckRhdHVtOworCQljaGFyCSAgICpleHByU3RyaW5nOworCisJCWV4 cHJEYXR1bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoSU5ERVhSRUxJRCwgaW5kZXhUdXBsZSwK KwkJCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4X2luZGV4cHJzKTsKKwkJZXhwclN0cmluZyA9IFRl eHREYXR1bUdldENTdHJpbmcoZXhwckRhdHVtKTsKKwkJaW5kZXhFeHBycyA9IChMaXN0ICopIHN0 cmluZ1RvTm9kZShleHByU3RyaW5nKTsKKwkJcGZyZWUoZXhwclN0cmluZyk7CisJfQorCWlmIChv bGRJbmZvLT5paV9QcmVkaWNhdGUgIT0gTklMKQorCXsKKwkJRGF0dW0JCXByZWREYXR1bTsKKwkJ Y2hhcgkgICAqcHJlZFN0cmluZzsKKworCQlwcmVkRGF0dW0gPSBTeXNDYWNoZUdldEF0dHJOb3RO dWxsKElOREVYUkVMSUQsIGluZGV4VHVwbGUsCisJCQkJCQkJCQkJICAgQW51bV9wZ19pbmRleF9p bmRwcmVkKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsK KwkJaW5kZXhQcmVkcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKworCQkv KiBBbHNvIGNvbnZlcnQgdG8gaW1wbGljaXQtQU5EIGZvcm1hdCAqLworCQlpbmRleFByZWRzID0g bWFrZV9hbmRzX2ltcGxpY2l0KChFeHByICopIGluZGV4UHJlZHMpOworCQlwZnJlZShwcmVkU3Ry aW5nKTsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBpbmRleCBpbmZvcm1hdGlvbiBmb3IgdGhl IG5ldyBpbmRleC4gIE5vdGUgdGhhdCByZWJ1aWxkIG9mCisJICogaW5kZXhlcyB3aXRoIGV4Y2x1 c2lvbiBjb25zdHJhaW50cyBpcyBub3Qgc3VwcG9ydGVkLCBoZW5jZSB0aGVyZSBpcyBubworCSAq IG5lZWQgdG8gZmlsbCBhbGwgdGhlIGlpX0V4Y2x1c2lvbiogZmllbGRzLgorCSAqLworCW5ld0lu Zm8gPSBtYWtlSW5kZXhJbmZvKG9sZEluZm8tPmlpX051bUluZGV4QXR0cnMsCisJCQkJCQkJb2xk SW5mby0+aWlfTnVtSW5kZXhLZXlBdHRycywKKwkJCQkJCQlTVElSX0FNX09JRCwgLyogc3BlY2lh bCBBTSBmb3IgYXV4IGluZGV4ZXMgKi8KKwkJCQkJCQlpbmRleEV4cHJzLAorCQkJCQkJCWluZGV4 UHJlZHMsCisJCQkJCQkJZmFsc2UsCS8qIGF1eCBpbmRleCBhcmUgbm90IHVuaXF1ZSAqLworCQkJ CQkJCW9sZEluZm8tPmlpX051bGxzTm90RGlzdGluY3QsCisJCQkJCQkJZmFsc2UsCS8qIG5vdCBy ZWFkeSBmb3IgaW5zZXJ0cyAqLworCQkJCQkJCXRydWUsCisJCQkJCQkJZmFsc2UsCS8qIGF1eCBh cmUgbm90IHN1bW1hcml6aW5nICovCisJCQkJCQkJZmFsc2UsCS8qIGF1eCBhcmUgbm90IHdpdGhv dXQgb3ZlcmxhcHMgKi8KKwkJCQkJCQl0cnVlCS8qIGF1eGlsaWFyeSAqLyk7CisKKwkvKgorCSAq IEV4dHJhY3QgdGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMg Zm9yIHRoZSBuZXcKKwkgKiBpbmRleCBpbmZvcm1hdGlvbi4gIEFsbCB0aGlzIGluZm9ybWF0aW9u IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGluZGV4CisJICogY3JlYXRpb24uCisJICovCisJZm9yIChp bnQgaSA9IDA7IGkgPCBvbGRJbmZvLT5paV9OdW1JbmRleEF0dHJzOyBpKyspCisJeworCQlUdXBs ZURlc2MJaW5kZXhUdXBEZXNjID0gUmVsYXRpb25HZXREZXNjcihpbmRleFJlbGF0aW9uKTsKKwkJ Rm9ybV9wZ19hdHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cihpbmRleFR1cERlc2MsIGkpOwor CisJCWluZGV4Q29sTmFtZXMgPSBsYXBwZW5kKGluZGV4Q29sTmFtZXMsIE5hbWVTdHIoYXR0LT5h dHRuYW1lKSk7CisJCW5ld0luZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbaV0gPSBvbGRJbmZvLT5p aV9JbmRleEF0dHJOdW1iZXJzW2ldOworCX0KKworCWF1eE9wY2xhc3NJZHMgPSBwYWxsb2MwKHNp emVvZihPaWQpICogbmV3SW5mby0+aWlfTnVtSW5kZXhBdHRycyk7CisJYXV4Q29sb3B0aW9ucyA9 IHBhbGxvYzAoc2l6ZW9mKGludDE2KSAqIG5ld0luZm8tPmlpX051bUluZGV4QXR0cnMpOworCisJ LyogRmlsbCB3aXRoICJhbnkgb3BzIiAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgbmV3SW5mby0+ aWlfTnVtSW5kZXhBdHRyczsgaSsrKQorCXsKKwkJYXV4T3BjbGFzc0lkc1tpXSA9IEFOWV9TVElS X09QU19PSUQ7CisJCWF1eENvbG9wdGlvbnNbaV0gPSAwOworCX0KKworCW5ld0luZGV4SWQgPSBp bmRleF9jcmVhdGUoaGVhcFJlbGF0aW9uLAorCQkJCQkJCSAgbmV3TmFtZSwKKwkJCQkJCQkgIElu dmFsaWRPaWQsICAgIC8qIGluZGV4UmVsYXRpb25JZCAqLworCQkJCQkJCSAgSW52YWxpZE9pZCwg ICAgLyogcGFyZW50SW5kZXhSZWxpZCAqLworCQkJCQkJCSAgSW52YWxpZE9pZCwgICAgLyogcGFy ZW50Q29uc3RyYWludElkICovCisJCQkJCQkJICBJbnZhbGlkUmVsRmlsZU51bWJlciwgLyogcmVs RmlsZU51bWJlciAqLworCQkJCQkJCSAgbmV3SW5mbywKKwkJCQkJCQkgIGluZGV4Q29sTmFtZXMs CisJCQkJCQkJICBTVElSX0FNX09JRCwKKwkJCQkJCQkgIHRhYmxlc3BhY2VPaWQsCisJCQkJCQkJ ICBpbmRleFJlbGF0aW9uLT5yZF9pbmRjb2xsYXRpb24sCisJCQkJCQkJICBhdXhPcGNsYXNzSWRz LAorCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkgIGF1eENvbG9wdGlvbnMsCisJCQkJCQkJICBOVUxM LAorCQkJCQkJCSAgKERhdHVtKSAwLAorCQkJCQkJCSAgSU5ERVhfQ1JFQVRFX1NLSVBfQlVJTEQg fCBJTkRFWF9DUkVBVEVfQ09OQ1VSUkVOVCB8IElOREVYX0NSRUFURV9BVVhJTElBUlksCisJCQkJ CQkJICAwLAorCQkJCQkJCSAgdHJ1ZSwgLyogYWxsb3cgdGFibGUgdG8gYmUgYSBzeXN0ZW0gY2F0 YWxvZz8gKi8KKwkJCQkJCQkgIGZhbHNlLCAgICAvKiBpc19pbnRlcm5hbD8gKi8KKwkJCQkJCQkg IE5VTEwpOworCisJLyogQ2xvc2UgdGhlIHJlbGF0aW9ucyB1c2VkIGFuZCBjbGVhbiB1cCAqLwor CWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7CisJUmVsZWFzZVN5c0NhY2hlKGlu ZGV4VHVwbGUpOworCisJcmV0dXJuIG5ld0luZGV4SWQ7Cit9CisKIC8qCiAgKiBpbmRleF9jb25j dXJyZW50bHlfYnVpbGQKICAqCkBAIC0yNDUyLDcgKzI2MTUsOCBAQCBCdWlsZEluZGV4SW5mbyhS ZWxhdGlvbiBpbmRleCkKIAkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzcmVhZHksCiAJCQkJCSAg IGZhbHNlLAogCQkJCQkgICBpbmRleC0+cmRfaW5kYW0tPmFtc3VtbWFyaXppbmcsCi0JCQkJCSAg IGluZGV4U3RydWN0LT5pbmRpc2V4Y2x1c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUp OworCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmlu ZGlzdW5pcXVlLAorCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAv KiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8pOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVy cyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1BdHRzOyBpKyspCkBAIC0yNTEyLDcgKzI2NzYsOCBA QCBCdWlsZER1bW15SW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4KQogCQkJCQkgICBpbmRleFN0cnVj dC0+aW5kaXNyZWFkeSwKIAkJCQkJICAgZmFsc2UsCiAJCQkJCSAgIGluZGV4LT5yZF9pbmRhbS0+ YW1zdW1tYXJpemluZywKLQkJCQkJICAgaW5kZXhTdHJ1Y3QtPmluZGlzZXhjbHVzaW9uICYmIGlu ZGV4U3RydWN0LT5pbmRpc3VuaXF1ZSk7CisJCQkJCSAgIGluZGV4U3RydWN0LT5pbmRpc2V4Y2x1 c2lvbiAmJiBpbmRleFN0cnVjdC0+aW5kaXN1bmlxdWUsCisJCQkJCSAgIGluZGV4LT5yZF9yZWwt PnJlbGFtID09IFNUSVJfQU1fT0lEIC8qIGF1eGlsaWFyeSBpZmYgU1RJUiAqLyk7CiAKIAkvKiBm aWxsIGluIGF0dHJpYnV0ZSBudW1iZXJzICovCiAJZm9yIChpID0gMDsgaSA8IG51bUF0dHM7IGkr KykKQEAgLTMyODgsMTIgKzM0NTMsMjEgQEAgSW5kZXhDaGVja0V4Y2x1c2lvbihSZWxhdGlvbiBo ZWFwUmVsYXRpb24sCiAgKgogICogV2UgZG8gYSBjb25jdXJyZW50IGluZGV4IGJ1aWxkIGJ5IGZp cnN0IGluc2VydGluZyB0aGUgY2F0YWxvZyBlbnRyeSBmb3IgdGhlCiAgKiBpbmRleCB2aWEgaW5k ZXhfY3JlYXRlKCksIG1hcmtpbmcgaXQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3ZhbGlk LgorICogVGhlbiB3ZSBjcmVhdGUgc3BlY2lhbCBhdXhpbGlhcnkgaW5kZXggdGhlIHNhbWUgd2F5 LiBJdCBiYXNlZCBvbiBTVElSIEFNLgogICogVGhlbiB3ZSBjb21taXQgb3VyIHRyYW5zYWN0aW9u IGFuZCBzdGFydCBhIG5ldyBvbmUsIHRoZW4gd2Ugd2FpdCBmb3IgYWxsCiAgKiB0cmFuc2FjdGlv bnMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gbW9kaWZ5aW5nIHRoZSB0YWJsZSB0byB0ZXJtaW5hdGUu ICBOb3cKLSAqIHdlIGtub3cgdGhhdCBhbnkgc3Vic2VxdWVudGx5LXN0YXJ0ZWQgdHJhbnNhY3Rp b25zIHdpbGwgc2VlIHRoZSBpbmRleCBhbmQKKyAqIHdlIGtub3cgdGhhdCBhbnkgc3Vic2VxdWVu dGx5LXN0YXJ0ZWQgdHJhbnNhY3Rpb25zIHdpbGwgc2VlIGluZGV4ZXMgYW5kCiAgKiBob25vciBp dHMgY29uc3RyYWludHMgb24gSE9UIHVwZGF0ZXM7IHNvIHdoaWxlIGV4aXN0aW5nIEhPVC1jaGFp bnMgbWlnaHQKICAqIGJlIGJyb2tlbiB3aXRoIHJlc3BlY3QgdG8gdGhlIGluZGV4LCBubyBjdXJy ZW50bHkgbGl2ZSB0dXBsZSB3aWxsIGhhdmUgYW4KLSAqIGluY29tcGF0aWJsZSBIT1QgdXBkYXRl IGRvbmUgdG8gaXQuICBXZSBub3cgYnVpbGQgdGhlIGluZGV4IG5vcm1hbGx5IHZpYQorICogaW5j b21wYXRpYmxlIEhPVCB1cGRhdGUgZG9uZSB0byBpdC4KKyAqCisgKiBBZnRlciB3ZSBidWlsZCBh dXhpbGlhcnkgaW5kZXguIEl0IGlzIGZhc3Qgb3BlcmF0aW9uIHdpdGhvdXQgYW55IGFjdHVhbAor ICogdGFibGUgc2Nhbi4gQXMgcmVzdWx0LCB3ZSBoYXZlIGVtcHR5IFNUSVIgaW5kZXguIFdlIGNv bW1pdCB0cmFuc2FjdGlvbiBhbmQKKyAqIGFnYWluIHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbnMg dGhhdCBjb3VsZCBoYXZlIGJlZW4gbW9kaWZ5aW5nIHRoZSB0YWJsZQorICogdG8gdGVybWluYXRl LiBBdCB0aGF0IG1vbWVudCBhbGwgbmV3IHR1cGxlcyBhcmUgZ29pbmcgdG8gYmUgaW5zZXJ0ZWQg aW50bworICogYXV4aWxpYXJ5IGluZGV4LgorICoKKyAqIFdlIG5vdyBidWlsZCB0aGUgaW5kZXgg bm9ybWFsbHkgdmlhCiAgKiBpbmRleF9idWlsZCgpLCB3aGlsZSBob2xkaW5nIGEgd2VhayBsb2Nr IHRoYXQgYWxsb3dzIGNvbmN1cnJlbnQKICAqIGluc2VydC91cGRhdGUvZGVsZXRlLiAgQWxzbywg d2UgaW5kZXggb25seSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQKICAqIGFzIG9mIHRoZSBzdGFydCBv ZiB0aGUgc2NhbiAoc2VlIHRhYmxlX2luZGV4X2J1aWxkX3NjYW4pLCB3aGVyZWFzIGEgbm9ybWFs CkBAIC0zMzAzLDE0ICszNDc3LDE3IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVh cFJlbGF0aW9uLAogICogYm9ndXMgdW5pcXVlLWluZGV4IGZhaWx1cmVzIGR1ZSB0byBjb25jdXJy ZW50IFVQREFURXMgKHdlIG1pZ2h0IHNlZQogICogZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBz YW1lIHJvdyBhcyBiZWluZyB2YWxpZCB3aGVuIHdlIHBhc3Mgb3ZlciB0aGVtLAogICogaWYgd2Ug dXNlZCBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0pLiAgVGhpcyBsZWF2ZXMgdXMgd2l0aCBhbiBp bmRleCB0aGF0Ci0gKiBkb2VzIG5vdCBjb250YWluIGFueSB0dXBsZXMgYWRkZWQgdG8gdGhlIHRh YmxlIHdoaWxlIHdlIGJ1aWx0IHRoZSBpbmRleC4KKyAqIGRvZXMgbm90IGNvbnRhaW4gYW55IHR1 cGxlcyBhZGRlZCB0byB0aGUgdGFibGUgd2hpbGUgd2UgYnVpbHQgdGhlIGluZGV4CisgKiAoYnV0 IHRoZXNlIHR1cGxlcyBjb250YWluZWQgaW4gYXV4aWxpYXJ5IGluZGV4KS4KICAqCiAgKiBOZXh0 LCB3ZSBtYXJrIHRoZSBpbmRleCAiaW5kaXNyZWFkeSIgKGJ1dCBzdGlsbCBub3QgImluZGlzdmFs aWQiKSBhbmQKLSAqIGNvbW1pdCB0aGUgc2Vjb25kIHRyYW5zYWN0aW9uIGFuZCBzdGFydCBhIHRo aXJkLiAgQWdhaW4gd2Ugd2FpdCBmb3IgYWxsCisgKiBjb21taXQgdGhlIHRoaXJkIHRyYW5zYWN0 aW9uIGFuZCBzdGFydCBhIGZvdXJ0aC4gIEFnYWluIHdlIHdhaXQgZm9yIGFsbAogICogdHJhbnNh Y3Rpb25zIHRoYXQgY291bGQgaGF2ZSBiZWVuIG1vZGlmeWluZyB0aGUgdGFibGUgdG8gdGVybWlu YXRlLiAgTm93CiAgKiB3ZSBrbm93IHRoYXQgYW55IHN1YnNlcXVlbnRseS1zdGFydGVkIHRyYW5z YWN0aW9ucyB3aWxsIHNlZSB0aGUgaW5kZXggYW5kCi0gKiBpbnNlcnQgdGhlaXIgbmV3IHR1cGxl cyBpbnRvIGl0LiAgV2UgdGhlbiB0YWtlIGEgbmV3IHJlZmVyZW5jZSBzbmFwc2hvdAotICogd2hp Y2ggaXMgcGFzc2VkIHRvIHZhbGlkYXRlX2luZGV4KCkuICBBbnkgdHVwbGVzIHRoYXQgYXJlIHZh bGlkIGFjY29yZGluZworICogaW5zZXJ0IHRoZWlyIG5ldyB0dXBsZXMgaW50byBpdC4gQXQgdGhl IHNhbWUgbW9tZW50IHdlIGNsZWFyICJpbmRpc3JlYWR5IiBmb3IKKyAqIGF1eGlsaWFyeSBpbmRl eCwgc2luY2UgaXQgaXMgbm8gbW9yZSByZXF1aXJlZCB0byBiZSB1cGRhdGVkLgorICoKKyAqIFdl IHRoZW4gdGFrZSBhIG5ldyByZWZlcmVuY2Ugc25hcHNob3QsIGFueSB0dXBsZXMgdGhhdCBhcmUg dmFsaWQgYWNjb3JkaW5nCiAgKiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGluIHRoZSBpbmRl eCwgbXVzdCBiZSBhZGRlZCB0byB0aGUgaW5kZXguCiAgKiAoQW55IHR1cGxlcyBjb21taXR0ZWQg bGl2ZSBhZnRlciB0aGUgc25hcCB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlCiAgKiBpbmRleCBi eSB0aGVpciBvcmlnaW5hdGluZyB0cmFuc2FjdGlvbi4gIEFueSB0dXBsZXMgY29tbWl0dGVkIGRl YWQgYmVmb3JlCkBAIC0zMzE4LDEyICszNDk1LDE0IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVs YXRpb24gaGVhcFJlbGF0aW9uLAogICogdGhhdCBtaWdodCBjYXJlIGFib3V0IHRoZW0gYmVmb3Jl IHdlIG1hcmsgdGhlIGluZGV4IHZhbGlkLikKICAqCiAgKiB2YWxpZGF0ZV9pbmRleCgpIHdvcmtz IGJ5IGZpcnN0IGdhdGhlcmluZyBhbGwgdGhlIFRJRHMgY3VycmVudGx5IGluIHRoZQotICogaW5k ZXgsIHVzaW5nIGEgYnVsa2RlbGV0ZSBjYWxsYmFjayB0aGF0IGp1c3Qgc3RvcmVzIHRoZSBUSURz IGFuZCBkb2Vzbid0CisgKiBpbmRleGVzLCB1c2luZyBhIGJ1bGtkZWxldGUgY2FsbGJhY2sgdGhh dCBqdXN0IHN0b3JlcyB0aGUgVElEcyBhbmQgZG9lc24ndAogICogZXZlciBzYXkgImRlbGV0ZSBp dCIuICAoVGhpcyBzaG91bGQgYmUgZmFzdGVyIHRoYW4gYSBwbGFpbiBpbmRleHNjYW47CiAgKiBh bHNvLCBub3QgYWxsIGluZGV4IEFNcyBzdXBwb3J0IGZ1bGwtaW5kZXggaW5kZXhzY2FuLikgIFRo ZW4gd2Ugc29ydCB0aGUKLSAqIFRJRHMsIGFuZCBmaW5hbGx5IHNjYW4gdGhlIHRhYmxlIGRvaW5n IGEgIm1lcmdlIGpvaW4iIGFnYWluc3QgdGhlIFRJRCBsaXN0Ci0gKiB0byBzZWUgd2hpY2ggdHVw bGVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGluZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0 Ci0gKiBhbGwgdHVwbGVzIHZhbGlkIGFjY29yZGluZyB0byB0aGUgcmVmZXJlbmNlIHNuYXBzaG90 IGFyZSBpbiB0aGUgaW5kZXguCisgKiBUSURzIG9mIGJvdGggYXV4aWxpYXJ5IGFuZCB0YXJnZXQg aW5kZXhlcywgYW5kIGRvaW5nIGEgIm1lcmdlIGpvaW4iIGFnYWluc3QKKyAqIHRoZSBUSUQgbGlz dHMgdG8gc2VlIHdoaWNoIHR1cGxlcyBmcm9tIGF1eGlsaWFyeSBpbmRleCBhcmUgbWlzc2luZyBm cm9tIHRoZQorICogdGFyZ2V0IGluZGV4LiAgVGh1cyB3ZSB3aWxsIGVuc3VyZSB0aGF0IGFsbCB0 dXBsZXMgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZQorICogcmVmZXJlbmNlIHNuYXBzaG90IGFyZSBp biB0aGUgaW5kZXguIE5vdGljZSB3ZSBuZWVkIHRvIGRvIGJ1bGtkZWxldGUgaW4gdGhlCisgKiBw YXJ0aWN1bGFyIG9yZGVyOiBhdXhpbGlhcnkgZmlyc3QsIHRhcmdldCBsYXN0LgogICoKICAqIEJ1 aWxkaW5nIGEgdW5pcXVlIGluZGV4IHRoaXMgd2F5IGlzIHRyaWNreTogd2UgbWlnaHQgdHJ5IHRv IGluc2VydCBhCiAgKiB0dXBsZSB0aGF0IGlzIGFscmVhZHkgZGVhZCBvciBpcyBpbiBwcm9jZXNz IG9mIGJlaW5nIGRlbGV0ZWQsIGFuZCB3ZQpAQCAtMzM0MSwyMiArMzUyMCwyNiBAQCBJbmRleENo ZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqIG5vdCBpbmRleCkuICBUaGVu IHdlIG1hcmsgdGhlIGluZGV4ICJpbmRpc3ZhbGlkIiBhbmQgY29tbWl0LiAgU3Vic2VxdWVudAog ICogdHJhbnNhY3Rpb25zIHdpbGwgYmUgYWJsZSB0byB1c2UgaXQgZm9yIHF1ZXJpZXMuCiAgKgot ICogRG9pbmcgdHdvIGZ1bGwgdGFibGUgc2NhbnMgaXMgYSBicnV0ZS1mb3JjZSBzdHJhdGVneS4g IFdlIGNvdWxkIHRyeSB0byBiZQotICogY2xldmVyZXIsIGVnIHN0b3JpbmcgbmV3IHR1cGxlcyBp biBhIHNwZWNpYWwgYXJlYSBvZiB0aGUgdGFibGUgKHBlcmhhcHMKLSAqIG1ha2luZyB0aGUgdGFi bGUgYXBwZW5kLW9ubHkgYnkgc2V0dGluZyB1c2VfZnNtKS4gIEhvd2V2ZXIgdGhhdCB3b3VsZAot ICogYWRkIHlldCBtb3JlIGxvY2tpbmcgaXNzdWVzLgorICogQWxzbywgc29tZSBhY3Rpb25zIHRv IGNvbmN1cnJlbnQgZHJvcCB0aGUgYXV4aWxpYXJ5IGluZGV4IGFyZSBwZXJmb3JtZWQuCiAgKi8K IHZvaWQKLXZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBz bmFwc2hvdCkKK3ZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4 SW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiB7CiAJUmVsYXRpb24JaGVhcFJlbGF0aW9uLAot CQkJCWluZGV4UmVsYXRpb247CisJCQkJaW5kZXhSZWxhdGlvbiwKKwkJCQlhdXhJbmRleFJlbGF0 aW9uOwogCUluZGV4SW5mbyAgKmluZGV4SW5mbzsKLQlJbmRleFZhY3V1bUluZm8gaXZpbmZvOwot CVZhbGlkYXRlSW5kZXhTdGF0ZSBzdGF0ZTsKKwlJbmRleFZhY3V1bUluZm8gaXZpbmZvLCBhdXhp dmluZm87CisJVmFsaWRhdGVJbmRleFN0YXRlIHN0YXRlLCBhdXhTdGF0ZTsKIAlPaWQJCQlzYXZl X3VzZXJpZDsKIAlpbnQJCQlzYXZlX3NlY19jb250ZXh0OwogCWludAkJCXNhdmVfbmVzdGxldmVs OworCS8qIFVzZSA4MCUgb2YgbWFpbnRlbmFuY2Vfd29ya19tZW0gdG8gdGFyZ2V0IGluZGV4IHNv cnRpbmcgYW5kCisJICogMTAlIHJlc3QgZm9yIGF1eGlsaWFyeS4KKwkgKgorCSAqIFJlc3QgMTAl IHdpbGwgYmUgdXNlZCBmb3IgdHVwbGVzdG9yZSBsYXRlci4gKi8KKwlpbnQ2NAkJbWFpbl93b3Jr X21lbV9wYXJ0ID0gKGludDY0KSBtYWludGVuYW5jZV93b3JrX21lbSAqIDggLyAxMDsKKwlpbnQJ CQlhdXhfd29ya19tZW1fcGFydCA9IG1haW50ZW5hbmNlX3dvcmtfbWVtIC8gMTA7CiAKIAl7CiAJ CWNvbnN0IGludAlwcm9ncmVzc19pbmRleFtdID0gewpAQCAtMzM4OSw2ICszNTcyLDcgQEAgdmFs aWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQog CVJlc3RyaWN0U2VhcmNoUGF0aCgpOwogCiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oaW5k ZXhJZCwgUm93RXhjbHVzaXZlTG9jayk7CisJYXV4SW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4o YXV4SW5kZXhJZCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAkvKgogCSAqIEZldGNoIGluZm8gbmVl ZGVkIGZvciBpbmRleF9pbnNlcnQuICAoWW91IG1pZ2h0IHRoaW5rIHRoaXMgc2hvdWxkIGJlCkBA IC0zNDEzLDE1ICszNTk3LDU1IEBAIHZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRl eElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAlpdmluZm8uc3RyYXRlZ3kgPSBOVUxMOwogCWl2aW5m by52YWxpZGF0ZV9pbmRleCA9IHRydWU7CiAKKwkvKgorCSAqIENvcHkgYWxsIGluZm8gdG8gYXV4 aWxpYXJ5IGluZm8sIGNoYW5naW5nIG9ubHkgcmVsYXRpb24uCisJICovCisJYXV4aXZpbmZvID0g aXZpbmZvOworCWF1eGl2aW5mby5pbmRleCA9IGF1eEluZGV4UmVsYXRpb247CisKIAkvKgogCSAq IEVuY29kZSBUSURzIGFzIGludDggdmFsdWVzIGZvciB0aGUgc29ydCwgcmF0aGVyIHRoYW4gZGly ZWN0bHkgc29ydGluZwogCSAqIGl0ZW0gcG9pbnRlcnMuICBUaGlzIGNhbiBiZSBzaWduaWZpY2Fu dGx5IGZhc3RlciwgcHJpbWFyaWx5IGJlY2F1c2UgVElECiAJICogaXMgYSBwYXNzLWJ5LXJlZmVy ZW5jZSB0eXBlIG9uIGFsbCBwbGF0Zm9ybXMsIHdoZXJlYXMgaW50OCBpcwogCSAqIHBhc3MtYnkt dmFsdWUgb24gbW9zdCBwbGF0Zm9ybXMuCiAJICovCisJYXV4U3RhdGUudHVwbGVzb3J0ID0gdHVw bGVzb3J0X2JlZ2luX2RhdHVtKElOVDhPSUQsIEludDhMZXNzT3BlcmF0b3IsCisJCQkJCQkJCQkJ ICAgSW52YWxpZE9pZCwgZmFsc2UsCisJCQkJCQkJCQkJICAgYXV4X3dvcmtfbWVtX3BhcnQsCisJ CQkJCQkJCQkJICAgTlVMTCwgVFVQTEVTT1JUX05PTkUpOworCWF1eFN0YXRlLmh0dXBzID0gYXV4 U3RhdGUuaXR1cHMgPSBhdXhTdGF0ZS50dXBzX2luc2VydGVkID0gMDsKKworCSh2b2lkKSBpbmRl eF9idWxrX2RlbGV0ZSgmYXV4aXZpbmZvLCBOVUxMLAorCQkJCQkJCSB2YWxpZGF0ZV9pbmRleF9j YWxsYmFjaywgJmF1eFN0YXRlKTsKKwkvKiBJZiBhdXggaW5kZXggaXMgZW1wdHksIG1lcmdlIG1h eSBiZSBza2lwcGVkICovCisJaWYgKGF1eFN0YXRlLml0dXBzID09IDApCisJeworCQl0dXBsZXNv cnRfZW5kKGF1eFN0YXRlLnR1cGxlc29ydCk7CisJCWF1eFN0YXRlLnR1cGxlc29ydCA9IE5VTEw7 CisKKwkJLyogUm9sbCBiYWNrIGFueSBHVUMgY2hhbmdlcyBleGVjdXRlZCBieSBpbmRleCBmdW5j dGlvbnMgKi8KKwkJQXRFT1hhY3RfR1VDKGZhbHNlLCBzYXZlX25lc3RsZXZlbCk7CisKKwkJLyog UmVzdG9yZSB1c2VyaWQgYW5kIHNlY3VyaXR5IGNvbnRleHQgKi8KKwkJU2V0VXNlcklkQW5kU2Vj Q29udGV4dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29udGV4dCk7CisKKwkJLyogQ2xvc2UgcmVs cywgYnV0IGtlZXAgbG9ja3MgKi8KKwkJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWxhdGlvbiwgTm9M b2NrKTsKKwkJaW5kZXhfY2xvc2UoaW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKKwkJdGFibGVfY2xv c2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOworCisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFu c2FjdGlvblNuYXBzaG90KCkpOworCQlsaW1pdFhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54 bWluOworCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90 KCk7CisKKwkJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKKwkJ cmV0dXJuIGxpbWl0WG1pbjsKKwl9CisKIAlzdGF0ZS50dXBsZXNvcnQgPSB0dXBsZXNvcnRfYmVn aW5fZGF0dW0oSU5UOE9JRCwgSW50OExlc3NPcGVyYXRvciwKIAkJCQkJCQkJCQkJSW52YWxpZE9p ZCwgZmFsc2UsCi0JCQkJCQkJCQkJCW1haW50ZW5hbmNlX3dvcmtfbWVtLAorCQkJCQkJCQkJCQko aW50KSBtYWluX3dvcmtfbWVtX3BhcnQsCiAJCQkJCQkJCQkJCU5VTEwsIFRVUExFU09SVF9OT05F KTsKIAlzdGF0ZS5odHVwcyA9IHN0YXRlLml0dXBzID0gc3RhdGUudHVwc19pbnNlcnRlZCA9IDA7 CiAKQEAgLTM0NDQsMjcgKzM2NjgsMzAgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lk IGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211 bHRpX3BhcmFtKDMsIHByb2dyZXNzX2luZGV4LCBwcm9ncmVzc192YWxzKTsKIAl9CiAJdHVwbGVz b3J0X3BlcmZvcm1zb3J0KHN0YXRlLnR1cGxlc29ydCk7CisJdHVwbGVzb3J0X3BlcmZvcm1zb3J0 KGF1eFN0YXRlLnR1cGxlc29ydCk7CiAKIAkvKgotCSAqIE5vdyBzY2FuIHRoZSBoZWFwIGFuZCAi bWVyZ2UiIGl0IHdpdGggdGhlIGluZGV4CisJICogTm93IG1lcmdlIGJvdGggaW5kZXhlcwogCSAq LwogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNF LAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1RBQkxFU0NBTik7 CisJCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYTUVSR0UpOwog CXRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oaGVhcFJlbGF0aW9uLAogCQkJCQkJCSAgaW5kZXhS ZWxhdGlvbiwKIAkJCQkJCQkgIGluZGV4SW5mbywKIAkJCQkJCQkgIHNuYXBzaG90LAotCQkJCQkJ CSAgJnN0YXRlKTsKKwkJCQkJCQkgICZzdGF0ZSwKKwkJCQkJCQkgICZhdXhTdGF0ZSk7CiAKLQkv KiBEb25lIHdpdGggdHVwbGVzb3J0IG9iamVjdCAqLwotCXR1cGxlc29ydF9lbmQoc3RhdGUudHVw bGVzb3J0KTsKKwkvKiBUdXBsZSBzb3J0IGNsb3NlZCBieSB0YWJsZV9pbmRleF92YWxpZGF0ZV9z Y2FuICovCisJQXNzZXJ0KHN0YXRlLnR1cGxlc29ydCA9PSBOVUxMICYmIGF1eFN0YXRlLnR1cGxl c29ydCA9PSBOVUxMKTsKIAogCS8qIE1ha2Ugc3VyZSB0byByZWxlYXNlIHJlc291cmNlcyBjYWNo ZWQgaW4gaW5kZXhJbmZvIChpZiBuZWVkZWQpLiAqLwogCWluZGV4X2luc2VydF9jbGVhbnVwKGlu ZGV4UmVsYXRpb24sIGluZGV4SW5mbyk7CiAKIAllbG9nKERFQlVHMiwKLQkJICJ2YWxpZGF0ZV9p bmRleCBmb3VuZCAlLjBmIGhlYXAgdHVwbGVzLCAlLjBmIGluZGV4IHR1cGxlczsgaW5zZXJ0ZWQg JS4wZiBtaXNzaW5nIHR1cGxlcyIsCi0JCSBzdGF0ZS5odHVwcywgc3RhdGUuaXR1cHMsIHN0YXRl LnR1cHNfaW5zZXJ0ZWQpOworCQkgInZhbGlkYXRlX2luZGV4IGZldGNoZWQgJS4wZiBoZWFwIHR1 cGxlcywgJS4wZiBpbmRleCB0dXBsZXM7IgorCQkJCQkJIiAlLjBmIGF1eCBpbmRleCB0dXBsZXM7 IGluc2VydGVkICUuMGYgbWlzc2luZyB0dXBsZXMiLAorCQkgc3RhdGUuaHR1cHMsIHN0YXRlLml0 dXBzLCBhdXhTdGF0ZS5pdHVwcywgc3RhdGUudHVwc19pbnNlcnRlZCk7CiAKIAkvKiBSb2xsIGJh Y2sgYW55IEdVQyBjaGFuZ2VzIGV4ZWN1dGVkIGJ5IGluZGV4IGZ1bmN0aW9ucyAqLwogCUF0RU9Y YWN0X0dVQyhmYWxzZSwgc2F2ZV9uZXN0bGV2ZWwpOwpAQCAtMzQ3Myw2ICszNzAwLDcgQEAgdmFs aWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KQog CVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZV91c2VyaWQsIHNhdmVfc2VjX2NvbnRleHQpOwog CiAJLyogQ2xvc2UgcmVscywgYnV0IGtlZXAgbG9ja3MgKi8KKwlpbmRleF9jbG9zZShhdXhJbmRl eFJlbGF0aW9uLCBOb0xvY2spOwogCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7 CiAJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOwogfQpAQCAtMzUzMyw2ICszNzYx LDEyIEBAIGluZGV4X3NldF9zdGF0ZV9mbGFncyhPaWQgaW5kZXhJZCwgSW5kZXhTdGF0ZUZsYWdz QWN0aW9uIGFjdGlvbikKIAkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsKIAkJCWlu ZGV4Rm9ybS0+aW5kaXN2YWxpZCA9IHRydWU7CiAJCQlicmVhazsKKwkJY2FzZSBJTkRFWF9EUk9Q X0NMRUFSX1JFQURZOgorCQkJLyogQ2xlYXIgaW5kaXNyZWFkeSBkdXJpbmcgYSBDUkVBVEUgSU5E RVggQ09OQ1VSUkVOVExZIHNlcXVlbmNlICovCisJCQlBc3NlcnQoaW5kZXhGb3JtLT5pbmRpc3Jl YWR5KTsKKwkJCUFzc2VydCghaW5kZXhGb3JtLT5pbmRpc3ZhbGlkKTsKKwkJCWluZGV4Rm9ybS0+ aW5kaXNyZWFkeSA9IGZhbHNlOworCQkJYnJlYWs7CiAJCWNhc2UgSU5ERVhfRFJPUF9DTEVBUl9W QUxJRDoKIAogCQkJLyoKQEAgLTM4MDQsNiArNDAzOCwxMyBAQCByZWluZGV4X2luZGV4KGNvbnN0 IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJaW5kZXhJbmZvLT5paV9FeGNsdXNp b25TdHJhdHMgPSBOVUxMOwogCX0KIAorCS8qIEF1eGlsaWFyeSBpbmRleGVzIGFyZSBub3QgYWxs b3dlZCB0byBiZSByZWJ1aWx0ICovCisJaWYgKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5KQorCQll cmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJIGVycm1zZygicmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlc1wiIG5vdCBzdXBw b3J0ZWQiLAorCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpUmVsKSkpKTsKKwogCS8qIFN1 cHByZXNzIHVzZSBvZiB0aGUgdGFyZ2V0IGluZGV4IHdoaWxlIHJlYnVpbGRpbmcgaXQgKi8KIAlT ZXRSZWluZGV4UHJvY2Vzc2luZyhoZWFwSWQsIGluZGV4SWQpOwogCkBAIC00MDQ2LDYgKzQyODcs NyBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsaWQs IGludCBmbGFncywKIAl7CiAJCU9pZAkJCWluZGV4T2lkID0gbGZpcnN0X29pZChpbmRleElkKTsK IAkJT2lkCQkJaW5kZXhOYW1lc3BhY2VJZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4T2lkKTsK KwkJT2lkCQkJaW5kZXhBbSA9IGdldF9yZWxfcmVsYW0oaW5kZXhPaWQpOwogCiAJCS8qCiAJCSAq IFNraXAgYW55IGludmFsaWQgaW5kZXhlcyBvbiBhIFRPQVNUIHRhYmxlLiAgVGhlc2UgY2FuIG9u bHkgYmUKQEAgLTQwNzEsNiArNDMxMywxOCBAQCByZWluZGV4X3JlbGF0aW9uKGNvbnN0IFJlaW5k ZXhTdG10ICpzdG10LCBPaWQgcmVsaWQsIGludCBmbGFncywKIAkJCWNvbnRpbnVlOwogCQl9CiAK KwkJaWYgKGluZGV4QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWVyZXBvcnQoV0FSTklORywK KwkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkgZXJy bXNnKCJza2lwcGluZyByZWluZGV4IG9mIGF1eGlsaWFyeSBpbmRleCBcIiVzLiVzXCIiLAorCQkJ CQkJCWdldF9uYW1lc3BhY2VfbmFtZShpbmRleE5hbWVzcGFjZUlkKSwKKwkJCQkJCQlnZXRfcmVs X25hbWUoaW5kZXhPaWQpKSkpOworCQkJaWYgKGZsYWdzICYgUkVJTkRFWF9SRUxfU1VQUFJFU1Nf SU5ERVhfVVNFKQorCQkJCVJlbW92ZVJlaW5kZXhQZW5kaW5nKGluZGV4T2lkKTsKKwkJCWNvbnRp bnVlOworCQl9CisKIAkJcmVpbmRleF9pbmRleChzdG10LCBpbmRleE9pZCwgIShmbGFncyAmIFJF SU5ERVhfUkVMX0NIRUNLX0NPTlNUUkFJTlRTKSwKIAkJCQkJICBwZXJzaXN0ZW5jZSwgcGFyYW1z KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Muc3FsCmluZGV4IDA1OWU4Nzc4Y2E3Li41 OWI3N2ZmNzUxMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmlld3Mu c3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApAQCAtMTMwOCwx NiArMTMwOCwxNyBAQCBDUkVBVEUgVklFVyBwZ19zdGF0X3Byb2dyZXNzX2NyZWF0ZV9pbmRleCBB UwogICAgICAgICAgICAgICAgICAgICAgIEVORCBBUyBjb21tYW5kLAogICAgICAgICBDQVNFIFMu cGFyYW0xMCBXSEVOIDAgVEhFTiAnaW5pdGlhbGl6aW5nJwogICAgICAgICAgICAgICAgICAgICAg ICBXSEVOIDEgVEhFTiAnd2FpdGluZyBmb3Igd3JpdGVycyBiZWZvcmUgYnVpbGQnCi0gICAgICAg ICAgICAgICAgICAgICAgIFdIRU4gMiBUSEVOICdidWlsZGluZyBpbmRleCcgfHwKKyAgICAgICAg ICAgICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgdG8gdXNlIGF1 eGlsaWFyeSBpbmRleCcKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ2J1aWxk aW5nIGluZGV4JyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKCc6ICcg fHwgcGdfaW5kZXhhbV9wcm9ncmVzc19waGFzZW5hbWUoUy5wYXJhbTk6Om9pZCwgUy5wYXJhbTEx KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKLSAgICAgICAgICAg ICAgICAgICAgICAgV0hFTiAzIFRIRU4gJ3dhaXRpbmcgZm9yIHdyaXRlcnMgYmVmb3JlIHZhbGlk YXRpb24nCi0gICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNCBUSEVOICdpbmRleCB2YWxpZGF0 aW9uOiBzY2FubmluZyBpbmRleCcKLSAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA1IFRIRU4g J2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJwotICAgICAgICAgICAgICAgICAgICAg ICBXSEVOIDYgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogc2Nhbm5pbmcgdGFibGUnCi0gICAgICAg ICAgICAgICAgICAgICAgIFdIRU4gNyBUSEVOICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3RzJwot ICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBi ZWZvcmUgbWFya2luZyBkZWFkJwotICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDkgVEhFTiAn d2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCisgICAgICAgICAgICAgICAgICAg ICAgIFdIRU4gNCBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9yZSB2YWxpZGF0aW9uJwor ICAgICAgICAgICAgICAgICAgICAgICBXSEVOIDUgVEhFTiAnaW5kZXggdmFsaWRhdGlvbjogc2Nh bm5pbmcgaW5kZXgnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gNiBUSEVOICdpbmRleCB2 YWxpZGF0aW9uOiBzb3J0aW5nIHR1cGxlcycKKyAgICAgICAgICAgICAgICAgICAgICAgV0hFTiA3 IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlcycKKyAgICAgICAgICAgICAg ICAgICAgICAgV0hFTiA4IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMnCisgICAgICAg ICAgICAgICAgICAgICAgIFdIRU4gOSBUSEVOICd3YWl0aW5nIGZvciByZWFkZXJzIGJlZm9yZSBt YXJraW5nIGRlYWQnCisgICAgICAgICAgICAgICAgICAgICAgIFdIRU4gMTAgVEhFTiAnd2FpdGlu ZyBmb3IgcmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIEVO RCBhcyBwaGFzZSwKICAgICAgICAgUy5wYXJhbTQgQVMgbG9ja2Vyc190b3RhbCwKICAgICAgICAg Uy5wYXJhbTUgQVMgbG9ja2Vyc19kb25lLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCA5 NzQyNDNjNWM2MC4uOWMzNDgyNWU5N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC0x ODEsNiArMTgxLDcgQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAogCQkJCQkgYm9v bCBpc1dpdGhvdXRPdmVybGFwcykKIHsKIAlib29sCQlpc2NvbnN0cmFpbnQ7CisJYm9vbAkJaXNh dXhpbGlhcnk7CiAJT2lkCQkgICAqdHlwZUlkczsKIAlPaWQJCSAgICpjb2xsYXRpb25JZHM7CiAJ T2lkCQkgICAqb3BjbGFzc0lkczsKQEAgLTIzMSw2ICsyMzIsNyBAQCBDaGVja0luZGV4Q29tcGF0 aWJsZShPaWQgb2xkSWQsCiAKIAlhbWNhbm9yZGVyID0gYW1Sb3V0aW5lLT5hbWNhbm9yZGVyOwog CWFtc3VtbWFyaXppbmcgPSBhbVJvdXRpbmUtPmFtc3VtbWFyaXppbmc7CisJaXNhdXhpbGlhcnkg PSBhY2Nlc3NNZXRob2RJZCA9PSBTVElSX0FNX09JRDsKIAogCS8qCiAJICogQ29tcHV0ZSB0aGUg b3BlcmF0b3IgY2xhc3NlcywgY29sbGF0aW9ucywgYW5kIGV4Y2x1c2lvbiBvcGVyYXRvcnMgZm9y CkBAIC0yNDIsNyArMjQ0LDggQEAgQ2hlY2tJbmRleENvbXBhdGlibGUoT2lkIG9sZElkLAogCSAq LwogCWluZGV4SW5mbyA9IG1ha2VJbmRleEluZm8obnVtYmVyT2ZBdHRyaWJ1dGVzLCBudW1iZXJP ZkF0dHJpYnV0ZXMsCiAJCQkJCQkJICBhY2Nlc3NNZXRob2RJZCwgTklMLCBOSUwsIGZhbHNlLCBm YWxzZSwKLQkJCQkJCQkgIGZhbHNlLCBmYWxzZSwgYW1zdW1tYXJpemluZywgaXNXaXRob3V0T3Zl cmxhcHMpOworCQkJCQkJCSAgZmFsc2UsIGZhbHNlLCBhbXN1bW1hcml6aW5nLAorCQkJCQkJCSAg aXNXaXRob3V0T3ZlcmxhcHMsIGlzYXV4aWxpYXJ5KTsKIAl0eXBlSWRzID0gcGFsbG9jX2FycmF5 KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMgPSBwYWxsb2NfYXJyYXko T2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCW9wY2xhc3NJZHMgPSBwYWxsb2NfYXJyYXkoT2lk LCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpAQCAtNTUyLDYgKzU1NSw3IEBAIERlZmluZUluZGV4KE9p ZCB0YWJsZUlkLAogewogCWJvb2wJCWNvbmN1cnJlbnQ7CiAJY2hhcgkgICAqaW5kZXhSZWxhdGlv bk5hbWU7CisJY2hhcgkgICAqYXV4SW5kZXhSZWxhdGlvbk5hbWUgPSBOVUxMOwogCWNoYXIJICAg KmFjY2Vzc01ldGhvZE5hbWU7CiAJT2lkCQkgICAqdHlwZUlkczsKIAlPaWQJCSAgICpjb2xsYXRp b25JZHM7CkBAIC01NjEsNiArNTY1LDcgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQsCiAJT2lk CQkJbmFtZXNwYWNlSWQ7CiAJT2lkCQkJdGFibGVzcGFjZUlkOwogCU9pZAkJCWNyZWF0ZWRDb25z dHJhaW50SWQgPSBJbnZhbGlkT2lkOworCU9pZAkJCWF1eEluZGV4UmVsYXRpb25JZCA9IEludmFs aWRPaWQ7CiAJTGlzdAkgICAqaW5kZXhDb2xOYW1lczsKIAlMaXN0CSAgICphbGxJbmRleFBhcmFt czsKIAlSZWxhdGlvbglyZWw7CkBAIC01ODIsNiArNTg3LDcgQEAgRGVmaW5lSW5kZXgoT2lkIHRh YmxlSWQsCiAJaW50CQkJbnVtYmVyT2ZLZXlBdHRyaWJ1dGVzOwogCVRyYW5zYWN0aW9uSWQgbGlt aXRYbWluOwogCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwlPYmplY3RBZGRyZXNzIGF1eEFkZHJl c3M7CiAJTG9ja1JlbElkCWhlYXByZWxpZDsKIAlMT0NLVEFHCQloZWFwbG9ja3RhZzsKIAlMT0NL TU9ERQlsb2NrbW9kZTsKQEAgLTgzMiw2ICs4MzgsMTUgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxl SWQsCiAJCQkJCQkJCQkJCXN0bXQtPmV4Y2x1ZGVPcE5hbWVzLAogCQkJCQkJCQkJCQlzdG10LT5w cmltYXJ5LAogCQkJCQkJCQkJCQlzdG10LT5pc2NvbnN0cmFpbnQpOworCS8qCisJICogU2VsZWN0 IG5hbWUgZm9yIGF1eGlsaWFyeSBpbmRleAorCSAqLworCWlmIChjb25jdXJyZW50KQorCQlhdXhJ bmRleFJlbGF0aW9uTmFtZSA9IENob29zZVJlbGF0aW9uTmFtZShpbmRleFJlbGF0aW9uTmFtZSwK KwkJCQkJCQkJCQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkJCSAgImNjYXV4IiwKKwkJCQkJCQkJCQkJ CSAgbmFtZXNwYWNlSWQsCisJCQkJCQkJCQkJCQkgIGZhbHNlKTsKIAogCS8qCiAJICogbG9vayB1 cCB0aGUgYWNjZXNzIG1ldGhvZCwgdmVyaWZ5IGl0IGNhbiBoYW5kbGUgdGhlIHJlcXVlc3RlZCBm ZWF0dXJlcwpAQCAtOTI3LDcgKzk0Miw4IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCQkJ CQkJCSAgIWNvbmN1cnJlbnQsCiAJCQkJCQkJICBjb25jdXJyZW50LAogCQkJCQkJCSAgYW1pc3N1 bW1hcml6aW5nLAotCQkJCQkJCSAgc3RtdC0+aXN3aXRob3V0b3ZlcmxhcHMpOworCQkJCQkJCSAg c3RtdC0+aXN3aXRob3V0b3ZlcmxhcHMsCisJCQkJCQkJICBmYWxzZSk7CiAKIAl0eXBlSWRzID0g cGFsbG9jX2FycmF5KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMgPSBw YWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpAQCAtMTU5Miw2ICsxNjA4LDE2 IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCQlyZXR1cm4gYWRkcmVzczsKIAl9CiAKKwkv KgorCSAqIEluIGNhc2Ugb2YgY29uY3VycmVudCBidWlsZCAtIGNyZWF0ZSBhdXhpbGlhcnkgaW5k ZXggcmVjb3JkLgorCSAqLworCWlmIChjb25jdXJyZW50KQorCXsKKwkJYXV4SW5kZXhSZWxhdGlv bklkID0gaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgocmVsLCBpbmRleFJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCXRhYmxlc3BhY2VJZCwgYXV4SW5kZXhSZWxhdGlvbk5hbWUpOworCQlPYmpl Y3RBZGRyZXNzU2V0KGF1eEFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25JZCwgYXV4SW5kZXhSZWxh dGlvbklkKTsKKwl9CisKIAlBdEVPWGFjdF9HVUMoZmFsc2UsIHJvb3Rfc2F2ZV9uZXN0bGV2ZWwp OwogCVNldFVzZXJJZEFuZFNlY0NvbnRleHQocm9vdF9zYXZlX3VzZXJpZCwgcm9vdF9zYXZlX3Nl Y19jb250ZXh0KTsKIApAQCAtMTYyMCwxMSArMTY0NiwxMSBAQCBEZWZpbmVJbmRleChPaWQgdGFi bGVJZCwKIAkvKgogCSAqIEZvciBhIGNvbmN1cnJlbnQgYnVpbGQsIGl0J3MgaW1wb3J0YW50IHRv IG1ha2UgdGhlIGNhdGFsb2cgZW50cmllcwogCSAqIHZpc2libGUgdG8gb3RoZXIgdHJhbnNhY3Rp b25zIGJlZm9yZSB3ZSBzdGFydCB0byBidWlsZCB0aGUgaW5kZXguIFRoYXQKLQkgKiB3aWxsIHBy ZXZlbnQgdGhlbSBmcm9tIG1ha2luZyBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZXMuICBUaGUgbmV3 IGluZGV4Ci0JICogd2lsbCBiZSBtYXJrZWQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3Zh bGlkLCBzbyB0aGF0IG5vIG9uZSBlbHNlCi0JICogdHJpZXMgdG8gZWl0aGVyIGluc2VydCBpbnRv IGl0IG9yIHVzZSBpdCBmb3IgcXVlcmllcy4KKwkgKiB3aWxsIHByZXZlbnQgdGhlbSBmcm9tIG1h a2luZyBpbmNvbXBhdGlibGUgSE9UIHVwZGF0ZXMuIE5ldyBpbmRleGVzCisJICogKG1haW4gYW5k IGF1eGlsaWFyeSkgd2lsbCBiZSBtYXJrZWQgbm90IGluZGlzcmVhZHkgYW5kIG5vdCBpbmRpc3Zh bGlkLAorCSAqIHNvIHRoYXQgbm8gb25lIGVsc2UgdHJpZXMgdG8gZWl0aGVyIGluc2VydCBpbnRv IGl0IG9yIHVzZSBpdCBmb3IgcXVlcmllcy4KIAkgKgotCSAqIFdlIG11c3QgY29tbWl0IG91ciBj dXJyZW50IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIGluZGV4IGJlY29tZXMKKwkgKiBXZSBtdXN0 IGNvbW1pdCBvdXIgY3VycmVudCB0cmFuc2FjdGlvbiBzbyB0aGF0IHRoZSBpbmRleGVzIGJlY29t ZXMKIAkgKiB2aXNpYmxlOyB0aGVuIHN0YXJ0IGFub3RoZXIuICBOb3RlIHRoYXQgYWxsIHRoZSBk YXRhIHN0cnVjdHVyZXMgd2UganVzdAogCSAqIGJ1aWx0IGFyZSBsb3N0IGluIHRoZSBjb21taXQu ICBUaGUgb25seSBkYXRhIHdlIGtlZXAgcGFzdCBoZXJlIGFyZSB0aGUKIAkgKiByZWxhdGlvbiBJ RHMuCkBAIC0xNjM0LDcgKzE2NjAsNyBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkgKiBj YW5ub3QgYmxvY2ssIGV2ZW4gaWYgc29tZW9uZSBlbHNlIGlzIHdhaXRpbmcgZm9yIGFjY2Vzcywg YmVjYXVzZSB3ZQogCSAqIGFscmVhZHkgaGF2ZSB0aGUgc2FtZSBsb2NrIHdpdGhpbiBvdXIgdHJh bnNhY3Rpb24uCiAJICoKLQkgKiBOb3RlOiB3ZSBkb24ndCBjdXJyZW50bHkgYm90aGVyIHdpdGgg YSBzZXNzaW9uIGxvY2sgb24gdGhlIGluZGV4LAorCSAqIE5vdGU6IHdlIGRvbid0IGN1cnJlbnRs eSBib3RoZXIgd2l0aCBhIHNlc3Npb24gbG9jayBvbiB0aGUgaW5kZXhlcywKIAkgKiBiZWNhdXNl IHRoZXJlIGFyZSBubyBvcGVyYXRpb25zIHRoYXQgY291bGQgY2hhbmdlIGl0cyBzdGF0ZSB3aGls ZSB3ZQogCSAqIGhvbGQgbG9jayBvbiB0aGUgcGFyZW50IHRhYmxlLiAgVGhpcyBtaWdodCBuZWVk IHRvIGNoYW5nZSBsYXRlci4KIAkgKi8KQEAgLTE2NzMsNyArMTY5OSw3IEBAIERlZmluZUluZGV4 KE9pZCB0YWJsZUlkLAogCSAqIHdpdGggdGhlIG9sZCBsaXN0IG9mIGluZGV4ZXMuICBVc2UgU2hh cmVMb2NrIHRvIGNvbnNpZGVyIHJ1bm5pbmcKIAkgKiB0cmFuc2FjdGlvbnMgdGhhdCBob2xkIGxv Y2tzIHRoYXQgcGVybWl0IHdyaXRpbmcgdG8gdGhlIHRhYmxlLiAgTm90ZSB3ZQogCSAqIGRvIG5v dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHhhY3RzIHRoYXQgb3BlbiB0aGUgdGFibGUgZm9yIHdyaXRp bmcgYWZ0ZXIKLQkgKiB0aGlzIHBvaW50OyB0aGV5IHdpbGwgc2VlIHRoZSBuZXcgaW5kZXggd2hl biB0aGV5IG9wZW4gaXQuCisJICogdGhpcyBwb2ludDsgdGhleSB3aWxsIHNlZSB0aGUgbmV3IGlu ZGV4ZXMgd2hlbiB0aGV5IG9wZW4gaXQuCiAJICoKIAkgKiBOb3RlOiB0aGUgcmVhc29uIHdlIHVz ZSBhY3R1YWwgbG9jayBhY3F1aXNpdGlvbiBoZXJlLCByYXRoZXIgdGhhbiBqdXN0CiAJICogY2hl Y2tpbmcgdGhlIFByb2NBcnJheSBhbmQgc2xlZXBpbmcsIGlzIHRoYXQgZGVhZGxvY2sgaXMgcG9z c2libGUgaWYKQEAgLTE2ODUsMTQgKzE3MTEsNDQgQEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQs CiAKIAkvKgogCSAqIEF0IHRoaXMgbW9tZW50IHdlIGFyZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5v IHRyYW5zYWN0aW9ucyB3aXRoIHRoZQotCSAqIHRhYmxlIG9wZW4gZm9yIHdyaXRlIHRoYXQgZG9u J3QgaGF2ZSB0aGlzIG5ldyBpbmRleCBpbiB0aGVpciBsaXN0IG9mCisJICogdGFibGUgb3BlbiBm b3Igd3JpdGUgdGhhdCBkb24ndCBoYXZlIHRoaXMgbmV3IGluZGV4ZXMgaW4gdGhlaXIgbGlzdCBv ZgogCSAqIGluZGV4ZXMuICBXZSBoYXZlIHdhaXRlZCBvdXQgYWxsIHRoZSBleGlzdGluZyB0cmFu c2FjdGlvbnMgYW5kIGFueSBuZXcKLQkgKiB0cmFuc2FjdGlvbiB3aWxsIGhhdmUgdGhlIG5ldyBp bmRleCBpbiBpdHMgbGlzdCwgYnV0IHRoZSBpbmRleCBpcyBzdGlsbAotCSAqIG1hcmtlZCBhcyAi bm90LXJlYWR5LWZvci1pbnNlcnRzIi4gIFRoZSBpbmRleCBpcyBjb25zdWx0ZWQgd2hpbGUKKwkg KiB0cmFuc2FjdGlvbiB3aWxsIGhhdmUgYm90aCBuZXcgaW5kZXhlcyBpbiBpdHMgbGlzdCwgYnV0 IGluZGV4ZXMgYXJlIHN0aWxsCisJICogbWFya2VkIGFzICJub3QtcmVhZHktZm9yLWluc2VydHMi LiBUaGUgaW5kZXhlcyBhcmUgY29uc3VsdGVkIHdoaWxlCiAJICogZGVjaWRpbmcgSE9ULXNhZmV0 eSB0aG91Z2guICBUaGlzIGFycmFuZ2VtZW50IGVuc3VyZXMgdGhhdCBubyBuZXcgSE9UCiAJICog Y2hhaW5zIGNhbiBiZSBjcmVhdGVkIHdoZXJlIHRoZSBuZXcgdHVwbGUgYW5kIHRoZSBvbGQgdHVw bGUgaW4gdGhlCiAJICogY2hhaW4gaGF2ZSBkaWZmZXJlbnQgaW5kZXgga2V5cy4KIAkgKgorCSAq IE5vdyBjYWxsIGJ1aWxkIG9uIGF1eGlsaWFyeSBpbmRleC4gSW5kZXggd2lsbCBiZSBjcmVhdGVk IGVtcHR5IHdpdGhvdXQKKwkgKiBhbnkgYWN0dWFsIGhlYXAgc2NhbiwgYnV0IG1hcmtlZCBhcyAi cmVhZHktZm9yLWluc2VydHMiLiBUaGUgZ29hbCBvZgorCSAqIHRoYXQgaW5kZXggaXMgYWNjdW11 bGF0ZSBuZXcgdHVwbGVzIHdoaWxlIG1haW4gaW5kZXggaXMgYWN0dWFsbHkgYnVpbHQuCisJICov CisKKwkvKiBTZXQgQWN0aXZlU25hcHNob3Qgc2luY2UgZnVuY3Rpb25zIGluIHRoZSBpbmRleGVz IG1heSBuZWVkIGl0ICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNo b3QoKSk7CisKKwlpbmRleF9jb25jdXJyZW50bHlfYnVpbGQodGFibGVJZCwgYXV4SW5kZXhSZWxh dGlvbklkKTsKKwkvKiB3ZSBjYW4gZG8gYXdheSB3aXRoIG91ciBzbmFwc2hvdCAqLworCVBvcEFj dGl2ZVNuYXBzaG90KCk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwlTdGFydFRy YW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyogVGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB0 byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1YWxpZmllcyAqLworCWlmIChzYWZlX2luZGV4KQorCQlz ZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0o UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0VfV0FJVF8yKTsKKwkvKgorCSAqIE5vdyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgbm8gdHJhbnNh Y3Rpb25zIHdpdGggdGhlIHdpdGggYXV4aWxpYXJ5IGluZGV4CisJICogbWFya2VkIGFzICJub3Qt cmVhZHktZm9yLWluc2VydHMiLgorCSAqLworCVdhaXRGb3JMb2NrZXJzKGhlYXBsb2NrdGFnLCBT aGFyZUxvY2ssIHRydWUpOworCisJLyoKKwkgKiBBdCB0aGlzIG1vbWVudCB3ZSBhcmUgc3VyZSB3 aGF0IGFsbCBuZXcgdHVwbGVzIGluIHRhYmxlIGFyZSBpbnNlcnRlZCBpbnRvCisJICogYXV4aWxp YXJ5IGluZGV4LiBOb3cgaXQgaXMgdGltZSB0byBidWlsZCB0aGUgdGFyZ2V0IGluZGV4IGl0c2Vs Zi4KKwkgKgogCSAqIFdlIG5vdyB0YWtlIGEgbmV3IHNuYXBzaG90LCBhbmQgYnVpbGQgdGhlIGlu ZGV4IHVzaW5nIGFsbCB0dXBsZXMgdGhhdAogCSAqIGFyZSB2aXNpYmxlIGluIHRoaXMgc25hcHNo b3QuICBXZSBjYW4gYmUgc3VyZSB0aGF0IGFueSBIT1QgdXBkYXRlcyB0bwogCSAqIHRoZXNlIHR1 cGxlcyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgaW5kZXgsIHNpbmNlIGFueSB1cGRhdGVz IG1hZGUKQEAgLTE3MjcsOSArMTc4MywyOCBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkg KiB0aGUgaW5kZXggbWFya2VkIGFzIHJlYWQtb25seSBmb3IgdXBkYXRlcy4KIAkgKi8KIAlwZ3N0 YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJ CQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzIpOworCQkJCQkJCQkgUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7CiAJV2FpdEZvckxvY2tlcnMoaGVhcGxvY2t0YWcsIFNo YXJlTG9jaywgdHJ1ZSk7CiAKKwkvKgorCSAqIFVwZGF0aW5nIHBnX2luZGV4IG1pZ2h0IGludm9s dmUgVE9BU1QgdGFibGUgYWNjZXNzLCBzbyBlbnN1cmUgd2UKKwkgKiBoYXZlIGEgdmFsaWQgc25h cHNob3QuCisJICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3Qo KSk7CisJLyoKKwkgKiBOb3cgdGFyZ2V0IGluZGV4IGlzIG1hcmtlZCBhcyAicmVhZHkiIGZvciBh bGwgdHJhbnNhY3Rpb25zLiBTbywgYXV4aWxpYXJ5CisJICogaW5kZXggaXMgbm90IG1vcmUgbmVl ZGVkLiBTbywgc3RhcnQgcmVtb3ZpbmcgcHJvY2VzcyBieSByZXZlcnRpbmcgInJlYWR5IgorCSAq IGZsYWcuCisJICovCisJaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKGF1eEluZGV4UmVsYXRpb25JZCwg SU5ERVhfRFJPUF9DTEVBUl9SRUFEWSk7CisJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJLyog VGVsbCBjb25jdXJyZW50IGluZGV4IGJ1aWxkcyB0byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1YWxp ZmllcyAqLworCWlmIChzYWZlX2luZGV4KQorCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOwor CiAJLyoKIAkgKiBOb3cgdGFrZSB0aGUgInJlZmVyZW5jZSBzbmFwc2hvdCIgdGhhdCB3aWxsIGJl IHVzZWQgYnkgdmFsaWRhdGVfaW5kZXgoKQogCSAqIHRvIGZpbHRlciBjYW5kaWRhdGUgdHVwbGVz LiAgQmV3YXJlISAgVGhlcmUgbWlnaHQgc3RpbGwgYmUgc25hcHNob3RzIGluCkBAIC0xNzQ3LDI0 ICsxODIyLDE0IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCSAqLwogCXNuYXBzaG90ID0g UmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCVB1c2hBY3RpdmVT bmFwc2hvdChzbmFwc2hvdCk7Ci0KIAkvKgotCSAqIFNjYW4gdGhlIGluZGV4IGFuZCB0aGUgaGVh cCwgaW5zZXJ0IGFueSBtaXNzaW5nIGluZGV4IGVudHJpZXMuCi0JICovCi0JdmFsaWRhdGVfaW5k ZXgodGFibGVJZCwgaW5kZXhSZWxhdGlvbklkLCBzbmFwc2hvdCk7Ci0KLQkvKgotCSAqIERyb3Ag dGhlIHJlZmVyZW5jZSBzbmFwc2hvdC4gIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgd2FpdGluZyBv dXQgb3RoZXIKLQkgKiBzbmFwc2hvdCBob2xkZXJzLCBlbHNlIHdlIHdpbGwgZGVhZGxvY2sgYWdh aW5zdCBvdGhlciBwcm9jZXNzZXMgYWxzbwotCSAqIGRvaW5nIENSRUFURSBJTkRFWCBDT05DVVJS RU5UTFksIHdoaWNoIHdvdWxkIHNlZSBvdXIgc25hcHNob3QgYXMgb25lCi0JICogdGhleSBtdXN0 IHdhaXQgZm9yLiAgQnV0IGZpcnN0LCBzYXZlIHRoZSBzbmFwc2hvdCdzIHhtaW4gdG8gdXNlIGFz Ci0JICogbGltaXRYbWluIGZvciBHZXRDdXJyZW50VmlydHVhbFhJRHMoKS4KKwkgKiBNZXJnZSBj b250ZW50IG9mIGF1eGlsaWFyeSBhbmQgdGFyZ2V0IGluZGV4ZXMgLSBpbnNlcnQgYW55IG1pc3Np bmcgaW5kZXggZW50cmllcy4KIAkgKi8KKwl2YWxpZGF0ZV9pbmRleCh0YWJsZUlkLCBpbmRleFJl bGF0aW9uSWQsIGF1eEluZGV4UmVsYXRpb25JZCwgc25hcHNob3QpOwogCWxpbWl0WG1pbiA9IHNu YXBzaG90LT54bWluOwogCiAJUG9wQWN0aXZlU25hcHNob3QoKTsKIAlVbnJlZ2lzdGVyU25hcHNo b3Qoc25hcHNob3QpOwotCiAJLyoKIAkgKiBUaGUgc25hcHNob3Qgc3Vic3lzdGVtIGNvdWxkIHN0 aWxsIGNvbnRhaW4gcmVnaXN0ZXJlZCBzbmFwc2hvdHMgdGhhdAogCSAqIGFyZSBob2xkaW5nIGJh Y2sgb3VyIHByb2Nlc3MncyBhZHZlcnRpc2VkIHhtaW47IGluIHBhcnRpY3VsYXIsIGlmCkBAIC0x NzkxLDcgKzE4NTYsNyBAQCBEZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkgKi8KIAlJTkpFQ1RJ T05fUE9JTlQoImRlZmluZV9pbmRleF9iZWZvcmVfc2V0X3ZhbGlkIiwgTlVMTCk7CiAJcGdzdGF0 X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCi0JCQkJCQkJ CSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zKTsKKwkJCQkJCQkJIFBST0dSRVNTX0NS RUFURUlEWF9QSEFTRV9XQUlUXzQpOwogCVdhaXRGb3JPbGRlclNuYXBzaG90cyhsaW1pdFhtaW4s IHRydWUpOwogCiAJLyoKQEAgLTE4MTYsNiArMTg4MSw1MyBAQCBEZWZpbmVJbmRleChPaWQgdGFi bGVJZCwKIAkgKiB0byByZXBsYW47IHNvIHJlbGNhY2hlIGZsdXNoIG9uIHRoZSBpbmRleCBpdHNl bGYgd2FzIHN1ZmZpY2llbnQuKQogCSAqLwogCUNhY2hlSW52YWxpZGF0ZVJlbGNhY2hlQnlSZWxp ZChoZWFwcmVsaWQucmVsSWQpOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRz IHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCisJaWYgKHNhZmVfaW5kZXgpCisJ CXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7CisKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3Bh cmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKKwkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFX1dBSVRfNSk7CisJLyogTm93IHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbiB0byBzZWUg YXV4aWxpYXJ5IGFzICJub24tcmVhZHkgZm9yIGluc2VydHMiICovCisJV2FpdEZvckxvY2tlcnMo aGVhcGxvY2t0YWcsIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssIHRydWUpOworCisJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8qCisJICog VXBkYXRpbmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBUT0FTVCB0YWJsZSBhY2Nlc3MsIHNvIGVu c3VyZSB3ZQorCSAqIGhhdmUgYSB2YWxpZCBzbmFwc2hvdC4KKwkgKi8KKwlQdXNoQWN0aXZlU25h cHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkvKiBOb3cgaXQgaXMgdGltZSB0byBt YXJrIGF1eGlsaWFyeSBpbmRleCBhcyBkZWFkICovCisJaW5kZXhfY29uY3VycmVudGx5X3NldF9k ZWFkKHRhYmxlSWQsIGF1eEluZGV4UmVsYXRpb25JZCk7CisJUG9wQWN0aXZlU25hcHNob3QoKTsK KworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5k KCk7CisKKwkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzIHRvIGlnbm9yZSB1cywgaWYg aW5kZXggcXVhbGlmaWVzICovCisJaWYgKHNhZmVfaW5kZXgpCisJCXNldF9pbmRleHNhZmVfcHJv Y2ZsYWdzKCk7CisKKwlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFU RUlEWF9QSEFTRSwKKwkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNik7CisJ LyogTm93IHdhaXQgZm9yIGFsbCB0cmFuc2FjdGlvbiB0byBpZ25vcmUgYXV4aWxpYXJ5IGJlY2F1 c2UgaXQgaXMgZGVhZCAqLworCVdhaXRGb3JMb2NrZXJzKGhlYXBsb2NrdGFnLCBBY2Nlc3NFeGNs dXNpdmVMb2NrLCB0cnVlKTsKKworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCVN0YXJ0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIERyb3AgYXV4aWxpYXJ5IGluZGV4Lgor CSAqCisJICogVXNlIFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVF9MT0NLIHNvIHRoYXQgaW5k ZXhfZHJvcCgpIHVzZXMgdGhlCisJICogcmlnaHQgbG9jayBsZXZlbC4KKwkgKi8KKwlwZXJmb3Jt RGVsZXRpb24oJmF1eEFkZHJlc3MsIERST1BfUkVTVFJJQ1QsCisJCQkJCQkJIFBFUkZPUk1fREVM RVRJT05fQ09OQ1VSUkVOVF9MT0NLIHwgUEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCk7CiAKIAkv KgogCSAqIExhc3QgdGhpbmcgdG8gZG8gaXMgcmVsZWFzZSB0aGUgc2Vzc2lvbi1sZXZlbCBsb2Nr IG9uIHRoZSBwYXJlbnQgdGFibGUuCkBAIC0zNTcwLDYgKzM2ODIsNyBAQCBSZWluZGV4UmVsYXRp b25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwg Y29uc3QgUmVpbgogCXR5cGVkZWYgc3RydWN0IFJlaW5kZXhJbmRleEluZm8KIAl7CiAJCU9pZAkJ CWluZGV4SWQ7CisJCU9pZAkJCWF1eEluZGV4SWQ7CiAJCU9pZAkJCXRhYmxlSWQ7CiAJCU9pZAkJ CWFtSWQ7CiAJCWJvb2wJCXNhZmU7CQkvKiBmb3Igc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MgKi8K QEAgLTM2NzUsOCArMzc4OCwxNSBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJCQlPaWQJ CQljZWxsT2lkID0gbGZpcnN0X29pZChsYyk7CiAJCQkJCVJlbGF0aW9uCWluZGV4UmVsYXRpb24g PSBpbmRleF9vcGVuKGNlbGxPaWQsCiAJCQkJCQkJCQkJCQkJCSAgIFNoYXJlVXBkYXRlRXhjbHVz aXZlTG9jayk7CisJCQkJCUluZGV4SW5mbyoJaW5kZXhJbmZvID0gQnVpbGREdW1teUluZGV4SW5m byhpbmRleFJlbGF0aW9uKTsKIAotCQkJCQlpZiAoIWluZGV4UmVsYXRpb24tPnJkX2luZGV4LT5p bmRpc3ZhbGlkKQorCisJCQkJCWlmIChpbmRleEluZm8tPmlpX0F1eGlsaWFyeSkKKwkJCQkJCWVy ZXBvcnQoV0FSTklORywoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlcy4l c1wiIiwKKwkJCQkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShjZWxs T2lkKSksCisJCQkJCQkJCQlnZXRfcmVsX25hbWUoY2VsbE9pZCkpKSk7CisJCQkJCWVsc2UgaWYg KCFpbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kaXN2YWxpZCkKIAkJCQkJCWVyZXBvcnQoV0FS TklORywKIAkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lU RV9TVEFURSksCiAJCQkJCQkJCSBlcnJtc2coInNraXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBp bmRleCBcIiVzLiVzXCIiLApAQCAtMzcyOCw4ICszODQ4LDE1IEBAIFJlaW5kZXhSZWxhdGlvbkNv bmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25z dCBSZWluCiAJCQkJCQlPaWQJCQljZWxsT2lkID0gbGZpcnN0X29pZChsYzIpOwogCQkJCQkJUmVs YXRpb24JaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oY2VsbE9pZCwKIAkJCQkJCQkJCQkJCQkJ CSAgIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCQkJCQlJbmRleEluZm8qCWluZGV4SW5m byA9IEJ1aWxkRHVtbXlJbmRleEluZm8oaW5kZXhSZWxhdGlvbik7CiAKLQkJCQkJCWlmICghaW5k ZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZGlzdmFsaWQpCisJCQkJCQlpZiAoaW5kZXhJbmZvLT5p aV9BdXhpbGlhcnkpCisJCQkJCQkJZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCQkJIGVycm1zZygic2tpcHBp bmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggXCIlcy4lc1wiIiwKKwkJCQkJCQkJCQkJZ2V0 X25hbWVzcGFjZV9uYW1lKGdldF9yZWxfbmFtZXNwYWNlKGNlbGxPaWQpKSwKKwkJCQkJCQkJCQkJ Z2V0X3JlbF9uYW1lKGNlbGxPaWQpKSkpOworCQkJCQkJZWxzZSBpZiAoIWluZGV4UmVsYXRpb24t PnJkX2luZGV4LT5pbmRpc3ZhbGlkKQogCQkJCQkJCWVyZXBvcnQoV0FSTklORywKIAkJCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAogCQkJ CQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBpbnZhbGlkIGluZGV4IFwiJXMuJXNc IiIsCkBAIC0zNzkwLDYgKzM5MTcsMTMgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNv bnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJCQkJIGVycm1z ZygiY2Fubm90IHJlaW5kZXggaW52YWxpZCBpbmRleCBvbiBUT0FTVCB0YWJsZSIpKSk7CiAKKwkJ CQkvKiBBdXhpbGlhcnkgaW5kZXhlcyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgcmVidWlsdCAqLwor CQkJCWlmIChnZXRfcmVsX3JlbGFtKHJlbGF0aW9uT2lkKSA9PSBTVElSX0FNX09JRCkKKwkJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKKwkJCQkJCSBlcnJtc2coInJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4IFwiJXNcIiBu b3Qgc3VwcG9ydGVkIiwKKwkJCQkJCQkJZ2V0X3JlbF9uYW1lKHJlbGF0aW9uT2lkKSkpKTsKKwog CQkJCS8qCiAJCQkJICogQ2hlY2sgaWYgcGFyZW50IHJlbGF0aW9uIGNhbiBiZSBsb2NrZWQgYW5k IGlmIGl0IGV4aXN0cywKIAkJCQkgKiB0aGlzIG5lZWRzIHRvIGJlIGRvbmUgYXQgdGhpcyBzdGFn ZSBhcyB0aGUgbGlzdCBvZiBpbmRleGVzCkBAIC0zODkzLDE1ICs0MDI3LDE4IEBAIFJlaW5kZXhS ZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9u T2lkLCBjb25zdCBSZWluCiAJZm9yZWFjaChsYywgaW5kZXhJZHMpCiAJewogCQljaGFyCSAgICpj b25jdXJyZW50TmFtZTsKKwkJY2hhcgkgICAqYXV4Q29uY3VycmVudE5hbWU7CiAJCVJlaW5kZXhJ bmRleEluZm8gKmlkeCA9IGxmaXJzdChsYyk7CiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeDsK IAkJT2lkCQkJbmV3SW5kZXhJZDsKKwkJT2lkCQkJYXV4SW5kZXhJZDsKIAkJUmVsYXRpb24JaW5k ZXhSZWw7CiAJCVJlbGF0aW9uCWhlYXBSZWw7CiAJCU9pZAkJCXNhdmVfdXNlcmlkOwogCQlpbnQJ CQlzYXZlX3NlY19jb250ZXh0OwogCQlpbnQJCQlzYXZlX25lc3RsZXZlbDsKIAkJUmVsYXRpb24J bmV3SW5kZXhSZWw7CisJCVJlbGF0aW9uCWF1eEluZGV4UmVsOwogCQlMb2NrUmVsSWQgICpsb2Nr cmVsaWQ7CiAJCU9pZAkJCXRhYmxlc3BhY2VpZDsKIApAQCAtMzk1Miw2ICs0MDg5LDExIEBAIFJl aW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJl bGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCQkJCQkJCQkJCSJjY25ldyIsCiAJCQkJCQkJCQkJCWdl dF9yZWxfbmFtZXNwYWNlKGluZGV4UmVsLT5yZF9pbmRleC0+aW5kcmVsaWQpLAogCQkJCQkJCQkJ CQlmYWxzZSk7CisJCWF1eENvbmN1cnJlbnROYW1lID0gQ2hvb3NlUmVsYXRpb25OYW1lKGdldF9y ZWxfbmFtZShpZHgtPmluZGV4SWQpLAorCQkJCQkJCQkJCQlOVUxMLAorCQkJCQkJCQkJCQkiY2Nh dXgiLAorCQkJCQkJCQkJCQlnZXRfcmVsX25hbWVzcGFjZShpbmRleFJlbC0+cmRfaW5kZXgtPmlu ZHJlbGlkKSwKKwkJCQkJCQkJCQkJZmFsc2UpOwogCiAJCS8qIENob29zZSB0aGUgbmV3IHRhYmxl c3BhY2UsIGluZGV4ZXMgb2YgdG9hc3QgdGFibGVzIGFyZSBub3QgbW92ZWQgKi8KIAkJaWYgKE9p ZElzVmFsaWQocGFyYW1zLT50YWJsZXNwYWNlT2lkKSAmJgpAQCAtMzk2NSwxMiArNDEwNywxNyBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJCQkJCQkJCQkJCWlkeC0+aW5kZXhJZCwKIAkJ CQkJCQkJCQkJCQl0YWJsZXNwYWNlaWQsCiAJCQkJCQkJCQkJCQkJY29uY3VycmVudE5hbWUpOwor CQlhdXhJbmRleElkID0gaW5kZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgoaGVhcFJlbCwKKwkJ CQkJCQkJCQkJCSAgIG5ld0luZGV4SWQsCisJCQkJCQkJCQkJCQkgICB0YWJsZXNwYWNlaWQsCisJ CQkJCQkJCQkJCQkgICBhdXhDb25jdXJyZW50TmFtZSk7CiAKIAkJLyoKIAkJICogTm93IG9wZW4g dGhlIHJlbGF0aW9uIG9mIHRoZSBuZXcgaW5kZXgsIGEgc2Vzc2lvbi1sZXZlbCBsb2NrIGlzCiAJ CSAqIGFsc28gbmVlZGVkIG9uIGl0LgogCQkgKi8KIAkJbmV3SW5kZXhSZWwgPSBpbmRleF9vcGVu KG5ld0luZGV4SWQsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisJCWF1eEluZGV4UmVsID0g aW5kZXhfb3BlbihhdXhJbmRleElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCiAJCS8q CiAJCSAqIFNhdmUgdGhlIGxpc3Qgb2YgT0lEcyBhbmQgbG9ja3MgaW4gcHJpdmF0ZSBjb250ZXh0 CkBAIC0zOTc5LDYgKzQxMjYsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCiAJCW5ld2lk eCA9IHBhbGxvY19vYmplY3QoUmVpbmRleEluZGV4SW5mbyk7CiAJCW5ld2lkeC0+aW5kZXhJZCA9 IG5ld0luZGV4SWQ7CisJCW5ld2lkeC0+YXV4SW5kZXhJZCA9IGF1eEluZGV4SWQ7CiAJCW5ld2lk eC0+c2FmZSA9IGlkeC0+c2FmZTsKIAkJbmV3aWR4LT50YWJsZUlkID0gaWR4LT50YWJsZUlkOwog CQluZXdpZHgtPmFtSWQgPSBpZHgtPmFtSWQ7CkBAIC0zOTk3LDEwICs0MTQ1LDE0IEBAIFJlaW5k ZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0 aW9uT2lkLCBjb25zdCBSZWluCiAJCWxvY2tyZWxpZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElk KTsKIAkJKmxvY2tyZWxpZCA9IG5ld0luZGV4UmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CiAJ CXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CisJCWxv Y2tyZWxpZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsKKwkJKmxvY2tyZWxpZCA9IGF1eElu ZGV4UmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CisJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5k KHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CiAKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOwogCiAJCWluZGV4X2Nsb3NlKGluZGV4UmVsLCBOb0xvY2spOworCQlpbmRleF9j bG9zZShhdXhJbmRleFJlbCwgTm9Mb2NrKTsKIAkJaW5kZXhfY2xvc2UobmV3SW5kZXhSZWwsIE5v TG9jayk7CiAKIAkJLyogUm9sbCBiYWNrIGFueSBHVUMgY2hhbmdlcyBleGVjdXRlZCBieSBpbmRl eCBmdW5jdGlvbnMgKi8KQEAgLTQwODEsMTMgKzQyMzMsNjAgQEAgUmVpbmRleFJlbGF0aW9uQ29u Y3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0 IFJlaW4KIAkgKiBkb2luZyB0aGF0LCB3YWl0IHVudGlsIG5vIHJ1bm5pbmcgdHJhbnNhY3Rpb25z IGNvdWxkIGhhdmUgdGhlIHRhYmxlIG9mCiAJICogdGhlIGluZGV4IG9wZW4gd2l0aCB0aGUgb2xk IGxpc3Qgb2YgaW5kZXhlcy4gIFNlZSAicGhhc2UgMiIgaW4KIAkgKiBEZWZpbmVJbmRleCgpIGZv ciBtb3JlIGRldGFpbHMuCisJKi8KKworCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJCQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0Vf V0FJVF8xKTsKKwlXYWl0Rm9yTG9ja2Vyc011bHRpcGxlKGxvY2tUYWdzLCBTaGFyZUxvY2ssIHRy dWUpOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJLyoKKwkgKiBOb3cgYnVpbGQg YWxsIGF1eGlsaWFyeSBpbmRleGVzIGFuZCBtYXJrIHRoZW0gYXMgInJlYWR5LWZvci1pbnNlcnRz Ii4KKwkgKi8KKwlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKKwl7CisJCVJlaW5kZXhJbmRleElu Zm8gKm5ld2lkeCA9IGxmaXJzdChsYyk7CisKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsK KworCQkvKgorCQkgKiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0ZWQgYWJvcnQuICBUaGlzIGlzIGlu c2lkZSBhIHRyYW5zYWN0aW9uIHNvIGFzCisJCSAqIHhhY3QuYyBkb2VzIG5vdCBpc3N1ZSBhIHVz ZWxlc3MgV0FSTklORywgYW5kIGVuc3VyZXMgdGhhdAorCQkgKiBzZXNzaW9uLWxldmVsIGxvY2tz IGFyZSBjbGVhbmVkIHVwIG9uIGFib3J0LgorCQkgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKKworCQkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXhpbmcgdG8gaWdub3JlIHVzLCBpZiBpbmRl eCBxdWFsaWZpZXMgKi8KKwkJaWYgKG5ld2lkeC0+c2FmZSkKKwkJCXNldF9pbmRleHNhZmVfcHJv Y2ZsYWdzKCk7CisKKwkJLyogU2V0IEFjdGl2ZVNuYXBzaG90IHNpbmNlIGZ1bmN0aW9ucyBpbiB0 aGUgaW5kZXhlcyBtYXkgbmVlZCBpdCAqLworCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNh Y3Rpb25TbmFwc2hvdCgpKTsKKworCQkvKiBCdWlsZCBhdXhpbGlhcnkgaW5kZXgsIGl0IGlzIGZh c3QgLSB3aXRob3V0IGFueSBhY3R1YWwgaGVhcCBzY2FuLCBqdXN0IGFuIGVtcHR5IGluZGV4LiAq LworCQlpbmRleF9jb25jdXJyZW50bHlfYnVpbGQobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmF1 eEluZGV4SWQpOworCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisJCUNvbW1pdFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCX0KKworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAq IEJlY2F1c2Ugd2UgZG9uJ3QgdGFrZSBhIHNuYXBzaG90IGluIHRoaXMgdHJhbnNhY3Rpb24sIHRo ZXJlJ3Mgbm8gbmVlZAorCSAqIHRvIHNldCB0aGUgUFJPQ19JTl9TQUZFX0lDIGZsYWcgaGVyZS4K IAkgKi8KIAogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMSk7CisJCQkJ CQkJCSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8yKTsKKwkvKgorCSAqIFdhaXQgdW50 aWwgYWxsIGF1eGlsaWFyeSBpbmRleGVzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgYnkgYWxsCisJ ICogdHJhbnNhY3Rpb25zLgorCSAqLwogCVdhaXRGb3JMb2NrZXJzTXVsdGlwbGUobG9ja1RhZ3Ms IFNoYXJlTG9jaywgdHJ1ZSk7CiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKKwkvKiBO b3cgaXQgaXMgdGltZSB0byBwZXJmb3JtIHRhcmdldCBpbmRleCBidWlsZC4gKi8KIAlmb3JlYWNo KGxjLCBuZXdJbmRleElkcykKIAl7CiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeCA9IGxmaXJz dChsYyk7CkBAIC00MTM0LDYgKzQzMzMsNDEgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5 KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkg KiBuZWVkIHRvIHNldCB0aGUgUFJPQ19JTl9TQUZFX0lDIGZsYWcgaGVyZS4KIAkgKi8KIAorCXBn c3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAorCQkJ CQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMyk7CisJV2FpdEZvckxvY2tlcnNN dWx0aXBsZShsb2NrVGFncywgU2hhcmVMb2NrLCB0cnVlKTsKKwlDb21taXRUcmFuc2FjdGlvbkNv bW1hbmQoKTsKKworCS8qCisJICogQXQgdGhpcyBtb21lbnQgYWxsIHRhcmdldCBpbmRleGVzIGFy ZSBtYXJrZWQgYXMgInJlYWR5LXRvLWluc2VydCIuIFNvLAorCSAqIHdlIGFyZSBmcmVlIHRvIHN0 YXJ0IHByb2Nlc3Mgb2YgZHJvcHBpbmcgYXV4aWxpYXJ5IGluZGV4ZXMuCisJICovCisJZm9yZWFj aChsYywgbmV3SW5kZXhJZHMpCisJeworCQlSZWluZGV4SW5kZXhJbmZvICpuZXdpZHggPSBsZmly c3QobGMpOworCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQkvKgorCQkgKiBDaGVjayBm b3IgdXNlci1yZXF1ZXN0ZWQgYWJvcnQuICBUaGlzIGlzIGluc2lkZSBhIHRyYW5zYWN0aW9uIHNv IGFzCisJCSAqIHhhY3QuYyBkb2VzIG5vdCBpc3N1ZSBhIHVzZWxlc3MgV0FSTklORywgYW5kIGVu c3VyZXMgdGhhdAorCQkgKiBzZXNzaW9uLWxldmVsIGxvY2tzIGFyZSBjbGVhbmVkIHVwIG9uIGFi b3J0LgorCQkgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBUZWxsIGNvbmN1 cnJlbnQgaW5kZXhpbmcgdG8gaWdub3JlIHVzLCBpZiBpbmRleCBxdWFsaWZpZXMgKi8KKwkJaWYg KG5ld2lkeC0+c2FmZSkKKwkJCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7CisKKwkJLyoKKwkJ ICogVXBkYXRpbmcgcGdfaW5kZXggbWlnaHQgaW52b2x2ZSBUT0FTVCB0YWJsZSBhY2Nlc3MsIHNv IGVuc3VyZSB3ZQorCQkgKiBoYXZlIGEgdmFsaWQgc25hcHNob3QuCisJCSAqLworCQlQdXNoQWN0 aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJaW5kZXhfc2V0X3N0YXRl X2ZsYWdzKG5ld2lkeC0+YXV4SW5kZXhJZCwgSU5ERVhfRFJPUF9DTEVBUl9SRUFEWSk7CisJCVBv cEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJfQor CiAJLyoKIAkgKiBQaGFzZSAzIG9mIFJFSU5ERVggQ09OQ1VSUkVOVExZCiAJICoKQEAgLTQxNDEs MTIgKzQzNzUsNiBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0 bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCSAqIHdlcmUgY3JlYXRlZCBk dXJpbmcgdGhlIHByZXZpb3VzIHBoYXNlLiAgU2VlICJwaGFzZSAzIiBpbiBEZWZpbmVJbmRleCgp CiAJICogZm9yIG1vcmUgZGV0YWlscy4KIAkgKi8KLQotCXBnc3RhdF9wcm9ncmVzc191cGRhdGVf cGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRF SURYX1BIQVNFX1dBSVRfMik7Ci0JV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgU2hh cmVMb2NrLCB0cnVlKTsKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKLQogCWZvcmVhY2go bGMsIG5ld0luZGV4SWRzKQogCXsKIAkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0 KGxjKTsKQEAgLTQxODQsNyArNDQxMiw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCXBy b2dyZXNzX3ZhbHNbM10gPSBuZXdpZHgtPmFtSWQ7CiAJCXBnc3RhdF9wcm9ncmVzc191cGRhdGVf bXVsdGlfcGFyYW0oNCwgcHJvZ3Jlc3NfaW5kZXgsIHByb2dyZXNzX3ZhbHMpOwogCi0JCXZhbGlk YXRlX2luZGV4KG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5pbmRleElkLCBzbmFwc2hvdCk7CisJ CXZhbGlkYXRlX2luZGV4KG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5pbmRleElkLCBuZXdpZHgt PmF1eEluZGV4SWQsIHNuYXBzaG90KTsKIAogCQkvKgogCQkgKiBXZSBjYW4gbm93IGRvIGF3YXkg d2l0aCBvdXIgYWN0aXZlIHNuYXBzaG90LCB3ZSBzdGlsbCBuZWVkIHRvIHNhdmUKQEAgLTQyMTMs NyArNDQ0MSw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3Rt dCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCSAqIHRoZXJlJ3Mgbm8gbmVl ZCB0byBzZXQgdGhlIFBST0NfSU5fU0FGRV9JQyBmbGFnIGhlcmUuCiAJCSAqLwogCQlwZ3N0YXRf cHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJ CSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zKTsKKwkJCQkJCQkJCSBQUk9HUkVTU19D UkVBVEVJRFhfUEhBU0VfV0FJVF80KTsKIAkJV2FpdEZvck9sZGVyU25hcHNob3RzKGxpbWl0WG1p biwgdHJ1ZSk7CiAKIAkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CkBAIC00MzAzLDE0ICs0 NTMxLDE0IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAq c3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJLyoKIAkgKiBQaGFzZSA1IG9mIFJF SU5ERVggQ09OQ1VSUkVOVExZCiAJICoKLQkgKiBNYXJrIHRoZSBvbGQgaW5kZXhlcyBhcyBkZWFk LiAgRmlyc3Qgd2UgbXVzdCB3YWl0IHVudGlsIG5vIHJ1bm5pbmcKLQkgKiB0cmFuc2FjdGlvbiBj b3VsZCBiZSB1c2luZyB0aGUgaW5kZXggZm9yIGEgcXVlcnkuICBTZWUgYWxzbworCSAqIE1hcmsg dGhlIG9sZCBhbmQgYXV4aWxpYXJ5IGluZGV4ZXMgYXMgZGVhZC4gRmlyc3Qgd2UgbXVzdCB3YWl0 IHVudGlsIG5vCisJICogcnVubmluZyB0cmFuc2FjdGlvbiBjb3VsZCBiZSB1c2luZyB0aGUgaW5k ZXggZm9yIGEgcXVlcnkuICBTZWUgYWxzbwogCSAqIGluZGV4X2Ryb3AoKSBmb3IgbW9yZSBkZXRh aWxzLgogCSAqLwogCiAJSU5KRUNUSU9OX1BPSU5UKCJyZWluZGV4X3JlbGF0aW9uX2NvbmN1cnJl bnRseV9iZWZvcmVfc2V0X2RlYWQiLCBOVUxMKTsKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3Bh cmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlE WF9QSEFTRV9XQUlUXzQpOworCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRf NSk7CiAJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgQWNjZXNzRXhjbHVzaXZlTG9j aywgdHJ1ZSk7CiAKIAlmb3JlYWNoKGxjLCBpbmRleElkcykKQEAgLTQzMzUsNiArNDU2MywyOCBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCX0KIAor CWZvcmVhY2gobGMsIG5ld0luZGV4SWRzKQorCXsKKwkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4 ID0gbGZpcnN0KGxjKTsKKworCQkvKgorCQkgKiBDaGVjayBmb3IgdXNlci1yZXF1ZXN0ZWQgYWJv cnQuICBUaGlzIGlzIGluc2lkZSBhIHRyYW5zYWN0aW9uIHNvIGFzCisJCSAqIHhhY3QuYyBkb2Vz IG5vdCBpc3N1ZSBhIHVzZWxlc3MgV0FSTklORywgYW5kIGVuc3VyZXMgdGhhdAorCQkgKiBzZXNz aW9uLWxldmVsIGxvY2tzIGFyZSBjbGVhbmVkIHVwIG9uIGFib3J0LgorCQkgKi8KKwkJQ0hFQ0tf Rk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKgorCQkgKiBVcGRhdGluZyBwZ19pbmRleCBtaWdodCBp bnZvbHZlIFRPQVNUIHRhYmxlIGFjY2Vzcywgc28gZW5zdXJlIHdlCisJCSAqIGhhdmUgYSB2YWxp ZCBzbmFwc2hvdC4KKwkJICovCisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNu YXBzaG90KCkpOworCisJCWluZGV4X2NvbmN1cnJlbnRseV9zZXRfZGVhZChuZXdpZHgtPnRhYmxl SWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CisKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKKwl9CisK IAkvKiBDb21taXQgdGhpcyB0cmFuc2FjdGlvbiB0byBtYWtlIHRoZSB1cGRhdGVzIHZpc2libGUu ICovCiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJU3RhcnRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKQEAgLTQzNDgsMTEgKzQ1OTgsMTEgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5 KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkv KgogCSAqIFBoYXNlIDYgb2YgUkVJTkRFWCBDT05DVVJSRU5UTFkKIAkgKgotCSAqIERyb3AgdGhl IG9sZCBpbmRleGVzLgorCSAqIERyb3AgdGhlIG9sZCBhbmQgYXV4aWxpYXJ5IGluZGV4ZXMuCiAJ ICovCiAKIAlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9Q SEFTRSwKLQkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzUpOworCQkJCQkJ CQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNik7CiAJV2FpdEZvckxvY2tlcnNNdWx0 aXBsZShsb2NrVGFncywgQWNjZXNzRXhjbHVzaXZlTG9jaywgdHJ1ZSk7CiAKIAlQdXNoQWN0aXZl U25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKQEAgLTQzNzIsNiArNDYyMiwxOCBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNzKCZv YmplY3QsIG9iamVjdHMpOwogCQl9CiAKKwkJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCisJCXsK KwkJCVJlaW5kZXhJbmRleEluZm8gKmlkeCA9IGxmaXJzdChsYyk7CisJCQlPYmplY3RBZGRyZXNz IG9iamVjdDsKKworCQkJb2JqZWN0LmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CisJCQlv YmplY3Qub2JqZWN0SWQgPSBpZHgtPmF1eEluZGV4SWQ7CisJCQlvYmplY3Qub2JqZWN0U3ViSWQg PSAwOworCisJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJm9iamVjdCwgb2JqZWN0cyk7CisJ CX0KKwogCQkvKgogCQkgKiBVc2UgUEVSRk9STV9ERUxFVElPTl9DT05DVVJSRU5UX0xPQ0sgc28g dGhhdCBpbmRleF9kcm9wKCkgdXNlcyB0aGUKIAkJICogcmlnaHQgbG9jayBsZXZlbC4KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMv bWFrZWZ1bmNzLmMKaW5kZXggZTk3ZTA5NDNmNWIuLmI1NTZiYTQ4MTdiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtl ZnVuY3MuYwpAQCAtODM0LDcgKzgzNCw3IEBAIEluZGV4SW5mbyAqCiBtYWtlSW5kZXhJbmZvKGlu dCBudW1hdHRycywgaW50IG51bWtleWF0dHJzLCBPaWQgYW1vaWQsIExpc3QgKmV4cHJlc3Npb25z LAogCQkJICBMaXN0ICpwcmVkaWNhdGVzLCBib29sIHVuaXF1ZSwgYm9vbCBudWxsc19ub3RfZGlz dGluY3QsCiAJCQkgIGJvb2wgaXNyZWFkeSwgYm9vbCBjb25jdXJyZW50LCBib29sIHN1bW1hcml6 aW5nLAotCQkJICBib29sIHdpdGhvdXRvdmVybGFwcykKKwkJCSAgYm9vbCB3aXRob3V0b3Zlcmxh cHMsIGJvb2wgYXV4aWxpYXJ5KQogewogCUluZGV4SW5mbyAgKm4gPSBtYWtlTm9kZShJbmRleElu Zm8pOwogCkBAIC04NTAsNiArODUwLDcgQEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGlu dCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAluLT5paV9Db25j dXJyZW50ID0gY29uY3VycmVudDsKIAluLT5paV9TdW1tYXJpemluZyA9IHN1bW1hcml6aW5nOwog CW4tPmlpX1dpdGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFwczsKKwluLT5paV9BdXhpbGlh cnkgPSBhdXhpbGlhcnk7CiAKIAkvKiBzdW1tYXJpemluZyBpbmRleGVzIGNhbm5vdCBjb250YWlu IG5vbi1rZXkgYXR0cmlidXRlcyAqLwogCUFzc2VydCghc3VtbWFyaXppbmcgfHwgKG51bWtleWF0 dHJzID09IG51bWF0dHJzKSk7CkBAIC04NzUsNyArODc2LDYgQEAgbWFrZUluZGV4SW5mbyhpbnQg bnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywK IAkvKiBpbml0aWFsaXplIGluZGV4LWJ1aWxkIHN0YXRlIHRvIGRlZmF1bHQgKi8KIAluLT5paV9C cm9rZW5Ib3RDaGFpbiA9IGZhbHNlOwogCW4tPmlpX1BhcmFsbGVsV29ya2VycyA9IDA7Ci0Jbi0+ aWlfQXV4aWxpYXJ5ID0gZmFsc2U7CiAKIAkvKiBzZXQgdXAgZm9yIHBvc3NpYmxlIHVzZSBieSBp bmRleCBBTSAqLwogCW4tPmlpX0FtID0gYW1vaWQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBlMTZi ZjAyNTY5Mi4uMjI0NDZiMzIxNTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJs ZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNzA2LDcgKzcwNiw4 IEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJCQkJUmVsYXRpb24gaW5k ZXhfcmVsLAogCQkJCQkJCQkJCUluZGV4SW5mbyAqaW5kZXhfaW5mbywKIAkJCQkJCQkJCQlTbmFw c2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlKTsKKwkJ CQkJCQkJCQlWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJCVZhbGlkYXRlSW5k ZXhTdGF0ZSAqYXV4X3N0YXRlKTsKIAogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xODAzLDE5 ICsxODA0LDI0IEBAIHRhYmxlX2luZGV4X2J1aWxkX3JhbmdlX3NjYW4oUmVsYXRpb24gdGFibGVf cmVsLAogICogdGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbiAtIHNlY29uZCB0YWJsZSBzY2FuIGZv ciBjb25jdXJyZW50IGluZGV4IGJ1aWxkCiAgKgogICogU2VlIHZhbGlkYXRlX2luZGV4KCkgZm9y IGFuIGV4cGxhbmF0aW9uLgorICoKKyAqIE5vdGU6IGl0IGlzIHJlc3BvbnNpYmlsaXR5IG9mIHRo YXQgZnVuY3Rpb24gdG8gY2xvc2Ugc29ydHN0YXRlcyBpbgorICogYm90aCBgc3RhdGVgIGFuZCBg YXV4c3RhdGVgLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIHRhYmxlX2luZGV4X3ZhbGlkYXRl X3NjYW4oUmVsYXRpb24gdGFibGVfcmVsLAogCQkJCQkJICBSZWxhdGlvbiBpbmRleF9yZWwsCiAJ CQkJCQkgIEluZGV4SW5mbyAqaW5kZXhfaW5mbywKIAkJCQkJCSAgU25hcHNob3Qgc25hcHNob3Qs Ci0JCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUpCisJCQkJCQkgIFZhbGlkYXRlSW5k ZXhTdGF0ZSAqc3RhdGUsCisJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4c3RhdGUpCiB7 CiAJdGFibGVfcmVsLT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2FuKHRhYmxlX3JlbCwK IAkJCQkJCQkJCQkJICAgaW5kZXhfcmVsLAogCQkJCQkJCQkJCQkgICBpbmRleF9pbmZvLAogCQkJ CQkJCQkJCQkgICBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICAgc3RhdGUpOworCQkJCQkJCQkJCQkg ICBzdGF0ZSwKKwkJCQkJCQkJCQkJICAgYXV4c3RhdGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApp bmRleCBkZGE5NWU1NDkwMy4uYzI5ZjQ0ZjI0NjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Nh dGFsb2cvaW5kZXguaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgKQEAgLTI1LDYg KzI1LDcgQEAgdHlwZWRlZiBlbnVtCiB7CiAJSU5ERVhfQ1JFQVRFX1NFVF9SRUFEWSwKIAlJTkRF WF9DUkVBVEVfU0VUX1ZBTElELAorCUlOREVYX0RST1BfQ0xFQVJfUkVBRFksCiAJSU5ERVhfRFJP UF9DTEVBUl9WQUxJRCwKIAlJTkRFWF9EUk9QX1NFVF9ERUFELAogfSBJbmRleFN0YXRlRmxhZ3NB Y3Rpb247CkBAIC02NSw2ICs2Niw3IEBAIGV4dGVybiB2b2lkIGluZGV4X2NoZWNrX3ByaW1hcnlf a2V5KFJlbGF0aW9uIGhlYXBSZWwsCiAjZGVmaW5lCUlOREVYX0NSRUFURV9JRl9OT1RfRVhJU1RT CQkJKDEgPDwgNCkKICNkZWZpbmUJSU5ERVhfQ1JFQVRFX1BBUlRJVElPTkVECQkJKDEgPDwgNSkK ICNkZWZpbmUgSU5ERVhfQ1JFQVRFX0lOVkFMSUQJCQkJKDEgPDwgNikKKyNkZWZpbmUgSU5ERVhf Q1JFQVRFX0FVWElMSUFSWQkJCQkoMSA8PCA3KQogCiBleHRlcm4gT2lkCWluZGV4X2NyZWF0ZShS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJCQkJCQkgY29uc3QgY2hhciAqaW5kZXhSZWxhdGlvbk5h bWUsCkBAIC0xMDAsNiArMTAyLDExIEBAIGV4dGVybiBPaWQJaW5kZXhfY29uY3VycmVudGx5X2Ny ZWF0ZV9jb3B5KFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQkJCQkJCQkgICBPaWQgdGFibGVz cGFjZU9pZCwKIAkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpuZXdOYW1lKTsKIAorZXh0ZXJuIE9p ZAlpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCisJ CQkJCQkJCQkJICBPaWQgbWFpbkluZGV4SWQsCisJCQkJCQkJCQkJICBPaWQgdGFibGVzcGFjZU9p ZCwKKwkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm5ld05hbWUpOworCiBleHRlcm4gdm9pZCBpbmRl eF9jb25jdXJyZW50bHlfYnVpbGQoT2lkIGhlYXBSZWxhdGlvbklkLAogCQkJCQkJCQkJIE9pZCBp bmRleFJlbGF0aW9uSWQpOwogCkBAIC0xNDUsNyArMTUyLDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhf YnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJYm9vbCBpc3JlaW5kZXgsCiAJCQkJ CQlib29sIHBhcmFsbGVsKTsKIAotZXh0ZXJuIHZvaWQgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJ ZCwgT2lkIGluZGV4SWQsIFNuYXBzaG90IHNuYXBzaG90KTsKK2V4dGVybiB2b2lkIHZhbGlkYXRl X2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCwgU25hcHNob3Qg c25hcHNob3QpOwogCiBleHRlcm4gdm9pZCBpbmRleF9zZXRfc3RhdGVfZmxhZ3MoT2lkIGluZGV4 SWQsIEluZGV4U3RhdGVGbGFnc0FjdGlvbiBhY3Rpb24pOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9jb21tYW5kcy9wcm9ncmVzcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3Mu aAppbmRleCAxY2RlNGJkOWJjZi4uOWU5M2E0ZDkzMTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3Byb2dyZXNzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHJvZ3Jlc3Mu aApAQCAtOTQsMTQgKzk0LDE1IEBACiAKIC8qIFBoYXNlcyBvZiBDUkVBVEUgSU5ERVggKGFzIGFk dmVydGlzZWQgdmlhIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSkgKi8KICNkZWZpbmUgUFJPR1JF U1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMQkJCTEKLSNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFX0JVSUxECQkJMgotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8y CQkJMwotI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfVkFMSURBVEVfSURYU0NBTgk0 Ci0jZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9TT1JUCQk1Ci0jZGVm aW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9UQUJMRVNDQU4JNgotI2RlZmlu ZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8zCQkJNworI2RlZmluZSBQUk9HUkVTU19D UkVBVEVJRFhfUEhBU0VfV0FJVF8yCQkJMgorI2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfUEhB U0VfQlVJTEQJCQkzCisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzMJCQk0 CisjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhTQ0FOCTUKKyNk ZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1NPUlQJCTYKKyNkZWZpbmUg UFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX0lEWE1FUkdFCTcKICNkZWZpbmUgUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfNAkJCTgKICNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRF SURYX1BIQVNFX1dBSVRfNQkJCTkKKyNkZWZpbmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dB SVRfNgkJCTEwCiAKIC8qCiAgKiBTdWJwaGFzZXMgb2YgQ1JFQVRFIElOREVYLCBmb3IgaW5kZXhf YnVpbGQuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaCBiL3NyYy9p bmNsdWRlL25vZGVzL21ha2VmdW5jcy5oCmluZGV4IDU0NzNjZTlhMjg4Li40OTA0NzQ4ZjVmYyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKQEAgLTk5LDcgKzk5LDggQEAgZXh0ZXJuIEluZGV4SW5mbyAq bWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLAog CQkJCQkJCQlMaXN0ICpleHByZXNzaW9ucywgTGlzdCAqcHJlZGljYXRlcywKIAkJCQkJCQkJYm9v bCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJCQkJCQlib29sIGlzcmVhZHks IGJvb2wgY29uY3VycmVudCwKLQkJCQkJCQkJYm9vbCBzdW1tYXJpemluZywgYm9vbCB3aXRob3V0 b3ZlcmxhcHMpOworCQkJCQkJCQlib29sIHN1bW1hcml6aW5nLCBib29sIHdpdGhvdXRvdmVybGFw cywKKwkJCQkJCQkJYm9vbCBhdXhpbGlhcnkpOwogCiBleHRlcm4gTm9kZSAqbWFrZVN0cmluZ0Nv bnN0KGNoYXIgKnN0ciwgaW50IGxvY2F0aW9uKTsKIGV4dGVybiBEZWZFbGVtICptYWtlRGVmRWxl bShjaGFyICpuYW1lLCBOb2RlICphcmcsIGludCBsb2NhdGlvbik7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQKaW5kZXggYzc0M2ZjNzY5Y2IuLmFhNGZhNzYzNThh IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CkBAIC0xNDIz LDYgKzE0MjMsNyBAQCBERVRBSUw6ICBLZXkgKGYxKT0oYikgYWxyZWFkeSBleGlzdHMuCiBDUkVB VEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXgzIE9OIGNvbmN1cl9oZWFw KGYyKTsKIEVSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1cl9pbmRl eDMiCiBERVRBSUw6ICBLZXkgKGYyKT0oYikgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5ERVggY29u Y3VyX2luZGV4M19jY2F1eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9uIGluZGV4ZXMgYW5kIHBh cnRpYWwgaW5kZXhlcyB3b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRM WSBjb25jdXJfaW5kZXg0IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0nYSc7CiBDUkVBVEUg SU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9pbmRleDUgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJF IGYxPSd4JzsKQEAgLTMxOTcsNiArMzE5OCw3IEBAIElOU0VSVCBJTlRPIGNvbmN1cl9yZWluZGV4 X3RhYjQgVkFMVUVTICgxKSwgKDEpLCAoMik7CiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJF TlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1IE9OIGNvbmN1cl9yZWluZGV4X3RhYjQgKGMxKTsKIEVS Uk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1cl9yZWluZGV4X2luZDUi CiBERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5ERVggY29uY3Vy X3JlaW5kZXhfaW5kNV9jY2F1eDsKIC0tIFJlaW5kZXhpbmcgY29uY3VycmVudGx5IHRoaXMgaW5k ZXggZmFpbHMgd2l0aCB0aGUgc2FtZSBmYWlsdXJlLgogLS0gVGhlIGV4dHJhIGluZGV4IGNyZWF0 ZWQgaXMgaXRzZWxmIGludmFsaWQsIGFuZCBjYW4gYmUgZHJvcHBlZC4KIFJFSU5ERVggSU5ERVgg Q09OQ1VSUkVOVExZIGNvbmN1cl9yZWluZGV4X2luZDU7CkBAIC0zMjA5LDggKzMyMTEsMTAgQEAg REVUQUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCiAgYzEgICAgIHwgaW50ZWdlciB8 ICAgICAgICAgICB8ICAgICAgICAgIHwgCiBJbmRleGVzOgogICAgICJjb25jdXJfcmVpbmRleF9p bmQ1IiBVTklRVUUsIGJ0cmVlIChjMSkgSU5WQUxJRAorICAgICJjb25jdXJfcmVpbmRleF9pbmQ1 X2NjYXV4IiBzdGlyIChjMSkgSU5WQUxJRAogICAgICJjb25jdXJfcmVpbmRleF9pbmQ1X2NjbmV3 IiBVTklRVUUsIGJ0cmVlIChjMSkgSU5WQUxJRAogCitEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4 X2luZDVfY2NhdXg7CiBEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NuZXc7CiAtLSBU aGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4g YmVjb21lIHZhbGlkLgogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9 IDE7CkBAIC0zMjM4LDYgKzMyNDIsNDQgQEAgSW5kZXhlczoKICAgICAiY29uY3VyX3JlaW5kZXhf aW5kNSIgVU5JUVVFLCBidHJlZSAoYzEpCiAKIERST1AgVEFCTEUgY29uY3VyX3JlaW5kZXhfdGFi NDsKKy0tIENoZWNrIGhhbmRsaW5nIG9mIGF1eGlsaWFyeSBpbmRleGVzCitDUkVBVEUgVEFCTEUg YXV4X2luZGV4X3RhYjUgKGMxIGludCk7CitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxV RVMgKDEpLCAoMSksICgyKTsKKy0tIFRoaXMgdHJpY2sgY3JlYXRlcyBhbiBpbnZhbGlkIGluZGV4 IGFuZCBhdXhpbGlhcnkgaW5kZXggZm9yIGl0CitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJF TlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworRVJST1I6ICBjb3Vs ZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitERVRBSUw6ICBLZXkg KGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRh YmxlICJwdWJsaWMuYXV4X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlv biB8IE51bGxhYmxlIHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAg ICAgICB8IAorSW5kZXhlczoKKyAgICAiYXV4X2luZGV4X2luZDYiIFVOSVFVRSwgYnRyZWUgKGMx KSBJTlZBTElECisgICAgImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBzdGlyIChjMSkgSU5WQUxJRAor CistLSBOb3QgYWxsb3dlZCB0byByZWluZGV4IGF1eGlsaWFyeSBpbmRleAorUkVJTkRFWCBJTkRF WCBhdXhfaW5kZXhfaW5kNl9jY2F1eDsKK0VSUk9SOiAgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5k ZXggImF1eF9pbmRleF9pbmQ2X2NjYXV4IiBub3Qgc3VwcG9ydGVkCistLSBDb25jdXJyZW50bHkg YWxzbworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CitF UlJPUjogIHJlaW5kZXggb2YgYXV4aWxpYXJ5IGluZGV4ICJhdXhfaW5kZXhfaW5kNl9jY2F1eCIg bm90IHN1cHBvcnRlZAorLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5 LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGNvbmN1cl9yZWlu ZGV4X3RhYjQgV0hFUkUgYzEgPSAxOworRVJST1I6ICByZWxhdGlvbiAiY29uY3VyX3JlaW5kZXhf dGFiNCIgZG9lcyBub3QgZXhpc3QKK0xJTkUgMTogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhf dGFiNCBXSEVSRSBjMSA9IDE7CisgICAgICAgICAgICAgICAgICAgIF4KKy0tIFNob3VsZCBiZSBz a2lwcGVkIGR1cmluZyByZWluZGV4CitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1OworRVJS T1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitERVRB SUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1 cmluZyBjb25jdXJyZW50IHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9p bmRleF90YWI1OworV0FSTklORzogIHNraXBwaW5nIHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCAi cHVibGljLmF1eF9pbmRleF9pbmQ2IgorSElOVDogIFVzZSBEUk9QIElOREVYIG9yIFJFSU5ERVgg SU5ERVguCitXQVJOSU5HOiAgc2tpcHBpbmcgcmVpbmRleCBvZiBhdXhpbGlhcnkgaW5kZXggInB1 YmxpYy5hdXhfaW5kZXhfaW5kNl9jY2F1eCIKK05PVElDRTogIHRhYmxlICJhdXhfaW5kZXhfdGFi NSIgaGFzIG5vIGluZGV4ZXMgdGhhdCBjYW4gYmUgcmVpbmRleGVkIGNvbmN1cnJlbnRseQorRFJP UCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKIC0tIENoZWNrIGhhbmRsaW5nIG9mIGluZGV4ZXMgd2l0 aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcy4gIFRoZQogLS0gZGVmaW5pdGlvbnMgb2YgdGhl IHJlYnVpbHQgaW5kZXhlcyBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFsCiAtLSBkZWZpbml0aW9u cy4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQKaW5kZXggNGQyOWZiODUyOTMu LjU0YjI1MWI5NmVhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4 aW5nLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dApAQCAt MTU4NSwxMCArMTU4NSwxMSBAQCBzZWxlY3QgaW5kZXhyZWxpZDo6cmVnY2xhc3MsIGluZGlzdmFs aWQsCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHBhcnRl ZF9pc3ZhbGlkX2lkeCAgICAgICAgICAgICB8IGYgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90 YWIgICAgfCAKICBwYXJ0ZWRfaXN2YWxpZF9pZHhfMTEgICAgICAgICAgfCBmICAgICAgICAgIHwg cGFydGVkX2lzdmFsaWRfdGFiXzExIHwgcGFydGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHgKKyBw YXJ0ZWRfaXN2YWxpZF9pZHhfMTFfY2NhdXggICAgfCBmICAgICAgICAgIHwgcGFydGVkX2lzdmFs aWRfdGFiXzExIHwgCiAgcGFydGVkX2lzdmFsaWRfdGFiXzEyX2V4cHJfaWR4IHwgdCAgICAgICAg ICB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xMiB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8xX2V4cHJfaWR4 CiAgcGFydGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHggIHwgZiAgICAgICAgICB8IHBhcnRlZF9p c3ZhbGlkX3RhYl8xICB8IHBhcnRlZF9pc3ZhbGlkX2lkeAogIHBhcnRlZF9pc3ZhbGlkX3RhYl8y X2V4cHJfaWR4ICB8IHQgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90YWJfMiAgfCBwYXJ0ZWRf aXN2YWxpZF9pZHgKLSg1IHJvd3MpCisoNiByb3dzKQogCiBkcm9wIHRhYmxlIHBhcnRlZF9pc3Zh bGlkX3RhYjsKIC0tIENoZWNrIHN0YXRlIG9mIHJlcGxpY2EgaW5kZXhlcyB3aGVuIGF0dGFjaGlu ZyBhIHBhcnRpdGlvbi4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVs ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXggN2M1MjE4 MWNiY2IuLjkxN2U0YjIwOGY4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3J1bGVzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dApAQCAt MjA2MCwxNCArMjA2MCwxNSBAQCBwZ19zdGF0X3Byb2dyZXNzX2NyZWF0ZV9pbmRleHwgU0VMRUNU IHMucGlkLAogICAgICAgICBDQVNFIHMucGFyYW0xMAogICAgICAgICAgICAgV0hFTiAwIFRIRU4g J2luaXRpYWxpemluZyc6OnRleHQKICAgICAgICAgICAgIFdIRU4gMSBUSEVOICd3YWl0aW5nIGZv ciB3cml0ZXJzIGJlZm9yZSBidWlsZCc6OnRleHQKLSAgICAgICAgICAgIFdIRU4gMiBUSEVOICgn YnVpbGRpbmcgaW5kZXgnOjp0ZXh0IHx8IENPQUxFU0NFKCgnOiAnOjp0ZXh0IHx8IHBnX2luZGV4 YW1fcHJvZ3Jlc3NfcGhhc2VuYW1lKChzLnBhcmFtOSk6Om9pZCwgcy5wYXJhbTExKSksICcnOjp0 ZXh0KSkKLSAgICAgICAgICAgIFdIRU4gMyBUSEVOICd3YWl0aW5nIGZvciB3cml0ZXJzIGJlZm9y ZSB2YWxpZGF0aW9uJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA0IFRIRU4gJ2luZGV4IHZhbGlk YXRpb246IHNjYW5uaW5nIGluZGV4Jzo6dGV4dAotICAgICAgICAgICAgV0hFTiA1IFRIRU4gJ2lu ZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJzo6dGV4dAotICAgICAgICAgICAgV0hFTiA2 IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNjYW5uaW5nIHRhYmxlJzo6dGV4dAotICAgICAgICAg ICAgV0hFTiA3IFRIRU4gJ3dhaXRpbmcgZm9yIG9sZCBzbmFwc2hvdHMnOjp0ZXh0Ci0gICAgICAg ICAgICBXSEVOIDggVEhFTiAnd2FpdGluZyBmb3IgcmVhZGVycyBiZWZvcmUgbWFya2luZyBkZWFk Jzo6dGV4dAotICAgICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVm b3JlIGRyb3BwaW5nJzo6dGV4dAorICAgICAgICAgICAgV0hFTiAyIFRIRU4gJ3dhaXRpbmcgZm9y IHdyaXRlcnMgdG8gdXNlIGF1eGlsaWFyeSBpbmRleCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4g MyBUSEVOICgnYnVpbGRpbmcgaW5kZXgnOjp0ZXh0IHx8IENPQUxFU0NFKCgnOiAnOjp0ZXh0IHx8 IHBnX2luZGV4YW1fcHJvZ3Jlc3NfcGhhc2VuYW1lKChzLnBhcmFtOSk6Om9pZCwgcy5wYXJhbTEx KSksICcnOjp0ZXh0KSkKKyAgICAgICAgICAgIFdIRU4gNCBUSEVOICd3YWl0aW5nIGZvciB3cml0 ZXJzIGJlZm9yZSB2YWxpZGF0aW9uJzo6dGV4dAorICAgICAgICAgICAgV0hFTiA1IFRIRU4gJ2lu ZGV4IHZhbGlkYXRpb246IHNjYW5uaW5nIGluZGV4Jzo6dGV4dAorICAgICAgICAgICAgV0hFTiA2 IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IHNvcnRpbmcgdHVwbGVzJzo6dGV4dAorICAgICAgICAg ICAgV0hFTiA3IFRIRU4gJ2luZGV4IHZhbGlkYXRpb246IG1lcmdpbmcgaW5kZXhlcyc6OnRleHQK KyAgICAgICAgICAgIFdIRU4gOCBUSEVOICd3YWl0aW5nIGZvciBvbGQgc25hcHNob3RzJzo6dGV4 dAorICAgICAgICAgICAgV0hFTiA5IFRIRU4gJ3dhaXRpbmcgZm9yIHJlYWRlcnMgYmVmb3JlIG1h cmtpbmcgZGVhZCc6OnRleHQKKyAgICAgICAgICAgIFdIRU4gMTAgVEhFTiAnd2FpdGluZyBmb3Ig cmVhZGVycyBiZWZvcmUgZHJvcHBpbmcnOjp0ZXh0CiAgICAgICAgICAgICBFTFNFIE5VTEw6OnRl eHQKICAgICAgICAgRU5EIEFTIHBoYXNlLAogICAgIHMucGFyYW00IEFTIGxvY2tlcnNfdG90YWws CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAppbmRleCBlYWJjOTYyM2IyMC4uN2Fl OGU0NDAxOWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbApAQCAtNDk5LDYg KzQ5OSw3IEBAIENSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIElGIE5PVCBFWElTVFMg Y29uY3VyX2luZGV4MiBPTiBjb25jdXJfaGVhcChmMSk7CiBJTlNFUlQgSU5UTyBjb25jdXJfaGVh cCBWQUxVRVMgKCdiJywneCcpOwogLS0gY2hlY2sgaWYgY29uc3RyYWludCBpcyBlbmZvcmNlZCBw cm9wZXJseSBhdCBidWlsZCB0aW1lCiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBj b25jdXJfaW5kZXgzIE9OIGNvbmN1cl9oZWFwKGYyKTsKK0RST1AgSU5ERVggY29uY3VyX2luZGV4 M19jY2F1eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9uIGluZGV4ZXMgYW5kIHBhcnRpYWwgaW5k ZXhlcyB3b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJf aW5kZXg0IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0nYSc7CiBDUkVBVEUgSU5ERVggQ09O Q1VSUkVOVExZIGNvbmN1cl9pbmRleDUgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJFIGYxPSd4JzsK QEAgLTEzMTEsMTAgKzEzMTIsMTIgQEAgQ1JFQVRFIFRBQkxFIGNvbmN1cl9yZWluZGV4X3RhYjQg KGMxIGludCk7CiBJTlNFUlQgSU5UTyBjb25jdXJfcmVpbmRleF90YWI0IFZBTFVFUyAoMSksICgx KSwgKDIpOwogLS0gVGhpcyB0cmljayBjcmVhdGVzIGFuIGludmFsaWQgaW5kZXguCiBDUkVBVEUg VU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1IE9OIGNvbmN1cl9y ZWluZGV4X3RhYjQgKGMxKTsKK0RST1AgSU5ERVggY29uY3VyX3JlaW5kZXhfaW5kNV9jY2F1eDsK IC0tIFJlaW5kZXhpbmcgY29uY3VycmVudGx5IHRoaXMgaW5kZXggZmFpbHMgd2l0aCB0aGUgc2Ft ZSBmYWlsdXJlLgogLS0gVGhlIGV4dHJhIGluZGV4IGNyZWF0ZWQgaXMgaXRzZWxmIGludmFsaWQs IGFuZCBjYW4gYmUgZHJvcHBlZC4KIFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9y ZWluZGV4X2luZDU7CiBcZCBjb25jdXJfcmVpbmRleF90YWI0CitEUk9QIElOREVYIGNvbmN1cl9y ZWluZGV4X2luZDVfY2NhdXg7CiBEUk9QIElOREVYIGNvbmN1cl9yZWluZGV4X2luZDVfY2NuZXc7 CiAtLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRl eCBjYW4gYmVjb21lIHZhbGlkLgogREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVS RSBjMSA9IDE7CkBAIC0xMzI2LDYgKzEzMjksMjQgQEAgUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5U TFkgY29uY3VyX3JlaW5kZXhfaW5kNTsKIFxkIGNvbmN1cl9yZWluZGV4X3RhYjQKIERST1AgVEFC TEUgY29uY3VyX3JlaW5kZXhfdGFiNDsKIAorLS0gQ2hlY2sgaGFuZGxpbmcgb2YgYXV4aWxpYXJ5 IGluZGV4ZXMKK0NSRUFURSBUQUJMRSBhdXhfaW5kZXhfdGFiNSAoYzEgaW50KTsKK0lOU0VSVCBJ TlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKSwgKDIpOworLS0gVGhpcyB0cmljayBj cmVhdGVzIGFuIGludmFsaWQgaW5kZXggYW5kIGF1eGlsaWFyeSBpbmRleCBmb3IgaXQKK0NSRUFU RSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90 YWI1IChjMSk7CitcZCBhdXhfaW5kZXhfdGFiNQorLS0gTm90IGFsbG93ZWQgdG8gcmVpbmRleCBh dXhpbGlhcnkgaW5kZXgKK1JFSU5ERVggSU5ERVggYXV4X2luZGV4X2luZDZfY2NhdXg7CistLSBD b25jdXJyZW50bHkgYWxzbworUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2lu ZDZfY2NhdXg7CistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNv IHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhf dGFiNCBXSEVSRSBjMSA9IDE7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleAor UkVJTkRFWCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmlu ZyBjb25jdXJyZW50IHJlaW5kZXgKK1JFSU5ERVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRl eF90YWI1OworRFJPUCBUQUJMRSBhdXhfaW5kZXhfdGFiNTsKKwogLS0gQ2hlY2sgaGFuZGxpbmcg b2YgaW5kZXhlcyB3aXRoIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCiAtLSBkZWZp bml0aW9ucyBvZiB0aGUgcmVidWlsdCBpbmRleGVzIHNob3VsZCBtYXRjaCB0aGUgb3JpZ2luYWwK IC0tIGRlZmluaXRpb25zLgotLSAKMi40My4wCgo= --000000000000ac6d6606432d3652 Content-Type: text/plain; charset="US-ASCII"; name="v26-0001-This-is-https-commitfest.postgresql.org-50-5160-.patch" Content-Disposition: attachment; filename="v26-0001-This-is-https-commitfest.postgresql.org-50-5160-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhrw6peo0 RnJvbSBiNTE5NzEzNzU0MGM3MzAxYmZlMTFlNjFjYzAyY2I2ZTE3ZDg0YjhhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNDowOTo1MiArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI2IDEvOF0gVGhpcyBpcyBodHRwczovL2NvbW1pdGZlc3QucG9zdGdyZXNxbC5vcmcv NTAvNTE2MC8KIGFuZCBodHRwczovL2NvbW1pdGZlc3QucG9zdGdyZXNxbC5vcmcvcGF0Y2gvNTQz OC8gbWVyZ2VkIGluIHNpbmdsZSBjb21taXQuIGl0CiBpcyByZXF1aXJlZCBmb3Igc3RhYmlsaXR5 IG9mIHN0cmVzcyB0ZXN0cy4KCi0tLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAg ICAgICAgfCAgNjggKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAg IHwgICAzICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyAgIHwgMTE5ICsr KysrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJs ZS5jIHwgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgIHwgMTM1 ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1n ci5jICAgICAgIHwgICAyICsKIDcgZmlsZXMgY2hhbmdlZCwgMjQ1IGluc2VydGlvbnMoKyksIDg4 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVl LmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCmluZGV4IDA5NDljODg5ODNhLi4y NDQ1ZjAwMTcwMCAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwor KysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCkBAIC0zODIsNyArMzgyLDYgQEAg YnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBib29s IGhlYXBrZXlzcGFjZSwKIAlCVE1ldGFQYWdlRGF0YSAqbWV0YWQ7CiAJdWludDMyCQlwcmV2aW91 c2xldmVsOwogCUJ0cmVlTGV2ZWwJY3VycmVudDsKLQlTbmFwc2hvdAlzbmFwc2hvdCA9IFNuYXBz aG90QW55OwogCiAJaWYgKCFyZWFkb25seSkKIAkJZWxvZyhERUJVRzEsICJ2ZXJpZnlpbmcgY29u c2lzdGVuY3kgb2YgdHJlZSBzdHJ1Y3R1cmUgZm9yIGluZGV4IFwiJXNcIiIsCkBAIC00MzMsMzgg KzQzMiwzNSBAQCBidF9jaGVja19ldmVyeV9sZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhl YXByZWwsIGJvb2wgaGVhcGtleXNwYWNlLAogCQlzdGF0ZS0+aGVhcHR1cGxlc3ByZXNlbnQgPSAw OwogCiAJCS8qCi0JCSAqIFJlZ2lzdGVyIG91ciBvd24gc25hcHNob3QgaW4gIXJlYWRvbmx5IGNh c2UsIHJhdGhlciB0aGFuIGFza2luZworCQkgKiBSZWdpc3RlciBvdXIgb3duIHNuYXBzaG90IGZv ciBoZWFwYWxsaW5kZXhlZCwgcmF0aGVyIHRoYW4gYXNraW5nCiAJCSAqIHRhYmxlX2luZGV4X2J1 aWxkX3NjYW4oKSB0byBkbyB0aGlzIGZvciB1cyBsYXRlci4gIFRoaXMgbmVlZHMgdG8KIAkJICog aGFwcGVuIGJlZm9yZSBpbmRleCBmaW5nZXJwcmludGluZyBiZWdpbnMsIHNvIHdlIGNhbiBsYXRl ciBiZQogCQkgKiBjZXJ0YWluIHRoYXQgaW5kZXggZmluZ2VycHJpbnRpbmcgc2hvdWxkIGhhdmUg cmVhY2hlZCBhbGwgdHVwbGVzCiAJCSAqIHJldHVybmVkIGJ5IHRhYmxlX2luZGV4X2J1aWxkX3Nj YW4oKS4KIAkJICovCi0JCWlmICghc3RhdGUtPnJlYWRvbmx5KQotCQl7Ci0JCQlzbmFwc2hvdCA9 IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJc3RhdGUtPnNu YXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCi0J CQkvKgotCQkJICogR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpIGFsd2F5cyBhY3F1aXJlcyBhIG5l dyBNVkNDIHNuYXBzaG90IGluCi0JCQkgKiBSRUFEIENPTU1JVFRFRCBtb2RlLiAgQSBuZXcgc25h cHNob3QgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGFsbAotCQkJICogdGhlIGVudHJpZXMgaXQgcmVx dWlyZXMgaW4gdGhlIGluZGV4LgotCQkJICoKLQkJCSAqIFdlIG11c3QgZGVmZW5kIGFnYWluc3Qg dGhlIHBvc3NpYmlsaXR5IHRoYXQgYW4gb2xkIHhhY3QKLQkJCSAqIHNuYXBzaG90IHdhcyByZXR1 cm5lZCBhdCBoaWdoZXIgaXNvbGF0aW9uIGxldmVscyB3aGVuIHRoYXQKLQkJCSAqIHNuYXBzaG90 IGlzIG5vdCBzYWZlIGZvciBpbmRleCBzY2FucyBvZiB0aGUgdGFyZ2V0IGluZGV4LiAgVGhpcwot CQkJICogaXMgcG9zc2libGUgd2hlbiB0aGUgc25hcHNob3Qgc2VlcyB0dXBsZXMgdGhhdCBhcmUg YmVmb3JlIHRoZQotCQkJICogaW5kZXgncyBpbmRjaGVja3htaW4gaG9yaXpvbi4gIFRocm93aW5n IGFuIGVycm9yIGhlcmUgc2hvdWxkIGJlCi0JCQkgKiB2ZXJ5IHJhcmUuICBJdCBkb2Vzbid0IHNl ZW0gd29ydGggdXNpbmcgYSBzZWNvbmRhcnkgc25hcHNob3QgdG8KLQkJCSAqIGF2b2lkIHRoaXMu Ci0JCQkgKi8KLQkJCWlmIChJc29sYXRpb25Vc2VzWGFjdFNuYXBzaG90KCkgJiYgcmVsLT5yZF9p bmRleC0+aW5kY2hlY2t4bWluICYmCi0JCQkJIVRyYW5zYWN0aW9uSWRQcmVjZWRlcyhIZWFwVHVw bGVIZWFkZXJHZXRYbWluKHJlbC0+cmRfaW5kZXh0dXBsZS0+dF9kYXRhKSwKLQkJCQkJCQkJCSAg IHNuYXBzaG90LT54bWluKSkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSwKLQkJCQkJCSBlcnJtc2coImluZGV4IFwi JXNcIiBjYW5ub3QgYmUgdmVyaWZpZWQgdXNpbmcgdHJhbnNhY3Rpb24gc25hcHNob3QiLAotCQkJ CQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOwotCQl9Ci0JfQorCQkvKgorCQkg KiBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkgYWx3YXlzIGFjcXVpcmVzIGEgbmV3IE1WQ0Mgc25h cHNob3QgaW4KKwkJICogUkVBRCBDT01NSVRURUQgbW9kZS4gIEEgbmV3IHNuYXBzaG90IGlzIGd1 YXJhbnRlZWQgdG8gaGF2ZSBhbGwKKwkJICogdGhlIGVudHJpZXMgaXQgcmVxdWlyZXMgaW4gdGhl IGluZGV4LgorCQkgKgorCQkgKiBXZSBtdXN0IGRlZmVuZCBhZ2FpbnN0IHRoZSBwb3NzaWJpbGl0 eSB0aGF0IGFuIG9sZCB4YWN0CisJCSAqIHNuYXBzaG90IHdhcyByZXR1cm5lZCBhdCBoaWdoZXIg aXNvbGF0aW9uIGxldmVscyB3aGVuIHRoYXQKKwkJICogc25hcHNob3QgaXMgbm90IHNhZmUgZm9y IGluZGV4IHNjYW5zIG9mIHRoZSB0YXJnZXQgaW5kZXguICBUaGlzCisJCSAqIGlzIHBvc3NpYmxl IHdoZW4gdGhlIHNuYXBzaG90IHNlZXMgdHVwbGVzIHRoYXQgYXJlIGJlZm9yZSB0aGUKKwkJICog aW5kZXgncyBpbmRjaGVja3htaW4gaG9yaXpvbi4gIFRocm93aW5nIGFuIGVycm9yIGhlcmUgc2hv dWxkIGJlCisJCSAqIHZlcnkgcmFyZS4gIEl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB1c2luZyBhIHNl Y29uZGFyeSBzbmFwc2hvdCB0bworCQkgKiBhdm9pZCB0aGlzLgorCQkgKi8KKwkJaWYgKElzb2xh dGlvblVzZXNYYWN0U25hcHNob3QoKSAmJiByZWwtPnJkX2luZGV4LT5pbmRjaGVja3htaW4gJiYK KwkJCSFUcmFuc2FjdGlvbklkUHJlY2VkZXMoSGVhcFR1cGxlSGVhZGVyR2V0WG1pbihyZWwtPnJk X2luZGV4dHVwbGUtPnRfZGF0YSksCisJCQkJCQkJCSAgIHN0YXRlLT5zbmFwc2hvdC0+eG1pbikp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1RfUl9TRVJJQUxJWkFU SU9OX0ZBSUxVUkUpLAorCQkJCQkgZXJybXNnKCJpbmRleCBcIiVzXCIgY2Fubm90IGJlIHZlcmlm aWVkIHVzaW5nIHRyYW5zYWN0aW9uIHNuYXBzaG90IiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpKSkpOworfQogCiAJLyoKIAkgKiBXZSBuZWVkIGEgc25hcHNob3QgdG8gY2hl Y2sgdGhlIHVuaXF1ZW5lc3Mgb2YgdGhlIGluZGV4LiBGb3IgYmV0dGVyCkBAIC00NzYsOSArNDcy LDcgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVs LCBib29sIGhlYXBrZXlzcGFjZSwKIAkJc3RhdGUtPmluZGV4aW5mbyA9IEJ1aWxkSW5kZXhJbmZv KHN0YXRlLT5yZWwpOwogCQlpZiAoc3RhdGUtPmluZGV4aW5mby0+aWlfVW5pcXVlKQogCQl7Ci0J CQlpZiAoc25hcHNob3QgIT0gU25hcHNob3RBbnkpCi0JCQkJc3RhdGUtPnNuYXBzaG90ID0gc25h cHNob3Q7Ci0JCQllbHNlCisJCQlpZiAoc3RhdGUtPnNuYXBzaG90ID09IEludmFsaWRTbmFwc2hv dCkKIAkJCQlzdGF0ZS0+c25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9u U25hcHNob3QoKSk7CiAJCX0KIAl9CkBAIC01NTUsMTMgKzU0OSwxMiBAQCBidF9jaGVja19ldmVy eV9sZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGJvb2wgaGVhcGtleXNwYWNl LAogCQkvKgogCQkgKiBDcmVhdGUgb3VyIG93biBzY2FuIGZvciB0YWJsZV9pbmRleF9idWlsZF9z Y2FuKCksIHJhdGhlciB0aGFuCiAJCSAqIGdldHRpbmcgaXQgdG8gZG8gc28gZm9yIHVzLiAgVGhp cyBpcyByZXF1aXJlZCBzbyB0aGF0IHdlIGNhbgotCQkgKiBhY3R1YWxseSB1c2UgdGhlIE1WQ0Mg c25hcHNob3QgcmVnaXN0ZXJlZCBlYXJsaWVyIGluICFyZWFkb25seQotCQkgKiBjYXNlLgorCQkg KiBhY3R1YWxseSB1c2UgdGhlIE1WQ0Mgc25hcHNob3QgcmVnaXN0ZXJlZCBlYXJsaWVyLgogCQkg KgogCQkgKiBOb3RlIHRoYXQgdGFibGVfaW5kZXhfYnVpbGRfc2NhbigpIGNhbGxzIGhlYXBfZW5k c2NhbigpIGZvciB1cy4KIAkJICovCiAJCXNjYW4gPSB0YWJsZV9iZWdpbnNjYW5fc3RyYXQoc3Rh dGUtPmhlYXByZWwsCS8qIHJlbGF0aW9uICovCi0JCQkJCQkJCQkgc25hcHNob3QsCS8qIHNuYXBz aG90ICovCisJCQkJCQkJCQkgc3RhdGUtPnNuYXBzaG90LAkvKiBzbmFwc2hvdCAqLwogCQkJCQkJ CQkJIDAsIC8qIG51bWJlciBvZiBrZXlzICovCiAJCQkJCQkJCQkgTlVMTCwJLyogc2NhbiBrZXkg Ki8KIAkJCQkJCQkJCSB0cnVlLAkvKiBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5IE9LICovCkBAIC01 NjksNyArNTYyLDcgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlv biBoZWFwcmVsLCBib29sIGhlYXBrZXlzcGFjZSwKIAogCQkvKgogCQkgKiBTY2FuIHdpbGwgYmVo YXZlIGFzIHRoZSBmaXJzdCBzY2FuIG9mIGEgQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWQotCQkg KiBiZWhhdmVzIGluICFyZWFkb25seSBjYXNlLgorCQkgKiBiZWhhdmVzLgogCQkgKgogCQkgKiBJ dCdzIG9rYXkgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSB1c2UgdGhlIHNhbWUgbG9jayBzdHJlbmd0 aCBmb3IgdGhlCiAJCSAqIGhlYXAgcmVsYXRpb24gYXMgYW55IG90aGVyIGlpX0NvbmN1cnJlbnQg Y2FsbGVyIHdvdWxkIGluICFyZWFkb25seQpAQCAtNTc4LDcgKzU3MSw3IEBAIGJ0X2NoZWNrX2V2 ZXJ5X2xldmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFwa2V5c3Bh Y2UsCiAJCSAqIHRoYXQgbmVlZHMgdG8gYmUgc3VyZSB0aGF0IHRoZXJlIHdhcyBubyBjb25jdXJy ZW50IHJlY3ljbGluZyBvZgogCQkgKiBUSURzLgogCQkgKi8KLQkJaW5kZXhpbmZvLT5paV9Db25j dXJyZW50ID0gIXN0YXRlLT5yZWFkb25seTsKKwkJaW5kZXhpbmZvLT5paV9Db25jdXJyZW50ID0g dHJ1ZTsKIAogCQkvKgogCQkgKiBEb24ndCB3YWl0IGZvciB1bmNvbW1pdHRlZCB0dXBsZSB4YWN0 IGNvbW1pdC9hYm9ydCB3aGVuIGluZGV4IGlzIGEKQEAgLTYwMiwxNCArNTk1LDExIEBAIGJ0X2No ZWNrX2V2ZXJ5X2xldmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFw a2V5c3BhY2UsCiAJCQkJCQkJCSBzdGF0ZS0+aGVhcHR1cGxlc3ByZXNlbnQsIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKGhlYXByZWwpLAogCQkJCQkJCQkgMTAwLjAgKiBibG9vbV9wcm9wX2JpdHNf c2V0KHN0YXRlLT5maWx0ZXIpKSkpOwogCi0JCWlmIChzbmFwc2hvdCAhPSBTbmFwc2hvdEFueSkK LQkJCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7Ci0KIAkJYmxvb21fZnJlZShzdGF0ZS0+ ZmlsdGVyKTsKIAl9CiAKIAkvKiBCZSB0aWR5OiAqLwotCWlmIChzbmFwc2hvdCA9PSBTbmFwc2hv dEFueSAmJiBzdGF0ZS0+c25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KQorCWlmIChzdGF0ZS0+ c25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KQogCQlVbnJlZ2lzdGVyU25hcHNob3Qoc3RhdGUt PnNuYXBzaG90KTsKIAlNZW1vcnlDb250ZXh0RGVsZXRlKHN0YXRlLT50YXJnZXRjb250ZXh0KTsK IH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggNTcxMmZhYzM2OTcuLjk3NDI0M2M1YzYw IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtMTc4OSw2ICsxNzg5LDcgQEAgRGVmaW5l SW5kZXgoT2lkIHRhYmxlSWQsCiAJICogYmVmb3JlIHRoZSByZWZlcmVuY2Ugc25hcCB3YXMgdGFr ZW4sIHdlIGhhdmUgdG8gd2FpdCBvdXQgYW55CiAJICogdHJhbnNhY3Rpb25zIHRoYXQgbWlnaHQg aGF2ZSBvbGRlciBzbmFwc2hvdHMuCiAJICovCisJSU5KRUNUSU9OX1BPSU5UKCJkZWZpbmVfaW5k ZXhfYmVmb3JlX3NldF92YWxpZCIsIE5VTEwpOwogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFy YW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAogCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURY X1BIQVNFX1dBSVRfMyk7CiAJV2FpdEZvck9sZGVyU25hcHNob3RzKGxpbWl0WG1pbiwgdHJ1ZSk7 CkBAIC00MjI4LDcgKzQyMjksNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3Qg UmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCSAqIHRoZSBz YW1lIHRpbWUgdG8gbWFrZSBzdXJlIHdlIG9ubHkgZ2V0IGNvbnN0cmFpbnQgdmlvbGF0aW9ucyBm cm9tIHRoZQogCSAqIGluZGV4ZXMgd2l0aCB0aGUgY29ycmVjdCBuYW1lcy4KIAkgKi8KLQorCUlO SkVDVElPTl9QT0lOVCgicmVpbmRleF9yZWxhdGlvbl9jb25jdXJyZW50bHlfYmVmb3JlX3N3YXAi LCBOVUxMKTsKIAlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCiAJLyoKQEAgLTQzMDcsNiAr NDMwOCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAq c3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJICogaW5kZXhfZHJvcCgpIGZvciBt b3JlIGRldGFpbHMuCiAJICovCiAKKwlJTkpFQ1RJT05fUE9JTlQoInJlaW5kZXhfcmVsYXRpb25f Y29uY3VycmVudGx5X2JlZm9yZV9zZXRfZGVhZCIsIE5VTEwpOwogCXBnc3RhdF9wcm9ncmVzc191 cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAogCQkJCQkJCQkgUFJPR1JFU1Nf Q1JFQVRFSURYX1BIQVNFX1dBSVRfNCk7CiAJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFn cywgQWNjZXNzRXhjbHVzaXZlTG9jaywgdHJ1ZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGlu Zy5jCmluZGV4IDQwMTYwNmY4NDBhLi5kZjdlN2JjZTg2ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0luZGV4aW5nLmMKQEAgLTExNyw2ICsxMTcsNyBAQAogI2luY2x1ZGUgInV0aWxzL211bHRpcmFu Z2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3JhbmdldHlwZXMuaCIKICNpbmNsdWRlICJ1dGls cy9zbmFwbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAKIC8qIHdh aXRNb2RlIGFyZ3VtZW50IHRvIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludCgp ICovCiB0eXBlZGVmIGVudW0KQEAgLTk0Miw2ICs5NDMsOCBAQCByZXRyeToKIAllY29udGV4dC0+ ZWN4dF9zY2FudHVwbGUgPSBzYXZlX3NjYW50dXBsZTsKIAogCUV4ZWNEcm9wU2luZ2xlVHVwbGVU YWJsZVNsb3QoZXhpc3Rpbmdfc2xvdCk7CisJaWYgKCFjb25mbGljdCkKKwkJSU5KRUNUSU9OX1BP SU5UKCJjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnRfbm9fY29uZmxpY3QiLCBO VUxMKTsKIAogCXJldHVybiAhY29uZmxpY3Q7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0 aW9uLmMKaW5kZXggYWExMmU5YWQyZWEuLjA2NjY4NjQ4M2YwIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1BhcnRpdGlvbi5jCkBAIC00OTAsNiArNDkwLDQ4IEBAIEV4ZWNGaW5kUGFydGl0aW9uKE1v ZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUsCiAJcmV0dXJuIHJyaTsKIH0KIAorLyoKKyAqIElzSW5k ZXhDb21wYXRpYmxlQXNBcmJpdGVyCisgKiAJCUNoZWNrcyBpZiB0aGUgaW5kZXhlcyBhcmUgaWRl bnRpY2FsIGluIHRlcm1zIG9mIGJlaW5nIHVzZWQKKyAqIAkJYXMgYXJiaXRlcnMgZm9yIHRoZSBJ TlNFUlQgT04gQ09ORkxJQ1Qgb3BlcmF0aW9uIGJ5IGNvbXBhcmluZworICogCQl0aGVtIHRvIHRo ZSBwcm92aWRlZCBhcmJpdGVyIGluZGV4LgorICoKKyAqIFJldHVybnMgdGhlIHRydWUgaWYgaW5k ZXhlcyBhcmUgY29tcGF0aWJsZS4KKyAqLworc3RhdGljIGJvb2wKK0lzSW5kZXhDb21wYXRpYmxl QXNBcmJpdGVyKFJlbGF0aW9uCWFyYml0ZXJJbmRleFJlbGF0aW9uLAorCQkJCQkJICAgSW5kZXhJ bmZvICAqYXJiaXRlckluZGV4SW5mbywKKwkJCQkJCSAgIFJlbGF0aW9uCWluZGV4UmVsYXRpb24s CisJCQkJCQkgICBJbmRleEluZm8gICppbmRleEluZm8pCit7CisJaW50IGk7CisKKwlpZiAoYXJi aXRlckluZGV4SW5mby0+aWlfVW5pcXVlICE9IGluZGV4SW5mby0+aWlfVW5pcXVlKQorCQlyZXR1 cm4gZmFsc2U7CisJLyogaXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgY2FzZXMgb2YgZXhjbHVzaW9u IGNvbnN0cmFpbnRzLiAqLworCWlmIChhcmJpdGVySW5kZXhJbmZvLT5paV9FeGNsdXNpb25PcHMg IT0gTlVMTCB8fCBpbmRleEluZm8tPmlpX0V4Y2x1c2lvbk9wcyAhPSBOVUxMKQorCQlyZXR1cm4g ZmFsc2U7CisJaWYgKGFyYml0ZXJJbmRleFJlbGF0aW9uLT5yZF9pbmRleC0+aW5kbmtleWF0dHMg IT0gaW5kZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZG5rZXlhdHRzKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXhSZWxhdGlvbi0+cmRfaW5kZXgtPmluZG5rZXlhdHRz OyBpKyspCisJeworCQlpbnQJCQlhcmJpdGVyQXR0b05vID0gYXJiaXRlckluZGV4UmVsYXRpb24t PnJkX2luZGV4LT5pbmRrZXkudmFsdWVzW2ldOworCQlpbnQJCQlhdHRvTm8gPSBpbmRleFJlbGF0 aW9uLT5yZF9pbmRleC0+aW5ka2V5LnZhbHVlc1tpXTsKKwkJaWYgKGFyYml0ZXJBdHRvTm8gIT0g YXR0b05vKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChsaXN0X2RpZmZlcmVuY2UoUmVs YXRpb25HZXRJbmRleEV4cHJlc3Npb25zKGFyYml0ZXJJbmRleFJlbGF0aW9uKSwKKwkJCQkJCVJl bGF0aW9uR2V0SW5kZXhFeHByZXNzaW9ucyhpbmRleFJlbGF0aW9uKSkgIT0gTklMKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlpZiAobGlzdF9kaWZmZXJlbmNlKFJlbGF0aW9uR2V0SW5kZXhQcmVkaWNh dGUoYXJiaXRlckluZGV4UmVsYXRpb24pLAorCQkJCQkJUmVsYXRpb25HZXRJbmRleFByZWRpY2F0 ZShpbmRleFJlbGF0aW9uKSkgIT0gTklMKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7 Cit9CisKIC8qCiAgKiBFeGVjSW5pdFBhcnRpdGlvbkluZm8KICAqCQlMb2NrIHRoZSBwYXJ0aXRp b24gYW5kIGluaXRpYWxpemUgUmVzdWx0UmVsSW5mby4gIEFsc28gc2V0dXAgb3RoZXIKQEAgLTcw MSw2ICs3NDMsOCBAQCBFeGVjSW5pdFBhcnRpdGlvbkluZm8oTW9kaWZ5VGFibGVTdGF0ZSAqbXRz dGF0ZSwgRVN0YXRlICplc3RhdGUsCiAJCWlmIChyb290UmVzdWx0UmVsSW5mby0+cmlfb25Db25m bGljdEFyYml0ZXJJbmRleGVzICE9IE5JTCkKIAkJewogCQkJTGlzdAkgICAqY2hpbGRJZHhzOwor CQkJTGlzdCAJICAgKm5vbkFuY2VzdG9ySWR4cyA9IE5JTDsKKwkJCWludAkJICAgaSwgaiwgYWRk aXRpb25hbF9hcmJpdGVycyA9IDA7CiAKIAkJCWNoaWxkSWR4cyA9IFJlbGF0aW9uR2V0SW5kZXhM aXN0KGxlYWZfcGFydF9ycmktPnJpX1JlbGF0aW9uRGVzYyk7CiAKQEAgLTcxMSwyMyArNzU1LDc0 IEBAIEV4ZWNJbml0UGFydGl0aW9uSW5mbyhNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLCBFU3Rh dGUgKmVzdGF0ZSwKIAkJCQlMaXN0Q2VsbCAgICpsYzI7CiAKIAkJCQlhbmNlc3RvcnMgPSBnZXRf cGFydGl0aW9uX2FuY2VzdG9ycyhjaGlsZElkeCk7Ci0JCQkJZm9yZWFjaChsYzIsIHJvb3RSZXN1 bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0QXJiaXRlckluZGV4ZXMpCisJCQkJaWYgKGFuY2VzdG9y cykKIAkJCQl7Ci0JCQkJCWlmIChsaXN0X21lbWJlcl9vaWQoYW5jZXN0b3JzLCBsZmlyc3Rfb2lk KGxjMikpKQotCQkJCQkJYXJiaXRlckluZGV4ZXMgPSBsYXBwZW5kX29pZChhcmJpdGVySW5kZXhl cywgY2hpbGRJZHgpOworCQkJCQlmb3JlYWNoKGxjMiwgcm9vdFJlc3VsdFJlbEluZm8tPnJpX29u Q29uZmxpY3RBcmJpdGVySW5kZXhlcykKKwkJCQkJeworCQkJCQkJaWYgKGxpc3RfbWVtYmVyX29p ZChhbmNlc3RvcnMsIGxmaXJzdF9vaWQobGMyKSkpCisJCQkJCQkJYXJiaXRlckluZGV4ZXMgPSBs YXBwZW5kX29pZChhcmJpdGVySW5kZXhlcywgY2hpbGRJZHgpOworCQkJCQl9CiAJCQkJfQorCQkJ CWVsc2UgLyogTm8gYW5jZXN0b3Igd2FzIGZvdW5kIGZvciB0aGF0IGluZGV4LiBTYXZlIGl0IGZv ciByZWNoZWNraW5nIGxhdGVyLiAqLworCQkJCQlub25BbmNlc3RvcklkeHMgPSBsYXBwZW5kX29p ZChub25BbmNlc3RvcklkeHMsIGNoaWxkSWR4KTsKIAkJCQlsaXN0X2ZyZWUoYW5jZXN0b3JzKTsK IAkJCX0KKworCQkJLyoKKwkJCSAqIElmIGFueSBub24tYW5jZXN0b3IgaW5kZXhlcyBhcmUgZm91 bmQsIHdlIG5lZWQgdG8gY29tcGFyZSB0aGVtIHdpdGggb3RoZXIKKwkJCSAqIGluZGV4ZXMgb2Yg dGhlIHJlbGF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGFyYml0ZXJzLiBUaGlzIGlzIG5lY2Vz c2FyeQorCQkJICogd2hlbiBhIHBhcnRpdGlvbmVkIGluZGV4IGlzIHByb2Nlc3NlZCBieSBSRUlO REVYIENPTkNVUlJFTlRMWS4gQm90aCBpbmRleGVzCisJCQkgKiBtdXN0IGJlIGNvbnNpZGVyZWQg YXMgYXJiaXRlcnMgdG8gZW5zdXJlIHRoYXQgYWxsIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25zCisJ CQkgKiB1c2UgdGhlIHNhbWUgc2V0IG9mIGFyYml0ZXJzLgorCQkJICovCisJCQlpZiAobm9uQW5j ZXN0b3JJZHhzKQorCQkJeworCQkJCWZvciAoaSA9IDA7IGkgPCBsZWFmX3BhcnRfcnJpLT5yaV9O dW1JbmRpY2VzOyBpKyspCisJCQkJeworCQkJCQlpZiAobGlzdF9tZW1iZXJfb2lkKG5vbkFuY2Vz dG9ySWR4cywgbGVhZl9wYXJ0X3JyaS0+cmlfSW5kZXhSZWxhdGlvbkRlc2NzW2ldLT5yZF9pbmRl eC0+aW5kZXhyZWxpZCkpCisJCQkJCXsKKwkJCQkJCVJlbGF0aW9uIG5vbkFuY2VzdG9ySW5kZXhS ZWxhdGlvbiA9IGxlYWZfcGFydF9ycmktPnJpX0luZGV4UmVsYXRpb25EZXNjc1tpXTsKKwkJCQkJ CUluZGV4SW5mbyAqbm9uQW5jZXN0b3JJbmRleEluZm8gPSBsZWFmX3BhcnRfcnJpLT5yaV9JbmRl eFJlbGF0aW9uSW5mb1tpXTsKKwkJCQkJCUFzc2VydCghbGlzdF9tZW1iZXJfb2lkKGFyYml0ZXJJ bmRleGVzLCBub25BbmNlc3RvckluZGV4UmVsYXRpb24tPnJkX2luZGV4LT5pbmRleHJlbGlkKSk7 CisKKwkJCQkJCS8qIEl0IGlzIHRvbyBlYXJseSB0byB1cyBub24tcmVhZHkgaW5kZXhlcyBhcyBh cmJpdGVycyAqLworCQkJCQkJaWYgKCFub25BbmNlc3RvckluZGV4SW5mby0+aWlfUmVhZHlGb3JJ bnNlcnRzKQorCQkJCQkJCWNvbnRpbnVlOworCisJCQkJCQlmb3IgKGogPSAwOyBqIDwgbGVhZl9w YXJ0X3JyaS0+cmlfTnVtSW5kaWNlczsgaisrKQorCQkJCQkJeworCQkJCQkJCWlmIChsaXN0X21l bWJlcl9vaWQoYXJiaXRlckluZGV4ZXMsCisJCQkJCQkJCQkJCQlsZWFmX3BhcnRfcnJpLT5yaV9J bmRleFJlbGF0aW9uRGVzY3Nbal0tPnJkX2luZGV4LT5pbmRleHJlbGlkKSkKKwkJCQkJCQl7CisJ CQkJCQkJCVJlbGF0aW9uIGFyYml0ZXJJbmRleFJlbGF0aW9uID0gbGVhZl9wYXJ0X3JyaS0+cmlf SW5kZXhSZWxhdGlvbkRlc2NzW2pdOworCQkJCQkJCQlJbmRleEluZm8gKmFyYml0ZXJJbmRleElu Zm8gPSBsZWFmX3BhcnRfcnJpLT5yaV9JbmRleFJlbGF0aW9uSW5mb1tqXTsKKworCQkJCQkJCQkv KiBJZiBub24tYW5jZXN0b3IgaW5kZXggYXJlIGNvbXBhdGlibGUgdG8gYXJiaXRlciAtIHVzZSBp dCBhcyBhcmJpdGVyIHRvby4gKi8KKwkJCQkJCQkJaWYgKElzSW5kZXhDb21wYXRpYmxlQXNBcmJp dGVyKGFyYml0ZXJJbmRleFJlbGF0aW9uLCBhcmJpdGVySW5kZXhJbmZvLAorCQkJCQkJCQkJCQkJ CQkJICAgbm9uQW5jZXN0b3JJbmRleFJlbGF0aW9uLCBub25BbmNlc3RvckluZGV4SW5mbykpCisJ CQkJCQkJCXsKKwkJCQkJCQkJCWFyYml0ZXJJbmRleGVzID0gbGFwcGVuZF9vaWQoYXJiaXRlcklu ZGV4ZXMsCisJCQkJCQkJCQkJCQkJCQkJIG5vbkFuY2VzdG9ySW5kZXhSZWxhdGlvbi0+cmRfaW5k ZXgtPmluZGV4cmVsaWQpOworCQkJCQkJCQkJYWRkaXRpb25hbF9hcmJpdGVycysrOworCQkJCQkJ CQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJbGlzdF9mcmVl KG5vbkFuY2VzdG9ySWR4cyk7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgcmVzdWx0aW5nIGxpc3Rz IGFyZSBvZiBpbmVxdWFsIGxlbmd0aCwgc29tZXRoaW5nIGlzIHdyb25nLgorCQkJICogKFRoaXMg c2hvdWxkbid0IGhhcHBlbiwgc2luY2UgYXJiaXRlciBpbmRleCBzZWxlY3Rpb24gc2hvdWxkIG5v dAorCQkJICogcGljayB1cCBhIG5vbi1yZWFkeSBpbmRleC4pCisJCQkgKgorCQkJICogQnV0IHdl IG5lZWQgdG8gY29uc2lkZXIgYW4gYWRkaXRpb25hbCBhcmJpdGVyIGluZGV4ZXMgYWxzby4KKwkJ CSAqLworCQkJaWYgKGxpc3RfbGVuZ3RoKHJvb3RSZXN1bHRSZWxJbmZvLT5yaV9vbkNvbmZsaWN0 QXJiaXRlckluZGV4ZXMpICE9CisJCQkJbGlzdF9sZW5ndGgoYXJiaXRlckluZGV4ZXMpIC0gYWRk aXRpb25hbF9hcmJpdGVycykKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBhcmJpdGVyIGluZGV4 IGxpc3QiKTsKIAkJfQotCi0JCS8qCi0JCSAqIElmIHRoZSByZXN1bHRpbmcgbGlzdHMgYXJlIG9m IGluZXF1YWwgbGVuZ3RoLCBzb21ldGhpbmcgaXMgd3JvbmcuCi0JCSAqIChUaGlzIHNob3VsZG4n dCBoYXBwZW4sIHNpbmNlIGFyYml0ZXIgaW5kZXggc2VsZWN0aW9uIHNob3VsZCBub3QKLQkJICog cGljayB1cCBhbiBpbnZhbGlkIGluZGV4LikKLQkJICovCi0JCWlmIChsaXN0X2xlbmd0aChyb290 UmVzdWx0UmVsSW5mby0+cmlfb25Db25mbGljdEFyYml0ZXJJbmRleGVzKSAhPQotCQkJbGlzdF9s ZW5ndGgoYXJiaXRlckluZGV4ZXMpKQotCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYXJiaXRlciBp bmRleCBsaXN0Iik7CiAJCWxlYWZfcGFydF9ycmktPnJpX29uQ29uZmxpY3RBcmJpdGVySW5kZXhl cyA9IGFyYml0ZXJJbmRleGVzOwogCiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlU YWJsZS5jCmluZGV4IDRjNTY0N2FjMzhhLi5mNmQyYTZlZGU5MyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTcwLDYgKzcwLDcgQEAKICNpbmNsdWRlICJ1dGlscy9k YXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKKyNpbmNsdWRlICJ1dGlscy9pbmplY3Rpb25fcG9pbnQuaCIKIAogCiB0eXBlZGVmIHN0cnVj dCBNVFRhcmdldFJlbExvb2t1cApAQCAtMTE3OSw2ICsxMTgwLDcgQEAgRXhlY0luc2VydChNb2Rp ZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJCQkJCXJldHVybiBOVUxMOwogCQkJCX0KIAkJCX0K KwkJCUlOSkVDVElPTl9QT0lOVCgiZXhlY19pbnNlcnRfYmVmb3JlX2luc2VydF9zcGVjdWxhdGl2 ZSIsIE5VTEwpOwogCiAJCQkvKgogCQkJICogQmVmb3JlIHdlIHN0YXJ0IGluc2VydGlvbiBwcm9w ZXIsIGFjcXVpcmUgb3VyICJzcGVjdWxhdGl2ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNh dC5jCmluZGV4IGQ5NTBiZDkzMDAyLi5mZjQxNmYwNTIyYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYwpAQCAtODA4LDEyICs4MDgsMTQgQEAgaW5mZXJfYXJiaXRlcl9pbmRleGVz KFBsYW5uZXJJbmZvICpyb290KQogCUxpc3QJICAgKmluZGV4TGlzdDsKIAlMaXN0Q2VsbCAgICps OwogCi0JLyogTm9ybWFsaXplZCBpbmZlcmVuY2UgYXR0cmlidXRlcyBhbmQgaW5mZXJlbmNlIGV4 cHJlc3Npb25zOiAqLwotCUJpdG1hcHNldCAgKmluZmVyQXR0cnMgPSBOVUxMOwotCUxpc3QJICAg KmluZmVyRWxlbXMgPSBOSUw7CisJLyogTm9ybWFsaXplZCByZXF1aXJlZCBhdHRyaWJ1dGVzIGFu ZCBleHByZXNzaW9uczogKi8KKwlCaXRtYXBzZXQgICpyZXF1aXJlZEFyYml0ZXJBdHRycyA9IE5V TEw7CisJTGlzdAkgICAqcmVxdWlyZWRBcmJpdGVyRWxlbXMgPSBOSUw7CisJTGlzdAkgICAqcmVx dWlyZWRJbmRleFByZWRFeHBycyA9IChMaXN0ICopIG9uY29uZmxpY3QtPmFyYml0ZXJXaGVyZTsK IAogCS8qIFJlc3VsdHMgKi8KIAlMaXN0CSAgICpyZXN1bHRzID0gTklMOworCWJvb2wJICAgZm91 bmRWYWxpZCA9IGZhbHNlOwogCiAJLyoKIAkgKiBRdWlja2x5IHJldHVybiBOSUwgZm9yIE9OIENP TkZMSUNUIERPIE5PVEhJTkcgd2l0aG91dCBhbiBpbmZlcmVuY2UKQEAgLTg0OCw4ICs4NTAsOCBA QCBpbmZlcl9hcmJpdGVyX2luZGV4ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAKIAkJaWYgKCFJc0Eo ZWxlbS0+ZXhwciwgVmFyKSkKIAkJewotCQkJLyogSWYgbm90IGEgcGxhaW4gVmFyLCBqdXN0IHNo b3ZlIGl0IGluIGluZmVyRWxlbXMgZm9yIG5vdyAqLwotCQkJaW5mZXJFbGVtcyA9IGxhcHBlbmQo aW5mZXJFbGVtcywgZWxlbS0+ZXhwcik7CisJCQkvKiBJZiBub3QgYSBwbGFpbiBWYXIsIGp1c3Qg c2hvdmUgaXQgaW4gcmVxdWlyZWRBcmJpdGVyRWxlbXMgZm9yIG5vdyAqLworCQkJcmVxdWlyZWRB cmJpdGVyRWxlbXMgPSBsYXBwZW5kKHJlcXVpcmVkQXJiaXRlckVsZW1zLCBlbGVtLT5leHByKTsK IAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTg2MSwzMCArODYzLDc2IEBAIGluZmVyX2FyYml0ZXJf aW5kZXhlcyhQbGFubmVySW5mbyAqcm9vdCkKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJF X05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJ3aG9sZSByb3cgdW5pcXVlIGluZGV4IGlu ZmVyZW5jZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCIpKSk7CiAKLQkJaW5mZXJB dHRycyA9IGJtc19hZGRfbWVtYmVyKGluZmVyQXR0cnMsCisJCXJlcXVpcmVkQXJiaXRlckF0dHJz ID0gYm1zX2FkZF9tZW1iZXIocmVxdWlyZWRBcmJpdGVyQXR0cnMsCiAJCQkJCQkJCQlhdHRubyAt IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOwogCX0KIAorCWluZGV4TGlzdCA9 IFJlbGF0aW9uR2V0SW5kZXhMaXN0KHJlbGF0aW9uKTsKKwogCS8qCiAJICogTG9va3VwIG5hbWVk IGNvbnN0cmFpbnQncyBpbmRleC4gIFRoaXMgaXMgbm90IGltbWVkaWF0ZWx5IHJldHVybmVkCi0J ICogYmVjYXVzZSBzb21lIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBhcmUgcmVxdWlyZWQuCisJ ICogYmVjYXVzZSBzb21lIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNrcyBhcmUgcmVxdWlyZWQuIEFk ZGl0aW9uYWxseSwgd2UKKwkgKiBuZWVkIHRvIHByb2Nlc3Mgb3RoZXIgaW5kZXhlcyBhcyBwb3Rl bnRpYWwgYXJiaXRlcnMgdG8gYWNjb3VudCBmb3IKKwkgKiBjYXNlcyB3aGVyZSBSRUlOREVYIENP TkNVUlJFTlRMWSBpcyBwcm9jZXNzaW5nIGFuIGluZGV4IHVzZWQgYXMgYQorCSAqIG5hbWVkIGNv bnN0cmFpbnQuCiAJICovCiAJaWYgKG9uY29uZmxpY3QtPmNvbnN0cmFpbnQgIT0gSW52YWxpZE9p ZCkKIAl7CiAJCWluZGV4T2lkRnJvbUNvbnN0cmFpbnQgPSBnZXRfY29uc3RyYWludF9pbmRleChv bmNvbmZsaWN0LT5jb25zdHJhaW50KTsKIAogCQlpZiAoaW5kZXhPaWRGcm9tQ29uc3RyYWludCA9 PSBJbnZhbGlkT2lkKQorCQl7CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJD T0RFX1dST05HX09CSkVDVF9UWVBFKSwKLQkJCQkJIGVycm1zZygiY29uc3RyYWludCBpbiBPTiBD T05GTElDVCBjbGF1c2UgaGFzIG5vIGFzc29jaWF0ZWQgaW5kZXgiKSkpOworCQkJCQllcnJtc2co ImNvbnN0cmFpbnQgaW4gT04gQ09ORkxJQ1QgY2xhdXNlIGhhcyBubyBhc3NvY2lhdGVkIGluZGV4 IikpKTsKKwkJfQorCisJCS8qCisJCSAqIEZpbmQgdGhlIG5hbWVkIGNvbnN0cmFpbnQgaW5kZXgg dG8gZXh0cmFjdCBpdHMgYXR0cmlidXRlcyBhbmQgcHJlZGljYXRlcy4KKwkJICogV2Ugb3BlbiBh bGwgaW5kZXhlcyBpbiB0aGUgbG9vcCB0byBhdm9pZCBkZWFkbG9jayBvZiBjaGFuZ2VkIG9yZGVy IG9mIGxvY2tzLgorCQkgKiAqLworCQlmb3JlYWNoKGwsIGluZGV4TGlzdCkKKwkJeworCQkJT2lk CQkJaW5kZXhvaWQgPSBsZmlyc3Rfb2lkKGwpOworCQkJUmVsYXRpb24JaWR4UmVsOworCQkJRm9y bV9wZ19pbmRleCBpZHhGb3JtOworCQkJQXR0ck51bWJlcgluYXR0OworCisJCQlpZHhSZWwgPSBp bmRleF9vcGVuKGluZGV4b2lkLCBydGUtPnJlbGxvY2ttb2RlKTsKKwkJCWlkeEZvcm0gPSBpZHhS ZWwtPnJkX2luZGV4OworCisJCQlpZiAoaWR4Rm9ybS0+aW5kaXNyZWFkeSkKKwkJCXsKKwkJCQlp ZiAoaW5kZXhPaWRGcm9tQ29uc3RyYWludCA9PSBpZHhGb3JtLT5pbmRleHJlbGlkKQorCQkJCXsK KwkJCQkJLyoKKwkJCQkJICogUHJlcGFyZSByZXF1aXJlbWVudHMgZm9yIG90aGVyIGluZGV4ZXMg dG8gYmUgdXNlZCBhcyBhcmJpdGVyIHRvZ2V0aGVyCisJCQkJCSAqIHdpdGggaW5kZXhPaWRGcm9t Q29uc3RyYWludC4gSXQgaXMgcmVxdWlyZWQgdG8gaW52b2x2ZSBib3RoIGVxdWFscyBpbmRleGVz CisJCQkJCSAqIGluIGNhc2Ugb2YgUkVJTkRFWCBDT05DVVJSRU5UTFkuCisJCQkJCSAqLworCQkJ CQlmb3IgKG5hdHQgPSAwOyBuYXR0IDwgaWR4Rm9ybS0+aW5kbmtleWF0dHM7IG5hdHQrKykKKwkJ CQkJeworCQkJCQkJaW50CQkJYXR0bm8gPSBpZHhSZWwtPnJkX2luZGV4LT5pbmRrZXkudmFsdWVz W25hdHRdOworCisJCQkJCQlpZiAoYXR0bm8gIT0gMCkKKwkJCQkJCQlyZXF1aXJlZEFyYml0ZXJB dHRycyA9IGJtc19hZGRfbWVtYmVyKHJlcXVpcmVkQXJiaXRlckF0dHJzLAorCQkJCQkJCQkJCQkJ CQkgIGF0dG5vIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJCQkJCX0K KwkJCQkJcmVxdWlyZWRBcmJpdGVyRWxlbXMgPSBSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lvbnMo aWR4UmVsKTsKKwkJCQkJcmVxdWlyZWRJbmRleFByZWRFeHBycyA9IFJlbGF0aW9uR2V0SW5kZXhQ cmVkaWNhdGUoaWR4UmVsKTsKKwkJCQkJLyogV2UgYXJlIGRvbmUsIHNvLCBxdWl0ZSB0aGUgbG9v cC4gKi8KKwkJCQkJaW5kZXhfY2xvc2UoaWR4UmVsLCBOb0xvY2spOworCQkJCQlicmVhazsKKwkJ CQl9CisJCQl9CisJCQlpbmRleF9jbG9zZShpZHhSZWwsIE5vTG9jayk7CisJCX0KIAl9CiAKIAkv KgogCSAqIFVzaW5nIHRoYXQgcmVwcmVzZW50YXRpb24sIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlz dCBvZiBpbmRleGVzIG9uIHRoZQogCSAqIHRhcmdldCByZWxhdGlvbiB0byB0cnkgYW5kIGZpbmQg YSBtYXRjaAogCSAqLwotCWluZGV4TGlzdCA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KHJlbGF0aW9u KTsKLQogCWZvcmVhY2gobCwgaW5kZXhMaXN0KQogCXsKIAkJT2lkCQkJaW5kZXhvaWQgPSBsZmly c3Rfb2lkKGwpOwpAQCAtOTA3LDcgKzk1NSwxMyBAQCBpbmZlcl9hcmJpdGVyX2luZGV4ZXMoUGxh bm5lckluZm8gKnJvb3QpCiAJCWlkeFJlbCA9IGluZGV4X29wZW4oaW5kZXhvaWQsIHJ0ZS0+cmVs bG9ja21vZGUpOwogCQlpZHhGb3JtID0gaWR4UmVsLT5yZF9pbmRleDsKIAotCQlpZiAoIWlkeEZv cm0tPmluZGlzdmFsaWQpCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gY29uc2lkZXIgYm90aCBpbmRp c3ZhbGlkIGFuZCBpbmRpc3JlYWR5IGluZGV4ZXMgYmVjYXVzZQorCQkgKiB0aGVtIG1heSBiZWNv bWUgaW5kaXN2YWxpZCBiZWZvcmUgZXhlY3V0aW9uIHBoYXNlLiBJdCBpcyByZXF1aXJlZAorCQkg KiB0byBrZWVwIHNldCBvZiBpbmRleGVzIHVzZWQgYXMgYXJiaXRlciB0byBiZSB0aGUgc2FtZSBm b3IgYWxsCisJCSAqIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25zLgorCQkgKi8KKwkJaWYgKCFpZHhG b3JtLT5pbmRpc3JlYWR5KQogCQkJZ290byBuZXh0OwogCiAJCS8qCkBAIC05MjcsMjcgKzk4MSwy MyBAQCBpbmZlcl9hcmJpdGVyX2luZGV4ZXMoUGxhbm5lckluZm8gKnJvb3QpCiAJCQkJZXJlcG9y dChFUlJPUiwKIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAogCQkJ CQkJIGVycm1zZygiT04gQ09ORkxJQ1QgRE8gVVBEQVRFIG5vdCBzdXBwb3J0ZWQgd2l0aCBleGNs dXNpb24gY29uc3RyYWludHMiKSkpOwotCi0JCQlyZXN1bHRzID0gbGFwcGVuZF9vaWQocmVzdWx0 cywgaWR4Rm9ybS0+aW5kZXhyZWxpZCk7Ci0JCQlsaXN0X2ZyZWUoaW5kZXhMaXN0KTsKLQkJCWlu ZGV4X2Nsb3NlKGlkeFJlbCwgTm9Mb2NrKTsKLQkJCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBOb0xv Y2spOwotCQkJcmV0dXJuIHJlc3VsdHM7CisJCQlnb3RvIGZvdW5kOwogCQl9CiAJCWVsc2UgaWYg KGluZGV4T2lkRnJvbUNvbnN0cmFpbnQgIT0gSW52YWxpZE9pZCkKIAkJewotCQkJLyogTm8gcG9p bnQgaW4gZnVydGhlciB3b3JrIGZvciBpbmRleCBpbiBuYW1lZCBjb25zdHJhaW50IGNhc2UgKi8K LQkJCWdvdG8gbmV4dDsKKwkJCS8qIEluIHRoZSBjYXNlIG9mICJPTiBjb25zdHJhaW50X25hbWUg RE8gVVBEQVRFIiB3ZSBuZWVkIHRvIHNraXAgbm9uLXVuaXF1ZSBjYW5kaWRhdGVzLiAqLworCQkJ aWYgKCFpZHhGb3JtLT5pbmRpc3VuaXF1ZSAmJiBvbmNvbmZsaWN0LT5hY3Rpb24gPT0gT05DT05G TElDVF9VUERBVEUpCisJCQkJZ290byBuZXh0OworCQl9ICBlbHNlIHsKKwkJCS8qCisJCQkgKiBP bmx5IGNvbnNpZGVyaW5nIGNvbnZlbnRpb25hbCBpbmZlcmVuY2UgYXQgdGhpcyBwb2ludCAobm90 IG5hbWVkCisJCQkgKiBjb25zdHJhaW50cyksIHNvIGluZGV4IHVuZGVyIGNvbnNpZGVyYXRpb24g Y2FuIGJlIGltbWVkaWF0ZWx5CisJCQkgKiBza2lwcGVkIGlmIGl0J3Mgbm90IHVuaXF1ZQorCQkJ ICovCisJCQlpZiAoIWlkeEZvcm0tPmluZGlzdW5pcXVlKQorCQkJCWdvdG8gbmV4dDsKIAkJfQog Ci0JCS8qCi0JCSAqIE9ubHkgY29uc2lkZXJpbmcgY29udmVudGlvbmFsIGluZmVyZW5jZSBhdCB0 aGlzIHBvaW50IChub3QgbmFtZWQKLQkJICogY29uc3RyYWludHMpLCBzbyBpbmRleCB1bmRlciBj b25zaWRlcmF0aW9uIGNhbiBiZSBpbW1lZGlhdGVseQotCQkgKiBza2lwcGVkIGlmIGl0J3Mgbm90 IHVuaXF1ZQotCQkgKi8KLQkJaWYgKCFpZHhGb3JtLT5pbmRpc3VuaXF1ZSkKLQkJCWdvdG8gbmV4 dDsKLQogCQkvKgogCQkgKiBTby1jYWxsZWQgdW5pcXVlIGNvbnN0cmFpbnRzIHdpdGggV0lUSE9V VCBPVkVSTEFQUyBhcmUgcmVhbGx5CiAJCSAqIGV4Y2x1c2lvbiBjb25zdHJhaW50cywgc28gc2tp cCB0aG9zZSB0b28uCkBAIC05NjcsNyArMTAxNyw3IEBAIGluZmVyX2FyYml0ZXJfaW5kZXhlcyhQ bGFubmVySW5mbyAqcm9vdCkKIAkJfQogCiAJCS8qIE5vbi1leHByZXNzaW9uIGF0dHJpYnV0ZXMg KGlmIGFueSkgbXVzdCBtYXRjaCAqLwotCQlpZiAoIWJtc19lcXVhbChpbmRleGVkQXR0cnMsIGlu ZmVyQXR0cnMpKQorCQlpZiAoIWJtc19lcXVhbChpbmRleGVkQXR0cnMsIHJlcXVpcmVkQXJiaXRl ckF0dHJzKSkKIAkJCWdvdG8gbmV4dDsKIAogCQkvKiBFeHByZXNzaW9uIGF0dHJpYnV0ZXMgKGlm IGFueSkgbXVzdCBtYXRjaCAqLwpAQCAtOTc1LDYgKzEwMjUsMTAgQEAgaW5mZXJfYXJiaXRlcl9p bmRleGVzKFBsYW5uZXJJbmZvICpyb290KQogCQlpZiAoaWR4RXhwcnMgJiYgdmFybm8gIT0gMSkK IAkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIGlkeEV4cHJzLCAxLCB2YXJubywgMCk7CiAKKwkJ LyoKKwkJICogSWYgYXJiaXRlckVsZW1zIGFyZSBwcmVzZW50LCBjaGVjayB0aGVtLiBJZiBuYW1l ID5jb25zdHJhaW50IGlzCisJCSAqIHByZXNlbnQgYXJiaXRlckVsZW1zID09IE5JTC4KKwkJICov CiAJCWZvcmVhY2goZWwsIG9uY29uZmxpY3QtPmFyYml0ZXJFbGVtcykKIAkJewogCQkJSW5mZXJl bmNlRWxlbSAqZWxlbSA9IChJbmZlcmVuY2VFbGVtICopIGxmaXJzdChlbCk7CkBAIC0xMDEyLDI3 ICsxMDY2LDM1IEBAIGluZmVyX2FyYml0ZXJfaW5kZXhlcyhQbGFubmVySW5mbyAqcm9vdCkKIAkJ fQogCiAJCS8qCi0JCSAqIE5vdyB0aGF0IGFsbCBpbmZlcmVuY2UgZWxlbWVudHMgd2VyZSBtYXRj aGVkLCBlbnN1cmUgdGhhdCB0aGUKKwkJICogSW4gY2FzZSBvZiB0aGUgY29udmVudGlvbmFsIGlu ZmVyZW5jZSBpbnZvbHZlZCBlbnN1cmUgdGhhdCB0aGUKIAkJICogZXhwcmVzc2lvbiBlbGVtZW50 cyBmcm9tIGluZmVyZW5jZSBjbGF1c2UgYXJlIG5vdCBtaXNzaW5nIGFueQogCQkgKiBjYXRhbG9n ZWQgZXhwcmVzc2lvbnMuICBUaGlzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIHdoZW4gdW5pcXVlCiAJ CSAqIGluZGV4ZXMgcmVkdW5kYW50bHkgcmVwZWF0IHRoZSBzYW1lIGF0dHJpYnV0ZSwgb3IgaWYg YXR0cmlidXRlcwogCQkgKiByZWR1bmRhbnRseSBhcHBlYXIgbXVsdGlwbGUgdGltZXMgd2l0aGlu IGFuIGluZmVyZW5jZSBjbGF1c2UuCisJCSAqCisJCSAqIEluIHRoZSBjYXNlIG9mIG5hbWVkIGNv bnN0cmFpbnQgZW5zdXJlIGNhbmRpZGF0ZSBoYXMgZXF1YWwgc2V0CisJCSAqIG9mIGV4cHJlc3Np b25zIGFzIHRoZSBuYW1lZCBjb25zdHJhaW50IGluZGV4LgogCQkgKi8KLQkJaWYgKGxpc3RfZGlm ZmVyZW5jZShpZHhFeHBycywgaW5mZXJFbGVtcykgIT0gTklMKQorCQlpZiAobGlzdF9kaWZmZXJl bmNlKGlkeEV4cHJzLCByZXF1aXJlZEFyYml0ZXJFbGVtcykgIT0gTklMKQogCQkJZ290byBuZXh0 OwogCi0JCS8qCi0JCSAqIElmIGl0J3MgYSBwYXJ0aWFsIGluZGV4LCBpdHMgcHJlZGljYXRlIG11 c3QgYmUgaW1wbGllZCBieSB0aGUgT04KLQkJICogQ09ORkxJQ1QncyBXSEVSRSBjbGF1c2UuCi0J CSAqLwogCQlwcmVkRXhwcnMgPSBSZWxhdGlvbkdldEluZGV4UHJlZGljYXRlKGlkeFJlbCk7CiAJ CWlmIChwcmVkRXhwcnMgJiYgdmFybm8gIT0gMSkKIAkJCUNoYW5nZVZhck5vZGVzKChOb2RlICop IHByZWRFeHBycywgMSwgdmFybm8sIDApOwogCi0JCWlmICghcHJlZGljYXRlX2ltcGxpZWRfYnko cHJlZEV4cHJzLCAoTGlzdCAqKSBvbmNvbmZsaWN0LT5hcmJpdGVyV2hlcmUsIGZhbHNlKSkKKwkJ LyoKKwkJICogSWYgaXQncyBhIHBhcnRpYWwgaW5kZXggYW5kIGNvbnZlbnRpb25hbCBpbmZlcmVu Y2UsIGl0cyBwcmVkaWNhdGUgbXVzdCBiZSBpbXBsaWVkCisJCSAqIGJ5IHRoZSBPTiBDT05GTElD VCdzIFdIRVJFIGNsYXVzZS4KKwkJICovCisJCWlmIChpbmRleE9pZEZyb21Db25zdHJhaW50ID09 IEludmFsaWRPaWQgJiYgIXByZWRpY2F0ZV9pbXBsaWVkX2J5KHByZWRFeHBycywgcmVxdWlyZWRJ bmRleFByZWRFeHBycywgZmFsc2UpKQorCQkJZ290byBuZXh0OworCQkvKiBJZiBpdCdzIGEgcGFy dGlhbCBpbmRleCBhbmQgbmFtZWQgY29uc3RyYWludCBwcmVkaWNhdGVzIG11c3QgYmUgZXF1YWwu ICovCisJCWlmIChpbmRleE9pZEZyb21Db25zdHJhaW50ICE9IEludmFsaWRPaWQgJiYgbGlzdF9k aWZmZXJlbmNlKHByZWRFeHBycywgcmVxdWlyZWRJbmRleFByZWRFeHBycykgIT0gTklMKQogCQkJ Z290byBuZXh0OwogCitmb3VuZDoKIAkJcmVzdWx0cyA9IGxhcHBlbmRfb2lkKHJlc3VsdHMsIGlk eEZvcm0tPmluZGV4cmVsaWQpOworCQlmb3VuZFZhbGlkIHw9IGlkeEZvcm0tPmluZGlzdmFsaWQ7 CiBuZXh0OgogCQlpbmRleF9jbG9zZShpZHhSZWwsIE5vTG9jayk7CiAJfQpAQCAtMTA0MCw3ICsx MTAyLDggQEAgbmV4dDoKIAlsaXN0X2ZyZWUoaW5kZXhMaXN0KTsKIAl0YWJsZV9jbG9zZShyZWxh dGlvbiwgTm9Mb2NrKTsKIAotCWlmIChyZXN1bHRzID09IE5JTCkKKwkvKiBJdCBpcyByZXF1aXJl ZCB0byBoYXZlIGF0IGxlYXN0IG9uZSBpbmRpc3ZhbGlkIGluZGV4IGR1cmluZyB0aGUgcGxhbm5p bmcuICovCisJaWYgKHJlc3VsdHMgPT0gTklMIHx8ICFmb3VuZFZhbGlkKQogCQllcmVwb3J0KEVS Uk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFKSwKIAkJ CQkgZXJybXNnKCJ0aGVyZSBpcyBubyB1bmlxdWUgb3IgZXhjbHVzaW9uIGNvbnN0cmFpbnQgbWF0 Y2hpbmcgdGhlIE9OIENPTkZMSUNUIHNwZWNpZmljYXRpb24iKSkpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMgYi9zcmMvYmFja2VuZC91dGlscy90aW1lL3Nu YXBtZ3IuYwppbmRleCA2NTU2MWNjNmJjMy4uOGUxYTkxOGYxMzAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUv c25hcG1nci5jCkBAIC0xMjMsNiArMTIzLDcgQEAKICNpbmNsdWRlICJ1dGlscy9yZXNvd25lci5o IgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5o IgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAKIC8qCkBAIC00NTgsNiAr NDU5LDcgQEAgSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCh2b2lkKQogCQlwYWlyaW5naGVhcF9y ZW1vdmUoJlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZDYXRhbG9nU25hcHNob3QtPnBoX25vZGUpOwog CQlDYXRhbG9nU25hcHNob3QgPSBOVUxMOwogCQlTbmFwc2hvdFJlc2V0WG1pbigpOworCQlJTkpF Q1RJT05fUE9JTlQoImludmFsaWRhdGVfY2F0YWxvZ19zbmFwc2hvdF9lbmQiLCBOVUxMKTsKIAl9 CiB9CiAKLS0gCjIuNDMuMAoK --000000000000ac6d6606432d3652 Content-Type: text/plain; charset="US-ASCII"; name="v26-0003-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Disposition: attachment; filename="v26-0003-Add-STIR-access-method-and-flags-related-to-auxi.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhrw6pet2 RnJvbSAwZmNjY2Q0Nzg1YjgwMTUzMjZkMjRlZjhiNzIwNWI0NDcwNGRhOWIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAyMSBEZWMgMjAyNCAxODozNjoxMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI2IDMvOF0gQWRkIFNUSVIgYWNjZXNzIG1ldGhvZCBhbmQgZmxhZ3MgcmVsYXRlZCB0 byBhdXhpbGlhcnkKIGluZGV4ZXMKClRoaXMgcGF0Y2ggcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUg Zm9yIGZvbGxvd2luZyBlbmhhbmNlbWVudHMgdG8gY29uY3VycmVudCBpbmRleCBidWlsZHMgYnk6 Ci0gaWlfQXV4aWxpYXJ5IGluIEluZGV4SW5mbzogaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggaXMg YW4gYXV4aWxpYXJ5IGluZGV4IHVzZWQgZHVyaW5nIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQKLSB2 YWxpZGF0ZV9pbmRleCBpbiBJbmRleFZhY3V1bUluZm86IHNldCBpZiBpbmRleF9idWxrX2RlbGV0 ZSBjYWxsZWQgZHVyaW5nIHRoZSB2YWxpZGF0aW9uIHBoYXNlIG9mIGNvbmN1cnJlbnQgaW5kZXgg YnVpbGQKLSBTVElSKFNob3J0LVRlcm0gSW5kZXggUmVwbGFjZW1lbnQpIGFjY2VzcyBtZXRob2Qg aXMgaW50cm9kdWNlZCwgaW50ZW5kZWQgc29sZWx5IGZvciBzaG9ydC1saXZlZCwgYXV4aWxpYXJ5 IHVzYWdlCgpTVElSIGZ1bmN0aW9ucyBkZXNpZ25lZCBhcyBhbiBlcGhlbWVyYWwgaGVscGVyIGR1 cmluZyBjb25jdXJyZW50IGluZGV4IGJ1aWxkcywgdGVtcG9yYXJpbHkgc3RvcmluZyBUSURzIHdp dGhvdXQgcHJvdmlkaW5nIHRoZSBmdWxsIGZlYXR1cmVzIG9mIGEgdHlwaWNhbCBhY2Nlc3MgbWV0 aG9kLiBBcyBzdWNoLCBpdCByYWlzZXMgd2FybmluZ3Mgb3IgZXJyb3JzIHdoZW4gYWNjZXNzZWQg b3V0c2lkZSBpdHMgc3BlY2lhbGl6ZWQgdXNhZ2UgcGF0aC4KClBsYW5uZWQgdG8gYmUgdXNlZCBp biBmb2xsb3dpbmcgY29tbWl0cy4KLS0tCiBjb250cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxl LmMgICAgICAgIHwgICAzICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9NYWtlZmlsZSAgICAgICAgICAg ICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYyAgICAgfCAg IDIgKwogc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkICAgICAgICAgICB8ICAgMSArCiBz cmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZSAgICAgICAgIHwgIDE4ICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9zdGlyL21lc29uLmJ1aWxkICAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQvYWNj ZXNzL3N0aXIvc3Rpci5jICAgICAgICAgICB8IDU4MSArKysrKysrKysrKysrKysrKysrKysrKwog c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2FuYWx5emUuYyAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtcGFyYWxsZWwuYyAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3Mu YyAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAg ICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaCAgICAgICAgICB8 ICAgMyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaCAgICAgICAgICAgICAgICB8IDExNyAr KysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbS5kYXQgICAgICAgICAgICB8ICAgMyArCiBz cmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wY2xhc3MuZGF0ICAgICAgIHwgICA0ICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfb3BmYW1pbHkuZGF0ICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaCAgICAgICAgICAgIHwgICA3ICstCiBzcmMvaW5jbHVkZS91dGlscy9pbmRleF9zZWxm dW5jcy5oICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYW11dGlscy5v dXQgICAgfCAgIDggKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQg fCAgIDcgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgICAgICAgfCAgMjQg Ky0KIDI0IGZpbGVzIGNoYW5nZWQsIDc4NiBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL21lc29uLmJ1aWxkCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdzdGF0dHVwbGUvcGdzdGF0dHVwbGUuYyBiL2NvbnRyaWIvcGdzdGF0dHVwbGUvcGdzdGF0dHVw bGUuYwppbmRleCA2YTdmOGNiNGE3Yy4uNWI1OTg0ZTNhYTIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv cGdzdGF0dHVwbGUvcGdzdGF0dHVwbGUuYworKysgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3Rh dHR1cGxlLmMKQEAgLTI4NSw2ICsyODUsOSBAQCBwZ3N0YXRfcmVsYXRpb24oUmVsYXRpb24gcmVs LCBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJCWNhc2UgU1BHSVNUX0FNX09JRDoKIAkJCQll cnIgPSAic3BnaXN0IGluZGV4IjsKIAkJCQlicmVhazsKKwkJCWNhc2UgU1RJUl9BTV9PSUQ6CisJ CQkJZXJyID0gInN0aXIgaW5kZXgiOworCQkJCWJyZWFrOwogCQkJY2FzZSBCUklOX0FNX09JRDoK IAkJCQllcnIgPSAiYnJpbiBpbmRleCI7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvTWFrZWZpbGUKaW5kZXgg MTkzMmQxMWQxNTQuLmNkNjUyNGE1NGFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv TWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlCkBAIC05LDYgKzksNiBA QCB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLgogaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01h a2VmaWxlLmdsb2JhbAogCiBTVUJESVJTCSAgICA9IGJyaW4gY29tbW9uIGdpbiBnaXN0IGhhc2gg aGVhcCBpbmRleCBuYnRyZWUgcm1ncmRlc2Mgc3BnaXN0IFwKLQkJCSAgc2VxdWVuY2UgdGFibGUg dGFibGVzYW1wbGUgdHJhbnNhbQorCQkJICBzdGlyIHNlcXVlbmNlIHRhYmxlIHRhYmxlc2FtcGxl IHRyYW5zYW0KIAogaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IGRlYjlhM2RjMGQxLi4wYjZmZmQ2 ZWM2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMzEyMSw2ICszMTIx LDcgQEAgbGF6eV92YWN1dW1fb25lX2luZGV4KFJlbGF0aW9uIGluZHJlbCwgSW5kZXhCdWxrRGVs ZXRlUmVzdWx0ICppc3RhdCwKIAlpdmluZm8ubWVzc2FnZV9sZXZlbCA9IERFQlVHMjsKIAlpdmlu Zm8ubnVtX2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHZhY3Jl bC0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJLyoKIAkg KiBVcGRhdGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0aW9uLgpAQCAtMzE3Miw2ICszMTczLDcg QEAgbGF6eV9jbGVhbnVwX29uZV9pbmRleChSZWxhdGlvbiBpbmRyZWwsIEluZGV4QnVsa0RlbGV0 ZVJlc3VsdCAqaXN0YXQsCiAKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gcmVsdHVwbGVzOwog CWl2aW5mby5zdHJhdGVneSA9IHZhY3JlbC0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxpZGF0ZV9p bmRleCA9IGZhbHNlOwogCiAJLyoKIAkgKiBVcGRhdGUgZXJyb3IgdHJhY2ViYWNrIGluZm9ybWF0 aW9uLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkCmluZGV4IDdhMmQwZGRiNjg5Li5hMTU2Y2RkZmYzNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9tZXNvbi5idWlsZApAQCAtMTEsNiArMTEsNyBAQCBzdWJkaXIoJ25idHJlZScp CiBzdWJkaXIoJ3JtZ3JkZXNjJykKIHN1YmRpcignc2VxdWVuY2UnKQogc3ViZGlyKCdzcGdpc3Qn KQorc3ViZGlyKCdzdGlyJykKIHN1YmRpcigndGFibGUnKQogc3ViZGlyKCd0YWJsZXNhbXBsZScp CiBzdWJkaXIoJ3RyYW5zYW0nKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIv TWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmFlNTg5OGI4ZDcKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIworIyBNYWtlZmlsZS0tCisjICAgIE1ha2VmaWxlIGZvciBhY2Nlc3Mv c3RpcgorIworIyBJREVOVElGSUNBVElPTgorIyAgICBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9N YWtlZmlsZQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ViZGlyID0gc3JjL2JhY2tlbmQvYWNj ZXNzL3N0aXIKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxk ZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCisKK09CSlMgPSBcCisJc3Rpci5vCisKK2luY2x1ZGUg JCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZCBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi4zOWM2ZWNhODQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9zdGlyL21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsNSBAQAorIyBDb3B5cmln aHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2JhY2tl bmRfc291cmNlcyArPSBmaWxlcygKKwknc3Rpci5jJywKKykKXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9zdGlyLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvc3Rpci9zdGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjJlMDgzZDk1MmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3N0aXIvc3Rpci5jCkBAIC0wLDAgKzEsNTgxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBzdGlyLmMKKyAqCSAgSW1wbGVtZW50YXRpb24gb2YgU2hvcnQtVGVybSBJbmRleCBSZXBs YWNlbWVudC4KKyAqCisgKiBTVElSIGlzIGEgc3BlY2lhbGl6ZWQgYWNjZXNzIG1ldGhvZCB0eXBl IGRlc2lnbmVkIGZvciB0ZW1wb3Jhcnkgc3RvcmFnZQorICogb2YgVElEIHZhbHVlcyBkdXJpbmcg Y29uY3VyZXJudCBpbmRleCBidWlsZCBvcGVyYXRpb25zLgorICoKKyAqIFRoZSB0eXBpY2FsIGxp ZmVjeWNsZSBvZiBhIFNUSVIgaW5kZXggaXM6CisgKiAxLiBjcmVhdGVkIGFzIGFuIGF1eGlsaWFy eSBpbmRleCBmb3IgQ0lDL1JJQworICogMi4gYWNjZXB0cyBpbnNlcnRzIGZvciBhIHBlcmlvZAor ICogMy4gc3RpcmJ1bGtkZWxldGUgY2FsbGVkIGR1cmluZyBpbmRleCB2YWxpZGF0aW9uIHBoYXNl CisgKiA1LiBnZXRzIGRyb3BwZWQKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jCisgKgorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL3N0 aXIuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJhY2Nlc3MvYW12YWxpZGF0 ZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv dGFibGVhbS5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2Ftb3AuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX29wZmFtaWx5LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCisjaW5j bHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKyNpbmNsdWRlICJ1dGlscy9pbmRleF9zZWxmdW5j cy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvcmVncHJv Yy5oIgorI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCisKKy8qCisgKiBTdGlyIGhhbmRsZXIg ZnVuY3Rpb246IHJldHVybiBJbmRleEFtUm91dGluZSB3aXRoIGFjY2VzcyBtZXRob2QgcGFyYW1l dGVycworICogYW5kIGNhbGxiYWNrcy4KKyAqLworRGF0dW0KK3N0aXJoYW5kbGVyKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJSW5kZXhBbVJvdXRpbmUgKmFtcm91dGluZSA9IG1ha2VOb2RlKEluZGV4 QW1Sb3V0aW5lKTsKKworCS8qIFNldCBTVElSLXNwZWNpZmljIHN0cmF0ZWd5IGFuZCBwcm9jZWR1 cmUgbnVtYmVycyAqLworCWFtcm91dGluZS0+YW1zdHJhdGVnaWVzID0gU1RJUl9OU1RSQVRFR0lF UzsKKwlhbXJvdXRpbmUtPmFtc3VwcG9ydCA9IFNUSVJfTlBST0M7CisJYW1yb3V0aW5lLT5hbW9w dHNwcm9jbnVtID0gU1RJUl9PUFRJT05TX1BST0M7CisKKwkvKiBTVElSIGRvZXNuJ3Qgc3VwcG9y dCBtb3N0IGluZGV4IG9wZXJhdGlvbnMgKi8KKwlhbXJvdXRpbmUtPmFtY2Fub3JkZXIgPSBmYWxz ZTsKKwlhbXJvdXRpbmUtPmFtY2Fub3JkZXJieW9wID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNh bmJhY2t3YXJkID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbnVuaXF1ZSA9IGZhbHNlOworCWFt cm91dGluZS0+YW1jYW5tdWx0aWNvbCA9IHRydWU7CisJYW1yb3V0aW5lLT5hbW9wdGlvbmFsa2V5 ID0gdHJ1ZTsKKwlhbXJvdXRpbmUtPmFtc2VhcmNoYXJyYXkgPSBmYWxzZTsKKwlhbXJvdXRpbmUt PmFtc2VhcmNobnVsbHMgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtc3RvcmFnZSA9IGZhbHNlOwor CWFtcm91dGluZS0+YW1jbHVzdGVyYWJsZSA9IGZhbHNlOworCWFtcm91dGluZS0+YW1wcmVkbG9j a3MgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWwgPSBmYWxzZTsKKwlhbXJvdXRp bmUtPmFtY2FuYnVpbGRwYXJhbGxlbCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1jYW5pbmNsdWRl ID0gdHJ1ZTsKKwlhbXJvdXRpbmUtPmFtdXNlbWFpbnRlbmFuY2V3b3JrbWVtID0gZmFsc2U7CisJ YW1yb3V0aW5lLT5hbXBhcmFsbGVsdmFjdXVtb3B0aW9ucyA9CisJCQlWQUNVVU1fT1BUSU9OX1BB UkFMTEVMX0JVTEtERUwgfCBWQUNVVU1fT1BUSU9OX1BBUkFMTEVMX0NMRUFOVVA7CisJYW1yb3V0 aW5lLT5hbWtleXR5cGUgPSBJbnZhbGlkT2lkOworCisJLyogU2V0IHVwIGZ1bmN0aW9uIGNhbGxi YWNrcyAqLworCWFtcm91dGluZS0+YW1idWlsZCA9IHN0aXJidWlsZDsKKwlhbXJvdXRpbmUtPmFt YnVpbGRlbXB0eSA9IHN0aXJidWlsZGVtcHR5OworCWFtcm91dGluZS0+YW1pbnNlcnQgPSBzdGly aW5zZXJ0OworCWFtcm91dGluZS0+YW1pbnNlcnRjbGVhbnVwID0gTlVMTDsKKwlhbXJvdXRpbmUt PmFtYnVsa2RlbGV0ZSA9IHN0aXJidWxrZGVsZXRlOworCWFtcm91dGluZS0+YW12YWN1dW1jbGVh bnVwID0gc3RpcnZhY3V1bWNsZWFudXA7CisJYW1yb3V0aW5lLT5hbWNhbnJldHVybiA9IE5VTEw7 CisJYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZSA9IHN0aXJjb3N0ZXN0aW1hdGU7CisJYW1yb3V0 aW5lLT5hbW9wdGlvbnMgPSBzdGlyb3B0aW9uczsKKwlhbXJvdXRpbmUtPmFtcHJvcGVydHkgPSBO VUxMOworCWFtcm91dGluZS0+YW1idWlsZHBoYXNlbmFtZSA9IE5VTEw7CisJYW1yb3V0aW5lLT5h bXZhbGlkYXRlID0gc3RpcnZhbGlkYXRlOworCWFtcm91dGluZS0+YW1hZGp1c3RtZW1iZXJzID0g TlVMTDsKKwlhbXJvdXRpbmUtPmFtYmVnaW5zY2FuID0gc3RpcmJlZ2luc2NhbjsKKwlhbXJvdXRp bmUtPmFtcmVzY2FuID0gc3RpcnJlc2NhbjsKKwlhbXJvdXRpbmUtPmFtZ2V0dHVwbGUgPSBOVUxM OworCWFtcm91dGluZS0+YW1nZXRiaXRtYXAgPSBOVUxMOworCWFtcm91dGluZS0+YW1lbmRzY2Fu ID0gc3RpcmVuZHNjYW47CisJYW1yb3V0aW5lLT5hbW1hcmtwb3MgPSBOVUxMOworCWFtcm91dGlu ZS0+YW1yZXN0cnBvcyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWVzdGltYXRlcGFyYWxsZWxzY2Fu ID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEw7CisJYW1yb3V0 aW5lLT5hbXBhcmFsbGVscmVzY2FuID0gTlVMTDsKKworCVBHX1JFVFVSTl9QT0lOVEVSKGFtcm91 dGluZSk7Cit9CisKKy8qCisgKiBWYWxpZGF0ZXMgb3BlcmF0b3IgY2xhc3MgZm9yIFNUSVIgaW5k ZXguCisgKgorICogU1RJUiBpcyBub3QgYW4gcmVhbCBpbmRleCwgc28gdmFsaWRhdGlvIG1heSBi ZSBza2lwcGVkLgorICogQnV0IHdlIGRvIGl0IGp1c3QgZm9yIGNvbnNpc3RlbmN5LgorICovCiti b29sCitzdGlydmFsaWRhdGUoT2lkIG9wY2xhc3NvaWQpCit7CisJYm9vbCByZXN1bHQgPSB0cnVl OworCUhlYXBUdXBsZSBjbGFzc3R1cDsKKwlGb3JtX3BnX29wY2xhc3MgY2xhc3Nmb3JtOworCU9p ZCBvcGZhbWlseW9pZDsKKwlIZWFwVHVwbGUgZmFtaWx5dHVwOworCUZvcm1fcGdfb3BmYW1pbHkg ZmFtaWx5Zm9ybTsKKwljaGFyICpvcGZhbWlseW5hbWU7CisJQ2F0Q0xpc3QgKnByb2NsaXN0LAor CQkJKm9wcmxpc3Q7CisJaW50IGk7CisKKwkvKiBGZXRjaCBvcGNsYXNzIGluZm9ybWF0aW9uICov CisJY2xhc3N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKG9w Y2xhc3NvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY2xhc3N0dXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgY2xhc3MgJXUiLCBvcGNsYXNz b2lkKTsKKwljbGFzc2Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1QoY2xhc3N0dXAp OworCisJb3BmYW1pbHlvaWQgPSBjbGFzc2Zvcm0tPm9wY2ZhbWlseTsKKworCisJLyogRmV0Y2gg b3BmYW1pbHkgaW5mb3JtYXRpb24gKi8KKwlmYW1pbHl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BG QU1JTFlPSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmYW1pbHlvaWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoZmFtaWx5dHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIG9wZXJhdG9yIGZhbWlseSAldSIsIG9wZmFtaWx5b2lkKTsKKwlmYW1pbHlmb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmYW1pbHl0dXApOworCisJb3BmYW1pbHluYW1lID0g TmFtZVN0cihmYW1pbHlmb3JtLT5vcGZuYW1lKTsKKworCS8qIEZldGNoIGFsbCBvcGVyYXRvcnMg YW5kIHN1cHBvcnQgZnVuY3Rpb25zIG9mIHRoZSBvcGZhbWlseSAqLworCW9wcmxpc3QgPSBTZWFy Y2hTeXNDYWNoZUxpc3QxKEFNT1BTVFJBVEVHWSwgT2JqZWN0SWRHZXREYXR1bShvcGZhbWlseW9p ZCkpOworCXByb2NsaXN0ID0gU2VhcmNoU3lzQ2FjaGVMaXN0MShBTVBST0NOVU0sIE9iamVjdElk R2V0RGF0dW0ob3BmYW1pbHlvaWQpKTsKKworCS8qIENoZWNrIGluZGl2aWR1YWwgb3BlcmF0b3Jz ICovCisJZm9yIChpID0gMDsgaSA8IG9wcmxpc3QtPm5fbWVtYmVyczsgaSsrKQorCXsKKwkJSGVh cFR1cGxlIG9wcnR1cCA9ICZvcHJsaXN0LT5tZW1iZXJzW2ldLT50dXBsZTsKKwkJRm9ybV9wZ19h bW9wIG9wcmZvcm0gPSAoRm9ybV9wZ19hbW9wKSBHRVRTVFJVQ1Qob3BydHVwKTsKKworCQkvKiBD aGVjayBpdCdzIGFsbG93ZWQgc3RyYXRlZ3kgZm9yIHN0aXIgKi8KKwkJaWYgKG9wcmZvcm0tPmFt b3BzdHJhdGVneSA8IDEgfHwKKwkJCW9wcmZvcm0tPmFtb3BzdHJhdGVneSA+IFNUSVJfTlNUUkFU RUdJRVMpCisJCXsKKwkJCWVyZXBvcnQoSU5GTywKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX09CSkVDVF9ERUZJTklUSU9OKSwKKwkJCQkJCQllcnJtc2coInN0aXIgb3BmYW1pbHkgJXMg Y29udGFpbnMgb3BlcmF0b3IgJXMgd2l0aCBpbnZhbGlkIHN0cmF0ZWd5IG51bWJlciAlZCIsCisJ CQkJCQkJCSAgIG9wZmFtaWx5bmFtZSwKKwkJCQkJCQkJICAgZm9ybWF0X29wZXJhdG9yKG9wcmZv cm0tPmFtb3BvcHIpLAorCQkJCQkJCQkgICBvcHJmb3JtLT5hbW9wc3RyYXRlZ3kpKSk7CisJCQly ZXN1bHQgPSBmYWxzZTsKKwkJfQorCisJCS8qIHN0aXIgZG9lc24ndCBzdXBwb3J0IE9SREVSIEJZ IG9wZXJhdG9ycyAqLworCQlpZiAob3ByZm9ybS0+YW1vcHB1cnBvc2UgIT0gQU1PUF9TRUFSQ0gg fHwKKwkJCU9pZElzVmFsaWQob3ByZm9ybS0+YW1vcHNvcnRmYW1pbHkpKQorCQl7CisJCQllcmVw b3J0KElORk8sCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElP TiksCisJCQkJCQkJZXJybXNnKCJzdGlyIG9wZmFtaWx5ICVzIGNvbnRhaW5zIGludmFsaWQgT1JE RVIgQlkgc3BlY2lmaWNhdGlvbiBmb3Igb3BlcmF0b3IgJXMiLAorCQkJCQkJCQkgICBvcGZhbWls eW5hbWUsCisJCQkJCQkJCSAgIGZvcm1hdF9vcGVyYXRvcihvcHJmb3JtLT5hbW9wb3ByKSkpKTsK KwkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisKKwkJLyogQ2hlY2sgb3BlcmF0b3Igc2lnbmF0dXJl IC0tLSBzYW1lIGZvciBhbGwgc3RpciBzdHJhdGVnaWVzICovCisJCWlmICghY2hlY2tfYW1vcF9z aWduYXR1cmUob3ByZm9ybS0+YW1vcG9wciwgQk9PTE9JRCwKKwkJCQkJCQkJICBvcHJmb3JtLT5h bW9wbGVmdHR5cGUsCisJCQkJCQkJCSAgb3ByZm9ybS0+YW1vcHJpZ2h0dHlwZSkpCisJCXsKKwkJ CWVyZXBvcnQoSU5GTywKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJ TklUSU9OKSwKKwkJCQkJCQllcnJtc2coInN0aXIgb3BmYW1pbHkgJXMgY29udGFpbnMgb3BlcmF0 b3IgJXMgd2l0aCB3cm9uZyBzaWduYXR1cmUiLAorCQkJCQkJCQkgICBvcGZhbWlseW5hbWUsCisJ CQkJCQkJCSAgIGZvcm1hdF9vcGVyYXRvcihvcHJmb3JtLT5hbW9wb3ByKSkpKTsKKwkJCXJlc3Vs dCA9IGZhbHNlOworCQl9CisJfQorCisKKwlSZWxlYXNlQ2F0Q2FjaGVMaXN0KHByb2NsaXN0KTsK KwlSZWxlYXNlQ2F0Q2FjaGVMaXN0KG9wcmxpc3QpOworCVJlbGVhc2VTeXNDYWNoZShmYW1pbHl0 dXApOworCVJlbGVhc2VTeXNDYWNoZShjbGFzc3R1cCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisKKy8qCisgKiBJbml0aWFsaXplIG1ldGFwYWdlIG9mIGEgU1RJUiBpbmRleC4KKyAqIFRoZSBz a2lwSW5zZXJ0cyBmbGFnIGRldGVybWluZXMgaWYgbmV3IGluc2VydHMgd2lsbCBiZSBhY2NlcHRl ZCBvciBza2lwcGVkLgorICovCit2b2lkCitTdGlyRmlsbE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4 LCBQYWdlIG1ldGFQYWdlLCBib29sIHNraXBJbnNlcnRzKQoreworCVN0aXJNZXRhUGFnZURhdGEg Km1ldGFkYXRhOworCisJU3RpckluaXRQYWdlKG1ldGFQYWdlLCBTVElSX01FVEEpOworCW1ldGFk YXRhID0gU3RpclBhZ2VHZXRNZXRhKG1ldGFQYWdlKTsKKwltZW1zZXQobWV0YWRhdGEsIDAsIHNp emVvZihTdGlyTWV0YVBhZ2VEYXRhKSk7CisJbWV0YWRhdGEtPm1hZ2lja051bWJlciA9IFNUSVJf TUFHSUNLX05VTUJFUjsKKwltZXRhZGF0YS0+c2tpcEluc2VydHMgPSBza2lwSW5zZXJ0czsKKwko KFBhZ2VIZWFkZXIpIG1ldGFQYWdlKS0+cGRfbG93ZXIgKz0gc2l6ZW9mKFN0aXJNZXRhUGFnZURh dGEpOworfQorCisvKgorICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBtZXRhcGFnZSBmb3Ig YSBTVElSIGluZGV4LgorICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGluZGV4IGNyZWF0aW9uLgor ICovCit2b2lkCitTdGlySW5pdE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4LCBGb3JrTnVtYmVyIGZv cmtudW0pCit7CisJQnVmZmVyIG1ldGFCdWZmZXI7CisJUGFnZSBtZXRhUGFnZTsKKworCUFzc2Vy dCghUmVsYXRpb25OZWVkc1dBTChpbmRleCkpOworCS8qCisJICogTWFrZSBhIG5ldyBwYWdlOyBz aW5jZSBpdCBpcyBmaXJzdCBwYWdlIGl0IHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGgKKwkgKiBi bG9jayBudW1iZXIgMCAoU1RJUl9NRVRBUEFHRV9CTEtOTykuICBObyBuZWVkIHRvIGhvbGQgdGhl IGV4dGVuc2lvbgorCSAqIGxvY2sgYmVjYXVzZSB0aGVyZSBjYW5ub3QgYmUgY29uY3VycmVudCBp bnNlcnRlcnMgeWV0LgorCSAqLworCW1ldGFCdWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoaW5k ZXgsIGZvcmtudW0sIFBfTkVXLCBSQk1fTk9STUFMLCBOVUxMKTsKKwlTVEFSVF9DUklUX1NFQ1RJ T04oKTsKKwlMb2NrQnVmZmVyKG1ldGFCdWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisJ QXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKG1ldGFCdWZmZXIpID09IFNUSVJfTUVUQVBBR0Vf QkxLTk8pOworCisJbWV0YVBhZ2UgPSAgQnVmZmVyR2V0UGFnZShtZXRhQnVmZmVyKTsKKwlTdGly RmlsbE1ldGFwYWdlKGluZGV4LCBtZXRhUGFnZSwgZm9ya251bSA9PSBJTklUX0ZPUktOVU0pOwor CisJTWFya0J1ZmZlckRpcnR5KG1ldGFCdWZmZXIpOworCUVORF9DUklUX1NFQ1RJT04oKTsKKwlV bmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBh bnkgcGFnZSBvZiBhIHN0aXIgaW5kZXguCisgKi8KK3ZvaWQKK1N0aXJJbml0UGFnZShQYWdlIHBh Z2UsIHVpbnQxNiBmbGFncykKK3sKKwlTdGlyUGFnZU9wYXF1ZSBvcGFxdWU7CisKKwlQYWdlSW5p dChwYWdlLCBCTENLU1osIHNpemVvZihTdGlyUGFnZU9wYXF1ZURhdGEpKTsKKworCW9wYXF1ZSA9 IFN0aXJQYWdlR2V0T3BhcXVlKHBhZ2UpOworCW9wYXF1ZS0+ZmxhZ3MgPSBmbGFnczsKKwlvcGFx dWUtPnN0aXJfcGFnZV9pZCA9IFNUSVJfUEFHRV9JRDsKK30KKworLyoKKyAqIEFkZCBhIHR1cGxl IHRvIGEgU1RJUiBwYWdlLiBSZXR1cm5zIGZhbHNlIGlmIHR1cGxlIGRvZXNuJ3QgZml0LgorICog VGhlIHR1cGxlIGlzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHBhZ2UuCisgKi8KK3N0YXRpYyBi b29sCitTdGlyUGFnZUFkZEl0ZW0oUGFnZSBwYWdlLCBTdGlyVHVwbGUgKnR1cGxlKQoreworCVN0 aXJUdXBsZSAqaXR1cDsKKwlTdGlyUGFnZU9wYXF1ZSBvcGFxdWU7CisJUG9pbnRlciBwdHI7CisK KwkvKiBXZSBzaG91bGRuJ3QgYmUgcG9pbnRlZCB0byBhbiBpbnZhbGlkIHBhZ2UgKi8KKwlBc3Nl cnQoIVBhZ2VJc05ldyhwYWdlKSk7CisKKwkvKiBEb2VzIG5ldyB0dXBsZSBmaXQgb24gdGhlIHBh Z2U/ICovCisJaWYgKFN0aXJQYWdlR2V0RnJlZVNwYWNlKHN0YXRlLCBwYWdlKSA8IHNpemVvZihT dGlyVHVwbGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDb3B5IG5ldyB0dXBsZSB0byB0aGUg ZW5kIG9mIHBhZ2UgKi8KKwlvcGFxdWUgPSBTdGlyUGFnZUdldE9wYXF1ZShwYWdlKTsKKwlpdHVw ID0gU3RpclBhZ2VHZXRUdXBsZShwYWdlLCBvcGFxdWUtPm1heG9mZiArIDEpOworCW1lbWNweSgo UG9pbnRlcikgaXR1cCwgKFBvaW50ZXIpIHR1cGxlLCBzaXplb2YoU3RpclR1cGxlKSk7CisKKwkv KiBBZGp1c3QgbWF4b2ZmIGFuZCBwZF9sb3dlciAqLworCW9wYXF1ZS0+bWF4b2ZmKys7CisJcHRy ID0gKFBvaW50ZXIpIFN0aXJQYWdlR2V0VHVwbGUocGFnZSwgb3BhcXVlLT5tYXhvZmYgKyAxKTsK KwkoKFBhZ2VIZWFkZXIpIHBhZ2UpLT5wZF9sb3dlciA9IHB0ciAtIHBhZ2U7CisKKwkvKiBBc3Nl cnQgd2UgZGlkbid0IG92ZXJydW4gYXZhaWxhYmxlIHNwYWNlICovCisJQXNzZXJ0KCgoUGFnZUhl YWRlcikgcGFnZSktPnBkX2xvd2VyIDw9ICgoUGFnZUhlYWRlcikgcGFnZSktPnBkX3VwcGVyKTsK KwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEluc2VydCBhIG5ldyB0dXBsZSBpbnRvIGEgU1RJ UiBpbmRleC4KKyAqLworYm9vbAorc3Rpcmluc2VydChSZWxhdGlvbiBpbmRleCwgRGF0dW0gKnZh bHVlcywgYm9vbCAqaXNudWxsLAorCQkgIEl0ZW1Qb2ludGVyIGh0X2N0aWQsIFJlbGF0aW9uIGhl YXBSZWwsCisJCSAgSW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKKwkJICBib29sIGluZGV4 VW5jaGFuZ2VkLAorCQkgIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbykKK3sKKwlTdGlyVHVw bGUgKml0dXA7CisJTWVtb3J5Q29udGV4dCBvbGRDdHg7CisJTWVtb3J5Q29udGV4dCBpbnNlcnRD dHg7CisJU3Rpck1ldGFQYWdlRGF0YSAqbWV0YURhdGE7CisJQnVmZmVyIGJ1ZmZlciwKKwkJCW1l dGFCdWZmZXI7CisJUGFnZSBwYWdlOworCXVpbnQxNiBibGtObzsKKworCS8qIENyZWF0ZSB0ZW1w b3JhcnkgY29udGV4dCBmb3IgaW5zZXJ0IG9wZXJhdGlvbiAqLworCWluc2VydEN0eCA9IEFsbG9j U2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSAgIlN0aXIg aW5zZXJ0IHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9T SVpFUyk7CisKKwlvbGRDdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaW5zZXJ0Q3R4KTsKKwor CS8qIENyZWF0ZSBuZXcgdHVwbGUgd2l0aCBoZWFwIHBvaW50ZXIgKi8KKwlpdHVwID0gKFN0aXJU dXBsZSAqKSBwYWxsb2MwKHNpemVvZihTdGlyVHVwbGUpKTsKKwlpdHVwLT5oZWFwUHRyID0gKmh0 X2N0aWQ7CisKKwlBc3NlcnQoIVJlbGF0aW9uTmVlZHNXQUwoaW5kZXgpKTsKKwltZXRhQnVmZmVy ID0gUmVhZEJ1ZmZlcihpbmRleCwgU1RJUl9NRVRBUEFHRV9CTEtOTyk7CisKKwlmb3IgKDs7KQor CXsKKwkJTG9ja0J1ZmZlcihtZXRhQnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCW1ldGFE YXRhID0gU3RpclBhZ2VHZXRNZXRhKEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcikpOworCQkvKiBD aGVjayBpZiBpbnNlcnRzIGFyZSBhbGxvd2VkICovCisJCWlmIChtZXRhRGF0YS0+c2tpcEluc2Vy dHMpCisJCXsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YUJ1ZmZlcik7CisJCQlyZXR1cm4g ZmFsc2U7CisJCX0KKwkJYmxrTm8gPSBtZXRhRGF0YS0+bGFzdEJsa05vOworCQkvKiBEb24ndCBo b2xkIG1ldGFidWZmZXIgbG9jayB3aGlsZSBkb2luZyBpbnNlcnQgKi8KKwkJTG9ja0J1ZmZlciht ZXRhQnVmZmVyLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCisJCWlmIChibGtObyA+IDApCisJCXsK KwkJCWJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgsIGJsa05vKTsKKwkJCUxvY2tCdWZmZXIoYnVm ZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQkJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CisK KwkJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisKKwkJCUFzc2VydCghUGFnZUlzTmV3 KHBhZ2UpKTsKKworCQkJLyogVHJ5IHRvIGFkZCB0dXBsZSB0byBleGlzdGluZyBwYWdlICovCisJ CQlpZiAoU3RpclBhZ2VBZGRJdGVtKHBhZ2UsIGl0dXApKQorCQkJeworCQkJCS8qIFN1Y2Nlc3Mh ICBBcHBseSB0aGUgY2hhbmdlLCBjbGVhbiB1cCwgYW5kIGV4aXQgKi8KKwkJCQlNYXJrQnVmZmVy RGlydHkoYnVmZmVyKTsKKwkJCQlFTkRfQ1JJVF9TRUNUSU9OKCk7CisKKwkJCQlVbmxvY2tSZWxl YXNlQnVmZmVyKGJ1ZmZlcik7CisJCQkJUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKKwkJCQlN ZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3R4KTsKKwkJCQlNZW1vcnlDb250ZXh0RGVsZXRlKGlu c2VydEN0eCk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCisJCQlFTkRfQ1JJVF9TRUNUSU9O KCk7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCX0KKworCQkvKiBOZWVkIHRv IGFkZCBuZXcgcGFnZSAtIGdldCBleGNsdXNpdmUgbG9jayBvbiBtZXRhIHBhZ2UgKi8KKwkJTG9j a0J1ZmZlcihtZXRhQnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCisJCW1ldGFEYXRh ID0gU3RpclBhZ2VHZXRNZXRhKEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcikpOworCQkvKiBDaGVj ayBpZiBhbm90aGVyIGJhY2tlbmQgYWxyZWFkeSBleHRlbmRlZCB0aGUgaW5kZXggKi8KKworCQlp ZiAoYmxrTm8gIT0gbWV0YURhdGEtPmxhc3RCbGtObykKKwkJeworCQkJQXNzZXJ0KGJsa05vIDwg bWV0YURhdGEtPmxhc3RCbGtObyk7CisJCQkvKiBTb21lb25lIGVsc2UgaW5zZXJ0ZWQgdGhlIG5l dyBwYWdlIGludG8gdGhlIGluZGV4LCBsZXRzIHRyeSBhZ2FpbiAqLworCQkJTG9ja0J1ZmZlciht ZXRhQnVmZmVyLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJY29udGludWU7CisJCX0KKwkJZWxz ZQorCQl7CisJCQkvKiBNdXN0IGV4dGVuZCB0aGUgZmlsZSAqLworCQkJYnVmZmVyID0gRXh0ZW5k QnVmZmVyZWRSZWwoQk1SX1JFTChpbmRleCksIE1BSU5fRk9SS05VTSwgTlVMTCwKKwkJCQkJCQkJ CSAgIEVCX0xPQ0tfRklSU1QpOworCQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsKKwkJ CVNUQVJUX0NSSVRfU0VDVElPTigpOworCisJCQlTdGlySW5pdFBhZ2UocGFnZSwgMCk7CisKKwkJ CWlmICghU3RpclBhZ2VBZGRJdGVtKHBhZ2UsIGl0dXApKQorCQkJeworCQkJCS8qIFdlIHNob3Vs ZG4ndCBiZSBoZXJlIHNpbmNlIHdlJ3JlIGluc2VydGluZyB0byBhbiBlbXB0eSBwYWdlICovCisJ CQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBhZGQgbmV3IHN0aXIgdHVwbGUgdG8gZW1wdHkgcGFn ZSIpOworCQkJfQorCisJCQkvKiBVcGRhdGUgbWV0YSBwYWdlIHdpdGggbmV3IGxhc3QgYmxvY2sg bnVtYmVyICovCisJCQltZXRhRGF0YS0+bGFzdEJsa05vID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmZmVyKTsKKworCQkJTWFya0J1ZmZlckRpcnR5KG1ldGFCdWZmZXIpOworCQkJTWFya0J1ZmZl ckRpcnR5KGJ1ZmZlcik7CisKKwkJCUVORF9DUklUX1NFQ1RJT04oKTsKKworCQkJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihidWZmZXIpOworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsK KworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZEN0eCk7CisJCQlNZW1vcnlDb250ZXh0RGVs ZXRlKGluc2VydEN0eCk7CisKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KK30KKworLyoKKyAq IFNUSVIgZG9lc24ndCBzdXBwb3J0IHNjYW5zIC0gdGhlc2UgZnVuY3Rpb25zIGFsbCBlcnJvciBv dXQKKyAqLworSW5kZXhTY2FuRGVzYworc3RpcmJlZ2luc2NhbihSZWxhdGlvbiByLCBpbnQgbmtl eXMsIGludCBub3JkZXJieXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgYSBub3QgaW1wbGVt ZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KKwordm9pZAorc3RpcnJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKKwkJICBTY2FuS2V5IG9yZGVy YnlzLCBpbnQgbm9yZGVyYnlzKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgbm90IGltcGxl bWVudGVkIiwgX19mdW5jX18pKSk7Cit9CisKK3ZvaWQgc3RpcmVuZHNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgbm90IGltcGxlbWVudGVkIiwgX19m dW5jX18pKSk7Cit9CisKKy8qCisgKiBCdWlsZCBhIFNUSVIgaW5kZXggLSBvbmx5IGFsbG93ZWQg Zm9yIGF1eGlsaWFyeSBpbmRleGVzLgorICogSnVzdCBpbml0aWFsaXplcyB0aGUgbWV0YSBwYWdl IHdpdGhvdXQgYW55IGhlYXAgc2NhbnMuCisgKi8KK0luZGV4QnVpbGRSZXN1bHQgKgorc3RpcmJ1 aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4LAorCQkJCQkJICAgc3RydWN0IEluZGV4 SW5mbyAqaW5kZXhJbmZvKQoreworCUluZGV4QnVpbGRSZXN1bHQgKnJlc3VsdDsKKworCWlmICgh aW5kZXhJbmZvLT5paV9BdXhpbGlhcnkpCisJCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwgZXJybXNnKCJTVElSIGluZGV4ZXMgYXJlIG5vdCBz dXBwb3J0ZWQgdG8gYmUgYnVpbHQiKSkpOworCisJU3RpckluaXRNZXRhcGFnZShpbmRleCwgTUFJ Tl9GT1JLTlVNKTsKKworCXJlc3VsdCA9IChJbmRleEJ1aWxkUmVzdWx0ICopIHBhbGxvYyhzaXpl b2YoSW5kZXhCdWlsZFJlc3VsdCkpOworCXJlc3VsdC0+aGVhcF90dXBsZXMgPSAwOworCXJlc3Vs dC0+aW5kZXhfdHVwbGVzID0gMDsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHN0aXJidWls ZGVtcHR5KFJlbGF0aW9uIGluZGV4KQoreworCVN0aXJJbml0TWV0YXBhZ2UoaW5kZXgsIElOSVRf Rk9SS05VTSk7Cit9CisKK0luZGV4QnVsa0RlbGV0ZVJlc3VsdCAqCitzdGlyYnVsa2RlbGV0ZShJ bmRleFZhY3V1bUluZm8gKmluZm8sCisJCQkJCQkJCQkgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpz dGF0cywKKwkJCQkJCQkJCSBJbmRleEJ1bGtEZWxldGVDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJ CQkJCSB2b2lkICpjYWxsYmFja19zdGF0ZSkKK3sKKwlSZWxhdGlvbiBpbmRleCA9IGluZm8tPmlu ZGV4OworCUJsb2NrTnVtYmVyIGJsa25vLCBucGFnZXM7CisJQnVmZmVyIGJ1ZmZlcjsKKwlQYWdl IHBhZ2U7CisKKwkvKiBGb3Igbm9ybWFsIFZBQ1VVTSwgbWFyayB0byBza2lwIGluc2VydHMgYW5k IHdhcm4gYWJvdXQgaW5kZXggZHJvcCBuZWVkZWQgKi8KKwlpZiAoIWluZm8tPnZhbGlkYXRlX2lu ZGV4KQorCXsKKwkJU3Rpck1hcmtBc1NraXBJbnNlcnRzKGluZGV4KTsKKworCQllcmVwb3J0KFdB Uk5JTkcsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJt c2coIlwiJXNcIiBpcyBub3QgYSBub3QgaW1wbGVtZW50ZWQsIHNlZW1zIGxpa2UgdGhpcyBpbmRl eCBuZWVkIHRvIGJlIGRyb3BwZWQiLCBfX2Z1bmNfXykpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJaWYgKHN0YXRzID09IE5VTEwpCisJCXN0YXRzID0gKEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAq KSBwYWxsb2MwKHNpemVvZihJbmRleEJ1bGtEZWxldGVSZXN1bHQpKTsKKworCS8qCisJICogSXRl cmF0ZSBvdmVyIHRoZSBwYWdlcy4gV2UgZG9uJ3QgY2FyZSBhYm91dCBjb25jdXJyZW50bHkgYWRk ZWQgcGFnZXMsCisJICogYmVjYXVzZSBpbmRleCBpcyBtYXJrZWQgYXMgbm90LXJlYWR5IGZvciB0 aGF0IG1vbW1lbnQgYW5kIGluZGV4IG5vdAorCSAqIHVzZWQgZm9yIGluc2VydC4KKwkgKi8KKwlu cGFnZXMgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKGluZGV4KTsKKwlmb3IgKGJsa25vID0g U1RJUl9IRUFEX0JMS05POyBibGtubyA8IG5wYWdlczsgYmxrbm8rKykKKwl7CisJCVN0aXJUdXBs ZSAqaXR1cCwgKml0dXBFbmQ7CisKKwkJdmFjdXVtX2RlbGF5X3BvaW50KGZhbHNlKTsKKworCQli dWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoaW5kZXgsIE1BSU5fRk9SS05VTSwgYmxrbm8sCisJ CQkJCQkJCQlSQk1fTk9STUFMLCBpbmZvLT5zdHJhdGVneSk7CisKKwkJTG9ja0J1ZmZlcihidWZm ZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVyKTsK KworCQlpZiAoUGFnZUlzTmV3KHBhZ2UpKQorCQl7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1 ZmZlcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWl0dXAgPSBTdGlyUGFnZUdldFR1cGxlKHBh Z2UsIEZpcnN0T2Zmc2V0TnVtYmVyKTsKKwkJaXR1cEVuZCA9IFN0aXJQYWdlR2V0VHVwbGUocGFn ZSwgT2Zmc2V0TnVtYmVyTmV4dChTdGlyUGFnZUdldE1heE9mZnNldChwYWdlKSkpOworCQl3aGls ZSAoaXR1cCA8IGl0dXBFbmQpCisJCXsKKwkJCS8qIERvIHdlIGhhdmUgdG8gZGVsZXRlIHRoaXMg dHVwbGU/ICovCisJCQlpZiAoY2FsbGJhY2soJml0dXAtPmhlYXBQdHIsIGNhbGxiYWNrX3N0YXRl KSkKKwkJCXsKKwkJCQllcmVwb3J0KEVSUk9SLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksIGVycm1zZygid2UgbmV2ZXIgZGVsZXRlIGluIHN0aXIiKSkpOworCQkJfQor CisJCQlpdHVwID0gU3RpclBhZ2VHZXROZXh0VHVwbGUoaXR1cCk7CisJCX0KKworCQlVbmxvY2tS ZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHN0YXRzOworfQorCisvKgorICog TWFyayBhIFNUSVIgaW5kZXggdG8gc2tpcCBmdXR1cmUgaW5zZXJ0cworICovCit2b2lkCitTdGly TWFya0FzU2tpcEluc2VydHMoUmVsYXRpb24gaW5kZXgpCit7CisJU3Rpck1ldGFQYWdlRGF0YSAq bWV0YURhdGE7CisJQnVmZmVyIG1ldGFCdWZmZXI7CisJUGFnZSBtZXRhUGFnZTsKKworCUFzc2Vy dCghUmVsYXRpb25OZWVkc1dBTChpbmRleCkpOworCW1ldGFCdWZmZXIgPSBSZWFkQnVmZmVyKGlu ZGV4LCBTVElSX01FVEFQQUdFX0JMS05PKTsKKwlMb2NrQnVmZmVyKG1ldGFCdWZmZXIsIEJVRkZF Ul9MT0NLX0VYQ0xVU0lWRSk7CisJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CisKKwltZXRhUGFnZSA9 IEJ1ZmZlckdldFBhZ2UobWV0YUJ1ZmZlcik7CisJbWV0YURhdGEgPSBTdGlyUGFnZUdldE1ldGEo bWV0YVBhZ2UpOworCisJaWYgKCFtZXRhRGF0YS0+c2tpcEluc2VydHMpCisJeworCQltZXRhRGF0 YS0+c2tpcEluc2VydHMgPSB0cnVlOworCQlNYXJrQnVmZmVyRGlydHkobWV0YUJ1ZmZlcik7CisJ fQorCUVORF9DUklUX1NFQ1RJT04oKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFCdWZmZXIp OworfQorCitJbmRleEJ1bGtEZWxldGVSZXN1bHQgKgorc3RpcnZhY3V1bWNsZWFudXAoSW5kZXhW YWN1dW1JbmZvICppbmZvLAorCQkJCQkJCQkJCUluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMp Cit7CisJU3Rpck1hcmtBc1NraXBJbnNlcnRzKGluZm8tPmluZGV4KTsKKwllcmVwb3J0KFdBUk5J TkcsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCWVycm1zZygi XCIlc1wiIGlzIG5vdCBhIG5vdCBpbXBsZW1lbnRlZCwgc2VlbXMgbGlrZSB0aGlzIGluZGV4IG5l ZWQgdG8gYmUgZHJvcHBlZCIsIF9fZnVuY19fKSkpOworCXJldHVybiBOVUxMOworfQorCitieXRl YSAqCitzdGlyb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlkYXRlKQoreworCXJl dHVybiBOVUxMOworfQorCit2b2lkCitzdGlyY29zdGVzdGltYXRlKFBsYW5uZXJJbmZvICpyb290 LCBJbmRleFBhdGggKnBhdGgsCisJCQkJCSBkb3VibGUgbG9vcF9jb3VudCwgQ29zdCAqaW5kZXhT dGFydHVwQ29zdCwKKwkJCQkJIENvc3QgKmluZGV4VG90YWxDb3N0LCBTZWxlY3Rpdml0eSAqaW5k ZXhTZWxlY3Rpdml0eSwKKwkJCQkJIGRvdWJsZSAqaW5kZXhDb3JyZWxhdGlvbiwgZG91YmxlICpp bmRleFBhZ2VzKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgbm90IGltcGxlbWVudGVkIiwg X19mdW5jX18pKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNWQ5ZGIxNjdlNTkuLjhlNTA5YTUx YzExIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0zNDExLDYgKzM0MTEsNyBAQCB2YWxpZGF0ZV9pbmRl eChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpCiAJaXZpbmZvLm1l c3NhZ2VfbGV2ZWwgPSBERUJVRzI7CiAJaXZpbmZvLm51bV9oZWFwX3R1cGxlcyA9IGhlYXBSZWxh dGlvbi0+cmRfcmVsLT5yZWx0dXBsZXM7CiAJaXZpbmZvLnN0cmF0ZWd5ID0gTlVMTDsKKwlpdmlu Zm8udmFsaWRhdGVfaW5kZXggPSB0cnVlOwogCiAJLyoKIAkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4 IHZhbHVlcyBmb3IgdGhlIHNvcnQsIHJhdGhlciB0aGFuIGRpcmVjdGx5IHNvcnRpbmcKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvdG9hc3RpbmcuYwppbmRleCA4NzRhOGZjODlhZC4uOWNjNGYwNmRhOWYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3RvYXN0aW5nLmMKQEAgLTMwNyw2ICszMDcsNyBAQCBjcmVhdGVfdG9hc3RfdGFibGUoUmVsYXRp b24gcmVsLCBPaWQgdG9hc3RPaWQsIE9pZCB0b2FzdEluZGV4T2lkLAogCWluZGV4SW5mby0+aWlf UGFyYWxsZWxXb3JrZXJzID0gMDsKIAlpbmRleEluZm8tPmlpX0FtID0gQlRSRUVfQU1fT0lEOwog CWluZGV4SW5mby0+aWlfQW1DYWNoZSA9IE5VTEw7CisJaW5kZXhJbmZvLT5paV9BdXhpbGlhcnkg PSBmYWxzZTsKIAlpbmRleEluZm8tPmlpX0NvbnRleHQgPSBDdXJyZW50TWVtb3J5Q29udGV4dDsK IAogCWNvbGxhdGlvbklkc1swXSA9IEludmFsaWRPaWQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hbmFseXplLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKaW5k ZXggMjUwODlmYWUzZTAuLjg5NzIxNjA3ZjFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9hbmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCkBAIC03 MTksNiArNzE5LDcgQEAgZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBjb25zdCBWYWN1 dW1QYXJhbXMgcGFyYW1zLAogCQkJaXZpbmZvLm1lc3NhZ2VfbGV2ZWwgPSBlbGV2ZWw7CiAJCQlp dmluZm8ubnVtX2hlYXBfdHVwbGVzID0gb25lcmVsLT5yZF9yZWwtPnJlbHR1cGxlczsKIAkJCWl2 aW5mby5zdHJhdGVneSA9IHZhY19zdHJhdGVneTsKKwkJCWl2aW5mby52YWxpZGF0ZV9pbmRleCA9 IGZhbHNlOwogCiAJCQlzdGF0cyA9IGluZGV4X3ZhY3V1bV9jbGVhbnVwKCZpdmluZm8sIE5VTEwp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1wYXJhbGxlbC5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwppbmRleCAwZmVlYTFkMzBlYy4u NTgyZGI3N2RkYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFs bGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwpAQCAtODg0 LDYgKzg4NCw3IEBAIHBhcmFsbGVsX3ZhY3V1bV9wcm9jZXNzX29uZV9pbmRleChQYXJhbGxlbFZh Y3V1bVN0YXRlICpwdnMsIFJlbGF0aW9uIGluZHJlbCwKIAlpdmluZm8uZXN0aW1hdGVkX2NvdW50 ID0gcHZzLT5zaGFyZWQtPmVzdGltYXRlZF9jb3VudDsKIAlpdmluZm8ubnVtX2hlYXBfdHVwbGVz ID0gcHZzLT5zaGFyZWQtPnJlbHR1cGxlczsKIAlpdmluZm8uc3RyYXRlZ3kgPSBwdnMtPmJzdHJh dGVneTsKKwlpdmluZm8udmFsaWRhdGVfaW5kZXggPSBmYWxzZTsKIAogCS8qIFVwZGF0ZSBlcnJv ciB0cmFjZWJhY2sgaW5mb3JtYXRpb24gKi8KIAlwdnMtPmluZG5hbWUgPSBwc3RyZHVwKFJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKGluZHJlbCkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9k ZXMvbWFrZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYwppbmRleCBlMmQ5 ZTliZTQxYS4uZTk3ZTA5NDNmNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL21ha2Vm dW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCkBAIC04NzUsNiArODc1 LDcgQEAgbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFt b2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkvKiBpbml0aWFsaXplIGluZGV4LWJ1aWxkIHN0YXRl IHRvIGRlZmF1bHQgKi8KIAluLT5paV9Ccm9rZW5Ib3RDaGFpbiA9IGZhbHNlOwogCW4tPmlpX1Bh cmFsbGVsV29ya2VycyA9IDA7CisJbi0+aWlfQXV4aWxpYXJ5ID0gZmFsc2U7CiAKIAkvKiBzZXQg dXAgZm9yIHBvc3NpYmxlIHVzZSBieSBpbmRleCBBTSAqLwogCW4tPmlpX0FtID0gYW1vaWQ7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9nZW5hbS5oCmluZGV4IDkyMDBhMjJiZDlmLi40MzFhMmZhZTRhZCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgK QEAgLTc3LDYgKzc3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhWYWN1dW1JbmZvCiAJYm9vbAkJ ZXN0aW1hdGVkX2NvdW50OwkvKiBudW1faGVhcF90dXBsZXMgaXMgYW4gZXN0aW1hdGUgKi8KIAlp bnQJCQltZXNzYWdlX2xldmVsOwkvKiBlcmVwb3J0IGxldmVsIGZvciBwcm9ncmVzcyBtZXNzYWdl cyAqLwogCWRvdWJsZQkJbnVtX2hlYXBfdHVwbGVzOwkvKiB0dXBsZXMgcmVtYWluaW5nIGluIGhl YXAgKi8KKwlib29sCQl2YWxpZGF0ZV9pbmRleDsgLyogdmFsaWRhdGluZyBjb25jdXJyZW50bHkg YnVpbHQgaW5kZXg/ICovCiAJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3k7CS8qIGFjY2Vz cyBzdHJhdGVneSBmb3IgcmVhZHMgKi8KIH0gSW5kZXhWYWN1dW1JbmZvOwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsb3B0aW9ucy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bG9wdGlvbnMuaAppbmRleCBhNjA0YTQ3MDJjMy4uMzEyNzczMWY5YzYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bG9wdGlvbnMuaApAQCAtNTEsOCArNTEsOSBAQCB0eXBlZGVmIGVudW0gcmVsb3B0X2tpbmQKIAlS RUxPUFRfS0lORF9WSUVXID0gKDEgPDwgOSksCiAJUkVMT1BUX0tJTkRfQlJJTiA9ICgxIDw8IDEw KSwKIAlSRUxPUFRfS0lORF9QQVJUSVRJT05FRCA9ICgxIDw8IDExKSwKKwlSRUxPUFRfS0lORF9T VElSID0gKDEgPDwgMTIpLAogCS8qIGlmIHlvdSBhZGQgYSBuZXcga2luZCwgbWFrZSBzdXJlIHlv dSB1cGRhdGUgImxhc3RfZGVmYXVsdCIgdG9vICovCi0JUkVMT1BUX0tJTkRfTEFTVF9ERUZBVUxU ID0gUkVMT1BUX0tJTkRfUEFSVElUSU9ORUQsCisJUkVMT1BUX0tJTkRfTEFTVF9ERUZBVUxUID0g UkVMT1BUX0tJTkRfU1RJUiwKIAkvKiBzb21lIGNvbXBpbGVycyB0cmVhdCBlbnVtcyBhcyBzaWdu ZWQgaW50cywgc28gd2UgY2FuJ3QgdXNlIDEgPDwgMzEgKi8KIAlSRUxPUFRfS0lORF9NQVggPSAo MSA8PCAzMCkKIH0gcmVsb3B0X2tpbmQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv c3Rpci5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3N0aXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uOTk0M2M0MmE5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3Mvc3Rpci5oCkBAIC0wLDAgKzEsMTE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBzdGlyLmgKKyAqCSAgaGVhZGVyIGZpbGUgZm9yIHBvc3RncmVzIHN0aXIgYWNjZXNz IG1ldGhvZCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9p bmNsdWRlL2FjY2Vzcy9zdGlyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRl ZiBfU1RJUl9IXworI2RlZmluZSBfU1RJUl9IXworCisjaW5jbHVkZSAiYW1hcGkuaCIKKyNpbmNs dWRlICJ4bG9nLmgiCisjaW5jbHVkZSAiZ2VuZXJpY194bG9nLmgiCisjaW5jbHVkZSAiaXR1cC5o IgorI2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKworLyog U3VwcG9ydCBwcm9jZWR1cmVzIG51bWJlcnMgKi8KKyNkZWZpbmUgU1RJUl9OUFJPQwkJCQkwCisK Ky8qIFNjYW4gc3RyYXRlZ2llcyAqLworI2RlZmluZSBTVElSX05TVFJBVEVHSUVTCQkxCisKKyNk ZWZpbmUgU1RJUl9PUFRJT05TX1BST0MJCQkJMAorCisvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBz dGlyIHBhZ2Ugc3RydWN0dXJlcyAqLworI2RlZmluZSBTdGlyUGFnZUdldE9wYXF1ZShwYWdlKSAo KFN0aXJQYWdlT3BhcXVlKSBQYWdlR2V0U3BlY2lhbFBvaW50ZXIocGFnZSkpCisjZGVmaW5lIFN0 aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpIChTdGlyUGFnZUdldE9wYXF1ZShwYWdlKS0+bWF4b2Zm KQorI2RlZmluZSBTdGlyUGFnZUlzTWV0YShwYWdlKSBcCisJKChTdGlyUGFnZUdldE9wYXF1ZShw YWdlKS0+ZmxhZ3MgJiBTVElSX01FVEEpICE9IDApCisjZGVmaW5lIFN0aXJQYWdlR2V0RGF0YShw YWdlKQkJKChTdGlyVHVwbGUgKilQYWdlR2V0Q29udGVudHMocGFnZSkpCisjZGVmaW5lIFN0aXJQ YWdlR2V0VHVwbGUocGFnZSwgb2Zmc2V0KSBcCisJKChTdGlyVHVwbGUgKikoUGFnZUdldENvbnRl bnRzKHBhZ2UpIFwKKwkJKyBzaXplb2YoU3RpclR1cGxlKSAqICgob2Zmc2V0KSAtIDEpKSkKKyNk ZWZpbmUgU3RpclBhZ2VHZXROZXh0VHVwbGUodHVwbGUpIFwKKwkoKFN0aXJUdXBsZSAqKSgoUG9p bnRlcikodHVwbGUpICsgc2l6ZW9mKFN0aXJUdXBsZSkpKQorCisKKworLyogUHJlc2VydmVkIHBh Z2UgbnVtYmVycyAqLworI2RlZmluZSBTVElSX01FVEFQQUdFX0JMS05PCSgwKQorI2RlZmluZSBT VElSX0hFQURfQkxLTk8JCSgxKSAvKiBmaXJzdCBkYXRhIHBhZ2UgKi8KKworCisvKiBPcGFxdWUg Zm9yIHN0aXIgcGFnZXMgKi8KK3R5cGVkZWYgc3RydWN0IFN0aXJQYWdlT3BhcXVlRGF0YQorewor CU9mZnNldE51bWJlciBtYXhvZmY7CQkvKiBudW1iZXIgb2YgaW5kZXggdHVwbGVzIG9uIHBhZ2Ug Ki8KKwl1aW50MTYJCWZsYWdzOwkJCS8qIHNlZSBiaXQgZGVmaW5pdGlvbnMgYmVsb3cgKi8KKwl1 aW50MTYJCXVudXNlZDsJCQkvKiBwbGFjZWhvbGRlciB0byBmb3JjZSBtYXhhbGlnbmluZyBvZiBz aXplIG9mCisJCQkJCQkJCSAqIFN0aXJQYWdlT3BhcXVlRGF0YSBhbmQgdG8gcGxhY2UKKwkJCQkJ CQkJICogc3Rpcl9wYWdlX2lkIGV4YWN0bHkgYXQgdGhlIGVuZCBvZiBwYWdlICovCisJdWludDE2 CQlzdGlyX3BhZ2VfaWQ7CS8qIGZvciBpZGVudGlmaWNhdGlvbiBvZiBTVElSIGluZGV4ZXMgKi8K K30gU3RpclBhZ2VPcGFxdWVEYXRhOworCisvKiBTdGlyIHBhZ2UgZmxhZ3MgKi8KKyNkZWZpbmUg U1RJUl9NRVRBCQkoMTw8MCkKKwordHlwZWRlZiBTdGlyUGFnZU9wYXF1ZURhdGEgKlN0aXJQYWdl T3BhcXVlOworCisjZGVmaW5lIFNUSVJfUEFHRV9JRAkJMHhGRjg0CisKKy8qIE1ldGFkYXRhIG9m IHN0aXIgaW5kZXggKi8KK3R5cGVkZWYgc3RydWN0IFN0aXJNZXRhUGFnZURhdGEKK3sKKwl1aW50 MzIJCW1hZ2lja051bWJlcjsKKwl1aW50MTYJCWxhc3RCbGtObzsKKwlib29sCQlza2lwSW5zZXJ0 czsJLyogc2hvdWxkIHdlIGp1c3QgZXhpdCB3aXRob3V0IGFueSBpbnNlcnRzICovCit9IFN0aXJN ZXRhUGFnZURhdGE7CisKKy8qIE1hZ2ljIG51bWJlciB0byBkaXN0aW5ndWlzaCBzdGlyIHBhZ2Vz IGZyb20gb3RoZXJzICovCisjZGVmaW5lIFNUSVJfTUFHSUNLX05VTUJFUiAoMHhEQkFDMERFRikK KworI2RlZmluZSBTdGlyUGFnZUdldE1ldGEocGFnZSkJKChTdGlyTWV0YVBhZ2VEYXRhICopIFBh Z2VHZXRDb250ZW50cyhwYWdlKSkKKwordHlwZWRlZiBzdHJ1Y3QgU3RpclR1cGxlCit7CisJSXRl bVBvaW50ZXJEYXRhIGhlYXBQdHI7Cit9IFN0aXJUdXBsZTsKKworI2RlZmluZSBTdGlyUGFnZUdl dEZyZWVTcGFjZShzdGF0ZSwgcGFnZSkgXAorCShCTENLU1ogLSBNQVhBTElHTihTaXplT2ZQYWdl SGVhZGVyRGF0YSkgXAorCQktIFN0aXJQYWdlR2V0TWF4T2Zmc2V0KHBhZ2UpICogKHNpemVvZihT dGlyVHVwbGUpKSBcCisJCS0gTUFYQUxJR04oc2l6ZW9mKFN0aXJQYWdlT3BhcXVlRGF0YSkpKQor CitleHRlcm4gdm9pZCBTdGlyRmlsbE1ldGFwYWdlKFJlbGF0aW9uIGluZGV4LCBQYWdlIG1ldGFQ YWdlLCBib29sIHNraXBJbnNlcnRzKTsKK2V4dGVybiB2b2lkIFN0aXJJbml0TWV0YXBhZ2UoUmVs YXRpb24gaW5kZXgsIEZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gdm9pZCBTdGlySW5pdFBh Z2UoUGFnZSBwYWdlLCB1aW50MTYgZmxhZ3MpOworZXh0ZXJuIHZvaWQgU3Rpck1hcmtBc1NraXBJ bnNlcnRzKFJlbGF0aW9uIGluZGV4KTsKKworLyogaW5kZXggYWNjZXNzIG1ldGhvZCBpbnRlcmZh Y2UgZnVuY3Rpb25zICovCitleHRlcm4gYm9vbCBzdGlydmFsaWRhdGUoT2lkIG9wY2xhc3NvaWQp OworZXh0ZXJuIGJvb2wgc3Rpcmluc2VydChSZWxhdGlvbiBpbmRleCwgRGF0dW0gKnZhbHVlcywg Ym9vbCAqaXNudWxsLAorCQkJCQkgSXRlbVBvaW50ZXIgaHRfY3RpZCwgUmVsYXRpb24gaGVhcFJl bCwKKwkJCQkJIEluZGV4VW5pcXVlQ2hlY2sgY2hlY2tVbmlxdWUsCisJCQkJCSBib29sIGluZGV4 VW5jaGFuZ2VkLAorCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKK2V4dGVybiBJ bmRleFNjYW5EZXNjIHN0aXJiZWdpbnNjYW4oUmVsYXRpb24gciwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKTsKK2V4dGVybiB2b2lkIHN0aXJyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu S2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCisJCQkJCSBTY2FuS2V5IG9yZGVyYnlzLCBpbnQg bm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIHN0aXJlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CitleHRlcm4gSW5kZXhCdWlsZFJlc3VsdCAqc3RpcmJ1aWxkKFJlbGF0aW9uIGhlYXAsIFJlbGF0 aW9uIGluZGV4LAorCQkJCQkJCQkgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKK2V4dGVy biB2b2lkIHN0aXJidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KTsKK2V4dGVybiBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKnN0aXJidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKKwkJCQkJ CQkJCQkgICBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLCBJbmRleEJ1bGtEZWxldGVDYWxs YmFjayBjYWxsYmFjaywKKwkJCQkJCQkJCQkgICB2b2lkICpjYWxsYmFja19zdGF0ZSk7CitleHRl cm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGlydmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUlu Zm8gKmluZm8sCisJCQkJCQkJCQkJCSAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cyk7Citl eHRlcm4gYnl0ZWEgKnN0aXJvcHRpb25zKERhdHVtIHJlbG9wdGlvbnMsIGJvb2wgdmFsaWRhdGUp OworCisjZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX2FtLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0 CmluZGV4IDI2ZDE1OTI4YTE1Li5hNWVjZjkyMDhhZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19hbS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19hbS5kYXQKQEAg LTMzLDUgKzMzLDggQEAKIHsgb2lkID0+ICczNTgwJywgb2lkX3N5bWJvbCA9PiAnQlJJTl9BTV9P SUQnLAogICBkZXNjciA9PiAnYmxvY2sgcmFuZ2UgaW5kZXggKEJSSU4pIGFjY2VzcyBtZXRob2Qn LAogICBhbW5hbWUgPT4gJ2JyaW4nLCBhbWhhbmRsZXIgPT4gJ2JyaW5oYW5kbGVyJywgYW10eXBl ID0+ICdpJyB9LAoreyBvaWQgPT4gJzU1NTUnLCBvaWRfc3ltYm9sID0+ICdTVElSX0FNX09JRCcs CisgIGRlc2NyID0+ICdzaG9ydCB0ZXJtIGluZGV4IHJlcGxhY2VtZW50IGFjY2VzcyBtZXRob2Qn LAorICBhbW5hbWUgPT4gJ3N0aXInLCBhbWhhbmRsZXIgPT4gJ3N0aXJoYW5kbGVyJywgYW10eXBl ID0+ICdpJyB9LAogCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wY2xh c3MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdAppbmRleCA0YTk2MjQ4 MDJhYS4uNjIyN2M1NjU4ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3Bj bGFzcy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdApAQCAtNDg4 LDQgKzQ4OCw4IEBACiAKICMgbm8gYnJpbiBvcGNsYXNzIGZvciB0aGUgZ2VvbWV0cmljIHR5cGVz IGV4Y2VwdCBib3gKIAorIyBhbGxvdyBhbnkgdHlwZXMgZm9yIFNUSVIKK3sgb3BjbWV0aG9kID0+ ICdzdGlyJywgb2lkX3N5bWJvbCA9PiAnQU5ZX1NUSVJfT1BTX09JRCcsIG9wY25hbWUgPT4gJ3N0 aXJfb3BzJywKKyAgb3BjZmFtaWx5ID0+ICdzdGlyL2FueV9vcHMnLCBvcGNpbnR5cGUgPT4gJ2Fu eSd9LAorCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRh dCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BmYW1pbHkuZGF0CmluZGV4IGY3ZGNiOTZiNDNj Li44MzhhZDMyYzkzMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWls eS5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5kYXQKQEAgLTMwNCw1 ICszMDQsNyBAQAogICBvcGZtZXRob2QgPT4gJ2hhc2gnLCBvcGZuYW1lID0+ICdtdWx0aXJhbmdl X29wcycgfSwKIHsgb2lkID0+ICc2MTU4JywKICAgb3BmbWV0aG9kID0+ICdnaXN0Jywgb3BmbmFt ZSA9PiAnbXVsdGlyYW5nZV9vcHMnIH0sCit7IG9pZCA9PiAnNTU1OCcsCisgIG9wZm1ldGhvZCA9 PiAnc3RpcicsIG9wZm5hbWUgPT4gJ2FueV9vcHMnIH0sCiAKIF0KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CmluZGV4IDVjZjllMTJmY2I5Li5mZWI3NWUwZGM1MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0CkBAIC05MzUsNiArOTM1LDEwIEBACiAgIHByb25hbWUgPT4gJ2JyaW5oYW5kbGVyJywgcHJv dm9sYXRpbGUgPT4gJ3YnLAogICBwcm9yZXR0eXBlID0+ICdpbmRleF9hbV9oYW5kbGVyJywgcHJv YXJndHlwZXMgPT4gJ2ludGVybmFsJywKICAgcHJvc3JjID0+ICdicmluaGFuZGxlcicgfSwKK3sg b2lkID0+ICc1NTU2JywgZGVzY3IgPT4gJ3Nob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1lbnQgYWNj ZXNzIG1ldGhvZCBoYW5kbGVyJywKKyAgcHJvbmFtZSA9PiAnc3RpcmhhbmRsZXInLCBwcm92b2xh dGlsZSA9PiAndicsCisgIHByb3JldHR5cGUgPT4gJ2luZGV4X2FtX2hhbmRsZXInLCBwcm9hcmd0 eXBlcyA9PiAnaW50ZXJuYWwnLAorICBwcm9zcmMgPT4gJ3N0aXJoYW5kbGVyJyB9LAogeyBvaWQg PT4gJzM5NTInLCBkZXNjciA9PiAnYnJpbjogc3RhbmRhbG9uZSBzY2FuIG5ldyB0YWJsZSBwYWdl cycsCiAgIHByb25hbWUgPT4gJ2JyaW5fc3VtbWFyaXplX25ld192YWx1ZXMnLCBwcm92b2xhdGls ZSA9PiAndicsCiAgIHByb3BhcmFsbGVsID0+ICd1JywgcHJvcmV0dHlwZSA9PiAnaW50NCcsIHBy b2FyZ3R5cGVzID0+ICdyZWdjbGFzcycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDE4YWU4ZjBk NGJiLi44NGIzMjMxOWZiMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE1NSw4ICsxNTUsOCBA QCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKICAqCQllbnRyaWVzIGZvciBhIHBhcnRpY3VsYXIg aW5kZXguICBVc2VkIGZvciBib3RoIGluZGV4X2J1aWxkIGFuZAogICoJCXJldGFpbCBjcmVhdGlv biBvZiBpbmRleCBlbnRyaWVzLgogICoKLSAqIGlpX0NvbmN1cnJlbnQsIGlpX0Jyb2tlbkhvdENo YWluLCBhbmQgaWlfUGFyYWxsZWxXb3JrZXJzIGFyZSB1c2VkIG9ubHkKLSAqIGR1cmluZyBpbmRl eCBidWlsZDsgdGhleSdyZSBjb252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlLgorICogaWlf Q29uY3VycmVudCwgaWlfQnJva2VuSG90Q2hhaW4sIGlpX0F1eGlsaWFyeSBhbmQgaWlfUGFyYWxs ZWxXb3JrZXJzCisgKiBhcmUgdXNlZCBvbmx5IGR1cmluZyBpbmRleCBidWlsZDsgdGhleSdyZSBj b252ZW50aW9uYWxseSB6ZXJvZWQgb3RoZXJ3aXNlCiAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgKi8K IHR5cGVkZWYgc3RydWN0IEluZGV4SW5mbwpAQCAtMjE2LDcgKzIxNiw4IEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4SW5mbwogCWJvb2wJCWlpX1dpdGhvdXRPdmVybGFwczsKIAkvKiAjIG9mIHdvcmtl cnMgcmVxdWVzdGVkIChleGNsdWRlcyBsZWFkZXIpICovCiAJaW50CQkJaWlfUGFyYWxsZWxXb3Jr ZXJzOwotCisJLyogaXMgYXV4aWxpYXJ5IGZvciBjb25jdXJyZW50IGluZGV4IGJ1aWxkPyAqLwor CWJvb2wJCWlpX0F1eGlsaWFyeTsKIAkvKiBPaWQgb2YgaW5kZXggQU0gKi8KIAlPaWQJCQlpaV9B bTsKIAkvKiBwcml2YXRlIGNhY2hlIGFyZWEgZm9yIGluZGV4IEFNICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS91dGlscy9pbmRleF9zZWxmdW5jcy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvaW5k ZXhfc2VsZnVuY3MuaAppbmRleCA2YzY0ZGI2ZDQ1Ni4uZTBkOTM5ZDY4NTcgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL2luZGV4X3NlbGZ1bmNzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvaW5kZXhfc2VsZnVuY3MuaApAQCAtNjIsNiArNjIsMTQgQEAgZXh0ZXJuIHZvaWQgc3BnY29z dGVzdGltYXRlKHN0cnVjdCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQlTZWxlY3Rpdml0eSAq aW5kZXhTZWxlY3Rpdml0eSwKIAkJCQkJCQlkb3VibGUgKmluZGV4Q29ycmVsYXRpb24sCiAJCQkJ CQkJZG91YmxlICppbmRleFBhZ2VzKTsKK2V4dGVybiB2b2lkIHN0aXJjb3N0ZXN0aW1hdGUoc3Ry dWN0IFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCXN0cnVjdCBJbmRleFBhdGggKnBhdGgsCisJ CQkJCQkJZG91YmxlIGxvb3BfY291bnQsCisJCQkJCQkJQ29zdCAqaW5kZXhTdGFydHVwQ29zdCwK KwkJCQkJCQlDb3N0ICppbmRleFRvdGFsQ29zdCwKKwkJCQkJCQlTZWxlY3Rpdml0eSAqaW5kZXhT ZWxlY3Rpdml0eSwKKwkJCQkJCQlkb3VibGUgKmluZGV4Q29ycmVsYXRpb24sCisJCQkJCQkJZG91 YmxlICppbmRleFBhZ2VzKTsKIGV4dGVybiB2b2lkIGdpbmNvc3Rlc3RpbWF0ZShzdHJ1Y3QgUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJc3RydWN0IEluZGV4UGF0aCAqcGF0aCwKIAkJCQkJCQlk b3VibGUgbG9vcF9jb3VudCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv YW11dGlscy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMub3V0CmluZGV4 IDdhYjYxMTNjNjE5Li45MmMwMzNhMjAxMCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9hbXV0aWxzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRp bHMub3V0CkBAIC0xNzMsNyArMTczLDEzIEBAIHNlbGVjdCBhbW5hbWUsIHByb3AsIHBnX2luZGV4 YW1faGFzX3Byb3BlcnR5KGEub2lkLCBwcm9wKSBhcyBwCiAgc3BnaXN0IHwgY2FuX2V4Y2x1ZGUg ICB8IHQKICBzcGdpc3QgfCBjYW5faW5jbHVkZSAgIHwgdAogIHNwZ2lzdCB8IGJvZ3VzICAgICAg ICAgfCAKLSgzNiByb3dzKQorIHN0aXIgICB8IGNhbl9vcmRlciAgICAgfCBmCisgc3RpciAgIHwg Y2FuX3VuaXF1ZSAgICB8IGYKKyBzdGlyICAgfCBjYW5fbXVsdGlfY29sIHwgdAorIHN0aXIgICB8 IGNhbl9leGNsdWRlICAgfCBmCisgc3RpciAgIHwgY2FuX2luY2x1ZGUgICB8IHQKKyBzdGlyICAg fCBib2d1cyAgICAgICAgIHwgCisoNDIgcm93cykKIAogLS0KIC0tIGFkZGl0aW9uYWwgY2hlY2tz IGZvciBwZ19pbmRleF9jb2x1bW5faGFzX3Byb3BlcnR5CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9vcHJfc2FuaXR5Lm91dAppbmRleCBhMzU3ZTFkMGMwZS4uYzU1OTVlNzg4YTQgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dApAQCAtMjEyMiw5ICsyMTIyLDEwIEBA IEZST00gcGdfb3BjbGFzcyBBUyBjMQogV0hFUkUgTk9UIEVYSVNUUyhTRUxFQ1QgMSBGUk9NIHBn X2Ftb3AgQVMgYTEKICAgICAgICAgICAgICAgICAgV0hFUkUgYTEuYW1vcGZhbWlseSA9IGMxLm9w Y2ZhbWlseQogICAgICAgICAgICAgICAgICAgIEFORCBiaW5hcnlfY29lcmNpYmxlKGMxLm9wY2lu dHlwZSwgYTEuYW1vcGxlZnR0eXBlKSk7Ci0gb3BjbmFtZSB8IG9wY2ZhbWlseSAKLS0tLS0tLS0t LSstLS0tLS0tLS0tLQotKDAgcm93cykKKyBvcGNuYW1lICB8IG9wY2ZhbWlseSAKKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0KKyBzdGlyX29wcyB8ICAgICAgNTU1OAorKDEgcm93KQogCiAtLSBDaGVj ayB0aGF0IGVhY2ggb3BlcmF0b3IgbGlzdGVkIGluIHBnX2Ftb3AgaGFzIGFuIGFzc29jaWF0ZWQg b3BjbGFzcywKIC0tIHRoYXQgaXMgb25lIHdob3NlIG9wY2ludHlwZSBtYXRjaGVzIG9wcmxlZnQg KHBvc3NpYmx5IGJ5IGNvZXJjaW9uKS4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CmluZGV4 IGM4ZjM5MzJlZGYwLi5lY2MyYzJhNjA0OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0 CkBAIC01MTcxLDcgKzUxNzEsOCBAQCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAgaGVhcCAgIHwg VGFibGUKICBoZWFwMiAgfCBUYWJsZQogIHNwZ2lzdCB8IEluZGV4Ci0oOCByb3dzKQorIHN0aXIg ICB8IEluZGV4CisoOSByb3dzKQogCiBcZEEgKgogTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwpAQCAt NTE4NSw3ICs1MTg2LDggQEAgTGlzdCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRhYmxl CiAgaGVhcDIgIHwgVGFibGUKICBzcGdpc3QgfCBJbmRleAotKDggcm93cykKKyBzdGlyICAgfCBJ bmRleAorKDkgcm93cykKIAogXGRBIGgqCiBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCkBAIC01MjEw LDkgKzUyMTIsOSBAQCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAKIFxkQTogZXh0cmEgYXJndW1l bnQgImJhciIgaWdub3JlZAogXGRBKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIGFjY2VzcyBtZXRob2RzCi0gIE5hbWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAg ICB8ICAgICAgICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgIAotLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2Vz cyBtZXRob2RzCisgIE5hbWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAg ICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogIGJyaW4gICB8IEluZGV4IHwgYnJpbmhhbmRsZXIgICAgICAgICAgfCBibG9j ayByYW5nZSBpbmRleCAoQlJJTikgYWNjZXNzIG1ldGhvZAogIGJ0cmVlICB8IEluZGV4IHwgYnRo YW5kbGVyICAgICAgICAgICAgfCBiLXRyZWUgaW5kZXggYWNjZXNzIG1ldGhvZAogIGdpbiAgICB8 IEluZGV4IHwgZ2luaGFuZGxlciAgICAgICAgICAgfCBHSU4gaW5kZXggYWNjZXNzIG1ldGhvZApA QCAtNTIyMSwxMiArNTIyMywxMyBAQCBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCiAgaGVhcCAgIHwg VGFibGUgfCBoZWFwX3RhYmxlYW1faGFuZGxlciB8IGhlYXAgdGFibGUgYWNjZXNzIG1ldGhvZAog IGhlYXAyICB8IFRhYmxlIHwgaGVhcF90YWJsZWFtX2hhbmRsZXIgfCAKICBzcGdpc3QgfCBJbmRl eCB8IHNwZ2hhbmRsZXIgICAgICAgICAgIHwgU1AtR2lTVCBpbmRleCBhY2Nlc3MgbWV0aG9kCi0o OCByb3dzKQorIHN0aXIgICB8IEluZGV4IHwgc3RpcmhhbmRsZXIgICAgICAgICAgfCBzaG9ydCB0 ZXJtIGluZGV4IHJlcGxhY2VtZW50IGFjY2VzcyBtZXRob2QKKyg5IHJvd3MpCiAKIFxkQSsgKgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCi0gIE5h bWUgIHwgVHlwZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAgICAgICAgICBEZXNjcmlw dGlvbiAgICAgICAgICAgICAgIAotLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFjY2VzcyBtZXRob2RzCisgIE5hbWUgIHwgVHlw ZSAgfCAgICAgICBIYW5kbGVyICAgICAgICB8ICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIGJyaW4gICB8IElu ZGV4IHwgYnJpbmhhbmRsZXIgICAgICAgICAgfCBibG9jayByYW5nZSBpbmRleCAoQlJJTikgYWNj ZXNzIG1ldGhvZAogIGJ0cmVlICB8IEluZGV4IHwgYnRoYW5kbGVyICAgICAgICAgICAgfCBiLXRy ZWUgaW5kZXggYWNjZXNzIG1ldGhvZAogIGdpbiAgICB8IEluZGV4IHwgZ2luaGFuZGxlciAgICAg ICAgICAgfCBHSU4gaW5kZXggYWNjZXNzIG1ldGhvZApAQCAtNTIzNSw3ICs1MjM4LDggQEAgTGlz dCBvZiBhY2Nlc3MgbWV0aG9kcwogIGhlYXAgICB8IFRhYmxlIHwgaGVhcF90YWJsZWFtX2hhbmRs ZXIgfCBoZWFwIHRhYmxlIGFjY2VzcyBtZXRob2QKICBoZWFwMiAgfCBUYWJsZSB8IGhlYXBfdGFi bGVhbV9oYW5kbGVyIHwgCiAgc3BnaXN0IHwgSW5kZXggfCBzcGdoYW5kbGVyICAgICAgICAgICB8 IFNQLUdpU1QgaW5kZXggYWNjZXNzIG1ldGhvZAotKDggcm93cykKKyBzdGlyICAgfCBJbmRleCB8 IHN0aXJoYW5kbGVyICAgICAgICAgIHwgc2hvcnQgdGVybSBpbmRleCByZXBsYWNlbWVudCBhY2Nl c3MgbWV0aG9kCisoOSByb3dzKQogCiBcZEErIGgqCiAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIGFjY2VzcyBtZXRob2RzCi0tIAoyLjQzLjAKCg== --000000000000ac6d6606432d3652 Content-Type: text/plain; charset="US-ASCII"; name="v26-0002-Add-stress-tests-for-concurrent-index-builds.patch" Content-Disposition: attachment; filename="v26-0002-Add-stress-tests-for-concurrent-index-builds.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhrw6per1 RnJvbSAxODk5OGZiMjQ0NDBiMGQ1NDgyZDNhNjliYTU0YzAzYmE2OTNjMTBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAzMCBOb3YgMjAyNCAxNjoyNDoyMCArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI2IDIvOF0gQWRkIHN0cmVzcyB0ZXN0cyBmb3IgY29uY3VycmVudCBpbmRleCBidWls ZHMKCkludHJvZHVjZSBzdHJlc3MgdGVzdHMgZm9yIGNvbmN1cnJlbnQgaW5kZXggb3BlcmF0aW9u czoKLSB0ZXN0IGNvbmN1cnJlbnQgaW5zZXJ0cy91cGRhdGVzIGR1cmluZyBDUkVBVEUvUkVJTkRF WCBJTkRFWCBDT05DVVJSRU5UTFkKLSBjb3ZlciB2YXJpb3VzIGluZGV4IHR5cGVzIChidHJlZSwg Z2luLCBnaXN0LCBicmluLCBoYXNoLCBzcGdpc3QpCi0gdGVzdCB1bmlxdWUgYW5kIG5vbi11bmlx dWUgaW5kZXhlcwotIHRlc3Qgd2l0aCBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlcwotIHRlc3Qg Ym90aCBwYXJhbGxlbCBhbmQgbm9uLXBhcmFsbGVsIG9wZXJhdGlvbnMKClRoZXNlIHRlc3RzIHZl cmlmeSB0aGUgYmVoYXZpb3Igb2YgdGhlIGZvbGxvd2luZyBjb21taXRzLgotLS0KIHNyYy9iaW4v cGdfYW1jaGVjay9tZXNvbi5idWlsZCAgfCAgIDEgKwogc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2 X2NpYy5wbCB8IDIyMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyMjQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdf YW1jaGVjay90LzAwNl9jaWMucGwKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FtY2hlY2svbWVz b24uYnVpbGQgYi9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVpbGQKaW5kZXggMzE2ZWEwZDQw YjguLjdkZjE1NDM1ZmJiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2FtY2hlY2svbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL21lc29uLmJ1aWxkCkBAIC0yOCw2ICsyOCw3IEBA IHRlc3RzICs9IHsKICAgICAgICd0LzAwM19jaGVjay5wbCcsCiAgICAgICAndC8wMDRfdmVyaWZ5 X2hlYXBhbS5wbCcsCiAgICAgICAndC8wMDVfb3BjbGFzc19kYW1hZ2UucGwnLAorICAgICAgJ3Qv MDA2X2NpYy5wbCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfYW1j aGVjay90LzAwNl9jaWMucGwgYi9zcmMvYmluL3BnX2FtY2hlY2svdC8wMDZfY2ljLnBsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMDM3NmM1NDhkNAotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfYW1jaGVjay90LzAwNl9jaWMucGwKQEAgLTAsMCArMSwyMjMg QEAKKyMgQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCisjIFRlc3QgUkVJTkRFWCBDT05DVVJSRU5UTFkgd2l0aCBjb25jdXJyZW50IG1vZGlm aWNhdGlvbnMgYW5kIEhPVCB1cGRhdGVzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFM ID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitUZXN0OjpNb3JlLT5idWlsZGVy LT50b2RvX3N0YXJ0KCdmaWxlc3lzdGVtIGJ1ZycpCisgIGlmIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOjpoYXNfd2FsX3JlYWRfYnVnOworCitteSAoJG5vZGUsICRyZXN1bHQpOworCisjCisjIFRl c3Qgc2V0LXVwCisjCiskbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnUkNf dGVzdCcpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsCisJJ2xvY2tfdGltZW91dCA9ICcgLiAoMTAwMCAqICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGls czo6dGltZW91dF9kZWZhdWx0KSk7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29u ZicsICdmc3luYyA9IG9mZicpOworJG5vZGUtPnN0YXJ0OworJG5vZGUtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxKENSRUFURSBFWFRFTlNJT04gYW1jaGVjaykpOworJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxKENSRUFURSBUQUJMRSB0YmwoaSBpbnQgcHJpbWFyeSBrZXksCisJCQkJCQkJ CWMxIG1vbmV5IGRlZmF1bHQgMCwgYzIgbW9uZXkgZGVmYXVsdCAwLAorCQkJCQkJCQljMyBtb25l eSBkZWZhdWx0IDAsIHVwZGF0ZWRfYXQgdGltZXN0YW1wLAorCQkJCQkJCQlpYSBpbnQ0W10sIHAg cG9pbnQpKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHEoQ1JFQVRFIElOREVYIENP TkNVUlJFTlRMWSBpZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpOykpOworIyBjcmVhdGUgc2VxdWVu Y2UKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcShDUkVBVEUgVU5MT0dHRUQgU0VRVUVO Q0UgaW5fcm93X3JlYnVpbGQgU1RBUlQgMSBJTkNSRU1FTlQgMTspKTsKKyRub2RlLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcShTRUxFQ1QgbmV4dHZhbCgnaW5fcm93X3JlYnVpbGQnKTspKTsKKwor IyBDcmVhdGUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJlZGljYXRlIHRlc3RzCiskbm9kZS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHEoCisJQ1JFQVRFIEZVTkNUSU9OIHByZWRpY2F0ZV9zdGFibGUo KSBSRVRVUk5TIGJvb2wgSU1NVVRBQkxFCisJTEFOR1VBR0UgcGxwZ3NxbCBBUyAkJAorCUJFR0lO CisJCUVYRUNVVEUgJ1NFTEVDVCB0eGlkX2N1cnJlbnQoKSc7CisJCVJFVFVSTiB0cnVlOworCUVO RDsgJCQ7CispKTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKAorCUNSRUFURSBG VU5DVElPTiBwcmVkaWNhdGVfY29uc3QoaW50ZWdlcikgUkVUVVJOUyBib29sIElNTVVUQUJMRQor CUxBTkdVQUdFIHBscGdzcWwgQVMgJCQKKwlCRUdJTgorCQlSRVRVUk4gTU9EKCQxLCAyKSA9IDA7 CisJRU5EOyAkJDsKKykpOworCisjIFJ1biBDSUMvUklDIGluIGRpZmZlcmVudCBvcHRpb25zIGNv bmN1cnJlbnRseSB3aXRoIHVwc2VydHMKKyRub2RlLT5wZ2JlbmNoKAorCSctLW5vLXZhY3V1bSAt LWNsaWVudD0zMCAtLWpvYnM9NCAtLWV4aXQtb24tYWJvcnQgLS10cmFuc2FjdGlvbnM9MTAwMCcs CisJMCwKKwlbcXJ7YWN0dWFsbHkgcHJvY2Vzc2VkfV0sCisJW3Fye14kfV0sCisJJ2NvbmN1cnJl bnQgb3BlcmF0aW9ucyB3aXRoIFJFSU5ERVgvQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWScsCisJ eworCQknY29uY3VycmVudF9vcHMnID0+IHEoCisJCQlTRVQgZGVidWdfcGFyYWxsZWxfcXVlcnkg PSBvZmY7IC0tIHRoaXMgaXMgYmVjYXVzZSBwcmVkaWNhdGVfc3RhYmxlIGltcGxlbWVudGF0aW9u CisJCQlTRUxFQ1QgcGdfdHJ5X2Fkdmlzb3J5X2xvY2soNDIpOjppbnRlZ2VyIEFTIGdvdGxvY2sg XGdzZXQKKwkJCVxpZiA6Z290bG9jaworCQkJCVNFTEVDVCBuZXh0dmFsKCdpbl9yb3dfcmVidWls ZCcpIEFTIGxhc3RfdmFsdWUgXGdzZXQKKwkJCQlcc2V0IHZhcmlhbnQgcmFuZG9tKDAsIDUpCisJ CQkJXHNldCBwYXJhbGxlbHMgcmFuZG9tKDAsIDQpCisJCQkJXGlmIDpsYXN0X3ZhbHVlIDwgMwor CQkJCQlBTFRFUiBUQUJMRSB0YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTpwYXJhbGxlbHMpOwor CQkJCQlcaWYgOnZhcmlhbnQgPSAwCisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5l d19pZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDEKKwkJ CQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9h dCkgV0hFUkUgcHJlZGljYXRlX3N0YWJsZSgpOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDIKKwkJ CQkJCUNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwoaSwgdXBkYXRlZF9h dCkgV0hFUkUgTU9EKGksIDIpID0gMDsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSAzCisJCQkJCQlD UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsKGksIHVwZGF0ZWRfYXQpIFdI RVJFIHByZWRpY2F0ZV9jb25zdChpKTsKKwkJCQkJXGVsaWYgOnZhcmlhbnQgPSA0CisJCQkJCQlD UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsKHByZWRpY2F0ZV9jb25zdChp KSk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gNQorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNVUlJF TlRMWSBuZXdfaWR4IE9OIHRibChpLCBwcmVkaWNhdGVfY29uc3QoaSksIHVwZGF0ZWRfYXQpIFdI RVJFIHByZWRpY2F0ZV9jb25zdChpKTsKKwkJCQkJXGVuZGlmCisJCQkJCVxzbGVlcCAxMCBtcwor CQkJCQlTRUxFQ1QgYnRfaW5kZXhfY2hlY2soJ25ld19pZHgnLCBoZWFwYWxsaW5kZXhlZCA9PiB0 cnVlLCBjaGVja3VuaXF1ZSA9PiB0cnVlKTsKKwkJCQkJUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5U TFkgbmV3X2lkeDsKKwkJCQkJXHNsZWVwIDEwIG1zCisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVj aygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUp OworCQkJCQlEUk9QIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCVxlbmRpZgorCQkJ CVNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2soNDIpOworCQkJXGVsc2UKKwkJCQlcc2V0IG51bSBy YW5kb20oMTAwMCwgMTAwMDAwKQorCQkJCUJFR0lOOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxV RVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNUKGkp IERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBW QUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCkpCisJCQkJCU9OIENPTkZMSUNU KGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRi bCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCkpCisJCQkJCU9OIENPTkZM SUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpOworCQkJCUlOU0VSVCBJTlRP IHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCkpCisJCQkJCU9OIENP TkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpOworCQkJCUlOU0VSVCBJ TlRPIHRibCBWQUxVRVMoZmxvb3IocmFuZG9tKCkqOm51bSksMCwwLDAsbm93KCkpCisJCQkJCU9O IENPTkZMSUNUKGkpIERPIFVQREFURSBTRVQgdXBkYXRlZF9hdCA9IG5vdygpOworCQkJCVNFTEVD VCBzZXR2YWwoJ2luX3Jvd19yZWJ1aWxkJywgMSk7CisJCQkJQ09NTUlUOworCQkJXGVuZGlmCisJ CSkKKwl9KTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKFRSVU5DQVRFIFRBQkxF IHRibDspKTsKKworIyBSdW4gQ0lDL1JJQyBmb3IgdW5pcXVlIGluZGV4IGNvbmN1cnJlbnRseSB3 aXRoIHVwc2VydHMKKyRub2RlLT5wZ2JlbmNoKAorCSctLW5vLXZhY3V1bSAtLWNsaWVudD0zMCAt LWpvYnM9NCAtLWV4aXQtb24tYWJvcnQgLS10cmFuc2FjdGlvbnM9MTAwMCcsCisJMCwKKwlbcXJ7 YWN0dWFsbHkgcHJvY2Vzc2VkfV0sCisJW3Fye14kfV0sCisJJ2NvbmN1cnJlbnQgb3BlcmF0aW9u cyB3aXRoIFJFSU5ERVgvQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBmb3IgdW5pcXVlIEJUUkVF JywKKwl7CisJCSdjb25jdXJyZW50X29wc191bmlxdWVfaWR4JyA9PiBxKAorCQkJU0VMRUNUIHBn X3RyeV9hZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdlciBBUyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYg OmdvdGxvY2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgnaW5fcm93X3JlYnVpbGQnKSBBUyBsYXN0X3Zh bHVlIFxnc2V0CisJCQkJXHNldCBwYXJhbGxlbHMgcmFuZG9tKDAsIDQpCisJCQkJXGlmIDpsYXN0 X3ZhbHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTpw YXJhbGxlbHMpOworCQkJCQlDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4 IE9OIHRibChpKTsKKwkJCQkJXHNsZWVwIDEwIG1zCisJCQkJCVNFTEVDVCBidF9pbmRleF9jaGVj aygnbmV3X2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUp OworCQkJCQlSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCQlcc2xlZXAg MTAgbXMKKwkJCQkJU0VMRUNUIGJ0X2luZGV4X2NoZWNrKCduZXdfaWR4JywgaGVhcGFsbGluZGV4 ZWQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUgPT4gdHJ1ZSk7CisJCQkJCURST1AgSU5ERVggQ09OQ1VS UkVOVExZIG5ld19pZHg7CisJCQkJXGVuZGlmCisJCQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9j ayg0Mik7CisJCQlcZWxzZQorCQkJCVxzZXQgbnVtIHJhbmRvbSgxLCBwb3dlcigxMCwgcmFuZG9t KDEsIDUpKSkKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0p LDAsMCwwLG5vdygpKQorCQkJCQlPTiBDT05GTElDVChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRf YXQgPSBub3coKTsKKwkJCQlTRUxFQ1Qgc2V0dmFsKCdpbl9yb3dfcmVidWlsZCcsIDEpOworCQkJ XGVuZGlmCisJCSkKKwl9KTsKKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKFRSVU5D QVRFIFRBQkxFIHRibDspKTsKKworIyBSdW4gQ0lDL1JJQyBmb3IgR0lOIHdpdGggdXBzZXJ0cwor JG5vZGUtPnBnYmVuY2goCisJJy0tbm8tdmFjdXVtIC0tY2xpZW50PTMwIC0tam9icz00IC0tZXhp dC1vbi1hYm9ydCAtLXRyYW5zYWN0aW9ucz0xMDAwJywKKwkwLAorCVtxcnthY3R1YWxseSBwcm9j ZXNzZWR9XSwKKwlbcXJ7XiR9XSwKKwknY29uY3VycmVudCBvcGVyYXRpb25zIHdpdGggUkVJTkRF WC9DUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGZvciBHSU4vR0lTVC9CUklOL0hBU0gvU1BHSVNU JywKKwl7CisJCSdjb25jdXJyZW50X29wc19naW5faWR4JyA9PiBxKAorCQkJU0VMRUNUIHBnX3Ry eV9hZHZpc29yeV9sb2NrKDQyKTo6aW50ZWdlciBBUyBnb3Rsb2NrIFxnc2V0CisJCQlcaWYgOmdv dGxvY2sKKwkJCQlTRUxFQ1QgbmV4dHZhbCgnaW5fcm93X3JlYnVpbGQnKSBBUyBsYXN0X3ZhbHVl IFxnc2V0CisJCQkJXHNldCBwYXJhbGxlbHMgcmFuZG9tKDAsIDQpCisJCQkJXGlmIDpsYXN0X3Zh bHVlIDwgMworCQkJCQlBTFRFUiBUQUJMRSB0YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTpwYXJh bGxlbHMpOworCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHggT04gdGJsIFVT SU5HIEdJTiAoaWEpOworCQkJCQlcc2xlZXAgMTAgbXMKKwkJCQkJU0VMRUNUIGdpbl9pbmRleF9j aGVjaygnbmV3X2lkeCcpOworCQkJCQlSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4 OworCQkJCQlcc2xlZXAgMTAgbXMKKwkJCQkJU0VMRUNUIGdpbl9pbmRleF9jaGVjaygnbmV3X2lk eCcpOworCQkJCQlEUk9QIElOREVYIENPTkNVUlJFTlRMWSBuZXdfaWR4OworCQkJCVxlbmRpZgor CQkJCVNFTEVDVCBwZ19hZHZpc29yeV91bmxvY2soNDIpOworCQkJXGVsc2UKKwkJCQlcc2V0IG51 bSByYW5kb20oMSwgcG93ZXIoMTAsIHJhbmRvbSgxLCA1KSkpCisJCQkJSU5TRVJUIElOVE8gdGJs IFZBTFVFUyhmbG9vcihyYW5kb20oKSo6bnVtKSwwLDAsMCxub3coKSkKKwkJCQkJT04gQ09ORkxJ Q1QoaSkgRE8gVVBEQVRFIFNFVCB1cGRhdGVkX2F0ID0gbm93KCk7CisJCQkJU0VMRUNUIHNldHZh bCgnaW5fcm93X3JlYnVpbGQnLCAxKTsKKwkJCVxlbmRpZgorCQkpCisJfSk7CisKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcShUUlVOQ0FURSBUQUJMRSB0Ymw7KSk7CisKKyMgUnVuIENJ Qy9SSUMgZm9yIEdJU1QvQlJJTi9IQVNIL1NQR0lTVCBpbmRleCBjb25jdXJyZW50bHkgd2l0aCB1 cHNlcnRzCiskbm9kZS0+cGdiZW5jaCgKKwknLS1uby12YWN1dW0gLS1jbGllbnQ9MzAgLS1qb2Jz PTQgLS1leGl0LW9uLWFib3J0IC0tdHJhbnNhY3Rpb25zPTEwMDAnLAorCTAsCisJW3Fye2FjdHVh bGx5IHByb2Nlc3NlZH1dLAorCVtxcnteJH1dLAorCSdjb25jdXJyZW50IG9wZXJhdGlvbnMgd2l0 aCBSRUlOREVYL0NSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgZm9yIEdJTi9HSVNUL0JSSU4vSEFT SC9TUEdJU1QnLAorCXsKKwkJJ2NvbmN1cnJlbnRfb3BzX290aGVyX2lkeCcgPT4gcSgKKwkJCVNF TEVDVCBwZ190cnlfYWR2aXNvcnlfbG9jayg0Mik6OmludGVnZXIgQVMgZ290bG9jayBcZ3NldAor CQkJXGlmIDpnb3Rsb2NrCisJCQkJU0VMRUNUIG5leHR2YWwoJ2luX3Jvd19yZWJ1aWxkJykgQVMg bGFzdF92YWx1ZSBcZ3NldAorCQkJCVxzZXQgcGFyYWxsZWxzIHJhbmRvbSgwLCA0KQorCQkJCVxp ZiA6bGFzdF92YWx1ZSA8IDMKKwkJCQkJQUxURVIgVEFCTEUgdGJsIFNFVCAocGFyYWxsZWxfd29y a2Vycz06cGFyYWxsZWxzKTsKKwkJCQkJXHNldCB2YXJpYW50IHJhbmRvbSgwLCAzKQorCQkJCQlc aWYgOnZhcmlhbnQgPSAwCisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHgg T04gdGJsIFVTSU5HIEdJU1QgKHApOworCQkJCQlcZWxpZiA6dmFyaWFudCA9IDEKKwkJCQkJCUNS RUFURSBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeCBPTiB0YmwgVVNJTkcgQlJJTiAodXBkYXRl ZF9hdCk7CisJCQkJCVxlbGlmIDp2YXJpYW50ID0gMgorCQkJCQkJQ1JFQVRFIElOREVYIENPTkNV UlJFTlRMWSBuZXdfaWR4IE9OIHRibCBVU0lORyBIQVNIICh1cGRhdGVkX2F0KTsKKwkJCQkJXGVs aWYgOnZhcmlhbnQgPSAzCisJCQkJCQlDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHgg T04gdGJsIFVTSU5HIFNQR0lTVCAocCk7CisJCQkJCVxlbmRpZgorCQkJCQlcc2xlZXAgMTAgbXMK KwkJCQkJUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgbmV3X2lkeDsKKwkJCQkJXHNsZWVwIDEw IG1zCisJCQkJCURST1AgSU5ERVggQ09OQ1VSUkVOVExZIG5ld19pZHg7CisJCQkJXGVuZGlmCisJ CQkJU0VMRUNUIHBnX2Fkdmlzb3J5X3VubG9jayg0Mik7CisJCQlcZWxzZQorCQkJCVxzZXQgbnVt IHJhbmRvbSgxLCBwb3dlcigxMCwgcmFuZG9tKDEsIDUpKSkKKwkJCQlJTlNFUlQgSU5UTyB0Ymwg VkFMVUVTKGZsb29yKHJhbmRvbSgpKjpudW0pLDAsMCwwLG5vdygpKQorCQkJCQlPTiBDT05GTElD VChpKSBETyBVUERBVEUgU0VUIHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlTRUxFQ1Qgc2V0dmFs KCdpbl9yb3dfcmVidWlsZCcsIDEpOworCQkJXGVuZGlmCisJCSkKKwl9KTsKKworJG5vZGUtPnN0 b3A7Citkb25lX3Rlc3RpbmcoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoyLjQz LjAKCg== --000000000000ac6d6606432d3652 Content-Type: text/plain; charset="US-ASCII"; name="v26-0004-Add-Datum-storage-support-to-tuplestore.patch" Content-Disposition: attachment; filename="v26-0004-Add-Datum-storage-support-to-tuplestore.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhrw6peu3 RnJvbSBiODNiOGFlYjljYzc2ZjNlMTMzNWNmN2QwNGE3NTQxODRkYTNjOWNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogU2F0LCAyNSBKYW4gMjAyNSAxMzozMzoyMSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI2IDQvOF0gQWRkIERhdHVtIHN0b3JhZ2Ugc3VwcG9ydCB0byB0dXBsZXN0b3JlCgog RXh0ZW5kIHR1cGxlc3RvcmUgdG8gc3RvcmUgaW5kaXZpZHVhbCBEYXR1bSB2YWx1ZXM6Ci0gZml4 ZWQtbGVuZ3RoIGRhdGF0eXBlczogc3RvcmUgcmF3IGJ5dGVzIHdpdGhvdXQgYSBsZW5ndGggaGVh ZGVyCi0gdmFyaWFibGUtbGVuZ3RoIGRhdGF0eXBlczogaW5jbHVkZSBhIGxlbmd0aCBoZWFkZXIg YW5kIHBhZGRpbmcKLSBieS12YWx1ZSB0eXBlczogc3RvcmUgaW5saW5lCgpUaGlzIHN1cHBvcnQg ZW5hYmxlcyB1c2FnZXMgdHVwbGVzdG9yZSBmb3Igbm9uLXR1cGxlIGRhdGEgKFRJRHMpIGluIHRo ZSBuZXh0IGNvbW1pdC4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc3RvcmUuYyB8 IDMwMiArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBzcmMvaW5jbHVkZS91dGlscy90dXBs ZXN0b3JlLmggICAgICB8ICAzMyArLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjYzIGluc2VydGlvbnMo KyksIDcyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3NvcnQv dHVwbGVzdG9yZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvc29ydC90dXBsZXN0b3JlLmMKaW5kZXgg YzlhZWNhYjhkNjYuLjM4MDc2ZjM0NThlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9z b3J0L3R1cGxlc3RvcmUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc3RvcmUu YwpAQCAtMSwxNiArMSwxOSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogdHVwbGVzdG9y ZS5jCi0gKgkgIEdlbmVyYWxpemVkIHJvdXRpbmVzIGZvciB0ZW1wb3JhcnkgdHVwbGUgc3RvcmFn ZS4KKyAqCSAgR2VuZXJhbGl6ZWQgcm91dGluZXMgZm9yIHRlbXBvcmFyeSBzdG9yYWdlIG9mIHR1 cGxlcyBhbmQgRGF0dW1zLgorICoKKyAqIFRoaXMgbW9kdWxlIGhhbmRsZXMgdGVtcG9yYXJ5IHN0 b3JhZ2Ugb2YgZWl0aGVyIHR1cGxlcyBvciBzaW5nbGUKKyAqIERhdHVtIHZhbHVlcyBmb3IgcHVy cG9zZXMgc3VjaCBhcyBNYXRlcmlhbGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0Y2gKKyAqIGZpbGVz LCBldGMuIEl0IGlzIGVzc2VudGlhbGx5IGEgZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNv cnQuYzsKKyAqIGl0IGRvZXMgbm8gc29ydGluZyBvZiB0dXBsZXMgYnV0IGNhbiBvbmx5IHN0b3Jl IGFuZCByZWd1cmdpdGF0ZSBhIHNlcXVlbmNlCisgKiBvZiB0dXBsZXMuICBIb3dldmVyLCBiZWNh dXNlIG5vIHNvcnQgaXMgcmVxdWlyZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3RhcnQKKyAqIHJlYWRp bmcgdGhlIHNlcXVlbmNlIGJlZm9yZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRlbi4KKyAqCisgKiBU aGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGN1cnNvcnMsIGJlY2F1c2UgaXQgYWxsb3dz IHJhbmRvbSBhY2Nlc3MKKyAqIHdpdGhpbiB0aGUgYWxyZWFkeS1zY2FubmVkIHBvcnRpb24gb2Yg YSBxdWVyeSB3aXRob3V0IGhhdmluZyB0byBwcm9jZXNzCisgKiB0aGUgdW5kZXJseWluZyBzY2Fu IHRvIGNvbXBsZXRpb24uCiAgKgotICogVGhpcyBtb2R1bGUgaGFuZGxlcyB0ZW1wb3Jhcnkgc3Rv cmFnZSBvZiB0dXBsZXMgZm9yIHB1cnBvc2VzIHN1Y2gKLSAqIGFzIE1hdGVyaWFsaXplIG5vZGVz LCBoYXNoam9pbiBiYXRjaCBmaWxlcywgZXRjLiAgSXQgaXMgZXNzZW50aWFsbHkKLSAqIGEgZHVt YmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNvcnQuYzsgaXQgZG9lcyBubyBzb3J0aW5nIG9mIHR1 cGxlcwotICogYnV0IGNhbiBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBhIHNlcXVlbmNlIG9m IHR1cGxlcy4gIEhvd2V2ZXIsCi0gKiBiZWNhdXNlIG5vIHNvcnQgaXMgcmVxdWlyZWQsIGl0IGlz IGFsbG93ZWQgdG8gc3RhcnQgcmVhZGluZyB0aGUgc2VxdWVuY2UKLSAqIGJlZm9yZSBpdCBoYXMg YWxsIGJlZW4gd3JpdHRlbi4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY3Vyc29y cywKLSAqIGJlY2F1c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3Mgd2l0aGluIHRoZSBhbHJlYWR5 LXNjYW5uZWQgcG9ydGlvbiBvZgotICogYSBxdWVyeSB3aXRob3V0IGhhdmluZyB0byBwcm9jZXNz IHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KICAqIEFsc28sIGl0IGlzIHBvc3Np YmxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgaW5kZXBlbmRlbnQgcmVhZCBwb2ludGVycy4KICAqCiAg KiBBIHRlbXBvcmFyeSBmaWxlIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBkYXRhIGlmIGl0IGV4Y2Vl ZHMgdGhlCkBAIC02MSw2ICs2NCw4IEBACiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZmZpbGUuaCIKKyNp bmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVzb3duZXIuaCIKIApA QCAtMTE1LDE2ICsxMjAsMTUgQEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogCUJ1ZkZpbGUgICAg Km15ZmlsZTsJCQkvKiB1bmRlcmx5aW5nIGZpbGUsIG9yIE5VTEwgaWYgbm9uZSAqLwogCU1lbW9y eUNvbnRleHQgY29udGV4dDsJCS8qIG1lbW9yeSBjb250ZXh0IGZvciBob2xkaW5nIHR1cGxlcyAq LwogCVJlc291cmNlT3duZXIgcmVzb3duZXI7CQkvKiByZXNvd25lciBmb3IgaG9sZGluZyB0ZW1w IGZpbGVzICovCisJT2lkCQkJZGF0dW1UeXBlOwkJLyogSW52YWxpZE9pZCBvciBvaWQgb2YgRGF0 dW0ncyB0byBiZSBzdG9yZWQgKi8KKwlpbnQxNgkJZGF0dW1UeXBlTGVuOwkvKiB0eXBlbGVuIG9m IHRoYXQgRGF0dW0gKi8KKwlib29sCQlkYXR1bVR5cGVCeVZhbDsgLyogYnktdmFsdWUgb2YgdGhh dCBhdHVtICovCiAKIAkvKgogCSAqIFRoZXNlIGZ1bmN0aW9uIHBvaW50ZXJzIGRlY291cGxlIHRo ZSByb3V0aW5lcyB0aGF0IG11c3Qga25vdyB3aGF0IGtpbmQKIAkgKiBvZiB0dXBsZSB3ZSBhcmUg aGFuZGxpbmcgZnJvbSB0aGUgcm91dGluZXMgdGhhdCBkb24ndCBuZWVkIHRvIGtub3cgaXQuCiAJ ICogVGhleSBhcmUgc2V0IHVwIGJ5IHRoZSB0dXBsZXN0b3JlX2JlZ2luX3h4eCByb3V0aW5lcy4K IAkgKgotCSAqIChBbHRob3VnaCB0dXBsZXN0b3JlLmMgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMg aGVhcCB0dXBsZXMsIEkndmUgY29waWVkCi0JICogdGhpcyBwYXJ0IG9mIHR1cGxlc29ydC5jIHNv IHRoYXQgZXh0ZW5zaW9uIHRvIG90aGVyIGtpbmRzIG9mIG9iamVjdHMKLQkgKiB3aWxsIGJlIGVh c3kgaWYgaXQncyBldmVyIG5lZWRlZC4pCi0JICoKIAkgKiBGdW5jdGlvbiB0byBjb3B5IGEgc3Vw cGxpZWQgaW5wdXQgdHVwbGUgaW50byBwYWxsb2MnZCBzcGFjZS4gKE5COiB3ZQogCSAqIGFzc3Vt ZSB0aGF0IGEgc2luZ2xlIHBmcmVlKCkgaXMgZW5vdWdoIHRvIHJlbGVhc2UgdGhlIHR1cGxlIGxh dGVyLCBzbwogCSAqIHRoZSByZXByZXNlbnRhdGlvbiBtdXN0IGJlICJmbGF0IiBpbiBvbmUgcGFs bG9jIGNodW5rLikgc3RhdGUtPmF2YWlsTWVtCkBAIC0xNDMsMTIgKzE0NywxOCBAQCBzdHJ1Y3Qg VHVwbGVzdG9yZXN0YXRlCiAKIAkvKgogCSAqIEZ1bmN0aW9uIHRvIHJlYWQgYSBzdG9yZWQgdHVw bGUgZnJvbSB0YXBlIGJhY2sgaW50byBtZW1vcnkuICdsZW4nIGlzCi0JICogdGhlIGFscmVhZHkt cmVhZCBsZW5ndGggb2YgdGhlIHN0b3JlZCB0dXBsZS4gIENyZWF0ZSBhbmQgcmV0dXJuIGEKLQkg KiBwYWxsb2MnZCBjb3B5LCBhbmQgZGVjcmVhc2Ugc3RhdGUtPmF2YWlsTWVtIGJ5IHRoZSBhbW91 bnQgb2YgbWVtb3J5Ci0JICogc3BhY2UgY29uc3VtZWQuCisJICogdGhlIGFscmVhZHkta25vd24g KHJlYWQgb2YgY29uc3RhbnQpIGxlbmd0aCBvZiB0aGUgc3RvcmVkIHR1cGxlLgorCSAqIENyZWF0 ZSBhbmQgcmV0dXJuIGEgcGFsbG9jJ2QgY29weSwgYW5kIGRlY3JlYXNlIHN0YXRlLT5hdmFpbE1l bSBieSB0aGUKKwkgKiBhbW91bnQgb2YgbWVtb3J5IHNwYWNlIGNvbnN1bWVkLgogCSAqLwogCXZv aWQJICAgKigqcmVhZHR1cCkgKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBs ZW4pOwogCisJLyoKKwkgKiBGdW5jdGlvbiB0byBnZXQgbGVuZ2ggb2YgdHVwbGUgZnJvbSB0YXBl LiBVc2VkIHRvIHByb3ZpZGUgJ2xlbicgYXJndW1lbnQKKwkgKiBmb3IgcmVhZHR1cCAoc2VlIGFi b3ZlKS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQoKmxlbnR1cCkoVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgYm9vbCBlb2ZPSyk7CisKIAkvKgogCSAqIFRoaXMgYXJyYXkgaG9sZHMgcG9pbnRlcnMgdG8g dHVwbGVzIGluIG1lbW9yeSBpZiB3ZSBhcmUgaW4gc3RhdGUgSU5NRU0uCiAJICogSW4gc3RhdGVz IFdSSVRFRklMRSBhbmQgUkVBREZJTEUgaXQncyBub3QgdXNlZC4KQEAgLTE4NSw2ICsxOTUsNyBA QCBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlCiAjZGVmaW5lIENPUFlUVVAoc3RhdGUsdHVwKQkoKCoo c3RhdGUpLT5jb3B5dHVwKSAoc3RhdGUsIHR1cCkpCiAjZGVmaW5lIFdSSVRFVFVQKHN0YXRlLHR1 cCkgKCgqKHN0YXRlKS0+d3JpdGV0dXApIChzdGF0ZSwgdHVwKSkKICNkZWZpbmUgUkVBRFRVUChz dGF0ZSxsZW4pCSgoKihzdGF0ZSktPnJlYWR0dXApIChzdGF0ZSwgbGVuKSkKKyNkZWZpbmUgTEVO VFVQKHN0YXRlLGVvZk9LKQkoKCooc3RhdGUpLT5sZW50dXApIChzdGF0ZSwgZW9mT0spKQogI2Rl ZmluZSBMQUNLTUVNKHN0YXRlKQkJKChzdGF0ZSktPmF2YWlsTWVtIDwgMCkKICNkZWZpbmUgVVNF TUVNKHN0YXRlLGFtdCkJKChzdGF0ZSktPmF2YWlsTWVtIC09IChhbXQpKQogI2RlZmluZSBGUkVF TUVNKHN0YXRlLGFtdCkJKChzdGF0ZSktPmF2YWlsTWVtICs9IChhbXQpKQpAQCAtMTkzLDkgKzIw NCw5IEBAIHN0cnVjdCBUdXBsZXN0b3Jlc3RhdGUKICAqCiAgKiBOT1RFUyBhYm91dCBvbi10YXBl IHJlcHJlc2VudGF0aW9uIG9mIHR1cGxlczoKICAqCi0gKiBXZSByZXF1aXJlIHRoZSBmaXJzdCAi dW5zaWduZWQgaW50IiBvZiBhIHN0b3JlZCB0dXBsZSB0byBiZSB0aGUgdG90YWwgc2l6ZQotICog b24tdGFwZSBvZiB0aGUgdHVwbGUsIGluY2x1ZGluZyBpdHNlbGYgKHNvIGl0IGlzIG5ldmVyIHpl cm8pLgotICogVGhlIHJlbWFpbmRlciBvZiB0aGUgc3RvcmVkIHR1cGxlCisgKiBJbiBjYXNlIG9m IHR1cGxlcyB3ZSB1c2UgZmlyc3QgInVuc2lnbmVkIGludCIgb2YgYSBzdG9yZWQgdHVwbGUKKyAq IHRvIGJlIHRoZSB0b3RhbCBzaXplIG9uLXRhcGUgb2YgdGhlIHR1cGxlLCBpbmNsdWRpbmcgaXRz ZWxmCisgKiAoc28gaXQgaXMgbmV2ZXIgemVybykuIFRoZSByZW1haW5kZXIgb2YgdGhlIHN0b3Jl ZCB0dXBsZQogICogbWF5IG9yIG1heSBub3QgbWF0Y2ggdGhlIGluLW1lbW9yeSByZXByZXNlbnRh dGlvbiBvZiB0aGUgdHVwbGUgLS0tCiAgKiBhbnkgY29udmVyc2lvbiBuZWVkZWQgaXMgdGhlIGpv YiBvZiB0aGUgd3JpdGV0dXAgYW5kIHJlYWR0dXAgcm91dGluZXMuCiAgKgpAQCAtMjA2LDEwICsy MTcsMTMgQEAgc3RydWN0IFR1cGxlc3RvcmVzdGF0ZQogICogc3RhdGUtPmJhY2t3YXJkIGlzIG5v dCBzZXQsIHRoZSB3cml0ZS9yZWFkIHJvdXRpbmVzIG1heSBvbWl0IHRoZSBleHRyYQogICogbGVu Z3RoIHdvcmQuCiAgKgorICogSW4gY2FzZSBvZiBEYXR1bSB3aXRoIGNvbnN0YW50IGxlbmdodCBi b3RoICJ1bnNpZ25lZCBpbnQiIGFyZSBvbW1pdHRlZC4KKyAqCiAgKiB3cml0ZXR1cCBpcyBleHBl Y3RlZCB0byB3cml0ZSBib3RoIGxlbmd0aCB3b3JkcyBhcyB3ZWxsIGFzIHRoZSB0dXBsZQogICog ZGF0YS4gIFdoZW4gcmVhZHR1cCBpcyBjYWxsZWQsIHRoZSB0YXBlIGlzIHBvc2l0aW9uZWQganVz dCBhZnRlciB0aGUKLSAqIGZyb250IGxlbmd0aCB3b3JkOyByZWFkdHVwIG11c3QgcmVhZCB0aGUg dHVwbGUgZGF0YSBhbmQgYWR2YW5jZSBwYXN0Ci0gKiB0aGUgYmFjayBsZW5ndGggd29yZCAoaWYg cHJlc2VudCkuCisgKiBmcm9udCBsZW5ndGggd29yZCAoaWYgaXQgbm90IG9tbWl0dGVkIGxpa2Ug aW4gY2FzZSBvZiBjb250YW50LXNpemUgRGF0dW0pOworICogcmVhZHR1cCBtdXN0IHJlYWQgdGhl IHR1cGxlIGRhdGEgYW5kIGFkdmFuY2UgcGFzdCB0aGUgYmFjayBsZW5ndGggd29yZAorICogKGlm IHByZXNlbnQpLgogICoKICAqIFRoZSB3cml0ZS9yZWFkIHJvdXRpbmVzIGNhbiBtYWtlIHVzZSBv ZiB0aGUgdHVwbGUgZGVzY3JpcHRpb24gZGF0YQogICogc3RvcmVkIGluIHRoZSBUdXBsZXN0b3Jl c3RhdGUgcmVjb3JkLCBpZiBuZWVkZWQuIFRoZXkgYXJlIGFsc28gZXhwZWN0ZWQKQEAgLTI0MSwx MSArMjU1LDE2IEBAIHN0YXRpYyBUdXBsZXN0b3Jlc3RhdGUgKnR1cGxlc3RvcmVfYmVnaW5fY29t bW9uKGludCBlZmxhZ3MsCiBzdGF0aWMgdm9pZCB0dXBsZXN0b3JlX3B1dHR1cGxlX2NvbW1vbihU dXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCB2b2lkICp0dXBsZSk7CiBzdGF0aWMgdm9pZCBkdW1wdHVw bGVzKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUpOwogc3RhdGljIHZvaWQgdHVwbGVzdG9yZV91cGRh dGVtYXgoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGdldGxl bihUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKTsKKworc3RhdGljIHVuc2lnbmVk IGludCBsZW50dXBfaGVhcChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKTsKIHN0 YXRpYyB2b2lkICpjb3B5dHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqdHVw KTsKIHN0YXRpYyB2b2lkIHdyaXRldHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9p ZCAqdHVwKTsKIHN0YXRpYyB2b2lkICpyZWFkdHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgdW5zaWduZWQgaW50IGxlbik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGVudHVwX2RhdHVt KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spOworc3RhdGljIHZvaWQgKmNvcHl0 dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqZGF0dW0pOworc3RhdGljIHZv aWQgd3JpdGV0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdm9pZCAqZGF0dW0pOwor c3RhdGljIHZvaWQgKnJlYWR0dXBfZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgdW5zaWdu ZWQgaW50IGxlbik7CiAKIC8qCiAgKgkJdHVwbGVzdG9yZV9iZWdpbl94eHgKQEAgLTI2OCw2ICsy ODcsMTIgQEAgdHVwbGVzdG9yZV9iZWdpbl9jb21tb24oaW50IGVmbGFncywgYm9vbCBpbnRlclhh Y3QsIGludCBtYXhLQnl0ZXMpCiAJc3RhdGUtPmFsbG93ZWRNZW0gPSBtYXhLQnl0ZXMgKiAoaW50 NjQpIDEwMjQ7CiAJc3RhdGUtPmF2YWlsTWVtID0gc3RhdGUtPmFsbG93ZWRNZW07CiAJc3RhdGUt Pm15ZmlsZSA9IE5VTEw7CisJLyoKKwkgKiBTZXQgRGF0dW0gcmVsYXRlZCBkYXRhIHRvIGludmFs aWQgYnkgZGVmYXVsdC4KKwkgKi8KKwlzdGF0ZS0+ZGF0dW1UeXBlID0gSW52YWxpZE9pZDsKKwlz dGF0ZS0+ZGF0dW1UeXBlTGVuID0gIDA7CisJc3RhdGUtPmRhdHVtVHlwZUJ5VmFsID0gZmFsc2U7 CiAKIAkvKgogCSAqIFRoZSBwYWxsb2MvcGZyZWUgcGF0dGVybiBmb3IgdHVwbGUgbWVtb3J5IGlz IGluIGEgRklGTyBwYXR0ZXJuLiAgQQpAQCAtMzQ1LDYgKzM3MCwzNiBAQCB0dXBsZXN0b3JlX2Jl Z2luX2hlYXAoYm9vbCByYW5kb21BY2Nlc3MsIGJvb2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5dGVz KQogCXN0YXRlLT5jb3B5dHVwID0gY29weXR1cF9oZWFwOwogCXN0YXRlLT53cml0ZXR1cCA9IHdy aXRldHVwX2hlYXA7CiAJc3RhdGUtPnJlYWR0dXAgPSByZWFkdHVwX2hlYXA7CisJc3RhdGUtPmxl bnR1cCA9IGxlbnR1cF9oZWFwOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogVGhlIHNh bWUgYXMgdHVwbGVzdG9yZV9iZWdpbl9oZWFwIGJ1dCBjcmVhdGUgc3RvcmUgZm9yIERhdHVtIHZh bHVlcy4KKyAqLworVHVwbGVzdG9yZXN0YXRlICoKK3R1cGxlc3RvcmVfYmVnaW5fZGF0dW0oT2lk IGRhdHVtVHlwZSwgYm9vbCByYW5kb21BY2Nlc3MsIGJvb2wgaW50ZXJYYWN0LCBpbnQgbWF4S0J5 dGVzKQoreworCVR1cGxlc3RvcmVzdGF0ZSAqc3RhdGU7CisJaW50CQkJZWZsYWdzOworCisJLyoK KwkgKiBUaGlzIGludGVycHJldGF0aW9uIG9mIHRoZSBtZWFuaW5nIG9mIHJhbmRvbUFjY2VzcyBp cyBjb21wYXRpYmxlIHdpdGgKKwkgKiB0aGUgcHJlLTguMyBiZWhhdmlvciBvZiB0dXBsZXN0b3Jl cy4KKwkgKi8KKwllZmxhZ3MgPSByYW5kb21BY2Nlc3MgPworCQkoRVhFQ19GTEFHX0JBQ0tXQVJE IHwgRVhFQ19GTEFHX1JFV0lORCkgOgorCQkoRVhFQ19GTEFHX1JFV0lORCk7CisKKwlzdGF0ZSA9 IHR1cGxlc3RvcmVfYmVnaW5fY29tbW9uKGVmbGFncywgaW50ZXJYYWN0LCBtYXhLQnl0ZXMpOwor CXN0YXRlLT5kYXR1bVR5cGUgPSBkYXR1bVR5cGU7CisJZ2V0X3R5cGxlbmJ5dmFsKHN0YXRlLT5k YXR1bVR5cGUsICZzdGF0ZS0+ZGF0dW1UeXBlTGVuLCAmc3RhdGUtPmRhdHVtVHlwZUJ5VmFsKTsK KworCXN0YXRlLT5jb3B5dHVwID0gY29weXR1cF9kYXR1bTsKKwlzdGF0ZS0+d3JpdGV0dXAgPSB3 cml0ZXR1cF9kYXR1bTsKKwlzdGF0ZS0+cmVhZHR1cCA9IHJlYWR0dXBfZGF0dW07CisJc3RhdGUt PmxlbnR1cCA9IGxlbnR1cF9kYXR1bTsKIAogCXJldHVybiBzdGF0ZTsKIH0KQEAgLTQ0MywxNiAr NDk4LDE5IEBAIHR1cGxlc3RvcmVfY2xlYXIoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSkKIAl7CiAJ CWludDY0CQlhdmFpbE1lbSA9IHN0YXRlLT5hdmFpbE1lbTsKIAotCQkvKgotCQkgKiBCZWxvdywg d2UgcmVzZXQgdGhlIG1lbW9yeSBjb250ZXh0IGZvciBzdG9yaW5nIHR1cGxlcy4gIFRvIHNhdmUK LQkJICogZnJvbSBoYXZpbmcgdG8gYWx3YXlzIGNhbGwgR2V0TWVtb3J5Q2h1bmtTcGFjZSgpIG9u IGFsbCBzdG9yZWQKLQkJICogdHVwbGVzLCB3ZSBhZGp1c3QgdGhlIGF2YWlsTWVtIHRvIGZvcmdl dCBhbGwgdGhlIHR1cGxlcyBhbmQganVzdAotCQkgKiByZWNhbGwgVVNFTUVNIGZvciB0aGUgc3Bh Y2UgdXNlZCBieSB0aGUgbWVtdHVwbGVzIGFycmF5LiAgSGVyZSB3ZQotCQkgKiBqdXN0IEFzc2Vy dCB0aGF0J3MgY29ycmVjdCBhbmQgdGhlIG1lbW9yeSB0cmFja2luZyBoYXNuJ3QgZ29uZQotCQkg KiB3cm9uZyBhbnl3aGVyZS4KLQkJICovCi0JCWZvciAoaSA9IHN0YXRlLT5tZW10dXBkZWxldGVk OyBpIDwgc3RhdGUtPm1lbXR1cGNvdW50OyBpKyspCi0JCQlhdmFpbE1lbSArPSBHZXRNZW1vcnlD aHVua1NwYWNlKHN0YXRlLT5tZW10dXBsZXNbaV0pOworCQlpZiAoIXN0YXRlLT5kYXR1bVR5cGVC eVZhbCkKKwkJeworCQkJLyoKKwkJCSAqIEJlbG93LCB3ZSByZXNldCB0aGUgbWVtb3J5IGNvbnRl eHQgZm9yIHN0b3JpbmcgdHVwbGVzLiAgVG8gc2F2ZQorCQkJICogZnJvbSBoYXZpbmcgdG8gYWx3 YXlzIGNhbGwgR2V0TWVtb3J5Q2h1bmtTcGFjZSgpIG9uIGFsbCBzdG9yZWQKKwkJCSAqIHR1cGxl cywgd2UgYWRqdXN0IHRoZSBhdmFpbE1lbSB0byBmb3JnZXQgYWxsIHRoZSB0dXBsZXMgYW5kIGp1 c3QKKwkJCSAqIHJlY2FsbCBVU0VNRU0gZm9yIHRoZSBzcGFjZSB1c2VkIGJ5IHRoZSBtZW10dXBs ZXMgYXJyYXkuICBIZXJlIHdlCisJCQkgKiBqdXN0IEFzc2VydCB0aGF0J3MgY29ycmVjdCBhbmQg dGhlIG1lbW9yeSB0cmFja2luZyBoYXNuJ3QgZ29uZQorCQkJICogd3JvbmcgYW55d2hlcmUuCisJ CQkgKi8KKwkJCWZvciAoaSA9IHN0YXRlLT5tZW10dXBkZWxldGVkOyBpIDwgc3RhdGUtPm1lbXR1 cGNvdW50OyBpKyspCisJCQkJYXZhaWxNZW0gKz0gR2V0TWVtb3J5Q2h1bmtTcGFjZShzdGF0ZS0+ bWVtdHVwbGVzW2ldKTsKKwkJfQogCiAJCWF2YWlsTWVtICs9IEdldE1lbW9yeUNodW5rU3BhY2Uo c3RhdGUtPm1lbXR1cGxlcyk7CiAKQEAgLTc3Niw2ICs4MzQsMjUgQEAgdHVwbGVzdG9yZV9wdXR0 dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBIZWFwVHVwbGUgdHVwbGUpCiAJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7CiB9CiAKKy8qCisgKiBMaWtlIHR1cGxlc3RvcmVfcHV0dHVw bGVzbG90IGJ1dCBmb3Igc2luZ2xlIERhdHVtLgorICovCit2b2lkCit0dXBsZXN0b3JlX3B1dGRh dHVtKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIERhdHVtIGRhdHVtKQoreworCU1lbW9yeUNvbnRl eHQgb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5jb250ZXh0KTsKKworCS8q CisJICogQ29weSB0aGUgRGF0dW0uICAoTXVzdCBkbyB0aGlzIGV2ZW4gaW4gV1JJVEVGSUxFIGNh c2UuICBOb3RlIHRoYXQKKwkgKiBDT1BZVFVQIGluY2x1ZGVzIFVTRU1FTSwgc28gd2UgbmVlZG4n dCBkbyB0aGF0IGhlcmUuKQorCSAqLworCWRhdHVtID0gUG9pbnRlckdldERhdHVtKENPUFlUVVAo c3RhdGUsIERhdHVtR2V0UG9pbnRlcihkYXR1bSkpKTsKKworCXR1cGxlc3RvcmVfcHV0dHVwbGVf Y29tbW9uKHN0YXRlLCBEYXR1bUdldFBvaW50ZXIoZGF0dW0pKTsKKworCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjeHQpOworfQorCiAvKgogICogU2ltaWxhciB0byB0dXBsZXN0b3JlX3B1dHR1 cGxlKCksIGJ1dCB3b3JrIGZyb20gdmFsdWVzICsgbnVsbHMgYXJyYXlzLgogICogVGhpcyBhdm9p ZHMgYW4gZXh0cmEgdHVwbGUtY29uc3RydWN0aW9uIG9wZXJhdGlvbi4KQEAgLTEwMjcsMTAgKzEx MDQsMTAgQEAgdHVwbGVzdG9yZV9nZXR0dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29s IGZvcndhcmQsCiAJCQkvKiBGQUxMVEhST1VHSCAqLwogCiAJCWNhc2UgVFNTX1JFQURGSUxFOgot CQkJKnNob3VsZF9mcmVlID0gdHJ1ZTsKKwkJCSpzaG91bGRfZnJlZSA9ICFzdGF0ZS0+ZGF0dW1U eXBlQnlWYWw7CiAJCQlpZiAoZm9yd2FyZCkKIAkJCXsKLQkJCQlpZiAoKHR1cGxlbiA9IGdldGxl bihzdGF0ZSwgdHJ1ZSkpICE9IDApCisJCQkJaWYgKCh0dXBsZW4gPSBMRU5UVVAoc3RhdGUsIHRy dWUpKSAhPSAwKQogCQkJCXsKIAkJCQkJdHVwID0gUkVBRFRVUChzdGF0ZSwgdHVwbGVuKTsKIAkJ CQkJcmV0dXJuIHR1cDsKQEAgLTEwNTksNyArMTEzNiw3IEBAIHR1cGxlc3RvcmVfZ2V0dHVwbGUo VHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAogCQkJCUFzc2VydCghc3RhdGUt PnRydW5jYXRlZCk7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9Ci0JCQl0dXBsZW4gPSBnZXRsZW4o c3RhdGUsIGZhbHNlKTsKKwkJCXR1cGxlbiA9IExFTlRVUChzdGF0ZSwgZmFsc2UpOwogCiAJCQlp ZiAocmVhZHB0ci0+ZW9mX3JlYWNoZWQpCiAJCQl7CkBAIC0xMDkwLDcgKzExNjcsNyBAQCB0dXBs ZXN0b3JlX2dldHR1cGxlKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCwKIAkJ CQkJQXNzZXJ0KCFzdGF0ZS0+dHJ1bmNhdGVkKTsKIAkJCQkJcmV0dXJuIE5VTEw7CiAJCQkJfQot CQkJCXR1cGxlbiA9IGdldGxlbihzdGF0ZSwgZmFsc2UpOworCQkJCXR1cGxlbiA9IExFTlRVUChz dGF0ZSwgZmFsc2UpOwogCQkJfQogCiAJCQkvKgpAQCAtMTE1Miw2ICsxMjI5LDI1IEBAIHR1cGxl c3RvcmVfZ2V0dHVwbGVzbG90KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZm9yd2FyZCwK IAl9CiB9CiAKK2V4dGVybiBib29sIHR1cGxlc3RvcmVfZ2V0ZGF0dW0oVHVwbGVzdG9yZXN0YXRl ICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAorCQkJCQkJCQlib29sICpzaG91bGRfZnJlZSwgRGF0dW0g KnJlc3VsdCkKK3sKKwlEYXR1bSBkYXR1bTsKKwkqc2hvdWxkX2ZyZWUgPSBmYWxzZTsKKworCWRh dHVtID0gKERhdHVtKSB0dXBsZXN0b3JlX2dldHR1cGxlKHN0YXRlLCBmb3J3YXJkLCBzaG91bGRf ZnJlZSk7CisJaWYgKGRhdHVtKQorCXsKKwkJKnJlc3VsdCA9ZGF0dW07CisJCXJldHVybiB0cnVl OworCX0KKwllbHNlCisJeworCQkqcmVzdWx0ID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCQly ZXR1cm4gZmFsc2U7CisJfQorfQorCiAvKgogICogdHVwbGVzdG9yZV9hZHZhbmNlIC0gZXhwb3J0 ZWQgZnVuY3Rpb24gdG8gYWRqdXN0IHBvc2l0aW9uIHdpdGhvdXQgZmV0Y2hpbmcKICAqCkBAIC0x NDYwLDggKzE1NTYsMTEgQEAgdHVwbGVzdG9yZV90cmltKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUp CiAJLyogUmVsZWFzZSBuby1sb25nZXItbmVlZGVkIHR1cGxlcyAqLwogCWZvciAoaSA9IHN0YXRl LT5tZW10dXBkZWxldGVkOyBpIDwgbnJlbW92ZTsgaSsrKQogCXsKLQkJRlJFRU1FTShzdGF0ZSwg R2V0TWVtb3J5Q2h1bmtTcGFjZShzdGF0ZS0+bWVtdHVwbGVzW2ldKSk7Ci0JCXBmcmVlKHN0YXRl LT5tZW10dXBsZXNbaV0pOworCQlpZiAoIXN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwkJeworCQkJ RlJFRU1FTShzdGF0ZSwgR2V0TWVtb3J5Q2h1bmtTcGFjZShzdGF0ZS0+bWVtdHVwbGVzW2ldKSk7 CisJCQlwZnJlZShzdGF0ZS0+bWVtdHVwbGVzW2ldKTsKKwkJfQogCQlzdGF0ZS0+bWVtdHVwbGVz W2ldID0gTlVMTDsKIAl9CiAJc3RhdGUtPm1lbXR1cGRlbGV0ZWQgPSBucmVtb3ZlOwpAQCAtMTU1 NiwyNSArMTY1NSw2IEBAIHR1cGxlc3RvcmVfaW5fbWVtb3J5KFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUpCiAJcmV0dXJuIChzdGF0ZS0+c3RhdHVzID09IFRTU19JTk1FTSk7CiB9CiAKLQotLyoKLSAq IFRhcGUgaW50ZXJmYWNlIHJvdXRpbmVzCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludAotZ2V0 bGVuKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCi17Ci0JdW5zaWduZWQgaW50 IGxlbjsKLQlzaXplX3QJCW5ieXRlczsKLQotCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVFT0Yo c3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKLQlpZiAobmJ5dGVzID09 IDApCi0JCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIGxlbjsKLX0KLQotCiAvKgogICogUm91 dGluZXMgc3BlY2lhbGl6ZWQgZm9yIEhlYXBUdXBsZSBjYXNlCiAgKgpAQCAtMTU4NSw2ICsxNjY1 LDE5IEBAIGdldGxlbihUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBib29sIGVvZk9LKQogICogdG8g d3JpdGUgdGhhdCBzZXBhcmF0ZWx5LgogICovCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2xlbnR1 cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGJvb2wgZW9mT0spCit7CisJdW5zaWduZWQg aW50IGxlbjsKKwlzaXplX3QJCW5ieXRlczsKKworCW5ieXRlcyA9IEJ1ZkZpbGVSZWFkTWF5YmVF T0Yoc3RhdGUtPm15ZmlsZSwgJmxlbiwgc2l6ZW9mKGxlbiksIGVvZk9LKTsKKwlpZiAobmJ5dGVz ID09IDApCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGxlbjsKK30KKwogc3RhdGljIHZv aWQgKgogY29weXR1cF9oZWFwKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQgKnR1cCkKIHsK QEAgLTE2MzEsMyArMTcyNCw5OCBAQCByZWFkdHVwX2hlYXAoVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgdW5zaWduZWQgaW50IGxlbikKIAkJQnVmRmlsZVJlYWRFeGFjdChzdGF0ZS0+bXlmaWxlLCAm dHVwbGVuLCBzaXplb2YodHVwbGVuKSk7CiAJcmV0dXJuIHR1cGxlOwogfQorCisvKgorICogUm91 dGluZXMgc3BlY2lhbGl6ZWQgZm9yIERhdHVtIGNhc2UuCisgKgorICogSGFuZGxlcyBib3RoIGZp eGVkIGFuZCB2YXJpYWJsZS1sZW5ndGggRGF0dW1zIGVmZmljaWVudGx5OgorICogLSBGaXhlZC1s ZW5ndGg6IHN0b3JlcyByYXcgYnl0ZXMgd2l0aG91dCBsZW5ndGggcHJlZml4CisgKiAtIFZhcmlh YmxlLWxlbmd0aDogaW5jbHVkZXMgbGVuZ3RoIHByZWZpeCAoYW5kIHN1ZmZpeCBpZiBiYWNrd2Fy ZCBzY2FuKQorICogLSBCeS12YWx1ZSB0eXBlcyBoYW5kbGVkIGlubGluZSB3aXRob3V0IGV4dHJh IGNvcHlpbmcKKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50CitsZW50dXBfZGF0dW0oVHVwbGVz dG9yZXN0YXRlICpzdGF0ZSwgYm9vbCBlb2ZPSykKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCXNp emVfdAkJbmJ5dGVzOworCisJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5cGUgIT0gSW52YWxpZE9pZCk7 CisKKwlpZiAoc3RhdGUtPmRhdHVtVHlwZUxlbiA+IDApCisJCXJldHVybiBzdGF0ZS0+ZGF0dW1U eXBlTGVuOworCisJbmJ5dGVzID0gQnVmRmlsZVJlYWRNYXliZUVPRihzdGF0ZS0+bXlmaWxlLCAm bGVuLCBzaXplb2YobGVuKSwgZW9mT0spOworCWlmIChuYnl0ZXMgPT0gMCkKKwkJcmV0dXJuIDA7 CisJZWxzZQorCQlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCAqCitjb3B5dHVwX2RhdHVt KFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHZvaWQqIGRhdHVtKQoreworCUFzc2VydChzdGF0ZS0+ ZGF0dW1UeXBlICE9IEludmFsaWRPaWQpOworCWlmIChzdGF0ZS0+ZGF0dW1UeXBlQnlWYWwpCisJ CXJldHVybiBEYXR1bUdldFBvaW50ZXIoUG9pbnRlckdldERhdHVtKGRhdHVtKSk7CisJZWxzZQor CXsKKwkJRGF0dW0gZCA9IGRhdHVtQ29weShQb2ludGVyR2V0RGF0dW0oZGF0dW0pLCBzdGF0ZS0+ ZGF0dW1UeXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCQlVU0VNRU0oc3RhdGUsIEdl dE1lbW9yeUNodW5rU3BhY2UoRGF0dW1HZXRQb2ludGVyKGQpKSk7CisJCXJldHVybiBEYXR1bUdl dFBvaW50ZXIoZCk7CisJfQorfQorCitzdGF0aWMgdm9pZAord3JpdGV0dXBfZGF0dW0oVHVwbGVz dG9yZXN0YXRlICpzdGF0ZSwgdm9pZCogZGF0dW0pCit7CisJQXNzZXJ0KHN0YXRlLT5kYXR1bVR5 cGUgIT0gSW52YWxpZE9pZCk7CisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkKKwl7CisJCUFz c2VydChzdGF0ZS0+ZGF0dW1UeXBlTGVuID4gMCk7CisJCUJ1ZkZpbGVXcml0ZShzdGF0ZS0+bXlm aWxlLCBkYXR1bSwgc3RhdGUtPmRhdHVtVHlwZUxlbik7CisJfQorCWVsc2UKKwl7CisJCVNpemUg c2l6ZSA9IHN0YXRlLT5kYXR1bVR5cGVMZW47CisJCWlmIChzdGF0ZS0+ZGF0dW1UeXBlTGVuIDwg MCkKKwkJeworCQkJQnVmRmlsZVdyaXRlKHN0YXRlLT5teWZpbGUsICZzaXplLCBzaXplb2Yoc2l6 ZSkpOworCQkJc2l6ZSA9IGRhdHVtR2V0U2l6ZShQb2ludGVyR2V0RGF0dW0oZGF0dW0pLCBzdGF0 ZS0+ZGF0dW1UeXBlQnlWYWwsIHN0YXRlLT5kYXR1bVR5cGVMZW4pOworCQl9CisKKwkJQnVmRmls ZVdyaXRlKHN0YXRlLT5teWZpbGUsIGRhdHVtLCBzaXplKTsKKworCQkvKiBuZWVkIHRyYWlsaW5n IGxlbmd0aCB3b3JkPyAqLworCQlpZiAoc3RhdGUtPmJhY2t3YXJkICYmIHN0YXRlLT5kYXR1bVR5 cGVMZW4gPCAwKQorCQkJQnVmRmlsZVdyaXRlKHN0YXRlLT5teWZpbGUsICZzaXplLCBzaXplb2Yo c2l6ZSkpOworCisJCUZSRUVNRU0oc3RhdGUsIEdldE1lbW9yeUNodW5rU3BhY2UoZGF0dW0pKTsK KwkJcGZyZWUoZGF0dW0pOworCX0KK30KKworc3RhdGljIHZvaWQqCityZWFkdHVwX2RhdHVtKFR1 cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBsZW4pCit7CisJQXNzZXJ0KHN0YXRl LT5kYXR1bVR5cGUgIT0gSW52YWxpZE9pZCk7CisJaWYgKHN0YXRlLT5kYXR1bVR5cGVCeVZhbCkK Kwl7CisJCURhdHVtIGRhdHVtID0gUG9pbnRlckdldERhdHVtKE5VTEwpOworCQlBc3NlcnQoc3Rh dGUtPmRhdHVtVHlwZUxlbiA+IDApOworCQlBc3NlcnQobGVuID09IHN0YXRlLT5kYXR1bVR5cGVM ZW4pOworCQlCdWZGaWxlUmVhZEV4YWN0KHN0YXRlLT5teWZpbGUsICZkYXR1bSwgc3RhdGUtPmRh dHVtVHlwZUxlbik7CisJCXJldHVybiBEYXR1bUdldFBvaW50ZXIoZGF0dW0pOworCX0KKwllbHNl CisJeworCQlEYXR1bSAqZGF0dW1zID0gcGFsbG9jKGxlbik7CisJCUJ1ZkZpbGVSZWFkRXhhY3Qo c3RhdGUtPm15ZmlsZSwgJmRhdHVtcywgbGVuKTsKKworCQkvKiBuZWVkIHRyYWlsaW5nIGxlbmd0 aCB3b3JkPyAqLworCQlpZiAoc3RhdGUtPmJhY2t3YXJkICYmIHN0YXRlLT5kYXR1bVR5cGVMZW4g PCAwKQorCQkJQnVmRmlsZVJlYWRFeGFjdChzdGF0ZS0+bXlmaWxlLCAmbGVuLCBzaXplb2YobGVu KSk7CisKKwkJcmV0dXJuIERhdHVtR2V0UG9pbnRlcigqZGF0dW1zKTsKKwl9Cit9CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS91dGlscy90dXBsZXN0b3JlLmggYi9zcmMvaW5jbHVkZS91dGlscy90 dXBsZXN0b3JlLmgKaW5kZXggODY1YmE3YjgyNjUuLjAzNDFjNDdiODUxIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy90dXBsZXN0b3JlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvdHVw bGVzdG9yZS5oCkBAIC0xLDE3ICsxLDE4IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiB0 dXBsZXN0b3JlLmgKLSAqCSAgR2VuZXJhbGl6ZWQgcm91dGluZXMgZm9yIHRlbXBvcmFyeSB0dXBs ZSBzdG9yYWdlLgorICoJICBHZW5lcmFsaXplZCByb3V0aW5lcyBmb3IgdGVtcG9yYXJ5IHN0b3Jh Z2Ugb2YgdHVwbGVzIGFuZCBEYXR1bXMuCiAgKgotICogVGhpcyBtb2R1bGUgaGFuZGxlcyB0ZW1w b3Jhcnkgc3RvcmFnZSBvZiB0dXBsZXMgZm9yIHB1cnBvc2VzIHN1Y2gKLSAqIGFzIE1hdGVyaWFs aXplIG5vZGVzLCBoYXNoam9pbiBiYXRjaCBmaWxlcywgZXRjLiAgSXQgaXMgZXNzZW50aWFsbHkK LSAqIGEgZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNvcnQuYzsgaXQgZG9lcyBubyBzb3J0 aW5nIG9mIHR1cGxlcwotICogYnV0IGNhbiBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBhIHNl cXVlbmNlIG9mIHR1cGxlcy4gIEhvd2V2ZXIsCi0gKiBiZWNhdXNlIG5vIHNvcnQgaXMgcmVxdWly ZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3RhcnQgcmVhZGluZyB0aGUgc2VxdWVuY2UKLSAqIGJlZm9y ZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRlbi4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBm b3IgY3Vyc29ycywKLSAqIGJlY2F1c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3Mgd2l0aGluIHRo ZSBhbHJlYWR5LXNjYW5uZWQgcG9ydGlvbiBvZgotICogYSBxdWVyeSB3aXRob3V0IGhhdmluZyB0 byBwcm9jZXNzIHRoZSB1bmRlcmx5aW5nIHNjYW4gdG8gY29tcGxldGlvbi4KLSAqIEFsc28sIGl0 IGlzIHBvc3NpYmxlIHRvIHN1cHBvcnQgbXVsdGlwbGUgaW5kZXBlbmRlbnQgcmVhZCBwb2ludGVy cy4KKyAqIFRoaXMgbW9kdWxlIGhhbmRsZXMgdGVtcG9yYXJ5IHN0b3JhZ2Ugb2YgZWl0aGVyIHR1 cGxlcyBvciBzaW5nbGUKKyAqIERhdHVtIHZhbHVlcyBmb3IgcHVycG9zZXMgc3VjaCBhcyBNYXRl cmlhbGl6ZSBub2RlcywgaGFzaGpvaW4gYmF0Y2gKKyAqIGZpbGVzLCBldGMuIEl0IGlzIGVzc2Vu dGlhbGx5IGEgZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0dXBsZXNvcnQuYzsKKyAqIGl0IGRvZXMg bm8gc29ydGluZyBvZiB0dXBsZXMgYnV0IGNhbiBvbmx5IHN0b3JlIGFuZCByZWd1cmdpdGF0ZSBh IHNlcXVlbmNlCisgKiBvZiB0dXBsZXMuICBIb3dldmVyLCBiZWNhdXNlIG5vIHNvcnQgaXMgcmVx dWlyZWQsIGl0IGlzIGFsbG93ZWQgdG8gc3RhcnQKKyAqIHJlYWRpbmcgdGhlIHNlcXVlbmNlIGJl Zm9yZSBpdCBoYXMgYWxsIGJlZW4gd3JpdHRlbi4KKyAqCisgKiBUaGlzIGlzIHBhcnRpY3VsYXJs eSB1c2VmdWwgZm9yIGN1cnNvcnMsIGJlY2F1c2UgaXQgYWxsb3dzIHJhbmRvbSBhY2Nlc3MKKyAq IHdpdGhpbiB0aGUgYWxyZWFkeS1zY2FubmVkIHBvcnRpb24gb2YgYSBxdWVyeSB3aXRob3V0IGhh dmluZyB0byBwcm9jZXNzCisgKiB0aGUgdW5kZXJseWluZyBzY2FuIHRvIGNvbXBsZXRpb24uCiAg KgogICogQSB0ZW1wb3JhcnkgZmlsZSBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgZGF0YSBpZiBpdCBl eGNlZWRzIHRoZQogICogc3BhY2UgbGltaXQgc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIuCkBAIC0z OSwxNCArNDAsMTMgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgVHVwbGVzdG9yZXN0YXRlIFR1cGxl c3RvcmVzdGF0ZTsKIAotLyoKLSAqIEN1cnJlbnRseSB3ZSBvbmx5IG5lZWQgdG8gc3RvcmUgTWlu aW1hbFR1cGxlcywgYnV0IGl0IHdvdWxkIGJlIGVhc3kKLSAqIHRvIHN1cHBvcnQgdGhlIHNhbWUg YmVoYXZpb3IgZm9yIEluZGV4VHVwbGVzIGFuZC9vciBiYXJlIERhdHVtcy4KLSAqLwotCiBleHRl cm4gVHVwbGVzdG9yZXN0YXRlICp0dXBsZXN0b3JlX2JlZ2luX2hlYXAoYm9vbCByYW5kb21BY2Nl c3MsCiAJCQkJCQkJCQkJCSAgYm9vbCBpbnRlclhhY3QsCiAJCQkJCQkJCQkJCSAgaW50IG1heEtC eXRlcyk7CitleHRlcm4gVHVwbGVzdG9yZXN0YXRlICp0dXBsZXN0b3JlX2JlZ2luX2RhdHVtKE9p ZCBkYXR1bVR5cGUsCisJCQkJCQkJCQkJCSBib29sIHJhbmRvbUFjY2VzcywKKwkJCQkJCQkJCQkJ IGJvb2wgaW50ZXJYYWN0LAorCQkJCQkJCQkJCQkgaW50IG1heEtCeXRlcyk7CiAKIGV4dGVybiB2 b2lkIHR1cGxlc3RvcmVfc2V0X2VmbGFncyhUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBpbnQgZWZs YWdzKTsKIApAQCAtNTUsNiArNTUsNyBAQCBleHRlcm4gdm9pZCB0dXBsZXN0b3JlX3B1dHR1cGxl c2xvdChUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLAogZXh0ZXJuIHZvaWQgdHVwbGVzdG9yZV9wdXR0 dXBsZShUdXBsZXN0b3Jlc3RhdGUgKnN0YXRlLCBIZWFwVHVwbGUgdHVwbGUpOwogZXh0ZXJuIHZv aWQgdHVwbGVzdG9yZV9wdXR2YWx1ZXMoVHVwbGVzdG9yZXN0YXRlICpzdGF0ZSwgVHVwbGVEZXNj IHRkZXNjLAogCQkJCQkJCQkgY29uc3QgRGF0dW0gKnZhbHVlcywgY29uc3QgYm9vbCAqaXNudWxs KTsKK2V4dGVybiB2b2lkIHR1cGxlc3RvcmVfcHV0ZGF0dW0oVHVwbGVzdG9yZXN0YXRlICpzdGF0 ZSwgRGF0dW0gZGF0dW0pOwogCiBleHRlcm4gaW50CXR1cGxlc3RvcmVfYWxsb2NfcmVhZF9wb2lu dGVyKFR1cGxlc3RvcmVzdGF0ZSAqc3RhdGUsIGludCBlZmxhZ3MpOwogCkBAIC03Miw2ICs3Myw4 IEBAIGV4dGVybiBib29sIHR1cGxlc3RvcmVfaW5fbWVtb3J5KFR1cGxlc3RvcmVzdGF0ZSAqc3Rh dGUpOwogCiBleHRlcm4gYm9vbCB0dXBsZXN0b3JlX2dldHR1cGxlc2xvdChUdXBsZXN0b3Jlc3Rh dGUgKnN0YXRlLCBib29sIGZvcndhcmQsCiAJCQkJCQkJCQlib29sIGNvcHksIFR1cGxlVGFibGVT bG90ICpzbG90KTsKK2V4dGVybiBib29sIHR1cGxlc3RvcmVfZ2V0ZGF0dW0oVHVwbGVzdG9yZXN0 YXRlICpzdGF0ZSwgYm9vbCBmb3J3YXJkLAorCQkJCQkJCQlib29sICpzaG91bGRfZnJlZSwgRGF0 dW0gKnJlc3VsdCk7CiAKIGV4dGVybiBib29sIHR1cGxlc3RvcmVfYWR2YW5jZShUdXBsZXN0b3Jl c3RhdGUgKnN0YXRlLCBib29sIGZvcndhcmQpOwogCi0tIAoyLjQzLjAKCg== --000000000000ac6d6606432d3652 Content-Type: text/plain; charset="US-ASCII"; name="v26-0006-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Disposition: attachment; filename="v26-0006-Track-and-drop-auxiliary-indexes-in-DROP-REINDEX.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhrw6pex5 RnJvbSA5M2I1ODNkYzM3MjA3YmRkYWY5MTUzMTMzY2VkMjdhNDk4YzdlNzYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAzMSBEZWMgMjAyNCAxNDozNjozMSArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI2IDYvOF0gVHJhY2sgYW5kIGRyb3AgYXV4aWxpYXJ5IGluZGV4ZXMgaW4gRFJPUC9S RUlOREVYCgpEdXJpbmcgY29uY3VycmVudCBpbmRleCBvcGVyYXRpb25zLCBhdXhpbGlhcnkgaW5k ZXhlcyBtYXkgYmUgbGVmdCBhcyBvcnBoYW5lZCBvYmplY3RzIHdoZW4gZXJyb3JzIG9jY3VyIChq dW5rIGF1eGlsaWFyeSBpbmRleGVzKS4KClRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhlIGhhbmRsaW5n IG9mIHN1Y2ggYXV4aWxpYXJ5IGluZGV4ZXM6Ci0gYWRkIGF1eGlsaWFyeUZvckluZGV4SWQgcGFy YW1ldGVyIHRvIGluZGV4X2NyZWF0ZSgpIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG1h aW4gYW5kIGF1eGlsaWFyeSBpbmRleGVzCi0gYXV0b21hdGljYWxseSBkcm9wIGF1eGlsaWFyeSBp bmRleGVzIHdoZW4gdGhlIG1haW4gaW5kZXggaXMgZHJvcHBlZAotIGRlbGV0ZSBqdW5rIGF1eGls aWFyeSBpbmRleGVzIHByb3Blcmx5IGR1cmluZyBSRUlOREVYIG9wZXJhdGlvbnMKLS0tCiBkb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sICAgICAgICAgfCAgMTQgKystCiBkb2Mvc3Jj L3NnbWwvcmVmL3JlaW5kZXguc2dtbCAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvZGVwZW5kZW5jeS5jICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY2F0 YWxvZy9pbmRleC5jICAgICAgICAgICAgICAgIHwgIDcxICsrKysrKysrKystLS0tCiBzcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5jICAgICAgICAgICAgfCAgNTcgKysrKysrKysrKysKIHNy Yy9iYWNrZW5kL2NhdGFsb2cvdG9hc3RpbmcuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYyAgICAgICAgICAgfCAgMzggKysrKysrKy0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICB8ICA0OCArKysrKysrKystCiBz cmMvYmFja2VuZC9ub2Rlcy9tYWtlZnVuY3MuYyAgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9p bmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbm9k ZXMvbWFrZWZ1bmNzLmggICAgICAgICAgICAgIHwgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQgfCAxMDUgKysrKysrKysrKysrKysrKysrKy0tCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsICAgICAgfCAgNTcgKysrKysrKysrKy0K IDE0IGZpbGVzIGNoYW5nZWQsIDM2NyBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9pbmRleC5zZ21sIGIvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbAppbmRleCBiYTM4N2YyODk3Ny4uYmFkMGRmMTA1ZDIg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2luZGV4LnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfaW5kZXguc2dtbApAQCAtNjY4LDEwICs2NjgsMTYgQEAgSW5k ZXhlczoKICAgICAiaWR4X2NjYXV4IiBzdGlyIChjb2wpIElOVkFMSUQKIDwvcHJvZ3JhbWxpc3Rp bmc+CiAKLSAgICBUaGUgcmVjb21tZW5kZWQgcmVjb3ZlcnkKLSAgICBtZXRob2QgaW4gc3VjaCBj YXNlcyBpcyB0byBkcm9wIHRoZXNlIGluZGV4ZXMgYW5kIHRyeSBhZ2FpbiB0byBwZXJmb3JtCi0g ICAgPGNvbW1hbmQ+Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4uIChBbm90aGVy IHBvc3NpYmlsaXR5IGlzCi0gICAgdG8gcmVidWlsZCB0aGUgaW5kZXggd2l0aCA8Y29tbWFuZD5S RUlOREVYIElOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4pLgorICAgIFRoZSByZWNvbW1lbmRl ZCByZWNvdmVyeSBtZXRob2QgaW4gc3VjaCBjYXNlcyBpcyB0byBkcm9wIHRoZSBpbmRleCB3aXRo CisgICAgPGNvbW1hbmQ+RFJPUCBJTkRFWDwvY29tbWFuZD4uIFRoZSBhdXhpbGlhcnkgaW5kZXgg KHN1ZmZpeGVkIHdpdGgKKyAgICA8bGl0ZXJhbD5jY2F1eDwvbGl0ZXJhbD4pIHdpbGwgYmUgYXV0 b21hdGljYWxseSBkcm9wcGVkIHdoZW4gdGhlIG1haW4KKyAgICBpbmRleCBpcyBkcm9wcGVkLiBB ZnRlciBkcm9wcGluZyB0aGUgaW5kZXhlcywgeW91IGNhbiB0cnkgYWdhaW4gdG8gcGVyZm9ybQor ICAgIDxjb21tYW5kPkNSRUFURSBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LiAoQW5vdGhl ciBwb3NzaWJpbGl0eSBpcyB0bworICAgIHJlYnVpbGQgdGhlIGluZGV4IHdpdGggPGNvbW1hbmQ+ UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+LAorICAgIHdoaWNoIHdpbGwgYWxz byBoYW5kbGUgY2xlYW51cCBvZiBhbnkgaW52YWxpZCBhdXhpbGlhcnkgaW5kZXhlcy4pCisgICAg SWYgdGhlIG9ubHkgaW52YWxpZCBpbmRleCBpcyBvbmUgc3VmZml4ZWQgPGxpdGVyYWw+Y2NhdXg8 L2xpdGVyYWw+CisgICAgcmVjb21tZW5kZWQgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1c3QgPGxpdGVy YWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4KKyAgICBmb3IgdGhhdCBpbmRleC4KICAgIDwvcGFyYT4K IAogICAgPHBhcmE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3JlaW5kZXguc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvcmVpbmRleC5zZ21sCmluZGV4IDk3ZjU1MWE1NWE2Li4wMjVmZTM3 YTM3MCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKKysrIGIvZG9j L3NyYy9zZ21sL3JlZi9yZWluZGV4LnNnbWwKQEAgLTQ3NywxMSArNDc3LDE1IEBAIEluZGV4ZXM6 CiAgICAgPGxpdGVyYWw+X2NjbmV3PC9saXRlcmFsPiBvciA8bGl0ZXJhbD5fY2NhdXg8L2xpdGVy YWw+LCB0aGVuIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFuc2llbnQgb3IgYXV4aWxpYXJ5CiAg ICAgaW5kZXggY3JlYXRlZCBkdXJpbmcgdGhlIGNvbmN1cnJlbnQgb3BlcmF0aW9uLCBhbmQgdGhl IHJlY29tbWVuZGVkCiAgICAgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGRyb3AgdGhlc2UgaW5kZXhl cyB1c2luZyA8bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPiwKLSAgICB0aGVuIGF0dGVtcHQg PGNvbW1hbmQ+UkVJTkRFWCBDT05DVVJSRU5UTFk8L2NvbW1hbmQ+IGFnYWluLgorICAgIHRoZW4g YXR0ZW1wdCA8Y29tbWFuZD5SRUlOREVYIENPTkNVUlJFTlRMWTwvY29tbWFuZD4gYWdhaW4uIFRo ZSBhdXhpbGlhcnkgaW5kZXgKKyAgICAoc3VmZml4ZWQgd2l0aCA8bGl0ZXJhbD5fY2NhdXg8L2xp dGVyYWw+KSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZAorICAgIGFsb25nIHdpdGggaXRz IG1haW4gaW5kZXguCiAgICAgSWYgdGhlIGludmFsaWQgaW5kZXggaXMgaW5zdGVhZCBzdWZmaXhl ZCA8bGl0ZXJhbD5fY2NvbGQ8L2xpdGVyYWw+LAogICAgIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBv cmlnaW5hbCBpbmRleCB3aGljaCBjb3VsZCBub3QgYmUgZHJvcHBlZDsKICAgICB0aGUgcmVjb21t ZW5kZWQgcmVjb3ZlcnkgbWV0aG9kIGlzIHRvIGp1c3QgZHJvcCBzYWlkIGluZGV4LCBzaW5jZSB0 aGUKLSAgICByZWJ1aWxkIHByb3BlciBoYXMgYmVlbiBzdWNjZXNzZnVsLgorICAgIHJlYnVpbGQg cHJvcGVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWwuIElmIHRoZSBvbmx5CisgICAgaW52YWxpZCBpbmRl eCBpcyBvbmUgc3VmZml4ZWQgPGxpdGVyYWw+Y2NhdXg8L2xpdGVyYWw+IHJlY29tbWVuZGVkCisg ICAgcmVjb3ZlcnkgbWV0aG9kIGlzIGp1c3QgPGxpdGVyYWw+RFJPUCBJTkRFWDwvbGl0ZXJhbD4g Zm9yIHRoYXQgaW5kZXguCiAgICAgQSBub256ZXJvIG51bWJlciBtYXkgYmUgYXBwZW5kZWQgdG8g dGhlIHN1ZmZpeCBvZiB0aGUgaW52YWxpZCBpbmRleAogICAgIG5hbWVzIHRvIGtlZXAgdGhlbSB1 bmlxdWUsIGxpa2UgPGxpdGVyYWw+X2NjbmV3MTwvbGl0ZXJhbD4sCiAgICAgPGxpdGVyYWw+X2Nj b2xkMjwvbGl0ZXJhbD4sIGV0Yy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvZGVw ZW5kZW5jeS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9kZXBlbmRlbmN5LmMKaW5kZXggN2RkZWQ2 MzRlYjguLmI1NzlkMjZhZmYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVu ZGVuY3kuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYwpAQCAtMjg2LDcg KzI4Niw3IEBAIHBlcmZvcm1EZWxldGlvbihjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsCiAJ ICogQWNxdWlyZSBkZWxldGlvbiBsb2NrIG9uIHRoZSB0YXJnZXQgb2JqZWN0LiAgKElkZWFsbHkg dGhlIGNhbGxlciBoYXMKIAkgKiBkb25lIHRoaXMgYWxyZWFkeSwgYnV0IG1hbnkgcGxhY2VzIGFy ZSBzbG9wcHkgYWJvdXQgaXQuKQogCSAqLwotCUFjcXVpcmVEZWxldGlvbkxvY2sob2JqZWN0LCAw KTsKKwlBY3F1aXJlRGVsZXRpb25Mb2NrKG9iamVjdCwgZmxhZ3MpOwogCiAJLyoKIAkgKiBDb25z dHJ1Y3QgYSBsaXN0IG9mIG9iamVjdHMgdG8gZGVsZXRlIChpZSwgdGhlIGdpdmVuIG9iamVjdCBw bHVzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggNmE0YjM0OGRkMWIuLmZiZWJjNmVkOWFiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9pbmRleC5jCkBAIC03NzUsNiArNzc1LDggQEAgaW5kZXhfY3JlYXRlKFJlbGF0aW9uIGhlYXBS ZWxhdGlvbiwKIAkJICAgKChmbGFncyAmIElOREVYX0NSRUFURV9BRERfQ09OU1RSQUlOVCkgIT0g MCkpOwogCS8qIHBhcnRpdGlvbmVkIGluZGV4ZXMgbXVzdCBuZXZlciBiZSAiYnVpbHQiIGJ5IHRo ZW1zZWx2ZXMgKi8KIAlBc3NlcnQoIXBhcnRpdGlvbmVkIHx8IChmbGFncyAmIElOREVYX0NSRUFU RV9TS0lQX0JVSUxEKSk7CisJLyogaWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCBhbmQgSU5ERVhfQ1JF QVRFX0FVWElMSUFSWSBhcmUgcmVxdWlyZWQgYm90aCBvciBuZWl0aGVyICovCisJQXNzZXJ0KE9p ZElzVmFsaWQoaW5kZXhJbmZvLT5paV9BdXhpbGlhcnlGb3JJbmRleElkKSA9PSBhdXhpbGlhcnkp OwogCiAJcmVsa2luZCA9IHBhcnRpdGlvbmVkID8gUkVMS0lORF9QQVJUSVRJT05FRF9JTkRFWCA6 IFJFTEtJTkRfSU5ERVg7CiAJaXNfZXhjbHVzaW9uID0gKGluZGV4SW5mby0+aWlfRXhjbHVzaW9u T3BzICE9IE5VTEwpOwpAQCAtMTE4MCw2ICsxMTgyLDE1IEBAIGluZGV4X2NyZWF0ZShSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAJCQlyZWNvcmREZXBlbmRlbmN5T24oJm15c2VsZiwgJnJlZmVyZW5j ZWQsIERFUEVOREVOQ1lfUEFSVElUSU9OX1NFQyk7CiAJCX0KIAorCQkvKgorCQkgKiBSZWNvcmQg ZGVwZW5kZW5jeSBvbiB0aGUgbWFpbiBpbmRleCBpbiBjYXNlIG9mIGF1eGlsaWFyeSBpbmRleC4K KwkJICovCisJCWlmIChPaWRJc1ZhbGlkKGluZGV4SW5mby0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJ ZCkpCisJCXsKKwkJCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwgUmVsYXRpb25SZWxhdGlv bklkLCBpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvckluZGV4SWQpOworCQkJcmVjb3JkRGVwZW5k ZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCQl9CisKIAkJ LyogcGxhY2Vob2xkZXIgZm9yIG5vcm1hbCBkZXBlbmRlbmNpZXMgKi8KIAkJYWRkcnMgPSBuZXdf b2JqZWN0X2FkZHJlc3NlcygpOwogCkBAIC0xNDEyLDcgKzE0MjMsOCBAQCBpbmRleF9jb25jdXJy ZW50bHlfY3JlYXRlX2NvcHkoUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBPaWQgb2xkSW5kZXhJZCwK IAkJCQkJCQl0cnVlLAogCQkJCQkJCWluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXN1bW1hcml6 aW5nLAogCQkJCQkJCW9sZEluZm8tPmlpX1dpdGhvdXRPdmVybGFwcywKLQkJCQkJCQlmYWxzZSk7 CisJCQkJCQkJZmFsc2UsCisJCQkJCQkJSW52YWxpZE9pZCk7CiAKIAkvKgogCSAqIEV4dHJhY3Qg dGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9yIHRoZSBu ZXcKQEAgLTE1ODAsNyArMTU5Miw4IEBAIGluZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfYXV4KFJl bGF0aW9uIGhlYXBSZWxhdGlvbiwgT2lkIG1haW5JbmRleElkLAogCQkJCQkJCXRydWUsCiAJCQkJ CQkJZmFsc2UsCS8qIGF1eCBhcmUgbm90IHN1bW1hcml6aW5nICovCiAJCQkJCQkJZmFsc2UsCS8q IGF1eCBhcmUgbm90IHdpdGhvdXQgb3ZlcmxhcHMgKi8KLQkJCQkJCQl0cnVlCS8qIGF1eGlsaWFy eSAqLyk7CisJCQkJCQkJdHJ1ZQkvKiBhdXhpbGlhcnkgKi8sCisJCQkJCQkJbWFpbkluZGV4SWQg LyogYXV4aWxpYXJ5Rm9ySW5kZXhJZCAqLyk7CiAKIAkvKgogCSAqIEV4dHJhY3QgdGhlIGxpc3Qg b2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9yIHRoZSBuZXcKQEAgLTI2 MTYsNyArMjYyOSw4IEBAIEJ1aWxkSW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4KQogCQkJCQkgICBm YWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nLAogCQkJCQkgICBp bmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmluZGlzdW5pcXVlLAot CQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkg aWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09J RCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJCQkJCSAgIEludmFsaWRPaWQgLyogYXV4aWxp YXJ5X2Zvcl9pbmRleF9pZCBpcyBzZXQgb25seSBkdXJpbmcgYnVpbGQgKi8pOwogCiAJLyogZmls bCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1BdHRzOyBpKysp CkBAIC0yNjc3LDcgKzI2OTEsOCBAQCBCdWlsZER1bW15SW5kZXhJbmZvKFJlbGF0aW9uIGluZGV4 KQogCQkJCQkgICBmYWxzZSwKIAkJCQkJICAgaW5kZXgtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5n LAogCQkJCQkgICBpbmRleFN0cnVjdC0+aW5kaXNleGNsdXNpb24gJiYgaW5kZXhTdHJ1Y3QtPmlu ZGlzdW5pcXVlLAotCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9PSBTVElSX0FNX09JRCAv KiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8pOworCQkJCQkgICBpbmRleC0+cmRfcmVsLT5yZWxhbSA9 PSBTVElSX0FNX09JRCAvKiBhdXhpbGlhcnkgaWZmIFNUSVIgKi8sCisJCQkJCSAgIEludmFsaWRP aWQpOwogCiAJLyogZmlsbCBpbiBhdHRyaWJ1dGUgbnVtYmVycyAqLwogCWZvciAoaSA9IDA7IGkg PCBudW1BdHRzOyBpKyspCkBAIC0zODQ4LDYgKzM4NjMsNyBAQCByZWluZGV4X2luZGV4KGNvbnN0 IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgaW5kZXhJZCwKIAkJCQloZWFwUmVsYXRpb247CiAJT2lk CQkJaGVhcElkOwogCU9pZAkJCXNhdmVfdXNlcmlkOworCU9pZAkJCWp1bmtBdXhJbmRleElkOwog CWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAJSW5kZXhJ bmZvICAqaW5kZXhJbmZvOwpAQCAtMzkwNCw2ICszOTIwLDE5IEBAIHJlaW5kZXhfaW5kZXgoY29u c3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBpbmRleElkLAogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBk YXRlX211bHRpX3BhcmFtKDIsIHByb2dyZXNzX2NvbHMsIHByb2dyZXNzX3ZhbHMpOwogCX0KIAor CS8qIENoZWNrIGZvciB0aGUgYXV4aWxpYXJ5IGluZGV4IGZvciB0aGF0IGluZGV4LCBpdCBuZWVk cyB0byBkcm9wcGVkICovCisJanVua0F1eEluZGV4SWQgPSBnZXRfYXV4aWxpYXJ5X2luZGV4KGlu ZGV4SWQpOworCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkKKwl7CisJCU9iamVjdEFk ZHJlc3Mgb2JqZWN0OworCQlvYmplY3QuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJ b2JqZWN0Lm9iamVjdElkID0ganVua0F1eEluZGV4SWQ7CisJCW9iamVjdC5vYmplY3RTdWJJZCA9 IDA7CisJCXBlcmZvcm1EZWxldGlvbigmb2JqZWN0LCBEUk9QX1JFU1RSSUNULAorCQkJCQkJCQkg UEVSRk9STV9ERUxFVElPTl9JTlRFUk5BTCB8CisJCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9OX1FV SUVUTFkpOworCX0KKwogCS8qCiAJICogT3BlbiB0aGUgdGFyZ2V0IGluZGV4IHJlbGF0aW9uIGFu ZCBnZXQgYW4gZXhjbHVzaXZlIGxvY2sgb24gaXQsIHRvCiAJICogZW5zdXJlIHRoYXQgbm8gb25l IGVsc2UgaXMgdG91Y2hpbmcgdGhpcyBwYXJ0aWN1bGFyIGluZGV4LgpAQCAtNDE5Miw3ICs0MjIx LDggQEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGlk LCBpbnQgZmxhZ3MsCiB7CiAJUmVsYXRpb24JcmVsOwogCU9pZAkJCXRvYXN0X3JlbGlkOwotCUxp c3QJICAgKmluZGV4SWRzOworCUxpc3QJICAgKmluZGV4SWRzLAorCQkJICAgKmF1eEluZGV4SWRz ID0gTklMOwogCWNoYXIJCXBlcnNpc3RlbmNlOwogCWJvb2wJCXJlc3VsdCA9IGZhbHNlOwogCUxp c3RDZWxsICAgKmluZGV4SWQ7CkBAIC00MjgxLDEzICs0MzExLDMwIEBAIHJlaW5kZXhfcmVsYXRp b24oY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxpZCwgaW50IGZsYWdzLAogCWVsc2UK IAkJcGVyc2lzdGVuY2UgPSByZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2U7CiAKKwlmb3JlYWNo KGluZGV4SWQsIGluZGV4SWRzKQorCXsKKwkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGlu ZGV4SWQpOworCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9pZCk7CisKKwkJ LyogQWxsIFNUSVIgaW5kZXhlcyBhcmUgYXV4aWxpYXJ5IGluZGV4ZXMgKi8KKwkJaWYgKGluZGV4 QW0gPT0gU1RJUl9BTV9PSUQpCisJCXsKKwkJCWlmIChmbGFncyAmIFJFSU5ERVhfUkVMX1NVUFBS RVNTX0lOREVYX1VTRSkKKwkJCQlSZW1vdmVSZWluZGV4UGVuZGluZyhpbmRleE9pZCk7CisJCQlh dXhJbmRleElkcyA9IGxhcHBlbmRfb2lkKGF1eEluZGV4SWRzLCBpbmRleE9pZCk7CisJCX0KKwl9 CisKIAkvKiBSZWluZGV4IGFsbCB0aGUgaW5kZXhlcy4gKi8KIAlpID0gMTsKIAlmb3JlYWNoKGlu ZGV4SWQsIGluZGV4SWRzKQogCXsKIAkJT2lkCQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGluZGV4 SWQpOwogCQlPaWQJCQlpbmRleE5hbWVzcGFjZUlkID0gZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhP aWQpOwotCQlPaWQJCQlpbmRleEFtID0gZ2V0X3JlbF9yZWxhbShpbmRleE9pZCk7CisKKwkJLyog QXV4aWxpYXJ5IGluZGV4ZXMgYXJlIGdvaW5nIHRvIGJlIGRyb3BwZWQgZHVyaW5nIG1haW4gaW5k ZXggcmVidWlsZCAqLworCQlpZiAobGlzdF9tZW1iZXJfb2lkKGF1eEluZGV4SWRzLCBpbmRleE9p ZCkpCisJCQljb250aW51ZTsKIAogCQkvKgogCQkgKiBTa2lwIGFueSBpbnZhbGlkIGluZGV4ZXMg b24gYSBUT0FTVCB0YWJsZS4gIFRoZXNlIGNhbiBvbmx5IGJlCkBAIC00MzEzLDE4ICs0MzYwLDYg QEAgcmVpbmRleF9yZWxhdGlvbihjb25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGlkLCBp bnQgZmxhZ3MsCiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChpbmRleEFtID09IFNUSVJfQU1f T0lEKQotCQl7Ci0JCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJIGVycm1zZygic2tpcHBpbmcgcmVpbmRleCBvZiBh dXhpbGlhcnkgaW5kZXggXCIlcy4lc1wiIiwKLQkJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoaW5k ZXhOYW1lc3BhY2VJZCksCi0JCQkJCQkJZ2V0X3JlbF9uYW1lKGluZGV4T2lkKSkpKTsKLQkJCWlm IChmbGFncyAmIFJFSU5ERVhfUkVMX1NVUFBSRVNTX0lOREVYX1VTRSkKLQkJCQlSZW1vdmVSZWlu ZGV4UGVuZGluZyhpbmRleE9pZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCXJlaW5kZXhfaW5k ZXgoc3RtdCwgaW5kZXhPaWQsICEoZmxhZ3MgJiBSRUlOREVYX1JFTF9DSEVDS19DT05TVFJBSU5U UyksCiAJCQkJCSAgcGVyc2lzdGVuY2UsIHBhcmFtcyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NhdGFsb2cvcGdfZGVwZW5kLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5j CmluZGV4IGM4YjExZjg4N2UyLi4xYzI3NWVmMzczZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19kZXBlbmQuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2RlcGVuZC5j CkBAIC0xMDM1LDYgKzEwMzUsNjMgQEAgZ2V0X2luZGV4X2NvbnN0cmFpbnQoT2lkIGluZGV4SWQp CiAJcmV0dXJuIGNvbnN0cmFpbnRJZDsKIH0KIAorLyoKKyAqIGdldF9hdXhpbGlhcnlfaW5kZXgK KyAqCQlHaXZlbiB0aGUgT0lEIG9mIGFuIGluZGV4LCByZXR1cm4gdGhlIE9JRCBvZiBpdHMgYXV4 aWxpYXJ5CisgKgkJaW5kZXgsIG9yIEludmFsaWRPaWQgaWYgdGhlcmUgaXMgbm8gYXV4aWxpYXJ5 IGluZGV4LgorICovCitPaWQKK2dldF9hdXhpbGlhcnlfaW5kZXgoT2lkIGluZGV4SWQpCit7CisJ T2lkCQkJYXV4aWxpYXJ5SW5kZXhPaWQgPSBJbnZhbGlkT2lkOworCVJlbGF0aW9uCWRlcFJlbDsK KwlTY2FuS2V5RGF0YSBrZXlbM107CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVw OworCisJLyogU2VhcmNoIHRoZSBkZXBlbmRlbmN5IHRhYmxlIGZvciB0aGUgaW5kZXggKi8KKwlk ZXBSZWwgPSB0YWJsZV9vcGVuKERlcGVuZFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfZGVwZW5kX3JlZmNsYXNzaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0o UmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQoJmtleVsxXSwKKwkJCQlBbnVtX3Bn X2RlcGVuZF9yZWZvYmppZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJ CQkJT2JqZWN0SWRHZXREYXR1bShpbmRleElkKSk7CisJU2NhbktleUluaXQoJmtleVsyXSwKKwkJ CQlBbnVtX3BnX2RlcGVuZF9yZWZvYmpzdWJpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2Jl Z2luc2NhbihkZXBSZWwsIERlcGVuZFJlZmVyZW5jZUluZGV4SWQsIHRydWUsCisJCQkJCQkJICBO VUxMLCAzLCBrZXkpOworCisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJs ZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfZGVwZW5kIGRlcHJlYyA9IChGb3JtX3Bn X2RlcGVuZCkgR0VUU1RSVUNUKHR1cCk7CisKKwkJLyoKKwkJICogV2UgYXNzdW1lIGFueSBBVVRP IGRlcGVuZGVuY3kgb24gaW5kZXggd2l0aCByZWxfa2luZAorCQkgKiBvZiBSRUxLSU5EX0lOREVY IGlzIHRoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLgorCQkgKi8KKwkJaWYgKGRlcHJlYy0+Y2xhc3Np ZCA9PSBSZWxhdGlvblJlbGF0aW9uSWQgJiYKKwkJCShkZXByZWMtPmRlcHR5cGUgPT0gREVQRU5E RU5DWV9BVVRPKSAmJgorCQkJZ2V0X3JlbF9yZWxraW5kKGRlcHJlYy0+b2JqaWQpID09IFJFTEtJ TkRfSU5ERVgpCisJCXsKKwkJCWF1eGlsaWFyeUluZGV4T2lkID0gZGVwcmVjLT5vYmppZDsKKwkJ CWJyZWFrOworCQl9CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9z ZShkZXBSZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gYXV4aWxpYXJ5SW5kZXhPaWQ7 Cit9CisKIC8qCiAgKiBnZXRfaW5kZXhfcmVmX2NvbnN0cmFpbnRzCiAgKgkJR2l2ZW4gdGhlIE9J RCBvZiBhbiBpbmRleCwgcmV0dXJuIHRoZSBPSUQgb2YgYWxsIGZvcmVpZ24ga2V5CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9n L3RvYXN0aW5nLmMKaW5kZXggOWNjNGYwNmRhOWYuLjNhYTY1N2M3OWNiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy90 b2FzdGluZy5jCkBAIC0zMDgsNiArMzA4LDcgQEAgY3JlYXRlX3RvYXN0X3RhYmxlKFJlbGF0aW9u IHJlbCwgT2lkIHRvYXN0T2lkLCBPaWQgdG9hc3RJbmRleE9pZCwKIAlpbmRleEluZm8tPmlpX0Ft ID0gQlRSRUVfQU1fT0lEOwogCWluZGV4SW5mby0+aWlfQW1DYWNoZSA9IE5VTEw7CiAJaW5kZXhJ bmZvLT5paV9BdXhpbGlhcnkgPSBmYWxzZTsKKwlpbmRleEluZm8tPmlpX0F1eGlsaWFyeUZvcklu ZGV4SWQgPSBJbnZhbGlkT2lkOwogCWluZGV4SW5mby0+aWlfQ29udGV4dCA9IEN1cnJlbnRNZW1v cnlDb250ZXh0OwogCiAJY29sbGF0aW9uSWRzWzBdID0gSW52YWxpZE9pZDsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv aW5kZXhjbWRzLmMKaW5kZXggOWMzNDgyNWU5N2QuLmNhNGRjMDAzZDE1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9pbmRleGNtZHMuYwpAQCAtMjQ1LDcgKzI0NSw3IEBAIENoZWNrSW5kZXhDb21wYXRpYmxlKE9p ZCBvbGRJZCwKIAlpbmRleEluZm8gPSBtYWtlSW5kZXhJbmZvKG51bWJlck9mQXR0cmlidXRlcywg bnVtYmVyT2ZBdHRyaWJ1dGVzLAogCQkJCQkJCSAgYWNjZXNzTWV0aG9kSWQsIE5JTCwgTklMLCBm YWxzZSwgZmFsc2UsCiAJCQkJCQkJICBmYWxzZSwgZmFsc2UsIGFtc3VtbWFyaXppbmcsCi0JCQkJ CQkJICBpc1dpdGhvdXRPdmVybGFwcywgaXNhdXhpbGlhcnkpOworCQkJCQkJCSAgaXNXaXRob3V0 T3ZlcmxhcHMsIGlzYXV4aWxpYXJ5LCBJbnZhbGlkT2lkKTsKIAl0eXBlSWRzID0gcGFsbG9jX2Fy cmF5KE9pZCwgbnVtYmVyT2ZBdHRyaWJ1dGVzKTsKIAljb2xsYXRpb25JZHMgPSBwYWxsb2NfYXJy YXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCW9wY2xhc3NJZHMgPSBwYWxsb2NfYXJyYXko T2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwpAQCAtOTQzLDcgKzk0Myw4IEBAIERlZmluZUluZGV4 KE9pZCB0YWJsZUlkLAogCQkJCQkJCSAgY29uY3VycmVudCwKIAkJCQkJCQkgIGFtaXNzdW1tYXJp emluZywKIAkJCQkJCQkgIHN0bXQtPmlzd2l0aG91dG92ZXJsYXBzLAotCQkJCQkJCSAgZmFsc2Up OworCQkJCQkJCSAgZmFsc2UsCisJCQkJCQkJICBJbnZhbGlkT2lkKTsKIAogCXR5cGVJZHMgPSBw YWxsb2NfYXJyYXkoT2lkLCBudW1iZXJPZkF0dHJpYnV0ZXMpOwogCWNvbGxhdGlvbklkcyA9IHBh bGxvY19hcnJheShPaWQsIG51bWJlck9mQXR0cmlidXRlcyk7CkBAIC0zNjgzLDYgKzM2ODQsNyBA QCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9p ZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCXsKIAkJT2lkCQkJaW5kZXhJZDsKIAkJT2lkCQkJ YXV4SW5kZXhJZDsKKwkJT2lkCQkJanVua0F1eEluZGV4SWQ7CiAJCU9pZAkJCXRhYmxlSWQ7CiAJ CU9pZAkJCWFtSWQ7CiAJCWJvb2wJCXNhZmU7CQkvKiBmb3Igc2V0X2luZGV4c2FmZV9wcm9jZmxh Z3MgKi8KQEAgLTQwMzIsNiArNDAzNCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCVJl aW5kZXhJbmRleEluZm8gKm5ld2lkeDsKIAkJT2lkCQkJbmV3SW5kZXhJZDsKIAkJT2lkCQkJYXV4 SW5kZXhJZDsKKwkJT2lkCQkJanVua0F1eEluZGV4SWQ7CiAJCVJlbGF0aW9uCWluZGV4UmVsOwog CQlSZWxhdGlvbgloZWFwUmVsOwogCQlPaWQJCQlzYXZlX3VzZXJpZDsKQEAgLTQwMzksNiArNDA0 Miw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4U3RtdCAqc3Rt dCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCWludAkJCXNhdmVfbmVzdGxldmVsOwog CQlSZWxhdGlvbgluZXdJbmRleFJlbDsKIAkJUmVsYXRpb24JYXV4SW5kZXhSZWw7CisJCVJlbGF0 aW9uCWp1bmtBdXhJbmRleFJlbDsKIAkJTG9ja1JlbElkICAqbG9ja3JlbGlkOwogCQlPaWQJCQl0 YWJsZXNwYWNlaWQ7CiAKQEAgLTQxMTIsMTIgKzQxMTYsMTcgQEAgUmVpbmRleFJlbGF0aW9uQ29u Y3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0 IFJlaW4KIAkJCQkJCQkJCQkJCSAgIHRhYmxlc3BhY2VpZCwKIAkJCQkJCQkJCQkJCSAgIGF1eENv bmN1cnJlbnROYW1lKTsKIAorCQkvKiBTZWFyY2ggZm9yIGF1eGlsaWFyeSBpbmRleCBmb3IgcmVp bmRleGVkIGluZGV4LCB0byBkcm9wIGl0ICovCisJCWp1bmtBdXhJbmRleElkID0gZ2V0X2F1eGls aWFyeV9pbmRleChpZHgtPmluZGV4SWQpOworCiAJCS8qCiAJCSAqIE5vdyBvcGVuIHRoZSByZWxh dGlvbiBvZiB0aGUgbmV3IGluZGV4LCBhIHNlc3Npb24tbGV2ZWwgbG9jayBpcwogCQkgKiBhbHNv IG5lZWRlZCBvbiBpdC4KIAkJICovCiAJCW5ld0luZGV4UmVsID0gaW5kZXhfb3BlbihuZXdJbmRl eElkLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCQlhdXhJbmRleFJlbCA9IGluZGV4X29w ZW4oYXV4SW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKKwkJaWYgKE9pZElzVmFs aWQoanVua0F1eEluZGV4SWQpKQorCQkJanVua0F1eEluZGV4UmVsID0gaW5kZXhfb3BlbihqdW5r QXV4SW5kZXhJZCwgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKIAogCQkvKgogCQkgKiBTYXZl IHRoZSBsaXN0IG9mIE9JRHMgYW5kIGxvY2tzIGluIHByaXZhdGUgY29udGV4dApAQCAtNDEyNyw2 ICs0MTM2LDcgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10 ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJbmV3aWR4ID0gcGFsbG9jX29i amVjdChSZWluZGV4SW5kZXhJbmZvKTsKIAkJbmV3aWR4LT5pbmRleElkID0gbmV3SW5kZXhJZDsK IAkJbmV3aWR4LT5hdXhJbmRleElkID0gYXV4SW5kZXhJZDsKKwkJbmV3aWR4LT5qdW5rQXV4SW5k ZXhJZCA9IGp1bmtBdXhJbmRleElkOwogCQluZXdpZHgtPnNhZmUgPSBpZHgtPnNhZmU7CiAJCW5l d2lkeC0+dGFibGVJZCA9IGlkeC0+dGFibGVJZDsKIAkJbmV3aWR4LT5hbUlkID0gaWR4LT5hbUlk OwpAQCAtNDE0OCwxMCArNDE1OCwxOCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29u c3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQlsb2Nr cmVsaWQgPSBwYWxsb2Nfb2JqZWN0KExvY2tSZWxJZCk7CiAJCSpsb2NrcmVsaWQgPSBhdXhJbmRl eFJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkOwogCQlyZWxhdGlvbkxvY2tzID0gbGFwcGVuZChy ZWxhdGlvbkxvY2tzLCBsb2NrcmVsaWQpOworCQlpZiAoT2lkSXNWYWxpZChqdW5rQXV4SW5kZXhJ ZCkpCisJCXsKKwkJCWxvY2tyZWxpZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsKKwkJCSps b2NrcmVsaWQgPSBqdW5rQXV4SW5kZXhSZWwtPnJkX2xvY2tJbmZvLmxvY2tSZWxJZDsKKwkJCXJl bGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CisJCX0KIAog CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKIAkJaW5kZXhfY2xvc2UoaW5k ZXhSZWwsIE5vTG9jayk7CisJCWlmIChPaWRJc1ZhbGlkKGp1bmtBdXhJbmRleElkKSkKKwkJCWlu ZGV4X2Nsb3NlKGp1bmtBdXhJbmRleFJlbCwgTm9Mb2NrKTsKIAkJaW5kZXhfY2xvc2UoYXV4SW5k ZXhSZWwsIE5vTG9jayk7CiAJCWluZGV4X2Nsb3NlKG5ld0luZGV4UmVsLCBOb0xvY2spOwogCkBA IC00MzQwLDcgKzQzNTgsOCBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVp bmRleFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCiAJLyoKIAkgKiBB dCB0aGlzIG1vbWVudCBhbGwgdGFyZ2V0IGluZGV4ZXMgYXJlIG1hcmtlZCBhcyAicmVhZHktdG8t aW5zZXJ0Ii4gU28sCi0JICogd2UgYXJlIGZyZWUgdG8gc3RhcnQgcHJvY2VzcyBvZiBkcm9wcGlu ZyBhdXhpbGlhcnkgaW5kZXhlcy4KKwkgKiB3ZSBhcmUgZnJlZSB0byBzdGFydCBwcm9jZXNzIG9m IGRyb3BwaW5nIGF1eGlsaWFyeSBpbmRleGVzIC0gaW5jbHVkaW5nCisJICoganVzdCBpbmRleGVz IGRldGVjdGVkIGVhcmxpZXIuCiAJICovCiAJZm9yZWFjaChsYywgbmV3SW5kZXhJZHMpCiAJewpA QCAtNDM2Myw2ICs0MzgyLDkgQEAgUmVpbmRleFJlbGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJl aW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJlaW4KIAkJICovCiAJCVB1 c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCQlpbmRleF9zZXRf c3RhdGVfZmxhZ3MobmV3aWR4LT5hdXhJbmRleElkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsK KwkJLyogRW5zdXJlIGp1c3QgaW5kZXggaXMgbWFya2VkIGFzIG5vbi1yZWFkeSAqLworCQlpZiAo T2lkSXNWYWxpZChuZXdpZHgtPmp1bmtBdXhJbmRleElkKSkKKwkJCWluZGV4X3NldF9zdGF0ZV9m bGFncyhuZXdpZHgtPmp1bmtBdXhJbmRleElkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsKIAkJ UG9wQWN0aXZlU25hcHNob3QoKTsKIAogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKQEAg LTQ1ODEsNiArNDYwMyw4IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWlu ZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCVB1c2hBY3RpdmVT bmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCiAJCWluZGV4X2NvbmN1cnJlbnRs eV9zZXRfZGVhZChuZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CisJCWlmIChP aWRJc1ZhbGlkKG5ld2lkeC0+anVua0F1eEluZGV4SWQpKQorCQkJaW5kZXhfY29uY3VycmVudGx5 X3NldF9kZWFkKG5ld2lkeC0+dGFibGVJZCwgbmV3aWR4LT5qdW5rQXV4SW5kZXhJZCk7CiAKIAkJ UG9wQWN0aXZlU25hcHNob3QoKTsKIAl9CkBAIC00NjMyLDYgKzQ2NTYsMTQgQEAgUmVpbmRleFJl bGF0aW9uQ29uY3VycmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25P aWQsIGNvbnN0IFJlaW4KIAkJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CiAKIAkJCWFkZF9leGFj dF9vYmplY3RfYWRkcmVzcygmb2JqZWN0LCBvYmplY3RzKTsKKworCQkJaWYgKE9pZElzVmFsaWQo aWR4LT5qdW5rQXV4SW5kZXhJZCkpCisJCQl7CisKKwkJCQlvYmplY3Qub2JqZWN0SWQgPSBpZHgt Pmp1bmtBdXhJbmRleElkOworCQkJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7CisJCQkJYWRkX2V4 YWN0X29iamVjdF9hZGRyZXNzKCZvYmplY3QsIG9iamVjdHMpOworCQkJfQogCQl9CiAKIAkJLyoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggM2FhYzQ1OWU0ODMuLmQ5MzZkMTk4ZTNhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTUzMiw2ICsxNTMyLDggQEAgUmVtb3ZlUmVs YXRpb25zKERyb3BTdG10ICpkcm9wKQogCUxpc3RDZWxsICAgKmNlbGw7CiAJaW50CQkJZmxhZ3Mg PSAwOwogCUxPQ0tNT0RFCWxvY2ttb2RlID0gQWNjZXNzRXhjbHVzaXZlTG9jazsKKwlNZW1vcnlD b250ZXh0IHByaXZhdGVfY29udGV4dCwKKwkJCQkgIG9sZGNvbnRleHQ7CiAKIAkvKiBEUk9QIENP TkNVUlJFTlRMWSB1c2VzIGEgd2Vha2VyIGxvY2ssIGFuZCBoYXMgc29tZSByZXN0cmljdGlvbnMg Ki8KIAlpZiAoZHJvcC0+Y29uY3VycmVudCkKQEAgLTE1OTIsOSArMTU5NCwyMCBAQCBSZW1vdmVS ZWxhdGlvbnMoRHJvcFN0bXQgKmRyb3ApCiAJCQlyZWxraW5kID0gMDsJCS8qIGtlZXAgY29tcGls ZXIgcXVpZXQgKi8KIAkJCWJyZWFrOwogCX0KKwkvKgorCSAqIENyZWF0ZSBhIG1lbW9yeSBjb250 ZXh0IHRoYXQgd2lsbCBzdXJ2aXZlIGZvcmNlZCB0cmFuc2FjdGlvbiBjb21taXRzIHdlCisJICog bWF5IG5lZWQgdG8gZG8gYmVsb3cgKGluIGNhc2Ugb2YgY29uY3VycmVudCBpbmRleCBkcm9wKS4K KwkgKiBTaW5jZSBpdCBpcyBhIGNoaWxkIG9mIFBvcnRhbENvbnRleHQsIGl0IHdpbGwgZ28gYXdh eSBldmVudHVhbGx5IGV2ZW4gaWYKKwkgKiB3ZSBzdWZmZXIgYW4gZXJyb3I7IHRoZXJlJ3Mgbm8g bmVlZCBmb3Igc3BlY2lhbCBhYm9ydCBjbGVhbnVwIGxvZ2ljLgorCSAqLworCXByaXZhdGVfY29u dGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShQb3J0YWxDb250ZXh0LAorCQkJCQkJCQkJCQki UmVtb3ZlUmVsYXRpb25zIiwKKwkJCQkJCQkJCQkJQUxMT0NTRVRfU01BTExfU0laRVMpOwogCisJ b2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCS8q IExvY2sgYW5kIHZhbGlkYXRlIGVhY2ggcmVsYXRpb247IGJ1aWxkIGEgbGlzdCBvZiBvYmplY3Qg YWRkcmVzc2VzICovCiAJb2JqZWN0cyA9IG5ld19vYmplY3RfYWRkcmVzc2VzKCk7CisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCiAJZm9yZWFjaChjZWxsLCBkcm9wLT5vYmpl Y3RzKQogCXsKQEAgLTE2NDYsNiArMTY1OSwzNCBAQCBSZW1vdmVSZWxhdGlvbnMoRHJvcFN0bXQg KmRyb3ApCiAJCQlmbGFncyB8PSBQRVJGT1JNX0RFTEVUSU9OX0NPTkNVUlJFTlRMWTsKIAkJfQog CisJCS8qCisJCSAqIENvbmN1cnJlbnQgaW5kZXggZHJvcCByZXF1aXJlcyB0byBiZSB0aGUgZmly c3QgdHJhbnNhY3Rpb24uIEJ1dCBpbgorCQkgKiBjYXNlIHdlIGhhdmUganVuayBhdXhpbGlhcnkg aW5kZXggLSB3ZSB3YW50IHRvIGRyb3AgaXQgdG9vIChhbmQgYWxzbworCQkgKiBpbiBhIGNvbmN1 cnJlbnQgd2F5KS4gSW4gdGhpcyBjYXNlIHBlcmZvcm0gc2lsZW50IGludGVybmFsIGRlbGV0aW9u CisJCSAqIG9mIGF1eGlsaWFyeSBpbmRleCwgYW5kIHJlc3RvcmUgdHJhbnNhY3Rpb24gc3RhdGUu IEl0IGlzIGZpbmUgdG8gZG8gaXQKKwkJICogaW4gdGhlIGxvb3AgYmVjYXVzZSB0aGVyZSBpcyBv bmx5IHNpbmdsZSBlbGVtZW50IGluIGRyb3AtPm9iamVjdHMuCisJCSAqLworCQlpZiAoKGZsYWdz ICYgUEVSRk9STV9ERUxFVElPTl9DT05DVVJSRU5UTFkpICE9IDAgJiYKKwkJCXN0YXRlLmFjdHVh bF9yZWxraW5kID09IFJFTEtJTkRfSU5ERVgpCisJCXsKKwkJCU9pZCBqdW5rQXV4SW5kZXhPaWQg PSBnZXRfYXV4aWxpYXJ5X2luZGV4KHJlbE9pZCk7CisJCQlpZiAoT2lkSXNWYWxpZChqdW5rQXV4 SW5kZXhPaWQpKQorCQkJeworCQkJCU9iamVjdEFkZHJlc3Mgb2JqZWN0OworCQkJCW9iamVjdC5j bGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJCW9iamVjdC5vYmplY3RJZCA9IGp1bmtB dXhJbmRleE9pZDsKKwkJCQlvYmplY3Qub2JqZWN0U3ViSWQgPSAwOworCQkJCXBlcmZvcm1EZWxl dGlvbigmb2JqZWN0LCBEUk9QX1JFU1RSSUNULAorCQkJCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9O X0NPTkNVUlJFTlRMWSB8CisJCQkJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05fSU5URVJOQUwgfAor CQkJCQkJCQkJCSBQRVJGT1JNX0RFTEVUSU9OX1FVSUVUTFkpOworCQkJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCQkJCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkJUHVzaEFj dGl2ZVNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQkJUHJldmVudEluVHJh bnNhY3Rpb25CbG9jayh0cnVlLCAiRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkiKTsKKwkJCX0KKwkJ fQorCiAJCS8qCiAJCSAqIENvbmN1cnJlbnQgaW5kZXggZHJvcCBjYW5ub3QgYmUgdXNlZCB3aXRo IHBhcnRpdGlvbmVkIGluZGV4ZXMsCiAJCSAqIGVpdGhlci4KQEAgLTE2NzQsMTIgKzE3MTUsMTcg QEAgUmVtb3ZlUmVsYXRpb25zKERyb3BTdG10ICpkcm9wKQogCQlvYmoub2JqZWN0SWQgPSByZWxP aWQ7CiAJCW9iai5vYmplY3RTdWJJZCA9IDA7CiAKKwkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhwcml2YXRlX2NvbnRleHQpOwogCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3Mo Jm9iaiwgb2JqZWN0cyk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAl9 CiAKKwkvKiBEZWxldGlvbiBtYXkgaW52b2x2ZSBtdWx0aXBsZSBjb21taXRzLCBzbywgc3dpdGNo IHRvIG1lbW9yeSBjb250ZXh0ICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhwcml2YXRlX2NvbnRleHQpOwogCXBlcmZvcm1NdWx0aXBsZURlbGV0aW9ucyhvYmplY3RzLCBk cm9wLT5iZWhhdmlvciwgZmxhZ3MpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0 KTsKIAotCWZyZWVfb2JqZWN0X2FkZHJlc3NlcyhvYmplY3RzKTsKKwlNZW1vcnlDb250ZXh0RGVs ZXRlKHByaXZhdGVfY29udGV4dCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9u b2Rlcy9tYWtlZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL21ha2VmdW5jcy5jCmluZGV4IGI1 NTZiYTQ4MTdiLi5kN2JlODcxNWQ1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvbWFr ZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbWFrZWZ1bmNzLmMKQEAgLTgzNCw3ICs4 MzQsNyBAQCBJbmRleEluZm8gKgogbWFrZUluZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1r ZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpleHByZXNzaW9ucywKIAkJCSAgTGlzdCAqcHJlZGlj YXRlcywgYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJICBib29sIGlz cmVhZHksIGJvb2wgY29uY3VycmVudCwgYm9vbCBzdW1tYXJpemluZywKLQkJCSAgYm9vbCB3aXRo b3V0b3ZlcmxhcHMsIGJvb2wgYXV4aWxpYXJ5KQorCQkJICBib29sIHdpdGhvdXRvdmVybGFwcywg Ym9vbCBhdXhpbGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKQogewogCUluZGV4SW5m byAgKm4gPSBtYWtlTm9kZShJbmRleEluZm8pOwogCkBAIC04NTEsNiArODUxLDcgQEAgbWFrZUlu ZGV4SW5mbyhpbnQgbnVtYXR0cnMsIGludCBudW1rZXlhdHRycywgT2lkIGFtb2lkLCBMaXN0ICpl eHByZXNzaW9ucywKIAluLT5paV9TdW1tYXJpemluZyA9IHN1bW1hcml6aW5nOwogCW4tPmlpX1dp dGhvdXRPdmVybGFwcyA9IHdpdGhvdXRvdmVybGFwczsKIAluLT5paV9BdXhpbGlhcnkgPSBhdXhp bGlhcnk7CisJbi0+aWlfQXV4aWxpYXJ5Rm9ySW5kZXhJZCA9IGF1eGlsaWFyeV9mb3JfaW5kZXhf aWQ7CiAKIAkvKiBzdW1tYXJpemluZyBpbmRleGVzIGNhbm5vdCBjb250YWluIG5vbi1rZXkgYXR0 cmlidXRlcyAqLwogCUFzc2VydCghc3VtbWFyaXppbmcgfHwgKG51bWtleWF0dHJzID09IG51bWF0 dHJzKSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2RlcGVuZGVuY3kuaCBiL3Ny Yy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oCmluZGV4IDBlYTdjY2Y1MjQzLi4wMmJjZjVl OTMxNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKKysrIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKQEAgLTE4MCw2ICsxODAsNyBAQCBleHRl cm4gTGlzdCAqZ2V0T3duZWRTZXF1ZW5jZXMoT2lkIHJlbGlkKTsKIGV4dGVybiBPaWQJZ2V0SWRl bnRpdHlTZXF1ZW5jZShSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIG1pc3Np bmdfb2spOwogCiBleHRlcm4gT2lkCWdldF9pbmRleF9jb25zdHJhaW50KE9pZCBpbmRleElkKTsK K2V4dGVybiBPaWQJZ2V0X2F1eGlsaWFyeV9pbmRleChPaWQgaW5kZXhJZCk7CiAKIGV4dGVybiBM aXN0ICpnZXRfaW5kZXhfcmVmX2NvbnN0cmFpbnRzKE9pZCBpbmRleElkKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVj bm9kZXMuaAppbmRleCA4NGIzMjMxOWZiMy4uNTg5NmM2MWE5MTggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCkBAIC0yMTgsNiArMjE4LDggQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhJbmZvCiAJaW50CQkJ aWlfUGFyYWxsZWxXb3JrZXJzOwogCS8qIGlzIGF1eGlsaWFyeSBmb3IgY29uY3VycmVudCBpbmRl eCBidWlsZD8gKi8KIAlib29sCQlpaV9BdXhpbGlhcnk7CisJLyogaWYgY3JlYXRpbmcgYW4gYXV4 aWxpYXJ5IGluZGV4LCB0aGUgT0lEIG9mIHRoZSBtYWluIGluZGV4OyBvdGhlcndpc2UgSW52YWxp ZE9pZC4gKi8KKwlPaWQJCQlpaV9BdXhpbGlhcnlGb3JJbmRleElkOwogCS8qIE9pZCBvZiBpbmRl eCBBTSAqLwogCU9pZAkJCWlpX0FtOwogCS8qIHByaXZhdGUgY2FjaGUgYXJlYSBmb3IgaW5kZXgg QU0gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL21ha2VmdW5jcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvbWFrZWZ1bmNzLmgKaW5kZXggNDkwNDc0OGY1ZmMuLjM1NzQ1YmM1MjFjIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9tYWtlZnVuY3MuaAorKysgYi9zcmMvaW5jbHVk ZS9ub2Rlcy9tYWtlZnVuY3MuaApAQCAtMTAwLDcgKzEwMCw3IEBAIGV4dGVybiBJbmRleEluZm8g Km1ha2VJbmRleEluZm8oaW50IG51bWF0dHJzLCBpbnQgbnVta2V5YXR0cnMsIE9pZCBhbW9pZCwK IAkJCQkJCQkJYm9vbCB1bmlxdWUsIGJvb2wgbnVsbHNfbm90X2Rpc3RpbmN0LAogCQkJCQkJCQli b29sIGlzcmVhZHksIGJvb2wgY29uY3VycmVudCwKIAkJCQkJCQkJYm9vbCBzdW1tYXJpemluZywg Ym9vbCB3aXRob3V0b3ZlcmxhcHMsCi0JCQkJCQkJCWJvb2wgYXV4aWxpYXJ5KTsKKwkJCQkJCQkJ Ym9vbCBhdXhpbGlhcnksIE9pZCBhdXhpbGlhcnlfZm9yX2luZGV4X2lkKTsKIAogZXh0ZXJuIE5v ZGUgKm1ha2VTdHJpbmdDb25zdChjaGFyICpzdHIsIGludCBsb2NhdGlvbik7CiBleHRlcm4gRGVm RWxlbSAqbWFrZURlZkVsZW0oY2hhciAqbmFtZSwgTm9kZSAqYXJnLCBpbnQgbG9jYXRpb24pOwpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfaW5kZXgub3V0CmluZGV4IGFhNGZhNzYz NThhLi4zZWQ4OTk5ZDc0ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9j cmVhdGVfaW5kZXgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2lu ZGV4Lm91dApAQCAtMzI2NSwyMCArMzI2NSwxMDkgQEAgRVJST1I6ICByZWluZGV4IG9mIGF1eGls aWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQKIFJFSU5ERVgg SU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2X2NjYXV4OwogRVJST1I6ICByZWluZGV4 IG9mIGF1eGlsaWFyeSBpbmRleCAiYXV4X2luZGV4X2luZDZfY2NhdXgiIG5vdCBzdXBwb3J0ZWQK IC0tIFRoaXMgbWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4 IGNhbiBiZWNvbWUgdmFsaWQuCi1ERUxFVEUgRlJPTSBjb25jdXJfcmVpbmRleF90YWI0IFdIRVJF IGMxID0gMTsKLUVSUk9SOiAgcmVsYXRpb24gImNvbmN1cl9yZWluZGV4X3RhYjQiIGRvZXMgbm90 IGV4aXN0Ci1MSU5FIDE6IERFTEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEg PSAxOwotICAgICAgICAgICAgICAgICAgICBeCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBX SEVSRSBjMSA9IDE7CistLSBTaG91bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJv cHBlZAorUkVJTkRFWCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5k ZXggaXMgZHJvcHBlZAorXGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1Ymxp Yy5hdXhfaW5kZXhfdGFiNSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFi bGUgfCBEZWZhdWx0IAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tCisgYzEgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJ bmRleGVzOgorICAgICJhdXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpCisKK0RST1Ag SU5ERVggYXV4X2luZGV4X2luZDY7CistLSBJbnNlcnQgZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJU IElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwgKDEpOworLS0gQ3JlYXRlIGludmFsaWQg aW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9pbmRleF9p bmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CitFUlJPUjogIGNvdWxkIG5vdCBjcmVhdGUgdW5p cXVlIGluZGV4ICJhdXhfaW5kZXhfaW5kNiIKK0RFVEFJTDogIEtleSAoYzEpPSgxKSBpcyBkdXBs aWNhdGVkLgorLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0 aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVURSBGUk9NIGF1eF9pbmRleF90YWI1IFdI RVJFIGMxID0gMTsKIC0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyByZWluZGV4Ci1SRUlOREVY IFRBQkxFIGF1eF9pbmRleF90YWI1OwotRVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBp bmRleCAiYXV4X2luZGV4X2luZDYiCi1ERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRl ZC4KLS0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgKIFJFSU5E RVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OwogV0FSTklORzogIHNraXBwaW5n IHJlaW5kZXggb2YgaW52YWxpZCBpbmRleCAicHVibGljLmF1eF9pbmRleF9pbmQ2IgogSElOVDog IFVzZSBEUk9QIElOREVYIG9yIFJFSU5ERVggSU5ERVguCiBXQVJOSU5HOiAgc2tpcHBpbmcgcmVp bmRleCBvZiBhdXhpbGlhcnkgaW5kZXggInB1YmxpYy5hdXhfaW5kZXhfaW5kNl9jY2F1eCIKIE5P VElDRTogIHRhYmxlICJhdXhfaW5kZXhfdGFiNSIgaGFzIG5vIGluZGV4ZXMgdGhhdCBjYW4gYmUg cmVpbmRleGVkIGNvbmN1cnJlbnRseQorLS0gTWFrZSBzdXJlIGl0IGlzIHN0aWxsIGV4aXN0cwor XGQgYXV4X2luZGV4X3RhYjUKKyAgICAgICAgICAgVGFibGUgInB1YmxpYy5hdXhfaW5kZXhfdGFi NSIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IAor LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tCisgYzEg ICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJh dXhfaW5kZXhfaW5kNiIgVU5JUVVFLCBidHJlZSAoYzEpIElOVkFMSUQKKyAgICAiYXV4X2luZGV4 X2luZDZfY2NhdXgiIHN0aXIgKGMxKSBJTlZBTElECisKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1 cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1Owor LS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQorICAg ICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVtbiB8ICBUeXBlICAg fCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRlZ2VyIHwgICAgICAg ICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9pbmQ2IiBVTklRVUUs IGJ0cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIEluc2VydCBkdXBs aWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7 CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05D VVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKK0VSUk9SOiAg Y291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2IgorREVUQUlMOiAg S2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1ha2VzIHRoZSBwcmV2aW91cyBm YWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlkLgorREVMRVRFIEZS T00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gU2hvdWxkIGJlIHNraXBwZWQgZHVy aW5nIHJlaW5kZXggYW5kIGRyb3BwZWQKK1JFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIGF1eF9p bmRleF9pbmQ2OworLS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5k ZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVt biB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRl Z2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgImF1eF9pbmRleF9p bmQ2IiBVTklRVUUsIGJ0cmVlIChjMSkKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0t IEluc2VydCBkdXBsaWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxV RVMgKDEpLCAoMSk7CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFV RSBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMx KTsKK0VSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImF1eF9pbmRleF9pbmQ2 IgorREVUQUlMOiAgS2V5IChjMSk9KDEpIGlzIGR1cGxpY2F0ZWQuCistLSBUaGlzIG1ha2VzIHRo ZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4gYmVjb21lIHZhbGlk LgorREVMRVRFIEZST00gYXV4X2luZGV4X3RhYjUgV0hFUkUgYzEgPSAxOworLS0gRHJvcCBtYWlu IGluZGV4IENPTkNVUlJFTlRMWQorRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2lu ZDY7CistLSBNYWtlIHN1cmUgYXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBhdXhfaW5k ZXhfdGFiNQorICAgICAgICAgICBUYWJsZSAicHVibGljLmF1eF9pbmRleF90YWI1IgorIENvbHVt biB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8IERlZmF1bHQgCistLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0KKyBjMSAgICAgfCBpbnRl Z2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKKworRFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5k NjsKK0VSUk9SOiAgaW5kZXggImF1eF9pbmRleF9pbmQ2IiBkb2VzIG5vdCBleGlzdAorLS0gSW5z ZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lOU0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAo MSksICgxKTsKKy0tIENyZWF0ZSBpbnZhbGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5JUVVFIElO REVYIENPTkNVUlJFTlRMWSBhdXhfaW5kZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOwor RVJST1I6ICBjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCAiYXV4X2luZGV4X2luZDYiCitE RVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KKy0tIERyb3AgbWFpbiBpbmRleAor RFJPUCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXgg ZHJvcHBlZCB0b28KK1xkIGF1eF9pbmRleF90YWI1CisgICAgICAgICAgIFRhYmxlICJwdWJsaWMu YXV4X2luZGV4X3RhYjUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxl IHwgRGVmYXVsdCAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLQorIGMxICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAgICAgICAgICB8IAorCiBE Uk9QIFRBQkxFIGF1eF9pbmRleF90YWI1OwogLS0gQ2hlY2sgaGFuZGxpbmcgb2YgaW5kZXhlcyB3 aXRoIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzLiAgVGhlCiAtLSBkZWZpbml0aW9ucyBvZiB0 aGUgcmVidWlsdCBpbmRleGVzIHNob3VsZCBtYXRjaCB0aGUgb3JpZ2luYWwKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9jcmVhdGVfaW5kZXguc3FsCmluZGV4IDdhZThlNDQwMTliLi42ZDU5Nzc5MGI1NiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5kZXguc3FsCkBAIC0xMzQwLDExICsxMzQwLDYyIEBA IFJFSU5ERVggSU5ERVggYXV4X2luZGV4X2luZDZfY2NhdXg7CiAtLSBDb25jdXJyZW50bHkgYWxz bwogUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgYXV4X2luZGV4X2luZDZfY2NhdXg7CiAtLSBU aGlzIG1ha2VzIHRoZSBwcmV2aW91cyBmYWlsdXJlIGdvIGF3YXksIHNvIHRoZSBpbmRleCBjYW4g YmVjb21lIHZhbGlkLgotREVMRVRFIEZST00gY29uY3VyX3JlaW5kZXhfdGFiNCBXSEVSRSBjMSA9 IDE7CitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBTaG91bGQg YmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleCBhbmQgZHJvcHBlZAorUkVJTkRFWCBJTkRFWCBhdXhf aW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQgYXV4X2lu ZGV4X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2VydCBkdXBsaWNh dGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7Cist LSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJS RU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0tIFRoaXMgbWFr ZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNvbWUg dmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CiAtLSBTaG91 bGQgYmUgc2tpcHBlZCBkdXJpbmcgcmVpbmRleAotUkVJTkRFWCBUQUJMRSBhdXhfaW5kZXhfdGFi NTsKLS0tIFNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBjb25jdXJyZW50IHJlaW5kZXgKIFJFSU5E RVggVEFCTEUgQ09OQ1VSUkVOVExZIGF1eF9pbmRleF90YWI1OworLS0gTWFrZSBzdXJlIGl0IGlz IHN0aWxsIGV4aXN0cworXGQgYXV4X2luZGV4X3RhYjUKKy0tIFNob3VsZCBiZSBza2lwcGVkIGR1 cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIFRBQkxFIGF1eF9pbmRleF90YWI1Owor LS0gTWFrZSBzdXJlIGF1eCBpbmRleCBpcyBkcm9wcGVkCitcZCBhdXhfaW5kZXhfdGFiNQorRFJP UCBJTkRFWCBhdXhfaW5kZXhfaW5kNjsKKworLS0gSW5zZXJ0IGR1cGxpY2F0ZXMgYWdhaW4KK0lO U0VSVCBJTlRPIGF1eF9pbmRleF90YWI1IFZBTFVFUyAoMSksICgxKTsKKy0tIENyZWF0ZSBpbnZh bGlkIGluZGV4IGFnYWluCitDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBhdXhfaW5k ZXhfaW5kNiBPTiBhdXhfaW5kZXhfdGFiNSAoYzEpOworLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlv dXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KK0RFTEVU RSBGUk9NIGF1eF9pbmRleF90YWI1IFdIRVJFIGMxID0gMTsKKy0tIFNob3VsZCBiZSBza2lwcGVk IGR1cmluZyByZWluZGV4IGFuZCBkcm9wcGVkCitSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSBh dXhfaW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXggaW5kZXggaXMgZHJvcHBlZAorXGQgYXV4 X2luZGV4X3RhYjUKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CisKKy0tIEluc2VydCBkdXBs aWNhdGVzIGFnYWluCitJTlNFUlQgSU5UTyBhdXhfaW5kZXhfdGFiNSBWQUxVRVMgKDEpLCAoMSk7 CistLSBDcmVhdGUgaW52YWxpZCBpbmRleCBhZ2FpbgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05D VVJSRU5UTFkgYXV4X2luZGV4X2luZDYgT04gYXV4X2luZGV4X3RhYjUgKGMxKTsKKy0tIFRoaXMg bWFrZXMgdGhlIHByZXZpb3VzIGZhaWx1cmUgZ28gYXdheSwgc28gdGhlIGluZGV4IGNhbiBiZWNv bWUgdmFsaWQuCitERUxFVEUgRlJPTSBhdXhfaW5kZXhfdGFiNSBXSEVSRSBjMSA9IDE7CistLSBE cm9wIG1haW4gaW5kZXggQ09OQ1VSUkVOVExZCitEUk9QIElOREVYIENPTkNVUlJFTlRMWSBhdXhf aW5kZXhfaW5kNjsKKy0tIE1ha2Ugc3VyZSBhdXhpbGlhcnkgaW5kZXggZHJvcHBlZCB0b28KK1xk IGF1eF9pbmRleF90YWI1CitEUk9QIElOREVYIGF1eF9pbmRleF9pbmQ2OworCistLSBJbnNlcnQg ZHVwbGljYXRlcyBhZ2FpbgorSU5TRVJUIElOVE8gYXV4X2luZGV4X3RhYjUgVkFMVUVTICgxKSwg KDEpOworLS0gQ3JlYXRlIGludmFsaWQgaW5kZXggYWdhaW4KK0NSRUFURSBVTklRVUUgSU5ERVgg Q09OQ1VSUkVOVExZIGF1eF9pbmRleF9pbmQ2IE9OIGF1eF9pbmRleF90YWI1IChjMSk7CistLSBE cm9wIG1haW4gaW5kZXgKK0RST1AgSU5ERVggYXV4X2luZGV4X2luZDY7CistLSBNYWtlIHN1cmUg YXV4aWxpYXJ5IGluZGV4IGRyb3BwZWQgdG9vCitcZCBhdXhfaW5kZXhfdGFiNQorCiBEUk9QIFRB QkxFIGF1eF9pbmRleF90YWI1OwogCiAtLSBDaGVjayBoYW5kbGluZyBvZiBpbmRleGVzIHdpdGgg ZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZXMuICBUaGUKLS0gCjIuNDMuMAoK --000000000000ac6d6606432d3652 Content-Type: text/plain; charset="UTF-8"; name="v26-0007-Optimize-auxiliary-index-handling.patch" Content-Disposition: attachment; filename="v26-0007-Optimize-auxiliary-index-handling.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhrw6pey6 RnJvbSA5ZDdlY2Y1NWU5YTNiYTk1MWJlOGNmYzI2MjFhZTk5ZTZkN2M4MDM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAzMCBEZWMgMjAyNCAxNjozNzoxMiArMDEwMApTdWJqZWN0OiBb UEFUQ0ggdjI2IDcvOF0gT3B0aW1pemUgYXV4aWxpYXJ5IGluZGV4IGhhbmRsaW5nCk1JTUUtVmVy c2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50 LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpTa2lwIHVubmVjZXNzYXJ5IGNvbXB1dGF0aW9ucyBm b3IgYXV4aWxpYXJ5IGluZGljZXMgYnk6Ci0gaW4gdGhlIGluZGV44oCQaW5zZXJ0IHBhdGgsIGRl dGVjdCBhdXhpbGlhcnkgaW5kZXhlcyBhbmQgYnlwYXNzIERhdHVtIHZhbHVlIGNvbXB1dGF0aW9u Ci0gc2V0IGluZGV4VW5jaGFuZ2VkPWZhbHNlIGZvciBhdXhpbGlhcnkgaW5kaWNlcyB0byBhdm9p ZCByZWR1bmRhbnQgY2hlY2tzCgpUaGVzZSBvcHRpbWl6YXRpb25zIHJlZHVjZSBvdmVyaGVhZCBk dXJpbmcgY29uY3VycmVudCBpbmRleCBvcGVyYXRpb25zLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYyAgICAgICAgIHwgMTEgKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNJbmRleGluZy5jIHwgMTEgKysrKysrKy0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5z ZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRh bG9nL2luZGV4LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggZmJlYmM2ZWQ5 YWIuLjIwNDRiNzI0YmE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMK KysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCkBAIC0yOTE2LDYgKzI5MTYsMTcgQEAg Rm9ybUluZGV4RGF0dW0oSW5kZXhJbmZvICppbmRleEluZm8sCiAJTGlzdENlbGwgICAqaW5kZXhw cl9pdGVtOwogCWludAkJCWk7CiAKKwkvKiBBdXhpbGlhcnkgaW5kZXggZG9lcyBub3QgbmVlZCBh bnkgdmFsdWVzIHRvIGJlIGNvbXB1dGVkICovCisJaWYgKHVubGlrZWx5KGluZGV4SW5mby0+aWlf QXV4aWxpYXJ5KSkKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBpbmRleEluZm8tPmlpX051bUluZGV4 QXR0cnM7IGkrKykKKwkJeworCQkJdmFsdWVzW2ldID0gUG9pbnRlckdldERhdHVtKE5VTEwpOwor CQkJaXNudWxsW2ldID0gdHJ1ZTsKKwkJfQorCQlyZXR1cm47CisJfQorCiAJaWYgKGluZGV4SW5m by0+aWlfRXhwcmVzc2lvbnMgIT0gTklMICYmCiAJCWluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNT dGF0ZSA9PSBOSUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0lu ZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCBkZjdl N2JjZTg2ZC4uZmY0Nzk1MTU2MGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBA IC00NDAsMTEgKzQ0MCwxNCBAQCBFeGVjSW5zZXJ0SW5kZXhUdXBsZXMoUmVzdWx0UmVsSW5mbyAq cmVzdWx0UmVsSW5mbywKIAkJICogVGhlcmUncyBkZWZpbml0ZWx5IGdvaW5nIHRvIGJlIGFuIGlu ZGV4X2luc2VydCgpIGNhbGwgZm9yIHRoaXMKIAkJICogaW5kZXguICBJZiB3ZSdyZSBiZWluZyBj YWxsZWQgYXMgcGFydCBvZiBhbiBVUERBVEUgc3RhdGVtZW50LAogCQkgKiBjb25zaWRlciBpZiB0 aGUgJ2luZGV4VW5jaGFuZ2VkJyA9IHRydWUgaGludCBzaG91bGQgYmUgcGFzc2VkLgorCQkgKgor CQkgKiBJbiBjYXNlIG9mIGF1eGlsaWFyeSBpbmRleCBhbHdheXMgcGFzcyBmYWxzZSBhcyBvcHRp bWlzYXRpb24uCiAJCSAqLwotCQlpbmRleFVuY2hhbmdlZCA9IHVwZGF0ZSAmJiBpbmRleF91bmNo YW5nZWRfYnlfdXBkYXRlKHJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCQkJCQkJCQkgZXN0YXRlLAot CQkJCQkJCQkJCQkJCQkJIGluZGV4SW5mbywKLQkJCQkJCQkJCQkJCQkJCSBpbmRleFJlbGF0aW9u KTsKKwkJaW5kZXhVbmNoYW5nZWQgPSB1cGRhdGUgJiYgbGlrZWx5KCFpbmRleEluZm8tPmlpX0F1 eGlsaWFyeSkgJiYKKwkJCQkJCQkJCWluZGV4X3VuY2hhbmdlZF9ieV91cGRhdGUocmVzdWx0UmVs SW5mbywKKwkJCQkJCQkJCQkJCQkJCSAgZXN0YXRlLAorCQkJCQkJCQkJCQkJCQkJICBpbmRleElu Zm8sCisJCQkJCQkJCQkJCQkJCQkgIGluZGV4UmVsYXRpb24pOwogCiAJCXNhdGlzZmllc0NvbnN0 cmFpbnQgPQogCQkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRpb24sIC8qIGluZGV4IHJlbGF0aW9u ICovCi0tIAoyLjQzLjAKCg== --000000000000ac6d6606432d3652 Content-Type: text/plain; charset="US-ASCII"; name="v26-0008-Refresh-snapshot-periodically-during-index-valid.patch" Content-Disposition: attachment; filename="v26-0008-Refresh-snapshot-periodically-during-index-valid.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhrw6pf07 RnJvbSA0MDBjZDE4M2NhOTU1ZTk4OWIxYjlhMmUyZmFmNWRmMzlkMzJlNmY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWtoYWlsIE5pa2FsYXlldSA8bWloYWlsbmlrYWxheWV1QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAyMSBBcHIgMjAyNSAxNDoxMTo1MyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjI2IDgvOF0gUmVmcmVzaCBzbmFwc2hvdCBwZXJpb2RpY2FsbHkgZHVyaW5nIGluZGV4 IHZhbGlkYXRpb24KCkVuaGFuY2VzIHZhbGlkYXRpb24gcGhhc2Ugb2YgY29uY3VycmVudGx5IGJ1 aWx0IGluZGV4ZXMgYnkgcGVyaW9kaWNhbGx5IHJlZnJlc2hpbmcgc25hcHNob3RzIHJhdGhlciB0 aGFuIHVzaW5nIGEgc2luZ2xlIHJlZmVyZW5jZSBzbmFwc2hvdC4gVGhpcyBhZGRyZXNzZXMgaXNz dWVzIHdpdGggeG1pbiBwcm9wYWdhdGlvbiBkdXJpbmcgbG9uZy1ydW5uaW5nIHZhbGlkYXRpb25z LgoKVGhlIHZhbGlkYXRpb24gbm93IHRha2VzIGEgZnJlc2ggc25hcHNob3QgZXZlcnkgZmV3IHBh Z2VzLCBhbGxvd2luZyB0aGUgeG1pbiBob3Jpem9uIHRvIGFkdmFuY2UuIFRoaXMgcmVzdG9yZXMg ZmVhdHVyZSBvZiBjb21taXQgZDlkMDc2MjIyZjViLCB3aGljaCB3YXMgcmV2ZXJ0ZWQgaW4gY29t bWl0IGUyOGJiODg1MTk2OS4gTmV3IFNUSVItYmFzZWQgYXBwcm9hY2ggaXMgbm90IGRlcGVuZHMg b24gc2luZ2xlIHJlZmVyZW5jZSBzbmFwc2hvdCBhbnltb3JlLgotLS0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL1JFQURNRS5IT1QgICAgICAgfCAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYyB8IDczICsrKysrKysrKysrKysrKysrKysrKy0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyAgICB8IDEyICsrKy0KIHNyYy9iYWNrZW5k L2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAgfCA0MiArKysrKysrKysrLS0tLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICB8IDUwICsrLS0tLS0tLS0tLS0tLS0K IHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgfCAyNSArKysrLS0tLQog c3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaCAgICAgICAgICAgICB8IDE1ICsrKysrCiBzcmMv aW5jbHVkZS9jYXRhbG9nL2luZGV4LmggICAgICAgICAgICAgIHwgIDIgKy0KIDggZmlsZXMgY2hh bmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JFQURNRS5IT1QgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9SRUFETUUuSE9UCmluZGV4IDI4ZTJhMTYwNGM0Li42MDRiZGRhNTlmZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVAorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9SRUFETUUuSE9UCkBAIC00MDEsMTIgKzQwMSwxMiBAQCBsaXZlIHR1cGxlLgogV2Ug bWFyayB0aGUgaW5kZXggb3BlbiBmb3IgaW5zZXJ0cyAoYnV0IHN0aWxsIG5vdCByZWFkeSBmb3Ig cmVhZHMpIHRoZW4KIHdlIGFnYWluIHdhaXQgZm9yIHRyYW5zYWN0aW9ucyB3aGljaCBoYXZlIHRo ZSB0YWJsZSBvcGVuLiAgVGhlbiB2YWxpZGF0ZQogdGhlIGluZGV4LiAgVGhpcyBzZWFyY2hlcyBm b3IgdHVwbGVzIG1pc3NpbmcgZnJvbSB0aGUgaW5kZXggaW4gYXV4aWxpYXJ5Ci1pbmRleCwgYW5k IGluc2VydHMgYW55IG1pc3Npbmcgb25lcyBpZiB0aGVtIHZpc2libGUgdG8gcmVmZXJlbmNlIHNu YXBzaG90LgoraW5kZXgsIGFuZCBpbnNlcnRzIGFueSBtaXNzaW5nIG9uZXMgaWYgdGhlbSB2aXNp YmxlIHRvIGZyZXNoIHNuYXBzaG90LgogQWdhaW4sIHRoZSBpbmRleCBlbnRyaWVzIGhhdmUgdG8g aGF2ZSBUSURzIGVxdWFsIHRvIEhPVC1jaGFpbiByb290IFRJRHMsIGJ1dAogdGhlIHZhbHVlIHRv IGJlIGluc2VydGVkIGlzIHRoZSBvbmUgZnJvbSB0aGUgbGl2ZSB0dXBsZS4KIAogVGhlbiB3ZSB3 YWl0IHVudGlsIGV2ZXJ5IHRyYW5zYWN0aW9uIHRoYXQgY291bGQgaGF2ZSBhIHNuYXBzaG90IG9s ZGVyIHRoYW4KLXRoZSBzZWNvbmQgcmVmZXJlbmNlIHNuYXBzaG90IGlzIGZpbmlzaGVkLiAgVGhp cyBlbnN1cmVzIHRoYXQgbm9ib2R5IGlzCit0aGUgbGF0ZXN0IHVzZWQgc25hcHNob3QgaXMgZmlu aXNoZWQuICBUaGlzIGVuc3VyZXMgdGhhdCBub2JvZHkgaXMKIGFsaXZlIGFueSBsb25nZXIgd2hv IGNvdWxkIG5lZWQgdG8gc2VlIGFueSB0dXBsZXMgdGhhdCBtaWdodCBiZSBtaXNzaW5nCiBmcm9t IHRoZSBpbmRleCwgYXMgd2VsbCBhcyBlbnN1cmluZyB0aGF0IG5vIG9uZSBjYW4gc2VlIGFueSBp bmNvbnNpc3RlbnQKIHJvd3MgaW4gYSBicm9rZW4gSE9UIGNoYWluICh0aGUgZmlyc3QgY29uZGl0 aW9uIGlzIHN0cm9uZ2VyIHRoYW4gdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYwppbmRleCBjODVlNTMzMmJhMi4uMTJiYWE4NzI4ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMTk5NiwyMyArMTk5NiwyNiBAQCBoZWFwYW1f aW5kZXhfdmFsaWRhdGVfc2Nhbl9yZWFkX3N0cmVhbV9uZXh0KAogCXJldHVybiByZXN1bHQ7CiB9 CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgVHJhbnNhY3Rpb25JZAogaGVhcGFtX2luZGV4X3ZhbGlk YXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJICAgUmVsYXRpb24gaW5kZXhS ZWxhdGlvbiwKIAkJCQkJCSAgIEluZGV4SW5mbyAqaW5kZXhJbmZvLAotCQkJCQkJICAgU25hcHNo b3Qgc25hcHNob3QsCiAJCQkJCQkgICBWYWxpZGF0ZUluZGV4U3RhdGUgKnN0YXRlLAogCQkJCQkJ ICAgVmFsaWRhdGVJbmRleFN0YXRlICphdXhTdGF0ZSkKIHsKKwlUcmFuc2FjdGlvbklkIGxpbWl0 WG1pbjsKKwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJ TkRFWF9NQVhfS0VZU107CiAKKwlTbmFwc2hvdAkJc25hcHNob3Q7CiAJVHVwbGVUYWJsZVNsb3Qg ICpzbG90OwogCUVTdGF0ZQkJCSplc3RhdGU7CiAJRXhwckNvbnRleHQJCSplY29udGV4dDsKIAlC dWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVM S1JFQUQpOwogCi0JaW50CQkJCW51bV90b19jaGVjazsKKwlpbnQJCQkJbnVtX3RvX2NoZWNrLAor CQkJCQlwYWdlX3JlYWRfY291bnRlciA9IDE7IC8qIHNldCB0byAxIHRvIHNraXAgc25hcHNob3Qg cmVzZXQgYXQgc3RhcnQgKi8KIAlUdXBsZXN0b3Jlc3RhdGUgKnR1cGxlc19mb3JfY2hlY2s7CiAJ VmFsaWRhdGVJbmRleFNjYW5TdGF0ZSBjYWxsYmFja19wcml2YXRlX2RhdGE7CiAKQEAgLTIwMjMs MTQgKzIwMjYsMTYgQEAgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJl bGF0aW9uLAogCS8qIFVzZSAxMCUgb2YgbWVtb3J5IGZvciB0dXBsZSBzdG9yZS4gKi8KIAlpbnQJ CXN0b3JlX3dvcmtfbWVtX3BhcnQgPSBtYWludGVuYW5jZV93b3JrX21lbSAvIDEwOwogCi0JLyoK LQkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4IHZhbHVlcyBmb3IgdGhlIHNvcnQsIHJhdGhlciB0aGFu IGRpcmVjdGx5IHNvcnRpbmcKLQkgKiBpdGVtIHBvaW50ZXJzLiAgVGhpcyBjYW4gYmUgc2lnbmlm aWNhbnRseSBmYXN0ZXIsIHByaW1hcmlseSBiZWNhdXNlIFRJRAotCSAqIGlzIGEgcGFzcy1ieS1y ZWZlcmVuY2UgdHlwZSBvbiBhbGwgcGxhdGZvcm1zLCB3aGVyZWFzIGludDggaXMKLQkgKiBwYXNz LWJ5LXZhbHVlIG9uIG1vc3QgcGxhdGZvcm1zLgotCSAqLworCVB1c2hBY3RpdmVTbmFwc2hvdChH ZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCiAJdHVwbGVzX2Zvcl9jaGVjayA9ICB0dXBsZXN0 b3JlX2JlZ2luX2RhdHVtKElOVDhPSUQsIGZhbHNlLCBmYWxzZSwgc3RvcmVfd29ya19tZW1fcGFy dCk7CiAKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3Qo KTsKKworCUFzc2VydCghSGF2ZVJlZ2lzdGVyZWRPckFjdGl2ZVNuYXBzaG90KCkpOworCUFzc2Vy dCghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CisKIAkvKgogCSAqIHNhbml0 eSBjaGVja3MKIAkgKi8KQEAgLTIwNDYsNiArMjA1MSwyOSBAQCBoZWFwYW1faW5kZXhfdmFsaWRh dGVfc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAKIAlzdGF0ZS0+dHVwbGVzb3J0ID0gYXV4 U3RhdGUtPnR1cGxlc29ydCA9IE5VTEw7CiAKKwkvKgorCSAqIE5vdyB0YWtlIHRoZSBmaXJzdCBz bmFwc2hvdCB0aGF0IHdpbGwgYmUgdXNlZCBieSB0byBmaWx0ZXIgY2FuZGlkYXRlCisJICogdHVw bGVzLiBXZSBhcmUgZ29pbmcgdG8gcmVwbGFjZSBpdCBieSBuZXdlciBzbmFwc2hvdCBldmVyeSBz byBvZnRlbgorCSAqIHRvIHByb3BhZ2F0ZSBob3Jpem9uLgorCSAqCisJICogQmV3YXJlISAgVGhl cmUgbWlnaHQgc3RpbGwgYmUgc25hcHNob3RzIGluIHVzZSB0aGF0IHRyZWF0IHNvbWUgdHJhbnNh Y3Rpb24KKwkgKiBhcyBpbi1wcm9ncmVzcyB0aGF0IG91ciB0ZW1wb3Jhcnkgc25hcHNob3QgdHJl YXRzIGFzIGNvbW1pdHRlZC4KKwkgKgorCSAqIElmIHN1Y2ggYSByZWNlbnRseS1jb21taXR0ZWQg dHJhbnNhY3Rpb24gZGVsZXRlZCB0dXBsZXMgaW4gdGhlIHRhYmxlLAorCSAqIHdlIHdpbGwgbm90 IGluY2x1ZGUgdGhlbSBpbiB0aGUgaW5kZXg7IHlldCB0aG9zZSB0cmFuc2FjdGlvbnMgd2hpY2gK KwkgKiBzZWUgdGhlIGRlbGV0aW5nIG9uZSBhcyBzdGlsbC1pbi1wcm9ncmVzcyB3aWxsIGV4cGVj dCBzdWNoIHR1cGxlcyB0bworCSAqIGJlIHRoZXJlIG9uY2Ugd2UgbWFyayB0aGUgaW5kZXggYXMg dmFsaWQuCisJICoKKwkgKiBXZSBzb2x2ZSB0aGlzIGJ5IHdhaXRpbmcgZm9yIGFsbCBlbmRhbmdl cmVkIHRyYW5zYWN0aW9ucyB0byBleGl0IGJlZm9yZQorCSAqIHdlIG1hcmsgdGhlIGluZGV4IGFz IHZhbGlkLCBmb3IgdGhhdCByZWFzb24gbGltaXRYbWluIGlzIHN1cHBvcnRlZC4KKwkgKgorCSAq IFdlIGFsc28gc2V0IEFjdGl2ZVNuYXBzaG90IHRvIHRoaXMgc25hcCwgc2luY2UgZnVuY3Rpb25z IGluIGluZGV4ZXMgbWF5CisJICogbmVlZCBhIHNuYXBzaG90LgorCSAqLworCXNuYXBzaG90ID0g UmVnaXN0ZXJTbmFwc2hvdChHZXRMYXRlc3RTbmFwc2hvdCgpKTsKKwlQdXNoQWN0aXZlU25hcHNo b3Qoc25hcHNob3QpOworCWxpbWl0WG1pbiA9IHNuYXBzaG90LT54bWluOworCiAJZXN0YXRlID0g Q3JlYXRlRXhlY3V0b3JTdGF0ZSgpOwogCWVjb250ZXh0ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4 dChlc3RhdGUpOwogCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVsYXRpb25HZXRE ZXNjcihoZWFwUmVsYXRpb24pLApAQCAtMjA3OSw2ICsyMTA3LDcgQEAgaGVhcGFtX2luZGV4X3Zh bGlkYXRlX3NjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCiAJCUxvY2tCdWZmZXIoYnVmLCBC VUZGRVJfTE9DS19TSEFSRSk7CiAJCWJsb2NrX251bWJlciA9IEJ1ZmZlckdldEJsb2NrTnVtYmVy KGJ1Zik7CisJCXBhZ2VfcmVhZF9jb3VudGVyKys7CiAKIAkJaSA9IDA7CiAJCXdoaWxlICgob2Zm ID0gdHVwbGVzW2ldKSAhPSBJbnZhbGlkT2Zmc2V0TnVtYmVyKQpAQCAtMjEzNCw2ICsyMTYzLDIw IEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJ fQogCiAJCVJlbGVhc2VCdWZmZXIoYnVmKTsKKyNkZWZpbmUgVkFMSURBVEVfSU5ERVhfUkVTRVRf U05BUFNIT1RfRUFDSF9OX1BBR0UgNDA5NgorCQlpZiAocGFnZV9yZWFkX2NvdW50ZXIgJSBWQUxJ REFURV9JTkRFWF9SRVNFVF9TTkFQU0hPVF9FQUNIX05fUEFHRSA9PSAwKQorCQl7CisJCQlQb3BB Y3RpdmVTbmFwc2hvdCgpOworCQkJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKKwkJCS8q IHRvIG1ha2Ugc3VyZSB3ZSBwcm9wYWdhdGUgeG1pbiAqLworCQkJSW52YWxpZGF0ZUNhdGFsb2dT bmFwc2hvdCgpOworCQkJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4p KTsKKworCQkJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldExhdGVzdFNuYXBzaG90KCkp OworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJCS8qIHhtaW4gc2hvdWxkIG5v dCBnbyBiYWNrd2FyZHMsIGJ1dCBqdXN0IGZvciB0aGUgY2FzZSovCisJCQlsaW1pdFhtaW4gPSBU cmFuc2FjdGlvbklkTmV3ZXIobGltaXRYbWluLCBzbmFwc2hvdC0+eG1pbik7CisJCX0KIAl9CiAK IAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwpAQCAtMjE0Myw5ICsyMTg2LDIx IEBAIGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAly ZWFkX3N0cmVhbV9lbmQocmVhZF9zdHJlYW0pOwogCXR1cGxlc3RvcmVfZW5kKHR1cGxlc19mb3Jf Y2hlY2spOwogCisJLyoKKwkgKiBEcm9wIHRoZSBsYXRlc3Qgc25hcHNob3QuICBXZSBtdXN0IGRv IHRoaXMgYmVmb3JlIHdhaXRpbmcgb3V0IG90aGVyCisJICogc25hcHNob3QgaG9sZGVycywgZWxz ZSB3ZSB3aWxsIGRlYWRsb2NrIGFnYWluc3Qgb3RoZXIgcHJvY2Vzc2VzIGFsc28KKwkgKiBkb2lu ZyBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZLCB3aGljaCB3b3VsZCBzZWUgb3VyIHNuYXBzaG90 IGFzIG9uZQorCSAqIHRoZXkgbXVzdCB3YWl0IGZvci4KKwkgKi8KKwlQb3BBY3RpdmVTbmFwc2hv dCgpOworCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJSW52YWxpZGF0ZUNhdGFsb2dT bmFwc2hvdCgpOworCUFzc2VydChNeVByb2MtPnhtaW4gPT0gSW52YWxpZFRyYW5zYWN0aW9uSWQp OwogCS8qIFRoZXNlIG1heSBoYXZlIGJlZW4gcG9pbnRpbmcgdG8gdGhlIG5vdy1nb25lIGVzdGF0 ZSAqLwogCWluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnNTdGF0ZSA9IE5JTDsKIAlpbmRleEluZm8t PmlpX1ByZWRpY2F0ZVN0YXRlID0gTlVMTDsKKworCXJldHVybiBsaW1pdFhtaW47CiB9CiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwppbmRleCA3MWVmMmU1MDM2Zi4uODE0 MDZkOGZjMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVt LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwpAQCAtMTkxLDE0 ICsxOTEsMTYgQEAgdmFjdXVtTGVhZlBhZ2Uoc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMsIFJlbGF0 aW9uIGluZGV4LCBCdWZmZXIgYnVmZmVyLAogCQkJICogQWRkIHRhcmdldCBUSUQgdG8gcGVuZGlu ZyBsaXN0IGlmIHRoZSByZWRpcmVjdGlvbiBjb3VsZCBoYXZlCiAJCQkgKiBoYXBwZW5lZCBzaW5j ZSBWQUNVVU0gc3RhcnRlZC4gIChJZiB4aWQgaXMgaW52YWxpZCwgYXNzdW1lIGl0CiAJCQkgKiBt dXN0IGhhdmUgaGFwcGVuZWQgYmVmb3JlIFZBQ1VVTSBzdGFydGVkLCBzaW5jZSBSRUlOREVYCi0J CQkgKiBDT05DVVJSRU5UTFkgbG9ja3Mgb3V0IFZBQ1VVTS4pCisJCQkgKiBDT05DVVJSRU5UTFkg bG9ja3Mgb3V0IFZBQ1VVTSwgaWYgbXlYbWluIGlzIGludmFsaWQgaXQgaXMKKwkJCSAqIHZhbGlk YXRpb24gc2Nhbi4pCiAJCQkgKgogCQkJICogTm90ZTogd2UgY291bGQgbWFrZSBhIHRpZ2h0ZXIg dGVzdCBieSBzZWVpbmcgaWYgdGhlIHhpZCBpcwogCQkJICogInJ1bm5pbmciIGFjY29yZGluZyB0 byB0aGUgYWN0aXZlIHNuYXBzaG90OyBidXQgc25hcG1nci5jCiAJCQkgKiBkb2Vzbid0IGN1cnJl bnRseSBleHBvcnQgYSBzdWl0YWJsZSBBUEksIGFuZCBpdCdzIG5vdCBlbnRpcmVseQogCQkJICog Y2xlYXIgdGhhdCBhIHRpZ2h0ZXIgdGVzdCBpcyB3b3J0aCB0aGUgY3ljbGVzIGFueXdheS4KIAkJ CSAqLwotCQkJaWYgKFRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMoZHQtPnhpZCwgYmRzLT5t eVhtaW4pKQorCQkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChiZHMtPm15WG1pbikgfHwKKwkJ CQkJVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhkdC0+eGlkLCBiZHMtPm15WG1pbikpCiAJ CQkJc3BnQWRkUGVuZGluZ1RJRChiZHMsICZkdC0+cG9pbnRlcik7CiAJCX0KIAkJZWxzZQpAQCAt ODA4LDcgKzgxMCw2IEBAIHNwZ3ZhY3V1bXNjYW4oc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMpCiAJ LyogRmluaXNoIHNldHRpbmcgdXAgc3BnQnVsa0RlbGV0ZVN0YXRlICovCiAJaW5pdFNwR2lzdFN0 YXRlKCZiZHMtPnNwZ3N0YXRlLCBpbmRleCk7CiAJYmRzLT5wZW5kaW5nTGlzdCA9IE5VTEw7Ci0J YmRzLT5teVhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOwogCWJkcy0+bGFzdEZpbGxl ZEJsb2NrID0gU1BHSVNUX0xBU1RfRklYRURfQkxLTk87CiAKIAkvKgpAQCAtOTU5LDYgKzk2MCwx MCBAQCBzcGdidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRl UmVzdWx0ICpzdGF0cywKIAliZHMuc3RhdHMgPSBzdGF0czsKIAliZHMuY2FsbGJhY2sgPSBjYWxs YmFjazsKIAliZHMuY2FsbGJhY2tfc3RhdGUgPSBjYWxsYmFja19zdGF0ZTsKKwlpZiAoaW5mby0+ dmFsaWRhdGVfaW5kZXgpCisJCWJkcy5teVhtaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwll bHNlCisJCWJkcy5teVhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOwogCiAJc3BndmFj dXVtc2NhbigmYmRzKTsKIApAQCAtOTk5LDYgKzEwMDQsNyBAQCBzcGd2YWN1dW1jbGVhbnVwKElu ZGV4VmFjdXVtSW5mbyAqaW5mbywgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cykKIAkJYmRz LnN0YXRzID0gc3RhdHM7CiAJCWJkcy5jYWxsYmFjayA9IGR1bW15X2NhbGxiYWNrOwogCQliZHMu Y2FsbGJhY2tfc3RhdGUgPSBOVUxMOworCQliZHMubXlYbWluID0gR2V0QWN0aXZlU25hcHNob3Qo KS0+eG1pbjsKIAogCQlzcGd2YWN1dW1zY2FuKCZiZHMpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvaW5kZXguYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwppbmRl eCAyMDQ0YjcyNGJhNS4uMjQxNWUxZjJmMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKQEAgLTM1MTMsOCAr MzUxMyw5IEBAIEluZGV4Q2hlY2tFeGNsdXNpb24oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogICog aW5zZXJ0IHRoZWlyIG5ldyB0dXBsZXMgaW50byBpdC4gQXQgdGhlIHNhbWUgbW9tZW50IHdlIGNs ZWFyICJpbmRpc3JlYWR5IiBmb3IKICAqIGF1eGlsaWFyeSBpbmRleCwgc2luY2UgaXQgaXMgbm8g bW9yZSByZXF1aXJlZCB0byBiZSB1cGRhdGVkLgogICoKLSAqIFdlIHRoZW4gdGFrZSBhIG5ldyBy ZWZlcmVuY2Ugc25hcHNob3QsIGFueSB0dXBsZXMgdGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCi0g KiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGluIHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0 byB0aGUgaW5kZXguCisgKiBXZSB0aGVuIHRha2UgYSBuZXcgc25hcHNob3QsIGFueSB0dXBsZXMg dGhhdCBhcmUgdmFsaWQgYWNjb3JkaW5nCisgKiB0byB0aGlzIHNuYXAsIGJ1dCBhcmUgbm90IGlu IHRoZSBpbmRleCwgbXVzdCBiZSBhZGRlZCB0byB0aGUgaW5kZXguIEluCisgKiBvcmRlciB0byBw cm9wYWdhdGUgeG1pbiB3ZSByZXNldCB0aGF0IHNuYXBzaG90IGV2ZXJ5IGZldyBzbyBvZnRlbi4K ICAqIChBbnkgdHVwbGVzIGNvbW1pdHRlZCBsaXZlIGFmdGVyIHRoZSBzbmFwIHdpbGwgYmUgaW5z ZXJ0ZWQgaW50byB0aGUKICAqIGluZGV4IGJ5IHRoZWlyIG9yaWdpbmF0aW5nIHRyYW5zYWN0aW9u LiAgQW55IHR1cGxlcyBjb21taXR0ZWQgZGVhZCBiZWZvcmUKICAqIHRoZSBzbmFwIG5lZWQgbm90 IGJlIGluZGV4ZWQsIGJlY2F1c2Ugd2Ugd2lsbCB3YWl0IG91dCBhbGwgdHJhbnNhY3Rpb25zCkBA IC0zNTI3LDcgKzM1MjgsNyBAQCBJbmRleENoZWNrRXhjbHVzaW9uKFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwKICAqIFRJRHMgb2YgYm90aCBhdXhpbGlhcnkgYW5kIHRhcmdldCBpbmRleGVzLCBhbmQg ZG9pbmcgYSAibWVyZ2Ugam9pbiIgYWdhaW5zdAogICogdGhlIFRJRCBsaXN0cyB0byBzZWUgd2hp Y2ggdHVwbGVzIGZyb20gYXV4aWxpYXJ5IGluZGV4IGFyZSBtaXNzaW5nIGZyb20gdGhlCiAgKiB0 YXJnZXQgaW5kZXguICBUaHVzIHdlIHdpbGwgZW5zdXJlIHRoYXQgYWxsIHR1cGxlcyB2YWxpZCBh Y2NvcmRpbmcgdG8gdGhlCi0gKiByZWZlcmVuY2Ugc25hcHNob3QgYXJlIGluIHRoZSBpbmRleC4g Tm90aWNlIHdlIG5lZWQgdG8gZG8gYnVsa2RlbGV0ZSBpbiB0aGUKKyAqIGxhdGVzdCBzbmFwc2hv dCBhcmUgaW4gdGhlIGluZGV4LiBOb3RpY2Ugd2UgbmVlZCB0byBkbyBidWxrZGVsZXRlIGluIHRo ZQogICogcGFydGljdWxhciBvcmRlcjogYXV4aWxpYXJ5IGZpcnN0LCB0YXJnZXQgbGFzdC4KICAq CiAgKiBCdWlsZGluZyBhIHVuaXF1ZSBpbmRleCB0aGlzIHdheSBpcyB0cmlja3k6IHdlIG1pZ2h0 IHRyeSB0byBpbnNlcnQgYQpAQCAtMzU0OCwxMyArMzU0OSwxNCBAQCBJbmRleENoZWNrRXhjbHVz aW9uKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKICAqCiAgKiBBbHNvLCBzb21lIGFjdGlvbnMgdG8g Y29uY3VycmVudCBkcm9wIHRoZSBhdXhpbGlhcnkgaW5kZXggYXJlIHBlcmZvcm1lZC4KICAqLwot dm9pZAotdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRl eElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKK1RyYW5zYWN0aW9uSWQKK3ZhbGlkYXRlX2luZGV4KE9p ZCBoZWFwSWQsIE9pZCBpbmRleElkLCBPaWQgYXV4SW5kZXhJZCkKIHsKIAlSZWxhdGlvbgloZWFw UmVsYXRpb24sCiAJCQkJaW5kZXhSZWxhdGlvbiwKIAkJCQlhdXhJbmRleFJlbGF0aW9uOwogCUlu ZGV4SW5mbyAgKmluZGV4SW5mbzsKKwlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKIAlJbmRleFZh Y3V1bUluZm8gaXZpbmZvLCBhdXhpdmluZm87CiAJVmFsaWRhdGVJbmRleFN0YXRlIHN0YXRlLCBh dXhTdGF0ZTsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKQEAgLTM2MDQsOCArMzYwNiwxMiBAQCB2YWxp ZGF0ZV9pbmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQsIFNuYXBz aG90IHNuYXBzaG90KQogCSAqIEZldGNoIGluZm8gbmVlZGVkIGZvciBpbmRleF9pbnNlcnQuICAo WW91IG1pZ2h0IHRoaW5rIHRoaXMgc2hvdWxkIGJlCiAJICogcGFzc2VkIGluIGZyb20gRGVmaW5l SW5kZXgsIGJ1dCBpdHMgY29weSBpcyBsb25nIGdvbmUgZHVlIHRvIGhhdmluZwogCSAqIGJlZW4g YnVpbHQgaW4gYSBwcmV2aW91cyB0cmFuc2FjdGlvbi4pCisJICoKKwkgKiBXZSBtaWdodCBuZWVk IHNuYXBzaG90IGZvciBpbmRleCBleHByZXNzaW9ucyBvciBwcmVkaWNhdGVzLgogCSAqLworCVB1 c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogCWluZGV4SW5mbyA9 IEJ1aWxkSW5kZXhJbmZvKGluZGV4UmVsYXRpb24pOworCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAK IAkvKiBtYXJrIGJ1aWxkIGlzIGNvbmN1cnJlbnQganVzdCBmb3IgY29uc2lzdGVuY3kgKi8KIAlp bmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSB0cnVlOwpAQCAtMzY0MSw2ICszNjQ3LDkgQEAgdmFs aWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFw c2hvdCBzbmFwc2hvdCkKIAkJCQkJCQkJCQkgICBOVUxMLCBUVVBMRVNPUlRfTk9ORSk7CiAJYXV4 U3RhdGUuaHR1cHMgPSBhdXhTdGF0ZS5pdHVwcyA9IGF1eFN0YXRlLnR1cHNfaW5zZXJ0ZWQgPSAw OwogCisJLyogdHVwbGVzb3J0X2JlZ2luX2RhdHVtIG1heSByZXF1aXJlIGNhdGFsb2cgc25hcHNo b3QgKi8KKwlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CisKIAkodm9pZCkgaW5kZXhfYnVs a19kZWxldGUoJmF1eGl2aW5mbywgTlVMTCwKIAkJCQkJCQkgdmFsaWRhdGVfaW5kZXhfY2FsbGJh Y2ssICZhdXhTdGF0ZSk7CiAJLyogSWYgYXV4IGluZGV4IGlzIGVtcHR5LCBtZXJnZSBtYXkgYmUg c2tpcHBlZCAqLwpAQCAtMzY3NSw2ICszNjg0LDkgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJ ZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAkJCQkJ CQkJCQkJTlVMTCwgVFVQTEVTT1JUX05PTkUpOwogCXN0YXRlLmh0dXBzID0gc3RhdGUuaXR1cHMg PSBzdGF0ZS50dXBzX2luc2VydGVkID0gMDsKIAorCS8qIHR1cGxlc29ydF9iZWdpbl9kYXR1bSBt YXkgcmVxdWlyZSBjYXRhbG9nIHNuYXBzaG90ICovCisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hv dCgpOworCiAJLyogYW1idWxrZGVsZXRlIHVwZGF0ZXMgcHJvZ3Jlc3MgbWV0cmljcyAqLwogCSh2 b2lkKSBpbmRleF9idWxrX2RlbGV0ZSgmaXZpbmZvLCBOVUxMLAogCQkJCQkJCSB2YWxpZGF0ZV9p bmRleF9jYWxsYmFjaywgJnN0YXRlKTsKQEAgLTM2OTQsMTkgKzM3MDYsMjQgQEAgdmFsaWRhdGVf aW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBz bmFwc2hvdCkKIAkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbSgzLCBwcm9ncmVz c19pbmRleCwgcHJvZ3Jlc3NfdmFscyk7CiAJfQogCXR1cGxlc29ydF9wZXJmb3Jtc29ydChzdGF0 ZS50dXBsZXNvcnQpOworCS8qIHR1cGxlc29ydF9wZXJmb3Jtc29ydCBtYXkgcmVxdWlyZSBjYXRh bG9nIHNuYXBzaG90ICovCisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOworCiAJdHVwbGVz b3J0X3BlcmZvcm1zb3J0KGF1eFN0YXRlLnR1cGxlc29ydCk7CisJLyogdHVwbGVzb3J0X3BlcmZv cm1zb3J0IG1heSByZXF1aXJlIGNhdGFsb2cgc25hcHNob3QgKi8KKwlJbnZhbGlkYXRlQ2F0YWxv Z1NuYXBzaG90KCk7CisJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4p KTsKIAogCS8qCiAJICogTm93IG1lcmdlIGJvdGggaW5kZXhlcwogCSAqLwogCXBnc3RhdF9wcm9n cmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAogCQkJCQkJCQkgUFJP R1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX0lEWE1FUkdFKTsKLQl0YWJsZV9pbmRleF92 YWxpZGF0ZV9zY2FuKGhlYXBSZWxhdGlvbiwKLQkJCQkJCQkgIGluZGV4UmVsYXRpb24sCi0JCQkJ CQkJICBpbmRleEluZm8sCi0JCQkJCQkJICBzbmFwc2hvdCwKLQkJCQkJCQkgICZzdGF0ZSwKLQkJ CQkJCQkgICZhdXhTdGF0ZSk7CisJbGltaXRYbWluID0gdGFibGVfaW5kZXhfdmFsaWRhdGVfc2Nh bihoZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJICBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCSAg aW5kZXhJbmZvLAorCQkJCQkJCQkJCSAgJnN0YXRlLAorCQkJCQkJCQkJCSAgJmF1eFN0YXRlKTsK IAogCS8qIFR1cGxlIHNvcnQgY2xvc2VkIGJ5IHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4gKi8K IAlBc3NlcnQoc3RhdGUudHVwbGVzb3J0ID09IE5VTEwgJiYgYXV4U3RhdGUudHVwbGVzb3J0ID09 IE5VTEwpOwpAQCAtMzcyOSw2ICszNzQ2LDkgQEAgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwg T2lkIGluZGV4SWQsIE9pZCBhdXhJbmRleElkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAlpbmRleF9j bG9zZShhdXhJbmRleFJlbGF0aW9uLCBOb0xvY2spOwogCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRp b24sIE5vTG9jayk7CiAJdGFibGVfY2xvc2UoaGVhcFJlbGF0aW9uLCBOb0xvY2spOworCisJQXNz ZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKKwlyZXR1cm4gbGltaXRY bWluOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwppbmRleCBjYTRkYzAwM2QxNS4u NzUxNTJkNjliODYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC01OTEsNyArNTkxLDYg QEAgRGVmaW5lSW5kZXgoT2lkIHRhYmxlSWQsCiAJTG9ja1JlbElkCWhlYXByZWxpZDsKIAlMT0NL VEFHCQloZWFwbG9ja3RhZzsKIAlMT0NLTU9ERQlsb2NrbW9kZTsKLQlTbmFwc2hvdAlzbmFwc2hv dDsKIAlPaWQJCQlyb290X3NhdmVfdXNlcmlkOwogCWludAkJCXJvb3Rfc2F2ZV9zZWNfY29udGV4 dDsKIAlpbnQJCQlyb290X3NhdmVfbmVzdGxldmVsOwpAQCAtMTgwNSwzMiArMTgwNCwxMSBAQCBE ZWZpbmVJbmRleChPaWQgdGFibGVJZCwKIAkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRz IHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCiAJaWYgKHNhZmVfaW5kZXgpCiAJ CXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7Ci0KLQkvKgotCSAqIE5vdyB0YWtlIHRoZSAicmVm ZXJlbmNlIHNuYXBzaG90IiB0aGF0IHdpbGwgYmUgdXNlZCBieSB2YWxpZGF0ZV9pbmRleCgpCi0J ICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMuICBCZXdhcmUhICBUaGVyZSBtaWdodCBzdGls bCBiZSBzbmFwc2hvdHMgaW4KLQkgKiB1c2UgdGhhdCB0cmVhdCBzb21lIHRyYW5zYWN0aW9uIGFz IGluLXByb2dyZXNzIHRoYXQgb3VyIHJlZmVyZW5jZQotCSAqIHNuYXBzaG90IHRyZWF0cyBhcyBj b21taXR0ZWQuICBJZiBzdWNoIGEgcmVjZW50bHktY29tbWl0dGVkIHRyYW5zYWN0aW9uCi0JICog ZGVsZXRlZCB0dXBsZXMgaW4gdGhlIHRhYmxlLCB3ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0gaW4g dGhlIGluZGV4OyB5ZXQKLQkgKiB0aG9zZSB0cmFuc2FjdGlvbnMgd2hpY2ggc2VlIHRoZSBkZWxl dGluZyBvbmUgYXMgc3RpbGwtaW4tcHJvZ3Jlc3Mgd2lsbAotCSAqIGV4cGVjdCBzdWNoIHR1cGxl cyB0byBiZSB0aGVyZSBvbmNlIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLgotCSAqCi0JICog V2Ugc29sdmUgdGhpcyBieSB3YWl0aW5nIGZvciBhbGwgZW5kYW5nZXJlZCB0cmFuc2FjdGlvbnMg dG8gZXhpdCBiZWZvcmUKLQkgKiB3ZSBtYXJrIHRoZSBpbmRleCBhcyB2YWxpZC4KLQkgKgotCSAq IFdlIGFsc28gc2V0IEFjdGl2ZVNuYXBzaG90IHRvIHRoaXMgc25hcCwgc2luY2UgZnVuY3Rpb25z IGluIGluZGV4ZXMgbWF5Ci0JICogbmVlZCBhIHNuYXBzaG90LgotCSAqLwotCXNuYXBzaG90ID0g UmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwotCVB1c2hBY3RpdmVT bmFwc2hvdChzbmFwc2hvdCk7CiAJLyoKIAkgKiBNZXJnZSBjb250ZW50IG9mIGF1eGlsaWFyeSBh bmQgdGFyZ2V0IGluZGV4ZXMgLSBpbnNlcnQgYW55IG1pc3NpbmcgaW5kZXggZW50cmllcy4KIAkg Ki8KLQl2YWxpZGF0ZV9pbmRleCh0YWJsZUlkLCBpbmRleFJlbGF0aW9uSWQsIGF1eEluZGV4UmVs YXRpb25JZCwgc25hcHNob3QpOwotCWxpbWl0WG1pbiA9IHNuYXBzaG90LT54bWluOworCWxpbWl0 WG1pbiA9IHZhbGlkYXRlX2luZGV4KHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCwgYXV4SW5kZXhS ZWxhdGlvbklkKTsKIAotCVBvcEFjdGl2ZVNuYXBzaG90KCk7Ci0JVW5yZWdpc3RlclNuYXBzaG90 KHNuYXBzaG90KTsKIAkvKgogCSAqIFRoZSBzbmFwc2hvdCBzdWJzeXN0ZW0gY291bGQgc3RpbGwg Y29udGFpbiByZWdpc3RlcmVkIHNuYXBzaG90cyB0aGF0CiAJICogYXJlIGhvbGRpbmcgYmFjayBv dXIgcHJvY2VzcydzIGFkdmVydGlzZWQgeG1pbjsgaW4gcGFydGljdWxhciwgaWYKQEAgLTE4NTIs OCArMTgzMCw4IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCS8qCiAJICogVGhlIGluZGV4 IGlzIG5vdyB2YWxpZCBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBjb250YWlucyBhbGwgY3VycmVudGx5 CiAJICogaW50ZXJlc3RpbmcgdHVwbGVzLiAgQnV0IHNpbmNlIGl0IG1pZ2h0IG5vdCBjb250YWlu IHR1cGxlcyBkZWxldGVkIGp1c3QKLQkgKiBiZWZvcmUgdGhlIHJlZmVyZW5jZSBzbmFwIHdhcyB0 YWtlbiwgd2UgaGF2ZSB0byB3YWl0IG91dCBhbnkKLQkgKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdo dCBoYXZlIG9sZGVyIHNuYXBzaG90cy4KKwkgKiBiZWZvcmUgdGhlIGxhc3Qgc25hcHNob3QgZHVy aW5nIHZhbGlkYXRpbmcgd2FzIHRha2VuLCB3ZSBoYXZlIHRvIHdhaXQKKwkgKiBvdXQgYW55IHRy YW5zYWN0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgb2xkZXIgc25hcHNob3RzLgogCSAqLwogCUlOSkVD VElPTl9QT0lOVCgiZGVmaW5lX2luZGV4X2JlZm9yZV9zZXRfdmFsaWQiLCBOVUxMKTsKIAlwZ3N0 YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKQEAgLTQ0 MDEsNyArNDM3OSw2IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBSZWluZGV4 U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJewogCQlSZWluZGV4SW5k ZXhJbmZvICpuZXdpZHggPSBsZmlyc3QobGMpOwogCQlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsK LQkJU25hcHNob3QJc25hcHNob3Q7CiAKIAkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIApA QCAtNDQxNiwxMyArNDM5Myw2IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShjb25zdCBS ZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCWlmIChuZXdp ZHgtPnNhZmUpCiAJCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOwogCi0JCS8qCi0JCSAqIFRh a2UgdGhlICJyZWZlcmVuY2Ugc25hcHNob3QiIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRl X2luZGV4KCkKLQkJICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMuCi0JCSAqLwotCQlzbmFw c2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKLQkJUHVz aEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKLQogCQkvKgogCQkgKiBVcGRhdGUgcHJvZ3Jlc3Mg Zm9yIHRoZSBpbmRleCB0byBidWlsZCwgd2l0aCB0aGUgY29ycmVjdCBwYXJlbnQKIAkJICogdGFi bGUgaW52b2x2ZWQuCkBAIC00NDM0LDE2ICs0NDA0LDggQEAgUmVpbmRleFJlbGF0aW9uQ29uY3Vy cmVudGx5KGNvbnN0IFJlaW5kZXhTdG10ICpzdG10LCBPaWQgcmVsYXRpb25PaWQsIGNvbnN0IFJl aW4KIAkJcHJvZ3Jlc3NfdmFsc1szXSA9IG5ld2lkeC0+YW1JZDsKIAkJcGdzdGF0X3Byb2dyZXNz X3VwZGF0ZV9tdWx0aV9wYXJhbSg0LCBwcm9ncmVzc19pbmRleCwgcHJvZ3Jlc3NfdmFscyk7CiAK LQkJdmFsaWRhdGVfaW5kZXgobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmluZGV4SWQsIG5ld2lk eC0+YXV4SW5kZXhJZCwgc25hcHNob3QpOwotCi0JCS8qCi0JCSAqIFdlIGNhbiBub3cgZG8gYXdh eSB3aXRoIG91ciBhY3RpdmUgc25hcHNob3QsIHdlIHN0aWxsIG5lZWQgdG8gc2F2ZQotCQkgKiB0 aGUgeG1pbiBsaW1pdCB0byB3YWl0IGZvciBvbGRlciBzbmFwc2hvdHMuCi0JCSAqLwotCQlsaW1p dFhtaW4gPSBzbmFwc2hvdC0+eG1pbjsKLQotCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwotCQlVbnJl Z2lzdGVyU25hcHNob3Qoc25hcHNob3QpOworCQlsaW1pdFhtaW4gPSB2YWxpZGF0ZV9pbmRleChu ZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+aW5kZXhJZCwgbmV3aWR4LT5hdXhJbmRleElkKTsKKwkJ QXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKIAogCQkvKgogCQkg KiBUbyBlbnN1cmUgbm8gZGVhZGxvY2tzLCB3ZSBtdXN0IGNvbW1pdCBhbmQgc3RhcnQgeWV0IGFu b3RoZXIKQEAgLTQ0NTYsNyArNDQxOCw3IEBAIFJlaW5kZXhSZWxhdGlvbkNvbmN1cnJlbnRseShj b25zdCBSZWluZGV4U3RtdCAqc3RtdCwgT2lkIHJlbGF0aW9uT2lkLCBjb25zdCBSZWluCiAJCS8q CiAJCSAqIFRoZSBpbmRleCBpcyBub3cgdmFsaWQgaW4gdGhlIHNlbnNlIHRoYXQgaXQgY29udGFp bnMgYWxsIGN1cnJlbnRseQogCQkgKiBpbnRlcmVzdGluZyB0dXBsZXMuICBCdXQgc2luY2UgaXQg bWlnaHQgbm90IGNvbnRhaW4gdHVwbGVzIGRlbGV0ZWQKLQkJICoganVzdCBiZWZvcmUgdGhlIHJl ZmVyZW5jZSBzbmFwIHdhcyB0YWtlbiwgd2UgaGF2ZSB0byB3YWl0IG91dCBhbnkKKwkJICoganVz dCBiZWZvcmUgdGhlIGxhdGVzdCBzbmFwIHdhcyB0YWtlbiwgd2UgaGF2ZSB0byB3YWl0IG91dCBh bnkKIAkJICogdHJhbnNhY3Rpb25zIHRoYXQgbWlnaHQgaGF2ZSBvbGRlciBzbmFwc2hvdHMuCiAJ CSAqCiAJCSAqIEJlY2F1c2Ugd2UgZG9uJ3QgdGFrZSBhIHNuYXBzaG90IG9yIFhpZCBpbiB0aGlz IHRyYW5zYWN0aW9uLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMjI0NDZiMzIxNTcuLjVmYTYwZThl MzdiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTcwMiwxMiArNzAyLDExIEBAIHR5cGVkZWYgc3Ry dWN0IFRhYmxlQW1Sb3V0aW5lCiAJCQkJCQkJCQkJICAgVGFibGVTY2FuRGVzYyBzY2FuKTsKIAog CS8qIHNlZSB0YWJsZV9pbmRleF92YWxpZGF0ZV9zY2FuIGZvciByZWZlcmVuY2UgYWJvdXQgcGFy YW1ldGVycyAqLwotCXZvaWQJCSgqaW5kZXhfdmFsaWRhdGVfc2NhbikgKFJlbGF0aW9uIHRhYmxl X3JlbCwKLQkJCQkJCQkJCQlSZWxhdGlvbiBpbmRleF9yZWwsCi0JCQkJCQkJCQkJSW5kZXhJbmZv ICppbmRleF9pbmZvLAotCQkJCQkJCQkJCVNuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCVZh bGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCi0JCQkJCQkJCQkJVmFsaWRhdGVJbmRleFN0YXRlICph dXhfc3RhdGUpOworCVRyYW5zYWN0aW9uSWQgCQkoKmluZGV4X3ZhbGlkYXRlX3NjYW4pIChSZWxh dGlvbiB0YWJsZV9yZWwsCisJCQkJCQkJCQkJCQlSZWxhdGlvbiBpbmRleF9yZWwsCisJCQkJCQkJ CQkJCQlJbmRleEluZm8gKmluZGV4X2luZm8sCisJCQkJCQkJCQkJCQlWYWxpZGF0ZUluZGV4U3Rh dGUgKnN0YXRlLAorCQkJCQkJCQkJCQkJVmFsaWRhdGVJbmRleFN0YXRlICphdXhfc3RhdGUpOwog CiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4MDgsMjAgKzE4MDcsMTggQEAgdGFibGVfaW5k ZXhfYnVpbGRfcmFuZ2Vfc2NhbihSZWxhdGlvbiB0YWJsZV9yZWwsCiAgKiBOb3RlOiBpdCBpcyBy ZXNwb25zaWJpbGl0eSBvZiB0aGF0IGZ1bmN0aW9uIHRvIGNsb3NlIHNvcnRzdGF0ZXMgaW4KICAq IGJvdGggYHN0YXRlYCBhbmQgYGF1eHN0YXRlYC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitz dGF0aWMgaW5saW5lIFRyYW5zYWN0aW9uSWQKIHRhYmxlX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVs YXRpb24gdGFibGVfcmVsLAogCQkJCQkJICBSZWxhdGlvbiBpbmRleF9yZWwsCiAJCQkJCQkgIElu ZGV4SW5mbyAqaW5kZXhfaW5mbywKLQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkg IFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCiAJCQkJCQkgIFZhbGlkYXRlSW5kZXhTdGF0ZSAq YXV4c3RhdGUpCiB7Ci0JdGFibGVfcmVsLT5yZF90YWJsZWFtLT5pbmRleF92YWxpZGF0ZV9zY2Fu KHRhYmxlX3JlbCwKLQkJCQkJCQkJCQkJICAgaW5kZXhfcmVsLAotCQkJCQkJCQkJCQkgICBpbmRl eF9pbmZvLAotCQkJCQkJCQkJCQkgICBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICAgc3RhdGUsCi0J CQkJCQkJCQkJCSAgIGF1eHN0YXRlKTsKKwlyZXR1cm4gdGFibGVfcmVsLT5yZF90YWJsZWFtLT5p bmRleF92YWxpZGF0ZV9zY2FuKHRhYmxlX3JlbCwKKwkJCQkJCQkJCQkJCQkgIGluZGV4X3JlbCwK KwkJCQkJCQkJCQkJCQkgIGluZGV4X2luZm8sCisJCQkJCQkJCQkJCQkJICBzdGF0ZSwKKwkJCQkJ CQkJCQkJCQkgIGF1eHN0YXRlKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaAppbmRleCBjOWUyMDQx ODI3NS4uYjRhNDQ0YTY2ZTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2Ft LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaApAQCAtNDE3LDYgKzQxNywyMSBA QCBOb3JtYWxUcmFuc2FjdGlvbklkT2xkZXIoVHJhbnNhY3Rpb25JZCBhLCBUcmFuc2FjdGlvbklk IGIpCiAJcmV0dXJuIGI7CiB9CiAKKy8qIHJldHVybiB0aGUgbmV3ZXIgb2YgdGhlIHR3byBJRHMg Ki8KK3N0YXRpYyBpbmxpbmUgVHJhbnNhY3Rpb25JZAorVHJhbnNhY3Rpb25JZE5ld2VyKFRyYW5z YWN0aW9uSWQgYSwgVHJhbnNhY3Rpb25JZCBiKQoreworCWlmICghVHJhbnNhY3Rpb25JZElzVmFs aWQoYSkpCisJCXJldHVybiBiOworCisJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChiKSkKKwkJ cmV0dXJuIGE7CisKKwlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3MoYSwgYikpCisJCXJldHVybiBh OworCXJldHVybiBiOworfQorCiAvKiByZXR1cm4gdGhlIG5ld2VyIG9mIHRoZSB0d28gSURzICov CiBzdGF0aWMgaW5saW5lIEZ1bGxUcmFuc2FjdGlvbklkCiBGdWxsVHJhbnNhY3Rpb25JZE5ld2Vy KEZ1bGxUcmFuc2FjdGlvbklkIGEsIEZ1bGxUcmFuc2FjdGlvbklkIGIpCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgK aW5kZXggYzI5ZjQ0ZjI0NjUuLjA1MWFjMDJmZjljIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL2luZGV4LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9pbmRleC5oCkBAIC0xNTIs NyArMTUyLDcgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9u LAogCQkJCQkJYm9vbCBpc3JlaW5kZXgsCiAJCQkJCQlib29sIHBhcmFsbGVsKTsKIAotZXh0ZXJu IHZvaWQgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRl eElkLCBTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gVHJhbnNhY3Rpb25JZCB2YWxpZGF0ZV9p bmRleChPaWQgaGVhcElkLCBPaWQgaW5kZXhJZCwgT2lkIGF1eEluZGV4SWQpOwogCiBleHRlcm4g dm9pZCBpbmRleF9zZXRfc3RhdGVfZmxhZ3MoT2lkIGluZGV4SWQsIEluZGV4U3RhdGVGbGFnc0Fj dGlvbiBhY3Rpb24pOwogCi0tIAoyLjQzLjAKCg== --000000000000ac6d6606432d3652--