Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vnrWd-00ChTf-2I for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Feb 2026 05:03:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vnrWc-00FGcF-2N for pgsql-hackers@arkaria.postgresql.org; Thu, 05 Feb 2026 05:03:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vnrWc-00FGc5-15 for pgsql-hackers@lists.postgresql.org; Thu, 05 Feb 2026 05:03:30 +0000 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vnrWZ-000000018k9-482k for pgsql-hackers@lists.postgresql.org; Thu, 05 Feb 2026 05:03:29 +0000 Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-385bc6910eeso4097611fa.2 for ; Wed, 04 Feb 2026 21:03:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770267806; cv=none; d=google.com; s=arc-20240605; b=INNiB8GVlHHn461sNvuAWd3PZg3Uqwksd5/6/R06pNTjJX3cCBHgIOOTM31vWnIE5s FjgCWgUvIeFFVyAt5w/nPrRRTKCM9hlgQbFsmlgZrt8l5Bcs+cphIpy23RNbASMnQF+/ Thik2i0/o5z4GPIgqnrzdxSMrx7hWhKyxOPN+qTassZFGop7/YoTufS3/4MVLztpg+ua /Tn4n06b+nn/ZLmW0XwGjI+/Kn5R0PM9507xV7CiBRmi8NtngI4RZp4trXJ1o5p7Zyiu ej32hwg0tH0S1Soq4Ms1qVowq8zhFsS15m+vKq+iEZjjNnCXPc8q+Km0i8yIR5nSU9fl AUDw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=CUT10M4T5Xe8YIpQSlbMNZIjRB6dFMGvi+VmNt+xeC4=; fh=xw66gSxB338BD6jjmBDM3+aCXSSuQaELEpOAFUZIZDY=; b=lsnk0Wjdeu9Qw2ZbRWFspAOb5iGAOS2p+aTM2dx0ulJoLZydw2TwxDrSKNKbPf7mbi OsbaRuXsy369D77GO7X/n6fLy4e6YGKHn8uhMmHFpoMiyZjIRie2XM2Qe/YV7uoeHOM7 oeYR3reIjL0hVKMrj6d734pU+eXcJjKmWyb1Pz1JwFiKeMf6u7dXBykfqwzm7ISeWS1a DSh5TpjDT1/dj3fMrMaC82ZknddJ6SjHGwaa7h7FdU3BuAZ/9s5MaGSkzwIIH6BFrPR1 imlagguhnAGCYSZM9Sb+Pz1/fuKqR/nx1OWYgSPt3dvjXzZ+rp9QkwXJiNEgTmizP8UP CLYQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770267806; x=1770872606; darn=lists.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=CUT10M4T5Xe8YIpQSlbMNZIjRB6dFMGvi+VmNt+xeC4=; b=PQew9I89wV7ydENYqzg5anYf6Y9KvXTgzLQCepjkE+j0KAq8sQ0sgnmdhb1xi9Dx3M okXDSbBYO/UvKxVZVb/F1MHWL5Cw8g4vJgDYiwR4ojfAMTtX2VzvD/aoqmfZ14lr3sDF 7W06Men0yikDnooC6tuHgNc7dByr1JrlSXje210ouahzICHElq5vDEaqZj1BybkWMTa7 gjFiUiTCHxR7Hz+4I3KRVA2TEZ2ktJzvPMoW6r1Am09xzOlGpEtNvJfXy7Ane6WHiiEt fyVejnkfETyI2HsCetclDibTjBlW1pWFYZ3gpPL1/TLCkCpgQAaRbm1njtls7mdzp4b0 CzWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770267806; x=1770872606; 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=CUT10M4T5Xe8YIpQSlbMNZIjRB6dFMGvi+VmNt+xeC4=; b=FntEM6SSLSHVsxevxdevRCg6HoU59s6QxzNF2Va+xJq6zgMgjsvAF4C3qYeX4qzUa0 g5bHQxqW7FeDoD+nOKDdaRHt2rcoB8Hu3hCziabjp47l184IVfUhciDnHP1rqG23OjmW rCqZ8vfW4etjG1/xkhs/VJge9yv5lEVbU8zTEcO6nQHXga9Xh6oLHmZx7aA0qakhK6Gm Zv1vj4OV49TrHJs9nhySf1+Ws65xIkeKberr+oc6HADFGvTjmVPWbT2R4L1rRKK/uf5b K5JnDD9H6OLm2Kk4dVfd9gf0H+duoTyh+Lgsrm6U0aMjvHnMc3QavKX8QArYMHsTtQyY 93cA== X-Gm-Message-State: AOJu0Yy2OI+2pz4cPIKf/9GCrVSuG/uJqjH1ohZxdZUSNaId0/wc3p7J rDBuNWovWrkFxld1lzz096aEcWODBlipzJFpBkQRCErz7UoSBvJGH894xvORZ970zOdP77QVim2 GQ49rw2b7XjxgfiKWQ5IO6JoGK6yZJqE= X-Gm-Gg: AZuq6aLrNPXZ0kbMikSaGr8XevwgaSsg2LbeskGJ8lUU1ZMGzv+Bd4my5PxyfRY53lg nL/GHOYYFW24rG9mB4kTBntvx/5BZtaX91LN33dQOpy6zUhEFTiKgJfLxmHqfZ6Zv2wFszgNgQQ cQRNn7XGHrwT+DwWc25lPnd/SYOLbt7JGg/JItm+i8L0ffPC26k3PE3WLRCFVeSi7J4lmUhQvW0 aln1OTeTEFBKvI/jb0Ueer3UpNGYU/3NcGsbPYILYWSaKJeWCW6pp7CehXSQVds/XDvwJM5Jw== X-Received: by 2002:a05:651c:1103:b0:386:1ce2:1195 with SMTP id 38308e7fff4ca-38691e67041mr20175591fa.39.1770267805491; Wed, 04 Feb 2026 21:03:25 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Ajin Cherian Date: Thu, 5 Feb 2026 16:03:13 +1100 X-Gm-Features: AZwV_Qhw9BoTpmh0pTpypnhS95wS9xx4PJ3twknjIFXEjoe4yMsURKMyy6TzDDk Message-ID: Subject: Re: [PATCH] Support automatic sequence replication To: shveta malik Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000b439de064a0c97ba" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b439de064a0c97ba Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Feb 3, 2026 at 9:22=E2=80=AFPM shveta malik wrote: > > On Tue, Feb 3, 2026 at 9:18=E2=80=AFAM Ajin Cherian w= rote: > Thanks for the patch. > > +1 for the overall idea of patch that once a subscription is created > which subscribes to sequences, a sequence sync worker is started which > continuously syncs the sequences. This makes usage of REFRESH > SEQUENCES redundant and thus it is removed. I am still reviewing the > design choice here, and will post my comments soon (if any). > Thanks! > By quick validation, few issues in current implementation: > > 1) > If the sequence sync worker exits due to some issue (or killed or > server restarts), sequence-sync worker is not started again by apply > worker unless there is a sequence in INIT state i.e. synchronization > of sequences in READY state stops. IIUC, the logic of > ProcessSequencesForSync() needs to change to start seq sync worker > irrespective of state of sequences. > Yes, I fixed this. I've changed FetchRelationStates to fetch sequences in ANY state and not just ones in NON READY state. > 2) > There is some issue in how LOGs (DEBUGs) are getting generated. > > a) Even if there is no drift, it still keeps on dumping: > "logical replication sequence synchronization for subscription "sub1" > - total unsynchronized: 3" > Removed this. > b) > When there is a drift in say single sequence, it puts rest (which are > in sync) to "missing" section: > "logical replication sequence synchronization for subscription "sub1" > - batch #1 =3D 3 attempted, 1 succeeded, 0 mismatched, 0 insufficient > permission, 2 missing from publisher, 0 skipped" > Fixed, and added a new section called "no drift". Also now this debug message is printed every time the worker attempts to synchronize sequences. also mentioning the state of the sequences being synced. > 3) > If a sequence sync worker is taking a nap, and subscription is > disabled or the server is stopped just before upgrade, how is the user > supposed to know that sequences are synced at the end? Well, one way is to wait for a debug message that says that all the attempted sequences are in the "no drift" state. Also remote sequence's LSN is updated in pg_subscription_rel for each sequence. Let me know if you have anything more in mind. One option is to leave the ALTER SUBSCRIPTION..REFRESH SEQUENCE in place, that will change the state of all the sequences to the INIT state, and the user can then wait for the sequences to change state to READY. Attaching patch v3 addressing the above comments. regards, Ajin Cherian Fujitsu Australia --000000000000b439de064a0c97ba Content-Type: application/octet-stream; name="v3-0001-Support-automatic-sequence-replication.patch" Content-Disposition: attachment; filename="v3-0001-Support-automatic-sequence-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ml8zq0ww0 RnJvbSAyNGQ3MTlmODgyNzA5YjAyZjljZWY2ZTc2YWM0Yjc0ZjgwY2MyMDM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGl0c2FqaW5AZ21haWwuY29tPgpEYXRl OiBNb24sIDIgRmViIDIwMjYgMjE6NDE6NTQgKzExMDAKU3ViamVjdDogW1BBVENIIHYzXSBTdXBw b3J0IGF1dG9tYXRpYyBzZXF1ZW5jZSByZXBsaWNhdGlvbgoKTG9naWNhbCByZXBsaWNhdGlvbiBz ZXF1ZW5jZXMgY2FuIGRyaWZ0IGJldHdlZW4gcHVibGlzaGVyIGFuZApzdWJzY3JpYmVyIGFzIHZh bHVlcyBhcmUgY29uc3VtZWQgaW5kZXBlbmRlbnRseSBvbiBlYWNoIG5vZGUuClByZXZpb3VzbHks IHRoZSBzZXF1ZW5jZSBzeW5jIHdvcmtlciBleGl0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwKc3luY2hy b25pemF0aW9uLCBhbGxvd2luZyBzZXF1ZW5jZXMgdG8gZGl2ZXJnZSBvdmVyIHRpbWUuCgpUaGlz IGNoYW5nZSBrZWVwcyB0aGUgc2VxdWVuY2Ugc3luYyB3b3JrZXIgcnVubmluZyBjb250aW51b3Vz bHkKc28gaXQgY2FuIG1vbml0b3Igc2VxdWVuY2VzIGFuZCByZXN5bmNocm9uaXplIHRoZW0gd2hl biBkcmlmdAppcyBkZXRlY3RlZC4gVGhlIHdvcmtlciB1c2VzIGFuIGFkYXB0aXZlIHNsZWVwIGlu dGVydmFsOgppdCBzdGFydHMgYXQgMiBzZWNvbmRzLCBkb3VibGVzIHVwIHRvIGEgbWF4aW11bSBv ZiAzMCBzZWNvbmRzCndoZW4gbm8gZHJpZnQgaXMgb2JzZXJ2ZWQsIGFuZCByZXNldHMgdG8gdGhl IG1pbmltdW0gaW50ZXJ2YWwKb25jZSBkcmlmdCBpcyBmb3VuZC4KClNpbmNlIHN5bmNocm9uaXph dGlvbiBpcyBub3cgY29udGludW91cywKQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNF UVVFTkNFUyBpcyBubyBsb25nZXIgbmVlZGVkCmFuZCBoYXMgYmVlbiByZW1vdmVkLgoKU2VxdWVu Y2VzIHJlbWFpbiBpbiB0aGUgUkVBRFkgc3RhdGUgZHVyaW5nIGNvbnRpbnVvdXMKc3luY2hyb25p emF0aW9uLgoKQXV0aG9yOiBBamluIENoZXJpYW4gaXRzYWppbkBnbWFpbC5jb20KLS0tCiBkb2Mv c3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIGRvYy9z cmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgICAgICAgICB8ICA1NiArLS0tCiBkb2Mv c3JjL3NnbWwvcmVmL2FsdGVyX3N1YnNjcmlwdGlvbi5zZ21sICAgICAgfCAgMzAgLS0tCiBzcmMv YmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgICAgICAgICAgfCAgMzYgKysrCiBzcmMv YmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgICAgICAgfCAgNjUgLS0tLS0KIHNy Yy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICAgICAgICAgICB8ICAgOSAtCiAuLi4v cmVwbGljYXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5bmMuYyAgICAgICAgfCAyNDIgKysrKysrKysr KysrKy0tLS0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3N5bmN1dGlscy5jICAg fCAgNDcgKystLQogc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5pbi5jICAgICAgICAgICAgICAg IHwgICA0ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgICAgICAgICAgIHwg ICAxIC0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyNl9zdGF0cy5wbCAgICAgICAgICB8ICAg MiArCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzZfc2VxdWVuY2VzLnBsICAgICAgfCAgNzEg Ky0tLS0KIDEzIGZpbGVzIGNoYW5nZWQsIDI2MCBpbnNlcnRpb25zKCspLCAzMTAgZGVsZXRpb25z KC0pCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvc2VxdWVuY2VzeW5jLmMKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxv Z3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IDMzMjE5MzU2NWUyLi5l YzUxYTg3YzI1MyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKQEAgLTgyNjEsMTEgKzgyNjEsOSBAQCBTQ1JBTS1T SEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+ OjxyZXBsYWNlYWJsZT4mbAogICA8cGFyYT4KICAgIFRoaXMgY2F0YWxvZyBjb250YWlucyB0YWJs ZXMgYW5kIHNlcXVlbmNlcyBrbm93biB0byB0aGUgc3Vic2NyaXB0aW9uCiAgICBhZnRlciBydW5u aW5nOgotICAgPGxpbmsgbGlua2VuZD0ic3FsLWNyZWF0ZXN1YnNjcmlwdGlvbiI+PGNvbW1hbmQ+ Q1JFQVRFIFNVQlNDUklQVElPTjwvY29tbWFuZD48L2xpbms+LAorICAgPGxpbmsgbGlua2VuZD0i c3FsLWNyZWF0ZXN1YnNjcmlwdGlvbiI+PGNvbW1hbmQ+Q1JFQVRFIFNVQlNDUklQVElPTjwvY29t bWFuZD48L2xpbms+LCBvcgogICAgPGxpbmsgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9u LXBhcmFtcy1yZWZyZXNoLXB1YmxpY2F0aW9uIj4KLSAgIDxjb21tYW5kPkFMVEVSIFNVQlNDUklQ VElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTjwvY29tbWFuZD48L2xpbms+LCBvcgotICAgPGxp bmsgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uLXBhcmFtcy1yZWZyZXNoLXNlcXVlbmNl cyI+Ci0gICA8Y29tbWFuZD5BTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VT PC9jb21tYW5kPjwvbGluaz4uCisgICA8Y29tbWFuZD5BTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJF RlJFU0ggUFVCTElDQVRJT048L2NvbW1hbmQ+PC9saW5rPi4KICAgPC9wYXJhPgogCiAgIDx0YWJs ZT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9k b2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IDUwMjhmZTlhZjA5Li5j MWVkOTYwY2VhOCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24u c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCkBAIC0xNzc1 LDIwICsxNzc1LDE0IEBAIFB1YmxpY2F0aW9uczoKICAgICAgIHRvIHN5bmNocm9uaXplIG9ubHkg bmV3bHkgYWRkZWQgc2VxdWVuY2VzLgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KLSAg ICA8bGlzdGl0ZW0+Ci0gICAgIDxwYXJhPgotICAgICAgdXNlIDxsaW5rIGxpbmtlbmQ9InNxbC1h bHRlcnN1YnNjcmlwdGlvbi1wYXJhbXMtcmVmcmVzaC1zZXF1ZW5jZXMiPgotICAgICAgPGNvbW1h bmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNFUVVFTkNFUzwvY29tbWFuZD48L2xp bms+Ci0gICAgICB0byByZS1zeW5jaHJvbml6ZSBhbGwgc2VxdWVuY2VzIGN1cnJlbnRseSBrbm93 biB0byB0aGUgc3Vic2NyaXB0aW9uLgotICAgICA8L3BhcmE+Ci0gICAgPC9saXN0aXRlbT4KICAg IDwvaXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBBIDxmaXJzdHRlcm0+ c2VxdWVuY2Ugc3luY2hyb25pemF0aW9uIHdvcmtlcjwvZmlyc3R0ZXJtPiB3aWxsIGJlIHN0YXJ0 ZWQKLSAgIGFmdGVyIGV4ZWN1dGluZyBhbnkgb2YgdGhlIGFib3ZlIHN1YnNjcmliZXIgY29tbWFu ZHMsIGFuZCB3aWxsIGV4aXQgb25jZSB0aGUKLSAgIHNlcXVlbmNlcyBhcmUgc3luY2hyb25pemVk LgorICAgYWZ0ZXIgZXhlY3V0aW5nIGFueSBvZiB0aGUgYWJvdmUgc3Vic2NyaWJlciBjb21tYW5k cywgdGhpcyB3b3JrZXIgd2lsbAorICAgcmVtYWluIHJ1bm5pbmcgZm9yIHRoZSBsaWZlIG9mIHRo ZSBzdWJzY3JpcHRpb24sIGFuZCB3aWxsIHBlcmlvZGljYWxseQorICAgc3luY2hyb25pemUgYWxs IHB1Ymxpc2hlZCBzZXF1ZW5jZXMuCiAgIDwvcGFyYT4KICAgPHBhcmE+CiAgICBUaGUgYWJpbGl0 eSB0byBsYXVuY2ggYSBzZXF1ZW5jZSBzeW5jaHJvbml6YXRpb24gd29ya2VyIGlzIGxpbWl0ZWQg YnkgdGhlCkBAIC0xODE1LDIxICsxODA5LDcgQEAgUHVibGljYXRpb25zOgogICA8L3NlY3QyPgog CiAgIDxzZWN0MiBpZD0ic2VxdWVuY2VzLW91dC1vZi1zeW5jIj4KLSAgIDx0aXRsZT5SZWZyZXNo aW5nIE91dC1vZi1TeW5jIFNlcXVlbmNlczwvdGl0bGU+Ci0gICA8cGFyYT4KLSAgICBTdWJzY3Jp YmVyIHNlcXVlbmNlIHZhbHVlcyB3aWxsIGJlY29tZSBvdXQgb2Ygc3luYyBhcyB0aGUgcHVibGlz aGVyCi0gICAgYWR2YW5jZXMgdGhlbS4KLSAgIDwvcGFyYT4KLSAgIDxwYXJhPgotICAgIFRvIGRl dGVjdCB0aGlzLCBjb21wYXJlIHRoZQotICAgIDxsaW5rIGxpbmtlbmQ9ImNhdGFsb2ctcGctc3Vi c2NyaXB0aW9uLXJlbCI+cGdfc3Vic2NyaXB0aW9uX3JlbDwvbGluaz4uPHN0cnVjdGZpZWxkPnNy c3VibHNuPC9zdHJ1Y3RmaWVsZD4KLSAgICBvbiB0aGUgc3Vic2NyaWJlciB3aXRoIHRoZSA8c3Ry dWN0ZmllbGQ+cGFnZV9sc248L3N0cnVjdGZpZWxkPiBvYnRhaW5lZAotICAgIGZyb20gdGhlIDxs aW5rIGxpbmtlbmQ9ImZ1bmMtcGctZ2V0LXNlcXVlbmNlLWRhdGEiPjxmdW5jdGlvbj5wZ19nZXRf c2VxdWVuY2VfZGF0YTwvZnVuY3Rpb24+PC9saW5rPgotICAgIGZ1bmN0aW9uIGZvciB0aGUgc2Vx dWVuY2Ugb24gdGhlIHB1Ymxpc2hlci4gVGhlbiBydW4KLSAgICA8bGluayBsaW5rZW5kPSJzcWwt YWx0ZXJzdWJzY3JpcHRpb24tcGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4KLSAgICA8Y29tbWFu ZD5BTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VTPC9jb21tYW5kPjwvbGlu az4gdG8KLSAgICByZS1zeW5jaHJvbml6ZSBpZiBuZWNlc3NhcnkuCi0gICA8L3BhcmE+CisgICA8 dGl0bGU+T3V0LW9mLVN5bmMgU2VxdWVuY2VzPC90aXRsZT4KICAgIDx3YXJuaW5nPgogICAgIDxw YXJhPgogICAgICBFYWNoIHNlcXVlbmNlIGNhY2hlcyBhIGJsb2NrIG9mIHZhbHVlcyAodHlwaWNh bGx5IDMyKSBpbiBtZW1vcnkgYmVmb3JlCkBAIC0xOTYxLDE2ICsxOTQxLDYgQEAgUHVibGljYXRp b25zOgogLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQogICAgICAgICA2MTAg fCB0ICAgICAgICAgfCAwLzAxN0NFREY4CiAoMSByb3cpCi08L3Byb2dyYW1saXN0aW5nPjwvcGFy YT4KLQotICAgPHBhcmE+Ci0gICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc2VxdWVuY2Ug cGFnZSBMU05zIG9uIHRoZSBwdWJsaXNoZXIgYW5kIHRoZQotICAgIHNlcXVlbmNlIHBhZ2UgTFNO cyBvbiB0aGUgc3Vic2NyaWJlciBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VxdWVuY2VzIGFyZSBvdXQK LSAgICBvZiBzeW5jLiBSZS1zeW5jaHJvbml6ZSBhbGwgc2VxdWVuY2VzIGtub3duIHRvIHRoZSBz dWJzY3JpYmVyIHVzaW5nCi0gICAgPGxpbmsgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9u LXBhcmFtcy1yZWZyZXNoLXNlcXVlbmNlcyI+Ci0gICAgPGNvbW1hbmQ+QUxURVIgU1VCU0NSSVBU SU9OIC4uLiBSRUZSRVNIIFNFUVVFTkNFUzwvY29tbWFuZD48L2xpbms+LgotPHByb2dyYW1saXN0 aW5nPgotLyogc3ViICMgKi8gQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgUkVGUkVTSCBTRVFVRU5D RVM7CiA8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KIAogICAgPHBhcmE+CkBAIC0yMzMzLDI0ICsy MzAzLDYgQEAgQ09OVEVYVDogIHByb2Nlc3NpbmcgcmVtb3RlIGRhdGEgZm9yIHJlcGxpY2F0aW9u IG9yaWdpbiAicGdfMTYzOTUiIGR1cmluZyAiSU5TRVIKICAgICA8L3BhcmE+CiAgICA8L2xpc3Rp dGVtPgogCi0gICA8bGlzdGl0ZW0+Ci0gICAgPHBhcmE+Ci0gICAgIEluY3JlbWVudGFsIHNlcXVl bmNlIGNoYW5nZXMgYXJlIG5vdCByZXBsaWNhdGVkLiAgQWx0aG91Z2ggdGhlIGRhdGEgaW4KLSAg ICAgc2VyaWFsIG9yIGlkZW50aXR5IGNvbHVtbnMgYmFja2VkIGJ5IHNlcXVlbmNlcyB3aWxsIGJl IHJlcGxpY2F0ZWQgYXMgcGFydAotICAgICBvZiB0aGUgdGFibGUsIHRoZSBzZXF1ZW5jZXMgdGhl bXNlbHZlcyBkbyBub3QgcmVwbGljYXRlIG9uZ29pbmcgY2hhbmdlcy4KLSAgICAgT24gdGhlIHN1 YnNjcmliZXIsIGEgc2VxdWVuY2Ugd2lsbCByZXRhaW4gdGhlIGxhc3QgdmFsdWUgaXQgc3luY2hy b25pemVkCi0gICAgIGZyb20gdGhlIHB1Ymxpc2hlci4gSWYgdGhlIHN1YnNjcmliZXIgaXMgdXNl ZCBhcyBhIHJlYWQtb25seSBkYXRhYmFzZSwKLSAgICAgdGhlbiB0aGlzIHNob3VsZCB0eXBpY2Fs bHkgbm90IGJlIGEgcHJvYmxlbS4gIElmLCBob3dldmVyLCBzb21lIGtpbmQgb2YKLSAgICAgc3dp dGNob3ZlciBvciBmYWlsb3ZlciB0byB0aGUgc3Vic2NyaWJlciBkYXRhYmFzZSBpcyBpbnRlbmRl ZCwgdGhlbiB0aGUKLSAgICAgc2VxdWVuY2VzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZCB0byB0 aGUgbGF0ZXN0IHZhbHVlcywgZWl0aGVyIGJ5Ci0gICAgIGV4ZWN1dGluZyA8bGluayBsaW5rZW5k PSJzcWwtYWx0ZXJzdWJzY3JpcHRpb24tcGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4KLSAgICAg PGNvbW1hbmQ+QUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFNFUVVFTkNFUzwvY29tbWFu ZD48L2xpbms+Ci0gICAgIG9yIGJ5IGNvcHlpbmcgdGhlIGN1cnJlbnQgZGF0YSBmcm9tIHRoZSBw dWJsaXNoZXIgKHBlcmhhcHMgdXNpbmcKLSAgICAgPGNvbW1hbmQ+cGdfZHVtcDwvY29tbWFuZD4p IG9yIGJ5IGRldGVybWluaW5nIGEgc3VmZmljaWVudGx5IGhpZ2ggdmFsdWUKLSAgICAgZnJvbSB0 aGUgdGFibGVzIHRoZW1zZWx2ZXMuCi0gICAgPC9wYXJhPgotICAgPC9saXN0aXRlbT4KLQogICAg PGxpc3RpdGVtPgogICAgIDxwYXJhPgogICAgICBSZXBsaWNhdGlvbiBvZiA8Y29tbWFuZD5UUlVO Q0FURTwvY29tbWFuZD4gY29tbWFuZHMgaXMgc3VwcG9ydGVkLCBidXQKZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC9yZWYvYWx0ZXJfc3Vic2NyaXB0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVm L2FsdGVyX3N1YnNjcmlwdGlvbi5zZ21sCmluZGV4IDI3YzA2NDM5ZjRmLi5jMGZkNDI2ZDcxMiAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9zdWJzY3JpcHRpb24uc2dtbAorKysg Yi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3N1YnNjcmlwdGlvbi5zZ21sCkBAIC0yNiw3ICsyNiw2 IEBAIEFMVEVSIFNVQlNDUklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFt ZTwvcmVwbGFjZWFibGU+IFNFVCBQVUJMSUNBCiBBTFRFUiBTVUJTQ1JJUFRJT04gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBBREQgUFVCTElDQVRJT04g PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX25hbWU8L3JlcGxhY2Vh YmxlPiBbLCAuLi5dIFsgV0lUSCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJs aWNhdGlvbl9vcHRpb248L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKSBdCiBBTFRFUiBTVUJTQ1JJUFRJ T04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBEUk9Q IFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9u YW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSBbIFdJVEggKCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+cHVibGljYXRpb25fb3B0aW9uPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBdICkgXQogQUxU RVIgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBs YWNlYWJsZT4gUkVGUkVTSCBQVUJMSUNBVElPTiBbIFdJVEggKCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+cmVmcmVzaF9vcHRpb248L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKSBdCi1BTFRF UiBTVUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxh Y2VhYmxlPiBSRUZSRVNIIFNFUVVFTkNFUwogQUxURVIgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gRU5BQkxFCiBBTFRFUiBTVUJT Q1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxl PiBESVNBQkxFCiBBTFRFUiBTVUJTQ1JJUFRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBTRVQgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+c3Vic2NyaXB0aW9uX3BhcmFtZXRlcjwvcmVwbGFjZWFibGU+IFs9IDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj52YWx1ZTwvcmVwbGFjZWFibGU+XSBbLCAuLi4gXSApCkBAIC0xOTAs MTEgKzE4OSw2IEBAIEFMVEVSIFNVQlNDUklQVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFJFTkFNRSBUTyA8CiAgICAgICAgICAgUHJldmlvdXNs eSBzdWJzY3JpYmVkIHRhYmxlcyBhcmUgbm90IGNvcGllZCwgZXZlbiBpZiBhIHRhYmxlJ3Mgcm93 CiAgICAgICAgICAgZmlsdGVyIDxsaXRlcmFsPldIRVJFPC9saXRlcmFsPiBjbGF1c2UgaGFzIHNp bmNlIGJlZW4gbW9kaWZpZWQuCiAgICAgICAgICA8L3BhcmE+Ci0gICAgICAgICA8cGFyYT4KLSAg ICAgICAgICBQcmV2aW91c2x5IHN1YnNjcmliZWQgc2VxdWVuY2VzIGFyZSBub3QgcmUtc3luY2hy b25pemVkLiBUbyBkbyB0aGF0LAotICAgICAgICAgIHVzZSA8bGluayBsaW5rZW5kPSJzcWwtYWx0 ZXJzdWJzY3JpcHRpb24tcGFyYW1zLXJlZnJlc2gtc2VxdWVuY2VzIj4KLSAgICAgICAgICA8Y29t bWFuZD5BTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VTPC9jb21tYW5kPjwv bGluaz4uCi0gICAgICAgICA8L3BhcmE+CiAgICAgICAgICA8cGFyYT4KICAgICAgICAgICBTZWUg PHhyZWYgbGlua2VuZD0ic2VxdWVuY2UtZGVmaW5pdGlvbi1taXNtYXRjaGVzIi8+IGZvciByZWNv bW1lbmRhdGlvbnMgb24gaG93CiAgICAgICAgICAgdG8gaGFuZGxlIGFueSB3YXJuaW5ncyBhYm91 dCBzZXF1ZW5jZSBkZWZpbml0aW9uIGRpZmZlcmVuY2VzIGJldHdlZW4KQEAgLTIxOSwzMCArMjEz LDYgQEAgQUxURVIgU1VCU0NSSVBUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5u YW1lPC9yZXBsYWNlYWJsZT4gUkVOQU1FIFRPIDwKICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJs aXN0ZW50cnk+CiAKLSAgIDx2YXJsaXN0ZW50cnkgaWQ9InNxbC1hbHRlcnN1YnNjcmlwdGlvbi1w YXJhbXMtcmVmcmVzaC1zZXF1ZW5jZXMiPgotICAgIDx0ZXJtPjxsaXRlcmFsPlJFRlJFU0ggU0VR VUVOQ0VTPC9saXRlcmFsPjwvdGVybT4KLSAgICA8bGlzdGl0ZW0+Ci0gICAgIDxwYXJhPgotICAg ICAgUmUtc3luY2hyb25pemUgc2VxdWVuY2UgZGF0YSB3aXRoIHRoZSBwdWJsaXNoZXIuIFVubGlr ZQotICAgICAgPGxpbmsgbGlua2VuZD0ic3FsLWFsdGVyc3Vic2NyaXB0aW9uLXBhcmFtcy1yZWZy ZXNoLXB1YmxpY2F0aW9uIj4KLSAgICAgIDxjb21tYW5kPkFMVEVSIFNVQlNDUklQVElPTiAuLi4g UkVGUkVTSCBQVUJMSUNBVElPTjwvY29tbWFuZD48L2xpbms+IHdoaWNoCi0gICAgICBvbmx5IGhh cyB0aGUgYWJpbGl0eSB0byBzeW5jaHJvbml6ZSBuZXdseSBhZGRlZCBzZXF1ZW5jZXMsCi0gICAg ICA8bGl0ZXJhbD5SRUZSRVNIIFNFUVVFTkNFUzwvbGl0ZXJhbD4gd2lsbCByZS1zeW5jaHJvbml6 ZSB0aGUgc2VxdWVuY2UKLSAgICAgIGRhdGEgZm9yIGFsbCBjdXJyZW50bHkgc3Vic2NyaWJlZCBz ZXF1ZW5jZXMuIEl0IGRvZXMgbm90IGFkZCBvciByZW1vdmUKLSAgICAgIHNlcXVlbmNlcyBmcm9t IHRoZSBzdWJzY3JpcHRpb24gdG8gbWF0Y2ggdGhlIHB1YmxpY2F0aW9uLgotICAgICA8L3BhcmE+ Ci0gICAgIDxwYXJhPgotICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InNlcXVlbmNlLWRlZmluaXRp b24tbWlzbWF0Y2hlcyIvPiBmb3IKLSAgICAgIHJlY29tbWVuZGF0aW9ucyBvbiBob3cgdG8gaGFu ZGxlIGFueSB3YXJuaW5ncyBhYm91dCBzZXF1ZW5jZSBkZWZpbml0aW9uCi0gICAgICBkaWZmZXJl bmNlcyBiZXR3ZWVuIHRoZSBwdWJsaXNoZXIgYW5kIHRoZSBzdWJzY3JpYmVyLgotICAgICA8L3Bh cmE+Ci0gICAgIDxwYXJhPgotICAgICAgU2VlIDx4cmVmIGxpbmtlbmQ9InNlcXVlbmNlcy1vdXQt b2Ytc3luYyIvPiBmb3IgcmVjb21tZW5kYXRpb25zIG9uIGhvdyB0bwotICAgICAgaWRlbnRpZnkg YW5kIGhhbmRsZSBvdXQtb2Ytc3luYyBzZXF1ZW5jZXMuCi0gICAgIDwvcGFyYT4KLSAgICA8L2xp c3RpdGVtPgotICAgPC92YXJsaXN0ZW50cnk+Ci0KICAgIDx2YXJsaXN0ZW50cnkgaWQ9InNxbC1h bHRlcnN1YnNjcmlwdGlvbi1wYXJhbXMtZW5hYmxlIj4KICAgICA8dGVybT48bGl0ZXJhbD5FTkFC TEU8L2xpdGVyYWw+PC90ZXJtPgogICAgIDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5j CmluZGV4IGUxYjgwOGJiYjYwLi5kNmY5MDg1ZTIzYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5j CkBAIC05MjksNiArOTI5LDQyIEBAIGxhc3R2YWwoUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRV Uk5fSU5UNjQocmVzdWx0KTsKIH0KIAorLyoKKyAqIFJlYWQgdGhlIGN1cnJlbnQgc2VxdWVuY2Ug dmFsdWVzIChsYXN0X3ZhbHVlIGFuZCBpc19jYWxsZWQpCisgKgorICogVGhpcyBpcyBhIHJlYWQt b25seSBvcGVyYXRpb24gdGhhdCBhY3F1aXJlcyBBY2Nlc3NTaGFyZUxvY2sgb24gdGhlIHNlcXVl bmNlLgorICogVXNlZCBieSBsb2dpY2FsIHJlcGxpY2F0aW9uIHNlcXVlbmNlIHN5bmNocm9uaXph dGlvbiB0byBkZXRlY3QgZHJpZnQuCisgKi8KK3ZvaWQKK0dldFNlcXVlbmNlKE9pZCByZWxpZCwg aW50NjQgKmxhc3RfdmFsdWUsIGJvb2wgKmlzX2NhbGxlZCkKK3sKKwlSZWxhdGlvbglzZXFyZWw7 CisJQnVmZmVyCQlidWY7CisJSGVhcFR1cGxlRGF0YSBzZXF0dXBsZTsKKwlGb3JtX3BnX3NlcXVl bmNlX2RhdGEgc2VxOworCisJLyogT3BlbiBhbmQgbG9jayB0aGUgc2VxdWVuY2UgcmVsYXRpb24g Ki8KKwlzZXFyZWwgPSB0YWJsZV9vcGVuKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJLyog VmVyaWZ5IGl0J3MgYWN0dWFsbHkgYSBzZXF1ZW5jZSAqLworCWlmIChzZXFyZWwtPnJkX3JlbC0+ cmVsa2luZCAhPSBSRUxLSU5EX1NFUVVFTkNFKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAorCQkJCSBlcnJtc2coIlwiJXNcIiBpcyBu b3QgYSBzZXF1ZW5jZSIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkp OworCisJLyogUmVhZCB0aGUgc2VxdWVuY2UgdHVwbGUgKi8KKwlzZXEgPSByZWFkX3NlcV90dXBs ZShzZXFyZWwsICZidWYsICZzZXF0dXBsZSk7CisKKwkvKiBFeHRyYWN0IHRoZSB2YWx1ZXMgKi8K KwkqbGFzdF92YWx1ZSA9IHNlcS0+bGFzdF92YWx1ZTsKKwkqaXNfY2FsbGVkID0gc2VxLT5pc19j YWxsZWQ7CisKKwkvKiBSZWxlYXNlIGJ1ZmZlciBhbmQgY2xvc2UgcmVsYXRpb24gKi8KKwlVbmxv Y2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJdGFibGVfY2xvc2Uoc2VxcmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworfQorCiAvKgogICogTWFpbiBpbnRlcm5hbCBwcm9jZWR1cmUgdGhhdCBoYW5kbGVzIDIg JiAzIGFyZyBmb3JtcyBvZiBTRVRWQUwuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0 aW9uY21kcy5jCmluZGV4IDBiM2M4NDk5YjQ5Li5jMWI5MDNjNTkwOCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtMTE4Myw1OCArMTE4Myw2IEBAIEFsdGVyU3Vi c2NyaXB0aW9uX3JlZnJlc2goU3Vic2NyaXB0aW9uICpzdWIsIGJvb2wgY29weV9kYXRhLAogCQl0 YWJsZV9jbG9zZShyZWwsIE5vTG9jayk7CiB9CiAKLS8qCi0gKiBNYXJrcyBhbGwgc2VxdWVuY2Vz IHdpdGggSU5JVCBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQKLUFsdGVyU3Vic2NyaXB0aW9uX3Jl ZnJlc2hfc2VxKFN1YnNjcmlwdGlvbiAqc3ViKQotewotCWNoYXIJICAgKmVyciA9IE5VTEw7Ci0J V2FsUmVjZWl2ZXJDb25uICp3cmNvbm47Ci0JYm9vbAkJbXVzdF91c2VfcGFzc3dvcmQ7Ci0KLQkv KiBMb2FkIHRoZSBsaWJyYXJ5IHByb3ZpZGluZyB1cyBsaWJwcSBjYWxscy4gKi8KLQlsb2FkX2Zp bGUoImxpYnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7Ci0KLQkvKiBUcnkgdG8gY29ubmVjdCB0byB0 aGUgcHVibGlzaGVyLiAqLwotCW11c3RfdXNlX3Bhc3N3b3JkID0gc3ViLT5wYXNzd29yZHJlcXVp cmVkICYmICFzdWItPm93bmVyc3VwZXJ1c2VyOwotCXdyY29ubiA9IHdhbHJjdl9jb25uZWN0KHN1 Yi0+Y29ubmluZm8sIHRydWUsIHRydWUsIG11c3RfdXNlX3Bhc3N3b3JkLAotCQkJCQkJCXN1Yi0+ bmFtZSwgJmVycik7Ci0JaWYgKCF3cmNvbm4pCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJZXJyY29k ZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCi0JCQkJZXJybXNnKCJzdWJzY3JpcHRpb24g XCIlc1wiIGNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBwdWJsaXNoZXI6ICVzIiwKLQkJCQkJICAg c3ViLT5uYW1lLCBlcnIpKTsKLQotCVBHX1RSWSgpOwotCXsKLQkJTGlzdAkgICAqc3VicmVsX3N0 YXRlczsKLQotCQljaGVja19wdWJsaWNhdGlvbnNfb3JpZ2luX3NlcXVlbmNlcyh3cmNvbm4sIHN1 Yi0+cHVibGljYXRpb25zLCB0cnVlLAotCQkJCQkJCQkJCQlzdWItPm9yaWdpbiwgTlVMTCwgMCwg c3ViLT5uYW1lKTsKLQotCQkvKiBHZXQgbG9jYWwgc2VxdWVuY2UgbGlzdC4gKi8KLQkJc3VicmVs X3N0YXRlcyA9IEdldFN1YnNjcmlwdGlvblJlbGF0aW9ucyhzdWItPm9pZCwgZmFsc2UsIHRydWUs IGZhbHNlKTsKLQkJZm9yZWFjaF9wdHIoU3Vic2NyaXB0aW9uUmVsU3RhdGUsIHN1YnJlbCwgc3Vi cmVsX3N0YXRlcykKLQkJewotCQkJT2lkCQkJcmVsaWQgPSBzdWJyZWwtPnJlbGlkOwotCi0JCQlV cGRhdGVTdWJzY3JpcHRpb25SZWxTdGF0ZShzdWItPm9pZCwgcmVsaWQsIFNVQlJFTF9TVEFURV9J TklULAotCQkJCQkJCQkJICAgSW52YWxpZFhMb2dSZWNQdHIsIGZhbHNlKTsKLQkJCWVyZXBvcnQo REVCVUcxLAotCQkJCQllcnJtc2dfaW50ZXJuYWwoInNlcXVlbmNlIFwiJXMuJXNcIiBvZiBzdWJz Y3JpcHRpb24gXCIlc1wiIHNldCB0byBJTklUIHN0YXRlIiwKLQkJCQkJCQkJCWdldF9uYW1lc3Bh Y2VfbmFtZShnZXRfcmVsX25hbWVzcGFjZShyZWxpZCkpLAotCQkJCQkJCQkJZ2V0X3JlbF9uYW1l KHJlbGlkKSwKLQkJCQkJCQkJCXN1Yi0+bmFtZSkpOwotCQl9Ci0JfQotCVBHX0ZJTkFMTFkoKTsK LQl7Ci0JCXdhbHJjdl9kaXNjb25uZWN0KHdyY29ubik7Ci0JfQotCVBHX0VORF9UUlkoKTsKLX0K LQogLyoKICAqIENvbW1vbiBjaGVja3MgZm9yIGFsdGVyaW5nIGZhaWxvdmVyLCB0d29fcGhhc2Us IGFuZCByZXRhaW5fZGVhZF90dXBsZXMKICAqIG9wdGlvbnMuCkBAIC0xODcxLDE5ICsxODE5LDYg QEAgQWx0ZXJTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclN1YnNjcmlwdGlv blN0bXQgKnN0bXQsCiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJY2FzZSBBTFRFUl9TVUJTQ1JJUFRJ T05fUkVGUkVTSF9TRVFVRU5DRVM6Ci0JCQl7Ci0JCQkJaWYgKCFzdWItPmVuYWJsZWQpCi0JCQkJ CWVyZXBvcnQoRVJST1IsCi0JCQkJCQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJF UkVRVUlTSVRFX1NUQVRFKSwKLQkJCQkJCQllcnJtc2coIiVzIGlzIG5vdCBhbGxvd2VkIGZvciBk aXNhYmxlZCBzdWJzY3JpcHRpb25zIiwKLQkJCQkJCQkJICAgIkFMVEVSIFNVQlNDUklQVElPTiAu Li4gUkVGUkVTSCBTRVFVRU5DRVMiKSk7Ci0KLQkJCQlBbHRlclN1YnNjcmlwdGlvbl9yZWZyZXNo X3NlcShzdWIpOwotCi0JCQkJYnJlYWs7Ci0JCQl9Ci0KIAkJY2FzZSBBTFRFUl9TVUJTQ1JJUFRJ T05fU0tJUDoKIAkJCXsKIAkJCQlwYXJzZV9zdWJzY3JpcHRpb25fb3B0aW9ucyhwc3RhdGUsIHN0 bXQtPm9wdGlvbnMsIFNVQk9QVF9MU04sICZvcHRzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CmluZGV4IDcxM2VlNWMx MGEyLi45ZDM2MjEyNzYzMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQor KysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0xMTA2OSwxNSArMTEwNjksNiBAQCBB bHRlclN1YnNjcmlwdGlvblN0bXQ6CiAJCQkJCW4tPm9wdGlvbnMgPSAkNjsKIAkJCQkJJCQgPSAo Tm9kZSAqKSBuOwogCQkJCX0KLQkJCXwgQUxURVIgU1VCU0NSSVBUSU9OIG5hbWUgUkVGUkVTSCBT RVFVRU5DRVMKLQkJCQl7Ci0JCQkJCUFsdGVyU3Vic2NyaXB0aW9uU3RtdCAqbiA9Ci0JCQkJCQlt YWtlTm9kZShBbHRlclN1YnNjcmlwdGlvblN0bXQpOwotCi0JCQkJCW4tPmtpbmQgPSBBTFRFUl9T VUJTQ1JJUFRJT05fUkVGUkVTSF9TRVFVRU5DRVM7Ci0JCQkJCW4tPnN1Ym5hbWUgPSAkMzsKLQkJ CQkJJCQgPSAoTm9kZSAqKSBuOwotCQkJCX0KIAkJCXwgQUxURVIgU1VCU0NSSVBUSU9OIG5hbWUg QUREX1AgUFVCTElDQVRJT04gbmFtZV9saXN0IG9wdF9kZWZpbml0aW9uCiAJCQkJewogCQkJCQlB bHRlclN1YnNjcmlwdGlvblN0bXQgKm4gPQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9zZXF1ZW5jZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvc2VxdWVuY2VzeW5jLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRl eCAxNjVmOTA5YjNiYS4uZWZkYTQyZDhjZTMKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9zZXF1ZW5jZXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3NlcXVlbmNlc3luYy5jCkBAIC0xOSwxMCArMTksNiBAQAogICogQ1JFQVRFIFNVQlNDUklQ VElPTgogICogQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJQ0FUSU9OCiAgKgot ICogRXhlY3V0aW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZCByZXNldHMgYWxsIHNlcXVlbmNlcyBp biB0aGUgc3Vic2NyaXB0aW9uIHRvCi0gKiBzdGF0ZSBJTklULCB0cmlnZ2VyaW5nIHJlLXN5bmNo cm9uaXphdGlvbjoKLSAqIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVMK LSAqCiAgKiBUaGUgYXBwbHkgd29ya2VyIHBlcmlvZGljYWxseSBzY2FucyBwZ19zdWJzY3JpcHRp b25fcmVsIGZvciBzZXF1ZW5jZXMgaW4KICAqIElOSVQgc3RhdGUuIFdoZW4gc3VjaCBzZXF1ZW5j ZXMgYXJlIGZvdW5kLCBpdCBzcGF3bnMgYSBzZXF1ZW5jZXN5bmMgd29ya2VyCiAgKiB0byBoYW5k bGUgc3luY2hyb25pemF0aW9uLgpAQCAtMzYsOCArMzIsMjQgQEAKICAqIGxvY2FsIHN1YnNjcmli ZXIsIGFuZCBmaW5hbGx5IG1hcmtzIGVhY2ggc2VxdWVuY2UgYXMgUkVBRFkgdXBvbiBzdWNjZXNz ZnVsCiAgKiBzeW5jaHJvbml6YXRpb24uCiAgKgorICogVGhlIHNlcXVlbmNlc3luYyB3b3JrZXIg dGhlbiBmZXRjaGVzIGFsbCBzZXF1ZW5jZXMgdGhhdCBhcmUKKyAqIGluIHRoZSBSRUFEWSBzdGF0 ZSwgcXVlcmllcyB0aGUgcHVibGlzaGVyIGZvciBjdXJyZW50IHNlcXVlbmNlIHZhbHVlcywgYW5k CisgKiB1cGRhdGVzIGFueSBzZXF1ZW5jZXMgdGhhdCBoYXZlIGRyaWZ0ZWQgYW5kIHRoZW4gZ29l cyB0byBzbGVlcC4gVGhlIHNsZWVwCisgKiBpbnRlcnZhbCBzdGFydHMgYXQgU0VRU1lOQ19NSU5f U0xFRVBfTVMgYW5kIGRvdWJsZXMgYWZ0ZXIgZWFjaCB3YWtlIGN5Y2xlCisgKiAodXAgdG8gU0VR U1lOQ19NQVhfU0xFRVBfTVMpLiBXaGVuIGRyaWZ0IGlzIGRldGVjdGVkLCB0aGUgaW50ZXJ2YWwg cmVzZXRzIHRvCisgKiB0aGUgbWluaW11bSB0byBlbnN1cmUgdGltZWx5IHVwZGF0ZXMuCisgKgor ICogQWZ0ZXIgQ1JFQVRFIFNVQlNDUklQVElPTiwgc2VxdWVuY2VzIGJlZ2luIGluIHRoZSBJTklU IHN0YXRlLiBTZXF1ZW5jZXMKKyAqIGFkZGVkIHRocm91Z2ggQUxURVIgU1VCU0NSSVBUSU9OLi4g UkVGUkVTSCBQVUJMSUNBVElPTiBhbHNvIHN0YXJ0IGluIHRoZSBJTklUCisgKiBzdGF0ZS4gQWxs IElOSVQgc2VxdWVuY2VzIGFyZSBzeW5jaHJvbml6ZWQgdW5jb25kaXRpb25hbGx5LCB0aGVuIHRy YW5zaXRpb24KKyAqIHRvIHRoZSBSRUFEWSBzdGF0ZS4gT25jZSBpbiB0aGUgUkVBRFkgc3RhdGUs IHNlcXVlbmNlcyBhcmUgY2hlY2tlZCBmb3IgZHJpZnQKKyAqIGZyb20gdGhlIHB1Ymxpc2hlciBh bmQgc3luY2hyb25pemVkIG9ubHkgd2hlbiBkcmlmdCBpcyBkZXRlY3RlZC4KKyAqCiAgKiBTZXF1 ZW5jZSBzdGF0ZSB0cmFuc2l0aW9ucyBmb2xsb3cgdGhpcyBwYXR0ZXJuOgotICogICBJTklUIC0+ IFJFQURZCisgKiAgSU5JVCAtLT4gUkVBRFkgLT4tKworICogICAgICAgICAgICAgXiAgICAgIHwg KGNoZWNrL3N5bmNocm9ueml6ZSkKKyAqICAgICAgICAgICAgIHwgICAgICB8CisgKiAgICAgICAg ICAgICArLS08LS0tKwogICoKICAqIFRvIGF2b2lkIGNyZWF0aW5nIHRvbyBtYW55IHRyYW5zYWN0 aW9ucywgdXAgdG8gTUFYX1NFUVVFTkNFU19TWU5DX1BFUl9CQVRDSAogICogc2VxdWVuY2VzIGFy ZSBzeW5jaHJvbml6ZWQgcGVyIHRyYW5zYWN0aW9uLiBUaGUgbG9ja3Mgb24gdGhlIHNlcXVlbmNl CkBAIC03OCwxMSArOTAsMTkgQEAgdHlwZWRlZiBlbnVtIENvcHlTZXFSZXN1bHQKIAlDT1BZU0VR X1NVQ0NFU1MsCiAJQ09QWVNFUV9NSVNNQVRDSCwKIAlDT1BZU0VRX0lOU1VGRklDSUVOVF9QRVJN LAotCUNPUFlTRVFfU0tJUFBFRAorCUNPUFlTRVFfU0tJUFBFRCwKKwlDT1BZU0VRX05PV09SSywK IH0gQ29weVNlcVJlc3VsdDsKIAorLyogTGlzdCBvZiBzZXF1ZW5jZXMgdGhhdCBpcyBjdXJyZW50 bHkgYmVpbmcgc3luY2VkICovCiBzdGF0aWMgTGlzdCAqc2VxaW5mb3MgPSBOSUw7CiAKKy8qIFNs ZWVwIGludGVydmFscyBmb3Igc3luYyAqLworI2RlZmluZSBTRVFTWU5DX01JTl9TTEVFUF9NUyAy MDAwCQkvKiAyIHNlY29uZHMgKi8KKyNkZWZpbmUgU0VRU1lOQ19NQVhfU0xFRVBfTVMgMzAwMDAJ CS8qIDMwIHNlY29uZHMgKi8KKworc3RhdGljIGxvbmcgc2xlZXBfbXMgPSBTRVFTWU5DX01JTl9T TEVFUF9NUzsKKwogLyoKICAqIEFwcGx5IHdvcmtlciBkZXRlcm1pbmVzIGlmIHNlcXVlbmNlIHN5 bmNocm9uaXphdGlvbiBpcyBuZWVkZWQuCiAgKgpAQCAtMzI1LDExICszNDUsMTIgQEAgZ2V0X2Fu ZF92YWxpZGF0ZV9zZXFfaW5mbyhUdXBsZVRhYmxlU2xvdCAqc2xvdCwgUmVsYXRpb24gKnNlcXVl bmNlX3JlbCwKIH0KIAogLyoKLSAqIEFwcGx5IHJlbW90ZSBzZXF1ZW5jZSBzdGF0ZSB0byBsb2Nh bCBzZXF1ZW5jZSBhbmQgbWFyayBpdCBhcwotICogc3luY2hyb25pemVkIChSRUFEWSkuCisgKiBB cHBseSByZW1vdGUgc2VxdWVuY2Ugc3RhdGUgdG8gbG9jYWwgc2VxdWVuY2UuIElmIHdlIGFyZSBk b2luZyB0aGlzCisgKiBmb3Igc2VxdWVuY2VzIGluIHRoZSBJTklUIHN0YXRlLCBtb3ZlIHRoZW0g dG8gdGhlIFJFQURZIHN0YXRlIG9uY2UKKyAqIHN5bmNocm9uaXplZC4KICAqLwogc3RhdGljIENv cHlTZXFSZXN1bHQKLWNvcHlfc2VxdWVuY2UoTG9naWNhbFJlcFNlcXVlbmNlSW5mbyAqc2VxaW5m bywgT2lkIHNlcW93bmVyKQorY29weV9zZXF1ZW5jZShMb2dpY2FsUmVwU2VxdWVuY2VJbmZvICpz ZXFpbmZvLCBPaWQgc2Vxb3duZXIsIGNoYXIgcmVsc3RhdGUpCiB7CiAJVXNlckNvbnRleHQgdWN4 dDsKIAlBY2xSZXN1bHQJYWNscmVzdWx0OwpAQCAtMzY4LDE5ICszODksNDcgQEAgY29weV9zZXF1 ZW5jZShMb2dpY2FsUmVwU2VxdWVuY2VJbmZvICpzZXFpbmZvLCBPaWQgc2Vxb3duZXIpCiAKIAkv KgogCSAqIFJlY29yZCB0aGUgcmVtb3RlIHNlcXVlbmNlJ3MgTFNOIGluIHBnX3N1YnNjcmlwdGlv bl9yZWwgYW5kIG1hcmsgdGhlCi0JICogc2VxdWVuY2UgYXMgUkVBRFkuCisJICogc2VxdWVuY2Ug YXMgUkVBRFkgaWYgdXBkYXRpbmcgYSBzZXF1ZW5jZSB0aGF0IGlzIGluIElOSVQgc3RhdGUuCiAJ ICovCi0JVXBkYXRlU3Vic2NyaXB0aW9uUmVsU3RhdGUoTXlTdWJzY3JpcHRpb24tPm9pZCwgc2Vx b2lkLCBTVUJSRUxfU1RBVEVfUkVBRFksCi0JCQkJCQkJICAgc2VxaW5mby0+cGFnZV9sc24sIGZh bHNlKTsKKwlpZiAocmVsc3RhdGUgPT0gU1VCUkVMX1NUQVRFX0lOSVQpCisJCVVwZGF0ZVN1YnNj cmlwdGlvblJlbFN0YXRlKE15U3Vic2NyaXB0aW9uLT5vaWQsIHNlcW9pZCwgU1VCUkVMX1NUQVRF X1JFQURZLAorCQkJCQkJCQkgICBzZXFpbmZvLT5wYWdlX2xzbiwgZmFsc2UpOwogCiAJcmV0dXJu IENPUFlTRVFfU1VDQ0VTUzsKIH0KIAorLyoKKyAqIGNoZWNrX3NlcXVlbmNlX2RyaWZ0CisgKgor ICogQ2hlY2sgaWYgdGhlIHJlbW90ZSBzZXF1ZW5jZSB2YWx1ZXMgZGlmZmVyIGZyb20gdGhlIGxv Y2FsIHNlcXVlbmNlLgorICogUmV0dXJucyB0cnVlL2ZhbHNlIGlmIGFueSBzZXF1ZW5jZXMgZHJp ZnRlZC4KKyAqLworc3RhdGljIGJvb2wKK2NoZWNrX3NlcXVlbmNlX2RyaWZ0KExvZ2ljYWxSZXBT ZXF1ZW5jZUluZm8gKnNlcWluZm8pCit7CisJaW50NjQJCWxvY2FsX2xhc3RfdmFsdWU7CisJYm9v bAkJbG9jYWxfaXNfY2FsbGVkOworCisJLyogR2V0IGN1cnJlbnQgbG9jYWwgc2VxdWVuY2Ugc3Rh dGUgKi8KKwlHZXRTZXF1ZW5jZShzZXFpbmZvLT5sb2NhbHJlbGlkLCAmbG9jYWxfbGFzdF92YWx1 ZSwgJmxvY2FsX2lzX2NhbGxlZCk7CisKKwkvKiBDaGVjayBpZiB2YWx1ZXMgaGF2ZSBkcmlmdGVk IGFuZCByZXR1cm4gYWNjb3JkaW5nbHkgKi8KKwlyZXR1cm4gKGxvY2FsX2xhc3RfdmFsdWUgIT0g c2VxaW5mby0+bGFzdF92YWx1ZSB8fAorCQlsb2NhbF9pc19jYWxsZWQgIT0gc2VxaW5mby0+aXNf Y2FsbGVkKTsKKworfQorCiAvKgogICogQ29weSBleGlzdGluZyBkYXRhIG9mIHNlcXVlbmNlcyBm cm9tIHRoZSBwdWJsaXNoZXIuCisgKgorICogSWYgcmVsc3RhdGUgaXMgU1VCUkVMX1NUQVRFX1JF QURZLCBvbmx5IHN5bmNocm9uaXplIHNlcXVlbmNlcyB0aGF0CisgKiBoYXZlIGRyaWZ0ZWQgZnJv bSB0aGVpciBwdWJsaXNoZXIgdmFsdWVzLiBPdGhlcndpc2UsIHN5bmNocm9uaXplCisgKiBhbGwg c2VxdWVuY2VzLgorICoKKyAqIFJldHVybnMgdHJ1ZS9mYWxzZSBpZiBhbnkgc2VxdWVuY2VzIHdl cmUgYWN0dWFsbHkgY29waWVkLgogICovCi1zdGF0aWMgdm9pZAotY29weV9zZXF1ZW5jZXMoV2Fs UmVjZWl2ZXJDb25uICpjb25uKQorc3RhdGljIGJvb2wKK2NvcHlfc2VxdWVuY2VzKFdhbFJlY2Vp dmVyQ29ubiAqY29ubiwgY2hhciByZWxzdGF0ZSkKIHsKIAlpbnQJCQljdXJfYmF0Y2hfYmFzZV9p bmRleCA9IDA7CiAJaW50CQkJbl9zZXFpbmZvcyA9IGxpc3RfbGVuZ3RoKHNlcWluZm9zKTsKQEAg LTM5MCwxMyArNDM5LDEwIEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikK IAlTdHJpbmdJbmZvCXNlcXN0ciA9IG1ha2VTdHJpbmdJbmZvKCk7CiAJU3RyaW5nSW5mbwljbWQg PSBtYWtlU3RyaW5nSW5mbygpOwogCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCWJvb2wJCWRyaWZ0 X2RldGVjdGVkID0gZmFsc2U7CiAKICNkZWZpbmUgTUFYX1NFUVVFTkNFU19TWU5DX1BFUl9CQVRD SCAxMDAKIAotCWVsb2coREVCVUcxLAotCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gc2VxdWVuY2Ug c3luY2hyb25pemF0aW9uIGZvciBzdWJzY3JpcHRpb24gXCIlc1wiIC0gdG90YWwgdW5zeW5jaHJv bml6ZWQ6ICVkIiwKLQkJIE15U3Vic2NyaXB0aW9uLT5uYW1lLCBuX3NlcWluZm9zKTsKLQogCXdo aWxlIChjdXJfYmF0Y2hfYmFzZV9pbmRleCA8IG5fc2VxaW5mb3MpCiAJewogCQlPaWQJCQlzZXFS b3dbUkVNT1RFX1NFUV9DT0xfQ09VTlRdID0ge0lOVDhPSUQsIElOVDhPSUQsCkBAIC00MDYsNiAr NDUyLDcgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25uKQogCQlpbnQJCQli YXRjaF9taXNtYXRjaGVkX2NvdW50ID0gMDsKIAkJaW50CQkJYmF0Y2hfc2tpcHBlZF9jb3VudCA9 IDA7CiAJCWludAkJCWJhdGNoX2luc3VmZnBlcm1fY291bnQgPSAwOworCQlpbnQJCQliYXRjaF9u b19kcmlmdCA9IDA7CiAJCWludAkJCWJhdGNoX21pc3NpbmdfY291bnQ7CiAJCVJlbGF0aW9uCXNl cXVlbmNlX3JlbCA9IE5VTEw7CiAKQEAgLTQ5MSw2ICs1MzgsNyBAQCBjb3B5X3NlcXVlbmNlcyhX YWxSZWNlaXZlckNvbm4gKmNvbm4pCiAJCQlDb3B5U2VxUmVzdWx0IHN5bmNfc3RhdHVzOwogCQkJ TG9naWNhbFJlcFNlcXVlbmNlSW5mbyAqc2VxaW5mbzsKIAkJCWludAkJCXNlcWlkeDsKKwkJCWJv b2wJCXNob3VsZF9zeW5jID0gdHJ1ZTsKIAogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApA QCAtNTAyLDE5ICs1NTAsMzQgQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25u KQogCiAJCQlzeW5jX3N0YXR1cyA9IGdldF9hbmRfdmFsaWRhdGVfc2VxX2luZm8oc2xvdCwgJnNl cXVlbmNlX3JlbCwKIAkJCQkJCQkJCQkJCQkmc2VxaW5mbywgJnNlcWlkeCk7Ci0JCQlpZiAoc3lu Y19zdGF0dXMgPT0gQ09QWVNFUV9TVUNDRVNTKQorCisJCQkvKgorCQkJICogRm9yIHNlcXVlbmNl cyBpbiBSRUFEWSBzdGF0ZSwgb25seSBzeW5jIGlmIHRoZXJlJ3MgZHJpZnQKKwkJCSAqLworCQkJ aWYgKHJlbHN0YXRlID09IFNVQlJFTF9TVEFURV9SRUFEWSAmJiBzeW5jX3N0YXR1cyA9PSBDT1BZ U0VRX1NVQ0NFU1MpCisJCQl7CisJCQkJc2hvdWxkX3N5bmMgPSBjaGVja19zZXF1ZW5jZV9kcmlm dChzZXFpbmZvKTsKKwkJCQlpZiAoc2hvdWxkX3N5bmMpCisJCQkJCWRyaWZ0X2RldGVjdGVkID0g dHJ1ZTsKKwkJCX0KKworCQkJaWYgKHN5bmNfc3RhdHVzID09IENPUFlTRVFfU1VDQ0VTUyAmJiBz aG91bGRfc3luYykKIAkJCQlzeW5jX3N0YXR1cyA9IGNvcHlfc2VxdWVuY2Uoc2VxaW5mbywKLQkJ CQkJCQkJCQkJc2VxdWVuY2VfcmVsLT5yZF9yZWwtPnJlbG93bmVyKTsKKwkJCQkJCQkJCQkJc2Vx dWVuY2VfcmVsLT5yZF9yZWwtPnJlbG93bmVyLAorCQkJCQkJCQkJCQlyZWxzdGF0ZSk7CisJCQll bHNlIGlmIChzeW5jX3N0YXR1cyA9PSBDT1BZU0VRX1NVQ0NFU1MgJiYgIXNob3VsZF9zeW5jKQor CQkJCXN5bmNfc3RhdHVzID0gQ09QWVNFUV9OT1dPUks7CiAKIAkJCXN3aXRjaCAoc3luY19zdGF0 dXMpCiAJCQl7CiAJCQkJY2FzZSBDT1BZU0VRX1NVQ0NFU1M6CiAJCQkJCWVsb2coREVCVUcxLAot CQkJCQkJICJsb2dpY2FsIHJlcGxpY2F0aW9uIHN5bmNocm9uaXphdGlvbiBmb3Igc3Vic2NyaXB0 aW9uIFwiJXNcIiwgc2VxdWVuY2UgXCIlcy4lc1wiIGhhcyBmaW5pc2hlZCIsCisJCQkJCQkgImxv Z2ljYWwgcmVwbGljYXRpb24gc3luYyBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiwgc2VxdWVuY2Ug XCIlcy4lc1wiIGhhcyBiZWVuIHVwZGF0ZWQiLAogCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5uYW1l LCBzZXFpbmZvLT5uc3BuYW1lLAogCQkJCQkJIHNlcWluZm8tPnNlcW5hbWUpOwogCQkJCQliYXRj aF9zdWNjZWVkZWRfY291bnQrKzsKIAkJCQkJYnJlYWs7CisKIAkJCQljYXNlIENPUFlTRVFfTUlT TUFUQ0g6CiAKIAkJCQkJLyoKQEAgLTUyOCw2ICs1OTEsNyBAQCBjb3B5X3NlcXVlbmNlcyhXYWxS ZWNlaXZlckNvbm4gKmNvbm4pCiAJCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOwog CQkJCQliYXRjaF9taXNtYXRjaGVkX2NvdW50Kys7CiAJCQkJCWJyZWFrOworCiAJCQkJY2FzZSBD T1BZU0VRX0lOU1VGRklDSUVOVF9QRVJNOgogCiAJCQkJCS8qCkBAIC01NDEsNiArNjA1LDcgQEAg Y29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25uKQogCQkJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKIAkJCQkJYmF0Y2hfaW5zdWZmcGVybV9jb3VudCsrOwogCQkJCQli cmVhazsKKwogCQkJCWNhc2UgQ09QWVNFUV9TS0lQUEVEOgogCiAJCQkJCS8qCkBAIC01NTgsNiAr NjIzLDE1IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAkJCQkJCWJh dGNoX3NraXBwZWRfY291bnQrKzsKIAkJCQkJfQogCQkJCQlicmVhazsKKworCQkJCQljYXNlIENP UFlTRVFfTk9XT1JLOgorCQkJCQkJLyogTm90aGluZyB0byBkbyAqLworCQkJCQkJYmF0Y2hfbm9f ZHJpZnQrKzsKKwkJCQkJCWJyZWFrOworCisJCQkJCWRlZmF1bHQ6CisJCQkJCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIFNlcXVlbmNlIHJlcGxpY2F0aW9uIHJlc3VsdDogJWQiLCAoaW50KSBz eW5jX3N0YXR1cyk7CisKIAkJCX0KIAogCQkJaWYgKHNlcXVlbmNlX3JlbCkKQEAgLTU3MiwxNCAr NjQ2LDE2IEBAIGNvcHlfc2VxdWVuY2VzKFdhbFJlY2VpdmVyQ29ubiAqY29ubikKIAkJYmF0Y2hf bWlzc2luZ19jb3VudCA9IGJhdGNoX3NpemUgLSAoYmF0Y2hfc3VjY2VlZGVkX2NvdW50ICsKIAkJ CQkJCQkJCQkJYmF0Y2hfbWlzbWF0Y2hlZF9jb3VudCArCiAJCQkJCQkJCQkJCWJhdGNoX2luc3Vm ZnBlcm1fY291bnQgKwotCQkJCQkJCQkJCQliYXRjaF9za2lwcGVkX2NvdW50KTsKKwkJCQkJCQkJ CQkJYmF0Y2hfc2tpcHBlZF9jb3VudCArCisJCQkJCQkJCQkJCWJhdGNoX25vX2RyaWZ0KTsKIAog CQllbG9nKERFQlVHMSwKLQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiBzZXF1ZW5jZSBzeW5jaHJv bml6YXRpb24gZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgLSBiYXRjaCAjJWQgPSAlZCBhdHRlbXB0 ZWQsICVkIHN1Y2NlZWRlZCwgJWQgbWlzbWF0Y2hlZCwgJWQgaW5zdWZmaWNpZW50IHBlcm1pc3Np b24sICVkIG1pc3NpbmcgZnJvbSBwdWJsaXNoZXIsICVkIHNraXBwZWQiLAotCQkJIE15U3Vic2Ny aXB0aW9uLT5uYW1lLAotCQkJIChjdXJfYmF0Y2hfYmFzZV9pbmRleCAvIE1BWF9TRVFVRU5DRVNf U1lOQ19QRVJfQkFUQ0gpICsgMSwKLQkJCSBiYXRjaF9zaXplLCBiYXRjaF9zdWNjZWVkZWRfY291 bnQsIGJhdGNoX21pc21hdGNoZWRfY291bnQsCi0JCQkgYmF0Y2hfaW5zdWZmcGVybV9jb3VudCwg YmF0Y2hfbWlzc2luZ19jb3VudCwgYmF0Y2hfc2tpcHBlZF9jb3VudCk7CisJCSAibG9naWNhbCBy ZXBsaWNhdGlvbiBzZXF1ZW5jZSBzeW5jaHJvbml6YXRpb24gZm9yIHN1YnNjcmlwdGlvbiBcIiVz XCIgLSBmb3Igc2VxdWVuY2VzIGluICVzIHN0YXRlIGJhdGNoICMlZCA9ICVkIGF0dGVtcHRlZCwg JWQgc3VjY2VlZGVkLCAlZCBtaXNtYXRjaGVkLCAlZCBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiwg JWQgbWlzc2luZyBmcm9tIHB1Ymxpc2hlciwgJWQgc2tpcHBlZCwgJWQgbm8gZHJpZnQiLAorCQkg TXlTdWJzY3JpcHRpb24tPm5hbWUsCisJCSAocmVsc3RhdGUgPT0gJ3InKSA/ICJSRUFEWSIgOiAo cmVsc3RhdGUgPT0gJ2knKSA/ICJJTklUIiAgOiAiVU5LTk9XTiIsCisJCSAoY3VyX2JhdGNoX2Jh c2VfaW5kZXggLyBNQVhfU0VRVUVOQ0VTX1NZTkNfUEVSX0JBVENIKSArIDEsCisJCSBiYXRjaF9z aXplLCBiYXRjaF9zdWNjZWVkZWRfY291bnQsIGJhdGNoX21pc21hdGNoZWRfY291bnQsCisJCSBi YXRjaF9pbnN1ZmZwZXJtX2NvdW50LCBiYXRjaF9taXNzaW5nX2NvdW50LCBiYXRjaF9za2lwcGVk X2NvdW50LCBiYXRjaF9ub19kcmlmdCk7CiAKIAkJLyogQ29tbWl0IHRoaXMgYmF0Y2gsIGFuZCBw cmVwYXJlIGZvciBuZXh0IGJhdGNoICovCiAJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwpA QCAtNjA4LDIzICs2ODQsMjggQEAgY29weV9zZXF1ZW5jZXMoV2FsUmVjZWl2ZXJDb25uICpjb25u KQogCS8qIFJlcG9ydCBtaXNtYXRjaGVzLCBwZXJtaXNzaW9uIGlzc3Vlcywgb3IgbWlzc2luZyBz ZXF1ZW5jZXMgKi8KIAlyZXBvcnRfc2VxdWVuY2VfZXJyb3JzKG1pc21hdGNoZWRfc2Vxc19pZHgs IGluc3VmZnBlcm1fc2Vxc19pZHgsCiAJCQkJCQkgICBtaXNzaW5nX3NlcXNfaWR4KTsKKworCWxp c3RfZnJlZShzZXFpbmZvcyk7CisJc2VxaW5mb3MgPSBOSUw7CisKKwlyZXR1cm4gZHJpZnRfZGV0 ZWN0ZWQ7CiB9CiAKIC8qCiAgKiBJZGVudGlmaWVzIHNlcXVlbmNlcyB0aGF0IHJlcXVpcmUgc3lu Y2hyb25pemF0aW9uIGFuZCBpbml0aWF0ZXMgdGhlCiAgKiBzeW5jaHJvbml6YXRpb24gcHJvY2Vz cy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgc2VxdWVuY2VzIGhhdmUgYmVlbiB1cGRhdGVkLgog ICovCi1zdGF0aWMgdm9pZAotTG9naWNhbFJlcFN5bmNTZXF1ZW5jZXModm9pZCkKK3N0YXRpYyBi b29sCitMb2dpY2FsUmVwU3luY1NlcXVlbmNlcyhXYWxSZWNlaXZlckNvbm4gKmNvbm4sIGNoYXIg cmVsc3RhdGUpCiB7Ci0JY2hhcgkgICAqZXJyOwotCWJvb2wJCW11c3RfdXNlX3Bhc3N3b3JkOwog CVJlbGF0aW9uCXJlbDsKIAlIZWFwVHVwbGUJdHVwOwogCVNjYW5LZXlEYXRhIHNrZXlbMl07CiAJ U3lzU2NhbkRlc2Mgc2NhbjsKIAlPaWQJCQlzdWJpZCA9IE15TG9naWNhbFJlcFdvcmtlci0+c3Vi aWQ7Ci0JU3RyaW5nSW5mb0RhdGEgYXBwX25hbWU7CisJYm9vbAkJc2VxdWVuY2VfY29waWVkID0g ZmFsc2U7CiAKIAlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCkBAIC02MzYsOSArNzE3LDkg QEAgTG9naWNhbFJlcFN5bmNTZXF1ZW5jZXModm9pZCkKIAkJCQlPYmplY3RJZEdldERhdHVtKHN1 YmlkKSk7CiAKIAlTY2FuS2V5SW5pdCgmc2tleVsxXSwKLQkJCQlBbnVtX3BnX3N1YnNjcmlwdGlv bl9yZWxfc3JzdWJzdGF0ZSwKLQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfQ0hBUkVRLAot CQkJCUNoYXJHZXREYXR1bShTVUJSRUxfU1RBVEVfSU5JVCkpOworCQkJQW51bV9wZ19zdWJzY3Jp cHRpb25fcmVsX3Nyc3Vic3RhdGUsCisJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfQ0hBUkVR LAorCQkJQ2hhckdldERhdHVtKHJlbHN0YXRlKSk7CiAKIAlzY2FuID0gc3lzdGFibGVfYmVnaW5z Y2FuKHJlbCwgSW52YWxpZE9pZCwgZmFsc2UsCiAJCQkJCQkJICBOVUxMLCAyLCBza2V5KTsKQEAg LTY5MywzNiArNzc0LDE2IEBAIExvZ2ljYWxSZXBTeW5jU2VxdWVuY2VzKHZvaWQpCiAJICogRXhp dCBlYXJseSBpZiBubyBjYXRhbG9nIGVudHJpZXMgZm91bmQsIGxpa2VseSBkdWUgdG8gY29uY3Vy cmVudCBkcm9wcy4KIAkgKi8KIAlpZiAoIXNlcWluZm9zKQotCQlyZXR1cm47Ci0KLQkvKiBJcyB0 aGUgdXNlIG9mIGEgcGFzc3dvcmQgbWFuZGF0b3J5PyAqLwotCW11c3RfdXNlX3Bhc3N3b3JkID0g TXlTdWJzY3JpcHRpb24tPnBhc3N3b3JkcmVxdWlyZWQgJiYKLQkJIU15U3Vic2NyaXB0aW9uLT5v d25lcnN1cGVydXNlcjsKKwkJcmV0dXJuIGZhbHNlOwogCi0JaW5pdFN0cmluZ0luZm8oJmFwcF9u YW1lKTsKLQlhcHBlbmRTdHJpbmdJbmZvKCZhcHBfbmFtZSwgInBnXyV1X3NlcXVlbmNlX3N5bmNf IiBVSU5UNjRfRk9STUFULAotCQkJCQkgTXlTdWJzY3JpcHRpb24tPm9pZCwgR2V0U3lzdGVtSWRl bnRpZmllcigpKTsKKwkvKiBQZXJmb3JtIHN5bmNocm9uaXphdGlvbiAqLworCXNlcXVlbmNlX2Nv cGllZCA9IGNvcHlfc2VxdWVuY2VzKGNvbm4sIHJlbHN0YXRlKTsKIAotCS8qCi0JICogRXN0YWJs aXNoIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwdWJsaXNoZXIgZm9yIHNlcXVlbmNlIHN5bmNocm9u aXphdGlvbi4KLQkgKi8KLQlMb2dSZXBXb3JrZXJXYWxSY3ZDb25uID0KLQkJd2FscmN2X2Nvbm5l Y3QoTXlTdWJzY3JpcHRpb24tPmNvbm5pbmZvLCB0cnVlLCB0cnVlLAotCQkJCQkgICBtdXN0X3Vz ZV9wYXNzd29yZCwKLQkJCQkJICAgYXBwX25hbWUuZGF0YSwgJmVycik7Ci0JaWYgKExvZ1JlcFdv cmtlcldhbFJjdkNvbm4gPT0gTlVMTCkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQllcnJjb2RlKEVS UkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKLQkJCQllcnJtc2coInNlcXVlbmNlc3luYyB3b3Jr ZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgY291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHB1Ymxp c2hlcjogJXMiLAotCQkJCQkgICBNeVN1YnNjcmlwdGlvbi0+bmFtZSwgZXJyKSk7Ci0KLQlwZnJl ZShhcHBfbmFtZS5kYXRhKTsKLQotCWNvcHlfc2VxdWVuY2VzKExvZ1JlcFdvcmtlcldhbFJjdkNv bm4pOworCXJldHVybiBzZXF1ZW5jZV9jb3BpZWQ7CiB9CiAKIC8qCi0gKiBFeGVjdXRlIHRoZSBp bml0aWFsIHN5bmMgd2l0aCBlcnJvciBoYW5kbGluZy4gRGlzYWJsZSB0aGUgc3Vic2NyaXB0aW9u LAorICogRXhlY3V0ZSB0aGUgc2VxdWVuY2Ugc3luYyB3aXRoIGVycm9yIGhhbmRsaW5nLiBEaXNh YmxlIHRoZSBzdWJzY3JpcHRpb24sCiAgKiBpZiByZXF1aXJlZC4KICAqCiAgKiBOb3RlIHRoYXQg d2UgZG9uJ3QgaGFuZGxlIEZBVEFMIGVycm9ycyB3aGljaCBhcmUgcHJvYmFibHkgYmVjYXVzZSBv ZiBzeXN0ZW0KQEAgLTczNSw4ICs3OTYsNjUgQEAgc3RhcnRfc2VxdWVuY2Vfc3luYyh2b2lkKQog CiAJUEdfVFJZKCk7CiAJewotCQkvKiBDYWxsIGluaXRpYWwgc3luYy4gKi8KLQkJTG9naWNhbFJl cFN5bmNTZXF1ZW5jZXMoKTsKKwkJY2hhciAgICAgICAqZXJyOworCQlib29sCQltdXN0X3VzZV9w YXNzd29yZDsKKwkJU3RyaW5nSW5mb0RhdGEgYXBwX25hbWU7CisKKwkJLyogSXMgdGhlIHVzZSBv ZiBhIHBhc3N3b3JkIG1hbmRhdG9yeT8gKi8KKwkJbXVzdF91c2VfcGFzc3dvcmQgPSBNeVN1YnNj cmlwdGlvbi0+cGFzc3dvcmRyZXF1aXJlZCAmJgorCQkJIU15U3Vic2NyaXB0aW9uLT5vd25lcnN1 cGVydXNlcjsKKworCQlpbml0U3RyaW5nSW5mbygmYXBwX25hbWUpOworCQlhcHBlbmRTdHJpbmdJ bmZvKCZhcHBfbmFtZSwgInBnXyV1X3NlcXVlbmNlX3N5bmNfIiBVSU5UNjRfRk9STUFULAorCQkJ CQkJIE15U3Vic2NyaXB0aW9uLT5vaWQsIEdldFN5c3RlbUlkZW50aWZpZXIoKSk7CisKKwkJLyoK KwkJICogRXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwdWJsaXNoZXIgZm9yIHNlcXVl bmNlIHN5bmNocm9uaXphdGlvbi4KKwkJICovCisJCUxvZ1JlcFdvcmtlcldhbFJjdkNvbm4gPQor CQkJd2FscmN2X2Nvbm5lY3QoTXlTdWJzY3JpcHRpb24tPmNvbm5pbmZvLCB0cnVlLCB0cnVlLAor CQkJCQkJICAgbXVzdF91c2VfcGFzc3dvcmQsCisJCQkJCQkgICBhcHBfbmFtZS5kYXRhLCAmZXJy KTsKKwkJaWYgKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAorCQkJCQllcnJt c2coInNlcXVlbmNlc3luYyB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIgY291bGQgbm90 IGNvbm5lY3QgdG8gdGhlIHB1Ymxpc2hlcjogJXMiLAorCQkJCQkJICAgTXlTdWJzY3JpcHRpb24t Pm5hbWUsIGVycikpOworCisJCXBmcmVlKGFwcF9uYW1lLmRhdGEpOworCisJCWZvciAoOzspCisJ CXsKKwkJCWJvb2wgc2VxdWVuY2VfY29waWVkID0gZmFsc2U7CisKKwkJCUNIRUNLX0ZPUl9JTlRF UlJVUFRTKCk7CisKKwkJCS8qIFJ1biBzeW5jIGZvciBzZXF1ZW5jZXMgaW4gUkVBRFkgc3RhdGUg Ki8KKwkJCXNlcXVlbmNlX2NvcGllZCB8PSBMb2dpY2FsUmVwU3luY1NlcXVlbmNlcyhMb2dSZXBX b3JrZXJXYWxSY3ZDb25uLCBTVUJSRUxfU1RBVEVfUkVBRFkpOworCisJCQkvKiBDYWxsIGluaXRp YWwgc3luYyBmb3Igc2VxdWVuY2VzIGluIElOSVQgc3RhdGUgKi8KKwkJCXNlcXVlbmNlX2NvcGll ZCB8PSBMb2dpY2FsUmVwU3luY1NlcXVlbmNlcyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBTVUJS RUxfU1RBVEVfSU5JVCk7CisKKwkJCS8qIEFkanVzdCBzbGVlcCBpbnRlcnZhbCBiYXNlZCBvbiBk cmlmdCBkZXRlY3Rpb246ICovCisJCQlpZiAoc2VxdWVuY2VfY29waWVkKQorCQkJeworCQkJCXNs ZWVwX21zID0gU0VRU1lOQ19NSU5fU0xFRVBfTVM7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkv KiBObyBkcmlmdCBkZXRlY3RlZCwgc28gZG91YmxlIHRoZSBzbGVlcCB0aW1lLCBidXQgbm90IGJl eW9uZAorCQkJICogdGhlIG1heGltdW0gYWxsb3dhYmxlIHZhbHVlLgorCQkJICovCisJCQkJc2xl ZXBfbXMgPSBNaW4oc2xlZXBfbXMgKiAyLCBTRVFTWU5DX01BWF9TTEVFUF9NUyk7CisJCQl9CisK KwkJCS8qIFNsZWVwIGZvciB0aGUgY29uZmlndXJlZCBpbnRlcnZhbCAqLworCQkJKHZvaWQpIFdh aXRMYXRjaChNeUxhdGNoLAorCQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9USU1FT1VUIHwgV0xf RVhJVF9PTl9QTV9ERUFUSCwKKwkJCQkJCQkgc2xlZXBfbXMsCisJCQkJCQkJIFdBSVRfRVZFTlRf TE9HSUNBTF9TWU5DX1NUQVRFX0NIQU5HRSk7CisJCQlSZXNldExhdGNoKE15TGF0Y2gpOworCQl9 CiAJfQogCVBHX0NBVENIKCk7CiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9zeW5jdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv c3luY3V0aWxzLmMKaW5kZXggNTM1ZmZiNmYwOWUuLjY2ODMyNWMzNTViIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3N5bmN1dGlscy5jCisrKyBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc3luY3V0aWxzLmMKQEAgLTE5MCwxMyArMTkwLDEzIEBA IFByb2Nlc3NTeW5jaW5nUmVsYXRpb25zKFhMb2dSZWNQdHIgY3VycmVudF9sc24pCiAgKgogICog VGhlIHBnX3N1YnNjcmlwdGlvbl9yZWwgY2F0YWxvZyBpcyBzaGFyZWQgYnkgdGFibGVzIGFuZCBz ZXF1ZW5jZXMuIENoYW5nZXMKICAqIHRvIGVpdGhlciBzZXF1ZW5jZXMgb3IgdGFibGVzIGNhbiBh ZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHJlbGF0aW9uIHN0YXRlcywgc28KLSAqIHdlIGlkZW50aWZ5 IG5vbi1SRUFEWSB0YWJsZXMgYW5kIG5vbi1SRUFEWSBzZXF1ZW5jZXMgdG9nZXRoZXIgdG8gZW5z dXJlCisgKiB3ZSBpZGVudGlmeSBub24tUkVBRFkgdGFibGVzIGFuZCBzZXF1ZW5jZXMgKGluIGFu eSBzdGF0ZSkgdG9nZXRoZXIgdG8gZW5zdXJlCiAgKiBjb25zaXN0ZW5jeS4KICAqCiAgKiBoYXNf cGVuZGluZ19zdWJ0YWJsZXM6IHRydWUgaWYgdGhlIHN1YnNjcmlwdGlvbiBoYXMgb25lIG9yIG1v cmUgdGFibGVzIHRoYXQKICAqIGFyZSBub3QgaW4gUkVBRFkgc3RhdGUsIG90aGVyd2lzZSBmYWxz ZS4KICAqIGhhc19wZW5kaW5nX3N1YnNlcXVlbmNlczogdHJ1ZSBpZiB0aGUgc3Vic2NyaXB0aW9u IGhhcyBvbmUgb3IgbW9yZSBzZXF1ZW5jZXMKLSAqIHRoYXQgYXJlIG5vdCBpbiBSRUFEWSBzdGF0 ZSwgb3RoZXJ3aXNlIGZhbHNlLgorICogKGluIGFueSBzdGF0ZSksIG90aGVyd2lzZSBmYWxzZS4K ICAqLwogdm9pZAogRmV0Y2hSZWxhdGlvblN0YXRlcyhib29sICpoYXNfcGVuZGluZ19zdWJ0YWJs ZXMsCkBAIC0yMDQsNTMgKzIwNCw0NyBAQCBGZXRjaFJlbGF0aW9uU3RhdGVzKGJvb2wgKmhhc19w ZW5kaW5nX3N1YnRhYmxlcywKIAkJCQkJYm9vbCAqc3RhcnRlZF90eCkKIHsKIAkvKgotCSAqIGhh c19zdWJ0YWJsZXMgYW5kIGhhc19zdWJzZXF1ZW5jZXNfbm9uX3JlYWR5IGFyZSBkZWNsYXJlZCBh cyBzdGF0aWMsCisJICogaGFzX3N1YnRhYmxlcyBhbmQgaGFzX3N1YnNlcXVlbmNlcyBhcmUgZGVj bGFyZWQgYXMgc3RhdGljLAogCSAqIHNpbmNlIHRoZSBzYW1lIHZhbHVlIGNhbiBiZSB1c2VkIHVu dGlsIHRoZSBzeXN0ZW0gdGFibGUgaXMgaW52YWxpZGF0ZWQuCiAJICovCiAJc3RhdGljIGJvb2wg aGFzX3N1YnRhYmxlcyA9IGZhbHNlOwotCXN0YXRpYyBib29sIGhhc19zdWJzZXF1ZW5jZXNfbm9u X3JlYWR5ID0gZmFsc2U7Ci0KKwlzdGF0aWMgYm9vbCBoYXNfc3Vic2VxdWVuY2VzID0gZmFsc2U7 CiAJKnN0YXJ0ZWRfdHggPSBmYWxzZTsKLQogCWlmIChyZWxhdGlvbl9zdGF0ZXNfdmFsaWRpdHkg IT0gU1lOQ19SRUxBVElPTlNfU1RBVEVfVkFMSUQpCiAJewogCQlNZW1vcnlDb250ZXh0IG9sZGN0 eDsKIAkJTGlzdAkgICAqcnN0YXRlczsKKwkJTGlzdAkgICAqc2VxX3N0YXRlczsKIAkJU3Vic2Ny aXB0aW9uUmVsU3RhdGUgKnJzdGF0ZTsKLQogCQlyZWxhdGlvbl9zdGF0ZXNfdmFsaWRpdHkgPSBT WU5DX1JFTEFUSU9OU19TVEFURV9SRUJVSUxEX1NUQVJURUQ7Ci0JCWhhc19zdWJzZXF1ZW5jZXNf bm9uX3JlYWR5ID0gZmFsc2U7Ci0KKwkJaGFzX3N1YnNlcXVlbmNlcyA9IGZhbHNlOwogCQkvKiBD bGVhbiB0aGUgb2xkIGxpc3RzLiAqLwogCQlsaXN0X2ZyZWVfZGVlcCh0YWJsZV9zdGF0ZXNfbm90 X3JlYWR5KTsKIAkJdGFibGVfc3RhdGVzX25vdF9yZWFkeSA9IE5JTDsKLQogCQlpZiAoIUlzVHJh bnNhY3Rpb25TdGF0ZSgpKQogCQl7CiAJCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCQkJ KnN0YXJ0ZWRfdHggPSB0cnVlOwogCQl9Ci0KLQkJLyogRmV0Y2ggdGFibGVzIGFuZCBzZXF1ZW5j ZXMgdGhhdCBhcmUgaW4gbm9uLVJFQURZIHN0YXRlLiAqLwotCQlyc3RhdGVzID0gR2V0U3Vic2Ny aXB0aW9uUmVsYXRpb25zKE15U3Vic2NyaXB0aW9uLT5vaWQsIHRydWUsIHRydWUsCisJCS8qIEZl dGNoIHRhYmxlcyB0aGF0IGFyZSBpbiBub24tUkVBRFkgc3RhdGUuICovCisJCXJzdGF0ZXMgPSBH ZXRTdWJzY3JpcHRpb25SZWxhdGlvbnMoTXlTdWJzY3JpcHRpb24tPm9pZCwgdHJ1ZSwgZmFsc2Us CiAJCQkJCQkJCQkJICAgdHJ1ZSk7Ci0KKwkJLyogRmV0Y2ggYWxsIHNlcXVlbmNlcyAocmVnYXJk bGVzcyBvZiBzdGF0ZSkuICovCisJCXNlcV9zdGF0ZXMgPSBHZXRTdWJzY3JpcHRpb25SZWxhdGlv bnMoTXlTdWJzY3JpcHRpb24tPm9pZCwgZmFsc2UsIHRydWUsCisJCQkJCQkJCQkJCSAgZmFsc2Up OwogCQkvKiBBbGxvY2F0ZSB0aGUgdHJhY2tpbmcgaW5mbyBpbiBhIHBlcm1hbmVudCBtZW1vcnkg Y29udGV4dC4gKi8KIAkJb2xkY3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKENhY2hlTWVtb3J5 Q29udGV4dCk7CiAJCWZvcmVhY2hfcHRyKFN1YnNjcmlwdGlvblJlbFN0YXRlLCBzdWJyZWwsIHJz dGF0ZXMpCiAJCXsKLQkJCWlmIChnZXRfcmVsX3JlbGtpbmQoc3VicmVsLT5yZWxpZCkgPT0gUkVM S0lORF9TRVFVRU5DRSkKLQkJCQloYXNfc3Vic2VxdWVuY2VzX25vbl9yZWFkeSA9IHRydWU7Ci0J CQllbHNlCi0JCQl7Ci0JCQkJcnN0YXRlID0gcGFsbG9jX29iamVjdChTdWJzY3JpcHRpb25SZWxT dGF0ZSk7Ci0JCQkJbWVtY3B5KHJzdGF0ZSwgc3VicmVsLCBzaXplb2YoU3Vic2NyaXB0aW9uUmVs U3RhdGUpKTsKLQkJCQl0YWJsZV9zdGF0ZXNfbm90X3JlYWR5ID0gbGFwcGVuZCh0YWJsZV9zdGF0 ZXNfbm90X3JlYWR5LAotCQkJCQkJCQkJCQkJIHJzdGF0ZSk7Ci0JCQl9CisJCQlyc3RhdGUgPSBw YWxsb2Nfb2JqZWN0KFN1YnNjcmlwdGlvblJlbFN0YXRlKTsKKwkJCW1lbWNweShyc3RhdGUsIHN1 YnJlbCwgc2l6ZW9mKFN1YnNjcmlwdGlvblJlbFN0YXRlKSk7CisJCQl0YWJsZV9zdGF0ZXNfbm90 X3JlYWR5ID0gbGFwcGVuZCh0YWJsZV9zdGF0ZXNfbm90X3JlYWR5LAorCQkJCQkJCQkJCQkgcnN0 YXRlKTsKIAkJfQorCQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNlcXVlbmNlcy4gKi8KKwkJ aGFzX3N1YnNlcXVlbmNlcyA9IChzZXFfc3RhdGVzICE9IE5JTCk7CiAJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjdHgpOwotCisJCWxpc3RfZnJlZV9kZWVwKHNlcV9zdGF0ZXMpOwogCQkvKgog CQkgKiBEb2VzIHRoZSBzdWJzY3JpcHRpb24gaGF2ZSB0YWJsZXM/CiAJCSAqCkBAIC0yNjAsNyAr MjU0LDYgQEAgRmV0Y2hSZWxhdGlvblN0YXRlcyhib29sICpoYXNfcGVuZGluZ19zdWJ0YWJsZXMs CiAJCSAqLwogCQloYXNfc3VidGFibGVzID0gKHRhYmxlX3N0YXRlc19ub3RfcmVhZHkgIT0gTklM KSB8fAogCQkJSGFzU3Vic2NyaXB0aW9uVGFibGVzKE15U3Vic2NyaXB0aW9uLT5vaWQpOwotCiAJ CS8qCiAJCSAqIElmIHRoZSBzdWJzY3JpcHRpb24gcmVsYXRpb24gY2FjaGUgaGFzIGJlZW4gaW52 YWxpZGF0ZWQgc2luY2Ugd2UKIAkJICogZW50ZXJlZCB0aGlzIHJvdXRpbmUsIHdlIHN0aWxsIHVz ZSBhbmQgcmV0dXJuIHRoZSByZWxhdGlvbnMgd2UganVzdApAQCAtMjcxLDEwICsyNjQsOCBAQCBG ZXRjaFJlbGF0aW9uU3RhdGVzKGJvb2wgKmhhc19wZW5kaW5nX3N1YnRhYmxlcywKIAkJaWYgKHJl bGF0aW9uX3N0YXRlc192YWxpZGl0eSA9PSBTWU5DX1JFTEFUSU9OU19TVEFURV9SRUJVSUxEX1NU QVJURUQpCiAJCQlyZWxhdGlvbl9zdGF0ZXNfdmFsaWRpdHkgPSBTWU5DX1JFTEFUSU9OU19TVEFU RV9WQUxJRDsKIAl9Ci0KIAlpZiAoaGFzX3BlbmRpbmdfc3VidGFibGVzKQogCQkqaGFzX3BlbmRp bmdfc3VidGFibGVzID0gaGFzX3N1YnRhYmxlczsKLQogCWlmIChoYXNfcGVuZGluZ19zdWJzZXF1 ZW5jZXMpCi0JCSpoYXNfcGVuZGluZ19zdWJzZXF1ZW5jZXMgPSBoYXNfc3Vic2VxdWVuY2VzX25v bl9yZWFkeTsKKwkJKmhhc19wZW5kaW5nX3N1YnNlcXVlbmNlcyA9IGhhc19zdWJzZXF1ZW5jZXM7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMgYi9zcmMvYmlu L3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKaW5kZXggOGI5MWJjMDAwNjIuLmI4YmRmZWJiMTVhIDEw MDY0NAotLS0gYS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMKKysrIGIvc3JjL2Jpbi9w c3FsL3RhYi1jb21wbGV0ZS5pbi5jCkBAIC0yMzMxLDggKzIzMzEsOCBAQCBtYXRjaF9wcmV2aW91 c193b3JkcyhpbnQgcGF0dGVybl9pZCwKIAkvKiBBTFRFUiBTVUJTQ1JJUFRJT04gPG5hbWU+ICov CiAJZWxzZSBpZiAoTWF0Y2hlcygiQUxURVIiLCAiU1VCU0NSSVBUSU9OIiwgTWF0Y2hBbnkpKQog CQlDT01QTEVURV9XSVRIKCJDT05ORUNUSU9OIiwgIkVOQUJMRSIsICJESVNBQkxFIiwgIk9XTkVS IFRPIiwKLQkJCQkJICAiUkVOQU1FIFRPIiwgIlJFRlJFU0ggUFVCTElDQVRJT04iLCAiUkVGUkVT SCBTRVFVRU5DRVMiLAotCQkJCQkgICJTRVQiLCAiU0tJUCAoIiwgIkFERCBQVUJMSUNBVElPTiIs ICJEUk9QIFBVQkxJQ0FUSU9OIik7CisJCQkJCSAgIlJFTkFNRSBUTyIsICJSRUZSRVNIIFBVQkxJ Q0FUSU9OIiwgIlNFVCIsICJTS0lQICgiLAorCQkJCQkgICJBREQgUFVCTElDQVRJT04iLCAiRFJP UCBQVUJMSUNBVElPTiIpOwogCS8qIEFMVEVSIFNVQlNDUklQVElPTiA8bmFtZT4gUkVGUkVTSCAq LwogCWVsc2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwgIlNVQlNDUklQVElPTiIsIE1hdGNoQW55LCBN YXRjaEFueU4sICJSRUZSRVNIIikpCiAJCUNPTVBMRVRFX1dJVEgoIlBVQkxJQ0FUSU9OIiwgIlNF UVVFTkNFUyIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggMmMzYzRhM2YwNzQuLjk4NTU5 MjA5ZTcwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgZXh0ZXJu IE9iamVjdEFkZHJlc3MgQWx0ZXJTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU2Vx U3RtdCAqc3RtdCk7CiBleHRlcm4gdm9pZCBTZXF1ZW5jZUNoYW5nZVBlcnNpc3RlbmNlKE9pZCBy ZWxpZCwgY2hhciBuZXdyZWxwZXJzaXN0ZW5jZSk7CiBleHRlcm4gdm9pZCBEZWxldGVTZXF1ZW5j ZVR1cGxlKE9pZCByZWxpZCk7CiBleHRlcm4gdm9pZCBSZXNldFNlcXVlbmNlKE9pZCBzZXFfcmVs aWQpOworZXh0ZXJuIHZvaWQgR2V0U2VxdWVuY2UoT2lkIHJlbGlkLCBpbnQ2NCAqbGFzdF92YWx1 ZSwgYm9vbCAqaXNfY2FsbGVkKTsKIGV4dGVybiB2b2lkIFNldFNlcXVlbmNlKE9pZCByZWxpZCwg aW50NjQgbmV4dCwgYm9vbCBpc2NhbGxlZCk7CiBleHRlcm4gdm9pZCBSZXNldFNlcXVlbmNlQ2Fj aGVzKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggNjQ2ZDZjZWQ3NjMuLjQzYjMy OTJmZDJjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC00MzkxLDcgKzQzOTEsNiBAQCB0eXBl ZGVmIGVudW0gQWx0ZXJTdWJzY3JpcHRpb25UeXBlCiAJQUxURVJfU1VCU0NSSVBUSU9OX0FERF9Q VUJMSUNBVElPTiwKIAlBTFRFUl9TVUJTQ1JJUFRJT05fRFJPUF9QVUJMSUNBVElPTiwKIAlBTFRF Ul9TVUJTQ1JJUFRJT05fUkVGUkVTSF9QVUJMSUNBVElPTiwKLQlBTFRFUl9TVUJTQ1JJUFRJT05f UkVGUkVTSF9TRVFVRU5DRVMsCiAJQUxURVJfU1VCU0NSSVBUSU9OX0VOQUJMRUQsCiAJQUxURVJf U1VCU0NSSVBUSU9OX1NLSVAsCiB9IEFsdGVyU3Vic2NyaXB0aW9uVHlwZTsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyNl9zdGF0cy5wbCBiL3NyYy90ZXN0L3N1YnNjcmlw dGlvbi90LzAyNl9zdGF0cy5wbAppbmRleCA1ZDQ1NzA2MGEwMi4uMmZlMjA5ZjQ2MWYgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyNl9zdGF0cy5wbAorKysgYi9zcmMvdGVz dC9zdWJzY3JpcHRpb24vdC8wMjZfc3RhdHMucGwKQEAgLTE2LDYgKzE2LDggQEAgJG5vZGVfcHVi bGlzaGVyLT5zdGFydDsKICMgQ3JlYXRlIHN1YnNjcmliZXIgbm9kZS4KIG15ICRub2RlX3N1YnNj cmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKICRu b2RlX3N1YnNjcmliZXItPmluaXQ7Ciskbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9z dGdyZXNxbC5jb25mJywKKwkibWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2VycyA9IDEwIik7 CiAkbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKIAogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMzZfc2VxdWVuY2VzLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDM2 X3NlcXVlbmNlcy5wbAppbmRleCA0NzE3ODBhMzU4NS4uZmFjMTZkNmU5NjQgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzNl9zZXF1ZW5jZXMucGwKKysrIGIvc3JjL3Rlc3Qv c3Vic2NyaXB0aW9uL3QvMDM2X3NlcXVlbmNlcy5wbApAQCAtNzUsOCArNzUsNyBAQCBpcygkcmVz dWx0LCAnMTAwfHQnLAogCiAjIyMjIyMjIyMjCiAjIyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJF RlJFU0ggUFVCTElDQVRJT04gc2hvdWxkIGNhdXNlIHN5bmMgb2YgbmV3Ci0jIHNlcXVlbmNlcyBv ZiB0aGUgcHVibGlzaGVyLCBidXQgY2hhbmdlcyB0byBleGlzdGluZyBzZXF1ZW5jZXMgc2hvdWxk Ci0jIG5vdCBiZSBzeW5jZWQuCisjIHNlcXVlbmNlcyBvZiB0aGUgcHVibGlzaGVyLgogIyMjIyMj IyMjIwogCiAjIENyZWF0ZSBhIG5ldyBzZXF1ZW5jZSAncmVncmVzc19zMicsIGFuZCB1cGRhdGUg ZXhpc3Rpbmcgc2VxdWVuY2UgJ3JlZ3Jlc3NfczEnCkBAIC05NywxOSArOTYsNiBAQCAkcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAogJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9x dWVyeV91bnRpbCgncG9zdGdyZXMnLCAkc3luY2VkX3F1ZXJ5KQogICBvciBkaWUgIlRpbWVkIG91 dCB3aGlsZSB3YWl0aW5nIGZvciBzdWJzY3JpYmVyIHRvIHN5bmNocm9uaXplIGRhdGEiOwogCi0k cmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0J U0VMRUNUIGxhc3RfdmFsdWUsIGlzX2NhbGxlZCBGUk9NIHJlZ3Jlc3NfczE7Ci0pKTsKLWlzKCRy ZXN1bHQsICcyMDB8dCcsICdDaGVjayBzZXF1ZW5jZSB2YWx1ZSBpbiB0aGUgcHVibGlzaGVyJyk7 Ci0KLSMgQ2hlY2sgLSBleGlzdGluZyBzZXF1ZW5jZSAoJ3JlZ3Jlc3NfczEnKSBpcyBub3Qgc3lu Y2VkCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3Jlcycs IHFxKAotCVNFTEVDVCBsYXN0X3ZhbHVlLCBpc19jYWxsZWQgRlJPTSByZWdyZXNzX3MxOwotKSk7 Ci1pcygkcmVzdWx0LCAnMTAwfHQnLCAnUkVGUkVTSCBQVUJMSUNBVElPTiB3aWxsIG5vdCBzeW5j IGV4aXN0aW5nIHNlcXVlbmNlJyk7Ci0KICMgQ2hlY2sgLSBuZXdseSBwdWJsaXNoZWQgc2VxdWVu Y2UgKCdyZWdyZXNzX3MyJykgaXMgc3luY2VkCiAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKAogCSdwb3N0Z3JlcycsIHFxKApAQCAtMTE5LDEyICsxMDUsOSBAQCBpcygkcmVz dWx0LCAnMTAwfHQnLAogCSdSRUZSRVNIIFBVQkxJQ0FUSU9OIHdpbGwgc3luYyBuZXdseSBwdWJs aXNoZWQgc2VxdWVuY2UnKTsKIAogIyMjIyMjIyMjIwotIyBUZXN0OiBSRUZSRVNIIFNFUVVFTkNF UyBhbmQgUkVGUkVTSCBQVUJMSUNBVElPTiAoY29weV9kYXRhID0gZmFsc2UpCi0jCi0jIDEuIEFM VEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBTRVFVRU5DRVMgc2hvdWxkIHJlLXN5bmNocm9u aXplIGFsbAotIyAgICBleGlzdGluZyBzZXF1ZW5jZXMsIGJ1dCBub3Qgc3luY2hyb25pemUgbmV3 bHkgYWRkZWQgb25lcy4KLSMgMi4gQUxURVIgU1VCU0NSSVBUSU9OIC4uLiBSRUZSRVNIIFBVQkxJ Q0FUSU9OIHdpdGggKGNvcHlfZGF0YSA9IGZhbHNlKSBzaG91bGQKLSMgICAgYWxzbyBub3QgdXBk YXRlIHNlcXVlbmNlIHZhbHVlcyBmb3IgbmV3bHkgYWRkZWQgc2VxdWVuY2VzLgorIyBUZXN0Ogor IyAxLiBBdXRvbWF0aWMgdXBkYXRlIG9mIGV4aXN0aW5nIHNlcXVlbmNlIHZhbHVlcworIyAyLiBO ZXdseSBhZGRlZCBzZXF1ZW5jZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQuCiAjIyMj IyMjIyMjCiAKICMgQ3JlYXRlIGEgbmV3IHNlcXVlbmNlICdyZWdyZXNzX3MzJywgYW5kIHVwZGF0 ZSB0aGUgZXhpc3Rpbmcgc2VxdWVuY2UKQEAgLTEzOCw1MSArMTIxLDI1IEBAICRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKAogCUlOU0VSVCBJTlRPIHJlZ3Jlc3Nfc2VxX3Rlc3QgU0VMRUNUIG5l eHR2YWwoJ3JlZ3Jlc3NfczInKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCk7CiApKTsKIAot IyAxLiBEbyBBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggU0VRVUVOQ0VTCi0kcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHFxKAotCUFMVEVS IFNVQlNDUklQVElPTiByZWdyZXNzX3NlcV9zdWIgUkVGUkVTSCBTRVFVRU5DRVM7Ci0pKTsKLSRu b2RlX3N1YnNjcmliZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgJHN5bmNlZF9xdWVy eSkKLSAgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyBmb3Igc3Vic2NyaWJlciB0byBz eW5jaHJvbml6ZSBkYXRhIjsKLQogIyBDaGVjayAtIGV4aXN0aW5nIHNlcXVlbmNlcyAoJ3JlZ3Jl c3NfczEnIGFuZCAncmVncmVzc19zMicpIGFyZSBzeW5jZWQKLSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXEoCi0JU0VMRUNUIGxhc3RfdmFsdWUs IGlzX2NhbGxlZCBGUk9NIHJlZ3Jlc3NfczE7Ci0pKTsKLWlzKCRyZXN1bHQsICcyMDB8dCcsICdS RUZSRVNIIFNFUVVFTkNFUyB3aWxsIHN5bmMgZXhpc3Rpbmcgc2VxdWVuY2VzJyk7Ci0kcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHFxKAotCVNFTEVD VCBsYXN0X3ZhbHVlLCBpc19jYWxsZWQgRlJPTSByZWdyZXNzX3MyOwotKSk7Ci1pcygkcmVzdWx0 LCAnMjAwfHQnLCAnUkVGUkVTSCBTRVFVRU5DRVMgd2lsbCBzeW5jIGV4aXN0aW5nIHNlcXVlbmNl cycpOwogCi0jIENoZWNrIC0gbmV3bHkgcHVibGlzaGVkIHNlcXVlbmNlICgncmVncmVzc19zMycp IGlzIG5vdCBzeW5jZWQKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoCi0J J3Bvc3RncmVzJywgcXEoCi0JU0VMRUNUIGxhc3RfdmFsdWUsIGlzX2NhbGxlZCBGUk9NIHJlZ3Jl c3NfczM7Ci0pKTsKLWlzKCRyZXN1bHQsICcxfGYnLAotCSdSRUZSRVNIIFNFUVVFTkNFUyB3aWxs IG5vdCBzeW5jIG5ld2x5IHB1Ymxpc2hlZCBzZXF1ZW5jZScpOworIyBQb2xsIHVudGlsIHJlZ3Jl c3NfczEgcmVmbGVjdHMgdGhlIHVwZGF0ZWQgc2VxdWVuY2UgdmFsdWUKKyRub2RlX3N1YnNjcmli ZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKyAgICBxcShTRUxFQ1QgbGFzdF92YWx1 ZSA9IDIwMCBBTkQgaXNfY2FsbGVkID0gJ3QnIEZST00gcmVncmVzc19zMTspKQorICBvciBkaWUg IlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciByZWdyZXNzX3MxIHNlcXVlbmNlIHRvIHN5bmMi OwogCi0jIDIuIERvIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTiB3 aXRoIGNvcHlfZGF0YSBhcyBmYWxzZQotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgKLQkncG9zdGdyZXMnLCBxcSgKLQlBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc19zZXFf c3ViIFJFRlJFU0ggUFVCTElDQVRJT04gV0lUSCAoY29weV9kYXRhID0gZmFsc2UpOwotKSk7Ci0k bm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICRzeW5jZWRfcXVl cnkpCi0gIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN1YnNjcmliZXIgdG8g c3luY2hyb25pemUgZGF0YSI7CisjIFBvbGwgdW50aWwgcmVncmVzc19zMiByZWZsZWN0cyB0aGUg dXBkYXRlZCBzZXF1ZW5jZSB2YWx1ZQorJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRp bCgncG9zdGdyZXMnLAorICAgIHFxKFNFTEVDVCBsYXN0X3ZhbHVlID0gMjAwIEFORCBpc19jYWxs ZWQgPSAndCcgRlJPTSByZWdyZXNzX3MyOykpCisgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdh aXRpbmcgZm9yIHJlZ3Jlc3NfczIgc2VxdWVuY2UgdG8gc3luYyI7CiAKLSMgQ2hlY2sgLSBuZXds eSBwdWJsaXNoZWQgc2VxdWVuY2UgKCdyZWdyZXNzX3MzJykgaXMgbm90IHN5bmNlZCB3aXRoIGNv cHlfZGF0YQotIyBhcyBmYWxzZS4KKyMgQ2hlY2sgLSBuZXdseSBwdWJsaXNoZWQgc2VxdWVuY2Ug KCdyZWdyZXNzX3MzJykgaXMgbm90IHN5bmNlZAogJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgKIAkncG9zdGdyZXMnLCBxcSgKIAlTRUxFQ1QgbGFzdF92YWx1ZSwgaXNfY2Fs bGVkIEZST00gcmVncmVzc19zMzsKICkpOwogaXMoJHJlc3VsdCwgJzF8ZicsCi0JJ1JFRlJFU0gg UFVCTElDQVRJT04gd2lsbCBub3Qgc3luYyBuZXdseSBwdWJsaXNoZWQgc2VxdWVuY2Ugd2l0aCBj b3B5X2RhdGEgYXMgZmFsc2UnCi0pOworCSdOZXdseSBwdWJsaXNoZWQgc2VxdWVuY2UgYXJlIG5v dCBzeW5jZWQgYXV0b21hdGljYWxseScpOwogCiAjIyMjIyMjIyMjCiAjIEFMVEVSIFNVQlNDUklQ VElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTiBzaG91bGQgcmVwb3J0IGFuIGVycm9yIHdoZW46 Ci0tIAoyLjQ3LjMKCg== --000000000000b439de064a0c97ba--