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 1vd0XC-00CwHF-2P for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Jan 2026 06:27:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vd0XB-006cPd-29 for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Jan 2026 06:27:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vd0Wo-006Zd8-2O for pgsql-hackers@lists.postgresql.org; Tue, 06 Jan 2026 06:26:52 +0000 Received: from mail-qt1-x833.google.com ([2607:f8b0:4864:20::833]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vd0Wn-004Sk2-0v for pgsql-hackers@lists.postgresql.org; Tue, 06 Jan 2026 06:26:50 +0000 Received: by mail-qt1-x833.google.com with SMTP id d75a77b69052e-4ed9c19248bso5512951cf.1 for ; Mon, 05 Jan 2026 22:26:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767680808; x=1768285608; 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=3ozj3wlWcSE46cLZdHFy4bdLCwp8dATalKvo0stvQIE=; b=HtUcUOPJK3e2SyxHsavZKgvfShbmau7jsphVUEh3+/oB7dD+LuN8ajNY+Lxh10vbed rm74+LOz3fAiAkhOr6Ov70qzTxJ7P0wp14A2AtqdtQumQlwgaPRLg7l72Bg8CUE3qaFI hpJuD8Z/PTH97M7Tg2GxUwRKC8/ghiVlsijUj9heVL4W//zpeAw59lrxaxW5P0b69IlS dTExJK/TT2EMLCQEbMLL4fHt0gWG/hDgaagq9tBUIBRuU48VT/sZBgJAuuKg8VQ6+9uy wFZSZFaY3xvzJAZ+eIsH92HZ5BwBYKDwn64EybSWwGzC9+ey8vzEZhTwY0PWEY/UtTYu sIMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767680808; x=1768285608; 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=3ozj3wlWcSE46cLZdHFy4bdLCwp8dATalKvo0stvQIE=; b=QpBclDaMt1t7kSsRO29s20jT3WzXZ/S/9ywau04ck4WidyolwWy3++Bfj1mcAsldzS AwCUPeetgfW7Vq/VOSG0hfpQ761G/5gCuOPipauRDNG+4Ht3rXt6sGYb0//6VwXPRwXC sD8itktQam6iHkHpNj6sLU/SQJ9IsHrS55pc11E6CTOT6K87CZVNZxAJeQH0XmHM6Kpd lPKjXNJ4T9PeHLw+miYlt5mYPhOGN4VR4ViPSpCcCRu5Jd0mYnI4endENFZL3Laerh2W ZmJxlkDbafvN7iLkA2NfLmD58mQquCdVY6a/DBmiLV73c4r9n4141fyZE6laFO5hL102 iSiA== X-Forwarded-Encrypted: i=1; AJvYcCV7ZSfZRmuZYtM8M/0ZOvHOTwIqLr7iBTC9zGCpcsgpFaufi8ts1m1JSsJjrvG5jB8luE2oV6uVKGk4Xjao@lists.postgresql.org X-Gm-Message-State: AOJu0YwF+BeceKqfs8M2XRW9ONbOZyEIZWDwErValxM4iE7VeWTBknE2 wKlFtp/E7ZVTh3Ep52F4BljhCxy3Wmdb0z/S8Ih7+hkbK0pBQakubkOemm1D//vVSN8XVctteYt j+eNyQI7PzjdyczMoQ1JKapqHFcd4/v4= X-Gm-Gg: AY/fxX6IbFbmIjlyoacam2+ssvWNHdarQwD9p9mgst5hTphoM/WVfvE5yXqOMGGBsxD p7jHfIchIZpovOyAvQNeC//9lQU9p6O3DimFm68eXcOyiiIyS7vDxEUjBaaN+09uL9Ct2uZJG41 cBjzuIR/hYNJ3rYR+Oposvh90b2Fcapvu7Ow4ZWC5XzLTJ7W8818lah0NoK+lFywHb5F5p8P0vI kIrZf8fZ2JLg5urwA3pBWqjdPQnGANjALNVJHPasllhnJP4ycBZES46VxBkjLFtH86FXdgG X-Google-Smtp-Source: AGHT+IHk6CB1LMi/cRK8JmPNiAoJwQgI5AOYKU6S3Tlng8RHlbuM9DZiRg8akpP5gsa+7XOv6g7cFZ+o4YJwu2Pk2Y8= X-Received: by 2002:a05:622a:1b8f:b0:4f4:d295:1f53 with SMTP id d75a77b69052e-4ffa78402admr27898741cf.84.1767680808009; Mon, 05 Jan 2026 22:26:48 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Tue, 6 Jan 2026 11:56:36 +0530 X-Gm-Features: AQt7F2pSs_mMGMKHTQb4mLMyMteGISdVzeLGKoOHyGFNLYOk0gNUo1reEev-coc Message-ID: Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: tushar , Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000a3ced70647b242e0" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a3ced70647b242e0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Jian for the review and delta patch. I merged delta patch. On Fri, 2 Jan 2026 at 13:35, jian he wrote: > > On Tue, Dec 9, 2025 at 2:49=E2=80=AFAM Mahendra Singh Thalor wrote: > > > > > > Here, I am attaching an updated patch for the review and testing. This > > can be applied on commit d0d0ba6cf66c4043501f6f7. > > > > hi. > > more comments about > v12_09122025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch > > + In all other modes, pg_dumpall > first creates two files: > + toc.dat/toc.dmp/toc.tar and > map.dat, in the directory > + specified by . > + The first file contains global data, such as roles and > tablespaces. The second > + contains a mapping between database oids and names. These > files are used by > + pg_restore. Data for individual > databases is placed in > + databases subdirectory, named using the > database's oid. > > I tried all these 3 formats, there is no "toc.dmp/toc.tar". > Am I missing something? > Fixed. Now we have a glo.dat file in custom format. > - > + If format is given, then dump will be based on format, default plain. > > $ pg_dumpall > db.out > + > + > + > +$ pg_dumpall --format=3Dd/a/c/p -f db.out > > > The text in the section should work correctly when pasted direct= ly into > the terminal. > but ``pg_dumpall --format=3Dd/a/c/p -f db.out`` > will error out: > ``pg_dumpall: error: unrecognized output format "d/a/c/p"; please > specify "c", "d", "p", or "t"`` > Fixed. Added 4 examples. > PGresult * > -executeQuery(PGconn *conn, const char *query) > +executeQuery(PGconn *conn, const char *query, bool is_archive) > { > PGresult *res; > > @@ -287,7 +287,8 @@ executeQuery(PGconn *conn, const char *query) > { > pg_log_error("query failed: %s", PQerrorMessage(conn)); > pg_log_error_detail("Query was: %s", query); > - PQfinish(conn); > + if (!is_archive) > + PQfinish(conn); > exit_nicely(1); > } > It would be nice to add some comments explaining why we don't call > PQfinish for archive format. Fixed. > > +/* > + * createOneArchiveEntry > + * > + * This creates one archive entry based on format. > + */ > +static void > +createOneArchiveEntry(const char *query, const char *tag) > +{ > + CatalogId nilCatalogId =3D {0, 0}; > + Assert(fout !=3D NULL); > + > + ArchiveEntry(fout, > + nilCatalogId, /* catalog ID */ > + createDumpId(), /* dump ID */ > + ARCHIVE_OPTS(.tag =3D tag, > + .description =3D tag, > + .section =3D SECTION_PRE_DATA, > + .createStmt =3D query)); > +} > this is only used when archDumpFormat is not archNull. > comments can change to > "This creates one archive entry for non-text archive" > Fixed. > > +static int > +restore_one_database(const char *inputFileSpec, RestoreOptions *opts, > + int numWorkers, bool append_data, int num, bool globals_only) > I guess, "num" means number of databases, but the name is > "restore_one_database". > seems confusing. Similarly, I am confused by > restore_global_objects parameter "num". > Fixed. I removed num. > + pg_log_error("option %s must be specified when restoring an archive > created by pg_dumpall", > + "-C/--create"); > + pg_log_error_hint("Try \"%s --help\" for more information.", progname); > + pg_log_error_hint("Individual databases can be restored using their > specific archives."); > Here we report that --create must be specified. > The second pg_log_error_hint() message about restoring individual databas= es > seems unrelated to this requirement, and seems confusing in this context. We are giving some extra info if the user wants to restore one database from the dump of pg_dumpall. > > get_dbnames_list_to_restore > + if (!conn && db_exclude_patterns.head !=3D NULL) > + pg_log_info("considering PATTERN as NAME for --exclude-database > option as no database connection while doing pg_restore"); > is unreachable. because conn is always not NULL, > Since restore_all_databases "template1", template database "template1" is > undroppable, see ``dbcommands.c:1734``. > yes, this is unreachable but we are keeping this. > get_dbname_oid_list_from_mfile does not handle database names that contai= n > newline characters correctly. > For example: > CREATE DATABASE "test > \r"; > > I am unable to dump and restore a database with such a name. We have another thread for this. We have patches also. Last year, we planned to block these databases at creation time. > > It's probably harmless, we connect to the databases further down to do ac= tual work. But it's also not nice. The toc.glo seems to have a bunch of ext= raneous entries of type COMMENT and CONNECT. Why is that? As far as poible = this should have output pretty much identical to a plain pg_dumpall. > > > cheers > > > andrew If we don't dump those comments in non-text format, then the output of "pg_restore -f filename dump_non_text" will not be the same as the plain dump of pg_dumpall. Here, I am attaching an updated patch for the review and testing. Note: some of the review comments are still not fixed. I am working on those and will post an updated patch. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000a3ced70647b242e0 Content-Type: application/octet-stream; name="v13_06012026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v13_06012026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk27gxtz0 RnJvbSBhMjQ2ODA1OTJhZGQwMTQ2M2NmOGQ2NzJkNmFmNTA1MjBlNmM3NWI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVHVlLCA2IEphbiAyMDI2IDExOjM2OjMyICswNTMwClN1YmplY3Q6IFtQQVRD SF0gTm9uIHRleHQgbW9kZXMgZm9yIHBnX2R1bXBhbGwsIGNvcnJlc3BvbmRpbmdseSBjaGFuZ2Ug CiBwZ19yZXN0b3JlCgogICAgcGdfZHVtcGFsbCBhY3F1aXJlcyBhIG5ldyAtRi8tLWZvcm1hdCBv cHRpb24sIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMKICAgIHBnX2R1bXAuIFRoZSBkZWZhdWx0 IGlzIHAsIG1lYW5pbmcgcGxhaW4gdGV4dC4gRm9yIGFueSBvdGhlciB2YWx1ZSwgYQogICAgZGly ZWN0b3J5IGlzIGNyZWF0ZWQgY29udGFpbmluZyB0d28gZmlsZXMsIHRvYy5nbG8gYW5kIG1hcC5k YXQuIFRoZQogICAgZmlyc3QgY29udGFpbnMgY29tbWFuZHMgcmVzdG9yaW5nIHRoZSBnbG9iYWwg ZGF0YSBpbiBjdXN0b20gZm9ybWF0LCBhbmQgdGhlIHNlY29uZAogICAgY29udGFpbnMgYSBtYXAg ZnJvbSBvaWRzIHRvIGRhdGFiYXNlIG5hbWVzIGluIHRleHQgZm9ybWF0LiBJdCB3aWxsIGFsc28g Y29udGFpbiBhCiAgICBzdWJkaXJlY3RvcnkgY2FsbGVkIGRhdGFiYXNlcywgaW5zaWRlIHdoaWNo IGl0IHdpbGwgY3JlYXRlIGFyY2hpdmVzIGluCiAgICB0aGUgc3BlY2lmaWVkIGZvcm1hdCwgbmFt ZWQgdXNpbmcgdGhlIGRhdGFiYXNlIG9pZHMuCgogICAgSW4gdGhlc2UgY2FzZXNzIHRoZSAtZiBh cmd1bWVudCBpcyByZXF1aXJlZC4KCiAgICBJZiBwZ19yZXN0b3JlIGVuY291bnRlcnMgYSBkaXJl Y3RvcnkgY29udGFpbmluZyBtYXAuZGF0IGFuZCB0b2MuZ2xvLAogICAgaXQgcmVzdG9yZXMgdGhl IGdsb2JhbCBzZXR0aW5ncyBmcm9tIHRvYy5nbG8gaWYgZXhpc3QsIGFuZCB0aGVuCiAgICByZXN0 b3JlcyBlYWNoIGRhdGFiYXNlLgoKICAgIHBnX3Jlc3RvcmUgYWNxdWlyZXMgdHdvIG5ldyBvcHRp b25zOiAtZy8tLWdsb2JhbHMtb25seSB3aGljaCBzdXBwcmVzc2VzCiAgICByZXN0b3JhdGlvbiBv ZiBhbnkgZGF0YWJhc2VzLCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIHdoaWNoIGluaGliaXRzCiAg ICByZXN0b3JhdGlvbiBvZiBwYXJ0aWN1YWxyIGRhdGFiYXNlKHMpIGluIHRoZSBzYW1lIHdheSB0 aGUgc2FtZSBvcHRpb24KICAgIHdvcmtzIGluIHBnX2R1bXBhbGwuCgp2MTMKLS0tCiBkb2Mvc3Jj L3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgfCAxMDcgKysrKy0KIGRvYy9zcmMvc2dtbC9y ZWYvcGdfcmVzdG9yZS5zZ21sICAgICB8ICA2NiArKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0 ZGIuYyAgICAgICAgICB8ICAxMyArLQogc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oICAgICAg ICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDEg Kwogc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMgICAgICAgICAgIHwgIDEwICsKIHNyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXAuaCAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jIHwgIDM1ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmggfCAgIDEgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAgIHwg ICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgICAgICB8IDYzNSArKysrKysrKysrKysrKysr KysrKystLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDYxNyAr KysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBs ICAgICAgIHwgIDI3ICsrCiBzcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCAgfCAz OTYgKysrKysrKysrKysrKysrKysKIDE1IGZpbGVzIGNoYW5nZWQsIDE3NDMgaW5zZXJ0aW9ucygr KSwgMTczIGRlbGV0aW9ucygtKQogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMvYmlu L3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvYmluL3BnX2R1 bXAvdC8wMDdfcGdfZHVtcGFsbC5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcGFsbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggODgz NGI3ZWMxNDEuLjUxZWM0ZjczMGUwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1 bXBhbGwuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTYs NyArMTYsMTAgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAg PHJlZm5hbWU+cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxw cm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBpbnRv IGEgc2NyaXB0IGZpbGU8L3JlZnB1cnBvc2U+CisKKyAgPHJlZnB1cnBvc2U+CisgICBleHBvcnQg YSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIg YXMgYW4gU1FMIHNjcmlwdCBvciB0byBvdGhlciBmb3JtYXRzCisgIDwvcmVmcHVycG9zZT4KICA8 L3JlZm5hbWVkaXY+CiAKICA8cmVmc3lub3BzaXNkaXY+CkBAIC0zMyw3ICszNiw3IEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cGFyYT4KICAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxs PC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciB3cml0aW5nIG91dAogICAgKDxxdW90ZT5k dW1waW5nPC9xdW90ZT4pIGFsbCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ IGRhdGFiYXNlcwotICAgb2YgYSBjbHVzdGVyIGludG8gb25lIHNjcmlwdCBmaWxlLiAgVGhlIHNj cmlwdCBmaWxlIGNvbnRhaW5zCisgICBvZiBhIGNsdXN0ZXIgaW50byBhbiBTUUwgc2NyaXB0IGZp bGUgb3IgYW4gYXJjaGl2ZS4gIFRoZSBvdXRwdXQgY29udGFpbnMKICAgIDxhY3JvbnltPlNRTDwv YWNyb255bT4gY29tbWFuZHMgdGhhdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCB0byA8eHJlZgogICAg bGlua2VuZD0iYXBwLXBzcWwiLz4gdG8gcmVzdG9yZSB0aGUgZGF0YWJhc2VzLiAgSXQgZG9lcyB0 aGlzIGJ5CiAgICBjYWxsaW5nIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGVhY2gg ZGF0YWJhc2UgaW4gdGhlIGNsdXN0ZXIuCkBAIC01MiwxMSArNTUsMTYgQEAgUG9zdGdyZVNRTCBk b2N1bWVudGF0aW9uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSBTUUwgc2NyaXB0IHdp bGwgYmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAgVXNlIHRoZQorICAgUGxhaW4g dGV4dCBTUUwgc2NyaXB0cyB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4g IFVzZSB0aGUKICAgIDxvcHRpb24+LWY8L29wdGlvbj4vPG9wdGlvbj4tLWZpbGU8L29wdGlvbj4g b3B0aW9uIG9yIHNoZWxsIG9wZXJhdG9ycyB0bwogICAgcmVkaXJlY3QgaXQgaW50byBhIGZpbGUu CiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIEFyY2hpdmVzIGluIG90aGVyIGZvcm1hdHMgd2ls bCBiZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgbmFtZWQgdXNpbmcgdGhlCisgICA8b3B0aW9uPi1m PC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+LCB3aGljaCBpcyByZXF1aXJlZCBpbiB0 aGlzIGNhc2UuCisgIDwvcGFyYT4KKwogICA8cGFyYT4KICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBh bGw8L2FwcGxpY2F0aW9uPiBuZWVkcyB0byBjb25uZWN0IHNldmVyYWwKICAgdGltZXMgdG8gdGhl IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gc2VydmVyIChvbmNlIHBlcgpA QCAtMTMxLDEwICsxMzksODUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgPHBh cmE+CiAgICAgICAgIFNlbmQgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4gIElmIHRoaXMg aXMgb21pdHRlZCwgdGhlCiAgICAgICAgIHN0YW5kYXJkIG91dHB1dCBpcyB1c2VkLgorICAgICAg ICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4gb25seSBiZSBvbWl0dGVkIHdoZW4gPG9wdGlvbj4tLWZv cm1hdDwvb3B0aW9uPiBpcyBwbGFpbgogICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+ CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVy bT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxh Y2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5 IHRoZSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIEluIHBsYWluIGZvcm1hdCwgYWxsIHRoZSBkdW1w IGRhdGEgaXMKKyAgICAgICAgc2VudCBpbiBhIHNpbmdsZSB0ZXh0IHN0cmVhbS4gVGhpcyBpcyB0 aGUgZGVmYXVsdC4KKworICAgICAgICBJbiBhbGwgb3RoZXIgbW9kZXMsIDxhcHBsaWNhdGlvbj5w Z19kdW1wYWxsPC9hcHBsaWNhdGlvbj4gZmlyc3QgY3JlYXRlcyB0d28gZmlsZXM6CisgICAgICAg IDxmaWxlbmFtZT50b2MuZ2xvPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5tYXAuZGF0PC9maWxl bmFtZT4sIGluIHRoZSBkaXJlY3RvcnkKKyAgICAgICAgc3BlY2lmaWVkIGJ5IDxvcHRpb24+LS1m aWxlPC9vcHRpb24+LgorICAgICAgICBUaGUgZmlyc3QgZmlsZSBjb250YWlucyBnbG9iYWwgZGF0 YSwgc3VjaCBhcyByb2xlcyBhbmQgdGFibGVzcGFjZXMgaW4gY3VzdG9tIGZvcm1hdC4gVGhlIHNl Y29uZAorICAgICAgICBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiBkYXRhYmFzZSBvaWRzIGFu ZCBuYW1lcy4gVGhlc2UgZmlsZXMgYXJlIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBn X3Jlc3RvcmU8L2FwcGxpY2F0aW9uPi4gRGF0YSBmb3IgaW5kaXZpZHVhbCBkYXRhYmFzZXMgaXMg cGxhY2VkIGluCisgICAgICAgIDxmaWxlbmFtZT5kYXRhYmFzZXM8L2ZpbGVuYW1lPiBzdWJkaXJl Y3RvcnksIG5hbWVkIHVzaW5nIHRoZSBkYXRhYmFzZSdzIDx0eXBlPm9pZDwvdHlwZT4uCisKKyAg ICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRl cm0+PGxpdGVyYWw+ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5k aXJlY3Rvcnk8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAg IDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgZGlyZWN0b3J5LWZvcm1hdCBhcmNoaXZlcyBmb3Ig ZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVz dG9yZS4gVGhlIGRpcmVjdG9yeQorICAgICAgICAgICB3aWxsIGhhdmUgZGF0YWJhc2UgPHR5cGU+ b2lkPC90eXBlPiBhcyBpdHMgbmFtZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8 dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNj cmlwdCBmaWxlICh0aGUgZGVmYXVsdCkuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBh cmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQg aW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxsIGJlIG5hbWVkIDxm aWxlbmFtZT5kYm9pZC5kbXA8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5kYm9pZDwvdHlwZT4gaXMg dGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhlIGRhdGFiYXNlLgorICAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5 PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dDwv bGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90 ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBP dXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAg IHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBhcmNoaXZlCisgICAgICAg ICAgIHdpbGwgYmUgbmFtZWQgPGZpbGVuYW1lPmRib2lkLnRhcjwvZmlsZW5hbWU+IHdoZXJlIDx0 eXBlPmRib2lkPC90eXBlPiBpcyB0aGUKKyAgICAgICAgICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0 aGUgZGF0YWJhc2UuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAg ICBOb3RlOiBzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZGV0YWlscworICAg ICAgIG9mIGhvdyB0aGUgdmFyaW91cyBub24gcGxhaW4gdGV4dCBhcmNoaXZlcyB3b3JrLgorCisg ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5Pgor CiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90 ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4K QEAgLTkzNyw5ICsxMDIwLDE2IEBAIGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPlBBVFRFUk48L3JlcGxhY2VhYmxlPgogICA8dGl0bGU+RXhhbXBsZXM8L3Rp dGxlPgogICA8cGFyYT4KICAgIFRvIGR1bXAgYWxsIGRhdGFiYXNlczoKLQorICAgSWYgZm9ybWF0 IGlzIGdpdmVuLCB0aGVuIGR1bXAgd2lsbCBiZSBiYXNlZCBvbiBmb3JtYXQsIGRlZmF1bHQgcGxh aW4uCiA8c2NyZWVuPgogPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAm Z3Q7IGRiLm91dDwvdXNlcmlucHV0PgorPC9zY3JlZW4+CisKKzxzY3JlZW4+Cis8cHJvbXB0PiQ8 L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtZiBkYi5v dXQ8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwg LS1mb3JtYXQ9Y3VzdG9tIC1mIGRiLm91dDwvdXNlcmlucHV0PgorPHByb21wdD4kPC9wcm9tcHQ+ IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAtLWZvcm1hdD10YXIgLWYgZGIub3V0PC91c2VyaW5wdXQ+ Cis8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxsIC0tZm9ybWF0PXBsYWlu IC1mIGRiLm91dDwvdXNlcmlucHV0PgogPC9zY3JlZW4+CiAgIDwvcGFyYT4KIApAQCAtOTU2LDYg KzEwNDYsMTUgQEAgZXhjbHVkZSBkYXRhYmFzZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+UEFUVEVSTjwvcmVwbGFjZWFibGU+CiAgICB0aGUgc2NyaXB0IHdpbGwgYXR0ZW1wdCB0byBk cm9wIG90aGVyIGRhdGFiYXNlcyBpbW1lZGlhdGVseSwgYW5kIHRoYXQKICAgIHdpbGwgZmFpbCBm b3IgdGhlIGRhdGFiYXNlIHlvdSBhcmUgY29ubmVjdGVkIHRvLgogICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICAgSWYgZHVtcCB3YXMgdGFrZW4gaW4gbm9uLXRleHQgZm9ybWF0LCB0aGVuIHVzZSBw Z19yZXN0b3JlIHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4KKzxzY3JlZW4+Cis8cHJvbXB0PiQ8 L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19yZXN0b3JlIGRiLm91dCAtZCBwb3N0Z3JlcyAtQzwvdXNl cmlucHV0PgorPC9zY3JlZW4+CisgICBUaGlzIHdpbGwgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNl cy4gSWYgdXNlciBkb24ndCB3YW50IHRvIHJlc3RvcmUgc29tZSBkYXRhYmFzZXMsIHRoZW4gdXNl CisgICAtLWV4Y2x1ZGUtcGF0dGVybiB0byBza2lwIHRob3NlLgorPC9wYXJhPgogIDwvcmVmc2Vj dDE+CiAKICA8cmVmc2VjdDE+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3Rv cmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCmluZGV4IGE0NjhhMzgz NjFhLi43NDk3YjUyN2FlNiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3Jl LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKQEAgLTE4LDggKzE4 LDkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgIDxyZWZuYW1lPnBnX3Jlc3RvcmU8L3Jl Zm5hbWU+CiAKICAgPHJlZnB1cnBvc2U+Ci0gICByZXN0b3JlIGEgPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuCi0gICBhcmNoaXZlIGZpbGUgY3Jl YXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+CisgICByZXN0b3JlIDxw cm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2VzIGZyb20gYXJjaGl2 ZXMKKyAgIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcgor ICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPgogICA8L3JlZnB1cnBvc2U+ CiAgPC9yZWZuYW1lZGl2PgogCkBAIC0zOCwxMyArMzksMTQgQEAgUG9zdGdyZVNRTCBkb2N1bWVu dGF0aW9uCiAKICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRp b24+IGlzIGEgdXRpbGl0eSBmb3IgcmVzdG9yaW5nIGEKLSAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3Jl U1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlCi0gICBjcmVhdGVkIGJ5 IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4 dAorICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBvciBj bHVzdGVyIGZyb20gYW4gYXJjaGl2ZQorICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJhcHAt cGdkdW1wIi8+IG9yCisgICA8eHJlZiBsaW5rZW5kPSJhcHAtcGctZHVtcGFsbCIvPiBpbiBvbmUg b2YgdGhlIG5vbi1wbGFpbi10ZXh0CiAgICBmb3JtYXRzLiAgSXQgd2lsbCBpc3N1ZSB0aGUgY29t bWFuZHMgbmVjZXNzYXJ5IHRvIHJlY29uc3RydWN0IHRoZQotICAgZGF0YWJhc2UgdG8gdGhlIHN0 YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMgc2F2ZWQuICBUaGUKLSAgIGFyY2hpdmUg ZmlsZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IHRv CisgICBkYXRhYmFzZSBvciBjbHVzdGVyIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRp bWUgaXQgd2FzIHNhdmVkLiBUaGUKKyAgIGFyY2hpdmVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9u PnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0bwogICAgYmUgc2VsZWN0aXZlIGFib3V0IHdoYXQg aXMgcmVzdG9yZWQsIG9yIGV2ZW4gdG8gcmVvcmRlciB0aGUgaXRlbXMKLSAgIHByaW9yIHRvIGJl aW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2ZSBmaWxlcyBhcmUgZGVzaWduZWQgdG8gYmUKKyAgIHBy aW9yIHRvIGJlaW5nIHJlc3RvcmVkLiBUaGUgYXJjaGl2ZSBmb3JtYXRzIGFyZSBkZXNpZ25lZCB0 byBiZQogICAgcG9ydGFibGUgYWNyb3NzIGFyY2hpdGVjdHVyZXMuCiAgIDwvcGFyYT4KIApAQCAt NTIsMTAgKzU0LDE3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgPGFwcGxpY2F0aW9u PnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBjYW4gb3BlcmF0ZSBpbiB0d28gbW9kZXMuCiAgICBJ ZiBhIGRhdGFiYXNlIG5hbWUgaXMgc3BlY2lmaWVkLCA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwv YXBwbGljYXRpb24+CiAgICBjb25uZWN0cyB0byB0aGF0IGRhdGFiYXNlIGFuZCByZXN0b3JlcyBh cmNoaXZlIGNvbnRlbnRzIGRpcmVjdGx5IGludG8KLSAgIHRoZSBkYXRhYmFzZS4gIE90aGVyd2lz ZSwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUgU1FMCi0gICBjb21tYW5kcyBuZWNlc3NhcnkgdG8g cmVidWlsZCB0aGUgZGF0YWJhc2UgaXMgY3JlYXRlZCBhbmQgd3JpdHRlbgorICAgdGhlIGRhdGFi YXNlLgorICAgV2hlbiByZXN0b3JpbmcgZnJvbSBhIGR1bXAgbWFkZSBieSA8YXBwbGljYXRpb24+ cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LAorICAgZWFjaCBkYXRhYmFzZSB3aWxsIGJlIGNyZWF0 ZWQgYW5kIHRoZW4gdGhlIHJlc3RvcmF0aW9uIHdpbGwgYmUgcnVuIGluIHRoYXQKKyAgIGRhdGFi YXNlLgorCisgICBPdGhlcndpc2UsIHdoZW4gYSBkYXRhYmFzZSBuYW1lIGlzIG5vdCBzcGVjaWZp ZWQsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAorICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRv IHJlYnVpbGQgdGhlIGRhdGFiYXNlIG9yIGNsdXN0ZXIgaXMgY3JlYXRlZCBhbmQgd3JpdHRlbgog ICAgdG8gYSBmaWxlIG9yIHN0YW5kYXJkIG91dHB1dC4gIFRoaXMgc2NyaXB0IG91dHB1dCBpcyBl cXVpdmFsZW50IHRvCi0gICB0aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9ybWF0IG9mIDxhcHBsaWNh dGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4uCisgICB0aGUgcGxhaW4gdGV4dCBvdXRwdXQgZm9y bWF0IG9mIDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IKKyAgIDxhcHBsaWNh dGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisKICAgIFNvbWUgb2YgdGhlIG9wdGlvbnMg Y29udHJvbGxpbmcgdGhlIG91dHB1dCBhcmUgdGhlcmVmb3JlIGFuYWxvZ291cyB0bwogICAgPGFw cGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPiBvcHRpb25zLgogICA8L3BhcmE+CkBAIC0x NTIsNiArMTYxLDggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICAgIGNvbW1hbmRz IHRoYXQgbWVudGlvbiB0aGlzIGRhdGFiYXNlLgogICAgICAgICBBY2Nlc3MgcHJpdmlsZWdlcyBm b3IgdGhlIGRhdGFiYXNlIGl0c2VsZiBhcmUgYWxzbyByZXN0b3JlZCwKICAgICAgICAgdW5sZXNz IDxvcHRpb24+LS1uby1hY2w8L29wdGlvbj4gaXMgc3BlY2lmaWVkLgorICAgICAgICA8b3B0aW9u Pi0tY3JlYXRlPC9vcHRpb24+IGlzIHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRh dGFiYXNlcworICAgICAgICBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+ cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgogICAgICAgIDwvcGFyYT4KIAogICAgICAgIDxwYXJh PgpAQCAtMjQ3LDYgKzI1OCwxOSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwv bGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlv bj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAg ICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQg dGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJh PgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZy b20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNh dGlvbj4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48 L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CkBAIC01OTEsNiAr NjE1LDI4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAg ICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxv cHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5w YXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgPHBhcmE+CisgICAgICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1l IG1hdGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48 L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVk IGJ5IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAgPG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8 L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgaW50ZXJw cmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyB1c2VkIGJ5Cisg ICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0 ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0 ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxlIGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNs dWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRl cm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUgY2FyZWZ1bCB0bworICAgICAgICBxdW90ZSB0 aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVudCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24u CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIG9wdGlvbiBpcyBv bmx5IHJlbGV2YW50IHdoZW4gcmVzdG9yaW5nIGZyb20gYW4gYXJjaGl2ZSBtYWRlIHVzaW5nIDxh cHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCisgICAgICAgPC9wYXJhPgorICAg ICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRy eT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWx0ZXI9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmZpbGVuYW1lPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlz dGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMgYi9zcmMvYmlu L3BnX2R1bXAvY29ubmVjdGRiLmMKaW5kZXggMzg4ZDI5ZDBhZWIuLmIxMmE3MGZmNjBiIDEwMDY0 NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1w L2Nvbm5lY3RkYi5jCkBAIC0yMjUsNyArMjI1LDcgQEAgQ29ubmVjdERhdGFiYXNlKGNvbnN0IGNo YXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCiAJCWV4aXRfbmljZWx5 KDEpOwogCX0KIAotCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VB UkNIX1BBVEhfU1FMKSk7CisJUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwgQUxXQVlTX1NFQ1VS RV9TRUFSQ0hfUEFUSF9TUUwsIGZhbHNlKSk7CiAKIAlyZXR1cm4gY29ubjsKIH0KQEAgLTI3NSw3 ICsyNzUsNyBAQCBjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3Qg Y2hhciAqKnZhbHVlcykKICAqIFJ1biBhIHF1ZXJ5LCByZXR1cm4gdGhlIHJlc3VsdHMsIGV4aXQg cHJvZ3JhbSBvbiBmYWlsdXJlLgogICovCiBQR3Jlc3VsdCAqCi1leGVjdXRlUXVlcnkoUEdjb25u ICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKK2V4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNv bnN0IGNoYXIgKnF1ZXJ5LCBib29sIGlzX2FyY2hpdmUpCiB7CiAJUEdyZXN1bHQgICAqcmVzOwog CkBAIC0yODcsNyArMjg3LDE0IEBAIGV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnF1ZXJ5KQogCXsKIAkJcGdfbG9nX2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJv ck1lc3NhZ2UoY29ubikpOwogCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwg cXVlcnkpOwotCQlQUWZpbmlzaChjb25uKTsKKworCQkvKgorCQkgKiBXaGVuIGlzX2FyY2hpdmUg aXMgc2V0IHRoZW4gd2UgYXJlIHN1cmUgdGhhdCBjb25uZWN0aW9uIGlzIHJlZ2lzdGVyZWQgaW50 byBvbl9leGl0IGhvb2sKKwkJICogc28gZXhpdF9uaWNlbHkgd2lsbCBjbG9zZSB0aGUgY29ubmVj dGlvbiBpbiB0aGUgZW5kLiAgSWYgd2UgdHJ5IHRvIGNsb3NlIGluIDIgcGxhY2VzLCB3ZQorCQkg KiB3aWxsIGdldCBjcmFzaC4KKwkJICovCisJCWlmICghaXNfYXJjaGl2ZSkKKwkJCVBRZmluaXNo KGNvbm4pOwogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9jb25uZWN0ZGIuaCBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaAppbmRleCA2Nzgx Mzg1M2U2NS4uOWQyN2I5MzE2OTIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0 ZGIuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmgKQEAgLTIyLDUgKzIyLDUgQEAg ZXh0ZXJuIFBHY29ubiAqQ29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3Qg Y2hhciAqY29ubmVjdGlvbl9zdHJpbmcKIAkJCQkJCQkgICB0cml2YWx1ZSBwcm9tcHRfcGFzc3dv cmQsIGJvb2wgZmFpbF9vbl9lcnJvciwKIAkJCQkJCQkgICBjb25zdCBjaGFyICpwcm9nbmFtZSwg Y29uc3QgY2hhciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3ZlcnNpb24sCiAJCQkJCQkJICAgY2hh ciAqcGFzc3dvcmQsIGNoYXIgKm92ZXJyaWRlX2RibmFtZSk7Ci1leHRlcm4gUEdyZXN1bHQgKmV4 ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKK2V4dGVybiBQR3Jl c3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnksIGJvb2wg aXNfYXJjaGl2ZSk7CiAjZW5kaWYJCQkJCQkJLyogQ09OTkVDVERCX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWls ZAppbmRleCA3OWJkNTAzNjg0MS4uN2M5YTQ3NTk2M2IgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTEw Myw2ICsxMDMsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5w bCcsCiAgICAgICAndC8wMDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsJywKICAgICAgICd0LzAwNl9w Z19kdW1wX2NvbXByZXNzLnBsJywKKwkgICd0LzAwN19wZ19kdW1wYWxsLnBsJywKICAgICAgICd0 LzAxMF9kdW1wX2Nvbm5zdHIucGwnLAogICAgIF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGFyYWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IGRk YWYwOGZhYTMwLi4yMmY1NzM2MDQ0NCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFs bGVsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTMzMyw2ICszMzMsMTYg QEAgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKIAlvbl9leGl0X25pY2VseShh cmNoaXZlX2Nsb3NlX2Nvbm5lY3Rpb24sICZzaHV0ZG93bl9pbmZvKTsKIH0KIAorLyoKKyAqIFdo ZW4gcGdfcmVzdG9yZSByZXN0b3JlcyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gdXBkYXRlIGFs cmVhZHkgYWRkZWQgZW50cnkKKyAqIGludG8gYXJyYXkgZm9yIGNsZWFudXAuCisgKi8KK3ZvaWQK K3JlcGxhY2Vfb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCkKK3sKKwlzaHV0ZG93 bl9pbmZvLkFIWCA9IEFIWDsKK30KKwogLyoKICAqIG9uX2V4aXRfbmljZWx5IGhhbmRsZXIgZm9y IHNodXR0aW5nIGRvd24gZGF0YWJhc2UgY29ubmVjdGlvbnMgYW5kCiAgKiB3b3JrZXIgcHJvY2Vz c2VzIGNsZWFubHkuCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKaW5kZXggZDkwNDFkYWQ3MjAuLmY2MzFkOTQ1NDcy IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cC5oCkBAIC0zMTIsNyArMzEyLDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJj aGl2ZU9wdGlvbnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9u cyAqcm8KIAogZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZl ICpBSFgpOwogCi1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0 ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhLCBi b29sIGdsb2JhbHNfb25seSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0 ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNo aXZlRm9ybWF0IGZtdCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggNGE2 M2Y3MzkyYWUuLmMzODVkNDJlNDA2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j CkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNoaXZlSGFuZGxl ICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0 aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICptc2cs IHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBj b25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0 aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmlj YXRpb24gY29tcHJlc3Npb25fc3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJl c3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lk IFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2 ZWRPdXRwdXQpOwogCkBAIC0zMzksOSArMzM5LDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9w dGlvbnMoQXJjaGl2ZSAqQUhYKQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQ dWJsaWMgKi8KKy8qCisgKiBSZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlz IHNldCwgdGhlbiBhcHBlbmQgZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1w CisgKiBvZiBtdWx0aXBsZSBkYXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwu CisgKi8KIHZvaWQKLVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZl KEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29ubHkpCiB7CiAJ QXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlv bnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CkBAIC00NTgsNyArNDYzLDcgQEAgUmVzdG9yZUFy Y2hpdmUoQXJjaGl2ZSAqQUhYKQogCSAqLwogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChy b3B0LT5maWxlbmFtZSB8fCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLmFsZ29yaXRobSAhPSBQR19D T01QUkVTU0lPTl9OT05FKQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5j b21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+ Y29tcHJlc3Npb25fc3BlYywgYXBwZW5kX2RhdGEpOwogCiAJYWhwcmludGYoQUgsICItLVxuLS0g UG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1wXG4tLVxuXG4iKTsKIApAQCAtNzYxLDYgKzc2NiwyMSBA QCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJCQlpZiAoKHRlLT5yZXFzICYgKFJFUV9T Q0hFTUEgfCBSRVFfREFUQSB8IFJFUV9TVEFUUykpID09IDApCiAJCQkJY29udGludWU7CQkvKiBp Z25vcmUgaWYgbm90IHRvIGJlIGR1bXBlZCBhdCBhbGwgKi8KIAorCQkJLyogU2tpcCBEUk9QIERB VEFCQVNFIGlmIGdsb2JhbHNfb25seS4gKi8KKwkJCWlmIChnbG9iYWxzX29ubHkgJiYgdGUgJiYg dGUtPnRhZyAmJiAoc3RyY21wKHRlLT50YWcsICJEUk9QX0RBVEFCQVNFIikgPT0gMCkpCisJCQkJ Y29udGludWU7CisKKwkJCS8qIFNraXAgZm9yIENPTk5FQ1QgbWV0YSBjb21tYW5kLiAqLworCQkJ aWYgKCFyb3B0LT5maWxlbmFtZSAmJiB0ZSAmJiB0ZS0+dGFnICYmCisJCQkJKHN0cmNtcCh0ZS0+ dGFnLCAiQ09OTkVDVCIpID09IDApKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBTa2lwIGlmIG5v LXRhYmxlc3BhY2UgaXMgZ2l2ZW4uICovCisJCQlpZiAocm9wdC0+bm9UYWJsZXNwYWNlICYmIHRl ICYmIHRlLT50YWcgJiYKKwkJCQkoKHN0cmNtcCh0ZS0+dGFnLCAiZHVtcFRhYmxlc3BhY2VzIikg PT0gMCkgfHwKKwkJCQkgKHN0cmNtcCh0ZS0+dGFnLCAiZHJvcFRhYmxlc3BhY2VzIikgPT0gMCkp KQorCQkJCWNvbnRpbnVlOworCiAJCQlzd2l0Y2ggKF90b2NFbnRyeVJlc3RvcmVQYXNzKHRlKSkK IAkJCXsKIAkJCQljYXNlIFJFU1RPUkVfUEFTU19NQUlOOgpAQCAtMTMxNiw3ICsxMzM2LDcgQEAg UHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwog CWlmIChyb3B0LT5maWxlbmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0 X2NvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRf Y29tcHJlc3Npb25fc3BlYywgZmFsc2UpOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6 ZW9mKHN0YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgt PmNyZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTY5NSw3ICsxNzE1LDggQEAgYXJjaHByaW50ZihBcmNo aXZlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikKIAogc3RhdGljIHZvaWQKIFNldE91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCSAgY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkgIGNvbnN0IHBnX2NvbXBy ZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJICBib29sIGFwcGVuZF9kYXRh KQogewogCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CkBAIC0x NzE1LDcgKzE3MzYsNyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLAogCWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCWlmIChBSC0+bW9k ZSA9PSBhcmNoTW9kZUFwcGVuZCkKKwlpZiAoYXBwZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJj aE1vZGVBcHBlbmQpCiAJCW1vZGUgPSBQR19CSU5BUllfQTsKIAllbHNlCiAJCW1vZGUgPSBQR19C SU5BUllfVzsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu aCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaAppbmRleCAzMjViNTNmYzli ZC4uMzY1MDczYjNlYWUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKQEAgLTM5 NCw2ICszOTQsNyBAQCBzdHJ1Y3QgX3RvY0VudHJ5CiAKIGV4dGVybiBpbnQJcGFyYWxsZWxfcmVz dG9yZShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50cnkgKnRlKTsKIGV4dGVybiB2b2lkIG9uX2V4 aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJuIHZvaWQgcmVwbGFjZV9vbl9l eGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKIAogZXh0ZXJuIHZvaWQgd2Fybl9vcl9l eGl0X2hvcnJpYmx5KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19h dHRyaWJ1dGVfcHJpbnRmKDIsIDMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX3Rhci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBiNWJh M2I0NmRkOS4uODE4YjgwYTkzNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfdGFyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2LDcg KzgyNiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJvc2Ug PSBBSC0+cHVibGljLnZlcmJvc2U7CiAJCUFILT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJUmVz dG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgpOworCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAq KSBBSCwgZmFsc2UsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZlT3B0aW9ucygoQXJjaGl2ZSAqKSBB SCwgc2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDdkZjU2ZDhiMWIwLi44ZmVj MjQ3MjVkNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0xMzA2LDcgKzEzMDYsNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkgKiByaWdodCBub3cuCiAJICovCiAJaWYgKHBsYWluVGV4dCkKLQkJ UmVzdG9yZUFyY2hpdmUoZm91dCk7CisJCVJlc3RvcmVBcmNoaXZlKGZvdXQsIGZhbHNlLCBmYWxz ZSk7CiAKIAlDbG9zZUFyY2hpdmUoZm91dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wYWxsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCmluZGV4IGU4NWYy MjdkMTgyLi4yMDg3OTM1ZWU0MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBh bGwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0zMCw2ICszMCw3IEBA CiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgi CiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIu aCIKIAogLyogdmVyc2lvbiBzdHJpbmcgd2UgZXhwZWN0IGJhY2sgZnJvbSBwZ19kdW1wICovCiAj ZGVmaW5lIFBHRFVNUF9WRVJTSU9OU1RSICJwZ19kdW1wIChQb3N0Z3JlU1FMKSAiIFBHX1ZFUlNJ T04gIlxuIgpAQCAtNjUsOSArNjYsOSBAQCBzdGF0aWMgdm9pZCBkcm9wVGFibGVzcGFjZXMoUEdj b25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwog c3RhdGljIHZvaWQgZHJvcERCcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFVzZXJD b25maWcoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICp1c2VybmFtZSk7Ci1zdGF0aWMgdm9pZCBk dW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubik7CitzdGF0aWMgdm9pZCBkdW1wRGF0YWJhc2VzKFBH Y29ubiAqY29ubiwgYm9vbCBvdXRwdXRfY2xlYW4pOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFt cChjb25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAlydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJu YW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7CitzdGF0aWMgaW50CXJ1blBnRHVtcChjb25z dCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUpOwog c3RhdGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0 IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpv Ymp0eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLApAQCAtNzYsMTEgKzc3LDEzIEBAIHN0YXRpYyB2 b2lkIGV4ZWN1dGVDb21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3Rh dGljIHZvaWQgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmlu Z0xpc3QgKnBhdHRlcm5zLAogCQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBz dGF0aWMgdm9pZCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2lt cGxlU3RyaW5nTGlzdCAqcGF0dGVybik7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBG b3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KTsKK3N0YXRpYyBpbnQJY3JlYXRlRHVtcElkKHZvaWQp Oworc3RhdGljIHZvaWQgY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBj b25zdCBjaGFyICp0YWcpOwogCiBzdGF0aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwog c3RhdGljIFBRRXhwQnVmZmVyIHBnZHVtcG9wdHM7CiBzdGF0aWMgY29uc3QgY2hhciAqY29ubnN0 ciA9ICIiOwotc3RhdGljIGJvb2wgb3V0cHV0X2NsZWFuID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBz a2lwX2FjbHMgPSBmYWxzZTsKIHN0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKIHN0YXRpYyBi b29sIGRvc3luYyA9IHRydWU7CkBAIC0xMjMsNiArMTI2LDEwIEBAIHN0YXRpYyBTaW1wbGVTdHJp bmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0aWMg U2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNsdWRlX25hbWVzID0ge05VTEwsIE5VTEx9Owog CiBzdGF0aWMgY2hhciAqcmVzdHJpY3Rfa2V5Oworc3RhdGljIEFyY2hpdmUgKmZvdXQgPSBOVUxM Oworc3RhdGljIHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYyA9IHsw fTsKK3N0YXRpYyBpbnQJZHVtcElkVmFsID0gMDsKK3N0YXRpYyBBcmNoaXZlRm9ybWF0IGFyY2hE dW1wRm9ybWF0ID0gYXJjaE51bGw7CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQpAQCAtMTQ4LDYgKzE1NSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyJw YXNzd29yZCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7Im5vLXByaXZpbGVnZXMiLCBu b19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBub19hcmd1bWVudCwgTlVMTCwg J3gnfSwKKwkJeyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0YnfSwKIAogCQkv KgogCQkgKiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2ZSBhbiBlcXVpdmFsZW50IHNo b3J0IG9wdGlvbiBsZXR0ZXIKQEAgLTE5Nyw2ICsyMDUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hhcgkgICAqdXNlX3JvbGUgPSBO VUxMOwogCWNvbnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5VTEw7CisJY29uc3QgY2hhciAqZm9y bWF0X25hbWUgPSAicCI7CiAJdHJpdmFsdWUJcHJvbXB0X3Bhc3N3b3JkID0gVFJJX0RFRkFVTFQ7 CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7 CkBAIC0yMDgsNiArMjE3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWludAkJ CWMsCiAJCQkJcmV0OwogCWludAkJCW9wdGluZGV4OworCUR1bXBPcHRpb25zIGRvcHQ7CiAKIAlw Z19sb2dnaW5nX2luaXQoYXJndlswXSk7CiAJcGdfbG9nZ2luZ19zZXRfbGV2ZWwoUEdfTE9HX1dB Uk5JTkcpOwpAQCAtMjQ1LDggKzI1NSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAl9CiAKIAlwZ2R1bXBvcHRzID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwlJbml0RHVtcE9wdGlv bnMoJmRvcHQpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpF OmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEp CisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9w OnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3 aXRjaCAoYykKIAkJewpAQCAtMjU2LDcgKzI2Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnYyc6Ci0JCQkJb3V0cHV0X2NsZWFuID0gdHJ1 ZTsKKwkJCQlkb3B0Lm91dHB1dENsZWFuID0gdHJ1ZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAn ZCc6CkBAIC0yNzQsNyArMjg1LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHBnZHVtcG9wdHMsICIgLWYgIik7CiAJCQkJYXBwZW5kU2hl bGxTdHJpbmcocGdkdW1wb3B0cywgZmlsZW5hbWUpOwogCQkJCWJyZWFrOwotCisJCQljYXNlICdG JzoKKwkJCQlmb3JtYXRfbmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJ Y2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTMxNCw2 ICszMjcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ1UnOgog CQkJCXBndXNlciA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWRvcHQuY3BhcmFtcy51c2VybmFt ZSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICd2JzoKQEAgLTQy Myw3ICs0MzcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmljZWx5 KDEpOwogCX0KIAotCWlmIChpZl9leGlzdHMgJiYgIW91dHB1dF9jbGVhbikKKwlpZiAoaWZfZXhp c3RzICYmICFkb3B0Lm91dHB1dENsZWFuKQogCQlwZ19mYXRhbCgib3B0aW9uICVzIHJlcXVpcmVz IG9wdGlvbiAlcyIsCiAJCQkJICItLWlmLWV4aXN0cyIsICItYy8tLWNsZWFuIik7CiAKQEAgLTQz NSw2ICs0NDksMjcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2Vs eSgxKTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0 ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdF9uYW1lKTsKKworCS8qCisJICogSWYgYSBub24tcGxh aW4gZm9ybWF0IGlzIHNwZWNpZmllZCwgYSBmaWxlIG5hbWUgaXMgYWxzbyByZXF1aXJlZCBhcyB0 aGUKKwkgKiBwYXRoIHRvIHRoZSBtYWluIGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwgJiYKKwkJKCFmaWxlbmFtZSB8fCBzdHJjbXAoZmlsZW5hbWUsICIi KSA9PSAwKSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9uICVzPWR8Y3x0IHJlcXVpcmVzIG9w dGlvbiAlcyIsCisJCQkJCSAiLUYvLS1mb3JtYXQiLCAiLWYvLS1maWxlIik7CisJCXBnX2xvZ19l cnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9n bmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCS8qIHJlc3RyaWN0LWtleSBpcyBvbmx5 IHN1cHBvcnRlZCB3aXRoIC0tZm9ybWF0PXBsYWluICovCisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9 IGFyY2hOdWxsICYmIHJlc3RyaWN0X2tleSkKKwkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW4gb25s eSBiZSB1c2VkIHdpdGggJXM9cGxhaW4iLAorCQkJCSAiLS1yZXN0cmljdC1rZXkiLCAiLS1mb3Jt YXQiKTsKKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVxdWlyZWQgaW4g dGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlzIGVxdWFsbHkg dXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVkCkBAIC00OTUsNiAr NTMwLDI3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAoc2VxdWVuY2VfZGF0 YSkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtLXNlcXVlbmNlLWRhdGEi KTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lz ZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9y eS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlBc3NlcnQo ZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1w dHkgZXhpc3RpbmcgZGlyZWN0b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUp OworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQ R19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91 dHB1dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9Q RiA9IHN0ZG91dDsKKwogCS8qCiAJICogSWYgeW91IGRvbid0IHByb3ZpZGUgYSByZXN0cmljdCBr ZXksIG9uZSB3aWxsIGJlIGFwcG9pbnRlZCBmb3IgeW91LgogCSAqLwpAQCAtNTQ0LDE5ICs2MDAs NiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0ZXJu cyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRhYmFzZV9l eGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWly ZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZpbGVuYW1lKQotCXsKLQkJT1BG ID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYpCi0JCQlwZ19mYXRh bCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCSBmaWxlbmFt ZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoKIAkgKiBTZXQgdGhlIGNsaWVu dCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC01OTEsMzcgKzYzNCwxMTQgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChxdW90ZV9hbGxfaWRlbnRpZmllcnMpCiAJ CWV4ZWN1dGVDb21tYW5kKGNvbm4sICJTRVQgcXVvdGVfYWxsX2lkZW50aWZpZXJzID0gdHJ1ZSIp OwogCi0JZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1 bXBcbi0tXG5cbiIpOwotCWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3NlICYmIGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQogCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7CiAKLQkvKgot CSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3RlZCBwc3FsIG1l dGEtY29tbWFuZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0 IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICogcmVzcG9uc2VzIHRvIHF1ZXJpZXMu ICBXaGlsZSB3ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJvbQotCSAqIGFmZmVjdGlu ZyB0aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4gYmxvY2sgcHNxbAotCSAq IG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwg d2l0aCB0aGUgZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0ZWQuCi0JICovCi0JZnBy aW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJLyogY3JlYXRl IGEgYXJjaGl2ZSBmaWxlIGZvciBnbG9iYWwgY29tbWFuZHMuICovCisJaWYgKGZpbGVuYW1lICYm IGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgkJZ2xvYmFsX3BhdGhbTUFY UEdQQVRIXTsKIAotCS8qCi0JICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhl cmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCi0JICogb3RoZXIgdGhhbiB0byBicmVhayB0 aGluZ3MgZm9yIGluc3RhbGxhdGlvbnMgd2l0aG91dCBhIHBvc3RncmVzCi0JICogZGF0YWJhc2Uu ICBFdmVyeXRoaW5nIHdlJ3JlIHJlc3RvcmluZyBoZXJlIGlzIGEgZ2xvYmFsLCBzbyB3aGljaGV2 ZXIKLQkgKiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5l LgotCSAqLworCQkvKiBTZXQgZmlsZSBwYXRoIGZvciBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLwor CQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLmdsbyIsIGZpbGVuYW1l KTsKKworCQkvKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSAqLworCQlmb3V0ID0gQ3JlYXRlQXJjaGl2 ZShnbG9iYWxfcGF0aCwgYXJjaEN1c3RvbSwgY29tcHJlc3Npb25fc3BlYywKKwkJCQkJCQkgZG9z eW5jLCBhcmNoTW9kZVdyaXRlLCBOVUxMLCBEQVRBX0RJUl9TWU5DX01FVEhPRF9GU1lOQyk7CisK KwkJLyogTWFrZSBkdW1wIG9wdGlvbnMgYWNjZXNzaWJsZSByaWdodCBhd2F5ICovCisJCVNldEFy Y2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCBOVUxMKTsKKwkJKChBcmNoaXZlSGFuZGxlICopIGZv dXQpLT5jb25uZWN0aW9uID0gY29ubjsKKwkJKChBcmNoaXZlSGFuZGxlICopIGZvdXQpLT5wdWJs aWMubnVtV29ya2VycyA9IDE7CisKKwkJLyogUmVnaXN0ZXIgdGhlIGNsZWFudXAgaG9vayAqLwor CQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoZm91dCk7CisKKwkJLyogTGV0IHRoZSBhcmNoaXZlciBr bm93IGhvdyBub2lzeSB0byBiZSAqLworCQlmb3V0LT52ZXJib3NlID0gdmVyYm9zZTsKKworCQkv KgorCQkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8g YW55IG1pbm9yIHJlbGVhc2UKKwkJICogb2Ygb3VyIG93biBtYWpvciB2ZXJzaW9uLiAgKFNlZSBh bHNvIHZlcnNpb24gY2hlY2sgaW4KKwkJICogcGdfZHVtcGFsbC5jLikKKwkJICovCisJCWZvdXQt Pm1pblJlbW90ZVZlcnNpb24gPSA5MDIwMDsKKwkJZm91dC0+bWF4UmVtb3RlVmVyc2lvbiA9IChQ R19WRVJTSU9OX05VTSAvIDEwMCkgKiAxMDAgKyA5OTsKKwkJZm91dC0+bnVtV29ya2VycyA9IDE7 CisKKwkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBj bHVzdGVyIGR1bXBcbi0tXG5cbiIsICJDT01NRU5UIik7CiAKLQkvKiBSZXN0b3JlIHdpbGwgbmVl ZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KLQlmcHJpbnRmKE9QRiwgIlNFVCBk ZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZjtcblxuIik7CisJCS8qIGRlZmF1bHRf dHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmICovCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCXBnX2xvZ19pbmZvKCJzYXZpbmcgZGVmYXVsdF90 cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmYiKTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwg IlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZjtcbiIpOworCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkRFRkFVTFRfVFJBTlNBQ1RJT05fUkVBRF9PTkxZ Iik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQogCi0JLyogUmVwbGljYXRlIGVu Y29kaW5nIGFuZCBzdGRfc3RyaW5ncyBpbiBvdXRwdXQgKi8KLQlmcHJpbnRmKE9QRiwgIlNFVCBj bGllbnRfZW5jb2RpbmcgPSAnJXMnO1xuIiwKLQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2Rp bmcpKTsKLQlmcHJpbnRmKE9QRiwgIlNFVCBzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MgPSAl cztcbiIsIHN0ZF9zdHJpbmdzKTsKLQlpZiAoc3RyY21wKHN0ZF9zdHJpbmdzLCAib2ZmIikgPT0g MCkKLQkJZnByaW50ZihPUEYsICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xuIik7 Ci0JZnByaW50ZihPUEYsICJcbiIpOworCQkvKiBkdW1wRW5jb2Rpbmc6IHB1dCB0aGUgY29ycmVj dCBlbmNvZGluZyBpbnRvIHRoZSBhcmNoaXZlICovCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisJCQljb25zdCBjaGFyICplbmNuYW1lID0gcGdfZW5jb2Rp bmdfdG9fY2hhcihlbmNvZGluZyk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIlNF VCBjbGllbnRfZW5jb2RpbmcgPSAiKTsKKwkJCWFwcGVuZFN0cmluZ0xpdGVyYWxBSChxcnksIGVu Y25hbWUsIGZvdXQpOworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXJ5LCAiO1xuIik7CisKKwkJ CXBnX2xvZ19pbmZvKCJzYXZpbmcgZW5jb2RpbmcgPSAlcyIsIGVuY25hbWUpOworCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkVOQ09ESU5HIik7CisJCQlkZXN0cm95UFFFeHBC dWZmZXIocXJ5KTsKKwkJfQorCisJCS8qCisJCSAqIGR1bXBTdGRTdHJpbmdzOiBwdXQgdGhlIGNv cnJlY3QgZXNjYXBlIHN0cmluZyBiZWhhdmlvciBpbnRvIHRoZQorCQkgKiBhcmNoaXZlCisJCSAq LworCQl7CisJCQljb25zdCBjaGFyICpzdGRzdHJpbmdzID0gc3RkX3N0cmluZ3MgPyAib24iIDog Im9mZiI7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlw Z19sb2dfaW5mbygic2F2aW5nIFwic3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXNcIiIs IHN0ZHN0cmluZ3MpOworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiU0VUIHN0YW5kYXJkX2Nv bmZvcm1pbmdfc3RyaW5ncyA9ICclcyc7XG4iLAorCQkJCQkJCSAgc3Rkc3RyaW5ncyk7CisJCQlj cmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAiU1REU1RSSU5HUyIpOworCQkJZGVzdHJv eVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJZnByaW50ZihPUEYsICIt LVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIpOworCisJCS8q CisJCSAqIEVudGVyIHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3RlZCBwc3Fs IG1ldGEtY29tbWFuZHMuIEEKKwkJICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5q ZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCisJCSAqIHJlc3BvbnNlcyB0byBxdWVy aWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3VjaCBzb3VyY2VzIGZyb20KKwkJICogYWZm ZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0b3JlIHRpbWUsIHdlIGNhbiBibG9jayBwc3Fs CisJCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5z IHBzcWwgd2l0aCB0aGUKKwkJICogZHVtcCBvdXRwdXQgcmVtYWlucyB1bmFmZmVjdGVkLgorCQkg Ki8KKwkJZnByaW50ZihPUEYsICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisK KwkJLyoKKwkJICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0 aGF0IHNlcnZlZCBubyBwdXJwb3NlCisJCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZv ciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0Z3JlcworCQkgKiBkYXRhYmFzZS4gIEV2ZXJ5 dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMgYSBnbG9iYWwsIHNvCisJCSAqIHdoaWNoZXZl ciBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgorCQkg Ki8KKworCQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0 ZXIgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkg PSBvZmY7XG5cbiIpOworCisJCS8qIFJlcGxpY2F0ZSBlbmNvZGluZyBhbmQgc3RkX3N0cmluZ3Mg aW4gb3V0cHV0ICovCisJCWZwcmludGYoT1BGLCAiU0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7 XG4iLAorCQkJCXBnX2VuY29kaW5nX3RvX2NoYXIoZW5jb2RpbmcpKTsKKwkJZnByaW50ZihPUEYs ICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXM7XG4iLCBzdGRfc3RyaW5ncyk7 CisJCWlmIChzdHJjbXAoc3RkX3N0cmluZ3MsICJvZmYiKSA9PSAwKQorCQkJZnByaW50ZihPUEYs ICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0gb2ZmO1xuIik7CisJCWZwcmludGYoT1BGLCAi XG4iKTsKKwl9CiAKIAlpZiAoIWRhdGFfb25seSAmJiAhc3RhdGlzdGljc19vbmx5ICYmICFub19z Y2hlbWEpCiAJewpAQCAtNjMxLDcgKzc1MSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJICogYW5kIHRhYmxlc3BhY2VzIG5ldmVyIGRlcGVuZCBvbiBlYWNoIG90aGVyLiAgUm9s ZXMgY291bGQgaGF2ZQogCQkgKiBncmFudHMgdG8gZWFjaCBvdGhlciwgYnV0IERST1AgUk9MRSB3 aWxsIGNsZWFuIHRob3NlIHVwIHNpbGVudGx5LgogCQkgKi8KLQkJaWYgKG91dHB1dF9jbGVhbikK KwkJaWYgKGRvcHQub3V0cHV0Q2xlYW4pCiAJCXsKIAkJCWlmICghZ2xvYmFsc19vbmx5ICYmICFy b2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQogCQkJCWRyb3BEQnMoY29ubik7CkBAIC02 NjUsMjcgKzc4NSw0MiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQlkdW1wVGFi bGVzcGFjZXMoY29ubik7CiAJfQogCi0JLyoKLQkgKiBFeGl0IHJlc3RyaWN0ZWQgbW9kZSBqdXN0 IGJlZm9yZSBkdW1waW5nIHRoZSBkYXRhYmFzZXMuICBwZ19kdW1wIHdpbGwKLQkgKiBoYW5kbGUg ZW50ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRlLgotCSAqLwotCWZw cmludGYoT1BGLCAiXFx1bnJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCXsKKwkJLyoKKwkJICogRXhpdCByZXN0cmljdGVk IG1vZGUganVzdCBiZWZvcmUgZHVtcGluZyB0aGUgZGF0YWJhc2VzLiAgcGdfZHVtcAorCQkgKiB3 aWxsIGhhbmRsZSBlbnRlcmluZyByZXN0cmljdGVkIG1vZGUgYWdhaW4gYXMgYXBwcm9wcmlhdGUu CisJCSAqLworCQlmcHJpbnRmKE9QRiwgIlxcdW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9r ZXkpOworCX0KIAogCWlmICghZ2xvYmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNw YWNlc19vbmx5KQotCQlkdW1wRGF0YWJhc2VzKGNvbm4pOwotCi0JUFFmaW5pc2goY29ubik7CisJ CWR1bXBEYXRhYmFzZXMoY29ubiwgZG9wdC5vdXRwdXRDbGVhbik7CiAKLQlpZiAodmVyYm9zZSkK KwlpZiAodmVyYm9zZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZHVtcFRpbWVz dGFtcCgiQ29tcGxldGVkIG9uIik7Ci0JZnByaW50ZihPUEYsICItLVxuLS0gUG9zdGdyZVNRTCBk YXRhYmFzZSBjbHVzdGVyIGR1bXAgY29tcGxldGVcbi0tXG5cbiIpOwogCi0JaWYgKGZpbGVuYW1l KQorCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICItLVxu LS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXAgY29tcGxldGVcbi0tXG5cbiIpOwor CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJUmVzdG9yZU9wdGlvbnMg KnJvcHQ7CisKKwkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUG9zdGdyZVNRTCBkYXRh YmFzZSBjbHVzdGVyIGR1bXAgY29tcGxldGVcbi0tXG5cbiIsICJDT01NRU5UIik7CisJCXJvcHQg PSBOZXdSZXN0b3JlT3B0aW9ucygpOworCQlTZXRBcmNoaXZlT3B0aW9ucyhmb3V0LCAmZG9wdCwg cm9wdCk7CisKKwkJLyogTWFyayB3aGljaCBlbnRyaWVzIHNob3VsZCBiZSBvdXRwdXQgKi8KKwkJ UHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhmb3V0KTsKKwkJQ2xvc2VBcmNoaXZlKGZvdXQp OworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKIAl7CiAJCWZjbG9zZShPUEYpOwogCiAJCS8qIHN5 bmMgdGhlIHJlc3VsdGluZyBmaWxlLCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAqLwotCQlpZiAoZG9z eW5jKQorCQlpZiAoZG9zeW5jICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJCQko dm9pZCkgZnN5bmNfZm5hbWUoZmlsZW5hbWUsIGZhbHNlKTsKIAl9CiAKQEAgLTY5NiwxMiArODMx LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHN0YXRpYyB2b2lkCiBoZWxwKHZv aWQpCiB7Ci0JcHJpbnRmKF8oIiVzIGV4cG9ydHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0 ZXIgYXMgYW4gU1FMIHNjcmlwdC5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZXhw b3J0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2NyaXB0IG9yIHRv IG90aGVyIGZvcm1hdHMuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdlOlxuIikp OwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uXG4iKSwgcHJvZ25hbWUpOwogCiAJcHJpbnRm KF8oIlxuR2VuZXJhbCBvcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgIC1mLCAtLWZpbGU9RklM RU5BTUUgICAgICAgICAgb3V0cHV0IGZpbGUgbmFtZVxuIikpOworCXByaW50ZihfKCIgIC1GLCAt LWZvcm1hdD1jfGR8dHxwICAgICAgICAgb3V0cHV0IGZpbGUgZm9ybWF0IChjdXN0b20sIGRpcmVj dG9yeSwgdGFyLFxuIgorCQkJICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW4g dGV4dCAoZGVmYXVsdCkpXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9zZSAgICAgICAg ICAgICAgICB2ZXJib3NlIG1vZGVcbiIpKTsKIAlwcmludGYoXygiICAtViwgLS12ZXJzaW9uICAg ICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsK IAlwcmludGYoXygiICAtLWxvY2std2FpdC10aW1lb3V0PVRJTUVPVVQgIGZhaWwgYWZ0ZXIgd2Fp dGluZyBUSU1FT1VUIGZvciBhIHRhYmxlIGxvY2tcbiIpKTsKQEAgLTc3Niw2ICs5MTMsNyBAQCBz dGF0aWMgdm9pZAogZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIHsKIAlQUUV4cEJ1ZmZlciBidWYg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBRRXhw QnVmZmVyKCk7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWlfcm9sbmFtZTsKIAlpbnQJCQlp OwpAQCAtNzkyLDEyICs5MzAsMTcgQEAgZHJvcFJvbGVzKFBHY29ubiAqY29ubikKIAkJCQkJCSAg IkZST00gJXMgIgogCQkJCQkJICAiT1JERVIgQlkgMSIsIHJvbGVfY2F0YWxvZyk7CiAKLQlyZXMg PSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5kYXRhKTsKKwlyZXMgPSBleGVjdXRlUXVlcnkoY29u biwgYnVmLT5kYXRhLCBmb3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlfcm9sbmFtZSA9IFBRZm51 bWJlcihyZXMsICJyb2xuYW1lIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJp bnRmKE9QRiwgIi0tXG4tLSBEcm9wIHJvbGVzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Agcm9sZXNc bi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEcm9w IHJvbGVzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50 dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTgwNSwxNSArOTQ4LDIxIEBAIGRyb3BSb2xlcyhQR2Nv bm4gKmNvbm4pCiAKIAkJcm9sZW5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgaV9yb2xuYW1lKTsK IAotCQlmcHJpbnRmKE9QRiwgIkRST1AgUk9MRSAlcyVzO1xuIiwKLQkJCQlpZl9leGlzdHMgPyAi SUYgRVhJU1RTICIgOiAiIiwKLQkJCQlmbXRJZChyb2xlbmFtZSkpOworCQlhcHBlbmRQUUV4cEJ1 ZmZlcihkZWxRcnksICJEUk9QIFJPTEUgJXMlcztcbiIsCisJCQkJCQkgIGlmX2V4aXN0cyA/ICJJ RiBFWElTVFMgIiA6ICIiLAorCQkJCQkJICBmbXRJZChyb2xlbmFtZSkpOworCisJCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBkZWxRcnktPmRh dGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoZGVsUXJ5LT5kYXRhLCAiZHJv cFJvbGVzIik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYp OwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogLyoKQEAgLTg3Nyw3ICsxMDI2LDcg QEAgZHVtcFJvbGVzKFBHY29ubiAqY29ubikKIAkJCQkJCSAgIkZST00gJXMgIgogCQkJCQkJICAi T1JERVIgQlkgMiIsIHJvbGVfY2F0YWxvZyk7CiAKLQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwg YnVmLT5kYXRhKTsKKwlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgYnVmLT5kYXRhLCBmb3V0ID8g dHJ1ZSA6IGZhbHNlKTsKIAogCWlfb2lkID0gUFFmbnVtYmVyKHJlcywgIm9pZCIpOwogCWlfcm9s bmFtZSA9IFBRZm51bWJlcihyZXMsICJyb2xuYW1lIik7CkBAIC04OTUsNyArMTA0NCwxMiBAQCBk dW1wUm9sZXMoUEdjb25uICpjb25uKQogCWlfaXNfY3VycmVudF91c2VyID0gUFFmbnVtYmVyKHJl cywgImlzX2N1cnJlbnRfdXNlciIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnBy aW50ZihPUEYsICItLVxuLS0gUm9sZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZXNcbi0tXG5cbiIp OworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlc1xuLS1cblxu IiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkr KykKIAl7CkBAIC05OTksNyArMTE1MywxMCBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCQkJ CQkJCSAiUk9MRSIsIHJvbGVuYW1lLAogCQkJCQkJCSBidWYpOwogCi0JCWZwcmludGYoT1BGLCAi JXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlm cHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2 ZUVudHJ5KGJ1Zi0+ZGF0YSwgImR1bXBSb2xlcyIpOwogCX0KIAogCS8qCkBAIC0xMDA3LDE1ICsx MTY0LDEzIEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJICogV2UgZG8gaXQgdGhpcyB3YXkg YmVjYXVzZSBjb25maWcgc2V0dGluZ3MgZm9yIHJvbGVzIGNvdWxkIG1lbnRpb24gdGhlCiAJICog bmFtZXMgb2Ygb3RoZXIgcm9sZXMuCiAJICovCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJ ZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZ3VyYXRpb25zXG4tLVxuIik7Ci0KIAlm b3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAkJZHVtcFVzZXJDb25maWcoY29u biwgUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9sbmFtZSkpOwogCiAJUFFjbGVhcihyZXMpOwogCi0J ZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogfQpA QCAtMTA4Miw3ICsxMjM3LDcgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAqY29ubikKIAkJ CQkJICAiTEVGVCBKT0lOICVzIHVnIG9uIHVnLm9pZCA9IGEuZ3JhbnRvciAiCiAJCQkJCSAgIldI RVJFIE5PVCAodXIucm9sbmFtZSB+ICdecGdfJyBBTkQgdW0ucm9sbmFtZSB+ICdecGdfJykiCiAJ CQkJCSAgIk9SREVSIEJZIDEsMiwzIiwgcm9sZV9jYXRhbG9nLCByb2xlX2NhdGFsb2csIHJvbGVf Y2F0YWxvZyk7Ci0JcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSk7CisJcmVzID0g ZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAJaV9y b2xlID0gUFFmbnVtYmVyKHJlcywgInJvbGUiKTsKIAlpX21lbWJlciA9IFBRZm51bWJlcihyZXMs ICJtZW1iZXIiKTsKIAlpX2dyYW50b3IgPSBQUWZudW1iZXIocmVzLCAiZ3JhbnRvciIpOwpAQCAt MTA5NCw3ICsxMjQ5LDEyIEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJaV9z ZXRfb3B0aW9uID0gUFFmbnVtYmVyKHJlcywgInNldF9vcHRpb24iKTsKIAogCWlmIChQUW50dXBs ZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0t XG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50 ZihPUEYsICItLVxuLS0gUm9sZSBtZW1iZXJzaGlwc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIsICJD T01NRU5UIik7CisJfQogCiAJLyoKIAkgKiBXZSBjYW4ndCBkdW1wIHRoZXNlIEdSQU5UIGNvbW1h bmRzIGluIGFyYml0cmFyeSBvcmRlciwgYmVjYXVzZSBhIHJvbGUKQEAgLTExNzMsNiArMTMzMyw3 IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJY2hhcgkgICAqZ3JhbnRv cjsKIAkJCQljaGFyCSAgICpzZXRfb3B0aW9uID0gInRydWUiOwogCQkJCWJvb2wJCWZvdW5kOwor CQkJCVBRRXhwQnVmZmVyIGNyZWFRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJCQkJLyog SWYgd2UgYWxyZWFkeSBkaWQgdGhpcyBncmFudCwgZG9uJ3QgZG8gaXQgYWdhaW4uICovCiAJCQkJ aWYgKGRvbmVbaSAtIHN0YXJ0XSkKQEAgLTEyMjksOCArMTM5MCw4IEBAIGR1bXBSb2xlTWVtYmVy c2hpcChQR2Nvbm4gKmNvbm4pCiAKIAkJCQkvKiBHZW5lcmF0ZSB0aGUgYWN0dWFsIEdSQU5UIHN0 YXRlbWVudC4gKi8KIAkJCQlyZXNldFBRRXhwQnVmZmVyKG9wdGJ1Zik7Ci0JCQkJZnByaW50ZihP UEYsICJHUkFOVCAlcyIsIGZtdElkKHJvbGUpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIiBUTyAlcyIs IGZtdElkKG1lbWJlcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICJHUkFOVCAl cyIsIGZtdElkKHJvbGUpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiIFRPICVz IiwgZm10SWQobWVtYmVyKSk7CiAJCQkJaWYgKCphZG1pbl9vcHRpb24gPT0gJ3QnKQogCQkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJBRE1JTiBPUFRJT04iKTsKIAkJCQlpZiAoZHVt cF9ncmFudF9vcHRpb25zKQpAQCAtMTI1MSwxMCArMTQxMiwxNSBAQCBkdW1wUm9sZU1lbWJlcnNo aXAoUEdjb25uICpjb25uKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJTRVQg RkFMU0UiKTsKIAkJCQl9CiAJCQkJaWYgKG9wdGJ1Zi0+ZGF0YVswXSAhPSAnXDAnKQotCQkJCQlm cHJpbnRmKE9QRiwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKKwkJCQkJYXBwZW5kUFFFeHBC dWZmZXIoY3JlYVFyeSwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKIAkJCQlpZiAoZHVtcF9n cmFudG9ycykKLQkJCQkJZnByaW50ZihPUEYsICIgR1JBTlRFRCBCWSAlcyIsIGZtdElkKGdyYW50 b3IpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIjtcbiIpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihj cmVhUXJ5LCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7CisJCQkJYXBwZW5kUFFF eHBCdWZmZXIoY3JlYVFyeSwgIjtcbiIpOworCisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQorCQkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgY3JlYVFyeS0+ZGF0YSk7CisJCQkJZWxz ZQorCQkJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoY3JlYVFyeS0+ZGF0YSwgImR1bXBSb2xlTWVt YmVyc2hpcCIpOwogCQkJfQogCQl9CiAKQEAgLTEyNjYsNyArMTQzMiw4IEBAIGR1bXBSb2xlTWVt YmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZl cihidWYpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMjkxLDEwICsx NDU4LDE1IEBAIGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJCQkgICAicGFyYWNs LCAiCiAJCQkJCSAgICJwZ19jYXRhbG9nLmFjbGRlZmF1bHQoJ3AnLCAiIENwcEFzU3RyaW5nMihC T09UU1RSQVBfU1VQRVJVU0VSSUQpICIpIEFTIGFjbGRlZmF1bHQgIgogCQkJCQkgICAiRlJPTSBw Z19jYXRhbG9nLnBnX3BhcmFtZXRlcl9hY2wgIgotCQkJCQkgICAiT1JERVIgQlkgMSIpOworCQkJ CQkgICAiT1JERVIgQlkgMSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1cGxl cyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBwcml2aWxlZ2VzIG9uIGNv bmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIHByaXZpbGVnZXMg b24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iKTsKKwkJZWxzZQorCQkJY3JlYXRl T25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUm9sZSBwcml2aWxlZ2VzIG9uIGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVyc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwg UFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xMzE4LDE0ICsxNDkwLDE5IEBAIGR1bXBSb2xl R1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJZXhpdF9uaWNlbHkoMSk7CiAJCX0KIAotCQlmcHJp bnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0 ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wUm9sZUdVQ1ByaXZzIik7CiAKIAkJZnJl ZShmcGFybmFtZSk7CiAJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCX0KIAogCVBRY2xlYXIo cmVzKTsKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTMzNyw2ICsxNTE0 LDcgQEAgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIHsKIAlQR3Jlc3VsdCAgICpyZXM7 CiAJaW50CQkJaTsKKwlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwog CiAJLyoKIAkgKiBHZXQgYWxsIHRhYmxlc3BhY2VzIGV4Y2VwdCBidWlsdC1pbiBvbmVzICh3aGlj aCB3ZSBhc3N1bWUgYXJlIG5hbWVkCkBAIC0xMzQ1LDIzICsxNTIzLDM0IEBAIGRyb3BUYWJsZXNw YWNlcyhQR2Nvbm4gKmNvbm4pCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sICJTRUxFQ1Qgc3Bj bmFtZSAiCiAJCQkJCSAgICJGUk9NIHBnX2NhdGFsb2cucGdfdGFibGVzcGFjZSAiCiAJCQkJCSAg ICJXSEVSRSBzcGNuYW1lICF+ICdecGdfJyAiCi0JCQkJCSAgICJPUkRFUiBCWSAxIik7CisJCQkJ CSAgICJPUkRFUiBCWSAxIiwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlpZiAoUFFudHVwbGVz KHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIHRhYmxlc3BhY2VzXG4tLVxu XG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYo T1BGLCAiLS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVh dGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEcm9wIHRhYmxlc3BhY2VzXG4tLVxuXG4iLCAiQ09N TUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsK IAkJY2hhcgkgICAqc3BjbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKIAotCQlmcHJpbnRm KE9QRiwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKLQkJCQlpZl9leGlzdHMgPyAiSUYgRVhJ U1RTICIgOiAiIiwKLQkJCQlmbXRJZChzcGNuYW1lKSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKGRl bFFyeSwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKKwkJCQkJCSAgaWZfZXhpc3RzID8gIklG IEVYSVNUUyAiIDogIiIsCisJCQkJCQkgIGZtdElkKHNwY25hbWUpKTsKKworCQlpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRh KTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgImRyb3BU YWJsZXNwYWNlcyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5c biIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJc blxuIik7CiB9CiAKIC8qCkBAIC0xMzg1LDEwICsxNTc0LDE1IEBAIGR1bXBUYWJsZXNwYWNlcyhQ R2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJwZ19jYXRhbG9nLnNob2JqX2Rlc2NyaXB0aW9uKG9pZCwg J3BnX3RhYmxlc3BhY2UnKSAiCiAJCQkJCSAgICJGUk9NIHBnX2NhdGFsb2cucGdfdGFibGVzcGFj ZSAiCiAJCQkJCSAgICJXSEVSRSBzcGNuYW1lICF+ICdecGdfJyAiCi0JCQkJCSAgICJPUkRFUiBC WSAxIik7CisJCQkJCSAgICJPUkRFUiBCWSAxIiwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlp ZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBUYWJsZXNwYWNl c1xuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlm cHJpbnRmKE9QRiwgIi0tXG4tLSBUYWJsZXNwYWNlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNy ZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFRhYmxlc3BhY2VzXG4tLVxuXG4iLCAiQ09NTUVO VCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKQEAg LTE0NTcsMTQgKzE2NTEsMTkgQEAgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIAkJCQkJ CQkgIlRBQkxFU1BBQ0UiLCBzcGNuYW1lLAogCQkJCQkJCSBidWYpOwogCi0JCWZwcmludGYoT1BG LCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJ CQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJj aGl2ZUVudHJ5KGJ1Zi0+ZGF0YSwgImR1bXBUYWJsZXNwYWNlcyIpOwogCiAJCWZyZWUoZnNwY25h bWUpOwogCQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNsZWFyKHJlcyk7Ci0J ZnByaW50ZihPUEYsICJcblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwp CisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTE0ODUsMTAgKzE2ODQsMTUgQEAg ZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSAiCiAJCQkJCSAg ICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBk YXRjb25ubGltaXQgIT0gLTIgIgotCQkJCQkgICAiT1JERVIgQlkgZGF0bmFtZSIpOworCQkJCQkg ICAiT1JERVIgQlkgZGF0bmFtZSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBRbnR1 cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCBkYXRhYmFzZXMgKGV4 Y2VwdCBwb3N0Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIGRhdGFi YXNlcyAoZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iKTsKKwkJZWxzZQor CQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRHJvcCBkYXRhYmFzZXMgKGV4Y2VwdCBw b3N0Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3Ig KGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNTAzLDE1ICsxNzA3LDIz IEBAIGRyb3BEQnMoUEdjb25uICpjb25uKQogCQkJc3RyY21wKGRibmFtZSwgInRlbXBsYXRlMCIp ICE9IDAgJiYKIAkJCXN0cmNtcChkYm5hbWUsICJwb3N0Z3JlcyIpICE9IDApCiAJCXsKLQkJCWZw cmludGYoT1BGLCAiRFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKLQkJCQkJaWZfZXhpc3RzID8gIklG IEVYSVNUUyAiIDogIiIsCi0JCQkJCWZtdElkKGRibmFtZSkpOworCQkJUFFFeHBCdWZmZXIgZGVs UXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5 LCAiRFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKKwkJCQkJCQkgIGlmX2V4aXN0cyA/ICJJRiBFWElT VFMgIiA6ICIiLAorCQkJCQkJCSAgZm10SWQoZGJuYW1lKSk7CisKKwkJCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKKwkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsK KwkJCWVsc2UKKwkJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoZGVsUXJ5LT5kYXRhLCAiRFJPUF9E QVRBQkFTRSIpOwogCQl9CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYsICJc blxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwg IlxuXG4iKTsKIH0KIAogCkBAIC0xNTMxLDE0ICsxNzQzLDI1IEBAIGR1bXBVc2VyQ29uZmlnKFBH Y29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJYXBwZW5kU3RyaW5nTGl0ZXJhbENv bm4oYnVmLCB1c2VybmFtZSwgY29ubik7CiAJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKGJ1ZiwgJykn KTsKIAotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJlcyA9IGV4ZWN1 dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYgKFBR bnR1cGxlcyhyZXMpID4gMCkKIAl7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKIAogCQlzYW5pdGl6 ZWQgPSBzYW5pdGl6ZV9saW5lKHVzZXJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICJcbi0t XG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2Vy IENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVsc2UKKwkJeworCQkJUFFF eHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZm ZXIocXJ5LCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQp OworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRl c3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKIAkJZnJlZShzYW5pdGl6ZWQpOwogCX0KIApA QCAtMTU0OCw3ICsxNzcxLDExIEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3Qg Y2hhciAqdXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQoY29ubiwgUFFnZXR2YWx1 ZShyZXMsIGksIDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUsIE5VTEwsIE5VTEwsCiAJ CQkJCQkJICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisKKwkJaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1w VXNlckNvbmZpZyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE1OTcsNyArMTgyNCw3IEBA IGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogCQkJZXhpdF9uaWNlbHkoMSk7 CiAJCX0KIAotCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEpOworCQlyZXMg PSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwog CQlmb3IgKGludCBpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJCXsKIAkJCXNpbXBs ZV9zdHJpbmdfbGlzdF9hcHBlbmQobmFtZXMsIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSk7CkBAIC0x NjE0LDEwICsxODQxLDEzIEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAog ICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBib29sIG91 dHB1dF9jbGVhbikKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwljaGFyCQlkYl9z dWJkaXJbTUFYUEdQQVRIXTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFUSF07CisJRklMRQkg ICAqbWFwX2ZpbGUgPSBOVUxMOwogCiAJLyoKIAkgKiBTa2lwIGRhdGFiYXNlcyBtYXJrZWQgbm90 IGRhdGFsbG93Y29ubiwgc2luY2Ugd2UnZCBiZSB1bmFibGUgdG8gY29ubmVjdApAQCAtMTYzMSwx OSArMTg2MSw0OSBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhh dmUgc29tZSBmYWlsdXJlIG1vZGUgd2l0aCAtLWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVR dWVyeShjb25uLAotCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRh dG5hbWUsIG9pZCAiCiAJCQkJCSAgICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hF UkUgZGF0YWxsb3djb25uIEFORCBkYXRjb25ubGltaXQgIT0gLTIgIgotCQkJCQkgICAiT1JERVIg QlkgKGRhdG5hbWUgPD4gJ3RlbXBsYXRlMScpLCBkYXRuYW1lIik7CisJCQkJCSAgICJPUkRFUiBC WSAoZGF0bmFtZSA8PiAndGVtcGxhdGUxJyksIGRhdG5hbWUiLAorCQkJCQkgICBmb3V0ID8gdHJ1 ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAi LS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNcbi0tXG5cbiIpOwor CQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEYXRhYmFzZXNcbi0tXG5c biIsICJDT01NRU5UIik7CisJfQorCisJLyoKKwkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1c3RvbSBm b3JtYXQgaXMgc3BlY2lmaWVkLCBjcmVhdGUgYSBzdWJkaXJlY3RvcnkKKwkgKiB1bmRlciB0aGUg bWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVtcCBmaWxlIG9yIHN1YmRpcmVjdG9y eQorCSAqIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGF0IHN1YmRpcmVjdG9yeSBieSBwZ19kdW1wLgor CSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJCW1hcF9m aWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwg IiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkg d2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtk aXIoZGJfc3ViZGlyLCBwZ19kaXJfY3JlYXRlX21vZGUpICE9IDApCisJCQlwZ19mYXRhbCgiY291 bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkJc25w cmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsK KworCQkvKiBDcmVhdGUgYSBtYXAgZmlsZSAodG8gc3RvcmUgZGJvaWQgYW5kIGRibmFtZSkgKi8K KwkJbWFwX2ZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7CisJCWlmICgh bWFwX2ZpbGUpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwg bWFwX2ZpbGVfcGF0aCk7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBp KyspCiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CiAJCWNo YXIJICAgKnNhbml0aXplZDsKLQkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CisJCWNoYXIJICAg Km9pZCA9IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKKwkJY29uc3QgY2hhciAqY3JlYXRlX29wdHMg PSAiIjsKIAkJaW50CQkJcmV0OwogCiAJCS8qIFNraXAgdGVtcGxhdGUwLCBldmVuIGlmIGl0J3Mg bm90IG1hcmtlZCAhZGF0YWxsb3djb25uLiAqLwpAQCAtMTY2MCw3ICsxOTIwLDE4IEBAIGR1bXBE YXRhYmFzZXMoUEdjb25uICpjb25uKQogCQlwZ19sb2dfaW5mbygiZHVtcGluZyBkYXRhYmFzZSBc IiVzXCIiLCBkYm5hbWUpOwogCiAJCXNhbml0aXplZCA9IHNhbml0aXplX2xpbmUoZGJuYW1lLCB0 cnVlKTsKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5c biIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJ ZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIHNhbml0 aXplZCk7CisJCWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiLS1cbi0tIERhdGFiYXNlIFwiJXNc IiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFy eS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisK IAkJZnJlZShzYW5pdGl6ZWQpOwogCiAJCS8qCkBAIC0xNjc1LDI0ICsxOTQ2LDQ2IEBAIGR1bXBE YXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl7CiAJCQlpZiAob3V0cHV0X2NsZWFuKQogCQkJCWNy ZWF0ZV9vcHRzID0gIi0tY2xlYW4gLS1jcmVhdGUiOworCQkJLyogU2luY2UgcGdfZHVtcCB3b24n dCBlbWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLworCQkJZWxzZSBpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxu IiwgZGJuYW1lKTsKIAkJCWVsc2UKIAkJCXsKLQkJCQljcmVhdGVfb3B0cyA9ICIiOwotCQkJCS8q IFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8K LQkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCVBRRXhw QnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZl cihxcnksICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQljcmVhdGVPbmVBcmNoaXZl RW50cnkocXJ5LT5kYXRhLCAiQ09OTkVDVCIpOworCQkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkp OwogCQkJfQogCQl9CiAJCWVsc2UKIAkJCWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRlIjsKIAotCQlp ZiAoZmlsZW5hbWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVs bCkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9v cHRzKTsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBmb3JtYXQgZHVtcCwgdGhl biBhcHBlbmQgZGJvaWQgYW5kIGRibmFtZSB0bworCQkgKiB0aGUgbWFwLmRhdCBmaWxlLgorCQkg Ki8KKwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJCQlzbnByaW50ZihkYmZpbGVwYXRoLCBNQVhQR1BB VEgsICJcIiVzXCIvXCIlc1wiLmRtcCIsIGRiX3N1YmRpciwgb2lkKTsKKwkJCWVsc2UgaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQ QVRILCAiXCIlc1wiL1wiJXNcIi50YXIiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQllbHNlCisJCQkJ c25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1YmRp ciwgb2lkKTsKKworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJuYW1l IGluIG1hcCBmaWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQsIGRi bmFtZSk7CisJCX0KKworCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cywgZGJm aWxlcGF0aCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJwZ19kdW1wIGZhaWxlZCBv biBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCi0JCWlmIChmaWxlbmFtZSkK KwkJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQl7CiAJCQlP UEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJaWYgKCFPUEYpCkBAIC0xNzAx LDYgKzE5OTQsMTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCX0KIAl9CiAKKwkv KiBDbG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJ ZmNsb3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAtMTcxMCw3ICsyMDA3 LDcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdfZHVtcCBvbiBkYm5h bWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBnRHVtcChj b25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQorcnVuUGdEdW1wKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSkK IHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29ubnN0cmJ1ZjsKIAlQUUV4cEJ1ZmZlckRhdGEgY21kOwpA QCAtMTcxOSwxNyArMjAxNiwzNiBAQCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25z dCBjaGFyICpjcmVhdGVfb3B0cykKIAlpbml0UFFFeHBCdWZmZXIoJmNvbm5zdHJidWYpOwogCWlu aXRQUUV4cEJ1ZmZlcigmY21kKTsKIAotCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIg JXMgJXMiLCBwZ19kdW1wX2JpbiwKLQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0 cyk7Ci0KIAkvKgotCSAqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50 ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKLQkgKiBmb3JtYXQuCisJICogSWYgdGhpcyBpcyBub3Qg YSBwbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBkdW1wCisJICog Zm9ybWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVtcC4KIAkgKi8K LQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOwor CWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVy KCZjbWQsICJcIiVzXCIgJXMgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgcGdkdW1w b3B0cy0+ZGF0YSwgZGJmaWxlLCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hEaXJlY3RvcnkpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZv cm1hdD1kaXJlY3RvcnkgIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0 b20pCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7 CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21k LCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEs IGNyZWF0ZV9vcHRzKTsKKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0 aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCisJCSAqIGZvcm1hdC4KKwkJICov CisJCWlmIChmaWxlbmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIp OworCQllbHNlCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAK IAkvKgogCSAqIEFwcGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1 Y3RlZCBzdGVtIG9mIGNvbm5lY3Rpb24KQEAgLTE3NzIsNyArMjA4OCw3IEBAIGJ1aWxkU2hTZWNM YWJlbHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJ ZCwKIAlQR3Jlc3VsdCAgICpyZXM7CiAKIAlidWlsZFNoU2VjTGFiZWxRdWVyeShjYXRhbG9nX25h bWUsIG9iamVjdElkLCBzcWwpOwotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBzcWwtPmRhdGEp OworCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBzcWwtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFs c2UpOwogCWVtaXRTaFNlY0xhYmVscyhjb25uLCByZXMsIGJ1ZmZlciwgb2JqdHlwZSwgb2JqbmFt ZSk7CiAKIAlQUWNsZWFyKHJlcyk7CkBAIC0xODc0LDMgKzIxOTAsNjggQEAgcmVhZF9kdW1wYWxs X2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4p CiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIHBhcnNlRHVtcEZvcm1hdAor ICoKKyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisgKi8KK3N0YXRpYyBBcmNo aXZlRm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0KQoreworCUFyY2hp dmVGb3JtYXQgYXJjaER1bXBGb3JtYXQ7CisKKwlpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJj IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0 cmNhc2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNo Q3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZCIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZv cm1hdCwgImRpcmVjdG9yeSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9y eTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInAiKSA9PSAwKQorCQlhcmNoRHVt cEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicGxh aW4iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0 cmNhc2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsK KwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09IDApCisJCWFyY2hEdW1w Rm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgb3V0cHV0 IGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwi dFwiIiwKKwkJCQkgZm9ybWF0KTsKKworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30KKworLyoK KyAqIGNyZWF0ZUR1bXBJZAorICoKKyAqIFRoaXMgd2lsbCByZXR1cm4gbmV4dCBsYXN0IHVzZWQg b2lkLgorICovCitzdGF0aWMgaW50CitjcmVhdGVEdW1wSWQodm9pZCkKK3sKKwlyZXR1cm4gKytk dW1wSWRWYWw7Cit9CisKKy8qCisgKiBjcmVhdGVPbmVBcmNoaXZlRW50cnkKKyAqCisgKiBUaGlz IGNyZWF0ZXMgb25lIGFyY2hpdmUgZW50cnkgZm9yIG5vbi10ZXh0IGR1bXAgZm9ybWF0LgorICov CitzdGF0aWMgdm9pZAorY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNvbnN0IGNoYXIgKnF1ZXJ5LCBj b25zdCBjaGFyICp0YWcpCit7CisJQ2F0YWxvZ0lkCW5pbENhdGFsb2dJZCA9IHswLCAwfTsKKwor CUFzc2VydChmb3V0ICE9IE5VTEwpOworCisJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJIG5pbENh dGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJ RCAqLworCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKKwkJCQkJCQkgIC5kZXNjcmlwdGlv biA9IHRhZywKKwkJCQkJCQkgIC5zZWN0aW9uID0gU0VDVElPTl9QUkVfREFUQSwKKwkJCQkJCQkg IC5jcmVhdGVTdG10ID0gcXVlcnkpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9w Z19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IDg0YjhkNDEw YzllLi4yYzgzYmI2NWQ5YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoK ICAqIHBnX3Jlc3RvcmUuYwogICoJcGdfcmVzdG9yZSBpcyBhbiB1dGlsaXR5IGV4dHJhY3Rpbmcg cG9zdGdyZXMgZGF0YWJhc2UgZGVmaW5pdGlvbnMKLSAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBj cmVhdGVkIGJ5IHBnX2R1bXAgdXNpbmcgdGhlIGFyY2hpdmVyCisgKglmcm9tIGEgYmFja3VwIGFy Y2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wL3BnX2R1bXBhbGwgdXNpbmcgdGhlIGFyY2hpdmVyCiAg KglpbnRlcmZhY2UuCiAgKgogICoJcGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhlIGJhY2t1cCBhcmNo aXZlIGFuZApAQCAtNDEsMTIgKzQxLDE2IEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAog I2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBIQVZFX1RF Uk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29tbW9u L3N0cmluZy5oIgorI2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5o IgogI2luY2x1ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxz L3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9s b25nLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKQEAgLTU0LDE4ICs1OCw0NCBAQAogCiBzdGF0 aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jl c3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMp Oworc3RhdGljIGJvb2wgZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwg Y29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludAlyZXN0b3JlX29uZV9kYXRhYmFzZShj b25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJCQkJ IGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLAorCQkJCQkJCQkgYm9vbCBnbG9iYWxz X29ubHkpOworc3RhdGljIGludAlyZXN0b3JlX2dsb2JhbF9vYmplY3RzKGNvbnN0IGNoYXIgKmlu cHV0RmlsZVNwZWMsCisJCQkJCQkJCSAgIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29y a2VycywKKwkJCQkJCQkJICAgYm9vbCBnbG9iYWxzX29ubHkpOworc3RhdGljIGludAlyZXN0b3Jl X2FsbF9kYXRhYmFzZXMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJCQkJICBTaW1w bGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBp bnQgbnVtV29ya2Vycyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQ R2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAor CQkJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMg aW50CWdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0 aCwKKwkJCQkJCQkJCQkgICBTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworCitzdGF0 aWMgYm9vbCBkYXRhX29ubHkgPSBmYWxzZTsKKworLyoKKyAqIFN0b3JlcyBhIGRhdGFiYXNlIE9J RCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgRGJPaWRO YW1lCit7CisJT2lkCQkJb2lkOworCWNoYXIJCXN0cltGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAv KiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGhlcmUgKi8KK30JCQlEYk9pZE5hbWU7CisKIAogaW50 CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAqb3B0czsK IAlpbnQJCQljOwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsKLQlB cmNoaXZlICAgICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVjOwotCWJvb2wJCWRhdGFfb25s eSA9IGZhbHNlOwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9lcnJvcnMg PSAwOworCWJvb2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNpbXBsZVN0cmluZ0xpc3QgZGJf ZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJp Z2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CiAJc3RhdGlj IGludAlpZl9leGlzdHMgPSAwOwpAQCAtODksNiArMTE5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAsIE5V TEwsICdDJ30sCiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxzLW9u bHkiLCAwLCBOVUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsiZXhp dC1vbi1lcnJvciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBOVUxM LCAnTid9LApAQCAtMTQyLDYgKzE3Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQl7InN0YXRpc3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3RhdGlzdGljc19vbmx5LCAxfSwK IAkJeyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCiAJCXsicmVzdHJpY3Qt a2V5IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAorCQl7ImV4Y2x1ZGUtZGF0YWJhc2Ui LCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgN30sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJ fTsKQEAgLTE3MCw3ICsyMDIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQog CX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJ Omo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9u ZyhhcmdjLCBhcmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndX eDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAg LTE5NywxMSArMjI5LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChz dHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9w dGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xv YmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOworCQkJCWJyZWFr OwogCQkJY2FzZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMt PmNwYXJhbXMucGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7Ci0KIAkJCWNh c2UgJ2onOgkJCS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMgKi8KIAkJCQlpZiAoIW9wdGlvbl9w YXJzZV9pbnQob3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJCQkJCSAgUEdfTUFYX0pPQlMs CkBAIC0zMjEsNiArMzU2LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCW9w dHMtPnJlc3RyaWN0X2tleSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCisJCQlj YXNlIDc6CQkJCS8qIGRhdGFiYXNlIHBhdHRlcm5zIHRvIHNraXAgKi8KKwkJCQlzaW1wbGVfc3Ry aW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJCWJyZWFr OworCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNv bXBsYWludCAqLwogCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3Ig bW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CkBAIC0zNDcsNiArMzg2LDE0IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9w dHMtPmZpbGVuYW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1k Ly0tZGJuYW1lIGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9l eGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19s b2dfZXJyb3IoIm9wdGlvbiAlcyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoICVzIiwKKwkJ CQkJICItLWV4Y2x1ZGUtZGF0YWJhc2UiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9n X2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHBy b2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyogU2hvdWxkIGdldCBhdCBtb3N0 IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNlciBpcyBjb25mdXNlZCAqLwogCWlmIChvcHRzLT5j cGFyYW1zLmRibmFtZSkKIAl7CkBAIC00MjAsNiArNDY3LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCQlwZ19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQg dG9nZXRoZXIiLAogCQkJCSAiLTEvLS1zaW5nbGUtdHJhbnNhY3Rpb24iLCAiLS10cmFuc2FjdGlv bi1zaXplIik7CiAKKwlpZiAoZGF0YV9vbmx5ICYmIGdsb2JhbHNfb25seSkKKwkJcGdfZmF0YWwo Im9wdGlvbnMgJXMgYW5kICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIiwKKwkJCQkgIi1hLy0t ZGF0YS1vbmx5IiwgIi1nLy0tZ2xvYmFscy1vbmx5Iik7CisKIAkvKgogCSAqIC1DIGlzIG5vdCBj b21wYXRpYmxlIHdpdGggLTEsIGJlY2F1c2Ugd2UgY2FuJ3QgY3JlYXRlIGEgZGF0YWJhc2UgaW5z aWRlCiAJICogYSB0cmFuc2FjdGlvbiBibG9jay4KQEAgLTQ4NSw2ICs1MzYsMTI4IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9ybWF0TmFtZSk7CiAJfQogCisJ LyoKKwkgKiBJZiB0b2MuZ2xvIGZpbGUgaXMgcHJlc2VudCwgdGhlbiByZXN0b3JlIGFsbCB0aGUg ZGF0YWJhc2VzIGZyb20KKwkgKiBtYXAuZGF0LCBidXQgc2tpcCByZXN0b3JpbmcgdGhvc2UgbWF0 Y2hpbmcgLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgorCSAqLworCWlmIChpbnB1dEZpbGVT cGVjICE9IE5VTEwgJiYKKwkJKGZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVj LCAidG9jLmdsbyIpKSkKKwl7CisJCS8qCisJCSAqIENhbiBvbmx5IHVzZSAtLWxpc3Qgb3IgLS11 c2UtbGlzdCBvcHRpb25zIHdpdGggYSBzaW5nbGUgZGF0YWJhc2UKKwkJICogZHVtcC4KKwkJICov CisJCWlmIChvcHRzLT50b2NTdW1tYXJ5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAlcyBjYW5ub3Qg YmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbCIs CisJCQkJCSAiLWwvLS1saXN0Iik7CisJCWVsc2UgaWYgKG9wdHMtPnRvY0ZpbGUpCisJCQlwZ19m YXRhbCgib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJICItTC8tLXVzZS1saXN0Iik7CisKKwkJLyoK KwkJICogVG8gcmVzdG9yZSBmcm9tIGEgcGdfZHVtcGFsbCBhcmNoaXZlLCAtQyAoY3JlYXRlIGRh dGFiYXNlKSBvcHRpb24KKwkJICogbXVzdCBiZSBzcGVjaWZpZWQgdW5sZXNzIHdlIGFyZSBvbmx5 IHJlc3RvcmluZyBnbG9iYWxzLgorCQkgKi8KKwkJaWYgKCFnbG9iYWxzX29ubHkgJiYgb3B0cy0+ Y3JlYXRlREIgIT0gMSkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJvcHRpb24gJXMgbXVzdCBiZSBz cGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwi LAorCQkJCQkJICItQy8tLWNyZWF0ZSIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVz IC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJCXBnX2xvZ19l cnJvcl9oaW50KCJJbmRpdmlkdWFsIGRhdGFiYXNlcyBjYW4gYmUgcmVzdG9yZWQgdXNpbmcgdGhl aXIgc3BlY2lmaWMgYXJjaGl2ZXMuIik7CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCisJCS8q IElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQlpZiAoZ2xvYmFs c19vbmx5KQorCQl7CisJCQljaGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCisJCQkvKiBT ZXQgcGF0aCBmb3IgdG9jLmdsbyBmaWxlLiAqLworCQkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1B WFBHUEFUSCwgIiVzL3RvYy5nbG8iLCBpbnB1dEZpbGVTcGVjKTsKKwkJCW5fZXJyb3JzID0gcmVz dG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0aCwgb3B0cywgbnVtV29ya2VycywgZ2xvYmFs c19vbmx5KTsKKworCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlIHJlc3RvcmluZyBza2lwcGVkIGJl Y2F1c2Ugb3B0aW9uICVzIHdhcyBzcGVjaWZpZWQiLAorCQkJCQkJIi1nLy0tZ2xvYmFscy1vbmx5 Iik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNl cyBmcm9tIG1hcC5kYXQgKi8KKwkJCW5fZXJyb3JzID0gcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGlu cHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJCQkJCQkJCSBvcHRzLCBudW1X b3JrZXJzKTsKKwkJfQorCisJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQlzaW1wbGVf c3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJfQorCWVsc2UKKwl7 CisJCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwkJeworCQkJc2ltcGxl X3N0cmluZ19saXN0X2Rlc3Ryb3koJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCQkJcGdfZmF0YWwo Im9wdGlvbiAlcyBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3Jl YXRlZCBieSBwZ19kdW1wYWxsIiwKKwkJCQkJICItLWV4Y2x1ZGUtZGF0YWJhc2UiKTsKKwkJfQor CisJCWlmIChnbG9iYWxzX29ubHkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBiZSB1c2Vk IG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAor CQkJCQkgIi1nLy0tZ2xvYmFscy1vbmx5Iik7CisKKwkJLyogUHJvY2VzcyBpZiB0b2MuZ2xvIGZp bGUgZG9lcyBub3QgZXhpc3QuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2Uo aW5wdXRGaWxlU3BlYywgb3B0cywKKwkJCQkJCQkJCQludW1Xb3JrZXJzLCBmYWxzZSwgZ2xvYmFs c19vbmx5KTsKKwl9CisKKwkvKiBEb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJv cnMgZHVyaW5nIHJlc3RvcmUuICovCisJaWYgKG5fZXJyb3JzKQorCXsKKwkJcGdfbG9nX3dhcm5p bmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgbl9lcnJvcnMpOworCQlyZXR1cm4g MTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlc3RvcmVfZ2xvYmFsX29iamVjdHMK KyAqCisgKiBUaGlzIHJlc3RvcmUgYWxsIGdsb2JhbCBvYmplY3RzLgorICoKKyAqIElmIGdsb2Jh bHNfb25seSBpcyBzZXQsIHRoZW4gc2tpcCBEUk9QIERBVEFCQVNFIGNvbW1hbmRzIGZyb20gcmVz dG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhjb25zdCBjaGFy ICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJICAgaW50IG51bVdv cmtlcnMsIGJvb2wgZ2xvYmFsc19vbmx5KQoreworCWludAkJCW5lcnJvciA9IDA7CisJaW50CQkJ Zm9ybWF0ID0gb3B0cy0+Zm9ybWF0OworCisJLyogU2V0IGZvcm1hdCBhcyBjdXN0b20gc28gdGhh dCB0b2MuZ2xvIGZpbGUgY2FuIGJlIHJlYWQuICovCisJb3B0cy0+Zm9ybWF0ID0gYXJjaEN1c3Rv bTsKKworCWlmICghZGF0YV9vbmx5KQorCQluZXJyb3IgPSByZXN0b3JlX29uZV9kYXRhYmFzZShp bnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzLAorCQkJCQkJCQkJICBmYWxzZSwgZ2xvYmFs c19vbmx5KTsKKworCS8qIFJlc2V0IGZvcm1hdCB2YWx1ZS4gKi8KKwlvcHRzLT5mb3JtYXQgPSBm b3JtYXQ7CisKKwlyZXR1cm4gbmVycm9yOworfQorCisvKgorICogcmVzdG9yZV9vbmVfZGF0YWJh c2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRhdCBm aWxlLgorICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVz dG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9vbmVfZGF0YWJhc2UoY29uc3QgY2hhciAq aW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCSBpbnQgbnVtV29ya2Vy cywgYm9vbCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29ubHkpCit7CisJQXJjaGl2ZSAgICAq QUg7CisJaW50CQkJbl9lcnJvcnM7CisKIAlBSCA9IE9wZW5BcmNoaXZlKGlucHV0RmlsZVNwZWMs IG9wdHMtPmZvcm1hdCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0cyk7CkBA IC00OTIsOSArNjY1LDE1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCS8qCiAJICog V2UgZG9uJ3QgaGF2ZSBhIGNvbm5lY3Rpb24geWV0IGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyLiBU aGUgY29ubmVjdGlvbgogCSAqIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgYW5kIGlmIHdlIHRlcm1p bmF0ZSB0aHJvdWdoIGV4aXRfbmljZWx5KCkgd2hpbGUKLQkgKiBpdCdzIHN0aWxsIE5VTEwsIHRo ZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9wLgorCSAqIGl0J3Mgc3RpbGwg TlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEgbm8tb3AuIElmIHdlIGFy ZQorCSAqIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMsIHRoZW4gb25seSB1cGRhdGUgQVgg aGFuZGxlIGZvciBjbGVhbnVwIGFzCisJICogdGhlIHByZXZpb3VzIGVudHJ5IHdhcyBhbHJlYWR5 IGluIHRoZSBhcnJheSBhbmQgd2UgaGFkIGNsb3NlZCBwcmV2aW91cworCSAqIGNvbm5lY3Rpb24s IHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgYXJyYXkgc2xvdC4KIAkgKi8KLQlvbl9leGl0X2Nsb3Nl X2FyY2hpdmUoQUgpOworCWlmICghYXBwZW5kX2RhdGEpCisJCW9uX2V4aXRfY2xvc2VfYXJjaGl2 ZShBSCk7CisJZWxzZQorCQlyZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CiAKIAkv KiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93IG5vaXN5IHRvIGJlICovCiAJQUgtPnZlcmJvc2Ug PSBvcHRzLT52ZXJib3NlOwpAQCAtNTE0LDI1ICs2OTMsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJZWxzZQogCXsKIAkJUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7 Ci0JCVJlc3RvcmVBcmNoaXZlKEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRh LCBnbG9iYWxzX29ubHkpOwogCX0KIAotCS8qIGRvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25v cmVkIGVycm9ycyAqLwotCWlmIChBSC0+bl9lcnJvcnMpCi0JCXBnX2xvZ193YXJuaW5nKCJlcnJv cnMgaWdub3JlZCBvbiByZXN0b3JlOiAlZCIsIEFILT5uX2Vycm9ycyk7CisJbl9lcnJvcnMgPSBB SC0+bl9lcnJvcnM7CiAKIAkvKiBBSCBtYXkgYmUgZnJlZWQgaW4gQ2xvc2VBcmNoaXZlPyAqLwot CWV4aXRfY29kZSA9IEFILT5uX2Vycm9ycyA/IDEgOiAwOwotCiAJQ2xvc2VBcmNoaXZlKEFIKTsK IAotCXJldHVybiBleGl0X2NvZGU7CisJcmV0dXJuIG5fZXJyb3JzOwogfQogCiBzdGF0aWMgdm9p ZAogdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiB7Ci0JcHJpbnRmKF8oIiVzIHJlc3RvcmVz IGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBmcm9tIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1w LlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyByZXN0b3JlcyBQb3N0Z3JlU1FMIGRh dGFiYXNlcyBmcm9tIGFyY2hpdmVzIGNyZWF0ZWQgYnkgcGdfZHVtcCBvciBwZ19kdW1wYWxsLlxu XG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAl cyBbT1BUSU9OXS4uLiBbRklMRV1cbiIpLCBwcm9nbmFtZSk7CiAKQEAgLTU1MCw2ICs3MjUsNyBA QCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAg ICAgICAgICAgICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNy ZWF0aW5nXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBj cmVhdGUgdGhlIHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQt b24tZXJyb3IgICAgICAgICAgZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxu IikpOworCXByaW50ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBv bmx5IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwg LS1pbmRleD1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmlu dGYoXygiICAtaiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxs ZWwgam9icyB0byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklM RU5BTUUgICAgICB1c2UgdGFibGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBA IC01NjYsNiArNzQyLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8o IiAgLTEsIC0tc2luZ2xlLXRyYW5zYWN0aW9uICAgICByZXN0b3JlIGFzIGEgc2luZ2xlIHRyYW5z YWN0aW9uXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1kaXNhYmxlLXRyaWdnZXJzICAgICAgICAgICBk aXNhYmxlIHRyaWdnZXJzIGR1cmluZyBkYXRhLW9ubHkgcmVzdG9yZVxuIikpOwogCXByaW50Zihf KCIgIC0tZW5hYmxlLXJvdy1zZWN1cml0eSAgICAgICAgZW5hYmxlIHJvdyBzZWN1cml0eVxuIikp OworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOICAgZG8gbm90IHJlc3Rv cmUgdGhlIHNwZWNpZmllZCBkYXRhYmFzZShzKVxuIikpOwogCXByaW50ZihfKCIgIC0tZmlsdGVy PUZJTEVOQU1FICAgICAgICAgICAgcmVzdG9yZSBvciBza2lwIG9iamVjdHMgYmFzZWQgb24gZXhw cmVzc2lvbnNcbiIKIAkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEZJTEVO QU1FXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1pZi1leGlzdHMgICAgICAgICAgICAgICAgICB1c2Ug SUYgRVhJU1RTIHdoZW4gZHJvcHBpbmcgb2JqZWN0c1xuIikpOwpAQCAtNjAxLDggKzc3OCw4IEBA IHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC0tcm9sZT1ST0xFTkFN RSAgICAgICAgICBkbyBTRVQgUk9MRSBiZWZvcmUgcmVzdG9yZVxuIikpOwogCiAJcHJpbnRmKF8o IlxuIgotCQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1ULCBhbmQgLS1zZWN0 aW9uIGNhbiBiZSBjb21iaW5lZCBhbmQgc3BlY2lmaWVkXG4iCi0JCQkgIm11bHRpcGxlIHRpbWVz IHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOworCQkJICJUaGUgb3B0aW9ucyAtSSwg LW4sIC1OLCAtUCwgLXQsIC1ULCAtLXNlY3Rpb24sIGFuZCAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fu IGJlXG4iCisJCQkgImNvbWJpbmVkIGFuZCBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgdG8gc2Vs ZWN0IG11bHRpcGxlIG9iamVjdHMuXG4iKSk7CiAJcHJpbnRmKF8oIlxuSWYgbm8gaW5wdXQgZmls ZSBuYW1lIGlzIHN1cHBsaWVkLCB0aGVuIHN0YW5kYXJkIGlucHV0IGlzIHVzZWQuXG5cbiIpKTsK IAlwcmludGYoXygiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIpLCBQQUNLQUdFX0JVR1JFUE9SVCk7 CiAJcHJpbnRmKF8oIiVzIGhvbWUgcGFnZTogPCVzPlxuIiksIFBBQ0tBR0VfTkFNRSwgUEFDS0FH RV9VUkwpOwpAQCAtNzA3LDMgKzg4NCw0MDcgQEAgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKQogCiAJZmlsdGVyX2ZyZWUoJmZz dGF0ZSk7CiB9CisKKy8qCisgKiBmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkKKyAqCisgKiBSZXR1 cm5zIHRydWUgaWYgdGhlIGZpbGUgZXhpc3RzIGluIHRoZSBnaXZlbiBkaXJlY3RvcnkuCisgKi8K K3N0YXRpYyBib29sCitmaWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBj b25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyCQlidWZbTUFY UEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVzIiwgZGlyLCBm aWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5hbWUgdG9vIGxv bmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09IDAgJiYgU19J U1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3Rv cmUKKyAqCisgKiBUaGlzIHdpbGwgbWFyayBmb3Igc2tpcHBpbmcgYW55IGVudHJpZXMgZnJvbSBk Ym5hbWVfb2lkX2xpc3QgdGhhdCBwYXR0ZXJuIG1hdGNoIGFuCisgKiBlbnRyeSBpbiB0aGUgZGJf ZXhjbHVkZV9wYXR0ZXJucyBsaXN0LgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXRh YmFzZSB0byBiZSByZXN0b3JlZC4KKyAqCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVzX2xp c3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkJU2ltcGxlUHRyTGlzdCAqZGJuYW1l X29pZF9saXN0LAorCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykK K3sKKwlpbnQJCQljb3VudF9kYiA9IDA7CisJUFFFeHBCdWZmZXIgcXVlcnk7CisJUEdyZXN1bHQg ICAqcmVzOworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJaWYgKCFjb25uICYm IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCQlwZ19sb2dfaW5mbygiY29uc2lk ZXJpbmcgUEFUVEVSTiBhcyBOQU1FIGZvciAtLWV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uIGFzIG5v IGRhdGFiYXNlIGNvbm5lY3Rpb24gd2hpbGUgZG9pbmcgcGdfcmVzdG9yZSIpOworCisJLyoKKwkg KiBQcm9jZXNzIG9uZSBieSBvbmUgYWxsIGRibmFtZXMgYW5kIGlmIHNwZWNpZmllZCB0byBza2lw IHJlc3RvcmluZywgdGhlbgorCSAqIHJlbW92ZSBkYm5hbWUgZnJvbSBsaXN0LgorCSAqLworCWZv ciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7CisJ CSBkYl9jZWxsOyBkYl9jZWxsID0gZGJfY2VsbC0+bmV4dCkKKwl7CisJCURiT2lkTmFtZSAgKmRi aWRuYW1lID0gKERiT2lkTmFtZSAqKSBkYl9jZWxsLT5wdHI7CisJCWJvb2wJCXNraXBfZGJfcmVz dG9yZSA9IGZhbHNlOworCQlQUUV4cEJ1ZmZlciBkYl9saXQgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCisJCWFwcGVuZFN0cmluZ0xpdGVyYWxDb25uKGRiX2xpdCwgZGJpZG5hbWUtPnN0ciwgY29u bik7CisKKwkJZm9yIChTaW1wbGVTdHJpbmdMaXN0Q2VsbCAqcGF0X2NlbGwgPSBkYl9leGNsdWRl X3BhdHRlcm5zLmhlYWQ7IHBhdF9jZWxsOyBwYXRfY2VsbCA9IHBhdF9jZWxsLT5uZXh0KQorCQl7 CisJCQkvKgorCQkJICogSWYgdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2ggdGhlbiB3ZSBkb24ndCBu ZWVkIHRvIHRyeSBhIHBhdHRlcm4KKwkJCSAqIG1hdGNoCisJCQkgKi8KKwkJCWlmIChwZ19zdHJj YXNlY21wKGRiaWRuYW1lLT5zdHIsIHBhdF9jZWxsLT52YWwpID09IDApCisJCQkJc2tpcF9kYl9y ZXN0b3JlID0gdHJ1ZTsKKwkJCS8qIE90aGVyd2lzZSwgdHJ5IGEgcGF0dGVybiBtYXRjaCBpZiB0 aGVyZSBpcyBhIGNvbm5lY3Rpb24gKi8KKwkJCWVsc2UgaWYgKGNvbm4pCisJCQl7CisJCQkJaW50 CQkJZG90Y250OworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJTRUxFQ1QgMSAi KTsKKwkJCQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4oY29ubiwgcXVlcnksIHBhdF9jZWxsLT52YWws IGZhbHNlLAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgZGJfbGl0LT5kYXRhLAorCQkJCQkJCQkJ ICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKKworCQkJCWlmIChkb3RjbnQgPiAwKQorCQkJ CXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFsaWZpZWQgbmFtZSAodG9vIG1hbnkg ZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkgZGJpZG5hbWUtPnN0cik7CisJCQkJCVBRZmlu aXNoKGNvbm4pOworCQkJCQlleGl0X25pY2VseSgxKTsKKwkJCQl9CisKKwkJCQlyZXMgPSBleGVj dXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEsIGZhbHNlKTsKKworCQkJCWlmICgoUFFyZXN1bHRT dGF0dXMocmVzKSA9PSBQR1JFU19UVVBMRVNfT0spICYmIFBRbnR1cGxlcyhyZXMpKQorCQkJCXsK KwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCQkJcGdfbG9nX2luZm8oImRhdGFiYXNl IG5hbWUgXCIlc1wiIG1hdGNoZXMgZXhjbHVkZSBwYXR0ZXJuIFwiJXNcIiIsIGRiaWRuYW1lLT5z dHIsIHBhdF9jZWxsLT52YWwpOworCQkJCX0KKworCQkJCVBRY2xlYXIocmVzKTsKKwkJCQlyZXNl dFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCX0KKworCQkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJ CQlicmVhazsKKwkJfQorCisJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihkYl9saXQpOworCisJCS8qCisJ CSAqIE1hcmsgZGIgdG8gYmUgc2tpcHBlZCBvciBpbmNyZW1lbnQgdGhlIGNvdW50ZXIgb2YgZGJz IHRvIGJlCisJCSAqIHJlc3RvcmVkCisJCSAqLworCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQl7 CisJCQlwZ19sb2dfaW5mbygiZXhjbHVkaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRiaWRuYW1lLT5z dHIpOworCQkJZGJpZG5hbWUtPm9pZCA9IEludmFsaWRPaWQ7CisJCX0KKwkJZWxzZQorCQl7CisJ CQljb3VudF9kYisrOworCQl9CisJfQorCisJZGVzdHJveVBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwor CXJldHVybiBjb3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9t ZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFkIGxpbmUgYnkgbGluZSBhbmQg dGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFtZXMgYW5kIGNvcnJlc3BvbmRp bmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBkYXRhYmFzZSBuYW1l cyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVfb2lkX2xpc3Rf ZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlUHRyTGlzdCAqZGJuYW1l X29pZF9saXN0KQoreworCVN0cmluZ0luZm9EYXRhIGxpbmVidWY7CisJRklMRQkgICAqcGZpbGU7 CisJY2hhcgkJbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCWludAkJCWNvdW50ID0gMDsKKwor CisJLyoKKwkgKiBJZiB0aGVyZSBpcyBubyBtYXAuZGF0IGZpbGUgaW4gZHVtcCwgdGhlbiByZXR1 cm4gZnJvbSBoZXJlIGFzIHRoZXJlIGlzCisJICogbm8gZGF0YWJhc2UgdG8gcmVzdG9yZS4KKwkg Ki8KKwlpZiAoIWZpbGVfZXhpc3RzX2luX2RpcmVjdG9yeShkdW1wZGlycGF0aCwgIm1hcC5kYXQi KSkKKwl7CisJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSByZXN0b3JpbmcgaXMgc2tpcHBlZCBiZWNh dXNlIGZpbGUgXCIlc1wiIGRvZXMgbm90IGV4aXN0IGluIGRpcmVjdG9yeSBcIiVzXCIiLCAibWFw LmRhdCIsIGR1bXBkaXJwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25wcmludGYobWFwX2Zp bGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8qIE9w ZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklO QVJZX1IpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBmaWxlIFwiJXNcIjogJW0iLCBtYXBfZmlsZV9wYXRoKTsKKworCWluaXRTdHJpbmdJbmZvKCZs aW5lYnVmKTsKKworCS8qIEFwcGVuZCBhbGwgdGhlIGRibmFtZS9kYl9vaWQgY29tYmluYXRpb25z IHRvIHRoZSBsaXN0LiAqLworCXdoaWxlIChwZ19nZXRfbGluZV9idWYocGZpbGUsICZsaW5lYnVm KSkKKwl7CisJCU9pZAkJCWRiX29pZCA9IEludmFsaWRPaWQ7CisJCWNoYXIJICAgKmRibmFtZTsK KwkJRGJPaWROYW1lICAqZGJpZG5hbWU7CisJCWludAkJCW5hbWVsZW47CisJCWNoYXIJICAgKnAg PSBsaW5lYnVmLmRhdGE7CisKKwkJLyogRXh0cmFjdCBkYm9pZC4gKi8KKwkJd2hpbGUgKGlzZGln aXQoKHVuc2lnbmVkIGNoYXIpICpwKSkKKwkJCXArKzsKKwkJaWYgKHAgPiBsaW5lYnVmLmRhdGEg JiYgKnAgPT0gJyAnKQorCQl7CisJCQlzc2NhbmYobGluZWJ1Zi5kYXRhLCAiJXUiLCAmZGJfb2lk KTsKKwkJCXArKzsKKwkJfQorCisJCS8qIGRibmFtZSBpcyB0aGUgcmVzdCBvZiB0aGUgbGluZSAq LworCQlkYm5hbWUgPSBwOworCQluYW1lbGVuID0gc3RybGVuKGRibmFtZSk7CisKKwkJLyogUmVw b3J0IGVycm9yIGFuZCBleGl0IGlmIHRoZSBmaWxlIGhhcyBhbnkgY29ycnVwdGVkIGRhdGEuICov CisJCWlmICghT2lkSXNWYWxpZChkYl9vaWQpIHx8IG5hbWVsZW4gPD0gMSkKKwkJCXBnX2ZhdGFs KCJpbnZhbGlkIGVudHJ5IGluIGZpbGUgXCIlc1wiIG9uIGxpbmUgJWQiLCBtYXBfZmlsZV9wYXRo LAorCQkJCQkgY291bnQgKyAxKTsKKworCQlwZ19sb2dfaW5mbygiZm91bmQgZGF0YWJhc2UgXCIl c1wiIChPSUQ6ICV1KSBpbiBmaWxlIFwiJXNcIiIsCisJCQkJCWRibmFtZSwgZGJfb2lkLCBtYXBf ZmlsZV9wYXRoKTsKKworCQlkYmlkbmFtZSA9IHBnX21hbGxvYyhvZmZzZXRvZihEYk9pZE5hbWUs IHN0cikgKyBuYW1lbGVuICsgMSk7CisJCWRiaWRuYW1lLT5vaWQgPSBkYl9vaWQ7CisJCXN0cmxj cHkoZGJpZG5hbWUtPnN0ciwgZGJuYW1lLCBuYW1lbGVuKTsKKworCQlzaW1wbGVfcHRyX2xpc3Rf YXBwZW5kKGRibmFtZV9vaWRfbGlzdCwgZGJpZG5hbWUpOworCQljb3VudCsrOworCX0KKworCS8q IENsb3NlIG1hcC5kYXQgZmlsZS4gKi8KKwlmY2xvc2UocGZpbGUpOworCisJcmV0dXJuIGNvdW50 OworfQorCisvKgorICogcmVzdG9yZV9hbGxfZGF0YWJhc2VzCisgKgorICogVGhpcyB3aWxsIHJl c3RvcmUgZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3Rvcnkg YmFzZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVz dG9yaW5nIGZvciBkYXRhYmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUt ZGF0YWJhc2Ugb3B0aW9uLgorICoKKyAqIHJldHVybnMsIG51bWJlciBvZiBlcnJvcnMgd2hpbGUg ZG9pbmcgcmVzdG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGNv bnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsCisJCQkJCSAgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNs dWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJICBpbnQgbnVtV29ya2Vy cykKK3sKKwlTaW1wbGVQdHJMaXN0IGRibmFtZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxMfTsKKwlp bnQJCQludW1fZGJfcmVzdG9yZSA9IDA7CisJaW50CQkJbnVtX3RvdGFsX2RiOworCWludAkJCW5f ZXJyb3JzX3RvdGFsOworCWNoYXIJICAgKmNvbm5lY3RlZF9kYiA9IE5VTEw7CisJYm9vbAkJZHVt cERhdGEgPSBvcHRzLT5kdW1wRGF0YTsKKwlib29sCQlkdW1wU2NoZW1hID0gb3B0cy0+ZHVtcFNj aGVtYTsKKwlib29sCQlkdW1wU3RhdGlzdGljcyA9IG9wdHMtPmR1bXBTY2hlbWE7CisJUEdjb25u CSAgICpjb25uID0gTlVMTDsKKwljaGFyCQlnbG9iYWxfcGF0aFtNQVhQR1BBVEhdOworCisJLyog U2V0IHBhdGggZm9yIHRvYy5nbG8gZmlsZS4gKi8KKwlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFY UEdQQVRILCAiJXMvdG9jLmdsbyIsIGlucHV0RmlsZVNwZWMpOworCisJLyogU2F2ZSBkYiBuYW1l IHRvIHJldXNlIGl0IGZvciBhbGwgdGhlIGRhdGFiYXNlLiAqLworCWlmIChvcHRzLT5jcGFyYW1z LmRibmFtZSkKKwkJY29ubmVjdGVkX2RiID0gb3B0cy0+Y3BhcmFtcy5kYm5hbWU7CisKKwludW1f dG90YWxfZGIgPSBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoaW5wdXRGaWxlU3BlYywg JmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKiBJZiBtYXAuZGF0IGhhcyBubyBlbnRyaWVzLCByZXR1 cm4gYWZ0ZXIgcHJvY2Vzc2luZyBnbG9iYWwgY29tbWFuZHMuICovCisJaWYgKGRibmFtZV9vaWRf bGlzdC5oZWFkID09IE5VTEwpCisJCXJldHVybiByZXN0b3JlX2dsb2JhbF9vYmplY3RzKGdsb2Jh bF9wYXRoLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSk7CisKKwlwZ19sb2dfaW5mbyhuZ2V0dGV4 dCgiZm91bmQgJWQgZGF0YWJhc2UgbmFtZSBpbiBcIiVzXCIiLAorCQkJCQkJICJmb3VuZCAlZCBk YXRhYmFzZSBuYW1lcyBpbiBcIiVzXCIiLAorCQkJCQkJIG51bV90b3RhbF9kYiksCisJCQkJbnVt X3RvdGFsX2RiLCAibWFwLmRhdCIpOworCisJLyoKKwkgKiBJZiBleGNsdWRlLXBhdHRlcm5zIGlz IGdpdmVuLCB0aGVuIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlIHRvIHByb2Nlc3MKKwkgKiBpdC4K KwkgKi8KKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwpCisJeworCQlpZiAo b3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCXsKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2Uob3B0 cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkg ICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFV TFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7 CisKKwkJCWlmICghY29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0 YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJaWYgKCFjb25u KQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIl c1wiIiwgInBvc3RncmVzIik7CisKKwkJCWNvbm4gPSBDb25uZWN0RGF0YWJhc2UoInBvc3RncmVz IiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCSAgIG9wdHMtPmNwYXJhbXMu cGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJCQkJICAg ZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQkJLyogVHJ5IHdp dGggdGVtcGxhdGUxLiAqLworCQkJaWYgKCFjb25uKQorCQkJeworCQkJCXBnX2xvZ19pbmZvKCJ0 cnlpbmcgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCAidGVtcGxhdGUxIik7CisKKwkJ CQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1z LnBnaG9zdCwKKwkJCQkJCQkJCSAgIG9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1z LnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJCQkJCQkJCSAgIGZhbHNlLCBwcm9nbmFtZSwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIGZpbHRlciB0 aGUgZGIgbGlzdCBhY2NvcmRpbmcgdG8gdGhlIGV4Y2x1ZGUgcGF0dGVybnMKKwkgKi8KKwludW1f ZGJfcmVzdG9yZSA9IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29p ZF9saXN0LAorCQkJCQkJCQkJCQkJIGRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyogQ2xvc2Ug dGhlIGRiIGNvbm5lY3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0ZXJu cy4gKi8KKwlpZiAoY29ubikKKwkJUFFmaW5pc2goY29ubik7CisKKwkvKiBPcGVuIHRvYy5kYXQg ZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLwor CW5fZXJyb3JzX3RvdGFsID0gcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0aCwgb3B0 cywgbnVtV29ya2VycywgZmFsc2UpOworCisJLyogRXhpdCBpZiBubyBkYiBuZWVkcyB0byBiZSBy ZXN0b3JlZC4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCB8fCBudW1fZGJf cmVzdG9yZSA9PSAwKQorCXsKKwkJcGdfbG9nX2luZm8obmdldHRleHQoIm5vIGRhdGFiYXNlIG5l ZWRzIHJlc3RvcmluZyBvdXQgb2YgJWQgZGF0YWJhc2UiLAorCQkJCQkJCSAibm8gZGF0YWJhc2Ug bmVlZHMgcmVzdG9yaW5nIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fdG90YWxfZGIpLAorCQkJ CQludW1fdG90YWxfZGIpOworCQlyZXR1cm4gbl9lcnJvcnNfdG90YWw7CisJfQorCisJcGdfbG9n X2luZm8oIm5lZWQgdG8gcmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0IG9mICVkIGRhdGFiYXNlcyIs IG51bV9kYl9yZXN0b3JlLCBudW1fdG90YWxfZGIpOworCisJLyoKKwkgKiBXZSBoYXZlIGEgbGlz dCBvZiBkYXRhYmFzZXMgdG8gcmVzdG9yZSBhZnRlciBwcm9jZXNzaW5nIHRoZQorCSAqIGV4Y2x1 ZGUtZGF0YWJhc2Ugc3dpdGNoKGVzKS4gIE5vdyB3ZSBjYW4gcmVzdG9yZSB0aGVtIG9uZSBieSBv bmUuCisJICovCisJZm9yIChTaW1wbGVQdHJMaXN0Q2VsbCAqZGJfY2VsbCA9IGRibmFtZV9vaWRf bGlzdC5oZWFkOworCQkgZGJfY2VsbDsgZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJeworCQlE Yk9pZE5hbWUgICpkYmlkbmFtZSA9IChEYk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOworCQljaGFy CQlzdWJkaXJwYXRoW01BWFBHUEFUSF07CisJCWNoYXIJCXN1YmRpcmRicGF0aFtNQVhQR1BBVEhd OworCQljaGFyCQlkYmZpbGVuYW1lW01BWFBHUEFUSF07CisJCWludAkJCW5fZXJyb3JzOworCisJ CS8qIGlnbm9yZSBkYnMgbWFya2VkIGZvciBza2lwcGluZyAqLworCQlpZiAoZGJpZG5hbWUtPm9p ZCA9PSBJbnZhbGlkT2lkKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBy ZXNldCBvdmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3JlZAorCQkg KiBpbnRvIGFuIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8tLWRibmFt ZSBvcHRpb24pCisJCSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpCisJ CXsKKwkJCXBmcmVlKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9wdHMtPmNw YXJhbXMub3ZlcnJpZGVfZGJuYW1lID0gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcmRi cGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzIiwgaW5wdXRGaWxlU3BlYyk7CisKKwkJLyoK KwkJICogTG9vayBmb3IgdGhlIGRhdGFiYXNlIGR1bXAgZmlsZS9kaXIuIElmIHRoZXJlIGlzIGFu IHtvaWR9LnRhciBvcgorCQkgKiB7b2lkfS5kbXAgZmlsZSwgdXNlIGl0LiBPdGhlcndpc2UgdHJ5 IHRvIHVzZSBhIGRpcmVjdG9yeSBjYWxsZWQKKwkJICoge29pZH0KKwkJICovCisJCXNucHJpbnRm KGRiZmlsZW5hbWUsIE1BWFBHUEFUSCwgIiV1LnRhciIsIGRiaWRuYW1lLT5vaWQpOworCQlpZiAo ZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQlz bnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUudGFyIiwgaW5w dXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCWVsc2UKKwkJeworCQkJc25wcmludGYoZGJm aWxlbmFtZSwgTUFYUEdQQVRILCAiJXUuZG1wIiwgZGJpZG5hbWUtPm9pZCk7CisKKwkJCWlmIChm aWxlX2V4aXN0c19pbl9kaXJlY3Rvcnkoc3ViZGlyZGJwYXRoLCBkYmZpbGVuYW1lKSkKKwkJCQlz bnByaW50ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUuZG1wIiwgaW5w dXRGaWxlU3BlYywgZGJpZG5hbWUtPm9pZCk7CisJCQllbHNlCisJCQkJc25wcmludGYoc3ViZGly cGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1IiwgaW5wdXRGaWxlU3BlYywgZGJpZG5h bWUtPm9pZCk7CisJCX0KKworCQlwZ19sb2dfaW5mbygicmVzdG9yaW5nIGRhdGFiYXNlIFwiJXNc IiIsIGRiaWRuYW1lLT5zdHIpOworCisJCS8qIElmIGRhdGFiYXNlIGlzIGFscmVhZHkgY3JlYXRl ZCwgdGhlbiBkb24ndCBzZXQgY3JlYXRlREIgZmxhZy4gKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMu ZGJuYW1lKQorCQl7CisJCQlQR2Nvbm4JICAgKnRlc3RfY29ubjsKKworCQkJdGVzdF9jb25uID0g Q29ubmVjdERhdGFiYXNlKGRiaWRuYW1lLT5zdHIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0 LAorCQkJCQkJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1l LCBUUklfREVGQVVMVCwKKwkJCQkJCQkJCQlmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpOworCQkJaWYgKHRlc3RfY29ubikKKwkJCXsKKwkJCQlQUWZpbmlzaCh0ZXN0X2Nv bm4pOworCisJCQkJLyogVXNlIGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZSBmb3IgY29ubmVjdGlv bi4gKi8KKwkJCQlvcHRzLT5jcmVhdGVEQiA9IDA7CisJCQkJb3B0cy0+Y3BhcmFtcy5kYm5hbWUg PSBkYmlkbmFtZS0+c3RyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qIHdlJ2xsIGhhdmUg dG8gY3JlYXRlIGl0ICovCisJCQkJb3B0cy0+Y3JlYXRlREIgPSAxOworCQkJCW9wdHMtPmNwYXJh bXMuZGJuYW1lID0gY29ubmVjdGVkX2RiOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogUmVzZXQg ZmxhZ3MgLSBtaWdodCBoYXZlIGJlZW4gcmVzZXQgaW4gcGdfYmFja3VwX2FyY2hpdmVyLmMgYnkg dGhlCisJCSAqIHByZXZpb3VzIHJlc3RvcmUuCisJCSAqLworCQlvcHRzLT5kdW1wRGF0YSA9IGR1 bXBEYXRhOworCQlvcHRzLT5kdW1wU2NoZW1hID0gZHVtcFNjaGVtYTsKKwkJb3B0cy0+ZHVtcFN0 YXRpc3RpY3MgPSBkdW1wU3RhdGlzdGljczsKKworCQkvKiBSZXN0b3JlIHRoZSBzaW5nbGUgZGF0 YWJhc2UuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0YWJhc2Uoc3ViZGlycGF0aCwg b3B0cywgbnVtV29ya2VycywgdHJ1ZSwgZmFsc2UpOworCisJCS8qIFByaW50IGEgc3VtbWFyeSBv ZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgc2luZ2xlIGRhdGFiYXNlIHJlc3RvcmUuICovCisJCWlm IChuX2Vycm9ycykKKwkJeworCQkJbl9lcnJvcnNfdG90YWwgKz0gbl9lcnJvcnM7CisJCQlwZ19s b2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQgb24gZGF0YWJhc2UgXCIlc1wiIHJlc3RvcmU6ICVk IiwgZGJpZG5hbWUtPnN0ciwgbl9lcnJvcnMpOworCQl9CisJfQorCisJLyogTG9nIG51bWJlciBv ZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9y ZWQgZGF0YWJhc2VzIGlzICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5hbWUg YW5kIGRib2lkIGxpc3QuICovCisJc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFtZV9vaWRf bGlzdCk7CisKKwlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwK b2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBhYjkzMTBlYjQyYi4uOTIyMWQz YzlmNWMKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4v cGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMjQ0LDQgKzI0NCwzMSBAQCBjb21tYW5kX2ZhaWxz X2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJl IHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFp bHNfbGlrZSgKKwlbICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19k dW1wYWxsOiBlcnJvcjogdW5yZWNvZ25pemVkIG91dHB1dCBmb3JtYXQgIngiO1xFLywKKwkncGdf ZHVtcGFsbDogdW5yZWNvZ25pemVkIG91dHB1dCBmb3JtYXQnKTsKKworY29tbWFuZF9mYWlsc19s aWtlKAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAnZCcsICctLXJlc3RyaWN0LWtleT11 dScsICctZiBkdW1wZmlsZScgXSwKKwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiBvcHRpb24gLS1y ZXN0cmljdC1rZXkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tZm9ybWF0PXBsYWluXEUvLAorCSdw Z19kdW1wYWxsOiAtLXJlc3RyaWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggcGxhaW4gZHVt cCBmb3JtYXQnKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLS1l eGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnIF0sCisJ cXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3Qg YmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9y ZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRo IC1nLy0tZ2xvYmFscy1vbmx5JworKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jl c3RvcmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctZCcsICd4eHgnLCAnZHVtcGRpcicg XSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNh biBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1 bXBhbGxcRS8sCisJJ1doZW4gb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBpcyB1c2VkIGluIHBn X3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXAnCispOworCitjb21tYW5kX2ZhaWxzX2xpa2Uo CisJWyAncGdfcmVzdG9yZScsICctLWdsb2JhbHMtb25seScsICctZCcsICd4eHgnLCAnZHVtcGRp cicgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLWdcLy0tZ2xvYmFscy1vbmx5 IGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBn X2R1bXBhbGxcRS8sCisJJ1doZW4gb3B0aW9uIC0tZ2xvYmFscy1vbmx5IGlzIG5vdCB1c2VkIGlu IHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXAnCispOwogZG9uZV90ZXN0aW5nKCk7CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbCBiL3NyYy9iaW4v cGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAw MDAwMDAwMDAwLi4zYzdkMmFkN2M1MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVt cC90LzAwN19wZ19kdW1wYWxsLnBsCkBAIC0wLDAgKzEsMzk2IEBACisjIENvcHlyaWdodCAoYykg MjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3Ry aWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3Jl OworCitteSAkdGVtcGRpciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworbXkg JHJ1bl9kYiA9ICdwb3N0Z3Jlcyc7CitteSAkc2VwID0gJHdpbmRvd3Nfb3MgPyAiXFwiIDogIi8i OworCisjIFRhYmxlc3BhY2UgbG9jYXRpb25zIHVzZWQgYnkgInJlc3RvcmVfdGFibGVzcGFjZSIg dGVzdCBjYXNlLgorbXkgJHRhYmxlc3BhY2UxID0gIiR7dGVtcGRpcn0ke3NlcH10YmwxIjsKK215 ICR0YWJsZXNwYWNlMiA9ICIke3RlbXBkaXJ9JHtzZXB9dGJsMiI7Citta2RpcigkdGFibGVzcGFj ZTEpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UxICQhIjsKK21rZGlyKCR0YWJsZXNwYWNlMikg fHwgZGllICJta2RpciAkdGFibGVzcGFjZTIgJCEiOworCisjIFNjYXBlIHRhYmxlc3BhY2UgbG9j YXRpb25zIG9uIFdpbmRvd3MuCiskdGFibGVzcGFjZTEgPSAkd2luZG93c19vcyA/ICgkdGFibGVz cGFjZTEgPX4gcy9cXC9cXFxcL2dyKSA6ICR0YWJsZXNwYWNlMTsKKyR0YWJsZXNwYWNlMiA9ICR3 aW5kb3dzX29zID8gKCR0YWJsZXNwYWNlMiA9fiBzL1xcL1xcXFwvZ3IpIDogJHRhYmxlc3BhY2Uy OworCisjIFdoZXJlIHBnX2R1bXBhbGwgd2lsbCBiZSBleGVjdXRlZC4KK215ICRub2RlID0gUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdub2RlJyk7Ciskbm9kZS0+aW5pdDsKKyRub2Rl LT5zdGFydDsKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVmaW5pdGlvbiBvZiB0aGUgcGdfZHVtcGFsbCB0ZXN0 IGNhc2VzIHRvIHJ1bi4KKyMKKyMgRWFjaCBvZiB0aGVzZSB0ZXN0IGNhc2VzIGFyZSBuYW1lZCBh bmQgdGhvc2UgbmFtZXMgYXJlIHVzZWQgZm9yIGZhaWwKKyMgcmVwb3J0aW5nIGFuZCBhbHNvIHRv IHNhdmUgdGhlIGR1bXAgYW5kIHJlc3RvcmUgaW5mb3JtYXRpb24gbmVlZGVkIGZvciB0aGUKKyMg dGVzdCB0byBhc3NlcnQuCisjCisjIFRoZSAic2V0dXBfc3FsIiBpcyBhIHBzcWwgdmFsaWQgc2Ny aXB0IHRoYXQgY29udGFpbnMgU1FMIGNvbW1hbmRzIHRvIGV4ZWN1dGUKKyMgYmVmb3JlIG9mIGFj dHVhbGx5IGV4ZWN1dGUgdGhlIHRlc3RzLiBUaGUgc2V0dXBzIGFyZSBhbGwgZXhlY3V0ZWQgYmVm b3JlIG9mCisjIGFueSB0ZXN0IGV4ZWN1dGlvbi4KKyMKKyMgVGhlICJkdW1wX2NtZCIgYW5kICJy ZXN0b3JlX2NtZCIgYXJlIHRoZSBjb21tYW5kcyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuIFRoZQor IyAicmVzdG9yZV9jbWQiIG11c3QgaGF2ZSB0aGUgLS1maWxlIGZsYWcgdG8gc2F2ZSB0aGUgcmVz dG9yZSBvdXRwdXQgc28gdGhhdCB3ZQorIyBjYW4gYXNzZXJ0IG9uIGl0LgorIworIyBUaGUgImxp a2UiIGFuZCAidW5saWtlIiBpcyBhIHJlZ2V4cCB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdGhlIHBn X3Jlc3RvcmUKKyMgb3V0cHV0LiBJdCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZW4gZmls bGVkIHBlciB0ZXN0IGNhc2VzIGJ1dCBpdCBhbHNvCisjIGNhbiBoYXZlIGJvdGguIFNlZSAiZXhj bHVkaW5nX2RhdGFiYXNlcyIgdGVzdCBjYXNlIGZvciBleGFtcGxlLgorbXkgJXBnZHVtcGFsbF9y dW5zID0gKAorCXJlc3RvcmVfcm9sZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJworCQlDUkVBVEUg Uk9MRSBkdW1wYWxsIFdJVEggRU5DUllQVEVEIFBBU1NXT1JEIFwnYWRtaW5cJyBTVVBFUlVTRVI7 CisJCUNSRUFURSBST0xFIGR1bXBhbGwyIFdJVEggUkVQTElDQVRJT04gQ09OTkVDVElPTiBMSU1J VCAxMDsnLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQn ID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMi LAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3Rv cmVfcm9sZXMuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0b3JlX3JvbGVzIiwKKwkJXSwKKwkJbGlr ZSA9PiBxci8KKwkJCVxzKlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDI7XEUKKwkJCVxzKlxRQUxURVIg Uk9MRSBkdW1wYWxsMiBXSVRIIE5PU1VQRVJVU0VSIElOSEVSSVQgTk9DUkVBVEVST0xFIE5PQ1JF QVRFREIgTk9MT0dJTiBSRVBMSUNBVElPTiBOT0JZUEFTU1JMUyBDT05ORUNUSU9OIExJTUlUIDEw O1xFCisJCS94bQorCX0sCisKKwlyZXN0b3JlX3RhYmxlc3BhY2UgPT4geworCQlzZXR1cF9zcWwg PT4gIgorCQlDUkVBVEUgUk9MRSB0YXA7CisJCUNSRUFURSBUQUJMRVNQQUNFIHRibDEgT1dORVIg dGFwIExPQ0FUSU9OICckdGFibGVzcGFjZTEnOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9X TkVSIHRhcCBMT0NBVElPTiAnJHRhYmxlc3BhY2UyJyBXSVRIIChzZXFfcGFnZV9jb3N0PTEuMCk7 IiwKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAn ZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX3RhYmxlc3BhY2Ui LAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQkn LS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3Rv cmVfdGFibGVzcGFjZS5zcWwiLAorCQkJIiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVzcGFjZSIsCisJ CV0sCisJCSMgTWF0Y2ggIkUiIGFzIG9wdGlvbmFsIHNpbmNlIGl0IGlzIGFkZGVkIG9uIExPQ0FU SU9OIHdoZW4gcnVubmluZyBvbgorCQkjIFdpbmRvd3MuCisJCWxpa2UgPT4gcXIvXgorCQkJXG5c UUNSRUFURSBUQUJMRVNQQUNFIHRibDIgT1dORVIgdGFwIExPQ0FUSU9OIFxFKD86RSk/XFEnJHRh Ymxlc3BhY2UyJztcRQorCQkJXG5cUUFMVEVSIFRBQkxFU1BBQ0UgdGJsMiBTRVQgKHNlcV9wYWdl X2Nvc3Q9MS4wKTtcRQorCQkveG0sCisJfSwKKworCXJlc3RvcmVfZ3JhbnRzID0+IHsKKwkJc2V0 dXBfc3FsID0+ICIKKwkJQ1JFQVRFIERBVEFCQVNFIHRhcGdyYW50c2RiOworCQlDUkVBVEUgU0NI RU1BIHByaXZhdGU7CisJCUNSRUFURSBTRVFVRU5DRSBzZXJpYWwgU1RBUlQgMTAxOworCQlDUkVB VEUgRlVOQ1RJT04gZm4oKSBSRVRVUk5TIHZvaWQgQVMgXCRcJAorCQlCRUdJTgorCQlFTkQ7CisJ CVwkXCQgTEFOR1VBR0UgcGxwZ3NxbDsKKwkJQ1JFQVRFIFJPTEUgc3VwZXI7CisJCUNSRUFURSBS T0xFIGdyYW50MTsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQyOworCQlDUkVBVEUgUk9MRSBncmFudDM7 CisJCUNSRUFURSBST0xFIGdyYW50NDsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ1OworCQlDUkVBVEUg Uk9MRSBncmFudDY7CisJCUNSRUFURSBST0xFIGdyYW50NzsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ4 OworCisJCUNSRUFURSBUQUJMRSB0IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0IFZBTFVFUyAo MSksICgyKSwgKDMpLCAoNCk7CisKKwkJR1JBTlQgU0VMRUNUIE9OIFRBQkxFIHQgVE8gZ3JhbnQx OworCQlHUkFOVCBJTlNFUlQgT04gVEFCTEUgdCBUTyBncmFudDI7CisJCUdSQU5UIEFMTCBQUklW SUxFR0VTIE9OIFRBQkxFIHQgdG8gZ3JhbnQzOworCQlHUkFOVCBDT05ORUNULCBDUkVBVEUgT04g REFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3JhbnQ0OworCQlHUkFOVCBVU0FHRSwgQ1JFQVRFIE9O IFNDSEVNQSBwcml2YXRlIFRPIGdyYW50NTsKKwkJR1JBTlQgVVNBR0UsIFNFTEVDVCwgVVBEQVRF IE9OIFNFUVVFTkNFIHNlcmlhbCBUTyBncmFudDY7CisJCUdSQU5UIHN1cGVyIFRPIGdyYW50NzsK KwkJR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBmbigpIFRPIGdyYW50ODsKKwkJIiwKKwkJZHVt cF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5 JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCXJl c3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMuc3Fs IiwKKwkJCSIkdGVtcGRpci9yZXN0b3JlX2dyYW50cyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgor CQkJXG5cUUdSQU5UIHN1cGVyIFRPIGdyYW50NyBXSVRIIElOSEVSSVQgVFJVRSBHUkFOVEVEIEJZ XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwgT04gU0NIRU1BIHByaXZhdGUgVE8gZ3Jh bnQ1O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIEZVTkNUSU9OIHB1YmxpYy5m bigpIFRPIGdyYW50ODtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBTRVFVRU5D RSBwdWJsaWMuc2VyaWFsIFRPIGdyYW50NjtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIFNF TEVDVCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDE7XEUKKwkJCVxuXFFHUkFOVCBJTlNFUlQg T04gVEFCTEUgcHVibGljLnQgVE8gZ3JhbnQyO1xFCisJCQlcblxRR1JBTlQgQUxMIE9OIFRBQkxF IHB1YmxpYy50IFRPIGdyYW50MztcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIENSRUFURSxD T05ORUNUIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDtcRQorCQkveG0sCisJfSwK KworCWV4Y2x1ZGluZ19kYXRhYmFzZXMgPT4geworCQlzZXR1cF9zcWwgPT4gJ0NSRUFURSBEQVRB QkFTRSBkYjE7CisJCVxjIGRiMQorCQlDUkVBVEUgVEFCTEUgdDEgKGlkIGludCk7CisJCUlOU0VS VCBJTlRPIHQxIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0MiAo aWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDIgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwor CQlDUkVBVEUgREFUQUJBU0UgZGIyOworCQlcYyBkYjIKKwkJQ1JFQVRFIFRBQkxFIHQzIChpZCBp bnQpOworCQlJTlNFUlQgSU5UTyB0MyBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVB VEUgVEFCTEUgdDQgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ0IFZBTFVFUyAoMSksICgyKSwg KDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiZXgzOworCQlcYyBkYmV4MworCQlDUkVB VEUgVEFCTEUgdDUgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQ1IFZBTFVFUyAoMSksICgyKSwg KDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0NiAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDYg VkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGJleDQ7CisJ CVxjIGRiZXg0CisJCUNSRUFURSBUQUJMRSB0NyAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDcg VkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ4IChpZCBpbnQpOwor CQlJTlNFUlQgSU5UTyB0OCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBE QVRBQkFTRSBkYjU7CisJCVxjIGRiNQorCQlDUkVBVEUgVEFCTEUgdDkgKGlkIGludCk7CisJCUlO U0VSVCBJTlRPIHQ5IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0 MTAgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQxMCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQp OworCQknLAorCQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQn ID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRh YmFzZXMiLAorCQkJJy0tZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiZXgqJywKKwkJXSwKKwkJcmVz dG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAn ZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNsdWRpbmdfZGF0YWJhc2Vz LnNxbCIsCisJCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9PiAnZGI1JywKKwkJCSIkdGVtcGRpci9l eGNsdWRpbmdfZGF0YWJhc2VzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eCisJCQlcblxRQ1JFQVRF IERBVEFCQVNFIGRiMVxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50 MSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQyIChcRQorCQkJ KC4qXG4pKgorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjJcRQorCQkJKC4qXG4pKgorCQkJXG5c UUNSRUFURSBUQUJMRSBwdWJsaWMudDMgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRB QkxFIHB1YmxpYy50NCAoL3htLAorCQl1bmxpa2UgPT4gcXIvXgorCQkJXG5cUUNSRUFURSBEQVRB QkFTRSBkYjNcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDUgKFxF CisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NiAoXEUKKwkJCSguKlxu KSoKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGI0XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVB VEUgVEFCTEUgcHVibGljLnQ3IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBw dWJsaWMudDggKFxFCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiNVxFCisJCQkoLipcbikqCisJ CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50OSAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVB VEUgVEFCTEUgcHVibGljLnQxMCAoXEUKKwkJL3htLAorCX0sCisKKwlmb3JtYXRfZGlyZWN0b3J5 ID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2RpcmVjdG9yeShhIGlu dCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyZWN0b3J5IFZB TFVFUyAoMSwgdHJ1ZSwgJ25hbWUxJyksICgyLCBmYWxzZSwgJ25hbWUyJyk7IiwKKwkJZHVtcF9j bWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywK KwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5IiwKKwkJXSwKKwkJcmVz dG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAn ZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5LnNx bCIsCisJCQkiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJCV0sCisJCWxpa2UgPT4gcXIv XlxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfZGlyZWN0b3J5IChhLCBiLCBjKSBGUk9NIHN0ZGluOy94 bQorCX0sCisKKwlmb3JtYXRfdGFyID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUg Zm9ybWF0X3RhcihhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3Jt YXRfdGFyIFZBTFVFUyAoMSwgZmFsc2UsICduYW1lMycpLCAoMiwgdHJ1ZSwgJ25hbWU0Jyk7IiwK KwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFy JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyIiwKKwkJXSwKKwkJcmVzdG9y ZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAndGFy JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfdGFyLnNxbCIsCisJCQkiJHRlbXBk aXIvZm9ybWF0X3RhciIsCisJCV0sCisJCWxpa2UgPT4gcXIvXlxuXFFDT1BZIHB1YmxpYy5mb3Jt YXRfdGFyIChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlmb3JtYXRfY3VzdG9tID0+ IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2N1c3RvbShhIGludCwgYiBi b29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfY3VzdG9tIFZBTFVFUyAoMSwg ZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9jbWQgPT4gWwor CQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJCSctLWZpbGUn ID0+ICIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWwor CQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJCSct LWZpbGUnID0+ICIkdGVtcGRpci9mb3JtYXRfY3VzdG9tLnNxbCIsCisJCQkiJHRlbXBkaXIvZm9y bWF0X2N1c3RvbSIsCisJCV0sCisJCWxpa2UgPT4gcXIvXiBcblxRQ09QWSBwdWJsaWMuZm9ybWF0 X2N1c3RvbSAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZHVtcF9nbG9iYWxzX29u bHkgPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGlyKGEgaW50LCBi IGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9kaXIgVkFMVUVTICgxLCBm YWxzZSwgJ25hbWU1JyksICgyLCB0cnVlLCAnbmFtZTYnKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJ CQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZ2xv YmFscy1vbmx5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9kdW1wX2dsb2JhbHNfb25seSIs CisJCV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywgJy0tZ2xv YmFscy1vbmx5JywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9 PiAiJHRlbXBkaXIvZHVtcF9nbG9iYWxzX29ubHkuc3FsIiwKKwkJCSIkdGVtcGRpci9kdW1wX2ds b2JhbHNfb25seSIsCisJCV0sCisJCWxpa2UgPT4gcXIvCisgICAgICAgICAgICBeXHMqXFFDUkVB VEUgUk9MRSBkdW1wYWxsO1xFXHMqXG4KKwkJCS94bQorCX0sKTsKKworIyBGaXJzdCBleGVjdXRl IHRoZSBzZXR1cF9zcWwKK2ZvcmVhY2ggbXkgJHJ1biAoc29ydCBrZXlzICVwZ2R1bXBhbGxfcnVu cykKK3sKKwlpZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBfc3FsfSkKKwl7CisJCSRu b2RlLT5zYWZlX3BzcWwoJHJ1bl9kYiwgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57c2V0dXBfc3Fs fSk7CisJfQorfQorCisjIEV4ZWN1dGUgdGhlIHRlc3RzCitmb3JlYWNoIG15ICRydW4gKHNvcnQg a2V5cyAlcGdkdW1wYWxsX3J1bnMpCit7CisJIyBDcmVhdGUgYSBuZXcgdGFyZ2V0IGNsdXN0ZXIg dG8gcGdfcmVzdG9yZSBlYWNoIHRlc3QgY2FzZSBydW4gc28gdGhhdCB3ZQorCSMgZG9uJ3QgbmVl ZCB0byB0YWtlIGNhcmUgb2YgdGhlIGNsZWFudXAgZnJvbSB0aGUgdGFyZ2V0IGNsdXN0ZXIgYWZ0 ZXIgZWFjaAorCSMgcnVuLgorCW15ICR0YXJnZXRfbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygidGFyZ2V0XyRydW4iKTsKKwkkdGFyZ2V0X25vZGUtPmluaXQ7CisJJHRhcmdl dF9ub2RlLT5zdGFydDsKKworCSMgRHVtcGFsbCBmcm9tIG5vZGUgY2x1c3Rlci4KKwkkbm9kZS0+ Y29tbWFuZF9vayhcQHsgJHBnZHVtcGFsbF9ydW5zeyRydW59LT57ZHVtcF9jbWR9IH0sCisJCSIk cnVuOiBwZ19kdW1wYWxsIHJ1bnMiKTsKKworCSMgUmVzdG9yZSB0aGUgZHVtcCBvbiAidGFyZ2V0 X25vZGUiIGNsdXN0ZXIuCisJbXkgQHJlc3RvcmVfY21kID0gKAorCQlAeyAkcGdkdW1wYWxsX3J1 bnN7JHJ1bn0tPntyZXN0b3JlX2NtZH0gfSwKKwkJJy0taG9zdCcsICR0YXJnZXRfbm9kZS0+aG9z dCwgJy0tcG9ydCcsICR0YXJnZXRfbm9kZS0+cG9ydCk7CisKKwlteSAoJHN0ZG91dCwgJHN0ZGVy cikgPSBydW5fY29tbWFuZChcQHJlc3RvcmVfY21kKTsKKworCSMgcGdfcmVzdG9yZSAtLWZpbGUg b3V0cHV0IGZpbGUuCisJbXkgJG91dHB1dF9maWxlID0gc2x1cnBfZmlsZSgiJHRlbXBkaXIvJHty dW59LnNxbCIpOworCisJaWYgKCAgICEoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0pCisJ CSYmICEoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSkpCisJeworCQlkaWUgIm1pc3Np bmcgXCJsaWtlXCIgb3IgXCJ1bmxpa2VcIiBpbiB0ZXN0IFwiJHJ1blwiIjsKKwl9CisKKwlpZiAo JHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0pCisJeworCQlsaWtlKCRvdXRwdXRfZmlsZSwg JHBnZHVtcGFsbF9ydW5zeyRydW59LT57bGlrZX0sICJzaG91bGQgZHVtcCAkcnVuIik7CisJfQor CisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0pCisJeworCQl1bmxpa2UoCisJ CQkkb3V0cHV0X2ZpbGUsCisJCQkkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9LAorCQkJ InNob3VsZCBub3QgZHVtcCAkcnVuIik7CisJfQorfQorCisjIFNvbWUgbmVnYXRpdmUgdGVzdCBj YXNlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsIGFuZCByZXN0b3JlIHVzaW5nIHBnX3Jlc3RvcmUK KyMgdGVzdCBjYXNlIDE6IHdoZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1 bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdwZ19y ZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQknLS1mb3JtYXQnID0+ICdj dXN0b20nLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJyb3JfdGVzdC5zcWwiLAorCV0sCisJ cXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1DXC8tLWNyZWF0ZSBtdXN0IGJlIHNwZWNp ZmllZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFsbFxFLywK KwknV2hlbiAtQyBpcyBub3QgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1w YWxsJyk7CisKKyMgdGVzdCBjYXNlIDI6IFdoZW4gLS1saXN0IG9wdGlvbiBpcyB1c2VkIHdpdGgg ZHVtcCBvZiBwZ19kdW1wYWxsCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3Bn X3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJCSctLWZvcm1h dCcgPT4gJ2N1c3RvbScsCisJCSctLWxpc3QnLAorCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXJy b3JfdGVzdC5zcWwiLAorCV0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC1sXC8t LWxpc3QgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5 IHBnX2R1bXBhbGxcRS8sCisJJ1doZW4gLS1saXN0IGlzIHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRo IGR1bXAgb2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3QgY2FzZSAzOiBXaGVuIG5vbi1leGlzdCBk YXRhYmFzZSBpcyBnaXZlbiB3aXRoIC1kIG9wdGlvbgorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlr ZSgKKwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMn LAorCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLWQnID0+ICdkYnBxJywKKwldLAorCXFy L1xRRkFUQUw6ICBkYXRhYmFzZSAiZGJwcSIgZG9lcyBub3QgZXhpc3RcRS8sCisJJ1doZW4gbm9u LWV4aXN0ZW50IGRhdGFiYXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9uIGluIHBnX3Jlc3RvcmUg d2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnCispOworCiskbm9kZS0+c3RvcCgnZmFzdCcpOworCitk b25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --000000000000a3ced70647b242e0--