<?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>CG_WP2CGBlog</name>
	<version>1.0.6</version>
  <mincmsversion>1.11.9</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyBjb3B5aW5nIGJsb2cgcG9zdHMgZnJvbSBhIFdvcmRQcmVzcyZ0cmFkZTsgaW5zdGFsbGF0aW9uIG9uIHRoZSBzYW1lIHNlcnZlciAob3Igd2l0aCBwcm9wZXIgZmlsZXN5c3RlbSBhbmQgZGF0YWJhc2UgYWNjZXNzKSBpbnRvIENHQmxvZyB0byBhaWRlIGluIHRoZSB0cmFuc2l0aW9uIGZyb20gV29yZFByZXNzIHRvIENNUyBNYWRlIFNpbXBsZS48L3A+CjxoMz5GZWF0dXJlczo8L2gzPgo8dWw+CiAgPGxpPkNyZWF0ZSB1c2VycyBpbiB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUgZm9yIGFsbCBXb3JkUHJlc3MgdXNlcnMuPC9saT4KICA8bGk+Q29weSBwdWJsaXNoZWQgYmxvZyBwb3N0cy48L2xpPgogIDxsaT5DcmVhdGVzIGEgQ0dCbG9nIGZyaWVuZGx5IFVSTCBmb3IgZWFjaCBwb3N0LjwvbGk+CiAgPGxpPlRyYW5zbGF0ZSBhbmQgY29weSBpbWFnZXM8L2xpPgogIDxsaT5Db3BpZXMgV29yZFByZXNzIGNhdGVnb3JpZXMgaW50byBDR0Jsb2c8L2xpPgo8L3VsPgoKPGgzPkhvdyBkbyBJIHVzZSBpdDo8L2gzPgogIDxkaXYgY2xhc3M9Indhcm5pbmciPgogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIHBlcmZvcm0gbXVsdGlwbGUgdGVzdHMgb24gdmFyaW91cyBjb25maWd1cmF0aW9uIGl0ZW1zIChwYXJ0aWN1bGFybHkgd2hlbiBpbXBvcnRpbmcgbWV0YSB0YWdzLCBvciBpbWFnZXMpLiAgWW91IHNob3VsZCBwZXJmb3JtIHRlc3RpbmcgZWl0aGVyIGluIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1uZXQgb3Igd2l0aCBhIGJsYW5rIGluc3RhbGwgb2YgQ0dCbG9nIHNvIHRoYXQgdGhlIGRhdGEgY2FuIGJlIGVhc2lseSBlcmFzZWQgYmV0d2VlbiB0ZXN0cy48L3A+CiAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRvIHVzZSB0aGlzIG1vZHVsZSB5b3UgbmVlZCBhY2Nlc3MgdG8gdGhlIHdwLWNvbmZpZy5waHAgZmlsZSBvZiB5b3VyIFdvcmRQcmVzcyBpbnN0YWxsYXRpb24sIGFuZCB0byBrbm93IHRoZSBjb21wbGV0ZSBmaWxlc3lzdGVtIHBhdGggKGFic29sdXRlIHBhdGgpIHRvIHRoZSB3b3JkcHJlc3MgaW5zdGFsbGF0aW9uLjwvcD4KICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBpcyBub3QgYSBjb21wbGV0ZSBtaWdyYXRpb24gZnJvbSBXb3JkUHJlc3MgdG8gQ01TTVMuICBBbmQgdGhlcmUgaXMgbm8gZGlyZWN0IG9uZS10by1vbmUgY29udmVyc2lvbiBmb3IgVVJMUy4gIFRoaXMgcHJvY2VzcyBtaWdyYXRlcyB0aGUgZGF0YS4gWW91IG1heSBuZWVkIHRvIGJlIGludmVudGl2ZSB3aXRoIFVSTCByZXdyaXRlIHJ1bGVzIHRvIHJldGFpbiBTRU8gcmFua2luZy48L3A+CiAgPC9kaXY+CiAgPG9sPgogICAgPGxpPk5hdmlnYXRlIHRvIHRoZSBDR19XUDJDR0Jsb2cgYWRtaW4gcGFuZWwgaW5zaWRlIHRoZSBDTVNNUyBhZG1pbiBjb25zb2xlLjwvbGk+CiAgICA8bGk+Q29tcGxldGUgdGhlIGZvcm0sIHNwZWNpZnlpbmcgdGhlIGRldGFpbHMgb2YgdGhlIHdvcmRwcmVzcyBpbnN0YWxsYXRpb24gYW5kIHdoYXQgdG8gaW1wb3J0OgogICAgPC9saT4KICAgIDxsaT5QcmVzcyBTdWJtaXQ8L2xpPgogICAgPGxpPlJldmlldyB0aGUgYmxvZyBhcnRpY2xlcyBpbiB0aGUgZnJvbnRlbmQgb2YgdGhlIHdlYnNpdGUgYW5kIGluIHRoZSBDR0Jsb2cgYWRtaW4gcGFuZWwuPC9saT4KICAgIDxsaT5EbyBhIHNlYXJjaCByZS1pbmRleDwvbGk+CiAgICA8bGk+SWYgZXZlcnl0aGluZyBpcyBwcm9wZXIgeW91IGNhbiB1bmluc3RhbGwgdGhpcyBtb2R1bGUuPC9saT4KICA8L29sPgoKPGgzPkZ1dHVyZSBEZXZlbG9wbWVudDo8L2gzPgogIDxwPlRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGF3YWl0aW5nIHNwb25zb3JzaGlwOjwvcD4KICA8dWw+CiAgICA8bGk+SW1wb3J0IENvbW1lbnRzIGZyb20gV29yZFByZXNzIGludG8gQ0dGZWVkYmFjazwvbGk+CiAgICA8bGk+Q29udmVydCB3b3JkcHJlc3Mgc2x1Z3MgKHRoYXQgZm9ybSB0aGUgcGVybWFsaW5rKSBpbnRvIENHQmxvZyBVUkxzPC9saT4KICAgIDxsaT5DdXN0b20gZmllbGQgaW1wb3J0YXRpb248L2xpPgogICAgPGxpPkdyb3VwcyBhbmQgRkVVIE1hcHBpbmcgZnJvbSBXb3JkUHJlc3MgaW50byBGRVU8L2xpPgogIDwvdWw+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eVwncwptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0iaHR0cDovL2NhbGd1eTEwMDAuY29tIj5jYWxndXkxMDAwLmNvbTwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+CjwvdWw+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTQsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4KPGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DR0V4dGVuc2lvbnMgPSZndDsgMS4zOC42PC9saT48bGk+RnJvbnRFbmRVc2VycyA9Jmd0OyAxLjIyLjQ8L2xpPjxsaT5DR0Jsb2cgPSZndDsgMS4xMjwvbGk+PC91bD48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBub2NhY2hlPSIwIiAtIC0tIE1pc3NpbmcgTGFuZ3VhZ2VzdHJpbmcgLSBtb2R1bGU6Q0dfV1AyQ0dCbG9nIHN0cmluZzpwYXJhbV9ub2NhY2hlLS08L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGdtYWlsLmNvbSZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjAuNjxiciAvPg==]]></about>
	<description><![CDATA[A simple, one time use only script to import wordpress blog posts into CGBlog]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.38.6</requiredversion>
	</requires>
	<requires>
	  <requiredname>FrontEndUsers</requiredname>
	  <requiredversion>1.22.4</requiredversion>
	</requires>
	<requires>
	  <requiredname>CGBlog</requiredname>
	  <requiredversion>1.12</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_import.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHX1dQMkNHQmxvZyAoYykgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgc2hvcnRlbmluZyBVUkxTLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKaWYoICEkdGhpcy0+VmlzaWJsZVRvQWRtaW5Vc2VyKCkgKSByZXR1cm47CgpmdW5jdGlvbiBwcm9ncmVzc19yZXNldCgpCnsKICAgIGVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5wcm9ncmVzc19yZXNldCgpPC9zY3JpcHQ+JzsKICAgIGZsdXNoKCk7Cn0KCmZ1bmN0aW9uIHByb2dyZXNzX3RvdGFsKCR0b3RhbCkKewogICAgJHRvdGFsID0gKGludCkkdG90YWw7CiAgICBlY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+cHJvZ3Jlc3NfdG90YWwoJy4kdG90YWwuJyk8L3NjcmlwdD4nOwogICAgZmx1c2goKTsKfQoKZnVuY3Rpb24gcHJvZ3Jlc3MoJHN0ZXBzID0gMSkKewogICAgJHN0ZXBzID0gKGludCkkc3RlcHM7CiAgICBpZiggJHN0ZXBzIDwgMSApIHJldHVybjsKICAgIGVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5wcm9ncmVzcygnLiRzdGVwcy4nKTwvc2NyaXB0Pic7CiAgICBmbHVzaCgpOwp9CgpmdW5jdGlvbiBlcnJvcigkbXNnKQp7CiAgICAkbXNnID0gdHJpbSgkbXNnKTsKICAgIGlmKCAhJG1zZyApIHJldHVybjsKICAgIGVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5lcnJvcihcJycuJG1zZy4nXCcpPC9zY3JpcHQ+JzsKICAgIGZsdXNoKCk7Cn0KCmZ1bmN0aW9uIHN0YXR1cygkbXNnKQp7CiAgICAkbXNnID0gdHJpbSgkbXNnKTsKICAgIGlmKCAhJG1zZyApIHJldHVybjsKICAgIGVjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5zdGF0dXMoXCcnLiRtc2cuJ1wnKTwvc2NyaXB0Pic7CiAgICBmbHVzaCgpOwp9CgpmdW5jdGlvbiBzdGF0aXN0aWMoJGtleSwkdmFsKQp7CiAgICAka2V5ID0gdHJpbSgka2V5KTsKICAgICR2YWwgPSB0cmltKCR2YWwpOwogICAgaWYoICEka2V5ICkgcmV0dXJuOwogICAgaWYoICEkdmFsICkgcmV0dXJuOwogICAgZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPicuInN0YXQoJyRrZXknLCckdmFsJyk7Ii4nPC9zY3JpcHQ+JzsKICAgIGZsdXNoKCk7Cn0KCmZ1bmN0aW9uIG5sMnAoJHN0cmluZykKewogICAgJHBhcmFncmFwaHMgPSAnJzsKCiAgICBmb3JlYWNoIChleHBsb2RlKCJcbiIsICRzdHJpbmcpIGFzICRsaW5lKSB7CiAgICAgICAgaWYgKHRyaW0oJGxpbmUpKSAkcGFyYWdyYXBocyAuPSAnPHA+JyAuICRsaW5lIC4gJzwvcD4nOwogICAgfQoKICAgIHJldHVybiAkcGFyYWdyYXBoczsKfQoKdHJ5IHsKICAkY2dibG9nID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDR0Jsb2cnKTsKICBpZiggISRjZ2Jsb2cgKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb3VsZCBub3QgZ2V0IGluc3RhbmNlIG9mIENHQmxvZyBtb2R1bGUnKTsKCiAgJGhhbmRsZXJzID0gb2JfbGlzdF9oYW5kbGVycygpOwogIGZvciAoJGNudCA9IDA7ICRjbnQgPCBzaXplb2YoJGhhbmRsZXJzKTsgJGNudCsrKSB7IGVjaG8gb2JfZW5kX2NsZWFuKCk7IH0KICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2ltcG9ydC50cGwnKTsgZmx1c2goKTsKCiAgJHdwY29uZmlnID0gdW5zZXJpYWxpemUoY21zX3VzZXJwcmVmczo6Z2V0KCd3cDJjZ2Jsb2dfd3Bjb25maWcnKSk7CiAgJG9wdGlvbnMgPSB1bnNlcmlhbGl6ZShjbXNfdXNlcnByZWZzOjpnZXQoJ3dwMmNnYmxvZ19vcHRpb25zJykpOwoKICAkdXNlcl9jb3VudCA9IDA7CiAgJHVzZXJfZXJyb3JzID0gMDsKICAkaW1hZ2VfZXJyb3JzID0gMDsKICAkaW1hZ2VfY291bnQgPSAwOwogICRhcnRpY2xlX2NvdW50ID0gMDsKICAkYXJ0aWNsZV9lcnJvcnMgPSAwOwogICR3cF9jYXRzID0gbnVsbDsKICAkd3BfdGVybV90YXhvbm9teSA9IG51bGw7CiAgJGNnYmxvZ19jYXRzID0gbnVsbDsKCiAgLy8gdG9kbzogcmVtZW1iZXIgdG8gZGVsZXRlIHRoZXNlIG9wdGlvbnMgd2hlbiBkb25lLiAocGFydGljdWxhcmx5IHRoZSBjb25maWcpCiAgJG9wdGlvbnNbJ2ltYWdlX2Rlc3QnXSA9ICcvJy50cmltKCRvcHRpb25zWydpbWFnZV9kZXN0J10sJy8nKS4nLyc7CiAgJHRtcCA9IGV4cGxvZGUoIlxuIiwkb3B0aW9uc1snaW1hZ2VfcGF0aHMnXSk7CiAgJGltYWdlX3BhdGhzID0gYXJyYXkoKTsKICBmb3JlYWNoKCAkdG1wIGFzICRsaW5lICkgewogICAgJGxpbmUgPSB0cmltKCRsaW5lKTsKICAgIGlmKCAhJGxpbmUgKSBjb250aW51ZTsKICAgICRpbWFnZV9wYXRoc1tdID0gJGxpbmU7CiAgfQoKICAvLyBnZXQgZmV1CiAgJGZldSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwogIGlmKCAhaXNfb2JqZWN0KCRmZXUpICkgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ291bGQgbm90IGdldCB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUgaW5zdGFuY2UnKTsKICAkdXNlcm5hbWVfaXNfZW1haWwgPSAoaW50KSRmZXUtPkNHR2V0UHJlZmVyZW5jZSgndXNlcm5hbWVfaXNfZW1haWwnLDApOwoKICAvLyBjbGVhciBDR0Jsb2cgc3R1ZmYKICBpZiggJG9wdGlvbnNbJ2NsZWFyX2NnYmxvZ19wb3N0cyddICkgewogICAgICAkc3RyID0gJ1RSVU5DQVRFIFRBQkxFICcuY21zX2RiX3ByZWZpeCgpLiclcyc7CiAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAkdG1wW10gPSBzcHJpbnRmKCRzdHIsJ21vZHVsZV9jZ2Jsb2dfYmxvZ19jYXRlZ29yaWVzJyk7CiAgICAgICR0bXBbXSA9IHNwcmludGYoJHN0ciwnbW9kdWxlX2NnYmxvZ19maWVsZHZhbHMnKTsKICAgICAgJHRtcFtdID0gc3ByaW50Zigkc3RyLCdtb2R1bGVfY2dibG9nJyk7CiAgICAgIGZvcmVhY2goICR0bXAgYXMgJHNxbCApIHsKICAgICAgICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHNxbCk7CiAgICAgIH0KICAgICAgJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NnYmxvZ19zZXEiICk7CiAgICAgICRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfY2dibG9nX3NlcSIpOwogICAgICBzdGF0dXMoJ0NsZWFyZWQgQ0dCbG9nIFBvc3RzJyk7CgogICAgICBpZiggJG9wdGlvbnNbJ2NsZWFyX2NnYmxvZ19maWVsZGRlZnMnXSApIHsKICAgICAgICAgICRkYi0+RXhlY3V0ZSgnVFJVTkNBVEUgVEFCTEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9jZ2Jsb2dfZmllbGRkZWZzJyk7CiAgICAgICAgICBzdGF0dXMoJ0NsZWFyZWQgQ0dCbG9nIGZpZWxkIGRlZmluaXRpb25zJyk7CiAgICAgIH0KICAgICAgaWYoICRvcHRpb25zWydjbGVhcl9jZ2Jsb2dfY2F0ZWdvcmllcyddICkgewogICAgICAgICAgJGRiLT5FeGVjdXRlKCdUUlVOQ0FURSBUQUJMRSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2NnYmxvZ19jYXRlZ29yaWVzJyk7CiAgICAgICAgICBzdGF0dXMoJ0NsZWFyZWQgQ0dCbG9nIGNhdGVnb3JpZXMnKTsKICAgICAgfQogIH0KCiAgLy8gY29ubmVjdCB0byB3b3JkcHJlc3MKICAkd3BkYiA9IHdwMmNnYmxvZ191dGlsczo6Z2V0X3dwX2RiKCR3cGNvbmZpZyk7CgogIC8vIGdldCB0aGUgdXNlcnMgZnJvbSB3cCwgd2UgbmVlZCB0aGlzIGZvciB1c2VybmFtZSBtYXRjaGluZy4KICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLndwMmNnYmxvZ191dGlsczo6d3BfZGJfcHJlZml4KCkuJ3VzZXJzJzsKICAkd3BfdXNlcnMgPSAkd3BkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKICBpZiggIWlzX2FycmF5KCR3cF91c2VycykgfHwgY291bnQoJHdwX3VzZXJzKSA9PSAwICkgewogICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb3VsZCBub3QgZmluZCBhbnkgdXNlcnMgaW4gdGhlIFdvcmRQcmVzcyBkYXRhYmFzZScpOwogIH0KICAkd3BfdXNlcm5hbWVzID0gYXJyYXkoKTsKICBmb3JlYWNoKCAkd3BfdXNlcnMgYXMgJHdwX3VzZXIgKSB7CiAgICAgICR1c2VybmFtZSA9ICR3cF91c2VyWyd1c2VyX2VtYWlsJ107CiAgICAgIGlmKCAhJHVzZXJuYW1lIHx8ICEkdXNlcm5hbWVfaXNfZW1haWwgKSB7CiAgICAgICAgICAkdXNlcm5hbWUgPSAkd3BfdXNlclsndXNlcl9sb2dpbiddOwogICAgICB9CiAgICAgICR3cF91c2VybmFtZXNbJHdwX3VzZXJbJ0lEJ11dID0gJHVzZXJuYW1lOwogIH0KCiAgaWYoICRvcHRpb25zWydpbXBvcnRfdXNlcnMnXSApIHsKICAgICAgLy8gZ2V0IGEgbWFwIG9mIHRoZSB1c2VybmFtZXMgPT4gZmV1IHVpZCdzIHRoYXQgd2UgYWxyZWFkeSBoYXZlCiAgICAgICRmZXVfdXNlcl9xdWVyeSA9IG5ldyBmZXVfdXNlcl9xdWVyeSgpOwogICAgICAkZmV1X3VzZXJfcXVlcnktPmFkZF9hbmRfb3B0KGZldV91c2VyX3F1ZXJ5X29wdDo6TUFUQ0hfVVNFUk5BTUVMSVNULGFycmF5X3ZhbHVlcygkd3BfdXNlcm5hbWVzKSk7CiAgICAgICRmZXVfdXNlcl9xdWVyeS0+c2V0X3Jlc3VsdF90eXBlKCRmZXVfdXNlcl9xdWVyeTo6UkVTVUxUX1RZUEVfTElTVCk7CiAgICAgICRmZXVfcnMgPSAkZmV1X3VzZXJfcXVlcnktPmV4ZWN1dGUoKTsKICAgICAgJHVzZXJuYW1lX21hcCA9IGFycmF5KCk7CiAgICAgIHdoaWxlKCAhJGZldV9ycy0+RU9GKCkgKSB7CiAgICAgICAgICAkdXNlcm5hbWVfbWFwWyRmZXVfcnMtPmZpZWxkc1sndXNlcm5hbWUnXV0gPSAkZmV1X3JzLT5maWVsZHNbJ2lkJ107CiAgICAgICAgICAkZmV1X3JzLT5Nb3ZlTmV4dCgpOwogICAgICB9CgogICAgICAvLyBub3cgZ2V0IGFsbCB0aGUgdXNlcm5hbWVzIHdlIG5lZWQgdG8gYWRkCiAgICAgICRhZGRfdXNlcnMgPSBhcnJheSgpOwogICAgICBpZiggIWNvdW50KCR1c2VybmFtZV9tYXApICkgewogICAgICAgICAgJGFkZF91c2VycyA9IGFycmF5X3ZhbHVlcygkd3BfdXNlcm5hbWVzKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICAgIGZvcmVhY2goICR3cF91c2VybmFtZXMgYXMgJHdwX3VpZCA9PiAkdXNlcm5hbWUgKSB7CiAgICAgICAgICAgICAgaWYoICFpbl9hcnJheSgkdXNlcm5hbWUsYXJyYXlfa2V5cygkdXNlcm5hbWVfbWFwKSkgKSAkYWRkX3VzZXJzW10gPSAkdXNlcm5hbWU7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIHByb2dyZXNzX3Jlc2V0KCk7CiAgICAgIHByb2dyZXNzX3RvdGFsKGNvdW50KCRhZGRfdXNlcnMpKTsKCiAgICAgIGZvcmVhY2goICRhZGRfdXNlcnMgYXMgJG5ld191c2VyICkgewogICAgICAgICAgLy8gICBhZGQgaXQgdG8gZmV1CiAgICAgICAgICAkZXhwaXJlcyA9IHN0cnRvdGltZSgnKzEwIHllYXJzJyk7CiAgICAgICAgICAkcmVzID0gJGZldS0+QWRkVXNlcigkbmV3X3VzZXIsJG9wdGlvbnNbJ3VzZXJfcHcnXSwkZXhwaXJlcyk7CiAgICAgICAgICBpZiggIWlzX2FycmF5KCRyZXMpIHx8ICRyZXNbMF0gPT0gRkFMU0UgKSB7CiAgICAgICAgICAgICAgJHVzZXJfZXJyb3IrKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gdG9kbzogYWRkIGhpbSB0byBhIGdyb3VwCiAgICAgICAgICAgICAgLy8gdG9kbzogZGVmYXVsdCBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgJHVzZXJfY291bnQrKzsKICAgICAgICAgICAgICAkdXNlcm5hbWVfbWFwWyRuZXdfdXNlcl0gPSAkcmVzWzFdOwogICAgICAgICAgICAgIHN0YXR1cygnQWRkZWQgVXNlciAnLiRuZXdfdXNlcik7CiAgICAgICAgICB9CgogICAgICAgICAgcHJvZ3Jlc3MoKTsKICAgICAgfQogIH0gLy8gaW1wb3J0IHVzZXJzCgogIGlmKCAkb3B0aW9uc1snaW1wb3J0X2NhdGVnb3JpZXMnXSApIHsKICAgICAgLy8gZ2V0IHdvcmRwcmVzcyBjYXRlZ29yaWVzIChuYW1lLCBpZCwgcGFyZW50X2lkKQogICAgICAkcXVlcnkgPSAiU0VMRUNUIFQubmFtZSxULnRlcm1faWQsTy50ZXJtX3RheG9ub215X2lkLE8uY291bnQsTy5wYXJlbnQgRlJPTSAiLndwMmNnYmxvZ191dGlsczo6d3BfZGJfcHJlZml4KCkuInRlcm1zIFQKICAgICAgICAgICAgICAgIExFRlQgSk9JTiAiLndwMmNnYmxvZ191dGlsczo6d3BfZGJfcHJlZml4KCkuInRlcm1fdGF4b25vbXkgTyBPTiBULnRlcm1faWQgPSBPLnRlcm1faWQgV0hFUkUgTy50YXhvbm9teSA9ICdjYXRlZ29yeScgT1JERVIgQlkgTy5wYXJlbnQgQVNDLCBULm5hbWUgQVNDIjsKICAgICAgJHdwX2NhdHMgPSAkd3BkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKICAgICAgaWYoICR3cF9jYXRzICkgewogICAgICAgICAgJHdwX3Rlcm1fdGF4b25vbXkgPSBjZ2VfYXJyYXk6OmV4dHJhY3RfZmllbGQoJHdwX2NhdHMsJ3Rlcm1fdGF4b25vbXlfaWQnKTsKICAgICAgICAgICR3cF9jYXRzID0gd3AyY2dibG9nX3V0aWxzOjp3cGNhdHNfdG9fdHJlZSgkd3BfY2F0cyk7CiAgICAgIH0KCiAgICAgIC8vIGdldCBjZ2Jsb2cgY2F0ZWdvcmllcwogICAgICAkY2dibG9nX2NhdHMgPSBjZ2Jsb2dfb3BzOjpnZXRfY2F0ZWdvcnlfbGlzdChGQUxTRSxudWxsLFRSVUUpOwogICAgICAkY2dibG9nX2NhdHMgPSB3cDJjZ2Jsb2dfdXRpbHM6OmNnYmxvZ19jYXRzX3RvX3RyZWUoJGNnYmxvZ19jYXRzKTsKCiAgICAgIC8vIHRoaXMgbWFrZXMgc3VyZSB0aGF0IG91ciBDR0Jsb2cgY2F0ZWdvcnkgdHJlZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIFdQIGNhdGVnb3J5IHRyZWUuCiAgICAgICRfY29udmVydF93cF9jYXRzID0gZnVuY3Rpb24oJHdwX3RyZWUsJiRjZ2Jsb2dfdHJlZSwkZGVwdGggPSAwKSB1c2UgKCYkX2NvbnZlcnRfd3BfY2F0cykgewogICAgICAgICAgaWYoICFpc19hcnJheSgkd3BfdHJlZSkgKSAkd3BfdHJlZSA9IGFycmF5KCR3cF90cmVlKTsKICAgICAgICAgIGZvcmVhY2goICR3cF90cmVlIGFzICR3cF9ub2RlICkgewogICAgICAgICAgICAgIGlmKCAkd3Bfbm9kZS0+Z2V0X3RhZygndGVybV9pZCcpID4gMCApIHsKICAgICAgICAgICAgICAgICAgJHdwX25hbWVfcGF0aCA9ICR3cF9ub2RlLT5nZXRfcGF0aCgnbmFtZScpOwogICAgICAgICAgICAgICAgICAkd3BfaWRfcGF0aCA9ICR3cF9ub2RlLT5nZXRfcGF0aCgndGVybV9pZCcpOwogICAgICAgICAgICAgICAgICBpZiggJHdwX25hbWVfcGF0aCAmJiAkd3BfaWRfcGF0aCApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmKCAhd3AyY2dibG9nX3RyZWU6OmZpbmRfYnlfcGF0aCgkY2dibG9nX3RyZWUsJ25hbWUnLCR3cF9uYW1lX3BhdGgpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHdwMmNnYmxvZ191dGlsczo6Y3JlYXRlX3BhdGgoJGNnYmxvZ190cmVlLCR3cF9uYW1lX3BhdGgsJHdwX2lkX3BhdGgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmKCAkd3Bfbm9kZS0+aGFzX2NoaWxkcmVuKCkgKSB7CiAgICAgICAgICAgICAgICAgICRfY29udmVydF93cF9jYXRzKCR3cF9ub2RlLT5nZXRfY2hpbGRyZW4oKSwkY2dibG9nX3RyZWUsJGRlcHRoKzEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfTsKICAgICAgJF9jb252ZXJ0X3dwX2NhdHMoJHdwX2NhdHMsJGNnYmxvZ19jYXRzKTsKCiAgICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgQ0dCbG9nIGNhdGVnb3J5IHRyZWUuLi4uIGFueXRoaW5nIHRoYXQgZG9lc24ndCBoYXZlIGFuICdpZCcKICAgICAgLy8gZ2V0cyBjcmVhdGVkIGluIENHQmxvZwogICAgICAkX2NyZWF0ZV9jZ2Jsb2dfY2F0cyA9IGZ1bmN0aW9uKCYkY2dibG9nX25vZGUsJHBhcmVudF9pZCA9IC0xKSB1c2UgKCYkX2NyZWF0ZV9jZ2Jsb2dfY2F0cykgewogICAgICAgICAgJGNnYmxvZ19pZCA9IChpbnQpJGNnYmxvZ19ub2RlLT5nZXRfdGFnKCdpZCcpOwogICAgICAgICAgJGNnYmxvZ19uYW1lID0gdHJpbSgkY2dibG9nX25vZGUtPmdldF90YWcoJ25hbWUnKSk7CiAgICAgICAgICBpZiggJGNnYmxvZ19uYW1lICE9ICcnICkgewogICAgICAgICAgICAgIGlmKCAkY2dibG9nX2lkIDwgMSApIHsKICAgICAgICAgICAgICAgICAgLy8gZ290dGEgY3JlYXRlIHRoaXMgY2F0ZWdvcnkKICAgICAgICAgICAgICAgICAgLy8gYmUgc3VyZSB0byBzZXQgY2dibG9nX2lkCiAgICAgICAgICAgICAgICAgICRjZ2Jsb2dfaWQgPSBjZ2Jsb2dfb3BzOjphZGRfY2F0ZWdvcnkoJGNnYmxvZ19uYW1lLCRwYXJlbnRfaWQpOwogICAgICAgICAgICAgICAgICAkY2dibG9nX25vZGUtPnNldF90YWcoJ2lkJywkY2dibG9nX2lkKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgaWYoICRjZ2Jsb2dfbm9kZS0+aGFzX2NoaWxkcmVuKCkgKSB7CiAgICAgICAgICAgICAgJGNoaWxkcmVuID0gJGNnYmxvZ19ub2RlLT5nZXRfY2hpbGRyZW4oKTsKICAgICAgICAgICAgICBmb3JlYWNoKCAkY2hpbGRyZW4gYXMgJGNoaWxkICkgewogICAgICAgICAgICAgICAgICAkX2NyZWF0ZV9jZ2Jsb2dfY2F0cygkY2hpbGQsJGNnYmxvZ19pZCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9OwogICAgICAkX2NyZWF0ZV9jZ2Jsb2dfY2F0cygkY2dibG9nX2NhdHMpOwoKICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIGNnYmxvZ19jYXRzIHNob3VsZCBoYXZlIGEgY29tcGxldGUgbWlycm9yIG9mIHRoZSB3cF90cmVlCiAgICAgIC8vIGJ1dCBtYXkgaGF2ZSBleHRyYSBub2RlcyAocHJlLWV4aXN0aW5nIGNnYmxvZyBjYXRlZ29yaWVzKQogICAgICAvLyBub2RlcyBtdXN0IGhhdmUgYSAnd3BfdGVybV9pZCcgdGFnLCBhbmQgYW4gJ2lkJyB0YWcKICAgICAgLy8gbm9kZXMgd2l0aG91dCBhIHdwX3Rlcm1faWQgdGFnIHdlcmUgcHJlLWV4aXN0aW5nCgogIH0gLy8gaW1wb3J0IGNhdGVnb3JpZXMKCiAgaWYoICRvcHRpb25zWydpbXBvcnRfcG9zdHMnXSApIHsKICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBDT1VOVChJRCkgRlJPTSAnLndwMmNnYmxvZ191dGlsczo6d3BfZGJfcHJlZml4KCkuJ3Bvc3RzIFdIRVJFIHBvc3RfdHlwZSA9ID8gQU5EIHBvc3Rfc3RhdHVzID0gPyBPUkRFUiBCWSBwb3N0X2RhdGUgREVTQyc7CiAgICAgICRubWF0Y2hlcyA9ICR3cGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCdwb3N0JywncHVibGlzaCcpKTsKICAgICAgaWYoICRubWF0Y2hlcyA+IDAgKSB7CgogICAgICAgICAgJG9mZnNldCA9IDA7CiAgICAgICAgICAkYmF0Y2hzaXplID0gNTA7CiAgICAgICAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLndwMmNnYmxvZ191dGlsczo6d3BfZGJfcHJlZml4KCkuJ3Bvc3RzIFdIRVJFIHBvc3RfdHlwZSA9ID8gQU5EIHBvc3Rfc3RhdHVzID0gPyBPUkRFUiBCWSBwb3N0X2RhdGUgREVTQyc7CiAgICAgICAgICAkZGZsdF9jZ2Jsb2dfcmVjID0gYXJyYXkoJ2NnYmxvZ19pZCc9PicnLCdjZ2Jsb2dfdGl0bGUnPT4nJywnY2dibG9nX2RhdGEnPT4nJywnY2dibG9nX2RhdGUnPT4nJywnc3VtbWFyeSc9PicnLCdzdGF0dXMnPT4ncHVibGlzaGVkJywKICAgICAgICAgICdzdGFydF90aW1lJz0+bnVsbCwnZW5kX3RpbWUnPT5udWxsLCdjcmVhdGVfZGF0ZSc9Pm51bGwsJ21vZGlmaWVkX2RhdGUnPT5udWxsLCdhdXRob3InPT4nJywnY2dibG9nX2V4dHJhJz0+JycsJ3VybCc9PicnKTsKCiAgICAgICAgICAvLyB0aGUgbWFpbiBxdWVyeSBmb3IgaW5zZXJ0aW5nIGEgY2dibG9nIHJlY29yZAogICAgICAgICAgJGlxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2NnYmxvZyAoY2dibG9nX2lkLCBjZ2Jsb2dfdGl0bGUsIGNnYmxvZ19kYXRhLAogICAgICAgICAgICAgICAgICAgICBjZ2Jsb2dfZGF0ZSwgc3VtbWFyeSwgc3RhdHVzLCBzdGFydF90aW1lLCBlbmRfdGltZSwgY3JlYXRlX2RhdGUsIG1vZGlmaWVkX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgIGF1dGhvciwgY2dibG9nX2V4dHJhLCB1cmwpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyknOwoKICAgICAgICAgIC8vIGJhc2UgcXVlcnkgZm9yIHJldHJpZXZpbmcgc2VsZWN0ZWQgbWV0YWRhdGEgZm9yIHNwZWNpZmllZCBwb3N0cy4KICAgICAgICAgICRmaWVsZF9yZWFkX3F1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy53cDJjZ2Jsb2dfdXRpbHM6OndwX2RiX3ByZWZpeCgpLidwb3N0bWV0YSBXSEVSRSBwb3N0X2lkIElOIFNVQjEgQU5EIG1ldGFfa2V5IGluIFNVQjIgT1JERVIgQlkgcG9zdF9pZCxtZXRhX2tleSc7CgogICAgICAgICAgLy8gcXVlcnkgZm9yIGluc2VydGluZyBhIGN1c3RvbSBmaWVsZCB2YWx1ZQogICAgICAgICAgJG1ldGFfaW5zcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9jZ2Jsb2dfZmllbGR2YWxzIChjZ2Jsb2dfaWQsZmllbGRkZWZfaWQsdmFsdWUsY3JlYXRlX2RhdGUsbW9kaWZpZWRfZGF0ZSkgVkFMVUVTICg/LD8sPyxOT1coKSxOT1coKSknOwoKICAgICAgICAgIC8vIGNyZWF0ZSBmaWVsZGRlZmluaXRpb25zIGluIENHQmxvZz8KICAgICAgICAgICRtZXRhX21hcCA9IGFycmF5KCk7CiAgICAgICAgICBpZiggJG9wdGlvbnNbJ2VuYWJsZV9wb3N0bWV0YV9tYXBwaW5nJ10gJiYgaXNzZXQoJG9wdGlvbnNbJ3Bvc3RtZXRhX21hcHBpbmcnXSkgJiYgY291bnQoJG9wdGlvbnNbJ3Bvc3RtZXRhX21hcHBpbmcnXSkgKSB7CiAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBmaWVsZCBkZWZpbml0aW9ucwogICAgICAgICAgICAgICRpb3JkZXIgPSAoaW50KSAkZGItPkdldE9uZSgnU0VMRUNUIE1BWChpdGVtX29yZGVyKSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2dibG9nX2ZpZWxkZGVmcycpOwogICAgICAgICAgICAgICRpb3JkZXIrKzsKICAgICAgICAgICAgICAkaWZfY2hrcXVlcnkgPSAnU0VMRUNUIGlkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9jZ2Jsb2dfZmllbGRkZWZzIFdIRVJFIG5hbWUgPSA/JzsKICAgICAgICAgICAgICAkaWZfaW5zcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9jZ2Jsb2dfZmllbGRkZWZzIChuYW1lLHR5cGUsY3JlYXRlX2RhdGUsbW9kaWZpZWRfZGF0ZSxpdGVtX29yZGVyLHB1YmxpYyxhdHRycykgVkFMVUVTICg/LD8sTk9XKCksTk9XKCksPywxLD8pJzsKCiAgICAgICAgICAgICAgcHJvZ3Jlc3NfcmVzZXQoKTsKICAgICAgICAgICAgICBwcm9ncmVzc190b3RhbCgkbm1hdGNoZXMpOwoKICAgICAgICAgICAgICBmb3JlYWNoKCAkb3B0aW9uc1sncG9zdG1ldGFfbWFwcGluZyddIGFzICR3cGtleSA9PiAkZmxkbmFtZSApIHsKICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgYSBmaWVsZCBieSB0aGlzIG5hbWUgZXhpc3RzCiAgICAgICAgICAgICAgICAgICR0bXAgPSAkZGItPkdldE9uZSgkaWZfY2hrcXVlcnksYXJyYXkoJGZsZG5hbWUpKTsKICAgICAgICAgICAgICAgICAgaWYgKCAkdG1wIDwgMSkgewogICAgICAgICAgICAgICAgICAgICAgLy8gaW5zZXJ0IHRoZSBmaWVsZAogICAgICAgICAgICAgICAgICAgICAgJGF0dHJzID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICRhdHRyc1snc2l6ZSddID0gNDA7CiAgICAgICAgICAgICAgICAgICAgICAkYXR0cnNbJ21heF9sZW5ndGgnXSA9IDI1NTsKICAgICAgICAgICAgICAgICAgICAgICRhdHRyc1snZmlsZV9leHRzJ10gPSAncGRmLHR4dCc7CiAgICAgICAgICAgICAgICAgICAgICAkYXR0cnNbJ2ltYWdlX2V4dHMnXSA9ICdwbmcsZ2lmLGJtcCxqcGcsanBlZyc7CiAgICAgICAgICAgICAgICAgICAgICAkYXR0cnNbJ3RleHRhcmVhX3d5c2l3eWcnXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAkZGItPkV4ZWN1dGUoJGlmX2luc3F1ZXJ5LGFycmF5KCRmbGRuYW1lLCd0ZXh0Ym94JywkaW9yZGVyKyssc2VyaWFsaXplKCRhdHRycykpKTsKICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cygkdGhpcy0+TGFuZygnY3JlYXRlZF9jZ2Jsb2dfZmllbGQnLCRmbGRuYW1lKSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBlcnJvcigkdGhpcy0+TGFuZygnY2dibG9nX2ZpZWxkX2V4aXN0cycsJGZsZG5hbWUpKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBwcm9ncmVzcygpOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgLy8gZ2V0IGFsbCBmaWVsZCBkZWZpbml0aW9ucwogICAgICAgICAgICAgICRjZ2Jsb2dfZmllbGRzID0gY2dibG9nX29wczo6Z2V0X2ZpZWxkZGVmcyhUUlVFKTsKCiAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgbWFwIG9mIHdwX21ldGEga2V5cyB0byBjZ2Jsb2cgZmllbGQgaWRzCiAgICAgICAgICAgICAgZm9yZWFjaCggJG9wdGlvbnNbJ3Bvc3RtZXRhX21hcHBpbmcnXSBhcyAkd3BrZXkgPT4gJGZsZG5hbWUgKSB7CiAgICAgICAgICAgICAgICAgIGlmKCBpc3NldCgkY2dibG9nX2ZpZWxkc1skZmxkbmFtZV0pICkgICRtZXRhX21hcFskd3BrZXldID0gJGNnYmxvZ19maWVsZHNbJGZsZG5hbWVdWydpZCddOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0gLy8gIGVuZCBjcmVhdGluZyBmaWVsZCBkZWZpbml0aW9ucwoKICAgICAgICAgIHByb2dyZXNzX3Jlc2V0KCk7CiAgICAgICAgICBwcm9ncmVzc190b3RhbCgkbm1hdGNoZXMpOwoKICAgICAgICAgIHdoaWxlKCAkb2Zmc2V0IDwgJG5tYXRjaGVzICkgewogICAgICAgICAgICAgIHNldF90aW1lX2xpbWl0KDEyMCk7CiAgICAgICAgICAgICAgJHdwX2RiciA9ICR3cGRiLT5TZWxlY3RMaW1pdCgkcXVlcnksJGJhdGNoc2l6ZSwkb2Zmc2V0LGFycmF5KCdwb3N0JywncHVibGlzaCcpKTsKCiAgICAgICAgICAgICAgLy8gZ2V0IHBvc3QgaWQgbGlzdAogICAgICAgICAgICAgICRwb3N0X2lkcyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgd2hpbGUoICEkd3BfZGJyLT5FT0YoKSApIHsKICAgICAgICAgICAgICAgICAgJHBvc3RfaWRzW10gPSAkd3BfZGJyLT5maWVsZHNbJ0lEJ107CiAgICAgICAgICAgICAgICAgICR3cF9kYnItPk1vdmVOZXh0KCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICR3cF9kYnItPk1vdmVGaXJzdCgpOwoKICAgICAgICAgICAgICAvLyByZWFkIHBvc3RtZXRhCiAgICAgICAgICAgICAgJGZyX3F1ZXJ5ID0gc3RyX3JlcGxhY2UoJ1NVQjEnLCcoJy5pbXBsb2RlKCcsJywkcG9zdF9pZHMpLicpJywkZmllbGRfcmVhZF9xdWVyeSk7CiAgICAgICAgICAgICAgJGZyX3F1ZXJ5ID0gc3RyX3JlcGxhY2UoJ1NVQjInLCcoJy5jZ2VfYXJyYXk6OmltcGxvZGVfcXVvdGVkKGFycmF5X2tleXMoJG1ldGFfbWFwKSkuJyknLCRmcl9xdWVyeSk7CiAgICAgICAgICAgICAgJHRtcF9tZXRhZGF0YSA9ICR3cGRiLT5HZXRBcnJheSgkZnJfcXVlcnkpOwogICAgICAgICAgICAgICRwb3N0X21ldGFkYXRhID0gYXJyYXkoKTsKICAgICAgICAgICAgICBpZiggaXNfYXJyYXkoJHRtcF9tZXRhZGF0YSkgJiYgY291bnQoJHRtcF9tZXRhZGF0YSkgKSB7CiAgICAgICAgICAgICAgICAgIGZvcmVhY2goICR0bXBfbWV0YWRhdGEgYXMgJHJvdyApIHsKICAgICAgICAgICAgICAgICAgICAgIGlmKCAhaXNzZXQoJHBvc3RfbWV0YWRhdGFbJHJvd1sncG9zdF9pZCddXSkgKSAkcG9zdF9tZXRhZGF0YVskcm93Wydwb3N0X2lkJ11dID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICRwb3N0X21ldGFkYXRhWyRyb3dbJ3Bvc3RfaWQnXV1bJHJvd1snbWV0YV9rZXknXV0gPSAkcm93WydtZXRhX3ZhbHVlJ107CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIC8vIGRvIHRoZSByZWFsIHdvcmsKICAgICAgICAgICAgICB3aGlsZSggISR3cF9kYnItPkVPRigpICkgewogICAgICAgICAgICAgICAgICAkcmVjID0gJHdwX2Rici0+ZmllbGRzOwoKICAgICAgICAgICAgICAgICAgaWYoICRvcHRpb25zWydpbXBvcnRfaW1hZ2VzJ10gJiYgY291bnQoJGltYWdlX3BhdGhzKSApIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBpbWFnZXMKICAgICAgICAgICAgICAgICAgICAgICRpbWFnZXMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgaWYocHJlZ19tYXRjaF9hbGwoJy9zcmM9KFwnfCIpKC4qPykoXCd8IikvJywkcmVjWydwb3N0X2NvbnRlbnQnXSwkbWF0Y2hlcykgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGlzc2V0KCRtYXRjaGVzWzJdKSAmJiBjb3VudCgkbWF0Y2hlc1syXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICRtYXRjaGVzWzJdIGFzICRtYXRjaCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbmQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJGltYWdlX3BhdGhzIGFzICRvbmUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHN0YXJ0c3dpdGgoJG1hdGNoLCRvbmUpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm5kID0gJG9uZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRmbmQgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgaW1hZ2UgcGF0aCBmb3Igc3JjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNob3J0ID0gc3Vic3RyKCRtYXRjaCxzdHJsZW4oJGZuZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWwgPSBsdHJpbSgkc2hvcnQsJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm4gPSBiYXNlbmFtZSgkcmVsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG4gPSBkaXJuYW1lKCRyZWwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZXN0ID0gJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uJG9wdGlvbnNbJ2ltYWdlX2Rlc3QnXS4kcmVsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZXN0X3VybCA9ICRjb25maWdbJ3VwbG9hZHNfdXJsJ10uJG9wdGlvbnNbJ2ltYWdlX2Rlc3QnXS4kcmVsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbWFnZXNbJG1hdGNoXSA9IGFycmF5KCdmaWxlJz0+JGRlc3QsJ3VybCc9PiRkZXN0X3VybCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgaWYoIGNvdW50KCRpbWFnZXMpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICRpbWFnZXMgYXMgJHNyY191cmwgPT4gJGRhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfcmVhZGFibGUoJGRhdGFbJ2ZpbGUnXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZWRhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJHNyY191cmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRmaWxlZGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlyID0gZGlybmFtZSgkZGF0YVsnZmlsZSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzID0gQG1rZGlyKCRkaXIsMDc3NyxUUnVFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMoImNvcGllZCAkc3JjX3VybCB0byB7JGRhdGFbJ2ZpbGUnXX0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkZGF0YVsnZmlsZSddLCRmaWxlZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltYWdlX2NvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1hZ2VfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIiRzcmNfdXJsIGRvZXMgbm90IGV4aXN0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gaXNfcmVhZGFibGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlY1sncG9zdF9jb250ZW50J10gPSBzdHJfcmVwbGFjZSgkc3JjX3VybCwkZGF0YVsndXJsJ10sJHJlY1sncG9zdF9jb250ZW50J10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IC8vIGlmIGltcG9ydCBpbWFnZXMKCiAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIHJlY29yZC4KICAgICAgICAgICAgICAgICAgJGNnYmxvZ19yZWMgPSAkZGZsdF9jZ2Jsb2dfcmVjOwogICAgICAgICAgICAgICAgICAkY2dibG9nX3JlY1snY2dibG9nX3RpdGxlJ10gPSAkcmVjWydwb3N0X3RpdGxlJ107CiAgICAgICAgICAgICAgICAgICRjZ2Jsb2dfcmVjWydjZ2Jsb2dfZGF0ZSddID0gJHJlY1sncG9zdF9kYXRlJ107CiAgICAgICAgICAgICAgICAgICRjZ2Jsb2dfcmVjWydjZ2Jsb2dfZGF0YSddID0gbmwycCgkcmVjWydwb3N0X2NvbnRlbnQnXSk7CiAgICAgICAgICAgICAgICAgICRjZ2Jsb2dfcmVjWydzdW1tYXJ5J10gPSAkcmVjWydwb3N0X2V4Y2VycHQnXTsKICAgICAgICAgICAgICAgICAgJGNnYmxvZ19yZWNbJ3N0YXJ0X3RpbWUnXSA9ICRyZWNbJ3Bvc3RfZGF0ZSddOwogICAgICAgICAgICAgICAgICAkY2dibG9nX3JlY1snbW9kaWZpZWRfZGF0ZSddID0gJHJlY1sncG9zdF9tb2RpZmllZCddOwogICAgICAgICAgICAgICAgICAkY2dibG9nX3JlY1snY3JlYXRlX2RhdGUnXSA9ICRyZWNbJ3Bvc3RfbW9kaWZpZWQnXTsKICAgICAgICAgICAgICAgICAgJGNnYmxvZ19yZWNbJ2F1dGhvciddID0gJHdwX3VzZXJuYW1lc1skcmVjWydwb3N0X2F1dGhvciddXTsKCiAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIFVSTCA/PwogICAgICAgICAgICAgICAgICAkY2dibG9nX3JlY1sndXJsJ10gPSBjZ2Jsb2dfdXRpbHM6OmdldF9uZXdfdXJsKCRjZ2Jsb2dfcmVjKTsKCiAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBzZXF1ZW5jZQogICAgICAgICAgICAgICAgICAkY2dibG9nX3JlY1snY2dibG9nX2lkJ10gPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2NnYmxvZ19zZXEnKTsKCiAgICAgICAgICAgICAgICAgIC8vIGluc2VydCB0aGUgdGhpbmcKICAgICAgICAgICAgICAgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkaXF1ZXJ5LCRjZ2Jsb2dfcmVjKTsKICAgICAgICAgICAgICAgICAgaWYoICEkZGJyICkgewogICAgICAgICAgICAgICAgICAgICAgJGFydGljbGVfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAkYXJ0aWNsZV9jb3VudCsrOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGluc2VydCBpZC4KICAgICAgICAgICAgICAgICAgaWYoICRvcHRpb25zWydpbXBvcnRfY2F0ZWdvcmllcyddICkgewogICAgICAgICAgICAgICAgICAgICAgJGNnX2FydGljbGVfaWQgPSAkZGItPkluc2VydF9JRCgpOwoKICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBjYXRlZ29yaWVzIGZvciB0aGlzIGFydGljbGUuCiAgICAgICAgICAgICAgICAgICAgICAkY3F1ZXJ5ID0gJ1NFTEVDVCBESVNUSU5DVCB0ZXJtX3RheG9ub215X2lkIEZST00gJy53cDJjZ2Jsb2dfdXRpbHM6OndwX2RiX3ByZWZpeCgpLid0ZXJtX3JlbGF0aW9uc2hpcHMgV0hFUkUgdGVybV90YXhvbm9teV9pZCBJTiAoJy5pbXBsb2RlKCcsJywkd3BfdGVybV90YXhvbm9teSkuJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIG9iamVjdF9pZCA9ID8nOwogICAgICAgICAgICAgICAgICAgICAgJGFydGljbGVfdGF4b25vbXlfaWRzID0gJHdwZGItPkdldENvbCgkY3F1ZXJ5LGFycmF5KCRyZWNbJ0lEJ10pKTsKCiAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNlcnQgY2F0ZWdvcmllKHMpCiAgICAgICAgICAgICAgICAgICAgICBpZiggaXNfYXJyYXkoJGFydGljbGVfdGF4b25vbXlfaWRzKSAmJiBjb3VudCgkYXJ0aWNsZV90YXhvbm9teV9pZHMpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0ZXJtX2lkIGlzIG91ciBrZXkgaW50byB0aGUgY2dibG9nX2NhdHMgdHJlZSwgYnV0IHdvcmRwcmVzcyBpbiBpdHMgaW5maW5pdGUgd2lzZG9tCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFzIGEgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhlcmUuICAgc28gd2UgbmVlZCB0byBnZXQgdGhlIHRlcm1faWQgZ2l2ZW4gdGhlIHRheG9ub215X2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGdldCB0aGUgY2dibG9nIGNhdGVnb3J5IGlkLCBnaXZlbiB0aGUgd29yZHByZXNzIHRlcm1faWQKICAgICAgICAgICAgICAgICAgICAgICAgICAkY2lxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2NnYmxvZ19ibG9nX2NhdGVnb3JpZXMgKGJsb2dfaWQsY2F0ZWdvcnlfaWQpIFZBTFVFUyAoPyw/KSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCggJGFydGljbGVfdGF4b25vbXlfaWRzIGFzICRhcnRpY2xlX3RheG9ub215X2lkICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd3BfY2F0X25vZGUgPSAkd3BfY2F0cy0+ZmluZF9ieV90YWcoJ3Rlcm1fdGF4b25vbXlfaWQnLCRhcnRpY2xlX3RheG9ub215X2lkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGlzX29iamVjdCgkd3BfY2F0X25vZGUpICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRlcm1faWQgPSAkd3BfY2F0X25vZGUtPmdldF90YWcoJ3Rlcm1faWQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2Rpc3BsYXkoJ2dvdCB0ZXJtIGlkICcuJHRlcm1faWQuJyBmb3IgJy4kYXJ0aWNsZV90YXhvbm9teV9pZCk7IGZsdXNoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggJHRlcm1faWQgPiAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjZ2Jsb2dfY2F0X25vZGUgPSAkY2dibG9nX2NhdHMtPmZpbmRfYnlfdGFnKCd3cF90ZXJtX2lkJywkdGVybV9pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGlzX29iamVjdCgkY2dibG9nX2NhdF9ub2RlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNnX2NhdF9pZCA9ICRjZ2Jsb2dfY2F0X25vZGUtPmdldF90YWcoJ2lkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2Rpc3BsYXkoJ2dvdCBjYXRlZ29yeSBpZCAnLiRjZ19jYXRfaWQuJyBmb3Igd3AgdGVybSAnLiR0ZXJtX2lkKTsgZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoICRjZ19jYXRfaWQgPiAwICkgJGRiLT5FeGVjdXRlKCRjaXF1ZXJ5LGFycmF5KCRjZ19hcnRpY2xlX2lkLCRjZ19jYXRfaWQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcignTm8gY2F0ZWdvcmllcyBmb3IgYXJ0aWNsZSAnLiRyZWNbJ0lEJ10pOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9IC8vIGltcG9ydCBjYXRlZ29yaWVzCgogICAgICAgICAgICAgICAgICAvLyBpbnNlcnQgbWV0YWRhdGEKICAgICAgICAgICAgICAgICAgaWYoICRvcHRpb25zWydlbmFibGVfcG9zdG1ldGFfbWFwcGluZyddICYmIGNvdW50KCRtZXRhX21hcCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiggaXNzZXQoJHBvc3RfbWV0YWRhdGFbJHJlY1snSUQnXV0pICkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICRwb3N0X21ldGFkYXRhWyRyZWNbJ0lEJ11dIGFzICR3cGtleSA9PiAkdmFsICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggaXNzZXQoJG1ldGFfbWFwWyR3cGtleV0pICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkbWV0YV9pbnNxdWVyeSxhcnJheSgkY2dfYXJ0aWNsZV9pZCwkbWV0YV9tYXBbJHdwa2V5XSwkdmFsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggISRkYnIgKSBlcnJvcigkZGItPnNxbC4nIC0tICcuJGRiLT5FcnJvck1zZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCdObyBzdWl0YWJsZSBtZXRhIHRhZ3MgZm9yIHJlY29yZCAnLiRyZWNbJ0lEJ10pOwogICAgICAgICAgICAgICAgICAgICAgfSAvLyBpbXBvcnQgbWVkYWRhdGEKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgLy8gb24gdG8gdGhlIG5leHQgb25lLgogICAgICAgICAgICAgICAgICBwcm9ncmVzcygpOwogICAgICAgICAgICAgICAgICAkd3BfZGJyLT5Nb3ZlTmV4dCgpOwogICAgICAgICAgICAgIH0gLy8gb25lIGJhdGNoCgogICAgICAgICAgICAgICRvZmZzZXQgKz0gJGJhdGNoc2l6ZTsKICAgICAgICAgIH0gLy8gZG9uZSBiYXRjaGVzCgogICAgICAgICAgc3RhdGlzdGljKCR0aGlzLT5MYW5nKCd1c2VyX2NvdW50JyksJHVzZXJfY291bnQpOwogICAgICAgICAgc3RhdGlzdGljKCR0aGlzLT5MYW5nKCd1c2VyX2Vycm9ycycpLCR1c2VyX2Vycm9ycyk7CiAgICAgICAgICBzdGF0aXN0aWMoJHRoaXMtPkxhbmcoJ2FydGljbGVfY291bnQnKSwkYXJ0aWNsZV9jb3VudCk7CiAgICAgICAgICBzdGF0aXN0aWMoJHRoaXMtPkxhbmcoJ2FydGljbGVfZXJyb3JzJyksJGFydGljbGVfZXJyb3JzKTsKICAgICAgICAgIHN0YXRpc3RpYygkdGhpcy0+TGFuZygnaW1hZ2VfY291bnQnKSwkaW1hZ2VfY291bnQpOwogICAgICAgICAgc3RhdGlzdGljKCR0aGlzLT5MYW5nKCdpbWFnZV9lcnJvcnMnKSwkaW1hZ2VfZXJyb3JzKTsKICAgICAgfQogIH0KfQpjYXRjaCggRXhjZXB0aW9uICRlICkgewogICR0aGlzLT5TZXRFcnJvcigkZS0+R2V0TWVzc2FnZSgpKTsKICAkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCk7Cn0KCmV4aXQ7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_import_main.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHX1dQMkNHQmxvZyAoYykgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgc2hvcnRlbmluZyBVUkxTLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKaWYoICEkdGhpcy0+VmlzaWJsZVRvQWRtaW5Vc2VyKCkgKSByZXR1cm47Cgokc21hcnR5LT5hc3NpZ24oJ2FkbWluX2ltcG9ydF91cmwnLCR0aGlzLT5jcmVhdGVfdXJsKCRpZCwnYWRtaW5faW1wb3J0JywkcmV0dXJuaWQpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9pbXBvcnRfbWFpbi50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHX1dQMkNHQmxvZyAoYykgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgc2hvcnRlbmluZyBVUkxTLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKaWYoICEkdGhpcy0+VmlzaWJsZVRvQWRtaW5Vc2VyKCkgKSByZXR1cm47CgovLyBjb25maWcgZGVmYXVsdHMKJHdwY29uZmlnID0gYXJyYXkoKTsKJHdwY29uZmlnWydyb290X3BhdGgnXSA9ICcnOwokd3Bjb25maWdbJ3Jvb3RfdXJsJ10gPSAnJzsKJHdwY29uZmlnWydkYl9ob3N0J10gPSAnbG9jYWxob3N0JzsKJHdwY29uZmlnWydkYl91c2VyJ10gPSAnJzsKJHdwY29uZmlnWydkYl9wYXNzJ10gPSAnJzsKJHdwY29uZmlnWydkYl9uYW1lJ10gPSAnJzsKJHdwY29uZmlnWydkYl9wcmVmaXgnXSA9ICd3cF8nOwokdG1wID0gY21zX3VzZXJwcmVmczo6Z2V0KCd3cDJjZ2Jsb2dfd3Bjb25maWcnKTsKaWYoICR0bXAgKSAkd3Bjb25maWcgPSB1bnNlcmlhbGl6ZSgkdG1wKTsKCiRvcHRpb25zWydjbGVhcl9jZ2Jsb2dfcG9zdHMnXSA9IDE7CiRvcHRpb25zWydjbGVhcl9jZ2Jsb2dfZmllbGRkZWZzJ10gPSAwOwokb3B0aW9uc1snY2xlYXJfY2dibG9nX2NhdGVnb3JpZXMnXSA9IDA7CiRvcHRpb25zWydpbXBvcnRfY2F0ZWdvcmllcyddID0gMTsKJG9wdGlvbnNbJ2ltcG9ydF9wb3N0cyddID0gMTsKJG9wdGlvbnNbJ2ltcG9ydF9pbWFnZXMnXSA9IDE7CiRvcHRpb25zWydpbWFnZV9wYXRocyddID0gJyc7CiRvcHRpb25zWydpbWFnZV9kZXN0J10gPSAnJzsKJG9wdGlvbnNbJ2ltcG9ydF91c2VycyddID0gMTsKJG9wdGlvbnNbJ3VzZXJfcHcnXSA9ICdjaGFuZ2VtZSc7CiRvcHRpb25zWydlbmFibGVfcG9zdG1ldGFfbWFwcGluZyddID0gRkFMU0U7CiRvcHRpb25zWydwb3N0bWV0YV9tYXBwaW5nJ10gPSBhcnJheSgpOwokdG1wID0gY21zX3VzZXJwcmVmczo6Z2V0KCd3cDJjZ2Jsb2dfb3B0aW9ucycpOwppZiggJHRtcCApICRvcHRpb25zID0gdW5zZXJpYWxpemUoJHRtcCk7Cgp0cnkgewogIGlmKCBpc3NldCgkcGFyYW1zWyd3cF9jaGVjayddKSApIHsKICAgICR3cGNvbmZpZ1sncm9vdF9wYXRoJ10gPSB0cmltKGNnZV91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsJ3Jvb3RfcGF0aCcpKTsKICAgIHdwMmNnYmxvZ191dGlsczo6Y2hlY2tfd3BfZGlyKCR3cGNvbmZpZ1sncm9vdF9wYXRoJ10pOwogICAgZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ193cGZvdW5kJykpOwogIH0KCiAgaWYoIGlzc2V0KCRwYXJhbXNbJ3dwX3Rlc3QnXSkgKSB7CiAgICAkd3Bjb25maWdbJ3Jvb3RfcGF0aCddID0gdHJpbShjZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdyb290X3BhdGgnKSk7CiAgICAkd3Bjb25maWdbJ3Jvb3RfdXJsJ10gPSB0cmltKGNnZV91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsJ3Jvb3RfdXJsJykpOwogICAgJHdwY29uZmlnWydkYl9ob3N0J10gPSB0cmltKGNnZV91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsJ2RiX2hvc3QnKSk7CiAgICAkd3Bjb25maWdbJ2RiX3VzZXInXSA9IHRyaW0oY2dlX3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywnZGJfdXNlcicpKTsKICAgICR3cGNvbmZpZ1snZGJfcGFzcyddID0gdHJpbShjZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdkYl9wYXNzJykpOwogICAgJHdwY29uZmlnWydkYl9uYW1lJ10gPSB0cmltKGNnZV91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsJ2RiX25hbWUnKSk7CiAgICAkd3Bjb25maWdbJ2RiX3ByZWZpeCddID0gdHJpbShjZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdkYl9wcmVmaXgnKSk7CiAgICAkd3BkYiA9IHdwMmNnYmxvZ191dGlsczo6Z2V0X3dwX2RiKCR3cGNvbmZpZyk7CiAgICB3cDJjZ2Jsb2dfdXRpbHM6OmNoZWNrX3dwX2RiKCR3cGRiKTsKCiAgICAkcXVlcnkgPSAnU0VMRUNUIERJU1RJTkNUIG1ldGFfa2V5IEZST00gJy4kd3Bjb25maWdbJ2RiX3ByZWZpeCddLidwb3N0bWV0YSc7CiAgICAkbWV0YWtleXMgPSAkd3BkYi0+R2V0Q29sKCRxdWVyeSk7CiAgICAkb3V0ID0gYXJyYXkoJ25vbmUnPT4kdGhpcy0+TGFuZygnbm9uZScpKTsKICAgIGZvcmVhY2goICRtZXRha2V5cyBhcyAkb25lICkgewogICAgICAgICRvdXRbJG9uZV0gPSAkb25lOwogICAgfQogICAgJHNtYXJ0eS0+YXNzaWduKCd3cF9tZXRha2V5cycsJG91dCk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2RiX3Rlc3RlZCcsMSk7CiAgfQoKICBpZiggaXNzZXQoJHBhcmFtc1snd3BfaW1wb3J0J10pICkgewogICAgJHdwY29uZmlnWydyb290X3BhdGgnXSA9IHRyaW0oY2dlX3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywncm9vdF9wYXRoJykpOwogICAgJHdwY29uZmlnWydyb290X3VybCddID0gdHJpbShjZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdyb290X3VybCcpKTsKICAgICR3cGNvbmZpZ1snZGJfaG9zdCddID0gdHJpbShjZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdkYl9ob3N0JykpOwogICAgJHdwY29uZmlnWydkYl91c2VyJ10gPSB0cmltKGNnZV91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsJ2RiX3VzZXInKSk7CiAgICAkd3Bjb25maWdbJ2RiX3Bhc3MnXSA9IHRyaW0oY2dlX3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywnZGJfcGFzcycpKTsKICAgICR3cGNvbmZpZ1snZGJfbmFtZSddID0gdHJpbShjZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdkYl9uYW1lJykpOwogICAgJHdwY29uZmlnWydkYl9wcmVmaXgnXSA9IHRyaW0oY2dlX3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywnZGJfcHJlZml4JykpOwogICAgJHdwZGIgPSB3cDJjZ2Jsb2dfdXRpbHM6OmdldF93cF9kYigkd3Bjb25maWcpOwogICAgd3AyY2dibG9nX3V0aWxzOjpjaGVja193cF9kYigkd3BkYik7CgogICAgLy8gZ2V0IG9wdGlvbnMKICAgICRvcHRpb25zID0gYXJyYXkoKTsKICAgICRvcHRpb25zWydjbGVhcl9jZ2Jsb2dfcG9zdHMnXSA9IChpbnQpY2dlX3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywnY2xlYXJfY2dibG9nX3Bvc3RzJyk7CiAgICAkb3B0aW9uc1snY2xlYXJfY2dibG9nX2ZpZWxkZGVmcyddID0gKGludCljZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdjbGVhcl9jZ2Jsb2dfZmllbGRkZWZzJyk7CiAgICAkb3B0aW9uc1snY2xlYXJfY2dibG9nX2NhdGVnb3JpZXMnXSA9IChpbnQpY2dlX3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywnY2xlYXJfY2dibG9nX2NhdGVnb3JpZXMnKTsKICAgICRvcHRpb25zWydpbXBvcnRfY2F0ZWdvcmllcyddID0gKGludCljZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdpbXBvcnRfY2F0ZWdvcmllcycpOwogICAgJG9wdGlvbnNbJ2ltcG9ydF9wb3N0cyddID0gKGludCljZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdpbXBvcnRfcG9zdHMnKTsKICAgICRvcHRpb25zWydpbXBvcnRfaW1hZ2VzJ10gPSAoaW50KWNnZV91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsJ2ltcG9ydF9pbWFnZXMnKTsKICAgICRvcHRpb25zWydpbXBvcnRfdXNlcnMnXSA9IChpbnQpY2dlX3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywnaW1wb3J0X3VzZXJzJyk7CiAgICAkb3B0aW9uc1sndXNlcl9wdyddID0gdHJpbShjZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCd1c2VyX3B3JykpOwogICAgJG9wdGlvbnNbJ2ltYWdlX3BhdGhzJ10gPSB0cmltKGNnZV91dGlsczo6Z2V0X3BhcmFtKCRwYXJhbXMsJ2ltYWdlX3BhdGhzJykpOwogICAgJG9wdGlvbnNbJ2ltYWdlX2Rlc3QnXSA9IHRyaW0oY2dlX3V0aWxzOjpnZXRfcGFyYW0oJHBhcmFtcywnaW1hZ2VfZGVzdCcpKTsKICAgICRvcHRpb25zWydlbmFibGVfcG9zdG1ldGFfbWFwcGluZyddID0gKGludCljZ2VfdXRpbHM6OmdldF9wYXJhbSgkcGFyYW1zLCdlbmFibGVfcG9zdG1ldGFfbWFwcGluZycpOwoKICAgIC8vIGNsZWFuIHVwIHRoZSBwb3N0bWV0YSBtYXBwaW5ncwogICAgaWYoICRvcHRpb25zWydlbmFibGVfcG9zdG1ldGFfbWFwcGluZyddICYmIGlzc2V0KCRwYXJhbXNbJ3Bvc3RtZXRhJ10pICkgewogICAgICAgIGlmKCBjb3VudCgkcGFyYW1zWydwb3N0bWV0YSddWyd3cGtleSddKSAhPSBjb3VudCgkcGFyYW1zWydwb3N0bWV0YSddWydmbGRuYW1lJ10pICkgdGhyb3cgbmV3IEV4Y2VwdGlvbigkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9wb3N0bWV0YScpKTsKICAgICAgICAkZGF0YSA9IGFycmF5KCk7CiAgICAgICAgaWYoIDEgKSB7CiAgICAgICAgICAgICR0bXAxID0gJHBhcmFtc1sncG9zdG1ldGEnXVsnd3BrZXknXTsKICAgICAgICAgICAgJHRtcDIgPSAkcGFyYW1zWydwb3N0bWV0YSddWydmbGRuYW1lJ107CiAgICAgICAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0bXAxKTsgJGkrKyApIHsKICAgICAgICAgICAgICAgICRkYXRhWyR0bXAxWyRpXV0gPSAkdG1wMlskaV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJG9wdGlvbnNbJ3Bvc3RtZXRhX21hcHBpbmcnXSA9ICRkYXRhOwoKICAgICAgICAkY2xlYW5fYXJyYXkgPSBmdW5jdGlvbigkZGF0YSwkbmFtZSl7CiAgICAgICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NHX1dQMkNHQmxvZycpOwogICAgICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCggJGRhdGEgYXMgJG9uZSApIHsKICAgICAgICAgICAgICAgICRvbmUgPSB0cmltKCRvbmUpOwogICAgICAgICAgICAgICAgaWYoICEkb25lIHx8ICRvbmUgPT0gLTEgKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCRtb2QtPkxhbmcoJ2Vycm9yX2ludmFsaWR2YWx1ZScsJG5hbWUsJG9uZSkpOwogICAgICAgICAgICAgICAgaWYoIGluX2FycmF5KCRvbmUsJHRtcCkgKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCRtb2QtPkxhbmcoJ2Vycm9yX2R1cGxpY2F0ZScsJG5hbWUpKTsKICAgICAgICAgICAgICAgICR0bXBbXSA9ICRvbmU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICR0bXA7CiAgICAgICAgfTsKCiAgICAgICAgJHdwa2V5cyAgPSAkY2xlYW5fYXJyYXkoYXJyYXlfa2V5cygkZGF0YSksJHRoaXMtPkxhbmcoJ2NvbF93cGtleScpKTsKICAgICAgICAkY2diZmxkcyA9ICRjbGVhbl9hcnJheShhcnJheV92YWx1ZXMoJGRhdGEpLCR0aGlzLT5MYW5nKCdjb2xfZmxkbmFtZScpKTsKICAgIH0KCiAgICAvLyBzYXZlIG9wdGlvbnMKICAgIGNtc191c2VycHJlZnM6OnNldCgnd3AyY2dibG9nX3dwY29uZmlnJyxzZXJpYWxpemUoJHdwY29uZmlnKSk7CiAgICBjbXNfdXNlcnByZWZzOjpzZXQoJ3dwMmNnYmxvZ19vcHRpb25zJyxzZXJpYWxpemUoJG9wdGlvbnMpKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2FkbWluX2ltcG9ydF9tYWluJywkcmV0dXJuaWQpOwogIH0KfQpjYXRjaCggRXhjZXB0aW9uICRlICkgewogIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJGUtPkdldG1lc3NhZ2UoKSk7Cn0KCiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q0dDcmVhdGVGb3JtU3RhcnQoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwokc21hcnR5LT5hc3NpZ24oJ3dwJywkd3Bjb25maWcpOwokc21hcnR5LT5hc3NpZ24oJ29wdHMnLCRvcHRpb25zKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdkZWZhdWx0YWRtaW4udHBsJyk7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/CG_WP2CGBlog.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHX1dQMkNHQmxvZyAoYykgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgc2hvcnRlbmluZyBVUkxTLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmNsYXNzIENHX1dQMkNHQmxvZyBleHRlbmRzIENHRXh0ZW5zaW9ucwp7CiAgcHVibGljIGZ1bmN0aW9uIEdldE5hbWUoKSB7IHJldHVybiBnZXRfY2xhc3MoJHRoaXMpOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsKICAgIHJldHVybiBhcnJheSgnQ0dFeHRlbnNpb25zJz0+JzEuMzguNicsJ0Zyb250RW5kVXNlcnMnPT4nMS4yMi40JywnQ0dCbG9nJz0+JzEuMTInKTsKICB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgeyByZXR1cm4gJzEuMC42JzsgfQogIHB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcxLjExLjknOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKSB7IHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL2RvYy9oZWxwLmluYycpOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdjYWxndXkxMDAwJzsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsgcmV0dXJuICdjYWxndXkxMDAwQGdtYWlsLmNvbSc7IH0KICBwdWJsaWMgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgeyByZXR1cm4gQGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy9kb2MvY2hhbmdlbG9nLmh0bWwuaW5jJyk7IH0KICBwdWJsaWMgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7IHJldHVybiBGQUxTRTsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7IH0KICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiBUUlVFOyB9CiAgcHVibGljIGZ1bmN0aW9uIEFsbG93QXV0b0luc3RhbGwoKSB7IHJldHVybiBGQUxTRTsgfQogIHB1YmxpYyBmdW5jdGlvbiBBbGxvd0F1dG9VcGdyYWRlKCkgeyByZXR1cm4gRkFMU0U7IH0KICBwdWJsaWMgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgewogICAgJHVpZCA9IGdldF91c2VyaWQoKTsKICAgIHJldHVybiBVc2VyT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCktPlVzZXJJbkdyb3VwKCR1aWQsMSk7CiAgfQogIHB1YmxpYyBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsgfQogIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7IH0KfQoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/doc/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyBjb3B5aW5nIGJsb2cgcG9zdHMgZnJvbSBhIFdvcmRQcmVzcyZ0cmFkZTsgaW5zdGFsbGF0aW9uIG9uIHRoZSBzYW1lIHNlcnZlciAob3Igd2l0aCBwcm9wZXIgZmlsZXN5c3RlbSBhbmQgZGF0YWJhc2UgYWNjZXNzKSBpbnRvIENHQmxvZyB0byBhaWRlIGluIHRoZSB0cmFuc2l0aW9uIGZyb20gV29yZFByZXNzIHRvIENNUyBNYWRlIFNpbXBsZS48L3A+CjxoMz5GZWF0dXJlczo8L2gzPgo8dWw+CiAgPGxpPkNyZWF0ZSB1c2VycyBpbiB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUgZm9yIGFsbCBXb3JkUHJlc3MgdXNlcnMuPC9saT4KICA8bGk+Q29weSBwdWJsaXNoZWQgYmxvZyBwb3N0cy48L2xpPgogIDxsaT5DcmVhdGVzIGEgQ0dCbG9nIGZyaWVuZGx5IFVSTCBmb3IgZWFjaCBwb3N0LjwvbGk+CiAgPGxpPlRyYW5zbGF0ZSBhbmQgY29weSBpbWFnZXM8L2xpPgogIDxsaT5Db3BpZXMgV29yZFByZXNzIGNhdGVnb3JpZXMgaW50byBDR0Jsb2c8L2xpPgo8L3VsPgoKPGgzPkhvdyBkbyBJIHVzZSBpdDo8L2gzPgogIDxkaXYgY2xhc3M9Indhcm5pbmciPgogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIHBlcmZvcm0gbXVsdGlwbGUgdGVzdHMgb24gdmFyaW91cyBjb25maWd1cmF0aW9uIGl0ZW1zIChwYXJ0aWN1bGFybHkgd2hlbiBpbXBvcnRpbmcgbWV0YSB0YWdzLCBvciBpbWFnZXMpLiAgWW91IHNob3VsZCBwZXJmb3JtIHRlc3RpbmcgZWl0aGVyIGluIGEgZGV2ZWxvcG1lbnQgZW52aXJvbm1uZXQgb3Igd2l0aCBhIGJsYW5rIGluc3RhbGwgb2YgQ0dCbG9nIHNvIHRoYXQgdGhlIGRhdGEgY2FuIGJlIGVhc2lseSBlcmFzZWQgYmV0d2VlbiB0ZXN0cy48L3A+CiAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRvIHVzZSB0aGlzIG1vZHVsZSB5b3UgbmVlZCBhY2Nlc3MgdG8gdGhlIHdwLWNvbmZpZy5waHAgZmlsZSBvZiB5b3VyIFdvcmRQcmVzcyBpbnN0YWxsYXRpb24sIGFuZCB0byBrbm93IHRoZSBjb21wbGV0ZSBmaWxlc3lzdGVtIHBhdGggKGFic29sdXRlIHBhdGgpIHRvIHRoZSB3b3JkcHJlc3MgaW5zdGFsbGF0aW9uLjwvcD4KICAgIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBpcyBub3QgYSBjb21wbGV0ZSBtaWdyYXRpb24gZnJvbSBXb3JkUHJlc3MgdG8gQ01TTVMuICBBbmQgdGhlcmUgaXMgbm8gZGlyZWN0IG9uZS10by1vbmUgY29udmVyc2lvbiBmb3IgVVJMUy4gIFRoaXMgcHJvY2VzcyBtaWdyYXRlcyB0aGUgZGF0YS4gWW91IG1heSBuZWVkIHRvIGJlIGludmVudGl2ZSB3aXRoIFVSTCByZXdyaXRlIHJ1bGVzIHRvIHJldGFpbiBTRU8gcmFua2luZy48L3A+CiAgPC9kaXY+CiAgPG9sPgogICAgPGxpPk5hdmlnYXRlIHRvIHRoZSBDR19XUDJDR0Jsb2cgYWRtaW4gcGFuZWwgaW5zaWRlIHRoZSBDTVNNUyBhZG1pbiBjb25zb2xlLjwvbGk+CiAgICA8bGk+Q29tcGxldGUgdGhlIGZvcm0sIHNwZWNpZnlpbmcgdGhlIGRldGFpbHMgb2YgdGhlIHdvcmRwcmVzcyBpbnN0YWxsYXRpb24gYW5kIHdoYXQgdG8gaW1wb3J0OgogICAgPC9saT4KICAgIDxsaT5QcmVzcyBTdWJtaXQ8L2xpPgogICAgPGxpPlJldmlldyB0aGUgYmxvZyBhcnRpY2xlcyBpbiB0aGUgZnJvbnRlbmQgb2YgdGhlIHdlYnNpdGUgYW5kIGluIHRoZSBDR0Jsb2cgYWRtaW4gcGFuZWwuPC9saT4KICAgIDxsaT5EbyBhIHNlYXJjaCByZS1pbmRleDwvbGk+CiAgICA8bGk+SWYgZXZlcnl0aGluZyBpcyBwcm9wZXIgeW91IGNhbiB1bmluc3RhbGwgdGhpcyBtb2R1bGUuPC9saT4KICA8L29sPgoKPGgzPkZ1dHVyZSBEZXZlbG9wbWVudDo8L2gzPgogIDxwPlRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGF3YWl0aW5nIHNwb25zb3JzaGlwOjwvcD4KICA8dWw+CiAgICA8bGk+SW1wb3J0IENvbW1lbnRzIGZyb20gV29yZFByZXNzIGludG8gQ0dGZWVkYmFjazwvbGk+CiAgICA8bGk+Q29udmVydCB3b3JkcHJlc3Mgc2x1Z3MgKHRoYXQgZm9ybSB0aGUgcGVybWFsaW5rKSBpbnRvIENHQmxvZyBVUkxzPC9saT4KICAgIDxsaT5DdXN0b20gZmllbGQgaW1wb3J0YXRpb248L2xpPgogICAgPGxpPkdyb3VwcyBhbmQgRkVVIE1hcHBpbmcgZnJvbSBXb3JkUHJlc3MgaW50byBGRVU8L2xpPgogIDwvdWw+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eVwncwptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0iaHR0cDovL2NhbGd1eTEwMDAuY29tIj5jYWxndXkxMDAwLmNvbTwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+CjwvdWw+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTQsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4K]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0EKJGxhbmdbJ2FydGljbGVfY291bnQnXSA9ICdBcnRpY2xlcyBpbXBvcnRlZCc7CgojQgoKCiNDCiRsYW5nWydjaGVjayddID0gJ0NoZWNrJzsKJGxhbmdbJ2NnYmxvZ19maWVsZF9leGlzdHMnXSA9ICdBIENHQmxvZyBjdXN0b20gZmllbGQgd2l0aCB0aGUgbmFtZSAlcyBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydjbGVhcl9jZ2Jsb2dfY2F0ZWdvcmllcyddID0gJ0RlbGV0ZSBhbGwgQ0dCbG9nIGNhdGVnb3JpZXMnOwokbGFuZ1snY2xlYXJfY2dibG9nX2ZpZWxkZGVmcyddID0gJ0RlbGV0ZSBhbGwgQ0dCbG9nIGN1c3RvbSBmaWVsZHMnOwokbGFuZ1snY2xlYXJfY2dibG9nX3Bvc3RzJ10gPSAnQ2xlYXIgYWxsIENHQmxvZyBwb3N0cyc7CiRsYW5nWydjb2xfd3BrZXknXSA9ICdXUCBNZXRhIEtleSc7CiRsYW5nWydjb2xfZmxkbmFtZSddID0gJ0NHQmxvZyBGaWVsZCBOYW1lJzsKJGxhbmdbJ2NyZWF0ZWRfY2dibG9nX2ZpZWxkJ10gPSAnQ3JlYXRlZCBDR0Jsb2cgY3VzdG9tIGZpZWxkOiAlcyc7CgojRAokbGFuZ1snZGJfaG9zdCddID0gJ0RhdGFiYXNlIEhvc3RuYW1lJzsKJGxhbmdbJ2RiX25hbWUnXSA9ICdEYXRhYmFzZSBOYW1lJzsKJGxhbmdbJ2RiX3VzZXInXSA9ICdEYXRhYmFzZSBVc2VybmFtZSc7CiRsYW5nWydkYl9wYXNzJ10gPSAnRGF0YWJhc2UgUGFzc293cmQnOwokbGFuZ1snZGJfcHJlZml4J10gPSAnRGF0YWJhc2UgUHJlZml4JzsKCiNFCiRsYW5nWydlbmFibGVfcG9zdG1ldGFfbWFwcGluZyddID0gJ0VuYWJsZSBpbXBvcnRpbmcgV29yZHByZXNzIG1ldGFkYXRhIGFzIENHQmxvZyBmaWVsZHMnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlJ10gPSAnQSBkdXBsaWNhdGUgJXMgd2FzIGRldGVjdGVkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR2YWx1ZSddID0gJ1RoZSB2YWx1ZSAlcyBpcyBpbnZhbGlkIGZvciBhICVzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfcG9zdG1ldGEnXSA9ICdJbnZhbGlkIGRhdGEgZW50ZXJlZCBmb3IgcG9zdG1ldGEnOwoKI0YKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1dvcmRQcmVzcyZ0cmFkZTsgdG8gQ0dCbG9nIGNvbnZlcnRlcic7CgojRwoKCiNICgoKI0kKJGxhbmdbJ2ltYWdlX2NvdW50J10gPSAnSW1hZ2UgQ291bnQnOwokbGFuZ1snaW1hZ2VfZGVzdCddID0gJ0ltYWdlIERlc3RpbmF0aW9uJzsKJGxhbmdbJ2ltYWdlX2Vycm9ycyddID0gJ0ltYWdlIEVycm9ycyc7CiRsYW5nWydpbmZvX2NsZWFyX2NnYmxvZ19jYXRlZ29yaWVzJ10gPSAnSWYgZW5hYmxlZCwgQUxMIENHQmxvZyBjYXRlZ29yaWVzIHdpbGwgYmUgZGVsZXRlZC4gIE9ubHkgdmFsaWQgaWYgY2xlYXIgcG9zdHMgaXMgYWxzbyBzZWxlY3RlZC4nOwokbGFuZ1snaW5mb19jbGVhcl9jZ2Jsb2dfZmllbGRkZWZzJ10gPSAnSWYgZW5hYmxlZCwgQUxMIENHQmxvZyBmaWVsZCBkZWZpbml0aW9ucyB3aWxsIGJlIGRlbGV0ZWQuICBPbmx5IHZhbGlkIGlmIGNsZWFyIHBvc3RzIGlzIGFsc28gc2VsZWN0ZWQuJzsKJGxhbmdbJ2luZm9fY2xlYXJfY2dibG9nX3Bvc3RzJ10gPSAnSWYgZW5hYmxlZCwgQUxMIENHQmxvZyBwb3N0cyB3aWxsIGJlIGRlbGV0ZWQnOwokbGFuZ1snaW5mb19pbWFnZV9kZXN0J10gPSAnU3BlY2lmeSB0aGUgbmFtZSBvZiBhIGZvbGRlciAocmVsYXRpdmUgdG8gdGhlIHVwbG9hZHMgZGlyZWN0b3J5KSB3aGVyZSBlbGlnYWJsZSBpbWFnZXMgc2hvdWxkIGJlIGNvcGllZCB0byc7CiRsYW5nWydpbmZvX2ltcG9ydF9pbWFnZXMnXSA9ICdUaGlzIHByb2Nlc3MgaW52b2x2ZXMgcGFyc2luZyB0aGUgd29yZHByZXMgcG9zdCBjb250ZW50IHNlYXJjaGluZyBmb3IgaW1hZ2UgdGFncywgYW5kIHRyeWluZyB0byB0aGVuIGNvcHkgdGhlIGltYWdlcyB0byB0aGUgbG9jYWwgc2VydmVyLCBhbmQgY2hhbmdlIHRoZSBwb3N0IGNvbnRlbnQgYWNjb3JkaW5nbHkuICBUcmFuc2xhdGlvbiB3aWxsIG9ubHkgYmUgZG9uZSBmb3IgaW1hZ2VzIHRoYXQgYmVnaW4gd2l0aCBvbmUgb2YgdGhlIGltYWdlIHBhdGhzIGxpc3RlZCBiZWxvdy4nOwokbGFuZ1snaW5mb19pbXBvcnRfcG9zdHMnXSA9ICdJbXBvcnQgcG9zdHMgZnJvbSBXb3JkUHJlc3MmdHJhZGU7IHRvIENHQmxvZyc7CiRsYW5nWydpbmZvX2ltcG9ydF91c2VycyddID0gJ0ltcG9ydCB1c2VycyBmcm9tIFdvcmRQcmVzcyBpbnRvIEZFVS4gIEltcG9ydGVkIHVzZXJzIHdpbGwgaGF2ZSBhIGhhcmRjb2RlZCBwYXNzd29yZCwgYW5kIHdpbGwgbm90IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgZ3JvdXBzLic7CiRsYW5nWydpbmZvX3Bvc3RtZXRhX21hcHBpbmcnXSA9IDw8PEVPVAo8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgYWxsb3dzIGNvbnZlcnRpbmcgcG9zdCBkYXRhIHN0b3JlZCBhcyBtZXRhZGF0YSBpbnRvIENHQmxvZyBjdXN0b20gZmllbGRzLiAgWW91IG11c3Qgc2VsZWN0IGEgd29yZHByZXNzIG1ldGFkYXRhIGZpZWxkIGFuZCBlbnRlciBhbiBhcHByb3ByaWF0ZSBDR0Jsb2cgZmllbGQgbmFtZS48cD48YnIvPgo8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEl0IGlzIG5vdCBhcHByb3ByaWF0ZSB0byBjb3B5IEFMTCBvZiB0aGUgd29yZHByZXNzIG1ldGFkYXRhLiAgWW91IG1heSBuZWVkIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSB3cF9wb3N0bWV0YSB0YWJsZSB0byBkZXRlcm1pbmUgdGhlIGtleXMgZm9yIHRoZSB0YWJsZSB0aGF0IHlvdSB3YW50IHRvIGltcG9ydC48L3A+PGJyLz4KPHA+TmV3IENHQmxvZyBmaWVsZHMgd2lsbCBiZSBjcmVhdGVkIGZvciBlYWNoIGZpZWxkbmFtZSBlbnRlcmVkLCBwdWJsaWMgdGV4dCBmaWVsZHMuPC9wPgpFT1Q7CiRsYW5nWydpbmZvX3Jvb3RfcGF0aCddID0gJ1RoZSBjb21wbGV0ZSBwYXRoIHRvIHRoZSB3b3JkcHJlc3MgaW5zdGFsbGF0aW9uIG9uIHRoaXMgc2VydmVyJzsKJGxhbmdbJ2luZm9fcm9vdF91cmwnXSA9ICdUaGUgY29tcGxldGUgcHVibGljIFVSTCB0byB0aGUgd29yZHByZXNzIGluc3RhbGxhdGlvbic7CiRsYW5nWydpbmZvX3VzZXJfcHcnXSA9ICdTcGVjaWZ5IHRoZSBwYXNzd29yZCBmb3IgaW1wb3J0ZWQgRkVVIFVzZXJzJzsKJGxhbmdbJ2ltYWdlX3BhdGhzJ10gPSAnSW1hZ2UgUGF0aHMnOwokbGFuZ1snaW1wb3J0J10gPSAnSW1wb3J0JzsKJGxhbmdbJ2ltcG9ydF9jYXRlZ29yaWVzJ10gPSAnSW1wb3J0IFdvcmRQcmVzcyZ0cmFkZTsgQ2F0ZWdvcmllcyc7CiRsYW5nWydpbXBvcnRfcG9zdHMnXSA9ICdJbXBvcnQgV29yZFByZXNzJnRyYWRlOyBQb3N0cyc7CiRsYW5nWydpbXBvcnRfaW1hZ2VzJ10gPSAnSW1wb3J0IFdvcmRQcmVzcyZ0cmFkZTsgSW1hZ2VzJzsKJGxhbmdbJ2ltcG9ydF91c2VycyddID0gJ0ltcG9ydCBVc2Vycyc7CiRsYW5nWydpbmZvX2ltcG9ydF9jYXRlZ29yaWVzJ10gPSAnSWYgZW5hYmxlZCwgdGhpcyBvdGlvbiB3aWxsIGNyZWF0ZSBDR0Jsb2cgY2F0ZWdvcmllcyBmb3IgZWFjaCB1bmlxdWUgd29yZHByZXNzIGNhdGVnb3J5IG5hbWUsIGFuZCBhbHNvIGFkZCB0aGUgaW1wb3J0ZWQgYXJ0aWNsZSBpbnRvIG1hdGNoaW5nIGNhdGVnb3JpZXMuICBUaGUgc3lzdGVtIG1heSBub3QgaGFuZGxlIG5lc3RlZCBjYXRlZ29yaWVzIHdpdGggaWRlbnRpY2FsIG5hbWVzIHRvIG90aGVyIG5lc3RlZCBjYXRlZ29yaWVzLiAgaS5lOiAgSG9ja2V5ID4+IFdvbWVucyB2cy4gIFNvY2NlciA+PiBXb21lbnMnOwokbGFuZ1snaW5mb19pbWFnZV9wYXRocyddID0gJ1NwZWNpZnkgPGVtPihvbmUgZW50cnkgcGVyIGxpbmUpPC9lbT4gVVJMIHByZWZpeGVzIHRoYXQgcmVwcmVzZW50IGltYWdlcyB0aGF0IHNob3VsZCBiZSBjb3BpZWQgZnJvbSB0aGUgd29yZHByZXNzIHNpdGUgdG8gdGhlIG5ldyBDR0Jsb2cgaW5zdGFsbGF0aW9uLiAgaS5lOiBodHRwOi8vd3d3Lm15d3BzaXRlLmNvbS93cC1jb250ZW50L3VwbG9hZHMnOwoKI0oKCgojSwoKCiNMCiRsYW5nWydsZWdlbmRfcG9zdG1ldGFfbWFwcGluZyddID0gJ01hcCBXb3JkcHJlc3MmdHJhZGU7IE1ldGEgRGF0YSc7CgojTQokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdBIHNpbXBsZSwgb25lIHRpbWUgdXNlIG9ubHkgc2NyaXB0IHRvIGltcG9ydCB3b3JkcHJlc3MgYmxvZyBwb3N0cyBpbnRvIENHQmxvZyc7CiRsYW5nWydtc2dfd3Bmb3VuZCddID0gJ1dvcmRQcmVzcyZ0cmFkZTsgaW5zdGFsbGF0aW9uIGZvdW5kJzsKCiNOCiRsYW5nWydub25lJ10gPSAnTm9uZSc7CgojTwokbGFuZ1snb3B0aW9ucyddID0gJ09wdGlvbnMnOwoKI1AKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVGhlIENHX1dQMkNHQmxvZyBpbXBvcnQgbW9kdWxlIGhhcyBiZWVuIGluc3RhbGxlZCc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnVGhlIENHX1dQMkNHQmxvZyBpbXBvcnQgbW9kdWxlIGhhcyBiZWVuIHVuaW5zdGFsbGVkJzsKCiNRCgoKI1IKJGxhbmdbJ3Jvb3RfcGF0aCddID0gJ1Jvb3QgUGF0aCc7CiRsYW5nWydyb290X3VybCddID0gJ1Jvb3QgVVJMJzsKCiNTCgoKI1QKJGxhbmdbJ3Rlc3QnXSA9ICdUZXN0JzsKJGxhbmdbJ3RpdGxlX2ltcG9ydCddID0gJ0ltcG9ydCBmcm9tIFdvcmRQcmVzcyZ0cmFkZTsnOwoKI1UKJGxhbmdbJ3VzZXJfY291bnQnXSA9ICdVc2VyIENvdW50JzsKJGxhbmdbJ3VzZXJfcHcnXSA9ICdVc2VyIFBhc3N3b3JkJzsKCiNWCgoKI1cKJGxhbmdbJ3dhcm5fbG9uZ3RpbWUnXSA9ICc8c3Ryb25nPldhcm5pbmc8L3N0cm9uZz4gVGhpcyBvcGVyYXRpb24gbWF5IHRha2UgYSBjb25zaWRlcmFibGUgYW1vdW50IG9mIHRpbWUgdG8gY29tcGxldGUuICBVc2UgY2F1dGlvbiwgYW5kIGVuc3VyZSB0aGF0IHlvdXIgUEhQIGlzIGNvbmZpZ3VyZWQgc28gdGhhdCB0aGUgc2V0X3RpbWVfbGltaXQgbWV0aG9kIHdvcmtzIGZyb20gd2l0aGluIHBocC4nOwokbGFuZ1snd2Fybl93cF9pbXBvcnQnXSA9ICc8c3Ryb25nPldhcm5pbmc8L3N0cm9uZz4gVGhpcyBvcGVyYXRpb24gd2lsbCBjb3B5IFdvcmRQcmVzcyZ0cmFkZTsgcG9zdHMgaW50byBDR0Jsb2cuICBJdCBkb2VzIG5vdCBjaGVjayBmb3IgbWF0Y2hpbmcgZXhpc3RpbmcgYXJ0aWNsZXMsIHRoZXJlZm9yZSByZXBlYXRlZGx5IHJ1bm5pbmcgdGhpcyBhY3Rpb24gY2FuIGNyZWF0ZSBkdXBsaWNhdGUgYmxvZyBhcnRpY2xlcy4gIFdlIHJlY29tbWVuZCB5b3UgcGVyZm9ybSB0aGlzIGluc3RhbGxhdGlvbiBvbiBhIGJsYW5rIENHQmxvZyBpbnN0YWxsYXRpb24gb24gYSBkZXZlbG9wbWVudCBpbnN0YWxsYXRpb24gZm9yIHRlc3RpbmcgcHVycG9zZXMuJzsKJGxhbmdbJ3dwc2V0dGluZ3MnXSA9ICdXb3JkUHJlc3MmdHJhZGU7IEluc3RhbGxhdGlvbic7CgojWAoKCiNZCgoKI1oKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.wp2cgblog_tree.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIHdwMmNnYmxvZ190cmVlIGV4dGVuZHMgY21zX3RyZWUKewogICAgcHVibGljIGZ1bmN0aW9uIGdldF9wYXJlbnRzKCR0YWduYW1lKQogICAgewogICAgICAgICRwYXJlbnQgPSAkdGhpcy0+Z2V0UGFyZW50KCk7CiAgICAgICAgaWYoICEkcGFyZW50IHx8ICRwYXJlbnQtPmdldF90YWcoJHRhZ25hbWUpID09ICcnICkgcmV0dXJuIGFycmF5KCR0aGlzLT5nZXRfdGFnKCR0YWduYW1lKSk7CgogICAgICAgICR0bXAgPSAkcGFyZW50LT5nZXRfcGFyZW50cygkdGFnbmFtZSk7CiAgICAgICAgaWYoICFpc19hcnJheSgkdG1wKSApICR0bXAgPSBhcnJheSgpOwogICAgICAgICR0bXBbXSA9ICR0aGlzLT5nZXRfdGFnKCR0YWduYW1lKTsKICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BhdGgoJHRhZ25hbWUsICRkZWxpbWl0ZXIgPSAnL15eLycpCiAgICB7CiAgICAgICAgJHRtcCA9ICR0aGlzLT5nZXRfcGFyZW50cygkdGFnbmFtZSk7CiAgICAgICAgaWYoIGNvdW50KCR0bXApICkgcmV0dXJuIGltcGxvZGUoJGRlbGltaXRlciwkdG1wKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gJmZpbmRfY2hpbGRfYnlfdGFnKCR0YWduYW1lLCAkdmFsdWUpCiAgICB7CiAgICAgICAgJGJhZCA9IG51bGw7CiAgICAgICAgaWYoICEkdGhpcy0+aGFzX2NoaWxkcmVuKCkgKSByZXR1cm4gJGJhZDsKICAgICAgICBmb3JlYWNoKCAkdGhpcy0+Z2V0X2NoaWxkcmVuKCkgYXMgJGNoaWxkICkgewogICAgICAgICAgICBpZiggJGNoaWxkLT5nZXRfdGFnKCR0YWduYW1lKSA9PSAkdmFsdWUgKSByZXR1cm4gJGNoaWxkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGJhZDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uICZmaW5kX2J5X3BhdGgod3AyY2dibG9nX3RyZWUgJHJvb3QsICR0YWduYW1lLCAkcGF0aCwgJGRlbGltaXRlciA9ICcvXl4vJykKICAgIHsKICAgICAgICAkYmFkID0gbnVsbDsKICAgICAgICAkbm9kZSA9ICRyb290OwogICAgICAgICR0bXAgPSBleHBsb2RlKCRkZWxpbWl0ZXIsJHBhdGgpOwogICAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0bXApOyAkaSsrICkgewogICAgICAgICAgICAkbmV3bm9kZSA9ICRub2RlLT5maW5kX2NoaWxkX2J5X3RhZygkdGFnbmFtZSwkdG1wWyRpXSk7CiAgICAgICAgICAgIGlmKCAhJG5ld25vZGUgKSByZXR1cm4gJGJhZDsKICAgICAgICAgICAgJG5vZGUgPSAkbmV3bm9kZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRub2RlOwogICAgfQp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.wp2cgblog_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENHX1dQMkNHQmxvZyAoYykgMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgc2hvcnRlbmluZyBVUkxTLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBWaXNpdCB0aGUgQ01TTVMgSG9tZXBhZ2UgYXQ6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgpmaW5hbCBjbGFzcyB3cDJjZ2Jsb2dfdXRpbHMKewogIHByaXZhdGUgc3RhdGljICR3cF9kYnByZWZpeDsKCiAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tfd3BfZGlyKCRkaXIpCiAgewogICAgaWYoICFpc19kaXIoJGRpcikgKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCRkaXIuJyBpcyBub3QgYSBkaXJlY3RvcnknKTsKICAgIGlmKCAhaXNfcmVhZGFibGUoJGRpci4nL3dwLWNvbmZpZy5waHAnKSApIHRocm93IG5ldyBFeGNlcHRpb24oJGRpci4nIGlzIG5vdCBhIHdvcmRwcmVzcyBkaXJlY3RvcnknKTsKICAgIHJldHVybiAkY29uZmlnOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiAmZ2V0X3dwX2RiKCR3cGNvbmZpZykKICB7CiAgICAkZGJjID0gQURPTmV3Q29ubmVjdGlvbignbXlzcWxpJywncGVhcjpkYXRlOmV4dGVuZCcpOwogICAgJHJlcyA9ICRkYmMtPkNvbm5lY3QoJHdwY29uZmlnWydkYl9ob3N0J10sJHdwY29uZmlnWydkYl91c2VyJ10sJHdwY29uZmlnWydkYl9wYXNzJ10sCgkJCSAkd3Bjb25maWdbJ2RiX25hbWUnXSk7CiAgICBpZiggISRyZXMgKSB7CiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuYWJsZSB0byBjb25uZWN0IHRvIHdvcmRwcmVzcyBkYXRhYmFzZSB7JHdwY29uZmlnWydkYl9uYW1lJ119IG9uIHskd3Bjb25maWdbJ2RiX3VzZXInXX0meyR3cGNvbmZpZ1snZGJfaG9zdCddfSIpOwogICAgfQoKICAgIHNlbGY6OnNldF93cF9kYnByZWZpeCgkd3Bjb25maWdbJ2RiX3ByZWZpeCddKTsKICAgICRkYmMtPkV4ZWN1dGUoJ1NFVCBOQU1FUyB1dGY4Jyk7IC8vIHRlc3QKICAgIHJldHVybiAkZGJjOwogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gc2V0X3dwX2RicHJlZml4KCRzdHIpCiAgewogICAgc2VsZjo6JHdwX2RicHJlZml4ID0gJHN0cjsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd3BfZGJfcHJlZml4KCkKICB7CiAgICByZXR1cm4gc2VsZjo6JHdwX2RicHJlZml4OwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja193cF9kYigmJGRiKQogIHsKICAgICRxdWVyeSA9ICdTRUxFQ1QgQ09VTlQoSUQpIEZST00gJy5zZWxmOjp3cF9kYl9wcmVmaXgoKS4ncG9zdHMgV0hFUkUgcG9zdF9zdGF0dXMgPSA/JzsKICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJ3B1Ymxpc2gnKSk7CiAgICBpZiggISR0bXAgKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb3VsZCBub3QgZmluZCBhbnkgcHVibGlzaGVkIHBvc3RzIGluIHRoZSBXb3JkUGVyZmVjdCBkYXRhYmFzZScpOwoKICAgICRxdWVyeSA9ICdTRUxFQ1QgQ09VTlQoSUQpIEZST00gJy5zZWxmOjp3cF9kYl9wcmVmaXgoKS4ndXNlcnMnOwogICAgJHRtcCA9ICRkYi0+R2V0T25lKCRxdWVyeSk7CiAgICBpZiggISR0bXAgKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb3VsZCBub3QgZmluZCBhbnkgdXNlcnMgaW4gdGhlIFdvcmRQZXJmZWN0IGRhdGFiYXNlJyk7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdwY2F0c190b190cmVlKCRpbikKICB7CiAgICAgICRyb290ID0gbmV3IHdwMmNnYmxvZ190cmVlKGFycmF5KCd0ZXJtX2lkJz0+MCkpOwogICAgICBmb3JlYWNoKCAkaW4gYXMgJHJvdyApIHsKICAgICAgICAgICRub2RlID0gbmV3IHdwMmNnYmxvZ190cmVlKCRyb3cpOwogICAgICAgICAgaWYoICRyb3dbJ3BhcmVudCddID4gMCApIHsKICAgICAgICAgICAgICAkcGFyZW50ID0gJHJvb3QtPmZpbmRfYnlfdGFnKCd0ZXJtX2lkJywkcm93WydwYXJlbnQnXSk7CiAgICAgICAgICAgICAgJHBhcmVudC0+YWRkX25vZGUoJG5vZGUpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgJHJvb3QtPmFkZF9ub2RlKCRub2RlKTsKICAgICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gJHJvb3Q7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNnYmxvZ19jYXRzX3RvX3RyZWUoJGluKQogIHsKICAgICAgJHJvb3QgPSBuZXcgd3AyY2dibG9nX3RyZWUoKTsKICAgICAgaWYoIGlzX2FycmF5KCRpbikgJiYgY291bnQoJGluKSApIHsKICAgICAgICAgIGZvcmVhY2goICRpbiBhcyAkcm93ICkgewogICAgICAgICAgICAgICRub2RlID0gbmV3IHdwMmNnYmxvZ190cmVlKCRyb3cpOwogICAgICAgICAgICAgIGlmKCAkcm93WydwYXJlbnRfaWQnXSA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICRwYXJlbnQgPSAkcm9vdC0+ZmluZF9ieV90YWcoJ2lkJywkcm93WydwYXJlbnRfaWQnXSk7CiAgICAgICAgICAgICAgICAgICRwYXJlbnQtPmFkZF9ub2RlKCRub2RlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICRyb290LT5hZGRfbm9kZSgkbm9kZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAkcm9vdDsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlX3BhdGgoIHdwMmNnYmxvZ190cmVlICYkcm9vdCwgJG5hbWVfcGF0aCwgJGlkX3BhdGgsICRkZWxpbWl0ZXIgPSAnL15eLycpCiAgewogICAgICAkbmFtZV90bXAgPSBleHBsb2RlKCRkZWxpbWl0ZXIsJG5hbWVfcGF0aCk7CiAgICAgICRpZF90bXAgPSBleHBsb2RlKCRkZWxpbWl0ZXIsJGlkX3BhdGgpOwogICAgICBpZiggY291bnQoJG5hbWVfdG1wKSAhPSBjb3VudCgkaWRfdG1wKSApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0luY29uc2lzdGVudCBkZXB0aHMgYmV0d2VuIG5hbWUgYW5kIGlkIHBhdGhzJyk7CgogICAgICAkc3RhcnQgPSAkcm9vdDsKICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJG5hbWVfdG1wKTsgJGkrKyApIHsKICAgICAgICAgICRuYW1lID0gJG5hbWVfdG1wWyRpXTsKICAgICAgICAgICRpZCA9ICRpZF90bXBbJGldOwogICAgICAgICAgJG5vZGUgPSAkc3RhcnQtPmZpbmRfY2hpbGRfYnlfdGFnKCduYW1lJywkbmFtZSk7CiAgICAgICAgICBpZiggJG5vZGUgKSB7CiAgICAgICAgICAgICAgJHN0YXJ0ID0gJG5vZGU7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gZ290dGEgY3JlYXRlIGl0LgogICAgICAgICAgJHRtcCA9IGFycmF5KCduYW1lJz0+JG5hbWUsJ3dwX3Rlcm1faWQnPT4kaWQpOwogICAgICAgICAgJG5vZGUgPSBuZXcgd3AyY2dibG9nX3RyZWUoJHRtcCk7CiAgICAgICAgICAkc3RhcnQtPmFkZF9ub2RlKCRub2RlKTsKICAgICAgICAgICRzdGFydCA9ICRub2RlOwogICAgICB9CiAgfQoKfQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_import.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2Ntc19qcXVlcnl9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KdmFyIHByb2dyZXNzX21heCA9IDEwMDsKdmFyIHByb2dyZXNzX3ZhbCA9IDA7CmZ1bmN0aW9uIHByb2dyZXNzX3Jlc2V0KCkgewogIHByb2dyZXNzX21heCA9IDEwMDsKICBwcm9ncmVzc192YWwgPSAwOwogICQoJyNwcm9ncmVzcycpLndpZHRoKDApOwp9CgpmdW5jdGlvbiBwcm9ncmVzc190b3RhbChudW0pIHsKICBwcm9ncmVzc19tYXggPSBudW07Cn0KCmZ1bmN0aW9uIHByb2dyZXNzKG51bV9zdGVwcykgewogIHByb2dyZXNzX3ZhbCA9IHByb2dyZXNzX3ZhbCArIG51bV9zdGVwczsKICB2YXIgdyA9IDAsdCA9IDA7CiAgaWYoIHByb2dyZXNzX21heCA+IDAgKSB7CiAgICB0ID0gcHJvZ3Jlc3NfdmFsIC8gcHJvZ3Jlc3NfbWF4ICogMTAwOwogICAgdyA9IE1hdGgucm91bmQoIHQgKTsKICB9CiAgJCgnI3Byb2dyZXNzJykud2lkdGgodysnJScpOwp9CgpmdW5jdGlvbiBlcnJvcihtc2cpIHsKICAkKCcjc3RhdHVzX2FyZWEnKS5hcHBlbmQoJzxwIGNsYXNzPSJlcnJvcm1zZyI+Jyttc2crJzwvcD4nKTsKfQoKZnVuY3Rpb24gc3RhdHVzKG1zZykgewogICQoJyNzdGF0dXNfYXJlYScpLmFwcGVuZCgnPHA+Jyttc2crJzwvcD4nKTsKfQoKZnVuY3Rpb24gc3RhdChrZXksdmFsKQp7CiAgJCgnI2xlZ2VuZCcpLnNob3coKS5hcHBlbmQoJzx0cj48dGQ+JytrZXkrJzwvdGQ+PHRkPicrdmFsKyc8L3RkPjwvdHI+Jyk7Cn0KCjwvc2NyaXB0PgoKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KZGl2Lm1ldGVyIHsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgbWFyZ2luLWJvdHRvbTogMS41ZW07CiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICBoZWlnaHQ6IDJlbTsKICBjb2xvcjogeWVsbG93Owp9CnNwYW4jcHJvZ3Jlc3MgewogIGRpc3BsYXk6IGJsb2NrOwogIGJhY2tncm91bmQtY29sb3I6IGN5YW47CiAgaGVpZ2h0OiAxMDAlOwogIG92ZXJmbG93OiBoaWRkZW47Cn0KCmRpdiNzdGF0dXNfYXJlYSB7CiAgbWFyZ2luLXRvcDogMWVtOwogIG1hcmdpbi1sZWZ0OiAyZW07CiAgbWFyZ2luLXJpZ2h0OiAyZW07Cn0KcC5lcnJvcm1zZyB7CiAgYmFja2dyb3VuZC1jb2xvcjogcGluazsKICBib3JkZXI6IDFweCBzb2xpZCBncmF5OwogIHBhZGRpbmctbGVmdDogMC41ZW07CiAgcGFkZGluZy10b3A6IDAuMjVlbTsKICBwYWRkaW5nLWJvdHRvbTogMC4yNWVtOwp9CnRhYmxlLnBhZ2V0YWJsZSB7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwogIG1hcmdpbi1ib3R0b206IDEuNWVtOwp9CnRhYmxlLnBhZ2V0YWJsZSA+IGNhcHRpb24gewogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKICBmb250LXdlaWdodDogYm9sZDsKfQo8L3N0eWxlPgoKPGRpdiBjbGFzcz0ibWV0ZXIiPgogIDxzcGFuIGlkPSJwcm9ncmVzcyI+PC9zcGFuPgo8L2Rpdj4KCjx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIiBpZD0ibGVnZW5kIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogIDxjYXB0aW9uPlN0YXRpc3RpY3M8L2NhcHRpb24+CjwvdGFibGU+Cgo8ZGl2IGlkPSJzdGF0dXNfYXJlYSI+CjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_import_main.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzIGNsYXNzPSJjZW50ZXIiPnskbW9kLT5MYW5nKCd0aXRsZV9pbXBvcnQnKX06PC9oMz4KCjxpZnJhbWUgc3R5bGU9IndpZHRoOiAxMDAlOyBtaW4taGVpZ2h0OiAzMGVtOyBvdmVyZmxvdy14OiBoaWRkZW47IG92ZXJmbG93LXk6IGF1dG8iIHNyYz0ieyRhZG1pbl9pbXBvcnRfdXJsfSI+PC9pZnJhbWU+]]></data>
	</file>
	<file>
	  <filename>/templates/defaultadmin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNjbGVhcl9jZ2Jsb2dfcG9zdHMnKS5vbignY2hhbmdlJyxmdW5jdGlvbigpewogICAgdmFyIHYgPSAkKHRoaXMpLnZhbCgpOwogICAgaWYoIHYgPT0gMCApIHsKICAgICAgJCgnI2NvbnRfY2xlYXJfY2dibG9nX2ZpZWxkZGVmcycpLmhpZGUoKTsKICAgICAgJCgnI2NvbnRfY2xlYXJfY2dibG9nX2NhdGVnb3JpZXMnKS5oaWRlKCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgJCgnI2NvbnRfY2xlYXJfY2dibG9nX2ZpZWxkZGVmcycpLnNob3coKTsKICAgICAgJCgnI2NvbnRfY2xlYXJfY2dibG9nX2NhdGVnb3JpZXMnKS5zaG93KCk7CiAgICB9CiAgfSk7CiAgJCgnI2NsZWFyX2NnYmxvZ19wb3N0cycpLnRyaWdnZXIoJ2NoYW5nZScpOyAvLyBmb3IgZG9jdW1lbnQgbG9hZC4KCiAgJCgnI2ltcG9ydF9wb3N0cycpLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKCl7CiAgICB2YXIgdiA9ICQodGhpcykudmFsKCk7CiAgICBpZiggdiA9PSAwICkgewogICAgICAkKCcjc2VjdGlvbl9wb3N0cycpLmhpZGUoKTsKICAgIH0KICAgIGVsc2UgewogICAgICAkKCcjc2VjdGlvbl9wb3N0cycpLnNob3coKTsKICAgIH0KICB9KTsKICAkKCcjaW1wb3J0X3Bvc3RzJykudHJpZ2dlcignY2hhbmdlJyk7CgogICQoJyNpbXBvcnRfaW1hZ2VzJykub24oJ2NoYW5nZScsZnVuY3Rpb24oKXsKICAgIHZhciB2ID0gJCh0aGlzKS52YWwoKTsKICAgIGlmKCB2ID09IDAgKSB7CiAgICAgICQoJyNzZWN0aW9uX2ltYWdlcycpLmhpZGUoKTsKICAgIH0KICAgIGVsc2UgewogICAgICAkKCcjc2VjdGlvbl9pbWFnZXMnKS5zaG93KCk7CiAgICB9CiAgfSk7CiAgJCgnI2ltcG9ydF9pbWFnZXMnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKCiAgJCgnI2ltcG9ydF91c2VycycpLm9uKCdjaGFuZ2UnLGZ1bmN0aW9uKCl7CiAgICB2YXIgdiA9ICQodGhpcykudmFsKCk7CiAgICBpZiggdiA9PSAwICkgewogICAgICAkKCcjc2VjdGlvbl91c2VycycpLmhpZGUoKTsKICAgIH0KICAgIGVsc2UgewogICAgICAkKCcjc2VjdGlvbl91c2VycycpLnNob3coKTsKICAgIH0KICB9KTsKICAkKCcjaW1wb3J0X3VzZXJzJykudHJpZ2dlcignY2hhbmdlJyk7CgogICQoJyNlbmFibGVfcG9zdG1ldGEnKS5vbignY2hhbmdlJyxmdW5jdGlvbigpewogICAgdmFyIHYgPSAkKHRoaXMpLnZhbCgpCiAgICBpZiggdiA9PSAwICkgewogICAgICAkKCcjZnNfcG9zdG1ldGEnKS5oaWRlKCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgJCgnI2ZzX3Bvc3RtZXRhJykuc2hvdygpOwogICAgfQogIH0pCiAgJCgnI2VuYWJsZV9wb3N0bWV0YScpLnRyaWdnZXIoJ2NoYW5nZScpOwoKICAkKCdhLmFkZF9yb3cnKS5jbGljayhmdW5jdGlvbigpewogICAgdmFyICRlbCA9ICQoJ3RyI3Bvc3RtZXRhX3NrZWxldG9uJykuY2xvbmUoKTsKICAgICRlbC5yZW1vdmVBdHRyKCdpZCcpOwogICAgJCgndGFibGUjcG9zdG1ldGFfbWFwID4gdGJvZHknKS5hcHBlbmQoJGVsKTsKICB9KTsKICAkKCdib2R5Jykub24oJ2NsaWNrJywnYS5kZWxldGVfcm93JyxmdW5jdGlvbihlKXsKICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIGlmKCAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykuYXR0cignaWQnKSA9PSAncG9zdG1ldGFfc2tlbGV0b24nICkgewogICAgICBhbGVydCgnY2Fubm90IGRlbGV0ZSB0aGlzIHJvdycpOwogICAgfQogICAgZWxzZSB7CiAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5yZW1vdmUoKTsKICAgIH0KICB9KTsKfSk7Cjwvc2NyaXB0PgoKeyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9Indhcm5pbmciPnskbW9kLT5MYW5nKCd3YXJuX3dwX2ltcG9ydCcpfTwvZGl2Pgo8ZGl2IGNsYXNzPSJ3YXJuaW5nIj57JG1vZC0+TGFuZygnd2Fybl9sb25ndGltZScpfTwvZGl2PgoKPGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3dwc2V0dGluZ3MnKX06PC9sZWdlbmQ+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPip7JG1vZC0+TGFuZygncm9vdF9wYXRoJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1yb290X3BhdGgiIHZhbHVlPSJ7JHdwLnJvb3RfcGF0aH0iLz4KICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH13cF9jaGVjayIgdmFsdWU9InskbW9kLT5MYW5nKCdjaGVjaycpfSIvPgogICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX3Jvb3RfcGF0aCcpfQogICAgPC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4qeyRtb2QtPkxhbmcoJ3Jvb3RfdXJsJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1yb290X3VybCIgdmFsdWU9Inskd3Aucm9vdF91cmx9Ii8+CiAgICAgIDxici8+eyRtb2QtPkxhbmcoJ2luZm9fcm9vdF91cmwnKX0KICAgIDwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+KnskbW9kLT5MYW5nKCdkYl9ob3N0Jyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1kYl9ob3N0IiB2YWx1ZT0ieyR3cC5kYl9ob3N0fSIvPgogICAgPC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4qeyRtb2QtPkxhbmcoJ2RiX3VzZXInKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWRiX3VzZXIiIHZhbHVlPSJ7JHdwLmRiX3VzZXJ9Ii8+CiAgICA8L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPip7JG1vZC0+TGFuZygnZGJfcGFzcycpfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9ZGJfcGFzcyIgdmFsdWU9Inskd3AuZGJfcGFzc30iLz4KICAgIDwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+KnskbW9kLT5MYW5nKCdkYl9uYW1lJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1kYl9uYW1lIiB2YWx1ZT0ieyR3cC5kYl9uYW1lfSIvPgogICAgPC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4qeyRtb2QtPkxhbmcoJ2RiX3ByZWZpeCcpfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9ZGJfcHJlZml4IiB2YWx1ZT0ieyR3cC5kYl9wcmVmaXh9Ii8+CiAgICA8L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH13cF90ZXN0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3Rlc3QnKX0iLz4KICAgIDwvcD4KICA8L2Rpdj4KCjwvZmllbGRzZXQ+Cgp7aWYgaXNzZXQoJGRiX3Rlc3RlZCl9CjxmaWVsZHNldD4KICA8bGVnZW5kPnskbW9kLT5MYW5nKCdvcHRpb25zJyl9OjwvbGVnZW5kPgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdjbGVhcl9jZ2Jsb2dfcG9zdHMnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgIDxzZWxlY3QgaWQ9ImNsZWFyX2NnYmxvZ19wb3N0cyIgbmFtZT0ieyRhY3Rpb25pZH1jbGVhcl9jZ2Jsb2dfcG9zdHMiPgogICAgICAgIHtjZ2VfeWVzbm9fb3B0aW9ucyBzZWxlY3RlZD0kb3B0cy5jbGVhcl9jZ2Jsb2dfcG9zdHN8ZGVmYXVsdDoxfQogICAgICA8L3NlbGVjdD4KICAgICAgPGJyLz57JG1vZC0+TGFuZygnaW5mb19jbGVhcl9jZ2Jsb2dfcG9zdHMnKX0KICAgIDwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciIGlkPSJjb250X2NsZWFyX2NnYmxvZ19maWVsZGRlZnMiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDNlbTsiPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnY2xlYXJfY2dibG9nX2ZpZWxkZGVmcycpfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgPHNlbGVjdCBpZD0iY2xlYXJfY2dibG9nX2ZpZWxkZGVmcyIgbmFtZT0ieyRhY3Rpb25pZH1jbGVhcl9jZ2Jsb2dfZmllbGRkZWZzIj4KICAgICAgICB7Y2dlX3llc25vX29wdGlvbnMgc2VsZWN0ZWQ9JG9wdHMuY2xlYXJfY2dibG9nX2ZpZWxkZGVmc3xkZWZhdWx0OjB9CiAgICAgIDwvc2VsZWN0PgogICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2NsZWFyX2NnYmxvZ19maWVsZGRlZnMnKX0KICAgIDwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciIGlkPSJjb250X2NsZWFyX2NnYmxvZ19jYXRlZ29yaWVzIiBzdHlsZT0icGFkZGluZy1sZWZ0OiAzZW07Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2NsZWFyX2NnYmxvZ19jYXRlZ29yaWVzJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8c2VsZWN0IGlkPSJjbGVhcl9jZ2Jsb2dfY2F0ZWdvcmllcyIgbmFtZT0ieyRhY3Rpb25pZH1jbGVhcl9jZ2Jsb2dfY2F0ZWdvcmllcyI+CiAgICAgICAge2NnZV95ZXNub19vcHRpb25zIHNlbGVjdGVkPSRvcHRzLmNsZWFyX2NnYmxvZ19jYXRlZ29yaWVzfGRlZmF1bHQ6MH0KICAgICAgPC9zZWxlY3Q+CiAgICAgIDxici8+eyRtb2QtPkxhbmcoJ2luZm9fY2xlYXJfY2dibG9nX2NhdGVnb3JpZXMnKX0KICAgIDwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnaW1wb3J0X2NhdGVnb3JpZXMnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgIHtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9aW1wb3J0X2NhdGVnb3JpZXMgc2VsZWN0ZWQ9JG9wdHMuaW1wb3J0X2NhdGVnb3JpZXN9CiAgICAgIDxici8+eyRtb2QtPkxhbmcoJ2luZm9faW1wb3J0X2NhdGVnb3JpZXMnKX0KICAgIDwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnaW1wb3J0X3Bvc3RzJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICB7Y2dlX3llc25vX29wdGlvbnMgcHJlZml4PSRhY3Rpb25pZCBuYW1lPWltcG9ydF9wb3N0cyBzZWxlY3RlZD0kb3B0cy5pbXBvcnRfcG9zdHMgaWQ9ImltcG9ydF9wb3N0cyJ9CiAgICAgIDxici8+eyRtb2QtPkxhbmcoJ2luZm9faW1wb3J0X3Bvc3RzJyl9CiAgICA8L3A+CiAgPC9kaXY+CgogIDxkaXYgaWQ9InNlY3Rpb25fcG9zdHMiPgogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IiBzdHlsZT0icGFkZGluZy1sZWZ0OiAzZW07Ij4KICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnaW1wb3J0X2ltYWdlcycpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9aW1wb3J0X2ltYWdlcyBzZWxlY3RlZD0kb3B0cy5pbXBvcnRfaW1hZ2VzIGlkPSJpbXBvcnRfaW1hZ2VzIn0KICAgICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2ltcG9ydF9pbWFnZXMnKX0KICAgICAgPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJzZWN0aW9uX2ltYWdlcyI+CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyIgc3R5bGU9InBhZGRpbmctbGVmdDogNmVtOyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnaW1hZ2VfcGF0aHMnKX06PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgPHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9aW1hZ2VfcGF0aHMiIHJvd3M9IjIiPnskb3B0cy5pbWFnZV9wYXRoc308L3RleHRhcmVhPgogICAgICAgICAgPGJyLz57JG1vZC0+TGFuZygnaW5mb19pbWFnZV9wYXRocycpfQogICAgICAgIDwvcD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyIgc3R5bGU9InBhZGRpbmctbGVmdDogNmVtOyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnaW1hZ2VfZGVzdCcpfTo8L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbWFnZV9kZXN0IiB2YWx1ZT0ieyRvcHRzLmltYWdlX2Rlc3R9Ii8+CiAgICAgICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2ltYWdlX2Rlc3QnKX0KICAgICAgICA8L3A+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+eyogI3NlY3Rpb25faW1hZ2VzICp9CiAgPC9kaXY+eyogI3NlY3Rpb25fcG9zdHMgKn0KCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2ltcG9ydF91c2VycycpfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAge2NnZV95ZXNub19vcHRpb25zIHByZWZpeD0kYWN0aW9uaWQgbmFtZT1pbXBvcnRfdXNlcnMgc2VsZWN0ZWQ9JG9wdHMuaW1wb3J0X3VzZXJzIGlkPSJpbXBvcnRfdXNlcnMifQogICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2ltcG9ydF91c2VycycpfQogICAgPC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyIgaWQ9InNlY3Rpb25fdXNlcnMiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDNlbTsiPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygndXNlcl9wdycpfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dXNlcl9wdyIgdmFsdWU9Inskb3B0cy51c2VyX3B3fSIvPgogICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX3VzZXJfcHcnKX0KICAgIDwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2VuYWJsZV9wb3N0bWV0YV9tYXBwaW5nJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9ZW5hYmxlX3Bvc3RtZXRhX21hcHBpbmciIGlkPSJlbmFibGVfcG9zdG1ldGEiPgogICAgICB7Y2dlX3llc25vX29wdGlvbnMgc2VsZWN0ZWQ9JG9wdHMuZW5hYmxlX3Bvc3RtZXRhX21hcHBpbmd9CiAgICAgIDwvc2VsZWN0PgogICAgPC9wPgogIDwvZGl2PgoKPC9maWVsZHNldD4KCgo8ZmllbGRzZXQgaWQ9ImZzX3Bvc3RtZXRhIj4KICA8bGVnZW5kPnskbW9kLT5MYW5nKCdsZWdlbmRfcG9zdG1ldGFfbWFwcGluZycpfTo8L2xlZ2VuZD4KICA8ZGl2IGNsYXNzPSJpbmZvcm1hdGlvbiI+eyRtb2QtPkxhbmcoJ2luZm9fcG9zdG1ldGFfbWFwcGluZycpfTwvZGl2PgoKICA8dGFibGUgaWQ9InBvc3RtZXRhX21hcCIgY2xhc3M9InBhZ2V0YWJsZSI+CiAgICA8dGhlYWQ+CiAgICAgIDx0cj4KICAgICAgICA8dGggc3R5bGU9IndpZHRoOiA1MCU7Ij57JG1vZC0+TGFuZygnY29sX3dwa2V5Jyl9OjwvdGg+Cgk8dGggc3R5bGU9IndpZHRoOiA0NCU7Ij57JG1vZC0+TGFuZygnY29sX2ZsZG5hbWUnKX06PC90aD4KCTx0aCBzdHlsZT0id2lkdGg6IDMlOyB0ZXh0LWFsaWduOiByaWdodDsiIGNsYXNzPSJwYWdlaWNvbiI+CgkgIDxhIGNsYXNzPSJhZGRfcm93Ij57Y2dpbWFnZSBpbWFnZT0iaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYiIGFsdD0kbW9kLT5MYW5nKCd0aXRsZV9hZGRfcm93Jyl9PC9hPgoJPC90aD4KCTx0aCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IiBjbGFzcz0icGFnZWljb24iPjwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RoZWFkPgogICAgPHRib2R5PgogICAgICB7aWYgaXNzZXQoJG9wdHMucG9zdG1ldGFfbWFwcGluZykgJiYgY291bnQoJG9wdHMucG9zdG1ldGFfbWFwcGluZyl9CiAgICAgICAge2ZvcmVhY2ggJG9wdHMucG9zdG1ldGFfbWFwcGluZyBhcyAkd3BrZXkgPT4gJGZsZG5hbWV9CiAgICAgICAgPHRyIHtpZiAkZmxkbmFtZUBmaXJzdH1pZD0icG9zdG1ldGFfc2tlbGV0b24iey9pZn0+CiAgICAgICAgICA8dGQ+CiAgCSAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9d3BfcG9zdG1ldGFbd3BrZXldW10iPgoJICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSR3cF9tZXRha2V5cyBzZWxlY3RlZD0kd3BrZXl9CgkgICAgPC9zZWxlY3Q+CgkgIDwvdGQ+CgkgIDx0ZD4KCSAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH13cF9wb3N0bWV0YVtmbGRuYW1lXVtdIiB2YWx1ZT0ieyRmbGRuYW1lfSIvPgoJICA8L3RkPgoJICA8dGQ+PC90ZD4KCSAgPHRkPgoJICAgIDxhIGNsYXNzPSJkZWxldGVfcm93Ij57Y2dpbWFnZSBjbGFzcz0ic3lzdGVtaWNvbiBpY29uX2RlbGV0ZXJvdyIgaW1hZ2U9Imljb25zL3N5c3RlbS9kZWxldGUuZ2lmIiBhbHQ9JG1vZC0+TGFuZygndGl0bGVfZGVsZXRlX3JvdycpfTwvYT4KCSAgPC90ZD4KICAgICAgICA8L3RyPgoJey9mb3JlYWNofQogICAgICB7ZWxzZX0KICAgICAgICA8dHIgaWQ9InBvc3RtZXRhX3NrZWxldG9uIj4KICAgICAgICAgIDx0ZD4KICAJICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1wb3N0bWV0YVt3cGtleV1bXSI+CgkgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JHdwX21ldGFrZXlzfQoJICAgIDwvc2VsZWN0PgoJICA8L3RkPgoJICA8dGQ+CgkgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9cG9zdG1ldGFbZmxkbmFtZV1bXSIvPgoJICA8L3RkPgoJICA8dGQ+PC90ZD4KCSAgPHRkPgoJICAgIDxhIGNsYXNzPSJkZWxldGVfcm93Ij57Y2dpbWFnZSBjbGFzcz0ic3lzdGVtaWNvbiBpY29uX2RlbGV0ZXJvdyIgaW1hZ2U9Imljb25zL3N5c3RlbS9kZWxldGUuZ2lmIiBhbHQ9JG1vZC0+TGFuZygndGl0bGVfZGVsZXRlX3JvdycpfTwvYT4KCSAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICB7L2lmfQogICAgPC90Ym9keT4KICA8L3RhYmxlPgo8L2ZpZWxkc2V0PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9d3BfaW1wb3J0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ2ltcG9ydCcpfSIvPgogIDwvcD4KPC9kaXY+CnsvaWZ9Cgp7JGZvcm1lbmR9]]></data>
	</file>
</module>
