[PATCH] gnu: Add emacs-llm.

  • Done
  • quality assurance status badge
Details
3 participants
  • Liliana Marie Prikler
  • Roman Scherer
  • Roman Scherer
Owner
unassigned
Submitted by
Roman Scherer
Severity
normal
R
R
Roman Scherer wrote on 26 Apr 09:04 +0200
(address . guix-patches@gnu.org)(name . Roman Scherer)(address . roman@burningswell.com)
bf984c5c80f460f36298f46b0389d4341086b47c.1714115090.git.roman@burningswell.com
* gnu/packages/emacs-xyz.scm (emacs-llm): New variable.

Change-Id: Ie89eac7a4f0a31245b6d826ae9885a7092528ced
---
gnu/packages/emacs-xyz.scm | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)

Toggle diff (40 lines)
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 8a2ffc621d..8c712612b6 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -1606,6 +1606,31 @@ (define-public emacs-libgit
libgit2 bindings for Emacs, intended to boost the performance of Magit.")
(license license:gpl2+))))
+(define-public emacs-llm
+ (package
+ (name "emacs-llm")
+ (version "0.13.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ahyatt/llm")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256 (base32
+ "1q7djz4zx1br4d3g46f1m5cbxwl050qjmsm2cy7zcww64rrkcj0l"))))
+ (build-system emacs-build-system)
+ (home-page "https://github.com/ahyatt/llm")
+ (synopsis " Emacs library abstracting Large Language Model capabilities.")
+ (description
+ "This is a library for interfacing with Large Language Models. It allows
+elisp code to use LLMs, but allows gives the end-user an option to choose
+which LLM they would prefer. This is especially useful for LLMs, since there
+are various high-quality ones that in which API access costs money, as well as
+locally installed ones that are free, but of medium quality. Applications
+using LLMs can use this library to make sure their application works
+regardless of whether the user has a local LLM or is paying for API access.")
+ (license license:gpl3+)))
+
(define-public emacs-magit
;; Use this unreleased commit to benefit from a recent improvements with
;; regard to adding git trailers such as "Reviewed-by".

base-commit: 259372b7a95e3fea75a9ce1127a904e3f1ea3591
--
2.41.0
L
L
Liliana Marie Prikler wrote on 26 Apr 19:00 +0200
c9f9cbc1002fb131f68c9e4843a517bb10d4eb7c.camel@gmail.com
Am Freitag, dem 26.04.2024 um 09:04 +0200 schrieb Roman Scherer:
Toggle quote (49 lines)
> * gnu/packages/emacs-xyz.scm (emacs-llm): New variable.
>
> Change-Id: Ie89eac7a4f0a31245b6d826ae9885a7092528ced
> ---
>  gnu/packages/emacs-xyz.scm | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
> index 8a2ffc621d..8c712612b6 100644
> --- a/gnu/packages/emacs-xyz.scm
> +++ b/gnu/packages/emacs-xyz.scm
> @@ -1606,6 +1606,31 @@ (define-public emacs-libgit
>  libgit2 bindings for Emacs, intended to boost the performance of
> Magit.")
>        (license license:gpl2+))))
>  
> +(define-public emacs-llm
> +  (package
> +    (name "emacs-llm")
> +    (version "0.13.0")
> +    (source (origin
> +              (method git-fetch)
> +              (uri (git-reference
> +                    (url "https://github.com/ahyatt/llm")
> +                    (commit version)))
> +              (file-name (git-file-name name version))
> +              (sha256 (base32
> +                      
> "1q7djz4zx1br4d3g46f1m5cbxwl050qjmsm2cy7zcww64rrkcj0l"))))
> +    (build-system emacs-build-system)
> +    (home-page "https://github.com/ahyatt/llm")
> +    (synopsis " Emacs library abstracting Large Language Model
> capabilities.")
> +    (description
> +     "This is a library for interfacing with Large Language Models. 
> It allows
> +elisp code to use LLMs, but allows gives the end-user an option to
> choose
> +which LLM they would prefer.  This is especially useful for LLMs,
> since there
> +are various high-quality ones that in which API access costs money,
> as well as
> +locally installed ones that are free, but of medium quality. 
> Applications
> +using LLMs can use this library to make sure their application works
> +regardless of whether the user has a local LLM or is paying for API
> access.")
> +    (license license:gpl3+)))
> +
No advertising nonfree software, thanks.

Also, I'd like you to know that training such "high quality" LLMs comes
at a larger cost than is given back in use in societal or environmental
terms.

Cheers
R
R
Roman Scherer wrote on 27 Apr 00:35 +0200
(name . Liliana Marie Prikler)(address . liliana.prikler@gmail.com)
CAEc_D28NhfpTrrHS_M8SGVii8eNtPb9V4cQvrdxUXo=2R3i+Pw@mail.gmail.com
Hi Liliana,
I'm not sure if I understand your message. Do you say Guix does not want to
package this?
This is a package you can use with Ollama and is packaged on GNU ELPA as
well.
Greetings, Roman.

On Fri, Apr 26, 2024, 19:00 Liliana Marie Prikler <liliana.prikler@gmail.com>
wrote:

Toggle quote (58 lines)
> Am Freitag, dem 26.04.2024 um 09:04 +0200 schrieb Roman Scherer:
> > * gnu/packages/emacs-xyz.scm (emacs-llm): New variable.
> >
> > Change-Id: Ie89eac7a4f0a31245b6d826ae9885a7092528ced
> > ---
> > gnu/packages/emacs-xyz.scm | 25 +++++++++++++++++++++++++
> > 1 file changed, 25 insertions(+)
> >
> > diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
> > index 8a2ffc621d..8c712612b6 100644
> > --- a/gnu/packages/emacs-xyz.scm
> > +++ b/gnu/packages/emacs-xyz.scm
> > @@ -1606,6 +1606,31 @@ (define-public emacs-libgit
> > libgit2 bindings for Emacs, intended to boost the performance of
> > Magit.")
> > (license license:gpl2+))))
> >
> > +(define-public emacs-llm
> > + (package
> > + (name "emacs-llm")
> > + (version "0.13.0")
> > + (source (origin
> > + (method git-fetch)
> > + (uri (git-reference
> > + (url "https://github.com/ahyatt/llm")
> > + (commit version)))
> > + (file-name (git-file-name name version))
> > + (sha256 (base32
> > +
> > "1q7djz4zx1br4d3g46f1m5cbxwl050qjmsm2cy7zcww64rrkcj0l"))))
> > + (build-system emacs-build-system)
> > + (home-page "https://github.com/ahyatt/llm")
> > + (synopsis " Emacs library abstracting Large Language Model
> > capabilities.")
> > + (description
> > + "This is a library for interfacing with Large Language Models.
> > It allows
> > +elisp code to use LLMs, but allows gives the end-user an option to
> > choose
> > +which LLM they would prefer. This is especially useful for LLMs,
> > since there
> > +are various high-quality ones that in which API access costs money,
> > as well as
> > +locally installed ones that are free, but of medium quality.
> > Applications
> > +using LLMs can use this library to make sure their application works
> > +regardless of whether the user has a local LLM or is paying for API
> > access.")
> > + (license license:gpl3+)))
> > +
> No advertising nonfree software, thanks.
>
> Also, I'd like you to know that training such "high quality" LLMs comes
> at a larger cost than is given back in use in societal or environmental
> terms.
>
> Cheers
>
Attachment: file
L
L
Liliana Marie Prikler wrote on 27 Apr 00:46 +0200
(name . Roman Scherer)(address . roman@burningswell.com)
d1b4603466eb195361fa35eafe6561979a20cc0a.camel@gmail.com
Am Samstag, dem 27.04.2024 um 00:35 +0200 schrieb Roman Scherer:
Toggle quote (6 lines)
> Hi Liliana,
> I'm not sure if I understand your message. Do you say Guix does not
> want to package this?
> This is a package you can use with Ollama and is packaged on GNU ELPA
> as well.
> Greetings, Roman.
I'm not aware of the quality control procedures at ELPA, but if you
copied that bit from the description, they might have overlooked some
README nastiness.

As far as the functionality is concerned, by all means add it, but we
have principles here, even if they permit calling out to dubious APIs.

Cheers
R
R
Roman Scherer wrote on 27 Apr 01:05 +0200
(name . Liliana Marie Prikler)(address . liliana.prikler@gmail.com)
CAEc_D28hfhXwpqMH1HZdr+2OU1YAvDry6HGJ8AAVh1H8+eH3uA@mail.gmail.com
Hi Liliana,
could you please provide more constructive feedback and suggest what the
description should say? I took the description from the README of the
package. I'm here to make Guix better. If you don't want this package that
is also fine, then I keep it in my own channel.
Roman.


On Sat, Apr 27, 2024, 00:46 Liliana Marie Prikler <liliana.prikler@gmail.com>
wrote:

Toggle quote (16 lines)
> Am Samstag, dem 27.04.2024 um 00:35 +0200 schrieb Roman Scherer:
> > Hi Liliana,
> > I'm not sure if I understand your message. Do you say Guix does not
> > want to package this?
> > This is a package you can use with Ollama and is packaged on GNU ELPA
> > as well.
> > Greetings, Roman.
> I'm not aware of the quality control procedures at ELPA, but if you
> copied that bit from the description, they might have overlooked some
> README nastiness.
>
> As far as the functionality is concerned, by all means add it, but we
> have principles here, even if they permit calling out to dubious APIs.
>
> Cheers
>
Attachment: file
L
L
Liliana Marie Prikler wrote on 27 Apr 01:45 +0200
(name . Roman Scherer)(address . roman@burningswell.com)
2e112887394337fb30724b08e98eeee463c6d562.camel@gmail.com
Am Samstag, dem 27.04.2024 um 01:05 +0200 schrieb Roman Scherer:
Toggle quote (6 lines)
> Hi Liliana,
> could you please provide more constructive feedback and suggest what
> the description should say? I took the description from the README of
> the package. I'm here to make Guix better. If you don't want this
> package that is also fine, then I keep it in my own channel.
> Roman.
I don't have any concrete suggestions here, but for comparison, ellama
looks fine. The packages probably do different things, hence the two
of them but it should be possible to write about this one based on its
technical merits without resorting to ad speak.

HTH
R
R
Roman Scherer wrote on 27 Apr 09:13 +0200
[PATCH v2] gnu: Add emacs-llm.
(address . 70584@debbugs.gnu.org)(name . Roman Scherer)(address . roman@burningswell.com)
e60eb615aa4948da2a0a95dff314a8981e19d2be.1714201985.git.roman@burningswell.com
* gnu/packages/emacs-xyz.scm (emacs-llm): New variable.

Change-Id: Ie89eac7a4f0a31245b6d826ae9885a7092528ced
---
gnu/packages/emacs-xyz.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)

Toggle diff (39 lines)
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 8a2ffc621d..e802cc3f03 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -1606,6 +1606,30 @@ (define-public emacs-libgit
libgit2 bindings for Emacs, intended to boost the performance of Magit.")
(license license:gpl2+))))
+(define-public emacs-llm
+ (package
+ (name "emacs-llm")
+ (version "0.13.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ahyatt/llm")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256 (base32
+ "1q7djz4zx1br4d3g46f1m5cbxwl050qjmsm2cy7zcww64rrkcj0l"))))
+ (build-system emacs-build-system)
+ (home-page "https://github.com/ahyatt/llm")
+ (synopsis "Emacs library abstracting Large Language Model capabilities.")
+ (description
+ "This is a library for interfacing with Large Language Models. It allows
+Elisp code to use LLMs, but gives the end-user an option to choose which LLM
+they would prefer. This is especially useful for LLMs, since there are ones
+in which API access costs money, as well as locally installed ones that are
+free. Applications using LLMs can use this library to make sure their
+application works regardless of the LLm they choose.")
+ (license license:gpl3+)))
+
(define-public emacs-magit
;; Use this unreleased commit to benefit from a recent improvements with
;; regard to adding git trailers such as "Reviewed-by".

base-commit: 259372b7a95e3fea75a9ce1127a904e3f1ea3591
--
2.41.0
R
R
Roman Scherer wrote on 27 Apr 09:20 +0200
Re: [bug#70584] [PATCH] gnu: Add emacs-llm.
(name . Liliana Marie Prikler)(address . liliana.prikler@gmail.com)
87le4zmfu0.fsf@burningswell.com
Hi Liliana,

I sent a v2 of the patch for the emacs-llm package. I now changed the
description of the package. I hope it does not contain anything what you
refered to as ad speak.

If it still does not fit your needs, please change it to your liking or
suggest something better.

Thanks, Roman.

Liliana Marie Prikler <liliana.prikler@gmail.com> writes:

Toggle quote (13 lines)
> Am Samstag, dem 27.04.2024 um 01:05 +0200 schrieb Roman Scherer:
>> Hi Liliana,
>> could you please provide more constructive feedback and suggest what
>> the description should say? I took the description from the README of
>> the package. I'm here to make Guix better. If you don't want this
>> package that is also fine, then I keep it in my own channel.
>> Roman.
> I don't have any concrete suggestions here, but for comparison, ellama
> looks fine. The packages probably do different things, hence the two
> of them but it should be possible to write about this one based on its
> technical merits without resorting to ad speak.
>
> HTH
-----BEGIN PGP SIGNATURE-----

iQFTBAEBCAA9FiEE0iajOdjfRIFd3gygPdpSUn0qwZkFAmYsp1cfHHJvbWFuLnNj
aGVyZXJAYnVybmluZ3N3ZWxsLmNvbQAKCRA92lJSfSrBmRiFCACL+DJSJAcxm54Z
ntgx536Ias91ecz0cNhrCLeObwOK+lqi0ij/A4M2h0h4UaFYYlNSW71OObh1uQP1
lcXWU/9hv+DSUl6TCrNZdTzpGx3zEKUuAjAg0mCBPLFQfkqDq18pT1YCwBDfqy+3
+x3CbvWIOoGbkFjUtDCAKQ6LMIy8pru+TgKHZftsq18BKw/XF+zBwYapcFsoVVIy
q1xjhhHNfaTKVEUOmbFD1bA7ykfh5qV15jmrLQsorJ2iVRxiNi5kW1JqOZG6cGfW
k4v6oWWHPUBYLEgzTCgaPaslw6qBZq0JVSqNIMBdL0LVv2YvDpFYHNo1FvB/Lgs8
YCU3gEgP
=1glk
-----END PGP SIGNATURE-----

L
L
Liliana Marie Prikler wrote on 29 Apr 20:40 +0200
Re: [bug#70584] [PATCH v2] gnu: Add emacs-llm.
c383a5e04905d837a97049a71eea208213f2fcb0.camel@gmail.com
Am Samstag, dem 27.04.2024 um 09:13 +0200 schrieb Roman Scherer:
Toggle quote (47 lines)
> * gnu/packages/emacs-xyz.scm (emacs-llm): New variable.
>
> Change-Id: Ie89eac7a4f0a31245b6d826ae9885a7092528ced
> ---
>  gnu/packages/emacs-xyz.scm | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
>
> diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
> index 8a2ffc621d..e802cc3f03 100644
> --- a/gnu/packages/emacs-xyz.scm
> +++ b/gnu/packages/emacs-xyz.scm
> @@ -1606,6 +1606,30 @@ (define-public emacs-libgit
>  libgit2 bindings for Emacs, intended to boost the performance of
> Magit.")
>        (license license:gpl2+))))
>  
> +(define-public emacs-llm
> +  (package
> +    (name "emacs-llm")
> +    (version "0.13.0")
> +    (source (origin
> +              (method git-fetch)
> +              (uri (git-reference
> +                    (url "https://github.com/ahyatt/llm")
> +                    (commit version)))
> +              (file-name (git-file-name name version))
> +              (sha256 (base32
> +                      
> "1q7djz4zx1br4d3g46f1m5cbxwl050qjmsm2cy7zcww64rrkcj0l"))))
> +    (build-system emacs-build-system)
> +    (home-page "https://github.com/ahyatt/llm")
> +    (synopsis "Emacs library abstracting Large Language Model
> capabilities.")
> +    (description
> +     "This is a library for interfacing with Large Language Models. 
> It allows
> +Elisp code to use LLMs, but gives the end-user an option to choose
> which LLM
> +they would prefer.  This is especially useful for LLMs, since there
> are ones
> +in which API access costs money, as well as locally installed ones
> that are
> +free.  Applications using LLMs can use this library to make sure
> their
> +application works regardless of the LLm they choose.")
> +    (license license:gpl3+)))
> +
Oof, this is still pretty much the same description as before with only
the most basic concerns addressed.

How about "This package provides interfaces to abstract various
@acronym{LLM, large language model}s out in the world. To respect user
freedom, it will warn you before interacting with non-free LLMs."?

As far as I know there is no guideline against including stuff that
works with non-free web services, so this goes beyond the Guix
guidelines – we even have some packages calling to chatgpt and not much
else, so it's a big improvement over that – and it's a somewhat good
message for those amongst us who are concerned about freedom three when
they think about LLMs.

WDYT?
R
R
Roman Scherer wrote on 1 May 12:40 +0200
[PATCH v3] gnu: Add emacs-llm.
(address . 70584@debbugs.gnu.org)(name . Roman Scherer)(address . roman@burningswell.com)
992015c0e069698f62fe436a61614de5d4e142f7.1714560002.git.roman@burningswell.com
* gnu/packages/emacs-xyz.scm (emacs-llm): New variable.

Change-Id: Ie89eac7a4f0a31245b6d826ae9885a7092528ced
---
gnu/packages/emacs-xyz.scm | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)

Toggle diff (214 lines)
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 491084088f..2363ac5931 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -1606,6 +1606,27 @@ (define-public emacs-libgit
libgit2 bindings for Emacs, intended to boost the performance of Magit.")
(license license:gpl2+))))
+(define-public emacs-llm
+ (package
+ (name "emacs-llm")
+ (version "0.13.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/ahyatt/llm")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256 (base32
+ "1q7djz4zx1br4d3g46f1m5cbxwl050qjmsm2cy7zcww64rrkcj0l"))))
+ (build-system emacs-build-system)
+ (home-page "https://github.com/ahyatt/llm")
+ (synopsis "Emacs library abstracting Large Language Model capabilities.")
+ (description
+ "This package provides interfaces to abstract various @acronym{LLM, large
+language model}s out in the world. To respect user freedom, it will warn you
+before interacting with non-free LLMs.")
+ (license license:gpl3+)))
+
(define-public emacs-magit
;; Use this unreleased commit to benefit from a recent improvements with
;; regard to adding git trailers such as "Reviewed-by".

base-commit: 259372b7a95e3fea75a9ce1127a904e3f1ea3591
prerequisite-patch-id: 3aa85132e5839b481ffff916b126a68160b6d517
prerequisite-patch-id: 4a01b0be86843a874524dc76ce0e270f3866db17
prerequisite-patch-id: 46ed1ec06e74a4594258f2dadedfd4bf9af9aa7f
prerequisite-patch-id: d866f9fe53477ec218e545528dba7d6bb3b255a4
prerequisite-patch-id: 98620a670467ac0cde113b4f8c9b51bc6b183de6
prerequisite-patch-id: c8844ba35968b5be756af2f906319f7f9569dc52
prerequisite-patch-id: e168958b168d9b68c5cb85e7ecf1c0d55c303afc
prerequisite-patch-id: 518d45f91cc97dd4da3656889420a902130fa849
prerequisite-patch-id: 1104b4fdc3ddb7633d2bee4f68cb70d6c8961243
prerequisite-patch-id: 5cb5081aefcfd465769f508a7e0beaff2b4e339e
prerequisite-patch-id: 14af9262fcd071dd89e7b5ea33f3c5ca7ef97333
prerequisite-patch-id: 79ff13b50e217e6fc18dd1a2c3fcc56aad69d9c7
prerequisite-patch-id: f294eb85e37c3409b9bd3349d3d265df4baaf9bc
prerequisite-patch-id: 4d61a1aafe2dab7537985b409f3d81336f311152
prerequisite-patch-id: a811686652c8b1fdd929e3cb986ea43c4becb19a
prerequisite-patch-id: 5c9e78c74b1f60f7d379a037049ce330b8c0468c
prerequisite-patch-id: aba438a3c32ef44149bbc749c1e0b89d00006b3e
prerequisite-patch-id: 21d37eeee8320470cec82915f2b30f83e6dd18ed
prerequisite-patch-id: 3d1c34393f189e614a2c378bee44644140b635a3
prerequisite-patch-id: 61be8544610f7c50d05e8778625f0b70c538855e
prerequisite-patch-id: 54f4b100e5bbc4844c36ed13a22e65e31f590fe7
prerequisite-patch-id: 584942123d1938f1e9a15c53ada37e4ec0e24e43
prerequisite-patch-id: 8828ab53b932a87c83dc52f31edd4003b1252a15
prerequisite-patch-id: 6b335011cbe604b5f0f821ba1e2f7ea9c4351fa8
prerequisite-patch-id: 07a83691df11d443730075dea777f0bc6e1e4870
prerequisite-patch-id: 4cd04f444d7e8955a27c8ecfd20040d07f9bb526
prerequisite-patch-id: f923481dd713dfd0377a5d0c347a065724461e87
prerequisite-patch-id: edfae670d288017e795303f0f5fe9e6215e2681e
prerequisite-patch-id: a9f93c81e4ebe5ab41b8ea5b83601823fd3ba9d9
prerequisite-patch-id: eee15905a9347b252aa48c586e49101ad56e0190
prerequisite-patch-id: 49f3593e2b4e80f592414b53db0fb3b6b49210f3
prerequisite-patch-id: cf3a9ac719635ec7c569cd46faf264cfe9906066
prerequisite-patch-id: 8cd583418f41d9264c38913516ee4302cf0c5bbf
prerequisite-patch-id: 3bd0cab80740e6675f6ce68e76c7c538799f0615
prerequisite-patch-id: 50031a671ba6e9209419d67a60a9858672daaa95
prerequisite-patch-id: 59c19fe24642ac4c7cbb5271144dadbb6a1da5b3
prerequisite-patch-id: bc9890b1ea0cc1a1820db8adb20ce0d3f69c65ef
prerequisite-patch-id: 455921dbaa6babc3a0f666eff8be41973ba1dad5
prerequisite-patch-id: 0313a539006bf29b874c38bdbbd2101fdca165e6
prerequisite-patch-id: 34474fa9515e3b58bb013dddaefadd603eed6580
prerequisite-patch-id: 9f9eade6488af2c7c721a083c1b43e5ff380c5df
prerequisite-patch-id: a8c7f8bef8bb84465d8cd23f145e5c852543ed77
prerequisite-patch-id: 2a74bc27dc1fb91ea1bd63ee26b329df95024d5c
prerequisite-patch-id: 7bd0e41c6ec497988254f2716ac1592a8ae877cb
prerequisite-patch-id: 482e16e3edd3dc9cd410c99ca249c39b7045579c
prerequisite-patch-id: 7af864749b5b3dcd95857458e16a05578058cce9
prerequisite-patch-id: be6e3d44f3aeef775c8fd7d28018ca8d040c7211
prerequisite-patch-id: 22b46db06997790673cc2a4e46088601e0bcbb7b
prerequisite-patch-id: 486f01866a970602770102d2590fc91bd8543083
prerequisite-patch-id: 621cff04a028b64cded3e992fd06bc87733c736b
prerequisite-patch-id: 9c008f363502f03bf0864898b403c580f2c6616c
prerequisite-patch-id: d6198e046aa36442ebebbea2cbff10b7fd276b2b
prerequisite-patch-id: 76c6bff705b5302dfabb52c6f409436a5c0f9af5
prerequisite-patch-id: 2b41cef8760328215f05f07782fd8659769d2e9a
prerequisite-patch-id: d3b7efbe024279f6e148539c1170c66563d6e341
prerequisite-patch-id: 5fea90ed6ddc5023823802d5dbb01c3b437eac18
prerequisite-patch-id: fd00b5ed1ead79c6afcf08d330e8856a7d61a8e3
prerequisite-patch-id: ba7bec51f97da0056a426ecec40f6cd98e129854
prerequisite-patch-id: 2fe2b524460feb80494ebcbef3830747bc6f124c
prerequisite-patch-id: db096c410b6bf7e2b44d63562b689a3c11b884a9
prerequisite-patch-id: d686b084956eb8e114e16b61a2dbe