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 1kjGV2-0005aZ-91 for pgsql-hackers@arkaria.postgresql.org; Sun, 29 Nov 2020 06:47:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kjGUz-0005fv-0r for pgsql-hackers@arkaria.postgresql.org; Sun, 29 Nov 2020 06:47:53 +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 1kjGUy-0005fo-Dz for pgsql-hackers@lists.postgresql.org; Sun, 29 Nov 2020 06:47:52 +0000 Received: from smtp-fw-2101.amazon.com ([72.21.196.25]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kjGUu-0004nk-11 for pgsql-hackers@postgresql.org; Sun, 29 Nov 2020 06:47:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1606632468; x=1638168468; h=to:cc:references:from:message-id:date:mime-version: in-reply-to:subject; bh=ttNioSb1/KO6zxLILTSDzy+0oeaz0KaQyLxTxsyZETc=; b=puPvhujZVRdjIv3PiSar+FU/+kQaQyTf+/QExc2vcbSp4V1gBa7GMs3X POnQKFtgLuewxWv6Ry9x5WmMtZDExUyiQDbHDxB9LLux8aFtqTCs9M7IX JLjf283aOigtKY/nAZRSD0ZqZRndPVjk74nf5e1MWzLCLohBb3uuZfIBy 8=; X-Amazon-filename: v9-0006-Log-the-standby-recovery-conflict-waits.patch X-IronPort-AV: E=Sophos;i="5.78,378,1599523200"; d="scan'208";a="66250473" Subject: Re: Add Information during standby recovery conflicts Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-1e-c7c08562.us-east-1.amazon.com) ([10.43.8.6]) by smtp-border-fw-out-2101.iad2.amazon.com with ESMTP; 29 Nov 2020 06:47:40 +0000 Received: from EX13D03EUC003.ant.amazon.com (iad12-ws-svc-p26-lb9-vlan2.iad.amazon.com [10.40.163.34]) by email-inbound-relay-1e-c7c08562.us-east-1.amazon.com (Postfix) with ESMTPS id 5E31B242487; Sun, 29 Nov 2020 06:47:38 +0000 (UTC) Received: from 38f9d36c4abb.ant.amazon.com (10.43.160.21) by EX13D03EUC003.ant.amazon.com (10.43.164.192) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sun, 29 Nov 2020 06:47:35 +0000 To: Alvaro Herrera CC: Masahiko Sawada , Fujii Masao , Masahiko Sawada , Kyotaro Horiguchi , PostgreSQL-development References: <20201128173626.GA17184@alvherre.pgsql> From: "Drouvot, Bertrand" Message-ID: Date: Sun, 29 Nov 2020 07:47:30 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: <20201128173626.GA17184@alvherre.pgsql> Content-Type: multipart/mixed; boundary="------------569132E3C937390A1C41506E" Content-Language: en-US X-Originating-IP: [10.43.160.21] X-ClientProxiedBy: EX13D27UWA004.ant.amazon.com (10.43.160.43) To EX13D03EUC003.ant.amazon.com (10.43.164.192) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --------------569132E3C937390A1C41506E Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Hi Alvaro, On 11/28/20 6:36 PM, Alvaro Herrera wrote: > Hi Bertrand, > > On 2020-Nov-28, Drouvot, Bertrand wrote: > >> + if (nprocs > 0) >> + { >> + ereport(LOG, >> + (errmsg("recovery still waiting after %ld.%03d ms: %s", >> + msecs, usecs, _(get_recovery_conflict_desc(reason))), >> + (errdetail_log_plural("Conflicting process: %s.", >> + "Conflicting processes: %s.", >> + nprocs, buf.data)))); >> + } >> + else >> + { >> + ereport(LOG, >> + (errmsg("recovery still waiting after %ld.%03d ms: %s", >> + msecs, usecs, _(get_recovery_conflict_desc(reason))))); >> + } >> + >> + pfree(buf.data); >> + } >> + else >> + ereport(LOG, >> + (errmsg("recovery still waiting after %ld.%03d ms: %s", >> + msecs, usecs, _(get_recovery_conflict_desc(reason))))); >> +} > Another trivial stylistic point is that you can collapse all these > ereport calls into one, with something like > > ereport(LOG, > errmsg("recovery still waiting after ...", opts), > waitlist != NULL ? errdetail_log_plural("foo bar baz", opts) : 0); > > where the "waitlist" has been constructed beforehand, or is set to NULL > if there's no process list. Nice! > >> + switch (reason) >> + { >> + case PROCSIG_RECOVERY_CONFLICT_BUFFERPIN: >> + reasonDesc = gettext_noop("for recovery conflict on buffer pin"); >> + break; > Pure bikeshedding after discussing this with my pillow: I think I'd get > rid of the initial "for" in these messages. both comments implemented in the new attached version. Thanks! Bertrand --------------569132E3C937390A1C41506E Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v9-0006-Log-the-standby-recovery-conflict-waits.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v9-0006-Log-the-standby-recovery-conflict-waits.patch" IGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAyMiAr KysKIGRvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0eS5zZ21sICAgICAgICAgICB8ICAg NiArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAg MTggKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgICAgICAgICAgICAg fCAyMDkgKysrKysrKysrKysrKysrKysrKysrLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMgICAgICAgICAgICAgICB8ICAzNSArKysrLQogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWMuYyAgICAgICAgICAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgfCAgIDIgKwogc3JjL2luY2x1ZGUv c3RvcmFnZS9zdGFuZGJ5LmggICAgICAgICAgICAgICAgIHwgICA1ICstCiA4IGZpbGVzIGNo YW5nZWQsIDI2OCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApp bmRleCBlZTkxNDc0MGNjLi4zYWE4OTJjMGYzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv Y29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC02ODM5LDYg KzY4MzksMjggQEAgbG9nX2xpbmVfcHJlZml4ID0gJyVtIFslcF0gJXEldUAlZC8lYSAnCiAg ICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlz dGVudHJ5IGlkPSJndWMtbG9nLXJlY292ZXJ5LWNvbmZsaWN0LXdhaXRzIiB4cmVmbGFiZWw9 ImxvZ19yZWNvdmVyeV9jb25mbGljdF93YWl0cyI+CisgICAgICA8dGVybT48dmFybmFtZT5s b2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHM8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90 eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+bG9n X3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzPC92YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFt ZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAg ICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBDb250cm9scyB3aGV0aGVy IGEgbG9nIG1lc3NhZ2UgaXMgcHJvZHVjZWQgd2hlbiB0aGUgc3RhcnR1cCBwcm9jZXNzCisg ICAgICAgIGlzIHdhaXRpbmcgbG9uZ2VyIHRoYW4gPHZhcm5hbWU+ZGVhZGxvY2tfdGltZW91 dDwvdmFybmFtZT4KKyAgICAgICAgZm9yIHJlY292ZXJ5IGNvbmZsaWN0cy4gIFRoaXMgaXMg dXNlZnVsIGluIGRldGVybWluaW5nIGlmIHJlY292ZXJ5CisgICAgICAgIGNvbmZsaWN0cyBw cmV2ZW50IHRoZSByZWNvdmVyeSBmcm9tIGFwcGx5aW5nIFdBTC4KKyAgICAgICA8L3BhcmE+ CisKKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b2Zm PC9saXRlcmFsPi4gIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldAorICAgICAgICBp biB0aGUgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29uZjwvZmlsZW5hbWU+IGZpbGUgb3Igb24g dGhlIHNlcnZlcgorICAgICAgICBjb21tYW5kIGxpbmUuCisgICAgICAgPC9wYXJhPgorICAg ICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3Rl bnRyeSBpZD0iZ3VjLWxvZy1wYXJhbWV0ZXItbWF4LWxlbmd0aCIgeHJlZmxhYmVsPSJsb2df cGFyYW1ldGVyX21heF9sZW5ndGgiPgogICAgICAgPHRlcm0+PHZhcm5hbWU+bG9nX3BhcmFt ZXRlcl9tYXhfbGVuZ3RoPC92YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCiAgICAg ICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2hpZ2gtYXZhaWxhYmls aXR5LnNnbWwgYi9kb2Mvc3JjL3NnbWwvaGlnaC1hdmFpbGFiaWxpdHkuc2dtbAppbmRleCA4 NmRhODRmY2U3Li4zZGNiMzQxNDNhIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvaGlnaC1h dmFpbGFiaWxpdHkuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaGlnaC1hdmFpbGFiaWxpdHku c2dtbApAQCAtMjEwNCw2ICsyMTA0LDEyIEBAIGlmICghdHJpZ2dlcmVkKQogICAgIHNlcnZl ci4gVGhlIDxzdHJ1Y3RuYW1lPnBnX3N0YXRfZGF0YWJhc2U8L3N0cnVjdG5hbWU+IHN5c3Rl bSB2aWV3IGFsc28gY29udGFpbnMKICAgICBzdW1tYXJ5IGluZm9ybWF0aW9uLgogICAgPC9w YXJhPgorCisgICA8cGFyYT4KKyAgICBVc2VycyBjYW4gY29udHJvbCB3aGV0aGVyIGEgbG9n IG1lc3NhZ2UgaXMgcHJvZHVjZWQgd2hlbiBXQUwgcmVwbGF5IGlzIHdhaXRpbmcKKyAgICBs b25nZXIgdGhhbiA8dmFybmFtZT5kZWFkbG9ja190aW1lb3V0PC92YXJuYW1lPiBmb3IgY29u ZmxpY3RzLiBUaGlzCisgICAgaXMgY29udHJvbGxlZCBieSB0aGUgPHhyZWYgbGlua2VuZD0i Z3VjLWxvZy1yZWNvdmVyeS1jb25mbGljdC13YWl0cyIvPiBwYXJhbWV0ZXIuCisgICA8L3Bh cmE+CiAgIDwvc2VjdDI+CiAKICAgPHNlY3QyIGlkPSJob3Qtc3RhbmRieS1hZG1pbiI+CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4IGU1NDlmYTFkMzAuLjVhOTc0 MGFiNmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC0zODA4LDYg KzM4MDgsOCBAQCBMb2NrQnVmZmVyRm9yQ2xlYW51cChCdWZmZXIgYnVmZmVyKQogewogCUJ1 ZmZlckRlc2MgKmJ1ZkhkcjsKIAljaGFyCSAgICpuZXdfc3RhdHVzID0gTlVMTDsKKwlUaW1l c3RhbXBUeiB3YWl0U3RhcnQgPSAwOworCWJvb2wgICAgICAgIGxvZ2dlZF9yZWNvdmVyeV9j b25mbGljdCA9IGZhbHNlOwogCiAJQXNzZXJ0KEJ1ZmZlcklzUGlubmVkKGJ1ZmZlcikpOwog CUFzc2VydChQaW5Db3VudFdhaXRCdWYgPT0gTlVMTCk7CkBAIC0zODI5LDYgKzM4MzEsMTAg QEAgTG9ja0J1ZmZlckZvckNsZWFudXAoQnVmZmVyIGJ1ZmZlcikKIAogCWJ1ZkhkciA9IEdl dEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CiAKKwkvKiBTZXQgd2FpdCBzdGFydCB0 aW1lc3RhbXAgaWYgbG9nZ2luZyBpcyBlbmFibGVkICovCisJaWYgKGxvZ19yZWNvdmVyeV9j b25mbGljdF93YWl0cykKKwkJd2FpdFN0YXJ0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwor CiAJZm9yICg7OykKIAl7CiAJCXVpbnQzMgkJYnVmX3N0YXRlOwpAQCAtMzg4MSw2ICszODg3 LDE4IEBAIExvY2tCdWZmZXJGb3JDbGVhbnVwKEJ1ZmZlciBidWZmZXIpCiAJCQkJbmV3X3N0 YXR1c1tsZW5dID0gJ1wwJzsgLyogdHJ1bmNhdGUgb2ZmICIgd2FpdGluZyIgKi8KIAkJCX0K IAorCQkJaWYgKHdhaXRTdGFydCA+IDAgJiYgIWxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdCkK KwkJCXsKKwkJCQlUaW1lc3RhbXBUeiBjdXJfdHMgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7 CisJCQkJaWYgKFRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRzKHdhaXRTdGFydCwgY3VyX3Rz LAorCQkJCQkJCQkJCSAgIERlYWRsb2NrVGltZW91dCkpCisJCQkJeworCQkJCQlBc3NlcnQo bG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzKTsKKwkJCQkJTG9nUmVjb3ZlcnlDb25mbGlj dChQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0JVRkZFUlBJTiwKKwkJCQkJCQkJCQl3YWl0 U3RhcnQsIGN1cl90cywgTlVMTCk7CisJCQkJCWxvZ2dlZF9yZWNvdmVyeV9jb25mbGljdCA9 IHRydWU7CisJCQkJfQorCQkJfQogCQkJLyogUHVibGlzaCB0aGUgYnVmaWQgdGhhdCBTdGFy dHVwIHByb2Nlc3Mgd2FpdHMgb24gKi8KIAkJCVNldFN0YXJ0dXBCdWZmZXJQaW5XYWl0QnVm SWQoYnVmZmVyIC0gMSk7CiAJCQkvKiBTZXQgYWxhcm0gYW5kIHRoZW4gd2FpdCB0byBiZSBz aWduYWxlZCBieSBVbnBpbkJ1ZmZlcigpICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9zdGFuZGJ5LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5 LmMKaW5kZXggNTJiMjgwOWRhYy4uNmIxZjE5ODc1NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3N0YW5kYnkuYwpAQCAtMzksNiArMzksNyBAQAogaW50CQkJdmFjdXVtX2RlZmVyX2NsZWFu dXBfYWdlOwogaW50CQkJbWF4X3N0YW5kYnlfYXJjaGl2ZV9kZWxheSA9IDMwICogMTAwMDsK IGludAkJCW1heF9zdGFuZGJ5X3N0cmVhbWluZ19kZWxheSA9IDMwICogMTAwMDsKK2Jvb2wJ CWxvZ19yZWNvdmVyeV9jb25mbGljdF93YWl0cyA9IGZhbHNlOwogCiBzdGF0aWMgSFRBQiAq UmVjb3ZlcnlMb2NrTGlzdHM7CiAKQEAgLTQ5LDYgKzUwLDcgQEAgc3RhdGljIHZvaWQgUmVz b2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoVmlydHVhbFhJRHMoVmlydHVhbFRyYW5zYWN0aW9u SWQgKndhaXRsaXMKIHN0YXRpYyB2b2lkIFNlbmRSZWNvdmVyeUNvbmZsaWN0V2l0aEJ1ZmZl clBpbihQcm9jU2lnbmFsUmVhc29uIHJlYXNvbik7CiBzdGF0aWMgWExvZ1JlY1B0ciBMb2dD dXJyZW50UnVubmluZ1hhY3RzKFJ1bm5pbmdUcmFuc2FjdGlvbnMgQ3VyclJ1bm5pbmdYYWN0 cyk7CiBzdGF0aWMgdm9pZCBMb2dBY2Nlc3NFeGNsdXNpdmVMb2NrcyhpbnQgbmxvY2tzLCB4 bF9zdGFuZGJ5X2xvY2sgKmxvY2tzKTsKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcmVjb3Zl cnlfY29uZmxpY3RfZGVzYyhQcm9jU2lnbmFsUmVhc29uIHJlYXNvbik7CiAKIC8qCiAgKiBL ZWVwIHRyYWNrIG9mIGFsbCB0aGUgbG9ja3Mgb3duZWQgYnkgYSBnaXZlbiB0cmFuc2FjdGlv bi4KQEAgLTIxNSwxNSArMjE3LDc1IEBAIFdhaXRFeGNlZWRzTWF4U3RhbmRieURlbGF5KHVp bnQzMiB3YWl0X2V2ZW50X2luZm8pCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogTG9n IHRoZSByZWNvdmVyeSBjb25mbGljdC4KKyAqCisgKiB3YWl0X3N0YXJ0IGlzIHRoZSB0aW1l c3RhbXAgd2hlbiB0aGUgY2FsbGVyIHN0YXJ0ZWQgdG8gd2FpdC4KKyAqIGN1cl90cyBpcyB0 aGUgdGltZXN0YW1wIHdoZW4gdGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQuCisgKiBU aGlzIGZ1bmN0aW9uIGFsc28gcmVwb3J0cyB0aGUgZGV0YWlscyBhYm91dCB0aGUgY29uZmxp Y3RpbmcKKyAqIHByb2Nlc3MgaWRzIGlmICp3YWl0X2xpc3QgaXMgbm90IE5VTEwuCisgKi8K K3ZvaWQKK0xvZ1JlY292ZXJ5Q29uZmxpY3QoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24sIFRp bWVzdGFtcFR6IHdhaXRfc3RhcnQsCisJCQkJCVRpbWVzdGFtcFR6IGN1cl90cywgVmlydHVh bFRyYW5zYWN0aW9uSWQgKndhaXRfbGlzdCkKK3sKKwlsb25nCQlzZWNzOworCWludAkJCXVz ZWNzOworCWxvbmcJCW1zZWNzOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlpbnQJbnByb2Nz ID0gMDsKKworCVRpbWVzdGFtcERpZmZlcmVuY2Uod2FpdF9zdGFydCwgY3VyX3RzLCAmc2Vj cywgJnVzZWNzKTsKKwltc2VjcyA9IHNlY3MgKiAxMDAwICsgdXNlY3MgLyAxMDAwOworCXVz ZWNzID0gdXNlY3MgJSAxMDAwOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwlpZiAo d2FpdF9saXN0KQorCXsKKwkJVmlydHVhbFRyYW5zYWN0aW9uSWQgKnZ4aWRzOworCisKKwkJ LyogY29uc3RydWN0IGEgc3RyaW5nIG9mIGxpc3Qgb2YgdGhlIGNvbmZsaWN0ZWQgcHJvY2Vz c2VzICovCisJCXZ4aWRzID0gd2FpdF9saXN0OworCQl3aGlsZSAoVmlydHVhbFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKCp2eGlkcykpCisJCXsKKwkJCVBHUFJPQyAqcHJvYyA9IEJhY2tlbmRJ ZEdldFByb2ModnhpZHMtPmJhY2tlbmRJZCk7CisKKwkJCWlmIChwcm9jKQorCQkJeworCQkJ CWlmIChucHJvY3MgPT0gMCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCBw cm9jLT5waWQpOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAl ZCIsIHByb2MtPnBpZCk7CisKKwkJCQlucHJvY3MrKzsKKwkJCX0KKworCQkJdnhpZHMrKzsK KwkJfQorCisJfQorCisJZXJlcG9ydChMT0csCisJCQllcnJtc2coInJlY292ZXJ5IHN0aWxs IHdhaXRpbmcgYWZ0ZXIgJWxkLiUwM2QgbXM6ICVzIiwKKwkJCQkJbXNlY3MsIHVzZWNzLCBf KGdldF9yZWNvdmVyeV9jb25mbGljdF9kZXNjKHJlYXNvbikpKSwKKwkJCXdhaXRfbGlzdCAh PSBOVUxMID8gZXJyZGV0YWlsX2xvZ19wbHVyYWwoIkNvbmZsaWN0aW5nIHByb2Nlc3M6ICVz LiIsCisJCQkJCQkJCQkJCQkJIkNvbmZsaWN0aW5nIHByb2Nlc3NlczogJXMuIiwKKwkJCQkJ CQkJCQkJCQlucHJvY3MsIGJ1Zi5kYXRhKSA6IDApOworCXBmcmVlKGJ1Zi5kYXRhKTsKK30K KwogLyoKICAqIFRoaXMgaXMgdGhlIG1haW4gZXhlY3V0aW9uZXIgZm9yIGFueSBxdWVyeSBi YWNrZW5kIHRoYXQgY29uZmxpY3RzIHdpdGgKICAqIHJlY292ZXJ5IHByb2Nlc3NpbmcuIEp1 ZGdlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCBvbiBpdCB3aXRoaW4KICAqIGEgc3Bl Y2lmaWMgcm1nci4gSGVyZSB3ZSBqdXN0IGlzc3VlIHRoZSBvcmRlcnMgdG8gdGhlIHByb2Nz LiBUaGUgcHJvY3MKICAqIHRoZW4gdGhyb3cgdGhlIHJlcXVpcmVkIGVycm9yIGFzIGluc3Ry dWN0ZWQuCiAgKgotICogSWYgcmVwb3J0X3dhaXRpbmcgaXMgdHJ1ZSwgIndhaXRpbmciIGlz IHJlcG9ydGVkIGluIFBTIGRpc3BsYXkgaWYgbmVjZXNzYXJ5LgotICogSWYgdGhlIGNhbGxl ciBoYXMgYWxyZWFkeSByZXBvcnRlZCB0aGF0LCByZXBvcnRfd2FpdGluZyBzaG91bGQgYmUg ZmFsc2UuCi0gKiBPdGhlcndpc2UsICJ3YWl0aW5nIiBpcyByZXBvcnRlZCB0d2ljZSB1bmV4 cGVjdGVkbHkuCisgKiBJZiByZXBvcnRfd2FpdGluZyBpcyB0cnVlLCAid2FpdGluZyIgaXMg cmVwb3J0ZWQgaW4gUFMgZGlzcGxheSBhbmQgbG9nCisgKiB0aGUgd2FpdHMgZm9yIHRoZSBy ZWNvdmVyeSBjb25mbGljdCBpZiBuZWNlc3NhcnkuICBJZiB0aGUgY2FsbGVyIGhhcyBhbHJl YWR5CisgKiByZXBvcnRlZCB0aGF0LCByZXBvcnRfd2FpdGluZyBzaG91bGQgYmUgZmFsc2Uu ICBPdGhlcndpc2UsIGJvdGggYXJlIHJlcG9ydGVkCisgKiB0d2ljZSB1bmV4cGVjdGVkbHku CiAgKi8KIHN0YXRpYyB2b2lkCiBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFs WElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QsCkBAIC0yMzIsMTIgKzI5NCwx NCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJh bnNhY3Rpb25JZCAqd2FpdGxpc3QsCiB7CiAJVGltZXN0YW1wVHogd2FpdFN0YXJ0ID0gMDsK IAljaGFyCSAgICpuZXdfc3RhdHVzOworCWJvb2wgbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0 ID0gZmFsc2U7CiAKIAkvKiBGYXN0IGV4aXQsIHRvIGF2b2lkIGEga2VybmVsIGNhbGwgaWYg dGhlcmUncyBubyB3b3JrIHRvIGJlIGRvbmUuICovCiAJaWYgKCFWaXJ0dWFsVHJhbnNhY3Rp b25JZElzVmFsaWQoKndhaXRsaXN0KSkKIAkJcmV0dXJuOwogCi0JaWYgKHJlcG9ydF93YWl0 aW5nKQorCS8qIFNldCB0aGUgd2FpdCBzdGFydCB0aW1lc3RhbXAgZm9yIHJlcG9ydGluZyAq LworCWlmIChyZXBvcnRfd2FpdGluZyAmJiAobG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0IHx8 IHVwZGF0ZV9wcm9jZXNzX3RpdGxlKSkKIAkJd2FpdFN0YXJ0ID0gR2V0Q3VycmVudFRpbWVz dGFtcCgpOwogCW5ld19zdGF0dXMgPSBOVUxMOwkJCS8qIHdlIGhhdmVuJ3QgY2hhbmdlZCB0 aGUgcHMgZGlzcGxheSAqLwogCkBAIC0yNDksMjMgKzMxMyw0MyBAQCBSZXNvbHZlUmVjb3Zl cnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxp c3QsCiAJCS8qIHdhaXQgdW50aWwgdGhlIHZpcnR1YWwgeGlkIGlzIGdvbmUgKi8KIAkJd2hp bGUgKCFWaXJ0dWFsWGFjdExvY2soKndhaXRsaXN0LCBmYWxzZSkpCiAJCXsKLQkJCS8qCi0J CQkgKiBSZXBvcnQgdmlhIHBzIGlmIHdlIGhhdmUgYmVlbiB3YWl0aW5nIGZvciBtb3JlIHRo YW4gNTAwIG1zZWMKLQkJCSAqIChzaG91bGQgdGhhdCBiZSBjb25maWd1cmFibGU/KQotCQkJ ICovCi0JCQlpZiAodXBkYXRlX3Byb2Nlc3NfdGl0bGUgJiYgbmV3X3N0YXR1cyA9PSBOVUxM ICYmIHJlcG9ydF93YWl0aW5nICYmCi0JCQkJVGltZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMo d2FpdFN0YXJ0LCBHZXRDdXJyZW50VGltZXN0YW1wKCksCi0JCQkJCQkJCQkJICAgNTAwKSkK KwkJCWlmICh3YWl0U3RhcnQgPiAwKQogCQkJewotCQkJCWNvbnN0IGNoYXIgKm9sZF9zdGF0 dXM7Ci0JCQkJaW50CQkJbGVuOwotCi0JCQkJb2xkX3N0YXR1cyA9IGdldF9wc19kaXNwbGF5 KCZsZW4pOwotCQkJCW5ld19zdGF0dXMgPSAoY2hhciAqKSBwYWxsb2MobGVuICsgOCArIDEp OwotCQkJCW1lbWNweShuZXdfc3RhdHVzLCBvbGRfc3RhdHVzLCBsZW4pOwotCQkJCXN0cmNw eShuZXdfc3RhdHVzICsgbGVuLCAiIHdhaXRpbmciKTsKLQkJCQlzZXRfcHNfZGlzcGxheShu ZXdfc3RhdHVzKTsKLQkJCQluZXdfc3RhdHVzW2xlbl0gPSAnXDAnOyAvKiB0cnVuY2F0ZSBv ZmYgIiB3YWl0aW5nIiAqLworCQkJCVRpbWVzdGFtcFR6IGN1cl90cyA9IDA7CisJCQkJYm9v bCBtYXliZV9sb2dfY29uZmxpY3QgPQorCQkJCQkobG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dh aXRzICYmICFsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QpOworCQkJCWJvb2wgbWF5YmVfdXBk YXRlX3BzdGl0bGUgPQorCQkJCQkodXBkYXRlX3Byb2Nlc3NfdGl0bGUgJiYgbmV3X3N0YXR1 cyA9PSBOVUxMKTsKKworCQkJCS8qIEdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgaWYgbm90 IHJlcG9ydCB5ZXQgKi8KKwkJCQlpZiAobWF5YmVfbG9nX2NvbmZsaWN0IHx8IG1heWJlX3Vw ZGF0ZV9wc3RpdGxlKQorCQkJCQljdXJfdHMgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisK KwkJCQkvKiBMb2cgdGhlIHJlY292ZXJ5IGNvbmZsaWN0IGlmIG5lY2Vzc2FyeSAqLworCQkJ CWlmIChtYXliZV9sb2dfY29uZmxpY3QgJiYKKwkJCQkJVGltZXN0YW1wRGlmZmVyZW5jZUV4 Y2VlZHMod2FpdFN0YXJ0LCBjdXJfdHMsIERlYWRsb2NrVGltZW91dCkpCisJCQkJeworCQkJ CQlMb2dSZWNvdmVyeUNvbmZsaWN0KHJlYXNvbiwgd2FpdFN0YXJ0LCBjdXJfdHMsIHdhaXRs aXN0KTsKKwkJCQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQl9CisK KwkJCQkvKgorCQkJCSAqIFJlcG9ydCB2aWEgcHMgaWYgd2UgaGF2ZSBiZWVuIHdhaXRpbmcg Zm9yIG1vcmUgdGhhbiA1MDAgbXNlYworCQkJCSAqIChzaG91bGQgdGhhdCBiZSBjb25maWd1 cmFibGU/KQorCQkJCSAqLworCQkJCWlmIChtYXliZV91cGRhdGVfcHN0aXRsZSAmJgorCQkJ CQlUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyh3YWl0U3RhcnQsIGN1cl90cywgNTAwKSkK KwkJCQl7CisJCQkJCWNvbnN0IGNoYXIgKm9sZF9zdGF0dXM7CisJCQkJCWludAkJCWxlbjsK KworCQkJCQlvbGRfc3RhdHVzID0gZ2V0X3BzX2Rpc3BsYXkoJmxlbik7CisJCQkJCW5ld19z dGF0dXMgPSAoY2hhciAqKSBwYWxsb2MobGVuICsgOCArIDEpOworCQkJCQltZW1jcHkobmV3 X3N0YXR1cywgb2xkX3N0YXR1cywgbGVuKTsKKwkJCQkJc3RyY3B5KG5ld19zdGF0dXMgKyBs ZW4sICIgd2FpdGluZyIpOworCQkJCQlzZXRfcHNfZGlzcGxheShuZXdfc3RhdHVzKTsKKwkJ CQkJbmV3X3N0YXR1c1tsZW5dID0gJ1wwJzsgLyogdHJ1bmNhdGUgb2ZmICIgd2FpdGluZyIg Ki8KKwkJCQl9CiAJCQl9CiAKIAkJCS8qIElzIGl0IHRpbWUgdG8ga2lsbCBpdD8gKi8KQEAg LTM5OCw5ICs0ODIsMTIgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoRGF0YWJhc2Uo T2lkIGRiaWQpCiAgKgogICogRGVhZGxvY2tzIGludm9sdmluZyB0aGUgU3RhcnR1cCBwcm9j ZXNzIGFuZCBhbiBvcmRpbmFyeSBiYWNrZW5kIHByb2Nlc3MKICAqIHdpbGwgYmUgZGV0ZWN0 ZWQgYnkgdGhlIGRlYWRsb2NrIGRldGVjdG9yIHdpdGhpbiB0aGUgb3JkaW5hcnkgYmFja2Vu ZC4KKyAqCisgKiBuZWVkX2xvZyBpcyB1c2VkIHRvIHNldCB0aGUgZGVhZGxvY2sgdGltZW91 dCBmb3IgbG9nZ2luZyBwdXJwb3NlCisgKiBvbmx5IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIG5v dCBiZWVuIGxvZ2dlZCB5ZXQuCiAgKi8KIHZvaWQKLVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0 V2l0aExvY2soTE9DS1RBRyBsb2NrdGFnKQorUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRo TG9jayhMT0NLVEFHIGxvY2t0YWcsIGJvb2wgbmVlZF9sb2cpCiB7CiAJVGltZXN0YW1wVHog bHRpbWU7CiAKQEAgLTQwOCw3ICs0OTUsMzUgQEAgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RX aXRoTG9jayhMT0NLVEFHIGxvY2t0YWcpCiAKIAlsdGltZSA9IEdldFN0YW5kYnlMaW1pdFRp bWUoKTsKIAotCWlmIChHZXRDdXJyZW50VGltZXN0YW1wKCkgPj0gbHRpbWUpCisJaWYgKGx0 aW1lID09IDAgfHwgR2V0Q3VycmVudFRpbWVzdGFtcCgpIDwgbHRpbWUpCisJeworCQlFbmFi bGVUaW1lb3V0UGFyYW1zIHRpbWVvdXRzWzJdOworCQlpbnQgY250ID0gMDsKKworCQkvKgor CQkgKiBXYWl0IChvciB3YWl0IGFnYWluKSB1bnRpbCBsdGltZQorCQkgKi8KKwkJaWYgKGx0 aW1lICE9IDApCisJCXsKKwkJCXRpbWVvdXRzW2NudF0uaWQgPSBTVEFOREJZX0xPQ0tfVElN RU9VVDsKKwkJCXRpbWVvdXRzW2NudF0udHlwZSA9IFRNUEFSQU1fQVQ7CisJCQl0aW1lb3V0 c1tjbnRdLmZpbl90aW1lID0gbHRpbWU7CisJCQljbnQrKzsKKwkJfQorCisJCS8qIEFsc28s IHNldCBkZWFkbG9jayB0aW1lb3V0IGZvciBsb2dnaW5nIHB1cnBvc2UgaWYgbmVjZXNzYXJ5 ICovCisJCWlmIChsb2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMgJiYgIW5lZWRfbG9nKQor CQl7CisJCQl0aW1lb3V0c1tjbnRdLmlkID0gU1RBTkRCWV9USU1FT1VUOworCQkJdGltZW91 dHNbY250XS50eXBlID0gVE1QQVJBTV9BRlRFUjsKKwkJCXRpbWVvdXRzW2NudF0uZGVsYXlf bXMgPSBEZWFkbG9ja1RpbWVvdXQ7CisJCQljbnQrKzsKKwkJfQorCisJCWlmIChjbnQgPiAw KQorCQkJZW5hYmxlX3RpbWVvdXRzKHRpbWVvdXRzLCBjbnQpOworCX0KKwllbHNlCiAJewog CQkvKgogCQkgKiBXZSdyZSBhbHJlYWR5IGJlaGluZCwgc28gY2xlYXIgYSBwYXRoIGFzIHF1 aWNrbHkgYXMgcG9zc2libGUuCkBAIC00MTksMjYgKzUzNCwxNSBAQCBSZXNvbHZlUmVjb3Zl cnlDb25mbGljdFdpdGhMb2NrKExPQ0tUQUcgbG9ja3RhZykKIAogCQkvKgogCQkgKiBQcmV2 ZW50IFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURzKCkgZnJvbSByZXBv cnRpbmcKLQkJICogIndhaXRpbmciIGluIFBTIGRpc3BsYXkgYnkgZGlzYWJsaW5nIGl0cyBh cmd1bWVudCByZXBvcnRfd2FpdGluZwotCQkgKiBiZWNhdXNlIHRoZSBjYWxsZXIsIFdhaXRP bkxvY2soKSwgaGFzIGFscmVhZHkgcmVwb3J0ZWQgdGhhdC4KKwkJICogIndhaXRpbmciIGlu IFBTIGRpc3BsYXkgYW5kIGxvZ2dpbmcgcmVjb3ZlcnkgY29uZmxpY3QgYnkgZGlzYWJsaW5n CisJCSAqIGl0cyBhcmd1bWVudCByZXBvcnRfd2FpdGluZyBiZWNhdXNlIHRoZSBjYWxsZXJz IG1heSBoYXZlIGFscmVhZHkKKwkJICogcmVwb3J0ZWQgdGhhdC4KIAkJICovCiAJCVJlc29s dmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURzKGJhY2tlbmRzLAogCQkJCQkJCQkJ CQkgICBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0ssCiAJCQkJCQkJCQkJCSAgIFBH X1dBSVRfTE9DSyB8IGxvY2t0YWcubG9ja3RhZ190eXBlLAogCQkJCQkJCQkJCQkgICBmYWxz ZSk7CiAJfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFdhaXQgKG9yIHdhaXQgYWdhaW4pIHVu dGlsIGx0aW1lCi0JCSAqLwotCQlFbmFibGVUaW1lb3V0UGFyYW1zIHRpbWVvdXRzWzFdOwot Ci0JCXRpbWVvdXRzWzBdLmlkID0gU1RBTkRCWV9MT0NLX1RJTUVPVVQ7Ci0JCXRpbWVvdXRz WzBdLnR5cGUgPSBUTVBBUkFNX0FUOwotCQl0aW1lb3V0c1swXS5maW5fdGltZSA9IGx0aW1l OwotCQllbmFibGVfdGltZW91dHModGltZW91dHMsIDEpOwotCX0KIAogCS8qIFdhaXQgdG8g YmUgc2lnbmFsZWQgYnkgdGhlIHJlbGVhc2Ugb2YgdGhlIFJlbGF0aW9uIExvY2sgKi8KIAlQ cm9jV2FpdEZvclNpZ25hbChQR19XQUlUX0xPQ0sgfCBsb2NrdGFnLmxvY2t0YWdfdHlwZSk7 CkBAIC0xMTE2LDMgKzEyMjAsMzYgQEAgTG9nU3RhbmRieUludmFsaWRhdGlvbnMoaW50IG5t c2dzLCBTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlICptc2dzLAogCQkJCQkgbm1zZ3MgKiBz aXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVzc2FnZSkpOwogCVhMb2dJbnNlcnQoUk1fU1RB TkRCWV9JRCwgWExPR19JTlZBTElEQVRJT05TKTsKIH0KKworLyogUmV0dXJuIHRoZSBkZXNj cmlwdGlvbiBvZiByZWNvdmVyeSBjb25mbGljdCAqLworc3RhdGljIGNvbnN0IGNoYXIgKgor Z2V0X3JlY292ZXJ5X2NvbmZsaWN0X2Rlc2MoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pCit7 CisJY29uc3QgY2hhciAqcmVhc29uRGVzYyA9IGdldHRleHRfbm9vcCgidW5rbm93biByZWFz b24iKTsKKworCXN3aXRjaCAocmVhc29uKQorCXsKKwkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZ X0NPTkZMSUNUX0JVRkZFUlBJTjoKKwkJCXJlYXNvbkRlc2MgPSBnZXR0ZXh0X25vb3AoInJl Y292ZXJ5IGNvbmZsaWN0IG9uIGJ1ZmZlciBwaW4iKTsKKwkJCWJyZWFrOworCQljYXNlIFBS T0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfTE9DSzoKKwkJCXJlYXNvbkRlc2MgPSBnZXR0ZXh0 X25vb3AoInJlY292ZXJ5IGNvbmZsaWN0IG9uIGxvY2siKTsKKwkJCWJyZWFrOworCQljYXNl IFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfVEFCTEVTUEFDRToKKwkJCXJlYXNvbkRlc2Mg PSBnZXR0ZXh0X25vb3AoInJlY292ZXJ5IGNvbmZsaWN0IG9uIHRhYmxlc3BhY2UiKTsKKwkJ CWJyZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfU05BUFNIT1Q6CisJ CQlyZWFzb25EZXNjID0gZ2V0dGV4dF9ub29wKCJyZWNvdmVyeSBjb25mbGljdCBvbiBzbmFw c2hvdCIpOworCQkJYnJlYWs7CisJCWNhc2UgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9T VEFSVFVQX0RFQURMT0NLOgorCQkJcmVhc29uRGVzYyA9IGdldHRleHRfbm9vcCgicmVjb3Zl cnkgY29uZmxpY3Qgb24gYnVmZmVyIGRlYWRsb2NrIik7CisJCQlicmVhazsKKwkJY2FzZSBQ Uk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFOgorCQkJcmVhc29uRGVzYyA9IGdl dHRleHRfbm9vcCgicmVjb3ZlcnkgY29uZmxpY3Qgb24gZGF0YWJhc2UiKTsKKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJlYXNvbkRlc2M7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCA4ODU2NmJkOWZhLi42ZDA4NzI2YmU5 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTEwNjMsOCArMTA2MywxMCBAQCBQ cm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9ja01ldGhvZFRh YmxlKQogCUxXTG9jawkgICAqcGFydGl0aW9uTG9jayA9IExvY2tIYXNoUGFydGl0aW9uTG9j ayhoYXNoY29kZSk7CiAJUFJPQ19RVUVVRSAqd2FpdFF1ZXVlID0gJihsb2NrLT53YWl0UHJv Y3MpOwogCUxPQ0tNQVNLCW15SGVsZExvY2tzID0gTXlQcm9jLT5oZWxkTG9ja3M7CisJVGlt ZXN0YW1wVHogc3RhbmRieVdhaXRTdGFydCA9IDA7CiAJYm9vbAkJZWFybHlfZGVhZGxvY2sg PSBmYWxzZTsKIAlib29sCQlhbGxvd19hdXRvdmFjdXVtX2NhbmNlbCA9IHRydWU7CisJYm9v bCAgICAgICAgbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gZmFsc2U7CiAJUHJvY1dhaXRT dGF0dXMgbXlXYWl0U3RhdHVzOwogCVBHUFJPQwkgICAqcHJvYzsKIAlQR1BST0MJICAgKmxl YWRlciA9IE15UHJvYy0+bG9ja0dyb3VwTGVhZGVyOwpAQCAtMTI2MCw2ICsxMjYyLDExIEBA IFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9ja01ldGhvZCBsb2NrTWV0aG9k VGFibGUpCiAJCWVsc2UKIAkJCWVuYWJsZV90aW1lb3V0X2FmdGVyKERFQURMT0NLX1RJTUVP VVQsIERlYWRsb2NrVGltZW91dCk7CiAJfQorCWVsc2UgaWYgKGxvZ19yZWNvdmVyeV9jb25m bGljdF93YWl0cykKKwl7CisJCS8qIFNldCB3YWl0IHN0YXJ0IHRpbWVzdGFtcCBpZiBsb2dn aW5nIGlzIGVuYWJsZWQgKi8KKwkJc3RhbmRieVdhaXRTdGFydCA9IEdldEN1cnJlbnRUaW1l c3RhbXAoKTsKKwl9CiAKIAkvKgogCSAqIElmIHNvbWVib2R5IHdha2VzIHVzIGJldHdlZW4g TFdMb2NrUmVsZWFzZSBhbmQgV2FpdExhdGNoLCB0aGUgbGF0Y2gKQEAgLTEyODAsNyArMTI4 NywzMyBAQCBQcm9jU2xlZXAoTE9DQUxMT0NLICpsb2NhbGxvY2ssIExvY2tNZXRob2QgbG9j a01ldGhvZFRhYmxlKQogCQlpZiAoSW5Ib3RTdGFuZGJ5KQogCQl7CiAJCQkvKiBTZXQgYSB0 aW1lciBhbmQgd2FpdCBmb3IgdGhhdCBvciBmb3IgdGhlIExvY2sgdG8gYmUgZ3JhbnRlZCAq LwotCQkJUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhsb2NhbGxvY2stPnRhZy5s b2NrKTsKKwkJCVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aExvY2sobG9jYWxsb2NrLT50 YWcubG9jaywgbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0KTsKKworCQkJaWYgKHN0YW5kYnlX YWl0U3RhcnQgPiAwICYmICFsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QpCisJCQl7CisJCQkJ VGltZXN0YW1wVHogY3VyX3RzID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCQkJCWlmIChU aW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyhzdGFuZGJ5V2FpdFN0YXJ0LCBjdXJfdHMsCisJ CQkJCQkJCQkJICAgRGVhZGxvY2tUaW1lb3V0KSkKKwkJCQl7CisJCQkJCVZpcnR1YWxUcmFu c2FjdGlvbklkICp2eGlkczsKKwkJCQkJaW50CWNudDsKKworCQkJCQlBc3NlcnQobG9nX3Jl Y292ZXJ5X2NvbmZsaWN0X3dhaXRzKTsKKwkJCQkJdnhpZHMgPQlHZXRMb2NrQ29uZmxpY3Rz KCZsb2NhbGxvY2stPnRhZy5sb2NrLAorCQkJCQkJCQkJCQkgQWNjZXNzRXhjbHVzaXZlTG9j aywgJmNudCk7CisKKwkJCQkJLyoKKwkJCQkJICogTG9nIHRoZSByZWNvdmVyeSBjb25mbGlj dCBpZiB0aGVyZSBpcyBzdGlsbCB2aXJ0dWFsIHRyYW5zYWN0aW9uCisJCQkJCSAqIGNvbmZs aWN0aW5nIHdpdGggdGhlIGxvY2suCisJCQkJCSAqLworCQkJCQlpZiAoY250ID4gMCkKKwkJ CQkJeworCQkJCQkJTG9nUmVjb3ZlcnlDb25mbGljdChQUk9DU0lHX1JFQ09WRVJZX0NPTkZM SUNUX0xPQ0ssCisJCQkJCQkJCQkJCXN0YW5kYnlXYWl0U3RhcnQsIGN1cl90cywgdnhpZHMp OworCQkJCQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQkJfQorCQkJ CX0KKwkJCX0KIAkJfQogCQllbHNlCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jCmluZGV4IDU5 NmJjYjdiODQuLmU1NWEyOGIxY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwpAQCAtMTU3MCw3 ICsxNTcwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2Jvb2wgQ29uZmlndXJlTmFtZXNC b29sW10gPQogCQlmYWxzZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCi0KKwl7CisJCXsi bG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzIiwgUEdDX1NJR0hVUCwgTE9HR0lOR19XSEFU LAorCQkJZ2V0dGV4dF9ub29wKCJMb2dzIHN0YW5kYnkgcmVjb3ZlcnkgY29uZmxpY3Qgd2Fp dHMuIiksCisJCQlOVUxMCisJCX0sCisJCSZsb2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMs CisJCWZhbHNlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKIAl7CiAJCXsibG9nX2hvc3Ru YW1lIiwgUEdDX1NJR0hVUCwgTE9HR0lOR19XSEFULAogCQkJZ2V0dGV4dF9ub29wKCJMb2dz IHRoZSBob3N0IG5hbWUgaW4gdGhlIGNvbm5lY3Rpb24gbG9ncy4iKSwKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCA5Y2I1NzFm N2NjLi41NjI1NjgxZThhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0 Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC01NTMsNiArNTUzLDggQEAKIAkJCQkJIyAgICUlID0g JyUnCiAJCQkJCSMgZS5nLiAnPCV1JSUlZD4gJwogI2xvZ19sb2NrX3dhaXRzID0gb2ZmCQkJ IyBsb2cgbG9jayB3YWl0cyA+PSBkZWFkbG9ja190aW1lb3V0CisjbG9nX3JlY292ZXJ5X2Nv bmZsaWN0X3dhaXRzID0gb2ZmCSMgbG9nIHN0YW5kYnkgcmVjb3ZlcnkgY29uZmxpY3Qgd2Fp dHMKKwkJCQkJIyA+PSBkZWFkbG9ja190aW1lb3V0CiAjbG9nX3BhcmFtZXRlcl9tYXhfbGVu Z3RoID0gLTEJCSMgd2hlbiBsb2dnaW5nIHN0YXRlbWVudHMsIGxpbWl0IGxvZ2dlZAogCQkJ CQkjIGJpbmQtcGFyYW1ldGVyIHZhbHVlcyB0byBOIGJ5dGVzOwogCQkJCQkjIC0xIG1lYW5z IHByaW50IGluIGZ1bGwsIDAgZGlzYWJsZXMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2Uvc3RhbmRieS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKaW5kZXgg ZmFhZjFkMzgxNy4uZDI0OTQ1OWFhNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zdGFuZGJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKQEAgLTIz LDYgKzIzLDcgQEAKIGV4dGVybiBpbnQJdmFjdXVtX2RlZmVyX2NsZWFudXBfYWdlOwogZXh0 ZXJuIGludAltYXhfc3RhbmRieV9hcmNoaXZlX2RlbGF5OwogZXh0ZXJuIGludAltYXhfc3Rh bmRieV9zdHJlYW1pbmdfZGVsYXk7CitleHRlcm4gYm9vbAlsb2dfcmVjb3ZlcnlfY29uZmxp Y3Rfd2FpdHM7CiAKIGV4dGVybiB2b2lkIEluaXRSZWNvdmVyeVRyYW5zYWN0aW9uRW52aXJv bm1lbnQodm9pZCk7CiBleHRlcm4gdm9pZCBTaHV0ZG93blJlY292ZXJ5VHJhbnNhY3Rpb25F bnZpcm9ubWVudCh2b2lkKTsKQEAgLTMyLDEyICszMywxNCBAQCBleHRlcm4gdm9pZCBSZXNv bHZlUmVjb3ZlcnlDb25mbGljdFdpdGhTbmFwc2hvdChUcmFuc2FjdGlvbklkIGxhdGVzdFJl bW92ZWRYaWQsCiBleHRlcm4gdm9pZCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhUYWJs ZXNwYWNlKE9pZCB0c2lkKTsKIGV4dGVybiB2b2lkIFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0 V2l0aERhdGFiYXNlKE9pZCBkYmlkKTsKIAotZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292ZXJ5 Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcpOworZXh0ZXJuIHZvaWQgUmVzb2x2 ZVJlY292ZXJ5Q29uZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcsIGJvb2wgbmVlZF9s b2cpOwogZXh0ZXJuIHZvaWQgUmVzb2x2ZVJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGlu KHZvaWQpOwogZXh0ZXJuIHZvaWQgQ2hlY2tSZWNvdmVyeUNvbmZsaWN0RGVhZGxvY2sodm9p ZCk7CiBleHRlcm4gdm9pZCBTdGFuZGJ5RGVhZExvY2tIYW5kbGVyKHZvaWQpOwogZXh0ZXJu IHZvaWQgU3RhbmRieVRpbWVvdXRIYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRi eUxvY2tUaW1lb3V0SGFuZGxlcih2b2lkKTsKK2V4dGVybiB2b2lkIExvZ1JlY292ZXJ5Q29u ZmxpY3QoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24sIFRpbWVzdGFtcFR6IHdhaXRfc3RhcnQs CisJCQkJCQkJCVRpbWVzdGFtcFR6IGN1cl90cywgVmlydHVhbFRyYW5zYWN0aW9uSWQgKndh aXRfbGlzdCk7CiAKIC8qCiAgKiBTdGFuZGJ5IFJtZ3IgKFJNX1NUQU5EQllfSUQpCg== --------------569132E3C937390A1C41506E--