TmFtZQoKICAgIEVYVF9mcmFnX2RlcHRoCgpOYW1lIFN0cmluZ3MKCiAgICBHTF9FWFRfZnJhZ19kZXB0aAoKQ29udHJpYnV0b3JzCgogICAgTWF1cmljZSBSaWJibGUKICAgIFJvYmVydCBTaW1wc29uCiAgICBKZWZmIExlZ2VyCiAgICBCcnVjZSBNZXJyeQogICAgQWNvcm4gUG9vbGV5CgpDb250YWN0CgogICAgTWF1cmljZSBSaWJibGUgKG1yaWJibGUgJ2F0JyBxdWFsY29tbS5jb20pCgpOb3RpY2UKCiAgICBOb25lCgpTdGF0dXMKCiAgICBEcmFmdAoKVmVyc2lvbgoKICAgIERhdGU6IEp1bHkgMjEsIDIwMTAKCk51bWJlcgoKICAgIE9wZW5HTCBFUyBFeHRlbnNpb24gIzg2CgpEZXBlbmRlbmNpZXMKCiAgICBPcGVuR0wgRVMgMi4wIGlzIHJlcXVpcmVkLgogICAgCiAgICBUaGlzIGV4dGVuc2lvbiBpcyB3cml0dGVuIGFnYWluc3QgdGhlIE9wZW5HTCBFUyAyLjAgc3BlY2lmaWNhdGlvbiwgYW5kCiAgICB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wLjE3IHNwZWNpZmljYXRpb24uCiAgICAKICAgIE9FU19mcmFnbWVudF9wcmVjaXNpb25faGlnaCBhZmZlY3RzIHRoZSBkZWZpbml0aW9ucyBvZiB0aGlzIGV4dGVuc2lvbi4KCk92ZXJ2aWV3CgogICAgVGhpcyBleHRlbnNpb24gYWRkcyB0aGUgYWJpbGl0eSB0byBzZXQgdGhlIGRlcHRoIHZhbHVlIG9mIGEgZnJhZ21lbnQgZnJvbQogICAgd2l0aGluIHRoZSBmcmFnbWVudCBzaGFkZXIuICBUaGVuIHRoaXMgcGVyLWZyYWdtZW50IGRlcHRoIHZhbHVlIGlzIHVzZWQKICAgIGZvciBkZXB0aCB0ZXN0aW5nLiAgVGhpcyBleHRlbnNpb24gYWRkcyBhIGJ1aWx0LWluIEdMU0wgZnJhZ21lbnQgc2hhZGVyIAogICAgc3BlY2lhbCB2YXJpYmxlIHRvIHNldCB0aGUgZGVwdGggdmFsdWUuCiAgICAKICAgIE11Y2ggZ3JhcGhpY3MgaGFyZHdhcmUgaGFzIHRoZSBhYmlsaXR5IHRvIGRvIGVhcmx5IGRlcHRoIHRlc3RpbmcgYmVmb3JlIHRoZQogICAgZnJhZ21lbnQgc2hhZGVyLiAgT24gc3VjaCBoYXJkd2FyZSB0aGVyZSBtYXkgYmUgYSBwZXJmb3JtYW5jZSBwZW5hbGl0eSBmb3IKICAgIHVzaW5nIHRoaXMgZmVhdHVyZSBzbyB1c2UgdGhpcyBmZWF0dXJlIG9ubHkgd2hlbiBuZWVkZWQuCgpJc3N1ZXMKCiAgICAoMSkgU2hvdWxkIHRoZSBHTFNMIGtleXdvcmQgYmUgZ2xfRnJhZ0RlcHRoIG9yIGdsX0ZyYWdEZXB0aEVYVD8KICAgIAogICAgUkVTT0xWRUQ6IE9wZW5HTCBoYXMgZGlzY3Vzc2VkIHRoaXMgaW4gdGhlIHBhc3QgYW5kIHRoZSBhZ3JlZW1lbnQgd2FzIHRoYXQKICAgIHdlIHNob3VsZCB1c2UgZ2xfRnJhZ0RlcHRoRVhULgogICAgCiAgICAoMikgV2hhdCBzaG91bGQgdGhlIHByZWNpc3Npb24gcXVhbGlmaWVyIGJlIGZvciBnbF9GcmFnRGVwdGhFWFQ/CiAgICAKICAgIFJFU09MVkVEOiBJZiB0aGUgT0VTX2ZyYWdtZW50X3ByZWNpc2lvbl9oaWdoIGlzIHN1cHBvcnRlZCB0aGVuIGhpZ2hwIGlzCiAgICB1c2VkLCBidXQgaWYgT0VTX2ZyYWdtZW50X3ByZWNpc2lvbl9oaWdoIG5vdCBzdXBwb3J0ZWQgdGhlbiBtZWRpdW1wIGlzIAogICAgdXNlZC4KCk5ldyBQcm9jZWR1cmVzIGFuZCBGdW5jdGlvbnMKCiAgICBOb25lCgpOZXcgVG9rZW5zCgogICAgTm9uZQoKTmV3IEtleXdvcmRzCgogICAgZ2xfRnJhZ0RlcHRoRVhUCgpOZXcgQnVpbHQtaW4gRnVuY3Rpb25zCgogICAgTm9uZQoKTmV3IE1hY3JvIERlZmluaXRpb25zCgogICAgI2RlZmluZSBHTF9FWFRfZnJhZ19kZXB0aCAxCgpBZGRpdGlvbnMgdG8gQXBwZW5kaXggQS4zIEludmFyaWFuY2UgUnVsZXMKCiAgICBSdWxlIDQ6IEFsbCBmcmFnbWVudCBzaGFkZXJzIHRoYXQgZWl0aGVyIGNvbmRpdGlvbmFsbHkgb3IgdW5jb25kaXRpb25hbGx5CiAgICBhc3NpZ24gZ2xfRnJhZ0Nvb3JkLnogdG8gZ2xfRnJhZ0RlcHRoRVhUIGFyZSBkZXB0aC1pbnZhcmlhbnQgd2l0aCByZXNwZWN0CiAgICB0byBlYWNoIG90aGVyLCBmb3IgdGhvc2UgZnJhZ21lbnRzIHdoZXJlIHRoZSBhc3NpZ25tZW50IHRvIGdsX0ZyYWdEZXB0aEVYVAogICAgYWN0dWFsbHkgaXMgZG9uZS4KCkFkZGl0aW9ucyB0byBDaGFwdGVyIDcgb2YgdGhlIE9wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIHNwZWNpZmljYXRpb246CgogICAgTWFrZSB0aGUgZm9sbG93aW5nIGNoYW5nZXMgdG8gc2VjdGlvbiA3LjIgKEZyYWdtZW50IFNoYWRlciBTcGVjaWFsIAogICAgVmFyaWJsZXMpLgoKICAgIFJlcGxhY2UgdGhlIGxhc3Qgc2VudGVuY2UgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCB3aXRoIHRoaXM6CgogICAgIkZyYWdtZW50IHNoYWRlcnMgb3V0cHV0IHZhbHVlcyB0byB0aGUgT3BlbkdMIEVTIHBpcGVsaW5lIHVzaW5nIHRoZSAKICAgIGJ1aWx0LWluIHZhcmlhYmxlcyBnbF9GcmFnQ29sb3IsIGdsX0ZyYWdEYXRhLCBhbmQgZ2xfRnJhZ0RlcHRoRVhULCB1bmxlc3MgdGhlCiAgICBkaXNjYXJkIGtleXdvcmQgaXMgZXhlY3V0ZWQuIgogICAgCiAgICBBZGQgdGhpcyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIHBhcmFncmFwaHM6CiAgICAKICAgICJUaGUgYnVpbHQtaW4gdmFyaWJsZSBnbF9GcmFnRGVwdGhFWFQgaXMgb3B0aW9uYWwsIGFuZCBtdXN0IGJlIGVuYWJsZWQgYnkKCiAgICAjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlCgogICAgYmVmb3JlIGJlaW5nIHVzZWQuIgogICAKICAgIFJlcGxhY2UgdGhlIGZpcnN0IHNlbnRlbmNlIGluIHRoZSBzZWNvbmQgcGFyYWdyYXBoIHdpdGggdGhpczoKICAgIAogICAgIkl0IGlzIG5vdCBhIHJlcXVpcmVtZW50IGZvciB0aGUgZnJhZ21lbnQgc2hhZGVyIHRvIHdyaXRlIHRvIGdsX0ZyYWdDb2xvciwKICAgIGdsX0ZyYWdEYXRhLCBvciBnbF9GcmFnRGVwdGhFWFQuIgoKICAgIEFkZCB0aGlzIHBhcmFncmFwaCBhZnRlciB0aGUgcGFyYWdyYXBoIHRoYXQgc3RhcnRzIHdpdGggIldyaXRpbmcgdG8gCiAgICBnbF9GcmFnQ29sb3IiOgoKICAgICJXcml0aW5nIHRvIGdsX0ZyYWdEZXB0aEVYVCB3aWxsIGVzdGFibGlzaCB0aGUgZGVwdGggdmFsdWUgZm9yIHRoZSBmcmFnbWVudCAKICAgIGJlaW5nIHByb2Nlc3NlZC4gSWYgTVNBQSBpcyBlbmFibGVkLCB0aGUgZGVwdGggdmFsdWUgaXMgY29waWVkIHRvIGFsbAogICAgc2FtcGxlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmcmFnbWVudC4gSWYgZGVwdGggYnVmZmVyaW5nIGlzIGVuYWJsZWQsIGFuZAogICAgbm8gc2hhZGVyIHdyaXRlcyBnbF9GcmFnRGVwdGhFWFQsIHRoZW4gdGhlIGZpeGVkIGZ1bmN0aW9uIHZhbHVlIGZvciBkZXB0aCAKICAgIHdpbGwgYmUgdXNlZCBhcyB0aGUgZnJhZ21lbnSScyBkZXB0aCB2YWx1ZS4gSWYgYSBzaGFkZXIgc3RhdGljYWxseSBhc3NpZ25zCiAgICBhIHZhbHVlIHRvIGdsX0ZyYWdEZXB0aEVYVCwgYW5kIHRoZXJlIGlzIGFuIGV4ZWN1dGlvbiBwYXRoIHRocm91Z2ggdGhlIAogICAgc2hhZGVyIHRoYXQgZG9lcyBub3Qgc2V0IGdsX0ZyYWdEZXB0aEVYVCwgdGhlbiB0aGUgdmFsdWUgb2YgdGhlIGZyYWdtZW50knMgCiAgICBkZXB0aCBtYXkgYmUgdW5kZWZpbmVkIGZvciBleGVjdXRpb25zIG9mIHRoZSBzaGFkZXIgdGhhdCB0YWtlIHRoYXQgcGF0aC4gCiAgICBUaGF0IGlzLCBpZiB0aGUgc2V0IG9mIGxpbmtlZCBmcmFnbWVudCBzaGFkZXJzIHN0YXRpY2FsbHkgY29udGFpbiBhIHdyaXRlIAogICAgdG8gZ2xfRnJhZ0RlcHRoRVhULCB0aGVuIGl0IGlzIHJlc3BvbnNpYmxlIGZvciBhbHdheXMgd3JpdGluZyBpdC4iCgogICAgUmVwbGFjZSB0aGUgcGFyYWdyYXBoIHRoYXQgc3RhcnRzIHdpdGggIklmIGEgc2hhZGVyIGV4ZWN1dGVzIHRoZSBkaXNjYXJkIiAKICAgIHdpdGggdGhpczoKICAgIAogICAgIklmIGEgc2hhZGVyIGV4ZWN1dGVzIHRoZSBkaXNjYXJkIGtleXdvcmQsIHRoZSBmcmFnbWVudCBpcyBkaXNjYXJkZWQsIGFuZAogICAgdGhlIHZhbHVlcyBvZiBhbnkgdXNlci1kZWZpbmVkIGZyYWdtZW50IG91dHB1dHMsIGdsX0ZyYWdEZXB0aEVYVCwgCiAgICBnbF9GcmFnQ29sb3IsIGFuZCBnbF9GcmFnRGF0YSBiZWNvbWUgaXJyZWxldmFudC4iCgogICAgUmVwbGFjZSB0aGUgbGFzdCBzZW50ZW5jZSBvZiB0aGUgOXRoIHBhcmFncmFwaCB3aXRoIHRoZSBmb2xsb3dpbmc6CgogICAgVGhlIHogY29tcG9uZW50IGlzIHRoZSBkZXB0aCB2YWx1ZSB0aGF0IHdvdWxkIGJlIHVzZWQgZm9yIHRoZSBmcmFnbWVudCdzCiAgICBkZXB0aCBpZiB0aGUgc2hhZGVyIGNvbnRhaW5lZCBubyB3cml0ZXMgdG8gZ2xfRnJhZ0RlcHRoRVhULiAgVGhpcyBpcyB1c2VmdWwKICAgIGZvciBpbnZhcmlhbmNlIGlmIGEgc2hhZGVyIGNvbmRpdGlvbmFsbHkgY29tcHV0ZXMgZ2xfRnJhZ0RlcHRoRVhUIGJ1dCAKICAgIG90aGVyd2lzZSB3YW50cyB0aGUgZml4ZWQgZnVuY3Rpb25hbGl0eSBmcmFnbWVudCBkZXB0aC4KICAgIAogICAgQWRkIHRoaXMgdG8gdGhlIGxpc3Qgb2YgYnVpbHQtaW4gdmFyaWJsZXM6CiAgICAKICAgIElmIE9FU19mcmFnbWVudF9wcmVjaXNpb25faGlnaCBpcyBzdXBwb3J0ZWQgYWRkIHRoaXM6CiAgICAgICJoaWdocCBmbG9hdCBnbF9GcmFnRGVwdGhFWFQ7IgogICAgb3RoZXJ3aXNlIGFkZCB0aGlzOgogICAgICAibWVkaXVtcCBmbG9hdCBnbF9GcmFnRGVwdGhFWFQ7IgoKTmV3IFN0YXRlCgogICAgTm9uZQoKUmV2aXNpb24gSGlzdG9yeQoKICAgIDYvMTQvMjAxMCAgQ3JlYXRlZC4KICAgIDYvMTQvMjAxMCAgQWRkZWQgbGFuZ3VhZ2UgdG8gY292ZXIgTVNBQS4KICAgIDYvMTUvMjAxMCAgRml4ZWQgc29tZSB0eXBvcy4KICAgIDcvMi8yMDEwICAgRml4ZWQgaXNzdWVzIGZyb20gQnJ1Y2UuCiAgICAgICAgICAgICAgICBBZGRlZCB3b3JkaW5nIHRvIEFwcGVuZGl4IEEuMy4KICAgICAgICAgICAgICAgIEFkZGVkIGlzc3VlcyAxIGFuZCAyLgogICAgNy84LzIwMTAgICBDaGFuZ2VkIGZyb20gT0VTIHRvIEVYVC4KICAgICAgICAgICAgICAgVmFyaW91cyB1cGRhdGVzIGZyb20gTlYgdmVyc2lvbiBvZiB0aGlzIGV4dGVuc2lvbi4KICAgIDcvMjEvMjAxMCAgUmVzb2x2ZWQgaXNzdWVzIDEgYW5kIDIuCiAgICAgICAgICAgICAgICAK