From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Justin Burkett Newsgroups: gmane.emacs.devel Subject: Re: Proposed patch for lookup-key Date: Fri, 15 Dec 2017 09:55:20 -0500 Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="f403045c1a5893613a056062300b" X-Trace: blaine.gmane.org 1513349783 19359 195.159.176.226 (15 Dec 2017 14:56:23 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 15 Dec 2017 14:56:23 +0000 (UTC) Cc: emacs-devel To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Dec 15 15:56:17 2017 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ePrPM-0004aD-V3 for ged-emacs-devel@m.gmane.org; Fri, 15 Dec 2017 15:56:17 +0100 Original-Received: from localhost ([::1]:46952 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ePrPU-0005ME-6t for ged-emacs-devel@m.gmane.org; Fri, 15 Dec 2017 09:56:24 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:38314) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ePrOa-0004t3-30 for emacs-devel@gnu.org; Fri, 15 Dec 2017 09:55:30 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ePrOV-0003r8-Gh for emacs-devel@gnu.org; Fri, 15 Dec 2017 09:55:28 -0500 Original-Received: from mail-wm0-x230.google.com ([2a00:1450:400c:c09::230]:38239) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ePrOU-0003qC-P6 for emacs-devel@gnu.org; Fri, 15 Dec 2017 09:55:23 -0500 Original-Received: by mail-wm0-x230.google.com with SMTP id 64so18070221wme.3 for ; Fri, 15 Dec 2017 06:55:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=burkett-cc.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=ghW791hBEhEoaX3t7bMz70hZfI5z7ItMDzIZW5Gf4Lo=; b=mwRmHZTS1OPyPlZxGurQ0o0Zj8SYU58q2AuxNQNsw9gPQv8bYRCMoezmOxGPVCESl7 rVfLkH1iaGEUW4Fz8wReWkFm+GsttAvqnYDoPSQFPOT/IwD6ih/Z9HBafrtJz/O3z2uD mPx1acpQjJgT94RiYCJzTJE8YJAGmOnIvusqXfu+A7e8qhi6fp1RKj0ZrMU2jP9uwh5a qThwmebFddFer6mg6uWWT4XGZgzyMU1O98xBd7rZRfMRbT7Zls4Rx/dbYaMazbOB60AY aeoV8ktOw62LdMtHAX14JAYO1gUAkJJhSWVRqYDgTlHvjhdFJ/hvyROFgZ2TWTI0EL/k gF6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=ghW791hBEhEoaX3t7bMz70hZfI5z7ItMDzIZW5Gf4Lo=; b=ecwrrgx5qF/iEnuG3ZDisP983FdrzOax1vda83iwsbLu6lyOLDdIbHE29o2wRitOV6 E9nJUcjqlEo4/YlGAwTag+u4PvfJDC1SAPcbiNxlzY8wTeEFeqjTvVl6EpX5OzChadhu C/ITpvxQAorGglCPVdcG9/+iOz24NWqwvhPIoAjdq6gFeoBp082oCgVSStM3U9AGfGIm TWY1drWVqVTfiAskpoXe5yLLj2MdlOCalq64/qtrb74XoHv9oQ0pj1PkywoU/OvQtjxB V7tK8iIu8zfJU2HwjTz5wgmnBZHfTDvYK18XSBKaNOhfc5OsB8CDu+pS1tznMXIohu+S SiqQ== X-Gm-Message-State: AKGB3mKOvyzwG1To/q9QxvlDXjKejR0wIAMIIbh3GUVM3zjlS2KyIWcZ MFhXQWVbPrB6r/OneXB1QK6BYmtYHb6WINoQUcO2Jrm9V7Y= X-Google-Smtp-Source: ACJfBothDw8++pUCLjrYEfo5xyffQb+FC/eSGxdo98fXhQ1J1vnXLixTwHF0AJA1WbXnYdf/RM31rzbTtAIpIn7tRFk= X-Received: by 10.80.181.83 with SMTP id z19mr17666931edd.48.1513349721568; Fri, 15 Dec 2017 06:55:21 -0800 (PST) Original-Received: by 10.80.132.101 with HTTP; Fri, 15 Dec 2017 06:55:20 -0800 (PST) X-Originating-IP: [152.17.138.157] In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::230 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:221097 Archived-At: --f403045c1a5893613a056062300b Content-Type: multipart/alternative; boundary="f403045c1a589361360560623009" --f403045c1a589361360560623009 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Stefan, Thanks for the feedback. I squashed all of my changes into a new patch which is attached. I responded to your comments below. You don't need to say "Adjust calls to" for all those functions. > You can just say something like: > (access_keymap_1): Add 'menus' arg; adjust all calls. > Otherwise the actual meat of the change gets drowned within all the > minor mechanical adjustments. I thought it was overkill, but I wasn't sure if every line should have a comment. Fixed > @@ -368,7 +368,8 @@ Return PARENT. PARENT should be nil or another > keymap. */) > > static Lisp_Object > > access_keymap_1 (Lisp_Object map, Lisp_Object idx, > > - bool t_ok, bool noinherit, bool autoload) > > + bool t_ok, bool noinherit, bool autoload, > > + bool menus) > Please update the comment that's just before that function to document > this `menus` argument. Done. > static Lisp_Object > > -get_keyelt (Lisp_Object object, bool autoload) > > +get_keyelt (Lisp_Object object, bool autoload, bool menus) > > { > > while (1) > > { > > - if (!(CONSP (object))) > > - /* This is really the value. */ > > + if (!(CONSP (object)) || menus) > > + /* This is really the value or we do not want to process > > + menu-items. */ > > return object; > If `menus` is true, then we will always just return `object` unchanged. > So an alternative would be to test `menus` before calling this function > (so we don't need to add the `menus` argument to this function). > Probably doesn't make much of a difference, tho. I agree. I don't add the argument anymore. Fewer calls to update this way... > +A non-nil value for MENUS makes `lookup-key` return full menu-items > > +instead of just the associated definition. */) > Elements like (STRING . COMMAND) aren't only used for menus, so I'd > prefer to use another name. I don't we actually have a good name at > hand for that, but a common name used elsewhere for those objects is > "menu item", so maybe we could use that. I don't have a good name either, but I went with your menu item suggestion. BTW, one problem (and one of the reasons why I didn't implement the > feature back then using an approach like the one you suggest) is that > this treats a "menu item" as opaque (meaning it hides everything in > lower keymaps). Yet if we do let get_keyelt do its job to look inside > the menu-item it may find that the binding is sometimes nil (e.g. for > bindings which are made dynamically conditional using a :filter > function), and other times we'll find a binding which is a keymap which > is then combined with other keymaps found in lower-precedence keymaps > (e.g. some menu bar menus have entries provided by global-map as well as > from other keymap). I understand that. This however is much closer to what I want. I want to be able to inspect keymaps and provide "automatic" descriptions of key bindings. I'm most interested in the (STRING . DEF) form for my purpose, but I think having access to the full menu item might be useful some day. Best, Justin On Thu, Dec 14, 2017 at 9:57 PM, Stefan Monnier wrote: > [ I remember thinking about this need many years ago and thinking "bah, > I'll get to it when the need becomes pressing enough, but not now". > > FWIW currently my "best" answer in Elisp for the problem you're > suggesting to solve is to `lookup-key` on the first n-1 events and > then use `map-keymap` to traverse the resulting final keymap looking > for the n=E1=B5=97=CA=B0 event. ] > > > I'm wondering if the attached patch would be acceptable. The idea was t= o > > add an optional argument to lookup-key to prevent it from stripping thi= s > > information about the key bindings. > > Comments below. > > > Stefan > > > > * src/keyboard.c (read_char): Adjust call to access_keymap > > (menu_bar_items): Adjust call to access_keymap > > (tool_bar_items): Adjust call to access_keymap > > (follow_key): Adjust call to access_keymap > > (access_keymap_keyremap): Adjust call to access_keymap > > * src/keymap.c: Change get_keyelt declaration > > (access_keymap_1): Add menus arg and adjust recursive calls > > (get_keyelt): Add menus arg > > (Fdefine_key): Adjust call to access_keymap > > (Fcommand_remapping): Adjust call to Flookup_key > > (Flookup_key): Add menus arg and adjust call to access_keymap > > (Fkey_binding): Adjust call to Flookup_key > > (Flocal_key_binding): Adjust call to Flookup_key > > (Fglobal_key_binding): Adjust call to Flookup_key > > (Fminor_mode_key_binding): Adjust call to Flookup_key > > (accessible_keymaps_1): Adjust call to get_keyelt > > (Faccessible_keymaps): Adjust call to Flookup_key > > (shadow_lookup): Adjust call to Flookup_key > > (where_is_internal_1): Adjust call to get_keyelt > > (describe_map_tree): Adjust call to Flookup_key > > (describe_map): Adjust calls to get_keyelt and Flookup_key > > (describe_vector): Adjust calls to get_keyelt and Flookup_key > > * src/keymap.h: Adjust access_keymap declaration > > You don't need to say "Adjust calls to" for all those functions. > You can just say something like: > > (access_keymap_1): Add 'menus' arg; adjust all calls. > > Otherwise the actual meat of the change gets drowned within all the > minor mechanical adjustments. > > > @@ -368,7 +368,8 @@ Return PARENT. PARENT should be nil or another > keymap. */) > > > static Lisp_Object > > access_keymap_1 (Lisp_Object map, Lisp_Object idx, > > - bool t_ok, bool noinherit, bool autoload) > > + bool t_ok, bool noinherit, bool autoload, > > + bool menus) > > Please update the comment that's just before that function to document > this `menus` argument. > > > static Lisp_Object > > -get_keyelt (Lisp_Object object, bool autoload) > > +get_keyelt (Lisp_Object object, bool autoload, bool menus) > > { > > while (1) > > { > > - if (!(CONSP (object))) > > - /* This is really the value. */ > > + if (!(CONSP (object)) || menus) > > + /* This is really the value or we do not want to process > > + menu-items. */ > > return object; > > If `menus` is true, then we will always just return `object` unchanged. > So an alternative would be to test `menus` before calling this function > (so we don't need to add the `menus` argument to this function). > Probably doesn't make much of a difference, tho. > > > +A non-nil value for MENUS makes `lookup-key` return full menu-items > > +instead of just the associated definition. */) > > Elements like (STRING . COMMAND) aren't only used for menus, so I'd > prefer to use another name. I don't we actually have a good name at > hand for that, but a common name used elsewhere for those objects is > "menu item", so maybe we could use that. > > BTW, one problem (and one of the reasons why I didn't implement the > feature back then using an approach like the one you suggest) is that > this treats a "menu item" as opaque (meaning it hides everything in > lower keymaps). Yet if we do let get_keyelt do its job to look inside > the menu-item it may find that the binding is sometimes nil (e.g. for > bindings which are made dynamically conditional using a :filter > function), and other times we'll find a binding which is a keymap which > is then combined with other keymaps found in lower-precedence keymaps > (e.g. some menu bar menus have entries provided by global-map as well as > from other keymap). > > To give a concrete example, > > (lookup-key (current-active-maps) [menu-bar] nil 'menu-item) > > could return a menu-item containing a keymap with just one element (the > major mode's menu, or maybe one of the minor mode's menu), whereas > > (lookup-key (current-active-maps) [menu-bar]) > > returns a keymap with many more elements (all the top-level menus, > including those from the global map, those from the major mode and > those from the minor modes). > > Solving this problem is a lot of work (because of all the different > possible cases), and will rarely make a difference, so I'm not sure that > it's a valid argument against your patch. > > > Stefan > > > --f403045c1a589361360560623009 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Stefan,=C2=A0

Thanks for the feedback. I squash= ed all of my changes into a new patch which is attached. I responded to you= r comments below.=C2=A0


You don't need to say "Adjust calls to" for all = those functions.
You can just sa= y something like:
=C2=A0 =C2=A0 (access_keymap_1): Add 'menus' arg; adju= st all calls.
Otherwise the actual meat of the change gets drowned within all th= e
minor mechanical adjustments.<= /span>

I thought it was overkill, but I was= n't sure if every line should have a comment. Fixed

> @@ -368,7 +368,8 @@ Return PARENT.=C2=A0 PARENT should be nil= or another keymap.=C2=A0 */)
>=C2=A0 static Lisp_Object
>=C2=A0 access_keymap_1 (Lisp_Object map, Lisp_Ob= ject idx,
> -=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 bool t_ok, bool noinherit, bool autoload= )
> +=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 bool t_ok, bool noinherit, bool autoload,
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0bool menus)
Please update the comment that's jus= t before that function to document
this `menus` argument.

Done.=C2= =A0

= =C2=A0>=C2=A0 static Lisp_Object
> -get_keyelt (Lisp_Object object, = bool autoload)
> +get_keyelt = (Lisp_Object object, bool autoload, bool menus)
>=C2=A0 {
>= ;=C2=A0 =C2=A0 while (1)
>=C2= =A0 =C2=A0 =C2=A0 {
> -=C2=A0= =C2=A0 =C2=A0 if (!(CONSP (object)))
> -=C2=A0 =C2=A0 =C2=A0/* This is really the value.=C2=A0 */
> +=C2=A0 =C2=A0 =C2=A0 if (!(CONS= P (object)) || menus)
> +=C2= =A0 =C2=A0 =C2=A0/* This is really the value or we do not want to process> +=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0menu-items.=C2=A0 */
>=C2=A0 =C2=A0 =C2=A0 =C2=A0return object;
If `menus` is true, then we wil= l always just return `object` unchanged.
So an alternative would be to test `menus` before calling this fun= ction
(so we don't need to a= dd the `menus` argument to this function).
Probably doesn't make much of a difference, tho.

I agree. I don't add the argument anymore. = Fewer calls to update this way...=C2=A0

> +A non-nil value for MENUS makes `lookup-key` return full menu-ite= ms
> +instead of just the ass= ociated definition. */)
Elements like (STRING . COMMAND) aren't only used fo= r menus, so I'd
prefer to us= e another name.=C2=A0 I don't we actually have a good name at
hand for that, but a common name used els= ewhere for those objects is
&quo= t;menu item", so maybe we could use that.

=
I don't have a good name either, but I went with your menu i= tem suggestion.=C2=A0

BTW, one = problem (and one of the reasons why I didn't implement the
feature back then using an approach like the= one you suggest) is that
this t= reats a "menu item" as opaque (meaning it hides everything in
=
lower keymaps).=C2=A0 Yet if we do = let get_keyelt do its job to look inside
the menu-item it may find that the binding is sometimes nil (e.g. = for
bindings which are made dyna= mically conditional using a :filter
function), and other times we'll find a binding which is a keymap w= hich
is then combined with other= keymaps found in lower-precedence keymaps
(e.g. some menu bar menus have entries provided by global-map as= well as
from other keymap).

I understand that. This however is much= closer to what I want. I want to be able to inspect keymaps and provide &q= uot;automatic" descriptions of key bindings. I'm most interested i= n the (STRING . DEF) form for my purpose, but I think having access to the = full menu item might be useful some day.=C2=A0

Bes= t,=C2=A0
Justin
=C2=A0

On Thu, Dec 14, 2017 at 9:57 PM,= Stefan Monnier <monnier@iro.umontreal.ca> wrote:
=
[ I remember thinking about this need many y= ears ago and thinking "bah,
=C2=A0 I'll get to it when the need becomes pressing enough, but not no= w".

=C2=A0 FWIW currently my "best" answer in Elisp for the problem y= ou're
=C2=A0 suggesting to solve is to `lookup-key` on the first n-1 events and =C2=A0 then use `map-keymap` to traverse the resulting final keymap looking=
=C2=A0 for the n=E1=B5=97=CA=B0 event.=C2=A0 ]

> I'm wondering if the attached patch would be acceptable. The idea = was to
> add an optional argument to lookup-key to prevent it from stripping th= is
> information about the key bindings.

Comments below.


=C2=A0 =C2=A0 =C2=A0 =C2=A0 Stefan


> * src/keyboard.c (read_char): Adjust call to access_keymap
> (menu_bar_items): Adjust call to access_keymap
> (tool_bar_items): Adjust call to access_keymap
> (follow_key): Adjust call to access_keymap
> (access_keymap_keyremap): Adjust call to access_keymap
> * src/keymap.c: Change get_keyelt declaration
> (access_keymap_1): Add menus arg and adjust recursive calls
> (get_keyelt): Add menus arg
> (Fdefine_key): Adjust call to access_keymap
> (Fcommand_remapping): Adjust call to Flookup_key
> (Flookup_key): Add menus arg and adjust call to access_keymap
> (Fkey_binding): Adjust call to Flookup_key
> (Flocal_key_binding): Adjust call to Flookup_key
> (Fglobal_key_binding): Adjust call to Flookup_key
> (Fminor_mode_key_binding): Adjust call to Flookup_key
> (accessible_keymaps_1): Adjust call to get_keyelt
> (Faccessible_keymaps): Adjust call to Flookup_key
> (shadow_lookup): Adjust call to Flookup_key
> (where_is_internal_1): Adjust call to get_keyelt
> (describe_map_tree): Adjust call to Flookup_key
> (describe_map): Adjust calls to get_keyelt and Flookup_key
> (describe_vector): Adjust calls to get_keyelt and Flookup_key
> * src/keymap.h: Adjust access_keymap declaration

You don't need to say "Adjust calls to" for all those functio= ns.
You can just say something like:

=C2=A0 =C2=A0 (access_keymap_1): Add 'menus' arg; adjust all calls.=

Otherwise the actual meat of the change gets drowned within all the
minor mechanical adjustments.

> @@ -368,7 +368,8 @@ Return PARENT.=C2=A0 PARENT should be nil or anoth= er keymap.=C2=A0 */)

>=C2=A0 static Lisp_Object
>=C2=A0 access_keymap_1 (Lisp_Object map, Lisp_Object idx,
> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 bool t_ok, bool noin= herit, bool autoload)
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 bool t_ok, bool noin= herit, bool autoload,
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bool me= nus)

Please update the comment that's just before that function to document<= br> this `menus` argument.

>=C2=A0 static Lisp_Object
> -get_keyelt (Lisp_Object object, bool autoload)
> +get_keyelt (Lisp_Object object, bool autoload, bool menus)
>=C2=A0 {
>=C2=A0 =C2=A0 while (1)
>=C2=A0 =C2=A0 =C2=A0 {
> -=C2=A0 =C2=A0 =C2=A0 if (!(CONSP (object)))
> -=C2=A0 =C2=A0 =C2=A0/* This is really the value.=C2=A0 */
> +=C2=A0 =C2=A0 =C2=A0 if (!(CONSP (object)) || menus)
> +=C2=A0 =C2=A0 =C2=A0/* This is really the value or we do not want to = process
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0menu-items.=C2=A0 */
>=C2=A0 =C2=A0 =C2=A0 =C2=A0return object;

If `menus` is true, then we will always just return `object` unchanged.
So an alternative would be to test `menus` before calling this function
(so we don't need to add the `menus` argument to this function).
Probably doesn't make much of a difference, tho.

> +A non-nil value for MENUS makes `lookup-key` return full menu-items > +instead of just the associated definition. */)

Elements like (STRING . COMMAND) aren't only used for menus, so I'd=
prefer to use another name.=C2=A0 I don't we actually have a good name = at
hand for that, but a common name used elsewhere for those objects is
"menu item", so maybe we could use that.

BTW, one problem (and one of the reasons why I didn't implement the
feature back then using an approach like the one you suggest) is that
this treats a "menu item" as opaque (meaning it hides everything = in
lower keymaps).=C2=A0 Yet if we do let get_keyelt do its job to look inside=
the menu-item it may find that the binding is sometimes nil (e.g. for
bindings which are made dynamically conditional using a :filter
function), and other times we'll find a binding which is a keymap which=
is then combined with other keymaps found in lower-precedence keymaps
(e.g. some menu bar menus have entries provided by global-map as well as from other keymap).

To give a concrete example,

=C2=A0 =C2=A0 (lookup-key (current-active-maps) [menu-bar] nil 'menu-it= em)

could return a menu-item containing a keymap with just one element (the
major mode's menu, or maybe one of the minor mode's menu), whereas<= br>
=C2=A0 =C2=A0 (lookup-key (current-active-maps) [menu-bar])

returns a keymap with many more elements (all the top-level menus,
including those from the global map, those from the major mode and
those from the minor modes).

Solving this problem is a lot of work (because of all the different
possible cases), and will rarely make a difference, so I'm not sure tha= t
it's a valid argument against your patch.


=C2=A0 =C2=A0 =C2=A0 =C2=A0 Stefan



--f403045c1a589361360560623009-- --f403045c1a5893613a056062300b Content-Type: application/octet-stream; name="0001-Allow-lookup-key-and-key-binding-to-return-full-menu.patch" Content-Disposition: attachment; filename="0001-Allow-lookup-key-and-key-binding-to-return-full-menu.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jb81cdul0 RnJvbSBmYjg1Yzc3ZjJlZGRhNzg2NDM3OTNjODIxYjhhYTA3ZGJkOGIwODM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKdXN0aW4gQnVya2V0dCA8anVzdGluQGJ1cmtldHQuY2M+CkRh dGU6IFRodSwgMTQgRGVjIDIwMTcgMTQ6MjA6NDUgLTA1MDAKU3ViamVjdDogW1BBVENIXSBBbGxv dyBsb29rdXAta2V5IGFuZCBrZXktYmluZGluZyB0byByZXR1cm4gZnVsbCBtZW51LWl0ZW1zCgoq IHNyYy9rZXltYXAuYyAoYWNjZXNzX2tleW1hcCk6ICBBZGQgbWVudV9pdGVtcyBhcmcgYW5kIGFk anVzdCBhbGwgY2FsbHMuCihhY2Nlc3Nfa2V5bWFwXzEpOiBBZGQgbWVudV9pdGVtcyBhcmcgYW5k IGFkanVzdCBhbGwgY2FsbHMuCihGbG9va3VwX2tleSk6IEFkZCBtZW51X2l0ZW1zIGFyZyBhbmQg YWRqdXN0IGFsbCBjYWxscy4KKEZkZWZpbmVfa2V5KToKKEZjb21tYW5kX3JlbWFwcGluZyk6CihG a2V5X2JpbmRpbmcpOiBBZGQgbWVudV9pdGVtcyBhcmcgYW5kIGFkanVzdCBhbGwgY2FsbHMuCihG bG9jYWxfa2V5X2JpbmRpbmcpOgooRmdsb2JhbF9rZXlfYmluZGluZyk6CihGbWlub3JfbW9kZV9r ZXlfYmluZGluZyk6CihGYWNjZXNzaWJsZV9rZXltYXBzKToKKHNoYWRvd19sb29rdXApOgooZGVz Y3JpYmVfbWFwX3RyZWUpOgooZGVzY3JpYmVfbWFwKToKKGRlc2NyaWJlX3ZlY3Rvcik6Ciogc3Jj L2tleWJvYXJkLmMgKHJlYWRfY2hhcik6CihtZW51X2Jhcl9pdGVtcyk6CihwYXJzZV9tZW51X2l0 ZW0pOgoodG9vbF9iYXJfaXRlbXMpOgooZm9sbG93X2tleSk6CihhY2Nlc3Nfa2V5bWFwX2tleXJl bWFwKToKKiBzcmMva2V5bWFwLmg6IEZpeCBhY2Nlc3Nfa2V5bWFwIGRlY2xhcmF0aW9uCi0tLQog c3JjL2tleWJvYXJkLmMgfCAxMiArKysrLS0tLS0KIHNyYy9rZXltYXAuYyAgIHwgNzcgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3Jj L2tleW1hcC5oICAgfCAgMiArLQogMyBmaWxlcyBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCAz NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMva2V5Ym9hcmQuYyBiL3NyYy9rZXlib2Fy ZC5jCmluZGV4IDM3NWFhNGY2MDYuLmM2ZjIzNWZiOGIgMTAwNjQ0Ci0tLSBhL3NyYy9rZXlib2Fy ZC5jCisrKyBiL3NyYy9rZXlib2FyZC5jCkBAIC0yODQxLDcgKzI4NDEsNyBAQCByZWFkX2NoYXIg KGludCBjb21tYW5kZmxhZywgTGlzcF9PYmplY3QgbWFwLAogICAgICBhbmQgbG9vcCBhcm91bmQg dG8gcmVhZCBhbm90aGVyIGV2ZW50LiAgKi8KICAgc2F2ZSA9IFZxdWl0X2ZsYWc7CiAgIFZxdWl0 X2ZsYWcgPSBRbmlsOwotICB0ZW0gPSBhY2Nlc3Nfa2V5bWFwIChnZXRfa2V5bWFwIChWc3BlY2lh bF9ldmVudF9tYXAsIDAsIDEpLCBjLCAwLCAwLCAxKTsKKyAgdGVtID0gYWNjZXNzX2tleW1hcCAo Z2V0X2tleW1hcCAoVnNwZWNpYWxfZXZlbnRfbWFwLCAwLCAxKSwgYywgMCwgMCwgMSwgMCk7CiAg IFZxdWl0X2ZsYWcgPSBzYXZlOwogCiAgIGlmICghTklMUCAodGVtKSkKQEAgLTc1MDMsNyArNzUw Myw3IEBAIG1lbnVfYmFyX2l0ZW1zIChMaXNwX09iamVjdCBvbGQpCiAgIGZvciAobWFwbm8gPSBu bWFwcyAtIDE7IG1hcG5vID49IDA7IG1hcG5vLS0pCiAgICAgaWYgKCFOSUxQIChtYXBzW21hcG5v XSkpCiAgICAgICB7Ci0JZGVmID0gZ2V0X2tleW1hcCAoYWNjZXNzX2tleW1hcCAobWFwc1ttYXBu b10sIFFtZW51X2JhciwgMSwgMCwgMSksCisJZGVmID0gZ2V0X2tleW1hcCAoYWNjZXNzX2tleW1h cCAobWFwc1ttYXBub10sIFFtZW51X2JhciwgMSwgMCwgMSwgMCksCiAJCQkgIDAsIDEpOwogCWlm IChDT05TUCAoZGVmKSkKIAkgIHsKQEAgLTc4OTcsNyArNzg5Nyw3IEBAIHBhcnNlX21lbnVfaXRl bSAoTGlzcF9PYmplY3QgaXRlbSwgaW50IGlubWVudWJhcikKIAlpZiAoQ09OU1AgKGtleWhpbnQp ICYmICFOSUxQIChYQ0FSIChrZXloaW50KSkpCiAJICB7CiAJICAgIGtleXMgPSBYQ0FSIChrZXlo aW50KTsKLQkgICAgdGVtID0gRmtleV9iaW5kaW5nIChrZXlzLCBRbmlsLCBRbmlsLCBRbmlsKTsK KwkgICAgdGVtID0gRmtleV9iaW5kaW5nIChrZXlzLCBRbmlsLCBRbmlsLCBRbmlsLCBRbmlsKTsK IAogCSAgICAvKiBXZSBoYXZlIGEgc3VnZ2VzdGVkIGtleS4gIElzIGl0IGJvdW5kIHRvIHRoZSBj b21tYW5kPyAgKi8KIAkgICAgaWYgKE5JTFAgKHRlbSkKQEAgLTgwNTksNyArODA1OSw3IEBAIHRv b2xfYmFyX2l0ZW1zIChMaXNwX09iamVjdCByZXVzZSwgaW50ICpuaXRlbXMpCiAgICAgICB7CiAJ TGlzcF9PYmplY3Qga2V5bWFwOwogCi0Ja2V5bWFwID0gZ2V0X2tleW1hcCAoYWNjZXNzX2tleW1h cCAobWFwc1tpXSwgUXRvb2xfYmFyLCAxLCAwLCAxKSwgMCwgMSk7CisJa2V5bWFwID0gZ2V0X2tl eW1hcCAoYWNjZXNzX2tleW1hcCAobWFwc1tpXSwgUXRvb2xfYmFyLCAxLCAwLCAxLCAwKSwgMCwg MSk7CiAJaWYgKENPTlNQIChrZXltYXApKQogCSAgbWFwX2tleW1hcCAoa2V5bWFwLCBwcm9jZXNz X3Rvb2xfYmFyX2l0ZW0sIFFuaWwsIE5VTEwsIDEpOwogICAgICAgfQpAQCAtODcyMSw3ICs4NzIx LDcgQEAgc3RhdGljIExpc3BfT2JqZWN0CiBmb2xsb3dfa2V5IChMaXNwX09iamVjdCBrZXltYXAs IExpc3BfT2JqZWN0IGtleSkKIHsKICAgcmV0dXJuIGFjY2Vzc19rZXltYXAgKGdldF9rZXltYXAg KGtleW1hcCwgMCwgMSksCi0JCQlrZXksIDEsIDAsIDEpOworCQkJa2V5LCAxLCAwLCAxLCAwKTsK IH0KIAogc3RhdGljIExpc3BfT2JqZWN0CkBAIC04NzYxLDcgKzg3NjEsNyBAQCBhY2Nlc3Nfa2V5 bWFwX2tleXJlbWFwIChMaXNwX09iamVjdCBtYXAsIExpc3BfT2JqZWN0IGtleSwgTGlzcF9PYmpl Y3QgcHJvbXB0LAogewogICBMaXNwX09iamVjdCBuZXh0OwogCi0gIG5leHQgPSBhY2Nlc3Nfa2V5 bWFwIChtYXAsIGtleSwgMSwgMCwgMSk7CisgIG5leHQgPSBhY2Nlc3Nfa2V5bWFwIChtYXAsIGtl eSwgMSwgMCwgMSwgMCk7CiAKICAgLyogSGFuZGxlIGEgc3ltYm9sIHdob3NlIGZ1bmN0aW9uIGRl ZmluaXRpb24gaXMgYSBrZXltYXAKICAgICAgb3IgYW4gYXJyYXkuICAqLwpkaWZmIC0tZ2l0IGEv c3JjL2tleW1hcC5jIGIvc3JjL2tleW1hcC5jCmluZGV4IGNjZjhjZTc5MTcuLjVmYzZmYzU3YjUg MTAwNjQ0Ci0tLSBhL3NyYy9rZXltYXAuYworKysgYi9zcmMva2V5bWFwLmMKQEAgLTM2MywxMiAr MzYzLDE2IEBAIFJldHVybiBQQVJFTlQuICBQQVJFTlQgc2hvdWxkIGJlIG5pbCBvciBhbm90aGVy IGtleW1hcC4gICovKQogCiAgICBJZiBOT0lOSEVSSVQsIGRvbid0IGFjY2VwdCBhIHN1YmtleW1h cCBmb3VuZCBpbiBhbiBpbmhlcml0ZWQga2V5bWFwLgogCisgICBJZiBNRU5VX0lURU1TLCBkbyBu b3QgcHJvY2VzcyBtZW51IGl0ZW1zIHdpdGggZ2V0X2tleWVsdC4gUmV0dXJuCisgICB0aGUgZnVs bCBtZW51IGl0ZW0gZW50cnkgaW5zdGVhZC4KKwogICAgUmV0dXJuIFF1bmJvdW5kIGlmIG5vIGJp bmRpbmcgd2FzIGZvdW5kIChhbmQgcmV0dXJuIFFuaWwgaWYgYSBuaWwKICAgIGJpbmRpbmcgd2Fz IGZvdW5kKS4gICovCiAKIHN0YXRpYyBMaXNwX09iamVjdAogYWNjZXNzX2tleW1hcF8xIChMaXNw X09iamVjdCBtYXAsIExpc3BfT2JqZWN0IGlkeCwKLQkJIGJvb2wgdF9vaywgYm9vbCBub2luaGVy aXQsIGJvb2wgYXV0b2xvYWQpCisJCSBib29sIHRfb2ssIGJvb2wgbm9pbmhlcml0LCBib29sIGF1 dG9sb2FkLAorICAgICAgICAgICAgICAgICBib29sIG1lbnVfaXRlbXMpCiB7CiAgIC8qIElmIGlk eCBpcyBhIGxpc3QgKHNvbWUgc29ydCBvZiBtb3VzZSBjbGljaywgcGVyaGFwcz8pLAogICAgICB0 aGUgaW5kZXggd2Ugd2FudCB0byB1c2UgaXMgdGhlIGNhciBvZiB0aGUgbGlzdCwgd2hpY2gKQEAg LTM5NSw3ICszOTksNyBAQCBhY2Nlc3Nfa2V5bWFwXzEgKExpc3BfT2JqZWN0IG1hcCwgTGlzcF9P YmplY3QgaWR4LAogICAgICAgaWYgKFhJTlQgKG1ldGFfcHJlZml4X2NoYXIpICYgQ0hBUl9NRVRB KQogCW1ldGFfcHJlZml4X2NoYXIgPSBtYWtlX251bWJlciAoMjcpOwogICAgICAgZXZlbnRfbWV0 YV9iaW5kaW5nID0gYWNjZXNzX2tleW1hcF8xIChtYXAsIG1ldGFfcHJlZml4X2NoYXIsIHRfb2ss Ci0JCQkJCSAgICBub2luaGVyaXQsIGF1dG9sb2FkKTsKKwkJCQkJICAgIG5vaW5oZXJpdCwgYXV0 b2xvYWQsIG1lbnVfaXRlbXMpOwogICAgICAgZXZlbnRfbWV0YV9tYXAgPSBnZXRfa2V5bWFwIChl dmVudF9tZXRhX2JpbmRpbmcsIDAsIGF1dG9sb2FkKTsKICAgICAgIGlmIChDT05TUCAoZXZlbnRf bWV0YV9tYXApKQogCXsKQEAgLTQ0MCw3ICs0NDQsNyBAQCBhY2Nlc3Nfa2V5bWFwXzEgKExpc3Bf T2JqZWN0IG1hcCwgTGlzcF9PYmplY3QgaWR4LAogCQllYXNzZXJ0IChLRVlNQVBQIChyZXR2YWwp KTsKIAkJcGFyZW50X2VudHJ5CiAJCSAgPSBnZXRfa2V5bWFwIChhY2Nlc3Nfa2V5bWFwXzEgKHRh aWwsIGlkeCwKLQkJCQkJCSB0X29rLCAwLCBhdXRvbG9hZCksCisJCQkJCQkgdF9vaywgMCwgYXV0 b2xvYWQsIG1lbnVfaXRlbXMpLAogCQkJCTAsIGF1dG9sb2FkKTsKIAkJaWYgKEtFWU1BUFAgKHBh cmVudF9lbnRyeSkpCiAJCSAgewpAQCAtNDU3LDcgKzQ2MSw3IEBAIGFjY2Vzc19rZXltYXBfMSAo TGlzcF9PYmplY3QgbWFwLCBMaXNwX09iamVjdCBpZHgsCiAJICB9CiAJZWxzZSBpZiAoQ09OU1Ag KHN1Ym1hcCkpCiAJICB7Ci0JICAgIHZhbCA9IGFjY2Vzc19rZXltYXBfMSAoc3VibWFwLCBpZHgs IHRfb2ssIG5vaW5oZXJpdCwgYXV0b2xvYWQpOworCSAgICB2YWwgPSBhY2Nlc3Nfa2V5bWFwXzEg KHN1Ym1hcCwgaWR4LCB0X29rLCBub2luaGVyaXQsIGF1dG9sb2FkLCBtZW51X2l0ZW1zKTsKIAkg IH0KIAllbHNlIGlmIChDT05TUCAoYmluZGluZykpCiAJICB7CkBAIC00NjgsNiArNDcyLDExIEBA IGFjY2Vzc19rZXltYXBfMSAoTGlzcF9PYmplY3QgbWFwLCBMaXNwX09iamVjdCBpZHgsCiAJICAg IGVsc2UgaWYgKHRfb2sgJiYgRVEgKGtleSwgUXQpKQogCSAgICAgIHsKIAkJdF9iaW5kaW5nID0g WENEUiAoYmluZGluZyk7CisKKyAgICAgICAgICAgICAgICBpZiAoIW1lbnVfaXRlbXMpCisgICAg ICAgICAgICAgICAgICAvKiBnZXRfa2V5ZWx0IHN0cmlwcyBtZW51LWl0ZW0gaW5mb3JtYXRpb24u ICovCisgICAgICAgICAgICAgICAgICB0X2JpbmRpbmcgPSBnZXRfa2V5ZWx0ICh0X2JpbmRpbmcs IGF1dG9sb2FkKTsKKwogCQl0X29rID0gMDsKIAkgICAgICB9CiAJICB9CkBAIC01MDEsNyArNTEw LDggQEAgYWNjZXNzX2tleW1hcF8xIChMaXNwX09iamVjdCBtYXAsIExpc3BfT2JqZWN0IGlkeCwK IAkJIGtleW1hcHMgb2YgbG93ZXIgcHJlY2VkZW5jZSkuICAqLwogCSAgICAgIHZhbCA9IFFuaWw7 CiAKLQkgICAgdmFsID0gZ2V0X2tleWVsdCAodmFsLCBhdXRvbG9hZCk7CisgICAgICAgICAgICBp ZiAoIW1lbnVfaXRlbXMpCisgICAgICAgICAgICAgIHZhbCA9IGdldF9rZXllbHQgKHZhbCwgYXV0 b2xvYWQpOwogCiAJICAgIGlmICghS0VZTUFQUCAodmFsKSkKIAkgICAgICB7CkBAIC01MjYsMTUg KzUzNiwxNSBAQCBhY2Nlc3Nfa2V5bWFwXzEgKExpc3BfT2JqZWN0IG1hcCwgTGlzcF9PYmplY3Qg aWR4LAogCW1heWJlX3F1aXQgKCk7CiAgICAgICB9CiAKLSAgICByZXR1cm4gRVEgKFF1bmJvdW5k LCByZXR2YWwpID8gZ2V0X2tleWVsdCAodF9iaW5kaW5nLCBhdXRvbG9hZCkgOiByZXR2YWw7Cisg ICAgcmV0dXJuIEVRIChRdW5ib3VuZCwgcmV0dmFsKSA/IHRfYmluZGluZyA6IHJldHZhbDsKICAg fQogfQogCiBMaXNwX09iamVjdAogYWNjZXNzX2tleW1hcCAoTGlzcF9PYmplY3QgbWFwLCBMaXNw X09iamVjdCBpZHgsCi0JICAgICAgIGJvb2wgdF9vaywgYm9vbCBub2luaGVyaXQsIGJvb2wgYXV0 b2xvYWQpCisJICAgICAgIGJvb2wgdF9vaywgYm9vbCBub2luaGVyaXQsIGJvb2wgYXV0b2xvYWQs IGJvb2wgbWVudV9pdGVtcykKIHsKLSAgTGlzcF9PYmplY3QgdmFsID0gYWNjZXNzX2tleW1hcF8x IChtYXAsIGlkeCwgdF9vaywgbm9pbmhlcml0LCBhdXRvbG9hZCk7CisgIExpc3BfT2JqZWN0IHZh bCA9IGFjY2Vzc19rZXltYXBfMSAobWFwLCBpZHgsIHRfb2ssIG5vaW5oZXJpdCwgYXV0b2xvYWQs IG1lbnVfaXRlbXMpOwogICByZXR1cm4gRVEgKHZhbCwgUXVuYm91bmQpID8gUW5pbCA6IHZhbDsK IH0KIApAQCAtNjc3LDggKzY4Nyw4IEBAIHVzYWdlOiAobWFwLWtleW1hcCBGVU5DVElPTiBLRVlN QVApICAqLykKICAgIChLRVlNQVAgLiBJTkRFWCksIHdoZXJlIEtFWU1BUCBpcyBhIGtleW1hcCBv ciBhIHN5bWJvbCBkZWZpbmVkIGFzIG9uZQogICAgYW5kIElOREVYIGlzIHRoZSBvYmplY3QgdG8g bG9vayB1cCBpbiBLRVlNQVAgdG8geWllbGQgdGhlIGRlZmluaXRpb24uCiAKLSAgIEFsc28gaWYg T0JKRUNUIGhhcyBhIG1lbnUgc3RyaW5nIGFzIHRoZSBmaXJzdCBlbGVtZW50LAotICAgcmVtb3Zl IHRoYXQuICBBbHNvIHJlbW92ZSBhIG1lbnUgaGVscCBzdHJpbmcgYXMgc2Vjb25kIGVsZW1lbnQu CisgICBBbHNvIGlmIE9CSkVDVCBoYXMgYSBtZW51IHN0cmluZyBhcyB0aGUgZmlyc3QgZWxlbWVu dCwgcmVtb3ZlIHRoYXQuCisgICBBbHNvIHJlbW92ZSBhIG1lbnUgaGVscCBzdHJpbmcgYXMgc2Vj b25kIGVsZW1lbnQuCiAKICAgIElmIEFVVE9MT0FELCBsb2FkIGF1dG9sb2FkYWJsZSBrZXltYXBz CiAgICB0aGF0IGFyZSByZWZlcnJlZCB0byB3aXRoIGluZGlyZWN0aW9uLgpAQCAtMTEzNiw3ICsx MTQ2LDcgQEAgYmluZGluZyBLRVkgdG8gREVGIGlzIGFkZGVkIGF0IHRoZSBmcm9udCBvZiBLRVlN QVAuICAqLykKICAgICAgIGlmIChpZHggPT0gbGVuZ3RoKQogCXJldHVybiBzdG9yZV9pbl9rZXlt YXAgKGtleW1hcCwgYywgZGVmKTsKIAotICAgICAgY21kID0gYWNjZXNzX2tleW1hcCAoa2V5bWFw LCBjLCAwLCAxLCAxKTsKKyAgICAgIGNtZCA9IGFjY2Vzc19rZXltYXAgKGtleW1hcCwgYywgMCwg MSwgMSwgMCk7CiAKICAgICAgIC8qIElmIHRoaXMga2V5IGlzIHVuZGVmaW5lZCwgbWFrZSBpdCBh IHByZWZpeC4gICovCiAgICAgICBpZiAoTklMUCAoY21kKSkKQEAgLTExODUsMTcgKzExOTUsMTcg QEAgcmVtYXBwaW5nIGluIGFsbCBjdXJyZW50bHkgYWN0aXZlIGtleW1hcHMuICAqLykKICAgQVNF VCAoY29tbWFuZF9yZW1hcHBpbmdfdmVjdG9yLCAxLCBjb21tYW5kKTsKIAogICBpZiAoTklMUCAo a2V5bWFwcykpCi0gICAgY29tbWFuZCA9IEZrZXlfYmluZGluZyAoY29tbWFuZF9yZW1hcHBpbmdf dmVjdG9yLCBRbmlsLCBRdCwgcG9zaXRpb24pOworICAgIGNvbW1hbmQgPSBGa2V5X2JpbmRpbmcg KGNvbW1hbmRfcmVtYXBwaW5nX3ZlY3RvciwgUW5pbCwgUXQsIHBvc2l0aW9uLCBRbmlsKTsKICAg ZWxzZQogICAgIGNvbW1hbmQgPSBGbG9va3VwX2tleSAoRmNvbnMgKFFrZXltYXAsIGtleW1hcHMp LAotCQkJICAgY29tbWFuZF9yZW1hcHBpbmdfdmVjdG9yLCBRbmlsKTsKKwkJCSAgIGNvbW1hbmRf cmVtYXBwaW5nX3ZlY3RvciwgUW5pbCwgUW5pbCk7CiAgIHJldHVybiBJTlRFR0VSUCAoY29tbWFu ZCkgPyBRbmlsIDogY29tbWFuZDsKIH0KIAogLyogVmFsdWUgaXMgbnVtYmVyIGlmIEtFWSBpcyB0 b28gbG9uZzsgbmlsIGlmIHZhbGlkIGJ1dCBoYXMgbm8gZGVmaW5pdGlvbi4gICovCiAvKiBHQyBp cyBwb3NzaWJsZSBpbiB0aGlzIGZ1bmN0aW9uLiAgKi8KIAotREVGVU4gKCJsb29rdXAta2V5Iiwg Rmxvb2t1cF9rZXksIFNsb29rdXBfa2V5LCAyLCAzLCAwLAorREVGVU4gKCJsb29rdXAta2V5Iiwg Rmxvb2t1cF9rZXksIFNsb29rdXBfa2V5LCAyLCA0LCAwLAogICAgICAgIGRvYzogLyogSW4ga2V5 bWFwIEtFWU1BUCwgbG9vayB1cCBrZXkgc2VxdWVuY2UgS0VZLiAgUmV0dXJuIHRoZSBkZWZpbml0 aW9uLgogQSB2YWx1ZSBvZiBuaWwgbWVhbnMgdW5kZWZpbmVkLiAgU2VlIGRvYyBvZiBgZGVmaW5l LWtleScKIGZvciBraW5kcyBvZiBkZWZpbml0aW9ucy4KQEAgLTEyMTAsMTQgKzEyMjAsMTkgQEAg Tm9ybWFsbHksIGBsb29rdXAta2V5JyBpZ25vcmVzIGJpbmRpbmdzIGZvciB0LCB3aGljaCBhY3Qg YXMgZGVmYXVsdAogYmluZGluZ3MsIHVzZWQgd2hlbiBub3RoaW5nIGVsc2UgaW4gdGhlIGtleW1h cCBhcHBsaWVzOyB0aGlzIG1ha2VzIGl0CiB1c2FibGUgYXMgYSBnZW5lcmFsIGZ1bmN0aW9uIGZv ciBwcm9iaW5nIGtleW1hcHMuICBIb3dldmVyLCBpZiB0aGUKIHRoaXJkIG9wdGlvbmFsIGFyZ3Vt ZW50IEFDQ0VQVC1ERUZBVUxUIGlzIG5vbi1uaWwsIGBsb29rdXAta2V5JyB3aWxsCi1yZWNvZ25p emUgdGhlIGRlZmF1bHQgYmluZGluZ3MsIGp1c3QgYXMgYHJlYWQta2V5LXNlcXVlbmNlJyBkb2Vz LiAgKi8pCi0gIChMaXNwX09iamVjdCBrZXltYXAsIExpc3BfT2JqZWN0IGtleSwgTGlzcF9PYmpl Y3QgYWNjZXB0X2RlZmF1bHQpCityZWNvZ25pemUgdGhlIGRlZmF1bHQgYmluZGluZ3MsIGp1c3Qg YXMgYHJlYWQta2V5LXNlcXVlbmNlJyBkb2VzLgorCitBIG5vbi1uaWwgdmFsdWUgZm9yIE1FTlUt SVRFTVMgbWFrZXMgYGxvb2t1cC1rZXlgIHJldHVybiBmdWxsCittZW51LWl0ZW1zIGluc3RlYWQg b2YganVzdCB0aGUgYXNzb2NpYXRlZCBkZWZpbml0aW9uLiAqLykKKyAgICAgKExpc3BfT2JqZWN0 IGtleW1hcCwgTGlzcF9PYmplY3Qga2V5LCBMaXNwX09iamVjdCBhY2NlcHRfZGVmYXVsdCwKKyAg ICAgIExpc3BfT2JqZWN0IG1lbnVfaXRlbXMpCiB7CiAgIHB0cmRpZmZfdCBpZHg7CiAgIExpc3Bf T2JqZWN0IGNtZDsKICAgTGlzcF9PYmplY3QgYzsKICAgcHRyZGlmZl90IGxlbmd0aDsKICAgYm9v bCB0X29rID0gIU5JTFAgKGFjY2VwdF9kZWZhdWx0KTsKKyAgYm9vbCByZXR1cm5fbWVudV9pdGVt cyA9ICFOSUxQIChtZW51X2l0ZW1zKTsKIAogICBrZXltYXAgPSBnZXRfa2V5bWFwIChrZXltYXAs IDEsIDEpOwogCkBAIC0xMjQyLDcgKzEyNTcsNyBAQCByZWNvZ25pemUgdGhlIGRlZmF1bHQgYmlu ZGluZ3MsIGp1c3QgYXMgYHJlYWQta2V5LXNlcXVlbmNlJyBkb2VzLiAgKi8pCiAgICAgICBpZiAo IUlOVEVHRVJQIChjKSAmJiAhU1lNQk9MUCAoYykgJiYgIUNPTlNQIChjKSAmJiAhU1RSSU5HUCAo YykpCiAJbWVzc2FnZV93aXRoX3N0cmluZyAoIktleSBzZXF1ZW5jZSBjb250YWlucyBpbnZhbGlk IGV2ZW50ICVzIiwgYywgMSk7CiAKLSAgICAgIGNtZCA9IGFjY2Vzc19rZXltYXAgKGtleW1hcCwg YywgdF9vaywgMCwgMSk7CisgICAgICBjbWQgPSBhY2Nlc3Nfa2V5bWFwIChrZXltYXAsIGMsIHRf b2ssIDAsIDEsIHJldHVybl9tZW51X2l0ZW1zKTsKICAgICAgIGlmIChpZHggPT0gbGVuZ3RoKQog CXJldHVybiBjbWQ7CiAKQEAgLTE2MDMsNyArMTYxOCw3IEBAIGxpa2UgaW4gdGhlIHJlc3BlY3Rp dmUgYXJndW1lbnQgb2YgYGtleS1iaW5kaW5nJy4gICovKQogCiAvKiBHQyBpcyBwb3NzaWJsZSBp biB0aGlzIGZ1bmN0aW9uIGlmIGl0IGF1dG9sb2FkcyBhIGtleW1hcC4gICovCiAKLURFRlVOICgi a2V5LWJpbmRpbmciLCBGa2V5X2JpbmRpbmcsIFNrZXlfYmluZGluZywgMSwgNCwgMCwKK0RFRlVO ICgia2V5LWJpbmRpbmciLCBGa2V5X2JpbmRpbmcsIFNrZXlfYmluZGluZywgMSwgNSwgMCwKICAg ICAgICBkb2M6IC8qIFJldHVybiB0aGUgYmluZGluZyBmb3IgY29tbWFuZCBLRVkgaW4gY3VycmVu dCBrZXltYXBzLgogS0VZIGlzIGEgc3RyaW5nIG9yIHZlY3RvciwgYSBzZXF1ZW5jZSBvZiBrZXlz dHJva2VzLgogVGhlIGJpbmRpbmcgaXMgcHJvYmFibHkgYSBzeW1ib2wgd2l0aCBhIGZ1bmN0aW9u IGRlZmluaXRpb24uCkBAIC0xNjI4LDggKzE2NDMsMTIgQEAgcG9zaXRpb24gYXMgcmV0dXJuZWQg YnkgYGV2ZW50LXN0YXJ0JyBhbmQgYGV2ZW50LWVuZCcsIGFuZCB0aGUgbG9va3VwCiBvY2N1cnMg aW4gdGhlIGtleW1hcHMgYXNzb2NpYXRlZCB3aXRoIGl0IGluc3RlYWQgb2YgS0VZLiAgSXQgY2Fu IGFsc28KIGJlIGEgbnVtYmVyIG9yIG1hcmtlciwgaW4gd2hpY2ggY2FzZSB0aGUga2V5bWFwIHBy b3BlcnRpZXMgYXQgdGhlCiBzcGVjaWZpZWQgYnVmZmVyIHBvc2l0aW9uIGluc3RlYWQgb2YgcG9p bnQgYXJlIHVzZWQuCisKK0Egbm9uLW5pbCB2YWx1ZSBmb3IgTUVOVS1JVEVNUyBtYWtlcyBga2V5 LWJpbmRpbmdgIHJldHVybiBmdWxsIG1lbnUtaXRlbXMKK2luc3RlYWQgb2YganVzdCB0aGUgYXNz b2NpYXRlZCBkZWZpbml0aW9uLgogICAqLykKLSAgKExpc3BfT2JqZWN0IGtleSwgTGlzcF9PYmpl Y3QgYWNjZXB0X2RlZmF1bHQsIExpc3BfT2JqZWN0IG5vX3JlbWFwLCBMaXNwX09iamVjdCBwb3Np dGlvbikKKyAgICAgKExpc3BfT2JqZWN0IGtleSwgTGlzcF9PYmplY3QgYWNjZXB0X2RlZmF1bHQs IExpc3BfT2JqZWN0IG5vX3JlbWFwLAorICAgICAgTGlzcF9PYmplY3QgcG9zaXRpb24sIExpc3Bf T2JqZWN0IG1lbnVfaXRlbXMpCiB7CiAgIExpc3BfT2JqZWN0IHZhbHVlOwogCkBAIC0xNjU1LDcg KzE2NzQsNyBAQCBzcGVjaWZpZWQgYnVmZmVyIHBvc2l0aW9uIGluc3RlYWQgb2YgcG9pbnQgYXJl IHVzZWQuCiAgICAgfQogCiAgIHZhbHVlID0gRmxvb2t1cF9rZXkgKEZjb25zIChRa2V5bWFwLCBG Y3VycmVudF9hY3RpdmVfbWFwcyAoUXQsIHBvc2l0aW9uKSksCi0JCSAgICAgICBrZXksIGFjY2Vw dF9kZWZhdWx0KTsKKwkJICAgICAgIGtleSwgYWNjZXB0X2RlZmF1bHQsIG1lbnVfaXRlbXMpOwog CiAgIGlmIChOSUxQICh2YWx1ZSkgfHwgSU5URUdFUlAgKHZhbHVlKSkKICAgICByZXR1cm4gUW5p bDsKQEAgLTE2ODgsNyArMTcwNyw3IEBAIGJpbmRpbmdzOyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9m IGBsb29rdXAta2V5JyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoaXMuICAqLykKICAgbWFwID0g QlZBUiAoY3VycmVudF9idWZmZXIsIGtleW1hcCk7CiAgIGlmIChOSUxQIChtYXApKQogICAgIHJl dHVybiBRbmlsOwotICByZXR1cm4gRmxvb2t1cF9rZXkgKG1hcCwga2V5cywgYWNjZXB0X2RlZmF1 bHQpOworICByZXR1cm4gRmxvb2t1cF9rZXkgKG1hcCwga2V5cywgYWNjZXB0X2RlZmF1bHQsIFFu aWwpOwogfQogCiAvKiBHQyBpcyBwb3NzaWJsZSBpbiB0aGlzIGZ1bmN0aW9uIGlmIGl0IGF1dG9s b2FkcyBhIGtleW1hcC4gICovCkBAIC0xNzA0LDcgKzE3MjMsNyBAQCBJZiBvcHRpb25hbCBhcmd1 bWVudCBBQ0NFUFQtREVGQVVMVCBpcyBub24tbmlsLCByZWNvZ25pemUgZGVmYXVsdAogYmluZGlu Z3M7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgYGxvb2t1cC1rZXknIGZvciBtb3JlIGRldGFpbHMg YWJvdXQgdGhpcy4gICovKQogICAoTGlzcF9PYmplY3Qga2V5cywgTGlzcF9PYmplY3QgYWNjZXB0 X2RlZmF1bHQpCiB7Ci0gIHJldHVybiBGbG9va3VwX2tleSAoY3VycmVudF9nbG9iYWxfbWFwLCBr ZXlzLCBhY2NlcHRfZGVmYXVsdCk7CisgIHJldHVybiBGbG9va3VwX2tleSAoY3VycmVudF9nbG9i YWxfbWFwLCBrZXlzLCBhY2NlcHRfZGVmYXVsdCwgUW5pbCk7CiB9CiAKIC8qIEdDIGlzIHBvc3Np YmxlIGluIHRoaXMgZnVuY3Rpb24gaWYgaXQgYXV0b2xvYWRzIGEga2V5bWFwLiAgKi8KQEAgLTE3 MzQsNyArMTc1Myw3IEBAIGJpbmRpbmdzOyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGBsb29rdXAt a2V5JyBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoaXMuICAqLykKIAogICBmb3IgKGkgPSBqID0g MDsgaSA8IG5tYXBzOyBpKyspCiAgICAgaWYgKCFOSUxQIChtYXBzW2ldKQotCSYmICFOSUxQIChi aW5kaW5nID0gRmxvb2t1cF9rZXkgKG1hcHNbaV0sIGtleSwgYWNjZXB0X2RlZmF1bHQpKQorCSYm ICFOSUxQIChiaW5kaW5nID0gRmxvb2t1cF9rZXkgKG1hcHNbaV0sIGtleSwgYWNjZXB0X2RlZmF1 bHQsIFFuaWwpKQogCSYmICFJTlRFR0VSUCAoYmluZGluZykpCiAgICAgICB7CiAJaWYgKEtFWU1B UFAgKGJpbmRpbmcpKQpAQCAtMTkwNyw3ICsxOTI2LDcgQEAgdGhlbiB0aGUgdmFsdWUgaW5jbHVk ZXMgb25seSBtYXBzIGZvciBwcmVmaXhlcyB0aGF0IHN0YXJ0IHdpdGggUFJFRklYLiAgKi8pCiAg ICAgICAvKiBJZiBhIHByZWZpeCB3YXMgc3BlY2lmaWVkLCBzdGFydCB3aXRoIHRoZSBrZXltYXAg KGlmIGFueSkgZm9yCiAJIHRoYXQgcHJlZml4LCBzbyB3ZSBkb24ndCB3YXN0ZSB0aW1lIGNvbnNp ZGVyaW5nIG90aGVyIHByZWZpeGVzLiAgKi8KICAgICAgIExpc3BfT2JqZWN0IHRlbTsKLSAgICAg IHRlbSA9IEZsb29rdXBfa2V5IChrZXltYXAsIHByZWZpeCwgUXQpOworICAgICAgdGVtID0gRmxv b2t1cF9rZXkgKGtleW1hcCwgcHJlZml4LCBRdCwgUW5pbCk7CiAgICAgICAvKiBGbG9va3VwX2tl eSBtYXkgZ2l2ZSB1cyBuaWwsIG9yIGEgbnVtYmVyLAogCSBpZiB0aGUgcHJlZml4IGlzIG5vdCBk ZWZpbmVkIGluIHRoaXMgcGFydGljdWxhciBtYXAuCiAJIEl0IG1pZ2h0IGV2ZW4gZ2l2ZSB1cyBh IGxpc3QgdGhhdCBpc24ndCBhIGtleW1hcC4gICovCkBAIC0yMzYyLDExICsyMzgxLDExIEBAIHNo YWRvd19sb29rdXAgKExpc3BfT2JqZWN0IHNoYWRvdywgTGlzcF9PYmplY3Qga2V5LCBMaXNwX09i amVjdCBmbGFnLAogCiAgIGZvciAodGFpbCA9IHNoYWRvdzsgQ09OU1AgKHRhaWwpOyB0YWlsID0g WENEUiAodGFpbCkpCiAgICAgewotICAgICAgdmFsdWUgPSBGbG9va3VwX2tleSAoWENBUiAodGFp bCksIGtleSwgZmxhZyk7CisgICAgICB2YWx1ZSA9IEZsb29rdXBfa2V5IChYQ0FSICh0YWlsKSwg a2V5LCBmbGFnLCBRbmlsKTsKICAgICAgIGlmIChOQVROVU1QICh2YWx1ZSkpCiAJewogCSAgdmFs dWUgPSBGbG9va3VwX2tleSAoWENBUiAodGFpbCksCi0JCQkgICAgICAgRnN1YnN0cmluZyAoa2V5 LCBtYWtlX251bWJlciAoMCksIHZhbHVlKSwgZmxhZyk7CisJCQkgICAgICAgRnN1YnN0cmluZyAo a2V5LCBtYWtlX251bWJlciAoMCksIHZhbHVlKSwgZmxhZywgUW5pbCk7CiAJICBpZiAoIU5JTFAg KHZhbHVlKSkKIAkgICAgcmV0dXJuIFFuaWw7CiAJfQpAQCAtMzAwMCw3ICszMDE5LDcgQEAga2V5 ICAgICAgICAgICAgIGJpbmRpbmdcblwKIAkgICAgIHdoYXQgd2Ugc2hvdWxkIHVzZS4gICovCiAJ ICBlbHNlCiAJICAgIHsKLQkgICAgICBzaG1hcCA9IEZsb29rdXBfa2V5IChzaG1hcCwgRmNhciAo ZWx0KSwgUXQpOworCSAgICAgIHNobWFwID0gRmxvb2t1cF9rZXkgKHNobWFwLCBGY2FyIChlbHQp LCBRdCwgUW5pbCk7CiAJICAgICAgaWYgKElOVEVHRVJQIChzaG1hcCkpCiAJCXNobWFwID0gUW5p bDsKIAkgICAgfQpAQCAtMzIyNyw3ICszMjQ2LDcgQEAgZGVzY3JpYmVfbWFwIChMaXNwX09iamVj dCBtYXAsIExpc3BfT2JqZWN0IHByZWZpeCwKIAkJfQogCSAgICB9CiAKLQkgIHRlbSA9IEZsb29r dXBfa2V5IChtYXAsIGtsdWRnZSwgUXQpOworCSAgdGVtID0gRmxvb2t1cF9rZXkgKG1hcCwga2x1 ZGdlLCBRdCwgUW5pbCk7CiAJICBpZiAoIUVRICh0ZW0sIGRlZmluaXRpb24pKSBjb250aW51ZTsK IAogCSAgdmVjdFtzbG90c191c2VkXS5ldmVudCA9IGV2ZW50OwpAQCAtMzQ4NCw3ICszNTAzLDcg QEAgZGVzY3JpYmVfdmVjdG9yIChMaXNwX09iamVjdCB2ZWN0b3IsIExpc3BfT2JqZWN0IHByZWZp eCwgTGlzcF9PYmplY3QgYXJncywKIAl7CiAJICBMaXNwX09iamVjdCB0ZW07CiAKLQkgIHRlbSA9 IEZsb29rdXBfa2V5IChlbnRpcmVfbWFwLCBrbHVkZ2UsIFF0KTsKKwkgIHRlbSA9IEZsb29rdXBf a2V5IChlbnRpcmVfbWFwLCBrbHVkZ2UsIFF0LCBRbmlsKTsKIAogCSAgaWYgKCFFUSAodGVtLCBk ZWZpbml0aW9uKSkKIAkgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9zcmMva2V5bWFwLmggYi9z cmMva2V5bWFwLmgKaW5kZXggMmExOTQ1YTgwYS4uZWE3MzViNDAyNiAxMDA2NDQKLS0tIGEvc3Jj L2tleW1hcC5oCisrKyBiL3NyYy9rZXltYXAuaApAQCAtMzQsNyArMzQsNyBAQCBhbG9uZyB3aXRo IEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLwogI2RlZmluZSBLRVlNQVBQKG0pICghTklMUCAoZ2V0X2tleW1hcCAobSwgZmFsc2UsIGZh bHNlKSkpCiBleHRlcm4gTGlzcF9PYmplY3QgY3VycmVudF9nbG9iYWxfbWFwOwogZXh0ZXJuIGNo YXIgKnB1c2hfa2V5X2Rlc2NyaXB0aW9uIChFTUFDU19JTlQsIGNoYXIgKik7Ci1leHRlcm4gTGlz cF9PYmplY3QgYWNjZXNzX2tleW1hcCAoTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0LCBib29sLCBi b29sLCBib29sKTsKK2V4dGVybiBMaXNwX09iamVjdCBhY2Nlc3Nfa2V5bWFwIChMaXNwX09iamVj dCwgTGlzcF9PYmplY3QsIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wpOwogZXh0ZXJuIExpc3BfT2Jq ZWN0IGdldF9rZXltYXAgKExpc3BfT2JqZWN0LCBib29sLCBib29sKTsKIGV4dGVybiB2b2lkIGRl c2NyaWJlX21hcF90cmVlIChMaXNwX09iamVjdCwgYm9vbCwgTGlzcF9PYmplY3QsIExpc3BfT2Jq ZWN0LAogCQkJICAgICAgIGNvbnN0IGNoYXIgKiwgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCk7Ci0t IAoyLjE1LjEKCg== --f403045c1a5893613a056062300b--