# Name: rah_sitemap v1.1 # Type: Admin/Client side plugin # Build a valid advanced sitemap # Author: Jukka Svahn # URL: http://rahforum.biz # 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: # ..................................................................... YToxMDp7czo2OiJhdXRob3IiO3M6MTE6Ikp1a2thIFN2YWhuIjtzOjEwOiJhdXRob3JfdXJp IjtzOjE5OiJodHRwOi8vcmFoZm9ydW0uYml6IjtzOjExOiJkZXNjcmlwdGlvbiI7czozMDoi QnVpbGQgYSB2YWxpZCBhZHZhbmNlZCBzaXRlbWFwIjtzOjQ6ImhlbHAiO3M6MTA5MTA6Igk8 aDE+cmFoX3NpdGVtYXA8L2gxPgoKCTxwPlJhaF9zaXRlbWFwIGlzIGEgc2l0ZW1hcCBwbHVn aW4gZm9yIDxhIGhyZWY9Imh0dHA6Ly93d3cudGV4dHBhdHRlcm4uY29tIj5UZXh0cGF0dGVy biA8c3BhbiBjbGFzcz0iY2FwcyI+Q01TPC9zcGFuPjwvYT4uIEVhc2lseSBidWlsZCB2YWxp ZCA8YSBocmVmPSJodHRwOi8vd3d3LnNpdGVtYXAub3JnIj5TaXRlbWFwLm9yZzwvYT4gPGFj cm9ueW0gdGl0bGU9ImVYdGVuc2libGUgTWFya3VwIExhbmd1YWdlIj48c3BhbiBjbGFzcz0i Y2FwcyI+WE1MPC9zcGFuPjwvYWNyb255bT4gc2l0ZW1hcHMgZm9yIHNlYXJjaCBlbmdpbmVz LCBpbmNsdWRpbmcgR29vZ2xlLiBTdXBwb3J0cyBjYXRlZ29yaWVzLCBzZWN0aW9ucywgYXJ0 aWNsZXMgYW5kIGV2ZW4gY3VzdG9tIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cy4g QWxsIHNldHRpbmdzIGNhbiBiZSBtYW5hZ2VkIGZyb20gY2xlYW4gaW50ZXJmYWNlLiBObyBk aXZlIHRvIGNvZGUgcmVxdWlyZWQuPC9wPgoKCTx1bD4KCQk8bGk+VmVyc2lvbjogMS4xPC9s aT4KCQk8bGk+VXBkYXRlZDogMjAxMC8xMC8zMCAxMDozNSBQTSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVRDPC9zcGFuPjwvbGk+Cgk8L3VsPgoKCTxoMz5UYWJsZSBvZiBDb250ZW50czwvaDM+ CgoJPHVsPgoJCTxsaT48YSBocmVmPSIjbGlzdC1vZi1mZWF0dXJlcyI+TGlzdCBvZiBmZWF0 dXJlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjcmVxdWlyZW1lbnRzIj5SZXF1aXJlbWVu dHM8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2luc3RhbGxhdGlvbi1hbmQtdXNhZ2UiPklu c3RhbGxhdGlvbiBhbmQgdXNhZ2U8L2E+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9IiNwZXJtbGlu ay1ydWxlcyI+UGVybWxpbmsgcnVsZXM8L2E+PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+PGEg aHJlZj0iI2NoYW5nZWxvZyI+Q2hhbmdlbG9nPC9hPjwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0i bGlzdC1vZi1mZWF0dXJlcyI+TGlzdCBvZiBmZWF0dXJlczwvaDM+CgoJPHVsPgoJCTxsaT5T aW1wbGUgaW50ZXJmYWNlIHVuZGVyIDxlbT5UZXh0cGF0dGVybiAmZ3Q7IEV4dGVuc2lvbnMg Jmd0OyBTaXRlbWFwPC9lbT46IGJ1aWxkLCB2aWV3LCBtb2RpZnkgYW5kIGN1c3RvbWl6ZSBz aXRlbWFwLjwvbGk+CgkJPGxpPkZpbHRlciwgaW5jbHVkZSBhbmQgZXhjbHVkZSBzZWN0aW9u LCBjYXRlZ29yeSBhbmQgYXJ0aWNsZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMg ZnJvbSB0aGUgc2l0ZW1hcC48L2xpPgoJCTxsaT5DcmVhdGUgYW5kIGluc2VydCBjdXN0b20g PHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIHRvIHRoZSBzaXRlbWFwIHdpdGggY291 cGxlIHNpbXBsZSBjbGlja3MuPC9saT4KCQk8bGk+Tm8gbmVlZCB0byBjcmVhdGUgZmlsZXMg bm9yIHNldCBwZXJtaXNzaW9ucywgaW5zdGVhZCBqdXN0IHVzZSB0aGUgcGx1Z2luIGFuZCBl dmVudHVhbGx5IHN1Ym1pdCB0aGUgc2l0ZW1hcCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9z cGFuPiB0byBHb29nbGUgKHZpYSBXZWJtYXN0ZXIgdG9vbHMpIG9yIG90aGVyIHNlYXJoIGVu Z2luZS48L2xpPgoJCTxsaT5TaXRlbWFwIGlzIGF1dG9tYXRpY2FsbHkgZ3ppcHBlZCBhcyBt dWNoIGFzIHBvc3NpYmxlICYjODIxMjsgYXQgbGVhc3QgaWYgc2VydmVyIHN1cHBvcnRzIGd6 aXBwaW5nLjwvbGk+Cgk8L3VsPgoKCTxoMyBpZD0icmVxdWlyZW1lbnRzIj5SZXF1aXJlbWVu dHM8L2gzPgoKCTxwPk1pbmltdW06PC9wPgoKCTx1bD4KCQk8bGk+VGV4dHBhdHRlcm4gNC4w LjcrPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gNSsgKG9yIDQu My4wIHdoZW4gY3VzdG9tIHRpbWVzdGFtcCBmb3JtYXQgaXMgdXNlZCk8L2xpPgoJCTxsaT5P cHRpb25hbDogPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gemxpYiBleHRlbnNpb248 L2xpPgoJPC91bD4KCgk8cD5SZWNvbW1lbmRlZDo8L3A+CgoJPHVsPgoJCTxsaT5UZXh0cGF0 dGVybiA0LjAuOCs8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPiA1 LjEuMis8L2xpPgoJPC91bD4KCgk8aDMgaWQ9Imluc3RhbGxhdGlvbi1hbmQtdXNhZ2UiPklu c3RhbGxhdGlvbiBhbmQgdXNhZ2U8L2gzPgoKCTxwPlRoZSBnZW5lcmFsIGJlaGF2aW9yIHN0 YW5kczogcGFzdGUgdGhlIHBsdWdpbiBjb2RlIHRvIHRoZSBwbHVnaW4gaW5zdGFsbGVyIHRl eHRhcmVhIGFuZCBydW4gdGhlIGF1dG9tYXRpYyBzZXR1cC4gVGhlbiBqdXN0IGFjdGl2YXRl IHRoZSBwbHVnaW4gYW5kIHlvdSBhcmUgcmVhZHkgdG8gdXNlIHRoZSBzaXRlbWFwLjwvcD4K Cgk8cD5Zb3UgY2FuIGxvY2F0ZSByYWhfc2l0ZW1hcCYjODIxNztzIHVzZXItaW50ZXJmYWNl IHBhbmVsIGZyb20gPGEgaHJlZj0iP2V2ZW50PXJhaF9zaXRlbWFwIj5UZXh0cGF0dGVybiAm Z3Q7IEV4dGVuc2lvbnMgJmd0OyBTaXRlbWFwLjwvYT4gRnJvbSB0aGVyZSB5b3UgY2FuIG1v ZGlmeSBwcmVmZXJlbmNlcyBhbmQgdmlldyB0aGUgc2l0ZW1hcC48L3A+CgoJPGg0IGlkPSJw ZXJtbGluay1ydWxlcyI+UGVybWxpbmsgc2NoZW1lcyBhbmQgcnVsZXM8L2g0PgoKCTxwPlJh aF9zaXRlbWFwIHZlcnNpb24gMC40IGluY2x1ZGVkIGEgbmV3IGZlYXR1cmU6IHBlcm1saW5r IHNldHRpbmdzLiBUaGVzZSBzZXR0aW5nLCBmb3VuZCBpbiB0aGUgcGFuZWwsIHdpbGwgbGV0 IHlvdSBkZWZpbmUgdGhlIHBlcm1saW5rIGZvcm0gZm9yIHRoZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VVJMPC9zcGFuPnMgaW4gdGhlIFNpdGVtYXAuIFRoaXMgaXMgYSBpZGVhbCB0b29sIGZv ciBtYXRjaGluZyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIHRvIHlvdXIg b3duIC5odHRhY2Nlc3MgcnVsZXMgb3IgYSBwbHVnaW4gY3JlYXRlZCBjdXN0b20gPHNwYW4g Y2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gcnVsZXMuIElmIHlvdSB3YW50IHRvIHVzZSBpbi1i dWlsZCB1cmxzIGRlZmluZWQgYnkgVGV4dHBhdHRlcm4gaXRzZWxmLCB5b3UgY2FuIGxlYXZl IHRoZXNlIHNldHRpbmcgdW5zZXQuPC9wPgoKCTxoNT5BcnRpY2xlIHBlcm1saW5rczwvaDU+ CgoJPHA+VGhlc2UgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gc2V0dGluZ3MgYXJl IHVzZWQgZm9yIGFydGljbGVzIHRoYXQgYXBwZWFyIGluIHRoZSBzaXRlbWFwLiBUbyBmb3Jt IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPnMgeW91IGNhbiB1c2UgYW55IGlu ZGl2aWR1YWwgYXJ0aWNsZSBjb250ZXh0JiM4MjE3O3MgPGNvZGU+Jmx0O3R4cDovJmd0Ozwv Y29kZT4gdGFnLiBCaWcgc2hvdHMgbGlrZSA8Y29kZT4mbHQ7dHhwOnBlcm1saW5rIC8mZ3Q7 PC9jb2RlPiwgPGNvZGU+Jmx0O3R4cDpwb3N0ZWQgLyZndDs8L2NvZGU+LCA8Y29kZT4mbHQ7 dHhwOnRpdGxlIC8mZ3Q7PC9jb2RlPiwgPGNvZGU+Jmx0O3R4cDpjYXRlZ29yeTEgLyZndDs8 L2NvZGU+LCA8Y29kZT4mbHQ7dHhwOmNhdGVnb3J5MiAvJmd0OzwvY29kZT4sIDxjb2RlPiZs dDt0eHA6c2VjdGlvbiAvJmd0OzwvY29kZT4sIDxjb2RlPiZsdDt0eHA6aWZfYXJ0aWNsZV9h dXRob3IgLyZndDs8L2NvZGU+LCA8Y29kZT4mbHQ7dHhwOmlmX2FydGljbGVfY2F0ZWdvcnkg LyZndDs8L2NvZGU+LCA8Y29kZT4mbHQ7dHhwOmlmX2FydGljbGVfaWQgLyZndDs8L2NvZGU+ IGFuZCBzbyBvbi48L3A+CgoJPHA+RXhhbXBsZSBBcnRpY2xlIHBlcm1saW5rIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+OjwvcD4KCjxwcmU+PGNvZGU+Jmx0O3R4cDpzaXRlX3Vy bCAvJmd0O3NlY3Rpb25zLyZsdDt0eHA6c2VjdGlvbi8mZ3Q7L2FydGljbGVzLyZsdDt0eHA6 YXJ0aWNsZV9pZCAvJmd0Oy8mbHQ7dHhwOmFydGljbGVfdXJsX3RpdGxlIC8mZ3Q7CjwvY29k ZT48L3ByZT4KCgk8aDU+Q2F0ZWdvcnkgcGVybWxpbmtzPC9oNT4KCgk8cD5UaGVzZSA8c3Bh biBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBzZXR0aW5ncyBhcmUgdXNlZCBmb3IgQ2F0ZWdv cnkgbGlua3MgdGhhdCBhcHBlYXIgaW4gdGhlIHNpdGVtYXAuIFRvIGZvcm0gdGhlIDxzcGFu IGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+cyB5b3UgY2FuIHVzZSBwbGFpbiBjYXRlZ29yeSBj b250ZXh0IDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRhZ3MgPGNvZGU+Jmx0O3R4 cDpjYXRlZ29yeSAvJmd0OzwvY29kZT4gYW5kIDxjb2RlPiZsdDt0eHA6aWZfY2F0ZWdvcnkg LyZndDs8L2NvZGU+LiBUaGUgcGx1Z2luIGFsc28gcHJvdmlkZXMgdHdvIGV4dHJhIHRhZ2lz aCB0YWdzLCA8Y29kZT5bdHlwZV08L2NvZGU+IGFuZCA8Y29kZT5baWRdPC9jb2RlPiB3aGlj aCB3aWxsIGJhc2ljYWxseSBvdXRwdXQgY2F0ZWdvcnkmIzgyMTc7cyB0eXBlIGFuZCBpZC48 L3A+CgoJPHA+RXhhbXBsZSBDYXRlZ29yeSBwZXJtbGluayA8c3BhbiBjbGFzcz0iY2FwcyI+ VVJMPC9zcGFuPjo8L3A+Cgo8cHJlPjxjb2RlPiZsdDt0eHA6c2l0ZV91cmwgLyZndDt2aWV3 L2NhdGVnb3J5L1tpZF0vJmx0O3R4cDpjYXRlZ29yeSBsaW5rPSZxdW90OzAmcXVvdDsgdGl0 bGU9JnF1b3Q7MCZxdW90OyAvJmd0Owo8L2NvZGU+PC9wcmU+CgoJPGg1PlNlY3Rpb24gcGVy bWxpbmtzPC9oNT4KCgk8cD5UaGVzZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBz ZXR0aW5ncyBhcmUgdXNlZCBmb3Igc2VjdGlvbiBsaW5rcyB0aGF0IGFwcGVhciBpbiB0aGUg c2l0ZW1hcC4gVG8gZm9ybSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIHlv dSBjYW4gdXNlIHRoZSB0d28gc2VjdGlvbiB0YWdzLCA8Y29kZT4mbHQ7dHhwOnNlY3Rpb24g LyZndDs8L2NvZGU+IGFuZCA8Y29kZT4mbHQ7dHhwOmlmX3NlY3Rpb24gLyZndDs8L2NvZGU+ LjwvcD4KCjxwcmU+PGNvZGU+Jmx0O3R4cDpzaXRlX3VybCAvJmd0O3NlY3Rpb24vJmx0O3R4 cDpzZWN0aW9uIC8mZ3Q7CjwvY29kZT48L3ByZT4KCgk8aDMgaWQ9ImNoYW5nZWxvZyI+Q2hh bmdlbG9nPC9oMz4KCgk8cD48c3Ryb25nPlZlcnNpb24gMS4xPC9zdHJvbmc+PC9wPgoKCTx1 bD4KCQk8bGk+Rml4ZWQgaXNzdWVzIGFwcGVhcmluZyB3aXRoIHRoZSBpbnN0YWxsZXIgd2hl biBNeVNRTCBpcyBpbiBzdHJpY3QgbW9kZS4gPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRw YXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP3BpZD0yMzY2MzcjcDIzNjYzNyI+VGhhbmsgeW91 IGZvciByZXBvcnRpbmcsIEdhbGxleDwvYT4uPC9saT4KCTwvdWw+CgoJPHA+PHN0cm9uZz5W ZXJzaW9uIDEuMDwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPlNsaWdodGx5IGNoYW5nZWQg YmFja2VuZCYjODIxNztzIGluc3RhbGxlciBjYWxsOyBvbmx5IGNoZWNrIGZvciBpbnN0YWxs aW5nIGlmIHRoZXJlIGlzIG5vIHByZWZlcmVuY2VzIGF2YWlsYWJsZS48L2xpPgoJPC91bD4K Cgk8cD48c3Ryb25nPlZlcnNpb24gMC45PC9zdHJvbmc+PC9wPgoKCTx1bD4KCQk8bGk+Rml4 ZWQ6IG5vdyBjb3JyZWN0bHkgcGFyc2VzIGNhdGVnb3J5IHRhZ3MgaW4gY2F0ZWdvcnkgPHNw YW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zLiBUaGFuayB5b3UgZm9yIDxhIGhyZWY9Imh0 dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9waWQ9MjMzNjE5I3Ay MzM2MTkiPnJlcG9ydGluZzwvYT4sIEFuZHJlYXMuPC9saT4KCTwvdWw+CgoJPHA+PHN0cm9u Zz5WZXJzaW9uIDAuODwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPk5vdyBjb21wcmVzc2lv biBsZXZlbCBmaWVsZCYjODIxNztzIGxhYmVsIG5vdyBsaW5rcyB0byB0aGUgY29ycmVjdCBm aWVsZCBpZC48L2xpPgoJCTxsaT5Ob3cgc3VwcHJlc3NlcyBFX1dBUk5JTkcvRV9TVFJJQ1Qg bm90aWNlcyBpbiBsaXZlIG1vZGUgY2F1c2VkIGJ5IFRleHRwYXR0ZXJuJiM4MjE3O3MgdGlt ZXpvbmUgY29kZSB3aGVuIHNvbWUgY29uZGl0aW9ucyBhcmUgbWV0ICg8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiA0LjIuMCwgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4g NS4xLjArLCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIEF1dG8tPHNw YW4gY2xhc3M9ImNhcHMiPkRTVDwvc3Bhbj4gZmVhdHVyZSBkaXNhYmxlZCwgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gaW4gTGl2ZSBtb2RlKS4gRXJyb3Igc3VwcHJlc3Npb24g d2lsbCBiZSByZW1vdmVkIHdoZW4gPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gdmVy c2lvbiBpcyByZWxlYXNlZCB3aXRoIGZ1bGx5IHdvcmtpbmcgdGltZXpvbmUgc2V0dGluZ3Mu PC9saT4KCQk8bGk+Tm93IGdlbmVyYXRlcyA8c3BhbiBjbGFzcz0iY2FwcyI+VU5JWDwvc3Bh bj4gdGltZXN0YW1wcyB3aXRoaW4gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5TUUw8L3NwYW4+ IHF1ZXJ5LCBub3Qgd2l0aCA8c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9zcGFuPi48L2xpPgoJ CTxsaT5DaGFuZ2VkIHNsaWRpbmcgcGFuZWxzJiM4MjE3OyBsaW5rcyAoPGNvZGU+YTwvY29k ZT4gZWxlbWVudHMpIGludG8gc3BhbnMuPC9saT4KCTwvdWw+CgoJPHA+PHN0cm9uZz5WZXJz aW9uIDAuNzwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPkZpeGVkOiBub3cgZGVsZXRpbmcg Y3VzdG9tIHVybCBsZWFkcyBiYWNrIHRvIHRoZSBsaXN0IHZpZXcsIG5vdCB0byB0aGUgZWRp dGluZyBmb3JtLjwvbGk+CgkJPGxpPlJlbW92ZWQgc29tZSBsZWZ0b3ZlciBpbmxpbmUgc3R5 bGVzIGZyb20gdjAuNi48L2xpPgoJPC91bD4KCgk8cD48c3Ryb25nPlZlcnNpb24gMC42PC9z dHJvbmc+PC9wPgoKCTx1bD4KCQk8bGk+UmV3cml0dGVuIHRoZSBjb2RlIHRoYXQgZ2VuZXJh dGVzIHRoZSBzaXRlbWFwLjwvbGk+CgkJPGxpPk5ldyBhZG1pbiBwYW5lbCBsb29rLjwvbGk+ CgkJPGxpPk5vdyBjdXN0b20gcGVybWxpbmsgbW9kZXMgYW5kIGN1c3RvbSB1cmxzIGFyZSBl c2NhcGVkLiBVc2VycyBjYW4gaW5wdXQgdW5lc2NhcGVkIDxzcGFuIGNsYXNzPSJjYXBzIj5V Ukw8L3NwYW4+cy9tYXJrdXAgZnJvbSBub3cgb24uPC9saT4KCQk8bGk+Tm93IGN1c3RvbSA8 c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaXN0IHNob3dzIHRoZSBmdWxsIGZvcm1h dHRlZCA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBhZnRlciBhdXRvLWZpbGwgaW5z dGVhZCBvZiB0aGUgdXNlciBpbnB1dC48L2xpPgoJCTxsaT5Ob3cgY3VzdG9tIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+cyB0aGF0IHN0YXJ0IHdpdGggd3d3LiBhcmUgY29tcGxl dGVkIHdpdGggaHR0cDovLyBwcm90b2NvbC48L2xpPgoJCTxsaT5Ob3cgYWxsIHVybHMgdGhh dCBkbyBub3Qgc3RhcnQgd2l0aCBlaXRoZXIgaHR0cCwgaHR0cHMsIHd3dywgZnRwIG9yIGZ0 cHMgcHJvdG9jb2wgYXJlIGF1dG8tY29tcGxldGVkIHdpdGggdGhlIHNpdGUmIzgyMTc7cyBh ZGRyZXNzLjwvbGk+CgkJPGxpPkN1c3RvbSB1cmwgZWRpdG9yIGdvdCBvd24gcGFuZWwuIE5v IGxvbmdlciB0aGUgZm9ybSBpcyBhYm92ZSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwv c3Bhbj4gbGlzdC48L2xpPgoJCTxsaT5BZGRlZCBhYmlsaXR5IHRvIG1hbnVhbGx5IHR1cm4g Z3ppYiBjb21wcmVzc2lvbiBvZmYgYW5kIGNoYW5nZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwu PC9saT4KCQk8bGk+QWRkZWQgc2V0dGluZyB0byBzZXQgemxpYi5vdXRwdXRfY29tcHJlc3Np b24gb2ZmLiA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3Bp Yy5waHA/cGlkPTIyNDkzMSNwMjI0OTMxIj5TZWUgaGVyZTwvYT4sIHRoYW5rIHlvdSBmb3Ig cmVwb3J0aW5nIHN1cGVyZmx5LjwvbGk+CgkJPGxpPlByZWZlcmVuY2VzIGFyZSBub3cgdHJp bW1lZCBkdXJpbmcgc2F2ZS48L2xpPgoJCTxsaT5NZXJnZWQgPGNvZGU+cmFoX3NpdGVtYXBf dXBkYXRlKCk8L2NvZGU+IHdpdGggPGNvZGU+cmFoX3NpdGVtYXBfc2F2ZSgpPC9jb2RlPi48 L2xpPgoJCTxsaT5Gcm9tIG5vdyBvbiBhbGwgbmV3IGluc3RhbGxhdGlvbnMgaGF2ZSBkZWZh dWx0IHNldHRpbmdzIGRlZmluZWQgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgZXhjbHVkZSBs aW5rLCBmaWxlIGFuZCBpbWFnZSBjYXRlZ29yaWVzIGZyb20gdGhlIHNpdGVtYXAuIFRoaXMg d29uJiM4MjE3O3QgZWZmZWN0IHVwZGF0ZXJzLjwvbGk+CgkJPGxpPkNoYW5nZWQgc2l0ZW1h cCYjODIxNztzIGNhbGxiYWNrIHJlZ2lzdGVyIGZyb20gcHJlIDxjb2RlPnByZXRleHQ8L2Nv ZGU+IHRvIGNhbGxiYWNrIGFmdGVyIGl0IChjYWxsYmFjayBpcyBub3cgPGNvZGU+dGV4dHBh dHRlcm48L2NvZGU+KS4gTm93IDxjb2RlPiRwcmV0ZXh0PC9jb2RlPiBpcyBzZXQgYmVmb3Jl IHRoZSBzaXRlbWFwIGFuZCB0aHVzIG1vcmUgcGx1Z2lucyBtaWdodCB3b3JrIHdpdGhpbiBw ZXJtbGluayBzZXR0aW5ncyBhbmQgY3VzdG9tIHVybHMuPC9saT4KCQk8bGk+V2hlbiB1c2lu ZyA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiYjODIxNztzIGNsZWFuIDxzcGFuIGNs YXNzPSJjYXBzIj5VUkw8L3NwYW4+cywgcmVxdWVzdGluZyA8Y29kZT4vc2l0ZW1hcC54bWwu Z3o8L2NvZGU+IGFuZCA8Y29kZT4vc2l0ZW1hcC54bWw8L2NvZGU+IDxzcGFuIGNsYXNzPSJj YXBzIj5VUkw8L3NwYW4+cyB3aWxsIHJldHVybiB0aGUgc2l0ZW1hcCwgbm90IGp1c3QgdGhl IDxjb2RlPi8/cmFoX3NpdGVtYXA9c2l0ZW1hcDwvY29kZT4uIFRoaXMgd2lsbCBvZiBjb3Vy c2UgcmVxdWlyZSBleGlzdGluZyBmdWxseSB3b3JraW5nIGNsZWFuIHVybHMuPC9saT4KCTwv dWw+CgoJPHA+PHN0cm9uZz5WZXJzaW9uIDAuNTwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxp PkFkZGVkIGN1c3RvbWl6YWJsZSB0aW1lc3RhbXAgZm9ybWF0cy48L2xpPgoJCTxsaT5DbGVh bmVkIGJhY2tlbmQgbWFya3VwLjwvbGk+CgkJPGxpPkNvbWJpbmVkIGluZGl2aWR1YWwgcHJl ZmVyZW5jZSBxdWVyaWVzLjwvbGk+Cgk8L3VsPgoKCTxwPjxzdHJvbmc+VmVyc2lvbiAwLjQ8 L3N0cm9uZz48L3A+CgoJPHVsPgoJCTxsaT5BZGRlZCBzdXBwb3J0IGZvciBjdXN0b20gcGVy bWxpbmsgcnVsZXM6IE5vdyB5b3UgY2FuIGVhc2lseSBzZXQgYW55IGtpbmQgb2YgcGVybWxp bmsgcnVsZXMgZm9yIGFydGljbGVzLCBzZWN0aW9uIGFuZCBjYXRlZ29yaWVzLjwvbGk+CgkJ PGxpPkFkZGVkIG9wdGlvbiB0byBleGNsdWRlIGZ1dHVyZSBhcnRpY2xlcy48L2xpPgoJCTxs aT5BZGRlZCBvcHRpb24gdG8gZXhjbHVkZSBwYXN0IGFydGljbGVzLjwvbGk+CgkJPGxpPkFk ZGVkIG9wdGlvbiB0byBleGNsdWRlIGV4cGlyZWQgYXJ0aWNsZXMuPC9saT4KCQk8bGk+TW92 ZWQgQ3VzdG9tIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IFVJIHRvIGl0JiM4MjE3 O3Mgb3duIHBhZ2UuPC9saT4KCQk8bGk+QWRkZWQgbXVsdGktZGVsZXRlIGZlYXR1cmUgdG8g Q3VzdG9tIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IFVJLjwvbGk+CgkJPGxpPklt cHJvdmVkIEN1c3RvbSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBVSS48L2xpPgoJ CTxsaT5SZW1vdmVkIGRlZmF1bHQgc3RhdGljIGFwcGVuZGluZyBkb21haW4gZnJvbSBDdXN0 b20gPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gaW5wdXQgZmllbGQuPC9saT4KCQk8 bGk+Q2hhbmdlZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBtaW5pbXVtIHJlcXVp cmVtZW50IHRvIHZlcnNpb24gNC4wLjcgKGFuZCBhYm92ZSkuIE5vdGUgdGhhdCB0aGUgcGx1 Z2luIHN0aWxsIHdvcmtzIHdpdGggb2xkZXIgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bh bj4gdmVyc2lvbnMgKGRvd24gdG8gNC4wLjUpIGlmIHRoZSA8ZW0+RXhjbHVkZSBFeHBpcmVk IGFydGljbGVzPC9lbT4gLW9wdGlvbiBpcyBsZWZ0IGVtcHR5ICh1bnNldCkuPC9saT4KCTwv dWw+CgoJPHA+PHN0cm9uZz5WZXJzaW9uIDAuMy4yPC9zdHJvbmc+PC9wPgoKCTx1bD4KCQk8 bGk+Rml4ZWQgdmlldyB1cmwgdGhhdCBzdGlsbCAoZnJvbSB2ZXJzaW9uIDAuMikgaW5jbHVk ZWQgaW5zdGFsbGF0aW9uIGFkZHJlc3MgYmVmb3JlIGxpbmsuPC9saT4KCTwvdWw+CgoJPHA+ PHN0cm9uZz5WZXJzaW9uIDAuMzwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPkFkZGVkIG9w dGlvbiB0byBpbnNlcnQgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zIHRoYXQgYXJl IG91dHNpZGUgVGV4dHBhdHRlcm4gaW5zdGFsbCBkaXJlY3RvcnkuPC9saT4KCQk8bGk+Rml4 ZWQgb3B0aW9uIHRvIGV4Y2x1ZGUgY2F0ZWdvcmllcyBkaXJlY3RseSBieSB0eXBlOiBhZGRl ZCBmb3Jnb3R0ZW4gbGluayB0eXBlLjwvbGk+Cgk8L3VsPgoKCTxwPjxzdHJvbmc+VmVyc2lv biAwLjI8L3N0cm9uZz48L3A+CgoJPHVsPgoJCTxsaT5BZGRlZCBvcHRpb24gdG8gZXhjbHVk ZS9pbmNsdWRlIHN0aWNreSBhcnRpY2xlcy48L2xpPgoJCTxsaT5BZGRlZCBvcHRpb24gdG8g ZXhjbHVkZSBjYXRlZ29yaWVzIGRpcmVjdGx5IGJ5IHR5cGUuPC9saT4KCQk8bGk+Rml4ZWQg YnVnOiBub3cgc2hvd3MgYWxsIGNhdGVnb3JpZXMsIGFuZCBub3Qgb25seSBhcnRpY2xlLXR5 cGUsIGluIGFkbWluIHBhbmVsLjwvbGk+CgkJPGxpPkZpeGVkIGJ1ZzogcmVtb3ZlZCBkb3Vi bGUgaW5zdGFsbCBxdWVyeSAoZGlkbiYjODIxNzt0IGRvIGEgdGhpbmcsIGp1c3QgY2hlY2tl ZCB0YWJsZSBzdGF0dXMgdHdpY2UpLjwvbGk+Cgk8L3VsPgoKCTxwPjxzdHJvbmc+VmVyc2lv biAwLjEuMjwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPkZpeGVkIGFydGljbGUgbGlzdGlu ZyBidWcgY2F1c2VkIGJ5IG5hc3R5IGxpdHRsZSB0eXBvOiBub3cgb25seSA0IGFuZCA1IHN0 YXR1c2VzIGFyZSBsaXN0ZWQuPC9saT4KCTwvdWw+CgoJPHA+PHN0cm9uZz5WZXJzaW9uIDAu MTwvc3Ryb25nPjwvcD4KCgk8dWw+CgkJPGxpPkZpcnN0IHJlbGVhc2UuPC9saT4KCTwvdWw+ IjtzOjQ6ImNvZGUiO3M6MjcyMzM6IgkjIyMjIyMjIyMjIyMjIyMjIyMNCgkjDQoJIwlyYWhf c2l0ZW1hcC1wbHVnaW4gZm9yIFRleHRwYXR0ZXJuDQoJIwl2ZXJzaW9uIDEuMQ0KCSMJYnkg SnVra2EgU3ZhaG4NCgkjCWh0dHA6Ly9yYWhmb3J1bS5iaXoNCgkjDQoJIyMjIyMjIyMjIyMj IyMjIyMjIw0KDQoJaWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4nKSB7DQoJCWFkZF9wcml2 cygncmFoX3NpdGVtYXAnLCcxLDInKTsNCgkJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywn cmFoX3NpdGVtYXAnLCdTaXRlbWFwJyk7DQoJCXJlZ2lzdGVyX2NhbGxiYWNrKCdyYWhfc2l0 ZW1hcF9wYWdlJywncmFoX3NpdGVtYXAnKTsNCgkJcmVnaXN0ZXJfY2FsbGJhY2soJ3JhaF9z aXRlbWFwX2hlYWQnLCdhZG1pbl9zaWRlJywnaGVhZF9lbmQnKTsNCgl9IGVsc2UgDQoJCXJl Z2lzdGVyX2NhbGxiYWNrKCdyYWhfc2l0ZW1hcCcsJ3RleHRwYXR0ZXJuJyk7DQoNCi8qKg0K CUNoZWNrcyBpZiB0aGUgc2l0ZW1hcCBzaG91bGQgYmUgcmV0dXJuZWQNCiovDQoNCglmdW5j dGlvbiByYWhfc2l0ZW1hcF9kZWxpdmVyeSgpIHsNCgkJZ2xvYmFsICRwcmV0ZXh0Ow0KCQkN CgkJJHVyaSA9ICRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddOw0KCQkkdXJpID0gZXhwbG9kZSgn LycsJHVyaSk7DQoJCSR1cmkgPSBhcnJheV9yZXZlcnNlKCR1cmkpOw0KCQkNCgkJaWYoaW5f YXJyYXkoJHVyaVswXSxhcnJheSgnc2l0ZW1hcC54bWwuZ3onLCdzaXRlbWFwLnhtbCcpKSkN CgkJCXJldHVybiB0cnVlOw0KCQkNCgkJaWYoZ3BzKCdyYWhfc2l0ZW1hcCcpID09ICdzaXRl bWFwJykJDQoJCQlyZXR1cm4gdHJ1ZTsNCgkJDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCi8q Kg0KCVRoZSBzaXRlbWFwDQoqLw0KDQoJZnVuY3Rpb24gcmFoX3NpdGVtYXAoKSB7DQoJCWlm KHJhaF9zaXRlbWFwX2RlbGl2ZXJ5KCkgPT0gZmFsc2UpDQoJCQlyZXR1cm47DQoJCQ0KCQln bG9iYWwgJHMsICR0aGlzc2VjdGlvbiwgJHRoaXNjYXRlZ29yeSwgJGMsICRwcmV0ZXh0LCAk dGhpc3BhZ2UsICR0aGlzYXJ0aWNsZTsNCgkJDQoJCUAkcHJlZiA9IHJhaF9zaXRlbWFwX3By ZWZzKCk7DQoJCQ0KCQlpZighaXNzZXQoJHByZWZbJ3psaWJfb3V0cHV0J10pKSB7DQoJCQly YWhfc2l0ZW1hcF9pbnN0YWxsKCk7DQoJCQkkcHJlZiA9IHJhaF9zaXRlbWFwX3ByZWZzKCk7 DQoJCX0NCg0KCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veG1sJyk7DQoN CgkJaWYoJHByZWZbJ2NvbXByZXNzJ10gPT0gMSAmJiBmdW5jdGlvbl9leGlzdHMoJ2d6ZW5j b2RlJykpDQoJCQloZWFkZXIoJ0NvbnRlbnQtRW5jb2Rpbmc6IGd6aXAnKTsNCgkJDQoJCWlm KCRwcmVmWyd6bGliX291dHB1dCddID09IDEpDQoJCQlpbmlfc2V0KCd6bGliLm91dHB1dF9j b21wcmVzc2lvbicsJ09mZicpOw0KCQ0KCQkkdGltZXN0YW1wZm9ybWF0ID0gKCFlbXB0eSgk cHJlZlsndGltZXN0YW1wZm9ybWF0J10pKSA/ICRwcmVmWyd0aW1lc3RhbXBmb3JtYXQnXSA6 ICdjJzsNCgkJDQoJCSRvdXRbXSA9IA0KCQkJJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp bmc9InV0Zi04Ij8+Jy4NCgkJCSc8dXJsc2V0IHhtbG5zPSJodHRwOi8vd3d3LnNpdGVtYXBz Lm9yZy9zY2hlbWFzL3NpdGVtYXAvMC45Ij4nLg0KCQkJJzx1cmw+PGxvYz4nLmh1Lic8L2xv Yz48L3VybD4nOw0KCQkNCgkJaWYoJHByZWZbJ25vc2VjdGlvbnMnXSAhPSAxKSB7DQoJCQkN CgkJCSRycyA9IA0KCQkJCXNhZmVfcm93cygNCgkJCQkJJ25hbWUnLA0KCQkJCQkndHhwX3Nl Y3Rpb24nLA0KCQkJCQlyYWhfc2l0ZW1hcF9pbignbmFtZScsJHByZWZbJ3NlY3Rpb25zJ10s J2RlZmF1bHQnKSAuDQoJCQkJCSIgb3JkZXIgYnkgbmFtZSBhc2MiDQoJCQkJKTsNCgkJCQ0K CQkJJHRoaXNhcnRpY2xlWydzZWN0aW9uJ10gPSAnJzsNCgkJCQ0KCQkJZm9yZWFjaCgkcnMg YXMgJGEpIHsNCgkJCQkNCgkJCQkkcyA9ICR0aGlzcGFnZVsncyddID0gJHRoaXNzZWN0aW9u WydzZWN0aW9uJ10gPSAgJHByZXRleHRbJ3MnXSA9ICRhWyduYW1lJ107DQoJCQkJDQoJCQkJ aWYoJHByZWZbJ3Blcm1saW5rX3NlY3Rpb24nXSkNCgkJCQkJJG91dFtdID0gJzx1cmw+PGxv Yz4nLnBhcnNlKCRwcmVmWydwZXJtbGlua19zZWN0aW9uJ10pLic8L2xvYz48L3VybD4nOw0K CQkJCWVsc2UgDQoJCQkJCSRvdXRbXSA9ICc8dXJsPjxsb2M+Jy5wYWdlbGlua3VybChhcnJh eSgncycgPT4gJGFbJ25hbWUnXSkpLic8L2xvYz48L3VybD4nOw0KCQkJfQ0KCQkJDQoJCQkk cyA9ICAkdGhpc3NlY3Rpb25bJ3NlY3Rpb24nXSA9ICR0aGlzcGFnZVsncyddID0gJHByZXRl eHRbJ3MnXSA9ICcnOw0KCQkJDQoJCX0NCgkJDQoJCSRub3R5cGVzID0gJyc7DQoJCQ0KCQlp ZigkcHJlZlsnbm9jYXRlZ29yaWVzJ10gPT0gMSkNCgkJCSRub3R5cGVzW10gPSAnYXJ0aWNs ZSc7DQoJCWlmKCRwcmVmWydub2ZpbGUnXSA9PSAxKQ0KCQkJJG5vdHlwZXNbXSA9ICdmaWxl JzsNCgkJaWYoJHByZWZbJ25vaW1hZ2UnXSA9PSAxKQ0KCQkJJG5vdHlwZXNbXSA9ICdpbWFn ZSc7DQoJCWlmKCRwcmVmWydub2xpbmsnXSA9PSAxKQ0KCQkJJG5vdHlwZXNbXSA9ICdsaW5r JzsNCgkJDQoJCSRub3QgPSBleHBsb2RlKCcsJywkcHJlZlsnY2F0ZWdvcmllcyddKTsNCgkJ DQoJCSRycyA9IA0KCQkJc2FmZV9yb3dzKA0KCQkJCSduYW1lLHR5cGUsaWQnLA0KCQkJCSd0 eHBfY2F0ZWdvcnknLA0KCQkJCSJuYW1lICE9ICdyb290JyAiIC4gcmFoX3NpdGVtYXBfaW4o J2FuZCB0eXBlJywkbm90eXBlcykgLiAiIG9yZGVyIGJ5IG5hbWUgYXNjIg0KCQkJKTsNCgkJ DQoJCWZvcmVhY2goJHJzIGFzICRhKSB7DQoNCgkJCWlmKGluX2FycmF5KCRhWyd0eXBlJ10u J198fF8nLiRhWyduYW1lJ10sJG5vdCkpDQoJCQkJY29udGludWU7DQoNCgkJCSRjID0gJHRo aXNjYXRlZ29yeVsnYyddID0gJHByZXRleHRbJ2MnXSA9ICR0aGlzcGFnZVsnYyddID0gJGFb J25hbWUnXTsNCg0KCQkJaWYoJHByZWZbJ3Blcm1saW5rX2NhdGVnb3J5J10pDQoJCQkJJG91 dFtdID0gDQoJCQkJCQ0KCQkJCQknPHVybD48bG9jPicuDQoJCQkJCQ0KCQkJCQlodG1sc3Bl Y2lhbGNoYXJzKHN0cl9yZXBsYWNlKA0KCQkJCQkJYXJyYXkoDQoJCQkJCQkJJ1t0eXBlXScs DQoJCQkJCQkJJ1tpZF0nDQoJCQkJCQkpLA0KCQkJCQkJYXJyYXkoDQoJCQkJCQkJJGFbJ3R5 cGUnXSwNCgkJCQkJCQkkYVsnaWQnXQ0KCQkJCQkJKSwNCgkJCQkJCXBhcnNlKCRwcmVmWydw ZXJtbGlua19jYXRlZ29yeSddKQ0KCQkJCQkpKS4NCgkJCQkJDQoJCQkJCSc8L2xvYz48L3Vy bD4nOw0KCQkJCQkNCgkJCWVsc2UgDQoJCQkJJG91dFtdID0gDQoJCQkJCSc8dXJsPjxsb2M+ Jy5wYWdlbGlua3VybChhcnJheSgnYycgPT4gJGFbJ25hbWUnXSkpLic8L2xvYz48L3VybD4n Ow0KCQl9DQoJCQ0KCQkkYyA9ICR0aGlzY2F0ZWdvcnlbJ2MnXSA9ICRwcmV0ZXh0WydjJ10g PSAkdGhpc3BhZ2VbJ2MnXSA9ICAnJzsNCgkJDQoJCWlmKCRwcmVmWydub2FydGljbGVzJ10g IT0gMSkgew0KCQkJDQoJCQkkc3FsW10gPSByYWhfc2l0ZW1hcF9pbignIGFuZCBDYXRlZ29y eTEnLCRwcmVmWydhcnRpY2xlY2F0ZWdvcmllcyddKTsNCgkJCSRzcWxbXSA9IHJhaF9zaXRl bWFwX2luKCcgYW5kIENhdGVnb3J5MicsJHByZWZbJ2FydGljbGVjYXRlZ29yaWVzJ10pOw0K CQkJJHNxbFtdID0gcmFoX3NpdGVtYXBfaW4oJyBhbmQgU3RhdHVzJywkcHJlZlsnYXJ0aWNs ZXN0YXR1cyddLCcxLDIsMycpOw0KCQkJJHNxbFtdID0gcmFoX3NpdGVtYXBfaW4oJyBhbmQg U2VjdGlvbicsJHByZWZbJ2FydGljbGVzZWN0aW9ucyddKTsNCgkJCQ0KCQkJaWYoJHByZWZb J2FydGljbGVmdXR1cmUnXSkNCgkJCQkkc3FsW10gPSAnIGFuZCBQb3N0ZWQgPD0gbm93KCkn Ow0KCQkJaWYoJHByZWZbJ2FydGljbGVwYXN0J10pDQoJCQkJJHNxbFtdID0gJyBhbmQgUG9z dGVkID4gbm93KCknOw0KCQkJaWYoJHByZWZbJ2FydGljbGVleHBpcmVkJ10pDQoJCQkJJHNx bFtdID0gIiBhbmQgKEV4cGlyZXMgPSAnMDAwMC0wMC0wMCAwMDowMDowMCcgb3IgRXhwaXJl cyA+PSBub3coKSkiOw0KCQkJDQoJCQkkcnMgPSANCgkJCQlzYWZlX3Jvd3MoDQoJCQkJCSgN CgkJCQkJCSgkcHJlZlsncGVybWxpbmtfYXJ0aWNsZSddKSA/IA0KCQkJCQkJCScqLCAgdW5p eF90aW1lc3RhbXAoUG9zdGVkKSBhcyB1UG9zdGVkLCB1bml4X3RpbWVzdGFtcChFeHBpcmVz KSBhcyB1RXhwaXJlcywgdW5peF90aW1lc3RhbXAoTGFzdE1vZCkgYXMgdUxhc3RNb2QnDQoJ CQkJCQk6IA0KCQkJCQkJCSdJRCwgdW5peF90aW1lc3RhbXAoUG9zdGVkKSBhcyB1UG9zdGVk LCB1bml4X3RpbWVzdGFtcChMYXN0TW9kKSBhcyB1TGFzdE1vZCcNCgkJCQkJKSwNCgkJCQkJ J3RleHRwYXR0ZXJuJywNCgkJCQkJJzE9MScgLiBpbXBsb2RlKCcnLCRzcWwpLiAnIG9yZGVy IGJ5IFBvc3RlZCBkZXNjJw0KCQkJCSk7DQoJCQkNCgkJCWZvcmVhY2goJHJzIGFzICRhKSB7 DQoJCQkJZXh0cmFjdCgkYSk7DQoJCQkJDQoJCQkJaWYoJHByZWZbJ3Blcm1saW5rX2FydGlj bGUnXSkgew0KCQkJCQkkdGhpc2FydGljbGUgPSANCgkJCQkJCWFycmF5KA0KCQkJCQkJCSd0 aGlzaWQnID0+ICRJRCwNCgkJCQkJCQkncG9zdGVkJyA9PiAkdVBvc3RlZCwNCgkJCQkJCQkn bW9kaWZpZWQnID0+ICR1TGFzdE1vZCwNCgkJCQkJCQknYW5ub3RhdGUnID0+ICRBbm5vdGF0 ZSwNCgkJCQkJCQknY29tbWVudHNfaW52aXRlJyA9PiAkQW5ub3RhdGVJbnZpdGUsDQoJCQkJ CQkJJ2F1dGhvcmlkJyA9PiAkQXV0aG9ySUQsDQoJCQkJCQkJJ3RpdGxlJyA9PiAkVGl0bGUs DQoJCQkJCQkJJ3VybF90aXRsZScgPT4gJHVybF90aXRsZSwNCgkJCQkJCQknY2F0ZWdvcnkx JyA9PiAkQ2F0ZWdvcnkxLA0KCQkJCQkJCSdjYXRlZ29yeTInID0+ICRDYXRlZ29yeTIsDQoJ CQkJCQkJJ3NlY3Rpb24nID0+ICRTZWN0aW9uLA0KCQkJCQkJCSdrZXl3b3JkcycgPT4gJEtl eXdvcmRzLA0KCQkJCQkJCSdhcnRpY2xlX2ltYWdlJyA9PiAkSW1hZ2UsDQoJCQkJCQkJJ2Nv bW1lbnRzX2NvdW50JyA9PiAkY29tbWVudHNfY291bnQsDQoJCQkJCQkJJ2JvZHknID0+ICRC b2R5X2h0bWwsDQoJCQkJCQkJJ2V4Y2VycHQnID0+ICRFeGNlcnB0X2h0bWwsDQoJCQkJCQkJ J292ZXJyaWRlX2Zvcm0nID0+ICRvdmVycmlkZV9mb3JtLA0KCQkJCQkJCSdzdGF0dXMnPT4g JFN0YXR1cw0KCQkJCQkJKQ0KCQkJCQk7DQoJCQkJfQ0KCQkJCQ0KCQkJCUAkb3V0W10gPSAN CgkJCQkJJzx1cmw+PGxvYz4nLg0KCQkJCQkoKCRwcmVmWydwZXJtbGlua19hcnRpY2xlJ10p ID8gDQoJCQkJCQkJaHRtbHNwZWNpYWxjaGFycyhwYXJzZSgkcHJlZlsncGVybWxpbmtfYXJ0 aWNsZSddKSkNCgkJCQkJCTogDQoJCQkJCQkJcGVybWxpbmt1cmxfaWQoJElEKQ0KCQkJCQkp Lg0KCQkJCQknPC9sb2M+PGxhc3Rtb2Q+Jy4NCgkJCQkJKCgkdUxhc3RNb2QgPCAkdVBvc3Rl ZCkgPyANCgkJCQkJCWRhdGUoJHRpbWVzdGFtcGZvcm1hdCwkdVBvc3RlZCkgOiANCgkJCQkJ CWRhdGUoJHRpbWVzdGFtcGZvcm1hdCwkdUxhc3RNb2QpDQoJCQkJCSkuDQoJCQkJCSc8L2xh c3Rtb2Q+PC91cmw+Jw0KCQkJCTsNCgkJCQkNCgkJCX0NCgkJCSR0aGlzYXJ0aWNsZSA9ICcn Ow0KCQl9DQoJCQ0KCQkkcnMgPSANCgkJCXNhZmVfcm93cygNCgkJCQknKiwgdW5peF90aW1l c3RhbXAocG9zdGVkKSBhcyB1cG9zdGVkJywNCgkJCQkncmFoX3NpdGVtYXAnLA0KCQkJCScx PTEgb3JkZXIgYnkgcG9zdGVkIGRlc2MnDQoJCQkpOw0KCQkNCgkJZm9yZWFjaCgkcnMgYXMg JGEpIHsNCgkJCSR1cmwgPSBwYXJzZSgkYVsndXJsJ10pOw0KCQkJJG91dFtdID0gJzx1cmw+ PGxvYz4nLnJhaF9zaXRlbWFwX3VyaSgkdXJsLDEpLic8L2xvYz4nOw0KCQkJaWYoJGFbJ2lu Y2x1ZGUnXSA9PSAxKQ0KCQkJCUAkb3V0W10gPSAnPGxhc3Rtb2Q+Jy5kYXRlKCR0aW1lc3Rh bXBmb3JtYXQsJGFbJ3Vwb3N0ZWQnXSkuJzwvbGFzdG1vZD4nOw0KCQkJJG91dFtdID0gJzwv dXJsPic7DQoJCX0NCgkJDQoJCSRvdXRbXSA9ICc8L3VybHNldD4nOw0KCQkkb3V0ID0gaW1w bG9kZSgnJywkb3V0KTsNCgkJDQoJCWVjaG8gKEAkcHJlZlsnY29tcHJlc3MnXSA9PSAxICYm IGZ1bmN0aW9uX2V4aXN0cygnZ3plbmNvZGUnKSkgPyBnemVuY29kZSgkb3V0LCRwcmVmWydj b21wcmVzc2lvbl9sZXZlbCddKSA6ICRvdXQ7DQoJCWV4aXQoKTsNCgl9DQoNCi8qKg0KCURl bGl2ZXJzIHRoZSBwYW5lbHMNCiovDQoNCglmdW5jdGlvbiByYWhfc2l0ZW1hcF9wYWdlKCkg ew0KCQlyZXF1aXJlX3ByaXZzKCdyYWhfc2l0ZW1hcCcpOw0KCQlnbG9iYWwgJHN0ZXA7DQoJ CWlmKGluX2FycmF5KCRzdGVwLGFycmF5KA0KCQkJJ3JhaF9zaXRlbWFwX3NhdmUnLA0KCQkJ J3JhaF9zaXRlbWFwX2N1c3RvbV9saXN0JywNCgkJCSdyYWhfc2l0ZW1hcF9jdXN0b21fZm9y bScsDQoJCQkncmFoX3NpdGVtYXBfY3VzdG9tX3NhdmUnLA0KCQkJJ3JhaF9zaXRlbWFwX2Rl bGV0ZScNCgkJKSkpICRzdGVwKCk7DQoJCWVsc2UgcmFoX3NpdGVtYXBfbGlzdCgpOw0KCX0N Cg0KLyoqDQoJUHJlZmVyZW5jZXMgcGFuZWwNCiovDQoNCglmdW5jdGlvbiByYWhfc2l0ZW1h cF9saXN0KCRtZXNzYWdlPScnKSB7DQoJCUAkcHJlZiA9IHJhaF9zaXRlbWFwX3ByZWZzKCk7 DQoNCgkJaWYoIWlzc2V0KCRwcmVmWyd6bGliX291dHB1dCddKSkgew0KCQkJcmFoX3NpdGVt YXBfaW5zdGFsbCgpOw0KCQkJJHByZWYgPSByYWhfc2l0ZW1hcF9wcmVmcygpOw0KCQl9DQoN CgkJcmFoX3NpdGVtYXBfaGVhZGVyKA0KCQkJDQoJCQknCTxmb3JtIG1ldGhvZD0icG9zdCIg YWN0aW9uPSJpbmRleC5waHAiPicubi4NCgkJCQ0KCQkJJwkJPHA+PHN0cm9uZz5HZW5lcmFs IHByZWZlcmVuY2VzPC9zdHJvbmc+PC9wPicubi4NCgkJCQ0KCQkJJwkJPHAgdGl0bGU9IkNs aWNrIHRvIGV4cGFuZCIgY2xhc3M9InJhaF9zaXRlbWFwX2hlYWRpbmciPicubi4NCgkJCScJ CQkrIDxzcGFuPkV4Y2x1ZGUgc2VjdGlvbnMgYW5kIGNhdGVnb3JpZXMgZnJvbSB0aGUgc2l0 ZW1hcDwvc3Bhbj4nLm4uDQoJCQknCQk8L3A+Jy5uLg0KCQkJDQoJCQknCQk8ZGl2IGNsYXNz PSJyYWhfc2l0ZW1hcF9tb3JlIj4nLm4uDQoJCQkNCgkJCXJhaF9zaXRlbWFwX2xpc3Rpbmco J0V4Y2x1ZGUgc2VjdGlvbnMnLCdzZWN0aW9ucycsJ3R4cF9zZWN0aW9uJywibmFtZSAhPSAn ZGVmYXVsdCciKS4NCgkJCXJhaF9zaXRlbWFwX2xpc3RpbmcoJ0V4Y2x1ZGUgY2F0ZWdvcmll cycsJ2NhdGVnb3JpZXMnLCd0eHBfY2F0ZWdvcnknLCJuYW1lICE9ICdyb290JyBhbmQgdGl0 bGUgIT0gJ3Jvb3QnIikuDQoJCQkNCgkJCScJCQk8ZGl2IGNsYXNzPSJyYWhfc2l0ZW1hcF9j b2x1bW4iPicubi4NCgkJCQ0KCQkJJwkJCQk8c3Ryb25nPkFkdmFuY2VkIHNldHRpbmdzPC9z dHJvbmc+PGJyIC8+Jy5uLg0KCQkJJwkJCQk8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94 IiBuYW1lPSJub3NlY3Rpb25zIiB2YWx1ZT0iMSInLigoJHByZWZbJ25vc2VjdGlvbnMnXSA9 PSAxKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4gRXhjbHVkZSBhbGwgc2Vj dGlvbiBVUkxzPC9sYWJlbD48YnIgLz4nLm4uDQoJCQknCQkJCTxsYWJlbD48aW5wdXQgdHlw ZT0iY2hlY2tib3giIG5hbWU9Im5vZmlsZSIgdmFsdWU9IjEiJy4oKCRwcmVmWydub2ZpbGUn XSA9PSAxKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4gRXhjbHVkZSBhbGwg ZmlsZS10eXBlIGNhdGVnb3J5IFVSTHM8L2xhYmVsPjxiciAvPicubi4NCgkJCScJCQkJPGxh YmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibm9pbWFnZSIgdmFsdWU9IjEiJy4o KCRwcmVmWydub2ltYWdlJ10gPT0gMSkgPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4n IC8+IEV4Y2x1ZGUgYWxsIGltYWdlLXR5cGUgY2F0ZWdvcnkgVVJMczwvbGFiZWw+PGJyIC8+ Jy5uLg0KCQkJJwkJCQk8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJub2xp bmsiIHZhbHVlPSIxIicuKCgkcHJlZlsnbm9saW5rJ10gPT0gMSkgPyAnIGNoZWNrZWQ9ImNo ZWNrZWQiJyA6ICcnKS4nIC8+IEV4Y2x1ZGUgYWxsIGxpbmstdHlwZSBjYXRlZ29yeSBVUkxz PC9sYWJlbD48YnIgLz4nLm4uDQoJCQknCQkJCTxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2ti b3giIG5hbWU9Im5vY2F0ZWdvcmllcyIgdmFsdWU9IjEiJy4oKCRwcmVmWydub2NhdGVnb3Jp ZXMnXSA9PSAxKSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4gRXhjbHVkZSBh bGwgYXJ0aWNsZS10eXBlIGNhdGVnb3J5IFVSTHM8L2xhYmVsPjxiciAvPicubi4NCgkJCQ0K CQkJDQoJCQknCQkJPC9kaXY+Jy5uLg0KCQkJDQoJCQknCQk8L2Rpdj4nLm4uDQoJCQkNCgkJ CScJCTxwIHRpdGxlPSJDbGljayB0byBleHBhbmQiIGNsYXNzPSJyYWhfc2l0ZW1hcF9oZWFk aW5nIj4nLm4uDQoJCQknCQkJKyA8c3Bhbj5GaWx0ZXIgYXJ0aWNsZXMgZnJvbSB0aGUgc2l0 ZW1hcDwvc3Bhbj4nLm4uDQoJCQknCQk8L3A+Jy5uLg0KCQkJDQoJCQknCQk8ZGl2IGNsYXNz PSJyYWhfc2l0ZW1hcF9tb3JlIj4nLm4uDQoJCQkNCgkJCQ0KCQkJcmFoX3NpdGVtYXBfbGlz dGluZygnRXhjbHVkZSBhcnRpY2xlIHNlY3Rpb25zJywnYXJ0aWNsZXNlY3Rpb25zJywndHhw X3NlY3Rpb24nLCJuYW1lICE9ICdkZWZhdWx0JyIpLg0KCQkJcmFoX3NpdGVtYXBfbGlzdGlu ZygnRXhjbHVkZSBhcnRpY2xlIGNhdGVnb3JpZXMnLCdhcnRpY2xlY2F0ZWdvcmllcycsJ3R4 cF9jYXRlZ29yeScsIm5hbWUgIT0gJ3Jvb3QnIGFuZCB0aXRsZSAhPSAncm9vdCcgYW5kIHR5 cGUgPSAnYXJ0aWNsZSciKS4NCgkJCQ0KCQkJJwkJCTxkaXYgY2xhc3M9InJhaF9zaXRlbWFw X2NvbHVtbiI+Jy5uLg0KCQkJJwkJCQk8c3Ryb25nPkFkdmFuY2VkIHNldHRpbmdzPC9zdHJv bmc+PGJyIC8+Jy5uLg0KCQkJJwkJCQk8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBu YW1lPSJub2FydGljbGVzIiB2YWx1ZT0iMSInLigoJHByZWZbJ25vYXJ0aWNsZXMnXSA9PSAx KSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDogJycpLicgLz4gRG9uXCd0IGluY2x1ZGUgYXJ0 aWNsZXMgaW4gc2l0ZW1hcDwvbGFiZWw+PGJyIC8+Jy5uLg0KCQkJJwkJCQk8bGFiZWw+PGlu cHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhcnRpY2xlc3RhdHVzIiB2YWx1ZT0iNSInLigo JHByZWZbJ2FydGljbGVzdGF0dXMnXSA9PSA1KSA/ICcgY2hlY2tlZD0iY2hlY2tlZCInIDog JycpLicgLz4gRXhjbHVkZSBzdGlja3kgYXJ0aWNsZXM8L2xhYmVsPjxiciAvPicubi4NCgkJ CScJCQkJPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iYXJ0aWNsZWZ1dHVy ZSIgdmFsdWU9IjEiJy4oKCRwcmVmWydhcnRpY2xlZnV0dXJlJ10gPT0gMSkgPyAnIGNoZWNr ZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+IEV4Y2x1ZGUgZnV0dXJlIGFydGljbGVzPC9sYWJl bD48YnIgLz4nLm4uDQoJCQknCQkJCTxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5h bWU9ImFydGljbGVwYXN0IiB2YWx1ZT0iMSInLigoJHByZWZbJ2FydGljbGVwYXN0J10gPT0g MSkgPyAnIGNoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKS4nIC8+IEV4Y2x1ZGUgcGFzdCBhcnRp Y2xlczwvbGFiZWw+PGJyIC8+Jy5uLg0KCQkJJwkJCQk8bGFiZWw+PGlucHV0IHR5cGU9ImNo ZWNrYm94IiBuYW1lPSJhcnRpY2xlZXhwaXJlZCIgdmFsdWU9IjEiJy4oKCRwcmVmWydhcnRp Y2xlZXhwaXJlZCddID09IDEpID8gJyBjaGVja2VkPSJjaGVja2VkIicgOiAnJykuJyAvPiBF eGNsdWRlIGV4cGlyZWQgYXJ0aWNsZXM8L2xhYmVsPicubi4NCgkJCScJCQk8L2Rpdj4nLm4u DQoJCQkNCgkJCScJCTwvZGl2Picubi4NCgkJCQ0KCQkJJwkJPHA+PHN0cm9uZz5BZHZhbmNl ZCBzZXR0aW5nczwvc3Ryb25nPjwvcD4nLm4uDQoJCQkNCgkJCScJCTxwIHRpdGxlPSJDbGlj ayB0byBleHBhbmQiIGNsYXNzPSJyYWhfc2l0ZW1hcF9oZWFkaW5nIj4nLm4uDQoJCQknCQkJ KyA8c3Bhbj5Db21wcmVzc2lvbiBtZXRob2RzPC9zcGFuPicubi4NCgkJCScJCTwvcD4nLm4u DQoJCQkNCgkJCScJCTxkaXYgY2xhc3M9InJhaF9zaXRlbWFwX21vcmUiPicubi4NCgkJCQ0K CQkJJwkJCTxwIGNsYXNzPSJyYWhfc2l0ZW1hcF9wYXJhZ3JhcGgiPjxzdHJvbmc+Q29tcHJl c3Npb24uPC9zdHJvbmc+IFdpdGggdGhlc2Ugc2V0dGluZ3MgeW91IGNhbiBjb250cm9sIGNv bXByZXNzaW9uIGFuZCBldmVuIHR1cm4gaXQgb2ZmIGlmIGl0IGNhdXNlcyBwcm9ibGVtcyBv biB5b3VyIHNlcnZlci4gSXQgaXMgcmVjb21tZWRlZCB0byBsZWF2ZSBjb21wcmVzc2lvbiBv biBpZiBwb3NzaWJsZS4gQ29tcHJlc3Npb24gbGV2ZWwgMCBpcyB0aGUgbWlsZGVzdCBhbmQg OSBpcyB0aGUgbWF4aW11bSBjb21wcmVzc2lvbi48L3A+Jy5uLg0KCQkJJwkJCTxwPicubi4N CgkJCScJCQkJPGxhYmVsIGZvcj0icmFoX3NpdGVtYXBfY29tcHJlc3MiPlVzZSBHemlwIGNv bXByZXNzaW9uOjwvbGFiZWw+PGJyIC8+Jy5uLg0KCQkJDQoJCQknCQkJCTxzZWxlY3QgbmFt ZT0iY29tcHJlc3MiIGlkPSJyYWhfc2l0ZW1hcF9jb21wcmVzcyI+Jy5uLg0KCQkJJwkJCQkJ PG9wdGlvbiB2YWx1ZT0iMSInLigoJHByZWZbJ2NvbXByZXNzJ10gPT0gMSkgPyAnIHNlbGVj dGVkPSJzZWxlY3RlZCInIDogJycpLic+WWVzPC9vcHRpb24+Jy5uLg0KCQkJJwkJCQkJPG9w dGlvbiB2YWx1ZT0iMCInLigoJHByZWZbJ2NvbXByZXNzJ10gPT0gMCkgPyAnIHNlbGVjdGVk PSJzZWxlY3RlZCInIDogJycpLic+Tm88L29wdGlvbj4nLm4uDQoJCQknCQkJCTwvc2VsZWN0 Picubi4NCgkJCQ0KCQkJJwkJCTwvcD4nLm4uDQoJCQknCQkJPHA+Jy5uLg0KCQkJJwkJCQk8 bGFiZWwgZm9yPSJyYWhfc2l0ZW1hcF9jb21wcmVzc2lvbl9sZXZlbCI+Q29tcHJlc3Npb24g bGV2ZWw6PC9sYWJlbD48YnIgLz4nLm4uDQoJCQkNCgkJCScJCQkJPHNlbGVjdCBuYW1lPSJj b21wcmVzc2lvbl9sZXZlbCIgaWQ9InJhaF9zaXRlbWFwX2NvbXByZXNzaW9uX2xldmVsIj4n Lm4uDQoJCQknCQkJCQk8b3B0aW9uIHZhbHVlPSIwIicuKCgkcHJlZlsnY29tcHJlc3Npb25f bGV2ZWwnXSA9PSAwKSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykuJz4wPC9vcHRp b24+Jy5uLg0KCQkJJwkJCQkJPG9wdGlvbiB2YWx1ZT0iMSInLigoJHByZWZbJ2NvbXByZXNz aW9uX2xldmVsJ10gPT0gMSkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDogJycpLic+MTwv b3B0aW9uPicubi4NCgkJCScJCQkJCTxvcHRpb24gdmFsdWU9IjIiJy4oKCRwcmVmWydjb21w cmVzc2lvbl9sZXZlbCddID09IDIpID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4n PjI8L29wdGlvbj4nLm4uDQoJCQknCQkJCQk8b3B0aW9uIHZhbHVlPSIzIicuKCgkcHJlZlsn Y29tcHJlc3Npb25fbGV2ZWwnXSA9PSAzKSA/ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAn JykuJz4zPC9vcHRpb24+Jy5uLg0KCQkJJwkJCQkJPG9wdGlvbiB2YWx1ZT0iNCInLigoJHBy ZWZbJ2NvbXByZXNzaW9uX2xldmVsJ10gPT0gNCkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCIn IDogJycpLic+NDwvb3B0aW9uPicubi4NCgkJCScJCQkJCTxvcHRpb24gdmFsdWU9IjUiJy4o KCRwcmVmWydjb21wcmVzc2lvbl9sZXZlbCddID09IDUpID8gJyBzZWxlY3RlZD0ic2VsZWN0 ZWQiJyA6ICcnKS4nPjU8L29wdGlvbj4nLm4uDQoJCQknCQkJCQk8b3B0aW9uIHZhbHVlPSI2 IicuKCgkcHJlZlsnY29tcHJlc3Npb25fbGV2ZWwnXSA9PSA2KSA/ICcgc2VsZWN0ZWQ9InNl bGVjdGVkIicgOiAnJykuJz42PC9vcHRpb24+Jy5uLg0KCQkJJwkJCQkJPG9wdGlvbiB2YWx1 ZT0iNyInLigoJHByZWZbJ2NvbXByZXNzaW9uX2xldmVsJ10gPT0gNykgPyAnIHNlbGVjdGVk PSJzZWxlY3RlZCInIDogJycpLic+Nzwvb3B0aW9uPicubi4NCgkJCScJCQkJCTxvcHRpb24g dmFsdWU9IjgiJy4oKCRwcmVmWydjb21wcmVzc2lvbl9sZXZlbCddID09IDgpID8gJyBzZWxl Y3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4nPjg8L29wdGlvbj4nLm4uDQoJCQknCQkJCQk8b3B0 aW9uIHZhbHVlPSI5IicuKCgkcHJlZlsnY29tcHJlc3Npb25fbGV2ZWwnXSA9PSA5KSA/ICcg c2VsZWN0ZWQ9InNlbGVjdGVkIicgOiAnJykuJz45PC9vcHRpb24+Jy5uLg0KCQkJJwkJCQk8 L3NlbGVjdD4nLm4uDQoJCQkNCgkJCScJCQk8L3A+Jy5uLg0KCQkJDQoJCQknCQkJPHA+Jy5u Lg0KCQkJJwkJCQk8bGFiZWwgZm9yPSJyYWhfc2l0ZW1hcF96bGliX291dHB1dCI+U2V0IHps aWIgb3V0cHV0IGNvbXByZXNzaW9uIG9mZi4gSWYgc2V0IHRvIG5vLCBjb25maWd1cmF0aW9u IGlzIG5vdCBtb2RpZmllZDo8L2xhYmVsPjxiciAvPicubi4NCgkJCQ0KCQkJJwkJCQk8c2Vs ZWN0IG5hbWU9InpsaWJfb3V0cHV0IiBpZD0icmFoX3NpdGVtYXBfemxpYl9vdXRwdXQiPicu bi4NCgkJCScJCQkJCTxvcHRpb24gdmFsdWU9IjEiJy4oKCRwcmVmWyd6bGliX291dHB1dCdd ID09IDEpID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4nPlllczwvb3B0aW9uPicu bi4NCgkJCScJCQkJCTxvcHRpb24gdmFsdWU9IjAiJy4oKCRwcmVmWyd6bGliX291dHB1dCdd ID09IDApID8gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKS4nPk5vPC9vcHRpb24+Jy5u Lg0KCQkJJwkJCQk8L3NlbGVjdD4nLm4uDQoJCQkNCgkJCScJCQk8L3A+Jy5uLg0KCQkJJwkJ PC9kaXY+Jy5uLg0KCQkJDQoJCQkNCgkJCScJCTxwIHRpdGxlPSJDbGljayB0byBleHBhbmQi IGNsYXNzPSJyYWhfc2l0ZW1hcF9oZWFkaW5nIj4nLm4uDQoJCQknCQkJKyA8c3Bhbj5PdmVy cmlkZSB0aW1lc3RhbXAgZm9ybWF0PC9zcGFuPicubi4NCgkJCScJCTwvcD4nLm4uDQoJCQkN CgkJCScJCTxkaXYgY2xhc3M9InJhaF9zaXRlbWFwX21vcmUiPicubi4NCgkJCQ0KCQkJJwkJ CTxwIGNsYXNzPSJyYWhfc2l0ZW1hcF9wYXJhZ3JhcGgiPjxzdHJvbmc+VGltZXN0YW1wcy48 L3N0cm9uZz4gQ3VzdG9taXplIHRoZSBkYXRlIGZvcm1hdCB1c2VkIGluIGxhc3QgbW9kaWZp ZWQgdGltZXN0YW1wcy4gVXNlIDxhIGhyZWY9Imh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9m dW5jdGlvbi5kYXRlLnBocCI+ZGF0ZSgpPC9hPiBzdHJpbmcgdmFsdWVzLiBJZiB1bnNldCAo bGVmdCBlbXB0eSkgZGVmYXVsdCBJU08gODYwMSBkYXRlICg8Y29kZT5jPC9jb2RlPikgaXMg dXNlZC4gVXNlIHRoaXMgc2V0dGluZyBpZiB5b3Ugd2FudCB0byBoYXJkLWNvZGUvb3ZlcnJp ZGUgdGltZXN0YW1wcywgdGltZXpvbmVzIG9yIGlmIHlvdXIgc2VydmVyIGRvZXNuXCd0IHN1 cHBvcnQgPGNvZGU+YzwvY29kZT4gZm9ybWF0LjwvcD4nLm4uDQoJCQkNCgkJCScJCQk8cD4n Lm4uDQoJCQknCQkJCTxsYWJlbCBmb3I9InJhaF9zaXRlbWFwX3RpbWVzdGFtcGZvcm1hdCI+ Rm9ybWF0OjwvbGFiZWw+PGJyIC8+Jy5uLg0KCQkJJwkJCQk8aW5wdXQgdHlwZT0idGV4dCIg Y2xhc3M9ImVkaXQiIHN0eWxlPSJ3aWR0aDogOTQwcHg7IiBuYW1lPSJ0aW1lc3RhbXBmb3Jt YXQiIGlkPSJyYWhfc2l0ZW1hcF90aW1lc3RhbXBmb3JtYXQiIHZhbHVlPSInLmh0bWxzcGVj aWFsY2hhcnMoJHByZWZbJ3RpbWVzdGFtcGZvcm1hdCddKS4nIiAvPicubi4NCgkJCScJCQk8 L3A+Jy5uLg0KCQkJDQoJCQknCQk8L2Rpdj4nLm4uDQoJCQkNCgkJCScJCTxwIHRpdGxlPSJD bGljayB0byBleHBhbmQiIGNsYXNzPSJyYWhfc2l0ZW1hcF9oZWFkaW5nIj4nLm4uDQoJCQkn CQkJKyA8c3Bhbj5PdmVycmlkZSBwZXJtbGluayBmb3JtYXRzPC9zcGFuPicubi4NCgkJCScJ CTwvcD4nLm4uDQoJCQkNCgkJCScJCTxkaXYgY2xhc3M9InJhaF9zaXRlbWFwX21vcmUiPicu bi4NCgkJCQ0KCQkJJwkJCTxwIGNsYXNzPSJyYWhfc2l0ZW1hcF9wYXJhZ3JhcGgiPjxzdHJv bmc+UGVybWxpbmtzLjwvc3Ryb25nPiBXaXRoIHRoZXNlIHNldHRpbmdzIHlvdSBjYW4gbWFr ZSB0aGUgU2l0ZW1hcFwncyBVUkxzIHRvIG1hdGNoIHlvdXIgb3duIFVSTCByZXdyaXRpbmcg cnVsZXMsIG9yIHBlcm1saW5rcyBtYWRlIGJ5IGEgPGVtPmN1c3RvbSBwZXJtbGluayBydWxl PC9lbT4gcGx1Z2luLiBZb3UgY2FuIGxlYXZlIHRoZXNlIGZpZWxkcyBlbXB0eSwgaWYgdXNp bmcgVFhQXCdzIGluYnVpbGQgcGVybWxpbmsgcnVsZXMuIE5vdGUgdGhhdCB0aGVzZSBzZXR0 aW5nIGRvIG5vdCByZXdyaXRlIFRYUFwncyBwZXJtbGlua3MgZm9yIHlvdSwgdXNlIG9ubHkg Zm9yIG1hdGNoaW5nIG5vdCByZXdyaXRpbmchPC9wPicubi4NCgkJCScJCQk8cD4nLm4uDQoJ CQknCQkJCTxsYWJlbCBmb3I9InJhaF9zaXRlbWFwX3Blcm1saW5rX2NhdGVnb3J5Ij5DYXRl Z29yeSBVUkxzOjwvbGFiZWw+PGJyIC8+Jy5uLg0KCQkJJwkJCQk8aW5wdXQgdHlwZT0idGV4 dCIgY2xhc3M9ImVkaXQiIG5hbWU9InBlcm1saW5rX2NhdGVnb3J5IiBpZD0icmFoX3NpdGVt YXBfcGVybWxpbmtfY2F0ZWdvcnkiIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJHByZWZb J3Blcm1saW5rX2NhdGVnb3J5J10pLiciIC8+Jy5uLg0KCQkJJwkJCTwvcD4nLm4uDQoJCQkn CQkJPHA+Jy5uLg0KCQkJJwkJCQk8bGFiZWwgZm9yPSJyYWhfc2l0ZW1hcF9wZXJtbGlua19z ZWN0aW9uIj5TZWN0aW9uIFVSTHM6PC9sYWJlbD48YnIgLz4nLm4uDQoJCQknCQkJCTxpbnB1 dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZWRpdCIgbmFtZT0icGVybWxpbmtfc2VjdGlvbiIgaWQ9 InJhaF9zaXRlbWFwX3Blcm1saW5rX3NlY3Rpb24iIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hh cnMoJHByZWZbJ3Blcm1saW5rX3NlY3Rpb24nXSkuJyIgLz4nLm4uDQoJCQknCQkJPC9wPicu bi4NCgkJCScJCQk8cD4nLm4uDQoJCQknCQkJCTxsYWJlbCBmb3I9InJhaF9zaXRlbWFwX3Bl cm1saW5rX2FydGljbGUiPkFydGljbGUgVVJMczo8L2xhYmVsPjxiciAvPicubi4NCgkJCScJ CQkJPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJlZGl0IiBuYW1lPSJwZXJtbGlua19hcnRp Y2xlIiBpZD0icmFoX3NpdGVtYXBfcGVybWxpbmtfYXJ0aWNsZSIgdmFsdWU9IicuaHRtbHNw ZWNpYWxjaGFycygkcHJlZlsncGVybWxpbmtfYXJ0aWNsZSddKS4nIiAvPicubi4NCgkJCScJ CQk8L3A+Jy5uLg0KCQkJDQoJCQknCQk8L2Rpdj4nLm4uDQoJCQkNCgkJCScJCTxpbnB1dCB0 eXBlPSJoaWRkZW4iIG5hbWU9ImV2ZW50IiB2YWx1ZT0icmFoX3NpdGVtYXAiIC8+Jy5uLg0K CQkJJwkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3RlcCIgdmFsdWU9InJhaF9zaXRl bWFwX3NhdmUiIC8+Jy5uLg0KCQkJDQoJCQknCQk8cD48aW5wdXQgdHlwZT0ic3VibWl0IiB2 YWx1ZT0iJy5nVHh0KCdzYXZlJykuJyIgY2xhc3M9InB1Ymxpc2giIC8+PC9wPicubi4NCgkJ CQ0KCQkJJwk8L2Zvcm0+JywNCgkJCQ0KCQkJJ3JhaF9zaXRlbWFwJywNCgkJCSdNYW5hZ2Ug eW91ciBzaXRlbWFwJywNCgkJCSdTaXRlbWFwLm9yZyBTaXRlbWFwcycsDQoJCQkkbWVzc2Fn ZQ0KCQkJDQoJCSk7DQoJfQ0KDQovKioNCglQYW5lbCwgbGlzdHMgY3VzdG9tIFVSTHMNCiov DQoNCglmdW5jdGlvbiByYWhfc2l0ZW1hcF9jdXN0b21fbGlzdCgkbWVzc2FnZT0nJykgew0K DQoJCSRvdXRbXSA9IA0KCQkJJwk8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaW5kZXgu cGhwIj4nLm4uDQoJCQknCQk8dGFibGUgaWQ9Imxpc3QiIGNsYXNzPSJsaXN0IHJhaF9zaXRl bWFwX3RhYmxlIiAgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAi Picubi4NCgkJCScJCQk8dHI+Jy5uLg0KCQkJJwkJCQk8dGg+VVJMPC90aD4nLm4uDQoJCQkn CQkJCTx0aD5MYXN0TW9kPC90aD4nLm4uDQoJCQknCQkJCTx0aD5JbmNsdWRlIExhc3RNb2Q8 L3RoPicubi4NCgkJCScJCQkJPHRoPlZpZXc8L3RoPicubi4NCgkJCScJCQkJPHRoPiYjMTYw OzwvdGg+Jy5uLg0KCQkJJwkJCTwvdHI+Jy5uOw0KCQkNCgkJJHJzID0NCgkJCXNhZmVfcm93 cygNCgkJCQkndXJsLHBvc3RlZCxpbmNsdWRlJywNCgkJCQkncmFoX3NpdGVtYXAnLA0KCQkJ CSIxPTEgb3JkZXIgYnkgcG9zdGVkIGRlc2MiDQoJCQkpOw0KCQkNCgkJaWYoJHJzKSB7DQoJ CQlmb3JlYWNoKCRycyBhcyAkYSkgew0KCQkJCSR1cmkgPSByYWhfc2l0ZW1hcF91cmkoJGFb J3VybCddLDEpOw0KCQkJCSRvdXRbXSA9IA0KCQkJCQknCQkJPHRyPicubi4NCgkJCQkJJwkJ CQk8dGQ+PGEgaHJlZj0iP2V2ZW50PXJhaF9zaXRlbWFwJmFtcDtzdGVwPXJhaF9zaXRlbWFw X2N1c3RvbV9mb3JtJmFtcDtlZGl0PScudXJsZW5jb2RlKCRhWyd1cmwnXSkuJyI+Jy4kdXJp Lic8L2E+PC90ZD4nLm4uDQoJCQkJCScJCQkJPHRkPicuJGFbJ3Bvc3RlZCddLic8L3RkPicu bi4NCgkJCQkJJwkJCQk8dGQ+Jy4oKCRhWydpbmNsdWRlJ10gPT0gMSkgPyAnWWVzJyA6ICdO bycpLic8L3RkPicubi4NCgkJCQkJJwkJCQk8dGQ+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9 IicuaHRtbHNwZWNpYWxjaGFycygkdXJpKS4nIj4nLmdUeHQoJ3ZpZXcnKS4nPC9hPjwvdGQ+ Jy5uLg0KCQkJCQknCQkJCTx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNlbGVj dGVkW10iIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGFbJ3VybCddKS4nIiAvPjwvdGQ+ Jy5uLg0KCQkJCQknCQkJPC90cj4nLm47DQoJCQl9DQoJCX0gZWxzZSANCgkJCSRvdXRbXSA9 ICAnCQkJPHRyPjx0ZCBjb2xzcGFuPSI1Ij5ObyBjdXN0b20gVVJMcyBmb3VuZC48L3RkPjwv dHI+Jy5uOw0KCQkNCgkJJG91dFtdID0gIA0KCQkJJwkJPC90YWJsZT4nLm4uDQoJCQknCQk8 cCBpZD0icmFoX3NpdGVtYXBfc3RlcCI+Jy5uLg0KCQkJJwkJCTxzZWxlY3QgbmFtZT0ic3Rl cCI+Jy5uLg0KCQkJJwkJCQk8b3B0aW9uIHZhbHVlPSIiPldpdGggc2VsZWN0ZWQuLi48L29w dGlvbj4nLm4uDQoJCQknCQkJCTxvcHRpb24gdmFsdWU9InJhaF9zaXRlbWFwX2RlbGV0ZSI+ RGVsZXRlPC9vcHRpb24+Jy5uLg0KCQkJJwkJCTwvc2VsZWN0Picubi4NCgkJCScJCQk8aW5w dXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic21hbGxlcmJveCIgdmFsdWU9IkdvIiAvPicubi4N CgkJCScJCTwvcD4nLm4uDQoJCQknCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJldmVu dCIgdmFsdWU9InJhaF9zaXRlbWFwIiAvPicubi4NCgkJCScJPC9mb3JtPicubjsNCgkJDQoJ CXJhaF9zaXRlbWFwX2hlYWRlcigNCgkJCSRvdXQsDQoJCQkncmFoX3NpdGVtYXAnLA0KCQkJ J0xpc3Qgb2YgY3VzdG9tIFVSTHMnLA0KCQkJJ1NpdGVtYXAnLA0KCQkJJG1lc3NhZ2UNCgkJ KTsNCgl9DQoNCi8qKg0KCVBhbmVsIHRvIGFkZCBjdXN0b20gVVJMcw0KKi8NCg0KCWZ1bmN0 aW9uIHJhaF9zaXRlbWFwX2N1c3RvbV9mb3JtKCRtZXNzYWdlPScnKSB7DQoJCQ0KCQkkZWRp dCA9IGdwcygnZWRpdCcpOw0KCQkNCgkJaWYoJGVkaXQpIHsNCgkJCQ0KCQkJJHJzID0gDQoJ CQkJc2FmZV9yb3coDQoJCQkJCScqJywNCgkJCQkJJ3JhaF9zaXRlbWFwJywNCgkJCQkJInVy bD0nIi5kb1NsYXNoKCRlZGl0KS4iJyINCgkJCQkpOw0KCQkJDQoJCQlpZighJHJzKSB7DQoJ CQkJcmFoX3NpdGVtYXBfY3VzdG9tX2xpc3QoJ1NlbGVjdGlvbiBub3QgZm91bmQuJyk7DQoJ CQkJcmV0dXJuOw0KCQkJfQ0KCQkJDQoJCQlleHRyYWN0KCRycyk7DQoJCQ0KCQl9DQoJCQ0K CQlpZighaXNzZXQoJHJzKSkNCgkJCWV4dHJhY3QoZ3BzYShhcnJheSgNCgkJCQkndXJsJywn aW5jbHVkZScsJ3Bvc3RlZCcNCgkJCSkpKTsNCgkJDQoJCXJhaF9zaXRlbWFwX2hlYWRlcigN CgkJCScJPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249ImluZGV4LnBocCI+Jy5uLg0KCQkJ JwkJPHA+Jy5uLg0KCQkJJwkJCTxsYWJlbCBmb3I9InJhaF9zaXRlbWFwX3VybCI+VVJMOjwv bGFiZWw+PGJyIC8+Jy5uLg0KCQkJJwkJCTxpbnB1dCBpZD0icmFoX3NpdGVtYXBfdXJsIiBj bGFzcz0iZWRpdCIgdHlwZT0idGV4dCIgbmFtZT0idXJsIiB2YWx1ZT0iJy5odG1sc3BlY2lh bGNoYXJzKCR1cmwpLiciIC8+Jy5uLg0KCQkJJwkJPC9wPicubi4NCgkJCScJCTxwPicubi4N CgkJCScJCQk8bGFiZWwgZm9yPSJyYWhfc2l0ZW1hcF9wb3N0ZWQiPkxhc3RNb2QgKFlZWVkt bW0tZGQgSEg6TU06U1MpLiBMZWF2ZSBlbXB0eSB0byB1c2UgY3VycmVudCB0aW1lOjwvbGFi ZWw+PGJyIC8+Jy5uLg0KCQkJJwkJCTxpbnB1dCBpZD0icmFoX3NpdGVtYXBfcG9zdGVkIiBj bGFzcz0iZWRpdCIgdHlwZT0idGV4dCIgbmFtZT0icG9zdGVkIiB2YWx1ZT0iJy5odG1sc3Bl Y2lhbGNoYXJzKCRwb3N0ZWQpLiciIC8+Jy5uLg0KCQkJJwkJPC9wPicubi4NCgkJCScJCTxw Picubi4NCgkJCScJCQk8bGFiZWwgZm9yPSJyYWhfc2l0ZW1hcF9sYXN0bW9kIj5JbmNsdWRl IExhc3RNb2Q6PC9sYWJlbD48YnIgLz4nLm4uDQoJCQknCQkJPHNlbGVjdCBpZD0icmFoX3Np dGVtYXBfbGFzdG1vZCIgbmFtZT0iaW5jbHVkZSI+Jy5uLg0KCQkJJwkJCQkJPG9wdGlvbiB2 YWx1ZT0iMCInLigoJGluY2x1ZGUgPT0gMCkgPyAnIHNlbGVjdGVkPSJzZWxlY3RlZCInIDog JycpLic+Jy5nVHh0KCdubycpLicgKFJlY29tbWVuZGVkKTwvb3B0aW9uPicubi4NCgkJCScJ CQkJCTxvcHRpb24gdmFsdWU9IjEiJy4oKCRpbmNsdWRlID09IDEpID8gJyBzZWxlY3RlZD0i c2VsZWN0ZWQiJyA6ICcnKS4nPicuZ1R4dCgneWVzJykuJzwvb3B0aW9uPicubi4NCgkJCScJ CQk8L3NlbGVjdD4nLm4uDQoJCQknCQk8L3A+Jy5uLg0KCQkJJwkJPHA+PGlucHV0IHR5cGU9 InN1Ym1pdCIgdmFsdWU9IicuZ1R4dCgnc2F2ZScpLiciIGNsYXNzPSJwdWJsaXNoIiAvPjwv cD4nLm4uDQoJCQkNCgkJCSgoJGVkaXQpID8gDQoJCQkJJwkJPGlucHV0IHR5cGU9ImhpZGRl biIgbmFtZT0iZWRpdCIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkZWRpdCkuJyIgLz4n IDogJycNCgkJCSkuDQoJCQkNCgkJCScJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImV2 ZW50IiB2YWx1ZT0icmFoX3NpdGVtYXAiIC8+Jy5uLg0KCQkJJwkJPGlucHV0IHR5cGU9Imhp ZGRlbiIgbmFtZT0ic3RlcCIgdmFsdWU9InJhaF9zaXRlbWFwX2N1c3RvbV9zYXZlIiAvPicu bi4NCgkJCQ0KCQkJJwk8L2Zvcm0+Jw0KCQkJDQoJCQksJ3JhaF9zaXRlbWFwJywNCgkJCSdB ZGQgYSBuZXcgY3VzdG9tIFVSTCcsDQoJCQknU2l0ZW1hcCcsDQoJCQkkbWVzc2FnZQ0KCQkJ DQoJCSk7DQoJCQ0KCX0NCg0KLyoqDQoJU2F2ZXMgY3VzdG9tIFVSTA0KKi8NCg0KCWZ1bmN0 aW9uIHJhaF9zaXRlbWFwX2N1c3RvbV9zYXZlKCkgew0KCQlleHRyYWN0KGRvU2xhc2goZ3Bz YShhcnJheSgNCgkJCSd1cmwnLA0KCQkJJ3Bvc3RlZCcsDQoJCQknaW5jbHVkZScsDQoJCQkn cmVzZXQnLA0KCQkJJ2VkaXQnDQoJCSkpKSk7DQoJCQ0KCQlpZihlbXB0eSgkcG9zdGVkKSBv ciAkcmVzZXQgPT0gMSkNCgkJCSRwb3N0ZWQgPSAncG9zdGVkPW5vdygpJzsNCgkJZWxzZSAN CgkJCSRwb3N0ZWQgPSAicG9zdGVkPSckcG9zdGVkJyI7DQoJCQ0KCQlpZighJGVkaXQgJiYg c2FmZV9jb3VudCgncmFoX3NpdGVtYXAnLCJ1cmw9JyR1cmwnIikgIT0gMCkgew0KCQkJcmFo X3NpdGVtYXBfY3VzdG9tX2Zvcm0oJ1VSTCBhbHJlYWR5IGV4aXN0cy4nKTsNCgkJCXJldHVy bjsNCgkJfQ0KCQkNCgkJaWYoJGVkaXQgJiYgc2FmZV9jb3VudCgncmFoX3NpdGVtYXAnLCJ1 cmw9JyRlZGl0JyIpID09IDEpIHsNCgkJCQ0KCQkJaWYoJHVybCAhPSAkZWRpdCAmJiBzYWZl X2NvdW50KCdyYWhfc2l0ZW1hcCcsInVybD0nJHVybCciKSA9PSAxKSB7DQoJCQkJcmFoX3Np dGVtYXBfY3VzdG9tX2Zvcm0oJ05ldyBVUkwgYWxyZWFkeSBleGlzdHMuJyk7DQoJCQkJcmV0 dXJuOw0KCQkJfQ0KCQkJDQoJCQlzYWZlX3VwZGF0ZSgNCgkJCQkncmFoX3NpdGVtYXAnLA0K CQkJCSIkcG9zdGVkLA0KCQkJCWluY2x1ZGU9JyRpbmNsdWRlJywNCgkJCQl1cmw9JyR1cmwn IiwNCgkJCQkidXJsPSckZWRpdCciDQoJCQkpOw0KCQkJDQoJCQlyYWhfc2l0ZW1hcF9jdXN0 b21fbGlzdCgnVVJMIHVwZGF0ZWQuJyk7DQoJCQlyZXR1cm47DQoJCQkNCgkJfQ0KCQkNCgkJ c2FmZV9pbnNlcnQoDQoJCQkncmFoX3NpdGVtYXAnLA0KCQkJInVybD0nJHVybCcsDQoJCQkk cG9zdGVkLA0KCQkJaW5jbHVkZT0nJGluY2x1ZGUnIg0KCQkpOw0KCQkNCgkJcmFoX3NpdGVt YXBfY3VzdG9tX2xpc3QoJ1VSTCBhZGRlZC4nKTsNCgkJcmV0dXJuOw0KCX0NCg0KLyoqDQoJ T3V0cHV0cyB0aGUgcGFuZWwncyBDU1MgYW5kIEphdmFTY3JpcHQgdG8gcGFnZSdzIDxoZWFk PiBzZWdtZW50DQoqLw0KDQoJZnVuY3Rpb24gcmFoX3NpdGVtYXBfaGVhZCgpIHsNCgkJDQoJ CWdsb2JhbCAkZXZlbnQ7DQoJCQ0KCQlpZigkZXZlbnQgIT0gJ3JhaF9zaXRlbWFwJykNCgkJ CXJldHVybjsNCgkJDQoJCWVjaG8gPDw8RU9GDQoJCQk8c3R5bGUgdHlwZT0idGV4dC9jc3Mi Pg0KCQkJCSNyYWhfc2l0ZW1hcF9jb250YWluZXIgew0KCQkJCQl3aWR0aDogOTUwcHg7DQoJ CQkJCW1hcmdpbjogMCBhdXRvOw0KCQkJCX0NCgkJCQkjcmFoX3NpdGVtYXBfY29udGFpbmVy ICNyYWhfc2l0ZW1hcF9zdGVwIHsNCgkJCQkJdGV4dC1hbGlnbjogcmlnaHQ7DQoJCQkJCXBh ZGRpbmctdG9wOiAxMHB4Ow0KCQkJCX0NCgkJCQkjcmFoX3NpdGVtYXBfY29udGFpbmVyIC5y YWhfc2l0ZW1hcF90YWJsZSB7DQoJCQkJCXdpZHRoOiAxMDAlOw0KCQkJCX0NCgkJCQkjcmFo X3NpdGVtYXBfY29udGFpbmVyIC5yYWhfc2l0ZW1hcF9jb2x1bW4gew0KCQkJCQl3aWR0aDog MzE1cHg7DQoJCQkJCWZsb2F0OiBsZWZ0Ow0KCQkJCQlkaXNwbGF5OiBpbmxpbmU7DQoJCQkJ CXBhZGRpbmc6IDAgMCAxMHB4IDA7DQoJCQkJfQ0KCQkJCSNyYWhfc2l0ZW1hcF9jb250YWlu ZXIgLnJhaF9zaXRlbWFwX2hlYWRpbmcgew0KCQkJCQlmb250LXdlaWdodDogOTAwOw0KCQkJ CQlwYWRkaW5nOiA1cHggMDsNCgkJCQkJbWFyZ2luOiAwIDAgMTBweCAwOw0KCQkJCQlib3Jk ZXItdG9wOiAxcHggc29saWQgI2NjYzsNCgkJCQkJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlk ICNjY2M7DQoJCQkJfQ0KCQkJCSNyYWhfc2l0ZW1hcF9jb250YWluZXIgLnJhaF9zaXRlbWFw X2hlYWRpbmcgc3BhbiB7DQoJCQkJCWN1cnNvcjogcG9pbnRlcjsNCgkJCQkJY29sb3I6ICM5 NjM7DQoJCQkJfQ0KCQkJCSNyYWhfc2l0ZW1hcF9jb250YWluZXIgLnJhaF9zaXRlbWFwX2hl YWRpbmcgc3Bhbjpob3ZlciB7DQoJCQkJCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOw0K CQkJCX0NCgkJCQkjcmFoX3NpdGVtYXBfY29udGFpbmVyIC5yYWhfc2l0ZW1hcF9tb3JlIHsN CgkJCQkJb3ZlcmZsb3c6IGhpZGRlbjsNCgkJCQl9DQoJCQkJI3JhaF9zaXRlbWFwX2NvbnRh aW5lciBpbnB1dC5lZGl0IHsNCgkJCQkJd2lkdGg6IDk0MHB4Ow0KCQkJCX0NCgkJCQkjcmFo X3NpdGVtYXBfemxpYl9vdXRwdXQsDQoJCQkJI3JhaF9zaXRlbWFwX2NvbXByZXNzaW9uX2xl dmVsLA0KCQkJCSNyYWhfc2l0ZW1hcF9jb21wcmVzcywNCgkJCQkjcmFoX3NpdGVtYXBfbGFz dG1vZCB7DQoJCQkJCXdpZHRoOiA0NTBweDsNCgkJCQl9DQoJCQkJLnJhaF9zaXRlbWFwX3Bh cmFncmFwaCB7DQoJCQkJCW1hcmdpbjogMCAwIDEwcHggMDsNCgkJCQkJcGFkZGluZzogMDsN CgkJCQl9DQoJCQk8L3N0eWxlPg0KCQkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi Pg0KCQkJCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQoJCQkJCSQoJy5yYWhfc2l0 ZW1hcF9tb3JlJykuaGlkZSgpOw0KCQkJCQkkKCcucmFoX3NpdGVtYXBfaGVhZGluZycpLmNs aWNrKGZ1bmN0aW9uKCl7DQoJCQkJCQkkKHRoaXMpLm5leHQoJ2Rpdi5yYWhfc2l0ZW1hcF9t b3JlJykuc2xpZGVUb2dnbGUoKTsNCgkJCQkJfSk7DQoJCQkJfSk7DQoJCQk8L3NjcmlwdD4N CkVPRjsNCgl9DQoNCi8qKg0KCVRoZSBwYW5lbCdzIG5hdmlnYXRpb24gYmFyDQoqLw0KDQoJ ZnVuY3Rpb24gcmFoX3NpdGVtYXBfaGVhZGVyKCRjb250ZW50PScnLCR0aXRsZT0ncmFoX3Np dGVtYXAnLCRtc2c9J01hbmFnZSB5b3VyIHNpdGVtYXAnLCRwYWdldG9wPScnLCRtZXNzYWdl PScnKSB7DQoJCQ0KCQlwYWdldG9wKCRwYWdldG9wLCRtZXNzYWdlKTsNCgkJDQoJCWlmKGlz X2FycmF5KCRjb250ZW50KSkNCgkJCSRjb250ZW50ID0gaW1wbG9kZSgnJywkY29udGVudCk7 DQoJCQ0KCQllY2hvIA0KCQkJbi4NCgkJCScJPGRpdiBpZD0icmFoX3NpdGVtYXBfY29udGFp bmVyIj4nLm4uDQoJCQknCQk8aDE+PHN0cm9uZz4nLiR0aXRsZS4nPC9zdHJvbmc+IHwgJy4k bXNnLic8L2gxPicubi4NCgkJCScJCTxwIGlkPSJyYWhfc2l0ZW1hcF9uYXYiPicuDQoJCQkJ CScgJiMxODc7IDxhIGhyZWY9Ij9ldmVudD1yYWhfc2l0ZW1hcCI+UHJlZmVyZW5jZXM8L2E+ Jy4NCgkJCQkJJyAmIzE4NzsgPGEgaHJlZj0iP2V2ZW50PXJhaF9zaXRlbWFwJmFtcDtzdGVw PXJhaF9zaXRlbWFwX2N1c3RvbV9mb3JtIj5BZGQgY3VzdG9tIFVSTDwvYT4nLg0KCQkJCQkn ICYjMTg3OyA8YSBocmVmPSI/ZXZlbnQ9cmFoX3NpdGVtYXAmYW1wO3N0ZXA9cmFoX3NpdGVt YXBfY3VzdG9tX2xpc3QiPkxpc3Qgb2YgY3VzdG9tIFVSTHM8L2E+Jy4NCgkJCQkJJyAmIzE4 NzsgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9IicuaHUuJz9yYWhfc2l0ZW1hcD1zaXRlbWFw Ij5WaWV3IHRoZSBzaXRlbWFwPC9hPicuDQoJCQkJCSc8L3A+Jy5uLg0KCQkJJGNvbnRlbnQu bi4JDQoJCQknCTwvZGl2PicubjsNCgl9DQoNCi8qKg0KCUJ1aWxkcyB0aGUgcmVxdWlyZWQg aW4gYXJyYXkgZm9yIFNRTCBzdGF0ZW1lbnRzDQoqLw0KDQoJZnVuY3Rpb24gcmFoX3NpdGVt YXBfaW4oJGZpZWxkPScnLCRhcnJheT0nJywkZGVmYXVsdD0nJywkc3FsPScgbm90IGluJykg ew0KCQkNCgkJaWYoZW1wdHkoJGFycmF5KSAmJiBlbXB0eSgkZGVmYXVsdCkpDQoJCQlyZXR1 cm47DQoJCQ0KCQlpZighaXNfYXJyYXkoJGFycmF5KSkNCgkJCSRhcnJheSA9IGV4cGxvZGUo JywnLCRhcnJheSk7DQoJCQ0KCQlpZighZW1wdHkoJGRlZmF1bHQpKSB7DQoJCQkkZGVmYXVs dCA9IGV4cGxvZGUoJywnLCRkZWZhdWx0KTsNCgkJCSRhcnJheSA9IA0KCQkJCWFycmF5X21l cmdlKA0KCQkJCQkkYXJyYXksDQoJCQkJCSRkZWZhdWx0DQoJCQkJKTsNCgkJfQ0KCQkNCgkJ Zm9yZWFjaCgkYXJyYXkgYXMgJHZhbHVlKSANCgkJCSRvdXRbXSA9ICInIi5kb1NsYXNoKHRy aW0oJHZhbHVlKSkuIiciOw0KCQkNCgkJaWYoIWlzc2V0KCRvdXQpKQ0KCQkJcmV0dXJuOw0K CQ0KCQlyZXR1cm4gDQoJCQkkZmllbGQgLiAkc3FsIC4gJygnIC4gaW1wbG9kZSgnLCcsJG91 dCkgLiAnKSc7DQoJCQ0KCX0NCg0KLyoqDQoJRGVmYXVsdCBzZXR0aW5ncw0KKi8NCg0KCWZ1 bmN0aW9uIHJhaF9zaXRlbWFwX3ByZWZfZmllbGRzKCkgew0KCQlyZXR1cm4NCgkJCWFycmF5 KA0KCQkJCSdub2FydGljbGVzJyA9PiAnJywNCgkJCQknbm9zZWN0aW9ucycgPT4gJycsDQoJ CQkJJ25vY2F0ZWdvcmllcycgPT4gJycsDQoJCQkJJ2FydGljbGVjYXRlZ29yaWVzJyA9PiAn JywNCgkJCQknYXJ0aWNsZXNlY3Rpb25zJyA9PiAnJywNCgkJCQknc2VjdGlvbnMnID0+ICcn LA0KCQkJCSdjYXRlZ29yaWVzJyA9PiAnJywNCgkJCQknbm9maWxlJyA9PiAxLA0KCQkJCSdu b2ltYWdlJyA9PiAxLA0KCQkJCSdub2xpbmsnID0+IDEsDQoJCQkJJ2FydGljbGVzdGF0dXMn ID0+ICcnLA0KCQkJCSdhcnRpY2xlZnV0dXJlJyA9PiAnJywNCgkJCQknYXJ0aWNsZXBhc3Qn ID0+ICcnLA0KCQkJCSdhcnRpY2xlZXhwaXJlZCcgPT4gJycsDQoJCQkJJ3Blcm1saW5rX2Nh dGVnb3J5JyA9PiAnJywNCgkJCQkncGVybWxpbmtfc2VjdGlvbicgPT4gJycsDQoJCQkJJ3Bl cm1saW5rX2FydGljbGUnID0+ICcnLA0KCQkJCSd0aW1lc3RhbXBmb3JtYXQnID0+ICdjJywN CgkJCQknY29tcHJlc3MnID0+IDEsDQoJCQkJJ2NvbXByZXNzaW9uX2xldmVsJyA9PiA5LA0K CQkJCSd6bGliX291dHB1dCcgPT4gMA0KCQkJKTsNCgl9DQoNCi8qKg0KCVJldHVybnMgcHJl ZmVyZW5jZXMgYXMgYW4gYXJyYXkNCiovDQoNCglmdW5jdGlvbiByYWhfc2l0ZW1hcF9wcmVm cygpIHsNCgkJDQoJCSRvdXQgPSBhcnJheSgpOw0KCQkNCgkJJHJzID0gDQoJCQlzYWZlX3Jv d3MoDQoJCQkJJ25hbWUsdmFsdWUnLA0KCQkJCSdyYWhfc2l0ZW1hcF9wcmVmcycsDQoJCQkJ JzE9MScNCgkJCSk7DQoJCQ0KCQlmb3JlYWNoKCRycyBhcyAkcm93KQ0KCQkJJG91dFskcm93 WyduYW1lJ11dID0gJHJvd1sndmFsdWUnXTsNCgkJCQ0KCQlyZXR1cm4gJG91dDsNCgkJDQoJ fQ0KDQovKioNCglCdWlsZCB0aGUgY3VzdG9tIFVSTHMNCiovDQoNCglmdW5jdGlvbiByYWhf c2l0ZW1hcF91cmkoJHVyaT0nJywkZXNjYXBlPTApIHsNCgkJDQoJCWlmKA0KCQkJc3Vic3Ry KCR1cmksMCw3KSAhPSAnaHR0cDovLycgJiYgDQoJCQlzdWJzdHIoJHVyaSwwLDgpICE9ICdo dHRwczovLycgJiYNCgkJCXN1YnN0cigkdXJpLDAsNikgIT0gJ2Z0cDovLycgJiYNCgkJCXN1 YnN0cigkdXJpLDAsNykgIT0gJ2Z0cHM6Ly8nICYmIA0KCQkJc3Vic3RyKCR1cmksMCw0KSAh PSAnd3d3LicNCgkJKQ0KCQkJJHVyaSA9ICBodSAuICR1cmk7DQoJCQ0KCQllbHNlIGlmKHN1 YnN0cigkdXJpLDAsNCkgPT0gJ3d3dy4nKQ0KCQkJJHVyaSA9ICAnaHR0cDovLycgLiAkdXJp Ow0KCQkNCgkJaWYoJGVzY2FwZSA9PSAxKQ0KCQkJJHVyaSA9IGh0bWxzcGVjaWFsY2hhcnMo JHVyaSk7DQoJCQ0KCQlyZXR1cm4gJHVyaTsNCgl9DQoNCi8qKg0KCUluc3RhbGxlci4gQ3Jl YXRlcyB0YWJsZXMgYW5kIGFkZHMgdGhlIGRlZmF1bHQgcm93cw0KKi8NCg0KCWZ1bmN0aW9u IHJhaF9zaXRlbWFwX2luc3RhbGwoKSB7DQoJCXNhZmVfcXVlcnkoDQoJCQkiQ1JFQVRFIFRB QkxFIElGIE5PVCBFWElTVFMgIi5zYWZlX3BmeCgncmFoX3NpdGVtYXAnKS4iICgNCgkJCQlg dXJsYCBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsDQoJCQkJYHBvc3RlZGAgREFURVRJTUUgTk9U IE5VTEwsDQoJCQkJYGluY2x1ZGVgIElOVCgxKSBOT1QgTlVMTCwNCgkJCQlQUklNQVJZIEtF WShgdXJsYCkNCgkJCSkiDQoJCSk7DQoJCXNhZmVfcXVlcnkoDQoJCQkiQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMgIi5zYWZlX3BmeCgncmFoX3NpdGVtYXBfcHJlZnMnKS4iICgNCgkJ CQlgbmFtZWAgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLA0KCQkJCWB2YWx1ZWAgTE9OR1RFWFQg Tk9UIE5VTEwsDQoJCQkJUFJJTUFSWSBLRVkoYG5hbWVgKQ0KCQkJKSINCgkJKTsNCgkJDQoJ CWZvcmVhY2gocmFoX3NpdGVtYXBfcHJlZl9maWVsZHMoKSBhcyAka2V5ID0+ICR2YWwpIHsN CgkJCWlmKA0KCQkJCXNhZmVfY291bnQoDQoJCQkJCSdyYWhfc2l0ZW1hcF9wcmVmcycsDQoJ CQkJCSJuYW1lPSciLmRvU2xhc2goJGtleSkuIiciDQoJCQkJKSA9PSAwDQoJCQkpIHsNCgkJ CQlzYWZlX2luc2VydCgNCgkJCQkJJ3JhaF9zaXRlbWFwX3ByZWZzJywNCgkJCQkJIm5hbWU9 JyIuZG9TbGFzaCgka2V5KS4iJywgdmFsdWU9JyIuZG9TbGFzaCgkdmFsKS4iJyINCgkJCQkp Ow0KCQkJfQ0KCQl9DQoJfQ0KDQovKioNCglCdWlsZHMgdGhlIGxpc3Qgb2YgZmlsdGVycw0K Ki8NCg0KCWZ1bmN0aW9uIHJhaF9zaXRlbWFwX2xpc3RpbmcoJGxhYmVsPScnLCRmaWVsZD0n JywkdGFibGU9JycsJHdoZXJlPScnKSB7DQoJCQ0KCQkkcHJlZiA9IA0KCQkJcmFoX3NpdGVt YXBfcHJlZnMoKTsNCgkJDQoJCSRleGNsdWRlID0gZXhwbG9kZSgnLCcsJHByZWZbJGZpZWxk XSk7DQoJCQ0KCQkkcnMgPSANCgkJCXNhZmVfcm93cygNCgkJCQknbmFtZSx0aXRsZScuKCgk dGFibGUgPT0gJ3R4cF9jYXRlZ29yeScpID8gJyx0eXBlJyA6ICcnKSwNCgkJCQkkdGFibGUs DQoJCQkJIiR3aGVyZSBvcmRlciBieSAiLigoJHRhYmxlID09ICd0eHBfY2F0ZWdvcnknKSA/ ICd0eXBlIGFzYywgJyA6ICcnKS4iIG5hbWUgYXNjIg0KCQkJKTsNCgkJDQoJCSRvdXRbXSA9 IA0KCQkJJwkJCQkJPGRpdiBjbGFzcz0icmFoX3NpdGVtYXBfY29sdW1uIj4nLm4uDQoJCQkn CQkJCQkJPHN0cm9uZz4nLiRsYWJlbC4nPC9zdHJvbmc+PGJyIC8+Jy5uOw0KCQkNCgkJaWYo JHJzKXsNCgkJCWZvcmVhY2goJHJzIGFzICRhKSB7DQoJCQkJDQoJCQkJJG5hbWUgPSAkYVsn bmFtZSddOw0KCQkJCSR0aXRsZSA9ICRhWyd0aXRsZSddOw0KCQkJCQ0KCQkJCWlmKCRmaWVs ZCA9PSAnY2F0ZWdvcmllcycpIHsNCgkJCQkJJG5hbWUgPSAkYVsndHlwZSddLidffHxfJy4k YVsnbmFtZSddOw0KCQkJCQkkdGl0bGUgPSB1Y2ZpcnN0KCRhWyd0eXBlJ10pLiRhWyd0aXRs ZSddOw0KCQkJCX0NCg0KCQkJCSRvdXRbXSA9IA0KCQkJCQknCQkJCQkJPGxhYmVsPjxpbnB1 dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iJy4kZmllbGQuJ1tdIiB2YWx1ZT0iJy4kbmFtZS4n IicuKChpbl9hcnJheSgkbmFtZSwkZXhjbHVkZSkpID8gJyBjaGVja2VkPSJjaGVja2VkIicg OiAnJykuJyAvPiAnLiR0aXRsZSAuJzwvbGFiZWw+PGJyIC8+Jy5uOw0KCQkJfQ0KCQl9IGVs c2UgJG91dFtdID0gJwkJCQkJCU5vdGhpbmcgZm91bmQuJy5uOw0KCQkkb3V0W10gPSANCgkJ CScJCQkJCTwvZGl2PicubjsNCgkJcmV0dXJuIGltcGxvZGUoJycsJG91dCk7DQoJfQ0KDQov KioNCglTYXZlcyBwcmVmZXJlbmNlcw0KKi8NCg0KCWZ1bmN0aW9uIHJhaF9zaXRlbWFwX3Nh dmUoKSB7DQoJCWZvcmVhY2gocmFoX3NpdGVtYXBfcHJlZl9maWVsZHMoKSBhcyAka2V5ID0+ ICR2YWwpIHsNCgkJCSRwcyA9IHBzKCRrZXkpOw0KCQkJDQoJCQlpZihpc19hcnJheSgkcHMp KQ0KCQkJCSRwcyA9IGltcGxvZGUoJywnLCRwcyk7DQoJCQkNCgkJCXNhZmVfdXBkYXRlKA0K CQkJCSdyYWhfc2l0ZW1hcF9wcmVmcycsDQoJCQkJInZhbHVlPSciLmRvU2xhc2godHJpbSgk cHMpKS4iJyIsDQoJCQkJIm5hbWU9JyIuJGtleS4iJyINCgkJCSk7DQoJCX0NCgkJcmFoX3Np dGVtYXBfbGlzdCgnU2l0ZW1hcCBwcmVmZXJlbmNlcyBzYXZlZCcpOw0KCX0NCg0KLyoqDQoJ RGVsZXRlcyBjdXN0b20gVVJJcw0KKi8NCg0KCWZ1bmN0aW9uIHJhaF9zaXRlbWFwX2RlbGV0 ZSgpIHsNCgkJDQoJCSRzZWxlY3RlZCA9IHBzKCdzZWxlY3RlZCcpOw0KCQkNCgkJaWYoIWlz X2FycmF5KCRzZWxlY3RlZCkpIHsNCgkJCXJhaF9zaXRlbWFwX2N1c3RvbV9saXN0KCdOb3Ro aW5nIHNlbGVjdGVkJyk7DQoJCQlyZXR1cm47DQoJCX0NCgkJDQoJCWZvcmVhY2goJHNlbGVj dGVkIGFzICRuYW1lKSANCgkJCXNhZmVfZGVsZXRlKA0KCQkJCSdyYWhfc2l0ZW1hcCcsDQoJ CQkJInVybD0nIi5kb1NsYXNoKCRuYW1lKS4iJyINCgkJCSk7DQoJCQ0KCQlyYWhfc2l0ZW1h cF9jdXN0b21fbGlzdCgnU2VsZWN0aW9uIGRlbGV0ZWQnKTsNCgl9IjtzOjQ6InR5cGUiO3M6 MToiMSI7czo1OiJvcmRlciI7czoxOiI1IjtzOjM6Im1kNSI7czozMjoiNDE1NTMwMmVmNTFi ZTYyMTBlNTdiY2I3MDY4MzU4ODkiO3M6NDoibmFtZSI7czoxMToicmFoX3NpdGVtYXAiO3M6 NzoidmVyc2lvbiI7czozOiIxLjEiO30=