PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnDQoNCiRwYWdlVGl0bGUgCQk9ICIiOw0KJHBhZ2VLZXl3b3Jkcwk9ICIiOw0KJHBhZ2VBdXRob3IJCT0gIiI7DQoNCm9iX3N0YXJ0KCk7DQo/Pg0KICAgIDxkaXYgaWQ9Im1haW5jb250ZW50Ij4NCgk8ZGl2IGlkPSJtaWRjb2x1bW4iPg0KDQo8aDE+VGVzdCBBdXRvbWF0aW9uIFBsYXRmb3JtPC9oMT4NCjwvcD4NCjw/cGhwDQppbmNsdWRlX29uY2UoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvcHJvamVjdHMvZnJhZ21lbnRzL3Byb3Bvc2FsLXBhZ2UtaGVhZGVyLnBocCIpOw0KZ2VuZXJhdGVfaGVhZGVyKCJUQVAiKTsNCj8+Cgo8aDI+SW50cm9kdWN0aW9uPC9oMj4KPHA+VGVzdCBBdXRvbWF0aW9uIFBsYXRmb3JtIChUQVApIGlzIGEgcHJvcG9zZWQgb3Blbi1zb3VyY2UgcHJvamVjdCB1bmRlciB0aGUgRWNsaXBzZSBUZWNobm9sb2d5IHByb2plY3QuIA0KVGhlIFRBUCBwcm9qZWN0IHdpbGwgYWRkIG5ldyBleHRlbnNpYmlsaXR5IGFuZCBjb21wb25lbnRzIHRvIEVjbGlwc2UgZm9yIGNvbnN0cnVjdGluZyBzeXN0ZW0gdGVzdCBhdXRvbWF0aW9uIA0Kc29sdXRpb25zLiBUaGlzIGluY2x1ZGVzIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBFY2xpcHNlIHBsYXRmb3JtIGRlc2lnbmVkIGZvciBoZWFkbGVzcyB0ZXN0IGV4ZWN1dGlvbi4gVGhlIA0KY29uY2VwdCBlbmNvdXJhZ2VzIHNlYW1sZXNzIGludGVyb3BlcmFiaWxpdHkgYW1vbmcgbWFueSBjb21tZXJjaWFsLCBwcm9wcmlldGFyeSwgYW5kIG9wZW4tc291cmNlIHRlc3QtcmVsYXRlZCBwbHVnLWlucy4gWW91IA0KYXJlIGludml0ZWQgdG8gY29tbWVudCBvbiBhbmQvb3Igam9pbiB0aGUgcHJvamVjdC4gUGxlYXNlIHNlbmQgYWxsIGZlZWRiYWNrIHRvIA0KdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbmV3c3BvcnRhbC90aHJlYWQucGhwP2dyb3VwPWVjbGlwc2UudGFwIj5lY2xpcHNlLnRhcDwvYT4gbmV3c2dyb3VwLg0KDQo8aDI+QmFja2dyb3VuZDwvaDI+DQoNCjxwPlN5c3RlbSB0ZXN0IGF1dG9tYXRpb24gaW52b2x2ZXMgYmxhY2stYm94IHRlc3Rpbmcgb2Ygc3lzdGVtcw0KdGhhdCBpbmNsdWRlIG11bHRpcGxlIGRldmljZXMgb3IgY29tcG9uZW50cyB0aGF0IGFyZSBiZWluZyB0ZXN0ZWQgZm9yDQppbnRlcm9wZXJhYmlsaXR5LCBmdW5jdGlvbmFsaXR5LCBwZXJmb3JtYW5jZSwgc3RyZXNzLCBldGMuICBTeXN0ZW0gdGVzdGluZyBpcyB1c2VkIHdpZGVseSBpbiBuZXR3b3JraW5nLA0KZGF0YSBjZW50ZXJzLCBldGMuPC9wPg0KDQo8cD5TZXZlcmFsIGNvbXBvbmVudHMgYXJlIHJlcXVpcmVkIGZvciBhIGNvbXBsZXRlIHN5c3RlbSB0ZXN0DQphdXRvbWF0aW9uIHNvbHV0aW9uIGluY2x1ZGluZyB0ZXN0IGF1dGhvcmluZywgc3BlY2lhbGl6ZWQgdGVzdGluZyBjb21wb25lbnRzDQooc3VjaCBhcyBuZXR3b3JrIHNpbXVsYXRvcnMsIHRyYWZmaWMgZ2VuZXJhdG9ycywgZXRjLiksIHRlc3RiZWQgaW52ZW50b3J5DQptYW5hZ2VtZW50LCB0ZXN0YmVkIHJlc2VydmF0aW9ucywgcGh5c2ljYWwgdGVzdGJlZCB0b3BvbG9neSBtYW5hZ2VtZW50LCB0ZXN0IGluZm9ybWF0aW9uDQptYW5hZ2VtZW50LCBkZWZlY3QgdHJhY2tpbmcsIGFuZCBtYW55IG90aGVycy4gU29tZSBvZiB0aGVzZSBjb21wb25lbnRzIG1heSBiZSAiaG9tZS1ncm93biIgd2hpbGUgb3RoZXJzIG1heSBiZQ0KcHJvdmlkZWQgYnkgY29tbWVyY2lhbCB2ZW5kb3JzIG9yIGF2YWlsYWJsZSBhcyBvcGVuLXNvdXJjZS48L3A+DQoNCjxwPkhpc3RvcmljYWxseSwgaW50ZXJvcGVyYWJpbGl0eSBiZXR3ZWVuIHRoZXNlIGNvbXBvbmVudHMgaGFzDQpkZXBlbmRlZCBvbiB0aGUgdG9vbHMgY29taW5nIGZyb20gYSBzaW5nbGUgcHJvdmlkZXIsIGhhcyByZXF1aXJlZCBjdXN0b21pemVkDQoiZ2x1ZSwiIG9yIGhhcyByZXF1aXJlZCBiaWxhdGVyYWwgY29vcGVyYXRpb24gYmV0d2VlbiBlYWNoIHBhaXJpbmcgb2YNCnByb3ZpZGVycy4gTm9uZSBvZiB0aGVzZSBpcyBpZGVhbCB0bw0KZm9zdGVyIGFuIGVudmlyb25tZW50IGZhdm9yaW5nIGlubm92YXRpb24gYW5kICJiZXN0IG9mIGJyZWVkIiBjb21wb25lbnRzLjwvcD4NCg0KPHA+VGhlcmUgZXhpc3RzIGEgbG90IG9mIGRpc3BhcmF0ZSBleHBlcnRpc2Ugc3Vycm91bmRpbmcgdGhlc2UNCnZhcmlvdXMgY29tcG9uZW50cyBhbmQgaW50ZXJmYWNlcy4gV2UgZG8NCm5vdCBiZWxpZXZlIHRoYXQgYW55IG9uZSBpbmRpdmlkdWFsLCBvcmdhbml6YXRpb24sIG9yIGNvbXBhbnkgaGFzIHN1ZmZpY2llbnQNCmV4cGVydGlzZSB0byB1bmlsYXRlcmFsbHkgZGVmaW5lIHRoZSBiZXN0IHBvc3NpYmxlIGludGVyZmFjZXMgYmV0d2VlbiB0aGVzZQ0KdG9vbHMuIFRoZXJlZm9yZSwgd2Ugd291bGQgbGlrZSB0byBzZWUgYQ0KY29tbXVuaXR5IGRldmVsb3Agd2hlcmUgdGhlc2UgZXhwZXJ0cyBjYW4gY29tZSB0b2dldGhlciB0byBjb2xsYWJvcmF0ZSBvbiBkZWZpbmluZw0KZXhjZWxsZW50IGludGVyZmFjZSBkZWZpbml0aW9ucyB0aGF0IGNvbGxlY3RpdmVseSBhbGxvdyBmb3IgY29tcGxldGUgc29sdXRpb25zDQpidWlsdCBmcm9tIGJlc3Qtb2YtYnJlZWQgY29tcG9uZW50cy4gRXZlbiBtb3JlIHRoYW4gdGhhdCwgd2UgYmVsaWV2ZSB0aGF0IGludGVyZmFjZSBkZWZpbml0aW9ucyBhcmUNCmluc3VmZmljaWVudCB0byBmb3N0ZXIgYSBoZWFsdGh5IGVjb3N5c3RlbSBhbmQgdGhlcmVmb3JlIHdvdWxkIGxpa2UgdG8gc2VlIGFuDQpvcGVuLXNvdXJjZSBwbGF0Zm9ybSBkZXZlbG9wZWQgdGhhdCBhbGxvd3MgZWFjaCB0b29sIHRvIGJlIGRldmVsb3BlZCBpbg0KaXNvbGF0aW9uIHdpdGggY29uZmlkZW5jZSB0aGF0IGl0IHdpbGwgaW50ZXJvcGVyYXRlIHByb3Blcmx5IHdpdGggb3RoZXINCmNvbXBvbmVudHMgaW4gYSBjb21wbGV0ZSBzb2x1dGlvbi4gRnVydGhlciwgdGhlIG9wZW4gc291cmNlIGNvbXBvbmVudCBzaG91bGQgaW5jbHVkZSByZWZlcmVuY2UNCmltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBjb21wb25lbnRzIHNvIHRoYXQgdGhlcmUgaXMgYSBiYXNpYyB3b3JraW5nIHNvbHV0aW9uDQppbiBwbGFjZSwgYWxsb3dpbmcgZWFjaCBjb21wb25lbnQgYmVpbmcgYWRkZWQgaW4gdG8gYXVnbWVudCB0aGUgdmFsdWUuPC9wPg0KDQo8cD5BbHNvLCBhbiBpbXBvcnRhbnQgYXNwZWN0IG9mIHRlc3QgYXV0b21hdGlvbiBpcyB0aGF0IGl0IGludm9sdmVzDQp0d28gZGlzdGluY3QgcGhhc2VzLiBJbiB0aGUgZmlyc3QgcGhhc2UsDQphIGh1bWFuIGlzIGRlc2lnbmluZywgZGV2ZWxvcGluZywgYW5kIHRyb3VibGVzaG9vdGluZyBhdXRvbWF0ZWQgdGVzdHMuIEluIHRoZSBzZWNvbmQgcGhhc2UsIHRoZSByZXN1bHRpbmcgYXV0b21hdGVkDQp0ZXN0cyBtdXN0IGJlIGV4ZWN1dGVkIGluIGEgImxpZ2h0cy1vdXQiIHJlZ3Jlc3Npb24gZW52aXJvbm1lbnQuDQpUaGlzIGV4ZWN1dGlvbiBpbnZvbHZlcyBtYW55IG9mIHRoZSBzYW1lDQpjb21wb25lbnRzIGFuZCBpbnRlcm9wZXJhYmlsaXR5IGFtb25nIHRoZW0uIA0KU28gdGVzdCBhdXRvbWF0aW9uIHRvb2wgaW50ZXJvcGVyYWJpbGl0eSBpbnZvbHZlcyBib3RoIGENCmh1bWFuLXVzZXItaW50ZXJmYWNlIGNvbXBvbmVudCBhbmQgImhlYWRsZXNzIiBpbnRlcm9wZXJhYmlsaXR5IGFzIHdlbGwuPC9wPg0KDQo8aDI+U2NvcGU8L2gyPg0KDQo8cD5UaGUgZ29hbCBvZiB0aGlzIHByb3Bvc2VkIHByb2plY3QgaXMgdG8gdXNlIEVjbGlwc2UgYXMgYQ0KY29tbW9uIGZvdW5kYXRpb24gb24gd2hpY2ggdG8gYnVpbGQgaW50ZXJvcGVyYWJpbGl0eSBhbW9uZyBvdGhlcndpc2UgZGlzam9pbnQNCmNvbXBvbmVudHMgb2YgYSB0ZXN0IGF1dG9tYXRpb24gc29sdXRpb24uIFVzaW5nIEVjbGlwc2UncyBleHRlbnNpYmlsaXR5IG1vZGVsIGFuZCBKYXZhIEFQSXMsIHRoaXMgcHJvamVjdCB3aWxsDQpkZWZpbmUgYSB2YXJpZXR5IG9mIG9wZW4gaW50ZXJmYWNlcyBiZXR3ZWVuIGJsb2NrcyBvZiBmdW5jdGlvbmFsaXR5IHRoYXQgbWF5DQpuZWVkIHRvIGludGVyb3BlcmF0ZS4gDQoNClRoZXNlIGludGVyZmFjZXMNCmFyZSBkZWZpbmVkIHVzaW5nIGEgc2VydmljZSBtb2RlbCBzbyB0aGF0IGlubm92YXRpb24gaXMgZW5jb3VyYWdlZCBvbiBib3RoDQpzaWRlcyBvZiB0aGUgaW50ZXJmYWNlICZuZGFzaDsgbWVhbmluZyB0aGF0IG9uY2UgYSBzZXJ2aWNlIGlzIGRlZmluZWQsIG1hbnkgc2VydmljZQ0KcHJvdmlkZXJzIGNhbiBiZSBwbHVnZ2VkIGluIGFuZCwgbGlrZXdpc2UsIG1hbnkgZGlmZmVyZW50IHNlcnZpY2UgY29uc3VtZXJzIGNhbg0KdGFrZSBhZHZhbnRhZ2Ugb2YgZWFjaCBzZXJ2aWNlLiBUaGUNCnByb2plY3Qgd2lsbCBhbHNvIGNyZWF0ZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb25zIG9mIGFsbCBvZiB0aGVzZSBjb21wb25lbnRzDQp3aXRoIGJhc2ljIGZ1bmN0aW9uYWxpdHkgJm5kYXNoOyB3aGlsZSBhbGxvd2luZyBjb21tZXJjaWFsIGFuZCBvdGhlciBpbXBsZW1lbnRhdGlvbnMNCnRvIGJlIHBsdWdnZWQgaW50byB0aGVzZSBzYW1lIGV4dGVuc2liaWxpdHkgcG9pbnRzLjwvcD4NCjxwPkVjbGlwc2UgaXRzZWxmIChvciBvdGhlciBjb21wYXRpYmxlIFJDUHMpIHByb3ZpZGVzIHRoZQ0KZnJhbWV3b3JrIGFuZCB1c2VyIGludGVyZmFjZSBmb3Igb3BlcmF0aW9ucyB0aGF0IGludm9sdmUgYSBodW1hbi11c2VyDQppbnRlcmZhY2UuIFdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcw0KcHJvamVjdCBpcyBhbHNvIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyAiaGVhZGxlc3MiIHJ1bnRpbWUgZXhlY3V0YWJsZSBhbGxvd2luZw0Kc3VpdGFibGUgY29tcG9uZW50cyB0byB1c2UgdGhlc2Ugc2FtZSBpbnRlcmZhY2VzIHdoZW4gZXhlY3V0aW5nIHRlc3RzLjxzcGFuDQpzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+IFRoaXMgaXMgYSBuZXcgRXF1aW5veC1iYXNlZCBydW50aW1lIHdpdGggbm8gZGVwZW5kZW5jaWVzIG9uIGFueSBVSQ0KY29tcG9uZW50cyBub3Igb24gYSB3b3Jrc3BhY2UgKGkuZS4sIHRoZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcw0KcGx1Zy1pbikuIENvbW1hbmQtbGluZSBhcmd1bWVudHMgCmFyZSB1c2VkIHRvIGNvbW11bmljYXRlIHRoZSByZWFzb24gdGhhdCB0aGUNCnJ1bnRpbWUgaXMgYmVpbmcgaW52b2tlZCBhbmQgdG8gY29udHJvbCB0aGUgYmVoYXZpb3IuDQo8L3A+DQoNCjxwPk1vcmUgc3BlY2lmaWNhbGx5LCB0aGUgb2JqZWN0aXZlcyBmb3IgdGhpcyBwcm9qZWN0IGluY2x1ZGU6PC9wPg0KDQo8dWw+DQo8bGk+QSBuZXcgVEFQIGZlYXR1cmUgdGhhdCBjYW4gYmUgYWRkZWQgaW50byBhbg0KRWNsaXBzZSBpbnN0YWxsYXRpb24gdGhhdCBhY3RzIGFzIGNvbW1vbiBtaWRkbGV3YXJlIGZvciBvdGhlciB0b29scyB0aGF0IG1heQ0KYWxzbyBiZSBhZGRlZCBpbnRvIHRoYXQgc2FtZSBpbnN0YWxsYXRpb247PC9saT4NCg0KPGxpPkV4dGVuc2lvbiBwb2ludCBkZWNsYXJhdGlvbnMgYW5kIHJlbGF0ZWQgSmF2YQ0KaW50ZXJmYWNlIGRlZmluaXRpb25zIGZvciBhIHZhcmlldHkgb2YgaW50ZXJmYWNlcyBhbmQvb3Igc2VydmljZXMgcmVsYXRlZCB0bw0Kc3lzdGVtIHRlc3QgYXV0b21hdGlvbjs8L2xpPg0KDQo8bGk+U3VmZmljaWVudCBjb2RlIHRvIGNvbm5lY3Qgc2VydmljZSBwcm92aWRlcnMgdG8NCnNlcnZpY2UgY29uc3VtZXJzIGluIGFuIGFwcHJvcHJpYXRlIG1hbnktdG8tbWFueSBhcnJhbmdlbWVudCwgaW5zdWxhdGluZw0Kc2VydmljZSBjb25zdW1lcnMgZnJvbSB0aGUgY29tcGxleGl0eSBvZiCTbXVsdGlwbGV4aW5nlDs8L2xpPg0KDQo8bGk+UmVmZXJlbmNlIGltcGxlbWVudGF0aW9ucyB3aXRoIGJhc2ljDQpmdW5jdGlvbmFsaXR5IG9mIGFsbCBzZXJ2aWNlcyBhbmQgc2VydmljZSBjb25zdW1lcnMgZm9yIGVhY2ggaW50ZXJmYWNlIHNvIHRoYXQNCmVhY2ggdG9vbCBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZG9uZSB3aXRob3V0IHJlcXVpcmluZyBhbnkgb3RoZXIgY29tbWVyY2lhbCBvcg0KcHJvcHJpZXRhcnkgdG9vbDsgYW5kPC9saT4NCg0KPGxpPkEgbmV3IHJ1bnRpbWUgcGxhdGZvcm0gYmFzZWQgb24gRWNsaXBzZSB3aXRob3V0DQphIFVJIHRoYXQgaXMgaW50ZW5kZWQgZm9yIHBlcmZvcm1pbmcgdGVzdC1yZWxhdGVkIG9wZXJhdGlvbnMgaW52b2x2aW5nIHRlc3QNCmF1dG9tYXRpb24gdG9vbHMgYnVpbHQgb24gdG9wIG9mIHRoZXNlIGludGVyZmFjZXMgYW5kIGV4dGVuc2lvbiBwb2ludHMuPC9saT4NCjwvdWw+DQoNCjxoMj5EZXNjcmlwdGlvbjwvaDI+DQoNCjxwPldoaWxlIHRoZSBzY29wZSBvZiB0aGlzIHByb2plY3QgaXMgcXVpdGUgd2lkZSAgJm5kYXNoOyBpbnZvbHZpbmcNCmludGVyb3BlcmFiaWxpdHkgYW1vbmcgbWFueSBjbGFzc2VzIG9mIGRpZmZlcmVudCB0ZXN0LXJlbGF0ZWQgdG9vbHMsIHRoZQ0KaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIG9uZSBvciB0d28gb2YgdGhlc2UgaW50ZXJmYWNlcy4NCkJ5IHNob3dpbmcgdGhhdCB0aGUgbW9kZWwgd29ya3MgYmV0d2VlbiB0d28NCmRpZmZlcmVudCBjbGFzc2VzIG9mIHRvb2xzLCB3ZSBob3BlIHRvIGVuY291cmFnZSBtb3JlIHRvb2wgcHJvdmlkZXJzIHdpdGgNCmV4cGVydGlzZSBvbiBvdGhlciBjbGFzc2VzIG9mIHRlc3QtcmVsYXRlZCB0b29scyB0byBjb250cmlidXRlIHRoZWlyIGV4cGVydGlzZQ0KaW4gZGVmaW5pbmcgYWRkaXRpb25hbCBpbnRlcmZhY2VzLjwvcD4NCg0KPHA+Rm9yIHRoZSBpbml0aWFsIHBoYXNlLCB3ZSBwcm9wb3NlIHRvIGRlZmluZSB0aGUgaW50ZXJmYWNlDQpiZXR3ZWVuIHRlc3QgYXV0aG9yaW5nIHRvb2xzIChpLmUuLCB0aG9zZSB0b29scyB0aGF0IGFyZSB1c2VkIGZvciBjcmVhdGluZw0KYXV0b21hdGVkIGJsYWNrLWJveCBzeXN0ZW0gdGVzdHMpIGFuZCB0aGUgc3BlY2lhbGl6ZWQgdG9vbHMgdXNlZCBmb3INCmNvbnRyb2xsaW5nIGFuZCBtb25pdG9yaW5nIHRoZSB2YXJpb3VzIGNvbXBvbmVudHMgaW4gYSBwaHlzaWNhbCB0ZXN0YmVkIGR1cmluZw0KdGVzdGluZy4gVGhlc2UgdG9vbHMgdXNlZCBkdXJpbmcgbWFudWFsDQp0ZXN0aW5nIChlLmcuLCB2aXJ0dWFsIHRlcm1pbmFsLCB3ZWIgYnJvd3NlciwgdHJhZmZpYyBnZW5lcmF0b3IsIGV0Yy4pIGFyZSBhbHNvDQpuZWVkZWQgZHVyaW5nIGF1dG9tYXRlZCB0ZXN0aW5nLCBzbyB0aGUgc2VydmljZSBwcm92aWRlZCBieSB0aGUgc3BlY2lhbGl6ZWQNCnRvb2xzIGFyZSBhbHNvIHVzZWQgYnkgYSB0ZXN0IGV4ZWN1dGlvbiBlbmdpbmUgcnVubmluZyBlaXRoZXIgZHVyaW5nIHRlc3QNCmRldmVsb3BtZW50ICh3aXRoaW4gdGhlIEdVSSBlbnZpcm9ubWVudCkgb3IgZHVyaW5nIGFuIGV4ZWN1dGlvbiBlbnZpcm9ubWVudA0KKGhlYWRsZXNzKS48L3A+DQoNCjxwPldlIGFsc28gcHJvcG9zZSB0byBkZWZpbmUgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRlc3QNCmV4ZWN1dGlvbiB0b29scyAodGhhdCBtYXkgYmUgc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgdGVzdCBiZWluZyBleGVjdXRlZCkgYW5kDQpvdGhlciB0b29scyB0aGF0IGFyZSBpbnRlcmVzdGVkIGluIHBvc3QtcHJvY2Vzc2luZyB0aGUgcmVzdWx0cyBvZiBhIHRlc3QNCmV4ZWN1dGlvbiwgc3VjaCBhcyB0ZXN0IHJlcG9ydGluZyB0b29scyB0aGF0IHdpbGwgcHVibGlzaCB0aGUgcmVzdWx0cyBpbnRvIGENCmNlbnRyYWxpemVkIGRhdGFiYXNlLjwvcD4NCg0KPHA+V2UgaGF2ZSBhIHdvcmtpbmcgcHJvdG90eXBlIHRvZGF5IG9mIHRoZXNlIGludGVyZmFjZXMNCmluY2x1ZGluZyByZWZlcmVuY2Ugc2VydmljZSBwcm92aWRlcnMgYW5kIHNlcnZpY2UgY29uc3VtZXJzIGltcGxlbWVudGF0aW9ucyBmb3INCmVhY2guIElmIGFuZCB3aGVuIHRoaXMgcHJvamVjdCBpcw0KYXBwcm92ZWQgaW50byBhbiBpbmN1YmF0aW9uIHBoYXNlLCB3ZSBwcm9wb3NlIHRvIGNvbnRyaWJ1dGUgdGhpcyBjb2RlIGFzIGENCnN0YXJ0aW5nIHBvaW50LjwvcD4NCg0KPHA+V2UgZm9yZXNlZSBvdGhlciBpbnRlcmZhY2VzIGNvbWluZyBhbG9uZyBhcyB3ZWxsIGFzIG90aGVyDQpjb250cmlidXRvcnMgd2l0aCByZWxldmFudCBleHBlcnRpc2Ugam9pbmluZyB0aGUgcHJvamVjdC4NCk9mIHBhcnRpY3VsYXIgaW50ZXJlc3QgaXMgYW4gaW50ZXJmYWNlDQpiZXR3ZWVuIHRlc3QgZXhlY3V0aW9uIGFuZCB0ZXN0YmVkIHJlc2VydmF0aW9uL3RvcG9sb2d5IHRvb2xzIHdoaWNoIGFyZQ0KZXNzZW50aWFsIHRvIGEgY29tcGxldGUgc29sdXRpb24uIFdlIGFsc28gYW50aWNpcGF0ZSwgZm9yIGV4YW1wbGUsIGludGVyZmFjZXMNCmJldHdlZW4gdGVzdCBzY2hlZHVsaW5nIHRvb2xzIGFuZCBoZXRlcm9nZW5lb3VzIHRlc3QgZXhlY3V0aW9uIHRvb2xzIChhbmQgc28gb24pLjwvcD4NCg0KPHA+V2UgY2hvb3NlIG5vdCB0byBkZWZpbmUgYSBzby1jYWxsZWQgInJlZmVyZW5jZSBtb2RlbCIgZm9yDQp0aGVzZSB2YXJpb3VzIHRvb2xzIGFuZCBjb21wb25lbnRzIGFzIHdlIGJlbGlldmUgdGhhdCB0aGlzIHdpbGwgdGVuZCB0byBsaW1pdA0KdGhlIGlubm92YXRpb24gdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGVuY291cmFnZS4gV2UgcHJlZmVyIHRvIGZvY3VzIG9uIGluZGl2aWR1YWwgc2VydmljZSAKYW5kIGludGVyZmFjZXMgZGVmaW5pdGlvbnMgdGhhdA0KZXhwZXJ0cyBhZ3JlZSB3aWxsIGZhY2lsaXRhdGUgaW50ZXJvcGVyYWJpbGl0eSBhbmQgb3BlbiB0aGUgZG9vciB0byBuZXcgaWRlYXMNCnRoYXQgZXhwbG9pdCB0aGVzZSBzYW1lIGludGVyZmFjZXMuPC9wPg0KDQo8cD5XZSBoYXZlIGEgY29tbWVyY2lhbCBwcm9kdWN0IHRvZGF5IHRoYXQgaXMgYnVpbHQgb24gdG9wIG9mIGENCnJ1bnRpbWUgdmVyc2lvbiBvZiBFY2xpcHNlIGRlc2lnbmVkIHRvIHJ1biAiaGVhZGxlc3MiIGZvciBleGVjdXRpbmcgdGVzdHMuDQpXZSBhbnRpY2lwYXRlIHRoYXQgc29tZSBvZiB0aGlzIGV4cGVydGlzZSBjYW4NCmJlIGJyb3VnaHQgdG8gYmVhciBvbiB0aGUgZ29hbCBvZiBjcmVhdGluZyBhIHN1aXRhYmxlIHJ1bnRpbWUgcGxhdGZvcm0gZm9yIHRvb2wNCmludGVncmF0aW9uLjwvcD4NCg0KPGgyPk9yZ2FuaXphdGlvbjwvaDI+DQoNCjxoMz5NZW50b3JzPC9oMz4NCg0KPHA+VG8gYmUgZGV0ZXJtaW5lZDwvcD4NCg0KPGgzPkNvbW1pdHRlcnM8L2gzPg0KDQo8cD5UaGUgaW5pdGlhbCBzZXQgb2YgY29tbWl0dGVycyB3aWxsIGJlIGZyb20gRmFuZmFyZTo8L3A+DQoNCjx1bD4NCjxsaT5LaW5nc3RvbiBEdWZmaWUgPGEgaHJlZj0ibWFpbHRvOmtkdWZmaWVAZmFuZmFyZXNvZnR3YXJlLmNvbSI+a2R1ZmZpZUBmYW5mYXJlc29mdHdhcmUuY29tPC9hPjwvbGk+DQo8bGk+QWRhbSBCb3ZpbGw8L2xpPg0KPGxpPldlaSBEYWk8L2xpPg0KPGxpPlBhd2FuIFNpbmdoPC9saT4NCjwvdWw+DQoNCjxwPldlIHdlbGNvbWUgcGFydGljaXBhdGlvbiBlYXJseSBpbiB0aGUgcHJvY2VzcyBmcm9tIG90aGVyDQppbnRlcmVzdGVkIHBhcnRpZXMgd2l0aCByZWxldmFudCBleHBlcnRpc2UuPC9wPg0KDQo8aDM+SW50ZXJlc3RlZCBQYXJ0aWVzPC9oMz4NCg0KPHA+V2UgaGF2ZSBkaXNjdXNzZWQgdGhpcyB0b3BpYyB3aXRoIGEgbnVtYmVyIG9mIGludGVyZXN0ZWQNCnBhcnRpZXMgcmVwcmVzZW50aW5nIGJvdGggdmVuZG9ycyBhbmQgY3VzdG9tZXJzLg0KVGhlIGZvbGxvd2luZyBjb21wYW5pZXMgaGF2ZSBleHByZXNzZWQgdGhlaXIgaW50ZW50aW9uIG9mIGJlaW5nIGFuIGFjdGl2ZSANCnBhcnQgbyB0aGlzIGNvbW11bml0eToNCg0KPHVsPg0KPGxpPkNpc2NvICZuZGFzaDsgQ29udGFjdDogQmlsbCBTY2hvbmdhciA8YSBocmVmPSJtYWlsdG86YnNjaG9uZ2FAY2lzY28uY29tIj5ic2Nob25nYUBjaXNjby5jb208L2E+PC9saT4NCjxsaT5CVCBPcGVyYXRlICZuZGFzaDsgQ29udGFjdDogU3RldmUgVGhvbWFzIDxhIGhyZWY9Im1haWx0bzpzdGV2ZS5nLnRob21hc0BidC5jb20iPnN0ZXZlLmcudGhvbWFzQGJ0LmNvbTwvYT48L2xpPg0KPGxpPlByb0N1cnZlIE5ldHdvcmtpbmcgYnkgSFAgJm5kYXNoOyBDb250YWN0OiBWaW5jZSBNZW5kb3phIDxhIGhyZWY9Im1haWx0bzpWaW5jZW50Lm1lbmRvemFAaHAuY29tIj52aW5jZW50Lm1lbmRvemFAaHAuY29tPC9hPjwvbGk+DQo8bGk+QWdpbGVudCAmbmRhc2g7IENvbnRhY3Q6IFRvZGQgTGF3IDxhIGhyZWY9Im1haWx0bzp0b2RkX2xhd0BhZ2lsZW50LmNvbSI+dG9kZF9sYXdAYWdpbGVudC5jb208L2E+PC9saT4NCjxsaT5TcGlyZW50IENvbW11bmljYXRpb25zICZuZGFzaDsgQ29udGFjdDogVG9tIE1jQmVhdGggPGEgaHJlZj0ibWFpbHRvOnRvbS5tY2JlYXRoQHNwaXJlbnQuY29tIj50b20ubWNiZWF0aEBzcGlyZW50LmNvbTwvYT48L2xpPg0KPC91bD4NCjxwPg0KPC9wPg0KDQogICAgICA8L2Rpdj4NCiAgPC9kaXY+DQo8P3BocA0KCSRodG1sID0gb2JfZ2V0X2NvbnRlbnRzKCk7DQoJb2JfZW5kX2NsZWFuKCk7DQoNCgkjIEdlbmVyYXRlIHRoZSB3ZWIgcGFnZQ0KCSRBcHAtPmdlbmVyYXRlUGFnZSgkdGhlbWUsICRNZW51LCAkTmF2LCAkcGFnZUF1dGhvciwgJHBhZ2VLZXl3b3JkcywgJHBhZ2VUaXRsZSwgJGh0bWwpOw0KPz4NCg==