From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kaushal Modi Subject: Re: Allow #+SETUPFILE to point to an URL for the org file Date: Fri, 26 May 2017 20:24:00 +0000 Message-ID: References: <87h96eh4qb.fsf@nicolasgoaziou.fr> <871sxigkhk.fsf@nicolasgoaziou.fr> <87twaef3iq.fsf@nicolasgoaziou.fr> <874lybp5ua.fsf@nicolasgoaziou.fr> <87shjtb5wd.fsf@nicolasgoaziou.fr> <87o9ug83fb.fsf@nicolasgoaziou.fr> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="001a1140495ec99cdb0550731e7e" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:59251) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dELmQ-0006Ls-Ks for emacs-orgmode@gnu.org; Fri, 26 May 2017 16:24:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dELmP-0005g1-H4 for emacs-orgmode@gnu.org; Fri, 26 May 2017 16:24:14 -0400 Received: from mail-lf0-x22a.google.com ([2a00:1450:4010:c07::22a]:35446) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dELmO-0005fk-UM for emacs-orgmode@gnu.org; Fri, 26 May 2017 16:24:13 -0400 Received: by mail-lf0-x22a.google.com with SMTP id a5so11438388lfh.2 for ; Fri, 26 May 2017 13:24:12 -0700 (PDT) In-Reply-To: <87o9ug83fb.fsf@nicolasgoaziou.fr> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Nicolas Goaziou Cc: emacs-org list --001a1140495ec99cdb0550731e7e Content-Type: multipart/alternative; boundary="001a1140495ec99cd70550731e7c" --001a1140495ec99cd70550731e7c Content-Type: text/plain; charset="UTF-8" Thanks for another round of review. I have attached a patch, rebased to master and with all suggestions implemented. There are some additional changes in the patch this time: - Prevent org-edit-special from attempting to open the "file" for editing if the value is a URL. - Silence byte-compiler for ffap-url-regexp. We do a require, but the byte-compiler still complains of a free variable. - Update org.texi at few places (first time editing a texi) On Fri, May 26, 2017 at 3:47 AM Nicolas Goaziou wrote: > I understand the use case for `org-file-clear-cache'. My suggestion is > to remove that need by clearing cache automatically. Of course, the > drawback is the cache is cleared more often than necessary. Users could > get very surprising results if they forget to call this function. So it > might be a good idea to call it from time to time, on user's behalf. > I liked your C-c C-c idea below! :) > `org-file-contents' is a developer-facing function. I don't really see > a good place in the manual for it. That's the problem of > `org-file-clear-cache', which is really an implementation detail users > shouldn't care about. > Understood. > Here's another idea: call it from `org-mode-restart'. So cache is reset > whenever `C-c C-c' is pressed on a keyword. So we don't need to document > the function anymore. Instead, we could drop a note about the cache in > (info "(org) The very busy C-c C-c key"). > Done! > OK. Then the following at least doesn't have the overhead of creating > a string: > Integrated. Thanks! Also, mind the full stop at the end of the comments. > Will do. -- Kaushal Modi --001a1140495ec99cd70550731e7c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks for another round o= f review.

I have attached a patch, rebased to mast= er and with all suggestions implemented.

There are= some additional changes in the patch this time:
- Prevent org-ed= it-special from attempting to open the "file" for editing if the = value is a URL.
- Silence byte-compiler for ffap-url-regexp. We d= o a require, but the byte-compiler still complains of a free variable.
- Update org.texi at few places (first time editing a texi)

On Fri, May 26, 2017 at 3:47 AM Nicolas Goaziou= <mail@nicolasgoaziou.fr&g= t; wrote:
I understand the use case= for `org-file-clear-cache'. My suggestion is
to remove that need by clearing cache automatically. Of course, the
drawback is the cache is cleared more often than necessary. Users could
get very surprising results if they forget to call this function. So it
might be a good idea to call it from time to time, on user's behalf.

I liked your C-c C-c idea below! :)
=
=C2=A0
`org-file-contents' is = a developer-facing function. I don't really see
a good place in the manual for it. That's the problem of
`org-file-clear-cache', which is really an implementation detail users<= br> shouldn't care about.

Understood.
=C2=A0
Here's another idea= : call it from `org-mode-restart'. So cache is reset
whenever `C-c C-c' is pressed on a keyword. So we don't need to doc= ument
the function anymore. Instead, we could drop a note about the cache in
(info "(org) The very busy C-c C-c key").
Done!
=C2=A0
OK.= Then the following at least doesn't have the overhead of creating
a string:

Integrated. Thanks!

Also, mind the full stop at the end of the comments.
<= br>
Will do.
--

Kaushal Modi

--001a1140495ec99cd70550731e7c-- --001a1140495ec99cdb0550731e7e Content-Type: application/octet-stream; name="0001-Allow-org-file-contents-to-fetch-file-contents-from-.patch" Content-Disposition: attachment; filename="0001-Allow-org-file-contents-to-fetch-file-contents-from-.patch" Content-Transfer-Encoding: base64 Content-ID: <15c46676730ce4967311> X-Attachment-Id: 15c46676730ce4967311 RnJvbSA4MGJiMGY4MWZjNTRlMmJkZDdmMDBjMDNmMGQwY2FlNzg5MjA0ODc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLYXVzaGFsIE1vZGkgPGthdXNoYWwubW9kaUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjUgTWF5IDIwMTcgMTE6MDg6MjAgLTA0MDAKU3ViamVjdDogW1BBVENIXSBB bGxvdyBvcmctZmlsZS1jb250ZW50cyB0byBmZXRjaCBmaWxlIGNvbnRlbnRzIGZyb20gYSBVUkwK CiogbGlzcC9vcmcuZWwgKG9yZy0tZmlsZS1jYWNoZSk6IE5ldyBpbnRlcm5hbCB2YXJpYWJsZSB0 byBzdG9yZQpkb3dubG9hZGVkIGZpbGVzJyBjYWNoZS4KCiogbGlzcC9vcmcuZWwgKG9yZy1tb2Rl LXJlc3RhcnQpOiBOb3cgYWxzbyBjbGVhcnMgdGhlIGFib3ZlIGZpbGUKICBjYWNoZS4KCiogbGlz cC9vcmcuZWwgKG9yZy1maWxlLXVybC1wKTogTmV3IGZ1bmN0aW9uIHRvIHRlc3QgaWYgdGhlIGlu cHV0CmFyZ3VtZW50IGlzIGEgVVJMLgoKKiBsaXNwL29yZy5lbCAob3JnLWZpbGUtY29udGVudHMp OiBBbGxvdyB0aGUgRklMRSBhcmd1bWVudCB0byBiZSBhClVSTC4gIElmIHRoZSBVUkwgY29udGVu dHMgYXJlIGFscmVhZHkgY2FjaGVkLCByZXR1cm4gdGhlIGNhY2hlCmNvbnRlbnRzLCBlbHNlIGRv d25sb2FkIHRoZSBmaWxlIGFuZCByZXR1cm4gY29udGVudHMgb2YgdGhhdC4gIFRoZQpmaWxlIGlz IGF1dG9tYXRpY2FsbHkgY2FjaGVkIGVhY2ggdGltZSBpdCBpcyBkb3dubG9hZGVkLiAgQWRkIGEg bmV3Cm9wdGlvbmFsIGFyZ3VtZW50IE5PQ0FDSEUuICBJZiB0aGlzIGlzIG5vbi1uaWwsIHRoZSBV UkwgaXMgYWx3YXlzCmRvd25sb2FkZWQgYWZyZXNoLiAgVXNlIGBvcmctLWZpbGUtY2FjaGUnIGFu ZCBgb3JnLWZpbGUtdXJsLXAnLgoKKiBsaXNwL29yZy5lbCAob3JnLWVkaXQtc3BlY2lhbCk6IERv IG5vdCBhbGxvdyBlZGl0aW5nIHRoZSAiZmlsZSIgaWYgYQpVUkwgaXMgc3BlY2lmaWVkIGZvciB0 aGUgIiMrU0VUVVBGSUxFIi4KCiogbGlzcC9veC5lbCAob3JnLWV4cG9ydC0tbGlzdC1ib3VuZC12 YXJpYWJsZXMpCihvcmctZXhwb3J0LS1wcmVwYXJlLWZpbGUtY29udGVudHMpOgoqIGxpc3Avb3Jn LW1hY3JvLmVsIChvcmctbWFjcm8tLWNvbGxlY3QtbWFjcm9zKSA6IEFkYXB0IHRvIHRoZQpwb3Nz aWJpbGl0eSB0aGF0IHRoZSBpbnB1dCB0byBgb3JnLWZpbGUtY29udGVudHMnIGNhbiBiZSBhIFVS TCB0b28uCgoqIGRvYy9vcmcudGV4aSAoRXhwb3J0IHNldHRpbmdzLCBJbi1idWZmZXIgc2V0dGlu Z3MpCihUaGUgdmVyeSBidXN5IEMtYyBDLWMga2V5KTogTWVudGlvbiB0aGF0ICMrU0VUVVBGSUxF IGtleXdvcmQgY2FuIG5vdwp0YWtlIGEgVVJMIGFzIGEgdmFsdWUsIGFuZCB0aGF0IEMtYyBDLWMg b24gdGhlICMrU0VUVVBGSUxFIGxpbmUgd2lsbApjbGVhciB0aGUgb3JnIGZpbGUgY2FjaGUuCi0t LQogZG9jL29yZy50ZXhpICAgICAgfCAzNyArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQog ZXRjL09SRy1ORVdTICAgICAgfCAxMiArKysrKysrKystCiBsaXNwL29yZy1tYWNyby5lbCB8IDIy ICsrKysrKysrKystLS0tLS0tCiBsaXNwL29yZy5lbCAgICAgICB8IDcwICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIGxpc3Avb3guZWwgICAg ICAgIHwgMzggKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCiA1IGZpbGVzIGNoYW5nZWQs IDEyNyBpbnNlcnRpb25zKCspLCA1MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvb3Jn LnRleGkgYi9kb2Mvb3JnLnRleGkKaW5kZXggMTQyZmE5NjI3Li4zZWJjMDFjMGMgMTAwNjQ0Ci0t LSBhL2RvYy9vcmcudGV4aQorKysgYi9kb2Mvb3JnLnRleGkKQEAgLTEwNDA2LDE0ICsxMDQwNiwx NCBAQCBvdmVycmlkZSBvcHRpb25zIHNldCBhdCBhIG1vcmUgZ2VuZXJhbCBsZXZlbC4KIAogQGNp bmRleCAjK1NFVFVQRklMRQogSW4tYnVmZmVyIHNldHRpbmdzIG1heSBhcHBlYXIgYW55d2hlcmUg aW4gdGhlIGZpbGUsIGVpdGhlciBkaXJlY3RseSBvcgotaW5kaXJlY3RseSB0aHJvdWdoIGEgZmls ZSBpbmNsdWRlZCB1c2luZyBAc2FtcHsjK1NFVFVQRklMRTogZmlsZW5hbWV9IHN5bnRheC4KLU9w dGlvbiBrZXl3b3JkIHNldHMgdGFpbG9yZWQgdG8gYSBwYXJ0aWN1bGFyIGJhY2stZW5kIGNhbiBi ZSBpbnNlcnRlZCBmcm9tCi10aGUgZXhwb3J0IGRpc3BhdGNoZXIgKEBweHJlZntUaGUgZXhwb3J0 IGRpc3BhdGNoZXJ9KSB1c2luZyB0aGUgQGNvZGV7SW5zZXJ0Ci10ZW1wbGF0ZX0gY29tbWFuZCBi eSBwcmVzc2luZyBAa2V5eyN9LiAgVG8gaW5zZXJ0IGtleXdvcmRzIGluZGl2aWR1YWxseSwKLWEg Z29vZCB3YXkgdG8gbWFrZSBzdXJlIHRoZSBrZXl3b3JkIGlzIGNvcnJlY3QgaXMgdG8gdHlwZSBA Y29kZXsjK30gYW5kIHRoZW4KLXRvIHVzZSBAa2Jke00tQGtleXtUQUJ9fUBmb290bm90ZXtNYW55 IGRlc2t0b3BzIGludGVyY2VwdCBAa2Jke00tVEFCfSB0bwotc3dpdGNoIHdpbmRvd3MuICBVc2Ug QGtiZHtDLU0taX0gb3IgQGtiZHtAa2V5e0VTQ30gQGtleXtUQUJ9fSBpbnN0ZWFkLn0gZm9yCi1j b21wbGV0aW9uLgoraW5kaXJlY3RseSB0aHJvdWdoIGEgZmlsZSBpbmNsdWRlZCB1c2luZyBAc2Ft cHsjK1NFVFVQRklMRTogZmlsZW5hbWUvVVJMfQorc3ludGF4LiAgT3B0aW9uIGtleXdvcmQgc2V0 cyB0YWlsb3JlZCB0byBhIHBhcnRpY3VsYXIgYmFjay1lbmQgY2FuIGJlCitpbnNlcnRlZCBmcm9t IHRoZSBleHBvcnQgZGlzcGF0Y2hlciAoQHB4cmVme1RoZSBleHBvcnQgZGlzcGF0Y2hlcn0pIHVz aW5nIHRoZQorQGNvZGV7SW5zZXJ0IHRlbXBsYXRlfSBjb21tYW5kIGJ5IHByZXNzaW5nIEBrZXl7 I30uICBUbyBpbnNlcnQga2V5d29yZHMKK2luZGl2aWR1YWxseSwgYSBnb29kIHdheSB0byBtYWtl IHN1cmUgdGhlIGtleXdvcmQgaXMgY29ycmVjdCBpcyB0byB0eXBlCitAY29kZXsjK30gYW5kIHRo ZW4gdG8gdXNlIEBrYmR7TS1Aa2V5e1RBQn19QGZvb3Rub3Rle01hbnkgZGVza3RvcHMgaW50ZXJj ZXB0CitAa2Jke00tVEFCfSB0byBzd2l0Y2ggd2luZG93cy4gIFVzZSBAa2Jke0MtTS1pfSBvciBA a2Jke0BrZXl7RVNDfSBAa2V5e1RBQn19CitpbnN0ZWFkLn0gZm9yIGNvbXBsZXRpb24uCiAKIFRo ZSBleHBvcnQga2V5d29yZHMgYXZhaWxhYmxlIGZvciBldmVyeSBiYWNrLWVuZCwgYW5kIHRoZWly IGVxdWl2YWxlbnQgZ2xvYmFsCiB2YXJpYWJsZXMsIGluY2x1ZGU6CkBAIC0xNzE0NywxMyArMTcx NDcsMTYgQEAgaGF2ZSBhIGxvd2VyIEFTQ0lJIG51bWJlciB0aGFuIHRoZSBsb3dlc3QgcHJpb3Jp dHkuCiBUaGlzIGxpbmUgc2V0cyBhIGRlZmF1bHQgaW5oZXJpdGFuY2UgdmFsdWUgZm9yIGVudHJp ZXMgaW4gdGhlIGN1cnJlbnQKIGJ1ZmZlciwgbW9zdCB1c2VmdWwgZm9yIHNwZWNpZnlpbmcgdGhl IGFsbG93ZWQgdmFsdWVzIG9mIGEgcHJvcGVydHkuCiBAY2luZGV4ICMrU0VUVVBGSUxFCi1AaXRl bSAjK1NFVFVQRklMRTogZmlsZQotVGhlIHNldHVwIGZpbGUgaXMgZm9yIGFkZGl0aW9uYWwgaW4t YnVmZmVyIHNldHRpbmdzLiAgT3JnIGxvYWRzIHRoaXMgZmlsZSBhbmQKLXBhcnNlcyBpdCBmb3Ig YW55IHNldHRpbmdzIGluIGl0IG9ubHkgd2hlbiBPcmcgb3BlbnMgdGhlIG1haW4gZmlsZS4gIEBr YmR7Qy1jCi1DLWN9IG9uIHRoZSBzZXR0aW5ncyBsaW5lIHdpbGwgYWxzbyBwYXJzZSBhbmQgbG9h ZC4gIE9yZyBhbHNvIHBhcnNlcyBhbmQKLWxvYWRzIHRoZSBmaWxlIGR1cmluZyBub3JtYWwgZXhw b3J0aW5nIHByb2Nlc3MuICBPcmcgcGFyc2VzIHRoZSBjb250ZW50cyBvZgotdGhpcyBmaWxlIGFz IGlmIGl0IHdhcyBpbmNsdWRlZCBpbiB0aGUgYnVmZmVyLiAgSXQgY2FuIGJlIGFub3RoZXIgT3Jn IGZpbGUuCi1UbyB2aXNpdCB0aGUgZmlsZSwgQGtiZHtDLWMgJ30gd2hpbGUgdGhlIGN1cnNvciBp cyBvbiB0aGUgbGluZSB3aXRoIHRoZSBmaWxlCitAaXRlbSAjK1NFVFVQRklMRTogZmlsZS9VUkwK K1RoZSBzZXR1cCBmaWxlIG9yIGEgVVJMIHBvaW50aW5nIHRvIHN1Y2ggZmlsZSBpcyBmb3IgYWRk aXRpb25hbCBpbi1idWZmZXIKK3NldHRpbmdzLiAgT3JnIGxvYWRzIHRoaXMgZmlsZSBhbmQgcGFy c2VzIGl0IGZvciBhbnkgc2V0dGluZ3MgaW4gaXQgb25seSB3aGVuCitPcmcgb3BlbnMgdGhlIG1h aW4gZmlsZS4gIElmIFVSTCBpcyBzcGVjaWZpZWQsIHRoZSBjb250ZW50cyBhcmUgZG93bmxvYWRl ZAorYW5kIHN0b3JlZCBpbiBhIHRlbXBvcmFyeSBjYWNoZS4gIEBrYmR7Qy1jIEMtY30gb24gdGhl IHNldHRpbmdzIGxpbmUgd2lsbAorYWxzbyBwYXJzZSBhbmQgbG9hZC4gIEBrYmR7Qy1jIEMtY30g b24gdGhlIEBjb2RleyMrU0VUVVBGSUxFOn0gbGluZSB3aWxsIGFsc28KK3Jlc2V0IHRoZSB0ZW1w b3JhcnkgZmlsZSBjYWNoZS4gIE9yZyBhbHNvIHBhcnNlcyBhbmQgbG9hZHMgdGhlIGZpbGUvVVJM CitkdXJpbmcgbm9ybWFsIGV4cG9ydGluZyBwcm9jZXNzLiAgT3JnIHBhcnNlcyB0aGUgY29udGVu dHMgb2YgdGhpcyBmaWxlL1VSTCBhcworaWYgaXQgd2FzIGluY2x1ZGVkIGluIHRoZSBidWZmZXIu ICBJdCBjYW4gYmUgYW5vdGhlciBPcmcgZmlsZS4gIFRvIHZpc2l0IHRoZQorZmlsZSAobm90IGEg VVJMKSwgQGtiZHtDLWMgJ30gd2hpbGUgdGhlIGN1cnNvciBpcyBvbiB0aGUgbGluZSB3aXRoIHRo ZSBmaWxlCiBuYW1lLgogQGl0ZW0gIytTVEFSVFVQOgogQGNpbmRleCAjK1NUQVJUVVAKQEAgLTE3 Mzk1LDcgKzE3Mzk4LDkgQEAgSWYgYW55IGhpZ2hsaWdodHMgc2hvd24gaW4gdGhlIGJ1ZmZlciBm cm9tIHRoZSBjcmVhdGlvbiBvZiBhIHNwYXJzZSB0cmVlLCBvcgogZnJvbSBjbG9jayBkaXNwbGF5 LCByZW1vdmUgc3VjaCBoaWdobGlnaHRzLgogQGl0ZW0KIElmIHRoZSBjdXJzb3IgaXMgaW4gb25l IG9mIHRoZSBzcGVjaWFsIEBjb2RleyMrS0VZV09SRH0gbGluZXMsIHNjYW4gdGhlCi1idWZmZXIg Zm9yIHRoZXNlIGxpbmVzIGFuZCB1cGRhdGUgdGhlIGluZm9ybWF0aW9uLgorYnVmZmVyIGZvciB0 aGVzZSBsaW5lcyBhbmQgdXBkYXRlIHRoZSBpbmZvcm1hdGlvbi4gIEFsc28gcmVzZXQgdGhlIG9y ZyBmaWxlCitjYWNoZSB1c2VkIHRvIHRlbXBvcmFyeSBzdG9yZSB0aGUgY29udGVudHMgb2YgVVJM cyB1c2VkIGFzIHZhbHVlcyBmb3IKK2tleXdvcmRzIGxpa2UgQGNvZGV7IytTRVRVUEZJTEV9Lgog QGl0ZW0KIElmIHRoZSBjdXJzb3IgaXMgaW5zaWRlIGEgdGFibGUsIHJlYWxpZ24gdGhlIHRhYmxl LiAgVGhlIHRhYmxlIHJlYWxpZ25zIGV2ZW4KIGlmIGF1dG9tYXRpYyB0YWJsZSBlZGl0b3IgaXMg dHVybmVkIG9mZi4KZGlmZiAtLWdpdCBhL2V0Yy9PUkctTkVXUyBiL2V0Yy9PUkctTkVXUwppbmRl eCAwNDRmMTY3Y2UuLmE4NGViOThjMSAxMDA2NDQKLS0tIGEvZXRjL09SRy1ORVdTCisrKyBiL2V0 Yy9PUkctTkVXUwpAQCAtMjAzLDcgKzIwMyw3IEBAIG1hbnVhbCBmb3IgZGV0YWlscy4KICoqKiog QWRkIGdsb2JhbCBtYWNyb3MgdGhyb3VnaCB+b3JnLWV4cG9ydC1nbG9iYWwtbWFjcm9zfgogV2l0 aCB0aGlzIHZhcmlhYmxlLCBvbmUgY2FuIGRlZmluZSBtYWNyb3MgYXZhaWxhYmxlIGZvciBhbGwg ZG9jdW1lbnRzLgogKioqKiBOZXcga2V5d29yZCB+IytFWFBPUlRfRklMRV9OQU1FfgotU2ltaXJh bHJ5IHRvIH46RVhQT1JUX0ZJTEVfTkFNRTp+IHByb3BlcnR5LCB0aGlzIGtleXdvcmQgYWxsb3dz IHRoZQorU2ltaWxhcmx5IHRvIH46RVhQT1JUX0ZJTEVfTkFNRTp+IHByb3BlcnR5LCB0aGlzIGtl eXdvcmQgYWxsb3dzIHRoZQogdXNlciB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQg ZmlsZSB1cG9uIGV4cG9ydGluZyB0aGUKIGRvY3VtZW50LiAgVGhpcyBhbHNvIGhhcyBhbiBlZmZl Y3Qgb24gcHVibGlzaGluZy4KICoqKiogSG9yaXpvbnRhbCBydWxlcyBhcmUgbm8gbG9uZ2VyIGln bm9yZWQgaW4gTGFUZVggdGFibGUgbWF0aCBtb2RlCkBAIC0yMzQsNiArMjM0LDE2IEBAIHdoaWNo IGNhdXNlcyByZWZpbGUgdGFyZ2V0cyB0byBiZSBwcmVmaXhlZCB3aXRoIHRoZSBidWZmZXLigJlz CiBuYW1lLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiB1c2VkIGluIGNvbmp1bmN0 aW9uIHdpdGgKIH51bmlxdWlmeS5lbH4uCiAKKyoqKiB+b3JnLWZpbGUtY29udGVudHN+IG5vdyBh bGxvd3MgdGhlIEZJTEUgYXJndW1lbnQgdG8gYmUgYSBVUkwuCitUaGlzIGFsbG93cyB+IytTRVRV UEZJTEU6fiB0byBhY2NlcHQgYSBVUkwgaW5zdGVhZCBvZiBhIGxvY2FsIGZpbGUKK3BhdGguICBU aGUgVVJMIGNvbnRlbnRzIGFyZSBhdXRvLWRvd25sb2FkZWQgYW5kIHNhdmVkIHRvIGEgdGVtcG9y YXJ5CitjYWNoZSB+b3JnLS1maWxlLWNhY2hlfi4gIEEgbmV3IG9wdGlvbmFsIGFyZ3VtZW50IH5O T0NBQ0hFfiBpcyBhZGRlZAordG8gfm9yZy1maWxlLWNvbnRlbnRzfi4KKworKioqIH5vcmctbW9k ZS1yZXN0YXJ0fiBub3cgcmVzZXRzIHRoZSBuZXdseSBhZGRlZCB+b3JnLS1maWxlLWNhY2hlfi4K K1VzaW5nIH5DLWMgQy1jfiBvbiBhbnkga2V5d29yZCAobGlrZSB+IytTRVRVUEZJTEV+KSB3aWxs IHJlc2V0IHRoZQordGhhdCBmaWxlIGNhY2hlLgorCiAqKiBSZW1vdmVkIGZ1bmN0aW9ucwogCiAq KiogT3JnIFRpbWVsaW5lCmRpZmYgLS1naXQgYS9saXNwL29yZy1tYWNyby5lbCBiL2xpc3Avb3Jn LW1hY3JvLmVsCmluZGV4IGY1ZGRiOTJlNC4uOWY2ZTBlYmFmIDEwMDY0NAotLS0gYS9saXNwL29y Zy1tYWNyby5lbAorKysgYi9saXNwL29yZy1tYWNyby5lbApAQCAtNTksNyArNTksOCBAQAogCQkg ICgmb3B0aW9uYWwgZ3JhbnVsYXJpdHkgdmlzaWJsZS1vbmx5KSkKIChkZWNsYXJlLWZ1bmN0aW9u IG9yZy1lbGVtZW50LXByb3BlcnR5ICJvcmctZWxlbWVudCIgKHByb3BlcnR5IGVsZW1lbnQpKQog KGRlY2xhcmUtZnVuY3Rpb24gb3JnLWVsZW1lbnQtdHlwZSAib3JnLWVsZW1lbnQiIChlbGVtZW50 KSkKLShkZWNsYXJlLWZ1bmN0aW9uIG9yZy1maWxlLWNvbnRlbnRzICJvcmciIChmaWxlICZvcHRp b25hbCBub2Vycm9yKSkKKyhkZWNsYXJlLWZ1bmN0aW9uIG9yZy1maWxlLXVybC1wICJvcmciIChm aWxlKSkKKyhkZWNsYXJlLWZ1bmN0aW9uIG9yZy1maWxlLWNvbnRlbnRzICJvcmciIChmaWxlICZv cHRpb25hbCBub2Vycm9yIG5vY2FjaGUpKQogKGRlY2xhcmUtZnVuY3Rpb24gb3JnLW1vZGUgIm9y ZyIgKCkpCiAoZGVjbGFyZS1mdW5jdGlvbiB2Yy1iYWNrZW5kICJ2Yy1ob29rcyIgKGYpKQogKGRl Y2xhcmUtZnVuY3Rpb24gdmMtY2FsbCAidmMtaG9va3MiIChmdW4gZmlsZSAmcmVzdCBhcmdzKSB0 KQpAQCAtMTA1LDE2ICsxMDYsMjEgQEAgUmV0dXJuIGFuIGFsaXN0IGNvbnRhaW5pbmcgYWxsIG1h Y3JvIHRlbXBsYXRlcyBmb3VuZC4iCiAJCQkJIChpZiBvbGQtY2VsbCAoc2V0Y2RyIG9sZC1jZWxs IHRlbXBsYXRlKQogCQkJCSAgIChwdXNoIChjb25zIG5hbWUgdGVtcGxhdGUpIHRlbXBsYXRlcykp KSkKIAkJCSAgIDs7IEVudGVyIHNldHVwIGZpbGUuCi0JCQkgICAobGV0ICgoZmlsZSAoZXhwYW5k LWZpbGUtbmFtZQotCQkJCQkob3JnLXVuYnJhY2tldC1zdHJpbmcgIlwiIiAiXCIiIHZhbCkpKSkK LQkJCSAgICAgKHVubGVzcyAobWVtYmVyIGZpbGUgZmlsZXMpCisJCQkgICAobGV0KiAoKHVyaSAo b3JnLXVuYnJhY2tldC1zdHJpbmcgIlwiIiAiXCIiIChvcmctdHJpbSB2YWwpKSkKKwkJCQkgICh1 cmktaXMtdXJsIChvcmctZmlsZS11cmwtcCB1cmkpKQorCQkJCSAgKHVyaSAoaWYgdXJpLWlzLXVy bAorCQkJCQkgICB1cmkKKwkJCQkJIChleHBhbmQtZmlsZS1uYW1lIHVyaSkpKSkKKwkJCSAgICAg OzsgQXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLgorCQkJICAgICAodW5sZXNzIChtZW1iZXIg dXJpIGZpbGVzKQogCQkJICAgICAgICh3aXRoLXRlbXAtYnVmZmVyCi0JCQkJIChzZXRxIGRlZmF1 bHQtZGlyZWN0b3J5Ci0JCQkJICAgICAgIChmaWxlLW5hbWUtZGlyZWN0b3J5IGZpbGUpKQorCQkJ CSAodW5sZXNzIHVyaS1pcy11cmwKKwkJCQkgICAoc2V0cSBkZWZhdWx0LWRpcmVjdG9yeQorCQkJ CQkgKGZpbGUtbmFtZS1kaXJlY3RvcnkgdXJpKSkpCiAJCQkJIChvcmctbW9kZSkKLQkJCQkgKGlu c2VydCAob3JnLWZpbGUtY29udGVudHMgZmlsZSAnbm9lcnJvcikpCisJCQkJIChpbnNlcnQgKG9y Zy1maWxlLWNvbnRlbnRzIHVyaSAnbm9lcnJvcikpCiAJCQkJIChzZXRxIHRlbXBsYXRlcwotCQkJ CSAgICAgICAoZnVuY2FsbCBjb2xsZWN0LW1hY3JvcyAoY29ucyBmaWxlIGZpbGVzKQorCQkJCSAg ICAgICAoZnVuY2FsbCBjb2xsZWN0LW1hY3JvcyAoY29ucyB1cmkgZmlsZXMpCiAJCQkJCQl0ZW1w bGF0ZXMpKSkpKSkpKSkpKQogCQl0ZW1wbGF0ZXMpKSkpCiAgICAgKGZ1bmNhbGwgY29sbGVjdC1t YWNyb3MgbmlsIG5pbCkpKQpkaWZmIC0tZ2l0IGEvbGlzcC9vcmcuZWwgYi9saXNwL29yZy5lbApp bmRleCAxMDJhOWIyNjUuLjE3MWIxMGNkNyAxMDA2NDQKLS0tIGEvbGlzcC9vcmcuZWwKKysrIGIv bGlzcC9vcmcuZWwKQEAgLTUyNzMsMTcgKzUyNzMsNTkgQEAgYSBzdHJpbmcsIHN1bW1hcml6aW5n IFRBR1MsIGFzIGEgbGlzdCBvZiBzdHJpbmdzLiIKIAkgICAoc2V0cSBjdXJyZW50LWdyb3VwIChs aXN0IHRhZykpKSkKIAkoXyBuaWwpKSkpKQogCi0oZGVmdW4gb3JnLWZpbGUtY29udGVudHMgKGZp bGUgJm9wdGlvbmFsIG5vZXJyb3IpCi0gICJSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIEZJTEUsIGFz IGEgc3RyaW5nLiIKLSAgKGlmIChhbmQgZmlsZSAoZmlsZS1yZWFkYWJsZS1wIGZpbGUpKQorKGRl ZnZhciBvcmctLWZpbGUtY2FjaGUgKG1ha2UtaGFzaC10YWJsZSA6dGVzdCAjJ2VxdWFsKQorICAi SGFzaCB0YWJsZSB0byBzdG9yZSBjb250ZW50cyBvZiBmaWxlcyByZWZlcmVuY2VkIHZpYSBhIFVS TC4KK1RoaXMgaXMgdGhlIGNhY2hlIG9mIGZpbGUgVVJMcyByZWFkIHVzaW5nIGBvcmctZmlsZS1j b250ZW50cycuIikKKworKGRlZnZhciBmZmFwLXVybC1yZWdleHApCQk7U2lsZW5jZSBieXRlLWNv bXBpbGVyCisoZGVmdW4gb3JnLWZpbGUtdXJsLXAgKGZpbGUpCisgICJOb24tbmlsIGlmIEZJTEUg aXMgYSBVUkwuIgorICAocmVxdWlyZSAnZmZhcCkKKyAgKHN0cmluZy1tYXRjaC1wIGZmYXAtdXJs LXJlZ2V4cCBmaWxlKSkKKworKGRlZnVuIG9yZy1maWxlLWNvbnRlbnRzIChmaWxlICZvcHRpb25h bCBub2Vycm9yIG5vY2FjaGUpCisgICJSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIEZJTEUsIGFzIGEg c3RyaW5nLgorCitGSUxFIGNhbiBiZSBhIGZpbGUgbmFtZSBvciBVUkwuCisKK0lmIEZJTEUgaXMg YSBVUkwsIGRvd25sb2FkIHRoZSBjb250ZW50cy4gIElmIHRoZSBVUkwgY29udGVudHMgYXJlCith bHJlYWR5IGNhY2hlZCBpbiB0aGUgYG9yZy0tZmlsZS1jYWNoZScgaGFzaCB0YWJsZSwgdGhlIGRv d25sb2FkIHN0ZXAKK2lzIHNraXBwZWQuCisKK0lmIE5PRVJST1IgaXMgbm9uLW5pbCwgaWdub3Jl IHRoZSBlcnJvciB3aGVuIHVuYWJsZSB0byByZWFkIHRoZSBGSUxFCitmcm9tIGZpbGUgb3IgVVJM LgorCitJZiBOT0NBQ0hFIGlzIG5vbi1uaWwsIGRvIGEgZnJlc2ggZmV0Y2ggb2YgRklMRSBldmVu IGlmIGNhY2hlZCB2ZXJzaW9uCitpcyBhdmFpbGFibGUuICBUaGlzIG9wdGlvbiBhcHBsaWVzIG9u bHkgaWYgRklMRSBpcyBhIFVSTC4iCisgIChsZXQqICgoaXMtdXJsIChvcmctZmlsZS11cmwtcCBm aWxlKSkKKyAgICAgICAgIChjYWNoZSAoYW5kIGlzLXVybAorICAgICAgICAgICAgICAgICAgICAg KG5vdCBub2NhY2hlKQorICAgICAgICAgICAgICAgICAgICAgKGdldGhhc2ggZmlsZSBvcmctLWZp bGUtY2FjaGUpKSkpCisgICAgKGNvbmQKKyAgICAgKGNhY2hlKQorICAgICAoaXMtdXJsCisgICAg ICAod2l0aC1jdXJyZW50LWJ1ZmZlciAodXJsLXJldHJpZXZlLXN5bmNocm9ub3VzbHkgZmlsZSkK KwkoZ290by1jaGFyIChwb2ludC1taW4pKQorCTs7IE1vdmUgcG9pbnQgdG8gYWZ0ZXIgdGhlIHVy bC1yZXRyaWV2ZSBoZWFkZXIuCisJKHNlYXJjaC1mb3J3YXJkICJcblxuIiBuaWwgOm1vdmUpCisJ OzsgU2VhcmNoIGZvciB0aGUgc3VjY2VzcyBjb2RlIG9ubHkgaW4gdGhlIHVybC1yZXRyaWV2ZSBo ZWFkZXIuCisJKGlmIChzYXZlLWV4Y3Vyc2lvbiAocmUtc2VhcmNoLWJhY2t3YXJkICJIVFRQLipc XHMtKzIwMFxccy1PSyIgbmlsIDpub2Vycm9yKSkKKwkgICAgOzsgVXBkYXRlIHRoZSBjYWNoZSBg b3JnLS1maWxlLWNhY2hlJyBhbmQgcmV0dXJuIGNvbnRlbnRzLgorCSAgICAocHV0aGFzaCBmaWxl CisJCSAgICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAocG9pbnQpIChwb2ludC1t YXgpKQorCQkgICAgIG9yZy0tZmlsZS1jYWNoZSkKKwkgIChmdW5jYWxsIChpZiBub2Vycm9yICMn bWVzc2FnZSAjJ3VzZXItZXJyb3IpCisJCSAgICJVbmFibGUgdG8gZmV0Y2ggZmlsZSBmcm9tICVT IgorCQkgICBmaWxlKSkpKQorICAgICAodAogICAgICAgKHdpdGgtdGVtcC1idWZmZXIKLQkoaW5z ZXJ0LWZpbGUtY29udGVudHMgZmlsZSkKLQkoYnVmZmVyLXN0cmluZykpCi0gICAgKGZ1bmNhbGwg KGlmIG5vZXJyb3IgJ21lc3NhZ2UgJ2Vycm9yKQotCSAgICAgIkNhbm5vdCByZWFkIGZpbGUgXCIl c1wiJXMiCi0JICAgICBmaWxlCi0JICAgICAobGV0ICgoZnJvbSAoYnVmZmVyLWZpbGUtbmFtZSAo YnVmZmVyLWJhc2UtYnVmZmVyKSkpKQotCSAgICAgICAoaWYgZnJvbSAoY29uY2F0ICIgKHJlZmVy ZW5jZWQgaW4gZmlsZSBcIiIgZnJvbSAiXCIpIikgIiIpKSkpKQorICAgICAgICAoY29uZGl0aW9u LWNhc2UgZXJyCisJICAgIChwcm9nbgorCSAgICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxl KQorCSAgICAgIChidWZmZXItc3RyaW5nKSkKKwkgIChmaWxlLWVycm9yCisgICAgICAgICAgIChm dW5jYWxsIChpZiBub2Vycm9yICMnbWVzc2FnZSAjJ3VzZXItZXJyb3IpCisJCSAgICAoZXJyb3It bWVzc2FnZS1zdHJpbmcgZXJyKSkpKSkpKSkpCiAKIChkZWZ1biBvcmctZXh0cmFjdC1sb2ctc3Rh dGUtc2V0dGluZ3MgKHgpCiAgICJFeHRyYWN0IHRoZSBsb2cgc3RhdGUgc2V0dGluZyBmcm9tIGEg VE9ETyBrZXl3b3JkIHN0cmluZy4KQEAgLTIwNjg1LDcgKzIwNzI3LDkgQEAgT3RoZXJ3aXNlLCBy ZXR1cm4gYSB1c2VyIGVycm9yLiIKIAkgICAgKGZvcm1hdCAiW1slc11dIgogCQkgICAgKGV4cGFu ZC1maWxlLW5hbWUKIAkJICAgICAobGV0ICgodmFsdWUgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp2 YWx1ZSBlbGVtZW50KSkpCi0JCSAgICAgICAoY29uZCAoKG5vdCAob3JnLXN0cmluZy1udy1wIHZh bHVlKSkKKwkJICAgICAgIChjb25kICgob3JnLWZpbGUtdXJsLXAgdmFsdWUpCisJCQkgICAgICAo dXNlci1lcnJvciAiVGhlIGZpbGUgaXMgc3BlY2lmaWVkIGFzIGEgVVJMLCBjYW5ub3QgYmUgZWRp dGVkIikpCisJCQkgICAgICgobm90IChvcmctc3RyaW5nLW53LXAgdmFsdWUpKQogCQkJICAgICAg KHVzZXItZXJyb3IgIk5vIGZpbGUgdG8gZWRpdCIpKQogCQkJICAgICAoKHN0cmluZy1tYXRjaCAi XFxgXCJcXCguKj9cXClcIiIgdmFsdWUpCiAJCQkgICAgICAobWF0Y2gtc3RyaW5nIDEgdmFsdWUp KQpAQCAtMjA5NDksNyArMjA5OTMsOSBAQCBVc2UgYFxcW29yZy1lZGl0LXNwZWNpYWxdJyB0byBl ZGl0IHRhYmxlLmVsIHRhYmxlcyIpKQogICAgIChmdW5jYWxsIG1ham9yLW1vZGUpCiAgICAgKGhh Y2stbG9jYWwtdmFyaWFibGVzKQogICAgICh3aGVuIChhbmQgaW5kZW50LXN0YXR1cyAobm90IChi b3VuZC1hbmQtdHJ1ZS1wIG9yZy1pbmRlbnQtbW9kZSkpKQotICAgICAgKG9yZy1pbmRlbnQtbW9k ZSAtMSkpKQorICAgICAgKG9yZy1pbmRlbnQtbW9kZSAtMSkpCisgICAgOzsgUmVzZXQgdGhlIGNh Y2hlIG9mIGZpbGVzIGRvd25sb2FkZWQgYnkgYG9yZy1maWxlLWNvbnRlbnRzJy4KKyAgICAoY2xy aGFzaCBvcmctLWZpbGUtY2FjaGUpKQogICAobWVzc2FnZSAiJXMgcmVzdGFydGVkIiBtYWpvci1t b2RlKSkKIAogKGRlZnVuIG9yZy1raWxsLW5vdGUtb3Itc2hvdy1icmFuY2hlcyAoKQpkaWZmIC0t Z2l0IGEvbGlzcC9veC5lbCBiL2xpc3Avb3guZWwKaW5kZXggYWM4ZDhjZTY4Li43ZDEwMTI5NzQg MTAwNjQ0Ci0tLSBhL2xpc3Avb3guZWwKKysrIGIvbGlzcC9veC5lbApAQCAtMTQ5OSwxNyArMTQ5 OSwyMCBAQCBBc3N1bWUgYnVmZmVyIGlzIGluIE9yZyBtb2RlLiAgTmFycm93aW5nLCBpZiBhbnks IGlzIGlnbm9yZWQuIgogCQkJIChjb25kCiAJCQkgIDs7IE9wdGlvbnMgaW4gYG9yZy1leHBvcnQt c3BlY2lhbC1rZXl3b3JkcycuCiAJCQkgICgoZXF1YWwga2V5ICJTRVRVUEZJTEUiKQotCQkJICAg KGxldCAoKGZpbGUKLQkJCQkgIChleHBhbmQtZmlsZS1uYW1lCi0JCQkJICAgKG9yZy11bmJyYWNr ZXQtc3RyaW5nICJcIiIgIlwiIiAob3JnLXRyaW0gdmFsKSkpKSkKKwkJCSAgIChsZXQqICgodXJp IChvcmctdW5icmFja2V0LXN0cmluZyAiXCIiICJcIiIgKG9yZy10cmltIHZhbCkpKQorCQkJCSAg KHVyaS1pcy11cmwgKG9yZy1maWxlLXVybC1wIHVyaSkpCisJCQkJICAodXJpIChpZiB1cmktaXMt dXJsCisJCQkJCSAgIHVyaQorCQkJCQkgKGV4cGFuZC1maWxlLW5hbWUgdXJpKSkpKQogCQkJICAg ICA7OyBBdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuCi0JCQkgICAgICh1bmxlc3MgKG1lbWJl ciBmaWxlIGZpbGVzKQorCQkJICAgICAodW5sZXNzIChtZW1iZXIgdXJpIGZpbGVzKQogCQkJICAg ICAgICh3aXRoLXRlbXAtYnVmZmVyCi0JCQkJIChzZXRxIGRlZmF1bHQtZGlyZWN0b3J5Ci0JCQkJ ICAgKGZpbGUtbmFtZS1kaXJlY3RvcnkgZmlsZSkpCi0JCQkJIChpbnNlcnQgKG9yZy1maWxlLWNv bnRlbnRzIGZpbGUgJ25vZXJyb3IpKQorCQkJCSAodW5sZXNzIHVyaS1pcy11cmwKKwkJCQkgICAo c2V0cSBkZWZhdWx0LWRpcmVjdG9yeQorCQkJCQkgKGZpbGUtbmFtZS1kaXJlY3RvcnkgdXJpKSkp CisJCQkJIChpbnNlcnQgKG9yZy1maWxlLWNvbnRlbnRzIHVyaSAnbm9lcnJvcikpCiAJCQkJIChs ZXQgKChvcmctaW5oaWJpdC1zdGFydHVwIHQpKSAob3JnLW1vZGUpKQotCQkJCSAoZnVuY2FsbCBn ZXQtb3B0aW9ucyAoY29ucyBmaWxlIGZpbGVzKSkpKSkpCisJCQkJIChmdW5jYWxsIGdldC1vcHRp b25zIChjb25zIHVyaSBmaWxlcykpKSkpKQogCQkJICAoKGVxdWFsIGtleSAiT1BUSU9OUyIpCiAJ CQkgICAoc2V0cSBwbGlzdAogCQkJCSAob3JnLWNvbWJpbmUtcGxpc3RzCkBAIC0xNjQ3LDE3ICsx NjUwLDIyIEBAIGFuIGFsaXN0IHdoZXJlIGFzc29jaWF0aW9ucyBhcmUgKFZBUklBQkxFLU5BTUUg VkFMVUUpLiIKIAkJCQkgICAgICAiQklORCIpCiAJCQkgICAgICAgKHB1c2ggKHJlYWQgKGZvcm1h dCAiKCVzKSIgdmFsKSkgYWxpc3QpCiAJCQkgICAgIDs7IEVudGVyIHNldHVwIGZpbGUuCi0JCQkg ICAgIChsZXQgKChmaWxlIChleHBhbmQtZmlsZS1uYW1lCi0JCQkJCSAgKG9yZy11bmJyYWNrZXQt c3RyaW5nICJcIiIgIlwiIiB2YWwpKSkpCi0JCQkgICAgICAgKHVubGVzcyAobWVtYmVyIGZpbGUg ZmlsZXMpCisJCQkgICAgIChsZXQqICgodXJpIChvcmctdW5icmFja2V0LXN0cmluZyAiXCIiICJc IiIgdmFsKSkKKwkJCQkgICAgKHVyaS1pcy11cmwgKG9yZy1maWxlLXVybC1wIHVyaSkpCisJCQkJ ICAgICh1cmkgKGlmIHVyaS1pcy11cmwKKwkJCQkJICAgICB1cmkKKwkJCQkJICAgKGV4cGFuZC1m aWxlLW5hbWUgdXJpKSkpKQorCQkJICAgICAgIDs7IEF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2ll cy4KKwkJCSAgICAgICAodW5sZXNzIChtZW1iZXIgdXJpIGZpbGVzKQogCQkJCSAod2l0aC10ZW1w LWJ1ZmZlcgotCQkJCSAgIChzZXRxIGRlZmF1bHQtZGlyZWN0b3J5Ci0JCQkJCSAoZmlsZS1uYW1l LWRpcmVjdG9yeSBmaWxlKSkKKwkJCQkgICAodW5sZXNzIHVyaS1pcy11cmwKKwkJCQkgICAgIChz ZXRxIGRlZmF1bHQtZGlyZWN0b3J5CisJCQkJCSAgIChmaWxlLW5hbWUtZGlyZWN0b3J5IHVyaSkp KQogCQkJCSAgIChsZXQgKChvcmctaW5oaWJpdC1zdGFydHVwIHQpKSAob3JnLW1vZGUpKQotCQkJ CSAgIChpbnNlcnQgKG9yZy1maWxlLWNvbnRlbnRzIGZpbGUgJ25vZXJyb3IpKQorCQkJCSAgIChp bnNlcnQgKG9yZy1maWxlLWNvbnRlbnRzIHVyaSAnbm9lcnJvcikpCiAJCQkJICAgKHNldHEgYWxp c3QKIAkJCQkJIChmdW5jYWxsIGNvbGxlY3QtYmluZAotCQkJCQkJICAoY29ucyBmaWxlIGZpbGVz KQorCQkJCQkJICAoY29ucyB1cmkgZmlsZXMpCiAJCQkJCQkgIGFsaXN0KSkpKSkpKSkpKQogCQkg ICBhbGlzdCkpKSkpCiAgICAgICA7OyBSZXR1cm4gdmFsdWUgaW4gYXBwcm9wcmlhdGUgb3JkZXIg b2YgYXBwZWFyYW5jZS4KLS0gCjIuMTMuMAoK --001a1140495ec99cdb0550731e7e--