Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ggq6W-0005J3-Bh for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Jan 2019 12:03:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1ggq6U-0006vH-T5 for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Jan 2019 12:03:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ggq6U-0006vA-KR for pgsql-hackers@lists.postgresql.org; Tue, 08 Jan 2019 12:03:30 +0000 Received: from gauss.credativ.com ([93.94.130.89]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ggq6R-0004HW-3a for pgsql-hackers@postgresql.org; Tue, 08 Jan 2019 12:03:30 +0000 Received: from gauss.credativ.com (localhost [127.0.0.1]) by gauss.credativ.com (Postfix) with ESMTP id 392EA1E4951; Tue, 8 Jan 2019 13:03:26 +0100 (CET) Received: from kohn-2.fritz.box (ppp-88-217-97-255.dynamic.mnet-online.de [88.217.97.255]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: mba@gauss.credativ.com) by gauss.credativ.com (Postfix) with ESMTPSA id BC23C1E494F; Tue, 8 Jan 2019 13:03:25 +0100 (CET) Message-ID: <1546949005.32387.11.camel@credativ.de> Subject: Re: Offline enabling/disabling of data checksums From: Michael Banck To: Fabien COELHO Cc: Postgres hackers , Michael Paquier Date: Tue, 08 Jan 2019 13:03:25 +0100 In-Reply-To: References: <20181221201616.GD4974@nighthawk.caipicrew.dd-dns.de> Organization: credativ GmbH Content-Type: multipart/mixed; boundary="=-xv6cee8xRRHD7jcsnmAU" X-Mailer: Evolution 3.22.6-1+deb9u1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-xv6cee8xRRHD7jcsnmAU Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Hi, Am Mittwoch, den 26.12.2018, 19:43 +0100 schrieb Fabien COELHO: > > It adds an (now mandatory) --action parameter that takes either verify, > > enable or disable as argument. >  > I'd rather have explicit switches for verify, enable & disable, and verify  > would be the default if none is provided. I changed that to the switches -c/--verify (-c for check as -v is taken, should it be --check as well? I personally like verify better),  -d/--disable and -e/--enable. > About the patch: applies, compiles, "make check" ok. > > There is no documentation. Yeah, I'll write that once the CLI is settled. > In "scan_file", I would open RW only for enable, but keep RO for verify. OK, I've changed that. > Also, the full page is rewritten... would it make sense to only overwrite > the checksum part itself? So just writing the page header? I find that a bit scary and don't expect much speedup as the OS would write the whole block anyway I guess? I haven't touched that yet. > It seems that the control file is unlinked and then rewritten. If the > rewritting fails, or the command is interrupted, the user has a problem. > > Could the control file be simply opened RW? Else, I would suggest to > rename (eg add .tmp), write the new one, then unlink the old one, so that > recovering the old state in case of problem is possible. I have mostly taken the pg_rewind code here; if there was a function that allowed for safe offline changes of the control file, I'd be happy to use it but I don't think it should be this patch to invent that. In any case, I have removed the unlink() now (not sure where that came from), and changed it to open(O_WRONLY) same as in Michael's code and pg_rewind. V2 attached. Michael -- Michael Banck Projektleiter / Senior Berater Tel.: +49 2166 9901-171 Fax: +49 2166 9901-100 Email: michael.banck@credativ.de credativ GmbH, HRB Mönchengladbach 12080 USt-ID-Nummer: DE204566209 Trompeterallee 108, 41189 Mönchengladbach Geschäftsführung: Dr. Michael Meskes, Jörg Folz, Sascha Heuer Unser Umgang mit personenbezogenen Daten unterliegt folgenden Bestimmungen: https://www.credativ.de/datenschutz --=-xv6cee8xRRHD7jcsnmAU Content-Disposition: attachment; filename="offline-activation-of-checksums_V2.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="offline-activation-of-checksums_V2.patch"; charset="UTF-8" ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdmVyaWZ5X2NoZWNrc3Vtcy9wZ192ZXJpZnlfY2hlY2tz dW1zLmMgYi9zcmMvYmluL3BnX3ZlcmlmeV9jaGVja3N1bXMvcGdfdmVyaWZ5X2NoZWNrc3Vtcy5j CmluZGV4IGNjNmViYjlkZjAuLjNlY2NlM2RhMzIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdmVy aWZ5X2NoZWNrc3Vtcy9wZ192ZXJpZnlfY2hlY2tzdW1zLmMKKysrIGIvc3JjL2Jpbi9wZ192ZXJp ZnlfY2hlY2tzdW1zL3BnX3ZlcmlmeV9jaGVja3N1bXMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAg KiBwZ192ZXJpZnlfY2hlY2tzdW1zCiAgKgotICogVmVyaWZpZXMgcGFnZSBsZXZlbCBjaGVja3N1 bXMgaW4gYW4gb2ZmbGluZSBjbHVzdGVyCisgKiBWZXJpZmllcy9lbmFibGVzL2Rpc2FibGVzIHBh Z2UgbGV2ZWwgY2hlY2tzdW1zIGluIGFuIG9mZmxpbmUgY2x1c3RlcgogICoKICAqCUNvcHlyaWdo dCAoYykgMjAxMC0yMDE5LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICoK QEAgLTEzLDE1ICsxMywxNiBAQAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dW5p c3RkLmg+CiAKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ19pbnRlcm5hbC5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91dGlscy5o IgorI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV91 dGlscy5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGdfZ2V0b3B0Lmgi CiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jaGVja3N1 bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY2hlY2tzdW1faW1wbC5oIgotI2luY2x1ZGUgInN0b3Jh Z2UvZmQuaCIKLQogCiBzdGF0aWMgaW50NjQgZmlsZXMgPSAwOwogc3RhdGljIGludDY0IGJsb2Nr cyA9IDA7CkBAIC0zMSwxNiArMzIsMzEgQEAgc3RhdGljIENvbnRyb2xGaWxlRGF0YSAqQ29udHJv bEZpbGU7CiBzdGF0aWMgY2hhciAqb25seV9yZWxmaWxlbm9kZSA9IE5VTEw7CiBzdGF0aWMgYm9v bCB2ZXJib3NlID0gZmFsc2U7CiAKK3R5cGVkZWYgZW51bQoreworCVBHX0FDVElPTl9ESVNBQkxF LAorCVBHX0FDVElPTl9FTkFCTEUsCisJUEdfQUNUSU9OX1ZFUklGWQorfSBDaGVja3N1bUFjdGlv bjsKKworLyogRmlsZW5hbWUgY29tcG9uZW50cyAqLworI2RlZmluZSBQR19URU1QX0ZJTEVTX0RJ UiAicGdzcWxfdG1wIgorI2RlZmluZSBQR19URU1QX0ZJTEVfUFJFRklYICJwZ3NxbF90bXAiCisK K3N0YXRpYyBDaGVja3N1bUFjdGlvbiBhY3Rpb24gPSBQR19BQ1RJT05fVkVSSUZZOworCiBzdGF0 aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7CiAKIHN0YXRpYyB2b2lkCiB1c2FnZSh2b2lkKQogewot CXByaW50ZihfKCIlcyB2ZXJpZmllcyBkYXRhIGNoZWNrc3VtcyBpbiBhIFBvc3RncmVTUUwgZGF0 YWJhc2UgY2x1c3Rlci5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZW5hYmxlcy9k aXNhYmxlcy92ZXJpZmllcyBkYXRhIGNoZWNrc3VtcyBpbiBhIFBvc3RncmVTUUwgZGF0YWJhc2Ug Y2x1c3Rlci5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJp bnRmKF8oIiAgJXMgW09QVElPTl0uLi4gW0RBVEFESVJdXG4iKSwgcHJvZ25hbWUpOwogCXByaW50 ZihfKCJcbk9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiBbLUQsIC0tcGdkYXRhPV1EQVRBRElS ICBkYXRhIGRpcmVjdG9yeVxuIikpOworCXByaW50ZihfKCIgIC1BLCAtLWFjdGlvbiAgIGFjdGlv biB0byB0YWtlIG9uIHRoZSBjbHVzdGVyLCBjYW4gYmUgc2V0IGFzXG4iKSk7CisJcHJpbnRmKF8o IiAgICAgICAgICAgICAgICAgXCJ2ZXJpZnlcIiwgXCJlbmFibGVcIiBhbmQgXCJkaXNhYmxlXCJc biIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgIG91dHB1dCB2ZXJib3Nl IG1lc3NhZ2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXIgUkVMRklMRU5PREUgICAgICAgICBjaGVj ayBvbmx5IHJlbGF0aW9uIHdpdGggc3BlY2lmaWVkIHJlbGZpbGVub2RlXG4iKSk7CiAJcHJpbnRm KF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwg dGhlbiBleGl0XG4iKSk7CkBAIC04MCw2ICs5Niw3NyBAQCBza2lwZmlsZShjb25zdCBjaGFyICpm bikKIH0KIAogc3RhdGljIHZvaWQKK3VwZGF0ZUNvbnRyb2xGaWxlKGNoYXIgKkRhdGFEaXIsIENv bnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUpCit7CisJaW50CQkJZmQ7CisJY2hhcgkJYnVmZmVy W1BHX0NPTlRST0xfRklMRV9TSVpFXTsKKwljaGFyCQlDb250cm9sRmlsZVBhdGhbTUFYUEdQQVRI XTsKKworCUFzc2VydChhY3Rpb24gPT0gUEdfQUNUSU9OX0VOQUJMRSB8fAorCQkgICBhY3Rpb24g PT0gUEdfQUNUSU9OX0RJU0FCTEUpOworCisJLyoKKwkgKiBGb3IgZ29vZCBsdWNrLCBhcHBseSB0 aGUgc2FtZSBzdGF0aWMgYXNzZXJ0aW9ucyBhcyBpbiBiYWNrZW5kJ3MKKwkgKiBXcml0ZUNvbnRy b2xGaWxlKCkuCisJICovCisjaWYgUEdfVkVSU0lPTl9OVU0gPj0gMTAwMDAwCisJU3RhdGljQXNz ZXJ0U3RtdChzaXplb2YoQ29udHJvbEZpbGVEYXRhKSA8PSBQR19DT05UUk9MX01BWF9TQUZFX1NJ WkUsCisJCQkJCSAicGdfY29udHJvbCBpcyB0b28gbGFyZ2UgZm9yIGF0b21pYyBkaXNrIHdyaXRl cyIpOworI2VuZGlmCisJU3RhdGljQXNzZXJ0U3RtdChzaXplb2YoQ29udHJvbEZpbGVEYXRhKSA8 PSBQR19DT05UUk9MX0ZJTEVfU0laRSwKKwkJCQkJICJzaXplb2YoQ29udHJvbEZpbGVEYXRhKSBl eGNlZWRzIFBHX0NPTlRST0xfRklMRV9TSVpFIik7CisKKwkvKiBSZWNhbGN1bGF0ZSBDUkMgb2Yg Y29udHJvbCBmaWxlICovCisJSU5JVF9DUkMzMkMoQ29udHJvbEZpbGUtPmNyYyk7CisJQ09NUF9D UkMzMkMoQ29udHJvbEZpbGUtPmNyYywKKwkJCQkoY2hhciAqKSBDb250cm9sRmlsZSwKKwkJCQlv ZmZzZXRvZihDb250cm9sRmlsZURhdGEsIGNyYykpOworCUZJTl9DUkMzMkMoQ29udHJvbEZpbGUt PmNyYyk7CisKKwkvKgorCSAqIFdyaXRlIG91dCBQR19DT05UUk9MX0ZJTEVfU0laRSBieXRlcyBp bnRvIHBnX2NvbnRyb2wgYnkgemVyby1wYWRkaW5nCisJICogdGhlIGV4Y2VzcyBvdmVyIHNpemVv ZihDb250cm9sRmlsZURhdGEpLCB0byBhdm9pZCBwcmVtYXR1cmUgRU9GIHJlbGF0ZWQKKwkgKiBl cnJvcnMgd2hlbiByZWFkaW5nIGl0LgorCSAqLworCW1lbXNldChidWZmZXIsIDAsIFBHX0NPTlRS T0xfRklMRV9TSVpFKTsKKwltZW1jcHkoYnVmZmVyLCBDb250cm9sRmlsZSwgc2l6ZW9mKENvbnRy b2xGaWxlRGF0YSkpOworCisJc25wcmludGYoQ29udHJvbEZpbGVQYXRoLCBzaXplb2YoQ29udHJv bEZpbGVQYXRoKSwgIiVzLyVzIiwgRGF0YURpciwgWExPR19DT05UUk9MX0ZJTEUpOworCisJZmQg PSBvcGVuKENvbnRyb2xGaWxlUGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgUEdfQklOQVJZLAor CQkJICBwZ19maWxlX2NyZWF0ZV9tb2RlKTsKKwlpZiAoZmQgPCAwKQorCXsKKwkJZnByaW50Zihz dGRlcnIsIF8oIiVzOiBjb3VsZCBub3Qgb3BlbiBjb250cm9sIGZpbGU6ICVzXG4iKSwKKwkJCQlw cm9nbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisKKwllcnJubyA9IDA7 CisJaWYgKHdyaXRlKGZkLCBidWZmZXIsIFBHX0NPTlRST0xfRklMRV9TSVpFKSAhPSBQR19DT05U Uk9MX0ZJTEVfU0laRSkKKwl7CisJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3Vt ZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KKwkJaWYgKGVycm5vID09IDApCisJCQllcnJu byA9IEVOT1NQQzsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBjb3VsZCBub3Qgd3JpdGUgY29u dHJvbCBmaWxlOiAlc1xuIiksCisJCQkJcHJvZ25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWV4 aXQoMSk7CisJfQorCisJaWYgKGZzeW5jKGZkKSAhPSAwKQorCXsKKwkJZnByaW50ZihzdGRlcnIs IF8oIiVzOiBmc3luYyBlcnJvcjogJXNcbiIpLCBwcm9nbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsK KwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoY2xvc2UoZmQpIDwgMCkKKwl7CisJCWZwcmludGYoc3Rk ZXJyLCBfKCIlczogY291bGQgbm90IGNsb3NlIGNvbnRyb2wgZmlsZTogJXNcbiIpLCBwcm9nbmFt ZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCiBz Y2FuX2ZpbGUoY29uc3QgY2hhciAqZm4sIEJsb2NrTnVtYmVyIHNlZ21lbnRubykKIHsKIAlQR0Fs aWduZWRCbG9jayBidWY7CkBAIC04Nyw3ICsxNzQsMTQgQEAgc2Nhbl9maWxlKGNvbnN0IGNoYXIg KmZuLCBCbG9ja051bWJlciBzZWdtZW50bm8pCiAJaW50CQkJZjsKIAlCbG9ja051bWJlciBibG9j a25vOwogCi0JZiA9IG9wZW4oZm4sIE9fUkRPTkxZIHwgUEdfQklOQVJZLCAwKTsKKwlBc3NlcnQo YWN0aW9uID09IFBHX0FDVElPTl9FTkFCTEUgfHwKKwkJICAgYWN0aW9uID09IFBHX0FDVElPTl9W RVJJRlkpOworCisJaWYgKGFjdGlvbiA9PSBQR19BQ1RJT05fVkVSSUZZKQorCQlmID0gb3Blbihm biwgT19SRE9OTFkgfCBQR19CSU5BUlksIDApOworCWVsc2UKKwkJZiA9IG9wZW4oZm4sIE9fUkRX UiB8IFBHX0JJTkFSWSwgMCk7CisKIAlpZiAoZiA8IDApCiAJewogCQlmcHJpbnRmKHN0ZGVyciwg XygiJXM6IGNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlc1xuIiksCkBAIC0xMTcsMTggKzIx MSw0NyBAQCBzY2FuX2ZpbGUoY29uc3QgY2hhciAqZm4sIEJsb2NrTnVtYmVyIHNlZ21lbnRubykK IAkJCWNvbnRpbnVlOwogCiAJCWNzdW0gPSBwZ19jaGVja3N1bV9wYWdlKGJ1Zi5kYXRhLCBibG9j a25vICsgc2VnbWVudG5vICogUkVMU0VHX1NJWkUpOwotCQlpZiAoY3N1bSAhPSBoZWFkZXItPnBk X2NoZWNrc3VtKQorCQlpZiAoYWN0aW9uID09IFBHX0FDVElPTl9WRVJJRlkpCiAJCXsKLQkJCWlm IChDb250cm9sRmlsZS0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID09IFBHX0RBVEFfQ0hFQ0tTVU1f VkVSU0lPTikKLQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IGNoZWNrc3VtIHZlcmlmaWNhdGlv biBmYWlsZWQgaW4gZmlsZSBcIiVzXCIsIGJsb2NrICV1OiBjYWxjdWxhdGVkIGNoZWNrc3VtICVY IGJ1dCBibG9jayBjb250YWlucyAlWFxuIiksCi0JCQkJCQlwcm9nbmFtZSwgZm4sIGJsb2Nrbm8s IGNzdW0sIGhlYWRlci0+cGRfY2hlY2tzdW0pOwotCQkJYmFkYmxvY2tzKys7CisJCQlpZiAoY3N1 bSAhPSBoZWFkZXItPnBkX2NoZWNrc3VtKQorCQkJeworCQkJCWlmIChDb250cm9sRmlsZS0+ZGF0 YV9jaGVja3N1bV92ZXJzaW9uID09IFBHX0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTikKKwkJCQkJZnBy aW50ZihzdGRlcnIsIF8oIiVzOiBjaGVja3N1bSB2ZXJpZmljYXRpb24gZmFpbGVkIGluIGZpbGUg XCIlc1wiLCBibG9jayAldTogY2FsY3VsYXRlZCBjaGVja3N1bSAlWCBidXQgYmxvY2sgY29udGFp bnMgJVhcbiIpLAorCQkJCQkJCXByb2duYW1lLCBmbiwgYmxvY2tubywgY3N1bSwgaGVhZGVyLT5w ZF9jaGVja3N1bSk7CisJCQkJYmFkYmxvY2tzKys7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoYWN0 aW9uID09IFBHX0FDVElPTl9FTkFCTEUpCisJCXsKKwkJCS8qIFNldCBjaGVja3N1bSBpbiBwYWdl IGhlYWRlciAqLworCQkJaGVhZGVyLT5wZF9jaGVja3N1bSA9IGNzdW07CisKKwkJCS8qIFNlZWsg YmFjayB0byBiZWdpbm5pbmcgb2YgYmxvY2sgKi8KKwkJCWlmIChsc2VlayhmLCAtQkxDS1NaLCBT RUVLX0NVUikgPCAwKQorCQkJeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCIlczogc2VlayBmYWls ZWQgZm9yIGJsb2NrICVkIGluIGZpbGUgXCIlc1wiOiAlc1xuIiksIHByb2duYW1lLCBibG9ja25v LCBmbiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlleGl0KDEpOworCQkJfQorCisJCQkvKiBXcml0 ZSBibG9jayB3aXRoIGNoZWNrc3VtICovCisJCQlpZiAod3JpdGUoZiwgYnVmLmRhdGEsIEJMQ0tT WikgIT0gQkxDS1NaKQorCQkJeworCQkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCB1 cGRhdGUgY2hlY2tzdW0gb2YgYmxvY2sgJWQgaW4gZmlsZSBcIiVzXCI6ICVzXG4iLAorCQkJCQkJ cHJvZ25hbWUsIGJsb2Nrbm8sIGZuLCBzdHJlcnJvcihlcnJubykpOworCQkJCWV4aXQoMSk7CisJ CQl9CiAJCX0KIAl9CiAKIAlpZiAodmVyYm9zZSkKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkJXygi JXM6IGNoZWNrc3VtcyB2ZXJpZmllZCBpbiBmaWxlIFwiJXNcIlxuIiksIHByb2duYW1lLCBmbik7 CisJeworCQlpZiAoYWN0aW9uID09IFBHX0FDVElPTl9WRVJJRlkpCisJCQlmcHJpbnRmKHN0ZGVy ciwKKwkJCQkJXygiJXM6IGNoZWNrc3VtcyB2ZXJpZmllZCBpbiBmaWxlIFwiJXNcIlxuIiksIHBy b2duYW1lLCBmbik7CisJCWlmIChhY3Rpb24gPT0gUEdfQUNUSU9OX0VOQUJMRSkKKwkJCWZwcmlu dGYoc3RkZXJyLAorCQkJCQlfKCIlczogY2hlY2tzdW1zIGVuYWJsZWQgaW4gZmlsZSBcIiVzXCJc biIpLCBwcm9nbmFtZSwgZm4pOworCX0KIAogCWNsb3NlKGYpOwogfQpAQCAtMjMwLDcgKzM1Mywx MCBAQCBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlzdGF0aWMgc3RydWN0 IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKKwkJeyJ2ZXJpZnkiLCBub19hcmd1bWVudCwgTlVM TCwgJ2MnfSwKIAkJeyJwZ2RhdGEiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0QnfSwKKwkJ eyJkaXNhYmxlIiwgbm9fYXJndW1lbnQsIE5VTEwsICdkJ30sCisJCXsiZW5hYmxlIiwgbm9fYXJn dW1lbnQsIE5VTEwsICdlJ30sCiAJCXsidmVyYm9zZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAndid9 LAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwpAQCAtMjU4LDEwICszODQsMTkgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xv bmcoYXJnYywgYXJndiwgIkQ6cjp2IiwgbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KSkgIT0g LTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImNEOmRlcjp2IiwgbG9u Z19vcHRpb25zLCAmb3B0aW9uX2luZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsK KwkJCWNhc2UgJ2MnOgorCQkJCWFjdGlvbiA9IFBHX0FDVElPTl9WRVJJRlk7CisJCQkJYnJlYWs7 CisJCQljYXNlICdkJzoKKwkJCQlhY3Rpb24gPSBQR19BQ1RJT05fRElTQUJMRTsKKwkJCQlicmVh azsKKwkJCWNhc2UgJ2UnOgorCQkJCWFjdGlvbiA9IFBHX0FDVElPTl9FTkFCTEU7CisJCQkJYnJl YWs7CiAJCQljYXNlICd2JzoKIAkJCQl2ZXJib3NlID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTI4 Miw2ICs0MTcsMjEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl9CiAJfQogCisJ LyoKKwkgKiBEb24ndCBhbGxvdyBwZ19jaGVja3N1bXMgdG8gYmUgcnVuIGFzIHJvb3QsIHRvIGF2 b2lkIG92ZXJ3cml0aW5nIHRoZQorCSAqIG93bmVyc2hpcCBvZiBmaWxlcyBpbiB0aGUgZGF0YSBk aXJlY3RvcnkuIFdlIG5lZWQgb25seSBjaGVjayBmb3Igcm9vdAorCSAqIC0tIGFueSBvdGhlciB1 c2VyIHdvbid0IGhhdmUgc3VmZmljaWVudCBwZXJtaXNzaW9ucyB0byBtb2RpZnkgZmlsZXMgaW4K KwkgKiB0aGUgZGF0YSBkaXJlY3RvcnkuICBUaGlzIGRvZXMgbm90IG1hdHRlciBmb3IgdGhlICJ2 ZXJpZnkiIG1vZGUsIGJ1dAorCSAqIGxldCdzIGJlIGNvbnNpc3RlbnQuCisJICovCisjaWZuZGVm IFdJTjMyCisJaWYgKGdldGV1aWQoKSA9PSAwKQorCXsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVz OiBjYW5ub3QgYmUgZXhlY3V0ZWQgYnkgXCJyb290XCJcbiIpLCBwcm9nbmFtZSk7CisJCWV4aXQo MSk7CisJfQorI2VuZGlmCisKIAlpZiAoRGF0YURpciA9PSBOVUxMKQogCXsKIAkJaWYgKG9wdGlu ZCA8IGFyZ2MpCkBAIC0zMDgsNiArNDU4LDE2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJZXhpdCgxKTsKIAl9CiAKKwkvKiBSZWxmaWxlbm9kZSBjaGVja2luZyBvbmx5IHdvcmtz IGluIHZlcmlmeSBtb2RlICovCisJaWYgKGFjdGlvbiAhPSBQR19BQ1RJT05fVkVSSUZZICYmCisJ CW9ubHlfcmVsZmlsZW5vZGUpCisJeworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IHJlbGZpbGVu b2RlIG9wdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggdmVyaWZ5IGFjdGlvblxuIiksIHByb2duYW1l KTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9y bWF0aW9uLlxuIiksCisJCQkJCQlwcm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCiAJLyogQ2hl Y2sgaWYgY2x1c3RlciBpcyBydW5uaW5nICovCiAJQ29udHJvbEZpbGUgPSBnZXRfY29udHJvbGZp bGUoRGF0YURpciwgcHJvZ25hbWUsICZjcmNfb2spOwogCWlmICghY3JjX29rKQpAQCAtMzE5LDI5 ICs0NzksNzQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChDb250cm9sRmls ZS0+c3RhdGUgIT0gREJfU0hVVERPV05FRCAmJgogCQlDb250cm9sRmlsZS0+c3RhdGUgIT0gREJf U0hVVERPV05FRF9JTl9SRUNPVkVSWSkKIAl7Ci0JCWZwcmludGYoc3RkZXJyLCBfKCIlczogY2x1 c3RlciBtdXN0IGJlIHNodXQgZG93biB0byB2ZXJpZnkgY2hlY2tzdW1zXG4iKSwgcHJvZ25hbWUp OworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IGNsdXN0ZXIgbXVzdCBiZSBzaHV0IGRvd25cbiIp LCBwcm9nbmFtZSk7CiAJCWV4aXQoMSk7CiAJfQogCi0JaWYgKENvbnRyb2xGaWxlLT5kYXRhX2No ZWNrc3VtX3ZlcnNpb24gPT0gMCkKKwlpZiAoQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVy c2lvbiA9PSAwICYmCisJCWFjdGlvbiA9PSBQR19BQ1RJT05fVkVSSUZZKQogCXsKIAkJZnByaW50 ZihzdGRlcnIsIF8oIiVzOiBkYXRhIGNoZWNrc3VtcyBhcmUgbm90IGVuYWJsZWQgaW4gY2x1c3Rl clxuIiksIHByb2duYW1lKTsKIAkJZXhpdCgxKTsKIAl9CisJaWYgKENvbnRyb2xGaWxlLT5kYXRh X2NoZWNrc3VtX3ZlcnNpb24gPT0gMCAmJgorCQlhY3Rpb24gPT0gUEdfQUNUSU9OX0RJU0FCTEUp CisJeworCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IGRhdGEgY2hlY2tzdW1zIGFyZSBhbHJlYWR5 IGRpc2FibGVkIGluIGNsdXN0ZXIuXG4iKSwgcHJvZ25hbWUpOworCQlleGl0KDEpOworCX0KKwlp ZiAoQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9PSBQR19EQVRBX0NIRUNLU1VN X1ZFUlNJT04gJiYKKwkJYWN0aW9uID09IFBHX0FDVElPTl9FTkFCTEUpCisJeworCQlmcHJpbnRm KHN0ZGVyciwgXygiJXM6IGRhdGEgY2hlY2tzdW1zIGFyZSBhbHJlYWR5IGVuYWJsZWQgaW4gY2x1 c3Rlci5cbiIpLCBwcm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQogCi0JLyogU2NhbiBhbGwgZmls ZXMgKi8KKwkvKgorCSAqIFdoZW4gZGlzYWJsaW5nIGRhdGEgY2hlY2tzdW1zLCBvbmx5IHVwZGF0 ZSB0aGUgY29udHJvbCBmaWxlIGFuZCBjYWxsIGl0CisJICogYSBkYXkuCisJICovCisJaWYgKGFj dGlvbiA9PSBQR19BQ1RJT05fRElTQUJMRSkKKwl7CisJCUNvbnRyb2xGaWxlLT5kYXRhX2NoZWNr c3VtX3ZlcnNpb24gPSAwOworCQl1cGRhdGVDb250cm9sRmlsZShEYXRhRGlyLCBDb250cm9sRmls ZSk7CisJCWZzeW5jX3BnZGF0YShEYXRhRGlyLCBwcm9nbmFtZSwgUEdfVkVSU0lPTl9OVU0pOwor CQlpZiAodmVyYm9zZSkKKwkJCXByaW50ZihfKCJEYXRhIGNoZWNrc3VtIHZlcnNpb246ICVkXG4i KSwgQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CisJCXByaW50ZihfKCJDaGVj a3N1bXMgZGlzYWJsZWQgaW4gY2x1c3RlclxuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBP cGVyYXRlIG9uIGFsbCBmaWxlcyAqLwogCXNjYW5fZGlyZWN0b3J5KERhdGFEaXIsICJnbG9iYWwi KTsKIAlzY2FuX2RpcmVjdG9yeShEYXRhRGlyLCAiYmFzZSIpOwogCXNjYW5fZGlyZWN0b3J5KERh dGFEaXIsICJwZ190YmxzcGMiKTsKIAotCXByaW50ZihfKCJDaGVja3N1bSBzY2FuIGNvbXBsZXRl ZFxuIikpOwotCXByaW50ZihfKCJEYXRhIGNoZWNrc3VtIHZlcnNpb246ICVkXG4iKSwgQ29udHJv bEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CisJcHJpbnRmKF8oIkNoZWNrc3VtIG9wZXJh dGlvbiBjb21wbGV0ZWRcbiIpKTsKIAlwcmludGYoXygiRmlsZXMgc2Nhbm5lZDogICVzXG4iKSwg cHNwcmludGYoSU5UNjRfRk9STUFULCBmaWxlcykpOwogCXByaW50ZihfKCJCbG9ja3Mgc2Nhbm5l ZDogJXNcbiIpLCBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIGJsb2NrcykpOwotCXByaW50ZihfKCJC YWQgY2hlY2tzdW1zOiAgJXNcbiIpLCBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIGJhZGJsb2Nrcykp OworCWlmIChhY3Rpb24gPT0gUEdfQUNUSU9OX1ZFUklGWSkKKwl7CisJCXByaW50ZihfKCJCYWQg Y2hlY2tzdW1zOiAgJXNcbiIpLCBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIGJhZGJsb2NrcykpOwor CQlwcmludGYoXygiRGF0YSBjaGVja3N1bSB2ZXJzaW9uOiAlZFxuIiksIENvbnRyb2xGaWxlLT5k YXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogCi0JaWYgKGJhZGJsb2NrcyA+IDApCisJCWlmIChiYWRi bG9ja3MgPiAwKQogCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqIFdoZW4gZW5hYmxpbmcgY2hl Y2tzdW1zLCB3YWl0IHVudGlsIHRoZSBlbmQgdGhlIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkCisJ ICogdG8gZG8gdGhlIHN3aXRjaC4KKwkgKi8KKwlpZiAoYWN0aW9uID09IFBHX0FDVElPTl9FTkFC TEUpCisJeworCQlDb250cm9sRmlsZS0+ZGF0YV9jaGVja3N1bV92ZXJzaW9uID0gUEdfREFUQV9D SEVDS1NVTV9WRVJTSU9OOworCQl1cGRhdGVDb250cm9sRmlsZShEYXRhRGlyLCBDb250cm9sRmls ZSk7CisJCWZzeW5jX3BnZGF0YShEYXRhRGlyLCBwcm9nbmFtZSwgUEdfVkVSU0lPTl9OVU0pOwor CQlpZiAodmVyYm9zZSkKKwkJCXByaW50ZihfKCJEYXRhIGNoZWNrc3VtIHZlcnNpb246ICVkXG4i KSwgQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbik7CisJCXByaW50ZihfKCJDaGVj a3N1bXMgZW5hYmxlZCBpbiBjbHVzdGVyXG4iKSk7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX3ZlcmlmeV9jaGVja3N1bXMvdC8wMDJfYWN0aW9ucy5wbCBiL3Ny Yy9iaW4vcGdfdmVyaWZ5X2NoZWNrc3Vtcy90LzAwMl9hY3Rpb25zLnBsCmluZGV4IDUyNTBiNWE3 MjguLmFmMjBjNjA0NDUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdmVyaWZ5X2NoZWNrc3Vtcy90 LzAwMl9hY3Rpb25zLnBsCisrKyBiL3NyYy9iaW4vcGdfdmVyaWZ5X2NoZWNrc3Vtcy90LzAwMl9h Y3Rpb25zLnBsCkBAIC01LDcgKzUsNyBAQCB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwogdXNl IFBvc3RncmVzTm9kZTsKIHVzZSBUZXN0TGliOwotdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gNDU7 Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA1OTsKIAogCiAjIFV0aWxpdHkgcm91dGluZSB0byBj cmVhdGUgYW5kIGNoZWNrIGEgdGFibGUgd2l0aCBjb3JydXB0ZWQgY2hlY2tzdW1zCkBAIC0zOCw4 ICszOCw4IEBAIHN1YiBjaGVja19yZWxhdGlvbl9jb3JydXB0aW9uCiAKIAkjIENoZWNrc3VtcyBh cmUgY29ycmVjdCBmb3Igc2luZ2xlIHJlbGZpbGVub2RlIGFzIHRoZSB0YWJsZSBpcyBub3QKIAkj IGNvcnJ1cHRlZCB5ZXQuCi0JY29tbWFuZF9vayhbJ3BnX3ZlcmlmeV9jaGVja3N1bXMnLCAgJy1E JywgJHBnZGF0YSwKLQkJJy1yJywgJHJlbGZpbGVub2RlX2NvcnJ1cHRlZF0sCisJY29tbWFuZF9v ayhbJ3BnX3ZlcmlmeV9jaGVja3N1bXMnLCAgJy1jJywgJy1EJywgJHBnZGF0YSwgJy1yJywKKwkJ CSAgICRyZWxmaWxlbm9kZV9jb3JydXB0ZWRdLAogCQkic3VjY2VlZHMgZm9yIHNpbmdsZSByZWxm aWxlbm9kZSBvbiB0YWJsZXNwYWNlICR0YWJsZXNwYWNlIHdpdGggb2ZmbGluZSBjbHVzdGVyIik7 CiAKIAkjIFRpbWUgdG8gY3JlYXRlIHNvbWUgY29ycnVwdGlvbgpAQCAtNDksMTUgKzQ5LDE1IEBA IHN1YiBjaGVja19yZWxhdGlvbl9jb3JydXB0aW9uCiAJY2xvc2UgJGZpbGU7CiAKIAkjIENoZWNr c3VtIGNoZWNrcyBvbiBzaW5nbGUgcmVsZmlsZW5vZGUgZmFpbAotCSRub2RlLT5jb21tYW5kX2No ZWNrc19hbGwoWyAncGdfdmVyaWZ5X2NoZWNrc3VtcycsICctRCcsICRwZ2RhdGEsICctcicsCi0J CQkJCQkJCSRyZWxmaWxlbm9kZV9jb3JydXB0ZWRdLAorCSRub2RlLT5jb21tYW5kX2NoZWNrc19h bGwoWyAncGdfdmVyaWZ5X2NoZWNrc3VtcycsICctYycsICctRCcsICRwZ2RhdGEsCisJCQkJCQkJ ICAnLXInLCAkcmVsZmlsZW5vZGVfY29ycnVwdGVkXSwKIAkJCQkJCQkgIDEsCiAJCQkJCQkJICBb cXIvQmFkIGNoZWNrc3VtczouKjEvXSwKIAkJCQkJCQkgIFtxci9jaGVja3N1bSB2ZXJpZmljYXRp b24gZmFpbGVkL10sCiAJCQkJCQkJICAiZmFpbHMgd2l0aCBjb3JydXB0ZWQgZGF0YSBmb3Igc2lu Z2xlIHJlbGZpbGVub2RlIG9uIHRhYmxlc3BhY2UgJHRhYmxlc3BhY2UiKTsKIAogCSMgR2xvYmFs IGNoZWNrc3VtIGNoZWNrcyBmYWlsIGFzIHdlbGwKLQkkbm9kZS0+Y29tbWFuZF9jaGVja3NfYWxs KFsgJ3BnX3ZlcmlmeV9jaGVja3N1bXMnLCAnLUQnLCAkcGdkYXRhXSwKKwkkbm9kZS0+Y29tbWFu ZF9jaGVja3NfYWxsKFsgJ3BnX3ZlcmlmeV9jaGVja3N1bXMnLCAnLWMnLCAnLUQnLCAkcGdkYXRh XSwKIAkJCQkJCQkgIDEsCiAJCQkJCQkJICBbcXIvQmFkIGNoZWNrc3VtczouKjEvXSwKIAkJCQkJ CQkgIFtxci9jaGVja3N1bSB2ZXJpZmljYXRpb24gZmFpbGVkL10sCkBAIC02NywyMiArNjcsMjIg QEAgc3ViIGNoZWNrX3JlbGF0aW9uX2NvcnJ1cHRpb24KIAkkbm9kZS0+c3RhcnQ7CiAJJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSAkdGFibGU7Iik7CiAJJG5vZGUtPnN0 b3A7Ci0JJG5vZGUtPmNvbW1hbmRfb2soWydwZ192ZXJpZnlfY2hlY2tzdW1zJywgJy1EJywgJHBn ZGF0YV0sCisJJG5vZGUtPmNvbW1hbmRfb2soWydwZ192ZXJpZnlfY2hlY2tzdW1zJywgJy1jJywg Jy1EJywgJHBnZGF0YV0sCiAJICAgICAgICAic3VjY2VlZHMgYWdhaW4gYWZ0ZXIgdGFibGUgZHJv cCBvbiB0YWJsZXNwYWNlICR0YWJsZXNwYWNlIik7CiAKIAkkbm9kZS0+c3RhcnQ7CiAJcmV0dXJu OwogfQogCi0jIEluaXRpYWxpemUgbm9kZSB3aXRoIGNoZWNrc3VtcyBlbmFibGVkLgorIyBJbml0 aWFsaXplIG5vZGUgd2l0aCBjaGVja3N1bXMgZGlzYWJsZWQuCiBteSAkbm9kZSA9IGdldF9uZXdf bm9kZSgnbm9kZV9jaGVja3N1bScpOwotJG5vZGUtPmluaXQoZXh0cmEgPT4gWyctLWRhdGEtY2hl Y2tzdW1zJ10pOworJG5vZGUtPmluaXQoKTsKIG15ICRwZ2RhdGEgPSAkbm9kZS0+ZGF0YV9kaXI7 CiAKLSMgQ29udHJvbCBmaWxlIHNob3VsZCBrbm93IHRoYXQgY2hlY2tzdW1zIGFyZSBlbmFibGVk LgorIyBDb250cm9sIGZpbGUgc2hvdWxkIGtub3cgdGhhdCBjaGVja3N1bXMgYXJlIGRpc2FibGVk LgogY29tbWFuZF9saWtlKFsncGdfY29udHJvbGRhdGEnLCAkcGdkYXRhXSwKLQkgICAgIHFyL0Rh dGEgcGFnZSBjaGVja3N1bSB2ZXJzaW9uOi4qMS8sCi0JCSAnY2hlY2tzdW1zIGVuYWJsZWQgaW4g Y29udHJvbCBmaWxlJyk7CisJICAgICBxci9EYXRhIHBhZ2UgY2hlY2tzdW0gdmVyc2lvbjouKjAv LAorCQkgJ2NoZWNrc3VtcyBkaXNhYmxlZCBpbiBjb250cm9sIGZpbGUnKTsKIAogIyBUaGVzZSBh cmUgY29ycmVjdCBidXQgZW1wdHkgZmlsZXMsIHNvIHRoZXkgc2hvdWxkIHBhc3MgdGhyb3VnaC4K IGFwcGVuZF90b19maWxlICIkcGdkYXRhL2dsb2JhbC85OTk5OSIsICIiOwpAQCAtMTAwLDEzICsx MDAsNDkgQEAgYXBwZW5kX3RvX2ZpbGUgIiRwZ2RhdGEvZ2xvYmFsL3Bnc3FsX3RtcF8xMjMiLCAi Zm9vIjsKIG1rZGlyICIkcGdkYXRhL2dsb2JhbC9wZ3NxbF90bXAiOwogYXBwZW5kX3RvX2ZpbGUg IiRwZ2RhdGEvZ2xvYmFsL3Bnc3FsX3RtcC8xLjEiLCAiZm9vIjsKIAorIyBFbmFibGUgY2hlY2tz dW1zCitjb21tYW5kX29rKFsncGdfdmVyaWZ5X2NoZWNrc3VtcycsICctZScsICctRCcsICRwZ2Rh dGFdLAorCQkgICAiY2hlY2tzdW1zIHN1Y2Nlc3NmdWxseSBlbmFibGVkIGluIGNsdXN0ZXIiKTsK KworIyBDb250cm9sIGZpbGUgc2hvdWxkIGtub3cgdGhhdCBjaGVja3N1bXMgYXJlIGVuYWJsZWQu Citjb21tYW5kX2xpa2UoWydwZ19jb250cm9sZGF0YScsICRwZ2RhdGFdLAorCSAgICAgcXIvRGF0 YSBwYWdlIGNoZWNrc3VtIHZlcnNpb246LioxLywKKwkJICdjaGVja3N1bXMgZW5hYmxlZCBpbiBj b250cm9sIGZpbGUnKTsKKworIyBEaXNhYmxlIGNoZWNrc3VtcyBhZ2FpbgorY29tbWFuZF9vayhb J3BnX3ZlcmlmeV9jaGVja3N1bXMnLCAnLWQnLCAnLUQnLCAkcGdkYXRhXSwKKwkJICAgImNoZWNr c3VtcyBzdWNjZXNzZnVsbHkgZGlzYWJsZWQgaW4gY2x1c3RlciIpOworCisjIENvbnRyb2wgZmls ZSBzaG91bGQga25vdyB0aGF0IGNoZWNrc3VtcyBhcmUgZGlzYWJsZWQuCitjb21tYW5kX2xpa2Uo WydwZ19jb250cm9sZGF0YScsICRwZ2RhdGFdLAorCSAgICAgcXIvRGF0YSBwYWdlIGNoZWNrc3Vt IHZlcnNpb246LiowLywKKwkJICdjaGVja3N1bXMgZGlzYWJsZWQgaW4gY29udHJvbCBmaWxlJyk7 CisKKyMgRW5hYmxlIGNoZWNrc3VtcyBhZ2FpbiB3aXRoIGxvbmcgb3B0aW9uCitjb21tYW5kX29r KFsncGdfdmVyaWZ5X2NoZWNrc3VtcycsICctLWVuYWJsZScsICctRCcsICRwZ2RhdGFdLAorCQkg ICAiY2hlY2tzdW1zIHN1Y2Nlc3NmdWxseSBlbmFibGVkIGluIGNsdXN0ZXIiKTsKKworIyBDb250 cm9sIGZpbGUgc2hvdWxkIGtub3cgdGhhdCBjaGVja3N1bXMgYXJlIGVuYWJsZWQuCitjb21tYW5k X2xpa2UoWydwZ19jb250cm9sZGF0YScsICRwZ2RhdGFdLAorCSAgICAgcXIvRGF0YSBwYWdlIGNo ZWNrc3VtIHZlcnNpb246LioxLywKKwkJICdjaGVja3N1bXMgZW5hYmxlZCBpbiBjb250cm9sIGZp bGUnKTsKKwogIyBDaGVja3N1bXMgcGFzcyBvbiBhIG5ld2x5LWNyZWF0ZWQgY2x1c3RlcgotY29t bWFuZF9vayhbJ3BnX3ZlcmlmeV9jaGVja3N1bXMnLCAgJy1EJywgJHBnZGF0YV0sCitjb21tYW5k X29rKFsncGdfdmVyaWZ5X2NoZWNrc3VtcycsICctYycsICctRCcsICRwZ2RhdGFdLAogCQkgICAi c3VjY2VlZHMgd2l0aCBvZmZsaW5lIGNsdXN0ZXIiKTsKIAorIyBDaGVja3N1bXMgYXJlIHZlcmlm aWVkIGlmIG5vIG90aGVyIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkCitjb21tYW5kX29rKFsncGdf dmVyaWZ5X2NoZWNrc3VtcycsICctRCcsICRwZ2RhdGFdLAorCQkgICAidmVyaWZpZXMgY2hlY2tz dW1zIGFzIGRlZmF1bHQgYWN0aW9uIik7CisKKyMgU3BlY2lmaWMgcmVsYXRpb24gZmlsZXMgY2Fu bm90IGJlIHJlcXVlc3RlZCB3aGVuIGFjdGlvbiBpcyBkaXNhYmxlCitjb21tYW5kX2ZhaWxzKFsn cGdfdmVyaWZ5X2NoZWNrc3VtcycsICctZCcsICctcicsICcxMjM0JywgJy1EJywKKwkJCSAgJHBn ZGF0YV0sCisJCQkgICJmYWlscyB3aGVuIHJlbGZpbG5vZGVzIGFyZSByZXF1ZXN0ZWQgYW5kIGFj dGlvbiBpcyBub3QgdmVyaWZ5Iik7CisKICMgQ2hlY2tzIGNhbm5vdCBoYXBwZW4gd2l0aCBhbiBv bmxpbmUgY2x1c3RlcgogJG5vZGUtPnN0YXJ0OwotY29tbWFuZF9mYWlscyhbJ3BnX3ZlcmlmeV9j aGVja3N1bXMnLCAgJy1EJywgJHBnZGF0YV0sCitjb21tYW5kX2ZhaWxzKFsncGdfdmVyaWZ5X2No ZWNrc3VtcycsICctYycsICctRCcsICRwZ2RhdGFdLAogCQkJICAiZmFpbHMgd2l0aCBvbmxpbmUg Y2x1c3RlciIpOwogCiAjIENoZWNrIGNvcnJ1cHRpb24gb2YgdGFibGUgb24gZGVmYXVsdCB0YWJs ZXNwYWNlLgpAQCAtMTMzLDcgKzE2OSw3IEBAIHN1YiBmYWlsX2NvcnJ1cHQKIAlteSAkZmlsZV9u YW1lID0gIiRwZ2RhdGEvZ2xvYmFsLyRmaWxlIjsKIAlhcHBlbmRfdG9fZmlsZSAkZmlsZV9uYW1l LCAiZm9vIjsKIAotCSRub2RlLT5jb21tYW5kX2NoZWNrc19hbGwoWyAncGdfdmVyaWZ5X2NoZWNr c3VtcycsICctRCcsICRwZ2RhdGFdLAorCSRub2RlLT5jb21tYW5kX2NoZWNrc19hbGwoWyAncGdf dmVyaWZ5X2NoZWNrc3VtcycsICctYycsICctRCcsICRwZ2RhdGFdLAogCQkJCQkJICAxLAogCQkJ CQkJICBbcXIvXiQvXSwKIAkJCQkJCSAgW3FyL2NvdWxkIG5vdCByZWFkIGJsb2NrIDAgaW4gZmls ZS4qJGZpbGVcIjovXSwK --=-xv6cee8xRRHD7jcsnmAU--