<?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>TreeManager</name>
	<version>0.6.0</version>
  <mincmsversion>1.5.1</mincmsversion>
	<help>VGhpcyBtb2R1bGUgYWxsb3dzIHlvdSB0byBidWlsZCBvbmUgb3IgbW9yZSBuZXN0ZWQgdHJlZXMgZm9yIHlvdXIgbW9kdWxlcy4gWW91IGNhbiBhZGQgeW91ciBjdXN0b20gZmllbGRzIGFsc28uCjxiciAvPgo8aDM+Rm9yIG1vZHVsZS1kZXZlbG9wZXJzPC9oMz4KQ29ubmVjdCB5b3VyIG1vZHVsZSB3aXRoIFRyZWVNYW5hZ2VyIHRocm91Z2ggPGI+R2V0TW9kdWxlSW5zdGFuY2U8L2I+KCkuPGJyIC8+CkNhbGxpbmcgbWFuZGF0b3J5IDxiPmluaXRUcmVlPC9iPih5b3VyX21vZHVsZSkgd2l0aCAkdGhpcyAodGhpcyBjYWxsIHlvdXIgR2V0TmFtZSgpIGZ1bmN0aW9uKSBvciB1c2UgYW55IHN0cmluZyB0aGF0IHlvdSB3YW50LCAkY3VzdG9tRmllbGQgaXMgYW4gYXJyYXkgb2YgeW91ciBjdXN0b20gZmllbGRzIGFuZCBvcHRpb25hbCAkbGFuZy48YnIgLz4KU3VyZWx5IHlvdSB3YW50IGFkZCBjdXN0b20gZmllbGRzLCBhZGQgdGhlbSB3aXRoIDxiPmFkZEN1c3RvbUZpZWxkPC9iPigpIGZ1bmN0aW9uIChzZWUgZXhhbXBsZSBiZWxvdykuPGJyIC8+Ck5vdyB5b3UgY2FuIHBsYXlpbmcgd2l0aCBBUEkgZnVuY3Rpb25zPGJyIC8+Cgo8YnIgLz4KPGg0PkluIG1ldGhvZC5pbnN0YWxsLnBocC9tZXRob2QudXBncmFkZS5waHAgdXNlOjwvaDQ+CjxwcmU+CgokdHJlZSA9JiAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoIlRyZWVNYW5hZ2VyIik7CmlmKCR0cmVlKQp7CgkkbXljdXN0b20gPSBhcnJheSgpOyAvL3B1dCB5b3VyIGN1cnJlbnQgY3VzdG9tIGZpZWxkcyBpbiB1cGdyYWRlIHByb2Nlc3MKCSRsYW5nID0gImVuX1VTIjsgLy9vcHRpb25hbAoJJHRyZWUtPmluaXRUcmVlKCR0aGlzLCAkbXljdXN0b20sICRsYW5nKTsKCgkJJG15c2NoZW1hID0gYXJyYXkoIm5hbWUiPT4iQygxNjUpIiwgImFsaWFzIj0+IkMoMTY1KSIsICJkZXNjcmlwdGlvbiI9PiJYIik7CgkkdHJlZS0+YWRkQ3VzdG9tRmllbGQoJG15c2NoZW1hKTsKfQplbHNlCnsKCWRpZSgiVHJlZU1hbmFnZXIgbW9kdWxlIG5vdCBmb3VuZCIpOwp9CjwvcHJlPgoKPGJyIC8+CjxoND5JbiBtZXRob2QudW5pbnN0YWxsLnBocCB1c2U6PC9oND4KPHByZT4KCiR0cmVlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgiVHJlZU1hbmFnZXIiKTsKaWYoJHRyZWUpCnsKCSRteWN1c3RvbSA9IGFycmF5KCJuYW1lIiwgImFsaWFzIiwgImRlc2NyaXB0aW9uIik7IC8veW91ciBjdXJyZW50IGN1c3RvbSBmaWVsZHMKCSRsYW5nID0gImVuX1VTIjsgLy9vcHRpb25hbAoJJHRyZWUtPmluaXRUcmVlKCR0aGlzLCAkbXljdXN0b20sICRsYW5nKTsKCglpZighICR0cmVlLT5kcm9wTW9kdWxlVGFibGUoKSkgZGllKCJUcmVlTWFuYWdlciBtb2R1bGUgZHJvcCBlcnJvciEiKTsKfQplbHNlCnsKCWRpZSgiVHJlZU1hbmFnZXIgbW9kdWxlIG5vdCBmb3VuZCIpOwp9CjwvcHJlPgoKPGJyIC8+CjxoND5JbiB5b3VyIG1vZHVsZSB1c2U6PC9oND4KPHByZT4KCiR0cmVlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgiVHJlZU1hbmFnZXIiKTsKaWYoJHRyZWUpCnsKCSRteWN1c3RvbSA9IGFycmF5KCJuYW1lIiwgImFsaWFzIiwgImRlc2NyaXB0aW9uIik7IC8veW91ciBjdXJyZW50IGN1c3RvbSBmaWVsZHMKCSRsYW5nID0gImVuX1VTIjsgLy9vcHRpb25hbAoJJHRyZWUtPmluaXRUcmVlKCR0aGlzLCAkbXljdXN0b20sICRsYW5nKTsKCgkvL0V4YW1wbGUgb2YgZWRpdGluZyBvcGVyYXRpb24KCQkkaW5wdXQgPSBhcnJheSgibmFtZSI9PiJSb290IiwgImFsaWFzIj0+InJvb3QiLCAiZGVzY3JpcHRpb24iPT4iUm9vdCBmb2xkZXIiKTsKCSRyb290X2lkID0gJHRyZWUtPmFkZFJvb3QoJGN1c3RvbSk7CgkJJGlucHV0ID0gYXJyYXkoIm5hbWUiPT4iTm9kZSBudW1iZXIxIiwgImFsaWFzIj0+Im5vZGUxIiwgImRlc2NyaXB0aW9uIj0+IkZpcnN0IE5vZGUiKTsKCSRub2RlMV9pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkcm9vdF9pZCwgJGN1c3RvbSk7CgkJJGlucHV0ID0gYXJyYXkoIm5hbWUiPT4iTm9kZSBudW1iZXIxMSIsICJhbGlhcyI9PiJub2RlMTEiLCAiZGVzY3JpcHRpb24iPT4iU2Vjb25kIE5vZGUiKTsKCSRub2RlMTFfaWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJG5vZGUxX2lkLCAkY3VzdG9tKTsKCQkkaW5wdXQgPSBhcnJheSgibmFtZSI9PiJOb2RlIG51bWJlcjEyIiwgImFsaWFzIj0+Im5vZGUxMiIsICJkZXNjcmlwdGlvbiI9PiJUaGlyZCBOb2RlIEJlZm9yZSIpOwoJJG5vZGUxMl9pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkbm9kZTFfaWQsICRjdXN0b20sIDEpOwoKCSRib29sID0gJHRyZWUtPmRlbGV0ZU5vZGUoJG5vZGUxMV9pZCk7CgoJLy9FeGFtcGxlIG9mIGZldGNoaW5nCgkkbm9kZV9hcnJheSA9ICR0cmVlLT5nZXROb2RlKCRub2RlMV9pZCk7Cn0KZWxzZQp7CglkaWUoIlRyZWVNYW5hZ2VyIG1vZHVsZSBub3QgZm91bmQiKTsKfQo8L3ByZT4KCjxiciAvPgo8aDM+TWV0aG9kczwvaDM+CjxkbD4KCTxkdD4odm9pZCkgPGI+aW5pdFRyZWU8L2I+KCAkbW9kdWxlLCAkY3VzdG9tRmllbGQ9YXJyYXkoKSwgJGxhbmc9ImVuX1VTIiApPC9kdD4KCTxkZD48cD48Yj5NQU5EQVRPUlk8L2I+LiBJbml0aWFsaXplIGRhdGEgYW5kIGNoZWNrIHlvdXIgdGFibGVzLiBJZiB5b3VyIHRhYmxlcyBub3QgZXhpc3QgY3JlYXRlIHR3byB0YWJsZXM6IG5vZGUgKGhpZXJhcmNoeSkgYW5kIGNvbnRlbnQgKGN1c3RvbSkuPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5zZXRDbXNEcm9wZG93bjwvYj4oICRhcnIsICRvcHRpb249ImlkIiwgJGZvcm1hdD10cnVlICk8L2R0PgoJPGRkPjxwPlJldHVybiBhbiBhcnJheSBmb3IgQ01TIENyZWF0ZUlucHV0RHJvcGRvd24gbWV0aG9kLiAkb3B0aW9uIGlzIHRoZSBmaWVsZCB0aGF0IGRpc3BsYXkgaW4gb3B0aW9uLCB2YWx1ZSBpcyBpZCBmaWVsZCBvZiBhcnJheS4gSWYgJGZvcm1hdCBpcyB0cnVlIGl0IGRpc3BsYXkgYW4gaW5kZW50IGhpZXJhcmNoeWhpZSB3aXRoIGxldmVsIGZpZWxkLjwvcD48L2RkPgoJPGR0Pihib29sZWFuKSA8Yj5kcm9wTW9kdWxlVGFibGU8L2I+KCk8L2R0PgoJPGRkPjxwPkRyb3AgYWxsIG1vZHVsZSB0YWJsZXMuIFVzZWZ1bCBpbiBtZXRob2QudW5pbnN0YWxsLnBocDwvcD48L2RkPgoJPGR0Pihib29sZWFuKSA8Yj5pblRyYW5zYWN0aW9uPC9iPigpPC9kdD4KCTxkZD48cD5SZXR1cm4gaWYgY3VycmVudCB0cmFuc2FjdGlvbiBsb2NraW5nIGlzIGluIG9yIG5vdC48L3A+PC9kZD4KCTxkdD4odm9pZCkgPGI+c2V0UGVyaW9kVHJhbnNhY3Rpb248L2I+KCAkcGVyaW9kPTEyMCApPC9kdD4KCTxkZD48cD5TZXQgZXhwaXJlIHBlcmlvZCBvZiB0cmFuc2FjdGlvbiBsb2NraW5nIGZvciBhdm9pZCBwcm9ibGVtLiBEZWZhdWx0IGlzIDEyMCBzZWNvbmRzLjwvcD48L2RkPgoJPGR0Pih2b2lkKSA8Yj5lbmRUcmFuc2FjdGlvbjwvYj4oKTwvZHQ+Cgk8ZGQ+PHA+RnJlZWluZyB0cmFuc2FjdGlvbiBsb2NraW5nIGZvciBhdm9pZCBwcm9ibGVtLjwvcD48L2RkPgo8L2RsPgoKPGJyIC8+CjxoMz5GdW5jdGlvbiBBUEkgZWRpdGluZzwvaDM+CjxwPlJldHVybiBib29sZWFuIGZhbHNlIG9uIGZhaWx1cmU8L3A+CjxkbD4KCTxkdD4oaW50ZWdlcikgPGI+YWRkUm9vdDwvYj4oICRpbnB1dD1hcnJheSgpLCAkZm9yY2VpZD1mYWxzZSApPC9kdD4KCTxkZD48cD5DcmVhdGUgYSByb290IE5vZGUuIElmIHlvdSBoYXZlIGFueSBjdXN0b20gZmllbGRzLCB5b3UgY2FuIHBhc3MgdmFsdWVzIHRocm91Z2ggJGlucHV0IGFycmF5OiAoImZpZWxkIj0+JHZhbHVlKS4gSWYgeW91IHB1dCBhIGludGVnZXIgJGZvcmNlaWQgKGF0IHlvdXIgb3duIHJpc2shKSB5b3UgZm9yY2UgdGhpcyAkSUQgYW5kIG5vdCBhIHNlcXVlbnRpYWwgJElELiBSZXR1cm4gJElEIG9mIHJvb3QgTm9kZS48L3A+PC9kZD4KCTxkdD4oaW50ZWdlcikgPGI+YWRkQ2hpbGRyZW48L2I+KCAkaWQsICRpbnB1dD1hcnJheSgpLCAkb3JkZXI9LTEsICRmb3JjZWlkPWZhbHNlICk8L2R0PgoJPGRkPjxwPkNyZWF0ZSBhIG5ldyBOb2RlIGFzIGEgZGVzY2VuZGVudCBvZiBhbm90aGVyIG5vZGUgKHdob3NlICRpZCBpcyB0aGUgcGFyZW50KS4gU2V0dGluZyAkaWQgdG8gMCwgLTEgb3Igbm90IGV4aXN0IHlldCB0aGVuIHdpbGwgY2FsbCBhZGRSb290KCkuIFlvdSBjYW4gcGFzcyB2YWx1ZXMgb2YgY3VzdG9tIGZpZWxkcyB0aHJvdWdoICRpbnB1dCBhcnJheS4gJG9yZGVyPS0xIGFkZCBub2RlIGFmdGVyIG90aGVyIGNoaWxkcmVucywgb3RoZXJ3aXNlIGFkZCBub2RlIGJlZm9yZSBvdGhlcnMsIGRlZmF1bHQgLTEuIElmIHlvdSBwdXQgYSBpbnRlZ2VyICRmb3JjZWlkIChhdCB5b3VyIG93biByaXNrISkgeW91IGZvcmNlIHRoaXMgJElEIGFuZCBub3QgYSBzZXF1ZW50aWFsICRJRC4gUmV0dXJuICRpZCBvZiBuZXcgTm9kZS48L3A+PC9kZD4KCTxkdD4oYm9vbGVhbikgPGI+bW92ZU5vZGU8L2I+KCAkaWQsICRuZXdwYXJlbnQsICRvcmRlcj0tMSApPC9kdD4KCTxkZD48cD5Nb3ZlIE5vZGUgJGlkIHRvIGRlc2NlbmRlbnQgb2YgYW5vdGhlciBub2RlICRuZXdwYXJlbnQuIElmIE5vZGUgJGlkIGFuZCBOb2RlICRuZXdwYXJlbnQgaGF2ZSBzYW1lIHBhcmVudCB0aGVuIHJ1biA8Yj5tb3ZlT3JkZXJOb2RlPC9iPiBmdW5jdGlvbi4gJG9yZGVyPS0xIGFkZCBub2RlIGFmdGVyIG90aGVyIGNoaWxkcmVucywgb3RoZXJ3aXNlIGFkZCBub2RlIGJlZm9yZSBvdGhlcnMsIGRlZmF1bHQgLTEuIFJldHVybiBib29sZWFuIHRydWUuPC9wPjwvZGQ+Cgk8ZHQ+KGJvb2xlYW4pIDxiPm1vdmVPcmRlck5vZGU8L2I+KCAkaWQsICRuZXdpZD0tMSwgJG5ld29yZGVyPS0xICk8L2R0PgoJPGRkPjxwPk1vdmUgTm9kZSAkaWQgdG8gcGxhY2Ugb2YgJG5ld2lkIG9yICRuZXdvcmRlciwgdXAgb3IgZG93biBpbiBzYW1lIHN1YnRyZWUgKHBhcmVudCkuIFJldHVybiBib29sZWFuIHRydWUuPC9wPjwvZGQ+Cgk8ZHQ+KG1peGVkKSA8Yj5kZWxldGVOb2RlPC9iPiggJGlkICk8L2R0PgoJPGRkPjxwPkRlbGV0ZSB0aGUgTm9kZSB3aXRoICRpZC4gVGhpcyB3aWxsIGFsc28gZGVsZXRlIGFueSBkZXNjZW5kZW50cyBvZiB0aGlzIG5vZGUuIFJldHVybiBib29sZWFuIHRydWUgb3IgaW50ZWdlciAwIGlmIHlvdSB0cnkgdG8gZGVsZXRlIGFsaWFzIG5vZGUgZm9yIG90aGVycy48L3A+PC9kZD4KCTxkdD4odm9pZCkgPGI+YWRkQ3VzdG9tRmllbGQ8L2I+KCAkc2NoZW1hPWFycmF5KCkgKTwvZHQ+Cgk8ZGQ+PHA+QWRkIGN1c3RvbSBmaWVsZHMgdGhyb3VnaCAkaW5wdXQgYXJyYXkuIEFkZCBjb2x1bW4gKGFuZCBjcmVhdGUgaWYgbm90KSB0byBjb250ZW50IHRhYmxlLjwvcD48L2RkPgoJPGR0Pihib29sZWFuKSA8Yj51cGRhdGVDdXN0b208L2I+KCAkaWQsICRpbnB1dD1hcnJheSgpICk8L2R0PgoJPGRkPjxwPlVwZGF0ZSB2YWx1ZXMgb2YgY3VzdG9tIGZpZWxkcyBvZiAkaWQsIGluIGNvbnRlbnQgdGFibGUsIHRocm91Z2ggJGlucHV0IGFycmF5LiBSZXR1cm4gYm9vbGVhbiB0cnVlLjwvcD48L2RkPgoJPGR0Pihib29sZWFuKSA8Yj51cGRhdGVDb250ZW50QWxpYXM8L2I+KCAkaWQsICRhbGlhc25vZGUgKTwvZHQ+Cgk8ZGQ+PHA+U2V0IGEgQ29udGVudCBBbGlhcyBvZiAkYWxpYXNub2RlLiBOb3cgeW91IHJldHJpZXZlIGNvbnRlbnQgdmFsdWUgZnJvbSAkYWxpYXNub2RlIGFuZCBub3QgZnJvbSAkaWQuIFJldHVybiBib29sZWFuIHRydWUuPC9wPjwvZGQ+Cgk8ZHQ+KGJvb2xlYW4pIDxiPmRlbGV0ZUNvbnRlbnRBbGlhczwvYj4oICRpZCApPC9kdD4KCTxkZD48cD5EZWxldGUgQ29udGVudCBBbGlhcyBvZiBOb2RlICRpZC4gTm93IHlvdSByZXRyaWV2ZSBjb250ZW50IHZhbHVlIGZyb20gJGlkIGFuZCBub3QgZnJvbSBwcmV2IGFsaWFzIG5vZGUuIFJldHVybiBib29sZWFuIHRydWUuPC9wPjwvZGQ+CjwvZGw+Cgo8YnIgLz4KPGgzPkZ1bmN0aW9uIEFQSSBmZXRjaGluZzwvaDM+CjxwPlJldHVybiBhcnJheSwgaW50ZWdlciBvciBib29sZWFuIHRydWUgb24gc3VjY2VzcyBhbmQgYm9vbGVhbiBmYWxzZSBvbiBmYWlsdXJlLjxiciAvPgpGaWVsZHMgb2YgPGI+bm9kZSB0YWJsZTwvYj4gYXJlOiBpZCwgcGFyZW50LCBsZnQsIHJndCwgbGV2ZWwsIG5vcmRlci4gRmllbGRzIG9mIDxiPmNvbnRlbnQgdGFibGU8L2I+IGFyZSB5b3VyIGN1c3RvbSBjb250ZW50IGZpZWxkcy48YnIgLz4KJHRyZWUtPm51bU5vZGVJbnZvbHZlZCBjb3VudCBOb2RlcyA8Yj5pbnZvbHZlZDwvYj4gaW4gb3BlcmF0aW9uIChpZiA+IDEgeW91IGhhdmUgJHRyZWUtPmFyck5vZGVJbnZvbHZlZCBhbHNvIHdpdGggaW5mb3JtYXRpb24gb2YgdGhhdCBub2RlcykuIEkuRS4gZ2V0Q2hpbGRyZW4oImFsaWFzIiwgJHZhbHVlKSB3aXRoIDIgbm9kZXMgd2l0aCBzYW1lIGFsaWFzICR2YWx1ZSByZXR1cm4gYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5IG9mIDIgYXJyYXkgd2l0aCByZWxhdGl2ZSBjaGlsZHJlbiwgbnVtTm9kZUludm9sdmVkID0gMiBhbmQgYXJyTm9kZUludm9sdmVkIGlzIGFuIGFycmF5IG9mIDIgbm9kZXMuPC9wPgo8ZGw+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXRDdXN0b21GaWVsZHM8L2I+KCk8L2R0PgoJPGRkPjxwPkdldCBsaXN0IGFib3V0IHlvdXIgY3VycmVudCA8Yj5DdXN0b20gRmllbGRzPC9iPi48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPmdldEFsbE5vZGVGaWVsZHM8L2I+KCk8L2R0PgoJPGRkPjxwPkdldCBsaXN0IGFib3V0IDxiPkFsbCBOb2RlIEZpZWxkczwvYj46IGZpZWxkcyBvZiA8Yj5ub2RlIHRhYmxlPC9iPiBhbmQgPGI+Y29udGVudCB0YWJsZTwvYj4uPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXRSb290PC9iPigpPC9kdD4KCTxkZD48cD5HZXQgYXJyYXkgaW5mb3JtYXRpb24gYWJvdXQgcm9vdCBOb2RlLjwvcD48L2RkPgoJPGR0PihhcnJheSkgPGI+Z2V0Tm9kZTwvYj4oICRpZCApPC9kdD4KCTxkZD48cD5HZXQgYXJyYXkgaW5mb3JtYXRpb24gYWJvdXQgTm9kZSB3aXRoICRpZC48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPmdldEJ5Tm9kZUZpZWxkPC9iPiggJGZpZWxkPSJpZCIsICR2YWx1ZSwgJG9yZGVyYnk9ImxmdCIgKTwvZHQ+Cgk8ZGQ+PHA+R2V0IGFycmF5KHMpIGluZm9ybWF0aW9uIGFib3V0IE5vZGUgYnkgJGZpZWxkIG9mIDxiPkFsbCBOb2RlIEZpZWxkczwvYj4sIGRlZmF1bHQgaXMgaWQuICRvcmRlcmJ5IG9yZGVyIG91dHB1dCBhcnJheSAobGZ0fHJndHxub3JkZXIgQVNDfERFU0MpLCBkZWZhdWx0IGlzICJsZnQiLiBDaGVjayAkdHJlZS0+bnVtTm9kZUludm9sdmVkOiBpZiA9IDEgdGhlbiB5b3UgaGF2ZSBhcnJheSBpbmZvcm1hdGlvbiBvZiBub2RlSUQuPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXRCeUN1c3RvbUZpZWxkPC9iPiggJGZpZWxkPSJpZCIsICR2YWx1ZSwgJG9yZGVyYnk9ImxmdCIgKTwvZHQ+Cgk8ZGQ+PHA+QWxpYXMgb2YgPGI+Z2V0QnlOb2RlRmllbGQ8L2I+KCksICRmaWVsZCA8Yj5pZDwvYj4gb3IgPGI+Q3VzdG9tIEZpZWxkczwvYj4sIGRlZmF1bHQgaXMgaWQuPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXRQYXJlbnQ8L2I+KCAkZmllbGQ9ImlkIiwgJHZhbHVlICk8L2R0PgoJPGRkPjxwPkdldCBhcnJheShzKSBpbmZvcm1hdGlvbiBhYm91dCBQYXJlbnQgTm9kZSBieSAkZmllbGQgPGI+aWQ8L2I+IG9yIDxiPkN1c3RvbSBGaWVsZHM8L2I+LCBkZWZhdWx0IGlzIGlkLiBDaGVjayAkdHJlZS0+bnVtTm9kZUludm9sdmVkLCBpZiA9IDEgdGhlbiB5b3UgaGF2ZSBhcnJheSBpbmZvcm1hdGlvbiBvZiBub2RlSUQgYW5kIGNoZWNrICR0cmVlLT5hcnJOb2RlSW52b2x2ZWQgaWYgPjEuPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXRTaWJsaW5nPC9iPiggJGZpZWxkPSJpZCIsICR2YWx1ZSwgJG9yZGVyYnk9Im5vcmRlciIsICRub2N1cnJlbnQ9ZmFsc2UsICRpZHg9ImlkIiApPC9kdD4KCTxkZD48cD5HZXQgYXJyYXkocykgaW5mb3JtYXRpb25zIGFib3V0IFNpYmxpbmcgTm9kZXMgKEFkamFjZW50cykgYnkgJGZpZWxkIDxiPmlkPC9iPiBvciA8Yj5DdXN0b20gRmllbGRzPC9iPiwgZGVmYXVsdCBpcyBpZC4gJG9yZGVyYnkgb3JkZXIgb3V0cHV0IGFycmF5IChub3JkZXJ8bGZ0fHJndCBBU0N8REVTQyksIGRlZmF1bHQgaXMgIm5vcmRlciIuIElmICRub2N1cnJlbnQgaXMgdHJ1ZSwgc2tpcCBmb3VuZGVkIE5vZGUgZnJvbSByZXN1bHQuICRpZHggcHV0IHRoaXMgZmllbGQsIG51bWVyaWMgZmllbGQgaWYgZW1wdHksIGluIGtleSBhcnJheSwgZGVmYXVsdCBpcyBpZC4gQ2hlY2sgJHRyZWUtPm51bU5vZGVJbnZvbHZlZC8kdHJlZS0+YXJyTm9kZUludm9sdmVkLjwvcD48L2RkPgoJPGR0PihpbnRlZ2VyKSA8Yj5nZXRTaWJsaW5nQ291bnQ8L2I+KCAkaWQgKTwvZHQ+Cgk8ZGQ+PHA+SG93IG1hbnkgU2libGluZyBOb2RlcyBvZiBOb2RlICRpZD88L3A+PC9kZD4KCTxkdD4oYm9vbGVhbikgPGI+aGFzX2NoaWxkcmVuPC9iPiggJGlkICk8L2R0PgoJPGRkPjxwPkhhcyBjaGlsZHJlbiBOb2RlICRpZD8gQm9vbGVhbiB0cnVlL2ZhbHNlLjwvcD48L2RkPgoJPGR0PihhcnJheSkgPGI+Z2V0Q2hpbGRyZW48L2I+KCAkZmllbGQ9ImlkIiwgJHZhbHVlLCAkZGVwdGg9MSwgJG9yZGVyYnk9ImxldmVsLG5vcmRlciIsICRub2N1cnJlbnQ9ZmFsc2UsICRpZHg9IiIsICRmaWVsZGFsbG93PSIiLCAkdmFsdWVhbGxvdz1mYWxzZSwgJGZpZWxkZGVueT0iIiwgJHZhbHVlZGVueT1mYWxzZSApPC9kdD4KCTxkZD48cD5HZXQgYXJyYXkocykgaW5mb3JtYXRpb25zIGFib3V0IENoaWxkcmVuIE5vZGVzIGJ5ICRmaWVsZCA8Yj5pZDwvYj4gb3IgPGI+Q3VzdG9tIEZpZWxkczwvYj4sIGRlZmF1bHQgaXMgaWQuIFNldHRpbmcgJGRlcHRoIHRvIDAgb3IgZ3JlYXRlciBnZXQgY2hpbGRyZW4gb2YgJGRlcHRoIHN1YmxldmVsIG9ubHksIHdpdGggLTEgZ2V0IGFsbCBDaGlsZHJlbnM7IGRlZmF1bHQgaXMgMSAoZmlyc3QgZGVwdGggY2hpbGRyZW5zKS4gJG9yZGVyYnkgb3JkZXIgb3V0cHV0IGFycmF5IChsZXZlbHxub3JkZXJ8bGZ0fHJndCBBU0N8REVTQyksIGRlZmF1bHQgaXMgImxldmVsLG5vcmRlciIuIElmICRub2N1cnJlbnQgaXMgdHJ1ZSwgc2tpcCAkbm9kZSBmcm9tIHJlc3VsdC4gJGlkeCBwdXQgdGhpcyBmaWVsZCwgbnVtZXJpYyBmaWVsZCBpZiBlbXB0eSwgaW4ga2V5IGFycmF5LCBkZWZhdWx0IGlzIGVtcHR5LiAkZmllbGRhbGxvdyBhbmQgJHZhbHVlYWxsb3csICRmaWVsZGRlbnkgYW5kICR2YWx1ZWRlbnkgYXJlIGZvciBsaW1pdCB0byBhbGxvdyBvciBkZW55IG9ubHkgdG8gdGhpczsgcGVyZm9ybSBhIHNxbCBMSUtFIG9yIE5PVCBMSUtFIG9wZXJhdGlvbi4gQ2hlY2sgJHRyZWUtPm51bU5vZGVJbnZvbHZlZC8kdHJlZS0+YXJyTm9kZUludm9sdmVkLjwvcD48L2RkPgoJPGR0PihpbnRlZ2VyKSA8Yj5nZXRDaGlsZHJlbkNvdW50PC9iPiggJGZpZWxkPSJpZCIsICR2YWx1ZSApPC9kdD4KCTxkZD48cD5Ib3cgbWFueSBDaGlsZHJlbiBOb2RlcyBieSAkZmllbGQgPGI+aWQ8L2I+IG9yIDxiPkN1c3RvbSBGaWVsZHM8L2I+LCBkZWZhdWx0IGlzIGlkPzwvcD48L2RkPgoJPGR0PihpbnRlZ2VyKSA8Yj5nZXRDb3VudE5vZGVzPC9iPigpPC9kdD4KCTxkZD48cD5SZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgTm9kZXMgaW4gYSB0cmVlLjwvcD48L2RkPgoJPGR0PihhcnJheSkgPGI+Z2V0QnlMZXZlbDwvYj4oICRsZXZlbD0wLCAkb3JkZXJieT0ibGZ0IiApPC9kdD4KCTxkZD48cD5BbGlhcyBvZiA8Yj5nZXRCeU5vZGVGaWVsZDwvYj4oImxldmVsIiwgJGxldmVsLCAkb3JkZXJieSkuIEdldCBhcnJheShzKSAobW9ub2RpbWVuc2lvbmFsKSBpbmZvcm1hdGlvbnMgYWJvdXQgTm9kZXMgd2l0aCBsZXZlbCAkbGV2ZWwsIGRlZmF1bHQgMCAocm9vdCkgYW5kIGxlZnQgc29ydGluZy4gWW91IGNhbiBjaGVjayAkdHJlZS0+bnVtTm9kZUludm9sdmVkIGZvciBob3cgbWFueSBub2Rlcy48L3A+PC9kZD4KCTxkdD4oaW50ZWdlcikgPGI+Z2V0TWF4RGVwdGg8L2I+KCk8L2R0PgoJPGRkPjxwPkdldCBtYXggRGVwdGggb2Ygd2hvbGUgdHJlZS48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPmdldExlYWY8L2I+KCAkb3JkZXJieT0ibGZ0IiApPC9kdD4KCTxkZD48cD5HZXQgYXJyYXkocykgKG1vbm9kaW1lbnNpb25hbCkgaW5mb3JtYXRpb25zIGFib3V0IGFsbCBMZWFmIE5vZGVzLiAkb3JkZXJieSBvcmRlciBvdXRwdXQgYXJyYXkgKGxldmVsfG5vcmRlcnxsZnR8cmd0IEFTQ3xERVNDKSwgZGVmYXVsdCBpcyAibGZ0Ii4gWW91IGNhbiBjaGVjayAkdHJlZS0+bnVtTm9kZUludm9sdmVkIGZvciBob3cgbWFueSBub2Rlcy48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPmdldFN1Yk5vZGVzPC9iPiggJG5vZGUsICRkZXB0aD0xLCAkb3JkZXJieT0ibGV2ZWwsbm9yZGVyIiwgJG5vY3VycmVudD1mYWxzZSwgJGlkeD0iIiwgJGZpZWxkYWxsb3c9IiIsICR2YWx1ZWFsbG93PWZhbHNlLCAkZmllbGRkZW55PSIiLCAkdmFsdWVkZW55PWZhbHNlICk8L2R0PgoJPGRkPjxwPlNhbWUgb2YgPGI+Z2V0Q2hpbGRyZW48L2I+KCkgYnV0IHdpdGggYSB0YWtlIGEgY29tcGxldGUgJG5vZGUgYXJyYXkgKG1hbmRhdG9yeSBsZnQscmd0LGxldmVsIGtleSkuPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXRCcmVhZGNydW1iczwvYj4oICRmaWVsZD0iaWQiLCAkdmFsdWUsICRpZHg9ImlkIiwgJG5vcm9vdD1mYWxzZSwgJG5vY3VycmVudD1mYWxzZSwgJGNoZWNrPSIiLCAkcmV2ZXJzZT1mYWxzZSwgJG9yZGVyYnk9IiIgKTwvZHQ+Cgk8ZGQ+PHA+R2V0IGFycmF5KHMpIGluZm9ybWF0aW9uIGFib3V0IFBhdGggTm9kZSBieSAkZmllbGQgPGI+aWQ8L2I+IG9yIDxiPkN1c3RvbSBGaWVsZHM8L2I+LCBkZWZhdWx0IGlzIGlkLiAkaWR4IHB1dCB0aGlzIGZpZWxkLCBudW1lcmljIGZpZWxkIGlmIGVtcHR5LCBpbiBrZXkgYXJyYXksIGRlZmF1bHQgaXMgaWQuICRub3Jvb3QgdHJ1ZSBza2lwIHJvb3Qgbm9kZSwgZGVmYXVsdCBmYWxzZS4gJG5vY3VycmVudCB0cnVlIHNraXAgY3VycmVudCBub2RlLCBkZWZhdWx0IGZhbHNlLiBJZiAkY2hlY2sgaXMgc2V0IHlvdSBjYW4gc2VsZWN0IGV4YWN0IHBhdGggdGhhdCBtYXRjaCAkZmllbGQgd2l0aCAkdmFsdWUuIENoZWNrICR0cmVlLT5udW1Ob2RlSW52b2x2ZWQvJHRyZWUtPmFyck5vZGVJbnZvbHZlZC48L3A+PC9kZD4KCTxkdD4oYm9vbGVhbikgPGI+bWF0Y2hIaWVyYXJjaHk8L2I+KCAkcGF0aCwgJGZpZWxkLCAkZGVsaW1pdGVyPSIvIiApPC9kdD4KCTxkZD48cD5tYXRjaCBoaWVyYXJjaHkgc3RyaW5nICRwYXRoIHdpdGggYSB0cmVlIHBhdGggd2hlbiBhcmUgbWFkZSB3aXRoICRmaWVsZCBhbmQgJGRlbGltaXRlcj8gQm9vbGVhbiB0cnVlL2ZhbHNlLjwvcD48L2RkPgoJPGR0PihhcnJheSkgPGI+Z2V0VHJlZTwvYj4oICRkZXB0aD0tMSwgJG9yZGVyYnk9ImxmdCIsICRpZHg9IiIsICRmaWVsZGFsbG93PSIiLCAkdmFsdWVhbGxvdz1mYWxzZSwgJGZpZWxkZGVueT0iIiwgJHZhbHVlZGVueT1mYWxzZSApPC9kdD4KCTxkZD48cD5XaG9sZSBhcnJheSBOb2RlIHN0cnVjdHVyZSBvZiB0aGUgdHJlZS4gU2V0dGluZyAkZGVwdGggdG8gMCBvciBncmVhdGVyIGdldCBOb2RlcyBvZiAkZGVwdGggb25seSwgd2l0aCAtMSBnZXQgYWxsIE5vZGVzOyBkZWZhdWx0IGlzIC0xIChhbGwgbm9kZXMpLiAkb3JkZXJieSBvcmRlciBvdXRwdXQgYXJyYXkgKGxldmVsfG5vcmRlcnxsZnR8cmd0IEFTQ3xERVNDKSwgZGVmYXVsdCBpcyAibGZ0Ii4gJGlkeCBwdXQgdGhpcyBmaWVsZCwgbnVtZXJpYyBmaWVsZCBpZiBlbXB0eSwgaW4ga2V5IGFycmF5LCBkZWZhdWx0IGlzIGVtcHR5LiAkZmllbGRhbGxvdyBhbmQgJHZhbHVlYWxsb3csICRmaWVsZGRlbnkgYW5kICR2YWx1ZWRlbnkgYXJlIGZvciBsaW1pdCB0byBhbGxvdyBvciBkZW55IG9ubHkgdG8gdGhpczsgcGVyZm9ybSBhIHNxbCBMSUtFIG9yIE5PVCBMSUtFIG9wZXJhdGlvbi48L3A+PC9kZD4KCTxkdD48Yj5kdW1wVHJlZTwvYj4oICRkZXB0aD0tMSwgJG9yZGVyYnk9ImxmdCIsICRmaWVsZGFsbG93PSIiLCAkdmFsdWVhbGxvdz1mYWxzZSwgJGZpZWxkZGVueT0iIiwgJHZhbHVlZGVueT1mYWxzZSApPC9kdD4KCTxkZD5BbGlhcyBvZiBnZXRUcmVlKCkgZnVuY3Rpb24uIER1bXAgd2hvbGUgTm9kZSBzdHJ1Y3R1cmUgb2YgdGhlIHRyZWUgaW4gYSBzbWFydHkgdGVtcGxhdGUuPC9wPjwvZGQ+CjwvZGw+Cgo8YnIgLz4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+Cgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDksIEFsYmVydG8gQmVuYXRpIDxhIGhyZWY9Im1haWx0bzpjbXNAeG1lLml0Ij5hbGJ5PC9hPi48YnIgLz4KU29tZSBSaWdodHMgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUKPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LgpZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgo8aDM+UGFyYW1ldHJpPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldHJvIHBlciBzcGVjaWZpY2FyZSBxdWFsZSBsaW5ndWFnZ2lvIHVzYXJlIHBlciBsJiMwMzk7aW50ZXJmYWNjaWEuIE5vbiB0dXR0aSBpIG1vZHVsaSBzdXBwb3J0YW5vIG8gbmVjZXNzaXRhbm8gZGkgcXVlc3RvIHBhcmFtZXRyby48L2xpPjwvdWw+</help>
	<about>PGJyIC8+QXV0b3JlOiBhbGJ5ICZsdDtjbXNAeG1lLml0Jmd0OzxiciAvPjxiciAvPlZlcnNpb25lOiAwLjYuMDxiciAvPjxiciAvPkNhbWJpYSBsbyBzdG9yaWNvOjxiciAvPjx1bD4KCiAgPGxpPlZlcnNpb24gMC4xLjEgQXByLCAyMDA5LiBJbml0aWFsIHJlbGVhc2U8L2xpPgogIDxsaT5WZXJzaW9uIDAuMi4wIEFwciwgMjAwOS4gSW1wbGVtZW50IGVuaGFuY2VkIENlbGtvPC9saT4KICA8bGk+VmVyc2lvbiAwLjMuMCBBcHIsIDIwMDkuIEltcGxlbWVudCBlZGl0aW5nIEFQSTwvbGk+CiAgPGxpPlZlcnNpb24gMC4zLjEgQXByLCAyMDA5LiBJbXBsZW1lbnQgZmV0Y2hpbmcgQVBJPC9saT4KICA8bGk+VmVyc2lvbiAwLjQuMCBBcHIsIDIwMDkuIEltcGxlbWVudCBjdXN0b20gZmllbGRzPC9saT4KICA8bGk+VmVyc2lvbiAwLjQuMSBBcHIsIDIwMDkuIEhlbHAgYW5kIGJ1Z2ZpeDwvbGk+CiAgPGxpPlZlcnNpb24gMC40LjIgQXByLCAyMDA5LiBQb3N0Z3JlU1FMIGxvdmU8L2xpPgogIDxsaT5WZXJzaW9uIDAuNS4wIEFwciwgMjAwOS4gQWRkIG51bU5vZGVJbnZvbHZlZC4gUkVXUk9URSBlZGl0aW5nIGZ1bmN0aW9uczogcG9zdGdyZVNRTCBidWdneSBpbiBhZG9kYl9saXRlLCBhZmZlY3RlZF9yb3dzIGlzIGZhbHNlIGFsd2F5cyE8L2xpPgogIDxsaT5WZXJzaW9uIDAuNi4wIE1heSwgMjAwOS4gQWRkIENvbnRlbnQgQWxpYXMgYW5kIG1hdGNoSGllcmFyY2h5IHBhdGguIEFkZCBFdmVudHM8L2xpPgoKPC91bD48YnIgLz4=</about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.example.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyogRXhhbXBsZSBvZiBUcmVlTWFuYWdlciBpbnRlZ3JhdGlvbiAqLwoKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCi8qIEJlZ2luIG1ldGhvZC5pbnN0YWxsL3VwZ3JhZGUucGhwICovCgokdHJlZSA9JiAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoIlRyZWVNYW5hZ2VyIik7CmlmKCR0cmVlKQp7CgkkY3VzdG9tRmllbGQgPSBhcnJheSgiIik7IC8veW91ciBjdXJyZW50IGN1c3RvbSBmaWVsZHMgaW4gdXBncmFkZSBwcm9jZXNzCgkkbGFuZyA9ICJlbl9VUyI7IC8vb3B0aW9uYWwKCSR0cmVlLT5pbml0VHJlZSgndGVzdCcsICRjdXN0b21GaWVsZCwgJGxhbmcpOwoKCSR0ZXN0ID0gJHRyZWUtPmRyb3BNb2R1bGVUYWJsZSgpOwp2YXJfZHVtcCgkdGVzdCk7CgoKCgkkbXlzY2hlbWEgPSBhcnJheSgibmFtZSI9PiJDKDE2NSkiLCAiYWxpYXMiPT4iQygxNjUpIiwgImRlc2NyaXB0aW9uIj0+IlgiKTsKCSR0ZXN0ID0gJHRyZWUtPmFkZEN1c3RvbUZpZWxkKCRteXNjaGVtYSk7CnZhcl9kdW1wKCR0ZXN0KTsKfQplbHNlCnsKCWRpZSgiTW9kdWxlIG5vdCBmb3VuZCIpOwp9CgovKiBFbmQgbWV0aG9kLmluc3RhbGwvdXBncmFkZS5waHAgKi8KCgoKCgovKiBCZWdpbiBlZGl0aW5nIG9wZXJhdGlvbnMgKi8KCiR0cmVlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgiVHJlZU1hbmFnZXIiKTsKaWYoJHRyZWUpCnsKCSRteWZpZWxkID0gYXJyYXkoIm5hbWUiLCAiYWxpYXMiLCAiZGVzY3JpcHRpb24iKTsKCSRsYW5nID0gImVuX1VTIjsKCSR0cmVlLT5pbml0VHJlZSgndGVzdCcsICRteWZpZWxkLCAkbGFuZyk7CgoJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IkNNUyBQdWJsaXNoaW5nIiwgImFsaWFzIj0+ImNtc3B1YiIsICJkZXNjcmlwdGlvbiI9PiJDTVMgUHVibGlzaGluZyBzdG9yZSIpOwoJJHJvb3RfaWQgPSAkdHJlZS0+YWRkUm9vdCgkY3VzdG9tKTsKZWNobyAnJHJvb3RfaWQ6JzsKdmFyX2R1bXAoJHJvb3RfaWQpOwoKCQkkY3VzdG9tID0gYXJyYXkoIm5hbWUiPT4iQXJ0aWNsZSIsICJhbGlhcyI9PiJhcnRpY2xlIiwgImRlc2NyaXB0aW9uIj0+IkFydGljbGVzIG9uIENNUydzIik7CgkkYXJ0aWNsZV9pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkcm9vdF9pZCwgJGN1c3RvbSk7CgkJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IlRpcCIsICJhbGlhcyI9PiJ0aXAiLCAiZGVzY3JpcHRpb24iPT4iVGlwcyBhbmQgVHJpY2tzIik7CgkkdGlwX2lkID0gJHRyZWUtPmFkZENoaWxkcmVuKCRyb290X2lkLCAkY3VzdG9tKTsKCQkkY3VzdG9tID0gYXJyYXkoIm5hbWUiPT4iTWFudWFsIiwgImFsaWFzIj0+Im1hbnVhbCIsICJkZXNjcmlwdGlvbiI9PiJNYW51YWxzLCBob3d0byBhbmQgc3VwcG9ydHMiKTsKCSRtYW51YWxfaWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJHJvb3RfaWQsICRjdXN0b20pOwoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJNYWdhemluZSIsICJhbGlhcyI9PiJtYWdhemluZSIsICJkZXNjcmlwdGlvbiI9PiJXb3JsZCBtYWdhemluZXMgQ01TIHJlbGF0ZWQiKTsKCSRtYWdhemluZV9pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkcm9vdF9pZCwgJGN1c3RvbSk7CgkJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IkJvb2siLCAiYWxpYXMiPT4iYm9vayIsICJkZXNjcmlwdGlvbiI9PiJCb29rcywgZHJhZnQgYW5kIHdoYXRldmVyIENNUydzIik7CgkkYm9va19pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkcm9vdF9pZCwgJGN1c3RvbSk7CmVjaG8gImFkZENoaWxkcmVuKHskcm9vdF9pZH0sIEJvb2sgZGF0YSk6IjsKdmFyX2R1bXAoJGJvb2tfaWQpOwoKCQkkY3VzdG9tID0gYXJyYXkoIm5hbWUiPT4iQ01TTVMiLCAiYWxpYXMiPT4iY21zbXMiLCAiZGVzY3JpcHRpb24iPT4iQ01TIE1hZGUgU2ltcGxlIGFydGljbGVzIik7CgkkYXJ0aWNsZV9jbXNtc19pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkYXJ0aWNsZV9pZCwgJGN1c3RvbSk7CgkJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IkpPT01MQSIsICJhbGlhcyI9PiJqb29tbGEiLCAiZGVzY3JpcHRpb24iPT4iSk9PTUxBIGFydGljbGVzIik7CgkkYXJ0aWNsZV9qb29tbGFfaWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJGFydGljbGVfaWQsICRjdXN0b20pOwoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJEUlVQQUwiLCAiYWxpYXMiPT4iZHJ1cGFsIiwgImRlc2NyaXB0aW9uIj0+IkRSVVBBTCBhcnRpY2xlcyIpOwoJJGFydGljbGVfZHJ1cGFsX2lkID0gJHRyZWUtPmFkZENoaWxkcmVuKCRhcnRpY2xlX2lkLCAkY3VzdG9tKTsKCgkJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IkNNU01TIiwgImFsaWFzIj0+ImNtc21zIiwgImRlc2NyaXB0aW9uIj0+IkNNUyBNYWRlIFNpbXBsZSB0aXBzIik7CgkkdGlwX2Ntc21zX2lkID0gJHRyZWUtPmFkZENoaWxkcmVuKCR0aXBfaWQsICRjdXN0b20pOwoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJKT09NTEEiLCAiYWxpYXMiPT4iam9vbWxhIiwgImRlc2NyaXB0aW9uIj0+IkpPT01MQSB0aXBzIik7CgkkdGlwX2pvb21sYV9pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkdGlwX2lkLCAkY3VzdG9tKTsKCgkJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IkNNU01TIiwgImFsaWFzIj0+ImNtc21zIiwgImRlc2NyaXB0aW9uIj0+IkNNUyBNYWRlIFNpbXBsZSBtYW51YWwiKTsKCSRtYW51YWxfY21zbXNfaWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJG1hbnVhbF9pZCwgJGN1c3RvbSk7CgoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJDTVNNUyIsICJhbGlhcyI9PiJjbXNtcyIsICJkZXNjcmlwdGlvbiI9PiJDTVMgTWFkZSBTaW1wbGUgTWFnYXppbmUiKTsKCSRtYWdhemluZV9jbXNtc19pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkbWFnYXppbmVfaWQsICRjdXN0b20pOwplY2hvICJhZGRDaGlsZHJlbih7JG1hZ2F6aW5lX2lkfSwgQ01TIE1hZGUgU2ltcGxlIE1hZ2F6aW5lKToiOwp2YXJfZHVtcCgkbWFnYXppbmVfY21zbXNfaWQpOwoKCQkkY3VzdG9tID0gYXJyYXkoIm5hbWUiPT4iQ01TTVMiLCAiYWxpYXMiPT4iY21zbXMiLCAiZGVzY3JpcHRpb24iPT4iQ01TIE1hZGUgU2ltcGxlIEJvb2tzIik7CgkkYm9va19jbXNtc19pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkYm9va19pZCwgJGN1c3RvbSk7CgkJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IkpPT01MQSIsICJhbGlhcyI9PiJqb29tbGEiLCAiZGVzY3JpcHRpb24iPT4iSk9PTUxBIEJvb2tzIik7CgkkYm9va19qb29tbGFfaWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJGJvb2tfaWQsICRjdXN0b20pOwoKCQkkY3VzdG9tID0gYXJyYXkoIm5hbWUiPT4iTW9kdWxlIE5ld3MiLCAiYWxpYXMiPT4ibmV3cyIsICJkZXNjcmlwdGlvbiI9PiJNb2R1bGUgTmV3cyBpbiBkZWVwIik7CgkkYXJ0aWNsZV9jbXNtc19uZXdzX2lkID0gJHRyZWUtPmFkZENoaWxkcmVuKCRhcnRpY2xlX2Ntc21zX2lkLCAkY3VzdG9tKTsKCQkkY3VzdG9tID0gYXJyYXkoIm5hbWUiPT4iTW9kdWxlIE1hbmFnZXIiLCAiYWxpYXMiPT4ibW0iLCAiZGVzY3JpcHRpb24iPT4iTW9kdWxlIE1hbmFnZXIgaW4gZGVlcCIpOwoJJGFydGljbGVfY21zbXNfbW1faWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJGFydGljbGVfY21zbXNfaWQsICRjdXN0b20pOwoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJGaWxlIE1hbmFnZXIiLCAiYWxpYXMiPT4iZmlsZSIsICJkZXNjcmlwdGlvbiI9PiJGaWxlIE1hbmFnZXIgaW4gZGVlcCIpOwoJJGFydGljbGVfY21zbXNfZmlsZV9pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkYXJ0aWNsZV9jbXNtc19pZCwgJGN1c3RvbSk7CgkJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IlRyZWUgTWFuYWdlciIsICJhbGlhcyI9PiJ0cmVlIiwgImRlc2NyaXB0aW9uIj0+IlRyZWUgTWFuYWdlciBpbiBkZWVwIC0gZmlyc3QiKTsKCSRhcnRpY2xlX2Ntc21zX3RyZWVfaWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJGFydGljbGVfY21zbXNfaWQsICRjdXN0b20sIDEpOwplY2hvICJhZGRDaGlsZHJlbih7JGFydGljbGVfY21zbXNfaWR9LCBUcmVlIE1hbmFnZXIgZGF0YSwgbm9yZGVyPTEpOiI7CnZhcl9kdW1wKCRhcnRpY2xlX2Ntc21zX3RyZWVfaWQpOwoKCQkkY3VzdG9tID0gYXJyYXkoIm5hbWUiPT4iTW9kdWxlIFRyYW5zbGF0aW9ucyIsICJhbGlhcyI9PiJ0ciIsICJkZXNjcmlwdGlvbiI9PiJNb2R1bGUgVHJhbnNsYXRpb25zIGluIGRlZXAiKTsKCSRhcnRpY2xlX2Ntc21zX3RyX2lkID0gJHRyZWUtPmFkZENoaWxkcmVuKCRhcnRpY2xlX2Ntc21zX2lkLCAkY3VzdG9tKTsKCgkJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IlRoZW1lcyIsICJhbGlhcyI9PiJ0aGVtZSIsICJkZXNjcmlwdGlvbiI9PiJKT09NTEEgdGhlbWVzIik7CgkkYXJ0aWNsZV9qb29tbGFfdGhlbWVfaWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJGFydGljbGVfam9vbWxhX2lkLCAkY3VzdG9tKTsKCgkJJGN1c3RvbSA9IGFycmF5KCJuYW1lIj0+IlRpdGxlIE5ld3MiLCAiYWxpYXMiPT4ibmV3c3RpdGxlIiwgImRlc2NyaXB0aW9uIj0+IlRpdGxlIE5ld3MgdGlwIik7CgkkdGlwX2Ntc21zX25ld3N0aXRsZV9pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkdGlwX2Ntc21zX2lkLCAkY3VzdG9tKTsKCQkkY3VzdG9tID0gYXJyYXkoIm5hbWUiPT4iRWNvbW1lcmNlIiwgImFsaWFzIj0+ImVjb21tZXJjZSIsICJkZXNjcmlwdGlvbiI9PiJFY29tbWVyY2Ugd2l0aCBKT09NTEEiKTsKCSR0aXBfam9vbWxhX2Vjb21tZXJjZV9pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkdGlwX2pvb21sYV9pZCwgJGN1c3RvbSk7CgoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJNTEUgbWFudWFsIiwgImFsaWFzIj0+Im1sZSIsICJkZXNjcmlwdGlvbiI9PiJDTVMgTWFkZSBTaW1wbGUgTXVsdGlsaW5ndWFsIEVkaXRpb24gaG93dG8iKTsKCSRtYW51YWxfY21zbXNfbWxlX2lkID0gJHRyZWUtPmFkZENoaWxkcmVuKCRtYW51YWxfY21zbXNfaWQsICRjdXN0b20pOwoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJFY29tbWVyY2UiLCAiYWxpYXMiPT4iZWNvbW1lcmNlIiwgImRlc2NyaXB0aW9uIj0+IkVjb21tZXJjZSBzb2x1dGlvbiB3aXRoIENNUyBNYWRlIFNpbXBsZSIpOwoJJG1hbnVhbF9jbXNtc19lY29tbWVyY2VfaWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJG1hbnVhbF9jbXNtc19pZCwgJGN1c3RvbSk7CgoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJCdWlsZGluZyBXZWJzaXRlcyIsICJhbGlhcyI9PiJidWlsZGluZyIsICJkZXNjcmlwdGlvbiI9PiJCdWlsZGluZyBXZWJzaXRlcyB3aXRoIENNUyBNYWRlIFNpbXBsZSIpOwoJJGJvb2tfY21zbXNfYnVpbGRpbmdfaWQgPSAkdHJlZS0+YWRkQ2hpbGRyZW4oJGJvb2tfY21zbXNfaWQsICRjdXN0b20pOwoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJCdWlsZGluZyBXZWJzaXRlcyIsICJhbGlhcyI9PiJidWlsZGluZyIsICJkZXNjcmlwdGlvbiI9PiJCdWlsZGluZyBXZWJzaXRlcyB3aXRoIEpvb21sYSEiKTsKCSRib29rX2pvb21sYV9idWlsZGluZ19pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkYm9va19qb29tbGFfaWQsICRjdXN0b20pOwoKCgoJCSRjdXN0b20gPSBhcnJheSgibmFtZSI9PiJNTEUgbWFudWFsIHVwZCIsICJhbGlhcyI9PiJtbGUiLCAiZGVzY3JpcHRpb24iPT4iQ01TIE1hZGUgU2ltcGxlIE11bHRpbGluZ3VhbCBFZGl0aW9uOiBob3d0byB1cGRhdGVkIik7CgkkdXBkYXRlQ3VzdG9tID0gJHRyZWUtPnVwZGF0ZUN1c3RvbSgkbWFudWFsX2Ntc21zX21sZV9pZCwgJGN1c3RvbSk7CmVjaG8gInVwZGF0ZUN1c3RvbSh7JG1hbnVhbF9jbXNtc19tbGVfaWR9LCB1cGRhdGVkKToiOwp2YXJfZHVtcCgkdXBkYXRlQ3VzdG9tKTsKCgoJJG1vdmVOb2RlID0gJHRyZWUtPm1vdmVOb2RlKCRtYW51YWxfY21zbXNfZWNvbW1lcmNlX2lkLCAkdGlwX2Ntc21zX2lkLCAxKTsKZWNobyAibW92ZU5vZGUoeyRtYW51YWxfY21zbXNfZWNvbW1lcmNlX2lkfSwgVW5kZXIgVGlwLUNNU01TLCBiZWZvcmUgbm9yZGVyPTEpOiI7CnZhcl9kdW1wKCRtb3ZlTm9kZSk7CgoKCSR1cGRhdGVDb250ZW50QWxpYXMgPSAkdHJlZS0+dXBkYXRlQ29udGVudEFsaWFzKDcsIDEwKTsKZWNobyAidXBkYXRlQ29udGVudEFsaWFzKDcsIDEwKToiOwp2YXJfZHVtcCgkdXBkYXRlQ29udGVudEFsaWFzKTsKCgkkdXBkYXRlQ29udGVudEFsaWFzID0gJHRyZWUtPnVwZGF0ZUNvbnRlbnRBbGlhcyg5LCAxMCk7CmVjaG8gInVwZGF0ZUNvbnRlbnRBbGlhcyg5LCAxMCk6IjsKdmFyX2R1bXAoJHVwZGF0ZUNvbnRlbnRBbGlhcyk7CgoJJHVwZGF0ZUNvbnRlbnRBbGlhcyA9ICR0cmVlLT51cGRhdGVDb250ZW50QWxpYXMoJG1hZ2F6aW5lX2Ntc21zX2lkLCAxMCk7CmVjaG8gInVwZGF0ZUNvbnRlbnRBbGlhcygkbWFnYXppbmVfY21zbXNfaWQsIDEwKToiOwp2YXJfZHVtcCgkdXBkYXRlQ29udGVudEFsaWFzKTsKCgoJJGRlbGV0ZUNvbnRlbnRBbGlhcyA9ICR0cmVlLT5kZWxldGVDb250ZW50QWxpYXMoNyk7CmVjaG8gImRlbGV0ZUNvbnRlbnRBbGlhcyg3KToiOwp2YXJfZHVtcCgkZGVsZXRlQ29udGVudEFsaWFzKTsKCgoJJGRlbGV0ZU5vZGUgPSAkdHJlZS0+ZGVsZXRlTm9kZSgkbWFnYXppbmVfaWQpOwplY2hvICdkZWxldGVOb2RlKHskbWFnYXppbmVfaWR9KSBNYWdhemluZTonOwp2YXJfZHVtcCgkZGVsZXRlTm9kZSk7CgoJJGRlbGV0ZU5vZGUgPSAkdHJlZS0+ZGVsZXRlTm9kZSgzKTsKZWNobyAnZGVsZXRlTm9kZSgzKSBOTzonOwp2YXJfZHVtcCgkZGVsZXRlTm9kZSk7CgoKCSRtb3ZlT3JkZXJOb2RlID0gJHRyZWUtPm1vdmVPcmRlck5vZGUoMTYsIC0xLCA0KTsKZWNobyAibW92ZU9yZGVyTm9kZSgxNiwgLTEsIDQpOiI7CnZhcl9kdW1wKCRtb3ZlT3JkZXJOb2RlKTsKCn0KZWxzZQp7CglkaWUoJ01vZHVsZSBub3QgZm91bmQnKTsKfQoKLyogRW5kIGVkaXRpbmcgb3BlcmF0aW9ucyAqLwoKCgoKCi8qIEJlZ2luIGZldGNoaW5nIG9wZXJhdGlvbnMgKi8KCiR0cmVlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgiVHJlZU1hbmFnZXIiKTsKaWYoJHRyZWUpCnsKCSRteWZpZWxkID0gYXJyYXkoIm5hbWUiLCAiYWxpYXMiLCAiZGVzY3JpcHRpb24iKTsKCSRsYW5nID0gImVuX1VTIjsKCSR0cmVlLT5pbml0VHJlZSgndGVzdCcsICRteWZpZWxkLCAkbGFuZyk7CgoJJHRyZWUtPmR1bXBUcmVlKCk7CgoKCSR0ZXN0ID0gJHRyZWUtPmdldEN1c3RvbUZpZWxkcygpOwplY2hvICc8YnIgLz5nZXRDdXN0b21GaWVsZHMoKSc7CnZhcl9kdW1wKCR0ZXN0KTsKCiMJJHRlc3QgPSAkdHJlZS0+Z2V0QWxsTm9kZUZpZWxkcygpOwojZWNobyAnPGJyIC8+Z2V0QWxsTm9kZUZpZWxkcygpJzsKI3Zhcl9kdW1wKCR0ZXN0KTsKCgoJJHRlc3QgPSAkdHJlZS0+Z2V0Um9vdCgpOwplY2hvICc8YnIgLz5nZXRSb290KCknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKdmFyX2R1bXAoJHRlc3QpOwoKCgkkdGVzdCA9ICR0cmVlLT5nZXROb2RlKCAxOCApOwplY2hvICc8YnIgLz5nZXROb2RlKCAxOCApJzsKdmFyX2R1bXAoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCk7CnZhcl9kdW1wKCR0ZXN0KTsKCgkkdGVzdCA9ICR0cmVlLT5nZXROb2RlKCAxNTAwICk7CmVjaG8gJzxiciAvPmdldE5vZGUoIDE1MDAgKSc7CnZhcl9kdW1wKCR0cmVlLT5udW1Ob2RlSW52b2x2ZWQpOwp2YXJfZHVtcCgkdGVzdCk7CgoKCSR0ZXN0ID0gJHRyZWUtPmdldEJ5Tm9kZUZpZWxkKCdpZCcsIDE4KTsKZWNobyAnPGJyIC8+Z2V0QnlOb2RlRmllbGQoICRmaWVsZD0iaWQiLCAxOCApJzsKdmFyX2R1bXAoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCk7CnZhcl9kdW1wKCR0ZXN0KTsKCgkkdGVzdCA9ICR0cmVlLT5nZXRCeU5vZGVGaWVsZCgnbGV2ZWwnLCAxKTsKZWNobyAnPGJyIC8+Z2V0QnlOb2RlRmllbGQoICRmaWVsZD0ibGV2ZWwiLCAxICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKdmFyX2R1bXAoJHRlc3QpOwoKCgkkdGVzdCA9ICR0cmVlLT5nZXRCeUN1c3RvbUZpZWxkKCAiaWQiLCAxOCApOwplY2hvICc8YnIgLz5nZXRCeUN1c3RvbUZpZWxkKCAkZmllbGQ9ImlkIiwgMTggKSc7CnZhcl9kdW1wKCR0cmVlLT5udW1Ob2RlSW52b2x2ZWQpOwp2YXJfZHVtcCgkdGVzdCk7CgoJJHRlc3QgPSAkdHJlZS0+Z2V0QnlDdXN0b21GaWVsZCggImFsaWFzIiwgImNtc21zIiApOwplY2hvICc8YnIgLz5nZXRCeUN1c3RvbUZpZWxkKCAkZmllbGQ9ImFsaWFzIiwgImNtc21zIiApJzsKdmFyX2R1bXAoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCk7CnZhcl9kdW1wKCR0ZXN0KTsKCgoJJHRlc3QgPSAkdHJlZS0+Z2V0UGFyZW50KCJpZCIsIDEpOwplY2hvICc8YnIgLz5nZXRQYXJlbnQoICRmaWVsZD0iaWQiLCAxICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKdmFyX2R1bXAoJHRlc3QpOwoKCSR0ZXN0ID0gJHRyZWUtPmdldFBhcmVudCgiaWQiLCAyMyk7CmVjaG8gJzxiciAvPmdldFBhcmVudCggJGZpZWxkPSJpZCIsIDIzICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKdmFyX2R1bXAoJHRlc3QpOwoKCSR0ZXN0ID0gJHRyZWUtPmdldFBhcmVudCgiYWxpYXMiLCAiY21zbXMiKTsKZWNobyAnPGJyIC8+Z2V0UGFyZW50KCAkZmllbGQ9ImFsaWFzIiwgImNtc21zIiApJzsKdmFyX2R1bXAoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCk7CmlmKCR0cmVlLT5udW1Ob2RlSW52b2x2ZWQgPiAxKSB7ZWNobyAnTm9kZXM6JzsgdmFyX2R1bXAoJHRyZWUtPmFyck5vZGVJbnZvbHZlZCk7fQp2YXJfZHVtcCgkdGVzdCk7CgoKCSR0ZXN0ID0gJHRyZWUtPmdldFNpYmxpbmcoImlkIiwgMTgpOwplY2hvICc8YnIgLz5nZXRTaWJsaW5nKCAkZmllbGQ9ImlkIiwgMTggICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKdmFyX2R1bXAoJHRlc3QpOwoKCSR0ZXN0ID0gJHRyZWUtPmdldFNpYmxpbmcoImlkIiwgMTgsICJyZ3QgREVTQyIsIHRydWUpOwplY2hvICc8YnIgLz5nZXRTaWJsaW5nKCAkZmllbGQ9ImlkIiwgMTgsICRvcmRlcmJ5PSJyZ3QgREVTQyIsICRub2N1cnJlbnQ9dHJ1ZSApJzsKdmFyX2R1bXAoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCk7CnZhcl9kdW1wKCR0ZXN0KTsKCgkkdGVzdCA9ICR0cmVlLT5nZXRTaWJsaW5nKCJhbGlhcyIsICJqb29tbGEiKTsKZWNobyAnPGJyIC8+Z2V0U2libGluZyggJGZpZWxkPSJhbGlhcyIsICJqb29tbGEiLCAkb3JkZXJieT0ibm9yZGVyIEFTQyIsICRub2N1cnJlbnQ9ZmFsc2UgICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKaWYoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCA+IDEpIHtlY2hvICdOb2RlczonOyB2YXJfZHVtcCgkdHJlZS0+YXJyTm9kZUludm9sdmVkKTt9CnZhcl9kdW1wKCR0ZXN0KTsKCgoJJHRlc3QgPSAkdHJlZS0+aGFzX2NoaWxkcmVuKDE4KTsKZWNobyAnPGJyIC8+aGFzX2NoaWxkcmVuKCAxOCApJzsKdmFyX2R1bXAoJHRlc3QpOwoKCSR0ZXN0ID0gJHRyZWUtPmhhc19jaGlsZHJlbigxNCk7CmVjaG8gJzxiciAvPmhhc19jaGlsZHJlbiggMTQgKSc7CnZhcl9kdW1wKCR0ZXN0KTsKCgoJJHRlc3QgPSAkdHJlZS0+Z2V0Q2hpbGRyZW4oImlkIiwgMiwgMSk7CmVjaG8gJzxiciAvPmdldENoaWxkcmVuKCAkZmllbGQ9ImlkIiwgMiwgJGRlcHRoPTEgKSc7CnZhcl9kdW1wKCR0cmVlLT5udW1Ob2RlSW52b2x2ZWQpOwp2YXJfZHVtcCgkdGVzdCk7CgoJJHRlc3QgPSAkdHJlZS0+Z2V0Q2hpbGRyZW4oImlkIiwgMiwgMCk7CmVjaG8gJzxiciAvPmdldENoaWxkcmVuKCAkZmllbGQ9ImlkIiwgMiwgJGRlcHRoPTAgKSc7CnZhcl9kdW1wKCR0cmVlLT5udW1Ob2RlSW52b2x2ZWQpOwp2YXJfZHVtcCgkdGVzdCk7CgoJJHRlc3QgPSAkdHJlZS0+Z2V0Q2hpbGRyZW4oImlkIiwgMiwgLTEsICJsZXZlbCxub3JkZXIiLCB0cnVlKTsKZWNobyAnPGJyIC8+Z2V0Q2hpbGRyZW4oICRmaWVsZD0iaWQiLCAyLCAkZGVwdGg9LTEsICRvcmRlcmJ5PSJsZXZlbCxub3JkZXIiLCAkbm9jdXJyZW50PXRydWUgKSc7CnZhcl9kdW1wKCR0cmVlLT5udW1Ob2RlSW52b2x2ZWQpOwp2YXJfZHVtcCgkdGVzdCk7CgoJJHRlc3QgPSAkdHJlZS0+Z2V0Q2hpbGRyZW4oImFsaWFzIiwgImNtc21zIiwgLTEsICJsZXZlbCxub3JkZXIiLCB0cnVlKTsKZWNobyAnPGJyIC8+Z2V0Q2hpbGRyZW4oICRmaWVsZD0iYWxpYXMiLCAiY21zbXMiLCAkZGVwdGg9LTEsICRvcmRlcmJ5PSJsZXZlbCxub3JkZXIiLCAkbm9jdXJyZW50PXRydWUgKSc7CnZhcl9kdW1wKCR0cmVlLT5udW1Ob2RlSW52b2x2ZWQpOwppZigkdHJlZS0+bnVtTm9kZUludm9sdmVkID4gMSkge2VjaG8gJ05vZGVzOic7IHZhcl9kdW1wKCR0cmVlLT5hcnJOb2RlSW52b2x2ZWQpO30KdmFyX2R1bXAoJHRlc3QpOwoKCgkkdGVzdCA9ICR0cmVlLT5nZXRDaGlsZHJlbkNvdW50KCdpZCcsIDIpOwplY2hvICc8YnIgLz5nZXRDaGlsZHJlbkNvdW50KCAiaWQiLCAyICknOwp2YXJfZHVtcCgkdGVzdCk7CgoKCSR0ZXN0ID0gJHRyZWUtPmdldENvdW50Tm9kZXMoKTsKZWNobyAnPGJyIC8+Z2V0Q291bnROb2RlcyggKSc7CnZhcl9kdW1wKCR0ZXN0KTsKCgoJJHRlc3QgPSAkdHJlZS0+Z2V0QnlMZXZlbCgyKTsKZWNobyAnPGJyIC8+Z2V0QnlMZXZlbCggJGxldmVsPSIyIiApJzsKdmFyX2R1bXAoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCk7CnZhcl9kdW1wKCR0ZXN0KTsKCgkkdGVzdCA9ICR0cmVlLT5nZXRCeUxldmVsKDIsICJyZ3QgREVTQyIpOwplY2hvICc8YnIgLz5nZXRCeUxldmVsKCAkbGV2ZWw9IjIiLCAkb3JkZXJieT0icmd0IERFU0MiICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKdmFyX2R1bXAoJHRlc3QpOwoKCgkkdGVzdCA9ICR0cmVlLT5nZXRMZWFmKCk7CmVjaG8gJzxiciAvPmdldExlYWYoICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKdmFyX2R1bXAoJHRlc3QpOwoKCgkkdGVzdCA9ICR0cmVlLT5nZXRNYXhEZXB0aCgpOwplY2hvICc8YnIgLz5nZXRNYXhEZXB0aCggKSc7CnZhcl9kdW1wKCR0ZXN0KTsKCgoJJHRlc3QgPSAkdHJlZS0+Z2V0QnJlYWRjcnVtYnMoJ2lkJywgMTgpOwplY2hvICc8YnIgLz5nZXRCcmVhZGNydW1icyggJGZpZWxkPSJpZCIsIDE4ICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKaWYoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCA+IDEpIHtlY2hvICdOb2RlczonOyB2YXJfZHVtcCgkdHJlZS0+YXJyTm9kZUludm9sdmVkKTt9CnZhcl9kdW1wKCR0ZXN0KTsKCgkkdGVzdCA9ICR0cmVlLT5nZXRCcmVhZGNydW1icygnaWQnLCAxOCwgJ2lkJywgZmFsc2UsIGZhbHNlLCAnJywgdHJ1ZSk7CmVjaG8gJzxiciAvPmdldEJyZWFkY3J1bWJzKCAkZmllbGQ9ImlkIiwgMTgsICRpZHg9ImlkIiwgJG5vcm9vdD1mYWxzZSwgJG5vY3VycmVudD1mYWxzZSwgJGNoZWNrPSIiLCAkcmV2ZXJzZT10cnVlICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKaWYoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCA+IDEpIHtlY2hvICdOb2RlczonOyB2YXJfZHVtcCgkdHJlZS0+YXJyTm9kZUludm9sdmVkKTt9CnZhcl9kdW1wKCR0ZXN0KTsKCgkkdGVzdCA9ICR0cmVlLT5nZXRCcmVhZGNydW1icygiYWxpYXMiLCAiZWNvbW1lcmNlIiwgJ2FsaWFzJywgdHJ1ZSk7CmVjaG8gJzxiciAvPmdldEJyZWFkY3J1bWJzKCAkZmllbGQ9ImFsaWFzIiwgImVjb21tZXJjZSIsICRpZHg9ImFsaWFzIiwgJG5vcm9vdD10cnVlICknOwp2YXJfZHVtcCgkdHJlZS0+bnVtTm9kZUludm9sdmVkKTsKaWYoJHRyZWUtPm51bU5vZGVJbnZvbHZlZCA+IDEpIHtlY2hvICdOb2RlczonOyB2YXJfZHVtcCgkdHJlZS0+YXJyTm9kZUludm9sdmVkKTt9CnZhcl9kdW1wKCR0ZXN0KTsKCgkkdGVzdCA9ICR0cmVlLT5nZXRCcmVhZGNydW1icygiYWxpYXMiLCAiZWNvbW1lcmNlIiwgJ2FsaWFzJywgZmFsc2UsIHRydWUsICJjbXNtcyIpOwplY2hvICc8YnIgLz5nZXRCcmVhZGNydW1icyggJGZpZWxkPSJhbGlhcyIsICJlY29tbWVyY2UiLCAkaWR4PSJhbGlhcyIsICRub3Jvb3Q9ZmFsc2UsICRub2N1cnJlbnQ9dHJ1ZSwgJGNoZWNrPSJjbXNtcyIgKSc7CnZhcl9kdW1wKCR0cmVlLT5udW1Ob2RlSW52b2x2ZWQpOwppZigkdHJlZS0+bnVtTm9kZUludm9sdmVkID4gMSkge2VjaG8gJ05vZGVzOic7IHZhcl9kdW1wKCR0cmVlLT5hcnJOb2RlSW52b2x2ZWQpO30KdmFyX2R1bXAoJHRlc3QpOwoKfQplbHNlCnsKCWRpZSgnTW9kdWxlIG5vdCBmb3VuZCcpOwp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2Vycm9yX21vZHVsZSddID0gJ0Vycm9yOiBubyBtb2R1bGUgc3VwcGxpZWQhJzsKJGxhbmdbJ2Vycm9yX21vZHVsZV9uYW1lJ10gPSAnRXJyb3I6IG5vIG1vZHVsZSBuYW1lICVzIGZvdW5kZWQhJzsKJGxhbmdbJ2Vycm9yX3NjaGVtYSddID0gJ0Vycm9yOiBzY2hlbWEgaXMgbm90IGFycmF5Pyc7CiRsYW5nWydlcnJvcl9maWVsZCddID0gJ0Vycm9yOiBjdXN0b21GaWVsZCBpcyBub3QgYXJyYXk/JzsKJGxhbmdbJ2Vycm9yX2NsZWFuZmllbGQnXSA9ICdFcnJvcjogbm8gY3VzdG9tIGZpZWxkcz8nOwokbGFuZ1sndHJlZSddID0gJ1RyZWUnOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvcic7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdUcmVlIE1hbmFnZXInOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdUcmVlTWFuYWdlciBtb2R1bGVzIHByb3ZpZGVzIGhlbHBmdWwgbmVzdGVkIHRyZWVzIGxpa2UgY2F0ZWdvcmllcyBmb3Igb3RoZXIgbW9kdWxlcy4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB3YXMgdXBncmFkZWQgdG8gdmVyc2lvbiAlcyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSB1bmluc3RhbGxlZC4nOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdUaGUgTW9kdWxlIHdhcyBzdWNjZXNmdWxseSBpbnN0YWxsZWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1RoZSBNb2R1bGUgd2FzIHN1Y2Nlc2Z1bGx5IHVuaW5zdGFsbGVkLic7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnQXJlIHlvdSBzdXJlIHRoZSBUcmVlTWFuYWdlciBtb2R1bGUgc2hvdWxkIGJlIHVuaW5zdGFsbGVkPyBUaGlzIGRyb3BzIGFsbCB0cmVlcy4nOwokbGFuZ1snZXZlbnRfaW5mb19PbkFkZENoaWxkcmVuJ10gPSAnQW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBub2RlIGNoaWxkcmVuIGlzIGNyZWF0ZWQnOwokbGFuZ1snZXZlbnRfaGVscF9PbkFkZENoaWxkcmVuJ10gPSAnCjxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgbm9kZSBjaGlsZHJlbiBpcyBjcmVhdGVkPC9wPgo8aDQ+UGFyYW1ldGVyczwvaDQ+Cjx1bD4KPGxpPjxlbT5pZDwvZW0+IC0gbm9kZSBpZCBjcmVhdGVkPC9saT4KPGxpPjxlbT5sZXZlbDwvZW0+IC0gbGV2ZWwgb2Ygbm9kZTwvbGk+CjxsaT48ZW0+bm9yZGVyPC9lbT4gLSBudW1lcmljYWwgb3JkZXIgb2Ygbm9kZTwvbGk+CjxsaT48ZW0+dHJlZTwvZW0+IC0gdHJlZTwvbGk+CjwvdWw+Cic7CiRsYW5nWydldmVudF9pbmZvX09uTW92ZU5vZGUnXSA9ICdBbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBtb3ZlIGEgbm9kZSBpbiBvdGhlciBzdWJ0cmVlJzsKJGxhbmdbJ2V2ZW50X2hlbHBfT25Nb3ZlTm9kZSddID0gJwo8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBtb3ZlIGEgbm9kZSBpbiBvdGhlciBzdWJ0cmVlPC9wPgo8aDQ+UGFyYW1ldGVyczwvaDQ+Cjx1bD4KPGxpPjxlbT5pZDwvZW0+IC0gbm9kZSBpZDwvbGk+CjxsaT48ZW0+cGFyZW50PC9lbT4gLSBuZXcgcGFyZW50IGlkIG9mIG5vZGU8L2xpPgo8bGk+PGVtPm5vcmRlcjwvZW0+IC0gbnVtZXJpY2FsIG9yZGVyIG9mIG5vZGU8L2xpPgo8bGk+PGVtPnRyZWU8L2VtPiAtIHRyZWU8L2xpPgo8L3VsPgonOwokbGFuZ1snZXZlbnRfaW5mb19Pbk1vdmVPcmRlck5vZGUnXSA9ICdBbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBtb3ZlIGEgbm9kZSBpbiBzYW1lIHN1YnRyZWUnOwokbGFuZ1snZXZlbnRfaGVscF9Pbk1vdmVPcmRlck5vZGUnXSA9ICcKPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gbW92ZSBhIG5vZGUgaW4gc2FtZSBzdWJ0cmVlPC9wPgo8aDQ+UGFyYW1ldGVyczwvaDQ+Cjx1bD4KPGxpPjxlbT5pZDwvZW0+IC0gbm9kZSBpZDwvbGk+CjxsaT48ZW0+bm9yZGVyPC9lbT4gLSBudW1lcmljYWwgb3JkZXIgb2Ygbm9kZTwvbGk+CjxsaT48ZW0+dHJlZTwvZW0+IC0gdHJlZTwvbGk+CjwvdWw+Cic7CiRsYW5nWydldmVudF9pbmZvX09uRGVsZXRlTm9kZSddID0gJ0FuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgbm9kZSBpcyBkZWxldGVkJzsKJGxhbmdbJ2V2ZW50X2hlbHBfT25EZWxldGVOb2RlJ10gPSAnCjxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgbm9kZSBpcyBkZWxldGVkPC9wPgo8aDQ+UGFyYW1ldGVyczwvaDQ+Cjx1bD4KPGxpPjxlbT5pZDwvZW0+IC0gbm9kZSBpZDwvbGk+CjxsaT48ZW0+dHJlZTwvZW0+IC0gdHJlZTwvbGk+CjwvdWw+Cic7CiRsYW5nWydldmVudF9pbmZvX09uVXBkYXRlQ3VzdG9tJ10gPSAnQW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gY3VzdG9tIHZhbHVlcyBvZiBhIG5vZGUgYXJlIHVwZGF0ZWQnOwokbGFuZ1snZXZlbnRfaGVscF9PblVwZGF0ZUN1c3RvbSddID0gJwo8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBjdXN0b20gdmFsdWVzIG9mIGEgbm9kZSBhcmUgdXBkYXRlZDwvcD4KPGg0PlBhcmFtZXRlcnM8L2g0Pgo8dWw+CjxsaT48ZW0+aWQ8L2VtPiAtIG5vZGUgaWQ8L2xpPgo8bGk+PGVtPnRyZWU8L2VtPiAtIHRyZWU8L2xpPgo8L3VsPgonOwokbGFuZ1snZXZlbnRfaW5mb19PblVwZGF0ZUNvbnRlbnRBbGlhcyddID0gJ0FuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY29udGVudCBhbGlhcyBvZiBvdGhlciBub2RlIGlzIHVwZGF0ZWQnOwokbGFuZ1snZXZlbnRfaGVscF9PblVwZGF0ZUNvbnRlbnRBbGlhcyddID0gJwo8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIGNvbnRlbnQgYWxpYXMgb2Ygb3RoZXIgbm9kZSBpcyB1cGRhdGVkPC9wPgo8aDQ+UGFyYW1ldGVyczwvaDQ+Cjx1bD4KPGxpPjxlbT5pZDwvZW0+IC0gbm9kZSBpZDwvbGk+CjxsaT48ZW0+YWxpYXM8L2VtPiAtIGFsaWFzIG5vZGUgaWQ8L2xpPgo8bGk+PGVtPnRyZWU8L2VtPiAtIHRyZWU8L2xpPgo8L3VsPgonOwokbGFuZ1snZXZlbnRfaW5mb19PbkRlbGV0ZUNvbnRlbnRBbGlhcyddID0gJ0FuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY29udGVudCBhbGlhcyBpcyBkZWxldGVkJzsKJGxhbmdbJ2V2ZW50X2hlbHBfT25EZWxldGVDb250ZW50QWxpYXMnXSA9ICcKPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBjb250ZW50IGFsaWFzIGlzIGRlbGV0ZWQ8L3A+CjxoND5QYXJhbWV0ZXJzPC9oND4KPHVsPgo8bGk+PGVtPmlkPC9lbT4gLSBub2RlIGlkPC9saT4KPGxpPjxlbT50cmVlPC9lbT4gLSB0cmVlPC9saT4KPC91bD4KJzsKJGxhbmdbJ2hlbHAnXSA9ICdUaGlzIG1vZHVsZSBhbGxvd3MgeW91IHRvIGJ1aWxkIG9uZSBvciBtb3JlIG5lc3RlZCB0cmVlcyBmb3IgeW91ciBtb2R1bGVzLiBZb3UgY2FuIGFkZCB5b3VyIGN1c3RvbSBmaWVsZHMgYWxzby4KPGJyIC8+CjxoMz5Gb3IgbW9kdWxlLWRldmVsb3BlcnM8L2gzPgpDb25uZWN0IHlvdXIgbW9kdWxlIHdpdGggVHJlZU1hbmFnZXIgdGhyb3VnaCA8Yj5HZXRNb2R1bGVJbnN0YW5jZTwvYj4oKS48YnIgLz4KQ2FsbGluZyBtYW5kYXRvcnkgPGI+aW5pdFRyZWU8L2I+KHlvdXJfbW9kdWxlKSB3aXRoICR0aGlzICh0aGlzIGNhbGwgeW91ciBHZXROYW1lKCkgZnVuY3Rpb24pIG9yIHVzZSBhbnkgc3RyaW5nIHRoYXQgeW91IHdhbnQsICRjdXN0b21GaWVsZCBpcyBhbiBhcnJheSBvZiB5b3VyIGN1c3RvbSBmaWVsZHMgYW5kIG9wdGlvbmFsICRsYW5nLjxiciAvPgpTdXJlbHkgeW91IHdhbnQgYWRkIGN1c3RvbSBmaWVsZHMsIGFkZCB0aGVtIHdpdGggPGI+YWRkQ3VzdG9tRmllbGQ8L2I+KCkgZnVuY3Rpb24gKHNlZSBleGFtcGxlIGJlbG93KS48YnIgLz4KTm93IHlvdSBjYW4gcGxheWluZyB3aXRoIEFQSSBmdW5jdGlvbnM8YnIgLz4KCjxiciAvPgo8aDQ+SW4gbWV0aG9kLmluc3RhbGwucGhwL21ldGhvZC51cGdyYWRlLnBocCB1c2U6PC9oND4KPHByZT4KCiR0cmVlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgiVHJlZU1hbmFnZXIiKTsKaWYoJHRyZWUpCnsKCSRteWN1c3RvbSA9IGFycmF5KCk7IC8vcHV0IHlvdXIgY3VycmVudCBjdXN0b20gZmllbGRzIGluIHVwZ3JhZGUgcHJvY2VzcwoJJGxhbmcgPSAiZW5fVVMiOyAvL29wdGlvbmFsCgkkdHJlZS0+aW5pdFRyZWUoJHRoaXMsICRteWN1c3RvbSwgJGxhbmcpOwoKCQkkbXlzY2hlbWEgPSBhcnJheSgibmFtZSI9PiJDKDE2NSkiLCAiYWxpYXMiPT4iQygxNjUpIiwgImRlc2NyaXB0aW9uIj0+IlgiKTsKCSR0cmVlLT5hZGRDdXN0b21GaWVsZCgkbXlzY2hlbWEpOwp9CmVsc2UKewoJZGllKCJUcmVlTWFuYWdlciBtb2R1bGUgbm90IGZvdW5kIik7Cn0KPC9wcmU+Cgo8YnIgLz4KPGg0PkluIG1ldGhvZC51bmluc3RhbGwucGhwIHVzZTo8L2g0Pgo8cHJlPgoKJHRyZWUgPSYgJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCJUcmVlTWFuYWdlciIpOwppZigkdHJlZSkKewoJJG15Y3VzdG9tID0gYXJyYXkoIm5hbWUiLCAiYWxpYXMiLCAiZGVzY3JpcHRpb24iKTsgLy95b3VyIGN1cnJlbnQgY3VzdG9tIGZpZWxkcwoJJGxhbmcgPSAiZW5fVVMiOyAvL29wdGlvbmFsCgkkdHJlZS0+aW5pdFRyZWUoJHRoaXMsICRteWN1c3RvbSwgJGxhbmcpOwoKCWlmKCEgJHRyZWUtPmRyb3BNb2R1bGVUYWJsZSgpKSBkaWUoIlRyZWVNYW5hZ2VyIG1vZHVsZSBkcm9wIGVycm9yISIpOwp9CmVsc2UKewoJZGllKCJUcmVlTWFuYWdlciBtb2R1bGUgbm90IGZvdW5kIik7Cn0KPC9wcmU+Cgo8YnIgLz4KPGg0PkluIHlvdXIgbW9kdWxlIHVzZTo8L2g0Pgo8cHJlPgoKJHRyZWUgPSYgJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCJUcmVlTWFuYWdlciIpOwppZigkdHJlZSkKewoJJG15Y3VzdG9tID0gYXJyYXkoIm5hbWUiLCAiYWxpYXMiLCAiZGVzY3JpcHRpb24iKTsgLy95b3VyIGN1cnJlbnQgY3VzdG9tIGZpZWxkcwoJJGxhbmcgPSAiZW5fVVMiOyAvL29wdGlvbmFsCgkkdHJlZS0+aW5pdFRyZWUoJHRoaXMsICRteWN1c3RvbSwgJGxhbmcpOwoKCS8vRXhhbXBsZSBvZiBlZGl0aW5nIG9wZXJhdGlvbgoJCSRpbnB1dCA9IGFycmF5KCJuYW1lIj0+IlJvb3QiLCAiYWxpYXMiPT4icm9vdCIsICJkZXNjcmlwdGlvbiI9PiJSb290IGZvbGRlciIpOwoJJHJvb3RfaWQgPSAkdHJlZS0+YWRkUm9vdCgkY3VzdG9tKTsKCQkkaW5wdXQgPSBhcnJheSgibmFtZSI9PiJOb2RlIG51bWJlcjEiLCAiYWxpYXMiPT4ibm9kZTEiLCAiZGVzY3JpcHRpb24iPT4iRmlyc3QgTm9kZSIpOwoJJG5vZGUxX2lkID0gJHRyZWUtPmFkZENoaWxkcmVuKCRyb290X2lkLCAkY3VzdG9tKTsKCQkkaW5wdXQgPSBhcnJheSgibmFtZSI9PiJOb2RlIG51bWJlcjExIiwgImFsaWFzIj0+Im5vZGUxMSIsICJkZXNjcmlwdGlvbiI9PiJTZWNvbmQgTm9kZSIpOwoJJG5vZGUxMV9pZCA9ICR0cmVlLT5hZGRDaGlsZHJlbigkbm9kZTFfaWQsICRjdXN0b20pOwoJCSRpbnB1dCA9IGFycmF5KCJuYW1lIj0+Ik5vZGUgbnVtYmVyMTIiLCAiYWxpYXMiPT4ibm9kZTEyIiwgImRlc2NyaXB0aW9uIj0+IlRoaXJkIE5vZGUgQmVmb3JlIik7Cgkkbm9kZTEyX2lkID0gJHRyZWUtPmFkZENoaWxkcmVuKCRub2RlMV9pZCwgJGN1c3RvbSwgMSk7CgoJJGJvb2wgPSAkdHJlZS0+ZGVsZXRlTm9kZSgkbm9kZTExX2lkKTsKCgkvL0V4YW1wbGUgb2YgZmV0Y2hpbmcKCSRub2RlX2FycmF5ID0gJHRyZWUtPmdldE5vZGUoJG5vZGUxX2lkKTsKfQplbHNlCnsKCWRpZSgiVHJlZU1hbmFnZXIgbW9kdWxlIG5vdCBmb3VuZCIpOwp9CjwvcHJlPgoKPGJyIC8+CjxoMz5NZXRob2RzPC9oMz4KPGRsPgoJPGR0Pih2b2lkKSA8Yj5pbml0VHJlZTwvYj4oICRtb2R1bGUsICRjdXN0b21GaWVsZD1hcnJheSgpLCAkbGFuZz0iZW5fVVMiICk8L2R0PgoJPGRkPjxwPjxiPk1BTkRBVE9SWTwvYj4uIEluaXRpYWxpemUgZGF0YSBhbmQgY2hlY2sgeW91ciB0YWJsZXMuIElmIHlvdXIgdGFibGVzIG5vdCBleGlzdCBjcmVhdGUgdHdvIHRhYmxlczogbm9kZSAoaGllcmFyY2h5KSBhbmQgY29udGVudCAoY3VzdG9tKS48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPnNldENtc0Ryb3Bkb3duPC9iPiggJGFyciwgJG9wdGlvbj0iaWQiLCAkZm9ybWF0PXRydWUgKTwvZHQ+Cgk8ZGQ+PHA+UmV0dXJuIGFuIGFycmF5IGZvciBDTVMgQ3JlYXRlSW5wdXREcm9wZG93biBtZXRob2QuICRvcHRpb24gaXMgdGhlIGZpZWxkIHRoYXQgZGlzcGxheSBpbiBvcHRpb24sIHZhbHVlIGlzIGlkIGZpZWxkIG9mIGFycmF5LiBJZiAkZm9ybWF0IGlzIHRydWUgaXQgZGlzcGxheSBhbiBpbmRlbnQgaGllcmFyY2h5aGllIHdpdGggbGV2ZWwgZmllbGQuPC9wPjwvZGQ+Cgk8ZHQ+KGJvb2xlYW4pIDxiPmRyb3BNb2R1bGVUYWJsZTwvYj4oKTwvZHQ+Cgk8ZGQ+PHA+RHJvcCBhbGwgbW9kdWxlIHRhYmxlcy4gVXNlZnVsIGluIG1ldGhvZC51bmluc3RhbGwucGhwPC9wPjwvZGQ+Cgk8ZHQ+KGJvb2xlYW4pIDxiPmluVHJhbnNhY3Rpb248L2I+KCk8L2R0PgoJPGRkPjxwPlJldHVybiBpZiBjdXJyZW50IHRyYW5zYWN0aW9uIGxvY2tpbmcgaXMgaW4gb3Igbm90LjwvcD48L2RkPgoJPGR0Pih2b2lkKSA8Yj5zZXRQZXJpb2RUcmFuc2FjdGlvbjwvYj4oICRwZXJpb2Q9MTIwICk8L2R0PgoJPGRkPjxwPlNldCBleHBpcmUgcGVyaW9kIG9mIHRyYW5zYWN0aW9uIGxvY2tpbmcgZm9yIGF2b2lkIHByb2JsZW0uIERlZmF1bHQgaXMgMTIwIHNlY29uZHMuPC9wPjwvZGQ+Cgk8ZHQ+KHZvaWQpIDxiPmVuZFRyYW5zYWN0aW9uPC9iPigpPC9kdD4KCTxkZD48cD5GcmVlaW5nIHRyYW5zYWN0aW9uIGxvY2tpbmcgZm9yIGF2b2lkIHByb2JsZW0uPC9wPjwvZGQ+CjwvZGw+Cgo8YnIgLz4KPGgzPkZ1bmN0aW9uIEFQSSBlZGl0aW5nPC9oMz4KPHA+UmV0dXJuIGJvb2xlYW4gZmFsc2Ugb24gZmFpbHVyZTwvcD4KPGRsPgoJPGR0PihpbnRlZ2VyKSA8Yj5hZGRSb290PC9iPiggJGlucHV0PWFycmF5KCksICRmb3JjZWlkPWZhbHNlICk8L2R0PgoJPGRkPjxwPkNyZWF0ZSBhIHJvb3QgTm9kZS4gSWYgeW91IGhhdmUgYW55IGN1c3RvbSBmaWVsZHMsIHlvdSBjYW4gcGFzcyB2YWx1ZXMgdGhyb3VnaCAkaW5wdXQgYXJyYXk6ICgiZmllbGQiPT4kdmFsdWUpLiBJZiB5b3UgcHV0IGEgaW50ZWdlciAkZm9yY2VpZCAoYXQgeW91ciBvd24gcmlzayEpIHlvdSBmb3JjZSB0aGlzICRJRCBhbmQgbm90IGEgc2VxdWVudGlhbCAkSUQuIFJldHVybiAkSUQgb2Ygcm9vdCBOb2RlLjwvcD48L2RkPgoJPGR0PihpbnRlZ2VyKSA8Yj5hZGRDaGlsZHJlbjwvYj4oICRpZCwgJGlucHV0PWFycmF5KCksICRvcmRlcj0tMSwgJGZvcmNlaWQ9ZmFsc2UgKTwvZHQ+Cgk8ZGQ+PHA+Q3JlYXRlIGEgbmV3IE5vZGUgYXMgYSBkZXNjZW5kZW50IG9mIGFub3RoZXIgbm9kZSAod2hvc2UgJGlkIGlzIHRoZSBwYXJlbnQpLiBTZXR0aW5nICRpZCB0byAwLCAtMSBvciBub3QgZXhpc3QgeWV0IHRoZW4gd2lsbCBjYWxsIGFkZFJvb3QoKS4gWW91IGNhbiBwYXNzIHZhbHVlcyBvZiBjdXN0b20gZmllbGRzIHRocm91Z2ggJGlucHV0IGFycmF5LiAkb3JkZXI9LTEgYWRkIG5vZGUgYWZ0ZXIgb3RoZXIgY2hpbGRyZW5zLCBvdGhlcndpc2UgYWRkIG5vZGUgYmVmb3JlIG90aGVycywgZGVmYXVsdCAtMS4gSWYgeW91IHB1dCBhIGludGVnZXIgJGZvcmNlaWQgKGF0IHlvdXIgb3duIHJpc2shKSB5b3UgZm9yY2UgdGhpcyAkSUQgYW5kIG5vdCBhIHNlcXVlbnRpYWwgJElELiBSZXR1cm4gJGlkIG9mIG5ldyBOb2RlLjwvcD48L2RkPgoJPGR0Pihib29sZWFuKSA8Yj5tb3ZlTm9kZTwvYj4oICRpZCwgJG5ld3BhcmVudCwgJG9yZGVyPS0xICk8L2R0PgoJPGRkPjxwPk1vdmUgTm9kZSAkaWQgdG8gZGVzY2VuZGVudCBvZiBhbm90aGVyIG5vZGUgJG5ld3BhcmVudC4gSWYgTm9kZSAkaWQgYW5kIE5vZGUgJG5ld3BhcmVudCBoYXZlIHNhbWUgcGFyZW50IHRoZW4gcnVuIDxiPm1vdmVPcmRlck5vZGU8L2I+IGZ1bmN0aW9uLiAkb3JkZXI9LTEgYWRkIG5vZGUgYWZ0ZXIgb3RoZXIgY2hpbGRyZW5zLCBvdGhlcndpc2UgYWRkIG5vZGUgYmVmb3JlIG90aGVycywgZGVmYXVsdCAtMS4gUmV0dXJuIGJvb2xlYW4gdHJ1ZS48L3A+PC9kZD4KCTxkdD4oYm9vbGVhbikgPGI+bW92ZU9yZGVyTm9kZTwvYj4oICRpZCwgJG5ld2lkPS0xLCAkbmV3b3JkZXI9LTEgKTwvZHQ+Cgk8ZGQ+PHA+TW92ZSBOb2RlICRpZCB0byBwbGFjZSBvZiAkbmV3aWQgb3IgJG5ld29yZGVyLCB1cCBvciBkb3duIGluIHNhbWUgc3VidHJlZSAocGFyZW50KS4gUmV0dXJuIGJvb2xlYW4gdHJ1ZS48L3A+PC9kZD4KCTxkdD4obWl4ZWQpIDxiPmRlbGV0ZU5vZGU8L2I+KCAkaWQgKTwvZHQ+Cgk8ZGQ+PHA+RGVsZXRlIHRoZSBOb2RlIHdpdGggJGlkLiBUaGlzIHdpbGwgYWxzbyBkZWxldGUgYW55IGRlc2NlbmRlbnRzIG9mIHRoaXMgbm9kZS4gUmV0dXJuIGJvb2xlYW4gdHJ1ZSBvciBpbnRlZ2VyIDAgaWYgeW91IHRyeSB0byBkZWxldGUgYWxpYXMgbm9kZSBmb3Igb3RoZXJzLjwvcD48L2RkPgoJPGR0Pih2b2lkKSA8Yj5hZGRDdXN0b21GaWVsZDwvYj4oICRzY2hlbWE9YXJyYXkoKSApPC9kdD4KCTxkZD48cD5BZGQgY3VzdG9tIGZpZWxkcyB0aHJvdWdoICRpbnB1dCBhcnJheS4gQWRkIGNvbHVtbiAoYW5kIGNyZWF0ZSBpZiBub3QpIHRvIGNvbnRlbnQgdGFibGUuPC9wPjwvZGQ+Cgk8ZHQ+KGJvb2xlYW4pIDxiPnVwZGF0ZUN1c3RvbTwvYj4oICRpZCwgJGlucHV0PWFycmF5KCkgKTwvZHQ+Cgk8ZGQ+PHA+VXBkYXRlIHZhbHVlcyBvZiBjdXN0b20gZmllbGRzIG9mICRpZCwgaW4gY29udGVudCB0YWJsZSwgdGhyb3VnaCAkaW5wdXQgYXJyYXkuIFJldHVybiBib29sZWFuIHRydWUuPC9wPjwvZGQ+Cgk8ZHQ+KGJvb2xlYW4pIDxiPnVwZGF0ZUNvbnRlbnRBbGlhczwvYj4oICRpZCwgJGFsaWFzbm9kZSApPC9kdD4KCTxkZD48cD5TZXQgYSBDb250ZW50IEFsaWFzIG9mICRhbGlhc25vZGUuIE5vdyB5b3UgcmV0cmlldmUgY29udGVudCB2YWx1ZSBmcm9tICRhbGlhc25vZGUgYW5kIG5vdCBmcm9tICRpZC4gUmV0dXJuIGJvb2xlYW4gdHJ1ZS48L3A+PC9kZD4KCTxkdD4oYm9vbGVhbikgPGI+ZGVsZXRlQ29udGVudEFsaWFzPC9iPiggJGlkICk8L2R0PgoJPGRkPjxwPkRlbGV0ZSBDb250ZW50IEFsaWFzIG9mIE5vZGUgJGlkLiBOb3cgeW91IHJldHJpZXZlIGNvbnRlbnQgdmFsdWUgZnJvbSAkaWQgYW5kIG5vdCBmcm9tIHByZXYgYWxpYXMgbm9kZS4gUmV0dXJuIGJvb2xlYW4gdHJ1ZS48L3A+PC9kZD4KPC9kbD4KCjxiciAvPgo8aDM+RnVuY3Rpb24gQVBJIGZldGNoaW5nPC9oMz4KPHA+UmV0dXJuIGFycmF5LCBpbnRlZ2VyIG9yIGJvb2xlYW4gdHJ1ZSBvbiBzdWNjZXNzIGFuZCBib29sZWFuIGZhbHNlIG9uIGZhaWx1cmUuPGJyIC8+CkZpZWxkcyBvZiA8Yj5ub2RlIHRhYmxlPC9iPiBhcmU6IGlkLCBwYXJlbnQsIGxmdCwgcmd0LCBsZXZlbCwgbm9yZGVyLiBGaWVsZHMgb2YgPGI+Y29udGVudCB0YWJsZTwvYj4gYXJlIHlvdXIgY3VzdG9tIGNvbnRlbnQgZmllbGRzLjxiciAvPgokdHJlZS0+bnVtTm9kZUludm9sdmVkIGNvdW50IE5vZGVzIDxiPmludm9sdmVkPC9iPiBpbiBvcGVyYXRpb24gKGlmID4gMSB5b3UgaGF2ZSAkdHJlZS0+YXJyTm9kZUludm9sdmVkIGFsc28gd2l0aCBpbmZvcm1hdGlvbiBvZiB0aGF0IG5vZGVzKS4gSS5FLiBnZXRDaGlsZHJlbigiYWxpYXMiLCAkdmFsdWUpIHdpdGggMiBub2RlcyB3aXRoIHNhbWUgYWxpYXMgJHZhbHVlIHJldHVybiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgb2YgMiBhcnJheSB3aXRoIHJlbGF0aXZlIGNoaWxkcmVuLCBudW1Ob2RlSW52b2x2ZWQgPSAyIGFuZCBhcnJOb2RlSW52b2x2ZWQgaXMgYW4gYXJyYXkgb2YgMiBub2Rlcy48L3A+CjxkbD4KCTxkdD4oYXJyYXkpIDxiPmdldEN1c3RvbUZpZWxkczwvYj4oKTwvZHQ+Cgk8ZGQ+PHA+R2V0IGxpc3QgYWJvdXQgeW91ciBjdXJyZW50IDxiPkN1c3RvbSBGaWVsZHM8L2I+LjwvcD48L2RkPgoJPGR0PihhcnJheSkgPGI+Z2V0QWxsTm9kZUZpZWxkczwvYj4oKTwvZHQ+Cgk8ZGQ+PHA+R2V0IGxpc3QgYWJvdXQgPGI+QWxsIE5vZGUgRmllbGRzPC9iPjogZmllbGRzIG9mIDxiPm5vZGUgdGFibGU8L2I+IGFuZCA8Yj5jb250ZW50IHRhYmxlPC9iPi48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPmdldFJvb3Q8L2I+KCk8L2R0PgoJPGRkPjxwPkdldCBhcnJheSBpbmZvcm1hdGlvbiBhYm91dCByb290IE5vZGUuPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXROb2RlPC9iPiggJGlkICk8L2R0PgoJPGRkPjxwPkdldCBhcnJheSBpbmZvcm1hdGlvbiBhYm91dCBOb2RlIHdpdGggJGlkLjwvcD48L2RkPgoJPGR0PihhcnJheSkgPGI+Z2V0QnlOb2RlRmllbGQ8L2I+KCAkZmllbGQ9ImlkIiwgJHZhbHVlLCAkb3JkZXJieT0ibGZ0IiApPC9kdD4KCTxkZD48cD5HZXQgYXJyYXkocykgaW5mb3JtYXRpb24gYWJvdXQgTm9kZSBieSAkZmllbGQgb2YgPGI+QWxsIE5vZGUgRmllbGRzPC9iPiwgZGVmYXVsdCBpcyBpZC4gJG9yZGVyYnkgb3JkZXIgb3V0cHV0IGFycmF5IChsZnR8cmd0fG5vcmRlciBBU0N8REVTQyksIGRlZmF1bHQgaXMgImxmdCIuIENoZWNrICR0cmVlLT5udW1Ob2RlSW52b2x2ZWQ6IGlmID0gMSB0aGVuIHlvdSBoYXZlIGFycmF5IGluZm9ybWF0aW9uIG9mIG5vZGVJRC48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPmdldEJ5Q3VzdG9tRmllbGQ8L2I+KCAkZmllbGQ9ImlkIiwgJHZhbHVlLCAkb3JkZXJieT0ibGZ0IiApPC9kdD4KCTxkZD48cD5BbGlhcyBvZiA8Yj5nZXRCeU5vZGVGaWVsZDwvYj4oKSwgJGZpZWxkIDxiPmlkPC9iPiBvciA8Yj5DdXN0b20gRmllbGRzPC9iPiwgZGVmYXVsdCBpcyBpZC48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPmdldFBhcmVudDwvYj4oICRmaWVsZD0iaWQiLCAkdmFsdWUgKTwvZHQ+Cgk8ZGQ+PHA+R2V0IGFycmF5KHMpIGluZm9ybWF0aW9uIGFib3V0IFBhcmVudCBOb2RlIGJ5ICRmaWVsZCA8Yj5pZDwvYj4gb3IgPGI+Q3VzdG9tIEZpZWxkczwvYj4sIGRlZmF1bHQgaXMgaWQuIENoZWNrICR0cmVlLT5udW1Ob2RlSW52b2x2ZWQsIGlmID0gMSB0aGVuIHlvdSBoYXZlIGFycmF5IGluZm9ybWF0aW9uIG9mIG5vZGVJRCBhbmQgY2hlY2sgJHRyZWUtPmFyck5vZGVJbnZvbHZlZCBpZiA+MS48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPmdldFNpYmxpbmc8L2I+KCAkZmllbGQ9ImlkIiwgJHZhbHVlLCAkb3JkZXJieT0ibm9yZGVyIiwgJG5vY3VycmVudD1mYWxzZSwgJGlkeD0iaWQiICk8L2R0PgoJPGRkPjxwPkdldCBhcnJheShzKSBpbmZvcm1hdGlvbnMgYWJvdXQgU2libGluZyBOb2RlcyAoQWRqYWNlbnRzKSBieSAkZmllbGQgPGI+aWQ8L2I+IG9yIDxiPkN1c3RvbSBGaWVsZHM8L2I+LCBkZWZhdWx0IGlzIGlkLiAkb3JkZXJieSBvcmRlciBvdXRwdXQgYXJyYXkgKG5vcmRlcnxsZnR8cmd0IEFTQ3xERVNDKSwgZGVmYXVsdCBpcyAibm9yZGVyIi4gSWYgJG5vY3VycmVudCBpcyB0cnVlLCBza2lwIGZvdW5kZWQgTm9kZSBmcm9tIHJlc3VsdC4gJGlkeCBwdXQgdGhpcyBmaWVsZCwgbnVtZXJpYyBmaWVsZCBpZiBlbXB0eSwgaW4ga2V5IGFycmF5LCBkZWZhdWx0IGlzIGlkLiBDaGVjayAkdHJlZS0+bnVtTm9kZUludm9sdmVkLyR0cmVlLT5hcnJOb2RlSW52b2x2ZWQuPC9wPjwvZGQ+Cgk8ZHQ+KGludGVnZXIpIDxiPmdldFNpYmxpbmdDb3VudDwvYj4oICRpZCApPC9kdD4KCTxkZD48cD5Ib3cgbWFueSBTaWJsaW5nIE5vZGVzIG9mIE5vZGUgJGlkPzwvcD48L2RkPgoJPGR0Pihib29sZWFuKSA8Yj5oYXNfY2hpbGRyZW48L2I+KCAkaWQgKTwvZHQ+Cgk8ZGQ+PHA+SGFzIGNoaWxkcmVuIE5vZGUgJGlkPyBCb29sZWFuIHRydWUvZmFsc2UuPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXRDaGlsZHJlbjwvYj4oICRmaWVsZD0iaWQiLCAkdmFsdWUsICRkZXB0aD0xLCAkb3JkZXJieT0ibGV2ZWwsbm9yZGVyIiwgJG5vY3VycmVudD1mYWxzZSwgJGlkeD0iIiwgJGZpZWxkYWxsb3c9IiIsICR2YWx1ZWFsbG93PWZhbHNlLCAkZmllbGRkZW55PSIiLCAkdmFsdWVkZW55PWZhbHNlICk8L2R0PgoJPGRkPjxwPkdldCBhcnJheShzKSBpbmZvcm1hdGlvbnMgYWJvdXQgQ2hpbGRyZW4gTm9kZXMgYnkgJGZpZWxkIDxiPmlkPC9iPiBvciA8Yj5DdXN0b20gRmllbGRzPC9iPiwgZGVmYXVsdCBpcyBpZC4gU2V0dGluZyAkZGVwdGggdG8gMCBvciBncmVhdGVyIGdldCBjaGlsZHJlbiBvZiAkZGVwdGggc3VibGV2ZWwgb25seSwgd2l0aCAtMSBnZXQgYWxsIENoaWxkcmVuczsgZGVmYXVsdCBpcyAxIChmaXJzdCBkZXB0aCBjaGlsZHJlbnMpLiAkb3JkZXJieSBvcmRlciBvdXRwdXQgYXJyYXkgKGxldmVsfG5vcmRlcnxsZnR8cmd0IEFTQ3xERVNDKSwgZGVmYXVsdCBpcyAibGV2ZWwsbm9yZGVyIi4gSWYgJG5vY3VycmVudCBpcyB0cnVlLCBza2lwICRub2RlIGZyb20gcmVzdWx0LiAkaWR4IHB1dCB0aGlzIGZpZWxkLCBudW1lcmljIGZpZWxkIGlmIGVtcHR5LCBpbiBrZXkgYXJyYXksIGRlZmF1bHQgaXMgZW1wdHkuICRmaWVsZGFsbG93IGFuZCAkdmFsdWVhbGxvdywgJGZpZWxkZGVueSBhbmQgJHZhbHVlZGVueSBhcmUgZm9yIGxpbWl0IHRvIGFsbG93IG9yIGRlbnkgb25seSB0byB0aGlzOyBwZXJmb3JtIGEgc3FsIExJS0Ugb3IgTk9UIExJS0Ugb3BlcmF0aW9uLiBDaGVjayAkdHJlZS0+bnVtTm9kZUludm9sdmVkLyR0cmVlLT5hcnJOb2RlSW52b2x2ZWQuPC9wPjwvZGQ+Cgk8ZHQ+KGludGVnZXIpIDxiPmdldENoaWxkcmVuQ291bnQ8L2I+KCAkZmllbGQ9ImlkIiwgJHZhbHVlICk8L2R0PgoJPGRkPjxwPkhvdyBtYW55IENoaWxkcmVuIE5vZGVzIGJ5ICRmaWVsZCA8Yj5pZDwvYj4gb3IgPGI+Q3VzdG9tIEZpZWxkczwvYj4sIGRlZmF1bHQgaXMgaWQ/PC9wPjwvZGQ+Cgk8ZHQ+KGludGVnZXIpIDxiPmdldENvdW50Tm9kZXM8L2I+KCk8L2R0PgoJPGRkPjxwPlJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBOb2RlcyBpbiBhIHRyZWUuPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXRCeUxldmVsPC9iPiggJGxldmVsPTAsICRvcmRlcmJ5PSJsZnQiICk8L2R0PgoJPGRkPjxwPkFsaWFzIG9mIDxiPmdldEJ5Tm9kZUZpZWxkPC9iPigibGV2ZWwiLCAkbGV2ZWwsICRvcmRlcmJ5KS4gR2V0IGFycmF5KHMpIChtb25vZGltZW5zaW9uYWwpIGluZm9ybWF0aW9ucyBhYm91dCBOb2RlcyB3aXRoIGxldmVsICRsZXZlbCwgZGVmYXVsdCAwIChyb290KSBhbmQgbGVmdCBzb3J0aW5nLiBZb3UgY2FuIGNoZWNrICR0cmVlLT5udW1Ob2RlSW52b2x2ZWQgZm9yIGhvdyBtYW55IG5vZGVzLjwvcD48L2RkPgoJPGR0PihpbnRlZ2VyKSA8Yj5nZXRNYXhEZXB0aDwvYj4oKTwvZHQ+Cgk8ZGQ+PHA+R2V0IG1heCBEZXB0aCBvZiB3aG9sZSB0cmVlLjwvcD48L2RkPgoJPGR0PihhcnJheSkgPGI+Z2V0TGVhZjwvYj4oICRvcmRlcmJ5PSJsZnQiICk8L2R0PgoJPGRkPjxwPkdldCBhcnJheShzKSAobW9ub2RpbWVuc2lvbmFsKSBpbmZvcm1hdGlvbnMgYWJvdXQgYWxsIExlYWYgTm9kZXMuICRvcmRlcmJ5IG9yZGVyIG91dHB1dCBhcnJheSAobGV2ZWx8bm9yZGVyfGxmdHxyZ3QgQVNDfERFU0MpLCBkZWZhdWx0IGlzICJsZnQiLiBZb3UgY2FuIGNoZWNrICR0cmVlLT5udW1Ob2RlSW52b2x2ZWQgZm9yIGhvdyBtYW55IG5vZGVzLjwvcD48L2RkPgoJPGR0PihhcnJheSkgPGI+Z2V0U3ViTm9kZXM8L2I+KCAkbm9kZSwgJGRlcHRoPTEsICRvcmRlcmJ5PSJsZXZlbCxub3JkZXIiLCAkbm9jdXJyZW50PWZhbHNlLCAkaWR4PSIiLCAkZmllbGRhbGxvdz0iIiwgJHZhbHVlYWxsb3c9ZmFsc2UsICRmaWVsZGRlbnk9IiIsICR2YWx1ZWRlbnk9ZmFsc2UgKTwvZHQ+Cgk8ZGQ+PHA+U2FtZSBvZiA8Yj5nZXRDaGlsZHJlbjwvYj4oKSBidXQgd2l0aCBhIHRha2UgYSBjb21wbGV0ZSAkbm9kZSBhcnJheSAobWFuZGF0b3J5IGxmdCxyZ3QsbGV2ZWwga2V5KS48L3A+PC9kZD4KCTxkdD4oYXJyYXkpIDxiPmdldEJyZWFkY3J1bWJzPC9iPiggJGZpZWxkPSJpZCIsICR2YWx1ZSwgJGlkeD0iaWQiLCAkbm9yb290PWZhbHNlLCAkbm9jdXJyZW50PWZhbHNlLCAkY2hlY2s9IiIsICRyZXZlcnNlPWZhbHNlLCAkb3JkZXJieT0iIiApPC9kdD4KCTxkZD48cD5HZXQgYXJyYXkocykgaW5mb3JtYXRpb24gYWJvdXQgUGF0aCBOb2RlIGJ5ICRmaWVsZCA8Yj5pZDwvYj4gb3IgPGI+Q3VzdG9tIEZpZWxkczwvYj4sIGRlZmF1bHQgaXMgaWQuICRpZHggcHV0IHRoaXMgZmllbGQsIG51bWVyaWMgZmllbGQgaWYgZW1wdHksIGluIGtleSBhcnJheSwgZGVmYXVsdCBpcyBpZC4gJG5vcm9vdCB0cnVlIHNraXAgcm9vdCBub2RlLCBkZWZhdWx0IGZhbHNlLiAkbm9jdXJyZW50IHRydWUgc2tpcCBjdXJyZW50IG5vZGUsIGRlZmF1bHQgZmFsc2UuIElmICRjaGVjayBpcyBzZXQgeW91IGNhbiBzZWxlY3QgZXhhY3QgcGF0aCB0aGF0IG1hdGNoICRmaWVsZCB3aXRoICR2YWx1ZS4gQ2hlY2sgJHRyZWUtPm51bU5vZGVJbnZvbHZlZC8kdHJlZS0+YXJyTm9kZUludm9sdmVkLjwvcD48L2RkPgoJPGR0Pihib29sZWFuKSA8Yj5tYXRjaEhpZXJhcmNoeTwvYj4oICRwYXRoLCAkZmllbGQsICRkZWxpbWl0ZXI9Ii8iICk8L2R0PgoJPGRkPjxwPm1hdGNoIGhpZXJhcmNoeSBzdHJpbmcgJHBhdGggd2l0aCBhIHRyZWUgcGF0aCB3aGVuIGFyZSBtYWRlIHdpdGggJGZpZWxkIGFuZCAkZGVsaW1pdGVyPyBCb29sZWFuIHRydWUvZmFsc2UuPC9wPjwvZGQ+Cgk8ZHQ+KGFycmF5KSA8Yj5nZXRUcmVlPC9iPiggJGRlcHRoPS0xLCAkb3JkZXJieT0ibGZ0IiwgJGlkeD0iIiwgJGZpZWxkYWxsb3c9IiIsICR2YWx1ZWFsbG93PWZhbHNlLCAkZmllbGRkZW55PSIiLCAkdmFsdWVkZW55PWZhbHNlICk8L2R0PgoJPGRkPjxwPldob2xlIGFycmF5IE5vZGUgc3RydWN0dXJlIG9mIHRoZSB0cmVlLiBTZXR0aW5nICRkZXB0aCB0byAwIG9yIGdyZWF0ZXIgZ2V0IE5vZGVzIG9mICRkZXB0aCBvbmx5LCB3aXRoIC0xIGdldCBhbGwgTm9kZXM7IGRlZmF1bHQgaXMgLTEgKGFsbCBub2RlcykuICRvcmRlcmJ5IG9yZGVyIG91dHB1dCBhcnJheSAobGV2ZWx8bm9yZGVyfGxmdHxyZ3QgQVNDfERFU0MpLCBkZWZhdWx0IGlzICJsZnQiLiAkaWR4IHB1dCB0aGlzIGZpZWxkLCBudW1lcmljIGZpZWxkIGlmIGVtcHR5LCBpbiBrZXkgYXJyYXksIGRlZmF1bHQgaXMgZW1wdHkuICRmaWVsZGFsbG93IGFuZCAkdmFsdWVhbGxvdywgJGZpZWxkZGVueSBhbmQgJHZhbHVlZGVueSBhcmUgZm9yIGxpbWl0IHRvIGFsbG93IG9yIGRlbnkgb25seSB0byB0aGlzOyBwZXJmb3JtIGEgc3FsIExJS0Ugb3IgTk9UIExJS0Ugb3BlcmF0aW9uLjwvcD48L2RkPgoJPGR0PjxiPmR1bXBUcmVlPC9iPiggJGRlcHRoPS0xLCAkb3JkZXJieT0ibGZ0IiwgJGZpZWxkYWxsb3c9IiIsICR2YWx1ZWFsbG93PWZhbHNlLCAkZmllbGRkZW55PSIiLCAkdmFsdWVkZW55PWZhbHNlICk8L2R0PgoJPGRkPkFsaWFzIG9mIGdldFRyZWUoKSBmdW5jdGlvbi4gRHVtcCB3aG9sZSBOb2RlIHN0cnVjdHVyZSBvZiB0aGUgdHJlZSBpbiBhIHNtYXJ0eSB0ZW1wbGF0ZS48L3A+PC9kZD4KPC9kbD4KCjxiciAvPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KCjxwPkNvcHlyaWdodCAmY29weTsgMjAwOSwgQWxiZXJ0byBCZW5hdGkgPGEgaHJlZj0ibWFpbHRvOmNtc0B4bWUuaXQiPmFsYnk8L2E+LjxiciAvPgpTb21lIFJpZ2h0cyBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZQo8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uCllvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+Cic7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcmVlIE1hbmFnZXIgLSBhIGhlbHBmdWwgbmVzdGVkIHRyZWVzCiMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90cmVlbWFuYWdlcgojIDIwMDkgKGMpIGFsYnkgKEFsYmVydG8gQmVuYXRpKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1LTIwMDkgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMkSWQ6IG1ldGhvZC5pbnN0YWxsLnBocCA0IDIwMDktMDUtMTkgMjA6MTA6MDBaIGFsYnkgJAoKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCiRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwojbXlzcWwtc3BlY2lmaWMsIGJ1dCBpZ25vcmVkIGJ5IG90aGVyIGRhdGFiYXNlCiR0YWJsZV9vcHRpb25zID0gYXJyYXkoJ215c3FsJz0+J1RZUEU9TXlJU0FNJywgJ215c3FsaSc9PidUWVBFPU15SVNBTScpOwokaWR4X29wdGlvbnMgPSBhcnJheSgnVU5JUVVFJyk7CgoKI1RhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbnMKJHRhYmxlX2RlZmluaXRpb25zID0gYXJyYXkoCgkndHJhbnNhY3Rpb24nID0+ICIKCQlpZAkJSSBOT1ROVUxMLAoJCW1vZHVsZQlDKDE2NSkgTk9UTlVMTCwKCQl0cmVlCUMoMTY1KSBOT1ROVUxMLAoJCWludHJhbnNhY3Rpb24gSTEgTk9UTlVMTCwKCQl0c3RhbXAJSSBOT1ROVUxMCgkiLAopOwoKZm9yZWFjaCgkdGFibGVfZGVmaW5pdGlvbnMgYXMgJG5hbWU9PiRkZWZpbml0aW9uKQp7CgkjQ3JlYXRlIHRoZSB0YWJsZQoJJGMgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdHJlZV8iLiRuYW1lLCAkZGVmaW5pdGlvbiwgJHRhYmxlX29wdGlvbnMpOwoJJHJldHVybiA9ICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJGMpOwoJaWYoJHJldHVybiA8PiAyKSBkaWUoJ0Vycm9yIGNyZWF0ZTogJy5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90cmVlXyIuJG5hbWUpOwoKCSRjID0gJGRpY3QtPkNyZWF0ZUluZGV4U1FMKCdpZHhfdHJhbnNhY3Rpb25fYnlfbW9kdWxlX3RyZWUnLCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV90cmVlXyIuJG5hbWUsICdtb2R1bGUsIHRyZWUnLCAkaWR4X29wdGlvbnMpOwoJJHJldHVybiA9ICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJGMpOwoJaWYoJHJldHVybiA8PiAyKSBkaWUoJ0Vycm9yIGluZGV4OiAnLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3RyZWVfIi4kbmFtZSk7CgoJI0NyZWF0ZSBhIHNlcXVlbmNlCgkkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3RyZWVfIi4kbmFtZS4iX3NlcSIpOwp9CgojRXZlbnRzCiR0aGlzLT5DcmVhdGVFdmVudCggJ09uQWRkQ2hpbGRyZW4nICk7CiR0aGlzLT5DcmVhdGVFdmVudCggJ09uTW92ZU5vZGUnICk7CiR0aGlzLT5DcmVhdGVFdmVudCggJ09uTW92ZU9yZGVyTm9kZScgKTsKJHRoaXMtPkNyZWF0ZUV2ZW50KCAnT25EZWxldGVOb2RlJyApOwokdGhpcy0+Q3JlYXRlRXZlbnQoICdPblVwZGF0ZUN1c3RvbScgKTsKJHRoaXMtPkNyZWF0ZUV2ZW50KCAnT25VcGRhdGVDb250ZW50QWxpYXMnICk7CiR0aGlzLT5DcmVhdGVFdmVudCggJ09uRGVsZXRlQ29udGVudEFsaWFzJyApOwoKI1B1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwokdGhpcy0+QXVkaXQoMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcmVlIE1hbmFnZXIgLSBhIGhlbHBmdWwgbmVzdGVkIHRyZWVzCiMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90cmVlbWFuYWdlcgojIDIwMDkgKGMpIGFsYnkgKEFsYmVydG8gQmVuYXRpKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1LTIwMDkgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMkSWQ6IG1ldGhvZC51bmluc3RhbGwucGhwIDUgMjAwOS0wNS0yNiAwOTozMjoyNVogYWxieSAkCgppZighaXNzZXQoJGdDbXMpKSBleGl0OwoKJGRiID0mICRnQ21zLT5HZXREYigpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgokdGFibGVzID0gJHRoaXMtPl9nZXRfYWxsX3RhYmxlcygpOwpmb3JlYWNoKCR0YWJsZXMgYXMgJG5hbWUpCnsKCWlmKCFwcmVnX21hdGNoKCcvJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV90cmVlXyguKj8pL2lzbScsICRuYW1lKSkgY29udGludWU7CgkjUmVtb3ZlIHRoZSBkYXRhYmFzZSB0YWJsZSBhbmQgc2VxdWVuY2UKCSRkID0gJGRpY3QtPkRyb3BUYWJsZVNRTCgkbmFtZSk7CgkkcmV0dXJuID0gJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkZCk7CglpZigkcmV0dXJuIDw+IDIpIGRpZSgnRXJyb3IgZHJvcDogJy4kbmFtZSk7Cn0KCiNFdmVudHMKJHRoaXMtPlJlbW92ZUV2ZW50KCAnT25BZGRDaGlsZHJlbicgKTsKJHRoaXMtPlJlbW92ZUV2ZW50KCAnT25Nb3ZlTm9kZScgKTsKJHRoaXMtPlJlbW92ZUV2ZW50KCAnT25Nb3ZlT3JkZXJOb2RlJyApOwokdGhpcy0+UmVtb3ZlRXZlbnQoICdPbkRlbGV0ZU5vZGUnICk7CiR0aGlzLT5SZW1vdmVFdmVudCggJ09uVXBkYXRlQ3VzdG9tJyApOwokdGhpcy0+UmVtb3ZlRXZlbnQoICdPblVwZGF0ZUNvbnRlbnRBbGlhcycgKTsKJHRoaXMtPlJlbW92ZUV2ZW50KCAnT25EZWxldGVDb250ZW50QWxpYXMnICk7CgojUHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCiR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcmVlIE1hbmFnZXIgLSBhIGhlbHBmdWwgbmVzdGVkIHRyZWVzCiMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90cmVlbWFuYWdlcgojIDIwMDkgKGMpIGFsYnkgKEFsYmVydG8gQmVuYXRpKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1LTIwMDkgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMkSWQ6IG1ldGhvZC51cGdyYWRlLnBocCA0IDIwMDktMDUtMTkgMjA6MTA6MDBaIGFsYnkgJAoKaWYoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCiRjdXJyZW50X3ZlcnNpb24gPSAkb2xkdmVyc2lvbjsKCnN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQp7CgljYXNlICIwLjYuMCIgIDoKCQkvLyBub3RoaW5nIGhlcmUKfQoKI1B1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VwZ3JhZGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoKICA8bGk+VmVyc2lvbiAwLjEuMSBBcHIsIDIwMDkuIEluaXRpYWwgcmVsZWFzZTwvbGk+CiAgPGxpPlZlcnNpb24gMC4yLjAgQXByLCAyMDA5LiBJbXBsZW1lbnQgZW5oYW5jZWQgQ2Vsa288L2xpPgogIDxsaT5WZXJzaW9uIDAuMy4wIEFwciwgMjAwOS4gSW1wbGVtZW50IGVkaXRpbmcgQVBJPC9saT4KICA8bGk+VmVyc2lvbiAwLjMuMSBBcHIsIDIwMDkuIEltcGxlbWVudCBmZXRjaGluZyBBUEk8L2xpPgogIDxsaT5WZXJzaW9uIDAuNC4wIEFwciwgMjAwOS4gSW1wbGVtZW50IGN1c3RvbSBmaWVsZHM8L2xpPgogIDxsaT5WZXJzaW9uIDAuNC4xIEFwciwgMjAwOS4gSGVscCBhbmQgYnVnZml4PC9saT4KICA8bGk+VmVyc2lvbiAwLjQuMiBBcHIsIDIwMDkuIFBvc3RncmVTUUwgbG92ZTwvbGk+CiAgPGxpPlZlcnNpb24gMC41LjAgQXByLCAyMDA5LiBBZGQgbnVtTm9kZUludm9sdmVkLiBSRVdST1RFIGVkaXRpbmcgZnVuY3Rpb25zOiBwb3N0Z3JlU1FMIGJ1Z2d5IGluIGFkb2RiX2xpdGUsIGFmZmVjdGVkX3Jvd3MgaXMgZmFsc2UgYWx3YXlzITwvbGk+CiAgPGxpPlZlcnNpb24gMC42LjAgTWF5LCAyMDA5LiBBZGQgQ29udGVudCBBbGlhcyBhbmQgbWF0Y2hIaWVyYXJjaHkgcGF0aC4gQWRkIEV2ZW50czwvbGk+Cgo8L3VsPg==]]></data>
	</file>
	<file>
	  <filename>/templates/dump.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0cmVlfTogeyR0cmVlX25hbWV9CjxwcmU+Cgp7Zm9yZWFjaCBmcm9tPSRkdW1wcyBpdGVtPXJlc3VsdH0KeycgJ3xzdHJfcmVwZWF0OiRyZXN1bHQubGV2ZWwqNX08ZW0+e2ZvcmVhY2ggZnJvbT0kcmVzdWx0IGtleT1rZXkgaXRlbT1pdGVtfXtpZiAka2V5PT0naWQnfTxiPiNJRDp7JGl0ZW19PC9iPiB7ZWxzZWlmICRrZXkhPSdsYW5nJ308ZW0+ICB7JGtleX06eyRpdGVtfTwvZW0+ey9pZn08L2VtPnsvZm9yZWFjaH0KCgp7L2ZvcmVhY2h9Cgo8L3ByZT4K]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCR0aXRsZV9lcnJvcil9PGgzPnskdGl0bGVfZXJyb3J9PC9oMz57L2lmfQo8cD48c3Ryb25nPnskbWVzc2FnZX08L3N0cm9uZz48L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/TreeManager.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcmVlIE1hbmFnZXIgLSBhIGhlbHBmdWwgbmVzdGVkIHRyZWVzCiMgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy90cmVlbWFuYWdlcgojIDIwMDkgKGMpIGFsYnkgKEFsYmVydG8gQmVuYXRpKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1LTIwMDkgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMkSWQ6IFRyZWVNYW5hZ2VyLm1vZHVsZS5waHAgOSAyMDA5LTA2LTA0IDE2OjM5OjQ2WiBhbGJ5ICQKCmNsYXNzIFRyZWVNYW5hZ2VyIGV4dGVuZHMgQ01TTW9kdWxlCnsKCXZhciAkbW9kdWxlOwoJdmFyICRsYW5nOwoJdmFyICRudW1Ob2RlSW52b2x2ZWQ7Cgl2YXIgJGFyck5vZGVJbnZvbHZlZDsKCgl2YXIgJF9jdXN0b21GaWVsZDsKCXZhciAkX2FsbE5vZGVGaWVsZDsKCXZhciAkX2luVHJhbnNhY3Rpb247Cgl2YXIgJF9wZXJpb2RUcmFuc2FjdGlvbjsKCglmdW5jdGlvbiBUcmVlTWFuYWdlcigpCgl7CgkJcGFyZW50OjpDTVNNb2R1bGUoKTsKCQkkdGhpcy0+c2V0UGVyaW9kVHJhbnNhY3Rpb24oKTsKCgkJJHRoaXMtPm1vZHVsZT0nJzsKCQkkdGhpcy0+X2N1c3RvbUZpZWxkPWFycmF5KCk7CgkJJHRoaXMtPl9hbGxOb2RlRmllbGQ9YXJyYXkoJ2lkJywncGFyZW50JywnbGZ0Jywncmd0JywnbGV2ZWwnLCdub3JkZXInLCd0cmVlJywnc2tpcCcsJ2NoaWxkcmVuJywnbm9kZV9pZCcsJ2NvbnRlbnRfYWxpYXMnLCdsYW5nJyk7CgkJJHRoaXMtPl9pblRyYW5zYWN0aW9uPW51bGw7Cgl9CgoJZnVuY3Rpb24gQWxsb3dBdXRvSW5zdGFsbCgpIHtyZXR1cm4gZmFsc2U7fQoKCWZ1bmN0aW9uIEdldE5hbWUoKSB7cmV0dXJuICdUcmVlTWFuYWdlcic7fQoKCWZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHtyZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpO30KCglmdW5jdGlvbiBHZXRWZXJzaW9uKCkge3JldHVybiAnMC42LjAnO30KCglmdW5jdGlvbiBHZXRIZWxwKCkge3JldHVybiAkdGhpcy0+TGFuZygnaGVscCcpO30KCglmdW5jdGlvbiBHZXRBdXRob3IoKSB7cmV0dXJuICdhbGJ5Jzt9CgoJZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7cmV0dXJuICdjbXNAeG1lLml0Jzt9CgoJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkge3JldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjaGFuZ2Vsb2cudHBsJyk7fQoKCWZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkge3JldHVybiBmYWxzZTt9CgoJZnVuY3Rpb24gSGFzQWRtaW4oKSB7cmV0dXJuIGZhbHNlO30KCglmdW5jdGlvbiBJc0FkbWluT25seSgpIHtyZXR1cm4gZmFsc2U7fQoKCSNmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSB7cmV0dXJuICdleHRlbnNpb25zJzt9CgkjZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpIHtyZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7fQoJI2Z1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHtyZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKTt9CgoJZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkge3JldHVybiBhcnJheSgpO30KCglmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zPWFycmF5KCkpCgl7CgkJaWYoJ3RyZWUnID09IHN0cnRvbG93ZXIoJGNhcGFiaWxpdHkpKSByZXR1cm4gdHJ1ZTsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJZnVuY3Rpb24gR2V0RXZlbnREZXNjcmlwdGlvbigkZXZlbnRuYW1lKSB7cmV0dXJuICR0aGlzLT5MYW5nKCdldmVudF9pbmZvXycuICRldmVudG5hbWUpO30KCglmdW5jdGlvbiBHZXRFdmVudEhlbHAoJGV2ZW50bmFtZSkge3JldHVybiAkdGhpcy0+TGFuZygnZXZlbnRfaGVscF8nLiAkZXZlbnRuYW1lKTt9CgoJZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7cmV0dXJuICcxLjUuMSc7fQoKCWZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHtyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7fQoKCWZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkge3JldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpO30KCglmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkge3JldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpO30KCglmdW5jdGlvbiBfRGlzcGxheUVycm9yUGFnZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlPScnLCAkYWRtaW49ZmFsc2UpCgl7CgkJaWYoJGFkbWluKSAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Vycm9yJywgJHRoaXMtPkxhbmcoJ2Vycm9yJykpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRtZXNzYWdlKTsKCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwoJfQoKCglmdW5jdGlvbiBpbml0VHJlZSggJG1vZHVsZSwgJGN1c3RvbUZpZWxkPWFycmF5KCksICRsYW5nPScnICkKCXsKCQlpZihpc19vYmplY3QoJG1vZHVsZSkpCgkJCSR0aGlzLT5tb2R1bGUgPSBzdHJ0b2xvd2VyKCRtb2R1bGUtPkdldE5hbWUoKSk7CgkJZWxzZWlmKGlzX3N0cmluZygkbW9kdWxlKSkKCQkJJHRoaXMtPm1vZHVsZSA9IHN0cnRvbG93ZXIoJG1vZHVsZSk7CgoJCWlmKGVtcHR5KCR0aGlzLT5tb2R1bGUpKQoJCQlyZXR1cm4gJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnZXJyb3JfbW9kdWxlJykpOwoKCQlpZighaXNfYXJyYXkoJGN1c3RvbUZpZWxkKSkKCQkJcmV0dXJuICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2Vycm9yX2ZpZWxkJykpOwoKCQkkdGhpcy0+bGFuZyA9ICRsYW5nOwoJCSR0aGlzLT5fY3VzdG9tRmllbGQgPSAkY3VzdG9tRmllbGQ7CgkJJHRoaXMtPl9hbGxOb2RlRmllbGQgPSBhcnJheV9tZXJnZSgkdGhpcy0+X2FsbE5vZGVGaWVsZCwgJGN1c3RvbUZpZWxkKTsKCgkJJHRhYmxlcyA9ICR0aGlzLT5fZ2V0X2FsbF90YWJsZXMoKTsKCQlpZihpbl9hcnJheShjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV90cmVlX3RyYW5zYWN0aW9uJywkdGFibGVzKSAmJiAhZGVmaW5lZCgnQ01TX1RBQkxFX1RSRUVfTk9ERScpKQoJCXsKCQkJZGVmaW5lKCdDTVNfVEFCTEVfVFJFRV9UUkFOU0FDVElPTicsIGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3RyZWVfdHJhbnNhY3Rpb24nKTsKCQkJZGVmaW5lKCdDTVNfVEFCTEVfVFJFRV9OT0RFJywgY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdHJlZV8nLiR0aGlzLT5tb2R1bGUuJ19ub2RlJyk7CgkJCWRlZmluZSgnQ01TX1RBQkxFX1RSRUVfQ09OVEVOVCcsIGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3RyZWVfJy4kdGhpcy0+bW9kdWxlLidfY29udGVudCcpOwoJCX0KCX0KCWZ1bmN0aW9uIHNldE91dHB1dCggJG91dCwgJGludm9sZGVkPW51bGwsICRyZXR1cm5fb25lPXRydWUgKQoJewoJCSR0aGlzLT5udW1Ob2RlSW52b2x2ZWQ9ZmFsc2U7CgkJaWYoaXNfYXJyYXkoJG91dCkpCgkJewoJCQkkdGhpcy0+bnVtTm9kZUludm9sdmVkID0gY291bnQoJG91dCk7CgkJCWlmKCFpc19udWxsKCRpbnZvbGRlZCkpICR0aGlzLT5hcnJOb2RlSW52b2x2ZWQgPSAkaW52b2xkZWQ7CgkJCWlmKCRyZXR1cm5fb25lICYmIGNvdW50KCRvdXQpPT0xKSByZXR1cm4gJG91dFswXTsKCQkJcmV0dXJuICRvdXQ7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCgovLyBCZWdpbiBwcml2YXRlIGZ1bmN0aW9ucyAvLwoJZnVuY3Rpb24gX2JlZ2luVHJhbnNhY3Rpb24oICR0cmVlPScnICkKCXsKCQlpZighZGVmaW5lZCgnQ01TX1RBQkxFX1RSRUVfVFJBTlNBQ1RJT04nKSB8fCAhZGVmaW5lZCgnQ01TX1RBQkxFX1RSRUVfTk9ERScpIHx8ICFkZWZpbmVkKCdDTVNfVEFCTEVfVFJFRV9DT05URU5UJykpCgkJCXJldHVybiBmYWxzZTsKCgkJJHRzdGFtcCA9IHRpbWUoKTsKCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkJJHEgPSAiU0VMRUNUIGludHJhbnNhY3Rpb24sIHRzdGFtcAoJCQlGUk9NICIuIENNU19UQUJMRV9UUkVFX1RSQU5TQUNUSU9OIC4iCgkJCVdIRVJFIG1vZHVsZSA9ID8gQU5EIHRyZWUgPSA/IjsKCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxLCBhcnJheSgkdGhpcy0+bW9kdWxlLCAkdHJlZSkpOwoJCWlmKCEkZGJyZXN1bHQpIGRpZSgnRXJyb3I6IHF1ZXJ5OiAnLiRxKTsKCQlpZigkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPT0gMCkKCQl7CgkJCSR0aWQgPSAkZGItPkdlbklEKENNU19UQUJMRV9UUkVFX1RSQU5TQUNUSU9OLidfc2VxJyk7CgkJCSRxaSA9ICJJTlNFUlQgSU5UTyAiLiBDTVNfVEFCTEVfVFJFRV9UUkFOU0FDVElPTiAuIgoJCQkJKGlkLCBtb2R1bGUsIHRyZWUsIGludHJhbnNhY3Rpb24sIHRzdGFtcCkKCQkJCVZBTFVFUyAoPyw/LD8sMSx7JHRzdGFtcH0pIjsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcWksIGFycmF5KCR0aWQsICR0aGlzLT5tb2R1bGUsICR0cmVlKSk7CgkJfQoJCWVsc2UKCQl7CgkJCSRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CgkJCWlmKCRyb3dbJ2ludHJhbnNhY3Rpb24nXT09MSAmJiAkcm93Wyd0c3RhbXAnXT4oJHRzdGFtcC0kdGhpcy0+X3BlcmlvZFRyYW5zYWN0aW9uKSkKCQkJewoJCQkJJHRoaXMtPl9pblRyYW5zYWN0aW9uID0gdHJ1ZTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX1RSQU5TQUNUSU9OIC4iCgkJCQlTRVQgaW50cmFuc2FjdGlvbiA9IDEsIHRzdGFtcCA9ID8KCQkJCVdIRVJFIG1vZHVsZSA9ID8gQU5EIHRyZWUgPSA/IjsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCR0c3RhbXAsICR0aGlzLT5tb2R1bGUsICR0cmVlKSk7CgkJfQoJCWlmKCAkZGJyZXN1bHQgKQoJCXsKCQkJJHRoaXMtPl9pblRyYW5zYWN0aW9uID0gdHJ1ZTsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCWZ1bmN0aW9uIF9jbGVhbl9jdXN0b21fc2NoZW1hKCAkc2NoZW1hICkKCXsKCQkkY3VzdG9tID0gYXJyYXlfa2V5cygkc2NoZW1hKTsKCQkjR2V0IHJpZCBvZiBhbnkgZHVwbGljYXRlcwoJCSRjdXN0b20gPSBhcnJheV91bmlxdWUoJGN1c3RvbSk7CgkJI09ubHkga2VlcCBub24tcHJvdGVjdGVkIGZpZWxkcwoJCSRjdXN0b20gPSBhcnJheV9kaWZmKCRjdXN0b20sICR0aGlzLT5fYWxsTm9kZUZpZWxkKTsKCQlyZXR1cm4gJGN1c3RvbTsKCX0KCWZ1bmN0aW9uIF9hZGRfY3VzdG9tX2ZpZWxkKCAkc2NoZW1hICkKCXsKCQlpZighZGVmaW5lZCgnQ01TX1RBQkxFX1RSRUVfVFJBTlNBQ1RJT04nKSkgZGllKCdFcnJvcjogbm8gaW5pdFRyZWUoKSBjYWxsaW5nPycpOwoKCQlpZighaXNfYXJyYXkoJHNjaGVtYSkpCgkJCXJldHVybiAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdlcnJvcl9zY2hlbWEnKSk7CgoJCSRjbGVhbkZpZWxkcyA9ICR0aGlzLT5fY2xlYW5fY3VzdG9tX3NjaGVtYSgkc2NoZW1hKTsKCQlpZihjb3VudCgkY2xlYW5GaWVsZHMpID09IDApCgkJCXJldHVybiAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdlcnJvcl9jbGVhbmZpZWxkJykpOwoKCQkkdGhpcy0+X2FkZF9jb250ZW50X3RhYmxlKCRzY2hlbWEsICRjbGVhbkZpZWxkcyk7CgoJCSR0aGlzLT5fY3VzdG9tRmllbGQgPSBhcnJheV9tZXJnZSgkdGhpcy0+X2N1c3RvbUZpZWxkLCAkY2xlYW5GaWVsZHMpOwoJCSR0aGlzLT5fYWxsTm9kZUZpZWxkID0gYXJyYXlfbWVyZ2UoJHRoaXMtPl9hbGxOb2RlRmllbGQsICRjbGVhbkZpZWxkcyk7Cgl9CglmdW5jdGlvbiBfZ2V0X2FsbF90YWJsZXMoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQlzd2l0Y2goJGdDbXMtPmNvbmZpZ1snZGJtcyddKQoJCXsKCQkJY2FzZSAnbXlzcWwnOgoJCQljYXNlICdteXNxbGknOgoJCQkJJHFjID0gIlNIT1cgVEFCTEVTIjsKCQkJCWJyZWFrOwoJCQljYXNlICdwb3N0Z3JlczcnOgoJCQkJJHFjID0gInNlbGVjdCB0YWJsZV9uYW1lIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWE9J3B1YmxpYyciOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6IGRpZSgnTm8gU1FMIGRyaXZlciBpbiBjb25maWcucGhwIChteXNxbCxteXNxbGkscG9zdGdyZXM3KT8nKTsKCQl9CgoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkkZGItPlNldEZldGNoTW9kZShBRE9EQl9GRVRDSF9OVU0pOwoJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcWMpOwoJCSRkYi0+U2V0RmV0Y2hNb2RlKEFET0RCX0ZFVENIX0FTU09DKTsKCQlpZighJGRicmVzdWx0KSBkaWUoJ0Vycm9yIGluIHNxbCBzaG93OiAnLiRxYyk7CgoJCSR0YWJsZXM9YXJyYXkoKTsKCQl3aGlsZSgkZGJyZXN1bHQgJiYgJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJCSR0YWJsZXNbXSA9ICRyb3dbMF07CgoJCXJldHVybiAkdGFibGVzOwoJfQoJZnVuY3Rpb24gX2FkZF9jb250ZW50X3RhYmxlKCAkc2NoZW1hLCAkY2xlYW5GaWVsZHMgKQoJewoJCSRjb2x1bW5zPScnOwoJCWZvcmVhY2goJGNsZWFuRmllbGRzIGFzICRmaWVsZCkKCQkJJGNvbHVtbnMgLj0gIixcbiIuICRmaWVsZCAuJyAnLiAkc2NoZW1hWyRmaWVsZF07CgoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkJJHRibF9vcHRpb25zID0gYXJyYXkoJ215c3FsJz0+J1RZUEU9TXlJU0FNJywgJ215c3FsaSc9PidUWVBFPU15SVNBTScpOwoJCSRpZHhfb3B0aW9ucyA9IGFycmF5KCdVTklRVUUnKTsKCgkJJHRhYmxlcyA9ICR0aGlzLT5fZ2V0X2FsbF90YWJsZXMoKTsKCQlpZihpbl9hcnJheShDTVNfVEFCTEVfVFJFRV9DT05URU5ULCAkdGFibGVzKSkKCQl7CgkJCSRjID0gJGRpY3QtPkFkZENvbHVtblNRTChDTVNfVEFCTEVfVFJFRV9DT05URU5ULCAkY29sdW1ucyk7CgkJCSRyZXR1cm4gPSAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRjKTsKCQkJaWYoJHJldHVybiA8PiAyKSBkaWUoJ0Vycm9yIGFkZCBjb2x1bW4gaW4gJy5DTVNfVEFCTEVfVFJFRV9DT05URU5UKTsKCQl9CgkJZWxzZQoJCXsKCQkJJHFjMSA9ICJpZAlJIE5PVE5VTEwsCgkJCQlwYXJlbnQJSSBOT1ROVUxMLAoJCQkJbGZ0CUkgTk9UTlVMTCwKCQkJCXJndAlJIE5PVE5VTEwsCgkJCQlsZXZlbAlJIE5PVE5VTEwsCgkJCQlub3JkZXIJSSBOT1ROVUxMLAoJCQkJdHJlZQlDKDE2NSkgTk9UTlVMTCwKCQkJCXNraXAJSTEgTk9UTlVMTCI7CgoJCQkkcWMyID0gIm5vZGVfaWQJCUlOVCBOT1ROVUxMLAoJCQkJY29udGVudF9hbGlhcwlJLAoJCQkJbGFuZwkJQyg4KSBOT1ROVUxMIi4KCQkJCSRjb2x1bW5zOwoKCQkJJGMgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoQ01TX1RBQkxFX1RSRUVfTk9ERSwgJHFjMSwgJHRibF9vcHRpb25zKTsKCQkJJHJldHVybiA9ICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJGMpOwoJCQlpZigkcmV0dXJuIDw+IDIpIGRpZSgnRXJyb3IgY3JlYXRlOiAnLkNNU19UQUJMRV9UUkVFX05PREUpOwoKCQkJJGMgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoJ2lkeF9ub2RlX2J5X2lkX3RyZWUnLCBDTVNfVEFCTEVfVFJFRV9OT0RFLCAnaWQsIHRyZWUnLCAkaWR4X29wdGlvbnMpOwoJCQkkcmV0dXJuID0gJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkYyk7CgkJCWlmKCRyZXR1cm4gPD4gMikgZGllKCdFcnJvciBpbmRleDogJy5DTVNfVEFCTEVfVFJFRV9OT0RFKTsKCgkJCSRkYi0+Q3JlYXRlU2VxdWVuY2UoQ01TX1RBQkxFX1RSRUVfTk9ERS4nX3NlcScpOwoKCQkJJGMgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoQ01TX1RBQkxFX1RSRUVfQ09OVEVOVCwgJHFjMiwgJHRibF9vcHRpb25zKTsKCQkJJHJldHVybiA9ICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJGMpOwoJCQlpZigkcmV0dXJuIDw+IDIpIGRpZSgnRXJyb3IgY3JlYXRlOiAnLkNNU19UQUJMRV9UUkVFX0NPTlRFTlQpOwoKCQkJJGMgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoJ2lkeF9jb250ZW50X2J5X25vZGVpZF9sYW5nJywgQ01TX1RBQkxFX1RSRUVfQ09OVEVOVCwgJ25vZGVfaWQsIGxhbmcnLCAkaWR4X29wdGlvbnMpOwoJCQkkcmV0dXJuID0gJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkYyk7CgkJCWlmKCRyZXR1cm4gPD4gMikgZGllKCdFcnJvciBpbmRleDogJy5DTVNfVEFCTEVfVFJFRV9DT05URU5UKTsKCQl9Cgl9CglmdW5jdGlvbiBfY2hlY2tGaWVsZCggJGZpZWxkLCAkYXJyX25vZGU9YXJyYXkoJ2lkJykgKQoJewoJCSRhcnIgPSBhcnJheV9tZXJnZSgkYXJyX25vZGUsICR0aGlzLT5fY3VzdG9tRmllbGQpOwoJCWlmKGluX2FycmF5KCRmaWVsZCwgJGFycikpIHJldHVybiB0cnVlOwoJCXJldHVybiBmYWxzZTsKCX0KLy8gRW5kIHByaXZhdGUgZnVuY3Rpb25zIC8vCgoKLy8gQmVnaW4gZWRpdGluZyBmdW5jdGlvbnMgLy8KCWZ1bmN0aW9uIF91cGRhdGVfY3VzdG9tKCAkaWQsICRpbnB1dD1hcnJheSgpLCAkdHJlZT0nJyApCgl7CgkJaWYoaXNfbnVsbCgkdGhpcy0+X2luVHJhbnNhY3Rpb24pIHx8ICR0aGlzLT5faW5UcmFuc2FjdGlvbikKCQkJaWYoISR0aGlzLT5fYmVnaW5UcmFuc2FjdGlvbigkdHJlZSkpIHJldHVybiBmYWxzZTsKCgkJJHRlc3Q9ZmFsc2U7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCSRxID0gIlNFTEVDVCBjb250ZW50X2FsaWFzCgkJCUZST00gIi4gQ01TX1RBQkxFX1RSRUVfQ09OVEVOVCAuIgoJCQlXSEVSRSBub2RlX2lkID0gPyBBTkQgbGFuZyA9ID8iOwoJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHEsIGFycmF5KCRpZCwgJHRoaXMtPmxhbmcpKTsKCQlpZigkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpPT0wKQoJCXsKCQkJJHRlc3QgPSAkdGhpcy0+X2FkZF9jb250ZW50KCRpZCwgJGlucHV0KTsKCQl9CgkJZWxzZWlmKCRkYnJlc3VsdCAmJiAkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKSAmJiBlbXB0eSgkcm93Wydjb250ZW50X2FsaWFzJ10pKQoJCXsKCQkJJGNvbHM9Jyc7ICR2YWx1ZXM9YXJyYXkoKTsKCQkJZm9yZWFjaCgkdGhpcy0+X2N1c3RvbUZpZWxkIGFzICRpdGVtKQoJCQl7CgkJCQlpZihpc3NldCgkaW5wdXRbJGl0ZW1dKSkKCQkJCXsKCQkJCQkkY29scyAuPSAkaXRlbSAuJyA9ID8sICc7CgkJCQkJJHZhbHVlc1tdID0gJGlucHV0WyRpdGVtXTsKCQkJCX0KCQkJfQoJCQlpZihjb3VudCgkdmFsdWVzKSA+IDApCgkJCXsKCQkJCSRjb2xzID0gc3Vic3RyKCRjb2xzLCAwLCAtMik7CgkJCQkkdmFsdWVzID0gYXJyYXlfbWVyZ2UoJHZhbHVlcywgYXJyYXkoJGlkLCAkdGhpcy0+bGFuZykpOwoKCQkJCSRxdSA9ICJVUERBVEUgIi4gQ01TX1RBQkxFX1RSRUVfQ09OVEVOVCAuIgoJCQkJCVNFVCB7JGNvbHN9CgkJCQkJV0hFUkUgbm9kZV9pZCA9ID8gQU5EIGxhbmcgPSA/IjsKCQkJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1LCAkdmFsdWVzKTsKCQkJCWlmKCAkZGJyZXN1bHQgKSAkdGVzdCA9IHRydWU7CgkJCX0KCQl9CgkJJHRoaXMtPmVuZFRyYW5zYWN0aW9uKCR0cmVlKTsKCQlpZiggJHRlc3QgKQoJCXsKCQkJJHBhcm1zPWFycmF5KCk7CgkJCSRwYXJtc1snaWQnXSA9ICRpZDsKCQkJJHBhcm1zWyd0cmVlJ10gPSAkdHJlZTsKCQkJJHRoaXMtPlNlbmRFdmVudCgnT25VcGRhdGVDdXN0b20nLCRwYXJtcyk7CgkJfQoJCXJldHVybiAkdGVzdDsKCX0KCWZ1bmN0aW9uIF9hZGRfY29udGVudCggJGlkLCAkaW5wdXQ9YXJyYXkoKSApCgl7CgkJJGNvbHM9J25vZGVfaWQsIGxhbmcnOwoJCSR2YWx1ZXMgPSBhcnJheSgkaWQsICR0aGlzLT5sYW5nKTsKCQlmb3JlYWNoKCR0aGlzLT5fY3VzdG9tRmllbGQgYXMgJGl0ZW0pCgkJewoJCQlpZihpc3NldCgkaW5wdXRbJGl0ZW1dKSkKCQkJewoJCQkJJGNvbHMgLj0gJywgJy4gJGl0ZW07CgkJCQkkdmFsdWVzW10gPSAkaW5wdXRbJGl0ZW1dOwoJCQl9CgkJfQoKCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkJJHFpID0gIklOU0VSVCBJTlRPICIuIENNU19UQUJMRV9UUkVFX0NPTlRFTlQgLiIKCQkJKHskY29sc30pCgkJCVZBTFVFUyAoIi4gc3Vic3RyKHN0cl9yZXBlYXQoJz8sJywgY291bnQoJHZhbHVlcykpLCAwLCAtMSkgLiIpIjsKCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxaSwgJHZhbHVlcyk7CgkJaWYoICRkYnJlc3VsdCApIHJldHVybiB0cnVlOwoJCXJldHVybiBmYWxzZTsKCX0KCWZ1bmN0aW9uIF9kZWxldGVfY29udGVudCggJGlkICkKCXsKCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkJJHFkID0gIkRFTEVURSBGUk9NICIuIENNU19UQUJMRV9UUkVFX0NPTlRFTlQgLiIKCQkJV0hFUkUgbm9kZV9pZCA9ID8iOwoJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHFkLCBhcnJheSgkaWQpKTsKCQlpZiggJGRicmVzdWx0ICkgcmV0dXJuIHRydWU7CgkJcmV0dXJuIGZhbHNlOwoJfQoJZnVuY3Rpb24gX3VwZGF0ZV9jb250ZW50X2FsaWFzKCAkaWQsICRhbGlhc19pZCwgJHRyZWU9JycgKQoJewoJCWlmKGlzX251bGwoJHRoaXMtPl9pblRyYW5zYWN0aW9uKSB8fCAkdGhpcy0+X2luVHJhbnNhY3Rpb24pCgkJCWlmKCEkdGhpcy0+X2JlZ2luVHJhbnNhY3Rpb24oJHRyZWUpKSByZXR1cm4gZmFsc2U7CgoJCSR0ZXN0PWZhbHNlOwoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX0NPTlRFTlQgLiIKCQkJU0VUIGNvbnRlbnRfYWxpYXMgPSA/CgkJCVdIRVJFIG5vZGVfaWQgPSA/IEFORCBsYW5nID0gPyI7CgkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCRhbGlhc19pZCwgJGlkLCAkdGhpcy0+bGFuZykpOwoJCWlmKCAkZGJyZXN1bHQgKSAkdGVzdCA9IHRydWU7CgoJCSR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgkJaWYoICR0ZXN0ICkKCQl7CgkJCSRwYXJtcz1hcnJheSgpOwoJCQkkcGFybXNbJ2lkJ10gPSAkaWQ7CgkJCSRwYXJtc1snYWxpYXMnXSA9ICRhbGlhc19pZDsKCQkJJHBhcm1zWyd0cmVlJ10gPSAkdHJlZTsKCQkJJHRoaXMtPlNlbmRFdmVudCgnT25VcGRhdGVDb250ZW50QWxpYXMnLCRwYXJtcyk7CgkJfQoJCXJldHVybiAkdGVzdDsKCX0KCWZ1bmN0aW9uIF9kZWxldGVfY29udGVudF9hbGlhcyggJGlkLCAkdHJlZT0nJyApCgl7CgkJaWYoaXNfbnVsbCgkdGhpcy0+X2luVHJhbnNhY3Rpb24pIHx8ICR0aGlzLT5faW5UcmFuc2FjdGlvbikKCQkJaWYoISR0aGlzLT5fYmVnaW5UcmFuc2FjdGlvbigkdHJlZSkpIHJldHVybiBmYWxzZTsKCgkJJHRlc3Q9ZmFsc2U7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCSRxdSA9ICJVUERBVEUgIi4gQ01TX1RBQkxFX1RSRUVfQ09OVEVOVCAuIgoJCQlTRVQgY29udGVudF9hbGlhcyA9IE5VTEwKCQkJV0hFUkUgbm9kZV9pZCA9ID8gQU5EIGxhbmcgPSA/IjsKCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoJGlkLCAkdGhpcy0+bGFuZykpOwoJCWlmKCAkZGJyZXN1bHQgKSAkdGVzdCA9IHRydWU7CgoJCSR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgkJaWYoICR0ZXN0ICkKCQl7CgkJCSRwYXJtcz1hcnJheSgpOwoJCQkkcGFybXNbJ2lkJ10gPSAkaWQ7CgkJCSRwYXJtc1sndHJlZSddID0gJHRyZWU7CgkJCSR0aGlzLT5TZW5kRXZlbnQoJ09uRGVsZXRlQ29udGVudEFsaWFzJywkcGFybXMpOwoJCX0KCQlyZXR1cm4gJHRlc3Q7Cgl9CgoJZnVuY3Rpb24gX2FkZF9yb290X25vZGUoICRpbnB1dD1hcnJheSgpLCAkZm9yY2VpZD1mYWxzZSwgJHRyZWU9JycgKQoJewoJCWlmKGlzX251bGwoJHRoaXMtPl9pblRyYW5zYWN0aW9uKSB8fCAkdGhpcy0+X2luVHJhbnNhY3Rpb24pCgkJCWlmKCEkdGhpcy0+X2JlZ2luVHJhbnNhY3Rpb24oJHRyZWUpKSByZXR1cm4gZmFsc2U7CgoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQlpZiggJGZvcmNlaWQgKQoJCXsKCQkJJG5vZGVpZCA9IChpbnQpJGZvcmNlaWQ7CgkJCWlmKGVtcHR5KCRub2RlaWQpKQoJCQl7CgkJCQkkdGhpcy0+ZW5kVHJhbnNhY3Rpb24oJHRyZWUpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCSRxID0gIlNFTEVDVCBNQVgoaWQpIGFzIGlkIEZST00gIi4gQ01TX1RBQkxFX1RSRUVfTk9ERTsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcSk7CgkJCWlmKCRkYnJlc3VsdCAmJiAkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgJGNhdGlkID0gJHJvd1snaWQnXTsKCQl9CgkJZWxzZQoJCXsKCQkJJG5vZGVpZCA9ICRkYi0+R2VuSUQoQ01TX1RBQkxFX1RSRUVfTk9ERS4nX3NlcScpOwoJCX0KCQkkcWkgPSAiSU5TRVJUIElOVE8gIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkoaWQsIHBhcmVudCwgbGZ0LCByZ3QsIGxldmVsLCBub3JkZXIsIHRyZWUsIHNraXApCgkJCVZBTFVFUyAoPywwLDEsMiwwLDEsPywwKSI7CgkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcWksIGFycmF5KCRub2RlaWQsICR0cmVlKSk7CgkJaWYoICRkYnJlc3VsdCApCgkJewoJCQkkdGhpcy0+X2FkZF9jb250ZW50KCRub2RlaWQsICRpbnB1dCk7CgkJCWlmKCRmb3JjZWlkICYmICRub2RlaWQ+JGNhdGlkKQoJCQl7CgkJCQl3aGlsZSgkbm9kZWlkID4gJGNhdGlkKQoJCQkJCSRjYXRpZCA9ICRkYi0+R2VuSUQoQ01TX1RBQkxFX1RSRUVfTk9ERS4nX3NlcScpOwoJCQl9CgkJCSR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgkJCXJldHVybiAkbm9kZWlkOwoJCX0KCQkkdGhpcy0+ZW5kVHJhbnNhY3Rpb24oJHRyZWUpOwoJCXJldHVybiBmYWxzZTsKCX0KCWZ1bmN0aW9uIF9hZGRfbm9kZSggJHBhcmVudD0tMSwgJGlucHV0PWFycmF5KCksICRub3JkZXI9LTEsICRmb3JjZWlkPWZhbHNlLCAkdHJlZT0nJyApCgl7CgkJaWYoaXNfbnVsbCgkdGhpcy0+X2luVHJhbnNhY3Rpb24pIHx8ICR0aGlzLT5faW5UcmFuc2FjdGlvbikKCQkJaWYoISR0aGlzLT5fYmVnaW5UcmFuc2FjdGlvbigkdHJlZSkpIHJldHVybiBmYWxzZTsKCgkJaWYoZW1wdHkoJHBhcmVudCkgfHwgJHBhcmVudCA9PSAtMSkKCQkJcmV0dXJuICR0aGlzLT5fYWRkX3Jvb3Rfbm9kZSgkaW5wdXQsICR0cmVlKTsKCgkJJHRtcCA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJycsICdpZCA9ID8nLCBhcnJheSgkcGFyZW50KSwgZmFsc2UsICR0cmVlKTsKCQlpZiggJHRtcCApCgkJewoJCQlpZihjb3VudCgkdG1wKSA9PSAwKQoJCQkJcmV0dXJuICR0aGlzLT5fYWRkX3Jvb3Rfbm9kZSgkaW5wdXQsICR0cmVlKTsKCgkJCSRyb3cxID0gJHRtcFswXTsKCgkJCSRsZWZ0ID0gJHJvdzFbJ2xmdCddICsxOwoJCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgoJCQkjVXBkYXRlIE9yZGVyIChzZXQgbm9yZGVyID0gbm9yZGVyICsxIHdoZXJlIG5vcmRlcj4kbm9yZGVyKQoJCQlpZigkbm9yZGVyID09IC0xKQoJCQl7CgkJCQkkcTIgPSAiU0VMRUNUIG5vcmRlcgoJCQkJCUZST00gIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJCVdIRVJFIHBhcmVudCA9ID8gQU5EIHRyZWUgPSA/CgkJCQkJT1JERVIgQlkgbm9yZGVyIERFU0MiOwoJCQkJJGRicmVzdWx0ID0mICRkYi0+U2VsZWN0TGltaXQoJHEyLCAxLCAwLCBhcnJheSgkcGFyZW50LCAkdHJlZSkpOwoJCQkJaWYoJGRicmVzdWx0ICYmICRyb3cyPSRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQkJCQkkbm9yZGVyID0gJHJvdzJbJ25vcmRlciddICsxOwoJCQkJZWxzZQoJCQkJCSRub3JkZXIgPSAxOwoJCQl9CgoJCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX05PREUgLiIKCQkJCVNFVCBub3JkZXIgPSBub3JkZXIgKyAxCgkJCQlXSEVSRSBwYXJlbnQgPSA/IEFORCBub3JkZXIgPj0gPyBBTkQgdHJlZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoJHBhcmVudCwgJG5vcmRlciwgJHRyZWUpKTsKCgkJCSRxMyA9ICJTRUxFQ1Qgcmd0CgkJCQlGUk9NICIuIENNU19UQUJMRV9UUkVFX05PREUgLiIKCQkJCVdIRVJFIHBhcmVudCA9ID8gQU5EIG5vcmRlciA8PSA/IEFORCB0cmVlID0gPwoJCQkJT1JERVIgQlkgbm9yZGVyIERFU0MiOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5TZWxlY3RMaW1pdCgkcTMsIDEsIDAsIGFycmF5KCRwYXJlbnQsICRub3JkZXIsICR0cmVlKSk7CgkJCWlmKCRkYnJlc3VsdCAmJiAkcm93Mz0kZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJCQkkbGVmdCA9ICRyb3czWydyZ3QnXSArMTsKCgkJCSRyaWdodCA9ICRsZWZ0ICsxOwoKCQkJI1VwZGF0ZSBMZWZ0CgkJCSRxdSA9ICJVUERBVEUgIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJU0VUIGxmdCA9IGxmdCArIDIKCQkJCVdIRVJFIGxmdCA+PSA/IEFORCB0cmVlID0gPyI7CgkJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1LCBhcnJheSgkbGVmdCwgJHRyZWUpKTsKCgkJCSNVcGRhdGUgUmlnaHQKCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQlTRVQgcmd0ID0gcmd0ICsgMgoJCQkJV0hFUkUgcmd0ID49ID8gQU5EIHRyZWUgPSA/IjsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCRsZWZ0LCAkdHJlZSkpOwoKCQkJI0luc2VydAoJCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkJCWlmKCAkZm9yY2VpZCApCgkJCXsKCQkJCSRub2RlaWQgPSAoaW50KSRmb3JjZWlkOwoJCQkJaWYoZW1wdHkoJG5vZGVpZCkpCgkJCQl7CgkJCQkJJHRoaXMtPmVuZFRyYW5zYWN0aW9uKCR0cmVlKTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCQkkcSA9ICJTRUxFQ1QgTUFYKGlkKSBhcyBpZCBGUk9NICIuIENNU19UQUJMRV9UUkVFX05PREU7CgkJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxKTsKCQkJCWlmKCRkYnJlc3VsdCAmJiAkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgJGNhdGlkID0gJHJvd1snaWQnXTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRub2RlaWQgPSAkZGItPkdlbklEKENNU19UQUJMRV9UUkVFX05PREUuJ19zZXEnKTsKCQkJfQoJCQkkcWkgPSAiSU5TRVJUIElOVE8gIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJKGlkLCBwYXJlbnQsIGxmdCwgcmd0LCBsZXZlbCwgbm9yZGVyLCB0cmVlLCBza2lwKQoJCQkJVkFMVUVTICg/LD8sPyw/LD8sPyw/LDApIjsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcWksIGFycmF5KCRub2RlaWQsICRwYXJlbnQsICRsZWZ0LCAkcmlnaHQsICgkcm93MVsnbGV2ZWwnXSsxKSwgJG5vcmRlciwgJHRyZWUpKTsKCQkJaWYoICRkYnJlc3VsdCApCgkJCXsKCQkJCSR0aGlzLT5fYWRkX2NvbnRlbnQoJG5vZGVpZCwgJGlucHV0KTsKCQkJCWlmKCRmb3JjZWlkICYmICRub2RlaWQ+JGNhdGlkKQoJCQkJewoJCQkJCXdoaWxlKCRub2RlaWQgPiAkY2F0aWQpCgkJCQkJCSRjYXRpZCA9ICRkYi0+R2VuSUQoQ01TX1RBQkxFX1RSRUVfTk9ERS4nX3NlcScpOwoJCQkJfQoJCQl9CgkJCSR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgoJCQkkcGFybXM9YXJyYXkoKTsKCQkJJHBhcm1zWydpZCddID0gJG5vZGVpZDsKCQkJJHBhcm1zWydsZXZlbCddID0gKCRyb3cxWydsZXZlbCddKzEpOwoJCQkkcGFybXNbJ25vcmRlciddID0gJG5vcmRlcjsKCQkJJHBhcm1zWyd0cmVlJ10gPSAkdHJlZTsKCQkJJHRoaXMtPlNlbmRFdmVudCgnT25BZGRDaGlsZHJlbicsJHBhcm1zKTsKCQkJcmV0dXJuICRub2RlaWQ7CgkJfQoJCSR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgkJcmV0dXJuIGZhbHNlOwoJfQoJZnVuY3Rpb24gX21vdmVfbm9kZSggJGlkPS0xLCAkcGFyZW50PS0xLCAkbm9yZGVyPS0xLCAkdHJlZT0nJyApCgl7CgkJaWYoaXNfbnVsbCgkdGhpcy0+X2luVHJhbnNhY3Rpb24pIHx8ICR0aGlzLT5faW5UcmFuc2FjdGlvbikKCQkJaWYoISR0aGlzLT5fYmVnaW5UcmFuc2FjdGlvbigkdHJlZSkpIHJldHVybiBmYWxzZTsKCgkJJHRtcCA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJycsICdpZCA9ID8nLCBhcnJheSgkaWQpLCBmYWxzZSwgJHRyZWUpOwoJCWlmKCAkdG1wICkKCQl7CgkJCSRyb3cxID0gJHRtcFswXTsKCgkJCSR0bXAgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAnaWQgPSA/JywgYXJyYXkoJHBhcmVudCksIGZhbHNlLCAkdHJlZSk7CgkJCWlmKCEkdG1wKSByZXR1cm4gZmFsc2U7CgkJCSRyb3cyID0gJHRtcFswXTsKCgkJCWlmKCRyb3cxWydwYXJlbnQnXSA9PSAkcm93MlsncGFyZW50J10pCgkJCXsKCQkJCSR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgkJCQlyZXR1cm4gJHRoaXMtPl9tb3ZlX29yZGVyX25vZGUoJGlkLCAkcGFyZW50KTsKCQkJfQoKCQkJJGxlZnQgPSAkcm93MlsnbGZ0J10gKzE7CgkJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCgkJCSNTZXQgbm9kZSB0cmVlIGFzIHNraXAKCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQlTRVQgc2tpcCA9IDEKCQkJCVdIRVJFIGxmdCA+PSA/IEFORCByZ3QgPD0gPyBBTkQgdHJlZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoJHJvdzFbJ2xmdCddLCAkcm93MVsncmd0J10sICR0cmVlKSk7CgoJCQkjVXBkYXRlIE9yZGVyIChzZXQgbm9yZGVyID0gbm9yZGVyICsxIHdoZXJlIG5vcmRlcj4kbm9yZGVyKQoJCQlpZigkbm9yZGVyID09IC0xKQoJCQl7CgkJCQkkcTMgPSAiU0VMRUNUIG5vcmRlcgoJCQkJCUZST00gIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJCVdIRVJFIHBhcmVudCA9ID8gQU5EIHRyZWUgPSA/CgkJCQkJT1JERVIgQlkgbm9yZGVyIERFU0MiOwoJCQkJJGRicmVzdWx0ID0mICRkYi0+U2VsZWN0TGltaXQoJHEzLCAxLCAwLCBhcnJheSgkcGFyZW50LCAkdHJlZSkpOwoJCQkJaWYoJGRicmVzdWx0ICYmICRyb3czPSRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQkJCQkkbm9yZGVyID0gJHJvdzNbJ25vcmRlciddICsxOwoJCQkJZWxzZQoJCQkJCSRub3JkZXIgPSAxOwoJCQl9CgoJCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX05PREUgLiIKCQkJCVNFVCBub3JkZXIgPSBub3JkZXIgKyAxCgkJCQlXSEVSRSBwYXJlbnQgPSA/IEFORCBub3JkZXIgPj0gPyBBTkQgdHJlZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoJHBhcmVudCwgJG5vcmRlciwgJHRyZWUpKTsKCgkJCSRxNCA9ICJTRUxFQ1Qgcmd0CgkJCQlGUk9NICIuIENNU19UQUJMRV9UUkVFX05PREUgLiIKCQkJCVdIRVJFIHBhcmVudCA9ID8gQU5EIG5vcmRlciA8PSA/IEFORCB0cmVlID0gPwoJCQkJT1JERVIgQlkgbm9yZGVyIERFU0MiOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5TZWxlY3RMaW1pdCgkcTQsIDEsIDAsIGFycmF5KCRwYXJlbnQsICRub3JkZXIsICR0cmVlKSk7CgkJCWlmKCRkYnJlc3VsdCAmJiAkcm93ND0kZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJCQkkbGVmdCA9ICRyb3c0WydyZ3QnXSArMTsKCgkJCSRjaGlsZF9vZmZzZXQgPSAoJHJvdzFbJ3JndCddIC0gJHJvdzFbJ2xmdCddKSArMTsKCgkJCSNVcGRhdGUgTGVmdAoJCQlpZigkbGVmdCA8ICRyb3cxWydsZnQnXSkgI01vdmUgdG8gbGVmdAoJCQl7CgkJCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX05PREUgLiIKCQkJCQlTRVQgbGZ0ID0gbGZ0ICsgKHskY2hpbGRfb2Zmc2V0fSkKCQkJCQlXSEVSRSBsZnQgPj0gPyBBTkQgbGZ0IDw9ID8gQU5EIHNraXAgPSAwIEFORCB0cmVlID0gPyI7CgkJCX0KCQkJZWxzZSAjTW92ZSB0byByaWdodAoJCQl7CgkJCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX05PREUgLiIKCQkJCQlTRVQgbGZ0ID0gbGZ0IC0gKHskY2hpbGRfb2Zmc2V0fSkKCQkJCQlXSEVSRSBsZnQgPCA/IEFORCBsZnQgPj0gPyBBTkQgc2tpcCA9IDAgQU5EIHRyZWUgPSA/IjsKCQkJfQoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoJGxlZnQsICRyb3cxWydsZnQnXSwgJHRyZWUpKTsKCgkJCSNVcGRhdGUgUmlnaHQKCQkJaWYoJGxlZnQgPCAkcm93MVsnbGZ0J10pICNNb3ZlIHRvIGxlZnQKCQkJewoJCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQkJU0VUIHJndCA9IHJndCArICh7JGNoaWxkX29mZnNldH0pCgkJCQkJV0hFUkUgcmd0ID49ID8gQU5EIHJndCA8PSA/IEFORCBza2lwID0gMCBBTkQgdHJlZSA9ID8iOwoJCQl9CgkJCWVsc2UgI01vdmUgdG8gcmlnaHQKCQkJewoJCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQkJU0VUIHJndCA9IHJndCAtICh7JGNoaWxkX29mZnNldH0pCgkJCQkJV0hFUkUgcmd0IDwgPyBBTkQgcmd0ID49ID8gQU5EIHNraXAgPSAwIEFORCB0cmVlID0gPyI7CgkJCX0KCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCRsZWZ0LCAkcm93MVsncmd0J10sICR0cmVlKSk7CgoJCQkkbGV2ZWxfZGlmZmVyZW5jZSA9ICgkcm93MlsnbGV2ZWwnXSAtICRyb3cxWydsZXZlbCddKSArMTsKCQkJJG5ld19vZmZzZXQgPSAkcm93MVsnbGZ0J10gLSAkbGVmdDsKCQkJaWYoJGxlZnQgPiAkcm93MVsnbGZ0J10pICNpLmUuIG1vdmUgdG8gcmlnaHQKCQkJCSRuZXdfb2Zmc2V0ICs9ICRjaGlsZF9vZmZzZXQ7CgoJCQkjVXBkYXRlIG5ldyB0cmVlIGxlZnQKCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQlTRVQgbGZ0ID0gbGZ0IC0gKHskbmV3X29mZnNldH0pLCByZ3QgPSByZ3QgLSAoeyRuZXdfb2Zmc2V0fSksIGxldmVsID0gbGV2ZWwgKyAoeyRsZXZlbF9kaWZmZXJlbmNlfSkKCQkJCVdIRVJFIGxmdCA+PSA/IEFORCByZ3QgPD0gPyBBTkQgc2tpcCA9IDEgQU5EIHRyZWUgPSA/IjsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCRyb3cxWydsZnQnXSwgJHJvdzFbJ3JndCddLCAkdHJlZSkpOwoKCQkJI1JlbW92ZSBza2lwIHN0YXRpcyBmcm9tIG5vZGUgdHJlZQoJCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX05PREUgLiIKCQkJCVNFVCBza2lwID0gMAoJCQkJV0hFUkUgbGZ0ID49ID8gQU5EIHJndCA8PSA/IEFORCBza2lwID0gMSBBTkQgdHJlZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoKCRyb3cxWydsZnQnXS0kbmV3X29mZnNldCksICgkcm93MVsncmd0J10tJG5ld19vZmZzZXQpLCAkdHJlZSkpOwoKCQkJI1VwZGF0ZSBvcmRlcgoJCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX05PREUgLiIKCQkJCVNFVCBub3JkZXIgPSBub3JkZXIgLSAxCgkJCQlXSEVSRSBwYXJlbnQgPSA/IEFORCBub3JkZXIgPj0gPyBBTkQgdHJlZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoJHJvdzFbJ3BhcmVudCddLCAkcm93MVsnbm9yZGVyJ10sICR0cmVlKSk7CgoJCQkjVXBkYXRlIGluc2VydCByb290IGZpZWxkCgkJCSRxdSA9ICJVUERBVEUgIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJU0VUIHBhcmVudCA9ID8sIG5vcmRlciA9ID8KCQkJCVdIRVJFIGlkID0gPyBBTkQgdHJlZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoJHBhcmVudCwgJG5vcmRlciwgJGlkLCAkdHJlZSkpOwoKCQkJJHBhcm1zPWFycmF5KCk7CgkJCSRwYXJtc1snaWQnXSA9ICRpZDsKCQkJJHBhcm1zWydwYXJlbnQnXSA9ICRwYXJlbnQ7CgkJCSRwYXJtc1snbm9yZGVyJ10gPSAkbm9yZGVyOwoJCQkkcGFybXNbJ3RyZWUnXSA9ICR0cmVlOwoJCQkkdGhpcy0+U2VuZEV2ZW50KCdPbk1vdmVOb2RlJywkcGFybXMpOwoJCQlyZXR1cm4gJHRoaXMtPmVuZFRyYW5zYWN0aW9uKCR0cmVlKTsKCQl9CgkJJHRoaXMtPmVuZFRyYW5zYWN0aW9uKCR0cmVlKTsKCQlyZXR1cm4gZmFsc2U7Cgl9CglmdW5jdGlvbiBfbW92ZV9vcmRlcl9ub2RlKCAkaWQ9LTEsICRuZXdpZD0tMSwgJG5ld29yZGVyPS0xLCAkdHJlZT0nJyApCgl7CgkJaWYoaXNfbnVsbCgkdGhpcy0+X2luVHJhbnNhY3Rpb24pIHx8ICR0aGlzLT5faW5UcmFuc2FjdGlvbikKCQkJaWYoISR0aGlzLT5fYmVnaW5UcmFuc2FjdGlvbigkdHJlZSkpIHJldHVybiBmYWxzZTsKCgkJJHRtcCA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJycsICdpZCA9ID8nLCBhcnJheSgkaWQpLCBmYWxzZSwgJHRyZWUpOwoJCWlmKCAkdG1wICkKCQl7CgkJCSRub2RlID0gJHRtcFswXTsKCgkJCSR0bXA9ZmFsc2U7CgkJCWlmKChpbnQpJG5ld2lkID4gMCkKCQkJCSR0bXAgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAnaWQgPSA/JywgYXJyYXkoJG5ld2lkKSwgZmFsc2UsICR0cmVlKTsKCQkJZWxzZWlmKChpbnQpJG5ld29yZGVyID4gMCkKCQkJCSR0bXAgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAncGFyZW50ID0gPyBBTkQgbm9yZGVyID0gPycsIGFycmF5KCRub2RlWydwYXJlbnQnXSwoaW50KSRuZXdvcmRlciksIGZhbHNlLCAkdHJlZSk7CgkJCWlmKCEkdG1wKSByZXR1cm4gZmFsc2U7CgkJCSRuZXdub2RlID0gJHRtcFswXTsKCgkJCWlmKCRuZXdub2RlWydwYXJlbnQnXSAhPSAkbm9kZVsncGFyZW50J10gfHwgJG5ld25vZGVbJ25vcmRlciddID09ICRub2RlWydub3JkZXInXSkKCQkJCXJldHVybiBmYWxzZTsKCgkJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQlTRVQgc2tpcCA9IDEKCQkJCVdIRVJFIGxmdCA+PSA/IEFORCByZ3QgPD0gPyBBTkQgdHJlZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoJG5vZGVbJ2xmdCddLCAkbm9kZVsncmd0J10sICR0cmVlKSk7CgoJCQkkY2hpbGRfb2Zmc2V0ID0gJG5vZGVbJ3JndCddIC0gJG5vZGVbJ2xmdCddICsxOwoJCQlpZigkbmV3bm9kZVsnbm9yZGVyJ10gPiAkbm9kZVsnbm9yZGVyJ10pCgkJCXsKCQkJCSRxdSA9ICJVUERBVEUgIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJCVNFVCBub3JkZXIgPSBub3JkZXIgLSAxCgkJCQkJV0hFUkUgcGFyZW50ID0gPyBBTkQgbm9yZGVyID49ID8gQU5EIG5vcmRlciA8PSA/IEFORCBza2lwID0gMCBBTkQgdHJlZSA9ID8iOwoJCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCRub2RlWydwYXJlbnQnXSwgJG5vZGVbJ25vcmRlciddLCAkbmV3bm9kZVsnbm9yZGVyJ10sICR0cmVlKSk7CgoJCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQkJU0VUIGxmdCA9IGxmdCAtICh7JGNoaWxkX29mZnNldH0pLCByZ3QgPSByZ3QgLSAoeyRjaGlsZF9vZmZzZXR9KQoJCQkJCVdIRVJFIGxmdCA+PSA/IEFORCByZ3QgPD0gPyBBTkQgc2tpcCA9IDAgQU5EIHRyZWUgPSA/IjsKCQkJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1LCBhcnJheSgkbm9kZVsnbGZ0J10sICRuZXdub2RlWydyZ3QnXSwgJHRyZWUpKTsKCgkJCQkkbmV3X29mZnNldCA9ICRub2RlWydyZ3QnXSAtICRuZXdub2RlWydyZ3QnXTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRxdSA9ICJVUERBVEUgIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJCVNFVCBub3JkZXIgPSBub3JkZXIgKyAxCgkJCQkJV0hFUkUgcGFyZW50ID0gPyBBTkQgbm9yZGVyIDw9ID8gQU5EIG5vcmRlciA+PSA/IEFORCBza2lwID0gMCBBTkQgdHJlZSA9ID8iOwoJCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCRub2RlWydwYXJlbnQnXSwgJG5vZGVbJ25vcmRlciddLCAkbmV3bm9kZVsnbm9yZGVyJ10sICR0cmVlKSk7CgoJCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQkJU0VUIGxmdCA9IGxmdCArICh7JGNoaWxkX29mZnNldH0pLCByZ3QgPSByZ3QgKyAoeyRjaGlsZF9vZmZzZXR9KQoJCQkJCVdIRVJFIGxmdCA+PSA/IEFORCByZ3QgPD0gPyBBTkQgc2tpcCA9IDAgQU5EIHRyZWUgPSA/IjsKCQkJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1LCBhcnJheSgkbmV3bm9kZVsnbGZ0J10sICRub2RlWydyZ3QnXSwgJHRyZWUpKTsKCgkJCQkkbmV3X29mZnNldCA9ICRub2RlWydsZnQnXSAtICRuZXdub2RlWydsZnQnXTsKCQkJfQoKCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQlTRVQgbm9yZGVyID0geyRuZXdub2RlWydub3JkZXInXX0KCQkJCVdIRVJFIGlkID0gPyBBTkQgc2tpcCA9IDEgQU5EIHRyZWUgPSA/IjsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCRub2RlWydpZCddLCAkdHJlZSkpOwoKCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQlTRVQgbGZ0ID0gbGZ0IC0gKHskbmV3X29mZnNldH0pLCByZ3QgPSByZ3QgLSAoeyRuZXdfb2Zmc2V0fSksIHNraXAgPSAwCgkJCQlXSEVSRSBsZnQgPj0gPyBBTkQgcmd0IDw9ID8gQU5EIHNraXAgPSAxIEFORCB0cmVlID0gPyI7CgkJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1LCBhcnJheSgkbm9kZVsnbGZ0J10sICRub2RlWydyZ3QnXSwgJHRyZWUpKTsKCgkJCSRwYXJtcz1hcnJheSgpOwoJCQkkcGFybXNbJ2lkJ10gPSAkaWQ7CgkJCSRwYXJtc1snbm9yZGVyJ10gPSAkbmV3bm9kZVsnbm9yZGVyJ107CgkJCSRwYXJtc1sndHJlZSddID0gJHRyZWU7CgkJCSR0aGlzLT5TZW5kRXZlbnQoJ09uTW92ZU9yZGVyTm9kZScsJHBhcm1zKTsKCQkJcmV0dXJuICR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgkJfQoJCSR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgkJcmV0dXJuIGZhbHNlOwoJfQoJZnVuY3Rpb24gX2RlbGV0ZV9ub2RlKCAkaWQ9LTEsICR0cmVlPScnICkKCXsKCQlpZihpc19udWxsKCR0aGlzLT5faW5UcmFuc2FjdGlvbikgfHwgJHRoaXMtPl9pblRyYW5zYWN0aW9uKQoJCQlpZighJHRoaXMtPl9iZWdpblRyYW5zYWN0aW9uKCR0cmVlKSkgcmV0dXJuIGZhbHNlOwoKCQkkdG1wID0gJHRoaXMtPl9mdWxsX2N1c3RvbV9xdWVyeSgnJywgJ2lkID0gPycsIGFycmF5KCRpZCksIGZhbHNlLCAkdHJlZSk7CgkJaWYoICR0bXAgKQoJCXsKCQkJJHJvdzEgPSAkdG1wWzBdOwoKCQkJJGRlbGV0ZV9vZmZzZXQgPSAkcm93MVsncmd0J10gLSAkcm93MVsnbGZ0J107CgkJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCgkJCSNUZXN0IGlmIHRoZXJlIGlzIGNvbnRlbnQgYWxpYXNlcyBhbmQgZGVsZXRlIENvbnRlbnQgc3ViIG5vZGVzCgkJCSR0ZXN0X2lkPWFycmF5KCk7CgkJCSRxMiA9ICJTRUxFQ1QgaWQKCQkJCUZST00gIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJV0hFUkUgbGZ0ID49ID8gQU5EIGxmdCA8PSA/IEFORCB0cmVlID0gPyI7CgkJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHEyLCBhcnJheSgkcm93MVsnbGZ0J10sICRyb3cxWydyZ3QnXSwgJHRyZWUpKTsKCQkJd2hpbGUoJGRicmVzdWx0ICYmICRyb3cyPSRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCQkJCSR0ZXN0X2lkW10gPSAkcm93MlsnaWQnXTsKCgkJCWlmKGNvdW50KCR0ZXN0X2lkKSA9PSAwKQoJCQl7CgkJCQkkdGhpcy0+ZW5kVHJhbnNhY3Rpb24oJHRyZWUpOwoJCQkJcmV0dXJuIDA7CgkJCX0KCgkJCSRzcWxfaW4gPSBpbXBsb2RlKCcsJywgJHRlc3RfaWQpOwoJCQkkcTMgPSAiU0VMRUNUIG5vZGVfaWQKCQkJCUZST00gIi4gQ01TX1RBQkxFX1RSRUVfQ09OVEVOVCAuIgoJCQkJV0hFUkUgbm9kZV9pZCBOT1QgSU4gKHskc3FsX2lufSkgQU5EIGNvbnRlbnRfYWxpYXMgSU4gKHskc3FsX2lufSkiOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxMyk7CgkJCWlmKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCk+MCkKCQkJewoJCQkJJHRoaXMtPmVuZFRyYW5zYWN0aW9uKCR0cmVlKTsKCQkJCXJldHVybiAwOwoJCQl9CgoJCQlmb3JlYWNoKCR0ZXN0X2lkIGFzICRub2RlX2lkKQoJCQkJJHRoaXMtPl9kZWxldGVfY29udGVudCgkbm9kZV9pZCk7CgoJCQkjRGVsZXRlIHN1YiBub2RlcwoJCQkkcWQgPSAiREVMRVRFIEZST00gIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJV0hFUkUgbGZ0ID49ID8gQU5EIGxmdCA8PSA/IEFORCB0cmVlID0gPyI7CgkJCSRkYnJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHFkLCBhcnJheSgkcm93MVsnbGZ0J10sICRyb3cxWydyZ3QnXSwgJHRyZWUpKTsKCgkJCSNVcGRhdGUgb3JkZXIKCQkJJHF1ID0gIlVQREFURSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iCgkJCQlTRVQgbm9yZGVyID0gbm9yZGVyIC0gMQoJCQkJV0hFUkUgcGFyZW50ID0gPyBBTkQgbGZ0ID49ID8gQU5EIHRyZWUgPSA/IjsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCRyb3cxWydwYXJlbnQnXSwgJHJvdzFbJ2xmdCddLCAkdHJlZSkpOwoKCQkJI1VwZGF0ZSBMZWZ0CgkJCSRxdSA9ICJVUERBVEUgIi4gQ01TX1RBQkxFX1RSRUVfTk9ERSAuIgoJCQkJU0VUIGxmdCA9IGxmdCAtICh7JGRlbGV0ZV9vZmZzZXR9ICsxKQoJCQkJV0hFUkUgbGZ0ID4gPyBBTkQgdHJlZSA9ID8iOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdSwgYXJyYXkoJHJvdzFbJ3JndCddLCAkdHJlZSkpOwoKCQkJI1VwZGF0ZSBSaWdodAoJCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX05PREUgLiIKCQkJCVNFVCByZ3QgPSByZ3QgLSAoeyRkZWxldGVfb2Zmc2V0fSArMSkKCQkJCVdIRVJFIHJndCA+ID8gQU5EIHRyZWUgPSA/IjsKCQkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCRyb3cxWydyZ3QnXSwgJHRyZWUpKTsKCgkJCSRwYXJtcz1hcnJheSgpOwoJCQkkcGFybXNbJ2lkJ10gPSAkaWQ7CgkJCSRwYXJtc1sndHJlZSddID0gJHRyZWU7CgkJCSR0aGlzLT5TZW5kRXZlbnQoJ09uRGVsZXRlTm9kZScsJHBhcm1zKTsKCQkJcmV0dXJuICR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgkJfQoJCSR0aGlzLT5lbmRUcmFuc2FjdGlvbigkdHJlZSk7CgkJcmV0dXJuIGZhbHNlOwoJfQovLyBFbmQgZWRpdGluZyBmdW5jdGlvbnMgLy8KCgovLyBCZWdpbiBuZXN0ZWQgZnVuY3Rpb25zIC8vCglmdW5jdGlvbiBfc2VsZWN0X3BhdGgoICRub2RlLCAkaWR4PScnLCAkbm9yb290PWZhbHNlLCAkbm9jdXJyZW50PWZhbHNlLCAkb3JkZXJieT0nbGZ0JywgJHRyZWU9JycgKQoJewoJCWlmKCFpc19hcnJheSgkbm9kZSkgfHwgIWlzc2V0KCRub2RlWydsZnQnXSkgfHwgIWlzc2V0KCRub2RlWydyZ3QnXSkpIHJldHVybiBmYWxzZTsKCgkJaWYoICRub2N1cnJlbnQgKSAkd2hlcmUgPSAnbGZ0IDwgPyBBTkQgcmd0ID4gPyc7CgkJZWxzZSAkd2hlcmUgPSAnbGZ0IDw9ID8gQU5EIHJndCA+PSA/JzsKCgkJaWYoICRub3Jvb3QgKSAkd2hlcmUgLj0gJyBBTkQgcGFyZW50ID4gMCc7CgoJCXJldHVybiAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAkd2hlcmUsIGFycmF5KCRub2RlWydsZnQnXSwkbm9kZVsncmd0J10pLCB0cnVlLCAkdHJlZSwgJG9yZGVyYnksICRpZHgpOwoJfQoJZnVuY3Rpb24gX3NlbGVjdF9zdWJfbm9kZXMoICRub2RlLCAkZGVwdGg9LTEsICRvcmRlcmJ5PSdsZXZlbCxub3JkZXInLCAkbm9jdXJyZW50PWZhbHNlLCAkaWR4PScnLCAkdHJlZT0nJywgJGZpZWxkYWxsb3c9JycsICR2YWx1ZWFsbG93PWZhbHNlLCAkZmllbGRkZW55PScnLCAkdmFsdWVkZW55PWZhbHNlICkKCXsKCQlpZighaXNfYXJyYXkoJG5vZGUpIHx8ICFpc3NldCgkbm9kZVsnbGZ0J10pIHx8ICFpc3NldCgkbm9kZVsncmd0J10pIHx8ICFpc3NldCgkbm9kZVsnbGV2ZWwnXSkpIHJldHVybiBmYWxzZTsKCgkJaWYoICRub2N1cnJlbnQgKSAkd2hlcmUgPSAnbGZ0ID4gPyBBTkQgcmd0IDwgPyc7CgkJZWxzZSAkd2hlcmUgPSAnbGZ0ID49ID8gQU5EIHJndCA8PSA/JzsKCQkkaW5wdXRhcnIgPSBhcnJheSgkbm9kZVsnbGZ0J10sJG5vZGVbJ3JndCddKTsKCgkJaWYoJGRlcHRoID4gLTEpCgkJewoJCQkkd2hlcmUgLj0gJyBBTkQgbGV2ZWwgPD0gPyc7CgkJCSRpbnB1dGFycltdID0gKCRkZXB0aCArICRub2RlWydsZXZlbCddKTsKCQl9CgkJaWYoIWVtcHR5KCRmaWVsZGFsbG93KSAmJiAkdmFsdWVhbGxvdyE9PWZhbHNlKQoJCXsKCQkJJHdoZXJlIC49ICIgQU5EIHskZmllbGRhbGxvd30gTElLRSAoPykiOwoJCQkkaW5wdXRhcnJbXSA9ICR2YWx1ZWFsbG93OwoJCX0KCQlpZighZW1wdHkoJGZpZWxkZGVueSkgJiYgJHZhbHVlZGVueSE9PWZhbHNlKQoJCXsKCQkJJHdoZXJlIC49ICIgQU5EIHskZmllbGRkZW55fSBOT1QgTElLRSAoPykiOwoJCQkkaW5wdXRhcnJbXSA9ICR2YWx1ZWRlbnk7CgkJfQoKCQlyZXR1cm4gJHRoaXMtPl9mdWxsX2N1c3RvbV9xdWVyeSgnJywgJHdoZXJlLCAkaW5wdXRhcnIsIHRydWUsICR0cmVlLCAkb3JkZXJieSwgJGlkeCk7Cgl9CglmdW5jdGlvbiBfZnVsbF9jdXN0b21fcXVlcnkoICRzZWxlY3Q9JycsICR3aGVyZT0nJywgJGlucHV0YXJyPWFycmF5KCksICRnZXRjb250ZW50PXRydWUsICR0cmVlPScnLCAkb3JkZXJieT0nJywgJGlkeD0nJywgJHNraXBpZD0wLCAkbGltaXQ9LTEsICRvZmZzZXQ9LTEgKQoJewoJCWlmKCFkZWZpbmVkKCdDTVNfVEFCTEVfVFJFRV9OT0RFJykgfHwgIWRlZmluZWQoJ0NNU19UQUJMRV9UUkVFX0NPTlRFTlQnKSkgcmV0dXJuIGZhbHNlOwoKCQkkZmllbGRzID0gKCFlbXB0eSgkc2VsZWN0KSkgPyAkc2VsZWN0IDogJ2lkLCBwYXJlbnQsIGxmdCwgcmd0LCBsZXZlbCwgbm9yZGVyLCAoKHJndCAtIGxmdCAtMSkvMikgYXMgY2hpbGRyZW4nOwoJCSRxd2hlcmUgPSAoIWVtcHR5KCR3aGVyZSkpID8gJHdoZXJlIC4nIEFORCcgOiAnJzsKCQkkaW5wdXRhcnJbXSA9ICR0cmVlOwoKCQkkam9pbl90YWJsZT0nJzsKCQlpZiggJGdldGNvbnRlbnQgKQoJCXsKCQkJJGZpZWxkcyAuPSAnLCBjb250ZW50X2FsaWFzLCBsYW5nLCAnLiBpbXBsb2RlKCcsICcsICR0aGlzLT5fY3VzdG9tRmllbGQpOwoJCQkkam9pbl90YWJsZSA9ICJMRUZUIEpPSU4gIi4gQ01TX1RBQkxFX1RSRUVfQ09OVEVOVCAuIiBBUyBjIE9OIChuLmlkPWMubm9kZV9pZCBBTkQgYy5sYW5nPSciLiR0aGlzLT5sYW5nLiInKSI7CgkJCSRhbGlhc19maWVsZHMgPSBpbXBsb2RlKCcsICcsICR0aGlzLT5fY3VzdG9tRmllbGQpOwoJCX0KCgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCSRxID0gIlNFTEVDVCB7JGZpZWxkc30KCQkJRlJPTSAiLiBDTVNfVEFCTEVfVFJFRV9OT0RFIC4iIEFTIG4geyRqb2luX3RhYmxlfQoJCQlXSEVSRSB7JHF3aGVyZX0gdHJlZSA9ID8iOwoJCWlmKCFlbXB0eSgkb3JkZXJieSkpICRxIC49ICcgT1JERVIgQlkgJy4kb3JkZXJieTsKCQkkZGJyZXN1bHQgPSYgJGRiLT5TZWxlY3RMaW1pdCgkcSwgJGxpbWl0LCAkb2Zmc2V0LCAkaW5wdXRhcnIpOwoJCWlmKCEkZGJyZXN1bHQpIHJldHVybiBmYWxzZTsKCgkJJG91dD1hcnJheSgpOyAkaT0wOwoJCXdoaWxlKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJewoJCQlpZighZW1wdHkoJHNraXBpZCkgJiYgIWVtcHR5KCRyb3dbJ2lkJ10pICYmICRza2lwaWQ9PSRyb3dbJ2lkJ10pIGNvbnRpbnVlOwoJCQlpZihpc3NldCgkcm93WydjaGlsZHJlbiddKSkgJHJvd1snY2hpbGRyZW4nXSA9IChpbnQpJHJvd1snY2hpbGRyZW4nXTsKCgkJCWlmKCRnZXRjb250ZW50ICYmICFlbXB0eSgkcm93Wydjb250ZW50X2FsaWFzJ10pKQoJCQl7CgkJCQkkcSA9ICJTRUxFQ1QgeyRhbGlhc19maWVsZHN9CgkJCQkJRlJPTSAiLiBDTVNfVEFCTEVfVFJFRV9DT05URU5UIC4iCgkJCQkJV0hFUkUgbm9kZV9pZCA9ID8gQU5EIGxhbmcgPSA/IjsKCQkJCSRkYmFsaWFzID0mICRkYi0+RXhlY3V0ZSgkcSwgYXJyYXkoJHJvd1snY29udGVudF9hbGlhcyddLCAkcm93WydsYW5nJ10pKTsKCQkJCWlmKCRkYmFsaWFzICYmICRyb3dfYWxpYXM9JGRiYWxpYXMtPkZldGNoUm93KCkpCgkJCQkJJHJvdyA9IGFycmF5X21lcmdlKCRyb3csICRyb3dfYWxpYXMpOwoJCQl9CgoJCQlpZighZW1wdHkoJGlkeCkgJiYgIWVtcHR5KCRyb3dbIiRpZHgiXSkpICRrZXkgPSAkcm93WyIkaWR4Il07CgkJCWVsc2UgJGtleSA9ICRpKys7CgkJCSRvdXRbJGtleV0gPSAkcm93OwoJCX0KCQlyZXR1cm4gJG91dDsKCX0KLy8gRW5kIG5lc3RlZCBmdW5jdGlvbnMgLy8KCgoKLy8gTUVUSE9EUyAvLwoJZnVuY3Rpb24gc2V0Q21zRHJvcGRvd24oICRhcnIsICRmaWVsZD0naWQnLCAkZm9ybWF0PXRydWUgKQoJewoJCWlmKGlzX2FycmF5KCRhcnIpKQoJCXsKCQkJJG91dD1hcnJheSgpOwoJCQlmb3JlYWNoKCRhcnIgYXMgJGtleT0+JGl0ZW0pCgkJCXsKCQkJCWlmKCRmb3JtYXQpICRpZHggPSBzdHJfcmVwZWF0KCctJywgJGl0ZW1bJ2xldmVsJ10pLicgJy4kaXRlbVskZmllbGRdOwoJCQkJZWxzZSAkaWR4ID0gJGZpZWxkOwoJCQkJJG91dFskaWR4XSA9ICRpdGVtWydpZCddOwoJCQl9CgkJCXJldHVybiAkb3V0OwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoJZnVuY3Rpb24gZHJvcE1vZHVsZVRhYmxlKCkKCXsKCQkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKCQkkZCA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoQ01TX1RBQkxFX1RSRUVfTk9ERSk7CgkJJHJldHVybiA9ICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJGQpOwoJCWlmKCRyZXR1cm4gPD4gMikgcmV0dXJuIGZhbHNlOwoKCQkkZGItPkRyb3BTZXF1ZW5jZShDTVNfVEFCTEVfVFJFRV9OT0RFLidfc2VxJyk7CgoJCSRkID0gJGRpY3QtPkRyb3BUYWJsZVNRTChDTVNfVEFCTEVfVFJFRV9DT05URU5UKTsKCQkkcmV0dXJuID0gJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkZCk7CgkJaWYoJHJldHVybiA8PiAyKSByZXR1cm4gZmFsc2U7CgoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGluVHJhbnNhY3Rpb24oKQoJewoJCXJldHVybiAkdGhpcy0+X2luVHJhbnNhY3Rpb247Cgl9CgoJZnVuY3Rpb24gc2V0UGVyaW9kVHJhbnNhY3Rpb24oICRwZXJpb2RUcmFuc2FjdGlvbj0xMjAgKQoJewoJCWlmKCRwZXJpb2RUcmFuc2FjdGlvbiA+IDApICR0aGlzLT5fcGVyaW9kVHJhbnNhY3Rpb24gPSAoaW50KSRwZXJpb2RUcmFuc2FjdGlvbjsKCX0KCglmdW5jdGlvbiBlbmRUcmFuc2FjdGlvbiggJHRyZWU9JycgKQoJewoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkkcXUgPSAiVVBEQVRFICIuIENNU19UQUJMRV9UUkVFX1RSQU5TQUNUSU9OIC4iCgkJCVNFVCBpbnRyYW5zYWN0aW9uID0gMAoJCQlXSEVSRSBtb2R1bGUgPSA/IEFORCB0cmVlID0gPyI7CgkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXUsIGFycmF5KCR0aGlzLT5tb2R1bGUsICR0cmVlKSk7CgkJaWYoICRkYnJlc3VsdCApCgkJewoJCQkkdGhpcy0+X2luVHJhbnNhY3Rpb24gPSBmYWxzZTsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCgovLyBBUEkgRURJVElORyAvLwoJZnVuY3Rpb24gYWRkUm9vdCggJGlucHV0PWFycmF5KCksICRmb3JjZWlkPWZhbHNlLCAkdHJlZT0nJyApCgl7CgkJcmV0dXJuICR0aGlzLT5fYWRkX3Jvb3Rfbm9kZSgkaW5wdXQsICRmb3JjZWlkLCAkdHJlZSk7Cgl9CgoJZnVuY3Rpb24gYWRkQ2hpbGRyZW4oICRpZCwgJGlucHV0PWFycmF5KCksICRub3JkZXI9LTEsICRmb3JjZWlkPWZhbHNlLCAkdHJlZT0nJyApCgl7CgkJcmV0dXJuICR0aGlzLT5fYWRkX25vZGUoJGlkLCAkaW5wdXQsICRub3JkZXIsICRmb3JjZWlkLCAkdHJlZSk7Cgl9CgoJZnVuY3Rpb24gbW92ZU5vZGUoICRpZCwgJG5ld3BhcmVudD0tMSwgJG5vcmRlcj0tMSwgJHRyZWU9JycgKQoJewoJCXJldHVybiAkdGhpcy0+X21vdmVfbm9kZSgkaWQsICRuZXdwYXJlbnQsICRub3JkZXIsICR0cmVlKTsKCX0KCglmdW5jdGlvbiBtb3ZlT3JkZXJOb2RlKCAkaWQsICRuZXdub2RlPS0xLCAkbmV3b3JkZXI9LTEsICR0cmVlPScnICkKCXsKCQlyZXR1cm4gJHRoaXMtPl9tb3ZlX29yZGVyX25vZGUoJGlkLCAkbmV3bm9kZSwgJG5ld29yZGVyLCAkdHJlZSk7Cgl9CgoJZnVuY3Rpb24gZGVsZXRlTm9kZSggJGlkLCAkdHJlZT0nJyApCgl7CgkJcmV0dXJuICR0aGlzLT5fZGVsZXRlX25vZGUoJGlkLCAkdHJlZSk7Cgl9CgoJZnVuY3Rpb24gYWRkQ3VzdG9tRmllbGQoICRzY2hlbWE9YXJyYXkoKSApCgl7CgkJcmV0dXJuICR0aGlzLT5fYWRkX2N1c3RvbV9maWVsZCgkc2NoZW1hKTsKCX0KCglmdW5jdGlvbiB1cGRhdGVDdXN0b20oICRpZCwgJGlucHV0PWFycmF5KCksICR0cmVlPScnICkKCXsKCQlyZXR1cm4gJHRoaXMtPl91cGRhdGVfY3VzdG9tKCRpZCwgJGlucHV0LCAkdHJlZSk7Cgl9CgoJZnVuY3Rpb24gdXBkYXRlQ29udGVudEFsaWFzKCAkaWQsICRuZXdub2RlLCAkdHJlZT0nJyApCgl7CgkJcmV0dXJuICR0aGlzLT5fdXBkYXRlX2NvbnRlbnRfYWxpYXMoJGlkLCAkbmV3bm9kZSwgJHRyZWUpOwoJfQoKCWZ1bmN0aW9uIGRlbGV0ZUNvbnRlbnRBbGlhcyggJGlkLCAkdHJlZT0nJyApCgl7CgkJcmV0dXJuICR0aGlzLT5fZGVsZXRlX2NvbnRlbnRfYWxpYXMoJGlkLCAkdHJlZSk7Cgl9CgoKLy8gQVBJIEZFVENISU5HIC8vCglmdW5jdGlvbiBnZXRDdXN0b21GaWVsZHMoKQoJewoJCXJldHVybiAkdGhpcy0+X2N1c3RvbUZpZWxkOwoJfQoKCWZ1bmN0aW9uIGdldEFsbE5vZGVGaWVsZHMoKQoJewoJCXJldHVybiAkdGhpcy0+X2FsbE5vZGVGaWVsZDsKCX0KCiAJZnVuY3Rpb24gZ2V0Um9vdCggJHRyZWU9JycgKQoJewoJCSR0bXAgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAncGFyZW50ID0gMCcsIGFycmF5KCksIHRydWUsICR0cmVlKTsKCQlyZXR1cm4gJHRoaXMtPnNldE91dHB1dCgkdG1wKTsKCX0KCglmdW5jdGlvbiBnZXROb2RlKCAkaWQsICR0cmVlPScnICkKCXsKCQkkdG1wID0gJHRoaXMtPl9mdWxsX2N1c3RvbV9xdWVyeSgnJywgJ2lkID0gPycsIGFycmF5KCRpZCksIHRydWUsICR0cmVlKTsKCQlyZXR1cm4gJHRoaXMtPnNldE91dHB1dCgkdG1wKTsKCX0KCglmdW5jdGlvbiBnZXRCeU5vZGVGaWVsZCggJGZpZWxkPSdpZCcsICR2YWx1ZSwgJG9yZGVyYnk9J2xmdCcsICR0cmVlPScnICkKCXsKCQlpZighJHRoaXMtPl9jaGVja0ZpZWxkKCRmaWVsZCwgJHRoaXMtPl9hbGxOb2RlRmllbGQpKSByZXR1cm4gZmFsc2U7CgkJJHRtcCA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJycsICRmaWVsZC4nID0gPycsIGFycmF5KCR2YWx1ZSksIHRydWUsICR0cmVlLCAkb3JkZXJieSk7CgkJcmV0dXJuICR0aGlzLT5zZXRPdXRwdXQoJHRtcCk7Cgl9CgoJZnVuY3Rpb24gZ2V0QnlDdXN0b21GaWVsZCggJGZpZWxkPSdpZCcsICR2YWx1ZSwgJG9yZGVyYnk9J2xmdCcsICR0cmVlPScnICkKCXsKCQlpZighJHRoaXMtPl9jaGVja0ZpZWxkKCRmaWVsZCkpIHJldHVybiBmYWxzZTsKCQkkdG1wID0gJHRoaXMtPl9mdWxsX2N1c3RvbV9xdWVyeSgnJywgJGZpZWxkLicgPSA/JywgYXJyYXkoJHZhbHVlKSwgdHJ1ZSwgJHRyZWUsICRvcmRlcmJ5KTsKCQlyZXR1cm4gJHRoaXMtPnNldE91dHB1dCgkdG1wKTsKCX0KCglmdW5jdGlvbiBnZXRQYXJlbnQoICRmaWVsZD0naWQnLCAkdmFsdWUsICR0cmVlPScnICkKCXsKCQlpZighJHRoaXMtPl9jaGVja0ZpZWxkKCRmaWVsZCkpIHJldHVybiBmYWxzZTsKCQkkdG1wID0gJHRoaXMtPl9mdWxsX2N1c3RvbV9xdWVyeSgnJywgJGZpZWxkLicgPSA/JywgYXJyYXkoJHZhbHVlKSwgdHJ1ZSwgJHRyZWUpOwoJCWlmKCAkdG1wICkKCQl7CgkJCSRvdXQ9YXJyYXkoKTsgJGludm9sZGVkPWFycmF5KCk7CgkJCWZvcmVhY2goJHRtcCBhcyAkaXRlbSkKCQkJewoJCQkJJGludm9sZGVkW10gPSAkaXRlbTsKCQkJCSR0ZXN0ID0gJHRoaXMtPl9mdWxsX2N1c3RvbV9xdWVyeSgnJywgJ2lkID0gPycsIGFycmF5KCRpdGVtWydwYXJlbnQnXSksIHRydWUsICR0cmVlKTsKCQkJCWlmKCR0ZXN0ICYmIGNvdW50KCR0ZXN0KT09MSkgJG91dFtdID0gJHRlc3RbMF07CgkJCX0KCQkJJHRtcCA9ICRvdXQ7CgkJfQoJCXJldHVybiAkdGhpcy0+c2V0T3V0cHV0KCR0bXAsICRpbnZvbGRlZCk7Cgl9CgoJZnVuY3Rpb24gZ2V0U2libGluZyggJGZpZWxkPSdpZCcsICR2YWx1ZSwgJG9yZGVyYnk9J25vcmRlcicsICRub2N1cnJlbnQ9ZmFsc2UsICRpZHg9J2lkJywgJHRyZWU9JycgKQoJewoJCWlmKCEkdGhpcy0+X2NoZWNrRmllbGQoJGZpZWxkKSkgcmV0dXJuIGZhbHNlOwoJCSR0bXAgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAkZmllbGQuJyA9ID8nLCBhcnJheSgkdmFsdWUpLCB0cnVlLCAkdHJlZSk7CgkJaWYoICR0bXAgKQoJCXsKCQkJJG91dD1hcnJheSgpOyAkaW52b2xkZWQ9YXJyYXkoKTsKCQkJZm9yZWFjaCgkdG1wIGFzICRpdGVtKQoJCQl7CgkJCQkkaW52b2xkZWRbXSA9ICRpdGVtOwoJCQkJJHRlc3QgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAncGFyZW50ID0gPycsIGFycmF5KCRpdGVtWydwYXJlbnQnXSksIHRydWUsICR0cmVlLCAkb3JkZXJieSwgJGlkeCwgKCRub2N1cnJlbnQ/JGl0ZW1bJ2lkJ106MCkpOwoJCQkJaWYoICR0ZXN0ICkgJG91dFtdID0gJHRlc3Q7CgkJCX0KCQkJJHRtcCA9ICRvdXQ7CgkJfQoJCXJldHVybiAkdGhpcy0+c2V0T3V0cHV0KCR0bXAsICRpbnZvbGRlZCk7Cgl9CgoJZnVuY3Rpb24gZ2V0U2libGluZ0NvdW50KCAkaWQsICR0cmVlPScnICkKCXsKCQkkdG1wID0gJHRoaXMtPl9mdWxsX2N1c3RvbV9xdWVyeSgncGFyZW50JywgJ2lkID0gPycsIGFycmF5KCRpZCksIGZhbHNlLCAkdHJlZSk7CgkJaWYoICR0bXAgKQoJCQkkdGVzdCA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJ0NPVU5UKGlkKSBhcyBjb3VudCcsICdwYXJlbnQ9PycsIGFycmF5KCR0bXBbMF1bJ3BhcmVudCddKSwgZmFsc2UsICR0cmVlKTsKCgkJcmV0dXJuICgoJHRlc3QgJiYgY291bnQoJHRlc3QpPT0xKSA/IChpbnQpJHRlc3RbMF1bJ2NvdW50J10gOiBmYWxzZSk7Cgl9CgoJZnVuY3Rpb24gaGFzX2NoaWxkcmVuKCAkaWQsICR0cmVlPScnICkKCXsKCQkkdG1wID0gJHRoaXMtPl9mdWxsX2N1c3RvbV9xdWVyeSgnJywgJ2lkID0gPycsIGFycmF5KCRpZCksIGZhbHNlLCAkdHJlZSk7CgkJcmV0dXJuICgoJHRtcCAmJiBjb3VudCgkdG1wKT09MSkgPyAoJHRtcFswXVsnY2hpbGRyZW4nXT4wKSA6IGZhbHNlKTsKCX0KCglmdW5jdGlvbiBnZXRDaGlsZHJlbiggJGZpZWxkPSdpZCcsICR2YWx1ZSwgJGRlcHRoPTEsICRvcmRlcmJ5PSdsZXZlbCxub3JkZXInLCAkbm9jdXJyZW50PWZhbHNlLCAkaWR4PScnLCAkZmllbGRhbGxvdz0nJywgJHZhbHVlYWxsb3c9ZmFsc2UsICRmaWVsZGRlbnk9JycsICR2YWx1ZWRlbnk9ZmFsc2UsICR0cmVlPScnICkKCXsKCQlpZighJHRoaXMtPl9jaGVja0ZpZWxkKCRmaWVsZCkpIHJldHVybiBmYWxzZTsKCQkkdG1wID0gJHRoaXMtPl9mdWxsX2N1c3RvbV9xdWVyeSgnJywgJGZpZWxkLicgPSA/JywgYXJyYXkoJHZhbHVlKSwgdHJ1ZSwgJHRyZWUpOwoJCWlmKCAkdG1wICkKCQl7CgkJCSRvdXQ9YXJyYXkoKTsgJGludm9sZGVkPWFycmF5KCk7CgkJCWZvcmVhY2goJHRtcCBhcyAkaXRlbSkKCQkJewoJCQkJJGludm9sZGVkW10gPSAkaXRlbTsKCQkJCSR0ZXN0ID0gJHRoaXMtPl9zZWxlY3Rfc3ViX25vZGVzKCRpdGVtLCAkZGVwdGgsICRvcmRlcmJ5LCAkbm9jdXJyZW50LCAkaWR4LCAkdHJlZSwgJGZpZWxkYWxsb3csICR2YWx1ZWFsbG93LCAkZmllbGRkZW55LCAkdmFsdWVkZW55KTsKCQkJCWlmKCR0ZXN0KSAkb3V0W10gPSAkdGVzdDsKCQkJfQoJCQkkdG1wID0gJG91dDsKCQl9CgkJcmV0dXJuICR0aGlzLT5zZXRPdXRwdXQoJHRtcCwgJGludm9sZGVkKTsKCX0KCglmdW5jdGlvbiBnZXRDaGlsZHJlbkNvdW50KCAkZmllbGQ9J2lkJywgJHZhbHVlLCAkdHJlZT0nJyApCgl7CgkJaWYoISR0aGlzLT5fY2hlY2tGaWVsZCgkZmllbGQpKSByZXR1cm4gZmFsc2U7CgkJJHRtcCA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJycsICRmaWVsZC4nID0gPycsIGFycmF5KCR2YWx1ZSksIHRydWUsICR0cmVlKTsKCQlyZXR1cm4gKCgkdG1wICYmIGNvdW50KCR0bXApPT0xKSA/ICR0bXBbMF1bJ2NoaWxkcmVuJ10gOiBmYWxzZSk7Cgl9CgoJZnVuY3Rpb24gZ2V0Q291bnROb2RlcyggJHRyZWU9JycgKQoJewoJCSR0bXAgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAncGFyZW50ID0gMCcsIGFycmF5KCksIGZhbHNlLCAkdHJlZSk7CgkJcmV0dXJuICgoJHRtcCAmJiBjb3VudCgkdG1wKT09MSkgPyAkdG1wWzBdWydjaGlsZHJlbiddIDogZmFsc2UpOwoJfQoKCWZ1bmN0aW9uIGdldEJ5TGV2ZWwoICRsZXZlbD0wLCAkb3JkZXJieT0nbGZ0JywgJHRyZWU9JycgKQoJewoJCSR0bXAgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAnbGV2ZWwgPSA/JywgYXJyYXkoJGxldmVsKSwgdHJ1ZSwgJHRyZWUsICRvcmRlcmJ5KTsKCQlyZXR1cm4gJHRoaXMtPnNldE91dHB1dCgkdG1wKTsKCX0KCglmdW5jdGlvbiBnZXRMZWFmKCAkb3JkZXJieT0nbGZ0JywgJHRyZWU9JycgKQoJewoJCSR0bXAgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAncmd0ID0gbGZ0ICsxJywgYXJyYXkoKSwgdHJ1ZSwgJHRyZWUsICRvcmRlcmJ5KTsKCQlyZXR1cm4gJHRoaXMtPnNldE91dHB1dCgkdG1wKTsKCX0KCglmdW5jdGlvbiBnZXRNYXhEZXB0aCggJHRyZWU9JycgKQoJewoJCSR0bXAgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCdNQVgobGV2ZWwpIGFzIG1heCcsICcnLCBhcnJheSgpLCBmYWxzZSwgJHRyZWUpOwoJCXJldHVybiAoKCR0bXAgJiYgY291bnQoJHRtcCk9PTEpID8gKGludCkkdG1wWzBdWydtYXgnXSA6IGZhbHNlKTsKCX0KCglmdW5jdGlvbiBjdXN0b21RdWVyeSggJHNlbGVjdD0nJywgJHdoZXJlPScnLCAkaW5wdXRhcnI9YXJyYXkoKSwgJGdldGNvbnRlbnQ9dHJ1ZSwgJG9yZGVyYnk9JycsICRpZHg9JycsICRza2lwaWQ9MCwgJGxpbWl0PS0xLCAkb2Zmc2V0PS0xLCAkdHJlZT0nJyApCgl7CgkJcmV0dXJuICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJHNlbGVjdCwgJHdoZXJlLCAkaW5wdXRhcnIsICRnZXRjb250ZW50LCAkdHJlZSwgJG9yZGVyYnksICRpZHgsICRza2lwaWQsICRsaW1pdCwgJG9mZnNldCk7Cgl9CgoJZnVuY3Rpb24gZ2V0U3ViTm9kZXMoICRub2RlLCAkZGVwdGg9MSwgJG9yZGVyYnk9J2xldmVsLG5vcmRlcicsICRub2N1cnJlbnQ9ZmFsc2UsICRpZHg9JycsICRmaWVsZGFsbG93PScnLCAkdmFsdWVhbGxvdz1mYWxzZSwgJGZpZWxkZGVueT0nJywgJHZhbHVlZGVueT1mYWxzZSwgJHRyZWU9JycgKQoJewoJCXJldHVybiAkdGhpcy0+X3NlbGVjdF9zdWJfbm9kZXMoJG5vZGUsICRkZXB0aCwgJG9yZGVyYnksICRub2N1cnJlbnQsICRpZHgsICR0cmVlLCAkZmllbGRhbGxvdywgJHZhbHVlYWxsb3csICRmaWVsZGRlbnksICR2YWx1ZWRlbnkpOwoJfQoKCWZ1bmN0aW9uIGdldEJyZWFkY3J1bWJzKCAkZmllbGQ9J2lkJywgJHZhbHVlLCAkaWR4PSdpZCcsICRub3Jvb3Q9ZmFsc2UsICRub2N1cnJlbnQ9ZmFsc2UsICRjaGVjaz0nJywgJHJldmVyc2U9ZmFsc2UsICRvcmRlcmJ5PSdsZnQnLCAkdHJlZT0nJyApCgl7CgkJaWYoISR0aGlzLT5fY2hlY2tGaWVsZCgkZmllbGQpKSByZXR1cm4gZmFsc2U7CgkJJHRtcCA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJycsICRmaWVsZC4nID0gPycsIGFycmF5KCR2YWx1ZSksIHRydWUsICR0cmVlKTsKCQlpZiggJHRtcCApCgkJewoJCQkkb3V0PWFycmF5KCk7ICRpbnZvbGRlZD1hcnJheSgpOwoJCQlmb3JlYWNoKCR0bXAgYXMgJGl0ZW0pCgkJCXsKCQkJCSRpbnZvbGRlZFtdID0gJGl0ZW07CgkJCQkkcGF0aCA9ICR0aGlzLT5fc2VsZWN0X3BhdGgoJGl0ZW0sICRpZHgsICRub3Jvb3QsICRub2N1cnJlbnQsICRvcmRlcmJ5LCAkdHJlZSk7CgkJCQlpZigkcGF0aCAmJiAhZW1wdHkoJGNoZWNrKSAmJiAhYXJyYXlfa2V5X2V4aXN0cygkY2hlY2ssICRwYXRoKSkgY29udGludWU7CgkJCQlpZiggJHBhdGggKSAkb3V0W10gPSAoKCRyZXZlcnNlKSA/YXJyYXlfcmV2ZXJzZSgkcGF0aCk6JHBhdGgpOwoJCQl9CgkJCSR0bXAgPSAkb3V0OwoJCX0KCQlyZXR1cm4gJHRoaXMtPnNldE91dHB1dCgkdG1wLCAkaW52b2xkZWQpOwoJfQoKCWZ1bmN0aW9uIG1hdGNoSGllcmFyY2h5KCAkcGF0aCwgJGZpZWxkLCAkZGVsaW1pdGVyPScvJywgJHRyZWU9JycgKQoJewoJCSRwYXJ0cyA9IGV4cGxvZGUoJGRlbGltaXRlciwgJHBhdGgpOwoJCSRjaGVjayA9IGFycmF5X2tleXMoJHBhdGgpOwoKCQkkbm9kZSA9IGVuZCgkcGFydHMpOwoJCSR0bXBfbm9kZSA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJycsICRmaWVsZC4nID0gPycsIGFycmF5KCRub2RlKSwgdHJ1ZSwgJHRyZWUpOwoJCSRyb290ID0gcmVzZXQoJHBhcnRzKTsKCQkkdG1wX3Jvb3QgPSAkdGhpcy0+X2Z1bGxfY3VzdG9tX3F1ZXJ5KCcnLCAncGFyZW50ID0gMCcsIGFycmF5KCksIHRydWUsICR0cmVlKTsKCgkJaWYoJHJvb3QgPT0gJHRtcF9yb290WzBdWyIkZmllbGQiXSkgJG5vcm9vdCA9IGZhbHNlOwoJCWVsc2UgJG5vcm9vdCA9IHRydWU7CgoJCWlmKCAkdG1wX25vZGUgKQoJCXsKCQkJZm9yZWFjaCgkdG1wX25vZGUgYXMgJGl0ZW0pCgkJCXsKCQkJCSRwYXRoID0gJHRoaXMtPl9zZWxlY3RfcGF0aCgkaXRlbSwgJGZpZWxkLCAkbm9yb290LCBmYWxzZSwgJ2xmdCcsICR0cmVlKTsKCQkJCSR0ZXN0ID0gYXJyYXlfZGlmZihhcnJheV9tZXJnZSgkcGF0aCwgJGNoZWNrKSwgYXJyYXlfaW50ZXJzZWN0KCRwYXRoLCAkY2hlY2spKTsKCQkJCWlmKGNvdW50KCR0ZXN0KSA9PSAwKSByZXR1cm4gdHJ1ZTsKCQkJfQoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoJZnVuY3Rpb24gZ2V0VHJlZSggJGRlcHRoPS0xLCAkb3JkZXJieT0nbGZ0JywgJGlkeD0nJywgJGZpZWxkYWxsb3c9JycsICR2YWx1ZWFsbG93PWZhbHNlLCAkZmllbGRkZW55PScnLCAkdmFsdWVkZW55PWZhbHNlLCAkdHJlZT0nJyApCgl7CgkJJHRtcCA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJycsICdwYXJlbnQgPSAwJywgYXJyYXkoKSwgZmFsc2UsICR0cmVlKTsKCQlpZiggJHRtcCApIHJldHVybiAkdGhpcy0+X3NlbGVjdF9zdWJfbm9kZXMoJHRtcFswXSwgJGRlcHRoLCAkb3JkZXJieSwgZmFsc2UsICRpZHgsICR0cmVlLCAkZmllbGRhbGxvdywgJHZhbHVlYWxsb3csICRmaWVsZGRlbnksICR2YWx1ZWRlbnkpOwoJCXJldHVybiBmYWxzZTsKCX0KCglmdW5jdGlvbiBkdW1wVHJlZSggJGRlcHRoPS0xLCAkb3JkZXJieT0nbGZ0JywgJGZpZWxkYWxsb3c9JycsICR2YWx1ZWFsbG93PWZhbHNlLCAkZmllbGRkZW55PScnLCAkdmFsdWVkZW55PWZhbHNlLCAkdHJlZT0nJyApCgl7CgkJJHRtcCA9ICR0aGlzLT5fZnVsbF9jdXN0b21fcXVlcnkoJycsICdwYXJlbnQgPSAwJywgYXJyYXkoKSwgZmFsc2UsICR0cmVlKTsKCQlpZiggJHRtcCApCgkJewoJCQkkZHVtcHMgPSAkdGhpcy0+X3NlbGVjdF9zdWJfbm9kZXMoJHRtcFswXSwgJGRlcHRoLCAkb3JkZXJieSwgZmFsc2UsICcnLCAkdHJlZSwgJGZpZWxkYWxsb3csICR2YWx1ZWFsbG93LCAkZmllbGRkZW55LCAkdmFsdWVkZW55KTsKCQkJaWYoICRkdW1wcyApCgkJCXsKCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbigndHJlZScsICR0aGlzLT5MYW5nKCd0cmVlJykpOwoJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0cmVlX25hbWUnLCAkdHJlZSk7CgkJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2R1bXBzJywgJGR1bXBzKTsKCQkJCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZHVtcC50cGwnKTsKCQkJfQoJCX0KCX0KfQo/Pgo=]]></data>
	</file>
</module>
