LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIAogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKiAKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKI2luY2x1ZGUgInN2dG9vbHMvc29yZXMuaHh4IgojZGVmaW5lIF9fUlNDCiNpbmNsdWRlIDxzdnRvb2xzL3NvZXJyLmh4eD4KI2RlZmluZSBTX01BWAkweDdmZmYKClJlc291cmNlIFJJRF9TT19FUlJPUl9IQU5ETEVSCnsKCVN0cmluZyBFUlJDT0RFX1NPX0dFTkVSQUxFUlJPUiZTX01BWAoJewoJCVRleHQgWyBlbi1VUyBdID0gIkdlbmVyYWwgT0xFIGVycm9yLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX0NBTlRfQklORFRPU09VUkNFJlNfTUFYCgl7CgkJIC8vICMjIyBBQ0hUVU5HOiBOZXVlciBUZXh0IGluIFJlc291cmNlPyBEaWUgVmVyYmluZHVuZyB6dW0gT2JqZWt0IGthbm4gbmljaHQgaGVyZ2VzdGVsbHQgd2VyZGVuIDogRGllIFZlcmJpbmR1bmcgenVtIE9iamVrdCBrYW5uIG5pY2h0IGhlcmdlc3RlbGx0IHdlcmRlbi4KCQlUZXh0IFsgZW4tVVMgXSA9ICJUaGUgY29ubmVjdGlvbiB0byB0aGUgb2JqZWN0IGNhbm5vdCBiZSBlc3RhYmxpc2hlZC4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19OT0NBQ0hFX1VQREFURUQmU19NQVgKCXsKCQlUZXh0IFsgZW4tVVMgXSA9ICJObyBjYWNoZSBmaWxlcyB3ZXJlIHVwZGF0ZWQuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fU09NRUNBQ0hFU19OT1RVUERBVEVEJlNfTUFYCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiU29tZSBjYWNoZSBmaWxlcyB3ZXJlIG5vdCB1cGRhdGVkLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX01LX1VOQVZBSUxBQkxFJlNfTUFYCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiU3RhdHVzIG9mIG9iamVjdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBpbiBhIHRpbWVseSBtYW5uZXIuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fRV9DTEFTU0RJRkYmU19NQVgKCXsKCQlUZXh0IFsgZW4tVVMgXSA9ICJTb3VyY2Ugb2YgdGhlIE9MRSBsaW5rIGhhcyBiZWVuIGNvbnZlcnRlZC4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19NS19OT19PQkpFQ1QmU19NQVgKCXsKCQlUZXh0IFsgZW4tVVMgXSA9ICJUaGUgb2JqZWN0IGNvdWxkIG5vdCBiZSBmb3VuZC4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19NS19FWENFRURFRF9ERUFETElORSZTX01BWAoJewoJCVRleHQgWyBlbi1VUyBdID0gIlRoZSBwcm9jZXNzIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSBwZXJpb2QuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fTUtfQ09OTkVDVF9NQU5VQUxMWSZTX01BWAoJewoJCVRleHQgWyBlbi1VUyBdID0gIk9MRSBjb3VsZCBub3QgY29ubmVjdCB0byBhIG5ldHdvcmsgZGV2aWNlIChzZXJ2ZXIpLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX01LX0lOVEVSTUVESUFURV9JTlRFUkZBQ0VfTk9UX1NVUFBPUlRFRCZTX01BWAoJewoJCVRleHQgWyBlbi1VUyBdID0gIlRoZSBvYmplY3QgZm91bmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgaW50ZXJmYWNlIHJlcXVpcmVkIGZvciB0aGUgZGVzaXJlZCBvcGVyYXRpb24uIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fTk9fSU5URVJGQUNFJlNfTUFYCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiSW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWQuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fT1VUX09GX01FTU9SWSZTX01BWAoJewoJCVRleHQgWyBlbi1VUyBdID0gIkluc3VmZmljaWVudCBtZW1vcnkuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fTUtfU1lOVEFYJlNfTUFYCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiVGhlIGNvbm5lY3Rpb24gbmFtZSBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX01LX1JFRFVDRURfVE9fU0VMRiZTX01BWAoJewoJCVRleHQgWyBlbi1VUyBdID0gIlRoZSBjb25uZWN0aW9uIG5hbWUgY291bGQgbm90IGJlIHJlZHVjZWQgZnVydGhlci4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19NS19OT19JTlZFUlNFJlNfTUFYCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiVGhlIGNvbm5lY3Rpb24gbmFtZSBoYXMgbm8gaW52ZXJzZS4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19NS19OT19QUkVGSVgmU19NQVgKCXsKCQlUZXh0IFsgZW4tVVMgXSA9ICJObyBjb21tb24gcHJlZml4IGV4aXN0cy4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19NS19ISU0mU19NQVgKCXsKCQlUZXh0IFsgZW4tVVMgXSA9ICJUaGUgY29ubmVjdGlvbiBuYW1lIGlzIGNvbnRhaW5lZCBpbiB0aGUgb3RoZXIgb25lLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX01LX1VTJlNfTUFYCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiVGhlIGNvbm5lY3Rpb24gbmFtZXMgKHRoZSByZWNlaXZlciBhbmQgdGhlIG90aGVyIG1vbmlrZXIpIGFyZSBpZGVudGljYWwuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fTUtfTUUmU19NQVgKCXsKCQlUZXh0IFsgZW4tVVMgXSA9ICJUaGUgY29ubmVjdGlvbiBuYW1lIGlzIGNvbnRhaW5lZCBpbiB0aGUgb3RoZXIgb25lLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX01LX05PVF9CSU5EQUJMRSZTX01BWAoJewoJCSAvLyAjIyMgQUNIVFVORzogTmV1ZXIgVGV4dCBpbiBSZXNvdXJjZT8gRGVyIFZlcmJpbmR1bmdzbmFtZSBrYW5uIG5pY2h0IHZlcmJ1bmRlbiB3ZXJkZW4gRXMgaGFuZGVsdCBzaWNoIHVtIGVpbmVuIHJlbGF0aXZlbiBOYW1lbiA6IERlciBWZXJiaW5kdW5nc25hbWUga2FubiBuaWNodCB2ZXJidW5kZW4gd2VyZGVuLiBFcyBoYW5kZWx0IHNpY2ggdW0gZWluZW4gcmVsYXRpdmVuIE5hbWVuCgkJVGV4dCBbIGVuLVVTIF0gPSAiVGhlIGNvbm5lY3Rpb24gbmFtZSBjYW5ub3QgYmUgY29ubmVjdGVkLiBUaGlzIGlzIGEgcmVsYXRpdmUgbmFtZS4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19OT1RfSU1QTEVNRU5URUQmU19NQVgKCXsKCQlUZXh0IFsgZW4tVVMgXSA9ICJPcGVyYXRpb24gbm90IGltcGxlbWVudGVkLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX01LX05PX1NUT1JBR0UmU19NQVgKCXsKCQlUZXh0IFsgZW4tVVMgXSA9ICJObyBzdG9yYWdlLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX0ZBTFNFJlNfTUFYCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiRmFsc2UuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fTUtfTkVFRF9HRU5FUklDJlNfTUFYCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiTW9uaWtlcnMgbXVzdCBiZSBjb21wb3NlZCBnZW5lcmljYWxseS4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19QRU5ESU5HJlNfTUFYCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiRGF0YSBub3QgYXZhaWxhYmxlIGF0IHRoaXMgdGltZS4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19OT1RfSU5QTEFDRUFDVElWRSAmIFNfTUFYCgl7CgkJLyogIyMjIEFDSFRVTkc6IE5ldWVyIFRleHQgaW4gUmVzb3VyY2U/IE9iamVrdCB3dXJkZSBuaWNodCBJblBsYWNlIGFrdGl2aWVydCA6IE9iamV0a3Qgd3VyZGUgbmljaHQgSW5QbGFjZSBha3RpdmllcnQgKi8KCQlUZXh0IFsgZW4tVVMgXSA9ICJPYmplY3QgY291bGQgbm90IGJlIGFjdGl2YXRlZCBJblBsYWNlLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX0xJTkRFWCAmIFNfTUFYCgl7CgkJLyogIyMjIEFDSFRVTkc6IE5ldWVyIFRleHQgaW4gUmVzb3VyY2U/IFVuZ/xsdGlnZXIgSW5kZXggOiBVbmezbHRpZ2VyIEluZGV4ICovCgkJVGV4dCBbIGVuLVVTIF0gPSAiSW52YWxpZCBpbmRleC4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19DQU5OT1RfRE9WRVJCX05PVyAmIFNfTUFYCgl7CgkJLyogIyMjIEFDSFRVTkc6IE5ldWVyIFRleHQgaW4gUmVzb3VyY2U/IERhcyBPYmpla3Qga2FubiBkaWUgQWt0aW9uIGltIG1vbWVudGFuZW4gWnVzdGFuZCBuaWNodCBhdXNm/GhyZW4gOiBEYXMgT2JqZWt0IGthbm4gZGllIEFrdGlvbiBpbSBtb21lbnRhbmVuIFp1c3RhbmQgbmljaHQgYXVzZrNocmVuICovCgkJVGV4dCBbIGVuLVVTIF0gPSAiVGhlIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgaW4gdGhlIG9iamVjdCdzIGN1cnJlbnQgc3RhdGUuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fT0xFT0JKX0lOVkFMSURIV05EICYgU19NQVgKCXsKCQkvKiAjIyMgQUNIVFVORzogTmV1ZXIgVGV4dCBpbiBSZXNvdXJjZT8gQmVpIGRlciBBa3RpdmllcnVuZyB3dXJkZSBlaW4gdW5n/Gx0aWdlcyBGZW5zdGVyIGlzdCD8YmVyZ2ViZW4gOiBCZWkgZGVyIEFrdGl2aWVydW5nIHd1cmRlIGVpbiB1bmezbHRpZ2VzIEZlbnN0ZXIgaXN0ILNiZXJnZWJlbiAqLwoJCVRleHQgWyBlbi1VUyBdID0gIkFuIGludmFsaWQgd2luZG93IHdhcyBwYXNzZWQgd2hlbiBhY3RpdmF0ZWQuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fTk9WRVJCUyAmIFNfTUFYCgl7CgkJLyogIyMjIEFDSFRVTkc6IE5ldWVyIFRleHQgaW4gUmVzb3VyY2U/IERhcyBPYmpla3QgdW50ZXJzdPx0enQga2VpbmUgQWt0aW9uZW4gOiBEYXMgT2JqZWt0IHVudGVyc3SzdHp0IGtlaW5lIEFrdGlvbmVuICovCgkJVGV4dCBbIGVuLVVTIF0gPSAiVGhlIG9iamVjdCBkb2VzIG5vdCBzdXBwb3J0IGFueSBhY3Rpb25zLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX0lOVkFMSURWRVJCICYgU19NQVgKCXsKCQkvKiAjIyMgQUNIVFVORzogTmV1ZXIgVGV4dCBpbiBSZXNvdXJjZT8gRGllIEFrdGlvbiBpc3QgbmljaHQgZGVmaW5pZXJ0LiBFcyB3aXJkIGRpZSBEZWZhdWx0IEFrdGlvbiBhdXNnZWz2c3QgOiBEaWUgQWt0aW9uIGlzdCBuaWNodCBkZWZpbmllcnQuIEVzIHdpcmQgZGllIERlZmF1bHQgQWt0aW9uIGF1c2dlbPdzdCAqLwoJCVRleHQgWyBlbi1VUyBdID0gIlRoZSBhY3Rpb24gaXMgbm90IGRlZmluZWQuIFRoZSBkZWZhdWx0IGFjdGlvbiB3aWxsIGJlIGV4ZWN1dGVkLiIgOwoJfTsKCVN0cmluZyBFUlJDT0RFX1NPX01LX0NPTk5FQ1QgJiBTX01BWAoJewoJCS8qICMjIyBBQ0hUVU5HOiBOZXVlciBUZXh0IGluIFJlc291cmNlPyBFaW5lIFZlcmtu/HBmdW5nIGF1ZiBkYXMgTmV0endlcmsga29ubnRlIG5pY2h0IHdpZWRlciBoZXJnZXN0ZWxsdCB3ZXJkZW4gOiBFaW5lIFZlcmtus3BmdW5nIGF1ZiBkYXMgTmV0endlcmssIGRpZSBuaWNodCB3aWVkZXIgaGVyZ2VzdGVsbHQgd2VyZGVuIGtvbm50ZSAqLwoJCVRleHQgWyBlbi1VUyBdID0gIkEgbGluayB0byB0aGUgbmV0d29yayBjb3VsZCBub3QgYmUgcmUtZXN0YWJsaXNoZWQuIiA7Cgl9OwoJU3RyaW5nIEVSUkNPREVfU09fTk9USU1QTCAmIFNfTUFYCgl7CgkJLyogIyMjIEFDSFRVTkc6IE5ldWVyIFRleHQgaW4gUmVzb3VyY2U/IERhcyBPYmpla3QgdW50ZXJzdPx0enQgZGllc2UgQWt0aW9uIG5pY2h0IDogRGFzIE9iamVrdCB1bnRlcnN0s3R6dCBkaWVzZSBBa3Rpb24gbmljaHQgKi8KCQlUZXh0IFsgZW4tVVMgXSA9ICJPYmplY3QgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGFjdGlvbi4iIDsKCX07CglTdHJpbmcgRVJSQ09ERV9TT19NS19DQU5UT1BFTkZJTEUgJiBTX01BWAoJewoJCVRleHQgWyBlbi1VUyBdID0gIlRoZSBzcGVjaWZpZWQgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLiIgOwoJfTsKCS8qCglTdHJpbmcJJiBTX01BWAoJewoJCVRleHQJCSAgPSAiIjsKCX07CiovCn07ClJlc291cmNlIFJJRF9TT19FUlJDVFgKewoJU3RyaW5nIEVSUkNUWF9TT19ET1ZFUkIKCXsKCQlUZXh0IFsgZW4tVVMgXSA9ICIkKEVSUikgYWN0aXZhdGluZyBvYmplY3QiIDsKCX07Cn07ClN0cmluZyBTVFJfSU5TX09CSkVDVAp7CglUZXh0IFsgZW4tVVMgXSA9ICJJbnNlcnRzIGEgbmV3ICUxLU9iamVjdCBpbnRvIHlvdXIgZG9jdW1lbnQuIiA7Cn07ClN0cmluZyBTVFJfSU5TX09CSkVDVF9JQ09OCnsKCVRleHQgWyBlbi1VUyBdID0gIkluc2VydHMgYSBuZXcgJTEtT2JqZWN0IGludG8geW91ciBkb2N1bWVudCBhcyBhIHN5bWJvbC4iIDsKfTsKU3RyaW5nIFNUUl9JTlNfRklMRQp7CglUZXh0IFsgZW4tVVMgXSA9ICJJbnNlcnRzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBpbnRvIHlvdXIgZG9jdW1lbnQgdG8gZW5hYmxlIGxhdGVyIGVkaXRpbmcgaW4gdGhlIG9yaWdpbmFsIGFwcGxpY2F0aW9uLiIgOwp9OwpTdHJpbmcgU1RSX0lOU19QTFVHSU4KewoJVGV4dCBbIGVuLVVTIF0gPSAiSW5zZXJ0cyBhIHBsdWctaW4gb2JqZWN0IGludG8geW91ciBkb2N1bWVudCB3aXRoIGEgcmVmZXJlbmNlIHRvIHRoZSBwbHVnLWluIGRhdGEuIFdoZW4gdGhlIG9iamVjdCBpcyBhY3RpdmF0ZWQsIHRoZSBwbHVnLWluIGlzIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQuIiA7Cn07ClN0cmluZyBTVFJfSU5TX0FQUExFVAp7CglUZXh0IFsgZW4tVVMgXSA9ICJJbnNlcnRzIGFuIGFwcGxldCBvYmplY3QgaW50byB5b3VyIGRvY3VtZW50LiBXaGVuIHRoZSBvYmplY3QgaXMgYWN0aXZhdGVkLCB0aGUgYXBwbGV0IGlzIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQuIiA7Cn07ClN0cmluZyBTVFJfSU5TX0ZJTEVfSUNPTgp7CiAgICBUZXh0IFsgZW4tVVMgXSA9ICJJbnNlcnRzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcyBhbiBpY29uIGludG8geW91ciBkb2N1bWVudC4iIDsKfTsKU3RyaW5nIFNUUl9JTlNfRklMRV9MSU5LCnsKCVRleHQgWyBlbi1VUyBdID0gIkluc2VydHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGludG8geW91ciBkb2N1bWVudCBhbmQgY3JlYXRlcyBhIGxpbmsgdG8gdGhlIHNvdXJjZSBmaWxlLiBDaGFuZ2VzIG1hZGUgdG8gdGhlIHNvdXJjZSBmaWxlIHdpbGwgYmUgcmVmbGVjdGVkIGluIHlvdXIgZG9jdW1lbnQuIiA7Cn07ClN0cmluZyBTVFJfSU5TX0ZJTEVfSUNPTl9MSU5LCnsKCVRleHQgWyBlbi1VUyBdID0gIkluc2VydHMgYW4gaWNvbiBpbnRvIHlvdXIgZG9jdW1lbnQgcmVwcmVzZW50aW5nIHRoZSBmaWxlLiBDaGFuZ2VzIG1hZGUgdG8gdGhlIHNvdXJjZSBmaWxlIHdpbGwgYmUgcmVmbGVjdGVkIGluIHlvdXIgZG9jdW1lbnQuIiA7Cn07ClN0cmluZyBTVFJfUEFTVEUKewoJVGV4dCBbIGVuLVVTIF0gPSAiUGFzdGVzIHRoZSBjb250ZW50cyBvZiB0aGUgY2xpcGJvYXJkIGFzICUxIGluIHlvdXIgZG9jdW1lbnQuIiA7Cn07ClN0cmluZyBTVFJfQ09OVkVSVF9UTwp7CglUZXh0IFsgZW4tVVMgXSA9ICJDb252ZXJ0cyB0aGUgc2VsZWN0ZWQgJTFvYmplY3QgdG8gdGhlIG9iamVjdCB0eXBlICUyLiIgOwp9OwpTdHJpbmcgU1RSX0FDVElWQVRFX0FTCnsKCVRleHQgWyBlbi1VUyBdID0gIkFsbCBvYmplY3RzIG9mIHR5cGUgJTEgYXJlIGFjdGl2YXRlZCBhcyAlMiwgYnV0IG5vdCBjb252ZXJ0ZWQiIDsKfTsKU3RyaW5nIFNUUl9WRVJCX09QRU4KewoJVGV4dCBbIGVuLVVTIF0gPSAifk9wZW4iIDsKfTsKU3RyaW5nIFNUUl9WRVJCX1BST1BTCnsKCVRleHQgWyBlbi1VUyBdID0gIn5Qcm9wZXJ0aWVzIiA7Cn07ClN0cmluZyBTVFJfUExVR0lOX0NBTlRfU0hPVwp7CglUZXh0IFsgZW4tVVMgXSA9ICJQbHVnLWluICUgY2Fubm90IGJlIGRpc3BsYXllZC4iIDsKfTsKU3RyaW5nIFNUUl9FUlJPUl9EREUKewoJVGV4dCBbIGVuLVVTIF0gPSAiRERFIGxpbmsgdG8gJSBmb3IgJSBhcmVhICUgYXJlIG5vdCBhdmFpbGFibGUuIiA7Cn07ClN0cmluZyBTVFJfRVJST1JfT0JKTk9DUkVBVEUKewoJVGV4dCBbIGVuLVVTIF0gPSAiT2JqZWN0ICUgY291bGQgbm90IGJlIGluc2VydGVkLiIgOwp9OwpTdHJpbmcgU1RSX0VSUk9SX09CSk5PQ1JFQVRFX0ZST01fRklMRQp7CglUZXh0IFsgZW4tVVMgXSA9ICJPYmplY3QgZnJvbSBmaWxlICUgY291bGQgbm90IGJlIGluc2VydGVkLiIgOwp9OwpTdHJpbmcgU1RSX0VSUk9SX09CSk5PQ1JFQVRFX1BMVUdJTgp7CglUZXh0IFsgZW4tVVMgXSA9ICJQbHVnLWluIGZyb20gZG9jdW1lbnQgJSBjb3VsZCBub3QgYmUgaW5zZXJ0ZWQuIiA7Cn07ClN0cmluZyBTVFJfUVVFUllVUERBVEVMSU5LUwp7CglUZXh0IFsgZW4tVVMgXSA9ICJVcGRhdGUgYWxsIGxpbmtzPyIgOwp9OwpTdHJpbmcgU1RSX0ZVUlRIRVJfT0JKRUNUCnsKCVRleHQgWyBlbi1VUyBdID0gIkZ1cnRoZXIgb2JqZWN0cyIgOwp9OwpTdHJpbmcgU1RSX0VESVRfQVBQTEVUCnsKCVRleHQgWyBlbi1VUyBdID0gIkVkaXQgQXBwbGV0IiA7Cn07CgpCaXRtYXAgQk1QX1BMVUdJTgp7CiAgICBGaWxlID0gInBsdWdpbi5wbmciIDsKfTsKQml0bWFwIEJNUF9PTEVPQkoKewogICAgRmlsZSA9ICJvbGVvYmoucG5nIiA7Cn07Ck1lbnUgTUJfUExVR0lOCnsKCUl0ZW1MaXN0ID0KCXsKCQlNZW51SXRlbSBNSV9QTFVHSU4gOwoJfTsKCUV4dHJhRGF0YSA9IHsgMSA7IDAgOyAwIDsgfTsgIC8vVW0gSW5QbGFjZSBNZW51IHp1IGJlbnR6ZW4KfTsKTWVudUl0ZW0gTUlfUExVR0lOCnsKCUlkZW50aWZpZXIgPSBNSV9QTFVHSU4gOwoJU3ViTWVudSA9IE1lbnUKCXsKCQlJdGVtTGlzdCA9CgkJewoJCQlNZW51SXRlbQoJCQl7CgkJCQlJZGVudGlmaWVyID0gTUlfUExVR0lOX0RFQUNUSVZBVEUgOwoJCQkJVGV4dCBbIGVuLVVTIF0gPSAiRGVhY3RpdmF0ZSIgOwoJCQl9OwoJCX07Cgl9Owp9OwpTdHJpbmcgU1RSX1VOS05PV05fU09VUkNFCnsKCVRleHQgWyBlbi1VUyBdID0gIlVua25vd24gc291cmNlIiA7Cn07CgoK