# Name: soo_plugin_display v0.2.4 # Type: Admin/Client side plugin # Display info about installed plugins # Author: Jeff Soo # URL: http://ipsedixit.net/txp/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE4OiJzb29fcGx1Z2luX2Rpc3BsYXkiO3M6NjoiYXV0aG9y IjtzOjg6IkplZmYgU29vIjtzOjEwOiJhdXRob3JfdXJpIjtzOjI1OiJodHRwOi8vaXBzZWRp eGl0Lm5ldC90eHAvIjtzOjc6InZlcnNpb24iO3M6NToiMC4yLjQiO3M6MTE6ImRlc2NyaXB0 aW9uIjtzOjM2OiJEaXNwbGF5IGluZm8gYWJvdXQgaW5zdGFsbGVkIHBsdWdpbnMiO3M6NDoi aGVscCI7czoxNTAwNDoiPGgxPnNvb19wbHVnaW5fZGlzcGxheTwvaDE+Cgo8cD5UaGlzIGlz IGEgcGx1Z2luIGZvciA8YSBocmVmPSJodHRwOi8vdGV4dHBhdHRlcm4uY29tIj5UZXh0cGF0 dGVybjwvYT4uIFBsdWdpbiBhdXRob3JzIGNhbiBkaXNwbGF5IGNvZGUsIGhlbHAgdGV4dCwg YW5kIG90aGVyIGFzcGVjdHMgb2YgcGx1Z2lucyBkaXJlY3RseSBmcm9tIFRleHRwYXR0ZXJu LjwvcD4KCjx1bD4KCTxsaT48YSBocmVmPSJodHRwczovL2ZvcnVtLnRleHRwYXR0ZXJuLmlv L3ZpZXd0b3BpYy5waHA/aWQ9MzE4NjYiPlN1cHBvcnQgZm9ydW0gdG9waWM8L2E+PC9saT4K CTxsaT48YSBocmVmPSJodHRwOi8vaXBzZWRpeGl0Lm5ldC90eHAvMTA5L3Nvb19wbHVnaW5f ZGlzcGxheSI+QXV0aG9yIHNpdGU8L2E+PC9saT4KCTxsaT48YSBocmVmPSJodHRwczovL2dp dGh1Yi5jb20vanNvby9zb29fcGx1Z2luX2Rpc3BsYXkiPkdpdEh1YjwvYT48L2xpPgo8L3Vs PgoKPGRpdiBpZD0idG9jIj4KCjxoMj5Db250ZW50czwvaDI+Cgo8dWw+Cgk8bGk+PGEgaHJl Zj0iI292ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiN1c2FnZSI+ VXNhZ2U8L2E+PC9saT4KCTxsaT48YSBocmVmPSIjdGFncyI+VGFnczwvYT4KCTx1bD4KCQk8 bGk+PGEgaHJlZj0iI3Nvb19wbHVnaW5fZGlzcGxheSI+c29vX3BsdWdpbl9kaXNwbGF5PC9h PjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNzb29fcGx1Z2luX2F1dGhvcl91cmkiPnNvb19wbHVn aW5fYXV0aG9yX3VyaSwgc29vX3BsdWdpbl92ZXJzaW9uLCBzb29fcGx1Z2luX2Rlc2NyaXB0 aW9uPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNzb29fcGx1Z2luX2F1dGhvciI+c29vX3Bs dWdpbl9hdXRob3IsIHNvb19wbHVnaW5fbmFtZTwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIj c29vX3BsdWdpbl9zaXplIj5zb29fcGx1Z2luX3NpemU8L2E+PC9saT4KCQk8bGk+PGEgaHJl Zj0iI3Nvb19wbHVnaW5faGVscCI+c29vX3BsdWdpbl9oZWxwPC9hPjwvbGk+CgkJPGxpPjxh IGhyZWY9IiNzb29fcGx1Z2luX2NvZGUiPnNvb19wbHVnaW5fY29kZTwvYT48L2xpPgoJPC91 bD48L2xpPgoJPGxpPjxhIGhyZWY9IiNleGFtcGxlcyI+RXhhbXBsZXM8L2E+PC9saT4KCTxs aT48YSBocmVmPSIjcHJlZmVyZW5jZXMiPlByZWZlcmVuY2VzPC9hPjwvbGk+Cgk8bGk+PGEg aHJlZj0iI2hpc3RvcnkiPkhpc3Rvcnk8L2E+PC9saT4KPC91bD4KCjwvZGl2PgoKPGgyIGlk PSJvdmVydmlldyI+T3ZlcnZpZXc8L2gyPgoKPHA+RGlzcGxheSBpbmZvcm1hdGlvbiBhYm91 dCBpbnN0YWxsZWQgcGx1Z2lucy48L3A+Cgo8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+Cgo8 cD5UaGUgPGNvZGU+c29vX3BsdWdpbl9kaXNwbGF5PC9jb2RlPiB0YWcgd29ya3MgYXMgYSBj b250YWluZXIgb3Igd2l0aCBhIGZvcm0gdGhhdCByZXRyaWV2ZXMgbW9zdCBvZiB0aGUgdHhw X3BsdWdpbiBmaWVsZHMgZm9yIHRoZSBwbHVnaW4gc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5u YW1lPC9jb2RlPiBhdHRyaWJ1dGUuIFBsYWNlIGFueSBvZiB0aGUgb3RoZXIgdGFncyAoPGNv ZGU+c29vX3BsdWdpbl9hdXRob3I8L2NvZGU+LCBldGMuKSBpbnNpZGUgdGhlIGNvbnRhaW5l ciBvciBmb3JtIHRvIGRpc3BsYXkgeW91ciBjaG9pY2Ugb2YgZmllbGRzLjwvcD4KCjxwPklm IDxjb2RlPm5hbWU8L2NvZGU+IGlzIGxlZnQgYmxhbmsgKHRoZSA8c3BhbiBjbGFzcz0iZGVm YXVsdCI+ZGVmYXVsdDwvc3Bhbj4pLCA8Y29kZT5zb29fcGx1Z2luX2Rpc3BsYXk8L2NvZGU+ IHdpbGwgcmV0cmlldmUgYWxsIHBsdWdpbnMgKG9wdGlvbmFsbHkgcmVzdHJpY3RlZCBieSBw bHVnaW4gcHJlZml4IG9yIHN0YXR1cykuIEluIHRoaXMgY2FzZSB0aGUgcGx1Z2luIGNvZGUg YW5kIGhlbHAgd2lsbCA8c3Ryb25nPm5vdDwvc3Ryb25nPiBiZSByZXRyaWV2ZWQsIHNvIDxj b2RlPnNvb19wbHVnaW5fY29kZTwvY29kZT4gYW5kIDxjb2RlPnNvb19wbHVnaW5faGVscDwv Y29kZT4gd2lsbCBub3QgcHJvZHVjZSBvdXRwdXQuPC9wPgoKPHA+VGhlIHBsdWdpbiBpcyBj b21wYXRpYmxlIHdpdGggPGEgaHJlZj0iaHR0cDovL2lwc2VkaXhpdC5uZXQvdHhwLzkyL3Nv b19wbHVnaW5fcHJlZiI+c29vX3BsdWdpbl9wcmVmPC9hPiwgYWxsb3dpbmcgeW91IHRvIGFk anVzdCBzb21lIG9mIHRoZSBkZWZhdWx0IHRhZyBhdHRyaWJ1dGUgdmFsdWVzLjwvcD4KCjxo MiBpZD0idGFncyI+VGFnczwvaDI+Cgo8cD5BbGwgdGFncyAoZXhjZXB0IGZvciA8Y29kZT5z b29fcGx1Z2luX2Rpc3BsYXk8L2NvZGU+KSA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPm11c3Q8 L3NwYW4+IGJlIGluIGEgPGNvZGU+c29vX3BsdWdpbl9kaXNwbGF5PC9jb2RlPiBjb250YWlu ZXIgb3IgZm9ybSB0byBwcm9kdWNlIG91dHB1dC48L3A+Cgo8aDMgaWQ9InNvb19wbHVnaW5f ZGlzcGxheSI+c29vX3BsdWdpbl9kaXNwbGF5PC9oMz4KCjxwPlJldHJpZXZlIGEgbmFtZWQg cGx1Z2luIG9yIGEgbGlzdCBvZiBwbHVnaW5zOyBpdGVyYXRlIG92ZXIgZWFjaCBwbHVnaW4g d2l0aCB0aGUgdGFnIGNvbnRlbnRzIG9yIHNwZWNpZmllZCBmb3JtLjwvcD4KCjxwcmU+Jmx0 O3R4cDpzb29fcGx1Z2luX2Rpc3BsYXkgZm9ybT0mcXVvdDtmb28mcXVvdDsgLyZndDsgICAg Jmx0OyEtLSB1c2Ugd2l0aCBhIGZvcm0gLS0mZ3Q7CgombHQ7dHhwOnNvb19wbHVnaW5fZGlz cGxheSZndDsgICAgICAgICAgICAgICAgICZsdDshLS0gb3IgYXMgYSBjb250YWluZXIgLS0m Z3Q7CgkuLi4KJmx0Oy90eHA6c29vX3BsdWdpbl9kaXNwbGF5Jmd0OzwvcHJlPgoKPGg0PkF0 dHJpYnV0ZXM8L2g0PgoKPHVsPgoJPGxpPjxjb2RlPm5hbWU8L2NvZGU+IDxlbT4ocGx1Z2lu IG5hbWUpPC9lbT4gUGx1Z2luIHRvIGRpc3BsYXkuIElmIGJsYW5rICh0aGUgPHNwYW4gY2xh c3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+KSwgcmV0cmlldmUgYSBsaXN0IG9mIHBsdWdp bnMgKDxkZm4+bGlzdCBtb2RlPC9kZm4+KTwvbGk+Cgk8bGk+PGNvZGU+Zm9ybTwvY29kZT4g PGVtPihUeHAgZm9ybSBuYW1lKTwvZW0+IEZvcm0gdG8gZGlzcGxheSBvdXRwdXQuIElmIGVt cHR5LCBjb250YWluZXIgdGFnIHJlcXVpcmVkIGZvciBvdXRwdXQuIDxzcGFuIGNsYXNzPSJk ZWZhdWx0Ij5EZWZhdWx0PC9zcGFuPiBpcyBlbXB0eSAoY2FuIGJlIGNoYW5nZWQgaW4gcHJl ZnMpLjwvbGk+CjwvdWw+Cgo8cD5UaGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgYXJlIGVmZmVj dGl2ZSBvbmx5IGluIGxpc3QgbW9kZSAoaS5lLiwgd2hlbiA8Y29kZT5uYW1lPC9jb2RlPiBp cyBsZWZ0IGJsYW5rKS48L3A+Cgo8dWw+Cgk8bGk+PGNvZGU+cHJlZml4PC9jb2RlPiA8ZW0+ KHBsdWdpbiBhdXRob3IgcHJlZml4KTwvZW0+IHNlbGVjdCBvbmx5IHBsdWdpbnMgd2l0aCB0 aGlzIHByZWZpeDwvbGk+Cgk8bGk+PGNvZGU+c2hvd19pbmFjdGl2ZTwvY29kZT4gPGVtPihi b29sZWFuKTwvZW0+IDxzcGFuIGNsYXNzPSJkZWZhdWx0Ij5kZWZhdWx0PC9zcGFuPiAmIzgy MjA7MCYjODIyMTssIHdoZXRoZXIgdG8gaW5jbHVkZSBpbmFjdGl2ZSBwbHVnaW5zPC9saT4K CTxsaT48Y29kZT5zb3J0PC9jb2RlPiA8ZW0+KE15U1FMIHNvcnQgdmFsdWUpPC9lbT4gPHNw YW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+ICYjODIyMDtuYW1lIGFzYyYjODIy MTsgKGluIGFkZGl0aW9uIHRvIGNvbHVtbiBuYW1lcywgJiM4MjIwO3NpemUmIzgyMjE7IGlz IGFsc28gYXZhaWxhYmxlIGZvciBzb3J0aW5nKTwvbGk+Cgk8bGk+PGNvZGU+d3JhcHRhZzwv Y29kZT4gPGVtPig8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4gdGFnIG5hbWUsIHdp dGhvdXQgYnJhY2tldHMpPC9lbT48L2xpPgoJPGxpPjxjb2RlPmJyZWFrPC9jb2RlPiA8ZW0+ KDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiB0YWcgbmFtZSwgd2l0aG91dCBicmFj a2V0cyk8L2VtPjwvbGk+Cgk8bGk+PGNvZGU+Y2xhc3M8L2NvZGU+IDxlbT4oPHNwYW4gY2xh c3M9ImNhcHMiPkhUTUw8L3NwYW4+IGNsYXNzIGF0dHJpYnV0ZSk8L2VtPiBhcHBsaWVkIHRv IDxjb2RlPndyYXB0YWc8L2NvZGU+PC9saT4KCTxsaT48Y29kZT5odG1sX2lkPC9jb2RlPiA8 ZW0+KDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiBJRCBhdHRyaWJ1dGUpPC9lbT4g YXBwbGllZCB0byA8Y29kZT53cmFwdGFnPC9jb2RlPjwvbGk+CjwvdWw+Cgo8aDMgaWQ9InNv b19wbHVnaW5fYXV0aG9yX3VyaSI+c29vX3BsdWdpbl9hdXRob3JfdXJpLCBzb29fcGx1Z2lu X3ZlcnNpb24sIHNvb19wbHVnaW5fZGVzY3JpcHRpb248L2gzPgoKPHA+Tm8gYXR0cmlidXRl czogZWFjaCBzaW1wbHkgZGlzcGxheXMgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQgc3RyYWln aHQgZnJvbSA8Y29kZT50eHBfcGx1Z2luPC9jb2RlPi48L3A+Cgo8cHJlPiZsdDt0eHA6c29v X3BsdWdpbl9hdXRob3JfdXJpIC8mZ3Q7CiZsdDt0eHA6c29vX3BsdWdpbl92ZXJzaW9uIC8m Z3Q7CiZsdDt0eHA6c29vX3BsdWdpbl9kZXNjcmlwdGlvbiAvJmd0OzwvcHJlPgoKPGgzIGlk PSJzb29fcGx1Z2luX2F1dGhvciI+c29vX3BsdWdpbl9hdXRob3IsIHNvb19wbHVnaW5fbmFt ZTwvaDM+Cgo8cD5BcyBhYm92ZSwgYnV0IHRoZXNlIGFjY2VwdCBhbiBvcHRpb25hbCA8Y29k ZT5saW5rPC9jb2RlPiBhdHRyaWJ1dGUuPC9wPgoKPHByZT4mbHQ7dHhwOnNvb19wbHVnaW5f YXV0aG9yIC8mZ3Q7CiZsdDt0eHA6c29vX3BsdWdpbl9uYW1lIC8mZ3Q7PC9wcmU+Cgo8aDQ+ QXR0cmlidXRlczwvaDQ+Cgo8dWw+Cgk8bGk+PGNvZGU+bGluazwvY29kZT4gPGVtPihib29s ZWFuKTwvZW0+IHdoZXRoZXIgdG8gbWFrZSBvdXRwdXQgYSBsaW5rIHRvIHRoZSBwbHVnaW4g YXV0aG9yJiM4MjE3O3Mgd2Vic2l0ZSwgPHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRlZmF1bHQ8 L3NwYW4+ICYjODIyMDsxJiM4MjIxOzwvbGk+CjwvdWw+Cgo8aDMgaWQ9InNvb19wbHVnaW5f c2l6ZSI+c29vX3BsdWdpbl9zaXplPC9oMz4KCjxwPkRpc3BsYXkgdGhlIHBsdWdpbiYjODIx NztzIGluc3RhbGxlZCBjb2RlIHNpemUgaW4gS0IgKGNvdW50aW5nIDEgY2hhcmFjdGVyID0g MSBieXRlKTwvcD4KCjxwcmU+Jmx0O3R4cDpzb29fcGx1Z2luX3NpemUgLyZndDs8L3ByZT4K CjxoND5BdHRyaWJ1dGVzPC9oND4KCjx1bD4KCTxsaT48Y29kZT5mb3JtYXQ8L2NvZGU+IDxl bT4odGV4dCk8L2VtPiA8c3BhbiBjbGFzcz0iZGVmYXVsdCI+ZGVmYXVsdDwvc3Bhbj4gJiM4 MjE2O3tzaXplfSZhbXA7bmJzcDtLQiYjODIxNzssIGNhbiBiZSBjaGFuZ2VkIGluIHByZWZz LjwvbGk+CjwvdWw+Cgo8cD5UaGUgcGx1Z2luIG91dHB1dHMgdGhlIHZhbHVlIG9mIDxjb2Rl PmZvcm1hdDwvY29kZT4sIGZpcnN0IHJlcGxhY2luZyBhbnkgb2NjdXJyZW5jZXMgb2YgJiM4 MjE2O3tzaXplfSYjODIxNzsgd2l0aCB0aGUgc2l6ZSBpbiBLQi48L3A+Cgo8aDMgaWQ9InNv b19wbHVnaW5faGVscCI+c29vX3BsdWdpbl9oZWxwPC9oMz4KCjxwPkRpc3BsYXkgdGhlIHBs dWdpbiYjODIxNztzIGhlbHAgdGV4dC48L3A+Cgo8cHJlPiZsdDt0eHA6c29vX3BsdWdpbl9o ZWxwIC8mZ3Q7PC9wcmU+Cgo8cD48c3BhbiBjbGFzcz0id2FybmluZyI+RG9lcyBub3Qgd29y ayBpbiBsaXN0IG1vZGU8L3NwYW4+IChpLmUuLCB3aGVuIDxjb2RlPnNvb19wbHVnaW5fZGlz cGxheTwvY29kZT4gaGFzIGEgYmxhbmsgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlKS48 L3A+Cgo8aDQ+QXR0cmlidXRlczwvaDQ+Cgo8dWw+Cgk8bGk+PGNvZGU+c3RyaXBfc3R5bGU8 L2NvZGU+IDxlbT4oYm9vbGVhbik8L2VtPiB3aGV0aGVyIG9yIG5vdCB0byByZW1vdmUgYW55 IGxlYWRpbmcgPGNvZGU+Jmx0O3N0eWxlJmd0OzwvY29kZT4gZWxlbWVudCAoPHNwYW4gY2xh c3M9ImRlZmF1bHQiPmRlZmF1bHQ8L3NwYW4+ICYjODIyMDsxJiM4MjIxOywgY2FuIGJlIGNo YW5nZWQgaW4gcHJlZnMpPC9saT4KCTxsaT48Y29kZT5zdHJpcF90aXRsZTwvY29kZT4gPGVt Pihib29sZWFuKTwvZW0+IHdoZXRoZXIgb3Igbm90IHRvIHJlbW92ZSBhbnkgbGVhZGluZyA8 Y29kZT4mbHQ7aDEmZ3Q7PC9jb2RlPiBlbGVtZW50ICg8c3BhbiBjbGFzcz0iZGVmYXVsdCI+ ZGVmYXVsdDwvc3Bhbj4gJiM4MjIwOzEmIzgyMjE7LCBjYW4gYmUgY2hhbmdlZCBpbiBwcmVm cyk8L2xpPgoJPGxpPjxjb2RlPnNlY3Rpb25faWQ8L2NvZGU+IDxlbT4oPHNwYW4gY2xhc3M9 ImNhcHMiPkhUTUw8L3NwYW4+IGlkIHZhbHVlKTwvZW0+IHN0YXJ0IGRpc3BsYXkgZnJvbSBp ZGVudGlmaWVkIGhlYWRlciBlbGVtZW50LCBjb250aW51ZSB0aWxsIG5leHQgaGVhZGVyIG9m IHNhbWUgb3IgbG93ZXIgbGV2ZWw8L2xpPgoJPGxpPjxjb2RlPmhfcGx1czwvY29kZT4gPGVt PihpbnRlZ2VyKTwvZW0+IHRyYW5zcG9zZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bh bj4gaGVhZGVyIGxldmVscyBieSB0aGlzIGFtb3VudDwvbGk+CjwvdWw+Cgo8cD48Y29kZT5z dHJpcF9zdHlsZTwvY29kZT4gbG9va3MgZm9yIGFuIG9wZW5pbmcgPGNvZGU+Jmx0O3N0eWxl Jmd0OzwvY29kZT4gdGFnIGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBIZWxwIHNlY3Rpb24u IDxjb2RlPnN0cmlwX3RpdGxlPC9jb2RlPiBsb29rcyBmb3IgdGhlIGZpcnN0IG9jY3VyZW5j ZSBvZiA8Y29kZT4mbHQ7aDEmZ3Q7PC9jb2RlPi4gQm90aCBkbyBhIG5vbi1ncmVlZHkgbWF0 Y2ggbG9va2luZyBmb3IgdGhlIGNsb3NpbmcgdGFnLjwvcD4KCjxwPldpdGggPGNvZGU+c2Vj dGlvbl9pZDwvY29kZT4sIGRpc3BsYXkgYmVnaW5zIGZyb20gdGhlIDxzcGFuIGNsYXNzPSJj YXBzIj5IVE1MPC9zcGFuPiBoZWFkZXIgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgaWQu IERpc3BsYXkgY29udGludWVzIHRpbGwgdGhlIG5leHQgPHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+IGhlYWRlciB3aXRoIHRoZSBzYW1lIG9yIGxvd2VyIGxldmVsICg8Y29kZT4m bHQ7aDImZ3Q7PC9jb2RlPiBjb25zaWRlcmVkIGxvd2VyIHRoYW4gPGNvZGU+Jmx0O2gzJmd0 OzwvY29kZT4sIGZvciBleGFtcGxlKSBvciB1bnRpbCB0aGUgZW5kIGlmIG5vIHN1Y2ggaGVh ZGVyIGlzIGZvdW5kLjwvcD4KCjxwPjxjb2RlPmhfcGx1czwvY29kZT4gY2FuIGJlIGhlbHBm dWwgd2hlbiBicmVha2luZyBhIGxvbmcgaGVscCB0ZXh0IGludG8gc2V2ZXJhbCB3ZWIgcGFn ZXMsIGluIGNvbmp1Y3Rpb24gd2l0aCA8Y29kZT5zZWN0aW9uX2lkPC9jb2RlPi4gRm9yIGV4 YW1wbGUsIDxjb2RlPmhfcGx1cz0mcXVvdDstMiZxdW90OzwvY29kZT4gd2lsbCB0cmFuc3Bv c2UgYWxsIDxjb2RlPmg2PC9jb2RlPiBlbGVtZW50cyB0byA8Y29kZT5oNDwvY29kZT4sIGFs bCA8Y29kZT5oNTwvY29kZT4gZWxlbWVudHMgdG8gPGNvZGU+aDM8L2NvZGU+LCBldGMuPC9w PgoKPGgzIGlkPSJzb29fcGx1Z2luX2NvZGUiPnNvb19wbHVnaW5fY29kZTwvaDM+Cgo8cD5E aXNwbGF5IHBsdWdpbiBzb3VyY2UgY29kZSwgYnkgPHNwYW4gY2xhc3M9ImRlZmF1bHQiPmRl ZmF1bHQ8L3NwYW4+IHRoZSB3aG9sZSB0aGluZywgb3Igc2VsZWN0ZWQgY29kZSBkZXRlcm1p bmVkIGJ5IHRoZSA8Y29kZT5mdW5jdGlvbjwvY29kZT4gYW5kL29yIDxjb2RlPnBocF9jbGFz czwvY29kZT4gYXR0cmlidXRlcy48L3A+Cgo8cHJlPiZsdDt0eHA6c29vX3BsdWdpbl9jb2Rl IC8mZ3Q7PC9wcmU+Cgo8cD48c3BhbiBjbGFzcz0id2FybmluZyI+RG9lcyBub3Qgd29yayBp biBsaXN0IG1vZGU8L3NwYW4+IChpLmUuLCB3aGVuIDxjb2RlPnNvb19wbHVnaW5fZGlzcGxh eTwvY29kZT4gaGFzIGEgYmxhbmsgPGNvZGU+bmFtZTwvY29kZT4gYXR0cmlidXRlKS48L3A+ Cgo8aDQ+QXR0cmlidXRlczwvaDQ+Cgo8dWw+Cgk8bGk+PGNvZGU+Y2xhc3M8L2NvZGU+IDxl bT4oaHRtbCBjbGFzcyBuYW1lKTwvZW0+IGZvciB3cmFwcGluZyAmbHQ7Y29kZSZndDsgYW5k ICZsdDtwcmUmZ3Q7IGVsZW1lbnRzPC9saT4KCTxsaT48Y29kZT5odG1sX2lkPC9jb2RlPiA8 ZW0+KGh0bWwgaWQgbmFtZSk8L2VtPiBmb3Igd3JhcHBpbmcgJmx0O2NvZGUmZ3Q7IGFuZCAm bHQ7cHJlJmd0OyBlbGVtZW50czwvbGk+Cgk8bGk+PGNvZGU+dGFiX3N0b3A8L2NvZGU+IDxl bT4oaW50ZWdlcik8L2VtPiBsZW5ndGggb2YgdGFiIHN0b3A8L2xpPgoJPGxpPjxjb2RlPmZ1 bmN0aW9uPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT4gU2hvdyBvbmx5IHRoaXMgZnVuY3Rpb24u IFVzZSBpbiBjb21iaW5hdGlvbiB3aXRoIDxjb2RlPnBocF9jbGFzczwvY29kZT4gdG8gc2hv dyBvbmx5IHRoaXMgbWV0aG9kLjwvbGk+Cgk8bGk+PGNvZGU+cGhwX2NsYXNzPC9jb2RlPiA8 ZW0+KHRleHQpPC9lbT4gU2hvdyBvbmx5IHRoaXMgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwv c3Bhbj4gY2xhc3M8L2xpPgoJPGxpPjxjb2RlPmhpZ2hsaWdodDwvY29kZT4gPGVtPihib29s ZWFuKTwvZW0+IHdoZXRoZXIgb3Igbm90IHRvIGFkZCBzeW50YXggaGlnaGxpZ2h0aW5nIHRv IG91dHB1dC4gPHNwYW4gY2xhc3M9ImRlZmF1bHQiPkRlZmF1bHQ8L3NwYW4+ICYjODIyMDsx JiM4MjIxOywgYWRkIGhpZ2hsaWdodGluZyAoY2FuIGJlIGNoYW5nZWQgaW4gcHJlZnMpLjwv bGk+CjwvdWw+Cgo8cD5UaGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgYXJlIGVmZmVjdGl2ZSBv bmx5IHdoZW4gaGlnaGxpZ2h0aW5nIGlzIGVuYWJsZWQuPC9wPgoKPHVsPgoJPGxpPjxjb2Rl PnNob3dfbGluZV9udW1iZXJzPC9jb2RlPiA8ZW0+KHRleHQpPC9lbT4gSWYgc2V0LCB0ZXh0 IHRvIGFwcGVuZCB0byBlYWNoIGxpbmUgbnVtYmVyLiBJZiBibGFuaywgZG8gbm90IHNob3cg bGluZSBudW1iZXJzLiA8c3BhbiBjbGFzcz0iZGVmYXVsdCI+ZGVmYXVsdDwvc3Bhbj4gJiM4 MjIwOzomIzgyMjE7IChjYW4gYmUgY2hhbmdlZCBpbiBwcmVmcykuPC9saT4KCTxsaT48Y29k ZT5yZWluZGV4X2xpbmVzPC9jb2RlPiA8ZW0+KGludGVnZXIpPC9lbT4gV2l0aCA8Y29kZT5m dW5jdGlvbjwvY29kZT4gYW5kL29yIDxjb2RlPnBocF9jbGFzczwvY29kZT4sIHJlbnVtYmVy IGxpbmVzIHN0YXJ0aW5nIGZyb20gdGhlIHZhbHVlIGdpdmVuLiA8c3BhbiBjbGFzcz0iZGVm YXVsdCI+RGVmYXVsdDwvc3Bhbj4gJiM4MjIwOzAmIzgyMjE7LCBkbyBub3QgcmVpbmRleC48 L2xpPgo8L3VsPgoKPHA+VGhlIGZ1bmN0aW9uL2NsYXNzIHNlYXJjaCBpc24mIzgyMTc7dCB0 aG9yb3VnaCwgYW5kIGlzIGJhc2VkIG9uIG15IGNvZGluZyBzdHlsZS4gSW4gdGhlIGNhc2Ug b2YgYSBmdW5jdGlvbiAob3V0c2lkZSBhIGNsYXNzKSBvciBjbGFzcywgaXQgc2ltcGx5IHN0 b3BzIGF0IHRoZSBmaXJzdCBub24taW5kZW50ZWQgY2xvc2luZyBicmFjZSAoJiM4MjIwO30m IzgyMjE7KSB0aGF0IG9jY3VycyBhZnRlciB0aGUgZnVuY3Rpb24gb3IgY2xhc3MgbmFtZS4g U2FtZSBmb3IgYSBtZXRob2QgKGZ1bmN0aW9uIGluc2lkZSBhIGNsYXNzKSBidXQgd2l0aCB0 aGUgY2xvc2luZyBicmFjZSBpbmRlbnRlZCBvbmUgdGFiLjwvcD4KCjxwPlRhYnMgYXJlIGNv bnZlcnRlZCB0byBzcGFjZXMsIHRvIHN0YXkgYWxpZ25lZCB3aXRoIHRhYiBzdG9wcyBhcyBz ZXQgaW4gcGx1Z2luIHByZWZlcmVuY2VzIG9yIHRoZSA8Y29kZT50YWdfc3RvcDwvY29kZT4g YXR0cmlidXRlLjwvcD4KCjxoNT5IaWdobGlnaHRpbmc8L2g1PgoKPHA+VGhlIGNvZGUgaGln aGxpZ2h0aW5nIGlzIGJhc2VkIG9uIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFu PiA8Y29kZT5oaWdobGlnaHRfc3RyaW5nKCk8L2NvZGU+IGZ1bmN0aW9uLiBUaGUgPGNvZGU+ c3R5bGU8L2NvZGU+IGRlY2xhcmF0aW9ucyBwcm9kdWNlZCBieSA8Y29kZT5oaWdobGlnaHRf c3RyaW5nKCk8L2NvZGU+IGFyZSByZXBsYWNlZCBieSA8Y29kZT5jbGFzczwvY29kZT4gZGVj bGFyYXRpb25zLiBUaGUgaW1wb3J0YW50IG9uZXM6PC9wPgoKPHVsPgoJPGxpPjxjb2RlPnBo cF9jb21tZW50PC9jb2RlPiBjb21tZW50czwvbGk+Cgk8bGk+PGNvZGU+cGhwX2tleXdvcmQ8 L2NvZGU+IGtleXdvcmRzLCBvcGVyYXRvcnMsIGJyYWNrZXRzLCBzZW1pY29sb25zLCBldGMu PC9saT4KCTxsaT48Y29kZT5waHBfZGVmYXVsdDwvY29kZT4gZnVuY3Rpb24gbmFtZXMgKGlu Y2x1ZGluZyBjb3JlIDxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+IGZ1bmN0aW9ucyk8 L2xpPgoJPGxpPjxjb2RlPnBocF9zdHJpbmc8L2NvZGU+IHN0cmluZ3M8L2xpPgo8L3VsPgoK PHA+RXZlcnl0aGluZyB3aWxsIGJlIGluIGEgPGNvZGU+c3BhbjwvY29kZT4gd2l0aCBvbmUg b2YgdGhvc2UgY2xhc3MgbmFtZXMuIFRoZSB3aG9sZSB0aGluZyBpcyB3cmFwcGVkIGluIGEg PGNvZGU+Y29kZTwvY29kZT4gZWxlbWVudC48L3A+Cgo8cD5JZiB5b3UgcHJlZmVyIHRvIHVz ZSBqYXZhc2NyaXB0LWJhc2VkIGhpZ2hsaWdodGluZywgc3VjaCBhcyB0aGUgZXhjZWxsZW50 IDxhIGhyZWY9Imh0dHA6Ly9hbGV4Z29yYmF0Y2hldi5jb20vU3ludGF4SGlnaGxpZ2h0ZXIv Ij5TeW50YXhIaWdobGlnaHRlcjwvYT4sIHNldCA8Y29kZT5oaWdobGlnaHQ9JnF1b3Q7MCZx dW90OzwvY29kZT4gKG9yIGRvIHRoaXMgaW4gcHJlZnMpIHRvIGdldCByYXcgKGFsdGhvdWdo IHN0aWxsIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPi1lc2NhcGVkKSBjb2RlIG91 dHB1dC4gSW4gdGhpcyBjYXNlIGxpbmUgbnVtYmVycyB3aWxsIG5vdCBiZSBhZGRlZC48L3A+ Cgo8aDIgaWQ9ImV4YW1wbGVzIj5FeGFtcGxlczwvaDI+Cgo8aDM+TGlzdCBhbGwgYWN0aXZl IHBsdWdpbnMgYXMgYSB0YWJsZTwvaDM+Cgo8cD5zaG93aW5nIHBsdWdpbiBhdXRob3IgKGFz IGEgbGluayB0byB0aGUgcGx1Z2luIGF1dGhvciYjODIxNztzIHdlYnNpdGUpIGFuZCBkZXNj cmlwdGlvbjwvcD4KCjxwcmU+Jmx0O3R4cDpzb29fcGx1Z2luX2Rpc3BsYXkgd3JhcHRhZz0m cXVvdDt0YWJsZSZxdW90OyBicmVhaz0mcXVvdDt0ciZxdW90OyZndDsKJmx0O3RkJmd0OyZs dDt0eHA6c29vX3BsdWdpbl9uYW1lIC8mZ3Q7Jmx0Oy90ZCZndDsmbHQ7dGQmZ3Q7Jmx0O3R4 cDpzb29fcGx1Z2luX2Rlc2NyaXB0aW9uIC8mZ3Q7Jmx0Oy90ZCZndDsKJmx0Oy90eHA6c29v X3BsdWdpbl9kaXNwbGF5Jmd0OzwvcHJlPgoKPGgzPkRpc3BsYXkgcGx1Z2luIGhlbHA8L2gz PgoKPHByZT4mbHQ7dHhwOnNvb19wbHVnaW5fZGlzcGxheSBuYW1lPSZxdW90O3Nvb19pbWFn ZSZxdW90OyZndDsKJmx0O3R4cDpzb29fcGx1Z2luX2hlbHAgLyZndDsKJmx0Oy90eHA6c29v X3BsdWdpbl9kaXNwbGF5Jmd0OzwvcHJlPgoKPGgzPkRpc3BsYXkgZnVsbCBzb3VyY2UgY29k ZTwvaDM+Cgo8cD5sZWF2aW5nIG9mZiB0aGUgbGluZSBudW1iZXJzPC9wPgoKPHByZT4mbHQ7 dHhwOnNvb19wbHVnaW5fZGlzcGxheSBuYW1lPSZxdW90O3Nvb19wbHVnaW5fcHJlZiZxdW90 OyZndDsKJmx0O3R4cDpzb29fcGx1Z2luX2NvZGUgc2hvd19saW5lX251bWJlcnM9JnF1b3Q7 JnF1b3Q7IC8mZ3Q7CiZsdDsvdHhwOnNvb19wbHVnaW5fZGlzcGxheSZndDs8L3ByZT4KCjxo Mz5EaXNwbGF5IGEgc2luZ2xlIG1ldGhvZDwvaDM+Cgo8cD5yZW51bWJlcmluZyB0aGUgbGlu ZXMsIHN0YXJ0aW5nIGZyb20gMTwvcD4KCjxwcmU+Jmx0O3R4cDpzb29fcGx1Z2luX2Rpc3Bs YXkgbmFtZT0mcXVvdDtzb29fdHhwX29iaiZxdW90OyZndDsKJmx0O3R4cDpzb29fcGx1Z2lu X2NvZGUgcGhwX2NsYXNzPSZxdW90O3Nvb19odG1sJnF1b3Q7IGZ1bmN0aW9uPSZxdW90O3Rh ZyZxdW90OyByZWluZGV4X2xpbmVzPSZxdW90OzEmcXVvdDsgLyZndDsKJmx0Oy90eHA6c29v X3BsdWdpbl9kaXNwbGF5Jmd0OzwvcHJlPgoKPGgyIGlkPSJwcmVmZXJlbmNlcyI+UHJlZmVy ZW5jZXM8L2gyPgoKPHA+SWYgeW91IGhhdmUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9pcHNlZGl4 aXQubmV0L3R4cC85Mi9zb29fcGx1Z2luX3ByZWYiPnNvb19wbHVnaW5fcHJlZjwvYT4gcHJl ZmVyZW5jZSBtYW5hZ2VtZW50IHN5c3RlbSBpbnN0YWxsZWQsIHlvdSBjYW4gYWRqdXN0IHNv bWUgb2YgdGhlIGRlZmF1bHQgdGFnIGF0dHJpYnV0ZSB2YWx1ZXMuIFByZWZlcmVuY2Ugc2V0 dGluZ3M6PC9wPgoKPHVsPgoJPGxpPkRlZmF1bHQgdmFsdWUgZm9yIDxjb2RlPnNvb19wbHVn aW5fZGlzcGxheTwvY29kZT4mIzgyMTc7cyA8Y29kZT5mb3JtPC9jb2RlPiBhdHRyaWJ1dGU8 L2xpPgoJPGxpPkRlZmF1bHQgdmFsdWUgZm9yIDxjb2RlPnNvb19wbHVnaW5faGVscDwvY29k ZT4mIzgyMTc7cyA8Y29kZT5zdHJpcF9zdHlsZTwvY29kZT4gYXR0cmlidXRlPC9saT4KCTxs aT5EZWZhdWx0IHZhbHVlIGZvciA8Y29kZT5zb29fcGx1Z2luX2hlbHA8L2NvZGU+JiM4MjE3 O3MgPGNvZGU+c3RyaXBfdGl0bGU8L2NvZGU+IGF0dHJpYnV0ZTwvbGk+Cgk8bGk+RGVmYXVs dCB2YWx1ZSBmb3IgPGNvZGU+c29vX3BsdWdpbl9zaXplPC9jb2RlPiYjODIxNztzIDxjb2Rl PmZvcm1hdDwvY29kZT4gYXR0cmlidXRlPC9saT4KCTxsaT5EZWZhdWx0IHZhbHVlIGZvciA8 Y29kZT5zb29fcGx1Z2luX2NvZGU8L2NvZGU+JiM4MjE3O3MgPGNvZGU+aGlnaGxpZ2h0PC9j b2RlPiBhdHRyaWJ1dGU8L2xpPgoJPGxpPkRlZmF1bHQgdmFsdWUgZm9yIDxjb2RlPnNvb19w bHVnaW5fY29kZTwvY29kZT4mIzgyMTc7cyA8Y29kZT5zaG93X2xpbmVfbnVtYmVyczwvY29k ZT4gYXR0cmlidXRlPC9saT4KCTxsaT5EZWZhdWx0IHZhbHVlIGZvciA8Y29kZT5zb29fcGx1 Z2luX2NvZGU8L2NvZGU+JiM4MjE3O3MgPGNvZGU+dGFiX3N0b3A8L2NvZGU+IGF0dHJpYnV0 ZTwvbGk+CjwvdWw+Cgo8aDIgaWQ9Imhpc3RvcnkiPlZlcnNpb24gSGlzdG9yeTwvaDI+Cgo8 aDM+MC4yLjQgKDIwMTctMDItMTUpPC9oMz4KCjx1bD4KCTxsaT5UZXh0cGF0dGVybiA0LjYg Y29tcGF0aWJpbGl0eSB1cGRhdGU8L2xpPgo8L3VsPgoKPGgzPjAuMi4yICgxMi8yMC8yMDEw KSwgMC4yLjMgKDEyLzI3LzIwMTApPC9oMz4KCjx1bD4KCTxsaT5Db2RlIGNsZWFuaW5nIG9u bHk8L2xpPgo8L3VsPgoKPGgzPjAuMi4xICg5LzE3LzIwMTApPC9oMz4KCjx1bD4KCTxsaT5J bXByb3ZlZCBmdW5jdGlvbi9jbGFzcyBwYXR0ZXJuIG1hdGNoaW5nIGluIDxjb2RlPnNvb19w bHVnaW5fY29kZTwvY29kZT4uPC9saT4KPC91bD4KCjxoMz4wLjIuMCAoNy8xMS8yMDEwKTwv aDM+Cgo8dWw+Cgk8bGk+TmV3IDxjb2RlPmhpZ2hsaWdodDwvY29kZT4gYXR0cmlidXRlIGZv ciA8Y29kZT5zb29fcGx1Z2luX2NvZGU8L2NvZGU+LCBhbGxvd3MgeW91IHRvIGRpc2FibGUg dGhlIHN0YW5kYXJkIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIG91dHB1dCByYXcgKGJ1dCA8 c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj4tZXNjYXBlZCkgY29kZS48L2xpPgoJPGxp PkJ1ZyBmaXg6IDxjb2RlPnNvb19wbHVnaW5fY29kZTwvY29kZT4gbm93IGhhbmRsZXMgbXVs dGktbGluZSBjb21tZW50cyBjb3JyZWN0bHkuPC9saT4KPC91bD4KCjxwPjxzcGFuIGNsYXNz PSJ3YXJuaW5nIj5Ob3RlOjwvc3Bhbj4gSWYgeW91IGFyZSB1cGdyYWRpbmcgZnJvbSBhbiBl YXJsaWVyIHZlcnNpb24sIG5vdGUgdGhhdCA8Y29kZT5zb29fcGx1Z2luX2NvZGU8L2NvZGU+ IGhhcyBzb21lIG90aGVyIGZvcm1hdCBjaGFuZ2VzIChlLmcuLCBoaWdobGlnaHRlZCBvdXRw dXQgaXMgbm93IHdyYXBwZWQgaW4gYSA8Y29kZT5wcmU8L2NvZGU+IGVsZW1lbnQpLCBzbyBz b21lIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNoYW5nZXMgbWlnaHQgYmUgbmVl ZGVkLjwvcD4KCjxoMz4wLjEuNCAoNy80LzIwMTApPC9oMz4KCjx1bD4KCTxsaT48Y29kZT5z b29fcGx1Z2luX2hlbHA8L2NvZGU+IG91dHB1dCBjYW4gaGF2ZSA8c3BhbiBjbGFzcz0iY2Fw cyI+SFRNTDwvc3Bhbj4gaGVhZGVyIGxldmVscyB0cmFuc3Bvc2VkLCB1c2luZyB0aGUgPGNv ZGU+aF9wbHVzPC9jb2RlPiBhdHRyaWJ1dGU8L2xpPgo8L3VsPgoKPGgzPjAuMS4zICg5LzI3 LzIwMDkpPC9oMz4KCjx1bD4KCTxsaT5Gb3IgPGNvZGU+c29vX3BsdWdpbl9jb2RlPC9jb2Rl PiwgdGFiIHRvIHNwYWNlIGNvbnZlcnNpb24gbm93IG1haW50YWlucyB0YWItc3RvcCBhbGln bm1lbnQ8L2xpPgo8L3VsPgoKPGgzPjAuMS4yICg5LzI2LzIwMDkpPC9oMz4KCjx1bD4KCTxs aT5OZXcgYXR0cmlidXRlIGZvciA8Y29kZT5zb29fcGx1Z2luX2hlbHA8L2NvZGU+OgoJPHVs PgoJCTxsaT48Y29kZT5zZWN0aW9uX2lkPC9jb2RlPiwgc3RhcnQgb3V0cHV0IGZyb20gaGVh ZGVyIGVsZW1lbnQgd2l0aCBzcGVjaWZpZWQgPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3Nw YW4+IGlkLCBjb250aW51aW5nIHVudGlsIG5leHQgaGVhZGVyIGVsZW1lbnQgd2l0aCBzYW1l IG9yIGxvd2VyIGxldmVsPC9saT4KCTwvdWw+PC9saT4KCTwvdWw+Cgo8aDM+MC4xLjEgKDkv MjIvMjAwOSk8L2gzPgoKPHVsPgoJPGxpPkZpeGVkOiA8c3BhbiBjbGFzcz0iY2FwcyI+U1FM PC9zcGFuPiBidWcgaW4gbGlzdCBtb2RlPC9saT4KPC91bD4KCjxoMz4wLjEgKDkvMTgvMjAw OSk8L2gzPgoKPHVsPgoJPGxpPkRpc3BsYXkgbW9zdCBmaWVsZHMgc3RyYWlnaHQgZnJvbSB0 aGUgPGNvZGU+dHhwX3BsdWdpbjwvY29kZT4gdGFibGUuIEFsc28sCgk8dWw+CgkJPGxpPnBs dWdpbiBuYW1lIG9yIGF1dGhvciBuYW1lIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGxpbmtlZCB0 byBwbHVnaW4gYXV0aG9yJiM4MjE3O3Mgd2Vic2l0ZTwvbGk+CgkJPGxpPjxjb2RlPnNvb19w bHVnaW5faGVscDwvY29kZT4gaGFzIG9wdGlvbnMgZm9yIHN0cmlwcGluZyB0aXRsZSBhbmQg c3R5bGUgZmlyc3Q8L2xpPgoJCTxsaT48Y29kZT5zb29fcGx1Z2luX3NpemU8L2NvZGU+IHNo b3dzIGluc3RhbGxlZCBjb2RlIHNpemU8L2xpPgoJCTxsaT48Y29kZT5zb29fcGx1Z2luX2Nv ZGU8L2NvZGU+IGNhbiBkaXNwbGF5IGNvbXBsZXRlIGNvZGUgb3IgYnkgZnVuY3Rpb24vY2xh c3M8L2xpPgoJCTxsaT5jb21wYXRpYmxlIHdpdGggPHN0cm9uZz5zb29fcGx1Z2luX3ByZWY8 L3N0cm9uZz4gcHJlZmVyZW5jZSBtYW5hZ2VtZW50IHN5c3RlbTwvbGk+Cgk8L3VsPjwvbGk+ Cgk8L3VsPiI7czo0OiJjb2RlIjtzOjEyNzE1OiIKaWYoY2xhc3NfZXhpc3RzKCdcVGV4dHBh dHRlcm5cVGFnXFJlZ2lzdHJ5JykpIHsKICAgIFR4cDo6Z2V0KCdcVGV4dHBhdHRlcm5cVGFn XFJlZ2lzdHJ5JykKICAgICAgICAtPnJlZ2lzdGVyKCdzb29fcGx1Z2luX2Rpc3BsYXknKQog ICAgICAgIC0+cmVnaXN0ZXIoJ3Nvb19wbHVnaW5fYXV0aG9yX3VyaScpCiAgICAgICAgLT5y ZWdpc3Rlcignc29vX3BsdWdpbl92ZXJzaW9uJykKICAgICAgICAtPnJlZ2lzdGVyKCdzb29f cGx1Z2luX2Rlc2NyaXB0aW9uJykKICAgICAgICAtPnJlZ2lzdGVyKCdzb29fcGx1Z2luX2F1 dGhvcicpCiAgICAgICAgLT5yZWdpc3Rlcignc29vX3BsdWdpbl9uYW1lJykKICAgICAgICAt PnJlZ2lzdGVyKCdzb29fcGx1Z2luX2hlbHAnKQogICAgICAgIC0+cmVnaXN0ZXIoJ3Nvb19w bHVnaW5fc2l6ZScpCiAgICAgICAgLT5yZWdpc3Rlcignc29vX3BsdWdpbl9jb2RlJykKICAg ICAgICA7Cn0KCkByZXF1aXJlX3BsdWdpbignc29vX3BsdWdpbl9wcmVmJyk7ICAgICAgICAg ICAgIC8vIG9wdGlvbmFsCgppZiAoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7CiAgICBh ZGRfcHJpdnMoJ3BsdWdpbl9wcmVmcy5zb29fcGx1Z2luX2Rpc3BsYXknLCcxLDInKTsKICAg IGFkZF9wcml2cygncGx1Z2luX2xpZmVjeWNsZS5zb29fcGx1Z2luX2Rpc3BsYXknLCcxLDIn KTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzb29fcGx1Z2luX2Rpc3BsYXlfbWFuYWdlX3By ZWZzJywgJ3BsdWdpbl9wcmVmcy5zb29fcGx1Z2luX2Rpc3BsYXknKTsKICAgIHJlZ2lzdGVy X2NhbGxiYWNrKCdzb29fcGx1Z2luX2Rpc3BsYXlfbWFuYWdlX3ByZWZzJywgJ3BsdWdpbl9s aWZlY3ljbGUuc29vX3BsdWdpbl9kaXNwbGF5Jyk7Cn0KCmZ1bmN0aW9uIHNvb19wbHVnaW5f ZGlzcGxheV9tYW5hZ2VfcHJlZnMoJGV2ZW50LCAkc3RlcCkKewogICAgaWYgKGZ1bmN0aW9u X2V4aXN0cygnc29vX3BsdWdpbl9wcmVmJykpIHsKICAgICAgICByZXR1cm4gc29vX3BsdWdp bl9wcmVmKCRldmVudCwgJHN0ZXAsIHNvb19wbHVnaW5fZGlzcGxheV9wcmVmX3NwZWMoKSk7 CiAgICB9CiAgICAgICAgLy8gbWVzc2FnZSB0byBpbnN0YWxsIHNvb19wbHVnaW5fcHJlZgog ICAgaWYgKCBzdWJzdHIoJGV2ZW50LCAwLCAxMikgPT0gJ3BsdWdpbl9wcmVmcycgKSB7CiAg ICAgICAgJHBsdWdpbiA9IHN1YnN0cigkZXZlbnQsIDEzKTsKICAgICAgICAkbWVzc2FnZSA9 ICc8cD48YnIgLz48c3Ryb25nPicuZ1R4dCgnZWRpdCcpLiIgJHBsdWdpbiAiLgogICAgICAg ICAgICBnVHh0KCdlZGl0X3ByZWZlcmVuY2VzJykuJzo8L3N0cm9uZz48YnIgLz4nLmdUeHQo J2luc3RhbGxfcGx1Z2luJykuCiAgICAgICAgICAgICcgPGEgaHJlZj0iaHR0cDovL2lwc2Vk aXhpdC5uZXQvdHhwLzkyL3Nvb19wbHVnaW5fcHJlZiI+c29vX3BsdWdpbl9wcmVmPC9hPjwv cD4nOwogICAgICAgIHBhZ2V0b3AoZ1R4dCgnZWRpdF9wcmVmZXJlbmNlcycpLiIgJiM4MjUw OyAkcGx1Z2luIiwgJG1lc3NhZ2UpOwogICAgfQp9CgpmdW5jdGlvbiBzb29fcGx1Z2luX2Rp c3BsYXlfcHJlZl9zcGVjKCkKewogICAgcmV0dXJuIGFycmF5KAogICAgICAgICdkZWZhdWx0 X2Zvcm0nICAgICAgPT4gIGFycmF5KAogICAgICAgICAgICAndmFsJyAgID0+ICAnJywKICAg ICAgICAgICAgJ2h0bWwnICA9PiAgJ3RleHRfaW5wdXQnLAogICAgICAgICAgICAndGV4dCcg ID0+ICAnRGVmYXVsdCBvdXRwdXQgZm9ybSBmb3IgPGI+c29vX3BsdWdpbl9kaXNwbGF5PC9i PiB0YWcnLAogICAgICAgICksCiAgICAgICAgJ3N0cmlwX3N0eWxlJyAgICAgICA9PiAgYXJy YXkoCiAgICAgICAgICAgICd2YWwnICAgPT4gIDAsCiAgICAgICAgICAgICdodG1sJyAgPT4g ICd5ZXNub3JhZGlvJywKICAgICAgICAgICAgJ3RleHQnICA9PiAgJ1JlbW92ZSBsZWFkaW5n ICZsdDtzdHlsZSZndDsgZWxlbWVudCBmcm9tIEhlbHAgdGV4dD8nLAogICAgICAgICksCiAg ICAgICAgJ3N0cmlwX3RpdGxlJyAgICAgICA9PiAgYXJyYXkoCiAgICAgICAgICAgICd2YWwn ICAgPT4gIDAsCiAgICAgICAgICAgICdodG1sJyAgPT4gICd5ZXNub3JhZGlvJywKICAgICAg ICAgICAgJ3RleHQnICA9PiAgJ1JlbW92ZSBmaXJzdCAmbHQ7aDEmZ3Q7IGVsZW1lbnQgZnJv bSBIZWxwIHRleHQ/JywKICAgICAgICApLAogICAgICAgICdzaXplX2Zvcm1hdCcgICAgICAg PT4gIGFycmF5KAogICAgICAgICAgICAndmFsJyAgID0+ICAne3NpemV9Jm5ic3A7S0InLAog ICAgICAgICAgICAnaHRtbCcgID0+ICAndGV4dF9pbnB1dCcsCiAgICAgICAgICAgICd0ZXh0 JyAgPT4gICdEZWZhdWx0IGZvcm1hdCBzdHJpbmcgZm9yIDxiPnNvb19wbHVnaW5fc2l6ZTwv Yj4nLAogICAgICAgICksCiAgICAgICAgJ2hpZ2hsaWdodCcgICAgICAgICA9PiAgYXJyYXko CiAgICAgICAgICAgICd2YWwnICAgPT4gIDEsCiAgICAgICAgICAgICdodG1sJyAgPT4gICd5 ZXNub3JhZGlvJywKICAgICAgICAgICAgJ3RleHQnICA9PiAgJ0FkZCBzeW50YXggaGlnaGxp Z2h0aW5nIHRvIDxiPnNvb19wbHVnaW5fY29kZTwvYj4/JywKICAgICAgICApLAogICAgICAg ICdzaG93X2xpbmVfbnVtYmVycycgPT4gIGFycmF5KAogICAgICAgICAgICAndmFsJyAgID0+ ICAnOicsCiAgICAgICAgICAgICdodG1sJyAgPT4gICd0ZXh0X2lucHV0JywKICAgICAgICAg ICAgJ3RleHQnICA9PiAgJ1RleHQgdG8gYXBwZW5kIHRvIGxpbmUgbnVtYmVycyAobGVhdmUg YmxhbmsgdG8gaGlkZSBudW1iZXJzKScsCiAgICAgICAgKSwKICAgICAgICAndGFiX3N0b3An ICAgICAgICAgID0+ICBhcnJheSgKICAgICAgICAgICAgJ3ZhbCcgICA9PiAgNCwKICAgICAg ICAgICAgJ2h0bWwnICA9PiAgJ3RleHRfaW5wdXQnLAogICAgICAgICAgICAndGV4dCcgID0+ ICAnU3BhY2VzIHBlciB0YWIgaW4gcGx1Z2luIGNvZGUnLAogICAgICAgICksCiAgICApOwp9 CgpmdW5jdGlvbiBzb29fcGx1Z2luX2Rpc3BsYXlfcHJlZnMoJHByZWYgPSBudWxsKQp7CiAg ICBzdGF0aWMgJHByZWZzOwogICAgaWYgKCEgJHByZWZzKSB7CiAgICAgICAgZm9yZWFjaCAo c29vX3BsdWdpbl9kaXNwbGF5X3ByZWZfc3BlYygpIGFzICRuYW1lID0+ICRzcGVjKSB7CiAg ICAgICAgICAgICRwcmVmc1skbmFtZV0gPSAkc3BlY1sndmFsJ107CiAgICAgICAgfQogICAg ICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Nvb19wbHVnaW5fcHJlZl92YWxzJykpIHsKICAg ICAgICAgICAgJHByZWZzID0gYXJyYXlfbWVyZ2UoJHByZWZzLCBzb29fcGx1Z2luX3ByZWZf dmFscygnc29vX3BsdWdpbl9kaXNwbGF5JykpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVy biAkcHJlZiA/ICRwcmVmc1skcHJlZl0gOiAkcHJlZnM7Cn0KCiAgLy8tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0vLwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWdzICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvLwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCgogICAgLy8g dGFnIHRvIHNlbGVjdCBwbHVnaW4ocykgZm9yIGRpc3BsYXkKICAgIC8vIGNhbiBiZSB1c2Vk IGFzIHNpbmdsZSB3L2Zvcm0gb3IgY29udGFpbmVyCiAgICAvLyBmb3IgcGx1Z2luIGxpc3Rz IGNvZGUgYW5kIGhlbHAgYXJlIG5vdCByZXRyaWV2ZWQKZnVuY3Rpb24gc29vX3BsdWdpbl9k aXNwbGF5KCRhdHRzLCAkdGhpbmcgPSAnJykKewogICAgZ2xvYmFsICRzb29fcGx1Z2luX2Rp c3BsYXk7CiAgICBleHRyYWN0KGxBdHRzKGFycmF5KAogICAgICAgICduYW1lJyAgICAgICAg ICA9PiAgJycsCiAgICAgICAgJ3ByZWZpeCcgICAgICAgID0+ICAnJywKICAgICAgICAnZm9y bScgICAgICAgICAgPT4gIHNvb19wbHVnaW5fZGlzcGxheV9wcmVmcygnZGVmYXVsdF9mb3Jt JyksCiAgICAgICAgJ3Nob3dfaW5hY3RpdmUnID0+ICAwLAogICAgICAgICdzb3J0JyAgICAg ICAgICA9PiAgJ25hbWUgYXNjJywKICAgICAgICAnd3JhcHRhZycgICAgICAgPT4gICcnLAog ICAgICAgICdicmVhaycgICAgICAgICA9PiAgJycsCiAgICAgICAgJ2NsYXNzJyAgICAgICAg ID0+ICAnJywKICAgICAgICAnaHRtbF9pZCcgICAgICAgPT4gICcnLAogICAgKSwgJGF0dHMp KTsKCiAgICAkY29sdW1ucyA9ICdhdXRob3IsIGF1dGhvcl91cmksIHZlcnNpb24sIGRlc2Ny aXB0aW9uLCBuYW1lLCAnLgogICAgICAgICdyb3VuZChjaGFyX2xlbmd0aChjb2RlKS8xMDI0 LCAxKSBhcyBzaXplJy4oICRuYW1lID8gJywgaGVscCwgY29kZScgOiAnJyApOwoKICAgIGlm ICgkbmFtZSBvciAkcHJlZml4KSB7CiAgICAgICAgJHdoZXJlID0gKCAkbmFtZSA/ICJuYW1l ID0gJyRuYW1lJyIgOiAibmFtZSBsaWtlICckcHJlZml4JSciICkKICAgICAgICAgICAgLigg KCAkc2hvd19pbmFjdGl2ZSBvciAkbmFtZSApID8gJycgOiAnIGFuZCBzdGF0dXMgPSAxJyAp OwogICAgfSBlbHNlIHsKICAgICAgICAkd2hlcmUgPSAkc2hvd19pbmFjdGl2ZSA/IDEgOiAn c3RhdHVzID0gMSc7CiAgICB9CiAgICAkd2hlcmUgLj0gIiBvcmRlciBieSAkc29ydCI7Cgog ICAgaWYgKCEgJGRhdGEgPSBzYWZlX3Jvd3MoJGNvbHVtbnMsICd0eHBfcGx1Z2luJywgJHdo ZXJlKSkgcmV0dXJuOwoKICAgIGZvcmVhY2ggKCRkYXRhIGFzICRyKSB7CiAgICAgICAgJHNv b19wbHVnaW5fZGlzcGxheSA9ICRyOwogICAgICAgICRvdXRbXSA9ICR0aGluZyA/IHBhcnNl KCR0aGluZykgOiBwYXJzZV9mb3JtKCRmb3JtKTsKICAgIH0KCiAgICBpZiAoaXNzZXQoJG91 dCkpIHsKICAgICAgICByZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRj bGFzcywgJycsICcnLCAnJywgJGh0bWxfaWQpOwogICAgfQp9CgogICAgLy8gYmFzaWMgb3V0 cHV0IHRhZ3M6IGRpc3BsYXkgZmllbGQgZGlyZWN0IGZyb20gZGF0YWJhc2UKZnVuY3Rpb24g c29vX3BsdWdpbl9hdXRob3JfdXJpKCkgeyByZXR1cm4gX3Nvb19wbHVnaW5fZmllbGQoJ2F1 dGhvcl91cmknKTsgfQpmdW5jdGlvbiBzb29fcGx1Z2luX3ZlcnNpb24oKSB7IHJldHVybiBf c29vX3BsdWdpbl9maWVsZCgndmVyc2lvbicpOyB9CmZ1bmN0aW9uIHNvb19wbHVnaW5fZGVz Y3JpcHRpb24oKSB7IHJldHVybiBfc29vX3BsdWdpbl9maWVsZCgnZGVzY3JpcHRpb24nKTsg fQoKICAgIC8vIGFzIGFib3ZlLCBidXQgd2l0aCBvcHRpb24gdG8gbWFrZSBvdXRwdXQgYSBs aW5rIHRvIGF1dGhvcidzIHdlYnNpdGUKZnVuY3Rpb24gc29vX3BsdWdpbl9hdXRob3IoJGF0 dHMpIHsgcmV0dXJuIF9zb29fcGx1Z2luX2ZpZWxkKCdhdXRob3JfdXJpJywgJGF0dHMpOyB9 CmZ1bmN0aW9uIHNvb19wbHVnaW5fbmFtZSgkYXR0cykgeyByZXR1cm4gX3Nvb19wbHVnaW5f ZmllbGQoJ25hbWUnLCAkYXR0cyk7IH0KCiAgICAvLyBkaXNwbGF5IHBsdWdpbiBoZWxwLCB3 aXRoIG9wdGlvbnMgdG8gcmVtb3ZlIGxlYWRpbmcgc3R5bGUgYW5kL29yIGgxIGVsZW1lbnRz LAogICAgLy8gYW5kIG9wdGlvbiB0byByZXN0cmljdCBkaXNwbGF5IHRvIG5hbWVkIHNlY3Rp b24KZnVuY3Rpb24gc29vX3BsdWdpbl9oZWxwKCRhdHRzKQp7CiAgICAkcHJlZnMgPSBzb29f cGx1Z2luX2Rpc3BsYXlfcHJlZnMoKTsKICAgIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAg ICAgJ3N0cmlwX3N0eWxlJyAgID0+ICAkcHJlZnNbJ3N0cmlwX3N0eWxlJ10sCiAgICAgICAg J3N0cmlwX3RpdGxlJyAgID0+ICAkcHJlZnNbJ3N0cmlwX3RpdGxlJ10sCiAgICAgICAgJ3Nl Y3Rpb25faWQnICAgID0+ICAnJywgICAgIC8vIEhUTUwgaWQgZm9yIGhlYWRlciBlbGVtZW50 IHRvIGRpc3BsYXkKICAgICAgICAnaF9wbHVzJyAgICAgICAgPT4gIDAsICAgICAgLy8gdHJh bnNwb3NlIGhlYWRlciBsZXZlbHMgYnkgdGhpcyBhbW91bnQKICAgICksICRhdHRzKSk7CiAg ICAkaGVscCA9IF9zb29fcGx1Z2luX2ZpZWxkKCdoZWxwJyk7CgogICAgICAgIC8vIHJlbW92 ZSBsZWFkaW5nIDxzdHlsZT4gZWxlbWVudAogICAgaWYgKCRzdHJpcF9zdHlsZSBhbmQgcHJl Z19tYXRjaCgnL148c3R5bGUvJywgJGhlbHApKQogICAgICAgICRoZWxwID0gcHJlZ19yZXBs YWNlKCcvXltcc1xTXSs/PFwvc3R5bGU+KFtcc1xTXSspJC8nLCAnJDEnLCAkaGVscCk7Cgog ICAgICAgIC8vIHJlbW92ZSBsZWFkaW5nIDxoMT4gZWxlbWVudAogICAgaWYgKCRzdHJpcF90 aXRsZSkKICAgICAgICAkaGVscCA9IHByZWdfcmVwbGFjZSgnL14oW1xzXFNdKz8pPGgxW1xz XFNdKz88XC9oMT4oW1xzXFNdKykkLycsICckMSQyJywgJGhlbHApOwoKICAgICAgICAvLyBk aXNwbGF5IGZyb20gbmFtZWQgaGVhZGVyIGVsZW1lbnQgdG8gbmV4dCBoZWFkZXIgd2l0aCBz YW1lIG9yIGxvd2VyIGgtbGV2ZWwKICAgIGlmICgkc2VjdGlvbl9pZCkgewogICAgICAgICRw YXR0ZXJuID0gIi9eKFtcc1xTXSspPGgoXGQpKFtePl0raWQ9WydcIl0kc2VjdGlvbl9pZCgn fFwiKS4rPz5bXHNcU10rKSQvIjsKICAgICAgICBpZiAocHJlZ19tYXRjaCgkcGF0dGVybiwg JGhlbHAsICRtYXRjaCkpIHsKICAgICAgICAgICAgbGlzdCggLCAsICRoX251bSwgJHJlbWFp bmRlcikgPSAkbWF0Y2g7CiAgICAgICAgICAgICRoZWxwID0gJyc7CiAgICAgICAgICAgICRw YXR0ZXJuID0gJy9eKFtcc1xTXSs/KTxoKFxkKShbXHNcU10rKSQvJzsKICAgICAgICAgICAg JHJlbWFpbmRlciA9ICI8aCRoX251bSRyZW1haW5kZXIiOwogICAgICAgICAgICB3aGlsZSAo cHJlZ19tYXRjaCgkcGF0dGVybiwgJHJlbWFpbmRlciwgJG1hdGNoKSkgewogICAgICAgICAg ICAgICAgbGlzdCggLCAka2VlcCwgJG5leHRfaCwgJHJlbWFpbmRlcikgPSAkbWF0Y2g7CiAg ICAgICAgICAgICAgICAkaGVscCAuPSAka2VlcDsKICAgICAgICAgICAgICAgICRyZW1haW5k ZXIgPSAiPGgkbmV4dF9oJHJlbWFpbmRlciI7CiAgICAgICAgICAgICAgICBpZiAoJGhfbnVt ID49ICRuZXh0X2gpICRyZW1haW5kZXIgPSAnJzsKICAgICAgICAgICAgfQogICAgICAgICAg ICBpZiAoISAkaGVscCkgJGhlbHAgPSAkcmVtYWluZGVyOwogICAgICAgIH0KICAgIH0KCiAg ICAgICAgLy8gdHJhbnNwb3NlIEhUTUwgaGVhZGVyIGxldmVscy4KICAgIGlmICgkaF9wbHVz KSB7CiAgICAgICAgZm9yICgkaSA9IDE7ICRpIDw9IDY7ICRpKyspIHsKICAgICAgICAgICAg JGogPSAkaSArICRoX3BsdXM7CiAgICAgICAgICAgIGlmICggJGogPCAxICkgJGogPSAxOwog ICAgICAgICAgICBpZiAoICRqID4gNiApICRqID0gNjsKICAgICAgICAgICAgJG9sZF90YWdb XSA9ICI8aCRpIjsKICAgICAgICAgICAgJG9sZF90YWdbXSA9ICI8L2gkaSI7CiAgICAgICAg ICAgICRuZXdfdGFnW10gPSAiPGgkaiI7CiAgICAgICAgICAgICRuZXdfdGFnW10gPSAiPC9o JGoiOwogICAgICAgIH0KICAgICAgICAkaGVscCA9IHN0cl9yZXBsYWNlKCRvbGRfdGFnLCAk bmV3X3RhZywgJGhlbHApOwogICAgfQoKICAgIHJldHVybiAkaGVscDsKfQoKICAgIC8vIGRp c3BsYXkgaW5zdGFsbGVkIGNvZGUgc2l6ZSBpbiBLQgpmdW5jdGlvbiBzb29fcGx1Z2luX3Np emUoJGF0dHMpCnsKICAgIGV4dHJhY3QobEF0dHMoYXJyYXkoCiAgICAgICAgJ2Zvcm1hdCcg ICAgPT4gIHNvb19wbHVnaW5fZGlzcGxheV9wcmVmcygnc2l6ZV9mb3JtYXQnKSwKICAgICks ICRhdHRzKSk7CiAgICAkc2l6ZSA9IF9zb29fcGx1Z2luX2ZpZWxkKCdzaXplJyk7CiAgICBy ZXR1cm4gc3RyX3JlcGxhY2UoJ3tzaXplfScsICRzaXplLCAkZm9ybWF0KTsKfQoKICAgIC8v IGRpc3BsYXkgcGx1Z2luIHNvdXJjZSBjb2RlCiAgICAvLyBjb2RlIGhpZ2hsaWdodGluZyB3 aXRoIG5hbWVkIGNsYXNzZXMgZm9yIHN0eWxpbmcKICAgIC8vIHZhcmlvdXMgb3B0aW9ucyBm b3IgbGluZSBudW1iZXJpbmcKICAgIC8vIGRpc3BsYXkgZnVsbCBzb3VyY2Ugb3IgbmFtZWQg ZnVuY3Rpb24sIGNsYXNzLCBvciBtZXRob2QKZnVuY3Rpb24gc29vX3BsdWdpbl9jb2RlKCRh dHRzKQp7CiAgICAkcHJlZnMgPSBzb29fcGx1Z2luX2Rpc3BsYXlfcHJlZnMoKTsKICAgIGV4 dHJhY3QobEF0dHMoYXJyYXkoCiAgICAgICAgJ2hpZ2hsaWdodCcgICAgICAgICAgICAgPT4g ICRwcmVmc1snaGlnaGxpZ2h0J10sCiAgICAgICAgJ3Nob3dfbGluZV9udW1iZXJzJyAgICAg PT4gICRwcmVmc1snc2hvd19saW5lX251bWJlcnMnXSwKICAgICAgICAncmVpbmRleF9saW5l cycgICAgICAgICA9PiAgMCwKICAgICAgICAndGFiX3N0b3AnICAgICAgICAgICAgICA9PiAg JHByZWZzWyd0YWJfc3RvcCddLAogICAgICAgICdmdW5jdGlvbicgICAgICAgICAgICAgID0+ ICAnJywKICAgICAgICAncGhwX2NsYXNzJyAgICAgICAgICAgICA9PiAgJycsCiAgICAgICAg J2NsYXNzJyAgICAgICAgICAgICAgICAgPT4gICdzb29fcGx1Z2luX2NvZGUnLAogICAgICAg ICdodG1sX2lkJyAgICAgICAgICAgICAgID0+ICAnJywKICAgICksICRhdHRzKSk7CgogICAg JHJhd19jb2RlID0gdHJpbShfc29vX3BsdWdpbl9maWVsZCgnY29kZScpKTsKICAgICRtYXRj aF9pbmRleCA9IDI7CiAgICAkc2FmZXR5X2NoZWNrID0gdHJ1ZTsKCiAgICAgICAgLy8gZmlu ZCBuYW1lZCBtZXRob2Q6IGFzc3VtZXMgZW5kIGJyYWNlIG9uZSB0YWIgaW4gZnJvbSBzdGFy dCBvZiBsaW5lCiAgICBpZiAoJHBocF9jbGFzcyBhbmQgJGZ1bmN0aW9uKSB7CiAgICAgICAg JHBhdHRlcm4gPSAnLyhbXHNcU10qKGFic3RyYWN0fClccypjbGFzc1xzKycKICAgICAgICAg ICAgLiAkcGhwX2NsYXNzIC4gJ1xzK1tcc1xTXSo/XHtbXHNcU10rPykoXHQocHVibGljfHBy aXZhdGV8cHJvdGVjdGVkKT9ccypmdW5jdGlvblxzKycKICAgICAgICAgICAgLiAkZnVuY3Rp b24gLiAnXHMqXChbXHNcU10rP1xuXHR9LiopW1xzXFNdKi8nOwogICAgICAgICRtYXRjaF9p bmRleCArKzsKICAgIH0KCiAgICAgICAgLy8gZmluZCBuYW1lZCBmdW5jdGlvbjogYXNzdW1l cyBlbmQgYnJhY2UgYXQgc3RhcnQgb2YgbGluZQogICAgZWxzZWlmICgkZnVuY3Rpb24pCiAg ICAgICAgJHBhdHRlcm4gPSAnLyhbXHNcU10qKSgocHVibGljfHByaXZhdGV8cHJvdGVjdGVk KT9ccypmdW5jdGlvblxzKycKICAgICAgICAgICAgLiRmdW5jdGlvbi4nXHMqXChbXHNcU10r P1xufS4qKS8nOwoKICAgICAgICAvLyBmaW5kIG5hbWVkIGNsYXNzOiBhc3N1bWVzIGVuZCBi cmFjZSBhdCBzdGFydCBvZiBsaW5lCiAgICBlbHNlaWYgKCRwaHBfY2xhc3MpCiAgICAgICAg JHBhdHRlcm4gPSAnLyhbXHNcU10qPykoKGFic3RyYWN0fClccypjbGFzc1xzKycKICAgICAg ICAgICAgLiRwaHBfY2xhc3MuJ1xzK1tcc1xTXSo/XHtbXHNcU10rP1xufS4qKVtcc1xTXSov JzsKCiAgICBlbHNlICRzYWZldHlfY2hlY2sgPSBmYWxzZTsKCiAgICAgICAgLy8gc2FmZXR5 IGNoZWNrIGlzIGJlY2F1c2UgdGhlIHByZWdfbWF0Y2goKSBjYW4gdGFrZSBhIGxvbmcgdGlt ZSBpZiB0aGVyZSBpcyBubyBtYXRjaAogICAgaWYgKCRzYWZldHlfY2hlY2spCiAgICB7CiAg ICAgICAgaWYgKCRmdW5jdGlvbiBhbmQgISBwcmVnX21hdGNoKCIvJGZ1bmN0aW9uXHMqXCgv IiwgJHJhd19jb2RlKSkgcmV0dXJuOwogICAgICAgIGlmICgkcGhwX2NsYXNzIGFuZCAhIHBy ZWdfbWF0Y2goIi9jbGFzc1xzKiRwaHBfY2xhc3NccysvIiwgJHJhd19jb2RlKSkKICAgICAg ICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc3NldCgkcGF0dGVybikpIHsKICAgICAg ICBpZiAoISBwcmVnX21hdGNoKCRwYXR0ZXJuLCAkcmF3X2NvZGUsICRtYXRjaCkpIHJldHVy bjsKICAgICAgICAkcmF3X2NvZGUgPSAkbWF0Y2hbJG1hdGNoX2luZGV4XTsKICAgICAgICAg ICAgLy8gaWYgbm90IHJlaW5kZXhpbmcsIGZpbmQgc3RhcnRpbmcgbGluZSBudW1iZXIgaW4g ZnVsbCBzb3VyY2UgY29kZQogICAgICAgICRzdGFydF9saW5lID0gJHJlaW5kZXhfbGluZXMg PwogICAgICAgICAgICAkcmVpbmRleF9saW5lcyA6IGNvdW50KGV4cGxvZGUobiwgJG1hdGNo WzFdKSk7CiAgICB9CgogICAgICAgIC8vIGNvbnZlcnQgdGFicyB0byBzcGFjZXMsIHJldGFp bmluZyB0YWIgc3RvcCBhbGlnbm1lbnQKICAgIGZvcmVhY2ggKGV4cGxvZGUobiwgJHJhd19j b2RlKSBhcyAkbGluZSkgewogICAgICAgICRidWNrZXQgPSBhcnJheSgpOwogICAgICAgIGZv cmVhY2ggKHN0cl9zcGxpdCgkbGluZSkgYXMgJGNoYXIpCiAgICAgICAgICAgIGlmICgkY2hh ciA9PSB0KSB7CiAgICAgICAgICAgICAgICAkYWRkID0gJHRhYl9zdG9wIC0gZm1vZChjb3Vu dCgkYnVja2V0KSwgJHRhYl9zdG9wKTsKICAgICAgICAgICAgICAgIHdoaWxlICggJGFkZCAp IHsKICAgICAgICAgICAgICAgICAgICAkYnVja2V0W10gPSAnICc7CiAgICAgICAgICAgICAg ICAgICAgJGFkZCAtLTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlCiAg ICAgICAgICAgICAgICAkYnVja2V0W10gPSAkY2hhcjsKICAgICAgICAkbGluZXNbXSA9IGlt cGxvZGUoJycsICRidWNrZXQpOwogICAgfQoKICAgIGlmICghICRoaWdobGlnaHQpCiAgICAg ICAgcmV0dXJuIGltcGxvZGUobiwgYXJyYXlfbWFwKCdodG1sc3BlY2lhbGNoYXJzJywgJGxp bmVzKSk7CgogICAgJGZpbmQgPSBhcnJheShzcCwgYnIsICc8Y29kZT4nLCAnPC9jb2RlPicp OwogICAgJHJlcGxhY2UgPSBhcnJheSgnICcsIG4sICcnLCAnJyk7CiAgICAgICAgLy8gbmFt ZXMgb2YgY29kZSBoaWdobGlnaHQgdHlwZXMgZnJvbSBpbmlfZ2V0KCkKICAgICAgICAvLyBo aWdobGlnaHRfc3RyaW5nKCkgb3V0cHV0IHN0eWxlIGF0dHJpYnV0ZXMgd2lsbCBiZSByZXBs YWNlZCBieSBuYW1lZCBjbGFzc2VzCiAgICBmb3JlYWNoIChhcnJheSgnYmcnLCAnY29tbWVu dCcsICdkZWZhdWx0JywgJ2h0bWwnLCAna2V5d29yZCcsICdzdHJpbmcnKSBhcyAkaykgewog ICAgICAgICRmaW5kW10gPSAnc3R5bGU9ImNvbG9yOiAnIC4gaW5pX2dldCgiaGlnaGxpZ2h0 LiRrIikgLiAnIic7CiAgICAgICAgJHJlcGxhY2VbXSA9ICJjbGFzcz1cInBocF8ka1wiIjsK ICAgIH0KCiAgICAkc3RhcnRfbGluZSA9IDE7CgogICAgICAgIC8vIHJ1biBoaWdobGlnaHRf c3RyaW5nKCksIGNsZWFuIHVwCiAgICAkaF9zID0gaGlnaGxpZ2h0X3N0cmluZygiPD9waHBc biIuaW1wbG9kZShuLCAkbGluZXMpLiJcbj8+IiwgdHJ1ZSk7CiAgICAkbGluZXMgPSBzdHJf cmVwbGFjZSgkZmluZCwgJHJlcGxhY2UsIGV4cGxvZGUoYnIsICRoX3MpKTsKICAgIGFycmF5 X3NoaWZ0KCRsaW5lcyk7CiAgICAkbGluZXNbMF0gPSAnPHNwYW4gY2xhc3M9InBocF9odG1s Ij4nIC4gJGxpbmVzWzBdOwogICAgYXJyYXlfcG9wKCRsaW5lcyk7CiAgICAkbGluZXNbY291 bnQoJGxpbmVzKS0xXSAuPSAnPC9zcGFuPic7CgogICAgICAgIC8vIGFkZCBsaW5lIG51bWJl cnMKICAgICR0b3RhbF9saW5lcyA9ICRzdGFydF9saW5lICsgY291bnQoJGxpbmVzKSAtIDE7 CiAgICBmb3JlYWNoICgkbGluZXMgYXMgJGkgPT4gJGxpbmUpIHsKICAgICAgICBpZiAoJHNo b3dfbGluZV9udW1iZXJzKSB7CiAgICAgICAgICAgICRpICs9ICRzdGFydF9saW5lOwogICAg ICAgICAgICAkbGluZSA9ICI8c3BhbiBjbGFzcz1cInBocF9jb21tZW50XCI+JGkgJHNob3df bGluZV9udW1iZXJzPC9zcGFuPiAkbGluZSI7CiAgICAgICAgICAgIGlmICggJGkgPCAxMDAw IGFuZCAkdG90YWxfbGluZXMgPiA5OTkgKSAkbGluZSA9IHNwIC4gJGxpbmU7CiAgICAgICAg ICAgIGlmICggJGkgPCAxMDAgYW5kICR0b3RhbF9saW5lcyA+IDk5ICkgJGxpbmUgPSBzcCAu ICRsaW5lOwogICAgICAgICAgICBpZiAoICRpIDwgMTAgKSAkbGluZSA9IHNwIC4gJGxpbmU7 CiAgICAgICAgfQogICAgICAgICRjb2RlW10gPSAkbGluZTsKICAgIH0KCiAgICAkdGFnX2F0 dHMgPSAoICRjbGFzcyA/ICIgY2xhc3M9XCIkY2xhc3NcIiIgOiAnJyApLiggJGh0bWxfaWQg PyAiIGlkPVwiJGh0bWxfaWRcIiIgOiAnJyApOwoKICAgIHJldHVybiAiPHByZSR0YWdfYXR0 cz48Y29kZSR0YWdfYXR0cz4iLmltcGxvZGUobiwgJGNvZGUpLic8L2NvZGU+PC9wcmU+JzsK fQoKICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICBT dXBwb3J0IEZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLy8KCmZ1bmN0aW9uIF9zb29fcGx1Z2luX2ZpZWxkKCRmaWVsZCwgJGF0dHMg PSBudWxsKQp7CiAgICBpZiAoaXNfYXJyYXkoJGF0dHMpKQogICAgICAgIGV4dHJhY3QobEF0 dHMoYXJyYXkoCiAgICAgICAgICAgICdsaW5rJyAgPT4gIDEsCiAgICAgICAgKSwgJGF0dHMp KTsKICAgIGdsb2JhbCAkc29vX3BsdWdpbl9kaXNwbGF5OwogICAgJGF1dGhvcl91cmkgPSAk c29vX3BsdWdpbl9kaXNwbGF5WydhdXRob3JfdXJpJ107CiAgICBpZiAoaXNzZXQoJHNvb19w bHVnaW5fZGlzcGxheVskZmllbGRdKSkgewogICAgICAgICRvdXQgPSAkc29vX3BsdWdpbl9k aXNwbGF5WyRmaWVsZF07CiAgICAgICAgcmV0dXJuICggISBlbXB0eSgkbGluaykgYW5kICRh dXRob3JfdXJpICkgPyBocmVmKCRvdXQsICRhdXRob3JfdXJpKSA6ICRvdXQ7CiAgICB9Cn0K IjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJmbGFncyI7czoxOiIzIjtzOjU6Im9yZGVyIjtz OjE6IjUiO3M6MzoibWQ1IjtzOjMyOiIyZWJhM2YyMmYxYTUxMzk3ZTE1MGJkOTEzZTZjNmE1 YiI7fQ==