<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>streetview</name>
	<version>1.0</version>
  <mincmsversion>1.8.1</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQoJCQkJPHA+VGhpcyBtb2R1bGUgbWFuYWdlcyBhbmQgZGlzcGxheXMgYSBsaXN0IG9mIEdvb2dsZSBTdHJlZXQgVmlld3MuPC9wPg0KCQkJPGJyLz48aDM+SG93IERvIEkgVXNlIEl0PzwvaDM+DQoJCQkJPGJyLz48aDQ+UGVybWlzc2lvbnM8L2g0Pg0KCQkJCQk8cD5NYWtlIHN1cmUgeW91ciB1c2VycyBoYXZlIHRoZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucy4gSWYgeW91IGFyZSBub3QgdXNpbmcgdGhlIGFjY2VzcyByZXN0cmljdGlvbiBvcHRpb24gKHNlZSBzZXR0aW5ncyksIHRoZSAic3RyZWV0dmlldzogTm9ybWFsIHVzZXIiIHBlcm1pc3Npb24gd2lsbCBiZSBlbm91Z2ggdG8gdXNlIHRoZSBtb2R1bGUuIEluIHRoZSBzZXR0aW5ncyB0YWIsIHlvdSBjYW4gY2hvb3NlIHdoaWNoIHRhYnMgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoZSBub3JtYWwgdXNlci4gT25seSB0aGUgYWRtaW5pc3RyYXRvciBhbmQgdXNlcnMgd2l0aCB0aGUgInN0cmVldHZpZXc6IEFkdmFuY2VkIiBwZXJtaXNzaW9uIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gc2V0dGluZ3MgdGFiLjxici8+DQoJCQkJCUlmIHlvdSB3aXNoIHRvIGRlZmluZSBsZXZlbC1zcGVjaWZpYyBwZXJtaXNzaW9ucywgYWN0aXZhdGUgdGhlIGFjY2VzcyByZXN0cmljdGlvbiBvcHRpb24gaW4gdGhlIHNldHRpbmdzIHRhYiBhbmQgZ2l2ZSB0aGUgInN0cmVldHZpZXc6IE1hbmFnZSBuYW1lX29mX2xldmVsIiBwZXJtaXNzaW9uIHRvIHRoZSBhcHByb3ByaWF0ZSB1c2Vycy48L3A+DQoJCQkJPGJyLz48aDQ+R2V0IGEgR29vZ2xlIEFQSSBLZXkgZmlyc3QgaWYgeW91IGRvbid0IGhhdmUgb25lPC9oND4NCgkJCQkJPHA+Z28gdG86IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYXBpcy9tYXBzL3NpZ251cC5odG1sIHRvIGdldCBhIGtleSBhbmQgcGFzdGUgaXQgaW4gdGhlIFRlbXBsYXRlcy4iZmluYWxfZGVmYXVsdCIgdGVtcGxhdGUgcmVwbGFjaW5nICJrZXk9WU9VUiBLRVkgSEVSRSIgd2l0aCBhIHZhbGlkIGtleTxici8+DQoNCgkJCQk8YnIvPjxoND5CYXNpY3M8L2g0Pg0KCQkJCQk8cD5UbyBjYWxsIHRoZSBtb2R1bGUsIHNpbXBseSB1c2UgdGhlIGZvbGxvd2luZyB0YWc6PGJyLz4NCgkJCQkJe2Ntc19tb2R1bGUgbW9kdWxlPSJzdHJlZXR2aWV3In08L3A+DQoJCQkJCTxwPk9yIHlvdSBtYXkgYXNrIGZvciBhIHNwZWNpZmljIGVsZW1lbnQ6PGJyPg0KCQkJCQl7Y21zX21vZHVsZSBtb2R1bGU9InN0cmVldHZpZXciIGFsaWFzPSJhbGlhc19vZl9pdGVtIn08L3A+DQoJICAgICAgICAgICAgICAJCTxici8+PGg0Pk9idGFpbmluZyBWYWx1ZXMgZGlyZWN0bHkgZnJvbSBHb29nbGUgU3RyZWV0IHZpZXc8L2g0Pg0KCQkJCQlCeSBnb2luZyB0byBzdHJlZXQgdmlldyBhbmQgY2hvb3NpbmcgdGhlICJsaW5rIiBidXR0b24gYXQgdGhlIHRvcA0KCQkJCQlyaWdodCwgbG9vayBmb3IgdGhlIHBhcmFtZXRlcnMgImNibGwiIGFuZCAiY2JwIjxicj4NCgkJCQkJdGhlIHZhbHVlcyBhcmU6PGJyPjxicj4NCgkJCQkJJm5ic3A7ICZuYnNwOyAqIGNibGw9IExhdGl0dWRlLGxvbmdpdHVkZSBmb3IgU3RyZWV0IFZpZXcuIDxicj48YnI+DQoJCQkJCSZuYnNwOyZuYnNwOyZuYnNwOyAqIGNicD0gU3RyZWV0IFZpZXcgd2luZG93IHRoYXQgYWNjZXB0cyA1DQoJCQkJCXBhcmFtZXRlcnM6PGJyPg0KCQkJCQk8b2w+DQogIAkJCQkJPGxpPjEuU3RyZWV0IFZpZXcvbWFwIGFycmFuZ2VtZW50LCAxMT11cHBlciBoYWxmIFN0cmVldCBWaWV3IGFuZCBsb3dlciBoYWxmIG1hcCwgMTI9bW9zdGx5IFN0cmVldCBWaWV3IHdpdGggY29ybmVyIG1hcDwvbGk+DQogIAkJCQkJPGxpPjIuUm90YXRpb24gYW5nbGUvYmVhcmluZyAoaW4gZGVncmVlcyk8L2xpPg0KCQkJCQkgPGxpPjMuVGlsdCBhbmdsZSwgLTkwIChzdHJhaWdodCB1cCkgdG8gOTAgKHN0cmFpZ2h0IGRvd24pPC9saT4NCiAgCQkJCQk8bGk+NC5ab29tIGxldmVsLCAwLTI8L2xpPg0KICAJCQkJCTxsaT41LlBpdGNoIChpbiBkZWdyZWVzKSAtOTAgKHN0cmFpZ2h0IHVwKSB0byA5MCAoc3RyYWlnaHQgZG93biksZGVmYXVsdCA1PC9saT48L29sPjxicj4NCgkJCQkJPGJyPg0KCQkJCTxoND5PcHRpb25hbCBDb29yZGluYXRlIExvb2t1cDwvaDQ+DQoJCQkJCUZpcmVmb3ggcnVubmluZyBvbiBMaW51eCBkb2VzIG5vdCBkaXNwbGF5IHRoZSBjb29yZGluYXRlIGxvb2t1cCBwYWdlIHByb3Blcmx5DQoJCQkJCXNvIHRoZXJlIGlzIGEgb3B0aW9uYWwgbG9va3VwIHBhZ2UgaW4gdGhlIG1vZHVsZXMvc3RyZWV0dmlldy9tYXAgZm9sZGVyDQoJCQkJCWNhbGxlZCBsb29rdXAyLmh0bWwsIGp1c3QgcmVuYW1lIHRoZSBmaWxlcyBhbmQgaXQgd2lsbCBkaXNwbGF5IGluIHRoZSBtb2R1bGUgYWRtaW48YnIgLz48YnIvPg0KDQoNCgkJCQk8YnIvPjxoND5TZXBhcmF0aW5nIGludG8gcGFnZXM8L2g0Pg0KCQkJCQk8cD5Zb3UgbWF5IGxpbWl0IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gYmUgc2hvd24gb24gb25lIHBhZ2U6PGJyLz4NCgkJCQkJe2Ntc19tb2R1bGUgbW9kdWxlPSJzdHJlZXR2aWV3IiBuYnBlcnBhZ2U9IjUifTxici8+DQoJCQkJCUluIHRoZSB0ZW1wbGF0ZSwgeW91IGNhbiBidWlsZCB0aGUgcGFnZSBtZW51IHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFnczo8YnIvPg0KCQkJCQl7JHBhZ2Vfc2hvd2luZ30sIHskcGFnZV90b3RhbGl0ZW1zfSwgeyRwYWdlX3BhZ2VudW1iZXJzfSwgeyRwYWdlX25leHR9LCB7JHBhZ2VfcHJldmlvdXN9PC9wPg0KCQkJCTxici8+PGg0PlVzaW5nIHF1ZXJpZXM8L2g0Pg0KCQkJCQk8cD5UbyBnZXQgYSBsaXN0IG9mIGl0ZW0gdGhhdCBtZWV0IHNwZWNpZmljIGNyaXRlcmlhLCB5b3UgY2FuIGNyZWF0ZSBhIHF1ZXJ5IHVzaW5nIHRoZSBxdWVyaWVzIHRhYiBvZiB0aGUgYWRtaW4gcGFuZWwsIGFuZCBjYWxsIHRoZW0gdXNpbmcgdGhlICJxdWVyeSIgcGFyYW1ldGVyOjxici8+DQoJCQkJCXtjbXNfbW9kdWxlIG1vZHVsZT0ic3RyZWV0dmlldyIgcXVlcnk9IjUifTwvcD4NCgkJCQkJPHA+PGk+SWYgdGhlIG9wdGlvbiB0byBhbGxvdyBtYW51ZWwgc3FsIHF1ZXJpZXMgaXMgZW5hYmxlZDwvaT4gKHNlZSAiU2V0dGluZ3MiIHRhYiksIHlvdSBtYXkgYWxzbyBwcm92aWRlIHRoZSBzcWwgcXVlcnkgZGlyZWN0bHkgd2l0aCB0aGUgcXVlcnkgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZTo8YnIvPg0KCQkJCQl7Y21zX21vZHVsZSBtb2R1bGU9InN0cmVldHZpZXciIHdoYXQ9InN0cmVldHZpZXciIHF1ZXJ5PSJBLmRhdGVfbW9kaWZpZWQgPiAnMjAwOS0wMy0xNScgQU5EIEEuYWN0aXZlID0gMSJ9PGJyLz4NCgkJCQkJVGhlIHF1ZXJ5IHBhcmFtZXRlciBjYW4gb25seSBob2xkIHRoZSBXSEVSRSBjbGF1c2Ugb2YgdGhlIHF1ZXJ5LCBhbmQgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBXSEVSRSBjb21tYW5kIGl0c2VsZi4gVG8gYXZvaWQgcHJvYmxlbXMsIHRoZSBwcmVmaXggIkEuIiBzaG91bGQgYmUgdXNlZCBiZWZvcmUgZmllbGQgbmFtZXMgKHdoZXJlIGFwcGxpY2FibGUsIHRoZSAiQi4iIHByZWZpeCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNyaXRlcmlhIG9uIHRoZSBwYXJlbnQncyBmaWVsZHMpLjxici8+DQoJCQkJCUFsdGhvdWdoIHRoZSBhYnN0cmFjdGlvbiBsYXllciBpcyBub3QgZWFzaWx5IHByb25lIHRvIGluamVjdGlvbnMsIHJlbWVtYmVyIHRoYXQgYWN0aXZhdGluZyB0aGlzIG9wdGlvbiBtZWFucyBnaXZpbmcgYSBzcWwgb3BlbmluZyB3aXRoaW4gdGhlIHRlbXBsYXRlcyBhbmQgYmUgY2FyZWZ1bC48L3A+DQoJCQkJPGJyLz48aDQ+VGhlIGxpbmsgYWN0aW9uPC9oND4NCgkJCQkJPHA+WW91IG1heSB1c2UgdGhlIGFjdGlvbiA8Yj4ibGluayI8L2I+IHRvIGNyZWF0ZSBhIGxpbmsgdG8gdGhlIGRlZmF1bHQgYWN0aW9uLCB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzOjxici8+DQoJCQkJCXtjbXNfbW9kdWxlIG1vZHVsZT0ic3RyZWV0dmlldyIgYWN0aW9uPSJsaW5rIiB3aGF0PSJzdHJlZXR2aWV3IiByYW5kb209IjEifTxici8+DQoJCQkJCXdvdWxkIGNyZWF0ZSBhIGxpbmsgdG8gYSByYW5kb20gZWxlbWVudCBvZiB0aGlzIGxldmVsLjwvcD4NCgkJCQk8YnIvPjxoND5UaGUgc2l0ZW1hcCBhY3Rpb248L2g0Pg0KCQkJCQk8cD5JZiB5b3VyIG1vZHVsZSBpcyBub3Qgc2hhcmluZyBjaGlsZHJlbiwgeW91IG1heSB1c2UgdGhlIGFjdGlvbiA8Yj4ic2l0ZW1hcCI8L2I+IHRvIGNyZWF0ZSBhIG1vZHVsZSBzaXRlbWFwOjxici8+DQoJCQkJCXtjbXNfbW9kdWxlIG1vZHVsZT0ic3RyZWV0dmlldyIgYWN0aW9uPSJzaXRlbWFwIn08YnIvPg0KCQkJCQlZb3UgY2FuIHNlbGVjdCB0aGUgbGV2ZWxzIHVzaW5nIHRoZSAid2hhdCIgcGFyYW1ldGVyLCBhbmQgbWF5IHNlbGVjdCBtb3JlIHRoYW4gb25lIHVzaW5nICJ8IiA6IHdoYXQ9ImxldmVsMXxsZXZlbDIiLjxici8+DQoJCQkJCU90aGVyIGF2YWlsYWJsZSBwYXJhbWV0ZXJzIGZvciB0aGlzIGFjdGlvbiBhcmUgImRldGFpbHBhZ2UiIGFuZCAiaW5saW5lIi48YnIvPg0KCQkJCQlUbyBjcmVhdGUgYSBnb29nbGUgc2l0ZW1hcCwgc2VlIHRoZSA8YSBocmVmPSIuLi9tb2R1bGVzL3N0cmVldHZpZXcvZG9jL2ZhcS5odG1sI3ExNiIgdGFyZ2V0PSJfYmxhbmsiPkZBUTwvYT4uPC9wPg0KCQkJCTxici8+PGg0PlRoZSBzZWFyY2ggYWN0aW9uPC9oND4NCgkJCQkJPHA+WW91IG1heSB1c2UgdGhlIGFjdGlvbiA8Yj4ic2VhcmNoIjwvYj4gdG8gZGlzcGxheSBhIHNlYXJjaCBmb3JtOjxici8+DQoJCQkJCXtjbXNfbW9kdWxlIG1vZHVsZT0ic3RyZWV0dmlldyIgYWN0aW9uPSJzZWFyY2gifTxici8+DQoJCQkJCVVzZSB0aGUgInNlYXJjaG1vZGUiIHBhcmFtZXRlciB0byBzd2l0Y2ggYmV0d2VlbiBhZHZhbmNlZCAoZGVmYXVsdCkgYW5kIHNpbXBsZSBtb2RlLiBZb3UgbWF5IHNwZWNpZnkgdGhlIGxldmVsIGluIHdoaWNoIHRvIHNlYXJjaCB1c2luZyB0aGUgIndoYXQiIHBhcmFtZXRlci4gWW91IGNhbm5vdCB1c2UgdGhlIGFkdmFuY2VkIHNlYXJjaCBtb2RlIGluIGFsbCBsZXZlbHMgYXQgdGhlIHNhbWUgdGltZS48YnIvPg0KCQkJCQlUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgY2FuIGJlIHVzZWQgd2l0aCB0aGUgc2VhcmNoIGFjdGlvbjogd2hhdCwgbGltaXQsIG5icGVycGFnZSwgb3JkZXJieSwgZGV0YWlscGFnZSwgbGlzdHRlbXBsYXRlLCBpbmxpbmUsIHNlYXJjaG1vZGUuPGJyLz4NCgkJCQkJU2VlIHN0cmVldHZpZXcvdGVtcGxhdGVzL3NlYXJjaC50cGwgdG8gbW9kaWZ5IHRoZSBzZWFyY2ggZm9ybS48L3A+PGJyLz4NCgkJCQk8cD5Gb3IgbW9yZSBoZWxwLCB5b3UgbWF5IHRha2UgYSBsb29rIGF0IHRoZSA8YSBocmVmPSIuLi9tb2R1bGVzL3N0cmVldHZpZXcvZG9jL2ZhcS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+RkFRPC9hPi48L3A+DQoJCQk8YnIvPjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KCQkJCTxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBDVExNb2R1bGVNYWtlciwgYW5kIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UuPC9wPjxici8+PGJyLz48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBhY3Rpb249ImRlZmF1bHQiIC0gUG9zc2libGUgYWN0aW9uczogImxpbmsiLCAic2VhcmNoIiwgImJyZWFkY3J1bWJzIiwgImRlZmF1bHQiLCAic2l0ZW1hcCIuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB3aGF0PSIiIC0gQWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBsZXZlbCB5b3Ugd2lzaCB0byBkaXNwbGF5LiBQb3NzaWJsZSB2YWx1ZXMgYXJlIDogPGk+c3RyZWV0dmlldzwvaT48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGFsaWFzPSIiIC0gQWxpYXMgb2YgdGhlIGl0ZW0geW91IHdpc2ggdG8gZGlzcGxheS48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHNob3dkZWZhdWx0PSIiIC0gU2V0IHRvICJ0cnVlIiBpZiB5b3Ugd2lzaCB0byBkaXNwbGF5IHRoZSBkZWZhdWx0IGVsZW1lbnQuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBwYXJlbnQ9IiIgLSBJZiB5b3Ugd2lzaCB0byBsaW1pdCB0aGUgZGlzcGxheWVkIGVsZW1lbnRzIHRvIHRob3NlIHdobyBiZWxvbmcgdG8gYSBzcGVjaWZpYyBwYXJlbnQsIGVudGVyIHRoZSBwYXJlbnQgYWxpYXMgaGVyZS48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxpbWl0PSIwIiAtIExpbWl0IHRoZSBudW1iZXIgb2YgaXRlbSByZXR1cm5lZCBieSB0aGUgcXVlcnkgKDAgPSBubyBsaW1pdCk8L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IG5icGVycGFnZT0iMCIgLSBTZXQgdGhlIG51bWJlciBvZiBpdGVtcyBkaXNwbGF5ZWQgb24gZWFjaCBwYWdlLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gb3JkZXJieT0iMCIgLSBZb3UgY2FuIHNldCB0byAibW9kaWZpZWQiLCAiY3JlYXRlZCIgb3IgdGhlIG5hbWUgb2YgYSBmaWVsZCB0byBvcmRlciBpdGVtcyBpbiB0aGlzIHdheS4gQW55IG90aGVyIHZhbHVlIHdpbGwgb3JkZXIgd2l0aCB0aGUgaXRlbSBvcmRlci48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGRldGFpbHBhZ2U9IiIgLSBTcGVjaWZ5IHRoZSBhbGlhcyBvZiB0aGUgcGFnZSBpbiB3aGljaCBsaW5rcyB0byBjaGlsZCBlbGVtZW50cyBzaG91bGQgYmUgc2VudCAoaWYgbm9uZSBpcyBzcGVjaWZpZWQsIGN1cnJlbnQgcGFnZSBpcyB1c2VkKTwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gcmFuZG9tPSIwIiAtIFNldCB0byBhIG51bWJlciB0byBzaG93IGEgbnVtYmVyIG9mIHJhbmRvbSBlbGVtZW50cyBmcm9tIHlvdXIgcXVlcnkuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsaXN0dGVtcGxhdGU9IiIgLSBTcGVjaWZ5IHRoZSB0ZW1wbGF0ZSB5b3Ugd2lzaCB0byB1c2UgZm9yIHRoZSBsaXN0IHZpZXcuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBmaW5hbHRlbXBsYXRlPSIiIC0gU3BlY2lmeSB0aGUgdGVtcGxhdGUgeW91IHdpc2ggdG8gdXNlIGZvciB0aGUgZGV0YWlsIHZpZXcgb2YgdGhlIGZpbmFsIGxldmVsLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZm9yY2VsaXN0PSIwIiAtIFNldCB0byAxIGlmIHlvdSB3aXNoIHRvIGRpc3BsYXkgYSBsaXN0IHZpZXcgZXZlbiB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGVsZW1lbnQuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBpbmxpbmU9IjAiIC0gTWFrZXMgdGhlIGxpbmtzIGlubGluZS48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHNlYXJjaG1vZGU9ImFkdmFuY2VkIiAtIEZvciB1c2Ugd2l0aCB0aGUgInNlYXJjaCIgYWN0aW9uLiBTZXQgdG8gInNpbXBsZSIgdG8gc2VhcmNoIGluIGFsbCB0ZXh0IGZpZWxkcywgYW5kICJhZHZhbmNlZCIgdG8gc2VhcmNoIGluIHNwZWNpZmljIGZpZWxkcy48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHF1ZXJ5PSIwIiAtIEZvciBvcHRpb25hbCB1c2Ugd2l0aCB0aGUgImRlZmF1bHQiIGFjdGlvbi4gU3BlY2lmaWVzIHRoZSBpZCBvZiB0aGUgcXVlcnkgdG8gdXNlLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gdG9hY3Rpb249IiIgLSBGb3IgdXNlIHdpdGggdGhlICJsaW5rIiBhY3Rpb24uIFNldHMgdGhlIGFjdGlvbiB0byB3aGljaCB0aGUgbGluayBzaG91bGQgcmVkaXJlY3QuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBNYXJ0aW4gJmx0O213Y291cnRlbmF5QHlhaG9vLmNvbSZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjA8YnIgLz4=]]></about>
	<description><![CDATA[Google Streetview made simple]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.addfiles.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKaWYoIWlzc2V0KCRfRklMRVMpIHx8ICFpc3NldCgkcGFyYW1zWydmaWVsZCddKSB8fCAhaXNzZXQoJHBhcmFtc1sncHJlZml4J10pIHx8ICFpc3NldCgkcGFyYW1zWyRwYXJhbXNbJ3ByZWZpeCddLidpZCddKSB8fCAhaXNzZXQoJHBhcmFtc1sndGFibGVuYW1lJ10pKXsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCkpOwp9CgokZGIgPSAkdGhpcy0+R2V0RGIoKTsKCiRyZXNpemUgPSBpc3NldCgkcGFyYW1zWydzaXplJ10pPyRwYXJhbXNbJ3NpemUnXTpmYWxzZTsKJHRodW1ic2l6ZSA9IGlzc2V0KCRwYXJhbXNbJ3RodW1iJ10pPyRwYXJhbXNbJ3RodW1iJ106ZmFsc2U7CiRpdGVtaWQgPSAkcGFyYW1zWyRwYXJhbXNbJ3ByZWZpeCddLidpZCddOwoKJGN1cmRpciA9IChpc3NldCgkcGFyYW1zWydjdXJkaXInXSkgPyAkcGFyYW1zWydjdXJkaXInXS4nLycgOiAnJyk7CiRzdGFydGRpciA9IChpc3NldCgkcGFyYW1zWydzdGFydGRpciddKSA/ICRwYXJhbXNbJ3N0YXJ0ZGlyJ10uJy8nIDogJycpOwokZGVzdGluYXRpb24gPSBzdHJfcmVwbGFjZSgnLy8nLCcvJywkc3RhcnRkaXIuJGN1cmRpcik7CgokYWxsb3dlZGV4dCA9IGZhbHNlOwppZihpc3NldCgkcGFyYW1zWydleHRlbnNpb25zJ10pICYmICRwYXJhbXNbJ2V4dGVuc2lvbnMnXSAmJiAkcGFyYW1zWydleHRlbnNpb25zJ10gIT0gIiIpCSRhbGxvd2VkZXh0ID0gZXhwbG9kZSgiLCIsJHBhcmFtc1snZXh0ZW5zaW9ucyddKTsKCiRlcnJvcnMgPSAiIjsKJHppcGZpZWxkID0gJGlkLid1cGxvYWR6aXBmaWxlJzsKCmlmKGlzc2V0KCRwYXJhbXNbInN1Ym1pdHppcGZpbGUiXSkpewoJCgkkZGlyID0gJGdDbXMtPmNvbmZpZ1sidXBsb2Fkc19wYXRoIl0uc3RyX3JlcGxhY2UoIi8vIiwiLyIsIi8iLiRkZXN0aW5hdGlvbi4iLyIpOwoJaWYoJHJlc2l6ZSAmJiAhaXNfYXJyYXkoJHJlc2l6ZSkpCSRyZXNpemUgPSBleHBsb2RlKCJ4IiwkcmVzaXplKTsKCQoJaWYoaXNzZXQoJF9GSUxFU1skemlwZmllbGRdKSAmJiBpc3NldCgkX0ZJTEVTWyR6aXBmaWVsZF1bJ25hbWUnXSkgJiYgJF9GSUxFU1skemlwZmllbGRdWyduYW1lJ10gIT0gIiIpewoJCSRleHRlbnNpb24gPSBzdHJ0b2xvd2VyKHN0cnJjaHIoJF9GSUxFU1skemlwZmllbGRdWyduYW1lJ10sICIuIikpOwoJCSR6YSA9IG5ldyBaaXBBcmNoaXZlKCk7CgkJaWYoc3RydG9sb3dlcigkZXh0ZW5zaW9uKSA9PSAnLnppcCcgJiYgJHphLT5vcGVuKCRfRklMRVNbJHppcGZpZWxkXVsndG1wX25hbWUnXSkpIHsKCQkJJGkgPSAwOwoJCQl3aGlsZSgkaSA8ICR6YS0+bnVtRmlsZXMpIHsKCQkJCSRmaWxlc3RhdHMgPSAkemEtPnN0YXRJbmRleCgkaSk7CgkJCQkkZmlsZW5hbWUgPSAkZmlsZXN0YXRzWyduYW1lJ107CgkJCQkkZXh0ZW5zaW9uID0gc3RydG9sb3dlcihzdWJzdHIoc3RycmNocigkZmlsZW5hbWUsICIuIiksMSkpOwoJCQkJaWYoICRleHRlbnNpb24gIT0gIiIgJiYgKCAhJGFsbG93ZWRleHQgfHwgaW5fYXJyYXkoJGV4dGVuc2lvbiwgJGFsbG93ZWRleHQpICkgKXsKCQkJCQkkZmlsZW5hbWUgPSAkdGhpcy0+dXBsb2FkX2NoZWNrZmlsZW5hbWUoJGZpbGVuYW1lLCRkaXIpOwoJCQkJCSRmcCA9IGZvcGVuKCRkaXIuJGZpbGVuYW1lLCAidyIpOwoJCQkJCWlmKGZ3cml0ZSgkZnAsJHphLT5nZXRGcm9tSW5kZXgoJGkpKSl7CgkJCQkJCWZjbG9zZSgkZnApOwoJCQkJCQljaG1vZCgkZGlyLiRmaWxlbmFtZSwgMDc3Nyk7CgkJCQkJCWlmKCRyZXNpemUgJiYgY291bnQoJHJlc2l6ZSkgPT0gMikgJHRoaXMtPnBsUmVzaXplKCRkaXIuJGZpbGVuYW1lLCAnJywgJHJlc2l6ZVswXSwgJHJlc2l6ZVsxXSx0cnVlLGlzc2V0KCRwYXJhbXNbJ2Nyb3AnXSkpOwoJCQkJCQkkdGhpcy0+cGxBc3NpZ25GaWxlKHN0cl9yZXBsYWNlKCIvLyIsIi8iLCIvIi4kZGVzdGluYXRpb24uIi8iLiRmaWxlbmFtZSksICRwYXJhbXNbJ3RhYmxlbmFtZSddLCAkaXRlbWlkLCAkcGFyYW1zWydmaWVsZCddLCAkdGh1bWJzaXplLCBpc3NldCgkcGFyYW1zWydjcm9wdGh1bWInXSkpOwoJCQkJCX1lbHNlewoJCQkJCQlmY2xvc2UoJGZwKTsKCQkJCQkJJGVycm9ycyA9ICc8bGk+Jy4kZmlsZW5hbWUuJzogJy5sYW5nKCdmaWxlbm90dXBsb2FkZWQnKS4nPC9saT4nOwoJCQkJCX0KCQkJCX1lbHNlewoJCQkJCSRlcnJvcnMgPSAnPGxpPicuJGZpbGVuYW1lLic6ICcuJHRoaXMtPkxhbmcoJ2Vycm9yX3dyb25nZmlsZXR5cGUnKS4nPC9saT4nOwoJCQkJfQoJCQkJJGkrKzsKCQkJfQoJCX1lbHNlewoJCQkkZXJyb3JzID0gJzxsaT4nLiRfRklMRVNbJHppcGZpZWxkXVsnbmFtZSddLic6ICcuJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRhcmNoaXZlJykuJzwvbGk+JzsKCQl9Cgl9CgkKfWVsc2V7CgkKCWZvcmVhY2goJF9GSUxFUyBhcyAkZmllbGRuYW1lPT4kZmlsZSl7CgkJaWYoJGZpZWxkbmFtZSAhPSAkemlwZmllbGQgJiYgaXNzZXQoJGZpbGVbJ25hbWUnXSkgJiYgJGZpbGVbJ25hbWUnXSAhPSAiIil7CgkJCSRleHRlbnNpb24gPSBzdHJ0b2xvd2VyKHN1YnN0cihzdHJyY2hyKCRmaWxlWyduYW1lJ10sICIuIiksMSkpOwoJCQlpZiggISRhbGxvd2VkZXh0IHx8IGluX2FycmF5KCRleHRlbnNpb24sICRhbGxvd2VkZXh0KSApewoJCQkJaWYoICRmaWxlcGF0aCA9ICR0aGlzLT5wbFVwbG9hZEZpbGUoJGZpbGUsICRkZXN0aW5hdGlvbiwgJHJlc2l6ZSwgaXNzZXQoJHBhcmFtc1snY3JvcCddKSkgKXsKCQkJCQkkdGhpcy0+cGxBc3NpZ25GaWxlKCRmaWxlcGF0aCwgJHBhcmFtc1sndGFibGVuYW1lJ10sICRpdGVtaWQsICRwYXJhbXNbJ2ZpZWxkJ10sICR0aHVtYnNpemUsIGlzc2V0KCRwYXJhbXNbJ2Nyb3B0aHVtYiddKSk7CgkJCQl9ZWxzZXsKCQkJCQkkZXJyb3JzIC49ICI8bGk+Ii4kZmlsZVsnbmFtZSddLic6ICcubGFuZygnZmlsZW5vdHVwbG9hZGVkJykuIjwvbGk+IjsKCQkJCX0KCQkJfWVsc2V7CgkJCQkkZXJyb3JzID0gJzxsaT4nLiRmaWxlWyduYW1lJ10uJzogJy4kdGhpcy0+TGFuZygnZXJyb3Jfd3JvbmdmaWxldHlwZScpLic8L2xpPic7CgkJCX0KCQl9Cgl9CgkKfQoKJG5ld3BhcmFtcyA9IGFycmF5KCAkcGFyYW1zWydwcmVmaXgnXS4naWQnID0+ICRpdGVtaWQgKTsKaWYoaXNzZXQoJHBhcmFtc1snYWN0aXZlX3RhYiddKSkgJG5ld3BhcmFtc1snYWN0aXZlX3RhYiddID0gJHBhcmFtc1snYWN0aXZlX3RhYiddOwppZigkZXJyb3JzICE9ICIiKQkkbmV3cGFyYW1zWydtb2R1bGVfbWVzc2FnZSddID0gJzx1bD4nLiRlcnJvcnMuJzwvdWw+JzsKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2VkaXQnLiRwYXJhbXNbJ3ByZWZpeCddLCAkcmV0dXJuaWQsICRuZXdwYXJhbXMgKTsJCQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.adminquery.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCmVjaG8gIjxoMj4iLiR0aGlzLT5MYW5nKCJjcmVhdGVxdWVyeSIpLiI8L2gyPjxici8+IjsKCmlmKCFpc3NldCgkcGFyYW1zWyJ3aGF0Il0pKXsKCQoJJGxldmVsYXJyYXkgPSAkdGhpcy0+Z2V0X2xldmVsYXJyYXkoKTsKCSRsZXZlbG9wdGlvbnMgPSBhcnJheSgpOwoJZm9yZWFjaCgkbGV2ZWxhcnJheSBhcyAkb25lKQkkbGV2ZWxvcHRpb25zWyRvbmVdID0gJG9uZTsKCWVjaG8gIjxwPiIuJHRoaXMtPkxhbmcoInByb21wdF9xdWVyeSIpOwoJZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgImFkbWlucXVlcnkiLCAkcmV0dXJuaWQpOwoJZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsIndoYXQiLCRsZXZlbG9wdGlvbnMpOwoJZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAic3VibWl0IiwgbGFuZygic3VibWl0IikpLiI8L3A+IjsKCWVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCQp9ZWxzZWlmKGlzc2V0KCRwYXJhbXNbInN1Ym1pdHF1ZXJ5Il0pKXsKCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCSR3aGF0ID0gJHBhcmFtc1sid2hhdCJdOwoJJG11bHRpcGxlbGlzdGZpZWxkcyA9IGFycmF5KCk7CgoKCS8vIHdlIHBhcnNlIHRoZSBrZXl3b3JkcwoJJHdoZXJlID0gJHRoaXMtPmdldFdoZXJlRnJvbVBhcmFtcygkcGFyYW1zKTsKCQoJbGlzdCgkd2hlcmVjbGF1c2UsICR3aGVyZXZhbHVlcykgPSAkdGhpcy0+YnVpbGRXaGVyZSgkd2hlcmUsICR3aGF0KTsKCSRjdXN0b21vcmRlciA9IChpc3NldCgkcGFyYW1zWyJvcmRlciJdKSAmJiAkcGFyYW1zWyJvcmRlciJdICE9ICIiKT8kcGFyYW1zWyJvcmRlciJdLiIgIi4kcGFyYW1zWyJvcmRlcl90eXBlIl06IiI7CgkKCSR0bXBpZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld3NhdmVkX3F1ZXJpZXNfc2VxIik7CgkkbmFtZSA9IGlzc2V0KCRwYXJhbXNbInF1ZXJ5bmFtZSJdKT9hZGRzbGFzaGVzKCRwYXJhbXNbInF1ZXJ5bmFtZSJdKToiIjsKCQoJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld19zYXZlZF9xdWVyaWVzIFNFVCBpZD0/LCBuYW1lPT8sIHdoYXQ9Pywgd2hlcmVjbGF1c2U9Pywgd2hlcmV2YWx1ZXM9PywgcXVlcnlvcmRlcj0/IjsKCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0bXBpZCwgJG5hbWUsICR3aGF0LCAkd2hlcmVjbGF1c2UsIHNlcmlhbGl6ZSgkd2hlcmV2YWx1ZXMpLCAkY3VzdG9tb3JkZXIpKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICJkZWZhdWx0YWRtaW4iLCAkcmV0dXJuaWQsIGFycmF5KCJhY3RpdmVfdGFiIj0+InF1ZXJpZXMiLCJtb2R1bGVfbWVzc2FnZSI9PiR0aGlzLT5MYW5nKCJtZXNzYWdlX21vZGlmaWVkIikpKTsKCn1lbHNlewoJJHdoYXQgPSAkcGFyYW1zWyJ3aGF0Il07CgllY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAiYWRtaW5xdWVyeSIsICRyZXR1cm5pZCk7CgllY2hvICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICJ3aGF0IiwgJHdoYXQpOwoJZWNobyAiPHA+Ii4kdGhpcy0+TGFuZygicXVlcnluYW1lIikuIjogIi4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwicXVlcnluYW1lIiwiIiwzMCkuIjwvcD4iOwoJJHRoaXMtPmNyZWF0ZUZpZWxkRm9ybSgkd2hhdCwgJGlkLCBmYWxzZSk7CgllY2hvICI8cD4iLiR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICJzdWJtaXRxdWVyeSIsIGxhbmcoInN1Ym1pdCIpKS4iPC9wPiI7CgllY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgkJCQp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/action.assignfile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCmlmKCFpc3NldCgkcGFyYW1zWydmaWVsZCddKSB8fCAhaXNzZXQoJHBhcmFtc1sncHJlZml4J10pIHx8ICFpc3NldCgkcGFyYW1zWyRwYXJhbXNbJ3ByZWZpeCddLidpZCddKSB8fCAhaXNzZXQoJHBhcmFtc1sndGFibGVuYW1lJ10pKQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgpKTsNCg0KJGZpbGVwYXRoID0gaXNzZXQoJHBhcmFtc1snZmlsZXBhdGgnXSk/JHBhcmFtc1snZmlsZXBhdGgnXTonJzsNCmlmKCRmaWxlcGF0aCAhPSAnJyAmJiBpc3NldCgkcGFyYW1zWydzdGFydGRpciddKSAmJiAkcGFyYW1zWydzdGFydGRpciddICE9ICcvJykJJGZpbGVwYXRoID0gJHBhcmFtc1snc3RhcnRkaXInXS4nLycuJGZpbGVwYXRoOw0KJGZpbGVwYXRoID0gc3RyX3JlcGxhY2UoJy8vJywnLycsJGZpbGVwYXRoKTsNCiRpdGVtaWQgPSAkcGFyYW1zWyRwYXJhbXNbJ3ByZWZpeCddLidpZCddOw0KJHRodW1ic2l6ZSA9IGlzc2V0KCRwYXJhbXNbJ3RodW1iJ10pPyRwYXJhbXNbJ3RodW1iJ106ZmFsc2U7DQoNCiR0aGlzLT5wbEFzc2lnbkZpbGUoJGZpbGVwYXRoLCAkcGFyYW1zWyd0YWJsZW5hbWUnXSwgJGl0ZW1pZCwgJHBhcmFtc1snZmllbGQnXSwgJHRodW1ic2l6ZSwgaXNzZXQoJHBhcmFtc1snY3JvcHRodW1iJ10pKTsNCg0KJG5ld3BhcmFtcyA9IGFycmF5KCAkcGFyYW1zWydwcmVmaXgnXS4naWQnID0+ICRpdGVtaWQgKTsNCmlmKGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZV90YWInXSkpICRuZXdwYXJhbXNbJ2FjdGl2ZV90YWInXSA9ICRwYXJhbXNbJ2FjdGl2ZV90YWInXTsNCiR0aGlzLT5SZWRpcmVjdCgkaWQsICdlZGl0Jy4kcGFyYW1zWydwcmVmaXgnXSwgJHJldHVybmlkLCAkbmV3cGFyYW1zICk7CQkNCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.browsefiles.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMjIGFjdGlvbi5Ccm93c2VmaWxlcy5waHANCiMjIEJ5OiBQaWVycmUtTHVjIEdlcm1haW4NCiMjIFBBUkFNUzoNCiMjICRwYXJhbXNbJ21vZGUnXSA6IGltYWdlcyB8fCBmaWxlcw0KIyMgJHBhcmFtc1snZXh0ZW5zaW9ucyddIDogYXJyYXkgb2Ygc2hvd24gZmlsZSBleHRlbnNpb25zDQojIyAkcGFyYW1zWydzdGFydGRpciddIDogdGhlIGZvbGRlciB0byBzdGFydCBhdCAoIHVwbG9hZHMvIFtzdGFydGRpcl0gLyApDQojIyAkcGFyYW1zWyd0YWJsZW5hbWUnXSA6IHRoZSBuYW1lIG9mIHRoZSBkYiB0YWJsZQ0KIyMgJHBhcmFtc1sncHJlZml4J10gOiB0aGUgdmFyaWFibGUgcHJlZml4DQojIyAkcGFyYW1zW3ByZWZpeC4naWQnXSA6IHRoZSBpZCBvZiB0aGUgaXRlbSB0byB3aGljaCB0aGUgaW1hZ2Ugd2lsbCBiZSBhc3NpZ25lZCAodmFsdWUgaXMgbm90IHVzZWQsIGJ1dCByZXR1cm5lZCBhdCB0aGUgZW5kKQ0KIyMgJHBhcmFtc1snZmllbGQnXSA6IG9ubHkgYSBwYXNzLXRocm91Z2ggdG8gdGhlIGFzc2lnbiBhY3Rpb24NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIFJFVFJJRVZJTkcgUEFSQU1TIEFORCBDT05GSUdTLi4uDQojDQppZiAoIWlzc2V0KCRwYXJhbXNbJ21vZGUnXSkgfHwgIWlzc2V0KCRwYXJhbXNbJ2ZpZWxkJ10pIHx8ICFpc3NldCgkcGFyYW1zWydwcmVmaXgnXSkgfHwgIWlzc2V0KCRwYXJhbXNbJ2ZpZWxkJ10pIHx8ICFpc3NldCgkcGFyYW1zWyd0YWJsZW5hbWUnXSkgKSBleGl0Ow0KDQokaGlkZXRodW1icyA9IHRydWU7IC8vIHdpbGwgaGlkZSBJbWFnZSBNYW5hZ2VyIHRodW1ibmFpbHMsIGJ1dCBhbHNvIGhpZGUgYWxsIGZpbGVzIHRoYXQgc3RhcnQgd2l0aCAidGh1bWJfIi4uLg0KJHRoZWFkbWludGhlbWUgPSAkZ0Ntcy0+dmFyaWFibGVzWyJhZG1pbnRoZW1lIl07DQoNCiMjIGRlZmluaW5nIHRoZSBhbGxvd2VkIGV4dGVuc2lvbnM6DQokbWVkaWFleHQgPSBhcnJheSgnc3dmJywnZmx2JywnanBlZycsJ2pwZycsJ3BuZycsJ2dpZicpOw0KJGRvY2V4dCA9IGFycmF5KCdkb2MnLCdkb2N4JywneGxzJywneGxzeCcsJ3J0ZicsJ3R4dCcsJ3BkZicpOw0KDQppZigkcGFyYW1zWydtb2RlJ10gPT0gJ2ltYWdlcycgfHwgJHBhcmFtc1snbW9kZSddID09ICdpbWFnZScpIHsNCgkkbW9kZSA9ICdpbWFnZSc7DQoJJGFsbG93ZWRleHQgPSAkbWVkaWFleHQ7DQp9ZWxzZXsNCgkkbW9kZSA9ICdvdGhlcic7DQoJJGFsbG93ZWRleHQgPSBhcnJheV9tZXJnZSgkbWVkaWFleHQsJGRvY2V4dCk7DQp9DQppZihpc3NldCgkcGFyYW1zWydleHRlbnNpb25zJ10pICYmICRwYXJhbXNbJ2V4dGVuc2lvbnMnXSAmJiAkcGFyYW1zWydleHRlbnNpb25zJ10gIT0gIiIpCSRhbGxvd2VkZXh0ID0gZXhwbG9kZSgiLCIsJHBhcmFtc1snZXh0ZW5zaW9ucyddKTsNCmlmKCRtb2RlID09ICdpbWFnZScgJiYgISR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzaG93dGh1bWJuYWlscyIsdHJ1ZSkpCSRtb2RlID0gJ290aGVyJzsNCg0KJGFkZGZpbGVzID0gKCBpc3NldCgkcGFyYW1zWydhZGRmaWxlcyddKSAmJiAkcGFyYW1zWydhZGRmaWxlcyddICk7DQoNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgU09NRSBGVU5DVElPTlMuLi4NCiMNCg0KZnVuY3Rpb24gc3RybGltaXQoJHN0cmluZyl7DQoJLy8gZnVuY3Rpb24gdG8gbGltaXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZW5hbWVzDQoJaWYgKHN1YnN0cigkc3RyaW5nLDAsMjEpID09ICRzdHJpbmcpew0KCQlyZXR1cm4gJHN0cmluZzsNCgl9ZWxzZXsNCgkJcmV0dXJuIHN1YnN0cigkc3RyaW5nLDAsMTkpLicuLi4nOw0KCX0NCn0NCmZ1bmN0aW9uIGdldF90aHVtYm5haWwoJGJhc2V1cmwsICRmaWxlbmFtZSwgJGRpciwgJHJldHVybmFycmF5PWZhbHNlKXsNCgkkdGh1bWJwYXRoID0gJGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlbmFtZTsNCgkkdGh1bWJuYW1lID0gJGZpbGVuYW1lOw0KCWlmIChmaWxlX2V4aXN0cygkZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RodW1iXycuJGZpbGVuYW1lKSkgew0KCQkkdGh1bWJuYW1lID0gJ3RodW1iXycuJGZpbGVuYW1lOw0KCX1lbHNlaWYoZmlsZV9leGlzdHMoJGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLidwbHRodW1iXycuJGZpbGVuYW1lKSl7DQoJCSR0aHVtYm5hbWUgPSAncGx0aHVtYl8nLiRmaWxlbmFtZTsNCgl9DQoJJGltZ2luZiA9IGdldGltYWdlc2l6ZSgkZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHRodW1ibmFtZSk7DQoJaWYoISRpbWdpbmYgfHwgIWlzc2V0KCRpbWdpbmZbMV0pKQlyZXR1cm4gZmFsc2U7DQoJbGlzdCgkd2lkdGgsICRoZWlnaHQpID0gJGltZ2luZjsNCgkkdGh1bWJuYWlscmF0aW8gPSBtYXgoJHdpZHRoIC8gMTA2LCRoZWlnaHQgLyAxMDYpOw0KCWlmICgkdGh1bWJuYWlscmF0aW8gPCAxKSAkdGh1bWJuYWlscmF0aW8gPSAxOw0KCSR0aGVpZ2h0ID0gZmxvb3IoJGhlaWdodCAvICR0aHVtYm5haWxyYXRpbyk7DQoJJHR3aWR0aCA9IGZsb29yKCR3aWR0aCAvICR0aHVtYm5haWxyYXRpbyk7DQoJaWYoJHJldHVybmFycmF5KXsNCgkJcmV0dXJuIGFycmF5KCRiYXNldXJsLicvJy4kdGh1bWJuYW1lLCAkdHdpZHRoLCAkdGhlaWdodCk7DQoJfWVsc2V7DQoJCXJldHVybiAnPGltZyBib3JkZXI9MCBzcmM9IicuJGJhc2V1cmwuJy8nLiR0aHVtYm5hbWUuJyIgd2lkdGg9IicuJHR3aWR0aC4nIiBoZWlnaHQ9IicuJHRoZWlnaHQuJyIgLz4nOw0KCX0NCn0NCmZ1bmN0aW9uIGltYWdlbW9kZV9idWlsZGxpbmtjb250ZW50KCRiYXNldXJsLCAkZmlsZW5hbWUsICRkaXI9Jycpew0KCS8vIGNyZWF0ZXMgdGhlIGNvbnRlbnQgb2YgdGhlIGxpbmsgaW4gaW1hZ2UgbW9kZQ0KCSRleHRlbnNpb24gPSBzdHJ0b2xvd2VyKHN1YnN0cihzdHJyY2hyKCRmaWxlbmFtZSwgIi4iKSwgMSkpOw0KCWlmKGluX2FycmF5KCRleHRlbnNpb24sIGFycmF5KCdqcGVnJywnanBnJywncG5nJywnZ2lmJykpKXsNCgkJJHRoZXRodW1iID0gZ2V0X3RodW1ibmFpbCgkYmFzZXVybCwgJGZpbGVuYW1lLCAkZGlyKTsNCgkJcmV0dXJuICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4nLiR0aGV0aHVtYi4nPC9kaXY+Jy5zdHJsaW1pdCgkZmlsZW5hbWUpOw0KCX0NCglnbG9iYWwgJGdDbXM7DQoJJHRoZWFkbWludGhlbWUgPSAkZ0Ntcy0+dmFyaWFibGVzWyJhZG1pbnRoZW1lIl07DQoJaWYoaW5fYXJyYXkoJGV4dGVuc2lvbiwgYXJyYXkoJ2ZsdicsJ3N3ZicsJ3dtdicsJ21vdicpKSl7DQoJCSRwaWMgPSAkdGhlYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCJpY29ucy9maWxldHlwZXMvZm1lZGlhLmdpZiIpOw0KCX1lbHNlaWYoaW5fYXJyYXkoJGV4dGVuc2lvbiwgYXJyYXkoJ2pwZWcnLCdqcGcnLCdwbmcnLCdnaWYnKSkpew0KCQkkcGljID0gJHRoZWFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvZmlsZXR5cGVzL2ZwYWludC5naWYiKTsNCgl9ZWxzZXsNCgkJJHBpYyA9ICR0aGVhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoImljb25zL2ZpbGV0eXBlcy9mZG9jLmdpZiIpOw0KCX0NCglyZXR1cm4gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPicuJHBpYy4nPC9kaXY+Jy5zdHJsaW1pdCgkZmlsZW5hbWUpOw0KfQ0KDQpmdW5jdGlvbiBtYWtlRGlyT2JqKCRmaWxlbmFtZSwkZGlyLCRtb2R1bGUsJHBhcmFtcywkY3VyZGlyLCRwYXJlbnRkaXIsJGlkLCRyZXR1cm5pZCl7DQoJZ2xvYmFsICRnQ21zOw0KCSR0aGVhZG1pbnRoZW1lID0gJGdDbXMtPnZhcmlhYmxlc1siYWRtaW50aGVtZSJdOw0KCSRwYXJlbnQgPSAoJGZpbGVuYW1lID09ICcuLicpOw0KCSRvYmogPSBuZXcgU3RkQ2xhc3MoKTsNCgkkb2JqLT5mb2xkZXIgPSB0cnVlOw0KCSRlbXB0eSA9IGFycmF5KCJleHQiLCJzaXplIiwiaW1hZ2VzaXplIiwiZGVsZXRlbGluayIsIm1vZGlmaWVkIiwib3duZXIiLCJwZXJtaXNzaW9ucyIpOw0KCWZvcmVhY2goJGVtcHR5IGFzICRmaWVsZCkJJG9iai0+JGZpZWxkID0gJyc7DQoJJG9iai0+ZmlsZW5hbWUgPSAkZmlsZW5hbWU7DQoJJG9iai0+cGljID0gJHRoZWFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvZmlsZXR5cGVzLyIuKCRwYXJlbnQ/InVwIjoiIikuImZvbGRlci5naWYiKTsNCglpZigkcGFyZW50KXsNCgkJJG5ld3BhcmFtcyA9IGFycmF5X21lcmdlKCRwYXJhbXMsIGFycmF5KCdjdXJkaXInID0+ICRwYXJlbnRkaXIpKTsNCgkJJG9iai0+dGhlbGluayA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnYnJvd3NlZmlsZXMnLCAkcmV0dXJuaWQsICcuLicsICRuZXdwYXJhbXMpOw0KCX1lbHNlew0KCQkkbmV3cGFyYW1zID0gYXJyYXlfbWVyZ2UoJHBhcmFtcywgYXJyYXkoJ2N1cmRpcicgPT4gJGN1cmRpci4nLycuJGZpbGVuYW1lLCAncGFyZW50ZGlyJyA9PiAkY3VyZGlyKSk7DQoJCSRvYmotPnRoZWxpbmsgPSAnPGEgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPi4nLiRmaWxlbmFtZS4nPC9hPicuJG1vZHVsZS0+Q3JlYXRlTGluaygkaWQsICdicm93c2VmaWxlcycsICRyZXR1cm5pZCwgJGZpbGVuYW1lLCAkbmV3cGFyYW1zKTsNCgl9DQoJcmV0dXJuICRvYmo7DQp9DQpmdW5jdGlvbiBtYWtlRmlsZU9iaigkZmlsZW5hbWUsJGRpciwkbW9kdWxlLCRwYXJhbXMsJGN1cmRpciwkaWQsJHJldHVybmlkLCRiYXNldXJsKXsNCglnbG9iYWwgJGdDbXM7DQoJJHRoZWFkbWludGhlbWUgPSAkZ0Ntcy0+dmFyaWFibGVzWyJhZG1pbnRoZW1lIl07DQoJJGluZm8gPSAkbW9kdWxlLT5wbEdldEZpbGVJbmZvKCRkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZW5hbWUpOw0KCSRleHRlbnNpb24gPSAkaW5mb1snZXh0J107DQoJJG9iaiA9IG5ldyBTdGRDbGFzcygpOw0KCSRvYmotPmZvbGRlciA9IGZhbHNlOw0KCSRvYmotPmZpbGVuYW1lID0gJGZpbGVuYW1lOw0KCSRvYmotPmV4dCA9ICRleHRlbnNpb247DQoJJG9iai0+c2l6ZSA9ICc8YSBzdHlsZT0iZGlzcGxheTpub25lOyI+Jy4kaW5mb1sic2l6ZSJdLic8L2E+Jy4kaW5mb1sic2l6ZV93Zm9ybWF0Il07DQoJJG9iai0+cGljID0gJHRoZWFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgkaW5mb1siZmlsZWljb24iXSk7DQoJJG9iai0+aW1hZ2VzaXplID0gJyc7DQoJJG9iai0+dmlld2xpbmsgPSAnJzsNCglpZigkaW5mb1siaW1hZ2VzaXplIl0pew0KCQkkb2JqLT5pbWFnZXNpemUgPSAnPGEgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPicuJGluZm9bIndpZHRoIl0uJzwvYT4nLiRpbmZvWyJpbWFnZXNpemUiXTsNCgkJJHRoZXRodW1iID0gZ2V0X3RodW1ibmFpbCgkYmFzZXVybCwgJGZpbGVuYW1lLCAkZGlyLCB0cnVlKTsNCgkJaWYoJHRoZXRodW1iKQkkb2JqLT52aWV3bGluayA9ICcgPGEgaHJlZj0iJy4kdGhldGh1bWJbMF0uJyIgdGl0bGU9IicuJG1vZHVsZS0+TGFuZygiaW5zdGFudHByZXZpZXciKS4nIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25jbGljaz0icmV0dXJuIGRpc3BsYXl0aHVtYih0aGlzLFwnJy4kdGhldGh1bWJbMF0uJ1wnLCcuJHRoZXRodW1iWzFdLicsJy4kdGhldGh1bWJbMl0uJyk7Ij4nLiR0aGVhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoImljb25zL3N5c3RlbS92aWV3LmdpZiIpLic8L2E+JzsNCgl9DQoJJG9iai0+ZGVsZXRlbGluayA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnYnJvd3NlZmlsZXMnLCAkcmV0dXJuaWQsICR0aGVhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoImljb25zL3N5c3RlbS9kZWxldGUuZ2lmIiksYXJyYXlfbWVyZ2UoJHBhcmFtcywgYXJyYXkoJ2RlbGV0ZWZpbGUnPT4kZmlsZW5hbWUpKSkuJG9iai0+dmlld2xpbms7DQoJJG5ld3BhcmFtcyA9IGFycmF5X21lcmdlKCRwYXJhbXMsIGFycmF5KCdmaWxlbmFtZSc9PiRmaWxlbmFtZSwgJ2ZpbGVwYXRoJyA9PiAkY3VyZGlyLicvJy4kZmlsZW5hbWUpKTsNCgkkb2JqLT50aGVsaW5rID0gJG1vZHVsZS0+Q3JlYXRlTGluaygkaWQsICdhc3NpZ25maWxlJywgJHJldHVybmlkLCAkZmlsZW5hbWUsICRuZXdwYXJhbXMpOw0KCSRvYmotPm1vZGlmaWVkID0gJzxhIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4nLiRpbmZvWyJmaWxlbXRpbWUiXS4nPC9hPicuJGluZm9bIm1vZGlmaWVkIl07DQoJJG9iai0+b3duZXIgPSAkaW5mb1sib3duZXIiXTsNCgkkb2JqLT5wZXJtaXNzaW9ucyA9ICRpbmZvWyJwZXJtaXNzaW9ucyJdOw0KCXJldHVybiAkb2JqOw0KfQ0KDQoNCg0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIFJFVFJJRVZJTkcgQ1VSUkVOVCBQQVRILi4uDQojDQoNCiRzdGFydGRpciA9IGlzc2V0KCRwYXJhbXNbJ3N0YXJ0ZGlyJ10pPyRwYXJhbXNbJ3N0YXJ0ZGlyJ106Jyc7DQppZigkc3RhcnRkaXIgIT0gJycgJiYgc3Vic3RyKCRzdGFydGRpciwwLDEpICE9ICcvJyAmJiBzdWJzdHIoJHN0YXJ0ZGlyLDAsMSkgIT0gJ1xcJykgJHN0YXJ0ZGlyID0gRElSRUNUT1JZX1NFUEFSQVRPUi4kc3RhcnRkaXI7DQppZighZmlsZV9leGlzdHMoJGdDbXMtPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uJHN0YXJ0ZGlyKSkgQG1rZGlyKCRnQ21zLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLiRzdGFydGRpcik7DQoNCiRwYXJlbnRkaXIgPSAoaXNzZXQoJHBhcmFtc1sncGFyZW50ZGlyJ10pID8gJHBhcmFtc1sncGFyZW50ZGlyJ10gOiAnJyk7DQokY3VyZGlyID0gKGlzc2V0KCRwYXJhbXNbJ2N1cmRpciddKSA/ICRwYXJhbXNbJ2N1cmRpciddIDogJycpOw0KJGRpciA9ICRnQ21zLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLiRzdGFydGRpci4kY3VyZGlyOw0KaWYoIWlzX2RpcigkZGlyKSl7DQoJJGRpciA9ICRnQ21zLT5jb25maWdbInVwbG9hZHNfcGF0aCJdOw0KCSRjdXJkaXIgPSAnJzsNCgkkcGFyZW50ZGlyID0gJyc7DQp9DQokYmFzZXVybCA9ICRnQ21zLT5jb25maWdbJ3VwbG9hZHNfdXJsJ10uJHN0YXJ0ZGlyLiRjdXJkaXI7DQoNCmlmIChpc3NldCgkcGFyYW1zWydkZWxldGVmaWxlJ10pKXsNCgkvLyBXZSdyZSBkZWxldGluZyBhIGZpbGUNCglpZihmaWxlX2V4aXN0cygkZGlyLicvJy4kcGFyYW1zWydkZWxldGVmaWxlJ10pICYmIHVubGluaygkZGlyLicvJy4kcGFyYW1zWydkZWxldGVmaWxlJ10pKXsNCgkJZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoIm1lc3NhZ2VfZGVsZXRlZCIpKTsNCgl9DQp9DQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIFBSRVBBUklORyBISURERU4gRklFTERTIEZPUiBVUExPQUQNCiMNCg0KJGhpZGRlbiA9ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2N1cmRpcicsJGN1cmRpcikuJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnZmllbGQnLCRwYXJhbXNbJ2ZpZWxkJ10pLiR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3RhYmxlbmFtZScsJHBhcmFtc1sndGFibGVuYW1lJ10pLiR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ21vZGUnLCRwYXJhbXNbJ21vZGUnXSkuJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwncHJlZml4JywkcGFyYW1zWydwcmVmaXgnXSkuJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwkcGFyYW1zWydwcmVmaXgnXS4naWQnLCRwYXJhbXNbJHBhcmFtc1sncHJlZml4J10uJ2lkJ10pOw0KaWYoaXNzZXQoJHBhcmFtc1snZXh0ZW5zaW9ucyddKSkgJGhpZGRlbiAuPSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdleHRlbnNpb25zJywkcGFyYW1zWydleHRlbnNpb25zJ10pOw0KaWYoaXNzZXQoJHBhcmFtc1snc3RhcnRkaXInXSkpICRoaWRkZW4gLj0gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnc3RhcnRkaXInLCRwYXJhbXNbJ3N0YXJ0ZGlyJ10pOw0KaWYoaXNzZXQoJHBhcmFtc1snc2l6ZSddKSkgJGhpZGRlbiAuPSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdzaXplJywkcGFyYW1zWydzaXplJ10pOw0KaWYoaXNzZXQoJHBhcmFtc1sndGh1bWInXSkpICRoaWRkZW4gLj0gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwndGh1bWInLCRwYXJhbXNbJ3RodW1iJ10pOw0KaWYoaXNzZXQoJHBhcmFtc1snY3JvcCddKSkgJGhpZGRlbiAuPSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdjcm9wJywkcGFyYW1zWydjcm9wJ10pOw0KaWYoaXNzZXQoJHBhcmFtc1snY3JvcHRodW1iJ10pKSAkaGlkZGVuIC49ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2Nyb3B0aHVtYicsJHBhcmFtc1snY3JvcHRodW1iJ10pOw0KaWYoaXNzZXQoJHBhcmFtc1snYWRkZmlsZXMnXSkpICRoaWRkZW4gLj0gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnYWRkZmlsZXMnLCRwYXJhbXNbJ2FkZGZpbGVzJ10pOw0KaWYoaXNzZXQoJHBhcmFtc1snYWN0aXZlX3RhYiddKSkgJGhpZGRlbiAuPSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdhY3RpdmVfdGFiJywkcGFyYW1zWydhY3RpdmVfdGFiJ10pOw0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIFJFVFJJRVZJTkcgRklMRVMgJiBGT0xERVJTDQojDQoNCiRkaCAgPSBvcGVuZGlyKCRkaXIpOw0KJGZvbGRlcnMgPSBhcnJheSgpOw0KJGZpbGVzID0gYXJyYXkoKTsNCiR1cGZvbGRlciA9IGZhbHNlOw0Kd2hpbGUgKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSl7DQoJaWYoaXNfZGlyKCRkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZW5hbWUpICYmICRmaWxlbmFtZSE9Jy4nKXsNCgkJCWlmICgkZmlsZW5hbWU9PScuLicpIHsNCgkJCQlpZiAoJGN1cmRpciAhPSAnJykJCSR1cGZvbGRlciA9IHRydWU7DQoJCQl9ZWxzZXsNCgkJCQkkZm9sZGVyc1tdID0gJGZpbGVuYW1lOw0KCQkJfQ0KCX1lbHNlew0KCQkkZXh0ZW5zaW9uID0gc3RydG9sb3dlcihzdWJzdHIoc3RycmNocigkZmlsZW5hbWUsICIuIiksIDEpKTsNCgkJaWYoaW5fYXJyYXkoJGV4dGVuc2lvbiwgJGFsbG93ZWRleHQpICYmICghJGhpZGV0aHVtYnMgfHwgc3Vic3RyKCRmaWxlbmFtZSwwLDYpICE9ICd0aHVtYl8nKSAmJiBzdWJzdHIoJGZpbGVuYW1lLDAsOCkgIT0gJ3BsdGh1bWJfJyl7DQoJCQkkZmlsZXNbXSA9ICRmaWxlbmFtZTsNCgkJfQ0KCX0NCn0NCmlmIChpc3NldCgkZGgpKQljbG9zZWRpcigkZGgpOw0Kc29ydCgkZm9sZGVycyk7DQpzb3J0KCRmaWxlcyk7DQoNCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBESVNQTEFZSU5HLi4uDQojDQoNCmVjaG8gJzxkaXYgaWQ9ImN0bG1tX3N1Ym1pdG1lc3NhZ2UiIGNsYXNzPSJwYWdlbWNvbnRhaW5lciIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4nLiR0aGlzLT5MYW5nKCJzdWJtaXR0aW5nX2ZpbGUiKS4nPC9kaXY+JzsNCg0KaWYoJG1vZGUgPT0gJ2ltYWdlJyl7DQoJLy8gaW1hZ2UgbW9kZSAod2l0aCB0aHVtYm5haWxzKSAtIG5vIHRlbXBsYXRlDQoJZWNobyAnPGgyPicuJHRoaXMtPkxhbmcoJ2Jyb3dzZWZpbGVzdGl0bGUnKS4nPC9oMj4nOw0KCWVjaG8gJzxwPicuJHRoaXMtPkxhbmcoJ3Nob3dpbmdkaXInKS4nIDogJy4kZGlyLic8L3A+JzsNCgllY2hvICc8ZGl2IGlkPSJmaWxlc2VsZWN0IiBjbGFzcz0icGFnZW92ZXJmbG93IiBzdHlsZT0icGFkZGluZzogNHB4OyBtYXJnaW4tYm90dG9tOiAxMHB4OyBib3JkZXI6IDFweCBzb2xpZCAjNjY2NjY2OyBiYWNrZ3JvdW5kOiAjRkZGRkZGOyBvdmVyZmxvdzogYXV0bzsiPjxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyI+JzsNCgkkZGl2b3B0aW9uID0gJzxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgZmxvYXQ6IGxlZnQ7IHdpZHRoOiAxNjVweDsgaGVpZ2h0OiAxODBweDsiPjxici8+JzsNCgkkY2xvc2VkaXYgPSAnPC9kaXY+DQonOw0KCWlmKCR1cGZvbGRlcil7DQoJCWVjaG8gJGRpdm9wdGlvbjsNCgkJJG5ld3BhcmFtcyA9IGFycmF5X21lcmdlKCRwYXJhbXMsIGFycmF5KCdjdXJkaXInID0+ICRwYXJlbnRkaXIpKTsNCgkJZWNobyAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdicm93c2VmaWxlcycsICRyZXR1cm5pZCwgJHRoZWFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvZmlsZXR5cGVzL3VwZm9sZGVyLmdpZiIpLic8YnIvPicuJHRoaXMtPkxhbmcoJ3BhcmVudGRpcicpLCAkbmV3cGFyYW1zKTsNCgkJZWNobyAkY2xvc2VkaXY7DQoJfQ0KCWZvcmVhY2goJGZvbGRlcnMgYXMgJGZpbGVuYW1lKXsNCgkJZWNobyAkZGl2b3B0aW9uOw0KCQkkbmV3cGFyYW1zID0gYXJyYXlfbWVyZ2UoJHBhcmFtcywgYXJyYXkoJ2N1cmRpcicgPT4gJGN1cmRpci4nLycuJGZpbGVuYW1lLCAncGFyZW50ZGlyJyA9PiAkY3VyZGlyKSk7DQoJCWVjaG8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYnJvd3NlZmlsZXMnLCAkcmV0dXJuaWQsICc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48aW1nIGJvcmRlcj0wIHNyYz0iLi4vbGliL2ZpbGVtYW5hZ2VyL0ltYWdlTWFuYWdlci9pbWcvZm9sZGVyLmdpZiIgLz48L2Rpdj4nLiRmaWxlbmFtZSwgJG5ld3BhcmFtcyk7DQoJCWVjaG8gJGNsb3NlZGl2Ow0KCX0NCglmb3JlYWNoKCRmaWxlcyBhcyAkZmlsZW5hbWUpew0KCQllY2hvICRkaXZvcHRpb247DQoJCSRuZXdwYXJhbXMgPSBhcnJheV9tZXJnZSgkcGFyYW1zLCBhcnJheSgnZmlsZW5hbWUnPT4kZmlsZW5hbWUsICdmaWxlcGF0aCcgPT4gJGN1cmRpci4nLycuJGZpbGVuYW1lKSk7DQoJCWVjaG8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYXNzaWduZmlsZScsICRyZXR1cm5pZCwgaW1hZ2Vtb2RlX2J1aWxkbGlua2NvbnRlbnQoJGJhc2V1cmwsICRmaWxlbmFtZSwgJGRpciksICRuZXdwYXJhbXMpLic8YnIvPic7DQoJCSRpbWdpbmYgPSBnZXRpbWFnZXNpemUoJGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlbmFtZSk7DQoJCWlmKCRpbWdpbmYgJiYgaXNzZXQoJGltZ2luZlsxXSkpCWVjaG8gJygnLiRpbWdpbmZbMF0uJ3gnLiRpbWdpbmZbMV0uJykgJzsNCgkJJG5ld3BhcmFtcyA9IGFycmF5X21lcmdlKCRwYXJhbXMsIGFycmF5KCdkZWxldGVmaWxlJz0+JGZpbGVuYW1lKSk7DQoJCWVjaG8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYnJvd3NlZmlsZXMnLCAkcmV0dXJuaWQsICR0aGVhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoImljb25zL3N5c3RlbS9kZWxldGUuZ2lmIiksJG5ld3BhcmFtcyk7DQoJCWVjaG8gJGNsb3NlZGl2Ow0KCX0NCgllY2hvICc8L2Rpdj48L2Rpdj4nOw0KCQ0KCWVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdhZGRmaWxlcycsICRyZXR1cm5pZCwgJ3Bvc3QnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpOw0KCWVjaG8gJzxoMz4nLmxhbmcoJ3VwbG9hZGZpbGUnKS4nOjwvaDM+PGRpdj4nOw0KCWlmKCRhZGRmaWxlcyl7DQoJCWVjaG8gJzxmaWVsZHNldCBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyI+PGxlZ2VuZD48Yj4nLiR0aGlzLT5MYW5nKCJ1cGxvYWR6aXBmaWxlIikuJzwvYj48L2xlZ2VuZD4nOw0KCQllY2hvICc8cD4nLiR0aGlzLT5MYW5nKCJ6aXBmaWxlbm90aWNlIikuJzwvcD4nOw0KCQllY2hvICc8cD4nLiR0aGlzLT5DcmVhdGVGaWxlVXBsb2FkSW5wdXQoJGlkLCd1cGxvYWR6aXBmaWxlJykuJyAnLiR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ3N1Ym1pdHppcGZpbGUnLGxhbmcoJ3NlbmQnKSkuJzwvcD48L2ZpZWxkc2V0Pic7DQoJfQ0KCWVjaG8gJzxwPicuJHRoaXMtPkxhbmcoJ3Bvc3RtYXhzaXplJykuaW5pX2dldCgncG9zdF9tYXhfc2l6ZScpLic8L3A+JzsNCglpZihpc3NldCgkcGFyYW1zWyJzaXplIl0pKQllY2hvICc8cD4oJy4kdGhpcy0+TGFuZygnYnJvd3NlZmlsZXNyZXNpemUnKS4nKTwvcD4nOw0KCWVjaG8gJzxkaXYgaWQ9ImZpbGVpbnB1dHMiPjxwPicuJHRoaXMtPkNyZWF0ZUZpbGVVcGxvYWRJbnB1dCgkaWQsJ3VwbG9hZGZpbGUnKS4nPC9wPjwvZGl2Pic7DQoJaWYoJGFkZGZpbGVzKQllY2hvICc8cD48YSBocmVmPSJqYXZhc2NyaXB0OmFkZGZpbGVpbnB1dChcJ2ZpbGVpbnB1dHNcJyx0aGlzKTsiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7Ij4nLiR0aGlzLT5MYW5nKCJhZGRmaWxlaW5wdXQiKS4nPC9hPjwvcD4nOw0KCWVjaG8gJzxwPicuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0JyxsYW5nKCdzZW5kJykpLic8L3A+JzsNCgllY2hvICRoaWRkZW47DQoJZWNobyAnPC9kaXY+JzsJCQ0KCWVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsNCgkNCn1lbHNlew0KCS8vIGxpc3QgbW9kZSAobm8gdGh1bWJuYWlscykgLSB1c2VzIGEgdGVtcGxhdGUNCgkNCgkkaW5zdGFudHNlYXJjaCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJkaXNwbGF5X2luc3RhbnRzZWFyY2giLGZhbHNlKTsNCgkkaW5zdGFudHNvcnQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZGlzcGxheV9pbnN0YW50c29ydCIsZmFsc2UpOw0KCQ0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigiYnJvd3NldGl0bGUiLCR0aGlzLT5MYW5nKCdicm93c2VmaWxlc3RpdGxlJykpOw0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigidXBsb2FkdGl0bGUiLGxhbmcoJ3VwbG9hZGZpbGUnKSk7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJzaG93aW5nZGlyIiwkdGhpcy0+TGFuZygnc2hvd2luZ2RpcicpLicgOiAnLiRkaXIpOw0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigiZm9ybXN0YXJ0IiwkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2FkZGZpbGVzJywgJHJldHVybmlkLCAncG9zdCcsICdtdWx0aXBhcnQvZm9ybS1kYXRhJykpOw0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigiZm9ybWVuZCIsJGhpZGRlbi4kdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oInJlc2l6ZW5vdGljZSIsaXNzZXQoJHBhcmFtc1sic2l6ZSJdKT8kdGhpcy0+TGFuZygnYnJvd3NlZmlsZXNyZXNpemUnKTpmYWxzZSk7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJwb3N0bWF4c2l6ZSIsJHRoaXMtPkxhbmcoJ3Bvc3RtYXhzaXplJykuaW5pX2dldCgncG9zdF9tYXhfc2l6ZScpKTsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oInN1Ym1pdCIsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0JyxsYW5nKCdzZW5kJykpKTsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImluc3RhbnRzZWFyY2giLCAkaW5zdGFudHNlYXJjaD8kdGhpcy0+TGFuZygic2VhcmNodGhpc3RhYmxlIikuIiAiLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAic2VhcmNoZmlsZXRhYmxlIiwgIiIsIDEwLCA2NCwgJyBvbmtleXVwPSJjdGxtbV9zZWFyY2godGhpcy52YWx1ZSxcJ2ZpbGVsaXN0X3RhYmxlXCcpOyInKTpmYWxzZSk7DQoNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oInppcHRpdGxlIiwgJHRoaXMtPkxhbmcoInVwbG9hZHppcGZpbGUiKSk7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJ6aXBub3RpY2UiLCAkdGhpcy0+TGFuZygiemlwZmlsZW5vdGljZSIpKTsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oInppcGlucHV0IiwgJHRoaXMtPkNyZWF0ZUZpbGVVcGxvYWRJbnB1dCgkaWQsJ3VwbG9hZHppcGZpbGUnKSk7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJ6aXBzdWJtaXQiLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXR6aXBmaWxlJyxsYW5nKCdzZW5kJykpKTsNCg0KCWlmKCRhZGRmaWxlcyl7DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigiZmlsZWlucHV0IiwnPGRpdiBpZD0iZmlsZWlucHV0cyI+PHA+Jy4kdGhpcy0+Q3JlYXRlRmlsZVVwbG9hZElucHV0KCRpZCwndXBsb2FkZmlsZScpLic8L3A+PC9kaXY+Jyk7DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigiYWRkZmlsZWlucHV0IiwnPGEgaHJlZj0iamF2YXNjcmlwdDphZGRmaWxlaW5wdXQoXCdmaWxlaW5wdXRzXCcsdGhpcyk7IiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+Jy4kdGhpcy0+TGFuZygiYWRkZmlsZWlucHV0IikuJzwvYT4nKTsNCgl9ZWxzZXsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJmaWxlaW5wdXQiLCc8cD4nLiR0aGlzLT5DcmVhdGVGaWxlVXBsb2FkSW5wdXQoJGlkLCd1cGxvYWRmaWxlJykuJzwvcD4nKTsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhZGRmaWxlaW5wdXQiLGZhbHNlKTsNCgl9DQoJDQoJJHNvcnRsaW5rcyA9IGFycmF5KCk7DQoJJG51bWVyaWNfc29ydGxpbmtzID0gYXJyYXkoKTsNCgkkaSA9IDA7DQoJd2hpbGUoJGkgPCAxMCl7DQoJCWlmKCRpbnN0YW50c29ydCl7DQoJCQkkc29ydGxpbmtzWyRpXSA9ICc8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0OyI+PGEgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiIG9uY2xpY2s9ImN0bG1tX3NvcnRSb3dzKFwnZmlsZWxpc3RfdGFibGVcJywnLiRpLicpOyI+PGltZyBzcmM9InRoZW1lcy9kZWZhdWx0L2ltYWdlcy9pY29ucy9zeXN0ZW0vc29ydF91cC5naWYiIGFsdD0iXiIvPjwvYT48YnIvPjxhIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbmNsaWNrPSJjdGxtbV9zb3J0Um93cyhcJ2ZpbGVsaXN0X3RhYmxlXCcsJy4kaS4nLHRydWUpOyI+PGltZyBzcmM9InRoZW1lcy9kZWZhdWx0L2ltYWdlcy9pY29ucy9zeXN0ZW0vc29ydF9kb3duLmdpZiIgYWx0PSJ2Ii8+PC9hPjwvZGl2PiAmbmJzcDsnOw0KCQkJJG51bWVyaWNfc29ydGxpbmtzWyRpXSA9ICc8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0OyI+PGEgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiIG9uY2xpY2s9ImN0bG1tX3NvcnRSb3dzKFwnZmlsZWxpc3RfdGFibGVcJywnLiRpLicsZmFsc2UsdHJ1ZSk7Ij48aW1nIHNyYz0idGhlbWVzL2RlZmF1bHQvaW1hZ2VzL2ljb25zL3N5c3RlbS9zb3J0X3VwLmdpZiIgYWx0PSJeIi8+PC9hPjxici8+PGEgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsiIG9uY2xpY2s9ImN0bG1tX3NvcnRSb3dzKFwnZmlsZWxpc3RfdGFibGVcJywnLiRpLicsdHJ1ZSx0cnVlKTsiPjxpbWcgc3JjPSJ0aGVtZXMvZGVmYXVsdC9pbWFnZXMvaWNvbnMvc3lzdGVtL3NvcnRfZG93bi5naWYiIGFsdD0idiIvPjwvYT48L2Rpdj4gJm5ic3A7JzsNCgkJfWVsc2V7DQoJCQkkc29ydGxpbmtzWyRpXSA9ICcnOw0KCQkJJG51bWVyaWNfc29ydGxpbmtzWyRpXSA9ICcnOw0KCQl9DQoJCSRpKys7DQoJfQ0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigic29ydGxpbmtzIiwkc29ydGxpbmtzKTsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIm51bWVyaWNfc29ydGxpbmtzIiwkbnVtZXJpY19zb3J0bGlua3MpOw0KCQ0KCSRvYmogPSBuZXcgU3RkQ2xhc3MoKTsNCgkkb2JqLT5mb2xkZXIgPSAiIjsNCgkkb2JqLT5maWxlbmFtZSA9ICR0aGlzLT5MYW5nKCJmaWxlbmFtZSIpOw0KCSRvYmotPmV4dCA9ICR0aGlzLT5MYW5nKCJmaWxlZXh0Iik7DQoJJG9iai0+c2l6ZSA9ICR0aGlzLT5MYW5nKCJmaWxlc2l6ZSIpOw0KCSRvYmotPnBpYyA9ICIiOw0KCSRvYmotPmltYWdlc2l6ZSA9ICR0aGlzLT5MYW5nKCJpbWFnZXNpemUiKTsNCgkkb2JqLT5kZWxldGVsaW5rID0gJHRoaXMtPkxhbmcoIkFjdGlvbnMiKTsNCgkkb2JqLT5tb2RpZmllZCA9ICR0aGlzLT5MYW5nKCJsYXN0bW9kIik7DQoJJG9iai0+b3duZXIgPSAkdGhpcy0+TGFuZygiZmlsZW93bmVyIik7DQoJJG9iai0+cGVybWlzc2lvbnMgPSAkdGhpcy0+TGFuZygiZmlsZXBlcm1zIik7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJoZWFkZXJzIiwkb2JqKTsNCgkNCgkkaXRlbWxpc3QgPSBhcnJheSgpOw0KCWlmKCR1cGZvbGRlcikJJGl0ZW1saXN0W10gPSBtYWtlRGlyT2JqKCIuLiIsJGRpciwkdGhpcywkcGFyYW1zLCRjdXJkaXIsJHBhcmVudGRpciwkaWQsJHJldHVybmlkKTsNCglmb3JlYWNoKCRmb2xkZXJzIGFzICRmb2xkZXIpCSRpdGVtbGlzdFtdID0gbWFrZURpck9iaigkZm9sZGVyLCRkaXIsJHRoaXMsJHBhcmFtcywkY3VyZGlyLCRwYXJlbnRkaXIsJGlkLCRyZXR1cm5pZCk7DQoJZm9yZWFjaCgkZmlsZXMgYXMgJGZpbGVuYW1lKQkkaXRlbWxpc3RbXSA9IG1ha2VGaWxlT2JqKCRmaWxlbmFtZSwkZGlyLCR0aGlzLCRwYXJhbXMsJGN1cmRpciwkaWQsJHJldHVybmlkLCRiYXNldXJsKTsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1saXN0IiwkaXRlbWxpc3QpOw0KCQ0KCWVjaG8gJw0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCic7DQoJaWYoJGluc3RhbnRzZWFyY2gpCWVjaG8gJHRoaXMtPmdldEZpbGVDb250ZW50KCJpbnN0YW50c2VhcmNoLmpzIik7DQoJaWYoJGluc3RhbnRzb3J0KQllY2hvICR0aGlzLT5nZXRGaWxlQ29udGVudCgiaW5zdGFudHNvcnQuanMiKTsNCgllY2hvICcNCgk8L3NjcmlwdD4NCic7DQoNCgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoImJyb3dzZWZpbGVzLnRwbCIpOw0KfQ0KDQplY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQp2YXIgY3RsbW1fZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCInLiRpZC4nbW9kdWxlZm9ybV8xIik7DQppZihjdGxtbV9mb3JtKQljdGxtbV9mb3JtLm9uc3VibWl0ID0gZnVuY3Rpb24oKSB7DQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN0bG1tX3N1Ym1pdG1lc3NhZ2UiKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsNCn0NCmZ1bmN0aW9uIGRpc3BsYXl0aHVtYihlbGUsdGh1bWJwYXRoLHdpZHRoLGhlaWdodCl7DQoJZWxlLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7DQoJdmFyIHRoZWltZyA9IG5ldyBJbWFnZSgpOw0KCXRoZWltZy53aWR0aCA9IHdpZHRoOw0KCXRoZWltZy5oZWlnaHQgPSBoZWlnaHQ7DQoJdGhlaW1nLnNyYyA9IHRodW1icGF0aDsNCgl0aGVpbWcuc3R5bGUuY3Vyc29yID0gInBvaW50ZXIiOw0KCXRoZWltZy5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IGhpZGV0aHVtYih0aGlzKTsgfTsNCgllbGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGVpbWcpOw0KCXJldHVybiBmYWxzZTsNCn0NCmZ1bmN0aW9uIGhpZGV0aHVtYihlbGUsdGh1bWJwYXRoLHdpZHRoLGhlaWdodCl7DQoJdmFyIHBhcmVudCA9IGVsZS5wYXJlbnROb2RlOw0KCXBhcmVudC5yZW1vdmVDaGlsZChlbGUpOw0KCXZhciB0aGVhcyA9IHBhcmVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpOw0KCXRoZWFzW3RoZWFzLmxlbmd0aC0xXS5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7DQp9DQoNCnZhciBuYmZpbGVpbnB1dCA9IDE7DQoNCmZ1bmN0aW9uIGFkZGZpbGVpbnB1dChjb250YWluZXJpZCwgYnRuKXsNCgl2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVyaWQpOw0KCWlmKCFjb250YWluZXIpIHJldHVybiBmYWxzZTsNCgluYmZpbGVpbnB1dCsrOw0KCXZhciB0bXBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7DQoJdG1waW5wdXQudHlwZSA9ICJmaWxlIjsNCgl0bXBpbnB1dC5uYW1lID0gIicuJGlkLid1cGxvYWRmaWxlIituYmZpbGVpbnB1dDsNCgl2YXIgdGhlcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsNCgl0aGVwLmFwcGVuZENoaWxkKHRtcGlucHV0KTsNCgljb250YWluZXIuYXBwZW5kQ2hpbGQodGhlcCk7DQoJaWYobmJmaWxlaW5wdXQgPT0gMTIpCWJ0bi5zdHlsZS5kaXNwbGF5ID0gZmFsc2U7DQp9DQo8L3NjcmlwdD4nOw0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCi8vIHdlIG5lZWQgdG8ga25vdyB3aGljaCBsZXZlbCBpcyB0aGUgZmluYWwgbGV2ZWwNCiRsZXZlbGFycmF5ID0gJHRoaXMtPmdldF9sZXZlbGFycmF5KCk7DQokZmluYWxsZXZlbCA9ICJzdHJlZXR2aWV3IjsNCg0KLy8gd2UgY2hlY2sgd2hhdCBsZXZlbCB3ZSdyZSB3YXRjaGluZy4uLiBpZiBub25lIGlzIHNwZWNpZmllZCwgd2UgdXNlIHRoZSBmaW5hbCBsZXZlbA0KJHdoYXQgPSAoaXNzZXQoJHBhcmFtc1sid2hhdCJdKSAmJiBpbl9hcnJheSgkcGFyYW1zWyJ3aGF0Il0sJGxldmVsYXJyYXkpKT8kcGFyYW1zWyJ3aGF0Il06JGZpbmFsbGV2ZWw7DQovLyB3ZSBnaXZlIGl0IGJhY2sgdG8gdGhlIHBhcmFtcyBmb3IgcHJldHR5IHVybHMgYW5kIHBhZ2Ugdmlldw0KaWYoIWlzc2V0KCRwYXJhbXNbIndoYXQiXSkgfHwgJHBhcmFtc1sid2hhdCJdID09ICIiKQkkcGFyYW1zWyJ3aGF0Il0gPSAkd2hhdDsNCiRwYXJlbnRsZXZlbCA9ICR0aGlzLT5nZXRfbmV4dGxldmVsKCR3aGF0LCBmYWxzZSk7DQoNCi8vIHdlIHJldHJpZXZlIHNvbWUgb3RoZXIgcGFyYW1ldGVycw0KaWYoJHdoYXQgIT0gJGZpbmFsbGV2ZWwpew0KCSRmb3JjZWxpc3QgPSB0cnVlOwkJLy8gQWx3YXlzIGRpc3BsYXkgYXMgbGlzdCB3aGVuIHdlJ3JlIG5vdCBvbiB0aGUgZmluYWwgbGV2ZWwNCn1lbHNlaWYoaXNzZXQoJHBhcmFtc1siYWxpYXMiXSkpew0KCSRmb3JjZWxpc3QgPSBmYWxzZTsJCS8vIG5ldmVyIGRpc3BsYXkgYSBsaXN0IHdoZW4gdGhlIGFsaWFzIGlzIHNwZWNpZmllZA0KfWVsc2V7DQoJLy8gZGVmYXVsdCB2YWx1ZQ0KCSRmb3JjZWxpc3QgPSBpc3NldCgkcGFyYW1zWyJmb3JjZWxpc3QiXSk/JHBhcmFtc1siZm9yY2VsaXN0Il06JHRoaXMtPkdldFByZWZlcmVuY2UoImZvcmNlX2xpc3QiLGZhbHNlKTsNCn0NCiRvcmRlcmJ5ID0gaXNzZXQoJHBhcmFtc1sib3JkZXJieSJdKT8kcGFyYW1zWyJvcmRlcmJ5Il06ZmFsc2U7DQokaW5saW5lID0gKGlzc2V0KCRwYXJhbXNbImlubGluZSJdKSAmJiAkcGFyYW1zWyJpbmxpbmUiXSk/dHJ1ZTpmYWxzZTsNCiRsaW1pdCA9IGlzc2V0KCRwYXJhbXNbImxpbWl0Il0pPyRwYXJhbXNbImxpbWl0Il06MDsNCiRsaW1pdCA9IChpbnQpICRsaW1pdDsNCmlmKGlzc2V0KCRwYXJhbXNbIm5icGVycGFnZSJdKSAmJiAkcGFyYW1zWyJuYnBlcnBhZ2UiXSA+ICRsaW1pdCl7DQoJJG5icGVycGFnZSA9IChpbnQpICRwYXJhbXNbIm5icGVycGFnZSJdOw0KfWVsc2V7DQoJLy8gZGVmYXVsdCBwYWdpbmF0aW9uDQoJJGRlZmF1bHRfbmJwZXJwYWdlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJHdoYXQuIl9wYWdpbmF0aW9uIiwwKTsNCgkkbmJwZXJwYWdlID0gKCRkZWZhdWx0X25icGVycGFnZSA+ICRsaW1pdCk/JGRlZmF1bHRfbmJwZXJwYWdlOmZhbHNlOw0KCSRwYXJhbXNbIm5icGVycGFnZSJdID0gJG5icGVycGFnZTsJLy8gZ2l2ZSBpdCBiYWNrIGZvciBsaW5rcw0KfQ0KaWYoJG5icGVycGFnZSkJJGxpbWl0ID0gKCgoaXNzZXQoJHBhcmFtc1sicGFnZWluZGV4Il0pPyRwYXJhbXNbInBhZ2VpbmRleCJdOjEpLTEpICogJG5icGVycGFnZSkuIiwiLiRuYnBlcnBhZ2U7DQoNCi8vIHdlIGJ1aWxkIHRoZSBxdWVyeS4gRmlyc3QsIHdlIGNoZWNrIGlmIHdlJ3JlIHVzaW5nIGEgc2F2ZWQgcXVlcnkgOg0KaWYoaXNzZXQoJHBhcmFtc1sicXVlcnkiXSkpew0KCSRxdWVyeWlkID0gKGludCkgJHBhcmFtc1sicXVlcnkiXTsNCglpZigkcXVlcnkgPSAkdGhpcy0+Z2V0X3F1ZXJpZXMoYXJyYXkoImlkIj0+JHF1ZXJ5aWQpKSl7DQoJCS8vIHdlIHJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgZG8gdGhlIHF1ZXJ5DQoJCSRxdWVyeSA9ICRxdWVyeVswXTsNCgkJJHdoYXQgPSAkcXVlcnktPndoYXQ7DQoJCSRnZXRmdW5jdGlvbiA9ICJnZXRfbGV2ZWxfIi4kd2hhdDsNCgkJJHBhcmVudGxldmVsID0gJHRoaXMtPmdldF9uZXh0bGV2ZWwoJHdoYXQsIGZhbHNlKTsNCgkJJHdoZXJlY2xhdXNlID0gJHF1ZXJ5LT53aGVyZWNsYXVzZTsNCgkJJHdoZXJldmFsdWVzID0gJHF1ZXJ5LT53aGVyZXZhbHVlczsNCgkJJGN1c3RvbW9yZGVyID0gKCRxdWVyeS0+cXVlcnlvcmRlciA9PSAiIj9mYWxzZTokcXVlcnktPnF1ZXJ5b3JkZXIpOw0KCX1lbHNlaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoImFsbG93X3NxbCIsZmFsc2UpKXsNCgkJJGdldGZ1bmN0aW9uID0gImdldF9sZXZlbF8iLiR3aGF0Ow0KCQkkcGFyZW50bGV2ZWwgPSAkdGhpcy0+Z2V0X25leHRsZXZlbCgkd2hhdCwgZmFsc2UpOw0KCQkkd2hlcmVjbGF1c2UgPSAkcGFyYW1zWyJxdWVyeSJdOyAvLyBxdWVyeSBzaG91bGQgYmUgc2FuaXRpemVkLi4uDQoJCSR3aGVyZXZhbHVlcyA9IGFycmF5KCk7DQoJCSRjdXN0b21vcmRlciA9IGZhbHNlOw0KCQkkaXRlbWxpc3QgPSAkdGhpcy0+JGdldGZ1bmN0aW9uKGFycmF5KCksIGZhbHNlLCAiIiwgIiIsICRvcmRlcmJ5LCAkbGltaXQsICRxdWVyeSk7DQoJfWVsc2V7DQoJCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoImVycm9yX3dyb25ncXVlcnkiKTsNCgkJaWYoJHF1ZXJ5aWQgIT0gJHF1ZXJ5ICYmICRtc2cgPSBteXNxbF9lcnJvcigpKQkJJG1lc3NhZ2UgLj0gIjxici8+Ii4kdGhpcy0+TGFuZygiZ2l2ZW5lcnJvciIpLiRtc2c7DQoJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJG1lc3NhZ2UpOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KCWlmKCFpc3NldCgkcGFyYW1zWyJhbGlhcyJdKSAmJiAkbmJwZXJwYWdlKXsNCgkJLy8gd2UgbmVlZCBwYWdpbmF0aW9uIC0gc28gd2UgZmlyc3QgcmV0cmlldmUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBmaXR0aW5nIHRoZSBxdWVyeQ0KCQkkdG90YWwgPSAkdGhpcy0+Y291bnRzb21ldGhpbmcoJHdoYXQsImlkIixhcnJheSgpLCR3aGVyZWNsYXVzZSwgJHdoZXJldmFsdWVzLCAkcGFyZW50bGV2ZWwpOw0KCX0NCglpZihpc3NldCgkdG90YWwpICYmICR0b3RhbCA9PSAwKXsNCgkJJGl0ZW1saXN0ID0gYXJyYXkoKTsJLy8gd2UgYWxyZWFkeSBrbm93IHRoZXJlJ3Mgbm90aGluZyB0byBxdWVyeQ0KCX1lbHNlew0KCQkkaXRlbWxpc3QgPSAkdGhpcy0+JGdldGZ1bmN0aW9uKGFycmF5KCksIGZhbHNlLCAiIiwgIiIsICRvcmRlcmJ5LCAkbGltaXQsICR3aGVyZWNsYXVzZSwgJHdoZXJldmFsdWVzLCAkY3VzdG9tb3JkZXIpOw0KCX0NCn1lbHNlew0KCS8vIHdlJ3JlIG5vdCB1c2luZyBhIHNhdmVkIHF1ZXJ5LCBzbyB3ZSBwYXJzZSB0aGUgcGFyYW1ldGVycw0KCS8vIHdlIHJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgZG8gdGhlIHF1ZXJ5DQoJJGdldGZ1bmN0aW9uID0gImdldF9sZXZlbF8iLiR3aGF0Ow0KCS8vIFRoZSAkd2hlcmUgaG9sZHMgZWxlbWVudHMgb2YgdGhlIFdIRVJFIGNsYXVzZSBvZiB0aGUgcXVlcnksIGluIHRoZSBmb3JtIGZpZWxkX25hbWU9PmZpZWxkX3ZhbHVlDQoJaWYoaXNzZXQoJHBhcmFtc1siYWxpYXMiXSkgJiYgJHBhcmFtc1siYWxpYXMiXSAhPSAiIikgew0KCQkkd2hlcmUgPSBhcnJheSgiYWxpYXMiPT4kcGFyYW1zWyJhbGlhcyJdKTsNCgl9ZWxzZWlmKGlzc2V0KCRwYXJhbXNbInNob3dkZWZhdWx0Il0pICYmICRwYXJhbXNbInNob3dkZWZhdWx0Il0pIHsNCgkJJHdoZXJlID0gYXJyYXkoImlzZGVmYXVsdCI9PjEpOw0KCX1lbHNlew0KCQkkd2hlcmUgPSBhcnJheSgpOw0KCX0NCglpZihpc3NldCgkcGFyYW1zWyJwYXJlbnQiXSkgJiYgJHBhcmFtc1sicGFyZW50Il0gIT0gIiIpICR3aGVyZVsicGFyZW50Il0gPSAkcGFyYW1zWyJwYXJlbnQiXTsNCg0KCSR3aGVyZVsiYWN0aXZlIl0gPSAxOw0KCWlmKCFpc3NldCgkcGFyYW1zWyJhbGlhcyJdKSAmJiAkbmJwZXJwYWdlKXsNCgkJLy8gd2UgbmVlZCBwYWdpbmF0aW9uIC0gc28gd2UgZmlyc3QgcmV0cmlldmUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBmaXR0aW5nIHRoZSBxdWVyeQ0KCQkkdG90YWwgPSAkdGhpcy0+Y291bnRzb21ldGhpbmcoJHdoYXQsImlkIiwkd2hlcmUsZmFsc2UsYXJyYXkoKSwkcGFyZW50bGV2ZWwpOw0KCX0NCglpZihpc3NldCgkdG90YWwpICYmICR0b3RhbCA9PSAwKXsNCgkJJGl0ZW1saXN0ID0gYXJyYXkoKTsJLy8gd2UgYWxyZWFkeSBrbm93IHRoZXJlJ3Mgbm90aGluZyB0byBxdWVyeQ0KCX1lbHNlew0KCQkkaXRlbWxpc3QgPSAkdGhpcy0+JGdldGZ1bmN0aW9uKCR3aGVyZSwgZmFsc2UsICIiLCAiIiwgJG9yZGVyYnksICRsaW1pdCk7DQoJfQ0KfQ0KDQovLyBJbnRlZ3JhdGlvbiB3b3VsZCByZXF1aXJlIHNvbWUgY2hhbmdlcyB0byBDYXJ0TWFkZVNpbXBsZQ0KLy8gJGl0ZW1saXN0ID0gJHRoaXMtPmFkZENhcnRVcmxzKCRpdGVtbGlzdCwkaWQsJHJldHVybmlkKTsNCg0KDQoNCi8vICBTVEFSVCBQUk9DRVNTSU5HDQoNCmlmKGNvdW50KCRpdGVtbGlzdCkgPT0gMSAmJiAhJGZvcmNlbGlzdCl7DQoJDQoJLy8gIyMjIyMjIyMjIyMjIyMjIyMgV0UgQVJFIERJU1BMQVlJTkcgQU4gSVRFTSBJTiBERVRBSUwgVklFVw0KCQ0KCSRpdGVtPSRpdGVtbGlzdFswXTsNCg0KCS8vIGlmIGEgdGVtcGxhdGUgaGFzIGJlZW4gc3BlY2lmaWVkLCB3ZSB0cnkgdG8gcmV0cmlldmUgaXQJDQoJJHRlbXBsYXRlID0gZmFsc2U7DQoJaWYoaXNzZXQoJHBhcmFtc1siZmluYWx0ZW1wbGF0ZSJdKSAmJiAkcGFyYW1zWyJmaW5hbHRlbXBsYXRlIl0gIT0gIiIpew0KCQkkdGVtcGxhdGUgPSAkdGhpcy0+R2V0VGVtcGxhdGUoJHBhcmFtc1siZmluYWx0ZW1wbGF0ZSJdKTsNCgl9DQoNCgkvLyBpZiBubyB0ZW1wbGF0ZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHdlIHJldHJpZXZlIHRoZSBkZWZhdWx0IGZpbmFsIHRlbXBsYXRlDQoJaWYoISR0ZW1wbGF0ZSB8fCAkdGVtcGxhdGUgPT0gIiIpew0KCQkkdGVtcGxhdGVuYW1lID0gJHRoaXMtPkdldFByZWZlcmVuY2UoImZpbmFsdGVtcGxhdGUiKTsNCgkJJHRlbXBsYXRlID0gJHRoaXMtPkdldFRlbXBsYXRlKCR0ZW1wbGF0ZW5hbWUsICR0aGlzLT5HZXROYW1lKCkpOw0KCX0NCgkvLyB3ZSByZXRyaWV2ZSB0aGUgcGFyZW50IHRyZWU6DQoJJHBhcmVudHRyZWUgPSAkdGhpcy0+Z2V0X29ianRyZWUoICRpdGVtLT5wYXJlbnRfaWQsICR0aGlzLT5nZXRfbmV4dGxldmVsKCR3aGF0LCBmYWxzZSkgKTsNCgkkaXRlbS0+cGFyZW50X29iamVjdCA9ICRwYXJlbnR0cmVlOw0KDQoJDQoJLy8gaWYgdGhlIGl0ZW0gaGFzIHBhcmVudHMsIHdlIGFzc2lnbiBsaW5rcyB0byB0aGF0IHBhcmVudA0KCWlmKGlzc2V0KCRpdGVtLT5wYXJlbnRfYWxpYXMpKXsNCgkJJHByZXR0eXVybCA9ICR0aGlzLT5CdWlsZFByZXR0eVVybHMoYXJyYXkoInBhcmVudCI9PiRpdGVtLT5wYXJlbnRfYWxpYXMsICJ3aGF0Ij0+JHdoYXQpLCAkcmV0dXJuaWQpOw0KCQkkaXRlbS0+cGFyZW50bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImRlZmF1bHQiLCAkcmV0dXJuaWQsICRpdGVtLT5wYXJlbnRfbmFtZSwgYXJyYXkoInBhcmVudCI9PiRpdGVtLT5wYXJlbnRfYWxpYXMpLCAiIiwgZmFsc2UsICRpbmxpbmUsICIiLCBmYWxzZSwgJHByZXR0eXVybCk7DQoJCSRpdGVtLT5wYXJlbnR1cmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICJkZWZhdWx0IiwgJHJldHVybmlkLCAiIiwgYXJyYXkoInBhcmVudCI9PiRpdGVtLT5wYXJlbnRfYWxpYXMpLCAiIiwgdHJ1ZSwgJGlubGluZSwgIiIsIGZhbHNlLCAkcHJldHR5dXJsKTsNCgl9DQoJDQoJLy8gd2UgcmV0cmlldmUgYSBsYWJlbCBmb3IgZWFjaCBvZiB0aGUgaXRlbSdzIGZpZWxkIGFuZCBhc3NpZ24gaXQgdG8gc21hcnR5DQoJJGxhYmVscyA9IG5ldyBTdGRDbGFzcygpOw0KCWZvcmVhY2goJGl0ZW0gYXMgJGtleT0+JHZhbHVlKXsNCgkJJGxhYmVscy0+JGtleSA9ICR0aGlzLT5MYW5nKCR3aGF0LiJfIi4ka2V5KTsJCQ0KCX0NCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImxhYmVscyIsICRsYWJlbHMpOw0KCQ0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigiaXRlbSIsJGl0ZW0pOw0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigibGV2ZWx0aXRsZSIsJHRoaXMtPkxhbmcoJHdoYXQuIl9wbHVyYWwiKSk7DQoNCglpZighaXNzZXQoJHBhcmFtc1sicXVlcnkiXSkgJiYgJHRoaXMtPkdldFByZWZlcmVuY2UoImxvYWRfbmV4dHByZXZpb3VzIixmYWxzZSkpew0KCQkvLyB3ZSBsb2FkIGxpbmtzIHRvIG5leHQgYW5kIHByZXZpb3VzIGl0ZW1zDQoJCS8vIGFzIHRoaXMgaW1wbGllcyB0d28gbW9yZSBxdWVyaWVzLCBpdCBtdXN0IGJlIGFjdGl2YXRlZCBpbiB0aGUgc2V0dGluZ3MgdGFicw0KCQkkbmV3d2hlcmUgPSBhcnJheSgiYWN0aXZlIj0+MSk7DQoJCWlmKGlzc2V0KCRwYXJhbXNbInBhcmVudCJdKSl7DQoJCQkkbmV3d2hlcmVbInBhcmVudCJdID0gJHBhcmFtc1sicGFyZW50Il07CQ0KCQl9ZWxzZWlmKGlzc2V0KCRpdGVtLT5wYXJlbnRfYWxpYXMpICYmICR0aGlzLT5nZXRPcmRlclR5cGUoJHdoYXQpKXsNCgkJCSRuZXd3aGVyZVsicGFyZW50Il0gPSAkaXRlbS0+cGFyZW50X2FsaWFzOw0KCQl9DQoJCSRuZXh0aXRlbSA9IGZhbHNlOw0KCQkkbmV3d2hlcmVbIml0ZW1fb3JkZXIiXSA9ICRpdGVtLT5pdGVtX29yZGVyICsgMTsNCgkJJG5ld3Bhcm1zID0gJHBhcmFtczsNCgkJJHRtcGl0ZW0gPSAkdGhpcy0+JGdldGZ1bmN0aW9uKCRuZXd3aGVyZSk7DQoJCWlmKGlzc2V0KCR0bXBpdGVtWzBdKSl7DQoJCQkkbmV3cGFybXNbImFsaWFzIl0gPSAkdG1waXRlbVswXS0+YWxpYXM7DQoJCQkkbmV4dGl0ZW0gPSAkdGhpcy0+YWRkZnJvbnRlbmR1cmxzKCR0bXBpdGVtWzBdLCRuZXdwYXJtcywkaWQsJHJldHVybmlkKTsNCgkJfQ0KCQkkcHJldml0ZW0gPSBmYWxzZTsNCgkJaWYoJGl0ZW0tPml0ZW1fb3JkZXIgPiAxKXsNCgkJCSRuZXd3aGVyZVsiaXRlbV9vcmRlciJdID0gJGl0ZW0tPml0ZW1fb3JkZXIgLSAxOw0KCQkJJHRtcGl0ZW0gPSAkdGhpcy0+JGdldGZ1bmN0aW9uKCRuZXd3aGVyZSk7DQoJCQlpZihpc3NldCgkdG1waXRlbVswXSkpew0KCQkJCSRuZXdwYXJtc1siYWxpYXMiXSA9ICR0bXBpdGVtWzBdLT5hbGlhczsNCgkJCQkkcHJldml0ZW0gPSAkdGhpcy0+YWRkZnJvbnRlbmR1cmxzKCR0bXBpdGVtWzBdLCRuZXdwYXJtcywkaWQsJHJldHVybmlkKTsNCgkJCX0NCgkJfQ0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIm5leHRfaXRlbSIsJG5leHRpdGVtKTsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJwcmV2aW91c19pdGVtIiwkcHJldml0ZW0pOw0KCX0NCgkNCgkvLyB3ZSBwcm9jZXNzIHRoZSB0ZW1wbGF0ZQ0KCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCR0ZW1wbGF0ZSk7DQoJDQp9ZWxzZWlmKGNvdW50KCRpdGVtbGlzdCkgPiAwKXsNCgkNCgkvLyAjIyMjIyMjIyMjIyMjIyMjIyBXRSBBUkUgRElTUExBWUlORyBBIExJU1QgVklFVw0KCSRwYXJlbnRvYmogPSBmYWxzZTsNCgkvLyBpZiB3ZSBhcmUgd2F0Y2hpbmcgaXRlbXMgZnJvbSBhIHNwZWNpZmljIHBhcmVudHMsIHdlIHdhbnQgdG8gaGF2ZSB0aGUgaW5mb3JtYXRpb25zIG9mIHRoaXMgcGFyZW50IGF2YWlsYWJsZQ0KCS8vIGluIHRoZSB0ZW1wbGF0ZSAoZm9yIGV4YW1wbGUsIGlmIHdlIHdhbnQgdG8gZGlzcGxheSBhIGNhdGVnb3J5IHBhZ2UsIHdlIG1pZ2h0IHdhbnQgdG8gc2hvdyB0aGUgY2F0ZWdvcnkgZGVzY3JpcHRpb24pDQoJLy8gaWYgaXQgaXMgdGhlIGNhc2UsIHdlIHJldHJpZXZlIHRoZSBwYXJlbnQgYW5kIGdpdmUgaXQgdG8gc21hcnR5DQoJaWYoaXNzZXQoJHBhcmFtc1sicGFyZW50Il0pICYmICRwYXJhbXNbInBhcmVudCJdICE9ICIiKXsNCgkJJHBhcmVudG9iaiA9ICR0aGlzLT5nZXRfb2JqdHJlZSgkcGFyYW1zWyJwYXJlbnQiXSwgJHRoaXMtPmdldF9uZXh0bGV2ZWwoJHdoYXQsZmFsc2UpLCAiYWxpYXMiKTsNCgl9DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJwYXJlbnRvYmoiLCRwYXJlbnRvYmopOw0KCQ0KCSRzZWxlY3RlZGFsaWFzID0gZmFsc2U7DQoJLy8gd2UgY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFnZSBoYXMgb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBtb2R1bGUgd2hpY2ggYXJlIGluIGFjdGlvbg0KCSRnbG9iID0gJHRoaXMtPmdldF9tb2R1bGVHZXRWYXJzKCk7DQoJaWYoJHdoYXQgPT0gJGZpbmFsbGV2ZWwgJiYgaXNzZXQoJGdsb2JbImFsaWFzIl0pKXsNCgkJJHNlbGVjdGVkYWxpYXMgPSAkZ2xvYlsiYWxpYXMiXTsNCgl9ZWxzZWlmKGlzc2V0KCRnbG9iWyJwYXJlbnQiXSkgJiYgaXNzZXQoJGdsb2JbIndoYXQiXSkgJiYgJGdsb2JbIndoYXQiXSA9PSAkdGhpcy0+Z2V0X25leHRsZXZlbCgkd2hhdCkpew0KCQkkc2VsZWN0ZWRhbGlhcyA9ICRnbG9iWyJwYXJlbnQiXTsNCgl9DQoJaWYoaXNzZXQoJHBhcmFtc1sibmJwZXJwYWdlIl0pICYmIGlzc2V0KCRnbG9iWyJwYWdlaW5kZXgiXSkgJiYgIWlzc2V0KCRwYXJhbXNbInBhZ2VpbmRleCJdKSkgJHBhcmFtc1sicGFnZWluZGV4Il0gPSAkZ2xvYlsicGFnZWluZGV4Il07DQoJaWYoIWlzc2V0KCR0aGlzLT5wbGN1cnJlbnRbJHdoYXRdKSkJJHRoaXMtPmJ1aWxkR2xvYmFsVHJlZSgpOw0KCWlmKGlzc2V0KCR0aGlzLT5wbGN1cnJlbnRbJHdoYXRdKSkJJHNlbGVjdGVkYWxpYXMgPSAkdGhpcy0+cGxjdXJyZW50WyR3aGF0XTsNCglpZihpc3NldCgkcGFyYW1zWyJuYnBlcnBhZ2UiXSkgJiYgIWlzc2V0KCRwYXJhbXNbInBhZ2VpbmRleCJdKSkgJHBhcmFtc1sicGFnZWluZGV4Il0gPSAkdGhpcy0+Y3VycmVudHBhZ2VpbmRleDsNCgkkbGlua3JldHVybmlkID0gKGlzc2V0KCRwYXJhbXNbImRldGFpbHBhZ2UiXSkpPyR0aGlzLT5nZXRfcGFnZWlkKCRwYXJhbXNbImRldGFpbHBhZ2UiXSk6JHJldHVybmlkOw0KDQoJLy8gd2UgcmV0cmlldmUgdGhlIHRlbXBsYXRlDQoJaWYoaXNzZXQoJHBhcmFtc1sibGlzdHRlbXBsYXRlIl0pICYmICRwYXJhbXNbImxpc3R0ZW1wbGF0ZSJdICE9ICIiICYmICRjdXN0b210cGwgPSAkdGhpcy0+R2V0VGVtcGxhdGUoJHBhcmFtc1sibGlzdHRlbXBsYXRlIl0sICR0aGlzLT5HZXROYW1lKCkpKXsNCgkJJHRlbXBsYXRlID0gJGN1c3RvbXRwbDsNCgl9ZWxzZXsNCgkJJHRlbXBsYXRlbmFtZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJsaXN0dGVtcGxhdGVfIi4kd2hhdCk7DQoJCSR0ZW1wbGF0ZSA9ICR0aGlzLT5HZXRUZW1wbGF0ZSgkdGVtcGxhdGVuYW1lLCAkdGhpcy0+R2V0TmFtZSgpKTsNCgl9DQoNCgkvLyBpZiBSQU5ET00gb3B0aW9uIGlzIHNldCwgd2UgcmFuZG9tbHkgc2VsZWN0ZWQgb25seSBhIG51bWJlciBvZiB0aGUgaXRlbXMgcmV0cmlldmVkDQoJaWYoIGlzc2V0KCRwYXJhbXNbInJhbmRvbSJdKSAmJiAkcGFyYW1zWyJyYW5kb20iXSA+IDAgJiYgJHBhcmFtc1sicmFuZG9tIl0gPCBjb3VudCgkaXRlbWxpc3QpICl7DQoJCSRuZXdsaXN0ID0gYXJyYXkoKTsNCgkJJGkgPSAxOw0KCQkkc2VsZWN0ZWQgPSBhcnJheSgpOw0KCQkkY3VycmFuZCA9IHJhbmQoMCwoY291bnQoJGl0ZW1saXN0KS0xKSk7DQoJCXdoaWxlKCRpIDw9ICRwYXJhbXNbInJhbmRvbSJdKXsNCgkJCXdoaWxlKGluX2FycmF5KCRjdXJyYW5kLCAkc2VsZWN0ZWQpICYmIGNvdW50KCRzZWxlY3RlZCkgPCBjb3VudCgkaXRlbWxpc3QpKQkkY3VycmFuZCA9IHJhbmQoMCwoY291bnQoJGl0ZW1saXN0KS0xKSk7DQoJCQkkbmV3bGlzdFtdID0gJGl0ZW1saXN0WyRjdXJyYW5kXTsNCgkJCSRzZWxlY3RlZFtdID0gJGN1cnJhbmQ7DQoJCQkkaSsrOw0KCQl9DQoJCSRpdGVtbGlzdCA9ICRuZXdsaXN0Ow0KCX0NCgkJDQoJLy8gZmluYWwgcHJvY2Vzc2luZyAtIHdlIGNyZWF0ZSB0aGUgZGV0YWlsbGlua3MgZm9yIGVhY2ggaXRlbQ0KCSRuZXdsaXN0ID0gYXJyYXkoKTsNCglmb3JlYWNoKCRpdGVtbGlzdCBhcyAkaXRlbSl7DQoJCSRpdGVtID0gJHRoaXMtPmFkZGZyb250ZW5kdXJscygkaXRlbSwkcGFyYW1zLCRpZCwkbGlua3JldHVybmlkKTsNCgkJJGl0ZW0tPmlzX3NlbGVjdGVkID0gKCRpdGVtLT5hbGlhcyA9PSAkc2VsZWN0ZWRhbGlhcyk/dHJ1ZTpmYWxzZTsNCgkJYXJyYXlfcHVzaCgkbmV3bGlzdCwgJGl0ZW0pOw0KCX0NCgkkaXRlbWxpc3QgPSAkbmV3bGlzdDsNCgkNCgkkdGhpcy0+cGFnaW5hdGUoJHdoYXQsJHRvdGFsLCRpZCwkcmV0dXJuaWQsJHBhcmFtcyk7DQoJDQoJLy8gd2UgZ2l2ZSBldmVyeXRoaW5nIHRvIHNtYXJ0eSBhbmQgcHJvY2VzcyB0aGUgdGVtcGxhdGUNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1saXN0IiwkaXRlbWxpc3QpOw0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigibGV2ZWx0aXRsZSIsJHRoaXMtPkxhbmcoJHdoYXQuIl9wbHVyYWwiKSk7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJpdGVtY291bnQiLGNvdW50KCRpdGVtbGlzdCkpOw0KCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCR0ZW1wbGF0ZSk7DQoJDQp9ZWxzZXsNCgkNCgkvLyAjIyMjIyMjIyMjIyMjIyMjIyBXRSBBUkVOJ1QgRElTUExBWUlORyBBTllUSElORyBBVCBBTEwNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImVycm9yX21zZyIsKGlzc2V0KCRwYXJhbXNbImFsaWFzIl0pPyR0aGlzLT5MYW5nKCJlcnJvcl9ub3Rmb3VuZCIpOiR0aGlzLT5MYW5nKCJlcnJvcl9ub2l0ZW1mb3VuZCIpKSk7DQoJJHBhcmVudG9iaiA9IGZhbHNlOw0KCWlmKGlzc2V0KCRwYXJhbXNbInBhcmVudCJdKSAmJiAkcGFyZW50bGV2ZWwpew0KCQkkdG1wZnVuY3Rpb24gPSAiZ2V0X2xldmVsXyIuJHBhcmVudGxldmVsOw0KCQkkcGFyZW50b2JqID0gJHRoaXMtPiR0bXBmdW5jdGlvbihhcnJheSgiYWxpYXMiPT4kcGFyYW1zWyJwYXJlbnQiXSkpOw0KCQkkcGFyZW50b2JqID0gaXNzZXQoJHBhcmVudG9ialswXSk/JHBhcmVudG9ialswXTpmYWxzZTsNCgl9DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJwYXJlbnRvYmoiLCRwYXJlbnRvYmopOw0KCQ0KCSR0ZW1wbGF0ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJlbXB0eXRlbXBsYXRlIiwiKioiKTsNCglpZigkdGVtcGxhdGUgPT0gIioqIil7DQoJCS8vIHdlIHVzZSB0aGUgbGlzdCB0ZW1wbGF0ZQ0KCQlpZihpc3NldCgkcGFyYW1zWyJsaXN0dGVtcGxhdGUiXSkgJiYgJHBhcmFtc1sibGlzdHRlbXBsYXRlIl0gIT0gIiIgJiYgJGN1c3RvbXRwbCA9ICR0aGlzLT5HZXRUZW1wbGF0ZSgkcGFyYW1zWyJsaXN0dGVtcGxhdGUiXSwgJHRoaXMtPkdldE5hbWUoKSkpew0KCQkJJHRlbXBsYXRlID0gJGN1c3RvbXRwbDsNCgkJfWVsc2V7DQoJCQkkdGVtcGxhdGVuYW1lID0gJHRoaXMtPkdldFByZWZlcmVuY2UoImxpc3R0ZW1wbGF0ZV8iLiR3aGF0KTsNCgkJCSR0ZW1wbGF0ZSA9ICR0aGlzLT5HZXRUZW1wbGF0ZSgkdGVtcGxhdGVuYW1lLCAkdGhpcy0+R2V0TmFtZSgpKTsNCgkJfQ0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1saXN0IiwkaXRlbWxpc3QpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImxldmVsdGl0bGUiLCR0aGlzLT5MYW5nKCR3aGF0LiJfcGx1cmFsIikpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1jb3VudCIsMCk7DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbihhcnJheSgicGFnZV9zaG93aW5nIj0+ZmFsc2UsInBhZ2VfdG90YWxpdGVtcyI9PmZhbHNlLCJwYWdlX3BhZ2VudW1iZXJzIj0+ZmFsc2UsInBhZ2VfbmV4dCI9PmZhbHNlLCJwYWdlX3ByZXZpb3VzIj0+ZmFsc2UpKTsNCgkJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJHRlbXBsYXRlKTsNCgl9ZWxzZXsNCgkJLy8gd2UgdXNlIHRoZSBub3Jlc3VsdCB0ZW1wbGF0ZQ0KCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHRlbXBsYXRlKTsNCgl9DQoNCn0NCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KJGFkbWludGhlbWUgPSAkZ0Ntcy0+dmFyaWFibGVzWyJhZG1pbnRoZW1lIl07DQokYWN0aXZlX3RhYiA9IGlzc2V0KCRwYXJhbXNbImFjdGl2ZV90YWIiXSk/JHBhcmFtc1siYWN0aXZlX3RhYiJdOiJzdHJlZXR2aWV3IjsNCg0KJGhhc19hZHZhbmNlZF9wZXJtID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbigic3RyZWV0dmlld19hZHZhbmNlZCIpOw0KDQokZmlsdGVyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoImRpc3BsYXlfZmlsdGVyIixmYWxzZSk7DQokaW5zdGFudHNlYXJjaCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJkaXNwbGF5X2luc3RhbnRzZWFyY2giLGZhbHNlKTsNCiRpbnN0YW50c29ydCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJkaXNwbGF5X2luc3RhbnRzb3J0IixmYWxzZSk7DQokYWRtaW5wYWdlcyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJhZG1pbnBhZ2VzIiwwKTsNCiR1c2VfaGllcmFyY2h5ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoInVzZV9oaWVyYXJjaHkiLGZhbHNlKTsNCiR1c2Vfc2Vzc2lvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ1c2Vfc2Vzc2lvbiIsdHJ1ZSk7DQoNCmlmKCRpbnN0YW50c29ydCB8fCAkaW5zdGFudHNlYXJjaCl7DQoJZWNobyAnDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KJzsNCglpZigkaW5zdGFudHNlYXJjaCkJZWNobyAkdGhpcy0+Z2V0RmlsZUNvbnRlbnQoImluc3RhbnRzZWFyY2guanMiKTsNCglpZigkaW5zdGFudHNvcnQpCWVjaG8gJHRoaXMtPmdldEZpbGVDb250ZW50KCJpbnN0YW50c29ydC5qcyIpOw0KCWVjaG8gIg0KCTwvc2NyaXB0Pg0KIjsNCn0NCg0KZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7DQoJaWYoICRoYXNfYWR2YW5jZWRfcGVybSB8fCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGFiZGlzcGxheV9zdHJlZXR2aWV3IixmYWxzZSkgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbigic3RyZWV0dmlld19tYW5hZ2Vfc3RyZWV0dmlldyIpICkgew0KCQllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoInN0cmVldHZpZXciLCAkdGhpcy0+TGFuZygic3RyZWV0dmlld19wbHVyYWwiKSwgInN0cmVldHZpZXciID09ICRhY3RpdmVfdGFiID8gdHJ1ZSA6IGZhbHNlKTsNCmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigibWFwIiwgJHRoaXMtPkxhbmcoIm1hcCIpLCAibWFwIiA9PSAkYWN0aXZlX3RhYiA/IHRydWUgOiBmYWxzZSk7DQoNCgl9DQoJaWYoICRoYXNfYWR2YW5jZWRfcGVybSB8fCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCJNb2RpZnkgVGVtcGxhdGVzIikgfHwgJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmRpc3BsYXlfdGVtcGxhdGVzIixmYWxzZSkgKSB7DQoJCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigidGVtcGxhdGVzIiwgJHRoaXMtPkxhbmcoInRlbXBsYXRlcyIpLCAidGVtcGxhdGVzIiA9PSAkYWN0aXZlX3RhYiA/IHRydWUgOiBmYWxzZSk7CQkNCgl9DQoJaWYoICRoYXNfYWR2YW5jZWRfcGVybSB8fCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGFiZGlzcGxheV9xdWVyaWVzIixmYWxzZSkgKSB7DQoJCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigicXVlcmllcyIsICR0aGlzLT5MYW5nKCJxdWVyaWVzIiksICJxdWVyaWVzIiA9PSAkYWN0aXZlX3RhYiA/IHRydWUgOiBmYWxzZSk7CQkNCgl9DQoJaWYoICRoYXNfYWR2YW5jZWRfcGVybSApIHsNCgkJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCJwcmVmZXJlbmNlcyIsICR0aGlzLT5MYW5nKCJwcmVmZXJlbmNlcyIpLCAicHJlZmVyZW5jZXMiID09ICRhY3RpdmVfdGFiID8gdHJ1ZSA6IGZhbHNlKTsJCQ0KCX0NCmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsNCg0KDQoNCmVjaG8gJHRoaXMtPlN0YXJ0VGFiQ29udGVudCgpOw0KDQoNCmlmKCAkaGFzX2FkdmFuY2VkX3Blcm0gfHwgJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmRpc3BsYXlfc3RyZWV0dmlldyIsZmFsc2UpIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oInN0cmVldHZpZXdfbWFuYWdlX3N0cmVldHZpZXciKSApIHsNCgllY2hvICR0aGlzLT5TdGFydFRhYigic3RyZWV0dmlldyIpOw0KDQoJCSR3aGVyZWNsYXVzZSA9IGFycmF5KCk7DQoJCSRmaWx0ZXJvdXRwdXQgPSBmYWxzZTsNCg0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImZpbHRlciIsICRmaWx0ZXJvdXRwdXQpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImluc3RhbnRzZWFyY2giLCAkaW5zdGFudHNlYXJjaD8kdGhpcy0+TGFuZygic2VhcmNodGhpc3RhYmxlIikuIiAiLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAic2VhcmNodGFibGVfc3RyZWV0dmlldyIsICIiLCAxMCwgNjQsICcgb25rZXl1cD0iY3RsbW1fc2VhcmNoKHRoaXMudmFsdWUsXCdzdHJlZXR2aWV3X3RhYmxlXCcpOyInKTpmYWxzZSk7DQoJCQkNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhZGRuZXciLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICJlZGl0QSIsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYiLCAiIiwiIiwiIiwic3lzdGVtaWNvbiIpLiIgIi4kdGhpcy0+TGFuZygiYWRkX3N0cmVldHZpZXciKSkpOw0KCQkkcmVvcmRlcl9idG4gPSBmYWxzZTtpZigkaGFzX2FkdmFuY2VkX3Blcm0gfHwgISR0aGlzLT5HZXRQcmVmZXJlbmNlKCJyZXN0cmljdF9wZXJtaXNzaW9ucyIsZmFsc2UpIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oInN0cmVldHZpZXdfbWFuYWdlX3N0cmVldHZpZXciKSkJJHJlb3JkZXJfYnRuID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAicmVvcmRlciIsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvc3lzdGVtL3Jlb3JkZXIuZ2lmIiwgIiIsIiIsIiIsInN5c3RlbWljb24iKS4iICIuJHRoaXMtPkxhbmcoInJlb3JkZXIiKSk7DQoJCQkNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJyZW9yZGVyIiwgJHJlb3JkZXJfYnRuKTsNCgkJJGxpbWl0ID0gZmFsc2U7DQoJCWlmKCRhZG1pbnBhZ2VzKXsNCgkJCSRsaW1pdCA9ICgoaXNzZXQoJHBhcmFtc1sic3RyZWV0dmlld19wYWdlIl0pPyRwYXJhbXNbInN0cmVldHZpZXdfcGFnZSJdOjApICogJGFkbWlucGFnZXMpLiIsIi4kYWRtaW5wYWdlczsNCgkJfQ0KCQkNCgkJCSRpdGVtbGlzdCA9ICR0aGlzLT5nZXRfbGV2ZWxfc3RyZWV0dmlldyhpc3NldCgkd2hlcmVjbGF1c2UpPyR3aGVyZWNsYXVzZTphcnJheSgpLHRydWUsICRpZCwgJHJldHVybmlkLCBmYWxzZSwgJGxpbWl0KTsNCgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigidGFibGVpZCIsICJzdHJlZXR2aWV3X3RhYmxlIik7DQoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1saXN0IiwgJGl0ZW1saXN0KTsNCgkJCSRhZG1pbnNob3cgPSBhcnJheSgNCgkJCQlhcnJheSgkdGhpcy0+TGFuZygibmFtZSIpLCJlZGl0bGluayIsZmFsc2UpLA0KCQkJCWFycmF5KCR0aGlzLT5MYW5nKCJpbnNlcnRfdGFnIiksImluc2VydFRhZyIsdHJ1ZSksDQoJCQkJYXJyYXkoJHRoaXMtPkxhbmcoImFjdGl2ZSIpLCJ0b2dnbGVhY3RpdmUiLHRydWUpLA0KCQkJCWFycmF5KCR0aGlzLT5MYW5nKCJyZW9yZGVyIiksIm1vdmVsaW5rcyIsdHJ1ZSksDQoJCQkJYXJyYXkoJHRoaXMtPkxhbmcoIkFjdGlvbnMiKSwiZGVsZXRlbGluayIsdHJ1ZSkJCQ0KCQkJCSk7DQoJCQlpZigkaW5zdGFudHNvcnQgJiYgY291bnQoJGl0ZW1saXN0KT4xKXsNCgkJCQkkaSA9IDA7DQoJCQkJd2hpbGUoJGk8Y291bnQoJGFkbWluc2hvdykpew0KCQkJCQlpZighJGFkbWluc2hvd1skaV1bMl0pCSRhZG1pbnNob3dbJGldWzBdID0gJzxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7Ij48YSBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25jbGljaz0iY3RsbW1fc29ydFJvd3MoXCdzdHJlZXR2aWV3X3RhYmxlXCcsJy4kaS4nKTsiPjxpbWcgc3JjPSJ0aGVtZXMvZGVmYXVsdC9pbWFnZXMvaWNvbnMvc3lzdGVtL3NvcnRfdXAuZ2lmIiBhbHQ9Il4iLz48L2E+PGJyLz48YSBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25jbGljaz0iY3RsbW1fc29ydFJvd3MoXCdzdHJlZXR2aWV3X3RhYmxlXCcsJy4kaS4nLHRydWUpOyI+PGltZyBzcmM9InRoZW1lcy9kZWZhdWx0L2ltYWdlcy9pY29ucy9zeXN0ZW0vc29ydF9kb3duLmdpZiIgYWx0PSJ2Ii8+PC9hPjwvZGl2PjxkaXYgc3R5bGU9ImxpbmUtaGVpZ2h0OiAyNHB4OyI+ICZuYnNwOycuJGFkbWluc2hvd1skaV1bMF0uIjwvZGl2PiI7DQoJCQkJCSRpKys7DQoJCQkJfQ0KCQkJfQ0KCQkJbGlzdCgkcGFnZWluZm8sICRuZXh0cGFnZSwgJHByZXZpb3VzcGFnZSwgJHBhZ2VzKSA9ICR0aGlzLT5hZG1pbl9wYWdpbmF0ZSgic3RyZWV0dmlldyIsJGFkbWlucGFnZXMsJGlkLCRyZXR1cm5pZCwkcGFyYW1zKTsNCgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigibmV4dHBhZ2UiLCAkbmV4dHBhZ2UpOw0KCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJwcmV2aW91c3BhZ2UiLCAkcHJldmlvdXNwYWdlKTsNCgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigicGFnZWluZm8iLCAkcGFnZWluZm8pOw0KCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJwYWdlcyIsICRwYWdlcyk7DQoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImFkbWluc2hvdyIsICRhZG1pbnNob3cpOw0KCQkJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCJhZG1pbnBhbmVsLnRwbCIpOw0KDQoJZWNobyAkdGhpcy0+RW5kVGFiKCk7DQoNCn0NCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oYXJyYXkoIm5leHRwYWdlIj0+ZmFsc2UsInByZXZpb3VzcGFnZSI9PmZhbHNlLCJwYWdlaW5mbyI9PmZhbHNlLCJwYWdlcyI9PmZhbHNlKSk7DQoNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oYXJyYXkoImZpbHRlciI9PmZhbHNlLCJyZW9yZGVyIj0+ZmFsc2UsImluc3RhbnRzZWFyY2giPT5mYWxzZSwidGFibGVpZCI9PmZhbHNlKSk7DQoNCmlmKCAkaGFzX2FkdmFuY2VkX3Blcm0gfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbigiTW9kaWZ5IFRlbXBsYXRlcyIpIHx8ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0YWJkaXNwbGF5X3RlbXBsYXRlcyIsZmFsc2UpICkgew0KCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJ0ZW1wbGF0ZXMiKTsNCgkNCiAgICBlY2hvICI8ZmllbGRzZXQgc3R5bGU9XCJ3aWR0aDogNjAwcHg7XCI+PGxlZ2VuZD48Yj4iLiR0aGlzLT5MYW5nKCJkZWZhdWx0dGVtcGxhdGVzIikuIjwvYj48L2xlZ2VuZD4iOw0KICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICJjaGFuZ2VkZWZ0ZW1wbGF0ZXMiLCAkcmV0dXJuaWQpOw0KICAgICR0ZW1wbGF0ZWxpc3QgPSAkdGhpcy0+TGlzdFRlbXBsYXRlcygkdGhpcy0+R2V0TmFtZSgpKTsNCiAgICAkZGVmdHBscyA9ICR0aGlzLT5nZXREZWZhdWx0VGVtcGxhdGVzKCk7DQogICAgJHRwbG9wdGlvbnMgPSBhcnJheSgpOw0KICAgICRpdGVtbGlzdCA9IGFycmF5KCk7DQogICAgZm9yZWFjaCgkdGVtcGxhdGVsaXN0IGFzICRvbmV0cGwpew0KCSAgICR0cGxvcHRpb25zWyRvbmV0cGxdID0gJG9uZXRwbDsNCgkgICAkdHBsID0gbmV3IHN0ZENsYXNzKCk7DQoJICAgJHRwbC0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAiZWRpdFRlbXBsYXRlIiwgJHJldHVybmlkLCAkb25ldHBsLCBhcnJheSgidHBsbmFtZSI9PiRvbmV0cGwpICk7DQoJICAgJHRwbC0+ZGVsZXRlbGluayA9IGluX2FycmF5KCRvbmV0cGwsICRkZWZ0cGxzKT8iIjokdGhpcy0+Q3JlYXRlTGluayggJGlkLCAiZGVsZXRldHBsIiwgJHJldHVybmlkLCAkYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCJpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZiIsICR0aGlzLT5MYW5nKCJkZWxldGUiKSwgIiIsICIiLCAic3lzdGVtaWNvbiIpLCBhcnJheSgidHBsbmFtZSI9PiRvbmV0cGwpICk7DQoJICAgYXJyYXlfcHVzaCgkaXRlbWxpc3QsICR0cGwpOw0KICAgIH0NCg0KCSAgIGVjaG8gIgk8ZGl2IGNsYXNzPVwicGFnZW92ZXJmbG93XCI+DQoJCQkgPHAgY2xhc3M9XCJwYWdldGV4dFwiPiIuJHRoaXMtPkxhbmcoImRlZnRlbXBsYXRlZm9yIikuIiBcInN0cmVldHZpZXdcIjo8L3A+DQoJCQkgPHAgY2xhc3M9XCJwYWdlaW5wdXRcIj4iLiR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwibGlzdHRlbXBsYXRlX3N0cmVldHZpZXciLCR0cGxvcHRpb25zLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJsaXN0dGVtcGxhdGVfc3RyZWV0dmlldyIpKS4iPC9wPg0KCQk8L2Rpdj4NCiAgICAiOw0KICAgIGVjaG8gIgk8ZGl2IGNsYXNzPVwicGFnZW92ZXJmbG93XCI+DQoJCQkgPHAgY2xhc3M9XCJwYWdldGV4dFwiPiIuJHRoaXMtPkxhbmcoImRlZmRldGFpbHRlbXBsYXRlIikuIjo8L3A+DQoJCQkgPHAgY2xhc3M9XCJwYWdlaW5wdXRcIj4iLiR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwiZmluYWx0ZW1wbGF0ZSIsJHRwbG9wdGlvbnMsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoImZpbmFsdGVtcGxhdGUiKSkuIjwvcD4NCgkJPC9kaXY+DQoJIjsNCgkkdHBsb3B0aW9uc1skdGhpcy0+TGFuZygidXNlbGV2ZWxsaXN0dHBsIildID0gIioqIjsNCgllY2hvICIJPGRpdiBjbGFzcz1cInBhZ2VvdmVyZmxvd1wiPg0KCQkJIDxwIGNsYXNzPVwicGFnZXRleHRcIj4iLiR0aGlzLT5MYW5nKCJkZWZzZWFyY2hyZXN1bHRzdGVtcGxhdGUiKS4iOjwvcD4NCgkJCSA8cCBjbGFzcz1cInBhZ2VpbnB1dFwiPiIuJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJzZWFyY2hyZXN1bHRzdGVtcGxhdGUiLCR0cGxvcHRpb25zLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzZWFyY2hyZXN1bHRzdGVtcGxhdGUiLCIqKiIpKS4iPC9wPg0KCQk8L2Rpdj4NCgkiOw0KCWVjaG8gIgk8ZGl2IGNsYXNzPVwicGFnZW92ZXJmbG93XCI+DQoJCQkgPHAgY2xhc3M9XCJwYWdldGV4dFwiPiIuJHRoaXMtPkxhbmcoImRlZmVtcHR5dGVtcGxhdGUiKS4iOjwvcD4NCgkJCSA8cCBjbGFzcz1cInBhZ2VpbnB1dFwiPiIuJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJlbXB0eXRlbXBsYXRlIiwkdHBsb3B0aW9ucywtMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZW1wdHl0ZW1wbGF0ZSIsIioqIikpLiI8L3A+DQoJCTwvZGl2Pg0KICAgIDxwPiIuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgInN1Ym1pdCIsIGxhbmcoInN1Ym1pdCIpKS4iPC9wPiI7DQogICAgZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOw0KDQogICAgZWNobyAiPC9maWVsZHNldD48YnIvPjxici8+IjsNCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1saXN0IiwgJGl0ZW1saXN0KTsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImFkZG5ldyIsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImVkaXRUZW1wbGF0ZSIsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYiLCAiIiwiIiwiIiwic3lzdGVtaWNvbiIpLiIgIi4kdGhpcy0+TGFuZygiYWRkdGVtcGxhdGUiKSkpOw0KICAgICRhZG1pbnNob3cgPSBhcnJheSgJYXJyYXkoJHRoaXMtPkxhbmcoInRlbXBsYXRlIiksICJlZGl0bGluayIsIGZhbHNlKSwgYXJyYXkoJHRoaXMtPkxhbmcoIkFjdGlvbnMiKSwgImRlbGV0ZWxpbmsiLCBmYWxzZSkJKTsNCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oImFkbWluc2hvdyIsICRhZG1pbnNob3cpOw0KICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgiYWRtaW5wYW5lbC50cGwiKTsNCgllY2hvICR0aGlzLT5FbmRUYWIoKTsNCn0NCg0KaWYoICRoYXNfYWR2YW5jZWRfcGVybSB8fCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGFiZGlzcGxheV9xdWVyaWVzIixmYWxzZSkgKSB7DQoJZWNobyAkdGhpcy0+U3RhcnRUYWIoInF1ZXJpZXMiKTsNCg0KCQkkaXRlbWxpc3QgPSAkdGhpcy0+Z2V0X3F1ZXJpZXMoJHdoZXJlPWFycmF5KCksIHRydWUsICRpZCwgJHJldHVybmlkKTsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJpdGVtbGlzdCIsICRpdGVtbGlzdD8kaXRlbWxpc3Q6YXJyYXkoKSk7DQoJCSRhZG1pbnNob3cgPSBhcnJheSggYXJyYXkoImlkIiwiaWQiKSwNCgkJCQkJCQlhcnJheSgkdGhpcy0+TGFuZygibmFtZSIpLCAibmFtZSIpLA0KCQkJCQkJCWFycmF5KCR0aGlzLT5MYW5nKCJBY3Rpb25zIiksICJhY3Rpb25zIikNCgkJCQkJCQkpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImFkbWluc2hvdyIsICRhZG1pbnNob3cpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImFkZG5ldyIsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImFkbWlucXVlcnkiLCAkcmV0dXJuaWQsICRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoImljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmIiwgIiIsIiIsIiIsInN5c3RlbWljb24iKS4iICIuJHRoaXMtPkxhbmcoImNyZWF0ZXF1ZXJ5IikpKTsNCgkJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCJhZG1pbnBhbmVsLnRwbCIpOw0KCQkNCgllY2hvICR0aGlzLT5FbmRUYWIoKTsNCn0NCg0KaWYoICRoYXNfYWR2YW5jZWRfcGVybSApIHsNCgllY2hvICR0aGlzLT5TdGFydFRhYigicHJlZmVyZW5jZXMiKTsNCgllY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAiY2hhbmdlcHJlZmVyZW5jZXMiLCAkcmV0dXJuaWQpOw0KCWVjaG8gIjxmaWVsZHNldCBzdHlsZT1cIndpZHRoOiA0NjVweDtcIj48bGVnZW5kPjxiPiIuJHRoaXMtPkxhbmcoInByZWZfdGFiZGlzcGxheSIpLiI6PC9iPjwvbGVnZW5kPjx1bD4NCgkiOw0KCSR0YWJkaXNwbGF5ID0gYXJyYXkoInN0cmVldHZpZXciLCJ0ZW1wbGF0ZXMiLCJxdWVyaWVzIik7DQoJZm9yZWFjaCgkdGFiZGlzcGxheSBhcyAkb25lcHJlZil7DQoJCWVjaG8gIjxsaT4iLiR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgInRhYmRpc3BsYXlfIi4kb25lcHJlZiwgdHJ1ZSwgJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmRpc3BsYXlfIi4kb25lcHJlZixmYWxzZSkpLiR0aGlzLT5MYW5nKCRvbmVwcmVmKS4iPC9saT4NCgkiOw0KCX0NCgllY2hvICI8L3VsPjxici8+PHA+Ii4kdGhpcy0+TGFuZygiaGVscF90YWJkaXNwbGF5IikuIjwvcD4NCjwvZmllbGRzZXQ+PGJyLz4NCiI7DQoJZWNobyAiPGZpZWxkc2V0IHN0eWxlPVwid2lkdGg6IDQ2NXB4O1wiPjxsZWdlbmQ+PGI+Ii4kdGhpcy0+TGFuZygicHJlZl9zZWFyY2htb2R1bGVfaW5kZXgiKS4iOjwvYj48L2xlZ2VuZD48dWw+DQoJIjsNCglmb3JlYWNoKCR0aGlzLT5nZXRfbGV2ZWxhcnJheSgpIGFzICRvbmVwcmVmKXsNCgkJZWNobyAiPGxpPiIuJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAic2VhcmNobW9kdWxlX2luZGV4XyIuJG9uZXByZWYsIHRydWUsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzZWFyY2htb2R1bGVfaW5kZXhfIi4kb25lcHJlZixmYWxzZSkpLiR0aGlzLT5MYW5nKCRvbmVwcmVmKS4iPC9saT4NCgkiOw0KCX0NCgllY2hvICI8L3VsPjxici8+PHA+Ii4kdGhpcy0+TGFuZygiaGVscF9zZWFyY2htb2R1bGVfaW5kZXgiKS4iPC9wPg0KPC9maWVsZHNldD48YnIvPg0KIjsNCgllY2hvICI8ZmllbGRzZXQgc3R5bGU9XCJ3aWR0aDogNDY1cHg7XCI+PGxlZ2VuZD48Yj4iLiR0aGlzLT5MYW5nKCJwcmVmX25ld2l0ZW1zZmlyc3QiKS4iOjwvYj48L2xlZ2VuZD48dWw+DQoJIjsNCglmb3JlYWNoKCR0aGlzLT5nZXRfbGV2ZWxhcnJheSgpIGFzICRvbmVwcmVmKXsNCgkJZWNobyAiPGxpPiIuJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAibmV3aXRlbXNmaXJzdF8iLiRvbmVwcmVmLCB0cnVlLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgibmV3aXRlbXNmaXJzdF8iLiRvbmVwcmVmLGZhbHNlKSkuJHRoaXMtPkxhbmcoJG9uZXByZWYpLiI8L2xpPg0KCSI7DQoJfQ0KCWVjaG8gIjwvdWw+PGJyLz48cD4iLiR0aGlzLT5MYW5nKCJoZWxwX25ld2l0ZW1zZmlyc3QiKS4iPC9wPg0KPC9maWVsZHNldD48YnIvPg0KIjsNCg0KCWVjaG8gIjxmaWVsZHNldCBzdHlsZT1cIndpZHRoOiA0NjVweDtcIj48bGVnZW5kPjxiPiIuJHRoaXMtPkxhbmcoInByZWZfbGV2ZWxwYWdpbmF0aW9uIikuIjo8L2I+PC9sZWdlbmQ+PHVsPg0KCSI7DQoJZm9yZWFjaCgkdGhpcy0+Z2V0X2xldmVsYXJyYXkoKSBhcyAkb25lcHJlZil7DQoJCWVjaG8gIjxsaT4iLiR0aGlzLT5MYW5nKCRvbmVwcmVmKS4iOiAiOw0KCQllY2hvICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAkb25lcHJlZi4iX3BhZ2luYXRpb24iLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgkb25lcHJlZi4iX3BhZ2luYXRpb24iLDApLCAxMiwgMykuIjwvbGk+DQoJIjsNCgl9DQoJZWNobyAiPC91bD48YnIvPjxwPiIuJHRoaXMtPkxhbmcoImhlbHBfbGV2ZWxwYWdpbmF0aW9uIikuIjwvcD4NCjwvZmllbGRzZXQ+PGJyLz4NCiI7DQoNCgllY2hvICI8ZmllbGRzZXQgc3R5bGU9XCJ3aWR0aDogNjAwcHg7XCI+PGxlZ2VuZD48Yj4iLiR0aGlzLT5MYW5nKCJwcmVmZXJlbmNlcyIpLiI6PC9iPjwvbGVnZW5kPg0KCSI7DQoJJGNoZWNrYm94cHJlZnMgPSBhcnJheSgibG9hZF9uYmNoaWxkcmVuIiwibG9hZF9uZXh0cHJldmlvdXMiLCJyZXN0cmljdF9wZXJtaXNzaW9ucyIsInVzZV9oaWVyYXJjaHkiLCJvcmRlcmJ5bmFtZSIsImRpc3BsYXlfZmlsdGVyIiwiZGlzcGxheV9pbnN0YW50c2VhcmNoIiwiZGlzcGxheV9pbnN0YW50c29ydCIsImVkaXRhYmxlX2FsaWFzZXMiLCJhdXRvaW5jcmVtZW50X2FsaWFzIiwiYWxsb3dfc3FsIiwiZm9yY2VfbGlzdCIsInNob3d0aHVtYm5haWxzIiwiZGVsZXRlX2ZpbGVzIiwiYWxsb3dfY29tcGxleF9vcmRlciIsInVzZV9zZXNzaW9uIik7DQoJZm9yZWFjaCgkY2hlY2tib3hwcmVmcyBhcyAkb25lcHJlZil7DQoJCWVjaG8gIjxwPiIuJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAkb25lcHJlZiwgdHJ1ZSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJG9uZXByZWYsZmFsc2UpKS4iICIuJHRoaXMtPkxhbmcoInByZWZfIi4kb25lcHJlZikuIjwvcD4NCgkiOw0KCX0NCgllY2hvICI8cD4iLiR0aGlzLT5MYW5nKCJwcmVmX2FkbWlucGFnZXMiKS4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgImFkbWlucGFnZXMiLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYWRtaW5wYWdlcyIsMCksIDEyLCAzKS4iPC9wPg0KCSI7DQoJZWNobyAiPHA+Ii4kdGhpcy0+TGFuZygicHJlZl9tYXhzaG93bnBhZ2VzIikuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICJtYXhzaG93bnBhZ2VzIiwgJHRoaXMtPkdldFByZWZlcmVuY2UoIm1heHNob3ducGFnZXMiLDcpLCAxMiwgMikuIjwvcD4NCgkiOw0KCWVjaG8gIjwvZmllbGRzZXQ+PGJyLz48cD4iLiR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICJzdWJtaXQiLCBsYW5nKCJzdWJtaXQiKSkuIjwvcD4iOw0KICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsNCgllY2hvICI8YnIvPjxwPiIuJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvc3lzdGVtL2ltcG9ydC5naWYiLCAiIiwiIiwiIiwic3lzdGVtaWNvbiIpLiIgIjsNCgllY2hvICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImV4cG9ydCIsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoImV4cG9ydF90aXRsZSIpKS4iIHwgIi4kdGhpcy0+Q3JlYXRlTGluaygkaWQsICJpbXBvcnQiLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCJpbXBvcnRfdGl0bGUiKSkuIjwvcD4iOw0KCWVjaG8gJHRoaXMtPkVuZFRhYigpOw0KfQ0KZWNobyAkdGhpcy0+U3RhcnRUYWIoIm1hcCIpOw0KDQoNCiAgIC8vIGVjaG8gIjxoMj4gSEVSRTwvaDI+IjsNCiAgIA0KICAgIGVjaG8gIgk8ZGl2IGNsYXNzPVwicGFnZW92ZXJmbG93XCI+DQoJCQkgPHAgY2xhc3M9XCJwYWdldGV4dFwiPiIuJHRoaXMtPkxhbmcoImRlZmRldGFpbHRlbXBsYXRlIikuIjo8L3A+DQoJCTxpZnJhbWUgc3JjID1cIi4uL21vZHVsZXMvc3RyZWV0dmlldy9tYXAvbG9va3VwLmh0bWxcIiB3aWR0aD1cIjk1JVwiIGhlaWdodD1cIjEyMDBcIj4NCiAgPC9pZnJhbWU+CSANCgkJPC9kaXY+IjsNCg0KZWNobyAkdGhpcy0+RW5kVGFiKCk7DQoNCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.editA.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KJGFkbWludGhlbWUgPSAkZ0Ntcy0+dmFyaWFibGVzWyJhZG1pbnRoZW1lIl07DQppZihpc3NldCgkcGFyYW1zWyJjYW5jZWwiXSkgfHwgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJyZXN0cmljdF9wZXJtaXNzaW9ucyIsZmFsc2UpICYmICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCJzdHJlZXR2aWV3X2FkdmFuY2VkIikgJiYgISR0aGlzLT5DaGVja1Blcm1pc3Npb24oInN0cmVldHZpZXdfbWFuYWdlX3N0cmVldHZpZXciKSkgKXsNCgkkbmV3cGFyYW1zID0gYXJyYXkoImFjdGl2ZV90YWIiID0+ICJzdHJlZXR2aWV3Iik7DQoJaWYoIWlzc2V0KCRwYXJhbXNbImNhbmNlbCJdKSkJJG5ld3BhcmFtc1sibW9kdWxlX21lc3NhZ2UiXSA9ICR0aGlzLT5MYW5nKCJlcnJvcl9kZW5pZWQiKTsNCgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAiZGVmYXVsdGFkbWluIiwgJHJldHVybmlkLCAkbmV3cGFyYW1zKTsNCn0NCg0KJGRiID0mICR0aGlzLT5HZXREYigpOw0KDQoNCmlmKGlzc2V0KCRwYXJhbXNbIkFpZCJdKSkgew0KCS8vIGlmIHdlIGFyZSB3b3JraW5nIG9uIGFuIGl0ZW0gdGhhdCBleGlzdHMsIHdlIGxvYWQgaXQuIFdlIG11c3QgZG8gdGhpcyBldmVuIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkLCBvdGhlcndpc2Ugd2Ugd29uJ3QgaGF2ZSB0aGUgZmlsZSBmaWVsZHMNCgkkaXRlbXMgPSAkdGhpcy0+Z2V0X2xldmVsX3N0cmVldHZpZXcoYXJyYXkoImlkIj0+JHBhcmFtc1siQWlkIl0pKTsNCgkkaXRlbSA9ICRpdGVtc1swXTsNCn0NCg0KLy8gQ0hFQ0sgSUYgVEhFIEZPUk0gSVMgQkVJTkcgU1VCTUlUVEVEIDoNCi8vICh3ZSBtdXN0IGRldGVjdCBhbGwga2luZHMgb2Ygc3VibWl0IGJ1dHRvbnMsIGluY2x1ZGluZyBmaWxlcywgc2luY2UgaW5mb3JtYXRpb24gbXVzdCBiZSBzYXZlZCBiZWZvcmUgd2UgZ28gdG8gZmlsZSBzdWJtaXNzaW9uKQ0KaWYgKGlzc2V0KCRwYXJhbXNbInN1Ym1pdCJdKSB8fCANCglpc3NldCgkcGFyYW1zWyJhcHBseSJdKSANCgkpDQp7DQoJZGVidWdfYnVmZmVyKCJFZGl0IEZvcm0gaGFzIGJlZW4gc3VibWl0dGVkIi5fX0xJTkVfXyk7DQoNCgkvLyBSRVRSSUVWSU5HIFRIRSBGT1JNIFZBTFVFUyAoYW5kIGVzY2FwaW5nIGl0LCBpZiBuZWVkZWQpDQoJaWYoIWlzc2V0KCRpdGVtKSkgJGl0ZW0gPSBuZXcgc3RkQ2xhc3MoKTsNCglpZihpc3NldCgkcGFyYW1zWyJBaXRlbV9vcmRlciJdKSkgJGl0ZW0tPml0ZW1fb3JkZXIgPSAkcGFyYW1zWyJBaXRlbV9vcmRlciJdOw0KCSRpdGVtLT5sYXRpdHVkZSA9ICRwYXJhbXNbIkFsYXRpdHVkZSJdOw0KCQkkaXRlbS0+bG9uZ2l0dWRlID0gJHBhcmFtc1siQWxvbmdpdHVkZSJdOw0KCQkkaXRlbS0+eWF3ID0gJHBhcmFtc1siQXlhdyJdOw0KCQkkaXRlbS0+cG92ID0gJHBhcmFtc1siQXBvdiJdOw0KCQkkaXRlbS0+em9vbSA9ICRwYXJhbXNbIkF6b29tIl07DQoJCSRpdGVtLT5uYW1lID0gJHBhcmFtc1siQW5hbWUiXTsNCgkJDQoJaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoImVkaXRhYmxlX2FsaWFzZXMiLGZhbHNlKSl7DQoJCWlmKGlzc2V0KCRwYXJhbXNbIkFhbGlhcyJdKSl7DQoJCQkkdG1wYWxpYXMgPSAkdGhpcy0+cGxjcmVhdGVhbGlhcyh0cmltKCRwYXJhbXNbIkFhbGlhcyJdKSk7DQoJCQkkaXRlbS0+YWxpYXMgPSAkdG1wYWxpYXMgPT0gIiI/JHRoaXMtPnBsY3JlYXRlYWxpYXMoJGl0ZW0tPm5hbWUpOiR0bXBhbGlhczsNCgkJfWVsc2V7DQoJCQkkaXRlbS0+YWxpYXMgPSAkdGhpcy0+cGxjcmVhdGVhbGlhcygkaXRlbS0+bmFtZSk7DQoJCX0NCgl9ZWxzZXsNCgkJJGl0ZW0tPmFsaWFzID0gJHRoaXMtPnBsY3JlYXRlYWxpYXMoJGl0ZW0tPm5hbWUpOw0KCX0NCgkNCgkkYXV0b2luY3JlbWVudGFsaWFzID0gJHRoaXMtPkdldFByZWZlcmVuY2UoImF1dG9pbmNyZW1lbnRfYWxpYXMiLGZhbHNlKTsNCg0KCS8vIENIRUNLIElGIFRIRSBORUVERUQgVkFMVUVTIEFSRSBUSEVSRQ0KCWlmKAkhaXNzZXQoJHBhcmFtc1siQWxhdGl0dWRlIl0pIHx8ICRwYXJhbXNbIkFsYXRpdHVkZSJdID09ICIiDQoJCSB8fCAhaXNzZXQoJHBhcmFtc1siQW5hbWUiXSkgfHwgJHBhcmFtc1siQW5hbWUiXSA9PSAiIg0KCQkgKQ0KCXsNCgkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygiZXJyb3JfbWlzc2dpbnZhbHVlIikpOw0KCX1lbHNlaWYoISRhdXRvaW5jcmVtZW50YWxpYXMgJiYgZmFsc2UgPT0gJHRoaXMtPmNoZWNrYWxpYXMoIm1vZHVsZV9zdHJlZXR2aWV3X3N0cmVldHZpZXciLCAkaXRlbS0+YWxpYXMsIGlzc2V0KCRwYXJhbXNbIkFpZCJdKT8kcGFyYW1zWyJBaWQiXTpmYWxzZSkpew0KCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCJlcnJvcl9hbHJlYWR5ZXhpc3RzIikpOw0KCX1lbHNlew0KCQkjIyMjIyMjIyMjIyMgRE9JTkcgVEhFIFVQREFURQ0KDQoJCWlmKCRhdXRvaW5jcmVtZW50YWxpYXMpew0KCQkJJGJhc2VhbGlhcyA9ICRpdGVtLT5hbGlhczsNCgkJCSR0bXBhbGlhcyA9ICRpdGVtLT5hbGlhczsNCgkJCSRpID0gMTsNCgkJCXdoaWxlKCEkdGhpcy0+Y2hlY2thbGlhcygibW9kdWxlX3N0cmVldHZpZXdfc3RyZWV0dmlldyIsICR0bXBhbGlhcywgaXNzZXQoJHBhcmFtc1siQWlkIl0pPyRwYXJhbXNbIkFpZCJdOmZhbHNlKSl7DQoJCQkJJHRtcGFsaWFzID0gJGJhc2VhbGlhcy4iXyIuJGk7DQoJCQkJJGkrKzsNCgkJCX0NCgkJCSRpdGVtLT5hbGlhcyA9ICR0bXBhbGlhczsNCgkJfQ0KDQoJCS8vIEZJRUxEUyBUTyBVUERBVEUNCgkJJHF1ZXJ5ID0gKGlzc2V0KCRpdGVtLT5pZCk/IlVQREFURSAiOiJJTlNFUlQgSU5UTyAiKS5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3X3N0cmVldHZpZXcgU0VUIA0KCQkJbGF0aXR1ZGU9PywNCgkJCWxvbmdpdHVkZT0/LA0KCQkJeWF3PT8sDQoJCQlwb3Y9PywNCgkJCXpvb209PywNCgkJCW5hbWU9PywNCgkJYWxpYXM9PywNCgkJZGF0ZV9tb2RpZmllZD0/LA0KCQlhY3RpdmU9Ii4oaXNzZXQoJGl0ZW0tPmFjdGl2ZSk/JGl0ZW0tPmFjdGl2ZToxKS4iLA0KCQlpc2RlZmF1bHQ9Ii4oaXNzZXQoJGl0ZW0tPmlzZGVmYXVsdCk/JGl0ZW0tPmlzZGVmYXVsdDowKS4iIjsNCgkJCQ0KCQkvLyBWQUxVRVMNCgkJJHZhbHVlcyA9IGFycmF5KGFkZHNsYXNoZXMoJGl0ZW0tPmxhdGl0dWRlKSwNCgkJCWFkZHNsYXNoZXMoJGl0ZW0tPmxvbmdpdHVkZSksDQoJCQlhZGRzbGFzaGVzKCRpdGVtLT55YXcpLA0KCQkJYWRkc2xhc2hlcygkaXRlbS0+cG92KSwNCgkJCWFkZHNsYXNoZXMoJGl0ZW0tPnpvb20pLA0KCQkJYWRkc2xhc2hlcygkaXRlbS0+bmFtZSksJGl0ZW0tPmFsaWFzLHN0cl9yZXBsYWNlKCInIiwiIiwkZGItPkRCVGltZVN0YW1wKHRpbWUoKSkpKTsNCg0KCQlpZihpc3NldCgkaXRlbS0+aWQpKXsNCgkJCSRldmVudCA9ICJzdHJlZXR2aWV3X21vZGlmaWVkIjsNCgkJCSRxdWVyeSAuPSAiIFdIRVJFIGlkPT87IjsNCgkJCWFycmF5X3B1c2goJHZhbHVlcywkaXRlbS0+aWQpOw0KCQl9ZWxzZXsNCgkJCS8vIE5FVyBJVEVNDQoJCQkkcXVlcnkgLj0gIiwgZGF0ZV9jcmVhdGVkPT8iOw0KCQkJJHZhbHVlc1tdID0gc3RyX3JlcGxhY2UoIiciLCIiLCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSk7DQoJCQkkZXZlbnQgPSAic3RyZWV0dmlld19hZGRlZCI7DQoJCQkvLyBnZXQgYSBuZXcgaWQgZnJvbSB0aGUgc2VxdWVuY2UgdGFibGUNCgkJCSRpdGVtLT5pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld19zdHJlZXR2aWV3X3NlcSIpOw0KCQkJaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoIm5ld2l0ZW1zZmlyc3Rfc3RyZWV0dmlldyIsZmFsc2UpKXsNCgkJCQkvLyBuZXcgaXRlbXMgZ2V0IHRvIHRoZSB0b3AgLSBzbyB3ZSBtdXN0IHB1dCBhbGwgb3RoZXIgaXRlbXMgZG93biBmcm9tIG9uZSBzdGVwLCBhbmQgdGhlbiBzZXQgdGhpcyBpdGVtJ3Mgb3JkZXIgdG8gMQ0KCQkJCSRxdWVyeTIgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld19zdHJlZXR2aWV3IFNFVCBpdGVtX29yZGVyPShpdGVtX29yZGVyKzEpIjsNCgkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5Mik7DQoJCQkJJHF1ZXJ5IC49ICIsaXRlbV9vcmRlcj0xLCBpZD0iLiRpdGVtLT5pZDsNCgkJCX1lbHNlew0KCQkJCS8vIG5ldyBpdGVtcyBnZXQgdG8gdGhlIGJvdHRvbSAtIHNvIHdlIG11c3Qgc2V0IHRoZSBpdGVtX29yZGVyIHRvIHRoZSBudW1iZXIgb2YgaXRlbXMgKyAxDQoJCQkJJGl0ZW1fb3JkZXIgPSAkdGhpcy0+Y291bnRzb21ldGhpbmcoInN0cmVldHZpZXciKSArIDE7DQoJCQkJJHF1ZXJ5IC49ICIsaXRlbV9vcmRlcj0iLiRpdGVtX29yZGVyLiIsIGlkPSIuJGl0ZW0tPmlkOw0KCQkJfQ0KCQl9DQoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksICR2YWx1ZXMpOw0KDQoJCSRyZWRpcmVjdCA9IHRydWU7DQoJCS8vaWYobXlzcWxfYWZmZWN0ZWRfcm93cygpKXsJLy8gbXlzcWwtb25seQ0KCQlpZigkZGItPkFmZmVjdGVkX1Jvd3MoKSl7DQoJCQlpZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2VhcmNobW9kdWxlX2luZGV4X3N0cmVldHZpZXciLGZhbHNlKSl7DQoJCQkJLy8gSUYgQU5ZVEhJTkcgV0FTIE1PRElGSUVELCBXRSBNVVNUIFVQREFURSBUSEUgU0VBUkNIIElOREVYIEFORCBTRU5EIEFOIEVWRU5ULi4uDQoJCQkJaWYoaXNzZXQoJGV2ZW50KSkJJHRoaXMtPlNlbmRFdmVudCgkZXZlbnQsIGFycmF5KCJ3aGF0Ij0+InN0cmVldHZpZXciLCAiaXRlbWlkIiA9PiAkaXRlbS0+aWQsICJhbGlhcyI9PiRpdGVtLT5hbGlhcykpOw0KCQkJCWRlYnVnX2J1ZmZlcigiU0VBUkhDIElOREVYIFdBUyBVUERBVEVEICIuX19MSU5FX18pOw0KCQkJCSRtb2R1bGUgPSYgJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCJTZWFyY2giKTsNCgkJCQlpZigkbW9kdWxlKSB7DQoJCQkJCSR0ZXh0ID0gIiRpdGVtLT5uYW1lIjsNCgkJCQkJJG1vZHVsZS0+QWRkV29yZHMoJHRoaXMtPkdldE5hbWUoKSwgJGl0ZW0tPmlkLCAic3RyZWV0dmlldyIsICR0ZXh0LCBOVUxMKTsNCgkJCQl9DQoJCQl9DQoJCX1lbHNlaWYobXlzcWxfZXJyb3IoKSl7DQoJCQkvLyBkbyBub3QgcmVkaXJlY3QgOg0KCQkJJHJlZGlyZWN0ID0gZmFsc2U7DQoJCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKG15c3FsX2Vycm9yKCkpOw0KCQl9DQoNCgkJLy8gUkVESVJFQ1RJTkcuLi4NCgkJCWlmKCRyZWRpcmVjdCA9PSBmYWxzZSl7DQoJCQl9ZWxzZWlmKGlzc2V0KCRwYXJhbXNbImFwcGx5Il0pKXsNCgkJCQllY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygibWVzc2FnZV9tb2RpZmllZCIpKTsNCgkJCX1lbHNlew0KCQkJCSRwYXJhbXMgPSBhcnJheSgibW9kdWxlX21lc3NhZ2UiID0+ICR0aGlzLT5MYW5nKCJtZXNzYWdlX21vZGlmaWVkIiksICJhY3RpdmVfdGFiIj0+InN0cmVldHZpZXciKTsNCgkJCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAiZGVmYXVsdGFkbWluIiwgJHJldHVybmlkLCAkcGFyYW1zKTsJDQoJCQl9DQoJfQ0KCS8vIEVORCBPRiBGT1JNIFNVQk1JU1NJT04NCn0NCg0KDQoNCi8qICMjIFBSRVBBUklORyBTTUFSVFkgRUxFTUVOVFMNCkNyZWF0ZUlucHV0VGV4dCA6IChpZCxuYW1lLHZhbHVlLHNpemUsbWF4bGVuZ3RoKQ0KQ3JlYXRlVGV4dEFyZWEgOiAod3lzaXd5ZyxpZCx0ZXh0LG5hbWUpDQpDcmVhdGVJbnB1dFNlbGVjdExpc3QgOiAoaWQsbmFtZSxpdGVtcyxzZWxlY3RlZGl0ZW1zLHNpemUpDQpDcmVhdGVJbnB1dERyb3Bkb3duIDogKGlkLG5hbWUsaXRlbXMsc2luZGV4LHN2YWx1ZSkNCiovDQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbigibGF0aXR1ZGVfbGFiZWwiLCAkdGhpcy0+TGFuZygic3RyZWV0dmlld19sYXRpdHVkZSIpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigibGF0aXR1ZGVfaW5wdXQiLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwiQWxhdGl0dWRlIixpc3NldCgkaXRlbSk/JGl0ZW0tPmxhdGl0dWRlOiIiLDUwLDY0KSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oImxvbmdpdHVkZV9sYWJlbCIsICR0aGlzLT5MYW5nKCJzdHJlZXR2aWV3X2xvbmdpdHVkZSIpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigibG9uZ2l0dWRlX2lucHV0IiwgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsIkFsb25naXR1ZGUiLGlzc2V0KCRpdGVtKT8kaXRlbS0+bG9uZ2l0dWRlOiIiLDUwLDY0KSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oInlhd19sYWJlbCIsICR0aGlzLT5MYW5nKCJzdHJlZXR2aWV3X3lhdyIpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigieWF3X2lucHV0IiwgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsIkF5YXciLGlzc2V0KCRpdGVtKT8kaXRlbS0+eWF3OiIiLDUwLDY0KSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oInBvdl9sYWJlbCIsICR0aGlzLT5MYW5nKCJzdHJlZXR2aWV3X3BvdiIpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigicG92X2lucHV0IiwgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsIkFwb3YiLGlzc2V0KCRpdGVtKT8kaXRlbS0+cG92OiIiLDUwLDY0KSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oInpvb21fbGFiZWwiLCAkdGhpcy0+TGFuZygic3RyZWV0dmlld196b29tIikpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJ6b29tX2lucHV0IiwgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsIkF6b29tIixpc3NldCgkaXRlbSk/JGl0ZW0tPnpvb206IiIsMzAsMTApKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigibmFtZV9sYWJlbCIsICR0aGlzLT5MYW5nKCJuYW1lIikpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJuYW1lX2lucHV0IiwgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsIkFuYW1lIixpc3NldCgkaXRlbSk/JGl0ZW0tPm5hbWU6IiIsNTAsNjQpKTsNCmlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJlZGl0YWJsZV9hbGlhc2VzIixmYWxzZSkpew0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigiYWxpYXNfbGFiZWwiLCAkdGhpcy0+TGFuZygiYWxpYXMiKSk7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhbGlhc19pbnB1dCIsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJBYWxpYXMiLGlzc2V0KCRpdGVtKT8kaXRlbS0+YWxpYXM6IiIsNTAsNjQpKTsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1hbGlhcyIsZmFsc2UpOw0KfWVsc2V7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJpdGVtYWxpYXMiLGlzc2V0KCRpdGVtLT5hbGlhcyk/IihhbGlhcyA6ICIuJGl0ZW0tPmFsaWFzLiIpIjpmYWxzZSk7DQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhbGlhc19pbnB1dCIsIGZhbHNlKTsNCn0NCg0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJlZGl0dGl0bGUiLCAkdGhpcy0+TGFuZygiZWRpdF9zdHJlZXR2aWV3IikpOw0KDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oInN1Ym1pdCIsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICJzdWJtaXQiLCBsYW5nKCJzdWJtaXQiKSkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJhcHBseSIsIChpc3NldCgkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPmlkKSk/JHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgImFwcGx5IiwgbGFuZygiYXBwbHkiKSk6IiIpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJjYW5jZWwiLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAiY2FuY2VsIiwgbGFuZygiY2FuY2VsIikpKTsNCg0KDQovLyBESVNQTEFZSU5HDQppZihpc3NldCgkaXRlbSkgJiYgaXNzZXQoJGl0ZW0tPmlkKSl7DQoJCWVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICJlZGl0QSIsICRyZXR1cm5pZCk7DQoJCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgiZWRpdEEudHBsIik7DQoJCWVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgIkFpZCIsICRpdGVtLT5pZCk7DQoJCWlmKGlzc2V0KCRpdGVtKSAmJiBpc3NldCgkaXRlbS0+cGFyZW50KSkgZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAib2xkcGFyZW50IiwgJGl0ZW0tPnBhcmVudCk7DQoJCWVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgIkFpdGVtX29yZGVyIiwgJGl0ZW0tPml0ZW1fb3JkZXIpOw0KCQllY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7DQoJDQoNCn1lbHNlew0KCWVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICJlZGl0QSIsICRyZXR1cm5pZCk7DQoJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCJlZGl0QS50cGwiKTsNCgllY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7DQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.editTemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiggaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pICkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ2FjdGl2ZV90YWInPT4ndGVtcGxhdGVzJykgKTsKCiR0cGxjb250ZW50ID0gJyc7CmlmKCAoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSB8fCBpc3NldCgkcGFyYW1zWydhcHBseSddKSApICYmIGlzc2V0KCRwYXJhbXNbJ3RwbG5hbWUnXSkgKXsKCWlmKCRwYXJhbXNbJ3RwbG5hbWUnXSAhPSAnJyl7CgkJaWYoaXNzZXQoJHBhcmFtc1snaXNuZXcnXSkpCSRwYXJhbXNbJ3RwbG5hbWUnXSA9IG11bmdlX3N0cmluZ190b191cmwoJHBhcmFtc1sndHBsbmFtZSddLCBmYWxzZSk7CgkJJHRwbGNvbnRlbnQgPSAkcGFyYW1zWyd0cGxjb250ZW50J107CgkJaWYoJHRoaXMtPlNldFRlbXBsYXRlKCRwYXJhbXNbJ3RwbG5hbWUnXSwkcGFyYW1zWyd0cGxjb250ZW50J10sJHRoaXMtPkdldE5hbWUoKSkpOwoJCWlmKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSl7CgkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCJtb2R1bGVfbWVzc2FnZSIgPT4gJHRoaXMtPkxhbmcoIm1lc3NhZ2VfbW9kaWZpZWQiKSwgJ2FjdGl2ZV90YWInPT4ndGVtcGxhdGVzJykgKTsKCQl9ZWxzZXsKCQkJZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoIm1lc3NhZ2VfbW9kaWZpZWQiKSk7CgkJfQoJfWVsc2V7CgkJZWNobyAnPGRpdiBjbGFzcz0icGFnZWVycm9yY29udGFpbmVyIj4nLiR0aGlzLT5MYW5nKCdlcnJvcl9taXNzZ2ludmFsdWUnKS4nPC9kaXY+JzsKCX0KfWVsc2VpZiggaXNzZXQoJHBhcmFtc1sndHBsbmFtZSddKSApewoJJHRwbGNvbnRlbnQgPSAkdGhpcy0+R2V0VGVtcGxhdGUoICRwYXJhbXNbJ3RwbG5hbWUnXSwgJHRoaXMtPkdldE5hbWUoKSApOwp9CgplY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigidGVtcGxhdGUiLCAkdGhpcy0+TGFuZygidGVtcGxhdGUiKSwgdHJ1ZSk7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImhlbHB0YWIiLCAkdGhpcy0+TGFuZygidGVtcGxhdGV2YXJzIiksIGZhbHNlKTsJCQplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKCgllY2hvICR0aGlzLT5TdGFydFRhYigidGVtcGxhdGUiKTsKCQllY2hvICc8aDE+Jy4kdGhpcy0+TGFuZygiZWRpdHRlbXBsYXRlIikuJzwvaDE+JzsKCQllY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAiZWRpdFRlbXBsYXRlIiwgJHJldHVybmlkKTsKCQkvL2VjaG8gJzxwPicuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgInN1Ym1pdCIsIGxhbmcoInN1Ym1pdCIpKS4nICcuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgImFwcGx5IiwgbGFuZygiYXBwbHkiKSkuJyAnLiR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICJjYW5jZWwiLCBsYW5nKCJjYW5jZWwiKSkuJzwvcD48YnIvPjxici8+JzsKCQllY2hvICcJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+TGFuZygnbmFtZScpLicgOjwvcD4KCQkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPic7CgkJaWYoaXNzZXQoJHBhcmFtc1sndHBsbmFtZSddKSAmJiAkcGFyYW1zWyd0cGxuYW1lJ10gIT0gJycpewoJCSAgICBlY2hvICRwYXJhbXNbJ3RwbG5hbWUnXS4kdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAidHBsbmFtZSIsICRwYXJhbXNbJ3RwbG5hbWUnXSk7CgkJfWVsc2V7CgkJICAgIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ3RwbG5hbWUnLCcnLDMwLDY0KTsKCQl9CgkJZWNobyAnPC9wPgoJCSAgICA8L2Rpdj4KCQknOwoJCWVjaG8gJwk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5MYW5nKCd0ZW1wbGF0ZScpLicgOjwvcD4KCQkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkdHBsY29udGVudCwndHBsY29udGVudCcpLic8L3A+CgkJICAgIDwvZGl2PgoJCSc7CgkJZWNobyAnPHA+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAic3VibWl0IiwgbGFuZygic3VibWl0IikpLicgJy4kdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAiYXBwbHkiLCBsYW5nKCJhcHBseSIpKS4nICcuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgImNhbmNlbCIsIGxhbmcoImNhbmNlbCIpKS4nPC9wPic7CgkJaWYoIWlzc2V0KCRwYXJhbXNbInRwbG5hbWUiXSkgfHwgJHBhcmFtc1sidHBsbmFtZSJdID09ICcnKQllY2hvICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICJpc25ldyIsICJ5ZXMiKTsKCQllY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKCgllY2hvICR0aGlzLT5TdGFydFRhYigiaGVscHRhYiIpOwoJCWVjaG8gJzxkaXYgaWQ9InRlbXBsYXRlaGVscCI+Jy4kdGhpcy0+TGFuZygndGVtcGxhdGVoZWxwJykuJzwvZGl2Pic7CgkJZWNobyAnCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCWZ1bmN0aW9uIGN0bG1tX2Rpc3BsYXl0b2dnbGUoZWxlKXsKCQlpZighZWxlIHx8ICFlbGUucGFyZW50Tm9kZSkJcmV0dXJuIGZhbHNlOwoJCXZhciB0aGVkaXYgPSBlbGUucGFyZW50Tm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2IilbMF07CgkJaWYoIXRoZWRpdikJcmV0dXJuIGZhbHNlOwoJCWlmKHRoZWRpdi5zdHlsZS5kaXNwbGF5ID09ICJub25lIil7CgkJCXRoZWRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKCQkJZWxlLmlubmVySFRNTCA9ICJWIiArIGVsZS5pbm5lckhUTUwuc3Vic3RyKDQpOwoJCX1lbHNlewoJCQl0aGVkaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCQkJZWxlLmlubmVySFRNTCA9ICImZ3Q7IiArIGVsZS5pbm5lckhUTUwuc3Vic3RyKDEpOwoJCX0KCX0KCXZhciB0aGVkaXZzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlbXBsYXRlaGVscCIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkaXYiKTsKCWZvcihpPTA7aTx0aGVkaXZzLmxlbmd0aDtpKyspewoJCWlmKHRoZWRpdnNbaV0uY2xhc3NOYW1lID09ICJ0cGx2YXJzX2hpZGUiKQl0aGVkaXZzW2ldLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Cgl9Cjwvc2NyaXB0PgonOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgplY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.export.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSkJZXhpdDsKCmlmKGlzc2V0KCRwYXJhbXNbJ2RvZXhwb3J0J10pKXsKCQoJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCgkkb3V0cHV0ID0gJyc7Cglmb3JlYWNoKCRwYXJhbXNbJ3NlbGVjdGVkbGV2ZWxzJ10gYXMgJGxldmVsKXsKCQkkb3V0cHV0IC49ICcKPHRhYmxlIG5hbWU9IicuJGxldmVsLiciPgoJJzsKCQkKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlXyIuJHRoaXMtPkdldE5hbWUoKS4iXyIuJGxldmVsOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCXdoaWxlICggJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKSB7CgkJCSRvdXRwdXQgLj0gIjxpdGVtPgoJCSI7CgkJCWZvcmVhY2goJHJvdyBhcyAkZmllbGQ9PiR2YWx1ZSl7CgkJCQkkb3V0cHV0IC49ICc8Jy4kZmllbGQuJz48IVtDREFUQVsnLnN0cmlwc2xhc2hlcygkdmFsdWUpLiddXT48LycuJGZpZWxkLic+CgkJJzsKCQkJfQoJCQkkb3V0cHV0IC49ICIKCTwvaXRlbT4KCSI7CgkJfQoJCSRvdXRwdXQgLj0gIgo8L3RhYmxlPgoKIjsKCX0KCgoKCS8vIGV4cG9ydGluZyBtdWx0aXBsZSBmaWxlIGZpZWxkcyAoaWYgYW55KQoJCSR0bXBvdXRwdXQgPSAnJzsKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlXyIuJHRoaXMtPkdldE5hbWUoKS4iX211bHRpcGxlZmlsZXNmaWVsZHMiOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCXdoaWxlICggJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKSB7CgkJCSR0bXBvdXRwdXQgLj0gJzxpdGVtPgoJCSc7CgkJCWZvcmVhY2goJHJvdyBhcyAkZmllbGQ9PiR2YWx1ZSl7CgkJCQkkdG1wb3V0cHV0IC49ICc8Jy4kZmllbGQuJz48IVtDREFUQVsnLnN0cmlwc2xhc2hlcygkdmFsdWUpLiddXT48LycuJGZpZWxkLic+CgkJJzsKCQkJfQoJCQkkdG1wb3V0cHV0IC49ICcKCTwvaXRlbT4KCSc7CgkJfQoJCQoJCWlmKCR0bXBvdXRwdXQgIT0gJycpCSRvdXRwdXQgLj0gJwo8dGFibGUgbmFtZT0ibXVsdGlwbGVmaWxlc2ZpZWxkcyI+CgknLiR0bXBvdXRwdXQuJwo8L3RhYmxlPgoKJzsKCgoKCS8vIGV4cG9ydGluZyBsaXN0b3B0aW9ucyAoaWYgYW55KQoJCSR0bXBvdXRwdXQgPSAnJzsKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlXyIuJHRoaXMtPkdldE5hbWUoKS4iX2ZpZWxkb3B0aW9ucyI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJd2hpbGUgKCAkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApIHsKCQkJJHRtcG91dHB1dCAuPSAnPGl0ZW0+CgkJJzsKCQkJZm9yZWFjaCgkcm93IGFzICRmaWVsZD0+JHZhbHVlKXsKCQkJCSR0bXBvdXRwdXQgLj0gJzwnLiRmaWVsZC4nPjwhW0NEQVRBWycuc3RyaXBzbGFzaGVzKCR2YWx1ZSkuJ11dPjwvJy4kZmllbGQuJz4KCQknOwoJCQl9CgkJCSR0bXBvdXRwdXQgLj0gJwoJPC9pdGVtPgoJJzsKCQl9CgkJCgkJaWYoJHRtcG91dHB1dCAhPSAnJykJJG91dHB1dCAuPSAnCjx0YWJsZSBuYW1lPSJmaWVsZG9wdGlvbnMiPgoJJy4kdG1wb3V0cHV0LicKPC90YWJsZT4KCic7CgoKCgkKCWlmKGlzc2V0KCRwYXJhbXNbJ2V4cG9ydF90ZW1wbGF0ZXMnXSkgJiYgJHBhcmFtc1snZXhwb3J0X3RlbXBsYXRlcyddKXsKCQlmb3JlYWNoKCR0aGlzLT5MaXN0VGVtcGxhdGVzKCkgYXMgJHRwbG5hbWUpewoJCQkkb3V0cHV0IC49ICcKPHRlbXBsYXRlIG5hbWU9IicuJHRwbG5hbWUuJyI+PCFbQ0RBVEFbJy4kdGhpcy0+R2V0VGVtcGxhdGUoJHRwbG5hbWUpLiddXT48L3RlbXBsYXRlPgonOwoJCX0KCX0KCQoJaWYoJG91dHB1dCA9PSAnJyl7CgkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2V4cG9ydCcsICRyZXR1cm5pZCk7Cgl9ZWxzZXsKCQkkb3V0cHV0ID0gIjxyb290PiIuJG91dHB1dC4iPC9yb290PiI7CgkJCgkJJGhhbmRsZXJzID0gb2JfbGlzdF9oYW5kbGVycygpOyAKCQlmb3IgKCRjbnQgPSAwOyAkY250IDwgc2l6ZW9mKCRoYW5kbGVycyk7ICRjbnQrKykgeyBvYl9lbmRfY2xlYW4oKTsgfQkJCgoJCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKCQloZWFkZXIoJ0V4cGlyZXM6IDAnKTsKCQloZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpOwoJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogcHJpdmF0ZScsZmFsc2UpOwoJCWhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwoJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94bWwnKTsKCQloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInLiR0aGlzLT5HZXROYW1lKCkuJy54bWwiJyApOwoJCWhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBzdHJsZW4oJG91dHB1dCkpOwoJCgkJcHJpbnQoJG91dHB1dCk7CgkKCQlAZmx1c2goKTsgQG9iX2ZsdXNoKCk7IEBvYl9mbHVzaCgpOwoJfQkKCn1lbHNlewoJCgllY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAiZXhwb3J0IiwgJHJldHVybmlkKTsKCWVjaG8gJzxoMz4nLiR0aGlzLT5MYW5nKCdleHBvcnRfdGl0bGUnKS4nPC9oMz4nOwoJZWNobyAnPGZpZWxkc2V0PjxsZWdlbmQ+PGI+Jy4kdGhpcy0+TGFuZygnZXhwb3J0d2hpY2hsZXZlbHMnKS4nPC9iPjwvbGVnZW5kPic7CgkkY2hvaWNlcyA9IGFycmF5KCk7Cglmb3JlYWNoKCR0aGlzLT5nZXRfbGV2ZWxhcnJheSgpIGFzICRsZXZlbCkJJGNob2ljZXNbJGxldmVsXSA9ICRsZXZlbDsKCWVjaG8gJHRoaXMtPkRvQ2hlY2tib3hlcygkaWQsICdzZWxlY3RlZGxldmVscycsICRjaG9pY2VzLCAkY2hvaWNlcykuJzwvZmllbGRzZXQ+PGJyLz4nOwoJZWNobyAnPHA+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImV4cG9ydF90ZW1wbGF0ZXMiLDEsMCkuJyAnLiR0aGlzLT5MYW5nKCdleHBvcnRfdGVtcGxhdGVzJykuJzwvcD4nOwoJZWNobyAnPHA+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAiZG9leHBvcnQiLCBsYW5nKCJzdWJtaXQiKSkuJzwvcD4nOwoJZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwkKCQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/action.import.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSkJZXhpdDsKCmVjaG8gJzxoMz4nLiR0aGlzLT5MYW5nKCdpbXBvcnRfdGl0bGUnKS4nPC9oMz4nOwoKaWYoaXNzZXQoJF9GSUxFUykgJiYgaXNzZXQoJF9GSUxFU1skaWQuJ3htbGZpbGUnXSkgJiYgaXNzZXQoJF9GSUxFU1skaWQuJ3htbGZpbGUnXVsnbmFtZSddKSAmJiAkX0ZJTEVTWyRpZC4neG1sZmlsZSddWyduYW1lJ10gIT0gJycpIHsKCQoJJHhtbCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCAkX0ZJTEVTWyRpZC4neG1sZmlsZSddWyd0bXBfbmFtZSddICk7CgkkcGFyc2VyID0geG1sX3BhcnNlcl9jcmVhdGUoJycpOwoJeG1sX3BhcnNlcl9zZXRfb3B0aW9uKCRwYXJzZXIsIFhNTF9PUFRJT05fVEFSR0VUX0VOQ09ESU5HLCAnVVRGLTgnKTsKCXhtbF9wYXJzZXJfc2V0X29wdGlvbigkcGFyc2VyLCBYTUxfT1BUSU9OX0NBU0VfRk9MRElORywgMCk7Cgl4bWxfcGFyc2VyX3NldF9vcHRpb24oJHBhcnNlciwgWE1MX09QVElPTl9TS0lQX1dISVRFLCAxKTsKCgkkeG1sZGF0YSA9IGFycmF5KCk7Cgl4bWxfcGFyc2VfaW50b19zdHJ1Y3QoJHBhcnNlciwgdHJpbSgkeG1sKSwgJHhtbGRhdGEpOwoJeG1sX3BhcnNlcl9mcmVlKCRwYXJzZXIpOwoJaWYgKCEkeG1sZGF0YSkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2ltcG9ydCcsICRyZXR1cm5pZCwgYXJyYXkoJ21vZHVsZV9tZXNzYWdlJz0+JHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWR4bWwnKSkgKTsKCgkkdGFibGVzID0gYXJyYXkoKTsKCSR0ZW1wbGF0ZXMgPSBhcnJheSgpOwoJJGVudHJpZXMgPSAwOwoJJGN1cnJlbnR0YWJsZSA9IGZhbHNlOwoJJGN1cnJlbnRpdGVtID0gZmFsc2U7CgoJJGV4aXN0aW5nX3RhYmxlcyA9IGFycmF5X21lcmdlKCR0aGlzLT5nZXRfbGV2ZWxhcnJheSgpLCBhcnJheSgnZmllbGRvcHRpb25zJywgJ211bHRpcGxlZmlsZXNmaWVsZHMnKSk7CgkKCQoJZm9yZWFjaCAoJHhtbGRhdGEgYXMgJGRhdGEpIHsKCQlzd2l0Y2goJGRhdGFbJ3R5cGUnXSkgewoJCQljYXNlICdvcGVuJzoKCQkJCWlmKCRkYXRhWydsZXZlbCddID09IDIgJiYgJGRhdGFbJ3RhZyddID09ICd0YWJsZScgJiYgaXNzZXQoJGRhdGFbJ2F0dHJpYnV0ZXMnXSkgJiYgaXNzZXQoJGRhdGFbJ2F0dHJpYnV0ZXMnXVsnbmFtZSddKSApewoJCQkJCSR0YWJsZW5hbWUgPSAkZGF0YVsnYXR0cmlidXRlcyddWyduYW1lJ107CgkJCQkJaWYoaW5fYXJyYXkoJHRhYmxlbmFtZSwgJGV4aXN0aW5nX3RhYmxlcykpewoJCQkJCQkkdGFibGVzWyR0YWJsZW5hbWVdID0gYXJyYXkoKTsKCQkJCQkJJGN1cnJlbnR0YWJsZSA9ICR0YWJsZW5hbWU7CgkJCQkJfWVsc2V7CgkJCQkJCSRjdXJyZW50dGFibGUgPSBmYWxzZTsKCQkJCQl9CgkJCQl9ZWxzZWlmKCRkYXRhWydsZXZlbCddID09IDMgJiYgJGRhdGFbJ3RhZyddID09ICdpdGVtJyl7CgkJCQkJJGN1cnJlbnRpdGVtID0gYXJyYXkoKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNlICdjbG9zZSc6CgkJCQlpZigkY3VycmVudHRhYmxlICYmICRjdXJyZW50aXRlbSAhPSBmYWxzZSAmJiAkZGF0YVsnbGV2ZWwnXSA9PSAzICYmICRkYXRhWyd0YWcnXSA9PSAnaXRlbScpewoJCQkJCWlmKGNvdW50KCRjdXJyZW50aXRlbSkgPiAwKXsKCQkJCQkJYXJyYXlfcHVzaCgkdGFibGVzWyRjdXJyZW50dGFibGVdLCAkY3VycmVudGl0ZW0pOwoJCQkJCQkkZW50cmllcysrOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQljYXNlICdjb21wbGV0ZSc6CgkJCQlpZigkZGF0YVsnbGV2ZWwnXSA9PSA0KXsKCQkJCQkkY3VycmVudGl0ZW1bJGRhdGFbJ3RhZyddXSA9ICRkYXRhWyd2YWx1ZSddOwoJCQkJfWVsc2VpZigkZGF0YVsnbGV2ZWwnXSA9PSAxICYmICRkYXRhWyd0YWcnXSA9PSAndGVtcGxhdGUnICYmIGlzc2V0KCRkYXRhWydhdHRyaWJ1dGVzJ10pICYmIGlzc2V0KCRkYXRhWydhdHRyaWJ1dGVzJ11bJ25hbWUnXSkgKXsKCQkJCQkkdGVtcGxhdGVzWyRkYXRhWydhdHRyaWJ1dGVzJ11bJ25hbWUnXV0gPSAkZGF0YVsndmFsdWUnXTsKCQkJCX0KCQkJCWJyZWFrOwoJCX0KCX0KCglpZihjb3VudCgkdGFibGVzKSA9PSAwKQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnaW1wb3J0JywgJHJldHVybmlkLCBhcnJheSgnbW9kdWxlX21lc3NhZ2UnPT4kdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHhtbCcpKSApOwoJCgkkX1NFU1NJT05bJ2N0bG1tX21vZHVsZWltcG9ydCddID0gYXJyYXkoKTsKCSRfU0VTU0lPTlsnY3RsbW1fbW9kdWxlaW1wb3J0J11bJ3RhYmxlcyddID0gJHRhYmxlczsKCSRfU0VTU0lPTlsnY3RsbW1fbW9kdWxlaW1wb3J0J11bJ3RlbXBsYXRlcyddID0gJHRlbXBsYXRlczsKCQoJZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgImltcG9ydCIsICRyZXR1cm5pZCk7CgllY2hvICc8cD4nLiR0aGlzLT5MYW5nKCdpbXBvcnRfZW50cmllcycsJGVudHJpZXMpLic8L3A+JzsKCWVjaG8gJzxmaWVsZHNldD48bGVnZW5kPjxiPicuJHRoaXMtPkxhbmcoJ2ltcG9ydHdoaWNobGV2ZWxzJykuJzwvYj48L2xlZ2VuZD4nOwoJJGNob2ljZXMgPSBhcnJheSgpOwoJZm9yZWFjaCgkdGFibGVzIGFzICRrZXk9PiR2YWx1ZSl7CgkJaWYoY291bnQoJHZhbHVlKSA+MCkJJGNob2ljZXNbJGtleS4nICgnLmNvdW50KCR2YWx1ZSkuJyknXSA9ICRrZXk7Cgl9CgllY2hvICR0aGlzLT5Eb0NoZWNrYm94ZXMoJGlkLCAnc2VsZWN0ZWRsZXZlbHMnLCAkY2hvaWNlcywgJGNob2ljZXMpLic8L2ZpZWxkc2V0Pjxici8+JzsKCWlmKGNvdW50KCR0ZW1wbGF0ZXMpID4gMCkJZWNobyAnPHA+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImltcG9ydF90ZW1wbGF0ZXMiLDEsMCkuJyAnLiR0aGlzLT5MYW5nKCdpbXBvcnRfdGVtcGxhdGVzJykuJzwvcD4nOwoJZWNobyAnPHA+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImltcG9ydF9kZWxldGUiLDEsMCkuJyAnLiR0aGlzLT5MYW5nKCdpbXBvcnRfZGVsZXRlJykuJzwvcD4nOwoJZWNobyAnPHA+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAiZG9pbXBvcnQiLCBsYW5nKCJzdWJtaXQiKSkuJzwvcD4nOwoJZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKfWVsc2VpZihpc3NldCgkcGFyYW1zWydkb2ltcG9ydCddKSAmJiBpc3NldCgkX1NFU1NJT05bJ2N0bG1tX21vZHVsZWltcG9ydCddKSAmJiBpc3NldCgkcGFyYW1zWydzZWxlY3RlZGxldmVscyddKSl7CgoJJGRiID0mICR0aGlzLT5HZXREYigpOwoJJHRhYmxlcHJlZml4ID0gY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfIi4kdGhpcy0+R2V0TmFtZSgpLiJfIjsKCSRlcnJvcnMgPSAnJzsKCSRhZGRlZCA9IDA7CgkKCWlmKGlzc2V0KCRwYXJhbXNbJ2ltcG9ydF90ZW1wbGF0ZXMnXSkgJiYgJHBhcmFtc1snaW1wb3J0X3RlbXBsYXRlcyddICYmIGlzc2V0KCRfU0VTU0lPTlsnY3RsbW1fbW9kdWxlaW1wb3J0J11bJ3RlbXBsYXRlcyddKSApewoJCWZvcmVhY2goJF9TRVNTSU9OWydjdGxtbV9tb2R1bGVpbXBvcnQnXVsndGVtcGxhdGVzJ10gYXMgJHRwbG5hbWU9PiR0ZW1wbGF0ZSl7CgkJCSR0aGlzLT5TZXRUZW1wbGF0ZSgkdHBsbmFtZSwgJHRlbXBsYXRlKTsKCQl9Cgl9CgkKCSRkZWxldGUgPSAoaXNzZXQoJHBhcmFtc1snaW1wb3J0X2RlbGV0ZSddKSAmJiAkcGFyYW1zWydpbXBvcnRfZGVsZXRlJ10gKTsKCQoJZm9yZWFjaCgkcGFyYW1zWydzZWxlY3RlZGxldmVscyddIGFzICR0YWJsZW5hbWUpewoJCQoJCWlmKGlzX2NhbGxhYmxlKGFycmF5KCRkYiwnTWV0YUNvbHVtbk5hbWVzJykpKXsKCQkJJGV4aXN0aW5nX2ZpZWxkcyA9IGFycmF5KCk7CgkJCSRjb2x1bW5zID0gJGRiLT5NZXRhQ29sdW1uTmFtZXMoJHRhYmxlcHJlZml4LiR0YWJsZW5hbWUpOwoJCQlmb3JlYWNoKCRjb2x1bW5zIGFzICRjb2wpCWFycmF5X3B1c2goJGV4aXN0aW5nX2ZpZWxkcyxzdHJ0b2xvd2VyKCRjb2wpKTsKCQl9ZWxzZXsKCQkJJGNvbHVtbnMgPSBmYWxzZTsKCQl9CgkJCgkJJHByb2NlZWQgPSB0cnVlOwoJCSRoaWdoZXN0aWQgPSAwOwoJCWlmKGlzc2V0KCRfU0VTU0lPTlsnY3RsbW1fbW9kdWxlaW1wb3J0J11bJ3RhYmxlcyddWyR0YWJsZW5hbWVdKSl7CgkJCWlmKCRkZWxldGUpCSRkYi0+RXhlY3V0ZSgiVFJVTkNBVEUgVEFCTEUgIi4kdGFibGVwcmVmaXguJHRhYmxlbmFtZSk7CgkJCSR0YWJsZSA9ICRfU0VTU0lPTlsnY3RsbW1fbW9kdWxlaW1wb3J0J11bJ3RhYmxlcyddWyR0YWJsZW5hbWVdOwoJCQkkaSA9IDA7CgkJCXdoaWxlKCRwcm9jZWVkICYmICRpIDwgY291bnQoJHRhYmxlKSl7CgkJCQkkdmFsdWVzID0gYXJyYXkoKTsKCQkJCSRxdWVyeSA9ICcnOwoJCQkJZm9yZWFjaCgkdGFibGVbJGldIGFzICRrZXk9PiR2YWx1ZSl7CgkJCQkJaWYoICEkY29sdW1ucyB8fCBpbl9hcnJheSgka2V5LCRleGlzdGluZ19maWVsZHMpICl7CgkJCQkJCSRxdWVyeSAuPSAoJHF1ZXJ5PT0nJz8nJzonLCAnKS4iYCIuJGtleS4iYD0/IjsKCQkJCQkJJHZhbHVlc1tdID0gKCR2YWx1ZT09PU5VTEw/Jyc6JHZhbHVlKTsKCQkJCQl9CgkJCQl9CgkJCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi4kdGFibGVwcmVmaXguJHRhYmxlbmFtZS4iIFNFVCAiLiRxdWVyeTsKCQkJCWlmKCRkYi0+RXhlY3V0ZSgkcXVlcnksJHZhbHVlcykpewoJCQkJCWlmKGlzc2V0KCR0YWJsZVskaV1bJ2lkJ10pICYmICR0YWJsZVskaV1bJ2lkJ10gPiAkaGlnaGVzdGlkKQkkaGlnaGVzdGlkID0gJHRhYmxlWyRpXVsnaWQnXTsKCQkJCQkkYWRkZWQrKzsKCQkJCX1lbHNlewoJCQkJCSRwcm9jZWVkID0gZmFsc2U7CgkJCQkJJGVycm9ycyAuPSAoJGVycm9ycz09Jyc/Jyc6JywgJykuJHRhYmxlbmFtZTsKCQkJCX0JCgkJCQkkaSsrOwoJCQl9CgkJfQoJCSRjdXJyZW50aWQgPSAwOwoJCXdoaWxlKCRjdXJyZW50aWQgPCAkaGlnaGVzdGlkKXsKCQkJJGN1cnJlbnRpZCA9ICRkYi0+R2VuSUQoJHRhYmxlcHJlZml4LiR0YWJsZW5hbWUuJ19zZXEnKTsKCQl9Cgl9CgkKCWlmKGlzc2V0KCRfU0VTU0lPTlsnY3RsbW1fbW9kdWxlaW1wb3J0J11bJ3RhYmxlcyddWydtdWx0aXBsZWZpbGVzZmllbGRzJ10pKXsKCQkkdGFibGVuYW1lID0gIm11bHRpcGxlZmlsZXNmaWVsZHMiOwoJCSRwcm9jZWVkID0gdHJ1ZTsKCQkkaGlnaGVzdGlkID0gMDsKCQlpZigkZGVsZXRlKQkkZGItPkV4ZWN1dGUoIlRSVU5DQVRFIFRBQkxFICIuJHRhYmxlcHJlZml4LiR0YWJsZW5hbWUpOwoJCSR0YWJsZSA9ICRfU0VTU0lPTlsnY3RsbW1fbW9kdWxlaW1wb3J0J11bJ3RhYmxlcyddWyR0YWJsZW5hbWVdOwoJCSRpID0gMDsKCQl3aGlsZSgkcHJvY2VlZCAmJiAkaSA8IGNvdW50KCR0YWJsZSkpewoJCQkkdmFsdWVzID0gYXJyYXkoKTsKCQkJJHF1ZXJ5ID0gJyc7CgkJCWZvcmVhY2goJHRhYmxlWyRpXSBhcyAka2V5PT4kdmFsdWUpewoJCQkJaWYoICEkY29sdW1ucyB8fCBpbl9hcnJheSgka2V5LCRleGlzdGluZ19maWVsZHMpICl7CgkJCQkJJHF1ZXJ5IC49ICgkcXVlcnk9PScnPycnOicsICcpLiJgIi4ka2V5LiJgPT8iOwoJCQkJCSR2YWx1ZXNbXSA9ICgkdmFsdWU9PT1OVUxMPycnOiR2YWx1ZSk7CgkJCQl9CgkJCX0KCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuJHRhYmxlcHJlZml4LiR0YWJsZW5hbWUuIiBTRVQgIi4kcXVlcnk7CgkJCWlmKCRkYi0+RXhlY3V0ZSgkcXVlcnksJHZhbHVlcykpewoJCQkJaWYoaXNzZXQoJHRhYmxlWyRpXVsnZmlsZWlkJ10pICYmICR0YWJsZVskaV1bJ2ZpbGVpZCddID4gJGhpZ2hlc3RpZCkJJGhpZ2hlc3RpZCA9ICR0YWJsZVskaV1bJ2ZpbGVpZCddOwoJCQkJJGFkZGVkKys7CgkJCX1lbHNlewoJCQkJJHByb2NlZWQgPSBmYWxzZTsKCQkJCSRlcnJvcnMgLj0gKCRlcnJvcnM9PScnPycnOicsICcpLiR0YWJsZW5hbWU7CgkJCX0JCgkJCSRpKys7CgkJfQoJCSRjdXJyZW50aWQgPSAwOwoJCXdoaWxlKCRjdXJyZW50aWQgPCAkaGlnaGVzdGlkKXsKCQkJJGN1cnJlbnRpZCA9ICRkYi0+R2VuSUQoJHRhYmxlcHJlZml4LiR0YWJsZW5hbWUuJ19zZXEnKTsKCQl9CQkKCQkKCX0KCQoJaWYoaXNzZXQoJF9TRVNTSU9OWydjdGxtbV9tb2R1bGVpbXBvcnQnXVsndGFibGVzJ11bJ2ZpZWxkb3B0aW9ucyddKSl7CgkJJHRhYmxlbmFtZSA9ICJmaWVsZG9wdGlvbnMiOwoJCSRwcm9jZWVkID0gdHJ1ZTsKCQkkaGlnaGVzdGlkID0gMDsKCQlpZigkZGVsZXRlKQkkZGItPkV4ZWN1dGUoIlRSVU5DQVRFIFRBQkxFICIuJHRhYmxlcHJlZml4LiR0YWJsZW5hbWUpOwoJCSR0YWJsZSA9ICRfU0VTU0lPTlsnY3RsbW1fbW9kdWxlaW1wb3J0J11bJ3RhYmxlcyddWyR0YWJsZW5hbWVdOwoJCSRpID0gMDsKCQl3aGlsZSgkcHJvY2VlZCAmJiAkaSA8IGNvdW50KCR0YWJsZSkpewoJCQkkdmFsdWVzID0gYXJyYXkoKTsKCQkJJHF1ZXJ5ID0gJyc7CgkJCWZvcmVhY2goJHRhYmxlWyRpXSBhcyAka2V5PT4kdmFsdWUpewoJCQkJaWYoICEkY29sdW1ucyB8fCBpbl9hcnJheSgka2V5LCRleGlzdGluZ19maWVsZHMpICl7CgkJCQkJJHF1ZXJ5IC49ICgkcXVlcnk9PScnPycnOicsICcpLiJgIi4ka2V5LiJgPT8iOwoJCQkJCSR2YWx1ZXNbXSA9ICgkdmFsdWU9PT1OVUxMPycnOiR2YWx1ZSk7CgkJCQl9CgkJCX0KCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuJHRhYmxlcHJlZml4LiR0YWJsZW5hbWUuIiBTRVQgIi4kcXVlcnk7CgkJCWlmKCRkYi0+RXhlY3V0ZSgkcXVlcnksJHZhbHVlcykpewoJCQkJaWYoaXNzZXQoJHRhYmxlWyRpXVsnaWQnXSkgJiYgJHRhYmxlWyRpXVsnaWQnXSA+ICRoaWdoZXN0aWQpCSRoaWdoZXN0aWQgPSAkdGFibGVbJGldWydpZCddOwoJCQkJJGFkZGVkKys7CgkJCX1lbHNlewoJCQkJZWNobyBteXNxbF9lcnJvcigpOwoJCQkJJHByb2NlZWQgPSBmYWxzZTsKCQkJCSRlcnJvcnMgLj0gKCRlcnJvcnM9PScnPycnOicsICcpLiR0YWJsZW5hbWU7CgkJCX0JCgkJCSRpKys7CgkJfQoJCSRjdXJyZW50aWQgPSAwOwoJCXdoaWxlKCRjdXJyZW50aWQgPCAkaGlnaGVzdGlkKXsKCQkJJGN1cnJlbnRpZCA9ICRkYi0+R2VuSUQoJHRhYmxlcHJlZml4LiR0YWJsZW5hbWUuJ19zZXEnKTsKCQl9CQkKCQkKCX0KCQoJdW5zZXQoJF9TRVNTSU9OWydjdGxtbV9tb2R1bGVpbXBvcnQnXSk7CgkKCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ2ltcG9ydF9kb25lJywkYWRkZWQpOwoJaWYoJGVycm9ycyAhPSAnJykgJG1lc3NhZ2UgLj0gJzxici8+Jy4kdGhpcy0+TGFuZygnY291bGRub3RpbXBvcnQnKS4kZXJyb3JzOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ21vZHVsZV9tZXNzYWdlJz0+JG1lc3NhZ2UpICk7Cgp9ZWxzZXsKCgllY2hvICc8cD4nLiR0aGlzLT5MYW5nKCdpbXBvcnRfZmlsZXByb21wdCcpLic8L3A+JzsKCWVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdpbXBvcnQnLCAkcmV0dXJuaWQsICdwb3N0JywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTsKCWVjaG8gJHRoaXMtPkNyZWF0ZUZpbGVVcGxvYWRJbnB1dCgkaWQsJ3htbGZpbGUnKS4nICcuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0JyxsYW5nKCdzZW5kJykpOwoJZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwkKCQp9Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.movesomething.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQokbmV3cGFyYW1zID0gaXNzZXQoJHBhcmFtc1sibGV2ZWxuYW1lIl0pP2FycmF5KCJhY3RpdmVfdGFiIj0+JHBhcmFtc1sibGV2ZWxuYW1lIl0pOmFycmF5KCk7DQoNCmlmICghaXNzZXQoJHBhcmFtc1sibW92ZSJdKSB8fCAhaXNzZXQoJHBhcmFtc1sidGFibGVuYW1lIl0pIHx8ICFpc3NldCgkcGFyYW1zWyJwcmVmaXgiXSkgfHwgIWlzc2V0KCRwYXJhbXNbImN1cnJlbnRvcmRlciJdKSApDQokdGhpcy0+UmVkaXJlY3QoJGlkLCAiZGVmYXVsdGFkbWluIiwgJHJldHVybmlkLCAkbmV3cGFyYW1zKTsNCg0KJGRiID0mICR0aGlzLT5HZXREYigpOw0KJGRidGFibGUgPSBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV8iLiRwYXJhbXNbInRhYmxlbmFtZSJdOw0KJG9yZGVyID0gJHBhcmFtc1siY3VycmVudG9yZGVyIl07DQokaXRlbWlkID0gJHBhcmFtc1skcGFyYW1zWyJwcmVmaXgiXS4iaWQiXTsNCiR3cGFyZW50ID0gaXNzZXQoJHBhcmFtc1sicGFyZW50Il0pPyIgQU5EIHBhcmVudD0nIi4kcGFyYW1zWyJwYXJlbnQiXS4iJyI6IiI7DQoNCnN3aXRjaCgkcGFyYW1zWyJtb3ZlIl0pew0KCQ0KCWNhc2UgImRlbGV0ZSI6DQoJCWlmKGlzc2V0KCRwYXJhbXNbInNoYXJlY2hpbGRyZW4iXSkgJiYgJHBhcmFtc1sic2hhcmVjaGlsZHJlbiJdKXsNCgkJCS8vIHRoaXMgbGV2ZWwgc2hhcmUgaXRzIGNoaWxkcmVuLi4uIHdlIGRlbGV0ZSB0aGUgaXRlbSdzIGxpbmtzIHRvIGNoaWxkcmVuDQoJCQlpZigkY2hpbGRsZXZlbCA9ICR0aGlzLT5nZXRfbmV4dGxldmVsKCRwYXJhbXNbImxldmVsbmFtZSJdKSl7DQoJCQkJJGxpbmt0YWJsZSA9ICRkYnRhYmxlLiJfaGFzXyIuJGNoaWxkbGV2ZWw7DQoJCQkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICRsaW5rdGFibGUgV0hFUkUgIi4kcGFyYW1zWyJsZXZlbG5hbWUiXS4iX2lkPT8iOw0KCQkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpdGVtaWQpKTsNCgkJCX0NCgkJfWVsc2VpZihpc3NldCgkcGFyYW1zWyJjaGlsZCJdKSAmJiAkcGFyYW1zWyJjaGlsZCJdICE9ICIiKXsNCgkJCS8vIHRoaXMgbGV2ZWwgZG9lc24ndCBzaGFyZSBpdHMgY2hpbGRyZW4uLi4gd2UgZGVsZXRlIHRoZSBpdGVtJ3MgY2hpbGRyZW4NCgkJCSRjaGlsZHRhYmxlID0gY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfIi4kcGFyYW1zWyJjaGlsZCJdOw0KCQkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICRjaGlsZHRhYmxlIFdIRVJFIHBhcmVudCA9ID8iOw0KCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGl0ZW1pZCkpOw0KCQl9DQoJCWlmKGlzc2V0KCRwYXJhbXNbInNoYXJlZGJ5cGFyZW50cyJdKSAmJiAkcGFyYW1zWyJzaGFyZWRieXBhcmVudHMiXSl7DQoJCQkvLyB0aGlzIGl0ZW0gaXMgc2hhcmVkIGJ5IGl0cyBwYXJlbnRzLi4uIHdlIGRlbGV0ZSBsaW5rcyBmcm9tIHBhcmVudHMgdG8gdGhpcyBjaGlsZA0KCQkJaWYoJHBhcmVudGxldmVsID0gJHRoaXMtPmdldF9uZXh0bGV2ZWwoJHBhcmFtc1sibGV2ZWxuYW1lIl0sIGZhbHNlKSl7DQoJCQkJJGxpbmt0YWJsZSA9IGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3N0cmVldHZpZXdfIi4kcGFyZW50bGV2ZWwuIl9oYXNfIi4kcGFyYW1zWyJsZXZlbG5hbWUiXTsNCgkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gJGxpbmt0YWJsZSBXSEVSRSAiLiRwYXJhbXNbImxldmVsbmFtZSJdLiJfaWQ9PyI7DQoJCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGl0ZW1pZCkpOw0KCQkJfQ0KCQl9DQoJCQ0KCQlpZihpc3NldCgkcGFyYW1zWyJmaWxlcyJdKSAmJiAkcGFyYW1zWyJmaWxlcyJdICE9ICIiICYmICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJkZWxldGVfZmlsZXMiLGZhbHNlKSApew0KCQkJJGZpbGVmaWVsZHMgPSBleHBsb2RlKCIsIiwkcGFyYW1zWyJmaWxlcyJdKTsNCgkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICRkYnRhYmxlIFdIRVJFIGlkID0gPyI7DQoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaXRlbWlkKSk7DQoJCQlpZigkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSl7DQoJCQkJZm9yZWFjaCgkZmlsZWZpZWxkcyBhcyAkZmllbGQpew0KCQkJCQlpZigkcm93WyRmaWVsZF0gIT0gIiIgJiYgJHJvd1skZmllbGRdICE9ICIvIil7DQoJCQkJCQkkZmlsZXBhdGggPSAkZ0Ntcy0+Y29uZmlnWyJ1cGxvYWRzX3BhdGgiXS4oc3Vic3RyKCRyb3dbImZpbGVwYXRoIl0sMCwxKT09Ii8iPyIiOiIvIikuJHJvd1skZmllbGRdOw0KCQkJCQkJJHRtcGV4cCA9IGV4cGxvZGUoIi8iLCRyb3dbJGZpZWxkXSk7DQoJCQkJCQkkZmlsZW5hbWUgPSAkdG1wZXhwW2NvdW50KCR0bXBleHApIC0xXTsNCgkJCQkJCSR0aHVtYnBhdGggPSBzdHJfcmVwbGFjZSgkZmlsZW5hbWUsInBsdGh1bWJfIi4kZmlsZW5hbWUsJGZpbGVwYXRoKTsNCgkJCQkJCWlmKGZpbGVfZXhpc3RzKCR0aHVtYnBhdGgpKQl1bmxpbmsoJHRodW1icGF0aCk7DQoJCQkJCQlpZihmaWxlX2V4aXN0cygkZmlsZXBhdGgpKQl1bmxpbmsoJGZpbGVwYXRoKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQkvLyBpZiB0aGUgbGV2ZWwgaGFzIGZpZWxkcyBvZiB0aGUgdHlwZSAiVW5kZWZpbmVkIGFtb3VudCBvZiBmaWxlcyIsIHdlIGRlbGV0ZSB0aGUgZmlsZXMNCgkJaWYoaXNzZXQoJHBhcmFtc1siYWRkZmlsZXMiXSkgJiYgJHBhcmFtc1siYWRkZmlsZXMiXSAhPSAiIil7DQoJCQkkZmllbGRzID0gZXhwbG9kZSgiLCIsJHBhcmFtc1siYWRkZmlsZXMiXSk7DQoJCQlpZihjb3VudCgkZmllbGRzKSA+IDApew0KCQkJCSR3aGVyZSA9ICIiOw0KCQkJCSR2YWx1ZXMgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2goJGZpZWxkcyBhcyAkZmllbGQpew0KCQkJCQkkd2hlcmUgLj0gKCR3aGVyZSA9PSAiIj8iIjoiIE9SICIpLiIgZmllbGRuYW1lPT8iOw0KCQkJCQkkdmFsdWVzW10gPSAkZmllbGQ7DQoJCQkJfQ0KCQkJCSRhZGRmaWxlc3RhYmxlID0gY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld19tdWx0aXBsZWZpbGVzZmllbGRzIjsNCg0KCQkJCWlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJkZWxldGVfZmlsZXMiLGZhbHNlKSl7DQoJCQkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICRhZGRmaWxlc3RhYmxlIFdIRVJFICgkd2hlcmUpIEFORCBpdGVtaWQ9Ii4kaXRlbWlkOw0KCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkdmFsdWVzKTsNCgkJCQkJd2hpbGUoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpew0KCQkJCQkJJGZpbGVwYXRoID0gJGdDbXMtPmNvbmZpZ1sidXBsb2Fkc19wYXRoIl0uKHN1YnN0cigkcm93WyJmaWxlcGF0aCJdLDAsMSk9PSIvIj8iIjoiLyIpLiRyb3dbImZpbGVwYXRoIl07DQoJCQkJCQlpZihmaWxlX2V4aXN0cygkZmlsZXBhdGgpKQl1bmxpbmsoJGZpbGVwYXRoKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gJGFkZGZpbGVzdGFibGUgV0hFUkUgKCR3aGVyZSkgQU5EIGl0ZW1pZD0iLiRpdGVtaWQ7DQoJCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgJHZhbHVlcyk7DQoJCQl9DQoJCX0NCgkJCQ0KCQkNCgkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICRkYnRhYmxlIFdIRVJFIGlkID0gPyBMSU1JVCAxIjsNCgkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGl0ZW1pZCkpOw0KDQoJCS8vIFVQREFURSBUSEUgT1JERVIgT0YgVEhFIElURU1TDQoJCSRxdWVyeSA9ICJVUERBVEUgJGRidGFibGUgU0VUIGl0ZW1fb3JkZXI9KGl0ZW1fb3JkZXItMSkgV0hFUkUgaXRlbV9vcmRlciA+ID8gIi4kd3BhcmVudDsNCgkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG9yZGVyKSk7DQoNCgkJaWYoaXNzZXQoJHBhcmFtc1sibGV2ZWxuYW1lIl0pKQkkdGhpcy0+U2VuZEV2ZW50KCJzdHJlZXR2aWV3X2RlbGV0ZWQiLCBhcnJheSgid2hhdCI9PiRwYXJhbXNbImxldmVsbmFtZSJdKSk7DQoJCSRuZXdwYXJhbXNbIm1vZHVsZV9tZXNzYWdlIl0gPSAkdGhpcy0+bGFuZygibWVzc2FnZV9kZWxldGVkIik7DQoJCWJyZWFrOwkNCg0KCWNhc2UgInVwIjoNCgkJaWYgKCRvcmRlciAhPSAxKXsNCgkJCSRxdWVyeSA9ICJVUERBVEUgJGRidGFibGUgU0VUIGl0ZW1fb3JkZXI9KGl0ZW1fb3JkZXIrMSkgV0hFUkUgaXRlbV9vcmRlciA9ID8gJHdwYXJlbnQgTElNSVQgMTsiOw0KCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG9yZGVyLTEpKTsNCgkJCSRxdWVyeSA9ICJVUERBVEUgJGRidGFibGUgU0VUIGl0ZW1fb3JkZXI9KGl0ZW1fb3JkZXItMSkgV0hFUkUgaWQgPSA/IExJTUlUIDE7IjsNCgkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpdGVtaWQpKTsNCgkJfQ0KCQlicmVhazsNCgkJDQoJY2FzZSAiZG93biI6DQoJCSRxdWVyeSA9ICJVUERBVEUgJGRidGFibGUgU0VUIGl0ZW1fb3JkZXI9KGl0ZW1fb3JkZXItMSkgV0hFUkUgaXRlbV9vcmRlciA9ID8gJHdwYXJlbnQgTElNSVQgMTsiOw0KCQlpZiggJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG9yZGVyKzEpKSApew0KCQkJJHF1ZXJ5ID0gIlVQREFURSAkZGJ0YWJsZSBTRVQgaXRlbV9vcmRlcj0oaXRlbV9vcmRlcisxKSBXSEVSRSBpZCA9ID8gTElNSVQgMTsiOw0KCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGl0ZW1pZCkpOw0KCQl9DQoJCWJyZWFrOw0KfQ0KDQokdGhpcy0+UmVkaXJlY3QoJGlkLCAiZGVmYXVsdGFkbWluIiwgJHJldHVybmlkLCAkbmV3cGFyYW1zKTsNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.reorder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCiRkYiA9ICR0aGlzLT5HZXREYigpOwokbGV2ZWxhcnJheSA9ICR0aGlzLT5nZXRfbGV2ZWxhcnJheSgpOwokb3JkZXJlZGJ5cGFyZW50ID0gYXJyYXkoInN0cmVldHZpZXciKTsKaWYoaXNzZXQoJHBhcmFtc1siY2FuY2VsIl0pKXsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsImRlZmF1bHRhZG1pbiIsJHJldHVybmlkKTsKfWVsc2VpZihpc3NldCgkcGFyYW1zWyJzdWJtaXRyZW9yZGVyIl0pKXsKCWV4cGxvZGUoIiwiLCRwYXJhbXNbIm5ld29yZGVyIl0pOwoJJG9yZGVyID0gYXJyYXkoKTsKCSRsYXN0aWQgPSBhcnJheSgpOwoJZm9yZWFjaChleHBsb2RlKCIsIiwkcGFyYW1zWyJuZXdvcmRlciJdKSBhcyAkaXRlbSl7CgkJbGlzdCgkbGV2ZWwsJGl0ZW1pZCkgPSBleHBsb2RlKCJfIiwkaXRlbSk7CgkJJGxhc3RpZFskbGV2ZWxdID0gJGl0ZW1pZDsKCQlpZighaXNzZXQoJG9yZGVyWyRsZXZlbF0pKQkkb3JkZXJbJGxldmVsXT1hcnJheSgpOwoJCWlmKCRsZXZlbD09MSl7CgkJCSRvcmRlclsxXVtdPSRpdGVtaWQ7CgkJfWVsc2V7CgkJCWlmKCFpc3NldCgkb3JkZXJbJGxldmVsXVskbGFzdGlkWyRsZXZlbC0xXV0pKQkkb3JkZXJbJGxldmVsXVskbGFzdGlkWyRsZXZlbC0xXV09YXJyYXkoKTsKCQkJJG9yZGVyWyRsZXZlbF1bJGxhc3RpZFskbGV2ZWwtMV1dW10gPSAkaXRlbWlkOwoJCX0KCX0KCWZvcmVhY2goJG9yZGVyIGFzICRrZXk9PiRpdGVtcyl7CgkJJGxldmVsID0gJGxldmVsYXJyYXlbJGtleS0xXTsKCQkkaXRlbV9vcmRlciA9IDE7CgkJaWYoJGtleT09MSl7CgkJCWZvcmVhY2goJGl0ZW1zIGFzICRpdGVtKXsKCQkJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3XyIuJGxldmVsLiIgU0VUIGl0ZW1fb3JkZXI9PyBXSEVSRSBpZD0/IExJTUlUIDEiOwoJCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkaXRlbV9vcmRlciwkaXRlbSkpOwoJCQkJJGl0ZW1fb3JkZXIrKzsKCQkJfQoJCX1lbHNlewoJCQlmb3JlYWNoKCRpdGVtcyBhcyAkcGFyZW50PT4kY2hpbGRyZW4pewoJCQkJaWYoaW5fYXJyYXkoJGxldmVsLCAkb3JkZXJlZGJ5cGFyZW50KSkJJGl0ZW1fb3JkZXIgPSAxOwoJCQkJZm9yZWFjaCgkY2hpbGRyZW4gYXMgJGNoaWxkKXsKCQkJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld18iLiRsZXZlbC4iIFNFVCBpdGVtX29yZGVyPT8gV0hFUkUgaWQ9PyBMSU1JVCAxIjsKCQkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRpdGVtX29yZGVyLCRjaGlsZCkpOwoJCQkJCSRpdGVtX29yZGVyKys7CgkJCQl9CgkJCX0JCQkKCQkJCQoJCX0KCQkKCX0KCSR0aGlzLT5SZWRpcmVjdCgkaWQsImRlZmF1bHRhZG1pbiIsJHJldHVybmlkLGFycmF5KCJtb2R1bGVfbWVzc2FnZSI9PiR0aGlzLT5MYW5nKCJtZXNzYWdlX21vZGlmaWVkIikpKTsKfQoKZWNobyAiPGgxPiIuJHRoaXMtPkxhbmcoInJlb3JkZXIiKS4iPC9oMT4iOwokaSA9IDA7CiRzZWxlY3QgPSAiIjsKJHRhYmxlcyA9ICIiOwokb3JkZXIgPSAiIjsKd2hpbGUoJGkgPCBjb3VudCgkbGV2ZWxhcnJheSkpewoJJGxldmVsID0gJGxldmVsYXJyYXlbJGldOwoJJGkrKzsKCSRzZWxlY3QgLj0gKCRzZWxlY3Q9PSIiPyIiOiIsICIpLiJ0YWJsZSIuJGkuIi5pZCB0YWJsZSIuJGkuIl9pZCwgdGFibGUiLiRpLiIubmFtZSB0YWJsZSIuJGkuIl9uYW1lIjsKCWlmKCRpID09IDEpewoJCSR0YWJsZXMgPSBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3XyIuJGxldmVsLiIgdGFibGUiLiRpOwoJfWVsc2V7CgkJJHRhYmxlcyAuPSAiIExFRlQgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3N0cmVldHZpZXdfIi4kbGV2ZWwuIiB0YWJsZSIuJGkuICIgT04gdGFibGUiLigkaS0xKS4iLmlkPXRhYmxlIi4kaS4iLnBhcmVudCI7Cgl9Cgkkb3JkZXIgLj0gKCRvcmRlcj09IiI/IiI6IiwgIikuInRhYmxlIi4kaS4iLml0ZW1fb3JkZXIiOwp9CiRxdWVyeSA9ICJTRUxFQ1QgJHNlbGVjdCBGUk9NICR0YWJsZXMgT1JERVIgQlkgJG9yZGVyIjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgokbGFzdCA9IGFycmF5KCk7CiRsaXN0cyA9IGFycmF5KCk7CiRjb250YWlubWVudCA9IGFycmF5KCk7CiRwYXJzZWxldmVsID0gMTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgInJlb3JkZXIiLCAkcmV0dXJuaWQsICdwb3N0JywgJycsIGZhbHNlLCAnJywgYXJyYXkoKSwgJyBvbnN1Ym1pdD0icmV0dXJuIGN0bG1tX3N1Ym1pdF9yZW9yZGVyKCk7IicpOwp3aGlsZSgkcGFyc2VsZXZlbCA8PSAkaSl7CgkkbGFzdFskcGFyc2VsZXZlbF0gPSBmYWxzZTsKCSRsaXN0c1skcGFyc2VsZXZlbF0gPSBhcnJheSgpOwoJJGNvbnRhaW5tZW50WyRwYXJzZWxldmVsXSA9ICIiOwoJJHBhcnNlbGV2ZWwrKzsKfQplY2hvICI8cD4iLiR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsInN1Ym1pdHJlb3JkZXIiLGxhbmcoInN1Ym1pdCIpKS4iICIuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwicmVzZXRvcmRlciIsJHRoaXMtPkxhbmcoInJlc2V0b3JkZXIiKSkuIiAiLiR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsImNhbmNlbCIsbGFuZygiY2FuY2VsIikpLiI8L3A+IjsKJGN1cnJlbnRsZXZlbCA9IDE7CmVjaG8gJzx1bCBjbGFzcz0ic29ydGFibGVMaXN0IiBpZD0iY3RsbW1fYmlnc29ydGxpc3QiPic7CndoaWxlKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsKCSRwYXJzZWxldmVsID0gMTsKCXdoaWxlKCRwYXJzZWxldmVsIDw9ICRpKXsKCQlpZigkcm93WyJ0YWJsZSIuJHBhcnNlbGV2ZWwuIl9pZCJdICE9ICRsYXN0WyRwYXJzZWxldmVsXSl7CgkJCWlmKCRjdXJyZW50bGV2ZWwgPT0gJHBhcnNlbGV2ZWwpewoJCQkJaWYoJGxhc3RbJGN1cnJlbnRsZXZlbF0pCWVjaG8gIjwvbGk+IjsKCQkJfWVsc2VpZigkY3VycmVudGxldmVsID4gJHBhcnNlbGV2ZWwpewoJCQkJd2hpbGUoJGN1cnJlbnRsZXZlbCA+ICRwYXJzZWxldmVsKXsKCQkJCQllY2hvICI8L2xpPjwvdWw+PC9saT4iOwoJCQkJCSRjdXJyZW50bGV2ZWwtLTsKCQkJCX0KCQkJfWVsc2VpZigkY3VycmVudGxldmVsIDwgJHBhcnNlbGV2ZWwpewoJCQkJJGxpc3RpZCA9ICJsaXN0XyIuJGxldmVsYXJyYXlbJHBhcnNlbGV2ZWxdLiJfIi4kcm93WyJ0YWJsZSIuJHBhcnNlbGV2ZWwuIl9pZCJdOwoJCQkJJGN1cnJlbnRsZXZlbCsrOwoJCQkJZWNobyAnPHVsIGlkPSInLiRsaXN0aWQuJyIgY2xhc3M9InNvcnRhYmxlTGlzdCI+JzsKCQkJCSRsaXN0c1skcGFyc2VsZXZlbF1bXSA9ICRsaXN0aWQ7CgkJCQkkY29udGFpbm1lbnRbJHBhcnNlbGV2ZWxdIC49ICgkY29udGFpbm1lbnRbJHBhcnNlbGV2ZWxdPT0iIj8iIjoiLCIpLiciJy4kbGlzdGlkLiciJzsKCQkJfQoJCQllY2hvICc8bGkgaWQ9ImN0bG1tbGV2ZWwnLiRwYXJzZWxldmVsLidfJy4kcm93WyJ0YWJsZSIuJHBhcnNlbGV2ZWwuIl9pZCJdLiciPicuJHJvd1sidGFibGUiLiRwYXJzZWxldmVsLiJfbmFtZSJdOwoJCQkkbGFzdFskcGFyc2VsZXZlbF0gPSAkcm93WyJ0YWJsZSIuJHBhcnNlbGV2ZWwuIl9pZCJdOwoJCX0KCQkkcGFyc2VsZXZlbCsrOwoJfQp9CmVjaG8gIjwvbGk+IjsKd2hpbGUoJGN1cnJlbnRsZXZlbCA+IDEpewoJZWNobyAiPC91bD48L2xpPiI7CgkkY3VycmVudGxldmVsLS07Cn0KZWNobyAiPC91bD4iOwplY2hvICI8cD4iLiR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsInN1Ym1pdHJlb3JkZXIiLGxhbmcoInN1Ym1pdCIpKS4iICIuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwicmVzZXRvcmRlciIsJHRoaXMtPkxhbmcoInJlc2V0b3JkZXIiKSkuIiAiLiR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsImNhbmNlbCIsbGFuZygiY2FuY2VsIikpLiI8L3A+IjsKZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCJuZXdvcmRlciIsIiIsJyBpZD0iY3RsbW1fbmV3b3JkZXIiJyk7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCiRyZXN0cmljdGVkID0gJHRoaXMtPkdldFByZWZlcmVuY2UoInJlc3RyaWN0X3Blcm1pc3Npb25zIixmYWxzZSk7CmlmKCRyZXN0cmljdGVkICYmICR0aGlzLT5DaGVja1Blcm1pc3Npb24oInN0cmVldHZpZXdfYWR2YW5jZWQiKSkJJHJlc3RyaWN0ZWQgPSBmYWxzZTsKCmVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KJzsKaWYoISRyZXN0cmljdGVkIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oInByb2RjYXRhbG9ndWVfbWFuYWdlXyIuJGxldmVsYXJyYXlbMF0pKQllY2hvICdTb3J0YWJsZS5jcmVhdGUoImN0bG1tX2JpZ3NvcnRsaXN0Iik7Cic7Cgpmb3JlYWNoKCRsaXN0cyBhcyAkbGV2ZWxudW1iZXI9PiRsZXZlbCl7CglpZighJHJlc3RyaWN0ZWQgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbigic3RyZWV0dmlld19tYW5hZ2VfIi4kbGV2ZWxhcnJheVskbGV2ZWxudW1iZXItMV0pKXsKCQlmb3JlYWNoKCRsZXZlbCBhcyAkbGlzdCl7CgkJCS8qCgkJCSAqIHdlIGRvbid0IHVzZSBjb250YWlubWVudCB5ZXQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aCBjaGFuZ2luZyBwYXJlbnRzLi4uIHlldC4uLgoJCQkgKiBlY2hvICdTb3J0YWJsZS5jcmVhdGUoIicuJGxpc3QuJyInLihjb3VudCgkbGV2ZWwpPjE/Iix7Y29udGFpbm1lbnQ6WyIuJGNvbnRhaW5tZW50WyRsZXZlbG51bWJlcl0uIl0sIGRyb3BPbkVtcHR5OmZhbHNlfSI6IiIpLiIpOwoJCQkgKiAiOwoJCQkgKi8KCQkJZWNobyAnU29ydGFibGUuY3JlYXRlKCInLiRsaXN0LiciKTsKCSc7CgkJfQoJfQp9CmVjaG8gJwpmdW5jdGlvbiBjdGxtbV9zdWJtaXRfcmVvcmRlcigpewoJdmFyIG5ld29yZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN0bG1tX25ld29yZGVyIik7Cgl2YXIgbGlzdG5vZGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN0bG1tX2JpZ3NvcnRsaXN0IikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpIik7Cglmb3IoaT0wO2k8bGlzdG5vZGVzLmxlbmd0aDtpKyspewoJCWlmKG5ld29yZGVyLnZhbHVlICE9ICIiKSBuZXdvcmRlci52YWx1ZSArPSAiLCI7CgkJbmV3b3JkZXIudmFsdWUgKz0gbGlzdG5vZGVzW2ldLmlkLnN1YnN0cigxMCk7Cgl9CglyZXR1cm4gdHJ1ZTsJCn0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIicuJGlkLidtb2R1bGVmb3JtXzEiKS5vbnN1Ym1pdCA9IGZ1bmN0aW9uKCl7CglyZXR1cm4gY3RsbW1fc3VibWl0X3Jlb3JkZXIoKTsKfQo8L3NjcmlwdD4nOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.search.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCiRsZXZlbGFycmF5ID0gJHRoaXMtPmdldF9sZXZlbGFycmF5KCk7CiRmaW5hbGxldmVsID0gInN0cmVldHZpZXciOwoKJHNlYXJjaG1vZGUgPSAoaXNzZXQoJHBhcmFtc1sic2VhcmNobW9kZSJdKSAmJiBpbl9hcnJheSgkcGFyYW1zWyJzZWFyY2htb2RlIl0sIGFycmF5KCJzaW1wbGUiLCJhZHZhbmNlZCIpKSk/JHBhcmFtc1sic2VhcmNobW9kZSJdOiJhZHZhbmNlZCI7CgppZihpc3NldCgkcGFyYW1zWyJzdWJtaXRzZWFyY2giXSkpewoJLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJLy8gIyBTRUFSQ0ggUkVTVUxUUwoJJGlubGluZSA9IChpc3NldCgkcGFyYW1zWyJpbmxpbmUiXSkgJiYgJHBhcmFtc1siaW5saW5lIl0pP3RydWU6ZmFsc2U7CgkkbGlua3JldHVybmlkID0gKGlzc2V0KCRwYXJhbXNbImRldGFpbHBhZ2UiXSkpPyR0aGlzLT5nZXRfcGFnZWlkKCRwYXJhbXNbImRldGFpbHBhZ2UiXSk6ZmFsc2U7CglpZighJGxpbmtyZXR1cm5pZCkJJGxpbmtyZXR1cm5pZCA9ICRyZXR1cm5pZDsKCSR3aGF0ID0gJHBhcmFtc1sid2hhdCJdOwoJJGxpbWl0ID0gaXNzZXQoJHBhcmFtc1sibGltaXQiXSk/JHBhcmFtc1sibGltaXQiXTowOwoJaWYoaXNzZXQoJHBhcmFtc1sibmJwZXJwYWdlIl0pICYmICRwYXJhbXNbIm5icGVycGFnZSJdID4gMCl7CgkJJG5icGVycGFnZSA9IChpbnQpICRwYXJhbXNbIm5icGVycGFnZSJdOwoJCSRsaW1pdCA9ICgoKGlzc2V0KCRwYXJhbXNbInBhZ2VpbmRleCJdKT8kcGFyYW1zWyJwYWdlaW5kZXgiXToxKS0xKSAqICRuYnBlcnBhZ2UpLiIsIi4kbmJwZXJwYWdlOwoJfWVsc2V7CgkJJG5icGVycGFnZSA9IGZhbHNlOwoJfQoJCgkkZW1wdHl0ZW1wbGF0ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJlbXB0eXRlbXBsYXRlIiwiKioiKTsKCQoJLy8gd2UgcHJlcGFyZSB0aGUgImRvIGFub3RoZXIgc2VhcmNoIiBsaW5rLCBrZWVwaW5nIHRoZSBzZWFyY2ggcGFyYW1ldGVycwoJJG5ld3BhcmFtcyA9IGFycmF5KCJ3aGF0Ij0+JHdoYXQsICJzZWFyY2htb2RlIj0+JHNlYXJjaG1vZGUpOwoJaWYoaXNzZXQoJHBhcmFtc1sibGlzdHRlbXBsYXRlIl0pKQkkbmV3cGFyYW1zWyJsaXN0dGVtcGxhdGUiXSA9ICRwYXJhbXNbImxpc3R0ZW1wbGF0ZSJdOwoJaWYoaXNzZXQoJHBhcmFtc1sibGltaXQiXSkpCQkJJG5ld3BhcmFtc1sibGltaXQiXSA9ICRwYXJhbXNbImxpbWl0Il07CglpZihpc3NldCgkcGFyYW1zWyJpbmxpbmUiXSkpCQkkbmV3cGFyYW1zWyJpbmxpbmUiXSA9ICRwYXJhbXNbImlubGluZSJdOwoJaWYoaXNzZXQoJHBhcmFtc1sib3JkZXJieSJdKSkJCSRuZXdwYXJhbXNbIm9yZGVyYnkiXSA9ICRwYXJhbXNbIm9yZGVyYnkiXTsKCWlmKGlzc2V0KCRwYXJhbXNbIm5icGVycGFnZSJdKSkJCSRuZXdwYXJhbXNbIm5icGVycGFnZSJdID0gJHBhcmFtc1sibmJwZXJwYWdlIl07CglpZihpc3NldCgkcGFyYW1zWyJkZXRhaWxwYWdlIl0pKQkkbmV3cGFyYW1zWyJkZXRhaWxwYWdlIl0gPSAkcGFyYW1zWyJkZXRhaWxwYWdlIl07CgkkYmFja2xpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICJzZWFyY2giLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCJzZWFyY2hhZ2FpbiIpLCAkbmV3cGFyYW1zLCAiIiwgZmFsc2UsICRpbmxpbmUsICIiLCBmYWxzZSwgZmFsc2UpOwkKCSR0aGlzLT5zbWFydHktPmFzc2lnbigiYmFja2xpbmsiLCRiYWNrbGluayk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImJyZWFkY3J1bWJzIixmYWxzZSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oInBhcmVudG9iaiIsZmFsc2UpOwoJCgkkbXVsdGlwbGVsaXN0ZmllbGRzID0gYXJyYXkoKTsKCQoJaWYoJHNlYXJjaG1vZGUgPT0gImFkdmFuY2VkIil7CgkJLy8gQURWQU5DRUQgU0VBUkNICgkJCgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJCgkJLy8gd2UgcGFyc2UgdGhlIGtleXdvcmRzCgkJJHdoZXJlID0gJHRoaXMtPmdldFdoZXJlRnJvbVBhcmFtcygkcGFyYW1zLCB0cnVlKTsKCQlsaXN0KCR3aGVyZWNsYXVzZSwgJHdoZXJldmFsdWVzKSA9ICR0aGlzLT5idWlsZFdoZXJlKCR3aGVyZSwgJHdoYXQpOwoJCQoJCSRnZXRmdW5jdGlvbiA9ICJnZXRfbGV2ZWxfIi4kd2hhdDsKCQkvLyB3ZSBkbyB0aGUgcXVlcnkKCQkkaXRlbWxpc3QgPSAkdGhpcy0+JGdldGZ1bmN0aW9uKGFycmF5KCksIGZhbHNlLCAiIiwgIiIsIGlzc2V0KCRwYXJhbXNbIm9yZGVyYnkiXSk/JHBhcmFtc1sib3JkZXJieSJdOjAsICRsaW1pdCwgJHdoZXJlY2xhdXNlLCAkd2hlcmV2YWx1ZXMpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigiaXRlbWNvdW50Iixjb3VudCgkaXRlbWxpc3QpKTsKCQkKCQlpZihjb3VudCgkaXRlbWxpc3QpID4gMCl7CgkJCgkJCSR0b3RhbCA9ICRuYnBlcnBhZ2U/JHRoaXMtPmNvdW50c29tZXRoaW5nKCR3aGF0LCJpZCIsYXJyYXkoKSwkd2hlcmVjbGF1c2UsICR3aGVyZXZhbHVlcyk6ZmFsc2U7CgkJCSR0aGlzLT5wYWdpbmF0ZSgkd2hhdCwkdG90YWwsJGlkLCRyZXR1cm5pZCwkcGFyYW1zLCJzZWFyY2giKTsKCQkJCgkJCS8vIHdlIG11c3QgYnVpbGQgYSBkZXRhaWwgbGluayBmb3IgZWFjaCByZXN1bHQgZWxlbWVudAoJCQkkbmV3bGlzdCA9IGFycmF5KCk7CgkJCWZvcmVhY2goJGl0ZW1saXN0IGFzICRpdGVtKXsKCQkJCSRpdGVtID0gJHRoaXMtPmFkZGZyb250ZW5kdXJscygkaXRlbSwkcGFyYW1zLCRpZCwkbGlua3JldHVybmlkKTsKCQkJCSRpdGVtLT5pc19zZWxlY3RlZCA9IGZhbHNlOwoJCQkJYXJyYXlfcHVzaCgkbmV3bGlzdCwgJGl0ZW0pOwoJCQl9CgoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1saXN0IiwkbmV3bGlzdCk7CgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigibGV2ZWx0aXRsZSIsJHRoaXMtPkxhbmcoJHdoYXQuIl9wbHVyYWwiKSk7CgkJCQoJCX1lbHNlewoJCQkkdGhpcy0+cGFnaW5hdGUoJHdoYXQsMCwkaWQsJHJldHVybmlkLCRwYXJhbXMsInNlYXJjaCIpOwoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1saXN0IiwkbmV3bGlzdCk7CgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigiZXJyb3JfbXNnIiwkdGhpcy0+TGFuZygiZXJyb3Jfbm9pdGVtZm91bmQiKSk7CgkJfQoJCQoJCS8vIHdlIHJldHJpZXZlIHRoZSBkaXNwbGF5IHRlbXBsYXRlCgkJaWYoY291bnQoJGl0ZW1saXN0KSA9PSAwICYmICRlbXB0eXRlbXBsYXRlICE9ICIqKiIpewoJCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJGVtcHR5dGVtcGxhdGUpOwoJCX1lbHNlewoJCQlpZihpc3NldCgkcGFyYW1zWyJsaXN0dGVtcGxhdGUiXSkpCQkkdGVtcGxhdGUgPSAkdGhpcy0+R2V0VGVtcGxhdGUoJHBhcmFtc1sibGlzdHRlbXBsYXRlIl0sICR0aGlzLT5HZXROYW1lKCkpOwoJCQlpZighaXNzZXQoJHRlbXBsYXRlKSB8fCAhJHRlbXBsYXRlKXsKCQkJCSR0ZW1wbGF0ZW5hbWUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2VhcmNocmVzdWx0c3RlbXBsYXRlIiwiKioiKTsKCQkJCWlmKCR0ZW1wbGF0ZW5hbWUgPT0gIioqIikJJHRlbXBsYXRlbmFtZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJsaXN0dGVtcGxhdGVfIi4kd2hhdCk7CgkJCQkkdGVtcGxhdGUgPSAkdGhpcy0+R2V0VGVtcGxhdGUoJHRlbXBsYXRlbmFtZSwgJHRoaXMtPkdldE5hbWUoKSk7CgkJCX0JCQoJCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdGVtcGxhdGUpOwoJCX0KCQkKCX1lbHNlewoJCS8vIFNJTVBMRSBTRUFSQ0gKCQkKCQkkdGVtcGxhdGUgPSBmYWxzZTsKCQkkbGV2ZWxzID0gKCR3aGF0ID09ICItYWxsIik/JGxldmVsYXJyYXk6YXJyYXkoJHdoYXQpOwoJCQoJCS8vIHdlIHJldHJpZXZlIHRoZSBkaXNwbGF5IHRlbXBsYXRlCgkJLy8gaWYgdGhlIHVzZXIgaGFzIGFza2VkIGZvciBhIHNwZWNpZmljIGRpc3BsYXkgdGVtcGxhdGUsIHdlIHdpbGwgdXNlIGl0IGZvciBldmVyeSBjYXRlZ29yeSA6CgkJaWYoaXNzZXQoJHBhcmFtc1sibGlzdHRlbXBsYXRlIl0pKQkJJHRlbXBsYXRlID0gJHRoaXMtPkdldFRlbXBsYXRlKCRwYXJhbXNbImxpc3R0ZW1wbGF0ZSJdLCAkdGhpcy0+R2V0TmFtZSgpKTsKCQlpZighaXNzZXQoJHRlbXBsYXRlKSB8fCAhJHRlbXBsYXRlKXsKCQkJJHRlbXBsYXRlbmFtZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzZWFyY2hyZXN1bHRzdGVtcGxhdGUiLCIqKiIpOwoJCQlpZigkdGVtcGxhdGVuYW1lID09ICIqKiIpewoJCQkJaWYoY291bnQoJGxldmVscykgPT0gMSl7CgkJCQkJJHRlbXBsYXRlbmFtZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCJsaXN0dGVtcGxhdGVfIi4kbGV2ZWxzWzBdKTsKCQkJCQkkdGVtcGxhdGUgPSAkdGhpcy0+R2V0VGVtcGxhdGUoJHRlbXBsYXRlbmFtZSwgJHRoaXMtPkdldE5hbWUoKSk7CgkJCQl9ZWxzZXsKCQkJCQkkdGVtcGxhdGUgPSBmYWxzZTsKCQkJCX0KCQkJfWVsc2V7CgkJCQkkdGVtcGxhdGUgPSAkdGhpcy0+R2V0VGVtcGxhdGUoJHRlbXBsYXRlbmFtZSwgJHRoaXMtPkdldE5hbWUoKSk7CgkJCX0KCQl9CgoJCQoJCWZvcmVhY2goJGxldmVscyBhcyAkbGV2ZWwpewoJCQkkd2hlcmVjbGF1c2UgPSAiIjsKCQkJJGZpZWxkcyA9ICR0aGlzLT5nZXRfbGV2ZWxzZWFyY2hmaWVsZHMoJGxldmVsKTsKCQkJJGtleXdvcmRzID0gJHRoaXMtPnBhcnNla2V5d29yZHMoaHRtbF9lbnRpdHlfZGVjb2RlKCRwYXJhbXNbInNlYXJjaGZpZWxkIl0pKTsKCQkJZm9yZWFjaCgkZmllbGRzIGFzICRmaWVsZCl7CgkJCQlmb3JlYWNoKCRrZXl3b3JkcyBhcyAka2V5d29yZCl7CgkJCQkJJHdoZXJlY2xhdXNlIC49ICgkd2hlcmVjbGF1c2UgPT0gIiI/IiI6IiBPUiAiKS4iQS4iLiRmaWVsZC4iIExJS0UgJyUiLmFkZHNsYXNoZXMoJGtleXdvcmQpLiIlJyI7CgkJCQl9CgkJCX0KCQkJJHdoZXJlY2xhdXNlID0gIkEuYWN0aXZlPTEiLigkd2hlcmVjbGF1c2UgPT0gIiI/IiI6IiBBTkQgKCIuJHdoZXJlY2xhdXNlLiIpIik7CgkJCSRnZXRmdW5jdGlvbiA9ICJnZXRfbGV2ZWxfIi4kbGV2ZWw7CgkJCSRpdGVtbGlzdCA9ICR0aGlzLT4kZ2V0ZnVuY3Rpb24oYXJyYXkoKSwgZmFsc2UsICIiLCAiIiwgaXNzZXQoJHBhcmFtc1sib3JkZXJieSJdKT8kcGFyYW1zWyJvcmRlcmJ5Il06MCwgJGxpbWl0LCAkd2hlcmVjbGF1c2UpOwoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1jb3VudCIsY291bnQoJGl0ZW1saXN0KSk7CgkJCQoJCQlpZihjb3VudCgkaXRlbWxpc3QpID4gMCl7CgoJCQkJJHRvdGFsID0gJG5icGVycGFnZT8kdGhpcy0+Y291bnRzb21ldGhpbmcoJGxldmVsLCJpZCIsYXJyYXkoKSwkd2hlcmVjbGF1c2UsIGFycmF5KCkpOmZhbHNlOwoJCQkJJHRoaXMtPnBhZ2luYXRlKCR3aGF0LCR0b3RhbCwkaWQsJHJldHVybmlkLCRwYXJhbXMsInNlYXJjaCIpOwoJCQkJCgkJCQkvLyB3ZSBtdXN0IGJ1aWxkIGEgZGV0YWlsIGxpbmsgZm9yIGVhY2ggcmVzdWx0IGVsZW1lbnQKCQkJCSRuZXdsaXN0ID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goJGl0ZW1saXN0IGFzICRpdGVtKXsKCQkJCQkkaXRlbSA9ICR0aGlzLT5hZGRmcm9udGVuZHVybHMoJGl0ZW0sJHBhcmFtcywkaWQsJGxpbmtyZXR1cm5pZCk7CgkJCQkJJGl0ZW0tPmlzX3NlbGVjdGVkID0gZmFsc2U7CgkJCQkJYXJyYXlfcHVzaCgkbmV3bGlzdCwgJGl0ZW0pOwoJCQkJfQoJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJpdGVtbGlzdCIsJG5ld2xpc3QpOwoJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJsZXZlbHRpdGxlIiwkdGhpcy0+TGFuZygkbGV2ZWwuIl9wbHVyYWwiKSk7CgkJCQkJCQkKCQkJCWlmKCR0ZW1wbGF0ZSA9PSBGQUxTRSl7CgkJCQkJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCJzZWFyY2hfZ2VuZXJhbHJlc3VsdHMudHBsIik7CgkJCQl9ZWxzZXsKCQkJCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdGVtcGxhdGUpOwkJCQkKCQkJCX0KCQkJCQoJCQl9ZWxzZXsKCQkJCSR0aGlzLT5wYWdpbmF0ZSgkd2hhdCwwLCRpZCwkcmV0dXJuaWQsJHBhcmFtcywic2VhcmNoIik7CgkJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oIml0ZW1saXN0IiwkaXRlbWxpc3QpOwoJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJlcnJvcl9tc2ciLCR0aGlzLT5MYW5nKCJlcnJvcl9ub2l0ZW1mb3VuZCIpKTsKCQkJfQoJCQlpZihjb3VudCgkaXRlbWxpc3QpID09IDAgJiYgJGVtcHR5dGVtcGxhdGUgIT0gIioqIil7CgkJCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJGVtcHR5dGVtcGxhdGUpOwkJCQkKCQkJfWVsc2VpZigkdGVtcGxhdGUgPT0gRkFMU0UpewoJCQkJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCJzZWFyY2hfZ2VuZXJhbHJlc3VsdHMudHBsIik7CgkJCX1lbHNlewoJCQkJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJHRlbXBsYXRlKTsKCQkJfQoJCX0KCQkKCX0KCQoJLy8gIyBFTkQgU0VBUkNIIFJFU1VMVFMKCS8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCn1lbHNlewoJCgkvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgkvLyAjIFNFQVJDSCBGT1JNCQoJCgkkd2hhdCA9IChpc3NldCgkcGFyYW1zWyJ3aGF0Il0pICYmIGluX2FycmF5KCRwYXJhbXNbIndoYXQiXSwkbGV2ZWxhcnJheSkpPyRwYXJhbXNbIndoYXQiXToiLWFsbCI7CglpZigkc2VhcmNobW9kZSA9PSAiYWR2YW5jZWQiICYmICR3aGF0ID09ICItYWxsIikJCSR3aGF0ID0gJGZpbmFsbGV2ZWw7CgoJZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgInNlYXJjaCIsICRyZXR1cm5pZCk7CgllY2hvICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICJ3aGF0IiwgJHdoYXQpOwoJZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAic2VhcmNobW9kZSIsICRzZWFyY2htb2RlKTsKCWlmKGlzc2V0KCRwYXJhbXNbImxpc3R0ZW1wbGF0ZSJdKSkJZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAibGlzdHRlbXBsYXRlIiwgJHBhcmFtc1sibGlzdHRlbXBsYXRlIl0pOwoJaWYoaXNzZXQoJHBhcmFtc1sibGltaXQiXSkpCWVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgImxpbWl0IiwgJHBhcmFtc1sibGltaXQiXSk7CglpZihpc3NldCgkcGFyYW1zWyJpbmxpbmUiXSkpCWVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgImlubGluZSIsICRwYXJhbXNbImlubGluZSJdKTsKCWlmKGlzc2V0KCRwYXJhbXNbIm9yZGVyYnkiXSkpCWVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgIm9yZGVyYnkiLCAkcGFyYW1zWyJvcmRlcmJ5Il0pOwoJaWYoaXNzZXQoJHBhcmFtc1sibmJwZXJwYWdlIl0pKQkJZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAibmJwZXJwYWdlIiwgJHBhcmFtc1sibmJwZXJwYWdlIl0pOwoJaWYoaXNzZXQoJHBhcmFtc1siZGV0YWlscGFnZSJdKSkJZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAiZGV0YWlscGFnZSIsICRwYXJhbXNbImRldGFpbHBhZ2UiXSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oInNlYXJjaHRpdGxlIiwgJHRoaXMtPkxhbmcoInNlYXJjaHRpdGxlIikpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJ3aGF0IiwgKCR3aGF0ID09ICItYWxsIik/ZmFsc2U6JHRoaXMtPkxhbmcoJHdoYXQpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigic3VibWl0IiwgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgInN1Ym1pdHNlYXJjaCIsICR0aGlzLT5MYW5nKCJzZWFyY2hidG4iKSkpOwoKCWlmKCRzZWFyY2htb2RlID09ICJzaW1wbGUiKXsKCQkvLyBXRSBBUkUgRE9JTkcgQSBTSU1QTEUgU0VBUkNICgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJzZWFyY2hmaWVsZCIsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJzZWFyY2hmaWVsZCIsIiIsNTApKTsKCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoInNlYXJjaC50cGwiKTsKCQkKCX1lbHNlewoJCS8vIFdFIEFSRSBET0lORyBBTiBBRFZBTkNFRCBTRUFSQ0gKCgkJJHRoaXMtPmNyZWF0ZUZpZWxkRm9ybSgkd2hhdCwgJGlkLCB0cnVlKTsKCgkJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCJzZWFyY2hfIi4kd2hhdC4iLnRwbCIpOwoJCQoJfQoJCgllY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgkKCS8vICMgRU5EIFNFQVJDSCBGT1JNCgkvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCQoJCn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.sitemap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCiRsZXZlbGFycmF5ID0gJHRoaXMtPmdldF9sZXZlbGFycmF5KCk7CiRtb2RlID0gKGlzc2V0KCRwYXJhbXNbIm1vZGUiXSkgJiYgaW5fYXJyYXkoJHBhcmFtc1sibW9kZSJdLGFycmF5KCJnb29nbGUiLCJ1cmxsaXN0IiwiZnJvbnRlbmQiKSkpPyRwYXJhbXNbIm1vZGUiXToiZnJvbnRlbmQiOwokd2hhdCA9IGlzc2V0KCRwYXJhbXNbIndoYXQiXSk/ZXhwbG9kZSgnfCcsJHBhcmFtc1sid2hhdCJdKTokbGV2ZWxhcnJheTsKJGxpbmtyZXR1cm5pZCA9IChpc3NldCgkcGFyYW1zWyJkZXRhaWxwYWdlIl0pKT8kdGhpcy0+Z2V0X3BhZ2VpZCgkcGFyYW1zWyJkZXRhaWxwYWdlIl0pOiRyZXR1cm5pZDsKJGlubGluZSA9IChpc3NldCgkcGFyYW1zWyJpbmxpbmUiXSkgJiYgJHBhcmFtc1siaW5saW5lIl0pP3RydWU6ZmFsc2U7CgokZGIgPSAkdGhpcy0+R2V0RGIoKTsKJGkgPSAwOwokc2VsZWN0ID0gIiI7CiR0YWJsZXMgPSAiIjsKJG9yZGVyID0gIiI7CndoaWxlKCRpIDwgY291bnQoJGxldmVsYXJyYXkpKXsKCSRsZXZlbCA9ICRsZXZlbGFycmF5WyRpXTsKCSRpKys7Cgkkc2VsZWN0IC49ICgkc2VsZWN0PT0iIj8iIjoiLCAiKS4idGFibGUiLiRpLiIuYWxpYXMgdGFibGUiLiRpLiJfYWxpYXMsIHRhYmxlIi4kaS4iLm5hbWUgdGFibGUiLiRpLiJfbmFtZSI7CglpZigkaSA9PSAxKXsKCQkkdGFibGVzID0gY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfIi4kdGhpcy0+R2V0TmFtZSgpLiJfIi4kbGV2ZWwuIiB0YWJsZSIuJGk7Cgl9ZWxzZXsKCQkkdGFibGVzIC49ICIgTEVGVCBKT0lOICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfIi4kdGhpcy0+R2V0TmFtZSgpLiJfIi4kbGV2ZWwuIiB0YWJsZSIuJGkuICIgT04gdGFibGUiLigkaS0xKS4iLmlkPXRhYmxlIi4kaS4iLnBhcmVudCI7Cgl9Cgkkb3JkZXIgLj0gKCRvcmRlcj09IiI/IiI6IiwgIikuInRhYmxlIi4kaS4iLml0ZW1fb3JkZXIiOwp9CiRxdWVyeSA9ICJTRUxFQ1QgJHNlbGVjdCBGUk9NICR0YWJsZXMgT1JERVIgQlkgJG9yZGVyIjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgokbGFzdCA9IGFycmF5KCk7CiRjdXJyZW50bGV2ZWwgPSAxOwppZigkbW9kZSA9PSAnZnJvbnRlbmQnKQllY2hvICc8dWwgaWQ9IicuJHRoaXMtPkdldE5hbWUoKS4nX21hcCI+JzsKd2hpbGUoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpewoJJHBhcnNlbGV2ZWwgPSAxOwoJd2hpbGUoJHBhcnNlbGV2ZWwgPD0gJGkpewoJCWlmKGluX2FycmF5KCRsZXZlbGFycmF5WyRwYXJzZWxldmVsLTFdLCR3aGF0KSAmJiAoIWlzc2V0KCRsYXN0WyRwYXJzZWxldmVsXSkgfHwgJHJvd1sidGFibGUiLiRwYXJzZWxldmVsLiJfYWxpYXMiXSAhPSAkbGFzdFskcGFyc2VsZXZlbF0pICl7CgkJCSR3YW50ZWR3aGF0ID0gKCRwYXJzZWxldmVsPT0kaSk/JGxldmVsYXJyYXlbJGktMV06JGxldmVsYXJyYXlbJHBhcnNlbGV2ZWxdOwoJCQkkd2FudGVkcGFyYW0gPSAoJHBhcnNlbGV2ZWw9PSRpKT8iYWxpYXMiOiJwYXJlbnQiOwoJCQkkbmV3cGFyYW1zID0gYXJyYXkoIndoYXQiPT4kd2FudGVkd2hhdCwgJHdhbnRlZHBhcmFtPT4kcm93WyJ0YWJsZSIuJHBhcnNlbGV2ZWwuIl9hbGlhcyJdKTsKCQkJJHByZXR0eXVybCA9ICR0aGlzLT5CdWlsZFByZXR0eVVybHMoJG5ld3BhcmFtcywgJGxpbmtyZXR1cm5pZCk7CgkJCWlmKCRtb2RlID09ICdmcm9udGVuZCcpewoJCQkJaWYoJGN1cnJlbnRsZXZlbCA9PSAkcGFyc2VsZXZlbCl7CgkJCQkJaWYoJGxhc3RbJGN1cnJlbnRsZXZlbF0pCWVjaG8gIjwvbGk+IjsKCQkJCX1lbHNlaWYoJGN1cnJlbnRsZXZlbCA+ICRwYXJzZWxldmVsKXsKCQkJCQl3aGlsZSgkY3VycmVudGxldmVsID4gJHBhcnNlbGV2ZWwpewoJCQkJCQllY2hvICI8L2xpPjwvdWw+PC9saT4iOwoJCQkJCQkkY3VycmVudGxldmVsLS07CgkJCQkJfQoJCQkJfWVsc2VpZigkY3VycmVudGxldmVsIDwgJHBhcnNlbGV2ZWwpewoJCQkJCSRjdXJyZW50bGV2ZWwrKzsKCQkJCQllY2hvICc8dWw+JzsKCQkJCX0KCQkJCWVjaG8gJzxsaT4nLiR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImRlZmF1bHQiLCAkbGlua3JldHVybmlkLCAkcm93WyJ0YWJsZSIuJHBhcnNlbGV2ZWwuIl9uYW1lIl0sICRuZXdwYXJhbXMsICIiLCBmYWxzZSwgJGlubGluZSwgIiIsIGZhbHNlLCAkcHJldHR5dXJsKTsKCQkJfWVsc2VpZigkbW9kZSA9PSAndXJsbGlzdCcpewoJCQkJZWNobyAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICJkZWZhdWx0IiwgJGxpbmtyZXR1cm5pZCwgIiIsICRuZXdwYXJhbXMsICIiLCB0cnVlLCAkaW5saW5lLCAiIiwgZmFsc2UsICRwcmV0dHl1cmwpLicKJzsKCQkJfWVsc2VpZigkbW9kZSA9PSAnZ29vZ2xlJyl7CgkJCQkkcHJpb3JpdHkgPSA5IC0gJHBhcnNlbGV2ZWw7CgkJCQlpZigkcHJpb3JpdHkgPCAwKQkkcHJpb3JpdHkgPSAxOwoJCQkJJHByaW9yaXR5ID0gIjAuIi4kcHJpb3JpdHk7CgkJCQllY2hvICcKCTx1cmw+CgkJPGxvYz4nLiR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImRlZmF1bHQiLCAkbGlua3JldHVybmlkLCAiIiwgJG5ld3BhcmFtcywgIiIsIHRydWUsICRpbmxpbmUsICIiLCBmYWxzZSwgJHByZXR0eXVybCkuJzwvbG9jPgoJCTxwcmlvcml0eT4nLiRwcmlvcml0eS4nPC9wcmlvcml0eT4KCTwvdXJsPic7CgkJCX0KCQkJCgkJCSRsYXN0WyRwYXJzZWxldmVsXSA9ICRyb3dbInRhYmxlIi4kcGFyc2VsZXZlbC4iX2FsaWFzIl07CgkJfQoJCSRwYXJzZWxldmVsKys7Cgl9Cn0KaWYoJG1vZGUgPT0gJ2Zyb250ZW5kJyl7CgllY2hvICI8L2xpPiI7Cgl3aGlsZSgkY3VycmVudGxldmVsID4gMSl7CgkJZWNobyAiPC91bD48L2xpPiI7CgkJJGN1cnJlbnRsZXZlbC0tOwoJfQoJZWNobyAiPC91bD4iOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/action.toggle.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qIFBBUkFNUyA6DQp3aGF0KiA6ICdhY3RpdmUnIHx8ICdkZWZhdWx0Jw0KdGFibGVuYW1lKg0KcHJlZml4DQpwcmVmaXguaWQNCm5ld3ZhbCA6IG5ldyB2YWx1ZSBmb3IgYWN0aXZlICggMCB8fCAxICkNCiovDQoNCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQokbmV3cGFyYW1zID0gaXNzZXQoJHBhcmFtc1snbGV2ZWxuYW1lJ10pP2FycmF5KCdhY3RpdmVfdGFiJz0+JHBhcmFtc1snbGV2ZWxuYW1lJ10pOmFycmF5KCk7DQoNCmlmKCAhaXNzZXQoJHBhcmFtc1snd2hhdCddKSB8fCAhaXNzZXQoJHBhcmFtc1sndGFibGVuYW1lJ10pICkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJG5ld3BhcmFtcyk7DQoNCiRkYiA9JiAkdGhpcy0+R2V0RGIoKTsNCiRkYnRhYmxlID0gY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfJy4kcGFyYW1zWyd0YWJsZW5hbWUnXTsNCiRmaWVsZCA9ICRwYXJhbXNbJ3doYXQnXTsNCiRpdGVtaWQgPSBpc3NldCgkcGFyYW1zWydwcmVmaXgnXSk/JHBhcmFtc1skcGFyYW1zWydwcmVmaXgnXS4naWQnXTpmYWxzZTsNCiR2YWx1ZSA9IGlzc2V0KCRwYXJhbXNbJ25ld3ZhbCddKT8kcGFyYW1zWyduZXd2YWwnXToxOw0KDQppZigkZmllbGQgPT0gJ2FjdGl2ZScpew0KCSRxdWVyeSA9ICJVUERBVEUgJGRidGFibGUgU0VUIGFjdGl2ZT0/IFdIRVJFIGlkPT8gTElNSVQgMSI7DQoJJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdmFsdWUsICRpdGVtaWQpKTsNCn1lbHNlaWYoJGZpZWxkID09ICdkZWZhdWx0Jyl7DQoJaWYoaXNzZXQoJHBhcmFtc1sicGFyZW50Il0pICYmIGlzc2V0KCRwYXJhbXNbInBhcmVudGRlZmF1bHQiXSkgJiYgJHBhcmFtc1sicGFyZW50ZGVmYXVsdCJdKSB7DQoJCSRxdWVyeSA9ICJVUERBVEUgJGRidGFibGUgU0VUIGlzZGVmYXVsdD0wIFdIRVJFIHBhcmVudD0/IjsNCgkJJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkcGFyYW1zWyJwYXJlbnQiXSkpOw0KCX1lbHNlew0KCQkkcXVlcnkgPSAiVVBEQVRFICRkYnRhYmxlIFNFVCBpc2RlZmF1bHQ9MCI7DQoJCSRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KCX0NCglpZigkaXRlbWlkKXsNCgkJJHF1ZXJ5ID0gIlVQREFURSAkZGJ0YWJsZSBTRVQgaXNkZWZhdWx0PTEgV0hFUkUgaWQ9PyI7DQoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGl0ZW1pZCkpOw0KCX0NCn0NCg0KDQokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkbmV3cGFyYW1zKTsNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/faq.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkNUTE1vZHVsZU1ha2VyIEZBUTwvdGl0bGU+CQoJPHN0eWxlPgoJCWEgeyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KCQlhOmhvdmVyIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KCQlkaXYucWRpdiB7IG1hcmdpbjogMjVweCAyNXB4IDgwcHggMjVweDsgfQoJCWgxIHsKCQkJdGV4dC1hbGlnbjogcmlnaHQ7CgkJCW1hcmdpbi1ib3R0b206IDA7CgkJfQoJCWRpdiNub3RpY2UgewoJCQl0ZXh0LWFsaWduOiByaWdodDsKCQl9CgkJI21lbnUgewoJCQlmb250LWZhbWlseTogVmVyZGFuYTsKCQkJcGFkZGluZzogMjVweCAwIDI1cHggNzVweDsKCQkJZm9udC13ZWlnaHQ6IGJvbGQ7CgkJfQoJCSNtZW51IGxpIHsKCQkJbWFyZ2luOiAycHg7CgkJfQoJCWRpdi5hbnN3ZXIgewoJCQliYWNrZ3JvdW5kLWNvbG9yIDogI2UxZWNmZTsKCQkJcGFkZGluZzogMTBweDsKCQkJYm9yZGVyOiAxcHggc29saWQgRGFya2JsdWU7CgkJCWJvcmRlci10b3A6IG5vbmU7CgkJfQoJCWRpdi5xdWVzdGlvbiB7IAoJCQlmb250LXdlaWdodDogYm9sZDsKCQkJYmFja2dyb3VuZC1jb2xvciA6ICNhNGM1ZmY7CgkJCXBhZGRpbmc6IDEwcHg7CgkJCWJvcmRlcjogMXB4IHNvbGlkIERhcmtibHVlOwoJCQlib3JkZXItYm90dG9tOiBub25lOwoJCX0KCQkuY29kZSB7CgkJCWRpc3BsYXk6IGJsb2NrOwoJCQliYWNrZ3JvdW5kLWNvbG9yOiBMaWdodEdyZXk7CgkJCWJvcmRlcjogMXB4IHNvbGlkIERhcmtHcmV5OwoJCQlwYWRkaW5nOiA1cHg7CgkJCW1hcmdpbjogMTBweDsKCQl9CgkJCgkJCQoJPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KPGgxPkNUTE1vZHVsZU1ha2VyIEZBUTwvaDE+CjxkaXYgaWQ9Im5vdGljZSI+Q292ZXJzIHRoZSBjcmVhdGVkIG1vZHVsZXMsIG5vdCBDVExNb2R1bGVNYWtlciBpdHNlbGYuLi48YnIvPmNsaWNrIDxhIGhyZWY9ImhlbHAuaHRtbCI+aGVyZTwvYT4gZm9yIGhlbHAgYWJvdXQgdGhlIG1vZHVsZSBjcmVhdGlvbi48L2Rpdj4KPHVsIGlkPSJtZW51Ij4KCgk8bGk+PGEgaHJlZj0iI3ExMCI+TW9kaWZ5aW5nIHRoZSBtb2R1bGUgLSB3aGVyZSB0byBzdGFydD88L2E+PC9saT4KCTxsaT48YSBocmVmPSIjcTkiPkNhbiBJIHB1dCA8aT5zbWFydHkgdGFnczwvaT4gaW4gdGhlIGl0ZW0ncyBmaWVsZHM/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3E1Ij5Ib3cgY2FuIEkgcmV0cmlldmUgPGk+aW1hZ2VzPC9pPiBpbiB0aGUgZGlzcGxheSB0ZW1wbGF0ZXM/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3ExMiI+SG93IGNhbiBJIGRpc3BsYXkgdmFsdWVzIGluc2lkZSBhbiA8aT5BcnJheTwvaT4/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3ExNSI+SG93IGNhbiBJIGNoYW5nZSB0aGUgPGk+ZGF0ZXMgZGlzcGxheSBmb3JtYXQ8L2k+PzwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiNxMTgiPkhvdyBjYW4gSSBmb3JtYXQgdGhlIDxpPnBhZ2UgbWVudTwvaT4/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3EyMiI+SG93IGNhbiBJIGRpc3BsYXkgYSBsaXN0IG9mIGVsZW1lbnRzIHNvcnRlZCBpbiBhIGNlcnRhaW4gd2F5PzwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiNxMjQiPkhvdyBjYW4gSSBnZXQgdGhlIDxpPm51bWJlciBvZiBlbGVtZW50czwvaT4gaW4gYSBjYXRlZ29yeT88L2E+PC9saT4KCTxsaT48YSBocmVmPSIjcTYiPkknbSB0cnlpbmcgdG8gZGlzcGxheSBhIGxpc3Qgb2YgaXRlbXMsIGJ1dCB0aGUgZGV0YWlsIHRlbXBsYXRlIGlzIHVzZWQgaW5zdGVhZC4gV2hhdCdzIGdvaW5nIG9uPzwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiNxMjMiPkFkbWluIHBhbmVsIGJyZWFrcyB3aGVuIEkgYWRkIGFuIGltYWdlIHRvIGFuIGl0ZW0uIFdoYXQncyBnb2luZyBvbj88L2E+PC9saT4KCTxsaT48YSBocmVmPSIjcTIxIj5DYW4gSSBpbnRlZ3JhdGUgdGhlIDxpPkNvbW1lbnRzPC9pPiBtb2R1bGU/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3ExMSI+V2FybmluZzogbW9kdWxlIDxpPiJpcyBub3QgcHJvcGVybHkgY2xlYW5pbmcgaW5wdXQgcGFyYW1zLiI8L2k+IFdoYXQncyBnb2luZyBvbj88L2E+PC9saT4KCTxsaT48YSBocmVmPSIjcTEzIj5Ib3cgY2FuIEkgcmV0cmlldmUgaW5mb3JtYXRpb25zIGFib3V0IGFuIG9iamVjdCBvdGhlciB0aGFuIHRoZSBvbmUgSSdtIHdhdGNoaW5nPzwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiNxMSI+Q2FuIEkgY2hhbmdlIHRoZSBmaWVsZCBpbnB1dHMgdGhhdCBhcmUgZGlzcGxheWVkIGluIHRoZSBtb2R1bGUncyA8aT5zZWFyY2ggZm9ybTwvaT4/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3E0Ij5DYW4gSSBjaGFuZ2UgdGhlIDxpPmVkaXQgZm9ybTwvaT4gZm9yIGEgbGV2ZWw/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3ExNyI+SG93IGNhbiBJIGFkZCBhIDxpPmNvbmRpdGlvbjwvaT4gZm9yIGFuZCBlbGVtZW50J3MgaW5wdXQgdG8gYmUgYWNjZXB0ZWQ/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3E3Ij5Ib3cgYXJlIHRoZSA8aT5kZWZhdWx0YWRtaW4gcGFuZWxzPC9pPiBnZW5lcmF0ZWQ/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3EyIj5Db3VsZCBJIHNob3cgdGhlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIGl0ZW0gaW4sIHNheSwgdGhlIHBhZ2UncyA8PC8+dGl0bGU+IHRhZz88L2E+PC9saT4KCTxsaT48YSBocmVmPSIjcTE2Ij5Ib3cgY2FuIEkgYWRkIG1vZHVsZSBlbGVtZW50cyB0byBteSA8aT5nb29nbGUgc2l0ZW1hcDwvaT4/PC9hPjwvbGk+Cgk8bGk+PGEgaHJlZj0iI3ExOSI+SG93IGNhbiBJIGFkZCBhbiBleHBpcmF0aW9uIGZpZWxkPzwvYT48L2xpPgoJPGxpPjxhIGhyZWY9IiNxMjAiPkhvdyBjYW4gSSBzZXR1cCB0aGUgZnJvbnRlbmQgZWRpdCBhY3Rpb24gd2l0aCB0aGUgRnJvbnQgRW5kIFVzZXJzIG1vZHVsZT88L2E+PC9saT4KCTxsaT48YSBocmVmPSIjcTMiPkNhbiBJIGNoYW5nZSBob3cgdGhlIDxpPnByZXR0eSB1cmxzPC9pPiBhcmUgZ2VuZXJhdGVkIGFuZCBpbnRlcnByZXRlZD88L2E+PC9saT4KCTxsaT48YSBocmVmPSIjcTgiPkNhbiBJIG1ha2UgbXkgbW9kdWxlIGFsd2F5cyBhY3QgYXMgaWYgdGhlICJmb3JjZWxpc3QiIHBhcmFtZXRlciB3YXMgZW5hYmxlZD88L2E+PC9saT4KCTxsaT48YSBocmVmPSIjcTE0Ij5XaGF0J3Mgd2l0aCB0aGlzIGdldF9tb2R1bGVHZXRWYXJzKCkgZnVuY3Rpb24/PC9hPjwvbGk+CgkKPC91bD4KCjxkaXYgaWQ9InF1ZXN0aW9ucyI+CgoKCTxkaXYgY2xhc3M9InFkaXYiIGlkPSJxMTAiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5Nb2RpZnlpbmcgdGhlIG1vZHVsZSAtIHdoZXJlIHRvIHN0YXJ0PzwvZGl2PgoJCTxkaXYgY2xhc3M9ImFuc3dlciI+CgkJPHA+VG8gZ2V0IHlvdSBzdGFydGVkLCBoZXJlJ3MgYSBiYXNpYyBleHBsYW5hdGlvbiBvZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBjcmVhdGVkIG1vZHVsZS48L3A+CgkJPHA+PGI+VGhlIGxhbmd1YWdlIGZpbGVzPC9iPjwvcD4KCQk8cD5JbiB0aGUgbGFuZy8gZm9sZGVyLCB5b3Ugd2lsbCBmaW5kIG9uZSBmaWxlIGZvciBlYWNoIHN1cHBvcnRlZCBsYW5ndWFnZS4gSW5zaWRlIGVhY2ggZmlsZSwgeW91IHNob3VsZCBoYXZlIHNldmVyYWwgbGluZXMgdGhhdCBsb29rIGxpa2UgdGhpczo8L3A+CgkJPHByZSBjbGFzcz0iY29kZSI+JGxhbmdbInBvc3RpbnN0YWxsIl0gPSAiTW9kdWxlIHN1Y2Nlc3NmdWxseSBhZGRlZC4iOzwvcHJlPgoJCTxwPlRoaXMgbGluZSBkZWZpbmVzIGEgc3RyaW5nIHJlZmVycmVkIHRvIGFzICJwb3N0aW5zdGFsbCIuIEluIGV2ZXJ5IGxhbmd1YWdlIGZpbGUsIHRoZXJlIHNob3VsZCBiZSBhIHN0cmluZyBmb3IgdGhpcyBrZXkuIFdoZW4gdGhlIG1vZHVsZXMgd2lzaGVzIHRvIGRpc3BsYXkgc29tZSB0ZXh0LCBpdCB3aWxsIGxvb2sgZm9yIHRoZSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGUga2V5IGluIHRoZSBsYW5ndWFnZSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVzZXIncyBsYW5ndWFnZS4gWW91IHdpbGwgbW9zdCBsaWtlbHkgd2lzaCB0byBjaGFuZ2UgdGhlc2UgZmlsZXMsIGJ1dCBiZSBjYXJlZnVsLiBFYWNoIHN0cmluZyBpcyBkZWxpbWl0ZWQgd2l0aCBxdW90ZXMgKGVpdGhlciAnIG9yICIpLCBhbmQgb2J2aW91c2x5IHlvdSBjYW4ndCB1c2UgdGhlc2UgZGVsaW1pdGVycyBpbnNpZGUgdGhlIHN0cmluZy4gSWYgeW91IHdpc2ggdG8gZG8gc28sIHlvdSdsbCBoYXZlIHRvIHVzZSBhbiBlc2NhcGUgc2lnbiA6IFwiIHdpbGwgZGlzcGxheSBhIHF1b3RlIHdpdGhvdXQgYmVpbmcgY29uc2lkZXJlZCBhcyBhIGRlbGltaXRlci48L3A+CgkJPHA+PGI+VGhlIHRlbXBsYXRlczwvYj48L3A+CgkJPHA+VGhlIGZpbGVzIGluIHRoZSB0ZW1wbGF0ZXMvIGZvbGRlciBjb250YWluIG5vIHBocCAtIGp1c3QgcGxhaW4gaHRtbCBhbmQgc21hcnR5IHRhZ3MuIFRoZXkgYXJlIHVzZWQgZm9yIHRoZSBsYXlvdXQgb2YgbW9zdCBhY3Rpb25zLjxici8+CgkJPHA+PGk+YWRtaW5wYW5lbC50cGw8L2k+IGlzIHRoZSBsYXlvdXQgZm9yIHRoZSBsaXN0IG9mIGVsZW1lbnRzIG9mIGVhY2ggbGV2ZWwgaW4gdGhlIGFkbWluIHBhbmVsICh0byBtb2RpZnkgdGhpcywgc2VlIDxhIGhyZWY9IiNxNyI+dGhpcyB0b3BpYzwvYT4pPGJyLz4KCQk8aT5ub3Jlc3VsdC50cGw8L2k+IGlzIHVzZWQgd2hlbiB0aGVyZSBhcmUgbm8gaXRlbSB0byBkaXNwbGF5LiBUeXBpY2FsbHksIHRoaXMgaXMganVzdCBhIG1lc3NhZ2Ugc2F5aW5nIHRoYXQgbm90aGluZyB3YXMgZm91bmQuPGJyLz4KCQk8aT5zZWFyY2gudHBsPC9pPiBpcyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBzaW1wbGUgc2VhcmNoIGZvcm0gKHdoZW4gY2FsbGluZyB0aGUgc2VhcmNoIGFjdGlvbiB3aXRoIHNlYXJjaG1vZGU9InNpbXBsZSIpLCB3aGljaCBzZWFyY2hlcyBpbiBhbGwgbGV2ZWxzLjxici8+CgkJPGk+c2VhcmNoX2dlbmVyYWxyZXN1bHRzLnRwbDwvaT4gaXMgdGhlIHRlbXBsYXRlIGZvciB0aGUgc2VhcmNoIHJlc3VsdHMgd2hlbiB5b3UgYXJlIHNlYXJjaGluZyBpbiBtb3JlIHRoYW4gb25lIGxldmVsIChvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGxpc3QgdGVtcGxhdGUgZm9yIHRoYXQgbGV2ZWwgaXMgdXNlZCkuPGJyLz4KCQk8aT5icm93c2VmaWxlcy50cGw8L2k+IGlzIHRoZSB0ZW1wbGF0ZSB1c2VkIGZvciB0aGUgZmlsZSBzZWxlY3Rpb24gcGFnZSAod2hlbiB1c2luZyB0YWJsZSBkaXNwbGF5KS48YnIvPgoJCUZvciBlYWNoIGxldmVsLCB5b3Ugc2hvdWxkIGhhdmUgYSA8aT5lZGl0TEVWRUxQUkVGSVgudHBsPC9pPiwgYSA8aT5zZWFyY2hfTEVWRUxOQU1FLnRwbDwvaT4gYW5kIHBvc3NpYmx5IGEgPGk+ZnJvbnRlbmRfYWRkX0xFVkVMUFJFRklYLnRwbDwvaT4uIFRoZSBmaXJzdCBpcyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBhZG1pbiBmb3JtLCB3aGVuIGFuIGl0ZW0gb2YgdGhpcyBsZXZlbCBpcyBhZGRlZCBvciBlZGl0ZWQuIFRoZSBzZWNvbmQgaXMgdGhlIHRlbXBsYXRlIGZvciB0aGUgYWR2YW5jZWQgc2VhcmNoIGZvcm0uIFRoZSBsYXN0IGlzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGZyb250ZW5kIGFkZCBhY3Rpb24gZm9yIHRoaXMgbGV2ZWwgKGlmIHlvdSBjaG9zZSB0byBjcmVhdGUgb25lKS48L3A+CgkJPHA+PGI+VGhlIGFjdGlvbiBmaWxlczwvYj48L3A+CgkJPHA+SW4gdGhlIHJvb3Qgb2YgdGhlIG1vZHVsZSBmb2xkZXJzLCB5b3Ugd2lsbCBub3RpY2UgdGhhdCBmaWxlcyBoYXZlIGEgcHJlZml4IChlaXRoZXIgImFjdGlvbiIgb3IgIm1ldGhvZCIpLCBleGNlcHQgZm9yIHRoZSBtb2R1bGUgZmlsZSAoPGk+bW9kdWxlbmFtZS5tb2R1bGUucGhwPC9pPiksIHdoaWNoIGNvbnRhaW5zIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0cyBvZiB0aGUgY29kZS4gTWV0aG9kcyBhcmUgY2FsbGVkIHdoZW4gdGhlIG1vZHVsZSBpcyBpbnN0YWxsZWQsIHVuaW5zdGFsbGVkLCBvciB1cGdyYWRlZCAtIGFuZCBhdCBubyBvdGhlciBtb21lbnQuIEFjdGlvbnMsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgY2FsbGVkIGV2ZXJ5dGltZSB0aGUgY21zIGFza3MgdGhlIG1vZHVsZSB0byBkbyBzb21ldGhpbmcgLSBlaXRoZXIgaW4gdGhlIGZyb250ZW5kIG9yIHRoZSBhZG1pbi4gQnV0IHRoZSBtb2R1bGUgaGFzIG1vcmUgYWN0aW9ucyB0aGFuIHRoZSBmaWxlcyB5b3Ugc2VlIHRoZXJlLiBPcGVuIHRoZSBtb2R1bGUgZmlsZSAoPGk+bW9kdWxlbmFtZS5tb2R1bGUucGhwPC9pPiksIGFuZCBsb29rIGZvciB0aGUgZnVuY3Rpb24gPGI+RG9BY3Rpb248L2I+IChzaG91bGQgYmUgYXJvdW5kIHRoZSA0MDB0aCBsaW5lKS4gWW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UgdGhpczo8L3A+CgkJPHByZSBjbGFzcz0iY29kZSI+CWZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybmlkPS0xKXsKCQlnbG9iYWwgJGdDbXM7CgkJc3dpdGNoKCRhY3Rpb24pewoJCQljYXNlICJsaW5rIjoKCQkJCWVjaG8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCJkZWZhdWx0IiwkcmV0dXJuaWQsIiIsJHBhcmFtcywiIix0cnVlKTsKCQkJCWJyZWFrOwoJCQljYXNlICJjaGFuZ2VkZWZ0ZW1wbGF0ZXMiOgoJCQkJZm9yZWFjaCgkcGFyYW1zIGFzICRrZXk9PiR2YWx1ZSl7CgkJCQkgICAgaWYoJGtleSAhPSAic3VibWl0IikJICAgJHRoaXMtPnNldFByZWZlcmVuY2UoJGtleSwgJHZhbHVlKTsKCQkJCX0KCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICJkZWZhdWx0YWRtaW4iLCAkcmV0dXJuaWQsIGFycmF5KCJhY3RpdmVfdGFiIj0+InRlbXBsYXRlcyIsICJtb2R1bGVfbWVzc2FnZSI9PiJtZXNzYWdlX21vZGlmaWVkIikpOwoJCQkJYnJlYWs7CgkJCWNhc2UgImRlbGV0ZXRwbCI6CgkJCQkkbmV3cGFyYW1zID0gYXJyYXkoImFjdGl2ZV90YWIiPT4idGVtcGxhdGVzIik7CgkJCQkkZGVmdGVtcGxhdGVzID0gJHRoaXMtPmdldERlZmF1bHRUZW1wbGF0ZXMoKTsKCQkJICAgIGlmKGlzc2V0KCRwYXJhbXNbInRwbG5hbWUiXSkgJiYgIWluX2FycmF5KCRwYXJhbXNbInRwbG5hbWUiXSwgJGRlZnRlbXBsYXRlcykpewoJCQkJICAgIGlmKCR0aGlzLT5EZWxldGVUZW1wbGF0ZSgkcGFyYW1zWyJ0cGxuYW1lIl0pKQkgICAkbmV3cGFyYW1zWyJtb2R1bGVfbWVzc2FnZT4iXSA9ICR0aGlzLT5sYW5nKCJtZXNzYWdlX21vZGlmaWVkIik7CgkJCQl9CgkJCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAiZGVmYXVsdGFkbWluIiwgJHJldHVybmlkLCAkbmV3cGFyYW1zKTsKCQkJCWJyZWFrOzwvcHJlPgoJCTxwPmFuZCBzbyBvbi4uLjxici8+CgkJU29tZSBhY3Rpb25zIChtb3N0bHkgYmVjYXVzZSB0aGV5IGFyZSBzbWFsbCkgZG9uJ3QgaGF2ZSB0aGVpciBvd24gZmlsZS4gRWFjaCAiY2FzZSIsIGhlcmUsIGlzIHN1Y2ggYW4gYWN0aW9uLiBXaGVuIGFza2VkIGZvciBhbiBhY3Rpb24gdGhhdCBpcyBub3QgaW4gdGhlIGxpc3QsIHRoZSBtb2R1bGUgd2lsbCBsb29rIGZvciB0aGUgYWNjb3JkaW5nIGZpbGUgKGFjdGlvbi5BQ1RJT05OQU1FLnBocCkuPC9wPgoJCTxwPlNvIGhlcmUncyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBhY3Rpb25zIHlvdSBtaWdodCBub3RpY2UgaW4geW91ciBtb2R1bGU6CgkJPHVsPgoJCTxsaT48aT5saW5rPC9pPjogdGhlIGZyb250ZW5kICJsaW5rIiBhY3Rpb24sIHdoaWNoIGNyZWF0ZXMgYSBsaW5rIHRvIGFub3RoZXIgYWN0aW9uPC9saT4KCQk8bGk+PGk+ZGVmYXVsdDwvaT46IHRoZSBmcm9udGVuZCBkZWZhdWx0IGFjdGlvbiwgd2hpY2ggZGlzcGxheXMgZWxlbWVudHMgb3IgbGlzdCBvZiBlbGVtZW50czwvbGk+CgkJPGxpPjxpPnNlYXJjaDwvaT46IHRoZSBmcm9udGVuZCAic2VhcmNoIiBhY3Rpb24sIHdoaWNoIGRpc3BsYXlzIHRoZSBzZWFyY2ggZm9ybSBhbmQgc2VhcmNoIHJlc3VsdHM8L2xpPgoJCTxsaT48aT5mcm9udGVuZF9lZGl0PC9pPjogdGhlIGZyb250ZW5kIGFjdGlvbiB0byBhZGQvZWRpdCBlbGVtZW50cyAoYnJlYWtzIGludG8gRkVhZGRfKiBhY3Rpb25zKTwvbGk+CgkJPGxpPjxpPmRlZmF1bHRhZG1pbjwvaT46IHRoZSBhY3Rpb24gZm9yIHRoZSBhZG1pbiBwYW5lbCB3aGljaCBkaXNwbGF5cyB0aGUgbGlzdCBvZiBsZXZlbHMsIGVsZW1lbnRzLCB0ZW1wbGF0ZXMgYW5kIHNvIG9uPC9saT4KCQk8bGk+PGk+ZWRpdFRlbXBsYXRlPC9pPjogd2hlbiBhIG1vZHVsZSB0ZW1wbGF0ZSBpcyBlZGl0ZWQ8L2xpPgoJCTxsaT48aT5kZWxldGV0cGw8L2k+OiB3aGVuIGEgbW9kdWxlIHRlbXBsYXRlIGlzIGRlbGV0ZWQ8L2xpPgoJCTxsaT48aT5hZGRfb3B0aW9udmFsdWU8L2k+LDxpPnJlbmFtZV9vcHRpb252YWx1ZTwvaT4sPGk+bW92ZV9vcHRpb252YWx1ZTwvaT4gYW5kIDxpPmRlbGV0ZV9vcHRpb252YWx1ZTwvaT4gbWFuYWdlIHRoZSBvcHRpb25zIGZvciB0aGUgZHluYW1pYyBsaXN0IGZpZWxkczwvbGk+CgkJPGxpPjxpPmVkaXRMRVZFTFBSRUZJWDwvaT46IGZvciBlYWNoIGxldmVsLCB0aGUgYWN0aW9uIHRvIGFkZCBvciBlZGl0IGFuIGVsZW1lbnQgb2YgdGhlIGxldmVsPC9saT4KCQk8bGk+PGk+dG9nZ2xlPC9pPjogdXNlZCB3aGVuIGEgbGluayBpbiB0aGUgYWRtaW5wYW5lbCBpcyBjbGlja2VkIHRvIGNoYW5nZSB0aGUgImFjdGl2ZSIgb3IgImRlZmF1bHQiIHZhbHVlIG9mIGFuIGVsZW1lbnQ8L2xpPgoJCTxsaT48aT5tb3Zlc29tZXRoaW5nPC9pPjogdXNlZCB3aGVuIHRoZSBvcmRlciBvZiBlbGVtZW50cyBpcyBjaGFuZ2VkIGluIHRoZSBhZG1pbiBwYW5lbCwgb3Igd2hlbiBhbiBlbGVtZW50IGlzIGRlbGV0ZWQ8L2xpPgoJCTxsaT48aT5icm93c2VmaWxlczwvaT46IHVzZWQgd2hlbiB5b3Ugc2VsZWN0IGEgZmlsZSBmb3IgYW4gZWxlbWVudC4gSXQgZGlzcGxheXMgYSBsaXN0IG9mIHRoZSBjdXJyZW50IGZpbGVzIGFuZCB0aGUgdXBsb2FkIGZvcm0uPC9saT4KCQk8bGk+PGk+YWRkZmlsZXM8L2k+OiB1c2VkIHdoZW4gbmV3IGZpbGUocykgaXMoYXJlKSB1cGxvYWRlZC4gVGhpcyBhY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGJyb3dzZWZpbGVzIGFjdGlvbiAoaW1hZ2VzIGFyZSByZXNpemVkIGhlcmUpLjwvbGk+CgkJPGxpPjxpPmFzc2lnbmZpbGU8L2k+OiBhc3NpZ25zIGFuIGV4aXN0aW5nIGZpbGUgdG8gdGhlIGl0ZW0gaW4gdGhlIGRhdGFiYXNlPC9saT4KCQk8L3VsPgoJCTxwPjxiPlRoZSBmdW5jdGlvbnM8L2I+PC9wPgoJCTxwPkFzaWRlIGZyb20gRG9BY3Rpb24sIHRoZSBtb2R1bGUgZmlsZSBjb250YWlucyBhIGxvdCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbiBhbnkgYWN0aW9uLiBNb3N0IG9mIHRoZW0gYXJlIHNpbXBseSBwcm9jZWR1cmVzIHRoYXQgdGhlIG1vZHVsZSBuZWVkcyB0byBkbyBxdWl0ZSBvZnRlbi4gSSd2ZSB0cmllZCB0byBjb21tZW50IHRoZW0gYXQgbGVhc3QgdG8gc2F5IHdoYXQgdGhleSdyZSB0aGVyZSBmb3IsIGJ1dCBoZXJlIEknbGwgdHJ5IHRvIGRlc2NyaWJlIHNvbWUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IG9uZXMuPC9wPgoJCTx1bD4KCQk8bGk+VGhlIDxpPkJ1aWxkUHJldHR5VXJscygpPC9pPiBhbmQgPGk+U2V0UGFyYW1ldGVycygpPC9pPiBmdW5jdGlvbnMgY29udHJvbCBhcmUgbW9zdGx5IHVzZWQgZm9yIHByZXR0eSB1cmxzIChtb3JlIGluZm9ybWF0aW9ucyA8YSBocmVmPSIjcTMiPmhlcmU8L2E+KTwvbGk+CgkJPGxpPlRoZSA8aT5nZXRfbW9kdWxlR2V0VmFycygpPC9pPiBpcyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9ucyBmcm9tIHRoZSB1cmwgYWJvdXQgb3RoZXIgY2FsbHMgb2YgdGhlIG1vZHVsZS4gSW4gbW9zdCBjYXNlcywgdGhpcyBpcyB3aGF0IHByb3ZpZGVzIHRoZSAkaXRlbS0+aXNfc2VsZWN0ZWQgYXR0cmlidXRlIG9mIGl0ZW1zLjwvbGk+CgkJPGxpPlRoZSA8aT5wbFJlc2l6ZSgpPC9pPiBmdW5jdGlvbiAobG9jYXRlZCBpbiBmdW5jdGlvbi5wbHJlc2l6ZS5waHApIGlzIHVzZWQgdG8gcmVzaXplIGltYWdlcyBhbmQgY3JlYXRlIHRodW1ibmFpbHM8L2xpPgoJCTxsaT5Gb3IgZWFjaCBsZXZlbCwgeW91IHdpbGwgaGF2ZSBhIDxpPmdldF9sZXZlbF9OQU1FT0ZMRVZFTCgpPC9pPi4gVGhlcmUgYXJlIGFtb25nIHRoZSBtb3N0IGltcG9ydGFudCwgYXMgdGhleSBhcmUgY2FsbCBldmVyeXRoaW5nIGFuIGVsZW1lbnQgKG9yIGxpc3Qgb2YgZWxlbWVudHMpIGlzIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBleHBsYWluZWQgYmVsb3cuPC9saT4KCQk8bGk+VGhlIDxpPmFkZGFkbWlubGlua3MoKTwvaT4gZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIGFkbWluIHBhbmVsIGFuZCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYSA8aT5nZXRfbGV2ZWxfTkFNRU9GTEVWRUwoKTwvaT4gZnVuY3Rpb24uIEl0IHRha2VzIGV2ZXJ5IGl0ZW0gYW5kIGFkZCBsaW5rcyB0byBlZGl0LCBtb3ZlLCBkZWxldGUgdGhlIGl0ZW0gYW5kIHNvIG9uLjwvbGk+CgkJPC91bD4KCQk8cD48Yj5UaGUgZ2V0X2xldmVsIGZ1bmN0aW9uczwvYj48L3A+CgkJPHA+RWFjaCA8aT5nZXRfbGV2ZWxfTkFNRU9GTEVWRUwoKTwvaT4gZnVuY3Rpb24gcXVlcmllcyBlbGVtZW50cyBmcm9tIHRoZSBkYXRhYmFzZSwgY3JlYXRlcyBhbiBvYmplY3QgZm9yIGVhY2gsIGFuZCByZXR1cm4gYW4gYXJyYXkgb2YgdGhlc2Ugb2JqZWN0cyAoYmFzaWNhbGx5LCB0aGUgJGl0ZW1saXN0IHlvdSdyZSB1c2luZyBpbiB0ZW1wbGF0ZXMpLjxici8+CgkJVGhlIGZ1bmN0aW9uIGFjY2VwdHMgc2V2ZXJhbCBwYXJhbWV0ZXJzLCB3aGljaCBJJ2xsIGV4bGFpbiBoZXJlOjwvcD4KCQk8dWw+CgkJPGxpPjxpPiR3aGVyZTwvaT4gaXMgYW4gYXJyYXkgb2YgY29uZGl0aW9ucywgaW4gdGhlIGZvcm0gJGZpZWxkPT4kdmFsdWUuIEZvciBleGFtcGxlLCA8Y29kZT4kd2hlcmU9YXJyYXkoImFjdGl2ZSI9PjEpPC9jb2RlPiB3b3VsZCBtZWFuIHRoYXQgb25seSB0aGUgaXRlbXMgd2VyZSB0aGUgImFjdGl2ZSIgZmllbGQgaXMgZXF1YWwgdG8gMSBhcmUgcXVlcmllZC48L2xpPgoJCTxsaT48aT4kYWRtaW48L2k+IGNvbnRyb2xzIHdoZXRoZXIgdGhlIGFkZGFkbWlubGlua3MoKSBqdXN0IGRpc2N1c3NlZCBzaG91bGQgYmUgY2FsbGVkLiBJZiBpdCBpcywgdGhlICRpZCBhbmQgJHJldHVybmlkIHBhcmFtZXRlcnMgYXJlIG5lY2Vzc2FyeS4gT3RoZXJ3aXNlIHRoZXkgYXJlbid0LjwvbGk+CgkJPGxpPjxpPiRvcmRlcjwvaT4gY29udHJvbHMgdGhlIHdheSB0aGUgbGlzdCBvZiBlbGVtZW50cyBzaG91bGQgYmUgb3JkZXJlZC4gUG9zc2libGUgdmFsdWVzIGFyZSAibW9kaWZpZWQiLCAiY3JlYXRlZCIsICJuYW1lIiBvciBmYWxzZSAoaW4gd2hpY2ggY2FzZSB0aGUgaXRlbSBvcmRlciBkZWZpbmVkIGluIHRoZSBhZG1pbiBwYW5lbCBpcyB1c2VkKTwvbGk+CgkJPGxpPjxpPiRsaW1pdDwvaT4gY29udHJvbHMgdGhlIG1heGltdW0gYW1vdW50IG9mIGl0ZW1zIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkPC9saT4KCQk8bGk+PGk+JGN1c3RvbXdoZXJlPC9pPiBhbmQgPGk+JGN1c3RvbXZhbHVlczwvaT4gYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlICR3aGVyZSBwYXJhbWV0ZXIuIFdoZW4geW91IHdhbnQgdG8gY3JlYXRlIGEgcXVlcnkgbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSAkd2hlcmUgcGFyYW1ldGVyIGFsbG93cywgeW91IGNhbiBwcm92aWRlIHRoZSBzdHJpbmcgcXVlcnkgaW4gJGN1c3RvbXdoZXJlIGFuZCB0aGUgYXJyYXkgb2YgdmFsdWVzIGluICRjdXN0b212YWx1ZXMuPC9saT4KCQk8L3VsPgoJCTxwPkhvcGUgdGhpcyBnZXRzIHlvdSBnb2luZy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9uLCBvciB3aXNoIHRvIHNoYXJlIHRoZSBtb2RpZmljYXRpb25zIHlvdSd2ZSBkb25lLCBmZWVsIHRvIGNvbnRhY3QgbWUsIGVpdGhlciBhdCB0aGUgZm9yZ2Ugb3Igb24gdGhlIGZvcnVtLjwvcD4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoKCgk8ZGl2IGNsYXNzPSJxZGl2IiBpZD0icTkiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5DYW4gSSBwdXQgc21hcnR5IHRhZ3MgaW4gdGhlIGl0ZW0ncyBmaWVsZHM/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD5ZZXMuPC9wPgoJCTxwPkxldCdzIHNheSB5b3UgaGF2ZSBwcm9kdWN0cyB3aGljaCBoYXZlIGEgZGVzY3JpcHRpb24gZmllbGQsIGFuZCBpbiB0aGF0IGRlc2NyaXB0aW9uIHlvdSB3b3VsZCBsaWtlIHRvIHB1dCBzb21lIHNtYXJ0eSBjb2RlLiBJZiB5b3UgdHJ5IGFuZCBwdXQsIHNheSwge3RpdGxlfSBpbiBhbiBhdHRlbXB0IHRvIGRpc3BsYXkgdGhlIHBhZ2UgdGl0bGUsIHlvdSBzaG91bGQgbm90aWNlIHRoYXQgInt0aXRsZX0iIHdpbGwgYmUgZGlzcGxheWVkIGV4YWN0bHkgbGlrZSB0aGF0IGluIHRoZSBwcm9kdWN0J3MgZGVzY3JpcHRpb24uIFRoYXQgaXMgYmVjYXVzZSBpdGVtcycgZmllbGRzIGFyZW4ndCBldmFsdWF0ZWQuPC9wPgoJCTxwPkhvd2V2ZXIsIGluIHlvdXIgdGVtcGxhdGUsIHlvdSBtYXkgY2hvb3NlIHRvIGV2YWx1YXRlIHRoZSBmaWVsZHMuIEZvciBleGFtcGxlLCBpbiB5b3VyIHRlbXBsYXRlLCBpZiBpbnN0ZWFkIG9mIHRoZSBzaW1wbGUgPGNvZGU+eyRpdGVtLT5kZXNjcmlwdGlvbn08L2NvZGU+IHlvdSB3cml0ZTo8L3A+CgkJPHByZSBjbGFzcz0iY29kZSI+e2V2YWwgdmFyPSRpdGVtLT5kZXNjcmlwdGlvbn08L3ByZT4KCQk8cD5Zb3Ugd2lsbCB0aGVuIG5vdGljZSB0aGF0IHt0aXRsZX0gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIHBhZ2UncyB0aXRsZSBpcyBkaXNwbGF5ZWQuPGJyLz4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoKCgk8ZGl2IGNsYXNzPSJxZGl2IiBpZD0icTUiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5Ib3cgY2FuIEkgcmV0cmlldmUgaW1hZ2VzIGluIHRoZSBkaXNwbGF5IHRlbXBsYXRlcz88L2Rpdj4KCQk8ZGl2IGNsYXNzPSJhbnN3ZXIiPgoJCTxwPllvdSBwdXQgeyRpdGVtLT5pbWFnZWZpZWxkfSBpbiB5b3VyIHRlbXBsYXRlLCBhbmQgdGhlIGltYWdlIGRvZXNuJ3Qgc2hvdyB1cC4uLjwvcD4KCQk8cD5UaGF0J3MgcHJldHR5IG11Y2ggbm9ybWFsLiAkaXRlbS0+aW1hZ2VmaWVsZCBpcyBpdHNlbGYgYW4gb2JqZWN0LCB0aGF0IGhhcyBzZXZlcmFsIGF0dHJpYnV0ZXM6PC9wPgoJCTx1bD4KCQkJPGxpPiRpdGVtLT5pbWFnZWZpZWxkLSZndDtmaWxlcGF0aCAocmVsYXRpdmUgdXJsKTwvbGk+CgkJCTxsaT4kaXRlbS0+aW1hZ2VmaWVsZC0mZ3Q7ZXh0ICh0aGUgZmlsZSBleHRlbnNpb24pPC9saT4KCQkJPGxpPiRpdGVtLT5pbWFnZWZpZWxkLSZndDt1cmwgKGFic29sdXRlIHVybCk8L2xpPgoJCQk8bGk+JGl0ZW0tPmltYWdlZmllbGQtJmd0O3NpemUgKHNpemUgaW4gYnl0ZXMpPC9saT4KCQkJPGxpPiRpdGVtLT5pbWFnZWZpZWxkLSZndDtzaXplX3dmb3JtYXQgKGZvcm1hdGVkIHNpemUpPC9saT4KCQkJPGxpPiRpdGVtLT5pbWFnZWZpZWxkLSZndDtpbWFnZXNpemUgKGZvciBpbWFnZXMgb25seSk8L2xpPgoJCQk8bGk+JGl0ZW0tPmltYWdlZmllbGQtJmd0O3dpZHRoIChmb3IgaW1hZ2VzIG9ubHkpPC9saT4KCQkJPGxpPiRpdGVtLT5pbWFnZWZpZWxkLSZndDtoZWlnaHQgKGZvciBpbWFnZXMgb25seSk8L2xpPgoJCQk8bGk+JGl0ZW0tPmltYWdlZmllbGQtJmd0O2ltYWdlIChpbWFnZSB0YWc7IGZvciBpbWFnZXMgb25seSk8L2xpPgoJCQk8bGk+JGl0ZW0tPmltYWdlZmllbGQtJmd0O3RodW1ibmFpbCAodGh1bWJuYWlsIHVybCwgaWYgYXBwbGljYWJsZSk8L2xpPgoJCQk8bGk+JGl0ZW0tPmltYWdlZmllbGQtJmd0O2ZpbGVtdGltZSAobGFzdCBtb2RpZmllZCwgdW5peCB0aW1lKTwvbGk+CgkJCTxsaT4kaXRlbS0+aW1hZ2VmaWVsZC0mZ3Q7bW9kaWZpZWQgKGxhc3QgbW9kaWZpZWQsIGZvcm1hdGVkIHRpbWUpPC9saT4KCQk8L3VsPgoJCTxwPlRvIGRpc3BsYXkgdGhlIGltYWdlLCB5b3UgY2FuIHVzZSB7JGl0ZW0tPmltYWdlZmllbGQtPmltYWdlfSwgb3IgaWYgeW91IHdpc2ggbW9yZSBvcHRpb25zLCB5b3UgY2FuIGNyZWF0ZSB0aGUgaW1hZ2UgdGFnIHlvdXJzZWxmOjxici8+CgkJPHByZSBjbGFzcz0iY29kZSI+PDwvPmltZyBzcmM9InVwbG9hZHMveyRpdGVtLT5pbWFnZWZpZWxkLT5maWxlcGF0aH0iIGFsdD0iIi8+PC9wcmU+PC9wPgoJCTwvZGl2PgoJCTxhIGNsYXNzPSJiYWNrdG90b3AiIGhyZWY9IiN0b3AiPkJhY2sgdG8gdG9wPC9hPgoJPC9kaXY+CgoKCTxkaXYgY2xhc3M9InFkaXYiIGlkPSJxMTIiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5Ib3cgY2FuIEkgZGlzcGxheSB2YWx1ZXMgaW5zaWRlIGFuIEFycmF5PzwvZGl2PgoJCTxkaXYgY2xhc3M9ImFuc3dlciI+CgkJPHA+SWYgeW91IGhhdmUgYSBsaXN0IGZpZWxkIHRoYXQgYWxsb3dzIG11bHRpcGxlIGNob2ljZXMgKGNoZWNrYm94ZXMgb3Igc2VsZWN0IGxpc3QpIGFuZCBzaW1wbHkgdXNlIHskaXRlbS0+ZmllbGRuYW1lfSBvciB7JGl0ZW0tPmZpZWxkbmFtZV9uYW1ldmFsdWV9IGluIHlvdXIgdGVtcGxhdGUsIHlvdSdsbCBwcm9iYWJseSBlbmQgdXAgd2l0aCB0aGlzIGJlaW5nIGRpc3BsYXllZDo8L3A+PHByZSBjbGFzcz0iY29kZSI+QXJyYXk8L3ByZT4KCQk8cD5UaGlzIGlzIG5vcm1hbC4gQXMgdGhlIGZpZWxkIGNvbnRhaW5zIChvciBjYW4gY29udGFpbikgbXVsdGlwbGUgdmFsdWVzLCBpdCBpcyBpbmRlZWQgYW4gYXJyYXkgb2YgdmFsdWVzLiBUbyBnZXQgdGhlIHZhbHVlcyB0aGVtc2VsdmVzLCB5b3UgaGF2ZSB0byBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcyBpbiBhIHdheSBsaWtlIHRoaXM6PC9wPgoJCTxwcmUgY2xhc3M9ImNvZGUiPjw8Lz51bD4KCXtmb3JlYWNoIGZyb209JGl0ZW0tPmZpZWxkbmFtZV9uYW1ldmFsdWUgaXRlbT0ib25ldmFsdWUifQoJCTw8Lz5saT57JG9uZXZhbHVlfTw8Lz4vbGk+Cgl7L2ZvcmVhY2h9Cjw8Lz4vdWw+PC9wcmU+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4KCQoKCTxkaXYgY2xhc3M9InFkaXYiIGlkPSJxMTUiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5Ib3cgY2FuIEkgY2hhbmdlIHRoZSA8aT5kYXRlcyBkaXNwbGF5IGZvcm1hdDwvaT4/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD5Qb3N0ZWQgQnk6IFNvbHV0aWMgb24gRGF0ZTogMjAwOS0wNS0wNyAxMDozMTxici8+CgkJVXNlOiA8Y29kZT57JGl0ZW0tPnlvdXJWYXJ8ZGF0ZV9mb3JtYXQ6IiVIOiVNIn08L2NvZGU+PC9wPgoJCTxwPjxhIGhyZWY9Imh0dHA6Ly93d3cuc21hcnR5Lm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UubW9kaWZpZXIuZGF0ZS5mb3JtYXQucGhwIj5TZWUgdGhlIHNtYXJ0eSBlbnRyeSBhYm91dCBkYXRlIGZvcm1hdCBtb2RpZmllcjwvYT4gb3IgdGhlIG1vc3QgdXNlZnVsIDxhIGhyZWY9Imh0dHA6Ly93d3cuc21hcnR5Lm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2UubW9kaWZpZXJzLnBocCI+c21hcnR5IGxpc3Qgb2YgdmFyaWFibGUgbW9kaWZpZXJzPC9hPi48L3A+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4KCQoKCTxkaXYgY2xhc3M9InFkaXYiIGlkPSJxMTgiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5Ib3cgY2FuIEkgZm9ybWF0IHRoZSBwYWdlIG1lbnU/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD5UaGUgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgdGhlIHBhZ2VtZW51IGlzIHNwbGl0X2ludG9fcGFnZXMgKGluIG1vZHVsZSBmaWxlKSwgYnV0IHlvdSBzaG91bGQgYmUgYWJsZSB0byBmb3JtYXQgaXQgdGhlIHdheSB5b3UgbGlrZSB3aXRob3V0IG1vZGlmeWluZyB0aGUgZnVuY3Rpb24uPC9wPgoJCTxwPjxiPkNsYXNzZXMgYW5kIENTUzwvYj48YnIvPgoJCVRoZSBwYWdlbWVudSBpcyBpbiBhIGRpdiB3aXRoIGNsYXNzICJwYWdpbmF0aW9uIi4gRWFjaCBwYWdlIG51bWJlciBpcyBhbiBhbmNob3IoPDwvPmE+KSB3aXRoIGNsYXNzICJwYWdlbnVtYmVyIiwgYW5kIHRoZSBjdXJyZW50IHBhZ2UgYWxzbyBoYXMgdGhlIGNsYXNzICJjdXJyZW50Ii4gVGhlICIuLi4iIHNob3duIHdoZW4gdGhlcmUgYXJlIHRvbyBtYW55IHBhZ2VzIGFyZSBzcGFucyB3aXRoIHRoZSBjbGFzcyAicGFnZW1lbnVvdmVyZmxvdyIsIGFuZCB0aGUgbGVmdCBhbmQgcmlnaHQgYXJyb3dzIGFyZSBhbmNob3JzIHJlc3BlY3RpdmVseSB3aXRoIGNsYXNzZXMgInByZXZpb3VzbGluayIgYW5kICJuZXh0bGluayIuPGJyLz4KCQlZb3UgbWF5IHVzZSB0aGVzZSBjbGFzc2VzIHRvIHN0eWxlIHlvdXIgcGFnZSBtZW51LiBZb3UgY2FuIGZpbmQgZXhhbXBsZXMgb2Ygc3R5bGVzIDxhIGhyZWY9Imh0dHA6Ly93d3cubWlzLWFsZ29yaXRtb3MuY29tLzIwMDcvMDMvMTYvc29tZS1zdHlsZXMtZm9yLXlvdXItcGFnaW5hdGlvbi8iIHRhcmdldD0iX2JsYW5rIj5oZXJlPC9hPiAoSSB0cmllZCB0byB1c2UgdGhlIHNhbWUgY2xhc3NlcywgYnV0IGZvciB1bmlmb3JtaXR5IHJlYXNvbnMgSSBkaWRuJ3QgdXNlIHNwYW5zLCBzbyBkb3VibGUtY2hlY2sgdGhlIGNzcykuPC9wPgoJCTxwPjxiPlN0cmluZ3M8L2I+PGJyLz4KCQlUbyBjaGFuZ2UgdGhlIHBhZ2UgZGVsaW1pdGVyICgifCIpIG9yIHRoZSAiLi4uIiwgbG9vayBhdCB0aGUgZmlyc3QgbGluZXMgbGFuZ3VhZ2UgZmlsZXMsIHJlc3BlY3RpdmVseSBhdCB0aGUgZW50cmllcyAicGFnZW1lbnVkZWxpbWl0ZXIiIGFuZCAicGFnZW1lbnVvdmVyZmxvdyIuPGJyLz4KCQlBcyBmb3IgdGhlICZsdDsgYW5kICZndDssIHRoZXkgYXJlIGhhcmQtY29kZWQgaW4gdGhlIGZ1bmN0aW9uIHNwbGl0X2ludG9fcGFnZXMsIGJ1dCBpdCBzaG91bGRuJ3QgYmUgdG9vIGRpZmZpY3VsdCB0byBjaGFuZ2UuPC9wPgoJCTwvZGl2PgoJCTxhIGNsYXNzPSJiYWNrdG90b3AiIGhyZWY9IiN0b3AiPkJhY2sgdG8gdG9wPC9hPgoJPC9kaXY+CgkKCQoJPGRpdiBjbGFzcz0icWRpdiIgaWQ9InEyMiI+CgkJPGRpdiBjbGFzcz0icXVlc3Rpb24iPkhvdyBjYW4gSSBkaXNwbGF5IGEgbGlzdCBvZiBlbGVtZW50cyBzb3J0ZWQgaW4gYSBjZXJ0YWluIHdheT88L2Rpdj4KCQk8ZGl2IGNsYXNzPSJhbnN3ZXIiPgoJCTxwPldlIHdpbGwgbG9vayBhdCBob3cgdG8gY3JlYXRlIGEgbGlzdCBvZiBzb3J0ZWQgZWxlbWVudHMgaW4gdGhlIGZvbGxvd2luZyB3YXk6PC9wPgoJCTx1bD4KCQkJPGxpPltTb3J0aW5nIGZpZWxkXTx1bD4KCQkJCTxsaT5bZWxlbWVudF08L2xpPgoJCQkJPGxpPltlbGVtZW50XTwvbGk+CgkJCQk8bGk+W2VsZW1lbnRdPC9saT4KCQkJPC91bD48L2xpPgoJCQk8bGk+W1NvcnRpbmcgZmllbGRdPHVsPgoJCQkJPGxpPltlbGVtZW50XTwvbGk+CgkJCQk8bGk+Li4uPC9saT4KCQkJPC91bD48L2xpPgoJCTwvdWw+CgkJPHA+VGhlIGJhc2ljIGlkZWEgd2lsbCBiZSB0byBvcmRlciBlbGVtZW50cyBieSB0aGUgc29ydGluZyBmaWVsZCwgYW5kIG5vdGljZSB3aGVuIHRoZXJlJ3MgYSBjaGFuZ2UuPC9wPjxici8+CgkJPHA+PGI+T3JkZXIgYnkgcGFyZW50czwvYj48YnIvPgoJCUNyZWF0ZSB0aGUgZm9sbG93aW5nIHRlbXBsYXRlICh3aGljaCBJJ2xsIGNhbGwgIm9yZGVyX2J5X3BhcmVudHMiKTo8L3A+CgkJPHByZSBjbGFzcz0iY29kZSI+CgkJCTw8Lz51bD4KCQkJe2Fzc2lnbiB2YXI9InBhcmVudGZsYWciIHZhbHVlPWZhbHNlfQoJCQl7Zm9yZWFjaCBmcm9tPSRpdGVtbGlzdCBpdGVtPSJpdGVtIn0KCQkJCXtpZiAkaXRlbS0+cGFyZW50X25hbWUgIT0gJHBhcmVudGZsYWd9CgkJCQkJe2lmICRwYXJlbnRmbGFnfTw8Lz4vdWw+PDwvPi9saT57L2lmfQoJCQkJCTw8Lz5saT57JGl0ZW0tPnBhcmVudF9uYW1lfTw8Lz51bD4KCQkJCQl7YXNzaWduIHZhcj0icGFyZW50ZmxhZyIgdmFsdWU9JGl0ZW0tPnBhcmVudF9uYW1lfQoJCQkJey9pZn0KCQkJCTw8Lz5saT57JGl0ZW0tPm5hbWV9PDwvPi9saT4KCQkJey9mb3JlYWNofQoJCQk8PC8+L3VsPgoJCTwvcHJlPgoJCTxwPmFuZCBjYWxsIGl0IHVzaW5nIHtjbXNfbW9kdWxlIG1vZHVsZT0ibXltb2R1bGUiIHdoYXQ9Iml0ZW0iIGxpc3R0ZW1wbGF0ZT0ib3JkZXJfYnlfcGFyZW50cyJ9PC9wPgoJCTxwPjxiPk9yZGVyIGJ5IGZpZWxkPC9iPjxici8+CgkJTGV0J3Mgc2F5IHlvdXIgbGV2ZWwgaGFzIGEgZHJvcGRvd24gZmllbGQgbmFtZWQgIm15ZmllbGQiLCBhbmQgeW91IHdpc2ggdG8gbGlzdCBlbGVtZW50cyBzb3J0ZWQgb24gdGhhdCBmaWVsZC4gQ3JlYXRlIHRoZSBmb2xsb3dpbmcgdGVtcGxhdGUgKHdoaWNoIEknbGwgY2FsbCAib3JkZXJfYnlfbXlmaWVsZCIpOjwvcD4KCQk8cHJlIGNsYXNzPSJjb2RlIj4KCQkJPDwvPnVsPgoJCQl7YXNzaWduIHZhcj0iZmllbGRmbGFnIiB2YWx1ZT1mYWxzZX0KCQkJe2ZvcmVhY2ggZnJvbT0kaXRlbWxpc3QgaXRlbT0iaXRlbSJ9CgkJCQl7aWYgJGl0ZW0tPm15ZmllbGQgIT0gJGZpZWxkZmxhZ30KCQkJCQl7aWYgJGZpZWxkZmxhZ308PC8+L3VsPjw8Lz4vbGk+ey9pZn0KCQkJCQk8PC8+bGk+eyRpdGVtLT5teWZpZWxkfTw8Lz51bD4KCQkJCQl7YXNzaWduIHZhcj0iZmllbGRmbGFnIiB2YWx1ZT0kaXRlbS0+bXlmaWVsZH0KCQkJCXsvaWZ9CgkJCQk8PC8+bGk+eyRpdGVtLT5uYW1lfTw8Lz4vbGk+CgkJCXsvZm9yZWFjaH0KCQkJPDwvPi91bD4KCQk8L3ByZT4KCQk8cD5hbmQgY2FsbCBpdCB1c2luZyB7Y21zX21vZHVsZSBtb2R1bGU9Im15bW9kdWxlIiB3aGF0PSJpdGVtIiBsaXN0dGVtcGxhdGU9Im9yZGVyX2J5X215ZmllbGQiIG9yZGVyYnk9Im15ZmllbGQifTwvcD4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoKCgk8ZGl2IGNsYXNzPSJxZGl2IiBpZD0icTI0Ij4KCQk8ZGl2IGNsYXNzPSJxdWVzdGlvbiI+SG93IGNhbiBJIGdldCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgY2F0ZWdvcnk/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD5JZiB5b3UncmUgZGlzcGxheWluZyBhIGxpc3QgdmlldyBvZiBoaWdoZXItbGV2ZWwgb2JqZWN0cyAobGlrZSBjYXRlZ29yaWVzKSwgeW91IGNhbiBzaW1wbHkgdXNlOjwvcD4KCQk8cHJlIGNsYXNzPSJjb2RlIj57JGl0ZW0tPm5iY2hpbGRyZW59PC9wcmU+CgkJPHA+KHByb3ZpZGVkIGl0IGlzIGxvYWRlZCAtIHNlZSB0aGUgc2V0dGluZ3MgdGFiKTwvcD4KCQk8cD4kaXRlbS0+bmJjaGlsZHJlbiBnaXZlcyB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoaXMgdmVyeSAkaXRlbSBoYXMgKG5vdCB0aGUgY2F0ZWdvcnkgdGhpcyBpdGVtIGlzIGluKS4gSW4gb3RoZXIgd29yZHMsIGlmIHlvdSdyZSBvbiB0aGUgZmluYWwgbGV2ZWwsIHlvdSBjYW5ub3QgdXNlIHRoaXMgYXR0cmlidXRlIChmb3IgZmluYWwgbGV2ZWwgaXRlbXMgaGF2ZSBubyBjaGlsZHJlbikuPC9wPgoJCTxwPklmIHRoYXQncyB0aGUgY2FzZSwgYW5kIHlvdSB3aXNoIHRvIGdldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHlvdXIgYXJlIGRpc3BsYXlpbmcsIHlvdSBjYW4gdXNlOjwvcD4KCQk8cHJlIGNsYXNzPSJjb2RlIj57JGl0ZW1jb3VudH08L3ByZT4KCQk8cD5JZiB5b3Ugc2VwYXJhdGUgeW91ciBjb250ZW50IGludG8gcGFnZXMsICRpdGVtY291bnQgd2lsbCBzaG93IHRoZSBudW1iZXIgb2YgaXRlbXMgY3VycmVudGx5IGRpc3BsYXllZCBvbiB0aGUgcGFnZS4gVG8gZ2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgd2hlbiBzZXBhcmF0aW5nIGludG8gcGFnZXMsIHlvdSBjYW4gdXNlOjwvcD4KCQk8cHJlIGNsYXNzPSJjb2RlIj57JHBhZ2VfdG90YWxpdGVtc308L3ByZT4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoJCgoJPGRpdiBjbGFzcz0icWRpdiIgaWQ9InE2Ij4KCQk8ZGl2IGNsYXNzPSJxdWVzdGlvbiI+SSdtIHRyeWluZyB0byBkaXNwbGF5IGEgbGlzdCBvZiBpdGVtcywgYnV0IHRoZSBkZXRhaWwgdGVtcGxhdGUgaXMgdXNlZCBpbnN0ZWFkLiBXaGF0J3MgZ29pbmcgb24/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD5JZiB5b3UncmUgb24gdGhlIGZpbmFsIGxldmVsIGFuZCB0aGVyZSdzIG9ubHkgb25lIGl0ZW0gdG8gc2hvdywgdGhlIG1vZHVsZSB3b24ndCBkaXNwbGF5IHRoZSBsaXN0IHZpZXcgYnV0IHdpbGwgaW1tZWRpYXRlbHkgc2hvdyB0aGUgZGV0YWlscyBvZiB0aGlzIGl0ZW0sIHNvIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHRvIGNsaWNrIHR3aWNlIGZvciBubyByZWFzb24uPC9wPgoJCTxwPklmIHlvdSB3YW50IHRvIGRpc3BsYXkgdGhlIGxpc3QgdmlldyBhbnl3YXksIHRoZXJlIGlzIG5vdyAgYSAiZm9yY2VsaXN0IiBwYXJhbWV0ZXIgdGhhdCB3aWxsIGRvIHRoZSBqb2IgKHNlZSB0aGUgaGVscCBvZiB5b3VyIG1vZHVsZSkuIFlvdXIgdGFnIHNob3VsZCBiZWNvbWU6PC9wPgoJCTxwcmUgY2xhc3M9ImNvZGUiPntjbXNfbW9kdWxlIG1vZHVsZT0icHJvZHVjdHMiIHdoYXQ9InByb2R1Y3QiIGZvcmNlbGlzdD0iMSJ9PC9wcmU+CgkJPHA+VG8gc2V0IGZvcmNlbGlzdCB0byB0cnVlIGJ5IGRlZmF1bHQsIDxhIGhyZWY9IiNxOCI+bG9vayBoZXJlPC9hPi48L3A+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4KCQoKCTxkaXYgY2xhc3M9InFkaXYiIGlkPSJxMjMiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5BZG1pbiBwYW5lbCBicmVha3Mgd2hlbiBJIGFkZCBhbiBpbWFnZSB0byBhbiBpdGVtLiBXaGF0J3MgZ29pbmcgb24/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD5EdXJpbmcgbW9kdWxlIGNyZWF0aW9uLCB5b3UgY2hvc2UgZm9yIGVhY2ggbGV2ZWwgd2hpY2ggZmllbGRzIHNob3VsZCBiZSBzaG93biBpbiB0aGUgYWRtaW4gcGFuZWwgbGlzdCBvZiBpdGVtcy4gSW4gdGhlIGhlbHAgdGFiIG9uIHRoaXMgc3RlcCBvZiB0aGUgbW9kdWxlIGNyZWF0aW9uLCBpdCB3YXMgc3BlY2lmaWNhbGx5IHdyaXR0ZW4gdGhhdCB5b3UgY2Fubm90IG5vcm1hbGx5IHVzZSBmaWxlIGZpZWxkcyBpbiB0aGUgYWRtaW4gcGFuZWwgbGlzdHMgKHRvIGRvIHNvLCB5b3Ugd291bGQgaGF2ZSB0byBhZGQgYSBjb25kaXRpb24gaW4gYWRtaW5wYW5lbC50cGwgYXMgZXhwbGFpbmVkIDxhIGhyZWY9IiNxNyI+aGVyZTwvYT4pLjwvcD4KCQk8cD5SZW1vdmUgdGhlIGZpbGUgZmllbGQgZnJvbSB0aGUgYWRtaW4gcGFuZWwgdmlldy48L3A+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4JCgoKCTxkaXYgY2xhc3M9InFkaXYiIGlkPSJxMjEiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5DYW4gSSBpbnRlZ3JhdGUgdGhlIDxpPkNvbW1lbnRzPC9pPiBtb2R1bGU/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD48Yj5ZZXMuPC9iPiBJbiBmYWN0LCB0aGUgQ29tbWVudHMgbW9kdWxlIG1ha2VzIHRoaXMgdmVyeSBlYXN5IGZvciBhbnkgb3RoZXIgbW9kdWxlLjwvcD4KCQk8cD5PcGVuIHRoZSBkZXRhaWwgdGVtcGxhdGUgZm9yIHlvdXIgbGFzdCBsZXZlbCBlbGVtZW50cywgYW5kIHNpbXBseSBhZGQgdGhpczo8L3A+CgkJPHByZSBjbGFzcz0iY29kZSI+e2Ntc19tb2R1bGUgbW9kdWxlPSJjb21tZW50cyIgbW9kdWxlbmFtZT0iTkFNRU9GWU9VUk1PRFVMRSIgcGFnZWlkPSRpdGVtLT5pZH08L3ByZT4KCQk8cD5XaGVyZSBOQU1FT0ZZT1VSTU9EVUxFIGlzLCBvZiBjb3Vyc2UsIHRoZSBuYW1lIG9mIHlvdXIgbW9kdWxlLjwvcD4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoJCgoJPGRpdiBjbGFzcz0icWRpdiIgaWQ9InExMSI+CgkJPGRpdiBjbGFzcz0icXVlc3Rpb24iPldhcm5pbmc6IG1vZHVsZSAiaXMgbm90IHByb3Blcmx5IGNsZWFuaW5nIGlucHV0IHBhcmFtcy4iIFdoYXQncyBnb2luZyBvbj88L2Rpdj4KCQk8ZGl2IGNsYXNzPSJhbnN3ZXIiPgoJCTxwIHN0eWxlPSJjb2xvcjogcmVkOyBmb250LXdlaWdodDogYm9sZDsiPlsqKiogVGhhbmtzIHRvIGlrdWxpcywgdGhpcyB3YXMgZGVmaW5pdGVseSBmaXhlZCBpbiAxLjguNC4yIGFuZCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIGFueW1vcmUgKioqXTwvcD4KCQk8cD5UaGUgYWR2YW5jZWQgc2VhcmNoIGZvcm0gd291bGQgbmVlZCB0byByZWdpc3RlciBhIHBhcmFtIGZvciBlYWNoIGZpZWxkIG9mIGVhY2ggbGV2ZWwsIHdoaWNoIEkgZmluZCByYXRoZXIgaW5lbGVnYW50LiBGb3IgdGhhdCByZWFzb24gdGhlIFJlc3RyaWN0VW5rbm93blBhcmFtcyBvcHRpb24gaGFzIGJlZW4gZGlzYWJsZWQuPC9wPgoJCTxwPjxiPklmIHlvdSBhcmUgbm90IHVzaW5nIHRoZSBhZHZhbmNlZCBzZWFyY2ggZm9ybTwvYj4sIHlvdSBjYW4gc2FmZWx5IGFjdGl2YXRlIHRoZSBSZXN0cmljdFVua25vd25QYXJhbXMoKSBvcHRpb24uIEVkaXQgdGhlIG1vZHVsZSBmaWxlIChtb2R1bGVuYW1lLm1vZHVsZS5waHApLCBmaW5kIHRoZSBTZXRQYXJhbWV0ZXJzKCkgZnVuY3Rpb24sIGFuZCBlZGl0IHRoZSBmb2xsb3dpbmcgbGluZSA6CgkJPHByZSBjbGFzcz0iY29kZSI+CQkkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKGZhbHNlKTs8L3ByZT4KCQl0bzoKCQk8cHJlIGNsYXNzPSJjb2RlIj4JCSR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTs8L3ByZT48L3A+CgkJPHA+PGI+SWYgeW91IGRvIHVzZSB0aGUgYWR2YW5jZWQgc2VhcmNoPC9iPiwgSSB3b3VsZCBzdWdnZXN0IGRpc2FibGluZyB0aGUgIkFsbG93IHBhcmFtZXRlciBjaGVja3MgdG8gY3JlYXRlIHdhcm5pbmcgbWVzc2FnZXMiIGluIHRoZSBDTVMgR2xvYmFsIFNldHRpbmdzLjwvcD4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoJCgoJPGRpdiBjbGFzcz0icWRpdiIgaWQ9InExMyI+CgkJPGRpdiBjbGFzcz0icXVlc3Rpb24iPkhvdyBjYW4gSSByZXRyaWV2ZSBpbmZvcm1hdGlvbnMgYWJvdXQgYW4gb2JqZWN0IG90aGVyIHRoYW4gdGhlIG9uZSBJJ20gd2F0Y2hpbmc/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD5JbiBhbnkgbW9kdWxlIHRlbXBsYXRlLCB5b3UgY2FuIHJldHJpZXZlIGEgd2hvbGUgaXRlbSBvYmplY3QgdXNpbmcgdGhlIGZvbGxvd2luZyBzbWFydHkgdGFnOiA8Y29kZT57TU9EVUxFTkFNRV9nZXRfbGV2ZWxpdGVtfTwvY29kZT4uPC9wPgoJCTxwPlRoZSB0YWcgcmVxdWlyZXMgMyBwYXJhbWV0ZXJzIDogd2hhdCAocmV0cmlldmUgYW4gaXRlbSBmcm9tIHdoaWNoIGxldmVsKSwgYWxpYXMgKHRoZSBpdGVtJ3MgYWxpYXMpIGFuZCBhc3NpZ24gKGluIHdoaWNoIHNtYXJ0eSB2YXJpYWJsZSB0aGlzIHNob3VsZCBiZSBzdG9yZWQpLjxici8+CgkJU28gYSB0eXBpY2FsIGV4YW1wbGUgd291bGQgYmU6PC9wPgoJCTxwcmUgY2xhc3M9ImNvZGUiPgkJe215bW9kdWxlX2dldF9sZXZlbGl0ZW0gd2hhdD0iY2F0ZWdvcnkiIGFsaWFzPSJteWZpcnN0Y2F0ZWdvcnkiIGFzc2lnbj0iY2F0b2JqZWN0In08L3ByZT4KCQk8cD5BbmQgeW91IGNhbiB0aGVuIHVzZSB0aGUgYXNzaWduZWQgb2JqZWN0IHRvIGRpc3BsYXkgaW5mb3JtYXRpb246PC9wPgoJCTxwcmUgY2xhc3M9ImNvZGUiPgkJeyRjYXRvYmplY3QtPm5hbWV9PC9wcmU+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4KCQkKCgk8ZGl2IGNsYXNzPSJxZGl2IiBpZD0icTEiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5DYW4gSSBjaGFuZ2UgdGhlIGZpZWxkIGlucHV0cyB0aGF0IGFyZSBkaXNwbGF5ZWQgaW4gdGhlIG1vZHVsZSdzIGFkdmFuY2VkIHNlYXJjaCBmb3JtPzwvZGl2PgoJCTxkaXYgY2xhc3M9ImFuc3dlciI+CgkJPHA+PGI+WWVzLjwvYj48L3A+CgkJPHA+RnJvbSBDVExNb2R1bGVNYWtlciAxLjguMywgaXQgaXMgcG9zc2libGUgdG8gZGVmaW5lIHdoaWNoIGZpZWxkcyB3aWxsIGJlIHNob3duIGluIHRoZSBhZHZhbmNlZCBzZWFyY2ggZm9ybSB1cG9uIGZpZWxkIGNyZWF0aW9uLiBJZiB5b3UgaGF2ZSBjcmVhdGVkIHlvdXIgbW9kdWxlIHdpdGggYW4gZWFybGllciB2ZXJzaW9uIG9yIGRvIG5vdCB3YW50IHRvIGNyZWF0ZSBpdCBhZ2FpbiwgdGhlcmUncyBhbm90aGVyIHdheSBhcm91bmQuPC9wPgoJCTxwPlRoZSBzZWFyY2ggZm9ybSBmb3IgdGhlIG1vZHVsZSdzIHNlYXJjaCBhY3Rpb24gYXJlIGdlbmVyYXRlZCBmcm9tIHRlbXBsYXRlcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgInRlbXBsYXRlcyIgZm9sZGVyIG9mIHlvdXIgbW9kdWxlLjwvcD4KCQk8cD5UaGUgInNlYXJjaC50cGwiIGZpbGUgaXMgdGhlIHRlbXBsYXRlIGZvciB0aGUgc2VhcmNoIGZvcm0gd2hlbiB0aGUgInNpbXBsZSIgc2VhcmNobW9kZSBpcyBjaG9zZW4uPC9wPgoJCTxwPlRoZSAic2VhcmNoX2dlbmVyYWxyZXN1bHRzLnRwbCIgZmlsZSBpcyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBzZWFyY2ggcmVzdWx0cyB3aGVuIHdlIGFyZSBzZWFyY2hpbmcgaW4gbW9yZSB0aGFuIG9uZSBsZXZlbCBhdCB0aGUgc2FtZSB0aW1lLiBPdGhlcndpc2UsIHRoZSBsZXZlbCdzIGRlZmF1bHQgbGlzdCBtb2R1bGUgaXMgdXNlZC48L3A+CgkJPHA+Rm9yIGVhY2ggbGV2ZWwgb2YgeW91ciBtb2R1bGUsIHRoZXJlIHNob3VsZCBiZSBhIGZpbGUgbmFtZWQgInNlYXJjaF9OQU1FT0ZUSEVMRVZFTC50cGwiLiBUaGlzIGNvbnRhaW5zIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGFkdmFuY2VkIHNlYXJjaCBmb3JtIGZvciB0aGlzIGxldmVsLiBJZiB5b3Ugd2FudCB0byByZW1vdmUgYSBmaWVsZCBpbnB1dCBmcm9tIHRoZSBzZWFyY2ggZm9ybSwgeW91IGNhbiBzaW1wbHkgZGVsZXRlIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIHRoZSB0ZW1wbGF0ZS4gKEkgd291bGQgcmVjb21tYW5kIHRvIG1ha2UgYSBiYWNrdXAgb2YgdGhlIG9yaWdpbmFsIHRlbXBsYXRlLCBpZiB5b3UgZXZlciBjaGFuZ2UgeW91ciBtaW5kISk8L3A+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4KCQoJCgk8ZGl2IGNsYXNzPSJxZGl2IiBpZD0icTQiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5DYW4gSSBjaGFuZ2UgdGhlIGVkaXQgZm9ybSBmb3IgYSBsZXZlbD88L2Rpdj4KCQk8ZGl2IGNsYXNzPSJhbnN3ZXIiPgoJCTxwPjxiPlllcy48L2I+PC9wPgoJCTxwPlRoZSBlZGl0IGZvcm1zIGZvciBlYWNoIGxldmVsIGFyZSBnZW5lcmF0ZWQgZnJvbSB0ZW1wbGF0ZXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlICJ0ZW1wbGF0ZXMiIGZvbGRlciBvZiB5b3VyIG1vZHVsZS4gRm9yIGVhY2ggbGV2ZWwgb2YgeW91ciBtb2R1bGUsIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGVkaXQgZm9ybXJlIHNob3VsZCBiZSBpbiBhIGZpbGUgbmFtZWQgImVkaXRQUkVGSVhPRlRIRUxFVkVMLnRwbCIuPC9wPgoJCTxwPllvdSBjYW4gbW9kaWZ5IHRoZSB0ZW1wbGF0ZSwgYnV0IGtlZXAgdHdvIHRoaW5ncyBpbiBtaW5kOjxici8+CgkJLSBJZiB5b3UgcmVtb3ZlIGFuIGlucHV0LCB0aGUgZm9ybSBtaWdodCBub3Qgd29yayBhbnltb3JlLjxici8+CgkJLSBJZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhlIGZpZWxkIGxhYmVscywgeW91IHNob3VsZCBwcmVmZXJhYmx5IGRvIHNvIGluIHRoZSBsYW5ndWFnZSBmaWxlLjwvcD4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoJCgkKCTxkaXYgY2xhc3M9InFkaXYiIGlkPSJxMTciPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5DYW4gSSBhZGQgYSBjb25kaXRpb24gZm9yIGFuZCBlbGVtZW50J3MgaW5wdXQgdG8gYmUgYWNjZXB0ZWQ/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD5PbmUgb2YgeW91ciBsZXZlbCBoYXMsIGZvciBleGFtcGxlLCBhIG51bWVyaWMgZmllbGQgKHdoaWNoIHdlJ2xsIGNhbGwgIm15ZmllbGQiKSwgYW5kIHlvdSB3aXNoIHRvIG1ha2Ugc3VyZSBpdCdzIGJldHdlZW4sIHNheSwgMCBhbmQgMTAwPyBPZiBjb3Vyc2UgaXQncyBwb3NzaWJsZSwgYnV0IHlvdSdsbCBuZWVkIHRvIGVkaXQgdGhlIGNvZGUuPC9wPgoJCTxwPk9wZW4gdGhlIGVkaXQgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGxldmVsIChhY3Rpb24uZWRpdExFVkVMUFJFRklYLnBocCkuIFNvbWV3aGVyZSBub3Qgc28gZmFyIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgeW91IHdpbGwgZmluZCB0aGUgZm9sbG93aW5nIGNvZGUgOjwvcD4KCQk8cHJlIGNsYXNzPSJjb2RlIj4KCQkvLyBDSEVDSyBJRiBUSEUgTkVFREVEIFZBTFVFUyBBUkUgVEhFUkUKIzEJCWlmKAkhaXNzZXQoJHBhcmFtc1siaXRlbW5hbWUiXSkgfHwgJHBhcmFtc1siaXRlbW5hbWUiXSA9PSAiIiApewojMgkJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoImVycm9yX21pc3NnaW52YWx1ZSIpKTsKIzMJCX1lbHNlaWYoZmFsc2UgPT0gJHRoaXMtPmNoZWNrYWxpYXMoIm1vZHVsZV9tb2R1bGVuYW1lX2l0ZW0iLCAkaXRlbS0+YWxpYXMsIGlzc2V0KCRwYXJhbXNbIml0ZW1pZCJdKT8kcGFyYW1zWyJpdGVtaWQiXTpmYWxzZSkpewojNAkJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoImVycm9yX2FscmVhZHlleGlzdHMiKSk7CiM1CQl9ZWxzZXsKCQkjIyMjIyMjIyMjIyMgRE9JTkcgVEhFIFVQREFURQoJCTwvcHJlPgoJCTxwPkhlcmUgdHdvIGNvbmRpdGlvbnMgYXJlIGNoZWNrZWQgYmVmb3JlIHVwZGF0aW5nL2FkZGluZyB0aGUgZWxlbWVudDogZmlyc3QsIG9uIGxpbmUgIzEsIHdlIGNoZWNrIGlmIGEgbmFtZSB3YXMgZ2l2ZW4gKGFuZCBhbnkgb3RoZXIgbWFuZGF0b3J5IHZhbHVlLCBpZiBhbnkpLCBhbmQgaWYgaXQgd2Fzbid0LCB3ZSBkaXNwbGF5IGFuIGVycm9yIChsaW5lICMyKS4gT24gbGluZSAjMywgd2UgY2hlY2sgaWYgYW5vdGhlciBlbGVtZW50IGFscmVhZHkgaGFzIHRoZSBzYW1lIGFsaWFzIGFuZCBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgKGxpbmUgIzQpIGlmIGl0IGlzIHRoZSBjYXNlLiBJZiBubyBwcm9ibGVtIGlzIG1ldCwgd2UgZ2V0IHRvIGxpbmUgIzUgYW5kIGdvIG9uIHdpdGggdGhlIHVwZGF0ZS48L3A+CgkJPHA+QmFzaWNhbGx5LCB5b3UgY2FuIGFkZCBhbnkgY29uZGl0aW9uIHlvdSBsaWtlIHRvIHRoZXNlLiBTbyB3aXRoIG91ciBleGFtcGxlLCBpdCBjb3VsZCBsb29rIGxpa2UgdGhpczo8L3A+CgkJPHByZSBjbGFzcz0iY29kZSI+CgkJLy8gQ0hFQ0sgSUYgVEhFIE5FRURFRCBWQUxVRVMgQVJFIFRIRVJFCgkJaWYoCSFpc3NldCgkcGFyYW1zWyJpdGVtbmFtZSJdKSB8fCAkcGFyYW1zWyJpdGVtbmFtZSJdID09ICIiICl7CgkJCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoImVycm9yX21pc3NnaW52YWx1ZSIpKTsKCQl9ZWxzZWlmKGZhbHNlID09ICR0aGlzLT5jaGVja2FsaWFzKCJtb2R1bGVfbW9kdWxlbmFtZV9pdGVtIiwgJGl0ZW0tPmFsaWFzLCBpc3NldCgkcGFyYW1zWyJpdGVtaWQiXSk/JHBhcmFtc1siaXRlbWlkIl06ZmFsc2UpKXsKCQkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygiZXJyb3JfYWxyZWFkeWV4aXN0cyIpKTsKCQl9ZWxzZWlmKCBmYWxzZSA9PSAoJGl0ZW0tPm15ZmllbGQgPiAwICYmICRpdGVtLT5teWZpZWxkIDw9IDEwMCkgKXsKCQkJZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygibXlfY3VzdG9tX2Vycm9yX21lc3NhZ2UiKSk7CgkJfWVsc2V7CgkJIyMjIyMjIyMjIyMjIERPSU5HIFRIRSBVUERBVEUKCQk8L3ByZT4KCQk8cD5XZSBqdXN0IGNoZWNrIGlmIHRoZSBmaWVsZCBpcyBvdmVyIDAgYW5kIGJlbG93L2VxdWFsIHRvIDEwMC4gSWYgaXQgaXMsIHdlIGdvIG9uIHdpdGggdGhlIHN1Ym1pc3Npb24uIE90aGVyd2lzZSB3ZSBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgKHdoaWNoIHlvdSdkIG5lZWQgdG8gYWRkIHRvIHRoZSBsYW5ndWFnZSBmaWxlcywgb3RoZXJ3aXNlIHlvdSBjYW4gaGFyZGNvZGUgdGhlIGVycm9yIG1lc3NhZ2UuLi4pPC9wPgoJCTwvZGl2PgoJCTxhIGNsYXNzPSJiYWNrdG90b3AiIGhyZWY9IiN0b3AiPkJhY2sgdG8gdG9wPC9hPgoJPC9kaXY+CgkKCQoJPGRpdiBjbGFzcz0icWRpdiIgaWQ9InE3Ij4KCQk8ZGl2IGNsYXNzPSJxdWVzdGlvbiI+SG93IGFyZSB0aGUgZGVmYXVsdGFkbWluIHBhbmVscyBnZW5lcmF0ZWQ/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cD5JZiB5b3Ugb3BlbiB0aGUgL3RlbXBsYXRlcy8gZm9sZGVyLCB5b3Ugd2lsbCBub3RpY2UgdGhhdCB0aGVyZSdzIG9ubHkgb25lIHRlbXBsYXRlIGZvciB0aGUgZGVmYXVsdGFkbWluIDogYWRtaW5wYW5lbC50cGwuIFRoaXMgaXMgdXNlZCBmb3IgYWxsIGxldmVscy4gU28gdGhlIGRpZmZlcmVuY2UgaXMgdGhlIGluZm9ybWF0aW9uIHBhc3NlZCB0byB0aGUgdGVtcGxhdGUuIEJlZm9yZSB0YWtpbmcgYSBsb29rIGF0IGl0LCBsZXQncyBzZWUgdGhhdCBpbmZvcm1hdGlvbi48YnIvPgoJCU9wZW4gdGhlIGFjdGlvbi5kZWZhdWx0YWRtaW4ucGhwIG9mIHlvdXIgbW9kdWxlLiBZb3Ugd2lsbCBub3RpY2UgdGhhdCBpdCBpcyBkaXZpZGVkIGludG8gdGFicyAoZGVsaW1pdGVkIGJ5IDxjb2RlPmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJuYW1lb2ZsZXZlbCIpOzwvY29kZT4gYW5kIDxjb2RlPmVjaG8gJHRoaXMtPkVuZFRhYigpOzwvY29kZT4pLiBGb3IgZWFjaCBsZXZlbCB0YWIsIHRoZSBsaXN0IG9mIGl0cyBpdGVtcyBpcyBmZXRjaGVkIGFuZCBzdG9yZWQgaW50byA8Y29kZT4kaXRlbWxpc3Q8L2NvZGU+LCB3aGljaCBpcyB0aGVuIHBhc3NlZCB0byBzbWFydHkuICRpdGVtbGlzdCBpcyBhbiBhcnJheSBvZiBvYmplY3RzIGhhdmluZyB5b3VyIGZpZWxkcyBhcyBhdHRyaWJ1dGVzICgkaXRlbS0+ZmllbGQpLjxici8+CgkJSnVzdCBiZWxvdyB0aGF0LCB5b3Ugd2lsbCBub3RpY2UgbGluZXMgdGhhdCBsb29rIGxpa2UgdGhpczo8L3A+CgkJPHByZSBjbGFzcz0iY29kZSI+CgkJJGFkbWluc2hvdyA9IGFycmF5KAoJCQlhcnJheSgkdGhpcy0+TGFuZygibmFtZSIpLCJlZGl0bGluayIsZmFsc2UpLAoJCQlhcnJheSgkdGhpcy0+TGFuZygiYWxpYXMiKSwiYWxpYXMiLGZhbHNlKSwKCQkJYXJyYXkoJHRoaXMtPkxhbmcoImFjdGl2ZSIpLCJ0b2dnbGVhY3RpdmUiLHRydWUpLAoJCQlhcnJheSgkdGhpcy0+TGFuZygibmJjaGlsZHJlbiIpLCJuYmNoaWxkcmVuIixmYWxzZSksCgkJCWFycmF5KCR0aGlzLT5MYW5nKCJyZW9yZGVyIiksIm1vdmVsaW5rcyIsdHJ1ZSksCgkJCWFycmF5KCR0aGlzLT5MYW5nKCJBY3Rpb25zIiksImRlbGV0ZWxpbmsiLHRydWUpCQkKCQkJKTsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oImFkbWluc2hvdyIsICRhZG1pbnNob3cpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigidGFibGVpZCIsICJsZXZlbG5hbWVfdGFibGUiKTsKCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoImFkbWlucGFuZWwudHBsIik7PC9wcmU+CgkJPHA+VGhlIDxjb2RlPiRhZG1pbnNob3c8L2NvZGU+IHZhcmlhYmxlIGNvbnRhaW5zIHdoYXQgc2hvdWxkIGJlIHNob3duIGluIHRoZSBhZG1pbnBhbmVsIG9mIHRoYXQgbGV2ZWwuIFdlIHRoZW4gcGFzcyB0aGlzIHZhcmlhYmxlIHRvIHNtYXJ0eSAoYW5kIGFsc28gYSBuYW1lIGZvciB0aGUgdGFibGUpLCBhbmQgdGhlIGxhc3QgbGluZSB0ZWxscyBzbWFydHkgdG8gZGlzcGxheSB0aGUgdGVtcGxhdGUgImFkbWlucGFuZWwudHBsIi48YnIvPgoJCSRhZG1pbnNob3cgaXMgYW4gYXJyYXksIHdoZXJlIGVhY2ggZWxlbWVudCByZXByZXNlbnRzIGEgY29sdW1uIG9mIHRoZSBhZG1pbnBhbmVsLiBFYWNoIGNvbHVtbiwgaW4gdHVybiwgaXMgYW4gYXJyYXkgY29udGFpbmluZyB0aHJlZSB2YWx1ZXM6IHRoZSBmaXJzdCAocG9zaXRpb24gMCkgaXMgdGhlIHRpdGxlIG9mIHRoZSBjb2x1bW4sIGFuZCB0aGUgc2Vjb25kIChwb3NpdGlvbiAxKSBpcyB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0J3MgZmllbGQgdGhhdCBzaG91bGQgYmUgc2hvd24gaW4gdGhpcyBjb2x1bW4sIGFuZCB0aGUgdGhpcmQgKHBvc2l0aW9uIDIpIGlzIHdoZXRoZXIgdGhlIGluc3RhbnQgc2VhcmNoICh0aGUgc2VhcmNoYm94IGp1c3QgYXQgdGhlIHRvcCBvZiB0aGUgYWRtaW5wYW5lbCkgc2hvdWxkIHNraXAgdGhpcyBjb2x1bW4uPC9wPgoJCTxwPkZvciBleGFtcGxlLCA8Y29kZT5hcnJheSgkdGhpcy0+TGFuZygibmFtZSIpLCJlZGl0bGluayIsZmFsc2UpPC9jb2RlPiBtZWFucywgaGVyZSwgdGhhdCB3ZSB0YWtlICR0aGlzLT5MYW5nKCJuYW1lIikgKCJuYW1lIiBpbiB0aGUgbGFuZ3VhZ2UgdGhhdCBpcyBjdXJyZW50bHkgZGlzcGxheWVkKSB0byBiZSB0aGUgdGl0bGUgb2YgdGhlIGNvbHVtbiwgYW5kIHRoYXQgZm9yIGVhY2ggcm93IG9mIHRoZSB0YWJsZSwgd2hhdGV2ZXIgaXMgaW4gJG9uZWl0ZW0tPmVkaXRsaW5rIHdpbGwgYmUgZGlzcGxheWVkICh0aGlzIHBhcnRpY3VsYXIgdmFsdWUgaXMgbm90IHN0cmljdGx5IHNwZWFraW5nIGEgZmllbGQgb2YgdGhlIGxldmVsLCBidXQgYW4gYXR0cmlidXRlIGNyZWF0ZWQgYnkgdGhlIGFkZGFkbWlubGlua3MoKSBmdW5jdGlvbikuIEl0IGFsc28gbWVhbnMgdGhhdCB0aGUgaW5zdGFudCBzZWFyY2ggd2lsbCA8aT5ub3Q8L2k+IHNraXAgdGhpcyBjb2x1bW4sIHNvIHRoZSB0ZXh0IGRpc3BsYXllZCB3aWxsIGJlIHVzZWQgdG8gc2VlIGlmIHRoZSByb3cgbWF0Y2hlcyB0aGUgc2VhcmNoIHdvcmRzLjwvcD4KCQk8cD5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBhZG1pbnBhbmVsLnRwbCBmaWxlOjwvcD4KCQk8cHJlIGNsYXNzPSJjb2RlIj4KIzEJCTw8Lz5kaXY+CiMyCQk8PC8+dGFibGUge2lmICR0YWJsZWlkfWlkPSJ7JHRhYmxlaWR9IiB7L2lmfWNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KIzMJCTw8Lz50aGVhZD48PC8+dHI+CiM0CQkJe2ZvcmVhY2ggZnJvbT0kYWRtaW5zaG93IGl0ZW09Y29sdW1ufQojNQkJCQk8PC8+dGg+eyRjb2x1bW5bMF19PDwvPi90aD4KIzYJCQl7L2ZvcmVhY2h9CiM3CQk8PC8+L3RyPjw8Lz4vdGhlYWQ+CiM4CQk8PC8+dGJvZHk+CiM5CQl7Y3ljbGUgdmFsdWVzPSJyb3cyLHJvdzEiIGFzc2lnbj1yb3djbGFzcyByZXNldD10cnVlfQojMTAJCXtmb3JlYWNoIGZyb209JGl0ZW1saXN0IGl0ZW09b25laXRlbX0KIzExCQl7Y3ljbGUgdmFsdWVzPSJyb3cyLHJvdzEiIGFzc2lnbj1yb3djbGFzc30KIzEyCQk8PC8+dHIgY2xhc3M9Inskcm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9JzsiPgojMTMJCQl7Zm9yZWFjaCBmcm9tPSRhZG1pbnNob3cgaXRlbT1jb2x1bW59CiMxNAkJCQl7YXNzaWduIHZhcj1vbmV2YWwgdmFsdWU9JGNvbHVtblsxXX0KIzE1CQkJCTw8Lz50ZHtpZiAkY29sdW1uWzJdfSBjbGFzcz0iY3RsbW1fbm9zZWFyY2giey9pZn0+eyRvbmVpdGVtLT4kb25ldmFsfTw8Lz4vdGQ+CiMxNgkJCXsvZm9yZWFjaH0KIzE3CQk8PC8+L3RyPgojMTgJCXsvZm9yZWFjaH0KIzE5CQk8PC8+L3Rib2R5PgojMjAJCTw8Lz4vdGFibGU+CiMyMQkJPDwvPi9kaXY+PC9wcmU+CgkJPHA+Tm93LCBJIHdpbGwgYXNzdW1lIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhlIGh0bWwgdGFncywgYW5kIHdpbGwgbGVhdmUgYWxvbmUgdGhlIGNvZGUgY29uY2VybmluZyB0aGUgY2xhc3Nlcy4gSSB3aWxsIGV4cGxhaW4gbGluZXMgIzQgdG8gIzYsIHdoaWNoIHdyaXRlIHRoZSB0YWJsZSBoZWFkZXIgKHRoZSB0aXRsZXMgb2YgdGhlIGNvbHVtbnMpLCBhbmQgbGluZXMgIzkgdG8gIzE4LCB3aGljaCB3cml0ZSB0aGUgdGFibGUgcm93cy48L3A+CgkJPHA+TGluZSAjNSBpcyBleGVjdXRlZCBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSAkYWRtaW5zaG93IHZhcmlhYmxlOyBpbiBvdGhlciB3b3JkcywgZm9yIGVhY2ggY29sdW1uIG9mIHRoZSB0YWJsZS4gTm93LCByZW1lbWJlciB0aGF0IGVhY2ggZWxlbWVudCBvZiB0aGUgJGFkbWluc2hvdyB2YXJpYWJsZSBpcyBhbiBhcnJheSBvZiB0d28gZWxlbWVudHMsIHNvIHdoYXQgbGluZSAjNSBkb2VzIGlzIGRpc3BsYXkgdGhlIGZpcnN0IChwb3NpdGlvbiBbMF0pIG9mIHRoZXNlIHR3byBlbGVtZW50cyBhcyB0aGUgY29sdW1uIGhlYWRlci48L3A+CgkJPHA+TGluZXMgIzExIHRvICMxNyBhcmUgcmVwZWF0ZWQgZm9yIGVhY2ggaXRlbSBpbiAkaXRlbWxpc3QgKGZvciBlYWNoIHJvdyBvZiB0aGUgdGFibGUpLiBGb3IgZWFjaCByb3csIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlICRhZG1pbnNob3cgdmFyaWFibGUsIGxpbmVzICMxNCBhbmQgIzE1IGFyZSByZXBlYXRlZC4gTGluZSAjMTQgZmV0Y2ggdGhlIG5hbWUgb2YgdGhlIG9iamVjdCdzIGF0dHJpYnV0ZSB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgKHBvc2l0aW9uIFsxXSBvZiB0aGUgYWRtaW5zaG93IGVsZW1lbnQpLCBhbmQgbGluZSAjMTUgZGlzcGxheXMgdGhpcyBhdHRyaWJ1dGUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0LjwvcD4KCQk8cD5BcyBvZiB0aGUgPGNvZGU+Y3RsbW1fbm9zZWFyY2g8L2NvZGU+IGNsYXNzLCBpdCBvbmx5IG1lYW5zIHRoYXQgdGhlIGluc3RhbnQgc2VhcmNoIHdpbGwgbm90IGNoZWNrIGludG8gdGhpcyBjb2x1bW4uPC9wPgoJCTxwPjxiPkFscmlnaHQuLi4gaG93IGNhbiBJIGNoYW5nZSB0aGlzPzwvYj48L3A+CgkJPHA+SWYgeW91IHdhbnQgdG8gbWFrZSBtYWpvciBjaGFuZ2VzLCB0aGUgYmVzdCB0aGluZyB0byBkbyB3b3VsZCBiZSB0byBjcmVhdGUgYW4gaW5kaXZpZHVhbCB0ZW1wbGF0ZSBmb3IgeW91ciBsZXZlbC4gSW4gdGhlIHRlbXBsYXRlcy8gZm9sZGVyLCBjcmVhdGUgYSBmaWxlIChsaWtlICJhZG1pbnBhbmVsX25hbWVvZmxldmVsLnRwbCIpLCBwdXQgdGhlIHRlbXBsYXRlIHlvdSB3aXNoIHRvIHVzZSBpbiBpdCwgYW5kIGluIHRoZSBhY2NvcmRpbmcgdGFiIG9mIHRoZSBhY3Rpb24uZGVmYXVsdGFkbWluLnBocCBmaWxlLCBjaGFuZ2U8YnIvPgoJCTxjb2RlPmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgiYWRtaW5wYW5lbC50cGwiKTs8L2NvZGU+PGJyLz4KCQl0bzxici8+CgkJPGNvZGU+ZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCJhZG1pbnBhbmVsX25hbWVvZmxldmVsLnRwbCIpOzwvY29kZT48L3A+CgkJPHA+Tm93LCBsZXQncyBzYXkgeW91IHdpc2ggdG8gbWFrZSBhIHZlcnkgc2ltcGxlIG1vZGlmaWNhdGlvbi4gRm9yIGV4YW1wbGUsIHlvdSBhcmUgZGlzcGxheWluZyBhIGZpbGUgZmllbGQgKHdoaWNoIHdlJ2xsIGNhbGwgIm15ZmllbGQiKSBvbiB0aGUgYWRtaW5wYW5lbCwgYnV0IGluc3RlYWQgb2Ygc2hvd2luZyB0aGUgZmlsZXBhdGggeW91IHdvdWxkIGxpa2UgdG8gc2hvdyB0aGUgcGljdHVyZS4gV2hhdCB5b3UgY291bGQgZG8gaXMgdGhpczo8YnIvPgoJCUluIHRoZSBhZG1pbnBhbmVsLnRwbCB0ZW1wbGF0ZSBmaWxlLCB5b3UgY291bGQgY2hhbmdlIGxpbmUgIzE1IHRvIHNvbWV0aGluZyBsaWtlIHRoaXM6CgkJPHByZSBjbGFzcz0iY29kZSI+CgkJCTw8Lz50ZHtpZiAkY29sdW1uWzJdfSBjbGFzcz0iY3RsbW1fbm9zZWFyY2giey9pZn0+CgkJCXtpZiAkb25ldmFsID09ICdteWZpZWxkJ30KCQkJCXtpZiAkb25laXRlbS0+JG9uZXZhbCAhPSAiIn08PC8+aW1nIHNyYz0ie3Jvb3RfdXJsfS91cGxvYWRzL3skb25laXRlbS0+JG9uZXZhbH0iIC8+ey9pZn0KCQkJe2Vsc2V9CgkJCQl7JG9uZWl0ZW0tPiRvbmV2YWx9CgkJCXsvaWZ9PDwvPi90ZD48L3ByZT4KCQk8cD5UaGlzIG1lYW5zIHRoYXQgc21hcnR5IGNoZWNrcyBpZiB0aGUgZmllbGQgd2UncmUgZGlzcGxheWluZyBpcyAnbXlmaWVsZCcsIGlmIGl0IGlzLCBhbmQgaWYgdGhlIHZhbHVlIGlzbid0IGVtcHR5LCBpdCBkaXNwbGF5cyB0aGUgaW1hZ2UuIElmIGl0IGlzbid0LCBpdCBqdXN0IGRpc3BsYXlzIHRoZSBmaWVsZCB2YWx1ZSBub3JtYWxseS48L3A+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4JCgkKCQoJPGRpdiBjbGFzcz0icWRpdiIgaWQ9InEyIj4KCQk8ZGl2IGNsYXNzPSJxdWVzdGlvbiI+Q291bGQgSSBzaG93IHRoZSBuYW1lIG9mIHRoZSBzZWxlY3RlZCBpdGVtIGluLCBzYXksIHRoZSBwYWdlJ3MgPDwvPnRpdGxlPiB0YWc/PC9kaXY+CgkJPGRpdiBjbGFzcz0iYW5zd2VyIj4KCQk8cCBzdHlsZT0iY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5bKioqIFNlZSB1cGRhdGUgYmVsb3cuLi4gKioqXTwvcD4KCQk8cD48Yj5UaGUgc2hvcnQgYW5zd2VyOjwvYj4gbm8uPC9wPgoJCTxwPjxiPlRoZSBsb25nIGFuc3dlcjo8L2I+IHllcywgbW9zdCBvZiB0aGUgdGltZS48L3A+CgkJPHA+VGhlIG5hbWUgb2YgdGhlIHNlbGVjdGVkIGl0ZW0gb3IgY2F0ZWdvcnkgaXMgcmV0cmlldmVkIG9ubHkgd2hlbiB0aGUgPGNvZGU+e2Ntc19tb2R1bGUgbW9kdWxlPSJ5b3VybW9kdWxlIn08L2NvZGU+IHRhZyBpcyBlbmNvdW50ZXJlZCBpbiB0aGUgdGVtcGxhdGUgLSB3aGljaCBpcyBxdWl0ZSBhbHdheXMgd2F5IGFmdGVyIHRoZSBwYWdlJ3MgaGVhZC4gSG93ZXZlciwgaW4gbW9zdCBjYXNlcyBpbiBjb3VsZCBiZSByZXRyaWV2ZWQgYnkgYSB1c2VyLWRlZmluZWQgdGFnIChVRFQpLjwvcD4KCQk8cCBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5Ob3RlIHRoYXQgdGhpcyB3aWxsIG5vIHdvcmsgd2hlbiB0aGUgdGFnIGlzIGRpcmVjdGx5IGNhbGxlZCBvbiB0aGUgcGFnZSwgYW5kIHdpbGwgb25seSB3b3JrIHdoZW4gd2UgYXJlIGZvbGxvd2luZyBhIG1vZHVsZSBhY3Rpb24gKHdoZW4geW91IGhhdmUgY2xpY2tlZCBvbiBhIGxpbmspPC9wPgoJCTxwPkNyZWF0ZSB0aGUgZm9sbG93aW5nIFVEVCwgcmVwbGFjaW5nIE5BTUVfT0ZfWU9VUl9NT0RVTEUgd2l0aCB5b3VyIG1vZHVsZSdzIG5hbWU6PC9wPgoJCTxwcmUgY2xhc3M9ImNvZGUiPiRtb2R1bGVuYW1lID0gJ05BTUVfT0ZfWU9VUl9NT0RVTEUnOwpnbG9iYWwgJGdDbXM7CmlmKCBpc3NldCgkZ0Ntcy0+bW9kdWxlc1skbW9kdWxlbmFtZV0pICYmCiAgICAkZ0Ntcy0+bW9kdWxlc1skbW9kdWxlbmFtZV1bJ2FjdGl2ZSddICYmCiAgICBpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkgKXsKCWdsb2JhbCAkc21hcnR5OwoJJGluc3RhbmNlID0gJGdDbXMtPm1vZHVsZXNbJG1vZHVsZW5hbWVdWydvYmplY3QnXTsKCSRnbG9iID0gJGluc3RhbmNlLT5nZXRfbW9kdWxlR2V0VmFycygpOwoJJHdhbnRlZGxldmVsID0gZmFsc2U7CgkkbW9kbGV2ZWxzID0gJGluc3RhbmNlLT5nZXRfbGV2ZWxhcnJheSgpOwoJaWYoaXNzZXQoJGdsb2JbJ2FsaWFzJ10pKXsKCQkkd2FudGVkbGV2ZWwgPSBpc3NldCgkZ2xvYlsnd2hhdCddKT8kZ2xvYlsnd2hhdCddOiRtb2RsZXZlbHNbY291bnQoJG1vZGxldmVscyktMV07CgkJJGFsaWFzID0gJGdsb2JbJ2FsaWFzJ107Cgl9ZWxzZWlmKGlzc2V0KCRnbG9iWydwYXJlbnQnXSkpewoJCWlmKGlzc2V0KCRnbG9iWyd3aGF0J10pKXsKCQkJJHdhbnRlZGxldmVsID0gJGluc3RhbmNlLT5nZXRfbmV4dGxldmVsKCRnbG9iWyd3aGF0J10sIGZhbHNlKTsKCQl9ZWxzZXsKCQkJJHdhbnRlZGxldmVsID0kbW9kbGV2ZWxzW2NvdW50KCRtb2RsZXZlbHMpLTJdOwoJCX0KCQkkYWxpYXMgPSAkZ2xvYlsncGFyZW50J107Cgl9CglpZigkd2FudGVkbGV2ZWwpewoJCSRnZXRmdW5jdGlvbiA9ICdnZXRfbGV2ZWxfJy4kd2FudGVkbGV2ZWw7CgkJJGl0ZW0gPSAkaW5zdGFuY2UtPiRnZXRmdW5jdGlvbihhcnJheSgnYWxpYXMnPT4kYWxpYXMpKTsKCQlpZihpc3NldCgkaXRlbVswXSkpCSRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwkaXRlbVswXSk7Cgl9Cn0KCTwvcHJlPgoJPHA+TGV0J3Mgc2F5IHlvdSd2ZSBuYW1lZCB5b3VyIHRhZyAicmV0cmlldmVtb2RpbmZvIi4gVGhlbiwgYXQgdGhlIGJlZ2lubmluZyBvZiB5b3VyIHBhZ2UncyB0ZW1wbGF0ZSwgeW91IHJldHJpZXZlIHRoZSBtb2R1bGUgaW5mb3JtYXRpb25zIGJ5IHVzaW5nIHRoZSB0YWcgPGNvZGU+e3JldHJpZXZlbW9kaW5mbyBhc3NpZ249ImN1cnJlbnRlbGVtZW50In08L2NvZGU+LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGl0ZW0gYXJlIHN0b3JlZCBpbiB0aGUgdmFyaWFibGUgJGN1cnJlbnRlbGVtZW50ICh3aGljaCBjb3VsZCBoYXZlIGJlZW4gYW55dGhpbmcpLiBTbyBpbiB0aGUgPDwvPnRpdGxlPiB0YWcgb2YgeW91ciB0ZW1wbGF0ZSwgeW91IGNvdWxkIHdyaXRlOiA8Y29kZT57aWYgJGN1cnJlbnRlbGVtZW50fXskY3VycmVudGVsZW1lbnQtPm5hbWV9ey9pZn08L2NvZGU+LCB3aGljaCB3b3VsZCBkaXNwbGF5IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgaWYgaXQgY291bGQgaGF2ZSBiZWVuIHJldHJpZXZlZC48L3A+Cgk8cCBzdHlsZT0iY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5VUERBVEU6IHNpbmNlIHZlcnNpb24gMS44LCB5b3UgY2FuIGRvIHRoZSBzYW1lIHRoaW5nIG11Y2ggbW9yZSBlYXNpbHkganVzdCBieSB1c2luZyB0aGUgImJyZWFkY3J1bWJzIiBhY3Rpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLjwvcD4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoJCgoJPGRpdiBjbGFzcz0icWRpdiIgaWQ9InExNiI+CgkJPGRpdiBjbGFzcz0icXVlc3Rpb24iPkhvdyBjYW4gSSBhZGQgbW9kdWxlIGVsZW1lbnRzIHRvIG15IGdvb2dsZSBzaXRlbWFwPzwvZGl2PgoJCTxkaXYgY2xhc3M9ImFuc3dlciI+Cgk8cD5UaGlzIHdpbGwgaGVscCB5b3UgaW5jbHVkZSB0aGUgbW9kdWxlIGVudHJpZXMgdG8gYSBnb29nbGUgc2l0ZW1hcCwgPHU+cHJvdmlkZWQgdGhhdCB5b3VyIG1vZHVsZSBlbGVtZW50cyBhcmUgYWxsIGRpc3BsYXllZCBvbiB0aGUgc2FtZSBwYWdlPC91Pi48L3A+PGJyLz4KCTxwPjxiPklmIHlvdSBhcmUgdXNpbmcgdGhlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZ3NnZW5lcmF0b3IiPmdvb2dsZSBzaXRlbWFwIGdlbmVyYXRvciBtb2R1bGU8L2E+OjwvYj48L3A+Cgk8L3A+T3BlbiB5b3VyIHNpdGVtYXAgZ2VuZXJhdG9yIChnc2l0ZW1hcC5waHApLCBhbmQganVzdCBiZWZvcmUgdGhlIGNsb3N1cmUgb2YgdGhlIHVybHNldCAoPGNvZGU+ZWNobyAnICA8PC8+L3VybHNldD4nLiAiXG4iOzwvY29kZT4pLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lczo8L3A+Cgk8cHJlIGNsYXNzPSJjb2RlIj4KCSRtb2R1bGVuYW1lID0gIk5BTUVPRk1PRFVMRSI7CS8vIENIQU5HRSBUSElTIFRPIFRIRSBOQU1FIE9GIFlPVVIgTU9EVUxFCglpZiggIGlzc2V0KCRnQ21zLT5tb2R1bGVzWyRtb2R1bGVuYW1lXSkKCQkmJiAkZ0Ntcy0+bW9kdWxlc1skbW9kdWxlbmFtZV1bImFjdGl2ZSJdCgkJJiYgJHRoZW1vZHVsZSA9ICRnQ21zLT5tb2R1bGVzWyRtb2R1bGVuYW1lXVsib2JqZWN0Il0KCQkpewoJCQkKCQkvLyBIRVJFIFlPVSBNVVNUIFBVVCBUSEUgSUQgT1IgQUxJQVMgT0YgVEhFIFBBR0UgVVNFRCBUTyBESVNQTEFZIFRIRSBNT0RVTEUgRUxFTUVOVFM6CgkJJGRldGFpbHBhZ2UgPSAiTVlQQUdFIjsKCQkKCQkkcGFyYW1zID0gYXJyYXkoIm1vZGUiPT4iZ29vZ2xlIiwgImRldGFpbHBhZ2UiPT4kZGV0YWlscGFnZSk7CgkJJHRoZW1vZHVsZS0+RG9BY3Rpb24oInNpdGVtYXAiLCAiIiwgJHBhcmFtcyk7Cgl9Cgk8L3ByZT4KCTxwPk9mIGNvdXJzZSwgcmVwbGFjZSBOQU1FT0ZNT0RVTEUgaW4gdGhlIGZpcnN0IGxpbmUgd2l0aCB0aGUgbmFtZSBvZiB5b3VyIG1vZHVsZSwgYW5kIGVudGVyIGEgZGV0YWlscGFnZSwgYmUgaXQgYW4gaWQgb3IgcGFnZSBhbGlhcy48L3A+Cgk8cD5Ob3RlIHRoYXQgeW91IGNvdWxkIGFsc28gdXNlIHRoZSAid2hhdCIgcGFyYW1ldGVyIHRvIHNwZWNpZnkgd2hpY2ggbGV2ZWxzIHlvdSB3aXNoIHRvIHNlZSBkaXNwbGF5ZWQgKHlvdSBjYW4gc3BlY2lmeSBzZXZlcmFsIGxldmVscyB3aXRoICJsZXZlbDF8bGV2ZWwyIiBhbmQgc28gb24pLiBPdGhlcndpc2UsIGFsbCBsZXZlbHMgd2lsbCBiZSBkaXNwbGF5ZWQuPC9wPjwvYnI+Cgk8cD48Yj5JZiB5b3UgYXJlIHVzaW5nIHRoZSA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NpdGVtYXBtcyI+U2l0ZU1hcCBNYWRlIFNpbXBsZTwvYT4gbW9kdWxlOjwvYj48L3A+Cgk8cD5TaW1wbHkgcHV0IHRoZSBjb2RlIGFib3ZlIGluIGEgVURUICh1c2VyLWRlZmluZWQtdGFnKSwgYW5kIGNhbGwgdGhlIFVEVCBhdCB0aGUgZW5kIG9mIHlvdXIgc2l0ZW1hcCdzIHRlbXBsYXRlLCBqdXN0IGJlZm9yZSA8Y29kZT48PC8+L3VybHNldD48L2NvZGU+LjwvcD4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoKCgk8ZGl2IGNsYXNzPSJxZGl2IiBpZD0icTE5Ij4KCQk8ZGl2IGNsYXNzPSJxdWVzdGlvbiI+SG93IGNhbiBJIGFkZCBhbiBleHBpcmF0aW9uIGZpZWxkPzwvZGl2PgoJCTxkaXYgY2xhc3M9ImFuc3dlciI+Cgk8cD5Zb3Ugd2lzaCB0byBhZGQgYSBkYXRlIGZpZWxkIHRoYXQgd2lsbCBkZWNpZGUgd2hlbiB0aGUgaXRlbSB3aWxsIGJlIGRpc3BsYXllZCBvciBub3QgKGxpa2UgaW4gdGhlIG5ld3MgbW9kdWxlKS4gSXQgc2hvdWxkbid0IGJlIHZlcnkgaGFyZC48L3A+Cgk8cD5UbyBkbyB0aGlzLCB5b3Ugd2lsbCBuZWVkIHR3byBmaWVsZHMgKG9yIHRocmVlKTo8L3A+Cgk8dWw+CgkJPGxpPkEgImNoZWNrYm94IiB0eXBlIGZpZWxkIHRvIGNob29zZSB3aGV0aGVyIHRoZSBleHBpcmF0aW9uIGRhdGUgd2lsbCBiZSB1c2VkIG9yIG5vdCAod2UnbGwgY2FsbCBpdCAidXNlX2V4cGlyYXRpb24iKTwvbGk+CgkJPGxpPkEgImRhdGUiIHR5cGUgZmllbGQgdG8gY2hvb3NlIHRoZSBleHBpcmF0aW9uIGRhdGUgKHdlJ2xsIGNhbGwgaXQgImV4cGlyYXRpb25fZGF0ZSIpPC9saT4KCQk8bGk+KG9wdGlvbmFsbHkpIEFub3RoZXIgZGF0ZSBmaWVsZCAoZm9yIGJlZ2luIGRhdGUpPC9saT4KCTwvdWw+Cgk8cD5Gb3Igc2ltcGxpY2l0eSwgSSB3aWxsIGFzc3VtZSB3ZSBuZWVkIG9ubHkgb25lIGRhdGUgKHlvdSBzaG91bGQgZmlndXJlIG91dCB0aGUgcGFydCBmb3IgdGhlIHNlY29uZCBkYXRlKS48L3A+Cgk8cD5JbiB5b3VyIGxpc3QgdGVtcGxhdGUsIHVzZSB0aGUgZm9sbG93aW5nIGNvZGU6PC9wPgoJPHByZSBjbGFzcz0iY29kZSI+Cgl7Zm9yZWFjaCBmcm9tPSRpdGVtbGlzdCBpdGVtPSJpdGVtIn0KCQl7aWYgJGl0ZW0tPnVzZV9leHBpcmF0aW9uICYmICgkaXRlbS0+ZXhwaXJhdGlvbl9kYXRlfGRhdGVfZm9ybWF0OiIlcyIgJmx0OyAkc21hcnR5Lm5vdyl9CgkJCXRoZSBjb2RlIHRvIGRpc3BsYXkgdGhlIGl0ZW0uLi4KCQl7L2lmfQoJey9mb3JlYWNofQoJPC9wcmU+Cgk8cD5CYXNpY2FsbHksIHdlIG9ubHkgZGlzcGxheSB0aGUgaXRlbSB3aGVuIGEgY29uZGl0aW9uIGlzIG1ldCwgbmFtZWx5IHRoYXQgdXNlX2V4cGlyYXRpb24gaXMgb24sIGFuZCB0aGF0IHRoZSBleHBpcmF0aW9uIGRhdGUgaXMgbG93ZXIgKGJlZm9yZSkgdGhlIGN1cnJlbnQgZGF0ZS4gVG8gZG8gdGhlIG9wcG9zaXRlLCB5b3UgY2FuIGp1c3QgY2hhbmdlIHRoZSAmbHQ7IHRvIGEgJmd0Oy48L3A+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4KCgoJPGRpdiBjbGFzcz0icWRpdiIgaWQ9InEyMCI+CgkJPGRpdiBjbGFzcz0icXVlc3Rpb24iPkhvdyBjYW4gSSBzZXR1cCB0aGUgZnJvbnRlbmQgZWRpdCBhY3Rpb24gd2l0aCB0aGUgRnJvbnQgRW5kIFVzZXJzIG1vZHVsZT88L2Rpdj4KCQk8ZGl2IGNsYXNzPSJhbnN3ZXIiPgoJPHA+VGhpcyBpcyBkb25lIGluIHR3byBwYXJ0cy4gVGhlIGZpcnN0IHBhcnQgaXMgdG8gZGlzcGxheSB0aGUgZWRpdCBsaW5rIG9yIGVkaXQgZm9ybSBvbmx5IHRvIHNlbGVjdGVkIHVzZXJzIChvciBsb2dnZWQgaW4gdXNlcnMpLiBUaGlzIGlzIHRvIGJlIGRvbmUgd2l0aCB0aGUgRkVVIG1vZHVsZSAoYW5kIHBvc3NpYmx5IEN1c3RvbSBDb250ZW50KSwgYW5kIGFzIHN1Y2ggd2lsbCBub3QgYmUgY292ZXJlZCBoZXJlLiBUaGlzIGlzIG9ubHkgYWJvdXQgPGk+aGlkaW5nPC9pPiB0aGUgZWRpdGlvbiBmcm9tIG90aGVyIHVzZXJzLiBUaGUgc2Vjb25kIHBhcnQsIHdoaWNoIHdpbGwgYmUgY292ZXJlZCBoZXJlLCBpcyBhYm91dCB0aGUgcmVhbCBwcm90ZWN0aW9uLiBTYWRseSwgdGhpcyB3aWxsIHJlcXVpcmUgYSBsaXR0bGUgcHJvZ3JhbW1pbmcsIGJ1dCBldmVyeW9uZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhyb3VnaCB0aGlzIGVhc2lseS48L3A+Cgk8cD5JZiB5b3UncmUgd29uZGVyaW5nIGhvdyB0byBjaGFuZ2UgdGhlIGxvb2sgb2YgdGhlIGZvcm0sIHNlZSB0aGUgZnJvbnRlbmRfYWRkXyoudHBsIHRlbXBsYXRlcyBpbiB0aGUgdGVtcGxhdGVzIGZvbGRlci48L3A+Cgk8cD5CZWZvcmUgZWRpdGluZyBhbiBpdGVtIHRocm91Z2ggdGhlIGZyb250ZW5kLCB0aGUgZnVuY3Rpb24gZmVhZGRfcGVybWNoZWNrICh3aG9zZSBjb250ZW50IGlzIGluIHRoZSBmaWxlIGZ1bmN0aW9uLmZlYWRkX3Blcm1jaGVjay5waHApIGlzIGNhbGxlZC4gSWYgaXQgcmV0dXJucyB0cnVlIChpZiB0aGUgdmFsdWUgb2YgdGhlICRyZXR1cm4gdmFyaWFibGUgaXMgc2V0IHRvIHRydWUpLCB0aGUgdXNlciBoYXMgcGVybWlzc2lvbiB0byBlZGl0IHRoZSBpdGVtLCBvdGhlcndpc2UgKGlmIGl0IHJldHVybnMgZmFsc2UpLCB0aGUgYWNjZXNzIGlzIGRlbmllZC48YnIvPgoJSWYgeW91IG9wZW4gdGhlIGZpbGUgZnVuY3Rpb24uZmVhZGRfcGVybWNoZWNrLnBocCwgeW91IHdpbGwgbm90aWNlIHRoYXQgYXNpZGUgZnJvbSBjb21tZW50cywgdGhlIGZ1bmN0aW9uIGlzIGVtcHR5LiBXZSB3aWxsIGhhdmUgdG8gZmlsbCBpdCBvdXQgZGVwZW5kaW5nIG9uIHdoYXQgd2Ugd2lzaCB0byBkby48L3A+Cgk8cD5UaGUgdmFyaWFibGVzIGF0IG91ciBkaXNwb3NpdGlvbiBhcmUgdGhlIGZvbGxvd2luZzo8dWw+CgkJPGxpPiRnQ21zICh0aGUgZ2xvYmFsIGNtcyBvYmplY3QsIHRocm91Z2ggd2hpY2ggd2Ugd2lsbCBiZSBhYmxlIHRvIGNhbGwgdGhlIEZFVSBtb2R1bGUpPC9saT4KCQk8bGk+JHdoYXQgKHRoZSBsZXZlbCBvZiB0aGUgaXRlbSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBlZGl0LCBhcyBnaXZlbiBieSB0aGUgIndoYXQiIHBhcmFtZXRlcik8L2xpPgoJCTxsaT4kYWxpYXMgKHRoZSBhbGlhcyBvZiB0aGUgaXRlbSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBlZGl0LiBJZiBpdCBpcyBhIG5ldyBpdGVtLCAkYWxpYXMgc2hvdWxkIGJlIGZhbHNlKTwvbGk+CgkJPGxpPiRpdGVtaWQgKHRoZSBpZCBvZiB0aGUgaXRlbSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBlZGl0LiBJZiBpdCBpcyBhIG5ldyBpdGVtLCAkaXRlbWlkIHNob3VsZCBiZSBmYWxzZSk8L2xpPgoJPC91bD48L3A+Cgk8cD5Zb3UgbWlnaHQgbmVlZCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBvZiB0aGUgRkVVIG1vZHVsZTo8dWw+CgkJPGxpPkxvZ2dlZEluKCkgd2lsbCByZXR1cm4gdHJ1ZSBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4sIGFuZCBmYWxzZSBvdGhlcndpc2UuPC9saT4KCQk8bGk+TG9nZ2VkSW5JZCgpIHdpbGwgcmV0dXJuIHRoZSBpZCBvZiB0aGUgdXNlcjwvbGk+CgkJPGxpPkxvZ2dlZEluTmFtZSgpCXdpbGwgcmV0dXJuIHRoZSB1c2VybmFtZSBvZiB0aGUgdXNlcjwvbGk+CgkJPGxpPk1lbWJlck9mR3JvdXAoJHVzZXJpZCwkZ3JvdXBpZCkJCXJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBpcyBhIG1lbWJlciBvZiB0aGUgZ3JvdXAsIGZhbHNlIG90aGVyd2lzZTwvbGk+CgkJPGxpPkdldEdyb3VwSUQoJGdyb3VwbmFtZSkJcmV0dXJucyB0aGUgZ3JvdXAgaWQgYXNzb2NpYXRlZCB0byBhIGdyb3VwIG5hbWU8L2xpPgoJPC91bD48L3A+PGJyLz4KCTxwPk5vdywgaGVyZSBhcmUgdGhyZWUgYmFzaWMgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSB0aGlzLjwvcD4KCTxwPjxiPkFsbG93aW5nIG9ubHkgbG9nZ2VkIGluIHVzZXJzPC9iPjxici8+CglIZXJlJ3MgaG93IHRvIGFsbG93IG9ubHkgbG9nZ2VkIGluIHVzZXJzIHRvIGVkaXQgaXRlbXM6PC9wPgoJPHByZSBjbGFzcz0iY29kZSI+CgkkcmV0dXJuID0gZmFsc2U7CgkkRkVVID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CglpZigkRkVVICYmICRGRVUtPkxvZ2dlZEluKCkpewoJCSRyZXR1cm4gPSB0cnVlOwoJfQoJPC9wcmU+PGJyLz4KCTxwPjxiPkFsbG93aW5nIG9ubHkgbWVtYmVycyBvZiBhIGdyb3VwPC9iPjxici8+CglIZXJlJ3MgaG93IHRvIGFsbG93IG9ubHkgbWVtYmVycyBvZiB0aGUgZ3JvdXAgIm15Z3JvdXAiIHRvIGVkaXQgaXRlbXM6PC9wPgoJPHByZSBjbGFzcz0iY29kZSI+CgkkcmV0dXJuID0gZmFsc2U7CgkkRkVVID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CglpZigkRkVVKXsKCQlpZigkRkVVLT5Mb2dnZWRJbigpKXsKCQkJJHVzZXJpZCA9ICRGRVUtPkxvZ2dlZEluSWQoKTsKCQkJJGdyb3VwaWQgPSAkRkVVLT5HZXRHcm91cElEKCJteWdyb3VwIik7CgkJCWlmKCRGRVUtPk1lbWJlck9mR3JvdXAoJHVzZXJpZCwgJGdyb3VwaWQpKXsKCQkJCSRyZXR1cm4gPSB0cnVlOwoJCQl9CgkJfQoJfQoJPC9wcmU+PGJyLz4KCTxwPjxiPkFsbG93aW5nIG1lbWJlcnMgdG8gZWRpdCBvbmx5IGEgc2luZ2xlIGVsZW1lbnQ8L2I+PGJyLz4KCVN1cHBvc2UgeW91IGhhdmUgYSBGRVUgbWVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBvZiB5b3VyIGl0ZW0sIGFuZCB0aGF0IHRoZSB1c2VybmFtZSBvZiB0aGF0IG1lbWJlciBpcyB0aGUgYWxpYXMgb2YgdGhlIGl0ZW0gKHNlZSBiZWxvdyBvbiBob3cgdG8gZG8gdGhpcykuIFlvdSBjb3VsZCByZXN0cmljdCBhY2Nlc3MgaW4gdGhlIGZvbGxvd2luZyB3YXk6PC9wPgoJPHByZSBjbGFzcz0iY29kZSI+CgkkcmV0dXJuID0gZmFsc2U7CgkkRkVVID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CglpZigkRkVVKXsKCQlpZigkRkVVLT5Mb2dnZWRJbigpKXsKCQkJJHVzZXJuYW1lID0gJEZFVS0+TG9nZ2VkSW5OYW1lKCk7CgkJCWlmKCR1c2VybmFtZSA9PSAkYWxpYXMpewoJCQkJJHJldHVybiA9IHRydWU7CgkJCX0KCQl9Cgl9Cgk8L3ByZT4KCTxwPlVzaW5nICRGRVUtPkdldFVzZXJQcm9wZXJ0eSgkcHJvcGVydHluYW1lKSwgeW91IGNvdWxkIHVzZSBzb21ldGhpbmcgZWxzZSB0aGFuIHRoZSB1c2VybmFtZS48YnIvPgoJSWYgcGVybWlzc2lvbnMgZGVwZW5kIG9uIHRoZSBhbGlhcyBvZiB0aGUgaXRlbSwgeW91IHNob3VsZCBtYWtlIHN1cmUgKHNlZSBTZXR0aW5ncykgdGhhdCB5b3VyIGZyb250ZW5kIHVzZXJzIGNhbid0IGNoYW5nZSBpdC48L3A+PGJyLz4KCTxwPlNob3VsZCB5b3UgbmVlZCBtb3JlIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgaXRlbSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBzbmlwcGV0IHRvIGxvYWQgdGhlIGZ1bGwgaXRlbSBvYmplY3Q6PC9wPgoJPHByZSBjbGFzcz0iY29kZSI+CgkkZ2V0ZnVuY3Rpb24gPSAiZ2V0X2xldmVsXyIuJHdoYXQ7CgkkaXRlbWxpc3QgPSAkdGhpcy0+JGdldGZ1bmN0aW9uKGFycmF5KCJpZCI9PiRpdGVtaWQpKTsKCSRpdGVtID0gaXNzZXQoJGl0ZW1saXN0WzBdKT8kaXRlbWxpc3RbMF06ZmFsc2U7PC9wcmU+PGJyLz4KCTxwPkZpbmFsbHksIHlvdSBtYXkgdXNlICR3aGF0IHZhcmlhYmxlIHRvIGhhdmUgZGlmZmVyZW50IHBlcm1pc3Npb24gbWFuYWdlbWVudCBmb3IgZWFjaCBsZXZlbC4gQSBzd2l0Y2ggd291bGQgYmUgdGhlIHR5cGljYWwgc29sdXRpb246PC9wPgoJPHByZSBjbGFzcz0iY29kZSI+Cglzd2l0Y2goJHdoYXQpewoJCWNhc2UgImxldmVsMSI6CgkJCS8vIGNvZGUKCQkJYnJlYWs7CgkJY2FzZSAibGV2ZWwyIjoKCQkJLy9jb2RlCgkJCWJyZWFrOwoJCS4uLihhbmQgc28gb24pCgl9PC9wcmU+PGJyLz4KCTxwPjxiPlRyaWdnZXJpbmcgdGhlIGNyZWF0aW9uIG9mIGEgRkVVIG1lbWJlciBmb3IgZWFjaCBpdGVtPC9iPjxici8+CglJZiB5b3UncmUgdXNpbmcgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGxhc3QgZXhhbXBsZSwgeW91IG5lZWQgdG8gaGF2ZSBhIEZFVSB1c2VyIGZvciBlYWNoIGl0ZW0uIFRoaXMgY2FuIGJlIGRvbmUgdXNpbmcgZXZlbnRzLjxici8+CglFdmVyeXRpbWUgYW4gaXRlbSBpcyBhZGRlZCwgbW9kaWZpZWQgb3IgZGVsZXRlZCwgdGhlIG1vZHVsZXMgc2VuZHMgYW4gPGk+ZXZlbnQ8L2k+IHRvIHRoZSBjbXMuIElmIHlvdSBnbyBpbnRvIEV4dGVuc2lvbnMgLT4gRXZlbnQgTWFuYWdlciwgeW91IHNob3VsZCBmaW5kIHRoZSBldmVudHMgc2VudCBieSB5b3VyIG1vZHVsZSBpbiB0aGUgbGlzdC4gQ2xpY2ssIGZvciBleGFtcGxlLCBvbiB0aGUgbW9kdWxlbmFtZV9hZGRlZCBldmVudC4gWW91IHdpbGwgbm90aWNlIHRoYXQgaGVyZSwgeW91IGNhbiBzZWxlY3QgYSBVc2VyIERlZmluZWQgVGFnIChVRFQpIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkLiBTbyB3ZSBzaW1wbHkgbmVlZCB0byBkZXNpZ24gYW4gVURUIHRoYXQgd2lsbCBhZGQgYSBtZW1iZXIgd2hlbiBhIG5ldyBpdGVtIGlzIGNyZWF0ZWQuPC9wPgoJPHA+V2Ugd2lsbCBhc3N1bWUgeW91ciBpdGVtIGhhcyBhIGZpZWxkIG5hbWVkICJwYXNzd29yZCIsIHdoaWNoIHdpbGwgYmUgdXNlZCBhcyB0aGUgRkVVIHBhc3N3b3JkLCB0aGF0IHlvdXIgbW9kdWxlIGlzIG5hbWVkICJOQU1FT0ZNT0RVTEUiLCBhbmQgdGhlIGxldmVsIGlzIG5hbWVkICJNWUxFVkVMIi4gTG9vayBhdCB0aGUgZm9sbG93aW5nIFVEVDo8L3A+CgkJPHByZSBjbGFzcz0iY29kZSI+CgkvLyBmaXJzdCwgd2UgY2hlY2sgaWYgYW4gaXRlbSBoYXMgYmVlbiBhZGRlZCBvbiB0aGUgbGV2ZWwgd2UncmUgY29uY2VybmVkIHdpdGgKCWlmKCRwYXJhbXNbIndoYXQiXSAhPSAiTVlMRVZFTCIpCXJldHVybiBmYWxzZTsKCQoJLy8gd2UgcmV0cmlldmUgdGhlIHR3byBtb2R1bGVzCgkkRkVVID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CgkkbXltb2QgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ05BTUVPRk1PRFVMRScpOwoJaWYoISRGRVUgfHwgISRteW1vZCkJcmV0dXJuIGZhbHNlOwoJCgkvLyB3ZSB0aGVuIHJldHJpZXZlIHRoZSBpdGVtCgkkaXRlbWxpc3QgPSAkbXltb2QtPmdldF9NWUxFVkVMKGFycmF5KCJpZCI9PiRwYXJhbXNbIml0ZW1pZCJdKSk7CglpZighaXNzZXQoJGl0ZW1saXN0WzBdKSkJcmV0dXJuIGZhbHNlOwoJJGl0ZW0gPSAkaXRlbWxpc3RbMF07CgkKCS8vIHdlIHRoZW4gYWRkIHRoZSBGRVUgdXNlcgoJJGV4cGlyZXNfaW4gPSAzNjU7IC8vIHNldHMgdGhlIG51bWJlciBvZiBkYXlzIHVudGlsIGV4cGlyYXRpb24KCSRleHBpcmVzID0gc3RydG90aW1lKHNwcmludGYoIislZCBkYXlzIiwkZXhwaXJlc19pbiksIHRpbWUoKSk7CgkkRkVVLT5BZGRVc2VyKCRpdGVtLT5uYW1lLCAkaXRlbS0+cGFzc3dvcmQsICRleHBpcmVzKTsKCQk8L3ByZT4KCQk8L2Rpdj4KCQk8YSBjbGFzcz0iYmFja3RvdG9wIiBocmVmPSIjdG9wIj5CYWNrIHRvIHRvcDwvYT4KCTwvZGl2PgoKCgk8ZGl2IGNsYXNzPSJxZGl2IiBpZD0icTMiPgoJCTxkaXYgY2xhc3M9InF1ZXN0aW9uIj5DYW4gSSBjaGFuZ2UgaG93IHRoZSBwcmV0dHkgdXJscyBhcmUgZ2VuZXJhdGVkIGFuZCBpbnRlcnByZXRlZD88L2Rpdj4KCQk8ZGl2IGNsYXNzPSJhbnN3ZXIiPgoJCTxwPjxiPlllcywgdG8gc29tZSBleHRlbnQuPC9iPjwvcD4KCQk8cD5JJ2xsIHRyeSB0byBtYWtlIHRoaXMgdmVyeSBjb21wcmVoZW5zaXZlLiBCZWZvcmUgdGFsa2luZyBvZiBtb2R5aW5nIGl0LCBsZXQncyBzZWUgaG93IHRoaXMgd29ya3MuPC9wPgoJCTxwPkJhc2ljYWxseSwgdGhlIG1vZHVsZSBoYXMgdHdvIGtpbmRzIG9mIHVybHM6PGJyPgoJCVR5cGUgQTogPGNvZGU+aHR0cDovL3d3dy5teWRvbWFpbi5jb20vbmFtZW9mbW9kdWxlL2RldGFpbC9uYW1lb2ZvYmplY3QvNS88L2NvZGU+PGJyLz4KCQlhbmQ8YnIvPgoJCVR5cGUgQjogPGNvZGU+aHR0cDovL3d3dy5teWRvbWFpbi5jb20vbmFtZW9mbW9kdWxlL25hbWVvZmxldmVsL25hbWVvZnBhcmVudC81LzwvY29kZT48YnIvPgoJCShpZiB5b3UgYXJlIHNlcGFyYXRpbmcgZWxlbWVudHMgaW50byBwYWdlcywgeW91IHdpbGwgbm90aWNlIHRoYXQgdHlwZSBCIGhhcyBzb21lIHZhcmlhdGlvbnMuLi4gd2Ugd2lsbCBkaXNjdXNzIHRoaXMgbGF0ZXIuKTwvcD4KCQk8cD5UeXBlIEEgaXMgdXNlZCB3aGVuIHdlIGFyZSBsb29raW5nIGF0IHRoZSBkZXRhaWxzIG9mIGEgbGFzdC1sZXZlbCBvYmplY3QuIFR5cGUgQiBpcyB1c2VkIHdoZW4gd2UgZGlzcGxheSBhIGxpc3Qgb2YgaXRlbXMuIE5vdywgcmVtZW1iZXIgdGhhdCB0aGUgdXJsIGhhcyB0byBjb250YWluIGFsbCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBzaG91bGQgYmUgZGlzcGxheWVkLiBTbyBsZXQncyB0YWtlIGEgbG9vayBhYm91dCB3aGF0J3MgY29tbW9uIHRvIGJvdGggdHlwZXMgb2YgdXJsczo8L3A+CgkJPHA+VGhlIDxiPm5hbWVvZm1vZHVsZS88L2I+IHRlbGxzIHVzIHRoYXQgdGhlIG1vZHVsZSBzaG91bGQgYmUgY2FsbGVkLjxici8+CgkJVGhlIDxiPjUvPC9iPiAodGhhdCBhbm5veWluZyBudW1iZXIpIGlzIHRoZSByZXR1cm5pZCBvZiB0aGUgcGFnZS4gSW4gb3RoZXIgd29yZHMsIGl0IHRlbGxzIHVzIG9uIHdoYXQgcGFnZSBvZiB0aGUgY21zIHRoZSBpbmZvcm1hdGlvbnMgb2YgdGhlIG1vZHVsZSBzaG91bGQgYmUgc2hvd24uIEV2ZW4gdGhvdWdoIHRoZSBwYWdlIGNvbnRlbnQgaXMgcmVwbGFjZWQgYnkgd2hhdCB0aGUgbW9kdWxlIGhhcyB0byBkaXNwbGF5LCB0aGlzIGlzIHZlcnkgaW1wb3J0YW50IGFzIGl0IGRldGVybWluZXMsIGZvciBpbnN0YW5jZSwgd2hhdCBwYWdlIHRlbXBsYXRlIHNob3VsZCBiZSB1c2VkLjwvcD4KCQk8cD5XaGVuIHRoZSA8Yj4vZGV0YWlsLzwvYj4gaXMgaW4gdGhlIHVybCwgdGhlIG1vZHVsZSBrbm93cyB0aGF0IHdlJ3JlIGRpc3BsYXlpbmcgdGhlIGRldGFpbHMgb2YgYSBsYXN0IGxldmVsIGl0ZW0uIEFsbCB3ZSBuZWVkIHRvIHNwZWNpZnkgaXMgd2hpY2ggaXRlbSB0byBkaXNwbGF5LCBhbmQgdGhhdHMgdGhlIDxiPm5hbWVvZm9iamVjdDwvYj4gcGFydC48L3A+CgkJPHA+V2hlbiB0aGUgPGI+L2RldGFpbC88L2I+IDxpPmlzbid0PC9pPiBpbiB0aGUgdXJsLCB0aGUgbW9kdWxlIGNvbmNsdWRlcyB0aGF0IHdlIGFyZSBkaXNwbGF5aW5nIGEgbGlzdCBvZiBzb21ldGhpbmcqLiBUaGUgZWxlbWVudHMgb2Ygd2hhdCBsZXZlbCBhcmUgZGlzcGxheWVkIGlzIGRldGVybWluZWQgYnkgd2hhdGV2ZXIgaXMgaW4gdGhlIHBsYWNlIG9mICIvZGV0YWlsLyI6IGluIG91ciBjYXNlLCA8Yj5uYW1lb2ZsZXZlbC88L2I+LiBBIHVybCBsaWtlIDxjb2RlPmh0dHA6Ly93d3cubXlkb21haW4uY29tL25hbWVvZm1vZHVsZS9wcm9kdWN0LzUvPC9jb2RlPiB3b3VsZCBiZSB2YWxpZCwgYW5kIHdvdWxkIHRlbGwgdGhlIG1vZHVsZSB0byBkaXNwbGF5IGFsbCBlbGVtZW50cyBvZiB0aGUgInByb2R1Y3QiIGxldmVsLjxici8+CgkJVGhlIDxiPi9uYW1lb2ZwYXJlbnQvPC9iPiBwYXJ0IHRlbGxzIHRoZSBtb2R1bGUgdG8gZGlzcGxheSBvbmx5IHRoZSBpdGVtcyBvZiB0aGUgY2hvc2VuIGxldmVsIHRoYXQgaGF2ZSAibmFtZW9mcGFyZW50IiBhcyBhIHBhcmVudC48L3A+CgkJPHA+VGhlIHByZXR0eSB1cmxzIGFyZSByZWdpc3RlcmVkIGluIHRoZSBTZXRQYXJhbWV0ZXJzKCkgZnVuY3Rpb24gb2YgdGhlIG1haW4gbW9kdWxlIGZpbGUgKHdoaWNoIHNob3VsZCBiZSBzb21ldGhpbmcgbGlrZSBOQU1FT0ZZT1VSTU9EVUxFLm1vZHVsZS5waHApLiBPcGVuIHRoaXMgZmlsZSwgYW5kIGRvIGEgc2VhcmNoIHRvIGZpbmQgdGhlIGZ1bmN0aW9uLiBXaGF0IG1hdHRlcnMgaW4gdGhlcmUgaXMgdGhlIGxpbmVzIHRoYXQgbG9vayBsaWtlIHRoaXMgKHdpdGhvdXQgdGhlIG51bWJlcnMgb24gdGhlIGxlZnQpIDo8L3A+CgkJPHByZSBjbGFzcz0iY29kZSI+CiMxCSR0aGlzLT5SZWdpc3RlclJvdXRlKCIvW25OXWFtZW9mbW9kdWxlXC8oW0RkXWV0YWlsKVwvKD9QPGFsaWFzPlteXC9dKylcLyg/UDxyZXR1cm5pZD5bMC05XSspJC8iKTsKIzIJJHRoaXMtPlJlZ2lzdGVyUm91dGUoIi9bbk5dYW1lb2Ztb2R1bGVcLyg/UDx3aGF0PlteXC9dKylcLyg/UDxyZXR1cm5pZD5bMC05XSspJC8iKTsKIzMJJHRoaXMtPlJlZ2lzdGVyUm91dGUoIi9bbk5dYW1lb2Ztb2R1bGVcLyg/UDx3aGF0PlteXC9dKylcLyg/UDxwYXJlbnQ+W15cL10rKVwvKD9QPHJldHVybmlkPlswLTldKykkLyIpOwojNAkkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgiL1tuTl1hbWVvZm1vZHVsZVwvKD9QPHdoYXQ+W15cL10rKVwvKD9QPHBhZ2VpbmRleD5bMC05XSspXC8oP1A8bmJwZXJwYWdlPlswLTldKylcLyg/UDxyZXR1cm5pZD5bMC05XSspJC8iKTsKIzUJJHRoaXMtPlJlZ2lzdGVyUm91dGUoIi9bbk5dYW1lb2Ztb2R1bGVcLyg/UDx3aGF0PlteXC9dKylcLyg/UDxwYXJlbnQ+W15cL10rKVwvKD9QPHBhZ2VpbmRleD5bMC05XSspXC8oP1A8bmJwZXJwYWdlPlswLTldKylcLyg/UDxyZXR1cm5pZD5bMC05XSspJC8iKTs8L3ByZT4KCQk8cD5FYWNoIGxpbmUgaGVyZSByZWdpc3RlciBhIGRpZmZlcmVudCB1cmwgc3RydWN0dXJlLjxici8+CgkJTGluZSAjMSByZWdpc3RlcnMgdGhlIFR5cGUgQSB1cmxzLjxici8+CgkJQWxsIHRoZSBvdGhlciBsaW5lcyByZWdpc3RlciBUeXBlIEIgdXJsczo8YnIvPgoJCUxpbmUgIzIgaXMgZm9yIHdoZW4gbm8gcGFyZW50IGlzIHNwZWNpZmllZCwgbGlrZSBpbiA8Y29kZT5odHRwOi8vd3d3Lm15ZG9tYWluLmNvbS9uYW1lb2Ztb2R1bGUvbmFtZW9mbGV2ZWwvNTwvY29kZT48YnIvPgoJCUxpbmUgIzMgaXMgdXNlZCB3aGVuIGEgcGFyZW50IGlzIHNwZWNpZmllZCwgbGlrZSBpbiA8Y29kZT5odHRwOi8vd3d3Lm15ZG9tYWluLmNvbS9uYW1lb2Ztb2R1bGUvbmFtZW9mbGV2ZWwvbmFtZW9mcGFyZW50LzU8L2NvZGU+PGJyLz4KCQlMaW5lICM0IGlzIGEgdmFyaWF0aW9uIG9mIGxpbmUgIzIgdGhhdCBoYW5kbGVzIHNlcGFyYXRpb24gaW50byBwYWdlcyAod2hlbiB3ZSBzZXBhcmF0ZSBpbnRvIHBhZ2VzLCB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggcGFnZSB3ZSdyZSBsb29raW5nIGF0KS4gRm9yIGV4YW1wbGUsIDxjb2RlPmh0dHA6Ly93d3cubXlkb21haW4uY29tL25hbWVvZm1vZHVsZS9wcm9kdWN0LzIvMTAvNTwvY29kZT4gd291bGQgbWVhbiB0aGF0IHdlIGFyZSBsb29raW5nIGF0IHRoZSBsaXN0IG9mIGFsbCBpdGVtcyBvZiB0aGUgInByb2R1Y3QiIGxldmVsLCB0aGF0IHdlIGFyZSBzZXBhcmF0aW5nIGluIHBhZ2VzIHdpdGggIjEwIiBlbGVtZW50cyBwZXIgcGFnZSwgYW5kIHRoYXQgd2UgYXJlIGxvb2tpbmcgYXQgdGhlIHBhZ2UgIjIiLjxici8+CgkJSW4gcHJldHR5IG11Y2ggdGhlIHNhbWUgd2F5LCBsaW5lICM1IGlzIGEgdmFyaWF0aW9uIG9mIGxpbmUgIzMuPC9wPgoJCTxwPlRoZSA8PC8+cGFyYW1uYW1lPiB0aGluZyBtZWFucyB0aGF0IHdoYXRldmVyIGlzIGluIHRoYXQgcGxhY2UgaW4gdGhlIHVybCB3aWxsIGJlIGludGVycHJldGVkIGFzIHRoZSAicGFyYW1uYW1lIiBwYXJhbWV0ZXIuIEluIG90aGVyIHdvcmRzLCBlYWNoIHVybCBzdHJ1Y3R1cmUgb3V0cHV0IGRpZmZlcmVudCBwYXJhbWV0ZXJzIHRoYXQgd2lsbCB0ZWxsIHRoZSBtb2R1bGUgd2hhdCB0byBkby48L3A+CgkJPHA+PGI+TW9kaWZ5aW5nIGFsbCB0aGlzLi4uPC9iPjxici8+CgkJVGhlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgeW91IGNhbiBjaGFuZ2UsIHNvbWUgdGhhdCB5b3UgY2FuJ3QsIGFuZCBzb21lIHRoYXQgeW91IGNhbiBhdCBhIHByaWNlLjwvcD4KCQk8cD5MZXQncyBzYXkgeW91IGRvbid0IGxpa2UgdGhlIHdvcmQgIjxiPmRldGFpbDwvYj4iIGluIHRoZSB1cmwsIGFuZCB3b3VsZCBsaWtlIHRvIGNoYW5nZSBpdCB0byBzb21ldGhpbmcgZWxzZSoqLiBGaXJzdCwgbGV0J3Mgbm90IHRoYXQgdGhlICJbRGRdIiBwYXJ0IGluIHRoZSB1cmwgc3RydWN0dXJlIHNheXMgdGhhdCB0aGVyZSBjYW4gYmUgZWl0aGVyIGEgIkQiIG9yIGEgImQiIGhlcmUuIAoJCUluIG90aGVyIHdvcmRzLCA8Y29kZT5odHRwOi8vd3d3Lm15ZG9tYWluLmNvbS9uYW1lb2Ztb2R1bGUvZGV0YWlsL25hbWVvZm9iamVjdC81LzwvY29kZT4gaXMgdGhlIHNhbWUgdGhpbmcgYXMgPGNvZGU+aHR0cDovL3d3dy5teWRvbWFpbi5jb20vbmFtZW9mbW9kdWxlL0RldGFpbC9uYW1lb2ZvYmplY3QvNS88L2NvZGU+Ljxici8+CgkJWW91IGNhbiBjaGFuZ2UgdGhlIHdvcmQgImRldGFpbCIgZm9yIHNvbWV0aGluZyBlbHNlLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBhbmQgcmVtZW1iZXIgdGhhdCB0aGUgdXJsIGNhcnJ5IGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBzaG91bGQgYmUgc2hvd24uIEZvciBleGFtcGxlLCBpZiBvbmUgb2YgeW91ciBsZXZlbCBpcyBuYW1lZCAicHJvZHVjdCIsIHlvdSBjb3VsZG4ndCByZXBsYWNlIHRoZSB3b3JkICJkZXRhaWwiIGJ5IHRoZSB3b3JkICJwcm9kdWN0Ii4gSWYgeW91IGRpZCwgdGhlIG1vZHVsZSBjb3VsZG4ndCBrbm93IGlmIHRoZSB3b3JkICJwcm9kdWN0IiBpdCBlbmNvdW50ZXJzIG1lYW5zIHRoYXQgd2UncmUgd2F0Y2hpbmcgdGhlIGRldGFpbHMgb2YgYW4gaXRlbSwgb3IgaWYgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgd2F0Y2hpbmcgYSBsaXN0IG9mIHRoZSBpdGVtcyBpbiB0aGUgInByb2R1Y3QiIGxldmVsLjwvcD4KCQk8cD5TbyBsZXQncyBzYXkgd2Ugd2FudCB0byBjaGFuZ2UgImRldGFpbCIgZm9yICJ2aWV3IiAocHJvdmlkZWQgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBhIGxldmVsIGNhbGxlZCAidmlldyIpLiBJbiBsaW5lICMxLCB3ZSB3b3VsZCByZXBsYWNlIDxjb2RlPihbRGRdZXRhaWwpPC9jb2RlPiB3aXRoIDxjb2RlPih2aWV3KTwvY29kZT4gKG9yIDxjb2RlPihbVnZdaWV3KTwvY29kZT4sIGlmIHlvdSB3YW50IGl0IHRvIGFjY2VwdCBib3RoICJWaWV3IiBhbmQgInZpZXciKS48L3A+CgkJPHA+PHU+QnV0IHRoaXMgaXMgbm90IGVub3VnaC48L3U+IFlvdSd2ZSBjaGFuZ2VkIHRoZSB3YXkgdGhlIHVybHMgYXJlIGludGVycHJldGVkLCBidXQgbm90IHRoZSB3YXkgdGhleSBhcmUgY3JlYXRlZC4gSW4gdGhlIHNhbWUgZmlsZSwgc2VhcmNoIGZvciB0aGUgQnVpbGRQcmV0dHlVUkxzIGZ1bmN0aW9uLiBJdCBzaG91bGQgY29udGFpbiBzb21ldGhpbmcgbGlrZSB0aGlzOjwvcD4KCQk8cHJlIGNsYXNzPSJjb2RlIj4KIzEJCSRwcmV0dHl1cmwgPSAibmFtZW9mbW9kdWxlLyI7CiMyCQlpZihpc3NldCgkcGFyYW1zWyJhbGlhcyJdKSl7CiMzCQkJJHByZXR0eXVybCAuPSAiZGV0YWlsLyIuJHBhcmFtc1siYWxpYXMiXTsKIzQJCX1lbHNlaWYoaXNzZXQoJHBhcmFtc1sicGFyZW50Il0pKXsKIzUJCQkkcHJldHR5dXJsIC49ICRwYXJhbXNbIndoYXQiXS4iLyIuJHBhcmFtc1sicGFyZW50Il07CiM2CQl9ZWxzZXsKIzcJCQkkcHJldHR5dXJsIC49ICRwYXJhbXNbIndoYXQiXTsKIzgJCX0KIzkJCWlmKCFpc3NldCgkcGFyYW1zWyJhbGlhcyJdKSAmJiBpc3NldCgkcGFyYW1zWyJwYWdlaW5kZXgiXSkgJiYgaXNzZXQoJHBhcmFtc1sibmJwZXJwYWdlIl0pKQkkcHJldHR5dXJsIC49ICIvIi4kcGFyYW1zWyJwYWdlaW5kZXgiXS4iLyIuJHBhcmFtc1sibmJwZXJwYWdlIl07CiMxMAkJJHByZXR0eXVybCAuPSAiLyIuJHJldHVybmlkOwojMTEJCXJldHVybiAkcHJldHR5dXJsOzwvcHJlPgoJCTxwPlRoaXMgZnVuY3Rpb24gdHJhbnNmb3JtcyB0aGUgcGFyYW1ldGVycyBpbnRvIGEgdXJsLjxici8+CgkJTGluZSAjMSBzdGFydHMgd2l0aCB0aGUgbW9kdWxlJ3MgbmFtZS48YnIvPgoJCUluIGxpbmVzICMyLSMzLCBpZiB3ZSB3YW50IHRvIHdhdGNoIHRoZSBkZXRhaWxzIG9mIGFuIGl0ZW0sIHdlIGFkZCB0aGUgImRldGFpbC8iIGJsb2NrIHRvIHRoZSB1cmwuPGJyLz4KCQlJZiB0aGlzIGlzbid0IHRoZSBjYXNlLCB3ZSBhZGQgdGhlIGxldmVsIG9mIHRoZSBpdGVtcyB3ZSB3YW50IHRvIHNob3cgYW5kLCBpZiBzcGVjaWZpZWQsIHRoZSBwYXJlbnQgKGxpbmVzICM0IHRvICM4KS4gSW4gbGluZSAjOSwgaWYgd2UncmUgc2VwYXJhdGluZyBpbnRvIHBhZ2VzIHdlIGFkZCB0aGUgcGFnZSB3ZSB3aXNoIHRvIGxvb2sgYW5kIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgcGVyIHBhZ2UuCgkJRmluYWxseSwgaW4gbGluZSAjMTAsIHdlIGFkZCB0aGUgaWQgb2YgdGhlIHBhZ2UgaW4gd2hpY2ggaXQgc2hvdWxkIGJlIGRpc3BsYXllZC48L3A+CgkJPHA+SWYgd2UgY2hhbmdlZCAiW0RkXWV0YWlsIiB0byAiW1Z2XWlldyIgaW4gdGhlIFNldFBhcmFtZXRlcnMoKSBmdW5jdGlvbiwgd2UgbXVzdCBhbHNvIGNoYW5nZSB0aGUgImRldGFpbC8iIGluIGxpbmUgIzMgZm9yICJ2aWV3LyIuPGJyLz5Ob3csIHRoaXMgc2hvdWxkIGRvIHRoZSB0cmljay48L3A+CgkJPHA+PGI+Q2FuIEkgZ2V0IHJpZCBvZiB0aGUgcmV0dXJuaWQ/PC9iPjxici8+Tm8sIG5vdCByZWFsbHkuIEhvd2V2ZXIsIGlmIHlvdSB0aGUgbW9kdWxlIGlzIDx1PmFsd2F5czwvdT4gZGlzcGxheWVkIGluIHRoZSBzYW1lIHBhZ2UgKGkuZS4sIGlmIGl0J3MgPHU+YWx3YXlzPC91PiB0aGUgc2FtZSBudW1iZXIpLCB3ZSBjb3VsZCByZW1vdmUgaXQgZnJvbSB0aGUgdXJsIGFuZCBwcm92aWRlIGl0IGluIGFub3RoZXIgd2F5LiBIZXJlJ3MgaG93IHRvIGRvIGl0OjwvcD4KCQk8cD5MZXQncyBzYXkgdGhlIGlkIG9mIHRoZSBwYWdlIGluIHdoaWNoIHRoZSBtb2R1bGUgaXMgYWx3YXlzIGNhbGxlZCAodGhlIG51bWJlciB3ZSdyZSB0cnlpbmcgdG8gZ2V0IHJpZCBvZikgaXMgNS48YnIvPgoJCTEuIGluIHRoZSBTZXRQYXJhbWV0ZXJzKCkgZnVuY3Rpb24gb2YgeW91ciBtb2R1bGUsIHJlbW92ZSBhbGwgPGNvZGU+XC8oP1A8cmV0dXJuaWQ+WzAtOV0rKTwvY29kZT4gcGFydHMuIChpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYSB0byBjb3B5IGFuZCBwYXN0ZSB0aGUgb3JpZ2luYWwgbGluZXMganVzdCBpbiBjYXNlLi4uIHlvdSBjYW4gY29tbWVudCBsaW5lcyB1c2luZyA8Y29kZT4vLzwvY29kZT4pLjxici8+CgkJMi4gaW4gdGhlIEJ1aWxkUHJldHR5VVJMcygpIGZ1bmN0aW9uIG9mIHlvdXIgbW9kdWxlLCBjb21tZW50IChhZGQgPGNvZGU+Ly88L2NvZGU+IGJlZm9yZSBpdCkgdGhlIGxpbmUgIzEwICg8Y29kZT4vLyAkcHJldHR5dXJsIC49ICIvIi4kcmV0dXJuaWQ7PC9jb2RlPikuPGJyLz4KCQkzLiB3ZSBub3cgbmVlZCB0byBwcm92aWRlIHRoZSBpZC4gR28gYmFjayB0byB0aGUgU2V0UGFyYW1ldGVycygpIGZ1bmN0aW9uLCBhbmQgZm9yIGVhY2ggbGluZSwganVzdCBhZnRlciB0aGUgPGNvZGU+JCIvPC9jb2RlPiBwYXJ0IChhbmQgYmVmb3JlIHRoZSBjbG9zdXJlIG9mIHRoZSBwYXJlbnRoZXNpcyksIGFkZCA8Y29kZT4sIGFycmF5KCJyZXR1cm5pZCI9PjUpPC9jb2RlPiAod2l0aCB0aGUgY29tbWEpLCB3aGVyZSAiNSIgaXMgeW91ciBpZC4gRm9yIGV4YW1wbGUsIHRoaXM6PGJyLz4KCQk8Y29kZT4kdGhpcy0+UmVnaXN0ZXJSb3V0ZSgiL1tuTl1hbWVvZm1vZHVsZVwvKFtEZF1ldGFpbClcLyg/UDxhbGlhcz5bXlwvXSspJC8iKTs8L2NvZGU+PGJyLz4KCQlzaG91bGQgYmVjb21lOjxici8+CgkJPGNvZGU+JHRoaXMtPlJlZ2lzdGVyUm91dGUoIi9bbk5dYW1lb2Ztb2R1bGVcLyhbRGRdZXRhaWwpXC8oP1A8YWxpYXM+W15cL10rKSQvIiwgYXJyYXkoInJldHVybmlkIj0+NSkpOzwvY29kZT48YnIvPgoJCShSZW1lbWJlciBub3QganVzdCB0byBjb3B5IGFuZCBwYXN0ZSBsaW5lcyBmcm9tIHRoaXMgaGVscCwgYmVjYXVzZSB5b3VyIG1vZHVsZSBpcyBwcm9iYWJseSA8aT5ub3Q8L2k+IG5hbWVkICJuYW1lb2Ztb2R1bGUiKTxici8+CgkJVGhpcyBzaG91bGQgZG8gdGhlIHRyaWNrLCBidXQgdGhlIG1vZHVsZSB3aWxsIG5ldmVyIHVzZSBhbm90aGVyIHBhZ2UgdG8gZGlzcGxheSBpdHMgY29udGVudC48L3A+CgkJPHA+PHU+RmluYWwgbm90aWNlOjwvdT4gSWYgeW91IGNoYW5nZSB0aGUgcHJldHR5IHVybHMgYW5kIG1ha2UgdXNlIG9mIHRoZSAiaXNfc2VsZWN0ZWQiIGF0dHJpYnV0ZXMgaW4geW91ciB0ZW1wbGF0ZXMsIHlvdSBtaWdodCBhbHNvIGhhdmUgdG8gY2hhbmdlIHRoZSBnZXRfbW9kdWxlR2V0VmFycygpIGZ1bmN0aW9uICh0YWtlIGEgbG9vayA8YSBocmVmPSIjcTE0Ij5oZXJlPC9hPikuPC9wPgoJCTxwIHN0eWxlPSJmb250LXNpemU6IDExcHg7Ij48YnIvPiogaWYgdGhlcmUgaXMgb25seSBvbmUgaXRlbSB0byBkaXNwbGF5LCBhbmQgaWYgeW91IGFyZW4ndCB1c2luZyB0aGUgImZvcmNlbGlzdCIgcGFyYW1ldGVyLCB0aGUgZGV0YWlscyB3aWxsIGJlIGRpc3BsYXllZCBpbnN0ZWFkIG9mIGEgbGlzdC48YnIvPgoJCSoqIG5vLCB5b3UgY2FuJ3QganVzdCBnZXQgcmlkIG9mIGl0LCB1bmxlc3MgeW91IGNoYW5nZSBhbGwgcmVnaXN0ZXJlZCB1cmxzLi4uIGZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIGhhdmluZyBhICIvZGV0YWlsLyIsIGFsbCBvdGhlciB1cmxzIGNvdWxkIGhhdmUgYSAiL2xpc3QvIiBibG9jay48L3A+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4KCQoKCTxkaXYgY2xhc3M9InFkaXYiIGlkPSJxOCI+CgkJPGRpdiBjbGFzcz0icXVlc3Rpb24iPkNhbiBJIG1ha2UgbXkgbW9kdWxlIGFsd2F5cyBhY3QgYXMgaWYgdGhlICJmb3JjZWxpc3QiIHBhcmFtZXRlciB3YXMgZW5hYmxlZD88L2Rpdj4KCQk8ZGl2IGNsYXNzPSJhbnN3ZXIiPgoJCTxwIHN0eWxlPSJjb2xvcjogcmVkOyBmb250LXdlaWdodDogYm9sZDsiPlNpbmNlIDEuOC42LCB0aGlzIGhhcyBiZWNvbWUgYSBzaW1wbGUgb3B0aW9uIHRvIHR1cm4gb24gaW4gdGhlICJTZXR0aW5ncyIgdGFiLi4uPC9wPgoJCTxwPjxiPlllcy48L2I+PC9wPgoJCTxwPk9wZW4gdGhlIGFjdGlvbi5kZWZhdWx0LnBocCBmaWxlLiBBcm91bmQgdGhlIGxpbmUgIzE2IHlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6PC9wPgoJCTxwcmUgY2xhc3M9ImNvZGUiPgoJCSRmb3JjZWxpc3QgPSBpc3NldCgkcGFyYW1zWyJmb3JjZWxpc3QiXSk/JHBhcmFtc1siZm9yY2VsaXN0Il06ZmFsc2U7PC9wcmU+CgkJPHA+V2hhdCB0aGlzIHNheXMgaXMgdGhhdCBpZiB0aGUgZm9yY2VsaXN0IHBhcmFtZXRlciBoYXMgYmVlbiBzZXQsIHdlIHVzZSB0aGlzIHZhbHVlLCBhbmQgaWYgaXQgaGFzbid0LCB3ZSB1c2UgdGhlIHZhbHVlICJmYWxzZSIuPGJyLz4KCQlDaGFuZ2luZyB0aGlzIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBhIDxjb2RlPnRydWU8L2NvZGU+IHdvdWxkIG1lYW4gdGhhdCB0aGUgZm9yY2VsaXN0IG1vZGUgaXMgYWx3YXlzIGVuYWJsZWQsIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlLjxici8+CgkJQnV0IHRoYXQncyBub3QgZXhhY3RseSB3aGF0IHdlIHdhbnQsIGZvciB0aGlzIHdvdWxkIG1lYW4gdGhhdCB3ZSBhbHdheXMgZGlzcGxheSBhIGxpc3QsIGV2ZW4gd2hlbiB3ZSdyZSB0cnlpbmcgdG8gZGlzcGxheSBhbiBpdGVtJ3MgZGV0YWlscy4gU28gdGhlIHByb3BlciBjb2RlIHdvdWxkIGJlOjwvcD4KCQk8cHJlIGNsYXNzPSJjb2RlIj4KCQkkZm9yY2VsaXN0ID0gaXNzZXQoJHBhcmFtc1siZm9yY2VsaXN0Il0pPyRwYXJhbXNbImZvcmNlbGlzdCJdOihpc3NldCgkcGFyYW1zWyJhbGlhcyJdKT9mYWxzZTp0cnVlKTs8L3ByZT4KCQk8cD5UaGlzIHdheSwgJGZvcmNlbGlzdCB3aWxsIGJlIGZhbHNlIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlLCBhbmQgdW5sZXNzIGFuIGFsaWFzICh1c2VkIGluIGRldGFpbCBsaW5rcykgaXMgc3BlY2lmaWVkLjwvcD4KCQk8cD4oVHdvIGxpbmVzIGJlbG93LCB5b3UgY291bGQgZG8gdGhlIHNhbWUga2luZCBvZiB0aGluZyBmb3IgdGhlICJpbmxpbmUiIHBhcmFtZXRlci4uLik8L3A+CgkJPC9kaXY+CgkJPGEgY2xhc3M9ImJhY2t0b3RvcCIgaHJlZj0iI3RvcCI+QmFjayB0byB0b3A8L2E+Cgk8L2Rpdj4KCQoJCgk8ZGl2IGNsYXNzPSJxZGl2IiBpZD0icTE0Ij4KCQk8ZGl2IGNsYXNzPSJxdWVzdGlvbiI+V2hhdCdzIHdpdGggdGhpcyBnZXRfbW9kdWxlR2V0VmFycygpIGZ1bmN0aW9uPzwvZGl2PgoJCTxkaXYgY2xhc3M9ImFuc3dlciI+CgkJPHA+PGI+V2hhdCBpcyBpdCBmb3I/IEFuZCB3aHkgaXMgaXQgc3VjaCBhIG1lc3M/PC9iPjwvcD4KCQk8cD5JbiB0aGUgbWFpbiBtb2R1bGUgZmlsZSwgdGhlcmUgaXMgYSBmdW5jdGlvbiBjYWxsZWQgZ2V0X21vZHVsZUdldFZhcnMoKS4gQmFzaWNhbGx5LCB0aGUgZnVuY3Rpb24gcmV0cmlldmUgdGhlIG1vZHVsZSBhY3Rpb24gcGFyYW1ldGVycyBmcm9tIHRoZSB1cmwuPGJyLz4KCQlJbWFnaW5lIHRoYXQgaW4geW91ciB0ZW1wbGF0ZSwgaW4gYSBjb2x1bW4gb24gdGhlIGxlZnQsIHlvdSBjYWxsIHRoZSBtb2R1bGUgdG8gZGlzcGxheSBhIGNhdGVnb3J5IGxpc3QuIFdoZW4geW91IGNsaWNrIG9uIGFuIGNhdGVnb3J5LCB0aGUgbGlzdCBzdGF5cyB0aGVyZSwgYnV0IHRoZSBtYWluIGNvbnRlbnQgYmxvY2sgZGlzcGxheXMgdGhlIGNoaWxkcmVuIHdpdGhpbiB0aGF0IGNhdGVnb3J5LiBOb3csIGluIHRoZSBjYXRlZ29yeSBsaXN0LCB5b3UgbWlnaHQgd2FudCB0byBzaG93IHdoaWNoIGNhdGVnb3J5IGlzIHNlbGVjdGVkICh1c2luZyB0aGUgJGl0ZW0tPmlzX3NlbGVjdGVkIGF0dHJpYnV0ZSkuIEJ1dCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBjYXRlZ29yeSBsaXN0IGlzIGNhbGxlZCA8aT5iZWZvcmU8L2k+IHRoZSBtYWluIG1vZHVsZSBhY3Rpb24gKHRoZSBsaXN0IG9mIGNoaWxkcmVuKSwgYW5kIHRodXMgdGhlIGFjdGlvbiBwYXJhbWV0ZXJzIGFyZW4ndCB5ZXQgcGFyc2VkLjxici8+CgkJVGhpcyBzdWJqZWN0IGhhcyBiZWVuIGRpc2N1c3NlZCBpbiB0aGUgZm9ydW1zICg8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcvaW5kZXgucGhwL3RvcGljLDMzMzM0LjAuaHRtbCI+aGVyZTwvYT4pLCBhbmQgSSBjaG9zZSB0aGUgc29sdXRpb24gdGhhdCBpcyB0aGUgZWFzaWVzdCB0byBpbXBsZW1lbnQgZm9yIHRoZSB1c2VyOiByZXRyaWV2ZSB0aGUgcGFyYW1ldGVycyBmcm9tIHRoZSB1cmwgZXZlbiBiZWZvcmUgdGhleSBhcmUgcGFyc2VkIGJ5IHRoZSBjbXMuIEl0J3MgYSByYXRoZXIgY29tcGxpY2F0ZWQgZnVuY3Rpb24gYmVjYXVzZSB3ZSBuZWVkIHRvIGRlYWwgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgcHJldHR5dXJscyBhbmQgcmV3cml0dGVuIHVybHMuLi48YnIvPgoJCU9mIGNvdXJzZSwgaXQgbWVhbnMgdGhhdCBpZiB5b3Ugd2lzaCB0byBjaGFuZ2UgdGhlIHdheSBwcmV0dHl1cmxzIGFyZSBtYWRlIGFuZCBzdGlsbCB1c2UgdGhlIGlzX3NlbGVjdGVkIGF0dHJpYnV0ZSwgeW91J3JlIGdvbm5hIGhhdmUgdG8gcGxheSBpbiB0aGlzIGluZWxlZ2FudCBjb2RlLiBCdXQgaGV5LCBJJ20gd3JpdGluZyB0aGlzIGp1c3QgdG8gbWFrZSBpdCBjbGVhcmVyLi4uPC9wPgoJCTxici8+PHA+PGI+SG93IGRvZXMgaXQgd29yaywgYW5kIGhvdyB0byBjaGFuZ2UgaXQ/PC9iPjwvcD4KCQk8cD5CZWZvcmUgd2UgZ28sIGhlcmUncyBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9uOjwvcD4KCQk8cHJlIGNsYXNzPSJjb2RlIj4KCWZ1bmN0aW9uIGdldF9tb2R1bGVHZXRWYXJzKCl7CiMxCQkvLyB1bm9ydGhvZG94IGhhY2sgc28gdGhhdCBkaWZmZXJlbnQgY2FsbHMgb2YgdGhlIG1vZHVsZSBzcGVhayB3aXRoIGVhY2ggb3RoZXIKIzIJCS8vIGJhc2ljYWxseSwgd2UgcmV0cmlldmUgcGFyYW1ldGVycyBpbiB0aGUgdXJsIHRoYXQgd2VyZSBtZWFudCBmb3Igb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBtb2R1bGUKIzMJCWdsb2JhbCAkX0dFVDsKIzQJCWdsb2JhbCAkZ0NtczsKIzUJCSRnbG9iYWxtb2R1bGV2YXJzID0gYXJyYXkoKTsKIzYJCWlmKGlzc2V0KCRfR0VUWyJtYWN0Il0pKXsKIzcJCQkvLyBpZiB3ZSBhcmVuJ3QgdXNpbmcgcHJldHR5IHVybHMuLi4KIzgJCQkkbW9kaW5mbyA9IGV4cGxvZGUoIiwiLCRfR0VUWyJtYWN0Il0pOwojOQkJCWlmKGlzc2V0KCRtb2RpbmZvKSAmJiAkbW9kaW5mb1swXSA9PSAkdGhpcy0+R2V0TmFtZSgpKXsKIzEwCQkJCWlmKGlzc2V0KCRfR0VUWyRtb2RpbmZvWzFdLiJwYXJlbnQiXSkpCiMxMQkJCQkJJGdsb2JhbG1vZHVsZXZhcnNbInBhcmVudCJdPSRfR0VUWyRtb2RpbmZvWzFdLiJwYXJlbnQiXTsKIzEyCQkJCWlmKGlzc2V0KCRfR0VUWyRtb2RpbmZvWzFdLiJ3aGF0Il0pKQojMTMJCQkJCSRnbG9iYWxtb2R1bGV2YXJzWyJ3aGF0Il09JF9HRVRbJG1vZGluZm9bMV0uIndoYXQiXTsKIzE0CQkJCWlmKGlzc2V0KCRfR0VUWyRtb2RpbmZvWzFdLiJhbGlhcyJdKSkKIzE1CQkJCQkkZ2xvYmFsbW9kdWxldmFyc1siYWxpYXMiXT0kX0dFVFskbW9kaW5mb1sxXS4iYWxpYXMiXTsKIzE2CQkJCWlmKGlzc2V0KCRfR0VUWyRtb2RpbmZvWzFdLiJwYWdlaW5kZXgiXSkpCiMxNwkJCQkJJGdsb2JhbG1vZHVsZXZhcnNbInBhZ2VpbmRleCJdPSRfR0VUWyRtb2RpbmZvWzFdLiJwYWdlaW5kZXgiXTsKIzE4CQkJfQojMTkJCX1lbHNlaWYoJGdDbXMtPmNvbmZpZ1siaW50ZXJuYWxfcHJldHR5X3VybHMiXSB8fCAkZ0Ntcy0+Y29uZmlnWyJhc3N1bWVfbW9kX3Jld3JpdGUiXSl7CiMyMAkJCSRwYXJhbXMgPSBhcnJheSgpOwojMjEJCQlpZigkZ0Ntcy0+Y29uZmlnWyJhc3N1bWVfbW9kX3Jld3JpdGUiXSAmJiBpc3NldCgkX0dFVFsicGFnZSJdKSl7CiMyMgkJCQkvLyBpZiB3ZSBhcmUgdXNpbmcgYW4gZXh0ZXJuYWwgbW9kX3Jld3JpdGUsIGFzc3VtaW5nIHlvdSBhcmUgdXNpbmcgdGhlIHZlcnkKIzIzCQkJCS8vIGJhc2ljIHJld3JpdGUgd2hpY2ggcHV0cyB0aGUgbW9kdWxlIGluZm9ybWF0aW9ucyBpbnNpZGUgdGhlIHBhZ2UgdmFyaWFibGUKIzI0CQkJCSRwYXJ0cyA9IGV4cGxvZGUoIi8iLCRfR0VUWyJwYWdlIl0pOwojMjUJCQkJZm9yZWFjaCgkcGFydHMgYXMgJHBhcnQpewojMjYJCQkJCWlmKCRwYXJ0ICE9ICIiKQkkcGFyYW1zW10gPSAkcGFydDsKIzI3CQkJCX0KIzI4CQkJfWVsc2VpZighJGdDbXMtPmNvbmZpZ1siYXNzdW1lX21vZF9yZXdyaXRlIl0gJiYgJGdDbXMtPmNvbmZpZ1siaW50ZXJuYWxfcHJldHR5X3VybHMiXSAmJiBpc3NldCgkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSkpewojMjkJCQkJLy8gaWYgd2UgYXJlIHVzaW5nIHRoZSBpbnRlcm5hbCBwcmV0dHkgdXJscwojMzAJCQkJJHBhcnRzID0gZXhwbG9kZSgiLyIsJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0pOwojMzEJCQkJJHN0YXJ0ZWQgPSBmYWxzZTsKIzMyCQkJCWZvcmVhY2goJHBhcnRzIGFzICRwYXJ0KXsKIzMzCQkJCQlpZigkc3RhcnRlZCAmJiAkcGFydCAhPSAiIikJJHBhcmFtc1tdID0gJHBhcnQ7CiMzNAkJCQkJaWYoc3RydG9sb3dlcigkcGFydCkgPT0gImluZGV4LnBocCIpCSRzdGFydGVkID0gdHJ1ZTsKIzM1CQkJCX0KIzM2CQkJfQojMzcJCQlpZihpc3NldCgkcGFyYW1zWzBdKSAmJiBzdHJ0b2xvd2VyKCRwYXJhbXNbMF0pID09IHN0cnRvbG93ZXIoJHRoaXMtPkdldE5hbWUoKSkpewojMzgJCQkJIC8vIHdlIGFyZSBpbiBhIG1vZHVsZSBhY3Rpb24KIzM5CQkJCWlmKCFpc3NldCgkcGFyYW1zWzFdKSB8fCBzdHJ0b2xvd2VyKCRwYXJhbXNbMV0pID09ICJxdWVyeSIpewojNDAKIzQxCQkJCX1lbHNlaWYoaXNzZXQoJHBhcmFtc1sxXSkgJiYgc3RydG9sb3dlcigkcGFyYW1zWzFdKSA9PSAiZGV0YWlsIil7CiM0MgkJCQkJJGdsb2JhbG1vZHVsZXZhcnNbIndoYXQiXSA9ICJ0c3ViYSI7CiM0MwkJCQkJJGdsb2JhbG1vZHVsZXZhcnNbImFsaWFzIl0gPSAkcGFyYW1zWzJdOwojNDQJCQkJfWVsc2V7CiM0NQkJCQkJJGdsb2JhbG1vZHVsZXZhcnNbIndoYXQiXSA9ICRwYXJhbXNbMV07CiM0NgkJCQkJc3dpdGNoKGNvdW50KCRwYXJhbXMpKXsKIzQ3CQkJCQkJY2FzZSA2OgojNDgJCQkJCQkJJGdsb2JhbG1vZHVsZXZhcnNbInBhZ2VpbmRleCJdID0gJHBhcmFtc1szXTsKIzQ5CQkJCQkJCSRnbG9iYWxtb2R1bGV2YXJzWyJuYnBlcnBhZ2UiXSA9ICRwYXJhbXNbNF07CiM1MAkJCQkJCWNhc2UgNDoKIzUxCQkJCQkJCSRnbG9iYWxtb2R1bGV2YXJzWyJwYXJlbnQiXSA9ICRwYXJhbXNbMl07CiM1MgkJCQkJCQlicmVhazsKIzUzCQkJCQkJY2FzZSA1OgojNTQJCQkJCQkJJGdsb2JhbG1vZHVsZXZhcnNbInBhZ2VpbmRleCJdID0gJHBhcmFtc1syXTsKIzU1CQkJCQkJCSRnbG9iYWxtb2R1bGV2YXJzWyJuYnBlcnBhZ2UiXSA9ICRwYXJhbXNbM107CiM1NgkJCQkJCQlicmVhazsKIzU3CQkJCQl9CiM1OAkJCQl9CiM1OQkJCX0KIzYwCQl9CiM2MQkJcmV0dXJuICRnbG9iYWxtb2R1bGV2YXJzOwoJfTwvcHJlPgoJCTxwPk5vdyB0aGVyZSBhcmUgZm91ciBwb3NzaWJsZSBzY2VuYXJpb3M6PGJyLz4KCQkxLiBUaGVyZSBpcyBubyByZXdyaXRlIG9yIHByZXR0eXVybHMgYXQgYWxsICh0aGF0J3MgdGhlIGVhc2llc3QuLi4gbGluZXMgNyB0byAxOCBkZWFsIHdpdGggdGhpcyk8YnIvPgoJCTIuIFdlIGFyZSB1c2luZyBpbnRlcm5hbCBwcmV0dHl1cmxzIHdpdGhvdXQgbW9kX3Jld3JpdGUgKGxpbmVzIDI5IHRvIDM1LCBhbmQgMzcgdG8gNTkpPGJyLz4KCQkzLiBXZSBhcmUgdXNpbmcgaW50ZXJuYWwgcHJldHR5dXJscyBhbG9uZyB3aXRoIHRoZSBzdGFuZGFyZCBhc3N1bWVkIG1vZF9yZXdyaXRlIChsaW5lcyAyMiB0byAzNywgYW5kIDM3IHRvIDU5KTxici8+CgkJNC4gV2UgYXJlIHVzaW5nIGEgbm9uLXN0YW5kYXJkIG1vZF9yZXdyaXRlLi4uIGluIHRoYXQgY2FzZSwgeW91J2xsIGVpdGhlciBoYXZlIHRvIGZvcmdldCBhYm91dCB0aGUgaXNfc2VsZWN0ZWQgYXR0cmlidXRlIG9yIHRvIHdyaXRlIHRoZSBjb2RlIHlvdXJzZWxmLjwvcD4KCQk8cD48Yj5DYXNlIDE6IGdvb2Qgb2wnIHVybHM8L2I+PGJyLz4KCQlJZiB3ZSBmaW5kIHRoZSAibWFjdCIgaW4gdGhlIEdFVCBwYXJhbWV0ZXJzLCB0aGVuIHdlIGFyZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgdXJscy4gV2UganVzdCBoYXZlIHRvIGJyZWFrIHRoZSBtYWN0IHZhbHVlIGludG8gcGllY2VzLCBtYWtlIHN1cmUgaXQncyBhbiBhY3Rpb24gb2Ygb3VyIG1vZHVsZSwgYW5kIHJldHJpZXZlIHRoZSBkaWZmZXJlbnQgcGFyYW1ldGVycyBieSB0aGVpciBuYW1lIChhbG9uZyB3aXRoIHRoZSAkaWQpLjwvcD4KCQk8cD48Yj5DYXNlIDI6IGludGVybmFsIHByZXR0eSB1cmxzPC9iPjxici8+CgkJTGluZXMgMjkgdG8gMzUgcmV0cmlldmUgdGhlIHVybCwgc2VwYXJhdGUgaXQgaW50byBwYXJ0cyAoZWFjaCBwYXJ0IGJlaW5nIGEgZmFrZSBmb2xkZXIgaW4gdGhlIHVybCksIGFuZCBvbmx5IGtlZXAgdGhlIHBhcnRzIHRoYXQgYXJlIGFmdGVyIHRoZSAiaW5kZXgucGhwLyIuPC9wPgoJCTxwPkxpbmVzIDM3IHRvIDU5IHRyeSB0byBmaWd1cmUganVzdCB3aGF0IHBhcmFtZXRlcnMgdGhlc2UgcGFydHMgY291bGQgYmUuIFJlbWVtYmVyIHRoYXQgd2UgaGFkIHRoZSBmb2xsb3dpbmcgcm91dGVzIHJlZ2lzdGVyZWQ6PC9wPgoJCTxwcmUgY2xhc3M9ImNvZGUiPgojMQkkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgiL1tuTl1hbWVvZm1vZHVsZVwvKFtEZF1ldGFpbClcLyg/UDxhbGlhcz5bXlwvXSspXC8oP1A8cmV0dXJuaWQ+WzAtOV0rKSQvIik7CiMyCSR0aGlzLT5SZWdpc3RlclJvdXRlKCIvW25OXWFtZW9mbW9kdWxlXC8oP1A8d2hhdD5bXlwvXSspXC8oP1A8cmV0dXJuaWQ+WzAtOV0rKSQvIik7CiMzCSR0aGlzLT5SZWdpc3RlclJvdXRlKCIvW25OXWFtZW9mbW9kdWxlXC8oP1A8d2hhdD5bXlwvXSspXC8oP1A8cGFyZW50PlteXC9dKylcLyg/UDxyZXR1cm5pZD5bMC05XSspJC8iKTsKIzQJJHRoaXMtPlJlZ2lzdGVyUm91dGUoIi9bbk5dYW1lb2Ztb2R1bGVcLyg/UDx3aGF0PlteXC9dKylcLyg/UDxwYWdlaW5kZXg+WzAtOV0rKVwvKD9QPG5icGVycGFnZT5bMC05XSspXC8oP1A8cmV0dXJuaWQ+WzAtOV0rKSQvIik7CiM1CSR0aGlzLT5SZWdpc3RlclJvdXRlKCIvW25OXWFtZW9mbW9kdWxlXC8oP1A8d2hhdD5bXlwvXSspXC8oP1A8cGFyZW50PlteXC9dKylcLyg/UDxwYWdlaW5kZXg+WzAtOV0rKVwvKD9QPG5icGVycGFnZT5bMC05XSspXC8oP1A8cmV0dXJuaWQ+WzAtOV0rKSQvIik7PC9wcmU+CgkJPHA+Um91dGUgIzEgaXMgaGFuZGxlZCBieSB0aGUgbGluZXMgNDEtNDMuIE90aGVyd2lzZSwgaXQgd2lsbCBkZXBlbmQgb24gdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzLiBJZiB0aGVyZSBhcmUgNiwgd2Uga25vdyB3ZSdyZSB1c2luZyByb3V0ZSAjNSA6ICRwYXJhbXNbMF0gaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSwgJHBhcmFtc1sxXSB0aGUgbmFtZSBvZiB0aGUgbGV2ZWwgKHdoYXQpLCAkcGFyYW1zWzJdIHRoZSBuYW1lIG9mIHRoZSBwYXJlbnQsICRwYXJhbXNbM10gdGhlIHBhZ2VpbmRleCwgYW5kIHNvIG9uLi4uPGJyLz4KCQlMaWtld2lzZSwgaWYgd2UgaGF2ZSA1IHBhcmFtcywgd2Uga25vdyB3ZSdyZSB1c2luZyByb3V0ZSAjNCwgYW5kIHdpdGggNCBwYXJhbXMsIHdlIGtub3cgd2UncmUgdXNpbmcgcm91dGUgIzMuIElmIHdlIHdlcmUgdXNpbmcgcm91dGUgIzIsIHRoZXJlIHdvdWxkbid0IGJlIGFueXRoaW5nIHRvIHJldHJpZXZlIGFueXdheS48YnIvPgoJCUlmIHRoZSBtb2R1bGUgYWN0aW9uIGlzIGEgcXVlcnkgKGxpbmVzIDM5LTQwKSwgd2UgZG9uJ3QgcmV0cmlldmUgYW55dGhpbmcuLi48L3A+CgkJPHA+U28gYmFzaWNhbGx5LCBpZiB5b3UgY2hhbmdlIHRoZSByb3V0ZXMsIHlvdSd2ZSBnb3QgdG8gY2hhbmdlIGxpbmVzIDM3IHRvIDU5LjwvcD4KCQk8cD48Yj5DYXNlIDM6IGludGVybmFsIHByZXR0eSB1cmxzIHdpdGggc3RhbmRhcmQgbW9kX3Jld3JpdGU8L2I+PGJyLz4JCQoJCUluIHRoaXMgY2FzZSwgdGhlIHBhdGggdGhhdCdzIGFmdGVyICJpbmRleC5waHAvIiBpbiBjYXNlIDIgaXMgc2ltcGx5IHBhc3NlZCB0aHJvdWdoIHRoZSAicGFnZSIgR0VUIHBhcmFtZXRlci4gU28gb25jZSB3ZSd2ZSByZXRyaWV2ZWQgaXQsIHRoZSB0YXNrIGlzIGp1c3QgbGlrZSBjYXNlIDIuPC9wPgoJCTwvZGl2PgoJCTxhIGNsYXNzPSJiYWNrdG90b3AiIGhyZWY9IiN0b3AiPkJhY2sgdG8gdG9wPC9hPgoJPC9kaXY+CQkKCQkKPC9kaXY+CjxwIGFsaWduPSJyaWdodCI+UGllcnJlLUx1YyBHZXJtYWluPC9wPgo8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/function.createFieldForm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Cjw/cGhwCgkJJGNvbXBhcmVjaG9pY2VzID0gYXJyYXkoJHRoaXMtPkxhbmcoImNvbnRhaW5zIikgPT4xLCAkdGhpcy0+TGFuZygiaXNleGFjdGx5IikgPT4wLCAkdGhpcy0+TGFuZygiaXNub3QiKSA9PjIsICR0aGlzLT5MYW5nKCJpc2hpZ2hlcnRoYW4iKSA9PjMsICR0aGlzLT5MYW5nKCJpc2xvd2VydGhhbiIpID0+NCk7CgkJJGRhdGVjb21wYXJlY2hvaWNlcyA9IGFycmF5KCR0aGlzLT5MYW5nKCJxdWVyeXVzZSIpID0+ICJOQSIsICR0aGlzLT5MYW5nKCJpc2FmdGVyIikgPT4zLCAkdGhpcy0+TGFuZygiaXNiZWZvcmUiKSA9PjQsICR0aGlzLT5MYW5nKCJpc2JldHdlZW4iKSA9PjUpOwoJCSRvcmRlcmNob2ljZXMgPSBhcnJheSgiQVNDIj0+IkFTQyIsIkRFU0MiPT4iREVTQyIpOwoKCQkkb3V0cHV0ID0gYXJyYXkoKTsKCgkJc3dpdGNoKCR3aGF0KXsKCQkJY2FzZSAic3RyZWV0dmlldyI6CgkJCQkkb3V0cHV0WyJsYXRpdHVkZSJdID0gYXJyYXkoJHRoaXMtPkxhbmcoInN0cmVldHZpZXdfbGF0aXR1ZGUiKSwgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJjb21wYXJlX2xhdGl0dWRlIiwkY29tcGFyZWNob2ljZXMsLTEsMSkuIiAiLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJmaWVsZF9sYXRpdHVkZSIsIiIsMzApKTsKCQkJCSRvdXRwdXRbImxvbmdpdHVkZSJdID0gYXJyYXkoJHRoaXMtPkxhbmcoInN0cmVldHZpZXdfbG9uZ2l0dWRlIiksICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwiY29tcGFyZV9sb25naXR1ZGUiLCRjb21wYXJlY2hvaWNlcywtMSwxKS4iICIuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsImZpZWxkX2xvbmdpdHVkZSIsIiIsMzApKTsKCQkJCSRvdXRwdXRbInlhdyJdID0gYXJyYXkoJHRoaXMtPkxhbmcoInN0cmVldHZpZXdfeWF3IiksICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwiY29tcGFyZV95YXciLCRjb21wYXJlY2hvaWNlcywtMSwxKS4iICIuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsImZpZWxkX3lhdyIsIiIsMzApKTsKCQkJCSRvdXRwdXRbInBvdiJdID0gYXJyYXkoJHRoaXMtPkxhbmcoInN0cmVldHZpZXdfcG92IiksICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwiY29tcGFyZV9wb3YiLCRjb21wYXJlY2hvaWNlcywtMSwxKS4iICIuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsImZpZWxkX3BvdiIsIiIsMzApKTsKCQkJCSRvdXRwdXRbInpvb20iXSA9IGFycmF5KCR0aGlzLT5MYW5nKCJzdHJlZXR2aWV3X3pvb20iKSwgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJjb21wYXJlX3pvb20iLCRjb21wYXJlY2hvaWNlcywtMSwxKS4iICIuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsImZpZWxkX3pvb20iLCIiLDMwKSk7CgkJCQkkb3V0cHV0WyJuYW1lIl0gPSBhcnJheSgkdGhpcy0+TGFuZygibmFtZSIpLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsImNvbXBhcmVfbmFtZSIsJGNvbXBhcmVjaG9pY2VzLC0xLDEpLiIgIi4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwiZmllbGRfbmFtZSIsIiIsMzApKTsKCQkJCQoJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJ0bXB0aW1lIiwgdGltZSgpKTsKCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigic19hbmQiLCAkdGhpcy0+TGFuZygidGhpc2FuZHRoaXMiKSk7CgkJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oInRtcF9wcmVmaXgiLCAkaWQuImRhdGVfZGF0ZV9tb2RpZmllZF8iKTsKCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigidG1wX3ByZWZpeDIiLCAkaWQuImRhdGVfZGF0ZV9tb2RpZmllZF9wYXJ0Ml8iKTsKCQkJCSR0bXB0ZW1wbGF0ZSA9ICd7aHRtbF9zZWxlY3RfZGF0ZSBwcmVmaXg9JHRtcF9wcmVmaXggdGltZT0kdG1wdGltZSBzdGFydF95ZWFyPSItMTAiIGVuZF95ZWFyPSIrMTAifSB7aHRtbF9zZWxlY3RfdGltZSBwcmVmaXg9JHRtcF9wcmVmaXggdGltZT0kdG1wdGltZSB9PGRpdiBpZD0iJy4kaWQuJ2RhdGVfbW9kaWZpZWRfcGFydDIiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+IHskc19hbmR9IHtodG1sX3NlbGVjdF9kYXRlIHByZWZpeD0kdG1wX3ByZWZpeDIgdGltZT0kdG1wdGltZSBzdGFydF95ZWFyPSItMTAiIGVuZF95ZWFyPSIrMTAifSB7aHRtbF9zZWxlY3RfdGltZSBwcmVmaXg9JHRtcF9wcmVmaXgyIHRpbWU9JHRtcHRpbWUgfTwvZGl2Pic7CgkJCQkkdG1wb3V0ID0gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJjb21wYXJlX2RhdGVfbW9kaWZpZWQiLCRkYXRlY29tcGFyZWNob2ljZXMsLTEsIk5BIiwiIG9uY2hhbmdlPVwiZGF0ZWlucHV0X2NoYW5nZWNvbXBhcmUoJyIuJGlkLiJkYXRlX21vZGlmaWVkJywgdGhpcy52YWx1ZSk7XCIiKS4iICIuJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCR0bXB0ZW1wbGF0ZSk7CgkJCQkkdG1wb3V0IC49ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsImZpZWxkX2RhdGVfbW9kaWZpZWQiLCAiX19kYXRlX2ZpZWxkIik7CgkJCQkkb3V0cHV0WyJkYXRlX21vZGlmaWVkIl0gPSBhcnJheSgkdGhpcy0+TGFuZygiZGF0ZV9tb2RpZmllZCIpLCAkdG1wb3V0KTsKCQkJCSRvcmRlcmZpZWxkb3B0aW9ucyA9IGFycmF5KCIiPT4iIiwibGF0aXR1ZGUiPT4ibGF0aXR1ZGUiLCJsb25naXR1ZGUiPT4ibG9uZ2l0dWRlIiwieWF3Ij0+InlhdyIsInBvdiI9PiJwb3YiLCJ6b29tIj0+Inpvb20iLCJpZCI9PiJpZCIsIm5hbWUiPT4ibmFtZSIsImFsaWFzIj0+ImFsaWFzIiwiaXRlbV9vcmRlciI9PiJpdGVtX29yZGVyIiwiZGF0ZV9tb2RpZmllZCI9PiJkYXRlX21vZGlmaWVkIik7CgkJCQkkb3V0cHV0WyJvcmRlcmJ5Il0gPSBhcnJheSgkdGhpcy0+TGFuZygib3JkZXJieWZpZWxkIiksICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwib3JkZXIiLCRvcmRlcmZpZWxkb3B0aW9ucykuIiAiLiR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwib3JkZXJfdHlwZSIsJG9yZGVyY2hvaWNlcykpOwoJCQkJYnJlYWs7CgkJCQoJCX0KCQllY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CglmdW5jdGlvbiBkYXRlaW5wdXRfY2hhbmdlY29tcGFyZShmaWVsZG5hbWUsIG5ld3ZhbHVlKXsKCQlpZihuZXd2YWx1ZSA9PSA1KXsKCQkJdmFyIG5ld3N0YXRlID0gImlubGluZSI7CgkJfWVsc2V7CgkJCXZhciBuZXdzdGF0ZSA9ICJub25lIjsKCQl9CgkJaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRuYW1lKyJfcGFydDIiKSkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmllbGRuYW1lKyJfcGFydDIiKS5zdHlsZS5kaXNwbGF5ID0gbmV3c3RhdGU7CgkJcmV0dXJuIHRydWU7Cgl9Cjwvc2NyaXB0PgonOwoJCWlmKCRhc3NpZ24pewoJCQlmb3JlYWNoKCRvdXRwdXQgYXMgJGtleT0+JHZhbHVlKXsKCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigka2V5LiJfbGFiZWwiLCAkdmFsdWVbMF0pOwoJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCRrZXkuIl9pbnB1dCIsICR2YWx1ZVsxXSk7CgkJCX0KCQl9ZWxzZXsKCQkJZWNobyAiPHRhYmxlIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBMaWdodEdyYXk7IHBhZGRpbmctbGVmdDogMTBweDtcIj4iOwoJCQlmb3JlYWNoKCRvdXRwdXQgYXMgJGtleT0+JHZhbHVlKXsKCQkJCWlmKCRrZXkgIT0gIm9yZGVyYnkiKQllY2hvICIKCQkJCTx0cj48dGQ+Ii4kdmFsdWVbMF0uIjwvdGQ+PHRkPiIuJHZhbHVlWzFdLiI8L3RkPjwvdHI+IjsKCQkJfQoJCQkJZWNobyAiCgkJCTwvdGFibGU+PGJyLz4iOwoJCQllY2hvICI8cD4iLiRvdXRwdXRbIm9yZGVyYnkiXVswXS4iOiAiLiRvdXRwdXRbIm9yZGVyYnkiXVsxXS4iPC9wPiI7CgkJfQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.plGetFileInfo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCWlmKCFpc3NldCgkZmlsZXBhdGgpKQlleGl0OwoJCgkkaW5mbyA9IGFycmF5KCk7CgkKCSRpbmZvWyJmaWxlbmFtZSJdID0gYmFzZW5hbWUoJGZpbGVwYXRoKTsKCQoJJHNpemUgPSBmaWxlc2l6ZSgkZmlsZXBhdGgpOwoJJGluZm9bInNpemUiXSA9ICRzaXplOwoJaWYoJHNpemUgPiAxMDczNzQxODI0KXsKCQkkc2l6ZSA9IHJvdW5kKCgkc2l6ZS8xMDczNzQxODI0KSwyKS4nIEdCJzsKCX1lbHNlaWYoJHNpemUgPiAxMDQ4NTc2KXsKCQkkc2l6ZSA9IHJvdW5kKCgkc2l6ZS8xMDQ4NTc2KSwyKS4nIE1CJzsKCX1lbHNlaWYoJHNpemUgPiAxMDI0KXsKCQkkc2l6ZSA9IHJvdW5kKCgkc2l6ZS8xMDI0KSwyKS4nIEtCJzsKCX1lbHNlewoJCSRzaXplIC49ICcgYnl0ZXMnOwoJfQoJJGluZm9bInNpemVfd2Zvcm1hdCJdID0gJHNpemU7CgkKCSRleHRlbnNpb24gPSBzdHJ0b2xvd2VyKHN1YnN0cihzdHJyY2hyKCRmaWxlcGF0aCwgIi4iKSwgMSkpOwoJJGluZm9bImV4dCJdID0gJGV4dGVuc2lvbjsKCWlmKGluX2FycmF5KCRleHRlbnNpb24sIGFycmF5KCdmbHYnLCdzd2YnLCd3bXYnLCdtb3YnKSkpewoJCSRpbmZvWyJmaWxlaWNvbiJdID0gImljb25zL2ZpbGV0eXBlcy9mbWVkaWEuZ2lmIjsKCX1lbHNlaWYoaW5fYXJyYXkoJGV4dGVuc2lvbiwgYXJyYXkoJ2pwZWcnLCdqcGcnLCdwbmcnLCdnaWYnKSkpewoJCSRpbmZvWyJmaWxlaWNvbiJdID0gImljb25zL2ZpbGV0eXBlcy9mcGFpbnQuZ2lmIjsKCX1lbHNlewoJCSRpbmZvWyJmaWxlaWNvbiJdID0gImljb25zL2ZpbGV0eXBlcy9mZG9jLmdpZiI7Cgl9CgkKCSRpbmZvWyJpbWFnZXNpemUiXSA9IGZhbHNlOwoJJGltZ2luZiA9IGdldGltYWdlc2l6ZSgkZmlsZXBhdGgpOwoJaWYoaXNzZXQoJGltZ2luZlsxXSkpewoJCSRpbmZvWyJ3aWR0aCJdID0gJGltZ2luZlswXTsKCQkkaW5mb1siaGVpZ2h0Il0gPSAkaW1naW5mWzFdOwoJCSRpbmZvWyJpbWFnZXNpemUiXSA9ICRpbWdpbmZbMF0uJ3gnLiRpbWdpbmZbMV07CgkJaWYoaXNzZXQoJGltZ2luZlsibWltZSJdKSkJJGluZm9bIm1pbWUiXSA9ICRpbWdpbmZbIm1pbWUiXTsKCX0KCQoJJGluZm9bIm93bmVyIl0gPSBmaWxlb3duZXIoJGZpbGVwYXRoKTsKCSRpbmZvWyJwZXJtaXNzaW9ucyJdID0gZmlsZXBlcm1zKCRmaWxlcGF0aCk7CgkKCSRpbmZvWyJmaWxlbXRpbWUiXSA9IGZpbGVtdGltZSgkZmlsZXBhdGgpOwoJJGluZm9bIm1vZGlmaWVkIl0gPSBkYXRlKCJZLW0tZCBHOmkiLCAkaW5mb1siZmlsZW10aW1lIl0pOwoJCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/function.plresize.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy8gZnVuY3Rpb24gcGxSZXNpemUoJGZ1bGxwYXRoLCAkbmV3cGF0aCwgJG5ld3dpZHRoLCAkbmV3aGVpZ2h0PWZhbHNlLCAkdHJhbnNwYXJlbmN5PWZhbHNlLCAkY3JvcD1mYWxzZSkgewoJJG5hbWUgPSBzdHJfcmVwbGFjZSgnLy8nLCcvJywkZnVsbHBhdGgpOwoJaWYoIWZpbGVfZXhpc3RzKCRuYW1lKSkJcmV0dXJuIGZhbHNlOwoJJGltYWdlX2luZm9zID0gZ2V0aW1hZ2VzaXplKCRuYW1lKTsKCQoJJGRvcmVzaXplID0gdHJ1ZTsKCWlmKCAkaW1hZ2VfaW5mb3NbMF0gPD0gJG5ld3dpZHRoICYmICgkbmV3aGVpZ2h0ID09IGZhbHNlIHx8ICRpbWFnZV9pbmZvc1sxXSA8PSAkbmV3aGVpZ2h0KSApewoJCSRyZXR1cm4gPSBmYWxzZTsKCX1lbHNlewoJCSRuZXduYW1lID0gKCRuZXdwYXRoID09ICcnPyRmdWxscGF0aDokbmV3cGF0aCk7CgkJJGFyciA9IHNwbGl0KCJcLiIsJG5hbWUpOwoJCSRleHQgPSBzdHJ0b2xvd2VyKCRhcnJbY291bnQoJGFyciktMV0pOwoKCQlpZigkZXh0PT0ianBlZyIgfHwgJGV4dD09ImpwZyIpewoJCQkkaW1nID0gQGltYWdlY3JlYXRlZnJvbWpwZWcoJG5hbWUpOwoJCX0gZWxzZWlmKCRleHQ9PSJwbmciKXsKCQkJJGltZyA9IEBpbWFnZWNyZWF0ZWZyb21wbmcoJG5hbWUpOwoJCX0gZWxzZWlmKCRleHQ9PSJnaWYiKSB7CgkJCSRpbWcgPSBAaW1hZ2VjcmVhdGVmcm9tZ2lmKCRuYW1lKTsKCQl9CgkJaWYoISRpbWcpICAgcmV0dXJuIGZhbHNlOwoKCQkkb2xkX3ggPSBpbWFnZVNYKCRpbWcpOwoJCSRvbGRfeSA9IGltYWdlU1koJGltZyk7CgoJCWlmKCRuZXdoZWlnaHQgJiYgJGNyb3ApewoJCQkvLyBmaW5kIHRoZSB3YW50ZWQgcmF0aW8KCQkJJHdhbnRlZHJhdGlvID0gJG5ld3dpZHRoLyRuZXdoZWlnaHQ7CgkJCSRjdXJyZW50cmF0aW8gPSAkb2xkX3gvJG9sZF95OwoJCQlpZigkY3VycmVudHJhdGlvID4gJHdhbnRlZHJhdGlvKXsKCQkJCS8vIHdpZHRoIGlzIHRvbyBsYXJnZQoJCQkJJGNyb3BfeCA9IChpbnQpICgkb2xkX3kgKiAkd2FudGVkcmF0aW8pOwoJCQkJJGNyb3BfeSA9ICRvbGRfeTsKCQkJCSRpbnRfdyA9IChpbnQpICgoJG9sZF94IC0gJGNyb3BfeCkgLyAyKTsKCQkJCSRpbnRfaCA9IDA7CgkJCX1lbHNlaWYoJGN1cnJlbnRyYXRpbyA8ICR3YW50ZWRyYXRpbyl7CgkJCQkvLyBoZWlnaHQgaXMgdG9vIGxhcmdlCgkJCQkkY3JvcF94ID0gJG9sZF94OwoJCQkJJGNyb3BfeSA9IChpbnQpICgkb2xkX3ggLyAkd2FudGVkcmF0aW8pOwoJCQkJJGludF9oID0gKGludCkgKCgkb2xkX3kgLSAkY3JvcF95KSAvIDIpOwoJCQkJJGludF93ID0gMDsKCQkJfQoJCQlpZigkY3VycmVudHJhdGlvICE9ICR3YW50ZWRyYXRpbyl7CgkJCQkvLyB3ZSBmaXJzdCBjcm9wCgkJCQkkZGltZyA9IEltYWdlQ3JlYXRlVHJ1ZUNvbG9yKCRjcm9wX3gsICRjcm9wX3kpOwoJCQkJaWYoaW1hZ2Vjb3B5cmVzYW1wbGVkKCRkaW1nLCRpbWcsMCwwLCRpbnRfdywkaW50X2gsJGNyb3BfeCwkY3JvcF95LCRjcm9wX3gsJGNyb3BfeSkpewoJCQkJCWltYWdlZGVzdHJveSgkaW1nKTsKCQkJCQkkaW1nID0gJGRpbWc7CgkJCQl9CgkJCX0KCQkJJG9sZF94ID0gJGNyb3BfeDsKCQkJJG9sZF95ID0gJGNyb3BfeTsKCQkJJHRodW1iX2ggPSAkbmV3aGVpZ2h0OwoJCQkkdGh1bWJfdyA9ICRuZXd3aWR0aDsKCQl9ZWxzZXsKCQkJJHJhdGlvID0gJG5ld2hlaWdodD9taW4oJG5ld3dpZHRoIC8gJGltYWdlX2luZm9zWzBdLCAkbmV3aGVpZ2h0IC8gJGltYWdlX2luZm9zWzFdKTooJG5ld3dpZHRoIC8gJGltYWdlX2luZm9zWzBdKTsKCQkJJHRodW1iX2ggPSAkaW1hZ2VfaW5mb3NbMV0gKiAkcmF0aW87CgkJCSR0aHVtYl93ID0gJGltYWdlX2luZm9zWzBdICogJHJhdGlvOwoJCX0KCgkJJG5ld19pbWcgPSBJbWFnZUNyZWF0ZVRydWVDb2xvcigkdGh1bWJfdywgJHRodW1iX2gpOwoJICAgCgkJaWYoJHRyYW5zcGFyZW5jeSkgewoJCQlpZigkZXh0PT0icG5nIikgewoJCQkJaW1hZ2VhbHBoYWJsZW5kaW5nKCRuZXdfaW1nLCBmYWxzZSk7CgkJCQkkY29sb3JUcmFuc3BhcmVudCA9IGltYWdlY29sb3JhbGxvY2F0ZWFscGhhKCRuZXdfaW1nLCAwLCAwLCAwLCAxMjcpOwoJCQkJaW1hZ2VmaWxsKCRuZXdfaW1nLCAwLCAwLCAkY29sb3JUcmFuc3BhcmVudCk7CgkJCQlpbWFnZXNhdmVhbHBoYSgkbmV3X2ltZywgdHJ1ZSk7CgkJCX0gZWxzZWlmKCRleHQ9PSJnaWYiKSB7CgkJCQkkdHJucHJ0X2luZHggPSBpbWFnZWNvbG9ydHJhbnNwYXJlbnQoJGltZyk7CgkJCQlpZiAoJHRybnBydF9pbmR4ID49IDApIHsKCQkJCQkvL2l0cyB0cmFuc3BhcmVudAoJCQkJCSR0cm5wcnRfY29sb3IgPSBpbWFnZWNvbG9yc2ZvcmluZGV4KCRpbWcsICR0cm5wcnRfaW5keCk7CgkJCQkJJHRybnBydF9pbmR4ID0gaW1hZ2Vjb2xvcmFsbG9jYXRlKCRuZXdfaW1nLCAkdHJucHJ0X2NvbG9yWydyZWQnXSwgJHRybnBydF9jb2xvclsnZ3JlZW4nXSwgJHRybnBydF9jb2xvclsnYmx1ZSddKTsKCQkJCQlpbWFnZWZpbGwoJG5ld19pbWcsIDAsIDAsICR0cm5wcnRfaW5keCk7CgkJCQkJaW1hZ2Vjb2xvcnRyYW5zcGFyZW50KCRuZXdfaW1nLCAkdHJucHJ0X2luZHgpOwoJCQkJfQoJCQl9CgkJfSBlbHNlIHsKCQkJSW1hZ2VmaWxsKCRuZXdfaW1nLCAwLCAwLCBpbWFnZWNvbG9yYWxsb2NhdGUoJG5ld19pbWcsIDI1NSwgMjU1LCAyNTUpKTsKCQl9CgkJaW1hZ2Vjb3B5cmVzYW1wbGVkKCRuZXdfaW1nLCAkaW1nLCAwLDAsMCwwLCAkdGh1bWJfdywgJHRodW1iX2gsICRvbGRfeCwgJG9sZF95KTsKCgkJaWYoZmlsZV9leGlzdHMoJG5ld25hbWUpKQlAdW5saW5rKCRuZXduYW1lKTsKCgkJaWYoJGV4dD09ImpwZWciIHx8ICRleHQ9PSJqcGciKXsKCQkJaW1hZ2VqcGVnKCRuZXdfaW1nLCAkbmV3bmFtZSk7CgkJCSRyZXR1cm4gPSB0cnVlOwoJCX0gZWxzZWlmKCRleHQ9PSJwbmciKXsKCQkJaW1hZ2VwbmcoJG5ld19pbWcsICRuZXduYW1lKTsKCQkJJHJldHVybiA9IHRydWU7CgkJfSBlbHNlaWYoJGV4dD09ImdpZiIpIHsKCQkJaW1hZ2VnaWYoJG5ld19pbWcsICRuZXduYW1lKTsKCQkJJHJldHVybiA9IHRydWU7CgkJfQoJCWltYWdlZGVzdHJveSgkbmV3X2ltZyk7CgkJaW1hZ2VkZXN0cm95KCRpbWcpOwoJCWlmKCRyZXR1cm4pICRyZXR1cm4gPSAkbmV3bmFtZTsKCX0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhKAAzAOf9ABMDAB0EATEKAwkkBEYVAC4fAB0lHSAsAD8jAg4zCiosAUEuBRk8BCQ4HyY6FjI6ABw/GRVCEiM+GlwvFTNFAEE/Iz9BH3kzACNOIGY7IVhCBU1GAzdJLzNOLlpGIkNUDHNIDEVRR2NKPF5TAIJHDV5RIEVYNn5KLFpXHGRTL3ZOMXNSFn9OI3RQN4VRAGZVRqtIC2daKDlpLUNnLYlTNXJcIEVnPE1lSJdWCUFsOoJZOVBtB3FeP6hTEmFoI1NtJKdXI1RuQEF2OY9iHFtsW7xWGaBeLJJiMH9nN5ZpAlh0UY1sBpdmSoZ2DIhwYlmEVlaJPYx+IL5tO1uKSH+AQshtKtFrK7txMWiGXtJtH12LUpd9QrN0SsN1G8J4B8R0LMx1Gph9aKp+K7J7M9F0H3SQL8F9C3GMa9d0MnmMW8B9K9J6FcyABc56Q8OBIoaLf+B6Jr+GErmHHKKIc2WgTbKLQ3mXdHmdboGgSn6fXqOSdnCkX4uaeLCTVbaQdI2ajrqYKbmVZbKdVYGpeZGjkOSVLrWddpGpcOKYL6+fhoGwaI2rgMShReaWUoyxbu2YS4i0YoyxduOcSX+3ZnC9XeybROiePt6fWXi9Z4e5bIm6YYC+Yu6jOtysJvmjNvqjQYu/en3GZO2rNZu9fv6kYcOyl9e3P8i0kaC/nPyrWuiyX+uzUrq5ufK2Nv+vWMK6w/q2Rry+u/u2VcK9u7vAwu+5dsG/w7vCt/67Pva8TNnCa+zAXuy/aLjIsvjBQ/TGJ/XEOOTDdu/GS+jJSNTFrtzHisbHzMjJxunKXPLIWv/INfHMOeDGp8vPvu/Hr/zVMcHascjWysbYweDTxNTY2N7Z2Nrezfrgc/3ck/3fgfzdm+zd7P/pbOjnyuXo5Pjm1Oro7ujt39b40+Xz3+3y9f/z0v/6l//x8vf16uT83f313f307O748/v19PX38//0+/D83/P5/Pr3/O7/8vL/7Pr97Pr8+f/87f/7+ff+8/3+5fX/+v799P78//n///3/+yH+EUNyZWF0ZWQgd2l0aCBHSU1QACwAAAAAKAAzAAAI/gD9/ePHz1+/gwjfvev3j+C/hxAjSpz40J8/gv8Q4sOHsN8/fhE3bqRI8t/Bf/we+vtH0J7Ff/zqPfTXsV9Jigf/8YuYr14+exb55fvnr2Y/fzclHvxHkN+/ffny8dsXL96/ff/8Ge2XNOLBfwQhRs3Hzl5EfEb9dYV48B/BfxYtQly3ruk/fAgtrn3YD98/fg/9IeSHjpgePaX03SP4L66/if5I9nvI75+/g+/wffNQo0+fLR6Y6buH7l88fxLx+evnj2K/h/z2+UO4jseWbOayMeqzoJy+e//8xZOI76A/igcjHsQ3rYY5bsuACauD5JS6e//c+YuI7+A/fxQP/kY8eC6RoGvLnv0CJmaLIX333FmMiO+gRYoHH+bj968fvjmCILPML790IsYRhqjDzz/+xOMPRBv5848/FB2Ezz/85PNPP+eUUgMyy/yiTBxjsMCMOuv0A45FD/GzUVwUHYTPP1H9c9A3GjAiTCdxuDEGAc6sg488/Vj0ED8PxUXRQQ9F9RA/xKwgQBJyuIHDBVxM4MQ5HeHzED4P+VOSPfbsM08++7xRAAIgDOECCRf00AYXfojwDz79tIPQRvb84w9J+zzkzj77sFNBMdhoU8sll/TQAxBctPDCOu5shNBG9pBEpj3/9NOOPf+4A0AwvFxyRSOk9ABDD0bo8AI//v+08w9C+EDkzz9kToTPQe20gw8AwewiyReNkFJEETBIocIL6/zDjz3/+HNQUv/w0847/eDTDj4B7OKLJV80QooVx0qhgwjr/MOPPf/4848/G/3jjztk/kPmQ/n8g9A/+ASQjDKIdPEIKWjAYAUQTIhAEDr8xNUPPknNs088/sTzzzoFDKOMKF1U8ggaVljRxglhrIMOQf/E9ZA95DxEJkT2zLNPPP7E8w8/GgzzSyteVJIKGVlYIQUNYTTFj0XxPNSON9TEEssx1Hhjz0P57FOVP//cE4Mpv7RiRiWVkJGFFVLQMAdB6PCzj0XxVDMLK8Ycc4zT1Ljzjzvz7BNP/j/+/HNPCYAAI4oXnLiSRRZoSHHCHOs09Y8/5FAzyyy20GKL08d4Y89D9vxzkDzu1JMCI7nAwkYhnxyOBhATJLLOP/y48w851NgyuS202HJMNe48ZI87/2z0Dj7u3ONBHavAwkYhn8ARshEZfMPPP2RSY4wttszCii3UgOONOxDZ8w8+7ZyDzz/8qJNCILXIYoYonmSBRhVGqHCPPf94cwwt2NsyyzHgiIc/IGIPiGykHfj4Rz70kYgAHGEVosAFLMhghTaQoAX3sMcxYjGL/hmjGu34hz/cMRF3tOMh/NjHPOgBj2/oIAnC8IUowFCFKxghDNM4RiyOMQtbGMMY/uBox0PIARF3uMMeEXEHP/Yxj3TAoxtIWIIwfAGLLnzhCkfgATFuQQtbvMIY4DjIRvzhj3jYIyKbcgc+2rGPeYhDCwygQBOEAQtPrAEMXyBBASzwB1q8YhvvwMc/9mEPfMiDjBRhxz82wg9pYGAPmthBE5Ihi0+QAQxfAAEK0tCAP4DjHfL4Bzvy4Y5+yAMc/qDIPtjRDnzwowGDUIQmyjCCXcjiE2vowhhW4INI3EEC4fiHPf7BjoeAAyH/SKYy/7GPfNjDHdbgwCBAAYkybGAXsnBFF9RQhw38IBOgeAIf9JEPdviDHPLoxzvw0Y9lKnMf4fgHP5phgkEoAhJ4/niALnihijEMYQEPgMQmMEGHGYgDHvuIhz/6IRJ3KpNQ9uCHNRxwB1BkAg8UUEAUgqGBAlAhD5MIRSg2AQUGQIMe+yBjNfixDocmkx3/aAc/6sEBG2gBFJOABB4+cIAPHOIQo5gEJUSqCUUw4AzzmMc+muLSf8TjH+34Rz56MYAcyGAPjlCEIxwRiUgMIhKZwAQlQrGJTEQCCx2QRlTqkY+m9qMf78AHP/IhDQhEYAZCmEEOnvCEHNggB0KAAh0wkYlMROIQdnAAIehBj3w09a3v6Ac+0JGPdKDCBgmAQAcgkAAIDGAAEciBEIQwhSnkYRSLWIQSbjCOfDRVHv14/kc/8IEPgtAjH+OQRi+aEQ1p0CMdvTgDBhIQgRzYIAhBwIId7NCAWyTzuc+Vhz/68Y5+4KNX/yBTMsnED8ZGhR7iQIUSJOAAEwThBjcgggGgC11/xMMf8mjHW/uBj7fiox20bQc6+GFEQiUVHtLgww0GwIEQGIC9z/UHOfzxD3y89R39kIc85ouPdvzDHefohzziQSh+5IMf4xhHL94QCwQnMx7/8Mc/3IGPt8qDjFVhRzLdgY93vKMf/yBjP/DRjn8Qyh0mhq477PEPe7z1H1Uh4z8IZQ982Pgd8vBHPPohj360wx77+Ec7gszl55Lpue7ARz/kMd9+QJeM/uiyKInJ9I9NJdMdyZRHP/BhDwSjWc3s3dQ/NkWmf9hDHv1ohz0QjGYTBwQAOw==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/instantsearch.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZnVuY3Rpb24gY3RsbW1fc2VhcmNoKHdoYXQsaW53aGF0KXsKCXZhciBkZXN0aW5hdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlud2hhdCk7CglpZighZGVzdGluYXRpb24pIHJldHVybjsKCXZhciBldmVuID0gZmFsc2U7Cgl2YXIgdGhlcm93cyA9IGRlc3RpbmF0aW9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOwoJZm9yKGk9MDtpPHRoZXJvd3MubGVuZ3RoO2krKyl7CgkJdmFyIHRoZWNsYXNzID0gKGV2ZW4/InJvdzIiOiJyb3cxIik7CgkJdmFyIG5ld3N0eWxlID0gIm5vbmUiOwoJCXZhciB0aGVjb2x1bW5zID0gdGhlcm93c1tpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKCQlmb3Ioaj0wO2o8dGhlY29sdW1ucy5sZW5ndGg7aisrKXsKCQkJaWYodGhlY29sdW1uc1tqXS5jbGFzc05hbWUgIT0gImN0bG1tX25vc2VhcmNoIil7CgkJCQl2YXIgdG1wYSA9IHRoZWNvbHVtbnNbal0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTsKCQkJCWlmKHRtcGEgJiYgdG1wYS5pbm5lckhUTUwudG9Mb3dlckNhc2UoKS5pbmRleE9mKHdoYXQudG9Mb3dlckNhc2UoKSkgPj0gMCkJbmV3c3R5bGUgPSAidGFibGUtcm93IjsKCQkJCWlmKCF0bXBhICYmIHRoZWNvbHVtbnNbal0uaW5uZXJIVE1MLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih3aGF0LnRvTG93ZXJDYXNlKCkpID49IDApCQluZXdzdHlsZSA9ICJ0YWJsZS1yb3ciOwoJCQl9CgkJfQoJCXRoZXJvd3NbaV0uc3R5bGUuZGlzcGxheSA9IG5ld3N0eWxlOwoJCWlmKG5ld3N0eWxlICE9ICJub25lIil7CgkJCXRoZXJvd3NbaV0uY2xhc3NOYW1lID0gdGhlY2xhc3M7CgkJCXRoZXJvd3NbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbigpeyB0aGlzLmNsYXNzTmFtZSArPSAiaG92ZXIiOyB9OwoJCQl0aGVyb3dzW2ldLm9ubW91c2VvdXQgPSBmdW5jdGlvbigpeyB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnN1YnN0cigwLDQpOyB9OwoJCQlldmVuID0gIWV2ZW47CgkJfQoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/instantsort.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZnVuY3Rpb24gY3RsbW1fc29ydFJvd3ModGFibGVpZCxjb2xpbmRleCxkZXNjLG51bWVyaWMpewoJLy8gdGFibGVpZCBpcyB0aGUgaWQgb2YgdGhlIHRhYmxlIHRvIHNvcnQKCS8vIGNvbGluZGV4IGlzIGFnYWluc3Qgd2hpY2ggY29sdW1uIHRvIHNvcnQgKDAtPiBmaXJzdCwgMS0+IHNlY29uZC4uLikKCS8vIGRlc2MgbWFrZXMgdGhlIHNvcnQgZGVzY2VuZGluZwoJLy8gbnVtZXJpYyBtYWtlcyB0aGUgc29ydCBudW1lcmljCglpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVpZCkpCXJldHVybiBmYWxzZTsKCXZhciB0aGVyb3dzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVpZCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRyIik7CglpZighdGhlcm93c1swXSB8fCAhdGhlcm93c1swXS5jZWxsc1tjb2xpbmRleF0pCXJldHVybiBmYWxzZTsKCQoJdmFyIHNvcnRlZCA9IG5ldyBBcnJheSgpOwoJZm9yKGk9MDsgaTx0aGVyb3dzLmxlbmd0aDsgaSsrKXsKCQl2YXIgdGhlYXMgPSB0aGVyb3dzW2ldLmNlbGxzW2NvbGluZGV4XS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpOwoJCWlmKHRoZWFzWzBdKXsKCQkJdmFyIHNvcnRkYXRhID0gdGhlYXNbMF0uaW5uZXJIVE1MOwoJCX1lbHNlewoJCQl2YXIgc29ydGRhdGEgPSB0aGVyb3dzW2ldLmNlbGxzW2NvbGluZGV4XS5pbm5lckhUTUw7CgkJfQoJCXNvcnRlZC5wdXNoKFtzb3J0ZGF0YSwgdGhlcm93c1tpXV0pOwoJCXRoZXJvd3NbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGVyb3dzW2ldKTsKCQlpLS07Cgl9CglpZihudW1lcmljKXsKCQlpZihkZXNjKXsKCQkJc29ydGVkLnNvcnQoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGJbMF0tYVswXTsgfSk7CgkJfWVsc2V7CgkJCXNvcnRlZC5zb3J0KGZ1bmN0aW9uKGEsYil7IHJldHVybiBhWzBdLWJbMF07IH0pOwoJCX0KCX1lbHNlewoJCWlmKGRlc2MpewoJCQlzb3J0ZWQuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYVswXS50b0xvd2VyQ2FzZSgpIDwgYlswXS50b0xvd2VyQ2FzZSgpOyB9KTsKCQl9ZWxzZXsKCQkJc29ydGVkLnNvcnQoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGFbMF0udG9Mb3dlckNhc2UoKSA+IGJbMF0udG9Mb3dlckNhc2UoKTsgfSk7CgkJfQoJfQoKCXZhciB0YWJsZWJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZWlkKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXTsKCXZhciBldmVuID0gdHJ1ZTsKCWZvcihpPTA7IGk8c29ydGVkLmxlbmd0aDsgaSsrKXsKCQlldmVuID0gIWV2ZW47CgkJdmFyIHRoZWNsYXNzID0gKGV2ZW4/InJvdzIiOiJyb3cxIik7CgkJc29ydGVkW2ldWzFdLmNsYXNzTmFtZSA9IHRoZWNsYXNzOwoJCXNvcnRlZFtpXVsxXS5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uKCl7IHRoaXMuY2xhc3NOYW1lICs9ICJob3ZlciI7IH07CgkJc29ydGVkW2ldWzFdLm9ubW91c2VvdXQgPSBmdW5jdGlvbigpeyB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lLnN1YnN0cigwLDQpOyB9OwoJCXRhYmxlYm9keS5hcHBlbmRDaGlsZChzb3J0ZWRbaV1bMV0pOwoJfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCgkkbGFuZ1siZnJpZW5kbHluYW1lIl0gPSAiU3RyZWV0dmlldyI7DQoJJGxhbmdbIm1vZGRlc2NyaXB0aW9uIl0gPSAiR29vZ2xlIFN0cmVldHZpZXcgbWFkZSBzaW1wbGUiOw0KCSRsYW5nWyJhZG1pbmRlc2NyaXB0aW9uIl0gPSAiR29vZ2xlIFN0cmVldHZpZXcgbWFkZSBzaW1wbGUiOw0KDQoJJGxhbmdbInBhZ2VtZW51ZGVsaW1pdGVyIl0gPSAiJm5ic3A7JiMxMjQ7Jm5ic3A7IjsNCgkkbGFuZ1sicGFnZW1lbnVvdmVyZmxvdyJdID0gIiZuYnNwOy4uLiZuYnNwOyI7DQoJDQovLyBzdHJpbmdzIGZvciBzdHJlZXR2aWV3DQoJJGxhbmdbInN0cmVldHZpZXciXSA9ICJTdHJlZXR2aWV3IjsNCgkkbGFuZ1sic3RyZWV0dmlld19wbHVyYWwiXSA9ICJTdHJlZXR2aWV3cyI7DQoJJGxhbmdbImFkZF9zdHJlZXR2aWV3Il0gPSAiQWRkIFN0cmVldHZpZXciOw0KCSRsYW5nWyJlZGl0X3N0cmVldHZpZXciXSA9ICJFZGl0IFN0cmVldHZpZXciOw0KCSRsYW5nWyJmaWx0ZXJieV9zdHJlZXR2aWV3Il0gPSAiRmlsdGVyIGJ5IFN0cmVldHZpZXciOw0KCSRsYW5nWyJzdHJlZXR2aWV3X2xhdGl0dWRlIl0gPSAiTGF0aXR1ZGUiOw0KCSRsYW5nWyJzdHJlZXR2aWV3X2xvbmdpdHVkZSJdID0gIkxvbmdpdHVkZSI7DQoJJGxhbmdbInN0cmVldHZpZXdfeWF3Il0gPSAiWUFXIjsNCgkkbGFuZ1sic3RyZWV0dmlld19wb3YiXSA9ICJQaXRjaCI7DQoJJGxhbmdbInN0cmVldHZpZXdfem9vbSJdID0gIlpvb20iOw0KCSRsYW5nWyJtYXAiXSA9ICJMb29rdXAgQ29vcmRpbmF0ZXMiOw0KCSRsYW5nWyJpbnNlcnRfdGFnIl0gPSAiSW5zZXJ0IFRhZyBmb3Igc2hvd2luZyBzaW5nbGUgc3RyZWV0dmlldyI7DQoJJGxhbmdbInByb21wdF9kZWxldGVzdHJlZXR2aWV3Il0gPSAiWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhpcyBTdHJlZXR2aWV3ICglcyk/IERvIHlvdSB3aXNoIHRvIGNvbnRpbnVlPyI7DQoJJGxhbmdbInRlbXBsYXRlaGVscCJdID0gJzxkaXY+PGgzIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbmNsaWNrPSJjdGxtbV9kaXNwbGF5dG9nZ2xlKHRoaXMpOyI+Jmd0OyBTbWFydHkgdmFyaWFibGVzIGZvciBsaXN0IHRlbXBsYXRlIG9mOiBzdHJlZXR2aWV3PC9oMz48ZGl2IGNsYXNzPSJ0cGx2YXJzX2hpZGUiPjx1bD4NCgk8bGk+JGxldmVsdGl0bGU8L2xpPg0KCTxsaT4kcGFyZW50b2JqIChpZiBwYXJlbnQgaXMgc3BlY2lmaWVkKTwvbGk+DQoJPGxpPiRpdGVtbGlzdCAoYXJyYXkgb2YgaXRlbXMpPC9saT4NCgk8bGk+JGl0ZW0tJmd0O2lzX3NlbGVjdGVkPC9saT4NCgk8bGk+JGl0ZW0tJmd0O25hbWU8L2xpPg0KCTxsaT4kaXRlbS0mZ3Q7YWxpYXM8L2xpPg0KCTxsaT4kaXRlbS0mZ3Q7ZGV0YWlsbGluazwvbGk+DQoJPGxpPiRpdGVtLSZndDtkZXRhaWx1cmw8L2xpPg0KCTxsaT4kaXRlbS0mZ3Q7bGF0aXR1ZGU8L2xpPg0KCTxsaT4kaXRlbS0mZ3Q7bG9uZ2l0dWRlPC9saT4NCgk8bGk+JGl0ZW0tJmd0O3lhdzwvbGk+DQoJPGxpPiRpdGVtLSZndDtwb3Y8L2xpPg0KCTxsaT4kaXRlbS0mZ3Q7em9vbTwvbGk+DQoJPGxpPiRpdGVtLSZndDtpc2RlZmF1bHQ8L2xpPg0KCTxsaT4kaXRlbS0mZ3Q7ZGF0ZV9tb2RpZmllZDwvbGk+DQoJPGxpPiRpdGVtLSZndDtkYXRlX2NyZWF0ZWQ8L2xpPg0KCTwvdWw+PGJyLz48YnIvPjwvZGl2PjwvZGl2PjxkaXY+PGgzIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbmNsaWNrPSJjdGxtbV9kaXNwbGF5dG9nZ2xlKHRoaXMpOyI+Jmd0OyBTbWFydHkgdmFyaWFibGVzIGZvciB0aGUgZGV0YWlsIHRlbXBsYXRlPC9oMz48ZGl2IGNsYXNzPSJ0cGx2YXJzX2hpZGUiPjx1bD4NCgk8bGk+JGxldmVsdGl0bGU8L2xpPg0KCTxsaT4kcHJldmlvdXNfaXRlbSAoaWYgbG9hZGVkKTwvbGk+DQoJPGxpPiRuZXh0X2l0ZW0gKGlmIGxvYWRlZCk8L2xpPg0KCTxsaT4kaXRlbS0mZ3Q7bmFtZTwvbGk+DQoJPGxpPiRpdGVtLSZndDthbGlhczwvbGk+DQoJPGxpPiRpdGVtLSZndDtsYXRpdHVkZTwvbGk+DQoJPGxpPiRpdGVtLSZndDtsb25naXR1ZGU8L2xpPg0KCTxsaT4kaXRlbS0mZ3Q7eWF3PC9saT4NCgk8bGk+JGl0ZW0tJmd0O3BvdjwvbGk+DQoJPGxpPiRpdGVtLSZndDt6b29tPC9saT4NCgk8bGk+JGl0ZW0tJmd0O2lzZGVmYXVsdDwvbGk+DQoJPGxpPiRpdGVtLSZndDtkYXRlX21vZGlmaWVkPC9saT4NCgk8bGk+JGl0ZW0tJmd0O2RhdGVfY3JlYXRlZDwvbGk+DQoJPGxpPiRsYWJlbHMtPi4uLjwvbGk+DQoJPC91bD48YnIvPjxwPkluIHRoZSBmaW5hbCBsZXZlbCBkZXRhaWwgdGVtcGxhdGUsIHVzZSB0aGUgb2JqZWN0ICRsYWJlbHMgdG8gcHJpbnQgbGFuZ3VhZ2Utc2Vuc2libGUgZmllbGQgbGFiZWxzICgkbGFiZWxzLT5maWVsZG5hbWUpLjwvcD48cD5Zb3UgbWF5IHJlYWNoIHRoZSBwYXJlbnQgb2JqZWN0cyB1c2luZyAkaXRlbS0+cGFyZW50X29iamVjdC0+cGFyZW50X29iamVjdC0+Li4uIGFuZCBzbyBvbi48L3A+PGJyLz48L2Rpdj48L2Rpdj4NCjxkaXY+PGgzIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbmNsaWNrPSJjdGxtbV9kaXNwbGF5dG9nZ2xlKHRoaXMpOyI+Jmd0OyBGaWxlIE9iamVjdDwvaDM+PGRpdiBjbGFzcz0idHBsdmFyc19oaWRlIj4NCjx1bD4NCjxsaT4kZmlsZS0mZ3Q7ZmlsZXBhdGggKHJlbGF0aXZlKTwvbGk+DQo8bGk+JGZpbGUtJmd0O2V4dDwvbGk+DQo8bGk+JGZpbGUtJmd0O3VybCAoYWJzb2x1dGUgdXJsKTwvbGk+DQo8bGk+JGZpbGUtJmd0O3NpemUgKHNpemUgaW4gYnl0ZXMpPC9saT4NCjxsaT4kZmlsZS0mZ3Q7c2l6ZV93Zm9ybWF0IChmb3JtYXRlZCBzaXplKTwvbGk+DQo8bGk+JGZpbGUtJmd0O2ltYWdlc2l6ZSAoZm9yIGltYWdlcyBvbmx5KTwvbGk+DQo8bGk+JGZpbGUtJmd0O3dpZHRoIChmb3IgaW1hZ2VzIG9ubHkpPC9saT4NCjxsaT4kZmlsZS0mZ3Q7aGVpZ2h0IChmb3IgaW1hZ2VzIG9ubHkpPC9saT4NCjxsaT4kZmlsZS0mZ3Q7aW1hZ2UgKGltYWdlIHRhZzsgZm9yIGltYWdlcyBvbmx5KTwvbGk+DQo8bGk+JGZpbGUtJmd0O3RodW1ibmFpbCAodGh1bWJuYWlsIHVybCwgaWYgYXBwbGljYWJsZSk8L2xpPg0KPGxpPiRmaWxlLSZndDtmaWxlbXRpbWUgKGxhc3QgbW9kaWZpZWQsIHVuaXggdGltZSk8L2xpPg0KPGxpPiRmaWxlLSZndDttb2RpZmllZCAobGFzdCBtb2RpZmllZCwgZm9ybWF0ZWQgdGltZSk8L2xpPg0KPC91bD48YnIvPjxici8+PC9kaXY+PC9kaXY+DQo8ZGl2PjxoMyBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25jbGljaz0iY3RsbW1fZGlzcGxheXRvZ2dsZSh0aGlzKTsiPiZndDsgQnJlYWRjcnVtYnM8L2gzPjxkaXYgY2xhc3M9InRwbHZhcnNfaGlkZSI+DQoJCQkJPHA+V2hlbiB5b3UgYXJlIGluIGEgbW9kdWxlIHRlbXBsYXRlLCB5b3UgbWF5IGNhbGwgdGhlIGJyZWFkY3J1bWJzIHVzaW5nIHRoZSB7c3RyZWV0dmlld19icmVhZGNydW1ic30gdGFnLiBZb3UgbWF5IHVzZSB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBjbXMgY29yZSBicmVhZGNydW1icyB0YWcgKGluaXRpYWwsIGRlbGltaXRlciwgY2xhc3NpZCwgY3VycmVudGNsYXNzaWQpLCBhcyB3ZWxsIGFzIHRoZSAic3RhcnRsZXZlbCIgcGFyYW1ldGVyLjxici8+DQoJCQkJT3V0c2lkZSBtb2R1bGUgdGVtcGxhdGVzLCBhbnl3aGVyZSBvbiB0aGUgcGFnZSwgeW91IG1heSBjYWxsIHRoZSBicmVhZGNydW1icyBhY3Rpb24ge2Ntc19tb2R1bGUgbW9kdWxlPSJzdHJlZXR2aWV3IiBhY3Rpb249ImJyZWFkY3J1bWJzIn0sIG9uY2UgYWdhaW4gdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVycy48L3A+PC9kaXY+PC9kaXY+JzsNCg0KLy8gRm9yIGZpbGUgZmllbGRzDQokbGFuZ1siUmVtb3ZlIl0gPSAiUmVtb3ZlIjsNCiRsYW5nWyJkZWxldGUiXSA9ICJEZWxldGUiOw0KJGxhbmdbImJyb3dzZWZpbGVzdGl0bGUiXSA9ICJVcGxvYWQgYSBuZXcgZmlsZSBvciBzZWxlY3QgYSBmaWxlIGJlbG93LiI7DQokbGFuZ1sic2hvd2luZ2RpciJdID0gIlNob3dpbmcgZGlyZWN0b3J5IjsNCiRsYW5nWyJicm93c2VmaWxlc3Jlc2l6ZSJdID0gIlRoZSBwaWN0dXJlIHdpbGwgYmUgYXV0b21hdGljYWxseSByZXNpemVkIGZvciB0aGUgbW9kdWxlLiI7DQokbGFuZ1siYnJvd3NlZmlsZWN1cnJlbnRwYXRoIl0gPSAiQ3VycmVudGx5IHNlZWluZyBmaWxlcyBpbiA6ICI7DQokbGFuZ1sicGFyZW50ZGlyIl0gPSAiUGFyZW50IERpcmVjdG9yeSI7DQokbGFuZ1siYWRkYWZpbGUiXSA9ICJBZGQgZmlsZShzKSI7DQokbGFuZ1sic3VibWl0dGluZ19maWxlIl0gPSAiUGxlYXNlIHdhaXQgd2hpbGUgdGhlIGZpbGUgaXMgYmVpbmcgdXBsb2FkZWQuLi4iOw0KJGxhbmdbImZpbGVuYW1lIl0gPSAiRmlsZW5hbWUiOw0KJGxhbmdbImltYWdlc2l6ZSJdID0gIkltYWdlIHNpemUiOw0KJGxhbmdbImZpbGVleHQiXSA9ICJFeHQiOw0KJGxhbmdbImZpbGVzaXplIl0gPSAiRmlsZSBzaXplIjsNCiRsYW5nWyJsYXN0bW9kIl0gPSAiTGFzdCBtb2RpZmllZCI7DQokbGFuZ1siZmlsZW93bmVyIl0gPSAiT3duZXIiOw0KJGxhbmdbImZpbGVwZXJtcyJdID0gIlBlcm1pc3Npb25zIjsNCiRsYW5nWyJ2aWV3YWxsaW1hZ2VzIl0gPSAiVmlldyBhbGwgaW1hZ2VzIjsNCiRsYW5nWyJwb3N0bWF4c2l6ZSJdID0gIk5vdGljZTogdGhlIHBvc3QgbWF4IHNpemUgaXMgIjsNCiRsYW5nWyJhZGRmaWxlaW5wdXQiXSA9ICJBZGQgYW5vdGhlciBmaWxlIjsNCiRsYW5nWyJ6aXBmaWxlbm90aWNlIl0gPSAiVGhlIGZpbGVzIHNob3VsZCBiZSBpbiB0aGUgcm9vdCBvZiB0aGUgYXJjaGl2ZS4iOw0KJGxhbmdbInVwbG9hZHppcGZpbGUiXSA9ICJVcGxvYWQgemlwIGFyY2hpdmUiOw0KDQovLyBzdHJpbmdzIGZvciBnZW5lcmFsIGZpZWxkcw0KJGxhbmdbImlkIl0gPSAiaWQiOw0KJGxhbmdbIm5hbWUiXSA9ICJOYW1lIjsNCiRsYW5nWyJhbGlhcyJdID0gIkFsaWFzIjsNCiRsYW5nWyJpc2RlZmF1bHQiXSA9ICJJcyBkZWZhdWx0PyI7DQokbGFuZ1siYWN0aXZlIl0gPSAiQWN0aXZlIjsNCiRsYW5nWyJwYXJlbnQiXSA9ICJQYXJlbnQiOw0KJGxhbmdbInN1Ym1pdCJdID0gIlN1Ym1pdCI7DQokbGFuZ1siY2FuY2VsIl0gPSAiQ2FuY2VsIjsNCiRsYW5nWyJuYmNoaWxkcmVuIl0gPSAiTmIgb2YgaXRlbXMiOw0KJGxhbmdbImRhdGVfbW9kaWZpZWQiXSA9ICJMYXN0IG1vZGlmaWNhdGlvbiI7DQokbGFuZ1siZGF0ZV9jcmVhdGVkIl0gPSAiQ3JlYXRpb24iOw0KCQ0KLy8gR0VORVJBTA0KJGxhbmdbInBhZ2VzIl0gPSAiUGFnZXM6ICI7DQokbGFuZ1sibmV4dHBhZ2UiXSA9ICJOZXh0IHBhZ2UiOw0KJGxhbmdbInByZXZpb3VzcGFnZSJdID0gIlByZXZpb3VzIHBhZ2UiOw0KJGxhbmdbImFjdGl2YXRlIl0gPSAiQWN0aXZhdGUiOw0KJGxhbmdbInVuYWN0aXZhdGUiXSA9ICJUdXJuIG9mZiI7DQokbGFuZ1sic2VhcmNodGhpc3RhYmxlIl0gPSAiU2VhcmNoIHRoaXMgdGFibGUgZm9yOiI7DQokbGFuZ1sicmVzZXRvcmRlciJdID0gIlJlc2V0IG9yZGVyIjsNCiRsYW5nWyJZZXMiXSA9ICJZZXMiOw0KJGxhbmdbIk5vIl0gPSAiTm8iOw0KJGxhbmdbIkFjdGlvbnMiXSA9ICJBY3Rpb25zIjsNCiRsYW5nWyJyZW9yZGVyIl0gPSAiUmVvcmRlciI7DQokbGFuZ1sibGlzdHRlbXBsYXRlIl0gPSAiTGlzdCB0ZW1wbGF0ZSBmb3IiOw0KJGxhbmdbInRlbXBsYXRlcyJdID0gIlRlbXBsYXRlcyI7DQokbGFuZ1sidGVtcGxhdGUiXSA9ICJUZW1wbGF0ZSI7DQokbGFuZ1siZGVmYXVsdHRlbXBsYXRlcyJdID0gIkRlZmF1bHQgdGVtcGxhdGVzIjsNCiRsYW5nWyJ0ZW1wbGF0ZXZhcnMiXSA9ICJUZW1wbGF0ZSB2YXJpYWJsZXMiOw0KJGxhbmdbImVkaXR0ZW1wbGF0ZSJdID0gIkVkaXQgdGVtcGxhdGUiOw0KJGxhbmdbImRlZnRlbXBsYXRlZm9yIl0gPSAiRGVmYXVsdCBsaXN0IHRlbXBsYXRlIGZvciBsZXZlbCAiOw0KJGxhbmdbImRlZmRldGFpbHRlbXBsYXRlIl0gPSAiIjsNCiRsYW5nWyJkZWZzZWFyY2hyZXN1bHRzdGVtcGxhdGUiXSA9ICJEZWZhdWx0IHRlbXBsYXRlIGZvciBzZWFyY2ggcmVzdWx0cyI7DQokbGFuZ1siZGVmZW1wdHl0ZW1wbGF0ZSJdID0gIlRlbXBsYXRlIGZvciBlbXB0eSByZXN1bHQgc2V0cyI7DQokbGFuZ1sidXNlbGV2ZWxsaXN0dHBsIl0gPSAiVXNlIHRoZSBsaXN0IHRlbXBsYXRlIG9mIHRoZSBhcHByb3ByaWF0ZSBsZXZlbCI7DQokbGFuZ1siYWRkdGVtcGxhdGUiXSA9ICJBZGQgdGVtcGxhdGUiOw0KJGxhbmdbImZpbHRlcmJ5Il0gPSAiRmlsdGVyIGJ5IjsNCiRsYW5nWyJzaG93aW5nb25seSJdID0gIkZpbHRlcjogIjsNCiRsYW5nWyJzaG93YWxsIl0gPSAiU2hvdyBhbGwgKG5vIGZpbHRlcikiOw0KJGxhbmdbImZpZWxkb3B0aW9ucyJdID0gIkZpZWxkIG9wdGlvbnMiOw0KJGxhbmdbImFkZG9wdGlvbiJdID0gIkFkZCBhbiBvcHRpb24iOw0KJGxhbmdbIm1vZGlmeWFub3B0aW9uIl0gPSAiTW9kaWZ5IGFuIG9wdGlvbiI7DQokbGFuZ1sibWVzc2FnZV9kZWxldGVkIl0gPSAiRWxlbWVudCBkZWxldGVkIjsNCiRsYW5nWyJtZXNzYWdlX21vZGlmaWVkIl0gPSAiTW9kaWZpY2F0aW9uIHNhdmVkIjsNCiRsYW5nWyJ3YXJuaW5nX3RhYiJdID0gIk5vdGljZTogU2F2ZSBjaGFuZ2VzIGluIG90aGVyIHRhYnMgYmVmb3JlIHdvcmtpbmcgaW4gdGhpcyBvbmUuLi4iOw0KJGxhbmdbImVycm9yX21pc3NnaW52YWx1ZSJdID0gIk9uZSBvciBtb3JlIG5lY2Vzc2FyeSB2YWx1ZXMgaGF2ZSBub3QgYmVlbiBlbnRlcmVkLiI7DQokbGFuZ1siZXJyb3JfYWxyZWFkeWV4aXN0cyJdID0gIlRoZXJlIGlzIGFscmVhZHkgYW4gZWxlbWVudCBiZWFyaW5nIHRoYXQgbmFtZS4iOw0KJGxhbmdbImVycm9yX2RhdGUiXSA9ICJUaGUgZGF0ZSB5b3UgaGF2ZSBlbnRlcmVkIGlzIGludmFsaWQuIjsNCiRsYW5nWyJlcnJvcl9ub3BhcmVudCJdID0gIk5vIHBhcmVudCBpcyBkZWZpbmVkISI7DQokbGFuZ1siZXJyb3Jfbm90Zm91bmQiXSA9ICJUaGUgaXRlbSBjb3VsZCBub3QgYmUgZm91bmQuIjsNCiRsYW5nWyJlcnJvcl9ub2l0ZW1mb3VuZCJdID0gIk5vIGl0ZW0gZm91bmQuIjsNCiRsYW5nWyJlcnJvcl9kZW5pZWQiXSA9ICJQZXJtaXNzaW9uIGRlbmllZCI7DQokbGFuZ1siZXJyb3Jfd3JvbmdxdWVyeSJdID0gIkludmFsaWQgcXVlcnkuIjsNCiRsYW5nWyJlcnJvcl9mZWFkZGRlbmllZCJdID0gIllvdSBkbyBub3QgaGF2ZSBzdWZmaWNpZW50IGFjY2VzcyB0byBjb250aW51ZS4iOw0KJGxhbmdbImVycm9yX3dyb25nZmlsZXR5cGUiXSA9ICJUaGlzIHR5cGUgb2YgZmlsZSBpcyBub3QgYWxsb3dlZCBoZXJlLiI7DQokbGFuZ1siZXJyb3JfY2FwdGNoYSJdID0gIlRoZSB0ZXh0IGdpdmVuIGRvZXMgbm90IG1hdGNoIHRoZSBjYXB0Y2hhIGltYWdlLiI7DQokbGFuZ1siZXJyb3JfZmlsZXRvb2JpZyJdID0gIlRoZSBmaWxlIGlzIHRvIGJpZyB0byBiZSB1cGxvYWRlZCBoZXJlLiI7DQokbGFuZ1siZ2l2ZW5lcnJvciJdID0gIkVycm9yOiAiOw0KJGxhbmdbImZpbmFsdGVtcGxhdGUiXSA9ICJEaXNwbGF5IHRlbXBsYXRlIGZvciBmaW5hbCBsZXZlbCAoc3RyZWV0dmlldykiOw0KJGxhbmdbInByb21wdF9kZWxldGVvcHRpb24iXSA9ICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgb3B0aW9uPyI7DQokbGFuZ1sicHJvbXB0X2dlbmVyYWxkZWxldGUiXSA9ICJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXM/IjsNCiRsYW5nWyJwcm9tcHRfY2FwdGNoYSJdID0gIkVudGVyIHRoZSB0ZXh0IGZyb20gdGhlIGltYWdlLiI7DQokbGFuZ1sicXVlcmllcyJdID0gIlF1ZXJpZXMiOw0KJGxhbmdbInF1ZXJ5Il0gPSAiUXVlcnkiOw0KJGxhbmdbInJlc3VsdHMiXSA9ICJSZXN1bHRzIjsNCiRsYW5nWyJjcmVhdGVxdWVyeSJdID0gIkNyZWF0ZSBhIG5ldyBxdWVyeSI7DQokbGFuZ1sicHJvbXB0X3F1ZXJ5Il0gPSAiQ3JlYXRlIGEgcXVlcnkgZm9yIHdoaWNoIGxldmVsPyI7DQokbGFuZ1sib3JkZXJieWZpZWxkIl0gPSAiT3JkZXIgYnkiOw0KJGxhbmdbImRhdGVfbW9kaWZpZWQiXSA9ICJEYXRlIG1vZGlmaWVkIjsNCiRsYW5nWyJmcm9udGVuZF9zdWJtaXQiXSA9ICJTdWJtaXQiOw0KDQoNCi8vIEJSRUFEQ1JVTUJTIDoNCiRsYW5nWyJ5b3VhcmVoZXJlIl0gPSAiWW91IGFyZSBoZXJlOiAiOw0KJGxhbmdbImJyZWFkY3J1bWJzX2RlbGltaXRlciJdID0gIiAmZ3Q7ICI7DQoNCi8vIFNFQVJDSCA6DQokbGFuZ1sic2VhcmNodGl0bGUiXSA9ICJTZWFyY2giOw0KJGxhbmdbInNlYXJjaGFnYWluIl0gPSAiRG8gYW5vdGhlciBzZWFyY2giOw0KJGxhbmdbInNlYXJjaGJ0biJdID0gIlNlYXJjaCEiOw0KJGxhbmdbImNvbnRhaW5zIl0gPSAiQ29udGFpbnMiOw0KJGxhbmdbImlzZXhhY3RseSJdID0gIklzIGV4YWN0bHkiOw0KJGxhbmdbImlzbm90Il0gPSAiSXMgbm90IjsNCiRsYW5nWyJpc2hpZ2hlcnRoYW4iXSA9ICJJcyBoaWdoZXIgdGhhbiI7DQokbGFuZ1siaXNsb3dlcnRoYW4iXSA9ICJJcyBsb3dlciB0aGFuIjsNCiRsYW5nWyJpc2FmdGVyIl0gPSAiSXMgYWZ0ZXIiOw0KJGxhbmdbImlzYmVmb3JlIl0gPSAiSXMgYmVmb3JlIjsNCiRsYW5nWyJpc2JldHdlZW4iXSA9ICJJcyBiZXR3ZWVuIjsNCiRsYW5nWyJ0aGlzYW5kdGhpcyJdID0gImFuZCI7DQokbGFuZ1sicXVlcnl1c2UiXSA9ICJOb3QgdXNlZCI7DQokbGFuZ1sicXVlcnluYW1lIl0gPSAiUXVlcnkgbmFtZSI7DQoNCi8vIElNUE9SVCAvIEVYUE9SVA0KJGxhbmdbImV4cG9ydF90aXRsZSJdID0gIkV4cG9ydCBpdGVtcyB0byB4bWwiOw0KJGxhbmdbImV4cG9ydHdoaWNobGV2ZWxzIl0gPSAiV2hpY2ggdGFibGVzIHNob3VsZCBiZSBleHBvcnRlZD8iOw0KJGxhbmdbImV4cG9ydF90ZW1wbGF0ZXMiXSA9ICJFeHBvcnQgdGVtcGxhdGVzIHRvbz8iOw0KJGxhbmdbImltcG9ydF90aXRsZSJdID0gIkltcG9ydCBmcm9tIHhtbCBmaWxlIjsNCiRsYW5nWyJpbXBvcnRfZmlsZXByb21wdCJdID0gIlNlbGVjdCB4bWwgZmlsZSBmcm9tIHdoaWNoIHRvIGltcG9ydC4iOw0KJGxhbmdbImltcG9ydF9kb25lIl0gPSAiSW1wb3J0IGRvbmUuICVzIHJlY29yZHMgd2hlcmUgaW1wb3J0ZWQuIjsNCiRsYW5nWyJpbXBvcnRfZW50cmllcyJdID0gIlRoZSBmaWxlIGNvbnRhaW5zICVzIHJlY29yZHMuIjsNCiRsYW5nWyJpbXBvcnRfZGVsZXRlIl0gPSAiRGVsZXRlIHRhYmxlIGNvbnRlbnQgYmVmb3JlIGltcG9ydGluZz8iOw0KJGxhbmdbImltcG9ydHdoaWNobGV2ZWxzIl0gPSAiV2hpY2ggdGFibGVzIHNob3VsZCBiZSBpbXBvcnRlZD8iOw0KJGxhbmdbImltcG9ydF90ZW1wbGF0ZXMiXSA9ICJJbXBvcnQgdGVtcGxhdGVzIHRvbz8iOw0KJGxhbmdbImNvdWxkbm90aW1wb3J0Il0gPSAiVGhlcmUgd2FzIGFuIGVycm9yIGltcG9ydGluZyByZWNvcmRzIGZvcjogIjsNCiRsYW5nWyJlcnJvcl9pbnZhbGlkeG1sIl0gPSAiVGhlIGZpbGUgeW91IHByb3ZpZGVkIGlzIG5vdCBhIHZhbGlkIHhtbCBleHBvcnQgZm9yIHRoaXMgbW9kdWxlLiI7DQoNCi8vIE1PRFVMRSBJTlRFUkFDVElPTg0KJGxhbmdbInBvc3RpbnN0YWxsIl0gPSAiTW9kdWxlIHN1Y2Nlc3NmdWxseSBhZGRlZC48YnIvPklmIHRoaXMgbW9kdWxlIGhhcyBhbnkgZmlsZSBmaWVsZHMsIHBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3JpZXMgZXhpc3QgaW4gdGhlIHVwbG9hZHMgZm9sZGVyLiBEb24ndCBmb3JnZXQgdG8gZ2l2ZSB5b3VyIHVzZXJzIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGlzIG1vZHVsZSEiOw0KJGxhbmdbInBvc3R1bmluc3RhbGwiXSA9ICJNb2R1bGUgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuIjsNCiRsYW5nWyJyZWFsbHlfdW5pbnN0YWxsIl0gPSAiQWxsIG9mIHRoaXMgbW9kdWxlJ3MgY29udGVudCB3aWxsIGJlIGxvc3QuIENvbnRpbnVlPyI7DQokbGFuZ1sidW5pbnN0YWxsZWQiXSA9ICJNb2R1bGUgVW5pbnN0YWxsZWQuIjsNCiRsYW5nWyJpbnN0YWxsZWQiXSA9ICJNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuIjsNCiRsYW5nWyJoZWxwIl0gPSAiPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQoJCQkJPHA+VGhpcyBtb2R1bGUgbWFuYWdlcyBhbmQgZGlzcGxheXMgYSBsaXN0IG9mIEdvb2dsZSBTdHJlZXQgVmlld3MuPC9wPg0KCQkJPGJyLz48aDM+SG93IERvIEkgVXNlIEl0PzwvaDM+DQoJCQkJPGJyLz48aDQ+UGVybWlzc2lvbnM8L2g0Pg0KCQkJCQk8cD5NYWtlIHN1cmUgeW91ciB1c2VycyBoYXZlIHRoZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucy4gSWYgeW91IGFyZSBub3QgdXNpbmcgdGhlIGFjY2VzcyByZXN0cmljdGlvbiBvcHRpb24gKHNlZSBzZXR0aW5ncyksIHRoZSBcInN0cmVldHZpZXc6IE5vcm1hbCB1c2VyXCIgcGVybWlzc2lvbiB3aWxsIGJlIGVub3VnaCB0byB1c2UgdGhlIG1vZHVsZS4gSW4gdGhlIHNldHRpbmdzIHRhYiwgeW91IGNhbiBjaG9vc2Ugd2hpY2ggdGFicyB3aWxsIGJlIGRpc3BsYXllZCBmb3IgdGhlIG5vcm1hbCB1c2VyLiBPbmx5IHRoZSBhZG1pbmlzdHJhdG9yIGFuZCB1c2VycyB3aXRoIHRoZSBcInN0cmVldHZpZXc6IEFkdmFuY2VkXCIgcGVybWlzc2lvbiB3aWxsIGhhdmUgYWNjZXNzIHRvIHNldHRpbmdzIHRhYi48YnIvPg0KCQkJCQlJZiB5b3Ugd2lzaCB0byBkZWZpbmUgbGV2ZWwtc3BlY2lmaWMgcGVybWlzc2lvbnMsIGFjdGl2YXRlIHRoZSBhY2Nlc3MgcmVzdHJpY3Rpb24gb3B0aW9uIGluIHRoZSBzZXR0aW5ncyB0YWIgYW5kIGdpdmUgdGhlIFwic3RyZWV0dmlldzogTWFuYWdlIG5hbWVfb2ZfbGV2ZWxcIiBwZXJtaXNzaW9uIHRvIHRoZSBhcHByb3ByaWF0ZSB1c2Vycy48L3A+DQoJCQkJPGJyLz48aDQ+R2V0IGEgR29vZ2xlIEFQSSBLZXkgZmlyc3QgaWYgeW91IGRvbid0IGhhdmUgb25lPC9oND4NCgkJCQkJPHA+Z28gdG86IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYXBpcy9tYXBzL3NpZ251cC5odG1sIHRvIGdldCBhIGtleSBhbmQgcGFzdGUgaXQgaW4gdGhlIFRlbXBsYXRlcy5cImZpbmFsX2RlZmF1bHRcIiB0ZW1wbGF0ZSByZXBsYWNpbmcgXCJrZXk9WU9VUiBLRVkgSEVSRVwiIHdpdGggYSB2YWxpZCBrZXk8YnIvPg0KDQoJCQkJPGJyLz48aDQ+QmFzaWNzPC9oND4NCgkJCQkJPHA+VG8gY2FsbCB0aGUgbW9kdWxlLCBzaW1wbHkgdXNlIHRoZSBmb2xsb3dpbmcgdGFnOjxici8+DQoJCQkJCXtjbXNfbW9kdWxlIG1vZHVsZT1cInN0cmVldHZpZXdcIn08L3A+DQoJCQkJCTxwPk9yIHlvdSBtYXkgYXNrIGZvciBhIHNwZWNpZmljIGVsZW1lbnQ6PGJyPg0KCQkJCQl7Y21zX21vZHVsZSBtb2R1bGU9XCJzdHJlZXR2aWV3XCIgYWxpYXM9XCJhbGlhc19vZl9pdGVtXCJ9PC9wPg0KCSAgICAgICAgICAgICAgCQk8YnIvPjxoND5PYnRhaW5pbmcgVmFsdWVzIGRpcmVjdGx5IGZyb20gR29vZ2xlIFN0cmVldCB2aWV3PC9oND4NCgkJCQkJQnkgZ29pbmcgdG8gc3RyZWV0IHZpZXcgYW5kIGNob29zaW5nIHRoZSBcImxpbmtcIiBidXR0b24gYXQgdGhlIHRvcA0KCQkJCQlyaWdodCwgbG9vayBmb3IgdGhlIHBhcmFtZXRlcnMgXCJjYmxsXCIgYW5kIFwiY2JwXCI8YnI+DQoJCQkJCXRoZSB2YWx1ZXMgYXJlOjxicj48YnI+DQoJCQkJCSZuYnNwOyAmbmJzcDsgKiBjYmxsPSBMYXRpdHVkZSxsb25naXR1ZGUgZm9yIFN0cmVldCBWaWV3LiA8YnI+PGJyPg0KCQkJCQkmbmJzcDsmbmJzcDsmbmJzcDsgKiBjYnA9IFN0cmVldCBWaWV3IHdpbmRvdyB0aGF0IGFjY2VwdHMgNQ0KCQkJCQlwYXJhbWV0ZXJzOjxicj4NCgkJCQkJPG9sPg0KICAJCQkJCTxsaT4xLlN0cmVldCBWaWV3L21hcCBhcnJhbmdlbWVudCwgMTE9dXBwZXIgaGFsZiBTdHJlZXQgVmlldyBhbmQgbG93ZXIgaGFsZiBtYXAsIDEyPW1vc3RseSBTdHJlZXQgVmlldyB3aXRoIGNvcm5lciBtYXA8L2xpPg0KICAJCQkJCTxsaT4yLlJvdGF0aW9uIGFuZ2xlL2JlYXJpbmcgKGluIGRlZ3JlZXMpPC9saT4NCgkJCQkJIDxsaT4zLlRpbHQgYW5nbGUsIC05MCAoc3RyYWlnaHQgdXApIHRvIDkwIChzdHJhaWdodCBkb3duKTwvbGk+DQogIAkJCQkJPGxpPjQuWm9vbSBsZXZlbCwgMC0yPC9saT4NCiAgCQkJCQk8bGk+NS5QaXRjaCAoaW4gZGVncmVlcykgLTkwIChzdHJhaWdodCB1cCkgdG8gOTAgKHN0cmFpZ2h0IGRvd24pLGRlZmF1bHQgNTwvbGk+PC9vbD48YnI+DQoJCQkJCTxicj4NCgkJCQk8aDQ+T3B0aW9uYWwgQ29vcmRpbmF0ZSBMb29rdXA8L2g0Pg0KCQkJCQlGaXJlZm94IHJ1bm5pbmcgb24gTGludXggZG9lcyBub3QgZGlzcGxheSB0aGUgY29vcmRpbmF0ZSBsb29rdXAgcGFnZSBwcm9wZXJseQ0KCQkJCQlzbyB0aGVyZSBpcyBhIG9wdGlvbmFsIGxvb2t1cCBwYWdlIGluIHRoZSBtb2R1bGVzL3N0cmVldHZpZXcvbWFwIGZvbGRlcg0KCQkJCQljYWxsZWQgbG9va3VwMi5odG1sLCBqdXN0IHJlbmFtZSB0aGUgZmlsZXMgYW5kIGl0IHdpbGwgZGlzcGxheSBpbiB0aGUgbW9kdWxlIGFkbWluPGJyIC8+PGJyLz4NCg0KDQoJCQkJPGJyLz48aDQ+U2VwYXJhdGluZyBpbnRvIHBhZ2VzPC9oND4NCgkJCQkJPHA+WW91IG1heSBsaW1pdCB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIHNob3duIG9uIG9uZSBwYWdlOjxici8+DQoJCQkJCXtjbXNfbW9kdWxlIG1vZHVsZT1cInN0cmVldHZpZXdcIiBuYnBlcnBhZ2U9XCI1XCJ9PGJyLz4NCgkJCQkJSW4gdGhlIHRlbXBsYXRlLCB5b3UgY2FuIGJ1aWxkIHRoZSBwYWdlIG1lbnUgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWdzOjxici8+DQoJCQkJCXsiLickJy4icGFnZV9zaG93aW5nfSwgeyIuJyQnLiJwYWdlX3RvdGFsaXRlbXN9LCB7Ii4nJCcuInBhZ2VfcGFnZW51bWJlcnN9LCB7Ii4nJCcuInBhZ2VfbmV4dH0sIHsiLickJy4icGFnZV9wcmV2aW91c308L3A+DQoJCQkJPGJyLz48aDQ+VXNpbmcgcXVlcmllczwvaDQ+DQoJCQkJCTxwPlRvIGdldCBhIGxpc3Qgb2YgaXRlbSB0aGF0IG1lZXQgc3BlY2lmaWMgY3JpdGVyaWEsIHlvdSBjYW4gY3JlYXRlIGEgcXVlcnkgdXNpbmcgdGhlIHF1ZXJpZXMgdGFiIG9mIHRoZSBhZG1pbiBwYW5lbCwgYW5kIGNhbGwgdGhlbSB1c2luZyB0aGUgXCJxdWVyeVwiIHBhcmFtZXRlcjo8YnIvPg0KCQkJCQl7Y21zX21vZHVsZSBtb2R1bGU9XCJzdHJlZXR2aWV3XCIgcXVlcnk9XCI1XCJ9PC9wPg0KCQkJCQk8cD48aT5JZiB0aGUgb3B0aW9uIHRvIGFsbG93IG1hbnVlbCBzcWwgcXVlcmllcyBpcyBlbmFibGVkPC9pPiAoc2VlIFwiU2V0dGluZ3NcIiB0YWIpLCB5b3UgbWF5IGFsc28gcHJvdmlkZSB0aGUgc3FsIHF1ZXJ5IGRpcmVjdGx5IHdpdGggdGhlIHF1ZXJ5IHBhcmFtZXRlci4gRm9yIGV4YW1wbGU6PGJyLz4NCgkJCQkJe2Ntc19tb2R1bGUgbW9kdWxlPVwic3RyZWV0dmlld1wiIHdoYXQ9XCJzdHJlZXR2aWV3XCIgcXVlcnk9XCJBLmRhdGVfbW9kaWZpZWQgPiAnMjAwOS0wMy0xNScgQU5EIEEuYWN0aXZlID0gMVwifTxici8+DQoJCQkJCVRoZSBxdWVyeSBwYXJhbWV0ZXIgY2FuIG9ubHkgaG9sZCB0aGUgV0hFUkUgY2xhdXNlIG9mIHRoZSBxdWVyeSwgYW5kIHNob3VsZCBub3QgaW5jbHVkZSB0aGUgV0hFUkUgY29tbWFuZCBpdHNlbGYuIFRvIGF2b2lkIHByb2JsZW1zLCB0aGUgcHJlZml4IFwiQS5cIiBzaG91bGQgYmUgdXNlZCBiZWZvcmUgZmllbGQgbmFtZXMgKHdoZXJlIGFwcGxpY2FibGUsIHRoZSBcIkIuXCIgcHJlZml4IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgY3JpdGVyaWEgb24gdGhlIHBhcmVudCdzIGZpZWxkcykuPGJyLz4NCgkJCQkJQWx0aG91Z2ggdGhlIGFic3RyYWN0aW9uIGxheWVyIGlzIG5vdCBlYXNpbHkgcHJvbmUgdG8gaW5qZWN0aW9ucywgcmVtZW1iZXIgdGhhdCBhY3RpdmF0aW5nIHRoaXMgb3B0aW9uIG1lYW5zIGdpdmluZyBhIHNxbCBvcGVuaW5nIHdpdGhpbiB0aGUgdGVtcGxhdGVzIGFuZCBiZSBjYXJlZnVsLjwvcD4NCgkJCQk8YnIvPjxoND5UaGUgbGluayBhY3Rpb248L2g0Pg0KCQkJCQk8cD5Zb3UgbWF5IHVzZSB0aGUgYWN0aW9uIDxiPlwibGlua1wiPC9iPiB0byBjcmVhdGUgYSBsaW5rIHRvIHRoZSBkZWZhdWx0IGFjdGlvbiwgdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVyczo8YnIvPg0KCQkJCQl7Y21zX21vZHVsZSBtb2R1bGU9XCJzdHJlZXR2aWV3XCIgYWN0aW9uPVwibGlua1wiIHdoYXQ9XCJzdHJlZXR2aWV3XCIgcmFuZG9tPVwiMVwifTxici8+DQoJCQkJCXdvdWxkIGNyZWF0ZSBhIGxpbmsgdG8gYSByYW5kb20gZWxlbWVudCBvZiB0aGlzIGxldmVsLjwvcD4NCgkJCQk8YnIvPjxoND5UaGUgc2l0ZW1hcCBhY3Rpb248L2g0Pg0KCQkJCQk8cD5JZiB5b3VyIG1vZHVsZSBpcyBub3Qgc2hhcmluZyBjaGlsZHJlbiwgeW91IG1heSB1c2UgdGhlIGFjdGlvbiA8Yj5cInNpdGVtYXBcIjwvYj4gdG8gY3JlYXRlIGEgbW9kdWxlIHNpdGVtYXA6PGJyLz4NCgkJCQkJe2Ntc19tb2R1bGUgbW9kdWxlPVwic3RyZWV0dmlld1wiIGFjdGlvbj1cInNpdGVtYXBcIn08YnIvPg0KCQkJCQlZb3UgY2FuIHNlbGVjdCB0aGUgbGV2ZWxzIHVzaW5nIHRoZSBcIndoYXRcIiBwYXJhbWV0ZXIsIGFuZCBtYXkgc2VsZWN0IG1vcmUgdGhhbiBvbmUgdXNpbmcgXCJ8XCIgOiB3aGF0PVwibGV2ZWwxfGxldmVsMlwiLjxici8+DQoJCQkJCU90aGVyIGF2YWlsYWJsZSBwYXJhbWV0ZXJzIGZvciB0aGlzIGFjdGlvbiBhcmUgXCJkZXRhaWxwYWdlXCIgYW5kIFwiaW5saW5lXCIuPGJyLz4NCgkJCQkJVG8gY3JlYXRlIGEgZ29vZ2xlIHNpdGVtYXAsIHNlZSB0aGUgPGEgaHJlZj1cIi4uL21vZHVsZXMvc3RyZWV0dmlldy9kb2MvZmFxLmh0bWwjcTE2XCIgdGFyZ2V0PVwiX2JsYW5rXCI+RkFRPC9hPi48L3A+DQoJCQkJPGJyLz48aDQ+VGhlIHNlYXJjaCBhY3Rpb248L2g0Pg0KCQkJCQk8cD5Zb3UgbWF5IHVzZSB0aGUgYWN0aW9uIDxiPlwic2VhcmNoXCI8L2I+IHRvIGRpc3BsYXkgYSBzZWFyY2ggZm9ybTo8YnIvPg0KCQkJCQl7Y21zX21vZHVsZSBtb2R1bGU9XCJzdHJlZXR2aWV3XCIgYWN0aW9uPVwic2VhcmNoXCJ9PGJyLz4NCgkJCQkJVXNlIHRoZSBcInNlYXJjaG1vZGVcIiBwYXJhbWV0ZXIgdG8gc3dpdGNoIGJldHdlZW4gYWR2YW5jZWQgKGRlZmF1bHQpIGFuZCBzaW1wbGUgbW9kZS4gWW91IG1heSBzcGVjaWZ5IHRoZSBsZXZlbCBpbiB3aGljaCB0byBzZWFyY2ggdXNpbmcgdGhlIFwid2hhdFwiIHBhcmFtZXRlci4gWW91IGNhbm5vdCB1c2UgdGhlIGFkdmFuY2VkIHNlYXJjaCBtb2RlIGluIGFsbCBsZXZlbHMgYXQgdGhlIHNhbWUgdGltZS48YnIvPg0KCQkJCQlUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgY2FuIGJlIHVzZWQgd2l0aCB0aGUgc2VhcmNoIGFjdGlvbjogd2hhdCwgbGltaXQsIG5icGVycGFnZSwgb3JkZXJieSwgZGV0YWlscGFnZSwgbGlzdHRlbXBsYXRlLCBpbmxpbmUsIHNlYXJjaG1vZGUuPGJyLz4NCgkJCQkJU2VlIHN0cmVldHZpZXcvdGVtcGxhdGVzL3NlYXJjaC50cGwgdG8gbW9kaWZ5IHRoZSBzZWFyY2ggZm9ybS48L3A+PGJyLz4NCgkJCQk8cD5Gb3IgbW9yZSBoZWxwLCB5b3UgbWF5IHRha2UgYSBsb29rIGF0IHRoZSA8YSBocmVmPVwiLi4vbW9kdWxlcy9zdHJlZXR2aWV3L2RvYy9mYXEuaHRtbFwiIHRhcmdldD1cIl9ibGFua1wiPkZBUTwvYT4uPC9wPg0KCQkJPGJyLz48aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCgkJCQk8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkIHdpdGggQ1RMTW9kdWxlTWFrZXIsIGFuZCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLjwvcD48YnIvPjxici8+IjsNCg0KLy9FVkVOVFMNCiRsYW5nWyJldmVudGRlc2NfbW9kaWZpZWQiXSA9ICJDYWxsZWQgYWZ0ZXIgYW4gZWxlbWVudCBoYXMgYmVlbiBtb2RpZmllZC4gUGFyYW1zOiBcIndoYXRcIj0+bGV2ZWwgb2YgdGhlIGVsZW1lbnQsIFwiaXRlbWlkXCI9PmlkIG9mIHRoZSBlbGVtZW50LCBcImFsaWFzXCI9PmFsaWFzIG9mIHRoZSBlbGVtZW50LiI7DQokbGFuZ1siZXZlbnRkZXNjX2RlbGV0ZWQiXSA9ICJDYWxsZWQgYWZ0ZXIgYW4gZWxlbWVudCBoYXMgYmVlbiBkZWxldGVkLiBQYXJhbXM6IFwid2hhdFwiPT5sZXZlbCBvZiB0aGUgZWxlbWVudC4iOw0KJGxhbmdbImV2ZW50ZGVzY19hZGRlZCJdID0gIkNhbGxlZCBhZnRlciBhbiBlbGVtZW50IGhhcyBiZWVuIGFkZGVkLiBQYXJhbXM6IFwid2hhdFwiPT5sZXZlbCBvZiB0aGUgZWxlbWVudCwgXCJpdGVtaWRcIj0+aWQgb2YgdGhlIGVsZW1lbnQsIFwiYWxpYXNcIj0+YWxpYXMgb2YgdGhlIGVsZW1lbnQuIjsNCg0KLy9QUkVGRVJFTkNFUw0KJGxhbmdbInByZWZlcmVuY2VzIl0gPSAiU2V0dGluZ3MiOw0KJGxhbmdbInByZWZfdGFiZGlzcGxheSJdID0gIkFkbWluIHRhYnMgc2hvd24gdG8gdGhlIG5vcm1hbCB1c2VyIjsNCiRsYW5nWyJoZWxwX3RhYmRpc3BsYXkiXSA9ICIoTm9ybWFsIHVzZXJzIGFyZSB0aG9zZSB3aG8gaGF2ZSBiZWVuIGdpdmVuIHRoZSBcInN0cmVldHZpZXc6IG5vcm1hbCB1c2VyXCIgcGVybWlzc2lvbi4gVGhlIGxldmVsLXNwZWNpZmljIG1hbmFnZSBwZXJtaXNzaW9ucyBvdmVycmlkZSB0aGUgdmlzaWJsZSB0YWJzIHNlbGVjdGVkIGhlcmUuKSI7DQokbGFuZ1sicHJlZl9zZWFyY2htb2R1bGVfaW5kZXgiXSA9ICJJbmRleCB0aGUgZm9sbG93aW5nIGxldmVscyBmb3IgdGhlIHNlYXJjaCBtb2R1bGUiOw0KJGxhbmdbImhlbHBfc2VhcmNobW9kdWxlX2luZGV4Il0gPSAiKFRoaXMgaGFzIG5vIGVmZmVjdCBvbiB0aGlzIG1vZHVsZSBvd24gaW50ZXJuYWwgc2VhcmNoIGFjdGlvbi4gQWxzbyBub3RlIHRoYXQgYWZ0ZXIgY2hhbmdpbmcgdGhlc2Ugc2V0dGluZ3MgeW91IHNob3VsZCByZWluZGV4IGluIEV4dGVuc2lvbi0mZ3Q7U2VhcmNoLikiOw0KJGxhbmdbInByZWZfbmV3aXRlbXNmaXJzdCJdID0gIk5ldyBpdGVtcyBzaG91bGQgYXBwZWFyIG9uIHRvcCBmb3IgdGhlIGZvbGxvd2luZyBsZXZlbHMiOw0KJGxhbmdbImhlbHBfbmV3aXRlbXNmaXJzdCJdID0gIihPYnZpb3VzbHksIGlmIHRoZSBsZXZlbCBpcyBub3QgY2hlY2tlZCBoZXJlLCBuZXcgaXRlbXMgd2lsbCBhcHBlYXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdCkiOw0KJGxhbmdbInByZWZfcmVzdHJpY3RfcGVybWlzc2lvbnMiXSA9ICJTaG91bGQgd2UgPGI+cmVzdHJpY3Q8L2I+IHRoZSBtYW5hZ2VtZW50IG9mIGl0ZW1zIHRvIHRoZSB1c2VycyB3aG8gaGF2ZSBzcGVjaWZpYyBtYW5hZ2VtZW50IHBlcm1pc3Npb25zIGZvciB0aGUgbGV2ZWw/IChpZiB5b3UgZG8gbm90IHdpc2ggdG8gc3BlY2lmeSBkaWZmZXJlbnQgcGVybWlzc2lvbnMgZm9yIGRpZmZlcmVudCBsZXZlbHMsIHlvdSBjYW4gdW5jaGVjayB0aGlzIGFuZCBzaW1wbHkgdXNlIHRoZSBcInN0cmVldHZpZXc6IG5vcm1hbCB1c2VyXCIgcGVybWlzc2lvbi4pIjsNCiRsYW5nWyJwcmVmX2Rpc3BsYXlfZmlsdGVyIl0gPSAiRGlzcGxheSA8Yj5maWx0ZXI8L2I+IG9uIHRoZSBtb2R1bGUgYWRtaW4gcGFuZWw/IjsNCiRsYW5nWyJwcmVmX2Rpc3BsYXlfaW5zdGFudHNlYXJjaCJdID0gIkRpc3BsYXkgPGI+aW5zdGFudCBzZWFyY2g8L2I+IG9uIHRoZSBtb2R1bGUgYWRtaW4gcGFuZWw/IjsNCiRsYW5nWyJwcmVmX2Rpc3BsYXlfaW5zdGFudHNvcnQiXSA9ICJEaXNwbGF5IDxiPmluc3RhbnQgc29ydDwvYj4gYnkgY29sdW1uIGxpbmtzPyI7DQokbGFuZ1sicHJlZl9lZGl0YWJsZV9hbGlhc2VzIl0gPSAiU2hvdWxkIHRoZSA8Yj5hbGlhczwvYj4gb2YgaXRlbXMgYmUgbWFudWFsbHkgZWRpdGFibGU/IjsNCiRsYW5nWyJwcmVmX2ZvcmNlX2xpc3QiXSA9ICJTaG91bGQgdGhlIDxiPmZvcmNlbGlzdDwvYj4gcGFyYW1ldGVyIGJlIGVuYWJsZWQgYnkgZGVmYXVsdD8gKGxpc3QgdmlldyB3aWxsIGJlIHNob3duIGV2ZW4gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBpdGVtKSI7DQokbGFuZ1sicHJlZl9kZWxldGVfZmlsZXMiXSA9ICJXaGVuIGFuIGl0ZW0gaXMgPGI+ZGVsZXRlZDwvYj4sIHNob3VsZCB0aGUgYXNzb2NpYXRlZCBmaWxlcyBiZSBhbHNvIGRlbGV0ZWQ/IChwcm92aWRlZCB0aGUgaXRlbSBoYXMgYW55IGZpbGUgZmllbGRzLi4uKSI7DQokbGFuZ1sicHJlZl9hbGxvd19zcWwiXSA9ICJBbGxvdyBtYW51YWwgU1FMIHF1ZXJpZXM/ICh3aXRoIHRoZSBcInF1ZXJ5XCIgcGFyYW1ldGVyKSI7DQokbGFuZ1sicHJlZl91c2VfaGllcmFyY2h5Il0gPSAiRGlzcGxheSBmdWxsIGhpZXJhcmNoeSBpbiBmaWx0ZXIgYW5kIHBhcmVudCBkcm9wZG93bj8gKGFkbWluIHBhbmVsKSI7DQokbGFuZ1sicHJlZl9vcmRlcmJ5bmFtZSJdID0gIk9yZGVyIHBhcmVudCBkcm9wZG93bnMgYnkgbmFtZT8iOw0KJGxhbmdbInByZWZfc2hvd3RodW1ibmFpbHMiXSA9ICJEaXNwbGF5IGFsbCB0aHVtYm5haWxzIGluc3RlYWQgb2YgYSB0YWJsZSB3aGVuIHNlbGVjdGVkIGltYWdlIGZpbGVzPyI7DQokbGFuZ1sicHJlZl9tYXhzaG93bnBhZ2VzIl0gPSAiTWF4IG51bWJlciBvZiBwYWdlcyBkaXNwbGF5ZWQgaW4gdGhlIHBhZ2UgbWVudTogIjsNCiRsYW5nWyJwcmVmX2F1dG9pbmNyZW1lbnRfYWxpYXMiXSA9ICJBdXRvLWluY3JlbWVudCBhbGlhc2VzIGluIGNhc2Ugb2YgaWRlbnRpY2FsIG5hbWVzPyI7DQokbGFuZ1sicHJlZl9kZWNvZGVlbnRpdGllcyJdID0gIkRlY29kZSBodG1sIGVudGl0aWVzIG9uIGZyb250ZW5kIGZvcm0gc3VibWlzc2lvbi4iOw0KJGxhbmdbInByZWZfZnJvbnRlbmQiXSA9ICJGcm9udGVuZCBlZGl0IjsNCiRsYW5nWyJoZWxwX2Zyb250ZW5kIl0gPSAiRm9yIHNlY3VyaXR5LCBmcm9udGVuZCBlZGl0aW9uIHNob3VsZCBiZSB1c2VkIHdpdGggdGhlIEZyb250IEVuZCBVc2VycyBtb2R1bGUuIFNlZSA8YSBocmVmPVwibW9kdWxlcy9zdHJlZXR2aWV3L2RvYy9mYXEuaHRtbCNxMjBcIiB0YXJnZXQ9XCJfYmxhbmtcIj5GYXE8L2E+IGZvciBoZWxwIG9uIHBlcm1pc3Npb24gaW50ZWdyYXRpb24uIjsNCiRsYW5nWyJwcmVmX2ZlX3d5c2l3eWciXSA9ICJFbmFibGUgd3lzaXd5ZyBpbiB0aGUgZnJvbnRlbmQgKG11c3QgYmUgZW5hYmxlZCBpbiB0aGUgR2xvYmFsIFNldHRpbmdzIHRvbykiOw0KJGxhbmdbInByZWZfZmVfZGVjb2RlZW50aXRpZXMiXSA9ICJEZWNvZGUgaHRtbCBlbnRpdGllcyBmcm9tIGZyb250ZW5kIGZvcm1zLiBUaGlzIGlzIG5vdCByZWNvbW1hbmRlZC4iOw0KJGxhbmdbInByZWZfZmVfYWxsb3dmaWxlcyJdID0gIkFsbG93IGZpbGUgdXBsb2FkIGZyb20gdGhlIGZyb250ZW5kLiI7DQokbGFuZ1sicHJlZl9mZV9hbGxvd25hbWVjaGFuZ2UiXSA9ICJBbGxvdyBmcm9udGVuZCB1c2VycyB0byBjaGFuZ2UgdGhlIG5hbWUgKGFuZCB0aHJvdWdoIGl0IHRoZSBhbGlhcykgb2YgdGhlIGl0ZW0gdGhleSBhcmUgZWRpdGluZy4iOw0KJGxhbmdbInByZWZfZmVfYWxsb3dhZGRuZXciXSA9ICJBbGxvdyBmcm9udGVuZCB1c2VycyB0byBhZGQgbmV3IGVsZW1lbnRzLiI7DQokbGFuZ1sicHJlZl9mZV91c2VjYXB0Y2hhIl0gPSAiVXNlIGNhcHRjaGE/IChtb2R1bGUgQ2FwdGNoYSByZXF1aXJlZCkiOw0KJGxhbmdbInByZWZfZmVfYWZ0ZXJzdWJtaXQiXSA9ICJPbmNlIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCwgcmVkaXJlY3QgdG8gIjsNCiRsYW5nWyJwcmVmX2ZlX21heGZpbGVzaXplIl0gPSAiTWF4aW11bSBzaXplLCBpbiBieXRlcywgb2YgdGhlIGZpbGVzIHVwbG9hZGVkIHRocm91Z2ggdGhlIGZyb250ZW5kIChjYW5ub3QgYmUgb3ZlciBwaHAuaW5pIGxpbWl0KSI7DQokbGFuZ1sicHJlZl9hbGxvd19jb21wbGV4X29yZGVyIl0gPSAiQWxsb3cgY29tcGxleCBcIm9yZGVyYnlcIiBwYXJhbWV0ZXJzLiI7DQokbGFuZ1sicHJlZl9hZG1pbnBhZ2VzIl0gPSAiTnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlIGluIHRoZSBhZG1pbiBwYW5lbCAoMCA9IHBhcyBkZSBwYWdpbmF0aW9uKS4iOw0KJGxhbmdbInByZWZfbG9hZF9uYmNoaWxkcmVuIl0gPSAiTG9hZCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIChpdGVtLSZndDtuYmNoaWxkcmVuKSBmb3IgYWxsIGl0ZW1zPyI7DQokbGFuZ1sicHJlZl9sb2FkX25leHRwcmV2aW91cyJdID0gIkxvYWQgbmV4dC9wcmV2aW91cyBsaW5rcz8gKGRldGFpbCB2aWV3IG9ubHkpIjsNCiRsYW5nWyJwcmVmX3VzZV9zZXNzaW9uIl0gPSAiVXNlIHNlc3Npb24gdG8gc3RvcmUgYWRtaW4gcGFuZWwgZmlsdGVycy4iOw0KJGxhbmdbInByZWZfbGV2ZWxwYWdpbmF0aW9uIl0gPSAiRGVmYXVsdCBudW1iZXIgb2YgZWxlbWVudCBwZXIgcGFnZSBmb3IgdGhlIGZyb250ZW5kIjsNCiRsYW5nWyJoZWxwX2xldmVscGFnaW5hdGlvbiJdID0gIihFbXB0eSBvciAwIGZvciB3aWxsIGRpc2FibGUgZGVmYXVsdCBwYWdpbmF0aW9uLiBUaGUgbmJwZXJwYWdlIHBhcmFtZXRlciBvdmVycmlkZXMgdGhlc2Ugc2V0dGluZ3MuKSI7DQoNCi8vUEFSQU1FVEVSUw0KJGxhbmdbInBoZWxwX2FjdGlvbiJdID0gIlBvc3NpYmxlIGFjdGlvbnM6IFwibGlua1wiLCBcInNlYXJjaFwiLCBcImJyZWFkY3J1bWJzXCIsIFwiZGVmYXVsdFwiLCBcInNpdGVtYXBcIi4iOw0KJGxhbmdbInBoZWxwX3doYXQiXSA9ICJBbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGxldmVsIHlvdSB3aXNoIHRvIGRpc3BsYXkuIFBvc3NpYmxlIHZhbHVlcyBhcmUgOiA8aT5zdHJlZXR2aWV3PC9pPiI7DQokbGFuZ1sicGhlbHBfYWxpYXMiXSA9ICJBbGlhcyBvZiB0aGUgaXRlbSB5b3Ugd2lzaCB0byBkaXNwbGF5LiI7DQokbGFuZ1sicGhlbHBfcGFyZW50Il0gPSAiSWYgeW91IHdpc2ggdG8gbGltaXQgdGhlIGRpc3BsYXllZCBlbGVtZW50cyB0byB0aG9zZSB3aG8gYmVsb25nIHRvIGEgc3BlY2lmaWMgcGFyZW50LCBlbnRlciB0aGUgcGFyZW50IGFsaWFzIGhlcmUuIjsNCiRsYW5nWyJwaGVscF9saW1pdCJdID0gIkxpbWl0IHRoZSBudW1iZXIgb2YgaXRlbSByZXR1cm5lZCBieSB0aGUgcXVlcnkgKDAgPSBubyBsaW1pdCkiOw0KJGxhbmdbInBoZWxwX25icGVycGFnZSJdID0gIlNldCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRpc3BsYXllZCBvbiBlYWNoIHBhZ2UuIjsNCiRsYW5nWyJwaGVscF9vcmRlcmJ5Il0gPSAiWW91IGNhbiBzZXQgdG8gXCJtb2RpZmllZFwiLCBcImNyZWF0ZWRcIiBvciB0aGUgbmFtZSBvZiBhIGZpZWxkIHRvIG9yZGVyIGl0ZW1zIGluIHRoaXMgd2F5LiBBbnkgb3RoZXIgdmFsdWUgd2lsbCBvcmRlciB3aXRoIHRoZSBpdGVtIG9yZGVyLiI7DQokbGFuZ1sicGhlbHBfZGV0YWlscGFnZSJdID0gIlNwZWNpZnkgdGhlIGFsaWFzIG9mIHRoZSBwYWdlIGluIHdoaWNoIGxpbmtzIHRvIGNoaWxkIGVsZW1lbnRzIHNob3VsZCBiZSBzZW50IChpZiBub25lIGlzIHNwZWNpZmllZCwgY3VycmVudCBwYWdlIGlzIHVzZWQpIjsNCiRsYW5nWyJwaGVscF9zaG93ZGVmYXVsdCJdID0gIlNldCB0byBcInRydWVcIiBpZiB5b3Ugd2lzaCB0byBkaXNwbGF5IHRoZSBkZWZhdWx0IGVsZW1lbnQuIjsNCiRsYW5nWyJwaGVscF9yYW5kb20iXSA9ICJTZXQgdG8gYSBudW1iZXIgdG8gc2hvdyBhIG51bWJlciBvZiByYW5kb20gZWxlbWVudHMgZnJvbSB5b3VyIHF1ZXJ5LiI7DQokbGFuZ1sicGhlbHBfZmluYWx0ZW1wbGF0ZSJdID0gIlNwZWNpZnkgdGhlIHRlbXBsYXRlIHlvdSB3aXNoIHRvIHVzZSBmb3IgdGhlIGRldGFpbCB2aWV3IG9mIHRoZSBmaW5hbCBsZXZlbC4iOw0KJGxhbmdbInBoZWxwX2xpc3R0ZW1wbGF0ZSJdID0gIlNwZWNpZnkgdGhlIHRlbXBsYXRlIHlvdSB3aXNoIHRvIHVzZSBmb3IgdGhlIGxpc3Qgdmlldy4iOw0KJGxhbmdbInBoZWxwX2ZvcmNlbGlzdCJdID0gIlNldCB0byAxIGlmIHlvdSB3aXNoIHRvIGRpc3BsYXkgYSBsaXN0IHZpZXcgZXZlbiB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGVsZW1lbnQuIjsNCiRsYW5nWyJwaGVscF9pbnRlcm5hbCJdID0gIkZvciBpbnRlcm5hbCB1c2U7IHNwZWNpZnkgdGhlIHBhZ2UgKHdoZW4gdXNpbmcgbmJwZXJwYWdlKS4iOw0KJGxhbmdbInBoZWxwX3F1ZXJ5Il0gPSAiRm9yIG9wdGlvbmFsIHVzZSB3aXRoIHRoZSBcImRlZmF1bHRcIiBhY3Rpb24uIFNwZWNpZmllcyB0aGUgaWQgb2YgdGhlIHF1ZXJ5IHRvIHVzZS4iOw0KJGxhbmdbInBoZWxwX2lubGluZSJdID0gIk1ha2VzIHRoZSBsaW5rcyBpbmxpbmUuIjsNCiRsYW5nWyJwaGVscF9zZWFyY2htb2RlIl0gPSAiRm9yIHVzZSB3aXRoIHRoZSBcInNlYXJjaFwiIGFjdGlvbi4gU2V0IHRvIFwic2ltcGxlXCIgdG8gc2VhcmNoIGluIGFsbCB0ZXh0IGZpZWxkcywgYW5kIFwiYWR2YW5jZWRcIiB0byBzZWFyY2ggaW4gc3BlY2lmaWMgZmllbGRzLiI7DQokbGFuZ1sicGhlbHBfdG9hY3Rpb24iXSA9ICJGb3IgdXNlIHdpdGggdGhlIFwibGlua1wiIGFjdGlvbi4gU2V0cyB0aGUgYWN0aW9uIHRvIHdoaWNoIHRoZSBsaW5rIHNob3VsZCByZWRpcmVjdC4iOw0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/map/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/map/extstreetviewcontrol.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEBuYW1lIEV4dFN0cmVldHZpZXdDb250cm9sCiAqIEB2ZXJzaW9uIDEuMAogKiBAYXV0aG9yIE1hc2FzaGkgS2F0c3VtYXRhCiAqIEBmaWxlb3ZlcnZpZXcgCiAqIFRoaXMgbGlicmFyeSBjcmVhdGVzIGEgY29sbGFwc2libGUgU3RyZWV0VmlldyBkaXNwbGF5IGluIHRoZSBjb3JuZXIgb2YgdGhlIG1haW4gbWFwLgogKiBBbmQgdGhlIEV4dFN0cmVldHZpZXdDb250cm9sIGFkZHMgYSBtYXJrZXIgZm9yIHJlZmVyZW5jZSBsb2NhdGlvbiBvbiB0aGUgbWFpbiBtYXAuCiAqIFlvdSBjYW4gZHJhZ2dibGUgaXQgYW5kIGNoYW5nZSBsb2NhdGlvbiBtYWluIG1hcCBhbmQgU3RyZWV0VmlldyBkaXNwbGF5IGxvY2F0aW9uLgogKiBOb3RlOiBVbmxpa2Ugb3RoZXIgY29udHJvbHMsIHlvdSBjYW4gb25seSBwbGFjZSB0aGlzIGNvbnRyb2wgaW4gdGhlIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgdGhlIG1hcCAoR19BTkNIT1JfQk9UVE9NX1JJR0hUKS4KICovCgovKioKICogQG5hbWUgRXh0U3RyZWV0dmlld09wdGlvbnMKICogQGNsYXNzIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBvcHRpb25hbCBhcmd1bWVudHMgdG8ge0BsaW5rIEV4dFN0cmVldHZpZXdDb250cm9sfS4gCiAqICAgSXQgaGFzIG5vIGNvbnN0cnVjdG9yLCBidXQgaXMgaW5zdGFudGlhdGVkIGFzIGFuIG9iamVjdCBsaXRlcmFsLgogKiBAcHJvcGVydHkge0dMYXRMbmd9IFtsYXRsbmcgPSBudWxsXSBTcGVjaWZpZXMgbGF0bG5nIG9mIHBhbm9yYW1hLgogKiAgSWYgaXQgaXMgbm90IHNldCwgdGhlbiBjb250cm9sIGdldHMgY2VudGVyIGxvY2F0aW9uIG9mIG1haW4gbWFwLgogKiBAcHJvcGVydHkge0dTaXplfSBbc2l6ZSA9IEdTaXplKDMwMCwgMjEwKV0gU3BlY2lmaWVzIGNvbnRyb2wncyBzaXplLiAKICogQHByb3BlcnR5IHtHTWFya2VyfSBbbWFya2VyID0gUGVnbWFuTWFya2VyXSBTcGVjaWZpZXMgYSBtYXJrZXIgZm9yIHVzZXIgaGFuZGxpbmcuCiAqICBTZWUgYSBQZWdtYW5NYXJrZXIgaW50byBleHRzdHJlZXR2aWV3Y29udHJvbC5qcwogKiBAcHJvcGVydHkge0dQb3Z9IFtwb3YgPSB7eWF3IDogMCwgcGl0Y2ggOiAwLCBwYW5vSWQgOiBudWxsfV0gU3BlY2lmaWVzIGluaXRpYWxpemUgcG92IG9mIHBhbm9yYW1hLgogKiBAcHJvcGVydHkge0Jvb2xlYW59IFtoaWRkZW4gPSBmYWxzZV0gU3BlY2lmeSB2aXNpYmlsaXR5IHdoZW4gY29udHJvbCBpcwogKiAgYWRkZWQgdG8gdGhlIG1hcC4gSWYgaXQgaXMgc2V0IHRvIHRydWUsIHRoZSBjb250cm9sIGlzIGhpZGRlbi4KICogQHByb3BlcnR5IHtTdHJpbmd9IFttYWluQ29udGVudCA9ICJNQVAiXSBTcGVjaWZ5IG1haW4gY29udGVudCBpbnRvIHRoZSBtYXAgZGl2LgogKiAgWW91IGNhbiBzZWxlY3Qgc3RyaW5nczsgIk1BUCIgb3IgIlNUUkVFVFZJRVciLgogKiBAcHJvcGVydHkge1N0cmluZ30gW2NvbnRyb2xTdGF0dXMgPSAiTk9STUFMIl0gU3BlY2lmeSBjb250cm9sIHN0YXR1cy4KICogIFlvdSBjYW4gc2VsZWN0IHN0cmluZzsgIk5PUk1BTCIgb3IgIk1JTkkiLgogKi8KCi8qZ2xvYmFsIFBlZ21hbk1hcmtlciAqLwoKCi8qKgogKiBAZGVzYwogKiBDcmVhdGVzIGEgY29udHJvbCBhbmQgYSBtYXJrZXIgd2l0aCBvcHRpb25zIHNwZWNpZmllZCBpbiB7QGxpbmsgRXh0U3RyZWV0dmlld09wdGlvbnN9LgogKiBAcGFyYW0ge0V4dFN0cmVldHZpZXdPcHRpb25zfSBbb3B0X29wdHNdIE9wdGlvbmFsIGFyZ3VtZW50cy4KICogQGNvbnN0cnVjdG9yCiAqLwpmdW5jdGlvbiBFeHRTdHJlZXR2aWV3Q29udHJvbChvcHRfb3B0cykgewogIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vIEltYWdlIGFuZCBjbGlwIHJlY3QgdGFibGUKICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICB0aGlzLmFycm93QnRuVGJsXyA9IHt9OwogIAogIHRoaXMuYXJyb3dCdG5UYmxfLnNyYyA9ICJodHRwOi8vbWFwcy5nc3RhdGljLmNvbS9tYXBmaWxlcy9jYi9yZXNpemVfdG9nZ2xlcy5wbmciOwogIHRoaXMuYXJyb3dCdG5UYmxfLnVwQXJyb3cgPSB7ImxlZnQiIDogLTEsICJ0b3AiIDogLTg2LCAid2lkdGgiIDogMTUsICJoZWlnaHQiIDogMTV9OwogIHRoaXMuYXJyb3dCdG5UYmxfLmRvd25BcnJvdyA9IHsibGVmdCIgOiAtMSwgInRvcCIgOiAtNjksICJ3aWR0aCIgOiAxNSwgImhlaWdodCIgOiAxNX07CiAgCiAgCiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gUGFyc2Ugb3B0aW9ucwogIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIGlmIChFeHRTdHJlZXR2aWV3Q29udHJvbC5wcm90b3R5cGUuaXNOdWxsKG9wdF9vcHRzKSkgewogICAgb3B0X29wdHMgPSB7fTsKICB9CiAgCiAgdGhpcy5sYXRsbmdfID0gb3B0X29wdHMubGF0bG5nIHx8IG51bGw7CiAgdGhpcy5jdHJsU2l6ZV8gPSBvcHRfb3B0cy5zaXplIHx8IG5ldyBHU2l6ZSgzMDAsIDIxMCk7CiAgdGhpcy5wb3ZfID0gb3B0X29wdHMucG92IHx8IHsieWF3IiA6IDAsICJwaXRjaCIgOiAwLCAicGFub0lkIiA6IG51bGx9OwogIHRoaXMubWFya2VyXyA9IG9wdF9vcHRzLm1hcmtlciB8fCBudWxsOwogIHRoaXMuaXNIaWRkZW5fID0gb3B0X29wdHMuaGlkZGVuIHx8IGZhbHNlOwogIHRoaXMuaW5pdFN0YXR1c18gPSBvcHRfb3B0cy5jb250cm9sU3RhdHVzIHx8ICJOT1JNQUwiOwogIHRoaXMuaW5pdENvbnRlbnRfID0gb3B0X29wdHMubWFpbkNvbnRlbnQgfHwgIk1BUCI7CiAgCiAgdGhpcy5jb250cm9sU3RhdHVzXyA9ICJOT1JNQUwiOwogIHRoaXMubWFpbkNvbnRlbnRfID0gIk1BUCI7CiAgdGhpcy5wYWRkaW5nXyA9IDU7CiAgdGhpcy5mcmFtZUNvbG9yXyA9ICIjNjc4NEM3IjsKCn0KCi8qKgogKiBAcHJpdmF0ZQogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlID0gbmV3IEdDb250cm9sKCk7CgovKioKICogQGRlc2MgSW5pdGlhbGl6ZSB0aGUgRXh0U3RyZWV0dmlld0NvbnRyb2wKICogQHByaXZhdGUKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKG1hcCkgewogIHZhciB0aGlzXyA9IHRoaXM7CiAgR0NvbnRyb2wucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAKICB0aGlzLmNoZWNrQnJvd3NlckFnZW50KCk7CgogIC8vUmVsZWFzZSBzdHJlZXR2aWV3IG1lbW9yeQogIEdFdmVudC5iaW5kRG9tKHdpbmRvdywgInVubG9hZCIsIHRoaXMsIHRoaXMucmVtb3ZlQ29udHJvbF8pOwoKICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyAgSW5pdGlhbGl6ZQogIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIHRoaXMubGF0bG5nXyA9IHRoaXMubGF0bG5nXyB8fCBtYXAuZ2V0Q2VudGVyKCk7CiAgdGhpcy5tYXBfID0gbWFwOwogIHRoaXMubWFwQ29udGFpbmVyXyA9IG1hcC5nZXRDb250YWluZXIoKTsKICB0aGlzLmJvdW5kc18gPSBtYXAuZ2V0Qm91bmRzKCk7CiAgdGhpcy5zdFZpZXdDbnRfID0gMDsKCiAgdGhpcy5zd2FwTWFwQ29udGFpbmVyXyA9IHRoaXMubWFwQ29udGFpbmVyXy5jbG9uZU5vZGUoZmFsc2UpOwoKICB0aGlzLnN3YXBGbGFzaENvbnRhaW5lcl8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICB0aGlzLnN3YXBGbGFzaENvbnRhaW5lcl8uc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogIHRoaXMuc3dhcEZsYXNoQ29udGFpbmVyXy5zdHlsZS5sZWZ0ID0gMDsKICB0aGlzLnN3YXBGbGFzaENvbnRhaW5lcl8uc3R5bGUucmlnaHQgPSAwOwogIHRoaXMuc3dhcEZsYXNoQ29udGFpbmVyXy5zdHlsZS50b3AgPSAwOwogIHRoaXMuc3dhcEZsYXNoQ29udGFpbmVyXy5zdHlsZS5ib3R0b20gPSAwOwogIHRoaXMuc3dhcE1hcENvbnRhaW5lcl8uYXBwZW5kQ2hpbGQodGhpcy5zd2FwRmxhc2hDb250YWluZXJfKTsKCiAgdGhpcy5zd2FwaWZyYW1lQmFzZV8gPSB0aGlzLmNyZWF0ZUVsZV8odGhpcy5jdHJsU2l6ZV8sICJpZnJhbWUiKTsKICB0aGlzLnN3YXBpZnJhbWVCYXNlXy5zdHlsZS5ib3R0b20gPSAwOwogIHRoaXMuc3dhcGlmcmFtZUJhc2VfLnN0eWxlLnJpZ2h0ID0gMDsKICB0aGlzLnN3YXBpZnJhbWVCYXNlXy5zdHlsZS5ib3JkZXJTdHlsZSA9ICJub25lIjsKICB0aGlzLnN3YXBpZnJhbWVCYXNlXy5zcmMgPSAiIjsKICB0aGlzLnN3YXBpZnJhbWVCYXNlXy5mcmFtZWJvcmRlciA9IDA7CiAgdGhpcy5zd2FwTWFwQ29udGFpbmVyXy5hcHBlbmRDaGlsZCh0aGlzLnN3YXBpZnJhbWVCYXNlXyk7CgogIHRoaXMubWFwQ29udGFpbmVyXy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLnN3YXBNYXBDb250YWluZXJfLCB0aGlzLm1hcENvbnRhaW5lcl8pOwogIHRoaXMubWFwQ29udGFpbmVyXy5zZXRBdHRyaWJ1dGUoImlkIiwgbnVsbCk7CiAgdGhpcy5tYXBDb250YWluZXJfLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCBudWxsKTsKICB0aGlzLnNldEVsZW1lbnRTdHlsZV8odGhpcy5tYXBDb250YWluZXJfLCAid2lkdGgiLCAiMTAwJSIsIG51bGwpOwogIHRoaXMuc2V0RWxlbWVudFN0eWxlXyh0aGlzLm1hcENvbnRhaW5lcl8sICJoZWlnaHQiLCAiMTAwJSIsIG51bGwpOwogIHRoaXMuc3dhcE1hcENvbnRhaW5lcl8uYXBwZW5kQ2hpbGQodGhpcy5tYXBDb250YWluZXJfKTsKCgogIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vICBDcmVhdGUgYSB3aW5kb3cgbGlrZXMgdGhlIEdPdmVydmlld0NvbnRyb2wKICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgLy9DcmVhdGUgYSBzdHJlZXR2aWV3IHdpbmRvdwogIHZhciByZXN1bHQgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lcl8odGhpcy5jdHJsU2l6ZV8pOwogIHRoaXMuY29ybmVySW5mb18gPSByZXN1bHQ7CiAgdGhpcy5tYWluV2luZG93XyA9IHJlc3VsdC5tYWluV2luZG93OwogIHRoaXMuY29udGFpbmVyXyA9IHJlc3VsdC5jb250YWluZXI7CiAgdGhpcy5jb250YWluZXJfLnN0eWxlLnJpZ2h0ID0gMDsKICB0aGlzLmNvbnRhaW5lcl8uc3R5bGUuYm90dG9tID0gMDsKICB0aGlzLmNvbnRhaW5lcl8uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5mcmFtZUNvbG9yXzsvLyIjYThhY2I4IjsgIAoKICB0aGlzLmNvcm5lckluZm9fLmNvbnRhaW5lcklmcmFtZSA9IHRoaXMuc3dhcGlmcmFtZUJhc2VfOwogIHRoaXMuc3dhcE1haW5XaW5kb3dfID0gdGhpcy5tYWluV2luZG93Xy5jbG9uZU5vZGUoZmFsc2UpOwoKICAvL0FwcGVuZCB0aGUgY29udGFpbmVyXwogIHZhciBtYXBQYXJlbnRFbGUgPSB0aGlzLm1hcENvbnRhaW5lcl8ucGFyZW50Tm9kZTsKICBpZiAodGhpcy5pc051bGwobWFwUGFyZW50RWxlKSkgewogICAgbWFwUGFyZW50RWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKICB9CiAgCiAgaWYgKHRoaXMuaXNIaWRkZW5fID09PSB0cnVlKSB7CiAgICB0aGlzLmhpZGUoKTsKICB9CiAgbWFwLmdldENvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyXyk7CgoKICAvL0xpc3RlbmluZyBidXR0b25zIGNsaWNrIGV2ZW50CiAgR0V2ZW50LmJpbmREb20ocmVzdWx0LmRvd25BcnJvd0J0biwgImNsaWNrIiwgdGhpcywgZnVuY3Rpb24gKCkgewogICAgaWYgKHRoaXNfLmNvbnRyb2xTdGF0dXNfID09PSAiTk9STUFMIikgewogICAgICAvL25vcm1hbCAtPiBtaW5pCiAgICAgIHRoaXNfLnNldEN0cmxTdGF1dHMoIk1JTkkiKTsKICAgIH0KICB9KTsKICBHRXZlbnQuYmluZERvbShyZXN1bHQudXBBcnJvd0J0biwgImNsaWNrIiwgdGhpcywgZnVuY3Rpb24gKCkgewogICAgaWYgKHRoaXNfLmNvbnRyb2xTdGF0dXNfID09PSAiTUlOSSIpIHsKICAgICAgLy9taW5pIC0+IG5vcm1hbAogICAgICB0aGlzXy5zZXRDdHJsU3RhdXRzKCJOT1JNQUwiKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vc3dhcCBjb250YWluZXIgbWFwIGFuZCBzdHJlZXR2aWV3CiAgICAgIHRoaXNfLnN3YXBNYXAyQ29ybmVyV2luZG93XygpOwogICAgfQogIH0pOwogIAogIEdFdmVudC5iaW5kRG9tKHdpbmRvdywgInJlc2l6ZSIsIHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgIGlmICh0aGlzXy5tYWluQ29udGVudF8gPT09ICJTVFJFRVRWSUVXIikgewogICAgICB0aGlzXy5zd2FwRmxhc2hDb250YWluZXJfLnN0eWxlLndpZHRoID0gdGhpc18uc3dhcE1hcENvbnRhaW5lcl8uY2xpZW50V2lkdGggKyAicHgiOwogICAgICB0aGlzXy5zd2FwRmxhc2hDb250YWluZXJfLnN0eWxlLmhlaWdodCA9IHRoaXNfLnN3YXBNYXBDb250YWluZXJfLmNsaWVudEhlaWdodCArICJweCI7CiAgICAgIHRoaXNfLnN0T2JqXy5jaGVja1Jlc2l6ZSgpOwogICAgfQogIH0pOwoKICBHRXZlbnQuYmluZChtYXAsICJtb3ZlZW5kIiwgdGhpcywgdGhpcy5tYXBNb3ZlXyk7CgogIGlmICh0aGlzLmlzTnVsbCh0aGlzLm1hcmtlcl8pKSB7CiAgICB0aGlzLm1hcmtlcl8gPSBuZXcgUGVnbWFuTWFya2VyKHRoaXMubGF0bG5nXywgeyJkcmFnZ2FibGUiIDogdHJ1ZX0pOwogIH0KICB0aGlzLm1hcF8uYWRkT3ZlcmxheSh0aGlzLm1hcmtlcl8pOwogIHRoaXMubWFya2VyXy5yZWRyYXcoZmFsc2UsICJBTkdMRSIsIDApOwoKICBHRXZlbnQuYmluZCh0aGlzLm1hcmtlcl8sICJkcmFnc3RhcnQiLCB0aGlzLCB0aGlzLm1hcmtlckRyYWdTdGFydF8pOwogIEdFdmVudC5iaW5kKHRoaXMubWFya2VyXywgImRyYWciLCB0aGlzLCB0aGlzLm1hcmtlckRyYWdfKTsKICBHRXZlbnQuYmluZCh0aGlzLm1hcmtlcl8sICJkcmFnZW5kIiwgdGhpcywgdGhpcy5tYXJrZXJEcmFnRW5kXyk7CgoKICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyAgaW5pdGlhbGl6ZSBzdHJlZXR2aWV3CiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgCiAgLy9zdHJlZXR2aWV3IHBhbm9yYW1hCiAgdGhpcy5mbGFzaENvbnRhaW5lcl8gPSB0aGlzLm1haW5XaW5kb3dfOwogIHRoaXMuc3RDbGllbnRfID0gbmV3IEdTdHJlZXR2aWV3Q2xpZW50KCk7CiAgdGhpcy5jcmVhdGVTdHJlZXR2aWV3UGFub3JhbWFfKHRoaXMubGF0bG5nXywgdGhpcy5wb3ZfKTsKICAKCiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gIGluaXRpYWxpemUgbWFpbiBjb250ZW50IGFuZCB3aW5kb3cgc3RhdHVzCiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgdGhpcy5zZXRDdHJsU3RhdXRzKHRoaXMuaW5pdFN0YXR1c18pOwogIHRoaXMuc2V0TWFpbkNvbnRlbnQodGhpcy5pbml0Q29udGVudF8pOwoKICAvL3JldHVybiBkdW1teSBkaXYgZWxlbWVudCB0byBtYXAuCiAgdmFyIGR1bW15RGl2ID0gdGhpcy5jcmVhdGVFbGVfKHsid2lkdGgiIDogMCwgImhlaWdodCIgOiAwfSk7CiAgZHVtbXlEaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICByZXR1cm4gZHVtbXlEaXY7Cn07CgovKioKICogQGRlc2MgU2V0cyBjb250cm9sIHN0YXR1cwogKiBAcGFyYW0ge3N0YXR1c30gIk1JTkkiIDogVGhlIGNvbnRyb2wgaXMgbWluaW1pemVkLjxicj4KICogIk5PUk1BTCIgOiBUaGUgY29udHJvbCBpcyBub3JtYWwgc2l6ZS48YnI+CiAqLwpFeHRTdHJlZXR2aWV3Q29udHJvbC5wcm90b3R5cGUuc2V0Q3RybFN0YXV0cyA9IGZ1bmN0aW9uIChzdGF0dXMpIHsKICBzd2l0Y2ggKHN0YXR1cykgewogIGNhc2UgIk1JTkkiOgogICAgLy9ub3JtYWwgLT4gbWluaQogICAgdGhpcy5yZXNpemVDb3JuZXJXaW5kb3dfKHtlbmRTaXplIDogdGhpcy5hcnJvd0J0blRibF8uZG93bkFycm93LCBzaXplRGlyZWN0aW9uIDogLTF9LCAiTUlOSSIpOwogICAgYnJlYWs7CiAgICAKICBjYXNlICJOT1JNQUwiOgogICAgLy9taW5pIC0gPiBub3JtYWwgCiAgICBpZiAodGhpcy5jb250cm9sU3RhdHVzXyA9PT0gIk1JTkkiKSB7CiAgICAgIHRoaXMucmVzaXplQ29ybmVyV2luZG93Xyh7ZW5kU2l6ZSA6IHRoaXMuY3RybFNpemVfLCBzaXplRGlyZWN0aW9uIDogMX0sICJOT1JNQUwiKTsKICAgIH0KICAgIGJyZWFrOwogIH0KfTsKCi8qKgogKiBAcHJpdmF0ZQogKiBAZGVzYyBtYXAgbW92ZQogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLm1hcE1vdmVfID0gZnVuY3Rpb24gKCkgewogIHRoaXMuYm91bmRzXyA9IHRoaXMubWFwXy5nZXRCb3VuZHMoKTsKfTsKCi8qKgogKiBAcHJpdmF0ZQogKiBAZGVzYyBwZWdtYW4tbWFya2VyIGRyYWcgc3RhcnQKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5tYXJrZXJEcmFnU3RhcnRfID0gZnVuY3Rpb24gKCkgewogIHRoaXMubWFwXy5jbG9zZUluZm9XaW5kb3coKTsKICB0aGlzLmlzRHJhZ2dpbmdfID0gdHJ1ZTsKICB0aGlzLmxuZ18gPSB0aGlzLmxhdGxuZ18ubG5nKCk7Cn07CgovKioKICogQHByaXZhdGUKICogQGRlc2MgcGVnbWFuLW1hcmtlciBkcmFnZ2luZwogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLm1hcmtlckRyYWdfID0gZnVuY3Rpb24gKGxhdGxuZykgewogIHZhciBiZWZvcmVMbmcgPSB0aGlzLmxuZ187CiAgdmFyIGN1cnJlbnRMbmcgPSBsYXRsbmcubG5nKCk7CiAgdGhpcy5sbmdfID0gY3VycmVudExuZzsKICAKICB2YXIgZHJhZ0RpcmVjdGlvbiA9IGJlZm9yZUxuZyAtIGN1cnJlbnRMbmc7CiAgdmFyIGltZ0lkeDsKICBpZiAoZHJhZ0RpcmVjdGlvbiA+IDApIHsKICAgIGltZ0lkeCA9ICJMRUZUIjsKICB9IGVsc2UgewogICAgaW1nSWR4ID0gIlJJR0hUIjsKICB9CiAgdmFyIHByZWZpeCA9ICJFTkFCTEUiOwogIHZhciB0aGlzXyA9IHRoaXM7CiAgdGhpcy5zdENsaWVudF8uZ2V0TmVhcmVzdFBhbm9yYW1hKGxhdGxuZywgZnVuY3Rpb24gKHBhbm9EYXRhKSB7CiAgICBpZiAocGFub0RhdGEuY29kZSAhPT0gMjAwKSB7CiAgICAgIHByZWZpeCA9ICJESVNBQkxFIjsKICAgIH0KICAgIGlmICh0aGlzXy5pc0RyYWdnaW5nXyA9PT0gdHJ1ZSkgewogICAgICB0aGlzXy5tYXJrZXJfLnJlZHJhdyhmYWxzZSwgIkRSQUciLCBwcmVmaXggKyAiXyIgKyBpbWdJZHgpOwogICAgfQogIH0pOwogIAp9OwoKLyoqCiAqIEBwcml2YXRlCiAqIEBkZXNjIHBlZ21hbi1tYXJrZXIgZHJhZyBlbmQKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5tYXJrZXJEcmFnRW5kXyA9IGZ1bmN0aW9uIChsYXRsbmcpIHsKICB0aGlzLmlzRHJhZ2dpbmdfID0gZmFsc2U7CiAgdGhpcy5tYXBfLnBhblRvKGxhdGxuZyk7ICAKICB0aGlzLnNldExvY2F0aW9uQW5kUE9WKGxhdGxuZyk7Cn07CgovKioKICogQGRlc2MgR2V0IGN1cnJlbnQgUGFub3JhbWEgVmlldwogKiBAcmV0dXJuIHtHUG92fQogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLmdldFBvdiA9IGZ1bmN0aW9uICgpIHsKICBpZiAoIXRoaXMuaXNOdWxsKHRoaXMucG92XykpIHsKICAgIHJldHVybiB0aGlzLnN0T2JqXy5nZXRQT1YoKTsKICB9IGVsc2UgewogICAgcmV0dXJuIG51bGw7CiAgfQp9OwoKLyoqCiAqIEBkZXNjIFNldCBjdXJyZW50IFBhbm9yYW1hIFZpZXcKYyAqLwpFeHRTdHJlZXR2aWV3Q29udHJvbC5wcm90b3R5cGUuc2V0UG92ID0gZnVuY3Rpb24gKHBvdikgewogIGlmICghdGhpcy5pc051bGwocG92KSkgewogICAgdGhpcy5wb3ZfID0gcG92OwogICAgdGhpcy5zdE9ial8uc2V0UE9WKHBvdik7CiAgfQp9OwoKLyoqCiAqIEBkZXNjIEdldCBtYXJrZXIgZm9yIFN0cmVldHZpZXdDb250cm9sCiAqIEByZXR1cm4ge0dNYXJrZXJ9CiAqLwpFeHRTdHJlZXR2aWV3Q29udHJvbC5wcm90b3R5cGUuZ2V0TWFya2VyID0gZnVuY3Rpb24gKCkgewogIHJldHVybiB0aGlzLm1hcmtlcl87Cn07CgoKLyoqCiAqIEBkZXNjIFNldCBsb2NhdGlvbiBvZiBwYW5vcmFtYSBhbmQgbWFya2VyLCBhbmQgdmlldyBvZiBwYW5vcmFtYS4KICogQHBhcmFtIHtHTGF0TG5nfSBsYXRsbmcgbG9jYXRpb24KICogQHBhcmFtIHtHUG92fSBbcG92XSBWaWV3IG9mIHBhbm9yYW1hCiAqLwpFeHRTdHJlZXR2aWV3Q29udHJvbC5wcm90b3R5cGUuc2V0TG9jYXRpb25BbmRQT1YgPSBmdW5jdGlvbiAobGF0bG5nLCBwb3YpIHsKICBpZiAodGhpcy5pc051bGwocG92KSkgewogICAgdGhpcy5wb3ZfID0gdGhpcy5zdE9ial8uZ2V0UE9WKCk7CiAgfSBlbHNlIHsKICAgIHRoaXMucG92XyA9IHBvdjsKICB9CiAgCgogIHRoaXMubWFya2VyXy5zZXRMYXRMbmcobGF0bG5nKTsKICB2YXIgdGhpc18gPSB0aGlzOwogIHRoaXMuc3RDbGllbnRfLmdldE5lYXJlc3RQYW5vcmFtYShsYXRsbmcsIGZ1bmN0aW9uIChwYW5vRGF0YSkgewogICAgaWYgKHBhbm9EYXRhLmNvZGUgPT09IDIwMCkgewogICAgICBpZiAodGhpc18uaXNOdWxsKHBvdikpIHsKICAgICAgICB0aGlzXy5wb3ZfLnlhdyA9IHRoaXNfLmNvbXB1dGVBbmdsZV8obGF0bG5nLCBwYW5vRGF0YS5sb2NhdGlvbi5sYXRsbmcpOwogICAgICAgIHRoaXNfLm1hcmtlcl8ucmVkcmF3KGZhbHNlLCAiQU5HTEUiLCB0aGlzXy5wb3ZfLnlhdyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpc18ubWFya2VyXy5yZWRyYXcoZmFsc2UsICJBTkdMRSIsIDApOwogICAgICB9CiAgICAgIHRoaXNfLnNldEN0cmxTdGF1dHMoIk5PUk1BTCIpOwogICAgfSBlbHNlIHsKICAgICAgdGhpc18uc2V0Q3RybFN0YXV0cygiTUlOSSIpOwogICAgICB0aGlzXy5tYXJrZXJfLnJlZHJhdyhmYWxzZSwgIkFOR0xFIiwgMCk7CiAgICB9CiAgICB0aGlzXy5zdENsaWVudEVudW1fKHRoaXNfLCBwYW5vRGF0YSwgdGhpc18ucG92Xyk7CiAgfSk7Cn07CgovKioKICogQGRlc2MgQ29tcHV0ZSB0aGUgeWF3IGJldHdlZW4gMiBwb2ludHMuCiAqIHRha2VuIGZyb20gaHR0cDovL2dtYXBzLXNhbXBsZXMuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rL3N0cmVldHZpZXcvYW5nbGV0b3dhcmRzYnVpbGRpbmcuaHRtbAogKiBAcGFyYW0ge0dMYXRMbmd9IFtlbmRMYXRMbmddIGVuZCBsb2NhdGlvbgogKiBAcGFyYW0ge0dMYXRMbmd9IFtzdGFydExhdExuZ10gc3RhcnQgbG9jYXRpb24KICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5jb21wdXRlQW5nbGVfID0gZnVuY3Rpb24gKGVuZExhdExuZywgc3RhcnRMYXRMbmcpIHsKICB2YXIgREVHUkVFX1BFUl9SQURJQU4gPSA1Ny4yOTU3Nzk1OwogIHZhciBSQURJQU5fUEVSX0RFR1JFRSA9IDAuMDE3NDUzOwogIHZhciBkbGF0ID0gZW5kTGF0TG5nLmxhdCgpIC0gc3RhcnRMYXRMbmcubGF0KCk7CiAgdmFyIGRsbmcgPSBlbmRMYXRMbmcubG5nKCkgLSBzdGFydExhdExuZy5sbmcoKTsKICAvLyBXZSBtdWx0aXBseSBkbG5nIHdpdGggY29zKGVuZExhdCksIHNpbmNlIHRoZSB0d28gcG9pbnRzIGFyZSB2ZXJ5IGNsb3NlYnksCiAgLy8gc28gd2UgYXNzdW1lIHRoZWlyIGNvcyB2YWx1ZXMgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuCiAgdmFyIHlhdyA9IE1hdGguYXRhbjIoZGxuZyAqIE1hdGguY29zKGVuZExhdExuZy5sYXQoKSAqIFJBRElBTl9QRVJfREVHUkVFKSwgZGxhdCkgKiBERUdSRUVfUEVSX1JBRElBTjsKICBpZiAoeWF3ID49IDM2MCkgewogICAgeWF3IC09IDM2MDsKICB9IGVsc2UgaWYgKHlhdyA8IDApIHsKICAgIHlhdyArPSAzNjA7CiAgfQogIHJldHVybiB5YXc7Cn07CgoKLyoqCiAqIEBwcml2YXRlCiAqIEBpZ25vcmUKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5nZXREZWZhdWx0UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7CiAgcmV0dXJuIG5ldyBHQ29udHJvbFBvc2l0aW9uKEdfQU5DSE9SX0JPVFRPTV9SSUdIVCwgbmV3IEdTaXplKDAsIDApKTsKfTsKCi8qKgogKiBAcHJpdmF0ZQogKiBAaWdub3JlCiAqLwpFeHRTdHJlZXR2aWV3Q29udHJvbC5wcm90b3R5cGUuc2VsZWN0YWJsZSA9IGZ1bmN0aW9uICgpIHsKICByZXR1cm4gZmFsc2U7Cn07CgovKioKICogQHByaXZhdGUKICogQGlnbm9yZQogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLnByaW50YWJsZSA9IGZ1bmN0aW9uICgpIHsKICByZXR1cm4gdHJ1ZTsKfTsKCi8qKgogKiBAcHJpdmF0ZQogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLnJlbW92ZUNvbnRyb2xfID0gZnVuY3Rpb24gKCkgewogIHRoaXMuc3RPYmpfLnJlbW92ZSgpOwogIEdFdmVudC5jbGVhckluc3RhbmNlTGlzdGVuZXJzKHRoaXMuc3RPYmpfKTsKfTsKCi8qKgogKiBAcHJpdmF0ZQogKiBAZGVzYyBjaGFuZ2VkIHRoZSBwb3NpdGlvbiBvbiBzdHJlZXR2aWV3CiAqLwpFeHRTdHJlZXR2aWV3Q29udHJvbC5wcm90b3R5cGUuc3RJbml0aWFsaXplZF8gPSBmdW5jdGlvbiAobG9jYXRpb24pIHsKICBpZiAodGhpcy5pc051bGwobG9jYXRpb24ucG92KSkgewogICAgcmV0dXJuOwogIH0KCiAgaWYgKCF0aGlzLmlzTnVsbChsb2NhdGlvbi5wb3YueWF3KSB8fCB0aGlzLmlzTnVsbCh0aGlzLnBvdl8ueWF3KSkgewogICAgdGhpcy5wb3ZfID0gbG9jYXRpb24ucG92OwogIH0KICAKICBpZiAodGhpcy5pc051bGwobG9jYXRpb24ubGF0bG5nKSkgewogICAgcmV0dXJuOwogIH0KICB0aGlzLmxhdGxuZ18gPSBsb2NhdGlvbi5sYXRsbmc7CiAgdGhpcy5tYXJrZXJfLnNldExhdExuZyhsb2NhdGlvbi5sYXRsbmcpOwogIGlmICghdGhpcy5ib3VuZHNfLmNvbnRhaW5zTGF0TG5nKGxvY2F0aW9uLmxhdGxuZykpIHsKICAgIHRoaXMubWFwXy5wYW5Ubyhsb2NhdGlvbi5sYXRsbmcpOwogIH0KfTsKCi8qKgogKiBAcHJpdmF0ZQogKiBAZGVzYyAgICAgIGNyZWF0ZSBuZXcgU3RyZWV0dmlldyBQYW5vcmFtYQogKiAgICAgICAgICAgIGxlYWsgbWVtb3J5IHRvIGF2b2lkLgogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLmNyZWF0ZVN0cmVldHZpZXdQYW5vcmFtYV8gPSBmdW5jdGlvbiAobGF0bG5nLCBwb3YpIHsKICB2YXIgZmxhZyA9IGZhbHNlOwogIGlmICghdGhpcy5pc051bGwodGhpcy5zdE9ial8pKSB7CiAgICBHRXZlbnQuY2xlYXJJbnN0YW5jZUxpc3RlbmVycyh0aGlzLnN0T2JqXyk7CiAgICB0aGlzLnN0T2JqXy5yZW1vdmUoKTsKICAgIGZsYWcgPSB0cnVlOwogIH0KICAKICB2YXIgb3B0cyA9IHt9OwogIGlmIChsYXRsbmcpIHsKICAgIG9wdHMubGF0bG5nID0gbGF0bG5nOwogIH0KICBpZiAocG92KSB7CiAgICBvcHRzLnBvdiA9IHBvdjsKICB9CiAgCiAgdGhpcy5zdE9ial8gPSBuZXcgR1N0cmVldHZpZXdQYW5vcmFtYSh0aGlzLmZsYXNoQ29udGFpbmVyXywgb3B0cyk7CiAgdGhpcy5zdFZpZXdDbnRfID0gMDsKICAKICBHRXZlbnQuYmluZCh0aGlzLnN0T2JqXywgImluaXRpYWxpemVkIiwgdGhpcywgdGhpcy5zdEluaXRpYWxpemVkXyk7CiAgR0V2ZW50LmJpbmREb20odGhpcy5zdE9ial8sICJ5YXdjaGFuZ2VkIiwgdGhpcywgdGhpcy55YXdDaGFuZ2VkXyk7CiAgR0V2ZW50LmJpbmREb20odGhpcy5zdE9ial8sICJwaXRjaGNoYW5nZWQiLCB0aGlzLCAgdGhpcy5waXRDaGNoYW5nZWRfKTsKICAKfTsKCi8qKgogKiBAcHJpdmF0ZQogKiBAZGVzYyAgICAgIGNhbGxiYWNrIGZvciBHU3RyZWV0dmlld0NsaWVudAogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLnN0Q2xpZW50RW51bV8gPSBmdW5jdGlvbiAodGhpc18sIGdzdHJlZXR2aWV3ZGF0YSwgcG92KSB7CiAgaWYgKGdzdHJlZXR2aWV3ZGF0YS5jb2RlICE9PSAyMDApIHsKICAgIHRoaXNfLm1hcmtlcl8ucmVkcmF3KGZhbHNlLCAiQU5HTEUiLCAwKTsKICAgIHJldHVybjsKICB9CiAgaWYgKCF0aGlzXy5pc051bGwocG92KSkgewogICAgZ3N0cmVldHZpZXdkYXRhLmxvY2F0aW9uLnBvdiA9IHBvdjsKICB9CiAgCiAgdGhpc18uc3RPYmpfLnNldExvY2F0aW9uQW5kUE9WKGdzdHJlZXR2aWV3ZGF0YS5sb2NhdGlvbi5sYXRsbmcsIGdzdHJlZXR2aWV3ZGF0YS5sb2NhdGlvbi5wb3YpOwogIHRoaXNfLm1hcmtlcl8uaXNGaXJzdF8gPSBmYWxzZTsKCn07CgoKLyoqCiAqIEBwcml2YXRlCiAqIEBkZXNjIHlhd2NoYW5nZWQgb24gc3RyZWV0dmlldwogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLnlhd0NoYW5nZWRfID0gZnVuY3Rpb24gKHlhdykgewogIHRoaXMucG92Xy55YXcgPSB5YXc7CgogIHRoaXMubWFya2VyXy5yZWRyYXcoZmFsc2UsICJBTkdMRSIsIHlhdyk7Cn07CgovKioKICogQHByaXZhdGUKICogQGRlc2MgcGl0Y2hjaGFuZ2VkIG9uIHN0cmVldHZpZXcKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5waXRDaGNoYW5nZWRfID0gZnVuY3Rpb24gKHBpdGNoKSB7CiAgdGhpcy5wb3ZfLnBpdGNoID0gcGl0Y2g7Cn07CgoKCi8qKgogKiBAcHJpdmF0ZQogKiBAZGVzYyBtYWtlIGNvbnRhaW5lciBmb3IgRXh0U3RyZWV0dmlld0NvbnRyb2wKICogQGlnbm9yZQogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLmNyZWF0ZUNvbnRhaW5lcl8gPSBmdW5jdGlvbiAoY3RybFBvc1NpemUpIHsKICB2YXIgeCwgeSwgdywgaDsKCiAgLy9tYWtlIGNvbnRhaW5lcgogIHZhciBjb250YWluZXIgPSB0aGlzLmNyZWF0ZUVsZV8oY3RybFBvc1NpemUpOwogIHZhciBjb250YWluZXJJZnJhbWUgPSB0aGlzLmNyZWF0ZUVsZV8oY3RybFBvc1NpemUsICJpZnJhbWUiKTsKICBjb250YWluZXJJZnJhbWUuc3R5bGUuYm90dG9tID0gMDsKICBjb250YWluZXJJZnJhbWUuc3R5bGUucmlnaHQgPSAwOwogIGNvbnRhaW5lcklmcmFtZS5zdHlsZS5ib3JkZXJTdHlsZSA9ICJub25lIjsKICBjb250YWluZXJJZnJhbWUuc3JjID0gIiI7CiAgY29udGFpbmVySWZyYW1lLmZyYW1lYm9yZGVyID0gMDsKICBjb250YWluZXJJZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXJJZnJhbWUpOwoKICAvL21ha2UgY29udGFpbmVyIGZvciBvdmVydmlldyBtYXAuCiAgdmFyIG1haW5Db250YWluZXJGcmFtZVNpemUgPSB7fTsKICBtYWluQ29udGFpbmVyRnJhbWVTaXplLmxlZnQgPSB0aGlzLnBhZGRpbmdfOwogIG1haW5Db250YWluZXJGcmFtZVNpemUudG9wID0gdGhpcy5wYWRkaW5nXzsKICBtYWluQ29udGFpbmVyRnJhbWVTaXplLndpZHRoID0gY3RybFBvc1NpemUud2lkdGggLSB0aGlzLnBhZGRpbmdfIC0gKHRoaXMuX2lzX2llID8gMiA6IDApOwogIG1haW5Db250YWluZXJGcmFtZVNpemUuaGVpZ2h0ID0gY3RybFBvc1NpemUuaGVpZ2h0IC0gdGhpcy5wYWRkaW5nXyAtICh0aGlzLl9pc19pZSA/IDIgOiAwKTsKICAKICB2YXIgbWFpbkZyYW1lID0gdGhpcy5jcmVhdGVFbGVfKG1haW5Db250YWluZXJGcmFtZVNpemUpOwogIG1haW5GcmFtZS5zdHlsZS5ib3JkZXJTdHlsZSA9ICJzb2xpZCI7CiAgbWFpbkZyYW1lLnN0eWxlLmJvcmRlckNvbG9yID0gIiM4ODgiOwogIG1haW5GcmFtZS5zdHlsZS5ib3JkZXJXaWR0aCA9ICIxcHggMCAwIDFweCI7CiAgbWFpbkZyYW1lLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIjZThlY2Y4IjsKICBjb250YWluZXIuYXBwZW5kQ2hpbGQobWFpbkZyYW1lKTsKICAKICB2YXIgbWFpbkNvbnRhaW5lclNpemUgPSB7fTsKICBtYWluQ29udGFpbmVyU2l6ZS5sZWZ0ID0gMDsKICBtYWluQ29udGFpbmVyU2l6ZS50b3AgPSAwOwogIG1haW5Db250YWluZXJTaXplLndpZHRoID0gY3RybFBvc1NpemUud2lkdGggLSB0aGlzLnBhZGRpbmdfIC0gKHRoaXMuX2lzX2llID8gMiA6IDApOwogIG1haW5Db250YWluZXJTaXplLmhlaWdodCA9IGN0cmxQb3NTaXplLmhlaWdodCAtIHRoaXMucGFkZGluZ18gLSAodGhpcy5faXNfaWUgPyAyIDogMCk7CiAgdmFyIG1haW5XaW5kb3cgPSB0aGlzLmNyZWF0ZUVsZV8obWFpbkNvbnRhaW5lclNpemUpOwogIG1haW5GcmFtZS5hcHBlbmRDaGlsZChtYWluV2luZG93KTsKCgoKICAvL0Rvd24gYXJyb3cgYnV0dG9uCiAgeCA9IGN0cmxQb3NTaXplLndpZHRoIC0gKHRoaXMuX2lzX2llID8gMSA6IDApIC0gdGhpcy5hcnJvd0J0blRibF8uZG93bkFycm93LndpZHRoOwogIHkgPSBjdHJsUG9zU2l6ZS5oZWlnaHQgLSAgKHRoaXMuX2lzX2llID8gMSA6IDApIC0gdGhpcy5hcnJvd0J0blRibF8uZG93bkFycm93LmhlaWdodDsKICAKICB2YXIgYnRuQmFzZTEgPSB0aGlzLmNyZWF0ZUVsZV8odGhpcy5hcnJvd0J0blRibF8uZG93bkFycm93LCAiaWZyYW1lIik7CiAgYnRuQmFzZTEuc3R5bGUubGVmdCA9IHggKyAicHgiOwogIGJ0bkJhc2UxLnN0eWxlLnRvcCA9IHkgKyAicHgiOwogIGJ0bkJhc2UxLnN0eWxlLmJvcmRlclN0eWxlID0gIm5vbmUiOwogIGJ0bkJhc2UxLnNyYyA9ICIiOwogIGJ0bkJhc2UxLmZyYW1lYm9yZGVyID0gMDsKICBidG5CYXNlMS5ib3JkZXIgPSAwOwogIGJ0bkJhc2UxLmFsbG93dHJhbnNwYXJlbmN5ID0gdHJ1ZTsKICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnRuQmFzZTEpOwogIAogIHZhciBkb3duQXJyb3dCdG4gPSB0aGlzLm1ha2VJbWdEaXZfKHRoaXMuYXJyb3dCdG5UYmxfLnNyYywgdGhpcy5hcnJvd0J0blRibF8uZG93bkFycm93KTsKICBkb3duQXJyb3dCdG4uc3R5bGUuY3Vyc29yID0gInBvaW50ZXIiOwogIGRvd25BcnJvd0J0bi5zdHlsZS5sZWZ0ID0geCArICJweCI7CiAgZG93bkFycm93QnRuLnN0eWxlLnRvcCA9IHkgKyAicHgiOwogIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkb3duQXJyb3dCdG4pOwoKICAvL1VwIGFycm93IGJ1dHRvbgogIHggPSAwOwogIHkgPSAwOwogIHZhciBidG5CYXNlMiA9IHRoaXMuY3JlYXRlRWxlXyh0aGlzLmFycm93QnRuVGJsXy51cEFycm93LCAiaWZyYW1lIik7CiAgYnRuQmFzZTIuc3R5bGUudG9wID0geCArICJweCI7CiAgYnRuQmFzZTIuc3R5bGUubGVmdCA9IHkgKyAicHgiOwogIGJ0bkJhc2UyLnN0eWxlLmJvcmRlclN0eWxlID0gIm5vbmUiOwogIGJ0bkJhc2UyLnNyYyA9ICIiOwogIGJ0bkJhc2UyLmZyYW1lYm9yZGVyID0gMDsKICBidG5CYXNlMi5ib3JkZXIgPSAwOwogIGJ0bkJhc2UyLmFsbG93dHJhbnNwYXJlbmN5ID0gdHJ1ZTsKICBjb250YWluZXIuYXBwZW5kQ2hpbGQoYnRuQmFzZTIpOwogIAogIHZhciB1cEFycm93QnRuID0gdGhpcy5tYWtlSW1nRGl2Xyh0aGlzLmFycm93QnRuVGJsXy5zcmMsIHRoaXMuYXJyb3dCdG5UYmxfLnVwQXJyb3cpOwogIHVwQXJyb3dCdG4uc3R5bGUuY3Vyc29yID0gInBvaW50ZXIiOwogIHVwQXJyb3dCdG4uc3R5bGUubGVmdCA9IHggKyAicHgiOwogIHVwQXJyb3dCdG4uc3R5bGUudG9wID0geSArICJweCI7CiAgY29udGFpbmVyLmFwcGVuZENoaWxkKHVwQXJyb3dCdG4pOwoKICByZXR1cm4ge2NvbnRhaW5lciA6IGNvbnRhaW5lciwKICAgICAgICAgIGNvbnRhaW5lcklmcmFtZSA6IGNvbnRhaW5lcklmcmFtZSwKICAgICAgICAgIGRvd25BcnJvd0J0biA6IGRvd25BcnJvd0J0biwKICAgICAgICAgIHVwQXJyb3dCdG4gOiB1cEFycm93QnRuLAogICAgICAgICAgbWFpbldpbmRvdyA6IG1haW5XaW5kb3d9Owp9OwoKLyoqCiAqIEBkZXNjIFNwZWNpZnkgbWFpbiBjb250ZW50IGludG8gdGhlIG1hcCBkaXYuCiAqICBZb3UgY2FuIHNlbGVjdCBzdHJpbmdzOyAiTUFQIiBvciAiU1RSRUVUVklFVyIuCiAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50VHlwZQogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLnNldE1haW5Db250ZW50ID0gZnVuY3Rpb24gKGNvbnRlbnRUeXBlKSB7CiAgdmFyIHJlZnJlc2hTdHJlZXR2aWV3ID0gZmFsc2U7CiAgCiAgaWYgKGNvbnRlbnRUeXBlID09PSAiU1RSRUVUVklFVyIgJiYgdGhpcy5tYWluQ29udGVudF8gPT09ICJNQVAiKSB7CiAgICAvLyBtYXAgLT4gc3RyZWV0dmlldwogICAgdGhpcy5yZW1vdmVDb250cm9sXygpOwogICAgCiAgICB0aGlzLm1hcENvbnRhaW5lcl8ucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXJfKTsKICAgIHRoaXMuc3dhcE1hcENvbnRhaW5lcl8ucmVtb3ZlQ2hpbGQodGhpcy5tYXBDb250YWluZXJfKTsKICAgIAogICAgdGhpcy5zd2FwRmxhc2hDb250YWluZXJfLnN0eWxlLndpZHRoID0gIHRoaXMuc3dhcE1hcENvbnRhaW5lcl8uY2xpZW50V2lkdGggKyAicHgiOwogICAgdGhpcy5zd2FwRmxhc2hDb250YWluZXJfLnN0eWxlLmhlaWdodCA9IHRoaXMuc3dhcE1hcENvbnRhaW5lcl8uY2xpZW50SGVpZ2h0ICsgInB4IjsKICAgIAogICAgdGhpcy5mbGFzaENvbnRhaW5lcl8gPSB0aGlzLnN3YXBGbGFzaENvbnRhaW5lcl87CgogICAgdGhpcy5tYWluV2luZG93Xy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLnN3YXBNYWluV2luZG93XywgdGhpcy5tYWluV2luZG93Xyk7CiAgICB0aGlzLnN3YXBNYXBDb250YWluZXJfLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyXyk7CiAgICB0aGlzLnN3YXBNYWluV2luZG93Xy5hcHBlbmRDaGlsZCh0aGlzLm1hcENvbnRhaW5lcl8pOwogICAgdGhpcy5tYWluQ29udGVudF8gPSAiU1RSRUVUVklFVyI7CiAgICAKICAgIHJlZnJlc2hTdHJlZXR2aWV3ID0gdHJ1ZTsKICAgIAogIH0gZWxzZSBpZiAoY29udGVudFR5cGUgPT09ICJNQVAiICYmIHRoaXMubWFpbkNvbnRlbnRfID09PSAiU1RSRUVUVklFVyIpIHsKICAgIC8vIHN0cmVldHZpZXcgLT4gbWFwCiAgICB0aGlzLnJlbW92ZUNvbnRyb2xfKCk7CiAgICAKICAgIHRoaXMuc3dhcE1haW5XaW5kb3dfLnJlbW92ZUNoaWxkKHRoaXMubWFwQ29udGFpbmVyXyk7CiAgICB0aGlzLnN3YXBNYXBDb250YWluZXJfLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyXyk7CiAgICB0aGlzLnN3YXBNYWluV2luZG93Xy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLm1haW5XaW5kb3dfLCB0aGlzLnN3YXBNYWluV2luZG93Xyk7CgogICAgdGhpcy5mbGFzaENvbnRhaW5lcl8gPSB0aGlzLm1haW5XaW5kb3dfOwoKICAgIHRoaXMuc3dhcE1hcENvbnRhaW5lcl8uYXBwZW5kQ2hpbGQodGhpcy5tYXBDb250YWluZXJfKTsKICAgIHRoaXMubWFwQ29udGFpbmVyXy5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcl8pOwogICAgdGhpcy5tYWluQ29udGVudF8gPSAiTUFQIjsKICAgIAogICAgcmVmcmVzaFN0cmVldHZpZXcgPSB0cnVlOwogIH0KICAKICBpZiAocmVmcmVzaFN0cmVldHZpZXcgPT09IHRydWUpIHsKICAgIHRoaXMuY3JlYXRlU3RyZWV0dmlld1Bhbm9yYW1hXyh0aGlzLmxhdGxuZ18sIHRoaXMucG92Xyk7CgogICAgdGhpcy5tYXBfLmNoZWNrUmVzaXplKCk7CiAgICB0aGlzLm1hcF8uc2V0Q2VudGVyKHRoaXMubGF0bG5nXyk7CiAgfQp9OwoKLyoqCiAqIEBwcml2YXRlCiAqLwpFeHRTdHJlZXR2aWV3Q29udHJvbC5wcm90b3R5cGUuc3dhcE1hcDJDb3JuZXJXaW5kb3dfID0gZnVuY3Rpb24gKCkgewogIGlmICh0aGlzLm1haW5Db250ZW50XyA9PT0gIk1BUCIpIHsKICAgIHRoaXMuc2V0TWFpbkNvbnRlbnQoIlNUUkVFVFZJRVciKTsKICB9IGVsc2UgewogICAgdGhpcy5zZXRNYWluQ29udGVudCgiTUFQIik7CiAgfQogIEdFdmVudC50cmlnZ2VyKHRoaXMsICJvblN3YXBXaW5kb3ciLCB0aGlzLm1haW5Db250ZW50Xyk7Cn07CgovKioKICogQHByaXZhdGUKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5yZXNpemVDb3JuZXJXaW5kb3dfID0gZnVuY3Rpb24gKHBhcmFtLCBmaW5pc2hTdGF0dXMpIHsKICBwYXJhbS53aWR0aCA9IHRoaXMuY29udGFpbmVyXy5vZmZzZXRXaWR0aDsKICBwYXJhbS5oZWlnaHQgPSB0aGlzLmNvbnRhaW5lcl8ub2Zmc2V0SGVpZ2h0OwogIAogIHBhcmFtLnhTdGVwID0gTWF0aC5hYnMoKHBhcmFtLmVuZFNpemUud2lkdGggLSBwYXJhbS53aWR0aCkgLyA1KTsKICBwYXJhbS55U3RlcCA9IE1hdGguYWJzKChwYXJhbS5lbmRTaXplLmhlaWdodCAtIHBhcmFtLmhlaWdodCkgLyA1KTsKICBwYXJhbS5jbnQgPSAwOwogIAogIHZhciB0aGlzXyA9IHRoaXM7CiAgdmFyIHJlc2l6ZUFuaW1hdGlvbiA9IGZ1bmN0aW9uIChwYXJhbSkgewogICAgcGFyYW0ud2lkdGggPSBwYXJhbS53aWR0aCArIHBhcmFtLnhTdGVwICogcGFyYW0uc2l6ZURpcmVjdGlvbjsKICAgIHBhcmFtLndpZHRoID0gcGFyYW0ud2lkdGggPCAwICA/IDAgOiBwYXJhbS53aWR0aDsKICAgIHBhcmFtLmhlaWdodCA9IHBhcmFtLmhlaWdodCArIHBhcmFtLnlTdGVwICogcGFyYW0uc2l6ZURpcmVjdGlvbjsKICAgIHBhcmFtLmhlaWdodCA9IHBhcmFtLmhlaWdodCA8IDAgID8gMCA6IHBhcmFtLmhlaWdodDsKICAgIAogICAgdGhpc18uY29udGFpbmVyXy5zdHlsZS53aWR0aCA9IHBhcmFtLndpZHRoICsgInB4IjsKICAgIHRoaXNfLmNvbnRhaW5lcl8uc3R5bGUuaGVpZ2h0ID0gcGFyYW0uaGVpZ2h0ICsgInB4IjsKICAgIAogICAgdGhpc18uY29ybmVySW5mb18uY29udGFpbmVySWZyYW1lLnN0eWxlLndpZHRoID0gcGFyYW0ud2lkdGggKyAicHgiOwogICAgdGhpc18uY29ybmVySW5mb18uY29udGFpbmVySWZyYW1lLnN0eWxlLmhlaWdodCA9IHBhcmFtLmhlaWdodCArICJweCI7CiAgICAKICAgIHBhcmFtLmNudCsrOwogICAgaWYgKHBhcmFtLmNudCA8IDUpIHsKICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50czsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgYXJnLmNhbGxlZS5hcHBseShudWxsLCBhcmcpOwogICAgICB9LCAxMCk7CiAgICAgIAogICAgfSBlbHNlIHsKICAgICAgdGhpc18uY29udGFpbmVyXy5zdHlsZS53aWR0aCA9IHBhcmFtLmVuZFNpemUud2lkdGggKyAicHgiOwogICAgICB0aGlzXy5jb250YWluZXJfLnN0eWxlLmhlaWdodCA9IHBhcmFtLmVuZFNpemUuaGVpZ2h0ICsgInB4IjsKCiAgICAgIHRoaXNfLmNvcm5lckluZm9fLmNvbnRhaW5lcklmcmFtZS5zdHlsZS53aWR0aCA9IHBhcmFtLmVuZFNpemUud2lkdGggKyAicHgiOwogICAgICB0aGlzXy5jb3JuZXJJbmZvXy5jb250YWluZXJJZnJhbWUuc3R5bGUuaGVpZ2h0ID0gcGFyYW0uZW5kU2l6ZS5oZWlnaHQgKyAicHgiOwoKICAgICAgdGhpc18uY29udHJvbFN0YXR1c18gPSBmaW5pc2hTdGF0dXM7CiAgICB9CiAgfTsKICByZXNpemVBbmltYXRpb24ocGFyYW0pOwp9OwoKCgovKioKICogQHByaXZhdGUKICogQGRlc2MgICAgICBjcmVhdGUgZGl2IGVsZW1lbnQgd2l0aCBQTkcgaW1hZ2UKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5tYWtlSW1nRGl2XyA9IGZ1bmN0aW9uIChpbWdTcmMsIHBhcmFtcykgewogIHRoaXMuY2hlY2tCcm93c2VyQWdlbnQoKTsKICAKICB2YXIgaW1nRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgaW1nRGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICBpbWdEaXYuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAKICBpZiAocGFyYW1zLndpZHRoKSB7CiAgICBpbWdEaXYuc3R5bGUud2lkdGggPSBwYXJhbXMud2lkdGggKyAicHgiOwogIH0KICBpZiAocGFyYW1zLmhlaWdodCkgewogICAgaW1nRGl2LnN0eWxlLmhlaWdodCA9IHBhcmFtcy5oZWlnaHQgKyAicHgiOwogIH0KICAKICB2YXIgaW1nID0gbnVsbDsKICBpZiAodGhpcy5faXNfaWU2NykgewogICAgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBpZiAoIXRoaXMuaXNOdWxsKHBhcmFtcy53aWR0aCkpIHsKICAgICAgaW1nLnN0eWxlLndpZHRoID0gcGFyYW1zLndpZHRoICsgInB4IjsKICAgIH0KICAgIGlmICghdGhpcy5pc051bGwocGFyYW1zLmhlaWdodCkpIHsKICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IHBhcmFtcy5oZWlnaHQgKyAicHgiOwogICAgfQogICAgaW1nLnN0eWxlLmZpbHRlciA9ICJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9JyIgKyBpbWdTcmMgKyAiJykiOwogIH0gZWxzZSB7CiAgICBpbWcgPSBuZXcgSW1hZ2UoKTsKICAgIGltZy5zcmMgPSBpbWdTcmM7CiAgfQogIGltZy5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CiAgaWYgKCF0aGlzLmlzTnVsbChwYXJhbXMubGVmdCkpIHsKICAgIGltZy5zdHlsZS5sZWZ0ID0gcGFyYW1zLmxlZnQgKyAicHgiOwogIH0KICBpZiAoIXRoaXMuaXNOdWxsKHBhcmFtcy50b3ApKSB7CiAgICBpbWcuc3R5bGUudG9wID0gcGFyYW1zLnRvcCArICJweCI7CiAgfQogIGltZ0Rpdi5hcHBlbmRDaGlsZChpbWcpOwogIHJldHVybiBpbWdEaXY7Cn07CgoKLyoqCiAqIEBkZXNjIENoYW5nZSB2aXNpYmlsaXR5IG9mIHRoZSBjb250cm9sIHRvIGhpZGRlbi4KICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKCkgewogIHRoaXMuY29udGFpbmVyXy5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgLy90aGlzLnN3YXBNYXBDb250YWluZXJfLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICB0aGlzLmlzSGlkZGVuXyA9IHRydWU7Cn07CgovKioKICogQGRlc2MgQ2hhbmdlIHZpc2liaWxpdHkgb2YgdGhlIGNvbnRyb2wgdG8gdmlzaWJsZS4KICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkgewogIHRoaXMuY29udGFpbmVyXy5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOwogIC8vdGhpcy5zd2FwTWFwQ29udGFpbmVyXy5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOwogIHRoaXMuaXNIaWRkZW5fID0gZmFsc2U7Cn07CgovKioKICogQGRlc2MgUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbnRyb2wgaXMgaGlkZGVuLgogKiBAcmV0dXJuIHtCb29sZWFufQogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLmlzSGlkZGVuID0gZnVuY3Rpb24gKCkgewogIHJldHVybiB0aGlzLmlzSGlkZGVuXzsKfTsKCgovKioKICogQHByaXZhdGUKICogQGRlc2MgICAgICBjcmVhdGUgZGl2IGVsZW1lbnQKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5jcmVhdGVFbGVfID0gZnVuY3Rpb24gKHBhcmFtcywgc3BlY2lmeVRhZ05hbWUpIHsKCiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuaXNOdWxsKHNwZWNpZnlUYWdOYW1lKSA/ICJkaXYiIDogc3BlY2lmeVRhZ05hbWUpOwogIAogIGlmICghdGhpcy5pc051bGwocGFyYW1zKSkgewogICAgZm9yICh2YXIgcyBpbiBwYXJhbXMuc3R5bGUpIHsKICAgICAgaWYgKHMgaW4gZWxlbWVudC5zdHlsZSkgewogICAgICAgIGVsZW1lbnQuc3R5bGVbc10gPSBwYXJhbXMuc3R5bGVbc107CiAgICAgIH0KICAgIH0KICAgIGlmICghdGhpcy5pc051bGwocGFyYW1zLmxlZnQpKSB7CiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IHBhcmFtcy5sZWZ0ICsgInB4IjsKICAgIH0KICAgIGlmICghdGhpcy5pc051bGwocGFyYW1zLnJpZ2h0KSkgewogICAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gcGFyYW1zLnJpZ2h0ICsgInB4IjsKICAgIH0KICAgIGlmICghdGhpcy5pc051bGwocGFyYW1zLnRvcCkpIHsKICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBwYXJhbXMudG9wICsgInB4IjsKICAgIH0KICAgIGlmICghdGhpcy5pc051bGwocGFyYW1zLmJvdHRvbSkpIHsKICAgICAgZWxlbWVudC5zdHlsZS5ib3R0b20gPSBwYXJhbXMuYm90dG9tICsgInB4IjsKICAgIH0KICAgIGlmICghdGhpcy5pc051bGwocGFyYW1zLndpZHRoKSkgewogICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gcGFyYW1zLndpZHRoICsgInB4IjsKICAgIH0KICAgIGlmICghdGhpcy5pc051bGwocGFyYW1zLmhlaWdodCkpIHsKICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBwYXJhbXMuaGVpZ2h0ICsgInB4IjsKICAgIH0gICAgCiAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICB9CiAgcmV0dXJuIGVsZW1lbnQ7Cn07CgovKioKICogQGRlc2MgQ2hlY2sgYnJvd3NlciBhZ2VudAogKiBAcHJpdmF0ZQogKi8KRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLmNoZWNrQnJvd3NlckFnZW50ID0gZnVuY3Rpb24gKCkgewogIHZhciBhZ3QgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CiAgdGhpcy5faXNfaWUgICAgPSAoKGFndC5pbmRleE9mKCJtc2llIikgIT09IC0xKSAmJiAoYWd0LmluZGV4T2YoIm9wZXJhIikgPT09IC0xKSk7CiAgdGhpcy5faXNfaWU2NyAgPSAoYWd0LmluZGV4T2YoIm1zaWUgNiIpICE9PSAtMSB8fCBhZ3QuaW5kZXhPZigibXNpZSA3IikgIT09IC0xKTsKICB0aGlzLl9pc19pZTggICA9ICh0aGlzLl9pc19pZSA9PT0gdHJ1ZSAmJiB0aGlzLl9pc19pZTY3ID09PSBmYWxzZSk7CiAgdGhpcy5faXNfZ2Vja28gPSAoYWd0LmluZGV4T2YoImdlY2tvIikgIT09IC0xKTsKICB0aGlzLl9pc19vcGVyYSA9IChhZ3QuaW5kZXhPZigib3BlcmEiKSAhPT0gLTEpOwogIHRoaXMuX2lzX2Nocm9tZSA9IChhZ3QuaW5kZXhPZigiY2hyb21lIikgIT09IC0xKTsKICB0aGlzLl9pc19zYWZhcmkgPSAoYWd0LmluZGV4T2YoInNhZmFyaSIpICE9PSAtMSk7Cn07CgovKioKICogQHByaXZhdGUKICogQGRlc2MgICAgICBkZXRlY3QgbnVsbCxudWxsIHN0cmluZyBhbmQgdW5kZWZpbmVkCiAqIEBwYXJhbSAgICAgdmFsdWUKICogQHJldHVybiAgICB0cnVlICA6ICB2YWx1ZSBpcyBub3RoaW5nCiAqICAgICAgICAgICAgZmFsc2UgOiAgdmFsdWUgaXMgbm90IG5vdGhpbmcKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5pc051bGwgPSBmdW5jdGlvbiAodmFsdWUpIHsKICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwIHx8CiAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fAogICAgIHZhbHVlID09PSAiIiB8fAogICAgIHZhbHVlID09PSBudWxsIHx8CiAgICAgdHlwZW9mIHZhbHVlID09PSAidW5kZWZpbmVkIikgewogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBAcHJpdmF0ZQogKiBAZGVzYyAgICAgIGNhbGN1bGF0ZSBkb20gcG9zaXRpb24KICogQHBhcmFtICAgICB0YXJnZXRFbGUgOiB0YXJnZXQgRE9NIGVsZW1lbnQKICogQHJldHVybiAgICBHUG9pbnQKICovCkV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5zZXRFbGVtZW50U3R5bGVfID0gZnVuY3Rpb24gKGVsZSwgY3NzUHJvcGVydHksIHZhbHVlLCBwcmlvcml0eSkgewogIGlmICh0aGlzLl9pc19pZSkgewogICAgZWxlLnN0eWxlW2Nzc1Byb3BlcnR5XSA9IHZhbHVlOwogIH0gZWxzZSB7CiAgICBlbGUuc3R5bGUuc2V0UHJvcGVydHkoY3NzUHJvcGVydHksIHZhbHVlLCBwcmlvcml0eSk7CiAgfQp9OwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBAZGVzYyBDcmVhdGVzIGEgcGVnbWFuIG1hcmtlci4KICoKICogQHBhcmFtIHtNYXJrZXJPcHRpb25zfSBbb3B0c10gTmFtZWQgb3B0aW9uYWwgYXJndW1lbnRzLgogKiBAY29uc3RydWN0b3IKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpmdW5jdGlvbiBQZWdtYW5NYXJrZXIobGF0bG5nLCBvcHRfb3B0cykgewoKICBpZiAoRXh0U3RyZWV0dmlld0NvbnRyb2wucHJvdG90eXBlLmlzTnVsbChvcHRfb3B0cykpIHsKICAgIG9wdF9vcHRzID0ge307CiAgfQogIHRoaXMubWFwXyA9IG51bGw7CgogIHRoaXMuaWNvbl8gPSBuZXcgR0ljb24oKTsKICB0aGlzLmljb25fLmltYWdlID0gImh0dHA6Ly9tYXBzLmdzdGF0aWMuY29tL21hcGZpbGVzL2NiL21vZF9jYl9zY291dC9jYl9zY291dF9zcHJpdGVfMDAzLnBuZyI7CiAgdGhpcy5pY29uXy5pY29uU2l6ZSA9IG5ldyBHU2l6ZSg0OSwgNTIpOwogIHRoaXMuaWNvbl8uaWNvbkFuY2hvciA9IG5ldyBHUG9pbnQoMjQsIDM0KTsKICB0aGlzLmljb25fLmluZm9XaW5kb3dBbmNob3IgPSBuZXcgR1BvaW50KDE4LCAxMSk7CgogIHRoaXMubWFya2VyVGJsXyA9IHt9OwogIHRoaXMubWFya2VyVGJsXy5pbWFnZXMgPSBbXTsKICB0aGlzLm1hcmtlclRibF8uaW1hZ2VzLnB1c2goeyJsZWZ0IiA6IC00OSwgInRvcCIgOiAtNzExfSk7CiAgdGhpcy5tYXJrZXJUYmxfLmltYWdlcy5wdXNoKHsibGVmdCIgOiAwLCAgICJ0b3AiIDogLTM0fSk7CiAgdGhpcy5tYXJrZXJUYmxfLmltYWdlcy5wdXNoKHsibGVmdCIgOiAtOTgsICJ0b3AiIDogLTcxMX0pOwogIHRoaXMubWFya2VyVGJsXy5pbWFnZXMucHVzaCh7ImxlZnQiIDogLTk4LCAidG9wIiA6IC0zNjV9KTsKICB0aGlzLm1hcmtlclRibF8uaW1hZ2VzLnB1c2goeyJsZWZ0IiA6IDAsICAgInRvcCIgOiAtMzY1fSk7CiAgdGhpcy5tYXJrZXJUYmxfLmltYWdlcy5wdXNoKHsibGVmdCIgOiAtOTgsICJ0b3AiIDogLTQxN30pOwogIHRoaXMubWFya2VyVGJsXy5pbWFnZXMucHVzaCh7ImxlZnQiIDogLTk4LCAidG9wIiA6IC0zMTN9KTsKICB0aGlzLm1hcmtlclRibF8uaW1hZ2VzLnB1c2goeyJsZWZ0IiA6IC05OCwgInRvcCIgOiAtNzk3fSk7CiAgdGhpcy5tYXJrZXJUYmxfLmltYWdlcy5wdXNoKHsibGVmdCIgOiAtOTgsICJ0b3AiIDogLTE1MH0pOwogIHRoaXMubWFya2VyVGJsXy5pbWFnZXMucHVzaCh7ImxlZnQiIDogMCwgICAidG9wIiA6IC03MTF9KTsKICB0aGlzLm1hcmtlclRibF8uaW1hZ2VzLnB1c2goeyJsZWZ0IiA6IDAsICAgInRvcCIgOiAtNDE3fSk7CiAgdGhpcy5tYXJrZXJUYmxfLmltYWdlcy5wdXNoKHsibGVmdCIgOiAtOTgsICAgInRvcCIgOiAwfSk7CiAgdGhpcy5tYXJrZXJUYmxfLmltYWdlcy5wdXNoKHsibGVmdCIgOiAtNDksICJ0b3AiIDogLTM2NX0pOwogIHRoaXMubWFya2VyVGJsXy5pbWFnZXMucHVzaCh7ImxlZnQiIDogLTQ5LCAidG9wIiA6IC00MTd9KTsKICB0aGlzLm1hcmtlclRibF8uaW1hZ2VzLnB1c2goeyJsZWZ0IiA6IC00OSwgInRvcCIgOiAtODQ5fSk7CiAgdGhpcy5tYXJrZXJUYmxfLmltYWdlcy5wdXNoKHsibGVmdCIgOiAwLCAgICJ0b3AiIDogLTg0OX0pOwogIHRoaXMubWFya2VyVGJsXy5hbmdsZSA9IDM2MCAvIHRoaXMubWFya2VyVGJsXy5pbWFnZXMubGVuZ3RoOwoKICB0aGlzLm1hcmtlclRibF8uZHJnSW1hZ2VzID0ge307CiAgdGhpcy5tYXJrZXJUYmxfLmRyZ0ltYWdlcy5FTkFCTEVfTEVGVCA9IHsibGVmdCIgOiAwLCAidG9wIiA6IC0zMTN9OwogIHRoaXMubWFya2VyVGJsXy5kcmdJbWFnZXMuRU5BQkxFX1JJR0hUID0geyJsZWZ0IiA6IC00OSwgInRvcCIgOiAtNzk3fTsKICB0aGlzLm1hcmtlclRibF8uZHJnSW1hZ2VzLkRJU0FCTEVfTEVGVCA9IHsibGVmdCIgOiAtNTYsICJ0b3AiIDogLTE4NH07CiAgdGhpcy5tYXJrZXJUYmxfLmRyZ0ltYWdlcy5ESVNBQkxFX1JJR0hUID0geyJsZWZ0IiA6IDAsICJ0b3AiIDogLTc5N307CgoKICBvcHRfb3B0cy5pY29uID0gbmV3IEdJY29uKHRoaXMuaWNvbl8pOwogIG9wdF9vcHRzLmljb24uaW1hZ2UgPSBudWxsOwogIEdNYXJrZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfQoKLyoqCiAqIEBwcml2YXRlCiovClBlZ21hbk1hcmtlci5wcm90b3R5cGUgPSBuZXcgR01hcmtlcihuZXcgR0xhdExuZygwLCAwKSk7CgovKioKICogQHByaXZhdGUKKi8KUGVnbWFuTWFya2VyLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKG1hcCkgewogIEdNYXJrZXIucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB0aGlzLm1hcF8gPSBtYXA7CiAgCiAgdGhpcy5pY29uQ29udGFpbmVyXyA9IEV4dFN0cmVldHZpZXdDb250cm9sLnByb3RvdHlwZS5tYWtlSW1nRGl2Xyh0aGlzLmljb25fLmltYWdlLCB0aGlzLmljb25fLmljb25TaXplKTsKICB0aGlzLmljb25Db250YWluZXJfLnVuc2VsZWN0YWJsZSA9ICJvbiI7CiAgdGhpcy5pY29uQ29udGFpbmVyXy5zdHlsZS5Nb3pVc2VyU2VsZWN0ID0gIm5vbmUiOwogIHRoaXMuaWNvbkNvbnRhaW5lcl8uc3R5bGUuS2h0bWxVc2VyU2VsZWN0ID0gIm5vbmUiOwogIHRoaXMuaWNvbkNvbnRhaW5lcl8uc3R5bGUuV2Via2l0VXNlclNlbGVjdCA9ICJub25lIjsKICB0aGlzLmljb25Db250YWluZXJfLnN0eWxlLnVzZXJTZWxlY3QgPSAibm9uZSI7CiAgCiAgbWFwLmdldFBhbmUoR19NQVBfTUFSS0VSX1BBTkUpLmFwcGVuZENoaWxkKHRoaXMuaWNvbkNvbnRhaW5lcl8pOwp9OwoKLyoqCiAqIEBkZXNjIFJlZHJhdyBtYXJrZXIuCiAqIFRoaXMgbWV0aG9kIGlzIGV4dGVuZGVkIEdNYXJrZXIucmVkcmF3KCkgbWV0aG9kLgogKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBmcm9tIEV4dFN0cmVldHZpZXdDb250cm9sIHdpdGggYW5nbGUgcGFyYW1ldGVyLgogKiBUaGUgaWNvbiBzaG91bGQgYmUgY2hhbmdlIHRoZSBpY29uIGltYWdlLgoqLwpQZWdtYW5NYXJrZXIucHJvdG90eXBlLnJlZHJhdyA9IGZ1bmN0aW9uIChmb3JjZSwgdHlwZSwgdmFsdWUpIHsKICBpZiAoZm9yY2UgPT09IHRydWUpIHsKICAgIEdNYXJrZXIucHJvdG90eXBlLnJlZHJhdy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogIH0KICAKICB2YXIgcHhQb3MgPSB0aGlzLm1hcF8uZnJvbUxhdExuZ1RvRGl2UGl4ZWwodGhpcy5nZXRMYXRMbmcoKSk7CiAgdGhpcy5pY29uQ29udGFpbmVyXy5zdHlsZS5sZWZ0ID0gKHB4UG9zLnggLSB0aGlzLmljb25fLmljb25BbmNob3IueCkgKyAicHgiOwogIHRoaXMuaWNvbkNvbnRhaW5lcl8uc3R5bGUudG9wID0gKHB4UG9zLnkgLSB0aGlzLmljb25fLmljb25BbmNob3IueSkgKyAicHgiOwogIAogIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHsKICAgIHJldHVybjsKICB9CiAgCiAgdmFyIGljb25Qb3MsIGltZ0lkeDsKICB2YXIgaW1nID0gdGhpcy5pY29uQ29udGFpbmVyXy5maXJzdENoaWxkOwogIGlmICh0eXBlID09PSAiRFJBRyIpIHsKICAgIGljb25Qb3MgPSB0aGlzLm1hcmtlclRibF8uZHJnSW1hZ2VzW3ZhbHVlXTsKICB9IGVsc2UgewogICAgLy9BTkdMRQogICAgaW1nSWR4ID0gTWF0aC5mbG9vcih2YWx1ZSAvIHRoaXMubWFya2VyVGJsXy5hbmdsZSk7CiAgICBpY29uUG9zID0gdGhpcy5tYXJrZXJUYmxfLmltYWdlc1tpbWdJZHhdOwogIH0KCiAgaW1nLnN0eWxlLmxlZnQgPSBpY29uUG9zLmxlZnQgKyAicHgiOwogIGltZy5zdHlsZS50b3AgPSBpY29uUG9zLnRvcCArICJweCI7CgogIHRoaXMuaWNvbkNvbnRhaW5lcl8uc3R5bGUuekluZGV4ID0gR092ZXJsYXkuZ2V0WkluZGV4KHRoaXMuZ2V0TGF0TG5nKCkubGF0KCkgKyAxKTsKICAKfTsKCi8qKgogKiBAZGVzYyAgIFJldHVybnMgdGhlIGljb24KICogQHJldHVybiB7R0ljb259CiovClBlZ21hbk1hcmtlci5wcm90b3R5cGUuZ2V0SWNvbiA9IGZ1bmN0aW9uICgpIHsKICByZXR1cm4gdGhpcy5pY29uXzsKfTsKCg==]]></data>
	</file>
	<file>
	  <filename>/map/icon/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/map/icon/man_arrow-2.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAEsAAABQCAYAAABRX4iyAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sBCBM7O98gXCYAAA8sSURBVHja7Zvbb1zXdcZ/e+9znRvJISmRFCVbN9uyHTuuZDuXwnGaxnCCoAmKBE3dpiialz60z0XRv6HP7VOBpg2QBk36kuZSt25kp0l9qZ3YkmXZsiVRFO/kcG7nvvfuwxzKtC3XchJSqjQfcHAGw8uc88231vrW2vvAEEMMMcQQQ9zqEDfQtUigBvjl6xRoA/ZGuUC12x/4V0/AM69scYO45wBCSQIhOOw6HHMd7nYdjrgOE56DFIJcG7IbgSxnt4l6Gwbw3NNz2WebNb523+3sn52gNlJFuS5itYt99ZLsnr1kngF+BDwN5LdkGH71UWrf+jG/ffwoTxw7GHz5jqOHxczsAWr1MVw9z8byBc6dW+HlN/P50xf53tya/gfgZaB3SyVKa5G//2k+MtHgv/74c6E9/e37bXLur61NzllrjbUr/2TtS1+y8Xea9h//LLBf/Viw5Dvib4AHbqmcBfDkP8sjhba/c9skjz/yyCfrj335L/DGD0NyDla+CZs/gN5ZRD+h2vMxkaxdyvLZTNrTccTPb4mctYXXL5n9h2bEx7/4CVt78PjduFOfgtUfwtJ3YPNpsB10KonTCntEYA+FShyZ7k8ZxxxZX7OTwHqZ9G5+stY61McacuY37p1w7j3oQ+c1uPx30DoJqgoyQEiBADobQhBL7ppx6OSmCXoWaN0yZAGqE1lvtJLJqn4GLp6H/pnSUhkQYK1A5wKdgyMEo6HAk6IGjF6vwnS9yMqssb04TnSxcQpHvQQyBKc2IExaTCZI1iVWC4SypIVFG1uUZvW6uebrgc1mg/NvLdr0/JIDThWkGhAlBqesI+lccKEQ5K5hblPT03YJuAjom1lZ4l1ty/8oybd/9HzxsOswdvSwAiuwPYg3JdGyQzzvYjdc1J6Crsh49jm9eX7dvAlcvtmroS17vhrgAd7pCzY/v1wY37WcuFMxOy5xM4d0zaF33qW9rOhlBZ0o5qVWEr/4hj4LXLhV2p07gceBO4BjwNEopvkvP9EstiK+/jmf3zyoaCrB6LRhSWX8+GLMD06mvDxXdICXyip4U7c7Ehht1MI/mpqsff2Txw+Mj/nhXt1DOsqj12nbbmtRTI51GKloPOtQFIYkN3QTw5mLGSsbtuu68vRcIk6tJ/ZlML8AXgXWbjZlOcCBwBcPze7x7/3aF2Z4cHYWt1XB9SWXLy2IF543/PiVnOfO9OgWObmRzNR87t8T8Pghl/wOt97C+9gLS72PnV3prfa73X+NU/2d3PIM0N0tz7VrYeipVNe9NfZXn6OWnWV9KSQYjWnUCo7fJzg8U6W74ZF2Ndo28asTjEw2qd1+iHD/AdTYCGdf/AU/PfnTyX9/4fRXXlvq1y/3CYDvA9HNQpYGll1l2o7MCGQLioQi8RFeRKUqqIyEzMw62ESjY8j0GIYK0luneihEjUjy1jp3Fqt0vYwzgape9tQsfT25m/Znt8hadJTYMFairQdGIYTFrTu4oxp0XGZQg4tCpB55L0VEryDVWdKFgPmnwK5BuJEz4UjqrhuDznZzkrp7YeiSOWp7XRFv36Z9Z52xxmJt+Ts6Bl0ghIcVLhaBLX1+OTURNx1ZF5eMHa0J8sKCC9Zuc2DbtWHF4GdWgJVgDaARUoAQWDHgxhF0y+nDrrn5XYv3XgxvzBvSfKAHcc2fLAD5DnKNBU+JNeDSTUnWO728xa0bhLLvCcH3maxizSBsDZBpi7EkQH83c9aukiW3eHEsTmgG6rIfLCxroIgEthAU1rKRaNqpNkBx05J1RVkShHONqVmALQR5V0IuyI1lMSpYjbXY7evfzd5Q2G0ECPnhytiV6vj2iPBXGj4C9bK5D8rmXrzrK00ZrCR1SgXvKllGbOXrHHQsBoXuWpkWb5fNX1JSchs5NaBRvg7K97ePkSyQla3UMrABFLtJVioEVikEkSRZV4STGiXNFo07jRDYB0yVZMkPmLnVgPGSTAms7GbMtxzFnO+K4srVKftOW3nNqVpsmdKrZb4tBW3HCLC/JKtRhp0qD1keYtvrLcPrlYdDmWZ3C30pxZqxdooch0JQ9CXKs4OquEWa+eBcJgQoQR/Y3OaznPLG6qWKIiAub3xLUY3yK9HXMLLSQFKGYgyY3SRLam3VWtsy6UHWHszYw1gQTmicSqkyaz+wmAL4SlwqTekWUWPAgfLsbcs7OVAB3Gs0sFuEJcASMF/mrN1d3enGON98MvfvayhuyxX7MkG969G5YJEOePWcYBxMILEa0JrtVUCIgXVYjQuWoiIp3x4HJspQ28pFury3yocI8rRUY7c8R6Xp7V0P67Acp/bnP3qu8M9Vs5n7x0TwmaqrbnMcVKYwuSCtWIoYREPgVARBGCIcc+U+lQBtYTXWxJpKGbwz5TFSEuOWSbkKVBEILOdLCyDeR0lboRmV09fVUpXXzWc9bQyvLazah1+/mH7p5dH884cf9Jt33efI6aYi7wmiVUG84hGv5lRma4w9uB/8S9j5wWzPkQIpIB2IbRa4h8Gia6VU2D4Gs/47EewVUowALYz9W2t5aVvbLq4W2eX/2lLm6rvDdjeXwopCs9CL+DdgajkyD2XKNAiNp0ZAhQLpCdxKTpBcwh2dxMpRhLOC8gaRcK6dcWo9IysMwF3AF4FpYEK6crw2GYz4NXevE6i9bsVxo7WE9uX+VJGaPVhbLUPs/a7PK8nRpQk110tZ2/NFH5iruqLjCqFNLiAXIMEbs3jNDOQCJoNodZow8Ik7gtVYc3Ih5emVGKskSO50PTkpBAedQDX9hkdjOqQ+VSFs+rieYvnVFt3lKCFFluH5fiFoyrDrlMn8qg369Vq+v3oDvDXHkoKsq1g/4yHXq8wt+Dx1KeF7F3q82isIJgPGJoLZ2t5wujEVesGIh/IURVrgBA5CQOt8l85iRBYVuTWslCRsN56izHnF1hcIrJRVsLjevSHAnjIZf0LndkJrHCmuNgQUmEKQdwVmxaG7LFmLMzYE6MmAfScmqTZ916s5bqUZ4FUdhBTkSUEea/orMa25HtFa0rOa0yUJWZmX1DYf1WWwyXej/J3oejfSWxXqdumIE8pVn8pj87AKmDGDDTLv+1fCAaksUlo8AaNNH7OvxuyJCbyKg84M1lp0PnCyUkmybkLrQpf2fJ+4k10EninJkNtIKkpiFsver3OjTB0awJ8An/Xr7t23fXxvLS5ENehHvhsmwupr63GEAL/mEjS8K3P6wVQQhBQYbUl7GZ3FiM5CZJN2npvcvg48X3oov8xNG2WlWyud+TXvhN5pso4Aj4/ur/3eyGz1ePNgzZm6t8nmRk5xERwvA1t8IEnaQpRbTChQnhwsaBh7xexba9GZpr8a057v012KTZHql4BTZZhtJfCtkGvxS2zk3UmyQuAr4aj35/tPTEwd/q0Zse+BCRDw1gsbtJc7gzJkPjiGc2NZTzSxq8Da9zhLayx5UtBfS+gtR0SttA88BbxS5qjNsnVZ+jBK2i2yJoA/bd5e/93p+5vTRx+bpXmwjjUWoQRCDCKo1bV0I/t/NiRCDMjaSDVJaN8zTthqvnVuSbsFRWq6JUlvlceWkqJfhaidHCvPAF9qHqo/cPjRGSaONPCqDkWqMYUBYykKy9K6od234AlwxFWvRorBQkWmLVdNb2XqUq6kOhng1d0tAVwQSrwOLJTK+pWf0tgJsiQwIyS3jx9qcODhSYQUFIm+oiClBgul82uwsGYht4PEZK42Tn634N5bPqUShKMe+x4YpzFdCYGjwJLVtsuvcVvlToThiOOryXDMc/0RF6kkCP22CoylPuETHRrh1Mk26z9MOfVmn+PHHE4cc5k+pECA74CvBH1tWY0K5ts5Uc2jKgZ5zuQWay1ezcUNFV7Vpdr0aV3ssfxqy0s7+dEi1edKk3nDkhUKJaqOrwwG8rh4h2KshnDEZfzICOuLe7lw3qM9F3G+n3N+teDEgua2fRoZGy73NL+41OfkQkzbldT3hoxMh/hVBydQSCXw6y5uxcGrOAR1F7/u4lUdkfWL6TJ3zt/IZBmdaZ10MuJWStLOcMOBw7Z2oAblSkZmqzz0xEGijRnW3tjkZ/+5yA++u8GYjfnDx+Cu2Zw3L0d885VNTi2nzNzX5PaHJpm6t4kTKPyaixsohBJIKTHa0FuN6S1HJJ3M6swU79e23EhkrZnCLmT9QrYv99m82GX86Aiu52CKgSfayjPKlVQmAiZUE1n12fzoJOlyn5ObLZ5dykizy/CRCvd85jCzx8ZoHqgRjg3qoXIl0hksjylPYhNLdzGmsxCRbGbWGt4orcINTVYBLOrMbPaW48bauQ5ezaU6GaI8iVTlBg9rKVKNEFAb9xidCSk+2qS9GPPWsxUuz0dUxnP2H2sycbROZTxAKFE69+1Ww5JHBdF6Snu+R38twRqSsgpyo5NFWapPJd18bO1cu65zw8TREcZuq+M33MGWd132zhZsYcl0AXZA3D2PzQw8GSAdMQjh0rVf6RuFuDJDaM/3WX1tk9ZcjzzWMNhd82vHTj0VZoDcaDObJ/qAX3MQCPKoIO3m6MwgpMANFMpTIAdGVUiJciReqHArDm6oUI5COgIpxZWz1Zasm9Nfidmc69Oe67FxocfCy+v0luMzRaK/AfyMX/P2yR1RlkB0Lfb7abc4aHR0qDYZTOnMyt5yTDjmU9sTUNsbUmkGOMHg+xrsvyoV8y6jZS1XekGrDUWiiTczuksRm3M9olZKdzmmdbGX5LF+EvgWO7ANfKeXgo8g+IJy5F/W9oR7xg/WGT1QJWh4CDX4aDcclHy36uD4EiHlu/o+Q5Easn5B3i8GXYAerDVmUcHG+S7rb3XoLEUbOjV/bw3fBv57p2ZNO4ZqI5T9TnwQ+LwbOp+uNP0HvYoz69ddgoZ7xQIEox7hiIfjq/dckbWgM03WLUi6GWk3J4sK0l5O1stJOnkvaqXPZr3iSeA/gDPl5JP/b8rajkeAPwAedUO1tzFdIWh4nldzXDdUyq+6Qrryvc20AKsteaLJY22yfp4n7SzrLEUmaectBg8PfAPEd8Hu6APnu0lWADSBManEncpXx4XgAeCoEGIaQfUaljxWrbVvYHlR5+ZFnZvXSi+1yi48aH69nr6vls3uoXIpq8nbGzbM1YcwJKUlWShHL+fKufkQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDHEV/C/tGucFu6DYXgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/map/lookup.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGh0bWw+DQogIDxoZWFkPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+DQogICAgPHRpdGxlPkdldCBkZWZhdWx0IG1hcmtlciAtIEV4dFN0cmVldHZpZXdDb250cm9sPC90aXRsZT4NCiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL21hcHMuZ29vZ2xlLmNvbS9tYXBzP2ZpbGU9YXBpJmFtcDt2PTImYW1wO3NlbnNvcj1mYWxzZSZhbXA7a2V5PUFCUUlBQUFBalUwRUpXbldQTXY3b1EtampTN2RZeFFHajBQcXNDdHhLdmFyc29TLWlxTGRxWlNLZnhSZG1vUG1HbDdZOTMzNVdMQzM2d0lHWWE2bzVRIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0Pg0KICAgICA8c2NyaXB0IHNyYz0iZXh0c3RyZWV0dmlld2NvbnRyb2wuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KIA0KICAgIHZhciBleHRTdHJlZXR2aWV3Q29udHJvbCA9IG51bGw7DQogICAgdmFyIGN0cmxNYXJrZXIgPSBudWxsOw0KIA0KICAgIGZ1bmN0aW9uIGluaXRpYWxpemUgKCkgew0KICAgICAgaWYgKEdCcm93c2VySXNDb21wYXRpYmxlKCkpIHsNCiAgICAgICAgdmFyIG1hcCA9IG5ldyBHTWFwMihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFwX2NhbnZhcyIpKTsNCiAgICAgICAgbWFwLnNldENlbnRlcihuZXcgR0xhdExuZyg0OC40MjE3MzkyMjcwNTQ4MSwtMTIzLjM2ODY3NTcwODc3MDc1KSwgMTcpOw0KICAgICAgICBtYXAuYWRkQ29udHJvbChuZXcgR0xhcmdlTWFwQ29udHJvbCgpKTsNCiAgICAgICAgbWFwLmFkZENvbnRyb2wobmV3IEdNYXBUeXBlQ29udHJvbCgpKTsNCiAgICAgICAgbWFwLmFkZE92ZXJsYXkobmV3IEdTdHJlZXR2aWV3T3ZlcmxheSgpKTsNCgkJDQogICAgICAgIHZhciBvcHRzXyA9IHsNCgkJLy9tYWluQ29udGVudCA6ICJTVFJFRVRWSUVXIiwNCiAgICAgICAgICAgICAgICAgICAgICBwb3YgOiB7eWF3OjExMC42NCwgcGl0Y2g6LTE0LjY3LCBwYW5vSWQ6bnVsbH0sDQoJCQkJICAgc2l6ZSA6IG5ldyBHU2l6ZSgzMDAsIDMwMCkNCiAgICAgICAgIC8vIG1haW5Db250ZW50IDogIlNUUkVFVFZJRVciDQoJCQkJICAgDQogICAgICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgZXh0U3RyZWV0dmlld0NvbnRyb2wgPSBuZXcgRXh0U3RyZWV0dmlld0NvbnRyb2wob3B0c18pOw0KICAgICAgICBtYXAuYWRkQ29udHJvbChleHRTdHJlZXR2aWV3Q29udHJvbCk7DQogICAgICAgIA0KICAgICAgICAvL2dldCBkZWZhdWx0IG1hcmtlcidzIGhhbmRsZQ0KICAgICAgICBjdHJsTWFya2VyID0gZXh0U3RyZWV0dmlld0NvbnRyb2wuZ2V0TWFya2VyKCk7DQogICAgICAgIGN0cmxNYXJrZXIub3BlbkluZm9XaW5kb3coIkNsaWNrIG1lIHRvIGdldCBDb29yZGluYXRlcyEiKTsNCiAgICAgICAgR0V2ZW50LmFkZExpc3RlbmVyKGN0cmxNYXJrZXIsICJjbGljayIsIG9uQ3RybE1hcmtlckNsaWNrKTsNCiAgICAgICAgDQogICAgICAgIG1hcC5hZGRPdmVybGF5KG5ldyBHU3RyZWV0dmlld092ZXJsYXkoKSk7DQoJCWdlb2NvZGVyID0gbmV3IEdDbGllbnRHZW9jb2RlcigpOw0KDQogICAgICB9DQogICAgfQ0KCQ0KICAgIA0KICAgIGZ1bmN0aW9uIG9uQ3RybE1hcmtlckNsaWNrIChsYXRsbmcpIHsNCiAgICAgIHZhciB0eHQgPSBjdHJsTWFya2VyLmdldExhdExuZygpICsgIjxicj4iOw0KICAgICAgdmFyIHBvdiA9IGV4dFN0cmVldHZpZXdDb250cm9sLmdldFBvdigpOw0KICAgICAgdHh0ICs9ICJ5YXc6IiArIHBvdi55YXcgKyAiPGJyPiI7DQogICAgICB0eHQgKz0gInBpdGNoOiIgKyBwb3YucGl0Y2ggKyAiPGJyPiI7DQogICAgICB0eHQgKz0gInpvb206IiArIHBvdi56b29tOw0KICAgICAgY3RybE1hcmtlci5vcGVuSW5mb1dpbmRvd0h0bWwodHh0KTsNCiAgICB9DQoJDQoNCg0KDQpmdW5jdGlvbiBzaG93QWRkcmVzcyhhZGRyZXNzKSB7DQogICAgICBpZiAoZ2VvY29kZXIpIHsNCiAgICAgICAgZ2VvY29kZXIuZ2V0TGF0TG5nKA0KICAgICAgICAgIGFkZHJlc3MsDQogICAgICAgICAgZnVuY3Rpb24ocG9pbnQpIHsNCiAgICAgICAgICAgIGlmICghcG9pbnQpIHsNCiAgICAgICAgICAgICAgYWxlcnQoYWRkcmVzcyArICIgbm90IGZvdW5kIik7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICANCgkJCSBleHRTdHJlZXR2aWV3Q29udHJvbC5zZXRMb2NhdGlvbkFuZFBPVihwb2ludCwgNTAwLC0xMCwwKTsNCiAgICAgICAgICAgIAkgICAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgKTsNCiAgICAgIH0NCiAgICB9DQoNCg0KDQoNCgkNCgkNCiAgICA8L3NjcmlwdD4NCiAgPC9oZWFkPg0KICA8Ym9keSBvbmxvYWQ9ImluaXRpYWxpemUoKSIgb251bmxvYWQ9IkdVbmxvYWQoKSI+DQogICAgPGRpdiBpZD0ibWFwX2NhbnZhcyIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDkwJSI+PC9kaXY+DQogICAgPGg0PkVudGVyIGFkZHJlc3MgYmVsb3csIHRoZW4gZHJhZyB0aGUgcGVnbWFuIHRvIGZpbmVseSBhZGp1c3QsIGNsaWNrIHBlZ21hbiBmb3IgY29vcmRpbmF0ZXMuIHN3aXRjaCBiZXR3ZWVuIG1hcC9zdHJlZXR2aWV3IGJ5IGNsaWNraW5nIG9uIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHZpZXdwb3J0PC9oND4NCiAgICA8cD4NCiAgICANCiAgICA8L3A+DQoJPGZvcm0gYWN0aW9uPSIjIiBvbnN1Ym1pdD0ic2hvd0FkZHJlc3ModGhpcy5hZGRyZXNzLnZhbHVlKTsgcmV0dXJuIGZhbHNlIj4NCg0KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6MzUwcHgiIG5hbWU9ImFkZHJlc3MiIHZhbHVlPSIzNTAgNXRoIEF2ZSwgTmV3IFlvcmssIE5ZIDEwMDAxLCBVU0EiIC8+DQogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyEiIC8+DQo8YnI+DQoJDQoNCg0KICA8L2JvZHk+DQo8L2h0bWw+DQogDQoNCg==]]></data>
	</file>
	<file>
	  <filename>/map/lookup2.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOnY9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIj4NCjxoZWFkPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPg0KICAgIDx0aXRsZT5Hb29nbGUgTWFwczwvdGl0bGU+DQogDQogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9tYXBzLmdvb2dsZS5jb20vbWFwcz9maWxlPWFwaSZhbXA7dj0yJmFtcDtrZXk9QUJRSUFBQUF6czB6SUFXeTAtaDUzcFJteXFGeU9oUnpETFl1R01qbXdvc2RCVkppUnVZeVZPV1RhQlJiV2tSX2psWGlJeE1LUjVvS2FpcVhQdzFJaWciDQogICAgICAgIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQogDQo8L2hlYWQ+DQo8Ym9keSBvbnVubG9hZD0iR1VubG9hZCgpIj4NCiAgICBMYXRpdHVkZTombmJzcDs8aW5wdXQgaWQ9InR4dExhdCIgdHlwZT0idGV4dCIgLz4NCiAgICBMb25naXR1ZGU6Jm5ic3A7PGlucHV0IGlkPSJ0eHRMb25nIiB0eXBlPSJ0ZXh0IiAvPjxiciAvPg0KICAgIFlhdzombmJzcDsmbmJzcDs8aW5wdXQgaWQ9InR4dFlhdyIgdHlwZT0idGV4dCIgIC8+DQogICAgUGl0Y2g6Jm5ic3A7Jm5ic3A7PGlucHV0IGlkPSJ0eHRQaXRjaCIgdHlwZT0idGV4dCIgIC8+DQogICAgWm9vbTombmJzcDsmbmJzcDs8aW5wdXQgaWQ9InR4dFpvb20iIHR5cGU9InRleHQiIHNpemU9IjQiIC8+PGJyIC8+DQogICAgPGRpdiBpZD0icGFub3JhbWEiIHN0eWxlPSJ3aWR0aDogNjAwcHg7IGhlaWdodDogMzAwcHg7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGlkPSJtYXAiIHN0eWxlPSJ3aWR0aDogNjAwcHg7IGhlaWdodDogMzAwcHg7Ij4NCiAgICA8L2Rpdj4NCiAgICANCiANCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogICAgICAgIC8vPCFbQ0RBVEFbDQogDQogICAgICAgIHZhciBhcnJvd0ljb24gPSBuZXcgR0ljb24oKTsNCiAgICAgICAgYXJyb3dJY29uLmljb25TaXplID0gbmV3IEdTaXplKDI0LCAyNCk7DQogICAgICAgIGFycm93SWNvbi5zaGFkb3dTaXplID0gbmV3IEdTaXplKDEsIDEpOw0KICAgICAgICBhcnJvd0ljb24uaWNvbkFuY2hvciA9IG5ldyBHUG9pbnQoMTIsIDEyKTsNCiAgICAgICAgYXJyb3dJY29uLmluZm9XaW5kb3dBbmNob3IgPSBuZXcgR1BvaW50KDAsIDApOw0KICAgICAgICBhcnJvd0ljb24uaW1hZ2UgPSAiaHR0cDovL3d3dy5nb29nbGUuY29tL2ludGwvZW5fQUxML21hcGZpbGVzL2Rpcl8wLnBuZyI7DQogDQogICAgICAgIHZhciBtYXAgPSBuZXcgR01hcDIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1hcCIpKTsNCiAgICAgICAgLy90aGUgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgcGl0Y2gsIHlhdyBhbmQgem9vbSBtaWdodCBhbGwgY29tZSBmcm9tIGEgd2ViIHNlcnZpY2UgY2FsbA0KICAgICAgICB2YXIgbGF0bG5nID0gbmV3IEdMYXRMbmcoNDguNDIxNzM5MjI3MDU0ODEsLTEyMy4zNjg2NzU3MDg3NzA3NSk7DQogICAgICAgIHZhciBteVBvdiA9IHsgeWF3OiAxMTAuNjQsIHBpdGNoOiAtMTQuNjd9Ow0KICAgICAgICANCiAgICAgICAgbWFwLnNldENlbnRlcihsYXRsbmcsIDE2KTsNCiAgICAgICAgbWFwLmFkZENvbnRyb2wobmV3IEdNYXBUeXBlQ29udHJvbCgpKTsNCiAgICAgICAgbWFwLmFkZENvbnRyb2wobmV3IEdMYXJnZU1hcENvbnRyb2woKSk7DQogICAgICAgIG1hcC5hZGRPdmVybGF5KG5ldyBHU3RyZWV0dmlld092ZXJsYXkoKSk7DQogICAgICAgIGdlb2NvZGVyID0gbmV3IEdDbGllbnRHZW9jb2RlcigpOw0KICAgICAgICB2YXIgc3ZwID0gbmV3IEdTdHJlZXR2aWV3UGFub3JhbWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhbm9yYW1hIikpOw0KICAgICAgICBzdnAuc2V0TG9jYXRpb25BbmRQT1YobGF0bG5nLCBteVBvdik7IC8vdGhpcyBpbml0aWFsaXplcyB0aGUgdGhlIHN0cmVldCB2aWV3IHBhbm9yYW1hDQogICAgICAgIA0KICAgICAgICB2YXIgYXJyb3cgPSBuZXcgR01hcmtlcihuZXcgR0xhdExuZyg5MCwgMCksIHsgaWNvbjogYXJyb3dJY29uIH0pOw0KICAgICAgICBtYXAuYWRkT3ZlcmxheShhcnJvdyk7DQogICAgICAgIGFycm93LnNldExhdExuZyhsYXRsbmcpOw0KICAgICAgICB2YXIgbGFzdFBvaW50Ow0KIA0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHh0TGF0IikudmFsdWUgPSBsYXRsbmcubGF0KCk7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0eHRMb25nIikudmFsdWUgPSBsYXRsbmcubG5nKCk7DQogDQogICAgICAgIC8vbGlzdGVuZXIgcmVhY3RzIHRvIHRoZSBjbGljayBldmVudCBvbiB0aGUgbWFwDQogICAgICAgIEdFdmVudC5hZGRMaXN0ZW5lcihtYXAsICJjbGljayIsIGZ1bmN0aW9uKG92ZXJsYXksIHBvaW50KSB7DQogICAgICAgICAgICBpZiAoIW92ZXJsYXkpIHsNCiAgICAgICAgICAgICAgICBzdnAucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgc3ZwLnNldExvY2F0aW9uQW5kUE9WKHBvaW50KTsNCiAgICAgICAgICAgICAgICBhcnJvdy5zZXRMYXRMbmcocG9pbnQpOw0KICAgICAgICAgICAgICAgIGxhc3RQb2ludCA9IHBvaW50Ow0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0eHRMYXQiKS52YWx1ZSA9IHBvaW50LmxhdCgpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0eHRMb25nIikudmFsdWUgPSBwb2ludC5sbmcoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgICAgIA0KICAgICAgICAvL2xpc3RlbmVyIHJlYWN0cyB0byB0aGUgeWF3Y2hhbmdlZCBldmVudCBvbiB0aGUgc3RyZWV0dmlldyBwYW5vcmFtYQ0KICAgICAgICBHRXZlbnQuYWRkTGlzdGVuZXIoc3ZwLCAieWF3Y2hhbmdlZCIsIGZ1bmN0aW9uKHlhdykgew0KICAgICAgICAgICAgdmFyIGRpciA9IE1hdGgucm91bmQoeWF3IC8gMykgKiAzOw0KICAgICAgICAgICAgd2hpbGUgKGRpciA+PSAxMjApIHsgZGlyIC09IDEyMDsgfQ0KICAgICAgICAgICAgYXJyb3cuc2V0SW1hZ2UoImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbnRsL2VuX0FMTC9tYXBmaWxlcy9kaXJfIiArIGRpciArICIucG5nIik7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHh0WWF3IikudmFsdWUgPSB5YXc7DQogICAgICAgIH0pOw0KICAgICAgICANCiAgICAgICAgLy9saXN0ZW5lciByZWFjdHMgdG8gcGl0Y2hjaGFuZ2VkIGV2ZW4gb24gc3RyZWV0IHZpZXcgcGFub3JhbWENCiAgICAgICAgR0V2ZW50LmFkZExpc3RlbmVyKHN2cCwgInBpdGNoY2hhbmdlZCIsIGZ1bmN0aW9uKHBpdGNoKSB7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHh0UGl0Y2giKS52YWx1ZSA9IHBpdGNoOw0KICAgICAgICB9KTsNCiAgICAgICAgDQogICAgICAgIC8vbGlzdGVuZXIgcmVhY3RzIHRvIHpvb21jaGFuZ2VkIGV2ZW50IG9uIHN0cmVldHZpZXcgcGFub3JhbQ0KICAgICAgICBHRXZlbnQuYWRkTGlzdGVuZXIoc3ZwLCAiem9vbWNoYW5nZWQiLCBmdW5jdGlvbih6b29tKSB7DQogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHh0Wm9vbSIpLnZhbHVlID0gem9vbTsNCiAgICAgICAgfSk7DQogICAgICAgIA0KICAgICAgICAvL2xpc3RlbmVyIHJlYWN0cyB0byBpbml0aWFsaXplZCBldmVudCBvbiBzdHJlZXQgdmlldyBwYW5vcmFtYQ0KICAgICAgICBHRXZlbnQuYWRkTGlzdGVuZXIoc3ZwLCAiaW5pdGlhbGl6ZWQiLCBmdW5jdGlvbihhKSB7DQogICAgICAgICAgICBhcnJvdy5zZXRMYXRMbmcoYS5sYXRsbmcpOw0KICAgICAgICAgICAvLyBtYXAuYWRkT3ZlcmxheShuZXcgR1BvbHlsaW5lKFtsYXN0UG9pbnQsIGEubGF0bG5nXSkpOw0KICAgICAgICAgICAgbGFzdFBvaW50ID0gYS5sYXRsbmc7DQogICAgICAgIH0pOw0KCQkNCgkJZnVuY3Rpb24gc2hvd0FkZHJlc3MoYWRkcmVzcykgew0KICAgICAgaWYgKGdlb2NvZGVyKSB7DQogICAgICAgIGdlb2NvZGVyLmdldExhdExuZygNCiAgICAgICAgICBhZGRyZXNzLA0KICAgICAgICAgIGZ1bmN0aW9uKHBvaW50KSB7DQogICAgICAgICAgICBpZiAoIXBvaW50KSB7DQogICAgICAgICAgICAgIGFsZXJ0KGFkZHJlc3MgKyAiIG5vdCBmb3VuZCIpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAvLyBzdnAuc2V0TG9jYXRpb25BbmRQT1YocG9pbnQsIG15UG92KTsNCgkJCSAvLyBhcnJvdy5zZXRMYXRMbmcocG9pbnQpOw0KCQkJICANCgkJCSAgc3ZwLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgIHN2cC5zZXRMb2NhdGlvbkFuZFBPVihwb2ludCxteVBvdik7DQogICAgICAgICAgICAgICAgYXJyb3cuc2V0TGF0TG5nKHBvaW50KTsNCiAgICAgICAgICAgICAgICBsYXN0UG9pbnQgPSBwb2ludDsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHh0TGF0IikudmFsdWUgPSBwb2ludC5sYXQoKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidHh0TG9uZyIpLnZhbHVlID0gcG9pbnQubG5nKCk7DQoJCQkgIG1hcC5wYW5Ubyhwb2ludCk7IA0KCQkJICANCiAgICAgICAgICAgIAkgICAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCgkJIA0KICAgICAgICApOw0KCQkJCQ0KICAgICAgfQ0KICAgIH0NCgkNCgkNCgkNCiANCiAgICAgICAgLy9dXT4NCiAgICA8L3NjcmlwdD4NCgk8YnIgLz4NCiA8Zm9ybSBhY3Rpb249IiMiIG9uc3VibWl0PSJzaG93QWRkcmVzcyh0aGlzLmFkZHJlc3MudmFsdWUpOyByZXR1cm4gZmFsc2UiPg0KDQoJPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDozNTBweCIgbmFtZT0iYWRkcmVzcyIgdmFsdWU9IjE2MDAgQW1waGl0aGVhdHJlIFBreSwgTW91bnRhaW4gVmlldywgQ0EiIC8+DQogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyEiIC8+DQo8L2Zvcm0+DQo8L2JvZHk+DQo8L2h0bWw+DQoNCg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCi8vIFR5cGljYWwgRGF0YWJhc2UgSW5pdGlhbGl6YXRpb24NCiRkYiA9ICYkdGhpcy0+Y21zLT5kYjsNCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsNCgkJDQovLyBteXNxbC1zcGVjaWZpYywgYnV0IGlnbm9yZWQgYnkgb3RoZXIgZGF0YWJhc2UNCiR0YWJvcHRhcnJheSA9IGFycmF5KCJteXNxbCIgPT4gIlRZUEU9TXlJU0FNIik7DQoJCQ0KDQovLyBDcmVhdGVzIHRoZSBzdHJlZXR2aWV3IHRhYmxlDQokZmxkcyA9ICINCglsYXRpdHVkZSBDKDY0KSwNCglsb25naXR1ZGUgQyg2NCksDQoJeWF3IEMoNjQpLA0KCXBvdiBDKDY0KSwNCgl6b29tIEMoMTApLA0KCWlkIEkgS0VZLA0KCW5hbWUgQyg2NCksDQoJYWxpYXMgQyg2NCksDQoJaXRlbV9vcmRlciBJLA0KCWFjdGl2ZSBMLA0KCWlzZGVmYXVsdCBMLA0KICAgIGRhdGVfbW9kaWZpZWQgIi5DTVNfQURPREJfRFQuIiwNCglkYXRlX2NyZWF0ZWQgIi5DTVNfQURPREJfRFQuIg0KCSI7DQoNCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3X3N0cmVldHZpZXciLCAkZmxkcywgJHRhYm9wdGFycmF5KTsNCiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld19zdHJlZXR2aWV3X3NlcSIpOw0KDQoNCg0KLy8gQ3JlYXRlcyB0aGUgcXVlcmllcyB0YWJsZQ0KJGZsZHMgPSAiDQogICAgaWQgSSwNCgluYW1lIEMoNjQpLA0KCXdoYXQgQygzMiksDQoJd2hlcmVjbGF1c2UgQygyNTUpLA0KCXdoZXJldmFsdWVzIEMoMjU1KSwNCglxdWVyeW9yZGVyIEMoMzIpDQoJIjsNCg0KJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3N0cmVldHZpZXdfc2F2ZWRfcXVlcmllcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOw0KJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3X3NhdmVkX3F1ZXJpZXNfc2VxIik7DQoNCg0KLy8gSU5TRVJUSU5HIERFRkFVTFQgVEVNUExBVEVTDQoJJHRlbXBsYXRlID0gJzxoMj57JGxldmVsdGl0bGV9PC9oMj4NCntpZiAkaXRlbWNvdW50ID4gMH0NCjx1bD4NCntmb3JlYWNoIGZyb209JGl0ZW1saXN0IGl0ZW09Iml0ZW0ifQ0KCTxsaSB7aWYgJGl0ZW0tPmlzX3NlbGVjdGVkfWNsYXNzPSJhY3RpdmUiey9pZn0+eyRpdGVtLT5kZXRhaWxsaW5rfTwvbGk+DQp7L2ZvcmVhY2h9DQo8L3VsPg0Ke2lmICRwYWdlX3BhZ2VudW1iZXJzfQ0KPGRpdiBpZD0icGFnZW1lbnUiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij4NCnskcGFnZV9wcmV2aW91c30mbmJzcDsgeyRwYWdlX3Nob3dpbmd9L3skcGFnZV90b3RhbGl0ZW1zfSAmbmJzcDt7JHBhZ2VfbmV4dH08YnIvPg0KeyRwYWdlX3BhZ2VudW1iZXJzfQ0KPC9kaXY+DQp7L2lmfQ0Ke2Vsc2V9DQo8cD57JGVycm9yX21zZ308L3A+DQp7L2lmfQ0KJzsNCiR0aGlzLT5TZXRUZW1wbGF0ZSgibGlzdF9kZWZhdWx0IiwkdGVtcGxhdGUsJHRoaXMtPkdldE5hbWUoKSk7DQogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoImxpc3R0ZW1wbGF0ZV9zdHJlZXR2aWV3IiwibGlzdF9kZWZhdWx0Iik7DQoNCiR0ZW1wbGF0ZSA9ICd7bGl0ZXJhbH0NCjxzY3JpcHQgc3JjPSJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/ZmlsZT1hcGkmYW1wO3Y9MiZhbXA7c2Vuc29yPWZhbHNlJmFtcDtrZXk9WU9VUiBLRVkgSEVSRSIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLyA8IVtDREFUQVsNCiAgICBmdW5jdGlvbiBpbml0aWFsaXplKCkgew0KICAgICAgdmFyIG15UGFubyA9IG5ldyBHU3RyZWV0dmlld1Bhbm9yYW1hKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYW5vIikpOw0KICAgICAgbXlMb2NhdGlvbiA9IG5ldyBHTGF0TG5nKHsvbGl0ZXJhbH17JGl0ZW0tPmxhdGl0dWRlfSx7JGl0ZW0tPmxvbmdpdHVkZX0pOw0KICAgICAgbXlQT1YgPSB7bGl0ZXJhbH17ey9saXRlcmFsfXlhdzp7JGl0ZW0tPnlhd30scGl0Y2g6eyRpdGVtLT5wb3Z9LHpvb206eyRpdGVtLT56b29tfXtsaXRlcmFsfQ0KfTsNCiAgICAgIG15UGFuby5zZXRMb2NhdGlvbkFuZFBPVihteUxvY2F0aW9uLCBteVBPVik7DQogICAgICBHRXZlbnQuYWRkTGlzdGVuZXIobXlQYW5vLCAiZXJyb3IiLCBoYW5kbGVOb0ZsYXNoKTsNCiAgICB9DQpmdW5jdGlvbiBoYW5kbGVOb0ZsYXNoKGVycm9yQ29kZSkgew0KICAgICAgaWYgKGVycm9yQ29kZSA9PSA2MDMpIHsNCiAgICAgICAgYWxlcnQoIkVycm9yOiBGbGFzaCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciIpOw0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgfQ0KLy8gXV0+PC9zY3JpcHQ+DQp7L2xpdGVyYWx9DQogPGJvZHkgb25sb2FkPSJpbml0aWFsaXplKCkiIG9udW5sb2FkPSJHVW5sb2FkKCkiIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWw7Ym9yZGVyOiAwIG5vbmU7Ij4NCiAgICA8ZGl2IG5hbWU9InBhbm8iIGlkPSJwYW5vIiBzdHlsZT0id2lkdGg6IDUwMHB4OyBoZWlnaHQ6IDMwMHB4Ij48L2Rpdj4NCjwvZGl2Pic7DQoNCiR0aGlzLT5TZXRUZW1wbGF0ZSgiZmluYWxfZGVmYXVsdCIsJHRlbXBsYXRlLCR0aGlzLT5HZXROYW1lKCkpOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoImZpbmFsdGVtcGxhdGUiLCJmaW5hbF9kZWZhdWx0Iik7DQoNCiR0ZW1wbGF0ZSA9ICc8cD57JGVycm9yX21zZ308L3A+DQp7aWYgJGJhY2tsaW5rfTxwPnskYmFja2xpbmt9PC9wPnsvaWZ9JzsNCiR0aGlzLT5TZXRUZW1wbGF0ZSgibm9fcmVzdWx0IiwkdGVtcGxhdGUsJHRoaXMtPkdldE5hbWUoKSk7DQoNCi8vIENSRUFUSU5HIFBFUk1JU1NJT05TIDoNCg0KLy8gcGVybWlzc2lvbnMNCiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCJzdHJlZXR2aWV3X25vcm1hbHVzZXIiLCAic3RyZWV0dmlldzogTm9ybWFsIHVzZXIiKTsNCiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCJzdHJlZXR2aWV3X2FkdmFuY2VkIiwgInN0cmVldHZpZXc6IEFkdmFuY2VkIik7DQoJJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oInN0cmVldHZpZXdfbWFuYWdlX3N0cmVldHZpZXciLCAic3RyZWV0dmlldzogTWFuYWdlIHN0cmVldHZpZXciKTsNCi8vIGFjdGl2YXRpbmcgZGVmYXVsdCBwcmVmZXJlbmNlcw0KCSRkZWZwcmVmcyA9IGFycmF5KCJ0YWJkaXNwbGF5X3N0cmVldHZpZXciLCJzZWFyY2htb2R1bGVfaW5kZXhfc3RyZWV0dmlldyIsInJlc3RyaWN0X3Blcm1pc3Npb25zIiwib3JkZXJieW5hbWUiLCJkaXNwbGF5X2ZpbHRlciIsImRpc3BsYXlfaW5zdGFudHNlYXJjaCIsImRpc3BsYXlfaW5zdGFudHNvcnQiLCJzaG93dGh1bWJuYWlscyIsImxvYWRfbmJjaGlsZHJlbiIsInVzZV9zZXNzaW9uIik7DQoJZm9yZWFjaCgkZGVmcHJlZnMgYXMgJG9uZXByZWYpCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCRvbmVwcmVmLHRydWUpOw0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCJlbXB0eXRlbXBsYXRlIiwiKioiKTsNCg0KLy8gZXZlbnRzDQoJJHRoaXMtPkNyZWF0ZUV2ZW50KCJzdHJlZXR2aWV3X2FkZGVkIik7DQoJJHRoaXMtPkNyZWF0ZUV2ZW50KCJzdHJlZXR2aWV3X21vZGlmaWVkIik7DQoJJHRoaXMtPkNyZWF0ZUV2ZW50KCJzdHJlZXR2aWV3X2RlbGV0ZWQiKTsNCgkNCi8vIHByZXBhcmUgaW5mb3JtYXRpb24gZm9yIGFuIGV2ZW50dWFsIHVwZ3JhZGUNCgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgibWFrZXJ2ZXJzaW9uIiwiMS44LjkuMyIpOw0KDQovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cNCgkkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCJmcmllbmRseW5hbWUiKSwgJHRoaXMtPkxhbmcoImluc3RhbGxlZCIsJHRoaXMtPkdldFZlcnNpb24oKSkpOw0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCi8vIFR5cGljYWwgRGF0YWJhc2UgSW5pdGlhbGl6YXRpb24NCiRkYiA9ICYkdGhpcy0+Y21zLT5kYjsNCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsNCg0KDQoNCgkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3N0cmVldHZpZXdfc3RyZWV0dmlldyIpOw0KCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCgkkZGItPkRyb3BTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3X3N0cmVldHZpZXdfc2VxIik7DQoJDQoNCgkvLyRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld190ZW1wbGF0ZXMiKTsNCgkvLyRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCgkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoIiIsJHRoaXMtPkdldE5hbWUoKSk7DQoJDQoJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3X3NhdmVkX3F1ZXJpZXMiKTsNCgkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7DQoJJGRiLT5Ecm9wU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld19zYXZlZF9xdWVyaWVzX3NlcSIpOw0KDQovLyBwZXJtaXNzaW9ucw0KCSR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCJzdHJlZXR2aWV3X21hbmFnZV9zdHJlZXR2aWV3Iik7DQoJJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oInN0cmVldHZpZXdfYWR2YW5jZWQiKTsNCgkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOw0KCQ0KLy8gZXZlbnRzDQoJJHRoaXMtPlJlbW92ZUV2ZW50KCJzdHJlZXR2aWV3X2FkZGVkIik7DQoJJHRoaXMtPlJlbW92ZUV2ZW50KCJzdHJlZXR2aWV3X21vZGlmaWVkIik7DQoJJHRoaXMtPlJlbW92ZUV2ZW50KCJzdHJlZXR2aWV3X2RlbGV0ZWQiKTsNCg0KLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nDQoJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygiZnJpZW5kbHluYW1lIiksICR0aGlzLT5MYW5nKCJ1bmluc3RhbGxlZCIpKTsNCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKJHRhYm9wdCA9IGFycmF5KCJteXNxbCIgPT4gIlRZUEU9TXlJU0FNIik7CgovLyBQQVJUIDE6IFRoaXMgZG9lcyB0aGUgdXBncmFkZSBmb3IgdGhlIENUTE1vZHVsZU1ha2VyIHBhcnQKLy8gVW5mb3J0dW5hdGVseSwgdGhpcyBpcyBvbmx5IGJhY2t3YXJkIGNvbXBhdGlibGUgdG8gQ1RMTW9kdWxlTWFrZXIgMS42LjMuIEkgY291bGRuJ3QgZ28gYW55IGZ1cnRoZXIgYmVoaW5kIGJlY2F1c2UgYXQgdGhhdCB0aW1lIHRoZSBtYWtlciB2ZXJzaW9uIHdhc24ndCBzYXZlZCBhbnl3aGVyZQoKJG9sZG1ha2VyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoIm1ha2VydmVyc2lvbiIsICJ2ZXJ5b2xkIik7Cgpzd2l0Y2goJG9sZG1ha2VyKXsKCS8vIEJFR0lOIFNXSVRDSCgkb2xkbWFrZXIpCgoJY2FzZSAidmVyeW9sZCI6CgkJLy8gdGhlIG1vZHVsZSB3YXMgY3JlYXRlZCB3aXRoIHZlcnNpb24gMS42LjMgb3IgcHJpb3IuCgkJJHRoaXMtPkNyZWF0ZUV2ZW50KCJzdHJlZXR2aWV3X2FkZGVkIik7CgkJJHRoaXMtPkNyZWF0ZUV2ZW50KCJzdHJlZXR2aWV3X21vZGlmaWVkIik7CgkJJHRoaXMtPkNyZWF0ZUV2ZW50KCJzdHJlZXR2aWV3X2RlbGV0ZWQiKTsKCQlicmVhazsKCWNhc2UgIjEuNi40IjoKCWNhc2UgIjEuNyI6CgljYXNlICIxLjcuMSI6CgljYXNlICIxLjcuMiI6CgljYXNlICIxLjcuMyI6CgljYXNlICIxLjcuNCI6CgkJOwoJY2FzZSAiMS44LjEiOgoJY2FzZSAiMS44LjIiOgoJY2FzZSAiMS44LjIuMiI6CgljYXNlICIxLjguMyI6CgljYXNlICIxLjguMy4xIjoKCQkvLyBDcmVhdGVzIHRoZSBxdWVyaWVzIHRhYmxlCgkJJGZsZHMgPSAiCgkJCWlkIEksCgkJCW5hbWUgQyg2NCksCgkJCXdoYXQgQygzMiksCgkJCXdoZXJlY2xhdXNlIEMoMjU1KSwKCQkJd2hlcmV2YWx1ZXMgQygyNTUpLAoJCQlxdWVyeW9yZGVyIEMoMzIpCgkJCSI7CgkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3N0cmVldHZpZXdfc2F2ZWRfcXVlcmllcyIsICRmbGRzLCAkdGFib3B0KTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3X3NhdmVkX3F1ZXJpZXNfc2VxIik7CgkJJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oInN0cmVldHZpZXdfYWR2YW5jZWQiLCAic3RyZWV0dmlldzogQWR2YW5jZWQiKTsKCWNhc2UgIjEuOC40IjoKCWNhc2UgIjEuOC40LjEiOgoJY2FzZSAiMS44LjUiOgoJY2FzZSAiMS44LjUuMSI6CgkJJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oInN0cmVldHZpZXdfbm9ybWFsdXNlciIsICJzdHJlZXR2aWV3OiBOb3JtYWwgdXNlciIpOwoJCS8vIGFjdGl2YXRpbmcgZGVmYXVsdCBwcmVmZXJlbmNlcwoJCSRkZWZwcmVmcyA9IGFycmF5KCJ0YWJkaXNwbGF5X3N0cmVldHZpZXciLCJzZWFyY2htb2R1bGVfaW5kZXhfc3RyZWV0dmlldyIsInJlc3RyaWN0X3Blcm1pc3Npb25zIiwiZGlzcGxheV9maWx0ZXIiLCJkaXNwbGF5X2luc3RhbnRzZWFyY2giKTsKCQlmb3JlYWNoKCRkZWZwcmVmcyBhcyAkb25lcHJlZikJJHRoaXMtPlNldFByZWZlcmVuY2UoJG9uZXByZWYsdHJ1ZSk7CgljYXNlICIxLjguNiI6CgljYXNlICIxLjguNi4xIjoKCWNhc2UgIjEuOC43IjoKCWNhc2UgIjEuOC43LjEiOgoJCWlmKCRkYi0+ZGJ0eXBlID09ICJteXNxbCIgfHwgJGRiLT5kYnR5cGUgPT0gIm15c3FsaSIpewoJCQkvLyBtc3lxbAoJCQkkcXVlcmllcyA9IGFycmF5KCk7CgkJCSRxdWVyaWVzW10gPSAiQUxURVIgVEFCTEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3X3N0cmVldHZpZXcgQUREIENPTFVNTiBkYXRlX2NyZWF0ZWQgREFURVRJTUUiOwoJCQkkcXVlcmllc1tdID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3N0cmVldHZpZXdfc3RyZWV0dmlldyBTRVQgZGF0ZV9jcmVhdGVkPWRhdGVfbW9kaWZpZWQiOwoJCQlmb3JlYWNoKCRxdWVyaWVzIGFzICRxdWVyeSkJCW15c3FsX3F1ZXJ5KCRxdWVyeSk7CgoJCX1lbHNlewoJCQkvLyBub24tbXlzcWwKCQkJJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zdHJlZXR2aWV3X3N0cmVldHZpZXciLCAiZGF0ZV9jcmVhdGVkICIuQ01TX0FET0RCX0RUKTsKCQkJCgkJfQoJY2FzZSAiMS44LjcuMiI6CgljYXNlICIxLjguOCI6CgljYXNlICIxLjguOC4xIjoKCWNhc2UgIjEuOC44LjIiOgoJY2FzZSAiMS44LjguMyI6CgljYXNlICIxLjguOC40IjoKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgiYWRtaW5wYWdlcyIsMCk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoImxvYWRfbmJjaGlsZHJlbiIsdHJ1ZSk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoImxvYWRfbmV4dHByZXZpb3VzIixmYWxzZSk7CgljYXNlICIxLjguOSI6CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoInVzZV9zZXNzaW9uIix0cnVlKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgiZGVmZW1wdHl0ZW1wbGF0ZSIsIioqIik7CgkJCgkvLyBFTkQgU1dJVENIKCRvbGRtYWtlcikKfQoKJHRoaXMtPlNldFByZWZlcmVuY2UoIm1ha2VydmVyc2lvbiIsICIxLjguOS4zIik7Cj8+]]></data>
	</file>
	<file>
	  <filename>/streetview.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogc3RyZWV0dmlldw0KIyBWZXJzaW9uOiAxLjAsIA0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA4IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgVGhpcyBwcm9qZWN0InMgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMNCiMgVGhpcyBtb2R1bGUgd2FzIGNyZWF0ZWQgd2l0aCBDVExNb2R1bGVNYWtlciAxLjguOS4zDQojIENUTE1vZHVsZU1ha2VyIHdhcyBjcmVhdGVkIGJ5IFBpZXJyZS1MdWMgR2VybWFpbiBhbmQgaXMgcmVsZWFzZWQgdW5kZXIgR05VDQojIGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY3RsbW9kdWxlbWFrZXINCiMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmNsYXNzIHN0cmVldHZpZXcgZXh0ZW5kcyBDTVNNb2R1bGUNCnsNCgl2YXIgJGN1cnJlbnR0cmVlID0gZmFsc2U7DQoJdmFyICRjdXJyZW50cGFnZWluZGV4ID0gMTsNCgl2YXIgJHBsY3VycmVudCA9IGFycmF5KCk7DQoNCglmdW5jdGlvbiBHZXROYW1lKCkNCgl7DQoJCXJldHVybiAic3RyZWV0dmlldyI7DQoJfQ0KDQoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkgICBHZXRGcmllbmRseU5hbWUoKQ0KCSAgIFRoaXMgY2FuIHJldHVybiBhbnkgc3RyaW5nLCBwcmVmZXJhYmx5IGEgbG9jYWxpemVkIG5hbWUNCgkgICBvZiB0aGUgbW9kdWxlLiBUaGlzIGlzIHRoZSBuYW1lIHRoYXQicyBzaG93biBpbiB0aGUNCgkgICBBZG1pbiBNZW51cyBhbmQgc2VjdGlvbiBwYWdlcyAoaWYgdGhlIG1vZHVsZSBoYXMgYW4gYWRtaW4NCgkgICBjb21wb25lbnQpLg0KCSAgIA0KCSAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuDQoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KCWZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpDQoJew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoImZyaWVuZGx5bmFtZSIpOw0KCX0NCgkNCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCSAgIEdldFZlcnNpb24oKQ0KCSAgIFRoaXMgY2FuIHJldHVybiBhbnkgc3RyaW5nLCBwcmVmZXJhYmx5IGEgbnVtYmVyIG9yDQoJICAgc29tZXRoaW5nIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIGRlc2lnbmF0aW5nIGEgdmVyc2lvbi4NCgkgICBUaGUgQ01TIHdpbGwgdXNlIHRoaXMgdG8gaWRlbnRpZnkgd2hldGhlciBvciBub3QNCgkgICB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIG1vZHVsZSBpcyBjdXJyZW50LCBhbmQNCgkgICB0aGUgbW9kdWxlIHdpbGwgdXNlIGl0IHRvIGZpZ3VyZSBvdXQgaG93IHRvIHVwZ3JhZGUNCgkgICBpdHNlbGYgaWYgcmVxdWVzdGVkLgkgICANCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoJZnVuY3Rpb24gR2V0VmVyc2lvbigpDQoJew0KCQlyZXR1cm4gIjEuMCI7DQoJfQ0KDQoNCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCSAgIEdldERlcGVuZGVuY2llcygpDQoJICAgWW91ciBtb2R1bGUgbWF5IG5lZWQgYW5vdGhlciBtb2R1bGUgdG8gYWxyZWFkeSBiZSBpbnN0YWxsZWQNCgkgICBiZWZvcmUgeW91IGNhbiBpbnN0YWxsIGl0Lg0KCSAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIHRob3NlIGRlcGVuZGVuY2llcyBhbmQNCgkgICBtaW5pbXVtIHZlcnNpb24gbnVtYmVycyB0aGF0IHRoaXMgbW9kdWxlIHJlcXVpcmVzLg0KCSAgIA0KCSAgIEl0IHNob3VsZCByZXR1cm4gYW4gaGFzaCwgZWcuDQoJICAgcmV0dXJuIGFycmF5KCJzb21lbW9kdWxlIj0+IjEuMCIsICJvdGhlcm1vZHVsZSI9PiIxLjEiKTsNCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoJZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkNCgl7DQoJCXJldHVybiBhcnJheSgpOw0KCX0NCg0KCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJICAgR2V0SGVscCgpDQoJICAgVGhpcyByZXR1cm5zIEhUTUwgaW5mb3JtYXRpb24gb24gdGhlIG1vZHVsZS4NCgkgICBUeXBpY2FsbHksIHlvdSJsbCB3YW50IHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gb24gaG93IHRvDQoJICAgdXNlIHRoZSBtb2R1bGUuDQoJICAgDQoJICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4NCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoJZnVuY3Rpb24gR2V0SGVscCgpDQoJew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoImhlbHAiKTsNCgl9DQoNCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCSAgIEdldEF1dGhvcigpDQoJICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBNb2R1bGUNCgkgICBBZG1pbiBpZiB5b3UgY2xpY2sgb24gdGhlICJBYm91dCIgbGluay4NCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoJZnVuY3Rpb24gR2V0QXV0aG9yKCkNCgl7DQoJCXJldHVybiAiTWFydGluIjsNCgkJLy8gb2YgY291cnNlIHlvdSBtYXkgY2hhbmdlIHRoaXMsIGJ1dCBpdCB3b3VsZCBiZSBuaWNlDQoJCS8vIHRvIGtlZXAgYSBtZW50aW9uIG9mIHRoZSBDVExNb2R1bGVNYWtlciBzb21ld2hlcmUNCgl9DQoNCg0KCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJICAgR2V0QXV0aG9yRW1haWwoKQ0KCSAgIFRoaXMgcmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHByZXNlbnRlZCBpbiB0aGUgTW9kdWxlDQoJICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSAiQWJvdXQiIGxpbmsuIEl0IGhlbHBzIHVzZXJzDQoJICAgb2YgeW91ciBtb2R1bGUgZ2V0IGluIHRvdWNoIHdpdGggeW91IHRvIHNlbmQgYnVnIHJlcG9ydHMsDQoJICAgcXVlc3Rpb25zLCBjYXNlcyBvZiBiZWVyLCBhbmQvb3IgbGFyZ2Ugc3VtcyBvZiBtb25leS4NCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoJZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQ0KCXsNCgkJcmV0dXJuICJtd2NvdXJ0ZW5heUB5YWhvby5jb20iOw0KCX0NCg0KDQoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkgICBJc1BsdWdpbk1vZHVsZSgpDQoJICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UsIGRlcGVuZGluZyB1cG9uDQoJICAgd2hldGhlciB1c2VycyBjYW4gaW5jbHVkZSB0aGUgbW9kdWxlIGluIGEgcGFnZSBvcg0KCSAgIHRlbXBsYXRlIHVzaW5nIGEgc21hcnR5IHRhZyBvZiB0aGUgZm9ybQ0KCSAgIHtjbXNfbW9kdWxlIG1vZHVsZT0iUHJvZCIgcGFyYW0xPXZhbCBwYXJhbTI9dmFsLi4ufQ0KCSAgIA0KCSAgIElmIHlvdXIgbW9kdWxlIGRvZXMgbm90IGdldCBpbmNsdWRlZCBpbiBwYWdlcyBvcg0KCSAgIHRlbXBsYXRlcywgcmV0dXJuICJmYWxzZSIgaGVyZS4NCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoJZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKQ0KCXsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoNCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCSAgIEhhc0FkbWluKCkNCgkgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBib29sZWFuIHZhbHVlLCBkZXBlbmRpbmcgb24NCgkgICB3aGV0aGVyIHlvdXIgbW9kdWxlIGFkZHMgYW55dGhpbmcgdG8gdGhlIEFkbWluIGFyZWEgb2YNCgkgICB0aGUgc2l0ZS4gRm9yIHRoZSByZXN0IG9mIHRoZXNlIGNvbW1lbnRzLCBJImxsIGJlIGNhbGxpbmcNCgkgICB0aGUgYWRtaW4gcGFydCBvZiB5b3VyIG1vZHVsZSB0aGUgIkFkbWluIFBhbmVsIiBmb3INCgkgICB3YW50IG9mIGEgYmV0dGVyIHRlcm0uDQoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KCWZ1bmN0aW9uIEhhc0FkbWluKCkgewlyZXR1cm4gdHJ1ZTsJfQ0KCWZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHtyZXR1cm4gImNvbnRlbnQiO30NCglmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkge3JldHVybiAkdGhpcy0+TGFuZygiYWRtaW5kZXNjcmlwdGlvbiIpO30NCg0KCWZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpew0KCQlyZXR1cm4gKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oInN0cmVldHZpZXdfbm9ybWFsdXNlciIpIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oInN0cmVldHZpZXdfYWR2YW5jZWQiKSk7DQoJfQ0KCQ0KCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJICAgTW9kdWxlIENvbnN0cnVjdG9yIA0KCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoJZnVuY3Rpb24gc3RyZWV0dmlldygpDQoJew0KCQlnbG9iYWwgJGdDbXM7DQogICAgCSRzbWFydHkgPSYgJGdDbXMtPkdldFNtYXJ0eSgpOw0KCQkkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigic3RyZWV0dmlld19icmVhZGNydW1icyIsIGFycmF5KCYkdGhpcywiZnVuY3Rpb25fbW9kYnJlYWRjcnVtYnMiKSk7DQoJCSRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCJzdHJlZXR2aWV3X2dldF9sZXZlbGl0ZW0iLCBhcnJheSgmJHRoaXMsImZ1bmN0aW9uX2dldF9sZXZlbGl0ZW0iKSk7DQoJCXBhcmVudDo6Q01TTW9kdWxlKCk7DQoJfQ0KCQ0KCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJICAgU2V0UGFyYW1ldGVycygpDQoJICAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHlvdSB0byBjcmVhdGUgbWFwcGluZ3MgZm9yDQoJICAgeW91ciBtb2R1bGUgd2hlbiB1c2luZyAiUHJldHR5IFVybHMiLg0KCSAgIA0KCSAgIFR5cGljYWxseSwgbW9kdWxlcyBjcmVhdGUgaW50ZXJuYWwgbGlua3MgdGhhdCBoYXZlDQoJICAgYmlnIHVnbHkgc3RyaW5ncyBhbG9uZyB0aGUgbGluZXMgb2Y6DQoJICAgaW5kZXgucGhwP21hY3Q9TW9kTmFtZSxjbnRudDAxLGFjdGlvbk5hbWUsMCZjbnRudDAxcGFyYW0xPTEmY250bnQwMXBhcmFtMj0yJmNudG50MDFyZXR1cm5pZD0zDQoJICAgDQoJICAgWW91IG1pZ2h0IHByZWZlciB0aGVzZSB0byBsb29rIGxpa2U6DQoJICAgL01vZHVsZUZ1bmN0aW9uLzIvMw0KCSAgIA0KCSAgIFRvIGRvIHRoaXMsIHlvdSBoYXZlIHRvIHJlZ2lzdGVyIHJvdXRlcyBhbmQgbWFwDQoJICAgeW91ciBwYXJhbWV0ZXJzIGluIGEgd2F5IHRoYXQgdGhlIEFQSSB3aWxsIGJlIGFibGUNCgkgICB0byB1bmRlcnN0YW5kLg0KDQoJICAgQWxzbyBub3RlIHRoYXQgYW55IGNhbGxzIHRvIENyZWF0ZUxpbmsgd2lsbCBuZWVkIHRvDQoJICAgYmUgdXBkYXRlZCB0byBwYXNzIHRoZSBwcmV0dHkgdXJsIHBhcmFtZXRlci4NCgkgICANCgkgICBTaW5jZSB0aGUgU2tlbGV0b24gZG9lc24idCByZWFsbHkgY3JlYXRlIGFueSBsaW5rcywNCgkgICB0aGUgc2VjdGlvbiBiZWxvdyBpcyBjb21tZW50ZWQgb3V0LCBidXQgeW91IGNhbg0KCSAgIHVzZSBpdCB0byBmaWd1cmUgb3V0IHByZXR0eSB1cmxzLg0KCSAgIA0KCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoJZnVuY3Rpb24gU2V0UGFyYW1ldGVycygpDQoJew0KDQoJCS8vIHRoZXNlIGFyZSBmb3IgaW50ZXJuYWwgcHJldHR5IFVSTFMuDQoJCS8vIHlvdSBtYXkgY2hhbmdlIHRoZXNlLCBidXQgeW91IHdpbGwgYWxzbyBuZWVkIHRvIGNoYW5nZSB0aGUgQnVpbGRQcmV0dHlVUkxzIGZ1bmN0aW9uIGJlbG93IGFjY29yZGluZ2x5DQoJCS8vIHNlZSBGQVEgZm9yIG1vcmUgaW5mbyBvbiB0aGlzDQoJCSRkZWZhY3QgPSBhcnJheSgiYWN0aW9uIj0+ImRlZmF1bHQiKTsNCgkJJHRoaXMtPlJlZ2lzdGVyUm91dGUoIi9bc1NddHJlZXR2aWV3XC8oW1FxXXVlcnkpXC8oP1A8cXVlcnk+WzAtOV0rKVwvKD9QPHJldHVybmlkPlswLTldKykkLyIsICRkZWZhY3QpOw0KCQkkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgiL1tzU110cmVldHZpZXdcLyhbUXFddWVyeSlcLyg/UDxxdWVyeT5bMC05XSspXC8oP1A8cGFnZWluZGV4PlswLTldKylcLyg/UDxuYnBlcnBhZ2U+WzAtOV0rKVwvKD9QPHJldHVybmlkPlswLTldKykkLyIsICRkZWZhY3QpOw0KCQkkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgiL1tzU110cmVldHZpZXdcLyhbRGRdZXRhaWwpXC8oP1A8YWxpYXM+W15cL10rKVwvKD9QPHJldHVybmlkPlswLTldKykkLyIsICRkZWZhY3QpOw0KCQkkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgiL1tzU110cmVldHZpZXdcLyg/UDx3aGF0PlteXC9dKylcLyg/UDxyZXR1cm5pZD5bMC05XSspJC8iLCAkZGVmYWN0KTsNCgkJJHRoaXMtPlJlZ2lzdGVyUm91dGUoIi9bc1NddHJlZXR2aWV3XC8oP1A8d2hhdD5bXlwvXSspXC8oP1A8cGFyZW50PlteXC9dKylcLyg/UDxyZXR1cm5pZD5bMC05XSspJC8iLCAkZGVmYWN0KTsNCgkJJHRoaXMtPlJlZ2lzdGVyUm91dGUoIi9bc1NddHJlZXR2aWV3XC8oP1A8d2hhdD5bXlwvXSspXC8oP1A8cGFnZWluZGV4PlswLTldKylcLyg/UDxuYnBlcnBhZ2U+WzAtOV0rKVwvKD9QPHJldHVybmlkPlswLTldKykkLyIsICRkZWZhY3QpOw0KCQkkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgiL1tzU110cmVldHZpZXdcLyg/UDx3aGF0PlteXC9dKylcLyg/UDxwYXJlbnQ+W15cL10rKVwvKD9QPHBhZ2VpbmRleD5bMC05XSspXC8oP1A8bmJwZXJwYWdlPlswLTldKylcLyg/UDxyZXR1cm5pZD5bMC05XSspJC8iLCAkZGVmYWN0KTsNCgkNCgkJJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOw0KCQkNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigiYWN0aW9uIiwgImRlZmF1bHQiLCAkdGhpcy0+TGFuZygicGhlbHBfYWN0aW9uIikpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCJ3aGF0IiwgIiIsICR0aGlzLT5MYW5nKCJwaGVscF93aGF0IikpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgid2hhdCIsQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigiYWxpYXMiLCAiIiwgJHRoaXMtPkxhbmcoInBoZWxwX2FsaWFzIikpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgiYWxpYXMiLENMRUFOX1NUUklORyk7DQoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoInNob3dkZWZhdWx0IiwgZmFsc2UsICR0aGlzLT5MYW5nKCJwaGVscF9zaG93ZGVmYXVsdCIpKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoInNob3dkZWZhdWx0IixDTEVBTl9JTlQpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCJwYXJlbnQiLCAiIiwgJHRoaXMtPkxhbmcoInBoZWxwX3BhcmVudCIpKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoInBhcmVudCIsQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigibGltaXQiLCAwLCAkdGhpcy0+TGFuZygicGhlbHBfbGltaXQiKSk7DQoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCJsaW1pdCIsQ0xFQU5fSU5UKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigibmJwZXJwYWdlIiwgMCwgJHRoaXMtPkxhbmcoInBoZWxwX25icGVycGFnZSIpKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoIm5icGVycGFnZSIsQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigib3JkZXJieSIsIDAsICR0aGlzLT5MYW5nKCJwaGVscF9vcmRlcmJ5IikpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgib3JkZXJieSIsQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigiZGV0YWlscGFnZSIsICIiLCAkdGhpcy0+TGFuZygicGhlbHBfZGV0YWlscGFnZSIpKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoImRldGFpbHBhZ2UiLENMRUFOX1NUUklORyk7DQoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoInJhbmRvbSIsIDAsICR0aGlzLT5MYW5nKCJwaGVscF9yYW5kb20iKSk7DQoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCJyYW5kb20iLENMRUFOX0lOVCk7DQoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoImxpc3R0ZW1wbGF0ZSIsICIiLCAkdGhpcy0+bGFuZygicGhlbHBfbGlzdHRlbXBsYXRlIikpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgibGlzdHRlbXBsYXRlIixDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCJmaW5hbHRlbXBsYXRlIiwgIiIsICR0aGlzLT5sYW5nKCJwaGVscF9maW5hbHRlbXBsYXRlIikpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgiZmluYWx0ZW1wbGF0ZSIsQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigiZm9yY2VsaXN0IiwgIjAiLCAkdGhpcy0+bGFuZygicGhlbHBfZm9yY2VsaXN0IikpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgiZm9yY2VsaXN0IixDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCJpbmxpbmUiLCAwLCAkdGhpcy0+bGFuZygicGhlbHBfaW5saW5lIikpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgiaW5saW5lIixDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCJzZWFyY2htb2RlIiwgImFkdmFuY2VkIiwgJHRoaXMtPmxhbmcoInBoZWxwX3NlYXJjaG1vZGUiKSk7DQoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCJzZWFyY2htb2RlIixDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCJxdWVyeSIsIDAsICR0aGlzLT5sYW5nKCJwaGVscF9xdWVyeSIpKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoInF1ZXJ5IixDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCJ0b2FjdGlvbiIsICIiLCAkdGhpcy0+TGFuZygicGhlbHBfdG9hY3Rpb24iKSk7DQoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCJ0b2FjdGlvbiIsQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoInBhZ2VpbmRleCIsQ0xFQU5fSU5UKTsNCg0KCQkvLyBmb3IgdGhlIHNlYXJjaCBmb3JtICh0cmljayBmcm9tIGlrdWxpcykgOg0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZShDTEVBTl9SRUdFWFAuIi9kYXRlXy4qLyIsQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoQ0xFQU5fUkVHRVhQLiIvZmllbGRfLiovIixDTEVBTl9TVFJJTkcpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZShDTEVBTl9SRUdFWFAuIi9jb21wYXJlXy4qLyIsQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoInN1Ym1pdHNlYXJjaCIsQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoInNlYXJjaGZpZWxkIixDTEVBTl9TVFJJTkcpOw0KCQkNCgl9DQoNCiAgICBmdW5jdGlvbiBHZXRFdmVudERlc2NyaXB0aW9uKCRldmVudG5hbWUpDQogICAgew0KCQkkZXZlbnRuYW1lID0gc3RyX3JlcGxhY2UoInN0cmVldHZpZXciLCAiIiwgJGV2ZW50bmFtZSk7DQoJCXJldHVybiAkdGhpcy0+bGFuZygiZXZlbnRkZXNjIi4kZXZlbnRuYW1lKTsNCiAgICB9DQogICAgDQoJZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkNCgl7DQoJCXJldHVybiAkdGhpcy0+TGFuZygicG9zdGluc3RhbGwiKTsNCgl9DQoJZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQ0KCXsNCgkJcmV0dXJuICR0aGlzLT5MYW5nKCJwb3N0dW5pbnN0YWxsIik7DQoJfQ0KCWZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQ0KCXsNCgkJcmV0dXJuICR0aGlzLT5MYW5nKCJyZWFsbHlfdW5pbnN0YWxsIik7DQoJfQ0KDQoNCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCSAgIEluc3RhbGwoKQ0KCSAgIFdoZW4geW91ciBtb2R1bGUgaXMgaW5zdGFsbGVkLCB5b3UgbWF5IG5lZWQgdG8gZG8gc29tZQ0KCSAgIHNldHVwLiBUeXBpY2FsIHRoaW5ncyB0aGF0IGhhcHBlbiBoZXJlIGFyZSB0aGUgY3JlYXRpb24NCgkgICBhbmQgcHJlcG9wdWxhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsIGRhdGFiYXNlIHNlcXVlbmNlcywNCgkgICBwZXJtaXNzaW9ucywgcHJlZmVyZW5jZXMsIGV0Yy4NCgkgICAJICAgDQoJICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBjcmVhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsDQoJICAgY2hlY2sgb3V0IHRoZSBBRE9EQiBEYXRhIERpY3Rpb25hcnkgcGFnZSBhdA0KCSAgIGh0dHA6Ly9waHBsZW5zLmNvbS9sZW5zL2Fkb2RiL2RvY3MtZGF0YWRpY3QuaHRtDQoJICAgDQoJICAgVGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIGEgc3RyaW5nIGluIGNhc2Ugb2YgYW55IGVycm9yLA0KCSAgIGFuZCBDTVMgd2lsbCBub3QgY29uc2lkZXIgdGhlIG1vZHVsZSBpbnN0YWxsZWQuDQoJICAgU3VjY2Vzc2Z1bCBpbnN0YWxscyBzaG91bGQgcmV0dXJuIEZBTFNFIG9yIG5vdGhpbmcgYXQgYWxsLg0KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCglmdW5jdGlvbiBJbnN0YWxsKCkNCgl7DQoJCWdsb2JhbCAkZ0NtczsNCgkJcmVxdWlyZSAibWV0aG9kLmluc3RhbGwucGhwIjsNCgl9DQoNCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCSAgIFVuaW5zdGFsbCgpDQoJICAgU29tZXRpbWVzLCBhbiBleGNlcHRpb25hbGx5IHVuZW5saWdodGVuZWQgb3IgaWdub3JhbnQNCgkgICBhZG1pbiB3aWxsIHdpc2ggdG8gdW5pbnN0YWxsIHlvdXIgbW9kdWxlLiBXaGlsZSBpdA0KCSAgIHdvdWxkIGJlIGJlc3QgdG8gbGF5IGludG8gdGhlc2UgaWRpb3RzIHdpdGggYSBjbHVlc3RpY2ssDQoJICAgd2Ugd2lsbCBkbyB0aGUgbWFnbmFuaW1vdXMgdGhpbmcgYW5kIHJlbW92ZSB0aGUgbW9kdWxlDQoJICAgYW5kIGNsZWFuIHVwIHRoZSBkYXRhYmFzZSwgcGVybWlzc2lvbnMsIGFuZCBwcmVmZXJlbmNlcw0KCSAgIHRoYXQgYXJlIHNwZWNpZmljIHRvIGl0Lg0KCSAgIFRoaXMgaXMgdGhlIG1ldGhvZCB3aGVyZSB3ZSBkbyB0aGlzLg0KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCglmdW5jdGlvbiBVbmluc3RhbGwoKQ0KCXsNCgkJZ2xvYmFsICRnQ21zOw0KCQlyZXF1aXJlICJtZXRob2QudW5pbnN0YWxsLnBocCI7DQoJfQ0KDQoNCiAgICBmdW5jdGlvbiBTZWFyY2hSZXN1bHQoJHJldHVybmlkLCAkaXRlbWlkLCAkbGV2ZWwgPSAiIikNCiAgICB7DQoJCSRyZXN1bHQgPSBhcnJheSgpOw0KCQkkd2FudGVkcGFyYW0gPSBmYWxzZTsNCgkJJG5ld3BhcmFtcyA9IGFycmF5KCk7DQoJCWlmKCRsZXZlbCA9PSAic3RyZWV0dmlldyIpew0KCQkJLy8gd2Ugc2VlayBhbiBlbGVtZW50IG9mIHRoZSBsYXN0IGxldmVsLCBhbmQgd2lsbCBkaXNwbGF5IHRoZSBkZXRhaWwgdmlldw0KCQkJJHdhbnRlZHBhcmFtID0gImFsaWFzIjsNCgkJfWVsc2V7DQoJCQlpZigkbmV3cGFyYW1zWyJ3aGF0Il0gPSAkdGhpcy0+Z2V0X25leHRsZXZlbCgkbGV2ZWwpKXsNCgkJCS8vIHdlIHNlZWsgYW4gZWxlbWVudCBvZiBhbm90aGVyIGxldmVsLCBhbmQgd2lsbCBkaXNwbGF5IHRoZSBsaXN0IHZpZXcgb2YgaXRzIGNoaWxkcmVuDQoJCQkJJHdhbnRlZHBhcmFtID0gInBhcmVudCI7DQoJCQl9DQoJCX0NCgkJaWYgKCR3YW50ZWRwYXJhbSl7DQoJCQkkdGFibGVuYW1lID0gY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld18iLiRsZXZlbDsNCgkJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsNCgkJCSRxdWVyeSA9ICJTRUxFQ1QgbmFtZSwgYWxpYXMgRlJPTSAkdGFibGVuYW1lIFdIRVJFIGlkID0gPyI7DQoJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICRpdGVtaWQgKSApOw0KCQkJaWYgKCRkYnJlc3VsdCl7DQoJCQkJJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsNCgkJCQkkbmV3cGFyYW1zWyR3YW50ZWRwYXJhbV0gPSAkcm93WyJhbGlhcyJdOw0KDQoJCQkJLy8wIHBvc2l0aW9uIGlzIHRoZSBwcmVmaXggZGlzcGxheWVkIGluIHRoZSBsaXN0IHJlc3VsdHMuDQoJCQkJJHJlc3VsdFswXSA9ICR0aGlzLT5HZXRGcmllbmRseU5hbWUoKTsNCg0KCQkJCS8vMSBwb3NpdGlvbiBpcyB0aGUgdGl0bGUNCgkJCQkkcmVzdWx0WzFdID0gJHJvd1sibmFtZSJdOw0KCQkNCgkJCQkvLzIgcG9zaXRpb24gaXMgdGhlIFVSTCB0byB0aGUgdGl0bGUuDQoJCQkJJHJlc3VsdFsyXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImRlZmF1bHQiLCAkcmV0dXJuaWQsICIiLCAkbmV3cGFyYW1zLCAiIiwgdHJ1ZSwgZmFsc2UsICIiLCBmYWxzZSwgJHRoaXMtPkJ1aWxkUHJldHR5VXJscygkbmV3cGFyYW1zLCAkcmV0dXJuaWQpKTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiAkcmVzdWx0Ow0KCX0NCgkNCglmdW5jdGlvbiBTZWFyY2hSZWluZGV4KCYkbW9kdWxlKQ0KICAgIHsNCgkJJGRiID0mICR0aGlzLT5HZXREYigpOw0KCQlpZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2VhcmNobW9kdWxlX2luZGV4X3N0cmVldHZpZXciLGZhbHNlKSl7DQoJCQkkaXRlbWxpc3QgPSAkdGhpcy0+Z2V0X2xldmVsX3N0cmVldHZpZXcoKTsNCgkJCWZvcmVhY2goJGl0ZW1saXN0IGFzICRpdGVtKXsNCgkJCQkkdGV4dCA9ICIkaXRlbS0+bmFtZSI7DQoJCQkJJG1vZHVsZS0+QWRkV29yZHMoJHRoaXMtPkdldE5hbWUoKSwgJGl0ZW0tPmlkLCAic3RyZWV0dmlldyIsICR0ZXh0LCBOVUxMKTsNCgkJCX0NCgkJfQ0KCQkNCiAgICB9CQ0KDQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCk5PVCBQQVJUIE9GIFRIRSBOT1JNQUwgTU9EVUxFIEFQSQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCiAgICBmdW5jdGlvbiBnZXREZWZhdWx0VGVtcGxhdGVzKCl7DQogICAgCS8vIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHRlbXBsYXRlcyB0aGF0IGFyZSBzZWxlY3RlZCBhcyBkZWZhdWx0IChqdXN0IHNvIHRoYXQgd2UgZG9uJ3QgZGVsZXRlIHRoZW0pDQoJICAgJHJlc3VsdCA9IGFycmF5KCk7DQoJICAgJHJlc3VsdFtdID0gJHRoaXMtPkdldFByZWZlcmVuY2UoImZpbmFsdGVtcGxhdGUiKTsNCgkgICAkcmVzdWx0W10gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2VhcmNocmVzdWx0c3RlbXBsYXRlIik7DQoJICAgJHJlc3VsdFtdID0gJHRoaXMtPkdldFByZWZlcmVuY2UoImxpc3R0ZW1wbGF0ZV9zdHJlZXR2aWV3Iik7DQoJICAgcmV0dXJuICRyZXN1bHQ7DQogICAgfQ0KCQ0KICAgIGZ1bmN0aW9uIGdldE9yZGVyVHlwZSgkd2hhdCl7DQoJCS8vIHJldHVybnMgd2hldGhlciBhIGxldmVsIGlzIG9yZGVyZWQgYnkgcGFyZW50IG9yIG5vdA0KCQkkcmV0dXJuID0gYXJyYXkoInN0cmVldHZpZXciPT50cnVlKTsNCgkJcmV0dXJuIChpc3NldCgkcmV0dXJuWyR3aGF0XSk/JHJldHVyblskd2hhdF06ZmFsc2UpOw0KICAgIH0NCg0KCWZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybmlkPS0xKXsNCgkJZ2xvYmFsICRnQ21zOw0KCQkNCgkJc3dpdGNoKCRhY3Rpb24pew0KCQkJY2FzZSAibGluayI6DQoJCQkJJHRvYWN0aW9uID0gaXNzZXQoJHBhcmFtc1sidG9hY3Rpb24iXSk/JHBhcmFtc1sidG9hY3Rpb24iXToiZGVmYXVsdCI7DQoJCQkJZWNobyAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJHRvYWN0aW9uLCRyZXR1cm5pZCwiIiwkcGFyYW1zLCIiLHRydWUpOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAiYnJlYWRjcnVtYnMiOg0KCQkJCSRzbWFydHkgPSYgJGdDbXMtPkdldFNtYXJ0eSgpOw0KCQkJCSR0aGlzLT5mdW5jdGlvbl9tb2RicmVhZGNydW1icygkcGFyYW1zLCAkc21hcnR5KTsNCgkJCQlicmVhazsNCgkJCWNhc2UgImNoYW5nZXByZWZlcmVuY2VzIjoNCgkJCQlpZighJHRoaXMtPkNoZWNrUGVybWlzc2lvbigic3RyZWV0dmlld19hZHZhbmNlZCIpKXsNCgkJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgImRlZmF1bHRhZG1pbiIsICRyZXR1cm5pZCwgYXJyYXkoIm1vZHVsZV9tZXNzYWdlIj0+JHRoaXMtPkxhbmcoImVycm9yX2RlbmllZCIpKSk7DQoJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCQkkcHJlZnMgPSBhcnJheSgicmVzdHJpY3RfcGVybWlzc2lvbnMiLCJ1c2VfaGllcmFyY2h5Iiwib3JkZXJieW5hbWUiLCJkaXNwbGF5X2ZpbHRlciIsImRpc3BsYXlfaW5zdGFudHNlYXJjaCIsImRpc3BsYXlfaW5zdGFudHNvcnQiLCJlZGl0YWJsZV9hbGlhc2VzIiwiYXV0b2luY3JlbWVudF9hbGlhcyIsImFsbG93X3NxbCIsImZvcmNlX2xpc3QiLCJkZWxldGVfZmlsZXMiLCJ0YWJkaXNwbGF5X3RlbXBsYXRlcyIsInRhYmRpc3BsYXlfZmllbGRvcHRpb25zIiwidGFiZGlzcGxheV9xdWVyaWVzIiwic2hvd3RodW1ibmFpbHMiLCJmZV93eXNpd3lnIiwiZmVfZGVjb2RlZW50aXRpZXMiLCJmZV9hbGxvd2ZpbGVzIiwiZmVfYWxsb3duYW1lY2hhbmdlIiwiZmVfYWxsb3dhZGRuZXciLCJmZV91c2VjYXB0Y2hhIiwiYWxsb3dfY29tcGxleF9vcmRlciIsImxvYWRfbmV4dHByZXZpb3VzIiwibG9hZF9uYmNoaWxkcmVuIiwidXNlX3Nlc3Npb24iLCJyZXRyaWV2ZXRyZWUiKTsNCgkJCQlmb3JlYWNoKCR0aGlzLT5nZXRfbGV2ZWxhcnJheSgpIGFzICRsZXZlbCl7DQoJCQkJCSRwcmVmc1tdID0gIm5ld2l0ZW1zZmlyc3RfIi4kbGV2ZWw7DQoJCQkJCSRwcmVmc1tdID0gInNlYXJjaG1vZHVsZV9pbmRleF8iLiRsZXZlbDsNCgkJCQkJJHByZWZzW10gPSAidGFiZGlzcGxheV8iLiRsZXZlbDsNCgkJCQl9DQoJCQkJZm9yZWFjaCgkcHJlZnMgYXMgJHByZWYpCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCRwcmVmLCBpc3NldCgkcGFyYW1zWyRwcmVmXSkpOw0KCQkJCWlmKGlzc2V0KCRwYXJhbXNbImZlX2FmdGVyc3VibWl0Il0pKQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgiZmVfYWZ0ZXJzdWJtaXQiLCAkcGFyYW1zWyJmZV9hZnRlcnN1Ym1pdCJdKTsNCgkJCQlpZihpc3NldCgkcGFyYW1zWyJmZV9tYXhmaWxlc2l6ZSJdKSkJJHRoaXMtPlNldFByZWZlcmVuY2UoImZlX21heGZpbGVzaXplIiwgJHBhcmFtc1siZmVfbWF4ZmlsZXNpemUiXSk7DQoJCQkJJG1heHNob3ducGFnZXMgPSAoaW50KSRwYXJhbXNbIm1heHNob3ducGFnZXMiXTsNCgkJCQkkYWRtaW5wYWdlcyA9IChpbnQpJHBhcmFtc1siYWRtaW5wYWdlcyJdOw0KCQkJCWZvcmVhY2goJHRoaXMtPmdldF9sZXZlbGFycmF5KCkgYXMgJGxldmVsKXsNCgkJCQkJJG5icGVycGFnZSA9IChpbnQpIChpc3NldCgkcGFyYW1zWyRsZXZlbC4iX3BhZ2luYXRpb24iXSk/JHBhcmFtc1skbGV2ZWwuIl9wYWdpbmF0aW9uIl06MCk7DQoJCQkJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCRsZXZlbC4iX3BhZ2luYXRpb24iLCAkbmJwZXJwYWdlKTsNCgkJCQl9DQoJCQkJJHRoaXMtPlNldFByZWZlcmVuY2UoIm1heHNob3ducGFnZXMiLCAkbWF4c2hvd25wYWdlcyk7DQoJCQkJJHRoaXMtPlNldFByZWZlcmVuY2UoImFkbWlucGFnZXMiLCAkYWRtaW5wYWdlcyk7DQoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgImRlZmF1bHRhZG1pbiIsICRyZXR1cm5pZCwgYXJyYXkoImFjdGl2ZV90YWIiPT4icHJlZmVyZW5jZXMiLCAibW9kdWxlX21lc3NhZ2UiPT4kdGhpcy0+TGFuZygibWVzc2FnZV9tb2RpZmllZCIpKSk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJjaGFuZ2VkZWZ0ZW1wbGF0ZXMiOg0KCQkJCWZvcmVhY2goJHBhcmFtcyBhcyAka2V5PT4kdmFsdWUpew0KCQkJCSAgICBpZigka2V5ICE9ICJzdWJtaXQiKQkgICAkdGhpcy0+c2V0UHJlZmVyZW5jZSgka2V5LCAkdmFsdWUpOw0KCQkJCX0NCgkJCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAiZGVmYXVsdGFkbWluIiwgJHJldHVybmlkLCBhcnJheSgiYWN0aXZlX3RhYiI9PiJ0ZW1wbGF0ZXMiLCAibW9kdWxlX21lc3NhZ2UiPT4kdGhpcy0+TGFuZygibWVzc2FnZV9tb2RpZmllZCIpKSk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJkZWxldGV0cGwiOg0KCQkJCSRuZXdwYXJhbXMgPSBhcnJheSgiYWN0aXZlX3RhYiI9PiJ0ZW1wbGF0ZXMiKTsNCgkJCQkkZGVmdGVtcGxhdGVzID0gJHRoaXMtPmdldERlZmF1bHRUZW1wbGF0ZXMoKTsNCgkJCSAgICBpZihpc3NldCgkcGFyYW1zWyJ0cGxuYW1lIl0pICYmICFpbl9hcnJheSgkcGFyYW1zWyJ0cGxuYW1lIl0sICRkZWZ0ZW1wbGF0ZXMpKXsNCgkJCQkgICAgaWYoJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCRwYXJhbXNbInRwbG5hbWUiXSkpCSAgICRuZXdwYXJhbXNbIm1vZHVsZV9tZXNzYWdlPiJdID0gJHRoaXMtPkxhbmcoIm1lc3NhZ2VfbW9kaWZpZWQiKTsNCgkJCQl9DQoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgImRlZmF1bHRhZG1pbiIsICRyZXR1cm5pZCwgJG5ld3BhcmFtcyk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJkZWxldGVxdWVyeSI6DQoJCQkJJG5ld3BhcmFtcyA9IGFycmF5KCJhY3RpdmVfdGFiIj0+InF1ZXJpZXMiKTsNCgkJCQlpZihpc3NldCgkcGFyYW1zWyJxdWVyeWlkIl0pKXsNCgkJCQkJJGRiID0mICR0aGlzLT5HZXREYigpOw0KCQkJCQlpZigkZGItPkV4ZWN1dGUoIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld19zYXZlZF9xdWVyaWVzIFdIRVJFIGlkPT8gTElNSVQgMSIsIGFycmF5KCRwYXJhbXNbInF1ZXJ5aWQiXSkpKXsNCgkJCQkJCSRuZXdwYXJhbXNbIm1vZHVsZV9tZXNzYWdlIl0gPSAkdGhpcy0+TGFuZygibWVzc2FnZV9kZWxldGVkIik7DQoJCQkJCX0NCgkJCQl9DQoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgImRlZmF1bHRhZG1pbiIsICRyZXR1cm5pZCwgJG5ld3BhcmFtcyk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJ0ZXN0cXVlcnkiOg0KCQkJCWlmKGlzc2V0KCRwYXJhbXNbInF1ZXJ5aWQiXSkgJiYgJHF1ZXJ5ID0gJHRoaXMtPmdldF9xdWVyaWVzKGFycmF5KCJpZCI9PiRwYXJhbXNbInF1ZXJ5aWQiXSkpKXsNCgkJCQkJJHF1ZXJ5ID0gJHF1ZXJ5WzBdOw0KCQkJCQllY2hvICI8cD48Yj4iLiR0aGlzLT5MYW5nKCJxdWVyeSIpLiI6PC9iPiAiLiRxdWVyeS0+bmFtZTsNCgkJCQkJaWYoJHF1ZXJ5LT5vcmRlciAhPSAiIikJZWNobyAiIE9SREVSIEJZICIuJHF1ZXJ5LT5vcmRlcjsNCgkJCQkJZWNobyAiPC9wPiI7DQoJCQkJCSRnZXRmdW5jdGlvbiA9ICJnZXRfbGV2ZWxfIi4kcXVlcnktPndoYXQ7DQoJCQkJCSRpdGVtbGlzdCA9ICR0aGlzLT4kZ2V0ZnVuY3Rpb24oYXJyYXkoKSwgZmFsc2UsICIiLCAiIiwgMCwgMCwgJHF1ZXJ5LT53aGVyZWNsYXVzZSwgJHF1ZXJ5LT53aGVyZXZhbHVlcywgKCRxdWVyeS0+cXVlcnlvcmRlciA9PSAiIj9mYWxzZTokcXVlcnktPnF1ZXJ5b3JkZXIpKTsNCgkJCQkJZWNobyAiPHA+PGI+Ii4kdGhpcy0+TGFuZygicmVzdWx0cyIpLiIgKCIuY291bnQoJGl0ZW1saXN0KS4iKSA6PC9iPjwvcD4iOw0KCQkJCQllY2hvICI8dWw+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbWxpc3QgYXMgJGl0ZW0pCWVjaG8gIjxsaT4iLiRpdGVtLT5uYW1lLiI8L2xpPiI7DQoJCQkJCWVjaG8gIjwvdWw+IjsNCgkJCQl9DQoJCQkJZWNobyAiPHA+Ii4kdGhpcy0+Q3JlYXRlTGluaygkaWQsICJkZWZhdWx0YWRtaW4iLCAkcmV0dXJuaWQsIGxhbmcoImJhY2siKSwgYXJyYXkoImFjdGl2ZV90YWIiPT4icXVlcmllcyIpKS4iPC9wPiI7DQoJCQkJYnJlYWs7DQoJCQkJCQ0KDQoJCQljYXNlICJkZWZhdWx0IjoNCgkJCWRlZmF1bHQ6DQoJCQkJcGFyZW50OjpEb0FjdGlvbigkYWN0aW9uLCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCk7DQoJCQkJYnJlYWs7DQoJCX0NCg0KDQoJfQ0KCWZ1bmN0aW9uIHBsY3JlYXRlYWxpYXMoJG5hbWUpew0KCQkvLyB0cmFuc2Zvcm1zICRuYW1lIGludG8gYSB1cmwtZnJpZW5kbHkgYWxpYXMNCgkJDQoJCS8vIGFzIGEgc3VnZ2VzdGlvbiBmcm9tIEFNVCwgdGhlIGZpcnN0IHBhcnQgZGVhbHMgd2l0aCBzbWFydCBxdW90ZXMNCiAJCSRzZWFyY2ggPSBhcnJheShjaHIoMHhlMikgLiBjaHIoMHg4MCkgLiBjaHIoMHg5OCksDQoJCQkJCQkgIGNocigweGUyKSAuIGNocigweDgwKSAuIGNocigweDk5KSwNCgkJCQkJCSAgY2hyKDB4ZTIpIC4gY2hyKDB4ODApIC4gY2hyKDB4OWMpLA0KCQkJCQkJICBjaHIoMHhlMikgLiBjaHIoMHg4MCkgLiBjaHIoMHg5ZCksDQoJCQkJCQkgIGNocigweGUyKSAuIGNocigweDgwKSAuIGNocigweDkzKSwNCgkJCQkJCSAgY2hyKDB4ZTIpIC4gY2hyKDB4ODApIC4gY2hyKDB4OTQpKTsNCiAJCSRuYW1lID0gc3RyX3JlcGxhY2UoJHNlYXJjaCwgIiIsICRuYW1lKTsNCgkJDQogCQkvLyB0aGUgc2Vjb25kIHBhcnQgdXNlcyB0aGUgY21zIHZlcnNpb24NCiAJCSRhbGlhcyA9IG11bmdlX3N0cmluZ190b191cmwoJG5hbWUsIGZhbHNlKTsNCiAJCXJldHVybiAkYWxpYXM7DQoJfQ0KDQoJZnVuY3Rpb24gY2hlY2thbGlhcygkZGJ0YWJsZSwgJGFsaWFzLCAkaXRlbWlkPWZhbHNlLCAkaWRmaWVsZD0iaWQiLCAkYWxpYXNmaWVsZD0iYWxpYXMiKXsNCgkJLy8gY2hlY2tzIGlmIHRoaXMgYWxpYXMgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxldmVsDQoJCSRxdWVyeSA9ICJTRUxFQ1QgIi4kaWRmaWVsZC4iIEZST00gIi5jbXNfZGJfcHJlZml4KCkuJGRidGFibGUuIiBXSEVSRSAiLiRhbGlhc2ZpZWxkLiIgPSA/IjsNCgkJaWYoJGl0ZW1pZCkgJHF1ZXJ5IC49ICIgQU5EICIuJGlkZmllbGQuIiE9Ii4kaXRlbWlkOw0KCQkkZGIgPSAkdGhpcy0+R2V0RGIoKTsNCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkYWxpYXMpKTsNCgkJJHRhcmdldGlkID0gMDsNCgkJaWYoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpICR0YXJnZXRpZCA9ICRyb3dbImlkIl07DQoJCXJldHVybiAoJHRhcmdldGlkID09IDApOw0KCX0NCglmdW5jdGlvbiBCdWlsZFByZXR0eVVybHMoJHBhcmFtcywgJHJldHVybmlkPS0xKXsNCgkJLy8gdHJhbnNmb3JtcyBnaXZlbiBwYXJhbXMgaW50byBhIHByZXR0eSB1cmwNCgkJJHByZXR0eXVybCA9ICR0aGlzLT5HZXROYW1lKCkuIi8iOw0KCQlpZihpc3NldCgkcGFyYW1zWyJxdWVyeSJdKSl7DQoJCQkkcHJldHR5dXJsIC49ICJxdWVyeS8iLiRwYXJhbXNbInF1ZXJ5Il07CQ0KCQl9ZWxzZWlmKGlzc2V0KCRwYXJhbXNbImFsaWFzIl0pKXsNCgkJCSRwcmV0dHl1cmwgLj0gImRldGFpbC8iLiRwYXJhbXNbImFsaWFzIl07DQoJCX1lbHNlaWYoaXNzZXQoJHBhcmFtc1sicGFyZW50Il0pKXsNCgkJCSRwcmV0dHl1cmwgLj0gJHBhcmFtc1sid2hhdCJdLiIvIi4kcGFyYW1zWyJwYXJlbnQiXTsNCgkJfWVsc2V7DQoJCQkkcHJldHR5dXJsIC49ICRwYXJhbXNbIndoYXQiXTsNCgkJfQ0KCQlpZighaXNzZXQoJHBhcmFtc1siYWxpYXMiXSkgJiYgaXNzZXQoJHBhcmFtc1sicGFnZWluZGV4Il0pICYmIGlzc2V0KCRwYXJhbXNbIm5icGVycGFnZSJdKSkJJHByZXR0eXVybCAuPSAiLyIuJHBhcmFtc1sicGFnZWluZGV4Il0uIi8iLiRwYXJhbXNbIm5icGVycGFnZSJdOw0KCQkkcHJldHR5dXJsIC49ICIvIi4kcmV0dXJuaWQ7DQoJCXJldHVybiAkcHJldHR5dXJsOw0KCX0NCglmdW5jdGlvbiBEb0NoZWNrYm94ZXMoJGlkLCAkbmFtZSwgJGNob2ljZXMsICRzZWxlY3RlZD1hcnJheSgpLCAkZGVsaW1pdGVyPSI8YnIvPiIpew0KCQkvLyBwcmV0dHkgbXVjaCBsaWtlIENyZWF0ZUlucHV0UmFkaW9Hcm91cCwgYnV0IHVzaW5nIGNoZWNrYm94ZXMNCgkJaWYoIWlzX2FycmF5KCRzZWxlY3RlZCkpCSRzZWxlY3RlZCA9IGFycmF5KCk7DQoJCSRvdXRwdXQgPSAiIjsNCgkJZm9yZWFjaCgkY2hvaWNlcyBhcyAka2V5PT4kdmFsdWUpew0KCQkJJG91dHB1dCAuPSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICRuYW1lLiJbXSIsICR2YWx1ZSwgKGluX2FycmF5KCR2YWx1ZSwgJHNlbGVjdGVkKT8kdmFsdWU6MCkpLiIgIi4ka2V5LiRkZWxpbWl0ZXI7DQoJCX0NCgkJcmV0dXJuICRvdXRwdXQ7DQoJfQ0KCWZ1bmN0aW9uIHBhcnNla2V5d29yZHMoJHN0cmluZyl7DQoJCS8vIGN1dHMgdGhlIHNlYXJjaHdvcmRzIG9mIHRoZSBzZWFyY2ggZm9ybSBpbnRvIHBpZWNlcw0KCQkvLyBiYXNjaWFsbHksIHRoaXMgZXhwbG9kZXMgdGhlICRzdHJpbmcsIGJ1dCB0YWtlcyBub3RpY2Ugb2YgdGhlIHF1b3Rlcw0KCQkNCgkJJGluc2lkZSA9IChzdWJzdHIoJHN0cmluZywwLDEpID09ICciJyk7DQoJCSRwYXJ0cyA9IGV4cGxvZGUoJyInLCRzdHJpbmcpOw0KCQ0KCQlpZihjb3VudCgkcGFydHMpIDwgMil7DQoJCQlpZigkaW5zaWRlKXsNCgkJCQlyZXR1cm4gYXJyYXkoc3RyX3JlcGxhY2UoJyInLCIiLCRzdHJpbmcpKTsNCgkJCX1lbHNlew0KCQkJCXJldHVybiBleHBsb2RlKCIgIiwkc3RyaW5nKTsNCgkJCX0NCgkJfQ0KCQ0KCQkka2V5d29yZHMgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRwYXJ0cyBhcyAkcGFydCl7DQoJCQlpZigkcGFydCAhPSAiIil7DQoJCQkJaWYoJGluc2lkZSl7DQoJCQkJCSRrZXl3b3Jkc1tdID0gJHBhcnQ7DQoJCQkJfWVsc2V7DQoJCQkJCSR3b3JkcyA9IGV4cGxvZGUoIiAiLHRyaW0oJHBhcnQpKTsNCgkJCQkJZm9yZWFjaCgkd29yZHMgYXMgJHdvcmQpew0KCQkJCQkJaWYodHJpbSgkd29yZCkgIT0gIiIpCSRrZXl3b3Jkc1tdID0gJHdvcmQ7DQoJCQkJCX0NCgkJCQl9DQoJCQkJJGluc2lkZSA9ICEkaW5zaWRlOw0KCQkJfQ0KCQl9DQoJCXJldHVybiAka2V5d29yZHM7DQoJfQ0KDQoNCglmdW5jdGlvbiBnZXRfbGV2ZWxhcnJheSgpew0KCQkvLyByZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBsZXZlbHMgKHRvcCB0byBib3R0b20pDQoJCXJldHVybiBhcnJheSgic3RyZWV0dmlldyIpOw0KCX0NCg0KCWZ1bmN0aW9uIGdldF9tb2R1bGVoaWVyYXJjaHkoJGxldmVsPWZhbHNlKXsNCgkJJGhpZXJhcmNoeSA9IGFycmF5KCk7DQoJCQkkaGllcmFyY2h5WzFdID0gInN0cmVldHZpZXciOw0KCQlyZXR1cm4gJGhpZXJhcmNoeTsNCgl9DQoJDQoJZnVuY3Rpb24gZ2V0X2xldmVsc2VhcmNoZmllbGRzKCRsZXZlbCl7DQoJCS8vIHJldHVybnMgdGhlIGZpZWxkIG9mIGEgbGV2ZWwgd2hpY2ggYXJlIHNlYXJjaGFibGUgKGZvciB0aGUgc2ltcGxlIHNlYXJjaCBhY3Rpb24pDQoJCSRmaWVsZHMgPSBhcnJheSgpOw0KCQlzd2l0Y2goJGxldmVsKXsNCgkJCWNhc2UgInN0cmVldHZpZXciOg0KCQkJCSRmaWVsZHMgPSBhcnJheSgibmFtZSIpOw0KCQkJCWJyZWFrOw0KCQkJCQkJDQoJCX0NCgkJcmV0dXJuICRmaWVsZHM7DQoJfQ0KCWZ1bmN0aW9uIGdldF9oaWVyYXJjaHlvcHRpb25zKCRlbmQ9ZmFsc2UsICR3aXRoZW1wdHlyb3c9dHJ1ZSwgJGRlcHRoc3ltYm9sPSImbmJzcDstJm5ic3A7Iil7DQoJCS8vIHJldHVybnMgYW4gYXJyYXkgb2YgcGFyZW50IG9wdGlvbnMgZm9yIGEgbGlua2VkIHRvIGEgc2VsZWN0ZWQgbGV2ZWwNCgkJLy8gdXNlZCBmb3IgdGhlIGhpZXJhcmNoeSBkcm9wZG93biBsaXN0IGluIHNlYXJjaCBhY3Rpb24NCgkJJGxldmVsYXJyYXkgPSAkdGhpcy0+Z2V0X2xldmVsYXJyYXkoKTsNCgkJIGlmKCFpbl9hcnJheSgkZW5kLCAkbGV2ZWxhcnJheSkpCSRlbmQgPSAkbGV2ZWxhcnJheVtjb3VudCgkbGV2ZWxhcnJheSktMV07DQoJCQ0KCQkvLyBidWlsZGluZyB0aGUgam9pbmVkIHF1ZXJ5DQoJCSR0YWJsZXMgPSAiIjsNCgkJJGZpZWxkcyA9ICIiOw0KCQkkb3JkZXJieSA9ICIiOw0KCQkkd2hlcmUgPSAiIjsNCgkJJGZpbmlzaGVkID0gZmFsc2U7DQoJCSRpID0gMTsNCgkJZm9yZWFjaCgkbGV2ZWxhcnJheSBhcyAkbGV2ZWwpew0KCQkJaWYoJGxldmVsID09ICRlbmQpCSRmaW5pc2hlZCA9IHRydWU7DQoJCQlpZighJGZpbmlzaGVkKXsNCgkJCQkkdGFibGVzIC49ICgkdGFibGVzID09ICIiPyIiOiIsICIpLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlXyIuJHRoaXMtPkdldE5hbWUoKS4iXyIuJGxldmVsLiIgdCIuJGkuIiAiOw0KCQkJCSRmaWVsZHMgLj0gKCRmaWVsZHMgPT0gIiI/IiI6IiwgIikuInQiLiRpLiIuaWQgaWQiLiRpLiIsIHQiLiRpLiIubmFtZSBuYW1lIi4kaTsNCgkJCQkkb3JkZXJieSAuPSAoJG9yZGVyYnkgPT0gIiI/IiI6IiwgIikuInQiLiRpLiIuaXRlbV9vcmRlciBERVNDIjsNCgkJCQlpZigkaSA+IDEpICR3aGVyZSAuPSAiIEFORCB0Ii4oJGktMSkuIi5pZCA9IHQiLiRpLiIucGFyZW50ICI7DQoJCQkJJHdoZXJlIC49ICgkd2hlcmUgPT0gIiI/IiI6IiBBTkQgIikuIiB0Ii4kaS4iLmFjdGl2ZT0xIjsNCgkJCQkkaSsrOw0KCQkJfQ0KCQl9DQoJCWlmKCRmaWVsZHMgPT0gIiIpCXJldHVybiBmYWxzZTsNCgkJDQoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsNCgkJJHF1ZXJ5ID0gIlNFTEVDVCAiLiRmaWVsZHMuIiBGUk9NICIuJHRhYmxlcy4iIFdIRVJFICIuJHdoZXJlLiIgT1JERVIgQlkgIi4kb3JkZXJieTsNCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQoNCgkJLy8gcGFyc2luZyByZXN1bHRzDQoJCSRjdXJyZW50ID0gYXJyYXkoKTsNCgkJJHRtcGxhc3RsZXZlbCA9IGFycmF5KCk7DQoJCSRyZXN1bHRzID0gYXJyYXkoKTsNCgkJJGZpbmFsID0gJGkgLTE7DQoJCXdoaWxlKCRqIDwgJGZpbmFsICl7DQoJCQkkY3VycmVudFskal0gPSBhcnJheSgiaWQiPT5mYWxzZSwibmFtZSI9PiIiKTsNCgkJCSRqKys7DQoJCX0NCgkJd2hpbGUoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpew0KCQkJLy8gZWFjaCByb3cgaGFzIGEgZnVsbCBoaWVyYXJjaHksIGZyb20gdG9wIHBhcmVudCB0byBmaW5hbCBjaGlsZA0KCQkJJGogPSAkZmluYWw7DQoJCQl3aGlsZSgkaiA+IDAgKXsNCgkJCQlpZigkcm93WyJpZCIuJGpdICE9ICRjdXJyZW50WyRqXVsiaWQiXSl7DQoJCQkJCWlmKCRjdXJyZW50WyRqXVsiaWQiXSAmJiBjb3VudCgkY3VycmVudFskal1bInJlcyJdKSA+IDApew0KCQkJCQkJJGtleSA9IHN0cl9yZXBlYXQoJGRlcHRoc3ltYm9sLCAoJGogLTEpKS4kY3VycmVudFskal1bIm5hbWUiXTsNCgkJCQkJCSRyZXN1bHRzWyRrZXldID0gaW1wbG9kZSgiLCIsJGN1cnJlbnRbJGpdWyJyZXMiXSk7DQoJCQkJCX0NCgkJCQkJJGN1cnJlbnRbJGpdID0gYXJyYXkoImlkIj0+JHJvd1siaWQiLiRqXSwgIm5hbWUiPT4kcm93WyJuYW1lIi4kal0sICJyZXMiPT5hcnJheSgpKTsNCgkJCQl9DQoJCQkJJGN1cnJlbnRbJGpdWyJyZXMiXVtdID0gJHJvd1siaWQiLiRmaW5hbF07DQoJCQkJJGotLTsNCgkJCX0NCgkJCSRyZXN1bHRzW3N0cl9yZXBlYXQoJGRlcHRoc3ltYm9sLCAoJGZpbmFsIC0xKSkuJHJvd1sibmFtZSIuJGZpbmFsXV0gPSAkcm93WyJpZCIuJGZpbmFsXTsNCgkJfQ0KCQkvLyB3ZSBjbG9zZSB0aGUgcmVtYWluaW5nIHNldHMNCgkJJGogPSAkZmluYWwgLTE7DQoJCXdoaWxlKCRqID4gMCApew0KCQkJJGtleSA9IHN0cl9yZXBlYXQoJGRlcHRoc3ltYm9sLCAoJGogLTEpKS4kY3VycmVudFskal1bIm5hbWUiXTsNCgkJCSRyZXN1bHRzWyRrZXldID0gaW1wbG9kZSgiLCIsJGN1cnJlbnRbJGpdWyJyZXMiXSk7DQoJCQkkai0tOw0KCQl9DQoJCWlmKCR3aXRoZW1wdHlyb3cpCSRyZXN1bHRzWyIiXSA9ICIiOw0KCQlyZXR1cm4gYXJyYXlfcmV2ZXJzZSgkcmVzdWx0cyk7DQoJfQ0KCWZ1bmN0aW9uIGdldF9hZG1pbl9oaWVyYXJjaHlvcHRpb25zKCRlbmQ9ZmFsc2UsICR3aXRoZW1wdHlyb3c9dHJ1ZSwgJHNlcGFyYXRvcj0iICZndDsgIiwgJG9yZGVyYnluYW1lPWZhbHNlKXsNCgkJLy8gcmV0dXJucyBhbiBhcnJheSBvZiBwYXJlbnQgb3B0aW9ucyBsaW5rZWQgdG8gYSBzZWxlY3RlZCBsZXZlbA0KCQkvLyB1c2VkIGZvciB0aGUgcGFyZW50IGFuZCBmaWx0ZXIgZHJvcGRvd24gaW4gdGhlIGFkbWluDQoJCS8vIHNob3dzIGVtcHR5IHBhcmVudHMgdG9vDQoJCSRsZXZlbGFycmF5ID0gJHRoaXMtPmdldF9sZXZlbGFycmF5KCk7DQoJCWlmKCFpbl9hcnJheSgkZW5kLCAkbGV2ZWxhcnJheSkpCSRlbmQgPSAiaXRlbSI7DQoJCQ0KCQkvLyBidWlsZGluZyB0aGUgam9pbmVkIHF1ZXJ5DQoJCSR0YWJsZXMgPSAiIjsNCgkJJGZpZWxkcyA9ICIiOw0KCQkkb3JkZXJieSA9ICIiOw0KCQkkZmluaXNoZWQgPSBmYWxzZTsNCgkJJGkgPSAxOw0KCQlmb3JlYWNoKCRsZXZlbGFycmF5IGFzICRsZXZlbCl7DQoJCQlpZigkbGV2ZWwgPT0gJGVuZCkJJGZpbmlzaGVkID0gdHJ1ZTsNCgkJCWlmKCEkZmluaXNoZWQpew0KCQkJCSR0YWJsZXMgLj0gKCRpPT0xPyIiOiIgTEVGVCBKT0lOICIpLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlXyIuJHRoaXMtPkdldE5hbWUoKS4iXyIuJGxldmVsLiIgdCIuJGkuIiAiOw0KCQkJCWlmKCRpPjEpCSR0YWJsZXMgLj0gIk9OIHQiLigkaS0xKS4iLmlkID0gdCIuJGkuIi5wYXJlbnQgIjsNCgkJCQkkZmllbGRzIC49ICgkZmllbGRzID09ICIiPyIiOiIsICIpLiJ0Ii4kaS4iLmlkIGlkIi4kaS4iLCB0Ii4kaS4iLm5hbWUgbmFtZSIuJGk7DQoJCQkJaWYoJG9yZGVyYnluYW1lKXsNCgkJCQkJJG9yZGVyYnkgLj0gKCRvcmRlcmJ5ID09ICIiPyIiOiIsICIpLiJ0Ii4kaS4iLm5hbWUiOw0KCQkJCX1lbHNlew0KCQkJCQkkb3JkZXJieSAuPSAoJG9yZGVyYnkgPT0gIiI/IiI6IiwgIikuInQiLiRpLiIuaXRlbV9vcmRlciwgdCIuJGkuIi5uYW1lIjsNCgkJCQl9DQoJCQkJJGkrKzsNCgkJCX0NCgkJfQ0KCQlpZigkZmllbGRzID09ICIiKQlyZXR1cm4gYXJyYXkoKTsNCgkJDQoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsNCgkJJHF1ZXJ5ID0gIlNFTEVDVCAiLiRmaWVsZHMuIiBGUk9NICIuJHRhYmxlcy4iIE9SREVSIEJZICIuJG9yZGVyYnk7DQoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KCQkkb3B0aW9ucyA9IGFycmF5KCk7DQoJCXdoaWxlKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsNCgkJCS8vIGVhY2ggcm93IGhhcyBhIGZ1bGwgaGllcmFyY2h5LCBmcm9tIHRvcCBwYXJlbnQgdG8gZmluYWwgY2hpbGQNCgkJCSR2YWx1ZSA9ICRyb3dbImlkIi4oJGktMSldOw0KCQkJJGogPSAxOw0KCQkJJG9wdGlvbl9uYW1lID0gIiI7DQoJCQl3aGlsZSgkaiA8ICRpKXsNCgkJCQkkb3B0aW9uX25hbWUgLj0gKCRqPT0xPyIiOiRzZXBhcmF0b3IpLiRyb3dbIm5hbWUiLiRqXTsNCgkJCQkkaisrOw0KCQkJfQ0KCQkJJG9wdGlvbnNbJG9wdGlvbl9uYW1lXSA9ICR2YWx1ZTsNCgkJfQ0KCQlpZigkd2l0aGVtcHR5cm93KQkkb3B0aW9uc1siIl0gPSAiIjsNCgkJcmV0dXJuICRvcHRpb25zOw0KCX0NCglmdW5jdGlvbiBnZXRfbW9kdWxlR2V0VmFycygpew0KCQkvLyB1bm9ydGhvZG94IGhhY2sgc28gdGhhdCBkaWZmZXJlbnQgY2FsbHMgb2YgdGhlIG1vZHVsZSBzcGVhayB3aXRoIGVhY2ggb3RoZXINCgkJLy8gYmFzaWNhbGx5LCB3ZSByZXRyaWV2ZSBwYXJhbWV0ZXJzIGluIHRoZSB1cmwgdGhhdCB3ZXJlIG1lYW50IGZvciBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIG1vZHVsZQ0KCQkvLyBzZWUgRkFRIGZvciBtb3JlIGluZm8gb24gdGhpcw0KCQlnbG9iYWwgJF9HRVQ7DQoJCWdsb2JhbCAkZ0NtczsNCgkJJHJlZGlyZWN0aW9uID0gZmFsc2U7DQoJCWlmKGlzc2V0KCRnQ21zLT5jb25maWdbInVybF9yZXdyaXRpbmciXSkpew0KCQkJLy8gY29yZSAxLjYgb3IgbW9yZQ0KCQkJJHJlZGlyZWN0aW9uID0gJGdDbXMtPmNvbmZpZ1sidXJsX3Jld3JpdGluZyJdOw0KCQl9ZWxzZXsNCgkJCS8vIGNvcmUgYmVsb3cgMS42DQoJCQlpZigkZ0Ntcy0+Y29uZmlnWyJhc3N1bWVfbW9kX3Jld3JpdGUiXSAmJiBpc3NldCgkX0dFVFsicGFnZSJdKSl7DQoJCQkJJHJlZGlyZWN0aW9uID0gIm1vZF9yZXdyaXRlIjsNCgkJCX1lbHNlaWYoISRnQ21zLT5jb25maWdbImFzc3VtZV9tb2RfcmV3cml0ZSJdICYmICRnQ21zLT5jb25maWdbImludGVybmFsX3ByZXR0eV91cmxzIl0gJiYgaXNzZXQoJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0pKXsNCgkJCQkkcmVkaXJlY3Rpb24gPSAiaW50ZXJuYWwiOw0KCQkJfQ0KCQl9DQoJCSRwYXJhbXMgPSBhcnJheSgpOw0KCQkkZ2xvYmFsbW9kdWxldmFycyA9IGFycmF5KCk7DQoJCWlmKGlzc2V0KCRfR0VUWyJtYWN0Il0pKXsNCgkJCS8vIGlmIHdlIGFyZW4ndCB1c2luZyBwcmV0dHkgdXJscy4uLg0KCQkJJG1vZGluZm8gPSBleHBsb2RlKCIsIiwkX0dFVFsibWFjdCJdKTsNCgkJCWlmKGlzc2V0KCRtb2RpbmZvKSAmJiAkbW9kaW5mb1swXSA9PSAkdGhpcy0+R2V0TmFtZSgpKXsNCgkJCQlpZihpc3NldCgkX0dFVFskbW9kaW5mb1sxXS4icGFyZW50Il0pKQ0KCQkJCQkkZ2xvYmFsbW9kdWxldmFyc1sicGFyZW50Il09JF9HRVRbJG1vZGluZm9bMV0uInBhcmVudCJdOw0KCQkJCWlmKGlzc2V0KCRfR0VUWyRtb2RpbmZvWzFdLiJ3aGF0Il0pKQ0KCQkJCQkkZ2xvYmFsbW9kdWxldmFyc1sid2hhdCJdPSRfR0VUWyRtb2RpbmZvWzFdLiJ3aGF0Il07DQoJCQkJaWYoaXNzZXQoJF9HRVRbJG1vZGluZm9bMV0uImFsaWFzIl0pKQ0KCQkJCQkkZ2xvYmFsbW9kdWxldmFyc1siYWxpYXMiXT0kX0dFVFskbW9kaW5mb1sxXS4iYWxpYXMiXTsNCgkJCQlpZihpc3NldCgkX0dFVFskbW9kaW5mb1sxXS4icGFnZWluZGV4Il0pKQ0KCQkJCQkkZ2xvYmFsbW9kdWxldmFyc1sicGFnZWluZGV4Il09JF9HRVRbJG1vZGluZm9bMV0uInBhZ2VpbmRleCJdOw0KCQkJfQ0KCQl9ZWxzZWlmKCRyZWRpcmVjdGlvbiA9PSAibW9kX3Jld3JpdGUiIHx8ICRyZWRpcmVjdGlvbiA9PSAiaW50ZXJuYWwiKXsNCgkJCSRwYXJhbXMgPSBhcnJheSgpOw0KCQkJaWYoJHJlZGlyZWN0aW9uID09ICJtb2RfcmV3cml0ZSIgJiYgaXNzZXQoJF9HRVRbInBhZ2UiXSkpew0KCQkJCS8vIGlmIHdlIGFyZSB1c2luZyBhbiBleHRlcm5hbCBtb2RfcmV3cml0ZSwgYXNzdW1pbmcgeW91IGFyZSB1c2luZyB0aGUgdmVyeQ0KCQkJCS8vIGJhc2ljIHJld3JpdGUgd2hpY2ggcHV0cyB0aGUgbW9kdWxlIGluZm9ybWF0aW9ucyBpbnNpZGUgdGhlIHBhZ2UgdmFyaWFibGUNCgkJCQkkcGFydHMgPSBleHBsb2RlKCIvIiwkX0dFVFsicGFnZSJdKTsNCgkJCQlmb3JlYWNoKCRwYXJ0cyBhcyAkcGFydCl7DQoJCQkJCWlmKCRwYXJ0ICE9ICIiKQkkcGFyYW1zW10gPSAkcGFydDsNCgkJCQl9DQoJCQl9ZWxzZWlmKCRyZWRpcmVjdGlvbiA9PSAiaW50ZXJuYWwiKXsNCgkJCQkvLyBpZiB3ZSBhcmUgdXNpbmcgdGhlIGludGVybmFsIHByZXR0eSB1cmxzDQoJCQkJJHBhcnRzID0gZXhwbG9kZSgiLyIsJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0pOw0KCQkJCSRzdGFydGVkID0gZmFsc2U7DQoJCQkJZm9yZWFjaCgkcGFydHMgYXMgJHBhcnQpew0KCQkJCQlpZigkc3RhcnRlZCAmJiAkcGFydCAhPSAiIikJJHBhcmFtc1tdID0gJHBhcnQ7DQoJCQkJCWlmKHN0cnRvbG93ZXIoJHBhcnQpID09ICJpbmRleC5waHAiKQkkc3RhcnRlZCA9IHRydWU7DQoJCQkJfQ0KCQkJfQ0KCQkJaWYoaXNzZXQoJHBhcmFtc1swXSkgJiYgc3RydG9sb3dlcigkcGFyYW1zWzBdKSA9PSBzdHJ0b2xvd2VyKCR0aGlzLT5HZXROYW1lKCkpKXsNCgkJCQkgLy8gd2UgYXJlIGluIGEgbW9kdWxlIGFjdGlvbg0KCQkJCSAvLyB0aGlzIHBhcnQgc2hvdWxkIGJlIGNoYW5nZWQgaWYgeW91IGNoYW5nZSB0aGUgcHJldHR5IHVybHMgc3RydWN0dXJlDQoJCQkJaWYoIWlzc2V0KCRwYXJhbXNbMV0pIHx8IHN0cnRvbG93ZXIoJHBhcmFtc1sxXSkgPT0gInF1ZXJ5Iil7DQoNCgkJCQl9ZWxzZWlmKGlzc2V0KCRwYXJhbXNbMV0pICYmIHN0cnRvbG93ZXIoJHBhcmFtc1sxXSkgPT0gImRldGFpbCIpew0KCQkJCQkkbGV2ZWxzID0gJHRoaXMtPmdldF9sZXZlbGFycmF5KCk7DQoJCQkJCSRnbG9iYWxtb2R1bGV2YXJzWyJ3aGF0Il0gPSAkbGV2ZWxzW2NvdW50KCRsZXZlbHMpLTFdOw0KCQkJCQkkZ2xvYmFsbW9kdWxldmFyc1siYWxpYXMiXSA9ICRwYXJhbXNbMl07DQoJCQkJfWVsc2V7DQoJCQkJCSRnbG9iYWxtb2R1bGV2YXJzWyJ3aGF0Il0gPSAkcGFyYW1zWzFdOw0KCQkJCQlzd2l0Y2goY291bnQoJHBhcmFtcykpew0KCQkJCQkJY2FzZSA2Og0KCQkJCQkJCSRnbG9iYWxtb2R1bGV2YXJzWyJwYWdlaW5kZXgiXSA9ICRwYXJhbXNbM107DQoJCQkJCQkJJGdsb2JhbG1vZHVsZXZhcnNbIm5icGVycGFnZSJdID0gJHBhcmFtc1s0XTsNCgkJCQkJCWNhc2UgNDoNCgkJCQkJCQkkZ2xvYmFsbW9kdWxldmFyc1sicGFyZW50Il0gPSAkcGFyYW1zWzJdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSA1Og0KCQkJCQkJCSRnbG9iYWxtb2R1bGV2YXJzWyJwYWdlaW5kZXgiXSA9ICRwYXJhbXNbMl07DQoJCQkJCQkJJGdsb2JhbG1vZHVsZXZhcnNbIm5icGVycGFnZSJdID0gJHBhcmFtc1szXTsNCgkJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gJGdsb2JhbG1vZHVsZXZhcnM7DQoJfQ0KCWZ1bmN0aW9uIGdldF9vYmp0cmVlKCRjdXJpZCwgJGN1cmxldmVsPWZhbHNlLCAkZmllbGQ9ImlkIil7DQoJCS8vIHRoaXMgYnVpbGRzIGFuIG9iamVjdCB0cmVlICgkaXRlbS0+cGFyZW50X29iamVjdC0+cGFyZW50X29iamVjdC4uLikNCgkJLy8gd2UgZmlyc3QgcHV0IGFsbCB0aGUgcGFyZW50cyBpbiBhbiBhcnJheQ0KCQkkcGFyZW50cyA9IGFycmF5KCk7DQoJCSRsZXZlbHMgPSAkdGhpcy0+Z2V0X2xldmVsYXJyYXkoKTsNCgkJaWYoISRjdXJsZXZlbCkJJGN1cmxldmVsID0gJGxldmVsc1tjb3VudCgkbGV2ZWxzKS0xXTsNCgkJJGkgPSBjb3VudCgkbGV2ZWxzKTsNCgkJJHN0YXJ0ZWQgPSBmYWxzZTsNCgkJd2hpbGUoJGN1cmlkICYmICRpID4gMCl7DQoJCQlpZigkbGV2ZWxzWyRpIC0xXSA9PSAkY3VybGV2ZWwpCSRzdGFydGVkID0gdHJ1ZTsNCgkJCWlmKCRzdGFydGVkKXsNCgkJCQkkZ2V0ZnVuY3Rpb24gPSAiZ2V0X2xldmVsXyIuJGxldmVsc1skaSAtMV07DQoJCQkJJGl0ZW0gPSAkdGhpcy0+JGdldGZ1bmN0aW9uKGFycmF5KCRmaWVsZD0+JGN1cmlkKSk7DQoJCQkJJGl0ZW0gPSBpc19hcnJheSgkaXRlbSk/JGl0ZW1bMF06JGl0ZW07DQoJCQkJJGl0ZW0tPl9fd2hhdCA9ICRsZXZlbHNbJGktMV07DQoJCQkJJHBhcmVudHNbXSA9ICRpdGVtOw0KCQkJCSRmaWVsZCA9ICJpZCI7DQoJCQkJJGN1cmlkID0gaXNzZXQoJGl0ZW0tPnBhcmVudF9pZCk/JGl0ZW0tPnBhcmVudF9pZDpmYWxzZTsNCgkJCX0NCgkJCSRpLS07DQoJCX0NCgkJDQoJCS8vIG5leHQsIHdlIHByb2Nlc3MgdGhlIGFycmF5IG9mIHBhcmVudHMgdG8gYnVpbGQgdGhlIHBhcmVudCB0cmVlDQoJCSRwYXJlbnR0cmVlID0gZmFsc2U7DQoJCSRpID0gY291bnQoJHBhcmVudHMpIC0gMTsNCgkJd2hpbGUoJGkgPj0gMCl7DQoJCQlpZigkcGFyZW50dHJlZSl7DQoJCQkJJG5ld3RyZWUgPSAkcGFyZW50c1skaV07DQoJCQkJJG5ld3RyZWUtPnBhcmVudF9vYmplY3QgPSAkcGFyZW50dHJlZTsNCgkJCQkkcGFyZW50dHJlZSA9ICRuZXd0cmVlOw0KCQkJfWVsc2V7DQoJCQkJJHBhcmVudHRyZWUgPSAkcGFyZW50c1skaV07DQoJCQl9DQoJCQkkaS0tOw0KCQl9DQoJCSR0aGlzLT5jdXJyZW50dHJlZSA9ICRwYXJlbnR0cmVlOw0KCQlyZXR1cm4gJHBhcmVudHRyZWU7DQoJfQ0KCWZ1bmN0aW9uIGJ1aWxkR2xvYmFsVHJlZSgpew0KCQkvLyB0aGlzIHNhdmVzIHRoZSBjdXJyZW50IHRyZWUgaW4gdGhlIG1vZHVsZS4uLg0KCQkkbGV2ZWxzID0gJHRoaXMtPmdldF9sZXZlbGFycmF5KCk7DQoJCSRnbG9iID0gJHRoaXMtPmdldF9tb2R1bGVHZXRWYXJzKCk7DQoJCWlmKGlzc2V0KCRnbG9iWyJwYWdlaW5kZXgiXSkpCSR0aGlzLT5jdXJyZW50cGFnZWluZGV4ID0gJGdsb2JbInBhZ2VpbmRleCJdOw0KCQlpZihpc3NldCgkZ2xvYlsiYWxpYXMiXSkpew0KCQkJJHRyZWUgPSAkdGhpcy0+Z2V0X29ianRyZWUoJGdsb2JbImFsaWFzIl0sICRsZXZlbHNbY291bnQoJGxldmVscyktMV0sICJhbGlhcyIpOw0KCQl9ZWxzZWlmKGlzc2V0KCRnbG9iWyJwYXJlbnQiXSkgJiYgaXNzZXQoJGdsb2JbIndoYXQiXSkpew0KCQkJJHRyZWUgPSAkdGhpcy0+Z2V0X29ianRyZWUoJGdsb2JbInBhcmVudCJdLCAkdGhpcy0+Z2V0X25leHRsZXZlbCgkZ2xvYlsid2hhdCJdLGZhbHNlKSwgImFsaWFzIik7DQoJCX0NCgkJDQoJCWlmKGlzc2V0KCR0cmVlKSAmJiAkdHJlZSl7DQoJCQkkdGhpcy0+Y3VycmVudHRyZWUgPSAkdHJlZTsNCgkJCS8vIHRoaXMgc2F2ZXMgdGhlIHNlbGVjdGVkIGl0ZW0gZm9yIGVhY2ggbGV2ZWwNCgkJCSR0aGlzLT5wbGN1cnJlbnRbJHRyZWUtPl9fd2hhdF0gPSAkdHJlZS0+YWxpYXM7DQoJCQl3aGlsZShpc3NldCgkdHJlZS0+cGFyZW50X29iamVjdCkpew0KCQkJCSR0cmVlID0gJHRyZWUtPnBhcmVudF9vYmplY3Q7DQoJCQkJJHRoaXMtPnBsY3VycmVudFskdHJlZS0+X193aGF0XSA9ICR0cmVlLT5hbGlhczsNCgkJCX0NCgkJfQ0KCX0NCglmdW5jdGlvbiBmdW5jdGlvbl9tb2RicmVhZGNydW1icygkcGFyYW1zLCAmJHNtYXJ0eSl7DQoJCS8vIHJlZ2lzdGVyZWQgc21hcnR5IGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGJyZWFkY3J1bWJzDQoJCS8vIHVzZXMgc2ltaWxhciBwYXJhbWV0ZXJzIHRvIHRoZSBjb3JlIGJyZWFkY3J1bWJzIGZ1bmN0aW9uDQoJCWlmKCEkdGhpcy0+Y3VycmVudHRyZWUpCQkkdGhpcy0+YnVpbGRHbG9iYWxUcmVlKCk7DQoJCQ0KCQlpZigkdGhpcy0+Y3VycmVudHRyZWUpew0KCQkJZ2xvYmFsICRnQ21zOw0KCQkJJHJldHVybmlkID0gJGdDbXMtPnZhcmlhYmxlc1siY29udGVudF9pZCJdOw0KCQkJLy8gd2UgY3JlYXRlIHRoZSBicmVhZGNydW1icw0KCQkJJGNsYXNzaWQgPSBpc3NldCgkcGFyYW1zWyJjbGFzc2lkIl0pPyIgY2xhc3M9XCIiLiRwYXJhbXNbImNsYXNzaWQiXS4iXCIiOiIiOw0KCQkJJGN1cnJlbnRjbGFzc2lkID0gaXNzZXQoJHBhcmFtc1siY3VycmVudGNsYXNzaWQiXSk/IiBjbGFzcz1cIiIuJHBhcmFtc1siY3VycmVudGNsYXNzaWQiXS4iXCIiOiIgY2xhc3M9XCJsYXN0aXRlbVwiIjsNCgkJCSRzdGFydGxldmVsID0gaXNzZXQoJHBhcmFtc1sic3RhcnRsZXZlbCJdKT8kdGhpcy0+Z2V0X25leHRsZXZlbCgkcGFyYW1zWyJzdGFydGxldmVsIl0sIGZhbHNlKTpmYWxzZTsNCgkJCSRkZWxpbWl0ZXIgPSBpc3NldCgkcGFyYW1zWyJkZWxpbWl0ZXIiXSk/JHBhcmFtc1siZGVsaW1pdGVyIl06JHRoaXMtPkxhbmcoImJyZWFkY3J1bWJzX2RlbGltaXRlciIpOw0KCQkJJGluaXRpYWwgPSBpc3NldCgkcGFyYW1zWyJpbml0aWFsIl0pPyRwYXJhbXNbImluaXRpYWwiXTokdGhpcy0+TGFuZygieW91YXJlaGVyZSIpOw0KDQoJCQkkb3V0cHV0ID0gIiI7DQoJCQkkY3VycmVudCA9ICR0aGlzLT5jdXJyZW50dHJlZTsNCgkJCSRnb2luZ29uID0gZmFsc2U7DQoJCQl3aGlsZShpc3NldCgkY3VycmVudC0+cGFyZW50X29iamVjdCkpew0KCQkJCSRjdXJyZW50ID0gJGN1cnJlbnQtPnBhcmVudF9vYmplY3Q7DQoJCQkJaWYoJGN1cnJlbnQtPl9fd2hhdCA9PSAkc3RhcnRsZXZlbCkJJGVuZGVkID0gdHJ1ZTsNCgkJCQlpZighJGVuZGVkKXsNCgkJCQkJJHBhcmFtcyA9IGFycmF5KCJ3aGF0Ij0+JHRoaXMtPmdldF9uZXh0bGV2ZWwoJGN1cnJlbnQtPl9fd2hhdCksICJwYXJlbnQiPT4kY3VycmVudC0+YWxpYXMpOw0KCQkJCQkkcHJldHR5dXJsID0gJHRoaXMtPkJ1aWxkUHJldHR5VXJscygkcGFyYW1zLCAkcmV0dXJuaWQpOw0KCQkJCQkkb3V0cHV0ID0gIjxzcGFuIi4kY2xhc3NpZC4iPiIuJHRoaXMtPkNyZWF0ZUxpbmsoIiIsICJkZWZhdWx0IiwgJHJldHVybmlkLCAkY3VycmVudC0+bmFtZSwgJHBhcmFtcywgIiIsIGZhbHNlLCBmYWxzZSwgIiIsIGZhbHNlLCAkcHJldHR5dXJsKS4iPC9zcGFuPiIuJGRlbGltaXRlci4kb3V0cHV0Ow0KCQkJCX0NCgkJCX0NCgkJCWlmKCRvdXRwdXQgIT0gIiIpICRvdXRwdXQgPSAkaW5pdGlhbC4kb3V0cHV0LiI8c3BhbiIuJGN1cnJlbnRjbGFzc2lkLiI+Ii4kdGhpcy0+Y3VycmVudHRyZWUtPm5hbWUuIjwvc3Bhbj4iOw0KCQkJDQoJCQlpZihpc3NldCgkcGFyYW1zWyJhc3NpZ24iXSkgJiYgJHBhcmFtc1siYXNzaWduIl0gIT0gIiIpew0KCQkJCSRzbWFydHktPmFzc2lnbigkcGFyYW1zWyJhc3NpZ24iXSwgJG91dHB1dCk7DQoJCQl9ZWxzZXsNCgkJCQllY2hvICRvdXRwdXQ7DQoJCQl9DQoJCX0NCgl9DQoJZnVuY3Rpb24gZnVuY3Rpb25fZ2V0X2xldmVsaXRlbSgkcGFyYW1zLCAmJHNtYXJ0eSl7DQoJCS8vIHJlZ2lzdGVyZWQgc21hcnR5IGZ1bmN0aW9uIHRoYXQgcmV0cmlldmVzIGEgZ2l2ZW4gaXRlbSAoYWxpYXMpIG9mIGEgZ2l2ZW4gbGV2ZWwgKHdoYXQpDQoJCWlmKAkhaXNzZXQoJHBhcmFtc1siYXNzaWduIl0pIHx8ICRwYXJhbXNbImFzc2lnbiJdID09ICIiIHx8ICFpc3NldCgkcGFyYW1zWyJ3aGF0Il0pIHx8ICFpc3NldCgkcGFyYW1zWyJhbGlhcyJdKSApCXJldHVybiBmYWxzZTsNCgkJaWYoIWluX2FycmF5KCRwYXJhbXNbIndoYXQiXSwgJHRoaXMtPmdldF9sZXZlbGFycmF5KCkpKQlyZXR1cm4gZmFsc2U7DQoJCSRnZXRmdW5jdGlvbiA9ICJnZXRfbGV2ZWxfIi4kcGFyYW1zWyJ3aGF0Il07DQoJCSRyZXN1bHRzID0gJHRoaXMtPiRnZXRmdW5jdGlvbihhcnJheSgiYWxpYXMiPT4kcGFyYW1zWyJhbGlhcyJdKSk7DQoJCSRpdGVtID0gaXNzZXQoJHJlc3VsdHNbMF0pPyRyZXN1bHRzWzBdOmZhbHNlOw0KCQkkc21hcnR5LT5hc3NpZ24oJHBhcmFtc1siYXNzaWduIl0sICRpdGVtKTsNCgl9DQoJZnVuY3Rpb24gY291bnRzb21ldGhpbmcoJHRhYmxlbmFtZSwkd2hhdD0iaWQiLCR3aGVyZT1hcnJheSgpLCR3aGVyZXN0cmluZz1mYWxzZSwkd2hlcmV2YWx1ZXM9YXJyYXkoKSwkcGFyZW50PWZhbHNlKXsNCgkJLy8gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgdGFibGUgY29ycmVzcG9uZGluZyB0byBjcml0ZXJpYXMNCgkJaWYoISRwYXJlbnQgJiYgaXNzZXQoJHdoZXJlWyJwYXJlbnQiXSkpCXVuc2V0KCR3aGVyZVsicGFyZW50Il0pOw0KCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7DQoJCWlmKCR3aGVyZXN0cmluZyl7DQoJCQkkd2hlcmVzdHJpbmcgPSAiIFdIRVJFICIuJHdoZXJlc3RyaW5nOw0KCQl9ZWxzZXsNCgkJCSR3aGVyZXN0cmluZyA9ICIiOw0KCQkJJHdoZXJldmFsdWVzID0gYXJyYXkoKTsNCgkJCWZvcmVhY2goJHdoZXJlIGFzICRrZXk9PiR2YWx1ZSl7DQoJCQkJaWYoJGtleSA9PSAicGFyZW50Iil7DQoJCQkJCSR3aGVyZXN0cmluZyAuPSAoJHdoZXJlc3RyaW5nID09ICIiPyIgV0hFUkUgIjoiIEFORCAiKS4iQS5wYXJlbnQ9Qi5pZCBBTkQgQi5hbGlhcz0/IjsNCgkJCQl9ZWxzZXsNCgkJCQkJJHdoZXJlc3RyaW5nIC49ICgkd2hlcmVzdHJpbmcgPT0gIiI/IiBXSEVSRSAiOiIgQU5EICIpLiJBLiIuJGtleS4iPT8iOw0KCQkJCX0NCgkJCQkkd2hlcmV2YWx1ZXNbXSA9ICR2YWx1ZTsNCgkJCX0NCgkJfQ0KCQkkcXVlcnkgPSAiU0VMRUNUIENPVU5UKEEuJHdoYXQpIG91cmNvdW50IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV8iLiR0aGlzLT5HZXROYW1lKCkuIl8iLiR0YWJsZW5hbWUuIiBBIjsNCgkJaWYoJHBhcmVudCAmJiBpc3NldCgkd2hhdFsicGFyZW50Il0pKQkkcXVlcnkgLj0gIiwgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV8iLiR0aGlzLT5HZXROYW1lKCkuIl8iLiRwYXJlbnQuIiBCIjsNCgkJJHF1ZXJ5IC49ICR3aGVyZXN0cmluZzsNCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwkd2hlcmV2YWx1ZXMpOw0KCQlpZiAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpew0KCQkJcmV0dXJuICRyb3dbIm91cmNvdW50Il07DQoJCX1lbHNlew0KCQkJcmV0dXJuIDA7DQoJCX0NCgl9DQoJDQoJDQoJZnVuY3Rpb24gYWRtaW5fcGFnaW5hdGUoJGxldmVsLCRuYnBlcnBhZ2UsJGlkLCRyZXR1cm5pZCwkcGFyYW1zKXsNCgkJLy8gc2FtZSBhcyBwYWdpbmF0ZSwgYnV0IGZvciB0aGUgYWRtaW4gcGFuZWxzDQoJCSR3aGVyZWNsYXVzZSA9IGFycmF5KCk7DQoJCWlmKGlzc2V0KCRwYXJhbXNbJGxldmVsLiJfc2hvd29ubHkiXSkgJiYgJHBhcmFtc1skbGV2ZWwuIl9zaG93b25seSJdICE9ICIiKQkkd2hlcmVjbGF1c2VbInBhcmVudCJdID0gJHBhcmFtc1skbGV2ZWwuIl9zaG93b25seSJdOw0KCQkkdG90YWwgPSAkdGhpcy0+Y291bnRzb21ldGhpbmcoJGxldmVsLCJpZCIsJHdoZXJlY2xhdXNlKTsNCgkJJG5leHRwYWdlID0gZmFsc2U7DQoJCSRwcmV2aW91c3BhZ2UgPSBmYWxzZTsNCgkJJHBhZ2VpbmZvID0gZmFsc2U7DQoJCSRwYWdlcyA9IGZhbHNlOw0KCQlpZigkbmJwZXJwYWdlID4gMCAmJiAkdG90YWwgPiAkbmJwZXJwYWdlKXsNCgkJCSRjdXJwYWdlID0gaXNzZXQoJHBhcmFtc1skbGV2ZWwuIl9wYWdlIl0pPyRwYXJhbXNbJGxldmVsLiJfcGFnZSJdOjA7DQoJCQkkbmJwYWdlcyA9IGNlaWwoJHRvdGFsLyRuYnBlcnBhZ2UpOw0KCQkJJHBhZ2VpbmZvID0gKCgkY3VycGFnZSAqICRuYnBlcnBhZ2UpICsgMSk7DQoJCQkkdG1wZW5kID0gJHBhZ2VpbmZvICsgJG5icGVycGFnZSAtIDE7DQoJCQlpZigkdG1wZW5kID4gJHRvdGFsKQkkdG1wZW5kID0gJHRvdGFsOw0KCQkJaWYoJHRtcGVuZCAhPSAkcGFnZWluZm8pCSRwYWdlaW5mbyAuPSAiLSIuJHRtcGVuZDsNCgkJCSRwYWdlaW5mbyAuPSAiIC8gIi4kdG90YWw7DQoJCQkkcGFnZXBhcmFtcyA9IGFycmF5KCJhY3RpdmVfdGFiIj0+JGxldmVsKTsNCgkJCWlmKGlzc2V0KCRwYXJhbXNbJGxldmVsLiJfc2hvd29ubHkiXSkgJiYgJHBhcmFtc1skbGV2ZWwuIl9zaG93b25seSJdICE9ICIiKXsNCgkJCQkkcGFnZXBhcmFtc1skbGV2ZWwuIl9zaG93b25seSJdID0gJHBhcmFtc1skbGV2ZWwuIl9zaG93b25seSJdOw0KCQkJfQ0KCQkJaWYoJGN1cnBhZ2UgPiAwKXsNCgkJCQkkcGFnZXBhcmFtc1skbGV2ZWwuIl9wYWdlIl0gPSAkY3VycGFnZSAtIDE7DQoJCQkJJHByZXZpb3VzcGFnZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImRlZmF1bHRhZG1pbiIsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoInByZXZpb3VzcGFnZSIpLCAkcGFnZXBhcmFtcyk7DQoJCQl9DQoJCQlpZigkY3VycGFnZSA8ICgkbmJwYWdlcy0xKSl7DQoJCQkJJHBhZ2VwYXJhbXNbJGxldmVsLiJfcGFnZSJdID0gJGN1cnBhZ2UgKyAxOw0KCQkJCSRuZXh0cGFnZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImRlZmF1bHRhZG1pbiIsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoIm5leHRwYWdlIiksICRwYWdlcGFyYW1zKTsNCgkJCX0NCgkJCSRpID0gMDsNCgkJCSRwYWdlcyA9ICR0aGlzLT5MYW5nKCJwYWdlcyIpOw0KCQkJd2hpbGUoJGkgPCAkbmJwYWdlcyl7DQoJCQkJaWYoJGkgPiAwKQkkcGFnZXMgLj0gIiZuYnNwOyAiOw0KCQkJCWlmKCRpID09ICRjdXJwYWdlKXsNCgkJCQkJJHBhZ2VzIC49ICRpOw0KCQkJCX1lbHNlew0KCQkJCQkkcGFnZXBhcmFtc1skbGV2ZWwuIl9wYWdlIl0gPSAkaTsNCgkJCQkJJHBhZ2VzIC49ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImRlZmF1bHRhZG1pbiIsICRyZXR1cm5pZCwgJGksICRwYWdlcGFyYW1zKTsNCgkJCQl9DQoJCQkJJGkrKzsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gYXJyYXkoJHBhZ2VpbmZvLCAkbmV4dHBhZ2UsICRwcmV2aW91c3BhZ2UsICRwYWdlcyk7DQoJfQ0KDQoJZnVuY3Rpb24gcGFnaW5hdGUoJHdoYXQsJHRvdGFsLCRpZCwkcmV0dXJuaWQsJHBhcmFtcywkYWN0aW9uPSJkZWZhdWx0Iil7DQoJCS8vIGZvciBmcm9udGVuZCB1c2FnZQ0KCQkvLyB0aGlzIGFzc2lnbnMgdGhlIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgcGFnZSBtZW51DQoJCQ0KCQkkbmJwZXJwYWdlID0gaXNzZXQoJHBhcmFtc1sibmJwZXJwYWdlIl0pPyRwYXJhbXNbIm5icGVycGFnZSJdOjA7DQoJCSRuYnBlcnBhZ2UgPSAoaW50KSAkbmJwZXJwYWdlOw0KCQlpZigkbmJwZXJwYWdlID09IDAgfHwgJG5icGVycGFnZSA+PSAkdG90YWwpew0KCQkJLy8gd2UncmUgbm90IHVzaW5nIHBhZ2luYXRpb24NCgkJCSR0aGlzLT5zbWFydHktPmFzc2lnbihhcnJheSgicGFnZV9zaG93aW5nIj0+ZmFsc2UsInBhZ2VfdG90YWxpdGVtcyI9PmZhbHNlLCJwYWdlX3BhZ2VudW1iZXJzIj0+ZmFsc2UsInBhZ2VfbmV4dCI9PmZhbHNlLCJwYWdlX3ByZXZpb3VzIj0+ZmFsc2UpKTsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCQkNCgkJLy8gd2UncmUgdXNpbmcgcGFnaW5hdGlvbg0KCQkkY3VycGFnZSA9IGlzc2V0KCRwYXJhbXNbInBhZ2VpbmRleCJdKT8kcGFyYW1zWyJwYWdlaW5kZXgiXToxOw0KCQkkbmJwYWdlcyA9IGNlaWwoJHRvdGFsLyRuYnBlcnBhZ2UpOw0KCQkkc2hvd2luZyA9ICgoKCRjdXJwYWdlIC0xKSAqICRuYnBlcnBhZ2UpICsgMSk7DQoJCSR0bXBlbmQgPSAkc2hvd2luZyArICRuYnBlcnBhZ2UgLSAxOw0KCQlpZigkdG1wZW5kID4gJHRvdGFsKQkkdG1wZW5kID0gJHRvdGFsOw0KCQlpZigkdG1wZW5kICE9ICRzaG93aW5nKQkkc2hvd2luZyAuPSAiLSIuJHRtcGVuZDsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJwYWdlX3Nob3dpbmciLCRzaG93aW5nKTsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJwYWdlX3RvdGFsaXRlbXMiLCR0b3RhbCk7DQoNCgkJJG5ld3BhcmFtcyA9ICRwYXJhbXM7DQoJCSRwcmV2aW91c2xpbmsgPSBmYWxzZTsNCgkJJG5leHRsaW5rID0gZmFsc2U7DQoJCWlmKCRjdXJwYWdlID4gMSl7DQoJCQkvLyB3ZSBjcmVhdGUgdGhlIGxpbmsgdG8gdGhlIHByZXZpb3VzIHBhZ2UNCgkJCSRuZXdwYXJhbXNbInBhZ2VpbmRleCJdID0gJGN1cnBhZ2UgLSAxOw0KCQkJJHByZXZpb3VzbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJGFjdGlvbiwgJHJldHVybmlkLCAiJmx0OyIsICRuZXdwYXJhbXMsICIiLCBmYWxzZSwgdHJ1ZSwgIiBjbGFzcz1cInByZXZpb3VzbGlua1wiIiwgZmFsc2UsICgkYWN0aW9uICE9ICJkZWZhdWx0Iik/IiI6JHRoaXMtPkJ1aWxkUHJldHR5VXJscygkbmV3cGFyYW1zLCAkcmV0dXJuaWQpKTsNCgkJfQ0KCQlpZigkY3VycGFnZSA8ICRuYnBhZ2VzKXsNCgkJCS8vIHdlIGNyZWF0ZSB0aGUgbGluayB0byB0aGUgbmV4dCBwYWdlDQoJCQkkbmV3cGFyYW1zWyJwYWdlaW5kZXgiXSA9ICRjdXJwYWdlICsgMTsNCgkJCSRuZXh0bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJGFjdGlvbiwgJHJldHVybmlkLCAiJmd0OyIsICRuZXdwYXJhbXMsICIiLCBmYWxzZSwgdHJ1ZSwgIiBjbGFzcz1cIm5leHRsaW5rXCIiLCBmYWxzZSwgKCRhY3Rpb24gIT0gImRlZmF1bHQiKT8iIjokdGhpcy0+QnVpbGRQcmV0dHlVcmxzKCRuZXdwYXJhbXMsICRyZXR1cm5pZCkpOw0KCQl9DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbigicGFnZV9uZXh0IiwkbmV4dGxpbmspOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oInBhZ2VfcHJldmlvdXMiLCRwcmV2aW91c2xpbmspOwkNCgkJCQkNCgkJLy8gd2UgY3JlYXRlIGxpbmtzIGZvciBlYWNoIHBhZ2UgbnVtYmVyDQoJCSRpID0gMTsNCgkJJGxpbmtzID0gYXJyYXkoKTsNCgkJd2hpbGUoJGkgPD0gJG5icGFnZXMgJiYgJG5icGFnZXMgPiAxKXsNCgkJCSRuZXdwYXJhbXNbInBhZ2VpbmRleCJdID0gJGk7DQoJCQlpZigkaSA9PSAkY3VycGFnZSl7DQoJCQkJJGxpbmtzW10gPSAiPGEgY2xhc3M9XCJwYWdlbnVtYmVyIGN1cnJlbnRcIj4iLiRpLiI8L2E+IjsNCgkJCX1lbHNlew0KCQkJCSRsaW5rc1tdID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQsICRpLCAkbmV3cGFyYW1zLCAiIiwgZmFsc2UsIHRydWUsICIgY2xhc3M9XCJwYWdlbnVtYmVyXCIiLCBmYWxzZSwgKCRhY3Rpb24gIT0gImRlZmF1bHQiKT8iIjokdGhpcy0+QnVpbGRQcmV0dHlVcmxzKCRuZXdwYXJhbXMsICRyZXR1cm5pZCkpOw0KCQkJfQ0KCQkJJGkrKzsNCgkJfQ0KCQkkaSA9IDA7DQoJCSR0bXBmbGFnID0gdHJ1ZTsNCgkJJG1heHBhZ2VzID0gJHRoaXMtPkdldFByZWZlcmVuY2UoIm1heHNob3ducGFnZXMiLDcpOw0KCQkkbWF4cGFnZXMgPSAoaW50KSAkbWF4cGFnZXM7DQoJCSRwYWdlbWVudSA9ICIiOw0KCQlpZigkbWF4cGFnZXMgPCAxKQkkbWF4cGFnZXMgPSA5OTk7DQoJCXdoaWxlKCRpIDwgY291bnQoJGxpbmtzKSl7DQoJCQlpZigkaSA8ICgkbWF4cGFnZXMtMSkgfHwgJG5icGFnZXMgPD0gJG1heHBhZ2VzKXsNCgkJCQkkcGFnZW1lbnUgLj0gKCRwYWdlbWVudSA9PSAiIj8iIjokdGhpcy0+TGFuZygicGFnZW1lbnVkZWxpbWl0ZXIiKSkuJGxpbmtzWyRpXTsNCgkJCX1lbHNlaWYoJGkgPT0gY291bnQoJGxpbmtzKSl7DQoJCQkJJHBhZ2VtZW51IC49ICRsaW5rc1skaV07DQoJCQl9ZWxzZWlmKCR0bXBmbGFnKXsNCgkJCQkkdG1wZmxhZyA9IGZhbHNlOw0KCQkJCSRwYWdlbWVudSAuPSAiPHNwYW4gY2xhc3M9XCJwYWdlbWVudW92ZXJmbG93XCI+Ii4kdGhpcy0+TGFuZygicGFnZW1lbnVvdmVyZmxvdyIpLiI8L3NwYW4+IjsNCgkJCX0NCgkJCSRpKys7DQoJCX0NCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCJwYWdlX3BhZ2VudW1iZXJzIiwkcGFnZW1lbnUpOw0KCX0NCg0KCWZ1bmN0aW9uIGdldF9kaXN0YW5jZXRvbGV2ZWwoJHBhcmVudG5hbWUsJGNoaWxkbmFtZT1mYWxzZSl7DQoJCS8vIGdldCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gbGV2ZWxzIChtb3N0IGxpa2VseSBiZXR3ZWVuIGEgbGV2ZWwgYW5kIHRoZSBmaW5hbCBsZXZlbCkNCgkJJGxldmVscyA9ICR0aGlzLT5nZXRfbGV2ZWxhcnJheSgpOw0KCQlpZighJGNoaWxkbmFtZSkJJGNoaWxkbmFtZSA9ICRsZXZlbHNbY291bnQoJGxldmVscyktMV07DQoJCSRwYXJlbnRwb3NpdGlvbiA9IGZhbHNlOw0KCQkkY2hpbGRwb3NpdGlvbiA9IGZhbHNlOw0KCQkkY291bnRlciA9IDA7DQoJCWZvcmVhY2goJGxldmVscyBhcyAkbGV2ZWwpew0KCQkJJGNvdW50ZXIrKzsNCgkJCWlmKCRsZXZlbCA9PSAkcGFyZW50bmFtZSkgJHBhcmVudHBvc2l0aW9uID0gJGNvdW50ZXI7DQoJCQlpZigkbGV2ZWwgPT0gJGNoaWxkbmFtZSkgJGNoaWxkcG9zaXRpb24gPSAkY291bnRlcjsNCgkJfQ0KCQlpZigkY2hpbGRwb3NpdGlvbiAmJiAkcGFyZW50cG9zaXRpb24pew0KCQkJcmV0dXJuIGFicygkcGFyZW50cG9zaXRpb24gLSAkY2hpbGRwb3NpdGlvbik7DQoJCX0NCgl9DQoJZnVuY3Rpb24gZ2V0X25leHRsZXZlbCgkY3VybGV2ZWwsJGZpbmRjaGlsZD10cnVlKXsNCgkJLy8gcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBsZXZlbCBiZWxvdyAoJGZpbmRjaGlsZD10cnVlKSBvciBhYm92ZSAoJGZpbmRjaGlsZD1mYWxzZSkNCgkJJGxldmVscyA9ICR0aGlzLT5nZXRfbGV2ZWxhcnJheSgpOw0KCQkkaSA9IDA7DQoJCSR3YW50ZWRsZXZlbCA9IGZhbHNlOw0KCQl3aGlsZSgkaSA8IGNvdW50KCRsZXZlbHMpKXsNCgkJCSRuZXh0ID0gJGZpbmRjaGlsZD8kaSsxOiRpLTE7DQoJCQlpZigkbGV2ZWxzWyRpXSA9PSAkY3VybGV2ZWwgJiYgaXNzZXQoJGxldmVsc1skbmV4dF0pKSAkd2FudGVkbGV2ZWwgPSAkbGV2ZWxzWyRuZXh0XTsNCgkJCSRpKys7DQoJCX0NCgkJcmV0dXJuICR3YW50ZWRsZXZlbDsNCgl9DQoJZnVuY3Rpb24gZ2V0X3BhcmVudHMoJHBhcmVudG5hbWUsJGNoaWxkbmFtZSwkY2hpbGRpZCl7DQoJCS8vIHdoZW4gdXNpbmcgdGhlIHNoYXJlY2hpbGRyZW4gb3B0aW9uLCByZXRyaWV2ZXMgdGhlIHBhcmVudHMgb2YgYSBnaXZlbiBlbGVtZW50DQoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsNCgkJJHF1ZXJ5ID0gIlNFTEVDVCAiLiRwYXJlbnRuYW1lLiJfaWQgcGFyZW50aWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlXyIuJHRoaXMtPkdldE5hbWUoKS4iXyIuJHBhcmVudG5hbWUuIl9oYXNfIi4kY2hpbGRuYW1lLiIgV0hFUkUgIi4kY2hpbGRuYW1lLiJfaWQ9PyI7DQoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGNoaWxkaWQpKTsNCgkJJHBhcmVudHMgPSBhcnJheSgpOw0KCQl3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpew0KCQkJJHBhcmVudHNbXSA9ICRyb3dbInBhcmVudGlkIl07DQoJCX0NCgkJcmV0dXJuICRwYXJlbnRzOw0KCX0NCglmdW5jdGlvbiBnZXRfb3B0aW9ucygkdGFibGVuYW1lLCRvbmx5YWN0aXZlPWZhbHNlLCRmdWxsb2JqZWN0PWZhbHNlKXsNCgkJLy8gcmV0dXJucyB0aGUgZWxlbWVudHMgb2YgYW55IHRhYmxlIGFzIG9wdGlvbnMgdG8gdXNlIGZvciBhIGRyb3Bkb3duIGxpc3QNCgkJLy8gcmV0dXJucyBhbiBhcnJheSBvZiAkbGFiZWw9PiR2YWx1ZQ0KCQkkb3JkZXJieW5hbWUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgib3JkZXJieW5hbWUiLGZhbHNlKTsNCgkJJGRiID0mICR0aGlzLT5HZXREYigpOw0KCQkkcXVlcnkgPSAiU0VMRUNUICIuKCRmdWxsb2JqZWN0PyIqIjoiaWQsIG5hbWUiKS4iIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV8iLiR0aGlzLT5HZXROYW1lKCkuIl8iLiR0YWJsZW5hbWU7DQoJCWlmKCRvbmx5YWN0aXZlKQkkcXVlcnkgLj0gIiBXSEVSRSBhY3RpdmU9MSI7DQoJCSRxdWVyeSAuPSAiIE9SREVSIEJZICIuKCRvcmRlcmJ5bmFtZT8ibmFtZSI6Iml0ZW1fb3JkZXIiKTsNCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQoJCSRvcHRpb25zID0gYXJyYXkoKTsNCgkJd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKXsNCgkJCWlmKCRmdWxsb2JqZWN0KXsNCgkJCQkkb2JqID0gbmV3IFN0ZENsYXNzKCk7DQoJCQkJZm9yZWFjaCgkcm93IGFzICRrZXk9PiR2YWx1ZSkJJG9iai0+JGtleSA9ICR2YWx1ZTsNCgkJCQkkb3B0aW9uc1tdID0gJG9iajsNCgkJCX1lbHNlew0KCQkJCSRvcHRpb25zWyRyb3dbIm5hbWUiXV0gPSAkcm93WyJpZCJdOw0KCQkJfQ0KCQl9DQoJCQ0KCQlyZXR1cm4gJG9wdGlvbnM7DQoJfQ0KCWZ1bmN0aW9uIGdldF9maWVsZG9wdGlvbnMoJGZpZWxkLCRmdWxsb2JqZWN0PWZhbHNlKXsNCgkJLy8gcmV0dXJucyBmaWVsZCBvcHRpb25zIGFzIG9wdGlvbnMgdG8gdXNlIGZvciBhIGRyb3Bkb3duIGxpc3QNCgkJJGRiID0mICR0aGlzLT5HZXREYigpOw0KCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlXyIuJHRoaXMtPkdldE5hbWUoKS4iX2ZpZWxkb3B0aW9ucyBXSEVSRSBmaWVsZD0/IE9SREVSIEJZIGl0ZW1fb3JkZXIiOw0KCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRmaWVsZCkpOw0KCQkkb3B0aW9ucyA9IGFycmF5KCk7DQoJCXdoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSl7DQoJCQlpZigkZnVsbG9iamVjdCl7DQoJCQkJJG9iaiA9IG5ldyBTdGRDbGFzcygpOw0KCQkJCWZvcmVhY2goJHJvdyBhcyAka2V5PT4kdmFsdWUpCSRvYmotPiRrZXkgPSAkdmFsdWU7DQoJCQkJJG9wdGlvbnNbXSA9ICRvYmo7DQoJCQl9ZWxzZXsNCgkJCQkkb3B0aW9uc1skcm93WyJuYW1lIl1dID0gJHJvd1siaWQiXTsNCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJuICRvcHRpb25zOw0KCX0NCglmdW5jdGlvbiBnZXRfcGFnZWlkKCRhbGlhcyl7DQoJCS8vIHJldHVybnMgdGhlIHBhZ2UgaWQgZnJvbSBhbiBhbGlhcw0KCQlnbG9iYWwgJGdDbXM7DQoJCSRtYW5hZ2VyID0mICRnQ21zLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7DQoJCSRub2RlID0mICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJGFsaWFzKTsNCgkJaWYgKGlzc2V0KCRub2RlKSkgew0KCQkJJGNvbnRlbnQgPSYgJG5vZGUtPkdldENvbnRlbnQoKTsJDQoJCQlpZiAoaXNzZXQoJGNvbnRlbnQpKQlyZXR1cm4gJGNvbnRlbnQtPklkKCk7DQoJCX1lbHNlew0KCQkJJG5vZGUgPSYgJG1hbmFnZXItPnN1cmVHZXROb2RlQnlJZCgkYWxpYXMpOw0KCQkJaWYgKGlzc2V0KCRub2RlKSkgcmV0dXJuICRhbGlhczsNCgkJfQ0KCX0NCglmdW5jdGlvbiBhZGRmcm9udGVuZHVybHMoJGl0ZW0sJHBhcmFtcywkaWQsJHJldHVybmlkKXsNCgkJLy8gYWRkcyAkaXRlbS0+ZGV0YWlsbGluayBhbmQgJGl0ZW0tPmRldGFpbHVybCB0byBhIGdpdmVuICRpdGVtDQoJCSRuZXh0bGV2ZWwgPSAkdGhpcy0+Z2V0X25leHRsZXZlbCgkaXRlbS0+X193aGF0KTsNCgkJaWYoISRuZXh0bGV2ZWwpew0KCQkJJG5ld3BhcmFtcyA9IGFycmF5KCJ3aGF0Ij0+JGl0ZW0tPl9fd2hhdCwgImFsaWFzIj0+JGl0ZW0tPmFsaWFzKTsNCgkJfWVsc2V7DQoJCQkkbmV3cGFyYW1zID0gYXJyYXkoIndoYXQiPT4kbmV4dGxldmVsLCAicGFyZW50Ij0+JGl0ZW0tPmFsaWFzKTsNCgkJCWlmKGlzc2V0KCRwYXJhbXNbImZvcmNlbGlzdCJdKSAmJiAkcGFyYW1zWyJmb3JjZWxpc3QiXSkJJG5ld3BhcmFtc1siZm9yY2VsaXN0Il0gPSB0cnVlOw0KCQkJaWYoaXNzZXQoJHBhcmFtc1sibmJwZXJwYWdlIl0pICYmICRwYXJhbXNbIm5icGVycGFnZSJdID4gMCkJJG5ld3BhcmFtc1sibmJwZXJwYWdlIl0gPSAkcGFyYW1zWyJuYnBlcnBhZ2UiXTsNCgkJCWlmKGlzc2V0KCRwYXJhbXNbInBhZ2VpbmRleCJdKSAmJiAkcGFyYW1zWyJwYWdlaW5kZXgiXSA+IDEpCSRuZXdwYXJhbXNbInBhZ2VpbmRleCJdID0gJHBhcmFtc1sicGFnZWluZGV4Il07DQoJCX0NCgkJJGlubGluZSA9IChpc3NldCgkcGFyYW1zWyJpbmxpbmUiXSkgJiYgJHBhcmFtc1siaW5saW5lIl0pP3RydWU6ZmFsc2U7DQoJCWlmKCRpbmxpbmUpCSRuZXdwYXJhbXNbImlubGluZSJdID0gdHJ1ZTsNCgkJJGl0ZW0tPmRldGFpbGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICJkZWZhdWx0IiwgJHJldHVybmlkLCAkaXRlbS0+bmFtZSwgJG5ld3BhcmFtcywgIiIsIGZhbHNlLCAkaW5saW5lLCAiIiwgZmFsc2UsICR0aGlzLT5CdWlsZFByZXR0eVVybHMoJG5ld3BhcmFtcywgJHJldHVybmlkKSk7DQoJCSRpdGVtLT5kZXRhaWx1cmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICJkZWZhdWx0IiwgJHJldHVybmlkLCAiIiwgJG5ld3BhcmFtcywgIiIsIHRydWUsICRpbmxpbmUsICIiLCBmYWxzZSwgJHRoaXMtPkJ1aWxkUHJldHR5VXJscygkbmV3cGFyYW1zLCAkcmV0dXJuaWQpKTsNCgkJcmV0dXJuICRpdGVtOw0KCX0NCglmdW5jdGlvbiBhZGRDYXJ0VXJscygkaXRlbWxpc3QsJGlkLCRyZXR1cm5pZCl7DQoJCS8vIGZvciBldmVudHVhbCB1c2Ugd2l0aCBDYXJ0TWFkZVNpbXBsZQ0KCQkvLyBob3dldmVyLCBpbnRlZ3JhdGlvbiByZXF1aXJlcyBjaGFuZ2VzIHRvIENhcnRNYWRlU2ltcGxlDQoJCSRDYXJ0TWFkZVNpbXBsZSA9IGZhbHNlOw0KCQlpZiAoaXNzZXQoJGdDbXMtPm1vZHVsZXNbIkNhcnRNYWRlU2ltcGxlIl0pICYmICRnQ21zLT5tb2R1bGVzWyJDYXJ0TWFkZVNpbXBsZSJdWyJhY3RpdmUiXSkJJENhcnRNYWRlU2ltcGxlID0gJGdDbXMtPm1vZHVsZXNbIkNhcnRNYWRlU2ltcGxlIl1bIm9iamVjdCJdOw0KCQlpZighJENhcnRNYWRlU2ltcGxlKQlyZXR1cm4gJGl0ZW1saXN0Ow0KCQkkY2FydHBhcmFtcyA9IGFycmF5KCJwZXJmYWN0aW9uIj0+ImFkZF9wcm9kdWN0IiwgInF0eSI9PjEsICJyZXR1cm5tb2QiPT4kdGhpcy0+R2V0TmFtZSgpKTsNCgkJJG5ld2xpc3QgPSBhcnJheSgpOw0KCQlmb3JlYWNoKCRpdGVtbGlzdCBhcyAkaXRlbSl7DQoJCQkkY2FydHBhcmFtc1sicHJvZHVjdF9pZCJdID0gJGl0ZW0tPmlkOw0KCQkJJGNhcnRwYXJhbXNbIm5hbWUiXSA9ICRpdGVtLT5uYW1lOw0KCQkJJGl0ZW0tPmFkZHRvY2FydGxpbmsgPSAkQ2FydE1hZGVTaW1wbGUtPkNyZWF0ZUxpbmsoJGlkLCAiY2FydCIsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoImFkZHRvY2FydCIpLCAkY2FydHBhcmFtcyk7DQoJCQkkaXRlbS0+YWRkdG9jYXJ0dXJsID0gJENhcnRNYWRlU2ltcGxlLT5DcmVhdGVMaW5rKCRpZCwgImNhcnQiLCAkcmV0dXJuaWQsICIiLCAkY2FydHBhcmFtcywgIiIsIHRydWUpOw0KCQkJYXJyYXlfcHVzaCgkbmV3bGlzdCwgJGl0ZW0pOw0KCQl9DQoJCXJldHVybiAkbmV3bGlzdDsNCgl9DQoJZnVuY3Rpb24gYWRkYWRtaW5saW5rcygkaXRlbSwkcGFyYW1zLCRpZCwkcmV0dXJuaWQpew0KCQkvLyBhZGRzIHRoZSBhZG1pbiBsaW5rcyB0byB0aGUgbGV2ZWwgaXRlbXMuLi4NCgkJLyogJHBhcmFtcyA6IHRoZSBiYXNlIHBhcmFtZXRlcnMgZm9yIHRoZSBhZG1pbiBsaW5rcw0KCQkJCXByZWZpeA0KCQkJCXRhYmxlbmFtZQ0KCQkJCWNoaWxkIChpZiB0aGUgbGV2ZWwgaGFzIGEgY2hpbGQgbGV2ZWwsIHRoZSBuYW1lIG9mIHRoZSBjaGlsZCBsZXZlbCkNCgkJCQlsZXZlbG5hbWUNCgkJCQlwYXJlbnRkZWZhdWx0IChib29sLi4uIHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgZGVmYXVsdCBlbGVtZW50IGZvciBlYWNoIHBhcmVudCkNCgkJCQlvcmRlcmJ5cGFyZW50IChib29sKQ0KCQkJCWFkZGZpbGVzDQoJCQkJc2hhcmVjaGlsZHJlbiAoYm9vbCkNCgkJCQlzaGFyZWRieXBhcmVudHMgKGJvb2wpDQoJCQkJZmlsZXMgKHN0cmluZyxjc3YpDQoJCSovDQoNCgkJZ2xvYmFsICRnQ21zOw0KCQkkYWRtaW50aGVtZSA9ICRnQ21zLT52YXJpYWJsZXNbImFkbWludGhlbWUiXTsNCgkJDQoJCWlmKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgicmVzdHJpY3RfcGVybWlzc2lvbnMiLGZhbHNlKSAmJiAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkdGhpcy0+R2V0TmFtZSgpLiJfYWR2YW5jZWQiKSAmJiAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkdGhpcy0+R2V0TmFtZSgpLiJfbWFuYWdlXyIuJHBhcmFtc1sibGV2ZWxuYW1lIl0pICl7DQoJCQkvLyBubyBhY2Nlc3MgLSB3ZSBkb24ndCBjcmVhdGUgbGlua3MNCgkJCSRpdGVtLT5lZGl0bGluayA9ICRpdGVtLT5uYW1lOw0KCQkJJGl0ZW0tPmRlbGV0ZWxpbmsgPSAiIjsNCgkJCSRpdGVtLT5tb3ZlbGlua3MgPSAiIjsNCgkJCSRpdGVtLT50b2dnbGVhY3RpdmUgPSAkaXRlbS0+YWN0aXZlPT0xPyRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoImljb25zL3N5c3RlbS90cnVlLmdpZiIsIiIsIiIsIiIsInN5c3RlbWljb24iKTokYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCJpY29ucy9zeXN0ZW0vZmFsc2UuZ2lmIiwiIiwiIiwiIiwic3lzdGVtaWNvbiIpOw0KCQkJJGl0ZW0tPnRvZ2dsZWRlZmF1bHQgPSAkaXRlbS0+aXNkZWZhdWx0PT0xPyRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoImljb25zL3N5c3RlbS90cnVlLmdpZiIsIiIsIiIsIiIsInN5c3RlbWljb24iKTokYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCJpY29ucy9zeXN0ZW0vZmFsc2UuZ2lmIiwiIiwiIiwiIiwic3lzdGVtaWNvbiIpOw0KCQkJcmV0dXJuICRpdGVtOw0KCQl9DQoJCQ0KCQkkcHJlZml4ID0gJHBhcmFtc1sicHJlZml4Il07DQoJCSRtb3ZlcGFyYW1zID0gJHBhcmFtczsNCgkJJG1vdmVwYXJhbXNbJHByZWZpeC4iaWQiXSA9ICRpdGVtLT5pZDsNCgkJJG1vdmVwYXJhbXNbImN1cnJlbnRvcmRlciJdID0gJGl0ZW0tPml0ZW1fb3JkZXI7DQoJCWlmKGlzc2V0KCRtb3ZlcGFyYW1zWyJmaWxlcyJdKSkJdW5zZXQoJG1vdmVwYXJhbXNbImZpbGVzIl0pOw0KCQlpZigkbW92ZXBhcmFtc1sib3JkZXJieXBhcmVudCJdICYmIGlzc2V0KCRpdGVtLT5wYXJlbnRfaWQpKSAkbW92ZXBhcmFtc1sicGFyZW50Il0gPSAkaXRlbS0+cGFyZW50X2lkOw0KDQoJCSRpdGVtLT5lZGl0bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgImVkaXQiLiRwcmVmaXgsICRyZXR1cm5pZCwgJGl0ZW0tPm5hbWUsIGFycmF5KCRwcmVmaXguImlkIj0+JGl0ZW0tPmlkKSk7DQoJCSRpdGVtLT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAibW92ZXNvbWV0aGluZyIsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYiLGxhbmcoImRlbGV0ZSIpLCIiLCIiLCJzeXN0ZW1pY29uIiksIGFycmF5X21lcmdlKGFycmF5KCJtb3ZlIj0+ImRlbGV0ZSIsImZpbGVzIj0+JHBhcmFtc1siZmlsZXMiXSksJG1vdmVwYXJhbXMpLCR0aGlzLT5MYW5nKCJwcm9tcHRfZGVsZXRlIi4kcGFyYW1zWyJsZXZlbG5hbWUiXSwgc3RyX3JlcGxhY2UoIiciLCJcJyIsJGl0ZW0tPm5hbWUpKSk7DQoJCSRpdGVtLT5tb3ZldXBsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAibW92ZXNvbWV0aGluZyIsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvc3lzdGVtL2Fycm93LXUuZ2lmIixsYW5nKCJ1cCIpLCIiLCIiLCJzeXN0ZW1pY29uIiksIGFycmF5X21lcmdlKGFycmF5KCJtb3ZlIj0+InVwIiksJG1vdmVwYXJhbXMpKTsNCgkJJGl0ZW0tPm1vdmVkb3dubGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgIm1vdmVzb21ldGhpbmciLCAkcmV0dXJuaWQsICRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoImljb25zL3N5c3RlbS9hcnJvdy1kLmdpZiIsbGFuZygiZG93biIpLCIiLCIiLCJzeXN0ZW1pY29uIiksIGFycmF5X21lcmdlKGFycmF5KCJtb3ZlIj0+ImRvd24iKSwkbW92ZXBhcmFtcykpOw0KCQkkaXRlbS0+bW92ZWxpbmtzID0gJGl0ZW0tPm1vdmV1cGxpbmsgLiIgIi4gJGl0ZW0tPm1vdmVkb3dubGluazsNCgkJDQoJCS8vIHdlIHJlYnVpbGQgdGhlIHBhcmFtcywgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHNvIG1hbnkgZm9yIHRoZSB0b2dnbGUgYWN0aW9uDQoJCSR0b2dnbGVwYXJhbXMgPSBhcnJheSgkcHJlZml4LiJpZCI9PiRpdGVtLT5pZCwgInByZWZpeCI9PiRwcmVmaXgsICJ0YWJsZW5hbWUiPT4kcGFyYW1zWyJ0YWJsZW5hbWUiXSwgImxldmVsbmFtZSI9PiRwYXJhbXNbImxldmVsbmFtZSJdKTsNCgkJaWYoJHBhcmFtc1sicGFyZW50ZGVmYXVsdCJdICYmIGlzc2V0KCRpdGVtLT5wYXJlbnRfaWQpKXsNCgkJCSR0b2dnbGVwYXJhbXNbInBhcmVudCJdID0gJGl0ZW0tPnBhcmVudF9pZDsNCgkJCSR0b2dnbGVwYXJhbXNbInBhcmVudGRlZmF1bHQiXSA9IDE7DQoJCX0NCgkJaWYgKCRpdGVtLT5hY3RpdmUgPT0gMSl7DQoJCQkkaXRlbS0+dG9nZ2xlYWN0aXZlID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAidG9nZ2xlIiwgJHJldHVybmlkLCAkYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCJpY29ucy9zeXN0ZW0vdHJ1ZS5naWYiLGxhbmcoInNldGZhbHNlIiksIiIsIiIsInN5c3RlbWljb24iKSwgYXJyYXlfbWVyZ2UoYXJyYXkoIndoYXQiPT4iYWN0aXZlIiwibmV3dmFsIj0+MCksJHRvZ2dsZXBhcmFtcykpOw0KCQl9ZWxzZXsNCgkJCSRpdGVtLT50b2dnbGVhY3RpdmUgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICJ0b2dnbGUiLCAkcmV0dXJuaWQsICRhZG1pbnRoZW1lLT5EaXNwbGF5SW1hZ2UoImljb25zL3N5c3RlbS9mYWxzZS5naWYiLGxhbmcoInNldHRydWUiKSwiIiwiIiwic3lzdGVtaWNvbiIpLCBhcnJheV9tZXJnZShhcnJheSgid2hhdCI9PiJhY3RpdmUiLCJuZXd2YWwiPT4xKSwkdG9nZ2xlcGFyYW1zKSk7DQoJCX0NCg0KCQlpZiAoJGl0ZW0tPmlzZGVmYXVsdCA9PSAxKXsNCgkJCSRpdGVtLT50b2dnbGVkZWZhdWx0ID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAidG9nZ2xlIiwgJHJldHVybmlkLCAkYWRtaW50aGVtZS0+RGlzcGxheUltYWdlKCJpY29ucy9zeXN0ZW0vdHJ1ZS5naWYiLGxhbmcoInNldGZhbHNlIiksIiIsIiIsInN5c3RlbWljb24iKSwgYXJyYXlfbWVyZ2UoYXJyYXkoIndoYXQiPT4iZGVmYXVsdCIsIm5ld3ZhbCI9PjApLCR0b2dnbGVwYXJhbXMpKTsNCgkJfWVsc2V7DQoJCQkkaXRlbS0+dG9nZ2xlZGVmYXVsdCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgInRvZ2dsZSIsICRyZXR1cm5pZCwgJGFkbWludGhlbWUtPkRpc3BsYXlJbWFnZSgiaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZiIsbGFuZygic2V0dHJ1ZSIpLCIiLCIiLCJzeXN0ZW1pY29uIiksIGFycmF5X21lcmdlKGFycmF5KCJ3aGF0Ij0+ImRlZmF1bHQiLCJuZXd2YWwiPT4xKSwkdG9nZ2xlcGFyYW1zKSk7DQoJCX0NCgkJcmV0dXJuICRpdGVtOw0KCX0NCglmdW5jdGlvbiBzcGxpdF9pbnRvX3BhZ2VzKCRpdGVtbGlzdCwgJGlkLCAkcmV0dXJuaWQsICRwYXJhbXMsICRhY3Rpb249ImRlZmF1bHQiLCAkcHJldHR5dXJscz10cnVlKXsNCgkJLy8gZGVwcmVjYXRlZCAtIHNob3VsZCB1c2UgZnVuY3Rpb24gcGFnaW5hdGUgaW5zdGVhZA0KCQlyZXR1cm4gJGl0ZW1saXN0Ow0KCX0NCglmdW5jdGlvbiBnZXRfcXVlcmllcygkd2hlcmU9YXJyYXkoKSwgJGFkbWluPWZhbHNlLCAkaWQ9ZmFsc2UsICRyZXR1cm5pZD1mYWxzZSl7DQoJCS8vIHJldHJpdmVzIHF1ZXJpZXMgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygb2JqZWN0cw0KCQlnbG9iYWwgJGdDbXM7DQoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsNCgkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV8iLiR0aGlzLT5HZXROYW1lKCkuIl9zYXZlZF9xdWVyaWVzIjsNCgkJJHdoZXJlY2xhdXNlID0gIiI7DQoJCSR3aGVyZXZhbHVlcyA9IGFycmF5KCk7DQoJCWlmKGNvdW50KCR3aGVyZSk+MCl7DQoJCQlmb3JlYWNoKCR3aGVyZSBhcyAka2V5PT4kdmFsdWUpew0KCQkJCSR3aGVyZWNsYXVzZSAuPSAoJHdoZXJlY2xhdXNlID09ICIiPyIgV0hFUkUgIjoiIEFORCAiKS4ka2V5LiI9PyI7DQoJCQkJJHdoZXJldmFsdWVzW10gPSAkdmFsdWU7DQoJCQl9DQoJCX0NCgkJJHF1ZXJ5IC49ICR3aGVyZWNsYXVzZTsNCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwkd2hlcmV2YWx1ZXMpOw0KCQkkaXRlbWxpc3QgPSBhcnJheSgpOw0KCQl3aGlsZSAoJGRicmVzdWx0ICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpew0KCQkJJGl0ZW0gPSBuZXcgc3RkQ2xhc3MoKTsNCgkJCWZvcmVhY2goJHJvdyBhcyAka2V5PT4kdmFsdWUpew0KCQkJCSRpdGVtLT4ka2V5ID0gJHZhbHVlOw0KCQkJfQ0KCQkJJGl0ZW0tPndoZXJldmFsdWVzID0gdW5zZXJpYWxpemUoJGl0ZW0tPndoZXJldmFsdWVzKTsNCgkJCWlmKCFpc19hcnJheSgkaXRlbS0+dmFsdWVzKSkJJGl0ZW0tPnZhbHVlcyA9IGFycmF5KCk7DQoJCQlpZigkYWRtaW4pew0KCQkJCSRpdGVtLT5hY3Rpb25zID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAiZGVsZXRlcXVlcnkiLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbImFkbWludGhlbWUiXS0+RGlzcGxheUltYWdlKCJpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZiIsbGFuZygiZGVsZXRlIiksIiIsIiIsInN5c3RlbWljb24iKSwgYXJyYXkoInF1ZXJ5aWQiPT4kaXRlbS0+aWQpKTsNCgkJCQkkaXRlbS0+YWN0aW9ucyAuPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICJ0ZXN0cXVlcnkiLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbImFkbWludGhlbWUiXS0+RGlzcGxheUltYWdlKCJpY29ucy9zeXN0ZW0vdmlldy5naWYiLGxhbmcoInZpZXciKSwiIiwiIiwic3lzdGVtaWNvbiIpLCBhcnJheSgicXVlcnlpZCI9PiRpdGVtLT5pZCkpOw0KCQkJfQ0KCQkJJGl0ZW1saXN0W10gPSAkaXRlbTsNCgkJfQ0KCQlyZXR1cm4gKGNvdW50KCRpdGVtbGlzdCk+MD8kaXRlbWxpc3Q6ZmFsc2UpOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZUZpZWxkRm9ybSgkd2hhdCwkaWQsJGFzc2lnbj10cnVlKXsNCgkJcmVxdWlyZSAiZnVuY3Rpb24uY3JlYXRlRmllbGRGb3JtLnBocCI7DQoJfQ0KCQ0KDQoJZnVuY3Rpb24gYnVpbGRXaGVyZSgkd2hlcmU9YXJyYXkoKSwkd2hhdD0iIil7DQoJCSRtdWx0aXBsZWxpc3RmaWVsZHMgPSBhcnJheSgpOw0KCQkkd2hlcmVjbGF1c2UgPSAiQS5hY3RpdmU9MSI7DQoJCSR3aGVyZXZhbHVlcyA9IGFycmF5KCk7DQoJCWZvcmVhY2goJHdoZXJlIGFzICRjbGF1c2Upew0KCQkJaWYoaW5fYXJyYXkoJHdoYXQuIl8iLiRjbGF1c2VbMF0sICRtdWx0aXBsZWxpc3RmaWVsZHMpKXsNCgkJCQkvLyBsaXN0IHdpdGggbXVsdGlwbGUgc2VsZWN0ZWQgdmFsdWVzIGFyZSBzYXZlZCBpbiBhIHNlcmlhbGl6ZWQgYXJyYXksIHNvIHdlIGhhdmUgdG8gdHdlYWsgdGhlIHZhbHVlDQoJCQkJJGNsYXVzZVsxXSA9ICciJy4kY2xhdXNlWzFdLiciJzsNCgkJCQkkY2xhdXNlWzJdID0gMTsNCgkJCX0NCgkJCWlmKCRjbGF1c2VbMF0gPT0gInBhcmVudCIpew0KCQkJCQkkY3JpdGVyaWEgPSBleHBsb2RlKCIsIiwkY2xhdXNlWzFdKTsNCgkJCQkJaWYoY291bnQoJGNyaXRlcmlhKSA+IDEpew0KCQkJCQkJJHRtcCA9ICIiOw0KCQkJCQkJZm9yZWFjaCgkY3JpdGVyaWEgYXMgJGNyaXQpew0KCQkJCQkJCSR0bXAgPSAoJHRtcD09IiI/IiI6IiBPUiAiKS4iQS5wYXJlbnQ9Ii4kY3JpdDsNCgkJCQkJCX0NCgkJCQkJCSR0bXAgPSAiIEFORCAoIi4kdG1wLiIpIjsNCgkJCQkJfWVsc2V7DQoJCQkJCQkkdG1wID0gIiBBTkQgQS5wYXJlbnQ9PyI7DQoJCQkJCQkkd2hlcmV2YWx1ZXNbXSA9ICRjbGF1c2VbMV07DQoJCQkJCX0NCgkJCQkJJHdoZXJlY2xhdXNlIC49ICR0bXA7DQoJCQkJDQoJCQl9ZWxzZXsNCgkJCQlzd2l0Y2goJGNsYXVzZVsyXSl7DQoJCQkJCWNhc2UgMDoNCgkJCQkJCSR3aGVyZWNsYXVzZSAuPSAiIEFORCBBLiIuJGNsYXVzZVswXS4iPT8iOw0KCQkJCQkJJHdoZXJldmFsdWVzW10gPSBhZGRzbGFzaGVzKCRjbGF1c2VbMV0pOwkJCQkJDQoJCQkJCQlicmVhazsNCgkJCQkJDQoJCQkJCWNhc2UgMToNCgkJCQkJCSR3aGVyZWNsYXVzZSAuPSAiIEFORCBBLiIuJGNsYXVzZVswXS4iIExJS0UgJyUiLmFkZHNsYXNoZXMoJGNsYXVzZVsxXSkuIiUnIjsNCgkJCQkJCWJyZWFrOw0KCQkJCQkNCgkJCQkJY2FzZSAyOg0KCQkJCQkJJHdoZXJlY2xhdXNlIC49ICIgQU5EIEEuIi4kY2xhdXNlWzBdLiIgIT0gPyI7DQoJCQkJCQkkd2hlcmV2YWx1ZXNbXSA9IGFkZHNsYXNoZXMoJGNsYXVzZVsxXSk7DQoJCQkJCQlicmVhazsNCgkJCQkJCQ0KCQkJCQljYXNlIDM6DQoJCQkJCQkkd2hlcmVjbGF1c2UgLj0gIiBBTkQgQS4iLiRjbGF1c2VbMF0uIiA+ID8iOw0KCQkJCQkJJHdoZXJldmFsdWVzW10gPSBhZGRzbGFzaGVzKCRjbGF1c2VbMV0pOwkJCQkJDQoJCQkJCQlicmVhazsNCgkJCQkJCQ0KCQkJCQljYXNlIDQ6DQoJCQkJCQkkd2hlcmVjbGF1c2UgLj0gIiBBTkQgQS4iLiRjbGF1c2VbMF0uIiA8ID8iOw0KCQkJCQkJJHdoZXJldmFsdWVzW10gPSBhZGRzbGFzaGVzKCRjbGF1c2VbMV0pOwkJCQkJDQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSA1Og0KCQkJCQkJJHdoZXJlY2xhdXNlIC49ICIgQU5EIChBLiIuJGNsYXVzZVswXS4iID4gPyBBTkQgQS4iLiRjbGF1c2VbMF0uIiA8ID8pIjsNCgkJCQkJCSR3aGVyZXZhbHVlc1tdID0gYWRkc2xhc2hlcygkY2xhdXNlWzFdWzBdKTsNCgkJCQkJCSR3aGVyZXZhbHVlc1tdID0gYWRkc2xhc2hlcygkY2xhdXNlWzFdWzFdKTsNCgkJCQkJCWJyZWFrOwkJCQkJDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCXJldHVybiBhcnJheSgkd2hlcmVjbGF1c2UsICR3aGVyZXZhbHVlcyk7DQoJfQ0KCWZ1bmN0aW9uIGdldFdoZXJlRnJvbVBhcmFtcygkcGFyYW1zLCAkaHRtbGVuY29kZWQ9ZmFsc2Upew0KCQkvLyB1c2VkIGZvciBxdWVyeSBjcmVhdGlvbiBhbmQgZnJvbnRlbmQgYWR2YW5jZWQgc2VhcmNoIGFjdGlvbg0KCQkvLyB0cmFuc2Zvcm1zIHBhcmFtZXRlcnMgaW50byAkd2hlcmUgLSBhbiBhcnJheSBvZiBjcml0ZXJpYToNCgkJLy8gJHdoZXJlW10gPSBhcnJheSgkZmllbGRuYW1lLCAkc2VhcmNodmFsdWUsICRjb21wYXJpc29uX3R5cGUpDQoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsNCgkJJHdoZXJlID0gYXJyYXkoKTsNCgkJZm9yZWFjaCgkcGFyYW1zIGFzICRrZXk9PiR2YWx1ZSl7DQoJCQlpZihzdWJzdHIoJGtleSwwLDYpID09ICJmaWVsZF8iICYmIHRyaW0oJHZhbHVlKSAhPSAiIil7DQoJCQkJJGtleSA9IHN1YnN0cigka2V5LDYpOw0KCQkJCWlmKGlzX2FycmF5KCR2YWx1ZSkgJiYgY291bnQoJHZhbHVlKT09MSkJJHZhbHVlID0gJHZhbHVlWzBdOw0KCQkJCSRjb21wYXJlID0gaXNzZXQoJHBhcmFtc1siY29tcGFyZV8iLiRrZXldKT8kcGFyYW1zWyJjb21wYXJlXyIuJGtleV06MDsNCgkJCQlpZigkdmFsdWUgPT0gIl9fZGF0ZV9maWVsZCIpew0KCQkJCQlpZigkY29tcGFyZSAhPSAiTkEiKXsNCgkJCQkJCS8vIFRoZSBjb2RlIGlzIHN1Y2ggdGhhdCByZW1vdmluZyBhbnkgcGFydCBvZiB0aGUgdGltZSBpbnB1dCBmcm9tIHRoZSBmb3JtIHdpbGwgcmVzdWx0IGluIHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlDQoJCQkJCQkkdGltZWlucHV0cyA9IGFycmF5KCJIb3VyIj0+IkgiLCJNaW51dGUiPT4iaSIsIlNlY29uZCI9PiJzIiwiTW9udGgiPT4ibiIsIkRheSI9PiJqIiwiWWVhciI9PiJZIik7DQoJCQkJCQkkcGFydHMgPSBhcnJheSgpOw0KCQkJCQkJZm9yZWFjaCgkdGltZWlucHV0cyBhcyAkaW5wdXRuYW1lPT4kZGF0ZXBhcnQpewkNCgkJCQkJCQkkcGFydHNbXSA9IChpc3NldCgkcGFyYW1zWyJkYXRlXyIuJGtleS4iXyIuJGlucHV0bmFtZV0pKT8kcGFyYW1zWyJkYXRlXyIuJGtleS4iXyIuJGlucHV0bmFtZV06ZGF0ZSgkZGF0ZXBhcnQpOw0KCQkJCQkJfQ0KCQkJCQkJJHZhbHVlID0gbWt0aW1lKCRwYXJ0c1swXSwkcGFydHNbMV0sJHBhcnRzWzJdLCRwYXJ0c1szXSwkcGFydHNbNF0sJHBhcnRzWzVdKTsNCgkJCQkJCSR2YWx1ZSA9IHN0cl9yZXBsYWNlKCJcJyIsIiIsJGRiLT5EQlRpbWVTdGFtcCgkdmFsdWUpKTsNCgkJCQkJCQ0KCQkJCQkJaWYoJGNvbXBhcmUgPT0gNSl7DQoJCQkJCQkJJHBhcnRzID0gYXJyYXkoKTsNCgkJCQkJCQlmb3JlYWNoKCR0aW1laW5wdXRzIGFzICRpbnB1dG5hbWU9PiRkYXRlcGFydCl7CQ0KCQkJCQkJCQkkcGFydHNbXSA9IChpc3NldCgkcGFyYW1zWyJkYXRlXyIuJGtleS4iX3BhcnQyXyIuJGlucHV0bmFtZV0pKT8kcGFyYW1zWyJkYXRlXyIuJGtleS4iX3BhcnQyXyIuJGlucHV0bmFtZV06ZGF0ZSgkZGF0ZXBhcnQpOw0KCQkJCQkJCX0NCgkJCQkJCQkkdmFsdWUyID0gbWt0aW1lKCRwYXJ0c1swXSwkcGFydHNbMV0sJHBhcnRzWzJdLCRwYXJ0c1szXSwkcGFydHNbNF0sJHBhcnRzWzVdKTsNCgkJCQkJCQkkdmFsdWUyID0gc3RyX3JlcGxhY2UoIlwnIiwiIiwkZGItPkRCVGltZVN0YW1wKCR2YWx1ZTIpKTsNCgkJCQkJCQkkd2hlcmVbXSA9IGFycmF5KCRrZXksIGFycmF5KCR2YWx1ZSwkdmFsdWUyKSwgJGNvbXBhcmUpOw0KCQkJCQkJfWVsc2V7CQ0KCQkJCQkJCSR3aGVyZVtdID0gYXJyYXkoJGtleSwgJHZhbHVlLCAkY29tcGFyZSk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9ZWxzZXsNCgkJCQkJaWYoaXNfYXJyYXkoJHZhbHVlKSl7DQoJCQkJCQlmb3JlYWNoKCR2YWx1ZSBhcyAkb25ldmFsdWUpCSR3aGVyZVtdID0gYXJyYXkoJGtleSwgJG9uZXZhbHVlLCAxKTsNCgkJCQkJfWVsc2VpZigkY29tcGFyZSA9PSAxKXsNCgkJCQkJCSRrZXl3b3JkcyA9ICR0aGlzLT5wYXJzZWtleXdvcmRzKCR2YWx1ZSk7DQoJCQkJCQlmb3JlYWNoKCRrZXl3b3JkcyBhcyAkdmFsdWUpew0KCQkJCQkJCWlmKCRodG1sZW5jb2RlZCkJJHZhbHVlID0gaHRtbF9lbnRpdHlfZGVjb2RlKCR2YWx1ZSk7DQoJCQkJCQkJJHZhbHVlID0gYWRkc2xhc2hlcygkdmFsdWUpOwkJCQkJCQkNCgkJCQkJCQkkd2hlcmVbXSA9IGFycmF5KCRrZXksICR2YWx1ZSwgJGNvbXBhcmUpOw0KCQkJCQkJfQ0KCQkJCQl9ZWxzZXsNCgkJCQkJCWlmKCRodG1sZW5jb2RlZCkJJHZhbHVlID0gaHRtbF9lbnRpdHlfZGVjb2RlKCR2YWx1ZSk7DQoJCQkJCQkkdmFsdWUgPSBhZGRzbGFzaGVzKCR2YWx1ZSk7DQoJCQkJCQkkd2hlcmVbXSA9IGFycmF5KCRrZXksICR2YWx1ZSwgJGNvbXBhcmUpOw0KCQkJCQl9DQoJCQkJfQkJCQkNCgkJCX0NCgkJfQkJDQoJCXJldHVybiAkd2hlcmU7DQoJfQ0KDQoJZnVuY3Rpb24gZ2V0X2xldmVsX3N0cmVldHZpZXcoJHdoZXJlPWFycmF5KCksJGFkbWluPWZhbHNlLCRpZD0iIiwkcmV0dXJuaWQ9IiIsJG9yZGVyPWZhbHNlLCRsaW1pdD0wLCRjdXN0b213aGVyZT1mYWxzZSwkY3VzdG9tdmFsdWVzPWFycmF5KCksJGN1c3RvbW9yZGVyPWZhbHNlKXsNCgkJZ2xvYmFsICRnQ21zOw0KCQkkbG9hZF9uYmNoaWxkcmVuID0gJHRoaXMtPkdldFByZWZlcmVuY2UoImxvYWRfbmJjaGlsZHJlbiIsdHJ1ZSk7DQoJCWlmKCRhZG1pbikJJGFkbWludGhlbWUgPSAkZ0Ntcy0+dmFyaWFibGVzWyJhZG1pbnRoZW1lIl07DQoJCWlmKCEkb3JkZXIpCSRvcmRlciA9ICIiOw0KCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7DQoJCSRmaWVsZHMgPSBhcnJheSgibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJ5YXciLCJwb3YiLCJ6b29tIiwiaWQiLCJuYW1lIiwiYWxpYXMiLCJpdGVtX29yZGVyIiwiYWN0aXZlIiwiaXNkZWZhdWx0Iik7DQoJCQ0KCQkkd2hlcmVzdHJpbmcgPSAiIjsNCgkJJHdoZXJldmFsdWVzID0gYXJyYXkoKTsNCgkJDQoNCgkJaWYoJGN1c3RvbXdoZXJlKXsNCgkJCSR3aGVyZXN0cmluZyA9ICRjdXN0b213aGVyZTsNCgkJCSR3aGVyZXZhbHVlcyA9ICRjdXN0b212YWx1ZXM7DQoJCX1lbHNlew0KCQkJZm9yZWFjaCgkd2hlcmUgYXMgJGtleT0+JHZhbHVlKXsNCgkJCQlpZihpbl9hcnJheShzdHJ0b2xvd2VyKCRrZXkpLCAkZmllbGRzKSl7DQoJCQkJCSR3aGVyZXN0cmluZyAuPSAoJHdoZXJlc3RyaW5nID09ICIiPyIiOiIgQU5EICIpLiRrZXkuIj0/IjsNCgkJCQkJJHdoZXJldmFsdWVzW10gPSAkdmFsdWU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc3RyZWV0dmlld19zdHJlZXR2aWV3IEEgIi4oJHdoZXJlc3RyaW5nID09ICIiPyIiOiIgV0hFUkUgIi4kd2hlcmVzdHJpbmcpOw0KCQkkcXVlcnkgLj0gKCRjdXN0b21vcmRlcj8iIE9SREVSIEJZICIuJGN1c3RvbW9yZGVyOiIgT1JERVIgQlkgaXRlbV9vcmRlciIpOw0KDQoJCWlmKCRsaW1pdCAmJiAkbGltaXQgIT0gIjAiICYmICRsaW1pdCAhPSAiIikJJHF1ZXJ5IC49ICIgTElNSVQgIi4kbGltaXQ7DQoNCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwkd2hlcmV2YWx1ZXMpOw0KCQkkaXRlbWxpc3QgPSBhcnJheSgpOw0KCQkkaWRsaXN0ID0gIiI7DQoJCXdoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSl7DQoJCQkkaXRlbSA9IG5ldyBzdGRDbGFzcygpOw0KCQkJJGl0ZW0tPl9fd2hhdCA9ICJzdHJlZXR2aWV3IjsNCgkJCWZvcmVhY2goJHJvdyBhcyAka2V5PT4kdmFsdWUpew0KCQkJCSRpdGVtLT4ka2V5ID0gJHZhbHVlOw0KCQkJfQ0KCQkJJGl0ZW0tPmxhdGl0dWRlID0gc3RyaXBzbGFzaGVzKCRpdGVtLT5sYXRpdHVkZSk7DQoJCQkkaXRlbS0+bG9uZ2l0dWRlID0gc3RyaXBzbGFzaGVzKCRpdGVtLT5sb25naXR1ZGUpOw0KCQkJJGl0ZW0tPnlhdyA9IHN0cmlwc2xhc2hlcygkaXRlbS0+eWF3KTsNCgkJCSRpdGVtLT5wb3YgPSBzdHJpcHNsYXNoZXMoJGl0ZW0tPnBvdik7DQoJCQkkaXRlbS0+em9vbSA9IHN0cmlwc2xhc2hlcygkaXRlbS0+em9vbSk7DQoJCQkkaXRlbS0+bmFtZSA9IHN0cmlwc2xhc2hlcygkaXRlbS0+bmFtZSk7DQoJCQkkaXRlbS0+YWxpYXMgPSBzdHJpcHNsYXNoZXMoJGl0ZW0tPmFsaWFzKTsNCgkJCSRpdGVtLT5pbnNlcnRUYWcgPSAne2Ntc19tb2R1bGUgbW9kdWxlPSJzdHJlZXR2aWV3IiBhbGlhcz0iJy4kaXRlbS0+YWxpYXMuJyJ9JzsNCgkJJGl0ZW0tPm5iY2hpbGRyZW4gPSBmYWxzZTsNCgkJDQoJCQlpZigkYWRtaW4gPT0gdHJ1ZSl7DQoJCQkJLy8gJHBhcm1zIHdpbGwgYmUgdGhlIGJhc2UgZm9yIHBhcmFtZXRlcnMgb2YgdGhlIGFkbWluIGxpbmtzDQoJCQkJJHBhcm1zID0gYXJyYXkoDQoJCQkJCSJwcmVmaXgiPT4iQSIsDQoJCQkJCSJ0YWJsZW5hbWUiPT4ic3RyZWV0dmlld19zdHJlZXR2aWV3IiwNCgkJCQkJImxldmVsbmFtZSI9PiJzdHJlZXR2aWV3IiwNCgkJCQkJImNoaWxkIj0+ZmFsc2UsDQoJCQkJCSJwYXJlbnRkZWZhdWx0Ij0+ZmFsc2UsDQoJCQkJCSJvcmRlcmJ5cGFyZW50Ij0+dHJ1ZSwNCgkJCQkJImFkZGZpbGVzIj0+IiIsDQoJCQkJCSJzaGFyZWNoaWxkcmVuIj0+ZmFsc2UsDQoJCQkJCSJzaGFyZWRieXBhcmVudHMiPT5mYWxzZSwNCgkJCQkJImZpbGVzIj0+IiINCgkJCQkJKTsNCgkJCQkkaXRlbSA9ICR0aGlzLT5hZGRhZG1pbmxpbmtzKCRpdGVtLCRwYXJtcywkaWQsJHJldHVybmlkKTsNCgkJCX0NCgkJCSRpZGxpc3QgLj0gKCRpZGxpc3Q9PSIiPyIiOiIgT1IgIikuIiBwYXJlbnQ9JyIuJGl0ZW0tPmlkLiInIjsNCgkJCWFycmF5X3B1c2goJGl0ZW1saXN0LCRpdGVtKTsNCgkJfQ0KDQoJCXJldHVybiAkaXRlbWxpc3Q7DQoJfQ0KCWZ1bmN0aW9uIHBsUmVzaXplKCRmdWxscGF0aCwgJG5ld3BhdGgsICRuZXd3aWR0aCwgJG5ld2hlaWdodD1mYWxzZSwgJHRyYW5zcGFyZW5jeT1mYWxzZSwgJGNyb3A9ZmFsc2UpIHsNCgkJcmVxdWlyZSAiZnVuY3Rpb24ucGxyZXNpemUucGhwIjsNCgkJcmV0dXJuICRyZXR1cm47DQoJfQ0KCQ0KCWZ1bmN0aW9uIHBsR2V0RmlsZUluZm8oJGZpbGVwYXRoKXsNCgkJaWYoIWZpbGVfZXhpc3RzKCRmaWxlcGF0aCkpCXJldHVybiBmYWxzZTsNCgkJcmVxdWlyZSAiZnVuY3Rpb24ucGxHZXRGaWxlSW5mby5waHAiOw0KCQlyZXR1cm4gJGluZm87DQoJfQ0KCQ0KCWZ1bmN0aW9uIHVwbG9hZF9jaGVja2ZpbGVuYW1lKCRmaWxlbmFtZSwgJGRpcil7DQoJCS8vIGlmIGEgZmlsZSBvZiB0aGF0IG5hbWUgZXhpc3RzLCBhcHBlbmRzIG51bWJlciB0byB0aGUgZmlsZW5hbWUNCgkJJHRtcGZpbGVuYW1lID0gc3RyX3JlcGxhY2UoIiAiLCJfIiwkZmlsZW5hbWUpOw0KCQkkZXh0ZW5zaW9uID0gc3RycmNocigkdG1wZmlsZW5hbWUsICIuIik7DQoJCSRjbGVhbmZpbGVuYW1lID0gc3RyX3JlcGxhY2UoJGV4dGVuc2lvbiwgIiIsICR0bXBmaWxlbmFtZSk7DQoNCgkJJGRlc3RkaXIgPSAkZGlyLiR0bXBmaWxlbmFtZTsNCgkJJGkgPSAxOw0KCQl3aGlsZShmaWxlX2V4aXN0cygkZGVzdGRpcikpew0KCQkJJHRtcGZpbGVuYW1lID0gJGNsZWFuZmlsZW5hbWUuIl8iLiRpLiRleHRlbnNpb247DQoJCQkkZGVzdGRpciA9ICRkaXIuJHRtcGZpbGVuYW1lOw0KCQkJJGkrKzsNCgkJfQ0KCQlyZXR1cm4gJHRtcGZpbGVuYW1lOw0KCX0NCgkNCglmdW5jdGlvbiBwbFVwbG9hZEZpbGUoJGZpbGUsICRkZXN0aW5hdGlvbj0iIiwgJHJlc2l6ZT1mYWxzZSwgJGNyb3A9ZmFsc2Upew0KCQlnbG9iYWwgJGdDbXM7DQoJCSRkaXIgPSAkZ0Ntcy0+Y29uZmlnWyJ1cGxvYWRzX3BhdGgiXS5zdHJfcmVwbGFjZSgiLy8iLCIvIiwiLyIuJGRlc3RpbmF0aW9uLiIvIik7DQoJCQ0KCQkkZmlsZW5hbWUgPSAkdGhpcy0+dXBsb2FkX2NoZWNrZmlsZW5hbWUoJGZpbGVbIm5hbWUiXSwkZGlyKTsNCgkJDQoJCWlmIChjbXNfbW92ZV91cGxvYWRlZF9maWxlKCRmaWxlWyJ0bXBfbmFtZSJdLCAkZGlyLiRmaWxlbmFtZSkpIHsNCgkJCWlmKCRyZXNpemUgJiYgIWlzX2FycmF5KCRyZXNpemUpKQkkcmVzaXplID0gZXhwbG9kZSgieCIsJHJlc2l6ZSk7DQoJCQlpZigkcmVzaXplICYmIGNvdW50KCRyZXNpemUpID09IDIpICR0aGlzLT5wbFJlc2l6ZSgkZGlyLiRmaWxlbmFtZSwgJycsICRyZXNpemVbMF0sICRyZXNpemVbMV0sdHJ1ZSwkY3JvcCk7DQoJCQlyZXR1cm4gc3RyX3JlcGxhY2UoIi8vIiwiLyIsIi8iLiRkZXN0aW5hdGlvbi4iLyIuJGZpbGVuYW1lKTsNCgkJfWVsc2V7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgl9DQoJDQoJZnVuY3Rpb24gcGxBc3NpZ25GaWxlKCRmaWxlcGF0aCwgJHRhYmxlLCAkaXRlbWlkLCAkZmllbGQsICR0aHVtYnNpemU9ZmFsc2UsICRjcm9wdGh1bWI9ZmFsc2Upew0KCQkkdGFibGVuYW1lID0gY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfJy4kdGFibGU7DQoJCSRmaWxlcGF0aCA9IHN0cl9yZXBsYWNlKCIvLyIsIi8iLCRmaWxlcGF0aCk7DQoNCgkJaWYoJHRodW1ic2l6ZSAmJiAhaXNfYXJyYXkoJHRodW1ic2l6ZSkpCSR0aHVtYnNpemUgPSBleHBsb2RlKCJ4IiwkdGh1bWJzaXplKTsNCgkJaWYoICRmaWxlcGF0aCAhPSAiIiAmJiAkdGh1bWJzaXplICYmIGNvdW50KCR0aHVtYnNpemUpID09MiApIHsNCgkJCWdsb2JhbCAkZ0NtczsNCgkJCSRiYXNlcGF0aCA9ICRnQ21zLT5jb25maWdbInVwbG9hZHNfcGF0aCJdOw0KCQkJJGV4cGxvZGVkID0gZXhwbG9kZSgiLyIsJGZpbGVwYXRoKTsNCgkJCSRleHBsb2RlZFtjb3VudCgkZXhwbG9kZWQpLTFdID0gInBsdGh1bWJfIi4kZXhwbG9kZWRbY291bnQoJGV4cGxvZGVkKS0xXTsNCgkJCSR0aHVtYnBhdGggPSBpbXBsb2RlKCIvIiwkZXhwbG9kZWQpOw0KCQkJJHRoaXMtPnBsUmVzaXplKCRiYXNlcGF0aC4iLyIuJGZpbGVwYXRoLCAkYmFzZXBhdGguIi8iLiR0aHVtYnBhdGgsICR0aHVtYnNpemVbMF0sICR0aHVtYnNpemVbMV0sIHRydWUsICRjcm9wdGh1bWIpOw0KCQl9DQoNCgkJJGRiID0gJHRoaXMtPkdldERiKCk7DQoNCgkJaWYoICR0YWJsZSA9PSAkdGhpcy0+R2V0TmFtZSgpLiJfbXVsdGlwbGVmaWxlc2ZpZWxkcyIgKSB7DQoJCQkkbmV3aWQgPSAkZGItPkdlbklEKCR0YWJsZW5hbWUuIl9zZXEiKTsNCgkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAkdGFibGVuYW1lIFNFVCBmaWxlaWQ9PywgaXRlbWlkPT8sIGZpZWxkbmFtZT0/LCBmaWxlcGF0aD0/IjsNCgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5LCBhcnJheSgkbmV3aWQsICRpdGVtaWQsICRmaWVsZCwgJGZpbGVwYXRoKSApOw0KCQl9ZWxzZXsNCgkJCSRxdWVyeSA9ICJVUERBVEUgJHRhYmxlbmFtZSBTRVQgJGZpZWxkPT8gV0hFUkUgaWQ9PyBMSU1JVCAxIjsNCgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGZpbGVwYXRoLCRpdGVtaWQpKTsNCgkJfQ0KCQkNCgkJcmV0dXJuICRkYnJlc3VsdDsNCgl9DQoJZnVuY3Rpb24gZ2V0RmlsZUNvbnRlbnQoJGZpbGVuYW1lKXsNCgkJLy8gcmV0dXJucyB0aGUgY29udGVudCBvZiBhIGZpbGUNCgkJJGZpbGVwYXRoID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZW5hbWU7DQoJCWlmKGZpbGVfZXhpc3RzKCRmaWxlcGF0aCkpew0KCQkJJGZoYW5kbGUgPSBmb3BlbigkZmlsZXBhdGgsICJyKyIpOw0KCQkJJGNvbnRlbnQgPSBmcmVhZCgkZmhhbmRsZSwgZmlsZXNpemUoJGZpbGVwYXRoKSk7DQoJCQlyZXR1cm4gJGNvbnRlbnQ7DQoJCX1lbHNlew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJfQ0KDQp9DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/streetview_auto_export.dna</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[YToyOntzOjU6ImluZm9zIjthOjE0OntzOjQ6Im5hbWUiO3M6MTA6InN0cmVldHZpZXciO3M6MTI6ImZyaWVuZGx5bmFtZSI7czoxNzoiR29vZ2xlIFN0cmVldHZpZXciO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjE3OiJHb29nbGUgU3RyZWV0dmlldyI7czo4OiJuYmxldmVscyI7czoxOiIxIjtzOjEzOiJ0ZW1wbGF0ZWxldmVsIjtzOjE6IjAiO3M6OToiZG91cGdyYWRlIjtiOjA7czoxNDoidXBncmFkZXF1ZXJpZXMiO2E6MDp7fXM6MTM6Im1vZGlmaWNhdGlvbnMiO2E6MDp7fXM6MTI6Im5hbWVvZm1vZHVsZSI7czoxMDoic3RyZWV0dmlldyI7czo3OiJ2ZXJzaW9uIjtzOjM6IjEuMCI7czoxMToiZGVsZXRlZmlsZXMiO2I6MDtzOjEzOiJlZGl0YWJsZWFsaWFzIjtiOjA7czo3OiJkb2ZlYWRkIjtzOjE6IjAiO3M6OToibGFuZ2ZpbGVzIjthOjE6e2k6MDtzOjk6ImVuX1VTLnBocCI7fX1zOjY6ImxldmVscyI7YToxOntpOjA7YToxMDp7aTowO3M6MTA6InN0cmVldHZpZXciO2k6MTtzOjE6IkEiO2k6MjtpOjA7aTozO3M6MToiNSI7aTo2O3M6MToiMSI7aTo3O3M6MToiMCI7aTo4O3M6MToiMCI7aTo5O2E6Mjp7aTowO3M6MTA6IlN0cmVldHZpZXciO2k6MTtzOjExOiJTdHJlZXR2aWV3cyI7fWk6NDthOjU6e2k6MDthOjg6e2k6MDtzOjg6ImxhdGl0dWRlIjtpOjc7czo4OiJMYXRpdHVkZSI7aToxO3M6MToiMyI7aToyO3M6MToiMSI7aTozO3M6MToiMCI7aTo0O3M6MDoiIjtpOjU7YTo5OntzOjExOiJsaXN0b3B0aW9ucyI7czowOiIiO3M6ODoibGlzdG1vZGUiO3M6MToiMSI7czo4OiJ1cGZvbGRlciI7czowOiIiO3M6NToidGh1bWIiO3M6MDoiIjtzOjQ6InNpemUiO3M6MDoiIjtzOjExOiJpbm5lcnNlYXJjaCI7czoxOiIwIjtzOjQ6ImNyb3AiO3M6MToiMCI7czo3OiJmaWxlZXh0IjtzOjA6IiI7czo5OiJjcm9wdGh1bWIiO3M6MToiMCI7fWk6NjthOjA6e319aToxO2E6ODp7aTowO3M6OToibG9uZ2l0dWRlIjtpOjc7czo5OiJMb25naXR1ZGUiO2k6MTtzOjE6IjMiO2k6MjtzOjE6IjAiO2k6MztzOjE6IjAiO2k6NDtzOjA6IiI7aTo1O2E6OTp7czoxMToibGlzdG9wdGlvbnMiO3M6MDoiIjtzOjg6Imxpc3Rtb2RlIjtzOjE6IjEiO3M6ODoidXBmb2xkZXIiO3M6MDoiIjtzOjU6InRodW1iIjtzOjA6IiI7czo0OiJzaXplIjtzOjA6IiI7czoxMToiaW5uZXJzZWFyY2giO3M6MToiMCI7czo0OiJjcm9wIjtzOjE6IjAiO3M6NzoiZmlsZWV4dCI7czowOiIiO3M6OToiY3JvcHRodW1iIjtzOjE6IjAiO31pOjY7YTowOnt9fWk6MjthOjg6e2k6MDtzOjM6InlhdyI7aTo3O3M6MzoiWUFXIjtpOjE7czoxOiIzIjtpOjI7czoxOiIwIjtpOjM7czoxOiIwIjtpOjQ7czowOiIiO2k6NTthOjk6e3M6MTE6Imxpc3RvcHRpb25zIjtzOjA6IiI7czo4OiJsaXN0bW9kZSI7czoxOiIxIjtzOjg6InVwZm9sZGVyIjtzOjA6IiI7czo1OiJ0aHVtYiI7czowOiIiO3M6NDoic2l6ZSI7czowOiIiO3M6MTE6ImlubmVyc2VhcmNoIjtzOjE6IjAiO3M6NDoiY3JvcCI7czoxOiIwIjtzOjc6ImZpbGVleHQiO3M6MDoiIjtzOjk6ImNyb3B0aHVtYiI7czoxOiIwIjt9aTo2O2E6MDp7fX1pOjM7YTo4OntpOjA7czozOiJwb3YiO2k6NztzOjM6IlBPViI7aToxO3M6MToiMyI7aToyO3M6MToiMCI7aTozO3M6MToiMCI7aTo0O3M6MDoiIjtpOjU7YTo5OntzOjExOiJsaXN0b3B0aW9ucyI7czowOiIiO3M6ODoibGlzdG1vZGUiO3M6MToiMSI7czo4OiJ1cGZvbGRlciI7czowOiIiO3M6NToidGh1bWIiO3M6MDoiIjtzOjQ6InNpemUiO3M6MDoiIjtzOjExOiJpbm5lcnNlYXJjaCI7czoxOiIwIjtzOjQ6ImNyb3AiO3M6MToiMCI7czo3OiJmaWxlZXh0IjtzOjA6IiI7czo5OiJjcm9wdGh1bWIiO3M6MToiMCI7fWk6NjthOjA6e319aTo0O2E6ODp7aTowO3M6NDoiem9vbSI7aTo3O3M6NDoiWm9vbSI7aToxO3M6MToiMSI7aToyO3M6MToiMCI7aTozO3M6MToiMCI7aTo0O3M6MDoiIjtpOjU7YTo5OntzOjExOiJsaXN0b3B0aW9ucyI7czowOiIiO3M6ODoibGlzdG1vZGUiO3M6MToiMSI7czo4OiJ1cGZvbGRlciI7czowOiIiO3M6NToidGh1bWIiO3M6MDoiIjtzOjQ6InNpemUiO3M6MDoiIjtzOjExOiJpbm5lcnNlYXJjaCI7czoxOiIwIjtzOjQ6ImNyb3AiO3M6MToiMCI7czo3OiJmaWxlZXh0IjtzOjA6IiI7czo5OiJjcm9wdGh1bWIiO3M6MToiMCI7fWk6NjthOjA6e319fWk6NTtzOjUzOiJuYW1lLGFjdGl2ZSxsYXRpdHVkZSxsb25naXR1ZGUseWF3LHBvdix6b29tLG1vdmVsaW5rcyI7fX19]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRmaWx0ZXIgfHwgJGluc3RhbnRzZWFyY2h9PGRpdiBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyB0ZXh0LWFsaWduOiByaWdodDsiPnskZmlsdGVyfXtpZiAkZmlsdGVyICYmICRpbnN0YW50c2VhcmNofTxici8+ey9pZn17JGluc3RhbnRzZWFyY2h9PC9kaXY+ey9pZn0KPHA+eyRhZGRuZXd9IHskcmVvcmRlcn08L3A+CntpZiBjb3VudCgkaXRlbWxpc3QpID4gMH0KPGRpdiBzdHlsZT0iY2xlYXI6IHJpZ2h0OyI+Cjx0YWJsZSB7aWYgJHRhYmxlaWR9aWQ9InskdGFibGVpZH0iIHsvaWZ9Y2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgo8dGhlYWQ+PHRyPgoJe2ZvcmVhY2ggZnJvbT0kYWRtaW5zaG93IGl0ZW09Y29sdW1ufQoJCTx0aD57JGNvbHVtblswXX08L3RoPgoJey9mb3JlYWNofQo8L3RyPjwvdGhlYWQ+Cjx0Ym9keT4Ke2N5Y2xlIHZhbHVlcz0icm93Mixyb3cxIiBhc3NpZ249cm93Y2xhc3MgcmVzZXQ9dHJ1ZX0Ke2ZvcmVhY2ggZnJvbT0kaXRlbWxpc3QgaXRlbT1vbmVpdGVtfQp7Y3ljbGUgdmFsdWVzPSJyb3cyLHJvdzEiIGFzc2lnbj1yb3djbGFzc30KPHRyIGNsYXNzPSJ7JHJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfSc7Ij4KCXtmb3JlYWNoIGZyb209JGFkbWluc2hvdyBpdGVtPWNvbHVtbn0KCQl7YXNzaWduIHZhcj1vbmV2YWwgdmFsdWU9JGNvbHVtblsxXX0KCQk8dGR7aWYgJGNvbHVtblsyXX0gY2xhc3M9ImN0bG1tX25vc2VhcmNoInsvaWZ9Pnskb25laXRlbS0+JG9uZXZhbH08L3RkPgoJey9mb3JlYWNofQo8L3RyPgp7L2ZvcmVhY2h9CjwvdGJvZHk+CjwvdGFibGU+CjwvZGl2Pgp7aWYgJHBhZ2VpbmZvfQo8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+e2lmICRwcmV2aW91c3BhZ2V9eyRwcmV2aW91c3BhZ2V9ICZuYnNwOyB7L2lmfXskcGFnZWluZm99e2lmICRuZXh0cGFnZX0gJm5ic3A7IHskbmV4dHBhZ2V9ey9pZn08YnIvPgp7JHBhZ2VzfTwvcD4Key9pZn0KPHA+eyRhZGRuZXd9PC9wPnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/browsefiles.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPnskYnJvd3NldGl0bGV9PC9oMj4Ke2lmICRwb3N0bWF4c2l6ZX08cCBhbGlnbj0icmlnaHQiPnskcG9zdG1heHNpemV9PC9wPnsvaWZ9CnskZm9ybXN0YXJ0fQoKe2lmICRhZGRmaWxlaW5wdXR9CjxmaWVsZHNldCBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyB3aWR0aDogMzAlOyBtYXJnaW46IDE1cHg7IHBhZGRpbmc6IDVweDsiPjxsZWdlbmQ+PGI+eyR6aXB0aXRsZX08L2I+PC9sZWdlbmQ+CjxwPnskemlwbm90aWNlfTwvcD4Ke2lmICRyZXNpemVub3RpY2V9PHA+eyRyZXNpemVub3RpY2V9PC9wPnsvaWZ9CjxwPnskemlwaW5wdXR9IHskemlwc3VibWl0fTwvcD4KPC9maWVsZHNldD4Key9pZn0KPGZpZWxkc2V0IHN0eWxlPSJtYXJnaW46IDE1cHg7IHBhZGRpbmc6IDVweDsiPjxsZWdlbmQ+PGI+eyR1cGxvYWR0aXRsZX08L2I+PC9sZWdlbmQ+CntpZiAkcmVzaXplbm90aWNlfTxwPnskcmVzaXplbm90aWNlfTwvcD57L2lmfQp7JGZpbGVpbnB1dH0Ke2lmICRhZGRmaWxlaW5wdXR9PHA+eyRhZGRmaWxlaW5wdXR9PC9wPnsvaWZ9CjxwPnskc3VibWl0fTwvcD4KPC9maWVsZHNldD4KCnskZm9ybWVuZH0KCjxici8+CntpZiAkaW5zdGFudHNlYXJjaH08ZGl2IHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij57JGluc3RhbnRzZWFyY2h9PC9kaXY+ey9pZn0KPHA+eyRzaG93aW5nZGlyfTwvcD4KPGRpdiBzdHlsZT0iY2xlYXI6IHJpZ2h0OyI+Cjx0YWJsZSBpZD0iZmlsZWxpc3RfdGFibGUiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KPHRoZWFkPjx0cj4KCTx0aD57JHNvcnRsaW5rc1swXX17JGhlYWRlcnMtPmZpbGVuYW1lfTwvdGg+Cgk8dGg+eyRudW1lcmljX3NvcnRsaW5rc1sxXX17JGhlYWRlcnMtPmltYWdlc2l6ZX08L3RoPgoJPHRoPnskc29ydGxpbmtzWzJdfXskaGVhZGVycy0+ZXh0fTwvdGg+Cgk8dGg+eyRudW1lcmljX3NvcnRsaW5rc1szXX17JGhlYWRlcnMtPnNpemV9PC90aD4KCTx0aD57JG51bWVyaWNfc29ydGxpbmtzWzRdfXskaGVhZGVycy0+bW9kaWZpZWR9PC90aD4KCTx0aCB3aWR0aD0iMTI4Ij57JGhlYWRlcnMtPmRlbGV0ZWxpbmt9PC90aD4KPC90cj48L3RoZWFkPgo8dGJvZHk+CntjeWNsZSB2YWx1ZXM9InJvdzIscm93MSIgYXNzaWduPXJvd2NsYXNzIHJlc2V0PXRydWV9Cntmb3JlYWNoIGZyb209JGl0ZW1saXN0IGl0ZW09b25laXRlbX0Ke2N5Y2xlIHZhbHVlcz0icm93Mixyb3cxIiBhc3NpZ249cm93Y2xhc3N9Cjx0ciBjbGFzcz0ieyRyb3djbGFzc30iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRyb3djbGFzc30nOyI+Cgk8dGQ+eyRvbmVpdGVtLT5waWN9IHskb25laXRlbS0+dGhlbGlua308L3RkPgoJPHRkIGNsYXNzPSJjdGxtbV9ub3NlYXJjaCI+eyRvbmVpdGVtLT5pbWFnZXNpemV9PC90ZD4KCTx0ZCBjbGFzcz0iY3RsbW1fbm9zZWFyY2giPnskb25laXRlbS0+ZXh0fTwvdGQ+Cgk8dGQgY2xhc3M9ImN0bG1tX25vc2VhcmNoIj57JG9uZWl0ZW0tPnNpemV9PC90ZD4KCTx0ZCBjbGFzcz0iY3RsbW1fbm9zZWFyY2giPnskb25laXRlbS0+bW9kaWZpZWR9PC90ZD4KCTx0ZCBjbGFzcz0iY3RsbW1fbm9zZWFyY2giPnskb25laXRlbS0+ZGVsZXRlbGlua308L3RkPgo8L3RyPgp7L2ZvcmVhY2h9CjwvdGJvZHk+CjwvdGFibGU+CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/editA.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[DQp7aWYgJGl0ZW1hbGlhc308c3BhbiBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyBmb250LXNpemU6IDgwJSI+eyRpdGVtYWxpYXN9PC9zcGFuPnsvaWZ9DQo8aDE+eyRlZGl0dGl0bGV9PC9oMT4NCjxwPnskc3VibWl0fSB7JGFwcGx5fSB7JGNhbmNlbH08L3A+DQo8YnIvPjxici8+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG5hbWVfbGFiZWx9KiA6PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JG5hbWVfaW5wdXR9PC9wPg0KCTwvZGl2Pg0KCXtpZiAkYWxpYXNfaW5wdXR9PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGFsaWFzX2xhYmVsfSA6PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGFsaWFzX2lucHV0fTwvcD4NCgk8L2Rpdj4NCgl7L2lmfQ0KDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGxhdGl0dWRlX2xhYmVsfSogOjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRsYXRpdHVkZV9pbnB1dH08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGxvbmdpdHVkZV9sYWJlbH0gOjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRsb25naXR1ZGVfaW5wdXR9PC9wPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR5YXdfbGFiZWx9IDo8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskeWF3X2lucHV0fTwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcG92X2xhYmVsfSA6PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHBvdl9pbnB1dH08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHpvb21fbGFiZWx9IDo8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskem9vbV9pbnB1dH08L3A+DQoJPC9kaXY+DQo8YnIvPg0KPHA+eyRzdWJtaXR9IHskYXBwbHl9IHskY2FuY2VsfTwvcD4NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/search.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPnskc2VhcmNodGl0bGV9e2lmICR3aGF0fTogeyR3aGF0fXsvaWZ9PC9oMj4KPHA+eyRzZWFyY2hmaWVsZH17JHN1Ym1pdH08L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/search_generalresults.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPnskbGV2ZWx0aXRsZX08L2gyPgo8dWwgY2xhc3M9ImN0bF9zZWFyY2hyZXN1bHRzIj4Ke2ZvcmVhY2ggZnJvbT0kaXRlbWxpc3QgaXRlbT0iaXRlbSJ9CjxsaT57JGl0ZW0tPmRldGFpbGxpbmt9PC9saT4Key9mb3JlYWNofQo8L3VsPgp7aWYgJHBhZ2VtZW51fTxwPnskcGFnZW1lbnV9PC9wPnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/search_streetview.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyPnskc2VhcmNodGl0bGV9OiB7JHdoYXR9PC9oMj4KPHRhYmxlPgo8dHI+PHRkPnskbmFtZV9sYWJlbH08L3RkPjx0ZD57JG5hbWVfaW5wdXR9PC90ZD48L3RyPgo8dHI+PHRkPnskZGF0ZV9tb2RpZmllZF9sYWJlbH08L3RkPjx0ZD57JGRhdGVfbW9kaWZpZWRfaW5wdXR9PC90ZD48L3RyPgo8L3RhYmxlPgo8cD57JHN1Ym1pdH08L3A+]]></data>
	</file>
</module>
