# smd_slimbox 0.25 # Image gallery lightbox wrapper using Christophe Beyl's Slimbox # Stef Dawson # http://stefdawson.com # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTE6InNtZF9zbGltYm94IjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjE6Imh0dHA6Ly9zdGVmZGF3c29uLmNvbSI7czo3OiJ2ZXJzaW9uIjtzOjQ6IjAuMjUiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjYyOiJJbWFnZSBnYWxsZXJ5IGxpZ2h0Ym94IHdyYXBwZXIgdXNpbmcgQ2hyaXN0b3BoZSBCZXlsJ3MgU2xpbWJveCI7czo0OiJoZWxwIjtzOjE3ODUzOiI8aDE+c21kX3NsaW1ib3g8L2gxPg0KPHAgY2xhc3M9InNtYWxsIj5bcmVxdWlyZXMgc21kX2xpYiB0byBiZSBpbnN0YWxsZWQgYW5kIGFjdGl2YXRlZF08cD4NCg0KPHA+WWVhaCwgeWVhaCA8ZW0+YW5vdGhlcjwvZW0+IGxpZ2h0Ym94LXN0eWxlIGltYWdlIGdhbGxlcnkhIEJ1dCB0aGlzIHRpbWUgdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5kaWdpdGFsaWEuYmUvc29mdHdhcmUvc2xpbWJveCI+Q2hyaXN0b3BoZSBCZXlsJ3M8L2E+IHVsdHJhLWxpZ2h0d2VpZ2h0IFNsaW1ib3ggKGRpZXQgY29rZSB2ZXJzaW9uIG9mIGxpZ2h0Ym94KSBhbmQgbW9vdG9vbHMuIEFsc28gcGxhZ2lhcmlzZXMgaWRlYXMgZnJvbSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9NTE3NiI+Um9iIFNhYmxlJ3MgcnNzX3RodW1icG9wPC9hPi4gU3VwcG9ydHMgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yMDY5MiI+TXVsdGktTGluZ3VhbCBQYWNrPC9hPiAoTUxQKSBmb3IgaW1hZ2UgY2FwdGlvbi9hbHQgYW5kIGludGVybmFsIHN0cmluZyBsb2NhbGlzYXRpb24uIE1hbnkgdGhhbmtzIHRvIHRoZSBvcmlnaW5hbCBhdXRob3JzLjwvcD4NCg0KPGgyPkluc3RhbGxhdGlvbjwvaDI+DQoNCjxwPkVuc3VyZSB0aGF0IHRoZSBjb250ZW50cyBvZiB0aGUganMgZm9sZGVyICg8Y29kZT5tb290b29scy5qczwvY29kZT4gYW5kIDxjb2RlPnNsaW1ib3guanM8L2NvZGU+KSBhbmQgdGhlIGNzcyBmb2xkZXIgKDxjb2RlPnNsaW1ib3guY3NzPC9jb2RlPiBhbmQgNCBpbWFnZXMpIGFyZSB1cGxvYWRlZCB0byB5b3VyIHNlcnZlci4gWW91IGNhbiBwdXQgdGhlIGRpcmVjdG9yaWVzIGluIHRoZSB0ZXh0cGF0dGVybiByb290IGZvbGRlciBvciBzb21ld2hlcmUgZWxzZSBvZiB5b3VyIGNob2ljZS4gSXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoZXJlIHlvdSBwdXQgdGhlbSwgeW91IGp1c3QgaGF2ZSB0byB0ZWxsIHRoZSBwbHVnaW4gd2hlcmUgaXQgaXMuPC9wPg0KDQo8cD5XaGVuIGluc3RhbGxlZCwgdGhpcyBwbHVnaW4gYWRkcyB0d28gdGFncy4gVGhlIGZpcnN0ICg8Y29kZT5zbWRfc2xpbWJveF9pbmM8L2NvZGU+KSBnb2VzIGluIHRoZSAmbHQ7aGVhZCZndDsgc2VjdGlvbiBvZiB5b3VyIHBhZ2UgYW5kIGxvYWRzIHRoZSByZXF1aXJlZCBsaWJyYXJpZXMuIFRoZSBzZWNvbmQgKDxjb2RlPnNtZF9zbGltYm94PC9jb2RlPikgaXMgdGhlIGFjdHVhbCBwbHVnaW4gdGhhdCBkaXNwbGF5cyB5b3VyIGltYWdlIGdhbGxlcnkgKG9yIGdhbGxlcmllcyBpZiB5b3UncmUgZmVlbGluZyBhZHZlbnR1cm91cykuPC9wPg0KDQo8cD5BIHF1aWNrIHdvcmQgYWJvdXQgaG93IGl0IGFsbCB3b3JrczogdGhlIHBsdWdpbiBvcHRpb25zIGdvdmVybiB3aGljaCB0aHVtYm5haWxzIHRvIHVzZSBhbmQgaG93IHRoZXkgYXJlIGRpc3BsYXllZCBvbmx5LiBPbmNlIHRoZSB0aHVtYnMgYXJlIGNsaWNrZWQsIGNvbnRyb2wgaXMgaGFuZGVkIG92ZXIgdG8gc2xpbWJveCBhbmQgbW9vdG9vbHMgdG8gZG8gdGhlIGZhbmN5IHdvcmsuIFRoZXJlZm9yZSwgaWYgeW91IHdpc2ggdG8gY29uZmlndXJlIHRoZSBsb29rIG9mIHRoZSAibGlnaHRib3giIHBhcnQsIHlvdSBuZWVkIHRvIGVkaXQgPGNvZGU+c2xpbWJveC5qczwvY29kZT4gYW5kL29yIDxjb2RlPnNsaW1ib3guY3NzPC9jb2RlPi4gTW9yZSBpbmZvIGNhbiBiZSBmb3VuZCBvbiA8YSBocmVmPSJodHRwOi8vd3d3LmRpZ2l0YWxpYS5iZS9zb2Z0d2FyZS9zbGltYm94Ij5DaHJpc3RvcGhlIEJleWwncyBwYWdlPC9hPi48L3A+DQoNCjxwPkFsc28sIGlmIHlvdSBhbHJlYWR5IHVzZSBtb290b29scyBmb3IgeW91ciBwYWdlIHlvdSBkb24ndCBuZWVkIHRvIHVwbG9hZCBpdCBhZ2Fpbi4gSnVzdCBtYWtlIHN1cmUgdGhlIHZlcnNpb24geW91IHVzZSBoYXMgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBwbHVzIHRoZSAiZngiIGFuZCAid2luZG93IiBtb2R1bGVzIGxpc3RlZCBvbiBDaHJpc3RvcGhlJ3MgcGFnZS48L3A+DQoNCjxoMj5Vc2FnZTogc21kX3NsaW1ib3hfaW5jPC9oMj4NCg0KPHA+U29tZXdoZXJlIGluIHRoZSAmbHQ7aGVhZCZndDsgb2YgdGhlIHBhZ2UgdGhhdCB5b3Ugd2FudCB5b3VyIGdhbGxlcnkgb24sIGFkZDo8L3A+DQoNCjxwPjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIGpzZGlyPSIvanMiIGNzc2Rpcj0iL2NzcyIgLyZndDs8L2NvZGU+PC9wPg0KDQo8cD5JZiB5b3UgaGF2ZSB0aGUgbGlicmFyaWVzIGluIHRoZSBqcyBhbmQgY3NzIGZvbGRlcnMgaW4geW91ciB0ZXh0cGF0dGVybiByb290IGZvbGRlciwgdGhhdCB3aWxsIGJlIGZpbmUuIElmIG5vdCwgeW91IGNhbiBjaGFuZ2Ugd2hlcmUgdGhlIHBsdWdpbiBsb29rcyBmb3IgdGhlIGxpYnJhcmllcyBieSBhZGp1c3RpbmcgdGhlIHR3byBvcHRpb25zLjwvcD4NCg0KPHA+SWYgeW91IHdhbnQgbW9yZSBjb250cm9sLCB5b3UgaGF2ZSB0d28gbW9yZSBvcHRpb25zIGF2YWlsYWJsZS4gVGhlIGZpcnN0IGlzIDxjb2RlPnNjcmlwdHM8L2NvZGU+LiBUaGlzIHRha2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdXAgdG8gMyBhcmd1bWVudHMgaW4gdGhpcyBvcmRlcjogbW9vdG9vbHNKU0xvY2F0aW9uLCBzbGltYm94SlNMb2NhdGlvbiwgc2xpbWJveENTU0xvY2F0aW9uLiBUaGUgb3JkZXIgaXMgaW1wb3J0YW50OiBtb290b29scyBtdXN0IGFwcGVhciBvbiB0aGUgcGFnZSBiZWZvcmUgc2xpbWJveC5qcyEgU28gaWYgeW91IGhhdmUgeW91ciBzY3JpcHRzIGluIGRpZmZlcmVudCBkaXJlY3RvcmllcyBvciBoYXZlIHJlbmFtZWQgdGhlIGZpbGVzLCBpbnN0ZWFkIG9mIHRoZSA8Y29kZT5jc3NkaXI8L2NvZGU+IGFuZCA8Y29kZT5qc2RpcjwvY29kZT4gb3B0aW9ucyB5b3UgY291bGQgZG86PC9wPg0KDQo8cD48Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94X2luYyBzY3JpcHRzPSIvc2NyaXB0cy9tb290b29scy5qcywgL3Nib3gvc2xpbWJveC5qcywgL3NiY3NzL3NsaW1ib3guY3NzIiAvJmd0OzwvY29kZT48L3A+DQoNCjxwPlRoZSB0aHJlZSBvcHRpb25zIGNhbiBlaXRoZXIgYmUgZGlyZWN0IGZpbGUgcGF0aHMsIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlLCBvciBmdWxsIFhIVE1MIHRhZ3MgaW5jbHVkaW5nIDxjb2RlPiZsdDtzY3JpcHQmZ3Q7PC9jb2RlPiBvciA8Y29kZT4mbHQ7bGluayZndDs8L2NvZGU+dGFncy4gWW91IGNhbiBtaXggYW5kIG1hdGNoIHRoZSBvcHRpb25zIGluIGFueSB3YXkgeW91IGxpa2UsIGFzIGxvbmcgYXMgdGhlIHRvdGFsIG51bWJlciBvZiBzY3JpcHRzIHlvdSB0ZWxsIHRoZSB0YWcgdG8gbG9hZCBkb2Vzbid0IGV4Y2VlZCAzLiBTbyBhbiBlcXVpdmFsZW50IHRvIHRoZSBhYm92ZSBpczo8L3A+DQoNCjxwPjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIHNjcmlwdHM9Ii9zY3JpcHRzL21vb3Rvb2xzLmpzLCAvc2JveC9zbGltYm94LmpzIiBjc3NkaXI9Ii9zYmNzcyIgLyZndDs8L2NvZGU+PC9wPg0KDQo8cD5JZiB5b3Ugd2lzaCB0byBsb2FkIHNvbWUgb3IgYWxsIG9mIHRoZSBzY3JpcHRzICJvdXRzaWRlIiB0aGUgc21kX3NsaW1ib3hfaW5jIGZ1bmN0aW9uIHlvdSBjYW4gdXNlIHRoZSA8Y29kZT5za2lwPC9jb2RlPiBvcHRpb24gdG8gdGVsbCBpdCBob3cgbWFueSB5b3UgaGF2ZSBsb2FkZWQuIElmLCBmb3IgZXhhbXBsZSwgeW91IGhhdmUgc3RtX2phdmFzY3JpcHQgaW5zdGFsbGVkIHlvdSBjb3VsZCBkbzo8L3A+DQoNCjxwPjxjb2RlPiZsdDt0eHA6anMgbj0ibW9vdG9vbHMiIC8mZ3Q7PC9jb2RlPjxiciAvPg0KPGNvZGU+Jmx0O3R4cDpzbWRfc2xpbWJveF9pbmMgc2tpcD0iMSIgc2NyaXB0cz0iLCAvc2JveC9zbGltYm94LmpzLCAvc2Jjc3Mvc2xpbWJveC5jc3MiIC8mZ3Q7PC9jb2RlPjwvcD4NCg0KPHA+Tm90ZSB0aGUgZW1wdHkgb3B0aW9uIGF0IHRoZSBzdGFydC4gWW91IGRvbid0IGhhdmUgdG8gZG8gdGhhdCAoYmVjYXVzZSA8Y29kZT5za2lwPC9jb2RlPiB3aWxsIGp1bXAgb3ZlciBpdCBmb3IgeW91KSBidXQgaWYgeW91IGxpa2UgdG8gbWFrZSBpdCBvYnZpb3VzLCBpdCBkb2VzIG5vIGhhcm0uIFVzaW5nIHRoZSBzb2xlIG9wdGlvbiA8Y29kZT5za2lwPSIzIjwvY29kZT4gbWVhbnMgIkkndmUgbG9hZGVkIHRoZW0gYWxsIG15c2VsZiwgSSBrbm93IHdoYXQgSSdtIGRvaW5nIiA6LSk8L3A+DQoNCjxwPk9uZSBtb3JlIHRoaW5nIHdpdGggdGhpcyBmZWF0dXJlOiBUWFAgZG9lcyBub3QgYWxsb3cgeW91IHRvIGRpcmVjdGx5IGVtYmVkIG90aGVyIHRhZ3MgYXMgYXR0cmlidXRlcyAoc28gdW5mb3J0dW5hdGVseSA8Y29kZT5zY3JpcHRzPSImbHQ7dHhwOmNzcyAvJmd0OyI8L2NvZGU+IGZhaWxzKS4gSWYgeW91IGFic29sdXRlbHkgbXVzdCBkbyBpdCwgeW91IGNhbiBjaGVhdCAoc2VlIFdldCdzIGV4Y2VsbGVudCBwb3N0IG9uIDxhIGhyZWY9Imh0dHA6Ly9hd2FzdGVvZndvcmRzLmNvbS9hcnRpY2xlL3RleHRwYXR0ZXJuLXRhZ3MtaW4tdGFncy10aGUtZ29yZGlhbi1rbm90Ij50YWdzIGluIHRhZ3M8L2E+IGZvciBtb3JlIGRldGFpbHMpIGJ5IGRyb3BwaW5nIGludG8gUEhQIGFuZCBkb2luZyBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOjwvcD4NCg0KPHA+PGNvZGU+Jmx0O3R4cDpzbWRfc2xpbWJveF9pbmMgY3NzZGlyPSIvY3NzIiBzY3JpcHRzPSIvc2NyaXB0cy9tb290b29scy5qcywgJmx0O3R4cDpwaHAmZ3Q7ZWNobyBqcyhhcnJheSggJ24nID0+ICdzbGltYm94JykpOyZsdDsvdHhwOnBocCZndDsgLyZndDs8L2NvZGU+PC9wPg0KDQo8cD5VbmZvcnR1bmF0ZWx5LCB0aGUgcGx1Z2luIGRvZXMgbm90IGNoZWNrIHRoYXQgeW91IGhhdmUgZ2l2ZW4gaXQgdGhlIGNvcnJlY3QgZmlsZSBsb2NhdGlvbnMgdG8gdmFsaWQsIHJlYWRhYmxlIGZpbGVzIHNvIGlmIHlvdSBoYXZlIHByb2JsZW1zIG1ha2luZyBpdCB3b3JrLCBjaGVjayB0aGUgc291cmNlIGNvZGUgb2YgdGhlIHBhZ2UgdG8gc2VlIGlmIHlvdSdyZSBsb2FkaW5nIHdoYXQgeW91IHRoaW5rIHlvdSdyZSBsb2FkaW5nIGZyb20gdGhlIGNvcnJlY3QgcGxhY2VzITwvcD4NCg0KPHA+SWYgeW91IGFyZSB1c2luZyBSU1MgZmVlZHMgb3IganVzdCBkb24ndCB3YW50IHRvIHVzZSBzbWRfc2xpbWJveF9pbmMsIHlvdSBjYW4gdHVybiBpdCBvZmYuIEp1c3QgYWRkIGxpYmNoZWNrPSIwIiB0byB0aGUgc21kX3NsaW1ib3ggdGFnLiBTZWUgdGhlIG5leHQgc2VjdGlvbi48L3A+DQoNCjxoMj5Vc2FnZTogc21kX3NsaW1ib3g8L2gyPg0KDQo8cD5PbmNlIHRoZSBzY3JpcHRzIGFyZSBsb2FkZWQsIHlvdSBhcmUgZnJlZSB0byB1c2UgPGNvZGU+Jmx0O3R4cDpzbWRfc2xpbWJveCAvJmd0OzwvY29kZT4gdG8gZGlzcGxheSBhbiBpbWFnZSBnYWxsZXJ5LiBXaXRob3V0IGFueSBvcHRpb25zIGl0IGRpc3BsYXlzIGV2ZXJ5IGltYWdlIGluIHlvdXIgZW50aXJlIGNvbGxlY3Rpb24gYW5kIHdvbid0IGxvb2sgdmVyeSBwcmV0dHkgKHRob3VnaCB5b3UgY2FuIGhlbHAgYSBiaXQgYnkgc3RhcnRpbmcgd2l0aCB0aGUgPGEgaHJlZj0iI1N0eWxpbmciPmV4YW1wbGUgQ1NTPC9hPiBnaXZlbiBsYXRlcikuIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0YW1lIHRoZSBwbHVnaW4gYSBsaXR0bGU6PC9wPg0KDQo8cD4NCjx1bD4NCjxsaT48Yj5jYXRlZ29yeTwvYj48YnIgLz5jb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpbWFnZSBjYXRlZ29yeSBuYW1lcyB0byBzaG93Lg0KPGJyIC8+VXNpbmcgIj9jIiBhcyBvbmUgb2YgdGhlIG9wdGlvbnMgdXNlcyB0aGUgY3VycmVudCBnbG9iYWwgY2F0ZWdvcnkgYXMgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgY2F0ZWdvcnkuDQo8YnIgLz5Vc2luZyAiIWMiIHVzZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGN1cnJlbnQgZ2xvYmFsIGNhdGVnb3J5Lg0KPGJyIC8+VXNpbmcgIj9zIiBhcyBvbmUgb2YgdGhlIG9wdGlvbnMgdXNlcyB0aGUgY3VycmVudCBzZWN0aW9uIGFzIHRoZSBuYW1lIG9mIGFuIGltYWdlIGNhdGVnb3J5Lg0KPGJyIC8+VXNpbmcgIiFzIiB1c2VzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjdXJyZW50IHNlY3Rpb24uDQo8YnIgLz5Vc2luZyAiP3QiIGFzIG9uZSBvZiB0aGUgb3B0aW9ucyB1c2VzIHRoZSBjdXJyZW50IGFydGljbGUncyB1cmw9dGl0bGUgYXMgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgY2F0ZWdvcnkuDQo8YnIgLz5Vc2luZyAiIXQiIHVzZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGN1cnJlbnQgYXJ0aWNsZSdzIHVybD10aXRsZS4NCjxiciAvPlRvIG1ha2UgYSBwZXItYXJ0aWNsZSBpbWFnZSBnYWxsZXJ5LCB1c2UgIj9pZCIgdG8gdGFrZSB0aGUgY3VycmVudCBhcnRpY2xlIElEOiBpdCBtYWtlcyB1cCBhIGNhdGVnb3J5IG5hbWUgdXNpbmcgdGhlIDxjb2RlPmNhdGxhYmVsPC9jb2RlPiBvcHRpb24gYW5kIHRoZSBJRCBmaWVsZC4gQnkgZGVmYXVsdCB0aGlzIHdpbGwgYmUgImFydGljbGUtSUQiLiBZb3UgbWF5IG5lZ2F0ZSB0aGUgYXJ0aWNsZSBJRCBieSB1c2luZyAiIWlkIi4NCjxiciAvPllvdSBjYW4gYWxzbyB1c2UgIj9maWVsZG5hbWUiIHdoaWNoIHdpbGwgcGljayB1cCBjYXRlZ29yaWVzIGZyb20gdGhlIGdpdmVuIGZpZWxkbmFtZSBvZiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBhcnRpY2xlLiBEZXNpZ25lZCBwcmltYXJpbHkgZm9yIHVzZSB3aXRoIGN1c3RvbSBmaWVsZHMgKGUuZy4gP2N1c3RvbTEpLCBpdCBjb3VsZCBhbHNvIGJlIGFueSBvdGhlciBmaWVsZCAob3IgZmllbGRzKSBmcm9tIHlvdXIgYXJ0aWNsZXMgKGUuZy4gP2V4Y2VycHQgb3IgP2NhdGVnb3J5MSBvciA/a2V5d29yZHMgb3IgP2F1dGhvcmlkLCBldGMuKSBUaGUgc2t5J3MgdGhlIGxpbWl0IGJlY2F1c2UgdGhvc2UgZmllbGRzIGNvdWxkIGNvbnRhaW4gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yaWVzLi4uIGJlIHdhcm5lZDogaWYgeW91IHVzZSA/Ym9keSBvciBzb21ldGhpbmcgZXF1YWxseSBvdXRyYWdlb3VzLCBjaGFuY2VzIGFyZSB0aGUgcGx1Z2luIHdpbGwgZXhwbG9kZS4NCjxiciAvPlRvIG5lZ2F0ZSB0aGUgY2F0ZWdvcnkgc2VsZWN0aW9uLCB1c2UgIiFjYXRlZ29yeV9vcl9maWVsZF9uYW1lIi4gSWYgeW91IGxpc3Qgc3BlY2lmaWMgaW1hZ2UgY2F0ZWdvcmllcyAoZS5nLiAhbGFuZHNjYXBlLCAhYmlyZHMpIHRob3NlIGNhdGVnb3JpZXMgd2lsbCBiZSBleGNsdWRlZC4gSWYgeW91IHNwZWNpZnkgYSBmaWVsZCBuYW1lIHN1Y2ggYXMgIWtleXdvcmRzIG9yICFjdXN0b20xLCB0aGUgY29udGVudHMgb2YgdGhhdCBmaWVsZCB3aWxsIGJlIHJlYWQgYW5kIHRoZSBsaXN0IG9mIGltYWdlIGNhdGVnb3JpZXMgZm91bmQgdGhlcmUgd2lsbCBiZSBleGNsdWRlZC4gTm90ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGEgZmllbGQgbmFtZSBhbmQgdGhhdCBmaWVsZCBpbiB0aGUgYXJ0aWNsZSBpcyBlbXB0eSwgdGhlIG5hbWUgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdhcyBhbiBpbWFnZSBjYXRlZ29yeS4gQWxzbyBub3RlIHRoYXQsIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIHlvdSBsaXN0IHRoZW0sIGFsbCAncG9zaXRpdmVzJyB3aWxsIGJlIHByb2Nlc3NlZCBmaXJzdCwgdGhlbiBhbnkgZXhjbHVzaW9ucyBhcHBsaWVkLjwvbGk+DQo8bGk+PGI+c3ViY2F0cz0iMSI8L2I+PGJyIC8+dG8gYXV0b21hdGljYWxseSBpbmNsdWRlIGFsbCBzdWItY2F0ZWdvcmllcyBvZiB0aGUgY2hvc2VuIGltYWdlIGNhdGVnb3JpZXM8L2xpPg0KPGxpPjxiPmNhdGxhYmVsPC9iPjxiciAvPnRoZSBsYWJlbCB1c2VkIGluIGZyb250IG9mIHRoZSBjYXRlZ29yeSBpZiB0aGUgIj9pZCIgb3IgIiFpZCIgb3B0aW9uIGlzIHVzZWQ7IGRlZmF1bHQ6ICJhcnRpY2xlLSI8L2xpPg0KPGxpPjxiPmltYWdlaWQ8L2I+PGJyIC8+Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgSURzIHRvIHNob3cuIFRoZXNlIGFyZSBhZGRlZCB0byBhbnkgaW1hZ2VzIGZyb20gdGhlIDxjb2RlPmNhdGVnb3J5PC9jb2RlPiBvcHRpb24gQkVGT1JFIGFueSBleGNsdXNpb25zIGFyZSBhcHBsaWVkLg0KPGJyIC8+QXMgd2l0aCB0aGUgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IG9wdGlvbiwgeW91IGNhbiBhbHNvIHVzZSAiP2lkIiBhbmQgIj9maWVsZG5hbWUiIHdoaWNoIHdpbGwgcGljayB1cCBpbWFnZSBJRHMgZnJvbSB0aGUgZ2l2ZW4gZmllbGRuYW1lIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFydGljbGUuIEludGVyZXN0aW5nIGlmIHlvdSBjaG9vc2UgP2FydGljbGVfaW1hZ2UgYmVjYXVzZSB5b3UgY2FuIG1ha2UgeW91ciBhcnRpY2xlIGltYWdlIHZpZXdhYmxlIGluIGEgbGlnaHRib3ghDQo8YnIgLz5UaGlzIG9wdGlvbiBhbHNvIHN1cHBvcnRzIGlkIGFuZCBmaWVsZCBuZWdhdGlvbiB1c2luZyB0aGUgc2FtZSB0ZXJtaW5vbG9neSBhcyB0aGUgPGNvZGU+Y2F0ZWdvcnk8L2NvZGU+IG9wdGlvbi4NCjwvbGk+DQo8bGk+PGI+bGltaXQ8L2I+PGJyIC8+MCAob3Igb21pdHRlZCk9ZXNzZW50aWFsbHkgdW5saW1pdGVkOyBvciB0aGUgbnVtYmVyIG9mIGltYWdlIHRodW1ibmFpbHMgdG8gc2hvdyBwZXIgcGFnZTwvbGk+DQo8bGk+PGI+bWF4bGltaXQ8L2I+PGJyIC8+MCAob3Igb21pdHRlZCk9ZXNzZW50aWFsbHkgdW5saW1pdGVkOyBvciB0aGUgYWJzb2x1dGUgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzIHRvIHB1bGwgZnJvbSB0aGUgZGF0YWJhc2U8L2xpPg0KPGxpPjxiPm9yZGVyYnk8L2I+PGJyIC8+Y29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygd2F5cyB0byBvcmRlciB0aGUgcmVzdWx0cy4gQ2hvb3NlIGZyb206IGNhdGVnb3J5ICh0aGUgZGVmYXVsdCksIG5hbWUsIGlkLCBkYXRlLCBhbHQsIGNhcHRpb24sIGF1dGhvciwgZXh0LCB3aWR0aCwgaGVpZ2h0IG9yIHJhbmRvbS4gWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc29ydCBvcmRlciBieSBhZGRpbmcgOmFzYyBvciA6ZGVzYyB0byBhbnkgdmFsdWUgKGUuZyBjYXRlZ29yeSwgZGF0ZTpkZXNjIHdvdWxkIHNvcnQgYnkgY2F0ZWdvcnkgZmlyc3QsIHRoZW4gZGVzY2VuZGluZyBkYXRlKS4gQSBzcGVjaWFsLCBvdmVycmlkaW5nLCBvcHRpb24gJ2ZpeGVkJyBhbGxvd3MgdGh1bWJzIHRvIGJlIG91dHB1dCBpbiB0aGUgb3JkZXIgZ2l2ZW4gaW4gdGhlIGltYWdlaWQgdGFnLg0KPGJyIC8+Tm90ZSB0aGF0IHJhbmRvbSBhY3RzIHNsaWdodGx5IGRpZmZlcmVudGx5LiBJZiBpdCBhcHBlYXJzIGFzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LCByYW5kb20gaW1hZ2VzIHdpbGwgYmUgcHVsbGVkIGZyb20gdGhlIGRhdGFiYXNlIGFuZCB0aGV5IHdpbGwgdGhlbiBiZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBvcHRpb25zIGxpc3RlZCBhZnRlciBpdC4gSWYgaXQgYXBwZWFycyBhbnl3aGVyZSBlbHNlIGluIHRoZSBsaXN0LCBhbnkgc29ydCBpdGVtcyBiZWZvcmUgaXQgd2lsbCBkZXRlcm1pbmUgdGhlIG9yZGVyIG9mIGRhdGEgcHVsbGVkIGZyb20gdGhlIGRhdGFiYXNlLCBhbmQgdGhlIHJlc3VsdHMgd2lsbCB0aGVuIGJlIG9yZGVyZWQgcmFuZG9tbHkgKGluIHRoYXQgY2FzZSwgYW55IGl0ZW1zICBsaXN0ZWQgYWZ0ZXIgJ3JhbmRvbScgd2lsbCBiZSBpZ25vcmVkLiAnZml4ZWQnIGlzIHN0aWxsIGhvbm91cmVkLCBob3dldmVyKS4gU2VlIHRoZSBleGFtcGxlcyBmb3IgbW9yZSBvbiB0aGlzIGZlYXR1cmUuPC9saT4NCjxsaT48Yj5ncm91cG5hbWU8L2I+PGJyIC8+dGhlIG5hbWUgdG8gYXBwZW5kIHRvIHRoZSBbcmVsXSBhcmd1bWVudCBpbiBvcmRlciB0byBsb2dpY2FsbHkgZ3JvdXAgaW1hZ2VzLiAiP2MiIHVzZXMgdGhlIGltYWdlIGNhdGVnb3J5LCAiP2lkIiB1c2VzIHRoZSBpbWFnZSBJRCB0byBtYWtlIGVhY2ggaW1hZ2UgYSBzZXBhcmF0ZSBlbnRpdHkuIFlvdSBjYW4gYWxzbyB1c2UgP2F1dGhvciwgP2RhdGUsID9uYW1lLCA/ZXh0IChpLmUuIGZpbGUgZXh0ZW5zaW9uKSwgP2FsdCwgP2NhcHRpb24sID93aWR0aCBvciA/aGVpZ2h0IGZvciB2YXJ5aW5nIGVmZmVjdHMuIE9yIHRyeSAiP2ZpZWxkbmFtZSIgdG8gcHVsbCB0aGUgZ3JvdXBuYW1lIGZyb20gdGhlIGdpdmVuIGZpZWxkIGluIHRoZSBjdXJyZW50IGFydGljbGUuIE1heSBub3QgYmUgb2YgbXVjaCB1c2UgYXQgdGhlIG1vbWVudCBidXQgd2lsbCBjb21lIGludG8gaXRzIG93biBzb29uLiBTZWUgdGhlIDxhIGhyZWY9IiNFeGFtcGxlcyI+ZXhhbXBsZXM8L2E+IGFuZCB0aGUgU2xpbWJveCBkb2N1bWVudGF0aW9uIGZvciBtb3JlIG9uIHRoaXMgZmVhdHVyZS4gRGVmYXVsdDogInNtZCI8L2xpPg0KPGxpPjxiPnNob3djYXB0aW9uPC9iPjxiciAvPjE9eWVzOyAwPW5vOyB0byBkaXNwbGF5IHRoZSBpbWFnZSdzIGNhcHRpb24gd2l0aCB0aGUgaW1hZ2UuIE9mZiBieSBkZWZhdWx0PC9saT4NCjxsaT48Yj5zaG93YWx0PC9iPjxiciAvPjE9eWVzOyAwPW5vOyB0byBkaXNwbGF5IHRoZSBpbWFnZSdzIGFsdCB0YWcgd2l0aCB0aGUgaW1hZ2UuIE9mZiBieSBkZWZhdWx0PC9saT4NCjxsaT48Yj50ZXh0cG9zPC9iPjxiciAvPnBvc2l0aW9uIG9mIHRoZSBhbHQvY2FwdGlvbiBpbmZvcm1hdGlvbi4gQ2hvb3NlIGZyb20gb25lIG9mOg0KPHVsPg0KPGxpPmFib3ZlOiBhYm92ZSB0aGUgdGh1bWJuYWlsLCBub3QgY2xpY2thYmxlPC9saT4NCjxsaT5iZWxvdzogYmVsb3cgdGhlIHRodW1ibmFpbCwgbm90IGNsaWNrYWJsZSAoZGVmYXVsdCk8L2xpPg0KPGxpPmJlZm9yZTogaW1tZWRpYXRlbHkgYWJvdmUgdGhlIHRodW1ibmFpbCwgY2xpY2thYmxlIGFzIHBhcnQgb2YgdGhlIGxpbms8L2xpPg0KPGxpPmFmdGVyOiBpbW1lZGlhdGVseSBiZWxvdyB0aGUgdGh1bWJuYWlsLCBjbGlja2FibGUgYXMgcGFydCBvZiB0aGUgbGluazwvbGk+DQo8L3VsPg0KPC9saT4NCjxsaT48Yj5zaG93cGFnZWxpbmtzPC9iPjxiciAvPjE9eWVzOyAwPW5vOyB0byBkaXNwbGF5IGNsaWNrYWJsZSBuZXh0L3ByZXZpb3VzIGxpbmtzLiBPbiBieSBkZWZhdWx0IChpZiBsaW1pdCBpcyBncmVhdGVyIHRoYW4gMCk8L2xpPg0KPGxpPjxiPnByZXZsYWJlbDwvYj48YnIgLz5MYWJlbCBmb3IgdGhlICdwcmV2aW91cyBwYWdlJyBvZiBwaWN0dXJlcyB3aGVuIHVzaW5nIHNob3dwYWdlbGlua3MuIERlZmF1bHQ6ICJQcmV2IjwvbGk+DQo8bGk+PGI+bmV4dGxhYmVsPC9iPjxiciAvPkxhYmVsIGZvciB0aGUgJ25leHQgcGFnZScgb2YgcGljdHVyZXMgd2hlbiB1c2luZyBzaG93cGFnZWxpbmtzLiBEZWZhdWx0OiAiTmV4dCI8L2xpPg0KPGxpPjxiPndyYXB0YWc8L2I+PGJyIC8+VGFnIHRvIHdyYXAgZWFjaCAnY2VsbCcgd2l0aC4gRG8gbm90IHNwZWNpZnkgdGhlICZsdDsgb3IgJmd0OyBjaGFyYWN0ZXJzLiBGb3IgYSB2YWxpZCBwYWdlLCB0aGUgb25seSB1c2VmdWwgb3B0aW9ucyBhcmUgImRpdiIsICJsaSIgb3IgInAiLiBEZWZhdWx0OiBlbXB0eSAoaS5lLiBubyB0YWcpPC9saT4NCjxsaT48Yj5jZWxsY2xhc3M8L2I+PGJyIC8+Q1NTIGNsYXNzIGZvciBlYWNoICdjZWxsJyB0aGF0IGRpc3BsYXlzIGEgdGh1bWJuYWlsLiBEZWZhdWx0OiBlbXB0eSAoaS5lLiBubyBjbGFzcyk8L2xpPg0KPGxpPjxiPmNhcHRpb25jbGFzczwvYj48YnIgLz5DU1MgY2xhc3MgZm9yIHRoZSBjYXB0aW9uIHRleHQuIERlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIGNsYXNzKTwvbGk+DQo8bGk+PGI+YWx0Y2xhc3M8L2I+PGJyIC8+Q1NTIGNsYXNzIGZvciB0aGUgYWx0IHRleHQuIERlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIGNsYXNzKTwvbGk+DQo8bGk+PGI+bmF2Y2xhc3M8L2I+PGJyIC8+Q1NTIGNsYXNzIGZvciB0aGUgbmV4dC9wcmV2IGNvbnRhaW5lci4gRGVmYXVsdDogZW1wdHkgKGkuZS4gbm8gY2xhc3MpPC9saT4NCjxsaT48Yj5wcmV2Y2xhc3M8L2I+PGJyIC8+Q1NTIGNsYXNzIGZvciB0aGUgJ3ByZXYnIGxpbmsuIERlZmF1bHQ6IHNtZF9zbGltYm94X3ByZXY8L2xpPg0KPGxpPjxiPm5leHRjbGFzczwvYj48YnIgLz5DU1MgY2xhc3MgZm9yIHRoZSAnbmV4dCcgbGluay4gRGVmYXVsdDogc21kX3NsaW1ib3hfbmV4dDwvbGk+DQo8bGk+PGI+bGliY2hlY2s8L2I+PGJyIC8+c2V0IHRoaXMgdG8gMCB0byBieXBhc3MgdGhlIGxpYnJhcnkgY2hlY2suIFVzZWZ1bCBpZiB5b3Ugd2FudCB0aGUgdGh1bWJzIHRvIGJlIGluY2x1ZGVkIGluIGFuIFJTUyBmZWVkIHdpdGhvdXQgdGhlIHBsdWdpbiBjb21wbGFpbmluZyB0aGUgbGlicmFyaWVzIGFyZSBtaXNzaW5nLiBEZWZhdWx0OiAxIChvbik8L2xpPg0KPC91bD4NCjwvcD4NCg0KPGgyPjxhIG5hbWU9IkV4YW1wbGVzIj48L2E+RXhhbXBsZXM8L2gyPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94IGNhdGVnb3J5PSJsYW5kc2NhcGUiIGxpbWl0PSIxMCIgLyZndDs8L2NvZGU+DQo8cD5TaG93IGFsbCBpbWFnZXMgaW4gdGhlIGxhbmRzY2FwZSBjYXRlZ29yeSwgdGVuIGF0IGEgdGltZS48L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9ImRvZ3MsIGJpcmRzIiBsaW1pdD0iOSIgc2hvd2NhcHRpb25zPSIxIiB0ZXh0cG9zPSJhZnRlciIgd3JhcHRhZz0ibGkiIGNlbGxjbGFzcz0iY2VsbCIgLyZndDs8L2NvZGU+DQo8cD5TaG93IGFsbCBpbWFnZXMgaW4gdGhlIGRvZ3MgYW5kIGJpcmRzIGNhdGVnb3JpZXMsIDkgcGVyIHBhZ2UuIEFkZCB0aGUgY2FwdGlvbnMgdW5kZXIgdGhlIHRodW1ibmFpbHMgYW5kIG1ha2UgdGhlbSBjbGlja2FibGUgdG9vLiBXcmFwIGVhY2ggaW1hZ2UgaW4gYSA8Y29kZT5saTwvY29kZT4gdGFnIGFuZCBnaXZlIGVhY2ggYSBjbGFzcyBvZiAnY2VsbCcgKGltcGxpZXMgeW91IG11c3QgbWFudWFsbHkgYWRkIGEgY29ycmVzcG9uZGluZyA8Y29kZT4mbHQ7dWwmZ3Q7PC9jb2RlPiB0YWcgYXJvdW5kIHRoZSBwbHVnaW4gaW4gb3JkZXIgdG8gbWFpbnRhaW4gcGFnZSB2YWxpZGl0eSkuPC9wPg0KDQo8cD5JZiB5b3UgYWRkZWQgb3JkZXJieT0iZGF0ZTpkZXNjLCByYW5kb20iIHRvIHRoZSBhYm92ZSB0YWcsIHlvdSB3b3VsZCBnZXQgdGhlIG1vc3QgcmVjZW50IDkgaW1hZ2VzIG9uIHRoZSBmaXJzdCBwYWdlLCBidXQgc2hvd24gaW4gYSByYW5kb20gb3JkZXIuIFRoZSBuZXh0IHBhZ2Ugd291bGQgc2hvdyB0aGUgbmV4dCBtb3N0LXJlY2VudCA5IGltYWdlcywgYWdhaW4gc29ydGVkIHJhbmRvbWx5IHdpdGhpbiB0aGVtc2VsdmVzLjwvcD4NCg0KPHA+U3dpdGNoaW5nIHRoZSBzb3J0IHRvOiBvcmRlcmJ5PSJyYW5kb20sIGRhdGU6ZGVzYyIgd291bGQgY2hhbmdlIHRoZSBvdXRwdXQuIFlvdSB3b3VsZCB0aGVuIGdldCA5IHJhbmRvbSBpbWFnZXMgb24gdGhlIGZpcnN0IHBhZ2UsIHdpdGggdGhlIG1vc3QgcmVjZW50IG9uZXMgb2YgdGhlIGdyb3VwIHNob3duIGZpcnN0LiBDbGlja2luZyAnTmV4dCcgd291bGQgc2hvdyBhbm90aGVyIDkgcmFuZG9tIGltYWdlcyAoc29tZSBtYXkgYmUgdGhlIHNhbWUgYXMgcGFnZSAxKSBzb3J0ZWQgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBkYXRlLiBGb3IgdGhpcyByZWFzb24gKHVubGVzcyB5b3UncmUgc2ltcGx5IHVzaW5nIHRoZSBwbHVnaW4gdG8gcHJldHR5IHVwIGEgcGFnZSB3aXRoIHJhbmRvbSBpbWFnZXMpIGlmIHlvdSdyZSB1c2luZyByYW5kb20gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG9yZGVyYnksIHlvdSBwcm9iYWJseSB3YW50IHRvIGRpc2FibGUgcGFnaW5nIGJ5IHNldHRpbmcgc2hvd3BhZ2VsaW5rcz0iMCIuPC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94IGltYWdlaWQ9IjQ4LCAyNSwgNCIgY2F0ZWdvcnk9ImRvZ3MsID9jdXN0b20xIiBzdWJjYXRzPSIxIiBsaW1pdD0iMjAiIHByZXZsYWJlbD0iQmFjayIgb3JkZXJieT0ibmFtZTpkZXNjLCBjYXRlZ29yeSIgLyZndDs8L2NvZGU+DQo8cD5TaG93IGltYWdlcyB3aXRoIElEcyA0OCwgMjUgYW5kIDQgYXMgd2VsbCBhcyBhbGwgaW1hZ2VzIGluIHRoZSBkb2dzIGNhdGVnb3J5IGFuZCBhbHNvIHB1bGwgdGhlIGltYWdlIGNhdGVnb3J5IG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZSdzIGN1c3RvbTEgZmllbGQgKGlmIGN1c3RvbTEgaGVsZCAiYmlyZHMsIGxhbmRzY2FwZXMiICh3aXRob3V0IHRoZSBxdW90ZXMpIHlvdSdkIGdldCBwaWN0dXJlcyBmcm9tIGFsbCB0aHJlZSBjYXRlZ29yaWVzIGFuZCBhbGwgdGhlaXIgc3ViY2F0ZWdvcmllcykuIExpbWl0IHRoZSBudW1iZXIgcGVyIHBhZ2UgdG8gMjAsIGNoYW5nZSB0aGUgcHJldmlvdXMgcGFnZSBsYWJlbCB0byAiQmFjayIgYW5kIHNvcnQgdGhlIGltYWdlcyBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIG5hbWUsIHRoZW4gY2F0ZWdvcnkuPC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9zbGltYm94IGNhdGVnb3J5PSJzdGF0aWMsID9pZCIgaW1hZ2VpZD0iIWFydGljbGVfaW1hZ2UiIGxpbWl0PSI2IiBncm91cG5hbWU9Ij9jIiBzaG93cGFnZWxpbmtzPSIwIiAvJmd0OzwvY29kZT4NCjxwPklmIHRoZSBwZXJzb24gaXMgY3VycmVudGx5IHZpZXdpbmcgYXJ0aWNsZSBJRCA2Nywgc2hvdyBhbGwgaW1hZ2VzIGZyb20gdGhlICdzdGF0aWMnIGNhdGVnb3J5IGFuZCB0aGUgJ2FydGljbGUtNjcnIGNhdGVnb3J5LiBJZiBhbnkgaW1hZ2UgaW4gZWl0aGVyIG9mIHRob3NlIGNhdGVnb3JpZXMgaXMgZm91bmQgdG8gaGF2ZSBhbiBJRCBvZiB0aGUgYXJ0aWNsZSBpbWFnZSBmcm9tIHRoZSBjdXJyZW50IGFydGljbGUsIHRoYXQgcGljdHVyZSB3aWxsIGJlIGlnbm9yZWQuIE9ubHkgc2hvdyA2IHBpY3R1cmVzIGFuZCBkb24ndCBzaG93IHRoZSBuZXh0L3ByZXYgbGlua3Mgb24gdGhlIHBhZ2UuIEFsc28sIGdyb3VwIHRoZSBTbGltYm94IHBpY3R1cmVzIGJ5IGltYWdlIGNhdGVnb3J5LiBUaGlzIG1lYW5zIHRoYXQgaWYgc29tZW9uZSBjbGlja3Mgb24gYSBwaWN0dXJlIGZyb20gdGhlICJzdGF0aWMiIGNhdGVnb3J5LCB0aGUgU2xpbWJveCBuZXh0L3ByZXYgbGlua3Mgb25seSBuYXZpZ2F0ZSBiZXR3ZWVuIHRob3NlIHBpY3R1cmVzLiBUaGUgdXNlciB3aWxsIGhhdmUgdG8gY2xvc2UgdGhlIGxpZ2h0Ym94IGFuZCBjbGljayBhIHBpY3R1cmUgaW4gdGhlIGFydGljbGUtNjcgY2F0ZWdvcnkgdG8gc2hvdyBwaWN0dXJlcyBmcm9tIHRoZSBvdGhlciBncm91cC48L3A+DQo8cD5PbiB0aGUgc3VyZmFjZSB0aGUgZ3JvdXBuYW1lIG9wdGlvbiBtYXkgc2VlbSBhIGxpdHRsZSBzdXBlcmZsdW91cyBidXQgaXQgY2FuIGJlIHVzZWZ1bCB0byBhbGxvdyBwZW9wbGUgdG8gb25seSBmbGljayB0aHJvdWdoIGEgc3Vic2V0IG9mIHRoZSBwaWN0dXJlcyBvbiBlYWNoIHBhZ2UsIGJhc2VkIG9uIHRoZWlyIGNhdGVnb3J5LCBmaWxlIG5hbWUsIGF1dGhvciwgd2lkdGgvaGVpZ2h0LCBhbHQvY2FwdGlvbiwgZXZlbiBJRCBpZiB5b3Ugd2FudCB0aGVtIHRvIGFsbCBiZSB1bmlxdWUgZW50aXRpZXMuIFlvdSBjYW4gYWxzbyB1c2UgYSBmaXhlZCB2YWx1ZSByZWFkIGZyb20gYSBmaWVsZCBpbiB0aGUgY3VycmVudCBhcnRpY2xlLCBlLmcuIGdyb3VwbmFtZT0iP2N1c3RvbTIiLiBVc2VmdWwgd2hlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggb3JkZXJieS48L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3NsaW1ib3ggY2F0ZWdvcnk9Ij9jLCA/Y3VzdG9tMSwgIWN1c3RvbTIsICFzdGF0aWMiIGxpbWl0PSI4IiBtYXhsaW1pdD0iMzIiIC8mZ3Q7PC9jb2RlPg0KPHA+QSBiaXQgb2YgYSBjb250cml2ZWQgZXhhbXBsZSB0aGF0IHNob3dzIGhvdyBjcmF6eSB5b3UgY2FuIGdldDogVGhpcyB3aWxsIHNob3cgYSBtYXhpbXVtIG9mIDMyIGltYWdlcyBmcm9tIGFuIGltYWdlIGNhdGVnb3J5IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgY3VycmVudCBnbG9iYWwgY2F0ZWdvcnksIHBsdXMgYWxsIGltYWdlcyBmcm9tIGNhdGVnb3JpZXMgbGlzdGVkIGluIHRoZSBjdXN0b20xIGZpZWxkIG9mIHRoZSBjdXJyZW50IGFydGljbGUgYnV0IDxlbT5leGNsdWRlPC9lbT4gaW1hZ2VzIGZyb20gY2F0ZWdvcmllcyBsaXN0ZWQgaW4gY3VzdG9tMiBhbmQgYWxzbyBleGNsdWRlIHRoZSAnc3RhdGljJyBjYXRlZ29yeS4gU2hvdyA4IGltYWdlIHRodW1ibmFpbHMgYXQgYSB0aW1lLjwvcD4NCg0KPGgyPjxhIG5hbWU9IlN0eWxpbmciPjwvYT5TdHlsaW5nIHdpdGggQ1NTPC9oMj4NCg0KPHA+VGhlcmUgYXJlIChkZWxpYmVyYXRlbHkpIHZlcnkgZmV3IGxheW91dCBhdHRyaWJ1dGVzIGZvciB0aGUgcGx1Z2luIGJlY2F1c2UgcHJldHR5IG11Y2ggZXZlcnl0aGluZyBjYW4gYmUgYWNjZXNzZWQgZnJvbSBDU1MgdG8gbGF5IHlvdXIgaW1hZ2VzIG91dCBob3dldmVyIHlvdSBsaWtlIHRoZW0uIFdhbnQgdG8gY2hhbmdlIHRoZSBudW1iZXIgb2YgaW1hZ2VzIHBlciByb3c/IENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGNvbnRhaW5pbmcgJmx0O2RpdiZndDsgYW5kIHNldCB0aGUgd2lkdGggb2YgZWFjaCB0aHVtYm5haWwgc3BhY2UgdG8gYSBwYXJ0aWN1bGFyIHNpemUuPC9wPg0KDQo8cD5UaGUgZm9sbG93aW5nIGxvZ2ljYWwgc3RydWN0dXJlIGFwcGxpZXM6PC9wPg0KDQo8dWw+DQo8bGk+QW4gb3B0aW9uYWwgd3JhcHRhZyBhbmQgY2xhc3MgbmFtZSBhcm91bmQgZWFjaCAiY2VsbCIgKGkuZS4gdGh1bWJuYWlsKTwvbGk+DQo8bGk+QSBsaW5rIGVsZW1lbnQgY29udGFpbmluZyB0aGUgdGh1bWJuYWlsJ3MgPGNvZGU+Jmx0O2ltZyZndDs8L2NvZGU+IHRhZzwvbGk+DQo8bGk+VGhlIGNhcHRpb24vYWx0IGlzIGEgJmx0O3NwYW4mZ3Q7IHdpdGggYW4gb3B0aW9uYWwgY2xhc3MgYW5kIGNhbiBhcHBlYXIgYWJvdmUsIGJlbG93IG9yIHdpdGhpbiB0aGUgbGluayBlbGVtZW50PC9saT4NCjxsaT5UaGUgbmV4dC9wcmV2IGxpbmtzIGFyZSB3cmFwcGVkIGluIHRoZSBvcHRpb25hbCB3cmFwdGFnIGNvbnRhaW5lciBhbmQgY2FuIGJlIGdpdmVuIGFuIG9wdGlvbmFsIGNsYXNzIG5hbWU8L2xpPg0KPGxpPlRoZSBuZXh0IGxpbmsgaGFzIGEgKGRlZmF1bHQpIGNsYXNzIG9mICJzbWRfc2xpbWJveF9uZXh0IiBhbmQgcHJldiBoYXMgInNtZF9zbGltYm94X3ByZXYiLiBUaGVzZSBjYW4gYmUgY2hhbmdlZCBvciByZW1vdmVkIGlmIHlvdSB3aXNoLjwvbGk+DQo8L3VsPg0KDQo8cD5Vc2luZyBDU1Mgc2VsZWN0b3JzIHlvdSBjYW4gYWNjZXNzIGV2ZXJ5IHBhcnQgb2YgdGhlIHN0cnVjdHVyZS4gQW4gZXhhbXBsZSBDU1MgbGF5b3V0IGlzIGdpdmVuIGhlcmUgdG8gZ2V0IHlvdSBzdGFydGVkIChhc3N1bWVzIGEgd3JhcHRhZyBvZiAnbGknLCBhIGNvbnRhaW5pbmcgJ3VsJyBhcm91bmQgdGhlIHBsdWdpbiB0YWcgd2l0aCBhIGNsYXNzIG9mIDxjb2RlPnNtZF9zbGltYm94PC9jb2RlPiBhbmQgPGNvZGU+bmF2Y2xhc3M9InNtZF9zbGltYm94X25hdiI8L2NvZGU+KS4gUGFzdGUgaXQgaW50byB5b3VyIENTUyB0ZW1wbGF0ZSBhbmQgeW91J3JlIGdvb2QgdG8gZ28uPC9wPg0KDQo8cHJlPg0KLnNtZF9zbGltYm94IHsNCglmbG9hdDpsZWZ0Ow0KCXdpZHRoOjYwMHB4Ow0KCW1hcmdpbjoxZW0gMDsNCgljbGVhcjpib3RoOw0KCWxpc3Qtc3R5bGU6bm9uZTsNCn0NCi5zbWRfc2xpbWJveCBsaSB7DQoJd2lkdGg6MTUwcHg7DQoJaGVpZ2h0OjE1MHB4Ow0KCWZsb2F0OmxlZnQ7DQoJbWFyZ2luOjFlbSBhdXRvOw0KCXRleHQtYWxpZ246Y2VudGVyOw0KfQ0KLnNtZF9zbGltYm94IGltZyB7DQoJbWFyZ2luOjAgYXV0bzsNCn0NCi5zbWRfc2xpbWJveCBzcGFuIHsNCglmbG9hdDpsZWZ0Ow0KCXdpZHRoOjE0MHB4Ow0KCXBhZGRpbmc6MnB4IDAgMCA1cHg7DQp9DQpsaS5zbWRfc2xpbWJveF9uYXYgew0KCWNsZWFyOmJvdGg7DQoJd2lkdGg6NTAwcHg7DQoJcGFkZGluZzoyMHB4Ow0KfQ0KLnNtZF9zbGltYm94X3ByZXYgew0KCWZsb2F0OmxlZnQ7DQp9DQouc21kX3NsaW1ib3hfbmV4dCB7DQoJZmxvYXQ6cmlnaHQ7DQp9DQo8L3ByZT4iO3M6NDoiY29kZSI7czoxNzAwMDoiLy8gdjAuMSAgIEluaXRpYWwgcHVibGljIHJlbGVhc2UNCi8vIHYwLjExIEFkZGVkICFjYXRlZ29yeSBzdXBwb3J0DQovLyB2MC4xMiBBZGRlZCB0ZXh0cG9zIG9wdGlvbiAodGhhbmtzIGxlZSkgYW5kIGltYWdlaWQgb3B0aW9uICh0aGFua3Mgd291YXJlbikNCi8vIHYwLjIgICBqcyBhbmQgY3NzIGNhbiBub3cgYmUgbG9hZGVkIGVsc2V3aGVyZSAodGhhbmtzIGpzdHViYnMpLiBBZGRlZCB3cmFwdGFnIGFuZCBjaGFuZ2VkIGRlZmF1bHRzIHRvIG1ha2Ugb3V0cHV0IGxlc3MgbGlrZSB0YWctc291cCAodGhhbmtzIHdvdWFyZW4pDQovLyB2MC4yMSBBZGRlZCBvcmRlcmJ5PSJmaXhlZCIgdG8gYWxsb3dlZCBmaXhlZCBpbWFnZWlkIG9yZGVyaW5nICh0aGFua3MgbGVlKS4gJHdoZXJlIHdhcm5pbmcgc3F1YXNoZWQgKHRoYW5rcyBiZW5qaWJvdCkNCi8vIHYwLjIyIE5vdyB1c2VzIHNtZF9saWIgYW5kIHN1YmNhdHMuIEFsc28gTUxQKE11bHRpLWxpbmd1YWwpLWF3YXJlLg0KLy8gdjAuMjMgRml4ZWQgb3JkZXJieSB3aGVuIHVzaW5nIHJhbmRvbSAodGhhbmtzIG1yZGFsZSkgYW5kIGFkZGVkIGFiaWxpdHkgdG8gb3ZlcnJpZGUgbWF4bGltaXQNCi8vIHYwLjI0IEFkZGVkIGxpYmNoZWNrICh0aGFua3MgcGFwdWFzcykuIE51bWVyaWMgcmFuZ2VzIG5vdyBhbGxvd2VkIGZvciBJRHMgKHNtZF9saWIpLiBGaXhlZCBlbXB0eSBmaWVsZC9pbWFnZWlkIG5lZ2F0aW9uIGJ1Z3MuIEZpeGVkIG5leHQvcHJldiBidXR0b25zIGZvciBNTFAuDQovLyB2MC4yNGIgRml4ZWQgcGFnaW5nIGluIHN1YmRpcmVjdG9yeSBpbnN0YWxsYXRpb25zICh0aGFua3MgdWx0cmFtZWdhIGFuZCBRd2VzdCkNCi8vIHYwLjI1IEV4dGVuZGVkIGdyb3VwbmFtZSAodGhhbmtzIFtBeGVsXSkNCg0KcmVxdWlyZV9wbHVnaW4oJ3NtZF9saWInKTsNCnJlZ2lzdGVyX2NhbGxiYWNrKCdzbWRfc2JveF9lbnVtX3N0cicsICdsMTBuLmVudW1lcmF0ZV9zdHJpbmdzJyk7DQpnbG9iYWwgJHNtZF9zYm94X2xpYnM7DQpnbG9iYWwgJHNtZF9zYm94X3N0cjsNCiRzbWRfc2JveF9zdHIgPSBhcnJheSgNCgknaW5jZXJyJyA9PiAnSWYgdXNpbmcgdGhlIHNjcmlwdHMgb3B0aW9uLCBzcGVjaWZ5IHVwIHRvIHRocmVlIHJlcXVpcmVkIHNjcmlwdHMgaW4gdGhpcyBvcmRlcjogJmx0O3R4cDpzbWRfc2xpbWJveF9pbmMgc2NyaXB0cz0ibW9vdG9vbHNKU0xvY2F0aW9uLCBzbGltYm94SlNMb2NhdGlvbiwgc2xpbWJveENTU0xvY2F0aW9uIiAvJmd0Oy4gSWYgYW55IHBvc2l0aW9ucyBhcmUgbGVmdCBlbXB0eSwgdGhlIG1pc3Npbmcgc2NyaXB0cyBtdXN0IGJlIHN1cHBsaWVkIHZpYSB0aGUganNkaXIvY3NzZGlyIG9wdGlvbnMsIG9yIGxvYWRlZCBleHRlcm5hbGx5IGFuZCB0b2xkIHRvIHNraXAgdGhpcyBzdGVwLiBUaGUgdGhyZWUgdmFsdWVzIGNhbiBlaXRoZXIgYmUgYSBmdWxsIFhIVE1MIHN0cmluZyAoZS5nLiBhcyByZXR1cm5lZCBieSB0eHA6c3RtX2phdmFzY3JpcHQgb3IgdHhwOmNzcywgYWx0aG91Z2ggdGhleSBtYXkgbm90IHdvcmsgZGlyZWN0bHkgd2l0aGluIHRoZSB0YWc7IHNlZSB0aGUgZG9jcykgb3Igc2ltcGx5IHBhdGhzIHRvIHRoZSBmaWxlcy4gTm90ZSB0aGF0IG5vIHZhbGlkYXRpb24gaXMgcGVyZm9ybWVkIHRvIGNoZWNrIGlmIHRoZSBmaWxlcyBleGlzdC4nLA0KCSdub2luYycgPT4gJ1JlcXVpcmVkIGxpYnJhcmllcyBub3QgbG9hZGVkLiBDYWxsICZsdDt0eHA6c21kX3NsaW1ib3hfaW5jIC8mZ3Q7IGluIHRoZSAmbHQ7aGVhZCZndDsgb2YgdGhpcyBwYWdlLicsDQoJJ25leHRfbGJsJyA9PiAnTmV4dCcsDQoJJ3ByZXZfbGJsJyA9PiAnUHJldicsDQopOw0KDQovLyBVc2UgdGhpcyB0byBpbmNsdWRlIHRoZSBsaWJyYXJpZXMgaW4gdGhlIDxoZWFkPiBzZWN0aW9uIG9mIHRoZSBwYWdlDQpmdW5jdGlvbiBzbWRfc2xpbWJveF9pbmMoJGF0dHMpIHsNCglnbG9iYWwgJHNtZF9zYm94X2xpYnM7DQoJZ2xvYmFsICRzbWRfc2JveF9zdHI7DQoNCglpZiAoaXNfYXJyYXkoJGF0dHMpKSBleHRyYWN0KCRhdHRzKTsNCg0KCS8vIEZ1bmN0aW9uIG9wdGlvbnMNCgkkanNkaXIgPSBpc3NldCgkanNkaXIpID8gZG9TbGFzaCgkanNkaXIpIDogJyc7DQoJJGNzc2RpciA9IGlzc2V0KCRjc3NkaXIpID8gZG9TbGFzaCgkY3NzZGlyKSA6ICcnOw0KCSRzY3JpcHRzID0gaXNzZXQoJHNjcmlwdHMpID8gJHNjcmlwdHMgOiAnJzsNCgkkc2tpcCA9IGlzc2V0KCRza2lwKSA/ICRza2lwIDogIjAiOw0KDQoJJG1vZHNSZXF1aXJlZCA9IDM7DQoJJG1vZHNMb2FkZWQgPSAwOw0KCSRvdXRTdHIgPSAnJzsNCg0KCWlmICgkc2tpcCA+IDApIHsNCgkJJG1vZHNMb2FkZWQgPSAkc2tpcDsNCgl9DQoNCgkvLyBJbmNsdWRlIHRoZSBqcyBsaWJzIGlmIHJlcXVpcmVkDQoJaWYgKCRqc2RpciAhPSAnJykgew0KCQkkb3V0U3RyIC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4kanNkaXIuICcvbW9vdG9vbHMuanMiPjwvc2NyaXB0PicubjsNCgkJJG91dFN0ciAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyAuJGpzZGlyLiAnL3NsaW1ib3guanMiPjwvc2NyaXB0PicubjsNCgkJJG1vZHNMb2FkZWQgKz0gMjsNCgl9DQoNCgkvLyBGaW5kIHdoaWNoIHNjcmlwdHMgdG8gYXV0by1sb2FkDQoJaWYgKCgkc2NyaXB0cyAhPSAnJykgJiYgKCRtb2RzTG9hZGVkIDwgJG1vZHNSZXF1aXJlZCkpIHsNCgkJJG1vZHNMaXN0ID0gcHJlZ19zcGxpdCgnL1ssXSsvJywkc2NyaXB0cywkbW9kc1JlcXVpcmVkKTsNCgkJJGpzcHJlZml4ID0gIjxzY3JpcHQiOw0KCQkkY3NzcHJlZml4ID0gIjxsaW5rIjsNCgkJJHR4cHByZWZpeCA9ICI8dHhwIjsNCgkJZm9yZWFjaCAoJG1vZHNMaXN0IGFzICRmaWxlb2JqKSB7DQoJCQkkZmlsZW9iaiA9IHRyaW0oJGZpbGVvYmopOw0KCQkJaWYgKCRmaWxlb2JqID09ICcnKSB7DQoJCQkJJG1vZHNMb2FkZWQtLTsNCgkJCX0gZWxzZSBpZiAoc3Vic3RyKCRmaWxlb2JqLCAwLCBzdHJsZW4oJGpzcHJlZml4KSkgPT09ICRqc3ByZWZpeCkgew0KCQkJCSRvdXRTdHIgLj0gJGZpbGVvYmoubjsNCgkJCX0gZWxzZSBpZiAoc3Vic3RyKCRmaWxlb2JqLCAwLCBzdHJsZW4oJGNzc3ByZWZpeCkpID09PSAkY3NzcHJlZml4KSB7DQoJCQkJJG91dFN0ciAuPSAkZmlsZW9iai5uOw0KCQkJfSBlbHNlIGlmIChzdWJzdHIoJGZpbGVvYmosIDAsIHN0cmxlbigkdHhwcHJlZml4KSkgPT09ICR0eHBwcmVmaXgpIHsNCgkJCQkkb3V0U3RyIC49IHBhcnNlKCRmaWxlb2JqKTsNCgkJCX0gZWxzZSB7DQoJCQkJaWYgKCRtb2RzTG9hZGVkIDwgMikgew0KCQkJCQkkb3V0U3RyIC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4kZmlsZW9iai4gJyI+PC9zY3JpcHQ+Jy5uOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRvdXRTdHIgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iJyAuJGZpbGVvYmouICciIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIiAvPicubjsNCgkJCQl9DQoJCQl9DQoJCQkkbW9kc0xvYWRlZCsrOw0KCQl9DQoJfQ0KDQoJLy8gSW5jbHVkZSB0aGUgY3NzIGZpbGUgaWYgcmVxdWlyZWQNCglpZiAoJGNzc2RpciAhPSAnJykgew0KCQkkb3V0U3RyIC49ICc8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicgLiRjc3NkaXIuICcvc2xpbWJveC5jc3MiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIiAvPicubjsNCgkJJG1vZHNMb2FkZWQrKzsNCgl9DQoNCgkvLyBTZXQgdGhlIGZsYWcgdG8gc2F5IHRoZSBsaWJzIGFyZSBvay4gU2hhbWUgdGhlcmUncyBubyBlYXN5IHByb3Zpc2lvbiBmb3INCgkvLyBjaGVja2luZyB0aGUgZmlsZXMgYWN0dWFsbHkgZXhpc3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9ucywgYnV0IGhleQ0KCWlmICgkbW9kc0xvYWRlZCA9PSAkbW9kc1JlcXVpcmVkKSB7DQoJCSRzbWRfc2JveF9saWJzID0gdHJ1ZTsNCgl9IGVsc2Ugew0KCQkkc21kX3Nib3hfbGlicyA9IGZhbHNlOw0KCQkkb3V0U3RyID0gc21kX2dUeHQoJHNtZF9zYm94X3N0ciwnaW5jZXJyJykubjsNCgl9DQoNCglyZXR1cm4gJG91dFN0cjsNCn0NCg0KZnVuY3Rpb24gc21kX3NsaW1ib3goJGF0dHMpIHsNCglnbG9iYWwgJHByZXRleHQsICR0aGlzYXJ0aWNsZSwgJGltZ19kaXI7DQoJZ2xvYmFsICRzbWRfc2JveF9saWJzLCAkc21kX3Nib3hfc3RyOw0KDQoJaWYgKGlzX2FycmF5KCRhdHRzKSkgZXh0cmFjdCgkYXR0cyk7DQoJJGNhdGlkb3B0cyA9IChpc3NldCgkY2F0ZWdvcnkpIHx8IGlzc2V0KCRpbWFnZWlkKSkgPyB0cnVlIDogZmFsc2U7DQoNCgkvLyBQbHVnaW4gb3B0aW9ucw0KCSRsaWJjaGVjayA9IGlzc2V0KCRsaWJjaGVjaykgPyAkbGliY2hlY2s6ICIxIjsNCgkkaW1hZ2VpZCA9IGlzc2V0KCRpbWFnZWlkKSA/IGRvU2xhc2goJGltYWdlaWQpIDogJyc7DQoJJGNhdGVnb3J5ID0gaXNzZXQoJGNhdGVnb3J5KSA/IGRvU2xhc2goJGNhdGVnb3J5KSA6ICgoJGltYWdlaWQ9PSIiKSA/ICRwcmV0ZXh0WydjJ106ICcnKTsNCgkkc3ViY2F0cyA9IGlzc2V0KCRzdWJjYXRzKSA/IHRydWUgOiBmYWxzZTsNCgkkY2F0bGFiZWwgPSBpc3NldCgkY2F0bGFiZWwpID8gJGNhdGxhYmVsOiAiYXJ0aWNsZS0iOw0KCSRncm91cG5hbWUgPSBpc3NldCgkZ3JvdXBuYW1lKSA/ICRncm91cG5hbWU6ICJzbWQiOw0KCSRtYXhsaW1pdCA9IGlzc2V0KCRtYXhsaW1pdCkgPyAkbWF4bGltaXQ6ICI5OTk5OSI7DQoJJGxpbWl0ID0gaXNzZXQoJGxpbWl0KSA/ICRsaW1pdDogIjAiOw0KCSRvcmRlcmJ5ID0gaXNzZXQoJG9yZGVyYnkpID8gJG9yZGVyYnk6ICJjYXRlZ29yeSI7DQoJJHNob3dwYWdlbGlua3MgPSBpc3NldCgkc2hvd3BhZ2VsaW5rcykgPyAkc2hvd3BhZ2VsaW5rczogIjEiOw0KCSRwcmV2bGFiZWw9IGlzc2V0KCRwcmV2bGFiZWwpID8gJHByZXZsYWJlbDogc21kX2dUeHQoJHNtZF9zYm94X3N0ciwgJ3ByZXZfbGJsJyk7DQoJJG5leHRsYWJlbD0gaXNzZXQoJG5leHRsYWJlbCkgPyAkbmV4dGxhYmVsOiBzbWRfZ1R4dCgkc21kX3Nib3hfc3RyLCAnbmV4dF9sYmwnKTsNCgkkc2hvd2NhcHRpb24gPSBpc3NldCgkc2hvd2NhcHRpb24pID8gJHNob3djYXB0aW9uOiAiMCI7DQoJJHNob3dhbHQgPSBpc3NldCgkc2hvd2FsdCkgPyAkc2hvd2FsdDogIjAiOw0KCSR0ZXh0cG9zID0gaXNzZXQoJHRleHRwb3MpID8gJHRleHRwb3M6ICJiZWxvdyI7DQoJJHdyYXB0YWcgPSBpc3NldCgkd3JhcHRhZykgPyAkd3JhcHRhZzogIiI7DQoJJGNlbGxjbGFzcyA9IGlzc2V0KCRjZWxsY2xhc3MpID8gJGNlbGxjbGFzczogIiI7DQoJJGltZ2NsYXNzID0gaXNzZXQoJGltZ2NsYXNzKSA/ICRpbWdjbGFzczogIiI7DQoJJG5hdmNsYXNzID0gaXNzZXQoJG5hdmNsYXNzKSA/ICRuYXZjbGFzczogIiI7DQoJJHByZXZjbGFzcyA9IGlzc2V0KCRwcmV2Y2xhc3MpID8gJHByZXZjbGFzczogInNtZF9zbGltYm94X3ByZXYiOw0KCSRuZXh0Y2xhc3MgPSBpc3NldCgkbmV4dGNsYXNzKSA/ICRuZXh0Y2xhc3M6ICJzbWRfc2xpbWJveF9uZXh0IjsNCgkkY2FwdGlvbmNsYXNzID0gaXNzZXQoJGNhcHRpb25jbGFzcykgPyAkY2FwdGlvbmNsYXNzOiAiIjsNCgkkYWx0Y2xhc3MgPSBpc3NldCgkYWx0Y2xhc3MpID8gJGFsdGNsYXNzOiAiIjsNCg0KCSRmaXhlZE9yZGVyID0gZmFsc2U7DQoNCgkvLyBNYWluIGNvZGUgYm9keQ0KCWlmICgoJGxpYmNoZWNrID09IDEpICYmICgkc21kX3Nib3hfbGlicyA9PSBmYWxzZSkpIHsNCgkJJG91dFN0ciA9IHNtZF9nVHh0KCRzbWRfc2JveF9zdHIsJ25vaW5jJyk7DQoJfSBlbHNlIHsNCgkJLy8gVGhlIGRhdGFiYXNlIGZpZWxkcyByZXF1aXJlZA0KCQkkZmllbGRzID0gJ2lkLG5hbWUsY2FwdGlvbixhbHQsY2F0ZWdvcnksZGF0ZSxhdXRob3IsZXh0LHcsaCc7DQoNCgkJLy8gQ29udmVydCB0aGUgY2F0ZWdvcnkgKHBvc3NpYmx5IGEgY29tbWEtc2VwIGxpc3QpIGludG8gYW4gU1FMLXN0eWxlICdpbicgbGlzdC4NCgkJJGZ1bGxDYXRMaXN0ID0gYXJyYXkoKTsNCgkJJG5vdENhdExpc3QgPSBhcnJheSgpOw0KCQkkY2F0VmFycyA9IGFycmF5KCI/YyIsICIhYyIsICI/cyIsICIhcyIsICI/dCIsICIhdCIsICI/aWQiLCAiIWlkIiwgIj9maWVsZCIsICIhZmllbGQiKTsNCgkJJHJldEFycmF5ID0gc21kX2dldEF0dHMoJGNhdGVnb3J5LCAkY2F0VmFycywgJGNhdGxhYmVsKTsNCgkJJGZ1bGxDYXRMaXN0ID0gJHJldEFycmF5WzBdOw0KCQkkbm90Q2F0TGlzdCA9ICRyZXRBcnJheVsxXTsNCg0KCQkvLyBDb252ZXJ0IHRoZSBpbWFnZWlkIChwb3NzaWJseSBhIGNvbW1hLXNlcCBsaXN0KSBpbnRvIGFuIFNRTC1zdHlsZSAnaW4nIGxpc3QuDQoJCSRmdWxsSURMaXN0ID0gYXJyYXkoKTsNCgkJJG5vdElETGlzdCA9IGFycmF5KCk7DQoJCSRpZFZhcnMgPSBhcnJheSgiP2lkIiwgIiFpZCIsICI/ZmllbGQiLCAiIWZpZWxkIik7DQoJCSRyZXRBcnJheSA9IHNtZF9nZXRBdHRzKCRpbWFnZWlkLCAkaWRWYXJzKTsNCgkJJGZ1bGxJRExpc3QgPSAkcmV0QXJyYXlbMF07DQoJCSRub3RJRExpc3QgPSAkcmV0QXJyYXlbMV07DQoNCgkJLy8gTWFrZSB1cCB0aGUgV0hFUkUgc3RhdGVtZW50IGZyb20gdGhlIGNvbWJpbmVkIGxpc3RzLg0KCQkvLyBUaGUgY2F0ZWdvcmllcy9pbWFnZSBJRHMgYXJlIE9SZWQgdG9nZXRoZXIgaW4gYnJhY2tldHMgZmlyc3QNCgkJLy8gYmVmb3JlIHRoZSBuZWdhdGlvbiBvcHRpb25zIGFyZSB0YWNrZWQgb24gYXMgQU5EcyBhZnRlcndhcmRzDQoJCSR3aGVyZU9SID0gYXJyYXkoKTsNCgkJJHdoZXJlQU5EID0gYXJyYXkoKTsNCg0KCQkvLyBTdGFydCB0aGUgV0hFUkUgc3RhdGVtZW50IHdpdGggdGhlIGNvbWJpbmVkIGxpc3Qgb2YgaW1hZ2UgSURzDQoJCWlmIChjb3VudCgkZnVsbElETGlzdCkgPiAwKSB7DQoJCQlmb3IgKCRpZHggPSBjb3VudCgkZnVsbElETGlzdCk7ICRpZHggPj0wOyAkaWR4LS0pIHsNCgkJCQlpZiAoZW1wdHkoJGZ1bGxJRExpc3RbJGlkeF0pKSB7DQoJCQkJCXVuc2V0KCRmdWxsSURMaXN0WyRpZHhdKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkZnVsbElETGlzdFskaWR4XSA9ICInIiAuICRmdWxsSURMaXN0WyRpZHhdIC4gIiciOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChjb3VudCgkZnVsbElETGlzdCkgPiAwKSB7DQoJCQkJJHdoZXJlT1JbXSA9ICJpZCBJTiAoIiAuIGltcGxvZGUoIiwiLCAkZnVsbElETGlzdCkuICIpIjsNCgkJCX0NCgkJfQ0KDQoJCS8vIGluY2x1ZGVkIGNhdGVnb3JpZXMgLSBzb21lIG1heSBiZSBzdWJjYXRzDQoJCSR0bXBhID0gYXJyYXkoKTsNCgkJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRmdWxsQ2F0TGlzdCk7ICRpZHgrKykgew0KCQkJaWYgKCRzdWJjYXRzKSB7DQoJCQkJJGNhdGVncyA9IHNtZF9nZXRTdWJDYXRzKCRmdWxsQ2F0TGlzdFskaWR4XSwnaW1hZ2UnKTsNCgkJCQlmb3IgKCRqZHggPSAwOyAkamR4IDwgY291bnQoJGNhdGVncyk7ICRqZHgrKykgew0KCQkJCQlpZiAoJGNhdGVnc1skamR4XVsnbmFtZSddICE9ICJyb290Iikgew0KCQkJCQkJJHRtcGFbXSA9ICInIiAuJGNhdGVnc1skamR4XVsnbmFtZSddLiAiJyI7DQoJCQkJCX0NCgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCSR0bXBhW10gPSAiJyIgLiRmdWxsQ2F0TGlzdFskaWR4XS4gIiciOw0KCQkJfQ0KCQl9DQoJCWlmIChjb3VudCgkdG1wYSkgPiAwKSB7DQoJCQkkd2hlcmVPUltdID0gImNhdGVnb3J5IElOICgiIC5pbXBsb2RlKCIsIiwgJHRtcGEpLiAiKSI7DQoJCX0NCg0KCQlpZiAoY291bnQoJHdoZXJlT1IpID4gMCkgew0KCQkJJHdoZXJlID0gIigiIC4gaW1wbG9kZSgiIE9SICIsICR3aGVyZU9SKSAuICIpIjsNCgkJfSBlbHNlIHsNCgkJCSR3aGVyZSA9ICIiOw0KCQl9DQoNCgkJLy8gZXhjbHVkZWQgY2F0ZWdvcmllcw0KCQkkdG1wYSA9IGFycmF5KCk7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkbm90Q2F0TGlzdCk7ICRpZHgrKykgew0KCQkJaWYgKCRzdWJjYXRzKSB7DQoJCQkJJGNhdGVncyA9IHNtZF9nZXRTdWJDYXRzKCRub3RDYXRMaXN0WyRpZHhdLCdpbWFnZScpOw0KCQkJCWZvciAoJGpkeCA9IDA7ICRqZHggPCBjb3VudCgkY2F0ZWdzKTsgJGpkeCsrKSB7DQoJCQkJCWlmICgkY2F0ZWdzWyRqZHhdWyduYW1lJ10gIT0gInJvb3QiKSB7DQoJCQkJCQkkdG1wYVtdID0gIiciIC4kY2F0ZWdzWyRqZHhdWyduYW1lJ10uICInIjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJJHRtcGFbXSA9ICInIiAuJG5vdENhdExpc3RbJGlkeF0uICInIjsNCgkJCX0NCgkJfQ0KCQlpZiAoY291bnQoJHRtcGEpID4gMCkgew0KCQkJJHdoZXJlQU5EW10gPSAiY2F0ZWdvcnkgTk9UIElOICgiIC5pbXBsb2RlKCIsIiwgJHRtcGEpLiAiKSI7DQoJCX0NCg0KCQkvLyBBZGQgdG8gdGhlIFdIRVJFIHN0YXRlbWVudCB0aGUgY29tYmluZWQgbGlzdCBvZiBOT1QgaW1hZ2UgSURzDQoJCWlmIChjb3VudCgkbm90SURMaXN0KSA+IDApIHsNCgkJCWZvciAoJGlkeCA9IGNvdW50KCRub3RJRExpc3QpOyAkaWR4ID49MDsgJGlkeC0tKSB7DQoJCQkJaWYgKGVtcHR5KCRub3RJRExpc3RbJGlkeF0pKSB7DQoJCQkJCXVuc2V0KCRub3RJRExpc3RbJGlkeF0pOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRub3RJRExpc3RbJGlkeF0gPSAiJyIgLiAkbm90SURMaXN0WyRpZHhdIC4gIiciOw0KCQkJCX0NCgkJCX0NCgkJCWlmIChjb3VudCgkbm90SURMaXN0KSA+IDApIHsNCgkJCQkkd2hlcmVBTkRbXSA9ICJpZCBOT1QgSU4gKCIgLiBpbXBsb2RlKCIsIiwgJG5vdElETGlzdCkuICIpIjsNCgkJCX0NCgkJfQ0KDQoJCWlmIChjb3VudCgkd2hlcmVBTkQpID4gMCkgew0KCQkJJHdoZXJlIC49ICgoJHdoZXJlPT0iIikgPyAiIiA6ICIgQU5EICIpIC4gaW1wbG9kZSgiIEFORCAiLCAkd2hlcmVBTkQpOw0KCQl9DQoNCgkJLy8gSWYgdGhlIHJlYXNvbiBub3RoaW5nIHdhcyByZXR1cm5lZCBpcyBiZWNhdXNlIG5vIG9wdGlvbnMgd2VyZSBnaXZlbg0KCQlpZiAoJHdoZXJlID09ICIiICYmICEkY2F0aWRvcHRzKSB7DQoJCQkkd2hlcmUgPSAiMT0xIjsNCgkJfQ0KDQoJCS8vIENvbnZlcnQgdGhlIG9yZGVyYnkgaW50byBhIHZhbGlkIHNvcnRpbmcgaGllcmFyY2h5Lg0KCQkvLyBOb3RlIHRoYXQgcmFuZG9tIGlzIGEgc3BlY2lhbCBjYXNlIGFuZCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5Og0KCQkvLyAgMSkgQW55dGhpbmcgYXBwZWFyaW5nIGJlZm9yZSByYW5kb20gaXMgcGFzc2VkIHRvIHRoZSBkYXRhYmFzZSBxdWVyeSBmb3Igb3JkZXJpbmcNCgkJLy8gIDIpIEFzIHNvb24gYXMgcmFuZG9tIGlzIGVuY291bnRlcmVkLCB0aGUgb3JkZXJieSBzdHJpbmcgaXMgaWdub3JlZC4NCgkJLy8gICAgIFRoZSByZXN1bHRzZXQgd2lsbCBiZSBzb3J0ZWQgcmFuZG9tbHkgaW5zdGVhZA0KCQkvLyAgMykgSWYgcmFuZG9tIGFwcGVhcnMgZmlyc3QgaW4gdGhlIGxpc3QsIHRoZSBkYXRhIGlzIHJldHJpZXZlZCByYW5kb21seSB0aGVuIHRoZQ0KCQkvLyAgICAgcmVtYWluaW5nIG9wdGlvbnMgc29ydCB0aGUgcmVzdWx0c2V0DQoJCSR3aGVyZU9CID0gQXJyYXkoKTsNCgkJJHBvc3RPcmRlciA9IGFycmF5KCk7DQoJCSRydWxlID0gInNxbCI7DQoJCSRwb3N0UHJlZml4ID0gIlNPUlRfIjsNCgkJJHJhbmRzb3J0ID0gZmFsc2U7DQoJCSRvYkxpc3QgPSBwcmVnX3NwbGl0KCcvWyxcc10rLycsJG9yZGVyYnksLTEsUFJFR19TUExJVF9OT19FTVBUWSk7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkb2JMaXN0KTsgJGlkeCsrKSB7DQoJCQkkb2JfZGlyID0gZXhwbG9kZSgnOicsJG9iTGlzdFskaWR4XSk7DQoJCQkkZGlyZWN0aW9uID0gJyc7DQoJCQkkY29sUmVmID0gJyc7DQoJCQlpZiAoY291bnQoJG9iX2RpcikgPD0gMSkgew0KCQkJCSRvYl9kaXJbMV0gPSAiYXNjIjsNCgkJCX0NCgkJCWlmICgkcnVsZSA9PSAic3FsIikgew0KCQkJCSRkaXJlY3Rpb24gPSAoJG9iX2RpclsxXSA9PSAiZGVzYyIpID8gJyBkZXNjJyA6ICcgYXNjJzsNCgkJCX0gZWxzZSB7DQoJCQkJJGRpcmVjdGlvbiA9ICgkb2JfZGlyWzFdID09ICJkZXNjIikgPyAkcG9zdFByZWZpeC4nREVTQycgOiAkcG9zdFByZWZpeC4nQVNDJzsNCgkJCX0NCgkJCXN3aXRjaCAoJG9iX2RpclswXSkgew0KCQkJCWNhc2UgJ25hbWUnOg0KCQkJCQkkY29sUmVmID0gJ25hbWUnOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdpZCc6DQoJCQkJCSRjb2xSZWYgPSAnaWQnOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdhbHQnOg0KCQkJCQkkY29sUmVmID0gJ2FsdCc7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2NhcHRpb24nOg0KCQkJCQkkY29sUmVmID0gJ2NhcHRpb24nOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdkYXRlJzoNCgkJCQkJJGNvbFJlZiA9ICdkYXRlJzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnZXh0JzoNCgkJCQkJJGNvbFJlZiA9ICdleHQnOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICdhdXRob3InOg0KCQkJCQkkY29sUmVmID0gJ2F1dGhvcic7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ3dpZHRoJzoNCgkJCQkJJGNvbFJlZiA9ICd3JzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnaGVpZ2h0JzoNCgkJCQkJJGNvbFJlZiA9ICdoJzsNCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAncmFuZG9tJzoNCgkJCQkJJHJ1bGUgPSAicG9zdCI7DQoJCQkJCWlmICgkaWR4ID09IDApIHsNCgkJCQkJCSR3aGVyZU9CW10gPSAncmFuZCgpJzsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRyYW5kc29ydCA9IHRydWU7DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQkJY2FzZSAnZml4ZWQnOg0KCQkJCQkvLyAnZml4ZWQnIG9ubHkgd29ya3Mgb24gaW1hZ2UgaWRzDQoJCQkJCWlmICgkaW1hZ2VpZCAhPSAiIikgew0KCQkJCQkJJGZpeGVkT3JkZXIgPSB0cnVlOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2NhdGVnb3J5JzoNCgkJCQlkZWZhdWx0Og0KCQkJCQkkY29sUmVmID0gJ2NhdGVnb3J5JzsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQlpZiAoJHJ1bGUgPT0gInNxbCIpIHsNCgkJCQlpZiAoJGNvbFJlZiAhPSAiIikgew0KCQkJCQkkd2hlcmVPQltdID0gJGNvbFJlZi4kZGlyZWN0aW9uOw0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJaWYgKCEkcmFuZHNvcnQpIHsNCgkJCQkJaWYgKCRjb2xSZWYgIT0gIiIpIHsNCgkJCQkJCSRwb3N0T3JkZXJbXSA9IGFycmF5KCJjb2wiID0+ICRjb2xSZWYsICJzb3J0IiA9PiAkZGlyZWN0aW9uKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCWlmIChjb3VudCgkd2hlcmVPQikgPiAwKSB7DQoJCQkkd2hlcmUgLj0gJyBPUkRFUiBCWSAnIC4gaW1wbG9kZSgiLCIsJHdoZXJlT0IpOw0KCQl9DQoNCgkJLy8gSGFuZGxlIHBhZ2luZw0KCQlpZiAoKCRsaW1pdCA+IDApICYmICRzaG93cGFnZWxpbmtzKSB7DQoJCQkkcnMgPSBzYWZlX3Jvd3MoJGZpZWxkcywgJ3R4cF9pbWFnZScsICR3aGVyZSAuJyBMSU1JVCAwLCcuJG1heGxpbWl0KTsNCgkJCSRudW10aHVtID0gY291bnQoJHJzKTsNCgkJCSRudW1QYWdlcyA9ICgkbnVtdGh1bSA+IDApID8gY2VpbCgkbnVtdGh1bS8kbGltaXQpIDogMTsNCgkJCSR0aHVtYnBhZ2UgPSAoIWdwcygndHBnJykpID8gMSA6IGdwcygndHBnJyk7DQoJCQkkb2Zmc2V0ID0gKCR0aHVtYnBhZ2UgLSAxKSAqICRsaW1pdDsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJHdoZXJlIC4nIExJTUlUICcuJG9mZnNldC4nLCcuJGxpbWl0KTsNCgkJfSBlbHNlIHsNCgkJCS8vIE5vIHBhZ2luZyByZXF1aXJlZA0KCQkJJG51bVBhZ2VzID0gMTsNCgkJCSR0aHVtYnBhZ2UgPSAxOw0KCQkJJHJzID0gc2FmZV9yb3dzKCRmaWVsZHMsICd0eHBfaW1hZ2UnLCAkd2hlcmUgLicgTElNSVQgMCwnLiAoKCRsaW1pdD09MCkgPyAkbWF4bGltaXQgOiAkbGltaXQpKTsNCgkJfQ0KDQoJCS8vIElzIHBvc3Qtb3JkZXJpbmcgcmVxdWlyZWQ/IERvIGl0DQoJCWlmICgkcmFuZHNvcnQpIHsNCgkJCXNodWZmbGUoJHJzKTsNCgkJfSBlbHNlIGlmIChjb3VudCgkcG9zdE9yZGVyKSA+IDApIHsNCgkJCS8vIFRyYW5zbGF0ZSB0aGUgcm93cyBpbnRvIGNvbHVtbnMgdGhhdCBjYW4gYmUgc29ydGVkDQoJCQlmb3JlYWNoKCRycyBhcyAka2V5ID0+ICRyb3cpIHsNCgkJCQkkY29sX2lkWyRrZXldID0gJHJvd1snaWQnXTsNCgkJCQkkY29sX25hbWVbJGtleV0gPSAkcm93WyduYW1lJ107DQoJCQkJJGNvbF9jYXB0aW9uWyRrZXldID0gJHJvd1snY2FwdGlvbiddOw0KCQkJCSRjb2xfYWx0WyRrZXldID0gJHJvd1snYWx0J107DQoJCQkJJGNvbF9jYXRlZ29yeVska2V5XSA9ICRyb3dbJ2NhdGVnb3J5J107DQoJCQkJJGNvbF9kYXRlWyRrZXldID0gJHJvd1snZGF0ZSddOw0KCQkJCSRjb2xfZXh0WyRrZXldID0gJHJvd1snZXh0J107DQoJCQkJJGNvbF9hdXRob3JbJGtleV0gPSAkcm93WydhdXRob3InXTsNCgkJCQkkY29sX3dbJGtleV0gPSAkcm93Wyd3J107DQoJCQkJJGNvbF9oWyRrZXldID0gJHJvd1snaCddOw0KCQkJfQ0KCQkJLy8gTWFrZSB1cCBhbiBhcnJheV9tdWx0aXNvcnQgYXJnIGxpc3QgYW5kIGV4ZWN1dGUgaXQNCgkJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkcG9zdE9yZGVyKTsgJGlkeCsrKSB7DQoJCQkJJHNvcnRhcmdzW10gPSAnJGNvbF8nLiRwb3N0T3JkZXJbJGlkeF1bJ2NvbCddOw0KCQkJCSRzb3J0YXJnc1tdID0gJHBvc3RPcmRlclskaWR4XVsnc29ydCddOw0KCQkJfQ0KCQkJJHNvcnRpdCA9ICdhcnJheV9tdWx0aXNvcnQoJy5pbXBsb2RlKCIsICIsJHNvcnRhcmdzKS4nLCAkcnMpOyc7DQoJCQlldmFsKCRzb3J0aXQpOw0KCQl9DQoNCgkJLy8gSXMgZml4ZWQtb3JkZXIgb3V0cHV0IGRlc2lyZWQ/IElmIHNvLCByZS1vcmRlciB0aGUgJHJzDQoJCWlmICgkZml4ZWRPcmRlcikgew0KCQkJJG9yZGVyZWRSUyA9IEFycmF5KCk7DQoJCQkkaWdub3JlTGlzdCA9IEFycmF5KCk7DQoJCQkkcmVtYWluaW5nUlMgPSBBcnJheSgpOw0KCQkJLy8gU3VjayBvdXQgdGhlIGZpeGVkIGl0ZW1zIGZpcnN0DQoJCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJGZ1bGxJRExpc3QpOyAkaWR4KyspIHsNCgkJCQlmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCQkJCWlmICgiJyIuJHJvd1snaWQnXS4iJyIgPT0gJGZ1bGxJRExpc3RbJGlkeF0pIHsNCgkJCQkJCSRvcmRlcmVkUlNbXSA9ICRyb3c7DQoJCQkJCQkkaWdub3JlTGlzdFtdID0gJHJvd1snaWQnXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJCS8vIFRhY2sgb24gdGhlIHJlbWFpbmluZyByb3dzDQoJCQlmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCQkJaWYgKCFpbl9hcnJheSgkcm93WydpZCddLCAkaWdub3JlTGlzdCkpIHsNCgkJCQkJJHJlbWFpbmluZ1JTW10gPSAkcm93Ow0KCQkJCX0NCgkJCX0NCgkJCSRycyA9IGFycmF5X21lcmdlKCRvcmRlcmVkUlMsICRyZW1haW5pbmdSUyk7DQoJCX0NCg0KCQkvLyBDb25zdHJ1Y3QgdGhlIG91dHB1dA0KCQkkb3V0U3RyID0gJyc7DQoJCWlmKCRycykgew0KCQkJZm9yZWFjaCgkcnMgYXMgJHJvdykgew0KCQkJCSR0aHVtYiA9IGh1LiRpbWdfZGlyLicvJyAuICRyb3dbJ2lkJ10gLiAndCcgLiAkcm93WydleHQnXTsNCgkJCQkkZnVsbCA9IGh1LiRpbWdfZGlyLicvJyAuICRyb3dbJ2lkJ10gLiAkcm93WydleHQnXTsNCgkJCQlpZiAoJGdyb3VwbmFtZSA9PT0gIj9jIikgew0KCQkJCQkkZ3JwID0gJHJvd1snY2F0ZWdvcnknXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/aWQiKSB7DQoJCQkJCSRncnAgPSAkcm93WydpZCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj9hdXRob3IiKSB7DQoJCQkJCSRncnAgPSAkcm93WydhdXRob3InXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/ZGF0ZSIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ2RhdGUnXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/YWx0Iikgew0KCQkJCQkkZ3JwID0gJHJvd1snYWx0J107DQoJCQkJfSBlbHNlIGlmICgkZ3JvdXBuYW1lID09PSAiP2NhcHRpb24iKSB7DQoJCQkJCSRncnAgPSAkcm93WydjYXB0aW9uJ107DQoJCQkJfSBlbHNlIGlmICgkZ3JvdXBuYW1lID09PSAiP2V4dCIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ2V4dCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj9uYW1lIikgew0KCQkJCQkkZ3JwID0gJHJvd1snbmFtZSddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZSA9PT0gIj93aWR0aCIpIHsNCgkJCQkJJGdycCA9ICRyb3dbJ3cnXTsNCgkJCQl9IGVsc2UgaWYgKCRncm91cG5hbWUgPT09ICI/aGVpZ2h0Iikgew0KCQkJCQkkZ3JwID0gJHJvd1snaCddOw0KCQkJCX0gZWxzZSBpZiAoJGdyb3VwbmFtZVswXSA9PT0gIj8iKSB7DQoJCQkJCS8vIFNwbGl0IG9mZiB0aGUgZmllbGQgbmFtZSBmcm9tIHRoZSBxdWVzdGlvbiBtYXJrDQoJCQkJCSRmaWVsZG5hbWUgPSBzdWJzdHIoJGdyb3VwbmFtZSwxKTsNCgkJCQkJaWYgKGlzc2V0KCR0aGlzYXJ0aWNsZVskZmllbGRuYW1lXSkpIHsNCgkJCQkJCSRncnAgPSAkdGhpc2FydGljbGVbJGZpZWxkbmFtZV07DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkZ3JwID0gJyc7DQoJCQkJCX0NCgkJCQl9IGVsc2Ugew0KCQkJCQkkZ3JwID0gJGdyb3VwbmFtZTsNCgkJCQl9DQoNCgkJCQkvLyBHZW5lcmF0ZSB0aGUgY2FwdGlvbi9hbHQgaWYgcmVxdWlyZWQNCgkJCQkkY2FwU3RyID0gKCRzaG93YWx0ICYmICRyb3dbJ2FsdCddKSA/ICc8c3BhbicgLiAoKCRhbHRjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kYWx0Y2xhc3MuICciJyA6ICcnKSAuICc+JyAuJHJvd1snYWx0J10uICc8L3NwYW4+JyA6ICcnOw0KCQkJCSRjYXBTdHIgLj0gKCRzaG93Y2FwdGlvbiAmJiAkcm93WydjYXB0aW9uJ10pID8gJzxzcGFuJyAuICgoJGNhcHRpb25jbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kY2FwdGlvbmNsYXNzLiAnIicgOiAnJykgLiAnPicgLiRyb3dbJ2NhcHRpb24nXS4gJzwvc3Bhbj4nIDogJyc7DQoNCgkJCQkvLyBDb25zdHJ1Y3QgdGhlIGxpbmsgYW5kIHB1dCBjYXB0aW9uL2FsdCBpbiB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24NCgkJCQkkb3V0U3RyIC49ICgkd3JhcHRhZyAhPSAiIikgPyAnPCcgLiR3cmFwdGFnLiAoKCRjZWxsY2xhc3MgIT0gIiIpID8gJyBjbGFzcz0iJyAuJGNlbGxjbGFzcy4gJyInIDogJycpIC4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJHRleHRwb3MgPT0gImFib3ZlIikgPyAkY2FwU3RyIDogJyc7DQoJCQkJJG91dFN0ciAuPSAnPGEgaHJlZj0iJy4kZnVsbC4nIiByZWw9ImxpZ2h0Ym94LScgLiRncnAuICciIHRpdGxlPSInIC4kcm93WydjYXB0aW9uJ10uICciPicgLigoJHRleHRwb3MgPT0gImJlZm9yZSIpID8gJGNhcFN0ciA6ICcnKS4gJzxpbWcgc3JjPSInIC4kdGh1bWIuICciIGFsdD0iJyAuJHJvd1snYWx0J10uICciJyAuICgoJGltZ2NsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRpbWdjbGFzcy4gJyInIDogJycpIC4gJyAvPicgLigoJHRleHRwb3MgPT0gImFmdGVyIikgPyAkY2FwU3RyIDogJycpLiAnPC9hPicubjsNCgkJCQkkb3V0U3RyIC49ICgkdGV4dHBvcyA9PSAiYmVsb3ciKSA/ICRjYXBTdHIgOiAnJzsNCgkJCQkkb3V0U3RyIC49ICgkd3JhcHRhZyAhPSAiIikgPyAnPC8nIC4kd3JhcHRhZy4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSBuOw0KCQkJfQ0KDQoJCQkvLyBBZGQgdGhlIHBhZ2luZyBmZWF0dXJlcyBpZiByZXF1aXJlZA0KCQkJaWYgKCgkbGltaXQgPiAwKSAmJiAkc2hvd3BhZ2VsaW5rcykgew0KCQkJCSRuZXh0ID0gKCRudW1QYWdlcyA+IDEgJiYgJHRodW1icGFnZSAhPSAkbnVtUGFnZXMpOw0KCQkJCSRwcmV2ID0gKCRudW1QYWdlcyA+IDEgJiYgJHRodW1icGFnZSA+IDEpOw0KDQoJCQkJLy8gUmVwbGFjZSBhbnkgcGFnaW5nIGluZm8gaW4gdGhlIHF1ZXJ5IHN0cmluZw0KCQkJCSRwcmV2UGFnZSA9IHNtZF9hZGRRU1ZhcigkcHJldGV4dFsncmVxdWVzdF91cmknXSwgJ3RwZycsICR0aHVtYnBhZ2UtMSk7DQoJCQkJJG5leHRQYWdlID0gc21kX2FkZFFTVmFyKCRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddLCAndHBnJywgJHRodW1icGFnZSsxKTsNCg0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8JyAuJHdyYXB0YWcuICgoJG5hdmNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuYXZjbGFzcy4gJyInIDogJycpIC4gJz4nIDogJyc7DQoJCQkJJG91dFN0ciAuPSAoJHByZXYpID8gJzxhJyAuICgoJHByZXZjbGFzcyAhPSAiIikgPyAnIGNsYXNzPSInIC4kcHJldmNsYXNzLiAnIicgOiAnJykgLiAnIGhyZWY9IicgLiRwcmV2UGFnZS4gJyI+JyAuJHByZXZsYWJlbC4gJzwvYT4nLm4gOiAnJzsNCgkJCQkkb3V0U3RyIC49ICgkbmV4dCkgPyAnPGEnIC4gKCgkbmV4dGNsYXNzICE9ICIiKSA/ICcgY2xhc3M9IicgLiRuZXh0Y2xhc3MuICciJyA6ICcnKSAuICcgaHJlZj0iJyAuJG5leHRQYWdlLiAnIj4nIC4kbmV4dGxhYmVsLiAnPC9hPicubiA6ICcnOw0KCQkJCSRvdXRTdHIgLj0gKCR3cmFwdGFnICE9ICIiKSA/ICc8LycgLiR3cmFwdGFnLiAnPicgOiAnJzsNCgkJCQkkb3V0U3RyIC49IG47DQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4gJG91dFN0cjsNCn0NCg0KLy8gQ2FsbGJhY2sgZm9yIE1MUCBzdHJpbmcgcmVwbGFjZW1lbnQNCmZ1bmN0aW9uIHNtZF9zYm94X2VudW1fc3RyKCRldmVudCwgJHN0ZXA9JycsICRwcmU9MCkgew0KCWdsb2JhbCAkc21kX3Nib3hfc3RyLCAkc21kTUxQOw0KCSRyID0gYXJyYXkJKA0KCQkJJ293bmVyJyA9PiAnc21kX3NsaW1ib3gnLA0KCQkJJ3ByZWZpeCcgPT4gJHNtZE1MUFsnc21kX3NsaW1ib3gnXSwNCgkJCSdsYW5nJyA9PiAnZW4tZ2InLCAvLyBEZWZhdWx0IGxhbmd1YWdlDQoJCQknZXZlbnQnID0+ICdwdWJsaWMnLCAvLyBwdWJsaWMvYWRtaW4vY29tbW9uID0gd2hpY2ggaW50ZXJmYWNlIHRoZSBzdHJpbmdzIHdpbGwgYmUgbG9hZGVkIGludG8NCgkJCSdzdHJpbmdzJyA9PiAkc21kX3Nib3hfc3RyLA0KCQkpOw0KCXJldHVybiAkcjsNCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjM6Im1kNSI7czozMjoiNjJmZDM2OTQwNzY2MTQ5ZTE2MzkyNjU1MzQ4MDUzOTgiO30=