Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q4Azu-0005f1-6C for pgsql-hackers@arkaria.postgresql.org; Wed, 31 May 2023 01:51:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1q4Azs-0000Re-HR for pgsql-hackers@arkaria.postgresql.org; Wed, 31 May 2023 01:51:32 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q4Azr-0000RV-SC for pgsql-hackers@lists.postgresql.org; Wed, 31 May 2023 01:51:32 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q4Azj-002oOZ-49 for pgsql-hackers@postgresql.org; Wed, 31 May 2023 01:51:30 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 4771B6050F; Wed, 31 May 2023 10:51:19 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.8 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_5fc5b8573388363569c6c8dc3b55d477" Content-Transfer-Encoding: 7bit Date: Wed, 31 May 2023 10:51:19 +0900 From: torikoshia To: Michael Paquier , Kyotaro Horiguchi Cc: Bharath Rupireddy , pgsql-hackers@postgresql.org Subject: Re: Allow pg_archivecleanup to remove backup history files In-Reply-To: References: <5adce8cd5ad2269fe687d2d56a341c88@oss.nttdata.com> <61abc656edfba4a668b367d590b1aaab@oss.nttdata.com> <0aad03237204efeb7038dafa38c202aa@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_5fc5b8573388363569c6c8dc3b55d477 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2023-05-26 10:07, Kyotaro Horiguchi wrote: Thanks for your review! > + printf(_(" -x --strip-extension=EXT clean up files if they have > this extension\n")); > > Perhaps a comma is needed after "-x". That's an oversight. Modified it. > The apparent inconsistency > between the long name and the description is perplexing. I think it > might be more suitable to reword the descrition to "ignore this > extension while identifying files for cleanup" or something along > those lines..., and then name the option as "--ignore-extension". I used 'strip' since it is used in the manual as below: | -x extension | Provide an extension that will be stripped from all file names before deciding if they should be deleted I think using the same verb both in long name option and in the manual is natural. How about something like this? | printf(_(" -x, --strip-extension=EXT strip this extention before identifying files fo clean up\n")); > The patch leaves the code. > >> * Truncation is essentially harmless, because we skip names of >> * length other than XLOG_FNAME_LEN. (In principle, one could use >> * a 1000-character additional_ext and get trouble.) >> */ >> strlcpy(walfile, xlde->d_name, MAXPGPATH); >> TrimExtension(walfile, additional_ext); > > The comment is no longer correct about the file name length. Yeah. considering parital WAL, it would be not correct even before applying the patch. I modifiied the comments as below: | * Truncation is essentially harmless, because we check the file | * format including the length immediately after this. > + if (!IsXLogFileName(walfile) && !IsPartialXLogFileName(walfile) && > + (!cleanBackupHistory || !IsBackupHistoryFileName(walfile))) > + continue; > > I'm not certain about the others, but I see this a tad tricky to > understand at first glance. Here's how I would phrase it. (A nearby > comment might require a tweak if we go ahead with this change.) > > if (!(IsXLogFileName(walfile) || IsPartialXLogFileName(walfile) || > (cleanBackupHistory && IsBackupHistoryFileName(walfile)))) > > or > > if (!IsXLogFileName(walfile) && !IsPartialXLogFileName(walfile) && > !(cleanBackupHistory && IsBackupHistoryFileName(walfile))) Thanks for the suggestion, I used the second one. > By the way, this patch reduces the nesting level. If we go that > direction, the following structure could be reworked similarly, and I > believe it results in a more standard structure. > > if ((xldir = opendir(archiveLocation)) != NULL) > { > ... > } > else > pg_fatal("could not open archive location.. Agreed. Attached 0003 patch for this. On 2023-05-26 14:19, Michael Paquier wrote: > On Thu, May 25, 2023 at 11:51:18PM +0900, torikoshia wrote: >> Updated patches according to your comment. > > - ok(!-f "$tempdir/$walfiles[1]", > - "$test_name: second older WAL file was cleaned up"); > - ok(-f "$tempdir/$walfiles[2]", > + ok(!-f "$tempdir/@$walfiles[1]", > + "$test_name: second older WAL/backup history file was cleaned > up"); > + ok(-f "$tempdir/@$walfiles[2]", > > This is still a bit confusing, because as designed the test has a > dependency on the number of elements present in the list, and the > description of the test may not refer to what's actually used (the > second element of each list is either a WAL segment or a backup > history file). I think that I would just rewrite that so as we have a > list of WAL segments in an array with the expected result associated > to each one of them. Basically, something like that: > my @wal_segments = ( > { name => "SEGMENT1", present => 0 }, > { name => "BACKUPFILE1", present => 1 }, > { name => "SEGMENT2", present => 0 }); > > Then the last part of run_check() would loop through all the elements > listed. Thanks. Update the patch according to the advice. I also changed the parameter of run_check() from specifying extension of oldestkeptwalfile to oldestkeptwalfile itself. -- Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_5fc5b8573388363569c6c8dc3b55d477 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v5-0001-Introduce-pg_archivecleanup-into-getopt_long.patch Content-Disposition: attachment; filename=v5-0001-Introduce-pg_archivecleanup-into-getopt_long.patch; size=4037 RnJvbSAwNmI1NjY0ZDEwOTNhYmE0NDUzMzJhZDU0MjBiZDQ0MmI5OWE4Zjk4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgMzAgTWF5IDIwMjMgMjA6NDQ6MzcgKzA5MDAKU3ViamVjdDog W1BBVENIIHY1IDEvM10gSW50cm9kdWNlIHBnX2FyY2hpdmVjbGVhbnVwIGludG8gZ2V0b3B0X2xv bmcKClRoaXMgcGF0Y2ggaXMgYSBwcmVsaW1pbmFyeSBzdGVwIHRvIGFkZCBhbiBlYXN5LXRvLXVu ZGVyc3RhbmQgb3B0aW9uCnRvIGRlbGV0ZSBiYWNrdXAgaGlzdG9yeSBmaWxlcywgYnV0IGl0IGFs c28gYWRkcyBsb25nIG9wdGlvbnMgdG8KdGhlIGV4aXN0aW5nIG9wdGlvbnMuCi0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ2FyY2hpdmVjbGVhbnVwLnNnbWwgICAgICAgIHwgIDUgKysrKy0KIHNyYy9i aW4vcGdfYXJjaGl2ZWNsZWFudXAvcGdfYXJjaGl2ZWNsZWFudXAuYyB8IDIwICsrKysrKysrKysr Ky0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYXJjaGl2ZWNsZWFudXAuc2dtbCBi L2RvYy9zcmMvc2dtbC9yZWYvcGdhcmNoaXZlY2xlYW51cC5zZ21sCmluZGV4IDYzNWU3Yzc2ODUu LjA5OTkxYzJmY2QgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdhcmNoaXZlY2xlYW51 cC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdhcmNoaXZlY2xlYW51cC5zZ21sCkBAIC05 NSw2ICs5NSw3IEBAIHBnX2FyY2hpdmVjbGVhbnVwOiAgcmVtb3ZpbmcgZmlsZSAiYXJjaGl2ZS8w MDAwMDAwMTAwMDAwMDM3MDAwMDAwMEUiCiAKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0 ZXJtPjxvcHRpb24+LWQ8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZGVi dWc8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgPHBhcmE+CiAgICAg ICAgIFByaW50IGxvdHMgb2YgZGVidWcgbG9nZ2luZyBvdXRwdXQgb24gPGZpbGVuYW1lPnN0ZGVy cjwvZmlsZW5hbWU+LgpAQCAtMTA0LDYgKzEwNSw3IEBAIHBnX2FyY2hpdmVjbGVhbnVwOiAgcmVt b3ZpbmcgZmlsZSAiYXJjaGl2ZS8wMDAwMDAwMTAwMDAwMDM3MDAwMDAwMEUiCiAKICAgICAgPHZh cmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LW48L29wdGlvbj48L3Rlcm0+CisgICAg ICA8dGVybT48b3B0aW9uPi0tZHJ5LXJ1bjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRl bT4KICAgICAgICA8cGFyYT4KICAgICAgICAgUHJpbnQgdGhlIG5hbWVzIG9mIHRoZSBmaWxlcyB0 aGF0IHdvdWxkIGhhdmUgYmVlbiByZW1vdmVkIG9uIDxmaWxlbmFtZT5zdGRvdXQ8L2ZpbGVuYW1l PiAocGVyZm9ybXMgYSBkcnkgcnVuKS4KQEAgLTEyMiw3ICsxMjQsOCBAQCBwZ19hcmNoaXZlY2xl YW51cDogIHJlbW92aW5nIGZpbGUgImFyY2hpdmUvMDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBFIgog ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICA8dmFybGlzdGVudHJ5PgotICAgICAgPHRlcm0+ PG9wdGlvbj4teDwvb3B0aW9uPiA8cmVwbGFjZWFibGU+ZXh0ZW5zaW9uPC9yZXBsYWNlYWJsZT48 L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi14IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5leHRlbnNpb248L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LS1zdHJpcC1leHRlbnNpb249PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmV4dGVuc2lvbjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVt PgogICAgICAgIDxwYXJhPgogICAgICAgICBQcm92aWRlIGFuIGV4dGVuc2lvbgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19hcmNoaXZlY2xlYW51cC9wZ19hcmNoaXZlY2xlYW51cC5jIGIvc3JjL2Jp bi9wZ19hcmNoaXZlY2xlYW51cC9wZ19hcmNoaXZlY2xlYW51cC5jCmluZGV4IDc3MjZkMDUxNDku LmJlNjJmZmU3NWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfYXJjaGl2ZWNsZWFudXAvcGdfYXJj aGl2ZWNsZWFudXAuYworKysgYi9zcmMvYmluL3BnX2FyY2hpdmVjbGVhbnVwL3BnX2FyY2hpdmVj bGVhbnVwLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9nX2ludGVy bmFsLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJwZ19nZXRvcHQu aCIKKyNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogCiBjb25zdCBjaGFyICpwcm9nbmFtZTsKIApA QCAtMjUyLDExICsyNTIsMTEgQEAgdXNhZ2Uodm9pZCkKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7 CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi4gQVJDSElWRUxPQ0FUSU9OIE9MREVTVEtFUFRX QUxGSUxFXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJcbk9wdGlvbnM6XG4iKSk7Ci0JcHJp bnRmKF8oIiAgLWQgICAgICAgICAgICAgZ2VuZXJhdGUgZGVidWcgb3V0cHV0ICh2ZXJib3NlIG1v ZGUpXG4iKSk7Ci0JcHJpbnRmKF8oIiAgLW4gICAgICAgICAgICAgZHJ5IHJ1biwgc2hvdyB0aGUg bmFtZXMgb2YgdGhlIGZpbGVzIHRoYXQgd291bGQgYmUgcmVtb3ZlZFxuIikpOwotCXByaW50Zihf KCIgIC1WLCAtLXZlcnNpb24gIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRc biIpKTsKLQlwcmludGYoXygiICAteCBFWFQgICAgICAgICBjbGVhbiB1cCBmaWxlcyBpZiB0aGV5 IGhhdmUgdGhpcyBleHRlbnNpb25cbiIpKTsKLQlwcmludGYoXygiICAtPywgLS1oZWxwICAgICBz aG93IHRoaXMgaGVscCwgdGhlbiBleGl0XG4iKSk7CisJcHJpbnRmKF8oIiAgLWQsIC0tZGVidWcg ICAgICAgICAgICAgICAgIGdlbmVyYXRlIGRlYnVnIG91dHB1dCAodmVyYm9zZSBtb2RlKVxuIikp OworCXByaW50ZihfKCIgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICAgICBkcnkgcnVuLCBzaG93 IHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgdGhhdCB3b3VsZCBiZSByZW1vdmVkXG4iKSk7CisJcHJp bnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9y bWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKKwlwcmludGYoXygiICAteCwgLS1zdHJpcC1leHRlbnNp b249RVhUICAgc3RyaXAgdGhpcyBleHRlbnRpb24gYmVmb3JlIGlkZW50aWZ5aW5nIGZpbGVzIGZv IGNsZWFuIHVwXG4iKSk7CisJcHJpbnRmKF8oIiAgLT8sIC0taGVscCAgICAgICAgICAgICAgICAg IHNob3cgdGhpcyBoZWxwLCB0aGVuIGV4aXRcbiIpKTsKIAlwcmludGYoXygiXG4iCiAJCQkgIkZv ciB1c2UgYXMgYXJjaGl2ZV9jbGVhbnVwX2NvbW1hbmQgaW4gcG9zdGdyZXNxbC5jb25mOlxuIgog CQkJICIgIGFyY2hpdmVfY2xlYW51cF9jb21tYW5kID0gJ3BnX2FyY2hpdmVjbGVhbnVwIFtPUFRJ T05dLi4uIEFSQ0hJVkVMT0NBVElPTiAlJXInXG4iCkBAIC0yNzQsNiArMjc0LDEyIEBAIHVzYWdl KHZvaWQpCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogeworCXN0YXRpYyBzdHJ1 Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworCQl7ImRlYnVnIiwgbm9fYXJndW1lbnQsIE5V TEwsICdkJ30sCisJCXsiZHJ5LXJ1biIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnbid9LAorCQl7InN0 cmlwLWV4dGVuc2lvbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAneCd9LAorCQl7TlVMTCwg MCwgTlVMTCwgMH0KKwl9OwogCWludAkJCWM7CiAKIAlwZ19sb2dnaW5nX2luaXQoYXJndlswXSk7 CkBAIC0yOTQsNyArMzAwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9 CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgImRueDoiKSkgIT0gLTEpCisJd2hp bGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImRueDoiLCBsb25nX29wdGlvbnMsIE5V TEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewotLSAKMi4zOS4yCgo= --=_5fc5b8573388363569c6c8dc3b55d477 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v5-0002-Allow-pg_archivecleanup-to-remove-backup-history-.patch Content-Disposition: attachment; filename=v5-0002-Allow-pg_archivecleanup-to-remove-backup-history-.patch; size=11059 RnJvbSBlZjIzNGZlMDZmMzJiMGIzYjBiM2Q1NGNlZmM3OGVlN2ZiZjQwMzI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgMzAgTWF5IDIwMjMgMjA6NDY6NDIgKzA5MDAKU3ViamVjdDog W1BBVENIIHY1IDIvM10gQWxsb3cgcGdfYXJjaGl2ZWNsZWFudXAgdG8gcmVtb3ZlIGJhY2t1cCBo aXN0b3J5IGZpbGVzCgpCYWNrdXAgaGlzdG9yeSBmaWxlcyBhcmUganVzdCBmZXcgYnl0ZXMsIGJ1 dCBpdCBjYW4gYmUgbm9pc3kgZm9yIHRoZQpleWUgdG8gc2VlIGEgbGFyZ2UgYWNjdW11bGF0aW9u IG9mIGhpc3RvcnkgZmlsZXMgbWl4ZWQgd2l0aCB0aGUgV0FMCnNlZ21lbnRzLgpUaGlzIHBhdGNo IGFkZHMgYSBuZXcgb3B0aW9uIHRvIHJlbW92ZSBmaWxlcyBpbmNsdWRpbmcgYmFja3VwCmhpc3Rv cnkgZmlsZXMgb2xkZXIgb2xkZXN0a2VwdHdhbGZpbGUuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9w Z2FyY2hpdmVjbGVhbnVwLnNnbWwgICAgICAgIHwgMTEgKysrCiBzcmMvYmluL3BnX2FyY2hpdmVj bGVhbnVwL3BnX2FyY2hpdmVjbGVhbnVwLmMgfCA4NSArKysrKysrKysrKystLS0tLS0tCiAuLi4v dC8wMTBfcGdfYXJjaGl2ZWNsZWFudXAucGwgICAgICAgICAgICAgICAgfCA3OSArKysrKysrKysr Ky0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxMTcgaW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ2FyY2hpdmVjbGVhbnVwLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL3BnYXJjaGl2ZWNsZWFudXAuc2dtbAppbmRleCAwOTk5MWMyZmNk Li44ZmFjMjMzZGI2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYXJjaGl2ZWNsZWFu dXAuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnYXJjaGl2ZWNsZWFudXAuc2dtbApAQCAt MTEzLDYgKzExMywxNyBAQCBwZ19hcmNoaXZlY2xlYW51cDogIHJlbW92aW5nIGZpbGUgImFyY2hp dmUvMDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBFIgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92 YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+ LWI8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tY2xlYW4tYmFja3VwLWhp c3Rvcnk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+Cisg ICAgICAgICBSZW1vdmUgYmFja3VwIGhpc3RvcnkgZmlsZXMuCisgICAgICAgICBGb3IgZGV0YWls cyBhYm91dCBiYWNrdXAgaGlzdG9yeSBmaWxlLCBwbGVhc2UgcmVmZXIgdG8gdGhlIDx4cmVmIGxp bmtlbmQ9ImJhY2t1cC1iYXNlLWJhY2t1cCIvPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xp c3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAg ICAgPHRlcm0+PG9wdGlvbj4tVjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+ LS12ZXJzaW9uPC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19hcmNoaXZl Y2xlYW51cC9wZ19hcmNoaXZlY2xlYW51cC5jIGIvc3JjL2Jpbi9wZ19hcmNoaXZlY2xlYW51cC9w Z19hcmNoaXZlY2xlYW51cC5jCmluZGV4IGJlNjJmZmU3NWQuLmE3Zjc3ZDkxNTggMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcGdfYXJjaGl2ZWNsZWFudXAvcGdfYXJjaGl2ZWNsZWFudXAuYworKysgYi9z cmMvYmluL3BnX2FyY2hpdmVjbGVhbnVwL3BnX2FyY2hpdmVjbGVhbnVwLmMKQEAgLTIzLDYgKzIz LDggQEAgY29uc3QgY2hhciAqcHJvZ25hbWU7CiAKIC8qIE9wdGlvbnMgYW5kIGRlZmF1bHRzICov CiBib29sCQlkcnlydW4gPSBmYWxzZTsJCS8qIGFyZSB3ZSBwZXJmb3JtaW5nIGEgZHJ5LXJ1biBv cGVyYXRpb24/ICovCitib29sCQljbGVhbkJhY2t1cEhpc3RvcnkgPSBmYWxzZTsJLyogcmVtb3Zl IGZpbGVzIGluY2x1ZGluZworCQkJCQkJCQkJCQkJICogYmFja3VwIGhpc3RvcnkgZmlsZXMgKi8K IGNoYXIJICAgKmFkZGl0aW9uYWxfZXh0ID0gTlVMTDsJLyogRXh0ZW5zaW9uIHRvIHJlbW92ZSBm cm9tIGZpbGVuYW1lcyAqLwogCiBjaGFyCSAgICphcmNoaXZlTG9jYXRpb247CS8qIHdoZXJlIHRv IGZpbmQgdGhlIGFyY2hpdmU/ICovCkBAIC05NywxNSArOTksMzEgQEAgQ2xlYW51cFByaW9yV0FM RmlsZXModm9pZCkKIAl7CiAJCXdoaWxlIChlcnJubyA9IDAsICh4bGRlID0gcmVhZGRpcih4bGRp cikpICE9IE5VTEwpCiAJCXsKKwkJCWNoYXIJCVdBTEZpbGVQYXRoW01BWFBHUEFUSCAqIDJdOyAv KiB0aGUgZmlsZSBwYXRoCisJCQkJCQkJCQkJCQkJCSAqIGluY2x1ZGluZyBhcmNoaXZlICovCiAJ CQkvKgotCQkJICogVHJ1bmNhdGlvbiBpcyBlc3NlbnRpYWxseSBoYXJtbGVzcywgYmVjYXVzZSB3 ZSBza2lwIG5hbWVzIG9mCi0JCQkgKiBsZW5ndGggb3RoZXIgdGhhbiBYTE9HX0ZOQU1FX0xFTi4g IChJbiBwcmluY2lwbGUsIG9uZSBjb3VsZCB1c2UKLQkJCSAqIGEgMTAwMC1jaGFyYWN0ZXIgYWRk aXRpb25hbF9leHQgYW5kIGdldCB0cm91YmxlLikKKwkJCSAqIFRydW5jYXRpb24gaXMgZXNzZW50 aWFsbHkgaGFybWxlc3MsICBiZWNhdXNlIHdlIGNoZWNrIHRoZSBmaWxlCisJCQkgKiBmb3JtYXQg aW5jbHVkaW5nIHRoZSBsZW5ndGggaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcy4KKwkJCSAqIChJbiBw cmluY2lwbGUsIG9uZSBjb3VsZCB1c2UgYSAxMDAwLWNoYXJhY3RlciBhZGRpdGlvbmFsX2V4dAor CQkJICogYW5kIGdldCB0cm91YmxlLikKIAkJCSAqLwogCQkJc3RybGNweSh3YWxmaWxlLCB4bGRl LT5kX25hbWUsIE1BWFBHUEFUSCk7CiAJCQlUcmltRXh0ZW5zaW9uKHdhbGZpbGUsIGFkZGl0aW9u YWxfZXh0KTsKIAogCQkJLyoKKwkJCSAqIENoZWNrIGZpbGUgbmFtZS4KKwkJCSAqCisJCQkgKiBX ZSBza2lwIGZpbGVzIHdoaWNoIGFyZSBub3QgV0FMIGZpbGUgb3IgcGFydGlhbCBXQUwgZmlsZS4K KwkJCSAqIEFsc28gd2Ugc2tpcCBiYWNrdXAgaGlzdG9yeSBmaWxlcyB3aGVuIC0tY2xlYW4tYmFj a3VwLWhpc3RvcnkKKwkJCSAqIGlzIG5vdCBzcGVjaWZpZWQuCisJCQkgKi8KKwkJCWlmICghSXNY TG9nRmlsZU5hbWUod2FsZmlsZSkgJiYgIUlzUGFydGlhbFhMb2dGaWxlTmFtZSh3YWxmaWxlKSAm JgorCQkJCSEoY2xlYW5CYWNrdXBIaXN0b3J5ICYmIElzQmFja3VwSGlzdG9yeUZpbGVOYW1lKHdh bGZpbGUpKSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIENoZWNrIGN1dG9mZiBwb2lu dC4KKwkJCSAqCiAJCQkgKiBXZSBpZ25vcmUgdGhlIHRpbWVsaW5lIHBhcnQgb2YgdGhlIFhMT0cg c2VnbWVudCBpZGVudGlmaWVycyBpbgogCQkJICogZGVjaWRpbmcgd2hldGhlciBhIHNlZ21lbnQg aXMgc3RpbGwgbmVlZGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQKIAkJCSAqIHdlIHdvbid0IHByZW1h dHVyZWx5IHJlbW92ZSBhIHNlZ21lbnQgZnJvbSBhIHBhcmVudCB0aW1lbGluZS4KQEAgLTExOCwz OSArMTM2LDM1IEBAIENsZWFudXBQcmlvcldBTEZpbGVzKHZvaWQpCiAJCQkgKiBmaWxlLiBOb3Rl IHRoYXQgdGhpcyBtZWFucyBmaWxlcyBhcmUgbm90IHJlbW92ZWQgaW4gdGhlIG9yZGVyCiAJCQkg KiB0aGV5IHdlcmUgb3JpZ2luYWxseSB3cml0dGVuLCBpbiBjYXNlIHRoaXMgd29ycmllcyB5b3Uu CiAJCQkgKi8KLQkJCWlmICgoSXNYTG9nRmlsZU5hbWUod2FsZmlsZSkgfHwgSXNQYXJ0aWFsWExv Z0ZpbGVOYW1lKHdhbGZpbGUpKSAmJgotCQkJCXN0cmNtcCh3YWxmaWxlICsgOCwgZXhjbHVzaXZl Q2xlYW51cEZpbGVOYW1lICsgOCkgPCAwKQotCQkJewotCQkJCWNoYXIJCVdBTEZpbGVQYXRoW01B WFBHUEFUSCAqIDJdOyAvKiB0aGUgZmlsZSBwYXRoCi0JCQkJCQkJCQkJCQkJCSAqIGluY2x1ZGlu ZyBhcmNoaXZlICovCisJCQlpZiAoc3RyY21wKHdhbGZpbGUgKyA4LCBleGNsdXNpdmVDbGVhbnVw RmlsZU5hbWUgKyA4KSA+PSAwKQorCQkJCWNvbnRpbnVlOwogCisJCQkvKgorCQkJICogVXNlIHRo ZSBvcmlnaW5hbCBmaWxlIG5hbWUgYWdhaW4gbm93LCBpbmNsdWRpbmcgYW55CisJCQkgKiBleHRl bnNpb24gdGhhdCBtaWdodCBoYXZlIGJlZW4gY2hvcHBlZCBvZmYgYmVmb3JlIHRlc3RpbmcKKwkJ CSAqIHRoZSBzZXF1ZW5jZS4KKwkJCSAqLworCQkJc25wcmludGYoV0FMRmlsZVBhdGgsIHNpemVv ZihXQUxGaWxlUGF0aCksICIlcy8lcyIsCisJCQkJCSBhcmNoaXZlTG9jYXRpb24sIHhsZGUtPmRf bmFtZSk7CisKKwkJCWlmIChkcnlydW4pCisJCQl7CiAJCQkJLyoKLQkJCQkgKiBVc2UgdGhlIG9y aWdpbmFsIGZpbGUgbmFtZSBhZ2FpbiBub3csIGluY2x1ZGluZyBhbnkKLQkJCQkgKiBleHRlbnNp b24gdGhhdCBtaWdodCBoYXZlIGJlZW4gY2hvcHBlZCBvZmYgYmVmb3JlIHRlc3RpbmcKLQkJCQkg KiB0aGUgc2VxdWVuY2UuCisJCQkJICogUHJpbnRzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJl IHJlbW92ZWQgYW5kIHNraXBzIHRoZQorCQkJCSAqIGFjdHVhbCByZW1vdmFsLiAgVGhlIHJlZ3Vs YXIgcHJpbnRvdXQgaXMgc28gdGhhdCB0aGUKKwkJCQkgKiB1c2VyIGNhbiBwaXBlIHRoZSBvdXRw dXQgaW50byBzb21lIG90aGVyIHByb2dyYW0uCiAJCQkJICovCi0JCQkJc25wcmludGYoV0FMRmls ZVBhdGgsIHNpemVvZihXQUxGaWxlUGF0aCksICIlcy8lcyIsCi0JCQkJCQkgYXJjaGl2ZUxvY2F0 aW9uLCB4bGRlLT5kX25hbWUpOwotCi0JCQkJaWYgKGRyeXJ1bikKLQkJCQl7Ci0JCQkJCS8qCi0J CQkJCSAqIFByaW50cyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSByZW1vdmVkIGFuZCBza2lw cyB0aGUKLQkJCQkJICogYWN0dWFsIHJlbW92YWwuICBUaGUgcmVndWxhciBwcmludG91dCBpcyBz byB0aGF0IHRoZQotCQkJCQkgKiB1c2VyIGNhbiBwaXBlIHRoZSBvdXRwdXQgaW50byBzb21lIG90 aGVyIHByb2dyYW0uCi0JCQkJCSAqLwotCQkJCQlwcmludGYoIiVzXG4iLCBXQUxGaWxlUGF0aCk7 Ci0JCQkJCXBnX2xvZ19kZWJ1ZygiZmlsZSBcIiVzXCIgd291bGQgYmUgcmVtb3ZlZCIsIFdBTEZp bGVQYXRoKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJcGdfbG9nX2RlYnVnKCJyZW1v dmluZyBmaWxlIFwiJXNcIiIsIFdBTEZpbGVQYXRoKTsKLQotCQkJCXJjID0gdW5saW5rKFdBTEZp bGVQYXRoKTsKLQkJCQlpZiAocmMgIT0gMCkKLQkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZW1v dmUgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCQkgV0FMRmlsZVBhdGgpOworCQkJCXByaW50Zigi JXNcbiIsIFdBTEZpbGVQYXRoKTsKKwkJCQlwZ19sb2dfZGVidWcoImZpbGUgXCIlc1wiIHdvdWxk IGJlIHJlbW92ZWQiLCBXQUxGaWxlUGF0aCk7CisJCQkJY29udGludWU7CiAJCQl9CisKKwkJCXBn X2xvZ19kZWJ1ZygicmVtb3ZpbmcgZmlsZSBcIiVzXCIiLCBXQUxGaWxlUGF0aCk7CisKKwkJCXJj ID0gdW5saW5rKFdBTEZpbGVQYXRoKTsKKwkJCWlmIChyYyAhPSAwKQorCQkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgcmVtb3ZlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQkgV0FMRmlsZVBhdGgpOwog CQl9CiAKIAkJaWYgKGVycm5vKQpAQCAtMjU0LDYgKzI2OCw3IEBAIHVzYWdlKHZvaWQpCiAJcHJp bnRmKF8oIlxuT3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAtZCwgLS1kZWJ1ZyAgICAgICAg ICAgICAgICAgZ2VuZXJhdGUgZGVidWcgb3V0cHV0ICh2ZXJib3NlIG1vZGUpXG4iKSk7CiAJcHJp bnRmKF8oIiAgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgICAgIGRyeSBydW4sIHNob3cgdGhlIG5h bWVzIG9mIHRoZSBmaWxlcyB0aGF0IHdvdWxkIGJlIHJlbW92ZWRcbiIpKTsKKwlwcmludGYoXygi ICAtYiwgLS1jbGVhbi1iYWNrdXAtaGlzdG9yeSAgY2xlYW4gdXAgZmlsZXMgaW5jbHVkaW5nIGJh Y2t1cCBoaXN0b3J5IGZpbGVzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAg ICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uLCB0aGVuIGV4aXRcbiIpKTsKIAlw cmludGYoXygiICAteCwgLS1zdHJpcC1leHRlbnNpb249RVhUICAgc3RyaXAgdGhpcyBleHRlbnRp b24gYmVmb3JlIGlkZW50aWZ5aW5nIGZpbGVzIGZvIGNsZWFuIHVwXG4iKSk7CiAJcHJpbnRmKF8o IiAgLT8sIC0taGVscCAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwLCB0aGVuIGV4aXRc biIpKTsKQEAgLTI3NSw2ICsyOTAsNyBAQCBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogewogCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworCQl7ImNsZWFu LWJhY2t1cC1oaXN0b3J5Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdiJ30sCiAJCXsiZGVidWciLCBu b19hcmd1bWVudCwgTlVMTCwgJ2QnfSwKIAkJeyJkcnktcnVuIiwgbm9fYXJndW1lbnQsIE5VTEws ICduJ30sCiAJCXsic3RyaXAtZXh0ZW5zaW9uIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd4 J30sCkBAIC0zMDAsMTAgKzMxNiwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ fQogCX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJkbng6IiwgbG9u Z19vcHRpb25zLCBOVUxMKSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywg YXJndiwgImJkbng6IiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpCiAJewogCQlzd2l0Y2gg KGMpCiAJCXsKKwkJCWNhc2UgJ2InOiAJCQkvKiBSZW1vdmUgYmFja3VwIGhpc3RvcnkgZmlsZXMg dG9vICovCisJCQkJY2xlYW5CYWNrdXBIaXN0b3J5ID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJCWNh c2UgJ2QnOgkJCS8qIERlYnVnIG1vZGUgKi8KIAkJCQlwZ19sb2dnaW5nX2luY3JlYXNlX3ZlcmJv c2l0eSgpOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19hcmNoaXZlY2xlYW51 cC90LzAxMF9wZ19hcmNoaXZlY2xlYW51cC5wbCBiL3NyYy9iaW4vcGdfYXJjaGl2ZWNsZWFudXAv dC8wMTBfcGdfYXJjaGl2ZWNsZWFudXAucGwKaW5kZXggY2MzMzg2ZDE0Ni4uMDMwYTgyZTdmYSAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19hcmNoaXZlY2xlYW51cC90LzAxMF9wZ19hcmNoaXZlY2xl YW51cC5wbAorKysgYi9zcmMvYmluL3BnX2FyY2hpdmVjbGVhbnVwL3QvMDEwX3BnX2FyY2hpdmVj bGVhbnVwLnBsCkBAIC0xMiwxMyArMTIsMjMgQEAgcHJvZ3JhbV9vcHRpb25zX2hhbmRsaW5nX29r KCdwZ19hcmNoaXZlY2xlYW51cCcpOwogCiBteSAkdGVtcGRpciA9IFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOjp0ZW1wZGlyOwogCi1teSBAd2FsZmlsZXMgPSAoCi0JJzAwMDAwMDAxMDAwMDAwMzcw MDAwMDAwQy5neicsICcwMDAwMDAwMTAwMDAwMDM3MDAwMDAwMEQnLAotCScwMDAwMDAwMTAwMDAw MDM3MDAwMDAwMEUnLCAnMDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBGLnBhcnRpYWwnLCk7CitteSBA d2FsZmlsZXNfd2l0aF9neiA9ICgKKwl7IG5hbWUgPT4gJzAwMDAwMDAxMDAwMDAwMzcwMDAwMDAw Qy5neicsICAgICAgcHJlc2VudCA9PiAwIH0sCisJeyBuYW1lID0+ICcwMDAwMDAwMTAwMDAwMDM3 MDAwMDAwMEQnLCAgICAgICAgIHByZXNlbnQgPT4gMCB9LAorCXsgbmFtZSA9PiAnMDAwMDAwMDEw MDAwMDAzNzAwMDAwMDBFJywgICAgICAgICBwcmVzZW50ID0+IDEgfSwKKwl7IG5hbWUgPT4gJzAw MDAwMDAxMDAwMDAwMzcwMDAwMDAwRi5wYXJ0aWFsJywgcHJlc2VudCA9PiAxIH0sCisJeyBuYW1l ID0+ICd1bnJlbGF0ZWRfZmlsZScsICAgICAgICAgICAgICAgICAgIHByZXNlbnQgPT4gMSB9KTsK KworbXkgQHdhbGZpbGVzX3dpdGhfYmFja3VwID0gKAorCXsgbmFtZSA9PiAnMDAwMDAwMDEwMDAw MDAzNzAwMDAwMDBEJywgICAgICAgICAgICAgICAgIHByZXNlbnQgPT4gMCB9LAorCXsgbmFtZSA9 PiAnMDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBELjAwMDAwMDI4LmJhY2t1cCcsIHByZXNlbnQgPT4g MCB9LAorCXsgbmFtZSA9PiAnMDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBFJywgICAgICAgICAgICAg ICAgIHByZXNlbnQgPT4gMSB9LAorCXsgbmFtZSA9PiAnMDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBG LnBhcnRpYWwnLCAgICAgICAgIHByZXNlbnQgPT4gMSB9LAorCXsgbmFtZSA9PiAndW5yZWxhdGVk X2ZpbGUnLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQgPT4gMSB9KTsKIAogc3Vi IGNyZWF0ZV9maWxlcwogewotCWZvcmVhY2ggbXkgJGZuIChAd2FsZmlsZXMsICd1bnJlbGF0ZWRf ZmlsZScpCisJZm9yZWFjaCBteSAkZm4gKEBfKQogCXsKIAkJb3BlbiBteSAkZmlsZSwgJz4nLCAi JHRlbXBkaXIvJGZuIjsKIAkJcHJpbnQgJGZpbGUgJ0NPTlRFTlQnOwpAQCAtMjcsNyArMzcsMTgg QEAgc3ViIGNyZWF0ZV9maWxlcwogCXJldHVybjsKIH0KIAotY3JlYXRlX2ZpbGVzKCk7CitzdWIg Z2V0X3dhbGZpbGVzCit7CisJbXkgQHdhbGZpbGVzOworCisJZm9yIG15ICR3YWxwYWlyIChAXykK Kwl7CisJCXB1c2ggQHdhbGZpbGVzLCAkd2FscGFpci0+e25hbWV9OworCX0KKwlyZXR1cm4gQHdh bGZpbGVzOworfQorCitjcmVhdGVfZmlsZXMoZ2V0X3dhbGZpbGVzKEB3YWxmaWxlc193aXRoX2d6 KSk7CiAKIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbJ3BnX2FyY2hpdmVjbGVhbnVwJ10sCkBAIC01 OSwxNCArODAsMTQgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCW15ICRzdGRlcnI7CiAJbXkgJHJl c3VsdCA9CiAJICBJUEM6OlJ1bjo6cnVuIFsgJ3BnX2FyY2hpdmVjbGVhbnVwJywgJy1kJywgJy1u JywgJHRlbXBkaXIsCi0JCSR3YWxmaWxlc1syXSBdLAorCQkkd2FsZmlsZXNfd2l0aF9nelsyXS0+ e25hbWV9IF0sCiAJICAnMj4nLCBcJHN0ZGVycjsKIAlvaygkcmVzdWx0LCAicGdfYXJjaGl2ZWNs ZWFudXAgZHJ5IHJ1bjogZXhpdCBjb2RlIDAiKTsKIAlsaWtlKAogCQkkc3RkZXJyLAotCQlxci8k d2FsZmlsZXNbMV0uKndvdWxkIGJlIHJlbW92ZWQvLAorCQlxci8kd2FsZmlsZXNfd2l0aF9nelsx XS0+e25hbWV9Lip3b3VsZCBiZSByZW1vdmVkLywKIAkJInBnX2FyY2hpdmVjbGVhbnVwIGRyeSBy dW46IG1hdGNoZXMiKTsKLQlmb3JlYWNoIG15ICRmbiAoQHdhbGZpbGVzKQorCWZvcmVhY2ggbXkg JGZuIChnZXRfd2FsZmlsZXMoQHdhbGZpbGVzX3dpdGhfZ3opKQogCXsKIAkJb2soLWYgIiR0ZW1w ZGlyLyRmbiIsICIkZm4gbm90IHJlbW92ZWQiKTsKIAl9CkBAIC03NiwzMiArOTcsNDAgQEAgc3Vi IHJ1bl9jaGVjawogewogCWxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0OjpCdWls ZGVyOjpMZXZlbCArIDE7CiAKLQlteSAoJHN1ZmZpeCwgJHRlc3RfbmFtZSkgPSBAXzsKKwlteSAo JHRlc3RkYXRhLCAkb2xkZXN0a2VwdHdhbGZpbGUsICR0ZXN0X25hbWUsIEBvcHRpb25zKSA9IEBf OwogCi0JY3JlYXRlX2ZpbGVzKCk7CisJY3JlYXRlX2ZpbGVzKGdldF93YWxmaWxlcyhAJHRlc3Rk YXRhKSk7CiAKIAljb21tYW5kX29rKAogCQlbCi0JCQkncGdfYXJjaGl2ZWNsZWFudXAnLCAnLXgn LCAnLmd6JywgJHRlbXBkaXIsCi0JCQkkd2FsZmlsZXNbMl0gLiAkc3VmZml4CisJCQkncGdfYXJj aGl2ZWNsZWFudXAnLCBAb3B0aW9ucywgJHRlbXBkaXIsCisJCQkkb2xkZXN0a2VwdHdhbGZpbGUK IAkJXSwKIAkJIiR0ZXN0X25hbWU6IHJ1bnMiKTsKIAotCW9rKCEtZiAiJHRlbXBkaXIvJHdhbGZp bGVzWzBdIiwKLQkJIiR0ZXN0X25hbWU6IGZpcnN0IG9sZGVyIFdBTCBmaWxlIHdhcyBjbGVhbmVk IHVwIik7Ci0Jb2soIS1mICIkdGVtcGRpci8kd2FsZmlsZXNbMV0iLAotCQkiJHRlc3RfbmFtZTog c2Vjb25kIG9sZGVyIFdBTCBmaWxlIHdhcyBjbGVhbmVkIHVwIik7Ci0Jb2soLWYgIiR0ZW1wZGly LyR3YWxmaWxlc1syXSIsCi0JCSIkdGVzdF9uYW1lOiByZXN0YXJ0ZmlsZSB3YXMgbm90IGNsZWFu ZWQgdXAiKTsKLQlvaygtZiAiJHRlbXBkaXIvJHdhbGZpbGVzWzNdIiwKLQkJIiR0ZXN0X25hbWU6 IG5ld2VyIFdBTCBmaWxlIHdhcyBub3QgY2xlYW5lZCB1cCIpOwotCW9rKC1mICIkdGVtcGRpci91 bnJlbGF0ZWRfZmlsZSIsCi0JCSIkdGVzdF9uYW1lOiB1bnJlbGF0ZWQgZmlsZSB3YXMgbm90IGNs ZWFuZWQgdXAiKTsKKwlmb3IgbXkgJHdhbHBhaXIgKEAkdGVzdGRhdGEpCisJeworCQlpZiAoJHdh bHBhaXItPntwcmVzZW50fSkKKwkJeworCQkJb2soLWYgIiR0ZW1wZGlyLyR3YWxwYWlyLT57bmFt ZX0iLAorCQkJCSIkdGVzdF9uYW1lOiR3YWxwYWlyLT57bmFtZX0gd2FzIG5vdCBjbGVhbmVkIHVw Iik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlvayghLWYgIiR0ZW1wZGlyLyR3YWxwYWlyLT57bmFt ZX0iLAorCQkJCSIkdGVzdF9uYW1lOiR3YWxwYWlyLT57bmFtZX0gd2FzIGNsZWFuZWQgdXAiKTsK KwkJfQorCX0KIAlyZXR1cm47CiB9CiAKLXJ1bl9jaGVjaygnJywgJ3BnX2FyY2hpdmVjbGVhbnVw Jyk7Ci1ydW5fY2hlY2soJy5wYXJ0aWFsJywgJ3BnX2FyY2hpdmVjbGVhbnVwIHdpdGggLnBhcnRp YWwgZmlsZScpOwotcnVuX2NoZWNrKCcuMDAwMDAwMjAuYmFja3VwJywgJ3BnX2FyY2hpdmVjbGVh bnVwIHdpdGggLmJhY2t1cCBmaWxlJyk7CitydW5fY2hlY2soXEB3YWxmaWxlc193aXRoX2d6LCAn MDAwMDAwMDEwMDAwMDAzNzAwMDAwMDBFJywKKwkncGdfYXJjaGl2ZWNsZWFudXAnLCAnLXguZ3on KTsKK3J1bl9jaGVjayhcQHdhbGZpbGVzX3dpdGhfZ3osICcwMDAwMDAwMTAwMDAwMDM3MDAwMDAw MEUucGFydGlhbCcsCisJJ3BnX2FyY2hpdmVjbGVhbnVwIHdpdGggLnBhcnRpYWwgZmlsZScsICct eC5neicpOworcnVuX2NoZWNrKFxAd2FsZmlsZXNfd2l0aF9neiwgJzAwMDAwMDAxMDAwMDAwMzcw MDAwMDAwRS4wMDAwMDAyMC5iYWNrdXAnLAorCSdwZ19hcmNoaXZlY2xlYW51cCB3aXRoIC5iYWNr dXAgZmlsZScsICcteC5neicpOworcnVuX2NoZWNrKFxAd2FsZmlsZXNfd2l0aF9iYWNrdXAsICcw MDAwMDAwMTAwMDAwMDM3MDAwMDAwMEUnLAorCSdwZ19hcmNoaXZlY2xlYW51cCB3aXRoIC0tY2xl YW4tYmFja3VwLWhpc3RvcnknLCAnLWInKTsKIAogZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM5LjIK Cg== --=_5fc5b8573388363569c6c8dc3b55d477 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v5-0003-Refactored-to-reduce-the-nesting-level.patch Content-Disposition: attachment; filename=v5-0003-Refactored-to-reduce-the-nesting-level.patch; size=6092 RnJvbSBiZWYzNzZiMjc2NjkyMzMzOWRlZGJmM2ZhZTllNTE2MjYyYjQzM2ExIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFdlZCwgMzEgTWF5IDIwMjMgMTA6MDk6NTkgKzA5MDAKU3ViamVjdDog W1BBVENIIHY1IDMvM10gUmVmYWN0b3JlZCB0byByZWR1Y2UgdGhlIG5lc3RpbmcgbGV2ZWwuCgot LS0KIHNyYy9iaW4vcGdfYXJjaGl2ZWNsZWFudXAvcGdfYXJjaGl2ZWNsZWFudXAuYyB8IDE0NiAr KysrKysrKystLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspLCA3NCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FyY2hpdmVjbGVhbnVwL3BnX2Fy Y2hpdmVjbGVhbnVwLmMgYi9zcmMvYmluL3BnX2FyY2hpdmVjbGVhbnVwL3BnX2FyY2hpdmVjbGVh bnVwLmMKaW5kZXggYTdmNzdkOTE1OC4uZjQ3NTE3N2VkYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19hcmNoaXZlY2xlYW51cC9wZ19hcmNoaXZlY2xlYW51cC5jCisrKyBiL3NyYy9iaW4vcGdfYXJj aGl2ZWNsZWFudXAvcGdfYXJjaGl2ZWNsZWFudXAuYwpAQCAtOTUsODcgKzk1LDg1IEBAIENsZWFu dXBQcmlvcldBTEZpbGVzKHZvaWQpCiAJc3RydWN0IGRpcmVudCAqeGxkZTsKIAljaGFyCQl3YWxm aWxlW01BWFBHUEFUSF07CiAKLQlpZiAoKHhsZGlyID0gb3BlbmRpcihhcmNoaXZlTG9jYXRpb24p KSAhPSBOVUxMKQorCWlmICgoeGxkaXIgPSBvcGVuZGlyKGFyY2hpdmVMb2NhdGlvbikpID09IE5V TEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBhcmNoaXZlIGxvY2F0aW9uIFwiJXNcIjog JW0iLAorCQkJCSBhcmNoaXZlTG9jYXRpb24pOworCisJd2hpbGUgKGVycm5vID0gMCwgKHhsZGUg PSByZWFkZGlyKHhsZGlyKSkgIT0gTlVMTCkKIAl7Ci0JCXdoaWxlIChlcnJubyA9IDAsICh4bGRl ID0gcmVhZGRpcih4bGRpcikpICE9IE5VTEwpCisJCWNoYXIJCVdBTEZpbGVQYXRoW01BWFBHUEFU SCAqIDJdOyAvKiB0aGUgZmlsZSBwYXRoCisJCQkJCQkJCQkJCQkJICogaW5jbHVkaW5nIGFyY2hp dmUgKi8KKwkJLyoKKwkJICogVHJ1bmNhdGlvbiBpcyBlc3NlbnRpYWxseSBoYXJtbGVzcywgIGJl Y2F1c2Ugd2UgY2hlY2sgdGhlIGZpbGUKKwkJICogZm9ybWF0IGluY2x1ZGluZyB0aGUgbGVuZ3Ro IGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMuCisJCSAqIChJbiBwcmluY2lwbGUsIG9uZSBjb3VsZCB1 c2UgYSAxMDAwLWNoYXJhY3RlciBhZGRpdGlvbmFsX2V4dAorCQkgKiBhbmQgZ2V0IHRyb3VibGUu KQorCQkgKi8KKwkJc3RybGNweSh3YWxmaWxlLCB4bGRlLT5kX25hbWUsIE1BWFBHUEFUSCk7CisJ CVRyaW1FeHRlbnNpb24od2FsZmlsZSwgYWRkaXRpb25hbF9leHQpOworCisJCS8qCisJCSAqIENo ZWNrIGZpbGUgbmFtZS4KKwkJICoKKwkJICogV2Ugc2tpcCBmaWxlcyB3aGljaCBhcmUgbm90IFdB TCBmaWxlIG9yIHBhcnRpYWwgV0FMIGZpbGUuCisJCSAqIEFsc28gd2Ugc2tpcCBiYWNrdXAgaGlz dG9yeSBmaWxlcyB3aGVuIC0tY2xlYW4tYmFja3VwLWhpc3RvcnkKKwkJICogaXMgbm90IHNwZWNp ZmllZC4KKwkJICovCisJCWlmICghSXNYTG9nRmlsZU5hbWUod2FsZmlsZSkgJiYgIUlzUGFydGlh bFhMb2dGaWxlTmFtZSh3YWxmaWxlKSAmJgorCQkJIShjbGVhbkJhY2t1cEhpc3RvcnkgJiYgSXNC YWNrdXBIaXN0b3J5RmlsZU5hbWUod2FsZmlsZSkpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJ ICogQ2hlY2sgY3V0b2ZmIHBvaW50LgorCQkgKgorCQkgKiBXZSBpZ25vcmUgdGhlIHRpbWVsaW5l IHBhcnQgb2YgdGhlIFhMT0cgc2VnbWVudCBpZGVudGlmaWVycyBpbgorCQkgKiBkZWNpZGluZyB3 aGV0aGVyIGEgc2VnbWVudCBpcyBzdGlsbCBuZWVkZWQuICBUaGlzIGVuc3VyZXMgdGhhdAorCQkg KiB3ZSB3b24ndCBwcmVtYXR1cmVseSByZW1vdmUgYSBzZWdtZW50IGZyb20gYSBwYXJlbnQgdGlt ZWxpbmUuCisJCSAqIFdlIGNvdWxkIHByb2JhYmx5IGJlIGEgbGl0dGxlIG1vcmUgcHJvYWN0aXZl IGFib3V0IHJlbW92aW5nCisJCSAqIHNlZ21lbnRzIG9mIG5vbi1wYXJlbnQgdGltZWxpbmVzLCBi dXQgdGhhdCB3b3VsZCBiZSBhIHdob2xlIGxvdAorCQkgKiBtb3JlIGNvbXBsaWNhdGVkLgorCQkg KgorCQkgKiBXZSB1c2UgdGhlIGFscGhhbnVtZXJpYyBzb3J0aW5nIHByb3BlcnR5IG9mIHRoZSBm aWxlbmFtZXMgdG8KKwkJICogZGVjaWRlIHdoaWNoIG9uZXMgYXJlIGVhcmxpZXIgdGhhbiB0aGUg ZXhjbHVzaXZlQ2xlYW51cEZpbGVOYW1lCisJCSAqIGZpbGUuIE5vdGUgdGhhdCB0aGlzIG1lYW5z IGZpbGVzIGFyZSBub3QgcmVtb3ZlZCBpbiB0aGUgb3JkZXIKKwkJICogdGhleSB3ZXJlIG9yaWdp bmFsbHkgd3JpdHRlbiwgaW4gY2FzZSB0aGlzIHdvcnJpZXMgeW91LgorCQkgKi8KKwkJaWYgKHN0 cmNtcCh3YWxmaWxlICsgOCwgZXhjbHVzaXZlQ2xlYW51cEZpbGVOYW1lICsgOCkgPj0gMCkKKwkJ CWNvbnRpbnVlOworCisJCS8qCisJCSAqIFVzZSB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIGFnYWlu IG5vdywgaW5jbHVkaW5nIGFueQorCQkgKiBleHRlbnNpb24gdGhhdCBtaWdodCBoYXZlIGJlZW4g Y2hvcHBlZCBvZmYgYmVmb3JlIHRlc3RpbmcKKwkJICogdGhlIHNlcXVlbmNlLgorCQkgKi8KKwkJ c25wcmludGYoV0FMRmlsZVBhdGgsIHNpemVvZihXQUxGaWxlUGF0aCksICIlcy8lcyIsCisJCQkJ IGFyY2hpdmVMb2NhdGlvbiwgeGxkZS0+ZF9uYW1lKTsKKworCQlpZiAoZHJ5cnVuKQogCQl7Ci0J CQljaGFyCQlXQUxGaWxlUGF0aFtNQVhQR1BBVEggKiAyXTsgLyogdGhlIGZpbGUgcGF0aAotCQkJ CQkJCQkJCQkJCQkgKiBpbmNsdWRpbmcgYXJjaGl2ZSAqLwotCQkJLyoKLQkJCSAqIFRydW5jYXRp b24gaXMgZXNzZW50aWFsbHkgaGFybWxlc3MsICBiZWNhdXNlIHdlIGNoZWNrIHRoZSBmaWxlCi0J CQkgKiBmb3JtYXQgaW5jbHVkaW5nIHRoZSBsZW5ndGggaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcy4K LQkJCSAqIChJbiBwcmluY2lwbGUsIG9uZSBjb3VsZCB1c2UgYSAxMDAwLWNoYXJhY3RlciBhZGRp dGlvbmFsX2V4dAotCQkJICogYW5kIGdldCB0cm91YmxlLikKLQkJCSAqLwotCQkJc3RybGNweSh3 YWxmaWxlLCB4bGRlLT5kX25hbWUsIE1BWFBHUEFUSCk7Ci0JCQlUcmltRXh0ZW5zaW9uKHdhbGZp bGUsIGFkZGl0aW9uYWxfZXh0KTsKLQogCQkJLyoKLQkJCSAqIENoZWNrIGZpbGUgbmFtZS4KLQkJ CSAqCi0JCQkgKiBXZSBza2lwIGZpbGVzIHdoaWNoIGFyZSBub3QgV0FMIGZpbGUgb3IgcGFydGlh bCBXQUwgZmlsZS4KLQkJCSAqIEFsc28gd2Ugc2tpcCBiYWNrdXAgaGlzdG9yeSBmaWxlcyB3aGVu IC0tY2xlYW4tYmFja3VwLWhpc3RvcnkKLQkJCSAqIGlzIG5vdCBzcGVjaWZpZWQuCisJCQkgKiBQ cmludHMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgcmVtb3ZlZCBhbmQgc2tpcHMgdGhlCisJ CQkgKiBhY3R1YWwgcmVtb3ZhbC4gIFRoZSByZWd1bGFyIHByaW50b3V0IGlzIHNvIHRoYXQgdGhl CisJCQkgKiB1c2VyIGNhbiBwaXBlIHRoZSBvdXRwdXQgaW50byBzb21lIG90aGVyIHByb2dyYW0u CiAJCQkgKi8KLQkJCWlmICghSXNYTG9nRmlsZU5hbWUod2FsZmlsZSkgJiYgIUlzUGFydGlhbFhM b2dGaWxlTmFtZSh3YWxmaWxlKSAmJgotCQkJCSEoY2xlYW5CYWNrdXBIaXN0b3J5ICYmIElzQmFj a3VwSGlzdG9yeUZpbGVOYW1lKHdhbGZpbGUpKSkKLQkJCQljb250aW51ZTsKLQotCQkJLyoKLQkJ CSAqIENoZWNrIGN1dG9mZiBwb2ludC4KLQkJCSAqCi0JCQkgKiBXZSBpZ25vcmUgdGhlIHRpbWVs aW5lIHBhcnQgb2YgdGhlIFhMT0cgc2VnbWVudCBpZGVudGlmaWVycyBpbgotCQkJICogZGVjaWRp bmcgd2hldGhlciBhIHNlZ21lbnQgaXMgc3RpbGwgbmVlZGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQK LQkJCSAqIHdlIHdvbid0IHByZW1hdHVyZWx5IHJlbW92ZSBhIHNlZ21lbnQgZnJvbSBhIHBhcmVu dCB0aW1lbGluZS4KLQkJCSAqIFdlIGNvdWxkIHByb2JhYmx5IGJlIGEgbGl0dGxlIG1vcmUgcHJv YWN0aXZlIGFib3V0IHJlbW92aW5nCi0JCQkgKiBzZWdtZW50cyBvZiBub24tcGFyZW50IHRpbWVs aW5lcywgYnV0IHRoYXQgd291bGQgYmUgYSB3aG9sZSBsb3QKLQkJCSAqIG1vcmUgY29tcGxpY2F0 ZWQuCi0JCQkgKgotCQkJICogV2UgdXNlIHRoZSBhbHBoYW51bWVyaWMgc29ydGluZyBwcm9wZXJ0 eSBvZiB0aGUgZmlsZW5hbWVzIHRvCi0JCQkgKiBkZWNpZGUgd2hpY2ggb25lcyBhcmUgZWFybGll ciB0aGFuIHRoZSBleGNsdXNpdmVDbGVhbnVwRmlsZU5hbWUKLQkJCSAqIGZpbGUuIE5vdGUgdGhh dCB0aGlzIG1lYW5zIGZpbGVzIGFyZSBub3QgcmVtb3ZlZCBpbiB0aGUgb3JkZXIKLQkJCSAqIHRo ZXkgd2VyZSBvcmlnaW5hbGx5IHdyaXR0ZW4sIGluIGNhc2UgdGhpcyB3b3JyaWVzIHlvdS4KLQkJ CSAqLwotCQkJaWYgKHN0cmNtcCh3YWxmaWxlICsgOCwgZXhjbHVzaXZlQ2xlYW51cEZpbGVOYW1l ICsgOCkgPj0gMCkKLQkJCQljb250aW51ZTsKLQotCQkJLyoKLQkJCSAqIFVzZSB0aGUgb3JpZ2lu YWwgZmlsZSBuYW1lIGFnYWluIG5vdywgaW5jbHVkaW5nIGFueQotCQkJICogZXh0ZW5zaW9uIHRo YXQgbWlnaHQgaGF2ZSBiZWVuIGNob3BwZWQgb2ZmIGJlZm9yZSB0ZXN0aW5nCi0JCQkgKiB0aGUg c2VxdWVuY2UuCi0JCQkgKi8KLQkJCXNucHJpbnRmKFdBTEZpbGVQYXRoLCBzaXplb2YoV0FMRmls ZVBhdGgpLCAiJXMvJXMiLAotCQkJCQkgYXJjaGl2ZUxvY2F0aW9uLCB4bGRlLT5kX25hbWUpOwot Ci0JCQlpZiAoZHJ5cnVuKQotCQkJewotCQkJCS8qCi0JCQkJICogUHJpbnRzIHRoZSBuYW1lIG9m IHRoZSBmaWxlIHRvIGJlIHJlbW92ZWQgYW5kIHNraXBzIHRoZQotCQkJCSAqIGFjdHVhbCByZW1v dmFsLiAgVGhlIHJlZ3VsYXIgcHJpbnRvdXQgaXMgc28gdGhhdCB0aGUKLQkJCQkgKiB1c2VyIGNh biBwaXBlIHRoZSBvdXRwdXQgaW50byBzb21lIG90aGVyIHByb2dyYW0uCi0JCQkJICovCi0JCQkJ cHJpbnRmKCIlc1xuIiwgV0FMRmlsZVBhdGgpOwotCQkJCXBnX2xvZ19kZWJ1ZygiZmlsZSBcIiVz XCIgd291bGQgYmUgcmVtb3ZlZCIsIFdBTEZpbGVQYXRoKTsKLQkJCQljb250aW51ZTsKLQkJCX0K LQotCQkJcGdfbG9nX2RlYnVnKCJyZW1vdmluZyBmaWxlIFwiJXNcIiIsIFdBTEZpbGVQYXRoKTsK LQotCQkJcmMgPSB1bmxpbmsoV0FMRmlsZVBhdGgpOwotCQkJaWYgKHJjICE9IDApCi0JCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCByZW1vdmUgZmlsZSBcIiVzXCI6ICVtIiwKLQkJCQkJCSBXQUxGaWxl UGF0aCk7CisJCQlwcmludGYoIiVzXG4iLCBXQUxGaWxlUGF0aCk7CisJCQlwZ19sb2dfZGVidWco ImZpbGUgXCIlc1wiIHdvdWxkIGJlIHJlbW92ZWQiLCBXQUxGaWxlUGF0aCk7CisJCQljb250aW51 ZTsKIAkJfQogCi0JCWlmIChlcnJubykKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBhcmNo aXZlIGxvY2F0aW9uIFwiJXNcIjogJW0iLAotCQkJCQkgYXJjaGl2ZUxvY2F0aW9uKTsKLQkJaWYg KGNsb3NlZGlyKHhsZGlyKSkKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYXJjaGl2ZSBs b2NhdGlvbiBcIiVzXCI6ICVtIiwKLQkJCQkJIGFyY2hpdmVMb2NhdGlvbik7CisJCXBnX2xvZ19k ZWJ1ZygicmVtb3ZpbmcgZmlsZSBcIiVzXCIiLCBXQUxGaWxlUGF0aCk7CisKKwkJcmMgPSB1bmxp bmsoV0FMRmlsZVBhdGgpOworCQlpZiAocmMgIT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qg cmVtb3ZlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCSBXQUxGaWxlUGF0aCk7CiAJfQotCWVsc2UK LQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGFyY2hpdmUgbG9jYXRpb24gXCIlc1wiOiAlbSIs CisKKwlpZiAoZXJybm8pCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBhcmNoaXZlIGxvY2F0 aW9uIFwiJXNcIjogJW0iLAorCQkJCSBhcmNoaXZlTG9jYXRpb24pOworCWlmIChjbG9zZWRpcih4 bGRpcikpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgYXJjaGl2ZSBsb2NhdGlvbiBcIiVz XCI6ICVtIiwKIAkJCQkgYXJjaGl2ZUxvY2F0aW9uKTsKIH0KIAotLSAKMi4zOS4yCgo= --=_5fc5b8573388363569c6c8dc3b55d477--