Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vsd5C-00AkMp-1I for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 08:38:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vsd5B-00Ewy2-1c for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Feb 2026 08:38:53 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vsd5B-00Ewxt-0U for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 08:38:53 +0000 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vsd59-00000001Kgc-0OjP for pgsql-hackers@lists.postgresql.org; Wed, 18 Feb 2026 08:38:53 +0000 Received: by mail-lj1-x233.google.com with SMTP id 38308e7fff4ca-3870778358aso41060371fa.1 for ; Wed, 18 Feb 2026 00:38:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771403925; cv=none; d=google.com; s=arc-20240605; b=f/JcAqkeD5R466CmswRvgVIKh8Ckx75/h3odfty6zn7TcbFgK361Q1+CuTelHxpq7E DoJm4B6L/ddDRn7TmwGsJwZRujBadvVfgno9s9edE8yzTZY1Wwl3ZxIrtDVFoiMqZOYQ KJmrmXvRXcLdDCxhUq3cCOx12Qte00s/7QZmri2gUxIPiKp31+KoRBCn2UPlCZRR8xG5 6hAXyZgWO/VpSMLWkG37hHgPKxxyOCmOU/duKphUBzIY5Xg+jXY4lbaQSsy0HV1CYABN MXz0PB9Tf97fDUIe/yMYAzvuRl0bvrgrN9/c/NbqXcqBk3R3edFgo9NiSDlRcC3X24ob Sk5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=ImYuOmgyzji1PidN4VhljWesTvW0sheIRe0JaoJFugs=; fh=JDKGYPGwiO3VNeWUJ39jkMxyWE8yt2cwuZq/p6PDHsw=; b=XY2lt6J7IK2UfgohExGMttfh6AUAH9Qhi/1jPy/AP8kzdQgHP7sokDlMdmh0gSRVfY zVFDg/7zHh+b3l8ojgyLnD/Ve7wyB5b1EASh8/19SAwgSzo72XiHWoIXitjMycMfegk5 v16vPNIOfYV4GboilITuqbWUaEwT2OnHueMEnhC5JIJe/deHAoR/liDw1rlFwWWfHIgX VHKUkxUpPwDGktGAwdF6D4OltWjzQm42lcRP1RLOGCRo25ZPTbf2SelicbQb19GqcCCs eCxabt+0eD26DcZZmXK9DifAsj9ILeqgCFNkjpYQQ2QZGQiLd+UPsmLhMcj4StKuTd7l 0T+Q==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771403925; x=1772008725; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ImYuOmgyzji1PidN4VhljWesTvW0sheIRe0JaoJFugs=; b=kvPEqs57/7mNgNct3pcyH9YqlEJs9zJLOEp8WDwIOzNvDdhGtB2WxE+kQnnOeZ2KHU zlBXqsMde6CPuwKc1VqO9MnthSsLXFoTOU49BZXxAGLG/O2sguUVA4GlXPX3TyTp8i26 KeNjCayYylvKhJ8mXJgoAThVq2CFO0n+ymg5uoYfyLo7hi5pSYxjQQ04L3hb+zLuqrGE z3dFNEUNI4d4rHM7+CGjQrpOcOCmbJT6kgw7fxCMqtKVhQFKbhTKGzpCXn+kLOAD6aSx vUYvU3P0UEytGvunlX0/poxkbImLwYhDJ66P0onSnznh2XfV/S2451Nq1Lzqo6zxSJbf MyhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771403925; x=1772008725; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ImYuOmgyzji1PidN4VhljWesTvW0sheIRe0JaoJFugs=; b=vI0GpXUrSj9pHPCuZeMNVX66vXjIcd/FU5n4U36h9E/pvMNrueYiFPXx+12fyDOqSc G7vSjLH3rUfVPQom2BWY/tTn4nJuzH1bXl2b/jF6ZX94N5pxwMTsF0fU55tk7yBS1in4 PxHJQC3yr3xm54KO7JgcQb0gYkHxTL5jc9ZH4oEagrz6XoPzl8jGG0wrbmH7HEz4vbWT 8mzJskWyGFVhfr9q9/xxB1T3mz+9kdTV03dz5KJaOoZD+op+6Ywb2QM3tBZhWYOICxW8 utZ09VsfRCOxmyOlBB/9YIXmzpYLJ96DNfD0MQGOmnQ1KuogkVqzjGWMn7EmvVICM8c5 6NOw== X-Forwarded-Encrypted: i=1; AJvYcCWypK1frz8/LFnM9DLmC85/UKgPLA9cKOpoYipyIDU5t8oXF9/mxcEgN8+J2qZvo5qJ2e0rXPDGHX1zT2YU@lists.postgresql.org X-Gm-Message-State: AOJu0YxnXlajBXd8nsyWs+y+HbCb9dGZX0cORrFCpv7OFS6wgHYwPiUp jyf/AVemcrVB214siJkLozBiF3DCqizgMzcKiIP9d9r6bD+V0BJBqg3xJ/8OFcTvPrGDtOVYHUv XX6t9kxboi56Aasy93LeEFQBQucXe/k8= X-Gm-Gg: AZuq6aJ4La/VEvt3FmnDsjy6Jn2zwLaLbvaq9WP9GuxZ7OZlQSDq1HBgiE/HWXRVZf1 a9R1g5p7lCkZUwV+LSxJju+C+uG4dRNaBPS+54Qhf/ldHuvUddTiQSWlJn37OfjI7pyWNWnDr2r Gb567PeMYTJsm7Kpqh6+dPqlR3WdFpf1sDegzITJYgjxWw6BGM+QidSWiZbNgBn0BHI6WbQotw0 6etV2VCUHltSqv5pNz97ESTytR8zliXe5O6ztRdhgcMSjSwVNxDe/xGhyFY1gpNK2wkFOMIeBpO yA8SV8+CDa9svQ+dk1Wgp+kMx188Wgi2AI6Zniz0MOmw1+/dhH7G X-Received: by 2002:a05:651c:2104:b0:387:6d8:8d61 with SMTP id 38308e7fff4ca-3881050d8f8mr44916711fa.10.1771403924385; Wed, 18 Feb 2026 00:38:44 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Ajit Awekar Date: Wed, 18 Feb 2026 14:08:32 +0530 X-Gm-Features: AaiRm53MC-54OpKnQPEhg19shADwqbogmEu4ZaAY2Fle6bRNdyCRncHXSnOJcS0 Message-ID: Subject: Re: [OAuth2] Infrastructure for tracking token expiry time To: VASUKI M Cc: Zsolt Parragi , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000aad1c4064b151da1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000aad1c4064b151da1 Content-Type: multipart/alternative; boundary="000000000000aad1c3064b151d9f" --000000000000aad1c3064b151d9f Content-Type: text/plain; charset="UTF-8" Hi Vasuki, Zsolt Thanks a lot for your review comments and reply.I have updated the patch and below is summary of changes 1. Adding a check_oauth_expiry() function called during command execution to verify token validity 2. Terminating sessions with expired/revoked tokens before executing new commands. 3. Supporting callback-based revocation checks I have added a unit test case to validate that sessions are properly terminated when their OAuth tokens expire. Request a review. Thanks & Best Regards, Ajit On Tue, 17 Feb 2026 at 16:17, VASUKI M wrote: > Hi All, > > I see the concern about keeping the validator API generic and not > implicitly favoring JWT-style providers. > The callback-based approach does seem more flexible, especially for opaque > tokens or providers supporting revocation, where validity cannot be > represented as a fixed timestamp. > Perhaps one possible direction could be to support both: > > An optional expiry timestamp for simple/static cases. > > An optional callback (e.g., expired_cb) for dynamic validation. > > This would allow JWT-based validators to remain lightweight while enabling > more complex providers to implement custom revalidation logic. > If enforcement is planned at statement start, integrating the callback > mechanism in the same patch might also clarify the intended semantics. > > Best regards, > Vasuki M > C-DAC,Chennai > --000000000000aad1c3064b151d9f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi=C2=A0Vasuki, Zsolt=C2=A0

Thanks a lo= t for your review comments and reply.I have updated the patch and below is = summary of changes
  1. Adding a check_oauth_expiry() function= called during command execution to verify token validity
  2. Terminati= ng sessions with expired/revoked tokens before executing new commands.
  3. =
  4. Supporting=C2=A0 callback-based revocation checks
<= br>
I have added a unit test case to validate that sessions are p= roperly terminated when their OAuth tokens expire.

Request a review.

Thanks & Best=C2=A0Regards,=
Ajit


On Tue, 17 Feb 20= 26 at 16:17, VASUKI M <vasu= kianand0119@gmail.com> wrote:
Hi All,

I see the concern abou= t keeping the validator API generic and not implicitly favoring JWT-style p= roviders.
The callback-based approach does seem more flexible, especiall= y for opaque tokens or providers supporting revocation, where validity cann= ot be represented as a fixed timestamp.
Perhaps one possible direction c= ould be to support both:

An optional expiry timestamp for simple/sta= tic cases.

An optional callback (e.g., expired_cb) for dynamic valid= ation.

This would allow JWT-based validators to remain lightweight w= hile enabling more complex providers to implement custom revalidation logic= .
If enforcement is planned at statement start, integrating the callback= mechanism in the same patch might also clarify the intended semantics.
=
Best regards,
Vasuki M
C-DAC,Chennai
--000000000000aad1c3064b151d9f-- --000000000000aad1c4064b151da1 Content-Type: application/octet-stream; name="password_expiry_oauth_V2.patch" Content-Disposition: attachment; filename="password_expiry_oauth_V2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mlrs3ieh0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYyBiL3NyYy9iYWNrZW5k L2xpYnBxL2F1dGgtb2F1dGguYwppbmRleCAxMTM2NTA0ODk1MS4uNmU2ODRlOWJkMGQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtb2F1dGguYworKysgYi9zcmMvYmFja2VuZC9s aWJwcS9hdXRoLW9hdXRoLmMKQEAgLTY4NCw2ICs2ODQsMTMgQEAgdmFsaWRhdGUoUG9ydCAqcG9y dCwgY29uc3QgY2hhciAqYXV0aCkKIAkJZ290byBjbGVhbnVwOwogCX0KIAorCS8qCisJICogU3Rv cmUgdGhlIHZhbGlkYXRvcidzIGV4cGlyYXRpb24gY2FsbGJhY2sgYW5kIHRpbWVzdGFtcCBpbiB0 aGUgUG9ydAorCSAqIHN0cnVjdHVyZSB0byBhbGxvdyBmb3Igc2Vzc2lvbi13aWRlIHZhbGlkaXR5 IGVuZm9yY2VtZW50LgorCSAqLworCXBvcnQtPmV4cGlyZWRfY2IgPSByZXQtPmV4cGlyZWRfY2I7 CisJcG9ydC0+ZXhwaXJ5ID0gcmV0LT5leHBpcnk7CisKIAlpZiAocG9ydC0+aGJhLT5vYXV0aF9z a2lwX3VzZXJtYXApCiAJewogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvcHFj b21tLmMgYi9zcmMvYmFja2VuZC9saWJwcS9wcWNvbW0uYwppbmRleCA2NTcwZjI3Mjk3Yi4uOWYx YmUwN2JmNjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jCkBAIC0zMTksNiArMzE5LDEyIEBAIHBxX2luaXQoQ2xp ZW50U29ja2V0ICpjbGllbnRfc29jaykKIAlBc3NlcnQoc29ja2V0X3BvcyA9PSBGZUJlV2FpdFNl dFNvY2tldFBvcyk7CiAJQXNzZXJ0KGxhdGNoX3BvcyA9PSBGZUJlV2FpdFNldExhdGNoUG9zKTsK IAorCS8qCisJICogSW5pdGlhbGl6ZSBPQXV0aCBzZXNzaW9uIGZpZWxkcyB0byBzYWZlIGRlZmF1 bHRzIChubyBleHBpcnkvbm8gY2FsbGJhY2spLgorCSAqLworCXBvcnQtPmV4cGlyeSA9IERUX05P QkVHSU47CisJcG9ydC0+ZXhwaXJlZF9jYiA9IE5VTEw7CisKIAlyZXR1cm4gcG9ydDsKIH0KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jCmluZGV4IDIxZGUxNThhZGJiLi4yOTE4MTBmNGM1OSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwpAQCAtMTg1LDcgKzE4NSw3IEBAIHN0YXRpYyB2b2lkIHJlcG9ydF9yZWNvdmVyeV9jb25m bGljdChSZWNvdmVyeUNvbmZsaWN0UmVhc29uIHJlYXNvbik7CiBzdGF0aWMgdm9pZCBsb2dfZGlz Y29ubmVjdGlvbnMoaW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBlbmFibGVfc3Rh dGVtZW50X3RpbWVvdXQodm9pZCk7CiBzdGF0aWMgdm9pZCBkaXNhYmxlX3N0YXRlbWVudF90aW1l b3V0KHZvaWQpOwotCitzdGF0aWMgdm9pZCBjaGVja19vYXV0aF9leHBpcnkoUG9ydCAqcG9ydCk7 CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqCQlpbmZyYXN0cnVjdHVyZSBmb3IgdmFsZ3JpbmQgZGVidWdnaW5n CkBAIC0xMDQ5LDYgKzEwNDksMTMgQEAgZXhlY19zaW1wbGVfcXVlcnkoY29uc3QgY2hhciAqcXVl cnlfc3RyaW5nKQogCSAqLwogCXN0YXJ0X3hhY3RfY29tbWFuZCgpOwogCisJLyoKKwkgKiBJZiB0 aGUgY3VycmVudCBzZXNzaW9uIHdhcyBhdXRoZW50aWNhdGVkIHZpYSBPQXV0aCwgdmVyaWZ5IHRo YXQgdGhlCisJICogdG9rZW4gaGFzIG5vdCBleHBpcmVkIG9yIGJlZW4gcmV2b2tlZCBiZWZvcmUg ZXhlY3V0aW5nIHRoZSBxdWVyeS4KKwkgKi8KKwlpZiAoTXlDbGllbnRDb25uZWN0aW9uSW5mby5h dXRoX21ldGhvZCA9PSB1YU9BdXRoKQorCQljaGVja19vYXV0aF9leHBpcnkoTXlQcm9jUG9ydCk7 CisKIAkvKgogCSAqIFphcCBhbnkgcHJlLWV4aXN0aW5nIHVubmFtZWQgc3RhdGVtZW50LiAgKFdo aWxlIG5vdCBzdHJpY3RseSBuZWNlc3NhcnksCiAJICogaXQgc2VlbXMgYmVzdCB0byBkZWZpbmUg c2ltcGxlLVF1ZXJ5IG1vZGUgYXMgaWYgaXQgdXNlZCB0aGUgdW5uYW1lZApAQCAtMTQzMCw2ICsx NDM3LDEzIEBAIGV4ZWNfcGFyc2VfbWVzc2FnZShjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCS8q IHN0cmluZyB0byBleGVjdXRlICovCiAJICovCiAJc3RhcnRfeGFjdF9jb21tYW5kKCk7CiAKKwkv KgorCSAqIElmIHRoZSBjdXJyZW50IHNlc3Npb24gd2FzIGF1dGhlbnRpY2F0ZWQgdmlhIE9BdXRo LCB2ZXJpZnkgdGhhdCB0aGUKKwkgKiB0b2tlbiBoYXMgbm90IGV4cGlyZWQgb3IgYmVlbiByZXZv a2VkIGJlZm9yZSBleGVjdXRpbmcgdGhlIHF1ZXJ5LgorCSAqLworCWlmIChNeUNsaWVudENvbm5l Y3Rpb25JbmZvLmF1dGhfbWV0aG9kID09IHVhT0F1dGgpCisJCWNoZWNrX29hdXRoX2V4cGlyeShN eVByb2NQb3J0KTsKKwogCS8qCiAJICogU3dpdGNoIHRvIGFwcHJvcHJpYXRlIGNvbnRleHQgZm9y IGNvbnN0cnVjdGluZyBwYXJzZXRyZWVzLgogCSAqCkBAIC0xNzA1LDYgKzE3MTksMTMgQEAgZXhl Y19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCSAqLwogCXN0YXJ0X3hh Y3RfY29tbWFuZCgpOwogCisJLyoKKwkgKiBJZiB0aGUgY3VycmVudCBzZXNzaW9uIHdhcyBhdXRo ZW50aWNhdGVkIHZpYSBPQXV0aCwgdmVyaWZ5IHRoYXQgdGhlCisJICogdG9rZW4gaGFzIG5vdCBl eHBpcmVkIG9yIGJlZW4gcmV2b2tlZCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBxdWVyeS4KKwkgKi8K KwlpZiAoTXlDbGllbnRDb25uZWN0aW9uSW5mby5hdXRoX21ldGhvZCA9PSB1YU9BdXRoKQorCQlj aGVja19vYXV0aF9leHBpcnkoTXlQcm9jUG9ydCk7CisKIAkvKiBTd2l0Y2ggYmFjayB0byBtZXNz YWdlIGNvbnRleHQgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8oTWVzc2FnZUNvbnRleHQpOwog CkBAIC0yMjE3LDYgKzIyMzgsMTMgQEAgZXhlY19leGVjdXRlX21lc3NhZ2UoY29uc3QgY2hhciAq cG9ydGFsX25hbWUsIGxvbmcgbWF4X3Jvd3MpCiAJICovCiAJc3RhcnRfeGFjdF9jb21tYW5kKCk7 CiAKKwkvKgorCSAqIElmIHRoZSBjdXJyZW50IHNlc3Npb24gd2FzIGF1dGhlbnRpY2F0ZWQgdmlh IE9BdXRoLCB2ZXJpZnkgdGhhdCB0aGUKKwkgKiB0b2tlbiBoYXMgbm90IGV4cGlyZWQgb3IgYmVl biByZXZva2VkIGJlZm9yZSBleGVjdXRpbmcgdGhlIHF1ZXJ5LgorCSAqLworCWlmIChNeUNsaWVu dENvbm5lY3Rpb25JbmZvLmF1dGhfbWV0aG9kID09IHVhT0F1dGgpCisJCWNoZWNrX29hdXRoX2V4 cGlyeShNeVByb2NQb3J0KTsKKwogCS8qCiAJICogSWYgd2UgcmUtaXNzdWUgYW4gRXhlY3V0ZSBw cm90b2NvbCByZXF1ZXN0IGFnYWluc3QgYW4gZXhpc3RpbmcgcG9ydGFsLAogCSAqIHRoZW4gd2Ug YXJlIG9ubHkgZmV0Y2hpbmcgbW9yZSByb3dzIHJhdGhlciB0aGFuIGNvbXBsZXRlbHkgcmUtZXhl Y3V0aW5nCkBAIC0yNjM1LDYgKzI2NjMsMTMgQEAgZXhlY19kZXNjcmliZV9zdGF0ZW1lbnRfbWVz c2FnZShjb25zdCBjaGFyICpzdG10X25hbWUpCiAJICovCiAJc3RhcnRfeGFjdF9jb21tYW5kKCk7 CiAKKwkvKgorCSAqIElmIHRoZSBjdXJyZW50IHNlc3Npb24gd2FzIGF1dGhlbnRpY2F0ZWQgdmlh IE9BdXRoLCB2ZXJpZnkgdGhhdCB0aGUKKwkgKiB0b2tlbiBoYXMgbm90IGV4cGlyZWQgb3IgYmVl biByZXZva2VkIGJlZm9yZSBleGVjdXRpbmcgdGhlIHF1ZXJ5LgorCSAqLworCWlmIChNeUNsaWVu dENvbm5lY3Rpb25JbmZvLmF1dGhfbWV0aG9kID09IHVhT0F1dGgpCisJCWNoZWNrX29hdXRoX2V4 cGlyeShNeVByb2NQb3J0KTsKKwogCS8qIFN3aXRjaCBiYWNrIHRvIG1lc3NhZ2UgY29udGV4dCAq LwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhNZXNzYWdlQ29udGV4dCk7CiAKQEAgLTI3MjcsNiAr Mjc2MiwxMyBAQCBleGVjX2Rlc2NyaWJlX3BvcnRhbF9tZXNzYWdlKGNvbnN0IGNoYXIgKnBvcnRh bF9uYW1lKQogCSAqLwogCXN0YXJ0X3hhY3RfY29tbWFuZCgpOwogCisJLyoKKwkgKiBJZiB0aGUg Y3VycmVudCBzZXNzaW9uIHdhcyBhdXRoZW50aWNhdGVkIHZpYSBPQXV0aCwgdmVyaWZ5IHRoYXQg dGhlCisJICogdG9rZW4gaGFzIG5vdCBleHBpcmVkIG9yIGJlZW4gcmV2b2tlZCBiZWZvcmUgZXhl Y3V0aW5nIHRoZSBxdWVyeS4KKwkgKi8KKwlpZiAoTXlDbGllbnRDb25uZWN0aW9uSW5mby5hdXRo X21ldGhvZCA9PSB1YU9BdXRoKQorCQljaGVja19vYXV0aF9leHBpcnkoTXlQcm9jUG9ydCk7CisK IAkvKiBTd2l0Y2ggYmFjayB0byBtZXNzYWdlIGNvbnRleHQgKi8KIAlNZW1vcnlDb250ZXh0U3dp dGNoVG8oTWVzc2FnZUNvbnRleHQpOwogCkBAIC01MjcxLDMgKzUzMTMsMTkgQEAgZGlzYWJsZV9z dGF0ZW1lbnRfdGltZW91dCh2b2lkKQogCWlmIChnZXRfdGltZW91dF9hY3RpdmUoU1RBVEVNRU5U X1RJTUVPVVQpKQogCQlkaXNhYmxlX3RpbWVvdXQoU1RBVEVNRU5UX1RJTUVPVVQsIGZhbHNlKTsK IH0KKworLyoKKyAqIFZhbGlkYXRlcyB0aGUgY3VycmVudCBPQXV0aCBzZXNzaW9uLiBJZiBhIHZh bGlkYXRvciBoYXMgcHJvdmlkZWQgYQorICogY2FsbGJhY2ssIGV4ZWN1dGUgaXQuIEEgcmV0dXJu IHZhbHVlIG9mICd0cnVlJyB0cmlnZ2VycyBhIEZBVEFMCisgKiBlcnJvciB0byB0ZXJtaW5hdGUg dGhlIHNlc3Npb24gaW1tZWRpYXRlbHkuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19vYXV0aF9l eHBpcnkoUG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+ZXhwaXJlZF9jYiAhPSBOVUxMICYmIHBv cnQtPmV4cGlyZWRfY2IocG9ydC0+ZXhwaXJ5KSkKKwl7CisJCWVyZXBvcnQoRkFUQUwsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0FVVEhPUklaQVRJT05fU1BFQ0lGSUNBVElPTiksCisJ CQkJIGVycm1zZygic2Vzc2lvbiBleHBpcmVkOiBPQXV0aCB0b2tlbiBpcyBubyBsb25nZXIgdmFs aWQiKSkpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgg Yi9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oCmluZGV4IDkyMWIyZGFhNGZmLi4zODhlM2U4 ZDhiYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaAorKysgYi9zcmMv aW5jbHVkZS9saWJwcS9saWJwcS1iZS5oCkBAIC0yMzgsNiArMjM4LDE2IEBAIHR5cGVkZWYgc3Ry dWN0IFBvcnQKIAljaGFyCSAgICpyYXdfYnVmOwogCXNzaXplX3QJCXJhd19idWZfY29uc3VtZWQs CiAJCQkJcmF3X2J1Zl9yZW1haW5pbmc7CisKKwkvKgorCSAqIFRoZSBleHBpcmF0aW9uIHRpbWUg b2YgdGhlIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWwuCisJICogSWYgbm90IGl0IHJlcHJlc2Vu dHMgdGhlIHBvaW50IGluIHRpbWUgYWZ0ZXIgd2hpY2ggdGhlIGN1cnJlbnQgc2Vzc2lvbiBpcwor CSAqIGNvbnNpZGVyZWQgaW52YWxpZC4KKwkgKi8KKwlUaW1lc3RhbXBUeiBleHBpcnk7CisKKwkv KiBDYWxsYmFjayB0byB2ZXJpZnkgc2Vzc2lvbiB2YWxpZGl0eSBhdCBydW50aW1lICovCisJYm9v bCAoKmV4cGlyZWRfY2IpIChUaW1lc3RhbXBUeik7CiB9IFBvcnQ7CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9saWJwcS9vYXV0aC5oIGIvc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaApp bmRleCA0YTgyMmU5YTFmMi4uYzFkMjc4NTkwZTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xp YnBxL29hdXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvbGlicHEvb2F1dGguaApAQCAtNDksNiArNDks MjIgQEAgdHlwZWRlZiBzdHJ1Y3QgVmFsaWRhdG9yTW9kdWxlUmVzdWx0CiAJICogZGVsZWdhdGlv bi4gU2VlIHRoZSB2YWxpZGF0b3IgbW9kdWxlIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCiAJ ICovCiAJY2hhcgkgICAqYXV0aG5faWQ7CisKKwkvKgorCSAqIE9wdGlvbmFsIGNhbGxiYWNrIHRv IGNoZWNrIGlmIHRoZSBzZXNzaW9uIGlzIHN0aWxsIHZhbGlkLgorCSAqIFJldHVybnMgdHJ1ZSBp ZiB0aGUgdG9rZW4gaXMgZXhwaXJlZC9yZXZva2VkLCBmYWxzZSBvdGhlcndpc2UuCisJICogSWYg TlVMTCwgdGhlIGJhY2tlbmQgYXNzdW1lcyB0aGUgc2Vzc2lvbiBuZXZlciBleHBpcmVzLgorCSAq IElmIHByb3ZpZGVkLCB0aGUgdmFsaWRhdG9yIGNhbiB1c2UgdGhpcyB0byBsaW1pdCBzZXNzaW9u IGR1cmF0aW9uIGJhc2VkIG9uCisJICogcGFyYW1ldGVyIHZhbHVlIG9yIGJhc2VkIG9uIGl0J3Mg Y3VzdG9tIGxvZ2ljLgorCSAqLworCWJvb2wgKCpleHBpcmVkX2NiKSAoVGltZXN0YW1wVHogZXhw aXJ5KTsKKworCS8qCisJICogVGhlIGV4cGlyYXRpb24gdGltZSBvZiB0aGUgdG9rZW4gKGUuZy4s IGZyb20gdGhlICdleHAnIGNsYWltKSBpZgorCSAqIHByb3ZpZGVkLiBUaGlzIHZhbHVlIGlzIHBh c3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZXhwaXJlZF9jYiBmdW5jdGlvbgorCSAqIGFib3Zl IHRvIGRldGVybWluZSBpZiB0aGUgc2Vzc2lvbiBzaG91bGQgdGVybWluYXRlLgorCSAqLworCVRp bWVzdGFtcFR6IGV4cGlyeTsKIH0gVmFsaWRhdG9yTW9kdWxlUmVzdWx0OwogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDNfdG9rZW5fZXhwaXJ5 LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDNfdG9rZW5fZXhwaXJ5 LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwLi5lYzgxYzI0OGQ3MAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAz X3Rva2VuX2V4cGlyeS5wbApAQCAtMCwwICsxLDE0OCBAQAorIworIyBUZXN0IE9BdXRoIHRva2Vu IGV4cGlyYXRpb24gaW1wbGVtZW50YXRpb24KKyMgVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgd2hl biBhbiBPQXV0aCB0b2tlbiBleHBpcmVzIG9yIHRoZSB2YWxpZGF0b3IgY2FsbGJhY2sKKyMgaW5k aWNhdGVzIGl0IGhhcyBiZWVuIHJldm9rZWQsIHRoZSBzZXNzaW9uIGlzIHByb3Blcmx5IHRlcm1p bmF0ZWQuCisjCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSlNPTjo6UFAgcXco ZW5jb2RlX2pzb24pOwordXNlIE1JTUU6OkJhc2U2NCBxdyhlbmNvZGVfYmFzZTY0KTsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwor dXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmluZEJpbjsKK3VzZSBsaWIgJEZpbmRCaW46OlJlYWxCaW47 Cit1c2UgT0F1dGg6OlNlcnZlcjsKKworIyBTa2lwIHRlc3RzIGlmIGVudmlyb25tZW50IGRvZXNu J3Qgc3VwcG9ydCB0aGVtCitpZiAoISRFTlZ7UEdfVEVTVF9FWFRSQX0gfHwgJEVOVntQR19URVNU X0VYVFJBfSAhfiAvXGJvYXV0aFxiLykKK3sKKwlwbGFuIHNraXBfYWxsID0+CisJICAnUG90ZW50 aWFsbHkgdW5zYWZlIHRlc3Qgb2F1dGggbm90IGVuYWJsZWQgaW4gUEdfVEVTVF9FWFRSQSc7Cit9 CisKK3VubGVzcyAoY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5lIEhBVkVfU1lTX0VWRU5UX0ggMSIp CisJb3IgY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5lIEhBVkVfU1lTX0VQT0xMX0ggMSIpKQorewor CXBsYW4gc2tpcF9hbGwgPT4KKwkgICdPQXV0aCBzZXJ2ZXItc2lkZSB0ZXN0cyBhcmUgbm90IHN1 cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtJzsKK30KKworaWYgKCRFTlZ7d2l0aF9saWJjdXJsfSBu ZSAneWVzJykKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdjbGllbnQtc2lkZSBPQXV0aCBub3Qgc3Vw cG9ydGVkIGJ5IHRoaXMgYnVpbGQnOworfQorCitpZiAoJEVOVnt3aXRoX3B5dGhvbn0gbmUgJ3ll cycpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnT0F1dGggdGVzdHMgcmVxdWlyZSAtLXdpdGgtcHl0 aG9uIHRvIHJ1bic7Cit9CisKKyMgVGhpcyB0ZXN0IHZhbGlkYXRlcyB0aGF0IHRoZSBPQXV0aCB0 b2tlbiBleHBpcmF0aW9uIG1lY2hhbmlzbQorIyBpcyBwcm9wZXJseSBpbXBsZW1lbnRlZCBieSBl eGFtaW5pbmcgbG9nIGVudHJpZXMuCisjIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRl c3QgZXhlY3V0aW9uCisjIFVzZSB0aGUgZGVmYXVsdCBhZG1pbiB1c2VyIGZyb20gdGhlIHRlc3Qg ZW52aXJvbm1lbnQKKyMgVGhpcyBpcyB0eXBpY2FsbHkgZGV0ZXJtaW5lZCBieSB0aGUgUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3RlciBtb2R1bGUKKworcGxhbiB0ZXN0cyA9PiA0OworCisjIENyZWF0 ZSBhIFBvc3RncmVTUUwgaW5zdGFuY2UgZm9yIHRlc3RpbmcKK215ICRub2RlID0gUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdvYXV0aF9leHBpcnknKTsKKyRub2RlLT5pbml0OworJG5v ZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAibG9nX2Nvbm5lY3Rpb25zID0gb24i KTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19kaXNjb25uZWN0 aW9ucyA9IG9uIik7Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICJvYXV0 aF92YWxpZGF0b3JfbGlicmFyaWVzID0gJ3ZhbGlkYXRvcidcbiIpOworJG5vZGUtPnN0YXJ0Owor CisjIENyZWF0ZSB0ZXN0IHVzZXJzCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVB VEUgVVNFUiB0ZXN0OycpOworCisjIFN0YXJ0IHRoZSBtb2NrIE9BdXRoIHNlcnZlcgorbXkgJHdl YnNlcnZlciA9IE9BdXRoOjpTZXJ2ZXItPm5ldygpOworJHdlYnNlcnZlci0+cnVuKCk7CisKK0VO RAoreworCW15ICRleGl0X2NvZGUgPSAkPzsKKwkkd2Vic2VydmVyLT5zdG9wKCkgaWYgZGVmaW5l ZCAkd2Vic2VydmVyOworCSQ/ID0gJGV4aXRfY29kZTsKK30KKworbXkgJHBvcnQgPSAkd2Vic2Vy dmVyLT5wb3J0KCk7CitteSAkaXNzdWVyID0gImh0dHA6Ly8xMjcuMC4wLjE6JHBvcnQiOworCisj IENvbmZpZ3VyZSBIQkEgZm9yIE9BdXRoIGF1dGhlbnRpY2F0aW9uCit1bmxpbmsoJG5vZGUtPmRh dGFfZGlyIC4gJy9wZ19oYmEuY29uZicpOworIyBGaXJzdCwgYWRkIGEgc3BlY2lmaWMgcnVsZSBm b3IgdGhlIHRlc3QgdXNlciB3aXRoIE9BdXRoIGF1dGhlbnRpY2F0aW9uCiskbm9kZS0+YXBwZW5k X2NvbmYoCisJJ3BnX2hiYS5jb25mJywgcXF7CisjIE9BdXRoIGF1dGhlbnRpY2F0aW9uIGZvciB0 ZXN0IHVzZXIgKHRoaXMgbXVzdCBiZSB0aGUgZmlyc3QgcnVsZSkKK2xvY2FsIHBvc3RncmVzIHRl c3Qgb2F1dGggdmFsaWRhdG9yPXZhbGlkYXRvciBpc3N1ZXI9IiRpc3N1ZXIiIHNjb3BlPSJvcGVu aWQgcG9zdGdyZXMiCit9KTsKKyMgQWRkIGEgc2VwYXJhdGUgdHJ1c3QgcnVsZSBmb3IgdGhlIGFk bWluIHVzZXIgKGFmdGVyIHRoZSBPQXV0aCBydWxlKQorJG5vZGUtPmFwcGVuZF9jb25mKAorCSdw Z19oYmEuY29uZicsIHFxeworIyBUcnVzdCBhdXRoZW50aWNhdGlvbiBmb3IgYWRtaW4gYWNjZXNz Citsb2NhbCBhbGwgYWxsIHRydXN0Cit9KTsKKworJG5vZGUtPnJlbG9hZDsKKworIyBHZXQgbG9n IHN0YXJ0IHBvc2l0aW9uIHRvIHRyYWNrIG5ldyBsb2cgZW50cmllcworbXkgJGxvZ19zdGFydCA9 ICRub2RlLT53YWl0X2Zvcl9sb2cocXIvcmVsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMvKTsK KworIyBDcmVhdGUgYSBiYWNrZ3JvdW5kIGNvbm5lY3Rpb24gZm9yIGNvbmZpZ3VyYXRpb24gY2hh bmdlcworbXkgJGJnY29ubiA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7Citv aygkYmdjb25uLCAiQmFja2dyb3VuZCBhZG1pbiBjb25uZWN0aW9uIGVzdGFibGlzaGVkIik7CisK KyMgRW5hYmxlIE9BdXRoIHRva2VuIGV4cGlyYXRpb24gdGVzdCBtb2RlCiskYmdjb25uLT5xdWVy eV9zYWZlKCJBTFRFUiBTWVNURU0gU0VUIG9hdXRoX3ZhbGlkYXRvci5lbmFibGVfZXhwaXJ5X3Rl c3QgVE8gdHJ1ZSIpOworJGJnY29ubi0+cXVlcnlfc2FmZSgiQUxURVIgU1lTVEVNIFNFVCBvYXV0 aF92YWxpZGF0b3IudG9rZW5fZXhwaXJlc19pbiBUTyAyIik7Ciskbm9kZS0+cmVsb2FkOworJG5v ZGUtPndhaXRfZm9yX2xvZyhxci9yZWxvYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlcy8sICRsb2df c3RhcnQpOworCisjIFVwZGF0ZSBsb2cgcG9zaXRpb24gYWZ0ZXIgcmVsb2FkCiskbG9nX3N0YXJ0 ID0gJG5vZGUtPndhaXRfZm9yX2xvZyhxci9wYXJhbWV0ZXIgIm9hdXRoX3ZhbGlkYXRvci50b2tl bl9leHBpcmVzX2luIiBjaGFuZ2VkIHRvICIyIi8pOworCisjIEVuYWJsZSBPQXV0aCBkZWJ1ZyBt b2RlIGZvciBjb25uZWN0aW9uIHRlc3RpbmcKKyMgVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIHRl c3QgdG8gdXNlIE9BdXRoIGF1dGhlbnRpY2F0aW9uCiskRU5We1BHT0FVVEhERUJVR30gPSAiVU5T QUZFIjsKKworIyBNYWtlIGEgY29ubmVjdGlvbiB3aXRoIE9BdXRoIGF1dGgKKyRub2RlLT5jb25u ZWN0X29rKAorCSJ1c2VyPXRlc3QgZGJuYW1lPXBvc3RncmVzIG9hdXRoX2lzc3Vlcj0kaXNzdWVy IG9hdXRoX2NsaWVudF9pZD1mMDJjNjM2MS0wNjM1IiwKKwkiY29ubmVjdCB3aXRoIE9BdXRoIHRv a2VuIiwKKwkjIEFsbG93IGFueSBzdGRlcnIgb3V0cHV0IHNpbmNlIE9BdXRoIGRlYnVnZ2luZyB3 aWxsIHByb2R1Y2UgbWVzc2FnZXMKKwlleHBlY3RlZF9zdGRlcnIgPT4gcXIvLiovCispOworCisj IFdhaXQgZm9yIHRva2VuIHRvIGV4cGlyZQorbm90ZSAiV2FpdGluZyBmb3IgdG9rZW4gdG8gZXhw aXJlICgzIHNlY29uZHMpLi4uIjsKK3NsZWVwIDM7CisKKyMgRW5zdXJlIHRoZSBPQXV0aCBkZWJ1 ZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgYmVmb3JlIHRyeWluZyB0aGUgc2Vjb25kIGNv bm5lY3Rpb24KKyRFTlZ7UEdPQVVUSERFQlVHfSA9ICJVTlNBRkUiOworCisjIFRyeSBhbm90aGVy IE9BdXRoIGNvbm5lY3Rpb24KK215ICgkc3Rkb3V0LCAkc3RkZXJyKSA9ICgnJywgJycpOworJG5v ZGUtPnBzcWwoCisJJ3Bvc3RncmVzJywKKwkiU0VMRUNUICdUaGlzIHNob3VsZCBzbGVlcCc7IFNF TEVDVCBwZ19zbGVlcCgzKTsgU0VMRUNUICdUaGlzIHNob3VsZCBuZXZlciBydW4nOyIsCisJZXh0 cmFfcGFyYW1zID0+IFsnLS1zZXQnLCAiT05fRVJST1JfU1RPUD0xIl0sCisJZW52ID0+IHsgUEdP QVVUSERFQlVHID0+ICJVTlNBRkUiIH0sCisJdGltZW91dCA9PiAkUG9zdGdyZVNRTDo6VGVzdDo6 VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCwKKwljb25uc3RyID0+ICJ1c2VyPXRlc3Qgb2F1dGhfaXNz dWVyPSRpc3N1ZXIgb2F1dGhfY2xpZW50X2lkPWYwMmM2MzYxLTA2MzUiLAorCXN0ZG91dCA9PiBc JHN0ZG91dCwKKwlzdGRlcnIgPT4gXCRzdGRlcnIKKyk7CisKKyMgTG9vayBmb3IgdG9rZW4gZXhw aXJhdGlvbiBlcnJvcnMgaW4gdGhlIGxvZ3MKK215ICRleHBpcnlfbG9nZ2VkID0gJG5vZGUtPndh aXRfZm9yX2xvZyhxci9zZXNzaW9uIGV4cGlyZWQ6IE9BdXRoIHRva2VuIGlzIG5vIGxvbmdlciB2 YWxpZC8sICRsb2dfc3RhcnQpOworb2soJGV4cGlyeV9sb2dnZWQsICJUb2tlbiBleHBpcmF0aW9u IG1lc3NhZ2UgZm91bmQgaW4gc2VydmVyIGxvZ3MiKTsKKworIyBDbGVhbiB1cAorJGJnY29ubi0+ cXVlcnlfc2FmZSgiQUxURVIgU1lTVEVNIFJFU0VUIG9hdXRoX3ZhbGlkYXRvci5lbmFibGVfZXhw aXJ5X3Rlc3QiKTsKKyRiZ2Nvbm4tPnF1ZXJ5X3NhZmUoIkFMVEVSIFNZU1RFTSBSRVNFVCBvYXV0 aF92YWxpZGF0b3IudG9rZW5fZXhwaXJlc19pbiIpOworCiskbm9kZS0+c3RvcDsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3ZhbGlkYXRvci5jIGIvc3JjL3Rl c3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdmFsaWRhdG9yLmMKaW5kZXggMGI5ODNhOWRjOGYu LjM2NDY4MzEyYjgyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRv ci92YWxpZGF0b3IuYworKysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci92YWxp ZGF0b3IuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1 ZGUgInV0aWxzL2d1Yy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAi dXRpbHMvdGltZXN0YW1wLmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CiAKIFBHX01PRFVMRV9NQUdJ QzsKIApAQCAtNDAsNiArNDIsOCBAQCBzdGF0aWMgY29uc3QgT0F1dGhWYWxpZGF0b3JDYWxsYmFj a3MgdmFsaWRhdG9yX2NhbGxiYWNrcyA9IHsKIC8qIEdVQ3MgKi8KIHN0YXRpYyBjaGFyICphdXRo bl9pZCA9IE5VTEw7CiBzdGF0aWMgYm9vbCBhdXRob3JpemVfdG9rZW5zID0gdHJ1ZTsKK3N0YXRp YyBib29sIGVuYWJsZV9leHBpcnlfdGVzdCA9IGZhbHNlOworc3RhdGljIGludCB0b2tlbl9leHBp cmVzX2luID0gMDsKIAogLyotLS0KICAqIEV4dGVuc2lvbiBlbnRyeSBwb2ludC4gU2V0cyB1cCBH VUNzIGZvciB1c2UgYnkgdGVzdHM6CkBAIC03Miw2ICs3NiwyNSBAQCBfUEdfaW5pdCh2b2lkKQog CQkJCQkJCSAwLAogCQkJCQkJCSBOVUxMLCBOVUxMLCBOVUxMKTsKIAorCS8qIFBhcmFtZXRlcnMg Zm9yIHRva2VuIGV4cGlyYXRpb24gdGVzdGluZyAqLworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJs ZSgib2F1dGhfdmFsaWRhdG9yLmVuYWJsZV9leHBpcnlfdGVzdCIsCisJCQkJCQkJICJFbmFibGUg dG9rZW4gZXhwaXJhdGlvbiB0ZXN0aW5nIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJmVuYWJs ZV9leHBpcnlfdGVzdCwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19TSUdIVVAsCisJCQkJ CQkJIDAsCisJCQkJCQkJIE5VTEwsIE5VTEwsIE5VTEwpOworCURlZmluZUN1c3RvbUludFZhcmlh YmxlKCJvYXV0aF92YWxpZGF0b3IudG9rZW5fZXhwaXJlc19pbiIsCisJCQkJCQkJIlRva2VuIGxp ZmV0aW1lIGluIHNlY29uZHMgZm9yIGV4cGlyeSB0ZXN0IiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJ CSZ0b2tlbl9leHBpcmVzX2luLAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJCQkJ CQlQR0NfU0lHSFVQLAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwgTlVMTCwgTlVMTCk7CisKIAlN YXJrR1VDUHJlZml4UmVzZXJ2ZWQoIm9hdXRoX3ZhbGlkYXRvciIpOwogfQogCkBAIC0xMTQsNiAr MTM3LDE1IEBAIHZhbGlkYXRvcl9zaHV0ZG93bihWYWxpZGF0b3JNb2R1bGVTdGF0ZSAqc3RhdGUp CiAJCQkgc3RhdGUtPnByaXZhdGVfZGF0YSk7CiB9CiAKKy8qCisgKiBUZXN0IGNhbGxiYWNrIGZ1 bmN0aW9uIGZvciB0b2tlbiBleHBpcmF0aW9uIGNoZWNraW5nCisgKi8KK3N0YXRpYyBib29sCit0 ZXN0X3Rva2VuX2V4cGlyZWRfY2FsbGJhY2soVGltZXN0YW1wVHogZXhwaXJ5KQoreworCXJldHVy biAoVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKGV4cGlyeSwgMCkgPCBHZXRDdXJyZW50VGlt ZXN0YW1wKCkpOworfQorCiAvKgogICogVmFsaWRhdG9yIGltcGxlbWVudGF0aW9uLiBMb2dzIHRo ZSBpbmNvbWluZyBkYXRhIGFuZCBhdXRob3JpemVzIHRoZSB0b2tlbiBieQogICogZGVmYXVsdDsg dGhlIGJlaGF2aW9yIGNhbiBiZSBtb2RpZmllZCB2aWEgdGhlIG1vZHVsZSdzIEdVQyBzZXR0aW5n cy4KQEAgLTEzOSw1ICsxNzEsMjYgQEAgdmFsaWRhdGVfdG9rZW4oY29uc3QgVmFsaWRhdG9yTW9k dWxlU3RhdGUgKnN0YXRlLAogCWVsc2UKIAkJcmVzLT5hdXRobl9pZCA9IHBzdHJkdXAocm9sZSk7 CiAKKwkvKiBTZXQgdXAgZXhwaXJhdGlvbiBkYXRhIGlmIHRlc3RpbmcgaXMgZW5hYmxlZCAqLwor CWlmIChlbmFibGVfZXhwaXJ5X3Rlc3QpCisJeworCQlUaW1lc3RhbXBUeiBub3cgPSBHZXRDdXJy ZW50VGltZXN0YW1wKCk7CisKKwkJLyogU2V0IHRoZSBjYWxsYmFjayBpZiBlbmFibGVkICovCisJ CXJlcy0+ZXhwaXJlZF9jYiA9IHRlc3RfdG9rZW5fZXhwaXJlZF9jYWxsYmFjazsKKworCQkvKiBB ZGQgdG9rZW5fZXhwaXJlc19pbiBzZWNvbmRzIHRvIGN1cnJlbnQgdGltZSBmb3IgZXhwaXJ5ICov CisJCWlmICh0b2tlbl9leHBpcmVzX2luID4gMCkKKwkJeworCQkJcmVzLT5leHBpcnkgPSBUaW1l c3RhbXBUelBsdXNTZWNvbmRzKG5vdywgdG9rZW5fZXhwaXJlc19pbik7CisJCX0KKwkJZWxzZQor CQl7CisJCQkvKiBVc2UgYSBmYXIgZnV0dXJlIHRpbWUgKi8KKwkJCXJlcy0+ZXhwaXJ5ID0gRFRf Tk9FTkQ7CisJCX0KKworCX0KKwogCXJldHVybiB0cnVlOwogfQo= --000000000000aad1c4064b151da1--