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 1vtN1o-002D4i-19 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Feb 2026 09:42:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vtN1n-007H23-09 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Feb 2026 09:42:27 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vtN1m-007H1u-1a for pgsql-hackers@lists.postgresql.org; Fri, 20 Feb 2026 09:42:26 +0000 Received: from mail-lj1-x231.google.com ([2a00:1450:4864:20::231]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vtN1i-00000000LNy-2DYT for pgsql-hackers@lists.postgresql.org; Fri, 20 Feb 2026 09:42:25 +0000 Received: by mail-lj1-x231.google.com with SMTP id 38308e7fff4ca-3870d178a9aso15837841fa.0 for ; Fri, 20 Feb 2026 01:42:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1771580542; cv=none; d=google.com; s=arc-20240605; b=ecTULJfo0bnk0L1u4XHlgHMP4blT91qUiMhzTrgFhjieBWr/Qh+/7eMYze5UAviRPc eEKqbyLwKZKA2FbceFP7SZDv2lotNwFAbipqjYMuf+C65u7vD1QMhapT+hNQXjEpSLLn wPFInA3VAIvk1IPEZrjCzbzoJRjMsT/Yw0EFhmJensLUb8cbCi/N7BQdkmLm/FyXan7+ 18M+B/CgfXt/WFZ8w3XflDO7Ayq8GVIqxzaPgUukQO2y+DKThVUxwOB+qOMvxSfOTmDK Xj+G24PDAa2op034IEu/zdsMHCEsU7A/bG/JNpHEwi/YMBjwLy0x4/u0czaigAtR1Oca KsvA== 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=NgIWyvVxnkNlOcD/Knm3irlt8J12CZ12ttnI0ylqUvc=; fh=TZN7cVM4vqjgye8Qs2qKOof1W/3z9TDUkAqBiOacf/U=; b=KPJsqr2OoR3MIaKkQajikvPAKTSN7/DcxDOa2DjkK98UJpSqbOQTJjko2Q+UccEBw+ UzoN9RNfspSjNRgLc8udKXSn8rVRYDAL0rG7gI52Y0bqmpc1RxOshYjT0Bg5ssQ8J2Rm mw0Sv5PQMGlm/GQbh6fW77RmqHbdnCip0mbnXWOE26hsCUrckQtsEbHjwWM8xMW2ukEZ oPu8wGxzRbZ0fA0PqNxtDRwTHANWTNvmhCU8FRrhfeP5/JZHiQSIz+eO60GBY1ie8v+N 1GyjDjn1C+gdu29HdP3D9LVp0wDa5NC1GSTYFvhUk1RP4O1jB5lnCfcMA6yPs9IHFNkd cbPw==; 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=1771580542; x=1772185342; 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=NgIWyvVxnkNlOcD/Knm3irlt8J12CZ12ttnI0ylqUvc=; b=foA5p0ls9nkIxapU/zRGlqqYUOy0WhLOGr8k2ikuqYaTya+vefZ1adBN0Swc2wdUvY /NNFJLJTKTNZsmwXtC2kI1tD5/+YTecv+5D9iaa9cKAWID80U4Ym05nhUybiUWWYsRvk x6q/81lBa7e4QlANSXFATCEet1fiMy5c9NtMZqbqvGKBbeerULOub4LS32ZBpT2fCyMn Mrg8cbgNrtbqlTr89AJQje0YwotFCfm1snXXkFfmq+jjuuh34PKlP62AsnihRZPlJjJ5 ZzCYa2WxRXLYZ5TCTFRLuGDzezOoZgndRWFBHvSN3wPVQFOzvrkR+24RknpOUhfQCUJI EZKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771580542; x=1772185342; 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=NgIWyvVxnkNlOcD/Knm3irlt8J12CZ12ttnI0ylqUvc=; b=YLtNkGvnNW38HZcQJmE2zQsQ6pD++zEElUj1Fu+0cCPaKJc7uJEQNqCgdN6WMTrpIJ rcbCDcpNE4C6y0FsVlv8+8nU1XiBKbICeXPxIawl7yg+iHJiUsOFzfSTWGCPGzn1UCg9 1WwSLVUQDFBw7Z1MgBJmFAKpXm2bj6lEQsvr/I+5jfnu1th1S994CEkMAkDObxiwdW8i BnDqs1edBfpdYg5tNPmiJ6Lr48aymv55RXHXVh8rFag55XQYNc/CZKL+oZgIzyz3bZnB 6BFAkxwFYtZk3/QniGNBKAZGvfL4EpZHJoVHALB6xmR3zz62Gnn/sVA4YiPI04lU2dpU zQnw== X-Forwarded-Encrypted: i=1; AJvYcCXUkk6kLcavguem9spRtD+xdoGznB5mQTpMHhchoSFpDHS5I69+Lx0rzNURZ7y2FmkmvBIEpG+jEWdZsJPr@lists.postgresql.org X-Gm-Message-State: AOJu0YyEGnzJw8ZhvzH5HCluTD805Ogon+4Ve7dhSrerP8nR7w8UE6ht x6nozjNzl+ywDUpiIT+WLvOcL4bNQVOCKUIv/l+qLwPBDJrE5QU/Q8mVAY+teeC9tsVpIVCXWQ5 Q5UQs3o5NxR/MDZz/Rq0Y3Y1IxQ1WNic= X-Gm-Gg: AZuq6aJQXRiFRxUKDKcAPImS0hA2lb3I5pfe2jENsaQ2Ce9AL52kjNQcibVCLlp1I7/ OIjpmpvIbMFozXWMOwa2VTGenozOIyBCrhz3Ndb7M12I0fiNOA+KC4i71ImwkKTyG3IYQGLIoNK YMcLkGwMmdpmMG9maiNeWJzHoHVMCkxE+Cjdf7XgjEAI8mb+5L/n/WApEgjIWtjpkvplIrUniNC U27hBUw70Z6onFmI7J/jrNRVUimQL99x516kWxeRIEXFIK6+yADwN1SJ8nT/Ad/RuxoEMWQv/bJ 21qYL8xqrw8g/HA1T4bWy1FI3uTY2hL3TfM3Yp9Odhpg/Fbx X-Received: by 2002:a2e:bc09:0:b0:383:1dff:8aa0 with SMTP id 38308e7fff4ca-38846599aadmr26624991fa.3.1771580541817; Fri, 20 Feb 2026 01:42:21 -0800 (PST) MIME-Version: 1.0 References: <7F3C1A8B-F0FF-49BF-A53C-DC043BBB1FE7@yesql.se> In-Reply-To: From: Ajit Awekar Date: Fri, 20 Feb 2026 15:12:10 +0530 X-Gm-Features: AaiRm51ZHAA9KUiGW4pj9sWwg9lEoYw6qfA_QYjh51MF1PhxA34v9tiqvYHVsso Message-ID: Subject: Re: [OAuth2] Infrastructure for tracking token expiry time To: Zsolt Parragi Cc: Daniel Gustafsson , VASUKI M , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000e2f8cc064b3e3c69" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e2f8cc064b3e3c69 Content-Type: multipart/alternative; boundary="000000000000e2f8ca064b3e3c67" --000000000000e2f8ca064b3e3c67 Content-Type: text/plain; charset="UTF-8" Thanks a lot Daniel, Zslot, Vasuki for your review comments. >The mechanism used is however a secondary discussion, >first thing to get in place is a design for how to handle mid-connection >credential expiration. This patch introduces a generic credential validation framework that allows us to periodically validate authentication credentials during active database sessions. When enabled, this feature detects expired credentials and terminates sessions that are no longer valid. Added GUCs Credential_validation.enabled = on // Enable or Disable Credential validation Credential_validation.interval = 120 //Frequency in seconds of running credential validation The callback mechanism works by: - Defining a CredentialValidationCallback function pointer type - Maintaining an array of validators indexed by authentication method - Allowing other auth mechanisms to register validators via RegisterCredentialValidator() - Selecting the appropriate validator at runtime based on the session's authentication method The current implementation primarily supports password-based authentication methods, verifying that passwords haven't expired. It can be extended to any authentication method. This patch is WIP. I am submitting it now to get early feedback on the overall design and approach. Thanks & Best Regards, Ajit On Wed, 18 Feb 2026 at 22:29, Zsolt Parragi wrote: > > but I still think that neither should overload > > what FATAL error means > > I see, I misunderstood what you meant by graceful there. In this case, > this is also a good comment for the password expiration thread, > currently that also uses FATAL errors for terminating a connection > when the password expires. > > What other option do you see? Something new for this use case like > GoAway, and clients not understanding it simply get disconnected after > some grace period? Or using the recently merged connectionWarning to > send a warning to the client, and disconnect it shortly if it doesn't > do anything to fix the situation? > > When I tested the password expiration patch I noticed that deleted > users who still have remaining active connections currently get ERRORs > for every statement that requires permission checks, so in this regard > using ERROR/FATAL for the situation seemed fine to me - it's similar > to what already happens in some edge cases with authentication. > --000000000000e2f8ca064b3e3c67 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Thanks a lot Daniel, Zslot, Vasuki for your revie= w=C2=A0comments.

>The mechanism used is however= a secondary discussion,
>first thing to get in place is a design for= how to handle mid-connection
>credential expiration.
=
This patch introduces a generic credential validation framework that al= lows =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0
=C2=A0us to periodically validate authentication c= redentials during active
=C2=A0database sessions. When enabled, this fea= ture detects expired=C2=A0
=C2=A0credentials and terminates sessions tha= t are no longer valid.
=C2=A0
=C2=A0Added GUCs
Credential_validat= ion.enabled =3D on =C2=A0 // Enable or Disable Credential validation
Cre= dential_validation.interval =3D 120 =C2=A0//Frequency in seconds of running= credential validation

=C2=A0The callback mechanism works by:
=C2= =A0 - Defining a CredentialValidationCallback function pointer type
=C2= =A0 - Maintaining an array of validators indexed by authentication method=C2=A0 - Allowing other auth mechanisms to register validators via
=C2= =A0 =C2=A0 RegisterCredentialValidator()
=C2=A0 - Selecting the appropri= ate validator at runtime based on the session's
=C2=A0 =C2=A0 authen= tication method

The current implementation primarily supports passwo= rd-based authentication methods, verifying that passwords haven't expir= ed. It can be extended to any authentication method.
This patch is WIP. = I am submitting it now to get early feedback on the overall design and appr= oach.
=C2=A0=C2=A0
Thanks & Best Regards,
Ajit

On Wed, 18 Feb 2026 at 22:29, Zsolt Parragi <zsolt.parragi@perc= ona.com> wrote:
> but I still think that neither should overload
> what FATAL error means

I see, I misunderstood what you meant by graceful there. In this case,
this is also a good comment for the password expiration thread,
currently that also uses FATAL errors for terminating a connection
when the password expires.

What other option do you see? Something new for this use case like
GoAway, and clients not understanding it simply get disconnected after
some grace period? Or using the recently merged connectionWarning to
send a warning to the client, and disconnect it shortly if it doesn't do anything to fix the situation?

When I tested the password expiration patch I noticed that deleted
users who still have remaining active connections currently get ERRORs
for every statement that requires permission checks, so in this regard
using ERROR/FATAL for the situation seemed fine to me - it's similar to what already happens in some edge cases with authentication.
--000000000000e2f8ca064b3e3c67-- --000000000000e2f8cc064b3e3c69 Content-Type: text/x-patch; charset="US-ASCII"; name="credential_validation_framework_poc.patch" Content-Disposition: attachment; filename="credential_validation_framework_poc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mluow7at0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2xpYnBxL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvbGli cHEvTWFrZWZpbGUKaW5kZXggOThlYjJhODI0MmQuLmQyNjNjYThkOTMxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9saWJwcS9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9saWJwcS9NYWtlZmls ZQpAQCAtMTgsNiArMTgsNyBAQCBPQkpTID0gXAogCWF1dGgtb2F1dGgubyBcCiAJYXV0aC1zYXNs Lm8gXAogCWF1dGgtc2NyYW0ubyBcCisJYXV0aC12YWxpZGF0ZS5vIFwKIAlhdXRoLm8gXAogCWJl LWZzc3R1YnMubyBcCiAJYmUtc2VjdXJlLWNvbW1vbi5vIFwKQEAgLTI1LDYgKzI2LDcgQEAgT0JK UyA9IFwKIAljcnlwdC5vIFwKIAloYmEubyBcCiAJaWZhZGRyLm8gXAorCXBhc3N3b3JkLXZhbGlk YXRlLm8gXAogCXBxY29tbS5vIFwKIAlwcWZvcm1hdC5vIFwKIAlwcW1xLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvbGlicHEvYXV0aC12YWxpZGF0ZS5jIGIvc3JjL2JhY2tlbmQvbGlicHEv YXV0aC12YWxpZGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5l ZDEyMTgzNzdhMwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL2F1dGgtdmFs aWRhdGUuYwpAQCAtMCwwICsxLDI5NiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqCisqIGF1dGgt dmFsaWRhdGUuYworKiAgICAgIEltcGxlbWVudGF0aW9uIG9mIGF1dGhlbnRpY2F0aW9uIGNyZWRl bnRpYWwgdmFsaWRhdGlvbgorKgorKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyoKKyog SURFTlRJRklDQVRJT04KKyogICAgICBzcmMvYmFja2VuZC9saWJwcS9hdXRoLXZhbGlkYXRlLmMK KyoKKyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNs dWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgImFjY2Vzcy94 YWN0LmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNsdWRlICJsaWJwcS9hdXRoLmgi CisjaW5jbHVkZSAibGlicHEvaGJhLmgiCisjaW5jbHVkZSAibGlicHEvbGlicHEtYmUuaCIKKyNp bmNsdWRlICJsaWJwcS9hdXRoLXZhbGlkYXRlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisj aW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMu aCIKKyNpbmNsdWRlICJzdG9yYWdlL2xhdGNoLmgiCisjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5o IgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZWxvZy5oIgor I2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgorI2lu Y2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNp bmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCisKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2Jvb2wJCWNy ZWRlbnRpYWxfdmFsaWRhdGlvbl9lbmFibGVkOworaW50CQkJY3JlZGVudGlhbF92YWxpZGF0aW9u X2ludGVydmFsOworCisvKiBSZWdpc3RlcmVkIGNyZWRlbnRpYWwgdmFsaWRhdG9ycyAqLworc3Rh dGljIENyZWRlbnRpYWxWYWxpZGF0aW9uQ2FsbGJhY2sgdmFsaWRhdG9yc1tBVVRIX1JFUV9MQVNU XTsKKworLyoKKyAqIENvbnZlcnQgVXNlckF1dGggZW51bSB0byBBVVRIX1JFUV8qIGNvbnN0YW50 IGZvciB2YWxpZGF0b3Igc2VsZWN0aW9uCisgKi8KK3N0YXRpYyBpbnQKK1VzZXJBdXRoVG9BdXRo UmVxKFVzZXJBdXRoIGF1dGhfbWV0aG9kKQoreworCXN3aXRjaCAoYXV0aF9tZXRob2QpCisJewor CQljYXNlIHVhUGFzc3dvcmQ6CisJCWNhc2UgdWFNRDU6CisJCWNhc2UgdWFTQ1JBTToKKwkJLyog QWxsIHBhc3N3b3JkLWJhc2VkIG1ldGhvZHMgdXNlIHRoZSBwYXNzd29yZCB2YWxpZGF0b3IgKi8K KwkJCXJldHVybiBBVVRIX1JFUV9QQVNTV09SRDsKKwkJZGVmYXVsdDoKKwkJCS8qIE5vIHNwZWNp ZmljIHZhbGlkYXRvciBmb3Igb3RoZXIgYXV0aCBtZXRob2RzICovCisJCQlyZXR1cm4gLTE7CisJ fQorfQorCisvKgorICogUHJvY2VzcyBjcmVkZW50aWFsIHZhbGlkYXRpb24KKyAqLwordm9pZAor UHJvY2Vzc0NyZWRlbnRpYWxWYWxpZGF0aW9uKHZvaWQpCit7CisJLyogU2tpcCB2YWxpZGF0aW9u IGR1cmluZyBhdXRoZW50aWNhdGlvbiBvciBjb25uZWN0aW9uIHNldHVwICovCisJaWYgKENsaWVu dEF1dGhJblByb2dyZXNzKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBjcmVkZW50aWFscyBpZiB2 YWxpZGF0aW9uIGlzIGVuYWJsZWQgKi8KKwlpZiAoY3JlZGVudGlhbF92YWxpZGF0aW9uX2VuYWJs ZWQgJiYgTXlDbGllbnRDb25uZWN0aW9uSW5mby5hdXRobl9pZCAhPSBOVUxMKQorCXsKKwkJQ3Jl ZGVudGlhbFZhbGlkYXRpb25TdGF0dXMgc3RhdHVzOworCQlVc2VyQXV0aAlhdXRoX21ldGhvZCA9 IE15Q2xpZW50Q29ubmVjdGlvbkluZm8uYXV0aF9tZXRob2Q7CisKKwkJZWxvZyhERUJVRzEsICJj cmVkZW50aWFsIHZhbGlkYXRpb246IGNoZWNraW5nIGNyZWRlbnRpYWxzIGZvciBhdXRoX21ldGhv ZD0lZCIsCisJCQkgKGludCkgYXV0aF9tZXRob2QpOworCisJCXN0YXR1cyA9IENoZWNrQ3JlZGVu dGlhbFZhbGlkaXR5KCk7CisKKwkJc3dpdGNoIChzdGF0dXMpCisJCXsKKwkJCWNhc2UgQ1ZTX1ZB TElEOgorCQkJCS8qIENyZWRlbnRpYWxzIGFyZSB2YWxpZCwgY29udGludWUgKi8KKwkJCQllbG9n KERFQlVHMSwgImNyZWRlbnRpYWwgdmFsaWRhdGlvbjogY3JlZGVudGlhbHMgdmFsaWQgZm9yIGF1 dGhfbWV0aG9kPSVkIiwKKwkJCQkJIChpbnQpIGF1dGhfbWV0aG9kKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBDVlNfRVhQSVJFRDoKKwkJCQllbG9nKExPRywgImNyZWRlbnRpYWwgdmFsaWRhdGlv bjogY3JlZGVudGlhbHMgZXhwaXJlZCBmb3IgYXV0aF9tZXRob2Q9JWQiLAorCQkJCQkgKGludCkg YXV0aF9tZXRob2QpOworCQkJCWVyZXBvcnQoRkFUQUwsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfQVVUSE9SSVpBVElPTl9TUEVDSUZJQ0FUSU9OKSwKKwkJCQkJCSBlcnJtc2coInNl c3Npb24gY3JlZGVudGlhbHMgaGF2ZSBleHBpcmVkIiksCisJCQkJCQkgZXJyaGludCgiUGxlYXNl IHJlY29ubmVjdCB0byBlc3RhYmxpc2ggYSBuZXcgYXV0aGVudGljYXRlZCBzZXNzaW9uIikpKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBDVlNfRVJST1I6CisJCQkJZWxvZyhMT0csICJjcmVkZW50 aWFsIHZhbGlkYXRpb246IGVycm9yIGNoZWNraW5nIGNyZWRlbnRpYWxzIGZvciBhdXRoX21ldGhv ZD0lZCIsCisJCQkJCSAoaW50KSBhdXRoX21ldGhvZCk7CisJCQkJZXJlcG9ydChXQVJOSU5HLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0FVVEhPUklaQVRJT05fU1BFQ0lGSUNBVElP TiksCisJCQkJCQkgZXJybXNnKCJlcnJvciBjaGVja2luZyBjcmVkZW50aWFsIHZhbGlkaXR5Iiks CisJCQkJCQkgZXJyaGludCgiQ3JlZGVudGlhbCB2YWxpZGF0aW9uIHdpbGwgYmUgcmV0cmllZCBh dCB0aGUgbmV4dCBpbnRlcnZhbCIpKSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorfQorCisvKgor ICogSW5pdGlhbGl6ZSBjcmVkZW50aWFsIHZhbGlkYXRpb24gc3lzdGVtIENhbGxlZCBmcm9tIElu aXRQb3N0Z3JlcyBhZnRlcgorICogYXV0aGVudGljYXRpb24gY29tcGxldGVzCisgKi8KK3ZvaWQK K0luaXRpYWxpemVDcmVkZW50aWFsVmFsaWRhdGlvbih2b2lkKQoreworCWludAkJCWk7CisKKwkv KiBEZWZpbmUgR1VDIHZhcmlhYmxlcyAqLworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgiY3Jl ZGVudGlhbF92YWxpZGF0aW9uLmVuYWJsZWQiLAorCQkJCQkJCSAiRW5hYmxlIHBlcmlvZGljIGNy ZWRlbnRpYWwgdmFsaWRhdGlvbi4iLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmY3JlZGVudGlh bF92YWxpZGF0aW9uX2VuYWJsZWQsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfU1VTRVQs CisJCQkJCQkJIDAsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwp OworCisJRGVmaW5lQ3VzdG9tSW50VmFyaWFibGUoImNyZWRlbnRpYWxfdmFsaWRhdGlvbi5pbnRl cnZhbCIsCisJCQkJCQkJIkNyZWRlbnRpYWwgdmFsaWRhdGlvbiBpbnRlcnZhbCBpbiBzZWNvbmRz LiIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQkmY3JlZGVudGlhbF92YWxpZGF0aW9uX2ludGVydmFs LAorCQkJCQkJCTYwLAorCQkJCQkJCTEwLAorCQkJCQkJCTM2MDAsCisJCQkJCQkJUEdDX1NVU0VU LAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCU5VTEwpOwor CisJLyogSW5pdGlhbGl6ZSB2YWxpZGF0b3IgY2FsbGJhY2tzIHRvIE5VTEwgKi8KKwlmb3IgKGkg PSAwOyBpIDwgQVVUSF9SRVFfTEFTVDsgaSsrKQorCQl2YWxpZGF0b3JzW2ldID0gTlVMTDsKKwor CS8qIFJlZ2lzdGVyIGJ1aWx0LWluIHZhbGlkYXRvcnMgKi8KKwlSZWdpc3RlckNyZWRlbnRpYWxW YWxpZGF0b3IoQVVUSF9SRVFfUEFTU1dPUkQsIHZhbGlkYXRlX3Bhc3N3b3JkX2NyZWRlbnRpYWxz KTsKKworCS8qIEVuc3VyZSB3ZSBsb2cgdGhlIHJlZ2lzdHJhdGlvbiBvZiB0aGUgdmFsaWRhdG9y ICovCisJZWxvZyhERUJVRzEsICJSZWdpc3RlcmVkIHBhc3N3b3JkIHZhbGlkYXRvciBmb3IgQVVU SF9SRVFfUEFTU1dPUkQ9JWQiLCBBVVRIX1JFUV9QQVNTV09SRCk7CisKKwkvKgorCSAqIFNjaGVk dWxlIHRoZSBmaXJzdCBjcmVkZW50aWFsIHZhbGlkYXRpb24gY2hlY2sgaWYgZW5hYmxlZC4gVGhl CisJICogdGltZW91dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gcG9zdGluaXQuYy4KKwkgKi8K KwlpZiAoY3JlZGVudGlhbF92YWxpZGF0aW9uX2VuYWJsZWQgJiYgY3JlZGVudGlhbF92YWxpZGF0 aW9uX2ludGVydmFsID4gMCkKKwl7CisJCQkvKiBFbmFibGUgcGVyaW9kaWMgY2hlY2tzIGF0IHRo ZSBzcGVjaWZpZWQgaW50ZXJ2YWwgKi8KKwkJCWVuYWJsZV90aW1lb3V0X2V2ZXJ5KENSRURFTlRJ QUxfVkFMSURBVElPTl9USU1FT1VULAorCQkJCQkJCQkgR2V0Q3VycmVudFRpbWVzdGFtcCgpLAor CQkJCQkJCQkgY3JlZGVudGlhbF92YWxpZGF0aW9uX2ludGVydmFsICogMTAwMCk7CisJfQorCisJ LyogSW5pdGlhbGl6ZSBtZXRob2Qtc3BlY2lmaWMgdmFsaWRhdGlvbiBzeXN0ZW1zICovCisJSW5p dGlhbGl6ZVBhc3N3b3JkVmFsaWRhdGlvbigpOworfQorCisvKgorICogUmVnaXN0ZXIgYSB2YWxp ZGF0b3IgY2FsbGJhY2sgZm9yIGEgc3BlY2lmaWMgYXV0aGVudGljYXRpb24gbWV0aG9kCisgKi8K K3ZvaWQKK1JlZ2lzdGVyQ3JlZGVudGlhbFZhbGlkYXRvcihpbnQgYXV0aG1ldGhvZCwgQ3JlZGVu dGlhbFZhbGlkYXRpb25DYWxsYmFjayB2YWxpZGF0b3IpCit7CisJaWYgKGF1dGhtZXRob2QgPCAw IHx8IGF1dGhtZXRob2QgPj0gQVVUSF9SRVFfTEFTVCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJp bnZhbGlkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBjb2RlOiAlZCIsIGF1dGhtZXRob2QpKSk7CisK Kwl2YWxpZGF0b3JzW2F1dGhtZXRob2RdID0gdmFsaWRhdG9yOworfQorCisvKgorICogQ2hlY2sg Y3JlZGVudGlhbCB2YWxpZGl0eSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgdmFsaWRhdG9yCisgKi8K K0NyZWRlbnRpYWxWYWxpZGF0aW9uU3RhdHVzCitDaGVja0NyZWRlbnRpYWxWYWxpZGl0eSh2b2lk KQoreworCUNyZWRlbnRpYWxWYWxpZGF0aW9uQ2FsbGJhY2sgdmFsaWRhdG9yID0gTlVMTDsKKwlp bnQJCQlhdXRoX3JlcV9jb2RlID0gLTE7CisJYm9vbAkJc3RhcnRlZF90cmFuc2FjdGlvbiA9IGZh bHNlOworCWJvb2wJCW5lZWRfc25hcHNob3QgPSBmYWxzZTsKKworCS8qCisJICogU2tpcCB2YWxp ZGF0aW9uIGlmIG5vdCBpbiBhIHRyYW5zYWN0aW9uIHN0YXRlIG9yIGR1cmluZyBzaHV0ZG93biBv cgorCSAqIFJlY292ZXJ5CisJICovCisJaWYgKHByb2NfZXhpdF9pbnByb2dyZXNzIHx8IFJlY292 ZXJ5SW5Qcm9ncmVzcygpKQorCQlyZXR1cm4gQ1ZTX1ZBTElEOworCisJLyoKKwkgKiBVc2UgdGhl IHNlc3Npb24ncyBhdXRoZW50aWNhdGlvbiBtZXRob2QgZnJvbSBNeUNsaWVudENvbm5lY3Rpb25J bmZvCisJICogdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSB2YWxpZGF0b3IuCisJICovCisJaWYg KE15Q2xpZW50Q29ubmVjdGlvbkluZm8uYXV0aG5faWQgIT0gTlVMTCkKKwl7CisJCWF1dGhfcmVx X2NvZGUgPSBVc2VyQXV0aFRvQXV0aFJlcShNeUNsaWVudENvbm5lY3Rpb25JbmZvLmF1dGhfbWV0 aG9kKTsKKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgdmFsaWQgYXV0aF9yZXFfY29kZSwgZ2V0 IHRoZSBjb3JyZXNwb25kaW5nCisJCSAqIHZhbGlkYXRvcgorCQkgKi8KKwkJaWYgKGF1dGhfcmVx X2NvZGUgPj0gMCAmJiBhdXRoX3JlcV9jb2RlIDwgQVVUSF9SRVFfTEFTVCkKKwkJCXZhbGlkYXRv ciA9IHZhbGlkYXRvcnNbYXV0aF9yZXFfY29kZV07CisKKwkJLyogTG9nIGRldGFpbGVkIGluZm8g YXQgREVCVUcxIGxldmVsIGZvciB0cm91Ymxlc2hvb3RpbmcgKi8KKwkJZWxvZyhERUJVRzEsICJj cmVkZW50aWFsIHZhbGlkYXRpb246IGF1dGhfbWV0aG9kPSVkLCBhdXRoX3JlcV9jb2RlPSVkLCB2 YWxpZGF0b3I9JXAiLAorCQkJCSAoaW50KSBNeUNsaWVudENvbm5lY3Rpb25JbmZvLmF1dGhfbWV0 aG9kLCBhdXRoX3JlcV9jb2RlLCB2YWxpZGF0b3IpOworCX0KKwllbHNlCisJeworCQllbG9nKERF QlVHMSwgImNyZWRlbnRpYWwgdmFsaWRhdGlvbjogbm8gYXV0aG5faWQgYXZhaWxhYmxlIik7CisJ fQorCisJLyoKKwkgKiBJZiBubyB2YWxpZGF0b3IgZm91bmQgZm9yIHRoZSBjdXJyZW50IGF1dGgg bWV0aG9kIG9yIG5vCisJICogYXV0aGVudGljYXRlZCBzZXNzaW9uLCBza2lwIHZhbGlkYXRpb24g YW5kIGNvbnNpZGVyIGNyZWRlbnRpYWxzCisJICogdmFsaWQKKwkgKi8KKwlpZiAodmFsaWRhdG9y ID09IE5VTEwgfHwgIU15Q2xpZW50Q29ubmVjdGlvbkluZm8uYXV0aG5faWQpCisJCQlyZXR1cm4g Q1ZTX1ZBTElEOworCisJLyogQ2FsbCB0aGUgdmFsaWRhdG9yIGFuZCBpbnRlcnByZXQgcmVzdWx0 ICovCisJUEdfVFJZKCk7CisJeworCQlib29sCQlyZXN1bHQ7CisJCUNyZWRlbnRpYWxWYWxpZGF0 aW9uU3RhdHVzIHN0YXR1czsKKworCQkvKiBTdGFydCBhIHRyYW5zYWN0aW9uIGlmIHdlJ3JlIG5v dCBpbiBvbmUgKi8KKwkJaWYgKCFJc1RyYW5zYWN0aW9uU3RhdGUoKSkKKwkJeworCQkJU3RhcnRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCXN0YXJ0ZWRfdHJhbnNhY3Rpb24gPSB0cnVlOworCQl9 CisKKwkJLyogRW5zdXJlIHdlIGhhdmUgYW4gYWN0aXZlIHNuYXBzaG90IGZvciBjYXRhbG9nIGFj Y2VzcyAqLworCQlpZiAoIUFjdGl2ZVNuYXBzaG90U2V0KCkpCisJCXsKKwkJCVB1c2hBY3RpdmVT bmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCQkJbmVlZF9zbmFwc2hvdCA9IHRy dWU7CisJCX0KKworCQllbG9nKERFQlVHMSwgImNyZWRlbnRpYWwgdmFsaWRhdGlvbjogY2FsbGlu ZyB2YWxpZGF0b3IgZm9yIGF1dGhfbWV0aG9kPSVkIiwKKwkJCSAoaW50KSBNeUNsaWVudENvbm5l Y3Rpb25JbmZvLmF1dGhfbWV0aG9kKTsKKworCQlyZXN1bHQgPSB2YWxpZGF0b3IoKTsKKworCQlp ZiAoIXJlc3VsdCkKKwkJeworCQkJZWxvZyhERUJVRzEsICJjcmVkZW50aWFsIHZhbGlkYXRpb246 IGNyZWRlbnRpYWxzIGV4cGlyZWQiKTsKKwkJCXN0YXR1cyA9IENWU19FWFBJUkVEOwkvKiBWYWxp ZGF0b3IgcmVwb3J0cyBjcmVkZW50aWFscyBleHBpcmVkICovCisJCX0KKwkJZWxzZQorCQkJc3Rh dHVzID0gQ1ZTX1ZBTElEOworCisJCWlmIChuZWVkX3NuYXBzaG90KQorCQkJUG9wQWN0aXZlU25h cHNob3QoKTsKKworCQlpZiAoc3RhcnRlZF90cmFuc2FjdGlvbikKKwkJCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworCisJCXJldHVybiBzdGF0dXM7CisJfQorCVBHX0NBVENIKCk7CisJewor CQlpZiAobmVlZF9zbmFwc2hvdCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CisKKwkJaWYgKHN0 YXJ0ZWRfdHJhbnNhY3Rpb24pCisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkv KiBFcnJvciBkdXJpbmcgdmFsaWRhdGlvbiAqLworCQllbG9nKERFQlVHMSwgImNyZWRlbnRpYWwg dmFsaWRhdGlvbjogZXJyb3IgZHVyaW5nIHZhbGlkYXRpb24iKTsKKwkJRmx1c2hFcnJvclN0YXRl KCk7CisJCXJldHVybiBDVlNfRVJST1I7CisJfQorCVBHX0VORF9UUlkoKTsKKworCS8qIFZhbGlk YXRpb24gcGFzc2VkLCBjcmVkZW50aWFscyBhcmUgdmFsaWQgKi8KKwlyZXR1cm4gQ1ZTX1ZBTElE OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvcGFzc3dvcmQtdmFsaWRhdGUuYyBi L3NyYy9iYWNrZW5kL2xpYnBxL3Bhc3N3b3JkLXZhbGlkYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBlMDRkYjQ0N2NhCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2JhY2tlbmQvbGlicHEvcGFzc3dvcmQtdmFsaWRhdGUuYwpAQCAtMCwwICsxLDY4IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyoKKyogcGFzc3dvcmQtdmFsaWRhdGUuYworKgkgIFBhc3N3b3JkIHZh bGlkYXRpb24gZm9yIFBvc3RncmVTUUwKKyoKKyogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisqCisqIElERU5USUZJQ0FUSU9OCisqCSAgc3JjL2JhY2tlbmQvbGlicHEvcGFzc3dvcmQtdmFs aWRhdGUuYworKgorKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIK KworI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X2F1dGhpZC5oIgorI2luY2x1ZGUgImxpYnBxL2F1dGgtdmFsaWRhdGUuaCIKKwkvKiAjaW5jbHVk ZSAibGlicHEvbGlicHEtYmUuaCIgKi8KKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0 aWxzL3N5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCisKKy8qCisgKiBJ bml0aWFsaXplIHBhc3N3b3JkIHZhbGlkYXRpb24KKyAqLwordm9pZAorSW5pdGlhbGl6ZVBhc3N3 b3JkVmFsaWRhdGlvbih2b2lkKQoreworfQorCisvKgorICogVmFsaWRhdGUgcGFzc3dvcmQgY3Jl ZGVudGlhbHMgYnkgY2hlY2tpbmcgcm9sdmFsaWR1bnRpbAorICovCitib29sCit2YWxpZGF0ZV9w YXNzd29yZF9jcmVkZW50aWFscyh2b2lkKQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlEYXR1bQkJ cm9sdmFsaWR1bnRpbF9kYXR1bTsKKwlib29sCQl2YWxpZHVudGlsX251bGw7CisJVGltZXN0YW1w VHogdmFsaWRfdW50aWwgPSAwOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwg T2JqZWN0SWRHZXREYXR1bShHZXRTZXNzaW9uVXNlcklkKCkpKTsKKworCWlmIChIZWFwVHVwbGVJ c1ZhbGlkKHR1cGxlKSkKKwl7CisJCS8qIEdldCB0aGUgZXhwaXJhdGlvbiB0aW1lIGNvbHVtbiAq LworCQlyb2x2YWxpZHVudGlsX2RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKEFVVEhPSUQsIHR1cGxl LAorCQkJCQkJCQkJCQkgIEFudW1fcGdfYXV0aGlkX3JvbHZhbGlkdW50aWwsCisJCQkJCQkJCQkJ CSAgJnZhbGlkdW50aWxfbnVsbCk7CisJCWlmICghdmFsaWR1bnRpbF9udWxsKQorCQl7CisJCQl2 YWxpZF91bnRpbCA9IERhdHVtR2V0VGltZXN0YW1wVHoocm9sdmFsaWR1bnRpbF9kYXR1bSk7CisK KwkJCWlmICh2YWxpZF91bnRpbCA8IEdldEN1cnJlbnRUaW1lc3RhbXAoKSkKKwkJCXsKKwkJCQlS ZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCQlS ZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCQlyZXR1 cm4gZmFsc2U7CQkvKiBJZiB1c2VyIG5vdCBmb3VuZCwgY29uc2lkZXIgSW52YWxpZCAqLworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNv cC9wb3N0Z3Jlcy5jCmluZGV4IGQwMWEwOWRkMGM0Li5kNWM2ZDY1MDYzZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAjaW5jbHVk ZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgorI2luY2x1 ZGUgImxpYnBxL2F1dGgtdmFsaWRhdGUuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2lu Y2x1ZGUgIm1iL3N0cmluZ2luZm9fbWIuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKQEAgLTE4 NSw2ICsxODYsNyBAQCBzdGF0aWMgdm9pZCByZXBvcnRfcmVjb3ZlcnlfY29uZmxpY3QoUmVjb3Zl cnlDb25mbGljdFJlYXNvbiByZWFzb24pOwogc3RhdGljIHZvaWQgbG9nX2Rpc2Nvbm5lY3Rpb25z KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgZW5hYmxlX3N0YXRlbWVudF90aW1l b3V0KHZvaWQpOwogc3RhdGljIHZvaWQgZGlzYWJsZV9zdGF0ZW1lbnRfdGltZW91dCh2b2lkKTsK K3N0YXRpYyB2b2lkIEV4ZWN1dGVDcmVkZW50aWFsVmFsaWRhdGlvbkNoZWNrKHZvaWQpOwogCiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTEwNDksNiArMTA1MSw5IEBAIGV4ZWNfc2ltcGxlX3F1ZXJ5KGNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZykKIAkgKi8KIAlzdGFydF94YWN0X2NvbW1hbmQoKTsKIAorCWlm IChDcmVkZW50aWFsVmFsaWRhdGlvblBlbmRpbmcpCisJCUV4ZWN1dGVDcmVkZW50aWFsVmFsaWRh dGlvbkNoZWNrKCk7CisKIAkvKgogCSAqIFphcCBhbnkgcHJlLWV4aXN0aW5nIHVubmFtZWQgc3Rh dGVtZW50LiAgKFdoaWxlIG5vdCBzdHJpY3RseSBuZWNlc3NhcnksCiAJICogaXQgc2VlbXMgYmVz dCB0byBkZWZpbmUgc2ltcGxlLVF1ZXJ5IG1vZGUgYXMgaWYgaXQgdXNlZCB0aGUgdW5uYW1lZApA QCAtMTQzMCw2ICsxNDM1LDkgQEAgZXhlY19wYXJzZV9tZXNzYWdlKGNvbnN0IGNoYXIgKnF1ZXJ5 X3N0cmluZywJLyogc3RyaW5nIHRvIGV4ZWN1dGUgKi8KIAkgKi8KIAlzdGFydF94YWN0X2NvbW1h bmQoKTsKIAorCWlmIChDcmVkZW50aWFsVmFsaWRhdGlvblBlbmRpbmcpCisJCUV4ZWN1dGVDcmVk ZW50aWFsVmFsaWRhdGlvbkNoZWNrKCk7CisKIAkvKgogCSAqIFN3aXRjaCB0byBhcHByb3ByaWF0 ZSBjb250ZXh0IGZvciBjb25zdHJ1Y3RpbmcgcGFyc2V0cmVlcy4KIAkgKgpAQCAtMTcwNSw2ICsx NzEzLDkgQEAgZXhlY19iaW5kX21lc3NhZ2UoU3RyaW5nSW5mbyBpbnB1dF9tZXNzYWdlKQogCSAq LwogCXN0YXJ0X3hhY3RfY29tbWFuZCgpOwogCisJaWYgKENyZWRlbnRpYWxWYWxpZGF0aW9uUGVu ZGluZykKKwkJRXhlY3V0ZUNyZWRlbnRpYWxWYWxpZGF0aW9uQ2hlY2soKTsKKwogCS8qIFN3aXRj aCBiYWNrIHRvIG1lc3NhZ2UgY29udGV4dCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhNZXNz YWdlQ29udGV4dCk7CiAKQEAgLTIyMTcsNiArMjIyOCw5IEBAIGV4ZWNfZXhlY3V0ZV9tZXNzYWdl KGNvbnN0IGNoYXIgKnBvcnRhbF9uYW1lLCBsb25nIG1heF9yb3dzKQogCSAqLwogCXN0YXJ0X3hh Y3RfY29tbWFuZCgpOwogCisJaWYgKENyZWRlbnRpYWxWYWxpZGF0aW9uUGVuZGluZykKKwkJRXhl Y3V0ZUNyZWRlbnRpYWxWYWxpZGF0aW9uQ2hlY2soKTsKKwogCS8qCiAJICogSWYgd2UgcmUtaXNz dWUgYW4gRXhlY3V0ZSBwcm90b2NvbCByZXF1ZXN0IGFnYWluc3QgYW4gZXhpc3RpbmcgcG9ydGFs LAogCSAqIHRoZW4gd2UgYXJlIG9ubHkgZmV0Y2hpbmcgbW9yZSByb3dzIHJhdGhlciB0aGFuIGNv bXBsZXRlbHkgcmUtZXhlY3V0aW5nCkBAIC0yNjM1LDYgKzI2NDksOSBAQCBleGVjX2Rlc2NyaWJl X3N0YXRlbWVudF9tZXNzYWdlKGNvbnN0IGNoYXIgKnN0bXRfbmFtZSkKIAkgKi8KIAlzdGFydF94 YWN0X2NvbW1hbmQoKTsKIAorCWlmIChDcmVkZW50aWFsVmFsaWRhdGlvblBlbmRpbmcpCisJCUV4 ZWN1dGVDcmVkZW50aWFsVmFsaWRhdGlvbkNoZWNrKCk7CisKIAkvKiBTd2l0Y2ggYmFjayB0byBt ZXNzYWdlIGNvbnRleHQgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8oTWVzc2FnZUNvbnRleHQp OwogCkBAIC0yNzI3LDYgKzI3NDQsOSBAQCBleGVjX2Rlc2NyaWJlX3BvcnRhbF9tZXNzYWdlKGNv bnN0IGNoYXIgKnBvcnRhbF9uYW1lKQogCSAqLwogCXN0YXJ0X3hhY3RfY29tbWFuZCgpOwogCisJ aWYgKENyZWRlbnRpYWxWYWxpZGF0aW9uUGVuZGluZykKKwkJRXhlY3V0ZUNyZWRlbnRpYWxWYWxp ZGF0aW9uQ2hlY2soKTsKKwogCS8qIFN3aXRjaCBiYWNrIHRvIG1lc3NhZ2UgY29udGV4dCAqLwog CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhNZXNzYWdlQ29udGV4dCk7CiAKQEAgLTUyNzEsMyArNTI5 MSwzMyBAQCBkaXNhYmxlX3N0YXRlbWVudF90aW1lb3V0KHZvaWQpCiAJaWYgKGdldF90aW1lb3V0 X2FjdGl2ZShTVEFURU1FTlRfVElNRU9VVCkpCiAJCWRpc2FibGVfdGltZW91dChTVEFURU1FTlRf VElNRU9VVCwgZmFsc2UpOwogfQorCisvKgorICogUHJvY2VzcyBjcmVkZW50aWFsIHZhbGlkYXRp b24gaW4gZXhlY19zaW1wbGVfcXVlcnkKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gQ3JlZGVudGlh bFZhbGlkYXRpb25QZW5kaW5nIGZsYWcgaXMgc2V0CisgKi8KK3N0YXRpYyB2b2lkCitFeGVjdXRl Q3JlZGVudGlhbFZhbGlkYXRpb25DaGVjayh2b2lkKQoreworCVRpbWVzdGFtcFR6IG5leHRfY2hl Y2tfdGltZTsKKworCS8qIENsZWFyIHRoZSBmbGFnIGltbWVkaWF0ZWx5ICovCisJQ3JlZGVudGlh bFZhbGlkYXRpb25QZW5kaW5nID0gZmFsc2U7CisKKwkvKiBDaGVjayBjcmVkZW50aWFscyBpZiB3 ZSdyZSBpbiBhIHRyYW5zYWN0aW9uICovCisJaWYgKElzVHJhbnNhY3Rpb25TdGF0ZSgpKQorCXsK KwkJUHJvY2Vzc0NyZWRlbnRpYWxWYWxpZGF0aW9uKCk7CisKKwkJLyogUmUtZW5hYmxlIHRoZSB0 aW1lb3V0IGZvciBuZXh0IGNoZWNrICovCisJCWlmIChjcmVkZW50aWFsX3ZhbGlkYXRpb25fZW5h YmxlZCAmJiBjcmVkZW50aWFsX3ZhbGlkYXRpb25faW50ZXJ2YWwgPiAwKQorCQl7CisJCQkvKiBD YWxjdWxhdGUgbmV4dCB0aW1lb3V0IHRpbWUgYXMgY3VycmVudCB0aW1lICsgZnVsbCBpbnRlcnZh bCAqLworCQkJbmV4dF9jaGVja190aW1lID0gVGltZXN0YW1wVHpQbHVzTWlsbGlzZWNvbmRzKEdl dEN1cnJlbnRUaW1lc3RhbXAoKSwKKwkJCQkJCQkJCQkJCSAgIGNyZWRlbnRpYWxfdmFsaWRhdGlv bl9pbnRlcnZhbCAqIDEwMDApOworCisJCQkvKiBVc2UgdGhlIGV4aXN0aW5nIGNyZWRlbnRpYWwg dmFsaWRhdGlvbiB0aW1lb3V0IElEICovCisJCQllbmFibGVfdGltZW91dF9hdChDUkVERU5USUFM X1ZBTElEQVRJT05fVElNRU9VVCwgbmV4dF9jaGVja190aW1lKTsKKwkJfQorCX0KK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jIGIvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMKaW5kZXggMzZhZDcwOGIzNjAuLjc5ODEwNTZlM2U1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9pbml0L2dsb2JhbHMuYwpAQCAtMzQsNiArMzQsNyBAQCB2b2xhdGlsZSBzaWdfYXRvbWlj X3QgUXVlcnlDYW5jZWxQZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgUHJv Y0RpZVBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDaGVja0NsaWVudENv bm5lY3Rpb25QZW5kaW5nID0gZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2xpZW50Q29u bmVjdGlvbkxvc3QgPSBmYWxzZTsKK3ZvbGF0aWxlIHNpZ19hdG9taWNfdCBDcmVkZW50aWFsVmFs aWRhdGlvblBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFu c2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21p Y190IFRyYW5zYWN0aW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCBJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L3Bv c3Rpbml0LmMKaW5kZXggYjU5ZTA4NjA1Y2MuLjM3ZjFjMDczZDZjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9pbml0L3Bvc3Rpbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9wb3N0aW5pdC5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYl9y b2xlX3NldHRpbmcuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RhYmxlc3BhY2UuaCIKICNpbmNs dWRlICJsaWJwcS9hdXRoLmgiCisjaW5jbHVkZSAibGlicHEvYXV0aC12YWxpZGF0ZS5oIgogI2lu Y2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKQEAgLTg5LDYgKzkwLDcgQEAgc3RhdGljIHZvaWQgVHJhbnNhY3Rp b25UaW1lb3V0SGFuZGxlcih2b2lkKTsKIHN0YXRpYyB2b2lkIElkbGVTZXNzaW9uVGltZW91dEhh bmRsZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBJZGxlU3RhdHNVcGRhdGVUaW1lb3V0SGFuZGxlcih2 b2lkKTsKIHN0YXRpYyB2b2lkIENsaWVudENoZWNrVGltZW91dEhhbmRsZXIodm9pZCk7CitzdGF0 aWMgdm9pZCBDcmVkZW50aWFsVmFsaWRhdGlvblRpbWVvdXRIYW5kbGVyKHZvaWQpOwogc3RhdGlj IGJvb2wgVGhlcmVJc0F0TGVhc3RPbmVSb2xlKHZvaWQpOwogc3RhdGljIHZvaWQgcHJvY2Vzc19z dGFydHVwX29wdGlvbnMoUG9ydCAqcG9ydCwgYm9vbCBhbV9zdXBlcnVzZXIpOwogc3RhdGljIHZv aWQgcHJvY2Vzc19zZXR0aW5ncyhPaWQgZGF0YWJhc2VpZCwgT2lkIHJvbGVpZCk7CkBAIC03NzMs NiArNzc1LDggQEAgSW5pdFBvc3RncmVzKGNvbnN0IGNoYXIgKmluX2RibmFtZSwgT2lkIGRib2lk LAogCQlSZWdpc3RlclRpbWVvdXQoQ0xJRU5UX0NPTk5FQ1RJT05fQ0hFQ0tfVElNRU9VVCwgQ2xp ZW50Q2hlY2tUaW1lb3V0SGFuZGxlcik7CiAJCVJlZ2lzdGVyVGltZW91dChJRExFX1NUQVRTX1VQ REFURV9USU1FT1VULAogCQkJCQkJSWRsZVN0YXRzVXBkYXRlVGltZW91dEhhbmRsZXIpOworCQlS ZWdpc3RlclRpbWVvdXQoQ1JFREVOVElBTF9WQUxJREFUSU9OX1RJTUVPVVQsCisJCQkJCQlDcmVk ZW50aWFsVmFsaWRhdGlvblRpbWVvdXRIYW5kbGVyKTsKIAl9CiAKIAkvKgpAQCAtMTIyNiw2ICsx MjMwLDkgQEAgSW5pdFBvc3RncmVzKGNvbnN0IGNoYXIgKmluX2RibmFtZSwgT2lkIGRib2lkLAog CS8qIEluaXRpYWxpemUgdGhpcyBiYWNrZW5kJ3Mgc2Vzc2lvbiBzdGF0ZS4gKi8KIAlJbml0aWFs aXplU2Vzc2lvbigpOwogCisJLyogSW5pdGlhbGl6ZSBjcmVkZW50aWFsIHZhbGlkYXRpb24gc3lz dGVtICovCisJSW5pdGlhbGl6ZUNyZWRlbnRpYWxWYWxpZGF0aW9uKCk7CisKIAkvKgogCSAqIElm IHRoaXMgaXMgYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbiwgbG9hZCBhbnkgbGlicmFyaWVzIHRoYXQg c2hvdWxkIGJlCiAJICogcHJlbG9hZGVkIGF0IGJhY2tlbmQgc3RhcnQuICBTaW5jZSB0aG9zZSBh cmUgZGV0ZXJtaW5lZCBieSBHVUNzLCB0aGlzCkBAIC0xNDQwLDYgKzE0NDcsMTIgQEAgQ2xpZW50 Q2hlY2tUaW1lb3V0SGFuZGxlcih2b2lkKQogCVNldExhdGNoKE15TGF0Y2gpOwogfQogCitzdGF0 aWMgdm9pZAorQ3JlZGVudGlhbFZhbGlkYXRpb25UaW1lb3V0SGFuZGxlcih2b2lkKQoreworCUNy ZWRlbnRpYWxWYWxpZGF0aW9uUGVuZGluZyA9IHRydWU7Cit9CisKIC8qCiAgKiBSZXR1cm5zIHRy dWUgaWYgYXQgbGVhc3Qgb25lIHJvbGUgaXMgZGVmaW5lZCBpbiB0aGlzIGRhdGFiYXNlIGNsdXN0 ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL2F1dGgtdmFsaWRhdGUuaCBi L3NyYy9pbmNsdWRlL2xpYnBxL2F1dGgtdmFsaWRhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uOWQ0MTEyNTUzN2MKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5j bHVkZS9saWJwcS9hdXRoLXZhbGlkYXRlLmgKQEAgLTAsMCArMSw2MiBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogYXV0aC12YWxpZGF0ZS5oCisgKgkgIEludGVyZmFjZSBmb3IgYXV0aGVu dGljYXRpb24gY3JlZGVudGlhbCB2YWxpZGF0aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2Yg Q2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2xpYnBxL2F1dGgtdmFsaWRhdGUuaAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIEFVVEhfVkFMSURBVEVfSAorI2RlZmlu ZSBBVVRIX1ZBTElEQVRFX0gKKworI2luY2x1ZGUgImxpYnBxL2xpYnBxLWJlLmgiCisjaW5jbHVk ZSAibGlicHEvcHJvdG9jb2wuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIK KyNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCisKKy8q IERlZmluZSBhdXRoIG1ldGhvZCBjb25zdGFudHMgbmVlZGVkIGZvciBjcmVkZW50aWFsIHZhbGlk YXRpb24gKi8KKyNkZWZpbmUgQVVUSF9SRVFfU0NSQU1fU0hBXzI1NiAyMAkvKiBTQ1JBTSBTSEEt MjU2IGF1dGhlbnRpY2F0aW9uICovCisjZGVmaW5lIEFVVEhfUkVRX0xBU1QgMjEJCS8qIE9uZSBw YXN0IHRoZSBsYXN0IGF1dGggcmVxdWVzdCBjb2RlICovCisKKy8qIFByb2Nlc3MgY3JlZGVudGlh bCB2YWxpZGF0aW9uICovCit2b2lkCQlQcm9jZXNzQ3JlZGVudGlhbFZhbGlkYXRpb24odm9pZCk7 CisKKy8qIE1ldGhvZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiAqLwordm9pZAkJSW5pdGlhbGl6 ZVBhc3N3b3JkVmFsaWRhdGlvbih2b2lkKTsKKworLyogR1VDIHZhcmlhYmxlcyAqLworZXh0ZXJu IGJvb2wgY3JlZGVudGlhbF92YWxpZGF0aW9uX2VuYWJsZWQ7CitleHRlcm4gaW50CWNyZWRlbnRp YWxfdmFsaWRhdGlvbl9pbnRlcnZhbDsKKworLyogQ29tbW9uIGNyZWRlbnRpYWwgdmFsaWRhdGlv biBjYWxsYmFjayBwcm90b3R5cGUgKi8KKworLyogQ29tbW9uIGNyZWRlbnRpYWwgdmFsaWRhdGlv biBjYWxsYmFjayBwcm90b3R5cGUgKi8KK3R5cGVkZWYgYm9vbCAoKkNyZWRlbnRpYWxWYWxpZGF0 aW9uQ2FsbGJhY2spICgpOworCisvKiBDcmVkZW50aWFsIHZhbGlkYXRpb24gc3RhdHVzICovCit0 eXBlZGVmIGVudW0KK3sKKwlDVlNfVkFMSUQsCQkJCQkvKiBDcmVkZW50aWFscyBhcmUgdmFsaWQg Ki8KKwlDVlNfRVhQSVJFRCwJCQkJLyogQ3JlZGVudGlhbHMgaGF2ZSBleHBpcmVkICovCisJQ1ZT X0VSUk9SCQkJCQkvKiBFcnJvciBkdXJpbmcgdmFsaWRhdGlvbiAqLworfUNyZWRlbnRpYWxWYWxp ZGF0aW9uU3RhdHVzOworCisvKiBJbml0aWFsaXplIGNyZWRlbnRpYWwgdmFsaWRhdGlvbiBzeXN0 ZW0gKi8KK3ZvaWQgSW5pdGlhbGl6ZUNyZWRlbnRpYWxWYWxpZGF0aW9uKHZvaWQpOworCisvKiBS ZWdpc3RlciBhIHZhbGlkYXRpb24gY2FsbGJhY2sgZm9yIGEgc3BlY2lmaWMgYXV0aGVudGljYXRp b24gbWV0aG9kICovCit2b2lkIFJlZ2lzdGVyQ3JlZGVudGlhbFZhbGlkYXRvcihpbnQgYXV0aG1l dGhvZCwKKwkJCQkJCQkJCQlDcmVkZW50aWFsVmFsaWRhdGlvbkNhbGxiYWNrIHZhbGlkYXRvcik7 CisKKy8qIENoZWNrIGNyZWRlbnRpYWwgdmFsaWRpdHkgKi8KK0NyZWRlbnRpYWxWYWxpZGF0aW9u U3RhdHVzIENoZWNrQ3JlZGVudGlhbFZhbGlkaXR5KHZvaWQpOworCisvKiBWYWxpZGF0aW9uIGNh bGxiYWNrIGZvciBwYXNzd29yZCAqLworYm9vbCB2YWxpZGF0ZV9wYXNzd29yZF9jcmVkZW50aWFs cyh2b2lkKTsKKworI2VuZGlmCQkJCQkJCS8qIEFVVEhfVkFMSURBVEVfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRl eCBmMTZmMzU2NTliOS4uOTYwODVkZDdjOWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2Nh ZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC05OSw2ICs5OSw3IEBAIGV4 dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVN0YXRzVXBkYXRlVGlt ZW91dFBlbmRpbmc7CiAKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3Qg Q2hlY2tDbGllbnRDb25uZWN0aW9uUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGls ZSBzaWdfYXRvbWljX3QgQ2xpZW50Q29ubmVjdGlvbkxvc3Q7CitleHRlcm4gUEdETExJTVBPUlQg dm9sYXRpbGUgc2lnX2F0b21pY190IENyZWRlbnRpYWxWYWxpZGF0aW9uUGVuZGluZzsKIAogLyog dGhlc2UgYXJlIG1hcmtlZCB2b2xhdGlsZSBiZWNhdXNlIHRoZXkgYXJlIGV4YW1pbmVkIGJ5IHNp Z25hbCBoYW5kbGVyczogKi8KIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSB1aW50MzIgSW50 ZXJydXB0SG9sZG9mZkNvdW50OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvdGltZW91 dC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvdGltZW91dC5oCmluZGV4IDA5NjViNTkwYjM0Li5kNDY3 M2E4YTQwOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvdGltZW91dC5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL3RpbWVvdXQuaApAQCAtMzYsNiArMzYsNyBAQCB0eXBlZGVmIGVudW0g VGltZW91dElkCiAJSURMRV9TVEFUU19VUERBVEVfVElNRU9VVCwKIAlDTElFTlRfQ09OTkVDVElP Tl9DSEVDS19USU1FT1VULAogCVNUQVJUVVBfUFJPR1JFU1NfVElNRU9VVCwKKwlDUkVERU5USUFM X1ZBTElEQVRJT05fVElNRU9VVCwKIAkvKiBGaXJzdCB1c2VyLWRlZmluYWJsZSB0aW1lb3V0IHJl YXNvbiAqLwogCVVTRVJfVElNRU9VVCwKIAkvKiBNYXhpbXVtIG51bWJlciBvZiB0aW1lb3V0IHJl YXNvbnMgKi8K --000000000000e2f8cc064b3e3c69--