DQpSZWxlYXNlIE5vdGVzOg0KPT09PT09PT09PT09PT0NCg0KYnVpbGQ/Pz8sIDIwMTEtMDYtPz8NCg0KLSBSZXF1aXJlcyBKYXZhIDUgb3IgbGF0ZXIuDQoNCi0gUHJvdmlkZSBQT00gZm9yIE1hdmVuIDMgYnVpbGQuDQoNCi0gUGVyZm9ybWFuY2UgZ2FpbnMgd2l0aCByZXF1ZXN0IHBhcmFsbGVsaXNtIGluIHJlcXVlc3RzIGZvciByZWFkIGFuZCB3cml0ZSB3cml0ZSBvcGVyYXRpb25zIGluIFNGVFB2M0NsaWVudC4NCg0KLSBCdWdmaXggZm9yIGluZmluaXRlIHRpbWVvdXQgb24gc29ja2V0IGNvbm5lY3QuDQoNCi0gU0ZUUElucHV0U3RyZWFtIGFuZCBTRlRQT3V0cHV0U3RyZWFtIHRvIHJlYWQgb3Igd3JpdGUgZnJvbSBhIFNGVFB2M0ZpbGVIYW5kbGUgY29tcGF0aWJsZSB3aXRoIHN0YW5kYXJkIEkvTyBvcGVyYXRpb25zIGluIEphdmEuIA0KDQotIFNDUENsaWVudCByZXR1cm5pbmcgU0NQSW5wdXRTdHJlYW0gYW5kIFNDUE91dHB1dFN0cmVhbSBmb3IgZ2V0IGFuZCBwdXQgb3BlcmF0aW9ucyByZXNwZWN0aXZlbHkgY29tcGF0aWJsZSB3aXRoIHN0YW5hcmQgSS9PIG9wZXJhdGlvbnMgaW4gSmF2YS4NCg0KLSBPcHRpb24gdG8gYXR0YWNoIGEgcGFja2V0IGxpc3RlbmVyIHRvIFNGVFB2M0NsaWVudCBmb3IgbG9nZ2luZyBwdXJwb3Nlcy4NCg0KLSBGaXhlZCBhIGJ1ZyBpbiBLbm93bkhvc3RzLmdldFByZWZlcnJlZFNlcnZlckhvc3RrZXlBbGdvcml0aG1PcmRlciAoaXQgYWx3YXlzIHJldHVybmVkIG51bGwsIHdoaWNoIGlzIGEgdmFsaWQgcmV0dXJuIHZhbHVlIGJ1dCB3cm9uZykuDQoNCi0gQWRkZWQgYWNjZXNzb3IgdG8gcXVlcnkgc2Vzc2lvbiBzdGF0ZSBhbmQgaXNDb25uZWN0ZWQoKSBpbiBTRlRQdjNDbGllbnQgcmV0dXJuaW5nIGEgYm9vbGVhbg0KDQotIEFkanVzdGVkIGNoYW5uZWwgd2luZG93IHNpemUNCg0KLSBDdXN0b20gUEVNRGVjcnlwdEV4Y2VwdGlvbiB0byBjYXRjaCBQRU0gZGVjb2RpbmcgZmFpbHVyZS4NCg0KLSBPcHRpb24gdG8gcGFzcyBjdXN0b20gdXNlciBhZ2VudCBzdHJpbmcgZm9yIGlkZW50aWZpY2F0aW9uIHN0cmluZy4NCg0KLSBDb250aW51ZSBzaWxlbnRseSB3aGVuIGludmFsaWQga2V5IGlzIGZvdW5kIGluIGtub3duIGhvc3RzIGZpbGUuDQoNCi0gQWRkIHN1cHBvcnQgZm9yIGZpbGUgYXBwZW5kIG1vZGUgaW4gU0ZUUHYzQ2xpZW50Lg0KDQotIE9wdGlvbiB0byBwYXNzIGNoYXJzZXQgZm9yIGNvbW1hbmRzIGV4ZWN1dGVkIG9uIHRoZSByZW1vdGUgbWFjaGluZS4NCg0KYnVpbGQyNTFiZXRhMSwgMjAxMC0wOC0yMzoNCg0KLSBEdWUgdG8gdGhlIHNsaWdodGx5IGNoYW5nZWQgc2VtYW50aWNzIG9mIFRocmVhZC5pbnRlcnJ1cHQoKSBhbmQgT2JqZWN0LndhaXQoKSBpbiBKREsgNiwNCiAgdGhlIGNvZGUgaGFkIHRvIGJlIGFkYXB0ZWQgaW4gc2V2ZXJhbCBwbGFjZXMuIFBsZWFzZSBkbyBub3QgdXNlIEdhbnltZWQgU1NILTIgYnVpbGQyNTANCiAgb24gSkRLIDYsIGFzIHRoZSBLZXggYW5kIFN0cmVhbWdvYmJsZXIgY29kZSBtYXkgb2NjYXNpb25hbGx5IGNvbnN1bWUgYWxsIENQVSByZXNvdXJjZXMuDQogIA0KICBCYWNrZ3JvdW5kOiB0aGUgSkRLIDYgamF2YWRvY3MgZm9yIE9iamVjdC53YWl0IHNheTogIklmIHRoZSBjdXJyZW50IHRocmVhZCBpcyBpbnRlcnJ1cHRlZA0KICBieSBhbnkgdGhyZWFkIGJlZm9yZSBvciB3aGlsZSBpdCBpcyB3YWl0aW5nLCB0aGVuIGFuIEludGVycnVwdGVkRXhjZXB0aW9uIGlzIHRocm93bi4iDQogIFVuZm9ydHVuYXRlbHkgdGhlIEphdmEgMS41IGRvY3VtZW50YXRpb24gZG9lcyBub3Qgc2F5ICJiZWZvcmUiLCBvbmx5ICJ3aGlsZSBpdCBpcyB3YWl0aW5nIi4NCiAgDQogIFRoYW5rcyB0byBFbGlhcyBIb3JuZXNzLg0KICANCmJ1aWxkMjUwLCAyMDEwLTAzLTE1Og0KDQotIEdhbnltZWQgU1NILTIgZm9yIEphdmEgaXMgYmFjay4NCiAgVGhlIHNvZnR3YXJlIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5jbGVvbmRyaXMuY2gvc3NoMg0KDQotIEZpeGVkIHRoZSB1c2Ugb2YgZGVmYXVsdCBwbGF0Zm9ybSBjaGFyYWN0ZXIgZW5jb2RpbmdzLg0KDQotIEZpeGVzIGZvciBidWdneSBzZXJ2ZXJzLg0KDQotIFdhaXQgZm9yIHRoZSByZXBseSB0byB0aGUgU2VydmljZVJlcXVlc3QgcGFja2V0IGJlZm9yZSBzZW5kaW5nIHRoZSBuZXh0IHJlcXVlc3QuDQoNCi0gUmUtYXNzaWduIHRoZSBpbnRlcnJ1cHRlZCBmbGFnIGFmdGVyIGEgSW50ZXJydXB0ZWRFeGNlcHRpb24uDQoNCmJ1aWxkMjExYmV0YTQsIDIwMDYtMTItMDU6IChuZXZlciBvZmZpY2lhbGx5IHJlbGVhc2VkKQ0KDQotIEFkZGVkIENvbm5lY3Rpb24uc2VuZElnbm9yZVBhY2tldCguLi4pIG1ldGhvZHMgd2hpY2ggYWxsb3cgdG8gc2VuZCBTU0hfTVNHX0lHTk9SRSBwYWNrZXRzLg0KICBUaGFua3MgdG8gQW5kcmVpIFRjaGlqb3YuDQoNCi0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlICJub25lIiBhdXRoZW50aWNhdGlvbiBtZXRob2QuDQoNCi0gUmV2aXNlZCB0aGUgU0hBLTEgY29kZS4gSGlnaGx5IG9wdGltaXplZC4gU3BlZWQgc2hvdWxkIGJlIG1vcmUgdGhhbiBkb3VibGVkLg0KDQotIENoYW5nZWQgcmVmZXJlbmNlcyB0byB0aGUgY29ycmVjdCBSRkNzIChpbnN0ZWFkIG9mIHRoZSBkcmFmdHMpIGluIHRoZSBqYXZhZG9jcyAod2hlcmUgcG9zc2libGUpLg0KDQotIEZpeGVkIHRoZSB3cml0ZSgpIG1ldGhvZCBpbiB0aGUgU0ZUUCBjb2RlLiBVbnNhdGlzZmlhYmxlIHByZWNvbmRpdGlvbnMgc3RvcHBlZCB0aGUgbWV0aG9kDQogIGZyb20gd3JpdGluZyBhbnkgYnl0ZXMuIEFzIHN0YXRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgdGhlIFNGVFAgY29kZSBpcyBzdGlsbCBleHBlcmltZW50YWwuDQogIFRoYW5rcyB0byBBbmRyZWFzIFB1ZXNjaGVsLg0KDQotIEFkZGVkIGEgbmV3IGNyZWF0ZUxvY2FsUG9ydEZvcndhcmRlcihJbmV0U29ja2V0QWRkcmVzcyBhZGRyLCAuLi4pIG1ldGhvZCB3aGljaCBhbGxvd3MgdG8NCiAgc3BlY2lmeSB0aGUgbG9jYWwgYWRkcmVzcyBhbmQgcG9ydCB0byBiaW5kIHRvLiBUaGFua3MgdG8gQW5kcmVpIFRjaGlqb3YuDQoNCi0gU2xpZ2h0bHkgdXBkYXRlZCB0aGUgRkFRLg0KDQpidWlsZDIxMCwgMjAwNi0xMC0wNjoNCg0KLSBBZGRlZCBIVFRQIHByb3h5IHN1cHBvcnQuIFNlZSBDb25uZWN0aW9uLnNldFByb3h5RGF0YSgpIGFuZCB0aGUgSFRUUFByb3h5RGF0YSBjbGFzcy4NCiAgVGhhbmtzIHRvIEplYW4tUGllcnJlIFNjaG1pdCBmb3IgcHJvdmlkaW5nIGV4YW1wbGUgY29kZS4NCiAgDQotIEFkZGVkIGJhc2ljIHN1cHBvcnQgZm9yIFNGVFAgKHYzKS4NCiAgDQotIEJldGEgdXNlcnM6IHJlbW92ZWQgc3VwcG9ydCBmb3IgYXV0b21hdGljIHNwbGl0IG9mIGh1Z2UgcmVhZCB0cmFuc2ZlcnMgaW4gU0ZUUCwNCiAgYXMgaXQgd2FzIG5vdCBwb3NzaWJsZSB0byByZXR1cm4gRU9GIGluIGEgY2xlYW4gd2F5LiBUaGUgd3JpdGUgbWV0aG9kIHN0aWxsIHNwbGl0cyBodWdlDQogIHRyYW5zZmVycyAoaW4gYmxvY2tzIG9mIDMyNzY4IGJ5dGVzKS4gVGhhbmtzIHRvIFpob25nIExpLg0KICANCi0gU0NQIGVuaGFuY2VtZW50LiBJdCBpcyBub3cgcG9zc2libGUgdG8gc3BlY2lmeSBhbiBlbXB0eSB0YXJnZXQgZGlyZWN0b3J5IG5hbWUgd2hlbiBzZW5kaW5nDQogIGZpbGVzLiBUaGlzIGlzIGFuYWxvZ291cyB0byB1c2luZyAic2NwIGZpbGUgdXNlckBob3N0OiIgKHRoYW5rcyB0byBCZXJuZCBFZ2dpbmspLg0KDQotIFNDUCBlbmhhbmNlbWVudC4gSXQgaXMgbm93IHBvc3NpYmxlIHRvIHJlY2VpdmUgYSByZW1vdGUgZmlsZSBhbmQgcGlwZSBpdCBkaXJlY3RseSBpbnRvDQogIGFuIE91dHB1dFN0cmVhbS4gVGhhbmtzIHRvIEJlcm5kIEVnZ2luay4NCg0KLSBTQ1AgZW5oYW5jZW1lbnQuIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IHJlbW90ZSBmaWxlbmFtZSB3aGVuIHNlbmRpbmcNCiAgYSBmaWxlLiBUaGFua3MgdG8gVGhvbWFzIFRhdHplbC4NCg0KLSBBZGRlZCBtb3JlIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMgaW4gY2FzZSBhIGNoYW5uZWwgb3BlbiBvcGVyYXRpb24gZmFpbHMgKGUuZy4sIHJlc291cmNlDQogIHNob3J0YWdlIG9uIHRoZSBzZXJ2ZXIpLiBSZWxhdGVkIHRvIHRoaXMsIGFkZGVkIGEgY29tbWVudCB0byB0aGUgRkFRIHJlZ2FyZGluZyB0aGUgbGltaXRhdGlvbg0KICBvbiB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgc2Vzc2lvbnMgcGVyIGNvbm5lY3Rpb24gaW4gT3BlblNTSC4gVGhhbmtzIHRvIFJvbiBXYXJzaGF3c2t5Lg0KDQotIEFkZGVkIGEgZmVhdHVyZSAoQ29ubmVjdGlvbk1vbml0b3IpIHRvIGdldCBub3RpZmllZCB3aGVuIGEgY29ubmVjdGlvbiBicmVha3MuDQogIFRoYW5rcyB0byBEYW5pZWwgUml0eiAoQWxjYXRlbCkuDQoNCi0gSXQgaXMgbm93IHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSB1c2VkIFNlY3VyZVJhbmRvbSBpbnN0YW5jZSAoQ29ubmVjdGlvbi5zZXRTZWN1cmVSYW5kb20oKSkuDQoNCi0gQWRkZWQgZ2V0dGVycyBmb3IgdGhlIHNlcnZlcidzIGhvc3RuYW1lIGFuZCBwb3J0IHRvIHRoZSBDb25uZWN0aW9uIGNsYXNzLg0KDQotIEFkZGVkIGV4YW1wbGVzIGZvciBIVFRQIHByb3h5IHVzYWdlIGFzIHdlbGwgYXMgbG9jYWwvcmVtb3RlIHBvcnQgZm9yd2FyZGluZy4NCg0KLSBBZGRlZCBzdXBwb3J0IGZvciBTU0hfTVNHX0tFWF9ESF9HRVhfUkVRVUVTVF9PTEQgaW4gdGhlIERIR2V4UGFyYW1ldGVycyBjbGFzcyAodGhlcmUNCiAgaXMgYSBuZXcsIGFkZGl0aW9uYWwgY29uc3RydWN0b3IpLiBQbGVhc2UgY2hlY2sgdGhlIEphdmFkb2MgZm9yIERIR2V4UGFyYW1ldGVycy4NCg0KLSBDbGFyaWZpZWQgaW4gdGhlIGphdmFkb2MgdGhlIGlzc3VlIG9mIHJlLXVzaW5nIENvbm5lY3Rpb24gb2JqZWN0cy4gQ2hhbmdlZCB0aGUgZXhjZXB0aW9uDQogIG1lc3NhZ2UgaW4gY2FzZSBjb25uZWN0KCkgaXMgaW52b2tlZCBvbiBhbiBhbHJlYWR5IGNvbm5lY3RlZCBjb25uZWN0aW9uLg0KDQotIEFkZGVkIGFuIGVudHJ5IHRvIHRoZSBGQVEgcmVnYXJkaW5nIHB1bXBpbmcgZGF0YSBpbnRvIHJlbW90ZSBmaWxlcy4NCiAgVGhhbmtzIHRvIERhbmllbCBTY2h3YWdlci4NCg0KLSBDaGFuZ2VkIEpEaWFsb2cuc2hvdygpIHRvIEpEaWFsb2cuc2V0VmlzaWJsZSh0cnVlKSBpbiB0aGUgU3dpbmdTaGVsbCBleGFtcGxlLg0KICBUaGUgc2hvdygpIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIEphdmEgNS4wLiBUaGFua3MgdG8gQ2FybG8gRGFwb3IuDQoNCi0gRml4ZWQgdGhlIGJlaGF2aW9yIG9mIHRoZSBsb2NhbCBwb3J0IGZvcndhcmRlciBjb2RlLiBUcnlpbmcgdG8gbGlzdGVuIG9uIGFuIGFscmVhZHkgYm91bmQgcG9ydA0KICB3aWxsIG5vdCBmYWlsIHNpbGVudGx5IGFueW1vcmUuIEFsc28sIHRoZSBhY2NlcHQgdGhyZWFkIHdpbGwgY29udGludWUgYWNjZXB0aW5nIGNvbm5lY3Rpb25zDQogIGV2ZW4gaWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBlc3RhYmxpc2htZW50IG9mIHRoZSB1bmRlcmx5aW5nIHNzaC1mb3J3YXJkaW5nIG9mIGENCiAgcHJldmlvdXMgaW5jb21pbmcgY29ubmVjdGlvbiAoZS5nLiwgb25lIHRyaWVkIHRvIGVzdGFibGlzaCBhIGZvcndhcmRpbmcgdG8gYSByZW1vdGUgcG9ydCB0aGF0DQogIGlzIG5vdCBpbiBzdGF0ZSBvcGVuICh5ZXQpKS4gVGhhbmtzIHRvIENsYXVkaW8gTmllZGVyIChJbm9kZXMsIFN3aXR6ZXJsYW5kKSBhbmQNCiAgRGFuaWVsIFJpdHogKEFsY2F0ZWwpIGZvciBwb2ludGluZyB0aGlzIG91dC4NCiAgTm90ZTogdGhlIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgcG9ydCBmb3J3YXJkaW5ncyBuZWVkcyB0byBiZSBmdXJ0aGVyIGltcHJvdmVkLg0KDQotIFRyaWVkIHRvIGltcGxlbWVudCBhIHdvcmthcm91bmQgZm9yIHRoZSBTdW4gSlZNIGJ1ZyA1MDkyMDYzLiBDaGFuZ2VkIEluZXRBZGRyZXNzLmdldEJ5QWRkcmVzcyhieXRlW10pDQogIGluIHRoZSAiVHJhbnNwb3J0TWFuYWdlci5wYXJzZUlQdjRBZGRyZXNzIiBtZXRob2QgKHdoaWNoIGFscmVhZHkgaXMgYSB3b3JrYXJvdW5kIGZvciBKREsncyB0aGF0DQogIHVzZSB0aGUgcmVzb2x2ZXIgZm9yIGRvdHRlZCBJUCBhZGRyZXNzZXMsIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgNTA5MjA2MyBidWcpIHRvDQogIEluZXRBZGRyZXNzLmdldEJ5QWRkcmVzcyhTdHJpbmcsIGJ5dGVbXSkuIFRoYW5rcyB0byBBbGFpbiBQaGlsaXBpbi4NCg0KLSBGaXhlZCBhIGJ1ZyBpbiBLbm93bkhvc3RzLmFkZEhvc3RrZXlUb0ZpbGUuIEhvc3RuYW1lcyB3ZXJlIGNvbnZlcnRlZCB0byBsb3dlcmNhc2Ugd2hpY2ggaXMNCiAgbm90IGdvb2QgaW4gY2FzZSBvZiBoYXNoZWQgaG9zdG5hbWVzIChpdCBsZWFkcyB0byBhIGRpZmZlcmVudCBCQVNFNjQgZW5jb2RpbmcgYW5kIHRoZXJlZm9yZQ0KICBoYXNoZXMgd29uJ3QgbWF0Y2gpLiBUaGFua3MgdG8gW3Vua25vd25dLg0KDQotIEZpeGVkIGEgdHlwbyBpbiB0aGUgU0NQIGNsaWVudCAodGFnIGZvciBtb2RpZmljYXRpb24gdGltZXMgaXMgJ1QnIGFuZCBub3QgJ1AnKS4NCiAgVGhhbmtzIHRvIEFuZHJlYXMgU2FobGJhY2guDQoNCi0gU3R1cGlkIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50IGluIHRoZSBMb2dnZXIsIGl0IGRpZCB1bm5lY2Vzc2FyeSBjYWxscyB0byBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKS4NCg0KLSBUaGUgTElDRU5DRS50eHQgZmlsZSBpcyBub3cgYWxzbyBpbmNsdWRlZCBpbiB0aGUgcHJlLWNvbXBpbGVkIGphci4gT2YgY291cnNlLCByZWRpc3RyaWJ1dGlvbnMgaW4NCiAgYmluYXJ5IGZvcm0gbXVzdCAqc3RpbGwqIGluY2x1ZGUgdGhlIGNvbnRlbnRzIG9mIExJQ0VOQ0UudHh0IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlcg0KICBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICANCi0gU21hbGwgY2xlYW51cHMgaW4gdGhlIFRyYW5zcG9ydE1hbmFnZXIgY29kZS4NCg0KYnVpbGQyMDksIDIwMDYtMDItMTQ6DQoNCi0gQSBtYWpvciByZWxlYXNlLCBtYW55IG5ldyBmZWF0dXJlcy4gVGhhbmtzIHRvIGFsbCB3aG8gc3VwcG9ydGVkIG1lIHdpdGggZmVlZGJhY2shDQoNCi0gQWRkZWQgcmVtb3RlIHBvcnQgZm9yd2FyZGluZyBzdXBwb3J0Lg0KICBQbGVhc2UgY29uc3VsdCB0aGUgZG9jcyBmb3IgQ29ubmVjdGlvbi5yZXF1ZXN0UmVtb3RlUG9ydEZvcndhcmRpbmcoKS4NCg0KLSBBZGRlZCBYMTEgZm9yd2FyZGluZyBzdXBwb3J0LiBQbGVhc2UgY29uc3VsdCBTZXNzaW9uLnJlcXVlc3RYMTFGb3J3YXJkaW5nKCkuDQogIFgxMSBzdXBwb3J0IGlzIGJhc2VkIG9uIGpvaW50IHdvcmsgd2l0aCBTaW1vbiBIYXJ0bCAoc2ltb24uaGFydGwgKGF0KSBnbXgubmV0KS4gVGhhbmtzLCBTaW1vbiENCg0KLSBUaGUgU0NQQ2xpZW50IGNvbnN0cnVjdG9yIGlzIG5vdyBwdWJsaWMuIFRoZSBmYWN0b3J5IG1ldGhvZCBpcyBzdGlsbCB0aGVyZSAoaW4gdGhlIENvbm5lY3Rpb24NCiAgY2xhc3MpLCBob3dldmVyLCBpdCB3aWxsIHByb2JhYmx5IGJlIG1hcmtlZCBhcyBkZXByZWNhdGVkIGFuZCBldmVudHVhbGx5IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4NCg0KLSBBZGRlZCBzdGFydFN1YlN5c3RlbSgpIG1ldGhvZCB0byB0aGUgU2Vzc2lvbiBjbGFzcy4gTm93IGl0IGlzIHBvc3NpYmxlIHRvIGltcGxlbWVudCBzdWJzeXN0ZW1zLA0KICBlLmcuLCBzZnRwLCBvdXRzaWRlIG9mIHRoZSBsaWJyYXJ5Lg0KDQotIEZvciBhZHZhbmNlZCB1c2VyczogdGhlcmUgaXMgbm93IGEgbXVjaCBiZXR0ZXIgY29uZGl0aW9uIHdhaXQgaW50ZXJmYWNlIGluIHRoZSBTZXNzaW9uIGNsYXNzLg0KICBJdCBpcyBub3cgYWxzbyBwb3NzaWJsZSB0byB3YWl0IGZvciB0aGUgYXJyaXZhbCBvZiAiZXhpdC1zdGF0dXMiIGFuZCAiZXhpdC1zaWduYWwiLg0KICBUaGUgU2Vzc2lvbi53YWl0VW50aWxEYXRhQXZhaWxhYmxlKCkgbWV0aG9kIHN0aWxsIHdvcmtzLCBidXQgaXMgbWFya2VkIGFzIGRlcHJlY2F0ZWQuDQoNCiAgVXNlcnMgdGhhdCB1c2VkIHRoZSBiZXRhIHZlcnNpb24sIHBsZWFzZSBiZSBhd2FyZSBvZiB0aGUgZm9sbG93aW5nIGNoYW5nZTogY2FsbGluZyB0aGUgY2xvc2UoKQ0KICBtZXRob2Qgb24gYSBTZXNzaW9uIG9iamVjdCB3aWxsIGltbWVkaWF0ZWxseSByYWlzZSB0aGUgQ2hhbm5lbENvbmRpdGlvbi5DTE9TRUQvRU9GIGNvbmRpdGlvbnMNCiAgb24gdGhlIHVuZGVybHlpbmcgY2hhbm5lbCAtIGV2ZW4gdGhvdWdoIHRoZSByZW1vdGUgc2lkZSBtYXkgbm90IGhhdmUgeWV0IHJlc3BvbmRlZCB3aXRoIGENCiAgU1NIX01TR19DSEFOTkVMX0NMT1NFIG1lc3NhZ2UgKGhvd2V2ZXIsIGluIHRoZSBiYWNrZ3JvdW5kIHRoZSBsaWJyYXJ5IHN0aWxsIGV4cGVjdHMgdGhlIHNlcnZlcg0KICB0byBzZW5kIHRoZSBTU0hfTVNHX0NIQU5ORUxfQ0xPU0UgbWVzc2FnZSkuIFNlZSBiZWxvdyBmb3IgYW4gZXhwbGFuYXRpb24uDQoNCi0gVGhlIGJlaGF2aW9yIG9mIFNlc3Npb24uY2xvc2UoKSBoYXMgY2hhbmdlZC4gSWYgeW91ICpraWxsKiBhIFNlc3Npb24gKGkuZS4sIGNhbGwgU2Vzc2lvbi5jbG9zZSgpDQogIGJlZm9yZSBFT0YgKG9yIENMT1NFKSBoYXMgYmVlbiBzZW50IGJ5IHRoZSByZW1vdGUgc2lkZSksIHRoZW4gaW1tZWRpYXRlbGx5IEVPRiB3aWxsIChsb2NhbGx5KQ0KICBiZSByYWlzZWQgZm9yIGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIuIEZ1cnRoZXIgaW5jb21pbmcgZGF0YSAoZm9yIHRoYXQgcGFydGljdWxhciBTZXNzaW9uKSB3aWxsDQogIGJlIGlnbm9yZWQuIEhvd2V2ZXIsIHJlbW90ZSBkYXRhIHRoYXQgYXJyaXZlZCBiZWZvcmUgd2Ugc2VudCBvdXIgU1NIX01TR19DSEFOTkVMX0NMT1NFIG1lc3NhZ2UNCiAgaXMgc3RpbGwgYXZhaWxhYmxlICh5b3UgY2FuIHRoaW5rIG9mIGhhdmluZyBhcHBlbmRlZCB0aGUgRU9GIG1hcmtlciB0byB0aGUgZW5kIG9mIHRoZSBsb2NhbA0KICBpbmNvbWluZyBzdGRvdXQgYW5kIHN0ZGVyciBxdWV1ZXMpLg0KICANCiAgVGhlIHJlYXNvbiB0byBkbyB0aGlzIGlzIHNpbXBseSBiZWNhdXNlIHNvbWUgU1NIIHNlcnZlcnMgZG8gc29tZXRpbWVzIG5vdCByZXBseSB0byBvdXINCiAgU1NIX01TR19DSEFOTkVMX0NMT1NFIG1lc3NhZ2UgKGV2ZW50IHRob3VnaCB0aGV5IHNob3VsZCkuIEFzIGEgY29uc2VxdWVuY2UsIGEgbG9jYWwgcmVhZGVyIG1heQ0KICB3YWl0IGZvcmV2ZXIgZm9yIHRoZSByZW1vdGUgU1NIX01TR19DSEFOTkVMX0VPRiBvciBTU0hfTVNHX0NIQU5ORUxfQ0xPU0UgbWVzc2FnZXMgdG8gYXJyaXZlLg0KICBJZiB5b3UgYXJlIGludGVyZXN0ZWQsIHRoZW4geW91IGNhbiB0cnkgdG8gcmVwcm9kdWNlIHRoZSBwcm9ibGVtOiBFeGVjdXRlIHNvbWV0aGluZyBsaWtlDQogICJ0YWlsIC1mIC9kZXYvbnVsbCIgKHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGZvcmV2ZXIpIGFuZCB0aGVuIGNvbmN1cnJlbnRseSBjbG9zZSB0aGUgU2Vzc2lvbg0KICAoZW5hYmxlIGRlYnVnIG1vZGUgdG8gc2VlIHRoZSBTU0ggcGFja2V0cyBvbiB0aGUgd2lyZSkgdG8gY2hlY2sgaG93IHN0YW5kYXJkIGNvbXBsaWFudCB5b3VyIHNlcnZlcg0KICBpbXBsZW1lbnRhdGlvbiBpcykuIFRoYW5rcyB0byBDcmlzdGlhbm8gU2FkdW4uDQoNCi0gVGhlIFNlc3Npb24gY29kZSBkb2VzIG5vdCBhbnltb3JlIG1ha2UgdXNlIG9mIHRoZSBzeW5jaHJvbml6ZWQgYXR0cmlidXRlIGZvciBhbnkgb2YgaXRzIG1ldGhvZHMuDQogIFRoaXMgaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCBhIGNhbGwgdG8gU2Vzc2lvbi5jbG9zZSgpIHdpbGwgbmV2ZXIgYnkgYmxvY2tlZCBieSBjb25jdXJyZW50DQogIGNhbGxzIHRvIHRoZSBTZXNzaW9uIG9iamVjdC4gSG93ZXZlciwgbm90ZSB0aGF0IGluIHRoZSB3b3JzdCBjYXNlIHRoZSBjYWxsIG1heSBzdGlsbCBibG9jayB1bnRpbA0KICB3ZSBjYW4gc2VuZCBvdXIgU1NIX01TR19DSEFOTkVMX0NMT1NFIG92ZXIgdGhlIFRDUCBjb25uZWN0aW9uLg0KDQotIFRoZSBTQ1AgY2xpZW50IGNhbiBub3cgYWxzbyBiZSB1c2VkIHRvIGRpcmVjdGx5IGluamVjdCB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBieXRlIGFycmF5DQogIGludG8gYSByZW1vdGUgZmlsZSAodGhhbmtzIHRvIERpZXRlciBCYWllciBmb3Igc3VnZ2VzdGluZyB0aGlzKS4NCg0KLSBBZGRlZCBzdXBwb3J0IGZvciBzcGVjaWZ5aW5nIHRpbWVvdXRzIGZvciBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuDQogIFRoYW5rcyB0byBSb2IgSGFzc2VsYmF1bSBhbmQgQmVuIFhZWi4NCg0KLSBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudDogd2UgdXNlIG9ubHkgYSBzaW5nbGUgU2VjdXJlUmFuZG9tIG9iamVjdCBwZXIgY29ubmVjdGlvbg0KICAodW50aWwgbm93IHRoZXJlIHdlcmUgbXVsdGlwbGUgaW5zdGFuY2VzKS4NCg0KLSBGaXhlZCB0aGUgU3dpbmdzaGVsbCBleGFtcGxlIHByb2dyYW0sIGl0IGRpZCBub3QgcmVhZCBpbiB0aGUga25vd25faG9zdHMgZmlsZSBvbiBzdGFydHVwLg0KICAodGhhbmtzIHRvIEFzaHdhbmkgS3VtYXIpLg0KDQotIFRoZXJlIHdhcyBhIHR5cG8gaW4gdGhlIENCQ01vZGUgY2xhc3MgKHNyY29mZiB3YXMgaWdub3JlZCksIGhvd2V2ZXIgc2luY2Ugd2UgYWx3YXlzIHBhc3MNCiAgYSB6ZXJvIG9mZnNldCB0aGUgYnVnIGRpZCBub3Qgc2hvdyB1cCAodGhhbmtzIHRvIEFsZXggUGFraG9tb3YpLg0KDQotIFdoaWxlIGltcGxlbWVudGluZyBYMTEgc3VwcG9ydCwgZm91bmQgYSBzdHJhbmdlIFgxMSBidWcgaW4gT3BlblNTSCAocmVwb3J0ZWQsIG9wZW5zc2ggYnVnIDEwNzYpLg0KICAxMi4xMC4yMDA1OiBoYXMgYmVlbiBmaXhlZCBmb3IgT3BlblNTSCA0LjMgYnkgdGhlIE9wZW5TU0ggY3Jvd2QuDQoNCi0gQ2hhbmdlZCB0aGUgU2luZ2xlVGhyZWFkU3Rkb3V0U3RkZXJyIGV4YW1wbGUgc28gdGhhdCBpdCB1c2VzIHRoZSBuZXcgY29uZGl0aW9uIHdhaXQgaW50ZXJmYWNlLg0KDQotIEVmZmljaWVudGx5IGhhbmRsZSBJUHY0IGFkZHJlc3NlcyAod2hlbiBjcmVhdGluZyB0aGUgdW5kZXJseWluZyBzb2NrZXQpLCB0aGVyZSB3YXMgYSByZXBvcnQNCiAgdGhhdCBzb21lIEpESydzIHRyeSB0byBsb29rdXAgZG90dGVkIGFkZHJlc3NlcyB3aXRoIHRoZSByZXNvbHZlci4NCiAgKHRoYW5rcyB0byBBbGV4YW5kZXIgS2l0YWV2KS4NCg0KLSBBZGRlZCBzZXRUQ1BOb0RlbGF5KCkgbWV0aG9kIHRvIHRoZSBDb25uZWN0aW9uIGNsYXNzLg0KDQotIEltcHJvdmVkIGhhbmRsaW5nIG9mIHVuc3VwcG9ydGVkIGdsb2JhbC9jaGFubmVsIHJlcXVlc3RzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4NCg0KLSBUaGUgS0VYIGNvZGUgaXMgbm93IG1vcmUgcm9idXN0LiBBbHNvLCB0aGUgU2VydmVySG9zdEtleVZlcmlmaWVyIGNhbGxiYWNrIChpZiBzcGVjaWZpZWQpIHdpbGwgYmUgY2FsbGVkDQogIGJlZm9yZSBkb2luZyBhbnkgREggY2FsY3VsYXRpb24uDQoNCi0gTWFqb3IgY2xlYW51cCAoaS5lLiwgcmV3cml0ZSkgb2YgdGhlIFNTSCBjaGFubmVsIGNvZGUuDQoNCi0gQ2xlYW51cCB1cCBTZXNzaW9uIGNsYXNzLCByZW1vdmVkIHVubmVjZXNzYXJ5IElPRXhjZXB0aW9ucy4NCg0KLSBJbXBsZW1lbnRlZCAyXjMyLTEgY29uZm9ybWFuY2UgZm9yIGNoYW5uZWwgd2luZG93cy4NCg0KLSBJIGdvdCBzZXZlcmFsIHRpbWVzIHF1ZXN0aW9ucyBieSBlLW1haWwgZnJvbSBwZW9wbGUgdGhhdCBoYXZlIHByb2JsZW1zIHdpdGggInB1dHR5IiBrZXlzLg0KICBBZGRlZCBhbiBlbnRyeSB0byB0aGUgRkFRLg0KDQotIEFkZGVkIGFuIGVudHJ5IHRvIHRoZSBGQVEgcmVnYXJkaW5nIGhvdyB0byBoYW5kbGUgc2VydmVycyB3aXRoIGRpc2FibGVkIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uDQogICh0aGFua3MgdG8gTmljb2xhcyBSYW91bCkuDQoNCi0gVXBjb21pbmc6IFNGVFAgc3VwcG9ydCAoaW4gdGhlIG1lYW50aW1lIGFsbW9zdCBhIHJ1bm5pbmcgZ2FnKS4NCg0KLSBDaGFuZ2VkIHRoZSBuYW1lIGZyb20gIkdhbnltZWQgU1NIMiIgdG8gIkdhbnltZWQgU1NILTIiLiBXaWxsIHRoaXMgaW1wcm92ZSB0aGUgRyoqZ2xlIHJhbmtpbmc/ID0pDQoNCi0gTGF0ZXN0IGphdmFkb2MgaXMgbm93IGFsc28gb25saW5lLg0KDQoNCmJ1aWxkMjA4LCAyMDA1LTA4LTI0Og0KDQotIEFkZGVkIHN1cHBvcnQgZm9yIFJTQSBwcml2YXRlIGtleXMgKFBFTSBmb3JtYXQpLCBhbHNvIHJldmlzZWQgY29kZSBmb3IgUlNBIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uDQoNCi0gRXh0ZW5kZWQgc3VwcG9ydCBmb3IgZW5jcnlwdGVkIFBFTSBmaWxlcy4NCiAgU3VwcG9ydGVkIGVuY3J5cHRpb25zOiBERVMtQ0JDLCBERVMtRURFMy1DQkMsIEFFUy0xMjgtQ0JDLCBBRVMtMTkyLUNCQyBhbmQgQUVTLTI1Ni1DQkMuDQogIA0KLSBBZGRlZCByYXRoZXIgY29tcGxldGUgc3VwcG9ydCBmb3Iga25vd25faG9zdHMgZmlsZXMgKGluIEtub3duSG9zdHMuamF2YSkuDQogIFRoZSBwYXJzZXIgaXMgYWJsZSB0byB1bmRlcnN0YW5kIHRoZSBzYW1lIHBzZXVkby1yZWdleCAoKiw/LCEpIHN5bnRheCBhcyBPcGVuU1NIIGNsaWVudHMuDQogIFRoZSBjbGFzcyBpbmNsdWRlcyBzdXBwb3J0IGZvciBob3N0a2V5IGNvbXBhcmlzb24gYXMgd2VsbCBhcyBmdW5jdGlvbmFsaXR5IHRvIGFkZCBhY2NlcHRlZCBrZXlzDQogIHRvIGEga25vd25faG9zdHMgZmlsZS4gT25lIGNhbiBhbHNvIGNyZWF0ZSBPcGVuU1NIIGNvbXBhdGlibGUgZmluZ2VycHJpbnRzIChIZXggYW5kIEJ1YmJsZWJhYmJsZSkuDQogIEhhc2hlZCBob3N0bmFtZSBlbnRyaWVzIGFyZSB1bmRlcnN0b29kIGFuZCBjYW4gYWxzbyBiZSBnZW5lcmF0ZWQuDQogIA0KLSBSZXN0cnVjdHVyZWQgdGhlIGV4YW1wbGVzIHNlY3Rpb24sIGFkZGVkIG1vcmUgZXhhbXBsZXMuIFRoZSBleGFtcGxlcyBzaG91bGQgY292ZXIgbW9zdCBpc3N1ZXMuDQogIFRoZXJlIGlzIGFsc28gYSBfdmVyeV8gYmFzaWMgdGVybWluYWwgZW11bGF0b3IsIHNlZSBTd2luZ1NoZWxsLmphdmEuDQoNCi0gSXQgaXMgbm93IHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNlcnZlciBob3N0a2V5IGFsZ29yaXRobSBvcmRlciAoZm9yIHRoZSBrZXkgZXhjaGFuZ2UpDQogIHdpdGggdGhlIENvbm5lY3Rpb24uc2V0U2VydmVySG9zdEtleUFsZ29yaXRobXMgbWV0aG9kLiBUaGlzIG1ha2VzIHNlbnNlIGluIGNvbWJpbmF0aW9uIHdpdGgNCiAga25vd25faG9zdHMgc3VwcG9ydCAoZS5nLiwgaWYgeW91IGFscmVhZHkga25vdyB0aGUgc2VydmVyJ3MgcHVibGljIHNzaC1kc3Mga2V5LCB0aGVuDQogIHlvdSBwcm9iYWJseSBwcmVmZXIgdGhlICJzc2gtZHNzIiBvdmVyIHRoZSAic3NoLXJzYSIgYWxnb3JpdGhtKS4NCiAgVGhlIHVzZWQgc2VydmVyIGhvc3RrZXkgYWxnb3JpdGhtIGlzIG5vdyBhbHNvIHJlZmxlY3RlZCBpbiBDb25uZWN0aW9uSW5mby4NCg0KLSBUaGUgZGVmYXVsdCBzZXJ2ZXIgaG9zdGtleSBhbGdvcml0aG0gb3JkZXIgaXMgbm93ICJzc2gtcnNhIiwgInNzaC1kc3MiLg0KDQotIEltcG9ydGFudDogcmV2aXNlZCBJbnB1dC0gYW5kIE91dHB1dFN0cmVhbSBjb2RlLCBldmVyeXRoaW5nIGlzIG5vdyB1bmJ1ZmZlcmVkDQogIChsZXNzIG1lbW9yeSBjb25zdW1wdGlvbiwgbW9yZSBkaXJlY3QgaW50ZXJmYWNlLCBzZWUgYWxzbyBTdHJlYW1Hb2JibGVyIGNsYXNzIGFuZCB0aGUgRkFRKS4NCg0KLSBBZGRlZCBTdHJlYW1Hb2JibGVyIGhlbHBlciBjbGFzcy4NCg0KLSBNZXRob2QgdmVyaWZ5U2VydmVySG9zdEtleSgpIGluIHRoZSBTZXJ2ZXJIb3N0S2V5VmVyaWZpZXIgbWF5IG5vdyB0aHJvdyBleGNlcHRpb25zDQogIChhbiBhbHRlcm5hdGl2ZSB0byByZXR1cm5pbmcgImZhbHNlIikuDQoNCi0gQWxsIGJhY2tncm91bmQgdGhyZWFkcyAodGhlIHBlci1jb25uZWN0aW9uIHJlY2VpdmUgdGhyZWFkIGFzIHdlbGwgYXMgYWxsIHRocmVhZHMNCiAgdXNlZCBpbiBmb3J3YXJkZXJzIGFuZCBTdHJlYW1Hb2JibGVycykgbm93IHVzZSBzZXREYWVtb24odHJ1ZSkgb24gc3RhcnR1cC4NCg0KLSBBZGRlZCAiZGlmZmllLWhlbGxtYW4tZ3JvdXAxNC1zaGExIiBzdXBwb3J0IHRvIHRoZSBrZXkgZXhjaGFuZ2UgY29kZS4NCg0KLSBBZGRlZCBjaGFpbmVkIElPRXhjZXB0aW9ucyB3aGVyZSBhcHBsaWNhYmxlIChJT0V4Y2VwdGlvbiBpbml0aWFsaXphdGlvbiB3aXRoIGluaXRDYXVzZSgpKS4NCg0KLSBDbGVhbmVkIHVwIHBhY2tldCBidWlsZGluZyBjb2RlLCByZW1vdmVkIHVubmVjZXNzYXJ5IHNlcnZlci1zaWRlIG1ldGhvZHMuDQoNCi0gQ2xlYW5lZCB1cCBqYXZhZG9jIG9mIFNDUENsaWVudDogcmVwbGFjZWQgdW1hc2sgd2l0aCBtb2RlLg0KDQotIEZpeGVkIGEgYnVnIGluIHRoZSBzZXJ2ZXIgaWRlbnRpZmljYXRpb24gc3RyaW5nIHBhcnNlci4gVGhpcyBhY3R1YWxseSBwcmV2ZW50ZWQgYSBzdWNjZXNzZnVsDQogIGtleSBleGNoYW5nZSB3aXRoIHNvbWUgc3NoIHNlcnZlcnMgKHRoZSBzZXJ2ZXIncyBzaWduYXR1cmUgd2FzIHJlamVjdGVkKS4NCiAgVGhhbmtzIHRvIEFsZXggTW9sb2Nobmlrb3YgZm9yIHRoZSBpbml0aWFsIGJ1ZyByZXBvcnQgYW5kIGZvciBoZWxwaW5nIGluIHRyYWNraW5nIGRvd24gdGhlIGlzc3VlLg0KDQotIEZpeGVkIGEgYnVmZmVyIHJlLWFsbG9jYXRpb24gYnVnIGluIHRoZSBiZXRhIHZlcnNpb24gb2YgdGhlIFN0cmVhbUdvYmJsZXIgY2xhc3MNCiAgKHRoYW5rcyB0byBNYXJjIExpam91cikuDQoNCi0gRml4ZWQgZmxhd2VkIFVJTlQ2NCBzdXBwb3J0ICh0aGFua3MgdG8gQm9iIFNpbW9ucykuDQoNCi0gRml4ZWQgYSBidWcgaW4gdGhlIGJ1aWxkIHNjcmlwdCBvZiB0aGUgYmV0YSBidWlsZHMgKHNmdHAgYmV0YSBkaXJlY3Rvcnkgd2FzIG5vdCBjb21wbGV0ZWx5IHJlbW92ZWQpDQogICh0aGFua3MgdG8gUmljaGFyZCBIYXNoKS4NCg0KLSBVc2UgemVybyBiYXNlZCBwYWRkaW5nIGZvciB1bmVuY3J5cHRlZCB0cmFmZmljLg0KDQotIENoYW5nZWQgYWdhaW4gdGhlIGNsaWVudCBpZGVudGlmaWNhdGlvbiBzdHJpbmcgKHRoZSBvbmUgcHJlc2VudGVkIHRvIHRoZSBzZXJ2ZXIpLg0KDQotIENyZWF0ZWQgYSBGQVEsIGF2YWlsYWJsZSBvbiB0aGUgd2Vic2l0ZSBhbmQgaW4gdGhlIGRpc3RyaWJ1dGlvbi4NCiAgDQotIFJldmlzZWQgamF2YWRvYyBjb21tZW50cy4gQWxzbywgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIGlzIG5vdyBsb2NhdGVkIGluIHRoZSBzdWJkaXJlY3RvcnkNCiAgImphdmFkb2MiIGluc3RlYWQgb2YgImRvYyIgKGluIHRoZSBkaXN0cmlidXRpb24pLg0KDQotIEFkZGVkIFJFQURNRS50eHQgdG8gdGhlIGRpc3RyaWJ1dGlvbi4NCg0KDQpidWlsZDIwNywgMjAwNS0wNy0yMToNCg0KLSBBZGRlZCAiS2V5Ym9hcmQgSW50ZXJhY3RpdmUiIGF1dGhlbnRpY2F0aW9uIG1ldGhvZDoNCiAgYXV0aGVudGljYXRlV2l0aEtleWJvYXJkSW50ZXJhY3RpdmUoKSBpbiBDb25uZWN0aW9uLmphdmEsDQogIGFsc28gaGF2ZSBhIGxvb2sgYXQgSW50ZXJhY3RpdmVDYWxsYmFjay5qYXZhLg0KDQotIEV4dGVuZGVkIGF1dGhlbnRpY2F0aW9uIGludGVyZmFjZSBpbiBDb25uZWN0aW9uLmphdmEgKGJhY2t3YXJkcyBjb21wYXRpYmxlKS4NCiAgTmV3IGZ1bmN0aW9uYWxpdHk6IGdldFJlbWFpbmluZ0F1dGhNZXRob2RzKCksIGlzQXV0aE1ldGhvZEF2YWlsYWJsZSgpLA0KICBpc0F1dGhlbnRpY2F0aW9uQ29tcGxldGUoKSBhbmQgaXNBdXRoZW50aWNhdGlvblBhcnRpYWxTdWNjZXNzKCkuDQoNCi0gVXNpbmcgYW4gYXV0aGVudGljYXRpb24gbWV0aG9kIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciBsZWFkcyBub3cgdG8gYW4gZXhjZXB0aW9uDQogIChpbnN0ZWFkIG9mIHJldHVybmluZyAiZmFsc2UiKS4gVXNlIGlzQXV0aE1ldGhvZEF2YWlsYWJsZSgpIGlmIHlvdSB3YW50IHRvIGNoZWNrDQogIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGFuIGF1dGhlbnRpY2F0aW9uIG1ldGhvZC4NCg0KLSBGaXhlZCBhIGJ1ZyBpbiBTQ1BDbGllbnQgd2hpY2ggc29tZXRpbWVzIGxlYWQgdG8gZmFpbGVkIGRvd25sb2Fkcy4NCg0KLSBJbXByb3ZlZCBjaGFubmVsIHdpbmRvdyBoYW5kbGluZy4NCg0KLSBSZW1vdmVkIGJvZ3VzIChDVlMpIHZlcnNpb24gc3RyaW5nIGZyb20gQ29ubmVjdGlvbi5qYXZhDQoNCi0gQ2hhbmdlZCBjbGllbnQgaWRlbnRpZmljYXRpb24gc3RyaW5nIHRvICJHYW55bWVkX2J1aWxkWFhYIi4NCg0KLSBDaGFuZ2VkIHRoZSBqYXIgZmlsZSBuYW1pbmcgc2NoZW1lIChnYW55bWVkLXNzaDItYnVpbGRYWFguamFyKS4NCg0KLSBTdGFydGVkIGFkZGluZyBsb2dnaW5nIHN1cHBvcnQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAoY3VycmVudGx5IG9ubHkgZm9yIGRldmVsb3BtZW50KS4NCg0KLSBDbGVhbnVwIG9mIGphdmFkb2MgYW5kIGNvbW1lbnRzIGF0IHNldmVyYWwgcGxhY2VzLg0KDQotIFJldmVyc2VkIG9yZGVyIG9mIGVudHJpZXMgaW4gSElTVE9SWS5UWFQNCg0KDQpidWlsZDIwNiwgMjAwNS0wNy0wNDoNCg0KLSBGaXhlZCBzbWFsbCByZXNvdXJjZSBpc3N1ZSB3aXRoIFNDUCAodGhhbmtzIHRvIE1pY2hh62wgR2lyYXVkKS4NCg0KLSBBZGRlZCBMb2NhbFN0cmVhbUZvcndhcmRlci4NCg0KLSBBZGRlZCBISVNUT1JZLlRYVA0KDQoNCmJ1aWxkMjA1LCAyMDA1LTA2LTI3Og0KDQotIEluaXRpYWwgcmVsZWFzZS4NCg0K