From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Eric Bavier Newsgroups: gmane.lisp.guile.user Subject: [potluck dish] Compiler for the Joy language Date: Mon, 15 Feb 2016 22:17:23 -0600 Message-ID: <20160215221723.240e4fa6@openmailbox.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/sAF_ITcet/ZClYF6alaKpdX" X-Trace: ger.gmane.org 1455607676 30864 80.91.229.3 (16 Feb 2016 07:27:56 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 16 Feb 2016 07:27:56 +0000 (UTC) To: guile-user@gnu.org Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Tue Feb 16 08:27:48 2016 Return-path: Envelope-to: guile-user@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 1aVa30-000113-R2 for guile-user@m.gmane.org; Tue, 16 Feb 2016 08:27:47 +0100 Original-Received: from localhost ([::1]:40195 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aVa30-00045O-02 for guile-user@m.gmane.org; Tue, 16 Feb 2016 02:27:46 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:33451) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aVXeD-0006Vr-6h for guile-user@gnu.org; Mon, 15 Feb 2016 23:54:05 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aVXe8-0005mT-No for guile-user@gnu.org; Mon, 15 Feb 2016 23:54:01 -0500 Original-Received: from smtp25.openmailbox.org ([62.4.1.59]:45198) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aVXe8-0005mP-54 for guile-user@gnu.org; Mon, 15 Feb 2016 23:53:56 -0500 Original-Received: by mail2.openmailbox.org (Postfix, from userid 1002) id E597A7C4B55; Tue, 16 Feb 2016 05:17:40 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=openmailbox.org; s=openmailbox; t=1455596260; bh=Vi2YjMAb/xJXBrQVgcdA0aRkgjIQWSYuGk5o91Wt10Y=; h=Date:From:To:Subject:From; b=nhkjEDVcUmV1k0tOg0VmT2VABgVTdsaNSS8KYK8o8QqGcVCi6xYDYoB3osEIM9Rgq yy8k0MohYyO2Fj15zWHeqRKKrSfqbtDnMe8/dUxy0INn1xEUvfj58FDDDlpBYZcqS+ VMFf5H7BdG7F3QvrG6+C5cWZcJwT5IU/VaCulDcU= DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=openmailbox.org; s=openmailbox; t=1455596250; bh=Vi2YjMAb/xJXBrQVgcdA0aRkgjIQWSYuGk5o91Wt10Y=; h=Date:From:To:Subject:From; b=oQKqv/r2UaMEF4cJBO+s7PXmfr5KfW5YOx1tCVMk/6+0YUXv97uh2OvotfjlS37zu p10phO6dTc3OkHxYXyp6TMhT2Q3iBr/WozfbbWNyNv27eW+IZAHzWnL7eqdPR71gcv Cb6p+0LvXiFl6dilY9gPJ/fwZW21sTiODuXthHfE= X-Mailer: Claws Mail 3.13.1 (GTK+ 2.24.28; i686-unknown-linux-gnu) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 62.4.1.59 X-Mailman-Approved-At: Tue, 16 Feb 2016 02:27:31 -0500 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:12400 Archived-At: --MP_/sAF_ITcet/ZClYF6alaKpdX Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello Guilers, And happy birthday Guile! I started this project a few weeks ago, and managed to make enough progress that I thought I'd share it for the potluck. Joy is a simple, forth-like, purely functional, concatenative programming language: https://en.wikipedia.org/wiki/Joy_(programming_language) http://www.latrobe.edu.au/humanities/research/research-projects/past-projects/joy-programming-language Attached is a patch to guile master that adds a module/language/joy directory, with lexer, parser, compiler to tree-il, runtime, and minimal standard library. This is still a work-in-progress, but you can already do some fun things: $ guile scheme@(guile-user)> ,L joy joy@(guile-user)> "/base.joy" include . joy@(guile-user)> 2 3 + 4 1 . $1 = (1 4 5) joy@(guile-user)> DEFINE foo == 2 3 + 4 1 ; bar == + + . joy@(guile-user)> foo bar . $2 = (10) joy@(guile-user)> [1 2 3 4 5 6] [fact] map . $3 = ((1 2 6 24 120 720)) joy@(guile-user)> [1 2 3 4 5 6] [fact] map sum . $4 = (873) joy@(guile-user)> [1 2 3 4 5 6] [fact 2 /] map . $5 = ((0 1 3 12 60 360)) My interest in Joy came from a search to find a small language whose minimal base could be implemented as an easily-audited assembly interpreter, but which has higher-level language capabilities. The guile implementation sprang out of a desire to get to know the language a bit more before embarking on the assembly route. Learning more about Guile's multi-language support has been a real pleasure, and I'd love to see it/help it grow more. Limitations and things yet to do: - The compiler and runtime currently do not support "sets" aka bitsets as a native type like the reference implementation does. - String support in the primitives and base library is not complete. I have been toying with the idea of just compiling strings to lists-of-chars for easier handling and simplicity of the primitives. - REPL: A joy-specific writer would be nice. And better backtraces? - Writing more interesting libraries. I had hoped to write a useful parser-combinator library. - Better include-path handling. - Distribution: part of Guile, or separate? Anyhow, I hope some find this interesting. Happy Hacking and happy birthday Guile! `~Eric Bavier --MP_/sAF_ITcet/ZClYF6alaKpdX Content-Type: text/x-patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-Add-compiler-for-the-Joy-language.patch RnJvbSA1ZDgwNGRmYWM0MTg5N2FhMDY5Mzk5NTE2YWYyODQ2ZTczZDA0ZjJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogRXJpYyBCYXZpZXIgPGJhdmllckBtZW1iZXIuZnNmLm9yZz4N CkRhdGU6IE1vbiwgMTUgRmViIDIwMTYgMTk6MzY6MDkgLTA2MDANClN1YmplY3Q6IFtQQVRDSF0g QWRkIGNvbXBpbGVyIGZvciB0aGUgSm95IGxhbmd1YWdlLg0KDQoqIG1vZHVsZS9sYW5ndWFnZS9q b3kvbGV4ZXIuc2NtLCBtb2R1bGUvbGFuZ3VhZ2Uvam95L3BhcnNlci5zY20sDQogIG1vZHVsZS9s YW5ndWFnZS9qb3kvY29tcGlsZS10cmVlLWlsLnNjbSwgbW9kdWxlL2xhbmd1YWdlL2pveS9zcGVj LnNjbSwNCiAgbW9kdWxlL2xhbmd1YWdlL2pveS9wcmltaXRpdmVzLnNjbSwgbW9kdWxlL2xhbmd1 YWdlL2pveS9ldmFsLnNjbSwNCiAgbW9kdWxlL2xhbmd1YWdlL2pveS9iYXNlLmpveSwgbW9kdWxl L2xhbmd1YWdlL2pveS90ZXN0cy9pbmljaGVjay5qb3ksDQogIG1vZHVsZS9sYW5ndWFnZS9qb3kv dGVzdHMvdGVzdC1iYXNlLmpveSwNCiAgbW9kdWxlL2xhbmd1YWdlL2pveS9qb3ktbW9kZS5lbDog TmV3IGZpbGVzLg0KLS0tDQogbW9kdWxlL2xhbmd1YWdlL2pveS9iYXNlLmpveSAgICAgICAgICAg IHwgMjY5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogbW9kdWxlL2xhbmd1YWdl L2pveS9jb21waWxlLXRyZWUtaWwuc2NtIHwgIDgxICsrKysrKysrKysNCiBtb2R1bGUvbGFuZ3Vh Z2Uvam95L2V2YWwuc2NtICAgICAgICAgICAgfCAgMjkgKysrKw0KIG1vZHVsZS9sYW5ndWFnZS9q b3kvam95LW1vZGUuZWwgICAgICAgICB8ICA3NCArKysrKysrKysNCiBtb2R1bGUvbGFuZ3VhZ2Uv am95L2xleGVyLnNjbSAgICAgICAgICAgfCAyNTUgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrDQogbW9kdWxlL2xhbmd1YWdlL2pveS9wYXJzZXIuc2NtICAgICAgICAgIHwgMTQ4ICsrKysr KysrKysrKysrKysrKw0KIG1vZHVsZS9sYW5ndWFnZS9qb3kvcHJpbWl0aXZlcy5zY20gICAgICB8 IDE0OCArKysrKysrKysrKysrKysrKysNCiBtb2R1bGUvbGFuZ3VhZ2Uvam95L3NwZWMuc2NtICAg ICAgICAgICAgfCAgMTggKysrDQogbW9kdWxlL2xhbmd1YWdlL2pveS90ZXN0cy9pbmljaGVjay5q b3kgIHwgIDUyICsrKysrKw0KIG1vZHVsZS9sYW5ndWFnZS9qb3kvdGVzdHMvdGVzdC1iYXNlLmpv eSB8IDE5NyArKysrKysrKysrKysrKysrKysrKysrKw0KIDEwIGZpbGVzIGNoYW5nZWQsIDEyNzEg aW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBtb2R1bGUvbGFuZ3VhZ2Uvam95L2Jh c2Uuam95DQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1vZHVsZS9sYW5ndWFnZS9qb3kvY29tcGlsZS10 cmVlLWlsLnNjbQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBtb2R1bGUvbGFuZ3VhZ2Uvam95L2V2YWwu c2NtDQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1vZHVsZS9sYW5ndWFnZS9qb3kvam95LW1vZGUuZWwN CiBjcmVhdGUgbW9kZSAxMDA2NDQgbW9kdWxlL2xhbmd1YWdlL2pveS9sZXhlci5zY20NCiBjcmVh dGUgbW9kZSAxMDA2NDQgbW9kdWxlL2xhbmd1YWdlL2pveS9wYXJzZXIuc2NtDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IG1vZHVsZS9sYW5ndWFnZS9qb3kvcHJpbWl0aXZlcy5zY20NCiBjcmVhdGUgbW9k ZSAxMDA2NDQgbW9kdWxlL2xhbmd1YWdlL2pveS9zcGVjLnNjbQ0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBtb2R1bGUvbGFuZ3VhZ2Uvam95L3Rlc3RzL2luaWNoZWNrLmpveQ0KIGNyZWF0ZSBtb2RlIDEw MDY0NCBtb2R1bGUvbGFuZ3VhZ2Uvam95L3Rlc3RzL3Rlc3QtYmFzZS5qb3kNCg0KZGlmZiAtLWdp dCBhL21vZHVsZS9sYW5ndWFnZS9qb3kvYmFzZS5qb3kgYi9tb2R1bGUvbGFuZ3VhZ2Uvam95L2Jh c2Uuam95DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMjI2MDk5Mw0KLS0t IC9kZXYvbnVsbA0KKysrIGIvbW9kdWxlL2xhbmd1YWdlL2pveS9iYXNlLmpveQ0KQEAgLTAsMCAr MSwyNjkgQEANCisoKiBiYXNlLmpveSAtLSBiYXNpYyBvcGVyYXRvcnMgYW5kIGNvbWJpbmF0b3Jz IGZvciBKb3kuDQorDQorICAgVmFyaW91cyB1c2VmdWwgb3BlcmF0b3JzIGFuZCBjb21iaW5hdG9y cyB3cml0dGVuIGluIHRlcm1zIG9mIEpveQ0KKyAgIHByaW1pdGl2ZXMuDQorDQorICAgQ29weXJp Z2h0IMKpIDIwMTYgRXJpYyBCYXZpZXIgPGJhdmllckBtZW1iZXIuZnNmLm9yZz4NCisNCisgICBU aGlzIHNvdXJjZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYw0KKyAgIExpY2Vuc2UsIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4NCisqKQ0KKw0KK0RFRklORQ0KKw0KKygqID09PT09IFN0YWNrIG1hbmlw dWxhdGlvbiBvcGVyYXRvcnMgPT09PT0gKikNCisNCisgICAgbmV3c3RhY2sgPT0gW10gdW5zdGFj ayA7DQorICAgIGR1cDIgICAgID09IGR1cCBbW2R1cF0gZGlwIHN3YXBdIGRpcCA7DQorICAgIHJv bGx1cCAgID09IHN3YXAgW3N3YXBdIGRpcCA7ICMgW1MgfCB4IHkgel0gPT4gW1MgfCB6IHggeV0N CisgICAgcm9sbGRvd24gPT0gW3N3YXBdIGRpcCBzd2FwIDsgIyBbUyB8IHggeSB6XSA9PiBbUyB8 IHkgeiB4XQ0KKyAgICByb3RhdGUgICA9PSByb2xsdXAgc3dhcCA7ICAgICAjIFtTIHwgeCB5IHpd ID0+IFtTIHwgeiB5IHhdDQorICAgIHBvcGQgICAgID09IFtwb3BdIGRpcCA7DQorICAgIGR1cGQg ICAgID09IFtkdXBdIGRpcCA7DQorICAgIHN3YXBkICAgID09IFtzd2FwXSBkaXAgOw0KKyAgICBw b3AyICAgICA9PSBwb3AgcG9wIDsNCisgICAgcG9wb3AgICAgPT0gcG9wMiA7DQorDQorKCogPT09 PT0gR2VuZXJhbCBjb21iaW5hdG9ycyA9PT09PSAqKQ0KKyAgICAoKiBXZSBjb3VsZCB1c2UgJ2R1 cCBkaXAgcG9wJyB0byBkZWZpbmUgaSBhcyBleG1wbGFpbmVkIGluDQorICAgICAgICJNYXRoZW1h dGljYWwgRm91bmRhdGlvbiBvZiBKb3kiLCBidXQgaXQgaXMgbm90IGVmZmljaWVudA0KKyAgICAg ICBhcyB0aGUgc3RyYWlnaGZvcndhcmQgZGVmaW5pdGlvbi4gKikNCisgICAgaSAgICAgICAgPT0g c3RhY2sgY2RyICBzd2FwIGluZnJhIHVuc3RhY2sgOw0KKyAgICBkaXAgICAgICA9PSBzdGFjayBj ZGRyIHN3YXAgaW5mcmEgY29ucyB1bnN0YWNrIDsNCisgICAgZGlwZCAgICAgPT0gW2RpcF0gY29u cyBkaXAgOw0KKyAgICBkaXBkZCAgICA9PSBbZGlwZF0gY29ucyBkaXAgOw0KKyAgICBudWxsYXJ5 ICA9PSBzdGFjayBjZHIgc3dhcCBpbmZyYSBjYXIgOw0KKyAgICB1bmFyeSAgICA9PSBzdGFjayBj ZHIgc3dhcCBpbmZyYSBjYXIgcG9wZCA7DQorICAgIGJyYW5jaCAgID09IGNob2ljZSBpIDsNCisg ICAgaWZ0ZSAgICAgPT0gW1tzdGFja10gZGlwIGluZnJhIGNhcl0gZGlwZCBicmFuY2ggOw0KKyAg ICBhcHAxICAgICA9PSBpIDsNCisgICAgYXBwMiAgICAgPT0gZHVwIHJvbGx1cCBpIFtpXSBkaXAg Ow0KKyAgICBhcHAzICAgICA9PSBkdXAgcm9sbHVwIGkgW2FwcDJdIGRpcCA7DQorICAgIGkyICAg ICAgID09IFtkaXBdIGRpcCBpIDsNCisgICAgc2h1bnQgICAgPT0gW3N3b25zXSBzdGVwIDsgIyBT ZWUgbGl0ZXJhdHVyZSBmb3IgZGVzY3JpcHRpb24NCisgICAgKCogVGhlIGRlZmluaXRpb24gJ2Ig PT0gY29uY2F0IGknIGlzIGVsZWdhbnQsIGJ1dCBpdCBpcyBhbHNvDQorICAgICAgIGNvc3RseSAo SSB0aGluaz8gVE9ETzogY2hlY2spLiAqKQ0KKyAgICBiID09IFtpXSBkaXAgaSA7DQorICAgIGNs ZWF2ZSA9PSBbbnVsbGFyeV0gZGlwIHN3YXAgW251bGxhcnldIGRpcCBzd2FwIDsNCisgICAgayA9 PSBbcG9wXSBkaXAgaSA7DQorICAgIHcgPT0gW2R1cF0gZGlwIGkgOw0KKyAgICBjID09IFtzd2Fw XSBkaXAgaSA7DQorDQorICAgICgqIFtTIHwgTCBbUF1dIDogU3RlcCB0aHJvdWdoIHRoZSBsaXN0 IEwsIHVuY29uc2luZyB0aGUgZmlyc3QNCisgICAgICAgZWxlbWVudCwgcGxhY2luZyBpdCBvbiB0 aGUgdG9wIFMgYW5kIGV4ZWN1dGluZyB0aGUgcXVvdGVkDQorICAgICAgIHByb2dyYW0gUC4gKikN CisgICAgc3RlcCA9PQ0KKyAgICAgICAgW3BvcCBudWxsXQ0KKyAgICAgICAgW3BvcCBwb3BdDQor ICAgICAgICBbW3VuY29uc10gZGlwIGR1cCBkaXBkXQ0KKyAgICAgICAgdGFpbHJlYyA7DQorDQor ICAgICgqIFtTIHwgSSBbUF1dIDo6IEV4ZWN1dGUgcXVvdGVkIHByb2dyYW0gUCBJIHRpbWVzLiAq KQ0KKyAgICB0aW1lcyA9PQ0KKyAgICAgICAgc3dhcA0KKyAgICAgICAgWzAgPD1dDQorICAgICAg ICBbcG9wIHBvcF0NCisgICAgICAgIFtwcmVkIFtkdXAgZGlwXSBkaXBdDQorICAgICAgICB0YWls cmVjIDsNCisNCisoKiA9PT09PSBMaXN0IG9wZXJhdG9ycyA9PT09PSAqKQ0KKyAgICBjYXIgICAg ICA9PSB1bmNvbnMgcG9wIDsNCisgICAgY2RyICAgICAgPT0gdW5zd29ucyBwb3AgOw0KKyAgICBj ZGRyICAgICA9PSBjZHIgIGNkciA7DQorICAgIGNhZHIgICAgID09IGNkciAgY2FyIDsNCisgICAg Y2FkZHIgICAgPT0gY2RkciBjYXIgOw0KKyAgICBmaXJzdCAgICA9PSBjYXIgOw0KKyAgICBzZWNv bmQgICA9PSBjYWRyIDsNCisgICAgdGhpcmQgICAgPT0gY2FkZHIgOw0KKyAgICByZXN0ICAgICA9 PSBjZHIgOw0KKyAgICBsZWFmICAgICA9PSBsaXN0IG5vdCA7DQorICAgIHF1b3RlICAgID09IFtd IGNvbnMgOw0KKyAgICB1bnBhaXIgICA9PSB1bmNvbnMgdW5jb25zIHBvcCA7DQorICAgIHBhaXJs aXN0ID09IFtdIGNvbnMgY29ucyA7DQorICAgIGNvbmNhdCAgID09IHN3YXAgc3dvbmNhdCA7DQor ICAgIHN3b25jYXQgID09IHJldmVyc2Ugc2h1bnQgOw0KKyAgICBzd29ucyAgICA9PSBzd2FwIGNv bnMgOw0KKyAgICB1bnN3b25zICA9PSB1bmNvbnMgc3dhcCA7DQorICAgIG51bGwgICAgID09IFts aXN0XSBbW10gPV0gWzAgPV0gaWZ0ZSA7DQorICAgIG51bGxkICAgID09IFtudWxsXSBkaXAgOw0K KyAgICBjb25zZCAgICA9PSBbY29uc10gZGlwIDsNCisgICAgc3dvbnNkICAgPT0gW3N3b25zXSBk aXAgOw0KKyAgICB1bmNvbnNkICA9PSBbdW5jb25zXSBkaXAgOw0KKyAgICB1bnN3b25zZCA9PSBb dW5zd29uc10gZGlwIHVuc3dvbnMgc3dhcGQgOw0KKyAgICBudWxsMiAgICA9PSBudWxsZCBudWxs IG9yIDsNCisgICAgY29uczIgICAgPT0gc3dhcGQgY29ucyBjb25zZCA7DQorICAgIHVuY29uczIg ID09IHVuY29uc2QgdW5jb25zIHN3YXBkIDsNCisgICAgc3dvbnMyICAgPT0gc3dhcGQgc3dvbnMg c3dvbnNkIDsNCisgICAgemlwID09DQorICAgICAgICBbbnVsbDJdDQorICAgICAgICBbcG9wIHBv cCBbXV0NCisgICAgICAgIFt1bmNvbnMyXQ0KKyAgICAgICAgW1twYWlybGlzdF0gZGlwIGNvbnNd DQorICAgICAgICBsaW5yZWMgOw0KKyAgICBzdW0gICAgID09IDAgc3dhcCBbKyAgICAgICBdIHN0 ZXAgOw0KKyAgICBwcm9kdWN0ID09IDEgc3dhcCBbKiAgICAgICBdIHN0ZXAgOw0KKyAgICBzaXpl ICAgID09IDAgc3dhcCBbcG9wIHN1Y2NdIHN0ZXAgOw0KKyAgICBzaXplMiAgID09IDAgc3dhcCBb c2l6ZSArICBdIHN0ZXAgOyAjIHR3byBsZXZlbHMgb2YgbmVzdGluZw0KKw0KKyAgICAoKiByZXZl cnNlIHRoZSBhZ2dyZWdhdGUgb24gdG9wIG9mIHRoZSBzdGFjayAqKQ0KKyAgICByZXZlcnNlID09 IFtdIHN3YXAgW3N3b25zXSBzdGVwIDsNCisNCisgICAgKCogW1MgfCBMIFYgT10gPT4gW1MgfCBW J10sIHdoZXJlIEwgaXMgYSBsaXN0LCBWIGlzIGFuIGluaXRpYWwNCisgICAgICAgdmFsdWUsIGFu ZCBPIGlzIGEgcXVvdGVkIGJpbmFyeSBvcGVyYXRvci4gKikNCisgICAgZm9sZCA9PSBzd2FwZCBz dGVwIDsNCisNCisgICAgKCogW1MgfCBMIFBdID0+IFtTIHwgQl0sIHdoZXJlIEIgaXMgdHJ1ZSBp ZiBhcHBseWluZyB0aGUgcHJlZGljYXRlDQorICAgICAgIFAgdG8gZWFjaCBlbGVtZW50IG9mIEwg cHJvZHVjZXMgdHJ1ZSwgb3RoZXJ3aXNlIGZhbHNlLiAgSXQgZG9lcw0KKyAgICAgICBub3Qgc2hv cnQtY2lyY3VpdC4gKikNCisgICAgZXZlcnkgPT0gW2kgYW5kXSBjb25zIHRydWUgZm9sZCA7DQor ICAgIGFsbCAgID09IGV2ZXJ5IDsgICAgICAgICAgICAjIHJlZmVyZW5jZSBuYW1lDQorDQorICAg ICgqIFtTIHwgTCBQXSA9PiBbUyB8IEJdLCB3aGVyZSBCIGlzIHRydWUgaWYgYXBwbHlpbmcgdGhl IHByZWRpY2F0ZQ0KKyAgICAgICBQIHRvIGFueSBlbGVtZW50IG9mIEwgcHJvZHVjZXMgdHJ1ZSwg b3RoZXJ3aXNlIGZhbHNlLiAgSXQgZG9lcw0KKyAgICAgICBub3Qgc2hvcnQtY2lyY3VpdC4gKikN CisgICAgYW55ICAgPT0gW2kgb3JdIGNvbnMgZmFsc2UgZm9sZCA7DQorICAgIHNvbWUgID09IGFu eSA7ICAgICAgICAgICAgICAjIHJlZmVyZW5jZSBuYW1lDQorDQorICAgICgqIFRyZWF0IGVhY2gg ZWxlbWVudCBvZiBhbiBhZ2dyZWdhdGUgYXMgYSBuZXcgc3RhY2ssIGFuZCBhcHBseQ0KKyAgICAg ICB0aGUgZ2l2ZW4gdW5hcnkgb3BlcmF0b3IgdG8gaXQsIHJlc3VsdGluZyBpbiBhIG5ldyBhZ2dy ZWdhdGUNCisgICAgICAgb2YgdGhlIHJlc3VsdHMgKikNCisgICAgbWFwID09DQorICAgICAgICBb XSAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWxpemUgYWNjdW11bGF0b3INCisgICAgICAg IFtwb3AgcG9wIG51bGxdDQorICAgICAgICBbcm9sbHVwIHBvcCBwb3BdDQorICAgICAgICBbW3Vu c3dvbnMgW10gY29uc10gZGlwZCAjIHB1bGwgb3V0IGZpcnN0IGFuZCBjcmVhdGUgbmV3IGxpc3QN CisgICAgICAgICBkdXBkIFtpbmZyYV0gZGlwZCAgICAgICMgZXhlYyBjb3B5IG9mIHF1b3RhdGlv biBvbiB0aGlzDQorICAgICAgICAgcm9sbGRvd24gY2FyIHN3b25zXSAgICAjIGFkZCBpdCB0byBh Y2N1bXVsYXRvcg0KKyAgICAgICAgdGFpbHJlYw0KKyAgICAgICAgcmV2ZXJzZSA7DQorDQorICAg ICgqIFtTIHwgTCBMJyBPXSA9PiBbUyB8IEwnJ10gd2hlcmUgTCcnIGlzIHRoZSBsaXN0IHJlc3Vs dGluZyBmcm9tDQorICAgICAgIGFwcGx5aW5nIHRoZSBiaW5hcnkgb3BlcmF0b3IgTyB0byByZXNw ZWN0aXZlIHBhaXJzIG9mIGVsZW1lbnRzDQorICAgICAgIGZyb20gTCBhbmQgTCcuICBMJycgaXMg dGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzaG9ydGVzdCBvZiBMIGFuZA0KKyAgICAgICBMJy4gKikN CisgICAgbWFwMiA9PQ0KKyAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFs aXplIGFjY3VtdWxhdG9yDQorICAgICAgICBbcG9wIHBvcCBudWxsMl0NCisgICAgICAgIFtbcG9w IHBvcCBwb3BdIGRpcF0gICAgICAjIFJlbW92ZSBvcGVyYXRvciwgTCwgYW5kIEwnDQorICAgICAg ICBbW1t1bnN3b25zXSBkaXBkIHN3YXBkICAjIHB1bGwgb3V0IGZpcnN0IG9mIEwNCisgICAgICAg ICAgW3Vuc3dvbnMgW10gY29uc10gZGlwZCAjIHB1bGwgb3V0IGZpcnN0IG9mIEwnDQorICAgICAg ICAgIHN3b25zZCAgICAgICAgICAgICAgICAgIyBtYWtlIGEgbGlzdCBvZiB0aGUgdHdvDQorICAg ICAgICAgIGR1cCBbaW5mcmFdIGRpcF0gICAgICAgIyBleGVjIGNvcHkgb2YgcXVvdGF0aW9uIG9u IHRoaXMNCisgICAgICAgICBkaXANCisgICAgICAgICByb2xsZG93biBjYXIgc3dvbnNdICAgICMg YWRkIGl0IHRvIGFjY3VtdWxhdG9yDQorICAgICAgICB0YWlscmVjDQorICAgICAgICByZXZlcnNl IDsNCisNCisgICAgKCogW1MgfCBMIEwnXSA9PiBbUyB8IEJdLCB3aGVyZSBCIGlzIHRydWUgaWYg ZXZlcnkgZWxlbWVudCBvZiBsaXN0DQorICAgICAgIEwgY29tcGFyZXMgZXF1YWwgdG8gZWFjaCBy ZXNwZWN0aXZlIGVsZW1lbnQgb2YgTCcsIG90aGVyd2lzZQ0KKyAgICAgICBmYWxzZS4gKikNCisg ICAgZXF1YWwgPT0NCisgICAgICBbW3NpemVdIGFwcDIgPV0NCisgICAgICBbIHRydWUgW1tbbGlz dF0gYXBwMl0gW2VxdWFsXSBbPV0gaWZ0ZV0gZm9sZCBdDQorICAgICAgW2ZhbHNlXQ0KKyAgICAg IGlmdGUgOw0KKw0KKyAgICAoKiBbUyB8IEwgSV0gLT4gW1MgfCBMJ10gd2hlcmUgTCcgaXMgTCB3 aXRoIEkgZWxlbWVudHMgcmVtb3ZlZA0KKyAgICAgICBmcm9tIHRoZSBmcm9udC4gKikNCisgICAg ZHJvcCA9PQ0KKyAgICAgICAgWzAgPD1dDQorICAgICAgICBbcG9wXQ0KKyAgICAgICAgW3ByZWQg W2Nkcl0gZGlwXQ0KKyAgICAgICAgdGFpbHJlYyA7DQorICAgICgqIFtTIHwgTCBJXSAtPiBbUyB8 IEwnXSB3aGVyZSBMJyBpcyB0aGUgZmlyc3QgSSBpdGVtcyBvZiBMLiAqKQ0KKyAgICB0YWtlID09 DQorICAgICAgICBbXSByb2xsdXAgICAgICAgICAgICAgICAjIGluaXRpYWxpemUgYWNjdW11bGF0 b3INCisgICAgICAgIFswIDw9XQ0KKyAgICAgICAgW3BvcCBwb3AgcmV2ZXJzZV0NCisgICAgICAg IFtwcmVkIFt1bmNvbnNdIGRpcCBbc3dvbnNdIGRpcGRdDQorICAgICAgICB0YWlscmVjIDsNCisN CisgICAgKCogZm9sZCA9PSBzd2FwZCBzdGVwIDsgKikNCisgICAgYXQgPT0gZHJvcCBjYXIgOw0K KyAgICBvZiA9PSBzd2FwIGF0IDsNCisNCisNCisoKiA9PT09PSBCb29sZWFuIGFuZCBNYXRoZW1h dGljIG9wZXJhdG9ycyA9PT09PSAqKQ0KKyAgICBwcmVkICA9PSAxIC0gOw0KKyAgICBzdWNjICA9 PSAxICsgOw0KKyAgICB0cnVlICA9PSBbdHJ1ZV0gY2FyIDsNCisgICAgZmFsc2UgPT0gW2ZhbHNl XSBjYXIgOw0KKyAgICA+PSAgICA9PSBkdXAyID4gWz1dIGRpcCBvciA7DQorICAgIDw9ICAgID09 IGR1cDIgPCBbPV0gZGlwIG9yIDsNCisgICAgIT0gICAgPT0gPSBub3QgOw0KKyAgICBvciAgICA9 PSBbcG9wIHRydWVdIFtdIGJyYW5jaCA7DQorICAgIGFuZCAgID09IFtdIFtwb3AgZmFsc2VdIGJy YW5jaCA7DQorICAgIG5vdCAgID09IGZhbHNlIHRydWUgY2hvaWNlIDsNCisgICAgeG9yICAgPT0g ZHVwMiBvciByb2xsdXAgYW5kIG5vdCBhbmQgOw0KKyAgICBtYXggICA9PSBkdXAyID4gcm9sbHVw IGNob2ljZSA7DQorICAgIG1pbiAgID09IGR1cDIgPCByb2xsdXAgY2hvaWNlIDsNCisgICAgc2ln biAgPT0gWzAgPl0gWzFdIFtbMCA8XSBbLTFdIFswXSBpZnRlXSBpZnRlIDsNCisgICAgKCogW1Mg fCBZIFhdIC0+IFtTIHwgRCBNXSB3aGVyZSBZID0gRCpYICsgTSAqKQ0KKyAgICBkaXZtb2QgPT0N CisgICAgICAgIFswXSByb2xsdXAgICAgICAgICAgICAgICMgaW5pdGlhbGl6ZSBtYXJrZXIgbGlz dA0KKyAgICAgICAgWzxdICAgICAgICAgICAgICAgICAgICAgIyBXaGVuIFkgPCBYDQorICAgICAg ICBbcG9wIHN3YXBdICAgICAgICAgICAgICAjIFJlbW92ZSBYLCBicmluZyBtYXJrZXJzIHRvIGZy b250DQorICAgICAgICBbZHVwIFstXSBkaXAgICAgICAgICAgICAjIFJlY3Vyc2Ugd2l0aCBZPC1Z LVggLi4uDQorICAgICAgICAgWzEgc3dvbnNdIGRpcGRdICAgICAgICAjICBhbmQgbWFyaw0KKyAg ICAgICAgW1srXSBpbmZyYV0gICAgICAgICAgICAgIyBBY2N1bXVsYXRlIGRpdmlzaW9uIG1hcmtl cnMNCisgICAgICAgIGxpbnJlYyAgICAgICAgICAgICAgICAgICMgW1MgfCBNIFtEXV0NCisgICAg ICAgIGNhciBzd2FwIDsgICAgICAgICAgICAgICMgW1MgfCBEIE1dDQorICAgIC8gPT0gZGl2bW9k IHBvcCA7DQorICAgICUgPT0gZGl2bW9kIHN3YXAgcG9wIDsNCisgICAgKiA9PSAgICAgICAgICAg ICAgICAgICAgICAgICMgV0FSTklORzogT25seSBmb3IgcG9zaXRpdmUgaW50ZWdlcnMNCisgICAg ICAgIGR1cDIgbWluIFttYXhdIGRpcCAgICAgICMgUHV0IHRoZSBsYXJnZXIgbnVtYmVyIG9uIHRv cA0KKyAgICAgICAgWzAgPV0NCisgICAgICAgIFtwb3AgcG9wIDBdDQorICAgICAgICBbcHJlZCBk dXBkXQ0KKyAgICAgICAgWytdDQorICAgICAgICBsaW5yZWMgOw0KKyAgICBleHAgPT0NCisgICAg ICAgIFswID1dDQorICAgICAgICBbcG9wIHBvcCAxXQ0KKyAgICAgICAgW3ByZWQgZHVwZF0NCisg ICAgICAgIFsqXQ0KKyAgICAgICAgbGlucmVjIDsNCisgICAgc3VtLXVwLXRvID09IFswID1dIFtw b3AgMF0gW2R1cCAxIC1dIFsrXSBsaW5yZWMgOw0KKyAgICBmYWN0ID09IFswID1dIFtwb3AgMV0g W2R1cCAxIC1dIFsqXSBsaW5yZWMgOw0KKw0KKygqID09PT09IFJlY3Vyc2lvbiBjb21iaW5hdG9y cyA9PT09PSAqKQ0KKyAgICAoKiBbUyB8IFtJfSBbVF0gW0UxXSBbRTJdXSAtIExpa2UgdGhlIGlm dGUgY29tYmluYXRvciBpdCBleGVjdXRlcw0KKyAgICAgICBJLCBhbmQgaWYgdGhhdCB5aWVsZHMg dHJ1ZSBpdCBleGVjdXRlcyBULiAgT3RoZXJ3aXNlIGl0DQorICAgICAgIGV4ZWN1dGVzIEUxLCB0 aGVuIGl0IHJlY3Vyc2VzIHdpdGggYWxsIDQgcGFydHMsIGFuZCBmaW5hbGx5IGl0DQorICAgICAg IGV4ZWN1dGVzIEUyLiAqKQ0KKyAgICAjIEZvciBleGFtcGxlOg0KKyAgICAjIGZhY3QgPT0NCisg ICAgIyAgIFswID1dDQorICAgICMgICBbcG9wIDFdDQorICAgICMgICBbZHVwIDEgLV0NCisgICAg IyAgIFsqXQ0KKyAgICAjICAgbGlucmVjIC4NCisgICAgIyBiZWNvbWVzOg0KKyAgICAjIGZhY3Qg PT0NCisgICAgIyAgIFsgW3BvcCAwID1dDQorICAgICMgICAgIFtwb3AgcG9wIDFdDQorICAgICMg ICAgIFsgW2R1cCAxIC1dIGRpcA0KKyAgICAjICAgICAgIGR1cCBpDQorICAgICMgICAgICAgKiBd DQorICAgICMgICAgIGlmdGUgXQ0KKyAgICAjICAgZHVwIGkgLg0KKyAgICBtYWtlLWxpbnJlYyA9 PQ0KKyAgICAgICAgW1tbcG9wXSBjYXIgc3dvbnNdIGFwcDJdIGRpcGQgIyBbW0UyXSBbRTFdIFtw b3AgVF0gW3BvcCBJXSB8IFNdDQorICAgICAgICBbaV0gY2FyIHN3b25zIFtkdXBdIGNhciBzd29u cyBbZGlwXSBjYXIgc3dvbnMgY29ucw0KKyAgICAgICAgW2lmdGVdIGNvbnMgY29ucyBjb25zICAg IyBbW2lmdGUgW1tFMV0gZGlwIGR1cCBpIEUyXSBbcG9wIFRdIFtwb3AgSV0gfCBTXQ0KKyAgICAg ICAgOw0KKyAgICBsaW5yZWMgPT0gbWFrZS1saW5yZWMgZHVwIGkgOw0KKw0KKyAgICBtYWtlLXRh aWxyZWMgPT0NCisgICAgICAgIFtbW3BvcF0gY2FyIHN3b25zXSBhcHAyXSBkaXANCisgICAgICAg IFtkaXAgZHVwIGldIGNvbnMNCisgICAgICAgIFtpZnRlXSBjb25zIGNvbnMgY29ucyA7DQorICAg IHRhaWxyZWMgPT0gbWFrZS10YWlscmVjIGR1cCBpIDsNCisNCisNCisoKiA9PT09PSBJTyBvcGVy YXRvcnMgPT09PT0gKikNCisgICAgbmV3bGluZSAgICA9PSAnXG4gcHV0Y2ggOw0KKyAgICBwdXRj aGFycyAgID09IFtwdXRjaF0gc3RlcCA7DQorICAgIHB1dHN0cmluZ3MgPT0gW3B1dGNoYXJzXSBz dGVwIDsNCisNCitFTkQNClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KZGlmZiAtLWdpdCBh L21vZHVsZS9sYW5ndWFnZS9qb3kvY29tcGlsZS10cmVlLWlsLnNjbSBiL21vZHVsZS9sYW5ndWFn ZS9qb3kvY29tcGlsZS10cmVlLWlsLnNjbQ0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAw MDAwMDAuLmE4OWUwZWMNCi0tLSAvZGV2L251bGwNCisrKyBiL21vZHVsZS9sYW5ndWFnZS9qb3kv Y29tcGlsZS10cmVlLWlsLnNjbQ0KQEAgLTAsMCArMSw4MSBAQA0KKzs7OyBjb21waWxlLXRyZWUt aWwuc2NtIC0tIGNvbXBpbGUgSm95IHRvIHRyZWUtaWwuDQorOzs7DQorOzs7IENvcHlyaWdodCDC qSAyMDE2IEVyaWMgQmF2aWVyIDxiYXZpZXJAbWVtYmVyLmZzZi5vcmc+DQorOzs7DQorOzs7IFRo aXMgc291cmNlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljDQorOzs7IExpY2Vuc2UsIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4NCisNCisoZGVmaW5lLW1vZHVsZSAobGFuZ3VhZ2Ugam95IGNvbXBpbGUt dHJlZS1pbCkNCisgICM6dXNlLW1vZHVsZSAobGFuZ3VhZ2UgdHJlZS1pbCkNCisgICM6dXNlLW1v ZHVsZSAoc3lzdGVtIGJhc2UgcG1hdGNoKQ0KKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMSkN CisgICM6ZXhwb3J0IChjb21waWxlLXRyZWUtaWwpKQ0KKw0KKyhkZWZpbmUgKGxvY2F0aW9uIHgp DQorICAoYW5kIChwYWlyPyB4KQ0KKyAgICAgICAobGV0ICgocHJvcHMgKHNvdXJjZS1wcm9wZXJ0 aWVzIHgpKSkNCisJIChhbmQgKG5vdCAobnVsbD8gcHJvcHMpKQ0KKyAgICAgICAgICAgICAgcHJv cHMpKSkpDQorDQorKGRlZmluZSAqZXZhbCogJyhsYW5ndWFnZSBqb3kgZXZhbCkpDQorDQorKGRl ZmluZSAoY29tcGlsZS1mYWN0b3IgZmFjdCkNCisgIChsZXQgKChsb2MgKGxvY2F0aW9uIGZhY3Qp KSkNCisgICAgKGNvbmQNCisgICAgICgobGlzdD8gZmFjdCkNCisgICAgICAobWFrZS1hcHBsaWNh dGlvbiBsb2MNCisJCQkobWFrZS1wcmltaXRpdmUtcmVmIGxvYyAnbGlzdCkNCisJCQkobWFwIGNv bXBpbGUtZmFjdG9yIGZhY3QpKSkNCisgICAgIChlbHNlDQorICAgICAgKG1ha2UtY29uc3QgbG9j IGZhY3QpKSkpKQ0KKw0KKyhkZWZpbmUgKGNvbXBpbGUtdGVybSB0ZXJtKQ0KKyAgKGxldCAoKGxv YyAobG9jYXRpb24gdGVybSkpKQ0KKyAgICAocG1hdGNoIHRlcm0NCisgICAgICAoKHRlcm0gLGZh Y3RvcnMpDQorICAgICAgIChtYWtlLWFwcGxpY2F0aW9uIGxvYw0KKwkJCSAobWFrZS1wcmltaXRp dmUtcmVmIGxvYyAnbGlzdCkNCisJCQkgKG1hcCBjb21waWxlLWZhY3RvciBmYWN0b3JzKSkpKSkp DQorDQorKGRlZmluZSAoY29tcGlsZS1kZWZpbml0aW9uIGRlZikNCisgIChsZXQgKChsb2MgKGxv Y2F0aW9uIGRlZikpKQ0KKyAgICAocG1hdGNoIGRlZg0KKyAgICAgICgocHVibGljICxuYW1lICx0 ZXJtKQ0KKyAgICAgICAobWFrZS10b3BsZXZlbC1kZWZpbmUgbG9jDQorCQkJICAgICBuYW1lDQor CQkJICAgICAoY29tcGlsZS10ZXJtIHRlcm0pKSkNCisgICAgICAoKHByaXZhdGUgLG5hbWUgLHRl cm0pCQk7VE9ETzogbWFrZSBwcml2YXRlIQ0KKyAgICAgICAobWFrZS10b3BsZXZlbC1kZWZpbmUg bG9jDQorCQkJICAgICBuYW1lDQorCQkJICAgICAoY29tcGlsZS10ZXJtIHRlcm0pKSkpKSkNCisN CisoZGVmaW5lIChjb21waWxlLWV4cHIgZXhwcikNCisgIChsZXQgKChsb2MgKGxvY2F0aW9uIGV4 cHIpKSkNCisgICAgKHBtYXRjaCBleHByDQorICAgICAgOzsgTGl0ZXJhbHMNCisgICAgICAoKHRl cm0gLGZhY3RvcnMpDQorICAgICAgIChtYWtlLWFwcGxpY2F0aW9uIGxvYw0KKwkJCSAobWFrZS1t b2R1bGUtcmVmIGxvYyAnKHNyZmkgc3JmaS0xKQ0KKwkJCQkJICAnZm9sZCAjdCkNCisJCQkgKGxp c3QNCisJCQkgIChtYWtlLW1vZHVsZS1yZWYgbG9jICpldmFsKiAnZXZhbCAjZikNCisJCQkgIDs7 IFRvcGxldmVsIHRlcm1zIGFyZSBleGVjdXRlZCB3aXRoIGFuIGVtcHR5DQorCQkJICA7OyBzdGFj ay4gIFRoaXMgYmVoYXZpb3IgZGV2aWF0ZXMgZnJvbSB0aGUNCisJCQkgIDs7IHJlZmVyZW5jZSBp bXBsZW1lbnRhdGlvbiwgYnV0IEkgZG9uJ3QNCisJCQkgIDs7IGJlbGlldmUgaXQgc3RyYXlzIGZy b20gdGhlIHNwaXJpdCBvZiBKb3kNCisJCQkgIDs7IG9yIGlzIHBhcnRpY3VsYXJseSBidXJkZW5z b21lLg0KKwkJCSAgKG1ha2UtY29uc3QgI2YgJygpKQ0KKwkJCSAgKGNvbXBpbGUtdGVybSBleHBy KSkpKQ0KKyAgICAgICgoZGVmaW5pdGlvbnMgLiAsZGVmcykNCisgICAgICAgKG1ha2Utc2VxdWVu Y2UgbG9jIChtYXAgY29tcGlsZS1kZWZpbml0aW9uIGRlZnMpKSkpKSkNCisNCisoZGVmaW5lIChw cm9jZXNzLW9wdGlvbnMhIG9wdHMpDQorICAjdCkNCisNCisoZGVmaW5lIChjb21waWxlLXRyZWUt aWwgZXhwciBlbnYgb3B0cykNCisgICh2YWx1ZXMNCisgICAoYmVnaW4NCisgICAgIChwcm9jZXNz LW9wdGlvbnMhIG9wdHMpDQorICAgICAoY29tcGlsZS1leHByIGV4cHIpKQ0KKyAgIGVudg0KKyAg IGVudikpDQpkaWZmIC0tZ2l0IGEvbW9kdWxlL2xhbmd1YWdlL2pveS9ldmFsLnNjbSBiL21vZHVs ZS9sYW5ndWFnZS9qb3kvZXZhbC5zY20NCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwLi4yNTZmOTg3DQotLS0gL2Rldi9udWxsDQorKysgYi9tb2R1bGUvbGFuZ3VhZ2Uvam95L2V2 YWwuc2NtDQpAQCAtMCwwICsxLDI5IEBADQorOzs7IGV2YWwuc2NtIC0tIEpveSBydW50aW1lLg0K Kzs7Ow0KKzs7OyBDb3B5cmlnaHQgwqkgMjAxNiBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5m c2Yub3JnPg0KKzs7Ow0KKzs7OyBUaGlzIHNvdXJjZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKzs7OyBMaWNlbnNlLCB2ZXJzaW9uIDMsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorKGRlZmluZS1tb2R1bGUg KGxhbmd1YWdlIGpveSBldmFsKQ0KKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMSkNCisgICM6 cmVwbGFjZSAoZXZhbCkpDQorDQorKGRlZmluZSAqcHJpbWl0aXZlcyogJyhsYW5ndWFnZSBqb3kg cHJpbWl0aXZlcykpDQorDQorKGRlZmluZSAoZXZhbCB4IFMpDQorICAiRXZhbHVhdGUgam95IHRl cm0gWCB3aXRoIHRoZSBzdGFjayBTLiINCisgIChjb25kDQorICAgKChzeW1ib2w/IHgpDQorICAg IChsZXQgKCh2IChvciAoYW5kPT4gKG1vZHVsZS12YXJpYWJsZQ0KKwkJCSAocmVzb2x2ZS1pbnRl cmZhY2UgKnByaW1pdGl2ZXMqKSB4KQ0KKwkJCXZhcmlhYmxlLXJlZikNCisJCSAobW9kdWxlLXJl ZiAoY3VycmVudC1tb2R1bGUpIHgpKSkpDQorICAgICAgKGlmIChwcm9jZWR1cmU/IHYpDQorICAg ICAgICAgIDs7IEpveSBwcmltaXRpdmVzIGFyZSBwcm9jZWR1cmVzIHRoYXQgbXVzdCBiZSBhcHBs aWVkDQorCSAgKGFwcGx5IHYgUykNCisgICAgICAgICAgOzsgVmFyaWFibGVzIGZyb20gdGhlICdE RUZJTkUgLi4uJyBzeW50YXggYXJlIGxpc3RzIG9mIGZhY3RvcnMNCisgICAgICAgICAgOzsgdG8g YmUgZXZhbHVhdGVkLg0KKwkgIChmb2xkIGV2YWwgUyB2KSkpKQ0KKyAgIChlbHNlDQorICAgIChj b25zIHggUykpKSkNCmRpZmYgLS1naXQgYS9tb2R1bGUvbGFuZ3VhZ2Uvam95L2pveS1tb2RlLmVs IGIvbW9kdWxlL2xhbmd1YWdlL2pveS9qb3ktbW9kZS5lbA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAuLmU0NzFhNWINCi0tLSAvZGV2L251bGwNCisrKyBiL21vZHVsZS9sYW5n dWFnZS9qb3kvam95LW1vZGUuZWwNCkBAIC0wLDAgKzEsNzQgQEANCis7Ozsgam95LW1vZGUuZWwg LS0tIG1ham9yIG1vZGUgZm9yIGVkaXRpbmcgSm95IHNvdXJjZS4NCis7OzsNCis7OzsgQ29weXJp Z2h0IMKpIDIwMTYgRXJpYyBCYXZpZXIgPGJhdmllckBtZW1iZXIuZnNmLm9yZz4NCis7OzsNCis7 OzsgVGhpcyBzb3VyY2UgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMNCis7OzsgTGljZW5zZSwgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKzs7OyBDb21tZW50YXJ5Og0KKw0KKzs7IC0gcHJvdmlk ZXMgc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgdGhlIHNtYWxsIG51bWJlciBvZiBwcmltaXRpdmUN Cis7OyAgIG9wZXJhdG9ycyBpbiBKb3ksIGFzIHdlbGwgYXMgZm9yIHRoZSBmdW5kYW1lbnRhbCBk YXRhdHlwZXMuDQorOzsNCis7OyBUT0RPOg0KKzs7IC0gY29tbWVudCBpbnNlcnRpb24vZGVsZXRp b24NCis7OyAtIGluZGVudGF0aW9uDQorOzsgLSBmdW5jdGlvbiBkb2N1bWVudGF0aW9uIGxvb2t1 cA0KKzs7IC0gZnVuY3Rpb24gdGVtcGxhdGUgaW5zZXJ0aW9uDQorDQorOzs7IENvZGU6DQorDQor KHNldHEgam95LWtleXdvcmRzICcoIkRFRklORSIgIlBVQkxJQyIgIlBSSVZBVEUiICJMSUJSQSIg IkhJREUiICJFTkQiICJJTiIpKQ0KKyhzZXRxIGpveS1wcmltaXRpdmVzICcoInVuc3RhY2siICJk aXNwbGF5IiAiaW5jbHVkZSIgImxvZ2ljYWwiICJpbnRlZ2VyIg0KKwkJICAgICAgICJzdHJpbmci ICJjaG9pY2UiICJ1bmNvbnMiICJpbmZyYSIgInN0YWNrIiAicHV0Y2giDQorCQkgICAgICAgInN3 YXAiICJjb25zIiAiY2hhciIgImxpc3QiICJkdXAiICJwb3AiKSkNCisNCisoc2V0cSBqb3kta2V5 d29yZHMtcmVnZXhwIChyZWdleHAtb3B0IGpveS1rZXl3b3JkcyAnd29yZHMpKQ0KKyhzZXRxIGpv eS1wcmltaXRpdmVzLXJlZ2V4cCAocmVnZXhwLW9wdCBqb3ktcHJpbWl0aXZlcyAnd29yZHMpKQ0K Kw0KKyhzZXRxIGpveS1mb250LWxvY2sta2V5d29yZHMNCisgICAgICBgKCI9PSIgIjsiDQorCSgi XFwoXFwuXFwpW15bOmRpZ2l0Ol1dIiAxKQ0KKwkoIlxcKFtbOmdyYXBoOl1dK1xcKVtbOmJsYW5r Ol1dKj09IiAxIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpDQorCSgiJ1xcXFw/W1s6YWxu dW06XV1cXChbWzpkaWdpdDpdXVtbOmRpZ2l0Ol1dXFwpPyIgLiBmb250LWxvY2stdHlwZS1mYWNl KQ0KKwkoLGpveS1rZXl3b3Jkcy1yZWdleHAgLiBmb250LWxvY2sta2V5d29yZC1mYWNlKQ0KKwko LGpveS1wcmltaXRpdmVzLXJlZ2V4cCAuIGZvbnQtbG9jay1idWlsdGluLWZhY2UpKSkNCisNCiso ZGVmdmFyIGpveS1zeW50YXgtdGFibGUgbmlsICJTeW50YXggdGFibGUgZm9yIGBqb3ktbW9kZScu IikNCisoc2V0cSBqb3ktc3ludGF4LXRhYmxlDQorICAgICAgKGxldCAoKHN5blRhYmxlIChtYWtl LXN5bnRheC10YWJsZSkpKQ0KKwk7OyBiYXNoIHN0eWxlIGNvbW1lbnQ6ICIjIC4uLiINCisJKG1v ZGlmeS1zeW50YXgtZW50cnkgPyMgIjwgYiIgc3luVGFibGUpDQorCShtb2RpZnktc3ludGF4LWVu dHJ5ID9cbiAiPiBiIiBzeW5UYWJsZSkNCisNCisJOzsgTWF0aGVtYXRpYyBzdHlsZSBjb21tZW50 OiAiKCogLi4uICopIg0KKwkobW9kaWZ5LXN5bnRheC1lbnRyeSA/XCggIi4gMSIgc3luVGFibGUp DQorCShtb2RpZnktc3ludGF4LWVudHJ5ID9cKSAiLiA0IiBzeW5UYWJsZSkNCisJKG1vZGlmeS1z eW50YXgtZW50cnkgPyogIi4gMjMiIHN5blRhYmxlKQ0KKw0KKwlzeW5UYWJsZSkpDQorDQorOzs7 IyMjYXV0b2xvYWQNCisoZGVmaW5lLWRlcml2ZWQtbW9kZSBqb3ktbW9kZSBmdW5kYW1lbnRhbC1t b2RlDQorICAiSm95IG1vZGUiDQorICAiTWFqb3IgbW9kZSBmb3IgZWRpdGluZyB0aGUgcHVyZWx5 IGZ1bmN0aW9uYWwsDQorICBjb25jYXRlbmF0aXZlIHByb2dyYW1taW5nIGxhbmd1YWdlIEpveS4i DQorICA6c3ludGF4LXRhYmxlIGpveS1zeW50YXgtdGFibGUNCisNCisgIChzZXRxIGZvbnQtbG9j ay1kZWZhdWx0cyAnKGpveS1mb250LWxvY2sta2V5d29yZHMpKQ0KKyAgKHNldHEgbW9kZS1uYW1l ICJqb3kiKSkNCisNCis7OyBjbGVhciBtZW1vcnkuIG5vIGxvbmdlciBuZWVkZWQNCisoc2V0cSBq b3kta2V5d29yZHMgbmlsKQ0KKyhzZXRxIGpveS1wcmltaXRpdmVzIG5pbCkNCisoc2V0cSBqb3kt a2V5d29yZHMtcmVnZXhwIG5pbCkNCisoc2V0cSBqb3ktcHJpbWl0aXZlcy1yZWdleHAgbmlsKQ0K Kw0KKzs7IGFkZCB0aGUgbW9kZSB0byB0aGUgYGZlYXR1cmVzJyBsaXN0DQorKHByb3ZpZGUgJ2pv eS1tb2RlKQ0KKw0KKzs7IExvY2FsIFZhcmlhYmxlczoNCis7OyBjb2Rpbmc6IHV0Zi04DQorOzsg RW5kOg0KKw0KKzs7OyBqb3ktbW9kZS5lbCBlbmRzIGhlcmUNCmRpZmYgLS1naXQgYS9tb2R1bGUv bGFuZ3VhZ2Uvam95L2xleGVyLnNjbSBiL21vZHVsZS9sYW5ndWFnZS9qb3kvbGV4ZXIuc2NtDQpu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNDk0ZjcxYg0KLS0tIC9kZXYvbnVs bA0KKysrIGIvbW9kdWxlL2xhbmd1YWdlL2pveS9sZXhlci5zY20NCkBAIC0wLDAgKzEsMjU1IEBA DQorOzs7IGxleGVyLnNjbSAtLSBsZXhlciBmb3IgSm95Lg0KKzs7Ow0KKzs7OyBDb3B5cmlnaHQg wqkgMjAxNiBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPg0KKzs7Ow0KKzs7OyBU aGlzIHNvdXJjZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYw0KKzs7OyBMaWNlbnNlLCB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uDQorDQorOzs7IENvZGU6DQorDQorKGRlZmluZS1tb2R1bGUgKGxhbmd1 YWdlIGpveSBsZXhlcikNCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgcmRlbGltKQ0KKyAgIzpleHBv cnQgKGdldC1sZXhlcikpDQorDQorOzs7IFNlZSBqMDlpbXAuaHRtbCBmb3IgYSBtb3JlIHRob3Jv dWdoIGRlc2NyaXB0aW9uIG9mIHRoYXQgcHJvdG90eXBlIG9mDQorOzs7IGEgSm95IGludGVycHJl dGVyLg0KKzs7Ow0KKzs7OyBUaGVyZSBpdCBzYXlzIHRoYXQgam95IGludGVycHJldGVyIHN1cHBv cnRzIGxpbmVzIHN0YXJ0aW5nIHdpdGggJyQnLA0KKzs7OyB3aGljaCBhcmUgcHJvY2Vzc2VkIGJ5 IHRoZSBjb21tYW5kIHNoZWxsLiAgSW50ZXJlc3RpbmcuDQorDQorKGRlZmluZSAqa2V5d29yZHMq DQorICAnKCgiPT0iIC4gPT0pDQorICAgICgiTU9EVUxFIiAuIG1vZHVsZSkNCisgICAgKCJQUklW QVRFIiAuIHByaXZhdGUpDQorICAgICgiUFVCTElDIiAuIHB1YmxpYykNCisgICAgKCJERUZJTkUi IC4gZGVmaW5lKQ0KKyAgICAoIkVORCIgLiBlbmQpKSkNCisNCisoZGVmaW5lIGludGVnZXItcmVn ZXggKG1ha2UtcmVnZXhwICJeWystXT9bMC05XSskIikpDQorDQorKGRlZmluZSBmbG9hdC1yZWdl eA0KKyAgKG1ha2UtcmVnZXhwDQorICAgIl5bKy1dPyhbMC05XStcXC4/WzAtOV0qfFswLTldKlxc Lj9bMC05XSspKGVbKy1dP1swLTldKyk/JCIpKQ0KKw0KKyhkZWZpbmUgc3ltYm9sLWFsbG93ZWQt Y2hhcmFjdGVycw0KKyAgKGNoYXItc2V0LWRpZmZlcmVuY2UNCisgICA7OyBXZSBhbGxvdyAjXC4g YmVjYXVzZSBpdCBpcyBoYW5kbGVkIGVsc2V3aGVyZQ0KKyAgIGNoYXItc2V0OmdyYXBoaWMgKHN0 cmluZy0+Y2hhci1zZXQgIltde307IikpKQ0KKw0KKyhkZWZpbmUgKGdldC1zeW1ib2wtb3ItbnVt YmVyIHBvcnQpDQorICAobGV0IGl0ZXJhdGUgKChyZXN1bHQtY2hhcnMgJygpKQ0KKwkJKG5vbi1u dW1lcmljPyAjZikpDQorICAgIChsZXQqICgoYyAocmVhZC1jaGFyIHBvcnQpKQ0KKyAgICAgICAg ICAgKGZpbmlzaCAobGFtYmRhICgpDQorICAgICAgICAgICAgICAgICAgICAgKGxldCAoKHJlc3Vs dCAobGlzdC0+c3RyaW5nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJl dmVyc2UgcmVzdWx0LWNoYXJzKSkpKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlcw0K KyAgICAgICAgICAgICAgICAgICAgICAgIChjb25kDQorICAgICAgICAgICAgICAgICAgICAgICAg ICgocmVnZXhwLWV4ZWMgaW50ZWdlci1yZWdleCByZXN1bHQpDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAnaW50ZWdlcikNCisgICAgICAgICAgICAgICAgICAgICAgICAgKChyZWdleHAtZXhl YyBmbG9hdC1yZWdleCByZXN1bHQpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxvYXQp DQorICAgICAgICAgICAgICAgICAgICAgICAgIChlbHNlICdzeW1ib2wpKQ0KKyAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdCkpKSkNCisgICAgICAgICAgIChhbGxvd2VkPyAobGFtYmRhIChj KQ0KKwkJICAgICAgIChjaGFyLXNldC1jb250YWlucz8NCisJCQlzeW1ib2wtYWxsb3dlZC1jaGFy YWN0ZXJzIGMpKSkpDQorICAgICAgKGNvbmQNCisgICAgICAgKChlb2Ytb2JqZWN0PyBjKSAoZmlu aXNoKSkNCisgICAgICAgKChjaGFyPT8gYyAjXFwpDQorCShlcnJvciAiY2hhcmFjdGVyIGVzY2Fw ZXMgbm90IGFsbG93ZWQgaW4gc3ltYm9scyIpKQ0KKyAgICAgICAoKGNoYXI9PyBjICNcLikNCisJ OzsgSWYgd2UndmUgZW5jb3VudGVyZWQgbm9uLW51bWVyaWMgY2hhcmFjdGVycyB1cCB1bnRpbCBu b3csDQorCTs7IGludGVycHJldCB0aGUgI1wuIGFzIEVORCwgb3RoZXJ3aXNlLCBhc3N1bWUgaXQn cyBwYXJ0IG9mIGENCisJOzsgZmxvYXQuDQorCShpZiBub24tbnVtZXJpYz8NCisJICAgIChiZWdp bg0KKwkgICAgICAodW5yZWFkLWNoYXIgYyBwb3J0KQ0KKwkgICAgICAoZmluaXNoKSkNCisJICAg IChpdGVyYXRlIChjb25zIGMgcmVzdWx0LWNoYXJzKSAjZikpKQ0KKyAgICAgICAoKGFsbG93ZWQ/ IGMpDQorCShpdGVyYXRlIChjb25zIGMgcmVzdWx0LWNoYXJzKQ0KKwkJIChvciBub24tbnVtZXJp Yz8NCisJCSAgICAgKG5vdCAob3IgKGNoYXItbnVtZXJpYz8gYykNCisJCQkgICAgICAoY2hhcj0/ IGMgI1wrKQ0KKwkJCSAgICAgIChjaGFyPT8gYyAjXC0pKSkpKSkNCisgICAgICAgKGVsc2UNCisg ICAgICAgICh1bnJlYWQtY2hhciBjIHBvcnQpDQorICAgICAgICAoZmluaXNoKSkpKSkpDQorDQor KGRlZmluZSAoY2hhci1oZXg/IGMpDQorICAoYW5kIChub3QgKGVvZi1vYmplY3Q/IGMpKQ0KKyAg ICAgICAob3IgKGNoYXItbnVtZXJpYz8gYykNCisgICAgICAgICAgIChtZW12IGMgJygjXGEgI1xi ICNcYyAjXGQgI1xlICNcZikpDQorICAgICAgICAgICAobWVtdiBjICcoI1xBICNcQiAjXEMgI1xE ICNcRSAjXEYpKSkpKQ0KKw0KKyhkZWZpbmUgKGRpZ2l0LT5udW1iZXIgYykNCisgICgtIChjaGFy LT5pbnRlZ2VyIGMpIChjaGFyLT5pbnRlZ2VyICNcMCkpKQ0KKw0KKyhkZWZpbmUgKGhleC0+bnVt YmVyIGMpDQorICAoaWYgKGNoYXItbnVtZXJpYz8gYykNCisgICAgICAoZGlnaXQtPm51bWJlciBj KQ0KKyAgICAgICgrIDEwICgtIChjaGFyLT5pbnRlZ2VyIChjaGFyLWRvd25jYXNlIGMpKSAoY2hh ci0+aW50ZWdlciAjXGEpKSkpKQ0KKw0KKyhkZWZpbmUgKHJlYWQtZXNjYXBlIHBvcnQpDQorICAo bGV0ICgoYyAocmVhZC1jaGFyIHBvcnQpKSkNCisgICAgKGNhc2UgYw0KKyAgICAgICgoI1wnICNc IiAjXFwpIGMpDQorICAgICAgKCgjXGIpICNcYnMpDQorICAgICAgKCgjXGYpICNcbnApDQorICAg ICAgKCgjXG4pICNcbmwpDQorICAgICAgKCgjXHIpICNcY3IpDQorICAgICAgKCgjXHQpICNcdGFi KQ0KKyAgICAgICgoI1x2KSAjXHZ0KQ0KKyAgICAgICgoI1wwKQ0KKyAgICAgICAobGV0ICgobmV4 dCAocGVlay1jaGFyIHBvcnQpKSkNCisJIChjb25kDQorCSAgKChlb2Ytb2JqZWN0PyBuZXh0KSAj XG51bCkNCisJICAoKGNoYXItbnVtZXJpYz8gbmV4dCkNCisJICAgKGVycm9yICJvY3RhbCBlc2Nh cGUgc2VxdWVuY2VzIGFyZSBub3Qgc3VwcG9ydGVkIikpDQorCSAgKGVsc2UgI1xudWwpKSkpDQor ICAgICAgKCgjXHgpDQorICAgICAgIChsZXQqICgoYSAocmVhZC1jaGFyIHBvcnQpKQ0KKwkgICAg ICAoYiAocmVhZC1jaGFyIHBvcnQpKSkNCisJIChjb25kDQorCSAgKChhbmQgKGNoYXItaGV4PyBh KSAoY2hhci1oZXg/IGIpKQ0KKwkgICAoaW50ZWdlci0+Y2hhciAoKyAoKiAxNiAoaGV4LT5udW1i ZXIgYSkpIChoZXgtPm51bWJlciBiKSkpKQ0KKwkgIChlbHNlDQorCSAgIChlcnJvciAiYmFkIGhl eCBjaGFyYWN0ZXIgZXNjYXBlIikpKSkpDQorICAgICAgKCgjXHUpDQorICAgICAgIChsZXQqICgo YSAocmVhZC1jaGFyIHBvcnQpKQ0KKwkgICAgICAoYiAocmVhZC1jaGFyIHBvcnQpKQ0KKwkgICAg ICAoYyAocmVhZC1jaGFyIHBvcnQpKQ0KKwkgICAgICAoZCAocmVhZC1jaGFyIHBvcnQpKSkNCisJ IChpbnRlZ2VyLT5jaGFyIChzdHJpbmctPm51bWJlciAoc3RyaW5nIGEgYiBjIGQpIDE2KSkpKQ0K KyAgICAgIChlbHNlDQorICAgICAgIGMpKSkpDQorDQorKGRlZmluZSAocmVhZC1zdHJpbmcgcG9y dCkNCisgIChsZXQgaXRlcmF0ZSAoKGNoYXJzICcoKSkpDQorICAgIChsZXQgKChjIChyZWFkLWNo YXIgcG9ydCkpKQ0KKyAgICAgIChjYXNlIGMNCisJKCgjXCIpDQorCSAobGlzdC0+c3RyaW5nIChy ZXZlcnNlIGNoYXJzKSkpDQorCSgoI1xcKQ0KKwkgKGNhc2UgKHBlZWstY2hhciBwb3J0KQ0KKwkg ICAoKCNcbmV3bGluZSAjXHNwYWNlKQ0KKwkgICAgKGl0ZXJhdGUgY2hhcnMpKQ0KKwkgICAoZWxz ZQ0KKwkgICAgKGl0ZXJhdGUgKGNvbnMgKHJlYWQtY2hhcmFjdGVyIHBvcnQpIGNoYXJzKSkpKSkN CisJKGVsc2UNCisJIChpdGVyYXRlIChjb25zIGMgY2hhcnMpKSkpKSkpDQorDQorKGRlZmluZSAo cmVhZC1jaGFyYWN0ZXIgcG9ydCkNCisgIChsZXQgKChjIChyZWFkLWNoYXIgcG9ydCkpKQ0KKyAg ICAoY2FzZSBjDQorICAgICAgKCgjXFwpIChyZWFkLWVzY2FwZSBwb3J0KSkNCisgICAgICAoZWxz ZSBjKSkpKQ0KKwwNCisNCis7OzsgTWFpbiBsZXhlciByb3V0aW5lIHdoaWNoIGlzIGdpdmVuIGEg cG9ydCBhbmQgbG9va3MgZm9yIHRoZSBuZXh0DQorOzs7IHRva2VuLg0KKyhkZWZpbmUgKGxleCBw b3J0KQ0KKyAgKGxldCAoKHJldHVybiAobGV0ICgoZmlsZSAoaWYgKGZpbGUtcG9ydD8gcG9ydCkN CisJCQkJKHBvcnQtZmlsZW5hbWUgcG9ydCkNCisJCQkJI2YpKQ0KKwkJICAgICAgKGxpbmUgKDEr IChwb3J0LWxpbmUgcG9ydCkpKQ0KKwkJICAgICAgKGNvbHVtbiAoMSsgKHBvcnQtY29sdW1uIHBv cnQpKSkpDQorCQkgIChsYW1iZGEgKHRva2VuIHZhbHVlKQ0KKwkJICAgIChsZXQgKChvYmogKGNv bnMgdG9rZW4gdmFsdWUpKSkNCisJCSAgICAgIChzZXQtc291cmNlLXByb3BlcnR5ISBvYmogJ2Zp bGVuYW1lIGZpbGUpDQorCQkgICAgICAoc2V0LXNvdXJjZS1wcm9wZXJ0eSEgb2JqICdsaW5lIGxp bmUpDQorCQkgICAgICAoc2V0LXNvdXJjZS1wcm9wZXJ0eSEgb2JqICdjb2x1bW4gY29sdW1uKQ0K KwkJICAgICAgb2JqKSkpKQ0KKwk7OyBSZWFkIGFmdGVyd2FyZHMgc28gdGhlIHNvdXJjZS1wcm9w ZXJ0aWVzIGFyZSBjb3JyZWN0IGFib3ZlDQorCTs7IGFuZCBhY3R1YWxseSBwb2ludCB0byB0aGUg dmVyeSBjaGFyYWN0ZXIgdG8gYmUgcmVhZC4NCisJKGMgKHJlYWQtY2hhciBwb3J0KSkpDQorICAg IChjb25kDQorICAgICA7OyBFbmQgb2YgaW5wdXQgbXVzdCBiZSBzcGVjaWFsbHkgbWFya2VkIHRv IHRoZSBwYXJzZXIuDQorICAgICAoKGVvZi1vYmplY3Q/IGMpIChyZXR1cm4gJ2VvZiBjKSkNCisg ICAgIDs7IFdoaXRlc3BhY2UsIGp1c3Qgc2tpcCBpdC4NCisgICAgICgoY2hhci13aGl0ZXNwYWNl PyBjKSAobGV4IHBvcnQpKQ0KKyAgICAgOzsgVGhlIHBlcmlvZCBjaGFyYWN0ZXIgb3IgIkVORCIg a2V5d29yZCBpcyB1c2VkIHRvIGRlbGltaXQgYQ0KKyAgICAgOzsgdGVybSBleHByZXNzaW9uIGlm IGl0IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2Ugb3INCisgICAgIDs7IEVP Riwgb3RoZXJ3aXNlIGl0IGlzIHVuZGVyc3Rvb2QgdG8gYmUgYSBmbG9hdC4NCisgICAgICgoYW5k IChjaGFyPT8gYyAjXC4pDQorCSAgIChsZXQgKChjJyAocGVlay1jaGFyIHBvcnQpKSkNCisJICAg ICAob3IgKGVvZi1vYmplY3Q/IGMnKQ0KKwkJIChjaGFyLXdoaXRlc3BhY2U/IGMnKSkpKQ0KKyAg ICAgIChyZXR1cm4gJ2VuZCAjZikpDQorICAgICAoZWxzZQ0KKyAgICAgIChjYXNlIGMNCisJOzsg QW4gbGluZSBjb21tZW50LCBza2lwIHVudGlsIGVuZC1vZi1saW5lIGlzIGZvdW5kDQorCSgoI1wj KQ0KKwkgKHJlYWQtbGluZSBwb3J0KQ0KKwkgKGxleCBwb3J0KSkNCisJKCgjXCcpDQorCSA7OyBB IGxpdGVyYWwgY2hhcmFjdGVyDQorCSAocmV0dXJuICdjaGFyYWN0ZXIgKHJlYWQtY2hhcmFjdGVy IHBvcnQpKSkNCisJKCgjXCIpDQorCSA7OyBBIGxpdGVyYWwgc3RyaW5nLiAgU2ltaWxhciB0byBz aW5nbGUgY2hhcmFjdGVycywgZXhjZXB0DQorCSA7OyB0aGF0IGVzY2FwZWQgbmV3bGluZSBhbmQg c3BhY2UgYXJlIHRvIGJlIGNvbXBsZXRlbHkNCisJIDs7IGlnbm9yZWQuDQorCSAocmV0dXJuICdz dHJpbmcgKHJlYWQtc3RyaW5nIHBvcnQpKSkNCisJKCgjXCgpDQorCSAobGV0ICgoYyAocmVhZC1j aGFyIHBvcnQpKSkNCisJICAgKGNhc2UgYw0KKwkgICAgIDs7IE11bHRpLWxpbmUgY29tbWVudCwg ZGlzY2FyZCB1bnRpbCBjbG9zaW5nICIqKSINCisJICAgICAoKCNcKikNCisJICAgICAgKGxldCBp dGVyYXRlICgpDQorCQkobGV0ICgoYyAocmVhZC1jaGFyIHBvcnQpKSkNCisJCSAgKGNvbmQNCisJ CSAgICgoZW9mLW9iamVjdD8gYykNCisJCSAgICAoZXJyb3IgInVuZXhwZWN0ZWQgZW5kIG9mIGZp bGUgaW4gbXVsdGktbGluZSBjb21tZW50IikpDQorCQkgICAoKGNoYXI9PyBjICNcKikNCisJCSAg ICAoY29uZA0KKwkJICAgICAoKGNoYXI9PyAocmVhZC1jaGFyIHBvcnQpICNcKSkgKGxleCBwb3J0 KSkNCisJCSAgICAgKGVsc2UgKGl0ZXJhdGUpKSkpDQorCQkgICAoZWxzZSAoaXRlcmF0ZSkpKSkp KQ0KKwkgICAgIChlbHNlDQorCSAgICAgIDs7IFRoZSAjXCggY291bGQgYmUgdW5kZXJzdG9vZCBh cyBwYXJ0IG9mIGEgc3ltYm9sLCBidXQNCisJICAgICAgOzsgaXQgc2VlbXMgd2lzZXIgdG8gcmVz ZXJ2ZSBpdCBmb3IgZnV0dXJlIHVzZSBhcyBpdHMNCisJICAgICAgOzsgb3duIHRva2VuLg0KKwkg ICAgICAodW5yZWFkLWNoYXIgYyBwb3J0KQ0KKwkgICAgICAocmV0dXJuICdwYXJlbi1vcGVuICNm KSkpKSkNCisJKCgjXCkpIChyZXR1cm4gJ3BhcmVuLWNsb3NlICNmKSkNCisJKCgjXFspIChyZXR1 cm4gJ3NxdWFyZS1vcGVuICNmKSkNCisJKCgjXF0pIChyZXR1cm4gJ3NxdWFyZS1jbG9zZSAjZikp DQorCSgoI1x7KSAocmV0dXJuICdicmFja2V0LW9wZW4gI2YpKQ0KKwkoKCNcfSkgKHJldHVybiAn YnJhY2tldC1jbG9zZSAjZikpDQorCSgoI1w7KSAocmV0dXJuICdzZW1pY29sb24gI2YpKQ0KKwko ZWxzZQ0KKwkgOzsgTm93IG9ubHkgaGF2ZSBudW1lcmljIG9yIHN5bWJvbCBpbnB1dCBwb3NzaWJs ZS4NCisJICh1bnJlYWQtY2hhciBjIHBvcnQpDQorCSAoY2FsbC13aXRoLXZhbHVlcw0KKwkgICAg IChsYW1iZGEgKCkgKGdldC1zeW1ib2wtb3ItbnVtYmVyIHBvcnQpKQ0KKwkgICAobGFtYmRhICh0 eXBlIHN0cikNCisJICAgICAoY2FzZSB0eXBlDQorCSAgICAgICAoKHN5bWJvbCkNCisgICAgICAg ICAgICAgICAgOzsgc3RyIGNvdWxkIGJlIGVtcHR5IGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMg YWxyZWFkeQ0KKyAgICAgICAgICAgICAgICA7OyBzb21ldGhpbmcgbm90IGFsbG93ZWQgaW4gYSBz eW1ib2wgKGFuZCBub3QgZXNjYXBlZCkhDQorICAgICAgICAgICAgICAgIDs7IFRha2UgY2FyZSBh Ym91dCB0aGF0LCBpdCBpcyBhbiBlcnJvciBiZWNhdXNlIHRoYXQNCisgICAgICAgICAgICAgICAg OzsgY2hhcmFjdGVyIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBlbHNld2hlcmUgb3IgaXMNCisg ICAgICAgICAgICAgICAgOzsgaW52YWxpZCBpbiB0aGUgaW5wdXQuDQorICAgICAgICAgICAgICAg IChjb25kDQorCQkgKCh6ZXJvPyAoc3RyaW5nLWxlbmd0aCBzdHIpKQ0KKwkJICAoYmVnaW4NCisJ CSAgICA7OyBUYWtlIGl0IG91dCBzbyB0aGUgUkVQTCBtaWdodCBub3QgZ2V0IGludG8gYW4NCisJ CSAgICA7OyBpbmZpbml0ZSBsb29wIHdpdGggZnVydGhlciByZWFkaW5nIGF0dGVtcHRzLg0KKwkJ ICAgIChyZWFkLWNoYXIgcG9ydCkNCisJCSAgICAoZXJyb3IgImludmFsaWQgY2hhcmFjdGVyIGlu IGlucHV0IiBjKSkpDQorCQkgKChhc3NvYy1yZWYgKmtleXdvcmRzKiBzdHIpDQorCQkgID0+IChs YW1iZGEgKGt3KSAocmV0dXJuIGt3ICNmKSkpDQorCQkgKGVsc2UNCisJCSAgKHJldHVybiAnc3lt Ym9sIChzdHJpbmctPnN5bWJvbCBzdHIpKSkpKQ0KKwkgICAgICAgKChpbnRlZ2VyKQ0KKwkJKHJl dHVybiAnaW50ZWdlciAoc3RyaW5nLT5udW1iZXIgc3RyKSkpDQorCSAgICAgICAoKGZsb2F0KQ0K KwkJKHJldHVybiAnZmxvYXQgKHN0cmluZy0+bnVtYmVyIHN0cikpKQ0KKwkgICAgICAgKGVsc2UN CisJCShlcnJvciAidW5leHBlY3RlZCBudW1lcmljL3N5bWJvbCB0eXBlIiB0eXBlKSkpKSkpKSkp KSkNCisNCis7OzsgQnVpbGQgYSBsZXhlciB0aHVuayBmb3IgYSBwb3J0LiAgVGhpcyBpcyB0aGUg ZXhwb3J0ZWQgcm91dGluZQ0KKzs7OyB3aGljaCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBsZXhl ciBmb3IgdGhlIHBhcnNlciB0byB1c2UuDQorKGRlZmluZSAoZ2V0LWxleGVyIHBvcnQpDQorICAo bGFtYmRhICgpIChsZXggcG9ydCkpKQ0KZGlmZiAtLWdpdCBhL21vZHVsZS9sYW5ndWFnZS9qb3kv cGFyc2VyLnNjbSBiL21vZHVsZS9sYW5ndWFnZS9qb3kvcGFyc2VyLnNjbQ0KbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjFkODg3MzgNCi0tLSAvZGV2L251bGwNCisrKyBiL21v ZHVsZS9sYW5ndWFnZS9qb3kvcGFyc2VyLnNjbQ0KQEAgLTAsMCArMSwxNDggQEANCis7OzsgcGFy c2VyLnNjbSAtLSBwYXJzZSBsZXhlciB0b2tlbnMgZm9yIEpveS4NCis7OzsNCis7OzsgQ29weXJp Z2h0IMKpIDIwMTYgRXJpYyBCYXZpZXIgPGJhdmllckBtZW1iZXIuZnNmLm9yZz4NCis7OzsNCis7 OzsgVGhpcyBzb3VyY2UgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMNCis7OzsgTGljZW5zZSwgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLg0KKw0KKyhkZWZpbmUtbW9kdWxlIChsYW5ndWFnZSBqb3kgcGFy c2VyKQ0KKyAgIzp1c2UtbW9kdWxlIChsYW5ndWFnZSBqb3kgbGV4ZXIpDQorICAjOmV4cG9ydCAo cmVhZC1qb3kpKQ0KKw0KKyhkZWZpbmUqIChwYXJzZS1lcnJvciB0b2tlbiBtc2cgLiBhcmdzKQ0K KyAgKGFwcGx5IGVycm9yDQorICAgICAgICAgKGZvcm1hdCAjZiAifkBbfmE6fl1+ZDp+ZDogfmEi DQorICAgICAgICAgICAgICAgICAoc291cmNlLXByb3BlcnR5IHRva2VuICdmaWxlbmFtZSkNCisg ICAgICAgICAgICAgICAgIChzb3VyY2UtcHJvcGVydHkgdG9rZW4gJ2xpbmUpDQorICAgICAgICAg ICAgICAgICAoc291cmNlLXByb3BlcnR5IHRva2VuICdjb2x1bW4pDQorICAgICAgICAgICAgICAg ICBtc2cpDQorICAgICAgICAgYXJncykpDQorDQorKGRlZmluZSAocmV0dXJuIHJlc3VsdCB0b2tl bikNCisgIChpZiAocGFpcj8gcmVzdWx0KQ0KKyAgICAgIChzZXQtc291cmNlLXByb3BlcnRpZXMh DQorICAgICAgIHJlc3VsdA0KKyAgICAgICAoc291cmNlLXByb3BlcnRpZXMgdG9rZW4pKSkNCisg IHJlc3VsdCkNCisNCisoZGVmaW5lIChnZXQtc3ltYm9sIGxleCkNCisgIChsZXQqICgodG9rZW4g KGxleCkpDQorCSAodHlwZSAoY2FyIHRva2VuKSkpDQorICAgIChjYXNlIHR5cGUNCisgICAgICAo KHN5bWJvbCkNCisgICAgICAgKHJldHVybiAoY2RyIHRva2VuKSB0b2tlbikpDQorICAgICAgKGVs c2UNCisgICAgICAgKHBhcnNlLWVycm9yIHRva2VuICJleHBlY3RlZCBhdG9tLCBnb3QiIHRva2Vu KSkpKSkNCisNCisoZGVmaW5lIChnZXQtcXVvdGUgbGV4KQ0KKyAgKGxldCBpdGVyYXRlICgoaXRl bXMgJygpKSkNCisgICAgKGxldCogKCh0b2tlbiAobGV4KSkNCisJICAgKHR5cGUgKGNhciB0b2tl bikpKQ0KKyAgICAgIChjYXNlIHR5cGUNCisJKChlb2YpDQorCSAocGFyc2UtZXJyb3IgdG9rZW4g InVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gcXVvdGUiKSkNCisJKChzcXVhcmUtY2xvc2UpDQor CSAocmV0dXJuIChyZXZlcnNlIGl0ZW1zKSB0b2tlbikpDQorCSgoc3F1YXJlLW9wZW4pDQorCSAo aXRlcmF0ZSAoY29ucyAoZ2V0LXF1b3RlIGxleCkgaXRlbXMpKSkNCisJKGVsc2UNCisJIChpdGVy YXRlIChjb25zIChjZHIgdG9rZW4pIGl0ZW1zKSkpKSkpKQ0KKw0KKyhkZWZpbmUgKGdldC10ZXJt IGxleCkNCisgIChsZXQgaXRlcmF0ZSAoKGl0ZW1zICcoKSkpDQorICAgIChsZXQqICgodG9rZW4g KGxleCkpDQorCSAgICh0eXBlIChjYXIgdG9rZW4pKSkNCisgICAgICAoY2FzZSB0eXBlDQorCSgo ZW9mKQ0KKwkgKHBhcnNlLWVycm9yIHRva2VuICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIHRl cm0iKSkNCisgICAgICAgICgoPT0pDQorICAgICAgICAgKHBhcnNlLWVycm9yIHRva2VuICInPT0n IG91dHNpZGUgZGVmaW5pdGlvbiIpKQ0KKwkoKHNxdWFyZS1vcGVuKQ0KKwkgKGl0ZXJhdGUgKGNv bnMgKGdldC1xdW90ZSBsZXgpIGl0ZW1zKSkpDQorCSgoZW5kKQ0KKwkgKHJldHVybiBgKHRlcm0g LChyZXZlcnNlIGl0ZW1zKSkgdG9rZW4pKQ0KKwkoZWxzZQ0KKwkgKGl0ZXJhdGUgKGNvbnMgKGNk ciB0b2tlbikgaXRlbXMpKSkpKSkpDQorDQorKGRlZmluZSAoZ2V0LWRlZmluaXRpb24gbGV4KQ0K KyAgKGxldCogKCh0b2tlbiAobGV4KSkNCisJICh0eXBlIChjYXIgdG9rZW4pKSkNCisgICAgKGNh c2UgdHlwZQ0KKyAgICAgICgoPT0pDQorICAgICAgIDs7IFNpbWlsYXIgdG8gZ2V0LXRlcm0sIGJ1 dCByZXR1cm5zIHR3byB2YWx1ZTogdGhlIGxpc3Qgb2YNCisgICAgICAgOzsgdGVybXMgYW5kIHRo ZSB0eXBlIG9mIHRoZSB0b2tlbiB0aGF0IGNhdXNlZCB0ZXJtaW5hdGlvbi4NCisgICAgICAgKGxl dCBpdGVyYXRlICgoaXRlbXMgJygpKSkNCisJIChsZXQqICgodG9rZW4gKGxleCkpDQorCQkodHlw ZSAoY2FyIHRva2VuKSkpDQorCSAgIChjYXNlIHR5cGUNCisJICAgICAoKGVvZikNCisJICAgICAg KHBhcnNlLWVycm9yIHRva2VuDQorCQkJICAgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gZGVm aW5pdGlvbiIpKQ0KKyAgICAgICAgICAgICAoKD09KQ0KKyAgICAgICAgICAgICAgKHBhcnNlLWVy cm9yIHRva2VuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgJz09JyBp biBkZWZpbml0aW9uIikpDQorCSAgICAgKChzcXVhcmUtb3BlbikNCisJICAgICAgKGl0ZXJhdGUg KGNvbnMgKGdldC1xdW90ZSBsZXgpIGl0ZW1zKSkpDQorCSAgICAgKChzZW1pY29sb24gZW5kKQ0K KwkgICAgICAodmFsdWVzDQorCSAgICAgICAocmV0dXJuIGAodGVybSAsKHJldmVyc2UgaXRlbXMp KSB0b2tlbikNCisJICAgICAgIHR5cGUpKQ0KKwkgICAgIChlbHNlDQorCSAgICAgIChpdGVyYXRl IChjb25zIChjZHIgdG9rZW4pIGl0ZW1zKSkpKSkpKQ0KKyAgICAgIChlbHNlDQorICAgICAgIChw YXJzZS1lcnJvciB0b2tlbiAiZXhwZWN0aW5nICc9PScsIGdvdCIgdG9rZW4pKSkpKQ0KKw0KKyhk ZWZpbmUgKGdldC1kZWZpbml0aW9uLXNlcXVlbmNlIGxleCkNCisgIChsZXQgaXRlcmF0ZSAoKGRl ZmluaXRpb25zICcoKSkpDQorICAgIChsZXQqICgodG9rZW4gKGxleCkpDQorCSAgICh0eXBlIChj YXIgdG9rZW4pKSkNCisgICAgICAoY2FzZSB0eXBlDQorCSgoZW9mKQ0KKwkgKHBhcnNlLWVycm9y IHRva2VuICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGRlZmluaXRpb24iKSkNCisJKChlbmQp DQorCSAocmV0dXJuIChyZXZlcnNlIGRlZmluaXRpb25zKSB0b2tlbikpDQorCSgoc3ltYm9sKQ0K KwkgKGNhbGwtd2l0aC12YWx1ZXMNCisJICAgICAobGFtYmRhICgpIChnZXQtZGVmaW5pdGlvbiBs ZXgpKQ0KKwkgICAobGFtYmRhICh0ZXJtIGVuZC10eXBlKQ0KKwkgICAgIChsZXQgKChkIGAoLChj ZHIgdG9rZW4pICx0ZXJtKSkpDQorCSAgICAgICAoY2FzZSBlbmQtdHlwZQ0KKwkJICgoc2VtaWNv bG9uKQ0KKwkJICAoaXRlcmF0ZSAoY29ucyBkIGRlZmluaXRpb25zKSkpDQorCQkgKChlbmQpDQor CQkgIChyZXR1cm4gKHJldmVyc2UgKGNvbnMgZCBkZWZpbml0aW9ucykpDQorCQkJICB0b2tlbikp KSkpKSkNCisJKGVsc2UNCisJIChwYXJzZS1lcnJvciB0b2tlbiAiZXhwZWN0aW5nIHN5bWJvbCwg Z290IiB0b2tlbikpKSkpKQ0KKw0KKyhkZWZpbmUgKGdldC1leHByZXNzaW9uIGxleCkNCisgIChs ZXQqICgodG9rZW4gKGxleCkpDQorCSAodHlwZSAoY2FyIHRva2VuKSkpDQorICAgIChjYXNlIHR5 cGUNCisgICAgICAoKGVvZikgKGNkciB0b2tlbikpDQorICAgICAgKChwdWJsaWMgcHJpdmF0ZSBk ZWZpbmUpDQorICAgICAgIChyZXR1cm4gYChkZWZpbml0aW9ucw0KKwkJICAsQChtYXAgKGxhbWJk YSAoZCkNCisJCQkgICAoY29ucyAoY2FzZSB0eXBlDQorCQkJCSAgICgocHVibGljIGRlZmluZSkN CisJCQkJICAgICdwdWJsaWMpDQorCQkJCSAgIChlbHNlICdwcml2YXRlKSkNCisJCQkJIGQpKQ0K KwkJCSAoZ2V0LWRlZmluaXRpb24tc2VxdWVuY2UgbGV4KSkpDQorCSAgICAgICB0b2tlbikpDQor ICAgICAgKCg9PSkNCisgICAgICAgKHBhcnNlLWVycm9yIHRva2VuICInPT0nIG91dHNpZGUgZGVm aW5pdGlvbiIpKQ0KKyAgICAgICgocGFyZW4tb3BlbiBicmFja2V0LW9wZW4pDQorICAgICAgIChw YXJzZS1lcnJvciB0b2tlbiAiam95IHNldHMgbm90IGltcGxlbWVudGVkIikpDQorICAgICAgKChz cXVhcmUtb3BlbikNCisgICAgICAgKHJldHVybiBgKHRlcm0gKCwoZ2V0LXF1b3RlIGxleCkgLEAo Y2FkciAoZ2V0LXRlcm0gbGV4KSkpKQ0KKwkgICAgICAgdG9rZW4pKQ0KKyAgICAgIChlbHNlDQor ICAgICAgIDs7IFdlJ3ZlIHByb2JhYmx5IGFscmVhZHkgcmVhZCB0aGUgZmlyc3QgZmFjdG9yIG9m IGEgdGVybS4NCisgICAgICAgOzsgUmVhZCB0aGUgcmVzdCwgYW5kIGFkZCB0aGlzIG9uZSB0byB0 aGUgZnJvbnQuDQorICAgICAgIChyZXR1cm4gYCh0ZXJtICgsKGNkciB0b2tlbikgLEAoY2FkciAo Z2V0LXRlcm0gbGV4KSkpKQ0KKwkgICAgICAgdG9rZW4pKSkpKQ0KKw0KKyhkZWZpbmUgKHJlYWQt am95IHBvcnQpDQorICAobGV0ICgobGV4ZXIgKGdldC1sZXhlciBwb3J0KSkpDQorICAgIChnZXQt ZXhwcmVzc2lvbiBsZXhlcikpKQ0KZGlmZiAtLWdpdCBhL21vZHVsZS9sYW5ndWFnZS9qb3kvcHJp bWl0aXZlcy5zY20gYi9tb2R1bGUvbGFuZ3VhZ2Uvam95L3ByaW1pdGl2ZXMuc2NtDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNjVmMTkwMA0KLS0tIC9kZXYvbnVsbA0KKysr IGIvbW9kdWxlL2xhbmd1YWdlL2pveS9wcmltaXRpdmVzLnNjbQ0KQEAgLTAsMCArMSwxNDggQEAN Cis7OzsgcHJpbWl0aXZlcy5zY20gLS0gcHJpbWl0aXZlIG9wZXJhdG9ycyBmb3IgSm95Lg0KKzs7 Ow0KKzs7OyBDb3B5cmlnaHQgwqkgMjAxNiBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yu b3JnPg0KKzs7Ow0KKzs7OyBUaGlzIHNvdXJjZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKzs7OyBMaWNlbnNlLCB2ZXJzaW9uIDMsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorDQorOzs7IENvbW1lbnRhcnk6DQor Ozs7DQorOzs7IEFsbCBKb3kgcHJvY2VkdXJlcyB0YWtlIGEgc3RhY2sgYXJndW1lbnQgYW5kIHJl dHVybiBhIHN0YWNrDQorOzs7IGFyZ3VtZW50LiAgSXQncyBjb252ZW5pZW50IGZvciBwcmltaXRp dmVzIHRvIHVzZSBTY2hlbWUgInJlc3QiDQorOzs7IGFyZ3VtZW50cyB0byBkZWNvbnN0cnVjdCB0 aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cy4NCisNCisoZGVmaW5lLW1vZHVsZSAobGFu Z3VhZ2Ugam95IHByaW1pdGl2ZXMpDQorICAjOnVzZS1tb2R1bGUgKChzeXN0ZW0gYmFzZSBjb21w aWxlKQ0KKwkJIzpzZWxlY3QgKGNvbXBpbGVkLWZpbGUtbmFtZSBjb21waWxlLWZpbGUpKQ0KKyAg Izp1c2UtbW9kdWxlICgoZ3VpbGUpDQorCQkjOnNlbGVjdCAobG9hZC1jb21waWxlZCBzdHJpbmct YXBwZW5kIGFuZD0+KSkNCisgICM6dXNlLW1vZHVsZSAoKGljZS05IHNhZmUtcjVycykNCisJCSM6 c2VsZWN0ICgrIC0gPCA+IGVxdj8gZGlzcGxheSkNCisJCSM6cmVuYW1lciAoc3ltYm9sLXByZWZp eC1wcm9jICclKSkNCisgICM6dXNlLW1vZHVsZSAoKHNyZmkgc3JmaS0xKQ0KKwkJIzpzZWxlY3Qg KGNvbnMgZm9sZCkNCisJCSM6cmVuYW1lciAoc3ltYm9sLXByZWZpeC1wcm9jICclKSkNCisgICM6 cmVwbGFjZSAoY29ucyArIC0gPCA+ID0pDQorICAjOmV4cG9ydCAodW5jb25zDQorCSAgICBzd2Fw DQorCSAgICBkdXANCisJICAgIHBvcA0KKwkgICAgY2hvaWNlDQorCSAgICBpbmZyYQ0KKwkgICAg c3RhY2sNCisJICAgIHVuc3RhY2sNCisNCisJICAgIDs7IElPDQorCSAgICBwdXRjaA0KKwkgICAg ZGlzcGxheQ0KKwkgICAgaW5jbHVkZQ0KKw0KKwkgICAgOzsgZGF0YXR5cGUgaW5xdWlyeQ0KKwkg ICAgbG9naWNhbA0KKwkgICAgY2hhcg0KKwkgICAgaW50ZWdlcg0KKwkgICAgc3RyaW5nDQorCSAg ICBsaXN0DQorDQorICAgICAgICAgICAgZXhpdCkpDQorDQorOzs7IENvZGU6DQorDQorKGRlZmlu ZSAoLT50cnV0aCBiKQ0KKyAgKGlmIGIgJ3RydWUgJ2ZhbHNlKSkNCisNCis7OzsgVE9ETzogVGhp cyBjb3VsZCBiZSB3cml0dGVuIGluIGJhc2UgaW4gdGVybXMgb2YgJz0nLg0KKyhkZWZpbmUgKGxv Z2ljYWwgeCAuIFMpDQorICAoJWNvbnMgKC0+dHJ1dGggKGlmIChlcT8geCAndHJ1ZSkNCisgICAg ICAgICAgICAgICAgICAgICAgI3QNCisgICAgICAgICAgICAgICAgICAgICAgKGVxPyB4ICdmYWxz ZSkpKSBTKSkNCisNCisoZGVmaW5lIChjaGFyIHggLiBTKQ0KKyAgKCVjb25zICgtPnRydXRoIChj aGFyPyB4KSkgUykpDQorDQorKGRlZmluZSAoaW50ZWdlciB4IC4gUykNCisgICglY29ucyAoLT50 cnV0aCAoaW50ZWdlcj8geCkpIFMpKQ0KKw0KKyhkZWZpbmUgKHN0cmluZyB4IC4gUykNCisgICgl Y29ucyAoLT50cnV0aCAoc3RyaW5nPyB4KSkgUykpDQorDQorKGRlZmluZSAobGlzdCB4IC4gUykN CisgICglY29ucyAoLT50cnV0aCAobGlzdD8geCkpIFMpKQ0KKwwNCisoZGVmaW5lIChjb25zIGxz dCB4IC4gUykNCisgICglY29ucyAoJWNvbnMgeCBsc3QpIFMpKQ0KKw0KKyhkZWZpbmUgKHVuY29u cyBsc3QgLiBTKQ0KKyAgKCVjb25zIChjZHIgbHN0KSAoJWNvbnMgKGNhciBsc3QpIFMpKSkNCisN CisoZGVmaW5lIChzd2FwIHggeSAuIFMpDQorICAoJWNvbnMgeSAoJWNvbnMgeCBTKSkpDQorDQor KGRlZmluZSAoZHVwIHggLiBTKQ0KKyAgKCVjb25zIHggKCVjb25zIHggUykpKQ0KKw0KKyhkZWZp bmUgKHBvcCBfIC4gUykNCisgIFMpDQorDQorKGRlZmluZSAoKyB4IHkgLiBTKQ0KKyAgKCVjb25z ICglKyB5IHgpIFMpKQ0KKw0KKyhkZWZpbmUgKC0geCB5IC4gUykNCisgICglY29ucyAoJS0geSB4 KSBTKSkNCisNCisoZGVmaW5lICg8IHggeSAuIFMpDQorICAoJWNvbnMgKC0+dHJ1dGggKCU8IHkg eCkpIFMpKQ0KKw0KKyhkZWZpbmUgKD4geCB5IC4gUykNCisgICglY29ucyAoLT50cnV0aCAoJT4g eSB4KSkgUykpDQorDQorKGRlZmluZSAoPSB4IHkgLiBTKQ0KKyAgKCVjb25zICgtPnRydXRoICgl ZXF2PyB4IHkpKSBTKSkNCisNCisoZGVmaW5lIChjaG9pY2UgeSB4IGIgLiBTKQ0KKyAgKCVjb25z IChpZiAoZXE/IGIgJ3RydWUpIHggeSkgUykpDQorDQorKGRlZmluZSAoaW5mcmEgcSBsc3QgLiBT KQ0KKyAgKCVjb25zICglZm9sZCAoQCAobGFuZ3VhZ2Ugam95IGV2YWwpIGV2YWwpIGxzdCBxKQ0K KwkgUykpDQorDQorKGRlZmluZSAoc3RhY2sgLiBTKQ0KKyAgKCVjb25zIFMgUykpDQorDQorKGRl ZmluZSAodW5zdGFjayBTIC4gXykNCisgIFMpDQorDA0KKyhkZWZpbmUgKHB1dGNoIGMgLiBTKQ0K KyAgKHdyaXRlLWNoYXIgYykNCisgIFMpDQorDQorKGRlZmluZSAoZGlzcGxheSB4IC4gUykNCisg ICglZGlzcGxheSB4KQ0KKyAgUykNCisNCis7OzsgVE9ETzogSXQgV291bGQgQmUgTmljZeKEoiBp ZiB0aGUgc2VhcmNoIGluY2x1ZGVkIGJvdGggdGhlIGN1cnJlbnQNCis7Ozsgd29ya2luZyBkaXJl Y3RvcnkgYW5kIHRoZSBkaXJlY3RvcnkgZnJvbSB3aGVyZSB0aGUgaW5jbHVkZSBpcyBiZWluZw0K Kzs7OyBpc3N1ZWQuDQorKGRlZmluZSAoaW5jbHVkZSBzdHIgLiBTKQ0KKyAgKGxldCogKChzdGQg KHN0cmluZy1hcHBlbmQgKCVsaWJyYXJ5LWRpcikgIi9sYW5ndWFnZS9qb3kiKSkNCisgICAgICAg ICAoZ28gKGFuZD0+IChzZWFyY2gtcGF0aCAoJWNvbnMgc3RkICVsb2FkLXBhdGgpIHN0ciAnKCIi ICIuam95IikpDQorICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChmKSAoY29tcGlsZWQtZmls ZS1uYW1lIGYpKSkpKQ0KKyAgICAoaWYgZ28NCisJKGJlZ2luDQorCSAgKGNvbXBpbGUtZmlsZSBz dHIgIzpvdXRwdXQtZmlsZSBnbyAjOmZyb20gJ2pveSkNCisJICAobG9hZC1jb21waWxlZCBnbykp DQorCShlcnJvciAiY291bGQgbm90IGZpbmQgZmlsZSB0byBpbmNsdWRlOiIgc3RyKSkpDQorICBT KQ0KKw0KKyhkZWZpbmUgKGV4aXQgc3RhdHVzIC4gXykNCisgICJJbW1lZGlhdGVseSBleGl0IHRo ZSBwcm9ncmFtIHdpdGggU1RBVFVTLiINCisgIChwcmltaXRpdmUtZXhpdCBzdGF0dXMpKQ0KKw0K Kzs7OyBGb3IgZWZmaWNpZW5jeSwgaGF2aW5nIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbnMgb2Yg dGhlIGZvbGxvd2luZw0KKzs7OyBtaWdodCBiZSBiZW5lZmljaWFsICh0aG91Z2ggSSBoYXZlIHll dCB0byBwcm92ZSB0aGlzIGluIHByYWN0aWNlKToNCis7OzsNCis7OzsgaSBkaXAgZGlwZCBwb3Bk IGR1cGQgc3dhcGQgdGltZXMgZGl2bW9kIC8gKiAlIDw9ID49IG1heCBtaW4gdHJ1ZSBmYWxzZSBh bmQNCis7Ozsgb3Igbm90IG51bGwgYnJhbmNoIGlmdGUNCis7OzsNCis7OzsgSW4gcGFydGljdWxh ciwgaXQgc2VlbXMgdGhlIGRpcCBhbmQgaSBjb21iaW5hdG9ycyB3b3VsZCBiZQ0KKzs7OyBlc3Bl Y2lhbGx5IGJlbmVmaWNpYWwuICBPciBqdXN0IGRpcCBpZiB3ZSB1c2UgJ2kgPT0gZHVwIGRpcCBw b3AnLg0KZGlmZiAtLWdpdCBhL21vZHVsZS9sYW5ndWFnZS9qb3kvc3BlYy5zY20gYi9tb2R1bGUv bGFuZ3VhZ2Uvam95L3NwZWMuc2NtDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw MC4uOTdlYjQ5Mg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbW9kdWxlL2xhbmd1YWdlL2pveS9zcGVj LnNjbQ0KQEAgLTAsMCArMSwxOCBAQA0KKzs7OyBzcGVjLnNjbSAtLSBHdWlsZSBsYW5ndWFnZSBz cGVjaWZpY2F0aW9uIGZvciBKb3kuDQorOzs7DQorOzs7IENvcHlyaWdodCDCqSAyMDE2IEVyaWMg QmF2aWVyIDxiYXZpZXJAbWVtYmVyLmZzZi5vcmc+DQorOzs7DQorOzs7IFRoaXMgc291cmNlIGlz IHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorOzs7 IExpY2Vuc2UsIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4NCisNCisoZGVmaW5lLW1vZHVsZSAobGFuZ3VhZ2Ugam95IHNwZWMpDQorICAjOnVzZS1tb2R1 bGUgKHN5c3RlbSBiYXNlIGxhbmd1YWdlKQ0KKyAgIzp1c2UtbW9kdWxlIChsYW5ndWFnZSBqb3kg cGFyc2VyKQ0KKyAgIzp1c2UtbW9kdWxlIChsYW5ndWFnZSBqb3kgY29tcGlsZS10cmVlLWlsKQ0K KyAgIzpleHBvcnQgKGpveSkpDQorDQorKGRlZmluZS1sYW5ndWFnZSBqb3kNCisgICM6dGl0bGUg ICAgICAiSm95Ig0KKyAgIzpyZWFkZXIgICAgIChsYW1iZGEgKHBvcnQgZW52KSAocmVhZC1qb3kg cG9ydCkpDQorICAjOmNvbXBpbGVycyBgKCh0cmVlLWlsIC4gLGNvbXBpbGUtdHJlZS1pbCkpDQor ICAjOnByaW50ZXIgICAgd3JpdGUpDQpkaWZmIC0tZ2l0IGEvbW9kdWxlL2xhbmd1YWdlL2pveS90 ZXN0cy9pbmljaGVjay5qb3kgYi9tb2R1bGUvbGFuZ3VhZ2Uvam95L3Rlc3RzL2luaWNoZWNrLmpv eQ0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjk5MzRhN2QNCi0tLSAvZGV2 L251bGwNCisrKyBiL21vZHVsZS9sYW5ndWFnZS9qb3kvdGVzdHMvaW5pY2hlY2suam95DQpAQCAt MCwwICsxLDUyIEBADQorKCogaW5pY2hlY2suam95IC0tIHByaW1pdGl2ZSB1bml0IHRlc3QgY29t YmluYXRvcnMuDQorDQorICAgVGVzdCByb3V0aW5lcyB0aGF0IG1ha2UgdXNlIG9mIG9ubHkgSm95 IHByaW1pdGl2ZXMsIHNvIHRoYXQgdGhlDQorICAgc3RhbmRhcmQgbGlicmFyeSByb3V0aW5lcyBt YXkgYmUgdGVzdGVkLg0KKw0KKyAgIENvcHlyaWdodCDCqSBFcmljIEJhdmllciA8YmF2aWVyQG1l bWJlci5mc2Yub3JnPg0KKw0KKyAgIFRoaXMgc291cmNlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICAgTGljZW5zZSwgdmVyc2lvbiAzLCBv ciBhdCB5b3VyIG9wdGlvbiBhbnkgbGF0ZXIgdmVyc2lvbi4NCisqKQ0KKw0KK0RFRklORQ0KKyAg KCogcHJpdmF0ZSAqKQ0KKyAgbmV3bGluZSA9PSAnXG4gcHV0Y2ggOw0KKyAgcHV0cyA9PSBkaXNw bGF5IG5ld2xpbmUgOw0KKyAgcHJpbWl0aXZlLWNoZWNrID09DQorICAgIGRpc3BsYXkgIiAiIGRp c3BsYXkNCisgICAgWyJvayIgcHV0c10gWyJmYWlsIiBwdXRzXQ0KKyAgICBjaG9pY2UgaW5mcmEg Ow0KKw0KKyAgKCogVXNlIHRoZXNlIGNvbWJpbmF0b3JzIGluIHRoZSBmb2xsb3dpbmcgd2F5Og0K Kw0KKyAgICAgImZvbyIgW1BdIHNhdGlzZmllcyBbUCddID8gLg0KKw0KKyAgICAgUCBpcyBleGVj dXRlZCwgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBwcmVkaWNhdGUgUCcsIHdoaWNoDQorICAg ICBzaG91bGQgbGVhdmUgdHJ1ZSBvciBmYWxzZSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjayB0byBp bmRpY2F0ZQ0KKyAgICAgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSB0ZXN0LiAgSWYgc3VjY2Vz ZnVsLCAiZm9vIG9rIiBpcw0KKyAgICAgcHJpbnRlZCB0byBzdGRvdXQsIG90aGVyd2lzZSAiZm9v IGZhaWwiLiAqKQ0KKyAgc2F0aXNmaWVzID09IHN3YXAgZGlzcGxheSBbXSBzd2FwIGluZnJhIDsN CisgID8gPT0gaW5mcmEgdW5jb25zIHBvcA0KKyAgICAgICBbIiBvayIgcHV0c10gWyIgZmFpbCIg cHV0c10NCisgICAgICAgY2hvaWNlIFtdIHN3YXAgaW5mcmEgcG9wIDsNCitFTkQNCisNCisoKiBC ZWZvcmUgZXhwb3J0aW5nIHRoZXNlIHRlc3Qgcm91dGluZXMsIGRvIHdoYXQgc2FuaXR5IGNoZWNr aW5nIHdlDQorICAgY2FuIGRvIG9uIG91ciBwcmltaXRpdmVzLiAqKQ0KK1tdIFt0cnVlXSB1bmNv bnMgcG9wICJjaG9pY2UiIHByaW1pdGl2ZS1jaGVjayAuDQorW10gMyAzID0gIj0iIHByaW1pdGl2 ZS1jaGVjayAuDQorW10gMSAzICsgNCA9ICIrIiBwcmltaXRpdmUtY2hlY2sgLg0KK1tdIDQgMiAt IDIgPSAiPSIgcHJpbWl0aXZlLWNoZWNrIC4NCitbXSAyIDQgPCAiPCIgcHJpbWl0aXZlLWNoZWNr IC4NCitbXSA0IDIgPiAiPiIgcHJpbWl0aXZlLWNoZWNrIC4NCitbXSAyIGR1cCArIDQgPSAiZHVw IiBwcmltaXRpdmUtY2hlY2sgLg0KK1tdIDIgNCBwb3AgMiA9ICJwb3AiIHByaW1pdGl2ZS1jaGVj ayAuDQorW10gWzMgMV0gZHVwIFsrXSBpbmZyYSB1bmNvbnMgcG9wIDQgPSAiZHVwIGxpc3QiIHBy aW1pdGl2ZS1jaGVjayAuDQorW10gW3RydWVdICB1bmNvbnMgcG9wIGxvZ2ljYWwgImxvZ2ljYWwi IHByaW1pdGl2ZS1jaGVjayAuDQorW10gW2ZhbHNlXSB1bmNvbnMgcG9wIGxvZ2ljYWwgImxvZ2lj YWwgZmFsc2UiIHByaW1pdGl2ZS1jaGVjayAuDQorW10gJ2IgY2hhciAiY2hhciIgcHJpbWl0aXZl LWNoZWNrIC4NCitbXSAyIGludGVnZXIgImludGVnZXIiIHByaW1pdGl2ZS1jaGVjayAuDQorW10g ImZvbyIgc3RyaW5nICJzdHJpbmciIHByaW1pdGl2ZS1jaGVjayAuDQorW10gWzJdIGxpc3QgImxp c3QiIHByaW1pdGl2ZS1jaGVjayAuDQorW10gW10gbnVsbCAibnVsbCIgcHJpbWl0aXZlLWNoZWNr IC4NCmRpZmYgLS1naXQgYS9tb2R1bGUvbGFuZ3VhZ2Uvam95L3Rlc3RzL3Rlc3QtYmFzZS5qb3kg Yi9tb2R1bGUvbGFuZ3VhZ2Uvam95L3Rlc3RzL3Rlc3QtYmFzZS5qb3kNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwLi40MmU2NDkxDQotLS0gL2Rldi9udWxsDQorKysgYi9tb2R1 bGUvbGFuZ3VhZ2Uvam95L3Rlc3RzL3Rlc3QtYmFzZS5qb3kNCkBAIC0wLDAgKzEsMTk3IEBADQor KCogdGVzdC1iYXNlLmpveSAtLSB0ZXN0cyBmb3IgYmFzZS5qb3kNCisNCisgICBDb3B5cmlnaHQg wqkgRXJpYyBCYXZpZXIgPGJhdmllckBtZW1iZXIuZnNmLm9yZz4NCisNCisgICBUaGlzIHNvdXJj ZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0K KyAgIExpY2Vuc2UsIHZlcnNpb24gMywgb3IgYXQgeW91ciBvcHRpb24gYW55IGxhdGVyIHZlcnNp b24uDQorKikNCisiYmFzZSIgaW5jbHVkZSAuDQorInRlc3RzL2luaWNoZWNrIiBpbmNsdWRlIC4N CisNCitERUZJTkUNCisgIHRlc3Qtc3dvbnMgPT0gInN3b25zIiBbWzNdIDIgc3dvbnMgY2FyXSBz YXRpc2ZpZXMgWzIgPV0gPyA7DQorICB0ZXN0LXVuc3dvbnMgPT0gInVuc3dvbnMiIFtbMiAzXSB1 bnN3b25zXSBzYXRpc2ZpZXMgWzIgPV0gPyA7DQorDQorICB0ZXN0LWNhciA9PSAiY2FyIiBbWzEg Ml0gY2FyXSBzYXRpc2ZpZXMgWzEgPV0gPyA7DQorICB0ZXN0LWNkciA9PSAiY2RyIiBbWzEgMl0g Y2RyIGNhcl0gc2F0aXNmaWVzIFsyID1dID8gOw0KKyAgdGVzdC1jYWRyID09ICJjYWRyIiBbWzEg Ml0gY2Fkcl0gc2F0aXNmaWVzIFsyID1dID8gOw0KKw0KKyAgdGVzdC1maXJzdCA9PQ0KKyAgICAi Zmlyc3QiIFtbMSAyIDNdIGZpcnN0XSBzYXRpc2ZpZXMgWzEgPV0gPyA7DQorICB0ZXN0LXNlY29u ZCA9PQ0KKyAgICAic2Vjb25kIiBbWzEgMiAzXSBzZWNvbmRdIHNhdGlzZmllcyBbMiA9XSA/IDsN CisgIHRlc3QtdGhpcmQgPT0NCisgICAgInRoaXJkIiBbWzEgMiAzXSB0aGlyZF0gc2F0aXNmaWVz IFszID1dID8gOw0KKw0KKyAgdGVzdC1ib29sZWFucyA9PQ0KKyAgICAidHJ1ZSIgW3RydWVdIHNh dGlzZmllcyBbMSAwIGNob2ljZSAxID1dID8NCisgICAgImZhbHNlIiBbZmFsc2VdIHNhdGlzZmll cyBbMSAwIGNob2ljZSAwID1dID8gOw0KKw0KKyAgdGVzdC1sZWFmID09DQorICAgICJudW1lcmlj IGxlYWYiIFsyIGxlYWZdIHNhdGlzZmllcyBbdHJ1ZSA9XSA/DQorICAgICJjaGFyIGxlYWYiICAg IFsnYiBsZWFmXSBzYXRpc2ZpZXMgW3RydWUgPV0gPw0KKyAgICAic3RyaW5nIGxlYWYiICBbImZv byIgbGVhZl0gc2F0aXNmaWVzIFt0cnVlID1dID8NCisgICAgImxpc3QgbGVhZiIgICAgW1sxIDJd IGxlYWZdIHNhdGlzZmllcyBbZmFsc2UgPV0gPyA7DQorICB0ZXN0LW51bGwgPT0NCisgICAgIm51 bWVyaWMgbnVsbCgwKSIgIFswIG51bGxdICAgc2F0aXNmaWVzIFt0cnVlID1dID8NCisgICAgIm51 bWVyaWMgbm9uLW51bGwiIFsxIG51bGxdICAgc2F0aXNmaWVzIFtmYWxzZSA9XSA/DQorICAgICJu dWxsIGxpc3QiICAgICAgICBbW10gbnVsbF0gIHNhdGlzZmllcyBbdHJ1ZSA9XSA/DQorICAgICJu b24tbnVsbCBsaXN0IiAgICBbWzFdIG51bGxdIHNhdGlzZmllcyBbZmFsc2UgPV0gPyA7DQorICB0 ZXN0LW51bGxkID09DQorICAgICJudW1lcmljIG51bGxkIiAgICAgWzAgMSBudWxsZF0gc2F0aXNm aWVzIFtwb3AgdHJ1ZSA9XSA/DQorICAgICJudW1lcmljIG5vbi1udWxsZCIgWzEgMCBudWxsZF0g c2F0aXNmaWVzIFtwb3AgZmFsc2UgPV0gPw0KKyAgICAibGlzdCBudWxsZCIgICAgICAgIFtbXSBb MV0gbnVsbGRdIHNhdGlzZmllcyBbcG9wIHRydWUgPV0gPw0KKyAgICAibGlzdCBub24tbnVsbGQi ICAgIFtbMV0gW10gbnVsbGRdIHNhdGlzZmllcyBbcG9wIGZhbHNlID1dID8gOw0KKw0KKyAgdGVz dC1uZXdzdGFjayA9PQ0KKyAgICAibmV3c3RhY2siIFtuZXdzdGFja10gc2F0aXNmaWVzIFtzdGFj ayBudWxsXSA/IDsNCisNCisgIHRlc3QtaSA9PQ0KKyAgICAiaSBpZCIgWzEgW10gaV0gc2F0aXNm aWVzIFsxID1dID8NCisgICAgImkgYXRvbSIgW1sxXSBpXSBzYXRpc2ZpZXMgWzEgPV0gPw0KKyAg ICAiaSBwb3AiIFsxIDIgW3BvcF0gaV0gc2F0aXNmaWVzIFsxID1dID8NCisgICAgImkgKyIgWzEg MiBbK10gaV0gc2F0aXNmaWVzIFszID1dID8NCisgICAgImkyIGlkIiBbMSAyIFtdIFtdIGkyXSBz YXRpc2ZpZXMgWzIgPV0gPw0KKyAgICAiaTIgKyIgWzEgMiBbMyArXSBbMiArXSBpMl0gc2F0aXNm aWVzIFs9XSA/IDsNCisNCisgIHRlc3QtZGlwID09DQorICAgICJkaXAgaWQiIFsxIDIgW10gZGlw XSBzYXRpc2ZpZXMgW3BvcCAxID1dID8NCisgICAgImRpcCBhdG9tIiBbMiBbMV0gZGlwXSBzYXRp c2ZpZXMgW3BvcCAxID1dID8NCisgICAgImRpcCBwb3AiIFsxIDIgMyBbcG9wXSBkaXBdIHNhdGlz ZmllcyBbMyA9XSA/DQorICAgICJkaXAgcG9wIDIiIFsxIDIgMyBbcG9wXSBkaXBdIHNhdGlzZmll cyBbcG9wIDEgPV0gPyA7DQorDQorICB0ZXN0LWIgPT0NCisgICAgImIgKyIgWzEgMiAzIFsrXSBb K10gYl0gc2F0aXNmaWVzIFs2ID1dID8NCisgICAgImIiIFs0IFsyICtdIFszIC1dIGJdIHNhdGlz ZmllcyBbMyA9XSA/IDsNCisNCisgIHRlc3QtY2xlYXZlID09DQorICAgICJjbGVhdmUiIFsyIFsx ICtdIFs0ICtdIGNsZWF2ZV0gc2F0aXNmaWVzIFtbMyA9XSBbNiA9XSBpMiBhbmRdID8gOw0KKw0K KyAgdGVzdC1icmFuY2ggPT0NCisgICAgImJyYW5jaCB0cnVlIiBbdHJ1ZSBbMV0gWzBdIGJyYW5j aF0gc2F0aXNmaWVzIFsxID1dID8NCisgICAgImJyYW5jaCBmYWxzZSIgW2ZhbHNlIFsxXSBbMF0g YnJhbmNoXSBzYXRpc2ZpZXMgWzAgPV0gPw0KKyAgICAiaWZ0ZSB0cnVlIiBbMSBbMCA+XSBbMV0g WzBdIGlmdGVdIHNhdGlzZmllcyBbMSA9XSA/DQorICAgICJpZnRlIGZhbHNlIiBbMCBbMCA+XSBb MV0gWzBdIGlmdGVdIHNhdGlzZmllcyBbMCA9XSA/DQorICAgICJpZnRlIHJlc3RvcmUiIFsyIFtw b3AgdHJ1ZV0gWzIgK10gW10gaWZ0ZV0gc2F0aXNmaWVzIFs0ID1dID8gOw0KKw0KKyAgdGVzdC1s b2dpYyA9PQ0KKyAgICAibm90IHRydWUiICBbdHJ1ZSBub3RdICBzYXRpc2ZpZXMgW2ZhbHNlID1d ID8NCisgICAgIm5vdCBmYWxzZSIgW2ZhbHNlIG5vdF1zYXRpc2ZpZXMgW3RydWUgPV0gPw0KKyAg ICAib3IgdHQiICBbdHJ1ZSB0cnVlXSAgIHNhdGlzZmllcyBbb3JdID8NCisgICAgIm9yIHRmIiAg W3RydWUgZmFsc2VdICBzYXRpc2ZpZXMgW29yXSA/DQorICAgICJvciBmdCIgIFtmYWxzZSB0cnVl XSAgc2F0aXNmaWVzIFtvcl0gPw0KKyAgICAib3IgZmYiICBbZmFsc2UgZmFsc2VdIHNhdGlzZmll cyBbb3Igbm90XSA/DQorICAgICJhbmQgdHQiIFt0cnVlIHRydWVdICAgc2F0aXNmaWVzIFthbmRd ID8NCisgICAgImFuZCB0ZiIgW3RydWUgZmFsc2VdICBzYXRpc2ZpZXMgW2FuZCBub3RdID8NCisg ICAgImFuZCBmdCIgW2ZhbHNlIHRydWVdICBzYXRpc2ZpZXMgW2FuZCBub3RdID8NCisgICAgImFu ZCBmZiIgW2ZhbHNlIGZhbHNlXSBzYXRpc2ZpZXMgW2FuZCBub3RdID8NCisgICAgInhvciB0dCIg W3RydWUgdHJ1ZV0gICBzYXRpc2ZpZXMgW3hvciBub3RdID8NCisgICAgInhvciB0ZiIgW3RydWUg ZmFsc2VdICBzYXRpc2ZpZXMgW3hvcl0gPw0KKyAgICAieG9yIGZ0IiBbZmFsc2UgdHJ1ZV0gIHNh dGlzZmllcyBbeG9yXSA/DQorICAgICJ4b3IgZmYiIFtmYWxzZSBmYWxzZV0gc2F0aXNmaWVzIFt4 b3Igbm90XSA/IDsNCisNCisgIHRlc3QtcG9wID09DQorICAgICJwb3AyIiAgIFsxIDIgMyBwb3Ay XSBzYXRpc2ZpZXMgWzEgPV0gPw0KKyAgICAicG9wb3AiICBbMSAyIDMgcG9wMl0gc2F0aXNmaWVz IFsxID1dID8NCisgICAgInBvcGQiICAgWzEgMiAzIHBvcGRdIHNhdGlzZmllcyBbMyA9XSA/DQor ICAgICJwb3BkIDIiIFsxIDIgMyBwb3BkXSBzYXRpc2ZpZXMgW3BvcCAxID1dID8gOw0KKw0KKyAg dGVzdC1kdXAgPT0NCisgICAgImR1cDIiICAgWzIgMyBkdXAyXSBzYXRpc2ZpZXMgW1syID1dIGRp cCAzID0gYW5kXSA/DQorICAgICJkdXBkIiAgIFsyIDMgZHVwZF0gc2F0aXNmaWVzIFtbMiA9XSBk aXAgMyA9IGFuZF0gPyA7DQorDQorICB0ZXN0LXJvbGwgPT0NCisgICAgInJvbGx1cCIgICBbMSAy IDMgcm9sbHVwXSBzYXRpc2ZpZXMgWzIgPSBbMSA9XSBkaXAgYW5kDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBbMyA9XSBkaXAgYW5kXSA/DQorICAgICJyb2xsZG93 biIgWzEgMiAzIHJvbGxkb3duXSBzYXRpc2ZpZXMgWzEgPSBbMyA9XSBkaXAgYW5kDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsyID1dIGRpcCBhbmRdID8NCisg ICAgInJvdGF0ZSIgICBbMSAyIDMgcm90YXRlXSBzYXRpc2ZpZXMgWzEgPSBbMiA9XSBkaXAgYW5k DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMyA9XSBkaXAgYW5k XSA/IDsNCisNCisgIHRlc3QtYXBwID09DQorICAgICJhcHAyIiBbMSAzIFsxICtdIGFwcDJdIHNh dGlzZmllcyBbNCA9IFsyID1dIGRpcCBhbmRdID8NCisgICAgImFwcDMiIFsxIDMgNSBbMiA+XSBh cHAzXSBzYXRpc2ZpZXMgW2FuZCBbdHJ1ZSA9XQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFtmYWxzZSA9XSBpMl0gPyA7DQorDQorICB0ZXN0LW1heGltYSA9 PQ0KKyAgICAiPj0iICBbMiAzID49IDMgMyA+PSA0IDMgPj1dIHNhdGlzZmllcyBbYW5kIHN3YXAg bm90IGFuZF0gPw0KKyAgICAiPD0iICBbMiAzIDw9IDMgMyA8PSA0IDMgPD1dIHNhdGlzZmllcyBb bm90IGFuZCBhbmRdID8NCisgICAgIiE9IiAgWzIgMyAhPSAzIDMgIT1dICAgICAgICBzYXRpc2Zp ZXMgW25vdCBhbmRdID8NCisgICAgIm1heCIgWzIgMyBtYXggLTIgMyBtYXhdICAgICBzYXRpc2Zp ZXMgW1szID1dIGFwcDIgYW5kXSA/IDsNCisNCisgIHRlc3QtYXJpdGhtZXRpYyA9PQ0KKyAgICAi KiIgWzMgNyAqIDAgNSAqXSBzYXRpc2ZpZXMgW1syMSA9XSBbbnVsbF0gaTIgYW5kXSA/DQorICAg ICJkaXZtb2QiIFsxMSAzIGRpdm1vZF0gc2F0aXNmaWVzIFtbMyA9XSBbMiA9XSBpMiBhbmRdID8N CisgICAgIi8iIFsyMSA1IC8gMjUgMjUgL10gc2F0aXNmaWVzIFtbNCA9XSBbMSA9XSBpMiBhbmRd ID8NCisgICAgIiUiIFsyMSAyICUgMzcgNSAlXSBzYXRpc2ZpZXMgW1sxID1dIFsyID1dIGkyIGFu ZF0gPw0KKyAgICAiZXhwIiAgWzIgMyBleHAgMyAwIGV4cF0gc2F0aXNmaWVzIFtbOCA9XSBbMSA9 XSBpMiBhbmRdID8NCisgICAgOw0KKw0KKyAgdGVzdC1saW5yZWMgPT0NCisgICAgKCogV2UgdGVz dCAqIGFuZCBkaXZtb2QgaGVyZSBiZWNhdXNlIHRoZXkgYXJlIGN1cnJlbnRseQ0KKyAgICAgICBp bXBsZW1lbnRlZCBpbiBqb3kgaXRzZWxmIHVzaW5nIGxpbmVhciByZWN1cnNpb24uICopDQorICAg ICJmYWN0IiBbMCBmYWN0IDQgZmFjdF0gc2F0aXNmaWVzIFtbMSA9XSBbMjQgPV0gaTIgYW5kXSA/ DQorICAgICJzdW0tdXAtdG8iIFs2IHN1bS11cC10b10gc2F0aXNmaWVzIFsyMSA9XSA/IDsNCisN CisgIHRlc3QtYWdncmVnYXRlcyA9PQ0KKyAgICAic3RlcCIgW1sxIDIgM10gW10gc3RlcF0NCisg ICAgICAgICAgIHNhdGlzZmllcyBbWzIgPV0gWzMgPV0gaTIgYW5kIFsxID1dIGRpcCBhbmRdID8N CisgICAgInN0ZXAgKyIgW1sxIDNdIFs1ICtdIHN0ZXBdIHNhdGlzZmllcyBbWzYgPV0gWzggPV0g aTIgYW5kXSA/DQorICAgICJyZXZlcnNlIiBbWzEgMl0gcmV2ZXJzZV0NCisgICAgICAgICAgICAg IHNhdGlzZmllcyBbW1sxID1dIFsyID1dIGkyIGFuZF0gaW5mcmEgY2FyXSA/DQorICAgICJmb2xk ICsiIFtbMSA0IDVdIDAgWytdIGZvbGRdIHNhdGlzZmllcyBbMTAgPV0gPw0KKyAgICAiZm9sZCBz d29ucyIgW1sxIDQgNV0gW10gW3N3b25zXSBmb2xkXQ0KKyAgICAgICAgICAgICAgICAgc2F0aXNm aWVzIFt1bnN0YWNrIDUgPSBzd2FwIDQgPSBhbmQgWzEgPV0gZGlwIGFuZF0gPw0KKyAgICAiZm9s ZCBvciIgW1tmYWxzZSB0cnVlIGZhbHNlXSBmYWxzZSBbb3JdIGZvbGRdDQorICAgICAgICAgICAg ICBzYXRpc2ZpZXMgW3RydWUgPV0gPw0KKyAgICAiZm9sZCBhbmQiIFtbdHJ1ZSB0cnVlIGZhbHNl XSB0cnVlIFthbmRdIGZvbGRdDQorICAgICAgICAgICAgICAgc2F0aXNmaWVzIFtmYWxzZSA9XSA/ DQorICAgICJzdW0iIFtbMSAyIDggOV0gc3VtXSBzYXRpc2ZpZXMgWzIwID1dID8NCisgICAgInBy b2R1Y3QiIFtbMSAyIDggOV0gcHJvZHVjdF0gc2F0aXNmaWVzIFsxNDQgPV0gPw0KKyAgICAic2l6 ZSIgW1tdIHNpemUgWzEgNCA4IDldIHNpemVdIHNhdGlzZmllcyBbWzAgPV0gWzQgPV0gaTIgYW5k XSA/DQorICAgICJtYXAgaWQiIFtbMSAyXSBbXSBtYXBdDQorICAgICAgICAgICAgIHNhdGlzZmll cyBbW1syID1dIFsxID1dIGkyIGFuZF0gaW5mcmEgY2FyXSA/DQorICAgICJtYXAgKyIgW1sxIDJd IFsxMCArXSBtYXBdDQorICAgICAgICAgICAgc2F0aXNmaWVzIFtbWzEyID1dIFsxMSA9XSBpMiBh bmRdIGluZnJhIGNhcl0gPw0KKyAgICAibWFwID4iIFtbMyA3XSBbNCA+XSBtYXBdDQorICAgICAg ICAgICAgc2F0aXNmaWVzIFtbW3RydWUgPV0gW2ZhbHNlID1dIGkyIGFuZF0gaW5mcmEgY2FyXSA/ DQorICAgICJkcm9wIiBbWzEgMiAzXSBbMSBkcm9wIGNhcl0gWzIgZHJvcCBjYXJdIGNsZWF2ZV0N CisgICAgICAgICAgIHNhdGlzZmllcyBbWzIgPV0gWzMgPV0gaTIgYW5kXSA/DQorICAgICJ0YWtl IiBbWzEgMiAzXSBbMiB0YWtlIGldIFsxIHRha2UgaV0gY2xlYXZlXQ0KKyAgICAgICAgICAgc2F0 aXNmaWVzIFtbMiA9XSBbMSA9XSBpMiBhbmRdID8NCisgICAgImF0IiAgIFtbMSAyIDMgNF0gWzIg YXRdIFsxIGF0XSBjbGVhdmVdDQorICAgICAgICAgICBzYXRpc2ZpZXMgW1szID1dIFsyID1dIGky IGFuZF0gPw0KKyAgICAib2YiICAgW1sxIDIgMyA0XSBbMiBzd2FwIG9mXSBbMSBzd2FwIG9mXSBj bGVhdmVdDQorICAgICAgICAgICBzYXRpc2ZpZXMgW1szID1dIFsyID1dIGkyIGFuZF0gPw0KKyAg ICA7DQorDQorICBydW4tYmFzZS10ZXN0cyA9PQ0KKyAgICB0ZXN0LXN3b25zDQorICAgIHRlc3Qt dW5zd29ucw0KKyAgICB0ZXN0LWNhcg0KKyAgICB0ZXN0LWNkcg0KKyAgICB0ZXN0LWNhZHINCisg ICAgdGVzdC1maXJzdA0KKyAgICB0ZXN0LXNlY29uZA0KKyAgICB0ZXN0LXRoaXJkDQorICAgIHRl c3QtYm9vbGVhbnMNCisgICAgdGVzdC1sZWFmDQorICAgIHRlc3QtbnVsbA0KKyAgICB0ZXN0LW51 bGxkDQorICAgIHRlc3QtbmV3c3RhY2sNCisgICAgdGVzdC1pDQorICAgIHRlc3QtZGlwDQorICAg IHRlc3QtYg0KKyAgICB0ZXN0LWNsZWF2ZQ0KKyAgICB0ZXN0LWJyYW5jaA0KKyAgICB0ZXN0LWxv Z2ljDQorICAgIHRlc3QtcG9wDQorICAgIHRlc3QtZHVwDQorICAgIHRlc3Qtcm9sbA0KKyAgICB0 ZXN0LW1heGltYQ0KKyAgICB0ZXN0LWFyaXRobWV0aWMNCisgICAgdGVzdC1saW5yZWMNCisgICAg dGVzdC1hZ2dyZWdhdGVzDQorRU5EDQorDQorcnVuLWJhc2UtdGVzdHMgLg0KXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlDQotLSANCjIuNi4zDQoNCg== --MP_/sAF_ITcet/ZClYF6alaKpdX--