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 1kg2Yj-0002B4-80 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Nov 2020 09:18:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kg2Yi-0002Da-66 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Nov 2020 09:18:24 +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 1kg2Yh-0002DS-JV for pgsql-hackers@lists.postgresql.org; Fri, 20 Nov 2020 09:18:23 +0000 Received: from smtp-fw-9101.amazon.com ([207.171.184.25]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kg2Ya-0005D6-C0 for pgsql-hackers@postgresql.org; Fri, 20 Nov 2020 09:18:22 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1605863897; x=1637399897; h=to:cc:references:from:message-id:date:mime-version: in-reply-to:subject; bh=R88WL2Y7bGcAac1KIFppwku9T/sdX15+qH0Lqkc9FwQ=; b=WDocwcYGeYbxAxe2hEcZy1VcLfjlA3Ly00BlX0ls4WdJ1+FmCokWgY6q U65+H9nXiRSughTLXOWCo+lc+ASpa9l+7iApMcJzAwG+UibDdmLJPfuoH tsz6fLoZcsYoEB+SLNEFuRlpg8LXWxO1dxhIzVNny95mmxnZBsomOIv9v k=; X-Amazon-filename: v9-0002-Log-the-standby-recovery-conflict-waits.patch X-IronPort-AV: E=Sophos;i="5.78,356,1599523200"; d="scan'208";a="89059313" Subject: Re: Add Information during standby recovery conflicts Received: from sea32-co-svc-lb4-vlan3.sea.corp.amazon.com (HELO email-inbound-relay-1a-67b371d8.us-east-1.amazon.com) ([10.47.23.38]) by smtp-border-fw-out-9101.sea19.amazon.com with ESMTP; 20 Nov 2020 09:17:50 +0000 Received: from EX13D03EUC003.ant.amazon.com (iad12-ws-svc-p26-lb9-vlan2.iad.amazon.com [10.40.163.34]) by email-inbound-relay-1a-67b371d8.us-east-1.amazon.com (Postfix) with ESMTPS id 81EE3A204C; Fri, 20 Nov 2020 09:17:47 +0000 (UTC) Received: from 38f9d36c4abb.ant.amazon.com (10.43.162.53) by EX13D03EUC003.ant.amazon.com (10.43.164.192) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 20 Nov 2020 09:17:43 +0000 To: Fujii Masao , Masahiko Sawada CC: Masahiko Sawada , Kyotaro Horiguchi , Alvaro Herrera , PostgreSQL-development References: <20201015.145210.622238854316424234.horikyota.ntt@gmail.com> <9493cda6-ac77-6aff-28ea-4ff7774ba78c@oss.nttdata.com> <6416172a-8c7d-84da-2600-f5f41c61db18@amazon.com> <9682a167-af46-2e58-7f77-c87edaf80fde@amazon.com> <0c8a89ae-27bf-2c31-e74a-cf04033d7daf@oss.nttdata.com> From: "Drouvot, Bertrand" Message-ID: <9e66cab4-dda4-50c8-6c0a-d41468338fa5@amazon.com> Date: Fri, 20 Nov 2020 10:17:39 +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: <0c8a89ae-27bf-2c31-e74a-cf04033d7daf@oss.nttdata.com> Content-Type: multipart/mixed; boundary="------------27D0C0AC3C78ADABE09D41ED" Content-Language: en-US X-Originating-IP: [10.43.162.53] X-ClientProxiedBy: EX13D15UWB001.ant.amazon.com (10.43.161.254) To EX13D03EUC003.ant.amazon.com (10.43.164.192) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --------------27D0C0AC3C78ADABE09D41ED Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Hi, On 11/17/20 4:44 PM, Fujii Masao wrote: > > Thanks for updating the patch! Here are review comments. > > +        Controls whether a log message is produced when the startup > process > +        is waiting longer than deadlock_timeout > +        for recovery conflicts. > > But a log message can be produced also when the backend is waiting > for recovery conflict. Right? If yes, this description needs to be > corrected. Thanks for looking at it! I don't think so, only the startup process should write those new log messages. What makes you think that would not be the case? > > > +        for recovery conflicts.  This is useful in determining if > recovery > +        conflicts prevents the recovery from applying WAL. > > "prevents" should be "prevent"? Indeed: fixed in the new attached patch. > > > +       TimestampDifference(waitStart, GetCurrentTimestamp(), &secs, > &usecs); > +       msecs = secs * 1000 + usecs / 1000; > > GetCurrentTimestamp() is basically called before LogRecoveryConflict() > is called. So isn't it better to avoid calling GetCurrentTimestamp() > newly in > LogRecoveryConflict() and to reuse the timestamp that we got? > It's helpful to avoid the waste of cycles. > good catch! fixed in the new attached patch. > > +               while (VirtualTransactionIdIsValid(*vxids)) > +               { > +                       PGPROC *proc = > BackendIdGetProc(vxids->backendId); > > BackendIdGetProc() can return NULL if the backend is not active > at that moment. This case should be handled. > handled in the new attached patch. > > +               case PROCSIG_RECOVERY_CONFLICT_BUFFERPIN: > +                       reasonDesc = gettext_noop("recovery is still > waiting recovery conflict on buffer pin"); > > It's natural to use "waiting for recovery" rather than "waiting > recovery"? > I would be tempted to say so, the new patch makes use of "waiting for". > > +               /* Also, set deadlock timeout for logging purpose if > necessary */ > +               if (log_recovery_conflict_waits) > +               { > +                       timeouts[cnt].id = STANDBY_TIMEOUT; > +                       timeouts[cnt].type = TMPARAM_AFTER; > +                       timeouts[cnt].delay_ms = DeadlockTimeout; > +                       cnt++; > +               } > > This needs to be executed only when the message has not been logged yet. > Right? > good catch: fixed in the new attached patch. Bertrand --------------27D0C0AC3C78ADABE09D41ED Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="v9-0002-Log-the-standby-recovery-conflict-waits.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v9-0002-Log-the-standby-recovery-conflict-waits.patch" IGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAyMiAr KysKIGRvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0eS5zZ21sICAgICAgICAgICB8ICAg NiArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgICAgfCAg MTggKysrCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgICAgICAgICAgICAg fCAyMTcgKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9wcm9jLmMgICAgICAgICAgICAgICB8ICAzMyArKysrCiBzcmMvYmFja2VuZC91dGls cy9taXNjL2d1Yy5jICAgICAgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMiArCiBzcmMvaW5jbHVkZS9z dG9yYWdlL3N0YW5kYnkuaCAgICAgICAgICAgICAgICAgfCAgIDMgKwogOCBmaWxlcyBjaGFu Z2VkLCAyNzYgaW5zZXJ0aW9ucygrKSwgMzUgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS9k b2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5k ZXggZWU5MTQ3NDBjYy4uM2FhODkyYzBmMyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNjgzOSw2ICs2 ODM5LDI4IEBAIGxvZ19saW5lX3ByZWZpeCA9ICclbSBbJXBdICVxJXVAJWQvJWEgJwogICAg ICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3Rl bnRyeSBpZD0iZ3VjLWxvZy1yZWNvdmVyeS1jb25mbGljdC13YWl0cyIgeHJlZmxhYmVsPSJs b2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+bG9n X3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlw ZT4pCisgICAgICA8aW5kZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmxvZ19y ZWNvdmVyeV9jb25mbGljdF93YWl0czwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0 ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQ29udHJvbHMgd2hldGhlciBh IGxvZyBtZXNzYWdlIGlzIHByb2R1Y2VkIHdoZW4gdGhlIHN0YXJ0dXAgcHJvY2VzcworICAg ICAgICBpcyB3YWl0aW5nIGxvbmdlciB0aGFuIDx2YXJuYW1lPmRlYWRsb2NrX3RpbWVvdXQ8 L3Zhcm5hbWU+CisgICAgICAgIGZvciByZWNvdmVyeSBjb25mbGljdHMuICBUaGlzIGlzIHVz ZWZ1bCBpbiBkZXRlcm1pbmluZyBpZiByZWNvdmVyeQorICAgICAgICBjb25mbGljdHMgcHJl dmVudCB0aGUgcmVjb3ZlcnkgZnJvbSBhcHBseWluZyBXQUwuCisgICAgICAgPC9wYXJhPgor CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFsPm9mZjwv bGl0ZXJhbD4uICBUaGlzIHBhcmFtZXRlciBjYW4gb25seSBiZSBzZXQKKyAgICAgICAgaW4g dGhlIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVuYW1lPiBmaWxlIG9yIG9uIHRo ZSBzZXJ2ZXIKKyAgICAgICAgY29tbWFuZCBsaW5lLgorICAgICAgIDwvcGFyYT4KKyAgICAg IDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9Imd1Yy1sb2ctcGFyYW1ldGVyLW1heC1sZW5ndGgiIHhyZWZsYWJlbD0ibG9nX3Bh cmFtZXRlcl9tYXhfbGVuZ3RoIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmxvZ19wYXJhbWV0 ZXJfbWF4X2xlbmd0aDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQogICAgICAg PGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9oaWdoLWF2YWlsYWJpbGl0 eS5zZ21sIGIvZG9jL3NyYy9zZ21sL2hpZ2gtYXZhaWxhYmlsaXR5LnNnbWwKaW5kZXggODZk YTg0ZmNlNy4uM2RjYjM0MTQzYSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2hpZ2gtYXZh aWxhYmlsaXR5LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2hpZ2gtYXZhaWxhYmlsaXR5LnNn bWwKQEAgLTIxMDQsNiArMjEwNCwxMiBAQCBpZiAoIXRyaWdnZXJlZCkKICAgICBzZXJ2ZXIu IFRoZSA8c3RydWN0bmFtZT5wZ19zdGF0X2RhdGFiYXNlPC9zdHJ1Y3RuYW1lPiBzeXN0ZW0g dmlldyBhbHNvIGNvbnRhaW5zCiAgICAgc3VtbWFyeSBpbmZvcm1hdGlvbi4KICAgIDwvcGFy YT4KKworICAgPHBhcmE+CisgICAgVXNlcnMgY2FuIGNvbnRyb2wgd2hldGhlciBhIGxvZyBt ZXNzYWdlIGlzIHByb2R1Y2VkIHdoZW4gV0FMIHJlcGxheSBpcyB3YWl0aW5nCisgICAgbG9u Z2VyIHRoYW4gPHZhcm5hbWU+ZGVhZGxvY2tfdGltZW91dDwvdmFybmFtZT4gZm9yIGNvbmZs aWN0cy4gVGhpcworICAgIGlzIGNvbnRyb2xsZWQgYnkgdGhlIDx4cmVmIGxpbmtlbmQ9Imd1 Yy1sb2ctcmVjb3ZlcnktY29uZmxpY3Qtd2FpdHMiLz4gcGFyYW1ldGVyLgorICAgPC9wYXJh PgogICA8L3NlY3QyPgogCiAgIDxzZWN0MiBpZD0iaG90LXN0YW5kYnktYWRtaW4iPgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCBlNTQ5ZmExZDMwLi41YTk3NDBh YjZmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwor KysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMzgwOCw2ICsz ODA4LDggQEAgTG9ja0J1ZmZlckZvckNsZWFudXAoQnVmZmVyIGJ1ZmZlcikKIHsKIAlCdWZm ZXJEZXNjICpidWZIZHI7CiAJY2hhcgkgICAqbmV3X3N0YXR1cyA9IE5VTEw7CisJVGltZXN0 YW1wVHogd2FpdFN0YXJ0ID0gMDsKKwlib29sICAgICAgICBsb2dnZWRfcmVjb3ZlcnlfY29u ZmxpY3QgPSBmYWxzZTsKIAogCUFzc2VydChCdWZmZXJJc1Bpbm5lZChidWZmZXIpKTsKIAlB c3NlcnQoUGluQ291bnRXYWl0QnVmID09IE5VTEwpOwpAQCAtMzgyOSw2ICszODMxLDEwIEBA IExvY2tCdWZmZXJGb3JDbGVhbnVwKEJ1ZmZlciBidWZmZXIpCiAKIAlidWZIZHIgPSBHZXRC dWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOwogCisJLyogU2V0IHdhaXQgc3RhcnQgdGlt ZXN0YW1wIGlmIGxvZ2dpbmcgaXMgZW5hYmxlZCAqLworCWlmIChsb2dfcmVjb3ZlcnlfY29u ZmxpY3Rfd2FpdHMpCisJCXdhaXRTdGFydCA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKKwog CWZvciAoOzspCiAJewogCQl1aW50MzIJCWJ1Zl9zdGF0ZTsKQEAgLTM4ODEsNiArMzg4Nywx OCBAQCBMb2NrQnVmZmVyRm9yQ2xlYW51cChCdWZmZXIgYnVmZmVyKQogCQkJCW5ld19zdGF0 dXNbbGVuXSA9ICdcMCc7IC8qIHRydW5jYXRlIG9mZiAiIHdhaXRpbmciICovCiAJCQl9CiAK KwkJCWlmICh3YWl0U3RhcnQgPiAwICYmICFsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QpCisJ CQl7CisJCQkJVGltZXN0YW1wVHogY3VyX3RzID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwor CQkJCWlmIChUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyh3YWl0U3RhcnQsIGN1cl90cywK KwkJCQkJCQkJCQkgICBEZWFkbG9ja1RpbWVvdXQpKQorCQkJCXsKKwkJCQkJQXNzZXJ0KGxv Z19yZWNvdmVyeV9jb25mbGljdF93YWl0cyk7CisJCQkJCUxvZ1JlY292ZXJ5Q29uZmxpY3Qo UFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9CVUZGRVJQSU4sCisJCQkJCQkJCQkJd2FpdFN0 YXJ0LCBjdXJfdHMsIE5VTEwpOworCQkJCQlsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QgPSB0 cnVlOworCQkJCX0KKwkJCX0KIAkJCS8qIFB1Ymxpc2ggdGhlIGJ1ZmlkIHRoYXQgU3RhcnR1 cCBwcm9jZXNzIHdhaXRzIG9uICovCiAJCQlTZXRTdGFydHVwQnVmZmVyUGluV2FpdEJ1Zklk KGJ1ZmZlciAtIDEpOwogCQkJLyogU2V0IGFsYXJtIGFuZCB0aGVuIHdhaXQgdG8gYmUgc2ln bmFsZWQgYnkgVW5waW5CdWZmZXIoKSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvc3RhbmRieS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5j CmluZGV4IDUyYjI4MDlkYWMuLjA0NjEyOTIxYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9z dGFuZGJ5LmMKQEAgLTM5LDYgKzM5LDggQEAKIGludAkJCXZhY3V1bV9kZWZlcl9jbGVhbnVw X2FnZTsKIGludAkJCW1heF9zdGFuZGJ5X2FyY2hpdmVfZGVsYXkgPSAzMCAqIDEwMDA7CiBp bnQJCQltYXhfc3RhbmRieV9zdHJlYW1pbmdfZGVsYXkgPSAzMCAqIDEwMDA7Citib29sCQls b2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMgPSBmYWxzZTsKK2Jvb2wJCWxvZ2dlZF9sb2Nr X2NvbmZsaWN0ID0gZmFsc2U7CiAKIHN0YXRpYyBIVEFCICpSZWNvdmVyeUxvY2tMaXN0czsK IApAQCAtNDksNiArNTEsNyBAQCBzdGF0aWMgdm9pZCBSZXNvbHZlUmVjb3ZlcnlDb25mbGlj dFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpcwogc3RhdGlj IHZvaWQgU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKFByb2NTaWduYWxSZWFz b24gcmVhc29uKTsKIHN0YXRpYyBYTG9nUmVjUHRyIExvZ0N1cnJlbnRSdW5uaW5nWGFjdHMo UnVubmluZ1RyYW5zYWN0aW9ucyBDdXJyUnVubmluZ1hhY3RzKTsKIHN0YXRpYyB2b2lkIExv Z0FjY2Vzc0V4Y2x1c2l2ZUxvY2tzKGludCBubG9ja3MsIHhsX3N0YW5kYnlfbG9jayAqbG9j a3MpOworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZWNvdmVyeV9jb25mbGljdF9kZXNjKFBy b2NTaWduYWxSZWFzb24gcmVhc29uKTsKIAogLyoKICAqIEtlZXAgdHJhY2sgb2YgYWxsIHRo ZSBsb2NrcyBvd25lZCBieSBhIGdpdmVuIHRyYW5zYWN0aW9uLgpAQCAtMjE1LDE1ICsyMTgs ODcgQEAgV2FpdEV4Y2VlZHNNYXhTdGFuZGJ5RGVsYXkodWludDMyIHdhaXRfZXZlbnRfaW5m bykKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBMb2cgdGhlIHJlY292ZXJ5IGNvbmZs aWN0LgorICoKKyAqIHdhaXRTdGFydCBpcyB0aGUgdGltZXN0YW1wIHdoZW4gdGhlIGNhbGxl ciBzdGFydGVkIHRvIHdhaXQuIFRoaXMgZnVuY3Rpb24gYWxzbworICogcmVwb3J0cyB0aGUg ZGV0YWlscyBhYm91dCB0aGUgY29uZmxpY3RpbmcgcHJvY2VzcyBpZHMgaWYgKndhaXRsaXN0 IGlzIG5vdCBOVUxMLgorICovCit2b2lkCitMb2dSZWNvdmVyeUNvbmZsaWN0KFByb2NTaWdu YWxSZWFzb24gcmVhc29uLCBUaW1lc3RhbXBUeiB3YWl0U3RhcnQsCisJCQkJCVRpbWVzdGFt cFR6IGN1cl90cywgVmlydHVhbFRyYW5zYWN0aW9uSWQgKndhaXRsaXN0KQoreworCWxvbmcJ CXNlY3M7CisJaW50CQkJdXNlY3M7CisJbG9uZwkJbXNlY3M7CisKKwlUaW1lc3RhbXBEaWZm ZXJlbmNlKHdhaXRTdGFydCwgY3VyX3RzLCAmc2VjcywgJnVzZWNzKTsKKwltc2VjcyA9IHNl Y3MgKiAxMDAwICsgdXNlY3MgLyAxMDAwOworCXVzZWNzID0gdXNlY3MgJSAxMDAwOworCisJ aWYgKHdhaXRsaXN0KQorCXsKKwkJVmlydHVhbFRyYW5zYWN0aW9uSWQgKnZ4aWRzOworCQlT dHJpbmdJbmZvRGF0YSBidWY7CisJCWludAlucHJvY3MgPSAwOworCisJCWluaXRTdHJpbmdJ bmZvKCZidWYpOworCisJCS8qIGNvbnN0cnVjdCBhIHN0cmluZyBvZiBsaXN0IG9mIHRoZSBj b25mbGljdGVkIHByb2Nlc3NlcyAqLworCQl2eGlkcyA9IHdhaXRsaXN0OworCQl3aGlsZSAo VmlydHVhbFRyYW5zYWN0aW9uSWRJc1ZhbGlkKCp2eGlkcykpCisJCXsKKwkJCVBHUFJPQyAq cHJvYyA9IEJhY2tlbmRJZEdldFByb2ModnhpZHMtPmJhY2tlbmRJZCk7CisKKwkJCWlmIChw cm9jKQorCQkJeworCQkJCWlmIChucHJvY3MgPT0gMCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5m bygmYnVmLCAiJWQiLCBwcm9jLT5waWQpOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5n SW5mbygmYnVmLCAiLCAlZCIsIHByb2MtPnBpZCk7CisKKwkJCQlucHJvY3MrKzsKKwkJCQl2 eGlkcysrOworCQkJfQorCQl9CisKKwkJaWYgKG5wcm9jcyA+IDApCisJCXsKKwkJCWVyZXBv cnQoTE9HLAorCQkJCQkoZXJybXNnKCIlcyBhZnRlciAlbGQuJTAzZCBtcyIsCisJCQkJCQkJ Z2V0X3JlY292ZXJ5X2NvbmZsaWN0X2Rlc2MocmVhc29uKSwgbXNlY3MsIHVzZWNzKSwKKwkJ CQkJIChlcnJkZXRhaWxfbG9nX3BsdXJhbCgiQ29uZmxpY3RpbmcgcHJvY2VzczogJXMuIiwK KwkJCQkJCQkJCQkgICAiQ29uZmxpY3RpbmcgcHJvY2Vzc2VzOiAlcy4iLAorCQkJCQkJCQkJ CSAgIG5wcm9jcywgYnVmLmRhdGEpKSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJZXJlcG9y dChMT0csCisJCQkJCShlcnJtc2coIiVzIGFmdGVyICVsZC4lMDNkIG1zIiwKKwkJCQkJCQln ZXRfcmVjb3ZlcnlfY29uZmxpY3RfZGVzYyhyZWFzb24pLCBtc2VjcywgdXNlY3MpKSk7CisJ CX0KKworCQlwZnJlZShidWYuZGF0YSk7CisJfQorCWVsc2UKKwkJZXJlcG9ydChMT0csCisJ CQkJKGVycm1zZygiJXMgYWZ0ZXIgJWxkLiUwM2QgbXMiLAorCQkJCQkJZ2V0X3JlY292ZXJ5 X2NvbmZsaWN0X2Rlc2MocmVhc29uKSwgbXNlY3MsIHVzZWNzKSkpOworCisJaWYgKHJlYXNv biA9PSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0spCisJCWxvZ2dlZF9sb2NrX2Nv bmZsaWN0ID0gdHJ1ZTsKK30KKwogLyoKICAqIFRoaXMgaXMgdGhlIG1haW4gZXhlY3V0aW9u ZXIgZm9yIGFueSBxdWVyeSBiYWNrZW5kIHRoYXQgY29uZmxpY3RzIHdpdGgKICAqIHJlY292 ZXJ5IHByb2Nlc3NpbmcuIEp1ZGdlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCBvbiBp dCB3aXRoaW4KICAqIGEgc3BlY2lmaWMgcm1nci4gSGVyZSB3ZSBqdXN0IGlzc3VlIHRoZSBv cmRlcnMgdG8gdGhlIHByb2NzLiBUaGUgcHJvY3MKICAqIHRoZW4gdGhyb3cgdGhlIHJlcXVp cmVkIGVycm9yIGFzIGluc3RydWN0ZWQuCiAgKgotICogSWYgcmVwb3J0X3dhaXRpbmcgaXMg dHJ1ZSwgIndhaXRpbmciIGlzIHJlcG9ydGVkIGluIFBTIGRpc3BsYXkgaWYgbmVjZXNzYXJ5 LgotICogSWYgdGhlIGNhbGxlciBoYXMgYWxyZWFkeSByZXBvcnRlZCB0aGF0LCByZXBvcnRf d2FpdGluZyBzaG91bGQgYmUgZmFsc2UuCi0gKiBPdGhlcndpc2UsICJ3YWl0aW5nIiBpcyBy ZXBvcnRlZCB0d2ljZSB1bmV4cGVjdGVkbHkuCisgKiBJZiByZXBvcnRfd2FpdGluZyBpcyB0 cnVlLCAid2FpdGluZyIgaXMgcmVwb3J0ZWQgaW4gUFMgZGlzcGxheSBhbmQgbG9nCisgKiB0 aGUgd2FpdHMgZm9yIHRoZSByZWNvdmVyeSBjb25mbGljdCBpZiBuZWNlc3NhcnkuICBJZiB0 aGUgY2FsbGVyIGhhcyBhbHJlYWR5CisgKiByZXBvcnRlZCB0aGF0LCByZXBvcnRfd2FpdGlu ZyBzaG91bGQgYmUgZmFsc2UuICBPdGhlcndpc2UsIGJvdGggYXJlIHJlcG9ydGVkCisgKiB0 d2ljZSB1bmV4cGVjdGVkbHkuCiAgKi8KIHN0YXRpYyB2b2lkCiBSZXNvbHZlUmVjb3ZlcnlD b25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3Qs CkBAIC0yMzIsMTIgKzMwNywxNCBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0 dWFsWElEcyhWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QsCiB7CiAJVGltZXN0YW1w VHogd2FpdFN0YXJ0ID0gMDsKIAljaGFyCSAgICpuZXdfc3RhdHVzOworCWJvb2wgbG9nZ2Vk X3JlY292ZXJ5X2NvbmZsaWN0ID0gZmFsc2U7CiAKIAkvKiBGYXN0IGV4aXQsIHRvIGF2b2lk IGEga2VybmVsIGNhbGwgaWYgdGhlcmUncyBubyB3b3JrIHRvIGJlIGRvbmUuICovCiAJaWYg KCFWaXJ0dWFsVHJhbnNhY3Rpb25JZElzVmFsaWQoKndhaXRsaXN0KSkKIAkJcmV0dXJuOwog Ci0JaWYgKHJlcG9ydF93YWl0aW5nKQorCS8qIFNldCB0aGUgd2FpdCBzdGFydCB0aW1lc3Rh bXAgZm9yIHJlcG9ydGluZyAqLworCWlmIChyZXBvcnRfd2FpdGluZyAmJiAobG9nZ2VkX3Jl Y292ZXJ5X2NvbmZsaWN0IHx8IHVwZGF0ZV9wcm9jZXNzX3RpdGxlKSkKIAkJd2FpdFN0YXJ0 ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwogCW5ld19zdGF0dXMgPSBOVUxMOwkJCS8qIHdl IGhhdmVuJ3QgY2hhbmdlZCB0aGUgcHMgZGlzcGxheSAqLwogCkBAIC0yNDksMjMgKzMyNiw0 MyBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhWaXJ0dWFsWElEcyhWaXJ0dWFsVHJh bnNhY3Rpb25JZCAqd2FpdGxpc3QsCiAJCS8qIHdhaXQgdW50aWwgdGhlIHZpcnR1YWwgeGlk IGlzIGdvbmUgKi8KIAkJd2hpbGUgKCFWaXJ0dWFsWGFjdExvY2soKndhaXRsaXN0LCBmYWxz ZSkpCiAJCXsKLQkJCS8qCi0JCQkgKiBSZXBvcnQgdmlhIHBzIGlmIHdlIGhhdmUgYmVlbiB3 YWl0aW5nIGZvciBtb3JlIHRoYW4gNTAwIG1zZWMKLQkJCSAqIChzaG91bGQgdGhhdCBiZSBj b25maWd1cmFibGU/KQotCQkJICovCi0JCQlpZiAodXBkYXRlX3Byb2Nlc3NfdGl0bGUgJiYg bmV3X3N0YXR1cyA9PSBOVUxMICYmIHJlcG9ydF93YWl0aW5nICYmCi0JCQkJVGltZXN0YW1w RGlmZmVyZW5jZUV4Y2VlZHMod2FpdFN0YXJ0LCBHZXRDdXJyZW50VGltZXN0YW1wKCksCi0J CQkJCQkJCQkJICAgNTAwKSkKKwkJCWlmICh3YWl0U3RhcnQgPiAwKQogCQkJewotCQkJCWNv bnN0IGNoYXIgKm9sZF9zdGF0dXM7Ci0JCQkJaW50CQkJbGVuOwotCi0JCQkJb2xkX3N0YXR1 cyA9IGdldF9wc19kaXNwbGF5KCZsZW4pOwotCQkJCW5ld19zdGF0dXMgPSAoY2hhciAqKSBw YWxsb2MobGVuICsgOCArIDEpOwotCQkJCW1lbWNweShuZXdfc3RhdHVzLCBvbGRfc3RhdHVz LCBsZW4pOwotCQkJCXN0cmNweShuZXdfc3RhdHVzICsgbGVuLCAiIHdhaXRpbmciKTsKLQkJ CQlzZXRfcHNfZGlzcGxheShuZXdfc3RhdHVzKTsKLQkJCQluZXdfc3RhdHVzW2xlbl0gPSAn XDAnOyAvKiB0cnVuY2F0ZSBvZmYgIiB3YWl0aW5nIiAqLworCQkJCVRpbWVzdGFtcFR6IGN1 cl90cyA9IDA7CisJCQkJYm9vbCBtYXliZV9sb2dfY29uZmxpY3QgPQorCQkJCQkobG9nX3Jl Y292ZXJ5X2NvbmZsaWN0X3dhaXRzICYmICFsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QpOwor CQkJCWJvb2wgbWF5YmVfdXBkYXRlX3BzdGl0bGUgPQorCQkJCQkodXBkYXRlX3Byb2Nlc3Nf dGl0bGUgJiYgbmV3X3N0YXR1cyA9PSBOVUxMKTsKKworCQkJCS8qIEdldCB0aGUgY3VycmVu dCB0aW1lc3RhbXAgaWYgbm90IHJlcG9ydCB5ZXQgKi8KKwkJCQlpZiAobWF5YmVfbG9nX2Nv bmZsaWN0IHx8IG1heWJlX3VwZGF0ZV9wc3RpdGxlKQorCQkJCQljdXJfdHMgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCk7CisKKwkJCQkvKiBMb2cgdGhlIHJlY292ZXJ5IGNvbmZsaWN0IGlm IG5lY2Vzc2FyeSAqLworCQkJCWlmIChtYXliZV9sb2dfY29uZmxpY3QgJiYKKwkJCQkJVGlt ZXN0YW1wRGlmZmVyZW5jZUV4Y2VlZHMod2FpdFN0YXJ0LCBjdXJfdHMsIERlYWRsb2NrVGlt ZW91dCkpCisJCQkJeworCQkJCQlMb2dSZWNvdmVyeUNvbmZsaWN0KHJlYXNvbiwgd2FpdFN0 YXJ0LCBjdXJfdHMsIHdhaXRsaXN0KTsKKwkJCQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0 ID0gdHJ1ZTsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIFJlcG9ydCB2aWEgcHMgaWYgd2Ug aGF2ZSBiZWVuIHdhaXRpbmcgZm9yIG1vcmUgdGhhbiA1MDAgbXNlYworCQkJCSAqIChzaG91 bGQgdGhhdCBiZSBjb25maWd1cmFibGU/KQorCQkJCSAqLworCQkJCWlmIChtYXliZV91cGRh dGVfcHN0aXRsZSAmJgorCQkJCQlUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyh3YWl0U3Rh cnQsIGN1cl90cywgNTAwKSkKKwkJCQl7CisJCQkJCWNvbnN0IGNoYXIgKm9sZF9zdGF0dXM7 CisJCQkJCWludAkJCWxlbjsKKworCQkJCQlvbGRfc3RhdHVzID0gZ2V0X3BzX2Rpc3BsYXko Jmxlbik7CisJCQkJCW5ld19zdGF0dXMgPSAoY2hhciAqKSBwYWxsb2MobGVuICsgOCArIDEp OworCQkJCQltZW1jcHkobmV3X3N0YXR1cywgb2xkX3N0YXR1cywgbGVuKTsKKwkJCQkJc3Ry Y3B5KG5ld19zdGF0dXMgKyBsZW4sICIgd2FpdGluZyIpOworCQkJCQlzZXRfcHNfZGlzcGxh eShuZXdfc3RhdHVzKTsKKwkJCQkJbmV3X3N0YXR1c1tsZW5dID0gJ1wwJzsgLyogdHJ1bmNh dGUgb2ZmICIgd2FpdGluZyIgKi8KKwkJCQl9CiAJCQl9CiAKIAkJCS8qIElzIGl0IHRpbWUg dG8ga2lsbCBpdD8gKi8KQEAgLTQwOCw3ICs1MDUsMzUgQEAgUmVzb2x2ZVJlY292ZXJ5Q29u ZmxpY3RXaXRoTG9jayhMT0NLVEFHIGxvY2t0YWcpCiAKIAlsdGltZSA9IEdldFN0YW5kYnlM aW1pdFRpbWUoKTsKIAotCWlmIChHZXRDdXJyZW50VGltZXN0YW1wKCkgPj0gbHRpbWUpCisJ aWYgKGx0aW1lID09IDAgfHwgR2V0Q3VycmVudFRpbWVzdGFtcCgpIDwgbHRpbWUpCisJewor CQlFbmFibGVUaW1lb3V0UGFyYW1zIHRpbWVvdXRzWzJdOworCQlpbnQgY250ID0gMDsKKwor CQkvKgorCQkgKiBXYWl0IChvciB3YWl0IGFnYWluKSB1bnRpbCBsdGltZQorCQkgKi8KKwkJ aWYgKGx0aW1lICE9IDApCisJCXsKKwkJCXRpbWVvdXRzW2NudF0uaWQgPSBTVEFOREJZX0xP Q0tfVElNRU9VVDsKKwkJCXRpbWVvdXRzW2NudF0udHlwZSA9IFRNUEFSQU1fQVQ7CisJCQl0 aW1lb3V0c1tjbnRdLmZpbl90aW1lID0gbHRpbWU7CisJCQljbnQrKzsKKwkJfQorCisJCS8q IEFsc28sIHNldCBkZWFkbG9jayB0aW1lb3V0IGZvciBsb2dnaW5nIHB1cnBvc2UgaWYgbmVj ZXNzYXJ5ICovCisJCWlmIChsb2dfcmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHMgJiYgIWxvZ2dl ZF9sb2NrX2NvbmZsaWN0KQorCQl7CisJCQl0aW1lb3V0c1tjbnRdLmlkID0gU1RBTkRCWV9U SU1FT1VUOworCQkJdGltZW91dHNbY250XS50eXBlID0gVE1QQVJBTV9BRlRFUjsKKwkJCXRp bWVvdXRzW2NudF0uZGVsYXlfbXMgPSBEZWFkbG9ja1RpbWVvdXQ7CisJCQljbnQrKzsKKwkJ fQorCisJCWlmIChjbnQgPiAwKQorCQkJZW5hYmxlX3RpbWVvdXRzKHRpbWVvdXRzLCBjbnQp OworCX0KKwllbHNlCiAJewogCQkvKgogCQkgKiBXZSdyZSBhbHJlYWR5IGJlaGluZCwgc28g Y2xlYXIgYSBwYXRoIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuCkBAIC00MTksMjUgKzU0NCwx NiBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhMb2NrKExPQ0tUQUcgbG9ja3RhZykK IAogCQkvKgogCQkgKiBQcmV2ZW50IFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1 YWxYSURzKCkgZnJvbSByZXBvcnRpbmcKLQkJICogIndhaXRpbmciIGluIFBTIGRpc3BsYXkg YnkgZGlzYWJsaW5nIGl0cyBhcmd1bWVudCByZXBvcnRfd2FpdGluZwotCQkgKiBiZWNhdXNl IHRoZSBjYWxsZXIsIFdhaXRPbkxvY2soKSwgaGFzIGFscmVhZHkgcmVwb3J0ZWQgdGhhdC4K KwkJICogIndhaXRpbmciIGluIFBTIGRpc3BsYXkgYW5kIGxvZ2dpbmcgcmVjb3ZlcnkgY29u ZmxpY3QgYnkgZGlzYWJsaW5nCisJCSAqIGl0cyBhcmd1bWVudCByZXBvcnRfd2FpdGluZyBi ZWNhdXNlIHRoZSBjYWxsZXJzIG1heSBoYXZlIGFscmVhZHkKKwkJICogcmVwb3J0ZWQgdGhh dC4KIAkJICovCiAJCVJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aFZpcnR1YWxYSURzKGJh Y2tlbmRzLAogCQkJCQkJCQkJCQkgICBQUk9DU0lHX1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0ss CiAJCQkJCQkJCQkJCSAgIFBHX1dBSVRfTE9DSyB8IGxvY2t0YWcubG9ja3RhZ190eXBlLAog CQkJCQkJCQkJCQkgICBmYWxzZSk7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFdhaXQg KG9yIHdhaXQgYWdhaW4pIHVudGlsIGx0aW1lCi0JCSAqLwotCQlFbmFibGVUaW1lb3V0UGFy YW1zIHRpbWVvdXRzWzFdOwogCi0JCXRpbWVvdXRzWzBdLmlkID0gU1RBTkRCWV9MT0NLX1RJ TUVPVVQ7Ci0JCXRpbWVvdXRzWzBdLnR5cGUgPSBUTVBBUkFNX0FUOwotCQl0aW1lb3V0c1sw XS5maW5fdGltZSA9IGx0aW1lOwotCQllbmFibGVfdGltZW91dHModGltZW91dHMsIDEpOwor CQlsb2dnZWRfbG9ja19jb25mbGljdCA9IGZhbHNlOwogCX0KIAogCS8qIFdhaXQgdG8gYmUg c2lnbmFsZWQgYnkgdGhlIHJlbGVhc2Ugb2YgdGhlIFJlbGF0aW9uIExvY2sgKi8KQEAgLTEx MTYsMyArMTIzMiwzNiBAQCBMb2dTdGFuZGJ5SW52YWxpZGF0aW9ucyhpbnQgbm1zZ3MsIFNo YXJlZEludmFsaWRhdGlvbk1lc3NhZ2UgKm1zZ3MsCiAJCQkJCSBubXNncyAqIHNpemVvZihT aGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlKSk7CiAJWExvZ0luc2VydChSTV9TVEFOREJZX0lE LCBYTE9HX0lOVkFMSURBVElPTlMpOwogfQorCisvKiBSZXR1cm4gdGhlIGRlc2NyaXB0aW9u IG9mIHJlY292ZXJ5IGNvbmZsaWN0ICovCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRfcmVj b3ZlcnlfY29uZmxpY3RfZGVzYyhQcm9jU2lnbmFsUmVhc29uIHJlYXNvbikKK3sKKwljb25z dCBjaGFyICpyZWFzb25EZXNjID0gZ2V0dGV4dF9ub29wKCJ1bmtub3duIHJlYXNvbiIpOwor CisJc3dpdGNoIChyZWFzb24pCisJeworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09ORkxJ Q1RfQlVGRkVSUElOOgorCQkJcmVhc29uRGVzYyA9IGdldHRleHRfbm9vcCgicmVjb3Zlcnkg aXMgc3RpbGwgd2FpdGluZyBmb3IgcmVjb3ZlcnkgY29uZmxpY3Qgb24gYnVmZmVyIHBpbiIp OworCQkJYnJlYWs7CisJCWNhc2UgUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9MT0NLOgor CQkJcmVhc29uRGVzYyA9IGdldHRleHRfbm9vcCgicmVjb3ZlcnkgaXMgc3RpbGwgd2FpdGlu ZyBmb3IgcmVjb3ZlcnkgY29uZmxpY3Qgb24gbG9jayIpOworCQkJYnJlYWs7CisJCWNhc2Ug UFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9UQUJMRVNQQUNFOgorCQkJcmVhc29uRGVzYyA9 IGdldHRleHRfbm9vcCgicmVjb3ZlcnkgaXMgc3RpbGwgd2FpdGluZyBmb3IgcmVjb3Zlcnkg Y29uZmxpY3Qgb24gdGFibGVzcGFjZSIpOworCQkJYnJlYWs7CisJCWNhc2UgUFJPQ1NJR19S RUNPVkVSWV9DT05GTElDVF9TTkFQU0hPVDoKKwkJCXJlYXNvbkRlc2MgPSBnZXR0ZXh0X25v b3AoInJlY292ZXJ5IGlzIHN0aWxsIHdhaXRpbmcgZm9yIHJlY292ZXJ5IGNvbmZsaWN0IG9u IHNuYXBzaG90Iik7CisJCQlicmVhazsKKwkJY2FzZSBQUk9DU0lHX1JFQ09WRVJZX0NPTkZM SUNUX1NUQVJUVVBfREVBRExPQ0s6CisJCQlyZWFzb25EZXNjID0gZ2V0dGV4dF9ub29wKCJy ZWNvdmVyeSBpcyBzdGlsbCB3YWl0aW5nIGZvciByZWNvdmVyeSBjb25mbGljdCBvbiBidWZm ZXIgZGVhZGxvY2siKTsKKwkJCWJyZWFrOworCQljYXNlIFBST0NTSUdfUkVDT1ZFUllfQ09O RkxJQ1RfREFUQUJBU0U6CisJCQlyZWFzb25EZXNjID0gZ2V0dGV4dF9ub29wKCJyZWNvdmVy eSBpcyBzdGlsbCB3YWl0aW5nIGZvciByZWNvdmVyeSBjb25mbGljdCBvbiBkYXRhYmFzZSIp OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmVh c29uRGVzYzsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9j LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IDg4NTY2YmQ5ZmEu LjI5ODMyMjkwZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9j LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtMTA2Myw4ICsx MDYzLDEwIEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9ja01ldGhvZCBs b2NrTWV0aG9kVGFibGUpCiAJTFdMb2NrCSAgICpwYXJ0aXRpb25Mb2NrID0gTG9ja0hhc2hQ YXJ0aXRpb25Mb2NrKGhhc2hjb2RlKTsKIAlQUk9DX1FVRVVFICp3YWl0UXVldWUgPSAmKGxv Y2stPndhaXRQcm9jcyk7CiAJTE9DS01BU0sJbXlIZWxkTG9ja3MgPSBNeVByb2MtPmhlbGRM b2NrczsKKwlUaW1lc3RhbXBUeiBzdGFuZGJ5V2FpdFN0YXJ0ID0gMDsKIAlib29sCQllYXJs eV9kZWFkbG9jayA9IGZhbHNlOwogCWJvb2wJCWFsbG93X2F1dG92YWN1dW1fY2FuY2VsID0g dHJ1ZTsKKwlib29sICAgICAgICBsb2dnZWRfcmVjb3ZlcnlfY29uZmxpY3QgPSBmYWxzZTsK IAlQcm9jV2FpdFN0YXR1cyBteVdhaXRTdGF0dXM7CiAJUEdQUk9DCSAgICpwcm9jOwogCVBH UFJPQwkgICAqbGVhZGVyID0gTXlQcm9jLT5sb2NrR3JvdXBMZWFkZXI7CkBAIC0xMjYwLDYg KzEyNjIsMTEgQEAgUHJvY1NsZWVwKExPQ0FMTE9DSyAqbG9jYWxsb2NrLCBMb2NrTWV0aG9k IGxvY2tNZXRob2RUYWJsZSkKIAkJZWxzZQogCQkJZW5hYmxlX3RpbWVvdXRfYWZ0ZXIoREVB RExPQ0tfVElNRU9VVCwgRGVhZGxvY2tUaW1lb3V0KTsKIAl9CisJZWxzZSBpZiAobG9nX3Jl Y292ZXJ5X2NvbmZsaWN0X3dhaXRzKQorCXsKKwkJLyogU2V0IHdhaXQgc3RhcnQgdGltZXN0 YW1wIGlmIGxvZ2dpbmcgaXMgZW5hYmxlZCAqLworCQlzdGFuZGJ5V2FpdFN0YXJ0ID0gR2V0 Q3VycmVudFRpbWVzdGFtcCgpOworCX0KIAogCS8qCiAJICogSWYgc29tZWJvZHkgd2FrZXMg dXMgYmV0d2VlbiBMV0xvY2tSZWxlYXNlIGFuZCBXYWl0TGF0Y2gsIHRoZSBsYXRjaApAQCAt MTI4MSw2ICsxMjg4LDMyIEBAIFByb2NTbGVlcChMT0NBTExPQ0sgKmxvY2FsbG9jaywgTG9j a01ldGhvZCBsb2NrTWV0aG9kVGFibGUpCiAJCXsKIAkJCS8qIFNldCBhIHRpbWVyIGFuZCB3 YWl0IGZvciB0aGF0IG9yIGZvciB0aGUgTG9jayB0byBiZSBncmFudGVkICovCiAJCQlSZXNv bHZlUmVjb3ZlcnlDb25mbGljdFdpdGhMb2NrKGxvY2FsbG9jay0+dGFnLmxvY2spOworCisJ CQlpZiAoc3RhbmRieVdhaXRTdGFydCA+IDAgJiYgIWxvZ2dlZF9yZWNvdmVyeV9jb25mbGlj dCkKKwkJCXsKKwkJCQlUaW1lc3RhbXBUeiBjdXJfdHMgPSBHZXRDdXJyZW50VGltZXN0YW1w KCk7OworCQkJCWlmIChUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyhzdGFuZGJ5V2FpdFN0 YXJ0LCBjdXJfdHMsCisJCQkJCQkJCQkJICAgRGVhZGxvY2tUaW1lb3V0KSkKKwkJCQl7CisJ CQkJCVZpcnR1YWxUcmFuc2FjdGlvbklkICp2eGlkczsKKwkJCQkJaW50CWNudDsKKworCQkJ CQlBc3NlcnQobG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzKTsKKwkJCQkJdnhpZHMgPQlH ZXRMb2NrQ29uZmxpY3RzKCZsb2NhbGxvY2stPnRhZy5sb2NrLAorCQkJCQkJCQkJCQkgQWNj ZXNzRXhjbHVzaXZlTG9jaywgJmNudCk7CisKKwkJCQkJLyoKKwkJCQkJICogTG9nIHRoZSBy ZWNvdmVyeSBjb25mbGljdCBpZiB0aGVyZSBpcyBzdGlsbCB2aXJ0dWFsIHRyYW5zYWN0aW9u CisJCQkJCSAqIGNvbmZsaWN0aW5nIHdpdGggdGhlIGxvY2suCisJCQkJCSAqLworCQkJCQlp ZiAoY250ID4gMCkKKwkJCQkJeworCQkJCQkJTG9nUmVjb3ZlcnlDb25mbGljdChQUk9DU0lH X1JFQ09WRVJZX0NPTkZMSUNUX0xPQ0ssCisJCQkJCQkJCQkJCXN0YW5kYnlXYWl0U3RhcnQs IGN1cl90cywgdnhpZHMpOworCQkJCQkJbG9nZ2VkX3JlY292ZXJ5X2NvbmZsaWN0ID0gdHJ1 ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KIAkJfQogCQllbHNlCiAJCXsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Yy5jCmluZGV4IDU5NmJjYjdiODQuLmU1NWEyOGIxY2QgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9n dWMuYwpAQCAtMTU3MCw3ICsxNTcwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2Jvb2wg Q29uZmlndXJlTmFtZXNCb29sW10gPQogCQlmYWxzZSwKIAkJTlVMTCwgTlVMTCwgTlVMTAog CX0sCi0KKwl7CisJCXsibG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzIiwgUEdDX1NJR0hV UCwgTE9HR0lOR19XSEFULAorCQkJZ2V0dGV4dF9ub29wKCJMb2dzIHN0YW5kYnkgcmVjb3Zl cnkgY29uZmxpY3Qgd2FpdHMuIiksCisJCQlOVUxMCisJCX0sCisJCSZsb2dfcmVjb3Zlcnlf Y29uZmxpY3Rfd2FpdHMsCisJCWZhbHNlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKIAl7 CiAJCXsibG9nX2hvc3RuYW1lIiwgUEdDX1NJR0hVUCwgTE9HR0lOR19XSEFULAogCQkJZ2V0 dGV4dF9ub29wKCJMb2dzIHRoZSBob3N0IG5hbWUgaW4gdGhlIGNvbm5lY3Rpb24gbG9ncy4i KSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25m LnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQppbmRleCA5Y2I1NzFmN2NjLi41NjI1NjgxZThhIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC01NTMsNiArNTUzLDggQEAK IAkJCQkJIyAgICUlID0gJyUnCiAJCQkJCSMgZS5nLiAnPCV1JSUlZD4gJwogI2xvZ19sb2Nr X3dhaXRzID0gb2ZmCQkJIyBsb2cgbG9jayB3YWl0cyA+PSBkZWFkbG9ja190aW1lb3V0Cisj bG9nX3JlY292ZXJ5X2NvbmZsaWN0X3dhaXRzID0gb2ZmCSMgbG9nIHN0YW5kYnkgcmVjb3Zl cnkgY29uZmxpY3Qgd2FpdHMKKwkJCQkJIyA+PSBkZWFkbG9ja190aW1lb3V0CiAjbG9nX3Bh cmFtZXRlcl9tYXhfbGVuZ3RoID0gLTEJCSMgd2hlbiBsb2dnaW5nIHN0YXRlbWVudHMsIGxp bWl0IGxvZ2dlZAogCQkJCQkjIGJpbmQtcGFyYW1ldGVyIHZhbHVlcyB0byBOIGJ5dGVzOwog CQkJCQkjIC0xIG1lYW5zIHByaW50IGluIGZ1bGwsIDAgZGlzYWJsZXMKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9z dGFuZGJ5LmgKaW5kZXggZmFhZjFkMzgxNy4uYWY2N2RkMDZmMSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9z dGFuZGJ5LmgKQEAgLTIzLDYgKzIzLDcgQEAKIGV4dGVybiBpbnQJdmFjdXVtX2RlZmVyX2Ns ZWFudXBfYWdlOwogZXh0ZXJuIGludAltYXhfc3RhbmRieV9hcmNoaXZlX2RlbGF5OwogZXh0 ZXJuIGludAltYXhfc3RhbmRieV9zdHJlYW1pbmdfZGVsYXk7CitleHRlcm4gYm9vbAlsb2df cmVjb3ZlcnlfY29uZmxpY3Rfd2FpdHM7CiAKIGV4dGVybiB2b2lkIEluaXRSZWNvdmVyeVRy YW5zYWN0aW9uRW52aXJvbm1lbnQodm9pZCk7CiBleHRlcm4gdm9pZCBTaHV0ZG93blJlY292 ZXJ5VHJhbnNhY3Rpb25FbnZpcm9ubWVudCh2b2lkKTsKQEAgLTM4LDYgKzM5LDggQEAgZXh0 ZXJuIHZvaWQgQ2hlY2tSZWNvdmVyeUNvbmZsaWN0RGVhZGxvY2sodm9pZCk7CiBleHRlcm4g dm9pZCBTdGFuZGJ5RGVhZExvY2tIYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRi eVRpbWVvdXRIYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhbmRieUxvY2tUaW1lb3V0 SGFuZGxlcih2b2lkKTsKK2V4dGVybiB2b2lkIExvZ1JlY292ZXJ5Q29uZmxpY3QoUHJvY1Np Z25hbFJlYXNvbiByZWFzb24sIFRpbWVzdGFtcFR6IHdhaXRTdGFydCwKKwkJCQkJCQkJVGlt ZXN0YW1wVHogY3VyX3RzLCBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqd2FpdGxpc3QpOwogCiAv KgogICogU3RhbmRieSBSbWdyIChSTV9TVEFOREJZX0lEKQo= --------------27D0C0AC3C78ADABE09D41ED--