SW1wbGVtZW50YXRpb24gTGljZW5zZSBBZ3JlZW1lbnQNCg0KVGhpcyBBZ3JlZW1lbnQgbWFkZSBhbmQgZW50ZXJlZCBpbnRvIHRoaXMgX19fX19fIGRheSBvZiBKdWx5LCAyMDE2ICh0aGUgk0VmZmVjdGl2ZSBEYXRllCkgYnkgYW5kIGJldHdlZW4gV2F2ZXMgQXVkaW8gTHRkLiAok1dhdmVzlCksIGEgY29tcGFueSBkdWx5IG9yZ2FuaXplZCBhbmQgZXhpc3RpbmcgdW5kZXIgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIElzcmFlbCwgYW5kIGhhdmluZyBpdHMgcHJpbmNpcGFsIG9mZmljZSBhdCBBenJpZWxpIENlbnRlciAxLCAzMm5kIEZsb29yLCAxMzIgRGVyZWNoIE1lbmFjaGVtIEJlZ2luLCBUZWwgQXZpdiwgSXNyYWVsIDY3MDExMDEsIGFuZCBJbnRlbCBDb3Jwb3JhdGlvbiwgYSBjb21wYW55IGR1bHkgb3JnYW5pemVkIGFuZCBleGlzdGluZyB1bmRlciB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgRGVsYXdhcmUsIFUuUy5BLiwgYW5kIGhhdmluZyBpdHMgcHJpbmNpcGFsIG9mZmljZSBhdCAyMjAwIE1pc3Npb24gQ29sbGVnZSBCbHZkLiwgU2FudGEgQ2xhcmEsIENhbGlmb3JuaWEgOTUwNTQsIFUuUy5BLiAoIkxpY2Vuc2VlIikuDQoNCldIRVJFQVMJV2F2ZXMgaXMgZW5nYWdlZCwgaW50ZXIgYWxpYSwgaW4gdGhlIGRldmVsb3BtZW50LCBtYW51ZmFjdHVyaW5nLCBzYWxlLCBkaXN0cmlidXRpb24gYW5kIG1hcmtldGluZyBvZiB0ZWNobm9sb2d5IGFuZCBzb2Z0d2FyZSByZWxhdGluZyB0byBkaWdpdGFsIGF1ZGlvIHJlcHJvZHVjdGlvbjsgYW5kDQoNCldIRVJFQVMJTGljZW5zZWUgZGVzaXJlcyB0byBvYnRhaW4gZnJvbSBXYXZlcywgYW5kIFdhdmVzIGlzIHdpbGxpbmcgdG8gZ3JhbnQgdG8gTGljZW5zZWUsIHN1YmplY3QgdG8gdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGJlbG93LCBhIGxpY2Vuc2UgZm9yIHVzZSBvZiB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSwgYXMgZGVmaW5lZCBoZXJldW5kZXI7DQoNCk5PVywgVEhFUkVGT1JFLCBpbiBjb25zaWRlcmF0aW9uIG9mIHRoZSBtdXR1YWwgY292ZW5hbnRzIGhlcmVpbmFmdGVyIHNldCBmb3J0aCwgdGhlIHBhcnRpZXMgaGVyZWJ5IGFncmVlIGFzIGZvbGxvd3M6DQoNCjEuIERlZmluaXRpb25zDQogICBBcyB1c2VkIGluIHRoaXMgQWdyZWVtZW50LCB0aGUgZm9sbG93aW5nIHRlcm1zIHNoYWxsIGhhdmUgdGhlIG1lYW5pbmdzIHNldCBmb3J0aCAgICAgYmVsb3c6DQqTQXV0aG9yaXplZCBMaWNlbnNlZZQgbWVhbnMgYSB0aGlyZCBwYXJ0eSB0aGF0IGhhcyBzaWduZWQgYSBsaWNlbnNlIGFncmVlbWVudCB3aXRoIFdhdmVzLCByZWdhcmRpbmcgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3ksIGFuZCB3aG8gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBwYXlpbmcgb2YgYW55IGZlZXMgb3Igcm95YWx0eSB0byBXYXZlcyBmb3IgdXNlIG9mIHRoZSBJbXBsZW1lbnRhdGlvbiBhcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0KHMpLg0Kk0J1c2luZXNzIFVuaXQgQWNxdWlyZXKUIG1lYW5zIGFuIHVucmVsYXRlZCAoImFybXMgZnJlZSIpIHRoaXJkIHBhcnR5IHRvIHdoaWNoIExpY2Vuc2VlIERpdmVzdHMgYSBCdXNpbmVzcyBVbml0Lg0Kk0NvZGWUIG1lYW5zIGNvbXB1dGVyIHByb2dyYW1taW5nIGNvZGUsIGluY2x1ZGluZyBib3RoICJPYmplY3QgQ29kZSIsIHdoaWNoIG1lYW5zIHRoZSBzb2Z0d2FyZSBpbiBtYWNoaW5lIHJlYWRhYmxlIGJpbmFyeSBmb3JtIGFuZCB0byBiZSBsaW5rZWQgaW4gb3JkZXIgdG8gY3JlYXRlIG1hY2hpbmUgZXhlY3V0YWJsZXMgYW5kICJTb3VyY2UgQ29kZSIsIHdoaWNoIG1lYW5zIGNvbXB1dGVyIHByb2dyYW1taW5nIGNvZGUgdGhhdCBtYXkgYmUgZGlzcGxheWVkIGluIGEgZm9ybSByZWFkYWJsZSBhbmQgdW5kZXJzdGFuZGFibGUgYnkgYSBwcm9ncmFtbWVyIG9mIG9yZGluYXJ5IHNraWxsLCBleGNsdWRpbmcgT2JqZWN0IENvZGUuDQqTQ3VzdG9tZXJzlCBtZWFucyBjdXN0b21lcnMgb2YgTGljZW5zZWUgd2hvIHB1cmNoYXNlIExpY2Vuc2VkIFByb2R1Y3RzIGZyb20gTGljZW5zZWUgZm9yIHRoZSByaWdodCB0byB1c2UgdGhlIEltcGxlbWVudGF0aW9ucyBzb2xlbHkgZW1iZWRkZWQgaW4gY29uanVuY3Rpb24gd2l0aCwgYW5kIGZvciB0aGUgb3BlcmF0aW9uIG9mLCBzdWNoIExpY2Vuc2VkIFByb2R1Y3RzLCBvciBhcyB1cGRhdGVzIHRvIEltcGxlbWVudGF0aW9ucyBhbHJlYWR5IGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggTGljZW5zZWQgUHJvZHVjdHMsIHdoZXRoZXIgYW4gQXV0aG9yaXplZCBMaWNlbnNlZSBvciBub3QuDQqTRG9jdW1lbnRhdGlvbpQgbWVhbnMgYW55IHVzZXIgbWFudWFscywgcmVmZXJlbmNlIG1hbnVhbHMsIHJlbGVhc2Ugbm90ZXMsIGFwcGxpY2F0aW9uIGFuZCBtZXRob2RvbG9neSBub3RlcywgdGhlIGFwcGxpY2FibGUgc3BlY2lmaWNhdGlvbnMgYW5kL29yIHByb2R1Y3QgZGF0YSBzaGVldHMsIGFuZCBhbnkgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIGJ5IFdhdmVzIHRvIExpY2Vuc2VlIGZvciB1c2Ugd2l0aCB0aGUgTGljZW5zZWQgVGVjaG5vbG9neS4NCpNEZXJpdmF0aXZlIFRlY2hub2xvZ3mUIG1lYW5zOiAoaSkgZm9yIGNvcHlyaWdodGFibGUgb3IgY29weXJpZ2h0ZWQgbWF0ZXJpYWwsIGEgZGVyaXZhdGl2ZSB3b3JrLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHRyYW5zbGF0aW9uIChpbmNsdWRpbmcgdHJhbnNsYXRpb24gaW50byBvdGhlciBjb21wdXRlciBsYW5ndWFnZXMpLCBwb3J0aW5nLCBtb2RpZmljYXRpb24sIGNvcnJlY3Rpb24sIGFkZGl0aW9uLCBleHRlbnNpb24sIHVwZ3JhZGUsIGltcHJvdmVtZW50LCBjb21waWxhdGlvbiwgYWJyaWRnbWVudCBvciBvdGhlciBmb3JtIGluIHdoaWNoIGFuIGV4aXN0aW5nIHdvcmsgbWF5IGJlIHJlY2FzdCwgY29uZmlndXJlZCwgdHJhbnNmb3JtZWQgb3IgYWRhcHRlZDsgKGlpKSBmb3IgcGF0ZW50YWJsZSBvciBwYXRlbnRlZCBtYXRlcmlhbCBvciBtZXRob2QsIGFueSBpbXByb3ZlbWVudCB0aGVyZW9uIG9yIGFueSBkZXZpY2UgbWFudWZhY3R1cmVkIHVzaW5nIHRoZSBwYXRlbnRlZCBtZXRob2Q7IGFuZCAoaWlpKSBmb3IgbWF0ZXJpYWwgd2hpY2ggaXMgcHJvdGVjdGVkIGJ5IHRyYWRlIHNlY3JldCwgYW55IG5ldyBtYXRlcmlhbCBkZXJpdmVkIGZyb20gc3VjaCBleGlzdGluZyB0cmFkZSBzZWNyZXQgbWF0ZXJpYWwsIGluY2x1ZGluZyBuZXcgbWF0ZXJpYWwgd2hpY2ggbWF5IGJlIHByb3RlY3RlZCBieSBjb3B5cmlnaHQsIHBhdGVudCBhbmQvb3IgdHJhZGUgc2VjcmV0Lg0Kk0Vycm9yKHMplCBtZWFucyBhbnkgZGVmZWN0cyBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUgd2hpY2ggcHJldmVudCB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSBmcm9tIHBlcmZvcm1pbmcgaW4gYWxsIG1hdGVyaWFsIHJlc3BlY3RzIHdpdGggV2F2ZXMnIHNwZWNpZmljYXRpb25zIHRoZXJlZm9yLiANCpNJbXBsZW1lbnRhdGlvbpQgbWVhbnMgYW55IGludGVncmF0ZWQgY2lyY3VpdCAoSUMpIHdoaWNoIHN0b3JlcyBvciBlbXBsb3lzIGNvbXB1dGVyLWludGVsbGlnaWJsZSBpbnN0cnVjdGlvbnMgdGhhdCBlbWJvZHksIGltcGxlbWVudCwgb3IgZW1wbG95IHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5LCBpbmNsdWRlZCBidXQgbm90IGxpbWl0ZWQgdG8gYW55IElDIHdoaWNoIHN0b3JlcyBvYmplY3QgY29kZSB0aGF0IGFjY29tcGFuaWVzIG9yIGlzIGVtYmVkZGVkIGluIGEgZ2VuZXJhbCBwdXJwb3NlIGludGVncmF0ZWQgY2lyY3VpdCwgb3IgaW4gdGhlIGZvcm0gb2YgQ29kZSBvciBoYXJkd2FyZSBpbiBhbmFsb2cgb3IgZGlnaXRhbCBmb3JtLiCTSW1wbGVtZW50YXRpb26UIHNoYWxsIGluY2x1ZGUgYW55IEltcHJvdmVtZW50cywgYXMgZGVmaW5lZCBiZWxvdy4NCpNJbXByb3ZlbWVudHOUIG1lYW5zIG1vZGlmaWNhdGlvbnMgdG8gdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgbWFkZSBvciBhY3F1aXJlZCBieSBXYXZlcyBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQgdGhhdCByZXN1bHQgaW4gc3VwZXJpb3IgYXVkaW8gZWZmZWN0Lg0KIkludGVsbGVjdHVhbCBQcm9wZXJ0eSIgbWVhbnMgKGkpIGFsbCBpbnZlbnRpb25zICh3aGV0aGVyIHBhdGVudGFibGUgb3IgdW5wYXRlbnRhYmxlIGFuZCB3aGV0aGVyIG9yIG5vdCByZWR1Y2VkIHRvIHByYWN0aWNlKSwgYWxsIEltcHJvdmVtZW50cyB0aGVyZXRvIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGVuaGFuY2VtZW50cywgbW9kaWZpY2F0aW9ucywgZXh0ZW5zaW9ucyBhbmQgZGVyaXZhdGl2ZXMpLCBhbmQgYWxsIHBhdGVudHMgKHdoZXRoZXIgaW4gdGhlIGZvcm0gb2YgdXRpbGl0eSBwYXRlbnRzIG9yIGRlc2lnbiBwYXRlbnRzKSwgcGF0ZW50IGFwcGxpY2F0aW9ucyAod2hldGhlciBwZW5kaW5nIG9yIG5vdCksIGFuZCBwYXRlbnQgZGlzY2xvc3VyZXMsIHRvZ2V0aGVyIHdpdGggYWxsIHJlIGlzc3VhbmNlcywgY29udGludWF0aW9ucywgY29udGludWF0aW9ucy1pbi1wYXJ0LCByZXZpc2lvbnMsIGV4dGVuc2lvbnMsIGFuZCByZSBleGFtaW5hdGlvbnMgdGhlcmVvZjsgKGlpKSBhbGwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgdHJhZGUgZHJlc3MsIGRlc2lnbnMsIHRyYWRlIHN0eWxlcywgbG9nb3MsIHRyYWRlIG5hbWVzLCBhbmQgY29ycG9yYXRlIG5hbWVzLCB0b2dldGhlciB3aXRoIGFsbCB0cmFuc2xhdGlvbnMsIGFkYXB0YXRpb25zLCBkZXJpdmF0aW9ucywgYW5kIGNvbWJpbmF0aW9ucyB0aGVyZW9mIGFuZCBpbmNsdWRpbmcgYWxsIGdvb2R3aWxsIGFzc29jaWF0ZWQgdGhlcmV3aXRoLCBhbmQgYWxsIGFwcGxpY2F0aW9ucywgcmVnaXN0cmF0aW9ucywgYW5kIHJlbmV3YWxzIGluIGNvbm5lY3Rpb24gdGhlcmV3aXRoOyAoaWlpKSBhbnkgd29yayBvZiBhdXRob3JzaGlwLCByZWdhcmRsZXNzIG9mIGNvcHlyaWdodGFiaWxpdHksIGFsbCBjb3B5cmlnaHRhYmxlIHdvcmtzLCBhbGwgY29weXJpZ2h0cyAoaW5jbHVkaW5nIHRoZSBkcm9pdCBtb3JhbGUpIGFuZCBhbGwgYXBwbGljYXRpb25zLCByZWdpc3RyYXRpb25zLCBhbmQgcmVuZXdhbHMgaW4gY29ubmVjdGlvbiB0aGVyZXdpdGg7IChpdikgYWxsIG1hc2sgd29ya3MgYW5kIGFsbCBhcHBsaWNhdGlvbnMsIHJlZ2lzdHJhdGlvbnMsIGFuZCByZW5ld2FscyBpbiBjb25uZWN0aW9uIHRoZXJld2l0aDsgKHYpIGFsbCBrbm93LWhvdyBhbmQgdHJhZGUgc2VjcmV0czsgYW5kICh2aSkgYWxsIG90aGVyIHByb3ByaWV0YXJ5IHJpZ2h0cywgaW5kdXN0cmlhbCByaWdodHMsIGNvbW1lcmNpYWwgcmlnaHRzIGFuZCBhbnkgb3RoZXIgc2ltaWxhciByaWdodHMsIGluIGVhY2ggY2FzZSBvbiBhIHdvcmxkd2lkZSBiYXNpcywgYW5kIGFsbCBjb3BpZXMgYW5kIHRhbmdpYmxlIGVtYm9kaW1lbnRzIHRoZXJlb2YgKGluIHdoYXRldmVyIGZvcm0gb3IgbWVkaXVtKS4NCiJJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIiBtZWFucyBhbGwgdGFuZ2libGUgYW5kIGludGFuZ2libGUgbGVnYWwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3RzIGV2aWRlbmNlZCBieSBvciBlbWJvZGllZCBpbiBJbnRlbGxlY3R1YWwgUHJvcGVydHkuDQqTTGljZW5zZWQgUHJvZHVjdHOUIG1lYW5zIGFueSBwcm9kdWN0cyB0aGF0IGluY2x1ZGUgTGljZW5zZWQgVGVjaG5vbG9neSBhbmQgYXJlIG1hbnVmYWN0dXJlZCBieSBvciBmb3IgTGljZW5zZWUgaW4gYWNjb3JkYW5jZSB3aXRoIGFuZCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4gIExpY2Vuc2VkIFByb2R1Y3RzIG1heSBpbmNsdWRlLCB3aXRob3V0IGxpbWl0YXRpb24sIGludGVncmF0ZWQgY2lyY3VpdHMsIG1pY3JvcHJvY2Vzc29ycywgY2hpcHNldHMsIGZsYXNoIG1lbW9yeSBwcm9kdWN0cywgYW5kIEludGVsIHByb2Nlc3Nvci1iYXNlZCBtb3RoZXJib2FyZCBwcm9kdWN0cy4NCpNMaWNlbnNlZCBTb2Z0d2FyZZQgbWVhbnMgdGhlIENvZGUsIGluY2x1ZGluZyBpZiBhbmQgYXMgYXBwbGljYWJsZSwgYnV0IHdpdGhvdXQgbGltaXRhdGlvbiwgZHJpdmVycyBhbmQgZmllbGQgY29uZmlndXJhdGlvbiB0b29scyBmb3IgdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIEltcGxlbWVudGF0aW9uIGluY2x1ZGluZyBhbnkgYW5kIGFsbCBJbnRlbGxlY3R1YWwgUHJvcGVydHkgYW5kIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgZW1ib2RpZWQgaW4gc3VjaCBDb2RlLg0Kk0xpY2Vuc2VkIFRlY2hub2xvZ3mUIG1lYW5zIFdhdmVzkiBhdWRpbyBlbmhhbmNlbWVudCBhbGdvcml0aG0gaW4gdXNlIGFzIG9mIHRoZSBFZmZlY3RpdmUgRGF0ZSwgYWxsIGFzIGZ1cnRoZXIgZGVzY3JpYmVkIGluIEFwcGVuZGl4IEEgYXR0YWNoZWQgaGVyZXRvLCB0aGUgTGljZW5zZWQgU29mdHdhcmUgYW5kIHRoZSBEb2N1bWVudGF0aW9uLCBpZiBhbnksIHRvZ2V0aGVyIHdpdGggYW55IEVycm9yIGZpeGVzLCBidWcgZml4ZXMsIHVwZGF0ZXMgYW5kIHVwZ3JhZGVzIHByb3ZpZGVkIHRvIExpY2Vuc2VlIGZyb20gdGltZSB0byB0aW1lIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBpbmNsdWRpbmcgYW55IGFuZCBhbGwgSW50ZWxsZWN0dWFsIFByb3BlcnR5IGFuZCBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIGVtYm9kaWVkIGluIHN1Y2ggTGljZW5zZWQgVGVjaG5vbG9neS4NCiAgICAgIJNPcGVuIFNvdXJjZSBNYXRlcmlhbJQgbWVhbnMgZWFjaCBvZjogKGEpIHNvZnR3YXJlIHRoYXQgY29uc2lzdHMgb2YsIGNvbnRhaW5zLCBvciBpcyBkZXJpdmVkIGluIGFueSBtYW5uZXIgKGluIHdob2xlIG9yIGluIHBhcnQpIGZyb20sIGFueSBzb2Z0d2FyZSB0aGF0IGlzIGRpc3RyaWJ1dGVkIGFzIGZyZWUgc29mdHdhcmUsIG9wZW4gc291cmNlIHNvZnR3YXJlLCBvciBwdXJzdWFudCB0byBzaW1pbGFyIGxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG1vZGVscyAoZS5nLiwgR05VLCBMaW51eCwgZXRjLikgKJNPcGVuIFNvdXJjZSBTb2Z0d2FyZZQpOyBhbmQgKGIpIGFueSBkYXRhICiTRGVzaWduIERhdGGUKSB0aGF0IGlzIHN1YmplY3QgdG8gYSBsaWNlbnNlIGFncmVlbWVudCBvciBvdGhlciBjb250cmFjdHVhbCBvYmxpZ2F0aW9uIHRoYXQgcmVxdWlyZXMgdGhhdCBzdWNoIERlc2lnbiBEYXRhIGFuZC9vciBhbnkgZGF0YSwgc29mdHdhcmUsIG9yIHRhbmdpYmxlIGl0ZW0gZGVyaXZlZCBmcm9tLCBwcm9kdWNlZCBieSwgYmFzZWQgb24sIG9yIGRpc3RyaWJ1dGVkIHdpdGggc3VjaCBEZXNpZ24gRGF0YSAok0Rlcml2YXRpdmUgSXRlbZQpLCBiZSBpbiB3aG9sZSBvciBpbiBwYXJ0OiAoaSkgZGlzY2xvc2VkLCBkaXN0cmlidXRlZCBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgZm9yIGluc3BlY3Rpb24gaW4gYSBmb3JtIGZhY2lsaXRhdGluZyBhbmFseXNpcyBvZiBhbnkgZnVuY3Rpb25hbCwgYXJjaGl0ZWN0dXJhbCwgY29tcG9zaXRpb24sIG1hbnVmYWN0dXJpbmcsIGFzc2VtYmx5LCBvciB0ZXN0aW5nIGNoYXJhY3RlcmlzdGljIG9mIHN1Y2ggRGVzaWduIERhdGEgb3IgRGVyaXZhdGl2ZSBJdGVtLCB3aGV0aGVyIHN1Y2ggYW5hbHlzaXMgaXMgaW50cnVzaXZlIG9yIG5vbi1pbnRydXNpdmUgKGUuZy4sIHJlcXVpcmluZyB0aGF0IGEgc2VtaWNvbmR1Y3RvciBjaGlwIGJlIG1hZGUgYXZhaWxhYmxlIGZvciBpbnNwZWN0aW9uIGluIGFuIHVucGFja2FnZWQgb3Igb3RoZXJ3aXNlIGluY29tcGxldGUgc3RhdGUpOyAoaWkpIGxpY2Vuc2VkIG9yIG90aGVyd2lzZSBiZSBtYWRlIGF2YWlsYWJsZSBmb3IgdGhlIHB1cnBvc2Ugb2Ygc3VjaCBEZXNpZ24gRGF0YSBvciBEZXJpdmF0aXZlIEl0ZW0gYmVpbmcgbW9kaWZpZWQgb3IgaW50ZWdyYXRlZCBpbnRvIGFueSBvdGhlciBjb21wb25lbnQgb3IgcHJvZHVjdDsgb3IgKGlpaSkgYmUgcmVkaXN0cmlidXRhYmxlIG9yIG90aGVyd2lzZSBjb252ZXllZCBvbiBhIGNvbXB1bHNvcnkgYmFzaXMgb3IgYXQgbm8gb3IgbWluaW1hbCBjaGFyZ2UuDQpGb3IgcHVycG9zZXMgb2YgdGhlIGRlZmluaXRpb24gb2YgT3BlbiBTb3VyY2UgTWF0ZXJpYWwsIERlc2lnbiBEYXRhIGluY2x1ZGVzLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBkZXNjcmlwdGlvbiwgc3BlY2lmaWNhdGlvbiwgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBpbmZvcm1hdGlvbiByZWxhdGluZyB0byBhbnkgZnVuY3Rpb25hbCwgYXJjaGl0ZWN0dXJhbCwgY29uc3RpdHVlbnQgY29tcG9uZW50IG9yIG1hdGVyaWFsLCBtYW51ZmFjdHVyaW5nLCBhc3NlbWJseSwgdGVzdGluZywgaW5zcGVjdGlvbiBvciBtZXRyb2xvZ3kgY2hhcmFjdGVyaXN0aWMgb2YgYSBzZW1pY29uZHVjdG9yIGNvbXBvbmVudCBvciBkZXZpY2UsIG9yIHBvcnRpb24gb2Ygc2VtaWNvbmR1Y3RvciBjb21wb25lbnQgb3IgZGV2aWNlIChlLmcuLCBkZXNpZ24gaW5mb3JtYXRpb24gZXhwcmVzc2VkIGluIFZlcmlsb2csIENBRCBsYXllciwgR0RTSUkgZGF0YSwgbmV0bGlzdCwgR2VyYmVyIGRhdGEsIFJUTCBkYXRhLCB2ZXJpZmljYXRpb24gc3VpdGUsIHNpbXVsYXRpb24gbW9kZWwsIGluc3RydWN0aW9uIHNldCBzcGVjaWZpY2F0aW9uLCB0ZXN0YWJpbGl0eSBzcGVjaWZpY2F0aW9uLCBtYW51ZmFjdHVyaW5nIHByb2Nlc3MsIGV0Yy4pLiAgRGVzaWduIERhdGEgYWxzbyBpbmNsdWRlcywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgbWljcm9jb2RlLCBmaXJtd2FyZSwgcHJvZ3JhbW1pbmcgZGF0YSBmb3IgcmVwcm9ncmFtbWFibGUgb3IgZmllbGQtcHJvZ3JhbW1hYmxlIGNlbGxzLCBzZWxmLXRlc3Qgcm91dGluZXMsIG9yIGluaXRpYWxpemF0aW9uIGNvZGUgbGljZW5zZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIHNlbWljb25kdWN0b3IgY29tcG9uZW50IG9yIGRldmljZS4NCkZvciBwdXJwb3NlcyBvZiB0aGUgZGVmaW5pdGlvbiBvZiBPcGVuIFNvdXJjZSBNYXRlcmlhbCwgT3BlbiBTb3VyY2UgU29mdHdhcmUgaW5jbHVkZXMsIHdpdGhvdXQgbGltaXRhdGlvbiwgc29mdHdhcmUgbGljZW5zZWQgb3IgZGlzdHJpYnV0ZWQgcHVyc3VhbnQgdG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZXMgb3IgZGlzdHJpYnV0aW9uIG1vZGVscyBzaW1pbGFyIHRvOiAgKGEpIEdOVZJzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgb3IgTGVzc2VyL0xpYnJhcnkgR1BMIChMR1BMKTsgKGIpIHRoZSBBcnRpc3RpYyBMaWNlbnNlIChlLmcuLCBQRVJMKTsgKGMpIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlOyAoZCkgdGhlIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlOyAoZSkgdGhlIFN1biBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKTsgKGYpIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIChDRERMKTsgKGcpIHRoZSBCU0QgTGljZW5zZTsgYW5kIChoKSB0aGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UuDQqTUGVybWFuZW50bHkgRGlzYWJsZWQgUHJvZHVjdJQgbWVhbnMgYSBwcm9kdWN0IG1hZGUgYnkgb3IgZm9yIExpY2Vuc2VlIGFuZCBpbmNsdWRlcyB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSwgYnV0IHdoaWNoIGhhcyB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSBkaXNhYmxlZCBzdWNoIHRoYXQgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgaXMgZGVhY3RpdmF0ZWQgb3IgdW51c2FibGUuICBVbmxlc3Mgb3RoZXJ3aXNlIGV4cHJlc3NseSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQsIHJlZmVyZW5jZXMgdG8gk0xpY2Vuc2VkIFByb2R1Y3SUIGluIHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgaW5jbHVkaW5nIGEgcmVmZXJlbmNlIHRvIGFueSCTUGVybWFuZW50bHkgRGlzYWJsZWQgUHJvZHVjdC6UDQqTVW5pdJQgbWVhbnMgZWFjaCBjb3B5IG9mIHRoZSBJbXBsZW1lbnRhdGlvbiAob3IgcGFydHMgdGhlcmVvZikuDQqTU291cmNlIE1hdGVyaWFsc5QgbWVhbnMgc291cmNlIGNvZGUsIHRlc3Qgc3VpdGUgYW5kIGFsZ29yaXRobSBkZXNjcmlwdGlvbiBvZiB0aGUgc3ViamVjdCBwcm9ncmFtLCB0b2dldGhlciB3aXRoIGFsbCBwcm9ncmFtbWluZyBtYW51YWxzIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uDQqTU3Vic2lkaWFyeS9pZXOUIG1lYW5zIGFueSBjb3Jwb3JhdGlvbiwgZmlybSwgcGFydG5lcnNoaXAsIG9yIG90aGVyIGVudGl0eSwgd2hpY2ggaXMgb3duZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBvd25lcnNoaXAgd2l0aCB0aGUgYXBwbGljYWJsZSBQYXJ0eSB0byB0aGlzIEFncmVlbWVudCB0byB0aGUgZXh0ZW50IG9mIGF0IGxlYXN0IGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIGVxdWl0eSBoYXZpbmcgdGhlIHBvd2VyIHRvIHZvdGUgb24gb3IgZGlyZWN0IHRoZSBhZmZhaXJzIG9mIHRoZSBlbnRpdHksIGZvciBzbyBsb25nIGFzIGl0IHJlbWFpbnMgYSBTdWJzaWRpYXJ5LiAgDQoyLiBEZWxpdmVyeSBhbmQgQWNjZXB0YW5jZQ0KV2l0aGluIGZpdmUgKDUpIGRheXMgZnJvbSB0aGUgRWZmZWN0aXZlIERhdGUsIFdhdmVzIHNoYWxsIHByb3ZpZGUgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgdG8gTGljZW5zZWUgYnkgZS1tYWlsIHRvIGVpcF9zdXBwb3J0QGludGVsLmNvbSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZC4gDQozLiBPd25lcnNoaXAgb2YgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cw0KV2F2ZXMgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gdGhlIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMsIGFuZCBEZXJpdmF0aXZlIFRlY2hub2xvZ3kgb2YgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3ksIEltcHJvdmVtZW50cywgRG9jdW1lbnRhdGlvbiwgYW5kIGFsbCBvdGhlciByZWxhdGVkIG1hdGVyaWFsIHByb3ZpZGVkIGJ5IFdhdmVzIHRvIExpY2Vuc2VlLiBMaWNlbnNlZSB3aWxsIG5vdCBjbGFpbSBvciBhc3NlcnQgdGl0bGUgdG8gdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgUmlnaHRzIG9mIHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5LCBEZXJpdmF0aXZlIFRlY2hub2xvZ3ksIEltcHJvdmVtZW50cywgRG9jdW1lbnRhdGlvbiBhbmQgYWxsIG90aGVyIHJlbGF0ZWQgbWF0ZXJpYWwgcHJvdmlkZWQgYnkgV2F2ZXMgdG8gTGljZW5zZWUsIG9yIGF0dGVtcHQgdG8gdHJhbnNmZXIgYW55IHRpdGxlIHRvIHRoaXJkIHBhcnRpZXMsIGFuZCB3aWxsIGNvbnRyYWN0dWFsbHkgcmVxdWlyZSBzaW1pbGFyIGxpbWl0YXRpb25zIG9uIGl0cyBDdXN0b21lcnMgYnkgdXNpbmcgdGhlIGxhbmd1YWdlIJNJbnRlbCBhbmQgaXRzIHN1cHBsaWVycyByZXRhaW4gYWxsIG93bmVyc2hpcCByaWdodHOULg0KNC4gR3JhbnQgb2YgTGljZW5zZSBhbmQgT3duZXJzaGlwDQo0LjEgTGljZW5zZSBHcmFudA0KYS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFdhdmUgaGVyZWJ5IGdyYW50cyB0byBMaWNlbnNlZSB0aGUgZm9sbG93aW5nLCByb3lhbHR5IGZyZWUsIGZ1bGx5IHBhaWQgdXAsIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSByaWdodHMgYW5kIGxpY2Vuc2VzICh0aGUgk0xpY2Vuc2WUKToNCmEpIEEgbm9uLWV4Y2x1c2l2ZSByaWdodCB1bmRlciBhbGwgb2YgV2F2ZZJzIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgaW4gdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgdGhhdCBXYXZlIG5vdywgb3IgbGF0ZXIsIG93bnMgb3IgY29udHJvbHMgaW4gZnVsbCwgIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIGNvcHksIHJlcHJvZHVjZSwgbWFrZSBkZXJpdmF0aXZlcyBhbmQgbW9kaWZ5LCBwZXJmb3JtLCBhbmQgZGlzcGxheSB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSB0byBjcmVhdGUgdGhlIEltcGxlbWVudGF0aW9uLCBhbmQgdG8gZW1iZWQgdGhlIEltcGxlbWVudGF0aW9uIGluIGEgTGljZW5zZWQgUHJvZHVjdCBmb3IgbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uIG9mIExpY2Vuc2VkIFByb2R1Y3QsIGFuZCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgZGlzdHJpYnV0ZSB0aGUgSW1wbGVtZW50YXRpb24gYXMgcGFydCBvZiB0aGUgc2FsZSBhbmQgZGlzdHJpYnV0aW9uIG9mIExpY2Vuc2VkIFByb2R1Y3RzIGZvciBwdXJwb3NlcyBvZiB0aGVpciBvcGVyYXRpb24sIG9yIGFzIHVwZGF0ZXMgdG8gTGljZW5zZWQgUHJvZHVjdHMgdGhhdCBoYXZlIGJlZW4gc29sZCBvciBkaXN0cmlidXRlZC4gRm9yIHB1cnBvc2VzIG9mIGNsYXJpdHksIEN1c3RvbWVycyBtYXkgbm90IGFjdGl2YXRlIHRoZSBJbXBsZW1lbnRhdGlvbiB1bnRpbCB0aGV5IGJlY29tZSBhbiBBdXRob3JpemVkIExpY2Vuc2VlIHJlc3BvbnNpYmxlIGZvciBhbnkgcm95YWx0eSBvciBwYXltZW50IGZvciB1c2Ugb2YgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgYW5kIHRoZSBMaWNlbnNlIGdyYW50ZWQgcHVyc3VhbnQgdG8gdGhpcyBTZWN0aW9uIDQuMSBkb2VzIG5vdCBpbmNsdWRlIGFueSByaWdodCBmb3IgTGljZW5zZWUgdG8gYXV0aG9yaXplIG9yIGFzc2lzdCBpdHMgQ3VzdG9tZXJzIHRvIGFjdGl2YXRlIHRoZSBJbXBsZW1lbnRhdGlvbi4NCmIpIFRvIGRpc2Nsb3NlIGFuZCBkZW1vbnN0cmF0ZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBhbmQgc3VibGljZW5zZSB0byBjdXJyZW50IG9yIHByb3NwZWN0aXZlIGN1c3RvbWVycywgc3VwcGxpZXJzLCB2ZW5kb3JzLCBtYW51ZmFjdHVyaW5nIGZhY2lsaXRpZXMgdGhlIHJpZ2h0IHRvIHVzZSB0aGUgTGljZW5zZWQgUHJvZHVjdCB3aXRoIHRoZSAodW5hY3RpdmF0ZWQpIEltcGxlbWVudGF0aW9uIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2YgaW50ZXJuYWxseSBldmFsdWF0aW5nIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHdpdGggdGhlICh1bmFjdGl2YXRlZCkgSW1wbGVtZW50YXRpb24uDQpjKSBMaWNlbnNlZSBtYXkgZ3JhbnQgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIHN1YmxpY2Vuc2UgdG8gQ3VzdG9tZXJzLCBzb2xlbHkgdG8gdXNlIHRoZSBMaWNlbnNlZCBQcm9kdWN0cyB3aXRoIGFuIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5IGFzIGFuIGludGVncmFsIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3RzLCBwcm92aWRlZCwgaG93ZXZlciwgQ3VzdG9tZXJzIG1heSBub3QgYWN0aXZhdGUgdGhlIEltcGxlbWVudGF0aW9uIHVudGlsIHRoZXkgYmVjb21lIGFuIEF1dGhvcml6ZWQgTGljZW5zZWUgcmVzcG9uc2libGUgZm9yIGFueSByb3lhbHR5IG9yIHBheW1lbnQgZm9yIHVzZSBvZiB0aGUgTGljZW5zZWQgVGVjaG5vbG9neS4gTGljZW5zZWUgd2lsbCBlbnN1cmUgdGhhdCBMaWNlbnNlZSBpbmZvcm1zIGl0cyBDdXN0b21lcnMgZm9yIExpY2Vuc2VkIFByb2R1Y3RzIHdpdGggdGhlIEltcGxlbWVudGF0aW9uIHRoYXQgdGhleSBtdXN0IGVudGVyIGludG8gYSBsaWNlbnNlIGFncmVlbWVudCB3aXRoIFdhdmUgdG8gYWN0aXZhdGUgdGhlIEltcGxlbWVudGF0aW9uLiBBY3RpdmF0aW9uIG9mIHRoZSBJbXBsZW1lbnRhdGlvbiBpbiBlYWNoIExpY2Vuc2VkIFByb2R1Y3Qgc2hhbGwgYmUgcmVzdHJpY3RlZCB0byBhdXRob3JpemVkIHVzZXJzIHV0aWxpemluZyByZWxpYWJsZSBhbmQgc2VjdXJlIGFjdGl2YXRpb24gbWVhc3VyZXMgYXBwcm92ZWQgYnkgV2F2ZXMgaW4gd3JpdGluZy4gDQpkKSBMaWNlbnNlZSBtYXkgZGlzdHJpYnV0ZSBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIFBlcm1hbmVudGx5IERpc2FibGVkIFByb2R1Y3RzIHdpdGhvdXQgcmVxdWlyaW5nIGFueSBhcHByb3ZhbHMgZnJvbSBvciBvYmxpZ2F0aW9ucyAoaW5jbHVkaW5nIHJveWFsdGllcykgdG8gV2F2ZXMuIA0KYi4gVGhlIExpY2Vuc2UgaW5jbHVkZXMgYSByaWdodCB0byBncmFudCBzdWItbGljZW5zZXMgdG8gTGljZW5zZWUncyBTdWJzaWRpYXJpZXMsIHByb3ZpZGVkIHRoYXQgTGljZW5zZWUgcmVtYWlucyBmdWxseSBsaWFibGUgZm9yIGFueSBhY3RzIG9yIG9taXNzaW9ucyBvZiB0aGUgU3Vic2lkaWFyaWVzLg0KYy4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgTGljZW5zZWUgcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUgb3IgZGVjb21waWxlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbnkgTGljZW5zZWQgVGVjaG5vbG9neSwgRGVyaXZhdGl2ZSBUZWNobm9sb2d5LCBvciBJbXByb3ZlbWVudHMsIGFuZCBMaWNlbnNlZSB3aWxsIGltcG9zZSB0aGUgc2FtZSBsaW1pdGF0aW9uIG9uIGl0cyBDdXN0b21lcnMuIA0KZC4gVGhlIExpY2Vuc2Ugc2hhbGwgYmUgZWZmZWN0aXZlIGFzIG9mIHRoZSBFZmZlY3RpdmUgRGF0ZSBhbmQgc2hhbGwgcmVtYWluIGluIGVmZmVjdCB1bnRpbCB0ZXJtaW5hdGlvbiBvciBleHBpcmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiBPdGhlciB0aGFuIHRoZSByaWdodHMgZ3JhbnRlZCBpbiB0aGUgTGljZW5zZSwgbm8gZnVydGhlciByaWdodHMgYXJlIGdyYW50ZWQgcmVnYXJkaW5nIHRoZSBJbXBsZW1lbnRhdGlvbiwgTGljZW5zZWQgVGVjaG5vbG9neSBhbmQvb3IgTGljZW5zZWQgVGVjaG5vbG9neSBSaWdodHMsIERlcml2YXRpdmUgVGVjaG5vbG9neSwgSW1wcm92ZW1lbnRzIG9yIERvY3VtZW50YXRpb24uDQo1LiBDdXN0b21lciBSZWxhdGlvbnMNCkxpY2Vuc2VlIHNoYWxsIGhhdmUgdGhlIHNvbGUgcmVzcG9uc2liaWxpdHkgb2YgcHJvdmlkaW5nIHN1cHBvcnQgdG8gaXRzIEN1c3RvbWVycywgaW5jbHVkaW5nIGludGVyIGFsaWEsIGZvciB0aGUgVW5pdHMuDQpXYXZlcyBzaGFsbCBwcm92aWRlIHN1cHBvcnQgdG8gQXV0aG9yaXplZCBMaWNlbnNlZXMgb24gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyBhcmUgYWdyZWVkIHVwb24gYnkgV2F2ZXMgYW5kIHRoZSByZXNwZWN0aXZlIEF1dGhvcml6ZWQgTGljZW5zZWVzLg0KNi4gT3RoZXIgVGVybXMNCmEuIFByZXNzIFJlbGVhc2VzIGFuZCBQdWJsaWMgU3RhdGVtZW50cy4gIFdhdmUgd2lsbCBub3QgaXNzdWUgYW55IHByZXNzIHJlbGVhc2VzLCBtYWtlIGFueSBwdWJsaWMgc3RhdGVtZW50cyBvZiBhbnkga2luZCByZWxhdGVkIHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCBvciBvdGhlcndpc2UgdXNlIExpY2Vuc2VlknMgbmFtZSB3aXRob3V0IExpY2Vuc2VlknMgcHJpb3IgZXhwcmVzcyB3cml0dGVuIGFwcHJvdmFsLiANCmIuIE5vIE9ibGlnYXRpb24gLyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50LCBMaWNlbnNlZSBzaGFsbCBoYXZlIG5vIG9ibGlnYXRpb24gdG8gbWFya2V0LCBzZWxsIG9yIG90aGVyd2lzZSBkaXN0cmlidXRlIGFueSBpbnRlZ3JhdGVkIGNpcmN1aXQsIExpY2Vuc2VkIFByb2R1Y3Qgb3IgZGV2aWNlIGFuZC9vciBvdGhlciBwcm9kdWN0IGJhc2VkIG9uIG9yIGNvbnRhaW5pbmcgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgb3IgRGVyaXZhdGl2ZSBUZWNobm9sb2d5IHRoZXJlb2YuICAgW2FwcGVhcnMgaW4gYyBiZWxvd10NCmMuIE5vbi1FeGNsdXNpdml0eS4gTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgYnV0IHdpdGhvdXQgZGVyb2dhdGlvbiBmcm9tIExpY2Vuc2VlJ3MgY29uZmlkZW50aWFsaXR5IHVuZGVydGFraW5ncyB0b3dhcmRzIFdhdmVzLCwgbm90aGluZyBpbiB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGNvbnN0cnVlZCBhcyByZXN0cmljdGluZyBlaXRoZXIgUGFydHmScyBhYmlsaXR5IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIG1hbnVmYWN0dXJlIG9yIGRpc3RyaWJ1dGUgZm9yIGl0c2VsZiwgb3IgaGF2ZSBvdGhlcnMgYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgbWFudWZhY3R1cmUgb3IgZGlzdHJpYnV0ZSBzaW1pbGFyIHRlY2hub2xvZ3kgcGVyZm9ybWluZyB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcyB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSwgb3IgYW55IG90aGVyIHRlY2hub2xvZ3kgY29udGVtcGxhdGVkIGJ5IG9yIGNyZWF0ZWQgcHVyc3VhbnQgdG8gdGhpcyBBZ3JlZW1lbnQsIG9yIHRvIG1hcmtldCBhbmQgZGlzdHJpYnV0ZSBzdWNoIHNpbWlsYXIgdGVjaG5vbG9neSBpbiBhZGRpdGlvbiB0bywgb3IgaW4gbGlldSBvZiwgdGhlIHRlY2hub2xvZ3kgY29udGVtcGxhdGVkIGJ5IHRoaXMgQWdyZWVtZW50Lg0KZC4gTGljZW5zZWUgUmlnaHRzIGluIEJhbmtydXB0Y3kuIEFsbCByaWdodHMsIGxpY2Vuc2VzIGFuZCByZWxlYXNlcyBncmFudGVkIGJ5IFdhdmVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdG8gTGljZW5zZWUgYXJlLCBhbmQgd2lsbCBvdGhlcndpc2UgYmUgZGVlbWVkIHRvIGJlLCBmb3IgdGhlIHB1cnBvc2Ugb2YgU2VjdGlvbiAzNjUobikgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgQmFua3J1cHRjeSBDb2RlLCBhcyBhbWVuZGVkICh0aGUgk0JhbmtydXB0Y3kgQ29kZZQpLCBsaWNlbnNlcyBvZiByaWdodHMgdG8gk2ludGVsbGVjdHVhbCBwcm9wZXJ0eZQgYXMgZGVmaW5lZCB1bmRlciBTZWN0aW9uIDEwMSBvZiB0aGUgQmFua3J1cHRjeSBDb2RlLiAgTGljZW5zZWUgcmVwcmVzZW50cyB0aGF0IHRoaXMgQWdyZWVtZW50IGlzIGFuIJNleGVjdXRvcnkgY29udHJhY3SUIChpbnZvbHZpbmcgY29udGludWluZyBleGVjdXRvcnkgb2JsaWdhdGlvbnMgb2YgV2F2ZXMgdG8gcHJvdmlkZSBsaWNlbnNlcyBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgYW5kIGNvbnRpbnVpbmcgZXhlY3V0b3J5IG9ibGlnYXRpb25zIG9mIHRoZSByZXNwZWN0aXZlIHBhcnRpZXMgdG8gcGVyZm9ybSBvdGhlciBvYmxpZ2F0aW9ucykgdW5kZXIgd2hpY2ggV2F2ZXMgaXMgYSCTbGljZW5zb3Igb2YgYSByaWdodCB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHmUIGFzIHByb3ZpZGVkIGluIFNlY3Rpb26gMzY1KG4pLiBJZiB0aGlzIEFncmVlbWVudCBpcyB0ZXJtaW5hdGVkIG9yIHJlamVjdGVkIGJ5IGEgcGFydHkgb3IgaXRzIHJlY2VpdmVyIG9yIHRydXN0ZWUgdW5kZXIgYXBwbGljYWJsZSBiYW5rcnVwdGN5IGxhd3MsIEludGVsIGhlcmVieSBwcmVzZW50bHkgZWxlY3RzLCBwdXJzdWFudCB0byBTZWN0aW9uoDM2NShuKSBvciBhbnkgc2ltaWxhciBwcm92aXNpb25zIHVuZGVyIGFwcGxpY2FibGUgZm9yZWlnbiBsYXcsIHRvIHJldGFpbiBhbGwgcmlnaHRzIGdyYW50ZWQgdG8gSW50ZWwgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LCBhbmQgbm8gZnVydGhlciBlbGVjdGlvbiBvciBldmlkZW5jZSB3aWxsIGJlIHJlcXVpcmVkLiBUaGUgUGFydGllcyBoZXJldG8gYWdyZWUgdGhhdCBMaWNlbnNlZSBhcyBsaWNlbnNlZSBvZiByaWdodHMgZ3JhbnRlZCBpbiB0aGlzIEFncmVlbWVudCB3aWxsIHJldGFpbiBhbmQgbWF5IGZ1bGx5IGV4ZXJjaXNlIGFsbCByaWdodHMgYW5kIGVsZWN0aW9ucyB1bmRlciB0aGUgQmFua3J1cHRjeSBDb2RlLiAgVGhlIFBhcnRpZXMgZnVydGhlciBhZ3JlZSB0aGF0LCBpbiB0aGUgZXZlbnQgdGhhdCBhbnkgcHJvY2VlZGluZyB3aWxsIGJlIGluc3RpdHV0ZWQgYnkgb3IgYWdhaW5zdCBXYXZlcyBzZWVraW5nIHRvIGFkanVkaWNhdGUgaXQgYXMgYmFua3J1cHQgb3IgaW5zb2x2ZW50LCBvciBzZWVraW5nIGxpcXVpZGF0aW9uLCB3aW5kaW5nIHVwLCByZW9yZ2FuaXphdGlvbiwgYXJyYW5nZW1lbnQsIGFkanVzdG1lbnQsIHByb3RlY3Rpb24sIHJlbGllZiBvciBjb21wb3NpdGlvbiBvZiBpdCBvciBpdHMgZGVidHMgdW5kZXIgYW55IGxhdyByZWxhdGluZyB0byBiYW5rcnVwdGN5LCBpbnNvbHZlbmN5LCBvciByZW9yZ2FuaXphdGlvbiBvciByZWxpZWYgb2YgZGVidG9ycywgb3Igc2Vla2luZyBhbiBlbnRyeSBvZiBhbiBvcmRlciBmb3IgcmVsaWVmIG9yIHRoZSBhcHBvaW50bWVudCBvZiBhIHJlY2VpdmVyLCB0cnVzdGVlIG9yIG90aGVyIHNpbWlsYXIgb2ZmaWNpYWwgZm9yIGl0IG9yIGFueSBzdWJzdGFudGlhbCBwYXJ0IG9mIGl0cyBwcm9wZXJ0eSBvciBpdCB3aWxsIHRha2UgYW55IGFjdGlvbiB0byBhdXRob3JpemUgYW55IG9mIHRoZSBmb3JlZ29pbmcgYWN0aW9ucywgTGljZW5zZWUgd2lsbCBoYXZlIHRoZSByaWdodCB0byByZXRhaW4gYW5kIGVuZm9yY2UgaXRzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgcHJvdmlkZWQgdGhhdCBMaWNlbnNlZSByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LiANCjcuIFdhcnJhbnR5LCBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBhbmQgSW5kZW1uaWZpY2F0aW9uDQo3LjEgTElNSVRFRCBXQVJSQU5USUVTDQpXYXZlcyB3YXJyYW50cyB0aGUgZm9sbG93aW5nOg0KaSkgVG8gV2F2ZXOSIGtub3dsZWRnZSwgbm9uZSBvZiB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSBzdXBwbGllZCB0byBMaWNlbnNlZSB1bmRlciB0aGlzIEFncmVlbWVudCBpbmZyaW5nZXMgdXBvbiBvciBtaXNhcHByb3ByaWF0ZXMgYW55IHRoaXJkIHBhcnR5knMgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0Lg0KaWkpIFdhdmVzIGlzIHVuYXdhcmUgb2YgYW55IHBlbmRpbmcgY2xhaW1zIG9yIGFjdGlvbnMgY29tbWVuY2VkIGFnYWluc3QgV2F2ZXMgYnkgYW55IHRoaXJkIHBhcnR5LiAgV2F2ZXMgd2lsbCBhbGVydCBMaWNlbnNlZSBhcyBzb29uIGFzIGZlYXNpYmx5IHBvc3NpYmxlLCBpZiBhbnkgbGVnYWwgYWN0aW9ucyBhcmUgY29tbWVuY2VkIGFnYWluc3QgV2F2ZXMgYnkgYSB0aGlyZCBwYXJ0eSwgb3IgZGVjaWRlZCBhZ2FpbnN0IFdhdmVzLCB0aGF0IGNvdWxkIHJlYXNvbmFibHkgYmUgZXhwZWN0ZWQgdG8gYWZmZWN0IFdhdmVzkiBhYmlsaXR5IHRvIGZ1bGZpbGwgaXRzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50Lg0KaWlpKSBXYXZlcyB3aWxsIG5vdCBpbmNsdWRlIGFueSB0aGlyZCBwYXJ0eSB0ZWNobm9sb2d5IG9yIG1hdGVyaWFscyBpbiB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSwgdW5sZXNzIGV4cHJlc3NseSBwcm92aWRlZCBoZXJlaW4gb3IgdXBvbiBMaWNlbnNlZZJzIHByaW9yIHdyaXR0ZW4gYXBwcm92YWwuDQppdikgT3RoZXIgdGhhbiBpbiB0aGUgTGljZW5zZWQgU29mdHdhcmUsIFdhdmVzIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgZG9lcyBub3QgaW5jbHVkZSBhbnkgT3BlbiBTb3VyY2UgTWF0ZXJpYWxzIG9yIG90aGVyIG1hdGVyaWFsIHN1YmplY3QgdG8gc2ltaWxhciBsaWNlbnNlIHRlcm1zLiAgV2F2ZXMgZnVydGhlciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0IG90aGVyIHRoYW4gZm9yIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSwgTGljZW5zZWWScyB1c2Ugb2YgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3ksIGNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIHdpbGwgbm90IHN1YmplY3QgYW55IHRlY2hub2xvZ3ksIHNvZnR3YXJlLCBvciBMaWNlbnNlZCBQcm9kdWN0LCAob3RoZXIgdGhhbiBhbiBPcGVuIFNvdXJjZSBSZWxlYXNlKSB0byBPcGVuIFNvdXJjZSBNYXRlcmlhbHMgbGljZW5zZSB0ZXJtcy4gDQo3LjIgIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5Lg0KYS4gVEhFIEFHR1JFR0FURSBMSUFCSUxJVFkgRk9SIEVBQ0ggUEFSVFkgQVJJU0lORyBPVVQgT0YgVEhJUyBBR1JFRU1FTlQsIElOQ0xVRElORyBBTlkgSU5ERU1OSUZJQ0FUSU9OIENMQUlNUywgSE9XRVZFUiBDQVVTRUQsIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlQsIFNIQUxMIEJFIExJTUlURUQgVE8gRElSRUNUIERBTUFHRVMgTk9UIFRPIEVYQ0VFRCBVUyQgNTAwLDAwMCAoRklWRSBIVU5EUkVEIFRIT1VTQU5EIFVTIERPTExBUlMpLg0KYi4gSU4gTk8gRVZFTlQgV0lMTCBFSVRIRVIgUEFSVFkgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgVE9SVCBEQU1BR0VTIE9GIEFOWSBOQVRVUkUgT1IgS0lORCBXSEFUU09FVkVSIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSEVTRSBMSU1JVEFUSU9OUyBXSUxMIEFQUExZIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBUSEUgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gDQpjLiBJbmFzbXVjaCBhcyBzb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgYXMgc2V0IGZvcnRoIGluIHRoaXMgU2VjdGlvbiA3LCB0aGUgZnVsbCBleHRlbnQgb2YgYWJvdmUgbGltaXRhdGlvbnMgbWF5IG5vdCBhcHBseSwgYnV0IHRoZXkgc2hhbGwgYXBwbHkgaW5zb2ZhciBhcyB0aGUgbGF3IHNoYWxsIGFsbG93LiANCjcuMyBXYXZlcyBJbmRlbW5pdHkuIA0KYS4gU3ViamVjdCB0byB0aGUgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgYWJvdmU6IGEpIFdhdmVzIHNoYWxsIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIHRoZSBMaWNlbnNlZSBoYXJtbGVzcyBmcm9tIGFsbCB0aGlyZCBwYXJ0eSBjbGFpbXMgdG8gdGhlIGV4dGVudCB0aGF0IHN1Y2ggY2xhaW1zIGFyZSBiYXNlZCBvbiBhbiBhbGxlZ2F0aW9uIHRoYXQgYW55IG9mIHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5IGluZnJpbmdlcyB0aGUgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlIG1hcmssIHRyYWRlIHNlY3JldCBvciBvdGhlciBwcm9wcmlldGFyeSByaWdodCBvZiBhIHRoaXJkIHBhcnR5IChlYWNoIGluIHRoaXMgc2VjdGlvbjogYSCTQ2xhaW2UKSwgYW5kOyBiKSBzaGFsbCBwYXkgZGFtYWdlcyAoaXJyZXNwZWN0aXZlIG9mIGhvdyBjaGFyYWN0ZXJpemVkKSBhd2FyZGVkIHRvIGEgdGhpcmQgcGFydHkgYnkgYSBjb3VydCBvciBwYWlkIGluIHNldHRsZW1lbnQgdG8gYSB0aGlyZCBwYXJ0eSByZXN1bHRpbmcgZnJvbSBzdWNoIENsYWltLCBhbmQgaW5jbHVkaW5nIGFsbCByZWFzb25hYmxlIGNvc3RzIGFuZCBleHBlbnNlcyAoaW5jbHVkaW5nIHJlYXNvbmFibGUgYXR0b3JuZXmScyBmZWVzKSBvZiB0aGUgTGljZW5zZWUgYXJpc2luZyBmcm9tIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIENsYWltLCBwcm92aWRlZCBob3dldmVyIHRoYXQgV2F2ZXMgc2hhbGwgbm90IGJlIG9ibGlnYXRlZCB0byBkZWZlbmQgYWdhaW5zdCwgaW5kZW1uaWZ5IG9yIGJlIGxpYWJsZSBmb3IgQ2xhaW1zIHVuZGVyIHRoaXMgc2VjdGlvbiB0byB0aGUgZXh0ZW50IHRoYXQgdGhlIGFsbGVnZWQgaW5mcmluZ2VtZW50OiAoYSkgYXJpc2VzIG91dCBvZiBtb2RpZmljYXRpb24gdG8gdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgYnkgYW55b25lIG90aGVyIHRoYW4gV2F2ZXMgYW5kIHRoZXJlIHdvdWxkIGJlIG5vIENsYWltIGJ1dCBmb3IgdGhlIG1vZGlmaWNhdGlvbjsgb3IgKGIpIGFyaXNlcyBvdXQgb2YgdGhlIGNvbWJpbmF0aW9uIG9yIGludGVncmF0aW9uIG9mIHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5IHdpdGggYW55IG90aGVyIHByb2R1Y3RzLCBwcm9jZXNzZXMsIGVxdWlwbWVudCBvciBtYXRlcmlhbHMgYW5kIHN1Y2ggaW5mcmluZ2VtZW50IHdvdWxkIGhhdmUgYmVlbiBhdm9pZGVkIGluIHRoZSBhYnNlbmNlIG9mIHN1Y2ggY29tYmluYXRpb24gb3IgaW50ZWdyYXRpb247IChjKSBmYWxscyB1bmRlciB0aGUgTGljZW5zZWUncyBpbmRlbW5pdHkgaW4gdGhlIHNlY3Rpb24gYmVsb3cuICANCmIuIEluIGFkZGl0aW9uIHRvIFdhdmVzJyBpbmRlbW5pZmljYXRpb24gb2JsaWdhdGlvbnMgbGlzdGVkIGFib3ZlLCBpbiB0aGUgZXZlbnQgdGhlIHVzZSBvZiBhbnkgb2YgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgaXMgZW5qb2luZWQsIFdhdmVzIHNoYWxsOiAoaSkgcmVwbGFjZSBvciBtb2RpZnkgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgdG8gYmUgbm9uLWluZnJpbmdpbmcgd2hpY2ggaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQ7IG9yIChpaSkgb2J0YWluIGZvciB0aGUgTGljZW5zZWUgYSBsaWNlbnNlIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBpbmZyaW5naW5nIExpY2Vuc2VkIFRlY2hub2xvZ3k7IG9yIChpaWkpIGlmIGluIFdhdmVzJyBzb2xlIGRpc2NyZXRpb24sIGl0IGlzIG5vdCBmZWFzaWJsZSB0byBhY3QgdW5kZXIgc3ViLWNsYXVzZSAoaSkgb3IgKGlpKSwgc2hhbGwgYmUgZW50aXRsZWQgdG8gdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGFzIHNvbGUgcmVtZWR5LiANCmMuIExpY2Vuc2VlJ3MgSW5kZW1uaXR5LiAgU3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgYWJvdmUsIExpY2Vuc2VlIHdpbGwgaW5kZW1uaWZ5IGFuZCBob2xkIFdhdmVzLCBpdHMgb2ZmaWNlcnMgYW5kIGRpcmVjdG9ycyBoYXJtbGVzcyAoaW5jbHVkaW5nIHJlYXNvbmFibGUgYXR0b3JuZXlzkiwgY29uc3VsdGFudHOSIGFuZCBvdGhlciBwcm9mZXNzaW9uYWwgZmVlcykgYWdhaW5zdCBhbGwgY2xhaW1zLCBhY3Rpb25zIG9yIGRlbWFuZHMgYXJpc2luZyBvdXQgb2YgYW55IHNhbGUsIGRpc3RyaWJ1dGlvbiBvciBvdGhlciBkaXNwb3NpdGlvbiBvZiBVbml0cyBvciBJbXBsZW1lbnRhdGlvbnMgYnkgTGljZW5zZWUgb3IgaXRzIEN1c3RvbWVycywgb3IgYW55IG90aGVyIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCBieSBMaWNlbnNlZSwgaXRzIG9mZmljZXJzIGFuZC9vciBkaXJlY3RvcnMuIA0KZC4gVGhlIHBhcnRpZXMnIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgc2VjdGlvbiBhcmUgY29uZGl0aW9uZWQgdXBvbiB0aGUgZm9sbG93aW5nOg0KKEEpIEluZGVtbmlmaWVkIHBhcnR5IG5vdGlmaWVzIGluZGVtbmlmeWluZyBwYXJ0eSBpbiB3cml0aW5nIHByb21wdGx5IHVwb24gbGVhcm5pbmcgb2YgYSBjbGFpbTsNCihCKSBJbmRlbW5pZnlpbmcgcGFydHkgaGFzIHNvbGUgY29udHJvbCBvZiB0aGUgZGVmZW5zZSBhbmQgYWxsIHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMsIHByb3ZpZGVkIHRoYXQgaW5kZW1uaWZpZWQgcGFydHkgaGFzIGEgcmlnaHQgdG8gcGFydGljaXBhdGUgaW4gdGhlIGRlZmVuc2Ugb2YgYW55IGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZTsgDQooQykgSW5kZW1uaWZpZWQgcGFydHkgcHJvdmlkZXMgaW5kZW1uaWZ5aW5nIHBhcnR5IHdpdGggc3VjaCBhc3Npc3RhbmNlIGFzIEluZGVtbmlmeWluZyBwYXJ0eSByZWFzb25hYmx5IHJlcXVlc3RzIHRvIHBlcmZvcm0gdGhlIGFib3ZlLg0KKEQpIEluZGVtbmlmeWluZyBwYXJ0eSBtYXkgbm90IHNldHRsZSBhbnkgY2xhaW0gd2l0aG91dCBpbmRlbW5pZmllZCBwYXJ0eSdzIHByaW9yIHdyaXR0ZW4gYXBwcm92YWwgaWYgc3VjaCBzZXR0bGVtZW50IHJlcXVpcmVzIHRoZSBpbmRlbW5pZmllZCBwYXJ0eSB0byBhZG1pdCBhbnkgbGlhYmlsaXR5IG9yIHdyb25nZG9pbmcuIA0KOC4gICBOb24tRXhjbHVzaXZpdHkNClRoaXMgQWdyZWVtZW50IG9ubHkgY292ZXJzIHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5IG9yIEltcGxlbWVudGF0aW9ucyBzcGVjaWZpZWQgaW4gQXBwZW5kaXggQS4gIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBjb25zdHJ1ZWQgdG8gZ3JhbnQgdG8gTGljZW5zZWUgYW55IHJpZ2h0cyBpbiBvciB0byBhbnkgcHJlc2VudCBvciBmdXR1cmUgcHJvZHVjdHMgb2YgV2F2ZXMsIHdoZXRoZXIgb3Igbm90IHNpbWlsYXIgdG8gdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgb3IgSW1wbGVtZW50YXRpb25zLg0KW3JlcGVhdCBvZiBjbGF1c2UgYWJvdmVdOS4gQ29uZmlkZW50aWFsaXR5IA0KYS4gQWxsIGNvbmZpZGVudGlhbCBvciBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbiBhbmQgbWF0ZXJpYWxzIGRpc2Nsb3NlZCB0byB0aGUgb3RoZXIgUGFydHkgaGVyZXVuZGVyIHNoYWxsIGJlIGRpc2Nsb3NlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGUgQ29ycG9yYXRlIE5vbi1EaXNjbG9zdXJlIEFncmVlbWVudCAok0NOREGUKSwgTm8uIDgxODY4NTAsIGVudGVyZWQgaW50byBiZXR3ZWVuIHRoZSBwYXJ0aWVzIG9uIDMwIEF1Z3VzdCAyMDA2LiAgRWFjaCBQYXJ0eSBhZ3JlZXMgdG8gbWFpbnRhaW4gc3VjaCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBhbmQgdGhlIENOREEgYW5kIGFueSBvdGhlciBhcHBsaWNhYmxlLCBzZXBhcmF0ZSBub24tZGlzY2xvc3VyZSBhZ3JlZW1lbnQocykgYmV0d2VlbiBXYXZlcyBhbmQgTGljZW5zZWUuICBMaWNlbnNlZSBzaGFsbCBub3QgcmVwcm9kdWNlLCBkdXBsaWNhdGUsIGNvcHkgb3Igb3RoZXJ3aXNlIGRpc2Nsb3NlLCBkaXN0cmlidXRlIG9yIGRpc3NlbWluYXRlIGFueSBvZiB0aGUgSW1wbGVtZW50YXRpb25zIHByb3ZpZGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbiBhbnkgbWVkaWEsIG90aGVyIHRoYW4gYXMgcHJvdmlkZWQgZm9yIGhlcmVpbiBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LiANCmIuIFRoZSB0ZXJtcyBvZiBjb25maWRlbnRpYWxpdHkgaW5jbHVkZWQgb3IgcmVmZXJlbmNlZCBieSB0aGlzIEFncmVlbWVudCBzaGFsbCBub3QgYmUgY29uc3RydWVkIHRvIGxpbWl0IGVpdGhlciBQYXJ0eZJzIHJpZ2h0IHRvIGluZGVwZW5kZW50bHkgZGV2ZWxvcCBvciBhY3F1aXJlIHByb2R1Y3RzIHdpdGhvdXQgdXNlIG9mIHRoZSBvdGhlciBQYXJ0eZJzIGNvbmZpZGVudGlhbCBvciBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbiBhbmQgbWF0ZXJpYWxzIGRpc2Nsb3NlZCBoZXJldW5kZXIuIA0KYy4gQ29uZmlkZW50aWFsaXR5IG9mIEFncmVlbWVudC4gIFRoZSBwYXJ0aWVzIGhlcmV0byBzaGFsbCBrZWVwIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBjb25maWRlbnRpYWwsIGJ1dCBtYXkgZGlzY2xvc2UgdGhlc2UgdGVybXM6DQogICAgICAgYSkgd2l0aCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSBvdGhlciBQYXJ0eTsNCiAgICAgICBiKSBpbiByZXNwb25zZSB0byBhIHZhbGlkIG9yZGVyIG9mIGEgY291cnQgb3Igb3RoZXIgZ292ZXJubWVudGFsIGJvZHksIG9yIGlmIG90aGVyd2lzZSByZXF1aXJlZCB0byBiZSBkaXNjbG9zZWQgYnkgbGF3OyBwcm92aWRlZCwgaG93ZXZlciwgdGhlIGRpc2Nsb3NpbmcgUGFydHkgc2hhbGwgZmlyc3QgZ2l2ZSwgaW5zb2ZhciBhcyBpdCBpcyBhYmxlLCBhdCBsZWFzdCB0ZW4gKDEwKSBkYXlzIGFkdmFuY2VkIHdyaXR0ZW4gbm90aWNlIHRvIHRoZSBkaXNjbG9zaW5nIFBhcnR5IHNvIHRoYXQgdGhlIHBhcnRpZXMgbWF5IHNlZWsgYW4gYXBwcm9wcmlhdGUgcHJvdGVjdGl2ZSBvcmRlcjsgb3INCiAgICAgIGMpIGluIGNvbmZpZGVuY2UgdG8gbGVnYWwgY291bnNlbCwgYWNjb3VudGFudHMsIGJhbmtzLCBwb3RlbnRpYWwgYWNxdWlyZXJzIGFuZCBmaW5hbmNpbmcgc291cmNlcyBhbmQgdGhlaXIgYWR2aXNvcnMgc29sZWx5IGluIGNvbm5lY3Rpb24gd2l0aCBjb21wbHlpbmcgd2l0aCBib25hIGZpZGUgdHJhbnNhY3Rpb25zLg0KMTAuIFRlcm1pbmF0aW9uDQphLiBVbmxlc3Mgb3RoZXJ3aXNlIGVhcmxpZXIgdGVybWluYXRlZCBhcyBwcm92aWRlZCBmb3IgaW4gdGhpcyBTZWN0aW9uIDEwLCB0aGlzIEFncmVlbWVudCBzaGFsbCBiZWNvbWUgZWZmZWN0aXZlIGFzIG9mIHRoZSBFZmZlY3RpdmUgRGF0ZSBhbmQgc2hhbGwgY29udGludWUgZm9yIGEgcGVyaW9kIG9mIHR3byAoMikgeWVhcnMgKHRoZSCTSW5pdGlhbCBUZXJtlCkuICBGb2xsb3dpbmcgdGhlIEluaXRpYWwgVGVybSwgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgcmVuZXcgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBJbml0aWFsIFRlcm0gYW5kIGVhY2ggc3Vic2VxdWVudCBvbmUgKDEpIHllYXIgYW5uaXZlcnNhcnkgKGVhY2gsIGEgk1JlbmV3YWwgVGVybZQpLCBleGNlcHQgdGhhdCBzdWNoIGF1dG9tYXRpYyByZW5ld2FsIHNoYWxsIG5vdCB0YWtlIHBsYWNlIGlmIGVpdGhlciBQYXJ0eSBwcm92aWRlZCB3cml0dGVuIG5vdGljZSBvZiBpdHMgaW50ZW50IG5vdCB0byByZW5ldyB0aGlzIEFncmVlbWVudCBhdCBsZWFzdCB0aGlydHkgKDMwKSBkYXlzIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBJbml0aWFsIFRlcm0gb3IgYSBSZW5ld2FsIFRlcm0uIFRoZSBJbml0aWFsIFRlcm0gYW5kIGFueSBSZW5ld2FsIFRlcm1zIGFyZSBjb2xsZWN0aXZlbHkgcmVmZXJyZWQgdG8gaW4gdGhpcyBBZ3JlZW1lbnQgYXMgdGhlIJNUZXJtlC4gDQoNCmIuIExpY2Vuc2VlIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgZm9yIGFueSByZWFzb24gdXBvbiB0aGlydHkgKDMwKSBkYXlzkiBwcmlvciB3cml0dGVuIG5vdGljZS4NCmMuIEVpdGhlciBQYXJ0eSBzaGFsbCBoYXZlIHRoZSByaWdodCB0byB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgYnkgZ2l2aW5nIHdyaXR0ZW4gbm90aWNlIG9mIHRlcm1pbmF0aW9uIHRvIHRoZSBvdGhlciBQYXJ0eSBhdCBhbnkgdGltZSB1cG9uIG9yIGFmdGVyOiAxKSB0aGUgZmlsaW5nIGJ5IHRoZSBvdGhlciBQYXJ0eSBvZiBhIHBldGl0aW9uIGluIGJhbmtydXB0Y3kgb3IgaW5zb2x2ZW5jeTsgMikgYW55IGFkanVkaWNhdGlvbiB0aGF0IHRoZSBvdGhlciBQYXJ0eSBpcyBiYW5rcnVwdCBvciBpbnNvbHZlbnQ7IDMpIHRoZSBmaWxpbmcgYnkgdGhlIG90aGVyIFBhcnR5IHVuZGVyIGFueSBsYXcgcmVsYXRpbmcgdG8gYmFua3J1cHRjeSBvciBpbnNvbHZlbmN5OyA0KSB0aGUgYXBwb2ludG1lbnQgb2YgYSByZWNlaXZlciBmb3IgYWxsIG9yIHN1YnN0YW50aWFsbHkgYWxsIG9mIHRoZSBwcm9wZXJ0eSBvZiB0aGUgb3RoZXIgUGFydHk7IDUpIHRoZSBtYWtpbmcgYnkgdGhlIG90aGVyIFBhcnR5IG9mIGFueSBhc3NpZ25tZW50IG9yIGF0dGVtcHRlZCBhc3NpZ25tZW50IG9mIHRoaXMgQWdyZWVtZW50IGZvciB0aGUgYmVuZWZpdCBvZiBjcmVkaXRvcnM7IG9yIDYpIHRoZSBpbnN0aXR1dGlvbiBvZiBhbnkgcHJvY2VlZGluZ3MgZm9yIHRoZSBsaXF1aWRhdGlvbiBvciB3aW5kaW5nIHVwIG9mIHRoZSBvdGhlciBQYXJ0eZJzIGJ1c2luZXNzIG9yIGZvciB0aGUgdGVybWluYXRpb24gb2YgaXRzIGNvcnBvcmF0ZSBjaGFydGVyOyA3KSBhIGJyZWFjaCBieSB0aGUgb3RoZXIgUGFydHkgd2hpY2ggaXMgaW5jYXBhYmxlIG9mIGJlaW5nIGN1cmVkIHdpdGhpbiB0aGUgdGltZSBsaW1pdGF0aW9uIGFib3ZlLiBVcG9uIHRoZSBnaXZpbmcgb2Ygc3VjaCBub3RpY2Ugb2YgY2FuY2VsbGF0aW9uLCB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSB0ZXJtaW5hdGVkIGZvcnRod2l0aC4NCmQuIEluIHRoZSBldmVudCB0aGF0IHRoaXMgQWdyZWVtZW50IGlzIHRlcm1pbmF0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIFNlY3Rpb24gMTAuYS4gb3IgMTAuYi4gYWJvdmUsIExpY2Vuc2VlIHNoYWxsIGJlIHByb2hpYml0ZWQgZnJvbSBlbmdhZ2luZyBpbiBhbnkgbmV3IGFncmVlbWVudCB3aXRoIEN1c3RvbWVycyBmb3IgdGhlIHByb3Zpc2lvbiBvZiBMaWNlbnNlZCBQcm9kdWN0cywgYnV0IHNoYWxsIGJlIGVudGl0bGVkLCBmb3IgYSBwZXJpb2Qgb2YgMzYgbW9udGhzIGZvbGxvd2luZyB0ZXJtaW5hdGlvbiwgdG8gY29udGludWUgZGlzdHJpYnV0aW5nIGFueSBhbHJlYWR5IG1hbnVmYWN0dXJlZCBMaWNlbnNlZCBQcm9kdWN0cyBhbmQgdG8gbWFudWZhY3R1cmUgTGljZW5zZWQgUHJvZHVjdHMgdG8gc3VwcGx5IGFueSBwcmUtb3JkZXJlZCBMaWNlbnNlZCBQcm9kdWN0cy4gRm9sbG93aW5nIHNhaWQgMzYgbW9udGggcGVyaW9kLCBMaWNlbnNlZSBzaGFsbCBiZSBwcm9oaWJpdGVkIGZyb20gYWN0aXZhdGluZyB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSBvbiBleGlzdGluZyBVbml0cyBhbmQgc2hhbGwgaW1tZWRpYXRlbHkgZGlzY29udGludWUgdGhlIHVzZSBvZiB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSBhbmQgSW1wbGVtZW50YXRpb25zLCBhbmQgYW55IGFuZCBhbGwgcG9ydGlvbnMgdGhlcmVvZi4gDQplLiBPdGhlciB0aGFuIGFzIG5lY2Vzc2FyeSB0byBtZWV0IHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMTAuZC4gYWJvdmUsIExpY2Vuc2VlIHNoYWxsLCBvbiB0aGUgZGF0ZSBvZiBzdWNoIHRlcm1pbmF0aW9uLCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSB0aGUgdXNlIG9mIHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5IGFuZCBJbXBsZW1lbnRhdGlvbnMsIGFuZCBhbnkgYW5kIGFsbCBwb3J0aW9ucyB0aGVyZW9mLiBXaXRoaW4gdG8gdGhpcnR5ICgzMCkgZGF5cyBhZnRlciB0aGUgZGF0ZSBvZiB0ZXJtaW5hdGlvbiwgTGljZW5zZWUgc2hhbGwgZGVsaXZlciB0byBXYXZlcyBvciB0byBXYXZlc5IgYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZSwgYWxsIGFzcGVjdHMgb2YgdGhlIExpY2Vuc2VkIFRlY2hub2xvZ3kgaW5jbHVkaW5nIGFsbCBjb3BpZXMgYW5kIHJlbGF0ZWQgbWF0ZXJpYWxzLiBBdCBXYXZlc5Igb3B0aW9uLCBhbGwgY29waWVzIG9mIHRoZSBMaWNlbnNlZCBUZWNobm9sb2d5IGFuZC9vciByZWxhdGVkIG1hdGVyaWFscyBtYXkgYmUgZGVzdHJveWVkIGJ5IExpY2Vuc2VlLCB3aG8gc2hhbGwgdGhlbiBwcm92aWRlIFdhdmVzIHdpdGggd3JpdHRlbiBjZXJ0aWZpY2F0aW9uIG9mIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIHByb3Zpc2lvbi4gDQpmLiBUZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBub3QgYWJyaWRnZSB0aGUgcmlnaHQgb2YgdXNlIG9uIHRoZSBwYXJ0IG9mIEN1c3RvbWVycywgd2hvIGhhdmUgcmlnaHRmdWxseSByZWNlaXZlZCB0aGUgTGljZW5zZWQgUHJvZHVjdHMgYXMgcGVybWl0dGVkIGJ5IHRoaXMgQWdyZWVtZW50Lg0KZy4gTm8gZmFpbHVyZSBvciBkZWxheSBvbiB0aGUgcGFydCBvZiBlaXRoZXIgUGFydHkgaW4gZXhlcmNpc2luZyBpdHMgcmlnaHQgb2YgdGVybWluYXRpb24gaGVyZXVuZGVyIGZvciBhbnkgb25lIG9yIG1vcmUgY2F1c2VzIHNoYWxsIGJlIGNvbnN0cnVlZCB0byBwcmVqdWRpY2UgaXRzIHJpZ2h0IG9mIHRlcm1pbmF0aW9uIGZvciBzdWNoIG9yIGZvciBhbnkgb3RoZXIgb3Igc3Vic2VxdWVudCBjYXVzZS4NCmguIFNlY3Rpb25zIDEsIDMsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIgYW5kIDEzIGFuZCBhbnkgb3RoZXIgc2VjdGlvbnMgd2hpY2ggYnkgdGhlaXIgbmF0dXJlIHNob3VsZCBzdXJ2aXZlLCB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuDQoxMS4gSnVyaXNkaWN0aW9uIGFuZCBHb3Zlcm5pbmcgTGF3IA0KYS4gVGhpcyBBZ3JlZW1lbnQgc2hhbGwgaW4gYWxsIHJlc3BlY3RzIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBEZWxhd2FyZSB3aXRob3V0IHJlZmVyZW5jZSB0byBpdHMgcHJpbmNpcGxlcyBvZiBjb25mbGljdHMgb2YgbGF3cy4gIFRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGJlIGdvdmVybmVkIGJ5IHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9mIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcywgdGhlIGFwcGxpY2F0aW9uIG9mIHdoaWNoIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gIEFsbCBkaXNwdXRlcyBhbmQgbGl0aWdhdGlvbiByZWdhcmRpbmcgdGhpcyBBZ3JlZW1lbnQgYW5kIG1hdHRlcnMgY29ubmVjdGVkIHdpdGggaXRzIHBlcmZvcm1hbmNlIHdpbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgQ2hhbmNlcnkgQ291cnQgb2YgdGhlIHN0YXRlIG9mIERlbGF3YXJlIG9yIG9mIHRoZSBGZWRlcmFsIGNvdXJ0cyBzaXR0aW5nIHRoZXJlaW4uIA0KYi4JRGlzcHV0ZXMuICBBbGwgZGlzcHV0ZXMgYXJpc2luZyBkaXJlY3RseSB1bmRlciB0aGUgZXhwcmVzcyB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBvciByZWxhdGluZyB0byB0aGUgdGVybWluYXRpb24gdGhlcmVvZiBzaGFsbCBiZSByZXNvbHZlZCBhcyBmb2xsb3dzLiAgRmlyc3QsIHRoZSBzZW5pb3IgbWFuYWdlbWVudCBvZiBib3RoIHBhcnRpZXMgc2hhbGwgbWVldCB0byBhdHRlbXB0IHRvIHJlc29sdmUgc3VjaCBkaXNwdXRlcy4gIElmIHRoZSBzZW5pb3IgbWFuYWdlbWVudCBjYW5ub3QgcmVzb2x2ZSB0aGUgZGlzcHV0ZXMsIGVpdGhlciBQYXJ0eSBtYXkgbWFrZSBhIHdyaXR0ZW4gZGVtYW5kIGZvciBmb3JtYWwgZGlzcHV0ZSByZXNvbHV0aW9uLiAgV2l0aGluIHRoaXJ0eSAoMzApIGRheXMgYWZ0ZXIgc3VjaCB3cml0dGVuIGRlbWFuZCwgdGhlIHBhcnRpZXMgYWdyZWUgdG8gbWVldCBmb3Igb25lIGRheSB3aXRoIGFuIGltcGFydGlhbCBtZWRpYXRvciBhbmQgY29uc2lkZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGFsdGVybmF0aXZlcyBvdGhlciB0aGFuIGxpdGlnYXRpb24uICBJZiBhbiBhbHRlcm5hdGl2ZSBtZXRob2Qgb2YgZGlzcHV0ZSByZXNvbHV0aW9uIGlzIG5vdCBhZ3JlZWQgdXBvbiB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBhZnRlciB0aGUgb25lLWRheSBtZWRpYXRpb24sIGVpdGhlciBQYXJ0eSBtYXkgYmVnaW4gbGl0aWdhdGlvbiBwcm9jZWVkaW5ncy4gIEFsbCBwcm9jZWVkaW5ncywgZmlsaW5ncywgbmVnb3RpYXRpb25zLCBzZXR0bGVtZW50cywgYXdhcmRzLCBydWxpbmdzIG9yIG90aGVyIGluZm9ybWF0aW9uIGxlYXJuZWQgb3IgZXhjaGFuZ2VkIHJlbGF0ZWQgdG8gb3IgYXJpc2luZyBvdXQgb2YgdGhlIGRpc3B1dGUgb3IgYW55IGFyYml0cmF0aW9uICh1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCB1cG9uIGFzIG5vdCBiZWluZyBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24pIHNoYWxsIGJlIHRyZWF0ZWQgYXMgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHVuZGVyIHRoZSBDTkRBIGJ5IGJvdGggcGFydGllcy4gIER1cmluZyB0aGUgcGVyaW9kIG9mIHN1Ym1pc3Npb24gdG8gbWVkaWF0aW9uIGFuZCB0aGVyZWFmdGVyIHVudGlsIHRoZSBncmFudGluZyBvZiBhbiBhd2FyZCwgdGhlIHBhcnRpZXMgc2hhbGwsIGV4Y2VwdCBpbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24sIGNvbnRpbnVlIHRvIHBlcmZvcm0gYWxsIHRoZWlyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IHdpdGhvdXQgcHJlanVkaWNlIHRvIGEgZmluYWwgYWRqdXN0bWVudCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHNhaWQgYXdhcmQuICBOb3RoaW5nIGluIHRoaXMgU2VjdGlvbiBzaGFsbCBhZmZlY3QgYSBQYXJ0eZJzIHJpZ2h0IHRvIHNlZWsgaW1tZWRpYXRlIG9yIHByZWxpbWluYXJ5IGVxdWl0YWJsZSByZWxpZWYgbm90IG90aGVyd2lzZSBwcm9oaWJpdGVkIGJ5IHRoaXMgQWdyZWVtZW50Lg0KMTIuIE1pc2NlbGxhbmVvdXMNCmEuIE5vIGFtZW5kbWVudCBvciBtb2RpZmljYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgdmFsaWQgb3IgYmluZGluZyB1cG9uIHRoZSBQYXJ0aWVzIHVubGVzcyBtYWRlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlcyBvZiB0aGUgUGFydGllcy4gIFRoaXMgQWdyZWVtZW50IGFuZCB0aGUgQXBwZW5kaWNlcyBhdHRhY2hlZCBoZXJldG8gYW5kIHRoZSByZWZlcmVuY2VkIENOREEgZW1ib2R5IHRoZSBlbnRpcmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgUGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QtbWF0dGVyIGNvbnRhaW5lZCBoZXJlaW4sIGFuZCBzaGFsbCBzdXBlcnNlZGUgYWxsIHByZXZpb3VzIGNvbW11bmljYXRpb25zLCByZXByZXNlbnRhdGlvbnMsIG9yIHVuZGVyc3RhbmRpbmdzLCBlaXRoZXIgb3JhbCBvciB3cml0dGVuLCBiZXR3ZWVuIHRoZSBQYXJ0aWVzIHJlbGF0aW5nIHRvIHRoZSBzdWJqZWN0LW1hdHRlciBoZXJlb2YuDQpiLiBOb3RoaW5nIGNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgY29uZmVycmluZyBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIHVwb24gZWl0aGVyIFBhcnR5IGhlcmV1bmRlciwgYW55IGxpY2Vuc2Ugb3Igb3RoZXIgcmlnaHQgZXhjZXB0IHRoZSBsaWNlbnNlcyBhbmQgcmlnaHRzIGV4cHJlc3NseSBncmFudGVkIGhlcmV1bmRlciB0byBhIFBhcnR5IGhlcmV0by4NCmMuIEFsbCBub3RpY2VzIHJlcXVpcmVkIG9yIHBlcm1pdHRlZCB0byBiZSBnaXZlbiBoZXJldW5kZXIgc2hhbGwgYmUgZGVlbWVkIGdpdmVuIGlmIHNlbnQgYnkgZS1tYWlsLCBmYWNzaW1pbGUgdHJhbnNtaXNzaW9uIG9yIHJlZ2lzdGVyZWQgYWlybWFpbCB0byB0aGUgYWRkcmVzcyBvZiB0aGUgb3RoZXIgUGFydHkgYXMgc3BlY2lmaWVkIGluIHRoaXMgQWdyZWVtZW50LCBvciB0byBzdWNoIG90aGVyIGFkZHJlc3MgYXMgb25lIFBhcnR5IG5vdGlmaWVzIHRoZSBvdGhlciBvZiBpbiB3cml0aW5nLiANCkxpY2Vuc2VlOg0KSW50ZWwgQ29ycG9yYXRpb24NCjIyMDAgTWlzc2lvbiBDb2xsZWdlIEJvdWxldmFyZA0KUk5CIDQtMTUxDQpTYW50YSBDbGFyYSwgQ0EgIDk1MDUyDQpBdHRuOiAgR2VuZXJhbCBDb3Vuc2VsDQpSZWZlcmVuY2UgSUQ6IERvdWcgU21pdGggUEVHDQoNCldhdmVzOiANClBlciBhZGRyZXNzIGFib3ZlLCBhbmQgY29weSAobm90IGNvbnN0aXR1dGluZyBub3RpY2UpIHRvOg0KDQpUYWRtb3IgJiBDby4gWXV2YWwgTGV2eSAmIENvLg0KQXpyaWVsbGkgVG93ZXIgKFNxdWFyZSBUb3dlciksIDM0dGggZmxvb3INCjEyOCBNZW5hY2hlbSBCZWdpbiBTdC4sIFRlbCBBdml2DQpBdHRuOiBUYW1hciBLcm9uZ3JhZCwgQWR2Lg0KdGFtYXJAdGFkbW9yLWxldnkuY29tDQoNDQoNCg0KDQpkLiBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIG5laXRoZXIgUGFydHkgbWF5IGRlbGVnYXRlLCBhc3NpZ24sIHRyYW5zZmVyIG9yIGF0dGVtcHQgdG8gZGVsZWdhdGUsIGFzc2lnbiBvciB0cmFuc2ZlciB0aGlzIEFncmVlbWVudCBvciBpdHMgcmlnaHRzIG9yIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIHRocm91Z2ggYXNzaWdubWVudCBieSBvcGVyYXRpb24gb2YgbGF3LCBkaXJlY3QgYXNzaWdubWVudCwgc2FsZSBvZiBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMsIHJlb3JnYW5pemF0aW9uLCBtZXJnZXIsIHJldmVyc2UgbWVyZ2VyIG9yIHNpbWlsYXIgYXNzaWdubWVudCBvciBjaGFuZ2Ugb2YgY29udHJvbCwgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSBvdGhlciBQYXJ0eSwgYW5kIGFueSBhc3NpZ25tZW50IHdpdGhvdXQgc3VjaCBjb25zZW50IHNoYWxsIGhhdmUgbm8gZm9yY2Ugb3IgZWZmZWN0LiAgDQppLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlIHByb2hpYml0aW9uIG9mIGFzc2lnbm1lbnQgb3IgdHJhbnNmZXI6DQphKSBMaWNlbnNlZSBtYXkgYXNzaWduIHRoaXMgQWdyZWVtZW50IHdpdGhvdXQgV2F2ZXOSIGNvbnNlbnQgdG8gYW4gZW50aXR5IHRoYXQgc3VjY2VlZHMgdG8gYWxsIG9yIHN1YnN0YW50aWFsbHkgYWxsIG9mIHRoZSBidXNpbmVzcyBhc3NldHMgb2YgTGljZW5zZWUgZXhjbHVzaXZlbHkgcmVsYXRlZCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBBZ3JlZW1lbnQuICBMaWNlbnNlZSBtYXkgYWxzbyBhc3NpZ24gb3IgZGVsZWdhdGUgaXRzIHJpZ2h0cyBhbmQvb3Igb2JsaWdhdGlvbnMsIG9yIGFueSBwYXJ0IHRoZXJlb2YgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgd2l0aG91dCBXYXZlc5IgY29uc2VudCB0byBhIExpY2Vuc2VlIEFmZmlsaWF0ZSwgcHJvdmlkZWQgdGhhdCBub3RpY2UgaXMgcHJvdmlkZWQgdG8gV2F2ZXMgYW5kIHRoYXQgTGljZW5zZWUgcmVtYWlucyBsaWFibGUgZm9yIHN1Y2ggb2JsaWdhdGlvbnMuDQpiKSBXYXZlcyBtYXkgYXNzaWduIHRoaXMgQWdyZWVtZW50IGluIGNvbm5lY3Rpb24gd2l0aCBhIHNhbGUgb2YgV2F2ZXMgb3IgYWxsIG9yIHN1YnN0YW50aWFsbHkgYWxsIG9mIGl0cyBidXNpbmVzcyBvciBhc3NldHMgb3IgYSBzYWxlIG9mIGEgbGluZSBvZiBXYXZlcyBwcm9kdWN0cyBpbiB3aGljaCB0aGUgTGljZW5zZWQgVGVjaG5vbG9neSBpcyB1c2VkLCBpbmNsdWRpbmcgYnkgbWVyZ2VyLCBzdG9jayBzYWxlLCBhc3NldCBzYWxlLCBvciBvdGhlcndpc2UuDQppaS4gQW55IGFzc2lnbm1lbnQgb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgYXNzaWduZWUgYWdyZWVpbmcgaW4gd3JpdGluZyB0byBiZSBib3VuZCBieSBhbGwgdGhlIG9ibGlnYXRpb25zIGFuZCBvdGhlciB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4gIFN1YmplY3QgdG8gdGhlIGZvcmVnb2luZywgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmluZCBhbmQgaW51cmUgdG8gdGhlIGJlbmVmaXQgb2YgdGhlIHJlc3BlY3RpdmUgcGFydGllcyBoZXJldG8gYW5kIHRoZWlyIHBlcm1pdHRlZCBzdWNjZXNzb3JzIGFuZCBhc3NpZ25zLg0KZS4gTmVpdGhlciBQYXJ0eSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZGVsYXlzIG9yIGZhaWx1cmVzIGluIHBlcmZvcm1hbmNlIHJlc3VsdGluZyBmcm9tIGFjdHMgYmV5b25kIHRoZSBjb250cm9sIG9mIHN1Y2ggUGFydHkuIFN1Y2ggYWN0cyBzaGFsbCBpbmNsdWRlICh3aXRob3V0IGxpbWl0YXRpb24pIG5hdHVyYWwgZGlzYXN0ZXJzLCBsYWJvciBjb25mbGljdHMsIGFjdHMgb2Ygd2FyIG9yIGNpdmlsIGRpc3J1cHRpb24sIG9yIGdvdmVybm1lbnRhbCByZWd1bGF0aW9ucy4gDQpmLiBFYWNoIFBhcnR5IGFncmVlcyBub3QgdG8gZXhwb3J0IG9yIHJlLWV4cG9ydCwgb3IgY2F1c2UgdG8gYmUgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQsIGFueSB0ZWNobmljYWwgZGF0YSBmdXJuaXNoZWQgYnkgdGhlIG90aGVyIFBhcnR5IGhlcmV1bmRlciBvciB0aGUgZGlyZWN0IHByb2R1Y3Qgb2Ygc3VjaCB0ZWNobmljYWwgZGF0YSB0byBhbnkgZGVzdGluYXRpb24sIHBlcnNvbiBvciBmaXJtIGluIHZpb2xhdGlvbiBvZiB0aGUgVVMgbGF3cyBhbmQgcmVndWxhdGlvbnMgZ292ZXJuaW5nIHRoZSBleHBvcnQgb2YgVVMgY29tbW9kaXRpZXMgYW5kIHRlY2huaWNhbCBkYXRhLg0KZy4gTm90aGluZyBjb250YWluZWQgaGVyZWluIG9yIGRvbmUgaW4gcHVyc3VhbmNlIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGNvbnN0aXR1dGUgZWl0aGVyIFBhcnR5IHRoZSBhZ2VudCBmb3IgdGhlIG90aGVyIFBhcnR5IGZvciBhbnkgcHVycG9zZSBhbmQgbmVpdGhlciBzaGFsbCBzbyBob2xkIGl0c2VsZiBvdXQgcHVibGljbHkgb3IgdG8gYW55IHRoaXJkIHBhcnR5IG9yIGluY3VyIGFueSBsaWFiaWxpdHkgZm9yIHRoZSBvdGhlci4gIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcGFydGllcyBpcyB0aGF0IG9mIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzLiBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBjb25zdGl0dXRlIGEgcGFydG5lcnNoaXAgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIFdhdmVzIGFuZCBMaWNlbnNlZS4NCmguIFRoZSBjYXB0aW9ucyB1c2VkIGluIHRoaXMgQWdyZWVtZW50IGFyZSBmb3IgY29udmVuaWVuY2Ugb2YgcmVmZXJlbmNlIG9ubHkgYW5kIGFyZSBub3QgdG8gYmUgdXNlZCBpbiBpbnRlcnByZXRpbmcgdGhlIG9ibGlnYXRpb25zIG9mIHRoZSBQYXJ0aWVzIHVuZGVyIHRoaXMgQWdyZWVtZW50LiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGRldGVybWluZWQgYnkgYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIHRvIGJlIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSwgdGhlbiBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSBkZWVtZWQgbW9kaWZpZWQgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcmVuZGVyIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZTsgaWYgc3VjaCBwcm92aXNpb24gbWF5IG5vdCBiZSBzbyBzYXZlZCwgaXQgc2hhbGwgYmUgc2V2ZXJlZCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCByZW1haW4gaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0Lg0KaS4gRWFjaCBQYXJ0eSByZXByZXNlbnRzIHRvIHRoZSBvdGhlciB0aGF0IGl0IGhhcyB0aGUgcmlnaHQgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBoZXJldW5kZXIsIGFuZCB0aGF0IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBkbyBub3QgY29uZmxpY3Qgd2l0aCBpdHMgQnktTGF3cywgYW5kIGRvIG5vdCBjb25mbGljdCB3aXRoIGFueSBvdGhlciBhZ3JlZW1lbnQgdG8gd2hpY2ggaXQgaXMgYSBwYXJ0eSBvciB0byB3aGljaCBpdCBpcyBib3VuZC4gIEFueXRoaW5nIGNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCB0byB0aGUgY29udHJhcnkgbm90d2l0aHN0YW5kaW5nLCB0aGUgb2JsaWdhdGlvbnMgb2YgdGhlIHBhcnRpZXMgaGVyZXRvIHNoYWxsIGJlIHN1YmplY3QgdG8gYWxsIGxhd3MsIHByZXNlbnQgYW5kIGZ1dHVyZSwgb2YgYW55IGdvdmVybm1lbnQgaGF2aW5nIGp1cmlzZGljdGlvbiBvdmVyIHRoZSBwYXJ0aWVzIGhlcmV0bywgYW5kIHRvIG9yZGVycywgcmVndWxhdGlvbnMsIGRpcmVjdGlvbnMgb3IgcmVxdWVzdHMgb2YgYW55IHN1Y2ggZ292ZXJubWVudC4NCmouIFRoaXMgQWdyZWVtZW50IG1heSBiZSBleGVjdXRlZCBpbiB0d28gY291bnRlcnBhcnRzLCBlYWNoIG9mIHdoaWNoIHdpbGwgYmUgZGVlbWVkIGFuIG9yaWdpbmFsIGFuZCBhbGwgb2Ygd2hpY2ggdG9nZXRoZXIgd2lsbCBjb25zdGl0dXRlIG9uZSBhbmQgdGhlIHNhbWUgaW5zdHJ1bWVudC4gDQpbU0lHTkFUVVJFUyBBUkUgT04gVEhFIE5FWFQgUEFHRV0NCg0KDQoNCklOIFdJVE5FU1MgV0hFUkVPRiwgdGhlIFBhcnRpZXMgaGVyZXRvIGhhdmUgY2F1c2VkIHRoaXMgQWdyZWVtZW50IHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZWlyIGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmVzOg0KDQpJTlRFTCBDT1JQT1JBVElPTjoJCSAgICAgICAJCQlXYXZlcyBBdWRpbyBMdGQuOg0KQnk6CQkJCQkJCUJ5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCk5hbWU6CSAgICAgICAgICAgICAgICAgICAgIAkJCU5hbWU6ICAgICAgICAgICAgICAgICAgICAgICAgIA0KVGl0bGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICBUaXRsZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCkRhdGU6CQkJCQkJCURhdGU6ICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KDQoNCg0KCQkJCQlBcHBlbmRpeCBBDQoJCQkJTGljZW5zZWQgVGVjaG5vbG9neQ0KDQoxKSBNYXh4QXVkaW8uIA0KMikgTWF4eFZvaWNlICh3aWxsIGJlIGF2YWlsYWJsZSBpbiB0aGUgMjAxNyBtb2RlbHMpLg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCgkJCQkJDQogDQpbU0YxXUludGVsIHJlamVjdHMgdGhlc2UgY2hhbmdlcyBhcyB0aGV5IHdvdWxkIHJlbW92ZSB0aGUgb2JsaWdhdGlvbiB0byBicmluZyBhIGNsYWltIGluIERlbGF3YXJlLiAgV2UgY2FuIGNoYW5nZSB0aGUgbGF3IGFuZCBqdXJpc2RpY3Rpb24gdG8gTmV3IFlvcmsgaWYgdGhhdCBpcyBiZXR0ZXIuDQotMTctDQoNCgkJDQoNCkZpbmFsDQoNCgkJDQoNCg==