All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1517334602.5412.3.camel@primarydata.com>

diff --git a/a/1.txt b/N1/1.txt
index 11e24ee..f617a13 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -103,4 +103,3 @@ inode_peek_iversion_raw() and shift 'old'?
 Trond Myklebust
 Linux NFS client maintainer, PrimaryData
 trond.myklebust@primarydata.com
-ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±ý»k~ÏâžØ^n‡r¡ö¦zË\x1aëh™¨è­Ú&£ûàz¿äz¹Þ—ú+€Ê+zf£¢·hšˆ§~†­†Ûiÿÿïêÿ‘êçz_è®\x0fæj:+v‰¨þ)ߣøm
diff --git a/a/content_digest b/N1/content_digest
index e372c4c..5891c68 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -118,7 +118,6 @@
  "-- \n"
  "Trond Myklebust\n"
  "Linux NFS client maintainer, PrimaryData\n"
- "trond.myklebust@primarydata.com\n"
- "\303\277\303\264\303\250\302\272{.n\303\207+\302\211\302\267\302\237\302\256\302\211\302\255\302\206+%\302\212\303\213\303\277\302\261\303\251\303\235\302\266\027\302\245\302\212w\303\277\302\272{.n\303\207+\302\211\302\267\302\245\302\212{\302\261\303\275\302\273k~\303\217\303\242\302\236\303\230^n\302\207r\302\241\303\266\302\246z\303\213\032\302\201\303\253h\302\231\302\250\303\250\302\255\303\232&\302\243\303\273\303\240z\302\277\303\244z\302\271\303\236\302\227\303\272+\302\200\303\212+zf\302\243\302\242\302\267h\302\232\302\210\302\247~\302\206\302\255\302\206\303\233i\303\277\303\277\303\257\302\201\303\252\303\277\302\221\303\252\303\247z_\303\250\302\256\017\303\246j:+v\302\211\302\250\303\276)\303\237\302\243\303\270m"
+ trond.myklebust@primarydata.com
 
-7136147e0b37f2b79cf58f1d1beeeb8d5b69a489dffadedb1bd6ec795eb867e4
+66d5cb6bf02cdf31d61b48ec9d5eb0fef7e284b25675083098d1e371c51dc596

diff --git a/a/1.txt b/N2/1.txt
index 11e24ee..2c37b6f 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -1,106 +1,64 @@
-On Tue, 2018-01-30 at 12:31 -0500, Jeff Layton wrote:
-> From: Jeff Layton <jlayton@redhat.com>
-> 
-> As Linus points out:
-> 
->     The inode_cmp_iversion{+raw}() functions are pure and utter crap.
-> 
->     Why?
-> 
->     You say that they return 0/negative/positive, but they do so in a
->     completely broken manner. They return that ternary value as the
->     sequence number difference in a 's64', which means that if you
->     actually care about that ternary value, and do the *sane* thing
-> that
->     the kernel-doc of the function implies is the right thing, you
-> would
->     do
-> 
->         int cmp = inode_cmp_iversion(inode, old);
->         if (cmp < 0 ...
-> 
->     and as a result you get code that looks sane, but that doesn't
->     actually *WORK* right.
-> 
-> Since none of the callers actually care about the ternary value here,
-> convert the inode_cmp_iversion{+raw} functions to just return a
-> boolean
-> value (false for matching, true for non-matching).
-> 
-> This matches the existing use of these functions just fine, and makes
-> it
-> simple to convert them to return a ternary value in the future if we
-> grow callers that need it.
-> 
-> Signed-off-by: Jeff Layton <jlayton@redhat.com>
-> ---
->  include/linux/iversion.h | 20 +++++++++-----------
->  1 file changed, 9 insertions(+), 11 deletions(-)
-> 
-> diff --git a/include/linux/iversion.h b/include/linux/iversion.h
-> index 858463fca249..ace32775c5f0 100644
-> --- a/include/linux/iversion.h
-> +++ b/include/linux/iversion.h
-> @@ -309,13 +309,13 @@ inode_query_iversion(struct inode *inode)
->   * @inode: inode to check
->   * @old: old value to check against its i_version
->   *
-> - * Compare the current raw i_version counter with a previous one.
-> Returns 0 if
-> - * they are the same or non-zero if they are different.
-> + * Compare the current raw i_version counter with a previous one.
-> Returns false
-> + * if they are the same or true if they are different.
->   */
-> -static inline s64
-> +static inline bool
->  inode_cmp_iversion_raw(const struct inode *inode, u64 old)
->  {
-> -	return (s64)inode_peek_iversion_raw(inode) - (s64)old;
-> +	return inode_peek_iversion_raw(inode) != old;
->  }
->  
->  /**
-> @@ -323,19 +323,17 @@ inode_cmp_iversion_raw(const struct inode
-> *inode, u64 old)
->   * @inode: inode to check
->   * @old: old value to check against its i_version
->   *
-> - * Compare an i_version counter with a previous one. Returns 0 if
-> they are
-> - * the same, a positive value if the one in the inode appears newer
-> than @old,
-> - * and a negative value if @old appears to be newer than the one in
-> the
-> - * inode.
-> + * Compare an i_version counter with a previous one. Returns false
-> if they are
-> + * the same, and true if they are different.
->   *
->   * Note that we don't need to set the QUERIED flag in this case, as
-> the value
->   * in the inode is not being recorded for later use.
->   */
->  
-> -static inline s64
-> +static inline bool
->  inode_cmp_iversion(const struct inode *inode, u64 old)
->  {
-> -	return (s64)(inode_peek_iversion_raw(inode) &
-> ~I_VERSION_QUERIED) -
-> -	       (s64)(old << I_VERSION_QUERIED_SHIFT);
-> +	return (inode_peek_iversion_raw(inode) & ~I_VERSION_QUERIED)
-> !=
-> +			(old << I_VERSION_QUERIED_SHIFT);
->  }
-
-Is there any reason why this couldn't just use inode_peek_iversion()
-instead of having to both mask the output from
-inode_peek_iversion_raw() and shift 'old'?
-
->  #endif
--- 
-Trond Myklebust
-Linux NFS client maintainer, PrimaryData
-trond.myklebust@primarydata.com
-ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±ý»k~ÏâžØ^n‡r¡ö¦zË\x1aëh™¨è­Ú&£ûàz¿äz¹Þ—ú+€Ê+zf£¢·hšˆ§~†­†Ûiÿÿïêÿ‘êçz_è®\x0fæj:+v‰¨þ)ߣøm
+T24gVHVlLCAyMDE4LTAxLTMwIGF0IDEyOjMxIC0wNTAwLCBKZWZmIExheXRvbiB3cm90ZToNCj4g
+RnJvbTogSmVmZiBMYXl0b24gPGpsYXl0b25AcmVkaGF0LmNvbT4NCj4gDQo+IEFzIExpbnVzIHBv
+aW50cyBvdXQ6DQo+IA0KPiAgICAgVGhlIGlub2RlX2NtcF9pdmVyc2lvbnsrcmF3fSgpIGZ1bmN0
+aW9ucyBhcmUgcHVyZSBhbmQgdXR0ZXIgY3JhcC4NCj4gDQo+ICAgICBXaHk/DQo+IA0KPiAgICAg
+WW91IHNheSB0aGF0IHRoZXkgcmV0dXJuIDAvbmVnYXRpdmUvcG9zaXRpdmUsIGJ1dCB0aGV5IGRv
+IHNvIGluIGENCj4gICAgIGNvbXBsZXRlbHkgYnJva2VuIG1hbm5lci4gVGhleSByZXR1cm4gdGhh
+dCB0ZXJuYXJ5IHZhbHVlIGFzIHRoZQ0KPiAgICAgc2VxdWVuY2UgbnVtYmVyIGRpZmZlcmVuY2Ug
+aW4gYSAnczY0Jywgd2hpY2ggbWVhbnMgdGhhdCBpZiB5b3UNCj4gICAgIGFjdHVhbGx5IGNhcmUg
+YWJvdXQgdGhhdCB0ZXJuYXJ5IHZhbHVlLCBhbmQgZG8gdGhlICpzYW5lKiB0aGluZw0KPiB0aGF0
+DQo+ICAgICB0aGUga2VybmVsLWRvYyBvZiB0aGUgZnVuY3Rpb24gaW1wbGllcyBpcyB0aGUgcmln
+aHQgdGhpbmcsIHlvdQ0KPiB3b3VsZA0KPiAgICAgZG8NCj4gDQo+ICAgICAgICAgaW50IGNtcCA9
+IGlub2RlX2NtcF9pdmVyc2lvbihpbm9kZSwgb2xkKTsNCj4gICAgICAgICBpZiAoY21wIDwgMCAu
+Li4NCj4gDQo+ICAgICBhbmQgYXMgYSByZXN1bHQgeW91IGdldCBjb2RlIHRoYXQgbG9va3Mgc2Fu
+ZSwgYnV0IHRoYXQgZG9lc24ndA0KPiAgICAgYWN0dWFsbHkgKldPUksqIHJpZ2h0Lg0KPiANCj4g
+U2luY2Ugbm9uZSBvZiB0aGUgY2FsbGVycyBhY3R1YWxseSBjYXJlIGFib3V0IHRoZSB0ZXJuYXJ5
+IHZhbHVlIGhlcmUsDQo+IGNvbnZlcnQgdGhlIGlub2RlX2NtcF9pdmVyc2lvbnsrcmF3fSBmdW5j
+dGlvbnMgdG8ganVzdCByZXR1cm4gYQ0KPiBib29sZWFuDQo+IHZhbHVlIChmYWxzZSBmb3IgbWF0
+Y2hpbmcsIHRydWUgZm9yIG5vbi1tYXRjaGluZykuDQo+IA0KPiBUaGlzIG1hdGNoZXMgdGhlIGV4
+aXN0aW5nIHVzZSBvZiB0aGVzZSBmdW5jdGlvbnMganVzdCBmaW5lLCBhbmQgbWFrZXMNCj4gaXQN
+Cj4gc2ltcGxlIHRvIGNvbnZlcnQgdGhlbSB0byByZXR1cm4gYSB0ZXJuYXJ5IHZhbHVlIGluIHRo
+ZSBmdXR1cmUgaWYgd2UNCj4gZ3JvdyBjYWxsZXJzIHRoYXQgbmVlZCBpdC4NCj4gDQo+IFNpZ25l
+ZC1vZmYtYnk6IEplZmYgTGF5dG9uIDxqbGF5dG9uQHJlZGhhdC5jb20+DQo+IC0tLQ0KPiAgaW5j
+bHVkZS9saW51eC9pdmVyc2lvbi5oIHwgMjAgKysrKysrKysrLS0tLS0tLS0tLS0NCj4gIDEgZmls
+ZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAt
+LWdpdCBhL2luY2x1ZGUvbGludXgvaXZlcnNpb24uaCBiL2luY2x1ZGUvbGludXgvaXZlcnNpb24u
+aA0KPiBpbmRleCA4NTg0NjNmY2EyNDkuLmFjZTMyNzc1YzVmMCAxMDA2NDQNCj4gLS0tIGEvaW5j
+bHVkZS9saW51eC9pdmVyc2lvbi5oDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvaXZlcnNpb24uaA0K
+PiBAQCAtMzA5LDEzICszMDksMTMgQEAgaW5vZGVfcXVlcnlfaXZlcnNpb24oc3RydWN0IGlub2Rl
+ICppbm9kZSkNCj4gICAqIEBpbm9kZTogaW5vZGUgdG8gY2hlY2sNCj4gICAqIEBvbGQ6IG9sZCB2
+YWx1ZSB0byBjaGVjayBhZ2FpbnN0IGl0cyBpX3ZlcnNpb24NCj4gICAqDQo+IC0gKiBDb21wYXJl
+IHRoZSBjdXJyZW50IHJhdyBpX3ZlcnNpb24gY291bnRlciB3aXRoIGEgcHJldmlvdXMgb25lLg0K
+PiBSZXR1cm5zIDAgaWYNCj4gLSAqIHRoZXkgYXJlIHRoZSBzYW1lIG9yIG5vbi16ZXJvIGlmIHRo
+ZXkgYXJlIGRpZmZlcmVudC4NCj4gKyAqIENvbXBhcmUgdGhlIGN1cnJlbnQgcmF3IGlfdmVyc2lv
+biBjb3VudGVyIHdpdGggYSBwcmV2aW91cyBvbmUuDQo+IFJldHVybnMgZmFsc2UNCj4gKyAqIGlm
+IHRoZXkgYXJlIHRoZSBzYW1lIG9yIHRydWUgaWYgdGhleSBhcmUgZGlmZmVyZW50Lg0KPiAgICov
+DQo+IC1zdGF0aWMgaW5saW5lIHM2NA0KPiArc3RhdGljIGlubGluZSBib29sDQo+ICBpbm9kZV9j
+bXBfaXZlcnNpb25fcmF3KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBvbGQpDQo+ICB7
+DQo+IC0JcmV0dXJuIChzNjQpaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoaW5vZGUpIC0gKHM2NClv
+bGQ7DQo+ICsJcmV0dXJuIGlub2RlX3BlZWtfaXZlcnNpb25fcmF3KGlub2RlKSAhPSBvbGQ7DQo+
+ICB9DQo+ICANCj4gIC8qKg0KPiBAQCAtMzIzLDE5ICszMjMsMTcgQEAgaW5vZGVfY21wX2l2ZXJz
+aW9uX3Jhdyhjb25zdCBzdHJ1Y3QgaW5vZGUNCj4gKmlub2RlLCB1NjQgb2xkKQ0KPiAgICogQGlu
+b2RlOiBpbm9kZSB0byBjaGVjaw0KPiAgICogQG9sZDogb2xkIHZhbHVlIHRvIGNoZWNrIGFnYWlu
+c3QgaXRzIGlfdmVyc2lvbg0KPiAgICoNCj4gLSAqIENvbXBhcmUgYW4gaV92ZXJzaW9uIGNvdW50
+ZXIgd2l0aCBhIHByZXZpb3VzIG9uZS4gUmV0dXJucyAwIGlmDQo+IHRoZXkgYXJlDQo+IC0gKiB0
+aGUgc2FtZSwgYSBwb3NpdGl2ZSB2YWx1ZSBpZiB0aGUgb25lIGluIHRoZSBpbm9kZSBhcHBlYXJz
+IG5ld2VyDQo+IHRoYW4gQG9sZCwNCj4gLSAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIGlmIEBvbGQg
+YXBwZWFycyB0byBiZSBuZXdlciB0aGFuIHRoZSBvbmUgaW4NCj4gdGhlDQo+IC0gKiBpbm9kZS4N
+Cj4gKyAqIENvbXBhcmUgYW4gaV92ZXJzaW9uIGNvdW50ZXIgd2l0aCBhIHByZXZpb3VzIG9uZS4g
+UmV0dXJucyBmYWxzZQ0KPiBpZiB0aGV5IGFyZQ0KPiArICogdGhlIHNhbWUsIGFuZCB0cnVlIGlm
+IHRoZXkgYXJlIGRpZmZlcmVudC4NCj4gICAqDQo+ICAgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVl
+ZCB0byBzZXQgdGhlIFFVRVJJRUQgZmxhZyBpbiB0aGlzIGNhc2UsIGFzDQo+IHRoZSB2YWx1ZQ0K
+PiAgICogaW4gdGhlIGlub2RlIGlzIG5vdCBiZWluZyByZWNvcmRlZCBmb3IgbGF0ZXIgdXNlLg0K
+PiAgICovDQo+ICANCj4gLXN0YXRpYyBpbmxpbmUgczY0DQo+ICtzdGF0aWMgaW5saW5lIGJvb2wN
+Cj4gIGlub2RlX2NtcF9pdmVyc2lvbihjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2xk
+KQ0KPiAgew0KPiAtCXJldHVybiAoczY0KShpbm9kZV9wZWVrX2l2ZXJzaW9uX3Jhdyhpbm9kZSkg
+Jg0KPiB+SV9WRVJTSU9OX1FVRVJJRUQpIC0NCj4gLQkgICAgICAgKHM2NCkob2xkIDw8IElfVkVS
+U0lPTl9RVUVSSUVEX1NISUZUKTsNCj4gKwlyZXR1cm4gKGlub2RlX3BlZWtfaXZlcnNpb25fcmF3
+KGlub2RlKSAmIH5JX1ZFUlNJT05fUVVFUklFRCkNCj4gIT0NCj4gKwkJCShvbGQgPDwgSV9WRVJT
+SU9OX1FVRVJJRURfU0hJRlQpOw0KPiAgfQ0KDQpJcyB0aGVyZSBhbnkgcmVhc29uIHdoeSB0aGlz
+IGNvdWxkbid0IGp1c3QgdXNlIGlub2RlX3BlZWtfaXZlcnNpb24oKQ0KaW5zdGVhZCBvZiBoYXZp
+bmcgdG8gYm90aCBtYXNrIHRoZSBvdXRwdXQgZnJvbQ0KaW5vZGVfcGVla19pdmVyc2lvbl9yYXco
+KSBhbmQgc2hpZnQgJ29sZCc/DQoNCj4gICNlbmRpZg0KLS0gDQpUcm9uZCBNeWtsZWJ1c3QNCkxp
+bnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lciwgUHJpbWFyeURhdGENCnRyb25kLm15a2xlYnVzdEBw
+cmltYXJ5ZGF0YS5jb20NCg==
diff --git a/a/content_digest b/N2/content_digest
index e372c4c..dfc7123 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -14,111 +14,69 @@
  " tytso@mit.edu <tytso@mit.edu>\0"
  "\00:1\0"
  "b\0"
- "On Tue, 2018-01-30 at 12:31 -0500, Jeff Layton wrote:\n"
- "> From: Jeff Layton <jlayton@redhat.com>\n"
- "> \n"
- "> As Linus points out:\n"
- "> \n"
- ">     The inode_cmp_iversion{+raw}() functions are pure and utter crap.\n"
- "> \n"
- ">     Why?\n"
- "> \n"
- ">     You say that they return 0/negative/positive, but they do so in a\n"
- ">     completely broken manner. They return that ternary value as the\n"
- ">     sequence number difference in a 's64', which means that if you\n"
- ">     actually care about that ternary value, and do the *sane* thing\n"
- "> that\n"
- ">     the kernel-doc of the function implies is the right thing, you\n"
- "> would\n"
- ">     do\n"
- "> \n"
- ">         int cmp = inode_cmp_iversion(inode, old);\n"
- ">         if (cmp < 0 ...\n"
- "> \n"
- ">     and as a result you get code that looks sane, but that doesn't\n"
- ">     actually *WORK* right.\n"
- "> \n"
- "> Since none of the callers actually care about the ternary value here,\n"
- "> convert the inode_cmp_iversion{+raw} functions to just return a\n"
- "> boolean\n"
- "> value (false for matching, true for non-matching).\n"
- "> \n"
- "> This matches the existing use of these functions just fine, and makes\n"
- "> it\n"
- "> simple to convert them to return a ternary value in the future if we\n"
- "> grow callers that need it.\n"
- "> \n"
- "> Signed-off-by: Jeff Layton <jlayton@redhat.com>\n"
- "> ---\n"
- ">  include/linux/iversion.h | 20 +++++++++-----------\n"
- ">  1 file changed, 9 insertions(+), 11 deletions(-)\n"
- "> \n"
- "> diff --git a/include/linux/iversion.h b/include/linux/iversion.h\n"
- "> index 858463fca249..ace32775c5f0 100644\n"
- "> --- a/include/linux/iversion.h\n"
- "> +++ b/include/linux/iversion.h\n"
- "> @@ -309,13 +309,13 @@ inode_query_iversion(struct inode *inode)\n"
- ">   * @inode: inode to check\n"
- ">   * @old: old value to check against its i_version\n"
- ">   *\n"
- "> - * Compare the current raw i_version counter with a previous one.\n"
- "> Returns 0 if\n"
- "> - * they are the same or non-zero if they are different.\n"
- "> + * Compare the current raw i_version counter with a previous one.\n"
- "> Returns false\n"
- "> + * if they are the same or true if they are different.\n"
- ">   */\n"
- "> -static inline s64\n"
- "> +static inline bool\n"
- ">  inode_cmp_iversion_raw(const struct inode *inode, u64 old)\n"
- ">  {\n"
- "> -\treturn (s64)inode_peek_iversion_raw(inode) - (s64)old;\n"
- "> +\treturn inode_peek_iversion_raw(inode) != old;\n"
- ">  }\n"
- ">  \n"
- ">  /**\n"
- "> @@ -323,19 +323,17 @@ inode_cmp_iversion_raw(const struct inode\n"
- "> *inode, u64 old)\n"
- ">   * @inode: inode to check\n"
- ">   * @old: old value to check against its i_version\n"
- ">   *\n"
- "> - * Compare an i_version counter with a previous one. Returns 0 if\n"
- "> they are\n"
- "> - * the same, a positive value if the one in the inode appears newer\n"
- "> than @old,\n"
- "> - * and a negative value if @old appears to be newer than the one in\n"
- "> the\n"
- "> - * inode.\n"
- "> + * Compare an i_version counter with a previous one. Returns false\n"
- "> if they are\n"
- "> + * the same, and true if they are different.\n"
- ">   *\n"
- ">   * Note that we don't need to set the QUERIED flag in this case, as\n"
- "> the value\n"
- ">   * in the inode is not being recorded for later use.\n"
- ">   */\n"
- ">  \n"
- "> -static inline s64\n"
- "> +static inline bool\n"
- ">  inode_cmp_iversion(const struct inode *inode, u64 old)\n"
- ">  {\n"
- "> -\treturn (s64)(inode_peek_iversion_raw(inode) &\n"
- "> ~I_VERSION_QUERIED) -\n"
- "> -\t       (s64)(old << I_VERSION_QUERIED_SHIFT);\n"
- "> +\treturn (inode_peek_iversion_raw(inode) & ~I_VERSION_QUERIED)\n"
- "> !=\n"
- "> +\t\t\t(old << I_VERSION_QUERIED_SHIFT);\n"
- ">  }\n"
- "\n"
- "Is there any reason why this couldn't just use inode_peek_iversion()\n"
- "instead of having to both mask the output from\n"
- "inode_peek_iversion_raw() and shift 'old'?\n"
- "\n"
- ">  #endif\n"
- "-- \n"
- "Trond Myklebust\n"
- "Linux NFS client maintainer, PrimaryData\n"
- "trond.myklebust@primarydata.com\n"
- "\303\277\303\264\303\250\302\272{.n\303\207+\302\211\302\267\302\237\302\256\302\211\302\255\302\206+%\302\212\303\213\303\277\302\261\303\251\303\235\302\266\027\302\245\302\212w\303\277\302\272{.n\303\207+\302\211\302\267\302\245\302\212{\302\261\303\275\302\273k~\303\217\303\242\302\236\303\230^n\302\207r\302\241\303\266\302\246z\303\213\032\302\201\303\253h\302\231\302\250\303\250\302\255\303\232&\302\243\303\273\303\240z\302\277\303\244z\302\271\303\236\302\227\303\272+\302\200\303\212+zf\302\243\302\242\302\267h\302\232\302\210\302\247~\302\206\302\255\302\206\303\233i\303\277\303\277\303\257\302\201\303\252\303\277\302\221\303\252\303\247z_\303\250\302\256\017\303\246j:+v\302\211\302\250\303\276)\303\237\302\243\303\270m"
+ "T24gVHVlLCAyMDE4LTAxLTMwIGF0IDEyOjMxIC0wNTAwLCBKZWZmIExheXRvbiB3cm90ZToNCj4g\n"
+ "RnJvbTogSmVmZiBMYXl0b24gPGpsYXl0b25AcmVkaGF0LmNvbT4NCj4gDQo+IEFzIExpbnVzIHBv\n"
+ "aW50cyBvdXQ6DQo+IA0KPiAgICAgVGhlIGlub2RlX2NtcF9pdmVyc2lvbnsrcmF3fSgpIGZ1bmN0\n"
+ "aW9ucyBhcmUgcHVyZSBhbmQgdXR0ZXIgY3JhcC4NCj4gDQo+ICAgICBXaHk/DQo+IA0KPiAgICAg\n"
+ "WW91IHNheSB0aGF0IHRoZXkgcmV0dXJuIDAvbmVnYXRpdmUvcG9zaXRpdmUsIGJ1dCB0aGV5IGRv\n"
+ "IHNvIGluIGENCj4gICAgIGNvbXBsZXRlbHkgYnJva2VuIG1hbm5lci4gVGhleSByZXR1cm4gdGhh\n"
+ "dCB0ZXJuYXJ5IHZhbHVlIGFzIHRoZQ0KPiAgICAgc2VxdWVuY2UgbnVtYmVyIGRpZmZlcmVuY2Ug\n"
+ "aW4gYSAnczY0Jywgd2hpY2ggbWVhbnMgdGhhdCBpZiB5b3UNCj4gICAgIGFjdHVhbGx5IGNhcmUg\n"
+ "YWJvdXQgdGhhdCB0ZXJuYXJ5IHZhbHVlLCBhbmQgZG8gdGhlICpzYW5lKiB0aGluZw0KPiB0aGF0\n"
+ "DQo+ICAgICB0aGUga2VybmVsLWRvYyBvZiB0aGUgZnVuY3Rpb24gaW1wbGllcyBpcyB0aGUgcmln\n"
+ "aHQgdGhpbmcsIHlvdQ0KPiB3b3VsZA0KPiAgICAgZG8NCj4gDQo+ICAgICAgICAgaW50IGNtcCA9\n"
+ "IGlub2RlX2NtcF9pdmVyc2lvbihpbm9kZSwgb2xkKTsNCj4gICAgICAgICBpZiAoY21wIDwgMCAu\n"
+ "Li4NCj4gDQo+ICAgICBhbmQgYXMgYSByZXN1bHQgeW91IGdldCBjb2RlIHRoYXQgbG9va3Mgc2Fu\n"
+ "ZSwgYnV0IHRoYXQgZG9lc24ndA0KPiAgICAgYWN0dWFsbHkgKldPUksqIHJpZ2h0Lg0KPiANCj4g\n"
+ "U2luY2Ugbm9uZSBvZiB0aGUgY2FsbGVycyBhY3R1YWxseSBjYXJlIGFib3V0IHRoZSB0ZXJuYXJ5\n"
+ "IHZhbHVlIGhlcmUsDQo+IGNvbnZlcnQgdGhlIGlub2RlX2NtcF9pdmVyc2lvbnsrcmF3fSBmdW5j\n"
+ "dGlvbnMgdG8ganVzdCByZXR1cm4gYQ0KPiBib29sZWFuDQo+IHZhbHVlIChmYWxzZSBmb3IgbWF0\n"
+ "Y2hpbmcsIHRydWUgZm9yIG5vbi1tYXRjaGluZykuDQo+IA0KPiBUaGlzIG1hdGNoZXMgdGhlIGV4\n"
+ "aXN0aW5nIHVzZSBvZiB0aGVzZSBmdW5jdGlvbnMganVzdCBmaW5lLCBhbmQgbWFrZXMNCj4gaXQN\n"
+ "Cj4gc2ltcGxlIHRvIGNvbnZlcnQgdGhlbSB0byByZXR1cm4gYSB0ZXJuYXJ5IHZhbHVlIGluIHRo\n"
+ "ZSBmdXR1cmUgaWYgd2UNCj4gZ3JvdyBjYWxsZXJzIHRoYXQgbmVlZCBpdC4NCj4gDQo+IFNpZ25l\n"
+ "ZC1vZmYtYnk6IEplZmYgTGF5dG9uIDxqbGF5dG9uQHJlZGhhdC5jb20+DQo+IC0tLQ0KPiAgaW5j\n"
+ "bHVkZS9saW51eC9pdmVyc2lvbi5oIHwgMjAgKysrKysrKysrLS0tLS0tLS0tLS0NCj4gIDEgZmls\n"
+ "ZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAt\n"
+ "LWdpdCBhL2luY2x1ZGUvbGludXgvaXZlcnNpb24uaCBiL2luY2x1ZGUvbGludXgvaXZlcnNpb24u\n"
+ "aA0KPiBpbmRleCA4NTg0NjNmY2EyNDkuLmFjZTMyNzc1YzVmMCAxMDA2NDQNCj4gLS0tIGEvaW5j\n"
+ "bHVkZS9saW51eC9pdmVyc2lvbi5oDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvaXZlcnNpb24uaA0K\n"
+ "PiBAQCAtMzA5LDEzICszMDksMTMgQEAgaW5vZGVfcXVlcnlfaXZlcnNpb24oc3RydWN0IGlub2Rl\n"
+ "ICppbm9kZSkNCj4gICAqIEBpbm9kZTogaW5vZGUgdG8gY2hlY2sNCj4gICAqIEBvbGQ6IG9sZCB2\n"
+ "YWx1ZSB0byBjaGVjayBhZ2FpbnN0IGl0cyBpX3ZlcnNpb24NCj4gICAqDQo+IC0gKiBDb21wYXJl\n"
+ "IHRoZSBjdXJyZW50IHJhdyBpX3ZlcnNpb24gY291bnRlciB3aXRoIGEgcHJldmlvdXMgb25lLg0K\n"
+ "PiBSZXR1cm5zIDAgaWYNCj4gLSAqIHRoZXkgYXJlIHRoZSBzYW1lIG9yIG5vbi16ZXJvIGlmIHRo\n"
+ "ZXkgYXJlIGRpZmZlcmVudC4NCj4gKyAqIENvbXBhcmUgdGhlIGN1cnJlbnQgcmF3IGlfdmVyc2lv\n"
+ "biBjb3VudGVyIHdpdGggYSBwcmV2aW91cyBvbmUuDQo+IFJldHVybnMgZmFsc2UNCj4gKyAqIGlm\n"
+ "IHRoZXkgYXJlIHRoZSBzYW1lIG9yIHRydWUgaWYgdGhleSBhcmUgZGlmZmVyZW50Lg0KPiAgICov\n"
+ "DQo+IC1zdGF0aWMgaW5saW5lIHM2NA0KPiArc3RhdGljIGlubGluZSBib29sDQo+ICBpbm9kZV9j\n"
+ "bXBfaXZlcnNpb25fcmF3KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBvbGQpDQo+ICB7\n"
+ "DQo+IC0JcmV0dXJuIChzNjQpaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoaW5vZGUpIC0gKHM2NClv\n"
+ "bGQ7DQo+ICsJcmV0dXJuIGlub2RlX3BlZWtfaXZlcnNpb25fcmF3KGlub2RlKSAhPSBvbGQ7DQo+\n"
+ "ICB9DQo+ICANCj4gIC8qKg0KPiBAQCAtMzIzLDE5ICszMjMsMTcgQEAgaW5vZGVfY21wX2l2ZXJz\n"
+ "aW9uX3Jhdyhjb25zdCBzdHJ1Y3QgaW5vZGUNCj4gKmlub2RlLCB1NjQgb2xkKQ0KPiAgICogQGlu\n"
+ "b2RlOiBpbm9kZSB0byBjaGVjaw0KPiAgICogQG9sZDogb2xkIHZhbHVlIHRvIGNoZWNrIGFnYWlu\n"
+ "c3QgaXRzIGlfdmVyc2lvbg0KPiAgICoNCj4gLSAqIENvbXBhcmUgYW4gaV92ZXJzaW9uIGNvdW50\n"
+ "ZXIgd2l0aCBhIHByZXZpb3VzIG9uZS4gUmV0dXJucyAwIGlmDQo+IHRoZXkgYXJlDQo+IC0gKiB0\n"
+ "aGUgc2FtZSwgYSBwb3NpdGl2ZSB2YWx1ZSBpZiB0aGUgb25lIGluIHRoZSBpbm9kZSBhcHBlYXJz\n"
+ "IG5ld2VyDQo+IHRoYW4gQG9sZCwNCj4gLSAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIGlmIEBvbGQg\n"
+ "YXBwZWFycyB0byBiZSBuZXdlciB0aGFuIHRoZSBvbmUgaW4NCj4gdGhlDQo+IC0gKiBpbm9kZS4N\n"
+ "Cj4gKyAqIENvbXBhcmUgYW4gaV92ZXJzaW9uIGNvdW50ZXIgd2l0aCBhIHByZXZpb3VzIG9uZS4g\n"
+ "UmV0dXJucyBmYWxzZQ0KPiBpZiB0aGV5IGFyZQ0KPiArICogdGhlIHNhbWUsIGFuZCB0cnVlIGlm\n"
+ "IHRoZXkgYXJlIGRpZmZlcmVudC4NCj4gICAqDQo+ICAgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVl\n"
+ "ZCB0byBzZXQgdGhlIFFVRVJJRUQgZmxhZyBpbiB0aGlzIGNhc2UsIGFzDQo+IHRoZSB2YWx1ZQ0K\n"
+ "PiAgICogaW4gdGhlIGlub2RlIGlzIG5vdCBiZWluZyByZWNvcmRlZCBmb3IgbGF0ZXIgdXNlLg0K\n"
+ "PiAgICovDQo+ICANCj4gLXN0YXRpYyBpbmxpbmUgczY0DQo+ICtzdGF0aWMgaW5saW5lIGJvb2wN\n"
+ "Cj4gIGlub2RlX2NtcF9pdmVyc2lvbihjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgb2xk\n"
+ "KQ0KPiAgew0KPiAtCXJldHVybiAoczY0KShpbm9kZV9wZWVrX2l2ZXJzaW9uX3Jhdyhpbm9kZSkg\n"
+ "Jg0KPiB+SV9WRVJTSU9OX1FVRVJJRUQpIC0NCj4gLQkgICAgICAgKHM2NCkob2xkIDw8IElfVkVS\n"
+ "U0lPTl9RVUVSSUVEX1NISUZUKTsNCj4gKwlyZXR1cm4gKGlub2RlX3BlZWtfaXZlcnNpb25fcmF3\n"
+ "KGlub2RlKSAmIH5JX1ZFUlNJT05fUVVFUklFRCkNCj4gIT0NCj4gKwkJCShvbGQgPDwgSV9WRVJT\n"
+ "SU9OX1FVRVJJRURfU0hJRlQpOw0KPiAgfQ0KDQpJcyB0aGVyZSBhbnkgcmVhc29uIHdoeSB0aGlz\n"
+ "IGNvdWxkbid0IGp1c3QgdXNlIGlub2RlX3BlZWtfaXZlcnNpb24oKQ0KaW5zdGVhZCBvZiBoYXZp\n"
+ "bmcgdG8gYm90aCBtYXNrIHRoZSBvdXRwdXQgZnJvbQ0KaW5vZGVfcGVla19pdmVyc2lvbl9yYXco\n"
+ "KSBhbmQgc2hpZnQgJ29sZCc/DQoNCj4gICNlbmRpZg0KLS0gDQpUcm9uZCBNeWtsZWJ1c3QNCkxp\n"
+ "bnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lciwgUHJpbWFyeURhdGENCnRyb25kLm15a2xlYnVzdEBw\n"
+ cmltYXJ5ZGF0YS5jb20NCg==
 
-7136147e0b37f2b79cf58f1d1beeeb8d5b69a489dffadedb1bd6ec795eb867e4
+8b9c7088fcdd5d2db1c2757a0149bc001403792b9025c30328388a8919736b80

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.