From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Alain Schneble (Realize IT GmbH)" Newsgroups: gmane.emacs.devel Subject: url-expand.el and url-parse.el not conforming to RFC3986 Date: Fri, 27 Nov 2015 15:22:29 +0000 Message-ID: <5a139835077940febe2fe3dfe624f754@rintintin.hq.realize.ch.lan.rit> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_002_5a139835077940febe2fe3dfe624f754rintintinhqrealizechlan_" X-Trace: ger.gmane.org 1448643421 11773 80.91.229.3 (27 Nov 2015 16:57:01 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 27 Nov 2015 16:57:01 +0000 (UTC) To: "emacs-devel@gnu.org" Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Nov 27 17:56:54 2015 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1a2MKL-0002OY-DG for ged-emacs-devel@m.gmane.org; Fri, 27 Nov 2015 17:56:53 +0100 Original-Received: from localhost ([::1]:57587 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a2MKO-0006Rd-71 for ged-emacs-devel@m.gmane.org; Fri, 27 Nov 2015 11:56:56 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:54123) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a2LoS-0003Ko-Il for emacs-devel@gnu.org; Fri, 27 Nov 2015 11:23:57 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a2LoN-0008J3-Ji for emacs-devel@gnu.org; Fri, 27 Nov 2015 11:23:56 -0500 Original-Received: from clientmail.realize.ch ([46.140.89.53]:4469) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1a2LoM-0008Hh-VY for emacs-devel@gnu.org; Fri, 27 Nov 2015 11:23:51 -0500 Original-Received: from rintintin.hq.realize.ch.lan.rit ([192.168.0.105]) by clientmail.realize.ch ; Fri, 27 Nov 2015 16:23:00 +0100 Original-Received: from rintintin.hq.realize.ch.lan.rit (192.168.0.105) by rintintin.hq.realize.ch.lan.rit (192.168.0.105) with Microsoft SMTP Server (TLS) id 15.0.516.32; Fri, 27 Nov 2015 16:22:30 +0100 Original-Received: from rintintin.hq.realize.ch.lan.rit ([fe80::54fe:4357:b8f7:0]) by rintintin.hq.realize.ch.lan.rit ([fe80::54fe:4357:b8f7:0%12]) with mapi id 15.00.0516.029; Fri, 27 Nov 2015 16:22:30 +0100 Thread-Topic: url-expand.el and url-parse.el not conforming to RFC3986 Thread-Index: AdEpJYQ48zYm++2tQQmxT0vADb8XcA== Accept-Language: de-CH, en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.168.0.1] X-detected-operating-system: by eggs.gnu.org: Windows NT kernel [generic] X-Received-From: 46.140.89.53 X-Mailman-Approved-At: Fri, 27 Nov 2015 11:56:51 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 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-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:195388 Archived-At: --_002_5a139835077940febe2fe3dfe624f754rintintinhqrealizechlan_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hello url-expand.el and url-parse.el seem to not follow RFC3986 "Uniform Resource Identifier (URI): Generic Syntax" in some cases. But I guess they should. So I started to study RFC3986 in more details and write tests against url-expand-file-name and url-generic-parse-url (see attached patch). The tests reveal the following issues: 1. resolving relative "fragment-only" URIs against a given absolute base URI (see RFC3986, section 5. Reference Resolution, and especially 5.2.2. Transform References): (url-expand-file-name "#s" "http://a/b/c/d;p?q") =3D> "#s" but should be http://a/b/c/d;p?q#s" (url-expand-file-name "#bar" "http://host") =3D> "#bar" but should be "http://host#bar" (url-expand-file-name "#bar" "http://host/") =3D> "#bar" but should be "http://host/#bar" (url-expand-file-name "#bar" "http://host/foo") =3D> "#bar" but should be "http://host/foo#bar" 2. resolving relative "query-only" URIs against a given absolute base URI (see RFC3986, same sections as mentioned in point 1.): (url-expand-file-name "?y" "http://a/b/c/d;p?q") =3D> "http://a/b/c/?y" but should be "http://a/b/c/d;p?y" (url-expand-file-name "?y" "http://a/b/c/d") =3D> "http://a/b/c/?y" but should be "http://a/b/c/d?y") 3. removing dot segments (see RFC3986, section 5.2.4. Remove Dot Segments): (url-expand-file-name "/./g" "http://a/b/c/d;p?q") =3D> "http://a/./g" but should be "http://a/g" (url-expand-file-name "/../g" "http://a/b/c/d;p?q") =3D> "http://a/../g" but should be "http://a/g" 4. empty fragment information is lost after parsing URI: (equal (url-generic-parse-url "#") (url-parse-make-urlobj nil nil nil nil nil "" "" nil nil)) ^ =3D> nil but should be t (fragment component is actually nil instead of an empty string) Same issue with URLs having a number sign (#) as suffix: "/foo/bar#" "/foo/bar/#" "http://host#" "http://host?#" "http://host?query#" "http://host/#" "http://host/?#" "http://host/?query#" "http://host/foo#" "http://host/foo?#" "http://host/foo?query#" ... and so forth The problem with this is that the inverse function url-recreate-url won't be able to reconstruct exactly the same URI. For example: (url-recreate-url (url-generic-parse-url "#")) =3D> "" but should be "#" To address these issues, I propose changes to url-parse.el and url-expand.el, see attached patch. Here is the detailed summary: - url-parse-tests.el: add tests for url-generic-parse-url - url-expand-tests.el: add tests for url-expand-file-name - url-generic-parse-url: keep empty fragment information in URL-struct - url-path-and-query: do not artificially turn empty path and query into nil path and query, respectively - url-expander-remove-relative-links: do not turn empty path into an absolute path ("/"). Remark: due to the name of this function, would it be better to fix this case where this function is called? - url-expand-file-name: properly resolve fragment-only URIs. Do not just return them unchanged. I think that this bug was due to a misinterpretation of RFC3986, section 5.1. Establishing a Base URI: "Aside from fragment-only references (Section 4.4), relative references are only usable when a base URI is known." To me, this does not mean that they should not be resolved properly. And the expamples given in the RFC emphasize this as well. - url-default-expander: an empty path in the relative reference URI should not drop the last segment. Please let me know if I should follow a different procedure to submit these changes. I signed the copyright assignment "GNU EMACS" this year. Thanks, Alain --_002_5a139835077940febe2fe3dfe624f754rintintinhqrealizechlan_ Content-Type: application/octet-stream; name="0001-Make-relative-URL-parsing-and-resolution-consistent-.patch" Content-Description: 0001-Make-relative-URL-parsing-and-resolution-consistent-.patch Content-Disposition: attachment; filename="0001-Make-relative-URL-parsing-and-resolution-consistent-.patch"; size=29637; creation-date="Fri, 27 Nov 2015 15:12:03 GMT"; modification-date="Fri, 27 Nov 2015 15:12:03 GMT" Content-Transfer-Encoding: base64 RnJvbSAzNzFjYzU0ZWE4MDBlYzIwMDQ4Mjk3OTBmMzhjYWRmYzAzMWVhZGYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGFpbiBOaWNvbGFzIFNjaG5lYmxlIDxhLnNAcmVhbGl6ZS5j aD4KRGF0ZTogRnJpLCAyNyBOb3YgMjAxNSAxNTo1NDoxMiArMDEwMApTdWJqZWN0OiBbUEFUQ0hd IE1ha2UgcmVsYXRpdmUgVVJMIHBhcnNpbmcgYW5kIHJlc29sdXRpb24gY29uc2lzdGVudCB3aXRo IFJGQwogMzk4NgoKKiB0ZXN0L2F1dG9tYXRlZC91cmwtcGFyc2UtdGVzdHMuZWw6IGFkZCB0ZXN0 cyBjb3ZlcmluZyB1cmwtZ2VuZXJpYy1wYXJzZS11cmwuCiogdGVzdC9hdXRvbWF0ZWQvdXJsLWV4 cGFuZC10ZXN0cy5lbDogYWRkIHRlc3RzIGNvdmVyaW5nIHVybC1leHBhbmQtZmlsZS1uYW1lLgoq IHRlc3QvYXV0b21hdGVkL3VybC1wYXJzZS5lbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsKToga2Vl cCBlbXB0eSBmcmFnbWVudAppbmZvcm1hdGlvbiBpbiBVUkwtc3RydWN0LgoqIGxpc3AvdXJsL3Vy bC1wYXJzZS5lbCAodXJsLXBhdGgtYW5kLXF1ZXJ5KTogZG8gbm90IGFydGlmaWNpYWxseSB0dXJu IGVtcHR5CnBhdGggYW5kIHF1ZXJ5IGludG8gbmlsIHBhdGggYW5kIHF1ZXJ5LCByZXNwZWN0aXZl bHkuCiogbGlzcC91cmwvdXJsLWV4cGFuZC5lbCAodXJsLWV4cGFuZGVyLXJlbW92ZS1yZWxhdGl2 ZS1saW5rcyk6IGRvIG5vdCB0dXJuCmVtcHR5IHBhdGggaW50byBhbiBhYnNvbHV0ZSBwYXRoICgi LyIpLgoqIGxpc3AvdXJsL3VybC1leHBhbmQuZWwgKHVybC1leHBhbmQtZmlsZS1uYW1lKTogcHJv cGVybHkgcmVzb2x2ZQpmcmFnbWVudC1vbmx5IFVSTHMuIERvIG5vdCBqdXN0IHJldHVybiB0aGVt IHVuY2hhbmdlZC4KKiBsaXNwL3VybC91cmwtZXhwYW5kLmVsICh1cmwtZGVmYXVsdC1leHBhbmRl cik6IGFuIGVtcHR5IHBhdGggaW4gdGhlIHJlbGF0aXZlCnJlZmVyZW5jZSBVUkwgc2hvdWxkIG5v dCBkcm9wIHRoZSBsYXN0IHNlZ21lbnQuCi0tLQogbGlzcC91cmwvdXJsLWV4cGFuZC5lbCAgICAg ICAgICAgICB8ICA4NCArKysrKysrKystLS0tLS0tLS0tCiBsaXNwL3VybC91cmwtcGFyc2UuZWwg ICAgICAgICAgICAgIHwgICA1ICstCiB0ZXN0L2F1dG9tYXRlZC91cmwtZXhwYW5kLXRlc3RzLmVs IHwgMTA1ICsrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0L2F1dG9tYXRlZC91cmwtcGFyc2Ut dGVzdHMuZWwgIHwgMTY3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQg ZmlsZXMgY2hhbmdlZCwgMzEzIGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHRlc3QvYXV0b21hdGVkL3VybC1leHBhbmQtdGVzdHMuZWwKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZXN0L2F1dG9tYXRlZC91cmwtcGFyc2UtdGVzdHMuZWwKCmRpZmYgLS1naXQg YS9saXNwL3VybC91cmwtZXhwYW5kLmVsIGIvbGlzcC91cmwvdXJsLWV4cGFuZC5lbAppbmRleCBj NDY4YTc5Li42MDBhMzZkIDEwMDY0NAotLS0gYS9saXNwL3VybC91cmwtZXhwYW5kLmVsCisrKyBi L2xpc3AvdXJsL3VybC1leHBhbmQuZWwKQEAgLTI2LDMyICsyNiwzNSBAQAogKHJlcXVpcmUgJ3Vy bC1wYXJzZSkKIAogKGRlZnVuIHVybC1leHBhbmRlci1yZW1vdmUtcmVsYXRpdmUtbGlua3MgKG5h bWUpCi0gIDs7IFN0cmlwIC4gYW5kIC4uIGZyb20gcGF0aG5hbWVzCi0gIChsZXQgKChuZXcgKGlm IChub3QgKHN0cmluZy1tYXRjaCAiXi8iIG5hbWUpKQotCQkgKGNvbmNhdCAiLyIgbmFtZSkKLQkg ICAgICAgbmFtZSkpKQotCi0gICAgOzsgSWYgaXQgZW5kcyB3aXRoIGEgJy8uJyBvciAnLy4uJywg dGFjayBvbiBhIHRyYWlsaW5nICcvJyBzb3QgaGF0Ci0gICAgOzsgdGhlIHRlc3RzIHRoYXQgZm9s bG93IGFyZSBub3QgdG9vIGNvbXBsaWNhdGVkIGluIHRlcm1zIG9mCi0gICAgOzsgbG9va2luZyBm b3IgJy4uJyBvciAnLi4vJywgZXRjLgotICAgIChpZiAoc3RyaW5nLW1hdGNoICIvXFwuKyQiIG5l dykKLQkoc2V0cSBuZXcgKGNvbmNhdCBuZXcgIi8iKSkpCi0KLSAgICA7OyBSZW1vdmUgJy8uLycg Zmlyc3QKLSAgICAod2hpbGUgKHN0cmluZy1tYXRjaCAiL1xcKFxcLi9cXCkiIG5ldykKLSAgICAg IChzZXRxIG5ldyAoY29uY2F0IChzdWJzdHJpbmcgbmV3IDAgKG1hdGNoLWJlZ2lubmluZyAxKSkK LQkJCShzdWJzdHJpbmcgbmV3IChtYXRjaC1lbmQgMSkpKSkpCi0KLSAgICA7OyBUaGVuIHJlbW92 ZSAnLy4uLycKLSAgICAod2hpbGUgKHN0cmluZy1tYXRjaCAiL1xcKFteL10qL1xcLlxcLi9cXCki IG5ldykKLSAgICAgIChzZXRxIG5ldyAoY29uY2F0IChzdWJzdHJpbmcgbmV3IDAgKG1hdGNoLWJl Z2lubmluZyAxKSkKLQkJCShzdWJzdHJpbmcgbmV3IChtYXRjaC1lbmQgMSkpKSkpCi0KLSAgICA7 OyBSZW1vdmUgY3J1ZnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLCBzbyBwZW9wbGUg dGhhdCBwdXQKLSAgICA7OyBpbiBleHRyYW5lb3VzICcuLicgYmVjYXVzZSB0aGV5IGFyZSBtb3Jv bnMgd29uJ3QgbG9zZS4KLSAgICAod2hpbGUgKHN0cmluZy1tYXRjaCAiXi9cXC5cXC5cXCgvXFwp IiBuZXcpCi0gICAgICAoc2V0cSBuZXcgKHN1YnN0cmluZyBuZXcgKG1hdGNoLWJlZ2lubmluZyAx KSBuaWwpKSkKLSAgICBuZXcpKQorICAoaWYgKGVxdWFsIG5hbWUgIiIpCisgICAgICA7OyBBbiBl bXB0eSBuYW1lIGlzIGEgcHJvcGVybHkgdmFsaWQgcmVsYXRpdmUgVVJMIHJlZmVyZW5jZS9wYXRo LgorICAgICAgIiIKKyAgICA7OyBTdHJpcCAuIGFuZCAuLiBmcm9tIHBhdGhuYW1lcworICAgIChs ZXQgKChuZXcgKGlmIChub3QgKHN0cmluZy1tYXRjaCAiXi8iIG5hbWUpKQorICAgICAgICAgICAg ICAgICAgIChjb25jYXQgIi8iIG5hbWUpCisgICAgICAgICAgICAgICAgIG5hbWUpKSkKKworICAg ICAgOzsgSWYgaXQgZW5kcyB3aXRoIGEgJy8uJyBvciAnLy4uJywgdGFjayBvbiBhIHRyYWlsaW5n ICcvJyBzb3QgaGF0CisgICAgICA7OyB0aGUgdGVzdHMgdGhhdCBmb2xsb3cgYXJlIG5vdCB0b28g Y29tcGxpY2F0ZWQgaW4gdGVybXMgb2YKKyAgICAgIDs7IGxvb2tpbmcgZm9yICcuLicgb3IgJy4u LycsIGV0Yy4KKyAgICAgIChpZiAoc3RyaW5nLW1hdGNoICIvXFwuKyQiIG5ldykKKyAgICAgICAg ICAoc2V0cSBuZXcgKGNvbmNhdCBuZXcgIi8iKSkpCisKKyAgICAgIDs7IFJlbW92ZSAnLy4vJyBm aXJzdAorICAgICAgKHdoaWxlIChzdHJpbmctbWF0Y2ggIi9cXChcXC4vXFwpIiBuZXcpCisgICAg ICAgIChzZXRxIG5ldyAoY29uY2F0IChzdWJzdHJpbmcgbmV3IDAgKG1hdGNoLWJlZ2lubmluZyAx KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YnN0cmluZyBuZXcgKG1hdGNoLWVuZCAx KSkpKSkKKworICAgICAgOzsgVGhlbiByZW1vdmUgJy8uLi8nCisgICAgICAod2hpbGUgKHN0cmlu Zy1tYXRjaCAiL1xcKFteL10qL1xcLlxcLi9cXCkiIG5ldykKKyAgICAgICAgKHNldHEgbmV3IChj b25jYXQgKHN1YnN0cmluZyBuZXcgMCAobWF0Y2gtYmVnaW5uaW5nIDEpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAoc3Vic3RyaW5nIG5ldyAobWF0Y2gtZW5kIDEpKSkpKQorCisgICAgICA7 OyBSZW1vdmUgY3J1ZnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLCBzbyBwZW9wbGUg dGhhdCBwdXQKKyAgICAgIDs7IGluIGV4dHJhbmVvdXMgJy4uJyBiZWNhdXNlIHRoZXkgYXJlIG1v cm9ucyB3b24ndCBsb3NlLgorICAgICAgKHdoaWxlIChzdHJpbmctbWF0Y2ggIl4vXFwuXFwuXFwo L1xcKSIgbmV3KQorICAgICAgICAoc2V0cSBuZXcgKHN1YnN0cmluZyBuZXcgKG1hdGNoLWJlZ2lu bmluZyAxKSBuaWwpKSkKKyAgICAgIG5ldykpKQogCiAoZGVmdW4gdXJsLWV4cGFuZC1maWxlLW5h bWUgKHVybCAmb3B0aW9uYWwgZGVmYXVsdCkKICAgIkNvbnZlcnQgVVJMIHRvIGEgZnVsbHkgc3Bl Y2lmaWVkIFVSTCwgYW5kIGNhbm9uaWNhbGl6ZSBpdC4KQEAgLTg5LDggKzkyLDYgQEAgcGF0aCBj b21wb25lbnRzIGZvbGxvd2VkIGJ5IGAuLicgYXJlIHJlbW92ZWQsIGFsb25nIHdpdGggdGhlIGAu LicgaXRzZWxmLiIKICAgKGNvbmQKICAgICgoPSAobGVuZ3RoIHVybCkgMCkJCQk7IG5pbCBvciBl bXB0eSBzdHJpbmcKICAgICAodXJsLXJlY3JlYXRlLXVybCBkZWZhdWx0KSkKLSAgICgoc3RyaW5n LW1hdGNoICJeIyIgdXJsKQkJOyBPZmZzZXQgbGluaywgdXNlIGl0IHJhdwotICAgIHVybCkKICAg ICgoc3RyaW5nLW1hdGNoIHVybC1ub25yZWxhdGl2ZS1saW5rIHVybCkgOyBGdWxseS1xdWFsaWZp ZWQgVVJMLCByZXR1cm4gaXQgaW1tZWRpYXRlbHkKICAgICB1cmwpCiAgICAodApAQCAtMTIwLDI5 ICsxMjEsMjQgQEAgcGF0aCBjb21wb25lbnRzIGZvbGxvd2VkIGJ5IGAuLicgYXJlIHJlbW92ZWQs IGFsb25nIHdpdGggdGhlIGAuLicgaXRzZWxmLiIKIAkoc2V0ZiAodXJsLWhvc3QgdXJsb2JqKSAo b3IgKHVybC1ob3N0IHVybG9iaikgKHVybC1ob3N0IGRlZm9iaikpKSkKICAgICAoaWYgKHN0cmlu Zz0gImZ0cCIgICh1cmwtdHlwZSB1cmxvYmopKQogCShzZXRmICh1cmwtdXNlciB1cmxvYmopIChv ciAodXJsLXVzZXIgdXJsb2JqKSAodXJsLXVzZXIgZGVmb2JqKSkpKQotICAgIChpZiAoc3RyaW5n PSAodXJsLWZpbGVuYW1lIHVybG9iaikgIiIpCi0JKHNldGYgKHVybC1maWxlbmFtZSB1cmxvYmop ICIvIikpCiAgICAgOzsgSWYgdGhlIG9iamVjdCB3ZSdyZSBleHBhbmRpbmcgZnJvbSBpcyBmdWxs LCB0aGVuIHdlIGFyZSBub3cKICAgICA7OyBmdWxsLgogICAgICh1bmxlc3MgKHVybC1mdWxsbmVz cyB1cmxvYmopCiAgICAgICAoc2V0ZiAodXJsLWZ1bGxuZXNzIHVybG9iaikgKHVybC1mdWxsbmVz cyBkZWZvYmopKSkKLSAgICAoaWYgKHN0cmluZy1tYXRjaCAiXi8iICh1cmwtZmlsZW5hbWUgdXJs b2JqKSkKLQluaWwKLSAgICAgIChsZXQgKChxdWVyeSBuaWwpCi0JICAgIChmaWxlIG5pbCkKLQkg ICAgKHNlcGNoYXIgbmlsKSkKLQkoaWYgKHN0cmluZy1tYXRjaCAiWz8jXSIgKHVybC1maWxlbmFt ZSB1cmxvYmopKQotCSAgICAoc2V0cSBxdWVyeSAoc3Vic3RyaW5nICh1cmwtZmlsZW5hbWUgdXJs b2JqKSAobWF0Y2gtZW5kIDApKQotCQkgIGZpbGUgKHN1YnN0cmluZyAodXJsLWZpbGVuYW1lIHVy bG9iaikgMCAobWF0Y2gtYmVnaW5uaW5nIDApKQotCQkgIHNlcGNoYXIgKHN1YnN0cmluZyAodXJs LWZpbGVuYW1lIHVybG9iaikgKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKSkKLQkg IChzZXRxIGZpbGUgKHVybC1maWxlbmFtZSB1cmxvYmopKSkKKyAgICAobGV0KiAoKHBhdGhhbmRx dWVyeSAodXJsLXBhdGgtYW5kLXF1ZXJ5IHVybG9iaikpCisgICAgICAgICAgIChkZWZwYXRoYW5k cXVlcnkgKHVybC1wYXRoLWFuZC1xdWVyeSBkZWZvYmopKQorICAgICAgICAgICAoZmlsZSAoY2Fy IHBhdGhhbmRxdWVyeSkpCisgICAgICAgICAgIChxdWVyeSAob3IgKGNkciBwYXRoYW5kcXVlcnkp IChhbmQgKGVxdWFsIGZpbGUgIiIpIChjZHIgZGVmcGF0aGFuZHF1ZXJ5KSkpKSkKKyAgICAgIChp ZiAoc3RyaW5nLW1hdGNoICJeLyIgKHVybC1maWxlbmFtZSB1cmxvYmopKQorICAgICAgICAgIChz ZXRxIGZpbGUgKHVybC1leHBhbmRlci1yZW1vdmUtcmVsYXRpdmUtbGlua3MgZmlsZSkpCiAJOzsg V2UgdXNlIGNvbmNhdCByYXRoZXIgdGhhbiBleHBhbmQtZmlsZS1uYW1lIHRvIGNvbWJpbmUKIAk7 OyBkaXJlY3RvcnkgYW5kIGZpbGUgbmFtZSwgc2luY2UgdXJscyBkbyBub3QgZm9sbG93IHRoZSBz YW1lCiAJOzsgcnVsZXMgYXMgbG9jYWwgZmlsZXMgb24gYWxsIHBsYXRmb3Jtcy4KLQkoc2V0cSBm aWxlICh1cmwtZXhwYW5kZXItcmVtb3ZlLXJlbGF0aXZlLWxpbmtzCi0JCSAgICAoY29uY2F0ICh1 cmwtZmlsZS1kaXJlY3RvcnkgKHVybC1maWxlbmFtZSBkZWZvYmopKSBmaWxlKSkpCi0JKHNldGYg KHVybC1maWxlbmFtZSB1cmxvYmopCi0gICAgICAgICAgICAgIChpZiBxdWVyeSAoY29uY2F0IGZp bGUgc2VwY2hhciBxdWVyeSkgZmlsZSkpKSkpKQorICAgICAgICAoc2V0cSBmaWxlICh1cmwtZXhw YW5kZXItcmVtb3ZlLXJlbGF0aXZlLWxpbmtzCisgICAgICAgICAgICAgICAgICAgIChpZiAoZXF1 YWwgZmlsZSAiIikKKyAgICAgICAgICAgICAgICAgICAgICAgIChvciAoY2FyICh1cmwtcGF0aC1h bmQtcXVlcnkgZGVmb2JqKSkgIiIpCisgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAodXJs LWZpbGUtZGlyZWN0b3J5ICh1cmwtZmlsZW5hbWUgZGVmb2JqKSkgZmlsZSkpKSkpCisgICAgICAo c2V0ZiAodXJsLWZpbGVuYW1lIHVybG9iaikgKGlmIHF1ZXJ5IChjb25jYXQgZmlsZSAiPyIgcXVl cnkpIGZpbGUpKSkpKQogCiAocHJvdmlkZSAndXJsLWV4cGFuZCkKIApkaWZmIC0tZ2l0IGEvbGlz cC91cmwvdXJsLXBhcnNlLmVsIGIvbGlzcC91cmwvdXJsLXBhcnNlLmVsCmluZGV4IGRiZjBjMzgu LmMzMTU5YTcgMTAwNjQ0Ci0tLSBhL2xpc3AvdXJsL3VybC1wYXJzZS5lbAorKysgYi9saXNwL3Vy bC91cmwtcGFyc2UuZWwKQEAgLTU5LDggKzU5LDYgQEAgd2hlcmUgZWFjaCBvZiBQQVRIIGFuZCBR VUVSWSBhcmUgc3RyaW5ncyBvciBuaWwuIgogCSAgKHNldHEgcGF0aCAgKHN1YnN0cmluZyBuYW1l IDAgKG1hdGNoLWJlZ2lubmluZyAwKSkKIAkJcXVlcnkgKHN1YnN0cmluZyBuYW1lIChtYXRjaC1l bmQgMCkpKQogCShzZXRxIHBhdGggbmFtZSkpKQotICAgIChpZiAoZXF1YWwgcGF0aCAiIikgKHNl dHEgcGF0aCBuaWwpKQotICAgIChpZiAoZXF1YWwgcXVlcnkgIiIpIChzZXRxIHF1ZXJ5IG5pbCkp CiAgICAgKGNvbnMgcGF0aCBxdWVyeSkpKQogCiAoZGVmdW4gdXJsLXBvcnQtaWYtbm9uLWRlZmF1 bHQgKHVybG9iaikKQEAgLTIxNyw4ICsyMTUsNyBAQCBwYXJzZXMgdG8KIAkgICAgKHdoZW4gKGxv b2tpbmctYXQgIiMiKQogCSAgICAgIChsZXQgKChvcG9pbnQgKHBvaW50KSkpCiAJCShmb3J3YXJk LWNoYXIgMSkKLQkJKHVubGVzcyAoZW9icCkKLQkJICAoc2V0cSBmcmFnbWVudCAoYnVmZmVyLXN1 YnN0cmluZyAocG9pbnQpIChwb2ludC1tYXgpKSkpCisgICAgICAgICAgICAgICAgKHNldHEgZnJh Z21lbnQgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50KSAocG9pbnQtbWF4KSkpCiAJCShkZWxldGUt cmVnaW9uIG9wb2ludCAocG9pbnQtbWF4KSkpKSkKIAogICAgICAgICAgIChpZiAoYW5kIGhvc3Qg KHN0cmluZy1tYXRjaCAiJVswLTldWzAtOV0iIGhvc3QpKQpkaWZmIC0tZ2l0IGEvdGVzdC9hdXRv bWF0ZWQvdXJsLWV4cGFuZC10ZXN0cy5lbCBiL3Rlc3QvYXV0b21hdGVkL3VybC1leHBhbmQtdGVz dHMuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjOWIzYgotLS0gL2Rl di9udWxsCisrKyBiL3Rlc3QvYXV0b21hdGVkL3VybC1leHBhbmQtdGVzdHMuZWwKQEAgLTAsMCAr MSwxMDUgQEAKKzs7OyB1cmwtZXhwYW5kLXRlc3RzLmVsIC0tLSBUZXN0IHN1aXRlIGZvciByZWxh dGl2ZSBVUkkvVVJMIHJlc29sdXRpb24uCisKKzs7IENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCis7OyBBdXRob3I6IEFsYWluIE5pY29sYXMg U2NobmVibGUgPGEuc0ByZWFsaXplLmNoPgorOzsgVmVyc2lvbjogMS4wCisKKzs7IFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KKworOzsgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdhcmU6 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7 OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworOzsg R05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7IGFsb25nIHdpdGggR05VIEVtYWNzLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCis7OzsgQ29tbWVu dGFyeToKKworOzsgVGVzdCBjYXNlcyBjb3ZlcmluZyBVUkkgcmVmZXJlbmNlIHJlc29sdXRpb24g YXMgZGVzY3JpYmVkIGluIFJGQzM5ODYsCis7OyBzZWN0aW9uIDUuIFJlZmVyZW5jZSBSZXNvbHV0 aW9uIGFuZCBlc3BlY2lhbGx5IHRoZSByZWxhdGl2ZSByZXNvbHV0aW9uCis7OyBydWxlcyBzcGVj aWZpZWQgaW4gc2VjdGlvbiA1LjIuIFJlbGF0aXZlIFJlc29sdXRpb24uCisKKzs7IEVhY2ggdGVz dCBjYWxscyBgdXJsLWV4cGFuZC1maWxlLW5hbWUnLCB0eXBpY2FsbHkgd2l0aCBhIHJlbGF0aXZl Cis7OyByZWZlcmVuY2UgVVJJIGFuZCBhIGJhc2UgVVJJIGFzIHN0cmluZyBhbmQgY29tcGFyZXMg dGhlIHJlc3VsdCAoQWN0dWFsKQorOzsgYWdhaW5zdCBhIG1hbnVhbGx5IHNwZWNpZmllZCBVUkkg KEV4cGVjdGVkKQorCis7OzsgQ29kZToKKworKHJlcXVpcmUgJ3VybC1leHBhbmQpCisocmVxdWly ZSAnZXJ0KQorCisoZXJ0LWRlZnRlc3QgdXJsLWV4cGFuZC1maWxlLW5hbWUvcmVsYXRpdmUtcmVz b2x1dGlvbi1ub3JtYWwtZXhhbXBsZXMgKCkKKyAgIlJGQyAzOTg2LCBTZWN0aW9uIDUuNCBSZWZl cmVuY2UgUmVzb2x1dGlvbiBFeGFtcGxlcyAvIFNlY3Rpb24gNS40LjEuIE5vcm1hbCBFeGFtcGxl cyIKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICJnOmgiICAgICAiaHR0 cDovL2EvYi9jL2Q7cD9xIikgImc6aCIpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWV4cGFuZC1m aWxlLW5hbWUgImciICAgICAgICJodHRwOi8vYS9iL2MvZDtwP3EiKSAiaHR0cDovL2EvYi9jL2ci KSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICIuL2ciICAgICAiaHR0 cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9hL2IvYy9nIikpCisgIChzaG91bGQgKGVxdWFsICh1 cmwtZXhwYW5kLWZpbGUtbmFtZSAiZy8iICAgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRw Oi8vYS9iL2MvZy8iKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICIv ZyIgICAgICAiaHR0cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9hL2ciKSkKKyAgKHNob3VsZCAo ZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICIvL2ciICAgICAiaHR0cDovL2EvYi9jL2Q7cD9x IikgImh0dHA6Ly9nIikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAi P3kiICAgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRwOi8vYS9iL2MvZDtwP3kiKSkKKyAg KHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICJnP3kiICAgICAiaHR0cDovL2Ev Yi9jL2Q7cD9xIikgImh0dHA6Ly9hL2IvYy9nP3kiKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1l eHBhbmQtZmlsZS1uYW1lICIjcyIgICAgICAiaHR0cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9h L2IvYy9kO3A/cSNzIikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAi ZyNzIiAgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRwOi8vYS9iL2MvZyNzIikpCisgIChz aG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAiZz95I3MiICAgImh0dHA6Ly9hL2Iv Yy9kO3A/cSIpICJodHRwOi8vYS9iL2MvZz95I3MiKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1l eHBhbmQtZmlsZS1uYW1lICI7eCIgICAgICAiaHR0cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9h L2IvYy87eCIpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUgImc7eCIg ICAgICJodHRwOi8vYS9iL2MvZDtwP3EiKSAiaHR0cDovL2EvYi9jL2c7eCIpKQorICAoc2hvdWxk IChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUgImc7eD95I3MiICJodHRwOi8vYS9iL2MvZDtw P3EiKSAiaHR0cDovL2EvYi9jL2c7eD95I3MiKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBh bmQtZmlsZS1uYW1lICIiICAgICAgICAiaHR0cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9hL2Iv Yy9kO3A/cSIpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUgIi4iICAg ICAgICJodHRwOi8vYS9iL2MvZDtwP3EiKSAiaHR0cDovL2EvYi9jLyIpKQorICAoc2hvdWxkIChl cXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUgIi4vIiAgICAgICJodHRwOi8vYS9iL2MvZDtwP3Ei KSAiaHR0cDovL2EvYi9jLyIpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5h bWUgIi4uIiAgICAgICJodHRwOi8vYS9iL2MvZDtwP3EiKSAiaHR0cDovL2EvYi8iKSkKKyAgKHNo b3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICIuLi8iICAgICAiaHR0cDovL2EvYi9j L2Q7cD9xIikgImh0dHA6Ly9hL2IvIikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZp bGUtbmFtZSAiLi4vZyIgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRwOi8vYS9iL2ciKSkK KyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICIuLi8uLiIgICAiaHR0cDov L2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9hLyIpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWV4cGFu ZC1maWxlLW5hbWUgIi4uLy4uLyIgICJodHRwOi8vYS9iL2MvZDtwP3EiKSAiaHR0cDovL2EvIikp CisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAiLi4vLi4vZyIgImh0dHA6 Ly9hL2IvYy9kO3A/cSIpICJodHRwOi8vYS9nIikpKQorCisoZXJ0LWRlZnRlc3QgdXJsLWV4cGFu ZC1maWxlLW5hbWUvcmVsYXRpdmUtcmVzb2x1dGlvbi1hYnNvbHV0ZS1leGFtcGxlcyAoKQorICAi UkZDIDM5ODYsIFNlY3Rpb24gNS40IFJlZmVyZW5jZSBSZXNvbHV0aW9uIEV4YW1wbGVzIC8gU2Vj dGlvbiA1LjQuMi4gQWJub3JtYWwgRXhhbXBsZXMiCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhw YW5kLWZpbGUtbmFtZSAiLi4vLi4vLi4vZyIgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRw Oi8vYS9nIikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAiLi4vLi4v Li4vLi4vZyIgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRwOi8vYS9nIikpCisKKyAgKHNob3Vs ZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICIvLi9nIiAgICAgICAgICAiaHR0cDovL2Ev Yi9jL2Q7cD9xIikgImh0dHA6Ly9hL2ciKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQt ZmlsZS1uYW1lICIvLi4vZyIgICAgICAgICAiaHR0cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9h L2ciKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICJnLiIgICAgICAg ICAgICAiaHR0cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9hL2IvYy9nLiIpKQorICAoc2hvdWxk IChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUgIi5nIiAgICAgICAgICAgICJodHRwOi8vYS9i L2MvZDtwP3EiKSAiaHR0cDovL2EvYi9jLy5nIikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhw YW5kLWZpbGUtbmFtZSAiZy4uIiAgICAgICAgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRw Oi8vYS9iL2MvZy4uIikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAi Li5nIiAgICAgICAgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRwOi8vYS9iL2MvLi5nIikp CisKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICIuLy4uL2ciICAgICAg ICAiaHR0cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9hL2IvZyIpKQorICAoc2hvdWxkIChlcXVh bCAodXJsLWV4cGFuZC1maWxlLW5hbWUgIi4vZy8uIiAgICAgICAgICJodHRwOi8vYS9iL2MvZDtw P3EiKSAiaHR0cDovL2EvYi9jL2cvIikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZp bGUtbmFtZSAiZy8uL2giICAgICAgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRwOi8vYS9i L2MvZy9oIikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAiZy8uLi9o IiAgICAgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRwOi8vYS9iL2MvaCIpKQorICAoc2hv dWxkIChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUgImc7eD0xLy4veSIgICAgICJodHRwOi8v YS9iL2MvZDtwP3EiKSAiaHR0cDovL2EvYi9jL2c7eD0xL3kiKSkKKyAgKHNob3VsZCAoZXF1YWwg KHVybC1leHBhbmQtZmlsZS1uYW1lICJnO3g9MS8uLi95IiAgICAiaHR0cDovL2EvYi9jL2Q7cD9x IikgImh0dHA6Ly9hL2IvYy95IikpCisKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmls ZS1uYW1lICJnP3kvLi94IiAgICAgICAiaHR0cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9hL2Iv Yy9nP3kvLi94IikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAiZz95 Ly4uL3giICAgICAgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICJodHRwOi8vYS9iL2MvZz95Ly4uL3gi KSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1leHBhbmQtZmlsZS1uYW1lICJnI3MvLi94IiAgICAg ICAiaHR0cDovL2EvYi9jL2Q7cD9xIikgImh0dHA6Ly9hL2IvYy9nI3MvLi94IikpCisgIChzaG91 bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAiZyNzLy4uL3giICAgICAgImh0dHA6Ly9h L2IvYy9kO3A/cSIpICJodHRwOi8vYS9iL2MvZyNzLy4uL3giKSkKKworICAoc2hvdWxkIChlcXVh bCAodXJsLWV4cGFuZC1maWxlLW5hbWUgImh0dHA6ZyIgICAgICAgICJodHRwOi8vYS9iL2MvZDtw P3EiKSAiaHR0cDpnIikpIDsgZm9yIHN0cmljdCBwYXJzZXJzCisgICkKKworKGVydC1kZWZ0ZXN0 IHVybC1leHBhbmQtZmlsZS1uYW1lL3JlbGF0aXZlLXJlc29sdXRpb24tYWRkaXRpb25hbC1leGFt cGxlcyAoKQorICAiUmVmZXJlbmNlIFJlc29sdXRpb24gRXhhbXBsZXMgLyBBcmJpdHJhcnkgRXhh bXBsZXMiCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAiIiAiaHR0cDov L2hvc3QvZm9vYmFyIikgImh0dHA6Ly9ob3N0L2Zvb2JhciIpKQorICAoc2hvdWxkIChlcXVhbCAo dXJsLWV4cGFuZC1maWxlLW5hbWUgIj95IiAgICAgICJodHRwOi8vYS9iL2MvZCIpICJodHRwOi8v YS9iL2MvZD95IikpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAiP3ki ICAgICAgImh0dHA6Ly9hL2IvYy9kLyIpICJodHRwOi8vYS9iL2MvZC8/eSIpKQorICAoc2hvdWxk IChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUgIj95I2ZyYWdtZW50IiAgICAgICJodHRwOi8v YS9iL2MvZDtwP3EiKSAiaHR0cDovL2EvYi9jL2Q7cD95I2ZyYWdtZW50IikpCisgIChzaG91bGQg KGVxdWFsICh1cmwtZXhwYW5kLWZpbGUtbmFtZSAiI2JhciIgImh0dHA6Ly9ob3N0IikgImh0dHA6 Ly9ob3N0I2JhciIpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUgIiNi YXIiICJodHRwOi8vaG9zdC8iKSAiaHR0cDovL2hvc3QvI2JhciIpKQorICAoc2hvdWxkIChlcXVh bCAodXJsLWV4cGFuZC1maWxlLW5hbWUgIiNiYXIiICJodHRwOi8vaG9zdC9mb28iKSAiaHR0cDov L2hvc3QvZm9vI2JhciIpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUg ImZvbyNiYXIiICJodHRwOi8vaG9zdC9mb29iYXIiKSAiaHR0cDovL2hvc3QvZm9vI2JhciIpKQor ICAoc2hvdWxkIChlcXVhbCAodXJsLWV4cGFuZC1maWxlLW5hbWUgImZvbyNiYXIiICJodHRwOi8v aG9zdC9mb29iYXIvIikgImh0dHA6Ly9ob3N0L2Zvb2Jhci9mb28jYmFyIikpKQorCisocHJvdmlk ZSAndXJsLWV4cGFuZC10ZXN0cykKKworOzs7IHVybC1leHBhbmQtdGVzdHMuZWwgZW5kcyBoZXJl CmRpZmYgLS1naXQgYS90ZXN0L2F1dG9tYXRlZC91cmwtcGFyc2UtdGVzdHMuZWwgYi90ZXN0L2F1 dG9tYXRlZC91cmwtcGFyc2UtdGVzdHMuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uY2RlZDM2MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvYXV0b21hdGVkL3VybC1wYXJz ZS10ZXN0cy5lbApAQCAtMCwwICsxLDE2NyBAQAorOzs7IHVybC1wYXJzZS10ZXN0cy5lbCAtLS0g VGVzdCBzdWl0ZSBmb3IgVVJJL1VSTCBwYXJzaW5nLgorCis7OyBDb3B5cmlnaHQgKEMpIDIwMTIt MjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworOzsgQXV0aG9yOiBBbGFpbiBO aWNvbGFzIFNjaG5lYmxlIDxhLnNAcmVhbGl6ZS5jaD4KKzs7IFZlcnNpb246IDEuMAorCis7OyBU aGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuCisKKzs7IEdOVSBFbWFjcyBpcyBmcmVlIHNv ZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cis7OyBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieQorOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKzs7IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisKKzs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9uZyB3aXRoIEdOVSBF bWFjcy4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworOzs7 IENvbW1lbnRhcnk6CisKKzs7IFRlc3QgY2FzZXMgY292ZXJpbmcgZ2VuZXJpYyBVUkkgc3ludGF4 IGFzIGRlc2NyaWJlZCBpbiBSRkMzOTg2LAorOzsgc2VjdGlvbiAzLiBTeW50YXggQ29tcG9uZW50 cyBhbmQgNC4gVXNhZ2UuIFNlZSBhbHNvIGFwcGVuZGl4Cis7OyBBLiBDb2xsZWN0ZWQgQUJORiBm b3IgVVJJLCBhcyB0aGUgZXhhbXBsZSBnaXZlbiBoZXJlIGFyZSBhbGwKKzs7IHByb2R1Y3Rpb25z IG9mIHRoaXMgZ3JhbW1hci4KKworOzsgRWFjaCB0ZXN0cyBwYXJzZXMgYSBnaXZlbiBVUkkgc3Ry aW5nIC0gd2hldGhlciByZWxhdGl2ZSBvciBhYnNvbHV0ZSAtCis7OyB1c2luZyBgdXJsLWdlbmVy aWMtcGFyc2UtdXJsJyBhbmQgY29tcGFyZXMgdGhlIGNvbnN0cnVjdGVkCis7OyBVUkwtc3RydWN0 IChBY3R1YWwpIGFnYWluc3QgYSBtYW51YWxseSBgdXJsLXBhcnNlLW1ha2UtdXJsb2JqJy0KKzs7 IGNvbnN0cnVjdGVkIFVSTC1zdHJ1Y3QgKEV4cGVjdGVkKS4KKworOzs7IENvZGU6CisKKyhyZXF1 aXJlICd1cmwtcGFyc2UpCisocmVxdWlyZSAnZXJ0KQorCisoZXJ0LWRlZnRlc3QgdXJsLWdlbmVy aWMtcGFyc2UtdXJsL2dlbmVyaWMtdXJpLWV4YW1wbGVzICgpCisgICJSRkMgMzk4Niwgc2VjdGlv biAxLjEuMi4gRXhhbXBsZXMgLyBFeGFtcGxlIGlsbHVzdHJhdGluZyBzZXZlcmFsIFVSSSBzY2hl bWVzIGFuZCB2YXJpYXRpb25zIGluIHRoZWlyIGNvbW1vbiBzeW50YXggY29tcG9uZW50cyIKKyAg KHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiZnRwOi8vZnRwLmlzLmNvLnph L3JmYy9yZmMxODA4LnR4dCIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImZ0cCIgbmlsIG5pbCAi ZnRwLmlzLmNvLnphIiBuaWwgIi9yZmMvcmZjMTgwOC50eHQiIG5pbCBuaWwgdCkpKQorICAoc2hv dWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vd3d3LmlldGYub3JnL3Jm Yy9yZmMyMzk2LnR4dCIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgInd3 dy5pZXRmLm9yZyIgbmlsICIvcmZjL3JmYzIzOTYudHh0IiBuaWwgbmlsIHQpKSkKKyAgKHNob3Vs ZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAibGRhcDovL1syMDAxOmRiODo6N10vYz1H Qj9vYmplY3RDbGFzcz9vbmUiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJsZGFwIiBuaWwgbmls ICJbMjAwMTpkYjg6OjddIiBuaWwgIi9jPUdCP29iamVjdENsYXNzP29uZSIgbmlsIG5pbCB0KSkp CisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgIm1haWx0bzpKb2huLkRv ZUBleGFtcGxlLmNvbSIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogIm1haWx0byIgbmlsIG5pbCBu aWwgbmlsICJKb2huLkRvZUBleGFtcGxlLmNvbSIgbmlsIG5pbCBuaWwpKSkKKyAgKHNob3VsZCAo ZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAibmV3czpjb21wLmluZm9zeXN0ZW1zLnd3dy5z ZXJ2ZXJzLnVuaXgiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJuZXdzIiBuaWwgbmlsIG5pbCBu aWwgImNvbXAuaW5mb3N5c3RlbXMud3d3LnNlcnZlcnMudW5peCIgbmlsIG5pbCBuaWwpKSkKKyAg KHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAidGVsOisxLTgxNi01NTUtMTIx MiIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogInRlbCIgbmlsIG5pbCBuaWwgbmlsICIrMS04MTYt NTU1LTEyMTIiIG5pbCBuaWwgbmlsKSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1w YXJzZS11cmwgInRlbG5ldDovLzE5Mi4wLjIuMTY6ODAvIikgKHVybC1wYXJzZS1tYWtlLXVybG9i aiAidGVsbmV0IiBuaWwgbmlsICIxOTIuMC4yLjE2IiA4MCAiLyIgbmlsIG5pbCB0KSkpCisgIChz aG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgInVybjpvYXNpczpuYW1lczpzcGVj aWZpY2F0aW9uOmRvY2Jvb2s6ZHRkOnhtbDo0LjEuMiIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmog InVybiIgbmlsIG5pbCBuaWwgbmlsICJvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOmRvY2Jvb2s6 ZHRkOnhtbDo0LjEuMiIgbmlsIG5pbCBuaWwpKSkpCisKKyhlcnQtZGVmdGVzdCB1cmwtZ2VuZXJp Yy1wYXJzZS11cmwvZ2VuZXJpYy11cmkgKCkKKyAgIlJGQyAzOTg2LCBzZWN0aW9uIDMuIFN5bnRh eCBDb21wb25lbnRzIC8gZ2VuZXJpYyBVUkkgc3ludGF4IgorICA7OyBlbXB0eSBwYXRoCisgIChz aG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0IyIpICh1cmwt cGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiIiAiIiBuaWwgdCkp KQorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9zdCNm cmFnbWVudCIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5p bCAiIiAiZnJhZ21lbnQiIG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1w YXJzZS11cmwgImh0dHA6Ly9ob3N0PyMiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBu aWwgbmlsICJob3N0IiBuaWwgIj8iICIiIG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwt Z2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0P3F1ZXJ5IyIpICh1cmwtcGFyc2UtbWFrZS11 cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiP3F1ZXJ5IiAiIiBuaWwgdCkpKQorICAo c2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9zdD8jZnJhZ21l bnQiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBuaWwgbmlsICJob3N0IiBuaWwgIj8i ICJmcmFnbWVudCIgbmlsIHQpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNl LXVybCAiaHR0cDovL2hvc3Q/cXVlcnkjZnJhZ21lbnQiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2Jq ICJodHRwIiBuaWwgbmlsICJob3N0IiBuaWwgIj9xdWVyeSIgImZyYWdtZW50IiBuaWwgdCkpKQor ICA7OyBhYnNvbHV0ZSBwYXRoIC8KKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNl LXVybCAiaHR0cDovL2hvc3QvIyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBu aWwgImhvc3QiIG5pbCAiLyIgIiIgbmlsIHQpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5l cmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvI2ZyYWdtZW50IikgKHVybC1wYXJzZS1tYWtlLXVy bG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIvIiAiZnJhZ21lbnQiIG5pbCB0KSkpCisg IChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0Lz8jIikg KHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIvPyIgIiIg bmlsIHQpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiaHR0cDov L2hvc3QvP3F1ZXJ5IyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhv c3QiIG5pbCAiLz9xdWVyeSIgIiIgbmlsIHQpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5l cmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvPyNmcmFnbWVudCIpICh1cmwtcGFyc2UtbWFrZS11 cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiLz8iICJmcmFnbWVudCIgbmlsIHQpKSkK KyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvP3F1 ZXJ5I2ZyYWdtZW50IikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9z dCIgbmlsICIvP3F1ZXJ5IiAiZnJhZ21lbnQiIG5pbCB0KSkpCisgIDs7IGFic29sdXRlIHBhdGgg L2ZvbworICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9z dC9mb28jIikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmls ICIvZm9vIiAiIiBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2Ut dXJsICJodHRwOi8vaG9zdC9mb28jZnJhZ21lbnQiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJo dHRwIiBuaWwgbmlsICJob3N0IiBuaWwgIi9mb28iICJmcmFnbWVudCIgbmlsIHQpKSkKKyAgKHNo b3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvZm9vPyMiKSAo dXJsLXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBuaWwgbmlsICJob3N0IiBuaWwgIi9mb28/IiAi IiBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRw Oi8vaG9zdC9mb28/cXVlcnkjIikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5p bCAiaG9zdCIgbmlsICIvZm9vP3F1ZXJ5IiAiIiBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAo dXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9zdC9mb28/I2ZyYWdtZW50IikgKHVybC1w YXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIvZm9vPyIgImZyYWdt ZW50IiBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJo dHRwOi8vaG9zdC9mb28/cXVlcnkjZnJhZ21lbnQiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJo dHRwIiBuaWwgbmlsICJob3N0IiBuaWwgIi9mb28/cXVlcnkiICJmcmFnbWVudCIgbmlsIHQpKSkK KyAgOzsgYWJzb2x1dGUgcGF0aCAvZm9vLworICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMt cGFyc2UtdXJsICJodHRwOi8vaG9zdC9mb28vIyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0 dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiL2Zvby8iICIiIG5pbCB0KSkpCisgIChzaG91bGQgKGVx dWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0L2Zvby8jZnJhZ21lbnQiKSAo dXJsLXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBuaWwgbmlsICJob3N0IiBuaWwgIi9mb28vIiAi ZnJhZ21lbnQiIG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11 cmwgImh0dHA6Ly9ob3N0L2Zvby8/IyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5p bCBuaWwgImhvc3QiIG5pbCAiL2Zvby8/IiAiIiBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAo dXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9zdC9mb28vP3F1ZXJ5IyIpICh1cmwtcGFy c2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiL2Zvby8/cXVlcnkiICIi IG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6 Ly9ob3N0L2Zvby8/I2ZyYWdtZW50IikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmls IG5pbCAiaG9zdCIgbmlsICIvZm9vLz8iICJmcmFnbWVudCIgbmlsIHQpKSkKKyAgKHNob3VsZCAo ZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvZm9vLz9xdWVyeSNmcmFn bWVudCIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAi L2Zvby8/cXVlcnkiICJmcmFnbWVudCIgbmlsIHQpKSkKKyAgOzsgYWJzb2x1dGUgcGF0aCAvZm9v L2JhcgorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9z dC9mb28vYmFyIyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3Qi IG5pbCAiL2Zvby9iYXIiICIiIG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJp Yy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0L2Zvby9iYXIjZnJhZ21lbnQiKSAodXJsLXBhcnNlLW1h a2UtdXJsb2JqICJodHRwIiBuaWwgbmlsICJob3N0IiBuaWwgIi9mb28vYmFyIiAiZnJhZ21lbnQi IG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6 Ly9ob3N0L2Zvby9iYXI/IyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwg Imhvc3QiIG5pbCAiL2Zvby9iYXI/IiAiIiBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJs LWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9zdC9mb28vYmFyP3F1ZXJ5IyIpICh1cmwtcGFy c2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiL2Zvby9iYXI/cXVlcnki ICIiIG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0 dHA6Ly9ob3N0L2Zvby9iYXI/I2ZyYWdtZW50IikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0 cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIvZm9vL2Jhcj8iICJmcmFnbWVudCIgbmlsIHQpKSkKKyAg KHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvZm9vL2Jh cj9xdWVyeSNmcmFnbWVudCIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwg Imhvc3QiIG5pbCAiL2Zvby9iYXI/cXVlcnkiICJmcmFnbWVudCIgbmlsIHQpKSkKKyAgOzsgYWJz b2x1dGUgcGF0aCAvZm9vL2Jhci8KKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNl LXVybCAiaHR0cDovL2hvc3QvZm9vL2Jhci8jIikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0 cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIvZm9vL2Jhci8iICIiIG5pbCB0KSkpCisgIChzaG91bGQg KGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0L2Zvby9iYXIvI2ZyYWdt ZW50IikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIv Zm9vL2Jhci8iICJmcmFnbWVudCIgbmlsIHQpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5l cmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvZm9vL2Jhci8/IyIpICh1cmwtcGFyc2UtbWFrZS11 cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiL2Zvby9iYXIvPyIgIiIgbmlsIHQpKSkK KyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvZm9v L2Jhci8/cXVlcnkjIikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9z dCIgbmlsICIvZm9vL2Jhci8/cXVlcnkiICIiIG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1 cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0L2Zvby9iYXIvPyNmcmFnbWVudCIpICh1 cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiL2Zvby9iYXIv PyIgImZyYWdtZW50IiBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFy c2UtdXJsICJodHRwOi8vaG9zdC9mb28vYmFyLz9xdWVyeSNmcmFnbWVudCIpICh1cmwtcGFyc2Ut bWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiL2Zvby9iYXIvP3F1ZXJ5IiAi ZnJhZ21lbnQiIG5pbCB0KSkpCisgIDs7IGZvciBtb3JlIGV4YW1wbGVzIG9mIFVSSXMgd2l0aG91 dCBmcmFnbWVudHMsIHNlZSB0ZXN0cyBjb3ZlcmluZyBzZWN0aW9uIDQuMy4gQWJzb2x1dGUgVVJJ CisgICkKKworKGVydC1kZWZ0ZXN0IHVybC1nZW5lcmljLXBhcnNlLXVybC9uZXR3b3JrLXBhdGgt cmVmZXJlbmNlICgpCisgICJSRkMgMzk4Niwgc2VjdGlvbiA0LjIuIFJlbGF0aXZlIFJlZmVyZW5j ZSAvIG5ldHdvcmstcGF0aCByZWZlcmVuY2U6IGEgcmVsYXRpdmUgcmVmZXJlbmNlIHRoYXQgYmVn aW5zIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMiCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2Vu ZXJpYy1wYXJzZS11cmwgIi8vaG9zdCIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogbmlsIG5pbCBu aWwgImhvc3QiIG5pbCAiIiBuaWwgbmlsIHQpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5l cmljLXBhcnNlLXVybCAiLy9ob3N0LyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogbmlsIG5pbCBu aWwgImhvc3QiIG5pbCAiLyIgbmlsIG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2Vu ZXJpYy1wYXJzZS11cmwgIi8vaG9zdC9mb28iKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqIG5pbCBu aWwgbmlsICJob3N0IiBuaWwgIi9mb28iIG5pbCBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAo dXJsLWdlbmVyaWMtcGFyc2UtdXJsICIvL2hvc3QvZm9vL2JhciIpICh1cmwtcGFyc2UtbWFrZS11 cmxvYmogbmlsIG5pbCBuaWwgImhvc3QiIG5pbCAiL2Zvby9iYXIiIG5pbCBuaWwgdCkpKQorICAo c2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICIvL2hvc3QvZm9vL2Jhci8iKSAo dXJsLXBhcnNlLW1ha2UtdXJsb2JqIG5pbCBuaWwgbmlsICJob3N0IiBuaWwgIi9mb28vYmFyLyIg bmlsIG5pbCB0KSkpKQorCisoZXJ0LWRlZnRlc3QgdXJsLWdlbmVyaWMtcGFyc2UtdXJsL2Fic29s dXRlLXBhdGgtcmVmZXJlbmNlICgpCisgICJSRkMgMzk4Niwgc2VjdGlvbiA0LjIuIFJlbGF0aXZl IFJlZmVyZW5jZSAvIGFic29sdXRlLXBhdGggcmVmZXJlbmNlOiBhIHJlbGF0aXZlIHJlZmVyZW5j ZSB0aGF0IGJlZ2lucyB3aXRoIGEgc2luZ2xlIHNsYXNoIGNoYXJhY3RlciIKKyAgKHNob3VsZCAo ZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiLyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmog bmlsIG5pbCBuaWwgbmlsIG5pbCAiLyIgbmlsIG5pbCBuaWwpKSkKKyAgKHNob3VsZCAoZXF1YWwg KHVybC1nZW5lcmljLXBhcnNlLXVybCAiL2ZvbyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogbmls IG5pbCBuaWwgbmlsIG5pbCAiL2ZvbyIgbmlsIG5pbCBuaWwpKSkKKyAgKHNob3VsZCAoZXF1YWwg KHVybC1nZW5lcmljLXBhcnNlLXVybCAiL2Zvby9iYXIiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2Jq IG5pbCBuaWwgbmlsIG5pbCBuaWwgIi9mb28vYmFyIiBuaWwgbmlsIG5pbCkpKQorICAoc2hvdWxk IChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICIvZm9vL2Jhci8iKSAodXJsLXBhcnNlLW1h a2UtdXJsb2JqIG5pbCBuaWwgbmlsIG5pbCBuaWwgIi9mb28vYmFyLyIgbmlsIG5pbCBuaWwpKSkK KyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiL2Zvby9iYXIjIikgKHVy bC1wYXJzZS1tYWtlLXVybG9iaiBuaWwgbmlsIG5pbCBuaWwgbmlsICIvZm9vL2JhciIgIiIgbmls IG5pbCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICIvZm9vL2Jh ci8jIikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiBuaWwgbmlsIG5pbCBuaWwgbmlsICIvZm9vL2Jh ci8iICIiIG5pbCBuaWwpKSkpCisKKyhlcnQtZGVmdGVzdCB1cmwtZ2VuZXJpYy1wYXJzZS11cmwv cmVsYXRpdmUtcGF0aC1yZWZlcmVuY2UgKCkKKyAgIlJGQyAzOTg2LCBzZWN0aW9uIDQuMi4gUmVs YXRpdmUgUmVmZXJlbmNlIC8gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2U6IGEgcmVsYXRpdmUgcmVm ZXJlbmNlIHRoYXQgZG9lcyBub3QgYmVnaW4gd2l0aCBhIHNsYXNoIGNoYXJhY3RlciIKKyAgKHNo b3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiZm9vIikgKHVybC1wYXJzZS1tYWtl LXVybG9iaiBuaWwgbmlsIG5pbCBuaWwgbmlsICJmb28iIG5pbCBuaWwgbmlsKSkpCisgIChzaG91 bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImZvby9iYXIiKSAodXJsLXBhcnNlLW1h a2UtdXJsb2JqIG5pbCBuaWwgbmlsIG5pbCBuaWwgImZvby9iYXIiIG5pbCBuaWwgbmlsKSkpCisg IChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImZvby9iYXIvIikgKHVybC1w YXJzZS1tYWtlLXVybG9iaiBuaWwgbmlsIG5pbCBuaWwgbmlsICJmb28vYmFyLyIgbmlsIG5pbCBu aWwpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiLi9mb28iKSAo dXJsLXBhcnNlLW1ha2UtdXJsb2JqIG5pbCBuaWwgbmlsIG5pbCBuaWwgIi4vZm9vIiBuaWwgbmls IG5pbCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICIuL2Zvby9i YXIiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqIG5pbCBuaWwgbmlsIG5pbCBuaWwgIi4vZm9vL2Jh ciIgbmlsIG5pbCBuaWwpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVy bCAiLi9mb28vYmFyLyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogbmlsIG5pbCBuaWwgbmlsIG5p bCAiLi9mb28vYmFyLyIgbmlsIG5pbCBuaWwpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5l cmljLXBhcnNlLXVybCAiLi4vZm9vIikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiBuaWwgbmlsIG5p bCBuaWwgbmlsICIuLi9mb28iIG5pbCBuaWwgbmlsKSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwt Z2VuZXJpYy1wYXJzZS11cmwgIi4uL2Zvby9iYXIiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqIG5p bCBuaWwgbmlsIG5pbCBuaWwgIi4uL2Zvby9iYXIiIG5pbCBuaWwgbmlsKSkpCisgIChzaG91bGQg KGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgIi4uL2Zvby9iYXIvIikgKHVybC1wYXJzZS1t YWtlLXVybG9iaiBuaWwgbmlsIG5pbCBuaWwgbmlsICIuLi9mb28vYmFyLyIgbmlsIG5pbCBuaWwp KSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiLi90aGlzOnRoYXQi KSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqIG5pbCBuaWwgbmlsIG5pbCBuaWwgIi4vdGhpczp0aGF0 IiBuaWwgbmlsIG5pbCkpKQorICA7OyBmb3IgbW9yZSBleGFtcGxlcyBvZiByZWxhdGl2ZS1wYXRo IHJlZmVyZW5jZXMsIHNlZSB0ZXN0cyBjb3ZlcmluZyBzZWN0aW9uIDQuNC4gU2FtZS1Eb2N1bWVu dCBSZWZlcmVuY2UKKyAgKQorCisoZXJ0LWRlZnRlc3QgdXJsLWdlbmVyaWMtcGFyc2UtdXJsL2Fi c29sdXRlLXVyaSAoKQorICAiUkZDIDM5ODYsIHNlY3Rpb24gNC4zLiBBYnNvbHV0ZSBVUkkgLyBh YnNvbHV0ZSBVUkk6IGFic29sdXRlIGZvcm0gb2YgYSBVUkkgd2l0aG91dCBhIGZyYWdtZW50IGlk ZW50aWZpZXIiCisgIDs7IGVtcHR5IHBhdGgKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmlj LXBhcnNlLXVybCAiaHR0cDovL2hvc3QiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBu aWwgbmlsICJob3N0IiBuaWwgIiIgbmlsIG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwt Z2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0PyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmog Imh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiPyIgbmlsIG5pbCB0KSkpCisgIChzaG91bGQgKGVx dWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0P3F1ZXJ5IikgKHVybC1wYXJz ZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmlsICI/cXVlcnkiIG5pbCBuaWwg dCkpKQorICA7OyBhYnNvbHV0ZSBwYXRoIC8KKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmlj LXBhcnNlLXVybCAiaHR0cDovL2hvc3QvIikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0cCIg bmlsIG5pbCAiaG9zdCIgbmlsICIvIiBuaWwgbmlsIHQpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVy bC1nZW5lcmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvPyIpICh1cmwtcGFyc2UtbWFrZS11cmxv YmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiLz8iIG5pbCBuaWwgdCkpKQorICAoc2hvdWxk IChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9zdC8/cXVlcnkiKSAodXJs LXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBuaWwgbmlsICJob3N0IiBuaWwgIi8/cXVlcnkiIG5p bCBuaWwgdCkpKQorICA7OyBhYnNvbHV0ZSBwYXRoIC9mb28KKyAgKHNob3VsZCAoZXF1YWwgKHVy bC1nZW5lcmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvZm9vIikgKHVybC1wYXJzZS1tYWtlLXVy bG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIvZm9vIiBuaWwgbmlsIHQpKSkKKyAgKHNo b3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBhcnNlLXVybCAiaHR0cDovL2hvc3QvZm9vPyIpICh1 cmwtcGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiL2Zvbz8iIG5p bCBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRw Oi8vaG9zdC9mb28/cXVlcnkiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBuaWwgbmls ICJob3N0IiBuaWwgIi9mb28/cXVlcnkiIG5pbCBuaWwgdCkpKQorICA7OyBhYnNvbHV0ZSBwYXRo IC9mb28vCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9o b3N0L2Zvby8iKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBuaWwgbmlsICJob3N0IiBu aWwgIi9mb28vIiBuaWwgbmlsIHQpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1nZW5lcmljLXBh cnNlLXVybCAiaHR0cDovL2hvc3QvZm9vLz8iKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJodHRw IiBuaWwgbmlsICJob3N0IiBuaWwgIi9mb28vPyIgbmlsIG5pbCB0KSkpCisgIChzaG91bGQgKGVx dWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0L2Zvby8/cXVlcnkiKSAodXJs LXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBuaWwgbmlsICJob3N0IiBuaWwgIi9mb28vP3F1ZXJ5 IiBuaWwgbmlsIHQpKSkKKyAgOzsgYWJzb2x1dGUgcGF0aCAvZm9vL2JhcgorICAoc2hvdWxkIChl cXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9zdC9mb28vYmFyIikgKHVybC1w YXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIvZm9vL2JhciIgbmls IG5pbCB0KSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6 Ly9ob3N0L2Zvby9iYXI/IikgKHVybC1wYXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAi aG9zdCIgbmlsICIvZm9vL2Jhcj8iIG5pbCBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJs LWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9zdC9mb28vYmFyP3F1ZXJ5IikgKHVybC1wYXJz ZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIvZm9vL2Jhcj9xdWVyeSIg bmlsIG5pbCB0KSkpCisgIDs7IGFic29sdXRlIHBhdGggL2Zvby9iYXIvCisgIChzaG91bGQgKGVx dWFsICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9ob3N0L2Zvby9iYXIvIikgKHVybC1w YXJzZS1tYWtlLXVybG9iaiAiaHR0cCIgbmlsIG5pbCAiaG9zdCIgbmlsICIvZm9vL2Jhci8iIG5p bCBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRw Oi8vaG9zdC9mb28vYmFyLz8iKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqICJodHRwIiBuaWwgbmls ICJob3N0IiBuaWwgIi9mb28vYmFyLz8iIG5pbCBuaWwgdCkpKQorICAoc2hvdWxkIChlcXVhbCAo dXJsLWdlbmVyaWMtcGFyc2UtdXJsICJodHRwOi8vaG9zdC9mb28vYmFyLz9xdWVyeSIpICh1cmwt cGFyc2UtbWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImhvc3QiIG5pbCAiL2Zvby9iYXIvP3F1 ZXJ5IiBuaWwgbmlsIHQpKSkKKyAgOzsgZXhhbXBsZSBtZW50aW9uZWQgaW4gUkZDMzk4Niwgc2Vj dGlvbiA1LjQuIFJlZmVyZW5jZSBSZXNvbHV0aW9uIEV4YW1wbGVzCisgIChzaG91bGQgKGVxdWFs ICh1cmwtZ2VuZXJpYy1wYXJzZS11cmwgImh0dHA6Ly9hL2IvYy9kO3A/cSIpICh1cmwtcGFyc2Ut bWFrZS11cmxvYmogImh0dHAiIG5pbCBuaWwgImEiIG5pbCAiL2IvYy9kO3A/cSIgbmlsIG5pbCB0 KSkpKQorCisoZXJ0LWRlZnRlc3QgdXJsLWdlbmVyaWMtcGFyc2UtdXJsL3NhbWUtZGVjdW1lbnQt cmVmZXJlbmNlICgpCisgICJSRkMgMzk4Niwgc2VjdGlvbiA0LjQuIFNhbWUtRG9jdW1lbnQgUmVm ZXJlbmNlIC8gc2FtZS1kb2N1bWVudCByZWZlcmVuY2U6IGVtcHR5IG9yIG51bWJlciBzaWduIChc IiNcIikgZm9sbG93ZWQgYnkgYSBmcmFnbWVudCBpZGVudGlmaWVyIgorICAoc2hvdWxkIChlcXVh bCAodXJsLWdlbmVyaWMtcGFyc2UtdXJsICIiKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqIG5pbCBu aWwgbmlsIG5pbCBuaWwgIiIgbmlsIG5pbCBuaWwpKSkKKyAgKHNob3VsZCAoZXF1YWwgKHVybC1n ZW5lcmljLXBhcnNlLXVybCAiIyIpICh1cmwtcGFyc2UtbWFrZS11cmxvYmogbmlsIG5pbCBuaWwg bmlsIG5pbCAiIiAiIiBuaWwgbmlsKSkpCisgIChzaG91bGQgKGVxdWFsICh1cmwtZ2VuZXJpYy1w YXJzZS11cmwgIiNmb28iKSAodXJsLXBhcnNlLW1ha2UtdXJsb2JqIG5pbCBuaWwgbmlsIG5pbCBu aWwgIiIgImZvbyIgbmlsIG5pbCkpKSkKKworKHByb3ZpZGUgJ3VybC1wYXJzZS10ZXN0cykKKwor Ozs7IHVybC1wYXJzZS10ZXN0cy5lbCBlbmRzIGhlcmUKLS0gCjIuNi4yLndpbmRvd3MuMQoK --_002_5a139835077940febe2fe3dfe624f754rintintinhqrealizechlan_--