From kwrite-devel Thu Jun 19 17:43:36 2014 From: =?iso-8859-1?Q?Carlos_Andr=E9s_Jim=E9nez_Chaverri?= Date: Thu, 19 Jun 2014 17:43:36 +0000 To: kwrite-devel Subject: Kate Script: JS beautifier Message-Id: <1403199816.83677.YahooMailNeo () web171804 ! mail ! ir2 ! yahoo ! com> X-MARC-Message: https://marc.info/?l=kwrite-devel&m=140334225129380 MIME-Version: 1 Content-Type: multipart/mixed; boundary="---1066824098-1229438011-1403199816=:83677" ---1066824098-1229438011-1403199816=:83677 Content-Type: multipart/alternative; boundary="-1066824098-1381208308-1403199816=:83677" ---1066824098-1381208308-1403199816=:83677 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Today I want to share a idea,=A0I am a Javascript developer and usually use= =A0http://jsbeautifier.org/ to get fancy my JS code.=0AToday I developed a = Kate Script to do that without use the online application.=0A=0APlease past= e the file like that:=0A$KDEDIR/share/apps/katepart/script/commands/jsbeaut= ify.js.$KDEDIR/share/apps/katepart/script/libraries/beautifier.js=0A=0A=0AT= he code (beautifier.js) is the same as the online app use. Just a couple of= changes to run with the kate script.=0AThe command for kate is "jsbeautifi= er" (Tools -> Scripts -> Js Beatify)=0A=0ARegards. ---1066824098-1381208308-1403199816=:83677 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable
Today I want to share a idea, = ;I am a Javascript developer= and usually use http://jsbeautifier.org/ to get fancy my JS code.
Today I developed a Kate Script to do that without use the online appli= cation.

Please paste the file like that= :
$KDEDIR/share/apps/katepart/script/commands/jsbeautify.js.$KDEDIR/sha= re/apps/katepart/script/libraries/beauti= fier.js

The code (beautifier.js) is the same as the online app use. Jus= t a couple of changes to run with the kate script.
The command for kate is "jsbeautifier= " (Tools -> Scripts -> Js Beatify)

Regards.
---1066824098-1381208308-1403199816=:83677-- ---1066824098-1229438011-1403199816=:83677 Content-Type: application/javascript; name="beautifier.js" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="beautifier.js" Lypqc2hpbnQgY3VybHk6dHJ1ZSwgZXFlcWVxOnRydWUsIGxheGJyZWFrOnRy dWUsIG5vZW1wdHk6ZmFsc2UgKi8KLyoKCiAgVGhlIE1JVCBMaWNlbnNlIChN SVQpCgogIENvcHlyaWdodCAoYykgMjAwNy0yMDEzIEVpbmFyIExpZWxtYW5p cyBhbmQgY29udHJpYnV0b3JzLgoKICBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgogIG9idGFp bmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzCiAgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwKICBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLAogIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs CiAgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywKICBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKCiAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKICBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KCiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAgRVhQUkVT UyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GCiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKICBOT05JTkZSSU5HRU1FTlQu IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTCiAgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCiAgQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQg T0YgT1IgSU4KICBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAgU09GVFdBUkUuCgog SlMgQmVhdXRpZmllcgotLS0tLS0tLS0tLS0tLS0KCgogIFdyaXR0ZW4gYnkg RWluYXIgTGllbG1hbmlzLCA8ZWluYXJAanNiZWF1dGlmaWVyLm9yZz4KICAg ICAgaHR0cDovL2pzYmVhdXRpZmllci5vcmcvCgogIE9yaWdpbmFsbHkgY29u dmVydGVkIHRvIGphdmFzY3JpcHQgYnkgVml0YWwsIDx2aXRhbDc2QGdtYWls LmNvbT4KICAiRW5kIGJyYWNlcyBvbiBvd24gbGluZSIgYWRkZWQgYnkgQ2hy aXMgSi4gU2h1bGwsIDxjaHJpc2pzaHVsbEBnbWFpbC5jb20+CiAgUGFyc2lu ZyBpbXByb3ZlbWVudHMgZm9yIGJyYWNlLWxlc3Mgc3RhdGVtZW50cyBieSBM aWFtIE5ld21hbiA8Yml0d2lzZW1hbkBnbWFpbC5jb20+CgoKICBVc2FnZToK ICAgIGpzX2JlYXV0aWZ5KGpzX3NvdXJjZV90ZXh0KTsKICAgIGpzX2JlYXV0 aWZ5KGpzX3NvdXJjZV90ZXh0LCBvcHRpb25zKTsKCiAgVGhlIG9wdGlvbnMg YXJlOgogICAgaW5kZW50X3NpemUgKGRlZmF1bHQgNCkgICAgICAgICAgLSBp bmRlbnRhdGlvbiBzaXplLAogICAgaW5kZW50X2NoYXIgKGRlZmF1bHQgc3Bh Y2UpICAgICAgLSBjaGFyYWN0ZXIgdG8gaW5kZW50IHdpdGgsCiAgICBwcmVz ZXJ2ZV9uZXdsaW5lcyAoZGVmYXVsdCB0cnVlKSAtIHdoZXRoZXIgZXhpc3Rp bmcgbGluZSBicmVha3Mgc2hvdWxkIGJlIHByZXNlcnZlZCwKICAgIG1heF9w cmVzZXJ2ZV9uZXdsaW5lcyAoZGVmYXVsdCB1bmxpbWl0ZWQpIC0gbWF4aW11 bSBudW1iZXIgb2YgbGluZSBicmVha3MgdG8gYmUgcHJlc2VydmVkIGluIG9u ZSBjaHVuaywKCiAgICBqc2xpbnRfaGFwcHkgKGRlZmF1bHQgZmFsc2UpIC0g aWYgdHJ1ZSwgdGhlbiBqc2xpbnQtc3RyaWN0ZXIgbW9kZSBpcyBlbmZvcmNl ZC4KCiAgICAgICAgICAgIGpzbGludF9oYXBweSAgICAgICAhanNsaW50X2hh cHB5CiAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICAgICAgICAgICBmdW5jdGlvbiAoKSAgICAgICAgZnVuY3Rpb24o KQoKICAgIGJyYWNlX3N0eWxlIChkZWZhdWx0ICJjb2xsYXBzZSIpIC0gImNv bGxhcHNlIiB8ICJleHBhbmQiIHwgImVuZC1leHBhbmQiCiAgICAgICAgICAg IHB1dCBicmFjZXMgb24gdGhlIHNhbWUgbGluZSBhcyBjb250cm9sIHN0YXRl bWVudHMgKGRlZmF1bHQpLCBvciBwdXQgYnJhY2VzIG9uIG93biBsaW5lIChB bGxtYW4gLyBBTlNJIHN0eWxlKSwgb3IganVzdCBwdXQgZW5kIGJyYWNlcyBv biBvd24gbGluZS4KCiAgICBzcGFjZV9iZWZvcmVfY29uZGl0aW9uYWwgKGRl ZmF1bHQgdHJ1ZSkgLSBzaG91bGQgdGhlIHNwYWNlIGJlZm9yZSBjb25kaXRp b25hbCBzdGF0ZW1lbnQgYmUgYWRkZWQsICJpZih0cnVlKSIgdnMgImlmICh0 cnVlKSIsCgogICAgdW5lc2NhcGVfc3RyaW5ncyAoZGVmYXVsdCBmYWxzZSkg LSBzaG91bGQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gc3RyaW5ncyBlbmNv ZGVkIGluIFx4Tk4gbm90YXRpb24gYmUgdW5lc2NhcGVkLCAiZXhhbXBsZSIg dnMgIlx4NjVceDc4XHg2MVx4NmRceDcwXHg2Y1x4NjUiCgogICAgd3JhcF9s aW5lX2xlbmd0aCAoZGVmYXVsdCB1bmxpbWl0ZWQpIC0gbGluZXMgc2hvdWxk IHdyYXAgYXQgbmV4dCBvcHBvcnR1bml0eSBhZnRlciB0aGlzIG51bWJlciBv ZiBjaGFyYWN0ZXJzLgogICAgICAgICAgTk9URTogVGhpcyBpcyBub3QgYSBo YXJkIGxpbWl0LiBMaW5lcyB3aWxsIGNvbnRpbnVlIHVudGlsIGEgcG9pbnQg d2hlcmUgYSBuZXdsaW5lIHdvdWxkCiAgICAgICAgICAgICAgICBiZSBwcmVz ZXJ2ZWQgaWYgaXQgd2VyZSBwcmVzZW50LgoKICAgIGUuZwoKICAgIGpzX2Jl YXV0aWZ5KGpzX3NvdXJjZV90ZXh0LCB7CiAgICAgICdpbmRlbnRfc2l6ZSc6 IDEsCiAgICAgICdpbmRlbnRfY2hhcic6ICdcdCcKICAgIH0pOwoKKi8KdmFy IGdsb2JhbCA9IHRoaXM7CgooZnVuY3Rpb24oKSB7CgogICAgdmFyIGFjb3Ju ID0ge307CiAgICAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAgLy8gVGhp cyBzZWN0aW9uIG9mIGNvZGUgaXMgdGFrZW4gZnJvbSBhY29ybi4KICAgICAg Ly8KICAgICAgLy8gQWNvcm4gd2FzIHdyaXR0ZW4gYnkgTWFyaWpuIEhhdmVy YmVrZSBhbmQgcmVsZWFzZWQgdW5kZXIgYW4gTUlUCiAgICAgIC8vIGxpY2Vu c2UuIFRoZSBVbmljb2RlIHJlZ2V4cHMgKGZvciBpZGVudGlmaWVycyBhbmQg d2hpdGVzcGFjZSkgd2VyZQogICAgICAvLyB0YWtlbiBmcm9tIFtFc3ByaW1h XShodHRwOi8vZXNwcmltYS5vcmcpIGJ5IEFyaXlhIEhpZGF5YXQuCiAgICAg IC8vCiAgICAgIC8vIEdpdCByZXBvc2l0b3JpZXMgZm9yIEFjb3JuIGFyZSBh dmFpbGFibGUgYXQKICAgICAgLy8KICAgICAgLy8gICAgIGh0dHA6Ly9tYXJp am5oYXZlcmJla2UubmwvZ2l0L2Fjb3JuCiAgICAgIC8vICAgICBodHRwczov L2dpdGh1Yi5jb20vbWFyaWpuaC9hY29ybi5naXQKCiAgICAgIC8vICMjIENo YXJhY3RlciBjYXRlZ29yaWVzCgogICAgICAvLyBCaWcgdWdseSByZWd1bGFy IGV4cHJlc3Npb25zIHRoYXQgbWF0Y2ggY2hhcmFjdGVycyBpbiB0aGUKICAg ICAgLy8gd2hpdGVzcGFjZSwgaWRlbnRpZmllciwgYW5kIGlkZW50aWZpZXIt c3RhcnQgY2F0ZWdvcmllcy4gVGhlc2UKICAgICAgLy8gYXJlIG9ubHkgYXBw bGllZCB3aGVuIGEgY2hhcmFjdGVyIGlzIGZvdW5kIHRvIGFjdHVhbGx5IGhh dmUgYQogICAgICAvLyBjb2RlIHBvaW50IGFib3ZlIDEyOC4KCiAgICAgIHZh ciBub25BU0NJSXdoaXRlc3BhY2UgPSAvW1x1MTY4MFx1MTgwZVx1MjAwMC1c dTIwMGFcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmZdLzsKICAgICAgdmFyIG5v bkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgPSAiXHhhYVx4YjVceGJhXHhj MC1ceGQ2XHhkOC1ceGY2XHhmOC1cdTAyYzFcdTAyYzYtXHUwMmQxXHUwMmUw LVx1MDJlNFx1MDJlY1x1MDJlZVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzdc dTAzN2EtXHUwMzdkXHUwMzg2XHUwMzg4LVx1MDM4YVx1MDM4Y1x1MDM4ZS1c dTAzYTFcdTAzYTMtXHUwM2Y1XHUwM2Y3LVx1MDQ4MVx1MDQ4YS1cdTA1Mjdc dTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVkMC1cdTA1ZWFc dTA1ZjAtXHUwNWYyXHUwNjIwLVx1MDY0YVx1MDY2ZVx1MDY2Zlx1MDY3MS1c dTA2ZDNcdTA2ZDVcdTA2ZTVcdTA2ZTZcdTA2ZWVcdTA2ZWZcdTA2ZmEtXHUw NmZjXHUwNmZmXHUwNzEwXHUwNzEyLVx1MDcyZlx1MDc0ZC1cdTA3YTVcdTA3 YjFcdTA3Y2EtXHUwN2VhXHUwN2Y0XHUwN2Y1XHUwN2ZhXHUwODAwLVx1MDgx NVx1MDgxYVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4YTBcdTA4YTIt XHUwOGFjXHUwOTA0LVx1MDkzOVx1MDkzZFx1MDk1MFx1MDk1OC1cdTA5NjFc dTA5NzEtXHUwOTc3XHUwOTc5LVx1MDk3Zlx1MDk4NS1cdTA5OGNcdTA5OGZc dTA5OTBcdTA5OTMtXHUwOWE4XHUwOWFhLVx1MDliMFx1MDliMlx1MDliNi1c dTA5YjlcdTA5YmRcdTA5Y2VcdTA5ZGNcdTA5ZGRcdTA5ZGYtXHUwOWUxXHUw OWYwXHUwOWYxXHUwYTA1LVx1MGEwYVx1MGEwZlx1MGExMFx1MGExMy1cdTBh MjhcdTBhMmEtXHUwYTMwXHUwYTMyXHUwYTMzXHUwYTM1XHUwYTM2XHUwYTM4 XHUwYTM5XHUwYTU5LVx1MGE1Y1x1MGE1ZVx1MGE3Mi1cdTBhNzRcdTBhODUt XHUwYThkXHUwYThmLVx1MGE5MVx1MGE5My1cdTBhYThcdTBhYWEtXHUwYWIw XHUwYWIyXHUwYWIzXHUwYWI1LVx1MGFiOVx1MGFiZFx1MGFkMFx1MGFlMFx1 MGFlMVx1MGIwNS1cdTBiMGNcdTBiMGZcdTBiMTBcdTBiMTMtXHUwYjI4XHUw YjJhLVx1MGIzMFx1MGIzMlx1MGIzM1x1MGIzNS1cdTBiMzlcdTBiM2RcdTBi NWNcdTBiNWRcdTBiNWYtXHUwYjYxXHUwYjcxXHUwYjgzXHUwYjg1LVx1MGI4 YVx1MGI4ZS1cdTBiOTBcdTBiOTItXHUwYjk1XHUwYjk5XHUwYjlhXHUwYjlj XHUwYjllXHUwYjlmXHUwYmEzXHUwYmE0XHUwYmE4LVx1MGJhYVx1MGJhZS1c dTBiYjlcdTBiZDBcdTBjMDUtXHUwYzBjXHUwYzBlLVx1MGMxMFx1MGMxMi1c dTBjMjhcdTBjMmEtXHUwYzMzXHUwYzM1LVx1MGMzOVx1MGMzZFx1MGM1OFx1 MGM1OVx1MGM2MFx1MGM2MVx1MGM4NS1cdTBjOGNcdTBjOGUtXHUwYzkwXHUw YzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNcdTBjYjUtXHUwY2I5XHUwY2JkXHUw Y2RlXHUwY2UwXHUwY2UxXHUwY2YxXHUwY2YyXHUwZDA1LVx1MGQwY1x1MGQw ZS1cdTBkMTBcdTBkMTItXHUwZDNhXHUwZDNkXHUwZDRlXHUwZDYwXHUwZDYx XHUwZDdhLVx1MGQ3Zlx1MGQ4NS1cdTBkOTZcdTBkOWEtXHUwZGIxXHUwZGIz LVx1MGRiYlx1MGRiZFx1MGRjMC1cdTBkYzZcdTBlMDEtXHUwZTMwXHUwZTMy XHUwZTMzXHUwZTQwLVx1MGU0Nlx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1 MGU4OFx1MGU4YVx1MGU4ZFx1MGU5NC1cdTBlOTdcdTBlOTktXHUwZTlmXHUw ZWExLVx1MGVhM1x1MGVhNVx1MGVhN1x1MGVhYVx1MGVhYlx1MGVhZC1cdTBl YjBcdTBlYjJcdTBlYjNcdTBlYmRcdTBlYzAtXHUwZWM0XHUwZWM2XHUwZWRj LVx1MGVkZlx1MGYwMFx1MGY0MC1cdTBmNDdcdTBmNDktXHUwZjZjXHUwZjg4 LVx1MGY4Y1x1MTAwMC1cdTEwMmFcdTEwM2ZcdTEwNTAtXHUxMDU1XHUxMDVh LVx1MTA1ZFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2ZS1cdTEwNzBcdTEwNzUt XHUxMDgxXHUxMDhlXHUxMGEwLVx1MTBjNVx1MTBjN1x1MTBjZFx1MTBkMC1c dTEwZmFcdTEwZmMtXHUxMjQ4XHUxMjRhLVx1MTI0ZFx1MTI1MC1cdTEyNTZc dTEyNThcdTEyNWEtXHUxMjVkXHUxMjYwLVx1MTI4OFx1MTI4YS1cdTEyOGRc dTEyOTAtXHUxMmIwXHUxMmIyLVx1MTJiNVx1MTJiOC1cdTEyYmVcdTEyYzBc dTEyYzItXHUxMmM1XHUxMmM4LVx1MTJkNlx1MTJkOC1cdTEzMTBcdTEzMTIt XHUxMzE1XHUxMzE4LVx1MTM1YVx1MTM4MC1cdTEzOGZcdTEzYTAtXHUxM2Y0 XHUxNDAxLVx1MTY2Y1x1MTY2Zi1cdTE2N2ZcdTE2ODEtXHUxNjlhXHUxNmEw LVx1MTZlYVx1MTZlZS1cdTE2ZjBcdTE3MDAtXHUxNzBjXHUxNzBlLVx1MTcx MVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Y1x1MTc2 ZS1cdTE3NzBcdTE3ODAtXHUxN2IzXHUxN2Q3XHUxN2RjXHUxODIwLVx1MTg3 N1x1MTg4MC1cdTE4YThcdTE4YWFcdTE4YjAtXHUxOGY1XHUxOTAwLVx1MTkx Y1x1MTk1MC1cdTE5NmRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlhYlx1MTlj MS1cdTE5YzdcdTFhMDAtXHUxYTE2XHUxYTIwLVx1MWE1NFx1MWFhN1x1MWIw NS1cdTFiMzNcdTFiNDUtXHUxYjRiXHUxYjgzLVx1MWJhMFx1MWJhZVx1MWJh Zlx1MWJiYS1cdTFiZTVcdTFjMDAtXHUxYzIzXHUxYzRkLVx1MWM0Zlx1MWM1 YS1cdTFjN2RcdTFjZTktXHUxY2VjXHUxY2VlLVx1MWNmMVx1MWNmNVx1MWNm Nlx1MWQwMC1cdTFkYmZcdTFlMDAtXHUxZjE1XHUxZjE4LVx1MWYxZFx1MWYy MC1cdTFmNDVcdTFmNDgtXHUxZjRkXHUxZjUwLVx1MWY1N1x1MWY1OVx1MWY1 Ylx1MWY1ZFx1MWY1Zi1cdTFmN2RcdTFmODAtXHUxZmI0XHUxZmI2LVx1MWZi Y1x1MWZiZVx1MWZjMi1cdTFmYzRcdTFmYzYtXHUxZmNjXHUxZmQwLVx1MWZk M1x1MWZkNi1cdTFmZGJcdTFmZTAtXHUxZmVjXHUxZmYyLVx1MWZmNFx1MWZm Ni1cdTFmZmNcdTIwNzFcdTIwN2ZcdTIwOTAtXHUyMDljXHUyMTAyXHUyMTA3 XHUyMTBhLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMWRcdTIxMjRcdTIxMjZc dTIxMjhcdTIxMmEtXHUyMTJkXHUyMTJmLVx1MjEzOVx1MjEzYy1cdTIxM2Zc dTIxNDUtXHUyMTQ5XHUyMTRlXHUyMTYwLVx1MjE4OFx1MmMwMC1cdTJjMmVc dTJjMzAtXHUyYzVlXHUyYzYwLVx1MmNlNFx1MmNlYi1cdTJjZWVcdTJjZjJc dTJjZjNcdTJkMDAtXHUyZDI1XHUyZDI3XHUyZDJkXHUyZDMwLVx1MmQ2N1x1 MmQ2Zlx1MmQ4MC1cdTJkOTZcdTJkYTAtXHUyZGE2XHUyZGE4LVx1MmRhZVx1 MmRiMC1cdTJkYjZcdTJkYjgtXHUyZGJlXHUyZGMwLVx1MmRjNlx1MmRjOC1c dTJkY2VcdTJkZDAtXHUyZGQ2XHUyZGQ4LVx1MmRkZVx1MmUyZlx1MzAwNS1c dTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM2Nc dTMwNDEtXHUzMDk2XHUzMDlkLVx1MzA5Zlx1MzBhMS1cdTMwZmFcdTMwZmMt XHUzMGZmXHUzMTA1LVx1MzEyZFx1MzEzMS1cdTMxOGVcdTMxYTAtXHUzMWJh XHUzMWYwLVx1MzFmZlx1MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhMDAw LVx1YTQ4Y1x1YTRkMC1cdWE0ZmRcdWE1MDAtXHVhNjBjXHVhNjEwLVx1YTYx Zlx1YTYyYVx1YTYyYlx1YTY0MC1cdWE2NmVcdWE2N2YtXHVhNjk3XHVhNmEw LVx1YTZlZlx1YTcxNy1cdWE3MWZcdWE3MjItXHVhNzg4XHVhNzhiLVx1YTc4 ZVx1YTc5MC1cdWE3OTNcdWE3YTAtXHVhN2FhXHVhN2Y4LVx1YTgwMVx1YTgw My1cdWE4MDVcdWE4MDctXHVhODBhXHVhODBjLVx1YTgyMlx1YTg0MC1cdWE4 NzNcdWE4ODItXHVhOGIzXHVhOGYyLVx1YThmN1x1YThmYlx1YTkwYS1cdWE5 MjVcdWE5MzAtXHVhOTQ2XHVhOTYwLVx1YTk3Y1x1YTk4NC1cdWE5YjJcdWE5 Y2ZcdWFhMDAtXHVhYTI4XHVhYTQwLVx1YWE0Mlx1YWE0NC1cdWFhNGJcdWFh NjAtXHVhYTc2XHVhYTdhXHVhYTgwLVx1YWFhZlx1YWFiMVx1YWFiNVx1YWFi Nlx1YWFiOS1cdWFhYmRcdWFhYzBcdWFhYzJcdWFhZGItXHVhYWRkXHVhYWUw LVx1YWFlYVx1YWFmMi1cdWFhZjRcdWFiMDEtXHVhYjA2XHVhYjA5LVx1YWIw ZVx1YWIxMS1cdWFiMTZcdWFiMjAtXHVhYjI2XHVhYjI4LVx1YWIyZVx1YWJj MC1cdWFiZTJcdWFjMDAtXHVkN2EzXHVkN2IwLVx1ZDdjNlx1ZDdjYi1cdWQ3 ZmJcdWY5MDAtXHVmYTZkXHVmYTcwLVx1ZmFkOVx1ZmIwMC1cdWZiMDZcdWZi MTMtXHVmYjE3XHVmYjFkXHVmYjFmLVx1ZmIyOFx1ZmIyYS1cdWZiMzZcdWZi MzgtXHVmYjNjXHVmYjNlXHVmYjQwXHVmYjQxXHVmYjQzXHVmYjQ0XHVmYjQ2 LVx1ZmJiMVx1ZmJkMy1cdWZkM2RcdWZkNTAtXHVmZDhmXHVmZDkyLVx1ZmRj N1x1ZmRmMC1cdWZkZmJcdWZlNzAtXHVmZTc0XHVmZTc2LVx1ZmVmY1x1ZmYy MS1cdWZmM2FcdWZmNDEtXHVmZjVhXHVmZjY2LVx1ZmZiZVx1ZmZjMi1cdWZm YzdcdWZmY2EtXHVmZmNmXHVmZmQyLVx1ZmZkN1x1ZmZkYS1cdWZmZGMiOwog ICAgICB2YXIgbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgPSAiXHUwMzAwLVx1 MDM2Zlx1MDQ4My1cdTA0ODdcdTA1OTEtXHUwNWJkXHUwNWJmXHUwNWMxXHUw NWMyXHUwNWM0XHUwNWM1XHUwNWM3XHUwNjEwLVx1MDYxYVx1MDYyMC1cdTA2 NDlcdTA2NzItXHUwNmQzXHUwNmU3LVx1MDZlOFx1MDZmYi1cdTA2ZmNcdTA3 MzAtXHUwNzRhXHUwODAwLVx1MDgxNFx1MDgxYi1cdTA4MjNcdTA4MjUtXHUw ODI3XHUwODI5LVx1MDgyZFx1MDg0MC1cdTA4NTdcdTA4ZTQtXHUwOGZlXHUw OTAwLVx1MDkwM1x1MDkzYS1cdTA5M2NcdTA5M2UtXHUwOTRmXHUwOTUxLVx1 MDk1N1x1MDk2Mi1cdTA5NjNcdTA5NjYtXHUwOTZmXHUwOTgxLVx1MDk4M1x1 MDliY1x1MDliZS1cdTA5YzRcdTA5YzdcdTA5YzhcdTA5ZDdcdTA5ZGYtXHUw OWUwXHUwYTAxLVx1MGEwM1x1MGEzY1x1MGEzZS1cdTBhNDJcdTBhNDdcdTBh NDhcdTBhNGItXHUwYTRkXHUwYTUxXHUwYTY2LVx1MGE3MVx1MGE3NVx1MGE4 MS1cdTBhODNcdTBhYmNcdTBhYmUtXHUwYWM1XHUwYWM3LVx1MGFjOVx1MGFj Yi1cdTBhY2RcdTBhZTItXHUwYWUzXHUwYWU2LVx1MGFlZlx1MGIwMS1cdTBi MDNcdTBiM2NcdTBiM2UtXHUwYjQ0XHUwYjQ3XHUwYjQ4XHUwYjRiLVx1MGI0 ZFx1MGI1Nlx1MGI1N1x1MGI1Zi1cdTBiNjBcdTBiNjYtXHUwYjZmXHUwYjgy XHUwYmJlLVx1MGJjMlx1MGJjNi1cdTBiYzhcdTBiY2EtXHUwYmNkXHUwYmQ3 XHUwYmU2LVx1MGJlZlx1MGMwMS1cdTBjMDNcdTBjNDYtXHUwYzQ4XHUwYzRh LVx1MGM0ZFx1MGM1NVx1MGM1Nlx1MGM2Mi1cdTBjNjNcdTBjNjYtXHUwYzZm XHUwYzgyXHUwYzgzXHUwY2JjXHUwY2JlLVx1MGNjNFx1MGNjNi1cdTBjYzhc dTBjY2EtXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2UyLVx1MGNlM1x1MGNlNi1c dTBjZWZcdTBkMDJcdTBkMDNcdTBkNDYtXHUwZDQ4XHUwZDU3XHUwZDYyLVx1 MGQ2M1x1MGQ2Ni1cdTBkNmZcdTBkODJcdTBkODNcdTBkY2FcdTBkY2YtXHUw ZGQ0XHUwZGQ2XHUwZGQ4LVx1MGRkZlx1MGRmMlx1MGRmM1x1MGUzNC1cdTBl M2FcdTBlNDAtXHUwZTQ1XHUwZTUwLVx1MGU1OVx1MGViNC1cdTBlYjlcdTBl YzgtXHUwZWNkXHUwZWQwLVx1MGVkOVx1MGYxOFx1MGYxOVx1MGYyMC1cdTBm MjlcdTBmMzVcdTBmMzdcdTBmMzlcdTBmNDEtXHUwZjQ3XHUwZjcxLVx1MGY4 NFx1MGY4Ni1cdTBmODdcdTBmOGQtXHUwZjk3XHUwZjk5LVx1MGZiY1x1MGZj Nlx1MTAwMC1cdTEwMjlcdTEwNDAtXHUxMDQ5XHUxMDY3LVx1MTA2ZFx1MTA3 MS1cdTEwNzRcdTEwODItXHUxMDhkXHUxMDhmLVx1MTA5ZFx1MTM1ZC1cdTEz NWZcdTE3MGUtXHUxNzEwXHUxNzIwLVx1MTczMFx1MTc0MC1cdTE3NTBcdTE3 NzJcdTE3NzNcdTE3ODAtXHUxN2IyXHUxN2RkXHUxN2UwLVx1MTdlOVx1MTgw Yi1cdTE4MGRcdTE4MTAtXHUxODE5XHUxOTIwLVx1MTkyYlx1MTkzMC1cdTE5 M2JcdTE5NTEtXHUxOTZkXHUxOWIwLVx1MTljMFx1MTljOC1cdTE5YzlcdTE5 ZDAtXHUxOWQ5XHUxYTAwLVx1MWExNVx1MWEyMC1cdTFhNTNcdTFhNjAtXHUx YTdjXHUxYTdmLVx1MWE4OVx1MWE5MC1cdTFhOTlcdTFiNDYtXHUxYjRiXHUx YjUwLVx1MWI1OVx1MWI2Yi1cdTFiNzNcdTFiYjAtXHUxYmI5XHUxYmU2LVx1 MWJmM1x1MWMwMC1cdTFjMjJcdTFjNDAtXHUxYzQ5XHUxYzViLVx1MWM3ZFx1 MWNkMC1cdTFjZDJcdTFkMDAtXHUxZGJlXHUxZTAxLVx1MWYxNVx1MjAwY1x1 MjAwZFx1MjAzZlx1MjA0MFx1MjA1NFx1MjBkMC1cdTIwZGNcdTIwZTFcdTIw ZTUtXHUyMGYwXHUyZDgxLVx1MmQ5Nlx1MmRlMC1cdTJkZmZcdTMwMjEtXHUz MDI4XHUzMDk5XHUzMDlhXHVhNjQwLVx1YTY2ZFx1YTY3NC1cdWE2N2RcdWE2 OWZcdWE2ZjAtXHVhNmYxXHVhN2Y4LVx1YTgwMFx1YTgwNlx1YTgwYlx1YTgy My1cdWE4MjdcdWE4ODAtXHVhODgxXHVhOGI0LVx1YThjNFx1YThkMC1cdWE4 ZDlcdWE4ZjMtXHVhOGY3XHVhOTAwLVx1YTkwOVx1YTkyNi1cdWE5MmRcdWE5 MzAtXHVhOTQ1XHVhOTgwLVx1YTk4M1x1YTliMy1cdWE5YzBcdWFhMDAtXHVh YTI3XHVhYTQwLVx1YWE0MVx1YWE0Yy1cdWFhNGRcdWFhNTAtXHVhYTU5XHVh YTdiXHVhYWUwLVx1YWFlOVx1YWFmMi1cdWFhZjNcdWFiYzAtXHVhYmUxXHVh YmVjXHVhYmVkXHVhYmYwLVx1YWJmOVx1ZmIyMC1cdWZiMjhcdWZlMDAtXHVm ZTBmXHVmZTIwLVx1ZmUyNlx1ZmUzM1x1ZmUzNFx1ZmU0ZC1cdWZlNGZcdWZm MTAtXHVmZjE5XHVmZjNmIjsKICAgICAgdmFyIG5vbkFTQ0lJaWRlbnRpZmll clN0YXJ0ID0gbmV3IFJlZ0V4cCgiWyIgKyBub25BU0NJSWlkZW50aWZpZXJT dGFydENoYXJzICsgIl0iKTsKICAgICAgdmFyIG5vbkFTQ0lJaWRlbnRpZmll ciA9IG5ldyBSZWdFeHAoIlsiICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRD aGFycyArIG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzICsgIl0iKTsKCiAgICAg IC8vIFdoZXRoZXIgYSBzaW5nbGUgY2hhcmFjdGVyIGRlbm90ZXMgYSBuZXds aW5lLgoKICAgICAgdmFyIG5ld2xpbmUgPSAvW1xuXHJcdTIwMjhcdTIwMjld LzsKCiAgICAgIC8vIE1hdGNoZXMgYSB3aG9sZSBsaW5lIGJyZWFrICh3aGVy ZSBDUkxGIGlzIGNvbnNpZGVyZWQgYSBzaW5nbGUKICAgICAgLy8gbGluZSBi cmVhaykuIFVzZWQgdG8gY291bnQgbGluZXMuCgogICAgICB2YXIgbGluZUJy ZWFrID0gL1xyXG58W1xuXHJcdTIwMjhcdTIwMjldL2c7CgogICAgICAvLyBU ZXN0IHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgY29kZSBzdGFydHMgYW4g aWRlbnRpZmllci4KCiAgICAgIHZhciBpc0lkZW50aWZpZXJTdGFydCA9IGV4 cG9ydHMuaXNJZGVudGlmaWVyU3RhcnQgPSBmdW5jdGlvbihjb2RlKSB7CiAg ICAgICAgaWYgKGNvZGUgPCA2NSkgcmV0dXJuIGNvZGUgPT09IDM2OwogICAg ICAgIGlmIChjb2RlIDwgOTEpIHJldHVybiB0cnVlOwogICAgICAgIGlmIChj b2RlIDwgOTcpIHJldHVybiBjb2RlID09PSA5NTsKICAgICAgICBpZiAoY29k ZSA8IDEyMylyZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gY29kZSA+PSAw eGFhICYmIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZy b21DaGFyQ29kZShjb2RlKSk7CiAgICAgIH07CgogICAgICAvLyBUZXN0IHdo ZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgcGFydCBvZiBhbiBpZGVudGlm aWVyLgoKICAgICAgdmFyIGlzSWRlbnRpZmllckNoYXIgPSBleHBvcnRzLmlz SWRlbnRpZmllckNoYXIgPSBmdW5jdGlvbihjb2RlKSB7CiAgICAgICAgaWYg KGNvZGUgPCA0OCkgcmV0dXJuIGNvZGUgPT09IDM2OwogICAgICAgIGlmIChj b2RlIDwgNTgpIHJldHVybiB0cnVlOwogICAgICAgIGlmIChjb2RlIDwgNjUp IHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoY29kZSA8IDkxKSByZXR1cm4g dHJ1ZTsKICAgICAgICBpZiAoY29kZSA8IDk3KSByZXR1cm4gY29kZSA9PT0g OTU7CiAgICAgICAgaWYgKGNvZGUgPCAxMjMpcmV0dXJuIHRydWU7CiAgICAg ICAgcmV0dXJuIGNvZGUgPj0gMHhhYSAmJiBub25BU0NJSWlkZW50aWZpZXIu dGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKTsKICAgICAgfTsKICAg IH0pKGFjb3JuKTsKCiAgICBmdW5jdGlvbiBqc19iZWF1dGlmeShqc19zb3Vy Y2VfdGV4dCwgb3B0aW9ucykgewogICAgICAgICJ1c2Ugc3RyaWN0IjsKICAg ICAgICB2YXIgYmVhdXRpZmllciA9IG5ldyBCZWF1dGlmaWVyKGpzX3NvdXJj ZV90ZXh0LCBvcHRpb25zKTsKICAgICAgICByZXR1cm4gYmVhdXRpZmllci5i ZWF1dGlmeSgpOwogICAgfQoKICAgIGZ1bmN0aW9uIEJlYXV0aWZpZXIoanNf c291cmNlX3RleHQsIG9wdGlvbnMpIHsKICAgICAgICAidXNlIHN0cmljdCI7 CiAgICAgICAgdmFyIGlucHV0LCBvdXRwdXRfbGluZXM7CiAgICAgICAgdmFy IHRva2VuX3RleHQsIHRva2VuX3R5cGUsIGxhc3RfdHlwZSwgbGFzdF9sYXN0 X3RleHQsIGluZGVudF9zdHJpbmc7CiAgICAgICAgdmFyIGZsYWdzLCBwcmV2 aW91c19mbGFncywgZmxhZ19zdG9yZTsKICAgICAgICB2YXIgd2hpdGVzcGFj ZSwgd29yZGNoYXIsIHB1bmN0LCBwYXJzZXJfcG9zLCBsaW5lX3N0YXJ0ZXJz LCByZXNlcnZlZF93b3JkcywgZGlnaXRzOwogICAgICAgIHZhciBwcmVmaXg7 CiAgICAgICAgdmFyIGlucHV0X3dhbnRlZF9uZXdsaW5lOwogICAgICAgIHZh ciBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rva2VuOwogICAgICAgIHZhciBpbnB1 dF9sZW5ndGgsIG5fbmV3bGluZXMsIHdoaXRlc3BhY2VfYmVmb3JlX3Rva2Vu OwogICAgICAgIHZhciBoYW5kbGVycywgTU9ERSwgb3B0OwogICAgICAgIHZh ciBwcmVpbmRlbnRfc3RyaW5nID0gJyc7CgoKCiAgICAgICAgd2hpdGVzcGFj ZSA9ICJcblxyXHQgIi5zcGxpdCgnJyk7CiAgICAgICAgd29yZGNoYXIgPSAn YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJT VFVWV1hZWjAxMjM0NTY3ODlfJCcuc3BsaXQoJycpOwogICAgICAgIGRpZ2l0 cyA9ICcwMTIzNDU2Nzg5Jy5zcGxpdCgnJyk7CgogICAgICAgIHB1bmN0ID0g JysgLSAqIC8gJSAmICsrIC0tID0gKz0gLT0gKj0gLz0gJT0gPT0gPT09ICE9 ICE9PSA+IDwgPj0gPD0gPj4gPDwgPj4+ID4+Pj0gPj49IDw8PSAmJiAmPSB8 IHx8ICEgfiAsIDogPyBeIF49IHw9IDo6ID0+JzsKICAgICAgICBwdW5jdCAr PSAnIDwlPSA8JSAlPiA8Pz0gPD8gPz4nOyAvLyB0cnkgdG8gYmUgYSBnb29k IGJveSBhbmQgdHJ5IG5vdCB0byBicmVhayB0aGUgbWFya3VwIGxhbmd1YWdl IGlkZW50aWZpZXJzCiAgICAgICAgcHVuY3QgPSBwdW5jdC5zcGxpdCgnICcp OwoKICAgICAgICAvLyB3b3JkcyB3aGljaCBzaG91bGQgYWx3YXlzIHN0YXJ0 IG9uIG5ldyBsaW5lLgogICAgICAgIGxpbmVfc3RhcnRlcnMgPSAnY29udGlu dWUsdHJ5LHRocm93LHJldHVybix2YXIsbGV0LGNvbnN0LGlmLHN3aXRjaCxj YXNlLGRlZmF1bHQsZm9yLHdoaWxlLGJyZWFrLGZ1bmN0aW9uLHlpZWxkJy5z cGxpdCgnLCcpOwogICAgICAgIHJlc2VydmVkX3dvcmRzID0gbGluZV9zdGFy dGVycy5jb25jYXQoWydkbycsICdpbicsICdlbHNlJywgJ2dldCcsICdzZXQn LCAnbmV3JywgJ2NhdGNoJywgJ2ZpbmFsbHknLCAndHlwZW9mJ10pOwoKCiAg ICAgICAgTU9ERSA9IHsKICAgICAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdC bG9ja1N0YXRlbWVudCcsIC8vICdCTE9DSycKICAgICAgICAgICAgU3RhdGVt ZW50OiAnU3RhdGVtZW50JywgLy8gJ1NUQVRFTUVOVCcKICAgICAgICAgICAg T2JqZWN0TGl0ZXJhbDogJ09iamVjdExpdGVyYWwnLCAvLyAnT0JKRUNUJywK ICAgICAgICAgICAgQXJyYXlMaXRlcmFsOiAnQXJyYXlMaXRlcmFsJywgLy8n W0VYUFJFU1NJT05dJywKICAgICAgICAgICAgRm9ySW5pdGlhbGl6ZXI6ICdG b3JJbml0aWFsaXplcicsIC8vJyhGT1ItRVhQUkVTU0lPTiknLAogICAgICAg ICAgICBDb25kaXRpb25hbDogJ0NvbmRpdGlvbmFsJywgLy8nKENPTkQtRVhQ UkVTU0lPTiknLAogICAgICAgICAgICBFeHByZXNzaW9uOiAnRXhwcmVzc2lv bicgLy8nKEVYUFJFU1NJT04pJwogICAgICAgIH07CgogICAgICAgIGhhbmRs ZXJzID0gewogICAgICAgICAgICAnVEtfU1RBUlRfRVhQUic6IGhhbmRsZV9z dGFydF9leHByLAogICAgICAgICAgICAnVEtfRU5EX0VYUFInOiBoYW5kbGVf ZW5kX2V4cHIsCiAgICAgICAgICAgICdUS19TVEFSVF9CTE9DSyc6IGhhbmRs ZV9zdGFydF9ibG9jaywKICAgICAgICAgICAgJ1RLX0VORF9CTE9DSyc6IGhh bmRsZV9lbmRfYmxvY2ssCiAgICAgICAgICAgICdUS19XT1JEJzogaGFuZGxl X3dvcmQsCiAgICAgICAgICAgICdUS19SRVNFUlZFRCc6IGhhbmRsZV93b3Jk LAogICAgICAgICAgICAnVEtfU0VNSUNPTE9OJzogaGFuZGxlX3NlbWljb2xv biwKICAgICAgICAgICAgJ1RLX1NUUklORyc6IGhhbmRsZV9zdHJpbmcsCiAg ICAgICAgICAgICdUS19FUVVBTFMnOiBoYW5kbGVfZXF1YWxzLAogICAgICAg ICAgICAnVEtfT1BFUkFUT1InOiBoYW5kbGVfb3BlcmF0b3IsCiAgICAgICAg ICAgICdUS19DT01NQSc6IGhhbmRsZV9jb21tYSwKICAgICAgICAgICAgJ1RL X0JMT0NLX0NPTU1FTlQnOiBoYW5kbGVfYmxvY2tfY29tbWVudCwKICAgICAg ICAgICAgJ1RLX0lOTElORV9DT01NRU5UJzogaGFuZGxlX2lubGluZV9jb21t ZW50LAogICAgICAgICAgICAnVEtfQ09NTUVOVCc6IGhhbmRsZV9jb21tZW50 LAogICAgICAgICAgICAnVEtfRE9UJzogaGFuZGxlX2RvdCwKICAgICAgICAg ICAgJ1RLX1VOS05PV04nOiBoYW5kbGVfdW5rbm93bgogICAgICAgIH07Cgog ICAgICAgIGZ1bmN0aW9uIGNyZWF0ZV9mbGFncyhmbGFnc19iYXNlLCBtb2Rl KSB7CiAgICAgICAgICAgIHZhciBuZXh0X2luZGVudF9sZXZlbCA9IDA7CiAg ICAgICAgICAgIGlmIChmbGFnc19iYXNlKSB7CiAgICAgICAgICAgICAgICBu ZXh0X2luZGVudF9sZXZlbCA9IGZsYWdzX2Jhc2UuaW5kZW50YXRpb25fbGV2 ZWw7CiAgICAgICAgICAgICAgICBpZiAoIWp1c3RfYWRkZWRfbmV3bGluZSgp ICYmCiAgICAgICAgICAgICAgICAgICAgZmxhZ3NfYmFzZS5saW5lX2luZGVu dF9sZXZlbCA+IG5leHRfaW5kZW50X2xldmVsKSB7CiAgICAgICAgICAgICAg ICAgICAgbmV4dF9pbmRlbnRfbGV2ZWwgPSBmbGFnc19iYXNlLmxpbmVfaW5k ZW50X2xldmVsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9Cgog ICAgICAgICAgICB2YXIgbmV4dF9mbGFncyA9IHsKICAgICAgICAgICAgICAg IG1vZGU6IG1vZGUsCiAgICAgICAgICAgICAgICBwYXJlbnQ6IGZsYWdzX2Jh c2UsCiAgICAgICAgICAgICAgICBsYXN0X3RleHQ6IGZsYWdzX2Jhc2UgPyBm bGFnc19iYXNlLmxhc3RfdGV4dCA6ICcnLCAvLyBsYXN0IHRva2VuIHRleHQK ICAgICAgICAgICAgICAgIGxhc3Rfd29yZDogZmxhZ3NfYmFzZSA/IGZsYWdz X2Jhc2UubGFzdF93b3JkIDogJycsIC8vIGxhc3QgJ1RLX1dPUkQnIHBhc3Nl ZAogICAgICAgICAgICAgICAgZGVjbGFyYXRpb25fc3RhdGVtZW50OiBmYWxz ZSwKICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uX2Fzc2lnbm1lbnQ6IGZh bHNlLAogICAgICAgICAgICAgICAgaW5faHRtbF9jb21tZW50OiBmYWxzZSwK ICAgICAgICAgICAgICAgIG11bHRpbGluZV9mcmFtZTogZmFsc2UsCiAgICAg ICAgICAgICAgICBpZl9ibG9jazogZmFsc2UsCiAgICAgICAgICAgICAgICBl bHNlX2Jsb2NrOiBmYWxzZSwKICAgICAgICAgICAgICAgIGRvX2Jsb2NrOiBm YWxzZSwKICAgICAgICAgICAgICAgIGRvX3doaWxlOiBmYWxzZSwKICAgICAg ICAgICAgICAgIGluX2Nhc2Vfc3RhdGVtZW50OiBmYWxzZSwgLy8gc3dpdGNo KC4uKXsgSU5TSURFIEhFUkUgfQogICAgICAgICAgICAgICAgaW5fY2FzZTog ZmFsc2UsIC8vIHdlJ3JlIG9uIHRoZSBleGFjdCBsaW5lIHdpdGggImNhc2Ug MDoiCiAgICAgICAgICAgICAgICBjYXNlX2JvZHk6IGZhbHNlLCAvLyB0aGUg aW5kZW50ZWQgY2FzZS1hY3Rpb24gYmxvY2sKICAgICAgICAgICAgICAgIGlu ZGVudGF0aW9uX2xldmVsOiBuZXh0X2luZGVudF9sZXZlbCwKICAgICAgICAg ICAgICAgIGxpbmVfaW5kZW50X2xldmVsOiBmbGFnc19iYXNlID8gZmxhZ3Nf YmFzZS5saW5lX2luZGVudF9sZXZlbCA6IG5leHRfaW5kZW50X2xldmVsLAog ICAgICAgICAgICAgICAgc3RhcnRfbGluZV9pbmRleDogb3V0cHV0X2xpbmVz Lmxlbmd0aCwKICAgICAgICAgICAgICAgIGhhZF9jb21tZW50OiBmYWxzZSwK ICAgICAgICAgICAgICAgIHRlcm5hcnlfZGVwdGg6IDAKICAgICAgICAgICAg fTsKICAgICAgICAgICAgcmV0dXJuIG5leHRfZmxhZ3M7CiAgICAgICAgfQoK ICAgICAgICAvLyBVc2luZyBvYmplY3QgaW5zdGVhZCBvZiBzdHJpbmcgdG8g YWxsb3cgZm9yIGxhdGVyIGV4cGFuc2lvbiBvZiBpbmZvIGFib3V0IGVhY2gg bGluZQoKICAgICAgICBmdW5jdGlvbiBjcmVhdGVfb3V0cHV0X2xpbmUoKSB7 CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICB0ZXh0OiBb XQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgLy8gU29tZSBp bnRlcnByZXRlcnMgaGF2ZSB1bmV4cGVjdGVkIHJlc3VsdHMgd2l0aCBmb28g PSBiYXogfHwgYmFyOwogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8gb3B0 aW9ucyA6IHt9OwogICAgICAgIG9wdCA9IHt9OwoKICAgICAgICAvLyBjb21w YXRpYmlsaXR5CiAgICAgICAgaWYgKG9wdGlvbnMuc3BhY2VfYWZ0ZXJfYW5v bl9mdW5jdGlvbiAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuanNsaW50X2hh cHB5ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgb3B0aW9ucy5qc2xp bnRfaGFwcHkgPSBvcHRpb25zLnNwYWNlX2FmdGVyX2Fub25fZnVuY3Rpb247 CiAgICAgICAgfQogICAgICAgIGlmIChvcHRpb25zLmJyYWNlc19vbl9vd25f bGluZSAhPT0gdW5kZWZpbmVkKSB7IC8vZ3JhY2VmdWwgaGFuZGxpbmcgb2Yg ZGVwcmVjYXRlZCBvcHRpb24KICAgICAgICAgICAgb3B0LmJyYWNlX3N0eWxl ID0gb3B0aW9ucy5icmFjZXNfb25fb3duX2xpbmUgPyAiZXhwYW5kIiA6ICJj b2xsYXBzZSI7CiAgICAgICAgfQogICAgICAgIG9wdC5icmFjZV9zdHlsZSA9 IG9wdGlvbnMuYnJhY2Vfc3R5bGUgPyBvcHRpb25zLmJyYWNlX3N0eWxlIDog KG9wdC5icmFjZV9zdHlsZSA/IG9wdC5icmFjZV9zdHlsZSA6ICJjb2xsYXBz ZSIpOwoKICAgICAgICAvLyBncmFjZWZ1bCBoYW5kbGluZyBvZiBkZXByZWNh dGVkIG9wdGlvbgogICAgICAgIGlmIChvcHQuYnJhY2Vfc3R5bGUgPT09ICJl eHBhbmQtc3RyaWN0IikgewogICAgICAgICAgICBvcHQuYnJhY2Vfc3R5bGUg PSAiZXhwYW5kIjsKICAgICAgICB9CgoKICAgICAgICBvcHQuaW5kZW50X3Np emUgPSBvcHRpb25zLmluZGVudF9zaXplID8gcGFyc2VJbnQob3B0aW9ucy5p bmRlbnRfc2l6ZSwgMTApIDogNDsKICAgICAgICBvcHQuaW5kZW50X2NoYXIg PSBvcHRpb25zLmluZGVudF9jaGFyID8gb3B0aW9ucy5pbmRlbnRfY2hhciA6 ICcgJzsKICAgICAgICBvcHQucHJlc2VydmVfbmV3bGluZXMgPSAob3B0aW9u cy5wcmVzZXJ2ZV9uZXdsaW5lcyA9PT0gdW5kZWZpbmVkKSA/IHRydWUgOiBv cHRpb25zLnByZXNlcnZlX25ld2xpbmVzOwogICAgICAgIG9wdC5icmVha19j aGFpbmVkX21ldGhvZHMgPSAob3B0aW9ucy5icmVha19jaGFpbmVkX21ldGhv ZHMgPT09IHVuZGVmaW5lZCkgPyBmYWxzZSA6IG9wdGlvbnMuYnJlYWtfY2hh aW5lZF9tZXRob2RzOwogICAgICAgIG9wdC5tYXhfcHJlc2VydmVfbmV3bGlu ZXMgPSAob3B0aW9ucy5tYXhfcHJlc2VydmVfbmV3bGluZXMgPT09IHVuZGVm aW5lZCkgPyAwIDogcGFyc2VJbnQob3B0aW9ucy5tYXhfcHJlc2VydmVfbmV3 bGluZXMsIDEwKTsKICAgICAgICBvcHQuc3BhY2VfaW5fcGFyZW4gPSAob3B0 aW9ucy5zcGFjZV9pbl9wYXJlbiA9PT0gdW5kZWZpbmVkKSA/IGZhbHNlIDog b3B0aW9ucy5zcGFjZV9pbl9wYXJlbjsKICAgICAgICBvcHQuc3BhY2VfaW5f ZW1wdHlfcGFyZW4gPSAob3B0aW9ucy5zcGFjZV9pbl9lbXB0eV9wYXJlbiA9 PT0gdW5kZWZpbmVkKSA/IGZhbHNlIDogb3B0aW9ucy5zcGFjZV9pbl9lbXB0 eV9wYXJlbjsKICAgICAgICBvcHQuanNsaW50X2hhcHB5ID0gKG9wdGlvbnMu anNsaW50X2hhcHB5ID09PSB1bmRlZmluZWQpID8gZmFsc2UgOiBvcHRpb25z LmpzbGludF9oYXBweTsKICAgICAgICBvcHQua2VlcF9hcnJheV9pbmRlbnRh dGlvbiA9IChvcHRpb25zLmtlZXBfYXJyYXlfaW5kZW50YXRpb24gPT09IHVu ZGVmaW5lZCkgPyBmYWxzZSA6IG9wdGlvbnMua2VlcF9hcnJheV9pbmRlbnRh dGlvbjsKICAgICAgICBvcHQuc3BhY2VfYmVmb3JlX2NvbmRpdGlvbmFsID0g KG9wdGlvbnMuc3BhY2VfYmVmb3JlX2NvbmRpdGlvbmFsID09PSB1bmRlZmlu ZWQpID8gdHJ1ZSA6IG9wdGlvbnMuc3BhY2VfYmVmb3JlX2NvbmRpdGlvbmFs OwogICAgICAgIG9wdC51bmVzY2FwZV9zdHJpbmdzID0gKG9wdGlvbnMudW5l c2NhcGVfc3RyaW5ncyA9PT0gdW5kZWZpbmVkKSA/IGZhbHNlIDogb3B0aW9u cy51bmVzY2FwZV9zdHJpbmdzOwogICAgICAgIG9wdC53cmFwX2xpbmVfbGVu Z3RoID0gKG9wdGlvbnMud3JhcF9saW5lX2xlbmd0aCA9PT0gdW5kZWZpbmVk KSA/IDAgOiBwYXJzZUludChvcHRpb25zLndyYXBfbGluZV9sZW5ndGgsIDEw KTsKICAgICAgICBvcHQuZTR4ID0gKG9wdGlvbnMuZTR4ID09PSB1bmRlZmlu ZWQpID8gZmFsc2UgOiBvcHRpb25zLmU0eDsKCiAgICAgICAgaWYob3B0aW9u cy5pbmRlbnRfd2l0aF90YWJzKXsKICAgICAgICAgICAgb3B0LmluZGVudF9j aGFyID0gJ1x0JzsKICAgICAgICAgICAgb3B0LmluZGVudF9zaXplID0gMTsK ICAgICAgICB9CgogICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICAgICAgIGluZGVudF9zdHJpbmcgPSAnJzsKICAgICAg ICB3aGlsZSAob3B0LmluZGVudF9zaXplID4gMCkgewogICAgICAgICAgICBp bmRlbnRfc3RyaW5nICs9IG9wdC5pbmRlbnRfY2hhcjsKICAgICAgICAgICAg b3B0LmluZGVudF9zaXplIC09IDE7CiAgICAgICAgfQoKICAgICAgICB3aGls ZSAoanNfc291cmNlX3RleHQgJiYgKGpzX3NvdXJjZV90ZXh0LmNoYXJBdCgw KSA9PT0gJyAnIHx8IGpzX3NvdXJjZV90ZXh0LmNoYXJBdCgwKSA9PT0gJ1x0 JykpIHsKICAgICAgICAgICAgcHJlaW5kZW50X3N0cmluZyArPSBqc19zb3Vy Y2VfdGV4dC5jaGFyQXQoMCk7CiAgICAgICAgICAgIGpzX3NvdXJjZV90ZXh0 ID0ganNfc291cmNlX3RleHQuc3Vic3RyaW5nKDEpOwogICAgICAgIH0KICAg ICAgICBpbnB1dCA9IGpzX3NvdXJjZV90ZXh0OwogICAgICAgIC8vIGNhY2hl IHRoZSBzb3VyY2UncyBsZW5ndGguCiAgICAgICAgaW5wdXRfbGVuZ3RoID0g anNfc291cmNlX3RleHQubGVuZ3RoOwoKICAgICAgICBsYXN0X3R5cGUgPSAn VEtfU1RBUlRfQkxPQ0snOyAvLyBsYXN0IHRva2VuIHR5cGUKICAgICAgICBs YXN0X2xhc3RfdGV4dCA9ICcnOyAvLyBwcmUtbGFzdCB0b2tlbiB0ZXh0CiAg ICAgICAgb3V0cHV0X2xpbmVzID0gW2NyZWF0ZV9vdXRwdXRfbGluZSgpXTsK ICAgICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rva2VuID0gZmFsc2U7CiAg ICAgICAgd2hpdGVzcGFjZV9iZWZvcmVfdG9rZW4gPSBbXTsKCiAgICAgICAg Ly8gU3RhY2sgb2YgcGFyc2luZy9mb3JtYXR0aW5nIHN0YXRlcywgaW5jbHVk aW5nIE1PREUuCiAgICAgICAgLy8gV2UgdG9rZW5pemUsIHBhcnNlLCBhbmQg b3V0cHV0IGluIGFuIGFsbW9zdCBwdXJlbHkgYSBmb3J3YXJkLW9ubHkgc3Ry ZWFtIG9mIHRva2VuIGlucHV0CiAgICAgICAgLy8gYW5kIGZvcm1hdHRlZCBv dXRwdXQuICBUaGlzIG1ha2VzIHRoZSBiZWF1dGlmaWVyIGxlc3MgYWNjdXJh dGUgdGhhbiBmdWxsIHBhcnNlcnMKICAgICAgICAvLyBidXQgYWxzbyBmYXIg bW9yZSB0b2xlcmFudCBvZiBzeW50YXggZXJyb3JzLgogICAgICAgIC8vCiAg ICAgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0IG1vZGUgaXMgTU9E RS5CbG9ja1N0YXRlbWVudC4gSWYgd2Ugc2VlIGEgJ3snIHdlIHB1c2ggYSBu ZXcgZnJhbWUgb2YgdHlwZQogICAgICAgIC8vIE1PREUuQmxvY2tTdGF0ZW1l bnQgb24gdGhlIHRoZSBzdGFjaywgZXZlbiB0aG91Z2ggaXQgY291bGQgYmUg b2JqZWN0IGxpdGVyYWwuICBJZiB3ZSBsYXRlcgogICAgICAgIC8vIGVuY291 bnRlciBhICI6Iiwgd2UnbGwgc3dpdGNoIHRvIHRvIE1PREUuT2JqZWN0TGl0 ZXJhbC4gIElmIHdlIHRoZW4gc2VlIGEgIjsiLAogICAgICAgIC8vIG1vc3Qg ZnVsbCBwYXJzZXJzIHdvdWxkIGRpZSwgYnV0IHRoZSBiZWF1dGlmaWVyIGdy YWNlZnVsbHkgZmFsbHMgYmFjayB0bwogICAgICAgIC8vIE1PREUuQmxvY2tT dGF0ZW1lbnQgYW5kIGNvbnRpbnVlcyBvbi4KICAgICAgICBmbGFnX3N0b3Jl ID0gW107CiAgICAgICAgc2V0X21vZGUoTU9ERS5CbG9ja1N0YXRlbWVudCk7 CgogICAgICAgIHBhcnNlcl9wb3MgPSAwOwoKICAgICAgICB0aGlzLmJlYXV0 aWZ5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIC8qanNoaW50IG9uZXZh cjp0cnVlICovCiAgICAgICAgICAgIHZhciB0LCBpLCBrZWVwX3doaXRlc3Bh Y2UsIHN3ZWV0X2NvZGU7CgogICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewog ICAgICAgICAgICAgICAgdCA9IGdldF9uZXh0X3Rva2VuKCk7CiAgICAgICAg ICAgICAgICB0b2tlbl90ZXh0ID0gdFswXTsKICAgICAgICAgICAgICAgIHRv a2VuX3R5cGUgPSB0WzFdOwoKICAgICAgICAgICAgICAgIGlmICh0b2tlbl90 eXBlID09PSAnVEtfRU9GJykgewogICAgICAgICAgICAgICAgICAgIC8vIFVu d2luZCBhbnkgb3BlbiBzdGF0ZW1lbnRzCiAgICAgICAgICAgICAgICAgICAg d2hpbGUgKGZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50KSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3RvcmVfbW9kZSgpOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBrZWVwX3doaXRlc3BhY2Ug PSBvcHQua2VlcF9hcnJheV9pbmRlbnRhdGlvbiAmJiBpc19hcnJheShmbGFn cy5tb2RlKTsKICAgICAgICAgICAgICAgIGlucHV0X3dhbnRlZF9uZXdsaW5l ID0gbl9uZXdsaW5lcyA+IDA7CgogICAgICAgICAgICAgICAgaWYgKGtlZXBf d2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBuX25ld2xpbmVzOyBpICs9IDEpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRfbmV3bGluZShpID4gMCk7CiAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg ICAgICBpZiAob3B0Lm1heF9wcmVzZXJ2ZV9uZXdsaW5lcyAmJiBuX25ld2xp bmVzID4gb3B0Lm1heF9wcmVzZXJ2ZV9uZXdsaW5lcykgewogICAgICAgICAg ICAgICAgICAgICAgICBuX25ld2xpbmVzID0gb3B0Lm1heF9wcmVzZXJ2ZV9u ZXdsaW5lczsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAg ICAgICAgIGlmIChvcHQucHJlc2VydmVfbmV3bGluZXMpIHsKICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKG5fbmV3bGluZXMgPiAxKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmludF9uZXdsaW5lKCk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbl9uZXdsaW5l czsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRfbmV3bGluZSh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBo YW5kbGVyc1t0b2tlbl90eXBlXSgpOwoKICAgICAgICAgICAgICAgIC8vIFRo ZSBjbGVhbmVzdCBoYW5kbGluZyBvZiBpbmxpbmUgY29tbWVudHMgaXMgdG8g dHJlYXQgdGhlbSBhcyB0aG91Z2ggdGhleSBhcmVuJ3QgdGhlcmUuCiAgICAg ICAgICAgICAgICAvLyBKdXN0IGNvbnRpbnVlIGZvcm1hdHRpbmcgYW5kIHRo ZSBiZWhhdmlvciBzaG91bGQgYmUgbG9naWNhbC4KICAgICAgICAgICAgICAg IC8vIEFsc28gaWdub3JlIHVua25vd24gdG9rZW5zLiAgQWdhaW4sIHRoaXMg c2hvdWxkIHJlc3VsdCBpbiBiZXR0ZXIgYmVoYXZpb3IuCiAgICAgICAgICAg ICAgICBpZiAodG9rZW5fdHlwZSAhPT0gJ1RLX0lOTElORV9DT01NRU5UJyAm JiB0b2tlbl90eXBlICE9PSAnVEtfQ09NTUVOVCcgJiYKICAgICAgICAgICAg ICAgICAgICB0b2tlbl90eXBlICE9PSAnVEtfQkxPQ0tfQ09NTUVOVCcgJiYg dG9rZW5fdHlwZSAhPT0gJ1RLX1VOS05PV04nKSB7CiAgICAgICAgICAgICAg ICAgICAgbGFzdF9sYXN0X3RleHQgPSBmbGFncy5sYXN0X3RleHQ7CiAgICAg ICAgICAgICAgICAgICAgbGFzdF90eXBlID0gdG9rZW5fdHlwZTsKICAgICAg ICAgICAgICAgICAgICBmbGFncy5sYXN0X3RleHQgPSB0b2tlbl90ZXh0Owog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmxhZ3MuaGFkX2Nv bW1lbnQgPSAodG9rZW5fdHlwZSA9PT0gJ1RLX0lOTElORV9DT01NRU5UJyB8 fCB0b2tlbl90eXBlID09PSAnVEtfQ09NTUVOVCcKICAgICAgICAgICAgICAg ICAgICB8fCB0b2tlbl90eXBlID09PSAnVEtfQkxPQ0tfQ09NTUVOVCcpOwog ICAgICAgICAgICB9CgoKICAgICAgICAgICAgc3dlZXRfY29kZSA9IG91dHB1 dF9saW5lc1swXS50ZXh0LmpvaW4oJycpOwogICAgICAgICAgICBmb3IgKHZh ciBsaW5lX2luZGV4ID0gMTsgbGluZV9pbmRleCA8IG91dHB1dF9saW5lcy5s ZW5ndGg7IGxpbmVfaW5kZXgrKykgewogICAgICAgICAgICAgICAgc3dlZXRf Y29kZSArPSAnXG4nICsgb3V0cHV0X2xpbmVzW2xpbmVfaW5kZXhdLnRleHQu am9pbignJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3dlZXRfY29k ZSA9IHN3ZWV0X2NvZGUucmVwbGFjZSgvW1xyXG4gXSskLywgJycpOwogICAg ICAgICAgICByZXR1cm4gc3dlZXRfY29kZTsKICAgICAgICB9OwoKICAgICAg ICBmdW5jdGlvbiB0cmltX291dHB1dChlYXRfbmV3bGluZXMpIHsKICAgICAg ICAgICAgZWF0X25ld2xpbmVzID0gKGVhdF9uZXdsaW5lcyA9PT0gdW5kZWZp bmVkKSA/IGZhbHNlIDogZWF0X25ld2xpbmVzOwoKICAgICAgICAgICAgaWYg KG91dHB1dF9saW5lcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHRyaW1f b3V0cHV0X2xpbmUob3V0cHV0X2xpbmVzW291dHB1dF9saW5lcy5sZW5ndGgg LSAxXSwgZWF0X25ld2xpbmVzKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAo ZWF0X25ld2xpbmVzICYmIG91dHB1dF9saW5lcy5sZW5ndGggPiAxICYmCiAg ICAgICAgICAgICAgICAgICAgb3V0cHV0X2xpbmVzW291dHB1dF9saW5lcy5s ZW5ndGggLSAxXS50ZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAg ICAgICAgIG91dHB1dF9saW5lcy5wb3AoKTsKICAgICAgICAgICAgICAgICAg ICB0cmltX291dHB1dF9saW5lKG91dHB1dF9saW5lc1tvdXRwdXRfbGluZXMu bGVuZ3RoIC0gMV0sIGVhdF9uZXdsaW5lcyk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHRy aW1fb3V0cHV0X2xpbmUobGluZSkgewogICAgICAgICAgICB3aGlsZSAobGlu ZS50ZXh0Lmxlbmd0aCAmJgogICAgICAgICAgICAgICAgKGxpbmUudGV4dFts aW5lLnRleHQubGVuZ3RoIC0gMV0gPT09ICcgJyB8fAogICAgICAgICAgICAg ICAgICAgIGxpbmUudGV4dFtsaW5lLnRleHQubGVuZ3RoIC0gMV0gPT09IGlu ZGVudF9zdHJpbmcgfHwKICAgICAgICAgICAgICAgICAgICBsaW5lLnRleHRb bGluZS50ZXh0Lmxlbmd0aCAtIDFdID09PSBwcmVpbmRlbnRfc3RyaW5nKSkg ewogICAgICAgICAgICAgICAgbGluZS50ZXh0LnBvcCgpOwogICAgICAgICAg ICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiB0cmltKHMpIHsKICAg ICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsK ICAgICAgICB9CgogICAgICAgIC8vIHdlIGNvdWxkIHVzZSBqdXN0IHN0cmlu Zy5zcGxpdCwgYnV0CiAgICAgICAgLy8gSUUgZG9lc24ndCBsaWtlIHJldHVy bmluZyBlbXB0eSBzdHJpbmdzCgogICAgICAgIGZ1bmN0aW9uIHNwbGl0X25l d2xpbmVzKHMpIHsKICAgICAgICAgICAgLy9yZXR1cm4gcy5zcGxpdCgvXHgw ZFx4MGF8XHgwYS8pOwoKICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgvXHgw ZC9nLCAnJyk7CiAgICAgICAgICAgIHZhciBvdXQgPSBbXSwKICAgICAgICAg ICAgICAgIGlkeCA9IHMuaW5kZXhPZigiXG4iKTsKICAgICAgICAgICAgd2hp bGUgKGlkeCAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIG91dC5wdXNoKHMu c3Vic3RyaW5nKDAsIGlkeCkpOwogICAgICAgICAgICAgICAgcyA9IHMuc3Vi c3RyaW5nKGlkeCArIDEpOwogICAgICAgICAgICAgICAgaWR4ID0gcy5pbmRl eE9mKCJcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzLmxl bmd0aCkgewogICAgICAgICAgICAgICAgb3V0LnB1c2gocyk7CiAgICAgICAg ICAgIH0KICAgICAgICAgICAgcmV0dXJuIG91dDsKICAgICAgICB9CgogICAg ICAgIGZ1bmN0aW9uIGp1c3RfYWRkZWRfbmV3bGluZSgpIHsKICAgICAgICAg ICAgdmFyIGxpbmUgPSBvdXRwdXRfbGluZXNbb3V0cHV0X2xpbmVzLmxlbmd0 aCAtIDFdOwogICAgICAgICAgICByZXR1cm4gbGluZS50ZXh0Lmxlbmd0aCA9 PT0gMDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGp1c3RfYWRkZWRf YmxhbmtsaW5lKCkgewogICAgICAgICAgICBpZiAoanVzdF9hZGRlZF9uZXds aW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChvdXRwdXRfbGluZXMubGVu Z3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7 IC8vIHN0YXJ0IG9mIHRoZSBmaWxlIGFuZCBuZXdsaW5lID0gYmxhbmsKICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IG91 dHB1dF9saW5lc1tvdXRwdXRfbGluZXMubGVuZ3RoIC0gMl07CiAgICAgICAg ICAgICAgICByZXR1cm4gbGluZS50ZXh0Lmxlbmd0aCA9PT0gMDsKICAgICAg ICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoK ICAgICAgICBmdW5jdGlvbiBhbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXds aW5lKGZvcmNlX2xpbmV3cmFwKSB7CiAgICAgICAgICAgIGZvcmNlX2xpbmV3 cmFwID0gKGZvcmNlX2xpbmV3cmFwID09PSB1bmRlZmluZWQpID8gZmFsc2Ug OiBmb3JjZV9saW5ld3JhcDsKICAgICAgICAgICAgaWYgKG9wdC53cmFwX2xp bmVfbGVuZ3RoICYmICFmb3JjZV9saW5ld3JhcCkgewogICAgICAgICAgICAg ICAgdmFyIGxpbmUgPSBvdXRwdXRfbGluZXNbb3V0cHV0X2xpbmVzLmxlbmd0 aCAtIDFdOwogICAgICAgICAgICAgICAgdmFyIHByb3Bvc2VkX2xpbmVfbGVu Z3RoID0gMDsKICAgICAgICAgICAgICAgIC8vIG5ldmVyIHdyYXAgdGhlIGZp cnN0IHRva2VuIG9mIGEgbGluZS4KICAgICAgICAgICAgICAgIGlmIChsaW5l LnRleHQubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgIHByb3Bv c2VkX2xpbmVfbGVuZ3RoID0gbGluZS50ZXh0LmpvaW4oJycpLmxlbmd0aCAr IHRva2VuX3RleHQubGVuZ3RoICsKICAgICAgICAgICAgICAgICAgICAgICAg KG91dHB1dF9zcGFjZV9iZWZvcmVfdG9rZW4gPyAxIDogMCk7CiAgICAgICAg ICAgICAgICAgICAgaWYgKHByb3Bvc2VkX2xpbmVfbGVuZ3RoID49IG9wdC53 cmFwX2xpbmVfbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZv cmNlX2xpbmV3cmFwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYg KCgob3B0LnByZXNlcnZlX25ld2xpbmVzICYmIGlucHV0X3dhbnRlZF9uZXds aW5lKSB8fCBmb3JjZV9saW5ld3JhcCkgJiYgIWp1c3RfYWRkZWRfbmV3bGlu ZSgpKSB7CiAgICAgICAgICAgICAgICBwcmludF9uZXdsaW5lKGZhbHNlLCB0 cnVlKTsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0 aW9uIHByaW50X25ld2xpbmUoZm9yY2VfbmV3bGluZSwgcHJlc2VydmVfc3Rh dGVtZW50X2ZsYWdzKSB7CiAgICAgICAgICAgIG91dHB1dF9zcGFjZV9iZWZv cmVfdG9rZW4gPSBmYWxzZTsKCiAgICAgICAgICAgIGlmICghcHJlc2VydmVf c3RhdGVtZW50X2ZsYWdzKSB7CiAgICAgICAgICAgICAgICBpZiAoZmxhZ3Mu bGFzdF90ZXh0ICE9PSAnOycgJiYgZmxhZ3MubGFzdF90ZXh0ICE9PSAnLCcg JiYgZmxhZ3MubGFzdF90ZXh0ICE9PSAnPScgJiYgbGFzdF90eXBlICE9PSAn VEtfT1BFUkFUT1InKSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZs YWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50ICYmICFmbGFncy5pZl9ibG9j ayAmJiAhZmxhZ3MuZG9fYmxvY2spIHsKICAgICAgICAgICAgICAgICAgICAg ICAgcmVzdG9yZV9tb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAo b3V0cHV0X2xpbmVzLmxlbmd0aCA9PT0gMSAmJiBqdXN0X2FkZGVkX25ld2xp bmUoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBubyBuZXdsaW5l IG9uIHN0YXJ0IG9mIGZpbGUKICAgICAgICAgICAgfQoKICAgICAgICAgICAg aWYgKGZvcmNlX25ld2xpbmUgfHwgIWp1c3RfYWRkZWRfbmV3bGluZSgpKSB7 CiAgICAgICAgICAgICAgICBmbGFncy5tdWx0aWxpbmVfZnJhbWUgPSB0cnVl OwogICAgICAgICAgICAgICAgb3V0cHV0X2xpbmVzLnB1c2goY3JlYXRlX291 dHB1dF9saW5lKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAg ICBmdW5jdGlvbiBwcmludF90b2tlbl9saW5lX2luZGVudGF0aW9uKCkgewog ICAgICAgICAgICBpZiAoanVzdF9hZGRlZF9uZXdsaW5lKCkpIHsKICAgICAg ICAgICAgICAgIHZhciBsaW5lID0gb3V0cHV0X2xpbmVzW291dHB1dF9saW5l cy5sZW5ndGggLSAxXTsKICAgICAgICAgICAgICAgIGlmIChvcHQua2VlcF9h cnJheV9pbmRlbnRhdGlvbiAmJiBpc19hcnJheShmbGFncy5tb2RlKSAmJiBp bnB1dF93YW50ZWRfbmV3bGluZSkgewogICAgICAgICAgICAgICAgICAgIC8v IHByZXZlbnQgcmVtb3Zpbmcgb2YgdGhpcyB3aGl0ZXNwYWNlIGFzIHJlZHVu ZGFudAogICAgICAgICAgICAgICAgICAgIGxpbmUudGV4dC5wdXNoKCcnKTsK ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdoaXRl c3BhY2VfYmVmb3JlX3Rva2VuLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgIGxpbmUudGV4dC5wdXNoKHdoaXRlc3BhY2VfYmVm b3JlX3Rva2VuW2ldKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChwcmVp bmRlbnRfc3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUu dGV4dC5wdXNoKHByZWluZGVudF9zdHJpbmcpOwogICAgICAgICAgICAgICAg ICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcHJpbnRfaW5kZW50X3N0cmlu ZyhmbGFncy5pbmRlbnRhdGlvbl9sZXZlbCk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHBy aW50X2luZGVudF9zdHJpbmcobGV2ZWwpIHsKICAgICAgICAgICAgLy8gTmV2 ZXIgaW5kZW50IHlvdXIgZmlyc3Qgb3V0cHV0IGluZGVudCBhdCB0aGUgc3Rh cnQgb2YgdGhlIGZpbGUKICAgICAgICAgICAgaWYgKG91dHB1dF9saW5lcy5s ZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IG91dHB1 dF9saW5lc1tvdXRwdXRfbGluZXMubGVuZ3RoIC0gMV07CgogICAgICAgICAg ICAgICAgZmxhZ3MubGluZV9pbmRlbnRfbGV2ZWwgPSBsZXZlbDsKICAgICAg ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGV2ZWw7IGkgKz0gMSkg ewogICAgICAgICAgICAgICAgICAgIGxpbmUudGV4dC5wdXNoKGluZGVudF9z dHJpbmcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgfQoKICAgICAgICBmdW5jdGlvbiBwcmludF90b2tlbl9zcGFjZV9iZWZv cmUoKSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gb3V0cHV0X2xpbmVzW291 dHB1dF9saW5lcy5sZW5ndGggLSAxXTsKICAgICAgICAgICAgaWYgKG91dHB1 dF9zcGFjZV9iZWZvcmVfdG9rZW4gJiYgbGluZS50ZXh0Lmxlbmd0aCkgewog ICAgICAgICAgICAgICAgdmFyIGxhc3Rfb3V0cHV0ID0gbGluZS50ZXh0W2xp bmUudGV4dC5sZW5ndGggLSAxXTsKICAgICAgICAgICAgICAgIGlmIChsYXN0 X291dHB1dCAhPT0gJyAnICYmIGxhc3Rfb3V0cHV0ICE9PSBpbmRlbnRfc3Ry aW5nKSB7IC8vIHByZXZlbnQgb2NjYXNzaW9uYWwgZHVwbGljYXRlIHNwYWNl CiAgICAgICAgICAgICAgICAgICAgbGluZS50ZXh0LnB1c2goJyAnKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg ICAgZnVuY3Rpb24gcHJpbnRfdG9rZW4ocHJpbnRhYmxlX3Rva2VuKSB7CiAg ICAgICAgICAgIHByaW50YWJsZV90b2tlbiA9IHByaW50YWJsZV90b2tlbiB8 fCB0b2tlbl90ZXh0OwogICAgICAgICAgICBwcmludF90b2tlbl9saW5lX2lu ZGVudGF0aW9uKCk7CiAgICAgICAgICAgIHByaW50X3Rva2VuX3NwYWNlX2Jl Zm9yZSgpOwogICAgICAgICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rva2Vu ID0gZmFsc2U7CiAgICAgICAgICAgIG91dHB1dF9saW5lc1tvdXRwdXRfbGlu ZXMubGVuZ3RoIC0gMV0udGV4dC5wdXNoKHByaW50YWJsZV90b2tlbik7CiAg ICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBpbmRlbnQoKSB7CiAgICAgICAg ICAgIGZsYWdzLmluZGVudGF0aW9uX2xldmVsICs9IDE7CiAgICAgICAgfQoK ICAgICAgICBmdW5jdGlvbiBkZWluZGVudCgpIHsKICAgICAgICAgICAgaWYg KGZsYWdzLmluZGVudGF0aW9uX2xldmVsID4gMCAmJgogICAgICAgICAgICAg ICAgKCghZmxhZ3MucGFyZW50KSB8fCBmbGFncy5pbmRlbnRhdGlvbl9sZXZl bCA+IGZsYWdzLnBhcmVudC5pbmRlbnRhdGlvbl9sZXZlbCkpCiAgICAgICAg ICAgICAgICBmbGFncy5pbmRlbnRhdGlvbl9sZXZlbCAtPSAxOwogICAgICAg IH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlX3JlZHVuZGFudF9pbmRlbnRh dGlvbihmcmFtZSkgewogICAgICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0 aW9uIGlzIGVmZmVjdGl2ZSBidXQgaGFzIHNvbWUgaXNzdWVzOgogICAgICAg ICAgICAvLyAgICAgLSBsZXNzIHRoYW4gZ3JlYXQgcGVyZm9ybWFuY2UgZHVl IHRvIGFycmF5IHNwbGljaW5nCiAgICAgICAgICAgIC8vICAgICAtIGNhbiBj YXVzZSBsaW5lIHdyYXAgdG8gaGFwcGVuIHRvbyBzb29uIGR1ZSB0byBpbmRl bnQgcmVtb3ZhbAogICAgICAgICAgICAvLyAgICAgICAgICAgYWZ0ZXIgd3Jh cCBwb2ludHMgYXJlIGNhbGN1bGF0ZWQKICAgICAgICAgICAgLy8gVGhlc2Ug aXNzdWVzIGFyZSBtaW5vciBjb21wYXJlZCB0byB1Z2x5IGluZGVudGF0aW9u LgoKICAgICAgICAgICAgaWYgKGZyYW1lLm11bHRpbGluZV9mcmFtZSkgcmV0 dXJuOwoKICAgICAgICAgICAgLy8gcmVtb3ZlIG9uZSBpbmRlbnQgZnJvbSBl YWNoIGxpbmUgaW5zaWRlIHRoaXMgc2VjdGlvbgogICAgICAgICAgICB2YXIg aW5kZXggPSBmcmFtZS5zdGFydF9saW5lX2luZGV4OwogICAgICAgICAgICB2 YXIgc3BsaWNlX2luZGV4ID0gMDsKICAgICAgICAgICAgdmFyIGxpbmU7Cgog ICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBvdXRwdXRfbGluZXMubGVuZ3Ro KSB7CiAgICAgICAgICAgICAgICBsaW5lID0gb3V0cHV0X2xpbmVzW2luZGV4 XTsKICAgICAgICAgICAgICAgIGluZGV4Kys7CgogICAgICAgICAgICAgICAg Ly8gc2tpcCBlbXB0eSBsaW5lcwogICAgICAgICAgICAgICAgaWYgKGxpbmUu dGV4dC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBjb250 aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBz a2lwIHRoZSBwcmVpbmRlbnQgc3RyaW5nIGlmIHByZXNlbnQKICAgICAgICAg ICAgICAgIGlmIChwcmVpbmRlbnRfc3RyaW5nICYmIGxpbmUudGV4dFswXSA9 PT0gcHJlaW5kZW50X3N0cmluZykgewogICAgICAgICAgICAgICAgICAgIHNw bGljZV9pbmRleCA9IDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg ICAgICAgICAgICAgICAgIHNwbGljZV9pbmRleCA9IDA7CiAgICAgICAgICAg ICAgICB9CgogICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG9uZSBpbmRlbnQs IGlmIHByZXNlbnQKICAgICAgICAgICAgICAgIGlmIChsaW5lLnRleHRbc3Bs aWNlX2luZGV4XSA9PT0gaW5kZW50X3N0cmluZykgewogICAgICAgICAgICAg ICAgICAgIGxpbmUudGV4dC5zcGxpY2Uoc3BsaWNlX2luZGV4LCAxKTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg ICAgZnVuY3Rpb24gc2V0X21vZGUobW9kZSkgewogICAgICAgICAgICBpZiAo ZmxhZ3MpIHsKICAgICAgICAgICAgICAgIGZsYWdfc3RvcmUucHVzaChmbGFn cyk7CiAgICAgICAgICAgICAgICBwcmV2aW91c19mbGFncyA9IGZsYWdzOwog ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcHJldmlvdXNf ZmxhZ3MgPSBjcmVhdGVfZmxhZ3MobnVsbCwgbW9kZSk7CiAgICAgICAgICAg IH0KCiAgICAgICAgICAgIGZsYWdzID0gY3JlYXRlX2ZsYWdzKHByZXZpb3Vz X2ZsYWdzLCBtb2RlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGlz X2FycmF5KG1vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIG1vZGUgPT09IE1P REUuQXJyYXlMaXRlcmFsOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24g aXNfZXhwcmVzc2lvbihtb2RlKSB7CiAgICAgICAgICAgIHJldHVybiBpbl9h cnJheShtb2RlLCBbTU9ERS5FeHByZXNzaW9uLCBNT0RFLkZvckluaXRpYWxp emVyLCBNT0RFLkNvbmRpdGlvbmFsXSk7CiAgICAgICAgfQoKICAgICAgICBm dW5jdGlvbiByZXN0b3JlX21vZGUoKSB7CiAgICAgICAgICAgIGlmIChmbGFn X3N0b3JlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIHByZXZpb3Vz X2ZsYWdzID0gZmxhZ3M7CiAgICAgICAgICAgICAgICBmbGFncyA9IGZsYWdf c3RvcmUucG9wKCk7CiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNfZmxh Z3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQpIHsKICAgICAgICAgICAgICAg ICAgICByZW1vdmVfcmVkdW5kYW50X2luZGVudGF0aW9uKHByZXZpb3VzX2Zs YWdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAg IH0KCiAgICAgICAgZnVuY3Rpb24gc3RhcnRfb2Zfb2JqZWN0X3Byb3BlcnR5 KCkgewogICAgICAgICAgICByZXR1cm4gZmxhZ3MucGFyZW50Lm1vZGUgPT09 IE1PREUuT2JqZWN0TGl0ZXJhbCAmJiBmbGFncy5tb2RlID09PSBNT0RFLlN0 YXRlbWVudCAmJiBmbGFncy5sYXN0X3RleHQgPT09ICc6JyAmJgogICAgICAg ICAgICAgICAgZmxhZ3MudGVybmFyeV9kZXB0aCA9PT0gMDsKICAgICAgICB9 CgogICAgICAgIGZ1bmN0aW9uIHN0YXJ0X29mX3N0YXRlbWVudCgpIHsKICAg ICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIChsYXN0X3R5cGUg PT09ICdUS19SRVNFUlZFRCcgJiYgaW5fYXJyYXkoZmxhZ3MubGFzdF90ZXh0 LCBbJ3ZhcicsICdsZXQnLCAnY29uc3QnXSkgJiYgdG9rZW5fdHlwZSA9PT0g J1RLX1dPUkQnKSB8fAogICAgICAgICAgICAgICAgICAgIChsYXN0X3R5cGUg PT09ICdUS19SRVNFUlZFRCcgJiYgZmxhZ3MubGFzdF90ZXh0ID09PSAnZG8n KSB8fAogICAgICAgICAgICAgICAgICAgIChsYXN0X3R5cGUgPT09ICdUS19S RVNFUlZFRCcgJiYgZmxhZ3MubGFzdF90ZXh0ID09PSAncmV0dXJuJyAmJiAh aW5wdXRfd2FudGVkX25ld2xpbmUpIHx8CiAgICAgICAgICAgICAgICAgICAg KGxhc3RfdHlwZSA9PT0gJ1RLX1JFU0VSVkVEJyAmJiBmbGFncy5sYXN0X3Rl eHQgPT09ICdlbHNlJyAmJiAhKHRva2VuX3R5cGUgPT09ICdUS19SRVNFUlZF RCcgJiYgdG9rZW5fdGV4dCA9PT0gJ2lmJykpIHx8CiAgICAgICAgICAgICAg ICAgICAgKGxhc3RfdHlwZSA9PT0gJ1RLX0VORF9FWFBSJyAmJiAocHJldmlv dXNfZmxhZ3MubW9kZSA9PT0gTU9ERS5Gb3JJbml0aWFsaXplciB8fCBwcmV2 aW91c19mbGFncy5tb2RlID09PSBNT0RFLkNvbmRpdGlvbmFsKSkgfHwKICAg ICAgICAgICAgICAgICAgICAobGFzdF90eXBlID09PSAnVEtfV09SRCcgJiYg ZmxhZ3MubW9kZSA9PT0gTU9ERS5CbG9ja1N0YXRlbWVudAogICAgICAgICAg ICAgICAgICAgICAgICAmJiAhZmxhZ3MuaW5fY2FzZQogICAgICAgICAgICAg ICAgICAgICAgICAmJiAhKHRva2VuX3RleHQgPT09ICctLScgfHwgdG9rZW5f dGV4dCA9PT0gJysrJykKICAgICAgICAgICAgICAgICAgICAgICAgJiYgdG9r ZW5fdHlwZSAhPT0gJ1RLX1dPUkQnICYmIHRva2VuX3R5cGUgIT09ICdUS19S RVNFUlZFRCcpIHx8CiAgICAgICAgICAgICAgICAgICAgKGZsYWdzLm1vZGUg PT09IE1PREUuT2JqZWN0TGl0ZXJhbCAmJiBmbGFncy5sYXN0X3RleHQgPT09 ICc6JyAmJiBmbGFncy50ZXJuYXJ5X2RlcHRoID09PSAwKQoKICAgICAgICAg ICAgICAgICkgewoKICAgICAgICAgICAgICAgIHNldF9tb2RlKE1PREUuU3Rh dGVtZW50KTsKICAgICAgICAgICAgICAgIGluZGVudCgpOwoKICAgICAgICAg ICAgICAgIGlmIChsYXN0X3R5cGUgPT09ICdUS19SRVNFUlZFRCcgJiYgaW5f YXJyYXkoZmxhZ3MubGFzdF90ZXh0LCBbJ3ZhcicsICdsZXQnLCAnY29uc3Qn XSkgJiYgdG9rZW5fdHlwZSA9PT0gJ1RLX1dPUkQnKSB7CiAgICAgICAgICAg ICAgICAgICAgZmxhZ3MuZGVjbGFyYXRpb25fc3RhdGVtZW50ID0gdHJ1ZTsK ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBJc3N1ZSAj Mjc2OgogICAgICAgICAgICAgICAgLy8gSWYgc3RhcnRpbmcgYSBuZXcgc3Rh dGVtZW50IHdpdGggW2lmLCBmb3IsIHdoaWxlLCBkb10sIHB1c2ggdG8gYSBu ZXcgbGluZS4KICAgICAgICAgICAgICAgIC8vIGlmIChhKSBpZiAoYikgaWYo YykgZCgpOyBlbHNlIGUoKTsgZWxzZSBmKCk7CiAgICAgICAgICAgICAgICBp ZiAoIXN0YXJ0X29mX29iamVjdF9wcm9wZXJ0eSgpKSB7CiAgICAgICAgICAg ICAgICAgICAgYWxsb3dfd3JhcF9vcl9wcmVzZXJ2ZWRfbmV3bGluZSgKICAg ICAgICAgICAgICAgICAgICAgICAgdG9rZW5fdHlwZSA9PT0gJ1RLX1JFU0VS VkVEJyAmJiBpbl9hcnJheSh0b2tlbl90ZXh0LCBbJ2RvJywgJ2ZvcicsICdp ZicsICd3aGlsZSddKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg cmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYWxs X2xpbmVzX3N0YXJ0X3dpdGgobGluZXMsIGMpIHsKICAgICAgICAgICAgZm9y ICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgewogICAgICAg ICAgICAgICAgdmFyIGxpbmUgPSB0cmltKGxpbmVzW2ldKTsKICAgICAgICAg ICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSAhPT0gYykgewogICAgICAgICAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9 CgogICAgICAgIGZ1bmN0aW9uIGlzX3NwZWNpYWxfd29yZCh3b3JkKSB7CiAg ICAgICAgICAgIHJldHVybiBpbl9hcnJheSh3b3JkLCBbJ2Nhc2UnLCAncmV0 dXJuJywgJ2RvJywgJ2lmJywgJ3Rocm93JywgJ2Vsc2UnXSk7CiAgICAgICAg fQoKICAgICAgICBmdW5jdGlvbiBpbl9hcnJheSh3aGF0LCBhcnIpIHsKICAg ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9 IDEpIHsKICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHdoYXQpIHsK ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiB1bmVzY2FwZV9zdHJpbmco cykgewogICAgICAgICAgICB2YXIgZXNjID0gZmFsc2UsCiAgICAgICAgICAg ICAgICBvdXQgPSAnJywKICAgICAgICAgICAgICAgIHBvcyA9IDAsCiAgICAg ICAgICAgICAgICBzX2hleCA9ICcnLAogICAgICAgICAgICAgICAgZXNjYXBl ZCA9IDAsCiAgICAgICAgICAgICAgICBjOwoKICAgICAgICAgICAgd2hpbGUg KGVzYyB8fCBwb3MgPCBzLmxlbmd0aCkgewoKICAgICAgICAgICAgICAgIGMg PSBzLmNoYXJBdChwb3MpOwogICAgICAgICAgICAgICAgcG9zKys7CgogICAg ICAgICAgICAgICAgaWYgKGVzYykgewogICAgICAgICAgICAgICAgICAgIGVz YyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAneCcp IHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2ltcGxlIGhleC1lc2Nh cGUgXHgyNAogICAgICAgICAgICAgICAgICAgICAgICBzX2hleCA9IHMuc3Vi c3RyKHBvcywgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAy OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJ3UnKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuaWNvZGUtZXNjYXBlLCBc dTIxMzQKICAgICAgICAgICAgICAgICAgICAgICAgc19oZXggPSBzLnN1YnN0 cihwb3MsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gNDsK ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg ICAgICAgICAvLyBzb21lIGNvbW1vbiBlc2NhcGUsIGUuZyBcbgogICAgICAg ICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyArIGM7CiAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICBpZiAoIXNfaGV4Lm1hdGNoKC9eWzAxMjM0 NTY3ODlhYmNkZWZBQkNERUZdKyQvKSkgewogICAgICAgICAgICAgICAgICAg ICAgICAvLyBzb21lIHdlaXJkIGVzY2FwaW5nLCBiYWlsIG91dCwKICAgICAg ICAgICAgICAgICAgICAgICAgLy8gbGVhdmluZyB3aG9sZSBzdHJpbmcgaW50 YWN0CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9 IHBhcnNlSW50KHNfaGV4LCAxNik7CgogICAgICAgICAgICAgICAgICAgIGlm IChlc2NhcGVkID49IDB4MDAgJiYgZXNjYXBlZCA8IDB4MjApIHsKICAgICAg ICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgMHgwMC4uLjB4MWYgZXNjYXBl ZAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ3gnKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xceCcgKyBzX2hl eDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG91dCArPSAnXFx1JyArIHNfaGV4OwogICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXNj YXBlZCA9PT0gMHgyMiB8fCBlc2NhcGVkID09PSAweDI3IHx8IGVzY2FwZWQg PT09IDB4NWMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luZ2xl LXF1b3RlLCBhcG9zdHJvcGhlLCBiYWNrc2xhc2ggLSBlc2NhcGUgdGhlc2UK ICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdcXCcgKyBTdHJpbmcu ZnJvbUNoYXJDb2RlKGVzY2FwZWQpOwogICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoYyA9PT0gJ3gnICYmIGVzY2FwZWQgPiAweDdlICYmIGVzY2Fw ZWQgPD0gMHhmZikgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBi YWlsIG91dCBvbiBceDdmLi5ceGZmLAogICAgICAgICAgICAgICAgICAgICAg ICAvLyBsZWF2aW5nIHdob2xlIHN0cmluZyBlc2NhcGVkLAogICAgICAgICAg ICAgICAgICAgICAgICAvLyBhcyBpdCdzIHByb2JhYmx5IGNvbXBsZXRlbHkg YmluYXJ5CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGVzY2FwZWQpOwogICAg ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo YyA9PT0gJ1xcJykgewogICAgICAgICAgICAgICAgICAgIGVzYyA9IHRydWU7 CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg IG91dCArPSBjOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg ICAgICAgICAgIHJldHVybiBvdXQ7CiAgICAgICAgfQoKICAgICAgICBmdW5j dGlvbiBpc19uZXh0KGZpbmQpIHsKICAgICAgICAgICAgdmFyIGxvY2FsX3Bv cyA9IHBhcnNlcl9wb3M7CiAgICAgICAgICAgIHZhciBjID0gaW5wdXQuY2hh ckF0KGxvY2FsX3Bvcyk7CiAgICAgICAgICAgIHdoaWxlIChpbl9hcnJheShj LCB3aGl0ZXNwYWNlKSAmJiBjICE9PSBmaW5kKSB7CiAgICAgICAgICAgICAg ICBsb2NhbF9wb3MrKzsKICAgICAgICAgICAgICAgIGlmIChsb2NhbF9wb3Mg Pj0gaW5wdXRfbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYyA9 IGlucHV0LmNoYXJBdChsb2NhbF9wb3MpOwogICAgICAgICAgICB9CiAgICAg ICAgICAgIHJldHVybiBjID09PSBmaW5kOwogICAgICAgIH0KCiAgICAgICAg ZnVuY3Rpb24gZ2V0X25leHRfdG9rZW4oKSB7CiAgICAgICAgICAgIHZhciBp LCByZXN1bHRpbmdfc3RyaW5nOwoKICAgICAgICAgICAgbl9uZXdsaW5lcyA9 IDA7CgogICAgICAgICAgICBpZiAocGFyc2VyX3BvcyA+PSBpbnB1dF9sZW5n dGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbJycsICdUS19FT0YnXTsK ICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5wdXRfd2FudGVkX25ld2xp bmUgPSBmYWxzZTsKICAgICAgICAgICAgd2hpdGVzcGFjZV9iZWZvcmVfdG9r ZW4gPSBbXTsKCiAgICAgICAgICAgIHZhciBjID0gaW5wdXQuY2hhckF0KHBh cnNlcl9wb3MpOwogICAgICAgICAgICBwYXJzZXJfcG9zICs9IDE7CgogICAg ICAgICAgICB3aGlsZSAoaW5fYXJyYXkoYywgd2hpdGVzcGFjZSkpIHsKCiAg ICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xuJykgewogICAgICAgICAgICAg ICAgICAgIG5fbmV3bGluZXMgKz0gMTsKICAgICAgICAgICAgICAgICAgICB3 aGl0ZXNwYWNlX2JlZm9yZV90b2tlbiA9IFtdOwogICAgICAgICAgICAgICAg fSBlbHNlIGlmIChuX25ld2xpbmVzKSB7CiAgICAgICAgICAgICAgICAgICAg aWYgKGMgPT09IGluZGVudF9zdHJpbmcpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgd2hpdGVzcGFjZV9iZWZvcmVfdG9rZW4ucHVzaChpbmRlbnRfc3Ry aW5nKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgIT09ICdc cicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVzcGFjZV9iZWZv cmVfdG9rZW4ucHVzaCgnICcpOwogICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAocGFyc2VyX3Bv cyA+PSBpbnB1dF9sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1 cm4gWycnLCAnVEtfRU9GJ107CiAgICAgICAgICAgICAgICB9CgogICAgICAg ICAgICAgICAgYyA9IGlucHV0LmNoYXJBdChwYXJzZXJfcG9zKTsKICAgICAg ICAgICAgICAgIHBhcnNlcl9wb3MgKz0gMTsKICAgICAgICAgICAgfQoKICAg ICAgICAgICAgLy8gTk9URTogYmVjYXVzZSBiZWF1dGlmaWVyIGRvZXNuJ3Qg ZnVsbHkgcGFyc2UsIGl0IGRvZXNuJ3QgdXNlIGFjb3JuLmlzSWRlbnRpZmll clN0YXJ0LgogICAgICAgICAgICAvLyBJdCBqdXN0IHRyZWF0cyBhbGwgaWRl bnRpZmllcnMgYW5kIG51bWJlcnMgYW5kIHN1Y2ggdGhlIHNhbWUuCiAgICAg ICAgICAgIGlmIChhY29ybi5pc0lkZW50aWZpZXJDaGFyKGlucHV0LmNoYXJD b2RlQXQocGFyc2VyX3Bvcy0xKSkpIHsKICAgICAgICAgICAgICAgIGlmIChw YXJzZXJfcG9zIDwgaW5wdXRfbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAg ICAgd2hpbGUgKGFjb3JuLmlzSWRlbnRpZmllckNoYXIoaW5wdXQuY2hhckNv ZGVBdChwYXJzZXJfcG9zKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg YyArPSBpbnB1dC5jaGFyQXQocGFyc2VyX3Bvcyk7CiAgICAgICAgICAgICAg ICAgICAgICAgIHBhcnNlcl9wb3MgKz0gMTsKICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHBhcnNlcl9wb3MgPT09IGlucHV0X2xlbmd0aCkgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICB9CgogICAgICAgICAgICAgICAgLy8gc21hbGwgYW5kIHN1cnByaXNp bmdseSB1bnVnbHkgaGFjayBmb3IgMUUtMTAgcmVwcmVzZW50YXRpb24KICAg ICAgICAgICAgICAgIGlmIChwYXJzZXJfcG9zICE9PSBpbnB1dF9sZW5ndGgg JiYgYy5tYXRjaCgvXlswLTldK1tFZV0kLykgJiYgKGlucHV0LmNoYXJBdChw YXJzZXJfcG9zKSA9PT0gJy0nIHx8IGlucHV0LmNoYXJBdChwYXJzZXJfcG9z KSA9PT0gJysnKSkgewoKICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbiA9 IGlucHV0LmNoYXJBdChwYXJzZXJfcG9zKTsKICAgICAgICAgICAgICAgICAg ICBwYXJzZXJfcG9zICs9IDE7CgogICAgICAgICAgICAgICAgICAgIHZhciB0 ID0gZ2V0X25leHRfdG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICBjICs9 IHNpZ24gKyB0WzBdOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBbYywg J1RLX1dPUkQnXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICBpZiAoIShsYXN0X3R5cGUgPT09ICdUS19ET1QnIHx8CiAgICAgICAgICAg ICAgICAgICAgICAgIChsYXN0X3R5cGUgPT09ICdUS19SRVNFUlZFRCcgJiYg aW5fYXJyYXkoZmxhZ3MubGFzdF90ZXh0LCBbJ3NldCcsICdnZXQnXSkpKQog ICAgICAgICAgICAgICAgICAgICYmIGluX2FycmF5KGMsIHJlc2VydmVkX3dv cmRzKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnaW4nKSB7 IC8vIGhhY2sgZm9yICdpbicgb3BlcmF0b3IKICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIFtjLCAnVEtfT1BFUkFUT1InXTsKICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtjLCAnVEtf UkVTRVJWRUQnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IHJldHVybiBbYywgJ1RLX1dPUkQnXTsKICAgICAgICAgICAgfQoKICAgICAg ICAgICAgaWYgKGMgPT09ICcoJyB8fCBjID09PSAnWycpIHsKICAgICAgICAg ICAgICAgIHJldHVybiBbYywgJ1RLX1NUQVJUX0VYUFInXTsKICAgICAgICAg ICAgfQoKICAgICAgICAgICAgaWYgKGMgPT09ICcpJyB8fCBjID09PSAnXScp IHsKICAgICAgICAgICAgICAgIHJldHVybiBbYywgJ1RLX0VORF9FWFBSJ107 CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChjID09PSAneycpIHsK ICAgICAgICAgICAgICAgIHJldHVybiBbYywgJ1RLX1NUQVJUX0JMT0NLJ107 CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChjID09PSAnfScpIHsK ICAgICAgICAgICAgICAgIHJldHVybiBbYywgJ1RLX0VORF9CTE9DSyddOwog ICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoYyA9PT0gJzsnKSB7CiAg ICAgICAgICAgICAgICByZXR1cm4gW2MsICdUS19TRU1JQ09MT04nXTsKICAg ICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGMgPT09ICcvJykgewogICAg ICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSAnJzsKICAgICAgICAgICAgICAg IC8vIHBlZWsgZm9yIGNvbW1lbnQgLyogLi4uICovCiAgICAgICAgICAgICAg ICB2YXIgaW5saW5lX2NvbW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgICAg aWYgKGlucHV0LmNoYXJBdChwYXJzZXJfcG9zKSA9PT0gJyonKSB7CiAgICAg ICAgICAgICAgICAgICAgcGFyc2VyX3BvcyArPSAxOwogICAgICAgICAgICAg ICAgICAgIGlmIChwYXJzZXJfcG9zIDwgaW5wdXRfbGVuZ3RoKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJzZXJfcG9zIDwgaW5wdXRf bGVuZ3RoICYmICEoaW5wdXQuY2hhckF0KHBhcnNlcl9wb3MpID09PSAnKicg JiYgaW5wdXQuY2hhckF0KHBhcnNlcl9wb3MgKyAxKSAmJiBpbnB1dC5jaGFy QXQocGFyc2VyX3BvcyArIDEpID09PSAnLycpKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjID0gaW5wdXQuY2hhckF0KHBhcnNlcl9wb3MpOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCArPSBjOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICJcbiIgfHwgYyA9 PT0gIlxyIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu bGluZV9jb21tZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJfcG9z ICs9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2Vy X3BvcyA+PSBpbnB1dF9sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICBwYXJzZXJfcG9zICs9IDI7CiAg ICAgICAgICAgICAgICAgICAgaWYgKGlubGluZV9jb21tZW50ICYmIG5fbmV3 bGluZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IFsnLyonICsgY29tbWVudCArICcqLycsICdUS19JTkxJTkVfQ09NTUVOVCdd OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBbJy8qJyArIGNvbW1lbnQgKyAnKi8nLCAnVEtf QkxPQ0tfQ09NTUVOVCddOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIHBlZWsgZm9yIGNvbW1l bnQgLy8gLi4uCiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckF0KHBh cnNlcl9wb3MpID09PSAnLycpIHsKICAgICAgICAgICAgICAgICAgICBjb21t ZW50ID0gYzsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5wdXQuY2hh ckF0KHBhcnNlcl9wb3MpICE9PSAnXHInICYmIGlucHV0LmNoYXJBdChwYXJz ZXJfcG9zKSAhPT0gJ1xuJykgewogICAgICAgICAgICAgICAgICAgICAgICBj b21tZW50ICs9IGlucHV0LmNoYXJBdChwYXJzZXJfcG9zKTsKICAgICAgICAg ICAgICAgICAgICAgICAgcGFyc2VyX3BvcyArPSAxOwogICAgICAgICAgICAg ICAgICAgICAgICBpZiAocGFyc2VyX3BvcyA+PSBpbnB1dF9sZW5ndGgpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgIHJldHVybiBbY29tbWVudCwgJ1RLX0NPTU1FTlQnXTsK ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KCgogICAgICAgICAg ICBpZiAoYyA9PT0gJ2AnIHx8IGMgPT09ICInIiB8fCBjID09PSAnIicgfHwg Ly8gc3RyaW5nCiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAg ICAgKGMgPT09ICcvJykgfHwgLy8gcmVnZXhwCiAgICAgICAgICAgICAgICAg ICAgKG9wdC5lNHggJiYgYyA9PT0gIjwiICYmIGlucHV0LnNsaWNlKHBhcnNl cl9wb3MgLSAxKS5tYXRjaCgvXjwoWy1hLXpBLVo6MC05Xy5dK3x7W157fV0q fXwhXFtDREFUQVxbW1xzXFNdKj9cXVxdKVxzKihbLWEtekEtWjowLTlfLl0r PSgnW14nXSonfCJbXiJdKiJ8e1tee31dKn0pXHMqKSpcLz9ccyo+LykpIC8v IHhtbAogICAgICAgICAgICAgICAgKSAmJiAoIC8vIHJlZ2V4IGFuZCB4bWwg Y2FuIG9ubHkgYXBwZWFyIGluIHNwZWNpZmljIGxvY2F0aW9ucyBkdXJpbmcg cGFyc2luZwogICAgICAgICAgICAgICAgICAgIChsYXN0X3R5cGUgPT09ICdU S19SRVNFUlZFRCcgJiYgaXNfc3BlY2lhbF93b3JkKGZsYWdzLmxhc3RfdGV4 dCkpIHx8CiAgICAgICAgICAgICAgICAgICAgKGxhc3RfdHlwZSA9PT0gJ1RL X0VORF9FWFBSJyAmJiBpbl9hcnJheShwcmV2aW91c19mbGFncy5tb2RlLCBb TU9ERS5Db25kaXRpb25hbCwgTU9ERS5Gb3JJbml0aWFsaXplcl0pKSB8fAog ICAgICAgICAgICAgICAgICAgIChpbl9hcnJheShsYXN0X3R5cGUsIFsnVEtf Q09NTUVOVCcsICdUS19TVEFSVF9FWFBSJywgJ1RLX1NUQVJUX0JMT0NLJywK ICAgICAgICAgICAgICAgICAgICAgICAgJ1RLX0VORF9CTE9DSycsICdUS19P UEVSQVRPUicsICdUS19FUVVBTFMnLCAnVEtfRU9GJywgJ1RLX1NFTUlDT0xP TicsICdUS19DT01NQScKICAgICAgICAgICAgICAgICAgICBdKSkKICAgICAg ICAgICAgICAgICkpIHsKCiAgICAgICAgICAgICAgICB2YXIgc2VwID0gYywK ICAgICAgICAgICAgICAgICAgICBlc2MgPSBmYWxzZSwKICAgICAgICAgICAg ICAgICAgICBoYXNfY2hhcl9lc2NhcGVzID0gZmFsc2U7CgogICAgICAgICAg ICAgICAgcmVzdWx0aW5nX3N0cmluZyA9IGM7CgogICAgICAgICAgICAgICAg aWYgKHBhcnNlcl9wb3MgPCBpbnB1dF9sZW5ndGgpIHsKICAgICAgICAgICAg ICAgICAgICBpZiAoc2VwID09PSAnLycpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHJl Z2V4cAogICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAg ICAgICAgICAgICB2YXIgaW5fY2hhcl9jbGFzcyA9IGZhbHNlOwogICAgICAg ICAgICAgICAgICAgICAgICB3aGlsZSAoZXNjIHx8IGluX2NoYXJfY2xhc3Mg fHwgaW5wdXQuY2hhckF0KHBhcnNlcl9wb3MpICE9PSBzZXApIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gaW5w dXQuY2hhckF0KHBhcnNlcl9wb3MpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFlc2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlc2MgPSBpbnB1dC5jaGFyQXQocGFyc2VyX3BvcykgPT09ICdcXCc7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNo YXJBdChwYXJzZXJfcG9zKSA9PT0gJ1snKSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluX2NoYXJfY2xhc3MgPSB0cnVlOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQu Y2hhckF0KHBhcnNlcl9wb3MpID09PSAnXScpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5fY2hhcl9jbGFzcyA9IGZhbHNlOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZXNjID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJf cG9zICs9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFy c2VyX3BvcyA+PSBpbnB1dF9sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvLyBpbmNvbXBsZXRlIHN0cmluZy9yZXhwIHdoZW4g ZW5kLW9mLWZpbGUgcmVhY2hlZC4KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBiYWlsIG91dCB3aXRoIHdoYXQgaGFkIGJlZW4gcmVjZWl2 ZWQgc28gZmFyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBbcmVzdWx0aW5nX3N0cmluZywgJ1RLX1NUUklORyddOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQuZTR4ICYm IHNlcCA9PT0gJzwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAg ICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBlNHggeG1sIGxpdGVy YWxzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAg ICAgICAgICAgIHZhciB4bWxSZWdFeHAgPSAvPChcLz8pKFstYS16QS1aOjAt OV8uXSt8e1tee31dKn18IVxbQ0RBVEFcW1tcc1xTXSo/XF1cXSlccyooWy1h LXpBLVo6MC05Xy5dKz0oJ1teJ10qJ3wiW14iXSoifHtbXnt9XSp9KVxzKikq KFwvPylccyo+L2c7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4bWxT dHIgPSBpbnB1dC5zbGljZShwYXJzZXJfcG9zIC0gMSk7CiAgICAgICAgICAg ICAgICAgICAgICAgIHZhciBtYXRjaCA9IHhtbFJlZ0V4cC5leGVjKHhtbFN0 cik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCAmJiBtYXRj aC5pbmRleCA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFyIHJvb3RUYWcgPSBtYXRjaFsyXTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhciBkZXB0aCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGlsZSAobWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2YXIgaXNFbmRUYWcgPSAhISBtYXRjaFsxXTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnTmFtZSA9IG1hdGNoWzJd OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1Npbmds ZXRvblRhZyA9ICggISEgbWF0Y2hbbWF0Y2gubGVuZ3RoIC0gMV0pIHx8ICh0 YWdOYW1lLnNsaWNlKDAsIDgpID09PSAiIVtDREFUQVsiKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnTmFtZSA9PT0gcm9vdFRh ZyAmJiAhaXNTaW5nbGV0b25UYWcpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGlzRW5kVGFnKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRlcHRoOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytkZXB0aDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoZGVwdGggPD0gMCkgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWF0Y2ggPSB4bWxSZWdFeHAuZXhlYyh4bWxTdHIpOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFyIHhtbExlbmd0aCA9IG1hdGNoID8gbWF0Y2guaW5kZXggKyBtYXRjaFsw XS5sZW5ndGggOiB4bWxTdHIubGVuZ3RoOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGFyc2VyX3BvcyArPSB4bWxMZW5ndGggLSAxOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4bWxTdHIuc2xpY2UoMCwg eG1sTGVuZ3RoKSwgIlRLX1NUUklORyJdOwogICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAgLy8g aGFuZGxlIHN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAvLwogICAg ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZXNjIHx8IGlucHV0LmNoYXJB dChwYXJzZXJfcG9zKSAhPT0gc2VwKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXN1bHRpbmdfc3RyaW5nICs9IGlucHV0LmNoYXJBdChwYXJz ZXJfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlc2Mp IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQu Y2hhckF0KHBhcnNlcl9wb3MpID09PSAneCcgfHwgaW5wdXQuY2hhckF0KHBh cnNlcl9wb3MpID09PSAndScpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGFzX2NoYXJfZXNjYXBlcyA9IHRydWU7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVzYyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlc2MgPSBpbnB1dC5jaGFyQXQocGFyc2VyX3BvcykgPT09ICdcXCc7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwYXJzZXJfcG9zICs9IDE7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAocGFyc2VyX3BvcyA+PSBpbnB1dF9sZW5ndGgp IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmNvbXBs ZXRlIHN0cmluZy9yZXhwIHdoZW4gZW5kLW9mLWZpbGUgcmVhY2hlZC4KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWlsIG91dCB3aXRo IHdoYXQgaGFkIGJlZW4gcmVjZWl2ZWQgc28gZmFyLgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBbcmVzdWx0aW5nX3N0cmluZywg J1RLX1NUUklORyddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBwYXJzZXJf cG9zICs9IDE7CiAgICAgICAgICAgICAgICByZXN1bHRpbmdfc3RyaW5nICs9 IHNlcDsKCiAgICAgICAgICAgICAgICBpZiAoaGFzX2NoYXJfZXNjYXBlcyAm JiBvcHQudW5lc2NhcGVfc3RyaW5ncykgewogICAgICAgICAgICAgICAgICAg IHJlc3VsdGluZ19zdHJpbmcgPSB1bmVzY2FwZV9zdHJpbmcocmVzdWx0aW5n X3N0cmluZyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg aWYgKHNlcCA9PT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gcmVn ZXhwcyBtYXkgaGF2ZSBtb2RpZmllcnMgL3JlZ2V4cC9NT0QgLCBzbyBmZXRj aCB0aG9zZSwgdG9vCiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcnNl cl9wb3MgPCBpbnB1dF9sZW5ndGggJiYgaW5fYXJyYXkoaW5wdXQuY2hhckF0 KHBhcnNlcl9wb3MpLCB3b3JkY2hhcikpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgcmVzdWx0aW5nX3N0cmluZyArPSBpbnB1dC5jaGFyQXQocGFyc2Vy X3Bvcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcl9wb3MgKz0g MTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICByZXR1cm4gW3Jlc3VsdGluZ19zdHJpbmcsICdUS19T VFJJTkcnXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGMgPT09 ICcjJykgewoKCiAgICAgICAgICAgICAgICBpZiAob3V0cHV0X2xpbmVzLmxl bmd0aCA9PT0gMSAmJiBvdXRwdXRfbGluZXNbMF0udGV4dC5sZW5ndGggPT09 IDAgJiYKICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGFyQXQocGFyc2Vy X3BvcykgPT09ICchJykgewogICAgICAgICAgICAgICAgICAgIC8vIHNoZWJh bmcKICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmdfc3RyaW5nID0gYzsK ICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyc2VyX3BvcyA8IGlucHV0 X2xlbmd0aCAmJiBjICE9PSAnXG4nKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgIGMgPSBpbnB1dC5jaGFyQXQocGFyc2VyX3Bvcyk7CiAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdGluZ19zdHJpbmcgKz0gYzsKICAgICAgICAg ICAgICAgICAgICAgICAgcGFyc2VyX3BvcyArPSAxOwogICAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RyaW0ocmVz dWx0aW5nX3N0cmluZykgKyAnXG4nLCAnVEtfVU5LTk9XTiddOwogICAgICAg ICAgICAgICAgfQoKCgogICAgICAgICAgICAgICAgLy8gU3BpZGVybW9ua2V5 LXNwZWNpZmljIHNoYXJwIHZhcmlhYmxlcyBmb3IgY2lyY3VsYXIgcmVmZXJl bmNlcwogICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96 aWxsYS5vcmcvRW4vU2hhcnBfdmFyaWFibGVzX2luX0phdmFTY3JpcHQKICAg ICAgICAgICAgICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvbW96aWxs YS1jZW50cmFsL3NvdXJjZS9qcy9zcmMvanNzY2FuLmNwcCBhcm91bmQgbGlu ZSAxOTM1CiAgICAgICAgICAgICAgICB2YXIgc2hhcnAgPSAnIyc7CiAgICAg ICAgICAgICAgICBpZiAocGFyc2VyX3BvcyA8IGlucHV0X2xlbmd0aCAmJiBp bl9hcnJheShpbnB1dC5jaGFyQXQocGFyc2VyX3BvcyksIGRpZ2l0cykpIHsK ICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAg ICAgIGMgPSBpbnB1dC5jaGFyQXQocGFyc2VyX3Bvcyk7CiAgICAgICAgICAg ICAgICAgICAgICAgIHNoYXJwICs9IGM7CiAgICAgICAgICAgICAgICAgICAg ICAgIHBhcnNlcl9wb3MgKz0gMTsKICAgICAgICAgICAgICAgICAgICB9IHdo aWxlIChwYXJzZXJfcG9zIDwgaW5wdXRfbGVuZ3RoICYmIGMgIT09ICcjJyAm JiBjICE9PSAnPScpOwogICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAn IycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAg ICAgICAgICB9IGVsc2UgaWYgKGlucHV0LmNoYXJBdChwYXJzZXJfcG9zKSA9 PT0gJ1snICYmIGlucHV0LmNoYXJBdChwYXJzZXJfcG9zICsgMSkgPT09ICdd JykgewogICAgICAgICAgICAgICAgICAgICAgICBzaGFycCArPSAnW10nOwog ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJfcG9zICs9IDI7CiAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5jaGFyQXQocGFyc2Vy X3BvcykgPT09ICd7JyAmJiBpbnB1dC5jaGFyQXQocGFyc2VyX3BvcyArIDEp ID09PSAnfScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hhcnAgKz0g J3t9JzsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyX3BvcyArPSAy OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gW3NoYXJwLCAnVEtfV09SRCddOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoYyA9PT0gJzwnICYmIGlu cHV0LnN1YnN0cmluZyhwYXJzZXJfcG9zIC0gMSwgcGFyc2VyX3BvcyArIDMp ID09PSAnPCEtLScpIHsKICAgICAgICAgICAgICAgIHBhcnNlcl9wb3MgKz0g MzsKICAgICAgICAgICAgICAgIGMgPSAnPCEtLSc7CiAgICAgICAgICAgICAg ICB3aGlsZSAoaW5wdXQuY2hhckF0KHBhcnNlcl9wb3MpICE9PSAnXG4nICYm IHBhcnNlcl9wb3MgPCBpbnB1dF9sZW5ndGgpIHsKICAgICAgICAgICAgICAg ICAgICBjICs9IGlucHV0LmNoYXJBdChwYXJzZXJfcG9zKTsKICAgICAgICAg ICAgICAgICAgICBwYXJzZXJfcG9zKys7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICBmbGFncy5pbl9odG1sX2NvbW1lbnQgPSB0cnVlOwog ICAgICAgICAgICAgICAgcmV0dXJuIFtjLCAnVEtfQ09NTUVOVCddOwogICAg ICAgICAgICB9CgogICAgICAgICAgICBpZiAoYyA9PT0gJy0nICYmIGZsYWdz LmluX2h0bWxfY29tbWVudCAmJiBpbnB1dC5zdWJzdHJpbmcocGFyc2VyX3Bv cyAtIDEsIHBhcnNlcl9wb3MgKyAyKSA9PT0gJy0tPicpIHsKICAgICAgICAg ICAgICAgIGZsYWdzLmluX2h0bWxfY29tbWVudCA9IGZhbHNlOwogICAgICAg ICAgICAgICAgcGFyc2VyX3BvcyArPSAyOwogICAgICAgICAgICAgICAgcmV0 dXJuIFsnLS0+JywgJ1RLX0NPTU1FTlQnXTsKICAgICAgICAgICAgfQoKICAg ICAgICAgICAgaWYgKGMgPT09ICcuJykgewogICAgICAgICAgICAgICAgcmV0 dXJuIFtjLCAnVEtfRE9UJ107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAg IGlmIChpbl9hcnJheShjLCBwdW5jdCkpIHsKICAgICAgICAgICAgICAgIHdo aWxlIChwYXJzZXJfcG9zIDwgaW5wdXRfbGVuZ3RoICYmIGluX2FycmF5KGMg KyBpbnB1dC5jaGFyQXQocGFyc2VyX3BvcyksIHB1bmN0KSkgewogICAgICAg ICAgICAgICAgICAgIGMgKz0gaW5wdXQuY2hhckF0KHBhcnNlcl9wb3MpOwog ICAgICAgICAgICAgICAgICAgIHBhcnNlcl9wb3MgKz0gMTsKICAgICAgICAg ICAgICAgICAgICBpZiAocGFyc2VyX3BvcyA+PSBpbnB1dF9sZW5ndGgpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm IChjID09PSAnLCcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2Ms ICdUS19DT01NQSddOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09 PSAnPScpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2MsICdUS19F UVVBTFMnXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIFtjLCAnVEtfT1BFUkFUT1InXTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIFtj LCAnVEtfVU5LTk9XTiddOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24g aGFuZGxlX3N0YXJ0X2V4cHIoKSB7CiAgICAgICAgICAgIGlmIChzdGFydF9v Zl9zdGF0ZW1lbnQoKSkgewogICAgICAgICAgICAgICAgLy8gVGhlIGNvbmRp dGlvbmFsIHN0YXJ0cyB0aGUgc3RhdGVtZW50IGlmIGFwcHJvcHJpYXRlLgog ICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgbmV4dF9tb2RlID0gTU9E RS5FeHByZXNzaW9uOwogICAgICAgICAgICBpZiAodG9rZW5fdGV4dCA9PT0g J1snKSB7CgogICAgICAgICAgICAgICAgaWYgKGxhc3RfdHlwZSA9PT0gJ1RL X1dPUkQnIHx8IGZsYWdzLmxhc3RfdGV4dCA9PT0gJyknKSB7CiAgICAgICAg ICAgICAgICAgICAgLy8gdGhpcyBpcyBhcnJheSBpbmRleCBzcGVjaWZpZXIs IGJyZWFrIGltbWVkaWF0ZWx5CiAgICAgICAgICAgICAgICAgICAgLy8gYVt4 XSwgZm4oKVt4XQogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3R5cGUg PT09ICdUS19SRVNFUlZFRCcgJiYgaW5fYXJyYXkoZmxhZ3MubGFzdF90ZXh0 LCBsaW5lX3N0YXJ0ZXJzKSkgewogICAgICAgICAgICAgICAgICAgICAgICBv dXRwdXRfc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTsKICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc2V0X21vZGUobmV4dF9t b2RlKTsKICAgICAgICAgICAgICAgICAgICBwcmludF90b2tlbigpOwogICAg ICAgICAgICAgICAgICAgIGluZGVudCgpOwogICAgICAgICAgICAgICAgICAg IGlmIChvcHQuc3BhY2VfaW5fcGFyZW4pIHsKICAgICAgICAgICAgICAgICAg ICAgICAgb3V0cHV0X3NwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7CiAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybjsK ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBuZXh0X21vZGUg PSBNT0RFLkFycmF5TGl0ZXJhbDsKICAgICAgICAgICAgICAgIGlmIChpc19h cnJheShmbGFncy5tb2RlKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChm bGFncy5sYXN0X3RleHQgPT09ICdbJyB8fAogICAgICAgICAgICAgICAgICAg ICAgICAoZmxhZ3MubGFzdF90ZXh0ID09PSAnLCcgJiYgKGxhc3RfbGFzdF90 ZXh0ID09PSAnXScgfHwgbGFzdF9sYXN0X3RleHQgPT09ICd9JykpKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgIC8vIF0sIFsgZ29lcyB0byBuZXcgbGlu ZQogICAgICAgICAgICAgICAgICAgICAgICAvLyB9LCBbIGdvZXMgdG8gbmV3 IGxpbmUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHQua2VlcF9h cnJheV9pbmRlbnRhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRfbmV3bGluZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAg ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChsYXN0X3R5 cGUgPT09ICdUS19SRVNFUlZFRCcgJiYgZmxhZ3MubGFzdF90ZXh0ID09PSAn Zm9yJykgewogICAgICAgICAgICAgICAgICAgIG5leHRfbW9kZSA9IE1PREUu Rm9ySW5pdGlhbGl6ZXI7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxh c3RfdHlwZSA9PT0gJ1RLX1JFU0VSVkVEJyAmJiBpbl9hcnJheShmbGFncy5s YXN0X3RleHQsIFsnaWYnLCAnd2hpbGUnXSkpIHsKICAgICAgICAgICAgICAg ICAgICBuZXh0X21vZGUgPSBNT0RFLkNvbmRpdGlvbmFsOwogICAgICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBuZXh0X21v ZGUgPSBNT0RFLkV4cHJlc3Npb247CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIH0KCiAgICAgICAgICAgIGlmIChmbGFncy5sYXN0X3RleHQgPT09 ICc7JyB8fCBsYXN0X3R5cGUgPT09ICdUS19TVEFSVF9CTE9DSycpIHsKICAg ICAgICAgICAgICAgIHByaW50X25ld2xpbmUoKTsKICAgICAgICAgICAgfSBl bHNlIGlmIChsYXN0X3R5cGUgPT09ICdUS19FTkRfRVhQUicgfHwgbGFzdF90 eXBlID09PSAnVEtfU1RBUlRfRVhQUicgfHwgbGFzdF90eXBlID09PSAnVEtf RU5EX0JMT0NLJyB8fCBmbGFncy5sYXN0X3RleHQgPT09ICcuJykgewogICAg ICAgICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgd2hldGhlciBmb3JjaW5n IHRoaXMgaXMgcmVxdWlyZWQuICBSZXZpZXcgZmFpbGluZyB0ZXN0cyB3aGVu IHJlbW92ZWQuCiAgICAgICAgICAgICAgICBhbGxvd193cmFwX29yX3ByZXNl cnZlZF9uZXdsaW5lKGlucHV0X3dhbnRlZF9uZXdsaW5lKTsKICAgICAgICAg ICAgICAgIC8vIGRvIG5vdGhpbmcgb24gKCggYW5kICkoIGFuZCBdWyBhbmQg XSggYW5kIC4oCiAgICAgICAgICAgIH0gZWxzZSBpZiAoIShsYXN0X3R5cGUg PT09ICdUS19SRVNFUlZFRCcgJiYgdG9rZW5fdGV4dCA9PT0gJygnKSAmJiBs YXN0X3R5cGUgIT09ICdUS19XT1JEJyAmJiBsYXN0X3R5cGUgIT09ICdUS19P UEVSQVRPUicpIHsKICAgICAgICAgICAgICAgIG91dHB1dF9zcGFjZV9iZWZv cmVfdG9rZW4gPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKChsYXN0 X3R5cGUgPT09ICdUS19SRVNFUlZFRCcgJiYgKGZsYWdzLmxhc3Rfd29yZCA9 PT0gJ2Z1bmN0aW9uJyB8fCBmbGFncy5sYXN0X3dvcmQgPT09ICd0eXBlb2Yn KSkgfHwKICAgICAgICAgICAgICAgIChmbGFncy5sYXN0X3RleHQgPT09ICcq JyAmJiBsYXN0X2xhc3RfdGV4dCA9PT0gJ2Z1bmN0aW9uJykpIHsKICAgICAg ICAgICAgICAgIC8vIGZ1bmN0aW9uKCkgdnMgZnVuY3Rpb24gKCkKICAgICAg ICAgICAgICAgIGlmIChvcHQuanNsaW50X2hhcHB5KSB7CiAgICAgICAgICAg ICAgICAgICAgb3V0cHV0X3NwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdF90 eXBlID09PSAnVEtfUkVTRVJWRUQnICYmIChpbl9hcnJheShmbGFncy5sYXN0 X3RleHQsIGxpbmVfc3RhcnRlcnMpIHx8IGZsYWdzLmxhc3RfdGV4dCA9PT0g J2NhdGNoJykpIHsKICAgICAgICAgICAgICAgIGlmIChvcHQuc3BhY2VfYmVm b3JlX2NvbmRpdGlvbmFsKSB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0 X3NwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFN1cHBvcnQgb2YgdGhp cyBraW5kIG9mIG5ld2xpbmUgcHJlc2VydmF0aW9uLgogICAgICAgICAgICAv LyBhID0gKGIgJiYKICAgICAgICAgICAgLy8gICAgIChjIHx8IGQpKTsKICAg ICAgICAgICAgaWYgKHRva2VuX3RleHQgPT09ICcoJykgewogICAgICAgICAg ICAgICAgaWYgKGxhc3RfdHlwZSA9PT0gJ1RLX0VRVUFMUycgfHwgbGFzdF90 eXBlID09PSAnVEtfT1BFUkFUT1InKSB7CiAgICAgICAgICAgICAgICAgICAg aWYgKCFzdGFydF9vZl9vYmplY3RfcHJvcGVydHkoKSkgewogICAgICAgICAg ICAgICAgICAgICAgICBhbGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5l KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9CgogICAgICAgICAgICBzZXRfbW9kZShuZXh0X21vZGUp OwogICAgICAgICAgICBwcmludF90b2tlbigpOwogICAgICAgICAgICBpZiAo b3B0LnNwYWNlX2luX3BhcmVuKSB7CiAgICAgICAgICAgICAgICBvdXRwdXRf c3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTsKICAgICAgICAgICAgfQoKICAg ICAgICAgICAgLy8gSW4gYWxsIGNhc2VzLCBpZiB3ZSBuZXdsaW5lIHdoaWxl IGluc2lkZSBhbiBleHByZXNzaW9uIGl0IHNob3VsZCBiZSBpbmRlbnRlZC4K ICAgICAgICAgICAgaW5kZW50KCk7CiAgICAgICAgfQoKICAgICAgICBmdW5j dGlvbiBoYW5kbGVfZW5kX2V4cHIoKSB7CiAgICAgICAgICAgIC8vIHN0YXRl bWVudHMgaW5zaWRlIGV4cHJlc3Npb25zIGFyZSBub3QgdmFsaWQgc3ludGF4 LCBidXQuLi4KICAgICAgICAgICAgLy8gc3RhdGVtZW50cyBtdXN0IGFsbCBi ZSBjbG9zZWQgd2hlbiB0aGVpciBjb250YWluZXIgY2xvc2VzCiAgICAgICAg ICAgIHdoaWxlIChmbGFncy5tb2RlID09PSBNT0RFLlN0YXRlbWVudCkgewog ICAgICAgICAgICAgICAgcmVzdG9yZV9tb2RlKCk7CiAgICAgICAgICAgIH0K CiAgICAgICAgICAgIGlmIChmbGFncy5tdWx0aWxpbmVfZnJhbWUpIHsKICAg ICAgICAgICAgICAgIGFsbG93X3dyYXBfb3JfcHJlc2VydmVkX25ld2xpbmUo dG9rZW5fdGV4dCA9PT0gJ10nICYmIGlzX2FycmF5KGZsYWdzLm1vZGUpICYm ICFvcHQua2VlcF9hcnJheV9pbmRlbnRhdGlvbik7CiAgICAgICAgICAgIH0K CiAgICAgICAgICAgIGlmIChvcHQuc3BhY2VfaW5fcGFyZW4pIHsKICAgICAg ICAgICAgICAgIGlmIChsYXN0X3R5cGUgPT09ICdUS19TVEFSVF9FWFBSJyAm JiAhIG9wdC5zcGFjZV9pbl9lbXB0eV9wYXJlbikgewogICAgICAgICAgICAg ICAgICAgIC8vICgpIFtdIG5vIGlubmVyIHNwYWNlIGluIGVtcHR5IHBhcmVu cyBsaWtlIHRoZXNlLCBldmVyLCByZWYgIzMyMAogICAgICAgICAgICAgICAg ICAgIHRyaW1fb3V0cHV0KCk7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0 X3NwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNlOwogICAgICAgICAgICAgICAg fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc3BhY2VfYmVm b3JlX3Rva2VuID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgICAgICBpZiAodG9rZW5fdGV4dCA9PT0gJ10nICYmIG9w dC5rZWVwX2FycmF5X2luZGVudGF0aW9uKSB7CiAgICAgICAgICAgICAgICBw cmludF90b2tlbigpOwogICAgICAgICAgICAgICAgcmVzdG9yZV9tb2RlKCk7 CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXN0b3Jl X21vZGUoKTsKICAgICAgICAgICAgICAgIHByaW50X3Rva2VuKCk7CiAgICAg ICAgICAgIH0KICAgICAgICAgICAgcmVtb3ZlX3JlZHVuZGFudF9pbmRlbnRh dGlvbihwcmV2aW91c19mbGFncyk7CgogICAgICAgICAgICAvLyBkbyB7fSB3 aGlsZSAoKSAvLyBubyBzdGF0ZW1lbnQgcmVxdWlyZWQgYWZ0ZXIKICAgICAg ICAgICAgaWYgKGZsYWdzLmRvX3doaWxlICYmIHByZXZpb3VzX2ZsYWdzLm1v ZGUgPT09IE1PREUuQ29uZGl0aW9uYWwpIHsKICAgICAgICAgICAgICAgIHBy ZXZpb3VzX2ZsYWdzLm1vZGUgPSBNT0RFLkV4cHJlc3Npb247CiAgICAgICAg ICAgICAgICBmbGFncy5kb19ibG9jayA9IGZhbHNlOwogICAgICAgICAgICAg ICAgZmxhZ3MuZG9fd2hpbGUgPSBmYWxzZTsKCiAgICAgICAgICAgIH0KICAg ICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhbmRsZV9zdGFydF9ibG9jaygp IHsKICAgICAgICAgICAgc2V0X21vZGUoTU9ERS5CbG9ja1N0YXRlbWVudCk7 CgogICAgICAgICAgICB2YXIgZW1wdHlfYnJhY2VzID0gaXNfbmV4dCgnfScp OwogICAgICAgICAgICB2YXIgZW1wdHlfYW5vbnltb3VzX2Z1bmN0aW9uID0g ZW1wdHlfYnJhY2VzICYmIGZsYWdzLmxhc3Rfd29yZCA9PT0gJ2Z1bmN0aW9u JyAmJgogICAgICAgICAgICAgICAgbGFzdF90eXBlID09PSAnVEtfRU5EX0VY UFInOwoKICAgICAgICAgICAgaWYgKG9wdC5icmFjZV9zdHlsZSA9PT0gImV4 cGFuZCIpIHsKICAgICAgICAgICAgICAgIGlmIChsYXN0X3R5cGUgIT09ICdU S19PUEVSQVRPUicgJiYKICAgICAgICAgICAgICAgICAgICAoZW1wdHlfYW5v bnltb3VzX2Z1bmN0aW9uIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIGxh c3RfdHlwZSA9PT0gJ1RLX0VRVUFMUycgfHwKICAgICAgICAgICAgICAgICAg ICAgICAgKGxhc3RfdHlwZSA9PT0gJ1RLX1JFU0VSVkVEJyAmJiBpc19zcGVj aWFsX3dvcmQoZmxhZ3MubGFzdF90ZXh0KSAmJiBmbGFncy5sYXN0X3RleHQg IT09ICdlbHNlJykpKSB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3Nw YWNlX2JlZm9yZV90b2tlbiA9IHRydWU7CiAgICAgICAgICAgICAgICB9IGVs c2UgewogICAgICAgICAgICAgICAgICAgIHByaW50X25ld2xpbmUoZmFsc2Us IHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2Ug eyAvLyBjb2xsYXBzZQogICAgICAgICAgICAgICAgaWYgKGxhc3RfdHlwZSAh PT0gJ1RLX09QRVJBVE9SJyAmJiBsYXN0X3R5cGUgIT09ICdUS19TVEFSVF9F WFBSJykgewogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3R5cGUgPT09 ICdUS19TVEFSVF9CTE9DSycpIHsKICAgICAgICAgICAgICAgICAgICAgICAg cHJpbnRfbmV3bGluZSgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zcGFjZV9iZWZvcmVf dG9rZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gaWYgVEtf T1BFUkFUT1Igb3IgVEtfU1RBUlRfRVhQUgogICAgICAgICAgICAgICAgICAg IGlmIChpc19hcnJheShwcmV2aW91c19mbGFncy5tb2RlKSAmJiBmbGFncy5s YXN0X3RleHQgPT09ICcsJykgewogICAgICAgICAgICAgICAgICAgICAgICBp ZiAobGFzdF9sYXN0X3RleHQgPT09ICd9JykgewogICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gfSwgeyBpbiBhcnJheSBjb250ZXh0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rva2Vu ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X25ld2xpbmUoKTsgLy8g W2EsIGIsIGMsIHsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg fQogICAgICAgICAgICBwcmludF90b2tlbigpOwogICAgICAgICAgICBpbmRl bnQoKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhbmRsZV9lbmRf YmxvY2soKSB7CiAgICAgICAgICAgIC8vIHN0YXRlbWVudHMgbXVzdCBhbGwg YmUgY2xvc2VkIHdoZW4gdGhlaXIgY29udGFpbmVyIGNsb3NlcwogICAgICAg ICAgICB3aGlsZSAoZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0ZW1lbnQpIHsK ICAgICAgICAgICAgICAgIHJlc3RvcmVfbW9kZSgpOwogICAgICAgICAgICB9 CiAgICAgICAgICAgIHZhciBlbXB0eV9icmFjZXMgPSBsYXN0X3R5cGUgPT09 ICdUS19TVEFSVF9CTE9DSyc7CgogICAgICAgICAgICBpZiAob3B0LmJyYWNl X3N0eWxlID09PSAiZXhwYW5kIikgewogICAgICAgICAgICAgICAgaWYgKCFl bXB0eV9icmFjZXMpIHsKICAgICAgICAgICAgICAgICAgICBwcmludF9uZXds aW5lKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7 CiAgICAgICAgICAgICAgICAvLyBza2lwIHt9CiAgICAgICAgICAgICAgICBp ZiAoIWVtcHR5X2JyYWNlcykgewogICAgICAgICAgICAgICAgICAgIGlmIChp c19hcnJheShmbGFncy5tb2RlKSAmJiBvcHQua2VlcF9hcnJheV9pbmRlbnRh dGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBSRUFMTFkg bmVlZCBhIG5ld2xpbmUgaGVyZSwgYnV0IG5ld2xpbmVyIHdvdWxkIHNraXAg dGhhdAogICAgICAgICAgICAgICAgICAgICAgICBvcHQua2VlcF9hcnJheV9p bmRlbnRhdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBw cmludF9uZXdsaW5lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wdC5r ZWVwX2FycmF5X2luZGVudGF0aW9uID0gdHJ1ZTsKCiAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRf bmV3bGluZSgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXN0b3JlX21vZGUo KTsKICAgICAgICAgICAgcHJpbnRfdG9rZW4oKTsKICAgICAgICB9CgogICAg ICAgIGZ1bmN0aW9uIGhhbmRsZV93b3JkKCkgewogICAgICAgICAgICBpZiAo c3RhcnRfb2Zfc3RhdGVtZW50KCkpIHsKICAgICAgICAgICAgICAgIC8vIFRo ZSBjb25kaXRpb25hbCBzdGFydHMgdGhlIHN0YXRlbWVudCBpZiBhcHByb3By aWF0ZS4KICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dF93YW50ZWRfbmV3 bGluZSAmJiAhaXNfZXhwcmVzc2lvbihmbGFncy5tb2RlKSAmJgogICAgICAg ICAgICAgICAgKGxhc3RfdHlwZSAhPT0gJ1RLX09QRVJBVE9SJyB8fCAoZmxh Z3MubGFzdF90ZXh0ID09PSAnLS0nIHx8IGZsYWdzLmxhc3RfdGV4dCA9PT0g JysrJykpICYmCiAgICAgICAgICAgICAgICBsYXN0X3R5cGUgIT09ICdUS19F UVVBTFMnICYmCiAgICAgICAgICAgICAgICAob3B0LnByZXNlcnZlX25ld2xp bmVzIHx8ICEobGFzdF90eXBlID09PSAnVEtfUkVTRVJWRUQnICYmIGluX2Fy cmF5KGZsYWdzLmxhc3RfdGV4dCwgWyd2YXInLCAnbGV0JywgJ2NvbnN0Jywg J3NldCcsICdnZXQnXSkpKSkgewoKICAgICAgICAgICAgICAgIHByaW50X25l d2xpbmUoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGZsYWdz LmRvX2Jsb2NrICYmICFmbGFncy5kb193aGlsZSkgewogICAgICAgICAgICAg ICAgaWYgKHRva2VuX3R5cGUgPT09ICdUS19SRVNFUlZFRCcgJiYgdG9rZW5f dGV4dCA9PT0gJ3doaWxlJykgewogICAgICAgICAgICAgICAgICAgIC8vIGRv IHt9ICMjIHdoaWxlICgpCiAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3Nw YWNlX2JlZm9yZV90b2tlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg cHJpbnRfdG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc3Bh Y2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBm bGFncy5kb193aGlsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgcmV0 dXJuOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg ICAgICAvLyBkbyB7fSBzaG91bGQgYWx3YXlzIGhhdmUgd2hpbGUgYXMgdGhl IG5leHQgd29yZC4KICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBkb24n dCBzZWUgdGhlIGV4cGVjdGVkIHdoaWxlLCByZWNvdmVyCiAgICAgICAgICAg ICAgICAgICAgcHJpbnRfbmV3bGluZSgpOwogICAgICAgICAgICAgICAgICAg IGZsYWdzLmRvX2Jsb2NrID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGlmIG1heSBiZSBmb2xsb3dl ZCBieSBlbHNlLCBvciBub3QKICAgICAgICAgICAgLy8gQmFyZS9pbmxpbmUg aWZzIGFyZSB0cmlja3kKICAgICAgICAgICAgLy8gTmVlZCB0byB1bndpbmQg dGhlIG1vZGVzIGNvcnJlY3RseTogaWYgKGEpIGlmIChiKSBjKCk7IGVsc2Ug ZCgpOyBlbHNlIGUoKTsKICAgICAgICAgICAgaWYgKGZsYWdzLmlmX2Jsb2Nr KSB7CiAgICAgICAgICAgICAgICBpZiAoIWZsYWdzLmVsc2VfYmxvY2sgJiYg KHRva2VuX3R5cGUgPT09ICdUS19SRVNFUlZFRCcgJiYgdG9rZW5fdGV4dCA9 PT0gJ2Vsc2UnKSkgewogICAgICAgICAgICAgICAgICAgIGZsYWdzLmVsc2Vf YmxvY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgICAgICAgICB3aGlsZSAoZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0 ZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZV9tb2Rl KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg IGZsYWdzLmlmX2Jsb2NrID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg ZmxhZ3MuZWxzZV9ibG9jayA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAodG9rZW5fdHlwZSA9PT0g J1RLX1JFU0VSVkVEJyAmJiAodG9rZW5fdGV4dCA9PT0gJ2Nhc2UnIHx8ICh0 b2tlbl90ZXh0ID09PSAnZGVmYXVsdCcgJiYgZmxhZ3MuaW5fY2FzZV9zdGF0 ZW1lbnQpKSkgewogICAgICAgICAgICAgICAgcHJpbnRfbmV3bGluZSgpOwog ICAgICAgICAgICAgICAgaWYgKGZsYWdzLmNhc2VfYm9keSB8fCBvcHQuanNs aW50X2hhcHB5KSB7CiAgICAgICAgICAgICAgICAgICAgLy8gc3dpdGNoIGNh c2VzIGZvbGxvd2luZyBvbmUgYW5vdGhlcgogICAgICAgICAgICAgICAgICAg IGRlaW5kZW50KCk7CiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2FzZV9i b2R5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICBwcmludF90b2tlbigpOwogICAgICAgICAgICAgICAgZmxhZ3MuaW5fY2Fz ZSA9IHRydWU7CiAgICAgICAgICAgICAgICBmbGFncy5pbl9jYXNlX3N0YXRl bWVudCA9IHRydWU7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg ICAgIH0KCiAgICAgICAgICAgIGlmICh0b2tlbl90eXBlID09PSAnVEtfUkVT RVJWRUQnICYmIHRva2VuX3RleHQgPT09ICdmdW5jdGlvbicpIHsKICAgICAg ICAgICAgICAgIGlmIChpbl9hcnJheShmbGFncy5sYXN0X3RleHQsIFsnfScs ICc7J10pIHx8IChqdXN0X2FkZGVkX25ld2xpbmUoKSAmJiAhIGluX2FycmF5 KGZsYWdzLmxhc3RfdGV4dCwgWyd7JywgJzonLCAnPScsICcsJ10pKSkgewog ICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBpcyBhIG5p Y2UgY2xlYW4gc3BhY2Ugb2YgYXQgbGVhc3Qgb25lIGJsYW5rIGxpbmUKICAg ICAgICAgICAgICAgICAgICAvLyBiZWZvcmUgYSBuZXcgZnVuY3Rpb24gZGVm aW5pdGlvbgogICAgICAgICAgICAgICAgICAgIGlmICggISBqdXN0X2FkZGVk X2JsYW5rbGluZSgpICYmICEgZmxhZ3MuaGFkX2NvbW1lbnQpIHsKICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRfbmV3bGluZSgpOwogICAgICAgICAg ICAgICAgICAgICAgICBwcmludF9uZXdsaW5lKHRydWUpOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg IGlmIChsYXN0X3R5cGUgPT09ICdUS19SRVNFUlZFRCcgfHwgbGFzdF90eXBl ID09PSAnVEtfV09SRCcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobGFz dF90eXBlID09PSAnVEtfUkVTRVJWRUQnICYmIGluX2FycmF5KGZsYWdzLmxh c3RfdGV4dCwgWydnZXQnLCAnc2V0JywgJ25ldycsICdyZXR1cm4nXSkpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3NwYWNlX2JlZm9yZV90 b2tlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRfbmV3bGluZSgpOwogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFz dF90eXBlID09PSAnVEtfT1BFUkFUT1InIHx8IGZsYWdzLmxhc3RfdGV4dCA9 PT0gJz0nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gZm9vID0gZnVuY3Rp b24KICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rv a2VuID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfZXhw cmVzc2lvbihmbGFncy5tb2RlKSkgewogICAgICAgICAgICAgICAgICAgIC8v IChmdW5jdGlvbgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICBwcmludF9uZXdsaW5lKCk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChsYXN0X3R5cGUgPT09 ICdUS19DT01NQScgfHwgbGFzdF90eXBlID09PSAnVEtfU1RBUlRfRVhQUicg fHwgbGFzdF90eXBlID09PSAnVEtfRVFVQUxTJyB8fCBsYXN0X3R5cGUgPT09 ICdUS19PUEVSQVRPUicpIHsKICAgICAgICAgICAgICAgIGlmICghc3RhcnRf b2Zfb2JqZWN0X3Byb3BlcnR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBh bGxvd193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKCk7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0b2tlbl90 eXBlID09PSAnVEtfUkVTRVJWRUQnICYmIHRva2VuX3RleHQgPT09ICdmdW5j dGlvbicpIHsKICAgICAgICAgICAgICAgIHByaW50X3Rva2VuKCk7CiAgICAg ICAgICAgICAgICBmbGFncy5sYXN0X3dvcmQgPSB0b2tlbl90ZXh0OwogICAg ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAg ICBwcmVmaXggPSAnTk9ORSc7CgogICAgICAgICAgICBpZiAobGFzdF90eXBl ID09PSAnVEtfRU5EX0JMT0NLJykgewogICAgICAgICAgICAgICAgaWYgKCEo dG9rZW5fdHlwZSA9PT0gJ1RLX1JFU0VSVkVEJyAmJiBpbl9hcnJheSh0b2tl bl90ZXh0LCBbJ2Vsc2UnLCAnY2F0Y2gnLCAnZmluYWxseSddKSkpIHsKICAg ICAgICAgICAgICAgICAgICBwcmVmaXggPSAnTkVXTElORSc7CiAgICAgICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChvcHQu YnJhY2Vfc3R5bGUgPT09ICJleHBhbmQiIHx8IG9wdC5icmFjZV9zdHlsZSA9 PT0gImVuZC1leHBhbmQiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBy ZWZpeCA9ICdORVdMSU5FJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug ewogICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAnU1BBQ0UnOwog ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rv a2VuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdF90eXBlID09PSAn VEtfU0VNSUNPTE9OJyAmJiBmbGFncy5tb2RlID09PSBNT0RFLkJsb2NrU3Rh dGVtZW50KSB7CiAgICAgICAgICAgICAgICAvLyBUT0RPOiBTaG91bGQgdGhp cyBiZSBmb3IgU1RBVEVNRU5UIGFzIHdlbGw/CiAgICAgICAgICAgICAgICBw cmVmaXggPSAnTkVXTElORSc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFz dF90eXBlID09PSAnVEtfU0VNSUNPTE9OJyAmJiBpc19leHByZXNzaW9uKGZs YWdzLm1vZGUpKSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSAnU1BBQ0Un OwogICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3RfdHlwZSA9PT0gJ1RLX1NU UklORycpIHsKICAgICAgICAgICAgICAgIHByZWZpeCA9ICdORVdMSU5FJzsK ICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0X3R5cGUgPT09ICdUS19SRVNF UlZFRCcgfHwgbGFzdF90eXBlID09PSAnVEtfV09SRCcgfHwKICAgICAgICAg ICAgICAgIChmbGFncy5sYXN0X3RleHQgPT09ICcqJyAmJiBsYXN0X2xhc3Rf dGV4dCA9PT0gJ2Z1bmN0aW9uJykpIHsKICAgICAgICAgICAgICAgIHByZWZp eCA9ICdTUEFDRSc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdF90eXBl ID09PSAnVEtfU1RBUlRfQkxPQ0snKSB7CiAgICAgICAgICAgICAgICBwcmVm aXggPSAnTkVXTElORSc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdF90 eXBlID09PSAnVEtfRU5EX0VYUFInKSB7CiAgICAgICAgICAgICAgICBvdXRw dXRfc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTsKICAgICAgICAgICAgICAg IHByZWZpeCA9ICdORVdMSU5FJzsKICAgICAgICAgICAgfQoKICAgICAgICAg ICAgaWYgKHRva2VuX3R5cGUgPT09ICdUS19SRVNFUlZFRCcgJiYgaW5fYXJy YXkodG9rZW5fdGV4dCwgbGluZV9zdGFydGVycykgJiYgZmxhZ3MubGFzdF90 ZXh0ICE9PSAnKScpIHsKICAgICAgICAgICAgICAgIGlmIChmbGFncy5sYXN0 X3RleHQgPT09ICdlbHNlJykgewogICAgICAgICAgICAgICAgICAgIHByZWZp eCA9ICdTUEFDRSc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICAgICAgICAgIHByZWZpeCA9ICdORVdMSU5FJzsKICAgICAgICAgICAg ICAgIH0KCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0b2tlbl90 eXBlID09PSAnVEtfUkVTRVJWRUQnICYmIGluX2FycmF5KHRva2VuX3RleHQs IFsnZWxzZScsICdjYXRjaCcsICdmaW5hbGx5J10pKSB7CiAgICAgICAgICAg ICAgICBpZiAobGFzdF90eXBlICE9PSAnVEtfRU5EX0JMT0NLJyB8fCBvcHQu YnJhY2Vfc3R5bGUgPT09ICJleHBhbmQiIHx8IG9wdC5icmFjZV9zdHlsZSA9 PT0gImVuZC1leHBhbmQiKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRf bmV3bGluZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg ICAgICAgICAgICB0cmltX291dHB1dCh0cnVlKTsKICAgICAgICAgICAgICAg ICAgICB2YXIgbGluZSA9IG91dHB1dF9saW5lc1tvdXRwdXRfbGluZXMubGVu Z3RoIC0gMV07CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgdHJpbW1l ZCBhbmQgdGhlcmUncyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGNsb3NlIGJs b2NrIGJlZm9yZSB1cwogICAgICAgICAgICAgICAgICAgIC8vIHB1dCBhIG5l d2xpbmUgYmFjayBpbi4gIEhhbmRsZXMgJ30gLy8gY29tbWVudCcgc2NlbmFy aW8uCiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUudGV4dFtsaW5lLnRl eHQubGVuZ3RoIC0gMV0gIT09ICd9JykgewogICAgICAgICAgICAgICAgICAg ICAgICBwcmludF9uZXdsaW5lKCk7CiAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgIG91dHB1dF9zcGFjZV9iZWZvcmVfdG9rZW4g PSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2Ug aWYgKHByZWZpeCA9PT0gJ05FV0xJTkUnKSB7CiAgICAgICAgICAgICAgICBp ZiAobGFzdF90eXBlID09PSAnVEtfUkVTRVJWRUQnICYmIGlzX3NwZWNpYWxf d29yZChmbGFncy5sYXN0X3RleHQpKSB7CiAgICAgICAgICAgICAgICAgICAg Ly8gbm8gbmV3bGluZSBiZXR3ZWVuICdyZXR1cm4gbm5uJwogICAgICAgICAg ICAgICAgICAgIG91dHB1dF9zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlOwog ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0X3R5cGUgIT09ICdUS19F TkRfRVhQUicpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoKGxhc3RfdHlw ZSAhPT0gJ1RLX1NUQVJUX0VYUFInIHx8ICEodG9rZW5fdHlwZSA9PT0gJ1RL X1JFU0VSVkVEJyAmJiBpbl9hcnJheSh0b2tlbl90ZXh0LCBbJ3ZhcicsICds ZXQnLCAnY29uc3QnXSkpKSAmJiBmbGFncy5sYXN0X3RleHQgIT09ICc6Jykg ewogICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBuZWVkIHRvIGZvcmNl IG5ld2xpbmUgb24gJ3Zhcic6IGZvciAodmFyIHggPSAwLi4uKQogICAgICAg ICAgICAgICAgICAgICAgICBpZiAodG9rZW5fdHlwZSA9PT0gJ1RLX1JFU0VS VkVEJyAmJiB0b2tlbl90ZXh0ID09PSAnaWYnICYmIGZsYWdzLmxhc3Rfd29y ZCA9PT0gJ2Vsc2UnICYmIGZsYWdzLmxhc3RfdGV4dCAhPT0gJ3snKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBuZXdsaW5lIGZvciB9 IGVsc2UgaWYgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0 X3NwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7CiAgICAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmludF9uZXdsaW5lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KHRva2VuX3R5cGUgPT09ICdUS19SRVNFUlZFRCcgJiYgaW5fYXJyYXkodG9r ZW5fdGV4dCwgbGluZV9zdGFydGVycykgJiYgZmxhZ3MubGFzdF90ZXh0ICE9 PSAnKScpIHsKICAgICAgICAgICAgICAgICAgICBwcmludF9uZXdsaW5lKCk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNf YXJyYXkoZmxhZ3MubW9kZSkgJiYgZmxhZ3MubGFzdF90ZXh0ID09PSAnLCcg JiYgbGFzdF9sYXN0X3RleHQgPT09ICd9JykgewogICAgICAgICAgICAgICAg cHJpbnRfbmV3bGluZSgpOyAvLyB9LCBpbiBsaXN0cyBnZXQgYSBuZXdsaW5l IHRyZWF0bWVudAogICAgICAgICAgICB9IGVsc2UgaWYgKHByZWZpeCA9PT0g J1NQQUNFJykgewogICAgICAgICAgICAgICAgb3V0cHV0X3NwYWNlX2JlZm9y ZV90b2tlbiA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJp bnRfdG9rZW4oKTsKICAgICAgICAgICAgZmxhZ3MubGFzdF93b3JkID0gdG9r ZW5fdGV4dDsKCiAgICAgICAgICAgIGlmICh0b2tlbl90eXBlID09PSAnVEtf UkVTRVJWRUQnICYmIHRva2VuX3RleHQgPT09ICdkbycpIHsKICAgICAgICAg ICAgICAgIGZsYWdzLmRvX2Jsb2NrID0gdHJ1ZTsKICAgICAgICAgICAgfQoK ICAgICAgICAgICAgaWYgKHRva2VuX3R5cGUgPT09ICdUS19SRVNFUlZFRCcg JiYgdG9rZW5fdGV4dCA9PT0gJ2lmJykgewogICAgICAgICAgICAgICAgZmxh Z3MuaWZfYmxvY2sgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoK ICAgICAgICBmdW5jdGlvbiBoYW5kbGVfc2VtaWNvbG9uKCkgewogICAgICAg ICAgICBpZiAoc3RhcnRfb2Zfc3RhdGVtZW50KCkpIHsKICAgICAgICAgICAg ICAgIC8vIFRoZSBjb25kaXRpb25hbCBzdGFydHMgdGhlIHN0YXRlbWVudCBp ZiBhcHByb3ByaWF0ZS4KICAgICAgICAgICAgICAgIC8vIFNlbWljb2xvbiBj YW4gYmUgdGhlIHN0YXJ0IChhbmQgZW5kKSBvZiBhIHN0YXRlbWVudAogICAg ICAgICAgICAgICAgb3V0cHV0X3NwYWNlX2JlZm9yZV90b2tlbiA9IGZhbHNl OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlIChmbGFncy5tb2Rl ID09PSBNT0RFLlN0YXRlbWVudCAmJiAhZmxhZ3MuaWZfYmxvY2sgJiYgIWZs YWdzLmRvX2Jsb2NrKSB7CiAgICAgICAgICAgICAgICByZXN0b3JlX21vZGUo KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludF90b2tlbigpOwog ICAgICAgICAgICBpZiAoZmxhZ3MubW9kZSA9PT0gTU9ERS5PYmplY3RMaXRl cmFsKSB7CiAgICAgICAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBPQkpFQ1Qg bW9kZSBhbmQgc2VlIGEgc2VtaWNvbG9uLCBpdHMgaW52YWxpZCBzeW50YXgK ICAgICAgICAgICAgICAgIC8vIHJlY292ZXIgYmFjayB0byB0cmVhdGluZyB0 aGlzIGFzIGEgQkxPQ0sKICAgICAgICAgICAgICAgIGZsYWdzLm1vZGUgPSBN T0RFLkJsb2NrU3RhdGVtZW50OwogICAgICAgICAgICB9CiAgICAgICAgfQoK ICAgICAgICBmdW5jdGlvbiBoYW5kbGVfc3RyaW5nKCkgewogICAgICAgICAg ICBpZiAoc3RhcnRfb2Zfc3RhdGVtZW50KCkpIHsKICAgICAgICAgICAgICAg IC8vIFRoZSBjb25kaXRpb25hbCBzdGFydHMgdGhlIHN0YXRlbWVudCBpZiBh cHByb3ByaWF0ZS4KICAgICAgICAgICAgICAgIC8vIE9uZSBkaWZmZXJlbmNl IC0gc3RyaW5ncyB3YW50IGF0IGxlYXN0IGEgc3BhY2UgYmVmb3JlCiAgICAg ICAgICAgICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTsK ICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0X3R5cGUgPT09ICdUS19SRVNF UlZFRCcgfHwgbGFzdF90eXBlID09PSAnVEtfV09SRCcpIHsKICAgICAgICAg ICAgICAgIG91dHB1dF9zcGFjZV9iZWZvcmVfdG9rZW4gPSB0cnVlOwogICAg ICAgICAgICB9IGVsc2UgaWYgKGxhc3RfdHlwZSA9PT0gJ1RLX0NPTU1BJyB8 fCBsYXN0X3R5cGUgPT09ICdUS19TVEFSVF9FWFBSJyB8fCBsYXN0X3R5cGUg PT09ICdUS19FUVVBTFMnIHx8IGxhc3RfdHlwZSA9PT0gJ1RLX09QRVJBVE9S JykgewogICAgICAgICAgICAgICAgaWYgKCFzdGFydF9vZl9vYmplY3RfcHJv cGVydHkoKSkgewogICAgICAgICAgICAgICAgICAgIGFsbG93X3dyYXBfb3Jf cHJlc2VydmVkX25ld2xpbmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHByaW50X25ld2xpbmUo KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludF90b2tlbigpOwog ICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaGFuZGxlX2VxdWFscygpIHsK ICAgICAgICAgICAgaWYgKHN0YXJ0X29mX3N0YXRlbWVudCgpKSB7CiAgICAg ICAgICAgICAgICAvLyBUaGUgY29uZGl0aW9uYWwgc3RhcnRzIHRoZSBzdGF0 ZW1lbnQgaWYgYXBwcm9wcmlhdGUuCiAgICAgICAgICAgIH0KCiAgICAgICAg ICAgIGlmIChmbGFncy5kZWNsYXJhdGlvbl9zdGF0ZW1lbnQpIHsKICAgICAg ICAgICAgICAgIC8vIGp1c3QgZ290IGFuICc9JyBpbiBhIHZhci1saW5lLCBk aWZmZXJlbnQgZm9ybWF0dGluZy9saW5lLWJyZWFraW5nLCBldGMgd2lsbCBu b3cgYmUgZG9uZQogICAgICAgICAgICAgICAgZmxhZ3MuZGVjbGFyYXRpb25f YXNzaWdubWVudCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg b3V0cHV0X3NwYWNlX2JlZm9yZV90b2tlbiA9IHRydWU7CiAgICAgICAgICAg IHByaW50X3Rva2VuKCk7CiAgICAgICAgICAgIG91dHB1dF9zcGFjZV9iZWZv cmVfdG9rZW4gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24g aGFuZGxlX2NvbW1hKCkgewogICAgICAgICAgICBpZiAoZmxhZ3MuZGVjbGFy YXRpb25fc3RhdGVtZW50KSB7CiAgICAgICAgICAgICAgICBpZiAoaXNfZXhw cmVzc2lvbihmbGFncy5wYXJlbnQubW9kZSkpIHsKICAgICAgICAgICAgICAg ICAgICAvLyBkbyBub3QgYnJlYWsgb24gY29tbWEsIGZvcih2YXIgYSA9IDEs IGIgPSAyKQogICAgICAgICAgICAgICAgICAgIGZsYWdzLmRlY2xhcmF0aW9u X2Fzc2lnbm1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgICBwcmludF90b2tlbigpOwoKICAgICAgICAgICAgICAgIGlm IChmbGFncy5kZWNsYXJhdGlvbl9hc3NpZ25tZW50KSB7CiAgICAgICAgICAg ICAgICAgICAgZmxhZ3MuZGVjbGFyYXRpb25fYXNzaWdubWVudCA9IGZhbHNl OwogICAgICAgICAgICAgICAgICAgIHByaW50X25ld2xpbmUoZmFsc2UsIHRy dWUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg ICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg ICAgfQoKICAgICAgICAgICAgcHJpbnRfdG9rZW4oKTsKICAgICAgICAgICAg aWYgKGZsYWdzLm1vZGUgPT09IE1PREUuT2JqZWN0TGl0ZXJhbCB8fAogICAg ICAgICAgICAgICAgKGZsYWdzLm1vZGUgPT09IE1PREUuU3RhdGVtZW50ICYm IGZsYWdzLnBhcmVudC5tb2RlID09PSBNT0RFLk9iamVjdExpdGVyYWwpKSB7 CiAgICAgICAgICAgICAgICBpZiAoZmxhZ3MubW9kZSA9PT0gTU9ERS5TdGF0 ZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICByZXN0b3JlX21vZGUoKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHByaW50X25ld2xp bmUoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8v IEVYUFIgb3IgRE9fQkxPQ0sKICAgICAgICAgICAgICAgIG91dHB1dF9zcGFj ZV9iZWZvcmVfdG9rZW4gPSB0cnVlOwogICAgICAgICAgICB9CgogICAgICAg IH0KCiAgICAgICAgZnVuY3Rpb24gaGFuZGxlX29wZXJhdG9yKCkgewogICAg ICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgQmxvY2tTdGF0ZW1lbnQg dGhhdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIE9iamVjdExpdGVyYWwKICAg ICAgICAgICAgaWYgKHRva2VuX3RleHQgPT09ICc6JyAmJiBmbGFncy5tb2Rl ID09PSBNT0RFLkJsb2NrU3RhdGVtZW50ICYmCiAgICAgICAgICAgICAgICAg ICAgbGFzdF9sYXN0X3RleHQgPT09ICd7JyAmJgogICAgICAgICAgICAgICAg ICAgIChsYXN0X3R5cGUgPT09ICdUS19XT1JEJyB8fCBsYXN0X3R5cGUgPT09 ICdUS19SRVNFUlZFRCcpKXsKICAgICAgICAgICAgICAgIGZsYWdzLm1vZGUg PSBNT0RFLk9iamVjdExpdGVyYWw7CiAgICAgICAgICAgIH0KCiAgICAgICAg ICAgIGlmIChzdGFydF9vZl9zdGF0ZW1lbnQoKSkgewogICAgICAgICAgICAg ICAgLy8gVGhlIGNvbmRpdGlvbmFsIHN0YXJ0cyB0aGUgc3RhdGVtZW50IGlm IGFwcHJvcHJpYXRlLgogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIg c3BhY2VfYmVmb3JlID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIHNwYWNlX2Fm dGVyID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKGxhc3RfdHlwZSA9PT0gJ1RL X1JFU0VSVkVEJyAmJiBpc19zcGVjaWFsX3dvcmQoZmxhZ3MubGFzdF90ZXh0 KSkgewogICAgICAgICAgICAgICAgLy8gInJldHVybiIgaGFkIGEgc3BlY2lh bCBoYW5kbGluZyBpbiBUS19XT1JELiBOb3cgd2UgbmVlZCB0byByZXR1cm4g dGhlIGZhdm9yCiAgICAgICAgICAgICAgICBvdXRwdXRfc3BhY2VfYmVmb3Jl X3Rva2VuID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHByaW50X3Rva2VuKCk7 CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAg ICAgICAgIC8vIGhhY2sgZm9yIGFjdGlvbnNjcmlwdCdzIGltcG9ydCAuKjsK ICAgICAgICAgICAgaWYgKHRva2VuX3RleHQgPT09ICcqJyAmJiBsYXN0X3R5 cGUgPT09ICdUS19ET1QnICYmICFsYXN0X2xhc3RfdGV4dC5tYXRjaCgvXlxk KyQvKSkgewogICAgICAgICAgICAgICAgcHJpbnRfdG9rZW4oKTsKICAgICAg ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAg aWYgKHRva2VuX3RleHQgPT09ICc6JyAmJiBmbGFncy5pbl9jYXNlKSB7CiAg ICAgICAgICAgICAgICBmbGFncy5jYXNlX2JvZHkgPSB0cnVlOwogICAgICAg ICAgICAgICAgaW5kZW50KCk7CiAgICAgICAgICAgICAgICBwcmludF90b2tl bigpOwogICAgICAgICAgICAgICAgcHJpbnRfbmV3bGluZSgpOwogICAgICAg ICAgICAgICAgZmxhZ3MuaW5fY2FzZSA9IGZhbHNlOwogICAgICAgICAgICAg ICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAodG9r ZW5fdGV4dCA9PT0gJzo6JykgewogICAgICAgICAgICAgICAgLy8gbm8gc3Bh Y2VzIGFyb3VuZCBleG90aWMgbmFtZXNwYWNpbmcgc3ludGF4IG9wZXJhdG9y CiAgICAgICAgICAgICAgICBwcmludF90b2tlbigpOwogICAgICAgICAgICAg ICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBodHRw Oi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNz ZWMtNy45LjEKICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBuZXdsaW5l IGJldHdlZW4gLS0gb3IgKysgYW5kIGFueXRoaW5nIGVsc2Ugd2Ugc2hvdWxk IHByZXNlcnZlIGl0LgogICAgICAgICAgICBpZiAoaW5wdXRfd2FudGVkX25l d2xpbmUgJiYgKHRva2VuX3RleHQgPT09ICctLScgfHwgdG9rZW5fdGV4dCA9 PT0gJysrJykpIHsKICAgICAgICAgICAgICAgIHByaW50X25ld2xpbmUoKTsK ICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQWxsb3cgbGluZSB3cmFw cGluZyBiZXR3ZWVuIG9wZXJhdG9ycwogICAgICAgICAgICBpZiAobGFzdF90 eXBlID09PSAnVEtfT1BFUkFUT1InKSB7CiAgICAgICAgICAgICAgICBhbGxv d193cmFwX29yX3ByZXNlcnZlZF9uZXdsaW5lKCk7CiAgICAgICAgICAgIH0K CiAgICAgICAgICAgIGlmIChpbl9hcnJheSh0b2tlbl90ZXh0LCBbJy0tJywg JysrJywgJyEnLCAnfiddKSB8fCAoaW5fYXJyYXkodG9rZW5fdGV4dCwgWyct JywgJysnXSkgJiYgKGluX2FycmF5KGxhc3RfdHlwZSwgWydUS19TVEFSVF9C TE9DSycsICdUS19TVEFSVF9FWFBSJywgJ1RLX0VRVUFMUycsICdUS19PUEVS QVRPUiddKSB8fCBpbl9hcnJheShmbGFncy5sYXN0X3RleHQsIGxpbmVfc3Rh cnRlcnMpIHx8IGZsYWdzLmxhc3RfdGV4dCA9PT0gJywnKSkpIHsKICAgICAg ICAgICAgICAgIC8vIHVuYXJ5IG9wZXJhdG9ycyAoYW5kIGJpbmFyeSArLy0g cHJldGVuZGluZyB0byBiZSB1bmFyeSkgc3BlY2lhbCBjYXNlcwoKICAgICAg ICAgICAgICAgIHNwYWNlX2JlZm9yZSA9IGZhbHNlOwogICAgICAgICAgICAg ICAgc3BhY2VfYWZ0ZXIgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBpZiAo ZmxhZ3MubGFzdF90ZXh0ID09PSAnOycgJiYgaXNfZXhwcmVzc2lvbihmbGFn cy5tb2RlKSkgewogICAgICAgICAgICAgICAgICAgIC8vIGZvciAoOzsgKytp KQogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBeXl4KICAgICAgICAg ICAgICAgICAgICBzcGFjZV9iZWZvcmUgPSB0cnVlOwogICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgIGlmIChsYXN0X3R5cGUgPT09ICdUS19S RVNFUlZFRCcpIHsKICAgICAgICAgICAgICAgICAgICBzcGFjZV9iZWZvcmUg PSB0cnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlm ICgoZmxhZ3MubW9kZSA9PT0gTU9ERS5CbG9ja1N0YXRlbWVudCB8fCBmbGFn cy5tb2RlID09PSBNT0RFLlN0YXRlbWVudCkgJiYgKGZsYWdzLmxhc3RfdGV4 dCA9PT0gJ3snIHx8IGZsYWdzLmxhc3RfdGV4dCA9PT0gJzsnKSkgewogICAg ICAgICAgICAgICAgICAgIC8vIHsgZm9vOyAtLWkgfQogICAgICAgICAgICAg ICAgICAgIC8vIGZvbygpOyAtLWJhcjsKICAgICAgICAgICAgICAgICAgICBw cmludF9uZXdsaW5lKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0gZWxzZSBpZiAodG9rZW5fdGV4dCA9PT0gJzonKSB7CiAgICAgICAgICAg ICAgICBpZiAoZmxhZ3MudGVybmFyeV9kZXB0aCA9PT0gMCkgewogICAgICAg ICAgICAgICAgICAgIGlmIChmbGFncy5tb2RlID09PSBNT0RFLkJsb2NrU3Rh dGVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLm1vZGUg PSBNT0RFLk9iamVjdExpdGVyYWw7CiAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgIHNwYWNlX2JlZm9yZSA9IGZhbHNlOwogICAg ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmbGFn cy50ZXJuYXJ5X2RlcHRoIC09IDE7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIH0gZWxzZSBpZiAodG9rZW5fdGV4dCA9PT0gJz8nKSB7CiAgICAg ICAgICAgICAgICBmbGFncy50ZXJuYXJ5X2RlcHRoICs9IDE7CiAgICAgICAg ICAgIH0gZWxzZSBpZiAodG9rZW5fdGV4dCA9PT0gJyonICYmIGxhc3RfdHlw ZSA9PT0gJ1RLX1JFU0VSVkVEJyAmJiBmbGFncy5sYXN0X3RleHQgPT09ICdm dW5jdGlvbicpIHsKICAgICAgICAgICAgICAgIHNwYWNlX2JlZm9yZSA9IGZh bHNlOwogICAgICAgICAgICAgICAgc3BhY2VfYWZ0ZXIgPSBmYWxzZTsKICAg ICAgICAgICAgfQogICAgICAgICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rv a2VuID0gb3V0cHV0X3NwYWNlX2JlZm9yZV90b2tlbiB8fCBzcGFjZV9iZWZv cmU7CiAgICAgICAgICAgIHByaW50X3Rva2VuKCk7CiAgICAgICAgICAgIG91 dHB1dF9zcGFjZV9iZWZvcmVfdG9rZW4gPSBzcGFjZV9hZnRlcjsKICAgICAg ICB9CgogICAgICAgIGZ1bmN0aW9uIGhhbmRsZV9ibG9ja19jb21tZW50KCkg ewogICAgICAgICAgICB2YXIgbGluZXMgPSBzcGxpdF9uZXdsaW5lcyh0b2tl bl90ZXh0KTsKICAgICAgICAgICAgdmFyIGo7IC8vIGl0ZXJhdG9yIGZvciB0 aGlzIGNhc2UKICAgICAgICAgICAgdmFyIGphdmFkb2MgPSBmYWxzZTsKCiAg ICAgICAgICAgIC8vIGJsb2NrIGNvbW1lbnQgc3RhcnRzIHdpdGggYSBuZXcg bGluZQogICAgICAgICAgICBwcmludF9uZXdsaW5lKGZhbHNlLCB0cnVlKTsK ICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEpIHsKICAgICAgICAg ICAgICAgIGlmIChhbGxfbGluZXNfc3RhcnRfd2l0aChsaW5lcy5zbGljZSgx KSwgJyonKSkgewogICAgICAgICAgICAgICAgICAgIGphdmFkb2MgPSB0cnVl OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAg ICAvLyBmaXJzdCBsaW5lIGFsd2F5cyBpbmRlbnRlZAogICAgICAgICAgICBw cmludF90b2tlbihsaW5lc1swXSk7CiAgICAgICAgICAgIGZvciAoaiA9IDE7 IGogPCBsaW5lcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgcHJp bnRfbmV3bGluZShmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBpZiAo amF2YWRvYykgewogICAgICAgICAgICAgICAgICAgIC8vIGphdmFkb2M6IHJl Zm9ybWF0IGFuZCByZS1pbmRlbnQKICAgICAgICAgICAgICAgICAgICBwcmlu dF90b2tlbignICcgKyB0cmltKGxpbmVzW2pdKSk7CiAgICAgICAgICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbCBjb21t ZW50cyBvdXRwdXQgcmF3CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2xp bmVzW291dHB1dF9saW5lcy5sZW5ndGggLSAxXS50ZXh0LnB1c2gobGluZXNb al0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAg ICAgICAvLyBmb3IgY29tbWVudHMgb2YgbW9yZSB0aGFuIG9uZSBsaW5lLCBt YWtlIHN1cmUgdGhlcmUncyBhIG5ldyBsaW5lIGFmdGVyCiAgICAgICAgICAg IHByaW50X25ld2xpbmUoZmFsc2UsIHRydWUpOwogICAgICAgIH0KCiAgICAg ICAgZnVuY3Rpb24gaGFuZGxlX2lubGluZV9jb21tZW50KCkgewogICAgICAg ICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTsKICAgICAg ICAgICAgcHJpbnRfdG9rZW4oKTsKICAgICAgICAgICAgb3V0cHV0X3NwYWNl X2JlZm9yZV90b2tlbiA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBmdW5j dGlvbiBoYW5kbGVfY29tbWVudCgpIHsKICAgICAgICAgICAgaWYgKGlucHV0 X3dhbnRlZF9uZXdsaW5lKSB7CiAgICAgICAgICAgICAgICBwcmludF9uZXds aW5lKGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgICAgIHRyaW1fb3V0cHV0KHRydWUpOwogICAgICAgICAgICB9Cgog ICAgICAgICAgICBvdXRwdXRfc3BhY2VfYmVmb3JlX3Rva2VuID0gdHJ1ZTsK ICAgICAgICAgICAgcHJpbnRfdG9rZW4oKTsKICAgICAgICAgICAgcHJpbnRf bmV3bGluZShmYWxzZSwgdHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBmdW5j dGlvbiBoYW5kbGVfZG90KCkgewogICAgICAgICAgICBpZiAoc3RhcnRfb2Zf c3RhdGVtZW50KCkpIHsKICAgICAgICAgICAgICAgIC8vIFRoZSBjb25kaXRp b25hbCBzdGFydHMgdGhlIHN0YXRlbWVudCBpZiBhcHByb3ByaWF0ZS4KICAg ICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGxhc3RfdHlwZSA9PT0gJ1RL X1JFU0VSVkVEJyAmJiBpc19zcGVjaWFsX3dvcmQoZmxhZ3MubGFzdF90ZXh0 KSkgewogICAgICAgICAgICAgICAgb3V0cHV0X3NwYWNlX2JlZm9yZV90b2tl biA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICAvLyBhbGxvdyBwcmVzZXJ2ZWQgbmV3bGluZXMgYmVmb3JlIGRvdHMgaW4g Z2VuZXJhbAogICAgICAgICAgICAgICAgLy8gZm9yY2UgbmV3bGluZXMgb24g ZG90cyBhZnRlciBjbG9zZSBwYXJlbiB3aGVuIGJyZWFrX2NoYWluZWQgLSBm b3IgYmFyKCkuYmF6KCkKICAgICAgICAgICAgICAgIGFsbG93X3dyYXBfb3Jf cHJlc2VydmVkX25ld2xpbmUoZmxhZ3MubGFzdF90ZXh0ID09PSAnKScgJiYg b3B0LmJyZWFrX2NoYWluZWRfbWV0aG9kcyk7CiAgICAgICAgICAgIH0KCiAg ICAgICAgICAgIHByaW50X3Rva2VuKCk7CiAgICAgICAgfQoKICAgICAgICBm dW5jdGlvbiBoYW5kbGVfdW5rbm93bigpIHsKICAgICAgICAgICAgcHJpbnRf dG9rZW4oKTsKCiAgICAgICAgICAgIGlmICh0b2tlbl90ZXh0W3Rva2VuX3Rl eHQubGVuZ3RoIC0gMV0gPT09ICdcbicpIHsKICAgICAgICAgICAgICAgIHBy aW50X25ld2xpbmUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0K CiAgICAvL0dsb2JhbCBhc3NpZ25hdGlvbiB3aXJlZC4uLgogICAgZ2xvYmFs LmpzX2JlYXV0aWZ5ID0ganNfYmVhdXRpZnk7Cgp9KCkpOwo= ---1066824098-1229438011-1403199816=:83677 Content-Type: application/javascript; name="jsbeautify.js" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="jsbeautify.js" Lyoga2F0ZS1zY3JpcHQKICogYXV0aG9yOiBLb3phCiAqIGxpY2Vuc2U6IExH UEwKICogcmV2aXNpb246IDEKICoga2F0ZS12ZXJzaW9uOiAzLjQKICogdHlw ZTogY29tbWFuZHMKICogZnVuY3Rpb25zOiBqc2JlYXV0aWZpZXIKICovCgpy ZXF1aXJlKCJyYW5nZS5qcyIpOwpyZXF1aXJlKCJiZWF1dGlmaWVyLmpzIik7 CgpmdW5jdGlvbiBqc2JlYXV0aWZpZXIoKSB7CiAgICB2YXIgc2VsZWN0aW9u UmFuZ2UgPSB2aWV3LnNlbGVjdGlvbigpLAogICAgICAgIGNvZGU7CiAgICBp ZiAodmlldy5oYXNTZWxlY3Rpb24oKSkgewogICAgICAgIGlmIChzZWxlY3Rp b25SYW5nZS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgdmFyIGZyb21MaW5l ID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnQubGluZSwKICAgICAgICAgICAgICAg IHRvTGluZSA9IHNlbGVjdGlvblJhbmdlLmVuZC5saW5lLAogICAgICAgICAg ICAgICAgZnJvbUNvbHVtbiA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0LmNvbHVt biwKICAgICAgICAgICAgICAgIHRvQ29sdW1uID0gc2VsZWN0aW9uUmFuZ2Uu ZW5kLmNvbHVtbjsKICAgICAgICAgICAgY29kZSA9IGpzX2JlYXV0aWZ5KHZp ZXcuc2VsZWN0ZWRUZXh0KCkpOwogICAgICAgICAgICBkb2N1bWVudC5lZGl0 QmVnaW4oKTsKICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlVGV4dChmcm9t TGluZSwgZnJvbUNvbHVtbiwgdG9MaW5lLCB0b0NvbHVtbik7CiAgICAgICAg ICAgIGRvY3VtZW50Lmluc2VydFRleHQoZnJvbUxpbmUsIGZyb21Db2x1bW4s IGNvZGUpOwogICAgICAgICAgICBkb2N1bWVudC5lZGl0RW5kKCk7CiAgICAg ICAgfQogICAgfSBlbHNlIHsKICAgICAgICBjb2RlID0ganNfYmVhdXRpZnko ZG9jdW1lbnQudGV4dCgpKTsKICAgICAgICBkb2N1bWVudC5lZGl0QmVnaW4o KTsKICAgICAgICBkb2N1bWVudC5zZXRUZXh0KGNvZGUpOwogICAgICAgIGRv Y3VtZW50LmVkaXRFbmQoKTsKICAgIH0KfQoKZnVuY3Rpb24gYWN0aW9uKGNt ZCkgewogICAgdmFyIGEgPSBuZXcgT2JqZWN0KCk7CiAgICBpZiAoY21kID09 ICJqc2JlYXV0aWZpZXIiKSB7CiAgICAgICAgYS50ZXh0ID0gaTE4bigiSnMg YmVhdXRpZnkiKTsKICAgICAgICBhLmludGVyYWN0aXZlID0gZmFsc2U7CiAg ICB9CiAgICByZXR1cm4gYTsKfQoKZnVuY3Rpb24gaGVscChjbWQpIHsKICAg IGlmIChjbWQgPT0gImpzYmVhdXRpZmllciIpIHsKICAgICAgICByZXR1cm4g aTE4bigiVXNlIHRoZSBqcyBiZWF1dGlmaWVyIHNjcmlwdCB0byBnZXQgZmFu Y3kgeW91ciBqcyBjb2RlIik7CiAgICB9Cn0= ---1066824098-1229438011-1403199816=:83677 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ KWrite-Devel mailing list KWrite-Devel@kde.org https://mail.kde.org/mailman/listinfo/kwrite-devel ---1066824098-1229438011-1403199816=:83677--