<?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>NeoModule</name>
	<version>0.6.0</version>
  <mincmsversion>1.11</mincmsversion>
	<help><![CDATA[PHN0cm9uZz5Ob3RpY2UhIFRoaXMgaXMgYSBtb2R1bGUtZGV2ZWxvcGVyLW9ubHkgbW9kdWxlLiBJZiB5b3UgYXJlIG5vdCBhIGRldmVsb3Blcgp5b3UnbGwgcHJvYmFibHkganVzdCB3YW50IHRvIHNraXAgdGhlIGdvcnkgZGV0YWlscyBvZiB0aGlzIHBhZ2UgYW5kIHJlbHkgb24gdGhhdAp0aGUgbW9kdWxlIGp1c3QgZG9lcyBpdCdzIHdvcmsuPC9zdHJvbmc+CjxoMz5QdXJwb3NlIG9mIHRoZSBtb2R1bGU8L2gzPgpUaGUgcHVycG9zZSBvZiB0aGlzIG1vZHVsZSBpcyB0byBjdXQgb2ZmIG9uIGRldmVsb3BtZW50dGltZSBwcm92aWRpbmcgc29tZQplYXN5IHRvIHVzZSBmdW5jdGlvbnMgZXh0ZW5kaW5nIHRoZSBtb2R1bGUtQVBJIG9mIENNUyBNYWRlIFNpbXBsZS4gVGhpcyBpbmNsdWRlcywKYnV0IGlzIG5vIGxpbWl0ZWQgdG8sIHNob3J0Y3V0cyB0byBOZW9EYXRhU3RvcmFnZS1mdW5jaW9uYWxpdHksIGEgY291cGxlIG9mIG5pY2UKU21hcnR5LXNob3J0Y3V0cywgRmlyZVBIUC1pbnRlZ3JhdGlvbiBldGMuCjxoMz5Vc2FnZSBvZiB0aGUgbW9kdWxlPC9oMz4KVG8gdXNlIHRoaXMgZXh0ZW5kZWQgbW9kdWxlLWNsYXNzIHlvdSBzaG91bGQgaW5oZXJpdCBmcm9tIE5lb01vZHVsZS1jbGFzcyBpbnN0ZWFkCm9mIHRoZSB1c3VhbCBDTVNNb2R1bGUtY2xhc3MuIFRoaXMgY2FuIGJlIGRvbmUgbGlrZSB0aGlzOgo8cHJlPgpyZXF1aXJlX29uY2UoZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSkuIi9OZW9Nb2R1bGUvTmVvTW9kdWxlLm1vZHVsZS5waHAiKTsKY2xhc3MgTXlNb2R1bGUgZXh0ZW5kcyBOZW9Nb2R1bGUgewo8L3ByZT4KSWYgeW91IHdpc2ggdG8gdXNlIHRoZSBOZXdEYXRhU3RvcmFnZSBmdW5jdGlvbmFsaXR5LCB5b3Ugc2hvdWxkIG9mIGNvdXJzZSBhbHNvCmluc3RhbGwgdGhhdCBtb2R1bGUuCjxoMz5Ib3cgdG8gZ2V0IGhlbHA8L2gzPgpJIHdpbGwgcmVwZWF0LCB0aGlzIG1vZHVsZSBpcyBmb3IgZGV2ZWxvcGVycyBvbmx5LiBJZiB5b3UgY2Fubm90IHJlYWQgcGhwLXNvdXJjZSBjb2RlLAp5b3Ugc2hvdWxkIHVzZSBpdCBmb3IgZGV2ZWxvcG1lbnQgYW55d2F5LiBJZiB5b3UgY2FuLCBhbHdheXMgY2hlY2sgb3V0IHRoZSBjb2RlIApmb3IgaGludHMgb24gaG93IHRvIG1ha2UgaXQgd29yay4gSWYgeW91IHN0aWxsIGhhdmUgcXVlc3Rpb25zIG9yIHN1Z2dlc3Rpb25zIGZvcgpmaXhlcy9pbXByb3ZlbWVudHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY2F0Y2ggbWUgKFNpbG1hcmlsbGlvbikgaW4gdGhlIGZvcnVtIG9nICNpcmMuCgo8aDM+TGlzdCBvZiBtZXRob2RzPC9oMz4KSSB3aWxsIHRyeSB0byBrZWVwIHRoaXMgbGlzdCB1cHRvZGF0ZSwgYnV0IGZvciBtb3N0IHJlY2VudCBsaXN0LCBwbGVhc2UKY2hlY2sgdGhlIE5lb01vZHVsZS5tb2R1bGUucGhwLWZpbGUgaXRzZWxmLiBTb21lIGRvY3VtZW50YXRpb24gb2YgdGhlIG1ldGhvZHMKbWF5IGV2ZW4gc25lYWsgaW4gdGhlcmUgc29tIGRheS4KPHByZT4KLyoKICoKICogU2V0dXAgZnVuY3Rpb25zCiAqCiAqLwoKZnVuY3Rpb24gU2V0SWQoJGlkKQpmdW5jdGlvbiBOZW9TZXRJZCgkaWQpCmZ1bmN0aW9uIE5lb1NldFJldHVybklkKCRyZXR1cm5pZCkKZnVuY3Rpb24gTmVvU2V0dXAoJGlkLCRtb2R1bGUsJHJldHVybmlkPSIwIiwkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb1NldFBhcmFtcygkcGFyYW1zKTsKCiAgLyoKICAgKgogICAqIEdlbmVyYWwgc2hvcnRjdXQgZnVuY3Rpb25zCiAgICoKICAgKi8KZnVuY3Rpb24gUHJlZigkcHJlZm5hbWUsJGRlZmF1bHQ9IiIpCmZ1bmN0aW9uIFNldFByZWYoJHByZWZuYW1lLCAkdmFsdWUpCmZ1bmN0aW9uIEluY1ByZWYoJHByZWZuYW1lLCAkdmFsdWU9MSkKZnVuY3Rpb24gRGVjUHJlZigkcHJlZm5hbWUsICR2YWx1ZT0xKQoKLy9TZXRzIGEgcHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGUgJHBhcmFtcy1hcnJheSBzZXQgYnkgTmVvU2V0VXAuCi8vT3B0aW9uYWxseSBkZWxldGluZyBhc3NpZ25pbmcgYSB2YWx1ZSBvciBkZWxldGluZyB0aGUgcHJlZmVyZW5jZSBpZiBub3Qgc2V0IGluIHRoaXMgYXJyYXkKZnVuY3Rpb24gTmVvU2V0UHJlZigkcHJlZm5hbWUsICRub3RzZXR2YWx1ZT0iIiwgJGRlbGV0ZWlmbm90c2V0PWZhbHNlKQpmdW5jdGlvbiBOZW9TZXRQcmVmcygkcHJlZnM9YXJyYXkoKSkgLy9yZXF1aXJlcyBhbiBhc3NvY2lhdGVkIGFycmF5IG9mICRwcmVmbmFtZXM9PiRub3RzZXR2YWx1ZQpmdW5jdGlvbiBOZW9DbXNMaW5rKCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvQ21zVXJsKCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvUmVkaXJlY3QoJGFjdGlvbj0iIiwkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb1JlZGlyZWN0RnVsbCgkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb0FkbWluUmV0dXJuKCRwYXJhbXM9YXJyYXkoKSkKLyoKICoKICogRm9ybS1nZW5lcmF0aW9uIGZ1bmN0aW9ucwogKgogKi8KCmZ1bmN0aW9uIE5lb0Zvcm1TdGFydCgkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb0Zvcm1FbmQoJHBhcmFtcz1hcnJheSgpKQpmdW5jdGlvbiBOZW9JbnB1dFRleHQoJHBhcmFtcz1hcnJheSgpCmZ1bmN0aW9uIE5lb1RleHRhcmVhKCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvSW5wdXRDaGVja2JveCgkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb0lucHV0U3VibWl0KCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvSW5wdXRSZXNldCgkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb0lucHV0SW5wdXREcm9wZG93bigkcGFyYW1zPWFycmF5KCkpCgovKiBmdW5jdGlvbiBiZWxvdyBpbmNsdWRlIHNtYXJ0eWFzc2lnbm1lbnQsIGRvZXMgbm90IHJldHVybiBhbnl0aGluZyAqLwpmdW5jdGlvbiBTbWFydHlGb3JtU3RhcnQoJHNtYXJ0eW5hbWUsJHBhcmFtcz1hcnJheSgpKQoKZnVuY3Rpb24gU21hcnR5Rm9ybUVuZCgkc21hcnR5bmFtZSkKZnVuY3Rpb24gU21hcnR5SW5wdXRTdWJtaXQoJHNtYXJ0eW5hbWUsJHBhcmFtcykKCmZ1bmN0aW9uIFNtYXJ0eUlucHV0VGV4dCgkc21hcnR5bmFtZSwkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIFNtYXJ0eUlucHV0Q2hlY2tib3goJHNtYXJ0eW5hbWUsJHBhcmFtcz1hcnJheSgpKQoKZnVuY3Rpb24gU21hcnR5SW5wdXRIaWRkZW4oJHNtYXJ0eW5hbWUsJG5hbWUsJHZhbHVlKQpvcgpmdW5jdGlvbiBTbWFydHlJbnB1dEhpZGRlbigkc21hcnR5bmFtZSwkcGFyYW1zKQoKZnVuY3Rpb24gU21hcnR5SW5wdXRNdWx0aUhpZGRlbigkc21hcnR5bmFtZSwkZmllbGRzPWFycmF5KCkpCgovKgogKgogKiBOZW9EYXRhU3RvcmFnZSBzaG9ydGN1dHMKICoKICovCmZ1bmN0aW9uIEFkZEVudGl0eSgkdGFibGUsICRwcm9wcz1hcnJheSgpKQpmdW5jdGlvbiBEZWxldGVFbnRpdHkoJGlkKQpmdW5jdGlvbiBHZXRFbnRpdHkoJGlkLCAkb3ZlcnJpZGVwcm9wcz1hcnJheSgpKQpmdW5jdGlvbiBHZXRFbnRpdGllcygkdGFibGU9IiIsICRjcml0ZXJpYT1hcnJheSgpLCAkYWx3YXlzcmV0dXJuYXJyYXk9ZmFsc2UpCmZ1bmN0aW9uIEdldE9uZUVudGl0eSgkdGFibGUsICRjcml0ZXJpYT1hcnJheSgpLCAkZmFpbGlmbXVsdGlwbGU9ZmFsc2UpCmZ1bmN0aW9uIEdldEVudGl0aWVzRnVsbCgkdGFibGU9IiIsICRjcml0ZXJpYT1hcnJheSgpLCAkYWx3YXlzcmV0dXJuYXJyYXk9ZmFsc2UpCmZ1bmN0aW9uIFNldEVudGl0eVByb3AoJGlkLCRwcm9wbmFtZSwkcHJvcHZhbHVlLCRwcm9wdHlwZT0idW5kZWZpbmVkIikKZnVuY3Rpb24gQ2xlYXJFbnRpdHlQcm9wKCRpZCwgJHByb3BuYW1lKQpmdW5jdGlvbiBTZXRFbnRpdHlQcm9wcygkaWQsICRwcm9wcywgJGNsZWFyPXRydWUpCmZ1bmN0aW9uIFNldEVudGl0eVByb3BzRnJvbUFycmF5KCRpZCwgJHByb3BzLCAkdmFsdWVzLCAkY2xlYXI9dHJ1ZSwgJGZpbGw9ZmFsc2UpCmZ1bmN0aW9uIFNldEVudGl0eVByb3BzT25Dcml0ZXJpYSgkdGFibGUsICRwcm9wcywgJGNyaXRlcmlhLCAkY3JlYXRlPXRydWUsICRjbGVhcj1mYWxzZSkgLy9Eb2VzIG5vdCB3b3JrCmZ1bmN0aW9uIFJlc2V0RW50aXR5UHJvcHMoJGlkLCAkbmV3cHJvcHM9YXJyYXkoKSkKZnVuY3Rpb24gUmVtb3ZlTW9kdWxlRW50aXRpZXMoKQpmdW5jdGlvbiBDbGVhckVudGl0eVByb3BzKCRpZCkKZnVuY3Rpb24gQ29tcGFyZUVudGl0aWVzKCRlbnRpdHkxLCAkZW50aXR5MiwgJHNvcnRmaWVsZCkKZnVuY3Rpb24gQ29tcGFyZUVudGl0aWVzQ29tcGxleCgkZW50aXR5MSwgJGVudGl0eTIsICRzb3J0ZmllbGRzKQpmdW5jdGlvbiBTb3J0RW50aXRpZXMoJGxpc3QsICRzb3J0ZmllbGRzKQpmdW5jdGlvbiBFbnRpdGllc0NvdW50KCR0YWJsZT0iIiwgJGNyaXRlcmlhPWFycmF5KCkpCmZ1bmN0aW9uIENsZWFyTW9kdWxlRW50aXRpZXMoKQpmdW5jdGlvbiBTZXRFbnRpdHlDb25uZWN0aW9uKCRpZDEsICRpZDIsICR0eXBlPSIiKQpmdW5jdGlvbiBDbGVhckVudGl0eUNvbm5lY3Rpb25zKCRpZDEsICRpZDI9LTEsICR0eXBlPSIiKQpmdW5jdGlvbiBDbGVhckVudGl0eUNvbm5lY3Rpb24oJGlkMSwgJGlkMiwgJHR5cGU9IiIpCmZ1bmN0aW9uIENoZWNrRW50aXR5Q29ubmVjdGlvbigkaWQxLCRpZDIsJHR5cGU9IiIsJHJldHVybnZhbHVlPXRydWUpCmZ1bmN0aW9uIEdldEVudGl0eUNvbm5lY3Rpb25zKCRpZDEsICRpZDI9LTEsICR0eXBlPSIiKQpmdW5jdGlvbiBBZGRGaWVsZFNldCgkbmFtZSwkZmllbGRzKQpmdW5jdGlvbiBHZXRGaWVsZFNldCgkbmFtZSkKZnVuY3Rpb24gRW50aXR5U2V0VW5zZXRQcm9wcygkZW50aXR5LCRmaWVsZHNldCwkZmlsbHZhbHVlPSIiKSB7CmZ1bmN0aW9uIEdldERTRXJyb3JzKCRubDJicj10cnVlLCRjbGVhcj10cnVlKQpmdW5jdGlvbiBPdXRwdXREU0Vycm9ycygkY2xlYXI9dHJ1ZSkKZnVuY3Rpb24gRFNJbkVycm9yKCkKZnVuY3Rpb24gTWFrZVNpbXBsZUFycmF5KCR0YWJsZSwkZmllbGQpCmZ1bmN0aW9uIE1ha2VBc3NvY0FycmF5KCR0YWJsZSwkZmllbGRzKQoKCi8qCiAqCiAqIExpbmsgYW5kIGljb24gZnVuY3Rpb25zCiAqCiAqLwoKZnVuY3Rpb24gTmVvRGVsZXRlSWNvbigkYWN0aW9uLCR0ZXh0LCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKQpmdW5jdGlvbiBOZW9Db3B5SWNvbigkYWN0aW9uLCR0ZXh0LCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKQpmdW5jdGlvbiBOZW9FZGl0SWNvbigkYWN0aW9uLCR0ZXh0LCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKQpmdW5jdGlvbiBOZW9BZGRJY29uKCRhY3Rpb24sJHRleHQsJHBhcmFtcz1hcnJheSgpLCRjb25maXJtYXRpb249IiIpCmZ1bmN0aW9uIE5lb1RydWVJY29uKCRhY3Rpb24sJHRleHQsJHBhcmFtcz1hcnJheSgpLCRjb25maXJtYXRpb249IiIpCmZ1bmN0aW9uIE5lb0ZhbHNlSWNvbigkYWN0aW9uLCR0ZXh0LCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKQpmdW5jdGlvbiBOZW9TeXN0ZW1JY29uKCRpY29uLCR0ZXh0PSIiKQoKLyoKICoKICogVXRpbGl0eSBmdW5jdGlvbnMKICoKICovCmZ1bmN0aW9uIE5lb1NsYXNoZXMoJHVybCkKZnVuY3Rpb24gRGVjb2RlSFRNTEVudGl0aWVzKCRzKQpmdW5jdGlvbiBTbGFzaCgkc3RyLCRzdHIyPSIiLCRzdHIzPSIiKQpmdW5jdGlvbiBTbGFzaGVzKCR1cmwpCmZ1bmN0aW9uIGlzX2Fzc29jKCRhcnJheSkKZnVuY3Rpb24gTmVvRGlyTGlzdCgkcm9vdCwkd2hhdD0iZmlsZXMiLCRpbnRyb2R1Y3Rpb249YXJyYXkoKSwkZXhjbHVkZXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvR2V0TWltZVR5cGUoJGZpbGVuYW1lKQoKLypDaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4gaW5kZXggaW4gYW4gYXJyYXkgYW5kIHJldHVybiB0aGUgdmFsdWUgaWYgaXQncyB0aGVyZQogKmFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCdzIG5vdAoqLwpmdW5jdGlvbiBOZW9QYXJhbVZhbHVlKCRuYW1lLCRwYXJhbXMsJGRlZmF1bHQ9IiIpCgovL1Nob3J0Y3V0IGZvciB0aGUgYWJvdmUKZnVuY3Rpb24gTlBWKCRuYW1lLCAkcGFyYW1zKQpmdW5jdGlvbiBOZW9BcHBseVBhcmFtVmFsdWVzKCR0aGlzYXJyYXksICRwYXJhbXMsICRpbmRleGVzLCAkYWx3YXlzZmlsbD1mYWxzZSkKZnVuY3Rpb24gQ2hlY2tGaWxlRXh0ZW5zaW9uKCRmaWxlbmFtZSwgJGFsbG93ZWRleHRlbnNpb25zPWFycmF5KCkpCgovL0ZvciBub3csIHJlYWQgc291cmNlIHRvIHVuZGVyc3RhbmQKZnVuY3Rpb24gTmVvVG9vbFRpcCgkcGFyYW1zPWFycmF5KCkpIC8vcmVxdWlyZXMgMiBjc3MtY2xhc3NlcyB0byBiZSBzZXQgdXAKCi8vQ2hlY2tzIGJvdGggd2hldGhlciB0aGUgaW5kZXggZXhpc3RzIGluIHRoZSBhcnJheSBhbmQgd2hldGhlciBpdCBoYXMgYSB2YWx1ZSBkaWZmZXJlbnQgZm9tciBub3RoaW5nIG90IG9ubHkgc3BhY2VzCmZ1bmN0aW9uIE5lb0VtcHR5KCRpbmRleD0iIiwkZGF0YT1hcnJheSgpKQoKLy9WYWxpZGF0ZXMgYW4gZW1haWxhZHJlc3MsIG9wdGlvbmFsbHkgYXZvaWRpbmcgY2hlY2tpbmcgdGhlIG14LWF2YWlsYWJpbGl0eSBvZiB0aGUgZG9tYWluCmZ1bmN0aW9uIE5lb1ZhbGlkYXRlRW1haWwoJGVtYWlsLCAkYXZvaWRvbmxpbmUgPSBmYWxzZSkKCi8vVmFsaWRhdGVzIGFuIHVybApmdW5jdGlvbiBOZW9WYWxpZGF0ZVVSTCgkdXJsKSB7CgovL1JldHVybnMgYSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hpY2ggY2Fubm90IChwZXJoYXBzKSBiZSBsaW5lLWJyb2tlbgpmdW5jdGlvbiBOZW9Ob0JyZWFrcygkc3RyaW5nKQoKLy9zYW1lIGFzIHByaW50X3IsIGJ1dCB3cmFwcyBpbiA8cHJlPidzIGFuZCBpbiBhIGRpdiB0cnlpbmcgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlCmZ1bmN0aW9uIE5lb1ByaW50UigkZGF0YT1hcnJheSgpLCRzZW5kb3V0PXRydWUpCgovL3JlbW92ZWQga2V5L3ZhbHVlcyB3aGVyZSB0cmltKHZhbHVlKSBpcyBlbXB0eSBhbmQgdHJpbXMgdmFsdWVzIGlmIG5vdApmdW5jdGlvbiBOZW9UcmltQXJyYXkoJGluYXJyYXk9YXJyYXkoKSkKCi8vcmVtb3ZlIGFsbCBpbmRleGVzLCBleGNlcHQgdGhvc2Ugc3BlY2lmdWVkIGluICR3YW50ZWRpbmRleGVzLCBmb3IgaW5zdGFuY2UgZm9yIGNsZWFuaW5nICRwYXJhbXMKZnVuY3Rpb24gTmVvQ2xlYW5BcnJheSgkaW5hcnJheT1hcnJheSgpLCAkd2FudGVkaW5kZXhlcz1hcnJheSgpLCAkYWx3YXlzc2V0PWZhbHNlKQoKLyoKICoKICogU21hcnR5IHNob3J0Y3V0cwogKgogKi8KZnVuY3Rpb24gU21hcnR5QXNzaWduKCRzbWFydHlpbmZvLCAkc21hcnR5Y29udGVudD0iIikKZnVuY3Rpb24gU21hcnR5QXNzaWduUHJlZigkc21hcnR5bmFtZSwgJHByZWZlcmVuY2VuYW1lPSIiKSB7CmZ1bmN0aW9uIFNtYXJ0eUFzc2lnbkNNUygkbW9kdWxlLCR2YXJuYW1lPSJjbXMiKQpmdW5jdGlvbiBTbWFydHlVcGxvYWRGb3JtU3RhcnQoJHNtYXJ0eW5hbWUsJHBhcmFtcz1hcnJheSgpKSB7CgovKgogKgogKiBEZWJ1Z2dpbmcgZnVuY3Rpb25zCiAqCiAqLwpmdW5jdGlvbiBGaXJlRGVidWcoJGNvbW1hbmQsJG1lc3NhZ2U9IiIsJHZhcmlhYmxlcz1hcnJheSgpKQoKLyoKICoKICogRXJyb3IgaGFuZGxpbmcKICoKICovCmZ1bmN0aW9uIEVycm9yKCRlcnJvcnRleHQsJHJldHVybnZhbHVlPWZhbHNlLCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gR2V0RXJyb3JzKCRubDJicj10cnVlLCRjbGVhcj10cnVlLCRpbmNsdWRlZHM9dHJ1ZSkKZnVuY3Rpb24gT3V0cHV0RXJyb3JzKCRjbGVhcj10cnVlLCRpbmNsdWRlZHM9dHJ1ZSkKZnVuY3Rpb24gSW5FcnJvcigpCjwvcHJlPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBNb3J0ZW4gUG91bHNlbiAmbHQ7bW9ydGVuQHBvdWxzZW4ub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDAuNi4wPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgogIDxsaT52ZXJzaW9uIDAuNi4wPC9saT4KICBDbGVhbmVkIHVwIGEgYml0IGFuZCB0ZXN0ZWQgd3RoIGNtc21zIDIuMAogIDxsaT52ZXJzaW9uIDAuNS41PC9saT4KICBBZGRlZCBTbWFydHlJbnB1dFJhZGlvR3JvdXAtc2hvcnRjdXQKICA8YnIvPgoKICBBZGRlZCBfIHNob3J0Y3V0IGZvciBsYW5nLWZ1bmN0aW9uCgogICA8bGk+dmVyc2lvbiAwLjUuNDwvbGk+CiAgIEFkZGVkIE5lb0NsZWFuQXJyYXkgZnVuY3Rpb24KCiAgICA8bGk+dmVyc2lvbiAwLjUuMzwvbGk+CkFkZGVkICJudW1lcmljIiBhbmQgIm51bWVyaWNvcmVtcHR5IiB0byBmb3JtdmFsaWRhdGlvbgogICAgPGJyLz4KCiAgICBBZGRlZCAiZW1wdHkiICB0byBmb3JtdmFsaWRhdGlvbgogICAgPGJyLz4KICAgIEFkZGVkIEluY1ByZWYgYW5kIERlY1ByZWYKICAgIDxici8+CiAgICBBZGRlZCBOZW9CdXR0b25MaW5rIHdvcmtpbmcgbGlrZSBhIGxpbmsKCiAgPGxpPnZlcnNpb24gMC41LjI8L2xpPgogIEFkZGVkICRjb25maWc9JGdDbXMtPkdldENvbmZpZygpOyB0byBORU9JTklUCiAgICA8YnIvPgogIGFkZGVkIF90ZXh0IGZvciBlYXN5IGludGVybmFsIHRyYW5zbGF0aW9ucyB1c2luZyBAcHJlZml4CiAgICA8YnIvPgogICAgTmVvSWNvbnMgY2FuIG5vdyBiZSB3aXRoIGxpbmsKICAgIDxici8+CiAgICBUaW1lIHNlbGVjdGlvbiBub3cgYWxsb3dlZCBpbiBOZW9EYXRlVGltZQogICAgPGJyLz4KICAgIGZpeGVkICRhbHdheXNyZXR1cm5hcnJheSBpbiBHZXRFbnRpdGllcwogICAgPGJyLz4KICAgIEZpeGVkIG1pbWUgdHlwZSB3aGVuIGluY2x1ZGluZyBkYXRldGltZXBpY2tlciBqYXZhc2NyaXB0CgogIDxsaT52ZXJzaW9uIDAuNS4xPC9saT4KICBmaXhlZCBnZXRlbnRpdGllc2Z1bGwgcGFyYW0gY2FsbGVkIGFsd2F5c3JldHVybmFycmF5LCBhZGRlZCB0aGUgYWRkdGV4dCBwYXJhbSB0byBuZW9wcmV0dHlsaW5rIHRvIGJlIGFibGUgdG8gYWRkIGFsdC10ZXh0cwoKICA8bGk+dmVyc2lvbiAwLjUuMDwvbGk+CiAgRml4ZXMsIGNsZWFudXBzLCBhbmQgZW5kaW5nIG9mIHZlcnNpb24gY29uZnVzaW9uCgogIDxsaT52ZXJzaW9uIDAuNC4xPC9saT4KICBBZGRlZCBtb3JlIHZhbGlkYXRpb25zLCBlcXVhbCBhbmQgaWRlbnRpY2FsPGJyLz4KICBBZGRlZCBldmVuIHNob3J0ZXIgTmVvVXJsIGFuZCBOZW9MaW5rCiAgUHJlcGFyZWQgZm9yIGNtc21zIDEuMTAKCiAgPGxpPnZlcnNpb24gMC40LjA8L2xpPgogIEFkZGVkIGRhdGV0aW1lcGlja2VyIGFuZCBpbnRlZ3JhdGVkIGl0CgogIDxsaT52ZXJzaW9uIDAuMy41PGJyLz4KICBNdWx0aXBsZSBidWdmaXhlcyBkaXNjb3ZlcmVkIGJ5IFBocFN0b3JtCiAgPGJyLz4KCiAgPGxpPnZlcnNpb24gMC4zLjQ8YnIvPgogIHJld29ya2VkIGZvciBjbXNtcygpLW1ldGhvZHMKICA8YnIvPgoKCiAgPGxpPnZlcnNpb24gMC4zLjM8YnIvPgogIE5ldyBmb3JtdmFsaWRhdGlvbiBtZXRob2RzIGZvciBkcm9wZG93bnMgYW5kIHJhZGlvZ3JvdXBzCiAgPGJyLz4KCiAgPGxpPnZlcnNpb24gMC4zLjI8YnIvPgogIGFkZGVkIGNzcy1pbmplY3Rpb25zIHN0eWxpbmcgdGhlIGZvcm12YWxpZGF0aW9uLXBvcHVwCiAgPGJyLz4KICBzdGFydGVkIGRvaW5nIHNvbWUgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSB0aGUgbW9kdWxlLWNsYXNzCgogIDxsaT52ZXJzaW9uIDAuMy4xPGJyLz4KICBmaXhlZCB0aGUgdWdseSBjc3MgaW4gYm9keSxpdCdzIG5vdyBqYXZhc2NyaXB0CiAgPGJyLz4KICBBZGRlZCBfIHNob3J0Y3V0IGZvciBsYW5nLWZ1bmN0aW9uCgogICAgPGxpPnZlcnNpb24gMC41LjQ8L2xpPgogICAgQWRkZWQgImVtcHR5IiB0byBmb3JtZmllbGQtdmFsaWRhdGlvbiB0eXBlcwogICAgPGJyLz4KCiAgICA8YnIvPgoKICAgIDxsaT52ZXJzaW9uIDAuNS4zPC9saT4KICAgIERhdGUyVW5peCBub3cgcmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgdGhhdCB3YXMgd2hhdCBpdCB3YXMgZ2l2ZW4KICAgIDxici8+CiAgICBBZGRlZCBORU9fSU5JVF9JTlNUQUxMIHRvIGF2b2lkIGVycm9ycyBpbiBtZXRob2QuaW5zdGFsbC5waHAKICAgIDxici8+CgoKICAgIDxsaT52ZXJzaW9uIDAuNS4yPC9saT4KICAgIEFkZGVkICRjb25maWc9JGdDbXMtPkdldENvbmZpZygpOyB0byBORU9JTklUCiAgICA8YnIvPgogICAgYWRkZWQgX3RleHQgZm9yIGVhc3kgaW50ZXJuYWwgdHJhbnNsYXRpb25zIHVzaW5nIEBwcmVmaXgKICAgIDxici8+CiAgICBOZW9JY29ucyBjYW4gbm93IGJlIHdpdGggbGluawogICAgPGJyLz4KICAgIFRpbWUgc2VsZWN0aW9uIG5vdyBhbGxvd2VkIGluIE5lb0RhdGVUaW1lCiAgICA8YnIvPgogICAgZml4ZWQgJGFsd2F5c3JldHVybmFycmF5IGluIEdldEVudGl0aWVzCgogICAgPGxpPnZlcnNpb24gMC41LjE8L2xpPgogICAgZml4ZWQgZ2V0ZW50aXRpZXNmdWxsIHBhcmFtIGNhbGxlZCBhbHdheXNyZXR1cm5hcnJheSwgYWRkZWQgdGhlIGFkZHRleHQgcGFyYW0gdG8gbmVvcHJldHR5bGluayB0byBiZSBhYmxlIHRvIGFkZCBhbHQtdGV4dHMKCiAgICA8bGk+dmVyc2lvbiAwLjUuMDwvbGk+CiAgICBGaXhlcywgY2xlYW51cHMsIGFuZCBlbmRpbmcgb2YgdmVyc2lvbiBjb25mdXNpb24KCiAgICA8bGk+dmVyc2lvbiAwLjQuMTwvbGk+CiAgICBBZGRlZCBtb3JlIHZhbGlkYXRpb25zLCBlcXVhbCBhbmQgaWRlbnRpY2FsPGJyLz4KICAgIEFkZGVkIGV2ZW4gc2hvcnRlciBOZW9VcmwgYW5kIE5lb0xpbmsKICAgIFByZXBhcmVkIGZvciBjbXNtcyAxLjEwCgogICAgPGxpPnZlcnNpb24gMC40LjA8L2xpPgogICAgQWRkZWQgZGF0ZXRpbWVwaWNrZXIgYW5kIGludGVncmF0ZWQgaXQKCiAgICA8bGk+dmVyc2lvbiAwLjMuNTxici8+CiAgICAgICAgTXVsdGlwbGUgYnVnZml4ZXMgZGlzY292ZXJlZCBieSBQaHBTdG9ybQogICAgICAgIDxici8+CgogICAgPGxpPnZlcnNpb24gMC4zLjQ8YnIvPgogICAgICAgIHJld29ya2VkIGZvciBjbXNtcygpLW1ldGhvZHMKICAgICAgICA8YnIvPgoKCiAgICA8bGk+dmVyc2lvbiAwLjMuMzxici8+CiAgICAgICAgTmV3IGZvcm12YWxpZGF0aW9uIG1ldGhvZHMgZm9yIGRyb3Bkb3ducyBhbmQgcmFkaW9ncm91cHMKICAgICAgICA8YnIvPgoKICAgIDxsaT52ZXJzaW9uIDAuMy4yPGJyLz4KICAgICAgICBhZGRlZCBjc3MtaW5qZWN0aW9ucyBzdHlsaW5nIHRoZSBmb3JtdmFsaWRhdGlvbi1wb3B1cAogICAgICAgIDxici8+CiAgICAgICAgc3RhcnRlZCBkb2luZyBzb21lIGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhlIG1vZHVsZS1jbGFzcwoKICAgIDxsaT52ZXJzaW9uIDAuMy4xPGJyLz4KICAgICAgICBmaXhlZCB0aGUgdWdseSBjc3MgaW4gYm9keSxpdCdzIG5vdyBqYXZhc2NyaXB0CiAgICAgICAgPGJyLz4KCiAgICA8bGk+dmVyc2lvbiAwLjMuMDxici8+CiAgICAgICAgYWRkZWQgbmV3IGZ1bmN0aW9uIE5lb1NldFByZWZzLCBzaG9ydGluZyB0aGUgc2F2aW5nIG9mIHByZWZzIGZvciBpbnN0YW5jZQogICAgICAgIDxici8+CiAgICAgICAgYWRkZWQgZWFzeSBmb3JtLXZhbGlkYXRpb24gYW5kIG5pY2UgbWVzc2FnZXMgbGlua2VkIHRvIHRoYXQKICAgICAgICA8YnIvPgogICAgICAgIE9ic29sZXRlZCBTbWFydHlVcGxvYWRGb3JtU3RhcnQuCiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCBmdW5jdGlvbiBOZW9UcmltQXJyYXkoJGluYXJyYXk9YXJyYXkoKSkKCiAgICA8bGk+dmVyc2lvbiAwLjIuODxici8+CiAgICAgICAgYWRkZWQgbmV3IGZ1bmN0aW9uIE5lb0dldE1pbWVUeXBlCgogICAgPGxpPnZlcnNpb24gMC4yLjc8YnIvPgogICAgICAgIGZpeGVkIE5lb0Ntc0xpbmsgZm9yIHByZXR0eSB1cmxzLCBtaXNzZWQgdGhlIHRhcmdldGNvbnRlbnRvbmx5IHBhcmFtZXRlci4uLgoKICAgIDxsaT52ZXJzaW9uIDAuMi42PGJyLz4KICAgICAgICBBZGRlZCBhIFNldFByZWYtc2hvcnRjdXQgYW5kIGEgbmljZSBOZW9TZXRQcmVmLW1ldGhvZCAoc2VlIGhlbHApCiAgICAgICAgPGJyLz4KICAgICAgICBzZXQgZW50aXR5IHByb3BzIGZyb20gYXJyYXkgbm93IHVzZXMgc3RvcmVkIHBhcmFtcy12YWx1ZXMgaXMgb3RoZXIgbm90IHNwZWNpZmllcwogICAgICAgIDxici8+CiAgICAgICAgUmV3b3JrZWQgTmVvUmVkaXJlY3QoRnVsbCkgdG8gYmUgZmFzdGVyIHRvIHVzZQogICAgICAgIDxici8+CiAgICAgICAgQWRkZWQgTmVvVmFsaWRhdGVVUkwtbWV0aG9kCiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCBEZWNvZGVIVE1MRW50aXRpZXMKICAgICAgICA8YnIvPgogICAgICAgIEFkZGVkIE5lb0FkbWluUmV0dXJuCgoKICAgIDxsaT52ZXJzaW9uIDAuMi41PGJyLz4KICAgICAgICBBZGRlZCBhbiBvcHRpb24gdG8gTmVvQWRkSWNvbiB0byBhbHNvIGluY2x1ZGUgdGhlIGZvbGxpbmdzIHRleHQgbGluawogICAgICAgIDxici8+CiAgICAgICAgQWRkZWQgSXNUYWJsZUVtcHR5CiAgICAgICAgPGJyLz4KICAgICAgICBVcGRhdGUgRW1haWxWYWxpZGF0aW9uIHRvIG1haWwtY2FwYWJpbGl0aWVzIG9mIGRvbWFpbiBhcyB3ZWxsCiAgICAgICAgPGJyLz4KICAgICAgICBNYWRlIDJuZCBwYXJhbSB0byBOZW9Qw4VhcmFtVmFsdWUgZG91YmxlIGFzIGRlZmF1bHQgdmFsdWUgKHdoZW4gbm90IGFuIGFycmF5KQoKCgogICAgPGxpPnZlcnNpb24gMC4yLjQ8YnIvPgogICAgICAgIEFkZGVkIE5lb0VtcHR5LWZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgYW4gaW5kZXggaW4gYW4gYXJyYXkKICAgICAgICA8YnIvPgogICAgICAgIE1hZGUgTmVvUHJpbnRSIG91dHB1dCBjb250ZW50IG9mICRfcGFyYW1zIGlmIG5vIHBhcmFtZXRlciB3YXMgZ2l2ZW4KICAgICAgICA8YnIvPkFkZGVkIE5lb1ZhbGlkYXRlRW1haWwtZnVuY3Rpb24KICAgICAgICA8YnIvPkFkZGVkIE5lb05vQnJlYWtzLWZ1bmN0aW9uCgogICAgPGxpPnZlcnNpb24gMC4yLjM8YnIvPgogICAgICAgIE5vdyBwb3NzaWJsZSB0byByZWdpc3RlciAkcGFyYW1zIGZvciBldmVuIGVhc2llciBzeW50YXggaW4gcmVsZXZhbnQgZnVuY3Rpb25zIGxpa2UgTlBWCiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCBDcmVhdGVJbnB1dFBhc3N3b3JkLXdyYXBwZXIKICAgICAgICA8YnIvPgogICAgICAgIEFkZGVkIGZpbGwgcGFyYW1ldGVyIHRvIFNldEVudGl0eVByb3BzRnJvbUFycmF5CgoKICAgIDxsaT52ZXJzaW9uIDAuMi4yPGJyLz4KICAgICAgICBBZGRlZCBhIGN1c3RvbSByZXR1cm52YWx1ZSB0byBjaGVja2VudGl0eWNvbm5lY3Rpb25zCiAgICAgICAgPGJyLz4KICAgICAgICBJbXBsZW1lbnRlZCBNYWtlU2ltcGxlQXJyYXkKICAgICAgICA8YnIvPgogICAgICAgIEFkZGVkIE5lb1RydWVJY29uIGFuZCAgTmVvVHJ1ZUljb24KCiAgICA8bGk+dmVyc2lvbiAwLjIuMTxici8+CiAgICAgICAgYWRkZWQgYXJyYXlfZGlmZl9rZXkgaW1wbGVtZW50YXRpb24gZm9yIHByZS01LjEuMCB2ZXJzaW9uCiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCAkYWx3YXlzcmV0dXJuYXJyYXk9ZmFsc2UgdG8gR2V0RW50aXRpZXMoRnVsbCktbWV0aG9kcwogICAgICAgIDxici8+CiAgICAgICAgQWRkZWQgU21hcnRBc3NpZ25QcmVmLW1ldGhvZAogICAgICAgIDxici8+CiAgICAgICAgQWRkZWQgVG9vbHRpcC1TdXBwb3J0CiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCBOZW9SZWRpcmVjdC1mdW5jdGlvbgoKICAgIDxsaT52ZXJzaW9uIDAuMi4wPGJyLz4KICAgICAgICAtIGdlbmVyYWwgYnVnZml4aW5nPGJyLz4KICAgICAgICAtIEFkZGVkIGEgTmVvRGlyTGlzdC1mdW5jdGlvbjxici8+CiAgICAgICAgLSBGaXhlZCBuYW1lIGVycm9yIG9uIE5lb0lucHV0RHJvcGRvd248YnIvPgogICAgICAgIC0gYWRkZWQgc3VwcG9ydCBmb3IgM3JkIHBhcmFtZXRlciB0byBTbGFzaC1mdW5jdGlvbjxici8+CiAgICAgICAgLSBhZGRlZCBOZW9DbXNMaW5rIGFuZCBOZW9DbXNVcmwgc2hvcnRjdXRzPGJyLz4KICAgICAgICAtIGFkZGVkIFNtYXJ0eVVwbG9hZEZvcm1TdGFydDxici8+CiAgICAgICAgLSBhZGRlZCBTbWFydHlJbnB1dE11bHRpSGlkZGVuPGJyLz4KCiAgICA8L2xpPgogICAgPGxpPnZlcnNpb24gMC4xLjA8YnIvPgogICAgICAgIC0gaW5pdGlhbCByZWxlYXNlPC9saT4KPC91bD48YnIgLz4=]]></about>
	<description><![CDATA[An extended module-class, mainly for the Neo-series modules, but also for others to use]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.datetimepicker.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGRpZSgpOwoKJGpzPWZpbGVfZ2V0X2NvbnRlbnRzKGRpcm5hbWUoX19GSUxFX18pLiIvZGF0ZXRpbWVwaWNrZXIvZGF0ZXRpbWVwaWNrZXJfY3NzLmpzIik7CgppZiAoISRqcykgZGllKCk7CgokcG9zPXN0cnBvcygkanMsIi8vZW5kIEdsb2JhbCB2YXJpYWJsZSIpOwoKJHN0YXJ0PXN1YnN0cigkanMsMCwkcG9zKTsKJGVuZD1zdWJzdHIoJGpzLCRwb3MpOwokY29uZmlnPWNtc21zKCktPkdldENvbmZpZygpOwoKJHJlc3VsdD0nCgp2YXIgaW1hZ2VGaWxlc1BhdGggPSAiJy4kY29uZmlnWyJyb290X3VybCJdLicvbW9kdWxlcy9OZW9Nb2R1bGUvZGF0ZXRpbWVwaWNrZXIvaW1hZ2VzLyI7CgonOwoKJHJlc3VsdD0kc3RhcnQuJHJlc3VsdC4kZW5kOwoKJHJlc3VsdD1zdHJfcmVwbGFjZSgKICBhcnJheSgKICAgICciTW9uZGF5IicsCiAgICAnIlR1ZXNkYXkiJywKICAgICciV2VkbmVzZGF5IicsCiAgICAnIlRodXJzZGF5IicsCiAgICAnIkZyaWRheSInLAogICAgJyJTYXR1cmRheSInLAogICAgJyJTdW5kYXkiJwogICksCiAgYXJyYXkoCiAgICAnIicuaHRtbF9lbnRpdHlfZGVjb2RlKCR0aGlzLT5MYW5nKCJtb25kYXkiKSxFTlRfTk9RVU9URVMsIlVURi04IikuJyInLAogICAgJyInLmh0bWxfZW50aXR5X2RlY29kZSgkdGhpcy0+TGFuZygidHVlc2RheSIpLEVOVF9OT1FVT1RFUywiVVRGLTgiKS4nIicsCiAgICAnIicuaHRtbF9lbnRpdHlfZGVjb2RlKCR0aGlzLT5MYW5nKCJ3ZWRuZXNkYXkiKSxFTlRfTk9RVU9URVMsIlVURi04IikuJyInLAogICAgJyInLmh0bWxfZW50aXR5X2RlY29kZSgkdGhpcy0+TGFuZygidGh1cnNkYXkiKSxFTlRfTk9RVU9URVMsIlVURi04IikuJyInLAogICAgJyInLmh0bWxfZW50aXR5X2RlY29kZSgkdGhpcy0+TGFuZygiZnJpZGF5IiksRU5UX05PUVVPVEVTLCJVVEYtOCIpLiciJywKICAgICciJy5odG1sX2VudGl0eV9kZWNvZGUoJHRoaXMtPkxhbmcoInNhdHVyZGF5IiksRU5UX05PUVVPVEVTLCJVVEYtOCIpLiciJywKICAgICciJy5odG1sX2VudGl0eV9kZWNvZGUoJHRoaXMtPkxhbmcoInN1bmRheSIpLEVOVF9OT1FVT1RFUywiVVRGLTgiKS4nIicKICApCiAgLCRyZXN1bHQpOwoKJHJlc3VsdD1zdHJfcmVwbGFjZSgndmFyIERhdGVTZXBhcmF0b3IgPSAiLSI7JywndmFyIERhdGVTZXBhcmF0b3IgPSAiLyI7JywkcmVzdWx0KTsKCmhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQnKTsKZWNobyAkcmVzdWx0OwpkaWUoKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/datetimepicker/datetimepicker_css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly9KYXZhc3JpcHQgbmFtZTogTXkgRGF0ZSBUaW1lIFBpY2tlcgovL0RhdGUgY3JlYXRlZDogMTYtTm92LTIwMDMgMjM6MTkKLy9DcmVhdG9yOiBUZW5nWW9uZyBOZwovL1dlYnNpdGU6IGh0dHA6Ly93d3cucmFpbmZvcmVzdG5ldC5jb20KLy9Db3B5cmlnaHQgKGMpIDIwMDMgVGVuZ1lvbmcgTmcKLy9GaWxlTmFtZTogRGF0ZVRpbWVQaWNrZXJfY3NzLmpzCi8vVmVyc2lvbjogMi4yLjQKLy8gTm90ZTogUGVybWlzc2lvbiBnaXZlbiB0byB1c2UgYW5kIG1vZGlmeSB0aGlzIHNjcmlwdCBpbiBBTlkga2luZCBvZiBhcHBsaWNhdGlvbnMgaWYKLy8gICAgICAgaGVhZGVyIGxpbmVzIGFyZSBsZWZ0IHVuY2hhbmdlZC4KLy9QZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gcmVkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhpcyBqYXZhc2NyaXB0IHVuZGVyIGEgRnJlZUJTRCBMaWNlbnNlLgovL05ldyBDc3Mgc3R5bGUgdmVyc2lvbiBhZGRlZCBieSBZdmFuIExhdm9pZSAoUXXDqWJlYywgQ2FuYWRhKSAyOS1KYW4tMjAwOQovL0Zvcm1hdHRlZCBmb3IgSlNMaW50IGNvbXBhdGliaWxpdHkgYnkgTGFic21lZGlhLmNvbSAoMzAtRGVjLTIwMTApCgoKLy9HbG9iYWwgdmFyaWFibGVzCgp2YXIgd2luQ2FsOwp2YXIgZHRUb2RheTsKdmFyIENhbDsKdmFyIE1vbnRoTmFtZTsKdmFyIFdlZWtEYXlOYW1lMTsKdmFyIFdlZWtEYXlOYW1lMjsKdmFyIGV4RGF0ZVRpbWU7Ly9FeGlzdGluZyBEYXRlIGFuZCBUaW1lCnZhciBzZWxEYXRlOy8vc2VsZWN0ZWQgZGF0ZS4gdmVyc2lvbiAxLjcKdmFyIGNhbFNwYW5JRCA9ICJjYWxCb3JkZXIiOyAvLyBzcGFuIElECnZhciBkb21TdHlsZSA9IG51bGw7IC8vIHNwYW4gRE9NIG9iamVjdCB3aXRoIHN0eWxlCnZhciBjbkxlZnQgPSAiMCI7Ly9sZWZ0IGNvb3JkaW5hdGUgb2YgY2FsZW5kYXIgc3Bhbgp2YXIgY25Ub3AgPSAiMCI7Ly90b3AgY29vcmRpbmF0ZSBvZiBjYWxlbmRhciBzcGFuCnZhciB4cG9zID0gMDsgLy8gbW91c2UgeCBwb3NpdGlvbgp2YXIgeXBvcyA9IDA7IC8vIG1vdXNlIHkgcG9zaXRpb24KdmFyIGNhbEhlaWdodCA9IDA7IC8vIGNhbGVuZGFyIGhlaWdodAp2YXIgQ2FsV2lkdGggPSAyMDg7Ly8gY2FsZW5kYXIgd2lkdGgKdmFyIENlbGxXaWR0aCA9IDMwOy8vIHdpZHRoIG9mIGRheSBjZWxsLgp2YXIgVGltZU1vZGUgPSAyNDsvLyBUaW1lTW9kZSB2YWx1ZS4gMTIgb3IgMjQKdmFyIFN0YXJ0WWVhciA9IDE5NDA7IC8vRmlyc3QgWWVhciBpbiBkcm9wIGRvd24geWVhciBzZWxlY3Rpb24KdmFyIEVuZFllYXIgPSA1OyAvLyBUaGUgbGFzdCB5ZWFyIG9mIHBpY2thYmxlIGRhdGUuIGlmIGN1cnJlbnQgeWVhciBpcyAyMDExLCB0aGUgbGFzdCB5ZWFyIHRoYXQgc3RpbGwgcGlja2VyIHdpbGwgYmUgMjAxNiAoMjAxMSs1KQp2YXIgQ2FsUG9zT2Zmc2V0WCA9IC0xOyAvL1ggcG9zaXRpb24gb2Zmc2V0IHJlbGF0aXZlIHRvIGNhbGVuZGFyIGljb24sIGNhbiBiZSBuZWdhdGl2ZSB2YWx1ZQp2YXIgQ2FsUG9zT2Zmc2V0WSA9IDA7IC8vWSBwb3NpdGlvbiBvZmZzZXQgcmVsYXRpdmUgdG8gY2FsZW5kYXIgaWNvbiwgY2FuIGJlIG5lZ2F0aXZlIHZhbHVlCgovL0NvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIHN0YXJ0CnZhciBTcGFuQm9yZGVyQ29sb3IgPSAiIzAwMDAwMCI7Ly9zcGFuIGJvcmRlciBjb2xvcgp2YXIgU3BhbkJnQ29sb3IgPSAiI0ZGRkZGRiI7IC8vc3BhbiBiYWNrZ3JvdW5kIGNvbG9yCnZhciBNb250aFllYXJDb2xvciA9ICIjY2MwMDMzIjsgLy9Gb250IENvbG9yIG9mIE1vbnRoIGFuZCBZZWFyIGluIENhbGVuZGFyIGhlYWRlci4KdmFyIFdlZWtIZWFkQ29sb3IgPSAiIzE4ODYxQiI7IC8vdmFyIFdlZWtIZWFkQ29sb3I9IiMxODg2MUIiOy8vQmFja2dyb3VuZCBDb2xvciBpbiBXZWVrIGhlYWRlci4KdmFyIFN1bmRheUNvbG9yID0gIiNDMEY2NEYiOyAvL3ZhciBTdW5kYXlDb2xvcj0iI0MwRjY0RiI7Ly9CYWNrZ3JvdW5kIGNvbG9yIG9mIFN1bmRheS4KdmFyIFNhdHVyZGF5Q29sb3IgPSAiI0MwRjY0RiI7IC8vQmFja2dyb3VuZCBjb2xvciBvZiBTYXR1cmRheS4KdmFyIFdlZWtEYXlDb2xvciA9ICIjRkZFREE2IjsgLy9CYWNrZ3JvdW5kIGNvbG9yIG9mIHdlZWtkYXlzLgp2YXIgRm9udENvbG9yID0gImJsdWUiOyAvL2NvbG9yIG9mIGZvbnQgaW4gQ2FsZW5kYXIgZGF5IGNlbGwuCnZhciBUb2RheUNvbG9yID0gIiNmZmJkMzUiOyAvL3ZhciBUb2RheUNvbG9yPSIjRkZGRjMzIjsvL0JhY2tncm91bmQgY29sb3Igb2YgdG9kYXkuCnZhciBTZWxEYXRlQ29sb3IgPSAiIzhERDUzQyI7IC8vdmFyIFNlbERhdGVDb2xvciA9ICIjOERENTNDIjsvL0JhY2tncm9uZCBjb2xvciBvZiBzZWxlY3RlZCBkYXRlIGluIHRleHRib3guCnZhciBZclNlbENvbG9yID0gIiNjYzAwMzMiOyAvL2NvbG9yIG9mIGZvbnQgb2YgWWVhciBzZWxlY3Rvci4KdmFyIE10aFNlbENvbG9yID0gIiNjYzAwMzMiOyAvL2NvbG9yIG9mIGZvbnQgb2YgTW9udGggc2VsZWN0b3IgaWYgIk1vbnRoU2VsZWN0b3IiIGlzICJhcnJvdyIuCnZhciBIb3ZlckNvbG9yID0gIiNFMEZGMzgiOyAvL2NvbG9yIHdoZW4gbW91c2UgbW92ZSBvdmVyLgp2YXIgRGlzYWJsZUNvbG9yID0gIiM5OTk5NjYiOyAvL2NvbG9yIG9mIGRpc2FibGVkIGNlbGwuCnZhciBDYWxCZ0NvbG9yID0gIiNmZmZmZmYiOyAvL0JhY2tncm91bmQgY29sb3Igb2YgQ2FsZW5kYXIgd2luZG93LgoKdmFyIFdlZWtDaGFyID0gMjsvL251bWJlciBvZiBjaGFyYWN0ZXIgZm9yIHdlZWsgZGF5LiBpZiAyIHRoZW4gTW8sVHUsV2UuIGlmIDMgdGhlbiBNb24sVHVlLFdlZC4KdmFyIERhdGVTZXBhcmF0b3IgPSAiLSI7Ly9EYXRlIFNlcGFyYXRvciwgeW91IGNhbiBjaGFuZ2UgaXQgdG8gIi0iIGlmIHlvdSB3YW50Lgp2YXIgU2hvd0xvbmdNb250aCA9IHRydWU7Ly9TaG93IGxvbmcgbW9udGggbmFtZSBpbiBDYWxlbmRhciBoZWFkZXIuIGV4YW1wbGU6ICJKYW51YXJ5Ii4KdmFyIFNob3dNb250aFllYXIgPSB0cnVlOy8vU2hvdyBNb250aCBhbmQgWWVhciBpbiBDYWxlbmRhciBoZWFkZXIuCnZhciBUaGVtZUJnID0gIiI7Ly9CYWNrZ3JvdW5kIGltYWdlIG9mIENhbGVuZGFyIHdpbmRvdy4KdmFyIFByZWNlZGVaZXJvID0gdHJ1ZTsvL1ByZWNlZGluZyB6ZXJvIFt0cnVlfGZhbHNlXQp2YXIgTW9uZGF5Rmlyc3REYXkgPSB0cnVlOy8vdHJ1ZTpVc2UgTW9uZGF5IGFzIGZpcnN0IGRheTsgZmFsc2U6U3VuZGF5IGFzIGZpcnN0IGRheS4gW3RydWV8ZmFsc2VdICAvL2FkZGVkIGluIHZlcnNpb24gMS43CnZhciBVc2VJbWFnZUZpbGVzID0gdHJ1ZTsvL1VzZSBpbWFnZSBmaWxlcyB3aXRoICJhcnJvd3MiIGFuZCAiY2xvc2UiIGJ1dHRvbg0KdmFyIGltYWdlRmlsZXNQYXRoID0gImltYWdlczIvIjsKLy9Db25maWd1cmFibGUgcGFyYW1ldGVycyBlbmQKCi8vdXNlIHRoZSBNb250aCBhbmQgV2Vla2RheSBpbiB5b3VyIHByZWZlcnJlZCBsYW5ndWFnZS4KdmFyIE1vbnRoTmFtZSA9IFsiSmFudWFyeSIsICJGZWJydWFyeSIsICJNYXJjaCIsICJBcHJpbCIsICJNYXkiLCAiSnVuZSIsICJKdWx5IiwgIkF1Z3VzdCIsICJTZXB0ZW1iZXIiLCAiT2N0b2JlciIsICJOb3ZlbWJlciIsICJEZWNlbWJlciJdOwp2YXIgV2Vla0RheU5hbWUxID0gWyJTdW5kYXkiLCAiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwgIkZyaWRheSIsICJTYXR1cmRheSJdOwp2YXIgV2Vla0RheU5hbWUyID0gWyJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5IiwgIlN1bmRheSJdOwoKCi8vZW5kIENvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzCgovL2VuZCBHbG9iYWwgdmFyaWFibGUKCgovLyBDYWxlbmRhciBwcm90b3R5cGUKZnVuY3Rpb24gQ2FsZW5kYXIocERhdGUsIHBDdHJsKQp7CgkvL1Byb3BlcnRpZXMKCXRoaXMuRGF0ZSA9IHBEYXRlLmdldERhdGUoKTsvL3NlbGVjdGVkIGRhdGUKCXRoaXMuTW9udGggPSBwRGF0ZS5nZXRNb250aCgpOy8vc2VsZWN0ZWQgbW9udGggbnVtYmVyCgl0aGlzLlllYXIgPSBwRGF0ZS5nZXRGdWxsWWVhcigpOy8vc2VsZWN0ZWQgeWVhciBpbiA0IGRpZ2l0cwoJdGhpcy5Ib3VycyA9IHBEYXRlLmdldEhvdXJzKCk7CgoJaWYgKHBEYXRlLmdldE1pbnV0ZXMoKSA8IDEwKQoJewoJCXRoaXMuTWludXRlcyA9ICIwIiArIHBEYXRlLmdldE1pbnV0ZXMoKTsKCX0KCWVsc2UKCXsKCQl0aGlzLk1pbnV0ZXMgPSBwRGF0ZS5nZXRNaW51dGVzKCk7Cgl9CgoJaWYgKHBEYXRlLmdldFNlY29uZHMoKSA8IDEwKQoJewoJCXRoaXMuU2Vjb25kcyA9ICIwIiArIHBEYXRlLmdldFNlY29uZHMoKTsKCX0KCWVsc2UKCXsKCQl0aGlzLlNlY29uZHMgPSBwRGF0ZS5nZXRTZWNvbmRzKCk7Cgl9Cgl0aGlzLk15V2luZG93ID0gd2luQ2FsOwoJdGhpcy5DdHJsID0gcEN0cmw7Cgl0aGlzLkZvcm1hdCA9ICJkZE1NeXl5eSI7Cgl0aGlzLlNlcGFyYXRvciA9IERhdGVTZXBhcmF0b3I7Cgl0aGlzLlNob3dUaW1lID0gZmFsc2U7Cgl0aGlzLlNjcm9sbGVyID0gIkRST1BET1dOIjsKCWlmIChwRGF0ZS5nZXRIb3VycygpIDwgMTIpCgl7CgkJdGhpcy5BTW9yUE0gPSAiQU0iOwoJfQoJZWxzZQoJewoJCXRoaXMuQU1vclBNID0gIlBNIjsKCX0NCgl0aGlzLlNob3dTZWNvbmRzID0gZmFsc2U7DQoJdGhpcy5FbmFibGVEYXRlTW9kZSA9ICIiDQp9CgpDYWxlbmRhci5wcm90b3R5cGUuR2V0TW9udGhJbmRleCA9IGZ1bmN0aW9uIChzaG9ydE1vbnRoTmFtZSkKewoJZm9yICh2YXIgaSA9IDA7IGkgPCAxMjsgaSArPSAxKQoJewoJCWlmIChNb250aE5hbWVbaV0uc3Vic3RyaW5nKDAsIDMpLnRvVXBwZXJDYXNlKCkgPT09IHNob3J0TW9udGhOYW1lLnRvVXBwZXJDYXNlKCkpCgkJewoJCQlyZXR1cm4gaTsKCQl9Cgl9Cn07CgpDYWxlbmRhci5wcm90b3R5cGUuSW5jWWVhciA9IGZ1bmN0aW9uICgpIHsKICAgIGlmIChDYWwuWWVhciA8PSBkdFRvZGF5LmdldEZ1bGxZZWFyKCkrRW5kWWVhcikKCSAgICBDYWwuWWVhciArPSAxOwp9OwoKQ2FsZW5kYXIucHJvdG90eXBlLkRlY1llYXIgPSBmdW5jdGlvbiAoKSB7CiAgICBpZiAoQ2FsLlllYXIgPiBTdGFydFllYXIpCgkgICAgQ2FsLlllYXIgLT0gMTsKfTsKCkNhbGVuZGFyLnByb3RvdHlwZS5JbmNNb250aCA9IGZ1bmN0aW9uKCkgewogICAgaWYgKENhbC5ZZWFyIDw9IGR0VG9kYXkuZ2V0RnVsbFllYXIoKSArIEVuZFllYXIpIHsKICAgICAgICBDYWwuTW9udGggKz0gMTsKICAgICAgICBpZiAoQ2FsLk1vbnRoID49IDEyKSB7CiAgICAgICAgICAgIENhbC5Nb250aCA9IDA7CiAgICAgICAgICAgIENhbC5JbmNZZWFyKCk7CiAgICAgICAgfQogICAgfQp9OwoKQ2FsZW5kYXIucHJvdG90eXBlLkRlY01vbnRoID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoQ2FsLlllYXIgPj0gU3RhcnRZZWFyKSB7CiAgICAgICAgQ2FsLk1vbnRoIC09IDE7CiAgICAgICAgaWYgKENhbC5Nb250aCA8IDApIHsKICAgICAgICAgICAgQ2FsLk1vbnRoID0gMTE7CiAgICAgICAgICAgIENhbC5EZWNZZWFyKCk7CiAgICAgICAgfQogICAgfQp9OwoKQ2FsZW5kYXIucHJvdG90eXBlLlN3aXRjaE10aCA9IGZ1bmN0aW9uIChpbnRNdGgpCnsKCUNhbC5Nb250aCA9IHBhcnNlSW50KGludE10aCwgMTApOwp9OwoKQ2FsZW5kYXIucHJvdG90eXBlLlN3aXRjaFllYXIgPSBmdW5jdGlvbiAoaW50WWVhcikKewoJQ2FsLlllYXIgPSBwYXJzZUludChpbnRZZWFyLCAxMCk7Cn07DQoNCkNhbGVuZGFyLnByb3RvdHlwZS5TZXRIb3VyID0gZnVuY3Rpb24oaW50SG91cikgew0KICAgIHZhciBNYXhIb3VyLA0KCU1pbkhvdXIsDQoJSG91ckV4cCA9IG5ldyBSZWdFeHAoIl5cXGRcXGQiKSwNCglTaW5nbGVEaWdpdCA9IG5ldyBSZWdFeHAoIl5cXGR7MX0kIik7DQoNCiAgICBpZiAoVGltZU1vZGUgPT09IDI0KSB7DQogICAgICAgIE1heEhvdXIgPSAyMzsNCiAgICAgICAgTWluSG91ciA9IDA7DQogICAgfQ0KICAgIGVsc2UgaWYgKFRpbWVNb2RlID09PSAxMikgew0KICAgICAgICBNYXhIb3VyID0gMTI7DQogICAgICAgIE1pbkhvdXIgPSAxOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgYWxlcnQoIlRpbWVNb2RlIGNhbiBvbmx5IGJlIDEyIG9yIDI0Iik7DQogICAgfQ0KDQogICAgaWYgKChIb3VyRXhwLnRlc3QoaW50SG91cikgfHwgU2luZ2xlRGlnaXQudGVzdChpbnRIb3VyKSkgJiYgKHBhcnNlSW50KGludEhvdXIsIDEwKSA+IE1heEhvdXIpKSB7DQogICAgICAgIGludEhvdXIgPSBNaW5Ib3VyOw0KICAgIH0NCg0KICAgIGVsc2UgaWYgKChIb3VyRXhwLnRlc3QoaW50SG91cikgfHwgU2luZ2xlRGlnaXQudGVzdChpbnRIb3VyKSkgJiYgKHBhcnNlSW50KGludEhvdXIsIDEwKSA8IE1pbkhvdXIpKSB7DQogICAgICAgIGludEhvdXIgPSBNYXhIb3VyOw0KICAgIH0NCg0KICAgIGludEhvdXIgPSBwYXJzZUludChpbnRIb3VyLCAxMCk7DQogICAgaWYgKFNpbmdsZURpZ2l0LnRlc3QoaW50SG91cikpIHsNCiAgICAgICAgaW50SG91ciA9ICIwIiArIGludEhvdXI7DQogICAgfQ0KDQogICAgaWYgKEhvdXJFeHAudGVzdChpbnRIb3VyKSAmJiAocGFyc2VJbnQoaW50SG91ciwgMTApIDw9IE1heEhvdXIpICYmIChwYXJzZUludChpbnRIb3VyLCAxMCkgPj0gTWluSG91cikpIHsNCiAgICAgICAgaWYgKChUaW1lTW9kZSA9PT0gMTIpICYmIChDYWwuQU1vclBNID09PSAiUE0iKSkgew0KICAgICAgICAgICAgaWYgKHBhcnNlSW50KGludEhvdXIsIDEwKSA9PT0gMTIpIHsNCiAgICAgICAgICAgICAgICBDYWwuSG91cnMgPSAxMjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIENhbC5Ib3VycyA9IHBhcnNlSW50KGludEhvdXIsIDEwKSArIDEyOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgZWxzZSBpZiAoKFRpbWVNb2RlID09PSAxMikgJiYgKENhbC5BTW9yUE0gPT09ICJBTSIpKSB7DQogICAgICAgICAgICBpZiAoaW50SG91ciA9PT0gMTIpIHsNCiAgICAgICAgICAgICAgICBpbnRIb3VyIC09IDEyOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBDYWwuSG91cnMgPSBwYXJzZUludChpbnRIb3VyLCAxMCk7DQogICAgICAgIH0NCg0KICAgICAgICBlbHNlIGlmIChUaW1lTW9kZSA9PT0gMjQpIHsNCiAgICAgICAgICAgIENhbC5Ib3VycyA9IHBhcnNlSW50KGludEhvdXIsIDEwKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KfTsKCkNhbGVuZGFyLnByb3RvdHlwZS5TZXRNaW51dGUgPSBmdW5jdGlvbiAoaW50TWluKQp7Cgl2YXIgTWF4TWluID0gNTksCglNaW5NaW4gPSAwLAoKCVNpbmdsZURpZ2l0ID0gbmV3IFJlZ0V4cCgiXFxkIiksCglTaW5nbGVEaWdpdDIgPSBuZXcgUmVnRXhwKCJeXFxkezF9JCIpLAoJTWluRXhwID0gbmV3IFJlZ0V4cCgiXlxcZHsyfSQiKSwKCglzdHJNaW4gPSAwOwoKCWlmICgoTWluRXhwLnRlc3QoaW50TWluKSB8fCBTaW5nbGVEaWdpdC50ZXN0KGludE1pbikpICYmIChwYXJzZUludChpbnRNaW4sIDEwKSA+IE1heE1pbikpCgl7CgkJaW50TWluID0gTWluTWluOwoJfQoKCWVsc2UgaWYgKChNaW5FeHAudGVzdChpbnRNaW4pIHx8IFNpbmdsZURpZ2l0LnRlc3QoaW50TWluKSkgJiYgKHBhcnNlSW50KGludE1pbiwgMTApIDwgTWluTWluKSkKCXsKCQlpbnRNaW4gPSBNYXhNaW47Cgl9CgoJc3RyTWluID0gaW50TWluICsgIiI7CglpZiAoU2luZ2xlRGlnaXQyLnRlc3QoaW50TWluKSkKCXsKCQlzdHJNaW4gPSAiMCIgKyBzdHJNaW47Cgl9CgoJaWYgKChNaW5FeHAudGVzdChpbnRNaW4pIHx8IFNpbmdsZURpZ2l0LnRlc3QoaW50TWluKSkgJiYgKHBhcnNlSW50KGludE1pbiwgMTApIDw9IDU5KSAmJiAocGFyc2VJbnQoaW50TWluLCAxMCkgPj0gMCkpCgl7CgkJQ2FsLk1pbnV0ZXMgPSBzdHJNaW47Cgl9Cn07CgpDYWxlbmRhci5wcm90b3R5cGUuU2V0U2Vjb25kID0gZnVuY3Rpb24gKGludFNlYykKewoJdmFyIE1heFNlYyA9IDU5LAoJTWluU2VjID0gMCwKCglTaW5nbGVEaWdpdCA9IG5ldyBSZWdFeHAoIlxcZCIpLAoJU2luZ2xlRGlnaXQyID0gbmV3IFJlZ0V4cCgiXlxcZHsxfSQiKSwKCVNlY0V4cCA9IG5ldyBSZWdFeHAoIl5cXGR7Mn0kIiksCgoJc3RyU2VjID0gMDsKCglpZiAoKFNlY0V4cC50ZXN0KGludFNlYykgfHwgU2luZ2xlRGlnaXQudGVzdChpbnRTZWMpKSAmJiAocGFyc2VJbnQoaW50U2VjLCAxMCkgPiBNYXhTZWMpKQoJewoJCWludFNlYyA9IE1pblNlYzsKCX0KCgllbHNlIGlmICgoU2VjRXhwLnRlc3QoaW50U2VjKSB8fCBTaW5nbGVEaWdpdC50ZXN0KGludFNlYykpICYmIChwYXJzZUludChpbnRTZWMsIDEwKSA8IE1pblNlYykpCgl7CgkJaW50U2VjID0gTWF4U2VjOwoJfQoKCXN0clNlYyA9IGludFNlYyArICIiOwoJaWYgKFNpbmdsZURpZ2l0Mi50ZXN0KGludFNlYykpCgl7CgkJc3RyU2VjID0gIjAiICsgc3RyU2VjOwoJfQoKCWlmICgoU2VjRXhwLnRlc3QoaW50U2VjKSB8fCBTaW5nbGVEaWdpdC50ZXN0KGludFNlYykpICYmIChwYXJzZUludChpbnRTZWMsIDEwKSA8PSA1OSkgJiYgKHBhcnNlSW50KGludFNlYywgMTApID49IDApKQoJewoJCUNhbC5TZWNvbmRzID0gc3RyU2VjOwoJfQoKfTsKCkNhbGVuZGFyLnByb3RvdHlwZS5TZXRBbVBtID0gZnVuY3Rpb24gKHB2YWx1ZSkKewoJdGhpcy5BTW9yUE0gPSBwdmFsdWU7CglpZiAocHZhbHVlID09PSAiUE0iKQoJewoJCXRoaXMuSG91cnMgPSBwYXJzZUludCh0aGlzLkhvdXJzLCAxMCkgKyAxMjsKCQlpZiAodGhpcy5Ib3VycyA9PT0gMjQpCgkJewoJCQl0aGlzLkhvdXJzID0gMTI7CgkJfQoJfQoKCWVsc2UgaWYgKHB2YWx1ZSA9PT0gIkFNIikKCXsKCQl0aGlzLkhvdXJzIC09IDEyOwoJfQp9Ow0KDQpDYWxlbmRhci5wcm90b3R5cGUuZ2V0U2hvd0hvdXIgPSBmdW5jdGlvbigpIHsNCiAgICB2YXIgZmluYWxIb3VyOw0KDQogICAgaWYgKFRpbWVNb2RlID09PSAxMikgew0KICAgICAgICBpZiAocGFyc2VJbnQodGhpcy5Ib3VycywgMTApID09PSAwKSB7DQogICAgICAgICAgICB0aGlzLkFNb3JQTSA9ICJBTSI7DQogICAgICAgICAgICBmaW5hbEhvdXIgPSBwYXJzZUludCh0aGlzLkhvdXJzLCAxMCkgKyAxMjsNCiAgICAgICAgfQ0KDQogICAgICAgIGVsc2UgaWYgKHBhcnNlSW50KHRoaXMuSG91cnMsIDEwKSA9PT0gMTIpIHsNCiAgICAgICAgICAgIHRoaXMuQU1vclBNID0gIlBNIjsNCiAgICAgICAgICAgIGZpbmFsSG91ciA9IDEyOw0KICAgICAgICB9DQoNCiAgICAgICAgZWxzZSBpZiAodGhpcy5Ib3VycyA+IDEyKSB7DQogICAgICAgICAgICB0aGlzLkFNb3JQTSA9ICJQTSI7DQogICAgICAgICAgICBpZiAoKHRoaXMuSG91cnMgLSAxMikgPCAxMCkgew0KICAgICAgICAgICAgICAgIGZpbmFsSG91ciA9ICIwIiArICgocGFyc2VJbnQodGhpcy5Ib3VycywgMTApKSAtIDEyKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIGZpbmFsSG91ciA9IHBhcnNlSW50KHRoaXMuSG91cnMsIDEwKSAtIDEyOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5BTW9yUE0gPSAiQU0iOw0KICAgICAgICAgICAgaWYgKHRoaXMuSG91cnMgPCAxMCkgew0KICAgICAgICAgICAgICAgIGZpbmFsSG91ciA9ICIwIiArIHBhcnNlSW50KHRoaXMuSG91cnMsIDEwKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIGZpbmFsSG91ciA9IHRoaXMuSG91cnM7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBlbHNlIGlmIChUaW1lTW9kZSA9PT0gMjQpIHsNCiAgICAgICAgaWYgKHRoaXMuSG91cnMgPCAxMCkgew0KICAgICAgICAgICAgZmluYWxIb3VyID0gIjAiICsgcGFyc2VJbnQodGhpcy5Ib3VycywgMTApOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgZmluYWxIb3VyID0gdGhpcy5Ib3VyczsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiBmaW5hbEhvdXI7DQp9OwoKQ2FsZW5kYXIucHJvdG90eXBlLmdldFNob3dBTW9yUE0gPSBmdW5jdGlvbiAoKQp7CglyZXR1cm4gdGhpcy5BTW9yUE07Cn07CgpDYWxlbmRhci5wcm90b3R5cGUuR2V0TW9udGhOYW1lID0gZnVuY3Rpb24gKElzTG9uZykKewoJdmFyIE1vbnRoID0gTW9udGhOYW1lW3RoaXMuTW9udGhdOwoJaWYgKElzTG9uZykKCXsKCQlyZXR1cm4gTW9udGg7Cgl9CgllbHNlCgl7CgkJcmV0dXJuIE1vbnRoLnN1YnN0cigwLCAzKTsKCX0KfTsKCkNhbGVuZGFyLnByb3RvdHlwZS5HZXRNb25EYXlzID0gZnVuY3Rpb24oKSB7IC8vR2V0IG51bWJlciBvZiBkYXlzIGluIGEgbW9udGgKCiAgICB2YXIgRGF5c0luTW9udGggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07CiAgICBpZiAoQ2FsLklzTGVhcFllYXIoKSkgewogICAgICAgIERheXNJbk1vbnRoWzFdID0gMjk7CiAgICB9CgogICAgcmV0dXJuIERheXNJbk1vbnRoW3RoaXMuTW9udGhdOwp9OwoKQ2FsZW5kYXIucHJvdG90eXBlLklzTGVhcFllYXIgPSBmdW5jdGlvbiAoKQp7CglpZiAoKHRoaXMuWWVhciAlIDQpID09PSAwKQoJewoJCWlmICgodGhpcy5ZZWFyICUgMTAwID09PSAwKSAmJiAodGhpcy5ZZWFyICUgNDAwKSAhPT0gMCkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJfQoJZWxzZQoJewoJCXJldHVybiBmYWxzZTsKCX0KfTsKCkNhbGVuZGFyLnByb3RvdHlwZS5Gb3JtYXREYXRlID0gZnVuY3Rpb24gKHBEYXRlKQp7Cgl2YXIgTW9udGhEaWdpdCA9IHRoaXMuTW9udGggKyAxOwoJaWYgKFByZWNlZGVaZXJvID09PSB0cnVlKQoJewoJCWlmICgocERhdGUgPCAxMCkgJiYgU3RyaW5nKHBEYXRlKS5sZW5ndGg9PT0xKSAvL2xlbmd0aCBjaGVja2luZyBhZGRlZCBpbiB2ZXJzaW9uIDIuMgoJCXsJCQoJCQlwRGF0ZSA9ICIwIiArIHBEYXRlOwoJCX0KCQlpZiAoTW9udGhEaWdpdCA8IDEwKQoJCXsKCQkJTW9udGhEaWdpdCA9ICIwIiArIE1vbnRoRGlnaXQ7CgkJfQoJfQoKCXN3aXRjaCAodGhpcy5Gb3JtYXQudG9VcHBlckNhc2UoKSkKCXsKCQljYXNlICJERE1NWVlZWSI6CgkJcmV0dXJuIChwRGF0ZSArIERhdGVTZXBhcmF0b3IgKyBNb250aERpZ2l0ICsgRGF0ZVNlcGFyYXRvciArIHRoaXMuWWVhcik7CgkJY2FzZSAiRERNTU1ZWVlZIjoKCQlyZXR1cm4gKHBEYXRlICsgRGF0ZVNlcGFyYXRvciArIHRoaXMuR2V0TW9udGhOYW1lKGZhbHNlKSArIERhdGVTZXBhcmF0b3IgKyB0aGlzLlllYXIpOwoJCWNhc2UgIk1NRERZWVlZIjoKCQlyZXR1cm4gKE1vbnRoRGlnaXQgKyBEYXRlU2VwYXJhdG9yICsgcERhdGUgKyBEYXRlU2VwYXJhdG9yICsgdGhpcy5ZZWFyKTsKCQljYXNlICJNTU1ERFlZWVkiOgoJCXJldHVybiAodGhpcy5HZXRNb250aE5hbWUoZmFsc2UpICsgRGF0ZVNlcGFyYXRvciArIHBEYXRlICsgRGF0ZVNlcGFyYXRvciArIHRoaXMuWWVhcik7CgkJY2FzZSAiWVlZWU1NREQiOgoJCXJldHVybiAodGhpcy5ZZWFyICsgRGF0ZVNlcGFyYXRvciArIE1vbnRoRGlnaXQgKyBEYXRlU2VwYXJhdG9yICsgcERhdGUpOwoJCWNhc2UgIllZTU1ERCI6CgkJcmV0dXJuIChTdHJpbmcodGhpcy5ZZWFyKS5zdWJzdHJpbmcoMiwgNCkgKyBEYXRlU2VwYXJhdG9yICsgTW9udGhEaWdpdCArIERhdGVTZXBhcmF0b3IgKyBwRGF0ZSk7CgkJY2FzZSAiWVlNTU1ERCI6CgkJcmV0dXJuIChTdHJpbmcodGhpcy5ZZWFyKS5zdWJzdHJpbmcoMiwgNCkgKyBEYXRlU2VwYXJhdG9yICsgdGhpcy5HZXRNb250aE5hbWUoZmFsc2UpICsgRGF0ZVNlcGFyYXRvciArIHBEYXRlKTsKCQljYXNlICJZWVlZTU1NREQiOgoJCXJldHVybiAodGhpcy5ZZWFyICsgRGF0ZVNlcGFyYXRvciArIHRoaXMuR2V0TW9udGhOYW1lKGZhbHNlKSArIERhdGVTZXBhcmF0b3IgKyBwRGF0ZSk7CgkJZGVmYXVsdDoKCQlyZXR1cm4gKHBEYXRlICsgRGF0ZVNlcGFyYXRvciArICh0aGlzLk1vbnRoICsgMSkgKyBEYXRlU2VwYXJhdG9yICsgdGhpcy5ZZWFyKTsKCX0KfTsKCi8vIGVuZCBDYWxlbmRhciBwcm90b3R5cGUKCmZ1bmN0aW9uIEdlbkNlbGwocFZhbHVlLCBwSGlnaExpZ2h0LCBwQ29sb3IsIHBDbGlja2FibGUpCnsgLy9HZW5lcmF0ZSB0YWJsZSBjZWxsIHdpdGggdmFsdWUKCXZhciBQVmFsdWUsCglQQ2VsbFN0ciwKCVBDbGlja2FibGUsCgl2VGltZVN0cjsKCglpZiAoIXBWYWx1ZSkKCXsKCQlQVmFsdWUgPSAiIjsKCX0KCWVsc2UKCXsKCQlQVmFsdWUgPSBwVmFsdWU7Cgl9CgoJaWYgKHBDb2xvciA9PT0gdW5kZWZpbmVkKQoJICAgIHBDb2xvciA9IENhbEJnQ29sb3I7CgkKCWlmIChwQ2xpY2thYmxlICE9PSB1bmRlZmluZWQpewoJCVBDbGlja2FibGUgPSBwQ2xpY2thYmxlOwoJfQoJZWxzZXsKCQlQQ2xpY2thYmxlID0gdHJ1ZTsKCX0KCglpZiAoQ2FsLlNob3dUaW1lKQoJewoJCXZUaW1lU3RyID0gJyAnICsgQ2FsLkhvdXJzICsgJzonICsgQ2FsLk1pbnV0ZXM7CgkJaWYgKENhbC5TaG93U2Vjb25kcykKCQl7CgkJCXZUaW1lU3RyICs9ICc6JyArIENhbC5TZWNvbmRzOwoJCX0KCQlpZiAoVGltZU1vZGUgPT09IDEyKQoJCXsKCQkJdlRpbWVTdHIgKz0gJyAnICsgQ2FsLkFNb3JQTTsKCQl9Cgl9CgoJZWxzZQoJewoJCXZUaW1lU3RyID0gIiI7Cgl9CgoJaWYgKFBWYWx1ZSAhPT0gIiIpCgl7CgkJaWYgKFBDbGlja2FibGUgPT09IHRydWUpIHsKCQkgICAgaWYgKENhbC5TaG93VGltZSA9PT0gdHJ1ZSkKCQkgICAgeyBQQ2VsbFN0ciA9ICI8dGQgaWQ9J2MiICsgUFZhbHVlICsgIicgY2xhc3M9J2NhbFREJyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjoiK3BDb2xvcisiJyBvbm1vdXNlZG93bj0nc2VsZWN0RGF0ZSh0aGlzLCIgKyBQVmFsdWUgKyAiKTsnPiIgKyBQVmFsdWUgKyAiPC90ZD4iOyB9CgkJICAgIGVsc2UgeyBQQ2VsbFN0ciA9ICI8dGQgY2xhc3M9J2NhbFREJyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjoiICsgcENvbG9yICsgIicgb25tb3VzZW92ZXI9J2NoYW5nZUJvcmRlcih0aGlzLCAwKTsnIG9ubW91c2VvdXQ9XCJjaGFuZ2VCb3JkZXIodGhpcywgMSwgJyIgKyBwQ29sb3IgKyAiJyk7XCIgb25DbGljaz1cImphdmFzY3JpcHQ6Y2FsbGJhY2soJyIgKyBDYWwuQ3RybCArICInLCciICsgQ2FsLkZvcm1hdERhdGUoUFZhbHVlKSArICInKTtcIj4iICsgUFZhbHVlICsgIjwvdGQ+IjsgfQoJCX0KCQllbHNlCgkJeyBQQ2VsbFN0ciA9ICI8dGQgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IitwQ29sb3IrIicgY2xhc3M9J2NhbFREJz4iK1BWYWx1ZSsiPC90ZD4iOyB9Cgl9CgllbHNlCgl7IFBDZWxsU3RyID0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjoiK3BDb2xvcisiJyBjbGFzcz0nY2FsVEQnPiZuYnNwOzwvdGQ+IjsgfQoKCXJldHVybiBQQ2VsbFN0cjsKfQoKZnVuY3Rpb24gUmVuZGVyQ3NzQ2FsKGJOZXdDYWwpCnsKCWlmICh0eXBlb2YgYk5ld0NhbCA9PT0gInVuZGVmaW5lZCIgfHwgYk5ld0NhbCAhPT0gdHJ1ZSkKCXsKCQliTmV3Q2FsID0gZmFsc2U7Cgl9Cgl2YXIgdkNhbEhlYWRlciwKCXZDYWxEYXRhLAoJdkNhbFRpbWUgPSAiIiwKCXZDYWxDbG9zaW5nID0gIiIsCgl3aW5DYWxEYXRhID0gIiIsCglDYWxEYXRlLAoKCWksCglqLAoKCVNlbGVjdFN0ciwKCXZEYXlDb3VudCA9IDAsCgl2Rmlyc3REYXksCgoJV2Vla0RheU5hbWUgPSBbXSwvL0FkZGVkIHZlcnNpb24gMS43CglzdHJDZWxsLAoKCXNob3dIb3VyLAoJU2hvd0Fycm93cyA9IGZhbHNlLAoJSG91ckNlbGxXaWR0aCA9ICIzNXB4IiwgLy9jZWxsIHdpZHRoIHdpdGggc2Vjb25kcy4KCglTZWxlY3RBbSwKCVNlbGVjdFBtLAoKCWZ1bmNDYWxiYWNrLAoKCWhlYWRJRCwKCWUsCgljc3NTdHIsCglzdHlsZSwKCWNzc1RleHQsCglzcGFuOwoKCWNhbEhlaWdodCA9IDA7IC8vIHJlc2V0IHRoZSB3aW5kb3cgaGVpZ2h0IG9uIHJlZnJlc2gKCgkvLyBTZXQgdGhlIGRlZmF1bHQgY3Vyc29yIGZvciB0aGUgY2FsZW5kYXIKCgl3aW5DYWxEYXRhID0gIjxzcGFuIHN0eWxlPSdjdXJzb3I6YXV0bzsnPiI7Cgl2Q2FsSGVhZGVyID0gIjx0YWJsZSBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiK0NhbEJnQ29sb3IrIjt3aWR0aDoyMDBweDtwYWRkaW5nOjA7bWFyZ2luOjVweCBhdXRvIDVweCBhdXRvJz48dGJvZHk+IjsKCgkvL1RhYmxlIGZvciBNb250aCAmIFllYXIgU2VsZWN0b3IKCgl2Q2FsSGVhZGVyICs9ICI8dHI+PHRkIGNvbHNwYW49JzcnPjx0YWJsZSBib3JkZXI9JzAnIHdpZHRoPScyMDBweCcgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz48dHI+IjsKCS8vKioqKioqKioqKioqKioqKioqTW9udGggYW5kIFllYXIgc2VsZWN0b3IgaW4gZHJvcGRvd24gbGlzdCoqKioqKioqKioqKioqKioqKioqKioqKgoKCWlmIChDYWwuU2Nyb2xsZXIgPT09ICJEUk9QRE9XTiIpCgl7CgkgICAgdkNhbEhlYWRlciArPSAiPHRkIGFsaWduPSdjZW50ZXInPjxzZWxlY3QgbmFtZT0nTW9udGhTZWxlY3Rvcicgb25DaGFuZ2U9J2phdmFzY3JpcHQ6Q2FsLlN3aXRjaE10aCh0aGlzLnNlbGVjdGVkSW5kZXgpO1JlbmRlckNzc0NhbCgpOyc+IjsKCQlmb3IgKGkgPSAwOyBpIDwgMTI7IGkgKz0gMSkKCQl7CgkJCWlmIChpID09PSBDYWwuTW9udGgpCgkJCXsKCQkJCVNlbGVjdFN0ciA9ICJTZWxlY3RlZCI7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlTZWxlY3RTdHIgPSAiIjsKCQkJfQoJCQl2Q2FsSGVhZGVyICs9ICI8b3B0aW9uICIgKyBTZWxlY3RTdHIgKyAiIHZhbHVlPSIgKyBpICsgIj4iICsgTW9udGhOYW1lW2ldICsgIjwvb3B0aW9uPiI7CgkJfQoKCQl2Q2FsSGVhZGVyICs9ICI8L3NlbGVjdD48L3RkPiI7CgkJLy9ZZWFyIHNlbGVjdG9yCgoJCXZDYWxIZWFkZXIgKz0gIjx0ZCBhbGlnbj0nY2VudGVyJz48c2VsZWN0IG5hbWU9J1llYXJTZWxlY3Rvcicgc2l6ZT0nMScgb25DaGFuZ2U9J2phdmFzY3JpcHQ6Q2FsLlN3aXRjaFllYXIodGhpcy52YWx1ZSk7UmVuZGVyQ3NzQ2FsKCk7Jz4iOwoJCWZvciAoaSA9IFN0YXJ0WWVhcjsgaSA8PSAoZHRUb2RheS5nZXRGdWxsWWVhcigpICsgRW5kWWVhcik7IGkgKz0gMSkKCQl7CgkJCWlmIChpID09PSBDYWwuWWVhcikKCQkJewoJCQkJU2VsZWN0U3RyID0gJ3NlbGVjdGVkPSJzZWxlY3RlZCInOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJU2VsZWN0U3RyID0gJyc7CgkJCX0KCQkJdkNhbEhlYWRlciArPSAiPG9wdGlvbiAiICsgU2VsZWN0U3RyICsgIiB2YWx1ZT0iICsgaSArICI+IiArIGkgKyAiPC9vcHRpb24+XG4iOwoJCX0KCQl2Q2FsSGVhZGVyICs9ICI8L3NlbGVjdD48L3RkPlxuIjsKCQljYWxIZWlnaHQgKz0gMzA7Cgl9CgoJLy8qKioqKioqKioqKioqKioqKipFbmQgTW9udGggYW5kIFllYXIgc2VsZWN0b3IgaW4gZHJvcGRvd24gbGlzdCoqKioqKioqKioqKioqKioqKioqKgoKCS8vKioqKioqKioqKioqKioqKioqTW9udGggYW5kIFllYXIgc2VsZWN0b3IgaW4gYXJyb3cqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCgllbHNlIGlmIChDYWwuU2Nyb2xsZXIgPT09ICJBUlJPVyIpCgl7CgkJaWYgKFVzZUltYWdlRmlsZXMpCgkJewoJCQl2Q2FsSGVhZGVyICs9ICI8dGQ+PGltZyBvbm1vdXNlZG93bj0namF2YXNjcmlwdDpDYWwuRGVjWWVhcigpO1JlbmRlckNzc0NhbCgpOycgc3JjPSciK2ltYWdlRmlsZXNQYXRoKyJjYWxfZmFzdHJldmVyc2UuZ2lmJyB3aWR0aD0nMTNweCcgaGVpZ2h0PSc5JyBvbm1vdXNlb3Zlcj0nY2hhbmdlQm9yZGVyKHRoaXMsIDApJyBvbm1vdXNlb3V0PSdjaGFuZ2VCb3JkZXIodGhpcywgMSknIHN0eWxlPSdib3JkZXI6MXB4IHNvbGlkIHdoaXRlJz48L3RkPlxuIjsvL1llYXIgc2Nyb2xsZXIgKGRlY3JlYXNlIDEgeWVhcikKCQkJdkNhbEhlYWRlciArPSAiPHRkPjxpbWcgb25tb3VzZWRvd249J2phdmFzY3JpcHQ6Q2FsLkRlY01vbnRoKCk7UmVuZGVyQ3NzQ2FsKCk7JyBzcmM9JyIgKyBpbWFnZUZpbGVzUGF0aCArICJjYWxfcmV2ZXJzZS5naWYnIHdpZHRoPScxM3B4JyBoZWlnaHQ9JzknIG9ubW91c2VvdmVyPSdjaGFuZ2VCb3JkZXIodGhpcywgMCknIG9ubW91c2VvdXQ9J2NoYW5nZUJvcmRlcih0aGlzLCAxKScgc3R5bGU9J2JvcmRlcjoxcHggc29saWQgd2hpdGUnPjwvdGQ+XG4iOyAvL01vbnRoIHNjcm9sbGVyIChkZWNyZWFzZSAxIG1vbnRoKQoJCQl2Q2FsSGVhZGVyICs9ICI8dGQgd2lkdGg9JzcwJScgY2xhc3M9J2NhbFInIHN0eWxlPSdjb2xvcjoiK1lyU2VsQ29sb3IrIic+IisgQ2FsLkdldE1vbnRoTmFtZShTaG93TG9uZ01vbnRoKSArICIgIiArIENhbC5ZZWFyICsgIjwvdGQ+IjsgLy9Nb250aCBhbmQgWWVhcgoJCQl2Q2FsSGVhZGVyICs9ICI8dGQ+PGltZyBvbm1vdXNlZG93bj0namF2YXNjcmlwdDpDYWwuSW5jTW9udGgoKTtSZW5kZXJDc3NDYWwoKTsnIHNyYz0nIiArIGltYWdlRmlsZXNQYXRoICsgImNhbF9mb3J3YXJkLmdpZicgd2lkdGg9JzEzcHgnIGhlaWdodD0nOScgb25tb3VzZW92ZXI9J2NoYW5nZUJvcmRlcih0aGlzLCAwKScgb25tb3VzZW91dD0nY2hhbmdlQm9yZGVyKHRoaXMsIDEpJyBzdHlsZT0nYm9yZGVyOjFweCBzb2xpZCB3aGl0ZSc+PC90ZD5cbiI7IC8vTW9udGggc2Nyb2xsZXIgKGluY3JlYXNlIDEgbW9udGgpCgkJCXZDYWxIZWFkZXIgKz0gIjx0ZD48aW1nIG9ubW91c2Vkb3duPSdqYXZhc2NyaXB0OkNhbC5JbmNZZWFyKCk7UmVuZGVyQ3NzQ2FsKCk7JyBzcmM9JyIgKyBpbWFnZUZpbGVzUGF0aCArICJjYWxfZmFzdGZvcndhcmQuZ2lmJyB3aWR0aD0nMTNweCcgaGVpZ2h0PSc5JyBvbm1vdXNlb3Zlcj0nY2hhbmdlQm9yZGVyKHRoaXMsIDApJyBvbm1vdXNlb3V0PSdjaGFuZ2VCb3JkZXIodGhpcywgMSknIHN0eWxlPSdib3JkZXI6MXB4IHNvbGlkIHdoaXRlJz48L3RkPlxuIjsgLy9ZZWFyIHNjcm9sbGVyIChpbmNyZWFzZSAxIHllYXIpCgkJCWNhbEhlaWdodCArPSAyMjsKCQl9CgkJZWxzZQoJCXsKCQkJdkNhbEhlYWRlciArPSAiPHRkPjxzcGFuIGlkPSdkZWNfeWVhcicgdGl0bGU9J3JldmVyc2UgeWVhcicgb25tb3VzZWRvd249J2phdmFzY3JpcHQ6Q2FsLkRlY1llYXIoKTtSZW5kZXJDc3NDYWwoKTsnIG9ubW91c2VvdmVyPSdjaGFuZ2VCb3JkZXIodGhpcywgMCknIG9ubW91c2VvdXQ9J2NoYW5nZUJvcmRlcih0aGlzLCAxKScgc3R5bGU9J2JvcmRlcjoxcHggc29saWQgd2hpdGU7IGNvbG9yOiIgKyBZclNlbENvbG9yICsgIic+LTwvc3Bhbj48L3RkPiI7Ly9ZZWFyIHNjcm9sbGVyIChkZWNyZWFzZSAxIHllYXIpCgkJCXZDYWxIZWFkZXIgKz0gIjx0ZD48c3BhbiBpZD0nZGVjX21vbnRoJyB0aXRsZT0ncmV2ZXJzZSBtb250aCcgb25tb3VzZWRvd249J2phdmFzY3JpcHQ6Q2FsLkRlY01vbnRoKCk7UmVuZGVyQ3NzQ2FsKCk7JyBvbm1vdXNlb3Zlcj0nY2hhbmdlQm9yZGVyKHRoaXMsIDApJyBvbm1vdXNlb3V0PSdjaGFuZ2VCb3JkZXIodGhpcywgMSknIHN0eWxlPSdib3JkZXI6MXB4IHNvbGlkIHdoaXRlJz4mbHQ7PC9zcGFuPjwvdGQ+XG4iOy8vTW9udGggc2Nyb2xsZXIgKGRlY3JlYXNlIDEgbW9udGgpCgkJCXZDYWxIZWFkZXIgKz0gIjx0ZCB3aWR0aD0nNzAlJyBjbGFzcz0nY2FsUicgc3R5bGU9J2NvbG9yOiIgKyBZclNlbENvbG9yICsgIic+IiArIENhbC5HZXRNb250aE5hbWUoU2hvd0xvbmdNb250aCkgKyAiICIgKyBDYWwuWWVhciArICI8L3RkPlxuIjsgLy9Nb250aCBhbmQgWWVhcgoJCQl2Q2FsSGVhZGVyICs9ICI8dGQ+PHNwYW4gaWQ9J2luY19tb250aCcgdGl0bGU9J2ZvcndhcmQgbW9udGgnIG9ubW91c2Vkb3duPSdqYXZhc2NyaXB0OkNhbC5JbmNNb250aCgpO1JlbmRlckNzc0NhbCgpOycgb25tb3VzZW92ZXI9J2NoYW5nZUJvcmRlcih0aGlzLCAwKScgb25tb3VzZW91dD0nY2hhbmdlQm9yZGVyKHRoaXMsIDEpJyBzdHlsZT0nYm9yZGVyOjFweCBzb2xpZCB3aGl0ZSc+Jmd0Ozwvc3Bhbj48L3RkPlxuIjsvL01vbnRoIHNjcm9sbGVyIChpbmNyZWFzZSAxIG1vbnRoKQoJCQl2Q2FsSGVhZGVyICs9ICI8dGQ+PHNwYW4gaWQ9J2luY195ZWFyJyB0aXRsZT0nZm9yd2FyZCB5ZWFyJyBvbm1vdXNlZG93bj0namF2YXNjcmlwdDpDYWwuSW5jWWVhcigpO1JlbmRlckNzc0NhbCgpOycgIG9ubW91c2VvdmVyPSdjaGFuZ2VCb3JkZXIodGhpcywgMCknIG9ubW91c2VvdXQ9J2NoYW5nZUJvcmRlcih0aGlzLCAxKScgc3R5bGU9J2JvcmRlcjoxcHggc29saWQgd2hpdGU7IGNvbG9yOiIgKyBZclNlbENvbG9yICsgIic+Kzwvc3Bhbj48L3RkPlxuIjsvL1llYXIgc2Nyb2xsZXIgKGluY3JlYXNlIDEgeWVhcikKCQkJY2FsSGVpZ2h0ICs9IDIyOwoJCX0KCX0KCgl2Q2FsSGVhZGVyICs9ICI8L3RyPjwvdGFibGU+PC90ZD48L3RyPiI7CgoJLy8qKioqKioqKioqKioqKioqKipFbmQgTW9udGggYW5kIFllYXIgc2VsZWN0b3IgaW4gYXJyb3cqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCgkvL0NhbGVuZGFyIGhlYWRlciBzaG93cyBNb250aCBhbmQgWWVhcgoJaWYgKFNob3dNb250aFllYXIgJiYgQ2FsLlNjcm9sbGVyID09PSAiRFJPUERPV04iKQoJewoJICAgIHZDYWxIZWFkZXIgKz0gIjx0cj48dGQgY29sc3Bhbj0nNycgY2xhc3M9J2NhbFInIHN0eWxlPSdjb2xvcjoiICsgTW9udGhZZWFyQ29sb3IgKyAiJz4iICsgQ2FsLkdldE1vbnRoTmFtZShTaG93TG9uZ01vbnRoKSArICIgIiArIENhbC5ZZWFyICsgIjwvdGQ+PC90cj4iOwoJCWNhbEhlaWdodCArPSAxOTsKCX0KCgkvL1dlZWsgZGF5IGhlYWRlcgoKCXZDYWxIZWFkZXIgKz0gIjx0cj48dGQgY29sc3Bhbj1cIjdcIj48dGFibGUgc3R5bGU9J2JvcmRlci1zcGFjaW5nOjFweDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Jz48dHI+IjsKCWlmIChNb25kYXlGaXJzdERheSA9PT0gdHJ1ZSkKCXsKCQlXZWVrRGF5TmFtZSA9IFdlZWtEYXlOYW1lMjsKCX0KCWVsc2UKCXsKCQlXZWVrRGF5TmFtZSA9IFdlZWtEYXlOYW1lMTsKCX0KCWZvciAoaSA9IDA7IGkgPCA3OyBpICs9IDEpCgl7CgkgICAgdkNhbEhlYWRlciArPSAiPHRkIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiIrV2Vla0hlYWRDb2xvcisiO3dpZHRoOiIrQ2VsbFdpZHRoKyJweDtjb2xvcjojRkZGRkZGJyBjbGFzcz0nY2FsVEQnPiIgKyBXZWVrRGF5TmFtZVtpXS5zdWJzdHIoMCwgV2Vla0NoYXIpICsgIjwvdGQ+IjsKCX0KCgljYWxIZWlnaHQgKz0gMTk7Cgl2Q2FsSGVhZGVyICs9ICI8L3RyPiI7CgkvL0NhbGVuZGFyIGRldGFpbAoJQ2FsRGF0ZSA9IG5ldyBEYXRlKENhbC5ZZWFyLCBDYWwuTW9udGgpOwoJQ2FsRGF0ZS5zZXREYXRlKDEpOwoKCXZGaXJzdERheSA9IENhbERhdGUuZ2V0RGF5KCk7CgoJLy9BZGRlZCB2ZXJzaW9uIDEuNwoJaWYgKE1vbmRheUZpcnN0RGF5ID09PSB0cnVlKQoJewoJCXZGaXJzdERheSAtPSAxOwoJCWlmICh2Rmlyc3REYXkgPT09IC0xKQoJCXsKCQkJdkZpcnN0RGF5ID0gNjsKCQl9Cgl9CgoJLy9BZGRlZCB2ZXJzaW9uIDEuNwoJdkNhbERhdGEgPSAiPHRyPiI7CgljYWxIZWlnaHQgKz0gMTk7Cglmb3IgKGkgPSAwOyBpIDwgdkZpcnN0RGF5OyBpICs9IDEpCgl7CgkJdkNhbERhdGEgPSB2Q2FsRGF0YSArIEdlbkNlbGwoKTsKCQl2RGF5Q291bnQgPSB2RGF5Q291bnQgKyAxOwoJfQoKCS8vQWRkZWQgdmVyc2lvbiAxLjcKCWZvciAoaiA9IDE7IGogPD0gQ2FsLkdldE1vbkRheXMoKTsgaiArPSAxKQoJewoJCWlmICgodkRheUNvdW50ICUgNyA9PT0gMCkgJiYgKGogPiAxKSkKCQl7CgkJCXZDYWxEYXRhID0gdkNhbERhdGEgKyAiPHRyPiI7CgkJfQoKCQl2RGF5Q291bnQgPSB2RGF5Q291bnQgKyAxOwoJCS8vYWRkZWQgdmVyc2lvbiAyLjEuMgoJCWlmIChDYWwuRW5hYmxlRGF0ZU1vZGUgPT09ICJmdXR1cmUiICYmICgoaiA8IGR0VG9kYXkuZ2V0RGF0ZSgpKSAmJiAoQ2FsLk1vbnRoID09PSBkdFRvZGF5LmdldE1vbnRoKCkpICYmIChDYWwuWWVhciA9PT0gZHRUb2RheS5nZXRGdWxsWWVhcigpKSB8fCAoQ2FsLk1vbnRoIDwgZHRUb2RheS5nZXRNb250aCgpKSAmJiAoQ2FsLlllYXIgPT09IGR0VG9kYXkuZ2V0RnVsbFllYXIoKSkgfHwgKENhbC5ZZWFyIDwgZHRUb2RheS5nZXRGdWxsWWVhcigpKSkpCgkJewoJCQlzdHJDZWxsID0gR2VuQ2VsbChqLCBmYWxzZSwgRGlzYWJsZUNvbG9yLCBmYWxzZSk7IC8vQmVmb3JlIHRvZGF5J3MgZGF0ZSBpcyBub3QgY2xpY2thYmxlDQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAoQ2FsLkVuYWJsZURhdGVNb2RlID09PSAicGFzdCIgJiYgKChqID49IGR0VG9kYXkuZ2V0RGF0ZSgpKSAmJiAoQ2FsLk1vbnRoID09PSBkdFRvZGF5LmdldE1vbnRoKCkpICYmIChDYWwuWWVhciA9PT0gZHRUb2RheS5nZXRGdWxsWWVhcigpKSB8fCAoQ2FsLk1vbnRoID4gZHRUb2RheS5nZXRNb250aCgpKSAmJiAoQ2FsLlllYXIgPT09IGR0VG9kYXkuZ2V0RnVsbFllYXIoKSkgfHwgKENhbC5ZZWFyID4gZHRUb2RheS5nZXRGdWxsWWVhcigpKSkpIHsNCiAgICAgICAgICAgIHN0ckNlbGwgPSBHZW5DZWxsKGosIGZhbHNlLCBEaXNhYmxlQ29sb3IsIGZhbHNlKTsgLy9BZnRlciB0b2RheSdzIGRhdGUgaXMgbm90IGNsaWNrYWJsZQ0KICAgICAgICB9CgkJLy9pZiBFbmQgWWVhciArIEN1cnJlbnQgWWVhciA9IENhbC5ZZWFyLiBEaXNhYmxlLgoJCWVsc2UgaWYgKENhbC5ZZWFyID4gKGR0VG9kYXkuZ2V0RnVsbFllYXIoKStFbmRZZWFyKSkKCQl7CgkJICAgIHN0ckNlbGwgPSBHZW5DZWxsKGosIGZhbHNlLCBEaXNhYmxlQ29sb3IsIGZhbHNlKTsgCgkJfQoJCWVsc2UgaWYgKChqID09PSBkdFRvZGF5LmdldERhdGUoKSkgJiYgKENhbC5Nb250aCA9PT0gZHRUb2RheS5nZXRNb250aCgpKSAmJiAoQ2FsLlllYXIgPT09IGR0VG9kYXkuZ2V0RnVsbFllYXIoKSkpCgkJewoJCQlzdHJDZWxsID0gR2VuQ2VsbChqLCB0cnVlLCBUb2RheUNvbG9yKTsvL0hpZ2hsaWdodCB0b2RheSdzIGRhdGUKCQl9CgkJZWxzZQoJCXsKCQkJaWYgKChqID09PSBzZWxEYXRlLmdldERhdGUoKSkgJiYgKENhbC5Nb250aCA9PT0gc2VsRGF0ZS5nZXRNb250aCgpKSAmJiAoQ2FsLlllYXIgPT09IHNlbERhdGUuZ2V0RnVsbFllYXIoKSkpewoJCQkgICAgIC8vbW9kaWZpZWQgdmVyc2lvbiAxLjcKCQkJCXN0ckNlbGwgPSBHZW5DZWxsKGosIHRydWUsIFNlbERhdGVDb2xvcik7CiAgICAgICAgICAgIH0KCQkJZWxzZQoJCQl7CgkJCQlpZiAoTW9uZGF5Rmlyc3REYXkgPT09IHRydWUpCgkJCQl7CgkJCQkJaWYgKHZEYXlDb3VudCAlIDcgPT09IDApCgkJCQkJewoJCQkJCQlzdHJDZWxsID0gR2VuQ2VsbChqLCBmYWxzZSwgU3VuZGF5Q29sb3IpOwoJCQkJCX0KCQkJCQllbHNlIGlmICgodkRheUNvdW50ICsgMSkgJSA3ID09PSAwKQoJCQkJCXsKCQkJCQkJc3RyQ2VsbCA9IEdlbkNlbGwoaiwgZmFsc2UsIFNhdHVyZGF5Q29sb3IpOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlzdHJDZWxsID0gR2VuQ2VsbChqLCBudWxsLCBXZWVrRGF5Q29sb3IpOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlpZiAodkRheUNvdW50ICUgNyA9PT0gMCkKCQkJCQl7CgkJCQkJCXN0ckNlbGwgPSBHZW5DZWxsKGosIGZhbHNlLCBTYXR1cmRheUNvbG9yKTsKCQkJCQl9CgkJCQkJZWxzZSBpZiAoKHZEYXlDb3VudCArIDYpICUgNyA9PT0gMCkKCQkJCQl7CgkJCQkJCXN0ckNlbGwgPSBHZW5DZWxsKGosIGZhbHNlLCBTdW5kYXlDb2xvcik7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXN0ckNlbGwgPSBHZW5DZWxsKGosIG51bGwsIFdlZWtEYXlDb2xvcik7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQl2Q2FsRGF0YSA9IHZDYWxEYXRhICsgc3RyQ2VsbDsKCgkJaWYgKCh2RGF5Q291bnQgJSA3ID09PSAwKSAmJiAoaiA8IENhbC5HZXRNb25EYXlzKCkpKQoJCXsKCQkJdkNhbERhdGEgPSB2Q2FsRGF0YSArICI8L3RyPiI7CgkJCWNhbEhlaWdodCArPSAxOTsKCQl9Cgl9CgoJLy8gZmluaXNoIHRoZSB0YWJsZSBwcm9wZXIKCglpZiAodkRheUNvdW50ICUgNyAhPT0gMCkKCXsKCQl3aGlsZSAodkRheUNvdW50ICUgNyAhPT0gMCkKCQl7CgkJCXZDYWxEYXRhID0gdkNhbERhdGEgKyBHZW5DZWxsKCk7CgkJCXZEYXlDb3VudCA9IHZEYXlDb3VudCArIDE7CgkJfQoJfQoKCXZDYWxEYXRhID0gdkNhbERhdGEgKyAiPC90YWJsZT48L3RkPjwvdHI+IjsKCgoJLy9UaW1lIHBpY2tlcgoJaWYgKENhbC5TaG93VGltZSA9PT0gdHJ1ZSkKCXsKCQlzaG93SG91ciA9IENhbC5nZXRTaG93SG91cigpOwoKCQlpZiAoQ2FsLlNob3dTZWNvbmRzID09PSBmYWxzZSAmJiBUaW1lTW9kZSA9PT0gMjQpCgkJewoJCQlTaG93QXJyb3dzID0gdHJ1ZTsKCQkJSG91ckNlbGxXaWR0aCA9ICIxMHB4IjsKCQl9CgoJCXZDYWxUaW1lID0gIjx0cj48dGQgY29sc3Bhbj0nNycgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjtcIj48dGFibGUgYm9yZGVyPScwJyB3aWR0aD0nMTk5cHgnIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+PHRib2R5Pjx0cj48dGQgaGVpZ2h0PSc1cHgnIHdpZHRoPSciICsgSG91ckNlbGxXaWR0aCArICInPiZuYnNwOzwvdGQ+IjsKCgkJaWYgKFNob3dBcnJvd3MgJiYgVXNlSW1hZ2VGaWxlcykgLy90aGlzIGlzIHdoZXJlIHRoZSB1cCBhbmQgZG93biBhcnJvdyBjb250cm9sIHRoZSBob3VyLgoJCXsKCQkgICAgdkNhbFRpbWUgKz0gIjx0ZCBzdHlsZT0ndmVydGljYWwtYWxpZ246bWlkZGxlOyc+PHRhYmxlIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMCcgc3R5bGU9J2xpbmUtaGVpZ2h0OjBwdDt3aWR0aDoxMDAlOyc+PHRyPjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz48aW1nIG9uY2xpY2s9J25leHRTdGVwKFwiSG91clwiLCBcInBsdXNcIik7JyBvbm1vdXNlZG93bj0nc3RhcnRTcGluKFwiSG91clwiLCBcInBsdXNcIik7JyBvbm1vdXNldXA9J3N0b3BTcGluKCk7JyBzcmM9JyIgKyBpbWFnZUZpbGVzUGF0aCArICJjYWxfcGx1cy5naWYnIHdpZHRoPScxM3B4JyBoZWlnaHQ9JzlweCcgb25tb3VzZW92ZXI9J2NoYW5nZUJvcmRlcih0aGlzLCAwKScgb25tb3VzZW91dD0nY2hhbmdlQm9yZGVyKHRoaXMsIDEpJyBzdHlsZT0nYm9yZGVyOjFweCBzb2xpZCB3aGl0ZSc+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+PGltZyBvbmNsaWNrPSduZXh0U3RlcChcIkhvdXJcIiwgXCJtaW51c1wiKTsnIG9ubW91c2Vkb3duPSdzdGFydFNwaW4oXCJIb3VyXCIsIFwibWludXNcIik7JyBvbm1vdXNldXA9J3N0b3BTcGluKCk7JyBzcmM9JyIgKyBpbWFnZUZpbGVzUGF0aCArICJjYWxfbWludXMuZ2lmJyB3aWR0aD0nMTNweCcgaGVpZ2h0PSc5cHgnIG9ubW91c2VvdmVyPSdjaGFuZ2VCb3JkZXIodGhpcywgMCknIG9ubW91c2VvdXQ9J2NoYW5nZUJvcmRlcih0aGlzLCAxKScgc3R5bGU9J2JvcmRlcjoxcHggc29saWQgd2hpdGUnPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+XG4iOwoJCX0KCgkJdkNhbFRpbWUgKz0gIjx0ZCB3aWR0aD0nMjJweCc+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2hvdXInIG1heGxlbmd0aD0yIHNpemU9MSBzdHlsZT1cIldJRFRIOjIycHhcIiB2YWx1ZT0iICsgc2hvd0hvdXIgKyAiIG9ua2V5dXA9XCJqYXZhc2NyaXB0OkNhbC5TZXRIb3VyKHRoaXMudmFsdWUpXCI+IjsKCQl2Q2FsVGltZSArPSAiPC90ZD48dGQgc3R5bGU9J2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7Jz46PC90ZD48dGQgd2lkdGg9JzIycHgnPiI7CgkJdkNhbFRpbWUgKz0gIjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdtaW51dGUnIG1heGxlbmd0aD0yIHNpemU9MSBzdHlsZT1cIldJRFRIOiAyMnB4XCIgdmFsdWU9IiArIENhbC5NaW51dGVzICsgIiBvbmtleXVwPVwiamF2YXNjcmlwdDpDYWwuU2V0TWludXRlKHRoaXMudmFsdWUpXCI+IjsKCgkJaWYgKENhbC5TaG93U2Vjb25kcykKCQl7CgkJICAgIHZDYWxUaW1lICs9ICI8L3RkPjx0ZCBzdHlsZT0nZm9udC13ZWlnaHQ6Ym9sZDsnPjo8L3RkPjx0ZCB3aWR0aD0nMjJweCc+IjsKCQkJdkNhbFRpbWUgKz0gIjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzZWNvbmQnIG1heGxlbmd0aD0yIHNpemU9MSBzdHlsZT1cIldJRFRIOiAyMnB4XCIgdmFsdWU9IiArIENhbC5TZWNvbmRzICsgIiBvbmtleXVwPVwiamF2YXNjcmlwdDpDYWwuU2V0U2Vjb25kKHBhcnNlSW50KHRoaXMudmFsdWUsMTApKVwiPiI7CgkJfQoKCQlpZiAoVGltZU1vZGUgPT09IDEyKQoJCXsKCQkJU2VsZWN0QW0gPSAoQ2FsLkFNb3JQTSA9PT0gIkFNIikgPyAiU2VsZWN0ZWQiIDogIiI7CgkJCVNlbGVjdFBtID0gKENhbC5BTW9yUE0gPT09ICJQTSIpID8gIlNlbGVjdGVkIiA6ICIiOwoKCQkJdkNhbFRpbWUgKz0gIjwvdGQ+PHRkPiI7CgkJCXZDYWxUaW1lICs9ICI8c2VsZWN0IG5hbWU9XCJhbXBtXCIgb25DaGFuZ2U9XCJqYXZhc2NyaXB0OkNhbC5TZXRBbVBtKHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLnZhbHVlKTtcIj5cbiI7CgkJCXZDYWxUaW1lICs9ICI8b3B0aW9uICIgKyBTZWxlY3RBbSArICIgdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+IjsKCQkJdkNhbFRpbWUgKz0gIjxvcHRpb24gIiArIFNlbGVjdFBtICsgIiB2YWx1ZT1cIlBNXCI+UE08b3B0aW9uPiI7CgkJCXZDYWxUaW1lICs9ICI8L3NlbGVjdD4iOwoJCX0KCgkJaWYgKFNob3dBcnJvd3MgJiYgVXNlSW1hZ2VGaWxlcykgLy90aGlzIGlzIHdoZXJlIHRoZSB1cCBhbmQgZG93biBhcnJvdyB0byBjaGFuZ2UgdGhlICJNaW51dGUiLgoJCXsKCQkgICAgdkNhbFRpbWUgKz0gIjwvdGQ+XG48dGQgc3R5bGU9J3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsnPjx0YWJsZSBjZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzAnIHN0eWxlPSdsaW5lLWhlaWdodDowcHQ7d2lkdGg6MTAwJSc+PHRyPjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz48aW1nIG9uY2xpY2s9J25leHRTdGVwKFwiTWludXRlXCIsIFwicGx1c1wiKTsnIG9ubW91c2Vkb3duPSdzdGFydFNwaW4oXCJNaW51dGVcIiwgXCJwbHVzXCIpOycgb25tb3VzZXVwPSdzdG9wU3BpbigpOycgc3JjPSciICsgaW1hZ2VGaWxlc1BhdGggKyAiY2FsX3BsdXMuZ2lmJyB3aWR0aD0nMTNweCcgaGVpZ2h0PSc5cHgnIG9ubW91c2VvdmVyPSdjaGFuZ2VCb3JkZXIodGhpcywgMCknIG9ubW91c2VvdXQ9J2NoYW5nZUJvcmRlcih0aGlzLCAxKScgc3R5bGU9J2JvcmRlcjoxcHggc29saWQgd2hpdGUnPjwvdGQ+PC90cj48dHI+PHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPjxpbWcgb25tb3VzZWRvd249J3N0YXJ0U3BpbihcIk1pbnV0ZVwiLCBcIm1pbnVzXCIpOycgb25tb3VzZXVwPSdzdG9wU3BpbigpOycgb25jbGljaz0nbmV4dFN0ZXAoXCJNaW51dGVcIixcIm1pbnVzXCIpOycgc3JjPSciICsgaW1hZ2VGaWxlc1BhdGggKyAiY2FsX21pbnVzLmdpZicgd2lkdGg9JzEzcHgnIGhlaWdodD0nOXB4JyBvbm1vdXNlb3Zlcj0nY2hhbmdlQm9yZGVyKHRoaXMsIDApJyBvbm1vdXNlb3V0PSdjaGFuZ2VCb3JkZXIodGhpcywgMSknIHN0eWxlPSdib3JkZXI6MXB4IHNvbGlkIHdoaXRlJz48L3RkPjwvdHI+PC90YWJsZT4iOwoJCX0KCgkJdkNhbFRpbWUgKz0gIjwvdGQ+XG48dGQgYWxpZ249J3JpZ2h0JyB2YWxpZ249J2JvdHRvbScgd2lkdGg9JyIgKyBIb3VyQ2VsbFdpZHRoICsgInB4Jz48L3RkPjwvdHI+IjsKCQl2Q2FsVGltZSArPSAiPHRyPjx0ZCBjb2xzcGFuPSc4JyBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyO1wiPjxpbnB1dCBzdHlsZT0nd2lkdGg6NjBweDtmb250LXNpemU6MTJweDsnIG9uQ2xpY2s9J2phdmFzY3JpcHQ6Y2xvc2V3aW4oXCIiICsgQ2FsLkN0cmwgKyAiXCIpOycgIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIk9LXCI+Jm5ic3A7PGlucHV0IHN0eWxlPSd3aWR0aDo2MHB4O2ZvbnQtc2l6ZToxMnB4Oycgb25DbGljaz0namF2YXNjcmlwdDogd2luQ2FsLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiJyB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJDYW5jZWxcIj48L3RkPjwvdHI+IjsKCX0KCWVsc2UgLy9pZiBub3QgdG8gc2hvdyB0aW1lLgoJewoJICAgIHZDYWxUaW1lICs9ICJcbjx0cj5cbjx0ZCBjb2xzcGFuPSc3JyBzdHlsZT1cInRleHQtYWxpZ246cmlnaHQ7XCI+IjsKCSAgICAvL2Nsb3NlIGJ1dHRvbgoJICAgIGlmIChVc2VJbWFnZUZpbGVzKSB7CgkgICAgICAgIHZDYWxDbG9zaW5nICs9ICI8aW1nIG9ubW91c2Vkb3duPSdqYXZhc2NyaXB0OmNsb3Nld2luKFwiIiArIENhbC5DdHJsICsgIlwiKTsgc3RvcFNwaW4oKTsnIHNyYz0nIitpbWFnZUZpbGVzUGF0aCsiY2FsX2Nsb3NlLmdpZicgd2lkdGg9JzE2cHgnIGhlaWdodD0nMTRweCcgb25tb3VzZW92ZXI9J2NoYW5nZUJvcmRlcih0aGlzLDApJyBvbm1vdXNlb3V0PSdjaGFuZ2VCb3JkZXIodGhpcywgMSknIHN0eWxlPSdib3JkZXI6MXB4IHNvbGlkIHdoaXRlJz48L3RkPiI7CgkgICAgfQoJICAgIGVsc2UgewoJICAgICAgICB2Q2FsQ2xvc2luZyArPSAiPHNwYW4gaWQ9J2Nsb3NlX2NhbCcgdGl0bGU9J2Nsb3NlJ29ubW91c2Vkb3duPSdqYXZhc2NyaXB0OmNsb3Nld2luKFwiIiArIENhbC5DdHJsICsgIlwiKTtzdG9wU3BpbigpOycgb25tb3VzZW92ZXI9J2NoYW5nZUJvcmRlcih0aGlzLCAwKSdvbm1vdXNlb3V0PSdjaGFuZ2VCb3JkZXIodGhpcywgMSknIHN0eWxlPSdib3JkZXI6MXB4IHNvbGlkIHdoaXRlOyBmb250LWZhbWlseTogQXJpYWw7Zm9udC1zaXplOiAxMHB0Oyc+eDwvc3Bhbj48L3RkPiI7CgkgICAgfQoJICAgIHZDYWxDbG9zaW5nICs9ICI8L3RyPiI7Cgl9Cgl2Q2FsQ2xvc2luZyArPSAiPC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj4iOwoJY2FsSGVpZ2h0ICs9IDMxOwoJdkNhbENsb3NpbmcgKz0gIjwvdGJvZHk+PC90YWJsZT5cbjwvc3Bhbj4iOwoKCS8vZW5kIHRpbWUgcGlja2VyCglmdW5jQ2FsYmFjayA9ICJmdW5jdGlvbiBjYWxsYmFjayhpZCwgZGF0dW0pIHsiOwoJZnVuY0NhbGJhY2sgKz0gIiB2YXIgQ2FsSWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7aWYgKGRhdHVtPT09ICd1bmRlZmluZWQnKSB7IHZhciBkID0gbmV3IERhdGUoKTsgZGF0dW0gPSBkLmdldERhdGUoKSArICcvJyArKGQuZ2V0TW9udGgoKSsxKSArICcvJyArIGQuZ2V0RnVsbFllYXIoKTsgfSB3aW5kb3cuY2FsRGF0dW09ZGF0dW07Q2FsSWQudmFsdWU9ZGF0dW07IjsKCWZ1bmNDYWxiYWNrICs9ICIgaWYoQ2FsLlNob3dUaW1lKXsiOwoJZnVuY0NhbGJhY2sgKz0gIiBDYWxJZC52YWx1ZSs9JyAnK0NhbC5nZXRTaG93SG91cigpKyc6JytDYWwuTWludXRlczsiOwoJZnVuY0NhbGJhY2sgKz0gIiBpZiAoQ2FsLlNob3dTZWNvbmRzKSAgQ2FsSWQudmFsdWUrPSc6JytDYWwuU2Vjb25kczsiOwoJZnVuY0NhbGJhY2sgKz0gIiBpZiAoVGltZU1vZGUgPT09IDEyKSAgQ2FsSWQudmFsdWUrPScnK0NhbC5nZXRTaG93QU1vclBNKCk7IjsKCWZ1bmNDYWxiYWNrICs9ICJ9aWYoQ2FsSWQub25jaGFuZ2UhPXVuZGVmaW5lZCkgQ2FsSWQub25jaGFuZ2UoKTtDYWxJZC5mb2N1cygpO3dpbkNhbC5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nO30iOwoKCgkvLyBkZXRlcm1pbmVzIGlmIHRoZXJlIGlzIGVub3VnaCBzcGFjZSB0byBvcGVuIHRoZSBjYWwgYWJvdmUgdGhlIHBvc2l0aW9uIHdoZXJlIGl0IGlzIGNhbGxlZAoJaWYgKHlwb3MgPiBjYWxIZWlnaHQpCgl7CgkJeXBvcyA9IHlwb3MgLSBjYWxIZWlnaHQ7Cgl9CgoJaWYgKCF3aW5DYWwpCgl7CgkJaGVhZElEID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKCgkJLy8gYWRkIGphdmFzY3JpcHQgZnVuY3Rpb24gdG8gdGhlIHNwYW4gY2FsCgkJZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwoJCWUudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwoJCWUubGFuZ3VhZ2UgPSAiamF2YXNjcmlwdCI7CgkJZS50ZXh0ID0gZnVuY0NhbGJhY2s7CgkJaGVhZElELmFwcGVuZENoaWxkKGUpOwoJCS8vIGFkZCBzdHlsZXNoZWV0IHRvIHRoZSBzcGFuIGNhbAoKCQljc3NTdHIgPSAiLmNhbFREIHtmb250LWZhbWlseTogdmVyZGFuYTsgZm9udC1zaXplOiAxMnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJvcmRlcjowOyB9XG4iOwoJCWNzc1N0ciArPSAiLmNhbFIge2ZvbnQtZmFtaWx5OiB2ZXJkYW5hOyBmb250LXNpemU6IDEycHg7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC13ZWlnaHQ6IGJvbGQ7fSI7CgoJCXN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKCQlzdHlsZS50eXBlID0gInRleHQvY3NzIjsKCQlzdHlsZS5yZWwgPSAic3R5bGVzaGVldCI7CgkJaWYgKHN0eWxlLnN0eWxlU2hlZXQpCgkJeyAvLyBJRQoJCQlzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3NTdHI7CgkJfQoKCQllbHNlCgkJeyAvLyB3M2MKCQkJY3NzVGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzc1N0cik7CgkJCXN0eWxlLmFwcGVuZENoaWxkKGNzc1RleHQpOwoJCX0KCgkJaGVhZElELmFwcGVuZENoaWxkKHN0eWxlKTsKCQkvLyBjcmVhdGUgdGhlIG91dGVyIGZyYW1lIHRoYXQgYWxsb3dzIHRoZSBjYWwuIHRvIGJlIG1vdmVkCgkJc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKCQlzcGFuLmlkID0gY2FsU3BhbklEOwoJCXNwYW4uc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwoJCXNwYW4uc3R5bGUubGVmdCA9ICh4cG9zICsgQ2FsUG9zT2Zmc2V0WCkgKyAncHgnOwoJCXNwYW4uc3R5bGUudG9wID0gKHlwb3MgLSBDYWxQb3NPZmZzZXRZKSArICdweCc7CgkJc3Bhbi5zdHlsZS53aWR0aCA9IENhbFdpZHRoICsgJ3B4JzsKCQlzcGFuLnN0eWxlLmJvcmRlciA9ICJzb2xpZCAxcHQgIiArIFNwYW5Cb3JkZXJDb2xvcjsKCQlzcGFuLnN0eWxlLnBhZGRpbmcgPSAiMCI7CgkJc3Bhbi5zdHlsZS5jdXJzb3IgPSAibW92ZSI7CgkJc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBTcGFuQmdDb2xvcjsKCQlzcGFuLnN0eWxlLnpJbmRleCA9IDEwMDsKCQlkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNwYW4pOwoJCXdpbkNhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbFNwYW5JRCk7Cgl9CgoJZWxzZQoJewoJCXdpbkNhbC5zdHlsZS52aXNpYmlsaXR5ID0gInZpc2libGUiOwoJCXdpbkNhbC5zdHlsZS5IZWlnaHQgPSBjYWxIZWlnaHQ7CgoJCS8vIHNldCB0aGUgcG9zaXRpb24gZm9yIGEgbmV3IGNhbGVuZGFyIG9ubHkKCQlpZiAoYk5ld0NhbCA9PT0gdHJ1ZSkKCQl7CgkJCXdpbkNhbC5zdHlsZS5sZWZ0ID0gKHhwb3MgKyBDYWxQb3NPZmZzZXRYKSArICdweCc7CgkJCXdpbkNhbC5zdHlsZS50b3AgPSAoeXBvcyAtIENhbFBvc09mZnNldFkpICsgJ3B4JzsKCQl9Cgl9CgoJd2luQ2FsLmlubmVySFRNTCA9IHdpbkNhbERhdGEgKyB2Q2FsSGVhZGVyICsgdkNhbERhdGEgKyB2Q2FsVGltZSArIHZDYWxDbG9zaW5nOwoJcmV0dXJuIHRydWU7Cn0KCgpmdW5jdGlvbiBOZXdDc3NDYWwocEN0cmwsIHBGb3JtYXQsIHBTY3JvbGxlciwgcFNob3dUaW1lLCBwVGltZU1vZGUsIHBTaG93U2Vjb25kcywgcEVuYWJsZURhdGVNb2RlKQp7CgkvLyBnZXQgY3VycmVudCBkYXRlIGFuZCB0aW1lCgoJZHRUb2RheSA9IG5ldyBEYXRlKCk7CglDYWwgPSBuZXcgQ2FsZW5kYXIoZHRUb2RheSk7CgoJaWYgKHBTaG93VGltZSAhPT0gdW5kZWZpbmVkKQoJewoJICAgIGlmIChwU2hvd1RpbWUpIHsKCSAgICAgICAgQ2FsLlNob3dUaW1lID0gdHJ1ZTsKCSAgICB9CgkgICAgZWxzZSB7CgkgICAgICAgIENhbC5TaG93VGltZSA9IGZhbHNlOwoJICAgIH0KCgkJaWYgKHBUaW1lTW9kZSkKCQl7CgkJCXBUaW1lTW9kZSA9IHBhcnNlSW50KHBUaW1lTW9kZSwgMTApOwoJCX0KCQlpZiAocFRpbWVNb2RlID09PSAxMiB8fCBwVGltZU1vZGUgPT09IDI0KQoJCXsKCQkJVGltZU1vZGUgPSBwVGltZU1vZGU7CgkJfQoJCWVsc2UKCQl7CgkJCVRpbWVNb2RlID0gMjQ7CgkJfQoKCQlpZiAocFNob3dTZWNvbmRzICE9PSB1bmRlZmluZWQpCgkJewoJCQlpZiAocFNob3dTZWNvbmRzKQoJCQl7CgkJCQlDYWwuU2hvd1NlY29uZHMgPSB0cnVlOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJQ2FsLlNob3dTZWNvbmRzID0gZmFsc2U7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJQ2FsLlNob3dTZWNvbmRzID0gZmFsc2U7CgkJfQoKCX0KCglpZiAocEN0cmwgIT09IHVuZGVmaW5lZCkKCXsKCQlDYWwuQ3RybCA9IHBDdHJsOwoJfQoKCWlmIChwRm9ybWF0IT09IHVuZGVmaW5lZCAmJiBwRm9ybWF0ICE9PSIiKQoJewoJCUNhbC5Gb3JtYXQgPSBwRm9ybWF0LnRvVXBwZXJDYXNlKCk7Cgl9CgllbHNlCgl7CgkJQ2FsLkZvcm1hdCA9ICJNTUREWVlZWSI7Cgl9CgoJaWYgKHBTY3JvbGxlciE9PSB1bmRlZmluZWQgJiYgcFNjcm9sbGVyIT09IiIpCgl7CgkJaWYgKHBTY3JvbGxlci50b1VwcGVyQ2FzZSgpID09PSAiQVJST1ciKQoJCXsKCQkJQ2FsLlNjcm9sbGVyID0gIkFSUk9XIjsKCQl9CgkJZWxzZQoJCXsKCQkJQ2FsLlNjcm9sbGVyID0gIkRST1BET1dOIjsKCQl9DQogICAgfQ0KDQogICAgaWYgKHBFbmFibGVEYXRlTW9kZSAhPT0gdW5kZWZpbmVkICYmIChwRW5hYmxlRGF0ZU1vZGUgPT09ICJmdXR1cmUiIHx8IHBFbmFibGVEYXRlTW9kZSA9PT0gInBhc3QiKSkgew0KICAgICAgICBDYWwuRW5hYmxlRGF0ZU1vZGU9IHBFbmFibGVEYXRlTW9kZTsNCiAgICB9CgoJZXhEYXRlVGltZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBDdHJsKS52YWx1ZTsgLy9FeGlzdGluZyBEYXRlIFRpbWUgdmFsdWUgaW4gdGV4dGJveC4KCglpZiAoZXhEYXRlVGltZSkKCXsgLy9QYXJzZSBleGlzdGluZyBEYXRlIFN0cmluZwoJCXZhciBTcDEgPSBleERhdGVUaW1lLmluZGV4T2YoRGF0ZVNlcGFyYXRvciwgMCksLy9JbmRleCBvZiBEYXRlIFNlcGFyYXRvciAxCgkJU3AyID0gZXhEYXRlVGltZS5pbmRleE9mKERhdGVTZXBhcmF0b3IsIHBhcnNlSW50KFNwMSwgMTApICsgMSksLy9JbmRleCBvZiBEYXRlIFNlcGFyYXRvciAyCgkJdFNwMSwvL0luZGV4IG9mIFRpbWUgU2VwYXJhdG9yIDEKCQl0U3AyLC8vSW5kZXggb2YgVGltZSBTZXBhcmF0b3IgMgoJCXN0ck1vbnRoLAoJCXN0ckRhdGUsCgkJc3RyWWVhciwKCQlpbnRNb250aCwKCQlZZWFyUGF0dGVybiwKCQlzdHJIb3VyLAoJCXN0ck1pbnV0ZSwKCQlzdHJTZWNvbmQsCgkJd2luSGVpZ2h0LAoJCW9mZnNldCA9IHBhcnNlSW50KENhbC5Gb3JtYXQudG9VcHBlckNhc2UoKS5sYXN0SW5kZXhPZigiTSIpLCAxMCkgLSBwYXJzZUludChDYWwuRm9ybWF0LnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiTSIpLCAxMCkgLSAxLAoJCXN0ckFNUE0gPSAiIjsKCQkvL3BhcnNlIG1vbnRoCgoJCWlmIChDYWwuRm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09ICJERE1NWVlZWSIgfHwgQ2FsLkZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSAiRERNTU1ZWVlZIikKCQl7CgkJCWlmIChEYXRlU2VwYXJhdG9yID09PSAiIikKCQkJewoJCQkJc3RyTW9udGggPSBleERhdGVUaW1lLnN1YnN0cmluZygyLCA0ICsgb2Zmc2V0KTsKCQkJCXN0ckRhdGUgPSBleERhdGVUaW1lLnN1YnN0cmluZygwLCAyKTsKCQkJCXN0clllYXIgPSBleERhdGVUaW1lLnN1YnN0cmluZyg0ICsgb2Zmc2V0LCA4ICsgb2Zmc2V0KTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWlmIChleERhdGVUaW1lLmluZGV4T2YoIkQqIikgIT09IC0xKQoJCQkJeyAgIC8vRFRHCgkJCQkJc3RyTW9udGggPSBleERhdGVUaW1lLnN1YnN0cmluZyg4LCAxMSk7CgkJCQkJc3RyRGF0ZSAgPSBleERhdGVUaW1lLnN1YnN0cmluZygwLCAyKTsKCQkJCQlzdHJZZWFyICA9ICIyMCIgKyBleERhdGVUaW1lLnN1YnN0cmluZygxMSwgMTMpOyAgLy9IYWNrLCBudXIgZsO8ciBKYWhyZXN6YWhsZW4gYWIgMjAwMAoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXN0ck1vbnRoID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoU3AxICsgMSwgU3AyKTsKCQkJCQlzdHJEYXRlID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoMCwgU3AxKTsKCQkJCQlzdHJZZWFyID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoU3AyICsgMSwgU3AyICsgNSk7CgkJCQl9CgkJCX0KCQl9CgoJCWVsc2UgaWYgKENhbC5Gb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gIk1NRERZWVlZIiB8fCBDYWwuRm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09ICJNTU1ERFlZWVkiKXsKCQkJaWYgKERhdGVTZXBhcmF0b3IgPT09ICIiKXsKCQkJCXN0ck1vbnRoID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoMCwgMiArIG9mZnNldCk7CgkJCQlzdHJEYXRlID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoMiArIG9mZnNldCwgNCArIG9mZnNldCk7CgkJCQlzdHJZZWFyID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoNCArIG9mZnNldCwgOCArIG9mZnNldCk7CgkJCX0KCQkJZWxzZXsKCQkJCXN0ck1vbnRoID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoMCwgU3AxKTsKCQkJCXN0ckRhdGUgPSBleERhdGVUaW1lLnN1YnN0cmluZyhTcDEgKyAxLCBTcDIpOwoJCQkJc3RyWWVhciA9IGV4RGF0ZVRpbWUuc3Vic3RyaW5nKFNwMiArIDEsIFNwMiArIDUpOwoJCQl9CgkJfQoKCQllbHNlIGlmIChDYWwuRm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09ICJZWVlZTU1ERCIgfHwgQ2FsLkZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSAiWVlZWU1NTUREIikKCQl7CgkJCWlmIChEYXRlU2VwYXJhdG9yID09PSAiIil7CgkJCQlzdHJNb250aCA9IGV4RGF0ZVRpbWUuc3Vic3RyaW5nKDQsIDYgKyBvZmZzZXQpOwoJCQkJc3RyRGF0ZSA9IGV4RGF0ZVRpbWUuc3Vic3RyaW5nKDYgKyBvZmZzZXQsIDggKyBvZmZzZXQpOwoJCQkJc3RyWWVhciA9IGV4RGF0ZVRpbWUuc3Vic3RyaW5nKDAsIDQpOwoJCQl9CgkJCWVsc2V7CgkJCQlzdHJNb250aCA9IGV4RGF0ZVRpbWUuc3Vic3RyaW5nKFNwMSArIDEsIFNwMik7CgkJCQlzdHJEYXRlID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoU3AyICsgMSwgU3AyICsgMyk7CgkJCQlzdHJZZWFyID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoMCwgU3AxKTsKCQkJfQoJCX0KCgkJZWxzZSBpZiAoQ2FsLkZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSAiWVlNTUREIiB8fCBDYWwuRm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09ICJZWU1NTUREIikKCQl7CgkJCWlmIChEYXRlU2VwYXJhdG9yID09PSAiIikKCQkJewoJCQkJc3RyTW9udGggPSBleERhdGVUaW1lLnN1YnN0cmluZygyLCA0ICsgb2Zmc2V0KTsKCQkJCXN0ckRhdGUgPSBleERhdGVUaW1lLnN1YnN0cmluZyg0ICsgb2Zmc2V0LCA2ICsgb2Zmc2V0KTsKCQkJCXN0clllYXIgPSBleERhdGVUaW1lLnN1YnN0cmluZygwLCAyKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXN0ck1vbnRoID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoU3AxICsgMSwgU3AyKTsKCQkJCXN0ckRhdGUgPSBleERhdGVUaW1lLnN1YnN0cmluZyhTcDIgKyAxLCBTcDIgKyAzKTsKCQkJCXN0clllYXIgPSBleERhdGVUaW1lLnN1YnN0cmluZygwLCBTcDEpOwoJCQl9CgkJfQoKCQlpZiAoaXNOYU4oc3RyTW9udGgpKXsKCQkJaW50TW9udGggPSBDYWwuR2V0TW9udGhJbmRleChzdHJNb250aCk7CgkJfQoJCWVsc2V7CgkJCWludE1vbnRoID0gcGFyc2VJbnQoc3RyTW9udGgsIDEwKSAtIDE7CgkJfQoJCWlmICgocGFyc2VJbnQoaW50TW9udGgsIDEwKSA+PSAwKSAmJiAocGFyc2VJbnQoaW50TW9udGgsIDEwKSA8IDEyKSkJewoJCQlDYWwuTW9udGggPSBpbnRNb250aDsKCQl9CgkJLy9lbmQgcGFyc2UgbW9udGgKCgkJLy9wYXJzZSB5ZWFyCgkJWWVhclBhdHRlcm4gPSAvXlxkezR9JC87CgkJaWYgKFllYXJQYXR0ZXJuLnRlc3Qoc3RyWWVhcikpIHsKCQkgICAgaWYgKChwYXJzZUludChzdHJZZWFyLCAxMCk+PVN0YXJ0WWVhcikgJiYgKHBhcnNlSW50KHN0clllYXIsIDEwKTw9IChkdFRvZGF5LmdldEZ1bGxZZWFyKCkrRW5kWWVhcikpKQoJCSAgICAgICAgQ2FsLlllYXIgPSBwYXJzZUludChzdHJZZWFyLCAxMCk7CgkJfQoJCS8vZW5kIHBhcnNlIHllYXIKCQkKCQkvL3BhcnNlIERhdGUKCQlpZiAoKHBhcnNlSW50KHN0ckRhdGUsIDEwKSA8PSBDYWwuR2V0TW9uRGF5cygpKSAmJiAocGFyc2VJbnQoc3RyRGF0ZSwgMTApID49IDEpKSB7CgkJCUNhbC5EYXRlID0gc3RyRGF0ZTsKCQl9CgkJLy9lbmQgcGFyc2UgRGF0ZQoKCQkvL3BhcnNlIHRpbWUKCgkJaWYgKENhbC5TaG93VGltZSA9PT0gdHJ1ZSkKCQl7CgkJCS8vcGFyc2UgQU0gb3IgUE0KCQkJaWYgKFRpbWVNb2RlID09PSAxMikKCQkJewoJCQkJc3RyQU1QTSA9IGV4RGF0ZVRpbWUuc3Vic3RyaW5nKGV4RGF0ZVRpbWUubGVuZ3RoIC0gMiwgZXhEYXRlVGltZS5sZW5ndGgpOwoJCQkJQ2FsLkFNb3JQTSA9IHN0ckFNUE07CgkJCX0KCgkJCXRTcDEgPSBleERhdGVUaW1lLmluZGV4T2YoIjoiLCAwKTsKCQkJdFNwMiA9IGV4RGF0ZVRpbWUuaW5kZXhPZigiOiIsIChwYXJzZUludCh0U3AxLCAxMCkgKyAxKSk7CgkJCWlmICh0U3AxID4gMCkKCQkJewoJCQkJc3RySG91ciA9IGV4RGF0ZVRpbWUuc3Vic3RyaW5nKHRTcDEsIHRTcDEgLSAyKTsNCgkJCQlDYWwuU2V0SG91cihzdHJIb3VyKTsNCgoJCQkJc3RyTWludXRlID0gZXhEYXRlVGltZS5zdWJzdHJpbmcodFNwMSArIDEsIHRTcDEgKyAzKTsKCQkJCUNhbC5TZXRNaW51dGUoc3RyTWludXRlKTsKCgkJCQlzdHJTZWNvbmQgPSBleERhdGVUaW1lLnN1YnN0cmluZyh0U3AyICsgMSwgdFNwMiArIDMpOwoJCQkJQ2FsLlNldFNlY29uZChzdHJTZWNvbmQpOwoKCQkJfQoJCQllbHNlIGlmIChleERhdGVUaW1lLmluZGV4T2YoIkQqIikgIT09IC0xKQoJCQl7ICAgLy9EVEcKCQkJCXN0ckhvdXIgPSBleERhdGVUaW1lLnN1YnN0cmluZygyLCA0KTsKCQkJCUNhbC5TZXRIb3VyKHN0ckhvdXIpOwoJCQkJc3RyTWludXRlID0gZXhEYXRlVGltZS5zdWJzdHJpbmcoNCwgNik7CgkJCQlDYWwuU2V0TWludXRlKHN0ck1pbnV0ZSk7CgoJCQl9CgkJfQoKCX0KCXNlbERhdGUgPSBuZXcgRGF0ZShDYWwuWWVhciwgQ2FsLk1vbnRoLCBDYWwuRGF0ZSk7Ly92ZXJzaW9uIDEuNwoJUmVuZGVyQ3NzQ2FsKHRydWUpOwp9CgpmdW5jdGlvbiBjbG9zZXdpbihpZCkgewogICAgaWYgKENhbC5TaG93VGltZSA9PT0gdHJ1ZSkgewogICAgICAgIHZhciBNYXhZZWFyID0gZHRUb2RheS5nZXRGdWxsWWVhcigpICsgRW5kWWVhcjsKICAgICAgICB2YXIgYmVmb3JlVG9kYXkgPQogICAgICAgICAgICAgICAgICAgIChDYWwuRGF0ZSA8IGR0VG9kYXkuZ2V0RGF0ZSgpKSAmJgogICAgICAgICAgICAgICAgICAgIChDYWwuTW9udGggPT09IGR0VG9kYXkuZ2V0TW9udGgoKSkgJiYKICAgICAgICAgICAgICAgICAgICAoQ2FsLlllYXIgPT09IGR0VG9kYXkuZ2V0RnVsbFllYXIoKSkKICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgICAgIChDYWwuTW9udGggPCBkdFRvZGF5LmdldE1vbnRoKCkpICYmCiAgICAgICAgICAgICAgICAgICAgKENhbC5ZZWFyID09PSBkdFRvZGF5LmdldEZ1bGxZZWFyKCkpCiAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgICAgICAgICAoQ2FsLlllYXIgPCBkdFRvZGF5LmdldEZ1bGxZZWFyKCkpOwoKICAgICAgICBpZiAoKENhbC5ZZWFyIDw9IE1heFllYXIpICYmIChDYWwuWWVhciA+PSBTdGFydFllYXIpICYmIChDYWwuTW9udGggPT09IHNlbERhdGUuZ2V0TW9udGgoKSkgJiYgKENhbC5ZZWFyID09PSBzZWxEYXRlLmdldEZ1bGxZZWFyKCkpKSB7DQogICAgICAgICAgICBpZiAoQ2FsLkVuYWJsZURhdGVNb2RlID09PSAiZnV0dXJlIikgewogICAgICAgICAgICAgICAgaWYgKGJlZm9yZVRvZGF5ID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGlkLCBDYWwuRm9ybWF0RGF0ZShDYWwuRGF0ZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNhbGxiYWNrKGlkLCBDYWwuRm9ybWF0RGF0ZShDYWwuRGF0ZSkpOwogICAgICAgIH0KICAgIH0KICAgIAoJdmFyIENhbElkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwoJQ2FsSWQuZm9jdXMoKTsKCXdpbkNhbC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7Cn0KCmZ1bmN0aW9uIGNoYW5nZUJvcmRlcihlbGVtZW50LCBjb2wsIG9sZEJnQ29sb3IpCnsKCWlmIChjb2wgPT09IDApCgl7CgkJZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gSG92ZXJDb2xvcjsKCQllbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gImJsYWNrIjsKCQllbGVtZW50LnN0eWxlLmN1cnNvciA9ICJwb2ludGVyIjsKCX0KCgllbHNlCgl7CgkJaWYgKG9sZEJnQ29sb3IpCgkJewoJCQllbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSBvbGRCZ0NvbG9yOwoJCX0KCQllbHNlCgkJewoJCQllbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSAid2hpdGUiOwoJCX0KCQllbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gIndoaXRlIjsKCQllbGVtZW50LnN0eWxlLmN1cnNvciA9ICJhdXRvIjsKCX0KfQoKZnVuY3Rpb24gc2VsZWN0RGF0ZShlbGVtZW50LCBkYXRlKSB7CiAgICBDYWwuRGF0ZSA9IGRhdGU7CiAgICBzZWxEYXRlID0gbmV3IERhdGUoQ2FsLlllYXIsIENhbC5Nb250aCwgQ2FsLkRhdGUpOwogICAgZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gU2VsRGF0ZUNvbG9yOwogICAgUmVuZGVyQ3NzQ2FsKCk7Cn0KCmZ1bmN0aW9uIHBpY2tJdChldnQpCnsKCXZhciBvYmplY3RJRCwKCWRvbSwKCWRlLAoJYjsKCS8vIGFjY2Vzc2VzIHRoZSBlbGVtZW50IHRoYXQgZ2VuZXJhdGVzIHRoZSBldmVudCBhbmQgcmV0cmlldmVzIGl0cyBJRAoJaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpCgl7IC8vIHczYwoJCW9iamVjdElEID0gZXZ0LnRhcmdldC5pZDsKCQlpZiAob2JqZWN0SUQuaW5kZXhPZihjYWxTcGFuSUQpICE9PSAtMSkKCQl7CgkJCWRvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9iamVjdElEKTsKCQkJY25MZWZ0ID0gZXZ0LnBhZ2VYOwoJCQljblRvcCA9IGV2dC5wYWdlWTsKCgkJCWlmIChkb20ub2Zmc2V0TGVmdCkKCQkJewoJCQkJY25MZWZ0ID0gKGNuTGVmdCAtIGRvbS5vZmZzZXRMZWZ0KTsKCQkJCWNuVG9wID0gKGNuVG9wIC0gZG9tLm9mZnNldFRvcCk7CgkJCX0KCQl9CgoJCS8vIGdldCBtb3VzZSBwb3NpdGlvbiBvbiBjbGljawoJCXhwb3MgPSAoZXZ0LnBhZ2VYKTsKCQl5cG9zID0gKGV2dC5wYWdlWSk7Cgl9CgoJZWxzZQoJeyAvLyBJRQoJCW9iamVjdElEID0gZXZlbnQuc3JjRWxlbWVudC5pZDsKCQljbkxlZnQgPSBldmVudC5vZmZzZXRYOwoJCWNuVG9wID0gKGV2ZW50Lm9mZnNldFkpOwoKCQkvLyBnZXQgbW91c2UgcG9zaXRpb24gb24gY2xpY2sKCQlkZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKCQliID0gZG9jdW1lbnQuYm9keTsKCgkJeHBvcyA9IGV2ZW50LmNsaWVudFggKyAoZGUuc2Nyb2xsTGVmdCB8fCBiLnNjcm9sbExlZnQpIC0gKGRlLmNsaWVudExlZnQgfHwgMCk7CgkJeXBvcyA9IGV2ZW50LmNsaWVudFkgKyAoZGUuc2Nyb2xsVG9wIHx8IGIuc2Nyb2xsVG9wKSAtIChkZS5jbGllbnRUb3AgfHwgMCk7Cgl9CgoJLy8gdmVyaWZ5IGlmIHRoaXMgaXMgYSB2YWxpZCBlbGVtZW50IHRvIHBpY2sKCWlmIChvYmplY3RJRC5pbmRleE9mKGNhbFNwYW5JRCkgIT09IC0xKQoJewoJCWRvbVN0eWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob2JqZWN0SUQpLnN0eWxlOwoJfQoKCWlmIChkb21TdHlsZSkKCXsKCQlkb21TdHlsZS56SW5kZXggPSAxMDA7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCWVsc2UKCXsKCQlkb21TdHlsZSA9IG51bGw7CgkJcmV0dXJuOwoJfQp9CgoKCmZ1bmN0aW9uIGRyYWdJdChldnQpCnsKCWlmIChkb21TdHlsZSkKCXsKCQlpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikKCQl7IC8vZm9yIElFCgkJCWRvbVN0eWxlLmxlZnQgPSAoZXZlbnQuY2xpZW50WCAtIGNuTGVmdCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkgKyAncHgnOwoJCQlkb21TdHlsZS50b3AgPSAoZXZlbnQuY2xpZW50WSAtIGNuVG9wICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApICsgJ3B4JzsKCQl9CgkJZWxzZQoJCXsgIC8vRmlyZWZveAoJCQlkb21TdHlsZS5sZWZ0ID0gKGV2dC5jbGllbnRYIC0gY25MZWZ0ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSArICdweCc7CgkJCWRvbVN0eWxlLnRvcCA9IChldnQuY2xpZW50WSAtIGNuVG9wICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApICsgJ3B4JzsKCQl9Cgl9Cn0KCi8vIHBlcmZvcm1zIGEgc2luZ2xlIGluY3JlbWVudCBvciBkZWNyZW1lbnQKZnVuY3Rpb24gbmV4dFN0ZXAod2hhdFNwaW5uZXIsIGRpcmVjdGlvbikKewoJaWYgKHdoYXRTcGlubmVyID09PSAiSG91ciIpCgl7CgkJaWYgKGRpcmVjdGlvbiA9PT0gInBsdXMiKQoJCXsKCQkJQ2FsLlNldEhvdXIoQ2FsLkhvdXJzICsgMSk7CgkJCVJlbmRlckNzc0NhbCgpOwoJCX0KCQllbHNlIGlmIChkaXJlY3Rpb24gPT09ICJtaW51cyIpCgkJewoJCQlDYWwuU2V0SG91cihDYWwuSG91cnMgLSAxKTsKCQkJUmVuZGVyQ3NzQ2FsKCk7CgkJfQoJfQoJZWxzZSBpZiAod2hhdFNwaW5uZXIgPT09ICJNaW51dGUiKQoJewoJCWlmIChkaXJlY3Rpb24gPT09ICJwbHVzIikKCQl7CgkJCUNhbC5TZXRNaW51dGUocGFyc2VJbnQoQ2FsLk1pbnV0ZXMsIDEwKSArIDEpOwoJCQlSZW5kZXJDc3NDYWwoKTsKCQl9CgkJZWxzZSBpZiAoZGlyZWN0aW9uID09PSAibWludXMiKQoJCXsKCQkJQ2FsLlNldE1pbnV0ZShwYXJzZUludChDYWwuTWludXRlcywgMTApIC0gMSk7CgkJCVJlbmRlckNzc0NhbCgpOwoJCX0KCX0KCn0KCi8vIHN0YXJ0cyB0aGUgdGltZSBzcGlubmVyCmZ1bmN0aW9uIHN0YXJ0U3Bpbih3aGF0U3Bpbm5lciwgZGlyZWN0aW9uKQp7Cglkb2N1bWVudC50aGlzTG9vcCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpCgl7CgkJbmV4dFN0ZXAod2hhdFNwaW5uZXIsIGRpcmVjdGlvbik7Cgl9LCAxMjUpOyAvLzEyNSBtcwp9CgovL3N0b3BzIHRoZSB0aW1lIHNwaW5uZXIKZnVuY3Rpb24gc3RvcFNwaW4oKQp7CgljbGVhckludGVydmFsKGRvY3VtZW50LnRoaXNMb29wKTsKfQoKZnVuY3Rpb24gZHJvcEl0KCkKewoJc3RvcFNwaW4oKTsKCglpZiAoZG9tU3R5bGUpCgl7CgkJZG9tU3R5bGUgPSBudWxsOwoJfQp9CgovLyBEZWZhdWx0IGV2ZW50cyBjb25maWd1cmF0aW9uCgpkb2N1bWVudC5vbm1vdXNlZG93biA9IHBpY2tJdDsKZG9jdW1lbnQub25tb3VzZW1vdmUgPSBkcmFnSXQ7CmRvY3VtZW50Lm9ubW91c2V1cCA9IGRyb3BJdDsK]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/demo_datetimepicker.htm</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8dGl0bGU+SmF2YXNjcmlwdCBEYXRlIFRpbWUgUGlja2VyIERlbW8gUGFnZTwvdGl0bGU+CiAgICA8c2NyaXB0IHNyYz0iZGF0ZXRpbWVwaWNrZXJfY3NzLmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjsgbWFyZ2luOjE1MHB4IGF1dG8gMTAwcHggYXV0bzsiPgogICAgICAgIDxsYWJlbCBmb3I9ImRlbW8xIj5QbGVhc2UgZW50ZXIgYSBkYXRlIGhlcmUgJmd0OyZndDsgPC9sYWJlbD4KICAgICAgICA8aW5wdXQgdHlwZT0iVGV4dCIgaWQ9ImRlbW8xIiBtYXhsZW5ndGg9IjI1IiBzaXplPSIyNSIvPgogICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvY2FsLmdpZiIgb25jbGljaz0iamF2YXNjcmlwdDpOZXdDc3NDYWwoJ2RlbW8xJywnZGRtbXl5eXknKSIgc3R5bGU9ImN1cnNvcjpwb2ludGVyIi8+CiAgICA8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/datetimepicker/images/cal.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIAAKVNSkpNpUpNSqWmpdbT1v///////wAAACH5BAEAAAYALAAAAAAQABAAAANEaLrcNjDKKUa4OExYM95DVRTEWJLmKKLseVZELMdADcSrOwK7OqQsXkEIm8lsN0IOqCssW8Cicar8Qa/P5kvA7Xq/ggQAOw==]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/images/cal_close.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAOAPcAAAAAAEBAQICAgNTQyP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAOAAAITwAJCBxIsGAAAgMSKlyoUMBBhhATOkSYEACAhRYlPlSYcUDHARMZWvwIciPGiwtDniSpsiLKjy1JdmwZsaHJmhoJCNjJs2fPAECDCh0KNCAAOw==]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/images/cal_fastforward.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhDQAJAIAAAAAAAP///yH5BAEAAGQALAAAAAANAAkAAAIVjI8JuBnQXjywVXXrvHJK6j2MQyYFADs=]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/images/cal_fastreverse.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhDQAJAIAAAAAAAP///yH5BAEAAGQALAAAAAANAAkAAAIWjI95gJzgAnxTVgNnjrhmdV3NqJRBAQA7]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/images/cal_forward.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhDQAJAIAAAAAAAP///yH5BAEAAGQALAAAAAANAAkAAAIQjI95oArc1ovmzWhpuBTqWAA7]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/images/cal_minus.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODdhDQAJAIAAAAAAAP///ywAAAAADQAJAAACD4yPqRvgDxaM7LFDr948FAA7]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/images/cal_plus.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODdhDQAJAIAAAAAAAP///ywAAAAADQAJAAACDoyPqcsNbYB0cqqKoWYFADs=]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/images/cal_reverse.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhDQAJAIAAAAAAAP///yH5BAEAAGQALAAAAAANAAkAAAIQjI+ZoMttgIRBTmppfJrrVAA7]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/datetimepicker/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/examples/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/examples/formvalidation.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyogCiAqIFRoZXNlIGV4YW1wbGVzIGFyZSBub3QgbWVhbnQgdG8gcnVuIG9uIHRoZWlyIG93biwgYnV0IHRoZXkgd2lsbCBob3BlZnVsbHkKICogZ2l2ZSB5b3Ugc29tZSBpZGVhIG9mIGhvdyB0byB1c2UgdGhlIE5lb01vZHVsZS1mdW5jdGlvbnMgdG8gd3JpdGUgY2xlYW4gY29kZS4KICogCiAqLwoKLyogTkVPX0lOSVQgKi8gZXZhbChORU9fSU5JVCk7IC8qIE5FT19JTklUICovCgokdmFsaWRhdGlvbj1hcnJheSgKICAvL1N0eWxlIHRoZSB2YWxpZGF0aW9uIHBvcHVwcyBhIGJpciBkaWZmZXJlbnRseSB0aGFuIHRoZSBkZWZhdWx0CiAgYXJyYXkoImV4dHJhY3NzIj0+IiNtc2djb250ZW50IHtjb2xvcjpyZWR9OyIpLAogIC8vbWFrZSB0aGUgbmFtZSBmaWVsZCByZXF1aXJlZAogIGFycmF5KCJuYW1lIj0+Im5hbWUiLCJ2YWxpZGF0aW9uIj0+Im5vbmVtcHR5IiwiWW91IG11c3QgcHJvdmlkZSBhIG5hbWUiKSwKICAvL21ha2UgdGhlIGVtYWlsIGZpZWxkIHZhbGlkYXRlIGZvciBwcm9wZXJseSBmb3JtYXR0ZWQgYWRkcmVzcwogIGFycmF5KCJuYW1lIj0+ImVtYWlsIiwidmFsaWRhdGlvbiI9PiJ2YWxpZGVtYWlsIiwiWW91IG11c3QgcHJvdmlkZSBhIHZhbGlkIGVtYWlsIiksCiAgLy9tYWtlIHRoZSBwaG9uZSBmaWVsZCBoYXZlIGF0IGxlYXN0IDggY2hhcmFjdGVycwogIGFycmF5KCJuYW1lIj0+InBob25lIiwidmFsaWRhdGlvbiI9PiJtaW5sZW5ndGgiLCJZb3UgbXVzdCBwcm92aWRlIGEgcGhvbmVudW1lciBvZiBhdCBsZWFzdCA4IGNoYXJzIiksCik7CiR0aGlzLT5TbWFydHlGb3JtU3RhcnQoImZvcm1zdGFydCIsCiAgYXJyYXkoCiAgICAiYWN0aW9uIj0+ImhhbmRsZWRhdGEiLAogICAgInZhbGlkYXRpb24iPT4kdmFsaWRhdGlvbgogICkKKTsKJHRoaXMtPlNtYXJ0eUZvcm1FbmQoImZvcm1lbmQiKTsKJHRoaXMtPlNtYXJ0eUlucHV0VGV4dCgibmFtZSIsYXJyYXkoInNpemUiPT4iNDAiKSk7CiR0aGlzLT5TbWFydHlJbnB1dFRleHQoImVtYWlsIixhcnJheSgic2l6ZSI9PiI0MCIpKTsKJHRoaXMtPlNtYXJ0eUlucHV0VGV4dCgicGhvbmUiLGFycmF5KCJzaXplIj0+IjE2IikpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCJteXRlbXBsYXRlLnRwbCIpCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/examples/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/formmessages/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/formmessages/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/formmessages/messages.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gZm9ybSB2YWxpZGF0aW9uIGZ1bmN0aW9uIC8vCi8qZnVuY3Rpb24gdmFsaWRhdGUoZm9ybSkgewogIHZhciBuYW1lID0gZm9ybS5uYW1lLnZhbHVlOwogIHZhciBlbWFpbCA9IGZvcm0uZW1haWwudmFsdWU7CiAgdmFyIGdlbmRlciA9IGZvcm0uZ2VuZGVyLnZhbHVlOwogIHZhciBtZXNzYWdlID0gZm9ybS5tZXNzYWdlLnZhbHVlOwogIHZhciBuYW1lUmVnZXggPSAvXlthLXpBLVpdKygoW1wnXCxcLlwtIF1bYS16QS1aIF0pP1thLXpBLVpdKikqJC87CiAgdmFyIGVtYWlsUmVnZXggPSAvXltcdy1cLl0rQChbXHctXStcLikrW1x3LV17Miw0fSQvOwogIHZhciBtZXNzYWdlUmVnZXggPSBuZXcgUmVnRXhwKC88XC8/XHcrKChccytcdysoXHMqPVxzKig/OiIuKj8ifCcuKj8nfFteJyI+XHNdKykpPykrXHMqfFxzKilcLz8+L2dpbSk7CiAgaWYobmFtZSA9PSAiIikgewogICAgaW5saW5lTXNnKCduYW1lJywnWW91IG11c3QgZW50ZXIgeW91ciBuYW1lLicsMik7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmKCFuYW1lLm1hdGNoKG5hbWVSZWdleCkpIHsKICAgIGlubGluZU1zZygnbmFtZScsJ1lvdSBoYXZlIGVudGVyZWQgYW4gaW52YWxpZCBuYW1lLicsMik7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmKGVtYWlsID09ICIiKSB7CiAgICBpbmxpbmVNc2coJ2VtYWlsJywnPHN0cm9uZz5FcnJvcjwvc3Ryb25nPjxiciAvPllvdSBtdXN0IGVudGVyIHlvdXIgZW1haWwuJywyKTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYoIWVtYWlsLm1hdGNoKGVtYWlsUmVnZXgpKSB7CiAgICBpbmxpbmVNc2coJ2VtYWlsJywnPHN0cm9uZz5FcnJvcjwvc3Ryb25nPjxiciAvPllvdSBoYXZlIGVudGVyZWQgYW4gaW52YWxpZCBlbWFpbC4nLDIpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZihnZW5kZXIgPT0gIiIpIHsKICAgIGlubGluZU1zZygnZ2VuZGVyJywnPHN0cm9uZz5FcnJvcjwvc3Ryb25nPjxiciAvPllvdSBtdXN0IHNlbGVjdCB5b3VyIGdlbmRlci4nLDIpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZihtZXNzYWdlID09ICIiKSB7CiAgICBpbmxpbmVNc2coJ21lc3NhZ2UnLCdZb3UgbXVzdCBlbnRlciBhIG1lc3NhZ2UuJyk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmKG1lc3NhZ2UubWF0Y2gobWVzc2FnZVJlZ2V4KSkgewogICAgaW5saW5lTXNnKCdtZXNzYWdlJywnWW91IGhhdmUgZW50ZXJlZCBhbiBpbnZhbGlkIG1lc3NhZ2UuJyk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9Ki8KCi8vIFNUQVJUIE9GIE1FU1NBR0UgU0NSSVBUIC8vCgp2YXIgTVNHVElNRVIgPSAyMDsKdmFyIE1TR1NQRUVEID0gNTsKdmFyIE1TR09GRlNFVCA9IDM7CnZhciBNU0dISURFID0gMzsKCi8vIGJ1aWxkIG91dCB0aGUgZGl2cywgc2V0IGF0dHJpYnV0ZXMgYW5kIGNhbGwgdGhlIGZhZGUgZnVuY3Rpb24gLy8KZnVuY3Rpb24gaW5saW5lTXNnKHRhcmdldCxzdHJpbmcsYXV0b2hpZGUpIHsKICB2YXIgbXNnOwogIHZhciBtc2djb250ZW50OwogIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXNnJykpIHsKICAgIG1zZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgbXNnLmlkID0gJ21zZyc7CiAgICBtc2djb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBtc2djb250ZW50LmlkID0gJ21zZ2NvbnRlbnQnOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtc2cpOwogICAgbXNnLmFwcGVuZENoaWxkKG1zZ2NvbnRlbnQpOwogICAgbXNnLnN0eWxlLmZpbHRlciA9ICdhbHBoYShvcGFjaXR5PTApJzsKICAgIG1zZy5zdHlsZS5vcGFjaXR5ID0gMDsKICAgIG1zZy5hbHBoYSA9IDA7CiAgfSBlbHNlIHsKICAgIG1zZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtc2cnKTsKICAgIG1zZ2NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXNnY29udGVudCcpOwogIH0KICBtc2djb250ZW50LmlubmVySFRNTCA9IHN0cmluZzsKICBtc2cuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgdmFyIG1zZ2hlaWdodCA9IG1zZy5vZmZzZXRIZWlnaHQ7CiAgdmFyIHRhcmdldGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldCk7CiAgdGFyZ2V0ZGl2LmZvY3VzKCk7CiAgdmFyIHRhcmdldGhlaWdodCA9IHRhcmdldGRpdi5vZmZzZXRIZWlnaHQ7CiAgdmFyIHRhcmdldHdpZHRoID0gdGFyZ2V0ZGl2Lm9mZnNldFdpZHRoOwogIHZhciB0b3Bwb3NpdGlvbiA9IHRvcFBvc2l0aW9uKHRhcmdldGRpdikgLSAoKG1zZ2hlaWdodCAtIHRhcmdldGhlaWdodCkgLyAyKTsKICB2YXIgbGVmdHBvc2l0aW9uID0gbGVmdFBvc2l0aW9uKHRhcmdldGRpdikgKyB0YXJnZXR3aWR0aCArIE1TR09GRlNFVDsKICBtc2cuc3R5bGUudG9wID0gdG9wcG9zaXRpb24gKyAncHgnOwogIG1zZy5zdHlsZS5sZWZ0ID0gbGVmdHBvc2l0aW9uICsgJ3B4JzsKICBjbGVhckludGVydmFsKG1zZy50aW1lcik7CiAgbXNnLnRpbWVyID0gc2V0SW50ZXJ2YWwoImZhZGVNc2coMSkiLCBNU0dUSU1FUik7CiAgaWYoIWF1dG9oaWRlKSB7CiAgICBhdXRvaGlkZSA9IE1TR0hJREU7ICAKICB9CiAgd2luZG93LnNldFRpbWVvdXQoImhpZGVNc2coKSIsIChhdXRvaGlkZSAqIDEwMDApKTsKfQoKLy8gaGlkZSB0aGUgZm9ybSBhbGVydCAvLwpmdW5jdGlvbiBoaWRlTXNnKG1zZykgewogIHZhciBtc2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXNnJyk7CiAgaWYoIW1zZy50aW1lcikgewogICAgbXNnLnRpbWVyID0gc2V0SW50ZXJ2YWwoImZhZGVNc2coMCkiLCBNU0dUSU1FUik7CiAgfQp9CgovLyBmYWNlIHRoZSBtZXNzYWdlIGJveCAvLwpmdW5jdGlvbiBmYWRlTXNnKGZsYWcpIHsKICBpZihmbGFnID09IG51bGwpIHsKICAgIGZsYWcgPSAxOwogIH0KICB2YXIgbXNnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21zZycpOwogIHZhciB2YWx1ZTsKICBpZihmbGFnID09IDEpIHsKICAgIHZhbHVlID0gbXNnLmFscGhhICsgTVNHU1BFRUQ7CiAgfSBlbHNlIHsKICAgIHZhbHVlID0gbXNnLmFscGhhIC0gTVNHU1BFRUQ7CiAgfQogIG1zZy5hbHBoYSA9IHZhbHVlOwogIG1zZy5zdHlsZS5vcGFjaXR5ID0gKHZhbHVlIC8gMTAwKTsKICBtc2cuc3R5bGUuZmlsdGVyID0gJ2FscGhhKG9wYWNpdHk9JyArIHZhbHVlICsgJyknOwogIGlmKHZhbHVlID49IDk5KSB7CiAgICBjbGVhckludGVydmFsKG1zZy50aW1lcik7CiAgICBtc2cudGltZXIgPSBudWxsOwogIH0gZWxzZSBpZih2YWx1ZSA8PSAxKSB7CiAgICBtc2cuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGNsZWFySW50ZXJ2YWwobXNnLnRpbWVyKTsKICB9Cn0KCi8vIGNhbGN1bGF0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgaW4gcmVsYXRpb24gdG8gdGhlIGxlZnQgb2YgdGhlIGJyb3dzZXIgLy8KZnVuY3Rpb24gbGVmdFBvc2l0aW9uKHRhcmdldCkgewogIHZhciBsZWZ0ID0gMDsKICBpZih0YXJnZXQub2Zmc2V0UGFyZW50KSB7CiAgICB3aGlsZSgxKSB7CiAgICAgIGxlZnQgKz0gdGFyZ2V0Lm9mZnNldExlZnQ7CiAgICAgIGlmKCF0YXJnZXQub2Zmc2V0UGFyZW50KSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdGFyZ2V0ID0gdGFyZ2V0Lm9mZnNldFBhcmVudDsKICAgIH0KICB9IGVsc2UgaWYodGFyZ2V0LngpIHsKICAgIGxlZnQgKz0gdGFyZ2V0Lng7CiAgfQogIHJldHVybiBsZWZ0Owp9CgovLyBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHJlbGF0aW9uIHRvIHRoZSB0b3Agb2YgdGhlIGJyb3dzZXIgd2luZG93IC8vCmZ1bmN0aW9uIHRvcFBvc2l0aW9uKHRhcmdldCkgewogIHZhciB0b3AgPSAwOwogIGlmKHRhcmdldC5vZmZzZXRQYXJlbnQpIHsKICAgIHdoaWxlKDEpIHsKICAgICAgdG9wICs9IHRhcmdldC5vZmZzZXRUb3A7CiAgICAgIGlmKCF0YXJnZXQub2Zmc2V0UGFyZW50KSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdGFyZ2V0ID0gdGFyZ2V0Lm9mZnNldFBhcmVudDsKICAgIH0KICB9IGVsc2UgaWYodGFyZ2V0LnkpIHsKICAgIHRvcCArPSB0YXJnZXQueTsKICB9CiAgcmV0dXJuIHRvcDsKfQoKLy8gcHJlbG9hZCB0aGUgYXJyb3cgLy8KaWYoZG9jdW1lbnQuaW1hZ2VzKSB7CiAgYXJyb3cgPSBuZXcgSW1hZ2UoNyw4MCk7IAogIGFycm93LnNyYyA9ICJpbWFnZXMvbXNnX2Fycm93LmdpZiI7IAp9]]></data>
	</file>
	<file>
	  <filename>/formvalidation.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGRpZSgpOwoKJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwppZiAoISRhbHJlYWR5dXNlZCkgewogICRvdXRwdXQuPSc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4gJGNvbmZpZ1sicm9vdF91cmwiXSAuICcvbW9kdWxlcy9OZW9Nb2R1bGUvZm9ybW1lc3NhZ2VzL21lc3NhZ2VzLmpzIj48L3NjcmlwdD4KJzsKICAvL2luamVjdENTUygiI21zZyB7ZGlzcGxheTpub25lOyBwb3NpdGlvbjphYnNvbHV0ZTsgei1pbmRleDoyMDA7IGJhY2tncm91bmQ6dXJsKCcgLiAkY29uZmlnWyJyb290X3VybCJdIC4gJy9tb2R1bGVzL05lb01vZHVsZS9mb3JtbWVzc2FnZXMvbXNnX2Fycm93LmdpZikgbGVmdCBjZW50ZXIgbm8tcmVwZWF0OyBwYWRkaW5nLWxlZnQ6N3B4fSIpOwppZiAoIWlzX2FycmF5KCRmaWVsZHMpKSByZXR1cm47CmZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkKSB7CiAgaWYgKGlzc2V0KCRmaWVsZFsiZXh0cmFjc3MiXSkpIHsKICAgICR0aGlzLT5fZXh0cmF2YWxpZGF0aW9uY3NzLj0kZmllbGRbImV4dHJhY3NzIl07CiAgfQp9Cgokb3V0cHV0Lj0nCjxzY3JpcHQgdHlwZT0idGV4dC9KYXZhU2NyaXB0Ij4KICB2YXIgaWdub3JldmFsaWRhdGlvbj1mYWxzZTsKPC9zY3JpcHQ+Cgo8c2NyaXB0IHR5cGU9InRleHQvSmF2YVNjcmlwdCI+CmZ1bmN0aW9uIGluamVjdENTUyhjc3NDb2RlKSB7CiAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgc3R5bGVFbGVtZW50LnR5cGUgPSAidGV4dC9jc3MiOwogIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkgewogICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc0NvZGU7CiAgfSBlbHNlIHsKICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3NDb2RlKSk7CiAgfQogIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsKfQo8L3NjcmlwdD4KCjxzY3JpcHQgdHlwZT0idGV4dC9KYXZhU2NyaXB0Ij4KICBpbmplY3RDU1MoIiNtc2cge2Rpc3BsYXk6bm9uZTsgcG9zaXRpb246YWJzb2x1dGU7IHotaW5kZXg6MjAwOyBwYWRkaW5nLWxlZnQ6N3B4fSIpOwogIGluamVjdENTUygiI21zZ2NvbnRlbnQge2Rpc3BsYXk6YmxvY2s7IGJhY2tncm91bmQ6I2YzZTZlNjsgYm9yZGVyOjJweCBzb2xpZCAjOTkwMDAwOyBwYWRkaW5nOjVweDsgbWluLXdpZHRoOjE1MHB4OyBtYXgtd2lkdGg6MjUwcHh9Iik7Cjwvc2NyaXB0PgonOwoKaWYgKCR0aGlzLT5fZXh0cmF2YWxpZGF0aW9uY3NzIT0iIikgewogJG91dHB1dC49JwoKPHNjcmlwdCB0eXBlPSJ0ZXh0L0phdmFTY3JpcHQiPgogIGluamVjdENTUygiJy4kdGhpcy0+X2V4dHJhdmFsaWRhdGlvbmNzcy4nIik7Cjwvc2NyaXB0PgoKJzsKfQoKCiRvdXRwdXQuPSc8c2NyaXB0IHR5cGU9InRleHQvSmF2YVNjcmlwdCI+CmZ1bmN0aW9uIG5lb3RyaW0oc3RyKSB7CiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXHMrfFxzKyQvZywgXCdcJyk7Cn0KCmZ1bmN0aW9uIGlzTnVtYmVyKG4pIHsKICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pOwp9Cjwvc2NyaXB0PgonOwogICRhbHJlYWR5dXNlZCA9IHRydWU7Cn0KCiRvdXRwdXQuPSI8c2NyaXB0IHR5cGU9J3RleHQvSmF2YVNjcmlwdCc+CiI7CiRvdXRwdXQuPScKZnVuY3Rpb24gTmVvVmFsaWRhdGVGb3JtJyAuICR2YWxpZGF0aW9uY291bnQgLiAnKHRoaXNmb3JtKSB7CiAgaWYgKGlnbm9yZXZhbGlkYXRpb24pIHJldHVybiB0cnVlOwogIHZhciBlbWFpbFJlZ2V4ID0gL15bXHctXC5dK0AoW1x3LV0rXC4pK1tcdy1dezIsNH0kLzsKJzsKJHZhbGlkYXRpb25zdHJpbmcgPSAicmV0dXJuIGZhbHNlOyI7CiRyZXR1cm5zdHJpbmcgPSAicmV0dXJuIHRydWU7IjsKaWYgKCR0aGlzLT5fZnVsbHZhbGlkYXRpb24pIHsKICAkb3V0cHV0Lj0nCiAgdmFyIHZhbGlkYXRlZCA9IHRydWU7Cic7CiAgJHZhbGlkYXRpb25zdHJpbmcgPSAidmFsaWRhdGVkID0gZmFsc2U7IjsKICAkcmV0dXJuc3RyaW5nID0gInJldHVybiB2YWxpZGF0ZWQ7IjsKfQokb3V0cHV0Lj0nCiAgd2l0aCAodGhpc2Zvcm0pIHsKJzsKZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpIHsKICBpZiAoIWlzc2V0KCRmaWVsZFsibmFtZSJdKSkgY29udGludWU7CiAgJGZpZWxkaWQgPSAkdGhpcy0+X2lkIC4gJGZpZWxkWyJuYW1lIl07CiAgc3dpdGNoICgkZmllbGRbInZhbGlkYXRpb24iXSkgewoKICAgIGNhc2UgIm5vbmVtcHR5IiA6IHsKICAgICAgICAkb3V0cHV0Lj0nCiAgICBpZiAobmVvdHJpbSgnIC4gJGZpZWxkaWQgLiAnLnZhbHVlKT09IiIpIHsKICAgICAgaW5saW5lTXNnKCInIC4gJGZpZWxkaWQgLiAnIiwiJyAuICRmaWVsZFsibWVzc2FnZSJdIC4gJyIsMTApOwogICAgICAnIC4gJHZhbGlkYXRpb25zdHJpbmcgLiAnCiAgICB9JzsKICAgICAgICBicmVhazsKICAgICAgfQogICAgY2FzZSAiZW1wdHkiIDogewogICAgICAkb3V0cHV0Lj0nCiAgICBpZiAobmVvdHJpbSgnIC4gJGZpZWxkaWQgLiAnLnZhbHVlKSE9IiIpIHsKICAgICAgaW5saW5lTXNnKCInIC4gJGZpZWxkaWQgLiAnIiwiJyAuICRmaWVsZFsibWVzc2FnZSJdIC4gJyIsMTApOwogICAgICAnIC4gJHZhbGlkYXRpb25zdHJpbmcgLiAnCiAgICB9JzsKICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSAibnVtZXJpYyIgOiB7CiAgICAgICRvdXRwdXQuPScKICAgIGlmICghaXNOdW1iZXIobmVvdHJpbSgnIC4gJGZpZWxkaWQgLiAnLnZhbHVlKSkpIHsKICAgICAgaW5saW5lTXNnKCInIC4gJGZpZWxkaWQgLiAnIiwiJyAuICRmaWVsZFsibWVzc2FnZSJdIC4gJyIsMTApOwogICAgICAnIC4gJHZhbGlkYXRpb25zdHJpbmcgLiAnCiAgICB9JzsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlICJudW1lcmljb3JlbXB0eSIgOiB7CiAgICAgICRvdXRwdXQuPScKICAgIGlmICghaXNOdW1iZXIobmVvdHJpbSgnIC4gJGZpZWxkaWQgLiAnLnZhbHVlKSkgJiYgKG5lb3RyaW0oJyAuICRmaWVsZGlkIC4gJy52YWx1ZSkhPSIiKSkgewogICAgICBpbmxpbmVNc2coIicgLiAkZmllbGRpZCAuICciLCInIC4gJGZpZWxkWyJtZXNzYWdlIl0gLiAnIiwxMCk7CiAgICAgICcgLiAkdmFsaWRhdGlvbnN0cmluZyAuICcKICAgIH0nOwogICAgICBicmVhazsKICAgIH0KICAgIGNhc2UgInZhbGlkZW1haWwiIDogewogICAgICAgICRvdXRwdXQuPScKICAgIGlmICghJyAuICRmaWVsZGlkIC4gJy52YWx1ZS5tYXRjaChlbWFpbFJlZ2V4KSkgewogICAgICBpbmxpbmVNc2coIicgLiAkZmllbGRpZCAuICciLCInIC4gJGZpZWxkWyJtZXNzYWdlIl0gLiAnIiwxMCk7CiAgICAgICcgLiAkdmFsaWRhdGlvbnN0cmluZyAuICcKICAgIH0nOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICBjYXNlICJtaW5sZW5ndGgiIDogewogICAgICAgICRvdXRwdXQuPScKICAgIGlmIChuZW90cmltKCcgLiAkZmllbGRpZCAuICcudmFsdWUpLmxlbmd0aDwnIC4gJGZpZWxkWyJsZW5ndGgiXSAuICcpIHsKICAgICAgaW5saW5lTXNnKCInIC4gJGZpZWxkaWQgLiAnIiwiJyAuICRmaWVsZFsibWVzc2FnZSJdIC4gJyIsMTApOwogICAgICAnIC4gJHZhbGlkYXRpb25zdHJpbmcgLiAnCiAgICB9JzsKICAgICAgICBicmVhazsKICAgICAgfQogICAgY2FzZSAibWF4bGVuZ3RoIiA6IHsKICAgICAgICAkb3V0cHV0Lj0nCiAgICBpZiAobmVvdHJpbSgnIC4gJGZpZWxkaWQgLiAnLnZhbHVlKS5sZW5ndGg+JyAuICRmaWVsZFsibGVuZ3RoIl0gLiAnKSB7CiAgICAgIGlubGluZU1zZygiJyAuICRmaWVsZGlkIC4gJyIsIicgLiAkZmllbGRbIm1lc3NhZ2UiXSAuICciLDEwKTsKICAgICAgJyAuICR2YWxpZGF0aW9uc3RyaW5nIC4gJwogICAgfSc7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIGNhc2UgImV4YWN0bGVuZ3RoIiA6IHsKICAgICAgICAkb3V0cHV0Lj0nCiAgICBpZiAobmVvdHJpbSgnIC4gJGZpZWxkaWQgLiAnLnZhbHVlKS5sZW5ndGghPScgLiAkZmllbGRbImxlbmd0aCJdIC4gJykgewogICAgICBpbmxpbmVNc2coIicgLiAkZmllbGRpZCAuICciLCInIC4gJGZpZWxkWyJtZXNzYWdlIl0gLiAnIiwxMCk7CiAgICAgICcgLiAkdmFsaWRhdGlvbnN0cmluZyAuICcKICAgIH0nOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICBjYXNlICJjaGVja2VkIiA6IHsKICAgICAgICAkb3V0cHV0Lj0nCiAgICAgICAgCiAgICBpZiAoJyAuICRmaWVsZGlkIC4gJy5jaGVja2VkID09IGZhbHNlKSB7CiAgICAvL2FsZXJ0KCJoaSIpOwogICAgICBpbmxpbmVNc2coIicgLiAkZmllbGRpZCAuICciLCInIC4gJGZpZWxkWyJtZXNzYWdlIl0gLiAnIiwxMCk7CiAgICAgICcgLiAkdmFsaWRhdGlvbnN0cmluZyAuICcKICAgIH0nOwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgY2FzZSAidW5jaGVja2VkIiA6IHsKICAgICAgICAkb3V0cHV0Lj0nCiAgICBpZiAoJyAuICRmaWVsZGlkIC4gJy5jaGVja2VkID09IHRydWUpIHsKICAgICAgaW5saW5lTXNnKCInIC4gJGZpZWxkaWQgLiAnIiwiJyAuICRmaWVsZFsibWVzc2FnZSJdIC4gJyIsMTApOwogICAgICAnIC4gJHZhbGlkYXRpb25zdHJpbmcgLiAnCiAgICB9JzsKICAgICAgICBicmVhazsKICAgICAgfQoKCiAgICBjYXNlICJkcm9wZG93bl9ub25lbXB0eSIgOiB7CiAgICAgICRvdXRwdXQuPScKICAgIGlmICgnLiRmaWVsZGlkLicoJy4kZmllbGRpZC4nLnNlbGVjdGVkSW5kZXgpLnZhbHVlPT0iIikgewogICAgICBpbmxpbmVNc2coIicgLiAkZmllbGRpZCAuICciLCInIC4gJGZpZWxkWyJtZXNzYWdlIl0gLiAnIiwxMCk7CiAgICAgICcgLiAkdmFsaWRhdGlvbnN0cmluZyAuICcKICAgIH0nOwogICAgICBicmVhazsKICAgICAgfQogICAgY2FzZSAiZHJvcGRvd25fZW1wdHkiIDogewogICAgICAkb3V0cHV0Lj0nCiAgICBpZiAoJy4kZmllbGRpZC4nKCcuJGZpZWxkaWQuJy5zZWxlY3RlZEluZGV4KS52YWx1ZSE9IiIpIHsKICAgICAgaW5saW5lTXNnKCInIC4gJGZpZWxkaWQgLiAnIiwiJyAuICRmaWVsZFsibWVzc2FnZSJdIC4gJyIsMTApOwogICAgICAnIC4gJHZhbGlkYXRpb25zdHJpbmcgLiAnCiAgICB9JzsKICAgICAgYnJlYWs7CiAgICB9CiAgICBjYXNlICJkcm9wZG93bl9ub3RmaXJzdCIgOiB7CiAgICAgICRvdXRwdXQuPScKICAgIGlmICgnLiRmaWVsZGlkLicuc2VsZWN0ZWRJbmRleD09MCkgewogICAgICBpbmxpbmVNc2coIicgLiAkZmllbGRpZCAuICciLCInIC4gJGZpZWxkWyJtZXNzYWdlIl0gLiAnIiwxMCk7CiAgICAgICcgLiAkdmFsaWRhdGlvbnN0cmluZyAuICcKICAgIH0nOwogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlICJyYWRpb19ub25lc2VsZWN0ZWQiIDogewogICAgICAkb3V0cHV0Lj0nCiAgICB2YXIgb25lc2VsZWN0ZWQgPSBmYWxzZTsKICAgIGZvciAodmFyIGk9MDsgaTwnLiRmaWVsZGlkLicubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCcuJGZpZWxkaWQuJ1snLmkuJ10uY2hlY2tlZCkgewogICAgICAgIG9uZXNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFvbmVzZWxlY3RlZCkgewogICAgICBpbmxpbmVNc2coIicgLiAkZmllbGRpZCAuICcxIiwiJyAuICRmaWVsZFsibWVzc2FnZSJdIC4gJyIsMTApOwogICAgICAnIC4gJHZhbGlkYXRpb25zdHJpbmcgLiAnCiAgICB9JzsKICAgICAgYnJlYWs7CiAgICB9CgogICAgY2FzZSAibm90ZXF1YWwiIDogewogICAgICBpZiAoaXNzZXQoJGZpZWxkWyJ2YWx1ZSJdKSkgewogICAgICAgICRvdXRwdXQuPScKICAgIGlmIChuZW90cmltKCcgLiAkZmllbGRpZCAuICcudmFsdWUpPT0iJy4gdHJpbSgkZmllbGRbInZhbHVlIl0pLiciKSB7CiAgICAgIGlubGluZU1zZygiJyAuICRmaWVsZGlkIC4gJyIsIicgLiAkZmllbGRbIm1lc3NhZ2UiXSAuICciLDEwKTsKICAgICAgJyAuICR2YWxpZGF0aW9uc3RyaW5nIC4gJwogICAgfSc7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGlmIChpc3NldCgkZmllbGRbInZhbHVlcyJdKSkgewogICAgICAgIGZvcmVhY2goJGZpZWxkWyJ2YWx1ZXMiXSBhcyAkdmFsdWUpIHsKICAgICAgICAkb3V0cHV0Lj0nCiAgICBpZiAobmVvdHJpbSgnIC4gJGZpZWxkaWQgLiAnLnZhbHVlKT09IicgLiB0cmltKCR2YWx1ZSkgLiAnIikgewogICAgICBpbmxpbmVNc2coIicgLiAkZmllbGRpZCAuICciLCInIC4gJGZpZWxkWyJtZXNzYWdlIl0gLiAnIiwxMCk7CiAgICAgICcgLiAkdmFsaWRhdGlvbnN0cmluZyAuICcKICAgIH0nOwogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlICJlcXVhbCIgOiB7CiAgICAgIGlmIChpc3NldCgkZmllbGRbInZhbHVlIl0pKSB7CiAgICAgICAgJG91dHB1dC49JwogICAgaWYgKG5lb3RyaW0oJyAuICRmaWVsZGlkIC4gJy52YWx1ZSkhPSInLiB0cmltKCRmaWVsZFsidmFsdWUiXSkuJyIpIHsKICAgICAgaW5saW5lTXNnKCInIC4gJGZpZWxkaWQgLiAnIiwiJyAuICRmaWVsZFsibWVzc2FnZSJdIC4gJyIsMTApOwogICAgICAnIC4gJHZhbGlkYXRpb25zdHJpbmcgLiAnCiAgICB9JzsKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgaWYgKGlzc2V0KCRmaWVsZFsidmFsdWVzIl0pKSB7CiAgICAgICAgZm9yZWFjaCgkZmllbGRbInZhbHVlcyJdIGFzICR2YWx1ZSkgewogICAgICAgICRvdXRwdXQuPScKICAgIGlmIChuZW90cmltKCcgLiAkZmllbGRpZCAuICcudmFsdWUpIT0iJyAuIHRyaW0oJHZhbHVlKSAuICciKSB7CiAgICAgIGlubGluZU1zZygiJyAuICRmaWVsZGlkIC4gJyIsIicgLiAkZmllbGRbIm1lc3NhZ2UiXSAuICciLDEwKTsKICAgICAgJyAuICR2YWxpZGF0aW9uc3RyaW5nIC4gJwogICAgfSc7CiAgICAgICAgfQogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNhc2UgImlkZW50aWNhbCIgOiB7CiAgICAgICRmaWVsZGlkMiA9ICR0aGlzLT5faWQgLiAkZmllbGRbIm5hbWUyIl07CiAgICAgICAgJG91dHB1dC49JwogICAgaWYgKG5lb3RyaW0oJyAuICRmaWVsZGlkIC4gJy52YWx1ZSkhPW5lb3RyaW0oJyAuICRmaWVsZGlkMiAuICcudmFsdWUpKSB7CiAgICAgIGlubGluZU1zZygiJyAuICRmaWVsZGlkMiAuICciLCInIC4gJGZpZWxkWyJtZXNzYWdlIl0gLiAnIiwxMCk7CiAgICAgICcgLiAkdmFsaWRhdGlvbnN0cmluZyAuICcKICAgIH0nOwogICAgICAgIGJyZWFrOwogICAgfQoKICB9Cn0KJG91dHB1dC49IgogIH0KICAiIC4gJHJldHVybnN0cmluZyAuICIKfQo8L3NjcmlwdD5cblxuIjsKJGV4dHJhID0gIm9uc3VibWl0PSdyZXR1cm4gTmVvVmFsaWRhdGVGb3JtIiAuICR2YWxpZGF0aW9uY291bnQgLiAiKHRoaXMpOyciOwokZnVuY3Rpb25jYWxsID0gIk5lb1ZhbGlkYXRlRm9ybSIgLiAkdmFsaWRhdGlvbmNvdW50IC4gIih0aGlzKSI7CiR2YWxpZGF0aW9uY291bnQrKzsKPz4K]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbIm1vbmRheSJdPSJNb25kYXkiOwokbGFuZ1sidHVlc2RheSJdPSJUdWVzZGF5IjsKJGxhbmdbIndlZG5lc2RheSJdPSJXZWRuZXNkYXkiOwokbGFuZ1sidGh1cnNkYXkiXT0iVGh1cnNkYXkiOwokbGFuZ1siZnJpZGF5Il09IkZyaWRheSI7CiRsYW5nWyJzYXR1cmRheSJdPSJTYXR1cmRheSI7CiRsYW5nWyJzdW5kYXkiXT0iU3VuZGF5IjsKCiRsYW5nWyJqYW51YXJ5Il09IkphbnVhcnkiOwokbGFuZ1siZmVicnVhcnkiXT0iRmVicnVhcnkiOwokbGFuZ1sibWFyY2giXT0iTWFyY2giOwokbGFuZ1siYXByaWwiXT0iQXByaWwiOwokbGFuZ1sibWF5Il09Ik1heSI7CiRsYW5nWyJqdW5lIl09Ikp1bmUiOwokbGFuZ1sianVseSJdPSJKdWx5IjsKJGxhbmdbImF1Z3VzdCJdPSJBdWd1c3QiOwokbGFuZ1sic2VwdGVtYmVyIl09IlNlcHRlbWJlciI7CiRsYW5nWyJvY3RvYmVyIl09Ik9jdG9iZXIiOwokbGFuZ1sibm92ZW1iZXIiXT0iTm92ZW1iZXIiOwokbGFuZ1siZGVjZW1iZXIiXT0iRGVjZW1iZXIiOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/da_DK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ21vbmRheSddID0gJ21hbmRhZyc7CiRsYW5nWyd0dWVzZGF5J10gPSAndGlyc2RhZyc7CiRsYW5nWyd3ZWRuZXNkYXknXSA9ICdvbnNkYWcnOwokbGFuZ1sndGh1cnNkYXknXSA9ICd0b3JzZGFnJzsKJGxhbmdbJ2ZyaWRheSddID0gJ2ZyZWRhZyc7CiRsYW5nWydzYXR1cmRheSddID0gJ2wmb3NsYXNoO3JkYWcnOwokbGFuZ1snc3VuZGF5J10gPSAncyZvc2xhc2g7bmRhZyc7CiRsYW5nWydqYW51YXJ5J10gPSAnamFudWFyJzsKJGxhbmdbJ2ZlYnJ1YXJ5J10gPSAnZmVicnVhcic7CiRsYW5nWydtYXJjaCddID0gJ21hcnRzJzsKJGxhbmdbJ2FwcmlsJ10gPSAnYXByaWwnOwokbGFuZ1snbWF5J10gPSAnbWFqJzsKJGxhbmdbJ2p1bmUnXSA9ICdqdW5pJzsKJGxhbmdbJ2p1bHknXSA9ICdqdWxpJzsKJGxhbmdbJ2F1Z3VzdCddID0gJ2F1Z3VzdCc7CiRsYW5nWydzZXB0ZW1iZXInXSA9ICdzZXB0ZW1iZXInOwokbGFuZ1snb2N0b2JlciddID0gJ29rdG9iZXInOwokbGFuZ1snbm92ZW1iZXInXSA9ICdub3ZlbWJlcic7CiRsYW5nWydkZWNlbWJlciddID0gJ2RlY2VtYmVyJzsKJGxhbmdbJ3FjYSddID0gJzEyMjk2MDE3OTAtODUyNDMxOTctNDMyNjA3MTMnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4zODk2ODQzOTQuMTMwMTE0MjE0MC4xMzAxMTQyMTQwLjEzMDEyNTQ2OTcuMic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDExNDIxNDAuMS4xLnV0bWNzcj0oZGlyZWN0KXx1dG1jY249KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/it_IT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ21vbmRheSddID0gJ0x1bmVkw6wnOwokbGFuZ1sndHVlc2RheSddID0gJ01hcnRlZMOsJzsKJGxhbmdbJ3dlZG5lc2RheSddID0gJ01lcmNvbGVkw6wnOwokbGFuZ1sndGh1cnNkYXknXSA9ICdHaW92ZWTDrCc7CiRsYW5nWydmcmlkYXknXSA9ICdWZW5lcmTDrCc7CiRsYW5nWydzYXR1cmRheSddID0gJ1NhYmF0byc7CiRsYW5nWydzdW5kYXknXSA9ICdEb21lbmljYSc7CiRsYW5nWydqYW51YXJ5J10gPSAnR2VubmFpbyc7CiRsYW5nWydmZWJydWFyeSddID0gJ0ZlYmJyYWlvJzsKJGxhbmdbJ21hcmNoJ10gPSAnTWFyem8nOwokbGFuZ1snYXByaWwnXSA9ICdBcHJpbGUnOwokbGFuZ1snbWF5J10gPSAnTWFnZ2lvJzsKJGxhbmdbJ2p1bmUnXSA9ICdHaXVnbm8nOwokbGFuZ1snanVseSddID0gJ0x1Z2xpbyc7CiRsYW5nWydhdWd1c3QnXSA9ICdBZ29zdG8nOwokbGFuZ1snc2VwdGVtYmVyJ10gPSAnU2V0dGVtYnJlJzsKJGxhbmdbJ29jdG9iZXInXSA9ICdPdHRvYnJlJzsKJGxhbmdbJ25vdmVtYmVyJ10gPSAnTm92ZW1icmUnOwokbGFuZ1snZGVjZW1iZXInXSA9ICdEaWNlbWJyZSc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ21vbmRheSddID0gJ01hbmRhZyc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDAyMjYzNjkuMzY5Mi44MS51dG1jc3I9ZGV2LmNtc21hZGVzaW1wbGUub3JnfHV0bWNjbj0ocmVmZXJyYWwpfHV0bWNtZD1yZWZlcnJhbHx1dG1jY3Q9L2ZlYXR1cmVfcmVxdWVzdC9saXN0LzYnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xNzkwNTI2MjMwODQxMTAxMDAuMTIxMDQyMzU3Ny4xMzAxMjUxMTQxLjEzMDEyNTQ5NTcuMzcxNic7CiRsYW5nWydxY2EnXSA9ICcxMjEwOTcxNjkwLTI3MzA4MDczLTgxOTUyODMyJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuMi4xMC4xMzAxMjU0OTU3JzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ21vbmRheSddID0gJ01hYW5kYWcnOwokbGFuZ1sndHVlc2RheSddID0gJ0RpbnNkYWcnOwokbGFuZ1snd2VkbmVzZGF5J10gPSAnV29lbnNkYWcnOwokbGFuZ1sndGh1cnNkYXknXSA9ICdEb25kZXJkYWcnOwokbGFuZ1snZnJpZGF5J10gPSAnVnJpamRhZyc7CiRsYW5nWydzYXR1cmRheSddID0gJ1phdGVyZGFnJzsKJGxhbmdbJ3N1bmRheSddID0gJ1pvbmRhZyc7CiRsYW5nWydqYW51YXJ5J10gPSAnSmFudWFyaSc7CiRsYW5nWydmZWJydWFyeSddID0gJ0ZlYnJ1YXJpJzsKJGxhbmdbJ21hcmNoJ10gPSAnTWFhcnQnOwokbGFuZ1snYXByaWwnXSA9ICdBcHJpbCAnOwokbGFuZ1snbWF5J10gPSAnTWVpJzsKJGxhbmdbJ2p1bmUnXSA9ICdKdW5pJzsKJGxhbmdbJ2p1bHknXSA9ICdKdWxpJzsKJGxhbmdbJ2F1Z3VzdCddID0gJ0F1Z3VzdHVzJzsKJGxhbmdbJ3NlcHRlbWJlciddID0gJ1NlcHRlbWJlciAnOwokbGFuZ1snb2N0b2JlciddID0gJ09rdG9iZXInOwokbGFuZ1snbm92ZW1iZXInXSA9ICdOb3ZlbWJlciAnOwokbGFuZ1snZGVjZW1iZXInXSA9ICdEZWNlbWJlciAnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4zMDk0ODI0MDUuMTI5NTk4NjM2OS4xMzAxMTUzNjk3LjEzMDE1NjQzNzAuMTAwJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTMwMDczNzY0NC45NC4yNi51dG1jc3I9Zm9ydW0uY21zbWFkZXNpbXBsZS5vcmd8dXRtY2NuPShyZWZlcnJhbCl8dXRtY21kPXJlZmVycmFsfHV0bWNjdD0vdmlld3RvcGljLnBocCc7CiRsYW5nWydxY2EnXSA9ICdQMC0xMzQ2MTE5OTUzLTEyOTU5ODYzNjg5MDgnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/mimetypes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAgIGZ1bmN0aW9uIHJldHVybk1JTUVUeXBlKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICBwcmVnX21hdGNoKCJ8XC4oW2EtejAtOV17Miw0fSkkfGkiLCAkZmlsZW5hbWUsICRmaWxlU3VmZml4KTsKCiAgICAgICAgc3dpdGNoKHN0cnRvbG93ZXIoJGZpbGVTdWZmaXhbMV0pKQogICAgICAgIHsKICAgICAgICAgICAgY2FzZSAianMiIDoKICAgICAgICAgICAgICAgIHJldHVybiAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IjsKCiAgICAgICAgICAgIGNhc2UgImpzb24iIDoKICAgICAgICAgICAgICAgIHJldHVybiAiYXBwbGljYXRpb24vanNvbiI7CgogICAgICAgICAgICBjYXNlICJqcGciIDoKICAgICAgICAgICAgY2FzZSAianBlZyIgOgogICAgICAgICAgICBjYXNlICJqcGUiIDoKICAgICAgICAgICAgICAgIHJldHVybiAiaW1hZ2UvanBnIjsKCiAgICAgICAgICAgIGNhc2UgInBuZyIgOgogICAgICAgICAgICBjYXNlICJnaWYiIDoKICAgICAgICAgICAgY2FzZSAiYm1wIiA6CiAgICAgICAgICAgIGNhc2UgInRpZmYiIDoKICAgICAgICAgICAgICAgIHJldHVybiAiaW1hZ2UvIi5zdHJ0b2xvd2VyKCRmaWxlU3VmZml4WzFdKTsKCiAgICAgICAgICAgIGNhc2UgImNzcyIgOgogICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXh0L2NzcyI7CgogICAgICAgICAgICBjYXNlICJ4bWwiIDoKICAgICAgICAgICAgICAgIHJldHVybiAiYXBwbGljYXRpb24veG1sIjsKCiAgICAgICAgICAgIGNhc2UgImRvYyIgOgogICAgICAgICAgICBjYXNlICJkb2N4IiA6CiAgICAgICAgICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL21zd29yZCI7CgogICAgICAgICAgICBjYXNlICJ4bHMiIDoKICAgICAgICAgICAgY2FzZSAieGx0IiA6CiAgICAgICAgICAgIGNhc2UgInhsbSIgOgogICAgICAgICAgICBjYXNlICJ4bGQiIDoKICAgICAgICAgICAgY2FzZSAieGxhIiA6CiAgICAgICAgICAgIGNhc2UgInhsYyIgOgogICAgICAgICAgICBjYXNlICJ4bHciIDoKICAgICAgICAgICAgY2FzZSAieGxsIiA6CiAgICAgICAgICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCI7CgogICAgICAgICAgICBjYXNlICJwcHQiIDoKICAgICAgICAgICAgY2FzZSAicHBzIiA6CiAgICAgICAgICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50IjsKCiAgICAgICAgICAgIGNhc2UgInJ0ZiIgOgogICAgICAgICAgICAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9ydGYiOwoKICAgICAgICAgICAgY2FzZSAicGRmIiA6CiAgICAgICAgICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3BkZiI7CgogICAgICAgICAgICBjYXNlICJodG1sIiA6CiAgICAgICAgICAgIGNhc2UgImh0bSIgOgogICAgICAgICAgICBjYXNlICJwaHAiIDoKICAgICAgICAgICAgICAgIHJldHVybiAidGV4dC9odG1sIjsKCiAgICAgICAgICAgIGNhc2UgInR4dCIgOgogICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXh0L3BsYWluIjsKCiAgICAgICAgICAgIGNhc2UgIm1wZWciIDoKICAgICAgICAgICAgY2FzZSAibXBnIiA6CiAgICAgICAgICAgIGNhc2UgIm1wZSIgOgogICAgICAgICAgICAgICAgcmV0dXJuICJ2aWRlby9tcGVnIjsKCiAgICAgICAgICAgIGNhc2UgIm1wMyIgOgogICAgICAgICAgICAgICAgcmV0dXJuICJhdWRpby9tcGVnMyI7CgogICAgICAgICAgICBjYXNlICJ3YXYiIDoKICAgICAgICAgICAgICAgIHJldHVybiAiYXVkaW8vd2F2IjsKCiAgICAgICAgICAgIGNhc2UgImFpZmYiIDoKICAgICAgICAgICAgY2FzZSAiYWlmIiA6CiAgICAgICAgICAgICAgICByZXR1cm4gImF1ZGlvL2FpZmYiOwoKICAgICAgICAgICAgY2FzZSAiYXZpIiA6CiAgICAgICAgICAgICAgICByZXR1cm4gInZpZGVvL21zdmlkZW8iOwoKICAgICAgICAgICAgY2FzZSAid212IiA6CiAgICAgICAgICAgICAgICByZXR1cm4gInZpZGVvL3gtbXMtd212IjsKCiAgICAgICAgICAgIGNhc2UgIm1vdiIgOgogICAgICAgICAgICAgICAgcmV0dXJuICJ2aWRlby9xdWlja3RpbWUiOwoKICAgICAgICAgICAgY2FzZSAiemlwIiA6CiAgICAgICAgICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3ppcCI7CgogICAgICAgICAgICBjYXNlICJ0YXIiIDoKICAgICAgICAgICAgICAgIHJldHVybiAiYXBwbGljYXRpb24veC10YXIiOwoKICAgICAgICAgICAgY2FzZSAic3dmIiA6CiAgICAgICAgICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIjsKCiAgICAgICAgICAgIGRlZmF1bHQgOgogICAgICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoIm1pbWVfY29udGVudF90eXBlIikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRmaWxlU3VmZml4ID0gbWltZV9jb250ZW50X3R5cGUoJGZpbGVuYW1lKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duLyIgLiB0cmltKCRmaWxlU3VmZml4WzBdLCAiLiIpOwogICAgICAgIH0KICAgIH0KPz4=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IE5lb01vZHVsZQp2ZXJzaW9uID0gMC42LjAKZGVzY3JpcHRpb24gPSAKYXV0aG9yID0gTW9ydGVuIFBvdWxzZW4KYXV0aG9yZW1haWwgPSBtb3J0ZW5AcG91bHNlbi5vcmcKbWluY21zdmVyc2lvbiA9IDEuMTEKMTE=]]></data>
	</file>
	<file>
	  <filename>/NeoModule.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIyBOZW9Nb2R1bGUuIEFuIGV4dGVuZGVkIG1vZHVsZWNsYXNzIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIyBDb3B5cmlnaHQgKGMpIDIwMDktMTAgYnkgTW9ydGVuIFBvdWxzZW4gPG1vcnRlbkBwb3Vsc2VuLm9yZz4KIwojQ01TIC0gQ01TIE1hZGUgU2ltcGxlCiMoYykyMDA0LTA5IGJ5IFRlZCBLdWxwICh3aXNoeUB1c2Vycy5zZi5uZXQpCiNUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL2Ntc21hZGVzaW1wbGUuc2YubmV0CiMKI1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiNpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKI1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKI01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKI0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiNZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKI0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIwoKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJzdHJpcG9zIikpIHsKICBmdW5jdGlvbiBzdHJpcG9zKCRzdHIsJG5lZWRsZSkgewogICAgcmV0dXJuIHN0cnBvcyhzdHJ0b2xvd2VyKCRzdHIpLHN0cnRvbG93ZXIoJG5lZWRsZSkpOwogIH0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiYXJyYXlfZGlmZl9rZXkiKSkgewogIGZ1bmN0aW9uIGFycmF5X2RpZmZfa2V5KCkgewogICAgJGFycnMgPSBmdW5jX2dldF9hcmdzKCk7CiAgICAkcmVzdWx0ID0gYXJyYXlfc2hpZnQoJGFycnMpOwogICAgZm9yZWFjaCAoJGFycnMgYXMgJGFycmF5KSB7CiAgICAgIGZvcmVhY2ggKCRyZXN1bHQgYXMgJGtleSA9PiAkdikgewogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRrZXksICRhcnJheSkpIHsKICAgICAgICAgIHVuc2V0KCRyZXN1bHRbJGtleV0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygiaXNfYXNzb2MiKSkgewogIGZ1bmN0aW9uIGlzX2Fzc29jKCRhcnJheSkgewogICAgcmV0dXJuIChpc19hcnJheSgkYXJyYXkpICYmIDAgIT09IGNvdW50KGFycmF5X2RpZmZfa2V5KCRhcnJheSwgYXJyYXlfa2V5cyhhcnJheV9rZXlzKCRhcnJheSkpKSkpOwogIH0KfQoKLy9SZW1lbWJlciwgdGhpcyBjYW5ub3QgYmUgdXNlZCBpbiBtYXRob2QuaW5zdGFsbC5waHAKZGVmaW5lKCJORU9fSU5JVCIsIgogIGlmICghZnVuY3Rpb25fZXhpc3RzKCdjbXNtcycpKSB7ZWNobyAnbWlzc2luZyBjbXNtcygpJztleGl0O30KICBcJHRoaXMtPk5lb1NldHVwKFwkaWQsIFwkdGhpcywgXCRyZXR1cm5pZCwgXCRwYXJhbXMpOwogIFwkZ0Ntcz1jbXNtcygpOwogIFwkY29uZmlnPVwkZ0Ntcy0+R2V0Q29uZmlnKCk7CiAgXCR0aGlzLT5TbWFydHlBc3NpZ24oJ21vZHVsZScsXCR0aGlzKTsKIik7CgpkZWZpbmUoIk5FT19JTklUX0lOU1RBTEwiLCIKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnY21zbXMnKSkge2VjaG8gJ21pc3NpbmcgY21zbXMoKSc7ZXhpdDsKICBcJGdDbXM9Y21zbXMoKTsKICBcJGNvbmZpZz1cJGdDbXMtPkdldENvbmZpZygpOwoiKTsKCgpjbGFzcyBOZW9Nb2R1bGUgZXh0ZW5kcyBDTVNNb2R1bGUgewogIC8qCiAgICoKICAgKiBBIGNvdXBsZSBvZiB2YXJpYWJsZXMgYW5kIG1ldGhvZHMgZm9yIGludGVybmFsIG1vZHVsZSB1c2FnZQogICAqCiAgICovCiAgdmFyICRfZGF0YXN0b3JhZ2U9ZmFsc2U7CiAgdmFyICRfZGI9ZmFsc2U7CiAgdmFyICRfaWQ9ZmFsc2U7CiAgdmFyICRfcmV0dXJuaWQ9ZmFsc2U7CiAgdmFyICRfZXJyb3JzPSIiOwogIHZhciAkX3RoZW1lb2JqZWN0PWZhbHNlOwogIHZhciAkX3BhcmFtcz1hcnJheSgpOwogIHZhciAkX2Z1bGx2YWxpZGF0aW9uPWZhbHNlOwogIHZhciAkX2V4dHJhdmFsaWRhdGlvbmNzcz0iIjsKCiAgZnVuY3Rpb24gX2dldGRzKCkgewogICAgaWYgKCR0aGlzLT5fZGF0YXN0b3JhZ2UhPT1mYWxzZSkgcmV0dXJuICR0aGlzLT5fZGF0YXN0b3JhZ2U7CiAgICAkdGhpcy0+X2RhdGFzdG9yYWdlPSR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgiTmVvRGF0YVN0b3JhZ2UiKTsKICAgIHJldHVybiAkdGhpcy0+X2RhdGFzdG9yYWdlOwogIH0KCiAgZnVuY3Rpb24gTmVvRGIoKSB7CiAgICBpZiAoJHRoaXMtPl9kYiE9PWZhbHNlKSByZXR1cm4gJHRoaXMtPl9kYjsKICAgICR0aGlzLT5fZGI9Y21zbXMoKS0+R2V0REIoKTsKICAgIHJldHVybiAkdGhpcy0+X2RiOwogIH0KCiAgZnVuY3Rpb24gX2dldHRoZW1lb2JqKCkgewogICAgJGdDbXM9Y21zbXMoKTsKICAgIGlmICgkdGhpcy0+X3RoZW1lb2JqZWN0IT09ZmFsc2UpIHJldHVybiAkdGhpcy0+X3RoZW1lb2JqZWN0OwogICAgJHRoaXMtPl90aGVtZW9iamVjdD0gJHRoZW1lT2JqZWN0ID0gY21zX3V0aWxzOjpnZXRfdGhlbWVfb2JqZWN0KCk7Ly8kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ107CiAgICByZXR1cm4gJHRoaXMtPl90aGVtZW9iamVjdDsKICB9CgogIC8qCiAgICoKICAgKiBTdGFuZGFyZCBtb2R1bGUtQVBJLW1ldGhvZHMgYmVoYXZpbmcgaW4gYSBzdGFuZGFyZCB3YXkKICAgKgogICAqLwoKICBmdW5jdGlvbiBHZXROYW1lKCkgewogICAgcmV0dXJuICdOZW9Nb2R1bGUnOwogIH0KCiAgZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsKICAgIHJldHVybiAiMC42LjAiOwogIH0KCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgewogICAgcmV0dXJuICJOZW8gTW9kdWxlIGJhc2UtY2xhc3MiOwogIH0KCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsKICAgIHJldHVybiAnMS4xMSc7CiAgfQoKICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgewogICAgcmV0dXJuICJBbiBleHRlbmRlZCBtb2R1bGUtY2xhc3MsIG1haW5seSBmb3IgdGhlIE5lby1zZXJpZXMgbW9kdWxlcywgYnV0IGFsc28gZm9yIG90aGVycyB0byB1c2UiOwogIH0KCiAgZnVuY3Rpb24gSGFzQWRtaW4oKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBHZXRBdXRob3IoKSB7CiAgICByZXR1cm4gJ01vcnRlbiBQb3Vsc2VuJzsKICB9CgogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkJewogICAgcmV0dXJuICdtb3J0ZW5AcG91bHNlbi5vcmcnOwogIH0KCiAgZnVuY3Rpb24gR2V0SGVscCgkbGFuZz0nZW5fVVMnKSB7CiAgICByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnaGVscC50cGwnKTsKICB9CgogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCXsKICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCJjaGFuZ2Vsb2cudHBsIik7CiAgfQoKICAvKgogICAqCiAgICogU2V0dXAgZnVuY3Rpb25zCiAgICoKICAgKi8KICBmdW5jdGlvbiBOZW9TZXRJZCgkaWQpIHsKICAgICR0aGlzLT5faWQ9JGlkOwogIH0KICBmdW5jdGlvbiBOZW9TZXRSZXR1cm5JZCgkcmV0dXJuaWQpIHsKICAgICR0aGlzLT5fcmV0dXJuaWQ9JHJldHVybmlkOwogIH0KICBmdW5jdGlvbiBOZW9TZXRQYXJhbXMoJHBhcmFtcz1hcnJheSgpKSB7CiAgICAkdGhpcy0+X3BhcmFtcz0kcGFyYW1zOwogIH0KCiAgZnVuY3Rpb24gTmVvU2V0dXAoJGlkLCRtb2R1bGUsJHJldHVybmlkPSIwIiwkcGFyYW1zPWFycmF5KCkpIHsKICAgICR0aGlzLT5OZW9TZXRJZCgkaWQpOwogICAgJHRoaXMtPk5lb1NldFJldHVybklkKCRyZXR1cm5pZCk7CiAgICAkdGhpcy0+TmVvU2V0UGFyYW1zKCRwYXJhbXMpOwogICAgJHRoaXMtPlNtYXJ0eUFzc2lnbkNNUygkbW9kdWxlKTsKICAgICR0aGlzLT5TbWFydHlBc3NpZ24oIm1vZHVsZV9pZCIsJGlkKTsKICB9CgoKCiAgLyoKICAgKgogICAqIEdlbmVyYWwgc2hvcnRjdXQgZnVuY3Rpb25zCiAgICoKICAgKi8KICBmdW5jdGlvbiBQcmVmKCRwcmVmbmFtZSwkZGVmYXVsdD0iIikgewogICAgcmV0dXJuICR0aGlzLT5HZXRQcmVmZXJlbmNlKCRwcmVmbmFtZSwkZGVmYXVsdCk7CiAgfQoKICBmdW5jdGlvbiBTZXRQcmVmKCRwcmVmbmFtZSwgJHZhbHVlKSB7CiAgICByZXR1cm4gJHRoaXMtPlNldFByZWZlcmVuY2UoJHByZWZuYW1lLCR2YWx1ZSk7CiAgfQoKICBmdW5jdGlvbiBJbmNQcmVmKCRwcmVmbmFtZSwgJHZhbHVlPTEpIHsKICAgIHJldHVybiAkdGhpcy0+U2V0UHJlZigkcHJlZm5hbWUsICR0aGlzLT5QcmVmKCRwcmVmbmFtZSwwKSskdmFsdWUpOwogIH0KCiAgZnVuY3Rpb24gRGVjUHJlZigkcHJlZm5hbWUsICR2YWx1ZT0xKSB7CiAgICByZXR1cm4gJHRoaXMtPlNldFByZWYoJHByZWZuYW1lLCAkdGhpcy0+UHJlZigkcHJlZm5hbWUsMCktJHZhbHVlKTsKICB9CgogIGZ1bmN0aW9uIE5lb1NldFByZWYoJHByZWZuYW1lLCAkbm90c2V0dmFsdWU9ZmFsc2UsICRkZWxldGVpZm5vdHNldD1mYWxzZSkgewogICAgLy9pZiAoZW1wdHkoJHBhcmFtcykpICRwYXJhbXM9JHRoaXMtPl9wYXJhbXM7CiAgICAkcGFyYW1zPSR0aGlzLT5fcGFyYW1zOwogICAgaWYgKGlzc2V0KCRwYXJhbXNbJHByZWZuYW1lXSkpIHsKICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJHByZWZuYW1lLCRwYXJhbXNbJHByZWZuYW1lXSk7CiAgICB9IGVsc2UgewogICAgICBpZiAoISRkZWxldGVpZm5vdHNldCkgewogICAgICAgIGlmICgkbm90c2V0dmFsdWUhPT1mYWxzZSkgewogICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJHByZWZuYW1lLCAkbm90c2V0dmFsdWUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgkcHJlZm5hbWUpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBOZW9TZXRQcmVmcygkcHJlZnM9YXJyYXkoKSkgewogICAgaWYgKGlzX2Fzc29jKCRwcmVmcykpIHsKICAgICAgZm9yZWFjaCAoJHByZWZzIGFzICRrZXkgPT4gJG5vdHNldHZhbHVlKSB7CiAgICAgICAgJHRoaXMtPk5lb1NldFByZWYoJGtleSwgJG5vdHNldHZhbHVlKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yZWFjaCAoJHByZWZzIGFzICRwcmVmKSB7CiAgICAgICAgJHRoaXMtPk5lb1NldFByZWYoJHByZWYpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBfKCRsYW5nc3RyaW5nKSB7CiAgICAkcmVzdWx0PSR0aGlzLT5MYW5nKCRsYW5nc3RyaW5nKTsKICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gTmVvQ21zTGluaygkcGFyYW1zPWFycmF5KCkpIHsKICAgIC8vQ3JlYXRlTGluaygkaWQsICRhY3Rpb24sICRyZXR1cm5pZD0nJywgJGNvbnRlbnRzPScnLCAkcGFyYW1zPWFycmF5KCksICR3YXJuX21lc3NhZ2U9JycsICRvbmx5aHJlZj1mYWxzZSwgJGlubGluZT1mYWxzZSwgJGFkZHR0ZXh0PScnLCAkdGFyZ2V0Y29udGVudG9ubHk9ZmFsc2UsICRwcmV0dHl1cmw9JycpCiAgICAvL2VjaG8gJHRoaXMtPk5lb1BhcmFtVmFsdWUoInByZXR0eXVybCIsJHBhcmFtcywiIik7CiAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZUxpbmsoCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJpZCIsJHBhcmFtcywkdGhpcy0+X2lkKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImFjdGlvbiIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJyZXR1cm5pZCIsJHBhcmFtcywkdGhpcy0+X3JldHVybmlkKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoYXJyYXkoImNvbnRlbnQiLCJ0ZXh0IiksJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJwYXJhbXMiLCRwYXJhbXMsYXJyYXkoKSksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJ3YXJubWVzc2FnZSIsJHBhcmFtcywiIiksCiAgICAgIGZhbHNlLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiaW5saW5lIiwkcGFyYW1zLGZhbHNlKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImFkZHRleHQiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgidGFyZ2V0Y29udGVudG9ubHkiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgicHJldHR5dXJsIiwkcGFyYW1zLCIiKQogICAgKTsKICB9CgogIGZ1bmN0aW9uIE5lb0Ntc1VybCgkcGFyYW1zPWFycmF5KCkpIHsKICAgIC8vQ3JlYXRlTGluaygkaWQsICRhY3Rpb24sICRyZXR1cm5pZD0nJywgJGNvbnRlbnRzPScnLCAkcGFyYW1zPWFycmF5KCksICR3YXJuX21lc3NhZ2U9JycsICRvbmx5aHJlZj1mYWxzZSwgJGlubGluZT1mYWxzZSwgJGFkZHR0ZXh0PScnLCAkdGFyZ2V0Y29udGVudG9ubHk9ZmFsc2UsICRwcmV0dHl1cmw9JycpCiAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZUxpbmsoCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJpZCIsJHBhcmFtcywkdGhpcy0+X2lkKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImFjdGlvbiIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJyZXR1cm5pZCIsJHBhcmFtcywkdGhpcy0+X3JldHVybmlkKSwKICAgICAgIiIsCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJwYXJhbXMiLCRwYXJhbXMsYXJyYXkoKSksCiAgICAgICIiLAogICAgICB0cnVlICwKICAgICAgZmFsc2UsCiAgICAgICIiLAogICAgICBmYWxzZSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoInByZXR0eXVybCIsJHBhcmFtcywiIikKICAgICk7CiAgfQoKICBmdW5jdGlvbiBOZW9MaW5rKCR0ZXh0LCRhY3Rpb24sJHBhcmFtcz1hcnJheSgpLCAkd2FybmluZz0iIikgewogICAgcmV0dXJuICR0aGlzLT5OZW9DbXNMaW5rKGFycmF5KCJ0ZXh0Ij0+JHRleHQsImFjdGlvbiI9PiRhY3Rpb24sInBhcmFtcyI9PiRwYXJhbXMsIndhcm5tZXNzYWdlIj0+JHdhcm5pbmcpKTsKICB9CgogIGZ1bmN0aW9uIE5lb0J1dHRvbkxpbmsoJHRleHQsJGFjdGlvbiwkcGFyYW1zPWFycmF5KCksICR3YXJuaW5nPSIiKSB7CiAgICAvLzxidXR0b24gb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWY9Jy9wYWdlMiciPkNvbnRpbnVlPC9idXR0b24+CiAgICAkdXJsPSAkdGhpcy0+TmVvVXJsKCRhY3Rpb24sJHBhcmFtcyk7CiAgICAvL3JldHVybiAnPGZvcm0gbWV0aG9kPSJnZXQiIGFjdGlvbj0iJy4kdXJsLiciPicuCi8vICAgICAgICAgICAnPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IicuJHRleHQuJyJcPicuCiAgLy8gICAgICAgICAnPC9mb3JtPic7CiAgICByZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb24uaHJlZj1cJycuJHVybC4nXCciPicuJHRleHQuJzwvYnV0dG9uPic7CiAgfQoKICBmdW5jdGlvbiBOZW9QcmV0dHlMaW5rKCR0ZXh0LCAkcHJldHR5dXJsLCAkYWRkdGV4dD0iIikgewogICAgcmV0dXJuICR0aGlzLT5OZW9DbXNMaW5rKGFycmF5KCJ0ZXh0Ij0+JHRleHQsInByZXR0eXVybCI9PiRwcmV0dHl1cmwsImFkZHRleHQiPT4gJGFkZHRleHQpKTsKICB9CgogIGZ1bmN0aW9uIE5lb1VybCgkYWN0aW9uLCRwYXJhbXM9YXJyYXkoKSkgewogICAgcmV0dXJuICR0aGlzLT5OZW9DbXNVcmwoYXJyYXkoImFjdGlvbiI9PiRhY3Rpb24sInBhcmFtcyI9PiRwYXJhbXMpKTsKICB9CgogIGZ1bmN0aW9uIE5lb1ByZXR0eVVybCgkcHJldHR5dXJsKSB7CiAgICByZXR1cm4gJHRoaXMtPk5lb0Ntc1VybChhcnJheSgicHJldHR5dXJsIj0+JHByZXR0eXVybCkpOwogIH0KCiAgZnVuY3Rpb24gTmVvUmVkaXJlY3QoJGFjdGlvbj0iIiwgJHBhcmFtcz1hcnJheSgpKSB7CiAgICBpZiAoaXNfYXJyYXkoJGFjdGlvbikpICR0aGlzLT5OZW9SZWRpcmVjdEZ1bGwoJGFjdGlvbik7CiAgICByZXR1cm4gJHRoaXMtPk5lb1JlZGlyZWN0RnVsbCgKICAgICAgYXJyYXkgKAogICAgICAgICJhY3Rpb24iID0+ICRhY3Rpb24sCiAgICAgICAgInBhcmFtcyIgPT4gJHBhcmFtcwogICAgICApCiAgICApOwogIH0KCiAgZnVuY3Rpb24gTmVvUmVkaXJlY3RGdWxsKCRwYXJhbXM9YXJyYXkoKSkgewogICAgLy9SZWRpcmVjdCgkaWQsICRhY3Rpb24sICRyZXR1cm5pZD0nJywgJHBhcmFtcz1hcnJheSgpLCAkaW5saW5lPWZhbHNlKQogICAgcmV0dXJuICR0aGlzLT5SZWRpcmVjdCgKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImlkIiwkcGFyYW1zLCR0aGlzLT5faWQpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiYWN0aW9uIiwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoInJldHVybmlkIiwkcGFyYW1zLCR0aGlzLT5fcmV0dXJuaWQpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgicGFyYW1zIiwkcGFyYW1zLGFycmF5KCkpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiaW5saW5lIiwkcGFyYW1zLGZhbHNlKQogICAgKTsKICB9CgogIGZ1bmN0aW9uIE5lb0FkbWluUmV0dXJuKCRwYXJhbXM9YXJyYXkoKSkgewogICAgLy8kdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsIGFycmF5KCJtb2R1bGVfbWVzc2FnZSI9PiR0aGlzLT5MYW5nKCJzZXR0aW5nc3NhdmVkIiksInRhYiI9PiJzZXR0aW5ncyIpKTsKICAgICRtZXNzYWdlID0gJHRoaXMtPk5QVigibWVzc2FnZSIsICRwYXJhbXMpOwogICAgJGVycm9yID0gJHRoaXMtPk5QVigiZXJyb3IiLCAkcGFyYW1zKTsKICAgICR0YWIgPSAkdGhpcy0+TlBWKCJ0YWIiLCAkcGFyYW1zKTsKCiAgICAkdGhpcy0+TmVvUmVkaXJlY3QoImRlZmF1bHRhZG1pbiIsCiAgICAgIGFycmF5KAogICAgICAgICJtb2R1bGVfbWVzc2FnZSIgPT4gJG1lc3NhZ2UsCiAgICAgICAgIm1vZHVsZV9lcnJvcnMiID0+ICRlcnJvciwKICAgICAgICAidGFiIiA9PiAkdGFiCiAgICAgICkKICAgICk7CiAgfQoKICAvKgogICAqCiAgICogRm9ybS1nZW5lcmF0aW9uIGZ1bmN0aW9ucywgaW5jbHVkaW5nIHNtYXJ0eSBhc3NpZ25tZW50cwogICAqCiAgICovCiAgZnVuY3Rpb24gTmVvU2V0RnVsbFZhbGlkYXRpb24oJGZ1bGx2YWxpZGF0aW9uPXRydWUpIHsKICAgICR0aGlzLT5fZnVsbHZhbGlkYXRpb249JGZ1bGx2YWxpZGF0aW9uOwogIH0KCiAgZnVuY3Rpb24gTmVvRm9ybVZhbGlkYXRpb24oJGZpZWxkcz1hcnJheSgpKSB7CiAgICBpZiAoZW1wdHkoJGZpZWxkcykpIHJldHVybiAiIjsKICAgIHN0YXRpYyAkYWxyZWFkeXVzZWQ9ZmFsc2U7CiAgICBzdGF0aWMgJHZhbGlkYXRpb25jb3VudD0wOwoKICAgICRvdXRwdXQ9IiI7CiAgICBpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLiIvZm9ybXZhbGlkYXRpb24uaW5jLnBocCIpOwogICAgcmV0dXJuIGFycmF5KCJmdW5jdGlvbiI9PiRvdXRwdXQsImV4dHJhIj0+JGV4dHJhLCAiZnVuY3Rpb25jYWxsIj0+JGZ1bmN0aW9uY2FsbCk7CiAgfQoKICBmdW5jdGlvbiBOZW9Gb3JtU3RhcnQoJHBhcmFtcz1hcnJheSgpKSB7CiAgICAvL0NyZWF0ZUZvcm1TdGFydCgkaWQsICRhY3Rpb249J2RlZmF1bHQnLCAkcmV0dXJuaWQ9JycsICRtZXRob2Q9J3Bvc3QnLCAkZW5jdHlwZT0nJywgJGlubGluZT1mYWxzZSwgJGlkc3VmZml4PScnLCAkcGFyYW1zID0gYXJyYXkoKSwgJGV4dHJhPScnKQogICAgJHZhbGlkYXRpb249IiI7CiAgICAkZXh0cmE9IiI7CiAgICBpZiAoaXNzZXQoJHBhcmFtc1sidmFsaWRhdGlvbiJdKSkgewogICAgICAvL2VjaG8gImhpIjsKICAgICAgJHZhbGlkYXRpb249JHRoaXMtPk5lb0Zvcm1WYWxpZGF0aW9uKCRwYXJhbXNbInZhbGlkYXRpb24iXSk7CiAgICAgIGlmIChpc3NldCgkcGFyYW1zWyJleHRyYXRlbXBsYXRlIl0pKSB7CiAgICAgICAgJGV4dHJhPSRwYXJhbXNbImV4dHJhdGVtcGxhdGUiXTsKICAgICAgICAkZXh0cmE9c3RyX3JlcGxhY2UoIiV2YWxpZGF0aW9uY2FsbCUiLCR2YWxpZGF0aW9uWyJmdW5jdGlvbmNhbGwiXSwkZXh0cmEpOwogICAgICB9IGVsc2UgewogICAgICAgICRleHRyYT0kdmFsaWRhdGlvblsiZXh0cmEiXTsKICAgICAgfQogICAgICAkdmFsaWRhdGlvbj0kdmFsaWRhdGlvblsiZnVuY3Rpb24iXTsKICAgIH0KICAgIHJldHVybiAkdmFsaWRhdGlvbi4kdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiaWQiLCRwYXJhbXMsJHRoaXMtPl9pZCksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJhY3Rpb24iLCRwYXJhbXMsImRlZmF1bHQiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoInJldHVybmlkIiwkcGFyYW1zLCR0aGlzLT5fcmV0dXJuaWQpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgibWV0aG9kIiwkcGFyYW1zLCJwb3N0IiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKGFycmF5KCJlbmN0eXBlIiwiZW5jb2RpbmciKSwkcGFyYW1zLCJtdWx0aXBhcnQvZm9ybS1kYXRhIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJpbmxpbmUiLCRwYXJhbXMsZmFsc2UpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiaWRzdWZmaXgiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgicGFyYW1zIiwkcGFyYW1zLGFycmF5KCkpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiZXh0cmEiLCRwYXJhbXMsJGV4dHJhKQogICAgKTsKICB9CiAgZnVuY3Rpb24gU21hcnR5Rm9ybVN0YXJ0KCRzbWFydHluYW1lLCRwYXJhbXM9YXJyYXkoKSkgewogICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5bmFtZSwkdGhpcy0+TmVvRm9ybVN0YXJ0KCRwYXJhbXMpKTsKICB9CgogIC8vT2Jzb2xldGUKICBmdW5jdGlvbiBTbWFydHlVcGxvYWRGb3JtU3RhcnQoJHNtYXJ0eW5hbWUsJHBhcmFtcz1hcnJheSgpKSB7CiAgICAkdGhpcy0+U21hcnR5Rm9ybVN0YXJ0KCRzbWFydHluYW1lLCRwYXJhbXMpOwogIH0KCiAgZnVuY3Rpb24gTmVvRm9ybUVuZCgpIHsKICAgIHJldHVybiAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwogIH0KCiAgZnVuY3Rpb24gU21hcnR5Rm9ybUVuZCgkc21hcnR5bmFtZSkgewogICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5bmFtZSwkdGhpcy0+TmVvRm9ybUVuZCgpKTsKICB9CgogIC8qZnVuY3Rpb24gU21hcnR5SW5wdXRTdWJtaXQoJHNtYXJ0eW5hbWUsJG5hbWUsJHRleHQsJGNvbmZpcm10ZXh0PSIiKSB7CiAgICAkdGhpcy0+U21hcnR5QXNzaWduKCRzbWFydHluYW1lLCR0aGlzLT5OZW9JbnB1dFN1Ym1pdChhcnJheSgibmFtZSI9PiRuYW1lLCJ2YWx1ZSI9PiR0ZXh0LCJjb25maXJtdGV4dCI9PiRjb25maXJtdGV4dCkpKTsKICB9Ki8KCiAgZnVuY3Rpb24gTmVvSW5wdXRIaWRkZW5NdWx0aSgkZmllbGRzPWFycmF5KCkpIHsKICAgICRvdXRwdXQ9IlxuIjsKICAgIGZvcmVhY2goJGZpZWxkcyBhcyAkbmFtZT0+JHZhbHVlKSB7CiAgICAgICRvdXRwdXQuPSR0aGlzLT5OZW9JbnB1dEhpZGRlbihhcnJheSgibmFtZSI9PiRuYW1lLCJ2YWx1ZSI9PiR2YWx1ZSkpLiJcbiI7CiAgICB9CiAgICAkb3V0cHV0Lj0iXG4iOwogICAgcmV0dXJuICRvdXRwdXQ7CiAgfQoKICBmdW5jdGlvbiBTbWFydHlJbnB1dEhpZGRlbk11bHRpKCRzbWFydHluYW1lLCRmaWVsZHM9YXJyYXkoKSkgewoKICAgICR0aGlzLT5TbWFydHlBc3NpZ24oJHNtYXJ0eW5hbWUsJHRoaXMtPk5lb0lucHV0SGlkZGVuTXVsdGkoJGZpZWxkcykpOwogIH0KCiAgZnVuY3Rpb24gU21hcnR5TGluaygkc21hcnR5bmFtZSwkZmllbGRzPWFycmF5KCkpIHsKICAgICR0aGlzLT5TbWFydHlBc3NpZ24oJHNtYXJ0eW5hbWUsJHRoaXMtPk5lb0Ntc0xpbmsoJGZpZWxkcykpOwogIH0KCiAgZnVuY3Rpb24gTmVvSW5wdXRGaWxlKCRwYXJhbXMpIHsKICAgIHJldHVybiAkdGhpcy0+Q3JlYXRlSW5wdXRGaWxlKAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiaWQiLCRwYXJhbXMsJHRoaXMtPl9pZCksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJuYW1lIiwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImFjY2VwdCIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJzaXplIiwkcGFyYW1zLCIxMCIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiYWRkdGV4dCIsJHBhcmFtcywiIikKICAgICk7CiAgfQoKICBmdW5jdGlvbiBTbWFydHlJbnB1dEZpbGUoJHNtYXJ0eW5hbWUsICRwYXJhbXMpIHsKICAgICR0aGlzLT5TbWFydHlBc3NpZ24oJHNtYXJ0eW5hbWUsJHRoaXMtPk5lb0lucHV0RmlsZSgkcGFyYW1zKSk7CiAgfQoKICBmdW5jdGlvbiBOZW9JbnB1dFRleHQoJHBhcmFtcz1hcnJheSgpKSB7CiAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImlkIiwkcGFyYW1zLCR0aGlzLT5faWQpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgibmFtZSIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJ2YWx1ZSIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJzaXplIiwkcGFyYW1zLCIxMCIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgibWF4bGVuZ3RoIiwkcGFyYW1zLCIyNTUiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImFkZHRleHQiLCRwYXJhbXMsIiIpCiAgICApOwogIH0KCiAgZnVuY3Rpb24gRGF0ZTJVbml4KCR0aW1lLCAkZm9ybWF0PSJkZG1teXl5eSIpIHsKICAgIGlmICh0cmltKCR0aW1lKT09IiIpIHJldHVybiAiIjsKICAgICR0aW1lPXN0cl9yZXBsYWNlKCIgIiwiLyIsJHRpbWUpOwogICAgJHRpbWU9c3RyX3JlcGxhY2UoIjoiLCIvIiwkdGltZSk7CiAgICAkdGltZT1zdHJfcmVwbGFjZSgiLSIsIi8iLCR0aW1lKTsKICAgICRkdHBhcnRzPWV4cGxvZGUoIi8iLCR0aW1lKTsKICAgICRkYXk9IiI7JG1vbnRoPSIiOyR5ZWFyPSIiOyRob3VyPTA7JG1pbnV0ZT0wOyRzZWNvbmQ9MDsKICAgIHN3aXRjaCgkZm9ybWF0KSB7CiAgICAgIGNhc2UgIm1tZGR5eXl5IiA6ICRkYXk9JGR0cGFydHNbMV07ICRtb250aD0kZHRwYXJ0c1swXTsgJHllYXI9JGR0cGFydHNbMl07IGJyZWFrOwogICAgICBjYXNlICJ5eW1tZGQiIDogJGRheT0kZHRwYXJ0c1syXTsgJG1vbnRoPSRkdHBhcnRzWzFdOyAkeWVhcj0kZHRwYXJ0c1swXTsgYnJlYWs7CiAgICAgIGNhc2UgInl5eW1tZGQiIDogJGRheT0kZHRwYXJ0c1syXTsgJG1vbnRoPSRkdHBhcnRzWzFdOyAkeWVhcj0kZHRwYXJ0c1swXTsgYnJlYWs7CgogICAgICBjYXNlICJkZG1teXl5eWhobW0iIDogewogICAgICAgICRkYXk9JGR0cGFydHNbMF07ICRtb250aD0kZHRwYXJ0c1sxXTskeWVhcj0kZHRwYXJ0c1syXTskaG91cj0kZHRwYXJ0c1szXTskbWludXRlPSRkdHBhcnRzWzRdOwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBjYXNlICJkZG1teXl5eSIgOgogICAgICBkZWZhdWx0IDogJGRheT0kZHRwYXJ0c1swXTsgJG1vbnRoPSRkdHBhcnRzWzFdOyR5ZWFyPSRkdHBhcnRzWzJdOwogICAgfQoKICAgIHJldHVybiBta3RpbWUoJGhvdXIsJG1pbnV0ZSwkc2Vjb25kLCRtb250aCwkZGF5LCR5ZWFyKTsKICB9CgoKICAvKgogICAqIAljYXNlICJERE1NWVlZWSI6CgkJcmV0dXJuIChwRGF0ZSArIERhdGVTZXBhcmF0b3IgKyBNb250aERpZ2l0ICsgRGF0ZVNlcGFyYXRvciArIHRoaXMuWWVhcik7CgkJY2FzZSAiRERNTU1ZWVlZIjoKCQlyZXR1cm4gKHBEYXRlICsgRGF0ZVNlcGFyYXRvciArIHRoaXMuR2V0TW9udGhOYW1lKGZhbHNlKSArIERhdGVTZXBhcmF0b3IgKyB0aGlzLlllYXIpOwoJCWNhc2UgIk1NRERZWVlZIjoKCQlyZXR1cm4gKE1vbnRoRGlnaXQgKyBEYXRlU2VwYXJhdG9yICsgcERhdGUgKyBEYXRlU2VwYXJhdG9yICsgdGhpcy5ZZWFyKTsKCQljYXNlICJNTU1ERFlZWVkiOgoJCXJldHVybiAodGhpcy5HZXRNb250aE5hbWUoZmFsc2UpICsgRGF0ZVNlcGFyYXRvciArIHBEYXRlICsgRGF0ZVNlcGFyYXRvciArIHRoaXMuWWVhcik7CgkJY2FzZSAiWVlZWU1NREQiOgoJCXJldHVybiAodGhpcy5ZZWFyICsgRGF0ZVNlcGFyYXRvciArIE1vbnRoRGlnaXQgKyBEYXRlU2VwYXJhdG9yICsgcERhdGUpOwoJCWNhc2UgIllZTU1ERCI6CgkJcmV0dXJuIChTdHJpbmcodGhpcy5ZZWFyKS5zdWJzdHJpbmcoMiwgNCkgKyBEYXRlU2VwYXJhdG9yICsgTW9udGhEaWdpdCArIERhdGVTZXBhcmF0b3IgKyBwRGF0ZSk7CgkJY2FzZSAiWVlNTU1ERCI6CgkJcmV0dXJuIChTdHJpbmcodGhpcy5ZZWFyKS5zdWJzdHJpbmcoMiwgNCkgKyBEYXRlU2VwYXJhdG9yICsgdGhpcy5HZXRNb250aE5hbWUoZmFsc2UpICsgRGF0ZVNlcGFyYXRvciArIHBEYXRlKTsKCQljYXNlICJZWVlZTU1NREQiOgoJCXJldHVybiAodGhpcy5ZZWFyICsgRGF0ZVNlcGFyYXRvciArIHRoaXMuR2V0TW9udGhOYW1lKGZhbHNlKSArIERhdGVTZXBhcmF0b3IgKyBwRGF0ZSkKICAgKi8KICBmdW5jdGlvbiBOZW9JbnB1dERhdGV0aW1lKCRwYXJhbXM9YXJyYXkoKSkgewogICAgJHJlc3VsdD0iIjsKICAgIHN0YXRpYyAkanNzZW50ID0gZmFsc2U7CiAgICAkY29uZmlnPWNtc21zKCktPkdldENvbmZpZygpOwogICAgaWYgKCEkanNzZW50KSB7CiAgICAgICRuZW9tPSR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgiTmVvTW9kdWxlIik7CiAgICAgICRyZXN1bHQuPSIKCiAgICAgIDxzY3JpcHQgc3JjPSciLiRuZW9tLT5OZW9DbXNVcmwoYXJyYXkoImFjdGlvbiI9PiJkYXRldGltZXBpY2tlciIpKS4iJnNob3d0ZW1wbGF0ZT1mYWxzZSc+PC9zY3JpcHQ+CgogICAgICAiOwogICAgICAkanNzZW50PXRydWU7CiAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1sicmVhZG9ubHkiXSkgJiYgJHBhcmFtc1sicmVhZG9ubHkiXT09dHJ1ZSkgewogICAgICAkcGFyYW1zWyJhZGR0ZXh0Il0uPSIgcmVhZG9ubHkiOwogICAgfQogICAgJGZvcm1hdD0kdGhpcy0+TlBWKCJmb3JtYXQiLCRwYXJhbXMsImRkbW15eXl5Iik7CiAgICBpZiAoaXNzZXQoJHBhcmFtc1sidW5peHZhbHVlIl0pICYmICRwYXJhbXNbInVuaXh2YWx1ZSJdIT0iIikgewogICAgICBzd2l0Y2ggKCRmb3JtYXQpIHsKICAgICAgICBjYXNlICJkZG1teXl5eSIgOiAkcGFyYW1zWyJ2YWx1ZSJdPWRhdGUoImovbi9ZIiwgJHBhcmFtc1sidW5peHZhbHVlIl0pOyBicmVhazsKICAgICAgICBjYXNlICJtbWRkeXl5eSIgOiAkcGFyYW1zWyJ2YWx1ZSJdPWRhdGUoIm4vai9ZIiwgJHBhcmFtc1sidW5peHZhbHVlIl0pOyBicmVhazsKICAgICAgICBjYXNlICJ5eW1tZGQiIDogJHBhcmFtc1sidmFsdWUiXT1kYXRlKCJ5L24vaiIsICRwYXJhbXNbInVuaXh2YWx1ZSJdKTsgYnJlYWs7CiAgICAgICAgY2FzZSAieXl5eW1tZGQiIDogJHBhcmFtc1sidmFsdWUiXT1kYXRlKCJZL24vaiIsICRwYXJhbXNbInVuaXh2YWx1ZSJdKTsgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgICRyZXN1bHQuPSR0aGlzLT5OZW9JbnB1dFRleHQoJHBhcmFtcyk7CgogICAgJHNob3d0aW1lPSJmYWxzZSI7CiAgICBpZiAoaXNzZXQoJHBhcmFtc1sic2hvd3RpbWUiXSkgJiYgJHBhcmFtc1sic2hvd3RpbWUiXT09dHJ1ZSkgewogICAgICAkc2hvd3RpbWU9InRydWUiOwogICAgfQoKICAgICR0aW1lZm9ybWF0PSIyNCI7CiAgICBpZiAoaXNzZXQoJHBhcmFtc1sidGltZWZvcm1hdCJdKSAmJiAkcGFyYW1zWyJ0aW1lZm9ybWF0Il0hPSIiKSB7CiAgICAgICR0aW1lZm9ybWF0PSRwYXJhbXNbInRpbWVmb3JtYXQiXTsKICAgIH0KCiAgICAkc2hvd3NlY29uZHM9ImZhbHNlIjsKICAgIGlmIChpc3NldCgkcGFyYW1zWyJzaG93c2Vjb25kcyJdKSAmJiAkcGFyYW1zWyJzaG93c2Vjb25kcyJdPT10cnVlKSB7CiAgICAgICRzaG93c2Vjb25kcz0idHJ1ZSI7CiAgICB9CgoKICAgICRyZXN1bHQuPSI8aW1nIHNyYz0nIi4kY29uZmlnWyJyb290X3VybCJdLiIvbW9kdWxlcy9OZW9Nb2R1bGUvZGF0ZXRpbWVwaWNrZXIvaW1hZ2VzL2NhbC5naWYnIG9uY2xpY2s9XCJqYXZhc2NyaXB0Ok5ld0Nzc0NhbCgnIi4kdGhpcy0+X2lkLiRwYXJhbXNbIm5hbWUiXS4iJywnIi4kZm9ybWF0LiInLCcnLCIuJHNob3d0aW1lLiIsJyIuJHRpbWVmb3JtYXQuIicsIi4kc2hvd3NlY29uZHMuIilcIiAvPiI7CiAgICAvL29uY2xpY2s9ImphdmFzY3JpcHQ6TmV3Q3NzQ2FsKCdkZW1vMScsJ2RkbW15eXl5JykKICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gU21hcnR5SW5wdXRUZXh0KCRzbWFydHluYW1lLCAkcGFyYW1zPWFycmF5KCkpIHsKICAgICR0aGlzLT5TbWFydHlBc3NpZ24oJHNtYXJ0eW5hbWUsICR0aGlzLT5OZW9JbnB1dFRleHQoJHBhcmFtcykpOwogIH0KCiAgZnVuY3Rpb24gU21hcnR5SW5wdXREYXRldGltZSgkc21hcnR5bmFtZSwgJHBhcmFtcz1hcnJheSgpKSB7CiAgICAkdGhpcy0+U21hcnR5QXNzaWduKCRzbWFydHluYW1lLCAkdGhpcy0+TmVvSW5wdXREYXRldGltZSgkcGFyYW1zKSk7CiAgfQoKICBmdW5jdGlvbiBOZW9JbnB1dFBhc3N3b3JkKCRwYXJhbXM9YXJyYXkoKSkgewogICAgcmV0dXJuICR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkKAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiaWQiLCRwYXJhbXMsJHRoaXMtPl9pZCksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJuYW1lIiwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoInZhbHVlIiwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoInNpemUiLCRwYXJhbXMsIjEwIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJtYXhsZW5ndGgiLCRwYXJhbXMsIjI1NSIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiYWRkdGV4dCIsJHBhcmFtcywiIikKICAgICk7CiAgfQogIGZ1bmN0aW9uIFNtYXJ0eUlucHV0UGFzc3dvcmQoJHNtYXJ0eW5hbWUsICRwYXJhbXM9YXJyYXkoKSkgewogICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5bmFtZSwgJHRoaXMtPk5lb0lucHV0UGFzc3dvcmQoJHBhcmFtcykpOwogIH0KCiAgZnVuY3Rpb24gTmVvVGV4dGFyZWEoJHBhcmFtcz1hcnJheSgpKSB7CiAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiZW5hYmxld3lzaXd5ZyIsJHBhcmFtcyxmYWxzZSksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJpZCIsJHBhcmFtcywkdGhpcy0+X2lkKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoYXJyYXkoInZhbHVlIiwidGV4dCIsImNvbnRlbnQiKSwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoIm5hbWUiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZShhcnJheSgiY2xhc3MiLCJjbGFzc25hbWUiKSwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImh0bWxpZCIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJlbmNvZGluZyIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJzdHlsZXNoZWV0IiwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImNvbHMiLCRwYXJhbXMsIjgwIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJyb3dzIiwkcGFyYW1zLCIxNSIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiZm9yY2V3eXNpd3lnIiwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoIndhbnRlZHN5bnRheCIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJhZGR0ZXh0IiwkcGFyYW1zLCIiKQogICAgKTsKICB9CgogIGZ1bmN0aW9uIFNtYXJ0eUlucHV0VGV4dGFyZWEoJHNtYXJ0eW5hbWUsICRwYXJhbXM9YXJyYXkoKSkgewogICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5bmFtZSwgJHRoaXMtPk5lb1RleHRhcmVhKCRwYXJhbXMpKTsKICB9CiAgZnVuY3Rpb24gU21hcnR5VGV4dGFyZWEoJHNtYXJ0eW5hbWUsICRwYXJhbXM9YXJyYXkoKSkgewogICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5bmFtZSwgJHRoaXMtPk5lb1RleHRhcmVhKCRwYXJhbXMpKTsKICB9CgogIGZ1bmN0aW9uIE5lb0lucHV0Q2hlY2tib3goJHBhcmFtcz1hcnJheSgpKSB7CiAgICBpZiAoaXNzZXQoJHBhcmFtc1siY2hlY2tlZCJdKSAmJiAkcGFyYW1zWyJjaGVja2VkIl09PXRydWUpIHsKICAgICAgJHBhcmFtc1sic2VsZWN0ZWR2YWx1ZSJdPSRwYXJhbXNbInZhbHVlIl07CiAgICB9CiAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJpZCIsJHBhcmFtcywkdGhpcy0+X2lkKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoIm5hbWUiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgidmFsdWUiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgic2VsZWN0ZWR2YWx1ZSIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJhZGR0ZXh0IiwkcGFyYW1zLCIiKQogICAgKTsKICB9CgogIGZ1bmN0aW9uIFNtYXJ0eUlucHV0Q2hlY2tib3goJHNtYXJ0eW5hbWUsICRwYXJhbXM9YXJyYXkoKSkgewogICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5bmFtZSwgJHRoaXMtPk5lb0lucHV0Q2hlY2tib3goJHBhcmFtcykpOwogIH0KCiAgZnVuY3Rpb24gTmVvSW5wdXRTdWJtaXQoJHBhcmFtcz1hcnJheSgpKSB7CiAgICBpZiAoaXNzZXQoJHBhcmFtc1siaWdub3JldmFsaWRhdGlvbiJdKSAmJiAkcGFyYW1zWyJpZ25vcmV2YWxpZGF0aW9uIl09PSIxIikgewogICAgICAkcGFyYW1zWyJhZGR0ZXh0Il09Im9uQ2xpY2s9J2lnbm9yZXZhbGlkYXRpb249MTsnIjsKICAgIH0KICAgIHJldHVybiAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJpZCIsJHBhcmFtcywkdGhpcy0+X2lkKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoIm5hbWUiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgidmFsdWUiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiYWRkdGV4dCIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJpbWFnZSIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJjb25maXJtdGV4dCIsJHBhcmFtcywiIikKICAgICk7CiAgfQoKICBmdW5jdGlvbiBTbWFydHlJbnB1dFN1Ym1pdCgkc21hcnR5bmFtZSwgJHBhcmFtcz1hcnJheSgpLCAkdmFsdWU9IiIpIHsKICAgIGlmIChpc19hcnJheSgkcGFyYW1zKSkgewogICAgICAkdGhpcy0+U21hcnR5QXNzaWduKCRzbWFydHluYW1lLCAkdGhpcy0+TmVvSW5wdXRTdWJtaXQoJHBhcmFtcykpOwogICAgfSBlbHNlIHsKICAgICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5bmFtZSwgJHRoaXMtPk5lb0lucHV0U3VibWl0KGFycmF5KCJuYW1lIj0+JHBhcmFtcywidmFsdWUiPT4kdmFsdWUpKSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBOZW9JbnB1dFJlc2V0KCRwYXJhbXM9YXJyYXkoKSkgewogICAgcmV0dXJuICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJpZCIsJHBhcmFtcywkdGhpcy0+X2lkKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoIm5hbWUiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgidmFsdWUiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiYWRkdGV4dCIsJHBhcmFtcywiUmVzZXQiKQogICAgKTsKICB9CgogIGZ1bmN0aW9uIE5lb0lucHV0SGlkZGVuKCRwYXJhbXM9YXJyYXkoKSkgewogICAgcmV0dXJuICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImlkIiwkcGFyYW1zLCR0aGlzLT5faWQpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgibmFtZSIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJ2YWx1ZSIsJHBhcmFtcywiIikKICAgICk7CiAgfQoKICBmdW5jdGlvbiBTbWFydHlJbnB1dEhpZGRlbigkc21hcnR5bmFtZSwkcGFyYW1zPWFycmF5KCksJG9wdHZhbHVlPSIiKSB7CiAgICBpZiAoaXNfYXJyYXkoJHBhcmFtcykpIHsKICAgICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5bmFtZSwkdGhpcy0+TmVvSW5wdXRIaWRkZW4oJHBhcmFtcykpOwogICAgfSBlbHNlIHsKICAgICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5bmFtZSwkdGhpcy0+TmVvSW5wdXRIaWRkZW4oYXJyYXkoIm5hbWUiPT4kcGFyYW1zLCJ2YWx1ZSI9PiRvcHR2YWx1ZSkpKTsKICAgIH0KCiAgfQoKICBmdW5jdGlvbiBOZW9JbnB1dERyb3Bkb3duKCRwYXJhbXM9YXJyYXkoKSkgewogICAgcmV0dXJuICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiaWQiLCRwYXJhbXMsJHRoaXMtPl9pZCksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJuYW1lIiwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoYXJyYXkoIml0ZW1zIiwidmFsdWVzIiksJHBhcmFtcyxhcnJheSgpKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoInNlbGVjdGVkaW5kZXgiLCRwYXJhbXMsLTEpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgic2VsZWN0ZWR2YWx1ZSIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJhZGR0ZXh0IiwkcGFyYW1zLCIiKQogICAgKTsKICB9CgogIGZ1bmN0aW9uIFNtYXJ0eUlucHV0RHJvcGRvd24oJHNtYXJ0eW5hbWUsJHBhcmFtcz1hcnJheSgpKSB7CiAgICAkdGhpcy0+U21hcnR5QXNzaWduKCRzbWFydHluYW1lLCAkdGhpcy0+TmVvSW5wdXREcm9wZG93bigkcGFyYW1zKSk7CiAgfQoKICBmdW5jdGlvbiBOZW9JbnB1dFJhZGlvR3JvdXAoJHBhcmFtcz1hcnJheSgpKSB7CiAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCgKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImlkIiwkcGFyYW1zLCR0aGlzLT5faWQpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgibmFtZSIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJpdGVtcyIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJzZWxlY3RlZHZhbHVlIiwkcGFyYW1zLC0xKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoImFkZHRleHQiLCRwYXJhbXMsIiIpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiZGVsaW1pdGVyIiwkcGFyYW1zLCIiKQogICAgKTsKICB9CgogIGZ1bmN0aW9uIFNtYXJ0eUlucHV0UmFkaW9Hcm91cCgkc21hcnR5bmFtZSwkcGFyYW1zPWFycmF5KCkpIHsKICAgICR0aGlzLT5TbWFydHlBc3NpZ24oJHNtYXJ0eW5hbWUsICR0aGlzLT5OZW9JbnB1dFJhZGlvR3JvdXAoJHBhcmFtcykpOwogIH0KCgogIGZ1bmN0aW9uIE5lb0lucHV0U2VsZWN0TGlzdCgkcGFyYW1zPWFycmF5KCkpIHsKICAgIHJldHVybiAkdGhpcy0+Q3JlYXRlSW5wdXRTZWxlY3RMaXN0KAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiaWQiLCRwYXJhbXMsJHRoaXMtPl9pZCksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJuYW1lIiwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoIml0ZW1zIiwkcGFyYW1zLCIiKSwKICAgICAgJHRoaXMtPk5lb1BhcmFtVmFsdWUoInNlbGVjdGVkaXRlbXMiLCRwYXJhbXMsYXJyYXkoKSksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJzaXplIiwkcGFyYW1zLDMpLAogICAgICAkdGhpcy0+TmVvUGFyYW1WYWx1ZSgiYWRkdGV4dCIsJHBhcmFtcywiIiksCiAgICAgICR0aGlzLT5OZW9QYXJhbVZhbHVlKCJtdWx0aXBsZSIsJHBhcmFtcyx0cnVlKQogICAgKTsKICB9CgoKICBmdW5jdGlvbiBTbWFydHlTY3JhbWJsZUVtYWlsKCRlbWFpbCwgJHNjcmFtYmxpbmc9ImhleCIpIHsKICAgICRzbWFydHlfZGF0YSA9ICJ7bWFpbHRvIGFkZHJlc3M9JyIuJGVtYWlsLiInIGVuY29kZT0nIi4kc2NyYW1ibGluZy4iJ30iOwogICAgLyokc21hcnR5LT5fY29tcGlsZV9zb3VyY2UoJ3RlbXBvcmFyeSB0ZW1wbGF0ZScsICRzbWFydHlfZGF0YSwgJF9jb21waWxlZCApOwogICAgQG9iX3N0YXJ0KCk7CiAgICAkc21hcnR5LT5fZXZhbCgnPz4nIC4gJF9jb21waWxlZCk7CiAgICAkX2NvbnRlbnRzID0gQG9iX2dldF9jb250ZW50cygpOwogICAgQG9iX2VuZF9jbGVhbigpOyovCiAgICAkcmVzdWx0PSR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkc21hcnR5X2RhdGEpOwogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKICAvKioKICAgKgogICAqIExpc3QgaGVscGVyIGZ1bmN0aW9ucwogICAqCiAgICovCiAgZnVuY3Rpb24gTmVvRGVsZXRlSWNvbigkYWN0aW9uLCR0ZXh0LCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKSB7CiAgICAkaWNvbj0kdGhpcy0+Q3JlYXRlTGluaygkdGhpcy0+X2lkLCAkYWN0aW9uLCAkdGhpcy0+X3JldHVybmlkLCR0aGlzLT5OZW9TeXN0ZW1JY29uKCJkZWxldGUuZ2lmIiwkdGhpcy0+X3RleHQoJHRleHQpKSwkcGFyYW1zLCAkY29uZmlybWF0aW9uKTsKICAgIHJldHVybiAkaWNvbjsKICB9CgogIGZ1bmN0aW9uIE5lb0NvcHlJY29uKCRhY3Rpb24sJHRleHQsJHBhcmFtcz1hcnJheSgpLCRjb25maXJtYXRpb249IiIpIHsKICAgICRpY29uPSR0aGlzLT5DcmVhdGVMaW5rKCR0aGlzLT5faWQsICRhY3Rpb24sICR0aGlzLT5fcmV0dXJuaWQsCSR0aGlzLT5OZW9TeXN0ZW1JY29uKCJjb3B5LmdpZiIsJHRoaXMtPl90ZXh0KCR0ZXh0KSksICRwYXJhbXMsICRjb25maXJtYXRpb24pOwogICAgcmV0dXJuICRpY29uOwogIH0KCiAgZnVuY3Rpb24gTmVvRWRpdEljb24oJGFjdGlvbiwkdGV4dCwkcGFyYW1zPWFycmF5KCksJGNvbmZpcm1hdGlvbj0iIikgewogICAgJGljb249JHRoaXMtPkNyZWF0ZUxpbmsoJHRoaXMtPl9pZCwgJGFjdGlvbiwgJHRoaXMtPl9yZXR1cm5pZCwJJHRoaXMtPk5lb1N5c3RlbUljb24oImVkaXQuZ2lmIiwkdGhpcy0+X3RleHQoJHRleHQpKSwJJHBhcmFtcywgJGNvbmZpcm1hdGlvbik7CiAgICByZXR1cm4gJGljb247CiAgfQogIGZ1bmN0aW9uIE5lb1RydWVJY29uKCRhY3Rpb249IiIsJHRleHQ9IiIsJHBhcmFtcz1hcnJheSgpLCRjb25maXJtYXRpb249IiIpCiAgewogICAgaWYgKCRhY3Rpb24gIT0gIiIpIHsKICAgICAgcmV0dXJuICR0aGlzLT5DcmVhdGVMaW5rKCR0aGlzLT5faWQsICRhY3Rpb24sICR0aGlzLT5fcmV0dXJuaWQsICR0aGlzLT5OZW9TeXN0ZW1JY29uKCJ0cnVlLmdpZiIsICR0aGlzLT5fdGV4dCgkdGV4dCkpLCAkcGFyYW1zLCAkY29uZmlybWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+TmVvU3lzdGVtSWNvbigidHJ1ZS5naWYiLCAkdGhpcy0+X3RleHQoJHRleHQpKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIE5lb1J1bkljb24oJGFjdGlvbj0iIiwkdGV4dD0iIiwkcGFyYW1zPWFycmF5KCksJGNvbmZpcm1hdGlvbj0iIikgewogICAgaWYgKCRhY3Rpb24hPSIiKSB7CiAgICAgIHJldHVybiAkdGhpcy0+Q3JlYXRlTGluaygkdGhpcy0+X2lkLCAkYWN0aW9uLCAkdGhpcy0+X3JldHVybmlkLAkkdGhpcy0+TmVvU3lzdGVtSWNvbigicnVuLmdpZiIsJHRoaXMtPl90ZXh0KCR0ZXh0KSksCSRwYXJhbXMsICRjb25maXJtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5OZW9TeXN0ZW1JY29uKCJydW4uZ2lmIiwkdGhpcy0+X3RleHQoJHRleHQpKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gTmVvRmFsc2VJY29uKCRhY3Rpb249IiIsJHRleHQ9IiIsJHBhcmFtcz1hcnJheSgpLCRjb25maXJtYXRpb249IiIpIHsKICAgIGlmICgkYWN0aW9uIT0iIikgewogICAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZUxpbmsoJHRoaXMtPl9pZCwgJGFjdGlvbiwgJHRoaXMtPl9yZXR1cm5pZCwJJHRoaXMtPk5lb1N5c3RlbUljb24oImZhbHNlLmdpZiIsJHRoaXMtPl90ZXh0KCR0ZXh0KSksCSRwYXJhbXMsICRjb25maXJtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5OZW9TeXN0ZW1JY29uKCJmYWxzZS5naWYiLCR0aGlzLT5fdGV4dCgkdGV4dCkpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gTmVvQWNjZXB0SWNvbigkYWN0aW9uPSIiLCR0ZXh0PSIiLCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKSB7CiAgICBpZiAoJGFjdGlvbiE9IiIpIHsKICAgICAgcmV0dXJuICR0aGlzLT5DcmVhdGVMaW5rKCR0aGlzLT5faWQsICRhY3Rpb24sICR0aGlzLT5fcmV0dXJuaWQsCSR0aGlzLT5OZW9TeXN0ZW1JY29uKCJhY2NlcHQuZ2lmIiwkdGhpcy0+X3RleHQoJHRleHQpKSwJJHBhcmFtcywgJGNvbmZpcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPk5lb1N5c3RlbUljb24oImFjY2VwdC5naWYiLCR0aGlzLT5fdGV4dCgkdGV4dCkpOwogICAgfQogIH0KICBmdW5jdGlvbiBOZW9TdG9wSWNvbigkYWN0aW9uPSIiLCR0ZXh0PSIiLCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKSB7CiAgICBpZiAoJGFjdGlvbiE9IiIpIHsKICAgICAgcmV0dXJuICR0aGlzLT5DcmVhdGVMaW5rKCR0aGlzLT5faWQsICRhY3Rpb24sICR0aGlzLT5fcmV0dXJuaWQsCSR0aGlzLT5OZW9TeXN0ZW1JY29uKCJzdG9wLmdpZiIsJHRoaXMtPl90ZXh0KCR0ZXh0KSksCSRwYXJhbXMsICRjb25maXJtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5OZW9TeXN0ZW1JY29uKCJzdG9wLmdpZiIsJHRoaXMtPl90ZXh0KCR0ZXh0KSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIE5lb1dhcm5pbmdJY29uKCRhY3Rpb249IiIsJHRleHQ9IiIsJHBhcmFtcz1hcnJheSgpLCRjb25maXJtYXRpb249IiIpIHsKICAgIGlmICgkYWN0aW9uIT0iIikgewogICAgICByZXR1cm4gJHRoaXMtPkNyZWF0ZUxpbmsoJHRoaXMtPl9pZCwgJGFjdGlvbiwgJHRoaXMtPl9yZXR1cm5pZCwJJHRoaXMtPk5lb1N5c3RlbUljb24oIndhcm5pbmcuZ2lmIiwkdGhpcy0+X3RleHQoJHRleHQpKSwJJHBhcmFtcywgJGNvbmZpcm1hdGlvbik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPk5lb1N5c3RlbUljb24oIndhcm5pbmcuZ2lmIiwkdGhpcy0+X3RleHQoJHRleHQpKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gTmVvSW5mb0ljb24oJGFjdGlvbj0iIiwkdGV4dD0iIiwkcGFyYW1zPWFycmF5KCksJGNvbmZpcm1hdGlvbj0iIikgewogICAgaWYgKCRhY3Rpb24hPSIiKSB7CiAgICAgIHJldHVybiAkdGhpcy0+Q3JlYXRlTGluaygkdGhpcy0+X2lkLCAkYWN0aW9uLCAkdGhpcy0+X3JldHVybmlkLAkkdGhpcy0+TmVvU3lzdGVtSWNvbigiaW5mby5naWYiLCR0aGlzLT5fdGV4dCgkdGV4dCkpLAkkcGFyYW1zLCAkY29uZmlybWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+TmVvU3lzdGVtSWNvbigiaW5mby5naWYiLCR0aGlzLT5fdGV4dCgkdGV4dCkpOwogICAgfQogIH0KCgogIGZ1bmN0aW9uIE5lb0FkZEljb24oJGFjdGlvbiwkdGV4dCwkcGFyYW1zPWFycmF5KCksJGNvbmZpcm1hdGlvbj0iIiwgJGluY2x1ZGV0ZXh0bGluayA9IHRydWUpIHsKICAgICRpY29uPSR0aGlzLT5DcmVhdGVMaW5rKCR0aGlzLT5faWQsICRhY3Rpb24sICR0aGlzLT5fcmV0dXJuaWQsICR0aGlzLT5OZW9TeXN0ZW1JY29uKCJuZXdvYmplY3QuZ2lmIiwkdGhpcy0+X3RleHQoJHRleHQpKSwgJHBhcmFtcywgJGNvbmZpcm1hdGlvbik7CiAgICBpZiAoJGluY2x1ZGV0ZXh0bGluaykgewogICAgICAkaWNvbi49JHRoaXMtPkNyZWF0ZUxpbmsoJHRoaXMtPl9pZCwgJGFjdGlvbiwgJHRoaXMtPl9yZXR1cm5pZCwgJHRoaXMtPl90ZXh0KCR0ZXh0KSwgJHBhcmFtcywgJGNvbmZpcm1hdGlvbik7CiAgICB9CiAgICAvLyRpY29uLj0kdGhpcy0+Q3JlYXRlTGluaygkdGhpcy0+X2lkLCAgJGFjdGlvbiwgJHRoaXMtPl9yZXR1cm5pZCwgJHRleHQsICRwYXJhbXMsICRjb25maXJtYXRpb24sIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKTsKCiAgICAvLz0kdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0dGVtcGxhdGUnLCAwLCAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCR0aGlzLT5MYW5nKCJhZGR0ZW1wbGF0ZSIpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICcnKSAuJyAnLiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0dGVtcGxhdGUnLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCJhZGR0ZW1wbGF0ZSIpLCBhcnJheSgidG9kbyI9PiJhZGQiKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKTsKICAgIHJldHVybiAkaWNvbjsKICB9CgogIGZ1bmN0aW9uIE5lb1N5c3RlbUljb24oJGljb24sJHRleHQ9IiIpIHsKICAgICR0aGVtZW9iaj0kdGhpcy0+X2dldHRoZW1lb2JqKCk7CiAgICBpZiAoJHRoZW1lb2JqKSB7CiAgICAgIHJldHVybiAkdGhlbWVvYmotPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtLycuJGljb24sICR0aGlzLT5fdGV4dCgkdGV4dCksJycsJycsJ3N5c3RlbWljb24nKTsKICAgIH0gcmV0dXJuICIiOwogIH0KCiAgZnVuY3Rpb24gTmVvSGlkZGVuQ29udGVudCgkdGV4dCwgJGNvbnRlbnQsICRjbGlja3R5cGU9InRleHQiLCAkc3RhcnRzaG93bj1mYWxzZSkgewogICAgcmV0dXJuICI8c3Ryb25nPiR0ZXh0PC9zdHJvbmc+PGJyLz4kY29udGVudCI7CiAgfQoKICAvKioKICAgKgogICAqIERCIFNob3J0Y3V0cwogICAqCiAgICovCgogIGZ1bmN0aW9uIE5lb0RCSW5zZXJ0KCR0YWJsZSwgJHZhbHVlcz1hcnJheSgpLCAkdXNlZ2VuaWQ9ZmFsc2UpIHsKICAgICRkYiA9IGNtc21zKCktPkdldERCKCk7CiAgICAkcSA9ICJJTlNFUlQgSU5UTyAiIC4gY21zX2RiX3ByZWZpeCgpIC4gJHRhYmxlOwogICAgJHA9YXJyYXkoKTsKICAgICRmaWVsZHM9IiI7CiAgICAkdmFsPSIiOwogICAgZm9yZWFjaCgkdmFsdWVzIGFzICRrZXk9PiR2YWx1ZSkgewogICAgICBpZiAoJGZpZWxkcz09IiIpICRmaWVsZHM9JGtleTsgZWxzZSAkZmllbGRzLj0iLCIuJGtleTsKICAgICAgaWYgKCR2YWw9PSIiKSAkdmFsPSI/IjsgZWxzZSAkdmFsLj0iLD8iOwogICAgICAkcFtdPSR2YWx1ZTsKICAgIH0KICAgICRxLj0iICgiLiRmaWVsZHMuIikgVkFMVUVTICgiLiR2YWwuIikiOwogICAgLy9lY2hvICRxOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxLCAkcCk7CiAgICByZXR1cm4gKCRkYnJlc3VsdCE9PXRydWUpOwogIH0KCiAgZnVuY3Rpb24gTmVvREJFcnJvckRpZSgpIHsKICAgICRkYiA9IGNtc21zKCktPkdldERCKCk7CiAgICBlY2hvICRkYi0+RXJyb3JNc2coKSAuICI8YnI+PGJyPiIgLiAkZGItPnNxbDsKICAgIGRpZSgpOwogIH0KCiAgZnVuY3Rpb24gTmVvREJVcGRhdGUoJHRhYmxlLCAkdmFsdWVzID0gYXJyYXkoKSwgJGNyaXRlcmlhID0gYXJyYXkoKSkgewogICAgJGRiID0gY21zbXMoKS0+R2V0REIoKTsKICAgICRxID0gIlVQREFURSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gJHRhYmxlIC4gIiBTRVQgIjsKICAgICRwID0gYXJyYXkoKTsKICAgICRmaXJzdCA9IHRydWU7CiAgICBmb3JlYWNoICgkdmFsdWVzIGFzICRmaWVsZCA9PiAkdmFsdWUpIHsKICAgICAgaWYgKCRmaXJzdCkgewogICAgICAgICRxIC49ICRmaWVsZCAuICI9PyI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJHEgLj0gIiwgIiAuICRmaWVsZCAuICI9PyI7CiAgICAgIH0KICAgICAgJHAgPSBhcnJheV9tZXJnZSgkcCwgYXJyYXkoJHZhbHVlKSk7CiAgICAgICRmaXJzdCA9IGZhbHNlOwogICAgfQogICAgaWYgKGNvdW50KCR2YWx1ZXMpPT0yKSB7CgogICAgfQoKICAgICRmaXJzdCA9IHRydWU7CiAgICBmb3JlYWNoICgkY3JpdGVyaWEgYXMgJGZpZWxkID0+ICR2YWx1ZSkgewogICAgICBpZiAoJGZpcnN0KSB7CiAgICAgICAgJHEgLj0gIiBXSEVSRSAiIC4gJGZpZWxkIC4gIj0/IjsKICAgICAgfSBlbHNlIHsKICAgICAgICAkcSAuPSAiIEFORCAiIC4gJGZpZWxkIC4gIj0/IjsKICAgICAgfQogICAgICAkcCA9IGFycmF5X21lcmdlKCRwLCBhcnJheSgkdmFsdWUpKTsKICAgICAgJGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICAvL2VjaG8gJHE7cHJpbnRfcigkcCk7ZGllKCk7CgoKCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHEsICRwKTsKICAgIGlmIChjb3VudCgkdmFsdWVzKT09MikgewogICAgICAvL2VjaG8gJHE7cHJpbnRfcigkcCk7ZGllKCk7CiAgICAgIC8vIGVjaG8gJGRiLT5zcWw7ZGllKCk7CiAgICB9CgogICAgaWYgKCEkZGJyZXN1bHQpIHsKICAgICAgLy9lY2hvICRkYi0+RXJyb3JNc2coKTtkaWUoKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Ly8kZGJyZXN1bHQtPkFmZmVjdGVkX1Jvd3MoKTsKICB9CgogIGZ1bmN0aW9uIE5lb0RCU2VsZWN0KCR0YWJsZSwgJHZhbHVlcz1hcnJheSgpKSB7CgogIH0KCiAgZnVuY3Rpb24gTmVvREJEZWxldGUoJHRhYmxlLCAkdmFsdWVzPWFycmF5KCkpIHsKCiAgfQoKCiAgLyoqCiAgICoKICAgKiBOZW9EYXRhU3RvcmFnZSBzaG9ydGN1dHMKICAgKgogICAqLwogIGZ1bmN0aW9uIEFkZEVudGl0eSgkdGFibGUsICRwcm9wcz1hcnJheSgpKSB7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPkFkZEVudGl0eSgkdGhpcy0+R2V0TmFtZSgpLCR0YWJsZSwkcHJvcHMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gQWRkRW50aXR5OiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gRGVsZXRlRW50aXR5KCRpZCkgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5EZWxldGVFbnRpdHkoJGlkKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIERlbGV0ZUVudGl0eTogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIERlbGV0ZUVudGl0aWVzKCR0YWJsZSwgJGNyaXRlcmlhPWFycmF5KCkpIHsKICAgICRkcz0kdGhpcy0+X2dldGRzKCk7CiAgICBpZiAoJGRzIT09ZmFsc2UpIHsKICAgICAgcmV0dXJuICRkcy0+RGVsZXRlRW50aXRpZXMoJHRoaXMtPkdldE5hbWUoKSwgJHRhYmxlLCAkY3JpdGVyaWEpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gRGVsZXRlRW50aXRpZXM6IENhbm5vdCBhY2Nlc3MgTmVvRGF0YVN0b3JhZ2UgbW9kdWxlIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBHZXRFbnRpdHkoJGlkLCAkb3ZlcnJpZGVwcm9wcz1hcnJheSgpLCAkZmlsbGZpZWxkcz1hcnJheSgpKSB7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPkdldEVudGl0eSgkaWQsICRvdmVycmlkZXByb3BzLCAkZmlsbGZpZWxkcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBHZXRFbnRpdHk6IENhbm5vdCBhY2Nlc3MgTmVvRGF0YVN0b3JhZ2UgbW9kdWxlIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBHZXRFbnRpdGllcygkdGFibGU9IiIsICRjcml0ZXJpYT1hcnJheSgpLCAkYWx3YXlzcmV0dXJuYXJyYXk9ZmFsc2UpIHsKICAgICRkcz0kdGhpcy0+X2dldGRzKCk7CiAgICBpZiAoJGRzIT09ZmFsc2UpIHsKICAgICAgJHJlc3VsdD0kZHMtPkdldEVudGl0aWVzKCR0aGlzLT5HZXROYW1lKCksICR0YWJsZSwgJGNyaXRlcmlhKTsKICAgICAgaWYgKCFpc19hcnJheSgkcmVzdWx0KSkgewogICAgICAgIHJldHVybiBhcnJheSgpOwogICAgICB9CiAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfSBlbHNlIHsKICAgICAgaWYgKCRhbHdheXNyZXR1cm5hcnJheSkgewogICAgICAgIHJldHVybiBhcnJheSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIEdldEVudGl0aWVzOiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBHZXRPbmVFbnRpdHkoJHRhYmxlLCAkY3JpdGVyaWE9YXJyYXkoKSwgJGZhaWxpZm11bHRpcGxlPWZhbHNlKSB7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPkdldE9uZUVudGl0eSgkdGhpcy0+R2V0TmFtZSgpLCAkdGFibGUsICRjcml0ZXJpYSwgJGZhaWxpZm11bHRpcGxlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIEdldE9uZUVudGl0eTogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIEdldE9uZVNvcnRlZEVudGl0eSgkdGFibGUsICRjcml0ZXJpYT1hcnJheSgpLCAkc29ydGZpZWxkcz1hcnJheSgpLCRmYWlsaWZtdWx0aXBsZT1mYWxzZSApIHsKICAgICRkcz0kdGhpcy0+X2dldGRzKCk7CiAgICBpZiAoJGRzIT09ZmFsc2UpIHsKICAgICAgcmV0dXJuICRkcy0+R2V0T25lRW50aXR5KCR0aGlzLT5HZXROYW1lKCksICR0YWJsZSwgJGNyaXRlcmlhLCAkZmFpbGlmbXVsdGlwbGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gR2V0T25lRW50aXR5OiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gR2V0RW50aXRpZXNGdWxsKCR0YWJsZT0iIiwgJGNyaXRlcmlhPWFycmF5KCksICRhbHdheXNyZXR1cm5hcnJheT1mYWxzZSkgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICAkcmVzdWx0PSRkcy0+R2V0RW50aXRpZXNGdWxsKCR0aGlzLT5HZXROYW1lKCksICR0YWJsZSwgJGNyaXRlcmlhKTsKICAgICAgaWYgKCEkcmVzdWx0KSB7CiAgICAgICAgaWYgKCRhbHdheXNyZXR1cm5hcnJheSkgewogICAgICAgICAgJHJlc3VsdD1hcnJheSgpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0gZWxzZSB7CiAgICAgIGlmICgkYWx3YXlzcmV0dXJuYXJyYXkpIHsKICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBHZXRFbnRpdGllc0Z1bGw6IENhbm5vdCBhY2Nlc3MgTmVvRGF0YVN0b3JhZ2UgbW9kdWxlIik7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIFNldEVudGl0eVByb3AoJGlkLCRwcm9wbmFtZSwkcHJvcHZhbHVlLCRwcm9wdHlwZT0idW5kZWZpbmVkIikgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5TZXRFbnRpdHlQcm9wKCRpZCwkcHJvcG5hbWUsJHByb3B2YWx1ZSwkcHJvcHR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gU2V0RW50aXR5UHJvcDogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIENsZWFyRW50aXR5UHJvcCgkaWQsICRwcm9wbmFtZSkgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5DbGVhckVudGl0eVByb3AoJGlkLCAkcHJvcG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gQ2xlYXJFbnRpdHlQcm9wOiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gU2V0RW50aXR5UHJvcHMoJGlkLCAkcHJvcHMvKiwgJGNsZWFyPXRydWUqLykgewogICAgLy9lY2hvICJoaTEiO2RpZSgpOwogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5TZXRFbnRpdHlQcm9wcygkaWQsICRwcm9wcy8qLCAkY2xlYXIqLyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBTZXRFbnRpdHlQcm9wczogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIFNldEVudGl0eVByb3BzRnJvbUFycmF5KCRpZCwgJHByb3BzLCAkdmFsdWVzPWFycmF5KCksICRjbGVhcj10cnVlLCAkZmlsbD1mYWxzZSkgewogICAgaWYgKGVtcHR5KCR2YWx1ZXMpKSB7CiAgICAgICR2YWx1ZXM9JHRoaXMtPl9wYXJhbXM7CiAgICB9CiAgICAvL2VjaG8gImhpMSI7ZGllKCk7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPlNldEVudGl0eVByb3BzRnJvbUFycmF5KCRpZCwgJHByb3BzLCAkdmFsdWVzLCAkY2xlYXIsICRmaWxsKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIFNldEVudGl0eVByb3BzRnJvbUFycmF5OiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCgoKICBmdW5jdGlvbiBTZXRFbnRpdHlQcm9wc09uQ3JpdGVyaWEoJHRhYmxlLCAkcHJvcHMsICRjcml0ZXJpYSwgJGNyZWF0ZT10cnVlLCAkY2xlYXI9ZmFsc2UpIHsKICAgICRkcz0kdGhpcy0+X2dldGRzKCk7CiAgICBpZiAoJGRzIT09ZmFsc2UpIHsKICAgICAgcmV0dXJuICRkcy0+U2V0RW50aXR5UHJvcHNPbkNyaXRlcmlhKCR0aGlzLT5HZXROYW1lKCksICR0YWJsZSwgJHByb3BzLCAkY3JpdGVyaWEsICRjcmVhdGUsICRjbGVhcik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBTZXRFbnRpdHlQcm9wc09uQ3JpdGVyaWE6IENhbm5vdCBhY2Nlc3MgTmVvRGF0YVN0b3JhZ2UgbW9kdWxlIik7OzsKICAgIH0KICB9CgogIGZ1bmN0aW9uIFJlc2V0RW50aXR5UHJvcHMoJGlkLCAkbmV3cHJvcHM9YXJyYXkoKSkgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5SZXNldEVudGl0eVByb3BzKCRpZCwgJG5ld3Byb3BzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIFJlc2V0RW50aXR5UHJvcHM6IENhbm5vdCBhY2Nlc3MgTmVvRGF0YVN0b3JhZ2UgbW9kdWxlIik7OzsKICAgIH0KICB9CgogIGZ1bmN0aW9uIFJlbW92ZU1vZHVsZUVudGl0aWVzKCkgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5SZW1vdmVNb2R1bGVFbnRpdGllcygkdGhpcy0+R2V0TmFtZSgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIFJlbW92ZU1vZHVsZUVudGl0aWVzOiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gQ2xlYXJFbnRpdHlQcm9wcygkaWQpIHsKICAgICRkcz0kdGhpcy0+X2dldGRzKCk7CiAgICBpZiAoJGRzIT09ZmFsc2UpIHsKICAgICAgcmV0dXJuICRkcy0+Q2xlYXJFbnRpdHlQcm9wcygkaWQpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gQ2xlYXJFbnRpdHlQcm9wczogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIENvbXBhcmVFbnRpdGllcygkZW50aXR5MSwgJGVudGl0eTIsICRzb3J0ZmllbGQpIHsKICAgICRkcz0kdGhpcy0+X2dldGRzKCk7CiAgICBpZiAoJGRzIT09ZmFsc2UpIHsKICAgICAgJGRzLT5Db21wYXJlRW50aXRpZXMoJGVudGl0eTEsICRlbnRpdHkyLCAkc29ydGZpZWxkKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIENvbXBhcmVFbnRpdGllczogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIENvbXBhcmVFbnRpdGllc0NvbXBsZXgoJGVudGl0eTEsICRlbnRpdHkyLCAkc29ydGZpZWxkcykgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICAkZHMtPkNvbXBhcmVFbnRpdGllc0NvbXBsZXgoJGVudGl0eTEsICRlbnRpdHkyLCAkc29ydGZpZWxkcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBDb21wYXJlRW50aXRpZXNDb21wbGV4OiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gU29ydEVudGl0aWVzKCRsaXN0LCAkc29ydGZpZWxkcykgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICAkZHMtPlNvcnRFbnRpdGllcygkbGlzdCwgJHNvcnRmaWVsZHMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gU29ydEVudGl0aWVzOiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gRW50aXRpZXNDb3VudCgkdGFibGU9IiIsICRjcml0ZXJpYT1hcnJheSgpKSB7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPkVudGl0aWVzQ291bnQoJHRoaXMtPkdldE5hbWUoKSwgJHRhYmxlLCAkY3JpdGVyaWEpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gRW50aXRpZXNDb3VudDogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIENsZWFyTW9kdWxlRW50aXRpZXMoKSB7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPkNsZWFyTW9kdWxlRW50aXRpZXMoJHRoaXMtPkdldE5hbWUoKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBDbGVhck1vZHVsZUVudGl0aWVzOiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gQ291bnRFbnRpdGllcygkdGFibGUsICRjcml0ZXJpYT1hcnJheSgpKSB7CiAgICAkZW50aXRpZXM9JHRoaXMtPkdldEVudGl0aWVzKCR0YWJsZSwgJGNyaXRlcmlhLCB0cnVlKTsKICAgIHJldHVybiBjb3VudCgkZW50aXRpZXMpOwogIH0KCiAgZnVuY3Rpb24gSXNUYWJsZUVtcHR5KCR0YWJsZSkgewogICAgcmV0dXJuICgkdGhpcy0+Q291bnRFbnRpdGllcygkdGFibGUpPT0wKTsKICB9CgogIC8qCiAgICoKICAgKiBDb25uZWN0aW9uIGZ1bmN0aW9ucwogICAqCiAgICovCgogIGZ1bmN0aW9uIFNldEVudGl0eUNvbm5lY3Rpb24oJGlkMSwgJGlkMiwgJHR5cGU9IiIpIHsKICAgICRkcz0kdGhpcy0+X2dldGRzKCk7CiAgICBpZiAoJGRzIT09ZmFsc2UpIHsKICAgICAgcmV0dXJuICRkcy0+U2V0RW50aXR5Q29ubmVjdGlvbigkaWQxLCAkaWQyLCAkdHlwZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBTZXRFbnRpdHlDb25uZWN0aW9uOiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gQ2xlYXJFbnRpdHlDb25uZWN0aW9ucygkaWQxLCAkaWQyPS0xLCAkdHlwZT0iIikgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5DbGVhckVudGl0eUNvbm5lY3Rpb25zKCRpZDEsICRpZDIsICR0eXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIENsZWFyRW50aXR5Q29ubmVjdGlvbnM6IENhbm5vdCBhY2Nlc3MgTmVvRGF0YVN0b3JhZ2UgbW9kdWxlIik7CiAgICB9CiAgfQoKCgogIGZ1bmN0aW9uIENsZWFyRW50aXR5Q29ubmVjdGlvbigkaWQxLCAkaWQyLCAkdHlwZT0iIikgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5DbGVhckVudGl0eUNvbm5lY3Rpb24oJGlkMSwgJGlkMiwgJHR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gQ2xlYXJFbnRpdHlDb25uZWN0aW9uOiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gQ2hlY2tFbnRpdHlDb25uZWN0aW9uKCRpZDEsICRpZDIsICR0eXBlPSIiLCAkcmV0dXJudmFsdWU9dHJ1ZSkgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5DaGVja0VudGl0eUNvbm5lY3Rpb24oJGlkMSwgJGlkMiwgJHR5cGUsICRyZXR1cm52YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBDaGVja0VudGl0eUNvbm5lY3Rpb246IENhbm5vdCBhY2Nlc3MgTmVvRGF0YVN0b3JhZ2UgbW9kdWxlIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBHZXRFbnRpdHlDb25uZWN0aW9ucygkaWQxLCAkaWQyPS0xLCAkdHlwZT0iIikgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5HZXRFbnRpdHlDb25uZWN0aW9ucygkaWQxLCAkaWQyLCAkdHlwZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBHZXRFbnRpdHlDb25uZWN0aW9uczogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIEFkZEZpZWxkU2V0KCRuYW1lLCRmaWVsZHMpIHsKICAgICRkcz0kdGhpcy0+X2dldGRzKCk7CiAgICBpZiAoJGRzIT09ZmFsc2UpIHsKICAgICAgcmV0dXJuICRkcy0+QWRkRmllbGRTZXQoJHRoaXMtPkdldE5hbWUoKSwkbmFtZSwkZmllbGRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIEFkZEZpZWxkU2V0OiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gR2V0RmllbGRTZXQoJG5hbWUpIHsKICAgICRkcz0kdGhpcy0+X2dldGRzKCk7CiAgICBpZiAoJGRzIT09ZmFsc2UpIHsKICAgICAgcmV0dXJuICRkcy0+R2V0RmllbGRTZXQoJHRoaXMtPkdldE5hbWUoKSwkbmFtZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBHZXRGaWVsZFNldDogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIEVudGl0eVNldFVuc2V0UHJvcHMoJGVudGl0eSwkZmllbGRzZXQsJGZpbGx2YWx1ZT0iIikgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5FbnRpdHlTZXRVbnNldFByb3BzKCR0aGlzLT5HZXRGaWVsZFNldCgkdGhpcy0+R2V0TmFtZSgpKSwkZW50aXR5LCRmaWVsZHNldCwkZmlsbHZhbHVlPSIiKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIEdldEZpZWxkU2V0OiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCgogIGZ1bmN0aW9uIEdldERTRXJyb3JzKCRubDJicj10cnVlLCRjbGVhcj10cnVlKSB7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPkdldEVycm9ycygkbmwyYnIsJGNsZWFyKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIEdldEZpZWxkU2V0OiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gU2hvd0RTRXJyb3JzKCRjbGVhcj10cnVlKSB7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPkdldEVycm9ycygkY2xlYXIpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gU2hvd0RTRXJyb3JzOiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gRFNJbkVycm9yKCkgewogICAgJGRzPSR0aGlzLT5fZ2V0ZHMoKTsKICAgIGlmICgkZHMhPT1mYWxzZSkgewogICAgICByZXR1cm4gJGRzLT5JbkVycm9yKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBEU0luRXJyb3I6IENhbm5vdCBhY2Nlc3MgTmVvRGF0YVN0b3JhZ2UgbW9kdWxlIik7CiAgICB9CiAgfQoKICAvKgogICAqCiAgICogVXRpbGl0eSBmdW5jdGlvbnMKICAgKgogICAqLwoKICBmdW5jdGlvbiBOZW9TbGFzaGVzKCR1cmwpIHsKICAgICRyZXN1bHQ9c3RyX3JlcGxhY2UoIlxcIiwiLyIsJHVybCk7CiAgICAvL1llcywgcGhwIHVuZGVyIHdpbmRvd3MgcnVucyBwZXJmZWN0bHkgd2l0aCB0aG9zZSBzbGFzaGVzLCBhcyBsb25nIGFzIHlvdQogICAgLy9kb24ndCBtaXggdGhlbSB3aXRoIGJhY2tzbGFzaGVzISEKICAgIC8vJHJlc3VsdD1zdHJfcmVwbGFjZSgiLyIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdXJsKTsKICAgIC8vcmV0dXJuIHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkcmVzdWx0KTsKICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gRGVjb2RlSFRNTEVudGl0aWVzKCRzKSB7CiAgICAkdG1wPWh0bWxfZW50aXR5X2RlY29kZSgkcyk7CiAgICB3aGlsZSAoJHRtcCE9aHRtbF9lbnRpdHlfZGVjb2RlKCR0bXApKSB7CiAgICAgICR0bXA9aHRtbF9lbnRpdHlfZGVjb2RlKCR0bXApOwogICAgfQogICAgcmV0dXJuIGh0bWxfZW50aXR5X2RlY29kZSgkdG1wKTsKICB9CgogIGZ1bmN0aW9uIFNsYXNoZXMoJHVybCkgewogICAgcmV0dXJuICR0aGlzLT5OZW9TbGFzaGVzKCR1cmwpOwogIH0KCiAgZnVuY3Rpb24gU2xhc2goJHN0ciwkc3RyMj0iIiwkc3RyMz0iIikgewogICAgaWYgKCRzdHI9PSIiKSByZXR1cm4gJHN0cjI7CiAgICBpZiAoJHN0cjI9PSIiICYmICRzdHIzPT0iIikgcmV0dXJuICRzdHI7CiAgICAkcmVzdWx0PSIiOwogICAgaWYgKCRzdHJbc3RybGVuKCRzdHIpLTFdIT0iLyIpIHsKICAgICAgaWYgKCRzdHIyWzBdIT0iLyIpIHsKICAgICAgICAkcmVzdWx0PSRzdHIuIi8iLiRzdHIyOwogICAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQ9JHN0ci4kc3RyMjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKCRzdHIyWzBdIT0iLyIpIHsKICAgICAgICAkcmVzdWx0PSRzdHIuJHN0cjI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdD0kc3RyLnN1YnN0cigkc3RyMiwxKTsgLy90cmltIGF3YXkgb25lIG9mIHRoZSBzbGFzaGVzCiAgICAgIH0KICAgIH0KICAgIGlmICgkc3RyMz09IiIpIHJldHVybiAkcmVzdWx0OwogICAgaWYgKCRyZXN1bHRbc3RybGVuKCRyZXN1bHQpLTFdIT0iLyIpIHsKICAgICAgaWYgKCRzdHIzWzBdIT0iLyIpIHsKICAgICAgICAkcmVzdWx0PSRyZXN1bHQuIi8iLiRzdHIzOwogICAgICB9IGVsc2UgewogICAgICAgICRyZXN1bHQ9JHJlc3VsdC4kc3RyMzsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKCRzdHIzWzBdIT0iLyIpIHsKICAgICAgICAkcmVzdWx0PSRyZXN1bHQuJHN0cjM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJHJlc3VsdD0kcmVzdWx0LnN1YnN0cigkc3RyMywxKTsgLy90cmltIGF3YXkgb25lIG9mIHRoZSBzbGFzaGVzCiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gTmVvRGlyTGlzdCgkcm9vdCwkcmV0dXJuPSJmaWxlcyIsJGludHJvZHVjdGlvbj1hcnJheSgpLCRleGNsdWRlcz1hcnJheSgpLCRtYXhyZWN1cnNpb249LTEpIHsKICAgICRkaXJsaXN0PWFycmF5KCk7CiAgICAkY29uZmlnPWNtc21zKCktPkdldENvbmZpZygpOwogICAgJG1vZGU9IiI7CiAgICBzd2l0Y2goJHJldHVybikgewogICAgICBjYXNlICJmaWxlcyI6ICRtb2RlPSJGSUxFUyI7YnJlYWs7CiAgICAgIGNhc2UgImRpcnMiOiAkbW9kZT0iRElSUyI7YnJlYWs7CiAgICAgIGNhc2UgImJvdGgiOiAkbW9kZT0iRlVMTCI7YnJlYWs7CiAgICB9CiAgICAkZnVsbHJvb3Q9JHRoaXMtPlNsYXNoKCRjb25maWdbInJvb3RfcGF0aCJdLCRyb290KTsKICAgICRmaWxlcmVjPSBnZXRfcmVjdXJzaXZlX2ZpbGVfbGlzdCAoJGZ1bGxyb290LCAkZXhjbHVkZXMgLCRtYXhyZWN1cnNpb24gLCRtb2RlKTsgLy9ObyBtYXhkZXB0aCBpbiByZWN1cnNpb24KICAgIGlmICghZW1wdHkoJGludHJvZHVjdGlvbikpIHsKICAgICAgJGRpcmxpc3Q9JGludHJvZHVjdGlvbjsKICAgIH0KICAgIGZvcmVhY2goJGZpbGVyZWMgYXMgJGtleT0+JHZhbHVlKSB7CiAgICAgICR2YWx1ZTE9JHRoaXMtPlNsYXNoZXMoc3RyX3JlcGxhY2UoJGNvbmZpZ1sncm9vdF9wYXRoJ10sJycsJHZhbHVlKSk7CiAgICAgIC8vcHJldmVudCBjdXJyZW50IGRpciBmcm9tIHNob3dpbmcgdXAKICAgICAgLy9pZiAoJHZhbHVlMT09KCRwcm9maWxlWyJwYXRoIl0uIi8iKSkgY29udGludWU7CiAgICAgIC8vQ2hlY2sgZm9yIGhpZGRlbiBmaWxlcwogICAgICAkZGlycz1leHBsb2RlKCIvIiwkdmFsdWUxKTsKICAgICAgJGhpZGRlbj1mYWxzZTsKICAgICAgZm9yZWFjaCgkZGlycyBhcyAkZGlyKSB7CiAgICAgICAgaWYgKHN1YnN0cigkZGlyLDAsMSk9PSIuIikgeyRoaWRkZW49dHJ1ZTsgYnJlYWs7fQogICAgICB9CiAgICAgIGlmICgkaGlkZGVuKSBjb250aW51ZTsKCiAgICAgIC8vbm90IGhpZGRlbiwgYWRkIHRvIGxpc3QKICAgICAgJGRpcmxpc3RbJHZhbHVlMV09JHZhbHVlMTsKICAgIH0KICAgIHJldHVybiAkZGlybGlzdDsKICB9CgogIGZ1bmN0aW9uIE5lb0dldE1pbWVUeXBlKCRmaWxlbmFtZSwgJGluY2x1ZGVlbmNvZGluZyA9IHRydWUpIHsKICAgIGlmIChjbGFzc19leGlzdHMoImZpbmZvIikpIHsKICAgICAgJGZpbmZvID0gYXJyYXkoKTsKICAgICAgaWYgKCRpbmNsdWRlZW5jb2RpbmcpIHsKICAgICAgICAkZmluZm8gPSBuZXcgZmluZm8oRklMRUlORk9fTUlNRSk7IC8vIHJldHVybiBtaW1lIHR5cGUgYWxhIG1pbWV0eXBlIGV4dGVuc2lvbgogICAgICB9IGVsc2UgewogICAgICAgICRmaW5mbyA9IG5ldyBmaW5mbyhGSUxFSU5GT19NSU1FX1RZUEUpOyAvLyByZXR1cm4gbWltZSB0eXBlIGFsYSBtaW1ldHlwZSBleHRlbnNpb24KICAgICAgfQogICAgICBpZiAoISRmaW5mbykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gJGZpbmZvLT5maWxlKCRmaWxlbmFtZSk7CiAgICB9IGVsc2UgewogICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCJtaW1lX2NvbnRlbnRfdHlwZSIpKSB7CiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlbmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLkRJUkVDVE9SWV9TRVBBUkFUT1IuIm1pbWV0eXBlcy5waHAiKTsKICAgICAgICByZXR1cm4gcmV0dXJuTUlNRVR5cGUoJGZpbGVuYW1lKTsKICAgICAgfQogICAgfQogIH0KCiAgLypDaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4gaW5kZXggaW4gYW4gYXJyYXkgYW5kIHJldHVybiB0aGUgdmFsdWUgaWYgaXQncyB0aGVyZQogICAqYW5kIHRoZSBkZWZhdWx0IHZhbHVlIGlmIGl0J3Mgbm90CiAgKi8KICBmdW5jdGlvbiBOZW9QYXJhbVZhbHVlKCRuYW1lLCRwYXJhbXM9YXJyYXkoKSwkZGVmYXVsdD0iIikgewoKICAgIGlmICghaXNfYXJyYXkoJHBhcmFtcykpIHsKICAgICAgLy9UaGlzIHdheSAybmQgcGFyYW1ldGVyIGNhbiBhbHNvIGJlIHVzZWQgYXMgZGVmYXVsdCB2YWx1ZQogICAgICBpZiAoJHBhcmFtcyE9IiIgJiYgJGRlZmF1bHQ9PSIiKSB7CiAgICAgICAgJGRlZmF1bHQ9JHBhcmFtczsKICAgICAgfQogICAgICAkcGFyYW1zPSR0aGlzLT5fcGFyYW1zOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGVtcHR5KCRwYXJhbXMpKSAkcGFyYW1zPSR0aGlzLT5fcGFyYW1zOwogICAgfQogICAgaWYgKCFpc19hcnJheSgkbmFtZSkpIHsKICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJG5hbWVdKSkgcmV0dXJuICRwYXJhbXNbJG5hbWVdOwogICAgICByZXR1cm4gJGRlZmF1bHQ7CiAgICB9IGVsc2UgewogICAgICBmb3JlYWNoICgkbmFtZSBhcyAkc2luZ2xlbmFtZSkgewogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWyRzaW5nbGVuYW1lXSkpIHJldHVybiAkcGFyYW1zWyRzaW5nbGVuYW1lXTsKICAgICAgfQogICAgICByZXR1cm4gJGRlZmF1bHQ7CiAgICB9CiAgfQoKICAvL1Nob3J0Y3V0IGZvciB0aGUgYWJvdmUKICBmdW5jdGlvbiBOUFYoJG5hbWUsICRwYXJhbXM9ZmFsc2UsICRkZWZhdWx0PSIiKSB7CiAgICByZXR1cm4gJHRoaXMtPk5lb1BhcmFtVmFsdWUoJG5hbWUsICRwYXJhbXMsICRkZWZhdWx0KTsKICB9CgogIEZ1bmN0aW9uIE5lb0FwcGx5UGFyYW1WYWx1ZXMoJHRoaXNhcnJheSwgJHBhcmFtcz1hcnJheSgpLCAkaW5kZXhlcz1hcnJheSgpLCAkYWx3YXlzZmlsbD1mYWxzZSkgewogICAgaWYgKGVtcHR5KCRwYXJhbXMpKSAkcGFyYW1zPSR0aGlzLT5fcGFyYW1zOwogICAgaWYgKGVtcHR5KCRwYXJhbXMpIHx8IGVtcHR5KCRpbmRleGVzKSkgcmV0dXJuICR0aGlzYXJyYXk7CiAgICBpZiAoaXNfYXNzb2MoJGluZGV4ZXMpKSB7CiAgICAgIGZvcmVhY2goJGluZGV4ZXMgYXMgJGluZGV4PT4kZGVmYXVsdHZhbHVlKSB7CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJGluZGV4XSkpIHsKICAgICAgICAgICR0aGlzYXJyYXlbJGluZGV4XT0kcGFyYW1zWyRpbmRleF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICR0aGlzYXJyYXlbJGluZGV4XT0kZGVmYXVsdHZhbHVlOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yZWFjaCgkaW5kZXhlcyBhcyAkaW5kZXgpIHsKICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1skaW5kZXhdKSkgewogICAgICAgICAgJHRoaXNhcnJheVskaW5kZXhdPSRwYXJhbXNbJGluZGV4XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKCRhbHdheXNmaWxsKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXNhcnJheVskaW5kZXhdKSkgJHRoaXNhcnJheVskaW5kZXhdPSIiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLy9wcmludF9yKCR0aGlzYXJyYXkpOwogICAgcmV0dXJuICR0aGlzYXJyYXk7CiAgfQoKICBmdW5jdGlvbiBOZW9BcHBseU5ld1ZhbHVlcygkb2xkdmFsdWVzLCAkbmV3dmFsdWVzLCRpZ25vcmVibGFuaz1mYWxzZSkgewogICAgJHJlc3VsdD0kb2xkdmFsdWVzOwogICAgZm9yZWFjaCgkcmVzdWx0IGFzICRpbmRleD0+JHZhbHVlKSB7CiAgICAgIGlmIChpc3NldCgkbmV3dmFsdWVzWyRpbmRleF0pKSB7CiAgICAgICAgJHJlc3VsdFskaW5kZXhdPSRuZXd2YWx1ZXNbJGluZGV4XTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBNYWtlU2ltcGxlQXJyYXkoJHRhYmxlLCRmaWVsZCwkYXNzb2NpZD10cnVlKSB7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPk1ha2VTaW1wbGVBcnJheSgkdGhpcy0+R2V0TmFtZSgpLCAkdGFibGUsICRmaWVsZCwgJGFzc29jaWQpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICR0aGlzLT5FcnJvcigiZnVuY3Rpb24gTWFrZVNpbXBsZUFycmF5OiBDYW5ub3QgYWNjZXNzIE5lb0RhdGFTdG9yYWdlIG1vZHVsZSIpOzsKICAgIH0KICB9CgogIGZ1bmN0aW9uIE1ha2VBc3NvY0FycmF5KCR0YWJsZSwkZmllbGRzKSB7CiAgICAkZHM9JHRoaXMtPl9nZXRkcygpOwogICAgaWYgKCRkcyE9PWZhbHNlKSB7CiAgICAgIHJldHVybiAkZHMtPk1ha2VBc3NvY0FycmF5KCR0aGlzLT5HZXROYW1lKCksICR0YWJsZSwgJGZpZWxkcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJHRoaXMtPkVycm9yKCJmdW5jdGlvbiBNYWtlQXNzb2NBcnJheTogQ2Fubm90IGFjY2VzcyBOZW9EYXRhU3RvcmFnZSBtb2R1bGUiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIENoZWNrRmlsZUV4dGVuc2lvbigkZmlsZW5hbWUsICRhbGxvd2VkZXh0ZW5zaW9ucz1hcnJheSgpKSB7CiAgICAkZXhwbG9kZWRmaWxlPWV4cGxvZGUoIi4iLCRmaWxlbmFtZSk7CiAgICAkZXh0PXN0cnRvbG93ZXIoYXJyYXlfcG9wKCRleHBsb2RlZGZpbGUpKTsKICAgIGlmIChpbl9hcnJheSgkZXh0LCRhbGxvd2VkZXh0ZW5zaW9ucykpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gTmVvVG9vbFRpcCgkcGFyYW1zPWFycmF5KCkpIHsKICAgICR0ZXh0PSR0aGlzLT5OUFYoInRleHQiLCRwYXJhbXMsIj8iKTsKICAgICR1cmw9JHRoaXMtPk5QVigidXJsIiwkcGFyYW1zLCIiKTsKICAgICR0aXRsZT0kdGhpcy0+TlBWKCJ0aXRsZSIsJHBhcmFtcywiIik7CiAgICAkY29udGVudD0kdGhpcy0+TlBWKCJjb250ZW50IiwkcGFyYW1zLCIiKTsKICAgICRzcGFuY2xhc3M9JHRoaXMtPk5QVigic3BhbmNsYXNzIiwkcGFyYW1zLCJuZW90b29sdGlwIik7CiAgICBpZiAoJHVybCE9IiIpIHsKICAgICAgJHJlc3VsdD0nPGEgY2xhc3M9IicuJHNwYW5jbGFzcy4nIiBocmVmPSInLiR1cmwuJyI+JzsKICAgIH0gZWxzZSB7CiAgICAgICRyZXN1bHQ9JzxhIGNsYXNzPSInLiRzcGFuY2xhc3MuJyIgc3R5bGU9ImN1cnNvcjogZGVmYXVsdDsiIGhyZWY9IiMiIG9uY2xpY2s9InJldHVybiBmYWxzZTsiPic7CiAgICB9CiAgICAkcmVzdWx0Lj0kdGV4dDsKICAgICRyZXN1bHQuPSc8c3Bhbj4nOwogICAgaWYgKCR0aXRsZSE9IiIpIHsKICAgICAgJHJlc3VsdC49IjxzdHJvbmc+Ii4kdGl0bGUuIjwvc3Ryb25nPjxici8+IjsKICAgIH0KICAgICRyZXN1bHQuPSRjb250ZW50OwogICAgJHJlc3VsdC49Ijwvc3Bhbj4iOwogICAgJHJlc3VsdC49IjwvYT4iOwogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBOZW9FbXB0eSgkaW5kZXg9IiIsJGRhdGE9YXJyYXkoKSkgewogICAgaWYgKCFpc19hcnJheSgkZGF0YSkpIHJldHVybiB0cnVlOwogICAgaWYgKGVtcHR5KCRkYXRhKSkgewogICAgICAkZGF0YT0kdGhpcy0+X3BhcmFtczsKICAgIH0KICAgIGlmIChlbXB0eSgkZGF0YSkpIHJldHVybiB0cnVlOwogICAgaWYgKCRpbmRleD09IiIpIHJldHVybiB0cnVlOwogICAgaWYgKCFpc3NldCgkZGF0YVskaW5kZXhdKSkgcmV0dXJuIHRydWU7CiAgICBpZiAodHJpbSgkZGF0YVskaW5kZXhdKT09IiIpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gTmVvVmFsaWRhdGVFbWFpbCgkZW1haWwsICRhdm9pZG9ubGluZSA9IGZhbHNlKSB7CiAgICBpZiAocHJlZ19tYXRjaCgiL15bYS16QS1aMC05X10rQFthLXpBLVowLTlcLV0rXC5bYS16QS1aMC05XC1cLl0rJF0vaSIsICRlbWFpbCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmICgkYXZvaWRvbmxpbmUpIHJldHVybiB0cnVlOwoKICAgIGxpc3QoJFVzZXJuYW1lLCAkRG9tYWluKSA9IGV4cGxvZGUoIkAiLCAkZW1haWwpOwoKICAgIGlmIChnZXRteHJyKCREb21haW4sICRNWEhvc3QpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgaWYgKEBmc29ja29wZW4oJERvbWFpbiwgMjUsICRlcnJubywgJGVycnN0ciwgMzApKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBOZW9WYWxpZGF0ZVVSTCgkdXJsKSB7CiAgICAvLyRwYXR0ZXJuID0gJy9eKChbXHddKzopP1wvXC8pPygoW1xkXHddfCVbYS1mQS1mXGRdezIsMn0pKyg6KFtcZFx3XXwlW2EtZkEtZlxkXXsyLDJ9KSspP0ApPyhbXGRcd11bLVxkXHddezAsMjUzfVtcZFx3XVwuKStbXHddezIsNH0oOltcZF0rKT8oXC8oWy0rX34uXGRcd118JVthLWZBLWZcZF17MiwyfSkqKSooXD8oJmFtcDs/KFstK19+LlxkXHddfCVbYS1mQS1mXGRdezIsMn0pPT8pKik/KCMoWy0rX34uXGRcd118JVthLWZBLWZcZF17MiwyfSkqKT8kLyc7CiAgICByZXR1cm4gKCAhIHByZWdfbWF0Y2goJy9eKGh0dHB8aHR0cHN8ZnRwKTpcL1wvKFtBLVowLTldW0EtWjAtOV8tXSooPzpcLltBLVowLTldW0EtWjAtOV8tXSopKyk6PyhcZCspP1wvPy9pJywgJHVybCkpID8gRkFMU0UgOiBUUlVFOwoKICAgIC8vcmV0dXJuIHByZWdfbWF0Y2goJHBhdHRlcm4sICR1cmwpOwogIH0KCiAgZnVuY3Rpb24gTmVvTm9CcmVha3MoJHN0cmluZykgewogICAgJHN0cmluZz1zdHJfcmVwbGFjZSgiICIsIiZuYnNwOyIsJHN0cmluZyk7CiAgICByZXR1cm4gJHN0cmluZzsKICB9CgogIGZ1bmN0aW9uIE5lb1ByaW50UigkZGF0YT1hcnJheSgpLCRzZW5kb3V0PXRydWUpIHsKICAgIGlmIChlbXB0eSgkZGF0YSkpIHsKICAgICAgJGRhdGE9JHRoaXMtPl9wYXJhbXM7CiAgICB9CiAgICBpZiAoZW1wdHkoJGRhdGEpKSB7CiAgICAgICRkYXRhPSJubyBjb250ZW50IGZvdW5kIjsKICAgIH0KICAgICRvdXRwdXQ9Jzxici8+PGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjayI+JzsKICAgICRvdXRwdXQuPSI8cHJlPiI7CiAgICAkb3V0cHV0Lj1wcmludF9yKCRkYXRhLHRydWUpOwogICAgJG91dHB1dC49IjwvcHJlPiI7CiAgICAkb3V0cHV0Lj0iPC9kaXY+PGJyLz4iOwogICAgaWYgKCRzZW5kb3V0KSB7CiAgICAgIGVjaG8gJG91dHB1dDsKICAgIH0KICAgIHJldHVybiAkb3V0cHV0OwogIH0KCiAgZnVuY3Rpb24gTmVvVHJpbUFycmF5KCRpbmFycmF5PWFycmF5KCkpICAgewogICAgJG91dGFycmF5PWFycmF5KCk7CiAgICBmb3JlYWNoICgkaW5hcnJheSBhcyAka2V5PT4kdmFsdWUpIHsKICAgICAgaWYgKHRyaW0oJHZhbHVlKT09IiIpIGNvbnRpbnVlOwogICAgICAkb3V0YXJyYXlbJGtleV09dHJpbSgkdmFsdWUpOwogICAgfQogICAgcmV0dXJuICRvdXRhcnJheTsKICB9CgogIGZ1bmN0aW9uIE5lb0NsZWFuQXJyYXkoJGluYXJyYXk9YXJyYXkoKSwgJHdhbnRlZGluZGV4ZXM9YXJyYXkoKSwgJGFsd2F5c3NldD1mYWxzZSkgewogICAgJG91dGFycmF5PWFycmF5KCk7CiAgICBmb3JlYWNoICgkd2FudGVkaW5kZXhlcyBhcyAkaW5kZXgpIHsKICAgICAgaWYgKGlzc2V0KCRpbmFycmF5WyRpbmRleF0pKSB7CiAgICAgICAgaWYgKHRyaW0oJGluYXJyYXlbJGluZGV4XSkhPSIiIHx8ICRhbHdheXNzZXQpIHsKICAgICAgICAgICRvdXRhcnJheVskaW5kZXhdPSRpbmFycmF5WyRpbmRleF07CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmICgkYWx3YXlzc2V0KSB7CiAgICAgICAgICAkb3V0YXJyYXlbJGluZGV4XT0iIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkb3V0YXJyYXk7CiAgfQoKICAvKgogICAqCiAgICogU21hcnR5IHNob3J0Y3V0cwogICAqCiAgICovCiAgZnVuY3Rpb24gU21hcnR5QXNzaWduKCRzbWFydHlpbmZvLCAkc21hcnR5Y29udGVudD0iIikgewogICAgaWYgKCFpc19hcnJheSgkc21hcnR5aW5mbykpIHsKICAgICAgaWYgKCRzbWFydHlpbmZvIT0iIikgewogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigkc21hcnR5aW5mbywgJHNtYXJ0eWNvbnRlbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICgkc21hcnR5aW5mbz09IiIpIHsKICAgICAgICAgIHJldHVybiAkdGhpcy0+RXJyb3IoImZ1bmN0aW9uIFNtYXJ0eUFzc2lnbjogc21hcnR5LXZhcm5hbWUgbm90IHNldCIsZmFsc2UsYXJyYXkoInNtYXJ0eWluZm8iPT4kc21hcnR5aW5mbywic21hcnR5Y29udGVudCI9PiRzbWFydHljb250ZW50KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vT2sgaXQncyBhbiBhcnJheQogICAgaWYgKGlzX2Fzc29jKCRzbWFydHlpbmZvKSkgewogICAgICAvL0l0J3MgYW4gYXNzb2NfYXJyYXksIHNvIHdlIGFzc2lnbiBldmVyeSBzaW5nbGUgcGFpciBvZiBpbmZvCiAgICAgIGZvcmVhY2goJHNtYXJ0eWluZm8gYXMgJHNtYXJ0eW5hbWU9PiRzbWFydHljb250ZW50KSB7CiAgICAgICAgaWYgKGlzX2FycmF5KCRzbWFydHljb250ZW50KSkgewogICAgICAgICAgLy9pdCdzIGEgbmVzdGVkIGFycmF5CiAgICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCRzbWFydHluYW1lLCAkc21hcnR5Y29udGVudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigkc21hcnR5bmFtZSwgJHNtYXJ0eWNvbnRlbnQpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy9JdCdzIG5vdCBhbiBhc3NvY19hcnJheSwgc28gd2Ugc2ltcGx5IHJlZi1hc3NpZ24gaXQuCiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJHNtYXJ0eWluZm8sICRzbWFydHljb250ZW50KTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gTmVvU21hcnR5QXNzaWduKCRzbWFydHlpbmZvLCAkc21hcnR5Y29udGVudD0iIikgewogICAgJHRoaXMtPlNtYXJ0eUFzc2lnbigkc21hcnR5aW5mbywgJHNtYXJ0eWNvbnRlbnQpOwogIH0KCiAgZnVuY3Rpb24gU21hcnR5QXNzaWduUHJlZigkc21hcnR5bmFtZSwgJHByZWZlcmVuY2VuYW1lPSIiKSB7CiAgICBpZiAoJHByZWZlcmVuY2VuYW1lIT0iIikgewogICAgICAkdGhpcy0+U21hcnR5QXNzaWduKCRzbWFydHluYW1lLCAkdGhpcy0+UHJlZigkcHJlZmVyZW5jZW5hbWUpKTsKICAgIH0gZWxzZSB7CiAgICAgICR0aGlzLT5TbWFydHlBc3NpZ24oJHNtYXJ0eW5hbWUsICR0aGlzLT5QcmVmKCRzbWFydHluYW1lKSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBTbWFydHlBc3NpZ25DTVMoJG1vZHVsZSwkc21hcnR5bmFtZT0ibW9kdWxlIikgewogICAgaWYgKGlzX29iamVjdCgkbW9kdWxlKSkgewogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCRzbWFydHluYW1lLCAkbW9kdWxlKTsKICAgIH0gZWxzZSB7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJHNtYXJ0eW5hbWUsICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgkbW9kdWxlKSk7CiAgICB9CiAgfQoKICAvKgogICAqCiAgICogRGVidWdnaW5nIGZ1bmN0aW9ucwogICAqCiAgICovCgogIGZ1bmN0aW9uIEZpcmVEZWJ1ZygkY29tbWFuZCwkbWVzc2FnZT0iIiwkdmFyaWFibGVzPWFycmF5KCkpIHsKICAgICRmaXJlcGhwbW9kdWxlPSR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRmlyZVBIUERlYnVnJyk7CiAgICBpZiAoJGZpcmVwaHBtb2R1bGUpIHsKICAgICAgLy9Nb2R1bGUgZm91bmQKICAgICAgJGZpcmVwaHBtb2R1bGUtPlNldE1vZHVsZU5hbWUoJHRoaXMtPkdldE5hbWUoKSk7CiAgICAgICRmaXJlcGhwbW9kdWxlLT5Db21tYW5kKCRjb21tYW5kLCAkbWVzc2FnZSwgJHZhcmlhYmxlcyk7CiAgICB9IC8vZWxzZSBNb2R1bGUgbm90IGZvdW5kfQogIH0KCgogIC8qCiAgICoKICAgKiBFcnJvciBoYW5kbGluZwogICAqCiAgICovCiAgZnVuY3Rpb24gRXJyb3IoJGVycm9ydGV4dCwkcmV0dXJudmFsdWU9ZmFsc2UsJHBhcmFtcz1hcnJheSgpKSB7CiAgICAkdGhpcy0+X2Vycm9ycy49JGVycm9ydGV4dDsKICAgIGlmICghZW1wdHkoJHBhcmFtcykgJiYgaXNfYXJyYXkoJHBhcmFtcykpIHsKICAgICAgJHRoaXMtPl9lcnJvcnMuPSIgKCI7CiAgICAgICRmaXJzdD10cnVlOyAvL0hhbmRsaW5nIHRoZSBjb21tYQogICAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRwYXJhbT0+JHZhbHVlKSB7CiAgICAgICAgaWYgKCRmaXJzdCkgJGZpcnN0PWZhbHNlOyBlbHNlICR0aGlzLT5fZXJyb3JzLj0iLCI7CiAgICAgICAgJHRoaXMtPl9lcnJvcnMuPSRwYXJhbS4iPT4iLiR2YWx1ZTsKICAgICAgfQogICAgICAkdGhpcy0+X2Vycm9ycy49IikiOwogICAgfQogICAgJHRoaXMtPl9lcnJvcnMuPSJcbiI7CiAgICByZXR1cm4gJHJldHVybnZhbHVlOwogIH0KCiAgZnVuY3Rpb24gR2V0RXJyb3JzKCRubDJicj10cnVlLCRjbGVhcj10cnVlLCRpbmNsdWRlZHM9dHJ1ZSkgewogICAgJGVycm9ycz0kdGhpcy0+X2Vycm9yczsKICAgIGlmICgkbmwyYnIpIHsKICAgICAgJGVycm9ycz1ubDJicigkZXJyb3JzKTsKICAgIH0KICAgIGlmICgkaW5jbHVkZWRzKSB7CiAgICAgIGlmICgkdGhpcy0+RFNJbkVycm9yKCkpIHsKICAgICAgICAkZXJyb3JzLj0kdGhpcy0+R2V0RFNFcnJvcnMoJG5sMmJyLCRjbGVhcik7CiAgICAgIH0KICAgIH0KICAgIGlmICgkY2xlYXIpIHsKICAgICAgJHRoaXMtPl9lcnJvcnM9IiI7CiAgICB9CiAgICByZXR1cm4gJGVycm9yczsKICB9CgogIGZ1bmN0aW9uIE91dHB1dEVycm9ycygkY2xlYXI9dHJ1ZSwkaW5jbHVkZWRzPXRydWUpIHsKICAgIGlmICgkdGhpcy0+SW5FcnJvcigpKSB7CiAgICAgIGVjaG8gIlxuXG48ZGl2IHN0eWxlPSdib3JkZXI6M3B4IHNvbGlkIHJlZD5cbiI7CiAgICAgIGVjaG8gJHRoaXMtPkdldEVycm9ycyh0cnVlLCRjbGVhciwkaW5jbHVkZWRzKTsKICAgICAgZWNobyAiXG48L2Rpdj5cblxuIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIEluRXJyb3IoKSB7CiAgICByZXR1cm4gKCR0aGlzLT5fZXJyb3JzIT0iIik7CiAgfQoKCiAgLyoKICAgKgogICAqIFRoYW5rcyB0byBodHRwOi8vd3d3LnBocHRveXMuY29tL2UxMDdfcGx1Z2lucy9jb250ZW50L2NvbnRlbnQucGhwP2NvbnRlbnQuNTgKICAgKiBmb3IgdGhlc2UgZnVuY3Rpb25zCiAgICoKICAgKi8KCiAgZnVuY3Rpb24gYXJyYXkyc3RyaW5nKCRteWFycmF5LCAmJG91dHB1dCwgJiRwYXJlbnRrZXkpIHsKICAgIGZvcmVhY2ggKCRteWFycmF5IGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgJHBhcmVudGtleSAuPSAka2V5IC4gIl4iOwogICAgICAgIGFycmF5MnN0cmluZygkdmFsdWUsICRvdXRwdXQsICRwYXJlbnRrZXkpOwogICAgICAgICRwYXJlbnRrZXkgPSAiIjsKICAgICAgfSBlbHNlIHsKICAgICAgICAkb3V0cHV0IC49ICRwYXJlbnRrZXkgLiAka2V5IC4gIl4iIC4gJHZhbHVlIC4gIlxuIjsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gc3RyaW5nMmFycmF5KCRzdHJpbmcsICYkbXlhcnJheSkgewogICAgJGxpbmVzID0gZXhwbG9kZSgiXG4iLCAkc3RyaW5nKTsKICAgIGZvcmVhY2ggKCRsaW5lcyBhcyAkdmFsdWUpIHsKICAgICAgJGl0ZW1zID0gZXhwbG9kZSgiJiMxODM7IiwgJHZhbHVlKTsKICAgICAgaWYgKHNpemVvZigkaXRlbXMpID09IDIpIHsKICAgICAgICAkbXlhcnJheVskaXRlbXNbMF1dID0gJGl0ZW1zWzFdOwogICAgICB9IGVsc2UgaWYgKHNpemVvZigkaXRlbXMpID09IDMpIHsKICAgICAgICAkbXlhcnJheVskaXRlbXNbMF1dWyRpdGVtc1sxXV0gPSAkaXRlbXNbMl07CiAgICAgIH0KICAgIH0KICB9CgoKCgoKICAvKgogICAqCiAgICogSW50ZXJuYXQgaGVscGVyIGZ1bmN0aW9ucwogICAqCiAgICovCgogIHByaXZhdGUgZnVuY3Rpb24gX3RleHQoJHRleHQpIHsKICAgIGlmICgkdGV4dFswXT09IkAiKSByZXR1cm4gJHRoaXMtPkxhbmcoc3Vic3RyKCR0ZXh0LDEpKTsKCiAgICByZXR1cm4gJHRleHQ7CiAgfQoKCn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT52ZXJzaW9uIDAuNi4wPC9saT4KICBDbGVhbmVkIHVwIGEgYml0IGFuZCB0ZXN0ZWQgd3RoIGNtc21zIDIuMAogIDxsaT52ZXJzaW9uIDAuNS41PC9saT4KICBBZGRlZCBTbWFydHlJbnB1dFJhZGlvR3JvdXAtc2hvcnRjdXQKICA8YnIvPgoKICBBZGRlZCBfIHNob3J0Y3V0IGZvciBsYW5nLWZ1bmN0aW9uCgogICA8bGk+dmVyc2lvbiAwLjUuNDwvbGk+CiAgIEFkZGVkIE5lb0NsZWFuQXJyYXkgZnVuY3Rpb24KCiAgICA8bGk+dmVyc2lvbiAwLjUuMzwvbGk+CkFkZGVkICJudW1lcmljIiBhbmQgIm51bWVyaWNvcmVtcHR5IiB0byBmb3JtdmFsaWRhdGlvbgogICAgPGJyLz4KCiAgICBBZGRlZCAiZW1wdHkiICB0byBmb3JtdmFsaWRhdGlvbgogICAgPGJyLz4KICAgIEFkZGVkIEluY1ByZWYgYW5kIERlY1ByZWYKICAgIDxici8+CiAgICBBZGRlZCBOZW9CdXR0b25MaW5rIHdvcmtpbmcgbGlrZSBhIGxpbmsKCiAgPGxpPnZlcnNpb24gMC41LjI8L2xpPgogIEFkZGVkICRjb25maWc9JGdDbXMtPkdldENvbmZpZygpOyB0byBORU9JTklUCiAgICA8YnIvPgogIGFkZGVkIF90ZXh0IGZvciBlYXN5IGludGVybmFsIHRyYW5zbGF0aW9ucyB1c2luZyBAcHJlZml4CiAgICA8YnIvPgogICAgTmVvSWNvbnMgY2FuIG5vdyBiZSB3aXRoIGxpbmsKICAgIDxici8+CiAgICBUaW1lIHNlbGVjdGlvbiBub3cgYWxsb3dlZCBpbiBOZW9EYXRlVGltZQogICAgPGJyLz4KICAgIGZpeGVkICRhbHdheXNyZXR1cm5hcnJheSBpbiBHZXRFbnRpdGllcwogICAgPGJyLz4KICAgIEZpeGVkIG1pbWUgdHlwZSB3aGVuIGluY2x1ZGluZyBkYXRldGltZXBpY2tlciBqYXZhc2NyaXB0CgogIDxsaT52ZXJzaW9uIDAuNS4xPC9saT4KICBmaXhlZCBnZXRlbnRpdGllc2Z1bGwgcGFyYW0gY2FsbGVkIGFsd2F5c3JldHVybmFycmF5LCBhZGRlZCB0aGUgYWRkdGV4dCBwYXJhbSB0byBuZW9wcmV0dHlsaW5rIHRvIGJlIGFibGUgdG8gYWRkIGFsdC10ZXh0cwoKICA8bGk+dmVyc2lvbiAwLjUuMDwvbGk+CiAgRml4ZXMsIGNsZWFudXBzLCBhbmQgZW5kaW5nIG9mIHZlcnNpb24gY29uZnVzaW9uCgogIDxsaT52ZXJzaW9uIDAuNC4xPC9saT4KICBBZGRlZCBtb3JlIHZhbGlkYXRpb25zLCBlcXVhbCBhbmQgaWRlbnRpY2FsPGJyLz4KICBBZGRlZCBldmVuIHNob3J0ZXIgTmVvVXJsIGFuZCBOZW9MaW5rCiAgUHJlcGFyZWQgZm9yIGNtc21zIDEuMTAKCiAgPGxpPnZlcnNpb24gMC40LjA8L2xpPgogIEFkZGVkIGRhdGV0aW1lcGlja2VyIGFuZCBpbnRlZ3JhdGVkIGl0CgogIDxsaT52ZXJzaW9uIDAuMy41PGJyLz4KICBNdWx0aXBsZSBidWdmaXhlcyBkaXNjb3ZlcmVkIGJ5IFBocFN0b3JtCiAgPGJyLz4KCiAgPGxpPnZlcnNpb24gMC4zLjQ8YnIvPgogIHJld29ya2VkIGZvciBjbXNtcygpLW1ldGhvZHMKICA8YnIvPgoKCiAgPGxpPnZlcnNpb24gMC4zLjM8YnIvPgogIE5ldyBmb3JtdmFsaWRhdGlvbiBtZXRob2RzIGZvciBkcm9wZG93bnMgYW5kIHJhZGlvZ3JvdXBzCiAgPGJyLz4KCiAgPGxpPnZlcnNpb24gMC4zLjI8YnIvPgogIGFkZGVkIGNzcy1pbmplY3Rpb25zIHN0eWxpbmcgdGhlIGZvcm12YWxpZGF0aW9uLXBvcHVwCiAgPGJyLz4KICBzdGFydGVkIGRvaW5nIHNvbWUgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSB0aGUgbW9kdWxlLWNsYXNzCgogIDxsaT52ZXJzaW9uIDAuMy4xPGJyLz4KICBmaXhlZCB0aGUgdWdseSBjc3MgaW4gYm9keSxpdCdzIG5vdyBqYXZhc2NyaXB0CiAgPGJyLz4KICBBZGRlZCBfIHNob3J0Y3V0IGZvciBsYW5nLWZ1bmN0aW9uCgogICAgPGxpPnZlcnNpb24gMC41LjQ8L2xpPgogICAgQWRkZWQgImVtcHR5IiB0byBmb3JtZmllbGQtdmFsaWRhdGlvbiB0eXBlcwogICAgPGJyLz4KCiAgICA8YnIvPgoKICAgIDxsaT52ZXJzaW9uIDAuNS4zPC9saT4KICAgIERhdGUyVW5peCBub3cgcmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgdGhhdCB3YXMgd2hhdCBpdCB3YXMgZ2l2ZW4KICAgIDxici8+CiAgICBBZGRlZCBORU9fSU5JVF9JTlNUQUxMIHRvIGF2b2lkIGVycm9ycyBpbiBtZXRob2QuaW5zdGFsbC5waHAKICAgIDxici8+CgoKICAgIDxsaT52ZXJzaW9uIDAuNS4yPC9saT4KICAgIEFkZGVkICRjb25maWc9JGdDbXMtPkdldENvbmZpZygpOyB0byBORU9JTklUCiAgICA8YnIvPgogICAgYWRkZWQgX3RleHQgZm9yIGVhc3kgaW50ZXJuYWwgdHJhbnNsYXRpb25zIHVzaW5nIEBwcmVmaXgKICAgIDxici8+CiAgICBOZW9JY29ucyBjYW4gbm93IGJlIHdpdGggbGluawogICAgPGJyLz4KICAgIFRpbWUgc2VsZWN0aW9uIG5vdyBhbGxvd2VkIGluIE5lb0RhdGVUaW1lCiAgICA8YnIvPgogICAgZml4ZWQgJGFsd2F5c3JldHVybmFycmF5IGluIEdldEVudGl0aWVzCgogICAgPGxpPnZlcnNpb24gMC41LjE8L2xpPgogICAgZml4ZWQgZ2V0ZW50aXRpZXNmdWxsIHBhcmFtIGNhbGxlZCBhbHdheXNyZXR1cm5hcnJheSwgYWRkZWQgdGhlIGFkZHRleHQgcGFyYW0gdG8gbmVvcHJldHR5bGluayB0byBiZSBhYmxlIHRvIGFkZCBhbHQtdGV4dHMKCiAgICA8bGk+dmVyc2lvbiAwLjUuMDwvbGk+CiAgICBGaXhlcywgY2xlYW51cHMsIGFuZCBlbmRpbmcgb2YgdmVyc2lvbiBjb25mdXNpb24KCiAgICA8bGk+dmVyc2lvbiAwLjQuMTwvbGk+CiAgICBBZGRlZCBtb3JlIHZhbGlkYXRpb25zLCBlcXVhbCBhbmQgaWRlbnRpY2FsPGJyLz4KICAgIEFkZGVkIGV2ZW4gc2hvcnRlciBOZW9VcmwgYW5kIE5lb0xpbmsKICAgIFByZXBhcmVkIGZvciBjbXNtcyAxLjEwCgogICAgPGxpPnZlcnNpb24gMC40LjA8L2xpPgogICAgQWRkZWQgZGF0ZXRpbWVwaWNrZXIgYW5kIGludGVncmF0ZWQgaXQKCiAgICA8bGk+dmVyc2lvbiAwLjMuNTxici8+CiAgICAgICAgTXVsdGlwbGUgYnVnZml4ZXMgZGlzY292ZXJlZCBieSBQaHBTdG9ybQogICAgICAgIDxici8+CgogICAgPGxpPnZlcnNpb24gMC4zLjQ8YnIvPgogICAgICAgIHJld29ya2VkIGZvciBjbXNtcygpLW1ldGhvZHMKICAgICAgICA8YnIvPgoKCiAgICA8bGk+dmVyc2lvbiAwLjMuMzxici8+CiAgICAgICAgTmV3IGZvcm12YWxpZGF0aW9uIG1ldGhvZHMgZm9yIGRyb3Bkb3ducyBhbmQgcmFkaW9ncm91cHMKICAgICAgICA8YnIvPgoKICAgIDxsaT52ZXJzaW9uIDAuMy4yPGJyLz4KICAgICAgICBhZGRlZCBjc3MtaW5qZWN0aW9ucyBzdHlsaW5nIHRoZSBmb3JtdmFsaWRhdGlvbi1wb3B1cAogICAgICAgIDxici8+CiAgICAgICAgc3RhcnRlZCBkb2luZyBzb21lIGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhlIG1vZHVsZS1jbGFzcwoKICAgIDxsaT52ZXJzaW9uIDAuMy4xPGJyLz4KICAgICAgICBmaXhlZCB0aGUgdWdseSBjc3MgaW4gYm9keSxpdCdzIG5vdyBqYXZhc2NyaXB0CiAgICAgICAgPGJyLz4KCiAgICA8bGk+dmVyc2lvbiAwLjMuMDxici8+CiAgICAgICAgYWRkZWQgbmV3IGZ1bmN0aW9uIE5lb1NldFByZWZzLCBzaG9ydGluZyB0aGUgc2F2aW5nIG9mIHByZWZzIGZvciBpbnN0YW5jZQogICAgICAgIDxici8+CiAgICAgICAgYWRkZWQgZWFzeSBmb3JtLXZhbGlkYXRpb24gYW5kIG5pY2UgbWVzc2FnZXMgbGlua2VkIHRvIHRoYXQKICAgICAgICA8YnIvPgogICAgICAgIE9ic29sZXRlZCBTbWFydHlVcGxvYWRGb3JtU3RhcnQuCiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCBmdW5jdGlvbiBOZW9UcmltQXJyYXkoJGluYXJyYXk9YXJyYXkoKSkKCiAgICA8bGk+dmVyc2lvbiAwLjIuODxici8+CiAgICAgICAgYWRkZWQgbmV3IGZ1bmN0aW9uIE5lb0dldE1pbWVUeXBlCgogICAgPGxpPnZlcnNpb24gMC4yLjc8YnIvPgogICAgICAgIGZpeGVkIE5lb0Ntc0xpbmsgZm9yIHByZXR0eSB1cmxzLCBtaXNzZWQgdGhlIHRhcmdldGNvbnRlbnRvbmx5IHBhcmFtZXRlci4uLgoKICAgIDxsaT52ZXJzaW9uIDAuMi42PGJyLz4KICAgICAgICBBZGRlZCBhIFNldFByZWYtc2hvcnRjdXQgYW5kIGEgbmljZSBOZW9TZXRQcmVmLW1ldGhvZCAoc2VlIGhlbHApCiAgICAgICAgPGJyLz4KICAgICAgICBzZXQgZW50aXR5IHByb3BzIGZyb20gYXJyYXkgbm93IHVzZXMgc3RvcmVkIHBhcmFtcy12YWx1ZXMgaXMgb3RoZXIgbm90IHNwZWNpZmllcwogICAgICAgIDxici8+CiAgICAgICAgUmV3b3JrZWQgTmVvUmVkaXJlY3QoRnVsbCkgdG8gYmUgZmFzdGVyIHRvIHVzZQogICAgICAgIDxici8+CiAgICAgICAgQWRkZWQgTmVvVmFsaWRhdGVVUkwtbWV0aG9kCiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCBEZWNvZGVIVE1MRW50aXRpZXMKICAgICAgICA8YnIvPgogICAgICAgIEFkZGVkIE5lb0FkbWluUmV0dXJuCgoKICAgIDxsaT52ZXJzaW9uIDAuMi41PGJyLz4KICAgICAgICBBZGRlZCBhbiBvcHRpb24gdG8gTmVvQWRkSWNvbiB0byBhbHNvIGluY2x1ZGUgdGhlIGZvbGxpbmdzIHRleHQgbGluawogICAgICAgIDxici8+CiAgICAgICAgQWRkZWQgSXNUYWJsZUVtcHR5CiAgICAgICAgPGJyLz4KICAgICAgICBVcGRhdGUgRW1haWxWYWxpZGF0aW9uIHRvIG1haWwtY2FwYWJpbGl0aWVzIG9mIGRvbWFpbiBhcyB3ZWxsCiAgICAgICAgPGJyLz4KICAgICAgICBNYWRlIDJuZCBwYXJhbSB0byBOZW9Qw4VhcmFtVmFsdWUgZG91YmxlIGFzIGRlZmF1bHQgdmFsdWUgKHdoZW4gbm90IGFuIGFycmF5KQoKCgogICAgPGxpPnZlcnNpb24gMC4yLjQ8YnIvPgogICAgICAgIEFkZGVkIE5lb0VtcHR5LWZ1bmN0aW9uIHdoaWNoIGNoZWNrcyBmb3IgYW4gaW5kZXggaW4gYW4gYXJyYXkKICAgICAgICA8YnIvPgogICAgICAgIE1hZGUgTmVvUHJpbnRSIG91dHB1dCBjb250ZW50IG9mICRfcGFyYW1zIGlmIG5vIHBhcmFtZXRlciB3YXMgZ2l2ZW4KICAgICAgICA8YnIvPkFkZGVkIE5lb1ZhbGlkYXRlRW1haWwtZnVuY3Rpb24KICAgICAgICA8YnIvPkFkZGVkIE5lb05vQnJlYWtzLWZ1bmN0aW9uCgogICAgPGxpPnZlcnNpb24gMC4yLjM8YnIvPgogICAgICAgIE5vdyBwb3NzaWJsZSB0byByZWdpc3RlciAkcGFyYW1zIGZvciBldmVuIGVhc2llciBzeW50YXggaW4gcmVsZXZhbnQgZnVuY3Rpb25zIGxpa2UgTlBWCiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCBDcmVhdGVJbnB1dFBhc3N3b3JkLXdyYXBwZXIKICAgICAgICA8YnIvPgogICAgICAgIEFkZGVkIGZpbGwgcGFyYW1ldGVyIHRvIFNldEVudGl0eVByb3BzRnJvbUFycmF5CgoKICAgIDxsaT52ZXJzaW9uIDAuMi4yPGJyLz4KICAgICAgICBBZGRlZCBhIGN1c3RvbSByZXR1cm52YWx1ZSB0byBjaGVja2VudGl0eWNvbm5lY3Rpb25zCiAgICAgICAgPGJyLz4KICAgICAgICBJbXBsZW1lbnRlZCBNYWtlU2ltcGxlQXJyYXkKICAgICAgICA8YnIvPgogICAgICAgIEFkZGVkIE5lb1RydWVJY29uIGFuZCAgTmVvVHJ1ZUljb24KCiAgICA8bGk+dmVyc2lvbiAwLjIuMTxici8+CiAgICAgICAgYWRkZWQgYXJyYXlfZGlmZl9rZXkgaW1wbGVtZW50YXRpb24gZm9yIHByZS01LjEuMCB2ZXJzaW9uCiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCAkYWx3YXlzcmV0dXJuYXJyYXk9ZmFsc2UgdG8gR2V0RW50aXRpZXMoRnVsbCktbWV0aG9kcwogICAgICAgIDxici8+CiAgICAgICAgQWRkZWQgU21hcnRBc3NpZ25QcmVmLW1ldGhvZAogICAgICAgIDxici8+CiAgICAgICAgQWRkZWQgVG9vbHRpcC1TdXBwb3J0CiAgICAgICAgPGJyLz4KICAgICAgICBBZGRlZCBOZW9SZWRpcmVjdC1mdW5jdGlvbgoKICAgIDxsaT52ZXJzaW9uIDAuMi4wPGJyLz4KICAgICAgICAtIGdlbmVyYWwgYnVnZml4aW5nPGJyLz4KICAgICAgICAtIEFkZGVkIGEgTmVvRGlyTGlzdC1mdW5jdGlvbjxici8+CiAgICAgICAgLSBGaXhlZCBuYW1lIGVycm9yIG9uIE5lb0lucHV0RHJvcGRvd248YnIvPgogICAgICAgIC0gYWRkZWQgc3VwcG9ydCBmb3IgM3JkIHBhcmFtZXRlciB0byBTbGFzaC1mdW5jdGlvbjxici8+CiAgICAgICAgLSBhZGRlZCBOZW9DbXNMaW5rIGFuZCBOZW9DbXNVcmwgc2hvcnRjdXRzPGJyLz4KICAgICAgICAtIGFkZGVkIFNtYXJ0eVVwbG9hZEZvcm1TdGFydDxici8+CiAgICAgICAgLSBhZGRlZCBTbWFydHlJbnB1dE11bHRpSGlkZGVuPGJyLz4KCiAgICA8L2xpPgogICAgPGxpPnZlcnNpb24gMC4xLjA8YnIvPgogICAgICAgIC0gaW5pdGlhbCByZWxlYXNlPC9saT4KPC91bD4=]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0cm9uZz5Ob3RpY2UhIFRoaXMgaXMgYSBtb2R1bGUtZGV2ZWxvcGVyLW9ubHkgbW9kdWxlLiBJZiB5b3UgYXJlIG5vdCBhIGRldmVsb3Blcgp5b3UnbGwgcHJvYmFibHkganVzdCB3YW50IHRvIHNraXAgdGhlIGdvcnkgZGV0YWlscyBvZiB0aGlzIHBhZ2UgYW5kIHJlbHkgb24gdGhhdAp0aGUgbW9kdWxlIGp1c3QgZG9lcyBpdCdzIHdvcmsuPC9zdHJvbmc+CjxoMz5QdXJwb3NlIG9mIHRoZSBtb2R1bGU8L2gzPgpUaGUgcHVycG9zZSBvZiB0aGlzIG1vZHVsZSBpcyB0byBjdXQgb2ZmIG9uIGRldmVsb3BtZW50dGltZSBwcm92aWRpbmcgc29tZQplYXN5IHRvIHVzZSBmdW5jdGlvbnMgZXh0ZW5kaW5nIHRoZSBtb2R1bGUtQVBJIG9mIENNUyBNYWRlIFNpbXBsZS4gVGhpcyBpbmNsdWRlcywKYnV0IGlzIG5vIGxpbWl0ZWQgdG8sIHNob3J0Y3V0cyB0byBOZW9EYXRhU3RvcmFnZS1mdW5jaW9uYWxpdHksIGEgY291cGxlIG9mIG5pY2UKU21hcnR5LXNob3J0Y3V0cywgRmlyZVBIUC1pbnRlZ3JhdGlvbiBldGMuCjxoMz5Vc2FnZSBvZiB0aGUgbW9kdWxlPC9oMz4KVG8gdXNlIHRoaXMgZXh0ZW5kZWQgbW9kdWxlLWNsYXNzIHlvdSBzaG91bGQgaW5oZXJpdCBmcm9tIE5lb01vZHVsZS1jbGFzcyBpbnN0ZWFkCm9mIHRoZSB1c3VhbCBDTVNNb2R1bGUtY2xhc3MuIFRoaXMgY2FuIGJlIGRvbmUgbGlrZSB0aGlzOgo8cHJlPgpyZXF1aXJlX29uY2UoZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSkuIi9OZW9Nb2R1bGUvTmVvTW9kdWxlLm1vZHVsZS5waHAiKTsKY2xhc3MgTXlNb2R1bGUgZXh0ZW5kcyBOZW9Nb2R1bGUgewo8L3ByZT4KSWYgeW91IHdpc2ggdG8gdXNlIHRoZSBOZXdEYXRhU3RvcmFnZSBmdW5jdGlvbmFsaXR5LCB5b3Ugc2hvdWxkIG9mIGNvdXJzZSBhbHNvCmluc3RhbGwgdGhhdCBtb2R1bGUuCjxoMz5Ib3cgdG8gZ2V0IGhlbHA8L2gzPgpJIHdpbGwgcmVwZWF0LCB0aGlzIG1vZHVsZSBpcyBmb3IgZGV2ZWxvcGVycyBvbmx5LiBJZiB5b3UgY2Fubm90IHJlYWQgcGhwLXNvdXJjZSBjb2RlLAp5b3Ugc2hvdWxkIHVzZSBpdCBmb3IgZGV2ZWxvcG1lbnQgYW55d2F5LiBJZiB5b3UgY2FuLCBhbHdheXMgY2hlY2sgb3V0IHRoZSBjb2RlIApmb3IgaGludHMgb24gaG93IHRvIG1ha2UgaXQgd29yay4gSWYgeW91IHN0aWxsIGhhdmUgcXVlc3Rpb25zIG9yIHN1Z2dlc3Rpb25zIGZvcgpmaXhlcy9pbXByb3ZlbWVudHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY2F0Y2ggbWUgKFNpbG1hcmlsbGlvbikgaW4gdGhlIGZvcnVtIG9nICNpcmMuCgo8aDM+TGlzdCBvZiBtZXRob2RzPC9oMz4KSSB3aWxsIHRyeSB0byBrZWVwIHRoaXMgbGlzdCB1cHRvZGF0ZSwgYnV0IGZvciBtb3N0IHJlY2VudCBsaXN0LCBwbGVhc2UKY2hlY2sgdGhlIE5lb01vZHVsZS5tb2R1bGUucGhwLWZpbGUgaXRzZWxmLiBTb21lIGRvY3VtZW50YXRpb24gb2YgdGhlIG1ldGhvZHMKbWF5IGV2ZW4gc25lYWsgaW4gdGhlcmUgc29tIGRheS4KPHByZT4KLyoKICoKICogU2V0dXAgZnVuY3Rpb25zCiAqCiAqLwoKZnVuY3Rpb24gU2V0SWQoJGlkKQpmdW5jdGlvbiBOZW9TZXRJZCgkaWQpCmZ1bmN0aW9uIE5lb1NldFJldHVybklkKCRyZXR1cm5pZCkKZnVuY3Rpb24gTmVvU2V0dXAoJGlkLCRtb2R1bGUsJHJldHVybmlkPSIwIiwkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb1NldFBhcmFtcygkcGFyYW1zKTsKCiAgLyoKICAgKgogICAqIEdlbmVyYWwgc2hvcnRjdXQgZnVuY3Rpb25zCiAgICoKICAgKi8KZnVuY3Rpb24gUHJlZigkcHJlZm5hbWUsJGRlZmF1bHQ9IiIpCmZ1bmN0aW9uIFNldFByZWYoJHByZWZuYW1lLCAkdmFsdWUpCmZ1bmN0aW9uIEluY1ByZWYoJHByZWZuYW1lLCAkdmFsdWU9MSkKZnVuY3Rpb24gRGVjUHJlZigkcHJlZm5hbWUsICR2YWx1ZT0xKQoKLy9TZXRzIGEgcHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGUgJHBhcmFtcy1hcnJheSBzZXQgYnkgTmVvU2V0VXAuCi8vT3B0aW9uYWxseSBkZWxldGluZyBhc3NpZ25pbmcgYSB2YWx1ZSBvciBkZWxldGluZyB0aGUgcHJlZmVyZW5jZSBpZiBub3Qgc2V0IGluIHRoaXMgYXJyYXkKZnVuY3Rpb24gTmVvU2V0UHJlZigkcHJlZm5hbWUsICRub3RzZXR2YWx1ZT0iIiwgJGRlbGV0ZWlmbm90c2V0PWZhbHNlKQpmdW5jdGlvbiBOZW9TZXRQcmVmcygkcHJlZnM9YXJyYXkoKSkgLy9yZXF1aXJlcyBhbiBhc3NvY2lhdGVkIGFycmF5IG9mICRwcmVmbmFtZXM9PiRub3RzZXR2YWx1ZQpmdW5jdGlvbiBOZW9DbXNMaW5rKCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvQ21zVXJsKCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvUmVkaXJlY3QoJGFjdGlvbj0iIiwkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb1JlZGlyZWN0RnVsbCgkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb0FkbWluUmV0dXJuKCRwYXJhbXM9YXJyYXkoKSkKLyoKICoKICogRm9ybS1nZW5lcmF0aW9uIGZ1bmN0aW9ucwogKgogKi8KCmZ1bmN0aW9uIE5lb0Zvcm1TdGFydCgkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb0Zvcm1FbmQoJHBhcmFtcz1hcnJheSgpKQpmdW5jdGlvbiBOZW9JbnB1dFRleHQoJHBhcmFtcz1hcnJheSgpCmZ1bmN0aW9uIE5lb1RleHRhcmVhKCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvSW5wdXRDaGVja2JveCgkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb0lucHV0U3VibWl0KCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvSW5wdXRSZXNldCgkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIE5lb0lucHV0SW5wdXREcm9wZG93bigkcGFyYW1zPWFycmF5KCkpCgovKiBmdW5jdGlvbiBiZWxvdyBpbmNsdWRlIHNtYXJ0eWFzc2lnbm1lbnQsIGRvZXMgbm90IHJldHVybiBhbnl0aGluZyAqLwpmdW5jdGlvbiBTbWFydHlGb3JtU3RhcnQoJHNtYXJ0eW5hbWUsJHBhcmFtcz1hcnJheSgpKQoKZnVuY3Rpb24gU21hcnR5Rm9ybUVuZCgkc21hcnR5bmFtZSkKZnVuY3Rpb24gU21hcnR5SW5wdXRTdWJtaXQoJHNtYXJ0eW5hbWUsJHBhcmFtcykKCmZ1bmN0aW9uIFNtYXJ0eUlucHV0VGV4dCgkc21hcnR5bmFtZSwkcGFyYW1zPWFycmF5KCkpCmZ1bmN0aW9uIFNtYXJ0eUlucHV0Q2hlY2tib3goJHNtYXJ0eW5hbWUsJHBhcmFtcz1hcnJheSgpKQoKZnVuY3Rpb24gU21hcnR5SW5wdXRIaWRkZW4oJHNtYXJ0eW5hbWUsJG5hbWUsJHZhbHVlKQpvcgpmdW5jdGlvbiBTbWFydHlJbnB1dEhpZGRlbigkc21hcnR5bmFtZSwkcGFyYW1zKQoKZnVuY3Rpb24gU21hcnR5SW5wdXRNdWx0aUhpZGRlbigkc21hcnR5bmFtZSwkZmllbGRzPWFycmF5KCkpCgovKgogKgogKiBOZW9EYXRhU3RvcmFnZSBzaG9ydGN1dHMKICoKICovCmZ1bmN0aW9uIEFkZEVudGl0eSgkdGFibGUsICRwcm9wcz1hcnJheSgpKQpmdW5jdGlvbiBEZWxldGVFbnRpdHkoJGlkKQpmdW5jdGlvbiBHZXRFbnRpdHkoJGlkLCAkb3ZlcnJpZGVwcm9wcz1hcnJheSgpKQpmdW5jdGlvbiBHZXRFbnRpdGllcygkdGFibGU9IiIsICRjcml0ZXJpYT1hcnJheSgpLCAkYWx3YXlzcmV0dXJuYXJyYXk9ZmFsc2UpCmZ1bmN0aW9uIEdldE9uZUVudGl0eSgkdGFibGUsICRjcml0ZXJpYT1hcnJheSgpLCAkZmFpbGlmbXVsdGlwbGU9ZmFsc2UpCmZ1bmN0aW9uIEdldEVudGl0aWVzRnVsbCgkdGFibGU9IiIsICRjcml0ZXJpYT1hcnJheSgpLCAkYWx3YXlzcmV0dXJuYXJyYXk9ZmFsc2UpCmZ1bmN0aW9uIFNldEVudGl0eVByb3AoJGlkLCRwcm9wbmFtZSwkcHJvcHZhbHVlLCRwcm9wdHlwZT0idW5kZWZpbmVkIikKZnVuY3Rpb24gQ2xlYXJFbnRpdHlQcm9wKCRpZCwgJHByb3BuYW1lKQpmdW5jdGlvbiBTZXRFbnRpdHlQcm9wcygkaWQsICRwcm9wcywgJGNsZWFyPXRydWUpCmZ1bmN0aW9uIFNldEVudGl0eVByb3BzRnJvbUFycmF5KCRpZCwgJHByb3BzLCAkdmFsdWVzLCAkY2xlYXI9dHJ1ZSwgJGZpbGw9ZmFsc2UpCmZ1bmN0aW9uIFNldEVudGl0eVByb3BzT25Dcml0ZXJpYSgkdGFibGUsICRwcm9wcywgJGNyaXRlcmlhLCAkY3JlYXRlPXRydWUsICRjbGVhcj1mYWxzZSkgLy9Eb2VzIG5vdCB3b3JrCmZ1bmN0aW9uIFJlc2V0RW50aXR5UHJvcHMoJGlkLCAkbmV3cHJvcHM9YXJyYXkoKSkKZnVuY3Rpb24gUmVtb3ZlTW9kdWxlRW50aXRpZXMoKQpmdW5jdGlvbiBDbGVhckVudGl0eVByb3BzKCRpZCkKZnVuY3Rpb24gQ29tcGFyZUVudGl0aWVzKCRlbnRpdHkxLCAkZW50aXR5MiwgJHNvcnRmaWVsZCkKZnVuY3Rpb24gQ29tcGFyZUVudGl0aWVzQ29tcGxleCgkZW50aXR5MSwgJGVudGl0eTIsICRzb3J0ZmllbGRzKQpmdW5jdGlvbiBTb3J0RW50aXRpZXMoJGxpc3QsICRzb3J0ZmllbGRzKQpmdW5jdGlvbiBFbnRpdGllc0NvdW50KCR0YWJsZT0iIiwgJGNyaXRlcmlhPWFycmF5KCkpCmZ1bmN0aW9uIENsZWFyTW9kdWxlRW50aXRpZXMoKQpmdW5jdGlvbiBTZXRFbnRpdHlDb25uZWN0aW9uKCRpZDEsICRpZDIsICR0eXBlPSIiKQpmdW5jdGlvbiBDbGVhckVudGl0eUNvbm5lY3Rpb25zKCRpZDEsICRpZDI9LTEsICR0eXBlPSIiKQpmdW5jdGlvbiBDbGVhckVudGl0eUNvbm5lY3Rpb24oJGlkMSwgJGlkMiwgJHR5cGU9IiIpCmZ1bmN0aW9uIENoZWNrRW50aXR5Q29ubmVjdGlvbigkaWQxLCRpZDIsJHR5cGU9IiIsJHJldHVybnZhbHVlPXRydWUpCmZ1bmN0aW9uIEdldEVudGl0eUNvbm5lY3Rpb25zKCRpZDEsICRpZDI9LTEsICR0eXBlPSIiKQpmdW5jdGlvbiBBZGRGaWVsZFNldCgkbmFtZSwkZmllbGRzKQpmdW5jdGlvbiBHZXRGaWVsZFNldCgkbmFtZSkKZnVuY3Rpb24gRW50aXR5U2V0VW5zZXRQcm9wcygkZW50aXR5LCRmaWVsZHNldCwkZmlsbHZhbHVlPSIiKSB7CmZ1bmN0aW9uIEdldERTRXJyb3JzKCRubDJicj10cnVlLCRjbGVhcj10cnVlKQpmdW5jdGlvbiBPdXRwdXREU0Vycm9ycygkY2xlYXI9dHJ1ZSkKZnVuY3Rpb24gRFNJbkVycm9yKCkKZnVuY3Rpb24gTWFrZVNpbXBsZUFycmF5KCR0YWJsZSwkZmllbGQpCmZ1bmN0aW9uIE1ha2VBc3NvY0FycmF5KCR0YWJsZSwkZmllbGRzKQoKCi8qCiAqCiAqIExpbmsgYW5kIGljb24gZnVuY3Rpb25zCiAqCiAqLwoKZnVuY3Rpb24gTmVvRGVsZXRlSWNvbigkYWN0aW9uLCR0ZXh0LCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKQpmdW5jdGlvbiBOZW9Db3B5SWNvbigkYWN0aW9uLCR0ZXh0LCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKQpmdW5jdGlvbiBOZW9FZGl0SWNvbigkYWN0aW9uLCR0ZXh0LCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKQpmdW5jdGlvbiBOZW9BZGRJY29uKCRhY3Rpb24sJHRleHQsJHBhcmFtcz1hcnJheSgpLCRjb25maXJtYXRpb249IiIpCmZ1bmN0aW9uIE5lb1RydWVJY29uKCRhY3Rpb24sJHRleHQsJHBhcmFtcz1hcnJheSgpLCRjb25maXJtYXRpb249IiIpCmZ1bmN0aW9uIE5lb0ZhbHNlSWNvbigkYWN0aW9uLCR0ZXh0LCRwYXJhbXM9YXJyYXkoKSwkY29uZmlybWF0aW9uPSIiKQpmdW5jdGlvbiBOZW9TeXN0ZW1JY29uKCRpY29uLCR0ZXh0PSIiKQoKLyoKICoKICogVXRpbGl0eSBmdW5jdGlvbnMKICoKICovCmZ1bmN0aW9uIE5lb1NsYXNoZXMoJHVybCkKZnVuY3Rpb24gRGVjb2RlSFRNTEVudGl0aWVzKCRzKQpmdW5jdGlvbiBTbGFzaCgkc3RyLCRzdHIyPSIiLCRzdHIzPSIiKQpmdW5jdGlvbiBTbGFzaGVzKCR1cmwpCmZ1bmN0aW9uIGlzX2Fzc29jKCRhcnJheSkKZnVuY3Rpb24gTmVvRGlyTGlzdCgkcm9vdCwkd2hhdD0iZmlsZXMiLCRpbnRyb2R1Y3Rpb249YXJyYXkoKSwkZXhjbHVkZXM9YXJyYXkoKSkKZnVuY3Rpb24gTmVvR2V0TWltZVR5cGUoJGZpbGVuYW1lKQoKLypDaGVja3MgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4gaW5kZXggaW4gYW4gYXJyYXkgYW5kIHJldHVybiB0aGUgdmFsdWUgaWYgaXQncyB0aGVyZQogKmFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCdzIG5vdAoqLwpmdW5jdGlvbiBOZW9QYXJhbVZhbHVlKCRuYW1lLCRwYXJhbXMsJGRlZmF1bHQ9IiIpCgovL1Nob3J0Y3V0IGZvciB0aGUgYWJvdmUKZnVuY3Rpb24gTlBWKCRuYW1lLCAkcGFyYW1zKQpmdW5jdGlvbiBOZW9BcHBseVBhcmFtVmFsdWVzKCR0aGlzYXJyYXksICRwYXJhbXMsICRpbmRleGVzLCAkYWx3YXlzZmlsbD1mYWxzZSkKZnVuY3Rpb24gQ2hlY2tGaWxlRXh0ZW5zaW9uKCRmaWxlbmFtZSwgJGFsbG93ZWRleHRlbnNpb25zPWFycmF5KCkpCgovL0ZvciBub3csIHJlYWQgc291cmNlIHRvIHVuZGVyc3RhbmQKZnVuY3Rpb24gTmVvVG9vbFRpcCgkcGFyYW1zPWFycmF5KCkpIC8vcmVxdWlyZXMgMiBjc3MtY2xhc3NlcyB0byBiZSBzZXQgdXAKCi8vQ2hlY2tzIGJvdGggd2hldGhlciB0aGUgaW5kZXggZXhpc3RzIGluIHRoZSBhcnJheSBhbmQgd2hldGhlciBpdCBoYXMgYSB2YWx1ZSBkaWZmZXJlbnQgZm9tciBub3RoaW5nIG90IG9ubHkgc3BhY2VzCmZ1bmN0aW9uIE5lb0VtcHR5KCRpbmRleD0iIiwkZGF0YT1hcnJheSgpKQoKLy9WYWxpZGF0ZXMgYW4gZW1haWxhZHJlc3MsIG9wdGlvbmFsbHkgYXZvaWRpbmcgY2hlY2tpbmcgdGhlIG14LWF2YWlsYWJpbGl0eSBvZiB0aGUgZG9tYWluCmZ1bmN0aW9uIE5lb1ZhbGlkYXRlRW1haWwoJGVtYWlsLCAkYXZvaWRvbmxpbmUgPSBmYWxzZSkKCi8vVmFsaWRhdGVzIGFuIHVybApmdW5jdGlvbiBOZW9WYWxpZGF0ZVVSTCgkdXJsKSB7CgovL1JldHVybnMgYSB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hpY2ggY2Fubm90IChwZXJoYXBzKSBiZSBsaW5lLWJyb2tlbgpmdW5jdGlvbiBOZW9Ob0JyZWFrcygkc3RyaW5nKQoKLy9zYW1lIGFzIHByaW50X3IsIGJ1dCB3cmFwcyBpbiA8cHJlPidzIGFuZCBpbiBhIGRpdiB0cnlpbmcgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlCmZ1bmN0aW9uIE5lb1ByaW50UigkZGF0YT1hcnJheSgpLCRzZW5kb3V0PXRydWUpCgovL3JlbW92ZWQga2V5L3ZhbHVlcyB3aGVyZSB0cmltKHZhbHVlKSBpcyBlbXB0eSBhbmQgdHJpbXMgdmFsdWVzIGlmIG5vdApmdW5jdGlvbiBOZW9UcmltQXJyYXkoJGluYXJyYXk9YXJyYXkoKSkKCi8vcmVtb3ZlIGFsbCBpbmRleGVzLCBleGNlcHQgdGhvc2Ugc3BlY2lmdWVkIGluICR3YW50ZWRpbmRleGVzLCBmb3IgaW5zdGFuY2UgZm9yIGNsZWFuaW5nICRwYXJhbXMKZnVuY3Rpb24gTmVvQ2xlYW5BcnJheSgkaW5hcnJheT1hcnJheSgpLCAkd2FudGVkaW5kZXhlcz1hcnJheSgpLCAkYWx3YXlzc2V0PWZhbHNlKQoKLyoKICoKICogU21hcnR5IHNob3J0Y3V0cwogKgogKi8KZnVuY3Rpb24gU21hcnR5QXNzaWduKCRzbWFydHlpbmZvLCAkc21hcnR5Y29udGVudD0iIikKZnVuY3Rpb24gU21hcnR5QXNzaWduUHJlZigkc21hcnR5bmFtZSwgJHByZWZlcmVuY2VuYW1lPSIiKSB7CmZ1bmN0aW9uIFNtYXJ0eUFzc2lnbkNNUygkbW9kdWxlLCR2YXJuYW1lPSJjbXMiKQpmdW5jdGlvbiBTbWFydHlVcGxvYWRGb3JtU3RhcnQoJHNtYXJ0eW5hbWUsJHBhcmFtcz1hcnJheSgpKSB7CgovKgogKgogKiBEZWJ1Z2dpbmcgZnVuY3Rpb25zCiAqCiAqLwpmdW5jdGlvbiBGaXJlRGVidWcoJGNvbW1hbmQsJG1lc3NhZ2U9IiIsJHZhcmlhYmxlcz1hcnJheSgpKQoKLyoKICoKICogRXJyb3IgaGFuZGxpbmcKICoKICovCmZ1bmN0aW9uIEVycm9yKCRlcnJvcnRleHQsJHJldHVybnZhbHVlPWZhbHNlLCRwYXJhbXM9YXJyYXkoKSkKZnVuY3Rpb24gR2V0RXJyb3JzKCRubDJicj10cnVlLCRjbGVhcj10cnVlLCRpbmNsdWRlZHM9dHJ1ZSkKZnVuY3Rpb24gT3V0cHV0RXJyb3JzKCRjbGVhcj10cnVlLCRpbmNsdWRlZHM9dHJ1ZSkKZnVuY3Rpb24gSW5FcnJvcigpCjwvcHJlPg==]]></data>
	</file>
	<file>
	  <filename>/templates/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
</module>
