RGlzYXNzZW1ibHkgTGlzdGluZyBmb3IgUElDMzJNRUMxNHh4X1JUT1NEZW1vDQpHZW5lcmF0ZWQgRnJvbToNCkM6L0UvRGV2L0ZyZWVSVE9TL1dvcmtpbmdDb3B5L0ZyZWVSVE9TL0RlbW8vUElDMzJNRUMxNHh4X01QTEFCL1BJQzMyTUVDMTR4eF9SVE9TRGVtby5YL2Rpc3QvZGVmYXVsdC9kZWJ1Zy9QSUMzMk1FQzE0eHhfUlRPU0RlbW8uWC5kZWJ1Zy5lbGYNCjE1LUp1bC0yMDE1IDE3OjE2OjA3DQoNCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3Mvc291cmNlL3RpbWVycy5jICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoNCjI6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBWOC4yLjEgLSBDb3B5cmlnaHQgKEMpIDIwMTUgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQozOiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KNDogICAgICAgICAgICAgICAgICAgDQo1OiAgICAgICAgICAgICAgICAgICAgICAgVklTSVQgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgVE8gRU5TVVJFIFlPVSBBUkUgVVNJTkcgVEhFIExBVEVTVCBWRVJTSU9OLg0KNjogICAgICAgICAgICAgICAgICAgDQo3OiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCjg6ICAgICAgICAgICAgICAgICAgIA0KOTogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCjEwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCjExOiAgICAgICAgICAgICAgICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gPj4+PiBBTkQgTU9ESUZJRUQgQlkgPDw8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KMTI6ICAgICAgICAgICAgICAgICAgDQoxMzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxNDogICAgICAgICAgICAgICAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQoxNTogICAgICAgICAgICAgICAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQoxNjogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQoxNzogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQoxODogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxOTogICAgICAgICAgICAgICAgICANCjIwOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCjIxOiAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQoyMjogICAgICAgICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCjIzOiAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KMjQ6ICAgICAgICAgICAgICAgICAgDQoyNTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjI3OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KMjg6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQoyOTogICAgICAgICAgICAgICAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCjMwOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzE6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMjogICAgICAgICAgICAgICAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCjMzOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KMzQ6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNTogICAgICAgICAgICAgICAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzc6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCjQwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCjQxOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KNDI6ICAgICAgICAgICAgICAgICAgDQo0MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCjQ0OiAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCjQ1OiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KNDg6ICAgICAgICAgICAgICAgICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQo0OTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQo1MzogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCjU0OiAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQo1NTogICAgICAgICAgICAgICAgICANCjU2OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KNTc6ICAgICAgICAgICAgICAgICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCjY1OiAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCjY2OiAgICAgICAgICAgICAgICAgIA0KNjc6ICAgICAgICAgICAgICAgICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KNjg6ICAgICAgICAgICAgICAgICAgKi8NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgLyogU3RhbmRhcmQgaW5jbHVkZXMuICovDQo3MTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+DQo3MjogICAgICAgICAgICAgICAgICANCjczOiAgICAgICAgICAgICAgICAgIC8qIERlZmluaW5nIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHByZXZlbnRzIHRhc2suaCBmcm9tIHJlZGVmaW5pbmcNCjc0OiAgICAgICAgICAgICAgICAgIGFsbCB0aGUgQVBJIGZ1bmN0aW9ucyB0byB1c2UgdGhlIE1QVSB3cmFwcGVycy4gIFRoYXQgc2hvdWxkIG9ubHkgYmUgZG9uZSB3aGVuDQo3NTogICAgICAgICAgICAgICAgICB0YXNrLmggaXMgaW5jbHVkZWQgZnJvbSBhbiBhcHBsaWNhdGlvbiBmaWxlLiAqLw0KNzY6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KNzc6ICAgICAgICAgICAgICAgICAgDQo3ODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiRnJlZVJUT1MuaCINCjc5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJ0YXNrLmgiDQo4MDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicXVldWUuaCINCjgxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJ0aW1lcnMuaCINCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMCApDQo4NDogICAgICAgICAgICAgICAgICAJI2Vycm9yIGNvbmZpZ1VTRV9USU1FUlMgbXVzdCBiZSBzZXQgdG8gMSB0byBtYWtlIHRoZSB4VGltZXJQZW5kRnVuY3Rpb25DYWxsKCkgZnVuY3Rpb24gYXZhaWxhYmxlLg0KODU6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo4NjogICAgICAgICAgICAgICAgICANCjg3OiAgICAgICAgICAgICAgICAgIC8qIExpbnQgZTk2MSBhbmQgZTc1MCBhcmUgc3VwcHJlc3NlZCBhcyBhIE1JU1JBIGV4Y2VwdGlvbiBqdXN0aWZpZWQgYmVjYXVzZSB0aGUNCjg4OiAgICAgICAgICAgICAgICAgIE1QVSBwb3J0cyByZXF1aXJlIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHRvIGJlIGRlZmluZWQgZm9yIHRoZQ0KODk6ICAgICAgICAgICAgICAgICAgaGVhZGVyIGZpbGVzIGFib3ZlLCBidXQgbm90IGluIHRoaXMgZmlsZSwgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3QNCjkwOiAgICAgICAgICAgICAgICAgIHByaXZpbGVnZWQgVnMgdW5wcml2aWxlZ2VkIGxpbmthZ2UgYW5kIHBsYWNlbWVudC4gKi8NCjkxOiAgICAgICAgICAgICAgICAgICN1bmRlZiBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSAvKmxpbnQgIWU5NjEgIWU3NTAuICovDQo5MjogICAgICAgICAgICAgICAgICANCjkzOiAgICAgICAgICAgICAgICAgIA0KOTQ6ICAgICAgICAgICAgICAgICAgLyogVGhpcyBlbnRpcmUgc291cmNlIGZpbGUgd2lsbCBiZSBza2lwcGVkIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgY29uZmlndXJlZA0KOTU6ICAgICAgICAgICAgICAgICAgdG8gaW5jbHVkZSBzb2Z0d2FyZSB0aW1lciBmdW5jdGlvbmFsaXR5LiAgVGhpcyAjaWYgaXMgY2xvc2VkIGF0IHRoZSB2ZXJ5IGJvdHRvbQ0KOTY6ICAgICAgICAgICAgICAgICAgb2YgdGhpcyBmaWxlLiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBzb2Z0d2FyZSB0aW1lciBmdW5jdGlvbmFsaXR5IHRoZW4gZW5zdXJlDQo5NzogICAgICAgICAgICAgICAgICBjb25maWdVU0VfVElNRVJTIGlzIHNldCB0byAxIGluIEZyZWVSVE9TQ29uZmlnLmguICovDQo5ODogICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVElNRVJTID09IDEgKQ0KOTk6ICAgICAgICAgICAgICAgICAgDQoxMDA6ICAgICAgICAgICAgICAgICAvKiBNaXNjIGRlZmluaXRpb25zLiAqLw0KMTAxOiAgICAgICAgICAgICAgICAgI2RlZmluZSB0bXJOT19ERUxBWQkJKCBUaWNrVHlwZV90ICkgMFUNCjEwMjogICAgICAgICAgICAgICAgIA0KMTAzOiAgICAgICAgICAgICAgICAgLyogVGhlIGRlZmluaXRpb24gb2YgdGhlIHRpbWVycyB0aGVtc2VsdmVzLiAqLw0KMTA0OiAgICAgICAgICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgdG1yVGltZXJDb250cm9sDQoxMDU6ICAgICAgICAgICAgICAgICB7DQoxMDY6ICAgICAgICAgICAgICAgICAJY29uc3QgY2hhcgkJCQkqcGNUaW1lck5hbWU7CQkvKjw8IFRleHQgbmFtZS4gIFRoaXMgaXMgbm90IHVzZWQgYnkgdGhlIGtlcm5lbCwgaXQgaXMgaW5jbHVkZWQgc2ltcGx5IHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci4gKi8gLypsaW50ICFlOTcxIFVucXVhbGlmaWVkIGNoYXIgdHlwZXMgYXJlIGFsbG93ZWQgZm9yIHN0cmluZ3MgYW5kIHNpbmdsZSBjaGFyYWN0ZXJzIG9ubHkuICovDQoxMDc6ICAgICAgICAgICAgICAgICAJTGlzdEl0ZW1fdAkJCQl4VGltZXJMaXN0SXRlbTsJCS8qPDwgU3RhbmRhcmQgbGlua2VkIGxpc3QgaXRlbSBhcyB1c2VkIGJ5IGFsbCBrZXJuZWwgZmVhdHVyZXMgZm9yIGV2ZW50IG1hbmFnZW1lbnQuICovDQoxMDg6ICAgICAgICAgICAgICAgICAJVGlja1R5cGVfdAkJCQl4VGltZXJQZXJpb2RJblRpY2tzOy8qPDwgSG93IHF1aWNrbHkgYW5kIG9mdGVuIHRoZSB0aW1lciBleHBpcmVzLiAqLw0KMTA5OiAgICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90CQkJCXV4QXV0b1JlbG9hZDsJCS8qPDwgU2V0IHRvIHBkVFJVRSBpZiB0aGUgdGltZXIgc2hvdWxkIGJlIGF1dG9tYXRpY2FsbHkgcmVzdGFydGVkIG9uY2UgZXhwaXJlZC4gIFNldCB0byBwZEZBTFNFIGlmIHRoZSB0aW1lciBpcywgaW4gZWZmZWN0LCBhIG9uZS1zaG90IHRpbWVyLiAqLw0KMTEwOiAgICAgICAgICAgICAgICAgCXZvaWQgCQkJCQkqcHZUaW1lcklEOwkJCS8qPDwgQW4gSUQgdG8gaWRlbnRpZnkgdGhlIHRpbWVyLiAgVGhpcyBhbGxvd3MgdGhlIHRpbWVyIHRvIGJlIGlkZW50aWZpZWQgd2hlbiB0aGUgc2FtZSBjYWxsYmFjayBpcyB1c2VkIGZvciBtdWx0aXBsZSB0aW1lcnMuICovDQoxMTE6ICAgICAgICAgICAgICAgICAJVGltZXJDYWxsYmFja0Z1bmN0aW9uX3QJcHhDYWxsYmFja0Z1bmN0aW9uOwkvKjw8IFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuICovDQoxMTI6ICAgICAgICAgICAgICAgICAJI2lmKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQoxMTM6ICAgICAgICAgICAgICAgICAJCVVCYXNlVHlwZV90CQkJdXhUaW1lck51bWJlcjsJCS8qPDwgQW4gSUQgYXNzaWduZWQgYnkgdHJhY2UgdG9vbHMgc3VjaCBhcyBGcmVlUlRPUytUcmFjZSAqLw0KMTE0OiAgICAgICAgICAgICAgICAgCSNlbmRpZg0KMTE1OiAgICAgICAgICAgICAgICAgfSB4VElNRVI7DQoxMTY6ICAgICAgICAgICAgICAgICANCjExNzogICAgICAgICAgICAgICAgIC8qIFRoZSBvbGQgeFRJTUVSIG5hbWUgaXMgbWFpbnRhaW5lZCBhYm92ZSB0aGVuIHR5cGVkZWZlZCB0byB0aGUgbmV3IFRpbWVyX3QNCjExODogICAgICAgICAgICAgICAgIG5hbWUgYmVsb3cgdG8gZW5hYmxlIHRoZSB1c2Ugb2Ygb2xkZXIga2VybmVsIGF3YXJlIGRlYnVnZ2Vycy4gKi8NCjExOTogICAgICAgICAgICAgICAgIHR5cGVkZWYgeFRJTUVSIFRpbWVyX3Q7DQoxMjA6ICAgICAgICAgICAgICAgICANCjEyMTogICAgICAgICAgICAgICAgIC8qIFRoZSBkZWZpbml0aW9uIG9mIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHNlbnQgYW5kIHJlY2VpdmVkIG9uIHRoZSB0aW1lciBxdWV1ZS4NCjEyMjogICAgICAgICAgICAgICAgIFR3byB0eXBlcyBvZiBtZXNzYWdlIGNhbiBiZSBxdWV1ZWQgLSBtZXNzYWdlcyB0aGF0IG1hbmlwdWxhdGUgYSBzb2Z0d2FyZSB0aW1lciwNCjEyMzogICAgICAgICAgICAgICAgIGFuZCBtZXNzYWdlcyB0aGF0IHJlcXVlc3QgdGhlIGV4ZWN1dGlvbiBvZiBhIG5vbi10aW1lciByZWxhdGVkIGNhbGxiYWNrLiAgVGhlDQoxMjQ6ICAgICAgICAgICAgICAgICB0d28gbWVzc2FnZSB0eXBlcyBhcmUgZGVmaW5lZCBpbiB0d28gc2VwYXJhdGUgc3RydWN0dXJlcywgeFRpbWVyUGFyYW1ldGVyc1R5cGUNCjEyNTogICAgICAgICAgICAgICAgIGFuZCB4Q2FsbGJhY2tQYXJhbWV0ZXJzVHlwZSByZXNwZWN0aXZlbHkuICovDQoxMjY6ICAgICAgICAgICAgICAgICB0eXBlZGVmIHN0cnVjdCB0bXJUaW1lclBhcmFtZXRlcnMNCjEyNzogICAgICAgICAgICAgICAgIHsNCjEyODogICAgICAgICAgICAgICAgIAlUaWNrVHlwZV90CQkJeE1lc3NhZ2VWYWx1ZTsJCS8qPDwgQW4gb3B0aW9uYWwgdmFsdWUgdXNlZCBieSBhIHN1YnNldCBvZiBjb21tYW5kcywgZm9yIGV4YW1wbGUsIHdoZW4gY2hhbmdpbmcgdGhlIHBlcmlvZCBvZiBhIHRpbWVyLiAqLw0KMTI5OiAgICAgICAgICAgICAgICAgCVRpbWVyX3QgKgkJCXB4VGltZXI7CQkJLyo8PCBUaGUgdGltZXIgdG8gd2hpY2ggdGhlIGNvbW1hbmQgd2lsbCBiZSBhcHBsaWVkLiAqLw0KMTMwOiAgICAgICAgICAgICAgICAgfSBUaW1lclBhcmFtZXRlcl90Ow0KMTMxOiAgICAgICAgICAgICAgICAgDQoxMzI6ICAgICAgICAgICAgICAgICANCjEzMzogICAgICAgICAgICAgICAgIHR5cGVkZWYgc3RydWN0IHRtckNhbGxiYWNrUGFyYW1ldGVycw0KMTM0OiAgICAgICAgICAgICAgICAgew0KMTM1OiAgICAgICAgICAgICAgICAgCVBlbmRlZEZ1bmN0aW9uX3QJcHhDYWxsYmFja0Z1bmN0aW9uOwkvKiA8PCBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZS4gKi8NCjEzNjogICAgICAgICAgICAgICAgIAl2b2lkICpwdlBhcmFtZXRlcjE7CQkJCQkJLyogPDwgVGhlIHZhbHVlIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgZmlyc3QgcGFyYW1ldGVyLiAqLw0KMTM3OiAgICAgICAgICAgICAgICAgCXVpbnQzMl90IHVsUGFyYW1ldGVyMjsJCQkJCS8qIDw8IFRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIHNlY29uZCBwYXJhbWV0ZXIuICovDQoxMzg6ICAgICAgICAgICAgICAgICB9IENhbGxiYWNrUGFyYW1ldGVyc190Ow0KMTM5OiAgICAgICAgICAgICAgICAgDQoxNDA6ICAgICAgICAgICAgICAgICAvKiBUaGUgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgdGhlIHR3byBtZXNzYWdlIHR5cGVzLCBhbG9uZyB3aXRoIGFuIGlkZW50aWZpZXINCjE0MTogICAgICAgICAgICAgICAgIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbWVzc2FnZSB0eXBlIGlzIHZhbGlkLiAqLw0KMTQyOiAgICAgICAgICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgdG1yVGltZXJRdWV1ZU1lc3NhZ2UNCjE0MzogICAgICAgICAgICAgICAgIHsNCjE0NDogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90CQkJeE1lc3NhZ2VJRDsJCQkvKjw8IFRoZSBjb21tYW5kIGJlaW5nIHNlbnQgdG8gdGhlIHRpbWVyIHNlcnZpY2UgdGFzay4gKi8NCjE0NTogICAgICAgICAgICAgICAgIAl1bmlvbg0KMTQ2OiAgICAgICAgICAgICAgICAgCXsNCjE0NzogICAgICAgICAgICAgICAgIAkJVGltZXJQYXJhbWV0ZXJfdCB4VGltZXJQYXJhbWV0ZXJzOw0KMTQ4OiAgICAgICAgICAgICAgICAgDQoxNDk6ICAgICAgICAgICAgICAgICAJCS8qIERvbid0IGluY2x1ZGUgeENhbGxiYWNrUGFyYW1ldGVycyBpZiBpdCBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBhcw0KMTUwOiAgICAgICAgICAgICAgICAgCQlpdCBtYWtlcyB0aGUgc3RydWN0dXJlIChhbmQgdGhlcmVmb3JlIHRoZSB0aW1lciBxdWV1ZSkgbGFyZ2VyLiAqLw0KMTUxOiAgICAgICAgICAgICAgICAgCQkjaWYgKCBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgPT0gMSApDQoxNTI6ICAgICAgICAgICAgICAgICAJCQlDYWxsYmFja1BhcmFtZXRlcnNfdCB4Q2FsbGJhY2tQYXJhbWV0ZXJzOw0KMTUzOiAgICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsICovDQoxNTQ6ICAgICAgICAgICAgICAgICAJfSB1Ow0KMTU1OiAgICAgICAgICAgICAgICAgfSBEYWVtb25UYXNrTWVzc2FnZV90Ow0KMTU2OiAgICAgICAgICAgICAgICAgDQoxNTc6ICAgICAgICAgICAgICAgICAvKmxpbnQgLWU5NTYgQSBtYW51YWwgYW5hbHlzaXMgYW5kIGluc3BlY3Rpb24gaGFzIGJlZW4gdXNlZCB0byBkZXRlcm1pbmUgd2hpY2gNCjE1ODogICAgICAgICAgICAgICAgIHN0YXRpYyB2YXJpYWJsZXMgbXVzdCBiZSBkZWNsYXJlZCB2b2xhdGlsZS4gKi8NCjE1OTogICAgICAgICAgICAgICAgIA0KMTYwOiAgICAgICAgICAgICAgICAgLyogVGhlIGxpc3QgaW4gd2hpY2ggYWN0aXZlIHRpbWVycyBhcmUgc3RvcmVkLiAgVGltZXJzIGFyZSByZWZlcmVuY2VkIGluIGV4cGlyZQ0KMTYxOiAgICAgICAgICAgICAgICAgdGltZSBvcmRlciwgd2l0aCB0aGUgbmVhcmVzdCBleHBpcnkgdGltZSBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QuICBPbmx5IHRoZQ0KMTYyOiAgICAgICAgICAgICAgICAgdGltZXIgc2VydmljZSB0YXNrIGlzIGFsbG93ZWQgdG8gYWNjZXNzIHRoZXNlIGxpc3RzLiAqLw0KMTYzOiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBMaXN0X3QgeEFjdGl2ZVRpbWVyTGlzdDE7DQoxNjQ6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIExpc3RfdCB4QWN0aXZlVGltZXJMaXN0MjsNCjE2NTogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgTGlzdF90ICpweEN1cnJlbnRUaW1lckxpc3Q7DQoxNjY6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIExpc3RfdCAqcHhPdmVyZmxvd1RpbWVyTGlzdDsNCjE2NzogICAgICAgICAgICAgICAgIA0KMTY4OiAgICAgICAgICAgICAgICAgLyogQSBxdWV1ZSB0aGF0IGlzIHVzZWQgdG8gc2VuZCBjb21tYW5kcyB0byB0aGUgdGltZXIgc2VydmljZSB0YXNrLiAqLw0KMTY5OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBRdWV1ZUhhbmRsZV90IHhUaW1lclF1ZXVlID0gTlVMTDsNCjE3MDogICAgICAgICAgICAgICAgIA0KMTcxOiAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV94VGltZXJHZXRUaW1lckRhZW1vblRhc2tIYW5kbGUgPT0gMSApDQoxNzI6ICAgICAgICAgICAgICAgICANCjE3MzogICAgICAgICAgICAgICAgIAlQUklWSUxFR0VEX0RBVEEgc3RhdGljIFRhc2tIYW5kbGVfdCB4VGltZXJUYXNrSGFuZGxlID0gTlVMTDsNCjE3NDogICAgICAgICAgICAgICAgIA0KMTc1OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxNzY6ICAgICAgICAgICAgICAgICANCjE3NzogICAgICAgICAgICAgICAgIC8qbGludCArZTk1NiAqLw0KMTc4OiAgICAgICAgICAgICAgICAgDQoxNzk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE4MDogICAgICAgICAgICAgICAgIA0KMTgxOiAgICAgICAgICAgICAgICAgLyoNCjE4MjogICAgICAgICAgICAgICAgICAqIEluaXRpYWxpc2UgdGhlIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgdGhlIHRpbWVyIHNlcnZpY2UgdGFzayBpZiBpdCBoYXMgbm90DQoxODM6ICAgICAgICAgICAgICAgICAgKiBiZWVuIGluaXRpYWxpc2VkIGFscmVhZHkuDQoxODQ6ICAgICAgICAgICAgICAgICAgKi8NCjE4NTogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkNoZWNrRm9yVmFsaWRMaXN0QW5kUXVldWUoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMTg2OiAgICAgICAgICAgICAgICAgDQoxODc6ICAgICAgICAgICAgICAgICAvKg0KMTg4OiAgICAgICAgICAgICAgICAgICogVGhlIHRpbWVyIHNlcnZpY2UgdGFzayAoZGFlbW9uKS4gIFRpbWVyIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCBieSB0aGlzDQoxODk6ICAgICAgICAgICAgICAgICAgKiB0YXNrLiAgT3RoZXIgdGFza3MgY29tbXVuaWNhdGUgd2l0aCB0aGUgdGltZXIgc2VydmljZSB0YXNrIHVzaW5nIHRoZQ0KMTkwOiAgICAgICAgICAgICAgICAgICogeFRpbWVyUXVldWUgcXVldWUuDQoxOTE6ICAgICAgICAgICAgICAgICAgKi8NCjE5MjogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydlRpbWVyVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjE5MzogICAgICAgICAgICAgICAgIA0KMTk0OiAgICAgICAgICAgICAgICAgLyoNCjE5NTogICAgICAgICAgICAgICAgICAqIENhbGxlZCBieSB0aGUgdGltZXIgc2VydmljZSB0YXNrIHRvIGludGVycHJldCBhbmQgcHJvY2VzcyBhIGNvbW1hbmQgaXQNCjE5NjogICAgICAgICAgICAgICAgICAqIHJlY2VpdmVkIG9uIHRoZSB0aW1lciBxdWV1ZS4NCjE5NzogICAgICAgICAgICAgICAgICAqLw0KMTk4OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UHJvY2Vzc1JlY2VpdmVkQ29tbWFuZHMoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMTk5OiAgICAgICAgICAgICAgICAgDQoyMDA6ICAgICAgICAgICAgICAgICAvKg0KMjAxOiAgICAgICAgICAgICAgICAgICogSW5zZXJ0IHRoZSB0aW1lciBpbnRvIGVpdGhlciB4QWN0aXZlVGltZXJMaXN0MSwgb3IgeEFjdGl2ZVRpbWVyTGlzdDIsDQoyMDI6ICAgICAgICAgICAgICAgICAgKiBkZXBlbmRpbmcgb24gaWYgdGhlIGV4cGlyZSB0aW1lIGNhdXNlcyBhIHRpbWVyIGNvdW50ZXIgb3ZlcmZsb3cuDQoyMDM6ICAgICAgICAgICAgICAgICAgKi8NCjIwNDogICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHBydkluc2VydFRpbWVySW5BY3RpdmVMaXN0KCBUaW1lcl90ICogY29uc3QgcHhUaW1lciwgY29uc3QgVGlja1R5cGVfdCB4TmV4dEV4cGlyeVRpbWUsIGNvbnN0IFRpY2tUeXBlX3QgeFRpbWVOb3csIGNvbnN0IFRpY2tUeXBlX3QgeENvbW1hbmRUaW1lICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjIwNTogICAgICAgICAgICAgICAgIA0KMjA2OiAgICAgICAgICAgICAgICAgLyoNCjIwNzogICAgICAgICAgICAgICAgICAqIEFuIGFjdGl2ZSB0aW1lciBoYXMgcmVhY2hlZCBpdHMgZXhwaXJlIHRpbWUuICBSZWxvYWQgdGhlIHRpbWVyIGlmIGl0IGlzIGFuDQoyMDg6ICAgICAgICAgICAgICAgICAgKiBhdXRvIHJlbG9hZCB0aW1lciwgdGhlbiBjYWxsIGl0cyBjYWxsYmFjay4NCjIwOTogICAgICAgICAgICAgICAgICAqLw0KMjEwOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UHJvY2Vzc0V4cGlyZWRUaW1lciggY29uc3QgVGlja1R5cGVfdCB4TmV4dEV4cGlyZVRpbWUsIGNvbnN0IFRpY2tUeXBlX3QgeFRpbWVOb3cgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMjExOiAgICAgICAgICAgICAgICAgDQoyMTI6ICAgICAgICAgICAgICAgICAvKg0KMjEzOiAgICAgICAgICAgICAgICAgICogVGhlIHRpY2sgY291bnQgaGFzIG92ZXJmbG93ZWQuICBTd2l0Y2ggdGhlIHRpbWVyIGxpc3RzIGFmdGVyIGVuc3VyaW5nIHRoZQ0KMjE0OiAgICAgICAgICAgICAgICAgICogY3VycmVudCB0aW1lciBsaXN0IGRvZXMgbm90IHN0aWxsIHJlZmVyZW5jZSBzb21lIHRpbWVycy4NCjIxNTogICAgICAgICAgICAgICAgICAqLw0KMjE2OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2U3dpdGNoVGltZXJMaXN0cyggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoyMTc6ICAgICAgICAgICAgICAgICANCjIxODogICAgICAgICAgICAgICAgIC8qDQoyMTk6ICAgICAgICAgICAgICAgICAgKiBPYnRhaW4gdGhlIGN1cnJlbnQgdGljayBjb3VudCwgc2V0dGluZyAqcHhUaW1lckxpc3RzV2VyZVN3aXRjaGVkIHRvIHBkVFJVRQ0KMjIwOiAgICAgICAgICAgICAgICAgICogaWYgYSB0aWNrIGNvdW50IG92ZXJmbG93IG9jY3VycmVkIHNpbmNlIHBydlNhbXBsZVRpbWVOb3coKSB3YXMgbGFzdCBjYWxsZWQuDQoyMjE6ICAgICAgICAgICAgICAgICAgKi8NCjIyMjogICAgICAgICAgICAgICAgIHN0YXRpYyBUaWNrVHlwZV90IHBydlNhbXBsZVRpbWVOb3coIEJhc2VUeXBlX3QgKiBjb25zdCBweFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMjIzOiAgICAgICAgICAgICAgICAgDQoyMjQ6ICAgICAgICAgICAgICAgICAvKg0KMjI1OiAgICAgICAgICAgICAgICAgICogSWYgdGhlIHRpbWVyIGxpc3QgY29udGFpbnMgYW55IGFjdGl2ZSB0aW1lcnMgdGhlbiByZXR1cm4gdGhlIGV4cGlyZSB0aW1lIG9mDQoyMjY6ICAgICAgICAgICAgICAgICAgKiB0aGUgdGltZXIgdGhhdCB3aWxsIGV4cGlyZSBmaXJzdCBhbmQgc2V0ICpweExpc3RXYXNFbXB0eSB0byBmYWxzZS4gIElmIHRoZQ0KMjI3OiAgICAgICAgICAgICAgICAgICogdGltZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGFueSB0aW1lcnMgdGhlbiByZXR1cm4gMCBhbmQgc2V0ICpweExpc3RXYXNFbXB0eQ0KMjI4OiAgICAgICAgICAgICAgICAgICogdG8gcGRUUlVFLg0KMjI5OiAgICAgICAgICAgICAgICAgICovDQoyMzA6ICAgICAgICAgICAgICAgICBzdGF0aWMgVGlja1R5cGVfdCBwcnZHZXROZXh0RXhwaXJlVGltZSggQmFzZVR5cGVfdCAqIGNvbnN0IHB4TGlzdFdhc0VtcHR5ICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjIzMTogICAgICAgICAgICAgICAgIA0KMjMyOiAgICAgICAgICAgICAgICAgLyoNCjIzMzogICAgICAgICAgICAgICAgICAqIElmIGEgdGltZXIgaGFzIGV4cGlyZWQsIHByb2Nlc3MgaXQuICBPdGhlcndpc2UsIGJsb2NrIHRoZSB0aW1lciBzZXJ2aWNlIHRhc2sNCjIzNDogICAgICAgICAgICAgICAgICAqIHVudGlsIGVpdGhlciBhIHRpbWVyIGRvZXMgZXhwaXJlIG9yIGEgY29tbWFuZCBpcyByZWNlaXZlZC4NCjIzNTogICAgICAgICAgICAgICAgICAqLw0KMjM2OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UHJvY2Vzc1RpbWVyT3JCbG9ja1Rhc2soIGNvbnN0IFRpY2tUeXBlX3QgeE5leHRFeHBpcmVUaW1lLCBjb25zdCBCYXNlVHlwZV90IHhMaXN0V2FzRW1wdHkgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMjM3OiAgICAgICAgICAgICAgICAgDQoyMzg6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIzOTogICAgICAgICAgICAgICAgIA0KMjQwOiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGltZXJDcmVhdGVUaW1lclRhc2soIHZvaWQgKQ0KMjQxOiAgICAgICAgICAgICAgICAgew0KQkZEMDdBNkMgICAgICA0RkU5ICAgQURESVUgU1AsIFNQLCAtNDgNCkJGRDA3QTZFICAgICAgQ0JFQiAgIFNXIFJBLCA0NChTUCkNCkJGRDA3QTcwICAgICAgQ0JDQSAgIFNXIFM4LCA0MChTUCkNCkJGRDA3QTcyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoyNDI6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm4gPSBwZEZBSUw7DQpCRkQwN0E3NCAgMDAyMEY4MUUgICBTVyBaRVJPLCAzMihTOCkNCjI0MzogICAgICAgICAgICAgICAgIA0KMjQ0OiAgICAgICAgICAgICAgICAgCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkIGlmDQoyNDU6ICAgICAgICAgICAgICAgICAJY29uZmlnVVNFX1RJTUVSUyBpcyBzZXQgdG8gMS4gIENoZWNrIHRoYXQgdGhlIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgdGhlDQoyNDY6ICAgICAgICAgICAgICAgICAJdGltZXIgc2VydmljZSB0YXNrIGhhcyBiZWVuIGNyZWF0ZWQvaW5pdGlhbGlzZWQuICBJZiB0aW1lcnMgaGF2ZSBhbHJlYWR5DQoyNDc6ICAgICAgICAgICAgICAgICAJYmVlbiBjcmVhdGVkIHRoZW4gdGhlIGluaXRpYWxpc2F0aW9uIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gcGVyZm9ybWVkLiAqLw0KMjQ4OiAgICAgICAgICAgICAgICAgCXBydkNoZWNrRm9yVmFsaWRMaXN0QW5kUXVldWUoKTsNCkJGRDA3QTc4ICAzNUY0NzdFOCAgIEpBTFMgcHJ2Q2hlY2tGb3JWYWxpZExpc3RBbmRRdWV1ZQ0KQkZEMDdBN0EgIDBDMDAzNUY0ICAgTEhVIFQ3LCAzMDcyKFM0KQ0KQkZEMDdBN0MgICAgICAwQzAwICAgTk9QDQoyNDk6ICAgICAgICAgICAgICAgICANCjI1MDogICAgICAgICAgICAgICAgIAlpZiggeFRpbWVyUXVldWUgIT0gTlVMTCApDQpCRkQwN0E3RSAgODA2OEZDNUMgICBMVyBWMCwgLTMyNjY0KEdQKQ0KQkZEMDdBODIgIDAwMTU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDdBQjANCjI1MTogICAgICAgICAgICAgICAgIAl7DQoyNTI6ICAgICAgICAgICAgICAgICAJCSNpZiAoIElOQ0xVREVfeFRpbWVyR2V0VGltZXJEYWVtb25UYXNrSGFuZGxlID09IDEgKQ0KMjUzOiAgICAgICAgICAgICAgICAgCQl7DQoyNTQ6ICAgICAgICAgICAgICAgICAJCQkvKiBDcmVhdGUgdGhlIHRpbWVyIHRhc2ssIHN0b3JpbmcgaXRzIGhhbmRsZSBpbiB4VGltZXJUYXNrSGFuZGxlIHNvDQoyNTU6ICAgICAgICAgICAgICAgICAJCQlpdCBjYW4gYmUgcmV0dXJuZWQgYnkgdGhlIHhUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZSgpIGZ1bmN0aW9uLiAqLw0KMjU2OiAgICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHhUYXNrQ3JlYXRlKCBwcnZUaW1lclRhc2ssICJUbXIgU3ZjIiwgKCB1aW50MTZfdCApIGNvbmZpZ1RJTUVSX1RBU0tfU1RBQ0tfREVQVEgsIE5VTEwsICggKCBVQmFzZVR5cGVfdCApIGNvbmZpZ1RJTUVSX1RBU0tfUFJJT1JJVFkgKSB8IHBvcnRQUklWSUxFR0VfQklULCAmeFRpbWVyVGFza0hhbmRsZSApOw0KMjU3OiAgICAgICAgICAgICAgICAgCQl9DQoyNTg6ICAgICAgICAgICAgICAgICAJCSNlbHNlDQoyNTk6ICAgICAgICAgICAgICAgICAJCXsNCjI2MDogICAgICAgICAgICAgICAgIAkJCS8qIENyZWF0ZSB0aGUgdGltZXIgdGFzayB3aXRob3V0IHN0b3JpbmcgaXRzIGhhbmRsZS4gKi8NCjI2MTogICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSB4VGFza0NyZWF0ZSggcHJ2VGltZXJUYXNrLCAiVG1yIFN2YyIsICggdWludDE2X3QgKSBjb25maWdUSU1FUl9UQVNLX1NUQUNLX0RFUFRILCBOVUxMLCAoICggVUJhc2VUeXBlX3QgKSBjb25maWdUSU1FUl9UQVNLX1BSSU9SSVRZICkgfCBwb3J0UFJJVklMRUdFX0JJVCwgTlVMTCk7DQpCRkQwN0E4NiAgICAgIEVEMDIgICBMSSBWMCwgMg0KQkZEMDdBODggICAgICBDODQ0ICAgU1cgVjAsIDE2KFNQKQ0KQkZEMDdBOEEgICAgICBDODA1ICAgU1cgWkVSTywgMjAoU1ApDQpCRkQwN0E4QyAgICAgIEM4MDYgICBTVyBaRVJPLCAyNChTUCkNCkJGRDA3QThFICAgICAgQzgwNyAgIFNXIFpFUk8sIDI4KFNQKQ0KQkZEMDdBOTAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA3QTkyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA3QTk0ICA5NzM5MzA4MiAgIEFERElVIEEwLCBWMCwgLTI2ODIzDQpCRkQwN0E5NiAgNDFBMjk3MzkgICBCRVEgVDksIFQ5LCAweEJGRDBGRERFDQpCRkQwN0E5OCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDdBOUEgIDMwQTJCRkQxICAgTERDMSBGMzAsIDEyNDUwKFMxKQ0KQkZEMDdBOUMgIDlBRTAzMEEyICAgQURESVUgQTEsIFYwLCAtMjU4ODgNCkJGRDA3QTlFICAzMEMwOUFFMCAgIFNXQzEgRjIzLCAxMjQ4MChaRVJPKQ0KQkZEMDdBQTAgIDAxN0MzMEMwICAgQURESVUgQTIsIFpFUk8sIDM4MA0KQkZEMDdBQTQgICAgICAwQ0UwICAgTU9WRSBBMywgWkVSTw0KQkZEMDdBQTYgIDBBOUE3N0U4ICAgSkFMUyB4VGFza0dlbmVyaWNDcmVhdGUNCkJGRDA3QUE4ICAgICAgMEE5QSAgIExCVSBBMSwgMTAoUzEpDQpCRkQwN0FBQSAgICAgIDBDMDAgICBOT1ANCkJGRDA3QUFDICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkNCjI2MjogICAgICAgICAgICAgICAgIAkJfQ0KMjYzOiAgICAgICAgICAgICAgICAgCQkjZW5kaWYNCjI2NDogICAgICAgICAgICAgICAgIAl9DQoyNjU6ICAgICAgICAgICAgICAgICAJZWxzZQ0KMjY2OiAgICAgICAgICAgICAgICAgCXsNCjI2NzogICAgICAgICAgICAgICAgIAkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjY4OiAgICAgICAgICAgICAgICAgCX0NCjI2OTogICAgICAgICAgICAgICAgIA0KMjcwOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeFJldHVybiApOw0KQkZEMDdBQjAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDdBQjQgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDdBQ0ENCkJGRDA3QUI4ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwN0FCQSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwN0FCQyAgOUFFODMwODIgICBBRERJVSBBMCwgVjAsIC0yNTg4MA0KQkZEMDdBQkUgIDMwQTA5QUU4ICAgU1dDMSBGMjMsIDEyNDQ4KFQwKQ0KQkZEMDdBQzAgIDAxMEUzMEEwICAgQURESVUgQTEsIFpFUk8sIDI3MA0KQkZEMDdBQzQgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwN0FDNiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDdBQzggICAgICAwQzAwICAgTk9QDQoyNzE6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwN0FDQSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQoyNzI6ICAgICAgICAgICAgICAgICB9DQpCRkQwN0FDRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDdBRDAgICAgICA0QkVCICAgTFcgUkEsIDQ0KFNQKQ0KQkZEMDdBRDIgICAgICA0QkNBICAgTFcgUzgsIDQwKFNQKQ0KQkZEMDdBRDQgICAgICA0QzE5ICAgQURESVUgU1AsIFNQLCA0OA0KQkZEMDdBRDYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDdBRDggICAgICAwQzAwICAgTk9QDQoyNzM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI3NDogICAgICAgICAgICAgICAgIA0KMjc1OiAgICAgICAgICAgICAgICAgVGltZXJIYW5kbGVfdCB4VGltZXJDcmVhdGUoIGNvbnN0IGNoYXIgKiBjb25zdCBwY1RpbWVyTmFtZSwgY29uc3QgVGlja1R5cGVfdCB4VGltZXJQZXJpb2RJblRpY2tzLCBjb25zdCBVQmFzZVR5cGVfdCB1eEF1dG9SZWxvYWQsIHZvaWQgKiBjb25zdCBwdlRpbWVySUQsIFRpbWVyQ2FsbGJhY2tGdW5jdGlvbl90IHB4Q2FsbGJhY2tGdW5jdGlvbiApIC8qbGludCAhZTk3MSBVbnF1YWxpZmllZCBjaGFyIHR5cGVzIGFyZSBhbGxvd2VkIGZvciBzdHJpbmdzIGFuZCBzaW5nbGUgY2hhcmFjdGVycyBvbmx5LiAqLw0KMjc2OiAgICAgICAgICAgICAgICAgew0KQkZEMDYxRDggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA2MURBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA2MURDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA2MURFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNjFFMCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwNjFFNCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQpCRkQwNjFFOCAgMDAyOEY4REUgICBTVyBBMiwgNDAoUzgpDQpCRkQwNjFFQyAgMDAyQ0Y4RkUgICBTVyBBMywgNDQoUzgpDQoyNzc6ICAgICAgICAgICAgICAgICBUaW1lcl90ICpweE5ld1RpbWVyOw0KMjc4OiAgICAgICAgICAgICAgICAgDQoyNzk6ICAgICAgICAgICAgICAgICAJLyogQWxsb2NhdGUgdGhlIHRpbWVyIHN0cnVjdHVyZS4gKi8NCjI4MDogICAgICAgICAgICAgICAgIAlpZiggeFRpbWVyUGVyaW9kSW5UaWNrcyA9PSAoIFRpY2tUeXBlX3QgKSAwVSApDQpCRkQwNjFGMCAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwNjFGNCAgMDAwNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjIwMA0KMjgxOiAgICAgICAgICAgICAgICAgCXsNCjI4MjogICAgICAgICAgICAgICAgIAkJcHhOZXdUaW1lciA9IE5VTEw7DQpCRkQwNjFGOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCkJGRDA2MUZDICAgICAgQ0MyRSAgIEIgMHhCRkQwNjI1QQ0KQkZEMDYxRkUgICAgICAwQzAwICAgTk9QDQoyODM6ICAgICAgICAgICAgICAgICAJfQ0KMjg0OiAgICAgICAgICAgICAgICAgCWVsc2UNCjI4NTogICAgICAgICAgICAgICAgIAl7DQoyODY6ICAgICAgICAgICAgICAgICAJCXB4TmV3VGltZXIgPSAoIFRpbWVyX3QgKiApIHB2UG9ydE1hbGxvYyggc2l6ZW9mKCBUaW1lcl90ICkgKTsNCkJGRDA2MjAwICAgICAgRUUyOCAgIExJIEEwLCA0MA0KQkZEMDYyMDIgIDExMTY3N0U4ICAgSkFMUyBwdlBvcnRNYWxsb2MNCkJGRDA2MjA0ICAwQzAwMTExNiAgIEFEREkgVDAsIFM2LCAzMDcyDQpCRkQwNjIwNiAgICAgIDBDMDAgICBOT1ANCkJGRDA2MjA4ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjI4NzogICAgICAgICAgICAgICAgIAkJaWYoIHB4TmV3VGltZXIgIT0gTlVMTCApDQpCRkQwNjIwQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjIxMCAgMDAyMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjI1QQ0KMjg4OiAgICAgICAgICAgICAgICAgCQl7DQoyODk6ICAgICAgICAgICAgICAgICAJCQkvKiBFbnN1cmUgdGhlIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgdGhlIHRpbWVyIHNlcnZpY2UgdGFzayBoYXMgYmVlbg0KMjkwOiAgICAgICAgICAgICAgICAgCQkJY3JlYXRlZC9pbml0aWFsaXNlZC4gKi8NCjI5MTogICAgICAgICAgICAgICAgIAkJCXBydkNoZWNrRm9yVmFsaWRMaXN0QW5kUXVldWUoKTsNCkJGRDA2MjE0ICAzNUY0NzdFOCAgIEpBTFMgcHJ2Q2hlY2tGb3JWYWxpZExpc3RBbmRRdWV1ZQ0KQkZEMDYyMTYgIDBDMDAzNUY0ICAgTEhVIFQ3LCAzMDcyKFM0KQ0KQkZEMDYyMTggICAgICAwQzAwICAgTk9QDQoyOTI6ICAgICAgICAgICAgICAgICANCjI5MzogICAgICAgICAgICAgICAgIAkJCS8qIEluaXRpYWxpc2UgdGhlIHRpbWVyIHN0cnVjdHVyZSBtZW1iZXJzIHVzaW5nIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAqLw0KMjk0OiAgICAgICAgICAgICAgICAgCQkJcHhOZXdUaW1lci0+cGNUaW1lck5hbWUgPSBwY1RpbWVyTmFtZTsNCkJGRDA2MjFBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2MjFFICAwMDIwRkM3RSAgIExXIFYxLCAzMihTOCkNCkJGRDA2MjIyICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMjk1OiAgICAgICAgICAgICAgICAgCQkJcHhOZXdUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcyA9IHhUaW1lclBlcmlvZEluVGlja3M7DQpCRkQwNjIyNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjIyOCAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpDQpCRkQwNjIyQyAgICAgIEU5QTYgICBTVyBWMSwgMjQoVjApDQoyOTY6ICAgICAgICAgICAgICAgICAJCQlweE5ld1RpbWVyLT51eEF1dG9SZWxvYWQgPSB1eEF1dG9SZWxvYWQ7DQpCRkQwNjIyRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjIzMiAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpDQpCRkQwNjIzNiAgICAgIEU5QTcgICBTVyBWMSwgMjgoVjApDQoyOTc6ICAgICAgICAgICAgICAgICAJCQlweE5ld1RpbWVyLT5wdlRpbWVySUQgPSBwdlRpbWVySUQ7DQpCRkQwNjIzOCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjIzQyAgMDAyQ0ZDN0UgICBMVyBWMSwgNDQoUzgpDQpCRkQwNjI0MCAgICAgIEU5QTggICBTVyBWMSwgMzIoVjApDQoyOTg6ICAgICAgICAgICAgICAgICAJCQlweE5ld1RpbWVyLT5weENhbGxiYWNrRnVuY3Rpb24gPSBweENhbGxiYWNrRnVuY3Rpb247DQpCRkQwNjI0MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjI0NiAgMDAzMEZDN0UgICBMVyBWMSwgNDgoUzgpDQpCRkQwNjI0QSAgICAgIEU5QTkgICBTVyBWMSwgMzYoVjApDQoyOTk6ICAgICAgICAgICAgICAgICAJCQl2TGlzdEluaXRpYWxpc2VJdGVtKCAmKCBweE5ld1RpbWVyLT54VGltZXJMaXN0SXRlbSApICk7DQpCRkQwNjI0QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjI1MCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA2MjUyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNjI1NCAgNEVFNjc3RTggICBKQUxTIHZMaXN0SW5pdGlhbGlzZUl0ZW0NCkJGRDA2MjU2ICAgICAgNEVFNiAgIEFERElVIFM3LCBTNywgMw0KQkZEMDYyNTggICAgICAwQzAwICAgTk9QDQozMDA6ICAgICAgICAgICAgICAgICANCjMwMTogICAgICAgICAgICAgICAgIAkJCXRyYWNlVElNRVJfQ1JFQVRFKCBweE5ld1RpbWVyICk7DQozMDI6ICAgICAgICAgICAgICAgICAJCX0NCjMwMzogICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzA0OiAgICAgICAgICAgICAgICAgCQl7DQozMDU6ICAgICAgICAgICAgICAgICAJCQl0cmFjZVRJTUVSX0NSRUFURV9GQUlMRUQoKTsNCjMwNjogICAgICAgICAgICAgICAgIAkJfQ0KMzA3OiAgICAgICAgICAgICAgICAgCX0NCjMwODogICAgICAgICAgICAgICAgIA0KMzA5OiAgICAgICAgICAgICAgICAgCS8qIDAgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHhUaW1lclBlcmlvZEluVGlja3MuICovDQozMTA6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCAoIHhUaW1lclBlcmlvZEluVGlja3MgPiAwICkgKTsNCkJGRDA2MjVBICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDA2MjVFICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA2Mjc0DQpCRkQwNjI2MiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDYyNjQgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDYyNjYgIDlBRTgzMDgyICAgQURESVUgQTAsIFYwLCAtMjU4ODANCkJGRDA2MjY4ICAzMEEwOUFFOCAgIFNXQzEgRjIzLCAxMjQ0OChUMCkNCkJGRDA2MjZBICAwMTM2MzBBMCAgIEFERElVIEExLCBaRVJPLCAzMTANCkJGRDA2MjZFICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDYyNzAgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA2MjcyICAgICAgMEMwMCAgIE5PUA0KMzExOiAgICAgICAgICAgICAgICAgDQozMTI6ICAgICAgICAgICAgICAgICAJcmV0dXJuICggVGltZXJIYW5kbGVfdCApIHB4TmV3VGltZXI7DQpCRkQwNjI3NCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQozMTM6ICAgICAgICAgICAgICAgICB9DQpCRkQwNjI3OCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDYyN0EgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDYyN0MgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDYyN0UgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDYyODAgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDYyODIgICAgICAwQzAwICAgTk9QDQozMTQ6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMxNTogICAgICAgICAgICAgICAgIA0KMzE2OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGltZXJHZW5lcmljQ29tbWFuZCggVGltZXJIYW5kbGVfdCB4VGltZXIsIGNvbnN0IEJhc2VUeXBlX3QgeENvbW1hbmRJRCwgY29uc3QgVGlja1R5cGVfdCB4T3B0aW9uYWxWYWx1ZSwgQmFzZVR5cGVfdCAqIGNvbnN0IHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4sIGNvbnN0IFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjMxNzogICAgICAgICAgICAgICAgIHsNCkJGRDA1QTFDICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4DQpCRkQwNUExRSAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApDQpCRkQwNUEyMCAgICAgIENCQ0EgICBTVyBTOCwgNDAoU1ApDQpCRkQwNUEyMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDVBMjQgIDAwMzBGODlFICAgU1cgQTAsIDQ4KFM4KQ0KQkZEMDVBMjggIDAwMzRGOEJFICAgU1cgQTEsIDUyKFM4KQ0KQkZEMDVBMkMgIDAwMzhGOERFICAgU1cgQTIsIDU2KFM4KQ0KQkZEMDVBMzAgIDAwM0NGOEZFICAgU1cgQTMsIDYwKFM4KQ0KMzE4OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuID0gcGRGQUlMOw0KQkZEMDVBMzQgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQozMTk6ICAgICAgICAgICAgICAgICBEYWVtb25UYXNrTWVzc2FnZV90IHhNZXNzYWdlOw0KMzIwOiAgICAgICAgICAgICAgICAgDQozMjE6ICAgICAgICAgICAgICAgICAJLyogU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIHRpbWVyIHNlcnZpY2UgdGFzayB0byBwZXJmb3JtIGEgcGFydGljdWxhciBhY3Rpb24NCjMyMjogICAgICAgICAgICAgICAgIAlvbiBhIHBhcnRpY3VsYXIgdGltZXIgZGVmaW5pdGlvbi4gKi8NCjMyMzogICAgICAgICAgICAgICAgIAlpZiggeFRpbWVyUXVldWUgIT0gTlVMTCApDQpCRkQwNUEzOCAgODA2OEZDNUMgICBMVyBWMCwgLTMyNjY0KEdQKQ0KQkZEMDVBM0MgIDAwNDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDVBQ0UNCjMyNDogICAgICAgICAgICAgICAgIAl7DQozMjU6ICAgICAgICAgICAgICAgICAJCS8qIFNlbmQgYSBjb21tYW5kIHRvIHRoZSB0aW1lciBzZXJ2aWNlIHRhc2sgdG8gc3RhcnQgdGhlIHhUaW1lciB0aW1lci4gKi8NCjMyNjogICAgICAgICAgICAgICAgIAkJeE1lc3NhZ2UueE1lc3NhZ2VJRCA9IHhDb21tYW5kSUQ7DQpCRkQwNUE0MCAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpDQpCRkQwNUE0NCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQozMjc6ICAgICAgICAgICAgICAgICAJCXhNZXNzYWdlLnUueFRpbWVyUGFyYW1ldGVycy54TWVzc2FnZVZhbHVlID0geE9wdGlvbmFsVmFsdWU7DQpCRkQwNUE0OCAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpDQpCRkQwNUE0QyAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQozMjg6ICAgICAgICAgICAgICAgICAJCXhNZXNzYWdlLnUueFRpbWVyUGFyYW1ldGVycy5weFRpbWVyID0gKCBUaW1lcl90ICogKSB4VGltZXI7DQpCRkQwNUE1MCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwNUE1NCAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQozMjk6ICAgICAgICAgICAgICAgICANCjMzMDogICAgICAgICAgICAgICAgIAkJaWYoIHhDb21tYW5kSUQgPCB0bXJGSVJTVF9GUk9NX0lTUl9DT01NQU5EICkNCkJGRDA1QTU4ICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkNCkJGRDA1QTVDICAwMDA2OTA0MiAgIFNMVEkgVjAsIFYwLCA2DQpCRkQwNUE2MCAgMDAyNzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNUFCMg0KMzMxOiAgICAgICAgICAgICAgICAgCQl7DQozMzI6ICAgICAgICAgICAgICAgICAJCQlpZiggeFRhc2tHZXRTY2hlZHVsZXJTdGF0ZSgpID09IHRhc2tTQ0hFRFVMRVJfUlVOTklORyApDQpCRkQwNUE2NCAgNEE4RTc3RTggICBKQUxTIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUNCkJGRDA1QTY2ICAgICAgNEE4RSAgIExXIFM0LCA1NihTUCkNCkJGRDA1QTY4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDVBNkEgICAgICAwQzYyICAgTU9WRSBWMSwgVjANCkJGRDA1QTZDICAgICAgRUQwMiAgIExJIFYwLCAyDQpCRkQwNUE2RSAgMDAxMUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA1QTk0DQpCRkQwNUE3MCAgMEMwMDAwMTEgICBTTEwgWkVSTywgUzEsIDENCkJGRDA1QTcyICAgICAgMEMwMCAgIE5PUA0KMzMzOiAgICAgICAgICAgICAgICAgCQkJew0KMzM0OiAgICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSB4UXVldWVTZW5kVG9CYWNrKCB4VGltZXJRdWV1ZSwgJnhNZXNzYWdlLCB4VGlja3NUb1dhaXQgKTsNCkJGRDA1QTc0ICA4MDY4RkM3QyAgIExXIFYxLCAtMzI2NjQoR1ApDQpCRkQwNUE3OCAgMDAxNDMwNUUgICBBRERJVSBWMCwgUzgsIDIwDQpCRkQwNUE3QyAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDVBN0UgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDA1QTgwICAwMDQwRkNERSAgIExXIEEyLCA2NChTOCkNCkJGRDA1QTg0ICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8NCkJGRDA1QTg2ICAwNkEyNzdFOCAgIEpBTFMgeFF1ZXVlR2VuZXJpY1NlbmQNCkJGRDA1QTg4ICAgICAgMDZBMiAgIEFERFUgQTEsIFMxLCBWMA0KQkZEMDVBOEEgICAgICAwQzAwICAgTk9QDQpCRkQwNUE4QyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwNUE5MCAgICAgIENDMUUgICBCIDB4QkZEMDVBQ0UNCkJGRDA1QTkyICAgICAgMEMwMCAgIE5PUA0KMzM1OiAgICAgICAgICAgICAgICAgCQkJfQ0KMzM2OiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KMzM3OiAgICAgICAgICAgICAgICAgCQkJew0KMzM4OiAgICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSB4UXVldWVTZW5kVG9CYWNrKCB4VGltZXJRdWV1ZSwgJnhNZXNzYWdlLCB0bXJOT19ERUxBWSApOw0KQkZEMDVBOTQgIDgwNjhGQzdDICAgTFcgVjEsIC0zMjY2NChHUCkNCkJGRDA1QTk4ICAwMDE0MzA1RSAgIEFERElVIFYwLCBTOCwgMjANCkJGRDA1QTlDICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwNUE5RSAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDVBQTAgICAgICAwQ0MwICAgTU9WRSBBMiwgWkVSTw0KQkZEMDVBQTIgICAgICAwQ0UwICAgTU9WRSBBMywgWkVSTw0KQkZEMDVBQTQgIDA2QTI3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljU2VuZA0KQkZEMDVBQTYgICAgICAwNkEyICAgQUREVSBBMSwgUzEsIFYwDQpCRkQwNUFBOCAgICAgIDBDMDAgICBOT1ANCkJGRDA1QUFBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA1QUFFICAgICAgQ0MwRiAgIEIgMHhCRkQwNUFDRQ0KQkZEMDVBQjAgICAgICAwQzAwICAgTk9QDQozMzk6ICAgICAgICAgICAgICAgICAJCQl9DQozNDA6ICAgICAgICAgICAgICAgICAJCX0NCjM0MTogICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzQyOiAgICAgICAgICAgICAgICAgCQl7DQozNDM6ICAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0geFF1ZXVlU2VuZFRvQmFja0Zyb21JU1IoIHhUaW1lclF1ZXVlLCAmeE1lc3NhZ2UsIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gKTsNCkJGRDA1QUIyICA4MDY4RkM3QyAgIExXIFYxLCAtMzI2NjQoR1ApDQpCRkQwNUFCNiAgMDAxNDMwNUUgICBBRERJVSBWMCwgUzgsIDIwDQpCRkQwNUFCQSAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDVBQkMgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDA1QUJFICAwMDNDRkNERSAgIExXIEEyLCA2MChTOCkNCkJGRDA1QUMyICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8NCkJGRDA1QUM0ICAxMUVBNzdFOCAgIEpBTFMgeFF1ZXVlR2VuZXJpY1NlbmRGcm9tSVNSDQpCRkQwNUFDNiAgMEMwMDExRUEgICBBRERJIFQ3LCBUMiwgMzA3Mg0KQkZEMDVBQzggICAgICAwQzAwICAgTk9QDQpCRkQwNUFDQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQozNDQ6ICAgICAgICAgICAgICAgICAJCX0NCjM0NTogICAgICAgICAgICAgICAgIA0KMzQ2OiAgICAgICAgICAgICAgICAgCQl0cmFjZVRJTUVSX0NPTU1BTkRfU0VORCggeFRpbWVyLCB4Q29tbWFuZElELCB4T3B0aW9uYWxWYWx1ZSwgeFJldHVybiApOw0KMzQ3OiAgICAgICAgICAgICAgICAgCX0NCjM0ODogICAgICAgICAgICAgICAgIAllbHNlDQozNDk6ICAgICAgICAgICAgICAgICAJew0KMzUwOiAgICAgICAgICAgICAgICAgCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNTE6ICAgICAgICAgICAgICAgICAJfQ0KMzUyOiAgICAgICAgICAgICAgICAgDQozNTM6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwNUFDRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQozNTQ6ICAgICAgICAgICAgICAgICB9DQpCRkQwNUFEMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDVBRDQgICAgICA0QkVCICAgTFcgUkEsIDQ0KFNQKQ0KQkZEMDVBRDYgICAgICA0QkNBICAgTFcgUzgsIDQwKFNQKQ0KQkZEMDVBRDggICAgICA0QzE5ICAgQURESVUgU1AsIFNQLCA0OA0KQkZEMDVBREEgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDVBREMgICAgICAwQzAwICAgTk9QDQozNTU6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM1NjogICAgICAgICAgICAgICAgIA0KMzU3OiAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV94VGltZXJHZXRUaW1lckRhZW1vblRhc2tIYW5kbGUgPT0gMSApDQozNTg6ICAgICAgICAgICAgICAgICANCjM1OTogICAgICAgICAgICAgICAgIAlUYXNrSGFuZGxlX3QgeFRpbWVyR2V0VGltZXJEYWVtb25UYXNrSGFuZGxlKCB2b2lkICkNCjM2MDogICAgICAgICAgICAgICAgIAl7DQozNjE6ICAgICAgICAgICAgICAgICAJCS8qIElmIHhUaW1lckdldFRpbWVyRGFlbW9uVGFza0hhbmRsZSgpIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBoYXMgYmVlbg0KMzYyOiAgICAgICAgICAgICAgICAgCQlzdGFydGVkLCB0aGVuIHhUaW1lclRhc2tIYW5kbGUgd2lsbCBiZSBOVUxMLiAqLw0KMzYzOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoICggeFRpbWVyVGFza0hhbmRsZSAhPSBOVUxMICkgKTsNCjM2NDogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhUaW1lclRhc2tIYW5kbGU7DQozNjU6ICAgICAgICAgICAgICAgICAJfQ0KMzY2OiAgICAgICAgICAgICAgICAgDQozNjc6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjM2ODogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzY5OiAgICAgICAgICAgICAgICAgDQozNzA6ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogcGNUaW1lckdldFRpbWVyTmFtZSggVGltZXJIYW5kbGVfdCB4VGltZXIgKQ0KMzcxOiAgICAgICAgICAgICAgICAgew0KQkZEMDlCMDQgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYNCkJGRDA5QjA2ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA5QjA4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOUIwQSAgMDAxMEY4OUUgICBTVyBBMCwgMTYoUzgpDQozNzI6ICAgICAgICAgICAgICAgICBUaW1lcl90ICpweFRpbWVyID0gKCBUaW1lcl90ICogKSB4VGltZXI7DQpCRkQwOUIwRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOUIxMiAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCjM3MzogICAgICAgICAgICAgICAgIA0KMzc0OiAgICAgICAgICAgICAgICAgCXJldHVybiBweFRpbWVyLT5wY1RpbWVyTmFtZTsNCkJGRDA5QjE2ICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KQkZEMDlCMUEgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQozNzU6ICAgICAgICAgICAgICAgICB9DQpCRkQwOUIxQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlCMUUgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDlCMjAgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNg0KQkZEMDlCMjIgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDlCMjQgICAgICAwQzAwICAgTk9QDQozNzY6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM3NzogICAgICAgICAgICAgICAgIA0KMzc4OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UHJvY2Vzc0V4cGlyZWRUaW1lciggY29uc3QgVGlja1R5cGVfdCB4TmV4dEV4cGlyZVRpbWUsIGNvbnN0IFRpY2tUeXBlX3QgeFRpbWVOb3cgKQ0KMzc5OiAgICAgICAgICAgICAgICAgew0KQkZEMDVGMjQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDA1RjI2ICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkNCkJGRDA1RjI4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkNCkJGRDA1RjJBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNUYyQyAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpDQpCRkQwNUYzMCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpDQozODA6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXN1bHQ7DQozODE6ICAgICAgICAgICAgICAgICBUaW1lcl90ICogY29uc3QgcHhUaW1lciA9ICggVGltZXJfdCAqICkgbGlzdEdFVF9PV05FUl9PRl9IRUFEX0VOVFJZKCBweEN1cnJlbnRUaW1lckxpc3QgKTsNCkJGRDA1RjM0ICA4MDYwRkM1QyAgIExXIFYwLCAtMzI2NzIoR1ApDQpCRkQwNUYzOCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApDQpCRkQwNUYzQSAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApDQpCRkQwNUYzQyAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQozODI6ICAgICAgICAgICAgICAgICANCjM4MzogICAgICAgICAgICAgICAgIAkvKiBSZW1vdmUgdGhlIHRpbWVyIGZyb20gdGhlIGxpc3Qgb2YgYWN0aXZlIHRpbWVycy4gIEEgY2hlY2sgaGFzIGFscmVhZHkNCjM4NDogICAgICAgICAgICAgICAgIAliZWVuIHBlcmZvcm1lZCB0byBlbnN1cmUgdGhlIGxpc3QgaXMgbm90IGVtcHR5LiAqLw0KMzg1OiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHV4TGlzdFJlbW92ZSggJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSApOw0KQkZEMDVGNDAgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDVGNDQgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNUY0NiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDVGNDggIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUNCkJGRDA1RjRBICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDENCkJGRDA1RjRDICAgICAgMEMwMCAgIE5PUA0KMzg2OiAgICAgICAgICAgICAgICAgCXRyYWNlVElNRVJfRVhQSVJFRCggcHhUaW1lciApOw0KMzg3OiAgICAgICAgICAgICAgICAgDQozODg6ICAgICAgICAgICAgICAgICAJLyogSWYgdGhlIHRpbWVyIGlzIGFuIGF1dG8gcmVsb2FkIHRpbWVyIHRoZW4gY2FsY3VsYXRlIHRoZSBuZXh0DQozODk6ICAgICAgICAgICAgICAgICAJZXhwaXJ5IHRpbWUgYW5kIHJlLWluc2VydCB0aGUgdGltZXIgaW4gdGhlIGxpc3Qgb2YgYWN0aXZlIHRpbWVycy4gKi8NCjM5MDogICAgICAgICAgICAgICAgIAlpZiggcHhUaW1lci0+dXhBdXRvUmVsb2FkID09ICggVUJhc2VUeXBlX3QgKSBwZFRSVUUgKQ0KQkZEMDVGNEUgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDVGNTIgICAgICA2OUE3ICAgTFcgVjEsIDI4KFYwKQ0KQkZEMDVGNTQgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA1RjU2ICAwMDJGQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDVGQjgNCkJGRDA1RjU4ICAwQzAwMDAyRiAgIFNMTCBBVCwgVDcsIDENCkJGRDA1RjVBICAgICAgMEMwMCAgIE5PUA0KMzkxOiAgICAgICAgICAgICAgICAgCXsNCjM5MjogICAgICAgICAgICAgICAgIAkJLyogVGhlIHRpbWVyIGlzIGluc2VydGVkIGludG8gYSBsaXN0IHVzaW5nIGEgdGltZSByZWxhdGl2ZSB0byBhbnl0aGluZw0KMzkzOiAgICAgICAgICAgICAgICAgCQlvdGhlciB0aGFuIHRoZSBjdXJyZW50IHRpbWUuICBJdCB3aWxsIHRoZXJlZm9yZSBiZSBpbnNlcnRlZCBpbnRvIHRoZQ0KMzk0OiAgICAgICAgICAgICAgICAgCQljb3JyZWN0IGxpc3QgcmVsYXRpdmUgdG8gdGhlIHRpbWUgdGhpcyB0YXNrIHRoaW5rcyBpdCBpcyBub3cuICovDQozOTU6ICAgICAgICAgICAgICAgICAJCWlmKCBwcnZJbnNlcnRUaW1lckluQWN0aXZlTGlzdCggcHhUaW1lciwgKCB4TmV4dEV4cGlyZVRpbWUgKyBweFRpbWVyLT54VGltZXJQZXJpb2RJblRpY2tzICksIHhUaW1lTm93LCB4TmV4dEV4cGlyZVRpbWUgKSA9PSBwZFRSVUUgKQ0KQkZEMDVGNUMgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDVGNjAgICAgICA2OUE2ICAgTFcgVjEsIDI0KFYwKQ0KQkZEMDVGNjIgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDVGNjYgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwNUY2OCAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpDQpCRkQwNUY2QyAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDVGNkUgIDAwMkNGQ0RFICAgTFcgQTIsIDQ0KFM4KQ0KQkZEMDVGNzIgIDAwMjhGQ0ZFICAgTFcgQTMsIDQwKFM4KQ0KQkZEMDVGNzYgIDJCRTQ3N0U4ICAgSkFMUyBwcnZJbnNlcnRUaW1lckluQWN0aXZlTGlzdA0KQkZEMDVGNzggICAgICAyQkU0ICAgTEhVIEEzLCA4KEEyKQ0KQkZEMDVGN0EgICAgICAwQzAwICAgTk9QDQpCRkQwNUY3QyAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMA0KQkZEMDVGN0UgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA1RjgwICAwMDFBQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDVGQjgNCkJGRDA1RjgyICAwQzAwMDAxQSAgIFNMTCBaRVJPLCBLMCwgMQ0KQkZEMDVGODQgICAgICAwQzAwICAgTk9QDQozOTY6ICAgICAgICAgICAgICAgICAJCXsNCjM5NzogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0aW1lciBleHBpcmVkIGJlZm9yZSBpdCB3YXMgYWRkZWQgdG8gdGhlIGFjdGl2ZSB0aW1lcg0KMzk4OiAgICAgICAgICAgICAgICAgCQkJbGlzdC4gIFJlbG9hZCBpdCBub3cuICAqLw0KMzk5OiAgICAgICAgICAgICAgICAgCQkJeFJlc3VsdCA9IHhUaW1lckdlbmVyaWNDb21tYW5kKCBweFRpbWVyLCB0bXJDT01NQU5EX1NUQVJUX0RPTlRfVFJBQ0UsIHhOZXh0RXhwaXJlVGltZSwgTlVMTCwgdG1yTk9fREVMQVkgKTsNCkJGRDA1Rjg2ICAgICAgQzgwNCAgIFNXIFpFUk8sIDE2KFNQKQ0KQkZEMDVGODggIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDVGOEMgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTw0KQkZEMDVGOEUgIDAwMjhGQ0RFICAgTFcgQTIsIDQwKFM4KQ0KQkZEMDVGOTIgICAgICAwQ0UwICAgTU9WRSBBMywgWkVSTw0KQkZEMDVGOTQgIDJEMEU3N0U4ICAgSkFMUyB4VGltZXJHZW5lcmljQ29tbWFuZA0KQkZEMDVGOTYgICAgICAyRDBFICAgQU5ESSBWMCwgUzAsIDB4ODAwMA0KQkZEMDVGOTggICAgICAwQzAwICAgTk9QDQpCRkQwNUY5QSAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQo0MDA6ICAgICAgICAgICAgICAgICAJCQljb25maWdBU1NFUlQoIHhSZXN1bHQgKTsNCkJGRDA1RjlFICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDA1RkEyICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA1RkI4DQpCRkQwNUZBNiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDVGQTggIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDVGQUEgIDlBRTgzMDgyICAgQURESVUgQTAsIFYwLCAtMjU4ODANCkJGRDA1RkFDICAzMEEwOUFFOCAgIFNXQzEgRjIzLCAxMjQ0OChUMCkNCkJGRDA1RkFFICAwMTkwMzBBMCAgIEFERElVIEExLCBaRVJPLCA0MDANCkJGRDA1RkIyICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDVGQjQgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA1RkI2ICAgICAgMEMwMCAgIE5PUA0KNDAxOiAgICAgICAgICAgICAgICAgCQkJKCB2b2lkICkgeFJlc3VsdDsNCjQwMjogICAgICAgICAgICAgICAgIAkJfQ0KNDAzOiAgICAgICAgICAgICAgICAgCQllbHNlDQo0MDQ6ICAgICAgICAgICAgICAgICAJCXsNCjQwNTogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjQwNjogICAgICAgICAgICAgICAgIAkJfQ0KNDA3OiAgICAgICAgICAgICAgICAgCX0NCjQwODogICAgICAgICAgICAgICAgIAllbHNlDQo0MDk6ICAgICAgICAgICAgICAgICAJew0KNDEwOiAgICAgICAgICAgICAgICAgCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo0MTE6ICAgICAgICAgICAgICAgICAJfQ0KNDEyOiAgICAgICAgICAgICAgICAgDQo0MTM6ICAgICAgICAgICAgICAgICAJLyogQ2FsbCB0aGUgdGltZXIgY2FsbGJhY2suICovDQo0MTQ6ICAgICAgICAgICAgICAgICAJcHhUaW1lci0+cHhDYWxsYmFja0Z1bmN0aW9uKCAoIFRpbWVySGFuZGxlX3QgKSBweFRpbWVyICk7DQpCRkQwNUZCOCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNUZCQyAgICAgIDY5MjkgICBMVyBWMCwgMzYoVjApDQpCRkQwNUZCRSAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpDQpCRkQwNUZDMiAgICAgIDQ1RTIgICBKQUxSUzE2IFYwDQpCRkQwNUZDNCAgICAgIDBDMDAgICBOT1ANCjQxNTogICAgICAgICAgICAgICAgIH0NCkJGRDA1RkM2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNUZDOCAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwNUZDQSAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwNUZDQyAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwNUZDRSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNUZEMCAgICAgIDBDMDAgICBOT1ANCjQxNjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDE3OiAgICAgICAgICAgICAgICAgDQo0MTg6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZUaW1lclRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApDQo0MTk6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTczOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDk3M0EgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDk3M0MgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDk3M0UgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5NzQwICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCjQyMDogICAgICAgICAgICAgICAgIFRpY2tUeXBlX3QgeE5leHRFeHBpcmVUaW1lOw0KNDIxOiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4TGlzdFdhc0VtcHR5Ow0KNDIyOiAgICAgICAgICAgICAgICAgDQo0MjM6ICAgICAgICAgICAgICAgICAJLyogSnVzdCB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4gKi8NCjQyNDogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSBwdlBhcmFtZXRlcnM7DQo0MjU6ICAgICAgICAgICAgICAgICANCjQyNjogICAgICAgICAgICAgICAgIAlmb3IoIDs7ICkNCjQyNzogICAgICAgICAgICAgICAgIAl7DQo0Mjg6ICAgICAgICAgICAgICAgICAJCS8qIFF1ZXJ5IHRoZSB0aW1lcnMgbGlzdCB0byBzZWUgaWYgaXQgY29udGFpbnMgYW55IHRpbWVycywgYW5kIGlmIHNvLA0KNDI5OiAgICAgICAgICAgICAgICAgCQlvYnRhaW4gdGhlIHRpbWUgYXQgd2hpY2ggdGhlIG5leHQgdGltZXIgd2lsbCBleHBpcmUuICovDQo0MzA6ICAgICAgICAgICAgICAgICAJCXhOZXh0RXhwaXJlVGltZSA9IHBydkdldE5leHRFeHBpcmVUaW1lKCAmeExpc3RXYXNFbXB0eSApOw0KQkZEMDk3NDQgIDAwMTQzMDVFICAgQURESVUgVjAsIFM4LCAyMA0KQkZEMDk3NDggICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA5NzRBICA0N0VFNzdFOCAgIEpBTFMgcHJ2R2V0TmV4dEV4cGlyZVRpbWUNCkJGRDA5NzRFICAgICAgMEMwMCAgIE5PUA0KQkZEMDk3NTAgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KNDMxOiAgICAgICAgICAgICAgICAgDQo0MzI6ICAgICAgICAgICAgICAgICAJCS8qIElmIGEgdGltZXIgaGFzIGV4cGlyZWQsIHByb2Nlc3MgaXQuICBPdGhlcndpc2UsIGJsb2NrIHRoaXMgdGFzaw0KNDMzOiAgICAgICAgICAgICAgICAgCQl1bnRpbCBlaXRoZXIgYSB0aW1lciBkb2VzIGV4cGlyZSwgb3IgYSBjb21tYW5kIGlzIHJlY2VpdmVkLiAqLw0KNDM0OiAgICAgICAgICAgICAgICAgCQlwcnZQcm9jZXNzVGltZXJPckJsb2NrVGFzayggeE5leHRFeHBpcmVUaW1lLCB4TGlzdFdhc0VtcHR5ICk7DQpCRkQwOTc1NCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwOTc1OCAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpDQpCRkQwOTc1QyAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDk3NUUgIDJENzA3N0U4ICAgSkFMUyBwcnZQcm9jZXNzVGltZXJPckJsb2NrVGFzaw0KQkZEMDk3NjAgICAgICAyRDcwICAgQU5ESSBWMCwgQTMsIDB4ODANCkJGRDA5NzYyICAgICAgMEMwMCAgIE5PUA0KNDM1OiAgICAgICAgICAgICAgICAgDQo0MzY6ICAgICAgICAgICAgICAgICAJCS8qIEVtcHR5IHRoZSBjb21tYW5kIHF1ZXVlLiAqLw0KNDM3OiAgICAgICAgICAgICAgICAgCQlwcnZQcm9jZXNzUmVjZWl2ZWRDb21tYW5kcygpOw0KQkZEMDk3NjQgIDBCOUE3N0U4ICAgSkFMUyBwcnZQcm9jZXNzUmVjZWl2ZWRDb21tYW5kcw0KQkZEMDk3NjYgICAgICAwQjlBICAgTEJVIEEzLCAxMChTMSkNCkJGRDA5NzY4ICAgICAgMEMwMCAgIE5PUA0KNDM4OiAgICAgICAgICAgICAgICAgCX0NCkJGRDA5NzZBICAgICAgQ0ZFQyAgIEIgMHhCRkQwOTc0NA0KQkZEMDk3NkMgICAgICAwQzAwICAgTk9QDQo0Mzk6ICAgICAgICAgICAgICAgICB9DQo0NDA6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQ0MTogICAgICAgICAgICAgICAgIA0KNDQyOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UHJvY2Vzc1RpbWVyT3JCbG9ja1Rhc2soIGNvbnN0IFRpY2tUeXBlX3QgeE5leHRFeHBpcmVUaW1lLCBjb25zdCBCYXNlVHlwZV90IHhMaXN0V2FzRW1wdHkgKQ0KNDQzOiAgICAgICAgICAgICAgICAgew0KQkZEMDVBRTAgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDA1QUUyICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkNCkJGRDA1QUU0ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkNCkJGRDA1QUU2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNUFFOCAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpDQpCRkQwNUFFQyAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpDQo0NDQ6ICAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUaW1lTm93Ow0KNDQ1OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZDsNCjQ0NjogICAgICAgICAgICAgICAgIA0KNDQ3OiAgICAgICAgICAgICAgICAgCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDVBRjAgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwNCkJGRDA1QUYyICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYNCkJGRDA1QUY0ICAgICAgMEMwMCAgIE5PUA0KNDQ4OiAgICAgICAgICAgICAgICAgCXsNCjQ0OTogICAgICAgICAgICAgICAgIAkJLyogT2J0YWluIHRoZSB0aW1lIG5vdyB0byBtYWtlIGFuIGFzc2Vzc21lbnQgYXMgdG8gd2hldGhlciB0aGUgdGltZXINCjQ1MDogICAgICAgICAgICAgICAgIAkJaGFzIGV4cGlyZWQgb3Igbm90LiAgSWYgb2J0YWluaW5nIHRoZSB0aW1lIGNhdXNlcyB0aGUgbGlzdHMgdG8gc3dpdGNoDQo0NTE6ICAgICAgICAgICAgICAgICAJCXRoZW4gZG9uJ3QgcHJvY2VzcyB0aGlzIHRpbWVyIGFzIGFueSB0aW1lcnMgdGhhdCByZW1haW5lZCBpbiB0aGUgbGlzdA0KNDUyOiAgICAgICAgICAgICAgICAgCQl3aGVuIHRoZSBsaXN0cyB3ZXJlIHN3aXRjaGVkIHdpbGwgaGF2ZSBiZWVuIHByb2Nlc3NlZCB3aXRoaW4gdGhlDQo0NTM6ICAgICAgICAgICAgICAgICAJCXBydlNhbXBsZVRpbWVOb3coKSBmdW5jdGlvbi4gKi8NCjQ1NDogICAgICAgICAgICAgICAgIAkJeFRpbWVOb3cgPSBwcnZTYW1wbGVUaW1lTm93KCAmeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgKTsNCkJGRDA1QUY2ICAwMDE4MzA1RSAgIEFERElVIFYwLCBTOCwgMjQNCkJGRDA1QUZBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNUFGQyAgNDJBODc3RTggICBKQUxTIHBydlNhbXBsZVRpbWVOb3cNCkJGRDA1QUZFICAwQzAwNDJBOCAgIEJDMlQgMiwgMHhCRkQwNzMwMg0KQkZEMDVCMDAgICAgICAwQzAwICAgTk9QDQpCRkQwNUIwMiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo0NTU6ICAgICAgICAgICAgICAgICAJCWlmKCB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZCA9PSBwZEZBTFNFICkNCkJGRDA1QjA2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA1QjBBICAwMDNENDBBMiAgIEJORVpDIFYwLCAweEJGRDA1Qjg4DQo0NTY6ICAgICAgICAgICAgICAgICAJCXsNCjQ1NzogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0aWNrIGNvdW50IGhhcyBub3Qgb3ZlcmZsb3dlZCwgaGFzIHRoZSB0aW1lciBleHBpcmVkPyAqLw0KNDU4OiAgICAgICAgICAgICAgICAgCQkJaWYoICggeExpc3RXYXNFbXB0eSA9PSBwZEZBTFNFICkgJiYgKCB4TmV4dEV4cGlyZVRpbWUgPD0geFRpbWVOb3cgKSApDQpCRkQwNUIwRSAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpDQpCRkQwNUIxMiAgMDAxNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUIzRQ0KQkZEMDVCMTYgIDAwMjhGQzdFICAgTFcgVjEsIDQwKFM4KQ0KQkZEMDVCMUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDVCMUUgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxDQpCRkQwNUIyMCAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYNCkJGRDA1QjIyICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1QjNFDQo0NTk6ICAgICAgICAgICAgICAgICAJCQl7DQo0NjA6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDA1QjI2ICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwNCkJGRDA1QjI4ICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikNCkJGRDA1QjJBICAgICAgMEMwMCAgIE5PUA0KNDYxOiAgICAgICAgICAgICAgICAgCQkJCXBydlByb2Nlc3NFeHBpcmVkVGltZXIoIHhOZXh0RXhwaXJlVGltZSwgeFRpbWVOb3cgKTsNCkJGRDA1QjJDICAwMDI4RkM5RSAgIExXIEEwLCA0MChTOCkNCkJGRDA1QjMwICAwMDEwRkNCRSAgIExXIEExLCAxNihTOCkNCkJGRDA1QjM0ICAyRjkyNzdFOCAgIEpBTFMgcHJ2UHJvY2Vzc0V4cGlyZWRUaW1lcg0KQkZEMDVCMzYgICAgICAyRjkyICAgQU5ESSBBMywgUzEsIDB4Mg0KQkZEMDVCMzggICAgICAwQzAwICAgTk9QDQpCRkQwNUIzQSAgICAgIENDMkMgICBCIDB4QkZEMDVCOTQNCkJGRDA1QjNDICAgICAgMEMwMCAgIE5PUA0KNDYyOiAgICAgICAgICAgICAgICAgCQkJfQ0KNDYzOiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KNDY0OiAgICAgICAgICAgICAgICAgCQkJew0KNDY1OiAgICAgICAgICAgICAgICAgCQkJCS8qIFRoZSB0aWNrIGNvdW50IGhhcyBub3Qgb3ZlcmZsb3dlZCwgYW5kIHRoZSBuZXh0IGV4cGlyZQ0KNDY2OiAgICAgICAgICAgICAgICAgCQkJCXRpbWUgaGFzIG5vdCBiZWVuIHJlYWNoZWQgeWV0LiAgVGhpcyB0YXNrIHNob3VsZCB0aGVyZWZvcmUNCjQ2NzogICAgICAgICAgICAgICAgIAkJCQlibG9jayB0byB3YWl0IGZvciB0aGUgbmV4dCBleHBpcmUgdGltZSBvciBhIGNvbW1hbmQgdG8gYmUNCjQ2ODogICAgICAgICAgICAgICAgIAkJCQlyZWNlaXZlZCAtIHdoaWNoZXZlciBjb21lcyBmaXJzdC4gIFRoZSBmb2xsb3dpbmcgbGluZSBjYW5ub3QNCjQ2OTogICAgICAgICAgICAgICAgIAkJCQliZSByZWFjaGVkIHVubGVzcyB4TmV4dEV4cGlyZVRpbWUgPiB4VGltZU5vdywgZXhjZXB0IGluIHRoZQ0KNDcwOiAgICAgICAgICAgICAgICAgCQkJCWNhc2Ugd2hlbiB0aGUgY3VycmVudCB0aW1lciBsaXN0IGlzIGVtcHR5LiAqLw0KNDcxOiAgICAgICAgICAgICAgICAgCQkJCXZRdWV1ZVdhaXRGb3JNZXNzYWdlUmVzdHJpY3RlZCggeFRpbWVyUXVldWUsICggeE5leHRFeHBpcmVUaW1lIC0geFRpbWVOb3cgKSwgeExpc3RXYXNFbXB0eSApOw0KQkZEMDVCM0UgIDgwNjhGQzdDICAgTFcgVjEsIC0zMjY2NChHUCkNCkJGRDA1QjQyICAwMDI4RkM5RSAgIExXIEEwLCA0MChTOCkNCkJGRDA1QjQ2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1QjRBICAgICAgMDUyOSAgIFNVQlUgVjAsIEEwLCBWMA0KQkZEMDVCNEMgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDA1QjRFICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwNUI1MCAgMDAyQ0ZDREUgICBMVyBBMiwgNDQoUzgpDQpCRkQwNUI1NCAgMzQ5NDc3RTggICBKQUxTIHZRdWV1ZVdhaXRGb3JNZXNzYWdlUmVzdHJpY3RlZA0KQkZEMDVCNTYgIDBDMDAzNDk0ICAgTEhVIEEwLCAzMDcyKFM0KQ0KQkZEMDVCNTggICAgICAwQzAwICAgTk9QDQo0NzI6ICAgICAgICAgICAgICAgICANCjQ3MzogICAgICAgICAgICAgICAgIAkJCQlpZiggeFRhc2tSZXN1bWVBbGwoKSA9PSBwZEZBTFNFICkNCkJGRDA1QjVBICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwNCkJGRDA1QjVDICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikNCkJGRDA1QjVFICAgICAgMEMwMCAgIE5PUA0KQkZEMDVCNjAgIDAwMTc0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDVCOTINCjQ3NDogICAgICAgICAgICAgICAgIAkJCQl7DQo0NzU6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFlpZWxkIHRvIHdhaXQgZm9yIGVpdGhlciBhIGNvbW1hbmQgdG8gYXJyaXZlLCBvciB0aGUNCjQ3NjogICAgICAgICAgICAgICAgIAkJCQkJYmxvY2sgdGltZSB0byBleHBpcmUuICBJZiBhIGNvbW1hbmQgYXJyaXZlZCBiZXR3ZWVuIHRoZQ0KNDc3OiAgICAgICAgICAgICAgICAgCQkJCQljcml0aWNhbCBzZWN0aW9uIGJlaW5nIGV4aXRlZCBhbmQgdGhpcyB5aWVsZCB0aGVuIHRoZSB5aWVsZA0KNDc4OiAgICAgICAgICAgICAgICAgCQkJCQl3aWxsIG5vdCBjYXVzZSB0aGUgdGFzayB0byBibG9jay4gKi8NCjQ3OTogICAgICAgICAgICAgICAgIAkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCkJGRDA1QjY0ICA0RTc2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UNCkJGRDA1QjY2ICAgICAgNEU3NiAgIEFERElVIFMzLCBTMywgLTUNCkJGRDA1QjY4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDVCNkEgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KQkZEMDVCNkUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDVCNzIgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2DQpCRkQwNUI3NiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQpCRkQwNUI3QSAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwNUI3RSAgNEU4Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UNCkJGRDA1QjgwICAgICAgNEU4NiAgIEFERElVIFM0LCBTNCwgMw0KQkZEMDVCODIgICAgICAwQzAwICAgTk9QDQpCRkQwNUI4NCAgICAgIENDMDcgICBCIDB4QkZEMDVCOTQNCkJGRDA1Qjg2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDVCOTIgICAgICAwQzAwICAgTk9QDQo0ODA6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNDgxOiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjQ4MjogICAgICAgICAgICAgICAgIAkJCQl7DQo0ODM6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjQ4NDogICAgICAgICAgICAgICAgIAkJCQl9DQo0ODU6ICAgICAgICAgICAgICAgICAJCQl9DQo0ODY6ICAgICAgICAgICAgICAgICAJCX0NCjQ4NzogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNDg4OiAgICAgICAgICAgICAgICAgCQl7DQo0ODk6ICAgICAgICAgICAgICAgICAJCQkoIHZvaWQgKSB4VGFza1Jlc3VtZUFsbCgpOw0KQkZEMDVCODggIDE1OEU3N0U4ICAgSkFMUyB4VGFza1Jlc3VtZUFsbA0KQkZEMDVCOEEgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQ0KQkZEMDVCOEMgICAgICAwQzAwICAgTk9QDQpCRkQwNUI4RSAgICAgIENDMDIgICBCIDB4QkZEMDVCOTQNCkJGRDA1QjkwICAgICAgMEMwMCAgIE5PUA0KNDkwOiAgICAgICAgICAgICAgICAgCQl9DQo0OTE6ICAgICAgICAgICAgICAgICAJfQ0KNDkyOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDVCOTQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA1Qjk2ICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkNCkJGRDA1Qjk4ICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkNCkJGRDA1QjlBICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDANCkJGRDA1QjlDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA1QjlFICAgICAgMEMwMCAgIE5PUA0KNDkzOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0OTQ6ICAgICAgICAgICAgICAgICANCjQ5NTogICAgICAgICAgICAgICAgIHN0YXRpYyBUaWNrVHlwZV90IHBydkdldE5leHRFeHBpcmVUaW1lKCBCYXNlVHlwZV90ICogY29uc3QgcHhMaXN0V2FzRW1wdHkgKQ0KNDk2OiAgICAgICAgICAgICAgICAgew0KQkZEMDhGREMgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYNCkJGRDA4RkRFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA4RkUwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOEZFMiAgMDAxMEY4OUUgICBTVyBBMCwgMTYoUzgpDQo0OTc6ICAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhOZXh0RXhwaXJlVGltZTsNCjQ5ODogICAgICAgICAgICAgICAgIA0KNDk5OiAgICAgICAgICAgICAgICAgCS8qIFRpbWVycyBhcmUgbGlzdGVkIGluIGV4cGlyeSB0aW1lIG9yZGVyLCB3aXRoIHRoZSBoZWFkIG9mIHRoZSBsaXN0DQo1MDA6ICAgICAgICAgICAgICAgICAJcmVmZXJlbmNpbmcgdGhlIHRhc2sgdGhhdCB3aWxsIGV4cGlyZSBmaXJzdC4gIE9idGFpbiB0aGUgdGltZSBhdCB3aGljaA0KNTAxOiAgICAgICAgICAgICAgICAgCXRoZSB0aW1lciB3aXRoIHRoZSBuZWFyZXN0IGV4cGlyeSB0aW1lIHdpbGwgZXhwaXJlLiAgSWYgdGhlcmUgYXJlIG5vDQo1MDI6ICAgICAgICAgICAgICAgICAJYWN0aXZlIHRpbWVycyB0aGVuIGp1c3Qgc2V0IHRoZSBuZXh0IGV4cGlyZSB0aW1lIHRvIDAuICBUaGF0IHdpbGwgY2F1c2UNCjUwMzogICAgICAgICAgICAgICAgIAl0aGlzIHRhc2sgdG8gdW5ibG9jayB3aGVuIHRoZSB0aWNrIGNvdW50IG92ZXJmbG93cywgYXQgd2hpY2ggcG9pbnQgdGhlDQo1MDQ6ICAgICAgICAgICAgICAgICAJdGltZXIgbGlzdHMgd2lsbCBiZSBzd2l0Y2hlZCBhbmQgdGhlIG5leHQgZXhwaXJ5IHRpbWUgY2FuIGJlDQo1MDU6ICAgICAgICAgICAgICAgICAJcmUtYXNzZXNzZWQuICAqLw0KNTA2OiAgICAgICAgICAgICAgICAgCSpweExpc3RXYXNFbXB0eSA9IGxpc3RMSVNUX0lTX0VNUFRZKCBweEN1cnJlbnRUaW1lckxpc3QgKTsNCkJGRDA4RkU2ICA4MDYwRkM1QyAgIExXIFYwLCAtMzI2NzIoR1ApDQpCRkQwOEZFQSAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDA4RkVDICAwMDAxQjA2MiAgIFNMVElVIFYxLCBWMCwgMQ0KQkZEMDhGRjAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDhGRjQgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo1MDc6ICAgICAgICAgICAgICAgICAJaWYoICpweExpc3RXYXNFbXB0eSA9PSBwZEZBTFNFICkNCkJGRDA4RkY2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA4RkZBICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDhGRkMgIDAwMDg0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDkwMTANCjUwODogICAgICAgICAgICAgICAgIAl7DQo1MDk6ICAgICAgICAgICAgICAgICAJCXhOZXh0RXhwaXJlVGltZSA9IGxpc3RHRVRfSVRFTV9WQUxVRV9PRl9IRUFEX0VOVFJZKCBweEN1cnJlbnRUaW1lckxpc3QgKTsNCkJGRDA5MDAwICA4MDYwRkM1QyAgIExXIFYwLCAtMzI2NzIoR1ApDQpCRkQwOTAwNCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApDQpCRkQwOTAwNiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDA5MDA4ICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQ0KQkZEMDkwMEMgICAgICBDQzAzICAgQiAweEJGRDA5MDE0DQpCRkQwOTAwRSAgICAgIDBDMDAgICBOT1ANCjUxMDogICAgICAgICAgICAgICAgIAl9DQo1MTE6ICAgICAgICAgICAgICAgICAJZWxzZQ0KNTEyOiAgICAgICAgICAgICAgICAgCXsNCjUxMzogICAgICAgICAgICAgICAgIAkJLyogRW5zdXJlIHRoZSB0YXNrIHVuYmxvY2tzIHdoZW4gdGhlIHRpY2sgY291bnQgcm9sbHMgb3Zlci4gKi8NCjUxNDogICAgICAgICAgICAgICAgIAkJeE5leHRFeHBpcmVUaW1lID0gKCBUaWNrVHlwZV90ICkgMFU7DQpCRkQwOTAxMCAgMDAwMEY4MUUgICBTVyBaRVJPLCAwKFM4KQ0KNTE1OiAgICAgICAgICAgICAgICAgCX0NCjUxNjogICAgICAgICAgICAgICAgIA0KNTE3OiAgICAgICAgICAgICAgICAgCXJldHVybiB4TmV4dEV4cGlyZVRpbWU7DQpCRkQwOTAxNCAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCjUxODogICAgICAgICAgICAgICAgIH0NCkJGRDA5MDE4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTAxQSAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOTAxQyAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2DQpCRkQwOTAxRSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTAyMCAgICAgIDBDMDAgICBOT1ANCjUxOTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNTIwOiAgICAgICAgICAgICAgICAgDQo1MjE6ICAgICAgICAgICAgICAgICBzdGF0aWMgVGlja1R5cGVfdCBwcnZTYW1wbGVUaW1lTm93KCBCYXNlVHlwZV90ICogY29uc3QgcHhUaW1lckxpc3RzV2VyZVN3aXRjaGVkICkNCjUyMjogICAgICAgICAgICAgICAgIHsNCkJGRDA4NTUwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwODU1MiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwODU1NCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwODU1NiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDg1NTggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KNTIzOiAgICAgICAgICAgICAgICAgVGlja1R5cGVfdCB4VGltZU5vdzsNCjUyNDogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgVGlja1R5cGVfdCB4TGFzdFRpbWUgPSAoIFRpY2tUeXBlX3QgKSAwVTsgLypsaW50ICFlOTU2IFZhcmlhYmxlIGlzIG9ubHkgYWNjZXNzaWJsZSB0byBvbmUgdGFzay4gKi8NCjUyNTogICAgICAgICAgICAgICAgIA0KNTI2OiAgICAgICAgICAgICAgICAgCXhUaW1lTm93ID0geFRhc2tHZXRUaWNrQ291bnQoKTsNCkJGRDA4NTVDICA0Q0NBNzdFOCAgIEpBTFMgeFRhc2tHZXRUaWNrQ291bnQNCkJGRDA4NTVFICAgICAgNENDQSAgIEFERElVIEEyLCBBMiwgNQ0KQkZEMDg1NjAgICAgICAwQzAwICAgTk9QDQpCRkQwODU2MiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo1Mjc6ICAgICAgICAgICAgICAgICANCjUyODogICAgICAgICAgICAgICAgIAlpZiggeFRpbWVOb3cgPCB4TGFzdFRpbWUgKQ0KQkZEMDg1NjYgIDgwNkNGQzVDICAgTFcgVjAsIC0zMjY2MChHUCkNCkJGRDA4NTZBICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDA4NTZFICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDg1NzAgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwODU3MiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODU4OA0KNTI5OiAgICAgICAgICAgICAgICAgCXsNCjUzMDogICAgICAgICAgICAgICAgIAkJcHJ2U3dpdGNoVGltZXJMaXN0cygpOw0KQkZEMDg1NzYgIDFGNzg3N0U4ICAgSkFMUyBwcnZTd2l0Y2hUaW1lckxpc3RzDQpCRkQwODU3OCAgMEMwMDFGNzggICBMQiBLMSwgMzA3MihUOCkNCkJGRDA4NTdBICAgICAgMEMwMCAgIE5PUA0KNTMxOiAgICAgICAgICAgICAgICAgCQkqcHhUaW1lckxpc3RzV2VyZVN3aXRjaGVkID0gcGRUUlVFOw0KQkZEMDg1N0MgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDg1ODAgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDA4NTgyICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KQkZEMDg1ODQgICAgICBDQzA0ICAgQiAweEJGRDA4NThFDQpCRkQwODU4NiAgICAgIDBDMDAgICBOT1ANCjUzMjogICAgICAgICAgICAgICAgIAl9DQo1MzM6ICAgICAgICAgICAgICAgICAJZWxzZQ0KNTM0OiAgICAgICAgICAgICAgICAgCXsNCjUzNTogICAgICAgICAgICAgICAgIAkJKnB4VGltZXJMaXN0c1dlcmVTd2l0Y2hlZCA9IHBkRkFMU0U7DQpCRkQwODU4OCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwODU4QyAgICAgIEU4MjAgICBTVyBTMCwgMChWMCkNCjUzNjogICAgICAgICAgICAgICAgIAl9DQo1Mzc6ICAgICAgICAgICAgICAgICANCjUzODogICAgICAgICAgICAgICAgIAl4TGFzdFRpbWUgPSB4VGltZU5vdzsNCkJGRDA4NThFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA4NTkyICA4MDZDRjg1QyAgIFNXIFYwLCAtMzI2NjAoR1ApDQo1Mzk6ICAgICAgICAgICAgICAgICANCjU0MDogICAgICAgICAgICAgICAgIAlyZXR1cm4geFRpbWVOb3c7DQpCRkQwODU5NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQo1NDE6ICAgICAgICAgICAgICAgICB9DQpCRkQwODU5QSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDg1OUMgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDg1OUUgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDg1QTAgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDg1QTIgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDg1QTQgICAgICAwQzAwICAgTk9QDQo1NDI6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjU0MzogICAgICAgICAgICAgICAgIA0KNTQ0OiAgICAgICAgICAgICAgICAgc3RhdGljIEJhc2VUeXBlX3QgcHJ2SW5zZXJ0VGltZXJJbkFjdGl2ZUxpc3QoIFRpbWVyX3QgKiBjb25zdCBweFRpbWVyLCBjb25zdCBUaWNrVHlwZV90IHhOZXh0RXhwaXJ5VGltZSwgY29uc3QgVGlja1R5cGVfdCB4VGltZU5vdywgY29uc3QgVGlja1R5cGVfdCB4Q29tbWFuZFRpbWUgKQ0KNTQ1OiAgICAgICAgICAgICAgICAgew0KQkZEMDU3QzggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA1N0NBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA1N0NDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA1N0NFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNTdEMCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwNTdENCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQpCRkQwNTdEOCAgMDAyOEY4REUgICBTVyBBMiwgNDAoUzgpDQpCRkQwNTdEQyAgMDAyQ0Y4RkUgICBTVyBBMywgNDQoUzgpDQo1NDY6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhQcm9jZXNzVGltZXJOb3cgPSBwZEZBTFNFOw0KQkZEMDU3RTAgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQo1NDc6ICAgICAgICAgICAgICAgICANCjU0ODogICAgICAgICAgICAgICAgIAlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSwgeE5leHRFeHBpcnlUaW1lICk7DQpCRkQwNTdFNCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNTdFOCAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpDQpCRkQwNTdFQyAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkNCjU0OTogICAgICAgICAgICAgICAgIAlsaXN0U0VUX0xJU1RfSVRFTV9PV05FUiggJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSwgcHhUaW1lciApOw0KQkZEMDU3RUUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDU3RjIgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQ0KQkZEMDU3RjYgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQ0KNTUwOiAgICAgICAgICAgICAgICAgDQo1NTE6ICAgICAgICAgICAgICAgICAJaWYoIHhOZXh0RXhwaXJ5VGltZSA8PSB4VGltZU5vdyApDQpCRkQwNTdGOCAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpDQpCRkQwNTdGQyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwNTgwMCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjENCkJGRDA1ODAyICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDU4MDQgIDAwMUQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDU4NDINCjU1MjogICAgICAgICAgICAgICAgIAl7DQo1NTM6ICAgICAgICAgICAgICAgICAJCS8qIEhhcyB0aGUgZXhwaXJ5IHRpbWUgZWxhcHNlZCBiZXR3ZWVuIHRoZSBjb21tYW5kIHRvIHN0YXJ0L3Jlc2V0IGENCjU1NDogICAgICAgICAgICAgICAgIAkJdGltZXIgd2FzIGlzc3VlZCwgYW5kIHRoZSB0aW1lIHRoZSBjb21tYW5kIHdhcyBwcm9jZXNzZWQ/ICovDQo1NTU6ICAgICAgICAgICAgICAgICAJCWlmKCAoIHhUaW1lTm93IC0geENvbW1hbmRUaW1lICkgPj0gcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcyApDQpCRkQwNTgwOCAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpDQpCRkQwNTgwQyAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpDQpCRkQwNTgxMCAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjANCkJGRDA1ODEyICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA1ODE2ICAgICAgNjkyNiAgIExXIFYwLCAyNChWMCkNCkJGRDA1ODE4ICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDU4MUEgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwNTgxQyAgMDAwNTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNTgyQQ0KNTU2OiAgICAgICAgICAgICAgICAgCQl7DQo1NTc6ICAgICAgICAgICAgICAgICAJCQkvKiBUaGUgdGltZSBiZXR3ZWVuIGEgY29tbWFuZCBiZWluZyBpc3N1ZWQgYW5kIHRoZSBjb21tYW5kIGJlaW5nDQo1NTg6ICAgICAgICAgICAgICAgICAJCQlwcm9jZXNzZWQgYWN0dWFsbHkgZXhjZWVkcyB0aGUgdGltZXJzIHBlcmlvZC4gICovDQo1NTk6ICAgICAgICAgICAgICAgICAJCQl4UHJvY2Vzc1RpbWVyTm93ID0gcGRUUlVFOw0KQkZEMDU4MjAgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA1ODIyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA1ODI0ICBDQzJDMDAxMCAgIEVYVCBaRVJPLCBTMCwgMTYsIDI2DQpCRkQwNTgyNiAgICAgIENDMkMgICBCIDB4QkZEMDU4ODANCkJGRDA1ODI4ICAgICAgMEMwMCAgIE5PUA0KNTYwOiAgICAgICAgICAgICAgICAgCQl9DQo1NjE6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjU2MjogICAgICAgICAgICAgICAgIAkJew0KNTYzOiAgICAgICAgICAgICAgICAgCQkJdkxpc3RJbnNlcnQoIHB4T3ZlcmZsb3dUaW1lckxpc3QsICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICkgKTsNCkJGRDA1ODJBICA4MDY0RkM3QyAgIExXIFYxLCAtMzI2NjgoR1ApDQpCRkQwNTgyRSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNTgzMiAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA1ODM0ICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwNTgzNiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDU4MzggIDMwNDA3N0U4ICAgSkFMUyB2TGlzdEluc2VydA0KQkZEMDU4M0EgIDBDMDAzMDQwICAgQURESVUgVjAsIFpFUk8sIDMwNzINCkJGRDA1ODNDICAgICAgMEMwMCAgIE5PUA0KQkZEMDU4M0UgICAgICBDQzIwICAgQiAweEJGRDA1ODgwDQpCRkQwNTg0MCAgICAgIDBDMDAgICBOT1ANCjU2NDogICAgICAgICAgICAgICAgIAkJfQ0KNTY1OiAgICAgICAgICAgICAgICAgCX0NCjU2NjogICAgICAgICAgICAgICAgIAllbHNlDQo1Njc6ICAgICAgICAgICAgICAgICAJew0KNTY4OiAgICAgICAgICAgICAgICAgCQlpZiggKCB4VGltZU5vdyA8IHhDb21tYW5kVGltZSApICYmICggeE5leHRFeHBpcnlUaW1lID49IHhDb21tYW5kVGltZSApICkNCkJGRDA1ODQyICAwMDI4RkM3RSAgIExXIFYxLCA0MChTOCkNCkJGRDA1ODQ2ICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDA1ODRBICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDU4NEMgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwNTg0RSAgMDAwRDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNTg2Qw0KQkZEMDU4NTIgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQ0KQkZEMDU4NTYgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQ0KQkZEMDU4NUEgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwDQpCRkQwNTg1QyAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYNCkJGRDA1ODVFICAwMDA1NDBBMiAgIEJORVpDIFYwLCAweEJGRDA1ODZDDQo1Njk6ICAgICAgICAgICAgICAgICAJCXsNCjU3MDogICAgICAgICAgICAgICAgIAkJCS8qIElmLCBzaW5jZSB0aGUgY29tbWFuZCB3YXMgaXNzdWVkLCB0aGUgdGljayBjb3VudCBoYXMgb3ZlcmZsb3dlZA0KNTcxOiAgICAgICAgICAgICAgICAgCQkJYnV0IHRoZSBleHBpcnkgdGltZSBoYXMgbm90LCB0aGVuIHRoZSB0aW1lciBtdXN0IGhhdmUgYWxyZWFkeSBwYXNzZWQNCjU3MjogICAgICAgICAgICAgICAgIAkJCWl0cyBleHBpcnkgdGltZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBpbW1lZGlhdGVseS4gKi8NCjU3MzogICAgICAgICAgICAgICAgIAkJCXhQcm9jZXNzVGltZXJOb3cgPSBwZFRSVUU7DQpCRkQwNTg2MiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDU4NjQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KQkZEMDU4NjggICAgICBDQzBCICAgQiAweEJGRDA1ODgwDQpCRkQwNTg2QSAgICAgIDBDMDAgICBOT1ANCjU3NDogICAgICAgICAgICAgICAgIAkJfQ0KNTc1OiAgICAgICAgICAgICAgICAgCQllbHNlDQo1NzY6ICAgICAgICAgICAgICAgICAJCXsNCjU3NzogICAgICAgICAgICAgICAgIAkJCXZMaXN0SW5zZXJ0KCBweEN1cnJlbnRUaW1lckxpc3QsICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICkgKTsNCkJGRDA1ODZDICA4MDYwRkM3QyAgIExXIFYxLCAtMzI2NzIoR1ApDQpCRkQwNTg3MCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNTg3NCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA1ODc2ICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwNTg3OCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDU4N0EgIDMwNDA3N0U4ICAgSkFMUyB2TGlzdEluc2VydA0KQkZEMDU4N0MgIDBDMDAzMDQwICAgQURESVUgVjAsIFpFUk8sIDMwNzINCkJGRDA1ODdFICAgICAgMEMwMCAgIE5PUA0KNTc4OiAgICAgICAgICAgICAgICAgCQl9DQo1Nzk6ICAgICAgICAgICAgICAgICAJfQ0KNTgwOiAgICAgICAgICAgICAgICAgDQo1ODE6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHhQcm9jZXNzVGltZXJOb3c7DQpCRkQwNTg4MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQo1ODI6ICAgICAgICAgICAgICAgICB9DQpCRkQwNTg4NCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDU4ODYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDU4ODggICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDU4OEEgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDU4OEMgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDU4OEUgICAgICAwQzAwICAgTk9QDQo1ODM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjU4NDogICAgICAgICAgICAgICAgIA0KNTg1OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQJcHJ2UHJvY2Vzc1JlY2VpdmVkQ29tbWFuZHMoIHZvaWQgKQ0KNTg2OiAgICAgICAgICAgICAgICAgew0KQkZEMDE3MzQgICAgICA0RkREICAgQURESVUgU1AsIFNQLCAtNzINCkJGRDAxNzM2ICAgICAgQ0JGMSAgIFNXIFJBLCA2OChTUCkNCkJGRDAxNzM4ICAgICAgQ0JEMCAgIFNXIFM4LCA2NChTUCkNCkJGRDAxNzNBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo1ODc6ICAgICAgICAgICAgICAgICBEYWVtb25UYXNrTWVzc2FnZV90IHhNZXNzYWdlOw0KNTg4OiAgICAgICAgICAgICAgICAgVGltZXJfdCAqcHhUaW1lcjsNCjU4OTogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQsIHhSZXN1bHQ7DQo1OTA6ICAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUaW1lTm93Ow0KNTkxOiAgICAgICAgICAgICAgICAgDQo1OTI6ICAgICAgICAgICAgICAgICAJd2hpbGUoIHhRdWV1ZVJlY2VpdmUoIHhUaW1lclF1ZXVlLCAmeE1lc3NhZ2UsIHRtck5PX0RFTEFZICkgIT0gcGRGQUlMICkgLypsaW50ICFlNjAzIHhNZXNzYWdlIGRvZXMgbm90IGhhdmUgdG8gYmUgaW5pdGlhbGlzZWQgYXMgaXQgaXMgcGFzc2VkIG91dCwgbm90IGluLCBhbmQgaXQgaXMgbm90IHVzZWQgdW5sZXNzIHhRdWV1ZVJlY2VpdmUoKSByZXR1cm5zIHBkVFJVRS4gKi8NCkJGRDAxNzNDICAgICAgQ0NFMCAgIEIgMHhCRkQwMThGRQ0KQkZEMDE3M0UgICAgICAwQzAwICAgTk9QDQpCRkQwMThGRSAgODA2OEZDN0MgICBMVyBWMSwgLTMyNjY0KEdQKQ0KQkZEMDE5MDIgIDAwMjgzMDVFICAgQURESVUgVjAsIFM4LCA0MA0KQkZEMDE5MDYgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDAxOTA4ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMTkwQSAgICAgIDBDQzAgICBNT1ZFIEEyLCBaRVJPDQpCRkQwMTkwQyAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPDQpCRkQwMTkwRSAgMDgxRTc3RTggICBKQUxTIHhRdWV1ZUdlbmVyaWNSZWNlaXZlDQpCRkQwMTkxMCAgICAgIDA4MUUgICBMQlUgUzAsIDE0KFMxKQ0KQkZEMDE5MTIgICAgICAwQzAwICAgTk9QDQpCRkQwMTkxNCAgRkYxNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTc0MA0KQkZEMDE5MTYgIDBGQkVGRjE0ICAgTFcgVDgsIDQwMzAoUzQpDQo1OTM6ICAgICAgICAgICAgICAgICAJew0KNTk0OiAgICAgICAgICAgICAgICAgCQkjaWYgKCBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgPT0gMSApDQo1OTU6ICAgICAgICAgICAgICAgICAJCXsNCjU5NjogICAgICAgICAgICAgICAgIAkJCS8qIE5lZ2F0aXZlIGNvbW1hbmRzIGFyZSBwZW5kZWQgZnVuY3Rpb24gY2FsbHMgcmF0aGVyIHRoYW4gdGltZXINCjU5NzogICAgICAgICAgICAgICAgIAkJCWNvbW1hbmRzLiAqLw0KNTk4OiAgICAgICAgICAgICAgICAgCQkJaWYoIHhNZXNzYWdlLnhNZXNzYWdlSUQgPCAoIEJhc2VUeXBlX3QgKSAwICkNCkJGRDAxNzQwICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDAxNzQ0ICAwMDFGNDA0MiAgIEJHRVogVjAsIDB4QkZEMDE3ODYNCkJGRDAxNzQ2ICAwQzAwMDAxRiAgIFNMTCBaRVJPLCBSQSwgMQ0KQkZEMDE3NDggICAgICAwQzAwICAgTk9QDQo1OTk6ICAgICAgICAgICAgICAgICAJCQl7DQo2MDA6ICAgICAgICAgICAgICAgICAJCQkJY29uc3QgQ2FsbGJhY2tQYXJhbWV0ZXJzX3QgKiBjb25zdCBweENhbGxiYWNrID0gJiggeE1lc3NhZ2UudS54Q2FsbGJhY2tQYXJhbWV0ZXJzICk7DQpCRkQwMTc0QSAgMDAyODMwNUUgICBBRERJVSBWMCwgUzgsIDQwDQpCRkQwMTc0RSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDAxNzUwICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjYwMTogICAgICAgICAgICAgICAgIA0KNjAyOiAgICAgICAgICAgICAgICAgCQkJCS8qIFRoZSB0aW1lciB1c2VzIHRoZSB4Q2FsbGJhY2tQYXJhbWV0ZXJzIG1lbWJlciB0byByZXF1ZXN0IGENCjYwMzogICAgICAgICAgICAgICAgIAkJCQljYWxsYmFjayBiZSBleGVjdXRlZC4gIENoZWNrIHRoZSBjYWxsYmFjayBpcyBub3QgTlVMTC4gKi8NCjYwNDogICAgICAgICAgICAgICAgIAkJCQljb25maWdBU1NFUlQoIHB4Q2FsbGJhY2sgKTsNCkJGRDAxNzU0ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAxNzU4ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxNzZFDQpCRkQwMTc1QyAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDE3NUUgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDE3NjAgIDlBRTgzMDgyICAgQURESVUgQTAsIFYwLCAtMjU4ODANCkJGRDAxNzYyICAzMEEwOUFFOCAgIFNXQzEgRjIzLCAxMjQ0OChUMCkNCkJGRDAxNzY0ICAwMjVDMzBBMCAgIEFERElVIEExLCBaRVJPLCA2MDQNCkJGRDAxNzY4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDE3NkEgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAxNzZDICAgICAgMEMwMCAgIE5PUA0KNjA1OiAgICAgICAgICAgICAgICAgDQo2MDY6ICAgICAgICAgICAgICAgICAJCQkJLyogQ2FsbCB0aGUgZnVuY3Rpb24uICovDQo2MDc6ICAgICAgICAgICAgICAgICAJCQkJcHhDYWxsYmFjay0+cHhDYWxsYmFja0Z1bmN0aW9uKCBweENhbGxiYWNrLT5wdlBhcmFtZXRlcjEsIHB4Q2FsbGJhY2stPnVsUGFyYW1ldGVyMiApOw0KQkZEMDE3NkUgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDE3NzIgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMTc3NCAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpDQpCRkQwMTc3OCAgICAgIDZBMzEgICBMVyBBMCwgNChWMSkNCkJGRDAxNzdBICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDAxNzdFICAgICAgNjlCMiAgIExXIFYxLCA4KFYxKQ0KQkZEMDE3ODAgICAgICAwQ0EzICAgTU9WRSBBMSwgVjENCkJGRDAxNzgyICAgICAgNDVFMiAgIEpBTFJTMTYgVjANCkJGRDAxNzg0ICAgICAgMEMwMCAgIE5PUA0KNjA4OiAgICAgICAgICAgICAgICAgCQkJfQ0KNjA5OiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KNjEwOiAgICAgICAgICAgICAgICAgCQkJew0KNjExOiAgICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjYxMjogICAgICAgICAgICAgICAgIAkJCX0NCjYxMzogICAgICAgICAgICAgICAgIAkJfQ0KNjE0OiAgICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsICovDQo2MTU6ICAgICAgICAgICAgICAgICANCjYxNjogICAgICAgICAgICAgICAgIAkJLyogQ29tbWFuZHMgdGhhdCBhcmUgcG9zaXRpdmUgYXJlIHRpbWVyIGNvbW1hbmRzIHJhdGhlciB0aGFuIHBlbmRlZA0KNjE3OiAgICAgICAgICAgICAgICAgCQlmdW5jdGlvbiBjYWxscy4gKi8NCjYxODogICAgICAgICAgICAgICAgIAkJaWYoIHhNZXNzYWdlLnhNZXNzYWdlSUQgPj0gKCBCYXNlVHlwZV90ICkgMCApDQpCRkQwMTc4NiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwMTc4QSAgMDBCODQwMDIgICBCTFRaIFYwLCAweEJGRDAxOEZFDQpCRkQwMTc4QyAgMEMwMDAwQjggICBTTEwgQTEsIFQ4LCAxDQpCRkQwMTc4RSAgICAgIDBDMDAgICBOT1ANCjYxOTogICAgICAgICAgICAgICAgIAkJew0KNjIwOiAgICAgICAgICAgICAgICAgCQkJLyogVGhlIG1lc3NhZ2VzIHVzZXMgdGhlIHhUaW1lclBhcmFtZXRlcnMgbWVtYmVyIHRvIHdvcmsgb24gYQ0KNjIxOiAgICAgICAgICAgICAgICAgCQkJc29mdHdhcmUgdGltZXIuICovDQo2MjI6ICAgICAgICAgICAgICAgICAJCQlweFRpbWVyID0geE1lc3NhZ2UudS54VGltZXJQYXJhbWV0ZXJzLnB4VGltZXI7DQpCRkQwMTc5MCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMTc5NCAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQo2MjM6ICAgICAgICAgICAgICAgICANCjYyNDogICAgICAgICAgICAgICAgIAkJCWlmKCBsaXN0SVNfQ09OVEFJTkVEX1dJVEhJTiggTlVMTCwgJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSApID09IHBkRkFMU0UgKQ0KQkZEMDE3OTggIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDE3OUMgICAgICA2OTI1ICAgTFcgVjAsIDIwKFYwKQ0KQkZEMDE3OUUgIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE3QjANCjYyNTogICAgICAgICAgICAgICAgIAkJCXsNCjYyNjogICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgdGltZXIgaXMgaW4gYSBsaXN0LCByZW1vdmUgaXQuICovDQo2Mjc6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICk7DQpCRkQwMTdBMiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMTdBNiAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDAxN0E4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwMTdBQSAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQ0KQkZEMDE3QUMgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQ0KQkZEMDE3QUUgICAgICAwQzAwICAgTk9QDQo2Mjg6ICAgICAgICAgICAgICAgICAJCQl9DQo2Mjk6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo2MzA6ICAgICAgICAgICAgICAgICAJCQl7DQo2MzE6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjMyOiAgICAgICAgICAgICAgICAgCQkJfQ0KNjMzOiAgICAgICAgICAgICAgICAgDQo2MzQ6ICAgICAgICAgICAgICAgICAJCQl0cmFjZVRJTUVSX0NPTU1BTkRfUkVDRUlWRUQoIHB4VGltZXIsIHhNZXNzYWdlLnhNZXNzYWdlSUQsIHhNZXNzYWdlLnUueFRpbWVyUGFyYW1ldGVycy54TWVzc2FnZVZhbHVlICk7DQo2MzU6ICAgICAgICAgICAgICAgICANCjYzNjogICAgICAgICAgICAgICAgIAkJCS8qIEluIHRoaXMgY2FzZSB0aGUgeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgcGFyYW1ldGVyIGlzIG5vdCB1c2VkLCBidXQNCjYzNzogICAgICAgICAgICAgICAgIAkJCWl0IG11c3QgYmUgcHJlc2VudCBpbiB0aGUgZnVuY3Rpb24gY2FsbC4gIHBydlNhbXBsZVRpbWVOb3coKSBtdXN0IGJlDQo2Mzg6ICAgICAgICAgICAgICAgICAJCQljYWxsZWQgYWZ0ZXIgdGhlIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgZnJvbSB4VGltZXJRdWV1ZSBzbyB0aGVyZSBpcyBubw0KNjM5OiAgICAgICAgICAgICAgICAgCQkJcG9zc2liaWxpdHkgb2YgYSBoaWdoZXIgcHJpb3JpdHkgdGFzayBhZGRpbmcgYSBtZXNzYWdlIHRvIHRoZSBtZXNzYWdlDQo2NDA6ICAgICAgICAgICAgICAgICAJCQlxdWV1ZSB3aXRoIGEgdGltZSB0aGF0IGlzIGFoZWFkIG9mIHRoZSB0aW1lciBkYWVtb24gdGFzayAoYmVjYXVzZSBpdA0KNjQxOiAgICAgICAgICAgICAgICAgCQkJcHJlLWVtcHRlZCB0aGUgdGltZXIgZGFlbW9uIHRhc2sgYWZ0ZXIgdGhlIHhUaW1lTm93IHZhbHVlIHdhcyBzZXQpLiAqLw0KNjQyOiAgICAgICAgICAgICAgICAgCQkJeFRpbWVOb3cgPSBwcnZTYW1wbGVUaW1lTm93KCAmeFRpbWVyTGlzdHNXZXJlU3dpdGNoZWQgKTsNCkJGRDAxN0IwICAwMDM4MzA1RSAgIEFERElVIFYwLCBTOCwgNTYNCkJGRDAxN0I0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwMTdCNiAgNDJBODc3RTggICBKQUxTIHBydlNhbXBsZVRpbWVOb3cNCkJGRDAxN0I4ICAwQzAwNDJBOCAgIEJDMlQgMiwgMHhCRkQwMkZCQw0KQkZEMDE3QkEgICAgICAwQzAwICAgTk9QDQpCRkQwMTdCQyAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQo2NDM6ICAgICAgICAgICAgICAgICANCjY0NDogICAgICAgICAgICAgICAgIAkJCXN3aXRjaCggeE1lc3NhZ2UueE1lc3NhZ2VJRCApDQpCRkQwMTdDMCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwMTdDNCAgMDAwQUIwNjIgICBTTFRJVSBWMSwgVjAsIDEwDQpCRkQwMTdDOCAgMDA4QzQwRTMgICBCRVFaQyBWMSwgMHhCRkQwMThFNA0KQkZEMDE3Q0MgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDE3Q0UgIEJGRDA0MUEyICAgTFVJIFYwLCAweEJGRDANCkJGRDAxN0QwICAzMDQyQkZEMCAgIExEQzEgRjMwLCAxMjM1NChTMCkNCkJGRDAxN0QyICAxN0RDMzA0MiAgIEFERElVIFYwLCBWMCwgNjEwOA0KQkZEMDE3RDQgIDA1MjYxN0RDICAgTEJVIFM4LCAxMzE4KEdQKQ0KQkZEMDE3RDYgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwMTdEOCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAxN0RBICAgICAgNDVBMiAgIEpSQyBWMA0KQkZEMDE3REMgIEJGRDAxODA1ICAgU0IgWkVSTywgLTE2NDMyKEExKQ0KQkZEMDE3REUgIDE4MDVCRkQwICAgTERDMSBGMzAsIDYxNDkoUzApDQpCRkQwMTdFMCAgQkZEMDE4MDUgICBTQiBaRVJPLCAtMTY0MzIoQTEpDQpCRkQwMTdFMiAgMTgwNUJGRDAgICBMREMxIEYzMCwgNjE0OShTMCkNCkJGRDAxN0U0ICBCRkQwMTgwNSAgIFNCIFpFUk8sIC0xNjQzMihBMSkNCkJGRDAxN0U2ICAxOEVCQkZEMCAgIExEQzEgRjMwLCA2Mzc5KFMwKQ0KQkZEMDE3RTggIEJGRDAxOEVCICAgU0IgQTMsIC0xNjQzMihUMykNCkJGRDAxN0VBICAxODhEQkZEMCAgIExEQzEgRjMwLCA2Mjg1KFMwKQ0KQkZEMDE3RUMgIEJGRDAxODhEICAgU0IgQTAsIC0xNjQzMihUNSkNCkJGRDAxN0VFICAxOEQ3QkZEMCAgIExEQzEgRjMwLCA2MzU5KFMwKQ0KQkZEMDE3RjAgIEJGRDAxOEQ3ICAgU0IgQTIsIC0xNjQzMihTNykNCkJGRDAxN0YyICAxODA1QkZEMCAgIExEQzEgRjMwLCA2MTQ5KFMwKQ0KQkZEMDE3RjQgIEJGRDAxODA1ICAgU0IgWkVSTywgLTE2NDMyKEExKQ0KQkZEMDE3RjYgIDE4MDVCRkQwICAgTERDMSBGMzAsIDYxNDkoUzApDQpCRkQwMTdGOCAgQkZEMDE4MDUgICBTQiBaRVJPLCAtMTY0MzIoQTEpDQpCRkQwMTdGQSAgMThFQkJGRDAgICBMREMxIEYzMCwgNjM3OShTMCkNCkJGRDAxN0ZDICBCRkQwMThFQiAgIFNCIEEzLCAtMTY0MzIoVDMpDQpCRkQwMTdGRSAgMTg4REJGRDAgICBMREMxIEYzMCwgNjI4NShTMCkNCkJGRDAxODAwICBCRkQwMTg4RCAgIFNCIEEwLCAtMTY0MzIoVDUpDQpCRkQwMTgwMiAgRkM3RUJGRDAgICBMREMxIEYzMCwgLTg5OChTMCkNCjY0NTogICAgICAgICAgICAgICAgIAkJCXsNCjY0NjogICAgICAgICAgICAgICAgIAkJCQljYXNlIHRtckNPTU1BTkRfU1RBUlQgOg0KNjQ3OiAgICAgICAgICAgICAgICAgCQkJICAgIGNhc2UgdG1yQ09NTUFORF9TVEFSVF9GUk9NX0lTUiA6DQo2NDg6ICAgICAgICAgICAgICAgICAJCQkgICAgY2FzZSB0bXJDT01NQU5EX1JFU0VUIDoNCjY0OTogICAgICAgICAgICAgICAgIAkJCSAgICBjYXNlIHRtckNPTU1BTkRfUkVTRVRfRlJPTV9JU1IgOg0KNjUwOiAgICAgICAgICAgICAgICAgCQkJCWNhc2UgdG1yQ09NTUFORF9TVEFSVF9ET05UX1RSQUNFIDoNCjY1MTogICAgICAgICAgICAgICAgIAkJCQkJLyogU3RhcnQgb3IgcmVzdGFydCBhIHRpbWVyLiAqLw0KNjUyOiAgICAgICAgICAgICAgICAgCQkJCQlpZiggcHJ2SW5zZXJ0VGltZXJJbkFjdGl2ZUxpc3QoIHB4VGltZXIsICB4TWVzc2FnZS51LnhUaW1lclBhcmFtZXRlcnMueE1lc3NhZ2VWYWx1ZSArIHB4VGltZXItPnhUaW1lclBlcmlvZEluVGlja3MsIHhUaW1lTm93LCB4TWVzc2FnZS51LnhUaW1lclBhcmFtZXRlcnMueE1lc3NhZ2VWYWx1ZSApID09IHBkVFJVRSApDQpCRkQwMTgwNCAgMDAyQ0ZDN0UgICBMVyBWMSwgNDQoUzgpDQpCRkQwMTgwOCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMTgwQyAgICAgIDY5MjYgICBMVyBWMCwgMjQoVjApDQpCRkQwMTgwRSAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjANCkJGRDAxODEwICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAxODE0ICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkNCkJGRDAxODE4ICAgICAgMENBMyAgIE1PVkUgQTEsIFYxDQpCRkQwMTgxQSAgMDAyMEZDREUgICBMVyBBMiwgMzIoUzgpDQpCRkQwMTgxRSAgICAgIDBDRTIgICBNT1ZFIEEzLCBWMA0KQkZEMDE4MjAgIDJCRTQ3N0U4ICAgSkFMUyBwcnZJbnNlcnRUaW1lckluQWN0aXZlTGlzdA0KQkZEMDE4MjIgICAgICAyQkU0ICAgTEhVIEEzLCA4KEEyKQ0KQkZEMDE4MjQgICAgICAwQzAwICAgTk9QDQpCRkQwMTgyNiAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMA0KQkZEMDE4MjggICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAxODJBICAwMDYxQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDE4RjANCkJGRDAxODJDICAwQzAwMDA2MSAgIFNMTCBWMSwgQVQsIDENCkJGRDAxODJFICAgICAgMEMwMCAgIE5PUA0KNjUzOiAgICAgICAgICAgICAgICAgCQkJCQl7DQo2NTQ6ICAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgdGltZXIgZXhwaXJlZCBiZWZvcmUgaXQgd2FzIGFkZGVkIHRvIHRoZSBhY3RpdmUNCjY1NTogICAgICAgICAgICAgICAgIAkJCQkJCXRpbWVyIGxpc3QuICBQcm9jZXNzIGl0IG5vdy4gKi8NCjY1NjogICAgICAgICAgICAgICAgIAkJCQkJCXB4VGltZXItPnB4Q2FsbGJhY2tGdW5jdGlvbiggKCBUaW1lckhhbmRsZV90ICkgcHhUaW1lciApOw0KQkZEMDE4MzAgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDE4MzQgICAgICA2OTI5ICAgTFcgVjAsIDM2KFYwKQ0KQkZEMDE4MzYgIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQ0KQkZEMDE4M0EgICAgICA0NUUyICAgSkFMUlMxNiBWMA0KQkZEMDE4M0MgICAgICAwQzAwICAgTk9QDQo2NTc6ICAgICAgICAgICAgICAgICAJCQkJCQl0cmFjZVRJTUVSX0VYUElSRUQoIHB4VGltZXIgKTsNCjY1ODogICAgICAgICAgICAgICAgIA0KNjU5OiAgICAgICAgICAgICAgICAgCQkJCQkJaWYoIHB4VGltZXItPnV4QXV0b1JlbG9hZCA9PSAoIFVCYXNlVHlwZV90ICkgcGRUUlVFICkNCkJGRDAxODNFICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAxODQyICAgICAgNjlBNyAgIExXIFYxLCAyOChWMCkNCkJGRDAxODQ0ICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMTg0NiAgMDA1NkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxOEY2DQpCRkQwMTg0OCAgMEMwMDAwNTYgICBTTEwgVjAsIFM2LCAxDQpCRkQwMTg0QSAgICAgIDBDMDAgICBOT1ANCjY2MDogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjY2MTogICAgICAgICAgICAgICAgIAkJCQkJCQl4UmVzdWx0ID0geFRpbWVyR2VuZXJpY0NvbW1hbmQoIHB4VGltZXIsIHRtckNPTU1BTkRfU1RBUlRfRE9OVF9UUkFDRSwgeE1lc3NhZ2UudS54VGltZXJQYXJhbWV0ZXJzLnhNZXNzYWdlVmFsdWUgKyBweFRpbWVyLT54VGltZXJQZXJpb2RJblRpY2tzLCBOVUxMLCB0bXJOT19ERUxBWSApOw0KQkZEMDE4NEMgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQ0KQkZEMDE4NTAgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDE4NTQgICAgICA2OTI2ICAgTFcgVjAsIDI0KFYwKQ0KQkZEMDE4NTYgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwMTg1OCAgICAgIEM4MDQgICBTVyBaRVJPLCAxNihTUCkNCkJGRDAxODVBICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkNCkJGRDAxODVFICAgICAgMENBMCAgIE1PVkUgQTEsIFpFUk8NCkJGRDAxODYwICAgICAgMENDMiAgIE1PVkUgQTIsIFYwDQpCRkQwMTg2MiAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPDQpCRkQwMTg2NCAgMkQwRTc3RTggICBKQUxTIHhUaW1lckdlbmVyaWNDb21tYW5kDQpCRkQwMTg2NiAgICAgIDJEMEUgICBBTkRJIFYwLCBTMCwgMHg4MDAwDQpCRkQwMTg2OCAgICAgIDBDMDAgICBOT1ANCkJGRDAxODZBICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkNCjY2MjogICAgICAgICAgICAgICAgIAkJCQkJCQljb25maWdBU1NFUlQoIHhSZXN1bHQgKTsNCkJGRDAxODZFICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDAxODcyICAwMDQzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxOEZDDQpCRkQwMTg3NiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDE4NzggIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDE4N0EgIDlBRTgzMDgyICAgQURESVUgQTAsIFYwLCAtMjU4ODANCkJGRDAxODdDICAzMEEwOUFFOCAgIFNXQzEgRjIzLCAxMjQ0OChUMCkNCkJGRDAxODdFICAwMjk2MzBBMCAgIEFERElVIEExLCBaRVJPLCA2NjINCkJGRDAxODgyICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDE4ODQgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAxODg2ICAgICAgMEMwMCAgIE5PUA0KNjYzOiAgICAgICAgICAgICAgICAgCQkJCQkJCSggdm9pZCApIHhSZXN1bHQ7DQo2NjQ6ICAgICAgICAgICAgICAgICAJCQkJCQl9DQo2NjU6ICAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQo2NjY6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo2Njc6ICAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjY4OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KNjY5OiAgICAgICAgICAgICAgICAgCQkJCQl9DQo2NzA6ICAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjY3MTogICAgICAgICAgICAgICAgIAkJCQkJew0KNjcyOiAgICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjczOiAgICAgICAgICAgICAgICAgCQkJCQl9DQo2NzQ6ICAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDE4ODggICAgICBDQzNBICAgQiAweEJGRDAxOEZFDQpCRkQwMTg4QSAgICAgIDBDMDAgICBOT1ANCkJGRDAxOEYwICAgICAgMEMwMCAgIE5PUA0KQkZEMDE4RjIgICAgICBDQzA1ICAgQiAweEJGRDAxOEZFDQpCRkQwMThGNCAgICAgIDBDMDAgICBOT1ANCkJGRDAxOEY2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDE4RjggICAgICBDQzAyICAgQiAweEJGRDAxOEZFDQpCRkQwMThGQSAgICAgIDBDMDAgICBOT1ANCkJGRDAxOEZDICAgICAgMEMwMCAgIE5PUA0KNjc1OiAgICAgICAgICAgICAgICAgDQo2NzY6ICAgICAgICAgICAgICAgICAJCQkJY2FzZSB0bXJDT01NQU5EX1NUT1AgOg0KNjc3OiAgICAgICAgICAgICAgICAgCQkJCWNhc2UgdG1yQ09NTUFORF9TVE9QX0ZST01fSVNSIDoNCjY3ODogICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHRpbWVyIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBhY3RpdmUgbGlzdC4NCjY3OTogICAgICAgICAgICAgICAgIAkJCQkJVGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlLiAqLw0KNjgwOiAgICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxOEVBICAgICAgMEMwMCAgIE5PUA0KQkZEMDE4RUMgICAgICBDQzA4ICAgQiAweEJGRDAxOEZFDQpCRkQwMThFRSAgICAgIDBDMDAgICBOT1ANCjY4MTogICAgICAgICAgICAgICAgIA0KNjgyOiAgICAgICAgICAgICAgICAgCQkJCWNhc2UgdG1yQ09NTUFORF9DSEFOR0VfUEVSSU9EIDoNCjY4MzogICAgICAgICAgICAgICAgIAkJCQljYXNlIHRtckNPTU1BTkRfQ0hBTkdFX1BFUklPRF9GUk9NX0lTUiA6DQo2ODQ6ICAgICAgICAgICAgICAgICAJCQkJCXB4VGltZXItPnhUaW1lclBlcmlvZEluVGlja3MgPSB4TWVzc2FnZS51LnhUaW1lclBhcmFtZXRlcnMueE1lc3NhZ2VWYWx1ZTsNCkJGRDAxODhDICAwMDJDRkM3RSAgIExXIFYxLCA0NChTOCkNCkJGRDAxODkwICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAxODk0ICAgICAgRTlBNiAgIFNXIFYxLCAyNChWMCkNCjY4NTogICAgICAgICAgICAgICAgIAkJCQkJY29uZmlnQVNTRVJUKCAoIHB4VGltZXItPnhUaW1lclBlcmlvZEluVGlja3MgPiAwICkgKTsNCkJGRDAxODk2ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAxODlBICAgICAgNjkyNiAgIExXIFYwLCAyNChWMCkNCkJGRDAxODlDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxOEIyDQpCRkQwMThBMCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDE4QTIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDE4QTQgIDlBRTgzMDgyICAgQURESVUgQTAsIFYwLCAtMjU4ODANCkJGRDAxOEE2ICAzMEEwOUFFOCAgIFNXQzEgRjIzLCAxMjQ0OChUMCkNCkJGRDAxOEE4ICAwMkFEMzBBMCAgIEFERElVIEExLCBaRVJPLCA2ODUNCkJGRDAxOEFDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDE4QUUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAxOEIwICAgICAgMEMwMCAgIE5PUA0KNjg2OiAgICAgICAgICAgICAgICAgDQo2ODc6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBuZXcgcGVyaW9kIGRvZXMgbm90IHJlYWxseSBoYXZlIGEgcmVmZXJlbmNlLCBhbmQgY2FuIGJlDQo2ODg6ICAgICAgICAgICAgICAgICAJCQkJCWxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9sZCBvbmUuICBUaGUgY29tbWFuZCB0aW1lIGlzDQo2ODk6ICAgICAgICAgICAgICAgICAJCQkJCXRoZXJlZm9yZSBzZXQgdG8gdGhlIGN1cnJlbnQgdGltZSwgYW5kIGFzIHRoZSBwZXJpb2QgY2Fubm90IGJlDQo2OTA6ICAgICAgICAgICAgICAgICAJCQkJCXplcm8gdGhlIG5leHQgZXhwaXJ5IHRpbWUgY2FuIG9ubHkgYmUgaW4gdGhlIGZ1dHVyZSwgbWVhbmluZw0KNjkxOiAgICAgICAgICAgICAgICAgCQkJCQkodW5saWtlIGZvciB0aGUgeFRpbWVyU3RhcnQoKSBjYXNlIGFib3ZlKSB0aGVyZSBpcyBubyBmYWlsIGNhc2UNCjY5MjogICAgICAgICAgICAgICAgIAkJCQkJdGhhdCBuZWVkcyB0byBiZSBoYW5kbGVkIGhlcmUuICovDQo2OTM6ICAgICAgICAgICAgICAgICAJCQkJCSggdm9pZCApIHBydkluc2VydFRpbWVySW5BY3RpdmVMaXN0KCBweFRpbWVyLCAoIHhUaW1lTm93ICsgcHhUaW1lci0+eFRpbWVyUGVyaW9kSW5UaWNrcyApLCB4VGltZU5vdywgeFRpbWVOb3cgKTsNCkJGRDAxOEIyICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAxOEI2ICAgICAgNjlBNiAgIExXIFYxLCAyNChWMCkNCkJGRDAxOEI4ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAxOEJDICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDE4QkUgIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQ0KQkZEMDE4QzIgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAxOEM0ICAwMDIwRkNERSAgIExXIEEyLCAzMihTOCkNCkJGRDAxOEM4ICAwMDIwRkNGRSAgIExXIEEzLCAzMihTOCkNCkJGRDAxOENDICAyQkU0NzdFOCAgIEpBTFMgcHJ2SW5zZXJ0VGltZXJJbkFjdGl2ZUxpc3QNCkJGRDAxOENFICAgICAgMkJFNCAgIExIVSBBMywgOChBMikNCkJGRDAxOEQwICAgICAgMEMwMCAgIE5PUA0KNjk0OiAgICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxOEQyICAgICAgQ0MxNSAgIEIgMHhCRkQwMThGRQ0KQkZEMDE4RDQgICAgICAwQzAwICAgTk9QDQo2OTU6ICAgICAgICAgICAgICAgICANCjY5NjogICAgICAgICAgICAgICAgIAkJCQljYXNlIHRtckNPTU1BTkRfREVMRVRFIDoNCjY5NzogICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHRpbWVyIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBhY3RpdmUgbGlzdCwNCjY5ODogICAgICAgICAgICAgICAgIAkJCQkJanVzdCBmcmVlIHVwIHRoZSBtZW1vcnkuICovDQo2OTk6ICAgICAgICAgICAgICAgICAJCQkJCXZQb3J0RnJlZSggcHhUaW1lciApOw0KQkZEMDE4RDYgIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQ0KQkZEMDE4REEgIDJGRUE3N0U4ICAgSkFMUyB2UG9ydEZyZWUNCkJGRDAxOERDICAgICAgMkZFQSAgIEFOREkgQTMsIEEyLCAweDIwDQpCRkQwMThERSAgICAgIDBDMDAgICBOT1ANCjcwMDogICAgICAgICAgICAgICAgIAkJCQkJYnJlYWs7DQpCRkQwMThFMCAgICAgIENDMEUgICBCIDB4QkZEMDE4RkUNCkJGRDAxOEUyICAgICAgMEMwMCAgIE5PUA0KNzAxOiAgICAgICAgICAgICAgICAgDQo3MDI6ICAgICAgICAgICAgICAgICAJCQkJZGVmYXVsdAk6DQo3MDM6ICAgICAgICAgICAgICAgICAJCQkJCS8qIERvbid0IGV4cGVjdCB0byBnZXQgaGVyZS4gKi8NCjcwNDogICAgICAgICAgICAgICAgIAkJCQkJYnJlYWs7DQpCRkQwMThFNCAgICAgIDBDMDAgICBOT1ANCkJGRDAxOEU2ICAgICAgQ0MwQiAgIEIgMHhCRkQwMThGRQ0KQkZEMDE4RTggICAgICAwQzAwICAgTk9QDQo3MDU6ICAgICAgICAgICAgICAgICAJCQl9DQo3MDY6ICAgICAgICAgICAgICAgICAJCX0NCjcwNzogICAgICAgICAgICAgICAgIAl9DQo3MDg6ICAgICAgICAgICAgICAgICB9DQpCRkQwMTkxOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDE5MUEgICAgICA0QkYxICAgTFcgUkEsIDY4KFNQKQ0KQkZEMDE5MUMgICAgICA0QkQwICAgTFcgUzgsIDY0KFNQKQ0KQkZEMDE5MUUgICAgICA0QzI1ICAgQURESVUgU1AsIFNQLCA3Mg0KQkZEMDE5MjAgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDE5MjIgICAgICAwQzAwICAgTk9QDQo3MDk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjcxMDogICAgICAgICAgICAgICAgIA0KNzExOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2U3dpdGNoVGltZXJMaXN0cyggdm9pZCApDQo3MTI6ICAgICAgICAgICAgICAgICB7DQpCRkQwM0VGMCAgICAgIDRGRTUgICBBRERJVSBTUCwgU1AsIC01Ng0KQkZEMDNFRjIgICAgICBDQkVEICAgU1cgUkEsIDUyKFNQKQ0KQkZEMDNFRjQgICAgICBDQkNDICAgU1cgUzgsIDQ4KFNQKQ0KQkZEMDNFRjYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjcxMzogICAgICAgICAgICAgICAgIFRpY2tUeXBlX3QgeE5leHRFeHBpcmVUaW1lLCB4UmVsb2FkVGltZTsNCjcxNDogICAgICAgICAgICAgICAgIExpc3RfdCAqcHhUZW1wOw0KNzE1OiAgICAgICAgICAgICAgICAgVGltZXJfdCAqcHhUaW1lcjsNCjcxNjogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJlc3VsdDsNCjcxNzogICAgICAgICAgICAgICAgIA0KNzE4OiAgICAgICAgICAgICAgICAgCS8qIFRoZSB0aWNrIGNvdW50IGhhcyBvdmVyZmxvd2VkLiAgVGhlIHRpbWVyIGxpc3RzIG11c3QgYmUgc3dpdGNoZWQuDQo3MTk6ICAgICAgICAgICAgICAgICAJSWYgdGhlcmUgYXJlIGFueSB0aW1lcnMgc3RpbGwgcmVmZXJlbmNlZCBmcm9tIHRoZSBjdXJyZW50IHRpbWVyIGxpc3QNCjcyMDogICAgICAgICAgICAgICAgIAl0aGVuIHRoZXkgbXVzdCBoYXZlIGV4cGlyZWQgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBsaXN0cw0KNzIxOiAgICAgICAgICAgICAgICAgCWFyZSBzd2l0Y2hlZC4gKi8NCjcyMjogICAgICAgICAgICAgICAgIAl3aGlsZSggbGlzdExJU1RfSVNfRU1QVFkoIHB4Q3VycmVudFRpbWVyTGlzdCApID09IHBkRkFMU0UgKQ0KQkZEMDNFRjggICAgICBDQzYxICAgQiAweEJGRDAzRkJDDQpCRkQwM0VGQSAgICAgIDBDMDAgICBOT1ANCkJGRDAzRkJDICA4MDYwRkM1QyAgIExXIFYwLCAtMzI2NzIoR1ApDQpCRkQwM0ZDMCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAzRkMyICBGRjlCNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzRUZDDQpCRkQwM0ZDNCAgRkM1Q0ZGOUIgICBMVyBHUCwgLTkzMihLMSkNCjcyMzogICAgICAgICAgICAgICAgIAl7DQo3MjQ6ICAgICAgICAgICAgICAgICAJCXhOZXh0RXhwaXJlVGltZSA9IGxpc3RHRVRfSVRFTV9WQUxVRV9PRl9IRUFEX0VOVFJZKCBweEN1cnJlbnRUaW1lckxpc3QgKTsNCkJGRDAzRUZDICA4MDYwRkM1QyAgIExXIFYwLCAtMzI2NzIoR1ApDQpCRkQwM0YwMCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApDQpCRkQwM0YwMiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAzRjA0ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjcyNTogICAgICAgICAgICAgICAgIA0KNzI2OiAgICAgICAgICAgICAgICAgCQkvKiBSZW1vdmUgdGhlIHRpbWVyIGZyb20gdGhlIGxpc3QuICovDQo3Mjc6ICAgICAgICAgICAgICAgICAJCXB4VGltZXIgPSAoIFRpbWVyX3QgKiApIGxpc3RHRVRfT1dORVJfT0ZfSEVBRF9FTlRSWSggcHhDdXJyZW50VGltZXJMaXN0ICk7DQpCRkQwM0YwOCAgODA2MEZDNUMgICBMVyBWMCwgLTMyNjcyKEdQKQ0KQkZEMDNGMEMgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQ0KQkZEMDNGMEUgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQ0KQkZEMDNGMTAgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQ0KNzI4OiAgICAgICAgICAgICAgICAgCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VGltZXItPnhUaW1lckxpc3RJdGVtICkgKTsNCkJGRDAzRjE0ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAzRjE4ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDNGMUEgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzRjFDICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwM0YxRSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwM0YyMCAgICAgIDBDMDAgICBOT1ANCjcyOTogICAgICAgICAgICAgICAgIAkJdHJhY2VUSU1FUl9FWFBJUkVEKCBweFRpbWVyICk7DQo3MzA6ICAgICAgICAgICAgICAgICANCjczMTogICAgICAgICAgICAgICAgIAkJLyogRXhlY3V0ZSBpdHMgY2FsbGJhY2ssIHRoZW4gc2VuZCBhIGNvbW1hbmQgdG8gcmVzdGFydCB0aGUgdGltZXIgaWYNCjczMjogICAgICAgICAgICAgICAgIAkJaXQgaXMgYW4gYXV0by1yZWxvYWQgdGltZXIuICBJdCBjYW5ub3QgYmUgcmVzdGFydGVkIGhlcmUgYXMgdGhlIGxpc3RzDQo3MzM6ICAgICAgICAgICAgICAgICAJCWhhdmUgbm90IHlldCBiZWVuIHN3aXRjaGVkLiAqLw0KNzM0OiAgICAgICAgICAgICAgICAgCQlweFRpbWVyLT5weENhbGxiYWNrRnVuY3Rpb24oICggVGltZXJIYW5kbGVfdCApIHB4VGltZXIgKTsNCkJGRDAzRjIyICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAzRjI2ICAgICAgNjkyOSAgIExXIFYwLCAzNihWMCkNCkJGRDAzRjI4ICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkNCkJGRDAzRjJDICAgICAgNDVFMiAgIEpBTFJTMTYgVjANCkJGRDAzRjJFICAgICAgMEMwMCAgIE5PUA0KNzM1OiAgICAgICAgICAgICAgICAgDQo3MzY6ICAgICAgICAgICAgICAgICAJCWlmKCBweFRpbWVyLT51eEF1dG9SZWxvYWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkVFJVRSApDQpCRkQwM0YzMCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwM0YzNCAgICAgIDY5QTcgICBMVyBWMSwgMjgoVjApDQpCRkQwM0YzNiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDNGMzggIDAwNDBCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwM0ZCQw0KQkZEMDNGM0EgIDBDMDAwMDQwICAgU0xMIFYwLCBaRVJPLCAxDQpCRkQwM0YzQyAgICAgIDBDMDAgICBOT1ANCjczNzogICAgICAgICAgICAgICAgIAkJew0KNzM4OiAgICAgICAgICAgICAgICAgCQkJLyogQ2FsY3VsYXRlIHRoZSByZWxvYWQgdmFsdWUsIGFuZCBpZiB0aGUgcmVsb2FkIHZhbHVlIHJlc3VsdHMgaW4NCjczOTogICAgICAgICAgICAgICAgIAkJCXRoZSB0aW1lciBnb2luZyBpbnRvIHRoZSBzYW1lIHRpbWVyIGxpc3QgdGhlbiBpdCBoYXMgYWxyZWFkeSBleHBpcmVkDQo3NDA6ICAgICAgICAgICAgICAgICAJCQlhbmQgdGhlIHRpbWVyIHNob3VsZCBiZSByZS1pbnNlcnRlZCBpbnRvIHRoZSBjdXJyZW50IGxpc3Qgc28gaXQgaXMNCjc0MTogICAgICAgICAgICAgICAgIAkJCXByb2Nlc3NlZCBhZ2FpbiB3aXRoaW4gdGhpcyBsb29wLiAgT3RoZXJ3aXNlIGEgY29tbWFuZCBzaG91bGQgYmUgc2VudA0KNzQyOiAgICAgICAgICAgICAgICAgCQkJdG8gcmVzdGFydCB0aGUgdGltZXIgdG8gZW5zdXJlIGl0IGlzIG9ubHkgaW5zZXJ0ZWQgaW50byBhIGxpc3QgYWZ0ZXINCjc0MzogICAgICAgICAgICAgICAgIAkJCXRoZSBsaXN0cyBoYXZlIGJlZW4gc3dhcHBlZC4gKi8NCjc0NDogICAgICAgICAgICAgICAgIAkJCXhSZWxvYWRUaW1lID0gKCB4TmV4dEV4cGlyZVRpbWUgKyBweFRpbWVyLT54VGltZXJQZXJpb2RJblRpY2tzICk7DQpCRkQwM0YzRSAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwM0Y0MiAgICAgIDY5QTYgICBMVyBWMSwgMjQoVjApDQpCRkQwM0Y0NCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwM0Y0OCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDAzRjRBICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkNCjc0NTogICAgICAgICAgICAgICAgIAkJCWlmKCB4UmVsb2FkVGltZSA+IHhOZXh0RXhwaXJlVGltZSApDQpCRkQwM0Y0RSAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpDQpCRkQwM0Y1MiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwM0Y1NiAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjENCkJGRDAzRjU4ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMA0KQkZEMDNGNUEgIDAwMTY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNGOEENCjc0NjogICAgICAgICAgICAgICAgIAkJCXsNCjc0NzogICAgICAgICAgICAgICAgIAkJCQlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSwgeFJlbG9hZFRpbWUgKTsNCkJGRDAzRjVFICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAzRjYyICAwMDIwRkM3RSAgIExXIFYxLCAzMihTOCkNCkJGRDAzRjY2ICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQ0KNzQ4OiAgICAgICAgICAgICAgICAgCQkJCWxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApLCBweFRpbWVyICk7DQpCRkQwM0Y2OCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwM0Y2QyAgMDAxQ0ZDN0UgICBMVyBWMSwgMjgoUzgpDQpCRkQwM0Y3MCAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApDQo3NDk6ICAgICAgICAgICAgICAgICAJCQkJdkxpc3RJbnNlcnQoIHB4Q3VycmVudFRpbWVyTGlzdCwgJiggcHhUaW1lci0+eFRpbWVyTGlzdEl0ZW0gKSApOw0KQkZEMDNGNzIgIDgwNjBGQzdDICAgTFcgVjEsIC0zMjY3MihHUCkNCkJGRDAzRjc2ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAzRjdBICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDNGN0MgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDAzRjdFICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwM0Y4MCAgMzA0MDc3RTggICBKQUxTIHZMaXN0SW5zZXJ0DQpCRkQwM0Y4MiAgMEMwMDMwNDAgICBBRERJVSBWMCwgWkVSTywgMzA3Mg0KQkZEMDNGODQgICAgICAwQzAwICAgTk9QDQpCRkQwM0Y4NiAgICAgIENDMUEgICBCIDB4QkZEMDNGQkMNCkJGRDAzRjg4ICAgICAgMEMwMCAgIE5PUA0KNzUwOiAgICAgICAgICAgICAgICAgCQkJfQ0KNzUxOiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KNzUyOiAgICAgICAgICAgICAgICAgCQkJew0KNzUzOiAgICAgICAgICAgICAgICAgCQkJCXhSZXN1bHQgPSB4VGltZXJHZW5lcmljQ29tbWFuZCggcHhUaW1lciwgdG1yQ09NTUFORF9TVEFSVF9ET05UX1RSQUNFLCB4TmV4dEV4cGlyZVRpbWUsIE5VTEwsIHRtck5PX0RFTEFZICk7DQpCRkQwM0Y4QSAgICAgIEM4MDQgICBTVyBaRVJPLCAxNihTUCkNCkJGRDAzRjhDICAwMDFDRkM5RSAgIExXIEEwLCAyOChTOCkNCkJGRDAzRjkwICAgICAgMENBMCAgIE1PVkUgQTEsIFpFUk8NCkJGRDAzRjkyICAwMDE4RkNERSAgIExXIEEyLCAyNChTOCkNCkJGRDAzRjk2ICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8NCkJGRDAzRjk4ICAyRDBFNzdFOCAgIEpBTFMgeFRpbWVyR2VuZXJpY0NvbW1hbmQNCkJGRDAzRjlBICAgICAgMkQwRSAgIEFOREkgVjAsIFMwLCAweDgwMDANCkJGRDAzRjlDICAgICAgMEMwMCAgIE5PUA0KQkZEMDNGOUUgIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQ0KNzU0OiAgICAgICAgICAgICAgICAgCQkJCWNvbmZpZ0FTU0VSVCggeFJlc3VsdCApOw0KQkZEMDNGQTIgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDNGQTYgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNGQkMNCkJGRDAzRkFBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwM0ZBQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwM0ZBRSAgOUFFODMwODIgICBBRERJVSBBMCwgVjAsIC0yNTg4MA0KQkZEMDNGQjAgIDMwQTA5QUU4ICAgU1dDMSBGMjMsIDEyNDQ4KFQwKQ0KQkZEMDNGQjIgIDAyRjIzMEEwICAgQURESVUgQTEsIFpFUk8sIDc1NA0KQkZEMDNGQjYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwM0ZCOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDNGQkEgICAgICAwQzAwICAgTk9QDQo3NTU6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgeFJlc3VsdDsNCjc1NjogICAgICAgICAgICAgICAgIAkJCX0NCjc1NzogICAgICAgICAgICAgICAgIAkJfQ0KNzU4OiAgICAgICAgICAgICAgICAgCQllbHNlDQo3NTk6ICAgICAgICAgICAgICAgICAJCXsNCjc2MDogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjc2MTogICAgICAgICAgICAgICAgIAkJfQ0KNzYyOiAgICAgICAgICAgICAgICAgCX0NCjc2MzogICAgICAgICAgICAgICAgIA0KNzY0OiAgICAgICAgICAgICAgICAgCXB4VGVtcCA9IHB4Q3VycmVudFRpbWVyTGlzdDsNCkJGRDAzRkM2ICA4MDYwRkM1QyAgIExXIFYwLCAtMzI2NzIoR1ApDQpCRkQwM0ZDQSAgMDAyOEY4NUUgICBTVyBWMCwgNDAoUzgpDQo3NjU6ICAgICAgICAgICAgICAgICAJcHhDdXJyZW50VGltZXJMaXN0ID0gcHhPdmVyZmxvd1RpbWVyTGlzdDsNCkJGRDAzRkNFICA4MDY0RkM1QyAgIExXIFYwLCAtMzI2NjgoR1ApDQpCRkQwM0ZEMiAgODA2MEY4NUMgICBTVyBWMCwgLTMyNjcyKEdQKQ0KNzY2OiAgICAgICAgICAgICAgICAgCXB4T3ZlcmZsb3dUaW1lckxpc3QgPSBweFRlbXA7DQpCRkQwM0ZENiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwM0ZEQSAgODA2NEY4NUMgICBTVyBWMCwgLTMyNjY4KEdQKQ0KNzY3OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDNGREUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAzRkUwICAgICAgNEJFRCAgIExXIFJBLCA1MihTUCkNCkJGRDAzRkUyICAgICAgNEJDQyAgIExXIFM4LCA0OChTUCkNCkJGRDAzRkU0ICAgICAgNEMxRCAgIEFERElVIFNQLCBTUCwgNTYNCkJGRDAzRkU2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAzRkU4ICAgICAgMEMwMCAgIE5PUA0KNzY4OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo3Njk6ICAgICAgICAgICAgICAgICANCjc3MDogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkNoZWNrRm9yVmFsaWRMaXN0QW5kUXVldWUoIHZvaWQgKQ0KNzcxOiAgICAgICAgICAgICAgICAgew0KQkZEMDZCRTggICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQNCkJGRDA2QkVBICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkNCkJGRDA2QkVDICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkNCkJGRDA2QkVFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo3NzI6ICAgICAgICAgICAgICAgICAJLyogQ2hlY2sgdGhhdCB0aGUgbGlzdCBmcm9tIHdoaWNoIGFjdGl2ZSB0aW1lcnMgYXJlIHJlZmVyZW5jZWQsIGFuZCB0aGUNCjc3MzogICAgICAgICAgICAgICAgIAlxdWV1ZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHRpbWVyIHNlcnZpY2UsIGhhdmUgYmVlbg0KNzc0OiAgICAgICAgICAgICAgICAgCWluaXRpYWxpc2VkLiAqLw0KNzc1OiAgICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDZCRjAgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDA2QkYyICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDZCRjQgICAgICAwQzAwICAgTk9QDQo3NzY6ICAgICAgICAgICAgICAgICAJew0KNzc3OiAgICAgICAgICAgICAgICAgCQlpZiggeFRpbWVyUXVldWUgPT0gTlVMTCApDQpCRkQwNkJGNiAgODA2OEZDNUMgICBMVyBWMCwgLTMyNjY0KEdQKQ0KQkZEMDZCRkEgIDAwMkY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZDNUMNCjc3ODogICAgICAgICAgICAgICAgIAkJew0KNzc5OiAgICAgICAgICAgICAgICAgCQkJdkxpc3RJbml0aWFsaXNlKCAmeEFjdGl2ZVRpbWVyTGlzdDEgKTsNCkJGRDA2QkZFICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwNkMwMCAgMzA4MkJGRDIgICBMREMxIEYzMCwgMTI0MTgoUzIpDQpCRkQwNkMwMiAgQjk0ODMwODIgICBBRERJVSBBMCwgVjAsIC0xODEwNA0KQkZEMDZDMDQgIDc3RThCOTQ4ICAgU0RDMSBGMTAsIDMwNjk2KFQwKQ0KQkZEMDZDMDYgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UNCkJGRDA2QzA4ICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkNCkJGRDA2QzBBICAgICAgMEMwMCAgIE5PUA0KNzgwOiAgICAgICAgICAgICAgICAgCQkJdkxpc3RJbml0aWFsaXNlKCAmeEFjdGl2ZVRpbWVyTGlzdDIgKTsNCkJGRDA2QzBDICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwNkMwRSAgMzA4MkJGRDIgICBMREMxIEYzMCwgMTI0MTgoUzIpDQpCRkQwNkMxMCAgQjk1QzMwODIgICBBRERJVSBBMCwgVjAsIC0xODA4NA0KQkZEMDZDMTIgIDc3RThCOTVDICAgU0RDMSBGMTAsIDMwNjk2KEdQKQ0KQkZEMDZDMTQgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UNCkJGRDA2QzE2ICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkNCkJGRDA2QzE4ICAgICAgMEMwMCAgIE5PUA0KNzgxOiAgICAgICAgICAgICAgICAgCQkJcHhDdXJyZW50VGltZXJMaXN0ID0gJnhBY3RpdmVUaW1lckxpc3QxOw0KQkZEMDZDMUEgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDA2QzFDICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDA2QzFFICBCOTQ4MzA0MiAgIEFERElVIFYwLCBWMCwgLTE4MTA0DQpCRkQwNkMyMCAgRjg1Q0I5NDggICBTREMxIEYxMCwgLTE5NTYoVDApDQpCRkQwNkMyMiAgODA2MEY4NUMgICBTVyBWMCwgLTMyNjcyKEdQKQ0KNzgyOiAgICAgICAgICAgICAgICAgCQkJcHhPdmVyZmxvd1RpbWVyTGlzdCA9ICZ4QWN0aXZlVGltZXJMaXN0MjsNCkJGRDA2QzI2ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwNkMyOCAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwNkMyQSAgQjk1QzMwNDIgICBBRERJVSBWMCwgVjAsIC0xODA4NA0KQkZEMDZDMkMgIEY4NUNCOTVDICAgU0RDMSBGMTAsIC0xOTU2KEdQKQ0KQkZEMDZDMkUgIDgwNjRGODVDICAgU1cgVjAsIC0zMjY2OChHUCkNCjc4MzogICAgICAgICAgICAgICAgIAkJCXhUaW1lclF1ZXVlID0geFF1ZXVlQ3JlYXRlKCAoIFVCYXNlVHlwZV90ICkgY29uZmlnVElNRVJfUVVFVUVfTEVOR1RILCBzaXplb2YoIERhZW1vblRhc2tNZXNzYWdlX3QgKSApOw0KQkZEMDZDMzIgICAgICBFRTA1ICAgTEkgQTAsIDUNCkJGRDA2QzM0ICAgICAgRUU5MCAgIExJIEExLCAxNg0KQkZEMDZDMzYgICAgICAwQ0MwICAgTU9WRSBBMiwgWkVSTw0KQkZEMDZDMzggIDFFRkE3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljQ3JlYXRlDQpCRkQwNkMzQSAgMEMwMDFFRkEgICBMQiBTNywgMzA3MihLMCkNCkJGRDA2QzNDICAgICAgMEMwMCAgIE5PUA0KQkZEMDZDM0UgIDgwNjhGODVDICAgU1cgVjAsIC0zMjY2NChHUCkNCjc4NDogICAgICAgICAgICAgICAgIAkJCWNvbmZpZ0FTU0VSVCggeFRpbWVyUXVldWUgKTsNCkJGRDA2QzQyICA4MDY4RkM1QyAgIExXIFYwLCAtMzI2NjQoR1ApDQpCRkQwNkM0NiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNkM1Qw0KQkZEMDZDNEEgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA2QzRDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA2QzRFICA5QUU4MzA4MiAgIEFERElVIEEwLCBWMCwgLTI1ODgwDQpCRkQwNkM1MCAgMzBBMDlBRTggICBTV0MxIEYyMywgMTI0NDgoVDApDQpCRkQwNkM1MiAgMDMxMDMwQTAgICBBRERJVSBBMSwgWkVSTywgNzg0DQpCRkQwNkM1NiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA2QzU4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNkM1QSAgICAgIDBDMDAgICBOT1ANCjc4NTogICAgICAgICAgICAgICAgIA0KNzg2OiAgICAgICAgICAgICAgICAgCQkJI2lmICggY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSA+IDAgKQ0KNzg3OiAgICAgICAgICAgICAgICAgCQkJew0KNzg4OiAgICAgICAgICAgICAgICAgCQkJCWlmKCB4VGltZXJRdWV1ZSAhPSBOVUxMICkNCjc4OTogICAgICAgICAgICAgICAgIAkJCQl7DQo3OTA6ICAgICAgICAgICAgICAgICAJCQkJCXZRdWV1ZUFkZFRvUmVnaXN0cnkoIHhUaW1lclF1ZXVlLCAiVG1yUSIgKTsNCjc5MTogICAgICAgICAgICAgICAgIAkJCQl9DQo3OTI6ICAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KNzkzOiAgICAgICAgICAgICAgICAgCQkJCXsNCjc5NDogICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNzk1OiAgICAgICAgICAgICAgICAgCQkJCX0NCjc5NjogICAgICAgICAgICAgICAgIAkJCX0NCjc5NzogICAgICAgICAgICAgICAgIAkJCSNlbmRpZiAvKiBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFICovDQo3OTg6ICAgICAgICAgICAgICAgICAJCX0NCjc5OTogICAgICAgICAgICAgICAgIAkJZWxzZQ0KODAwOiAgICAgICAgICAgICAgICAgCQl7DQo4MDE6ICAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo4MDI6ICAgICAgICAgICAgICAgICAJCX0NCjgwMzogICAgICAgICAgICAgICAgIAl9DQo4MDQ6ICAgICAgICAgICAgICAgICAJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDA2QzVDICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDA2QzVFICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA4NDYyDQpCRkQwNkM2MCAgICAgIDBDMDAgICBOT1ANCjgwNTogICAgICAgICAgICAgICAgIH0NCkJGRDA2QzYyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNkM2NCAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApDQpCRkQwNkM2NiAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApDQpCRkQwNkM2OCAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0DQpCRkQwNkM2QSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNkM2QyAgICAgIDBDMDAgICBOT1ANCjgwNjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KODA3OiAgICAgICAgICAgICAgICAgDQo4MDg6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhUaW1lcklzVGltZXJBY3RpdmUoIFRpbWVySGFuZGxlX3QgeFRpbWVyICkNCjgwOTogICAgICAgICAgICAgICAgIHsNCkJGRDA5M0UwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwOTNFMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwOTNFNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwOTNFNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDkzRTggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KODEwOiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGltZXJJc0luQWN0aXZlTGlzdDsNCjgxMTogICAgICAgICAgICAgICAgIFRpbWVyX3QgKnB4VGltZXIgPSAoIFRpbWVyX3QgKiApIHhUaW1lcjsNCkJGRDA5M0VDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA5M0YwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjgxMjogICAgICAgICAgICAgICAgIA0KODEzOiAgICAgICAgICAgICAgICAgCS8qIElzIHRoZSB0aW1lciBpbiB0aGUgbGlzdCBvZiBhY3RpdmUgdGltZXJzPyAqLw0KODE0OiAgICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDkzRjQgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDA5M0Y2ICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDkzRjggICAgICAwQzAwICAgTk9QDQo4MTU6ICAgICAgICAgICAgICAgICAJew0KODE2OiAgICAgICAgICAgICAgICAgCQkvKiBDaGVja2luZyB0byBzZWUgaWYgaXQgaXMgaW4gdGhlIE5VTEwgbGlzdCBpbiBlZmZlY3QgY2hlY2tzIHRvIHNlZSBpZg0KODE3OiAgICAgICAgICAgICAgICAgCQlpdCBpcyByZWZlcmVuY2VkIGZyb20gZWl0aGVyIHRoZSBjdXJyZW50IG9yIHRoZSBvdmVyZmxvdyB0aW1lciBsaXN0cyBpbg0KODE4OiAgICAgICAgICAgICAgICAgCQlvbmUgZ28sIGJ1dCB0aGUgbG9naWMgaGFzIHRvIGJlIHJldmVyc2VkLCBoZW5jZSB0aGUgJyEnLiAqLw0KODE5OiAgICAgICAgICAgICAgICAgCQl4VGltZXJJc0luQWN0aXZlTGlzdCA9ICggQmFzZVR5cGVfdCApICEoIGxpc3RJU19DT05UQUlORURfV0lUSElOKCBOVUxMLCAmKCBweFRpbWVyLT54VGltZXJMaXN0SXRlbSApICkgKTsNCkJGRDA5M0ZBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA5M0ZFICAgICAgNjkyNSAgIExXIFYwLCAyMChWMCkNCkJGRDA5NDAwICAxMzkwMDA0MCAgIFNMVFUgVjAsIFpFUk8sIFYwDQpCRkQwOTQwMiAgRjg1RTEzOTAgICBBRERJIEdQLCBTMCwgLTE5NTQNCkJGRDA5NDA0ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjgyMDogICAgICAgICAgICAgICAgIAl9DQo4MjE6ICAgICAgICAgICAgICAgICAJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDA5NDA4ICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDA5NDBBICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDBBQzBFDQpCRkQwOTQwQyAgICAgIDBDMDAgICBOT1ANCjgyMjogICAgICAgICAgICAgICAgIA0KODIzOiAgICAgICAgICAgICAgICAgCXJldHVybiB4VGltZXJJc0luQWN0aXZlTGlzdDsNCkJGRDA5NDBFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCjgyNDogICAgICAgICAgICAgICAgIH0gLypsaW50ICFlODE4IENhbid0IGJlIHBvaW50ZXIgdG8gY29uc3QgZHVlIHRvIHRoZSB0eXBlZGVmLiAqLw0KQkZEMDk0MTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5NDE0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA5NDE2ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA5NDE4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA5NDFBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5NDFDICAgICAgMEMwMCAgIE5PUA0KODI1OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo4MjY6ICAgICAgICAgICAgICAgICANCjgyNzogICAgICAgICAgICAgICAgIHZvaWQgKnB2VGltZXJHZXRUaW1lcklEKCBjb25zdCBUaW1lckhhbmRsZV90IHhUaW1lciApDQo4Mjg6ICAgICAgICAgICAgICAgICB7DQpCRkQwODc1QyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDg3NUUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDg3NjAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDg3NjIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4NzY0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCjgyOTogICAgICAgICAgICAgICAgIFRpbWVyX3QgKiBjb25zdCBweFRpbWVyID0gKCBUaW1lcl90ICogKSB4VGltZXI7DQpCRkQwODc2OCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwODc2QyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo4MzA6ICAgICAgICAgICAgICAgICB2b2lkICpwdlJldHVybjsNCjgzMTogICAgICAgICAgICAgICAgIA0KODMyOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeFRpbWVyICk7DQpCRkQwODc3MCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwODc3NCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwODc4QQ0KQkZEMDg3NzggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA4NzdBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA4NzdDICA5QUU4MzA4MiAgIEFERElVIEEwLCBWMCwgLTI1ODgwDQpCRkQwODc3RSAgMzBBMDlBRTggICBTV0MxIEYyMywgMTI0NDgoVDApDQpCRkQwODc4MCAgMDM0MDMwQTAgICBBRERJVSBBMSwgWkVSTywgODMyDQpCRkQwODc4NCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA4Nzg2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwODc4OCAgICAgIDBDMDAgICBOT1ANCjgzMzogICAgICAgICAgICAgICAgIA0KODM0OiAgICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDg3OEEgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDA4NzhDICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDg3OEUgICAgICAwQzAwICAgTk9QDQo4MzU6ICAgICAgICAgICAgICAgICAJew0KODM2OiAgICAgICAgICAgICAgICAgCQlwdlJldHVybiA9IHB4VGltZXItPnB2VGltZXJJRDsNCkJGRDA4NzkwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA4Nzk0ICAgICAgNjkyOCAgIExXIFYwLCAzMihWMCkNCkJGRDA4Nzk2ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjgzNzogICAgICAgICAgICAgICAgIAl9DQo4Mzg6ICAgICAgICAgICAgICAgICAJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDA4NzlBICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDA4NzlDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA5RkEwDQpCRkQwODc5RSAgICAgIDBDMDAgICBOT1ANCjgzOTogICAgICAgICAgICAgICAgIA0KODQwOiAgICAgICAgICAgICAgICAgCXJldHVybiBwdlJldHVybjsNCkJGRDA4N0EwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCjg0MTogICAgICAgICAgICAgICAgIH0NCkJGRDA4N0E0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwODdBNiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwODdBOCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwODdBQSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwODdBQyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwODdBRSAgICAgIDBDMDAgICBOT1ANCjg0MjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KODQzOiAgICAgICAgICAgICAgICAgDQo4NDQ6ICAgICAgICAgICAgICAgICB2b2lkIHZUaW1lclNldFRpbWVySUQoIFRpbWVySGFuZGxlX3QgeFRpbWVyLCB2b2lkICpwdk5ld0lEICkNCjg0NTogICAgICAgICAgICAgICAgIHsNCkJGRDA4N0IwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwODdCMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwODdCNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwODdCNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDg3QjggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KQkZEMDg3QkMgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQ0KODQ2OiAgICAgICAgICAgICAgICAgVGltZXJfdCAqIGNvbnN0IHB4VGltZXIgPSAoIFRpbWVyX3QgKiApIHhUaW1lcjsNCkJGRDA4N0MwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA4N0M0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjg0NzogICAgICAgICAgICAgICAgIA0KODQ4OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeFRpbWVyICk7DQpCRkQwODdDOCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwODdDQyAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwODdFMg0KQkZEMDg3RDAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA4N0QyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA4N0Q0ICA5QUU4MzA4MiAgIEFERElVIEEwLCBWMCwgLTI1ODgwDQpCRkQwODdENiAgMzBBMDlBRTggICBTV0MxIEYyMywgMTI0NDgoVDApDQpCRkQwODdEOCAgMDM1MDMwQTAgICBBRERJVSBBMSwgWkVSTywgODQ4DQpCRkQwODdEQyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA4N0RFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwODdFMCAgICAgIDBDMDAgICBOT1ANCjg0OTogICAgICAgICAgICAgICAgIA0KODUwOiAgICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDg3RTIgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDA4N0U0ICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDg3RTYgICAgICAwQzAwICAgTk9QDQo4NTE6ICAgICAgICAgICAgICAgICAJew0KODUyOiAgICAgICAgICAgICAgICAgCQlweFRpbWVyLT5wdlRpbWVySUQgPSBwdk5ld0lEOw0KQkZEMDg3RTggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDg3RUMgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQ0KQkZEMDg3RjAgICAgICBFOUE4ICAgU1cgVjEsIDMyKFYwKQ0KODUzOiAgICAgICAgICAgICAgICAgCX0NCjg1NDogICAgICAgICAgICAgICAgIAl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDg3RjIgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDg3RjQgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDlGRjgNCkJGRDA4N0Y2ICAgICAgMEMwMCAgIE5PUA0KODU1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDg3RjggICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4N0ZBICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA4N0ZDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA4N0ZFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA4ODAwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4ODAyICAgICAgMEMwMCAgIE5PUA0KODU2OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo4NTc6ICAgICAgICAgICAgICAgICANCjg1ODogICAgICAgICAgICAgICAgICNpZiggSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsID09IDEgKQ0KODU5OiAgICAgICAgICAgICAgICAgDQo4NjA6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4VGltZXJQZW5kRnVuY3Rpb25DYWxsRnJvbUlTUiggUGVuZGVkRnVuY3Rpb25fdCB4RnVuY3Rpb25Ub1BlbmQsIHZvaWQgKnB2UGFyYW1ldGVyMSwgdWludDMyX3QgdWxQYXJhbWV0ZXIyLCBCYXNlVHlwZV90ICpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkNCjg2MTogICAgICAgICAgICAgICAgIAl7DQpCRkQwN0Y2NCAgICAgIDRGRTkgICBBRERJVSBTUCwgU1AsIC00OA0KQkZEMDdGNjYgICAgICBDQkVCICAgU1cgUkEsIDQ0KFNQKQ0KQkZEMDdGNjggICAgICBDQkNBICAgU1cgUzgsIDQwKFNQKQ0KQkZEMDdGNkEgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA3RjZDICAwMDMwRjg5RSAgIFNXIEEwLCA0OChTOCkNCkJGRDA3RjcwICAwMDM0RjhCRSAgIFNXIEExLCA1MihTOCkNCkJGRDA3Rjc0ICAwMDM4RjhERSAgIFNXIEEyLCA1NihTOCkNCkJGRDA3Rjc4ICAwMDNDRjhGRSAgIFNXIEEzLCA2MChTOCkNCkJGRDA3RjdBICAzMDQwMDAzQyAgIFNSTCBBVCwgR1AsIDYNCjg2MjogICAgICAgICAgICAgICAgIAlEYWVtb25UYXNrTWVzc2FnZV90IHhNZXNzYWdlOw0KODYzOiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjg2NDogICAgICAgICAgICAgICAgIA0KODY1OiAgICAgICAgICAgICAgICAgCQkvKiBDb21wbGV0ZSB0aGUgbWVzc2FnZSB3aXRoIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBwb3N0IGl0IHRvIHRoZQ0KODY2OiAgICAgICAgICAgICAgICAgCQlkYWVtb24gdGFzay4gKi8NCjg2NzogICAgICAgICAgICAgICAgIAkJeE1lc3NhZ2UueE1lc3NhZ2VJRCA9IHRtckNPTU1BTkRfRVhFQ1VURV9DQUxMQkFDS19GUk9NX0lTUjsNCkJGRDA3RjdDICBGRkZFMzA0MCAgIEFERElVIFYwLCBaRVJPLCAtMg0KQkZEMDdGN0UgIEY4NUVGRkZFICAgTFcgUkEsIC0xOTU0KFM4KQ0KQkZEMDdGODAgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KODY4OiAgICAgICAgICAgICAgICAgCQl4TWVzc2FnZS51LnhDYWxsYmFja1BhcmFtZXRlcnMucHhDYWxsYmFja0Z1bmN0aW9uID0geEZ1bmN0aW9uVG9QZW5kOw0KQkZEMDdGODQgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDdGODggIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KODY5OiAgICAgICAgICAgICAgICAgCQl4TWVzc2FnZS51LnhDYWxsYmFja1BhcmFtZXRlcnMucHZQYXJhbWV0ZXIxID0gcHZQYXJhbWV0ZXIxOw0KQkZEMDdGOEMgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQ0KQkZEMDdGOTAgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQ0KODcwOiAgICAgICAgICAgICAgICAgCQl4TWVzc2FnZS51LnhDYWxsYmFja1BhcmFtZXRlcnMudWxQYXJhbWV0ZXIyID0gdWxQYXJhbWV0ZXIyOw0KQkZEMDdGOTQgIDAwMzhGQzVFICAgTFcgVjAsIDU2KFM4KQ0KQkZEMDdGOTggIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQ0KODcxOiAgICAgICAgICAgICAgICAgDQo4NzI6ICAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSB4UXVldWVTZW5kRnJvbUlTUiggeFRpbWVyUXVldWUsICZ4TWVzc2FnZSwgcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApOw0KQkZEMDdGOUMgIDgwNjhGQzdDICAgTFcgVjEsIC0zMjY2NChHUCkNCkJGRDA3RkEwICAwMDE0MzA1RSAgIEFERElVIFYwLCBTOCwgMjANCkJGRDA3RkE0ICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwN0ZBNiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDdGQTggIDAwM0NGQ0RFICAgTFcgQTIsIDYwKFM4KQ0KQkZEMDdGQUMgICAgICAwQ0UwICAgTU9WRSBBMywgWkVSTw0KQkZEMDdGQUUgIDExRUE3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljU2VuZEZyb21JU1INCkJGRDA3RkIwICAwQzAwMTFFQSAgIEFEREkgVDcsIFQyLCAzMDcyDQpCRkQwN0ZCMiAgICAgIDBDMDAgICBOT1ANCkJGRDA3RkI0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjg3MzogICAgICAgICAgICAgICAgIA0KODc0OiAgICAgICAgICAgICAgICAgCQl0cmFjZVBFTkRfRlVOQ19DQUxMX0ZST01fSVNSKCB4RnVuY3Rpb25Ub1BlbmQsIHB2UGFyYW1ldGVyMSwgdWxQYXJhbWV0ZXIyLCB4UmV0dXJuICk7DQo4NzU6ICAgICAgICAgICAgICAgICANCjg3NjogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwN0ZCOCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQo4Nzc6ICAgICAgICAgICAgICAgICAJfQ0KQkZEMDdGQkMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3RkJFICAgICAgNEJFQiAgIExXIFJBLCA0NChTUCkNCkJGRDA3RkMwICAgICAgNEJDQSAgIExXIFM4LCA0MChTUCkNCkJGRDA3RkMyICAgICAgNEMxOSAgIEFERElVIFNQLCBTUCwgNDgNCkJGRDA3RkM0ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA3RkM2ICAgICAgMEMwMCAgIE5PUA0KODc4OiAgICAgICAgICAgICAgICAgDQo4Nzk6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsICovDQo4ODA6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjg4MTogICAgICAgICAgICAgICAgIA0KODgyOiAgICAgICAgICAgICAgICAgI2lmKCBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgPT0gMSApDQo4ODM6ICAgICAgICAgICAgICAgICANCjg4NDogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhUaW1lclBlbmRGdW5jdGlvbkNhbGwoIFBlbmRlZEZ1bmN0aW9uX3QgeEZ1bmN0aW9uVG9QZW5kLCB2b2lkICpwdlBhcmFtZXRlcjEsIHVpbnQzMl90IHVsUGFyYW1ldGVyMiwgVGlja1R5cGVfdCB4VGlja3NUb1dhaXQgKQ0KODg1OiAgICAgICAgICAgICAgICAgCXsNCkJGRDA2RDcwICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4DQpCRkQwNkQ3MiAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApDQpCRkQwNkQ3NCAgICAgIENCQ0EgICBTVyBTOCwgNDAoU1ApDQpCRkQwNkQ3NiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDZENzggIDAwMzBGODlFICAgU1cgQTAsIDQ4KFM4KQ0KQkZEMDZEN0MgIDAwMzRGOEJFICAgU1cgQTEsIDUyKFM4KQ0KQkZEMDZEODAgIDAwMzhGOERFICAgU1cgQTIsIDU2KFM4KQ0KQkZEMDZEODQgIDAwM0NGOEZFICAgU1cgQTMsIDYwKFM4KQ0KODg2OiAgICAgICAgICAgICAgICAgCURhZW1vblRhc2tNZXNzYWdlX3QgeE1lc3NhZ2U7DQo4ODc6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UmV0dXJuOw0KODg4OiAgICAgICAgICAgICAgICAgDQo4ODk6ICAgICAgICAgICAgICAgICAJCS8qIFRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgdGltZXIgaGFzIGJlZW4gY3JlYXRlZCBvcg0KODkwOiAgICAgICAgICAgICAgICAgCQlhZnRlciB0aGUgc2NoZWR1bGVyIGhhcyBiZWVuIHN0YXJ0ZWQgYmVjYXVzZSwgdW50aWwgdGhlbiwgdGhlIHRpbWVyDQo4OTE6ICAgICAgICAgICAgICAgICAJCXF1ZXVlIGRvZXMgbm90IGV4aXN0LiAqLw0KODkyOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHhUaW1lclF1ZXVlICk7DQpCRkQwNkQ4OCAgODA2OEZDNUMgICBMVyBWMCwgLTMyNjY0KEdQKQ0KQkZEMDZEOEMgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZEQTINCkJGRDA2RDkwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNkQ5MiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNkQ5NCAgOUFFODMwODIgICBBRERJVSBBMCwgVjAsIC0yNTg4MA0KQkZEMDZEOTYgIDMwQTA5QUU4ICAgU1dDMSBGMjMsIDEyNDQ4KFQwKQ0KQkZEMDZEOTggIDAzN0MzMEEwICAgQURESVUgQTEsIFpFUk8sIDg5Mg0KQkZEMDZEOUMgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwNkQ5RSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDZEQTAgICAgICAwQzAwICAgTk9QDQo4OTM6ICAgICAgICAgICAgICAgICANCjg5NDogICAgICAgICAgICAgICAgIAkJLyogQ29tcGxldGUgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgZnVuY3Rpb24gcGFyYW1ldGVycyBhbmQgcG9zdCBpdCB0byB0aGUNCjg5NTogICAgICAgICAgICAgICAgIAkJZGFlbW9uIHRhc2suICovDQo4OTY6ICAgICAgICAgICAgICAgICAJCXhNZXNzYWdlLnhNZXNzYWdlSUQgPSB0bXJDT01NQU5EX0VYRUNVVEVfQ0FMTEJBQ0s7DQpCRkQwNkRBMiAgICAgIEVEN0YgICBMSSBWMCwgLTENCkJGRDA2REE0ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjg5NzogICAgICAgICAgICAgICAgIAkJeE1lc3NhZ2UudS54Q2FsbGJhY2tQYXJhbWV0ZXJzLnB4Q2FsbGJhY2tGdW5jdGlvbiA9IHhGdW5jdGlvblRvUGVuZDsNCkJGRDA2REE4ICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkNCkJGRDA2REFDICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjg5ODogICAgICAgICAgICAgICAgIAkJeE1lc3NhZ2UudS54Q2FsbGJhY2tQYXJhbWV0ZXJzLnB2UGFyYW1ldGVyMSA9IHB2UGFyYW1ldGVyMTsNCkJGRDA2REIwICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkNCkJGRDA2REI0ICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkNCjg5OTogICAgICAgICAgICAgICAgIAkJeE1lc3NhZ2UudS54Q2FsbGJhY2tQYXJhbWV0ZXJzLnVsUGFyYW1ldGVyMiA9IHVsUGFyYW1ldGVyMjsNCkJGRDA2REI4ICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkNCkJGRDA2REJDICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkNCjkwMDogICAgICAgICAgICAgICAgIA0KOTAxOiAgICAgICAgICAgICAgICAgCQl4UmV0dXJuID0geFF1ZXVlU2VuZFRvQmFjayggeFRpbWVyUXVldWUsICZ4TWVzc2FnZSwgeFRpY2tzVG9XYWl0ICk7DQpCRkQwNkRDMCAgODA2OEZDN0MgICBMVyBWMSwgLTMyNjY0KEdQKQ0KQkZEMDZEQzQgIDAwMTQzMDVFICAgQURESVUgVjAsIFM4LCAyMA0KQkZEMDZEQzggICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDA2RENBICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwNkRDQyAgMDAzQ0ZDREUgICBMVyBBMiwgNjAoUzgpDQpCRkQwNkREMCAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPDQpCRkQwNkREMiAgMDZBMjc3RTggICBKQUxTIHhRdWV1ZUdlbmVyaWNTZW5kDQpCRkQwNkRENCAgICAgIDA2QTIgICBBRERVIEExLCBTMSwgVjANCkJGRDA2REQ2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDZERDggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KOTAyOiAgICAgICAgICAgICAgICAgDQo5MDM6ICAgICAgICAgICAgICAgICAJCXRyYWNlUEVORF9GVU5DX0NBTEwoIHhGdW5jdGlvblRvUGVuZCwgcHZQYXJhbWV0ZXIxLCB1bFBhcmFtZXRlcjIsIHhSZXR1cm4gKTsNCjkwNDogICAgICAgICAgICAgICAgIA0KOTA1OiAgICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDA2RERDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjkwNjogICAgICAgICAgICAgICAgIAl9DQpCRkQwNkRFMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDZERTIgICAgICA0QkVCICAgTFcgUkEsIDQ0KFNQKQ0KQkZEMDZERTQgICAgICA0QkNBICAgTFcgUzgsIDQwKFNQKQ0KQkZEMDZERTYgICAgICA0QzE5ICAgQURESVUgU1AsIFNQLCA0OA0KQkZEMDZERTggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDZERUEgICAgICAwQzAwICAgTk9QDQo5MDc6ICAgICAgICAgICAgICAgICANCjkwODogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgKi8NCjkwOTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KOTEwOiAgICAgICAgICAgICAgICAgDQo5MTE6ICAgICAgICAgICAgICAgICAvKiBUaGlzIGVudGlyZSBzb3VyY2UgZmlsZSB3aWxsIGJlIHNraXBwZWQgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIG5vdCBjb25maWd1cmVkDQo5MTI6ICAgICAgICAgICAgICAgICB0byBpbmNsdWRlIHNvZnR3YXJlIHRpbWVyIGZ1bmN0aW9uYWxpdHkuICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHNvZnR3YXJlIHRpbWVyDQo5MTM6ICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IHRoZW4gZW5zdXJlIGNvbmZpZ1VTRV9USU1FUlMgaXMgc2V0IHRvIDEgaW4gRnJlZVJUT1NDb25maWcuaC4gKi8NCjkxNDogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVElNRVJTID09IDEgKi8NCjkxNTogICAgICAgICAgICAgICAgIA0KOTE2OiAgICAgICAgICAgICAgICAgDQo5MTc6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3Mvc291cmNlL3Rhc2tzLmMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoNCjI6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBWOC4yLjEgLSBDb3B5cmlnaHQgKEMpIDIwMTUgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQozOiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KNDogICAgICAgICAgICAgICAgICAgDQo1OiAgICAgICAgICAgICAgICAgICAgICAgVklTSVQgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgVE8gRU5TVVJFIFlPVSBBUkUgVVNJTkcgVEhFIExBVEVTVCBWRVJTSU9OLg0KNjogICAgICAgICAgICAgICAgICAgDQo3OiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCjg6ICAgICAgICAgICAgICAgICAgIA0KOTogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCjEwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCjExOiAgICAgICAgICAgICAgICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gPj4+PiBBTkQgTU9ESUZJRUQgQlkgPDw8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KMTI6ICAgICAgICAgICAgICAgICAgDQoxMzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxNDogICAgICAgICAgICAgICAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQoxNTogICAgICAgICAgICAgICAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQoxNjogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQoxNzogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQoxODogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxOTogICAgICAgICAgICAgICAgICANCjIwOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCjIxOiAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQoyMjogICAgICAgICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCjIzOiAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KMjQ6ICAgICAgICAgICAgICAgICAgDQoyNTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjI3OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KMjg6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQoyOTogICAgICAgICAgICAgICAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCjMwOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzE6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMjogICAgICAgICAgICAgICAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCjMzOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KMzQ6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNTogICAgICAgICAgICAgICAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzc6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCjQwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCjQxOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KNDI6ICAgICAgICAgICAgICAgICAgDQo0MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCjQ0OiAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCjQ1OiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KNDg6ICAgICAgICAgICAgICAgICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQo0OTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQo1MzogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCjU0OiAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQo1NTogICAgICAgICAgICAgICAgICANCjU2OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KNTc6ICAgICAgICAgICAgICAgICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCjY1OiAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCjY2OiAgICAgICAgICAgICAgICAgIA0KNjc6ICAgICAgICAgICAgICAgICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KNjg6ICAgICAgICAgICAgICAgICAgKi8NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgLyogU3RhbmRhcmQgaW5jbHVkZXMuICovDQo3MTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+DQo3MjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RyaW5nLmg+DQo3MzogICAgICAgICAgICAgICAgICANCjc0OiAgICAgICAgICAgICAgICAgIC8qIERlZmluaW5nIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHByZXZlbnRzIHRhc2suaCBmcm9tIHJlZGVmaW5pbmcNCjc1OiAgICAgICAgICAgICAgICAgIGFsbCB0aGUgQVBJIGZ1bmN0aW9ucyB0byB1c2UgdGhlIE1QVSB3cmFwcGVycy4gIFRoYXQgc2hvdWxkIG9ubHkgYmUgZG9uZSB3aGVuDQo3NjogICAgICAgICAgICAgICAgICB0YXNrLmggaXMgaW5jbHVkZWQgZnJvbSBhbiBhcHBsaWNhdGlvbiBmaWxlLiAqLw0KNzc6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRQ0KNzg6ICAgICAgICAgICAgICAgICAgDQo3OTogICAgICAgICAgICAgICAgICAvKiBGcmVlUlRPUyBpbmNsdWRlcy4gKi8NCjgwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KODE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInRhc2suaCINCjgyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJ0aW1lcnMuaCINCjgzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJTdGFja01hY3Jvcy5oIg0KODQ6ICAgICAgICAgICAgICAgICAgDQo4NTogICAgICAgICAgICAgICAgICAvKiBMaW50IGU5NjEgYW5kIGU3NTAgYXJlIHN1cHByZXNzZWQgYXMgYSBNSVNSQSBleGNlcHRpb24ganVzdGlmaWVkIGJlY2F1c2UgdGhlDQo4NjogICAgICAgICAgICAgICAgICBNUFUgcG9ydHMgcmVxdWlyZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSB0byBiZSBkZWZpbmVkIGZvciB0aGUNCjg3OiAgICAgICAgICAgICAgICAgIGhlYWRlciBmaWxlcyBhYm92ZSwgYnV0IG5vdCBpbiB0aGlzIGZpbGUsIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjb3JyZWN0DQo4ODogICAgICAgICAgICAgICAgICBwcml2aWxlZ2VkIFZzIHVucHJpdmlsZWdlZCBsaW5rYWdlIGFuZCBwbGFjZW1lbnQuICovDQo4OTogICAgICAgICAgICAgICAgICAjdW5kZWYgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgLypsaW50ICFlOTYxICFlNzUwLiAqLw0KOTA6ICAgICAgICAgICAgICAgICAgDQo5MTogICAgICAgICAgICAgICAgICAvKiBTZXQgY29uZmlnVVNFX1NUQVRTX0ZPUk1BVFRJTkdfRlVOQ1RJT05TIHRvIDIgdG8gaW5jbHVkZSB0aGUgc3RhdHMgZm9ybWF0dGluZw0KOTI6ICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zIGJ1dCB3aXRob3V0IGluY2x1ZGluZyBzdGRpby5oIGhlcmUuICovDQo5MzogICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfU1RBVFNfRk9STUFUVElOR19GVU5DVElPTlMgPT0gMSApDQo5NDogICAgICAgICAgICAgICAgICAJLyogQXQgdGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUgYXJlIHR3byBvcHRpb25hbCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZA0KOTU6ICAgICAgICAgICAgICAgICAgCXRvIGdlbmVyYXRlIGh1bWFuIHJlYWRhYmxlIHRleHQgZnJvbSB0aGUgcmF3IGRhdGEgZ2VuZXJhdGVkIGJ5IHRoZQ0KOTY6ICAgICAgICAgICAgICAgICAgCXV4VGFza0dldFN5c3RlbVN0YXRlKCkgZnVuY3Rpb24uICBOb3RlIHRoZSBmb3JtYXR0aW5nIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQNCjk3OiAgICAgICAgICAgICAgICAgIAlmb3IgY29udmVuaWVuY2Ugb25seSwgYW5kIGFyZSBOT1QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBrZXJuZWwuICovDQo5ODogICAgICAgICAgICAgICAgICAJI2luY2x1ZGUgPHN0ZGlvLmg+DQo5OTogICAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1NUQVRTX0ZPUk1BVFRJTkdfRlVOQ1RJT05TID09IDEgKSAqLw0KMTAwOiAgICAgICAgICAgICAgICAgDQoxMDE6ICAgICAgICAgICAgICAgICAvKiBTYW5pdHkgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24uICovDQoxMDI6ICAgICAgICAgICAgICAgICAjaWYoIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICE9IDAgKQ0KMTAzOiAgICAgICAgICAgICAgICAgCSNpZiggSU5DTFVERV92VGFza1N1c3BlbmQgIT0gMSApDQoxMDQ6ICAgICAgICAgICAgICAgICAJCSNlcnJvciBJTkNMVURFX3ZUYXNrU3VzcGVuZCBtdXN0IGJlIHNldCB0byAxIGlmIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFIGlzIG5vdCBzZXQgdG8gMA0KMTA1OiAgICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBJTkNMVURFX3ZUYXNrU3VzcGVuZCAqLw0KMTA2OiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICovDQoxMDc6ICAgICAgICAgICAgICAgICANCjEwODogICAgICAgICAgICAgICAgIC8qDQoxMDk6ICAgICAgICAgICAgICAgICAgKiBEZWZpbmVzIHRoZSBzaXplLCBpbiB3b3Jkcywgb2YgdGhlIHN0YWNrIGFsbG9jYXRlZCB0byB0aGUgaWRsZSB0YXNrLg0KMTEwOiAgICAgICAgICAgICAgICAgICovDQoxMTE6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHRza0lETEVfU1RBQ0tfU0laRQljb25maWdNSU5JTUFMX1NUQUNLX1NJWkUNCjExMjogICAgICAgICAgICAgICAgIA0KMTEzOiAgICAgICAgICAgICAgICAgI2lmKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAwICkNCjExNDogICAgICAgICAgICAgICAgIAkvKiBJZiB0aGUgY29vcGVyYXRpdmUgc2NoZWR1bGVyIGlzIGJlaW5nIHVzZWQgdGhlbiBhIHlpZWxkIHNob3VsZCBub3QgYmUNCjExNTogICAgICAgICAgICAgICAgIAlwZXJmb3JtZWQganVzdCBiZWNhdXNlIGEgaGlnaGVyIHByaW9yaXR5IHRhc2sgaGFzIGJlZW4gd29rZW4uICovDQoxMTY6ICAgICAgICAgICAgICAgICAJI2RlZmluZSB0YXNrWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpDQoxMTc6ICAgICAgICAgICAgICAgICAjZWxzZQ0KMTE4OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgdGFza1lJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKSBwb3J0WUlFTERfV0lUSElOX0FQSSgpDQoxMTk6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjEyMDogICAgICAgICAgICAgICAgIA0KMTIxOiAgICAgICAgICAgICAgICAgLyogVmFsdWUgdGhhdCBjYW4gYmUgYXNzaWduZWQgdG8gdGhlIGVOb3RpZnlTdGF0ZSBtZW1iZXIgb2YgdGhlIFRDQi4gKi8NCjEyMjogICAgICAgICAgICAgICAgIHR5cGVkZWYgZW51bQ0KMTIzOiAgICAgICAgICAgICAgICAgew0KMTI0OiAgICAgICAgICAgICAgICAgCWVOb3RXYWl0aW5nTm90aWZpY2F0aW9uID0gMCwNCjEyNTogICAgICAgICAgICAgICAgIAllV2FpdGluZ05vdGlmaWNhdGlvbiwNCjEyNjogICAgICAgICAgICAgICAgIAllTm90aWZpZWQNCjEyNzogICAgICAgICAgICAgICAgIH0gZU5vdGlmeVZhbHVlOw0KMTI4OiAgICAgICAgICAgICAgICAgDQoxMjk6ICAgICAgICAgICAgICAgICAvKg0KMTMwOiAgICAgICAgICAgICAgICAgICogVGFzayBjb250cm9sIGJsb2NrLiAgQSB0YXNrIGNvbnRyb2wgYmxvY2sgKFRDQikgaXMgYWxsb2NhdGVkIGZvciBlYWNoIHRhc2ssDQoxMzE6ICAgICAgICAgICAgICAgICAgKiBhbmQgc3RvcmVzIHRhc2sgc3RhdGUgaW5mb3JtYXRpb24sIGluY2x1ZGluZyBhIHBvaW50ZXIgdG8gdGhlIHRhc2sncyBjb250ZXh0DQoxMzI6ICAgICAgICAgICAgICAgICAgKiAodGhlIHRhc2sncyBydW4gdGltZSBlbnZpcm9ubWVudCwgaW5jbHVkaW5nIHJlZ2lzdGVyIHZhbHVlcykNCjEzMzogICAgICAgICAgICAgICAgICAqLw0KMTM0OiAgICAgICAgICAgICAgICAgdHlwZWRlZiBzdHJ1Y3QgdHNrVGFza0NvbnRyb2xCbG9jaw0KMTM1OiAgICAgICAgICAgICAgICAgew0KMTM2OiAgICAgICAgICAgICAgICAgCXZvbGF0aWxlIFN0YWNrVHlwZV90CSpweFRvcE9mU3RhY2s7CS8qPCBQb2ludHMgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0IGl0ZW0gcGxhY2VkIG9uIHRoZSB0YXNrcyBzdGFjay4gIFRISVMgTVVTVCBCRSBUSEUgRklSU1QgTUVNQkVSIE9GIFRIRSBUQ0IgU1RSVUNULiAqLw0KMTM3OiAgICAgICAgICAgICAgICAgDQoxMzg6ICAgICAgICAgICAgICAgICAJI2lmICggcG9ydFVTSU5HX01QVV9XUkFQUEVSUyA9PSAxICkNCjEzOTogICAgICAgICAgICAgICAgIAkJeE1QVV9TRVRUSU5HUwl4TVBVU2V0dGluZ3M7CQkvKjwgVGhlIE1QVSBzZXR0aW5ncyBhcmUgZGVmaW5lZCBhcyBwYXJ0IG9mIHRoZSBwb3J0IGxheWVyLiAgVEhJUyBNVVNUIEJFIFRIRSBTRUNPTkQgTUVNQkVSIE9GIFRIRSBUQ0IgU1RSVUNULiAqLw0KMTQwOiAgICAgICAgICAgICAgICAgCQlCYXNlVHlwZV90CQl4VXNpbmdTdGF0aWNhbGx5QWxsb2NhdGVkU3RhY2s7IC8qIFNldCB0byBwZFRSVUUgaWYgdGhlIHN0YWNrIGlzIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgYXJyYXksIGFuZCBwZEZBTFNFIGlmIHRoZSBzdGFjayBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuICovDQoxNDE6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNDI6ICAgICAgICAgICAgICAgICANCjE0MzogICAgICAgICAgICAgICAgIAlMaXN0SXRlbV90CQkJeEdlbmVyaWNMaXN0SXRlbTsJLyo8IFRoZSBsaXN0IHRoYXQgdGhlIHN0YXRlIGxpc3QgaXRlbSBvZiBhIHRhc2sgaXMgcmVmZXJlbmNlIGZyb20gZGVub3RlcyB0aGUgc3RhdGUgb2YgdGhhdCB0YXNrIChSZWFkeSwgQmxvY2tlZCwgU3VzcGVuZGVkICkuICovDQoxNDQ6ICAgICAgICAgICAgICAgICAJTGlzdEl0ZW1fdAkJCXhFdmVudExpc3RJdGVtOwkJLyo8IFVzZWQgdG8gcmVmZXJlbmNlIGEgdGFzayBmcm9tIGFuIGV2ZW50IGxpc3QuICovDQoxNDU6ICAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QJCQl1eFByaW9yaXR5OwkJCS8qPCBUaGUgcHJpb3JpdHkgb2YgdGhlIHRhc2suICAwIGlzIHRoZSBsb3dlc3QgcHJpb3JpdHkuICovDQoxNDY6ICAgICAgICAgICAgICAgICAJU3RhY2tUeXBlX3QJCQkqcHhTdGFjazsJCQkvKjwgUG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RhY2suICovDQoxNDc6ICAgICAgICAgICAgICAgICAJY2hhcgkJCQlwY1Rhc2tOYW1lWyBjb25maWdNQVhfVEFTS19OQU1FX0xFTiBdOy8qPCBEZXNjcmlwdGl2ZSBuYW1lIGdpdmVuIHRvIHRoZSB0YXNrIHdoZW4gY3JlYXRlZC4gIEZhY2lsaXRhdGVzIGRlYnVnZ2luZyBvbmx5LiAqLyAvKmxpbnQgIWU5NzEgVW5xdWFsaWZpZWQgY2hhciB0eXBlcyBhcmUgYWxsb3dlZCBmb3Igc3RyaW5ncyBhbmQgc2luZ2xlIGNoYXJhY3RlcnMgb25seS4gKi8NCjE0ODogICAgICAgICAgICAgICAgIA0KMTQ5OiAgICAgICAgICAgICAgICAgCSNpZiAoIHBvcnRTVEFDS19HUk9XVEggPiAwICkNCjE1MDogICAgICAgICAgICAgICAgIAkJU3RhY2tUeXBlX3QJCSpweEVuZE9mU3RhY2s7CQkvKjwgUG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIHN0YWNrIG9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgdGhlIHN0YWNrIGdyb3dzIHVwIGZyb20gbG93IG1lbW9yeS4gKi8NCjE1MTogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjE1MjogICAgICAgICAgICAgICAgIA0KMTUzOiAgICAgICAgICAgICAgICAgCSNpZiAoIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiA9PSAxICkNCjE1NDogICAgICAgICAgICAgICAgIAkJVUJhc2VUeXBlX3QgCXV4Q3JpdGljYWxOZXN0aW5nOyAJLyo8IEhvbGRzIHRoZSBjcml0aWNhbCBzZWN0aW9uIG5lc3RpbmcgZGVwdGggZm9yIHBvcnRzIHRoYXQgZG8gbm90IG1haW50YWluIHRoZWlyIG93biBjb3VudCBpbiB0aGUgcG9ydCBsYXllci4gKi8NCjE1NTogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjE1NjogICAgICAgICAgICAgICAgIA0KMTU3OiAgICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjE1ODogICAgICAgICAgICAgICAgIAkJVUJhc2VUeXBlX3QJCXV4VENCTnVtYmVyOwkJLyo8IFN0b3JlcyBhIG51bWJlciB0aGF0IGluY3JlbWVudHMgZWFjaCB0aW1lIGEgVENCIGlzIGNyZWF0ZWQuICBJdCBhbGxvd3MgZGVidWdnZXJzIHRvIGRldGVybWluZSB3aGVuIGEgdGFzayBoYXMgYmVlbiBkZWxldGVkIGFuZCB0aGVuIHJlY3JlYXRlZC4gKi8NCjE1OTogICAgICAgICAgICAgICAgIAkJVUJhc2VUeXBlX3QgIAl1eFRhc2tOdW1iZXI7CQkvKjwgU3RvcmVzIGEgbnVtYmVyIHNwZWNpZmljYWxseSBmb3IgdXNlIGJ5IHRoaXJkIHBhcnR5IHRyYWNlIGNvZGUuICovDQoxNjA6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNjE6ICAgICAgICAgICAgICAgICANCjE2MjogICAgICAgICAgICAgICAgIAkjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjE2MzogICAgICAgICAgICAgICAgIAkJVUJhc2VUeXBlX3QgCXV4QmFzZVByaW9yaXR5OwkJLyo8IFRoZSBwcmlvcml0eSBsYXN0IGFzc2lnbmVkIHRvIHRoZSB0YXNrIC0gdXNlZCBieSB0aGUgcHJpb3JpdHkgaW5oZXJpdGFuY2UgbWVjaGFuaXNtLiAqLw0KMTY0OiAgICAgICAgICAgICAgICAgCQlVQmFzZVR5cGVfdCAJdXhNdXRleGVzSGVsZDsNCjE2NTogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjE2NjogICAgICAgICAgICAgICAgIA0KMTY3OiAgICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyA9PSAxICkNCjE2ODogICAgICAgICAgICAgICAgIAkJVGFza0hvb2tGdW5jdGlvbl90IHB4VGFza1RhZzsNCjE2OTogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjE3MDogICAgICAgICAgICAgICAgIA0KMTcxOiAgICAgICAgICAgICAgICAgCSNpZiggY29uZmlnTlVNX1RIUkVBRF9MT0NBTF9TVE9SQUdFX1BPSU5URVJTID4gMCApDQoxNzI6ICAgICAgICAgICAgICAgICAJCXZvaWQgKnB2VGhyZWFkTG9jYWxTdG9yYWdlUG9pbnRlcnNbIGNvbmZpZ05VTV9USFJFQURfTE9DQUxfU1RPUkFHRV9QT0lOVEVSUyBdOw0KMTczOiAgICAgICAgICAgICAgICAgCSNlbmRpZg0KMTc0OiAgICAgICAgICAgICAgICAgDQoxNzU6ICAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApDQoxNzY6ICAgICAgICAgICAgICAgICAJCXVpbnQzMl90CQl1bFJ1blRpbWVDb3VudGVyOwkvKjwgU3RvcmVzIHRoZSBhbW91bnQgb2YgdGltZSB0aGUgdGFzayBoYXMgc3BlbnQgaW4gdGhlIFJ1bm5pbmcgc3RhdGUuICovDQoxNzc6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNzg6ICAgICAgICAgICAgICAgICANCjE3OTogICAgICAgICAgICAgICAgIAkjaWYgKCBjb25maWdVU0VfTkVXTElCX1JFRU5UUkFOVCA9PSAxICkNCjE4MDogICAgICAgICAgICAgICAgIAkJLyogQWxsb2NhdGUgYSBOZXdsaWIgcmVlbnQgc3RydWN0dXJlIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhpcyB0YXNrLg0KMTgxOiAgICAgICAgICAgICAgICAgCQlOb3RlIE5ld2xpYiBzdXBwb3J0IGhhcyBiZWVuIGluY2x1ZGVkIGJ5IHBvcHVsYXIgZGVtYW5kLCBidXQgaXMgbm90DQoxODI6ICAgICAgICAgICAgICAgICAJCXVzZWQgYnkgdGhlIEZyZWVSVE9TIG1haW50YWluZXJzIHRoZW1zZWx2ZXMuICBGcmVlUlRPUyBpcyBub3QNCjE4MzogICAgICAgICAgICAgICAgIAkJcmVzcG9uc2libGUgZm9yIHJlc3VsdGluZyBuZXdsaWIgb3BlcmF0aW9uLiAgVXNlciBtdXN0IGJlIGZhbWlsaWFyIHdpdGgNCjE4NDogICAgICAgICAgICAgICAgIAkJbmV3bGliIGFuZCBtdXN0IHByb3ZpZGUgc3lzdGVtLXdpZGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZWNlc3NhcnkNCjE4NTogICAgICAgICAgICAgICAgIAkJc3R1YnMuIEJlIHdhcm5lZCB0aGF0IChhdCB0aGUgdGltZSBvZiB3cml0aW5nKSB0aGUgY3VycmVudCBuZXdsaWIgZGVzaWduDQoxODY6ICAgICAgICAgICAgICAgICAJCWltcGxlbWVudHMgYSBzeXN0ZW0td2lkZSBtYWxsb2MoKSB0aGF0IG11c3QgYmUgcHJvdmlkZWQgd2l0aCBsb2Nrcy4gKi8NCjE4NzogICAgICAgICAgICAgICAgIAkJc3RydWN0IAlfcmVlbnQgeE5ld0xpYl9yZWVudDsNCjE4ODogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjE4OTogICAgICAgICAgICAgICAgIA0KMTkwOiAgICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgPT0gMSApDQoxOTE6ICAgICAgICAgICAgICAgICAJCXZvbGF0aWxlIHVpbnQzMl90IHVsTm90aWZpZWRWYWx1ZTsNCjE5MjogICAgICAgICAgICAgICAgIAkJdm9sYXRpbGUgZU5vdGlmeVZhbHVlIGVOb3RpZnlTdGF0ZTsNCjE5MzogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjE5NDogICAgICAgICAgICAgICAgIA0KMTk1OiAgICAgICAgICAgICAgICAgfSB0c2tUQ0I7DQoxOTY6ICAgICAgICAgICAgICAgICANCjE5NzogICAgICAgICAgICAgICAgIC8qIFRoZSBvbGQgdHNrVENCIG5hbWUgaXMgbWFpbnRhaW5lZCBhYm92ZSB0aGVuIHR5cGVkZWZlZCB0byB0aGUgbmV3IFRDQl90IG5hbWUNCjE5ODogICAgICAgICAgICAgICAgIGJlbG93IHRvIGVuYWJsZSB0aGUgdXNlIG9mIG9sZGVyIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlcnMuICovDQoxOTk6ICAgICAgICAgICAgICAgICB0eXBlZGVmIHRza1RDQiBUQ0JfdDsNCjIwMDogICAgICAgICAgICAgICAgIA0KMjAxOiAgICAgICAgICAgICAgICAgLyoNCjIwMjogICAgICAgICAgICAgICAgICAqIFNvbWUga2VybmVsIGF3YXJlIGRlYnVnZ2VycyByZXF1aXJlIHRoZSBkYXRhIHRoZSBkZWJ1Z2dlciBuZWVkcyBhY2Nlc3MgdG8gdG8NCjIwMzogICAgICAgICAgICAgICAgICAqIGJlIGdsb2JhbCwgcmF0aGVyIHRoYW4gZmlsZSBzY29wZS4NCjIwNDogICAgICAgICAgICAgICAgICAqLw0KMjA1OiAgICAgICAgICAgICAgICAgI2lmZGVmIHBvcnRSRU1PVkVfU1RBVElDX1FVQUxJRklFUg0KMjA2OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgc3RhdGljDQoyMDc6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjIwODogICAgICAgICAgICAgICAgIA0KMjA5OiAgICAgICAgICAgICAgICAgLypsaW50IC1lOTU2IEEgbWFudWFsIGFuYWx5c2lzIGFuZCBpbnNwZWN0aW9uIGhhcyBiZWVuIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoDQoyMTA6ICAgICAgICAgICAgICAgICBzdGF0aWMgdmFyaWFibGVzIG11c3QgYmUgZGVjbGFyZWQgdm9sYXRpbGUuICovDQoyMTE6ICAgICAgICAgICAgICAgICANCjIxMjogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBUQ0JfdCAqIHZvbGF0aWxlIHB4Q3VycmVudFRDQiA9IE5VTEw7DQoyMTM6ICAgICAgICAgICAgICAgICANCjIxNDogICAgICAgICAgICAgICAgIC8qIExpc3RzIGZvciByZWFkeSBhbmQgYmxvY2tlZCB0YXNrcy4gLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjE1OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBMaXN0X3QgcHhSZWFkeVRhc2tzTGlzdHNbIGNvbmZpZ01BWF9QUklPUklUSUVTIF07Lyo8IFByaW9yaXRpc2VkIHJlYWR5IHRhc2tzLiAqLw0KMjE2OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBMaXN0X3QgeERlbGF5ZWRUYXNrTGlzdDE7CQkJCQkJLyo8IERlbGF5ZWQgdGFza3MuICovDQoyMTc6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIExpc3RfdCB4RGVsYXllZFRhc2tMaXN0MjsJCQkJCQkvKjwgRGVsYXllZCB0YXNrcyAodHdvIGxpc3RzIGFyZSB1c2VkIC0gb25lIGZvciBkZWxheXMgdGhhdCBoYXZlIG92ZXJmbG93ZWQgdGhlIGN1cnJlbnQgdGljayBjb3VudC4gKi8NCjIxODogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgTGlzdF90ICogdm9sYXRpbGUgcHhEZWxheWVkVGFza0xpc3Q7CQkJCS8qPCBQb2ludHMgdG8gdGhlIGRlbGF5ZWQgdGFzayBsaXN0IGN1cnJlbnRseSBiZWluZyB1c2VkLiAqLw0KMjE5OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBMaXN0X3QgKiB2b2xhdGlsZSBweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0OwkJLyo8IFBvaW50cyB0byB0aGUgZGVsYXllZCB0YXNrIGxpc3QgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gaG9sZCB0YXNrcyB0aGF0IGhhdmUgb3ZlcmZsb3dlZCB0aGUgY3VycmVudCB0aWNrIGNvdW50LiAqLw0KMjIwOiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBMaXN0X3QgeFBlbmRpbmdSZWFkeUxpc3Q7CQkJCQkJLyo8IFRhc2tzIHRoYXQgaGF2ZSBiZWVuIHJlYWRpZWQgd2hpbGUgdGhlIHNjaGVkdWxlciB3YXMgc3VzcGVuZGVkLiAgVGhleSB3aWxsIGJlIG1vdmVkIHRvIHRoZSByZWFkeSBsaXN0IHdoZW4gdGhlIHNjaGVkdWxlciBpcyByZXN1bWVkLiAqLw0KMjIxOiAgICAgICAgICAgICAgICAgDQoyMjI6ICAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KMjIzOiAgICAgICAgICAgICAgICAgDQoyMjQ6ICAgICAgICAgICAgICAgICAJUFJJVklMRUdFRF9EQVRBIHN0YXRpYyBMaXN0X3QgeFRhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uOwkJCQkvKjwgVGFza3MgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZCAtIGJ1dCB0aGVpciBtZW1vcnkgbm90IHlldCBmcmVlZC4gKi8NCjIyNTogICAgICAgICAgICAgICAgIAlQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4VGFza3NEZWxldGVkID0gKCBVQmFzZVR5cGVfdCApIDBVOw0KMjI2OiAgICAgICAgICAgICAgICAgDQoyMjc6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjIyODogICAgICAgICAgICAgICAgIA0KMjI5OiAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoyMzA6ICAgICAgICAgICAgICAgICANCjIzMTogICAgICAgICAgICAgICAgIAlQUklWSUxFR0VEX0RBVEEgc3RhdGljIExpc3RfdCB4U3VzcGVuZGVkVGFza0xpc3Q7CQkJCQkvKjwgVGFza3MgdGhhdCBhcmUgY3VycmVudGx5IHN1c3BlbmRlZC4gKi8NCjIzMjogICAgICAgICAgICAgICAgIA0KMjMzOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyMzQ6ICAgICAgICAgICAgICAgICANCjIzNTogICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfeFRhc2tHZXRJZGxlVGFza0hhbmRsZSA9PSAxICkNCjIzNjogICAgICAgICAgICAgICAgIA0KMjM3OiAgICAgICAgICAgICAgICAgCVBSSVZJTEVHRURfREFUQSBzdGF0aWMgVGFza0hhbmRsZV90IHhJZGxlVGFza0hhbmRsZSA9IE5VTEw7CQkJLyo8IEhvbGRzIHRoZSBoYW5kbGUgb2YgdGhlIGlkbGUgdGFzay4gIFRoZSBpZGxlIHRhc2sgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHNjaGVkdWxlciBpcyBzdGFydGVkLiAqLw0KMjM4OiAgICAgICAgICAgICAgICAgDQoyMzk6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjI0MDogICAgICAgICAgICAgICAgIA0KMjQxOiAgICAgICAgICAgICAgICAgLyogT3RoZXIgZmlsZSBwcml2YXRlIHZhcmlhYmxlcy4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjQyOiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eEN1cnJlbnROdW1iZXJPZlRhc2tzIAk9ICggVUJhc2VUeXBlX3QgKSAwVTsNCjI0MzogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgdm9sYXRpbGUgVGlja1R5cGVfdCB4VGlja0NvdW50IAkJCQk9ICggVGlja1R5cGVfdCApIDBVOw0KMjQ0OiAgICAgICAgICAgICAgICAgUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eFRvcFJlYWR5UHJpb3JpdHkgCQk9IHRza0lETEVfUFJJT1JJVFk7DQoyNDU6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIEJhc2VUeXBlX3QgeFNjaGVkdWxlclJ1bm5pbmcgCQk9IHBkRkFMU0U7DQoyNDY6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4UGVuZGVkVGlja3MgCQkJPSAoIFVCYXNlVHlwZV90ICkgMFU7DQoyNDc6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIEJhc2VUeXBlX3QgeFlpZWxkUGVuZGluZyAJCQk9IHBkRkFMU0U7DQoyNDg6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIEJhc2VUeXBlX3QgeE51bU9mT3ZlcmZsb3dzIAkJCT0gKCBCYXNlVHlwZV90ICkgMDsNCjI0OTogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgVUJhc2VUeXBlX3QgdXhUYXNrTnVtYmVyIAkJCQkJPSAoIFVCYXNlVHlwZV90ICkgMFU7DQoyNTA6ICAgICAgICAgICAgICAgICBQUklWSUxFR0VEX0RBVEEgc3RhdGljIHZvbGF0aWxlIFRpY2tUeXBlX3QgeE5leHRUYXNrVW5ibG9ja1RpbWUJCT0gKCBUaWNrVHlwZV90ICkgMFU7IC8qIEluaXRpYWxpc2VkIHRvIHBvcnRNQVhfREVMQVk7IGJlZm9yZSB0aGUgc2NoZWR1bGVyIHN0YXJ0cy4gKi8NCjI1MTogICAgICAgICAgICAgICAgIA0KMjUyOiAgICAgICAgICAgICAgICAgLyogQ29udGV4dCBzd2l0Y2hlcyBhcmUgaGVsZCBwZW5kaW5nIHdoaWxlIHRoZSBzY2hlZHVsZXIgaXMgc3VzcGVuZGVkLiAgQWxzbywNCjI1MzogICAgICAgICAgICAgICAgIGludGVycnVwdHMgbXVzdCBub3QgbWFuaXB1bGF0ZSB0aGUgeEdlbmVyaWNMaXN0SXRlbSBvZiBhIFRDQiwgb3IgYW55IG9mIHRoZQ0KMjU0OiAgICAgICAgICAgICAgICAgbGlzdHMgdGhlIHhHZW5lcmljTGlzdEl0ZW0gY2FuIGJlIHJlZmVyZW5jZWQgZnJvbSwgaWYgdGhlIHNjaGVkdWxlciBpcyBzdXNwZW5kZWQuDQoyNTU6ICAgICAgICAgICAgICAgICBJZiBhbiBpbnRlcnJ1cHQgbmVlZHMgdG8gdW5ibG9jayBhIHRhc2sgd2hpbGUgdGhlIHNjaGVkdWxlciBpcyBzdXNwZW5kZWQgdGhlbiBpdA0KMjU2OiAgICAgICAgICAgICAgICAgbW92ZXMgdGhlIHRhc2sncyBldmVudCBsaXN0IGl0ZW0gaW50byB0aGUgeFBlbmRpbmdSZWFkeUxpc3QsIHJlYWR5IGZvciB0aGUNCjI1NzogICAgICAgICAgICAgICAgIGtlcm5lbCB0byBtb3ZlIHRoZSB0YXNrIGZyb20gdGhlIHBlbmRpbmcgcmVhZHkgbGlzdCBpbnRvIHRoZSByZWFsIHJlYWR5IGxpc3QNCjI1ODogICAgICAgICAgICAgICAgIHdoZW4gdGhlIHNjaGVkdWxlciBpcyB1bnN1c3BlbmRlZC4gIFRoZSBwZW5kaW5nIHJlYWR5IGxpc3QgaXRzZWxmIGNhbiBvbmx5IGJlDQoyNTk6ICAgICAgICAgICAgICAgICBhY2Nlc3NlZCBmcm9tIGEgY3JpdGljYWwgc2VjdGlvbi4gKi8NCjI2MDogICAgICAgICAgICAgICAgIFBSSVZJTEVHRURfREFUQSBzdGF0aWMgdm9sYXRpbGUgVUJhc2VUeXBlX3QgdXhTY2hlZHVsZXJTdXNwZW5kZWQJPSAoIFVCYXNlVHlwZV90ICkgcGRGQUxTRTsNCjI2MTogICAgICAgICAgICAgICAgIA0KMjYyOiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApDQoyNjM6ICAgICAgICAgICAgICAgICANCjI2NDogICAgICAgICAgICAgICAgIAlQUklWSUxFR0VEX0RBVEEgc3RhdGljIHVpbnQzMl90IHVsVGFza1N3aXRjaGVkSW5UaW1lID0gMFVMOwkvKjwgSG9sZHMgdGhlIHZhbHVlIG9mIGEgdGltZXIvY291bnRlciB0aGUgbGFzdCB0aW1lIGEgdGFzayB3YXMgc3dpdGNoZWQgaW4uICovDQoyNjU6ICAgICAgICAgICAgICAgICAJUFJJVklMRUdFRF9EQVRBIHN0YXRpYyB1aW50MzJfdCB1bFRvdGFsUnVuVGltZSA9IDBVTDsJCS8qPCBIb2xkcyB0aGUgdG90YWwgYW1vdW50IG9mIGV4ZWN1dGlvbiB0aW1lIGFzIGRlZmluZWQgYnkgdGhlIHJ1biB0aW1lIGNvdW50ZXIgY2xvY2suICovDQoyNjY6ICAgICAgICAgICAgICAgICANCjI2NzogICAgICAgICAgICAgICAgICNlbmRpZg0KMjY4OiAgICAgICAgICAgICAgICAgDQoyNjk6ICAgICAgICAgICAgICAgICAvKmxpbnQgK2U5NTYgKi8NCjI3MDogICAgICAgICAgICAgICAgIA0KMjcxOiAgICAgICAgICAgICAgICAgLyogRGVidWdnaW5nIGFuZCB0cmFjZSBmYWNpbGl0aWVzIHByaXZhdGUgdmFyaWFibGVzIGFuZCBtYWNyb3MuIC0tLS0tLS0tLS0tLSovDQoyNzI6ICAgICAgICAgICAgICAgICANCjI3MzogICAgICAgICAgICAgICAgIC8qDQoyNzQ6ICAgICAgICAgICAgICAgICAgKiBUaGUgdmFsdWUgdXNlZCB0byBmaWxsIHRoZSBzdGFjayBvZiBhIHRhc2sgd2hlbiB0aGUgdGFzayBpcyBjcmVhdGVkLiAgVGhpcw0KMjc1OiAgICAgICAgICAgICAgICAgICogaXMgdXNlZCBwdXJlbHkgZm9yIGNoZWNraW5nIHRoZSBoaWdoIHdhdGVyIG1hcmsgZm9yIHRhc2tzLg0KMjc2OiAgICAgICAgICAgICAgICAgICovDQoyNzc6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHRza1NUQUNLX0ZJTExfQllURQkoIDB4YTVVICkNCjI3ODogICAgICAgICAgICAgICAgIA0KMjc5OiAgICAgICAgICAgICAgICAgLyoNCjI4MDogICAgICAgICAgICAgICAgICAqIE1hY3JvcyB1c2VkIGJ5IHZMaXN0VGFzayB0byBpbmRpY2F0ZSB3aGljaCBzdGF0ZSBhIHRhc2sgaXMgaW4uDQoyODE6ICAgICAgICAgICAgICAgICAgKi8NCjI4MjogICAgICAgICAgICAgICAgICNkZWZpbmUgdHNrQkxPQ0tFRF9DSEFSCQkoICdCJyApDQoyODM6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHRza1JFQURZX0NIQVIJCSggJ1InICkNCjI4NDogICAgICAgICAgICAgICAgICNkZWZpbmUgdHNrREVMRVRFRF9DSEFSCQkoICdEJyApDQoyODU6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHRza1NVU1BFTkRFRF9DSEFSCSggJ1MnICkNCjI4NjogICAgICAgICAgICAgICAgIA0KMjg3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyODg6ICAgICAgICAgICAgICAgICANCjI4OTogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiA9PSAwICkNCjI5MDogICAgICAgICAgICAgICAgIA0KMjkxOiAgICAgICAgICAgICAgICAgCS8qIElmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBpcyAwIHRoZW4gdGFzayBzZWxlY3Rpb24gaXMNCjI5MjogICAgICAgICAgICAgICAgIAlwZXJmb3JtZWQgaW4gYSBnZW5lcmljIHdheSB0aGF0IGlzIG5vdCBvcHRpbWlzZWQgdG8gYW55IHBhcnRpY3VsYXINCjI5MzogICAgICAgICAgICAgICAgIAltaWNyb2NvbnRyb2xsZXIgYXJjaGl0ZWN0dXJlLiAqLw0KMjk0OiAgICAgICAgICAgICAgICAgDQoyOTU6ICAgICAgICAgICAgICAgICAJLyogdXhUb3BSZWFkeVByaW9yaXR5IGhvbGRzIHRoZSBwcmlvcml0eSBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eSByZWFkeQ0KMjk2OiAgICAgICAgICAgICAgICAgCXN0YXRlIHRhc2suICovDQoyOTc6ICAgICAgICAgICAgICAgICAJI2RlZmluZSB0YXNrUkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5ICkJCQkJCQkJCQkJCQkJCVwNCjI5ODogICAgICAgICAgICAgICAgIAl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjI5OTogICAgICAgICAgICAgICAgIAkJaWYoICggdXhQcmlvcml0eSApID4gdXhUb3BSZWFkeVByaW9yaXR5ICkJCQkJCQkJCQkJCQkJCVwNCjMwMDogICAgICAgICAgICAgICAgIAkJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjMwMTogICAgICAgICAgICAgICAgIAkJCXV4VG9wUmVhZHlQcmlvcml0eSA9ICggdXhQcmlvcml0eSApOwkJCQkJCQkJCQkJCQkJXA0KMzAyOiAgICAgICAgICAgICAgICAgCQl9CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzAzOiAgICAgICAgICAgICAgICAgCX0gLyogdGFza1JFQ09SRF9SRUFEWV9QUklPUklUWSAqLw0KMzA0OiAgICAgICAgICAgICAgICAgDQozMDU6ICAgICAgICAgICAgICAgICAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMDY6ICAgICAgICAgICAgICAgICANCjMwNzogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHRhc2tTRUxFQ1RfSElHSEVTVF9QUklPUklUWV9UQVNLKCkJCQkJCQkJCQkJCQkJCQlcDQozMDg6ICAgICAgICAgICAgICAgICAJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozMDk6ICAgICAgICAgICAgICAgICAJCS8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgdGhhdCBjb250YWlucyByZWFkeSB0YXNrcy4gKi8JCQkJCQkJCVwNCjMxMDogICAgICAgICAgICAgICAgIAkJd2hpbGUoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFJlYWR5VGFza3NMaXN0c1sgdXhUb3BSZWFkeVByaW9yaXR5IF0gKSApICkJCQkJCQlcDQozMTE6ICAgICAgICAgICAgICAgICAJCXsJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozMTI6ICAgICAgICAgICAgICAgICAJCQljb25maWdBU1NFUlQoIHV4VG9wUmVhZHlQcmlvcml0eSApOwkJCQkJCQkJCQkJCQkJCVwNCjMxMzogICAgICAgICAgICAgICAgIAkJCS0tdXhUb3BSZWFkeVByaW9yaXR5OwkJCQkJCQkJCQkJCQkJCQkJCVwNCjMxNDogICAgICAgICAgICAgICAgIAkJfQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjMxNTogICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzE2OiAgICAgICAgICAgICAgICAgCQkvKiBsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkgaW5kZXhlcyB0aHJvdWdoIHRoZSBsaXN0LCBzbyB0aGUgdGFza3Mgb2YJCQkJCQlcDQozMTc6ICAgICAgICAgICAgICAgICAJCXRoZQlzYW1lIHByaW9yaXR5IGdldCBhbiBlcXVhbCBzaGFyZSBvZiB0aGUgcHJvY2Vzc29yIHRpbWUuICovCQkJCQkJCQkJXA0KMzE4OiAgICAgICAgICAgICAgICAgCQlsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkoIHB4Q3VycmVudFRDQiwgJiggcHhSZWFkeVRhc2tzTGlzdHNbIHV4VG9wUmVhZHlQcmlvcml0eSBdICkgKTsJCVwNCjMxOTogICAgICAgICAgICAgICAgIAl9IC8qIHRhc2tTRUxFQ1RfSElHSEVTVF9QUklPUklUWV9UQVNLICovDQozMjA6ICAgICAgICAgICAgICAgICANCjMyMTogICAgICAgICAgICAgICAgIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMyMjogICAgICAgICAgICAgICAgIA0KMzIzOiAgICAgICAgICAgICAgICAgCS8qIERlZmluZSBhd2F5IHRhc2tSRVNFVF9SRUFEWV9QUklPUklUWSgpIGFuZCBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoKSBhcw0KMzI0OiAgICAgICAgICAgICAgICAgCXRoZXkgYXJlIG9ubHkgcmVxdWlyZWQgd2hlbiBhIHBvcnQgb3B0aW1pc2VkIG1ldGhvZCBvZiB0YXNrIHNlbGVjdGlvbiBpcw0KMzI1OiAgICAgICAgICAgICAgICAgCWJlaW5nIHVzZWQuICovDQozMjY6ICAgICAgICAgICAgICAgICAJI2RlZmluZSB0YXNrUkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHkgKQ0KMzI3OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFRvcFJlYWR5UHJpb3JpdHkgKQ0KMzI4OiAgICAgICAgICAgICAgICAgDQozMjk6ICAgICAgICAgICAgICAgICAjZWxzZSAvKiBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gKi8NCjMzMDogICAgICAgICAgICAgICAgIA0KMzMxOiAgICAgICAgICAgICAgICAgCS8qIElmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTiBpcyAxIHRoZW4gdGFzayBzZWxlY3Rpb24gaXMNCjMzMjogICAgICAgICAgICAgICAgIAlwZXJmb3JtZWQgaW4gYSB3YXkgdGhhdCBpcyB0YWlsb3JlZCB0byB0aGUgcGFydGljdWxhciBtaWNyb2NvbnRyb2xsZXINCjMzMzogICAgICAgICAgICAgICAgIAlhcmNoaXRlY3R1cmUgYmVpbmcgdXNlZC4gKi8NCjMzNDogICAgICAgICAgICAgICAgIA0KMzM1OiAgICAgICAgICAgICAgICAgCS8qIEEgcG9ydCBvcHRpbWlzZWQgdmVyc2lvbiBpcyBwcm92aWRlZC4gIENhbGwgdGhlIHBvcnQgZGVmaW5lZCBtYWNyb3MuICovDQozMzY6ICAgICAgICAgICAgICAgICAJI2RlZmluZSB0YXNrUkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5ICkJcG9ydFJFQ09SRF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSwgdXhUb3BSZWFkeVByaW9yaXR5ICkNCjMzNzogICAgICAgICAgICAgICAgIA0KMzM4OiAgICAgICAgICAgICAgICAgCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzM5OiAgICAgICAgICAgICAgICAgDQozNDA6ICAgICAgICAgICAgICAgICAJI2RlZmluZSB0YXNrU0VMRUNUX0hJR0hFU1RfUFJJT1JJVFlfVEFTSygpCQkJCQkJCQkJCQkJCQlcDQozNDE6ICAgICAgICAgICAgICAgICAJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjM0MjogICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFRvcFByaW9yaXR5OwkJCQkJCQkJCQkJCQkJCQkJCVwNCjM0MzogICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozNDQ6ICAgICAgICAgICAgICAgICAJCS8qIEZpbmQgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgdGhhdCBjb250YWlucyByZWFkeSB0YXNrcy4gKi8JCQkJCQkJXA0KMzQ1OiAgICAgICAgICAgICAgICAgCQlwb3J0R0VUX0hJR0hFU1RfUFJJT1JJVFkoIHV4VG9wUHJpb3JpdHksIHV4VG9wUmVhZHlQcmlvcml0eSApOwkJCQkJCQkJXA0KMzQ2OiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIGxpc3RDVVJSRU5UX0xJU1RfTEVOR1RIKCAmKCBweFJlYWR5VGFza3NMaXN0c1sgdXhUb3BQcmlvcml0eSBdICkgKSA+IDAgKTsJCVwNCjM0NzogICAgICAgICAgICAgICAgIAkJbGlzdEdFVF9PV05FUl9PRl9ORVhUX0VOVFJZKCBweEN1cnJlbnRUQ0IsICYoIHB4UmVhZHlUYXNrc0xpc3RzWyB1eFRvcFByaW9yaXR5IF0gKSApOwkJXA0KMzQ4OiAgICAgICAgICAgICAgICAgCX0gLyogdGFza1NFTEVDVF9ISUdIRVNUX1BSSU9SSVRZX1RBU0soKSAqLw0KMzQ5OiAgICAgICAgICAgICAgICAgDQozNTA6ICAgICAgICAgICAgICAgICAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozNTE6ICAgICAgICAgICAgICAgICANCjM1MjogICAgICAgICAgICAgICAgIAkvKiBBIHBvcnQgb3B0aW1pc2VkIHZlcnNpb24gaXMgcHJvdmlkZWQsIGNhbGwgaXQgb25seSBpZiB0aGUgVENCIGJlaW5nIHJlc2V0DQozNTM6ICAgICAgICAgICAgICAgICAJaXMgYmVpbmcgcmVmZXJlbmNlZCBmcm9tIGEgcmVhZHkgbGlzdC4gIElmIGl0IGlzIHJlZmVyZW5jZWQgZnJvbSBhIGRlbGF5ZWQNCjM1NDogICAgICAgICAgICAgICAgIAlvciBzdXNwZW5kZWQgbGlzdCB0aGVuIGl0IHdvbid0IGJlIGluIGEgcmVhZHkgbGlzdC4gKi8NCjM1NTogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHRhc2tSRVNFVF9SRUFEWV9QUklPUklUWSggdXhQcmlvcml0eSApCQkJCQkJCQkJCQkJCQlcDQozNTY6ICAgICAgICAgICAgICAgICAJewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozNTc6ICAgICAgICAgICAgICAgICAJCWlmKCBsaXN0Q1VSUkVOVF9MSVNUX0xFTkdUSCggJiggcHhSZWFkeVRhc2tzTGlzdHNbICggdXhQcmlvcml0eSApIF0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkJXA0KMzU4OiAgICAgICAgICAgICAgICAgCQl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzU5OiAgICAgICAgICAgICAgICAgCQkJcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCAoIHV4UHJpb3JpdHkgKSwgKCB1eFRvcFJlYWR5UHJpb3JpdHkgKSApOwkJCQkJCQlcDQozNjA6ICAgICAgICAgICAgICAgICAJCX0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozNjE6ICAgICAgICAgICAgICAgICAJfQ0KMzYyOiAgICAgICAgICAgICAgICAgDQozNjM6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OICovDQozNjQ6ICAgICAgICAgICAgICAgICANCjM2NTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzY2OiAgICAgICAgICAgICAgICAgDQozNjc6ICAgICAgICAgICAgICAgICAvKiBweERlbGF5ZWRUYXNrTGlzdCBhbmQgcHhPdmVyZmxvd0RlbGF5ZWRUYXNrTGlzdCBhcmUgc3dpdGNoZWQgd2hlbiB0aGUgdGljaw0KMzY4OiAgICAgICAgICAgICAgICAgY291bnQgb3ZlcmZsb3dzLiAqLw0KMzY5OiAgICAgICAgICAgICAgICAgI2RlZmluZSB0YXNrU1dJVENIX0RFTEFZRURfTElTVFMoKQkJCQkJCQkJCQkJCQkJCQkJXA0KMzcwOiAgICAgICAgICAgICAgICAgewkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozNzE6ICAgICAgICAgICAgICAgICAJTGlzdF90ICpweFRlbXA7CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMzcyOiAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjM3MzogICAgICAgICAgICAgICAgIAkvKiBUaGUgZGVsYXllZCB0YXNrcyBsaXN0IHNob3VsZCBiZSBlbXB0eSB3aGVuIHRoZSBsaXN0cyBhcmUgc3dpdGNoZWQuICovCQkJCQkJXA0KMzc0OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggKCBsaXN0TElTVF9JU19FTVBUWSggcHhEZWxheWVkVGFza0xpc3QgKSApICk7CQkJCQkJCQkJCVwNCjM3NTogICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQozNzY6ICAgICAgICAgICAgICAgICAJcHhUZW1wID0gcHhEZWxheWVkVGFza0xpc3Q7CQkJCQkJCQkJCQkJCQkJCQkJXA0KMzc3OiAgICAgICAgICAgICAgICAgCXB4RGVsYXllZFRhc2tMaXN0ID0gcHhPdmVyZmxvd0RlbGF5ZWRUYXNrTGlzdDsJCQkJCQkJCQkJCQkJXA0KMzc4OiAgICAgICAgICAgICAgICAgCXB4T3ZlcmZsb3dEZWxheWVkVGFza0xpc3QgPSBweFRlbXA7CQkJCQkJCQkJCQkJCQkJCVwNCjM3OTogICAgICAgICAgICAgICAgIAl4TnVtT2ZPdmVyZmxvd3MrKzsJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjM4MDogICAgICAgICAgICAgICAgIAlwcnZSZXNldE5leHRUYXNrVW5ibG9ja1RpbWUoKTsJCQkJCQkJCQkJCQkJCQkJCVwNCjM4MTogICAgICAgICAgICAgICAgIH0NCjM4MjogICAgICAgICAgICAgICAgIA0KMzgzOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozODQ6ICAgICAgICAgICAgICAgICANCjM4NTogICAgICAgICAgICAgICAgIC8qDQozODY6ICAgICAgICAgICAgICAgICAgKiBQbGFjZSB0aGUgdGFzayByZXByZXNlbnRlZCBieSBweFRDQiBpbnRvIHRoZSBhcHByb3ByaWF0ZSByZWFkeSBsaXN0IGZvcg0KMzg3OiAgICAgICAgICAgICAgICAgICogdGhlIHRhc2suICBJdCBpcyBpbnNlcnRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0Lg0KMzg4OiAgICAgICAgICAgICAgICAgICovDQozODk6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhUQ0IgKQkJCQkJCQkJCQkJCQkJCQlcDQozOTA6ICAgICAgICAgICAgICAgICAJdHJhY2VNT1ZFRF9UQVNLX1RPX1JFQURZX1NUQVRFKCBweFRDQiApOwkJCQkJCQkJCQkJCQkJXA0KMzkxOiAgICAgICAgICAgICAgICAgCXRhc2tSRUNPUkRfUkVBRFlfUFJJT1JJVFkoICggcHhUQ0IgKS0+dXhQcmlvcml0eSApOwkJCQkJCQkJCQkJCVwNCjM5MjogICAgICAgICAgICAgICAgIAl2TGlzdEluc2VydEVuZCggJiggcHhSZWFkeVRhc2tzTGlzdHNbICggcHhUQ0IgKS0+dXhQcmlvcml0eSBdICksICYoICggcHhUQ0IgKS0+eEdlbmVyaWNMaXN0SXRlbSApICkNCjM5MzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzk0OiAgICAgICAgICAgICAgICAgDQozOTU6ICAgICAgICAgICAgICAgICAvKg0KMzk2OiAgICAgICAgICAgICAgICAgICogU2V2ZXJhbCBmdW5jdGlvbnMgdGFrZSBhbiBUYXNrSGFuZGxlX3QgcGFyYW1ldGVyIHRoYXQgY2FuIG9wdGlvbmFsbHkgYmUgTlVMTCwNCjM5NzogICAgICAgICAgICAgICAgICAqIHdoZXJlIE5VTEwgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBoYW5kbGUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcNCjM5ODogICAgICAgICAgICAgICAgICAqIHRhc2sgc2hvdWxkIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIHBhcmFtZXRlci4gIFRoaXMgbWFjcm8gc2ltcGx5IGNoZWNrcyB0bw0KMzk5OiAgICAgICAgICAgICAgICAgICogc2VlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgTlVMTCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFwcHJvcHJpYXRlIFRDQi4NCjQwMDogICAgICAgICAgICAgICAgICAqLw0KNDAxOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCBweEhhbmRsZSApICggKCAoIHB4SGFuZGxlICkgPT0gTlVMTCApID8gKCBUQ0JfdCAqICkgcHhDdXJyZW50VENCIDogKCBUQ0JfdCAqICkgKCBweEhhbmRsZSApICkNCjQwMjogICAgICAgICAgICAgICAgIA0KNDAzOiAgICAgICAgICAgICAgICAgLyogVGhlIGl0ZW0gdmFsdWUgb2YgdGhlIGV2ZW50IGxpc3QgaXRlbSBpcyBub3JtYWxseSB1c2VkIHRvIGhvbGQgdGhlIHByaW9yaXR5DQo0MDQ6ICAgICAgICAgICAgICAgICBvZiB0aGUgdGFzayB0byB3aGljaCBpdCBiZWxvbmdzIChjb2RlZCB0byBhbGxvdyBpdCB0byBiZSBoZWxkIGluIHJldmVyc2UNCjQwNTogICAgICAgICAgICAgICAgIHByaW9yaXR5IG9yZGVyKS4gIEhvd2V2ZXIsIGl0IGlzIG9jY2FzaW9uYWxseSBib3Jyb3dlZCBmb3Igb3RoZXIgcHVycG9zZXMuICBJdA0KNDA2OiAgICAgICAgICAgICAgICAgaXMgaW1wb3J0YW50IGl0cyB2YWx1ZSBpcyBub3QgdXBkYXRlZCBkdWUgdG8gYSB0YXNrIHByaW9yaXR5IGNoYW5nZSB3aGlsZSBpdCBpcw0KNDA3OiAgICAgICAgICAgICAgICAgYmVpbmcgdXNlZCBmb3IgYW5vdGhlciBwdXJwb3NlLiAgVGhlIGZvbGxvd2luZyBiaXQgZGVmaW5pdGlvbiBpcyB1c2VkIHRvIGluZm9ybQ0KNDA4OiAgICAgICAgICAgICAgICAgdGhlIHNjaGVkdWxlciB0aGF0IHRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGNoYW5nZWQgLSBpbiB3aGljaCBjYXNlIGl0IGlzIHRoZQ0KNDA5OiAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHkgb2Ygd2hpY2hldmVyIG1vZHVsZSBpcyB1c2luZyB0aGUgdmFsdWUgdG8gZW5zdXJlIGl0IGdldHMgc2V0IGJhY2sNCjQxMDogICAgICAgICAgICAgICAgIHRvIGl0cyBvcmlnaW5hbCB2YWx1ZSB3aGVuIGl0IGlzIHJlbGVhc2VkLiAqLw0KNDExOiAgICAgICAgICAgICAgICAgI2lmIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgPT0gMQ0KNDEyOiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgdGFza0VWRU5UX0xJU1RfSVRFTV9WQUxVRV9JTl9VU0UJMHg4MDAwVQ0KNDEzOiAgICAgICAgICAgICAgICAgI2Vsc2UNCjQxNDogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHRhc2tFVkVOVF9MSVNUX0lURU1fVkFMVUVfSU5fVVNFCTB4ODAwMDAwMDBVTA0KNDE1OiAgICAgICAgICAgICAgICAgI2VuZGlmDQo0MTY6ICAgICAgICAgICAgICAgICANCjQxNzogICAgICAgICAgICAgICAgIC8qIENhbGxiYWNrIGZ1bmN0aW9uIHByb3RvdHlwZXMuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQxODogICAgICAgICAgICAgICAgICNpZiBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAwDQo0MTk6ICAgICAgICAgICAgICAgICAJZXh0ZXJuIHZvaWQgdkFwcGxpY2F0aW9uU3RhY2tPdmVyZmxvd0hvb2soIFRhc2tIYW5kbGVfdCB4VGFzaywgY2hhciAqcGNUYXNrTmFtZSApOw0KNDIwOiAgICAgICAgICAgICAgICAgI2VuZGlmDQo0MjE6ICAgICAgICAgICAgICAgICANCjQyMjogICAgICAgICAgICAgICAgICNpZiBjb25maWdVU0VfVElDS19IT09LID4gMA0KNDIzOiAgICAgICAgICAgICAgICAgCWV4dGVybiB2b2lkIHZBcHBsaWNhdGlvblRpY2tIb29rKCB2b2lkICk7DQo0MjQ6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjQyNTogICAgICAgICAgICAgICAgIA0KNDI2OiAgICAgICAgICAgICAgICAgLyogRmlsZSBwcml2YXRlIGZ1bmN0aW9ucy4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDI3OiAgICAgICAgICAgICAgICAgDQo0Mjg6ICAgICAgICAgICAgICAgICAvKg0KNDI5OiAgICAgICAgICAgICAgICAgICogVXRpbGl0eSB0byByZWFkeSBhIFRDQiBmb3IgYSBnaXZlbiB0YXNrLiAgTWFpbmx5IGp1c3QgY29waWVzIHRoZSBwYXJhbWV0ZXJzDQo0MzA6ICAgICAgICAgICAgICAgICAgKiBpbnRvIHRoZSBUQ0Igc3RydWN0dXJlLg0KNDMxOiAgICAgICAgICAgICAgICAgICovDQo0MzI6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZJbml0aWFsaXNlVENCVmFyaWFibGVzKCBUQ0JfdCAqIGNvbnN0IHB4VENCLCBjb25zdCBjaGFyICogY29uc3QgcGNOYW1lLCBVQmFzZVR5cGVfdCB1eFByaW9yaXR5LCBjb25zdCBNZW1vcnlSZWdpb25fdCAqIGNvbnN0IHhSZWdpb25zLCBjb25zdCB1aW50MTZfdCB1c1N0YWNrRGVwdGggKSBQUklWSUxFR0VEX0ZVTkNUSU9OOyAvKmxpbnQgIWU5NzEgVW5xdWFsaWZpZWQgY2hhciB0eXBlcyBhcmUgYWxsb3dlZCBmb3Igc3RyaW5ncyBhbmQgc2luZ2xlIGNoYXJhY3RlcnMgb25seS4gKi8NCjQzMzogICAgICAgICAgICAgICAgIA0KNDM0OiAgICAgICAgICAgICAgICAgLyoqDQo0MzU6ICAgICAgICAgICAgICAgICAgKiBVdGlsaXR5IHRhc2sgdGhhdCBzaW1wbHkgcmV0dXJucyBwZFRSVUUgaWYgdGhlIHRhc2sgcmVmZXJlbmNlZCBieSB4VGFzayBpcw0KNDM2OiAgICAgICAgICAgICAgICAgICogY3VycmVudGx5IGluIHRoZSBTdXNwZW5kZWQgc3RhdGUsIG9yIHBkRkFMU0UgaWYgdGhlIHRhc2sgcmVmZXJlbmNlZCBieSB4VGFzaw0KNDM3OiAgICAgICAgICAgICAgICAgICogaXMgaW4gYW55IG90aGVyIHN0YXRlLg0KNDM4OiAgICAgICAgICAgICAgICAgICovDQo0Mzk6ICAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjQ0MDogICAgICAgICAgICAgICAgIAlzdGF0aWMgQmFzZVR5cGVfdCBwcnZUYXNrSXNUYXNrU3VzcGVuZGVkKCBjb25zdCBUYXNrSGFuZGxlX3QgeFRhc2sgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KNDQxOiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQo0NDI6ICAgICAgICAgICAgICAgICANCjQ0MzogICAgICAgICAgICAgICAgIC8qDQo0NDQ6ICAgICAgICAgICAgICAgICAgKiBVdGlsaXR5IHRvIHJlYWR5IGFsbCB0aGUgbGlzdHMgdXNlZCBieSB0aGUgc2NoZWR1bGVyLiAgVGhpcyBpcyBjYWxsZWQNCjQ0NTogICAgICAgICAgICAgICAgICAqIGF1dG9tYXRpY2FsbHkgdXBvbiB0aGUgY3JlYXRpb24gb2YgdGhlIGZpcnN0IHRhc2suDQo0NDY6ICAgICAgICAgICAgICAgICAgKi8NCjQ0NzogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkluaXRpYWxpc2VUYXNrTGlzdHMoIHZvaWQgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KNDQ4OiAgICAgICAgICAgICAgICAgDQo0NDk6ICAgICAgICAgICAgICAgICAvKg0KNDUwOiAgICAgICAgICAgICAgICAgICogVGhlIGlkbGUgdGFzaywgd2hpY2ggYXMgYWxsIHRhc2tzIGlzIGltcGxlbWVudGVkIGFzIGEgbmV2ZXIgZW5kaW5nIGxvb3AuDQo0NTE6ICAgICAgICAgICAgICAgICAgKiBUaGUgaWRsZSB0YXNrIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBhbmQgYWRkZWQgdG8gdGhlIHJlYWR5IGxpc3RzIHVwb24NCjQ1MjogICAgICAgICAgICAgICAgICAqIGNyZWF0aW9uIG9mIHRoZSBmaXJzdCB1c2VyIHRhc2suDQo0NTM6ICAgICAgICAgICAgICAgICAgKg0KNDU0OiAgICAgICAgICAgICAgICAgICogVGhlIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCkgbWFjcm8gaXMgdXNlZCB0byBhbGxvdyBwb3J0L2NvbXBpbGVyIHNwZWNpZmljDQo0NTU6ICAgICAgICAgICAgICAgICAgKiBsYW5ndWFnZSBleHRlbnNpb25zLiAgVGhlIGVxdWl2YWxlbnQgcHJvdG90eXBlIGZvciB0aGlzIGZ1bmN0aW9uIGlzOg0KNDU2OiAgICAgICAgICAgICAgICAgICoNCjQ1NzogICAgICAgICAgICAgICAgICAqIHZvaWQgcHJ2SWRsZVRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApOw0KNDU4OiAgICAgICAgICAgICAgICAgICoNCjQ1OTogICAgICAgICAgICAgICAgICAqLw0KNDYwOiAgICAgICAgICAgICAgICAgc3RhdGljIHBvcnRUQVNLX0ZVTkNUSU9OX1BST1RPKCBwcnZJZGxlVGFzaywgcHZQYXJhbWV0ZXJzICk7DQo0NjE6ICAgICAgICAgICAgICAgICANCjQ2MjogICAgICAgICAgICAgICAgIC8qDQo0NjM6ICAgICAgICAgICAgICAgICAgKiBVdGlsaXR5IHRvIGZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIHNjaGVkdWxlciB0byBob2xkIGEgVENCLA0KNDY0OiAgICAgICAgICAgICAgICAgICogaW5jbHVkaW5nIHRoZSBzdGFjayBwb2ludGVkIHRvIGJ5IHRoZSBUQ0IuDQo0NjU6ICAgICAgICAgICAgICAgICAgKg0KNDY2OiAgICAgICAgICAgICAgICAgICogVGhpcyBkb2VzIG5vdCBmcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIHRhc2sgaXRzZWxmIChpLmUuIG1lbW9yeQ0KNDY3OiAgICAgICAgICAgICAgICAgICogYWxsb2NhdGVkIGJ5IGNhbGxzIHRvIHB2UG9ydE1hbGxvYyBmcm9tIHdpdGhpbiB0aGUgdGFza3MgYXBwbGljYXRpb24gY29kZSkuDQo0Njg6ICAgICAgICAgICAgICAgICAgKi8NCjQ2OTogICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdlRhc2tEZWxldGUgPT0gMSApDQo0NzA6ICAgICAgICAgICAgICAgICANCjQ3MTogICAgICAgICAgICAgICAgIAlzdGF0aWMgdm9pZCBwcnZEZWxldGVUQ0IoIFRDQl90ICpweFRDQiApIFBSSVZJTEVHRURfRlVOQ1RJT047DQo0NzI6ICAgICAgICAgICAgICAgICANCjQ3MzogICAgICAgICAgICAgICAgICNlbmRpZg0KNDc0OiAgICAgICAgICAgICAgICAgDQo0NzU6ICAgICAgICAgICAgICAgICAvKg0KNDc2OiAgICAgICAgICAgICAgICAgICogVXNlZCBvbmx5IGJ5IHRoZSBpZGxlIHRhc2suICBUaGlzIGNoZWNrcyB0byBzZWUgaWYgYW55dGhpbmcgaGFzIGJlZW4gcGxhY2VkDQo0Nzc6ICAgICAgICAgICAgICAgICAgKiBpbiB0aGUgbGlzdCBvZiB0YXNrcyB3YWl0aW5nIHRvIGJlIGRlbGV0ZWQuICBJZiBzbyB0aGUgdGFzayBpcyBjbGVhbmVkIHVwDQo0Nzg6ICAgICAgICAgICAgICAgICAgKiBhbmQgaXRzIFRDQiBkZWxldGVkLg0KNDc5OiAgICAgICAgICAgICAgICAgICovDQo0ODA6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZDaGVja1Rhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uKCB2b2lkICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjQ4MTogICAgICAgICAgICAgICAgIA0KNDgyOiAgICAgICAgICAgICAgICAgLyoNCjQ4MzogICAgICAgICAgICAgICAgICAqIFRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHRhc2sgaXMgZW50ZXJpbmcgdGhlIEJsb2NrZWQgc3RhdGUuICBBZGQgdGhlIHRhc2sgdG8NCjQ4NDogICAgICAgICAgICAgICAgICAqIGVpdGhlciB0aGUgY3VycmVudCBvciB0aGUgb3ZlcmZsb3cgZGVsYXllZCB0YXNrIGxpc3QuDQo0ODU6ICAgICAgICAgICAgICAgICAgKi8NCjQ4NjogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggY29uc3QgVGlja1R5cGVfdCB4VGltZVRvV2FrZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQo0ODc6ICAgICAgICAgICAgICAgICANCjQ4ODogICAgICAgICAgICAgICAgIC8qDQo0ODk6ICAgICAgICAgICAgICAgICAgKiBBbGxvY2F0ZXMgbWVtb3J5IGZyb20gdGhlIGhlYXAgZm9yIGEgVENCIGFuZCBhc3NvY2lhdGVkIHN0YWNrLiAgQ2hlY2tzIHRoZQ0KNDkwOiAgICAgICAgICAgICAgICAgICogYWxsb2NhdGlvbiB3YXMgc3VjY2Vzc2Z1bC4NCjQ5MTogICAgICAgICAgICAgICAgICAqLw0KNDkyOiAgICAgICAgICAgICAgICAgc3RhdGljIFRDQl90ICpwcnZBbGxvY2F0ZVRDQkFuZFN0YWNrKCBjb25zdCB1aW50MTZfdCB1c1N0YWNrRGVwdGgsIFN0YWNrVHlwZV90ICogY29uc3QgcHV4U3RhY2tCdWZmZXIgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KNDkzOiAgICAgICAgICAgICAgICAgDQo0OTQ6ICAgICAgICAgICAgICAgICAvKg0KNDk1OiAgICAgICAgICAgICAgICAgICogRmlsbHMgYW4gVGFza1N0YXR1c190IHN0cnVjdHVyZSB3aXRoIGluZm9ybWF0aW9uIG9uIGVhY2ggdGFzayB0aGF0IGlzDQo0OTY6ICAgICAgICAgICAgICAgICAgKiByZWZlcmVuY2VkIGZyb20gdGhlIHB4TGlzdCBsaXN0ICh3aGljaCBtYXkgYmUgYSByZWFkeSBsaXN0LCBhIGRlbGF5ZWQgbGlzdCwNCjQ5NzogICAgICAgICAgICAgICAgICAqIGEgc3VzcGVuZGVkIGxpc3QsIGV0Yy4pLg0KNDk4OiAgICAgICAgICAgICAgICAgICoNCjQ5OTogICAgICAgICAgICAgICAgICAqIFRISVMgRlVOQ1RJT04gSVMgSU5URU5ERUQgRk9SIERFQlVHR0lORyBPTkxZLCBBTkQgU0hPVUxEIE5PVCBCRSBDQUxMRUQgRlJPTQ0KNTAwOiAgICAgICAgICAgICAgICAgICogTk9STUFMIEFQUExJQ0FUSU9OIENPREUuDQo1MDE6ICAgICAgICAgICAgICAgICAgKi8NCjUwMjogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjUwMzogICAgICAgICAgICAgICAgIA0KNTA0OiAgICAgICAgICAgICAgICAgCXN0YXRpYyBVQmFzZVR5cGVfdCBwcnZMaXN0VGFza1dpdGhpblNpbmdsZUxpc3QoIFRhc2tTdGF0dXNfdCAqcHhUYXNrU3RhdHVzQXJyYXksIExpc3RfdCAqcHhMaXN0LCBlVGFza1N0YXRlIGVTdGF0ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQo1MDU6ICAgICAgICAgICAgICAgICANCjUwNjogICAgICAgICAgICAgICAgICNlbmRpZg0KNTA3OiAgICAgICAgICAgICAgICAgDQo1MDg6ICAgICAgICAgICAgICAgICAvKg0KNTA5OiAgICAgICAgICAgICAgICAgICogV2hlbiBhIHRhc2sgaXMgY3JlYXRlZCwgdGhlIHN0YWNrIG9mIHRoZSB0YXNrIGlzIGZpbGxlZCB3aXRoIGEga25vd24gdmFsdWUuDQo1MTA6ICAgICAgICAgICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgdGhlICdoaWdoIHdhdGVyIG1hcmsnIG9mIHRoZSB0YXNrIHN0YWNrIGJ5DQo1MTE6ICAgICAgICAgICAgICAgICAgKiBkZXRlcm1pbmluZyBob3cgbXVjaCBvZiB0aGUgc3RhY2sgcmVtYWlucyBhdCB0aGUgb3JpZ2luYWwgcHJlc2V0IHZhbHVlLg0KNTEyOiAgICAgICAgICAgICAgICAgICovDQo1MTM6ICAgICAgICAgICAgICAgICAjaWYgKCAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgfHwgKCBJTkNMVURFX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayA9PSAxICkgKQ0KNTE0OiAgICAgICAgICAgICAgICAgDQo1MTU6ICAgICAgICAgICAgICAgICAJc3RhdGljIHVpbnQxNl90IHBydlRhc2tDaGVja0ZyZWVTdGFja1NwYWNlKCBjb25zdCB1aW50OF90ICogcHVjU3RhY2tCeXRlICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjUxNjogICAgICAgICAgICAgICAgIA0KNTE3OiAgICAgICAgICAgICAgICAgI2VuZGlmDQo1MTg6ICAgICAgICAgICAgICAgICANCjUxOTogICAgICAgICAgICAgICAgIC8qDQo1MjA6ICAgICAgICAgICAgICAgICAgKiBSZXR1cm4gdGhlIGFtb3VudCBvZiB0aW1lLCBpbiB0aWNrcywgdGhhdCB3aWxsIHBhc3MgYmVmb3JlIHRoZSBrZXJuZWwgd2lsbA0KNTIxOiAgICAgICAgICAgICAgICAgICogbmV4dCBtb3ZlIGEgdGFzayBmcm9tIHRoZSBCbG9ja2VkIHN0YXRlIHRvIHRoZSBSdW5uaW5nIHN0YXRlLg0KNTIyOiAgICAgICAgICAgICAgICAgICoNCjUyMzogICAgICAgICAgICAgICAgICAqIFRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2hvdWxkIHVzZSBpbmVxdWFsaXR5IHRvIDAsIG5vdCBlcXVhbGl0eSB0byAxLg0KNTI0OiAgICAgICAgICAgICAgICAgICogVGhpcyBpcyB0byBlbnN1cmUgcG9ydFNVUFBSRVNTX1RJQ0tTX0FORF9TTEVFUCgpIGNhbiBiZSBjYWxsZWQgd2hlbiB1c2VyDQo1MjU6ICAgICAgICAgICAgICAgICAgKiBkZWZpbmVkIGxvdyBwb3dlciBtb2RlIGltcGxlbWVudGF0aW9ucyByZXF1aXJlIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFIHRvIGJlDQo1MjY6ICAgICAgICAgICAgICAgICAgKiBzZXQgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIDEuDQo1Mjc6ICAgICAgICAgICAgICAgICAgKi8NCjUyODogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICE9IDAgKQ0KNTI5OiAgICAgICAgICAgICAgICAgDQo1MzA6ICAgICAgICAgICAgICAgICAJc3RhdGljIFRpY2tUeXBlX3QgcHJ2R2V0RXhwZWN0ZWRJZGxlVGltZSggdm9pZCApIFBSSVZJTEVHRURfRlVOQ1RJT047DQo1MzE6ICAgICAgICAgICAgICAgICANCjUzMjogICAgICAgICAgICAgICAgICNlbmRpZg0KNTMzOiAgICAgICAgICAgICAgICAgDQo1MzQ6ICAgICAgICAgICAgICAgICAvKg0KNTM1OiAgICAgICAgICAgICAgICAgICogU2V0IHhOZXh0VGFza1VuYmxvY2tUaW1lIHRvIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBuZXh0IEJsb2NrZWQgc3RhdGUgdGFzaw0KNTM2OiAgICAgICAgICAgICAgICAgICogd2lsbCBleGl0IHRoZSBCbG9ja2VkIHN0YXRlLg0KNTM3OiAgICAgICAgICAgICAgICAgICovDQo1Mzg6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZSZXNldE5leHRUYXNrVW5ibG9ja1RpbWUoIHZvaWQgKTsNCjUzOTogICAgICAgICAgICAgICAgIA0KNTQwOiAgICAgICAgICAgICAgICAgI2lmICggKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApICYmICggY29uZmlnVVNFX1NUQVRTX0ZPUk1BVFRJTkdfRlVOQ1RJT05TID4gMCApICkNCjU0MTogICAgICAgICAgICAgICAgIA0KNTQyOiAgICAgICAgICAgICAgICAgCS8qDQo1NDM6ICAgICAgICAgICAgICAgICAJICogSGVscGVyIGZ1bmN0aW9uIHVzZWQgdG8gcGFkIHRhc2sgbmFtZXMgd2l0aCBzcGFjZXMgd2hlbiBwcmludGluZyBvdXQNCjU0NDogICAgICAgICAgICAgICAgIAkgKiBodW1hbiByZWFkYWJsZSB0YWJsZXMgb2YgdGFzayBpbmZvcm1hdGlvbi4NCjU0NTogICAgICAgICAgICAgICAgIAkgKi8NCjU0NjogICAgICAgICAgICAgICAgIAlzdGF0aWMgY2hhciAqcHJ2V3JpdGVOYW1lVG9CdWZmZXIoIGNoYXIgKnBjQnVmZmVyLCBjb25zdCBjaGFyICpwY1Rhc2tOYW1lICk7DQo1NDc6ICAgICAgICAgICAgICAgICANCjU0ODogICAgICAgICAgICAgICAgICNlbmRpZg0KNTQ5OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo1NTA6ICAgICAgICAgICAgICAgICANCjU1MTogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFRhc2tHZW5lcmljQ3JlYXRlKCBUYXNrRnVuY3Rpb25fdCBweFRhc2tDb2RlLCBjb25zdCBjaGFyICogY29uc3QgcGNOYW1lLCBjb25zdCB1aW50MTZfdCB1c1N0YWNrRGVwdGgsIHZvaWQgKiBjb25zdCBwdlBhcmFtZXRlcnMsIFVCYXNlVHlwZV90IHV4UHJpb3JpdHksIFRhc2tIYW5kbGVfdCAqIGNvbnN0IHB4Q3JlYXRlZFRhc2ssIFN0YWNrVHlwZV90ICogY29uc3QgcHV4U3RhY2tCdWZmZXIsIGNvbnN0IE1lbW9yeVJlZ2lvbl90ICogY29uc3QgeFJlZ2lvbnMgKSAvKmxpbnQgIWU5NzEgVW5xdWFsaWZpZWQgY2hhciB0eXBlcyBhcmUgYWxsb3dlZCBmb3Igc3RyaW5ncyBhbmQgc2luZ2xlIGNoYXJhY3RlcnMgb25seS4gKi8NCjU1MjogICAgICAgICAgICAgICAgIHsNCkJGRDAxNTM0ICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4DQpCRkQwMTUzNiAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApDQpCRkQwMTUzOCAgICAgIENCQ0EgICBTVyBTOCwgNDAoU1ApDQpCRkQwMTUzQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDE1M0MgIDAwMzBGODlFICAgU1cgQTAsIDQ4KFM4KQ0KQkZEMDE1NDAgIDAwMzRGOEJFICAgU1cgQTEsIDUyKFM4KQ0KQkZEMDE1NDQgICAgICAwQzQ2ICAgTU9WRSBWMCwgQTINCkJGRDAxNTQ2ICAwMDNDRjhGRSAgIFNXIEEzLCA2MChTOCkNCkJGRDAxNTRBICAwMDM4Mzg1RSAgIFNIIFYwLCA1NihTOCkNCjU1MzogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCjU1NDogICAgICAgICAgICAgICAgIFRDQl90ICogcHhOZXdUQ0I7DQo1NTU6ICAgICAgICAgICAgICAgICBTdGFja1R5cGVfdCAqcHhUb3BPZlN0YWNrOw0KNTU2OiAgICAgICAgICAgICAgICAgDQo1NTc6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweFRhc2tDb2RlICk7DQpCRkQwMTU0RSAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMTU1MiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTU2OA0KQkZEMDE1NTYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAxNTU4ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAxNTVBICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwMTU1QyAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDAxNTVFICAwMjJEMzBBMCAgIEFERElVIEExLCBaRVJPLCA1NTcNCkJGRDAxNTYyICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDE1NjQgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAxNTY2ICAgICAgMEMwMCAgIE5PUA0KNTU4OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggKCAoIHV4UHJpb3JpdHkgJiAoIFVCYXNlVHlwZV90ICkgKCB+cG9ydFBSSVZJTEVHRV9CSVQgKSApIDwgKCBVQmFzZVR5cGVfdCApIGNvbmZpZ01BWF9QUklPUklUSUVTICkgKTsNCkJGRDAxNTY4ICAwMDQwRkM1RSAgIExXIFYwLCA2NChTOCkNCkJGRDAxNTZDICAwMDA1QjA0MiAgIFNMVElVIFYwLCBWMCwgNQ0KQkZEMDE1NzAgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE1ODYNCkJGRDAxNTc0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMTU3NiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMTU3OCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDE1N0EgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMTU3QyAgMDIyRTMwQTAgICBBRERJVSBBMSwgWkVSTywgNTU4DQpCRkQwMTU4MCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAxNTgyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMTU4NCAgICAgIDBDMDAgICBOT1ANCjU1OTogICAgICAgICAgICAgICAgIA0KNTYwOiAgICAgICAgICAgICAgICAgCS8qIEFsbG9jYXRlIHRoZSBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIFRDQiBhbmQgc3RhY2sgZm9yIHRoZSBuZXcgdGFzaywNCjU2MTogICAgICAgICAgICAgICAgIAljaGVja2luZyB0aGF0IHRoZSBhbGxvY2F0aW9uIHdhcyBzdWNjZXNzZnVsLiAqLw0KNTYyOiAgICAgICAgICAgICAgICAgCXB4TmV3VENCID0gcHJ2QWxsb2NhdGVUQ0JBbmRTdGFjayggdXNTdGFja0RlcHRoLCBwdXhTdGFja0J1ZmZlciApOw0KQkZEMDE1ODYgIDAwMzgzNDVFICAgTEhVIFYwLCA1NihTOCkNCkJGRDAxNThBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwMTU4QyAgMDA0OEZDQkUgICBMVyBBMSwgNzIoUzgpDQpCRkQwMTU5MCAgMzE5NDc3RTggICBKQUxTIHBydkFsbG9jYXRlVENCQW5kU3RhY2sNCkJGRDAxNTkyICAwQzAwMzE5NCAgIEFERElVIFQ0LCBTNCwgMzA3Mg0KQkZEMDE1OTQgICAgICAwQzAwICAgTk9QDQpCRkQwMTU5NiAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQo1NjM6ICAgICAgICAgICAgICAgICANCjU2NDogICAgICAgICAgICAgICAgIAlpZiggcHhOZXdUQ0IgIT0gTlVMTCApDQpCRkQwMTU5QSAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMTU5RSAgMDA5QTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTZENg0KNTY1OiAgICAgICAgICAgICAgICAgCXsNCjU2NjogICAgICAgICAgICAgICAgIAkJI2lmKCBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTID09IDEgKQ0KNTY3OiAgICAgICAgICAgICAgICAgCQkJLyogU2hvdWxkIHRoZSB0YXNrIGJlIGNyZWF0ZWQgaW4gcHJpdmlsZWdlZCBtb2RlPyAqLw0KNTY4OiAgICAgICAgICAgICAgICAgCQkJQmFzZVR5cGVfdCB4UnVuUHJpdmlsZWdlZDsNCjU2OTogICAgICAgICAgICAgICAgIAkJCWlmKCAoIHV4UHJpb3JpdHkgJiBwb3J0UFJJVklMRUdFX0JJVCApICE9IDBVICkNCjU3MDogICAgICAgICAgICAgICAgIAkJCXsNCjU3MTogICAgICAgICAgICAgICAgIAkJCQl4UnVuUHJpdmlsZWdlZCA9IHBkVFJVRTsNCjU3MjogICAgICAgICAgICAgICAgIAkJCX0NCjU3MzogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjU3NDogICAgICAgICAgICAgICAgIAkJCXsNCjU3NTogICAgICAgICAgICAgICAgIAkJCQl4UnVuUHJpdmlsZWdlZCA9IHBkRkFMU0U7DQo1NzY6ICAgICAgICAgICAgICAgICAJCQl9DQo1Nzc6ICAgICAgICAgICAgICAgICAJCQl1eFByaW9yaXR5ICY9IH5wb3J0UFJJVklMRUdFX0JJVDsNCjU3ODogICAgICAgICAgICAgICAgIA0KNTc5OiAgICAgICAgICAgICAgICAgCQkJaWYoIHB1eFN0YWNrQnVmZmVyICE9IE5VTEwgKQ0KNTgwOiAgICAgICAgICAgICAgICAgCQkJew0KNTgxOiAgICAgICAgICAgICAgICAgCQkJCS8qIFRoZSBhcHBsaWNhdGlvbiBwcm92aWRlZCBpdHMgb3duIHN0YWNrLiAgTm90ZSB0aGlzIHNvIG5vDQo1ODI6ICAgICAgICAgICAgICAgICAJCQkJYXR0ZW1wdCBpcyBtYWRlIHRvIGRlbGV0ZSB0aGUgc3RhY2sgc2hvdWxkIHRoYXQgdGFzayBiZQ0KNTgzOiAgICAgICAgICAgICAgICAgCQkJCWRlbGV0ZWQuICovDQo1ODQ6ICAgICAgICAgICAgICAgICAJCQkJcHhOZXdUQ0ItPnhVc2luZ1N0YXRpY2FsbHlBbGxvY2F0ZWRTdGFjayA9IHBkVFJVRTsNCjU4NTogICAgICAgICAgICAgICAgIAkJCX0NCjU4NjogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjU4NzogICAgICAgICAgICAgICAgIAkJCXsNCjU4ODogICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgc3RhY2sgd2FzIGFsbG9jYXRlZCBkeW5hbWljYWxseS4gIE5vdGUgdGhpcyBzbyBpdCBjYW4gYmUNCjU4OTogICAgICAgICAgICAgICAgIAkJCQlkZWxldGVkIGFnYWluIGlmIHRoZSB0YXNrIGlzIGRlbGV0ZWQuICovDQo1OTA6ICAgICAgICAgICAgICAgICAJCQkJcHhOZXdUQ0ItPnhVc2luZ1N0YXRpY2FsbHlBbGxvY2F0ZWRTdGFjayA9IHBkRkFMU0U7DQo1OTE6ICAgICAgICAgICAgICAgICAJCQl9DQo1OTI6ICAgICAgICAgICAgICAgICAJCSNlbmRpZiAvKiBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTID09IDEgKi8NCjU5MzogICAgICAgICAgICAgICAgIA0KNTk0OiAgICAgICAgICAgICAgICAgCQkvKiBDYWxjdWxhdGUgdGhlIHRvcCBvZiBzdGFjayBhZGRyZXNzLiAgVGhpcyBkZXBlbmRzIG9uIHdoZXRoZXIgdGhlDQo1OTU6ICAgICAgICAgICAgICAgICAJCXN0YWNrIGdyb3dzIGZyb20gaGlnaCBtZW1vcnkgdG8gbG93IChhcyBwZXIgdGhlIDgweDg2KSBvciB2aWNlIHZlcnNhLg0KNTk2OiAgICAgICAgICAgICAgICAgCQlwb3J0U1RBQ0tfR1JPV1RIIGlzIHVzZWQgdG8gbWFrZSB0aGUgcmVzdWx0IHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGFzDQo1OTc6ICAgICAgICAgICAgICAgICAJCXJlcXVpcmVkIGJ5IHRoZSBwb3J0LiAqLw0KNTk4OiAgICAgICAgICAgICAgICAgCQkjaWYoIHBvcnRTVEFDS19HUk9XVEggPCAwICkNCjU5OTogICAgICAgICAgICAgICAgIAkJew0KNjAwOiAgICAgICAgICAgICAgICAgCQkJcHhUb3BPZlN0YWNrID0gcHhOZXdUQ0ItPnB4U3RhY2sgKyAoIHVzU3RhY2tEZXB0aCAtICggdWludDE2X3QgKSAxICk7DQpCRkQwMTVBMiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMTVBNCAgNjlBQzAwMUMgICBFWFQgWkVSTywgR1AsIDYsIDE0DQpCRkQwMTVBNiAgICAgIDY5QUMgICBMVyBWMSwgNDgoVjApDQpCRkQwMTVBOCAgMDAzODM0NUUgICBMSFUgVjAsIDU2KFM4KQ0KQkZEMDE1QUMgICAgICA2RDJFICAgQURESVUgVjAsIFYwLCAtMQ0KQkZEMDE1QUUgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDE1QjAgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwMTVCMiAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQo2MDE6ICAgICAgICAgICAgICAgICAJCQlweFRvcE9mU3RhY2sgPSAoIFN0YWNrVHlwZV90ICogKSAoICggKCBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgKSBweFRvcE9mU3RhY2sgKSAmICggfiggKCBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgKSBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApICkgKTsgLypsaW50ICFlOTIzIE1JU1JBIGV4Y2VwdGlvbi4gIEF2b2lkaW5nIGNhc3RzIGJldHdlZW4gcG9pbnRlcnMgYW5kIGludGVnZXJzIGlzIG5vdCBwcmFjdGljYWwuICBTaXplIGRpZmZlcmVuY2VzIGFjY291bnRlZCBmb3IgdXNpbmcgcG9ydFBPSU5URVJfU0laRV9UWVBFIHR5cGUuICovDQpCRkQwMTVCNiAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpDQpCRkQwMTVCOCAgMzA0MDAwMjAgICBTUkwgQVQsIFpFUk8sIDYNCkJGRDAxNUJBICBGRkY4MzA0MCAgIEFERElVIFYwLCBaRVJPLCAtOA0KQkZEMDE1QkMgIDQ0OTNGRkY4ICAgTFcgUkEsIDE3NTU1KFQ4KQ0KQkZEMDE1QkUgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwMTVDMCAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQo2MDI6ICAgICAgICAgICAgICAgICANCjYwMzogICAgICAgICAgICAgICAgIAkJCS8qIENoZWNrIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGNhbGN1bGF0ZWQgdG9wIG9mIHN0YWNrIGlzIGNvcnJlY3QuICovDQo2MDQ6ICAgICAgICAgICAgICAgICAJCQljb25maWdBU1NFUlQoICggKCAoIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSApIHB4VG9wT2ZTdGFjayAmICggcG9ydFBPSU5URVJfU0laRV9UWVBFICkgcG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKSA9PSAwVUwgKSApOw0KQkZEMDE1QzQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDE1QzggICAgICAyRDI1ICAgQU5ESSBWMCwgVjAsIDB4Nw0KQkZEMDE1Q0EgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE1RTANCkJGRDAxNUNFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMTVEMCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMTVEMiAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDE1RDQgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMTVENiAgMDI1QzMwQTAgICBBRERJVSBBMSwgWkVSTywgNjA0DQpCRkQwMTVEQSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAxNURDICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMTVERSAgICAgIDBDMDAgICBOT1ANCjYwNTogICAgICAgICAgICAgICAgIAkJfQ0KNjA2OiAgICAgICAgICAgICAgICAgCQkjZWxzZSAvKiBwb3J0U1RBQ0tfR1JPV1RIICovDQo2MDc6ICAgICAgICAgICAgICAgICAJCXsNCjYwODogICAgICAgICAgICAgICAgIAkJCXB4VG9wT2ZTdGFjayA9IHB4TmV3VENCLT5weFN0YWNrOw0KNjA5OiAgICAgICAgICAgICAgICAgDQo2MTA6ICAgICAgICAgICAgICAgICAJCQkvKiBDaGVjayB0aGUgYWxpZ25tZW50IG9mIHRoZSBzdGFjayBidWZmZXIgaXMgY29ycmVjdC4gKi8NCjYxMTogICAgICAgICAgICAgICAgIAkJCWNvbmZpZ0FTU0VSVCggKCAoICggcG9ydFBPSU5URVJfU0laRV9UWVBFICkgcHhOZXdUQ0ItPnB4U3RhY2sgJiAoIHBvcnRQT0lOVEVSX1NJWkVfVFlQRSApIHBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLICkgPT0gMFVMICkgKTsNCjYxMjogICAgICAgICAgICAgICAgIA0KNjEzOiAgICAgICAgICAgICAgICAgCQkJLyogSWYgd2Ugd2FudCB0byB1c2Ugc3RhY2sgY2hlY2tpbmcgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHVzZQ0KNjE0OiAgICAgICAgICAgICAgICAgCQkJYSBwb3NpdGl2ZSBzdGFjayBncm93dGggZGlyZWN0aW9uIHRoZW4gd2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZQ0KNjE1OiAgICAgICAgICAgICAgICAgCQkJb3RoZXIgZXh0cmVtZSBvZiB0aGUgc3RhY2sgc3BhY2UuICovDQo2MTY6ICAgICAgICAgICAgICAgICAJCQlweE5ld1RDQi0+cHhFbmRPZlN0YWNrID0gcHhOZXdUQ0ItPnB4U3RhY2sgKyAoIHVzU3RhY2tEZXB0aCAtIDEgKTsNCjYxNzogICAgICAgICAgICAgICAgIAkJfQ0KNjE4OiAgICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogcG9ydFNUQUNLX0dST1dUSCAqLw0KNjE5OiAgICAgICAgICAgICAgICAgDQo2MjA6ICAgICAgICAgICAgICAgICAJCS8qIFNldHVwIHRoZSBuZXdseSBhbGxvY2F0ZWQgVENCIHdpdGggdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRhc2suICovDQo2MjE6ICAgICAgICAgICAgICAgICAJCXBydkluaXRpYWxpc2VUQ0JWYXJpYWJsZXMoIHB4TmV3VENCLCBwY05hbWUsIHV4UHJpb3JpdHksIHhSZWdpb25zLCB1c1N0YWNrRGVwdGggKTsNCkJGRDAxNUUwICAwMDM4MzQ1RSAgIExIVSBWMCwgNTYoUzgpDQpCRkQwMTVFNCAgICAgIEM4NDQgICBTVyBWMCwgMTYoU1ApDQpCRkQwMTVFNiAgMDAxQ0ZDOUUgICBMVyBBMCwgMjgoUzgpDQpCRkQwMTVFQSAgMDAzNEZDQkUgICBMVyBBMSwgNTIoUzgpDQpCRkQwMTVFRSAgMDA0MEZDREUgICBMVyBBMiwgNjQoUzgpDQpCRkQwMTVGMiAgMDA0Q0ZDRkUgICBMVyBBMywgNzYoUzgpDQpCRkQwMTVGNiAgMUU3NDc3RTggICBKQUxTIHBydkluaXRpYWxpc2VUQ0JWYXJpYWJsZXMNCkJGRDAxNUY4ICAwQzAwMUU3NCAgIExCIFMzLCAzMDcyKFM0KQ0KQkZEMDE1RkEgICAgICAwQzAwICAgTk9QDQo2MjI6ICAgICAgICAgICAgICAgICANCjYyMzogICAgICAgICAgICAgICAgIAkJLyogSW5pdGlhbGl6ZSB0aGUgVENCIHN0YWNrIHRvIGxvb2sgYXMgaWYgdGhlIHRhc2sgd2FzIGFscmVhZHkgcnVubmluZywNCjYyNDogICAgICAgICAgICAgICAgIAkJYnV0IGhhZCBiZWVuIGludGVycnVwdGVkIGJ5IHRoZSBzY2hlZHVsZXIuICBUaGUgcmV0dXJuIGFkZHJlc3MgaXMgc2V0DQo2MjU6ICAgICAgICAgICAgICAgICAJCXRvIHRoZSBzdGFydCBvZiB0aGUgdGFzayBmdW5jdGlvbi4gT25jZSB0aGUgc3RhY2sgaGFzIGJlZW4gaW5pdGlhbGlzZWQNCjYyNjogICAgICAgICAgICAgICAgIAkJdGhlCXRvcCBvZiBzdGFjayB2YXJpYWJsZSBpcyB1cGRhdGVkLiAqLw0KNjI3OiAgICAgICAgICAgICAgICAgCQkjaWYoIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgPT0gMSApDQo2Mjg6ICAgICAgICAgICAgICAgICAJCXsNCjYyOTogICAgICAgICAgICAgICAgIAkJCXB4TmV3VENCLT5weFRvcE9mU3RhY2sgPSBweFBvcnRJbml0aWFsaXNlU3RhY2soIHB4VG9wT2ZTdGFjaywgcHhUYXNrQ29kZSwgcHZQYXJhbWV0ZXJzLCB4UnVuUHJpdmlsZWdlZCApOw0KNjMwOiAgICAgICAgICAgICAgICAgCQl9DQo2MzE6ICAgICAgICAgICAgICAgICAJCSNlbHNlIC8qIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgKi8NCjYzMjogICAgICAgICAgICAgICAgIAkJew0KNjMzOiAgICAgICAgICAgICAgICAgCQkJcHhOZXdUQ0ItPnB4VG9wT2ZTdGFjayA9IHB4UG9ydEluaXRpYWxpc2VTdGFjayggcHhUb3BPZlN0YWNrLCBweFRhc2tDb2RlLCBwdlBhcmFtZXRlcnMgKTsNCkJGRDAxNUZDICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDAxNjAwICAwMDMwRkNCRSAgIExXIEExLCA0OChTOCkNCkJGRDAxNjA0ICAwMDNDRkNERSAgIExXIEEyLCA2MChTOCkNCkJGRDAxNjA4ICAyQjE4NzdFOCAgIEpBTFMgcHhQb3J0SW5pdGlhbGlzZVN0YWNrDQpCRkQwMTYwQSAgICAgIDJCMTggICBMSFUgQTIsIDE2KFMxKQ0KQkZEMDE2MEMgICAgICAwQzAwICAgTk9QDQpCRkQwMTYwRSAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMA0KQkZEMDE2MTAgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDE2MTQgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo2MzQ6ICAgICAgICAgICAgICAgICAJCX0NCjYzNTogICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgKi8NCjYzNjogICAgICAgICAgICAgICAgIA0KNjM3OiAgICAgICAgICAgICAgICAgCQlpZiggKCB2b2lkICogKSBweENyZWF0ZWRUYXNrICE9IE5VTEwgKQ0KQkZEMDE2MTYgIDAwNDRGQzVFICAgTFcgVjAsIDY4KFM4KQ0KQkZEMDE2MUEgIDAwMDU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE2MjgNCjYzODogICAgICAgICAgICAgICAgIAkJew0KNjM5OiAgICAgICAgICAgICAgICAgCQkJLyogUGFzcyB0aGUgVENCIG91dCAtIGluIGFuIGFub255bW91cyB3YXkuICBUaGUgY2FsbGluZyBmdW5jdGlvbi8NCjY0MDogICAgICAgICAgICAgICAgIAkJCXRhc2sgY2FuIHVzZSB0aGlzIGFzIGEgaGFuZGxlIHRvIGRlbGV0ZSB0aGUgdGFzayBsYXRlciBpZg0KNjQxOiAgICAgICAgICAgICAgICAgCQkJcmVxdWlyZWQuKi8NCjY0MjogICAgICAgICAgICAgICAgIAkJCSpweENyZWF0ZWRUYXNrID0gKCBUYXNrSGFuZGxlX3QgKSBweE5ld1RDQjsNCkJGRDAxNjFFICAwMDQ0RkM1RSAgIExXIFYwLCA2OChTOCkNCkJGRDAxNjIyICAwMDFDRkM3RSAgIExXIFYxLCAyOChTOCkNCkJGRDAxNjI2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNjQzOiAgICAgICAgICAgICAgICAgCQl9DQo2NDQ6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjY0NTogICAgICAgICAgICAgICAgIAkJew0KNjQ2OiAgICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjQ3OiAgICAgICAgICAgICAgICAgCQl9DQo2NDg6ICAgICAgICAgICAgICAgICANCjY0OTogICAgICAgICAgICAgICAgIAkJLyogRW5zdXJlIGludGVycnVwdHMgZG9uJ3QgYWNjZXNzIHRoZSB0YXNrIGxpc3RzIHdoaWxlIHRoZXkgYXJlIGJlaW5nDQo2NTA6ICAgICAgICAgICAgICAgICAJCXVwZGF0ZWQuICovDQo2NTE6ICAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDE2MjggIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDAxNjJBICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDE2MkMgICAgICAwQzAwICAgTk9QDQo2NTI6ICAgICAgICAgICAgICAgICAJCXsNCjY1MzogICAgICAgICAgICAgICAgIAkJCXV4Q3VycmVudE51bWJlck9mVGFza3MrKzsNCkJGRDAxNjJFICA4MDM4RkM1QyAgIExXIFYwLCAtMzI3MTIoR1ApDQpCRkQwMTYzMiAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDENCkJGRDAxNjM0ICA4MDM4Rjg1QyAgIFNXIFYwLCAtMzI3MTIoR1ApDQo2NTQ6ICAgICAgICAgICAgICAgICAJCQlpZiggcHhDdXJyZW50VENCID09IE5VTEwgKQ0KQkZEMDE2MzggIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAxNjNDICAwMDBGNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxNjVFDQo2NTU6ICAgICAgICAgICAgICAgICAJCQl7DQo2NTY6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhlcmUgYXJlIG5vIG90aGVyIHRhc2tzLCBvciBhbGwgdGhlIG90aGVyIHRhc2tzIGFyZSBpbg0KNjU3OiAgICAgICAgICAgICAgICAgCQkJCXRoZSBzdXNwZW5kZWQgc3RhdGUgLSBtYWtlIHRoaXMgdGhlIGN1cnJlbnQgdGFzay4gKi8NCjY1ODogICAgICAgICAgICAgICAgIAkJCQlweEN1cnJlbnRUQ0IgPSAgcHhOZXdUQ0I7DQpCRkQwMTY0MCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMTY0NCAgODAzMEY4NUMgICBTVyBWMCwgLTMyNzIwKEdQKQ0KNjU5OiAgICAgICAgICAgICAgICAgDQo2NjA6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHV4Q3VycmVudE51bWJlck9mVGFza3MgPT0gKCBVQmFzZVR5cGVfdCApIDEgKQ0KQkZEMDE2NDggIDgwMzhGQzdDICAgTFcgVjEsIC0zMjcxMihHUCkNCkJGRDAxNjRDICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMTY0RSAgMDAxN0I0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxNjgwDQpCRkQwMTY1MCAgMEMwMDAwMTcgICBTTEwgWkVSTywgUzcsIDENCkJGRDAxNjUyICAgICAgMEMwMCAgIE5PUA0KNjYxOiAgICAgICAgICAgICAgICAgCQkJCXsNCjY2MjogICAgICAgICAgICAgICAgIAkJCQkJLyogVGhpcyBpcyB0aGUgZmlyc3QgdGFzayB0byBiZSBjcmVhdGVkIHNvIGRvIHRoZSBwcmVsaW1pbmFyeQ0KNjYzOiAgICAgICAgICAgICAgICAgCQkJCQlpbml0aWFsaXNhdGlvbiByZXF1aXJlZC4gIFdlIHdpbGwgbm90IHJlY292ZXIgaWYgdGhpcyBjYWxsDQo2NjQ6ICAgICAgICAgICAgICAgICAJCQkJCWZhaWxzLCBidXQgd2Ugd2lsbCByZXBvcnQgdGhlIGZhaWx1cmUuICovDQo2NjU6ICAgICAgICAgICAgICAgICAJCQkJCXBydkluaXRpYWxpc2VUYXNrTGlzdHMoKTsNCkJGRDAxNjU0ICAzMDk2NzdFOCAgIEpBTFMgcHJ2SW5pdGlhbGlzZVRhc2tMaXN0cw0KQkZEMDE2NTYgIDBDMDAzMDk2ICAgQURESVUgQTAsIFM2LCAzMDcyDQpCRkQwMTY1OCAgICAgIDBDMDAgICBOT1ANCkJGRDAxNjVBICAgICAgQ0MxMiAgIEIgMHhCRkQwMTY4MA0KQkZEMDE2NUMgICAgICAwQzAwICAgTk9QDQo2NjY6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNjY3OiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjY2ODogICAgICAgICAgICAgICAgIAkJCQl7DQo2Njk6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjY3MDogICAgICAgICAgICAgICAgIAkJCQl9DQo2NzE6ICAgICAgICAgICAgICAgICAJCQl9DQo2NzI6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo2NzM6ICAgICAgICAgICAgICAgICAJCQl7DQo2NzQ6ICAgICAgICAgICAgICAgICAJCQkJLyogSWYgdGhlIHNjaGVkdWxlciBpcyBub3QgYWxyZWFkeSBydW5uaW5nLCBtYWtlIHRoaXMgdGFzayB0aGUNCjY3NTogICAgICAgICAgICAgICAgIAkJCQljdXJyZW50IHRhc2sgaWYgaXQgaXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0byBiZSBjcmVhdGVkDQo2NzY6ICAgICAgICAgICAgICAgICAJCQkJc28gZmFyLiAqLw0KNjc3OiAgICAgICAgICAgICAgICAgCQkJCWlmKCB4U2NoZWR1bGVyUnVubmluZyA9PSBwZEZBTFNFICkNCkJGRDAxNjVFICA4MDQ0RkM1QyAgIExXIFYwLCAtMzI3MDAoR1ApDQpCRkQwMTY2MiAgMDAwRDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTY4MA0KNjc4OiAgICAgICAgICAgICAgICAgCQkJCXsNCjY3OTogICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSA8PSB1eFByaW9yaXR5ICkNCkJGRDAxNjY2ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMTY2QSAgICAgIDY5QUIgICBMVyBWMSwgNDQoVjApDQpCRkQwMTY2QyAgMDA0MEZDNUUgICBMVyBWMCwgNjQoUzgpDQpCRkQwMTY3MCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjENCkJGRDAxNjcyICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDE2NzQgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE2ODANCjY4MDogICAgICAgICAgICAgICAgIAkJCQkJew0KNjgxOiAgICAgICAgICAgICAgICAgCQkJCQkJcHhDdXJyZW50VENCID0gcHhOZXdUQ0I7DQpCRkQwMTY3OCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMTY3QyAgODAzMEY4NUMgICBTVyBWMCwgLTMyNzIwKEdQKQ0KNjgyOiAgICAgICAgICAgICAgICAgCQkJCQl9DQo2ODM6ICAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjY4NDogICAgICAgICAgICAgICAgIAkJCQkJew0KNjg1OiAgICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjg2OiAgICAgICAgICAgICAgICAgCQkJCQl9DQo2ODc6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNjg4OiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjY4OTogICAgICAgICAgICAgICAgIAkJCQl7DQo2OTA6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjY5MTogICAgICAgICAgICAgICAgIAkJCQl9DQo2OTI6ICAgICAgICAgICAgICAgICAJCQl9DQo2OTM6ICAgICAgICAgICAgICAgICANCjY5NDogICAgICAgICAgICAgICAgIAkJCXV4VGFza051bWJlcisrOw0KQkZEMDE2ODAgIDgwNTRGQzVDICAgTFcgVjAsIC0zMjY4NChHUCkNCkJGRDAxNjg0ICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQ0KQkZEMDE2ODYgIDgwNTRGODVDICAgU1cgVjAsIC0zMjY4NChHUCkNCjY5NTogICAgICAgICAgICAgICAgIA0KNjk2OiAgICAgICAgICAgICAgICAgCQkJI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KNjk3OiAgICAgICAgICAgICAgICAgCQkJew0KNjk4OiAgICAgICAgICAgICAgICAgCQkJCS8qIEFkZCBhIGNvdW50ZXIgaW50byB0aGUgVENCIGZvciB0cmFjaW5nIG9ubHkuICovDQo2OTk6ICAgICAgICAgICAgICAgICAJCQkJcHhOZXdUQ0ItPnV4VENCTnVtYmVyID0gdXhUYXNrTnVtYmVyOw0KNzAwOiAgICAgICAgICAgICAgICAgCQkJfQ0KNzAxOiAgICAgICAgICAgICAgICAgCQkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSAqLw0KNzAyOiAgICAgICAgICAgICAgICAgCQkJdHJhY2VUQVNLX0NSRUFURSggcHhOZXdUQ0IgKTsNCjcwMzogICAgICAgICAgICAgICAgIA0KNzA0OiAgICAgICAgICAgICAgICAgCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweE5ld1RDQiApOw0KQkZEMDE2OEEgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDE2OEUgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDE2OTAgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAxNjkyICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQ0KQkZEMDE2OTQgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkNCkJGRDAxNjk2ICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApDQpCRkQwMTY5QSAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQ0KQkZEMDE2OUMgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCkJGRDAxNkEwICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAxNkE0ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAxNkE2ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAxNkE4ICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAxNkFBICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQ0KQkZEMDE2QUMgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAxNkFFICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAxNkIwICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwMTZCNCAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjANCkJGRDAxNkI2ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAxNkJBICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDE2QkMgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDAxNkJFICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMTZDMCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwMTZDMiAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDAxNkM0ICAgICAgMEMwMCAgIE5PUA0KNzA1OiAgICAgICAgICAgICAgICAgDQo3MDY6ICAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRQQVNTOw0KQkZEMDE2QzYgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAxNkM4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjcwNzogICAgICAgICAgICAgICAgIAkJCXBvcnRTRVRVUF9UQ0IoIHB4TmV3VENCICk7DQo3MDg6ICAgICAgICAgICAgICAgICAJCX0NCjcwOTogICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAxNkNDICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDAxNkNFICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyRUQyDQpCRkQwMTZEMCAgICAgIDBDMDAgICBOT1ANCkJGRDAxNkQyICAgICAgQ0MwNCAgIEIgMHhCRkQwMTZEQw0KQkZEMDE2RDQgICAgICAwQzAwICAgTk9QDQo3MTA6ICAgICAgICAgICAgICAgICAJfQ0KNzExOiAgICAgICAgICAgICAgICAgCWVsc2UNCjcxMjogICAgICAgICAgICAgICAgIAl7DQo3MTM6ICAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSBlcnJDT1VMRF9OT1RfQUxMT0NBVEVfUkVRVUlSRURfTUVNT1JZOw0KQkZEMDE2RDYgICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwMTZEOCAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQo3MTQ6ICAgICAgICAgICAgICAgICAJCXRyYWNlVEFTS19DUkVBVEVfRkFJTEVEKCk7DQo3MTU6ICAgICAgICAgICAgICAgICAJfQ0KNzE2OiAgICAgICAgICAgICAgICAgDQo3MTc6ICAgICAgICAgICAgICAgICAJaWYoIHhSZXR1cm4gPT0gcGRQQVNTICkNCkJGRDAxNkRDICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDAxNkUwICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMTZFMiAgMDAxRUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxNzIyDQpCRkQwMTZFNCAgMEMwMDAwMUUgICBTTEwgWkVSTywgUzgsIDENCkJGRDAxNkU2ICAgICAgMEMwMCAgIE5PUA0KNzE4OiAgICAgICAgICAgICAgICAgCXsNCjcxOTogICAgICAgICAgICAgICAgIAkJaWYoIHhTY2hlZHVsZXJSdW5uaW5nICE9IHBkRkFMU0UgKQ0KQkZEMDE2RTggIDgwNDRGQzVDICAgTFcgVjAsIC0zMjcwMChHUCkNCkJGRDAxNkVDICAwMDE5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxNzIyDQo3MjA6ICAgICAgICAgICAgICAgICAJCXsNCjcyMTogICAgICAgICAgICAgICAgIAkJCS8qIElmIHRoZSBjcmVhdGVkIHRhc2sgaXMgb2YgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgY3VycmVudCB0YXNrDQo3MjI6ICAgICAgICAgICAgICAgICAJCQl0aGVuIGl0IHNob3VsZCBydW4gbm93LiAqLw0KNzIzOiAgICAgICAgICAgICAgICAgCQkJaWYoIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSA8IHV4UHJpb3JpdHkgKQ0KQkZEMDE2RjAgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAxNkY0ICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkNCkJGRDAxNkY2ICAwMDQwRkM1RSAgIExXIFYwLCA2NChTOCkNCkJGRDAxNkZBICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDE2RkMgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwMTZGRSAgMDAxMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTcyMg0KNzI0OiAgICAgICAgICAgICAgICAgCQkJew0KNzI1OiAgICAgICAgICAgICAgICAgCQkJCXRhc2tZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwMTcwMiAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwMTcwNCAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01DQpCRkQwMTcwNiAgICAgIDBDMDAgICBOT1ANCkJGRDAxNzA4ICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkNCkJGRDAxNzBDICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDAxNzEwICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDE3MTQgIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQ0KQkZEMDE3MTggIDAwMjRGQzlFICAgTFcgQTAsIDM2KFM4KQ0KQkZEMDE3MUMgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwMTcxRSAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMNCkJGRDAxNzIwICAgICAgMEMwMCAgIE5PUA0KNzI2OiAgICAgICAgICAgICAgICAgCQkJfQ0KNzI3OiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KNzI4OiAgICAgICAgICAgICAgICAgCQkJew0KNzI5OiAgICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjczMDogICAgICAgICAgICAgICAgIAkJCX0NCjczMTogICAgICAgICAgICAgICAgIAkJfQ0KNzMyOiAgICAgICAgICAgICAgICAgCQllbHNlDQo3MzM6ICAgICAgICAgICAgICAgICAJCXsNCjczNDogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjczNTogICAgICAgICAgICAgICAgIAkJfQ0KNzM2OiAgICAgICAgICAgICAgICAgCX0NCjczNzogICAgICAgICAgICAgICAgIA0KNzM4OiAgICAgICAgICAgICAgICAgCXJldHVybiB4UmV0dXJuOw0KQkZEMDE3MjIgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KNzM5OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDE3MjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAxNzI4ICAgICAgNEJFQiAgIExXIFJBLCA0NChTUCkNCkJGRDAxNzJBICAgICAgNEJDQSAgIExXIFM4LCA0MChTUCkNCkJGRDAxNzJDICAgICAgNEMxOSAgIEFERElVIFNQLCBTUCwgNDgNCkJGRDAxNzJFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAxNzMwICAgICAgMEMwMCAgIE5PUA0KNzQwOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo3NDE6ICAgICAgICAgICAgICAgICANCjc0MjogICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdlRhc2tEZWxldGUgPT0gMSApDQo3NDM6ICAgICAgICAgICAgICAgICANCjc0NDogICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrRGVsZXRlKCBUYXNrSGFuZGxlX3QgeFRhc2tUb0RlbGV0ZSApDQo3NDU6ICAgICAgICAgICAgICAgICAJew0KQkZEMDMzRjQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDAzM0Y2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDAzM0Y4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDAzM0ZBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwMzNGQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQo3NDY6ICAgICAgICAgICAgICAgICAJVENCX3QgKnB4VENCOw0KNzQ3OiAgICAgICAgICAgICAgICAgDQo3NDg6ICAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDM0MDAgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDAzNDAyICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDM0MDQgICAgICAwQzAwICAgTk9QDQo3NDk6ICAgICAgICAgICAgICAgICAJCXsNCjc1MDogICAgICAgICAgICAgICAgIAkJCS8qIElmIG51bGwgaXMgcGFzc2VkIGluIGhlcmUgdGhlbiBpdCBpcyB0aGUgY2FsbGluZyB0YXNrIHRoYXQgaXMNCjc1MTogICAgICAgICAgICAgICAgIAkJCWJlaW5nIGRlbGV0ZWQuICovDQo3NTI6ICAgICAgICAgICAgICAgICAJCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHhUYXNrVG9EZWxldGUgKTsNCkJGRDAzNDA2ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAzNDBBICAwMDA0NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzNDE2DQpCRkQwMzQwRSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDM0MTIgICAgICBDQzAzICAgQiAweEJGRDAzNDFBDQpCRkQwMzQxNCAgICAgIDBDMDAgICBOT1ANCkJGRDAzNDE2ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAzNDFBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjc1MzogICAgICAgICAgICAgICAgIA0KNzU0OiAgICAgICAgICAgICAgICAgCQkJLyogUmVtb3ZlIHRhc2sgZnJvbSB0aGUgcmVhZHkgbGlzdCBhbmQgcGxhY2UgaW4gdGhlCXRlcm1pbmF0aW9uIGxpc3QuDQo3NTU6ICAgICAgICAgICAgICAgICAJCQlUaGlzIHdpbGwgc3RvcCB0aGUgdGFzayBmcm9tIGJlIHNjaGVkdWxlZC4gIFRoZSBpZGxlIHRhc2sgd2lsbCBjaGVjaw0KNzU2OiAgICAgICAgICAgICAgICAgCQkJdGhlIHRlcm1pbmF0aW9uIGxpc3QgYW5kIGZyZWUgdXAgYW55IG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlDQo3NTc6ICAgICAgICAgICAgICAgICAJCQlzY2hlZHVsZXIgZm9yIHRoZSBUQ0IgYW5kIHN0YWNrLiAqLw0KNzU4OiAgICAgICAgICAgICAgICAgCQkJaWYoIHV4TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAzNDFFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzNDIyICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDM0MjQgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzNDI2ICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMzQyOCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMzQyQSAgICAgIDBDMDAgICBOT1ANCkJGRDAzNDJDICAwMDFBNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzNDY0DQo3NTk6ICAgICAgICAgICAgICAgICAJCQl7DQo3NjA6ICAgICAgICAgICAgICAgICAJCQkJdGFza1JFU0VUX1JFQURZX1BSSU9SSVRZKCBweFRDQi0+dXhQcmlvcml0eSApOw0KQkZEMDM0MzAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM0MzQgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDM0MzYgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDM0MzggICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDM0M0EgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwMzQzQyAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDM0M0UgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDM0NDAgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjANCkJGRDAzNDQ0ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDM0NDYgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMzQ0OCAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzQ2NA0KQkZEMDM0NEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM0NTAgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDM0NTIgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAzNDU0ICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQ0KQkZEMDM0NTYgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQNCkJGRDAzNDU4ICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMA0KQkZEMDM0NUEgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDAzNDVFICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDM0NjAgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCjc2MTogICAgICAgICAgICAgICAgIAkJCX0NCjc2MjogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjc2MzogICAgICAgICAgICAgICAgIAkJCXsNCjc2NDogICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo3NjU6ICAgICAgICAgICAgICAgICAJCQl9DQo3NjY6ICAgICAgICAgICAgICAgICANCjc2NzogICAgICAgICAgICAgICAgIAkJCS8qIElzIHRoZSB0YXNrIHdhaXRpbmcgb24gYW4gZXZlbnQgYWxzbz8gKi8NCjc2ODogICAgICAgICAgICAgICAgIAkJCWlmKCBsaXN0TElTVF9JVEVNX0NPTlRBSU5FUiggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKSAhPSBOVUxMICkNCkJGRDAzNDY0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzNDY4ICAgICAgNjkyQSAgIExXIFYwLCA0MChWMCkNCkJGRDAzNDZBICAwMDA3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzNDdDDQo3Njk6ICAgICAgICAgICAgICAgICAJCQl7DQo3NzA6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDM0NkUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM0NzAgIDZEMkMwMDEwICAgRVhUIFpFUk8sIFMwLCAyMCwgMTQNCkJGRDAzNDcyICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQNCkJGRDAzNDc0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwMzQ3NiAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQ0KQkZEMDM0NzggIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQ0KQkZEMDM0N0EgICAgICAwQzAwICAgTk9QDQo3NzE6ICAgICAgICAgICAgICAgICAJCQl9DQo3NzI6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo3NzM6ICAgICAgICAgICAgICAgICAJCQl7DQo3NzQ6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNzc1OiAgICAgICAgICAgICAgICAgCQkJfQ0KNzc2OiAgICAgICAgICAgICAgICAgDQo3Nzc6ICAgICAgICAgICAgICAgICAJCQl2TGlzdEluc2VydEVuZCggJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiwgJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDM0N0MgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM0ODAgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwMzQ4MiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDM0ODQgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQ0KQkZEMDM0ODYgIDgxMEMzMDgzICAgQURESVUgQTAsIFYxLCAtMzI1MDANCkJGRDAzNDhBICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMzQ4QyAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwMzQ4RSAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDAzNDkwICAgICAgMEMwMCAgIE5PUA0KNzc4OiAgICAgICAgICAgICAgICAgDQo3Nzk6ICAgICAgICAgICAgICAgICAJCQkvKiBJbmNyZW1lbnQgdGhlIHVjVGFza3NEZWxldGVkIHZhcmlhYmxlIHNvIHRoZSBpZGxlIHRhc2sga25vd3MNCjc4MDogICAgICAgICAgICAgICAgIAkJCXRoZXJlIGlzIGEgdGFzayB0aGF0IGhhcyBiZWVuIGRlbGV0ZWQgYW5kIHRoYXQgaXQgc2hvdWxkIHRoZXJlZm9yZQ0KNzgxOiAgICAgICAgICAgICAgICAgCQkJY2hlY2sgdGhlIHhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiBsaXN0LiAqLw0KNzgyOiAgICAgICAgICAgICAgICAgCQkJKyt1eFRhc2tzRGVsZXRlZDsNCkJGRDAzNDkyICA4MDM0RkM1QyAgIExXIFYwLCAtMzI3MTYoR1ApDQpCRkQwMzQ5NiAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDENCkJGRDAzNDk4ICA4MDM0Rjg1QyAgIFNXIFYwLCAtMzI3MTYoR1ApDQo3ODM6ICAgICAgICAgICAgICAgICANCjc4NDogICAgICAgICAgICAgICAgIAkJCS8qIEluY3JlbWVudCB0aGUgdXhUYXNrTnVtYmVyVmFyaWFibGUgYWxzbyBzbyBrZXJuZWwgYXdhcmUgZGVidWdnZXJzDQo3ODU6ICAgICAgICAgICAgICAgICAJCQljYW4gZGV0ZWN0IHRoYXQgdGhlIHRhc2sgbGlzdHMgbmVlZCByZS1nZW5lcmF0aW5nLiAqLw0KNzg2OiAgICAgICAgICAgICAgICAgCQkJdXhUYXNrTnVtYmVyKys7DQpCRkQwMzQ5QyAgODA1NEZDNUMgICBMVyBWMCwgLTMyNjg0KEdQKQ0KQkZEMDM0QTAgICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxDQpCRkQwMzRBMiAgODA1NEY4NUMgICBTVyBWMCwgLTMyNjg0KEdQKQ0KNzg3OiAgICAgICAgICAgICAgICAgDQo3ODg6ICAgICAgICAgICAgICAgICAJCQl0cmFjZVRBU0tfREVMRVRFKCBweFRDQiApOw0KNzg5OiAgICAgICAgICAgICAgICAgCQl9DQo3OTA6ICAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMzRBNiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMzRBOCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNENBQw0KQkZEMDM0QUEgICAgICAwQzAwICAgTk9QDQo3OTE6ICAgICAgICAgICAgICAgICANCjc5MjogICAgICAgICAgICAgICAgIAkJLyogRm9yY2UgYSByZXNjaGVkdWxlIGlmIGl0IGlzIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIHRoYXQgaGFzIGp1c3QNCjc5MzogICAgICAgICAgICAgICAgIAkJYmVlbiBkZWxldGVkLiAqLw0KNzk0OiAgICAgICAgICAgICAgICAgCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgIT0gcGRGQUxTRSApDQpCRkQwMzRBQyAgODA0NEZDNUMgICBMVyBWMCwgLTMyNzAwKEdQKQ0KQkZEMDM0QjAgIDAwMkY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDM1MTINCjc5NTogICAgICAgICAgICAgICAgIAkJew0KNzk2OiAgICAgICAgICAgICAgICAgCQkJaWYoIHB4VENCID09IHB4Q3VycmVudFRDQiApDQpCRkQwMzRCNCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDM0QjggIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDM0QkMgIDAwMjBCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMzUwMA0KQkZEMDM0QkUgIDBDMDAwMDIwICAgU0xMIEFULCBaRVJPLCAxDQpCRkQwMzRDMCAgICAgIDBDMDAgICBOT1ANCjc5NzogICAgICAgICAgICAgICAgIAkJCXsNCjc5ODogICAgICAgICAgICAgICAgIAkJCQljb25maWdBU1NFUlQoIHV4U2NoZWR1bGVyU3VzcGVuZGVkID09IDAgKTsNCkJGRDAzNEMyICA4MDVDRkM1QyAgIExXIFYwLCAtMzI2NzYoR1ApDQpCRkQwMzRDNiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzREQw0KQkZEMDM0Q0EgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAzNENDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAzNENFICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwMzREMCAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDAzNEQyICAwMzFFMzBBMCAgIEFERElVIEExLCBaRVJPLCA3OTgNCkJGRDAzNEQ2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDM0RDggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAzNERBICAgICAgMEMwMCAgIE5PUA0KNzk5OiAgICAgICAgICAgICAgICAgDQo4MDA6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHByZS1kZWxldGUgaG9vayBpcyBwcmltYXJpbHkgZm9yIHRoZSBXaW5kb3dzIHNpbXVsYXRvciwNCjgwMTogICAgICAgICAgICAgICAgIAkJCQlpbiB3aGljaCBXaW5kb3dzIHNwZWNpZmljIGNsZWFuIHVwIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCwNCjgwMjogICAgICAgICAgICAgICAgIAkJCQlhZnRlciB3aGljaCBpdCBpcyBub3QgcG9zc2libGUgdG8geWllbGQgYXdheSBmcm9tIHRoaXMgdGFzayAtDQo4MDM6ICAgICAgICAgICAgICAgICAJCQkJaGVuY2UgeFlpZWxkUGVuZGluZyBpcyB1c2VkIHRvIGxhdGNoIHRoYXQgYSBjb250ZXh0IHN3aXRjaCBpcw0KODA0OiAgICAgICAgICAgICAgICAgCQkJCXJlcXVpcmVkLiAqLw0KODA1OiAgICAgICAgICAgICAgICAgCQkJCXBvcnRQUkVfVEFTS19ERUxFVEVfSE9PSyggcHhUQ0IsICZ4WWllbGRQZW5kaW5nICk7DQo4MDY6ICAgICAgICAgICAgICAgICAJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCkJGRDAzNERDICA0RTU2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UNCkJGRDAzNERFICAgICAgNEU1NiAgIEFERElVIFMyLCBTMiwgLTUNCkJGRDAzNEUwICAgICAgMEMwMCAgIE5PUA0KQkZEMDM0RTIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KQkZEMDM0RTYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDM0RUEgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2DQpCRkQwMzRFRSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQpCRkQwMzRGMiAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwMzRGNiAgNEU2Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UNCkJGRDAzNEY4ICAgICAgNEU2NiAgIEFERElVIFMzLCBTMywgMw0KQkZEMDM0RkEgICAgICAwQzAwICAgTk9QDQpCRkQwMzRGQyAgICAgIENDMEEgICBCIDB4QkZEMDM1MTINCkJGRDAzNEZFICAgICAgMEMwMCAgIE5PUA0KODA3OiAgICAgICAgICAgICAgICAgCQkJfQ0KODA4OiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KODA5OiAgICAgICAgICAgICAgICAgCQkJew0KODEwOiAgICAgICAgICAgICAgICAgCQkJCS8qIFJlc2V0IHRoZSBuZXh0IGV4cGVjdGVkIHVuYmxvY2sgdGltZSBpbiBjYXNlIGl0IHJlZmVycmVkIHRvDQo4MTE6ICAgICAgICAgICAgICAgICAJCQkJdGhlIHRhc2sgdGhhdCBoYXMganVzdCBiZWVuIGRlbGV0ZWQuICovDQo4MTI6ICAgICAgICAgICAgICAgICAJCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMzUwMCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDM1MDIgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwMzUwNCAgICAgIDBDMDAgICBOT1ANCjgxMzogICAgICAgICAgICAgICAgIAkJCQl7DQo4MTQ6ICAgICAgICAgICAgICAgICAJCQkJCXBydlJlc2V0TmV4dFRhc2tVbmJsb2NrVGltZSgpOw0KQkZEMDM1MDYgIDQ3Q0E3N0U4ICAgSkFMUyBwcnZSZXNldE5leHRUYXNrVW5ibG9ja1RpbWUNCkJGRDAzNTBBICAgICAgMEMwMCAgIE5PUA0KODE1OiAgICAgICAgICAgICAgICAgCQkJCX0NCjgxNjogICAgICAgICAgICAgICAgIAkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDM1MEMgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDM1MEUgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDREMTINCkJGRDAzNTEwICAgICAgMEMwMCAgIE5PUA0KODE3OiAgICAgICAgICAgICAgICAgCQkJfQ0KODE4OiAgICAgICAgICAgICAgICAgCQl9DQo4MTk6ICAgICAgICAgICAgICAgICAJfQ0KQkZEMDM1MTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAzNTE0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDAzNTE2ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDAzNTE4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDAzNTFBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAzNTFDICAgICAgMEMwMCAgIE5PUA0KODIwOiAgICAgICAgICAgICAgICAgDQo4MjE6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV92VGFza0RlbGV0ZSAqLw0KODIyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo4MjM6ICAgICAgICAgICAgICAgICANCjgyNDogICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdlRhc2tEZWxheVVudGlsID09IDEgKQ0KODI1OiAgICAgICAgICAgICAgICAgDQo4MjY6ICAgICAgICAgICAgICAgICAJdm9pZCB2VGFza0RlbGF5VW50aWwoIFRpY2tUeXBlX3QgKiBjb25zdCBweFByZXZpb3VzV2FrZVRpbWUsIGNvbnN0IFRpY2tUeXBlX3QgeFRpbWVJbmNyZW1lbnQgKQ0KODI3OiAgICAgICAgICAgICAgICAgCXsNCkJGRDAwMDA4ICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4DQpCRkQwMDAwQSAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApDQpCRkQwMDAwQyAgICAgIENCQ0EgICBTVyBTOCwgNDAoU1ApDQpCRkQwMDAwRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDAwMTAgIDAwMzBGODlFICAgU1cgQTAsIDQ4KFM4KQ0KQkZEMDAwMTQgIDAwMzRGOEJFICAgU1cgQTEsIDUyKFM4KQ0KODI4OiAgICAgICAgICAgICAgICAgCVRpY2tUeXBlX3QgeFRpbWVUb1dha2U7DQo4Mjk6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4QWxyZWFkeVlpZWxkZWQsIHhTaG91bGREZWxheSA9IHBkRkFMU0U7DQpCRkQwMDAxOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCjgzMDogICAgICAgICAgICAgICAgIA0KODMxOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHB4UHJldmlvdXNXYWtlVGltZSApOw0KQkZEMDAwMUMgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDAwMjAgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDAwMzYNCkJGRDAwMDI0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMDAyNiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMDAyOCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDAwMkEgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMDAyQyAgMDMzRjMwQTAgICBBRERJVSBBMSwgWkVSTywgODMxDQpCRkQwMDAzMCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAwMDMyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMDAzNCAgICAgIDBDMDAgICBOT1ANCjgzMjogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCAoIHhUaW1lSW5jcmVtZW50ID4gMFUgKSApOw0KQkZEMDAwMzYgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQ0KQkZEMDAwM0EgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDAwNTANCkJGRDAwMDNFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMDA0MCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMDA0MiAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDAwNDQgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMDA0NiAgMDM0MDMwQTAgICBBRERJVSBBMSwgWkVSTywgODMyDQpCRkQwMDA0QSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAwMDRDICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMDA0RSAgICAgIDBDMDAgICBOT1ANCjgzMzogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAwICk7DQpCRkQwMDA1MCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQ0KQkZEMDAwNTQgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDAwNkENCkJGRDAwMDU4ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMDA1QSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMDA1QyAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDAwNUUgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMDA2MCAgMDM0MTMwQTAgICBBRERJVSBBMSwgWkVSTywgODMzDQpCRkQwMDA2NCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAwMDY2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMDA2OCAgICAgIDBDMDAgICBOT1ANCjgzNDogICAgICAgICAgICAgICAgIA0KODM1OiAgICAgICAgICAgICAgICAgCQl2VGFza1N1c3BlbmRBbGwoKTsNCkJGRDAwMDZBICA0RUY0NzdFOCAgIEpBTFMgdlRhc2tTdXNwZW5kQWxsDQpCRkQwMDA2QyAgICAgIDRFRjQgICBBRERJVSBTNywgUzcsIC02DQpCRkQwMDA2RSAgICAgIDBDMDAgICBOT1ANCjgzNjogICAgICAgICAgICAgICAgIAkJew0KODM3OiAgICAgICAgICAgICAgICAgCQkJLyogTWlub3Igb3B0aW1pc2F0aW9uLiAgVGhlIHRpY2sgY291bnQgY2Fubm90IGNoYW5nZSBpbiB0aGlzDQo4Mzg6ICAgICAgICAgICAgICAgICAJCQlibG9jay4gKi8NCjgzOTogICAgICAgICAgICAgICAgIAkJCWNvbnN0IFRpY2tUeXBlX3QgeENvbnN0VGlja0NvdW50ID0geFRpY2tDb3VudDsNCkJGRDAwMDcwICA4MDNDRkM1QyAgIExXIFYwLCAtMzI3MDgoR1ApDQpCRkQwMDA3NCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQo4NDA6ICAgICAgICAgICAgICAgICANCjg0MTogICAgICAgICAgICAgICAgIAkJCS8qIEdlbmVyYXRlIHRoZSB0aWNrIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgd2FudHMgdG8gd2FrZS4gKi8NCjg0MjogICAgICAgICAgICAgICAgIAkJCXhUaW1lVG9XYWtlID0gKnB4UHJldmlvdXNXYWtlVGltZSArIHhUaW1lSW5jcmVtZW50Ow0KQkZEMDAwNzggIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDAwN0MgICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwMDA3RSAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpDQpCRkQwMDA4MiAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDAwMDg0ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjg0MzogICAgICAgICAgICAgICAgIA0KODQ0OiAgICAgICAgICAgICAgICAgCQkJaWYoIHhDb25zdFRpY2tDb3VudCA8ICpweFByZXZpb3VzV2FrZVRpbWUgKQ0KQkZEMDAwODggIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDAwOEMgICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwMDA4RSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMDA5MiAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjENCkJGRDAwMDk0ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMA0KQkZEMDAwOTYgIDAwMTY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDAwQzYNCjg0NTogICAgICAgICAgICAgICAgIAkJCXsNCjg0NjogICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgdGljayBjb3VudCBoYXMgb3ZlcmZsb3dlZCBzaW5jZSB0aGlzIGZ1bmN0aW9uIHdhcw0KODQ3OiAgICAgICAgICAgICAgICAgCQkJCWxhc3RlZCBjYWxsZWQuICBJbiB0aGlzIGNhc2UgdGhlIG9ubHkgdGltZSB3ZSBzaG91bGQgZXZlcg0KODQ4OiAgICAgICAgICAgICAgICAgCQkJCWFjdHVhbGx5IGRlbGF5IGlzIGlmIHRoZSB3YWtlIHRpbWUgaGFzIGFsc28Jb3ZlcmZsb3dlZCwNCjg0OTogICAgICAgICAgICAgICAgIAkJCQlhbmQgdGhlIHdha2UgdGltZSBpcyBncmVhdGVyIHRoYW4gdGhlIHRpY2sgdGltZS4gIFdoZW4gdGhpcw0KODUwOiAgICAgICAgICAgICAgICAgCQkJCWlzIHRoZSBjYXNlIGl0IGlzIGFzIGlmIG5laXRoZXIgdGltZSBoYWQgb3ZlcmZsb3dlZC4gKi8NCjg1MTogICAgICAgICAgICAgICAgIAkJCQlpZiggKCB4VGltZVRvV2FrZSA8ICpweFByZXZpb3VzV2FrZVRpbWUgKSAmJiAoIHhUaW1lVG9XYWtlID4geENvbnN0VGlja0NvdW50ICkgKQ0KQkZEMDAwOUEgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDAwOUUgICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwMDBBMCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwMDBBNCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjENCkJGRDAwMEE2ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMA0KQkZEMDAwQTggIDAwMjE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDAwRUUNCkJGRDAwMEFDICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDAwMEIwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAwMEI0ICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQ0KQkZEMDAwQjYgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwMDBCOCAgMDAxOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMDBFRQ0KODUyOiAgICAgICAgICAgICAgICAgCQkJCXsNCjg1MzogICAgICAgICAgICAgICAgIAkJCQkJeFNob3VsZERlbGF5ID0gcGRUUlVFOw0KQkZEMDAwQkMgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAwMEJFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDAwMEMyICAgICAgQ0MxNSAgIEIgMHhCRkQwMDBFRQ0KQkZEMDAwQzQgICAgICAwQzAwICAgTk9QDQo4NTQ6ICAgICAgICAgICAgICAgICAJCQkJfQ0KODU1OiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjg1NjogICAgICAgICAgICAgICAgIAkJCQl7DQo4NTc6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjg1ODogICAgICAgICAgICAgICAgIAkJCQl9DQo4NTk6ICAgICAgICAgICAgICAgICAJCQl9DQo4NjA6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo4NjE6ICAgICAgICAgICAgICAgICAJCQl7DQo4NjI6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHRpY2sgdGltZSBoYXMgbm90IG92ZXJmbG93ZWQuICBJbiB0aGlzIGNhc2Ugd2Ugd2lsbA0KODYzOiAgICAgICAgICAgICAgICAgCQkJCWRlbGF5IGlmIGVpdGhlciB0aGUgd2FrZSB0aW1lIGhhcyBvdmVyZmxvd2VkLCBhbmQvb3IgdGhlDQo4NjQ6ICAgICAgICAgICAgICAgICAJCQkJdGljayB0aW1lIGlzIGxlc3MgdGhhbiB0aGUgd2FrZSB0aW1lLiAqLw0KODY1OiAgICAgICAgICAgICAgICAgCQkJCWlmKCAoIHhUaW1lVG9XYWtlIDwgKnB4UHJldmlvdXNXYWtlVGltZSApIHx8ICggeFRpbWVUb1dha2UgPiB4Q29uc3RUaWNrQ291bnQgKSApDQpCRkQwMDBDNiAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMDBDQSAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDAwMENDICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAwMEQwICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQ0KQkZEMDAwRDIgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwMDBENCAgMDAwODQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMDBFOA0KQkZEMDAwRDggIDAwMThGQzdFICAgTFcgVjEsIDI0KFM4KQ0KQkZEMDAwREMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDAwRTAgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxDQpCRkQwMDBFMiAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTANCkJGRDAwMEU0ICAwMDAzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAwMEVFDQo4NjY6ICAgICAgICAgICAgICAgICAJCQkJew0KODY3OiAgICAgICAgICAgICAgICAgCQkJCQl4U2hvdWxkRGVsYXkgPSBwZFRSVUU7DQpCRkQwMDBFOCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDAwRUEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KODY4OiAgICAgICAgICAgICAgICAgCQkJCX0NCjg2OTogICAgICAgICAgICAgICAgIAkJCQllbHNlDQo4NzA6ICAgICAgICAgICAgICAgICAJCQkJew0KODcxOiAgICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo4NzI6ICAgICAgICAgICAgICAgICAJCQkJfQ0KODczOiAgICAgICAgICAgICAgICAgCQkJfQ0KODc0OiAgICAgICAgICAgICAgICAgDQo4NzU6ICAgICAgICAgICAgICAgICAJCQkvKiBVcGRhdGUgdGhlIHdha2UgdGltZSByZWFkeSBmb3IgdGhlIG5leHQgY2FsbC4gKi8NCjg3NjogICAgICAgICAgICAgICAgIAkJCSpweFByZXZpb3VzV2FrZVRpbWUgPSB4VGltZVRvV2FrZTsNCkJGRDAwMEVFICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkNCkJGRDAwMEYyICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDAwMEY2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KODc3OiAgICAgICAgICAgICAgICAgDQo4Nzg6ICAgICAgICAgICAgICAgICAJCQlpZiggeFNob3VsZERlbGF5ICE9IHBkRkFMU0UgKQ0KQkZEMDAwRjggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDAwRkMgIDAwMUE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDAxMzQNCjg3OTogICAgICAgICAgICAgICAgIAkJCXsNCjg4MDogICAgICAgICAgICAgICAgIAkJCQl0cmFjZVRBU0tfREVMQVlfVU5USUwoKTsNCjg4MTogICAgICAgICAgICAgICAgIA0KODgyOiAgICAgICAgICAgICAgICAgCQkJCS8qIFJlbW92ZSB0aGUgdGFzayBmcm9tIHRoZSByZWFkeSBsaXN0IGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlDQo4ODM6ICAgICAgICAgICAgICAgICAJCQkJYmxvY2tlZCBsaXN0IGFzIHRoZSBzYW1lIGxpc3QgaXRlbSBpcyB1c2VkIGZvciBib3RoIGxpc3RzLiAqLw0KODg0OiAgICAgICAgICAgICAgICAgCQkJCWlmKCB1eExpc3RSZW1vdmUoICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDAxMDAgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAwMTA0ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDAxMDYgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAwMTA4ICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMDEwQSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMDEwQyAgICAgIDBDMDAgICBOT1ANCkJGRDAwMTBFICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAwMTJBDQo4ODU6ICAgICAgICAgICAgICAgICAJCQkJew0KODg2OiAgICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgY3VycmVudCB0YXNrIG11c3QgYmUgaW4gYSByZWFkeSBsaXN0LCBzbyB0aGVyZSBpcw0KODg3OiAgICAgICAgICAgICAgICAgCQkJCQlubyBuZWVkIHRvIGNoZWNrLCBhbmQgdGhlIHBvcnQgcmVzZXQgbWFjcm8gY2FuIGJlIGNhbGxlZA0KODg4OiAgICAgICAgICAgICAgICAgCQkJCQlkaXJlY3RseS4gKi8NCjg4OTogICAgICAgICAgICAgICAgIAkJCQkJcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHksIHV4VG9wUmVhZHlQcmlvcml0eSApOw0KQkZEMDAxMTIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAwMTE2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAwMTE4ICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwMDExQSAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjENCkJGRDAwMTFDICA0NDFBMTAxMCAgIEFEREkgWkVSTywgUzAsIDE3NDM0DQpCRkQwMDExRSAgICAgIDQ0MUEgICBOT1QxNiBWMSwgVjANCkJGRDAwMTIwICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApDQpCRkQwMDEyNCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDAwMTI2ICA4MDQwRjg1QyAgIFNXIFYwLCAtMzI3MDQoR1ApDQo4OTA6ICAgICAgICAgICAgICAgICAJCQkJfQ0KODkxOiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjg5MjogICAgICAgICAgICAgICAgIAkJCQl7DQo4OTM6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjg5NDogICAgICAgICAgICAgICAgIAkJCQl9DQo4OTU6ICAgICAgICAgICAgICAgICANCjg5NjogICAgICAgICAgICAgICAgIAkJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQpCRkQwMDEyQSAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpDQpCRkQwMDEyRSAgMzczNDc3RTggICBKQUxTIHBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdA0KQkZEMDAxMzAgIDBDMDAzNzM0ICAgTEhVIFQ5LCAzMDcyKFM0KQ0KQkZEMDAxMzIgICAgICAwQzAwICAgTk9QDQo4OTc6ICAgICAgICAgICAgICAgICAJCQl9DQo4OTg6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo4OTk6ICAgICAgICAgICAgICAgICAJCQl7DQo5MDA6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KOTAxOiAgICAgICAgICAgICAgICAgCQkJfQ0KOTAyOiAgICAgICAgICAgICAgICAgCQl9DQo5MDM6ICAgICAgICAgICAgICAgICAJCXhBbHJlYWR5WWllbGRlZCA9IHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwMDEzNCAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsDQpCRkQwMDEzNiAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpDQpCRkQwMDEzOCAgICAgIDBDMDAgICBOT1ANCkJGRDAwMTNBICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkNCjkwNDogICAgICAgICAgICAgICAgIA0KOTA1OiAgICAgICAgICAgICAgICAgCQkvKiBGb3JjZSBhIHJlc2NoZWR1bGUgaWYgeFRhc2tSZXN1bWVBbGwgaGFzIG5vdCBhbHJlYWR5IGRvbmUgc28sIHdlIG1heQ0KOTA2OiAgICAgICAgICAgICAgICAgCQloYXZlIHB1dCBvdXJzZWx2ZXMgdG8gc2xlZXAuICovDQo5MDc6ICAgICAgICAgICAgICAgICAJCWlmKCB4QWxyZWFkeVlpZWxkZWQgPT0gcGRGQUxTRSApDQpCRkQwMDEzRSAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMDE0MiAgMDAxMDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMDE2Ng0KOTA4OiAgICAgICAgICAgICAgICAgCQl7DQo5MDk6ICAgICAgICAgICAgICAgICAJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KQkZEMDAxNDYgIDRFNTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQ0KQkZEMDAxNDggICAgICA0RTU2ICAgQURESVUgUzIsIFMyLCAtNQ0KQkZEMDAxNEEgICAgICAwQzAwICAgTk9QDQpCRkQwMDE0QyAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQpCRkQwMDE1MCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMDE1NCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDAwMTU4ICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkNCkJGRDAwMTVDICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDAwMTYwICA0RTY2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQ0KQkZEMDAxNjIgICAgICA0RTY2ICAgQURESVUgUzMsIFMzLCAzDQpCRkQwMDE2NCAgICAgIDBDMDAgICBOT1ANCjkxMDogICAgICAgICAgICAgICAgIAkJfQ0KOTExOiAgICAgICAgICAgICAgICAgCQllbHNlDQo5MTI6ICAgICAgICAgICAgICAgICAJCXsNCjkxMzogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjkxNDogICAgICAgICAgICAgICAgIAkJfQ0KOTE1OiAgICAgICAgICAgICAgICAgCX0NCkJGRDAwMTY2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwMDE2OCAgICAgIDRCRUIgICBMVyBSQSwgNDQoU1ApDQpCRkQwMDE2QSAgICAgIDRCQ0EgICBMVyBTOCwgNDAoU1ApDQpCRkQwMDE2QyAgICAgIDRDMTkgICBBRERJVSBTUCwgU1AsIDQ4DQpCRkQwMDE2RSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwMDE3MCAgICAgIDBDMDAgICBOT1ANCjkxNjogICAgICAgICAgICAgICAgIA0KOTE3OiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tEZWxheVVudGlsICovDQo5MTg6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjkxOTogICAgICAgICAgICAgICAgIA0KOTIwOiAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV92VGFza0RlbGF5ID09IDEgKQ0KOTIxOiAgICAgICAgICAgICAgICAgDQo5MjI6ICAgICAgICAgICAgICAgICAJdm9pZCB2VGFza0RlbGF5KCBjb25zdCBUaWNrVHlwZV90IHhUaWNrc1RvRGVsYXkgKQ0KOTIzOiAgICAgICAgICAgICAgICAgCXsNCkJGRDA1QkEwICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwDQpCRkQwNUJBMiAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApDQpCRkQwNUJBNCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApDQpCRkQwNUJBNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDVCQTggIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQ0KOTI0OiAgICAgICAgICAgICAgICAgCVRpY2tUeXBlX3QgeFRpbWVUb1dha2U7DQo5MjU6ICAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4QWxyZWFkeVlpZWxkZWQgPSBwZEZBTFNFOw0KQkZEMDVCQUMgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQo5MjY6ICAgICAgICAgICAgICAgICANCjkyNzogICAgICAgICAgICAgICAgIA0KOTI4OiAgICAgICAgICAgICAgICAgCQkvKiBBIGRlbGF5IHRpbWUgb2YgemVybyBqdXN0IGZvcmNlcyBhIHJlc2NoZWR1bGUuICovDQo5Mjk6ICAgICAgICAgICAgICAgICAJCWlmKCB4VGlja3NUb0RlbGF5ID4gKCBUaWNrVHlwZV90ICkgMFUgKQ0KQkZEMDVCQjAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDVCQjQgIDAwMzY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDVDMjQNCjkzMDogICAgICAgICAgICAgICAgIAkJew0KOTMxOiAgICAgICAgICAgICAgICAgCQkJY29uZmlnQVNTRVJUKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAwICk7DQpCRkQwNUJCOCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQ0KQkZEMDVCQkMgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDVCRDINCkJGRDA1QkMwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNUJDMiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNUJDNCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDVCQzYgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwNUJDOCAgMDNBMzMwQTAgICBBRERJVSBBMSwgWkVSTywgOTMxDQpCRkQwNUJDQyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA1QkNFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNUJEMCAgICAgIDBDMDAgICBOT1ANCjkzMjogICAgICAgICAgICAgICAgIAkJCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDVCRDIgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwNCkJGRDA1QkQ0ICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYNCkJGRDA1QkQ2ICAgICAgMEMwMCAgIE5PUA0KOTMzOiAgICAgICAgICAgICAgICAgCQkJew0KOTM0OiAgICAgICAgICAgICAgICAgCQkJCXRyYWNlVEFTS19ERUxBWSgpOw0KOTM1OiAgICAgICAgICAgICAgICAgDQo5MzY6ICAgICAgICAgICAgICAgICAJCQkJLyogQSB0YXNrIHRoYXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBldmVudCBsaXN0IHdoaWxlIHRoZQ0KOTM3OiAgICAgICAgICAgICAgICAgCQkJCXNjaGVkdWxlciBpcyBzdXNwZW5kZWQgd2lsbCBub3QgZ2V0IHBsYWNlZCBpbiB0aGUgcmVhZHkNCjkzODogICAgICAgICAgICAgICAgIAkJCQlsaXN0IG9yIHJlbW92ZWQgZnJvbSB0aGUgYmxvY2tlZCBsaXN0IHVudGlsIHRoZSBzY2hlZHVsZXINCjkzOTogICAgICAgICAgICAgICAgIAkJCQlpcyByZXN1bWVkLg0KOTQwOiAgICAgICAgICAgICAgICAgDQo5NDE6ICAgICAgICAgICAgICAgICAJCQkJVGhpcyB0YXNrIGNhbm5vdCBiZSBpbiBhbiBldmVudCBsaXN0IGFzIGl0IGlzIHRoZSBjdXJyZW50bHkNCjk0MjogICAgICAgICAgICAgICAgIAkJCQlleGVjdXRpbmcgdGFzay4gKi8NCjk0MzogICAgICAgICAgICAgICAgIA0KOTQ0OiAgICAgICAgICAgICAgICAgCQkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSB0byB3YWtlIC0gdGhpcyBtYXkgb3ZlcmZsb3cgYnV0IHRoaXMgaXMNCjk0NTogICAgICAgICAgICAgICAgIAkJCQlub3QgYSBwcm9ibGVtLiAqLw0KOTQ2OiAgICAgICAgICAgICAgICAgCQkJCXhUaW1lVG9XYWtlID0geFRpY2tDb3VudCArIHhUaWNrc1RvRGVsYXk7DQpCRkQwNUJEOCAgODAzQ0ZDN0MgICBMVyBWMSwgLTMyNzA4KEdQKQ0KQkZEMDVCREMgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDVCRTAgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwNUJFMiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQo5NDc6ICAgICAgICAgICAgICAgICANCjk0ODogICAgICAgICAgICAgICAgIAkJCQkvKiBXZSBtdXN0IHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgcmVhZHkgbGlzdCBiZWZvcmUgYWRkaW5nDQo5NDk6ICAgICAgICAgICAgICAgICAJCQkJb3Vyc2VsdmVzIHRvIHRoZSBibG9ja2VkIGxpc3QgYXMgdGhlIHNhbWUgbGlzdCBpdGVtIGlzIHVzZWQgZm9yDQo5NTA6ICAgICAgICAgICAgICAgICAJCQkJYm90aCBsaXN0cy4gKi8NCjk1MTogICAgICAgICAgICAgICAgIAkJCQlpZiggdXhMaXN0UmVtb3ZlKCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDA1QkU2ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNUJFQSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA1QkVDICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNUJFRSAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQ0KQkZEMDVCRjAgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQ0KQkZEMDVCRjIgICAgICAwQzAwICAgTk9QDQpCRkQwNUJGNCAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUMxMA0KOTUyOiAgICAgICAgICAgICAgICAgCQkJCXsNCjk1MzogICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIGN1cnJlbnQgdGFzayBtdXN0IGJlIGluIGEgcmVhZHkgbGlzdCwgc28gdGhlcmUgaXMNCjk1NDogICAgICAgICAgICAgICAgIAkJCQkJbm8gbmVlZCB0byBjaGVjaywgYW5kIHRoZSBwb3J0IHJlc2V0IG1hY3JvIGNhbiBiZSBjYWxsZWQNCjk1NTogICAgICAgICAgICAgICAgIAkJCQkJZGlyZWN0bHkuICovDQo5NTY6ICAgICAgICAgICAgICAgICAJCQkJCXBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggcHhDdXJyZW50VENCLT51eFByaW9yaXR5LCB1eFRvcFJlYWR5UHJpb3JpdHkgKTsNCkJGRDA1QkY4ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNUJGQyAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwNUJGRSAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDVDMDAgIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxDQpCRkQwNUMwMiAgNDQxQTEwMTAgICBBRERJIFpFUk8sIFMwLCAxNzQzNA0KQkZEMDVDMDQgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwDQpCRkQwNUMwNiAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDVDMEEgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwNUMwQyAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQ0KOTU3OiAgICAgICAgICAgICAgICAgCQkJCX0NCjk1ODogICAgICAgICAgICAgICAgIAkJCQllbHNlDQo5NTk6ICAgICAgICAgICAgICAgICAJCQkJew0KOTYwOiAgICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo5NjE6ICAgICAgICAgICAgICAgICAJCQkJfQ0KOTYyOiAgICAgICAgICAgICAgICAgCQkJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCkJGRDA1QzEwICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDA1QzE0ICAzNzM0NzdFOCAgIEpBTFMgcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0DQpCRkQwNUMxNiAgMEMwMDM3MzQgICBMSFUgVDksIDMwNzIoUzQpDQpCRkQwNUMxOCAgICAgIDBDMDAgICBOT1ANCjk2MzogICAgICAgICAgICAgICAgIAkJCX0NCjk2NDogICAgICAgICAgICAgICAgIAkJCXhBbHJlYWR5WWllbGRlZCA9IHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwNUMxQSAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsDQpCRkQwNUMxQyAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpDQpCRkQwNUMxRSAgICAgIDBDMDAgICBOT1ANCkJGRDA1QzIwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjk2NTogICAgICAgICAgICAgICAgIAkJfQ0KOTY2OiAgICAgICAgICAgICAgICAgCQllbHNlDQo5Njc6ICAgICAgICAgICAgICAgICAJCXsNCjk2ODogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjk2OTogICAgICAgICAgICAgICAgIAkJfQ0KOTcwOiAgICAgICAgICAgICAgICAgDQo5NzE6ICAgICAgICAgICAgICAgICAJCS8qIEZvcmNlIGEgcmVzY2hlZHVsZSBpZiB4VGFza1Jlc3VtZUFsbCBoYXMgbm90IGFscmVhZHkgZG9uZSBzbywgd2UgbWF5DQo5NzI6ICAgICAgICAgICAgICAgICAJCWhhdmUgcHV0IG91cnNlbHZlcyB0byBzbGVlcC4gKi8NCjk3MzogICAgICAgICAgICAgICAgIAkJaWYoIHhBbHJlYWR5WWllbGRlZCA9PSBwZEZBTFNFICkNCkJGRDA1QzI0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1QzI4ICAwMDEwNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1QzRDDQo5NzQ6ICAgICAgICAgICAgICAgICAJCXsNCjk3NTogICAgICAgICAgICAgICAgIAkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQpCRkQwNUMyQyAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwNUMyRSAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01DQpCRkQwNUMzMCAgICAgIDBDMDAgICBOT1ANCkJGRDA1QzMyICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCkJGRDA1QzM2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA1QzNBICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDVDM0UgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KQkZEMDVDNDIgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDVDNDYgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwNUM0OCAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMNCkJGRDA1QzRBICAgICAgMEMwMCAgIE5PUA0KOTc2OiAgICAgICAgICAgICAgICAgCQl9DQo5Nzc6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjk3ODogICAgICAgICAgICAgICAgIAkJew0KOTc5OiAgICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KOTgwOiAgICAgICAgICAgICAgICAgCQl9DQo5ODE6ICAgICAgICAgICAgICAgICAJfQ0KQkZEMDVDNEMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA1QzRFICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkNCkJGRDA1QzUwICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkNCkJGRDA1QzUyICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDANCkJGRDA1QzU0ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA1QzU2ICAgICAgMEMwMCAgIE5PUA0KOTgyOiAgICAgICAgICAgICAgICAgDQo5ODM6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV92VGFza0RlbGF5ICovDQo5ODQ6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjk4NTogICAgICAgICAgICAgICAgIA0KOTg2OiAgICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV9lVGFza0dldFN0YXRlID09IDEgKQ0KOTg3OiAgICAgICAgICAgICAgICAgDQo5ODg6ICAgICAgICAgICAgICAgICAJZVRhc2tTdGF0ZSBlVGFza0dldFN0YXRlKCBUYXNrSGFuZGxlX3QgeFRhc2sgKQ0KOTg5OiAgICAgICAgICAgICAgICAgCXsNCkJGRDA0NDk0ICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwDQpCRkQwNDQ5NiAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApDQpCRkQwNDQ5OCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApDQpCRkQwNDQ5QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDQ0OUMgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQ0KOTkwOiAgICAgICAgICAgICAgICAgCWVUYXNrU3RhdGUgZVJldHVybjsNCjk5MTogICAgICAgICAgICAgICAgIAlMaXN0X3QgKnB4U3RhdGVMaXN0Ow0KOTkyOiAgICAgICAgICAgICAgICAgCWNvbnN0IFRDQl90ICogY29uc3QgcHhUQ0IgPSAoIFRDQl90ICogKSB4VGFzazsNCkJGRDA0NEEwICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDA0NEE0ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjk5MzogICAgICAgICAgICAgICAgIA0KOTk0OiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHB4VENCICk7DQpCRkQwNDRBOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDRBQyAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDRDMg0KQkZEMDQ0QjAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0NEIyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA0NEI0ICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwNDRCNiAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDA0NEI4ICAwM0UyMzBBMCAgIEFERElVIEExLCBaRVJPLCA5OTQNCkJGRDA0NEJDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDQ0QkUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0NEMwICAgICAgMEMwMCAgIE5PUA0KOTk1OiAgICAgICAgICAgICAgICAgDQo5OTY6ICAgICAgICAgICAgICAgICAJCWlmKCBweFRDQiA9PSBweEN1cnJlbnRUQ0IgKQ0KQkZEMDQ0QzIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA0NEM2ICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkNCkJGRDA0NENBICAwMDA1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDQ0RDgNCkJGRDA0NENDICAwQzAwMDAwNSAgIFNMTCBaRVJPLCBBMSwgMQ0KQkZEMDQ0Q0UgICAgICAwQzAwICAgTk9QDQo5OTc6ICAgICAgICAgICAgICAgICAJCXsNCjk5ODogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0YXNrIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpcyBxdWVyeWluZyBpdHMgb3duIHN0YXRlLiAqLw0KOTk5OiAgICAgICAgICAgICAgICAgCQkJZVJldHVybiA9IGVSdW5uaW5nOw0KQkZEMDQ0RDAgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQpCRkQwNDRENCAgICAgIENDNDggICBCIDB4QkZEMDQ1NjYNCkJGRDA0NEQ2ICAgICAgMEMwMCAgIE5PUA0KMTAwMDogICAgICAgICAgICAgICAgCQl9DQoxMDAxOiAgICAgICAgICAgICAgICAJCWVsc2UNCjEwMDI6ICAgICAgICAgICAgICAgIAkJew0KMTAwMzogICAgICAgICAgICAgICAgCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwNDREOCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDQ0REEgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwNDREQyAgICAgIDBDMDAgICBOT1ANCjEwMDQ6ICAgICAgICAgICAgICAgIAkJCXsNCjEwMDU6ICAgICAgICAgICAgICAgIAkJCQlweFN0YXRlTGlzdCA9ICggTGlzdF90ICogKSBsaXN0TElTVF9JVEVNX0NPTlRBSU5FUiggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDQ0REUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQ0RTIgICAgICA2OTI1ICAgTFcgVjAsIDIwKFYwKQ0KQkZEMDQ0RTQgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMTAwNjogICAgICAgICAgICAgICAgCQkJfQ0KMTAwNzogICAgICAgICAgICAgICAgCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDA0NEU4ICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDA0NEVBICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1Q0VFDQpCRkQwNDRFQyAgICAgIDBDMDAgICBOT1ANCjEwMDg6ICAgICAgICAgICAgICAgIA0KMTAwOTogICAgICAgICAgICAgICAgCQkJaWYoICggcHhTdGF0ZUxpc3QgPT0gcHhEZWxheWVkVGFza0xpc3QgKSB8fCAoIHB4U3RhdGVMaXN0ID09IHB4T3ZlcmZsb3dEZWxheWVkVGFza0xpc3QgKSApDQpCRkQwNDRFRSAgODA3NEZDNUMgICBMVyBWMCwgLTMyNjUyKEdQKQ0KQkZEMDQ0RjIgIDAwMThGQzdFICAgTFcgVjEsIDI0KFM4KQ0KQkZEMDQ0RjYgIDAwMDg5NDQzICAgQkVRIFYxLCBWMCwgMHhCRkQwNDUwQQ0KQkZEMDQ0RjggIDBDMDAwMDA4ICAgU0xMIFpFUk8sIFQwLCAxDQpCRkQwNDRGQSAgICAgIDBDMDAgICBOT1ANCkJGRDA0NEZDICA4MDc4RkM1QyAgIExXIFYwLCAtMzI2NDgoR1ApDQpCRkQwNDUwMCAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpDQpCRkQwNDUwNCAgMDAwNkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA0NTE0DQpCRkQwNDUwNiAgMEMwMDAwMDYgICBTTEwgWkVSTywgQTIsIDENCkJGRDA0NTA4ICAgICAgMEMwMCAgIE5PUA0KMTAxMDogICAgICAgICAgICAgICAgCQkJew0KMTAxMTogICAgICAgICAgICAgICAgCQkJCS8qIFRoZSB0YXNrIGJlaW5nIHF1ZXJpZWQgaXMgcmVmZXJlbmNlZCBmcm9tIG9uZSBvZiB0aGUgQmxvY2tlZA0KMTAxMjogICAgICAgICAgICAgICAgCQkJCWxpc3RzLiAqLw0KMTAxMzogICAgICAgICAgICAgICAgCQkJCWVSZXR1cm4gPSBlQmxvY2tlZDsNCkJGRDA0NTBBICAgICAgRUQwMiAgIExJIFYwLCAyDQpCRkQwNDUwQyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwNDUxMCAgICAgIENDMkEgICBCIDB4QkZEMDQ1NjYNCkJGRDA0NTEyICAgICAgMEMwMCAgIE5PUA0KMTAxNDogICAgICAgICAgICAgICAgCQkJfQ0KMTAxNTogICAgICAgICAgICAgICAgDQoxMDE2OiAgICAgICAgICAgICAgICAJCQkjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjEwMTc6ICAgICAgICAgICAgICAgIAkJCQllbHNlIGlmKCBweFN0YXRlTGlzdCA9PSAmeFN1c3BlbmRlZFRhc2tMaXN0ICkNCkJGRDA0NTE0ICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDA0NTE4ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwNDUxQSAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwNDUxQyAgODBFNDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjU0MA0KQkZEMDQ1MjAgIDAwMTBCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNDU0NA0KQkZEMDQ1MjIgIDBDMDAwMDEwICAgU0xMIFpFUk8sIFMwLCAxDQpCRkQwNDUyNCAgICAgIDBDMDAgICBOT1ANCjEwMTg6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMDE5OiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSB0YXNrIGJlaW5nIHF1ZXJpZWQgaXMgcmVmZXJlbmNlZCBmcm9tIHRoZSBzdXNwZW5kZWQNCjEwMjA6ICAgICAgICAgICAgICAgIAkJCQkJbGlzdC4gIElzIGl0IGdlbnVpbmVseSBzdXNwZW5kZWQgb3IgaXMgaXQgYmxvY2sNCjEwMjE6ICAgICAgICAgICAgICAgIAkJCQkJaW5kZWZpbml0ZWx5PyAqLw0KMTAyMjogICAgICAgICAgICAgICAgCQkJCQlpZiggbGlzdExJU1RfSVRFTV9DT05UQUlORVIoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICkgPT0gTlVMTCApDQpCRkQwNDUyNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDUyQSAgICAgIDY5MkEgICBMVyBWMCwgNDAoVjApDQpCRkQwNDUyQyAgMDAwNTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDUzQQ0KMTAyMzogICAgICAgICAgICAgICAgCQkJCQl7DQoxMDI0OiAgICAgICAgICAgICAgICAJCQkJCQllUmV0dXJuID0gZVN1c3BlbmRlZDsNCkJGRDA0NTMwICAgICAgRUQwMyAgIExJIFYwLCAzDQpCRkQwNDUzMiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwNDUzNiAgICAgIENDMTcgICBCIDB4QkZEMDQ1NjYNCkJGRDA0NTM4ICAgICAgMEMwMCAgIE5PUA0KMTAyNTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMDI2OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjEwMjc6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTAyODogICAgICAgICAgICAgICAgCQkJCQkJZVJldHVybiA9IGVCbG9ja2VkOw0KQkZEMDQ1M0EgICAgICBFRDAyICAgTEkgVjAsIDINCkJGRDA0NTNDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA0NTQwICAgICAgQ0MxMiAgIEIgMHhCRkQwNDU2Ng0KQkZEMDQ1NDIgICAgICAwQzAwICAgTk9QDQoxMDI5OiAgICAgICAgICAgICAgICAJCQkJCX0NCjEwMzA6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMDMxOiAgICAgICAgICAgICAgICAJCQkjZW5kaWYNCjEwMzI6ICAgICAgICAgICAgICAgIA0KMTAzMzogICAgICAgICAgICAgICAgCQkJI2lmICggSU5DTFVERV92VGFza0RlbGV0ZSA9PSAxICkNCjEwMzQ6ICAgICAgICAgICAgICAgIAkJCQllbHNlIGlmKCBweFN0YXRlTGlzdCA9PSAmeFRhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uICkNCkJGRDA0NTQ0ICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDA0NTQ4ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwNDU0QSAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwNDU0QyAgODEwQzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjUwMA0KQkZEMDQ1NTAgIDAwMDZCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNDU2MA0KQkZEMDQ1NTIgIDBDMDAwMDA2ICAgU0xMIFpFUk8sIEEyLCAxDQpCRkQwNDU1NCAgICAgIDBDMDAgICBOT1ANCjEwMzU6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMDM2OiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSB0YXNrIGJlaW5nIHF1ZXJpZWQgaXMgcmVmZXJlbmNlZCBmcm9tIHRoZSBkZWxldGVkDQoxMDM3OiAgICAgICAgICAgICAgICAJCQkJCXRhc2tzIGxpc3QuICovDQoxMDM4OiAgICAgICAgICAgICAgICAJCQkJCWVSZXR1cm4gPSBlRGVsZXRlZDsNCkJGRDA0NTU2ICAgICAgRUQwNCAgIExJIFYwLCA0DQpCRkQwNDU1OCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwNDU1QyAgICAgIENDMDQgICBCIDB4QkZEMDQ1NjYNCkJGRDA0NTVFICAgICAgMEMwMCAgIE5PUA0KMTAzOTogICAgICAgICAgICAgICAgCQkJCX0NCjEwNDA6ICAgICAgICAgICAgICAgIAkJCSNlbmRpZg0KMTA0MTogICAgICAgICAgICAgICAgDQoxMDQyOiAgICAgICAgICAgICAgICAJCQllbHNlIC8qbGludCAhZTUyNSBOZWdhdGl2ZSBpbmRlbnRhdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHVzZSBvZiBwcmUtcHJvY2Vzc29yIGNsZWFyZXIuICovDQoxMDQzOiAgICAgICAgICAgICAgICAJCQl7DQoxMDQ0OiAgICAgICAgICAgICAgICAJCQkJLyogSWYgdGhlIHRhc2sgaXMgbm90IGluIGFueSBvdGhlciBzdGF0ZSwgaXQgbXVzdCBiZSBpbiB0aGUNCjEwNDU6ICAgICAgICAgICAgICAgIAkJCQlSZWFkeSAoaW5jbHVkaW5nIHBlbmRpbmcgcmVhZHkpIHN0YXRlLiAqLw0KMTA0NjogICAgICAgICAgICAgICAgCQkJCWVSZXR1cm4gPSBlUmVhZHk7DQpCRkQwNDU2MCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDQ1NjIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTA0NzogICAgICAgICAgICAgICAgCQkJfQ0KMTA0ODogICAgICAgICAgICAgICAgCQl9DQoxMDQ5OiAgICAgICAgICAgICAgICANCjEwNTA6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIGVSZXR1cm47DQpCRkQwNDU2NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoxMDUxOiAgICAgICAgICAgICAgICAJfSAvKmxpbnQgIWU4MTggeFRhc2sgY2Fubm90IGJlIGEgcG9pbnRlciB0byBjb25zdCBiZWNhdXNlIGl0IGlzIGEgdHlwZWRlZi4gKi8NCkJGRDA0NTZBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNDU2QyAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwNDU2RSAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwNDU3MCAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwNDU3MiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNDU3NCAgICAgIDBDMDAgICBOT1ANCjEwNTI6ICAgICAgICAgICAgICAgIA0KMTA1MzogICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfZVRhc2tHZXRTdGF0ZSAqLw0KMTA1NDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMDU1OiAgICAgICAgICAgICAgICANCjEwNTY6ICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfdXhUYXNrUHJpb3JpdHlHZXQgPT0gMSApDQoxMDU3OiAgICAgICAgICAgICAgICANCjEwNTg6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFRhc2tQcmlvcml0eUdldCggVGFza0hhbmRsZV90IHhUYXNrICkNCjEwNTk6ICAgICAgICAgICAgICAgIAl7DQpCRkQwOEI3OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDhCN0EgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDhCN0MgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDhCN0UgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4QjgwICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCjEwNjA6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqcHhUQ0I7DQoxMDYxOiAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhSZXR1cm47DQoxMDYyOiAgICAgICAgICAgICAgICANCjEwNjM6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwOEI4NCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDhCODYgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwOEI4OCAgICAgIDBDMDAgICBOT1ANCjEwNjQ6ICAgICAgICAgICAgICAgIAkJew0KMTA2NTogICAgICAgICAgICAgICAgCQkJLyogSWYgbnVsbCBpcyBwYXNzZWQgaW4gaGVyZSB0aGVuIHdlIGFyZSBjaGFuZ2luZyB0aGUNCjEwNjY6ICAgICAgICAgICAgICAgIAkJCXByaW9yaXR5IG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLiAqLw0KMTA2NzogICAgICAgICAgICAgICAgCQkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCB4VGFzayApOw0KQkZEMDhCOEEgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDhCOEUgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDhCOUENCkJGRDA4QjkyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwOEI5NiAgICAgIENDMDMgICBCIDB4QkZEMDhCOUUNCkJGRDA4Qjk4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDhCOUEgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDhCOUUgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTA2ODogICAgICAgICAgICAgICAgCQkJdXhSZXR1cm4gPSBweFRDQi0+dXhQcmlvcml0eTsNCkJGRDA4QkEyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA4QkE2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDA4QkE4ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjEwNjk6ICAgICAgICAgICAgICAgIAkJfQ0KMTA3MDogICAgICAgICAgICAgICAgCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDhCQUMgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDhCQUUgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMEEzQjINCkJGRDA4QkIwICAgICAgMEMwMCAgIE5PUA0KMTA3MTogICAgICAgICAgICAgICAgDQoxMDcyOiAgICAgICAgICAgICAgICAJCXJldHVybiB1eFJldHVybjsNCkJGRDA4QkIyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCjEwNzM6ICAgICAgICAgICAgICAgIAl9DQpCRkQwOEJCNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDhCQjggICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDhCQkEgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDhCQkMgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDhCQkUgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDhCQzAgICAgICAwQzAwICAgTk9QDQoxMDc0OiAgICAgICAgICAgICAgICANCjEwNzU6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBJTkNMVURFX3V4VGFza1ByaW9yaXR5R2V0ICovDQoxMDc2OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEwNzc6ICAgICAgICAgICAgICAgIA0KMTA3ODogICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV91eFRhc2tQcmlvcml0eUdldCA9PSAxICkNCjEwNzk6ICAgICAgICAgICAgICAgIA0KMTA4MDogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4VGFza1ByaW9yaXR5R2V0RnJvbUlTUiggVGFza0hhbmRsZV90IHhUYXNrICkNCjEwODE6ICAgICAgICAgICAgICAgIAl7DQpCRkQwODcwOCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MA0KQkZEMDg3MEEgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQ0KQkZEMDg3MEMgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQ0KQkZEMDg3MEUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4NzEwICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkNCjEwODI6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqcHhUQ0I7DQoxMDgzOiAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhSZXR1cm4sIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0ZTsNCjEwODQ6ICAgICAgICAgICAgICAgIA0KMTA4NTogICAgICAgICAgICAgICAgCQkvKiBSVE9TIHBvcnRzIHRoYXQgc3VwcG9ydCBpbnRlcnJ1cHQgbmVzdGluZyBoYXZlIHRoZSBjb25jZXB0IG9mIGENCjEwODY6ICAgICAgICAgICAgICAgIAkJbWF4aW11bQlzeXN0ZW0gY2FsbCAob3IgbWF4aW11bSBBUEkgY2FsbCkgaW50ZXJydXB0IHByaW9yaXR5Lg0KMTA4NzogICAgICAgICAgICAgICAgCQlJbnRlcnJ1cHRzIHRoYXQgYXJlCWFib3ZlIHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5IGFyZSBrZWVwDQoxMDg4OiAgICAgICAgICAgICAgICAJCXBlcm1hbmVudGx5IGVuYWJsZWQsIGV2ZW4gd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLA0KMTA4OTogICAgICAgICAgICAgICAgCQlidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMuICBJZiBjb25maWdBU1NFUlQoKQ0KMTA5MDogICAgICAgICAgICAgICAgCQlpcyBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdGhlbg0KMTA5MTogICAgICAgICAgICAgICAgCQlwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2lsbCByZXN1bHQgaW4gYW4gYXNzZXJ0aW9uDQoxMDkyOiAgICAgICAgICAgICAgICAJCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzDQoxMDkzOiAgICAgICAgICAgICAgICAJCWJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZSB0aGUgY29uZmlndXJlZCBtYXhpbXVtIHN5c3RlbSBjYWxsDQoxMDk0OiAgICAgICAgICAgICAgICAJCXByaW9yaXR5LiAgT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkDQoxMDk1OiAgICAgICAgICAgICAgICAJCWZyb20gaW50ZXJydXB0cwl0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIChsb2dpY2FsbHkpDQoxMDk2OiAgICAgICAgICAgICAgICAJCWJlbG93IHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIGludGVycnVwdCBwcmlvcml0eS4gIEZyZWVSVE9TIG1haW50YWlucyBhDQoxMDk3OiAgICAgICAgICAgICAgICAJCXNlcGFyYXRlIGludGVycnVwdCBzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQoxMDk4OiAgICAgICAgICAgICAgICAJCXNpbXBsZSBhcyBwb3NzaWJsZS4gIE1vcmUgaW5mb3JtYXRpb24gKGFsYmVpdCBDb3J0ZXgtTSBzcGVjaWZpYykgaXMNCjEwOTk6ICAgICAgICAgICAgICAgIAkJcHJvdmlkZWQgb24gdGhlIGZvbGxvd2luZyBsaW5rOg0KMTEwMDogICAgICAgICAgICAgICAgCQlodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQoxMTAxOiAgICAgICAgICAgICAgICAJCXBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKTsNCjExMDI6ICAgICAgICAgICAgICAgIA0KMTEwMzogICAgICAgICAgICAgICAgCQl1eFNhdmVkSW50ZXJydXB0U3RhdGUgPSBwb3J0U0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQpCRkQwODcxNCAgNDc1RTc3RTggICBKQUxTIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSDQpCRkQwODcxOCAgICAgIDBDMDAgICBOT1ANCkJGRDA4NzFBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjExMDQ6ICAgICAgICAgICAgICAgIAkJew0KMTEwNTogICAgICAgICAgICAgICAgCQkJLyogSWYgbnVsbCBpcyBwYXNzZWQgaW4gaGVyZSB0aGVuIGl0IGlzIHRoZSBwcmlvcml0eSBvZiB0aGUgY2FsbGluZw0KMTEwNjogICAgICAgICAgICAgICAgCQkJdGFzayB0aGF0IGlzIGJlaW5nIHF1ZXJpZWQuICovDQoxMTA3OiAgICAgICAgICAgICAgICAJCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHhUYXNrICk7DQpCRkQwODcxRSAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwODcyMiAgMDAwNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwODcyRQ0KQkZEMDg3MjYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA4NzJBICAgICAgQ0MwMyAgIEIgMHhCRkQwODczMg0KQkZEMDg3MkMgICAgICAwQzAwICAgTk9QDQpCRkQwODcyRSAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwODczMiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoxMTA4OiAgICAgICAgICAgICAgICAJCQl1eFJldHVybiA9IHB4VENCLT51eFByaW9yaXR5Ow0KQkZEMDg3MzYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDg3M0EgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDg3M0MgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMTEwOTogICAgICAgICAgICAgICAgCQl9DQoxMTEwOiAgICAgICAgICAgICAgICAJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXRlICk7DQpCRkQwODc0MCAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpDQpCRkQwODc0NCAgNEQ1RTc3RTggICBKQUxTIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUg0KQkZEMDg3NDYgICAgICA0RDVFICAgQURESVUgVDIsIFQyLCAtMQ0KQkZEMDg3NDggICAgICAwQzAwICAgTk9QDQoxMTExOiAgICAgICAgICAgICAgICANCjExMTI6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDg3NEEgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KMTExMzogICAgICAgICAgICAgICAgCX0NCkJGRDA4NzRFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwODc1MCAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwODc1MiAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwODc1NCAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwODc1NiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwODc1OCAgICAgIDBDMDAgICBOT1ANCjExMTQ6ICAgICAgICAgICAgICAgIA0KMTExNTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdXhUYXNrUHJpb3JpdHlHZXQgKi8NCjExMTY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTExNzogICAgICAgICAgICAgICAgDQoxMTE4OiAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3ZUYXNrUHJpb3JpdHlTZXQgPT0gMSApDQoxMTE5OiAgICAgICAgICAgICAgICANCjExMjA6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrUHJpb3JpdHlTZXQoIFRhc2tIYW5kbGVfdCB4VGFzaywgVUJhc2VUeXBlX3QgdXhOZXdQcmlvcml0eSApDQoxMTIxOiAgICAgICAgICAgICAgICAJew0KQkZEMDE5MjQgICAgICA0RkU5ICAgQURESVUgU1AsIFNQLCAtNDgNCkJGRDAxOTI2ICAgICAgQ0JFQiAgIFNXIFJBLCA0NChTUCkNCkJGRDAxOTI4ICAgICAgQ0JDQSAgIFNXIFM4LCA0MChTUCkNCkJGRDAxOTJBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwMTkyQyAgMDAzMEY4OUUgICBTVyBBMCwgNDgoUzgpDQpCRkQwMTkzMCAgMDAzNEY4QkUgICBTVyBBMSwgNTIoUzgpDQoxMTIyOiAgICAgICAgICAgICAgICAJVENCX3QgKnB4VENCOw0KMTEyMzogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4Q3VycmVudEJhc2VQcmlvcml0eSwgdXhQcmlvcml0eVVzZWRPbkVudHJ5Ow0KMTEyNDogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFlpZWxkUmVxdWlyZWQgPSBwZEZBTFNFOw0KQkZEMDE5MzQgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQoxMTI1OiAgICAgICAgICAgICAgICANCjExMjY6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCAoIHV4TmV3UHJpb3JpdHkgPCBjb25maWdNQVhfUFJJT1JJVElFUyApICk7DQpCRkQwMTkzOCAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpDQpCRkQwMTkzQyAgMDAwNUIwNDIgICBTTFRJVSBWMCwgVjAsIDUNCkJGRDAxOTQwICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxOTU2DQpCRkQwMTk0NCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDE5NDYgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDE5NDggIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgNCkJGRDAxOTRBICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQ0KQkZEMDE5NEMgIDA0NjYzMEEwICAgQURESVUgQTEsIFpFUk8sIDExMjYNCkJGRDAxOTRFICAgICAgMDQ2NiAgIEFERFUgUzAsIFYxLCBBMg0KQkZEMDE5NTAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMTk1MiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDE5NTQgICAgICAwQzAwICAgTk9QDQoxMTI3OiAgICAgICAgICAgICAgICANCjExMjg6ICAgICAgICAgICAgICAgIAkJLyogRW5zdXJlIHRoZSBuZXcgcHJpb3JpdHkgaXMgdmFsaWQuICovDQoxMTI5OiAgICAgICAgICAgICAgICAJCWlmKCB1eE5ld1ByaW9yaXR5ID49ICggVUJhc2VUeXBlX3QgKSBjb25maWdNQVhfUFJJT1JJVElFUyApDQpCRkQwMTk1NiAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpDQpCRkQwMTk1QSAgMDAwNUIwNDIgICBTTFRJVSBWMCwgVjAsIDUNCkJGRDAxOTVFICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxOTY4DQoxMTMwOiAgICAgICAgICAgICAgICAJCXsNCjExMzE6ICAgICAgICAgICAgICAgIAkJCXV4TmV3UHJpb3JpdHkgPSAoIFVCYXNlVHlwZV90ICkgY29uZmlnTUFYX1BSSU9SSVRJRVMgLSAoIFVCYXNlVHlwZV90ICkgMVU7DQpCRkQwMTk2MiAgICAgIEVEMDQgICBMSSBWMCwgNA0KQkZEMDE5NjQgIDAwMzRGODVFICAgU1cgVjAsIDUyKFM4KQ0KMTEzMjogICAgICAgICAgICAgICAgCQl9DQoxMTMzOiAgICAgICAgICAgICAgICAJCWVsc2UNCjExMzQ6ICAgICAgICAgICAgICAgIAkJew0KMTEzNTogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTEzNjogICAgICAgICAgICAgICAgCQl9DQoxMTM3OiAgICAgICAgICAgICAgICANCjExMzg6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMTk2OCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDE5NkEgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwMTk2QyAgICAgIDBDMDAgICBOT1ANCjExMzk6ICAgICAgICAgICAgICAgIAkJew0KMTE0MDogICAgICAgICAgICAgICAgCQkJLyogSWYgbnVsbCBpcyBwYXNzZWQgaW4gaGVyZSB0aGVuIGl0IGlzIHRoZSBwcmlvcml0eSBvZiB0aGUgY2FsbGluZw0KMTE0MTogICAgICAgICAgICAgICAgCQkJdGFzayB0aGF0IGlzIGJlaW5nIGNoYW5nZWQuICovDQoxMTQyOiAgICAgICAgICAgICAgICAJCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHhUYXNrICk7DQpCRkQwMTk2RSAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMTk3MiAgMDAwNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTk3RQ0KQkZEMDE5NzYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAxOTdBICAgICAgQ0MwMyAgIEIgMHhCRkQwMTk4Mg0KQkZEMDE5N0MgICAgICAwQzAwICAgTk9QDQpCRkQwMTk3RSAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMTk4MiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoxMTQzOiAgICAgICAgICAgICAgICANCjExNDQ6ICAgICAgICAgICAgICAgIAkJCXRyYWNlVEFTS19QUklPUklUWV9TRVQoIHB4VENCLCB1eE5ld1ByaW9yaXR5ICk7DQoxMTQ1OiAgICAgICAgICAgICAgICANCjExNDY6ICAgICAgICAgICAgICAgIAkJCSNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KMTE0NzogICAgICAgICAgICAgICAgCQkJew0KMTE0ODogICAgICAgICAgICAgICAgCQkJCXV4Q3VycmVudEJhc2VQcmlvcml0eSA9IHB4VENCLT51eEJhc2VQcmlvcml0eTsNCkJGRDAxOTg2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxOThBICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkNCkJGRDAxOThFICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjExNDk6ICAgICAgICAgICAgICAgIAkJCX0NCjExNTA6ICAgICAgICAgICAgICAgIAkJCSNlbHNlDQoxMTUxOiAgICAgICAgICAgICAgICAJCQl7DQoxMTUyOiAgICAgICAgICAgICAgICAJCQkJdXhDdXJyZW50QmFzZVByaW9yaXR5ID0gcHhUQ0ItPnV4UHJpb3JpdHk7DQoxMTUzOiAgICAgICAgICAgICAgICAJCQl9DQoxMTU0OiAgICAgICAgICAgICAgICAJCQkjZW5kaWYNCjExNTU6ICAgICAgICAgICAgICAgIA0KMTE1NjogICAgICAgICAgICAgICAgCQkJaWYoIHV4Q3VycmVudEJhc2VQcmlvcml0eSAhPSB1eE5ld1ByaW9yaXR5ICkNCkJGRDAxOTkyICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDAxOTk2ICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkNCkJGRDAxOTlBICAwMEFEOTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDFBRjgNCkJGRDAxOTlDICAwQzAwMDBBRCAgIFNMTCBBMSwgVDUsIDENCkJGRDAxOTlFICAgICAgMEMwMCAgIE5PUA0KMTE1NzogICAgICAgICAgICAgICAgCQkJew0KMTE1ODogICAgICAgICAgICAgICAgCQkJCS8qIFRoZSBwcmlvcml0eSBjaGFuZ2UgbWF5IGhhdmUgcmVhZGllZCBhIHRhc2sgb2YgaGlnaGVyDQoxMTU5OiAgICAgICAgICAgICAgICAJCQkJcHJpb3JpdHkgdGhhbiB0aGUgY2FsbGluZyB0YXNrLiAqLw0KMTE2MDogICAgICAgICAgICAgICAgCQkJCWlmKCB1eE5ld1ByaW9yaXR5ID4gdXhDdXJyZW50QmFzZVByaW9yaXR5ICkNCkJGRDAxOUEwICAwMDM0RkM3RSAgIExXIFYxLCA1MihTOCkNCkJGRDAxOUE0ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAxOUE4ICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQ0KQkZEMDE5QUEgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwMTlBQyAgMDAxNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTlEQQ0KMTE2MTogICAgICAgICAgICAgICAgCQkJCXsNCjExNjI6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4VENCICE9IHB4Q3VycmVudFRDQiApDQpCRkQwMTlCMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDE5QjQgIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQ0KQkZEMDE5QjggIDAwMTk5NDQzICAgQkVRIFYxLCBWMCwgMHhCRkQwMTlFRQ0KQkZEMDE5QkEgIDBDMDAwMDE5ICAgU0xMIFpFUk8sIFQ5LCAxDQpCRkQwMTlCQyAgICAgIDBDMDAgICBOT1ANCjExNjM6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTE2NDogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIHByaW9yaXR5IG9mIGEgdGFzayBvdGhlciB0aGFuIHRoZSBjdXJyZW50bHkNCjExNjU6ICAgICAgICAgICAgICAgIAkJCQkJCXJ1bm5pbmcgdGFzayBpcyBiZWluZyByYWlzZWQuICBJcyB0aGUgcHJpb3JpdHkgYmVpbmcNCjExNjY6ICAgICAgICAgICAgICAgIAkJCQkJCXJhaXNlZCBhYm92ZSB0aGF0IG9mIHRoZSBydW5uaW5nIHRhc2s/ICovDQoxMTY3OiAgICAgICAgICAgICAgICAJCQkJCQlpZiggdXhOZXdQcmlvcml0eSA+PSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKQ0KQkZEMDE5QkUgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAxOUMyICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkNCkJGRDAxOUM0ICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkNCkJGRDAxOUM4ICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQ0KQkZEMDE5Q0EgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwMTlDQyAgMDAwRjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTlFRQ0KMTE2ODogICAgICAgICAgICAgICAgCQkJCQkJew0KMTE2OTogICAgICAgICAgICAgICAgCQkJCQkJCXhZaWVsZFJlcXVpcmVkID0gcGRUUlVFOw0KQkZEMDE5RDAgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAxOUQyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDAxOUQ2ICAgICAgQ0MwQiAgIEIgMHhCRkQwMTlFRQ0KQkZEMDE5RDggICAgICAwQzAwICAgTk9QDQoxMTcwOiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxMTcxOiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQoxMTcyOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMTczOiAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTE3NDogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTE3NTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMTc2OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjExNzc6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTE3ODogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIHByaW9yaXR5IG9mIHRoZSBydW5uaW5nIHRhc2sgaXMgYmVpbmcgcmFpc2VkLA0KMTE3OTogICAgICAgICAgICAgICAgCQkJCQkJYnV0IHRoZSBydW5uaW5nIHRhc2sgbXVzdCBhbHJlYWR5IGJlIHRoZSBoaWdoZXN0DQoxMTgwOiAgICAgICAgICAgICAgICAJCQkJCQlwcmlvcml0eSB0YXNrIGFibGUgdG8gcnVuIHNvIG5vIHlpZWxkIGlzIHJlcXVpcmVkLiAqLw0KMTE4MTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMTgyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTE4MzogICAgICAgICAgICAgICAgCQkJCWVsc2UgaWYoIHB4VENCID09IHB4Q3VycmVudFRDQiApDQpCRkQwMTlEQSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDE5REUgIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQ0KQkZEMDE5RTIgIDAwMDRCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMTlFRQ0KQkZEMDE5RTQgIDBDMDAwMDA0ICAgU0xMIFpFUk8sIEEwLCAxDQpCRkQwMTlFNiAgICAgIDBDMDAgICBOT1ANCjExODQ6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMTg1OiAgICAgICAgICAgICAgICAJCQkJCS8qIFNldHRpbmcgdGhlIHByaW9yaXR5IG9mIHRoZSBydW5uaW5nIHRhc2sgZG93biBtZWFucw0KMTE4NjogICAgICAgICAgICAgICAgCQkJCQl0aGVyZSBtYXkgbm93IGJlIGFub3RoZXIgdGFzayBvZiBoaWdoZXIgcHJpb3JpdHkgdGhhdA0KMTE4NzogICAgICAgICAgICAgICAgCQkJCQlpcyByZWFkeSB0byBleGVjdXRlLiAqLw0KMTE4ODogICAgICAgICAgICAgICAgCQkJCQl4WWllbGRSZXF1aXJlZCA9IHBkVFJVRTsNCkJGRDAxOUU4ICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMTlFQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxMTg5OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTE5MDogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjExOTE6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMTkyOiAgICAgICAgICAgICAgICAJCQkJCS8qIFNldHRpbmcgdGhlIHByaW9yaXR5IG9mIGFueSBvdGhlciB0YXNrIGRvd24gZG9lcyBub3QNCjExOTM6ICAgICAgICAgICAgICAgIAkJCQkJcmVxdWlyZSBhIHlpZWxkIGFzIHRoZSBydW5uaW5nIHRhc2sgbXVzdCBiZSBhYm92ZSB0aGUNCjExOTQ6ICAgICAgICAgICAgICAgIAkJCQkJbmV3IHByaW9yaXR5IG9mIHRoZSB0YXNrIGJlaW5nIG1vZGlmaWVkLiAqLw0KMTE5NTogICAgICAgICAgICAgICAgCQkJCX0NCjExOTY6ICAgICAgICAgICAgICAgIA0KMTE5NzogICAgICAgICAgICAgICAgCQkJCS8qIFJlbWVtYmVyIHRoZSByZWFkeSBsaXN0IHRoZSB0YXNrIG1pZ2h0IGJlIHJlZmVyZW5jZWQgZnJvbQ0KMTE5ODogICAgICAgICAgICAgICAgCQkJCWJlZm9yZSBpdHMgdXhQcmlvcml0eSBtZW1iZXIgaXMgY2hhbmdlZCBzbyB0aGUNCjExOTk6ICAgICAgICAgICAgICAgIAkJCQl0YXNrUkVTRVRfUkVBRFlfUFJJT1JJVFkoKSBtYWNybyBjYW4gZnVuY3Rpb24gY29ycmVjdGx5LiAqLw0KMTIwMDogICAgICAgICAgICAgICAgCQkJCXV4UHJpb3JpdHlVc2VkT25FbnRyeSA9IHB4VENCLT51eFByaW9yaXR5Ow0KQkZEMDE5RUUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDE5RjIgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDE5RjQgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQ0KMTIwMTogICAgICAgICAgICAgICAgDQoxMjAyOiAgICAgICAgICAgICAgICAJCQkJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoxMjAzOiAgICAgICAgICAgICAgICAJCQkJew0KMTIwNDogICAgICAgICAgICAgICAgCQkJCQkvKiBPbmx5IGNoYW5nZSB0aGUgcHJpb3JpdHkgYmVpbmcgdXNlZCBpZiB0aGUgdGFzayBpcyBub3QNCjEyMDU6ICAgICAgICAgICAgICAgIAkJCQkJY3VycmVudGx5IHVzaW5nIGFuIGluaGVyaXRlZCBwcmlvcml0eS4gKi8NCjEyMDY6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4VENCLT51eEJhc2VQcmlvcml0eSA9PSBweFRDQi0+dXhQcmlvcml0eSApDQpCRkQwMTlGOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTlGQyAgMDA0MEZDNjIgICBMVyBWMSwgNjQoVjApDQpCRkQwMUEwMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUEwNCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMUEwNiAgMDAwNkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxQTE2DQpCRkQwMUEwOCAgMEMwMDAwMDYgICBTTEwgWkVSTywgQTIsIDENCkJGRDAxQTBBICAgICAgMEMwMCAgIE5PUA0KMTIwNzogICAgICAgICAgICAgICAgCQkJCQl7DQoxMjA4OiAgICAgICAgICAgICAgICAJCQkJCQlweFRDQi0+dXhQcmlvcml0eSA9IHV4TmV3UHJpb3JpdHk7DQpCRkQwMUEwQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUExMCAgMDAzNEZDN0UgICBMVyBWMSwgNTIoUzgpDQpCRkQwMUExNCAgICAgIEU5QUIgICBTVyBWMSwgNDQoVjApDQoxMjA5OiAgICAgICAgICAgICAgICAJCQkJCX0NCjEyMTA6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTIxMTogICAgICAgICAgICAgICAgCQkJCQl7DQoxMjEyOiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMjEzOiAgICAgICAgICAgICAgICAJCQkJCX0NCjEyMTQ6ICAgICAgICAgICAgICAgIA0KMTIxNTogICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgYmFzZSBwcmlvcml0eSBnZXRzIHNldCB3aGF0ZXZlci4gKi8NCjEyMTY6ICAgICAgICAgICAgICAgIAkJCQkJcHhUQ0ItPnV4QmFzZVByaW9yaXR5ID0gdXhOZXdQcmlvcml0eTsNCkJGRDAxQTE2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxQTFBICAwMDM0RkM3RSAgIExXIFYxLCA1MihTOCkNCkJGRDAxQTFFICAwMDQwRjg2MiAgIFNXIFYxLCA2NChWMCkNCjEyMTc6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMjE4OiAgICAgICAgICAgICAgICAJCQkJI2Vsc2UNCjEyMTk6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMjIwOiAgICAgICAgICAgICAgICAJCQkJCXB4VENCLT51eFByaW9yaXR5ID0gdXhOZXdQcmlvcml0eTsNCjEyMjE6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMjIyOiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmDQoxMjIzOiAgICAgICAgICAgICAgICANCjEyMjQ6ICAgICAgICAgICAgICAgIAkJCQkvKiBPbmx5IHJlc2V0IHRoZSBldmVudCBsaXN0IGl0ZW0gdmFsdWUgaWYgdGhlIHZhbHVlIGlzIG5vdA0KMTIyNTogICAgICAgICAgICAgICAgCQkJCWJlaW5nIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UuICovDQoxMjI2OiAgICAgICAgICAgICAgICAJCQkJaWYoICggbGlzdEdFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICkgJiB0YXNrRVZFTlRfTElTVF9JVEVNX1ZBTFVFX0lOX1VTRSApID09IDBVTCApDQpCRkQwMUEyMiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUEyNiAgICAgIDY5MjYgICBMVyBWMCwgMjQoVjApDQpCRkQwMUEyOCAgMDAwODQwMDIgICBCTFRaIFYwLCAweEJGRDAxQTNDDQpCRkQwMUEyQSAgMEMwMDAwMDggICBTTEwgWkVSTywgVDAsIDENCkJGRDAxQTJDICAgICAgMEMwMCAgIE5PUA0KMTIyNzogICAgICAgICAgICAgICAgCQkJCXsNCjEyMjg6ICAgICAgICAgICAgICAgIAkJCQkJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApLCAoICggVGlja1R5cGVfdCApIGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCBUaWNrVHlwZV90ICkgdXhOZXdQcmlvcml0eSApICk7IC8qbGludCAhZTk2MSBNSVNSQSBleGNlcHRpb24gYXMgdGhlIGNhc3RzIGFyZSBvbmx5IHJlZHVuZGFudCBmb3Igc29tZSBwb3J0cy4gKi8NCkJGRDAxQTJFICAgICAgRUQ4NSAgIExJIFYxLCA1DQpCRkQwMUEzMCAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpDQpCRkQwMUEzNCAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjANCkJGRDAxQTM2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxQTNBICAgICAgRTlBNiAgIFNXIFYxLCAyNChWMCkNCjEyMjk6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMjMwOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTIzMTogICAgICAgICAgICAgICAgCQkJCXsNCjEyMzI6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTIzMzogICAgICAgICAgICAgICAgCQkJCX0NCjEyMzQ6ICAgICAgICAgICAgICAgIA0KMTIzNTogICAgICAgICAgICAgICAgCQkJCS8qIElmIHRoZSB0YXNrIGlzIGluIHRoZSBibG9ja2VkIG9yIHN1c3BlbmRlZCBsaXN0IHdlIG5lZWQgZG8NCjEyMzY6ICAgICAgICAgICAgICAgIAkJCQlub3RoaW5nIG1vcmUgdGhhbiBjaGFuZ2UgaXQncyBwcmlvcml0eSB2YXJpYWJsZS4gSG93ZXZlciwgaWYNCjEyMzc6ICAgICAgICAgICAgICAgIAkJCQl0aGUgdGFzayBpcyBpbiBhIHJlYWR5IGxpc3QgaXQgbmVlZHMgdG8gYmUgcmVtb3ZlZCBhbmQgcGxhY2VkDQoxMjM4OiAgICAgICAgICAgICAgICAJCQkJaW4gdGhlIGxpc3QgYXBwcm9wcmlhdGUgdG8gaXRzIG5ldyBwcmlvcml0eS4gKi8NCjEyMzk6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICYoIHB4UmVhZHlUYXNrc0xpc3RzWyB1eFByaW9yaXR5VXNlZE9uRW50cnkgXSApLCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgIT0gcGRGQUxTRSApDQpCRkQwMUEzQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUEzRSAgNjlBNTAwMTQgICBMV1ggVDUsIDAoUzQpDQpCRkQwMUE0MCAgICAgIDY5QTUgICBMVyBWMSwgMjAoVjApDQpCRkQwMUE0MiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMUE0NiAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyDQpCRkQwMUE0OCAgICAgIDI2MjQgICBTTEwgQTAsIFYwLCAyDQpCRkQwMUE0QSAgICAgIDA2NDQgICBBRERVIEEwLCBWMCwgQTANCkJGRDAxQTRDICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwMUE0RSAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwMUE1MCAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MA0KQkZEMDFBNTQgICAgICAwNTI4ICAgQUREVSBWMCwgQTAsIFYwDQpCRkQwMUE1NiAgMDAwNEI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxQTYyDQpCRkQwMUE1OCAgMEMwMDAwMDQgICBTTEwgWkVSTywgQTAsIDENCkJGRDAxQTVBICAgICAgMEMwMCAgIE5PUA0KQkZEMDFBNUMgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAxQTVFICAgICAgQ0MwMiAgIEIgMHhCRkQwMUE2NA0KQkZEMDFBNjAgICAgICAwQzAwICAgTk9QDQpCRkQwMUE2MiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQpCRkQwMUE2NCAgMDAzMjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMUFDQw0KMTI0MDogICAgICAgICAgICAgICAgCQkJCXsNCjEyNDE6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHRhc2sgaXMgY3VycmVudGx5IGluIGl0cyByZWFkeSBsaXN0IC0gcmVtb3ZlIGJlZm9yZSBhZGRpbmcNCjEyNDI6ICAgICAgICAgICAgICAgIAkJCQkJaXQgdG8gaXQncyBuZXcgcmVhZHkgbGlzdC4gIEFzIHdlIGFyZSBpbiBhIGNyaXRpY2FsIHNlY3Rpb24gd2UNCjEyNDM6ICAgICAgICAgICAgICAgIAkJCQkJY2FuIGRvIHRoaXMgZXZlbiBpZiB0aGUgc2NoZWR1bGVyIGlzIHN1c3BlbmRlZC4gKi8NCjEyNDQ6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHV4TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAxQTY4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxQTZDICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDFBNkUgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAxQTcwICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMUE3MiAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMUE3NCAgICAgIDBDMDAgICBOT1ANCkJGRDAxQTc2ICAwMDBCNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxQTkwDQoxMjQ1OiAgICAgICAgICAgICAgICAJCQkJCXsNCjEyNDY6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIEl0IGlzIGtub3duIHRoYXQgdGhlIHRhc2sgaXMgaW4gaXRzIHJlYWR5IGxpc3Qgc28NCjEyNDc6ICAgICAgICAgICAgICAgIAkJCQkJCXRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgYWdhaW4gYW5kIHRoZSBwb3J0IGxldmVsDQoxMjQ4OiAgICAgICAgICAgICAgICAJCQkJCQlyZXNldCBtYWNybyBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5LiAqLw0KMTI0OTogICAgICAgICAgICAgICAgCQkJCQkJcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5VXNlZE9uRW50cnksIHV4VG9wUmVhZHlQcmlvcml0eSApOw0KQkZEMDFBN0EgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDFBN0UgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAxQTgwICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQ0KQkZEMDFBODIgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQNCkJGRDAxQTg0ICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMA0KQkZEMDFBODYgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDAxQThBICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDFBOEMgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCjEyNTA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTI1MTogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoxMjUyOiAgICAgICAgICAgICAgICAJCQkJCXsNCjEyNTM6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEyNTQ6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTI1NTogICAgICAgICAgICAgICAgCQkJCQlwcnZBZGRUYXNrVG9SZWFkeUxpc3QoIHB4VENCICk7DQpCRkQwMUE5MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUE5NCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMUE5NiAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDFBOTggIDE4MTAwMDYyICAgU0xMViBWMSwgVjAsIFYxDQpCRkQwMUE5QSAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQ0KQkZEMDFBOUMgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDAxQUEwICAgICAgNDREMyAgIE9SMTYgVjAsIFYxDQpCRkQwMUFBMiAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDFBQTYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFBQUEgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDFBQUMgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDFBQUUgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDFBQjAgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwMUFCMiAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDFBQjQgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDFBQjYgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjANCkJGRDAxQUJBICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMA0KQkZEMDFBQkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFBQzAgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwMUFDMiAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDFBQzQgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAxQUM2ICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQNCkJGRDAxQUM4ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQ0KQkZEMDFBQ0EgICAgICAwQzAwICAgTk9QDQoxMjU2OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTI1NzogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjEyNTg6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMjU5OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEyNjA6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMjYxOiAgICAgICAgICAgICAgICANCjEyNjI6ICAgICAgICAgICAgICAgIAkJCQlpZiggeFlpZWxkUmVxdWlyZWQgPT0gcGRUUlVFICkNCkJGRDAxQUNDICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDAxQUQwICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMUFEMiAgMDAxMUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxQUY4DQpCRkQwMUFENCAgMEMwMDAwMTEgICBTTEwgWkVSTywgUzEsIDENCkJGRDAxQUQ2ICAgICAgMEMwMCAgIE5PUA0KMTI2MzogICAgICAgICAgICAgICAgCQkJCXsNCjEyNjQ6ICAgICAgICAgICAgICAgIAkJCQkJdGFza1lJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKTsNCkJGRDAxQUQ4ICA0RTU2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UNCkJGRDAxQURBICAgICAgNEU1NiAgIEFERElVIFMyLCBTMiwgLTUNCkJGRDAxQURDICAgICAgMEMwMCAgIE5PUA0KQkZEMDFBREUgIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQ0KQkZEMDFBRTIgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDFBRTYgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2DQpCRkQwMUFFQSAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQpCRkQwMUFFRSAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpDQpCRkQwMUFGMiAgNEU2Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UNCkJGRDAxQUY0ICAgICAgNEU2NiAgIEFERElVIFMzLCBTMywgMw0KQkZEMDFBRjYgICAgICAwQzAwICAgTk9QDQoxMjY1OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTI2NjogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjEyNjc6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMjY4OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEyNjk6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMjcwOiAgICAgICAgICAgICAgICANCjEyNzE6ICAgICAgICAgICAgICAgIAkJCQkvKiBSZW1vdmUgY29tcGlsZXIgd2FybmluZyBhYm91dCB1bnVzZWQgdmFyaWFibGVzIHdoZW4gdGhlIHBvcnQNCjEyNzI6ICAgICAgICAgICAgICAgIAkJCQlvcHRpbWlzZWQgdGFzayBzZWxlY3Rpb24gaXMgbm90IGJlaW5nIHVzZWQuICovDQoxMjczOiAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgdXhQcmlvcml0eVVzZWRPbkVudHJ5Ow0KMTI3NDogICAgICAgICAgICAgICAgCQkJfQ0KMTI3NTogICAgICAgICAgICAgICAgCQl9DQoxMjc2OiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMUFGOCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMUFGQSAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMzJGRQ0KQkZEMDFBRkMgICAgICAwQzAwICAgTk9QDQoxMjc3OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDFBRkUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAxQjAwICAgICAgNEJFQiAgIExXIFJBLCA0NChTUCkNCkJGRDAxQjAyICAgICAgNEJDQSAgIExXIFM4LCA0MChTUCkNCkJGRDAxQjA0ICAgICAgNEMxOSAgIEFERElVIFNQLCBTUCwgNDgNCkJGRDAxQjA2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAxQjA4ICAgICAgMEMwMCAgIE5PUA0KMTI3ODogICAgICAgICAgICAgICAgDQoxMjc5OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV92VGFza1ByaW9yaXR5U2V0ICovDQoxMjgwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEyODE6ICAgICAgICAgICAgICAgIA0KMTI4MjogICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoxMjgzOiAgICAgICAgICAgICAgICANCjEyODQ6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrU3VzcGVuZCggVGFza0hhbmRsZV90IHhUYXNrVG9TdXNwZW5kICkNCjEyODU6ICAgICAgICAgICAgICAgIAl7DQpCRkQwMzA0QyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDMwNEUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDMwNTAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDMwNTIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDAzMDU0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCjEyODY6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqcHhUQ0I7DQoxMjg3OiAgICAgICAgICAgICAgICANCjEyODg6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMzA1OCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDMwNUEgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwMzA1QyAgICAgIDBDMDAgICBOT1ANCjEyODk6ICAgICAgICAgICAgICAgIAkJew0KMTI5MDogICAgICAgICAgICAgICAgCQkJLyogSWYgbnVsbCBpcyBwYXNzZWQgaW4gaGVyZSB0aGVuIGl0IGlzIHRoZSBydW5uaW5nIHRhc2sgdGhhdCBpcw0KMTI5MTogICAgICAgICAgICAgICAgCQkJYmVpbmcgc3VzcGVuZGVkLiAqLw0KMTI5MjogICAgICAgICAgICAgICAgCQkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCB4VGFza1RvU3VzcGVuZCApOw0KQkZEMDMwNUUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDMwNjIgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDMwNkUNCkJGRDAzMDY2ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMzA2QSAgICAgIENDMDMgICBCIDB4QkZEMDMwNzINCkJGRDAzMDZDICAgICAgMEMwMCAgIE5PUA0KQkZEMDMwNkUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDMwNzIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTI5MzogICAgICAgICAgICAgICAgDQoxMjk0OiAgICAgICAgICAgICAgICAJCQl0cmFjZVRBU0tfU1VTUEVORCggcHhUQ0IgKTsNCjEyOTU6ICAgICAgICAgICAgICAgIA0KMTI5NjogICAgICAgICAgICAgICAgCQkJLyogUmVtb3ZlIHRhc2sgZnJvbSB0aGUgcmVhZHkvZGVsYXllZCBsaXN0IGFuZCBwbGFjZSBpbiB0aGUNCjEyOTc6ICAgICAgICAgICAgICAgIAkJCXN1c3BlbmRlZCBsaXN0LiAqLw0KMTI5ODogICAgICAgICAgICAgICAgCQkJaWYoIHV4TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAzMDc2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzMDdBICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDMwN0MgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzMDdFICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMzA4MCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMzA4MiAgICAgIDBDMDAgICBOT1ANCkJGRDAzMDg0ICAwMDFBNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzMEJDDQoxMjk5OiAgICAgICAgICAgICAgICAJCQl7DQoxMzAwOiAgICAgICAgICAgICAgICAJCQkJdGFza1JFU0VUX1JFQURZX1BSSU9SSVRZKCBweFRDQi0+dXhQcmlvcml0eSApOw0KQkZEMDMwODggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDMwOEMgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDMwOEUgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDMwOTAgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDMwOTIgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwMzA5NCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDMwOTYgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDMwOTggIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjANCkJGRDAzMDlDICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDMwOUUgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMzBBMCAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzBCQw0KQkZEMDMwQTQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDMwQTggICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDMwQUEgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAzMEFDICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQ0KQkZEMDMwQUUgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQNCkJGRDAzMEIwICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMA0KQkZEMDMwQjIgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDAzMEI2ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDMwQjggIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCjEzMDE6ICAgICAgICAgICAgICAgIAkJCX0NCjEzMDI6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjEzMDM6ICAgICAgICAgICAgICAgIAkJCXsNCjEzMDQ6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMzA1OiAgICAgICAgICAgICAgICAJCQl9DQoxMzA2OiAgICAgICAgICAgICAgICANCjEzMDc6ICAgICAgICAgICAgICAgIAkJCS8qIElzIHRoZSB0YXNrIHdhaXRpbmcgb24gYW4gZXZlbnQgYWxzbz8gKi8NCjEzMDg6ICAgICAgICAgICAgICAgIAkJCWlmKCBsaXN0TElTVF9JVEVNX0NPTlRBSU5FUiggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKSAhPSBOVUxMICkNCkJGRDAzMEJDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzMEMwICAgICAgNjkyQSAgIExXIFYwLCA0MChWMCkNCkJGRDAzMEMyICAwMDA3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzMEQ0DQoxMzA5OiAgICAgICAgICAgICAgICAJCQl7DQoxMzEwOiAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDMwQzYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDMwQzggIDZEMkMwMDEwICAgRVhUIFpFUk8sIFMwLCAyMCwgMTQNCkJGRDAzMENBICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQNCkJGRDAzMENDICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwMzBDRSAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQ0KQkZEMDMwRDAgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQ0KQkZEMDMwRDIgICAgICAwQzAwICAgTk9QDQoxMzExOiAgICAgICAgICAgICAgICAJCQl9DQoxMzEyOiAgICAgICAgICAgICAgICAJCQllbHNlDQoxMzEzOiAgICAgICAgICAgICAgICAJCQl7DQoxMzE0OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTMxNTogICAgICAgICAgICAgICAgCQkJfQ0KMTMxNjogICAgICAgICAgICAgICAgDQoxMzE3OiAgICAgICAgICAgICAgICAJCQl2TGlzdEluc2VydEVuZCggJnhTdXNwZW5kZWRUYXNrTGlzdCwgJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDMwRDQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDMwRDggICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwMzBEQSAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDMwREMgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQ0KQkZEMDMwREUgIDgwRTQzMDgzICAgQURESVUgQTAsIFYxLCAtMzI1NDANCkJGRDAzMEUyICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMzBFNCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwMzBFNiAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDAzMEU4ICAgICAgMEMwMCAgIE5PUA0KMTMxODogICAgICAgICAgICAgICAgCQl9DQoxMzE5OiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMzBFQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMzBFQyAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNDhGMA0KQkZEMDMwRUUgICAgICAwQzAwICAgTk9QDQoxMzIwOiAgICAgICAgICAgICAgICANCjEzMjE6ICAgICAgICAgICAgICAgIAkJaWYoIHB4VENCID09IHB4Q3VycmVudFRDQiApDQpCRkQwMzBGMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDMwRjQgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDMwRjggIDAwMzZCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMzE2OA0KQkZEMDMwRkEgIDBDMDAwMDM2ICAgU0xMIEFULCBTNiwgMQ0KQkZEMDMwRkMgICAgICAwQzAwICAgTk9QDQoxMzIyOiAgICAgICAgICAgICAgICAJCXsNCjEzMjM6ICAgICAgICAgICAgICAgIAkJCWlmKCB4U2NoZWR1bGVyUnVubmluZyAhPSBwZEZBTFNFICkNCkJGRDAzMEZFICA4MDQ0RkM1QyAgIExXIFYwLCAtMzI3MDAoR1ApDQpCRkQwMzEwMiAgMDAxRjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzE0NA0KMTMyNDogICAgICAgICAgICAgICAgCQkJew0KMTMyNTogICAgICAgICAgICAgICAgCQkJCS8qIFRoZSBjdXJyZW50IHRhc2sgaGFzIGp1c3QgYmVlbiBzdXNwZW5kZWQuICovDQoxMzI2OiAgICAgICAgICAgICAgICAJCQkJY29uZmlnQVNTRVJUKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAwICk7DQpCRkQwMzEwNiAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQ0KQkZEMDMxMEEgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDMxMjANCkJGRDAzMTBFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMzExMCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMzExMiAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDMxMTQgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMzExNiAgMDUyRTMwQTAgICBBRERJVSBBMSwgWkVSTywgMTMyNg0KQkZEMDMxMTggICAgICAwNTJFICAgQUREVSBWMCwgQTMsIFYwDQpCRkQwMzExQSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAzMTFDICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMzExRSAgICAgIDBDMDAgICBOT1ANCjEzMjc6ICAgICAgICAgICAgICAgIAkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KQkZEMDMxMjAgIDRFNTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQ0KQkZEMDMxMjIgICAgICA0RTU2ICAgQURESVUgUzIsIFMyLCAtNQ0KQkZEMDMxMjQgICAgICAwQzAwICAgTk9QDQpCRkQwMzEyNiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQpCRkQwMzEyQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMzEyRSAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDAzMTMyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCkJGRDAzMTM2ICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDAzMTNBICA0RTY2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQ0KQkZEMDMxM0MgICAgICA0RTY2ICAgQURESVUgUzMsIFMzLCAzDQpCRkQwMzEzRSAgICAgIDBDMDAgICBOT1ANCkJGRDAzMTQwICAgICAgQ0MyMCAgIEIgMHhCRkQwMzE4Mg0KQkZEMDMxNDIgICAgICAwQzAwICAgTk9QDQoxMzI4OiAgICAgICAgICAgICAgICAJCQl9DQoxMzI5OiAgICAgICAgICAgICAgICAJCQllbHNlDQoxMzMwOiAgICAgICAgICAgICAgICAJCQl7DQoxMzMxOiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHNjaGVkdWxlciBpcyBub3QgcnVubmluZywgYnV0IHRoZSB0YXNrIHRoYXQgd2FzIHBvaW50ZWQNCjEzMzI6ICAgICAgICAgICAgICAgIAkJCQl0byBieSBweEN1cnJlbnRUQ0IgaGFzIGp1c3QgYmVlbiBzdXNwZW5kZWQgYW5kIHB4Q3VycmVudFRDQg0KMTMzMzogICAgICAgICAgICAgICAgCQkJCW11c3QgYmUgYWRqdXN0ZWQgdG8gcG9pbnQgdG8gYSBkaWZmZXJlbnQgdGFzay4gKi8NCjEzMzQ6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdENVUlJFTlRfTElTVF9MRU5HVEgoICZ4U3VzcGVuZGVkVGFza0xpc3QgKSA9PSB1eEN1cnJlbnROdW1iZXJPZlRhc2tzICkNCkJGRDAzMTQ0ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwMzE0NiAgRkM2MkJGRDIgICBMREMxIEYzMCwgLTkyNihTMikNCkJGRDAzMTQ4ICA4MEU0RkM2MiAgIExXIFYxLCAtMzI1NDAoVjApDQpCRkQwMzE0QyAgODAzOEZDNUMgICBMVyBWMCwgLTMyNzEyKEdQKQ0KQkZEMDMxNTAgIDAwMDVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMzE1RQ0KQkZEMDMxNTIgIDBDMDAwMDA1ICAgU0xMIFpFUk8sIEExLCAxDQpCRkQwMzE1NCAgICAgIDBDMDAgICBOT1ANCjEzMzU6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMzM2OiAgICAgICAgICAgICAgICAJCQkJCS8qIE5vIG90aGVyIHRhc2tzIGFyZSByZWFkeSwgc28gc2V0IHB4Q3VycmVudFRDQiBiYWNrIHRvDQoxMzM3OiAgICAgICAgICAgICAgICAJCQkJCU5VTEwgc28gd2hlbiB0aGUgbmV4dCB0YXNrIGlzIGNyZWF0ZWQgcHhDdXJyZW50VENCIHdpbGwNCjEzMzg6ICAgICAgICAgICAgICAgIAkJCQkJYmUgc2V0IHRvIHBvaW50IHRvIGl0IG5vIG1hdHRlciB3aGF0IGl0cyByZWxhdGl2ZSBwcmlvcml0eQ0KMTMzOTogICAgICAgICAgICAgICAgCQkJCQlpcy4gKi8NCjEzNDA6ICAgICAgICAgICAgICAgIAkJCQkJcHhDdXJyZW50VENCID0gTlVMTDsNCkJGRDAzMTU2ICA4MDMwRjgxQyAgIFNXIFpFUk8sIC0zMjcyMChHUCkNCkJGRDAzMTVBICAgICAgQ0MxMyAgIEIgMHhCRkQwMzE4Mg0KQkZEMDMxNUMgICAgICAwQzAwICAgTk9QDQoxMzQxOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTM0MjogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjEzNDM6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMzQ0OiAgICAgICAgICAgICAgICAJCQkJCXZUYXNrU3dpdGNoQ29udGV4dCgpOw0KQkZEMDMxNUUgIDE2REU3N0U4ICAgSkFMUyB2VGFza1N3aXRjaENvbnRleHQNCkJGRDAzMTYwICAwQzAwMTZERSAgIExCVSBTNiwgMzA3MihTOCkNCkJGRDAzMTYyICAgICAgMEMwMCAgIE5PUA0KQkZEMDMxNjQgICAgICBDQzBFICAgQiAweEJGRDAzMTgyDQpCRkQwMzE2NiAgICAgIDBDMDAgICBOT1ANCjEzNDU6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMzQ2OiAgICAgICAgICAgICAgICAJCQl9DQoxMzQ3OiAgICAgICAgICAgICAgICAJCX0NCjEzNDg6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMTM0OTogICAgICAgICAgICAgICAgCQl7DQoxMzUwOiAgICAgICAgICAgICAgICAJCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgIT0gcGRGQUxTRSApDQpCRkQwMzE2OCAgODA0NEZDNUMgICBMVyBWMCwgLTMyNzAwKEdQKQ0KQkZEMDMxNkMgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDMxODINCjEzNTE6ICAgICAgICAgICAgICAgIAkJCXsNCjEzNTI6ICAgICAgICAgICAgICAgIAkJCQkvKiBBIHRhc2sgb3RoZXIgdGhhbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzayB3YXMgc3VzcGVuZGVkLA0KMTM1MzogICAgICAgICAgICAgICAgCQkJCXJlc2V0IHRoZSBuZXh0IGV4cGVjdGVkIHVuYmxvY2sgdGltZSBpbiBjYXNlIGl0IHJlZmVycmVkIHRvIHRoZQ0KMTM1NDogICAgICAgICAgICAgICAgCQkJCXRhc2sgdGhhdCBpcyBub3cgaW4gdGhlIFN1c3BlbmRlZCBzdGF0ZS4gKi8NCjEzNTU6ICAgICAgICAgICAgICAgIAkJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAzMTcwICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwMzE3MiAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDAzMTc0ICAgICAgMEMwMCAgIE5PUA0KMTM1NjogICAgICAgICAgICAgICAgCQkJCXsNCjEzNTc6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2UmVzZXROZXh0VGFza1VuYmxvY2tUaW1lKCk7DQpCRkQwMzE3NiAgNDdDQTc3RTggICBKQUxTIHBydlJlc2V0TmV4dFRhc2tVbmJsb2NrVGltZQ0KQkZEMDMxN0EgICAgICAwQzAwICAgTk9QDQoxMzU4OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTM1OTogICAgICAgICAgICAgICAgCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMzE3QyAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMzE3RSAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNDk4Mg0KQkZEMDMxODAgICAgICAwQzAwICAgTk9QDQoxMzYwOiAgICAgICAgICAgICAgICAJCQl9DQoxMzYxOiAgICAgICAgICAgICAgICAJCQllbHNlDQoxMzYyOiAgICAgICAgICAgICAgICAJCQl7DQoxMzYzOiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTM2NDogICAgICAgICAgICAgICAgCQkJfQ0KMTM2NTogICAgICAgICAgICAgICAgCQl9DQoxMzY2OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDMxODIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAzMTg0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDAzMTg2ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDAzMTg4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDAzMThBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAzMThDICAgICAgMEMwMCAgIE5PUA0KMTM2NzogICAgICAgICAgICAgICAgDQoxMzY4OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV92VGFza1N1c3BlbmQgKi8NCjEzNjk6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTM3MDogICAgICAgICAgICAgICAgDQoxMzcxOiAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjEzNzI6ICAgICAgICAgICAgICAgIA0KMTM3MzogICAgICAgICAgICAgICAgCXN0YXRpYyBCYXNlVHlwZV90IHBydlRhc2tJc1Rhc2tTdXNwZW5kZWQoIGNvbnN0IFRhc2tIYW5kbGVfdCB4VGFzayApDQoxMzc0OiAgICAgICAgICAgICAgICAJew0KQkZEMDY2REMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA2NkRFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA2NkUwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA2NkUyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNjZFNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQoxMzc1OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UmV0dXJuID0gcGRGQUxTRTsNCkJGRDA2NkU4ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMTM3NjogICAgICAgICAgICAgICAgCWNvbnN0IFRDQl90ICogY29uc3QgcHhUQ0IgPSAoIFRDQl90ICogKSB4VGFzazsNCkJGRDA2NkVDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA2NkYwICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjEzNzc6ICAgICAgICAgICAgICAgIA0KMTM3ODogICAgICAgICAgICAgICAgCQkvKiBBY2Nlc3NlcyB4UGVuZGluZ1JlYWR5TGlzdCBzbyBtdXN0IGJlIGNhbGxlZCBmcm9tIGEgY3JpdGljYWwNCjEzNzk6ICAgICAgICAgICAgICAgIAkJc2VjdGlvbi4gKi8NCjEzODA6ICAgICAgICAgICAgICAgIA0KMTM4MTogICAgICAgICAgICAgICAgCQkvKiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGNoZWNrIGlmIHRoZSBjYWxsaW5nIHRhc2sgaXMgc3VzcGVuZGVkLiAqLw0KMTM4MjogICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHhUYXNrICk7DQpCRkQwNjZGNCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNjZGOCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjcwRQ0KQkZEMDY2RkMgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA2NkZFICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA2NzAwICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwNjcwMiAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDA2NzA0ICAwNTY2MzBBMCAgIEFERElVIEExLCBaRVJPLCAxMzgyDQpCRkQwNjcwNiAgICAgIDA1NjYgICBBRERVIFYwLCBWMSwgQTINCkJGRDA2NzA4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDY3MEEgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA2NzBDICAgICAgMEMwMCAgIE5PUA0KMTM4MzogICAgICAgICAgICAgICAgDQoxMzg0OiAgICAgICAgICAgICAgICAJCS8qIElzIHRoZSB0YXNrIGJlaW5nIHJlc3VtZWQgYWN0dWFsbHkgaW4gdGhlIHN1c3BlbmRlZCBsaXN0PyAqLw0KMTM4NTogICAgICAgICAgICAgICAgCQlpZiggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSAhPSBwZEZBTFNFICkNCkJGRDA2NzBFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2NzEwICA2OUE1MDAxNCAgIExXWCBUNSwgMChTNCkNCkJGRDA2NzEyICAgICAgNjlBNSAgIExXIFYxLCAyMChWMCkNCkJGRDA2NzE0ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwNjcxNiAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwNjcxOCAgODBFNDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjU0MA0KQkZEMDY3MUMgIDAwMDRCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNjcyOA0KQkZEMDY3MUUgIDBDMDAwMDA0ICAgU0xMIFpFUk8sIEEwLCAxDQpCRkQwNjcyMCAgICAgIDBDMDAgICBOT1ANCkJGRDA2NzIyICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwNjcyNCAgICAgIENDMDIgICBCIDB4QkZEMDY3MkENCkJGRDA2NzI2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDY3MjggICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTw0KQkZEMDY3MkEgIDAwMTg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDY3NUUNCjEzODY6ICAgICAgICAgICAgICAgIAkJew0KMTM4NzogICAgICAgICAgICAgICAgCQkJLyogSGFzIHRoZSB0YXNrIGFscmVhZHkgYmVlbiByZXN1bWVkIGZyb20gd2l0aGluIGFuIElTUj8gKi8NCjEzODg6ICAgICAgICAgICAgICAgIAkJCWlmKCBsaXN0SVNfQ09OVEFJTkVEX1dJVEhJTiggJnhQZW5kaW5nUmVhZHlMaXN0LCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApID09IHBkRkFMU0UgKQ0KQkZEMDY3MkUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDY3MzIgICAgICA2OUFBICAgTFcgVjEsIDQwKFYwKQ0KQkZEMDY3MzQgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDA2NzM2ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDA2NzM4ICA4MEQwMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNTYwDQpCRkQwNjczQyAgMDAwRjk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA2NzVFDQpCRkQwNjczRSAgMEMwMDAwMEYgICBTTEwgWkVSTywgVDcsIDENCkJGRDA2NzQwICAgICAgMEMwMCAgIE5PUA0KMTM4OTogICAgICAgICAgICAgICAgCQkJew0KMTM5MDogICAgICAgICAgICAgICAgCQkJCS8qIElzIGl0IGluIHRoZSBzdXNwZW5kZWQgbGlzdCBiZWNhdXNlIGl0IGlzIGluIHRoZQlTdXNwZW5kZWQNCjEzOTE6ICAgICAgICAgICAgICAgIAkJCQlzdGF0ZSwgb3IgYmVjYXVzZSBpcyBpcyBibG9ja2VkIHdpdGggbm8gdGltZW91dD8gKi8NCjEzOTI6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oIE5VTEwsICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICkgIT0gcGRGQUxTRSApDQpCRkQwNjc0MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNjc0NiAgICAgIDY5MkEgICBMVyBWMCwgNDAoVjApDQpCRkQwNjc0OCAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjc1Mg0KQkZEMDY3NEMgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA2NzRFICAgICAgQ0MwMiAgIEIgMHhCRkQwNjc1NA0KQkZEMDY3NTAgICAgICAwQzAwICAgTk9QDQpCRkQwNjc1MiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQpCRkQwNjc1NCAgMDAwMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjc1RQ0KMTM5MzogICAgICAgICAgICAgICAgCQkJCXsNCjEzOTQ6ICAgICAgICAgICAgICAgIAkJCQkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA2NzU4ICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwNjc1QSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxMzk1OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTM5NjogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjEzOTc6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMzk4OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEzOTk6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNDAwOiAgICAgICAgICAgICAgICAJCQl9DQoxNDAxOiAgICAgICAgICAgICAgICAJCQllbHNlDQoxNDAyOiAgICAgICAgICAgICAgICAJCQl7DQoxNDAzOiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTQwNDogICAgICAgICAgICAgICAgCQkJfQ0KMTQwNTogICAgICAgICAgICAgICAgCQl9DQoxNDA2OiAgICAgICAgICAgICAgICAJCWVsc2UNCjE0MDc6ICAgICAgICAgICAgICAgIAkJew0KMTQwODogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTQwOTogICAgICAgICAgICAgICAgCQl9DQoxNDEwOiAgICAgICAgICAgICAgICANCjE0MTE6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwNjc1RSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoxNDEyOiAgICAgICAgICAgICAgICAJfSAvKmxpbnQgIWU4MTggeFRhc2sgY2Fubm90IGJlIGEgcG9pbnRlciB0byBjb25zdCBiZWNhdXNlIGl0IGlzIGEgdHlwZWRlZi4gKi8NCkJGRDA2NzYyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNjc2NCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNjc2NiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNjc2OCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNjc2QSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNjc2QyAgICAgIDBDMDAgICBOT1ANCjE0MTM6ICAgICAgICAgICAgICAgIA0KMTQxNDogICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQoxNDE1OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE0MTY6ICAgICAgICAgICAgICAgIA0KMTQxNzogICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoxNDE4OiAgICAgICAgICAgICAgICANCjE0MTk6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrUmVzdW1lKCBUYXNrSGFuZGxlX3QgeFRhc2tUb1Jlc3VtZSApDQoxNDIwOiAgICAgICAgICAgICAgICAJew0KQkZEMDQwRTQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA0MEU2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA0MEU4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA0MEVBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNDBFQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQoxNDIxOiAgICAgICAgICAgICAgICAJVENCX3QgKiBjb25zdCBweFRDQiA9ICggVENCX3QgKiApIHhUYXNrVG9SZXN1bWU7DQpCRkQwNDBGMCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNDBGNCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxNDIyOiAgICAgICAgICAgICAgICANCjE0MjM6ICAgICAgICAgICAgICAgIAkJLyogSXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byByZXN1bWUgdGhlIGNhbGxpbmcgdGFzay4gKi8NCjE0MjQ6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCB4VGFza1RvUmVzdW1lICk7DQpCRkQwNDBGOCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNDBGQyAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDExMg0KQkZEMDQxMDAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0MTAyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA0MTA0ICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwNDEwNiAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDA0MTA4ICAwNTkwMzBBMCAgIEFERElVIEExLCBaRVJPLCAxNDI0DQpCRkQwNDEwQSAgICAgIDA1OTAgICBBRERVIFYxLCBTMCwgUzENCkJGRDA0MTBDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDQxMEUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0MTEwICAgICAgMEMwMCAgIE5PUA0KMTQyNTogICAgICAgICAgICAgICAgDQoxNDI2OiAgICAgICAgICAgICAgICAJCS8qIFRoZSBwYXJhbWV0ZXIgY2Fubm90IGJlIE5VTEwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZXN1bWUgdGhlDQoxNDI3OiAgICAgICAgICAgICAgICAJCWN1cnJlbnRseSBleGVjdXRpbmcgdGFzay4gKi8NCjE0Mjg6ICAgICAgICAgICAgICAgIAkJaWYoICggcHhUQ0IgIT0gTlVMTCApICYmICggcHhUQ0IgIT0gcHhDdXJyZW50VENCICkgKQ0KQkZEMDQxMTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDQxMTYgIDAwNTY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDQxQzYNCkJGRDA0MTFBICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNDExRSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwNDEyMiAgMDA1MDk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA0MUM2DQpCRkQwNDEyNCAgMEMwMDAwNTAgICBTTEwgVjAsIFMwLCAxDQpCRkQwNDEyNiAgICAgIDBDMDAgICBOT1ANCjE0Mjk6ICAgICAgICAgICAgICAgIAkJew0KMTQzMDogICAgICAgICAgICAgICAgCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwNDEyOCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDQxMkEgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwNDEyQyAgICAgIDBDMDAgICBOT1ANCjE0MzE6ICAgICAgICAgICAgICAgIAkJCXsNCjE0MzI6ICAgICAgICAgICAgICAgIAkJCQlpZiggcHJ2VGFza0lzVGFza1N1c3BlbmRlZCggcHhUQ0IgKSA9PSBwZFRSVUUgKQ0KQkZEMDQxMkUgIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQ0KQkZEMDQxMzIgIDMzNkU3N0U4ICAgSkFMUyBwcnZUYXNrSXNUYXNrU3VzcGVuZGVkDQpCRkQwNDEzNCAgMEMwMDMzNkUgICBBRERJVSBLMSwgVDYsIDMwNzINCkJGRDA0MTM2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDQxMzggICAgICAwQzYyICAgTU9WRSBWMSwgVjANCkJGRDA0MTNBICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwNDEzQyAgMDA0MEI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA0MUMwDQpCRkQwNDEzRSAgMEMwMDAwNDAgICBTTEwgVjAsIFpFUk8sIDENCkJGRDA0MTQwICAgICAgMEMwMCAgIE5PUA0KMTQzMzogICAgICAgICAgICAgICAgCQkJCXsNCjE0MzQ6ICAgICAgICAgICAgICAgIAkJCQkJdHJhY2VUQVNLX1JFU1VNRSggcHhUQ0IgKTsNCjE0MzU6ICAgICAgICAgICAgICAgIA0KMTQzNjogICAgICAgICAgICAgICAgCQkJCQkvKiBBcyB3ZSBhcmUgaW4gYSBjcml0aWNhbCBzZWN0aW9uIHdlIGNhbiBhY2Nlc3MgdGhlIHJlYWR5DQoxNDM3OiAgICAgICAgICAgICAgICAJCQkJCWxpc3RzIGV2ZW4gaWYgdGhlIHNjaGVkdWxlciBpcyBzdXNwZW5kZWQuICovDQoxNDM4OiAgICAgICAgICAgICAgICAJCQkJCSggdm9pZCApIHV4TGlzdFJlbW92ZSggICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDA0MTQyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA0MTQ2ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDQxNDggICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA0MTRBICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwNDE0QyAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwNDE0RSAgICAgIDBDMDAgICBOT1ANCjE0Mzk6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFRDQiApOw0KQkZEMDQxNTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDQxNTQgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDQxNTYgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDA0MTU4ICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQ0KQkZEMDQxNUEgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkNCkJGRDA0MTVDICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApDQpCRkQwNDE2MCAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQ0KQkZEMDQxNjIgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCkJGRDA0MTY2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA0MTZBICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDA0MTZDICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDA0MTZFICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDA0MTcwICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQ0KQkZEMDQxNzIgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDA0MTc0ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDA0MTc2ICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwNDE3QSAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjANCkJGRDA0MTdDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA0MTgwICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDQxODIgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDA0MTg0ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwNDE4NiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwNDE4OCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDA0MThBICAgICAgMEMwMCAgIE5PUA0KMTQ0MDogICAgICAgICAgICAgICAgDQoxNDQxOiAgICAgICAgICAgICAgICAJCQkJCS8qIFdlIG1heSBoYXZlIGp1c3QgcmVzdW1lZCBhIGhpZ2hlciBwcmlvcml0eSB0YXNrLiAqLw0KMTQ0MjogICAgICAgICAgICAgICAgCQkJCQlpZiggcHhUQ0ItPnV4UHJpb3JpdHkgPj0gcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCkJGRDA0MThDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA0MTkwICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkNCkJGRDA0MTkyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNDE5NiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwNDE5OCAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDA0MTlBICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDQxOUMgIDAwMTA0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQxQzANCjE0NDM6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTQ0NDogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhpcyB5aWVsZCBtYXkgbm90IGNhdXNlIHRoZSB0YXNrIGp1c3QgcmVzdW1lZCB0byBydW4sDQoxNDQ1OiAgICAgICAgICAgICAgICAJCQkJCQlidXQgd2lsbCBsZWF2ZSB0aGUgbGlzdHMgaW4gdGhlIGNvcnJlY3Qgc3RhdGUgZm9yIHRoZQ0KMTQ0NjogICAgICAgICAgICAgICAgCQkJCQkJbmV4dCB5aWVsZC4gKi8NCjE0NDc6ICAgICAgICAgICAgICAgIAkJCQkJCXRhc2tZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwNDFBMCAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwNDFBMiAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01DQpCRkQwNDFBNCAgICAgIDBDMDAgICBOT1ANCkJGRDA0MUE2ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCkJGRDA0MUFBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0MUFFICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDQxQjIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KQkZEMDQxQjYgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQ0KQkZEMDQxQkEgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwNDFCQyAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMNCkJGRDA0MUJFICAgICAgMEMwMCAgIE5PUA0KMTQ0ODogICAgICAgICAgICAgICAgCQkJCQl9DQoxNDQ5OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjE0NTA6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTQ1MTogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTQ1MjogICAgICAgICAgICAgICAgCQkJCQl9DQoxNDUzOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTQ1NDogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjE0NTU6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNDU2OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE0NTc6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNDU4OiAgICAgICAgICAgICAgICAJCQl9DQoxNDU5OiAgICAgICAgICAgICAgICAJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDQxQzAgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDQxQzIgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDU5QzYNCkJGRDA0MUM0ICAgICAgMEMwMCAgIE5PUA0KMTQ2MDogICAgICAgICAgICAgICAgCQl9DQoxNDYxOiAgICAgICAgICAgICAgICAJCWVsc2UNCjE0NjI6ICAgICAgICAgICAgICAgIAkJew0KMTQ2MzogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTQ2NDogICAgICAgICAgICAgICAgCQl9DQoxNDY1OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDQxQzYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA0MUM4ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA0MUNBICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA0MUNDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA0MUNFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA0MUQwICAgICAgMEMwMCAgIE5PUA0KMTQ2NjogICAgICAgICAgICAgICAgDQoxNDY3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV92VGFza1N1c3BlbmQgKi8NCjE0Njg6ICAgICAgICAgICAgICAgIA0KMTQ2OTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNDcwOiAgICAgICAgICAgICAgICANCjE0NzE6ICAgICAgICAgICAgICAgICNpZiAoICggSU5DTFVERV94VGFza1Jlc3VtZUZyb21JU1IgPT0gMSApICYmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApICkNCjE0NzI6ICAgICAgICAgICAgICAgIA0KMTQ3MzogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFRhc2tSZXN1bWVGcm9tSVNSKCBUYXNrSGFuZGxlX3QgeFRhc2tUb1Jlc3VtZSApDQoxNDc0OiAgICAgICAgICAgICAgICAJew0KQkZEMDQxRDQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDA0MUQ2ICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkNCkJGRDA0MUQ4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkNCkJGRDA0MURBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNDFEQyAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpDQoxNDc1OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4WWllbGRSZXF1aXJlZCA9IHBkRkFMU0U7DQpCRkQwNDFFMCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCjE0NzY6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqIGNvbnN0IHB4VENCID0gKCBUQ0JfdCAqICkgeFRhc2tUb1Jlc3VtZTsNCkJGRDA0MUU0ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDA0MUU4ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjE0Nzc6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzOw0KMTQ3ODogICAgICAgICAgICAgICAgDQoxNDc5OiAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeFRhc2tUb1Jlc3VtZSApOw0KQkZEMDQxRUMgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDQxRjAgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQyMDYNCkJGRDA0MUY0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNDFGNiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNDFGOCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDQxRkEgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwNDFGQyAgMDVDNzMwQTAgICBBRERJVSBBMSwgWkVSTywgMTQ3OQ0KQkZEMDQxRkUgICAgICAwNUM3ICAgU1VCVSBWMSwgVjEsIEEwDQpCRkQwNDIwMCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA0MjAyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNDIwNCAgICAgIDBDMDAgICBOT1ANCjE0ODA6ICAgICAgICAgICAgICAgIA0KMTQ4MTogICAgICAgICAgICAgICAgCQkvKiBSVE9TIHBvcnRzIHRoYXQgc3VwcG9ydCBpbnRlcnJ1cHQgbmVzdGluZyBoYXZlIHRoZSBjb25jZXB0IG9mIGENCjE0ODI6ICAgICAgICAgICAgICAgIAkJbWF4aW11bQlzeXN0ZW0gY2FsbCAob3IgbWF4aW11bSBBUEkgY2FsbCkgaW50ZXJydXB0IHByaW9yaXR5Lg0KMTQ4MzogICAgICAgICAgICAgICAgCQlJbnRlcnJ1cHRzIHRoYXQgYXJlCWFib3ZlIHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5IGFyZSBrZWVwDQoxNDg0OiAgICAgICAgICAgICAgICAJCXBlcm1hbmVudGx5IGVuYWJsZWQsIGV2ZW4gd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLA0KMTQ4NTogICAgICAgICAgICAgICAgCQlidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMuICBJZiBjb25maWdBU1NFUlQoKQ0KMTQ4NjogICAgICAgICAgICAgICAgCQlpcyBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdGhlbg0KMTQ4NzogICAgICAgICAgICAgICAgCQlwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2lsbCByZXN1bHQgaW4gYW4gYXNzZXJ0aW9uDQoxNDg4OiAgICAgICAgICAgICAgICAJCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzDQoxNDg5OiAgICAgICAgICAgICAgICAJCWJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZSB0aGUgY29uZmlndXJlZCBtYXhpbXVtIHN5c3RlbSBjYWxsDQoxNDkwOiAgICAgICAgICAgICAgICAJCXByaW9yaXR5LiAgT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkDQoxNDkxOiAgICAgICAgICAgICAgICAJCWZyb20gaW50ZXJydXB0cwl0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIChsb2dpY2FsbHkpDQoxNDkyOiAgICAgICAgICAgICAgICAJCWJlbG93IHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIGludGVycnVwdCBwcmlvcml0eS4gIEZyZWVSVE9TIG1haW50YWlucyBhDQoxNDkzOiAgICAgICAgICAgICAgICAJCXNlcGFyYXRlIGludGVycnVwdCBzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQoxNDk0OiAgICAgICAgICAgICAgICAJCXNpbXBsZSBhcyBwb3NzaWJsZS4gIE1vcmUgaW5mb3JtYXRpb24gKGFsYmVpdCBDb3J0ZXgtTSBzcGVjaWZpYykgaXMNCjE0OTU6ICAgICAgICAgICAgICAgIAkJcHJvdmlkZWQgb24gdGhlIGZvbGxvd2luZyBsaW5rOg0KMTQ5NjogICAgICAgICAgICAgICAgCQlodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQoxNDk3OiAgICAgICAgICAgICAgICAJCXBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKTsNCjE0OTg6ICAgICAgICAgICAgICAgIA0KMTQ5OTogICAgICAgICAgICAgICAgCQl1eFNhdmVkSW50ZXJydXB0U3RhdHVzID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KQkZEMDQyMDYgIDQ3NUU3N0U4ICAgSkFMUyB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUg0KQkZEMDQyMEEgICAgICAwQzAwICAgTk9QDQpCRkQwNDIwQyAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQoxNTAwOiAgICAgICAgICAgICAgICAJCXsNCjE1MDE6ICAgICAgICAgICAgICAgIAkJCWlmKCBwcnZUYXNrSXNUYXNrU3VzcGVuZGVkKCBweFRDQiApID09IHBkVFJVRSApDQpCRkQwNDIxMCAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwNDIxNCAgMzM2RTc3RTggICBKQUxTIHBydlRhc2tJc1Rhc2tTdXNwZW5kZWQNCkJGRDA0MjE2ICAwQzAwMzM2RSAgIEFERElVIEsxLCBUNiwgMzA3Mg0KQkZEMDQyMTggICAgICAwQzAwICAgTk9QDQpCRkQwNDIxQSAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMA0KQkZEMDQyMUMgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA0MjFFICAwMDQ0QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDQyQUENCkJGRDA0MjIwICAwQzAwMDA0NCAgIFNMTCBWMCwgQTAsIDENCkJGRDA0MjIyICAgICAgMEMwMCAgIE5PUA0KMTUwMjogICAgICAgICAgICAgICAgCQkJew0KMTUwMzogICAgICAgICAgICAgICAgCQkJCXRyYWNlVEFTS19SRVNVTUVfRlJPTV9JU1IoIHB4VENCICk7DQoxNTA0OiAgICAgICAgICAgICAgICANCjE1MDU6ICAgICAgICAgICAgICAgIAkJCQkvKiBDaGVjayB0aGUgcmVhZHkgbGlzdHMgY2FuIGJlIGFjY2Vzc2VkLiAqLw0KMTUwNjogICAgICAgICAgICAgICAgCQkJCWlmKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAoIFVCYXNlVHlwZV90ICkgcGRGQUxTRSApDQpCRkQwNDIyNCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQ0KQkZEMDQyMjggIDAwMzQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQyOTQNCjE1MDc6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNTA4OiAgICAgICAgICAgICAgICAJCQkJCS8qIFJlYWR5IGxpc3RzIGNhbiBiZSBhY2Nlc3NlZCBzbyBtb3ZlIHRoZSB0YXNrIGZyb20gdGhlDQoxNTA5OiAgICAgICAgICAgICAgICAJCQkJCXN1c3BlbmRlZCBsaXN0IHRvIHRoZSByZWFkeSBsaXN0IGRpcmVjdGx5LiAqLw0KMTUxMDogICAgICAgICAgICAgICAgCQkJCQlpZiggcHhUQ0ItPnV4UHJpb3JpdHkgPj0gcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCkJGRDA0MjJDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0MjMwICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkNCkJGRDA0MjMyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNDIzNiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwNDIzOCAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDA0MjNBICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDQyM0MgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQyNDYNCjE1MTE6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTUxMjogICAgICAgICAgICAgICAgCQkJCQkJeFlpZWxkUmVxdWlyZWQgPSBwZFRSVUU7DQpCRkQwNDI0MCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDQyNDIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTUxMzogICAgICAgICAgICAgICAgCQkJCQl9DQoxNTE0OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjE1MTU6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTUxNjogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTUxNzogICAgICAgICAgICAgICAgCQkJCQl9DQoxNTE4OiAgICAgICAgICAgICAgICANCjE1MTk6ICAgICAgICAgICAgICAgIAkJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAgJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDQyNDYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQyNEEgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNDI0QyAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDQyNEUgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUNCkJGRDA0MjUwICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDENCkJGRDA0MjUyICAgICAgMEMwMCAgIE5PUA0KMTUyMDogICAgICAgICAgICAgICAgCQkJCQlwcnZBZGRUYXNrVG9SZWFkeUxpc3QoIHB4VENCICk7DQpCRkQwNDI1NCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDI1OCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwNDI1QSAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDQyNUMgIDE4MTAwMDYyICAgU0xMViBWMSwgVjAsIFYxDQpCRkQwNDI1RSAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQ0KQkZEMDQyNjAgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDA0MjY0ICAgICAgNDREMyAgIE9SMTYgVjAsIFYxDQpCRkQwNDI2NiAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDQyNkEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQyNkUgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDQyNzAgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDQyNzIgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDQyNzQgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwNDI3NiAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDQyNzggIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDQyN0EgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjANCkJGRDA0MjdFICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMA0KQkZEMDQyODAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQyODQgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNDI4NiAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDQyODggICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDA0MjhBICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQNCkJGRDA0MjhDICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQ0KQkZEMDQyOEUgICAgICAwQzAwICAgTk9QDQpCRkQwNDI5MCAgICAgIENDMEMgICBCIDB4QkZEMDQyQUENCkJGRDA0MjkyICAgICAgMEMwMCAgIE5PUA0KMTUyMTogICAgICAgICAgICAgICAgCQkJCX0NCjE1MjI6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoxNTIzOiAgICAgICAgICAgICAgICAJCQkJew0KMTUyNDogICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgZGVsYXllZCBvciByZWFkeSBsaXN0cyBjYW5ub3QgYmUgYWNjZXNzZWQgc28gdGhlIHRhc2sNCjE1MjU6ICAgICAgICAgICAgICAgIAkJCQkJaXMgaGVsZCBpbiB0aGUgcGVuZGluZyByZWFkeSBsaXN0IHVudGlsIHRoZSBzY2hlZHVsZXIgaXMNCjE1MjY6ICAgICAgICAgICAgICAgIAkJCQkJdW5zdXNwZW5kZWQuICovDQoxNTI3OiAgICAgICAgICAgICAgICAJCQkJCXZMaXN0SW5zZXJ0RW5kKCAmKCB4UGVuZGluZ1JlYWR5TGlzdCApLCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDQyOTQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQyOTYgIDZEMkMwMDE0ICAgRVhUIFpFUk8sIFM0LCAyMCwgMTQNCkJGRDA0Mjk4ICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQNCkJGRDA0MjlBICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwNDI5QyAgMzA4M0JGRDIgICBMREMxIEYzMCwgMTI0MTkoUzIpDQpCRkQwNDI5RSAgODBEMDMwODMgICBBRERJVSBBMCwgVjEsIC0zMjU2MA0KQkZEMDQyQTIgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDA0MkE0ICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQNCkJGRDA0MkE2ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQ0KQkZEMDQyQTggICAgICAwQzAwICAgTk9QDQoxNTI4OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTUyOTogICAgICAgICAgICAgICAgCQkJfQ0KMTUzMDogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTUzMTogICAgICAgICAgICAgICAgCQkJew0KMTUzMjogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE1MzM6ICAgICAgICAgICAgICAgIAkJCX0NCjE1MzQ6ICAgICAgICAgICAgICAgIAkJfQ0KMTUzNTogICAgICAgICAgICAgICAgCQlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKTsNCkJGRDA0MkFBICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkNCkJGRDA0MkFFICA0RDVFNzdFOCAgIEpBTFMgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSDQpCRkQwNDJCMCAgICAgIDRENUUgICBBRERJVSBUMiwgVDIsIC0xDQpCRkQwNDJCMiAgICAgIDBDMDAgICBOT1ANCjE1MzY6ICAgICAgICAgICAgICAgIA0KMTUzNzogICAgICAgICAgICAgICAgCQlyZXR1cm4geFlpZWxkUmVxdWlyZWQ7DQpCRkQwNDJCNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoxNTM4OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDQyQjggICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA0MkJBICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkNCkJGRDA0MkJDICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkNCkJGRDA0MkJFICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDANCkJGRDA0MkMwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA0MkMyICAgICAgMEMwMCAgIE5PUA0KMTUzOTogICAgICAgICAgICAgICAgDQoxNTQwOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogKCAoIElOQ0xVREVfeFRhc2tSZXN1bWVGcm9tSVNSID09IDEgKSAmJiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKSApICovDQoxNTQxOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE1NDI6ICAgICAgICAgICAgICAgIA0KMTU0MzogICAgICAgICAgICAgICAgdm9pZCB2VGFza1N0YXJ0U2NoZWR1bGVyKCB2b2lkICkNCjE1NDQ6ICAgICAgICAgICAgICAgIHsNCkJGRDA0QUMwICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4DQpCRkQwNEFDMiAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApDQpCRkQwNEFDNCAgICAgIENCQ0EgICBTVyBTOCwgNDAoU1ApDQpCRkQwNEFDNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMTU0NTogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KMTU0NjogICAgICAgICAgICAgICAgDQoxNTQ3OiAgICAgICAgICAgICAgICAJLyogQWRkIHRoZSBpZGxlIHRhc2sgYXQgdGhlIGxvd2VzdCBwcmlvcml0eS4gKi8NCjE1NDg6ICAgICAgICAgICAgICAgIAkjaWYgKCBJTkNMVURFX3hUYXNrR2V0SWRsZVRhc2tIYW5kbGUgPT0gMSApDQoxNTQ5OiAgICAgICAgICAgICAgICAJew0KMTU1MDogICAgICAgICAgICAgICAgCQkvKiBDcmVhdGUgdGhlIGlkbGUgdGFzaywgc3RvcmluZyBpdHMgaGFuZGxlIGluIHhJZGxlVGFza0hhbmRsZSBzbyBpdCBjYW4NCjE1NTE6ICAgICAgICAgICAgICAgIAkJYmUgcmV0dXJuZWQgYnkgdGhlIHhUYXNrR2V0SWRsZVRhc2tIYW5kbGUoKSBmdW5jdGlvbi4gKi8NCjE1NTI6ICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHhUYXNrQ3JlYXRlKCBwcnZJZGxlVGFzaywgIklETEUiLCB0c2tJRExFX1NUQUNLX1NJWkUsICggdm9pZCAqICkgTlVMTCwgKCB0c2tJRExFX1BSSU9SSVRZIHwgcG9ydFBSSVZJTEVHRV9CSVQgKSwgJnhJZGxlVGFza0hhbmRsZSApOyAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uLCBqdXN0aWZpZWQgYXMgaXQgaXMgbm90IGEgcmVkdW5kYW50IGV4cGxpY2l0IGNhc3QgdG8gYWxsIHN1cHBvcnRlZCBjb21waWxlcnMuICovDQoxNTUzOiAgICAgICAgICAgICAgICAJfQ0KMTU1NDogICAgICAgICAgICAgICAgCSNlbHNlDQoxNTU1OiAgICAgICAgICAgICAgICAJew0KMTU1NjogICAgICAgICAgICAgICAgCQkvKiBDcmVhdGUgdGhlIGlkbGUgdGFzayB3aXRob3V0IHN0b3JpbmcgaXRzIGhhbmRsZS4gKi8NCjE1NTc6ICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHhUYXNrQ3JlYXRlKCBwcnZJZGxlVGFzaywgIklETEUiLCB0c2tJRExFX1NUQUNLX1NJWkUsICggdm9pZCAqICkgTlVMTCwgKCB0c2tJRExFX1BSSU9SSVRZIHwgcG9ydFBSSVZJTEVHRV9CSVQgKSwgTlVMTCApOyAgLypsaW50ICFlOTYxIE1JU1JBIGV4Y2VwdGlvbiwganVzdGlmaWVkIGFzIGl0IGlzIG5vdCBhIHJlZHVuZGFudCBleHBsaWNpdCBjYXN0IHRvIGFsbCBzdXBwb3J0ZWQgY29tcGlsZXJzLiAqLw0KQkZEMDRBQzggICAgICBDODA0ICAgU1cgWkVSTywgMTYoU1ApDQpCRkQwNEFDQSAgICAgIEM4MDUgICBTVyBaRVJPLCAyMChTUCkNCkJGRDA0QUNDICAgICAgQzgwNiAgIFNXIFpFUk8sIDI0KFNQKQ0KQkZEMDRBQ0UgICAgICBDODA3ICAgU1cgWkVSTywgMjgoU1ApDQpCRkQwNEFEMCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDRBRDIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDRBRDQgIDhCQzUzMDgyICAgQURESVUgQTAsIFYwLCAtMjk3NTUNCkJGRDA0QUQ2ICAgICAgOEJDNSAgIFNCIEEzLCA1KEEwKQ0KQkZEMDRBRDggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0QURBICAzMEEyQkZEMSAgIExEQzEgRjMwLCAxMjQ1MChTMSkNCkJGRDA0QURDICA5ODI4MzBBMiAgIEFERElVIEExLCBWMCwgLTI2NTg0DQpCRkQwNEFERSAgMzBDMDk4MjggICBTV0MxIEYxLCAxMjQ4MChUMCkNCkJGRDA0QUUwICAwMEJFMzBDMCAgIEFERElVIEEyLCBaRVJPLCAxOTANCkJGRDA0QUU0ICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8NCkJGRDA0QUU2ICAwQTlBNzdFOCAgIEpBTFMgeFRhc2tHZW5lcmljQ3JlYXRlDQpCRkQwNEFFOCAgICAgIDBBOUEgICBMQlUgQTEsIDEwKFMxKQ0KQkZEMDRBRUEgICAgICAwQzAwICAgTk9QDQpCRkQwNEFFQyAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQoxNTU4OiAgICAgICAgICAgICAgICAJfQ0KMTU1OTogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBJTkNMVURFX3hUYXNrR2V0SWRsZVRhc2tIYW5kbGUgKi8NCjE1NjA6ICAgICAgICAgICAgICAgIA0KMTU2MTogICAgICAgICAgICAgICAgCSNpZiAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApDQoxNTYyOiAgICAgICAgICAgICAgICAJew0KMTU2MzogICAgICAgICAgICAgICAgCQlpZiggeFJldHVybiA9PSBwZFBBU1MgKQ0KQkZEMDRBRjAgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQ0KQkZEMDRBRjQgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA0QUY2ICAwMDA2QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDRCMDYNCkJGRDA0QUY4ICAwQzAwMDAwNiAgIFNMTCBaRVJPLCBBMiwgMQ0KQkZEMDRBRkEgICAgICAwQzAwICAgTk9QDQoxNTY0OiAgICAgICAgICAgICAgICAJCXsNCjE1NjU6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSB4VGltZXJDcmVhdGVUaW1lclRhc2soKTsNCkJGRDA0QUZDICAzRDM2NzdFOCAgIEpBTFMgeFRpbWVyQ3JlYXRlVGltZXJUYXNrDQpCRkQwNEFGRSAgMEMwMDNEMzYgICBMSCBUMSwgMzA3MihTNikNCkJGRDA0QjAwICAgICAgMEMwMCAgIE5PUA0KQkZEMDRCMDIgIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQ0KMTU2NjogICAgICAgICAgICAgICAgCQl9DQoxNTY3OiAgICAgICAgICAgICAgICAJCWVsc2UNCjE1Njg6ICAgICAgICAgICAgICAgIAkJew0KMTU2OTogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTU3MDogICAgICAgICAgICAgICAgCQl9DQoxNTcxOiAgICAgICAgICAgICAgICAJfQ0KMTU3MjogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBjb25maWdVU0VfVElNRVJTICovDQoxNTczOiAgICAgICAgICAgICAgICANCjE1NzQ6ICAgICAgICAgICAgICAgIAlpZiggeFJldHVybiA9PSBwZFBBU1MgKQ0KQkZEMDRCMDYgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQ0KQkZEMDRCMEEgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA0QjBDICAwMDMxQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDRCNzINCkJGRDA0QjBFICAwQzAwMDAzMSAgIFNMTCBBVCwgUzEsIDENCkJGRDA0QjEwICAgICAgMEMwMCAgIE5PUA0KMTU3NTogICAgICAgICAgICAgICAgCXsNCjE1NzY6ICAgICAgICAgICAgICAgIAkJLyogSW50ZXJydXB0cyBhcmUgdHVybmVkIG9mZiBoZXJlLCB0byBlbnN1cmUgYSB0aWNrIGRvZXMgbm90IG9jY3VyDQoxNTc3OiAgICAgICAgICAgICAgICAJCWJlZm9yZSBvciBkdXJpbmcgdGhlIGNhbGwgdG8geFBvcnRTdGFydFNjaGVkdWxlcigpLiAgVGhlIHN0YWNrcyBvZg0KMTU3ODogICAgICAgICAgICAgICAgCQl0aGUgY3JlYXRlZCB0YXNrcyBjb250YWluIGEgc3RhdHVzIHdvcmQgd2l0aCBpbnRlcnJ1cHRzIHN3aXRjaGVkIG9uDQoxNTc5OiAgICAgICAgICAgICAgICAJCXNvIGludGVycnVwdHMgd2lsbCBhdXRvbWF0aWNhbGx5IGdldCByZS1lbmFibGVkIHdoZW4gdGhlIGZpcnN0IHRhc2sNCjE1ODA6ICAgICAgICAgICAgICAgIAkJc3RhcnRzIHRvIHJ1bi4gKi8NCjE1ODE6ICAgICAgICAgICAgICAgIAkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KQkZEMDRCMTIgIDRFMzY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBTdGF0dXMNCkJGRDA0QjE0ICAgICAgNEUzNiAgIEFERElVIFMxLCBTMSwgLTUNCkJGRDA0QjE2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDRCMTggIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQ0KQkZEMDRCMUMgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQ0KQkZEMDRCMjAgIDAwMDE0MUEyICAgTFVJIFYwLCAweDENCkJGRDA0QjI0ICBGQzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xMDI0DQpCRkQwNEIyNiAgNDQ5M0ZDMDAgICBMVyBaRVJPLCAxNzU1NShaRVJPKQ0KQkZEMDRCMjggICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwNEIyQSAgNTA0MDAwNDIgICBTUkwgVjAsIFYwLCAxMA0KQkZEMDRCMkMgIEIwNDI1MDQwICAgT1JJIFYwLCBaRVJPLCAtMjA0MTQNCkJGRDA0QjJFICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMw0KQkZEMDRCMzIgIDAwMTE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDRCNTgNCkJGRDA0QjM2ICAwMDI0RkM3RSAgIExXIFYxLCAzNihTOCkNCkJGRDA0QjNBICBGRkZFNDFBMiAgIExVSSBWMCwgMHhGRkZFDQpCRkQwNEIzQyAgNTA0MkZGRkUgICBMVyBSQSwgMjA1NDYoUzgpDQpCRkQwNEIzRSAgMDNGRjUwNDIgICBPUkkgVjAsIFYwLCAxMDIzDQpCRkQwNEI0MiAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA0QjQ0ICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkNCkJGRDA0QjQ4ICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDA0QjRDICAwQzAwNTA0MiAgIE9SSSBWMCwgVjAsIDMwNzINCkJGRDA0QjRFICAgICAgMEMwMCAgIE5PUA0KQkZEMDRCNTAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA0QjUyICA0RTQ2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBTdGF0dXMNCkJGRDA0QjU0ICAgICAgNEU0NiAgIEFERElVIFMyLCBTMiwgMw0KQkZEMDRCNTYgICAgICAwQzAwICAgTk9QDQoxNTgyOiAgICAgICAgICAgICAgICANCjE1ODM6ICAgICAgICAgICAgICAgIAkJI2lmICggY29uZmlnVVNFX05FV0xJQl9SRUVOVFJBTlQgPT0gMSApDQoxNTg0OiAgICAgICAgICAgICAgICAJCXsNCjE1ODU6ICAgICAgICAgICAgICAgIAkJCS8qIFN3aXRjaCBOZXdsaWIncyBfaW1wdXJlX3B0ciB2YXJpYWJsZSB0byBwb2ludCB0byB0aGUgX3JlZW50DQoxNTg2OiAgICAgICAgICAgICAgICAJCQlzdHJ1Y3R1cmUgc3BlY2lmaWMgdG8gdGhlIHRhc2sgdGhhdCB3aWxsIHJ1biBmaXJzdC4gKi8NCjE1ODc6ICAgICAgICAgICAgICAgIAkJCV9pbXB1cmVfcHRyID0gJiggcHhDdXJyZW50VENCLT54TmV3TGliX3JlZW50ICk7DQoxNTg4OiAgICAgICAgICAgICAgICAJCX0NCjE1ODk6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9ORVdMSUJfUkVFTlRSQU5UICovDQoxNTkwOiAgICAgICAgICAgICAgICANCjE1OTE6ICAgICAgICAgICAgICAgIAkJeE5leHRUYXNrVW5ibG9ja1RpbWUgPSBwb3J0TUFYX0RFTEFZOw0KQkZEMDRCNTggICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwNEI1QSAgODA1OEY4NUMgICBTVyBWMCwgLTMyNjgwKEdQKQ0KMTU5MjogICAgICAgICAgICAgICAgCQl4U2NoZWR1bGVyUnVubmluZyA9IHBkVFJVRTsNCkJGRDA0QjVFICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwNEI2MCAgODA0NEY4NUMgICBTVyBWMCwgLTMyNzAwKEdQKQ0KMTU5MzogICAgICAgICAgICAgICAgCQl4VGlja0NvdW50ID0gKCBUaWNrVHlwZV90ICkgMFU7DQpCRkQwNEI2NCAgODAzQ0Y4MUMgICBTVyBaRVJPLCAtMzI3MDgoR1ApDQoxNTk0OiAgICAgICAgICAgICAgICANCjE1OTU6ICAgICAgICAgICAgICAgIAkJLyogSWYgY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgaXMgZGVmaW5lZCB0aGVuIHRoZSBmb2xsb3dpbmcNCjE1OTY6ICAgICAgICAgICAgICAgIAkJbWFjcm8gbXVzdCBiZSBkZWZpbmVkIHRvIGNvbmZpZ3VyZSB0aGUgdGltZXIvY291bnRlciB1c2VkIHRvIGdlbmVyYXRlDQoxNTk3OiAgICAgICAgICAgICAgICAJCXRoZSBydW4gdGltZSBjb3VudGVyIHRpbWUgYmFzZS4gKi8NCjE1OTg6ICAgICAgICAgICAgICAgIAkJcG9ydENPTkZJR1VSRV9USU1FUl9GT1JfUlVOX1RJTUVfU1RBVFMoKTsNCjE1OTk6ICAgICAgICAgICAgICAgIA0KMTYwMDogICAgICAgICAgICAgICAgCQkvKiBTZXR0aW5nIHVwIHRoZSB0aW1lciB0aWNrIGlzIGhhcmR3YXJlIHNwZWNpZmljIGFuZCB0aHVzIGluIHRoZQ0KMTYwMTogICAgICAgICAgICAgICAgCQlwb3J0YWJsZSBpbnRlcmZhY2UuICovDQoxNjAyOiAgICAgICAgICAgICAgICAJCWlmKCB4UG9ydFN0YXJ0U2NoZWR1bGVyKCkgIT0gcGRGQUxTRSApDQpCRkQwNEI2OCAgMzQ0Qzc3RTggICBKQUxTIHhQb3J0U3RhcnRTY2hlZHVsZXINCkJGRDA0QjZBICAwQzAwMzQ0QyAgIExIVSBWMCwgMzA3MihUNCkNCkJGRDA0QjZDICAgICAgMEMwMCAgIE5PUA0KQkZEMDRCNkUgICAgICBDQzBFICAgQiAweEJGRDA0QjhDDQpCRkQwNEI3MCAgICAgIDBDMDAgICBOT1ANCjE2MDM6ICAgICAgICAgICAgICAgIAkJew0KMTYwNDogICAgICAgICAgICAgICAgCQkJLyogU2hvdWxkIG5vdCByZWFjaCBoZXJlIGFzIGlmIHRoZSBzY2hlZHVsZXIgaXMgcnVubmluZyB0aGUNCjE2MDU6ICAgICAgICAgICAgICAgIAkJCWZ1bmN0aW9uIHdpbGwgbm90IHJldHVybi4gKi8NCjE2MDY6ICAgICAgICAgICAgICAgIAkJfQ0KMTYwNzogICAgICAgICAgICAgICAgCQllbHNlDQoxNjA4OiAgICAgICAgICAgICAgICAJCXsNCjE2MDk6ICAgICAgICAgICAgICAgIAkJCS8qIFNob3VsZCBvbmx5IHJlYWNoIGhlcmUgaWYgYSB0YXNrIGNhbGxzIHhUYXNrRW5kU2NoZWR1bGVyKCkuICovDQoxNjEwOiAgICAgICAgICAgICAgICAJCX0NCjE2MTE6ICAgICAgICAgICAgICAgIAl9DQoxNjEyOiAgICAgICAgICAgICAgICAJZWxzZQ0KMTYxMzogICAgICAgICAgICAgICAgCXsNCjE2MTQ6ICAgICAgICAgICAgICAgIAkJLyogVGhpcyBsaW5lIHdpbGwgb25seSBiZSByZWFjaGVkIGlmIHRoZSBrZXJuZWwgY291bGQgbm90IGJlIHN0YXJ0ZWQsDQoxNjE1OiAgICAgICAgICAgICAgICAJCWJlY2F1c2UgdGhlcmUgd2FzIG5vdCBlbm91Z2ggRnJlZVJUT1MgaGVhcCB0byBjcmVhdGUgdGhlIGlkbGUgdGFzaw0KMTYxNjogICAgICAgICAgICAgICAgCQlvciB0aGUgdGltZXIgdGFzay4gKi8NCjE2MTc6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCB4UmV0dXJuICk7DQpCRkQwNEI3MiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNEI3NiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNEI4Qw0KQkZEMDRCN0EgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0QjdDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA0QjdFICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwNEI4MCAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDA0QjgyICAwNjUxMzBBMCAgIEFERElVIEExLCBaRVJPLCAxNjE3DQpCRkQwNEI4NCAgICAgIDA2NTEgICBTVUJVIEEwLCBTMCwgQTENCkJGRDA0Qjg2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDRCODggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0QjhBICAgICAgMEMwMCAgIE5PUA0KMTYxODogICAgICAgICAgICAgICAgCX0NCjE2MTk6ICAgICAgICAgICAgICAgIH0NCkJGRDA0QjhDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNEI4RSAgICAgIDRCRUIgICBMVyBSQSwgNDQoU1ApDQpCRkQwNEI5MCAgICAgIDRCQ0EgICBMVyBTOCwgNDAoU1ApDQpCRkQwNEI5MiAgICAgIDRDMTkgICBBRERJVSBTUCwgU1AsIDQ4DQpCRkQwNEI5NCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNEI5NiAgICAgIDBDMDAgICBOT1ANCjE2MjA6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTYyMTogICAgICAgICAgICAgICAgDQoxNjIyOiAgICAgICAgICAgICAgICB2b2lkIHZUYXNrRW5kU2NoZWR1bGVyKCB2b2lkICkNCjE2MjM6ICAgICAgICAgICAgICAgIHsNCkJGRDA3RjAwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwN0YwMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwN0YwNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwN0YwNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMTYyNDogICAgICAgICAgICAgICAgCS8qIFN0b3AgdGhlIHNjaGVkdWxlciBpbnRlcnJ1cHRzIGFuZCBjYWxsIHRoZSBwb3J0YWJsZSBzY2hlZHVsZXIgZW5kDQoxNjI1OiAgICAgICAgICAgICAgICAJcm91dGluZSBzbyB0aGUgb3JpZ2luYWwgSVNScyBjYW4gYmUgcmVzdG9yZWQgaWYgbmVjZXNzYXJ5LiAgVGhlIHBvcnQNCjE2MjY6ICAgICAgICAgICAgICAgIAlsYXllciBtdXN0IGVuc3VyZSBpbnRlcnJ1cHRzIGVuYWJsZQliaXQgaXMgbGVmdCBpbiB0aGUgY29ycmVjdCBzdGF0ZS4gKi8NCjE2Mjc6ICAgICAgICAgICAgICAgIAlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQpCRkQwN0YwOCAgNEUzNjc3RTggICBKQUxTIHVsUG9ydEdldENQMFN0YXR1cw0KQkZEMDdGMEEgICAgICA0RTM2ICAgQURESVUgUzEsIFMxLCAtNQ0KQkZEMDdGMEMgICAgICAwQzAwICAgTk9QDQpCRkQwN0YwRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwN0YxMiAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwN0YxNiAgMDAwMTQxQTIgICBMVUkgVjAsIDB4MQ0KQkZEMDdGMUEgIEZDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTEwMjQNCkJGRDA3RjFDICA0NDkzRkMwMCAgIExXIFpFUk8sIDE3NTU1KFpFUk8pDQpCRkQwN0YxRSAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA3RjIwICA1MDQwMDA0MiAgIFNSTCBWMCwgVjAsIDEwDQpCRkQwN0YyMiAgQjA0MjUwNDAgICBPUkkgVjAsIFpFUk8sIC0yMDQxNA0KQkZEMDdGMjQgIDAwMDNCMDQyICAgU0xUSVUgVjAsIFYwLCAzDQpCRkQwN0YyOCAgMDAxMTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwN0Y0RQ0KQkZEMDdGMkMgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDdGMzAgIEZGRkU0MUEyICAgTFVJIFYwLCAweEZGRkUNCkJGRDA3RjMyICA1MDQyRkZGRSAgIExXIFJBLCAyMDU0NihTOCkNCkJGRDA3RjM0ICAwM0ZGNTA0MiAgIE9SSSBWMCwgVjAsIDEwMjMNCkJGRDA3RjM4ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDdGM0EgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KQkZEMDdGM0UgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDdGNDIgIDBDMDA1MDQyICAgT1JJIFYwLCBWMCwgMzA3Mg0KQkZEMDdGNDQgICAgICAwQzAwICAgTk9QDQpCRkQwN0Y0NiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDdGNDggIDRFNDY3N0U4ICAgSkFMUyB2UG9ydFNldENQMFN0YXR1cw0KQkZEMDdGNEEgICAgICA0RTQ2ICAgQURESVUgUzIsIFMyLCAzDQpCRkQwN0Y0QyAgICAgIDBDMDAgICBOT1ANCjE2Mjg6ICAgICAgICAgICAgICAgIAl4U2NoZWR1bGVyUnVubmluZyA9IHBkRkFMU0U7DQpCRkQwN0Y0RSAgODA0NEY4MUMgICBTVyBaRVJPLCAtMzI3MDAoR1ApDQoxNjI5OiAgICAgICAgICAgICAgICAJdlBvcnRFbmRTY2hlZHVsZXIoKTsNCkJGRDA3RjUyICA0QkQ0NzdFOCAgIEpBTFMgdlBvcnRFbmRTY2hlZHVsZXINCkJGRDA3RjU0ICAgICAgNEJENCAgIExXIFM4LCA4MChTUCkNCkJGRDA3RjU2ICAgICAgMEMwMCAgIE5PUA0KMTYzMDogICAgICAgICAgICAgICAgfQ0KQkZEMDdGNTggICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3RjVBICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA3RjVDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA3RjVFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3RjYwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA3RjYyICAgICAgMEMwMCAgIE5PUA0KMTYzMTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE2MzI6ICAgICAgICAgICAgICAgIA0KMTYzMzogICAgICAgICAgICAgICAgdm9pZCB2VGFza1N1c3BlbmRBbGwoIHZvaWQgKQ0KMTYzNDogICAgICAgICAgICAgICAgew0KQkZEMDlERTggICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOA0KQkZEMDlERUEgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApDQpCRkQwOURFQyAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMTYzNTogICAgICAgICAgICAgICAgCS8qIEEgY3JpdGljYWwgc2VjdGlvbiBpcyBub3QgcmVxdWlyZWQgYXMgdGhlIHZhcmlhYmxlIGlzIG9mIHR5cGUNCjE2MzY6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90LiAgUGxlYXNlIHJlYWQgUmljaGFyZCBCYXJyeSdzIHJlcGx5IGluIHRoZSBmb2xsb3dpbmcgbGluayB0byBhDQoxNjM3OiAgICAgICAgICAgICAgICAJcG9zdCBpbiB0aGUgRnJlZVJUT1Mgc3VwcG9ydCBmb3J1bSBiZWZvcmUgcmVwb3J0aW5nIHRoaXMgYXMgYSBidWchIC0NCjE2Mzg6ICAgICAgICAgICAgICAgIAlodHRwOi8vZ29vLmdsL3d1NGFjciAqLw0KMTYzOTogICAgICAgICAgICAgICAgCSsrdXhTY2hlZHVsZXJTdXNwZW5kZWQ7DQpCRkQwOURFRSAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQ0KQkZEMDlERjIgICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxDQpCRkQwOURGNCAgODA1Q0Y4NUMgICBTVyBWMCwgLTMyNjc2KEdQKQ0KMTY0MDogICAgICAgICAgICAgICAgfQ0KQkZEMDlERjggICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5REZBICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlERkMgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOURGRSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUUwMCAgICAgIDBDMDAgICBOT1ANCjE2NDE6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNjQyOiAgICAgICAgICAgICAgICANCjE2NDM6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICE9IDAgKQ0KMTY0NDogICAgICAgICAgICAgICAgDQoxNjQ1OiAgICAgICAgICAgICAgICAJc3RhdGljIFRpY2tUeXBlX3QgcHJ2R2V0RXhwZWN0ZWRJZGxlVGltZSggdm9pZCApDQoxNjQ2OiAgICAgICAgICAgICAgICAJew0KMTY0NzogICAgICAgICAgICAgICAgCVRpY2tUeXBlX3QgeFJldHVybjsNCjE2NDg6ICAgICAgICAgICAgICAgIA0KMTY0OTogICAgICAgICAgICAgICAgCQlpZiggcHhDdXJyZW50VENCLT51eFByaW9yaXR5ID4gdHNrSURMRV9QUklPUklUWSApDQoxNjUwOiAgICAgICAgICAgICAgICAJCXsNCjE2NTE6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSAwOw0KMTY1MjogICAgICAgICAgICAgICAgCQl9DQoxNjUzOiAgICAgICAgICAgICAgICAJCWVsc2UgaWYoIGxpc3RDVVJSRU5UX0xJU1RfTEVOR1RIKCAmKCBweFJlYWR5VGFza3NMaXN0c1sgdHNrSURMRV9QUklPUklUWSBdICkgKSA+IDEgKQ0KMTY1NDogICAgICAgICAgICAgICAgCQl7DQoxNjU1OiAgICAgICAgICAgICAgICAJCQkvKiBUaGVyZSBhcmUgb3RoZXIgaWRsZSBwcmlvcml0eSB0YXNrcyBpbiB0aGUgcmVhZHkgc3RhdGUuICBJZg0KMTY1NjogICAgICAgICAgICAgICAgCQkJdGltZSBzbGljaW5nIGlzIHVzZWQgdGhlbiB0aGUgdmVyeSBuZXh0IHRpY2sgaW50ZXJydXB0IG11c3QgYmUNCjE2NTc6ICAgICAgICAgICAgICAgIAkJCXByb2Nlc3NlZC4gKi8NCjE2NTg6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSAwOw0KMTY1OTogICAgICAgICAgICAgICAgCQl9DQoxNjYwOiAgICAgICAgICAgICAgICAJCWVsc2UNCjE2NjE6ICAgICAgICAgICAgICAgIAkJew0KMTY2MjogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHhOZXh0VGFza1VuYmxvY2tUaW1lIC0geFRpY2tDb3VudDsNCjE2NjM6ICAgICAgICAgICAgICAgIAkJfQ0KMTY2NDogICAgICAgICAgICAgICAgDQoxNjY1OiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KMTY2NjogICAgICAgICAgICAgICAgCX0NCjE2Njc6ICAgICAgICAgICAgICAgIA0KMTY2ODogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICovDQoxNjY5OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTY3MDogICAgICAgICAgICAgICAgDQoxNjcxOiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhUYXNrUmVzdW1lQWxsKCB2b2lkICkNCjE2NzI6ICAgICAgICAgICAgICAgIHsNCkJGRDAyQjFDICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwDQpCRkQwMkIxRSAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApDQpCRkQwMkIyMCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApDQpCRkQwMkIyMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMTY3MzogICAgICAgICAgICAgICAgVENCX3QgKnB4VENCOw0KMTY3NDogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4QWxyZWFkeVlpZWxkZWQgPSBwZEZBTFNFOw0KQkZEMDJCMjQgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQoxNjc1OiAgICAgICAgICAgICAgICANCjE2NzY6ICAgICAgICAgICAgICAgIAkvKiBJZiB1eFNjaGVkdWxlclN1c3BlbmRlZCBpcyB6ZXJvIHRoZW4gdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBtYXRjaCBhDQoxNjc3OiAgICAgICAgICAgICAgICAJcHJldmlvdXMgY2FsbCB0byB2VGFza1N1c3BlbmRBbGwoKS4gKi8NCjE2Nzg6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHV4U2NoZWR1bGVyU3VzcGVuZGVkICk7DQpCRkQwMkIyOCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQ0KQkZEMDJCMkMgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJCNDINCkJGRDAyQjMwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMkIzMiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMkIzNCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDJCMzYgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMkIzOCAgMDY4RTMwQTAgICBBRERJVSBBMSwgWkVSTywgMTY3OA0KQkZEMDJCM0EgICAgICAwNjhFICAgQUREVSBBMSwgQTMsIFMwDQpCRkQwMkIzQyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAyQjNFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMkI0MCAgICAgIDBDMDAgICBOT1ANCjE2Nzk6ICAgICAgICAgICAgICAgIA0KMTY4MDogICAgICAgICAgICAgICAgCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgYW4gSVNSIGNhdXNlZCBhIHRhc2sgdG8gYmUgcmVtb3ZlZCBmcm9tIGFuIGV2ZW50DQoxNjgxOiAgICAgICAgICAgICAgICAJbGlzdCB3aGlsZSB0aGUgc2NoZWR1bGVyIHdhcyBzdXNwZW5kZWQuICBJZiB0aGlzIHdhcyB0aGUgY2FzZSB0aGVuIHRoZQ0KMTY4MjogICAgICAgICAgICAgICAgCXJlbW92ZWQgdGFzayB3aWxsIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgeFBlbmRpbmdSZWFkeUxpc3QuICBPbmNlIHRoZQ0KMTY4MzogICAgICAgICAgICAgICAgCXNjaGVkdWxlciBoYXMgYmVlbiByZXN1bWVkIGl0IGlzIHNhZmUgdG8gbW92ZSBhbGwgdGhlIHBlbmRpbmcgcmVhZHkNCjE2ODQ6ICAgICAgICAgICAgICAgIAl0YXNrcyBmcm9tIHRoaXMgbGlzdCBpbnRvIHRoZWlyIGFwcHJvcHJpYXRlIHJlYWR5IGxpc3QuICovDQoxNjg1OiAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMkI0MiAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDJCNDQgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwMkI0NiAgICAgIDBDMDAgICBOT1ANCjE2ODY6ICAgICAgICAgICAgICAgIAl7DQoxNjg3OiAgICAgICAgICAgICAgICAJCS0tdXhTY2hlZHVsZXJTdXNwZW5kZWQ7DQpCRkQwMkI0OCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQ0KQkZEMDJCNEMgICAgICA2RDJFICAgQURESVUgVjAsIFYwLCAtMQ0KQkZEMDJCNEUgIDgwNUNGODVDICAgU1cgVjAsIC0zMjY3NihHUCkNCjE2ODg6ICAgICAgICAgICAgICAgIA0KMTY4OTogICAgICAgICAgICAgICAgCQlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0UgKQ0KQkZEMDJCNTIgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkNCkJGRDAyQjU2ICAwMDdENDBBMiAgIEJORVpDIFYwLCAweEJGRDAyQzU0DQoxNjkwOiAgICAgICAgICAgICAgICAJCXsNCjE2OTE6ICAgICAgICAgICAgICAgIAkJCWlmKCB1eEN1cnJlbnROdW1iZXJPZlRhc2tzID4gKCBVQmFzZVR5cGVfdCApIDBVICkNCkJGRDAyQjVBICA4MDM4RkM1QyAgIExXIFYwLCAtMzI3MTIoR1ApDQpCRkQwMkI1RSAgMDA3OTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMkM1NA0KMTY5MjogICAgICAgICAgICAgICAgCQkJew0KMTY5MzogICAgICAgICAgICAgICAgCQkJCS8qIE1vdmUgYW55IHJlYWRpZWQgdGFza3MgZnJvbSB0aGUgcGVuZGluZyBsaXN0IGludG8gdGhlDQoxNjk0OiAgICAgICAgICAgICAgICAJCQkJYXBwcm9wcmlhdGUgcmVhZHkgbGlzdC4gKi8NCjE2OTU6ICAgICAgICAgICAgICAgIAkJCQl3aGlsZSggbGlzdExJU1RfSVNfRU1QVFkoICZ4UGVuZGluZ1JlYWR5TGlzdCApID09IHBkRkFMU0UgKQ0KQkZEMDJCNjIgICAgICBDQzQyICAgQiAweEJGRDAyQkU4DQpCRkQwMkI2NCAgICAgIDBDMDAgICBOT1ANCkJGRDAyQkU4ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwMkJFQSAgRkM0MkJGRDIgICBMREMxIEYzMCwgLTk1OChTMikNCkJGRDAyQkVDICA4MEQwRkM0MiAgIExXIFYwLCAtMzI1NjAoVjApDQpCRkQwMkJGMCAgRkZCOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMkI2Ng0KQkZEMDJCRjIgIEZDNUNGRkI5ICAgTFcgU1AsIC05MzIoVDkpDQoxNjk2OiAgICAgICAgICAgICAgICAJCQkJew0KMTY5NzogICAgICAgICAgICAgICAgCQkJCQlweFRDQiA9ICggVENCX3QgKiApIGxpc3RHRVRfT1dORVJfT0ZfSEVBRF9FTlRSWSggKCAmeFBlbmRpbmdSZWFkeUxpc3QgKSApOw0KQkZEMDJCNjYgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAyQjY4ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAyQjZBICA4MEQwMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNTYwDQpCRkQwMkI2RSAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApDQpCRkQwMkI3MCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApDQpCRkQwMkI3MiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoxNjk4OiAgICAgICAgICAgICAgICAJCQkJCSggdm9pZCApIHV4TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCkJGRDAyQjc2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyQjc4ICA2RDJDMDAxNCAgIEVYVCBaRVJPLCBTNCwgMjAsIDE0DQpCRkQwMkI3QSAgICAgIDZEMkMgICBBRERJVSBWMCwgVjAsIDI0DQpCRkQwMkI3QyAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDJCN0UgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUNCkJGRDAyQjgwICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDENCkJGRDAyQjgyICAgICAgMEMwMCAgIE5PUA0KMTY5OTogICAgICAgICAgICAgICAgCQkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDAyQjg0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyQjg4ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDJCOEEgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAyQjhDICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMkI4RSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMkI5MCAgICAgIDBDMDAgICBOT1ANCjE3MDA6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFRDQiApOw0KQkZEMDJCOTIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDJCOTYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDJCOTggICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAyQjlBICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQ0KQkZEMDJCOUMgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkNCkJGRDAyQjlFICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApDQpCRkQwMkJBMiAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQ0KQkZEMDJCQTQgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCkJGRDAyQkE4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyQkFDICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAyQkFFICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAyQkIwICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAyQkIyICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQ0KQkZEMDJCQjQgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAyQkI2ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAyQkI4ICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwMkJCQyAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjANCkJGRDAyQkJFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyQkMyICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDJCQzQgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDAyQkM2ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMkJDOCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwMkJDQSAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDAyQkNDICAgICAgMEMwMCAgIE5PUA0KMTcwMTogICAgICAgICAgICAgICAgDQoxNzAyOiAgICAgICAgICAgICAgICAJCQkJCS8qIElmIHRoZSBtb3ZlZCB0YXNrIGhhcyBhIHByaW9yaXR5IGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50DQoxNzAzOiAgICAgICAgICAgICAgICAJCQkJCXRhc2sgdGhlbiBhIHlpZWxkIG11c3QgYmUgcGVyZm9ybWVkLiAqLw0KMTcwNDogICAgICAgICAgICAgICAgCQkJCQlpZiggcHhUQ0ItPnV4UHJpb3JpdHkgPj0gcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCkJGRDAyQkNFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyQkQyICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkNCkJGRDAyQkQ0ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMkJEOCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMkJEQSAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDAyQkRDICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDJCREUgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJCRTgNCjE3MDU6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTcwNjogICAgICAgICAgICAgICAgCQkJCQkJeFlpZWxkUGVuZGluZyA9IHBkVFJVRTsNCkJGRDAyQkUyICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMkJFNCAgODA0Q0Y4NUMgICBTVyBWMCwgLTMyNjkyKEdQKQ0KMTcwNzogICAgICAgICAgICAgICAgCQkJCQl9DQoxNzA4OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjE3MDk6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTcxMDogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTcxMTogICAgICAgICAgICAgICAgCQkJCQl9DQoxNzEyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTcxMzogICAgICAgICAgICAgICAgDQoxNzE0OiAgICAgICAgICAgICAgICAJCQkJLyogSWYgYW55IHRpY2tzIG9jY3VycmVkIHdoaWxlIHRoZSBzY2hlZHVsZXIgd2FzIHN1c3BlbmRlZCB0aGVuDQoxNzE1OiAgICAgICAgICAgICAgICAJCQkJdGhleSBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vdy4gIFRoaXMgZW5zdXJlcyB0aGUgdGljayBjb3VudCBkb2VzDQoxNzE2OiAgICAgICAgICAgICAgICAJCQkJbm90CXNsaXAsIGFuZCB0aGF0IGFueSBkZWxheWVkIHRhc2tzIGFyZSByZXN1bWVkIGF0IHRoZSBjb3JyZWN0DQoxNzE3OiAgICAgICAgICAgICAgICAJCQkJdGltZS4gKi8NCjE3MTg6ICAgICAgICAgICAgICAgIAkJCQlpZiggdXhQZW5kZWRUaWNrcyA+ICggVUJhc2VUeXBlX3QgKSAwVSApDQpCRkQwMkJGNCAgODA0OEZDNUMgICBMVyBWMCwgLTMyNjk2KEdQKQ0KQkZEMDJCRjggIDAwMTM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDJDMjINCjE3MTk6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNzIwOiAgICAgICAgICAgICAgICAJCQkJCXdoaWxlKCB1eFBlbmRlZFRpY2tzID4gKCBVQmFzZVR5cGVfdCApIDBVICkNCkJGRDAyQkZDICAgICAgQ0MwRSAgIEIgMHhCRkQwMkMxQQ0KQkZEMDJCRkUgICAgICAwQzAwICAgTk9QDQpCRkQwMkMxQSAgODA0OEZDNUMgICBMVyBWMCwgLTMyNjk2KEdQKQ0KQkZEMDJDMUUgIEZGRUY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJDMDANCkJGRDAyQzIwICBGQzdDRkZFRiAgIExXIFJBLCAtOTAwKFQ3KQ0KMTcyMTogICAgICAgICAgICAgICAgCQkJCQl7DQoxNzIyOiAgICAgICAgICAgICAgICAJCQkJCQlpZiggeFRhc2tJbmNyZW1lbnRUaWNrKCkgIT0gcGRGQUxTRSApDQpCRkQwMkMwMCAgMTA0MDc3RTggICBKQUxTIHhUYXNrSW5jcmVtZW50VGljaw0KQkZEMDJDMDIgIDBDMDAxMDQwICAgQURESSBWMCwgWkVSTywgMzA3Mg0KQkZEMDJDMDQgICAgICAwQzAwICAgTk9QDQpCRkQwMkMwNiAgMDAwMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMkMxMA0KMTcyMzogICAgICAgICAgICAgICAgCQkJCQkJew0KMTcyNDogICAgICAgICAgICAgICAgCQkJCQkJCXhZaWVsZFBlbmRpbmcgPSBwZFRSVUU7DQpCRkQwMkMwQSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDJDMEMgIDgwNENGODVDICAgU1cgVjAsIC0zMjY5MihHUCkNCjE3MjU6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE3MjY6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjE3Mjc6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE3Mjg6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNzI5OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxNzMwOiAgICAgICAgICAgICAgICAJCQkJCQktLXV4UGVuZGVkVGlja3M7DQpCRkQwMkMxMCAgODA0OEZDNUMgICBMVyBWMCwgLTMyNjk2KEdQKQ0KQkZEMDJDMTQgICAgICA2RDJFICAgQURESVUgVjAsIFYwLCAtMQ0KQkZEMDJDMTYgIDgwNDhGODVDICAgU1cgVjAsIC0zMjY5NihHUCkNCjE3MzE6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTczMjogICAgICAgICAgICAgICAgCQkJCX0NCjE3MzM6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoxNzM0OiAgICAgICAgICAgICAgICAJCQkJew0KMTczNTogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNzM2OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTczNzogICAgICAgICAgICAgICAgDQoxNzM4OiAgICAgICAgICAgICAgICAJCQkJaWYoIHhZaWVsZFBlbmRpbmcgPT0gcGRUUlVFICkNCkJGRDAyQzIyICA4MDRDRkM3QyAgIExXIFYxLCAtMzI2OTIoR1ApDQpCRkQwMkMyNiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDJDMjggIDAwMTRCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMkM1NA0KQkZEMDJDMkEgIDBDMDAwMDE0ICAgU0xMIFpFUk8sIFM0LCAxDQpCRkQwMkMyQyAgICAgIDBDMDAgICBOT1ANCjE3Mzk6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNzQwOiAgICAgICAgICAgICAgICAJCQkJCSNpZiggY29uZmlnVVNFX1BSRUVNUFRJT04gIT0gMCApDQoxNzQxOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE3NDI6ICAgICAgICAgICAgICAgIAkJCQkJCXhBbHJlYWR5WWllbGRlZCA9IHBkVFJVRTsNCkJGRDAyQzJFICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMkMzMCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxNzQzOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE3NDQ6ICAgICAgICAgICAgICAgIAkJCQkJI2VuZGlmDQoxNzQ1OiAgICAgICAgICAgICAgICAJCQkJCXRhc2tZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwMkMzNCAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwMkMzNiAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01DQpCRkQwMkMzOCAgICAgIDBDMDAgICBOT1ANCkJGRDAyQzNBICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCkJGRDAyQzNFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAyQzQyICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDJDNDYgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KQkZEMDJDNEEgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDJDNEUgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwMkM1MCAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMNCkJGRDAyQzUyICAgICAgMEMwMCAgIE5PUA0KMTc0NjogICAgICAgICAgICAgICAgCQkJCX0NCjE3NDc6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoxNzQ4OiAgICAgICAgICAgICAgICAJCQkJew0KMTc0OTogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNzUwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTc1MTogICAgICAgICAgICAgICAgCQkJfQ0KMTc1MjogICAgICAgICAgICAgICAgCQl9DQoxNzUzOiAgICAgICAgICAgICAgICAJCWVsc2UNCjE3NTQ6ICAgICAgICAgICAgICAgIAkJew0KMTc1NTogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTc1NjogICAgICAgICAgICAgICAgCQl9DQoxNzU3OiAgICAgICAgICAgICAgICAJfQ0KMTc1ODogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMkM1NCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMkM1NiAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNDQ1QQ0KQkZEMDJDNTggICAgICAwQzAwICAgTk9QDQoxNzU5OiAgICAgICAgICAgICAgICANCjE3NjA6ICAgICAgICAgICAgICAgIAlyZXR1cm4geEFscmVhZHlZaWVsZGVkOw0KQkZEMDJDNUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMTc2MTogICAgICAgICAgICAgICAgfQ0KQkZEMDJDNUUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAyQzYwICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkNCkJGRDAyQzYyICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkNCkJGRDAyQzY0ICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDANCkJGRDAyQzY2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAyQzY4ICAgICAgMEMwMCAgIE5PUA0KMTc2MjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNzYzOiAgICAgICAgICAgICAgICANCjE3NjQ6ICAgICAgICAgICAgICAgIFRpY2tUeXBlX3QgeFRhc2tHZXRUaWNrQ291bnQoIHZvaWQgKQ0KMTc2NTogICAgICAgICAgICAgICAgew0KQkZEMDk5OTQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA5OTk2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA5OTk4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA5OTlBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoxNzY2OiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUaWNrczsNCjE3Njc6ICAgICAgICAgICAgICAgIA0KMTc2ODogICAgICAgICAgICAgICAgCS8qIENyaXRpY2FsIHNlY3Rpb24gcmVxdWlyZWQgaWYgcnVubmluZyBvbiBhIDE2IGJpdCBwcm9jZXNzb3IuICovDQoxNzY5OiAgICAgICAgICAgICAgICAJcG9ydFRJQ0tfVFlQRV9FTlRFUl9DUklUSUNBTCgpOw0KQkZEMDk5OUMgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDA5OTlFICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDk5QTAgICAgICAwQzAwICAgTk9QDQoxNzcwOiAgICAgICAgICAgICAgICAJew0KMTc3MTogICAgICAgICAgICAgICAgCQl4VGlja3MgPSB4VGlja0NvdW50Ow0KQkZEMDk5QTIgIDgwM0NGQzVDICAgTFcgVjAsIC0zMjcwOChHUCkNCkJGRDA5OUE2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjE3NzI6ICAgICAgICAgICAgICAgIAl9DQoxNzczOiAgICAgICAgICAgICAgICAJcG9ydFRJQ0tfVFlQRV9FWElUX0NSSVRJQ0FMKCk7DQpCRkQwOTlBQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwOTlBQyAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwQjFCMA0KQkZEMDk5QUUgICAgICAwQzAwICAgTk9QDQoxNzc0OiAgICAgICAgICAgICAgICANCjE3NzU6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFRpY2tzOw0KQkZEMDk5QjAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMTc3NjogICAgICAgICAgICAgICAgfQ0KQkZEMDk5QjQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5OUI2ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA5OUI4ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA5OUJBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA5OUJDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5OUJFICAgICAgMEMwMCAgIE5PUA0KMTc3NzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNzc4OiAgICAgICAgICAgICAgICANCjE3Nzk6ICAgICAgICAgICAgICAgIFRpY2tUeXBlX3QgeFRhc2tHZXRUaWNrQ291bnRGcm9tSVNSKCB2b2lkICkNCjE3ODA6ICAgICAgICAgICAgICAgIHsNCkJGRDA5ODQ0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwOTg0NiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwOTg0OCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwOTg0QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMTc4MTogICAgICAgICAgICAgICAgVGlja1R5cGVfdCB4UmV0dXJuOw0KMTc4MjogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhTYXZlZEludGVycnVwdFN0YXR1czsNCjE3ODM6ICAgICAgICAgICAgICAgIA0KMTc4NDogICAgICAgICAgICAgICAgCS8qIFJUT1MgcG9ydHMgdGhhdCBzdXBwb3J0IGludGVycnVwdCBuZXN0aW5nIGhhdmUgdGhlIGNvbmNlcHQgb2YgYSBtYXhpbXVtDQoxNzg1OiAgICAgICAgICAgICAgICAJc3lzdGVtIGNhbGwgKG9yIG1heGltdW0gQVBJIGNhbGwpIGludGVycnVwdCBwcmlvcml0eS4gIEludGVycnVwdHMgdGhhdCBhcmUNCjE3ODY6ICAgICAgICAgICAgICAgIAlhYm92ZSB0aGUgbWF4aW11bSBzeXN0ZW0gY2FsbCBwcmlvcml0eSBhcmUga2VwdCBwZXJtYW5lbnRseSBlbmFibGVkLCBldmVuDQoxNzg3OiAgICAgICAgICAgICAgICAJd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvDQoxNzg4OiAgICAgICAgICAgICAgICAJRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucy4gIElmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaA0KMTc4OTogICAgICAgICAgICAgICAgCXRoZW4gcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIHdpbGwgcmVzdWx0IGluIGFuIGFzc2VydGlvbg0KMTc5MDogICAgICAgICAgICAgICAgCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGJlZW4NCjE3OTE6ICAgICAgICAgICAgICAgIAlhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlIHRoZSBjb25maWd1cmVkIG1heGltdW0gc3lzdGVtIGNhbGwgcHJpb3JpdHkuDQoxNzkyOiAgICAgICAgICAgICAgICAJT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0cw0KMTc5MzogICAgICAgICAgICAgICAgCXRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYXQgb3IgKGxvZ2ljYWxseSkgYmVsb3cgdGhlIG1heGltdW0NCjE3OTQ6ICAgICAgICAgICAgICAgIAlzeXN0ZW0gY2FsbAlpbnRlcnJ1cHQgcHJpb3JpdHkuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQNCjE3OTU6ICAgICAgICAgICAgICAgIAlzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4NCjE3OTY6ICAgICAgICAgICAgICAgIAlNb3JlIGluZm9ybWF0aW9uIChhbGJlaXQgQ29ydGV4LU0gc3BlY2lmaWMpIGlzIHByb3ZpZGVkIG9uIHRoZSBmb2xsb3dpbmcNCjE3OTc6ICAgICAgICAgICAgICAgIAlsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQoxNzk4OiAgICAgICAgICAgICAgICAJcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpOw0KMTc5OTogICAgICAgICAgICAgICAgDQoxODAwOiAgICAgICAgICAgICAgICAJdXhTYXZlZEludGVycnVwdFN0YXR1cyA9IHBvcnRUSUNLX1RZUEVfU0VUX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCk7DQpCRkQwOTg0QyAgNDc1RTc3RTggICBKQUxTIHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSDQpCRkQwOTg1MCAgICAgIDBDMDAgICBOT1ANCkJGRDA5ODUyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjE4MDE6ICAgICAgICAgICAgICAgIAl7DQoxODAyOiAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSB4VGlja0NvdW50Ow0KQkZEMDk4NTYgIDgwM0NGQzVDICAgTFcgVjAsIC0zMjcwOChHUCkNCkJGRDA5ODVBICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjE4MDM6ICAgICAgICAgICAgICAgIAl9DQoxODA0OiAgICAgICAgICAgICAgICAJcG9ydFRJQ0tfVFlQRV9DTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDk4NUUgIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQ0KQkZEMDk4NjIgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDA5ODY0ICAgICAgNEQ1RSAgIEFERElVIFQyLCBUMiwgLTENCkJGRDA5ODY2ICAgICAgMEMwMCAgIE5PUA0KMTgwNTogICAgICAgICAgICAgICAgDQoxODA2OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwOTg2OCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQoxODA3OiAgICAgICAgICAgICAgICB9DQpCRkQwOTg2QyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDk4NkUgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDk4NzAgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDk4NzIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDk4NzQgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDk4NzYgICAgICAwQzAwICAgTk9QDQoxODA4OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE4MDk6ICAgICAgICAgICAgICAgIA0KMTgxMDogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhUYXNrR2V0TnVtYmVyT2ZUYXNrcyggdm9pZCApDQoxODExOiAgICAgICAgICAgICAgICB7DQpCRkQwOUU5OCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUU5QSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5RTlDICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoxODEyOiAgICAgICAgICAgICAgICAJLyogQSBjcml0aWNhbCBzZWN0aW9uIGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZSB2YXJpYWJsZXMgYXJlIG9mIHR5cGUNCjE4MTM6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90LiAqLw0KMTgxNDogICAgICAgICAgICAgICAgCXJldHVybiB1eEN1cnJlbnROdW1iZXJPZlRhc2tzOw0KQkZEMDlFOUUgIDgwMzhGQzVDICAgTFcgVjAsIC0zMjcxMihHUCkNCjE4MTU6ICAgICAgICAgICAgICAgIH0NCkJGRDA5RUEyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUVBNCAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA5RUE2ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KQkZEMDlFQTggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDlFQUEgICAgICAwQzAwICAgTk9QDQoxODE2OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE4MTc6ICAgICAgICAgICAgICAgIA0KMTgxODogICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV9wY1Rhc2tHZXRUYXNrTmFtZSA9PSAxICkNCjE4MTk6ICAgICAgICAgICAgICAgIA0KMTgyMDogICAgICAgICAgICAgICAgCWNoYXIgKnBjVGFza0dldFRhc2tOYW1lKCBUYXNrSGFuZGxlX3QgeFRhc2tUb1F1ZXJ5ICkgLypsaW50ICFlOTcxIFVucXVhbGlmaWVkIGNoYXIgdHlwZXMgYXJlIGFsbG93ZWQgZm9yIHN0cmluZ3MgYW5kIHNpbmdsZSBjaGFyYWN0ZXJzIG9ubHkuICovDQoxODIxOiAgICAgICAgICAgICAgICAJew0KMTgyMjogICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjE4MjM6ICAgICAgICAgICAgICAgIA0KMTgyNDogICAgICAgICAgICAgICAgCQkvKiBJZiBudWxsIGlzIHBhc3NlZCBpbiBoZXJlIHRoZW4gdGhlIG5hbWUgb2YgdGhlIGNhbGxpbmcgdGFzayBpcyBiZWluZyBxdWVyaWVkLiAqLw0KMTgyNTogICAgICAgICAgICAgICAgCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHhUYXNrVG9RdWVyeSApOw0KMTgyNjogICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHB4VENCICk7DQoxODI3OiAgICAgICAgICAgICAgICAJCXJldHVybiAmKCBweFRDQi0+cGNUYXNrTmFtZVsgMCBdICk7DQoxODI4OiAgICAgICAgICAgICAgICAJfQ0KMTgyOTogICAgICAgICAgICAgICAgDQoxODMwOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV9wY1Rhc2tHZXRUYXNrTmFtZSAqLw0KMTgzMTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxODMyOiAgICAgICAgICAgICAgICANCjE4MzM6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjE4MzQ6ICAgICAgICAgICAgICAgIA0KMTgzNTogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4VGFza0dldFN5c3RlbVN0YXRlKCBUYXNrU3RhdHVzX3QgKiBjb25zdCBweFRhc2tTdGF0dXNBcnJheSwgY29uc3QgVUJhc2VUeXBlX3QgdXhBcnJheVNpemUsIHVpbnQzMl90ICogY29uc3QgcHVsVG90YWxSdW5UaW1lICkNCjE4MzY6ICAgICAgICAgICAgICAgIAl7DQoxODM3OiAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhUYXNrID0gMCwgdXhRdWV1ZSA9IGNvbmZpZ01BWF9QUklPUklUSUVTOw0KMTgzODogICAgICAgICAgICAgICAgDQoxODM5OiAgICAgICAgICAgICAgICAJCXZUYXNrU3VzcGVuZEFsbCgpOw0KMTg0MDogICAgICAgICAgICAgICAgCQl7DQoxODQxOiAgICAgICAgICAgICAgICAJCQkvKiBJcyB0aGVyZSBhIHNwYWNlIGluIHRoZSBhcnJheSBmb3IgZWFjaCB0YXNrIGluIHRoZSBzeXN0ZW0/ICovDQoxODQyOiAgICAgICAgICAgICAgICAJCQlpZiggdXhBcnJheVNpemUgPj0gdXhDdXJyZW50TnVtYmVyT2ZUYXNrcyApDQoxODQzOiAgICAgICAgICAgICAgICAJCQl7DQoxODQ0OiAgICAgICAgICAgICAgICAJCQkJLyogRmlsbCBpbiBhbiBUYXNrU3RhdHVzX3Qgc3RydWN0dXJlIHdpdGggaW5mb3JtYXRpb24gb24gZWFjaA0KMTg0NTogICAgICAgICAgICAgICAgCQkJCXRhc2sgaW4gdGhlIFJlYWR5IHN0YXRlLiAqLw0KMTg0NjogICAgICAgICAgICAgICAgCQkJCWRvDQoxODQ3OiAgICAgICAgICAgICAgICAJCQkJew0KMTg0ODogICAgICAgICAgICAgICAgCQkJCQl1eFF1ZXVlLS07DQoxODQ5OiAgICAgICAgICAgICAgICAJCQkJCXV4VGFzayArPSBwcnZMaXN0VGFza1dpdGhpblNpbmdsZUxpc3QoICYoIHB4VGFza1N0YXR1c0FycmF5WyB1eFRhc2sgXSApLCAmKCBweFJlYWR5VGFza3NMaXN0c1sgdXhRdWV1ZSBdICksIGVSZWFkeSApOw0KMTg1MDogICAgICAgICAgICAgICAgDQoxODUxOiAgICAgICAgICAgICAgICAJCQkJfSB3aGlsZSggdXhRdWV1ZSA+ICggVUJhc2VUeXBlX3QgKSB0c2tJRExFX1BSSU9SSVRZICk7IC8qbGludCAhZTk2MSBNSVNSQSBleGNlcHRpb24gYXMgdGhlIGNhc3RzIGFyZSBvbmx5IHJlZHVuZGFudCBmb3Igc29tZSBwb3J0cy4gKi8NCjE4NTI6ICAgICAgICAgICAgICAgIA0KMTg1MzogICAgICAgICAgICAgICAgCQkJCS8qIEZpbGwgaW4gYW4gVGFza1N0YXR1c190IHN0cnVjdHVyZSB3aXRoIGluZm9ybWF0aW9uIG9uIGVhY2gNCjE4NTQ6ICAgICAgICAgICAgICAgIAkJCQl0YXNrIGluIHRoZSBCbG9ja2VkIHN0YXRlLiAqLw0KMTg1NTogICAgICAgICAgICAgICAgCQkJCXV4VGFzayArPSBwcnZMaXN0VGFza1dpdGhpblNpbmdsZUxpc3QoICYoIHB4VGFza1N0YXR1c0FycmF5WyB1eFRhc2sgXSApLCAoIExpc3RfdCAqICkgcHhEZWxheWVkVGFza0xpc3QsIGVCbG9ja2VkICk7DQoxODU2OiAgICAgICAgICAgICAgICAJCQkJdXhUYXNrICs9IHBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCggJiggcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdICksICggTGlzdF90ICogKSBweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0LCBlQmxvY2tlZCApOw0KMTg1NzogICAgICAgICAgICAgICAgDQoxODU4OiAgICAgICAgICAgICAgICAJCQkJI2lmKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KMTg1OTogICAgICAgICAgICAgICAgCQkJCXsNCjE4NjA6ICAgICAgICAgICAgICAgIAkJCQkJLyogRmlsbCBpbiBhbiBUYXNrU3RhdHVzX3Qgc3RydWN0dXJlIHdpdGggaW5mb3JtYXRpb24gb24NCjE4NjE6ICAgICAgICAgICAgICAgIAkJCQkJZWFjaCB0YXNrIHRoYXQgaGFzIGJlZW4gZGVsZXRlZCBidXQgbm90IHlldCBjbGVhbmVkIHVwLiAqLw0KMTg2MjogICAgICAgICAgICAgICAgCQkJCQl1eFRhc2sgKz0gcHJ2TGlzdFRhc2tXaXRoaW5TaW5nbGVMaXN0KCAmKCBweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0gKSwgJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiwgZURlbGV0ZWQgKTsNCjE4NjM6ICAgICAgICAgICAgICAgIAkJCQl9DQoxODY0OiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmDQoxODY1OiAgICAgICAgICAgICAgICANCjE4NjY6ICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjE4Njc6ICAgICAgICAgICAgICAgIAkJCQl7DQoxODY4OiAgICAgICAgICAgICAgICAJCQkJCS8qIEZpbGwgaW4gYW4gVGFza1N0YXR1c190IHN0cnVjdHVyZSB3aXRoIGluZm9ybWF0aW9uIG9uDQoxODY5OiAgICAgICAgICAgICAgICAJCQkJCWVhY2ggdGFzayBpbiB0aGUgU3VzcGVuZGVkIHN0YXRlLiAqLw0KMTg3MDogICAgICAgICAgICAgICAgCQkJCQl1eFRhc2sgKz0gcHJ2TGlzdFRhc2tXaXRoaW5TaW5nbGVMaXN0KCAmKCBweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0gKSwgJnhTdXNwZW5kZWRUYXNrTGlzdCwgZVN1c3BlbmRlZCApOw0KMTg3MTogICAgICAgICAgICAgICAgCQkJCX0NCjE4NzI6ICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYNCjE4NzM6ICAgICAgICAgICAgICAgIA0KMTg3NDogICAgICAgICAgICAgICAgCQkJCSNpZiAoIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTID09IDEpDQoxODc1OiAgICAgICAgICAgICAgICAJCQkJew0KMTg3NjogICAgICAgICAgICAgICAgCQkJCQlpZiggcHVsVG90YWxSdW5UaW1lICE9IE5VTEwgKQ0KMTg3NzogICAgICAgICAgICAgICAgCQkJCQl7DQoxODc4OiAgICAgICAgICAgICAgICAJCQkJCQkjaWZkZWYgcG9ydEFMVF9HRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRQ0KMTg3OTogICAgICAgICAgICAgICAgCQkJCQkJCXBvcnRBTFRfR0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUoICggKnB1bFRvdGFsUnVuVGltZSApICk7DQoxODgwOiAgICAgICAgICAgICAgICAJCQkJCQkjZWxzZQ0KMTg4MTogICAgICAgICAgICAgICAgCQkJCQkJCSpwdWxUb3RhbFJ1blRpbWUgPSBwb3J0R0VUX1JVTl9USU1FX0NPVU5URVJfVkFMVUUoKTsNCjE4ODI6ICAgICAgICAgICAgICAgIAkJCQkJCSNlbmRpZg0KMTg4MzogICAgICAgICAgICAgICAgCQkJCQl9DQoxODg0OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTg4NTogICAgICAgICAgICAgICAgCQkJCSNlbHNlDQoxODg2OiAgICAgICAgICAgICAgICAJCQkJew0KMTg4NzogICAgICAgICAgICAgICAgCQkJCQlpZiggcHVsVG90YWxSdW5UaW1lICE9IE5VTEwgKQ0KMTg4ODogICAgICAgICAgICAgICAgCQkJCQl7DQoxODg5OiAgICAgICAgICAgICAgICAJCQkJCQkqcHVsVG90YWxSdW5UaW1lID0gMDsNCjE4OTA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTg5MTogICAgICAgICAgICAgICAgCQkJCX0NCjE4OTI6ICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYNCjE4OTM6ICAgICAgICAgICAgICAgIAkJCX0NCjE4OTQ6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjE4OTU6ICAgICAgICAgICAgICAgIAkJCXsNCjE4OTY6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxODk3OiAgICAgICAgICAgICAgICAJCQl9DQoxODk4OiAgICAgICAgICAgICAgICAJCX0NCjE4OTk6ICAgICAgICAgICAgICAgIAkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCjE5MDA6ICAgICAgICAgICAgICAgIA0KMTkwMTogICAgICAgICAgICAgICAgCQlyZXR1cm4gdXhUYXNrOw0KMTkwMjogICAgICAgICAgICAgICAgCX0NCjE5MDM6ICAgICAgICAgICAgICAgIA0KMTkwNDogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSAqLw0KMTkwNTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE5MDY6ICAgICAgICAgICAgICAgIA0KMTkwNzogICAgICAgICAgICAgICAgI2lmICggSU5DTFVERV94VGFza0dldElkbGVUYXNrSGFuZGxlID09IDEgKQ0KMTkwODogICAgICAgICAgICAgICAgDQoxOTA5OiAgICAgICAgICAgICAgICAJVGFza0hhbmRsZV90IHhUYXNrR2V0SWRsZVRhc2tIYW5kbGUoIHZvaWQgKQ0KMTkxMDogICAgICAgICAgICAgICAgCXsNCjE5MTE6ICAgICAgICAgICAgICAgIAkJLyogSWYgeFRhc2tHZXRJZGxlVGFza0hhbmRsZSgpIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHNjaGVkdWxlciBoYXMgYmVlbg0KMTkxMjogICAgICAgICAgICAgICAgCQlzdGFydGVkLCB0aGVuIHhJZGxlVGFza0hhbmRsZSB3aWxsIGJlIE5VTEwuICovDQoxOTEzOiAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggKCB4SWRsZVRhc2tIYW5kbGUgIT0gTlVMTCApICk7DQoxOTE0OiAgICAgICAgICAgICAgICAJCXJldHVybiB4SWRsZVRhc2tIYW5kbGU7DQoxOTE1OiAgICAgICAgICAgICAgICAJfQ0KMTkxNjogICAgICAgICAgICAgICAgDQoxOTE3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV94VGFza0dldElkbGVUYXNrSGFuZGxlICovDQoxOTE4OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTkxOTogICAgICAgICAgICAgICAgDQoxOTIwOiAgICAgICAgICAgICAgICAvKiBUaGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNob3VsZCB1c2UgaW5lcXVhbGl0eSB0byAwLCBub3QgZXF1YWxpdHkgdG8gMS4NCjE5MjE6ICAgICAgICAgICAgICAgIFRoaXMgaXMgdG8gZW5zdXJlIHZUYXNrU3RlcFRpY2soKSBpcyBhdmFpbGFibGUgd2hlbiB1c2VyIGRlZmluZWQgbG93IHBvd2VyIG1vZGUNCjE5MjI6ICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucyByZXF1aXJlIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFIHRvIGJlIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4NCjE5MjM6ICAgICAgICAgICAgICAgIDEuICovDQoxOTI0OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVElDS0xFU1NfSURMRSAhPSAwICkNCjE5MjU6ICAgICAgICAgICAgICAgIA0KMTkyNjogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tTdGVwVGljayggY29uc3QgVGlja1R5cGVfdCB4VGlja3NUb0p1bXAgKQ0KMTkyNzogICAgICAgICAgICAgICAgCXsNCjE5Mjg6ICAgICAgICAgICAgICAgIAkJLyogQ29ycmVjdCB0aGUgdGljayBjb3VudCB2YWx1ZSBhZnRlciBhIHBlcmlvZCBkdXJpbmcgd2hpY2ggdGhlIHRpY2sNCjE5Mjk6ICAgICAgICAgICAgICAgIAkJd2FzIHN1cHByZXNzZWQuICBOb3RlIHRoaXMgZG9lcyAqbm90KiBjYWxsIHRoZSB0aWNrIGhvb2sgZnVuY3Rpb24gZm9yDQoxOTMwOiAgICAgICAgICAgICAgICAJCWVhY2ggc3RlcHBlZCB0aWNrLiAqLw0KMTkzMTogICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoICggeFRpY2tDb3VudCArIHhUaWNrc1RvSnVtcCApIDw9IHhOZXh0VGFza1VuYmxvY2tUaW1lICk7DQoxOTMyOiAgICAgICAgICAgICAgICAJCXhUaWNrQ291bnQgKz0geFRpY2tzVG9KdW1wOw0KMTkzMzogICAgICAgICAgICAgICAgCQl0cmFjZUlOQ1JFQVNFX1RJQ0tfQ09VTlQoIHhUaWNrc1RvSnVtcCApOw0KMTkzNDogICAgICAgICAgICAgICAgCX0NCjE5MzU6ICAgICAgICAgICAgICAgIA0KMTkzNjogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICovDQoxOTM3OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTkzODogICAgICAgICAgICAgICAgDQoxOTM5OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhUYXNrSW5jcmVtZW50VGljayggdm9pZCApDQoxOTQwOiAgICAgICAgICAgICAgICB7DQpCRkQwMjA4MCAgICAgIDRGRTkgICBBRERJVSBTUCwgU1AsIC00OA0KQkZEMDIwODIgICAgICBDQkVCICAgU1cgUkEsIDQ0KFNQKQ0KQkZEMDIwODQgICAgICBDQkNBICAgU1cgUzgsIDQwKFNQKQ0KQkZEMDIwODYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjE5NDE6ICAgICAgICAgICAgICAgIFRDQl90ICogcHhUQ0I7DQoxOTQyOiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhJdGVtVmFsdWU7DQoxOTQzOiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhTd2l0Y2hSZXF1aXJlZCA9IHBkRkFMU0U7DQpCRkQwMjA4OCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCjE5NDQ6ICAgICAgICAgICAgICAgIA0KMTk0NTogICAgICAgICAgICAgICAgCS8qIENhbGxlZCBieSB0aGUgcG9ydGFibGUgbGF5ZXIgZWFjaCB0aW1lIGEgdGljayBpbnRlcnJ1cHQgb2NjdXJzLg0KMTk0NjogICAgICAgICAgICAgICAgCUluY3JlbWVudHMgdGhlIHRpY2sgdGhlbiBjaGVja3MgdG8gc2VlIGlmIHRoZSBuZXcgdGljayB2YWx1ZSB3aWxsIGNhdXNlIGFueQ0KMTk0NzogICAgICAgICAgICAgICAgCXRhc2tzIHRvIGJlIHVuYmxvY2tlZC4gKi8NCjE5NDg6ICAgICAgICAgICAgICAgIAl0cmFjZVRBU0tfSU5DUkVNRU5UX1RJQ0soIHhUaWNrQ291bnQgKTsNCjE5NDk6ICAgICAgICAgICAgICAgIAlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0UgKQ0KQkZEMDIwOEMgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkNCkJGRDAyMDkwICAwMEI4NDBBMiAgIEJORVpDIFYwLCAweEJGRDAyMjA0DQoxOTUwOiAgICAgICAgICAgICAgICAJew0KMTk1MTogICAgICAgICAgICAgICAgCQkvKiBJbmNyZW1lbnQgdGhlIFJUT1MgdGljaywgc3dpdGNoaW5nIHRoZSBkZWxheWVkIGFuZCBvdmVyZmxvd2VkDQoxOTUyOiAgICAgICAgICAgICAgICAJCWRlbGF5ZWQgbGlzdHMgaWYgaXQgd3JhcHMgdG8gMC4gKi8NCjE5NTM6ICAgICAgICAgICAgICAgIAkJKyt4VGlja0NvdW50Ow0KQkZEMDIwOTQgIDgwM0NGQzVDICAgTFcgVjAsIC0zMjcwOChHUCkNCkJGRDAyMDk4ICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQ0KQkZEMDIwOUEgIDgwM0NGODVDICAgU1cgVjAsIC0zMjcwOChHUCkNCjE5NTQ6ICAgICAgICAgICAgICAgIA0KMTk1NTogICAgICAgICAgICAgICAgCQl7DQoxOTU2OiAgICAgICAgICAgICAgICAJCQkvKiBNaW5vciBvcHRpbWlzYXRpb24uICBUaGUgdGljayBjb3VudCBjYW5ub3QgY2hhbmdlIGluIHRoaXMNCjE5NTc6ICAgICAgICAgICAgICAgIAkJCWJsb2NrLiAqLw0KMTk1ODogICAgICAgICAgICAgICAgCQkJY29uc3QgVGlja1R5cGVfdCB4Q29uc3RUaWNrQ291bnQgPSB4VGlja0NvdW50Ow0KQkZEMDIwOUUgIDgwM0NGQzVDICAgTFcgVjAsIC0zMjcwOChHUCkNCkJGRDAyMEEyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjE5NTk6ICAgICAgICAgICAgICAgIA0KMTk2MDogICAgICAgICAgICAgICAgCQkJaWYoIHhDb25zdFRpY2tDb3VudCA9PSAoIFRpY2tUeXBlX3QgKSAwVSApDQpCRkQwMjBBNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMjBBQSAgMDAyMjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjBGMg0KMTk2MTogICAgICAgICAgICAgICAgCQkJew0KMTk2MjogICAgICAgICAgICAgICAgCQkJCXRhc2tTV0lUQ0hfREVMQVlFRF9MSVNUUygpOw0KQkZEMDIwQUUgIDgwNzRGQzVDICAgTFcgVjAsIC0zMjY1MihHUCkNCkJGRDAyMEIyICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDIwQjQgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDIwQ0ENCkJGRDAyMEI4ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMjBCQSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMjBCQyAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDIwQkUgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMjBDMCAgMDdBQTMwQTAgICBBRERJVSBBMSwgWkVSTywgMTk2Mg0KQkZEMDIwQzIgICAgICAwN0FBICAgQUREVSBBMywgQTEsIFYwDQpCRkQwMjBDNCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAyMEM2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMjBDOCAgICAgIDBDMDAgICBOT1ANCkJGRDAyMENBICA4MDc0RkM1QyAgIExXIFYwLCAtMzI2NTIoR1ApDQpCRkQwMjBDRSAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQpCRkQwMjBEMiAgODA3OEZDNUMgICBMVyBWMCwgLTMyNjQ4KEdQKQ0KQkZEMDIwRDYgIDgwNzRGODVDICAgU1cgVjAsIC0zMjY1MihHUCkNCkJGRDAyMERBICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAyMERFICA4MDc4Rjg1QyAgIFNXIFYwLCAtMzI2NDgoR1ApDQpCRkQwMjBFMiAgODA1MEZDNUMgICBMVyBWMCwgLTMyNjg4KEdQKQ0KQkZEMDIwRTYgICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxDQpCRkQwMjBFOCAgODA1MEY4NUMgICBTVyBWMCwgLTMyNjg4KEdQKQ0KQkZEMDIwRUMgIDQ3Q0E3N0U4ICAgSkFMUyBwcnZSZXNldE5leHRUYXNrVW5ibG9ja1RpbWUNCkJGRDAyMEYwICAgICAgMEMwMCAgIE5PUA0KMTk2MzogICAgICAgICAgICAgICAgCQkJfQ0KMTk2NDogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTk2NTogICAgICAgICAgICAgICAgCQkJew0KMTk2NjogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE5Njc6ICAgICAgICAgICAgICAgIAkJCX0NCjE5Njg6ICAgICAgICAgICAgICAgIA0KMTk2OTogICAgICAgICAgICAgICAgCQkJLyogU2VlIGlmIHRoaXMgdGljayBoYXMgbWFkZSBhIHRpbWVvdXQgZXhwaXJlLiAgVGFza3MgYXJlIHN0b3JlZCBpbg0KMTk3MDogICAgICAgICAgICAgICAgCQkJdGhlCXF1ZXVlIGluIHRoZSBvcmRlciBvZiB0aGVpciB3YWtlIHRpbWUgLSBtZWFuaW5nIG9uY2Ugb25lIHRhc2sNCjE5NzE6ICAgICAgICAgICAgICAgIAkJCWhhcyBiZWVuIGZvdW5kIHdob3NlIGJsb2NrIHRpbWUgaGFzIG5vdCBleHBpcmVkIHRoZXJlIGlzIG5vIG5lZWQgdG8NCjE5NzI6ICAgICAgICAgICAgICAgIAkJCWxvb2sgYW55IGZ1cnRoZXIgZG93biB0aGUgbGlzdC4gKi8NCjE5NzM6ICAgICAgICAgICAgICAgIAkJCWlmKCB4Q29uc3RUaWNrQ291bnQgPj0geE5leHRUYXNrVW5ibG9ja1RpbWUgKQ0KQkZEMDIwRjIgIDgwNThGQzVDICAgTFcgVjAsIC0zMjY4MChHUCkNCkJGRDAyMEY2ICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkNCkJGRDAyMEZBICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDIwRkMgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwMjBGRSAgMDA2QzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjFEQQ0KQkZEMDIxMDIgICAgICBDQzAyICAgQiAweEJGRDAyMTA4DQpCRkQwMjEwNCAgICAgIDBDMDAgICBOT1ANCjE5NzQ6ICAgICAgICAgICAgICAgIAkJCXsNCjE5NzU6ICAgICAgICAgICAgICAgIAkJCQlmb3IoIDs7ICkNCjE5NzY6ICAgICAgICAgICAgICAgIAkJCQl7DQoxOTc3OiAgICAgICAgICAgICAgICAJCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggcHhEZWxheWVkVGFza0xpc3QgKSAhPSBwZEZBTFNFICkNCkJGRDAyMTA4ICA4MDc0RkM1QyAgIExXIFYwLCAtMzI2NTIoR1ApDQpCRkQwMjEwQyAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAyMTBFICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyMTE4DQpCRkQwMjExMiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDIxMTQgICAgICBDQzAyICAgQiAweEJGRDAyMTFBDQpCRkQwMjExNiAgICAgIDBDMDAgICBOT1ANCkJGRDAyMTE4ICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8NCkJGRDAyMTFBICAwMDA1NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyMTI4DQoxOTc4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjE5Nzk6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSBkZWxheWVkIGxpc3QgaXMgZW1wdHkuICBTZXQgeE5leHRUYXNrVW5ibG9ja1RpbWUNCjE5ODA6ICAgICAgICAgICAgICAgIAkJCQkJCXRvIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlIHNvIGl0IGlzIGV4dHJlbWVseQ0KMTk4MTogICAgICAgICAgICAgICAgCQkJCQkJdW5saWtlbHkgdGhhdCB0aGUNCjE5ODI6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGlja0NvdW50ID49IHhOZXh0VGFza1VuYmxvY2tUaW1lICkgdGVzdCB3aWxsIHBhc3MNCjE5ODM6ICAgICAgICAgICAgICAgIAkJCQkJCW5leHQgdGltZSB0aHJvdWdoLiAqLw0KMTk4NDogICAgICAgICAgICAgICAgCQkJCQkJeE5leHRUYXNrVW5ibG9ja1RpbWUgPSBwb3J0TUFYX0RFTEFZOw0KQkZEMDIxMUUgICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwMjEyMCAgODA1OEY4NUMgICBTVyBWMCwgLTMyNjgwKEdQKQ0KMTk4NTogICAgICAgICAgICAgICAgCQkJCQkJYnJlYWs7DQpCRkQwMjEyNCAgICAgIENDNUEgICBCIDB4QkZEMDIxREENCkJGRDAyMTI2ICAgICAgMEMwMCAgIE5PUA0KMTk4NjogICAgICAgICAgICAgICAgCQkJCQl9DQoxOTg3OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjE5ODg6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTk4OTogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIGRlbGF5ZWQgbGlzdCBpcyBub3QgZW1wdHksIGdldCB0aGUgdmFsdWUgb2YgdGhlDQoxOTkwOiAgICAgICAgICAgICAgICAJCQkJCQlpdGVtIGF0IHRoZSBoZWFkIG9mIHRoZSBkZWxheWVkIGxpc3QuICBUaGlzIGlzIHRoZSB0aW1lDQoxOTkxOiAgICAgICAgICAgICAgICAJCQkJCQlhdCB3aGljaCB0aGUgdGFzayBhdCB0aGUgaGVhZCBvZiB0aGUgZGVsYXllZCBsaXN0IG11c3QNCjE5OTI6ICAgICAgICAgICAgICAgIAkJCQkJCWJlIHJlbW92ZWQgZnJvbSB0aGUgQmxvY2tlZCBzdGF0ZS4gKi8NCjE5OTM6ICAgICAgICAgICAgICAgIAkJCQkJCXB4VENCID0gKCBUQ0JfdCAqICkgbGlzdEdFVF9PV05FUl9PRl9IRUFEX0VOVFJZKCBweERlbGF5ZWRUYXNrTGlzdCApOw0KQkZEMDIxMjggIDgwNzRGQzVDICAgTFcgVjAsIC0zMjY1MihHUCkNCkJGRDAyMTJDICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDAyMTJFICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDAyMTMwICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkNCjE5OTQ6ICAgICAgICAgICAgICAgIAkJCQkJCXhJdGVtVmFsdWUgPSBsaXN0R0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDIxMzQgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDIxMzggICAgICA2OTIxICAgTFcgVjAsIDQoVjApDQpCRkQwMjEzQSAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQoxOTk1OiAgICAgICAgICAgICAgICANCjE5OTY6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4Q29uc3RUaWNrQ291bnQgPCB4SXRlbVZhbHVlICkNCkJGRDAyMTNFICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkNCkJGRDAyMTQyICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyMTQ2ICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDIxNDggIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwMjE0QSAgMDAwNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjE1QQ0KMTk5NzogICAgICAgICAgICAgICAgCQkJCQkJew0KMTk5ODogICAgICAgICAgICAgICAgCQkJCQkJCS8qIEl0IGlzIG5vdCB0aW1lIHRvIHVuYmxvY2sgdGhpcyBpdGVtIHlldCwgYnV0IHRoZQ0KMTk5OTogICAgICAgICAgICAgICAgCQkJCQkJCWl0ZW0gdmFsdWUgaXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgYXQgdGhlIGhlYWQNCjIwMDA6ICAgICAgICAgICAgICAgIAkJCQkJCQlvZiB0aGUgYmxvY2tlZCBsaXN0IG11c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBCbG9ja2VkDQoyMDAxOiAgICAgICAgICAgICAgICAJCQkJCQkJc3RhdGUgLQlzbyByZWNvcmQgdGhlIGl0ZW0gdmFsdWUgaW4NCjIwMDI6ICAgICAgICAgICAgICAgIAkJCQkJCQl4TmV4dFRhc2tVbmJsb2NrVGltZS4gKi8NCjIwMDM6ICAgICAgICAgICAgICAgIAkJCQkJCQl4TmV4dFRhc2tVbmJsb2NrVGltZSA9IHhJdGVtVmFsdWU7DQpCRkQwMjE0RSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMjE1MiAgODA1OEY4NUMgICBTVyBWMCwgLTMyNjgwKEdQKQ0KMjAwNDogICAgICAgICAgICAgICAgCQkJCQkJCWJyZWFrOw0KQkZEMDIxNTYgICAgICBDQzQxICAgQiAweEJGRDAyMURBDQpCRkQwMjE1OCAgICAgIDBDMDAgICBOT1ANCjIwMDU6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjIwMDY6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjIwMDc6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjIwMDg6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMDA5OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoyMDEwOiAgICAgICAgICAgICAgICANCjIwMTE6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIEl0IGlzIHRpbWUgdG8gcmVtb3ZlIHRoZSBpdGVtIGZyb20gdGhlIEJsb2NrZWQgc3RhdGUuICovDQoyMDEyOiAgICAgICAgICAgICAgICAJCQkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDAyMTVBICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAyMTVFICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDIxNjAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAyMTYyICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMjE2NCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMjE2NiAgICAgIDBDMDAgICBOT1ANCjIwMTM6ICAgICAgICAgICAgICAgIA0KMjAxNDogICAgICAgICAgICAgICAgCQkJCQkJLyogSXMgdGhlIHRhc2sgd2FpdGluZyBvbiBhbiBldmVudCBhbHNvPyAgSWYgc28gcmVtb3ZlDQoyMDE1OiAgICAgICAgICAgICAgICAJCQkJCQlpdCBmcm9tIHRoZSBldmVudCBsaXN0LiAqLw0KMjAxNjogICAgICAgICAgICAgICAgCQkJCQkJaWYoIGxpc3RMSVNUX0lURU1fQ09OVEFJTkVSKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApICE9IE5VTEwgKQ0KQkZEMDIxNjggIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDIxNkMgICAgICA2OTJBICAgTFcgVjAsIDQwKFYwKQ0KQkZEMDIxNkUgIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDIxODANCjIwMTc6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjIwMTg6ICAgICAgICAgICAgICAgIAkJCQkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICk7DQpCRkQwMjE3MiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjE3NCAgNkQyQzAwMUMgICBFWFQgWkVSTywgR1AsIDIwLCAxNA0KQkZEMDIxNzYgICAgICA2RDJDICAgQURESVUgVjAsIFYwLCAyNA0KQkZEMDIxNzggICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAyMTdBICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMjE3QyAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMjE3RSAgICAgIDBDMDAgICBOT1ANCjIwMTk6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjIwMjA6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjIwMjE6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjIwMjI6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMDIzOiAgICAgICAgICAgICAgICAJCQkJCQl9DQoyMDI0OiAgICAgICAgICAgICAgICANCjIwMjU6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFBsYWNlIHRoZSB1bmJsb2NrZWQgdGFzayBpbnRvIHRoZSBhcHByb3ByaWF0ZSByZWFkeQ0KMjAyNjogICAgICAgICAgICAgICAgCQkJCQkJbGlzdC4gKi8NCjIwMjc6ICAgICAgICAgICAgICAgIAkJCQkJCXBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhUQ0IgKTsNCkJGRDAyMTgwICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAyMTg0ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAyMTg2ICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwMjE4OCAgMTgxMDAwNjIgICBTTExWIFYxLCBWMCwgVjENCkJGRDAyMThBICBGQzVDMTgxMCAgIFNCIFpFUk8sIC05MzIoUzApDQpCRkQwMjE4QyAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDIxOTAgICAgICA0NEQzICAgT1IxNiBWMCwgVjENCkJGRDAyMTkyICA4MDQwRjg1QyAgIFNXIFYwLCAtMzI3MDQoR1ApDQpCRkQwMjE5NiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjE5QSAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMjE5QyAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyDQpCRkQwMjE5RSAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyDQpCRkQwMjFBMCAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjENCkJGRDAyMUEyICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwMjFBNCAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwMjFBNiAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MA0KQkZEMDIxQUEgICAgICAwNUE2ICAgQUREVSBWMSwgVjEsIFYwDQpCRkQwMjFBQyAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjFCMCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDAyMUIyICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwMjFCNCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDIxQjYgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZA0KQkZEMDIxQjggIDBDMDAzRTRBICAgTEggUzIsIDMwNzIoVDIpDQpCRkQwMjFCQSAgICAgIDBDMDAgICBOT1ANCjIwMjg6ICAgICAgICAgICAgICAgIA0KMjAyOTogICAgICAgICAgICAgICAgCQkJCQkJLyogQSB0YXNrIGJlaW5nIHVuYmxvY2tlZCBjYW5ub3QgY2F1c2UgYW4gaW1tZWRpYXRlDQoyMDMwOiAgICAgICAgICAgICAgICAJCQkJCQljb250ZXh0IHN3aXRjaCBpZiBwcmVlbXB0aW9uIGlzIHR1cm5lZCBvZmYuICovDQoyMDMxOiAgICAgICAgICAgICAgICAJCQkJCQkjaWYgKCAgY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQoyMDMyOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoyMDMzOiAgICAgICAgICAgICAgICAJCQkJCQkJLyogUHJlZW1wdGlvbiBpcyBvbiwgYnV0IGEgY29udGV4dCBzd2l0Y2ggc2hvdWxkDQoyMDM0OiAgICAgICAgICAgICAgICAJCQkJCQkJb25seSBiZSBwZXJmb3JtZWQgaWYgdGhlIHVuYmxvY2tlZCB0YXNrIGhhcyBhDQoyMDM1OiAgICAgICAgICAgICAgICAJCQkJCQkJcHJpb3JpdHkgdGhhdCBpcyBlcXVhbCB0byBvciBoaWdoZXIgdGhhbiB0aGUNCjIwMzY6ICAgICAgICAgICAgICAgIAkJCQkJCQljdXJyZW50bHkgZXhlY3V0aW5nIHRhc2suICovDQoyMDM3OiAgICAgICAgICAgICAgICAJCQkJCQkJaWYoIHB4VENCLT51eFByaW9yaXR5ID49IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApDQpCRkQwMjFCQyAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjFDMCAgICAgIDY5QUIgICBMVyBWMSwgNDQoVjApDQpCRkQwMjFDMiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDIxQzYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDIxQzggIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwDQpCRkQwMjFDQSAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYNCkJGRDAyMUNDICBGRjlCNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyMTA2DQpCRkQwMjFDRSAgRUQwMUZGOUIgICBMVyBHUCwgLTQ4NjMoSzEpDQoyMDM4OiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMjAzOTogICAgICAgICAgICAgICAgCQkJCQkJCQl4U3dpdGNoUmVxdWlyZWQgPSBwZFRSVUU7DQpCRkQwMjFEMCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDIxRDIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjA0MDogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjIwNDE6ICAgICAgICAgICAgICAgIAkJCQkJCQllbHNlDQoyMDQyOiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMjA0MzogICAgICAgICAgICAgICAgCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMDQ0OiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMjA0NTogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMjA0NjogICAgICAgICAgICAgICAgCQkJCQkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9QUkVFTVBUSU9OICovDQoyMDQ3OiAgICAgICAgICAgICAgICAJCQkJCX0NCjIwNDg6ICAgICAgICAgICAgICAgIAkJCQl9DQpCRkQwMjEwNiAgICAgIDBDMDAgICBOT1ANCkJGRDAyMUQ2ICAgICAgQ0Y5OCAgIEIgMHhCRkQwMjEwOA0KQkZEMDIxRDggICAgICAwQzAwICAgTk9QDQoyMDQ5OiAgICAgICAgICAgICAgICAJCQl9DQoyMDUwOiAgICAgICAgICAgICAgICAJCX0NCjIwNTE6ICAgICAgICAgICAgICAgIA0KMjA1MjogICAgICAgICAgICAgICAgCQkvKiBUYXNrcyBvZiBlcXVhbCBwcmlvcml0eSB0byB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzayB3aWxsIHNoYXJlDQoyMDUzOiAgICAgICAgICAgICAgICAJCXByb2Nlc3NpbmcgdGltZSAodGltZSBzbGljZSkgaWYgcHJlZW1wdGlvbiBpcyBvbiwgYW5kIHRoZSBhcHBsaWNhdGlvbg0KMjA1NDogICAgICAgICAgICAgICAgCQl3cml0ZXIgaGFzIG5vdCBleHBsaWNpdGx5IHR1cm5lZCB0aW1lIHNsaWNpbmcgb2ZmLiAqLw0KMjA1NTogICAgICAgICAgICAgICAgCQkjaWYgKCAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9USU1FX1NMSUNJTkcgPT0gMSApICkNCjIwNTY6ICAgICAgICAgICAgICAgIAkJew0KMjA1NzogICAgICAgICAgICAgICAgCQkJaWYoIGxpc3RDVVJSRU5UX0xJU1RfTEVOR1RIKCAmKCBweFJlYWR5VGFza3NMaXN0c1sgcHhDdXJyZW50VENCLT51eFByaW9yaXR5IF0gKSApID4gKCBVQmFzZVR5cGVfdCApIDEgKQ0KQkZEMDIxREEgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAyMURFICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAyMUUwICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAyMUUyICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAyMUU0ICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQ0KQkZEMDIxRTYgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAyMUU4ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAyMUVBICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwMjFFRSAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDAyMUYwICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDIxRjIgIDAwMDJCMDQyICAgU0xUSVUgVjAsIFYwLCAyDQpCRkQwMjFGNiAgMDAwQTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjIwRQ0KMjA1ODogICAgICAgICAgICAgICAgCQkJew0KMjA1OTogICAgICAgICAgICAgICAgCQkJCXhTd2l0Y2hSZXF1aXJlZCA9IHBkVFJVRTsNCkJGRDAyMUZBICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMjFGQyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwMjIwMCAgICAgIENDMDYgICBCIDB4QkZEMDIyMEUNCkJGRDAyMjAyICAgICAgMEMwMCAgIE5PUA0KMjA2MDogICAgICAgICAgICAgICAgCQkJfQ0KMjA2MTogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjA2MjogICAgICAgICAgICAgICAgCQkJew0KMjA2MzogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIwNjQ6ICAgICAgICAgICAgICAgIAkJCX0NCjIwNjU6ICAgICAgICAgICAgICAgIAkJfQ0KMjA2NjogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogKCAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9USU1FX1NMSUNJTkcgPT0gMSApICkgKi8NCjIwNjc6ICAgICAgICAgICAgICAgIA0KMjA2ODogICAgICAgICAgICAgICAgCQkjaWYgKCBjb25maWdVU0VfVElDS19IT09LID09IDEgKQ0KMjA2OTogICAgICAgICAgICAgICAgCQl7DQoyMDcwOiAgICAgICAgICAgICAgICAJCQkvKiBHdWFyZCBhZ2FpbnN0IHRoZSB0aWNrIGhvb2sgYmVpbmcgY2FsbGVkIHdoZW4gdGhlIHBlbmRlZCB0aWNrDQoyMDcxOiAgICAgICAgICAgICAgICAJCQljb3VudCBpcyBiZWluZyB1bndvdW5kICh3aGVuIHRoZSBzY2hlZHVsZXIgaXMgYmVpbmcgdW5sb2NrZWQpLiAqLw0KMjA3MjogICAgICAgICAgICAgICAgCQkJaWYoIHV4UGVuZGVkVGlja3MgPT0gKCBVQmFzZVR5cGVfdCApIDBVICkNCjIwNzM6ICAgICAgICAgICAgICAgIAkJCXsNCjIwNzQ6ICAgICAgICAgICAgICAgIAkJCQl2QXBwbGljYXRpb25UaWNrSG9vaygpOw0KMjA3NTogICAgICAgICAgICAgICAgCQkJfQ0KMjA3NjogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjA3NzogICAgICAgICAgICAgICAgCQkJew0KMjA3ODogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIwNzk6ICAgICAgICAgICAgICAgIAkJCX0NCjIwODA6ICAgICAgICAgICAgICAgIAkJfQ0KMjA4MTogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnVVNFX1RJQ0tfSE9PSyAqLw0KMjA4MjogICAgICAgICAgICAgICAgCX0NCjIwODM6ICAgICAgICAgICAgICAgIAllbHNlDQoyMDg0OiAgICAgICAgICAgICAgICAJew0KMjA4NTogICAgICAgICAgICAgICAgCQkrK3V4UGVuZGVkVGlja3M7DQpCRkQwMjIwNCAgODA0OEZDNUMgICBMVyBWMCwgLTMyNjk2KEdQKQ0KQkZEMDIyMDggICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxDQpCRkQwMjIwQSAgODA0OEY4NUMgICBTVyBWMCwgLTMyNjk2KEdQKQ0KMjA4NjogICAgICAgICAgICAgICAgDQoyMDg3OiAgICAgICAgICAgICAgICAJCS8qIFRoZSB0aWNrIGhvb2sgZ2V0cyBjYWxsZWQgYXQgcmVndWxhciBpbnRlcnZhbHMsIGV2ZW4gaWYgdGhlDQoyMDg4OiAgICAgICAgICAgICAgICAJCXNjaGVkdWxlciBpcyBsb2NrZWQuICovDQoyMDg5OiAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9USUNLX0hPT0sgPT0gMSApDQoyMDkwOiAgICAgICAgICAgICAgICAJCXsNCjIwOTE6ICAgICAgICAgICAgICAgIAkJCXZBcHBsaWNhdGlvblRpY2tIb29rKCk7DQoyMDkyOiAgICAgICAgICAgICAgICAJCX0NCjIwOTM6ICAgICAgICAgICAgICAgIAkJI2VuZGlmDQoyMDk0OiAgICAgICAgICAgICAgICAJfQ0KMjA5NTogICAgICAgICAgICAgICAgDQoyMDk2OiAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMSApDQoyMDk3OiAgICAgICAgICAgICAgICAJew0KMjA5ODogICAgICAgICAgICAgICAgCQlpZiggeFlpZWxkUGVuZGluZyAhPSBwZEZBTFNFICkNCkJGRDAyMjBFICA4MDRDRkM1QyAgIExXIFYwLCAtMzI2OTIoR1ApDQpCRkQwMjIxMiAgMDAwMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjIxQw0KMjA5OTogICAgICAgICAgICAgICAgCQl7DQoyMTAwOiAgICAgICAgICAgICAgICAJCQl4U3dpdGNoUmVxdWlyZWQgPSBwZFRSVUU7DQpCRkQwMjIxNiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDIyMTggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjEwMTogICAgICAgICAgICAgICAgCQl9DQoyMTAyOiAgICAgICAgICAgICAgICAJCWVsc2UNCjIxMDM6ICAgICAgICAgICAgICAgIAkJew0KMjEwNDogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjEwNTogICAgICAgICAgICAgICAgCQl9DQoyMTA2OiAgICAgICAgICAgICAgICAJfQ0KMjEwNzogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBjb25maWdVU0VfUFJFRU1QVElPTiAqLw0KMjEwODogICAgICAgICAgICAgICAgDQoyMTA5OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhTd2l0Y2hSZXF1aXJlZDsNCkJGRDAyMjFDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjIxMTA6ICAgICAgICAgICAgICAgIH0NCkJGRDAyMjIwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwMjIyMiAgICAgIDRCRUIgICBMVyBSQSwgNDQoU1ApDQpCRkQwMjIyNCAgICAgIDRCQ0EgICBMVyBTOCwgNDAoU1ApDQpCRkQwMjIyNiAgICAgIDRDMTkgICBBRERJVSBTUCwgU1AsIDQ4DQpCRkQwMjIyOCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwMjIyQSAgICAgIDBDMDAgICBOT1ANCjIxMTE6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjExMjogICAgICAgICAgICAgICAgDQoyMTEzOiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcgPT0gMSApDQoyMTE0OiAgICAgICAgICAgICAgICANCjIxMTU6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrU2V0QXBwbGljYXRpb25UYXNrVGFnKCBUYXNrSGFuZGxlX3QgeFRhc2ssIFRhc2tIb29rRnVuY3Rpb25fdCBweEhvb2tGdW5jdGlvbiApDQoyMTE2OiAgICAgICAgICAgICAgICAJew0KMjExNzogICAgICAgICAgICAgICAgCVRDQl90ICp4VENCOw0KMjExODogICAgICAgICAgICAgICAgDQoyMTE5OiAgICAgICAgICAgICAgICAJCS8qIElmIHhUYXNrIGlzIE5VTEwgdGhlbiBpdCBpcyB0aGUgdGFzayBob29rIG9mIHRoZSBjYWxsaW5nIHRhc2sgdGhhdCBpcw0KMjEyMDogICAgICAgICAgICAgICAgCQlnZXR0aW5nIHNldC4gKi8NCjIxMjE6ICAgICAgICAgICAgICAgIAkJaWYoIHhUYXNrID09IE5VTEwgKQ0KMjEyMjogICAgICAgICAgICAgICAgCQl7DQoyMTIzOiAgICAgICAgICAgICAgICAJCQl4VENCID0gKCBUQ0JfdCAqICkgcHhDdXJyZW50VENCOw0KMjEyNDogICAgICAgICAgICAgICAgCQl9DQoyMTI1OiAgICAgICAgICAgICAgICAJCWVsc2UNCjIxMjY6ICAgICAgICAgICAgICAgIAkJew0KMjEyNzogICAgICAgICAgICAgICAgCQkJeFRDQiA9ICggVENCX3QgKiApIHhUYXNrOw0KMjEyODogICAgICAgICAgICAgICAgCQl9DQoyMTI5OiAgICAgICAgICAgICAgICANCjIxMzA6ICAgICAgICAgICAgICAgIAkJLyogU2F2ZSB0aGUgaG9vayBmdW5jdGlvbiBpbiB0aGUgVENCLiAgQSBjcml0aWNhbCBzZWN0aW9uIGlzIHJlcXVpcmVkIGFzDQoyMTMxOiAgICAgICAgICAgICAgICAJCXRoZSB2YWx1ZSBjYW4gYmUgYWNjZXNzZWQgZnJvbSBhbiBpbnRlcnJ1cHQuICovDQoyMTMyOiAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KMjEzMzogICAgICAgICAgICAgICAgCQkJeFRDQi0+cHhUYXNrVGFnID0gcHhIb29rRnVuY3Rpb247DQoyMTM0OiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQoyMTM1OiAgICAgICAgICAgICAgICAJfQ0KMjEzNjogICAgICAgICAgICAgICAgDQoyMTM3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHICovDQoyMTM4OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIxMzk6ICAgICAgICAgICAgICAgIA0KMjE0MDogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHID09IDEgKQ0KMjE0MTogICAgICAgICAgICAgICAgDQoyMTQyOiAgICAgICAgICAgICAgICAJVGFza0hvb2tGdW5jdGlvbl90IHhUYXNrR2V0QXBwbGljYXRpb25UYXNrVGFnKCBUYXNrSGFuZGxlX3QgeFRhc2sgKQ0KMjE0MzogICAgICAgICAgICAgICAgCXsNCjIxNDQ6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqeFRDQjsNCjIxNDU6ICAgICAgICAgICAgICAgIAlUYXNrSG9va0Z1bmN0aW9uX3QgeFJldHVybjsNCjIxNDY6ICAgICAgICAgICAgICAgIA0KMjE0NzogICAgICAgICAgICAgICAgCQkvKiBJZiB4VGFzayBpcyBOVUxMIHRoZW4gd2UgYXJlIHNldHRpbmcgb3VyIG93biB0YXNrIGhvb2suICovDQoyMTQ4OiAgICAgICAgICAgICAgICAJCWlmKCB4VGFzayA9PSBOVUxMICkNCjIxNDk6ICAgICAgICAgICAgICAgIAkJew0KMjE1MDogICAgICAgICAgICAgICAgCQkJeFRDQiA9ICggVENCX3QgKiApIHB4Q3VycmVudFRDQjsNCjIxNTE6ICAgICAgICAgICAgICAgIAkJfQ0KMjE1MjogICAgICAgICAgICAgICAgCQllbHNlDQoyMTUzOiAgICAgICAgICAgICAgICAJCXsNCjIxNTQ6ICAgICAgICAgICAgICAgIAkJCXhUQ0IgPSAoIFRDQl90ICogKSB4VGFzazsNCjIxNTU6ICAgICAgICAgICAgICAgIAkJfQ0KMjE1NjogICAgICAgICAgICAgICAgDQoyMTU3OiAgICAgICAgICAgICAgICAJCS8qIFNhdmUgdGhlIGhvb2sgZnVuY3Rpb24gaW4gdGhlIFRDQi4gIEEgY3JpdGljYWwgc2VjdGlvbiBpcyByZXF1aXJlZCBhcw0KMjE1ODogICAgICAgICAgICAgICAgCQl0aGUgdmFsdWUgY2FuIGJlIGFjY2Vzc2VkIGZyb20gYW4gaW50ZXJydXB0LiAqLw0KMjE1OTogICAgICAgICAgICAgICAgCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCjIxNjA6ICAgICAgICAgICAgICAgIAkJew0KMjE2MTogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHhUQ0ItPnB4VGFza1RhZzsNCjIxNjI6ICAgICAgICAgICAgICAgIAkJfQ0KMjE2MzogICAgICAgICAgICAgICAgCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KMjE2NDogICAgICAgICAgICAgICAgDQoyMTY1OiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KMjE2NjogICAgICAgICAgICAgICAgCX0NCjIxNjc6ICAgICAgICAgICAgICAgIA0KMjE2ODogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyAqLw0KMjE2OTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMTcwOiAgICAgICAgICAgICAgICANCjIxNzE6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyA9PSAxICkNCjIxNzI6ICAgICAgICAgICAgICAgIA0KMjE3MzogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFRhc2tDYWxsQXBwbGljYXRpb25UYXNrSG9vayggVGFza0hhbmRsZV90IHhUYXNrLCB2b2lkICpwdlBhcmFtZXRlciApDQoyMTc0OiAgICAgICAgICAgICAgICAJew0KMjE3NTogICAgICAgICAgICAgICAgCVRDQl90ICp4VENCOw0KMjE3NjogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjIxNzc6ICAgICAgICAgICAgICAgIA0KMjE3ODogICAgICAgICAgICAgICAgCQkvKiBJZiB4VGFzayBpcyBOVUxMIHRoZW4gd2UgYXJlIGNhbGxpbmcgb3VyIG93biB0YXNrIGhvb2suICovDQoyMTc5OiAgICAgICAgICAgICAgICAJCWlmKCB4VGFzayA9PSBOVUxMICkNCjIxODA6ICAgICAgICAgICAgICAgIAkJew0KMjE4MTogICAgICAgICAgICAgICAgCQkJeFRDQiA9ICggVENCX3QgKiApIHB4Q3VycmVudFRDQjsNCjIxODI6ICAgICAgICAgICAgICAgIAkJfQ0KMjE4MzogICAgICAgICAgICAgICAgCQllbHNlDQoyMTg0OiAgICAgICAgICAgICAgICAJCXsNCjIxODU6ICAgICAgICAgICAgICAgIAkJCXhUQ0IgPSAoIFRDQl90ICogKSB4VGFzazsNCjIxODY6ICAgICAgICAgICAgICAgIAkJfQ0KMjE4NzogICAgICAgICAgICAgICAgDQoyMTg4OiAgICAgICAgICAgICAgICAJCWlmKCB4VENCLT5weFRhc2tUYWcgIT0gTlVMTCApDQoyMTg5OiAgICAgICAgICAgICAgICAJCXsNCjIxOTA6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSB4VENCLT5weFRhc2tUYWcoIHB2UGFyYW1ldGVyICk7DQoyMTkxOiAgICAgICAgICAgICAgICAJCX0NCjIxOTI6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjE5MzogICAgICAgICAgICAgICAgCQl7DQoyMTk0OiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRGQUlMOw0KMjE5NTogICAgICAgICAgICAgICAgCQl9DQoyMTk2OiAgICAgICAgICAgICAgICANCjIxOTc6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQoyMTk4OiAgICAgICAgICAgICAgICAJfQ0KMjE5OTogICAgICAgICAgICAgICAgDQoyMjAwOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX0FQUExJQ0FUSU9OX1RBU0tfVEFHICovDQoyMjAxOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIyMDI6ICAgICAgICAgICAgICAgIA0KMjIwMzogICAgICAgICAgICAgICAgdm9pZCB2VGFza1N3aXRjaENvbnRleHQoIHZvaWQgKQ0KMjIwNDogICAgICAgICAgICAgICAgew0KQkZEMDJEQkMgICAgICA0RkU1ICAgQURESVUgU1AsIFNQLCAtNTYNCkJGRDAyREJFICAgICAgQ0JFRCAgIFNXIFJBLCA1MihTUCkNCkJGRDAyREMwICAgICAgQ0JDQyAgIFNXIFM4LCA0OChTUCkNCkJGRDAyREMyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoyMjA1OiAgICAgICAgICAgICAgICAJaWYoIHV4U2NoZWR1bGVyU3VzcGVuZGVkICE9ICggVUJhc2VUeXBlX3QgKSBwZEZBTFNFICkNCkJGRDAyREM0ICA4MDVDRkM1QyAgIExXIFYwLCAtMzI2NzYoR1ApDQpCRkQwMkRDOCAgMDAwNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMkRENg0KMjIwNjogICAgICAgICAgICAgICAgCXsNCjIyMDc6ICAgICAgICAgICAgICAgIAkJLyogVGhlIHNjaGVkdWxlciBpcyBjdXJyZW50bHkgc3VzcGVuZGVkIC0gZG8gbm90IGFsbG93IGEgY29udGV4dA0KMjIwODogICAgICAgICAgICAgICAgCQlzd2l0Y2guICovDQoyMjA5OiAgICAgICAgICAgICAgICAJCXhZaWVsZFBlbmRpbmcgPSBwZFRSVUU7DQpCRkQwMkRDQyAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDJEQ0UgIDgwNENGODVDICAgU1cgVjAsIC0zMjY5MihHUCkNCkJGRDAyREQyICAgICAgQ0M5MSAgIEIgMHhCRkQwMkVGNg0KQkZEMDJERDQgICAgICAwQzAwICAgTk9QDQoyMjEwOiAgICAgICAgICAgICAgICAJfQ0KMjIxMTogICAgICAgICAgICAgICAgCWVsc2UNCjIyMTI6ICAgICAgICAgICAgICAgIAl7DQoyMjEzOiAgICAgICAgICAgICAgICAJCXhZaWVsZFBlbmRpbmcgPSBwZEZBTFNFOw0KQkZEMDJERDYgIDgwNENGODFDICAgU1cgWkVSTywgLTMyNjkyKEdQKQ0KMjIxNDogICAgICAgICAgICAgICAgCQl0cmFjZVRBU0tfU1dJVENIRURfT1VUKCk7DQoyMjE1OiAgICAgICAgICAgICAgICANCjIyMTY6ICAgICAgICAgICAgICAgIAkJI2lmICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApDQoyMjE3OiAgICAgICAgICAgICAgICAJCXsNCjIyMTg6ICAgICAgICAgICAgICAgIAkJCQkjaWZkZWYgcG9ydEFMVF9HRVRfUlVOX1RJTUVfQ09VTlRFUl9WQUxVRQ0KMjIxOTogICAgICAgICAgICAgICAgCQkJCQlwb3J0QUxUX0dFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCB1bFRvdGFsUnVuVGltZSApOw0KMjIyMDogICAgICAgICAgICAgICAgCQkJCSNlbHNlDQoyMjIxOiAgICAgICAgICAgICAgICAJCQkJCXVsVG90YWxSdW5UaW1lID0gcG9ydEdFVF9SVU5fVElNRV9DT1VOVEVSX1ZBTFVFKCk7DQoyMjIyOiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmDQoyMjIzOiAgICAgICAgICAgICAgICANCjIyMjQ6ICAgICAgICAgICAgICAgIAkJCQkvKiBBZGQgdGhlIGFtb3VudCBvZiB0aW1lIHRoZSB0YXNrIGhhcyBiZWVuIHJ1bm5pbmcgdG8gdGhlDQoyMjI1OiAgICAgICAgICAgICAgICAJCQkJYWNjdW11bGF0ZWQJdGltZSBzbyBmYXIuICBUaGUgdGltZSB0aGUgdGFzayBzdGFydGVkIHJ1bm5pbmcgd2FzDQoyMjI2OiAgICAgICAgICAgICAgICAJCQkJc3RvcmVkIGluIHVsVGFza1N3aXRjaGVkSW5UaW1lLiAgTm90ZSB0aGF0IHRoZXJlIGlzIG5vIG92ZXJmbG93DQoyMjI3OiAgICAgICAgICAgICAgICAJCQkJcHJvdGVjdGlvbiBoZXJlCXNvIGNvdW50IHZhbHVlcyBhcmUgb25seSB2YWxpZCB1bnRpbCB0aGUgdGltZXINCjIyMjg6ICAgICAgICAgICAgICAgIAkJCQlvdmVyZmxvd3MuICBUaGUgZ3VhcmQgYWdhaW5zdCBuZWdhdGl2ZSB2YWx1ZXMgaXMgdG8gcHJvdGVjdA0KMjIyOTogICAgICAgICAgICAgICAgCQkJCWFnYWluc3Qgc3VzcGVjdCBydW4gdGltZSBzdGF0IGNvdW50ZXIgaW1wbGVtZW50YXRpb25zIC0gd2hpY2gNCjIyMzA6ICAgICAgICAgICAgICAgIAkJCQlhcmUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBub3QgdGhlIGtlcm5lbC4gKi8NCjIyMzE6ICAgICAgICAgICAgICAgIAkJCQlpZiggdWxUb3RhbFJ1blRpbWUgPiB1bFRhc2tTd2l0Y2hlZEluVGltZSApDQoyMjMyOiAgICAgICAgICAgICAgICAJCQkJew0KMjIzMzogICAgICAgICAgICAgICAgCQkJCQlweEN1cnJlbnRUQ0ItPnVsUnVuVGltZUNvdW50ZXIgKz0gKCB1bFRvdGFsUnVuVGltZSAtIHVsVGFza1N3aXRjaGVkSW5UaW1lICk7DQoyMjM0OiAgICAgICAgICAgICAgICAJCQkJfQ0KMjIzNTogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjIyMzY6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMjM3OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyMzg6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMjM5OiAgICAgICAgICAgICAgICAJCQkJdWxUYXNrU3dpdGNoZWRJblRpbWUgPSB1bFRvdGFsUnVuVGltZTsNCjIyNDA6ICAgICAgICAgICAgICAgIAkJfQ0KMjI0MTogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgKi8NCjIyNDI6ICAgICAgICAgICAgICAgIA0KMjI0MzogICAgICAgICAgICAgICAgCQkvKiBDaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3csIGlmIGNvbmZpZ3VyZWQuICovDQoyMjQ0OiAgICAgICAgICAgICAgICAJCXRhc2tGSVJTVF9DSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1coKTsNCkJGRDAyRERBICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMkRERSAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDAyREUwICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMkRFNCAgICAgIDY5MkMgICBMVyBWMCwgNDgoVjApDQpCRkQwMkRFNiAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjENCkJGRDAyREU4ICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDJERUEgIDAwMEI0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJFMDQNCkJGRDAyREVFICA4MDMwRkM3QyAgIExXIFYxLCAtMzI3MjAoR1ApDQpCRkQwMkRGMiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDJERjYgIDAwMzQzMDQyICAgQURESVUgVjAsIFYwLCA1Mg0KQkZEMDJERkEgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDAyREZDICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMkRGRSAgNDIyMjc3RTggICBKQUxTIHZBcHBsaWNhdGlvblN0YWNrT3ZlcmZsb3dIb29rDQpCRkQwMkUwMCAgMEMwMDQyMjIgICBCTFRaQUxTIFYwLCAweEJGRDA0NjA0DQpCRkQwMkUwMiAgICAgIDBDMDAgICBOT1ANCjIyNDU6ICAgICAgICAgICAgICAgIAkJdGFza1NFQ09ORF9DSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1coKTsNCkJGRDAyRTA0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMkUwNiAgRkNDMkJGRDEgICBMREMxIEYzMCwgLTgzMChTMSkNCkJGRDAyRTA4ICA5ODMwRkNDMiAgIExXIEEyLCAtMjY1NzYoVjApDQpCRkQwMkUwQSAgMzA2Mjk4MzAgICBTV0MxIEYxLCAxMjM4NihTMCkNCkJGRDAyRTBDICA5ODMwMzA2MiAgIEFERElVIFYxLCBWMCwgLTI2NTc2DQpCRkQwMkUwRSAgNkFCMTk4MzAgICBTV0MxIEYxLCAyNzMxMyhTMCkNCkJGRDAyRTEwICAgICAgNkFCMSAgIExXIEExLCA0KFYxKQ0KQkZEMDJFMTIgIDk4MzAzMDYyICAgQURESVUgVjEsIFYwLCAtMjY1NzYNCkJGRDAyRTE0ICA2QTMyOTgzMCAgIFNXQzEgRjEsIDI3MTg2KFMwKQ0KQkZEMDJFMTYgICAgICA2QTMyICAgTFcgQTAsIDgoVjEpDQpCRkQwMkUxOCAgOTgzMDMwNjIgICBBRERJVSBWMSwgVjAsIC0yNjU3Ng0KQkZEMDJFMUEgIDY5QjM5ODMwICAgU1dDMSBGMSwgMjcwNTkoUzApDQpCRkQwMkUxQyAgICAgIDY5QjMgICBMVyBWMSwgMTIoVjEpDQpCRkQwMkUxRSAgOTgzMDMwNDIgICBBRERJVSBWMCwgVjAsIC0yNjU3Ng0KQkZEMDJFMjAgIDY5MjQ5ODMwICAgU1dDMSBGMSwgMjY5MTYoUzApDQpCRkQwMkUyMiAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApDQpCRkQwMkUyNCAgMDAxOEY4REUgICBTVyBBMiwgMjQoUzgpDQpCRkQwMkUyOCAgMDAxQ0Y4QkUgICBTVyBBMSwgMjgoUzgpDQpCRkQwMkUyQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwMkUzMCAgMDAyNEY4N0UgICBTVyBWMSwgMzYoUzgpDQpCRkQwMkUzNCAgMDAyOEY4NUUgICBTVyBWMCwgNDAoUzgpDQpCRkQwMkUzOCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDJFM0MgICAgICA2OUFDICAgTFcgVjEsIDQ4KFYwKQ0KQkZEMDJFM0UgIDAwMTgzMDVFICAgQURESVUgVjAsIFM4LCAyNA0KQkZEMDJFNDIgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDAyRTQ0ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMkU0NiAgICAgIEVGMTQgICBMSSBBMiwgMjANCkJGRDAyRTQ4ICAzREE2NzdFOCAgIEpBTFMgMHhCRkQwN0I0Qw0KQkZEMDJFNEEgIDBDMDAzREE2ICAgTEggVDUsIDMwNzIoQTIpDQpCRkQwMkU0QyAgICAgIDBDMDAgICBOT1ANCkJGRDAyRTRFICAwMDBCNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyRTY4DQpCRkQwMkU1MiAgODAzMEZDN0MgICBMVyBWMSwgLTMyNzIwKEdQKQ0KQkZEMDJFNTYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAyRTVBICAwMDM0MzA0MiAgIEFERElVIFYwLCBWMCwgNTINCkJGRDAyRTVFICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwMkU2MCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDJFNjIgIDQyMjI3N0U4ICAgSkFMUyB2QXBwbGljYXRpb25TdGFja092ZXJmbG93SG9vaw0KQkZEMDJFNjQgIDBDMDA0MjIyICAgQkxUWkFMUyBWMCwgMHhCRkQwNDY2OA0KQkZEMDJFNjYgICAgICAwQzAwICAgTk9QDQoyMjQ2OiAgICAgICAgICAgICAgICANCjIyNDc6ICAgICAgICAgICAgICAgIAkJLyogU2VsZWN0IGEgbmV3IHRhc2sgdG8gcnVuIHVzaW5nIGVpdGhlciB0aGUgZ2VuZXJpYyBDIG9yIHBvcnQNCjIyNDg6ICAgICAgICAgICAgICAgIAkJb3B0aW1pc2VkIGFzbSBjb2RlLiAqLw0KMjI0OTogICAgICAgICAgICAgICAgCQl0YXNrU0VMRUNUX0hJR0hFU1RfUFJJT1JJVFlfVEFTSygpOw0KQkZEMDJFNjggIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDAyRTZDICA1QjNDMDA0MiAgIENMWiBWMCwgVjANCkJGRDAyRTcwICAgICAgRUQ5RiAgIExJIFYxLCAzMQ0KQkZEMDJFNzIgICAgICAwNTI3ICAgU1VCVSBWMCwgVjEsIFYwDQpCRkQwMkU3NCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwMkU3OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMkU3QyAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyDQpCRkQwMkU3RSAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyDQpCRkQwMkU4MCAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjENCkJGRDAyRTgyICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwMkU4NCAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwMkU4NiAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MA0KQkZEMDJFOEEgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwMkU4QyAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAyRThFICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAyRUE0DQpCRkQwMkU5MiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDJFOTQgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDJFOTYgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgNCkJGRDAyRTk4ICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQ0KQkZEMDJFOUEgIDA4QzkzMEEwICAgQURESVUgQTEsIFpFUk8sIDIyNDkNCkJGRDAyRTlDICAgICAgMDhDOSAgIExCVSBTMSwgOShBMCkNCkJGRDAyRTlFICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDJFQTAgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAyRUEyICAgICAgMEMwMCAgIE5PUA0KQkZEMDJFQTQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDJFQTggICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDJFQUEgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDJFQUMgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwMkVBRSAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDJFQjAgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDJFQjIgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjANCkJGRDAyRUI2ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDJFQjggIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KQkZEMDJFQkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDJFQzAgICAgICA2OTIxICAgTFcgVjAsIDQoVjApDQpCRkQwMkVDMiAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkNCkJGRDAyRUM0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRUM4ICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQ0KQkZEMDJFQ0EgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDJFQ0UgICAgICA2OUExICAgTFcgVjEsIDQoVjApDQpCRkQwMkVEMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMkVENCAgICAgIDZEMjQgICBBRERJVSBWMCwgVjAsIDgNCkJGRDAyRUQ2ICAwMDA4QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDJFRUENCkJGRDAyRUQ4ICAwQzAwMDAwOCAgIFNMTCBaRVJPLCBUMCwgMQ0KQkZEMDJFREEgICAgICAwQzAwICAgTk9QDQpCRkQwMkVEQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMkVFMCAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkNCkJGRDAyRUUyICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQ0KQkZEMDJFRTQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDJFRTggICAgICBFOUExICAgU1cgVjEsIDQoVjApDQpCRkQwMkVFQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMkVFRSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkNCkJGRDAyRUYwICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDAyRUYyICA4MDMwRjg1QyAgIFNXIFYwLCAtMzI3MjAoR1ApDQoyMjUwOiAgICAgICAgICAgICAgICAJCXRyYWNlVEFTS19TV0lUQ0hFRF9JTigpOw0KMjI1MTogICAgICAgICAgICAgICAgDQoyMjUyOiAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9ORVdMSUJfUkVFTlRSQU5UID09IDEgKQ0KMjI1MzogICAgICAgICAgICAgICAgCQl7DQoyMjU0OiAgICAgICAgICAgICAgICAJCQkvKiBTd2l0Y2ggTmV3bGliJ3MgX2ltcHVyZV9wdHIgdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIF9yZWVudA0KMjI1NTogICAgICAgICAgICAgICAgCQkJc3RydWN0dXJlIHNwZWNpZmljIHRvIHRoaXMgdGFzay4gKi8NCjIyNTY6ICAgICAgICAgICAgICAgIAkJCV9pbXB1cmVfcHRyID0gJiggcHhDdXJyZW50VENCLT54TmV3TGliX3JlZW50ICk7DQoyMjU3OiAgICAgICAgICAgICAgICAJCX0NCjIyNTg6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9ORVdMSUJfUkVFTlRSQU5UICovDQoyMjU5OiAgICAgICAgICAgICAgICAJfQ0KMjI2MDogICAgICAgICAgICAgICAgfQ0KQkZEMDJFRjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAyRUY4ICAgICAgNEJFRCAgIExXIFJBLCA1MihTUCkNCkJGRDAyRUZBICAgICAgNEJDQyAgIExXIFM4LCA0OChTUCkNCkJGRDAyRUZDICAgICAgNEMxRCAgIEFERElVIFNQLCBTUCwgNTYNCkJGRDAyRUZFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAyRjAwICAgICAgMEMwMCAgIE5PUA0KMjI2MTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMjYyOiAgICAgICAgICAgICAgICANCjIyNjM6ICAgICAgICAgICAgICAgIHZvaWQgdlRhc2tQbGFjZU9uRXZlbnRMaXN0KCBMaXN0X3QgKiBjb25zdCBweEV2ZW50TGlzdCwgY29uc3QgVGlja1R5cGVfdCB4VGlja3NUb1dhaXQgKQ0KMjI2NDogICAgICAgICAgICAgICAgew0KQkZEMDVFNzQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA1RTc2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA1RTc4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA1RTdBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNUU3QyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwNUU4MCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQoyMjY1OiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHhUaW1lVG9XYWtlOw0KMjI2NjogICAgICAgICAgICAgICAgDQoyMjY3OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweEV2ZW50TGlzdCApOw0KQkZEMDVFODQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDVFODggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDVFOUUNCkJGRDA1RThDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNUU4RSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNUU5MCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDVFOTIgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwNUU5NCAgMDhEQjMwQTAgICBBRERJVSBBMSwgWkVSTywgMjI2Nw0KQkZEMDVFOTYgICAgICAwOERCICAgTEJVIFMxLCAxMShBMSkNCkJGRDA1RTk4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDVFOUEgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA1RTlDICAgICAgMEMwMCAgIE5PUA0KMjI2ODogICAgICAgICAgICAgICAgDQoyMjY5OiAgICAgICAgICAgICAgICAJLyogVEhJUyBGVU5DVElPTiBNVVNUIEJFIENBTExFRCBXSVRIIEVJVEhFUiBJTlRFUlJVUFRTIERJU0FCTEVEIE9SIFRIRQ0KMjI3MDogICAgICAgICAgICAgICAgCVNDSEVEVUxFUiBTVVNQRU5ERUQgQU5EIFRIRSBRVUVVRSBCRUlORyBBQ0NFU1NFRCBMT0NLRUQuICovDQoyMjcxOiAgICAgICAgICAgICAgICANCjIyNzI6ICAgICAgICAgICAgICAgIAkvKiBQbGFjZSB0aGUgZXZlbnQgbGlzdCBpdGVtIG9mIHRoZSBUQ0IgaW4gdGhlIGFwcHJvcHJpYXRlIGV2ZW50IGxpc3QuDQoyMjczOiAgICAgICAgICAgICAgICAJVGhpcyBpcyBwbGFjZWQgaW4gdGhlIGxpc3QgaW4gcHJpb3JpdHkgb3JkZXIgc28gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzaw0KMjI3NDogICAgICAgICAgICAgICAgCWlzIHRoZSBmaXJzdCB0byBiZSB3b2tlbiBieSB0aGUgZXZlbnQuICBUaGUgcXVldWUgdGhhdCBjb250YWlucyB0aGUgZXZlbnQNCjIyNzU6ICAgICAgICAgICAgICAgIAlsaXN0IGlzIGxvY2tlZCwgcHJldmVudGluZyBzaW11bHRhbmVvdXMgYWNjZXNzIGZyb20gaW50ZXJydXB0cy4gKi8NCjIyNzY6ICAgICAgICAgICAgICAgIAl2TGlzdEluc2VydCggcHhFdmVudExpc3QsICYoIHB4Q3VycmVudFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDVFOUUgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA1RUEyICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQNCkJGRDA1RUE0ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA1RUE4ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwNUVBQSAgMzA0MDc3RTggICBKQUxTIHZMaXN0SW5zZXJ0DQpCRkQwNUVBQyAgMEMwMDMwNDAgICBBRERJVSBWMCwgWkVSTywgMzA3Mg0KQkZEMDVFQUUgICAgICAwQzAwICAgTk9QDQoyMjc3OiAgICAgICAgICAgICAgICANCjIyNzg6ICAgICAgICAgICAgICAgIAkvKiBUaGUgdGFzayBtdXN0IGJlIHJlbW92ZWQgZnJvbSBmcm9tIHRoZSByZWFkeSBsaXN0IGJlZm9yZSBpdCBpcyBhZGRlZCB0bw0KMjI3OTogICAgICAgICAgICAgICAgCXRoZSBibG9ja2VkIGxpc3QgYXMgdGhlIHNhbWUgbGlzdCBpdGVtIGlzIHVzZWQgZm9yIGJvdGggbGlzdHMuICBFeGNsdXNpdmUNCjIyODA6ICAgICAgICAgICAgICAgIAlhY2Nlc3MgdG8gdGhlIHJlYWR5IGxpc3RzIGd1YXJhbnRlZWQgYmVjYXVzZSB0aGUgc2NoZWR1bGVyIGlzIGxvY2tlZC4gKi8NCjIyODE6ICAgICAgICAgICAgICAgIAlpZiggdXhMaXN0UmVtb3ZlKCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDA1RUIwICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNUVCNCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA1RUI2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNUVCOCAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQ0KQkZEMDVFQkEgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQ0KQkZEMDVFQkMgICAgICAwQzAwICAgTk9QDQpCRkQwNUVCRSAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUVEQQ0KMjI4MjogICAgICAgICAgICAgICAgCXsNCjIyODM6ICAgICAgICAgICAgICAgIAkJLyogVGhlIGN1cnJlbnQgdGFzayBtdXN0IGJlIGluIGEgcmVhZHkgbGlzdCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0bw0KMjI4NDogICAgICAgICAgICAgICAgCQljaGVjaywgYW5kIHRoZSBwb3J0IHJlc2V0IG1hY3JvIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkuICovDQoyMjg1OiAgICAgICAgICAgICAgICAJCXBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggcHhDdXJyZW50VENCLT51eFByaW9yaXR5LCB1eFRvcFJlYWR5UHJpb3JpdHkgKTsNCkJGRDA1RUMyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNUVDNiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwNUVDOCAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDVFQ0EgIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxDQpCRkQwNUVDQyAgNDQxQTEwMTAgICBBRERJIFpFUk8sIFMwLCAxNzQzNA0KQkZEMDVFQ0UgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwDQpCRkQwNUVEMCAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDVFRDQgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwNUVENiAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQ0KMjI4NjogICAgICAgICAgICAgICAgCX0NCjIyODc6ICAgICAgICAgICAgICAgIAllbHNlDQoyMjg4OiAgICAgICAgICAgICAgICAJew0KMjI4OTogICAgICAgICAgICAgICAgCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMjkwOiAgICAgICAgICAgICAgICAJfQ0KMjI5MTogICAgICAgICAgICAgICAgDQoyMjkyOiAgICAgICAgICAgICAgICAJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoyMjkzOiAgICAgICAgICAgICAgICAJew0KMjI5NDogICAgICAgICAgICAgICAgCQlpZiggeFRpY2tzVG9XYWl0ID09IHBvcnRNQVhfREVMQVkgKQ0KQkZEMDVFREEgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQ0KQkZEMDVFREUgICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwNUVFMCAgMDAwRUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA1RjAwDQpCRkQwNUVFMiAgMEMwMDAwMEUgICBTTEwgWkVSTywgVDYsIDENCkJGRDA1RUU0ICAgICAgMEMwMCAgIE5PUA0KMjI5NTogICAgICAgICAgICAgICAgCQl7DQoyMjk2OiAgICAgICAgICAgICAgICAJCQkvKiBBZGQgdGhlIHRhc2sgdG8gdGhlIHN1c3BlbmRlZCB0YXNrIGxpc3QgaW5zdGVhZCBvZiBhIGRlbGF5ZWQgdGFzaw0KMjI5NzogICAgICAgICAgICAgICAgCQkJbGlzdCB0byBlbnN1cmUgdGhlIHRhc2sgaXMgbm90IHdva2VuIGJ5IGEgdGltaW5nIGV2ZW50LiAgSXQgd2lsbA0KMjI5ODogICAgICAgICAgICAgICAgCQkJYmxvY2sgaW5kZWZpbml0ZWx5LiAqLw0KMjI5OTogICAgICAgICAgICAgICAgCQkJdkxpc3RJbnNlcnRFbmQoICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwNUVFNiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDVFRUEgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNUVFQyAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDVFRUUgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQ0KQkZEMDVFRjAgIDgwRTQzMDgzICAgQURESVUgQTAsIFYxLCAtMzI1NDANCkJGRDA1RUY0ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwNUVGNiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwNUVGOCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDA1RUZBICAgICAgMEMwMCAgIE5PUA0KQkZEMDVFRkMgICAgICBDQzBEICAgQiAweEJGRDA1RjE4DQpCRkQwNUVGRSAgICAgIDBDMDAgICBOT1ANCjIzMDA6ICAgICAgICAgICAgICAgIAkJfQ0KMjMwMTogICAgICAgICAgICAgICAgCQllbHNlDQoyMzAyOiAgICAgICAgICAgICAgICAJCXsNCjIzMDM6ICAgICAgICAgICAgICAgIAkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUgd29rZW4gaWYgdGhlIGV2ZW50DQoyMzA0OiAgICAgICAgICAgICAgICAJCQlkb2VzIG5vdCBvY2N1ci4gIFRoaXMgbWF5IG92ZXJmbG93IGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyLCB0aGUNCjIzMDU6ICAgICAgICAgICAgICAgIAkJCXNjaGVkdWxlciB3aWxsIGhhbmRsZSBpdC4gKi8NCjIzMDY6ICAgICAgICAgICAgICAgIAkJCXhUaW1lVG9XYWtlID0geFRpY2tDb3VudCArIHhUaWNrc1RvV2FpdDsNCkJGRDA1RjAwICA4MDNDRkM3QyAgIExXIFYxLCAtMzI3MDgoR1ApDQpCRkQwNUYwNCAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwNUYwOCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA1RjBBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjIzMDc6ICAgICAgICAgICAgICAgIAkJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCkJGRDA1RjBFICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkNCkJGRDA1RjEyICAzNzM0NzdFOCAgIEpBTFMgcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0DQpCRkQwNUYxNCAgMEMwMDM3MzQgICBMSFUgVDksIDMwNzIoUzQpDQpCRkQwNUYxNiAgICAgIDBDMDAgICBOT1ANCjIzMDg6ICAgICAgICAgICAgICAgIAkJfQ0KMjMwOTogICAgICAgICAgICAgICAgCX0NCjIzMTA6ICAgICAgICAgICAgICAgIAkjZWxzZSAvKiBJTkNMVURFX3ZUYXNrU3VzcGVuZCAqLw0KMjMxMTogICAgICAgICAgICAgICAgCXsNCjIzMTI6ICAgICAgICAgICAgICAgIAkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUgd29rZW4gaWYgdGhlIGV2ZW50IGRvZXMNCjIzMTM6ICAgICAgICAgICAgICAgIAkJCW5vdCBvY2N1ci4gIFRoaXMgbWF5IG92ZXJmbG93IGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyLCB0aGUgc2NoZWR1bGVyDQoyMzE0OiAgICAgICAgICAgICAgICAJCQl3aWxsIGhhbmRsZSBpdC4gKi8NCjIzMTU6ICAgICAgICAgICAgICAgIAkJCXhUaW1lVG9XYWtlID0geFRpY2tDb3VudCArIHhUaWNrc1RvV2FpdDsNCjIzMTY6ICAgICAgICAgICAgICAgIAkJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCjIzMTc6ICAgICAgICAgICAgICAgIAl9DQoyMzE4OiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQoyMzE5OiAgICAgICAgICAgICAgICB9DQpCRkQwNUYxOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDVGMUEgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDVGMUMgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDVGMUUgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDVGMjAgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDVGMjIgICAgICAwQzAwICAgTk9QDQoyMzIwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIzMjE6ICAgICAgICAgICAgICAgIA0KMjMyMjogICAgICAgICAgICAgICAgdm9pZCB2VGFza1BsYWNlT25Vbm9yZGVyZWRFdmVudExpc3QoIExpc3RfdCAqIHB4RXZlbnRMaXN0LCBjb25zdCBUaWNrVHlwZV90IHhJdGVtVmFsdWUsIGNvbnN0IFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjIzMjM6ICAgICAgICAgICAgICAgIHsNCkJGRDA0OTA0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNDkwNiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNDkwOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNDkwQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDQ5MEMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KQkZEMDQ5MTAgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQ0KQkZEMDQ5MTQgIDAwMjhGOERFICAgU1cgQTIsIDQwKFM4KQ0KMjMyNDogICAgICAgICAgICAgICAgVGlja1R5cGVfdCB4VGltZVRvV2FrZTsNCjIzMjU6ICAgICAgICAgICAgICAgIA0KMjMyNjogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhFdmVudExpc3QgKTsNCkJGRDA0OTE4ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA0OTFDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0OTMyDQpCRkQwNDkyMCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDQ5MjIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDQ5MjQgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgNCkJGRDA0OTI2ICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQ0KQkZEMDQ5MjggIDA5MTYzMEEwICAgQURESVUgQTEsIFpFUk8sIDIzMjYNCkJGRDA0OTJBICAgICAgMDkxNiAgIExCVSBWMCwgNihTMSkNCkJGRDA0OTJDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDQ5MkUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0OTMwICAgICAgMEMwMCAgIE5PUA0KMjMyNzogICAgICAgICAgICAgICAgDQoyMzI4OiAgICAgICAgICAgICAgICAJLyogVEhJUyBGVU5DVElPTiBNVVNUIEJFIENBTExFRCBXSVRIIFRIRSBTQ0hFRFVMRVIgU1VTUEVOREVELiAgSXQgaXMgdXNlZCBieQ0KMjMyOTogICAgICAgICAgICAgICAgCXRoZSBldmVudCBncm91cHMgaW1wbGVtZW50YXRpb24uICovDQoyMzMwOiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB1eFNjaGVkdWxlclN1c3BlbmRlZCAhPSAwICk7DQpCRkQwNDkzMiAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQ0KQkZEMDQ5MzYgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQ5NEMNCkJGRDA0OTNBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNDkzQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNDkzRSAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDQ5NDAgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwNDk0MiAgMDkxQTMwQTAgICBBRERJVSBBMSwgWkVSTywgMjMzMA0KQkZEMDQ5NDQgICAgICAwOTFBICAgTEJVIFYwLCAxMChTMSkNCkJGRDA0OTQ2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDQ5NDggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0OTRBICAgICAgMEMwMCAgIE5PUA0KMjMzMTogICAgICAgICAgICAgICAgDQoyMzMyOiAgICAgICAgICAgICAgICAJLyogU3RvcmUgdGhlIGl0ZW0gdmFsdWUgaW4gdGhlIGV2ZW50IGxpc3QgaXRlbS4gIEl0IGlzIHNhZmUgdG8gYWNjZXNzIHRoZQ0KMjMzMzogICAgICAgICAgICAgICAgCWV2ZW50IGxpc3QgaXRlbSBoZXJlIGFzIGludGVycnVwdHMgd29uJ3QgYWNjZXNzIHRoZSBldmVudCBsaXN0IGl0ZW0gb2YgYQ0KMjMzNDogICAgICAgICAgICAgICAgCXRhc2sgdGhhdCBpcyBub3QgaW4gdGhlIEJsb2NrZWQgc3RhdGUuICovDQoyMzM1OiAgICAgICAgICAgICAgICAJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4Q3VycmVudFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSwgeEl0ZW1WYWx1ZSB8IHRhc2tFVkVOVF9MSVNUX0lURU1fVkFMVUVfSU5fVVNFICk7DQpCRkQwNDk0QyAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDQ5NTAgIDAwMjRGQzlFICAgTFcgQTAsIDM2KFM4KQ0KQkZEMDQ5NTQgIDgwMDA0MUEzICAgTFVJIFYxLCAweDgwMDANCkJGRDA0OTU4ICAgICAgNDREQyAgIE9SMTYgVjEsIEEwDQpCRkQwNDk1QSAgICAgIEU5QTYgICBTVyBWMSwgMjQoVjApDQoyMzM2OiAgICAgICAgICAgICAgICANCjIzMzc6ICAgICAgICAgICAgICAgIAkvKiBQbGFjZSB0aGUgZXZlbnQgbGlzdCBpdGVtIG9mIHRoZSBUQ0IgYXQgdGhlIGVuZCBvZiB0aGUgYXBwcm9wcmlhdGUgZXZlbnQNCjIzMzg6ICAgICAgICAgICAgICAgIAlsaXN0LiAgSXQgaXMgc2FmZSB0byBhY2Nlc3MgdGhlIGV2ZW50IGxpc3QgaGVyZSBiZWNhdXNlIGl0IGlzIHBhcnQgb2YgYW4NCjIzMzk6ICAgICAgICAgICAgICAgIAlldmVudCBncm91cCBpbXBsZW1lbnRhdGlvbiAtIGFuZCBpbnRlcnJ1cHRzIGRvbid0IGFjY2VzcyBldmVudCBncm91cHMNCjIzNDA6ICAgICAgICAgICAgICAgIAlkaXJlY3RseSAoaW5zdGVhZCB0aGV5IGFjY2VzcyB0aGVtIGluZGlyZWN0bHkgYnkgcGVuZGluZyBmdW5jdGlvbiBjYWxscyB0bw0KMjM0MTogICAgICAgICAgICAgICAgCXRoZSB0YXNrIGxldmVsKS4gKi8NCjIzNDI6ICAgICAgICAgICAgICAgIAl2TGlzdEluc2VydEVuZCggcHhFdmVudExpc3QsICYoIHB4Q3VycmVudFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDQ5NUMgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA0OTYwICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQNCkJGRDA0OTYyICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA0OTY2ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwNDk2OCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwNDk2QSAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDA0OTZDICAgICAgMEMwMCAgIE5PUA0KMjM0MzogICAgICAgICAgICAgICAgDQoyMzQ0OiAgICAgICAgICAgICAgICAJLyogVGhlIHRhc2sgbXVzdCBiZSByZW1vdmVkIGZyb20gdGhlIHJlYWR5IGxpc3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZQ0KMjM0NTogICAgICAgICAgICAgICAgCWJsb2NrZWQgbGlzdC4gIEV4Y2x1c2l2ZSBhY2Nlc3MgY2FuIGJlIGFzc3VyZWQgdG8gdGhlIHJlYWR5IGxpc3QgYXMgdGhlDQoyMzQ2OiAgICAgICAgICAgICAgICAJc2NoZWR1bGVyIGlzIGxvY2tlZC4gKi8NCjIzNDc6ICAgICAgICAgICAgICAgIAlpZiggdXhMaXN0UmVtb3ZlKCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDA0OTZFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNDk3MiAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA0OTc0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNDk3NiAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQ0KQkZEMDQ5NzggIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQ0KQkZEMDQ5N0EgICAgICAwQzAwICAgTk9QDQpCRkQwNDk3QyAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDk5OA0KMjM0ODogICAgICAgICAgICAgICAgCXsNCjIzNDk6ICAgICAgICAgICAgICAgIAkJLyogVGhlIGN1cnJlbnQgdGFzayBtdXN0IGJlIGluIGEgcmVhZHkgbGlzdCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0bw0KMjM1MDogICAgICAgICAgICAgICAgCQljaGVjaywgYW5kIHRoZSBwb3J0IHJlc2V0IG1hY3JvIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkuICovDQoyMzUxOiAgICAgICAgICAgICAgICAJCXBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggcHhDdXJyZW50VENCLT51eFByaW9yaXR5LCB1eFRvcFJlYWR5UHJpb3JpdHkgKTsNCkJGRDA0OTgwICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNDk4NCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwNDk4NiAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDQ5ODggIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxDQpCRkQwNDk4QSAgNDQxQTEwMTAgICBBRERJIFpFUk8sIFMwLCAxNzQzNA0KQkZEMDQ5OEMgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwDQpCRkQwNDk4RSAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDQ5OTIgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwNDk5NCAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQ0KMjM1MjogICAgICAgICAgICAgICAgCX0NCjIzNTM6ICAgICAgICAgICAgICAgIAllbHNlDQoyMzU0OiAgICAgICAgICAgICAgICAJew0KMjM1NTogICAgICAgICAgICAgICAgCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMzU2OiAgICAgICAgICAgICAgICAJfQ0KMjM1NzogICAgICAgICAgICAgICAgDQoyMzU4OiAgICAgICAgICAgICAgICAJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQoyMzU5OiAgICAgICAgICAgICAgICAJew0KMjM2MDogICAgICAgICAgICAgICAgCQlpZiggeFRpY2tzVG9XYWl0ID09IHBvcnRNQVhfREVMQVkgKQ0KQkZEMDQ5OTggIDAwMjhGQzdFICAgTFcgVjEsIDQwKFM4KQ0KQkZEMDQ5OUMgICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwNDk5RSAgMDAwRUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA0OUJFDQpCRkQwNDlBMCAgMEMwMDAwMEUgICBTTEwgWkVSTywgVDYsIDENCkJGRDA0OUEyICAgICAgMEMwMCAgIE5PUA0KMjM2MTogICAgICAgICAgICAgICAgCQl7DQoyMzYyOiAgICAgICAgICAgICAgICAJCQkvKiBBZGQgdGhlIHRhc2sgdG8gdGhlIHN1c3BlbmRlZCB0YXNrIGxpc3QgaW5zdGVhZCBvZiBhIGRlbGF5ZWQgdGFzaw0KMjM2MzogICAgICAgICAgICAgICAgCQkJbGlzdCB0byBlbnN1cmUgaXQgaXMgbm90IHdva2VuIGJ5IGEgdGltaW5nIGV2ZW50LiAgSXQgd2lsbCBibG9jaw0KMjM2NDogICAgICAgICAgICAgICAgCQkJaW5kZWZpbml0ZWx5LiAqLw0KMjM2NTogICAgICAgICAgICAgICAgCQkJdkxpc3RJbnNlcnRFbmQoICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwNDlBNCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDQ5QTggICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNDlBQSAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDQ5QUMgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQ0KQkZEMDQ5QUUgIDgwRTQzMDgzICAgQURESVUgQTAsIFYxLCAtMzI1NDANCkJGRDA0OUIyICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwNDlCNCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwNDlCNiAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDA0OUI4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDQ5QkEgICAgICBDQzBEICAgQiAweEJGRDA0OUQ2DQpCRkQwNDlCQyAgICAgIDBDMDAgICBOT1ANCjIzNjY6ICAgICAgICAgICAgICAgIAkJfQ0KMjM2NzogICAgICAgICAgICAgICAgCQllbHNlDQoyMzY4OiAgICAgICAgICAgICAgICAJCXsNCjIzNjk6ICAgICAgICAgICAgICAgIAkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUgd29rZW4gaWYgdGhlIGV2ZW50DQoyMzcwOiAgICAgICAgICAgICAgICAJCQlkb2VzIG5vdCBvY2N1ci4gIFRoaXMgbWF5IG92ZXJmbG93IGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyLCB0aGUNCjIzNzE6ICAgICAgICAgICAgICAgIAkJCWtlcm5lbCB3aWxsIG1hbmFnZSBpdCBjb3JyZWN0bHkuICovDQoyMzcyOiAgICAgICAgICAgICAgICAJCQl4VGltZVRvV2FrZSA9IHhUaWNrQ291bnQgKyB4VGlja3NUb1dhaXQ7DQpCRkQwNDlCRSAgODAzQ0ZDN0MgICBMVyBWMSwgLTMyNzA4KEdQKQ0KQkZEMDQ5QzIgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDQ5QzYgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwNDlDOCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoyMzczOiAgICAgICAgICAgICAgICAJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQpCRkQwNDlDQyAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpDQpCRkQwNDlEMCAgMzczNDc3RTggICBKQUxTIHBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdA0KQkZEMDQ5RDIgIDBDMDAzNzM0ICAgTEhVIFQ5LCAzMDcyKFM0KQ0KQkZEMDQ5RDQgICAgICAwQzAwICAgTk9QDQoyMzc0OiAgICAgICAgICAgICAgICAJCX0NCjIzNzU6ICAgICAgICAgICAgICAgIAl9DQoyMzc2OiAgICAgICAgICAgICAgICAJI2Vsc2UgLyogSU5DTFVERV92VGFza1N1c3BlbmQgKi8NCjIzNzc6ICAgICAgICAgICAgICAgIAl7DQoyMzc4OiAgICAgICAgICAgICAgICAJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgc2hvdWxkIGJlIHdva2VuIGlmIHRoZSBldmVudCBkb2VzDQoyMzc5OiAgICAgICAgICAgICAgICAJCQlub3Qgb2NjdXIuICBUaGlzIG1heSBvdmVyZmxvdyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlciwgdGhlIGtlcm5lbA0KMjM4MDogICAgICAgICAgICAgICAgCQkJd2lsbCBtYW5hZ2UgaXQgY29ycmVjdGx5LiAqLw0KMjM4MTogICAgICAgICAgICAgICAgCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9XYWl0Ow0KMjM4MjogICAgICAgICAgICAgICAgCQkJcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCB4VGltZVRvV2FrZSApOw0KMjM4MzogICAgICAgICAgICAgICAgCX0NCjIzODQ6ICAgICAgICAgICAgICAgIAkjZW5kaWYgLyogSU5DTFVERV92VGFza1N1c3BlbmQgKi8NCjIzODU6ICAgICAgICAgICAgICAgIH0NCkJGRDA0OUQ2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNDlEOCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNDlEQSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNDlEQyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNDlERSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNDlFMCAgICAgIDBDMDAgICBOT1ANCjIzODY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjM4NzogICAgICAgICAgICAgICAgDQoyMzg4OiAgICAgICAgICAgICAgICAjaWYgY29uZmlnVVNFX1RJTUVSUyA9PSAxDQoyMzg5OiAgICAgICAgICAgICAgICANCjIzOTA6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrUGxhY2VPbkV2ZW50TGlzdFJlc3RyaWN0ZWQoIExpc3RfdCAqIGNvbnN0IHB4RXZlbnRMaXN0LCBjb25zdCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCwgY29uc3QgQmFzZVR5cGVfdCB4V2FpdEluZGVmaW5pdGVseSApDQoyMzkxOiAgICAgICAgICAgICAgICAJew0KQkZEMDVDNTggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA1QzVBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA1QzVDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA1QzVFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNUM2MCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwNUM2NCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQpCRkQwNUM2OCAgMDAyOEY4REUgICBTVyBBMiwgNDAoUzgpDQoyMzkyOiAgICAgICAgICAgICAgICAJVGlja1R5cGVfdCB4VGltZVRvV2FrZTsNCjIzOTM6ICAgICAgICAgICAgICAgIA0KMjM5NDogICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHB4RXZlbnRMaXN0ICk7DQpCRkQwNUM2QyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNUM3MCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNUM4Ng0KQkZEMDVDNzQgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA1Qzc2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA1Qzc4ICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwNUM3QSAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDA1QzdDICAwOTVBMzBBMCAgIEFERElVIEExLCBaRVJPLCAyMzk0DQpCRkQwNUM3RSAgICAgIDA5NUEgICBMQlUgVjAsIDEwKEExKQ0KQkZEMDVDODAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwNUM4MiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDVDODQgICAgICAwQzAwICAgTk9QDQoyMzk1OiAgICAgICAgICAgICAgICANCjIzOTY6ICAgICAgICAgICAgICAgIAkJLyogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBieSBhcHBsaWNhdGlvbiBjb2RlIGhlbmNlIHRoZQ0KMjM5NzogICAgICAgICAgICAgICAgCQknUmVzdHJpY3RlZCcgaW4gaXRzIG5hbWUuICBJdCBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSS4gIEl0IGlzDQoyMzk4OiAgICAgICAgICAgICAgICAJCWRlc2lnbmVkIGZvciB1c2UgYnkga2VybmVsIGNvZGUsIGFuZCBoYXMgc3BlY2lhbCBjYWxsaW5nIHJlcXVpcmVtZW50cyAtDQoyMzk5OiAgICAgICAgICAgICAgICAJCWl0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgc2NoZWR1bGVyIHN1c3BlbmRlZC4gKi8NCjI0MDA6ICAgICAgICAgICAgICAgIA0KMjQwMTogICAgICAgICAgICAgICAgDQoyNDAyOiAgICAgICAgICAgICAgICAJCS8qIFBsYWNlIHRoZSBldmVudCBsaXN0IGl0ZW0gb2YgdGhlIFRDQiBpbiB0aGUgYXBwcm9wcmlhdGUgZXZlbnQgbGlzdC4NCjI0MDM6ICAgICAgICAgICAgICAgIAkJSW4gdGhpcyBjYXNlIGl0IGlzIGFzc3VtZSB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgdGFzayB0aGF0IGlzIGdvaW5nIHRvDQoyNDA0OiAgICAgICAgICAgICAgICAJCWJlIHdhaXRpbmcgb24gdGhpcyBldmVudCBsaXN0LCBzbyB0aGUgZmFzdGVyIHZMaXN0SW5zZXJ0RW5kKCkgZnVuY3Rpb24NCjI0MDU6ICAgICAgICAgICAgICAgIAkJY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2Ygdkxpc3RJbnNlcnQuICovDQoyNDA2OiAgICAgICAgICAgICAgICAJCXZMaXN0SW5zZXJ0RW5kKCBweEV2ZW50TGlzdCwgJiggcHhDdXJyZW50VENCLT54RXZlbnRMaXN0SXRlbSApICk7DQpCRkQwNUM4NiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDVDOEEgICAgICA2RDJDICAgQURESVUgVjAsIFYwLCAyNA0KQkZEMDVDOEMgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDVDOTAgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDA1QzkyICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQNCkJGRDA1Qzk0ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQ0KQkZEMDVDOTYgICAgICAwQzAwICAgTk9QDQoyNDA3OiAgICAgICAgICAgICAgICANCjI0MDg6ICAgICAgICAgICAgICAgIAkJLyogV2UgbXVzdCByZW1vdmUgdGhpcyB0YXNrIGZyb20gdGhlIHJlYWR5IGxpc3QgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUNCjI0MDk6ICAgICAgICAgICAgICAgIAkJYmxvY2tlZCBsaXN0IGFzIHRoZSBzYW1lIGxpc3QgaXRlbSBpcyB1c2VkIGZvciBib3RoIGxpc3RzLiAgVGhpcw0KMjQxMDogICAgICAgICAgICAgICAgCQlmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgc2NoZWR1bGVyIGxvY2tlZCBzbyBpbnRlcnJ1cHRzIHdpbGwgbm90DQoyNDExOiAgICAgICAgICAgICAgICAJCWFjY2VzcyB0aGUgbGlzdHMgYXQgdGhlIHNhbWUgdGltZS4gKi8NCjI0MTI6ICAgICAgICAgICAgICAgIAkJaWYoIHV4TGlzdFJlbW92ZSggJiggcHhDdXJyZW50VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwNUM5OCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDVDOUMgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNUM5RSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDVDQTAgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUNCkJGRDA1Q0EyICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDENCkJGRDA1Q0E0ICAgICAgMEMwMCAgIE5PUA0KQkZEMDVDQTYgIDAwMEM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDVDQzINCjI0MTM6ICAgICAgICAgICAgICAgIAkJew0KMjQxNDogICAgICAgICAgICAgICAgCQkJLyogVGhlIGN1cnJlbnQgdGFzayBtdXN0IGJlIGluIGEgcmVhZHkgbGlzdCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0bw0KMjQxNTogICAgICAgICAgICAgICAgCQkJY2hlY2ssIGFuZCB0aGUgcG9ydCByZXNldCBtYWNybyBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5LiAqLw0KMjQxNjogICAgICAgICAgICAgICAgCQkJcG9ydFJFU0VUX1JFQURZX1BSSU9SSVRZKCBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHksIHV4VG9wUmVhZHlQcmlvcml0eSApOw0KQkZEMDVDQUEgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA1Q0FFICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDA1Q0IwICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwNUNCMiAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjENCkJGRDA1Q0I0ICA0NDFBMTAxMCAgIEFEREkgWkVSTywgUzAsIDE3NDM0DQpCRkQwNUNCNiAgICAgIDQ0MUEgICBOT1QxNiBWMSwgVjANCkJGRDA1Q0I4ICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApDQpCRkQwNUNCQyAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA1Q0JFICA4MDQwRjg1QyAgIFNXIFYwLCAtMzI3MDQoR1ApDQoyNDE3OiAgICAgICAgICAgICAgICAJCX0NCjI0MTg6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjQxOTogICAgICAgICAgICAgICAgCQl7DQoyNDIwOiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyNDIxOiAgICAgICAgICAgICAgICAJCX0NCjI0MjI6ICAgICAgICAgICAgICAgIA0KMjQyMzogICAgICAgICAgICAgICAgCQkvKiBJZiB2VGFza1N1c3BlbmQoKSBpcyBhdmFpbGFibGUgdGhlbiB0aGUgc3VzcGVuZGVkIHRhc2sgbGlzdCBpcyBhbHNvDQoyNDI0OiAgICAgICAgICAgICAgICAJCWF2YWlsYWJsZSBhbmQgYSB0YXNrIHRoYXQgaXMgYmxvY2tpbmcgaW5kZWZpbml0ZWx5IGNhbiBlbnRlciB0aGUNCjI0MjU6ICAgICAgICAgICAgICAgIAkJc3VzcGVuZGVkIHN0YXRlIChpdCBpcyBub3QgcmVhbGx5IHN1c3BlbmRlZCBhcyBpdCB3aWxsIHJlLWVudGVyIHRoZQ0KMjQyNjogICAgICAgICAgICAgICAgCQlSZWFkeSBzdGF0ZSB3aGVuIHRoZSBldmVudCBpdCBpcyB3YWl0aW5nIGluZGVmaW5pdGVseSBmb3Igb2NjdXJzKS4NCjI0Mjc6ICAgICAgICAgICAgICAgIAkJQmxvY2tpbmcgaW5kZWZpbml0ZWx5IGlzIHVzZWZ1bCB3aGVuIHVzaW5nIHRpY2tsZXNzIGlkbGUgbW9kZSBhcyB3aGVuDQoyNDI4OiAgICAgICAgICAgICAgICAJCWFsbCB0YXNrcyBhcmUgYmxvY2tlZCBpbmRlZmluaXRlbHkgYWxsIHRpbWVycyBjYW4gYmUgdHVybmVkIG9mZi4gKi8NCjI0Mjk6ICAgICAgICAgICAgICAgIAkJI2lmKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjI0MzA6ICAgICAgICAgICAgICAgIAkJew0KMjQzMTogICAgICAgICAgICAgICAgCQkJaWYoIHhXYWl0SW5kZWZpbml0ZWx5ID09IHBkVFJVRSApDQpCRkQwNUNDMiAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpDQpCRkQwNUNDNiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDVDQzggIDAwMEVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNUNFOA0KQkZEMDVDQ0EgIDBDMDAwMDBFICAgU0xMIFpFUk8sIFQ2LCAxDQpCRkQwNUNDQyAgICAgIDBDMDAgICBOT1ANCjI0MzI6ICAgICAgICAgICAgICAgIAkJCXsNCjI0MzM6ICAgICAgICAgICAgICAgIAkJCQkvKiBBZGQgdGhlIHRhc2sgdG8gdGhlIHN1c3BlbmRlZCB0YXNrIGxpc3QgaW5zdGVhZCBvZiBhIGRlbGF5ZWQNCjI0MzQ6ICAgICAgICAgICAgICAgIAkJCQl0YXNrIGxpc3QgdG8gZW5zdXJlIHRoZSB0YXNrIGlzIG5vdCB3b2tlbiBieSBhIHRpbWluZyBldmVudC4gIEl0DQoyNDM1OiAgICAgICAgICAgICAgICAJCQkJd2lsbCBibG9jayBpbmRlZmluaXRlbHkuICovDQoyNDM2OiAgICAgICAgICAgICAgICAJCQkJdkxpc3RJbnNlcnRFbmQoICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwNUNDRSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDVDRDIgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNUNENCAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDVDRDYgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQ0KQkZEMDVDRDggIDgwRTQzMDgzICAgQURESVUgQTAsIFYxLCAtMzI1NDANCkJGRDA1Q0RDICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwNUNERSAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwNUNFMCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDA1Q0UyICAgICAgMEMwMCAgIE5PUA0KQkZEMDVDRTQgICAgICBDQzBEICAgQiAweEJGRDA1RDAwDQpCRkQwNUNFNiAgICAgIDBDMDAgICBOT1ANCjI0Mzc6ICAgICAgICAgICAgICAgIAkJCX0NCjI0Mzg6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjI0Mzk6ICAgICAgICAgICAgICAgIAkJCXsNCjI0NDA6ICAgICAgICAgICAgICAgIAkJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgc2hvdWxkIGJlIHdva2VuIGlmIHRoZQ0KMjQ0MTogICAgICAgICAgICAgICAgCQkJCWV2ZW50IGRvZXMgbm90IG9jY3VyLiAgVGhpcyBtYXkgb3ZlcmZsb3cgYnV0IHRoaXMgZG9lc24ndA0KMjQ0MjogICAgICAgICAgICAgICAgCQkJCW1hdHRlci4gKi8NCjI0NDM6ICAgICAgICAgICAgICAgIAkJCQl4VGltZVRvV2FrZSA9IHhUaWNrQ291bnQgKyB4VGlja3NUb1dhaXQ7DQpCRkQwNUNFOCAgODAzQ0ZDN0MgICBMVyBWMSwgLTMyNzA4KEdQKQ0KQkZEMDVDRUMgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDVDRjAgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwNUNGMiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoyNDQ0OiAgICAgICAgICAgICAgICAJCQkJdHJhY2VUQVNLX0RFTEFZX1VOVElMKCk7DQoyNDQ1OiAgICAgICAgICAgICAgICAJCQkJcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCB4VGltZVRvV2FrZSApOw0KQkZEMDVDRjYgIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQ0KQkZEMDVDRkEgIDM3MzQ3N0U4ICAgSkFMUyBwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QNCkJGRDA1Q0ZDICAwQzAwMzczNCAgIExIVSBUOSwgMzA3MihTNCkNCkJGRDA1Q0ZFICAgICAgMEMwMCAgIE5PUA0KMjQ0NjogICAgICAgICAgICAgICAgCQkJfQ0KMjQ0NzogICAgICAgICAgICAgICAgCQl9DQoyNDQ4OiAgICAgICAgICAgICAgICAJCSNlbHNlDQoyNDQ5OiAgICAgICAgICAgICAgICAJCXsNCjI0NTA6ICAgICAgICAgICAgICAgIAkJCS8qIENhbGN1bGF0ZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgdGFzayBzaG91bGQgYmUgd29rZW4gaWYgdGhlIGV2ZW50DQoyNDUxOiAgICAgICAgICAgICAgICAJCQlkb2VzIG5vdCBvY2N1ci4gIFRoaXMgbWF5IG92ZXJmbG93IGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyLiAqLw0KMjQ1MjogICAgICAgICAgICAgICAgCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9XYWl0Ow0KMjQ1MzogICAgICAgICAgICAgICAgCQkJdHJhY2VUQVNLX0RFTEFZX1VOVElMKCk7DQoyNDU0OiAgICAgICAgICAgICAgICAJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQoyNDU1OiAgICAgICAgICAgICAgICANCjI0NTY6ICAgICAgICAgICAgICAgIAkJCS8qIFJlbW92ZSBjb21waWxlciB3YXJuaW5ncyB3aGVuIElOQ0xVREVfdlRhc2tTdXNwZW5kKCkgaXMgbm90DQoyNDU3OiAgICAgICAgICAgICAgICAJCQlkZWZpbmVkLiAqLw0KMjQ1ODogICAgICAgICAgICAgICAgCQkJKCB2b2lkICkgeFdhaXRJbmRlZmluaXRlbHk7DQoyNDU5OiAgICAgICAgICAgICAgICAJCX0NCjI0NjA6ICAgICAgICAgICAgICAgIAkJI2VuZGlmDQoyNDYxOiAgICAgICAgICAgICAgICAJfQ0KQkZEMDVEMDAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA1RDAyICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA1RDA0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA1RDA2ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA1RDA4ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA1RDBBICAgICAgMEMwMCAgIE5PUA0KMjQ2MjogICAgICAgICAgICAgICAgDQoyNDYzOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1RJTUVSUyAqLw0KMjQ2NDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNDY1OiAgICAgICAgICAgICAgICANCjI0NjY6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0KCBjb25zdCBMaXN0X3QgKiBjb25zdCBweEV2ZW50TGlzdCApDQoyNDY3OiAgICAgICAgICAgICAgICB7DQpCRkQwNDU3OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDQ1N0EgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDQ1N0MgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDQ1N0UgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA0NTgwICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCjI0Njg6ICAgICAgICAgICAgICAgIFRDQl90ICpweFVuYmxvY2tlZFRDQjsNCjI0Njk6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCjI0NzA6ICAgICAgICAgICAgICAgIA0KMjQ3MTogICAgICAgICAgICAgICAgCS8qIFRISVMgRlVOQ1RJT04gTVVTVCBCRSBDQUxMRUQgRlJPTSBBIENSSVRJQ0FMIFNFQ1RJT04uICBJdCBjYW4gYWxzbyBiZQ0KMjQ3MjogICAgICAgICAgICAgICAgCWNhbGxlZCBmcm9tIGEgY3JpdGljYWwgc2VjdGlvbiB3aXRoaW4gYW4gSVNSLiAqLw0KMjQ3MzogICAgICAgICAgICAgICAgDQoyNDc0OiAgICAgICAgICAgICAgICAJLyogVGhlIGV2ZW50IGxpc3QgaXMgc29ydGVkIGluIHByaW9yaXR5IG9yZGVyLCBzbyB0aGUgZmlyc3QgaW4gdGhlIGxpc3QgY2FuDQoyNDc1OiAgICAgICAgICAgICAgICAJYmUgcmVtb3ZlZCBhcyBpdCBpcyBrbm93biB0byBiZSB0aGUgaGlnaGVzdCBwcmlvcml0eS4gIFJlbW92ZSB0aGUgVENCIGZyb20NCjI0NzY6ICAgICAgICAgICAgICAgIAl0aGUgZGVsYXllZCBsaXN0LCBhbmQgYWRkIGl0IHRvIHRoZSByZWFkeSBsaXN0Lg0KMjQ3NzogICAgICAgICAgICAgICAgDQoyNDc4OiAgICAgICAgICAgICAgICAJSWYgYW4gZXZlbnQgaXMgZm9yIGEgcXVldWUgdGhhdCBpcyBsb2NrZWQgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXINCjI0Nzk6ICAgICAgICAgICAgICAgIAlnZXQgY2FsbGVkIC0gdGhlIGxvY2sgY291bnQgb24gdGhlIHF1ZXVlIHdpbGwgZ2V0IG1vZGlmaWVkIGluc3RlYWQuICBUaGlzDQoyNDgwOiAgICAgICAgICAgICAgICAJbWVhbnMgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgZXZlbnQgbGlzdCBpcyBndWFyYW50ZWVkIGhlcmUuDQoyNDgxOiAgICAgICAgICAgICAgICANCjI0ODI6ICAgICAgICAgICAgICAgIAlUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIGNoZWNrIGhhcyBhbHJlYWR5IGJlZW4gbWFkZSB0byBlbnN1cmUgdGhhdA0KMjQ4MzogICAgICAgICAgICAgICAgCXB4RXZlbnRMaXN0IGlzIG5vdCBlbXB0eS4gKi8NCjI0ODQ6ICAgICAgICAgICAgICAgIAlweFVuYmxvY2tlZFRDQiA9ICggVENCX3QgKiApIGxpc3RHRVRfT1dORVJfT0ZfSEVBRF9FTlRSWSggcHhFdmVudExpc3QgKTsNCkJGRDA0NTg0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA0NTg4ICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDA0NThBICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDA0NThDICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjI0ODU6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4VW5ibG9ja2VkVENCICk7DQpCRkQwNDU5MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDU5NCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDVBQQ0KQkZEMDQ1OTggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0NTlBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA0NTlDICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwNDU5RSAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDA0NUEwICAwOUI1MzBBMCAgIEFERElVIEExLCBaRVJPLCAyNDg1DQpCRkQwNDVBMiAgICAgIDA5QjUgICBMQlUgVjEsIDUoVjEpDQpCRkQwNDVBNCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA0NUE2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNDVBOCAgICAgIDBDMDAgICBOT1ANCjI0ODY6ICAgICAgICAgICAgICAgIAkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VW5ibG9ja2VkVENCLT54RXZlbnRMaXN0SXRlbSApICk7DQpCRkQwNDVBQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDVBQyAgNkQyQzAwMTQgICBFWFQgWkVSTywgUzQsIDIwLCAxNA0KQkZEMDQ1QUUgICAgICA2RDJDICAgQURESVUgVjAsIFYwLCAyNA0KQkZEMDQ1QjAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA0NUIyICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwNDVCNCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwNDVCNiAgICAgIDBDMDAgICBOT1ANCjI0ODc6ICAgICAgICAgICAgICAgIA0KMjQ4ODogICAgICAgICAgICAgICAgCWlmKCB1eFNjaGVkdWxlclN1c3BlbmRlZCA9PSAoIFVCYXNlVHlwZV90ICkgcGRGQUxTRSApDQpCRkQwNDVCOCAgODA1Q0ZDNUMgICBMVyBWMCwgLTMyNjc2KEdQKQ0KQkZEMDQ1QkMgIDAwMjc0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQ2MEUNCjI0ODk6ICAgICAgICAgICAgICAgIAl7DQoyNDkwOiAgICAgICAgICAgICAgICAJCSggdm9pZCApIHV4TGlzdFJlbW92ZSggJiggcHhVbmJsb2NrZWRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDQ1QzAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQ1QzQgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNDVDNiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDQ1QzggIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUNCkJGRDA0NUNBICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDENCkJGRDA0NUNDICAgICAgMEMwMCAgIE5PUA0KMjQ5MTogICAgICAgICAgICAgICAgCQlwcnZBZGRUYXNrVG9SZWFkeUxpc3QoIHB4VW5ibG9ja2VkVENCICk7DQpCRkQwNDVDRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDVEMiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwNDVENCAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDQ1RDYgIDE4MTAwMDYyICAgU0xMViBWMSwgVjAsIFYxDQpCRkQwNDVEOCAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQ0KQkZEMDQ1REEgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDA0NURFICAgICAgNDREMyAgIE9SMTYgVjAsIFYxDQpCRkQwNDVFMCAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDQ1RTQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQ1RTggICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDQ1RUEgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDQ1RUMgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDQ1RUUgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwNDVGMCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDQ1RjIgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDQ1RjQgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjANCkJGRDA0NUY4ICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMA0KQkZEMDQ1RkEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQ1RkUgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNDYwMCAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDQ2MDIgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDA0NjA0ICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQNCkJGRDA0NjA2ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQ0KQkZEMDQ2MDggICAgICAwQzAwICAgTk9QDQpCRkQwNDYwQSAgICAgIENDMEMgICBCIDB4QkZEMDQ2MjQNCkJGRDA0NjBDICAgICAgMEMwMCAgIE5PUA0KMjQ5MjogICAgICAgICAgICAgICAgCX0NCjI0OTM6ICAgICAgICAgICAgICAgIAllbHNlDQoyNDk0OiAgICAgICAgICAgICAgICAJew0KMjQ5NTogICAgICAgICAgICAgICAgCQkvKiBUaGUgZGVsYXllZCBhbmQgcmVhZHkgbGlzdHMgY2Fubm90IGJlIGFjY2Vzc2VkLCBzbyBob2xkIHRoaXMgdGFzaw0KMjQ5NjogICAgICAgICAgICAgICAgCQlwZW5kaW5nIHVudGlsIHRoZSBzY2hlZHVsZXIgaXMgcmVzdW1lZC4gKi8NCjI0OTc6ICAgICAgICAgICAgICAgIAkJdkxpc3RJbnNlcnRFbmQoICYoIHhQZW5kaW5nUmVhZHlMaXN0ICksICYoIHB4VW5ibG9ja2VkVENCLT54RXZlbnRMaXN0SXRlbSApICk7DQpCRkQwNDYwRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDYxMCAgNkQyQzAwMTQgICBFWFQgWkVSTywgUzQsIDIwLCAxNA0KQkZEMDQ2MTIgICAgICA2RDJDICAgQURESVUgVjAsIFYwLCAyNA0KQkZEMDQ2MTQgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDA0NjE2ICAzMDgzQkZEMiAgIExEQzEgRjMwLCAxMjQxOShTMikNCkJGRDA0NjE4ICA4MEQwMzA4MyAgIEFERElVIEEwLCBWMSwgLTMyNTYwDQpCRkQwNDYxQyAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDQ2MUUgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZA0KQkZEMDQ2MjAgIDBDMDAzRTRBICAgTEggUzIsIDMwNzIoVDIpDQpCRkQwNDYyMiAgICAgIDBDMDAgICBOT1ANCjI0OTg6ICAgICAgICAgICAgICAgIAl9DQoyNDk5OiAgICAgICAgICAgICAgICANCjI1MDA6ICAgICAgICAgICAgICAgIAlpZiggcHhVbmJsb2NrZWRUQ0ItPnV4UHJpb3JpdHkgPiBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKQ0KQkZEMDQ2MjQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQ2MjggICAgICA2OUFCICAgTFcgVjEsIDQ0KFYwKQ0KQkZEMDQ2MkEgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA0NjJFICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDA0NjMwICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQ0KQkZEMDQ2MzIgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwNDYzNCAgMDAwODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNDY0OA0KMjUwMTogICAgICAgICAgICAgICAgCXsNCjI1MDI6ICAgICAgICAgICAgICAgIAkJLyogUmV0dXJuIHRydWUgaWYgdGhlIHRhc2sgcmVtb3ZlZCBmcm9tIHRoZSBldmVudCBsaXN0IGhhcyBhIGhpZ2hlcg0KMjUwMzogICAgICAgICAgICAgICAgCQlwcmlvcml0eSB0aGFuIHRoZSBjYWxsaW5nIHRhc2suICBUaGlzIGFsbG93cyB0aGUgY2FsbGluZyB0YXNrIHRvIGtub3cgaWYNCjI1MDQ6ICAgICAgICAgICAgICAgIAkJaXQgc2hvdWxkIGZvcmNlIGEgY29udGV4dCBzd2l0Y2ggbm93LiAqLw0KMjUwNTogICAgICAgICAgICAgICAgCQl4UmV0dXJuID0gcGRUUlVFOw0KQkZEMDQ2MzggICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA0NjNBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjI1MDY6ICAgICAgICAgICAgICAgIA0KMjUwNzogICAgICAgICAgICAgICAgCQkvKiBNYXJrIHRoYXQgYSB5aWVsZCBpcyBwZW5kaW5nIGluIGNhc2UgdGhlIHVzZXIgaXMgbm90IHVzaW5nIHRoZQ0KMjUwODogICAgICAgICAgICAgICAgCQkieEhpZ2hlclByaW9yaXR5VGFza1dva2VuIiBwYXJhbWV0ZXIgdG8gYW4gSVNSIHNhZmUgRnJlZVJUT1MgZnVuY3Rpb24uICovDQoyNTA5OiAgICAgICAgICAgICAgICAJCXhZaWVsZFBlbmRpbmcgPSBwZFRSVUU7DQpCRkQwNDYzRSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDQ2NDAgIDgwNENGODVDICAgU1cgVjAsIC0zMjY5MihHUCkNCkJGRDA0NjQ0ICAgICAgQ0MwMyAgIEIgMHhCRkQwNDY0Qw0KQkZEMDQ2NDYgICAgICAwQzAwICAgTk9QDQoyNTEwOiAgICAgICAgICAgICAgICAJfQ0KMjUxMTogICAgICAgICAgICAgICAgCWVsc2UNCjI1MTI6ICAgICAgICAgICAgICAgIAl7DQoyNTEzOiAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSBwZEZBTFNFOw0KQkZEMDQ2NDggIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQoyNTE0OiAgICAgICAgICAgICAgICAJfQ0KMjUxNTogICAgICAgICAgICAgICAgDQoyNTE2OiAgICAgICAgICAgICAgICAJI2lmKCBjb25maWdVU0VfVElDS0xFU1NfSURMRSAhPSAwICkNCjI1MTc6ICAgICAgICAgICAgICAgIAl7DQoyNTE4OiAgICAgICAgICAgICAgICAJCS8qIElmIGEgdGFzayBpcyBibG9ja2VkIG9uIGEga2VybmVsIG9iamVjdCB0aGVuIHhOZXh0VGFza1VuYmxvY2tUaW1lDQoyNTE5OiAgICAgICAgICAgICAgICAJCW1pZ2h0IGJlIHNldCB0byB0aGUgYmxvY2tlZCB0YXNrJ3MgdGltZSBvdXQgdGltZS4gIElmIHRoZSB0YXNrIGlzDQoyNTIwOiAgICAgICAgICAgICAgICAJCXVuYmxvY2tlZCBmb3IgYSByZWFzb24gb3RoZXIgdGhhbiBhIHRpbWVvdXQgeE5leHRUYXNrVW5ibG9ja1RpbWUgaXMNCjI1MjE6ICAgICAgICAgICAgICAgIAkJbm9ybWFsbHkgbGVmdCB1bmNoYW5nZWQsIGJlY2F1c2UgaXQgaXMgYXV0b21hdGljYWxseSByZXNldCB0byBhIG5ldw0KMjUyMjogICAgICAgICAgICAgICAgCQl2YWx1ZSB3aGVuIHRoZSB0aWNrIGNvdW50IGVxdWFscyB4TmV4dFRhc2tVbmJsb2NrVGltZS4gIEhvd2V2ZXIgaWYNCjI1MjM6ICAgICAgICAgICAgICAgIAkJdGlja2xlc3MgaWRsaW5nIGlzIHVzZWQgaXQgbWlnaHQgYmUgbW9yZSBpbXBvcnRhbnQgdG8gZW50ZXIgc2xlZXAgbW9kZQ0KMjUyNDogICAgICAgICAgICAgICAgCQlhdCB0aGUgZWFybGllc3QgcG9zc2libGUgdGltZSAtIHNvIHJlc2V0IHhOZXh0VGFza1VuYmxvY2tUaW1lIGhlcmUgdG8NCjI1MjU6ICAgICAgICAgICAgICAgIAkJZW5zdXJlIGl0IGlzIHVwZGF0ZWQgYXQgdGhlIGVhcmxpZXN0IHBvc3NpYmxlIHRpbWUuICovDQoyNTI2OiAgICAgICAgICAgICAgICAJCXBydlJlc2V0TmV4dFRhc2tVbmJsb2NrVGltZSgpOw0KMjUyNzogICAgICAgICAgICAgICAgCX0NCjI1Mjg6ICAgICAgICAgICAgICAgIAkjZW5kaWYNCjI1Mjk6ICAgICAgICAgICAgICAgIA0KMjUzMDogICAgICAgICAgICAgICAgCXJldHVybiB4UmV0dXJuOw0KQkZEMDQ2NEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMjUzMTogICAgICAgICAgICAgICAgfQ0KQkZEMDQ2NTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA0NjUyICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA0NjU0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA0NjU2ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA0NjU4ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA0NjVBICAgICAgMEMwMCAgIE5PUA0KMjUzMjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNTMzOiAgICAgICAgICAgICAgICANCjI1MzQ6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFRhc2tSZW1vdmVGcm9tVW5vcmRlcmVkRXZlbnRMaXN0KCBMaXN0SXRlbV90ICogcHhFdmVudExpc3RJdGVtLCBjb25zdCBUaWNrVHlwZV90IHhJdGVtVmFsdWUgKQ0KMjUzNTogICAgICAgICAgICAgICAgew0KQkZEMDQyQzQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA0MkM2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA0MkM4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA0MkNBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNDJDQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwNDJEMCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQoyNTM2OiAgICAgICAgICAgICAgICBUQ0JfdCAqcHhVbmJsb2NrZWRUQ0I7DQoyNTM3OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQoyNTM4OiAgICAgICAgICAgICAgICANCjI1Mzk6ICAgICAgICAgICAgICAgIAkvKiBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggVEhFIFNDSEVEVUxFUiBTVVNQRU5ERUQuICBJdCBpcyB1c2VkIGJ5DQoyNTQwOiAgICAgICAgICAgICAgICAJdGhlIGV2ZW50IGZsYWdzIGltcGxlbWVudGF0aW9uLiAqLw0KMjU0MTogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggdXhTY2hlZHVsZXJTdXNwZW5kZWQgIT0gcGRGQUxTRSApOw0KQkZEMDQyRDQgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkNCkJGRDA0MkQ4ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0MkVFDQpCRkQwNDJEQyAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDQyREUgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDQyRTAgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgNCkJGRDA0MkUyICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQ0KQkZEMDQyRTQgIDA5RUQzMEEwICAgQURESVUgQTEsIFpFUk8sIDI1NDENCkJGRDA0MkU2ICAgICAgMDlFRCAgIExCVSBWMSwgMTMoQTIpDQpCRkQwNDJFOCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA0MkVBICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNDJFQyAgICAgIDBDMDAgICBOT1ANCjI1NDI6ICAgICAgICAgICAgICAgIA0KMjU0MzogICAgICAgICAgICAgICAgCS8qIFN0b3JlIHRoZSBuZXcgaXRlbSB2YWx1ZSBpbiB0aGUgZXZlbnQgbGlzdC4gKi8NCjI1NDQ6ICAgICAgICAgICAgICAgIAlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggcHhFdmVudExpc3RJdGVtLCB4SXRlbVZhbHVlIHwgdGFza0VWRU5UX0xJU1RfSVRFTV9WQUxVRV9JTl9VU0UgKTsNCkJGRDA0MkVFICAwMDI0RkM3RSAgIExXIFYxLCAzNihTOCkNCkJGRDA0MkYyICA4MDAwNDFBMiAgIExVSSBWMCwgMHg4MDAwDQpCRkQwNDJGNiAgICAgIDQ0REEgICBPUjE2IFYxLCBWMA0KQkZEMDQyRjggIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDQyRkMgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyNTQ1OiAgICAgICAgICAgICAgICANCjI1NDY6ICAgICAgICAgICAgICAgIAkvKiBSZW1vdmUgdGhlIGV2ZW50IGxpc3QgZm9ybSB0aGUgZXZlbnQgZmxhZy4gIEludGVycnVwdHMgZG8gbm90IGFjY2Vzcw0KMjU0NzogICAgICAgICAgICAgICAgCWV2ZW50IGZsYWdzLiAqLw0KMjU0ODogICAgICAgICAgICAgICAgCXB4VW5ibG9ja2VkVENCID0gKCBUQ0JfdCAqICkgbGlzdEdFVF9MSVNUX0lURU1fT1dORVIoIHB4RXZlbnRMaXN0SXRlbSApOw0KQkZEMDQyRkUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDQzMDIgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQ0KQkZEMDQzMDQgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMjU0OTogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhVbmJsb2NrZWRUQ0IgKTsNCkJGRDA0MzA4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0MzBDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0MzIyDQpCRkQwNDMxMCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDQzMTIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDQzMTQgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgNCkJGRDA0MzE2ICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQ0KQkZEMDQzMTggIDA5RjUzMEEwICAgQURESVUgQTEsIFpFUk8sIDI1NDkNCkJGRDA0MzFBICAgICAgMDlGNSAgIExCVSBWMSwgNShBMykNCkJGRDA0MzFDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDQzMUUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0MzIwICAgICAgMEMwMCAgIE5PUA0KMjU1MDogICAgICAgICAgICAgICAgCSggdm9pZCApIHV4TGlzdFJlbW92ZSggcHhFdmVudExpc3RJdGVtICk7DQpCRkQwNDMyMiAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpDQpCRkQwNDMyNiAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQ0KQkZEMDQzMjggIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQ0KQkZEMDQzMkEgICAgICAwQzAwICAgTk9QDQoyNTUxOiAgICAgICAgICAgICAgICANCjI1NTI6ICAgICAgICAgICAgICAgIAkvKiBSZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgZGVsYXllZCBsaXN0IGFuZCBhZGQgaXQgdG8gdGhlIHJlYWR5IGxpc3QuICBUaGUNCjI1NTM6ICAgICAgICAgICAgICAgIAlzY2hlZHVsZXIgaXMgc3VzcGVuZGVkIHNvIGludGVycnVwdHMgd2lsbCBub3QgYmUgYWNjZXNzaW5nIHRoZSByZWFkeQ0KMjU1NDogICAgICAgICAgICAgICAgCWxpc3RzLiAqLw0KMjU1NTogICAgICAgICAgICAgICAgCSggdm9pZCApIHV4TGlzdFJlbW92ZSggJiggcHhVbmJsb2NrZWRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDQzMkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQzMzAgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwNDMzMiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDQzMzQgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUNCkJGRDA0MzM2ICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDENCkJGRDA0MzM4ICAgICAgMEMwMCAgIE5PUA0KMjU1NjogICAgICAgICAgICAgICAgCXBydkFkZFRhc2tUb1JlYWR5TGlzdCggcHhVbmJsb2NrZWRUQ0IgKTsNCkJGRDA0MzNBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0MzNFICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDA0MzQwICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwNDM0MiAgMTgxMDAwNjIgICBTTExWIFYxLCBWMCwgVjENCkJGRDA0MzQ0ICBGQzVDMTgxMCAgIFNCIFpFUk8sIC05MzIoUzApDQpCRkQwNDM0NiAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDQzNEEgICAgICA0NEQzICAgT1IxNiBWMCwgVjENCkJGRDA0MzRDICA4MDQwRjg1QyAgIFNXIFYwLCAtMzI3MDQoR1ApDQpCRkQwNDM1MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDM1NCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwNDM1NiAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyDQpCRkQwNDM1OCAgICAgIDI1QTQgICBTTEwgVjEsIFYwLCAyDQpCRkQwNDM1QSAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjENCkJGRDA0MzVDICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwNDM1RSAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwNDM2MCAgODA2QzMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjY2MA0KQkZEMDQzNjQgICAgICAwNUE2ICAgQUREVSBWMSwgVjEsIFYwDQpCRkQwNDM2NiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDM2QSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA0MzZDICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwNDM2RSAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDQzNzAgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZA0KQkZEMDQzNzIgIDBDMDAzRTRBICAgTEggUzIsIDMwNzIoVDIpDQpCRkQwNDM3NCAgICAgIDBDMDAgICBOT1ANCjI1NTc6ICAgICAgICAgICAgICAgIA0KMjU1ODogICAgICAgICAgICAgICAgCWlmKCBweFVuYmxvY2tlZFRDQi0+dXhQcmlvcml0eSA+IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApDQpCRkQwNDM3NiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDM3QSAgICAgIDY5QUIgICBMVyBWMSwgNDQoVjApDQpCRkQwNDM3QyAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDQzODAgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDQzODIgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxDQpCRkQwNDM4NCAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTANCkJGRDA0Mzg2ICAwMDA4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA0MzlBDQoyNTU5OiAgICAgICAgICAgICAgICAJew0KMjU2MDogICAgICAgICAgICAgICAgCQkvKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdGFzayByZW1vdmVkIGZyb20gdGhlIGV2ZW50IGxpc3QgaGFzDQoyNTYxOiAgICAgICAgICAgICAgICAJCWEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlIGNhbGxpbmcgdGFzay4gIFRoaXMgYWxsb3dzDQoyNTYyOiAgICAgICAgICAgICAgICAJCXRoZSBjYWxsaW5nIHRhc2sgdG8ga25vdyBpZiBpdCBzaG91bGQgZm9yY2UgYSBjb250ZXh0DQoyNTYzOiAgICAgICAgICAgICAgICAJCXN3aXRjaCBub3cuICovDQoyNTY0OiAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSBwZFRSVUU7DQpCRkQwNDM4QSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDQzOEMgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjU2NTogICAgICAgICAgICAgICAgDQoyNTY2OiAgICAgICAgICAgICAgICAJCS8qIE1hcmsgdGhhdCBhIHlpZWxkIGlzIHBlbmRpbmcgaW4gY2FzZSB0aGUgdXNlciBpcyBub3QgdXNpbmcgdGhlDQoyNTY3OiAgICAgICAgICAgICAgICAJCSJ4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4iIHBhcmFtZXRlciB0byBhbiBJU1Igc2FmZSBGcmVlUlRPUyBmdW5jdGlvbi4gKi8NCjI1Njg6ICAgICAgICAgICAgICAgIAkJeFlpZWxkUGVuZGluZyA9IHBkVFJVRTsNCkJGRDA0MzkwICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwNDM5MiAgODA0Q0Y4NUMgICBTVyBWMCwgLTMyNjkyKEdQKQ0KQkZEMDQzOTYgICAgICBDQzAzICAgQiAweEJGRDA0MzlFDQpCRkQwNDM5OCAgICAgIDBDMDAgICBOT1ANCjI1Njk6ICAgICAgICAgICAgICAgIAl9DQoyNTcwOiAgICAgICAgICAgICAgICAJZWxzZQ0KMjU3MTogICAgICAgICAgICAgICAgCXsNCjI1NzI6ICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHBkRkFMU0U7DQpCRkQwNDM5QSAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCjI1NzM6ICAgICAgICAgICAgICAgIAl9DQoyNTc0OiAgICAgICAgICAgICAgICANCjI1NzU6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDA0MzlFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjI1NzY6ICAgICAgICAgICAgICAgIH0NCkJGRDA0M0EyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNDNBNCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNDNBNiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNDNBOCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNDNBQSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNDNBQyAgICAgIDBDMDAgICBOT1ANCjI1Nzc6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjU3ODogICAgICAgICAgICAgICAgDQoyNTc5OiAgICAgICAgICAgICAgICB2b2lkIHZUYXNrU2V0VGltZU91dFN0YXRlKCBUaW1lT3V0X3QgKiBjb25zdCBweFRpbWVPdXQgKQ0KMjU4MDogICAgICAgICAgICAgICAgew0KQkZEMDhGNEMgICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQNCkJGRDA4RjRFICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkNCkJGRDA4RjUwICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkNCkJGRDA4RjUyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOEY1NCAgMDAxOEY4OUUgICBTVyBBMCwgMjQoUzgpDQoyNTgxOiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweFRpbWVPdXQgKTsNCkJGRDA4RjU4ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA4RjVDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA4RjcyDQpCRkQwOEY2MCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDhGNjIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDhGNjQgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgNCkJGRDA4RjY2ICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQ0KQkZEMDhGNjggIDBBMTUzMEEwICAgQURESVUgQTEsIFpFUk8sIDI1ODENCkJGRDA4RjZBICAgICAgMEExNSAgIExCVSBBMCwgNShTMSkNCkJGRDA4RjZDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDhGNkUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA4RjcwICAgICAgMEMwMCAgIE5PUA0KMjU4MjogICAgICAgICAgICAgICAgCXB4VGltZU91dC0+eE92ZXJmbG93Q291bnQgPSB4TnVtT2ZPdmVyZmxvd3M7DQpCRkQwOEY3MiAgODA1MEZDN0MgICBMVyBWMSwgLTMyNjg4KEdQKQ0KQkZEMDhGNzYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDhGN0EgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyNTgzOiAgICAgICAgICAgICAgICAJcHhUaW1lT3V0LT54VGltZU9uRW50ZXJpbmcgPSB4VGlja0NvdW50Ow0KQkZEMDhGN0MgIDgwM0NGQzdDICAgTFcgVjEsIC0zMjcwOChHUCkNCkJGRDA4RjgwICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA4Rjg0ICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQ0KMjU4NDogICAgICAgICAgICAgICAgfQ0KQkZEMDhGODYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4Rjg4ICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA4RjhBICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA4RjhDICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA4RjhFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4RjkwICAgICAgMEMwMCAgIE5PUA0KMjU4NTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNTg2OiAgICAgICAgICAgICAgICANCjI1ODc6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFRhc2tDaGVja0ZvclRpbWVPdXQoIFRpbWVPdXRfdCAqIGNvbnN0IHB4VGltZU91dCwgVGlja1R5cGVfdCAqIGNvbnN0IHB4VGlja3NUb1dhaXQgKQ0KMjU4ODogICAgICAgICAgICAgICAgew0KQkZEMDNGRUMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDAzRkVFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDAzRkYwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDAzRkYyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwM0ZGNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwM0ZGOCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQoyNTg5OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQoyNTkwOiAgICAgICAgICAgICAgICANCjI1OTE6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4VGltZU91dCApOw0KQkZEMDNGRkMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDQwMDAgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQwMTYNCkJGRDA0MDA0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNDAwNiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNDAwOCAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDQwMEEgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwNDAwQyAgMEExRjMwQTAgICBBRERJVSBBMSwgWkVSTywgMjU5MQ0KQkZEMDQwMEUgICAgICAwQTFGICAgTEJVIEEwLCAtMShTMSkNCkJGRDA0MDEwICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDQwMTIgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0MDE0ICAgICAgMEMwMCAgIE5PUA0KMjU5MjogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhUaWNrc1RvV2FpdCApOw0KQkZEMDQwMTYgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDQwMUEgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQwMzANCkJGRDA0MDFFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNDAyMCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNDAyMiAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDQwMjQgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwNDAyNiAgMEEyMDMwQTAgICBBRERJVSBBMSwgWkVSTywgMjU5Mg0KQkZEMDQwMjggICAgICAwQTIwICAgTEJVIEEwLCAwKFYwKQ0KQkZEMDQwMkEgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwNDAyQyAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDQwMkUgICAgICAwQzAwICAgTk9QDQoyNTkzOiAgICAgICAgICAgICAgICANCjI1OTQ6ICAgICAgICAgICAgICAgIAl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA0MDMwICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwNDAzMiAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDA0MDM0ICAgICAgMEMwMCAgIE5PUA0KMjU5NTogICAgICAgICAgICAgICAgCXsNCjI1OTY6ICAgICAgICAgICAgICAgIAkJLyogTWlub3Igb3B0aW1pc2F0aW9uLiAgVGhlIHRpY2sgY291bnQgY2Fubm90IGNoYW5nZSBpbiB0aGlzIGJsb2NrLiAqLw0KMjU5NzogICAgICAgICAgICAgICAgCQljb25zdCBUaWNrVHlwZV90IHhDb25zdFRpY2tDb3VudCA9IHhUaWNrQ291bnQ7DQpCRkQwNDAzNiAgODAzQ0ZDNUMgICBMVyBWMCwgLTMyNzA4KEdQKQ0KQkZEMDQwM0EgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMjU5ODogICAgICAgICAgICAgICAgDQoyNTk5OiAgICAgICAgICAgICAgICAJCSNpZiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKQ0KMjYwMDogICAgICAgICAgICAgICAgCQkJLyogSWYgSU5DTFVERV92VGFza1N1c3BlbmQgaXMgc2V0IHRvIDEgYW5kIHRoZSBibG9jayB0aW1lIHNwZWNpZmllZCBpcw0KMjYwMTogICAgICAgICAgICAgICAgCQkJdGhlIG1heGltdW0gYmxvY2sgdGltZSB0aGVuIHRoZSB0YXNrIHNob3VsZCBibG9jayBpbmRlZmluaXRlbHksIGFuZA0KMjYwMjogICAgICAgICAgICAgICAgCQkJdGhlcmVmb3JlIG5ldmVyIHRpbWUgb3V0LiAqLw0KMjYwMzogICAgICAgICAgICAgICAgCQkJaWYoICpweFRpY2tzVG9XYWl0ID09IHBvcnRNQVhfREVMQVkgKQ0KQkZEMDQwM0UgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDQwNDIgICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwNDA0NCAgICAgIEVEN0YgICBMSSBWMCwgLTENCkJGRDA0MDQ2ICAwMDA1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDQwNTQNCkJGRDA0MDQ4ICAwQzAwMDAwNSAgIFNMTCBaRVJPLCBBMSwgMQ0KQkZEMDQwNEEgICAgICAwQzAwICAgTk9QDQoyNjA0OiAgICAgICAgICAgICAgICAJCQl7DQoyNjA1OiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHBkRkFMU0U7DQpCRkQwNDA0QyAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCkJGRDA0MDRFICBDQzNEMDAxMCAgIFJFUEwuUEggVDksIDB4MTANCkJGRDA0MDUwICAgICAgQ0MzRCAgIEIgMHhCRkQwNDBDQw0KQkZEMDQwNTIgICAgICAwQzAwICAgTk9QDQoyNjA2OiAgICAgICAgICAgICAgICAJCQl9DQoyNjA3OiAgICAgICAgICAgICAgICAJCQllbHNlIC8qIFdlIGFyZSBub3QgYmxvY2tpbmcgaW5kZWZpbml0ZWx5LCBwZXJmb3JtIHRoZSBjaGVja3MgYmVsb3cuICovDQoyNjA4OiAgICAgICAgICAgICAgICAJCSNlbmRpZg0KMjYwOTogICAgICAgICAgICAgICAgDQoyNjEwOiAgICAgICAgICAgICAgICAJCWlmKCAoIHhOdW1PZk92ZXJmbG93cyAhPSBweFRpbWVPdXQtPnhPdmVyZmxvd0NvdW50ICkgJiYgKCB4Q29uc3RUaWNrQ291bnQgPj0gcHhUaW1lT3V0LT54VGltZU9uRW50ZXJpbmcgKSApIC8qbGludCAhZTUyNSBJbmRlbnRhdGlvbiBwcmVmZXJyZWQgYXMgaXMgdG8gbWFrZSBjb2RlIHdpdGhpbiBwcmUtcHJvY2Vzc29yIGRpcmVjdGl2ZXMgY2xlYXJlci4gKi8NCkJGRDA0MDU0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA0MDU4ICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDQwNUEgIDgwNTBGQzVDICAgTFcgVjAsIC0zMjY4OChHUCkNCkJGRDA0MDVFICAwMDBGOTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDQwODANCkJGRDA0MDYwICAwQzAwMDAwRiAgIFNMTCBaRVJPLCBUNywgMQ0KQkZEMDQwNjIgICAgICAwQzAwICAgTk9QDQpCRkQwNDA2NCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNDA2OCAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkNCkJGRDA0MDZBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0MDZFICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQ0KQkZEMDQwNzAgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwNDA3MiAgMDAwNTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDA4MA0KMjYxMTogICAgICAgICAgICAgICAgCQl7DQoyNjEyOiAgICAgICAgICAgICAgICAJCQkvKiBUaGUgdGljayBjb3VudCBpcyBncmVhdGVyIHRoYW4gdGhlIHRpbWUgYXQgd2hpY2ggdlRhc2tTZXRUaW1lb3V0KCkNCjI2MTM6ICAgICAgICAgICAgICAgIAkJCXdhcyBjYWxsZWQsIGJ1dCBoYXMgYWxzbyBvdmVyZmxvd2VkIHNpbmNlIHZUYXNrU2V0VGltZU91dCgpIHdhcyBjYWxsZWQuDQoyNjE0OiAgICAgICAgICAgICAgICAJCQlJdCBtdXN0IGhhdmUgd3JhcHBlZCBhbGwgdGhlIHdheSBhcm91bmQgYW5kIGdvbmUgcGFzdCB1cyBhZ2Fpbi4gVGhpcw0KMjYxNTogICAgICAgICAgICAgICAgCQkJcGFzc2VkIHNpbmNlIHZUYXNrU2V0VGltZW91dCgpIHdhcyBjYWxsZWQuICovDQoyNjE2OiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRUUlVFOw0KQkZEMDQwNzYgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA0MDc4ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA0MDdDICAgICAgQ0MyNyAgIEIgMHhCRkQwNDBDQw0KQkZEMDQwN0UgICAgICAwQzAwICAgTk9QDQoyNjE3OiAgICAgICAgICAgICAgICAJCX0NCjI2MTg6ICAgICAgICAgICAgICAgIAkJZWxzZSBpZiggKCB4Q29uc3RUaWNrQ291bnQgLSBweFRpbWVPdXQtPnhUaW1lT25FbnRlcmluZyApIDwgKnB4VGlja3NUb1dhaXQgKQ0KQkZEMDQwODAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDQwODQgICAgICA2OTIxICAgTFcgVjAsIDQoVjApDQpCRkQwNDA4NiAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpDQpCRkQwNDA4QSAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjANCkJGRDA0MDhDICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDA0MDkwICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDQwOTIgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwDQpCRkQwNDA5NCAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTANCkJGRDA0MDk2ICAwMDE2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA0MEM2DQoyNjE5OiAgICAgICAgICAgICAgICAJCXsNCjI2MjA6ICAgICAgICAgICAgICAgIAkJCS8qIE5vdCBhIGdlbnVpbmUgdGltZW91dC4gQWRqdXN0IHBhcmFtZXRlcnMgZm9yIHRpbWUgcmVtYWluaW5nLiAqLw0KMjYyMTogICAgICAgICAgICAgICAgCQkJKnB4VGlja3NUb1dhaXQgLT0gKCB4Q29uc3RUaWNrQ291bnQgLSAgcHhUaW1lT3V0LT54VGltZU9uRW50ZXJpbmcgKTsNCkJGRDA0MDlBICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDA0MDlFICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDQwQTAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDQwQTQgICAgICA2QTIxICAgTFcgQTAsIDQoVjApDQpCRkQwNDBBNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDBBQSAgICAgIDA1MjkgICBTVUJVIFYwLCBBMCwgVjANCkJGRDA0MEFDICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMA0KQkZEMDQwQUUgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDQwQjIgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyNjIyOiAgICAgICAgICAgICAgICAJCQl2VGFza1NldFRpbWVPdXRTdGF0ZSggcHhUaW1lT3V0ICk7DQpCRkQwNDBCNCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpDQpCRkQwNDBCOCAgNDdBNjc3RTggICBKQUxTIHZUYXNrU2V0VGltZU91dFN0YXRlDQpCRkQwNDBCQyAgICAgIDBDMDAgICBOT1ANCjI2MjM6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZEZBTFNFOw0KQkZEMDQwQkUgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQpCRkQwNDBDMiAgICAgIENDMDQgICBCIDB4QkZEMDQwQ0MNCkJGRDA0MEM0ICAgICAgMEMwMCAgIE5PUA0KMjYyNDogICAgICAgICAgICAgICAgCQl9DQoyNjI1OiAgICAgICAgICAgICAgICAJCWVsc2UNCjI2MjY6ICAgICAgICAgICAgICAgIAkJew0KMjYyNzogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA0MEM2ICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwNDBDOCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoyNjI4OiAgICAgICAgICAgICAgICAJCX0NCjI2Mjk6ICAgICAgICAgICAgICAgIAl9DQoyNjMwOiAgICAgICAgICAgICAgICAJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDA0MENDICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDA0MENFICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1OEQyDQpCRkQwNDBEMCAgICAgIDBDMDAgICBOT1ANCjI2MzE6ICAgICAgICAgICAgICAgIA0KMjYzMjogICAgICAgICAgICAgICAgCXJldHVybiB4UmV0dXJuOw0KQkZEMDQwRDIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMjYzMzogICAgICAgICAgICAgICAgfQ0KQkZEMDQwRDYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA0MEQ4ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA0MERBICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA0MERDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA0MERFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA0MEUwICAgICAgMEMwMCAgIE5PUA0KMjYzNDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNjM1OiAgICAgICAgICAgICAgICANCjI2MzY6ICAgICAgICAgICAgICAgIHZvaWQgdlRhc2tNaXNzZWRZaWVsZCggdm9pZCApDQoyNjM3OiAgICAgICAgICAgICAgICB7DQpCRkQwOUU1NCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUU1NiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5RTU4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoyNjM4OiAgICAgICAgICAgICAgICAJeFlpZWxkUGVuZGluZyA9IHBkVFJVRTsNCkJGRDA5RTVBICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwOUU1QyAgODA0Q0Y4NUMgICBTVyBWMCwgLTMyNjkyKEdQKQ0KMjYzOTogICAgICAgICAgICAgICAgfQ0KQkZEMDlFNjAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5RTYyICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlFNjQgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOUU2NiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUU2OCAgICAgIDBDMDAgICBOT1ANCjI2NDA6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjY0MTogICAgICAgICAgICAgICAgDQoyNjQyOiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQoyNjQzOiAgICAgICAgICAgICAgICANCjI2NDQ6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFRhc2tHZXRUYXNrTnVtYmVyKCBUYXNrSGFuZGxlX3QgeFRhc2sgKQ0KMjY0NTogICAgICAgICAgICAgICAgCXsNCjI2NDY6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFJldHVybjsNCjI2NDc6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqcHhUQ0I7DQoyNjQ4OiAgICAgICAgICAgICAgICANCjI2NDk6ICAgICAgICAgICAgICAgIAkJaWYoIHhUYXNrICE9IE5VTEwgKQ0KMjY1MDogICAgICAgICAgICAgICAgCQl7DQoyNjUxOiAgICAgICAgICAgICAgICAJCQlweFRDQiA9ICggVENCX3QgKiApIHhUYXNrOw0KMjY1MjogICAgICAgICAgICAgICAgCQkJdXhSZXR1cm4gPSBweFRDQi0+dXhUYXNrTnVtYmVyOw0KMjY1MzogICAgICAgICAgICAgICAgCQl9DQoyNjU0OiAgICAgICAgICAgICAgICAJCWVsc2UNCjI2NTU6ICAgICAgICAgICAgICAgIAkJew0KMjY1NjogICAgICAgICAgICAgICAgCQkJdXhSZXR1cm4gPSAwVTsNCjI2NTc6ICAgICAgICAgICAgICAgIAkJfQ0KMjY1ODogICAgICAgICAgICAgICAgDQoyNjU5OiAgICAgICAgICAgICAgICAJCXJldHVybiB1eFJldHVybjsNCjI2NjA6ICAgICAgICAgICAgICAgIAl9DQoyNjYxOiAgICAgICAgICAgICAgICANCjI2NjI6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCjI2NjM6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjY2NDogICAgICAgICAgICAgICAgDQoyNjY1OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQoyNjY2OiAgICAgICAgICAgICAgICANCjI2Njc6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrU2V0VGFza051bWJlciggVGFza0hhbmRsZV90IHhUYXNrLCBjb25zdCBVQmFzZVR5cGVfdCB1eEhhbmRsZSApDQoyNjY4OiAgICAgICAgICAgICAgICAJew0KMjY2OTogICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjI2NzA6ICAgICAgICAgICAgICAgIA0KMjY3MTogICAgICAgICAgICAgICAgCQlpZiggeFRhc2sgIT0gTlVMTCApDQoyNjcyOiAgICAgICAgICAgICAgICAJCXsNCjI2NzM6ICAgICAgICAgICAgICAgIAkJCXB4VENCID0gKCBUQ0JfdCAqICkgeFRhc2s7DQoyNjc0OiAgICAgICAgICAgICAgICAJCQlweFRDQi0+dXhUYXNrTnVtYmVyID0gdXhIYW5kbGU7DQoyNjc1OiAgICAgICAgICAgICAgICAJCX0NCjI2NzY6ICAgICAgICAgICAgICAgIAl9DQoyNjc3OiAgICAgICAgICAgICAgICANCjI2Nzg6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCjI2Nzk6ICAgICAgICAgICAgICAgIA0KMjY4MDogICAgICAgICAgICAgICAgLyoNCjI2ODE6ICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoyNjgyOiAgICAgICAgICAgICAgICAgKiBUaGUgSWRsZSB0YXNrLg0KMjY4MzogICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMjY4NDogICAgICAgICAgICAgICAgICoNCjI2ODU6ICAgICAgICAgICAgICAgICAqIFRoZSBwb3J0VEFTS19GVU5DVElPTigpIG1hY3JvIGlzIHVzZWQgdG8gYWxsb3cgcG9ydC9jb21waWxlciBzcGVjaWZpYw0KMjY4NjogICAgICAgICAgICAgICAgICogbGFuZ3VhZ2UgZXh0ZW5zaW9ucy4gIFRoZSBlcXVpdmFsZW50IHByb3RvdHlwZSBmb3IgdGhpcyBmdW5jdGlvbiBpczoNCjI2ODc6ICAgICAgICAgICAgICAgICAqDQoyNjg4OiAgICAgICAgICAgICAgICAgKiB2b2lkIHBydklkbGVUYXNrKCB2b2lkICpwdlBhcmFtZXRlcnMgKTsNCjI2ODk6ICAgICAgICAgICAgICAgICAqDQoyNjkwOiAgICAgICAgICAgICAgICAgKi8NCjI2OTE6ICAgICAgICAgICAgICAgIHN0YXRpYyBwb3J0VEFTS19GVU5DVElPTiggcHJ2SWRsZVRhc2ssIHB2UGFyYW1ldGVycyApDQoyNjkyOiAgICAgICAgICAgICAgICB7DQpCRkQwOEJDNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDhCQzYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDhCQzggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDhCQ0EgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4QkNDICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCkJGRDA4QkQwICAgICAgQ0MwMiAgIEIgMHhCRkQwOEJENg0KQkZEMDhCRDIgICAgICAwQzAwICAgTk9QDQoyNjkzOiAgICAgICAgICAgICAgICAJLyogU3RvcCB3YXJuaW5ncy4gKi8NCjI2OTQ6ICAgICAgICAgICAgICAgIAkoIHZvaWQgKSBwdlBhcmFtZXRlcnM7DQoyNjk1OiAgICAgICAgICAgICAgICANCjI2OTY6ICAgICAgICAgICAgICAgIAlmb3IoIDs7ICkNCjI2OTc6ICAgICAgICAgICAgICAgIAl7DQoyNjk4OiAgICAgICAgICAgICAgICAJCS8qIFNlZSBpZiBhbnkgdGFza3MgaGF2ZSBiZWVuIGRlbGV0ZWQuICovDQoyNjk5OiAgICAgICAgICAgICAgICAJCXBydkNoZWNrVGFza3NXYWl0aW5nVGVybWluYXRpb24oKTsNCkJGRDA4QkQ2ICAzNUFFNzdFOCAgIEpBTFMgcHJ2Q2hlY2tUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbg0KQkZEMDhCRDggIDBDMDAzNUFFICAgTEhVIFQ1LCAzMDcyKFQ2KQ0KQkZEMDhCREEgICAgICAwQzAwICAgTk9QDQoyNzAwOiAgICAgICAgICAgICAgICANCjI3MDE6ICAgICAgICAgICAgICAgIAkJI2lmICggY29uZmlnVVNFX1BSRUVNUFRJT04gPT0gMCApDQoyNzAyOiAgICAgICAgICAgICAgICAJCXsNCjI3MDM6ICAgICAgICAgICAgICAgIAkJCS8qIElmIHdlIGFyZSBub3QgdXNpbmcgcHJlZW1wdGlvbiB3ZSBrZWVwIGZvcmNpbmcgYSB0YXNrIHN3aXRjaCB0bw0KMjcwNDogICAgICAgICAgICAgICAgCQkJc2VlIGlmIGFueSBvdGhlciB0YXNrIGhhcyBiZWNvbWUgYXZhaWxhYmxlLiAgSWYgd2UgYXJlIHVzaW5nDQoyNzA1OiAgICAgICAgICAgICAgICAJCQlwcmVlbXB0aW9uIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcyBhcyBhbnkgdGFzayBiZWNvbWluZyBhdmFpbGFibGUNCjI3MDY6ICAgICAgICAgICAgICAgIAkJCXdpbGwgYXV0b21hdGljYWxseSBnZXQgdGhlIHByb2Nlc3NvciBhbnl3YXkuICovDQoyNzA3OiAgICAgICAgICAgICAgICAJCQl0YXNrWUlFTEQoKTsNCjI3MDg6ICAgICAgICAgICAgICAgIAkJfQ0KMjcwOTogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnVVNFX1BSRUVNUFRJT04gKi8NCjI3MTA6ICAgICAgICAgICAgICAgIA0KMjcxMTogICAgICAgICAgICAgICAgCQkjaWYgKCAoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDEgKSAmJiAoIGNvbmZpZ0lETEVfU0hPVUxEX1lJRUxEID09IDEgKSApDQoyNzEyOiAgICAgICAgICAgICAgICAJCXsNCjI3MTM6ICAgICAgICAgICAgICAgIAkJCS8qIFdoZW4gdXNpbmcgcHJlZW1wdGlvbiB0YXNrcyBvZiBlcXVhbCBwcmlvcml0eSB3aWxsIGJlDQoyNzE0OiAgICAgICAgICAgICAgICAJCQl0aW1lc2xpY2VkLiAgSWYgYSB0YXNrIHRoYXQgaXMgc2hhcmluZyB0aGUgaWRsZSBwcmlvcml0eSBpcyByZWFkeQ0KMjcxNTogICAgICAgICAgICAgICAgCQkJdG8gcnVuIHRoZW4gdGhlIGlkbGUgdGFzayBzaG91bGQgeWllbGQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlDQoyNzE2OiAgICAgICAgICAgICAgICAJCQl0aW1lc2xpY2UuDQoyNzE3OiAgICAgICAgICAgICAgICANCjI3MTg6ICAgICAgICAgICAgICAgIAkJCUEgY3JpdGljYWwgcmVnaW9uIGlzIG5vdCByZXF1aXJlZCBoZXJlIGFzIHdlIGFyZSBqdXN0IHJlYWRpbmcgZnJvbQ0KMjcxOTogICAgICAgICAgICAgICAgCQkJdGhlIGxpc3QsIGFuZCBhbiBvY2Nhc2lvbmFsIGluY29ycmVjdCB2YWx1ZSB3aWxsIG5vdCBtYXR0ZXIuICBJZg0KMjcyMDogICAgICAgICAgICAgICAgCQkJdGhlIHJlYWR5IGxpc3QgYXQgdGhlIGlkbGUgcHJpb3JpdHkgY29udGFpbnMgbW9yZSB0aGFuIG9uZSB0YXNrDQoyNzIxOiAgICAgICAgICAgICAgICAJCQl0aGVuIGEgdGFzayBvdGhlciB0aGFuIHRoZSBpZGxlIHRhc2sgaXMgcmVhZHkgdG8gZXhlY3V0ZS4gKi8NCjI3MjI6ICAgICAgICAgICAgICAgIAkJCWlmKCBsaXN0Q1VSUkVOVF9MSVNUX0xFTkdUSCggJiggcHhSZWFkeVRhc2tzTGlzdHNbIHRza0lETEVfUFJJT1JJVFkgXSApICkgPiAoIFVCYXNlVHlwZV90ICkgMSApDQpCRkQwOEJEQyAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDhCREUgIEZDNDJCRkQyICAgTERDMSBGMzAsIC05NTgoUzIpDQpCRkQwOEJFMCAgODA2Q0ZDNDIgICBMVyBWMCwgLTMyNjYwKFYwKQ0KQkZEMDhCRTQgIDAwMDJCMDQyICAgU0xUSVUgVjAsIFYwLCAyDQpCRkQwOEJFOCAgRkZGNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOEJENA0KQkZEMDhCRUEgIDc3RThGRkY0ICAgTFcgUkEsIDMwNjk2KFM0KQ0KMjcyMzogICAgICAgICAgICAgICAgCQkJew0KMjcyNDogICAgICAgICAgICAgICAgCQkJCXRhc2tZSUVMRCgpOw0KQkZEMDhCRUMgIDRFNTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQ0KQkZEMDhCRUUgICAgICA0RTU2ICAgQURESVUgUzIsIFMyLCAtNQ0KQkZEMDhCRjAgICAgICAwQzAwICAgTk9QDQpCRkQwOEJGMiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwOEJGNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOEJGQSAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDA4QkZFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA4QzAyICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkNCkJGRDA4QzA2ICA0RTY2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQ0KQkZEMDhDMDggICAgICA0RTY2ICAgQURESVUgUzMsIFMzLCAzDQpCRkQwOEMwQSAgICAgIDBDMDAgICBOT1ANCjI3MjU6ICAgICAgICAgICAgICAgIAkJCX0NCjI3MjY6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjI3Mjc6ICAgICAgICAgICAgICAgIAkJCXsNCjI3Mjg6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyNzI5OiAgICAgICAgICAgICAgICAJCQl9DQoyNzMwOiAgICAgICAgICAgICAgICAJCX0NCjI3MzE6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qICggKCBjb25maWdVU0VfUFJFRU1QVElPTiA9PSAxICkgJiYgKCBjb25maWdJRExFX1NIT1VMRF9ZSUVMRCA9PSAxICkgKSAqLw0KMjczMjogICAgICAgICAgICAgICAgDQoyNzMzOiAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9JRExFX0hPT0sgPT0gMSApDQoyNzM0OiAgICAgICAgICAgICAgICAJCXsNCjI3MzU6ICAgICAgICAgICAgICAgIAkJCWV4dGVybiB2b2lkIHZBcHBsaWNhdGlvbklkbGVIb29rKCB2b2lkICk7DQoyNzM2OiAgICAgICAgICAgICAgICANCjI3Mzc6ICAgICAgICAgICAgICAgIAkJCS8qIENhbGwgdGhlIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiBmcm9tIHdpdGhpbiB0aGUgaWRsZSB0YXNrLiAgVGhpcw0KMjczODogICAgICAgICAgICAgICAgCQkJYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiBkZXNpZ25lciB0byBhZGQgYmFja2dyb3VuZCBmdW5jdGlvbmFsaXR5DQoyNzM5OiAgICAgICAgICAgICAgICAJCQl3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiBhIHNlcGFyYXRlIHRhc2suDQoyNzQwOiAgICAgICAgICAgICAgICAJCQlOT1RFOiB2QXBwbGljYXRpb25JZGxlSG9vaygpIE1VU1QgTk9ULCBVTkRFUiBBTlkgQ0lSQ1VNU1RBTkNFUywNCjI3NDE6ICAgICAgICAgICAgICAgIAkJCUNBTEwgQSBGVU5DVElPTiBUSEFUIE1JR0hUIEJMT0NLLiAqLw0KMjc0MjogICAgICAgICAgICAgICAgCQkJdkFwcGxpY2F0aW9uSWRsZUhvb2soKTsNCjI3NDM6ICAgICAgICAgICAgICAgIAkJfQ0KMjc0NDogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnVVNFX0lETEVfSE9PSyAqLw0KMjc0NTogICAgICAgICAgICAgICAgDQoyNzQ2OiAgICAgICAgICAgICAgICAJCS8qIFRoaXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2hvdWxkIHVzZSBpbmVxdWFsaXR5IHRvIDAsIG5vdCBlcXVhbGl0eQ0KMjc0NzogICAgICAgICAgICAgICAgCQl0byAxLiAgVGhpcyBpcyB0byBlbnN1cmUgcG9ydFNVUFBSRVNTX1RJQ0tTX0FORF9TTEVFUCgpIGlzIGNhbGxlZCB3aGVuDQoyNzQ4OiAgICAgICAgICAgICAgICAJCXVzZXIgZGVmaW5lZCBsb3cgcG93ZXIgbW9kZQlpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZQ0KMjc0OTogICAgICAgICAgICAgICAgCQljb25maWdVU0VfVElDS0xFU1NfSURMRSB0byBiZSBzZXQgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIDEuICovDQoyNzUwOiAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICE9IDAgKQ0KMjc1MTogICAgICAgICAgICAgICAgCQl7DQoyNzUyOiAgICAgICAgICAgICAgICAJCVRpY2tUeXBlX3QgeEV4cGVjdGVkSWRsZVRpbWU7DQoyNzUzOiAgICAgICAgICAgICAgICANCjI3NTQ6ICAgICAgICAgICAgICAgIAkJCS8qIEl0IGlzIG5vdCBkZXNpcmFibGUgdG8gc3VzcGVuZCB0aGVuIHJlc3VtZSB0aGUgc2NoZWR1bGVyIG9uDQoyNzU1OiAgICAgICAgICAgICAgICAJCQllYWNoIGl0ZXJhdGlvbiBvZiB0aGUgaWRsZSB0YXNrLiAgVGhlcmVmb3JlLCBhIHByZWxpbWluYXJ5DQoyNzU2OiAgICAgICAgICAgICAgICAJCQl0ZXN0IG9mIHRoZSBleHBlY3RlZCBpZGxlIHRpbWUgaXMgcGVyZm9ybWVkIHdpdGhvdXQgdGhlDQoyNzU3OiAgICAgICAgICAgICAgICAJCQlzY2hlZHVsZXIgc3VzcGVuZGVkLiAgVGhlIHJlc3VsdCBoZXJlIGlzIG5vdCBuZWNlc3NhcmlseQ0KMjc1ODogICAgICAgICAgICAgICAgCQkJdmFsaWQuICovDQoyNzU5OiAgICAgICAgICAgICAgICAJCQl4RXhwZWN0ZWRJZGxlVGltZSA9IHBydkdldEV4cGVjdGVkSWRsZVRpbWUoKTsNCjI3NjA6ICAgICAgICAgICAgICAgIA0KMjc2MTogICAgICAgICAgICAgICAgCQkJaWYoIHhFeHBlY3RlZElkbGVUaW1lID49IGNvbmZpZ0VYUEVDVEVEX0lETEVfVElNRV9CRUZPUkVfU0xFRVAgKQ0KMjc2MjogICAgICAgICAgICAgICAgCQkJew0KMjc2MzogICAgICAgICAgICAgICAgCQkJCXZUYXNrU3VzcGVuZEFsbCgpOw0KMjc2NDogICAgICAgICAgICAgICAgCQkJCXsNCjI3NjU6ICAgICAgICAgICAgICAgIAkJCQkJLyogTm93IHRoZSBzY2hlZHVsZXIgaXMgc3VzcGVuZGVkLCB0aGUgZXhwZWN0ZWQgaWRsZQ0KMjc2NjogICAgICAgICAgICAgICAgCQkJCQl0aW1lIGNhbiBiZSBzYW1wbGVkIGFnYWluLCBhbmQgdGhpcyB0aW1lIGl0cyB2YWx1ZSBjYW4NCjI3Njc6ICAgICAgICAgICAgICAgIAkJCQkJYmUgdXNlZC4gKi8NCjI3Njg6ICAgICAgICAgICAgICAgIAkJCQkJY29uZmlnQVNTRVJUKCB4TmV4dFRhc2tVbmJsb2NrVGltZSA+PSB4VGlja0NvdW50ICk7DQoyNzY5OiAgICAgICAgICAgICAgICAJCQkJCXhFeHBlY3RlZElkbGVUaW1lID0gcHJ2R2V0RXhwZWN0ZWRJZGxlVGltZSgpOw0KMjc3MDogICAgICAgICAgICAgICAgDQoyNzcxOiAgICAgICAgICAgICAgICAJCQkJCWlmKCB4RXhwZWN0ZWRJZGxlVGltZSA+PSBjb25maWdFWFBFQ1RFRF9JRExFX1RJTUVfQkVGT1JFX1NMRUVQICkNCjI3NzI6ICAgICAgICAgICAgICAgIAkJCQkJew0KMjc3MzogICAgICAgICAgICAgICAgCQkJCQkJdHJhY2VMT1dfUE9XRVJfSURMRV9CRUdJTigpOw0KMjc3NDogICAgICAgICAgICAgICAgCQkJCQkJcG9ydFNVUFBSRVNTX1RJQ0tTX0FORF9TTEVFUCggeEV4cGVjdGVkSWRsZVRpbWUgKTsNCjI3NzU6ICAgICAgICAgICAgICAgIAkJCQkJCXRyYWNlTE9XX1BPV0VSX0lETEVfRU5EKCk7DQoyNzc2OiAgICAgICAgICAgICAgICAJCQkJCX0NCjI3Nzc6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMjc3ODogICAgICAgICAgICAgICAgCQkJCQl7DQoyNzc5OiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyNzgwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjI3ODE6ICAgICAgICAgICAgICAgIAkJCQl9DQoyNzgyOiAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCjI3ODM6ICAgICAgICAgICAgICAgIAkJCX0NCjI3ODQ6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjI3ODU6ICAgICAgICAgICAgICAgIAkJCXsNCjI3ODY6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyNzg3OiAgICAgICAgICAgICAgICAJCQl9DQoyNzg4OiAgICAgICAgICAgICAgICAJCX0NCjI3ODk6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9USUNLTEVTU19JRExFICovDQoyNzkwOiAgICAgICAgICAgICAgICAJfQ0KQkZEMDhCRDQgICAgICAwQzAwICAgTk9QDQpCRkQwOEMwQyAgICAgIENGRTQgICBCIDB4QkZEMDhCRDYNCkJGRDA4QzBFICAgICAgMEMwMCAgIE5PUA0KMjc5MTogICAgICAgICAgICAgICAgfQ0KMjc5MjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNzkzOiAgICAgICAgICAgICAgICANCjI3OTQ6ICAgICAgICAgICAgICAgICNpZiggY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgIT0gMCApDQoyNzk1OiAgICAgICAgICAgICAgICANCjI3OTY6ICAgICAgICAgICAgICAgIAllU2xlZXBNb2RlU3RhdHVzIGVUYXNrQ29uZmlybVNsZWVwTW9kZVN0YXR1cyggdm9pZCApDQoyNzk3OiAgICAgICAgICAgICAgICAJew0KMjc5ODogICAgICAgICAgICAgICAgCS8qIFRoZSBpZGxlIHRhc2sgZXhpc3RzIGluIGFkZGl0aW9uIHRvIHRoZSBhcHBsaWNhdGlvbiB0YXNrcy4gKi8NCjI3OTk6ICAgICAgICAgICAgICAgIAljb25zdCBVQmFzZVR5cGVfdCB1eE5vbkFwcGxpY2F0aW9uVGFza3MgPSAxOw0KMjgwMDogICAgICAgICAgICAgICAgCWVTbGVlcE1vZGVTdGF0dXMgZVJldHVybiA9IGVTdGFuZGFyZFNsZWVwOw0KMjgwMTogICAgICAgICAgICAgICAgDQoyODAyOiAgICAgICAgICAgICAgICAJCWlmKCBsaXN0Q1VSUkVOVF9MSVNUX0xFTkdUSCggJnhQZW5kaW5nUmVhZHlMaXN0ICkgIT0gMCApDQoyODAzOiAgICAgICAgICAgICAgICAJCXsNCjI4MDQ6ICAgICAgICAgICAgICAgIAkJCS8qIEEgdGFzayB3YXMgbWFkZSByZWFkeSB3aGlsZSB0aGUgc2NoZWR1bGVyIHdhcyBzdXNwZW5kZWQuICovDQoyODA1OiAgICAgICAgICAgICAgICAJCQllUmV0dXJuID0gZUFib3J0U2xlZXA7DQoyODA2OiAgICAgICAgICAgICAgICAJCX0NCjI4MDc6ICAgICAgICAgICAgICAgIAkJZWxzZSBpZiggeFlpZWxkUGVuZGluZyAhPSBwZEZBTFNFICkNCjI4MDg6ICAgICAgICAgICAgICAgIAkJew0KMjgwOTogICAgICAgICAgICAgICAgCQkJLyogQSB5aWVsZCB3YXMgcGVuZGVkIHdoaWxlIHRoZSBzY2hlZHVsZXIgd2FzIHN1c3BlbmRlZC4gKi8NCjI4MTA6ICAgICAgICAgICAgICAgIAkJCWVSZXR1cm4gPSBlQWJvcnRTbGVlcDsNCjI4MTE6ICAgICAgICAgICAgICAgIAkJfQ0KMjgxMjogICAgICAgICAgICAgICAgCQllbHNlDQoyODEzOiAgICAgICAgICAgICAgICAJCXsNCjI4MTQ6ICAgICAgICAgICAgICAgIAkJCS8qIElmIGFsbCB0aGUgdGFza3MgYXJlIGluIHRoZSBzdXNwZW5kZWQgbGlzdCAod2hpY2ggbWlnaHQgbWVhbiB0aGV5DQoyODE1OiAgICAgICAgICAgICAgICAJCQloYXZlIGFuIGluZmluaXRlIGJsb2NrIHRpbWUgcmF0aGVyIHRoYW4gYWN0dWFsbHkgYmVpbmcgc3VzcGVuZGVkKQ0KMjgxNjogICAgICAgICAgICAgICAgCQkJdGhlbiBpdCBpcyBzYWZlIHRvIHR1cm4gYWxsIGNsb2NrcyBvZmYgYW5kIGp1c3Qgd2FpdCBmb3IgZXh0ZXJuYWwNCjI4MTc6ICAgICAgICAgICAgICAgIAkJCWludGVycnVwdHMuICovDQoyODE4OiAgICAgICAgICAgICAgICAJCQlpZiggbGlzdENVUlJFTlRfTElTVF9MRU5HVEgoICZ4U3VzcGVuZGVkVGFza0xpc3QgKSA9PSAoIHV4Q3VycmVudE51bWJlck9mVGFza3MgLSB1eE5vbkFwcGxpY2F0aW9uVGFza3MgKSApDQoyODE5OiAgICAgICAgICAgICAgICAJCQl7DQoyODIwOiAgICAgICAgICAgICAgICAJCQkJZVJldHVybiA9IGVOb1Rhc2tzV2FpdGluZ1RpbWVvdXQ7DQoyODIxOiAgICAgICAgICAgICAgICAJCQl9DQoyODIyOiAgICAgICAgICAgICAgICAJCQllbHNlDQoyODIzOiAgICAgICAgICAgICAgICAJCQl7DQoyODI0OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjgyNTogICAgICAgICAgICAgICAgCQkJfQ0KMjgyNjogICAgICAgICAgICAgICAgCQl9DQoyODI3OiAgICAgICAgICAgICAgICANCjI4Mjg6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIGVSZXR1cm47DQoyODI5OiAgICAgICAgICAgICAgICAJfQ0KMjgzMDogICAgICAgICAgICAgICAgDQoyODMxOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgKi8NCjI4MzI6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjgzMzogICAgICAgICAgICAgICAgDQoyODM0OiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZJbml0aWFsaXNlVENCVmFyaWFibGVzKCBUQ0JfdCAqIGNvbnN0IHB4VENCLCBjb25zdCBjaGFyICogY29uc3QgcGNOYW1lLCBVQmFzZVR5cGVfdCB1eFByaW9yaXR5LCBjb25zdCBNZW1vcnlSZWdpb25fdCAqIGNvbnN0IHhSZWdpb25zLCBjb25zdCB1aW50MTZfdCB1c1N0YWNrRGVwdGggKSAvKmxpbnQgIWU5NzEgVW5xdWFsaWZpZWQgY2hhciB0eXBlcyBhcmUgYWxsb3dlZCBmb3Igc3RyaW5ncyBhbmQgc2luZ2xlIGNoYXJhY3RlcnMgb25seS4gKi8NCjI4MzU6ICAgICAgICAgICAgICAgIHsNCkJGRDAzQ0U4ICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwDQpCRkQwM0NFQSAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApDQpCRkQwM0NFQyAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApDQpCRkQwM0NFRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDNDRjAgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQ0KQkZEMDNDRjQgIDAwMkNGOEJFICAgU1cgQTEsIDQ0KFM4KQ0KQkZEMDNDRjggIDAwMzBGOERFICAgU1cgQTIsIDQ4KFM4KQ0KQkZEMDNDRkMgIDAwMzRGOEZFICAgU1cgQTMsIDUyKFM4KQ0KQkZEMDNEMDAgIDAwMzhGQzVFICAgTFcgVjAsIDU2KFM4KQ0KQkZEMDNEMDQgIDAwMTgzODVFICAgU0ggVjAsIDI0KFM4KQ0KMjgzNjogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgeDsNCjI4Mzc6ICAgICAgICAgICAgICAgIA0KMjgzODogICAgICAgICAgICAgICAgCS8qIFN0b3JlIHRoZSB0YXNrIG5hbWUgaW4gdGhlIFRDQi4gKi8NCjI4Mzk6ICAgICAgICAgICAgICAgIAlmb3IoIHggPSAoIFVCYXNlVHlwZV90ICkgMDsgeCA8ICggVUJhc2VUeXBlX3QgKSBjb25maWdNQVhfVEFTS19OQU1FX0xFTjsgeCsrICkNCkJGRDAzRDA4ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KQkZEMDNEMEEgIENDMUQwMDEwICAgU0hJTE8gbnVsbCwgMTYNCkJGRDAzRDBDICAgICAgQ0MxRCAgIEIgMHhCRkQwM0Q0OA0KQkZEMDNEMEUgICAgICAwQzAwICAgTk9QDQpCRkQwM0QzRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwM0Q0MiAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDENCkJGRDAzRDQ0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDAzRDQ4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzRDRDICAwMDA4QjA0MiAgIFNMVElVIFYwLCBWMCwgOA0KQkZEMDNENTAgIEZGREU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNEMTANCkJGRDAzRDUyICBDQzAyRkZERSAgIExXIFM4LCAtMTMzMTAoUzgpDQpCRkQwM0Q1NCAgICAgIENDMDIgICBCIDB4QkZEMDNENUENCkJGRDAzRDU2ICAgICAgMEMwMCAgIE5PUA0KMjg0MDogICAgICAgICAgICAgICAgCXsNCjI4NDE6ICAgICAgICAgICAgICAgIAkJcHhUQ0ItPnBjVGFza05hbWVbIHggXSA9IHBjTmFtZVsgeCBdOw0KQkZEMDNEMTAgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQ0KQkZEMDNEMTQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDNEMTggICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwM0QxQSAgMDAwMDFDNjIgICBMQiBWMSwgMChWMCkNCkJGRDAzRDFFICAwMDI4RkM5RSAgIExXIEEwLCA0MChTOCkNCkJGRDAzRDIyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzRDI2ICAgICAgMDUyOCAgIEFERFUgVjAsIEEwLCBWMA0KQkZEMDNEMjggIDAwMzQxODYyICAgU0IgVjEsIDUyKFYwKQ0KMjg0MjogICAgICAgICAgICAgICAgDQoyODQzOiAgICAgICAgICAgICAgICAJCS8qIERvbid0IGNvcHkgYWxsIGNvbmZpZ01BWF9UQVNLX05BTUVfTEVOIGlmIHRoZSBzdHJpbmcgaXMgc2hvcnRlciB0aGFuDQoyODQ0OiAgICAgICAgICAgICAgICAJCWNvbmZpZ01BWF9UQVNLX05BTUVfTEVOIGNoYXJhY3RlcnMganVzdCBpbiBjYXNlIHRoZSBtZW1vcnkgYWZ0ZXIgdGhlDQoyODQ1OiAgICAgICAgICAgICAgICAJCXN0cmluZyBpcyBub3QgYWNjZXNzaWJsZSAoZXh0cmVtZWx5IHVubGlrZWx5KS4gKi8NCjI4NDY6ICAgICAgICAgICAgICAgIAkJaWYoIHBjTmFtZVsgeCBdID09IDB4MDAgKQ0KQkZEMDNEMkMgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQ0KQkZEMDNEMzAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDNEMzQgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwM0QzNiAgMDAwMDFDNDIgICBMQiBWMCwgMChWMCkNCkJGRDAzRDNBICAwMDBENDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzRDU4DQoyODQ3OiAgICAgICAgICAgICAgICAJCXsNCjI4NDg6ICAgICAgICAgICAgICAgIAkJCWJyZWFrOw0KQkZEMDNENTggICAgICAwQzAwICAgTk9QDQoyODQ5OiAgICAgICAgICAgICAgICAJCX0NCjI4NTA6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjg1MTogICAgICAgICAgICAgICAgCQl7DQoyODUyOiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyODUzOiAgICAgICAgICAgICAgICAJCX0NCjI4NTQ6ICAgICAgICAgICAgICAgIAl9DQoyODU1OiAgICAgICAgICAgICAgICANCjI4NTY6ICAgICAgICAgICAgICAgIAkvKiBFbnN1cmUgdGhlIG5hbWUgc3RyaW5nIGlzIHRlcm1pbmF0ZWQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgc3RyaW5nIGxlbmd0aA0KMjg1NzogICAgICAgICAgICAgICAgCXdhcyBncmVhdGVyIG9yIGVxdWFsIHRvIGNvbmZpZ01BWF9UQVNLX05BTUVfTEVOLiAqLw0KMjg1ODogICAgICAgICAgICAgICAgCXB4VENCLT5wY1Rhc2tOYW1lWyBjb25maWdNQVhfVEFTS19OQU1FX0xFTiAtIDEgXSA9ICdcMCc7DQpCRkQwM0Q1QSAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwM0Q1RSAgMDAzQjE4MDIgICBTQiBaRVJPLCA1OShWMCkNCjI4NTk6ICAgICAgICAgICAgICAgIA0KMjg2MDogICAgICAgICAgICAgICAgCS8qIFRoaXMgaXMgdXNlZCBhcyBhbiBhcnJheSBpbmRleCBzbyBtdXN0IGVuc3VyZSBpdCdzIG5vdCB0b28gbGFyZ2UuICBGaXJzdA0KMjg2MTogICAgICAgICAgICAgICAgCXJlbW92ZSB0aGUgcHJpdmlsZWdlIGJpdCBpZiBvbmUgaXMgcHJlc2VudC4gKi8NCjI4NjI6ICAgICAgICAgICAgICAgIAlpZiggdXhQcmlvcml0eSA+PSAoIFVCYXNlVHlwZV90ICkgY29uZmlnTUFYX1BSSU9SSVRJRVMgKQ0KQkZEMDNENjIgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDNENjYgIDAwMDVCMDQyICAgU0xUSVUgVjAsIFYwLCA1DQpCRkQwM0Q2QSAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwM0Q3NA0KMjg2MzogICAgICAgICAgICAgICAgCXsNCjI4NjQ6ICAgICAgICAgICAgICAgIAkJdXhQcmlvcml0eSA9ICggVUJhc2VUeXBlX3QgKSBjb25maWdNQVhfUFJJT1JJVElFUyAtICggVUJhc2VUeXBlX3QgKSAxVTsNCkJGRDAzRDZFICAgICAgRUQwNCAgIExJIFYwLCA0DQpCRkQwM0Q3MCAgMDAzMEY4NUUgICBTVyBWMCwgNDgoUzgpDQoyODY1OiAgICAgICAgICAgICAgICAJfQ0KMjg2NjogICAgICAgICAgICAgICAgCWVsc2UNCjI4Njc6ICAgICAgICAgICAgICAgIAl7DQoyODY4OiAgICAgICAgICAgICAgICAJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjI4Njk6ICAgICAgICAgICAgICAgIAl9DQoyODcwOiAgICAgICAgICAgICAgICANCjI4NzE6ICAgICAgICAgICAgICAgIAlweFRDQi0+dXhQcmlvcml0eSA9IHV4UHJpb3JpdHk7DQpCRkQwM0Q3NCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwM0Q3OCAgMDAzMEZDN0UgICBMVyBWMSwgNDgoUzgpDQpCRkQwM0Q3QyAgICAgIEU5QUIgICBTVyBWMSwgNDQoVjApDQoyODcyOiAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoyODczOiAgICAgICAgICAgICAgICAJew0KMjg3NDogICAgICAgICAgICAgICAgCQlweFRDQi0+dXhCYXNlUHJpb3JpdHkgPSB1eFByaW9yaXR5Ow0KQkZEMDNEN0UgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDNEODIgIDAwMzBGQzdFICAgTFcgVjEsIDQ4KFM4KQ0KQkZEMDNEODYgIDAwNDBGODYyICAgU1cgVjEsIDY0KFYwKQ0KMjg3NTogICAgICAgICAgICAgICAgCQlweFRDQi0+dXhNdXRleGVzSGVsZCA9IDA7DQpCRkQwM0Q4QSAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwM0Q4RSAgMDA0NEY4MDIgICBTVyBaRVJPLCA2OChWMCkNCjI4NzY6ICAgICAgICAgICAgICAgIAl9DQoyODc3OiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIGNvbmZpZ1VTRV9NVVRFWEVTICovDQoyODc4OiAgICAgICAgICAgICAgICANCjI4Nzk6ICAgICAgICAgICAgICAgIAl2TGlzdEluaXRpYWxpc2VJdGVtKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwM0Q5MiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwM0Q5NiAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDAzRDk4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwM0Q5QSAgNEVFNjc3RTggICBKQUxTIHZMaXN0SW5pdGlhbGlzZUl0ZW0NCkJGRDAzRDlDICAgICAgNEVFNiAgIEFERElVIFM3LCBTNywgMw0KQkZEMDNEOUUgICAgICAwQzAwICAgTk9QDQoyODgwOiAgICAgICAgICAgICAgICAJdkxpc3RJbml0aWFsaXNlSXRlbSggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICkgKTsNCkJGRDAzREEwICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDAzREEyICA2RDJDMDAyOCAgIEVYVCBBVCwgVDAsIDIwLCAxNA0KQkZEMDNEQTQgICAgICA2RDJDICAgQURESVUgVjAsIFYwLCAyNA0KQkZEMDNEQTYgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzREE4ICA0RUU2NzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlSXRlbQ0KQkZEMDNEQUEgICAgICA0RUU2ICAgQURESVUgUzcsIFM3LCAzDQpCRkQwM0RBQyAgICAgIDBDMDAgICBOT1ANCjI4ODE6ICAgICAgICAgICAgICAgIA0KMjg4MjogICAgICAgICAgICAgICAgCS8qIFNldCB0aGUgcHhUQ0IgYXMgYSBsaW5rIGJhY2sgZnJvbSB0aGUgTGlzdEl0ZW1fdC4gIFRoaXMgaXMgc28gd2UgY2FuIGdldA0KMjg4MzogICAgICAgICAgICAgICAgCWJhY2sgdG8JdGhlIGNvbnRhaW5pbmcgVENCIGZyb20gYSBnZW5lcmljIGl0ZW0gaW4gYSBsaXN0LiAqLw0KMjg4NDogICAgICAgICAgICAgICAgCWxpc3RTRVRfTElTVF9JVEVNX09XTkVSKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApLCBweFRDQiApOw0KQkZEMDNEQUUgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDNEQjIgIDAwMjhGQzdFICAgTFcgVjEsIDQwKFM4KQ0KQkZEMDNEQjYgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQ0KMjg4NTogICAgICAgICAgICAgICAgDQoyODg2OiAgICAgICAgICAgICAgICAJLyogRXZlbnQgbGlzdHMgYXJlIGFsd2F5cyBpbiBwcmlvcml0eSBvcmRlci4gKi8NCjI4ODc6ICAgICAgICAgICAgICAgIAlsaXN0U0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhUQ0ItPnhFdmVudExpc3RJdGVtICksICggVGlja1R5cGVfdCApIGNvbmZpZ01BWF9QUklPUklUSUVTIC0gKCBUaWNrVHlwZV90ICkgdXhQcmlvcml0eSApOyAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMuICovDQpCRkQwM0RCOCAgICAgIEVEODUgICBMSSBWMSwgNQ0KQkZEMDNEQkEgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDNEQkUgICAgICAwNUE3ICAgU1VCVSBWMSwgVjEsIFYwDQpCRkQwM0RDMCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwM0RDNCAgICAgIEU5QTYgICBTVyBWMSwgMjQoVjApDQoyODg4OiAgICAgICAgICAgICAgICAJbGlzdFNFVF9MSVNUX0lURU1fT1dORVIoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApLCBweFRDQiApOw0KQkZEMDNEQzYgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDNEQ0EgIDAwMjhGQzdFICAgTFcgVjEsIDQwKFM4KQ0KQkZEMDNEQ0UgICAgICBFOUE5ICAgU1cgVjEsIDM2KFYwKQ0KMjg4OTogICAgICAgICAgICAgICAgDQoyODkwOiAgICAgICAgICAgICAgICAJI2lmICggcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCID09IDEgKQ0KMjg5MTogICAgICAgICAgICAgICAgCXsNCjI4OTI6ICAgICAgICAgICAgICAgIAkJcHhUQ0ItPnV4Q3JpdGljYWxOZXN0aW5nID0gKCBVQmFzZVR5cGVfdCApIDBVOw0KQkZEMDNERDAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDNERDQgICAgICBFODJGICAgU1cgUzAsIDYwKFYwKQ0KMjg5MzogICAgICAgICAgICAgICAgCX0NCjI4OTQ6ICAgICAgICAgICAgICAgIAkjZW5kaWYgLyogcG9ydENSSVRJQ0FMX05FU1RJTkdfSU5fVENCICovDQoyODk1OiAgICAgICAgICAgICAgICANCjI4OTY6ICAgICAgICAgICAgICAgIAkjaWYgKCBjb25maWdVU0VfQVBQTElDQVRJT05fVEFTS19UQUcgPT0gMSApDQoyODk3OiAgICAgICAgICAgICAgICAJew0KMjg5ODogICAgICAgICAgICAgICAgCQlweFRDQi0+cHhUYXNrVGFnID0gTlVMTDsNCjI4OTk6ICAgICAgICAgICAgICAgIAl9DQoyOTAwOiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIGNvbmZpZ1VTRV9BUFBMSUNBVElPTl9UQVNLX1RBRyAqLw0KMjkwMTogICAgICAgICAgICAgICAgDQoyOTAyOiAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApDQoyOTAzOiAgICAgICAgICAgICAgICAJew0KMjkwNDogICAgICAgICAgICAgICAgCQlweFRDQi0+dWxSdW5UaW1lQ291bnRlciA9IDBVTDsNCjI5MDU6ICAgICAgICAgICAgICAgIAl9DQoyOTA2OiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTICovDQoyOTA3OiAgICAgICAgICAgICAgICANCjI5MDg6ICAgICAgICAgICAgICAgIAkjaWYgKCBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTID09IDEgKQ0KMjkwOTogICAgICAgICAgICAgICAgCXsNCjI5MTA6ICAgICAgICAgICAgICAgIAkJdlBvcnRTdG9yZVRhc2tNUFVTZXR0aW5ncyggJiggcHhUQ0ItPnhNUFVTZXR0aW5ncyApLCB4UmVnaW9ucywgcHhUQ0ItPnB4U3RhY2ssIHVzU3RhY2tEZXB0aCApOw0KMjkxMTogICAgICAgICAgICAgICAgCX0NCjI5MTI6ICAgICAgICAgICAgICAgIAkjZWxzZSAvKiBwb3J0VVNJTkdfTVBVX1dSQVBQRVJTICovDQoyOTEzOiAgICAgICAgICAgICAgICAJew0KMjkxNDogICAgICAgICAgICAgICAgCQkoIHZvaWQgKSB4UmVnaW9uczsNCjI5MTU6ICAgICAgICAgICAgICAgIAkJKCB2b2lkICkgdXNTdGFja0RlcHRoOw0KMjkxNjogICAgICAgICAgICAgICAgCX0NCjI5MTc6ICAgICAgICAgICAgICAgIAkjZW5kaWYgLyogcG9ydFVTSU5HX01QVV9XUkFQUEVSUyAqLw0KMjkxODogICAgICAgICAgICAgICAgDQoyOTE5OiAgICAgICAgICAgICAgICAJI2lmKCBjb25maWdOVU1fVEhSRUFEX0xPQ0FMX1NUT1JBR0VfUE9JTlRFUlMgIT0gMCApDQoyOTIwOiAgICAgICAgICAgICAgICAJew0KMjkyMTogICAgICAgICAgICAgICAgCQlmb3IoIHggPSAwOyB4IDwgKCBVQmFzZVR5cGVfdCApIGNvbmZpZ05VTV9USFJFQURfTE9DQUxfU1RPUkFHRV9QT0lOVEVSUzsgeCsrICkNCjI5MjI6ICAgICAgICAgICAgICAgIAkJew0KMjkyMzogICAgICAgICAgICAgICAgCQkJcHhUQ0ItPnB2VGhyZWFkTG9jYWxTdG9yYWdlUG9pbnRlcnNbIHggXSA9IE5VTEw7DQoyOTI0OiAgICAgICAgICAgICAgICAJCX0NCjI5MjU6ICAgICAgICAgICAgICAgIAl9DQoyOTI2OiAgICAgICAgICAgICAgICAJI2VuZGlmDQoyOTI3OiAgICAgICAgICAgICAgICANCjI5Mjg6ICAgICAgICAgICAgICAgIAkjaWYgKCBjb25maWdVU0VfVEFTS19OT1RJRklDQVRJT05TID09IDEgKQ0KMjkyOTogICAgICAgICAgICAgICAgCXsNCjI5MzA6ICAgICAgICAgICAgICAgIAkJcHhUQ0ItPnVsTm90aWZpZWRWYWx1ZSA9IDA7DQpCRkQwM0RENiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwM0REQSAgMDA0OEY4MDIgICBTVyBaRVJPLCA3MihWMCkNCjI5MzE6ICAgICAgICAgICAgICAgIAkJcHhUQ0ItPmVOb3RpZnlTdGF0ZSA9IGVOb3RXYWl0aW5nTm90aWZpY2F0aW9uOw0KQkZEMDNEREUgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDNERTIgIDAwNENGODAyICAgU1cgWkVSTywgNzYoVjApDQoyOTMyOiAgICAgICAgICAgICAgICAJfQ0KMjkzMzogICAgICAgICAgICAgICAgCSNlbmRpZg0KMjkzNDogICAgICAgICAgICAgICAgDQoyOTM1OiAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnVVNFX05FV0xJQl9SRUVOVFJBTlQgPT0gMSApDQoyOTM2OiAgICAgICAgICAgICAgICAJew0KMjkzNzogICAgICAgICAgICAgICAgCQkvKiBJbml0aWFsaXNlIHRoaXMgdGFzaydzIE5ld2xpYiByZWVudCBzdHJ1Y3R1cmUuICovDQoyOTM4OiAgICAgICAgICAgICAgICAJCV9SRUVOVF9JTklUX1BUUiggKCAmKCBweFRDQi0+eE5ld0xpYl9yZWVudCApICkgKTsNCjI5Mzk6ICAgICAgICAgICAgICAgIAl9DQoyOTQwOiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIGNvbmZpZ1VTRV9ORVdMSUJfUkVFTlRSQU5UICovDQoyOTQxOiAgICAgICAgICAgICAgICB9DQpCRkQwM0RFNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDNERTggICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQ0KQkZEMDNERUEgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQ0KQkZEMDNERUMgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MA0KQkZEMDNERUUgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDNERjAgICAgICAwQzAwICAgTk9QDQoyOTQyOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI5NDM6ICAgICAgICAgICAgICAgIA0KMjk0NDogICAgICAgICAgICAgICAgI2lmICggY29uZmlnTlVNX1RIUkVBRF9MT0NBTF9TVE9SQUdFX1BPSU5URVJTICE9IDAgKQ0KMjk0NTogICAgICAgICAgICAgICAgDQoyOTQ2OiAgICAgICAgICAgICAgICAJdm9pZCB2VGFza1NldFRocmVhZExvY2FsU3RvcmFnZVBvaW50ZXIoIFRhc2tIYW5kbGVfdCB4VGFza1RvU2V0LCBCYXNlVHlwZV90IHhJbmRleCwgdm9pZCAqcHZWYWx1ZSApDQoyOTQ3OiAgICAgICAgICAgICAgICAJew0KMjk0ODogICAgICAgICAgICAgICAgCVRDQl90ICpweFRDQjsNCjI5NDk6ICAgICAgICAgICAgICAgIA0KMjk1MDogICAgICAgICAgICAgICAgCQlpZiggeEluZGV4IDwgY29uZmlnTlVNX1RIUkVBRF9MT0NBTF9TVE9SQUdFX1BPSU5URVJTICkNCjI5NTE6ICAgICAgICAgICAgICAgIAkJew0KMjk1MjogICAgICAgICAgICAgICAgCQkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCB4VGFza1RvU2V0ICk7DQoyOTUzOiAgICAgICAgICAgICAgICAJCQlweFRDQi0+cHZUaHJlYWRMb2NhbFN0b3JhZ2VQb2ludGVyc1sgeEluZGV4IF0gPSBwdlZhbHVlOw0KMjk1NDogICAgICAgICAgICAgICAgCQl9DQoyOTU1OiAgICAgICAgICAgICAgICAJfQ0KMjk1NjogICAgICAgICAgICAgICAgDQoyOTU3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnTlVNX1RIUkVBRF9MT0NBTF9TVE9SQUdFX1BPSU5URVJTICovDQoyOTU4OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI5NTk6ICAgICAgICAgICAgICAgIA0KMjk2MDogICAgICAgICAgICAgICAgI2lmICggY29uZmlnTlVNX1RIUkVBRF9MT0NBTF9TVE9SQUdFX1BPSU5URVJTICE9IDAgKQ0KMjk2MTogICAgICAgICAgICAgICAgDQoyOTYyOiAgICAgICAgICAgICAgICAJdm9pZCAqcHZUYXNrR2V0VGhyZWFkTG9jYWxTdG9yYWdlUG9pbnRlciggVGFza0hhbmRsZV90IHhUYXNrVG9RdWVyeSwgQmFzZVR5cGVfdCB4SW5kZXggKQ0KMjk2MzogICAgICAgICAgICAgICAgCXsNCjI5NjQ6ICAgICAgICAgICAgICAgIAl2b2lkICpwdlJldHVybiA9IE5VTEw7DQoyOTY1OiAgICAgICAgICAgICAgICAJVENCX3QgKnB4VENCOw0KMjk2NjogICAgICAgICAgICAgICAgDQoyOTY3OiAgICAgICAgICAgICAgICAJCWlmKCB4SW5kZXggPCBjb25maWdOVU1fVEhSRUFEX0xPQ0FMX1NUT1JBR0VfUE9JTlRFUlMgKQ0KMjk2ODogICAgICAgICAgICAgICAgCQl7DQoyOTY5OiAgICAgICAgICAgICAgICAJCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHhUYXNrVG9RdWVyeSApOw0KMjk3MDogICAgICAgICAgICAgICAgCQkJcHZSZXR1cm4gPSBweFRDQi0+cHZUaHJlYWRMb2NhbFN0b3JhZ2VQb2ludGVyc1sgeEluZGV4IF07DQoyOTcxOiAgICAgICAgICAgICAgICAJCX0NCjI5NzI6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjk3MzogICAgICAgICAgICAgICAgCQl7DQoyOTc0OiAgICAgICAgICAgICAgICAJCQlwdlJldHVybiA9IE5VTEw7DQoyOTc1OiAgICAgICAgICAgICAgICAJCX0NCjI5NzY6ICAgICAgICAgICAgICAgIA0KMjk3NzogICAgICAgICAgICAgICAgCQlyZXR1cm4gcHZSZXR1cm47DQoyOTc4OiAgICAgICAgICAgICAgICAJfQ0KMjk3OTogICAgICAgICAgICAgICAgDQoyOTgwOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnTlVNX1RIUkVBRF9MT0NBTF9TVE9SQUdFX1BPSU5URVJTICovDQoyOTgxOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI5ODI6ICAgICAgICAgICAgICAgIA0KMjk4MzogICAgICAgICAgICAgICAgI2lmICggcG9ydFVTSU5HX01QVV9XUkFQUEVSUyA9PSAxICkNCjI5ODQ6ICAgICAgICAgICAgICAgIA0KMjk4NTogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tBbGxvY2F0ZU1QVVJlZ2lvbnMoIFRhc2tIYW5kbGVfdCB4VGFza1RvTW9kaWZ5LCBjb25zdCBNZW1vcnlSZWdpb25fdCAqIGNvbnN0IHhSZWdpb25zICkNCjI5ODY6ICAgICAgICAgICAgICAgIAl7DQoyOTg3OiAgICAgICAgICAgICAgICAJVENCX3QgKnB4VENCOw0KMjk4ODogICAgICAgICAgICAgICAgDQoyOTg5OiAgICAgICAgICAgICAgICAJCS8qIElmIG51bGwgaXMgcGFzc2VkIGluIGhlcmUgdGhlbiB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBNUFUgc2V0dGluZ3Mgb2YNCjI5OTA6ICAgICAgICAgICAgICAgIAkJdGhlIGNhbGxpbmcgdGFzay4gKi8NCjI5OTE6ICAgICAgICAgICAgICAgIAkJcHhUQ0IgPSBwcnZHZXRUQ0JGcm9tSGFuZGxlKCB4VGFza1RvTW9kaWZ5ICk7DQoyOTkyOiAgICAgICAgICAgICAgICANCjI5OTM6ICAgICAgICAgICAgICAgICAgICAgICAgdlBvcnRTdG9yZVRhc2tNUFVTZXR0aW5ncyggJiggcHhUQ0ItPnhNUFVTZXR0aW5ncyApLCB4UmVnaW9ucywgTlVMTCwgMCApOw0KMjk5NDogICAgICAgICAgICAgICAgCX0NCjI5OTU6ICAgICAgICAgICAgICAgIA0KMjk5NjogICAgICAgICAgICAgICAgI2VuZGlmIC8qIHBvcnRVU0lOR19NUFVfV1JBUFBFUlMgKi8NCjI5OTc6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjk5ODogICAgICAgICAgICAgICAgDQoyOTk5OiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZJbml0aWFsaXNlVGFza0xpc3RzKCB2b2lkICkNCjMwMDA6ICAgICAgICAgICAgICAgIHsNCkJGRDA2MTJDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNjEyRSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNjEzMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNjEzMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMzAwMTogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhQcmlvcml0eTsNCjMwMDI6ICAgICAgICAgICAgICAgIA0KMzAwMzogICAgICAgICAgICAgICAgCWZvciggdXhQcmlvcml0eSA9ICggVUJhc2VUeXBlX3QgKSAwVTsgdXhQcmlvcml0eSA8ICggVUJhc2VUeXBlX3QgKSBjb25maWdNQVhfUFJJT1JJVElFUzsgdXhQcmlvcml0eSsrICkNCkJGRDA2MTM0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KQkZEMDYxMzggICAgICBDQzE0ICAgQiAweEJGRDA2MTYyDQpCRkQwNjEzQSAgICAgIDBDMDAgICBOT1ANCkJGRDA2MTU4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2MTVDICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQ0KQkZEMDYxNUUgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KQkZEMDYxNjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDYxNjYgIDAwMDVCMDQyICAgU0xUSVUgVjAsIFYwLCA1DQpCRkQwNjE2QSAgRkZFNzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjEzQw0KQkZEMDYxNkMgIDQxQTJGRkU3ICAgTFcgUkEsIDE2ODAyKEEzKQ0KMzAwNDogICAgICAgICAgICAgICAgCXsNCjMwMDU6ICAgICAgICAgICAgICAgIAkJdkxpc3RJbml0aWFsaXNlKCAmKCBweFJlYWR5VGFza3NMaXN0c1sgdXhQcmlvcml0eSBdICkgKTsNCkJGRDA2MTNDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2MTQwICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDA2MTQyICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDA2MTQ0ICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQ0KQkZEMDYxNDYgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDA2MTQ4ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDA2MTRBICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwNjE0RSAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA2MTUwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNjE1MiAgNDU3MDc3RTggICBKQUxTIHZMaXN0SW5pdGlhbGlzZQ0KQkZEMDYxNTQgICAgICA0NTcwICAgU1dNMTYgMHgzLCAwKFNQKQ0KQkZEMDYxNTYgICAgICAwQzAwICAgTk9QDQozMDA2OiAgICAgICAgICAgICAgICAJfQ0KMzAwNzogICAgICAgICAgICAgICAgDQozMDA4OiAgICAgICAgICAgICAgICAJdkxpc3RJbml0aWFsaXNlKCAmeERlbGF5ZWRUYXNrTGlzdDEgKTsNCkJGRDA2MTZFICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwNjE3MCAgMzA4MkJGRDIgICBMREMxIEYzMCwgMTI0MTgoUzIpDQpCRkQwNjE3MiAgODBGODMwODIgICBBRERJVSBBMCwgVjAsIC0zMjUyMA0KQkZEMDYxNzYgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UNCkJGRDA2MTc4ICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkNCkJGRDA2MTdBICAgICAgMEMwMCAgIE5PUA0KMzAwOTogICAgICAgICAgICAgICAgCXZMaXN0SW5pdGlhbGlzZSggJnhEZWxheWVkVGFza0xpc3QyICk7DQpCRkQwNjE3QyAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDYxN0UgIDMwODJCRkQyICAgTERDMSBGMzAsIDEyNDE4KFMyKQ0KQkZEMDYxODAgIDgxMjAzMDgyICAgQURESVUgQTAsIFYwLCAtMzI0ODANCkJGRDA2MTg0ICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlDQpCRkQwNjE4NiAgICAgIDQ1NzAgICBTV00xNiAweDMsIDAoU1ApDQpCRkQwNjE4OCAgICAgIDBDMDAgICBOT1ANCjMwMTA6ICAgICAgICAgICAgICAgIAl2TGlzdEluaXRpYWxpc2UoICZ4UGVuZGluZ1JlYWR5TGlzdCApOw0KQkZEMDYxOEEgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDA2MThDICAzMDgyQkZEMiAgIExEQzEgRjMwLCAxMjQxOChTMikNCkJGRDA2MThFICA4MEQwMzA4MiAgIEFERElVIEEwLCBWMCwgLTMyNTYwDQpCRkQwNjE5MiAgNDU3MDc3RTggICBKQUxTIHZMaXN0SW5pdGlhbGlzZQ0KQkZEMDYxOTQgICAgICA0NTcwICAgU1dNMTYgMHgzLCAwKFNQKQ0KQkZEMDYxOTYgICAgICAwQzAwICAgTk9QDQozMDExOiAgICAgICAgICAgICAgICANCjMwMTI6ICAgICAgICAgICAgICAgIAkjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KMzAxMzogICAgICAgICAgICAgICAgCXsNCjMwMTQ6ICAgICAgICAgICAgICAgIAkJdkxpc3RJbml0aWFsaXNlKCAmeFRhc2tzV2FpdGluZ1Rlcm1pbmF0aW9uICk7DQpCRkQwNjE5OCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDYxOUEgIDMwODJCRkQyICAgTERDMSBGMzAsIDEyNDE4KFMyKQ0KQkZEMDYxOUMgIDgxMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMzI1MDANCkJGRDA2MUEwICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlDQpCRkQwNjFBMiAgICAgIDQ1NzAgICBTV00xNiAweDMsIDAoU1ApDQpCRkQwNjFBNCAgICAgIDBDMDAgICBOT1ANCjMwMTU6ICAgICAgICAgICAgICAgIAl9DQozMDE2OiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tEZWxldGUgKi8NCjMwMTc6ICAgICAgICAgICAgICAgIA0KMzAxODogICAgICAgICAgICAgICAgCSNpZiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKQ0KMzAxOTogICAgICAgICAgICAgICAgCXsNCjMwMjA6ICAgICAgICAgICAgICAgIAkJdkxpc3RJbml0aWFsaXNlKCAmeFN1c3BlbmRlZFRhc2tMaXN0ICk7DQpCRkQwNjFBNiAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDYxQTggIDMwODJCRkQyICAgTERDMSBGMzAsIDEyNDE4KFMyKQ0KQkZEMDYxQUEgIDgwRTQzMDgyICAgQURESVUgQTAsIFYwLCAtMzI1NDANCkJGRDA2MUFFICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlDQpCRkQwNjFCMCAgICAgIDQ1NzAgICBTV00xNiAweDMsIDAoU1ApDQpCRkQwNjFCMiAgICAgIDBDMDAgICBOT1ANCjMwMjE6ICAgICAgICAgICAgICAgIAl9DQozMDIyOiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQozMDIzOiAgICAgICAgICAgICAgICANCjMwMjQ6ICAgICAgICAgICAgICAgIAkvKiBTdGFydCB3aXRoIHB4RGVsYXllZFRhc2tMaXN0IHVzaW5nIGxpc3QxIGFuZCB0aGUgcHhPdmVyZmxvd0RlbGF5ZWRUYXNrTGlzdA0KMzAyNTogICAgICAgICAgICAgICAgCXVzaW5nIGxpc3QyLiAqLw0KMzAyNjogICAgICAgICAgICAgICAgCXB4RGVsYXllZFRhc2tMaXN0ID0gJnhEZWxheWVkVGFza0xpc3QxOw0KQkZEMDYxQjQgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDA2MUI2ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDA2MUI4ICA4MEY4MzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNTIwDQpCRkQwNjFCQyAgODA3NEY4NUMgICBTVyBWMCwgLTMyNjUyKEdQKQ0KMzAyNzogICAgICAgICAgICAgICAgCXB4T3ZlcmZsb3dEZWxheWVkVGFza0xpc3QgPSAmeERlbGF5ZWRUYXNrTGlzdDI7DQpCRkQwNjFDMCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDYxQzIgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDYxQzQgIDgxMjAzMDQyICAgQURESVUgVjAsIFYwLCAtMzI0ODANCkJGRDA2MUM4ICA4MDc4Rjg1QyAgIFNXIFYwLCAtMzI2NDgoR1ApDQozMDI4OiAgICAgICAgICAgICAgICB9DQpCRkQwNjFDQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDYxQ0UgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDYxRDAgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDYxRDIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDYxRDQgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDYxRDYgICAgICAwQzAwICAgTk9QDQozMDI5OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMwMzA6ICAgICAgICAgICAgICAgIA0KMzAzMTogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2Q2hlY2tUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiggdm9pZCApDQozMDMyOiAgICAgICAgICAgICAgICB7DQpCRkQwNkI1QyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDZCNUUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDZCNjAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDZCNjIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjMwMzM6ICAgICAgICAgICAgICAgIAkjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KMzAzNDogICAgICAgICAgICAgICAgCXsNCjMwMzU6ICAgICAgICAgICAgICAgIAkJQmFzZVR5cGVfdCB4TGlzdElzRW1wdHk7DQozMDM2OiAgICAgICAgICAgICAgICANCjMwMzc6ICAgICAgICAgICAgICAgIAkJLyogdWNUYXNrc0RlbGV0ZWQgaXMgdXNlZCB0byBwcmV2ZW50IHZUYXNrU3VzcGVuZEFsbCgpIGJlaW5nIGNhbGxlZA0KMzAzODogICAgICAgICAgICAgICAgCQl0b28gb2Z0ZW4gaW4gdGhlIGlkbGUgdGFzay4gKi8NCjMwMzk6ICAgICAgICAgICAgICAgIAkJd2hpbGUoIHV4VGFza3NEZWxldGVkID4gKCBVQmFzZVR5cGVfdCApIDBVICkNCkJGRDA2QjY0ICAgICAgQ0MzNyAgIEIgMHhCRkQwNkJENA0KQkZEMDZCNjYgICAgICAwQzAwICAgTk9QDQpCRkQwNkJENCAgODAzNEZDNUMgICBMVyBWMCwgLTMyNzE2KEdQKQ0KQkZEMDZCRDggIEZGQzY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZCNjgNCkJGRDA2QkRBICAwRkJFRkZDNiAgIExXIFM4LCA0MDMwKEEyKQ0KMzA0MDogICAgICAgICAgICAgICAgCQl7DQozMDQxOiAgICAgICAgICAgICAgICAJCQl2VGFza1N1c3BlbmRBbGwoKTsNCkJGRDA2QjY4ICA0RUY0NzdFOCAgIEpBTFMgdlRhc2tTdXNwZW5kQWxsDQpCRkQwNkI2QSAgICAgIDRFRjQgICBBRERJVSBTNywgUzcsIC02DQpCRkQwNkI2QyAgICAgIDBDMDAgICBOT1ANCjMwNDI6ICAgICAgICAgICAgICAgIAkJCXsNCjMwNDM6ICAgICAgICAgICAgICAgIAkJCQl4TGlzdElzRW1wdHkgPSBsaXN0TElTVF9JU19FTVBUWSggJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiApOw0KQkZEMDZCNkUgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDA2QjcwICBGQzQyQkZEMiAgIExEQzEgRjMwLCAtOTU4KFMyKQ0KQkZEMDZCNzIgIDgxMENGQzQyICAgTFcgVjAsIC0zMjUwMChWMCkNCkJGRDA2Qjc2ICAwMDAxQjA0MiAgIFNMVElVIFYwLCBWMCwgMQ0KQkZEMDZCN0EgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMzA0NDogICAgICAgICAgICAgICAgCQkJfQ0KMzA0NTogICAgICAgICAgICAgICAgCQkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDA2QjdFICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwNCkJGRDA2QjgwICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikNCkJGRDA2QjgyICAgICAgMEMwMCAgIE5PUA0KMzA0NjogICAgICAgICAgICAgICAgDQozMDQ3OiAgICAgICAgICAgICAgICAJCQlpZiggeExpc3RJc0VtcHR5ID09IHBkRkFMU0UgKQ0KQkZEMDZCODQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDZCODggIDAwMjQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZCRDQNCjMwNDg6ICAgICAgICAgICAgICAgIAkJCXsNCjMwNDk6ICAgICAgICAgICAgICAgIAkJCQlUQ0JfdCAqcHhUQ0I7DQozMDUwOiAgICAgICAgICAgICAgICANCjMwNTE6ICAgICAgICAgICAgICAgIAkJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA2QjhDICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwNkI4RSAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDA2QjkwICAgICAgMEMwMCAgIE5PUA0KMzA1MjogICAgICAgICAgICAgICAgCQkJCXsNCjMwNTM6ICAgICAgICAgICAgICAgIAkJCQkJcHhUQ0IgPSAoIFRDQl90ICogKSBsaXN0R0VUX09XTkVSX09GX0hFQURfRU5UUlkoICggJnhUYXNrc1dhaXRpbmdUZXJtaW5hdGlvbiApICk7DQpCRkQwNkI5MiAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDZCOTQgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDZCOTYgIDgxMEMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI1MDANCkJGRDA2QjlBICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDA2QjlDICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDA2QjlFICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjMwNTQ6ICAgICAgICAgICAgICAgIAkJCQkJKCB2b2lkICkgdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwNkJBMiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNkJBNiAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA2QkE4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNkJBQSAgMDBDODc3RTggICBKQUxTIHV4TGlzdFJlbW92ZQ0KQkZEMDZCQUMgIDBDMDAwMEM4ICAgU0xMIEEyLCBUMCwgMQ0KQkZEMDZCQUUgICAgICAwQzAwICAgTk9QDQozMDU1OiAgICAgICAgICAgICAgICAJCQkJCS0tdXhDdXJyZW50TnVtYmVyT2ZUYXNrczsNCkJGRDA2QkIwICA4MDM4RkM1QyAgIExXIFYwLCAtMzI3MTIoR1ApDQpCRkQwNkJCNCAgICAgIDZEMkUgICBBRERJVSBWMCwgVjAsIC0xDQpCRkQwNkJCNiAgODAzOEY4NUMgICBTVyBWMCwgLTMyNzEyKEdQKQ0KMzA1NjogICAgICAgICAgICAgICAgCQkJCQktLXV4VGFza3NEZWxldGVkOw0KQkZEMDZCQkEgIDgwMzRGQzVDICAgTFcgVjAsIC0zMjcxNihHUCkNCkJGRDA2QkJFICAgICAgNkQyRSAgIEFERElVIFYwLCBWMCwgLTENCkJGRDA2QkMwICA4MDM0Rjg1QyAgIFNXIFYwLCAtMzI3MTYoR1ApDQozMDU3OiAgICAgICAgICAgICAgICAJCQkJfQ0KMzA1ODogICAgICAgICAgICAgICAgCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwNkJDNCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwNkJDNiAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwODNDQQ0KQkZEMDZCQzggICAgICAwQzAwICAgTk9QDQozMDU5OiAgICAgICAgICAgICAgICANCjMwNjA6ICAgICAgICAgICAgICAgIAkJCQlwcnZEZWxldGVUQ0IoIHB4VENCICk7DQpCRkQwNkJDQSAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwNkJDRSAgNEM2RTc3RTggICBKQUxTIHBydkRlbGV0ZVRDQg0KQkZEMDZCRDAgICAgICA0QzZFICAgQURESVUgVjEsIFYxLCA3DQpCRkQwNkJEMiAgICAgIDBDMDAgICBOT1ANCjMwNjE6ICAgICAgICAgICAgICAgIAkJCX0NCjMwNjI6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjMwNjM6ICAgICAgICAgICAgICAgIAkJCXsNCjMwNjQ6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozMDY1OiAgICAgICAgICAgICAgICAJCQl9DQozMDY2OiAgICAgICAgICAgICAgICAJCX0NCjMwNjc6ICAgICAgICAgICAgICAgIAl9DQozMDY4OiAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIHZUYXNrRGVsZXRlICovDQozMDY5OiAgICAgICAgICAgICAgICB9DQpCRkQwNkJEQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDZCREUgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDZCRTAgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDZCRTIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDZCRTQgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDZCRTYgICAgICAwQzAwICAgTk9QDQozMDcwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMwNzE6ICAgICAgICAgICAgICAgIA0KMzA3MjogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCBjb25zdCBUaWNrVHlwZV90IHhUaW1lVG9XYWtlICkNCjMwNzM6ICAgICAgICAgICAgICAgIHsNCkJGRDA2RTY4ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwNkU2QSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwNkU2QyAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwNkU2RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDZFNzAgIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQ0KMzA3NDogICAgICAgICAgICAgICAgCS8qIFRoZSBsaXN0IGl0ZW0gd2lsbCBiZSBpbnNlcnRlZCBpbiB3YWtlIHRpbWUgb3JkZXIuICovDQozMDc1OiAgICAgICAgICAgICAgICAJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApLCB4VGltZVRvV2FrZSApOw0KQkZEMDZFNzQgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA2RTc4ICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDA2RTdDICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQ0KMzA3NjogICAgICAgICAgICAgICAgDQozMDc3OiAgICAgICAgICAgICAgICAJaWYoIHhUaW1lVG9XYWtlIDwgeFRpY2tDb3VudCApDQpCRkQwNkU3RSAgODAzQ0ZDNUMgICBMVyBWMCwgLTMyNzA4KEdQKQ0KQkZEMDZFODIgIDAwMThGQzdFICAgTFcgVjEsIDI0KFM4KQ0KQkZEMDZFODYgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwDQpCRkQwNkU4OCAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTANCkJGRDA2RThBICAwMDBDNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA2RUE2DQozMDc4OiAgICAgICAgICAgICAgICAJew0KMzA3OTogICAgICAgICAgICAgICAgCQkvKiBXYWtlIHRpbWUgaGFzIG92ZXJmbG93ZWQuICBQbGFjZSB0aGlzIGl0ZW0gaW4gdGhlIG92ZXJmbG93IGxpc3QuICovDQozMDgwOiAgICAgICAgICAgICAgICAJCXZMaXN0SW5zZXJ0KCBweE92ZXJmbG93RGVsYXllZFRhc2tMaXN0LCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDZFOEUgIDgwNzhGQzdDICAgTFcgVjEsIC0zMjY0OChHUCkNCkJGRDA2RTkyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNkU5NiAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA2RTk4ICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwNkU5QSAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDZFOUMgIDMwNDA3N0U4ICAgSkFMUyB2TGlzdEluc2VydA0KQkZEMDZFOUUgIDBDMDAzMDQwICAgQURESVUgVjAsIFpFUk8sIDMwNzINCkJGRDA2RUEwICAgICAgMEMwMCAgIE5PUA0KQkZEMDZFQTIgICAgICBDQzE3ICAgQiAweEJGRDA2RUQyDQpCRkQwNkVBNCAgICAgIDBDMDAgICBOT1ANCjMwODE6ICAgICAgICAgICAgICAgIAl9DQozMDgyOiAgICAgICAgICAgICAgICAJZWxzZQ0KMzA4MzogICAgICAgICAgICAgICAgCXsNCjMwODQ6ICAgICAgICAgICAgICAgIAkJLyogVGhlIHdha2UgdGltZSBoYXMgbm90IG92ZXJmbG93ZWQsIHNvIHRoZSBjdXJyZW50IGJsb2NrIGxpc3QgaXMgdXNlZC4gKi8NCjMwODU6ICAgICAgICAgICAgICAgIAkJdkxpc3RJbnNlcnQoIHB4RGVsYXllZFRhc2tMaXN0LCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDZFQTYgIDgwNzRGQzdDICAgTFcgVjEsIC0zMjY1MihHUCkNCkJGRDA2RUFBICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwNkVBRSAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA2RUIwICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwNkVCMiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDZFQjQgIDMwNDA3N0U4ICAgSkFMUyB2TGlzdEluc2VydA0KQkZEMDZFQjYgIDBDMDAzMDQwICAgQURESVUgVjAsIFpFUk8sIDMwNzINCkJGRDA2RUI4ICAgICAgMEMwMCAgIE5PUA0KMzA4NjogICAgICAgICAgICAgICAgDQozMDg3OiAgICAgICAgICAgICAgICAJCS8qIElmIHRoZSB0YXNrIGVudGVyaW5nIHRoZSBibG9ja2VkIHN0YXRlIHdhcyBwbGFjZWQgYXQgdGhlIGhlYWQgb2YgdGhlDQozMDg4OiAgICAgICAgICAgICAgICAJCWxpc3Qgb2YgYmxvY2tlZCB0YXNrcyB0aGVuIHhOZXh0VGFza1VuYmxvY2tUaW1lIG5lZWRzIHRvIGJlIHVwZGF0ZWQNCjMwODk6ICAgICAgICAgICAgICAgIAkJdG9vLiAqLw0KMzA5MDogICAgICAgICAgICAgICAgCQlpZiggeFRpbWVUb1dha2UgPCB4TmV4dFRhc2tVbmJsb2NrVGltZSApDQpCRkQwNkVCQSAgODA1OEZDNUMgICBMVyBWMCwgLTMyNjgwKEdQKQ0KQkZEMDZFQkUgIDAwMThGQzdFICAgTFcgVjEsIDI0KFM4KQ0KQkZEMDZFQzIgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwDQpCRkQwNkVDNCAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTANCkJGRDA2RUM2ICAwMDA0NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA2RUQyDQozMDkxOiAgICAgICAgICAgICAgICAJCXsNCjMwOTI6ICAgICAgICAgICAgICAgIAkJCXhOZXh0VGFza1VuYmxvY2tUaW1lID0geFRpbWVUb1dha2U7DQpCRkQwNkVDQSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNkVDRSAgODA1OEY4NUMgICBTVyBWMCwgLTMyNjgwKEdQKQ0KMzA5MzogICAgICAgICAgICAgICAgCQl9DQozMDk0OiAgICAgICAgICAgICAgICAJCWVsc2UNCjMwOTU6ICAgICAgICAgICAgICAgIAkJew0KMzA5NjogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzA5NzogICAgICAgICAgICAgICAgCQl9DQozMDk4OiAgICAgICAgICAgICAgICAJfQ0KMzA5OTogICAgICAgICAgICAgICAgfQ0KQkZEMDZFRDIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA2RUQ0ICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA2RUQ2ICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA2RUQ4ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA2RURBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA2RURDICAgICAgMEMwMCAgIE5PUA0KMzEwMDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMTAxOiAgICAgICAgICAgICAgICANCjMxMDI6ICAgICAgICAgICAgICAgIHN0YXRpYyBUQ0JfdCAqcHJ2QWxsb2NhdGVUQ0JBbmRTdGFjayggY29uc3QgdWludDE2X3QgdXNTdGFja0RlcHRoLCBTdGFja1R5cGVfdCAqIGNvbnN0IHB1eFN0YWNrQnVmZmVyICkNCjMxMDM6ICAgICAgICAgICAgICAgIHsNCkJGRDA2MzI4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNjMyQSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNjMyQyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNjMyRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDYzMzAgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTANCkJGRDA2MzMyICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkNCkJGRDA2MzM2ICAwMDIwMzg1RSAgIFNIIFYwLCAzMihTOCkNCjMxMDQ6ICAgICAgICAgICAgICAgIFRDQl90ICpweE5ld1RDQjsNCjMxMDU6ICAgICAgICAgICAgICAgIA0KMzEwNjogICAgICAgICAgICAgICAgCS8qIElmIHRoZSBzdGFjayBncm93cyBkb3duIHRoZW4gYWxsb2NhdGUgdGhlIHN0YWNrIHRoZW4gdGhlIFRDQiBzbyB0aGUgc3RhY2sNCjMxMDc6ICAgICAgICAgICAgICAgIAlkb2VzIG5vdCBncm93IGludG8gdGhlIFRDQi4gIExpa2V3aXNlIGlmIHRoZSBzdGFjayBncm93cyB1cCB0aGVuIGFsbG9jYXRlDQozMTA4OiAgICAgICAgICAgICAgICAJdGhlIFRDQiB0aGVuIHRoZSBzdGFjay4gKi8NCjMxMDk6ICAgICAgICAgICAgICAgIAkjaWYoIHBvcnRTVEFDS19HUk9XVEggPiAwICkNCjMxMTA6ICAgICAgICAgICAgICAgIAl7DQozMTExOiAgICAgICAgICAgICAgICAJCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgVENCLiAgV2hlcmUgdGhlIG1lbW9yeSBjb21lcyBmcm9tIGRlcGVuZHMgb24NCjMxMTI6ICAgICAgICAgICAgICAgIAkJdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwb3J0IG1hbGxvYyBmdW5jdGlvbi4gKi8NCjMxMTM6ICAgICAgICAgICAgICAgIAkJcHhOZXdUQ0IgPSAoIFRDQl90ICogKSBwdlBvcnRNYWxsb2MoIHNpemVvZiggVENCX3QgKSApOw0KMzExNDogICAgICAgICAgICAgICAgDQozMTE1OiAgICAgICAgICAgICAgICAJCWlmKCBweE5ld1RDQiAhPSBOVUxMICkNCjMxMTY6ICAgICAgICAgICAgICAgIAkJew0KMzExNzogICAgICAgICAgICAgICAgCQkJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBzdGFjayB1c2VkIGJ5IHRoZSB0YXNrIGJlaW5nIGNyZWF0ZWQuDQozMTE4OiAgICAgICAgICAgICAgICAJCQlUaGUgYmFzZSBvZiB0aGUgc3RhY2sgbWVtb3J5IHN0b3JlZCBpbiB0aGUgVENCIHNvIHRoZSB0YXNrIGNhbg0KMzExOTogICAgICAgICAgICAgICAgCQkJYmUgZGVsZXRlZCBsYXRlciBpZiByZXF1aXJlZC4gKi8NCjMxMjA6ICAgICAgICAgICAgICAgIAkJCXB4TmV3VENCLT5weFN0YWNrID0gKCBTdGFja1R5cGVfdCAqICkgcHZQb3J0TWFsbG9jQWxpZ25lZCggKCAoICggc2l6ZV90ICkgdXNTdGFja0RlcHRoICkgKiBzaXplb2YoIFN0YWNrVHlwZV90ICkgKSwgcHV4U3RhY2tCdWZmZXIgKTsgLypsaW50ICFlOTYxIE1JU1JBIGV4Y2VwdGlvbiBhcyB0aGUgY2FzdHMgYXJlIG9ubHkgcmVkdW5kYW50IGZvciBzb21lIHBvcnRzLiAqLw0KMzEyMTogICAgICAgICAgICAgICAgDQozMTIyOiAgICAgICAgICAgICAgICAJCQlpZiggcHhOZXdUQ0ItPnB4U3RhY2sgPT0gTlVMTCApDQozMTIzOiAgICAgICAgICAgICAgICAJCQl7DQozMTI0OiAgICAgICAgICAgICAgICAJCQkJLyogQ291bGQgbm90IGFsbG9jYXRlIHRoZSBzdGFjay4gIERlbGV0ZSB0aGUgYWxsb2NhdGVkIFRDQi4gKi8NCjMxMjU6ICAgICAgICAgICAgICAgIAkJCQl2UG9ydEZyZWUoIHB4TmV3VENCICk7DQozMTI2OiAgICAgICAgICAgICAgICAJCQkJcHhOZXdUQ0IgPSBOVUxMOw0KMzEyNzogICAgICAgICAgICAgICAgCQkJfQ0KMzEyODogICAgICAgICAgICAgICAgCQl9DQozMTI5OiAgICAgICAgICAgICAgICAJfQ0KMzEzMDogICAgICAgICAgICAgICAgCSNlbHNlIC8qIHBvcnRTVEFDS19HUk9XVEggKi8NCjMxMzE6ICAgICAgICAgICAgICAgIAl7DQozMTMyOiAgICAgICAgICAgICAgICAJU3RhY2tUeXBlX3QgKnB4U3RhY2s7DQozMTMzOiAgICAgICAgICAgICAgICANCjMxMzQ6ICAgICAgICAgICAgICAgIAkJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBzdGFjayB1c2VkIGJ5IHRoZSB0YXNrIGJlaW5nIGNyZWF0ZWQuICovDQozMTM1OiAgICAgICAgICAgICAgICAJCXB4U3RhY2sgPSAoIFN0YWNrVHlwZV90ICogKSBwdlBvcnRNYWxsb2NBbGlnbmVkKCAoICggKCBzaXplX3QgKSB1c1N0YWNrRGVwdGggKSAqIHNpemVvZiggU3RhY2tUeXBlX3QgKSApLCBwdXhTdGFja0J1ZmZlciApOyAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMuICovDQpCRkQwNjMzQSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwNjMzRSAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjM1NA0KQkZEMDYzNDIgIDAwMjAzNDVFICAgTEhVIFYwLCAzMihTOCkNCkJGRDA2MzQ2ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDA2MzQ4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNjM0QSAgMTExNjc3RTggICBKQUxTIHB2UG9ydE1hbGxvYw0KQkZEMDYzNEMgIDBDMDAxMTE2ICAgQURESSBUMCwgUzYsIDMwNzINCkJGRDA2MzRFICAgICAgMEMwMCAgIE5PUA0KQkZEMDYzNTAgICAgICBDQzAzICAgQiAweEJGRDA2MzU4DQpCRkQwNjM1MiAgICAgIDBDMDAgICBOT1ANCkJGRDA2MzU0ICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDA2MzU4ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjMxMzY6ICAgICAgICAgICAgICAgIA0KMzEzNzogICAgICAgICAgICAgICAgCQlpZiggcHhTdGFjayAhPSBOVUxMICkNCkJGRDA2MzVDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2MzYwICAwMDE4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA2Mzk0DQpCRkQwNjM2MiAgRUU1MDAwMTggICBBTkQgU1AsIFQ4LCBaRVJPDQozMTM4OiAgICAgICAgICAgICAgICAJCXsNCjMxMzk6ICAgICAgICAgICAgICAgIAkJCS8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgVENCLiAgV2hlcmUgdGhlIG1lbW9yeSBjb21lcyBmcm9tIGRlcGVuZHMNCjMxNDA6ICAgICAgICAgICAgICAgIAkJCW9uIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcG9ydCBtYWxsb2MgZnVuY3Rpb24uICovDQozMTQxOiAgICAgICAgICAgICAgICAJCQlweE5ld1RDQiA9ICggVENCX3QgKiApIHB2UG9ydE1hbGxvYyggc2l6ZW9mKCBUQ0JfdCApICk7DQpCRkQwNjM2NCAgICAgIEVFNTAgICBMSSBBMCwgODANCkJGRDA2MzY2ICAxMTE2NzdFOCAgIEpBTFMgcHZQb3J0TWFsbG9jDQpCRkQwNjM2OCAgMEMwMDExMTYgICBBRERJIFQwLCBTNiwgMzA3Mg0KQkZEMDYzNkEgICAgICAwQzAwICAgTk9QDQpCRkQwNjM2QyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQozMTQyOiAgICAgICAgICAgICAgICANCjMxNDM6ICAgICAgICAgICAgICAgIAkJCWlmKCBweE5ld1RDQiAhPSBOVUxMICkNCkJGRDA2MzcwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2Mzc0ICAwMDA3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA2Mzg2DQozMTQ0OiAgICAgICAgICAgICAgICAJCQl7DQozMTQ1OiAgICAgICAgICAgICAgICAJCQkJLyogU3RvcmUgdGhlIHN0YWNrIGxvY2F0aW9uIGluIHRoZSBUQ0IuICovDQozMTQ2OiAgICAgICAgICAgICAgICAJCQkJcHhOZXdUQ0ItPnB4U3RhY2sgPSBweFN0YWNrOw0KQkZEMDYzNzggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDYzN0MgIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQ0KQkZEMDYzN0UgIEU5QUMwMDE0ICAgRVhUIFpFUk8sIFM0LCA2LCAzMA0KQkZEMDYzODAgICAgICBFOUFDICAgU1cgVjEsIDQ4KFYwKQ0KQkZEMDYzODIgICAgICBDQzBBICAgQiAweEJGRDA2Mzk4DQpCRkQwNjM4NCAgICAgIDBDMDAgICBOT1ANCjMxNDc6ICAgICAgICAgICAgICAgIAkJCX0NCjMxNDg6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjMxNDk6ICAgICAgICAgICAgICAgIAkJCXsNCjMxNTA6ICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgc3RhY2sgY2Fubm90IGJlIHVzZWQgYXMgdGhlIFRDQiB3YXMgbm90IGNyZWF0ZWQuICBGcmVlIGl0DQozMTUxOiAgICAgICAgICAgICAgICAJCQkJYWdhaW4uICovDQozMTUyOiAgICAgICAgICAgICAgICAJCQkJdlBvcnRGcmVlKCBweFN0YWNrICk7DQpCRkQwNjM4NiAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwNjM4QSAgMkZFQTc3RTggICBKQUxTIHZQb3J0RnJlZQ0KQkZEMDYzOEMgICAgICAyRkVBICAgQU5ESSBBMywgQTIsIDB4MjANCkJGRDA2MzhFICAgICAgMEMwMCAgIE5PUA0KQkZEMDYzOTAgICAgICBDQzAzICAgQiAweEJGRDA2Mzk4DQpCRkQwNjM5MiAgICAgIDBDMDAgICBOT1ANCjMxNTM6ICAgICAgICAgICAgICAgIAkJCX0NCjMxNTQ6ICAgICAgICAgICAgICAgIAkJfQ0KMzE1NTogICAgICAgICAgICAgICAgCQllbHNlDQozMTU2OiAgICAgICAgICAgICAgICAJCXsNCjMxNTc6ICAgICAgICAgICAgICAgIAkJCXB4TmV3VENCID0gTlVMTDsNCkJGRDA2Mzk0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMzE1ODogICAgICAgICAgICAgICAgCQl9DQozMTU5OiAgICAgICAgICAgICAgICAJfQ0KMzE2MDogICAgICAgICAgICAgICAgCSNlbmRpZiAvKiBwb3J0U1RBQ0tfR1JPV1RIICovDQozMTYxOiAgICAgICAgICAgICAgICANCjMxNjI6ICAgICAgICAgICAgICAgIAlpZiggcHhOZXdUQ0IgIT0gTlVMTCApDQpCRkQwNjM5OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjM5QyAgMDAwRDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjNCQQ0KMzE2MzogICAgICAgICAgICAgICAgCXsNCjMxNjQ6ICAgICAgICAgICAgICAgIAkJLyogQXZvaWQgZGVwZW5kZW5jeSBvbiBtZW1zZXQoKSBpZiBpdCBpcyBub3QgcmVxdWlyZWQuICovDQozMTY1OiAgICAgICAgICAgICAgICAJCSNpZiggKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAxICkgfHwgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApIHx8ICggSU5DTFVERV91eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsgPT0gMSApICkNCjMxNjY6ICAgICAgICAgICAgICAgIAkJew0KMzE2NzogICAgICAgICAgICAgICAgCQkJLyogSnVzdCB0byBoZWxwIGRlYnVnZ2luZy4gKi8NCjMxNjg6ICAgICAgICAgICAgICAgIAkJCSggdm9pZCApIG1lbXNldCggcHhOZXdUQ0ItPnB4U3RhY2ssICggaW50ICkgdHNrU1RBQ0tfRklMTF9CWVRFLCAoIHNpemVfdCApIHVzU3RhY2tEZXB0aCAqIHNpemVvZiggU3RhY2tUeXBlX3QgKSApOw0KQkZEMDYzQTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDYzQTIgIDY5QUMwMDEwICAgRVhUIFpFUk8sIFMwLCA2LCAxNA0KQkZEMDYzQTQgICAgICA2OUFDICAgTFcgVjEsIDQ4KFYwKQ0KQkZEMDYzQTYgIDAwMjAzNDVFICAgTEhVIFYwLCAzMihTOCkNCkJGRDA2M0FBICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDA2M0FDICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwNjNBRSAgMDBBNTMwQTAgICBBRERJVSBBMSwgWkVSTywgMTY1DQpCRkQwNjNCMiAgICAgIDBDQzIgICBNT1ZFIEEyLCBWMA0KQkZEMDYzQjQgIDM2RjY3N0U4ICAgSkFMUyAweEJGRDA2REVDDQpCRkQwNjNCNiAgMEMwMDM2RjYgICBMSFUgUzcsIDMwNzIoUzYpDQpCRkQwNjNCOCAgICAgIDBDMDAgICBOT1ANCjMxNjk6ICAgICAgICAgICAgICAgIAkJfQ0KMzE3MDogICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogKCAoIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDEgKSB8fCAoICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKSB8fCAoIElOQ0xVREVfdXhUYXNrR2V0U3RhY2tIaWdoV2F0ZXJNYXJrID09IDEgKSApICkgKi8NCjMxNzE6ICAgICAgICAgICAgICAgIAl9DQozMTcyOiAgICAgICAgICAgICAgICANCjMxNzM6ICAgICAgICAgICAgICAgIAlyZXR1cm4gcHhOZXdUQ0I7DQpCRkQwNjNCQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQozMTc0OiAgICAgICAgICAgICAgICB9DQpCRkQwNjNCRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDYzQzAgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDYzQzIgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDYzQzQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDYzQzYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDYzQzggICAgICAwQzAwICAgTk9QDQozMTc1OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMxNzY6ICAgICAgICAgICAgICAgIA0KMzE3NzogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KMzE3ODogICAgICAgICAgICAgICAgDQozMTc5OiAgICAgICAgICAgICAgICAJc3RhdGljIFVCYXNlVHlwZV90IHBydkxpc3RUYXNrV2l0aGluU2luZ2xlTGlzdCggVGFza1N0YXR1c190ICpweFRhc2tTdGF0dXNBcnJheSwgTGlzdF90ICpweExpc3QsIGVUYXNrU3RhdGUgZVN0YXRlICkNCjMxODA6ICAgICAgICAgICAgICAgIAl7DQozMTgxOiAgICAgICAgICAgICAgICAJdm9sYXRpbGUgVENCX3QgKnB4TmV4dFRDQiwgKnB4Rmlyc3RUQ0I7DQozMTgyOiAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhUYXNrID0gMDsNCjMxODM6ICAgICAgICAgICAgICAgIA0KMzE4NDogICAgICAgICAgICAgICAgCQlpZiggbGlzdENVUlJFTlRfTElTVF9MRU5HVEgoIHB4TGlzdCApID4gKCBVQmFzZVR5cGVfdCApIDAgKQ0KMzE4NTogICAgICAgICAgICAgICAgCQl7DQozMTg2OiAgICAgICAgICAgICAgICAJCQlsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkoIHB4Rmlyc3RUQ0IsIHB4TGlzdCApOw0KMzE4NzogICAgICAgICAgICAgICAgDQozMTg4OiAgICAgICAgICAgICAgICAJCQkvKiBQb3B1bGF0ZSBhbiBUYXNrU3RhdHVzX3Qgc3RydWN0dXJlIHdpdGhpbiB0aGUNCjMxODk6ICAgICAgICAgICAgICAgIAkJCXB4VGFza1N0YXR1c0FycmF5IGFycmF5IGZvciBlYWNoIHRhc2sgdGhhdCBpcyByZWZlcmVuY2VkIGZyb20NCjMxOTA6ICAgICAgICAgICAgICAgIAkJCXB4TGlzdC4gIFNlZSB0aGUgZGVmaW5pdGlvbiBvZiBUYXNrU3RhdHVzX3QgaW4gdGFzay5oIGZvciB0aGUNCjMxOTE6ICAgICAgICAgICAgICAgIAkJCW1lYW5pbmcgb2YgZWFjaCBUYXNrU3RhdHVzX3Qgc3RydWN0dXJlIG1lbWJlci4gKi8NCjMxOTI6ICAgICAgICAgICAgICAgIAkJCWRvDQozMTkzOiAgICAgICAgICAgICAgICAJCQl7DQozMTk0OiAgICAgICAgICAgICAgICAJCQkJbGlzdEdFVF9PV05FUl9PRl9ORVhUX0VOVFJZKCBweE5leHRUQ0IsIHB4TGlzdCApOw0KMzE5NTogICAgICAgICAgICAgICAgDQozMTk2OiAgICAgICAgICAgICAgICAJCQkJcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdLnhIYW5kbGUgPSAoIFRhc2tIYW5kbGVfdCApIHB4TmV4dFRDQjsNCjMxOTc6ICAgICAgICAgICAgICAgIAkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0ucGNUYXNrTmFtZSA9ICggY29uc3QgY2hhciAqICkgJiggcHhOZXh0VENCLT5wY1Rhc2tOYW1lIFsgMCBdICk7DQozMTk4OiAgICAgICAgICAgICAgICAJCQkJcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdLnhUYXNrTnVtYmVyID0gcHhOZXh0VENCLT51eFRDQk51bWJlcjsNCjMxOTk6ICAgICAgICAgICAgICAgIAkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0uZUN1cnJlbnRTdGF0ZSA9IGVTdGF0ZTsNCjMyMDA6ICAgICAgICAgICAgICAgIAkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0udXhDdXJyZW50UHJpb3JpdHkgPSBweE5leHRUQ0ItPnV4UHJpb3JpdHk7DQozMjAxOiAgICAgICAgICAgICAgICANCjMyMDI6ICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBJTkNMVURFX3ZUYXNrU3VzcGVuZCA9PSAxICkNCjMyMDM6ICAgICAgICAgICAgICAgIAkJCQl7DQozMjA0OiAgICAgICAgICAgICAgICAJCQkJCS8qIElmIHRoZSB0YXNrIGlzIGluIHRoZSBzdXNwZW5kZWQgbGlzdCB0aGVuIHRoZXJlIGlzIGEgY2hhbmNlDQozMjA1OiAgICAgICAgICAgICAgICAJCQkJCWl0IGlzIGFjdHVhbGx5IGp1c3QgYmxvY2tlZCBpbmRlZmluaXRlbHkgLSBzbyByZWFsbHkgaXQgc2hvdWxkDQozMjA2OiAgICAgICAgICAgICAgICAJCQkJCWJlIHJlcG9ydGVkIGFzIGJlaW5nIGluIHRoZSBCbG9ja2VkIHN0YXRlLiAqLw0KMzIwNzogICAgICAgICAgICAgICAgCQkJCQlpZiggZVN0YXRlID09IGVTdXNwZW5kZWQgKQ0KMzIwODogICAgICAgICAgICAgICAgCQkJCQl7DQozMjA5OiAgICAgICAgICAgICAgICAJCQkJCQlpZiggbGlzdExJU1RfSVRFTV9DT05UQUlORVIoICYoIHB4TmV4dFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApICE9IE5VTEwgKQ0KMzIxMDogICAgICAgICAgICAgICAgCQkJCQkJew0KMzIxMTogICAgICAgICAgICAgICAgCQkJCQkJCXB4VGFza1N0YXR1c0FycmF5WyB1eFRhc2sgXS5lQ3VycmVudFN0YXRlID0gZUJsb2NrZWQ7DQozMjEyOiAgICAgICAgICAgICAgICAJCQkJCQl9DQozMjEzOiAgICAgICAgICAgICAgICAJCQkJCX0NCjMyMTQ6ICAgICAgICAgICAgICAgIAkJCQl9DQozMjE1OiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQozMjE2OiAgICAgICAgICAgICAgICANCjMyMTc6ICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjMyMTg6ICAgICAgICAgICAgICAgIAkJCQl7DQozMjE5OiAgICAgICAgICAgICAgICAJCQkJCXB4VGFza1N0YXR1c0FycmF5WyB1eFRhc2sgXS51eEJhc2VQcmlvcml0eSA9IHB4TmV4dFRDQi0+dXhCYXNlUHJpb3JpdHk7DQozMjIwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzIyMTogICAgICAgICAgICAgICAgCQkJCSNlbHNlDQozMjIyOiAgICAgICAgICAgICAgICAJCQkJew0KMzIyMzogICAgICAgICAgICAgICAgCQkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0udXhCYXNlUHJpb3JpdHkgPSAwOw0KMzIyNDogICAgICAgICAgICAgICAgCQkJCX0NCjMyMjU6ICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYNCjMyMjY6ICAgICAgICAgICAgICAgIA0KMzIyNzogICAgICAgICAgICAgICAgCQkJCSNpZiAoIGNvbmZpZ0dFTkVSQVRFX1JVTl9USU1FX1NUQVRTID09IDEgKQ0KMzIyODogICAgICAgICAgICAgICAgCQkJCXsNCjMyMjk6ICAgICAgICAgICAgICAgIAkJCQkJcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdLnVsUnVuVGltZUNvdW50ZXIgPSBweE5leHRUQ0ItPnVsUnVuVGltZUNvdW50ZXI7DQozMjMwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzIzMTogICAgICAgICAgICAgICAgCQkJCSNlbHNlDQozMjMyOiAgICAgICAgICAgICAgICAJCQkJew0KMzIzMzogICAgICAgICAgICAgICAgCQkJCQlweFRhc2tTdGF0dXNBcnJheVsgdXhUYXNrIF0udWxSdW5UaW1lQ291bnRlciA9IDA7DQozMjM0OiAgICAgICAgICAgICAgICAJCQkJfQ0KMzIzNTogICAgICAgICAgICAgICAgCQkJCSNlbmRpZg0KMzIzNjogICAgICAgICAgICAgICAgDQozMjM3OiAgICAgICAgICAgICAgICAJCQkJI2lmICggcG9ydFNUQUNLX0dST1dUSCA+IDAgKQ0KMzIzODogICAgICAgICAgICAgICAgCQkJCXsNCjMyMzk6ICAgICAgICAgICAgICAgIAkJCQkJcHhUYXNrU3RhdHVzQXJyYXlbIHV4VGFzayBdLnVzU3RhY2tIaWdoV2F0ZXJNYXJrID0gcHJ2VGFza0NoZWNrRnJlZVN0YWNrU3BhY2UoICggdWludDhfdCAqICkgcHhOZXh0VENCLT5weEVuZE9mU3RhY2sgKTsNCjMyNDA6ICAgICAgICAgICAgICAgIAkJCQl9DQozMjQxOiAgICAgICAgICAgICAgICAJCQkJI2Vsc2UNCjMyNDI6ICAgICAgICAgICAgICAgIAkJCQl7DQozMjQzOiAgICAgICAgICAgICAgICAJCQkJCXB4VGFza1N0YXR1c0FycmF5WyB1eFRhc2sgXS51c1N0YWNrSGlnaFdhdGVyTWFyayA9IHBydlRhc2tDaGVja0ZyZWVTdGFja1NwYWNlKCAoIHVpbnQ4X3QgKiApIHB4TmV4dFRDQi0+cHhTdGFjayApOw0KMzI0NDogICAgICAgICAgICAgICAgCQkJCX0NCjMyNDU6ICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYNCjMyNDY6ICAgICAgICAgICAgICAgIA0KMzI0NzogICAgICAgICAgICAgICAgCQkJCXV4VGFzaysrOw0KMzI0ODogICAgICAgICAgICAgICAgDQozMjQ5OiAgICAgICAgICAgICAgICAJCQl9IHdoaWxlKCBweE5leHRUQ0IgIT0gcHhGaXJzdFRDQiApOw0KMzI1MDogICAgICAgICAgICAgICAgCQl9DQozMjUxOiAgICAgICAgICAgICAgICAJCWVsc2UNCjMyNTI6ICAgICAgICAgICAgICAgIAkJew0KMzI1MzogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzI1NDogICAgICAgICAgICAgICAgCQl9DQozMjU1OiAgICAgICAgICAgICAgICANCjMyNTY6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHV4VGFzazsNCjMyNTc6ICAgICAgICAgICAgICAgIAl9DQozMjU4OiAgICAgICAgICAgICAgICANCjMyNTk6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCjMyNjA6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzI2MTogICAgICAgICAgICAgICAgDQozMjYyOiAgICAgICAgICAgICAgICAjaWYgKCAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgfHwgKCBJTkNMVURFX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayA9PSAxICkgKQ0KMzI2MzogICAgICAgICAgICAgICAgDQozMjY0OiAgICAgICAgICAgICAgICAJc3RhdGljIHVpbnQxNl90IHBydlRhc2tDaGVja0ZyZWVTdGFja1NwYWNlKCBjb25zdCB1aW50OF90ICogcHVjU3RhY2tCeXRlICkNCjMyNjU6ICAgICAgICAgICAgICAgIAl7DQpCRkQwODlBNCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNg0KQkZEMDg5QTYgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDg5QTggICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4OUFBICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkNCjMyNjY6ICAgICAgICAgICAgICAgIAl1aW50MzJfdCB1bENvdW50ID0gMFU7DQpCRkQwODlBRSAgMDAwMEY4MUUgICBTVyBaRVJPLCAwKFM4KQ0KMzI2NzogICAgICAgICAgICAgICAgDQozMjY4OiAgICAgICAgICAgICAgICAJCXdoaWxlKCAqcHVjU3RhY2tCeXRlID09ICggdWludDhfdCApIHRza1NUQUNLX0ZJTExfQllURSApDQpCRkQwODlCMiAgICAgIENDMEIgICBCIDB4QkZEMDg5Q0ENCkJGRDA4OUI0ICAgICAgMEMwMCAgIE5PUA0KQkZEMDg5Q0EgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDg5Q0UgICAgICAwOUEwICAgTEJVIFYxLCAwKFYwKQ0KQkZEMDg5RDAgIDAwQTUzMDQwICAgQURESVUgVjAsIFpFUk8sIDE2NQ0KQkZEMDg5RDQgIEZGRUY5NDQzICAgQkVRIFYxLCBWMCwgMHhCRkQwODlCNg0KQkZEMDg5RDYgIDBDMDBGRkVGICAgTFcgUkEsIDMwNzIoVDcpDQpCRkQwODlEOCAgICAgIDBDMDAgICBOT1ANCjMyNjk6ICAgICAgICAgICAgICAgIAkJew0KMzI3MDogICAgICAgICAgICAgICAgCQkJcHVjU3RhY2tCeXRlIC09IHBvcnRTVEFDS19HUk9XVEg7DQpCRkQwODlCNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODlCQSAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDENCkJGRDA4OUJDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjMyNzE6ICAgICAgICAgICAgICAgIAkJCXVsQ291bnQrKzsNCkJGRDA4OUMwICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KQkZEMDg5QzQgICAgICA2RDIwICAgQURESVUgVjAsIFYwLCAxDQpCRkQwODlDNiAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCjMyNzI6ICAgICAgICAgICAgICAgIAkJfQ0KMzI3MzogICAgICAgICAgICAgICAgDQozMjc0OiAgICAgICAgICAgICAgICAJCXVsQ291bnQgLz0gKCB1aW50MzJfdCApIHNpemVvZiggU3RhY2tUeXBlX3QgKTsgLypsaW50ICFlOTYxIENhc3RpbmcgaXMgbm90IHJlZHVuZGFudCBvbiBzbWFsbGVyIGFyY2hpdGVjdHVyZXMuICovDQpCRkQwODlEQSAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDA4OURFICAgICAgMjUyNSAgIFNSTCBWMCwgVjAsIDINCkJGRDA4OUUwICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQ0KMzI3NTogICAgICAgICAgICAgICAgDQozMjc2OiAgICAgICAgICAgICAgICAJCXJldHVybiAoIHVpbnQxNl90ICkgdWxDb3VudDsNCkJGRDA4OUU0ICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KQkZEMDg5RTggICAgICAyRDJGICAgQU5ESSBWMCwgVjAsIDB4RkZGRg0KMzI3NzogICAgICAgICAgICAgICAgCX0NCkJGRDA4OUVBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwODlFQyAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwODlFRSAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2DQpCRkQwODlGMCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwODlGMiAgICAgIDBDMDAgICBOT1ANCjMyNzg6ICAgICAgICAgICAgICAgIA0KMzI3OTogICAgICAgICAgICAgICAgI2VuZGlmIC8qICggKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApIHx8ICggSU5DTFVERV91eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsgPT0gMSApICkgKi8NCjMyODA6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzI4MTogICAgICAgICAgICAgICAgDQozMjgyOiAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3V4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayA9PSAxICkNCjMyODM6ICAgICAgICAgICAgICAgIA0KMzI4NDogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4VGFza0dldFN0YWNrSGlnaFdhdGVyTWFyayggVGFza0hhbmRsZV90IHhUYXNrICkNCjMyODU6ICAgICAgICAgICAgICAgIAl7DQpCRkQwOEMxMCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MA0KQkZEMDhDMTIgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQ0KQkZEMDhDMTQgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQ0KQkZEMDhDMTYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4QzE4ICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkNCjMyODY6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqcHhUQ0I7DQozMjg3OiAgICAgICAgICAgICAgICAJdWludDhfdCAqcHVjRW5kT2ZTdGFjazsNCjMyODg6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFJldHVybjsNCjMyODk6ICAgICAgICAgICAgICAgIA0KMzI5MDogICAgICAgICAgICAgICAgCQlweFRDQiA9IHBydkdldFRDQkZyb21IYW5kbGUoIHhUYXNrICk7DQpCRkQwOEMxQyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwOEMyMCAgMDAwNDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOEMyQw0KQkZEMDhDMjQgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA4QzI4ICAgICAgQ0MwMyAgIEIgMHhCRkQwOEMzMA0KQkZEMDhDMkEgICAgICAwQzAwICAgTk9QDQpCRkQwOEMyQyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwOEMzMCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQozMjkxOiAgICAgICAgICAgICAgICANCjMyOTI6ICAgICAgICAgICAgICAgIAkJI2lmIHBvcnRTVEFDS19HUk9XVEggPCAwDQozMjkzOiAgICAgICAgICAgICAgICAJCXsNCjMyOTQ6ICAgICAgICAgICAgICAgIAkJCXB1Y0VuZE9mU3RhY2sgPSAoIHVpbnQ4X3QgKiApIHB4VENCLT5weFN0YWNrOw0KQkZEMDhDMzQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDhDMzYgIDY5MkMwMDEwICAgRVhUIFpFUk8sIFMwLCA0LCAxNA0KQkZEMDhDMzggICAgICA2OTJDICAgTFcgVjAsIDQ4KFYwKQ0KQkZEMDhDM0EgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMzI5NTogICAgICAgICAgICAgICAgCQl9DQozMjk2OiAgICAgICAgICAgICAgICAJCSNlbHNlDQozMjk3OiAgICAgICAgICAgICAgICAJCXsNCjMyOTg6ICAgICAgICAgICAgICAgIAkJCXB1Y0VuZE9mU3RhY2sgPSAoIHVpbnQ4X3QgKiApIHB4VENCLT5weEVuZE9mU3RhY2s7DQozMjk5OiAgICAgICAgICAgICAgICAJCX0NCjMzMDA6ICAgICAgICAgICAgICAgIAkJI2VuZGlmDQozMzAxOiAgICAgICAgICAgICAgICANCjMzMDI6ICAgICAgICAgICAgICAgIAkJdXhSZXR1cm4gPSAoIFVCYXNlVHlwZV90ICkgcHJ2VGFza0NoZWNrRnJlZVN0YWNrU3BhY2UoIHB1Y0VuZE9mU3RhY2sgKTsNCkJGRDA4QzNFICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDA4QzQyICA0NEQyNzdFOCAgIEpBTFMgcHJ2VGFza0NoZWNrRnJlZVN0YWNrU3BhY2UNCkJGRDA4QzQ0ICAgICAgNDREMiAgIE9SMTYgVjAsIFYwDQpCRkQwOEM0NiAgICAgIDBDMDAgICBOT1ANCkJGRDA4QzQ4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjMzMDM6ICAgICAgICAgICAgICAgIA0KMzMwNDogICAgICAgICAgICAgICAgCQlyZXR1cm4gdXhSZXR1cm47DQpCRkQwOEM0QyAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQozMzA1OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDhDNTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4QzUyICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkNCkJGRDA4QzU0ICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkNCkJGRDA4QzU2ICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDANCkJGRDA4QzU4ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4QzVBICAgICAgMEMwMCAgIE5PUA0KMzMwNjogICAgICAgICAgICAgICAgDQozMzA3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogSU5DTFVERV91eFRhc2tHZXRTdGFja0hpZ2hXYXRlck1hcmsgKi8NCjMzMDg6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzMwOTogICAgICAgICAgICAgICAgDQozMzEwOiAgICAgICAgICAgICAgICAjaWYgKCBJTkNMVURFX3ZUYXNrRGVsZXRlID09IDEgKQ0KMzMxMTogICAgICAgICAgICAgICAgDQozMzEyOiAgICAgICAgICAgICAgICAJc3RhdGljIHZvaWQgcHJ2RGVsZXRlVENCKCBUQ0JfdCAqcHhUQ0IgKQ0KMzMxMzogICAgICAgICAgICAgICAgCXsNCkJGRDA5OERDICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwOThERSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwOThFMCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwOThFMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDk4RTQgIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQ0KMzMxNDogICAgICAgICAgICAgICAgCQkvKiBUaGlzIGNhbGwgaXMgcmVxdWlyZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgVHJpQ29yZSBwb3J0LiAgSXQgbXVzdCBiZQ0KMzMxNTogICAgICAgICAgICAgICAgCQlhYm92ZSB0aGUgdlBvcnRGcmVlKCkgY2FsbHMuICBUaGUgY2FsbCBpcyBhbHNvIHVzZWQgYnkgcG9ydHMvZGVtb3MgdGhhdA0KMzMxNjogICAgICAgICAgICAgICAgCQl3YW50IHRvIGFsbG9jYXRlIGFuZCBjbGVhbiBSQU0gc3RhdGljYWxseS4gKi8NCjMzMTc6ICAgICAgICAgICAgICAgIAkJcG9ydENMRUFOX1VQX1RDQiggcHhUQ0IgKTsNCjMzMTg6ICAgICAgICAgICAgICAgIA0KMzMxOTogICAgICAgICAgICAgICAgCQkvKiBGcmVlIHVwIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBzY2hlZHVsZXIgZm9yIHRoZSB0YXNrLiAgSXQgaXMgdXANCjMzMjA6ICAgICAgICAgICAgICAgIAkJdG8gdGhlIHRhc2sgdG8gZnJlZSBhbnkgbWVtb3J5IGFsbG9jYXRlZCBhdCB0aGUgYXBwbGljYXRpb24gbGV2ZWwuICovDQozMzIxOiAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9ORVdMSUJfUkVFTlRSQU5UID09IDEgKQ0KMzMyMjogICAgICAgICAgICAgICAgCQl7DQozMzIzOiAgICAgICAgICAgICAgICAJCQlfcmVjbGFpbV9yZWVudCggJiggcHhUQ0ItPnhOZXdMaWJfcmVlbnQgKSApOw0KMzMyNDogICAgICAgICAgICAgICAgCQl9DQozMzI1OiAgICAgICAgICAgICAgICAJCSNlbmRpZiAvKiBjb25maWdVU0VfTkVXTElCX1JFRU5UUkFOVCAqLw0KMzMyNjogICAgICAgICAgICAgICAgDQozMzI3OiAgICAgICAgICAgICAgICAJCSNpZiggcG9ydFVTSU5HX01QVV9XUkFQUEVSUyA9PSAxICkNCjMzMjg6ICAgICAgICAgICAgICAgIAkJew0KMzMyOTogICAgICAgICAgICAgICAgCQkJLyogT25seSBmcmVlIHRoZSBzdGFjayBpZiBpdCB3YXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5IGluIHRoZSBmaXJzdA0KMzMzMDogICAgICAgICAgICAgICAgCQkJcGxhY2UuICovDQozMzMxOiAgICAgICAgICAgICAgICAJCQlpZiggcHhUQ0ItPnhVc2luZ1N0YXRpY2FsbHlBbGxvY2F0ZWRTdGFjayA9PSBwZEZBTFNFICkNCjMzMzI6ICAgICAgICAgICAgICAgIAkJCXsNCjMzMzM6ICAgICAgICAgICAgICAgIAkJCQl2UG9ydEZyZWVBbGlnbmVkKCBweFRDQi0+cHhTdGFjayApOw0KMzMzNDogICAgICAgICAgICAgICAgCQkJfQ0KMzMzNTogICAgICAgICAgICAgICAgCQl9DQozMzM2OiAgICAgICAgICAgICAgICAJCSNlbHNlDQozMzM3OiAgICAgICAgICAgICAgICAJCXsNCjMzMzg6ICAgICAgICAgICAgICAgIAkJCXZQb3J0RnJlZUFsaWduZWQoIHB4VENCLT5weFN0YWNrICk7DQpCRkQwOThFOCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwOThFQSAgNjkyQzAwMTggICBFWFQgWkVSTywgVDgsIDQsIDE0DQpCRkQwOThFQyAgICAgIDY5MkMgICBMVyBWMCwgNDgoVjApDQpCRkQwOThFRSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDk4RjAgIDJGRUE3N0U4ICAgSkFMUyB2UG9ydEZyZWUNCkJGRDA5OEYyICAgICAgMkZFQSAgIEFOREkgQTMsIEEyLCAweDIwDQpCRkQwOThGNCAgICAgIDBDMDAgICBOT1ANCjMzMzk6ICAgICAgICAgICAgICAgIAkJfQ0KMzM0MDogICAgICAgICAgICAgICAgCQkjZW5kaWYNCjMzNDE6ICAgICAgICAgICAgICAgIA0KMzM0MjogICAgICAgICAgICAgICAgCQl2UG9ydEZyZWUoIHB4VENCICk7DQpCRkQwOThGNiAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpDQpCRkQwOThGQSAgMkZFQTc3RTggICBKQUxTIHZQb3J0RnJlZQ0KQkZEMDk4RkMgICAgICAyRkVBICAgQU5ESSBBMywgQTIsIDB4MjANCkJGRDA5OEZFICAgICAgMEMwMCAgIE5PUA0KMzM0MzogICAgICAgICAgICAgICAgCX0NCkJGRDA5OTAwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTkwMiAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApDQpCRkQwOTkwNCAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApDQpCRkQwOTkwNiAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0DQpCRkQwOTkwOCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTkwQSAgICAgIDBDMDAgICBOT1ANCjMzNDQ6ICAgICAgICAgICAgICAgIA0KMzM0NTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tEZWxldGUgKi8NCjMzNDY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzM0NzogICAgICAgICAgICAgICAgDQozMzQ4OiAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZSZXNldE5leHRUYXNrVW5ibG9ja1RpbWUoIHZvaWQgKQ0KMzM0OTogICAgICAgICAgICAgICAgew0KQkZEMDhGOTQgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYNCkJGRDA4Rjk2ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA4Rjk4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQozMzUwOiAgICAgICAgICAgICAgICBUQ0JfdCAqcHhUQ0I7DQozMzUxOiAgICAgICAgICAgICAgICANCjMzNTI6ICAgICAgICAgICAgICAgIAlpZiggbGlzdExJU1RfSVNfRU1QVFkoIHB4RGVsYXllZFRhc2tMaXN0ICkgIT0gcGRGQUxTRSApDQpCRkQwOEY5QSAgODA3NEZDNUMgICBMVyBWMCwgLTMyNjUyKEdQKQ0KQkZEMDhGOUUgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwOEZBMCAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOEZBQQ0KQkZEMDhGQTQgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA4RkE2ICAgICAgQ0MwMiAgIEIgMHhCRkQwOEZBQw0KQkZEMDhGQTggICAgICAwQzAwICAgTk9QDQpCRkQwOEZBQSAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQpCRkQwOEZBQyAgMDAwNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOEZCQQ0KMzM1MzogICAgICAgICAgICAgICAgCXsNCjMzNTQ6ICAgICAgICAgICAgICAgIAkJLyogVGhlIG5ldyBjdXJyZW50IGRlbGF5ZWQgbGlzdCBpcyBlbXB0eS4gIFNldCB4TmV4dFRhc2tVbmJsb2NrVGltZSB0bw0KMzM1NTogICAgICAgICAgICAgICAgCQl0aGUgbWF4aW11bSBwb3NzaWJsZSB2YWx1ZSBzbyBpdCBpcwlleHRyZW1lbHkgdW5saWtlbHkgdGhhdCB0aGUNCjMzNTY6ICAgICAgICAgICAgICAgIAkJaWYoIHhUaWNrQ291bnQgPj0geE5leHRUYXNrVW5ibG9ja1RpbWUgKSB0ZXN0IHdpbGwgcGFzcyB1bnRpbA0KMzM1NzogICAgICAgICAgICAgICAgCQl0aGVyZSBpcyBhbiBpdGVtIGluIHRoZSBkZWxheWVkIGxpc3QuICovDQozMzU4OiAgICAgICAgICAgICAgICAJCXhOZXh0VGFza1VuYmxvY2tUaW1lID0gcG9ydE1BWF9ERUxBWTsNCkJGRDA4RkIwICAgICAgRUQ3RiAgIExJIFYwLCAtMQ0KQkZEMDhGQjIgIDgwNThGODVDICAgU1cgVjAsIC0zMjY4MChHUCkNCkJGRDA4RkI2ICAgICAgQ0MwQyAgIEIgMHhCRkQwOEZEMA0KQkZEMDhGQjggICAgICAwQzAwICAgTk9QDQozMzU5OiAgICAgICAgICAgICAgICAJfQ0KMzM2MDogICAgICAgICAgICAgICAgCWVsc2UNCjMzNjE6ICAgICAgICAgICAgICAgIAl7DQozMzYyOiAgICAgICAgICAgICAgICAJCS8qIFRoZSBuZXcgY3VycmVudCBkZWxheWVkIGxpc3QgaXMgbm90IGVtcHR5LCBnZXQgdGhlIHZhbHVlIG9mDQozMzYzOiAgICAgICAgICAgICAgICAJCXRoZSBpdGVtIGF0IHRoZSBoZWFkIG9mIHRoZSBkZWxheWVkIGxpc3QuICBUaGlzIGlzIHRoZSB0aW1lIGF0DQozMzY0OiAgICAgICAgICAgICAgICAJCXdoaWNoIHRoZSB0YXNrIGF0IHRoZSBoZWFkIG9mIHRoZSBkZWxheWVkIGxpc3Qgc2hvdWxkIGJlIHJlbW92ZWQNCjMzNjU6ICAgICAgICAgICAgICAgIAkJZnJvbSB0aGUgQmxvY2tlZCBzdGF0ZS4gKi8NCjMzNjY6ICAgICAgICAgICAgICAgIAkJKCBweFRDQiApID0gKCBUQ0JfdCAqICkgbGlzdEdFVF9PV05FUl9PRl9IRUFEX0VOVFJZKCBweERlbGF5ZWRUYXNrTGlzdCApOw0KQkZEMDhGQkEgIDgwNzRGQzVDICAgTFcgVjAsIC0zMjY1MihHUCkNCkJGRDA4RkJFICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDA4RkMwICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDA4RkMyICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQ0KMzM2NzogICAgICAgICAgICAgICAgCQl4TmV4dFRhc2tVbmJsb2NrVGltZSA9IGxpc3RHRVRfTElTVF9JVEVNX1ZBTFVFKCAmKCAoIHB4VENCICktPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDhGQzYgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwOEZDQSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkNCkJGRDA4RkNDICA4MDU4Rjg1QyAgIFNXIFYwLCAtMzI2ODAoR1ApDQozMzY4OiAgICAgICAgICAgICAgICAJfQ0KMzM2OTogICAgICAgICAgICAgICAgfQ0KQkZEMDhGRDAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4RkQyICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDA4RkQ0ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA4RkQ2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4RkQ4ICAgICAgMEMwMCAgIE5PUA0KMzM3MDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMzcxOiAgICAgICAgICAgICAgICANCjMzNzI6ICAgICAgICAgICAgICAgICNpZiAoICggSU5DTFVERV94VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlID09IDEgKSB8fCAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKSApDQozMzczOiAgICAgICAgICAgICAgICANCjMzNzQ6ICAgICAgICAgICAgICAgIAlUYXNrSGFuZGxlX3QgeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSggdm9pZCApDQozMzc1OiAgICAgICAgICAgICAgICAJew0KQkZEMDlFMDQgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYNCkJGRDA5RTA2ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA5RTA4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQozMzc2OiAgICAgICAgICAgICAgICAJVGFza0hhbmRsZV90IHhSZXR1cm47DQozMzc3OiAgICAgICAgICAgICAgICANCjMzNzg6ICAgICAgICAgICAgICAgIAkJLyogQSBjcml0aWNhbCBzZWN0aW9uIGlzIG5vdCByZXF1aXJlZCBhcyB0aGlzIGlzIG5vdCBjYWxsZWQgZnJvbQ0KMzM3OTogICAgICAgICAgICAgICAgCQlhbiBpbnRlcnJ1cHQgYW5kIHRoZSBjdXJyZW50IFRDQiB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBmb3IgYW55DQozMzgwOiAgICAgICAgICAgICAgICAJCWluZGl2aWR1YWwgZXhlY3V0aW9uIHRocmVhZC4gKi8NCjMzODE6ICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHB4Q3VycmVudFRDQjsNCkJGRDA5RTBBICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwOUUwRSAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCjMzODI6ICAgICAgICAgICAgICAgIA0KMzM4MzogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDA5RTEyICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KMzM4NDogICAgICAgICAgICAgICAgCX0NCkJGRDA5RTE2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUUxOCAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOUUxQSAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2DQpCRkQwOUUxQyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUUxRSAgICAgIDBDMDAgICBOT1ANCjMzODU6ICAgICAgICAgICAgICAgIA0KMzM4NjogICAgICAgICAgICAgICAgI2VuZGlmIC8qICggKCBJTkNMVURFX3hUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUgPT0gMSApIHx8ICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApICkgKi8NCjMzODc6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzM4ODogICAgICAgICAgICAgICAgDQozMzg5OiAgICAgICAgICAgICAgICAjaWYgKCAoIElOQ0xVREVfeFRhc2tHZXRTY2hlZHVsZXJTdGF0ZSA9PSAxICkgfHwgKCBjb25maWdVU0VfVElNRVJTID09IDEgKSApDQozMzkwOiAgICAgICAgICAgICAgICANCjMzOTE6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoIHZvaWQgKQ0KMzM5MjogICAgICAgICAgICAgICAgCXsNCkJGRDA5NTFDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwOTUxRSAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwOTUyMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMzM5MzogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjMzOTQ6ICAgICAgICAgICAgICAgIA0KMzM5NTogICAgICAgICAgICAgICAgCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgPT0gcGRGQUxTRSApDQpCRkQwOTUyMiAgODA0NEZDNUMgICBMVyBWMCwgLTMyNzAwKEdQKQ0KQkZEMDk1MjYgIDAwMDU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDk1MzQNCjMzOTY6ICAgICAgICAgICAgICAgIAkJew0KMzM5NzogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHRhc2tTQ0hFRFVMRVJfTk9UX1NUQVJURUQ7DQpCRkQwOTUyQSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDk1MkMgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpDQpCRkQwOTUyRSAgQ0MwQzAwMDAgICBJTlMgWkVSTywgWkVSTywgMTYsIDEwDQpCRkQwOTUzMCAgICAgIENDMEMgICBCIDB4QkZEMDk1NEENCkJGRDA5NTMyICAgICAgMEMwMCAgIE5PUA0KMzM5ODogICAgICAgICAgICAgICAgCQl9DQozMzk5OiAgICAgICAgICAgICAgICAJCWVsc2UNCjM0MDA6ICAgICAgICAgICAgICAgIAkJew0KMzQwMTogICAgICAgICAgICAgICAgCQkJaWYoIHV4U2NoZWR1bGVyU3VzcGVuZGVkID09ICggVUJhc2VUeXBlX3QgKSBwZEZBTFNFICkNCkJGRDA5NTM0ICA4MDVDRkM1QyAgIExXIFYwLCAtMzI2NzYoR1ApDQpCRkQwOTUzOCAgMDAwNTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOTU0Ng0KMzQwMjogICAgICAgICAgICAgICAgCQkJew0KMzQwMzogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSB0YXNrU0NIRURVTEVSX1JVTk5JTkc7DQpCRkQwOTUzQyAgICAgIEVEMDIgICBMSSBWMCwgMg0KQkZEMDk1M0UgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpDQpCRkQwOTU0MiAgICAgIENDMDMgICBCIDB4QkZEMDk1NEENCkJGRDA5NTQ0ICAgICAgMEMwMCAgIE5PUA0KMzQwNDogICAgICAgICAgICAgICAgCQkJfQ0KMzQwNTogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMzQwNjogICAgICAgICAgICAgICAgCQkJew0KMzQwNzogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSB0YXNrU0NIRURVTEVSX1NVU1BFTkRFRDsNCkJGRDA5NTQ2ICAwMDAwRjgxRSAgIFNXIFpFUk8sIDAoUzgpDQozNDA4OiAgICAgICAgICAgICAgICAJCQl9DQozNDA5OiAgICAgICAgICAgICAgICAJCX0NCjM0MTA6ICAgICAgICAgICAgICAgIA0KMzQxMTogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDA5NTRBICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KMzQxMjogICAgICAgICAgICAgICAgCX0NCkJGRDA5NTRFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTU1MCAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOTU1MiAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2DQpCRkQwOTU1NCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTU1NiAgICAgIDBDMDAgICBOT1ANCjM0MTM6ICAgICAgICAgICAgICAgIA0KMzQxNDogICAgICAgICAgICAgICAgI2VuZGlmIC8qICggKCBJTkNMVURFX3hUYXNrR2V0U2NoZWR1bGVyU3RhdGUgPT0gMSApIHx8ICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkgKSAqLw0KMzQxNTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozNDE2OiAgICAgICAgICAgICAgICANCjM0MTc6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KMzQxODogICAgICAgICAgICAgICAgDQozNDE5OiAgICAgICAgICAgICAgICAJdm9pZCB2VGFza1ByaW9yaXR5SW5oZXJpdCggVGFza0hhbmRsZV90IGNvbnN0IHB4TXV0ZXhIb2xkZXIgKQ0KMzQyMDogICAgICAgICAgICAgICAgCXsNCkJGRDAzNTIwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwMzUyMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwMzUyNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwMzUyNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDM1MjggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KMzQyMTogICAgICAgICAgICAgICAgCVRDQl90ICogY29uc3QgcHhUQ0IgPSAoIFRDQl90ICogKSBweE11dGV4SG9sZGVyOw0KQkZEMDM1MkMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDM1MzAgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMzQyMjogICAgICAgICAgICAgICAgDQozNDIzOiAgICAgICAgICAgICAgICAJCS8qIElmIHRoZSBtdXRleCB3YXMgZ2l2ZW4gYmFjayBieSBhbiBpbnRlcnJ1cHQgd2hpbGUgdGhlIHF1ZXVlIHdhcw0KMzQyNDogICAgICAgICAgICAgICAgCQlsb2NrZWQgdGhlbiB0aGUgbXV0ZXggaG9sZGVyIG1pZ2h0IG5vdyBiZSBOVUxMLiAqLw0KMzQyNTogICAgICAgICAgICAgICAgCQlpZiggcHhNdXRleEhvbGRlciAhPSBOVUxMICkNCkJGRDAzNTM0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAzNTM4ICAwMDdFNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzNjM4DQozNDI2OiAgICAgICAgICAgICAgICAJCXsNCjM0Mjc6ICAgICAgICAgICAgICAgIAkJCS8qIElmIHRoZSBob2xkZXIgb2YgdGhlIG11dGV4IGhhcyBhIHByaW9yaXR5IGJlbG93IHRoZSBwcmlvcml0eSBvZg0KMzQyODogICAgICAgICAgICAgICAgCQkJdGhlIHRhc2sgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIG11dGV4IHRoZW4gaXQgd2lsbCB0ZW1wb3JhcmlseQ0KMzQyOTogICAgICAgICAgICAgICAgCQkJaW5oZXJpdCB0aGUgcHJpb3JpdHkgb2YgdGhlIHRhc2sgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIG11dGV4LiAqLw0KMzQzMDogICAgICAgICAgICAgICAgCQkJaWYoIHB4VENCLT51eFByaW9yaXR5IDwgcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCkJGRDAzNTNDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzNTQwICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkNCkJGRDAzNTQyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMzU0NiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMzU0OCAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDAzNTRBICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMA0KQkZEMDM1NEMgIDAwNzQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDM2MzgNCjM0MzE6ICAgICAgICAgICAgICAgIAkJCXsNCjM0MzI6ICAgICAgICAgICAgICAgIAkJCQkvKiBBZGp1c3QgdGhlIG11dGV4IGhvbGRlciBzdGF0ZSB0byBhY2NvdW50IGZvciBpdHMgbmV3DQozNDMzOiAgICAgICAgICAgICAgICAJCQkJcHJpb3JpdHkuICBPbmx5IHJlc2V0IHRoZSBldmVudCBsaXN0IGl0ZW0gdmFsdWUgaWYgdGhlIHZhbHVlIGlzDQozNDM0OiAgICAgICAgICAgICAgICAJCQkJbm90CWJlaW5nIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UuICovDQozNDM1OiAgICAgICAgICAgICAgICAJCQkJaWYoICggbGlzdEdFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICkgJiB0YXNrRVZFTlRfTElTVF9JVEVNX1ZBTFVFX0lOX1VTRSApID09IDBVTCApDQpCRkQwMzU1MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzU1NCAgICAgIDY5MjYgICBMVyBWMCwgMjQoVjApDQpCRkQwMzU1NiAgMDAwOTQwMDIgICBCTFRaIFYwLCAweEJGRDAzNTZDDQpCRkQwMzU1OCAgMEMwMDAwMDkgICBTTEwgWkVSTywgVDEsIDENCkJGRDAzNTVBICAgICAgMEMwMCAgIE5PUA0KMzQzNjogICAgICAgICAgICAgICAgCQkJCXsNCjM0Mzc6ICAgICAgICAgICAgICAgIAkJCQkJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApLCAoIFRpY2tUeXBlX3QgKSBjb25maWdNQVhfUFJJT1JJVElFUyAtICggVGlja1R5cGVfdCApIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApOyAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMuICovDQpCRkQwMzU1QyAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDM1NjAgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDM1NjIgICAgICBFRDg1ICAgTEkgVjEsIDUNCkJGRDAzNTY0ICAgICAgMDVBNyAgIFNVQlUgVjEsIFYxLCBWMA0KQkZEMDM1NjYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM1NkEgICAgICBFOUE2ICAgU1cgVjEsIDI0KFYwKQ0KMzQzODogICAgICAgICAgICAgICAgCQkJCX0NCjM0Mzk6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQozNDQwOiAgICAgICAgICAgICAgICAJCQkJew0KMzQ0MTogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNDQyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzQ0MzogICAgICAgICAgICAgICAgDQozNDQ0OiAgICAgICAgICAgICAgICAJCQkJLyogSWYgdGhlIHRhc2sgYmVpbmcgbW9kaWZpZWQgaXMgaW4gdGhlIHJlYWR5IHN0YXRlIGl0IHdpbGwgbmVlZA0KMzQ0NTogICAgICAgICAgICAgICAgCQkJCXRvIGJlIG1vdmVkIGludG8gYSBuZXcgbGlzdC4gKi8NCjM0NDY6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdElTX0NPTlRBSU5FRF9XSVRISU4oICYoIHB4UmVhZHlUYXNrc0xpc3RzWyBweFRDQi0+dXhQcmlvcml0eSBdICksICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSAhPSBwZEZBTFNFICkNCkJGRDAzNTZDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzNTZFICA2OUE1MDAxMCAgIExXWCBUNSwgMChTMCkNCkJGRDAzNTcwICAgICAgNjlBNSAgIExXIFYxLCAyMChWMCkNCkJGRDAzNTcyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzNTc2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAzNTc4ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAzNTdBICAgICAgMjYyNCAgIFNMTCBBMCwgVjAsIDINCkJGRDAzNTdDICAgICAgMDY0NCAgIEFERFUgQTAsIFYwLCBBMA0KQkZEMDM1N0UgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAzNTgwICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAzNTgyICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwMzU4NiAgICAgIDA1MjggICBBRERVIFYwLCBBMCwgVjANCkJGRDAzNTg4ICAwMDA0QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDM1OTQNCkJGRDAzNThBICAwQzAwMDAwNCAgIFNMTCBaRVJPLCBBMCwgMQ0KQkZEMDM1OEMgICAgICAwQzAwICAgTk9QDQpCRkQwMzU4RSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDM1OTAgICAgICBDQzAyICAgQiAweEJGRDAzNTk2DQpCRkQwMzU5MiAgICAgIDBDMDAgICBOT1ANCkJGRDAzNTk0ICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8NCkJGRDAzNTk2ICAwMDQ5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzNjJDDQozNDQ3OiAgICAgICAgICAgICAgICAJCQkJew0KMzQ0ODogICAgICAgICAgICAgICAgCQkJCQlpZiggdXhMaXN0UmVtb3ZlKCAmKCBweFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDM1OUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM1OUUgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwMzVBMCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDM1QTIgIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUNCkJGRDAzNUE0ICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDENCkJGRDAzNUE2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDM1QTggIDAwMUE0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDM1RTANCjM0NDk6ICAgICAgICAgICAgICAgIAkJCQkJew0KMzQ1MDogICAgICAgICAgICAgICAgCQkJCQkJdGFza1JFU0VUX1JFQURZX1BSSU9SSVRZKCBweFRDQi0+dXhQcmlvcml0eSApOw0KQkZEMDM1QUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM1QjAgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDM1QjIgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDM1QjQgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDM1QjYgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwMzVCOCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDM1QkEgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDM1QkMgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjANCkJGRDAzNUMwICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDM1QzIgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMzVDNCAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzVFMA0KQkZEMDM1QzggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM1Q0MgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDM1Q0UgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAzNUQwICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQ0KQkZEMDM1RDIgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQNCkJGRDAzNUQ0ICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMA0KQkZEMDM1RDYgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDAzNURBICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDM1REMgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCjM0NTE6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzQ1MjogICAgICAgICAgICAgICAgCQkJCQllbHNlDQozNDUzOiAgICAgICAgICAgICAgICAJCQkJCXsNCjM0NTQ6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM0NTU6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzQ1NjogICAgICAgICAgICAgICAgDQozNDU3OiAgICAgICAgICAgICAgICAJCQkJCS8qIEluaGVyaXQgdGhlIHByaW9yaXR5IGJlZm9yZSBiZWluZyBtb3ZlZCBpbnRvIHRoZSBuZXcgbGlzdC4gKi8NCjM0NTg6ICAgICAgICAgICAgICAgIAkJCQkJcHhUQ0ItPnV4UHJpb3JpdHkgPSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHk7DQpCRkQwMzVFMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDM1RTQgICAgICA2OUFCICAgTFcgVjEsIDQ0KFYwKQ0KQkZEMDM1RTYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM1RUEgICAgICBFOUFCICAgU1cgVjEsIDQ0KFYwKQ0KMzQ1OTogICAgICAgICAgICAgICAgCQkJCQlwcnZBZGRUYXNrVG9SZWFkeUxpc3QoIHB4VENCICk7DQpCRkQwMzVFQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzVGMCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMzVGMiAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDM1RjQgIDE4MTAwMDYyICAgU0xMViBWMSwgVjAsIFYxDQpCRkQwMzVGNiAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQ0KQkZEMDM1RjggIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDAzNUZDICAgICAgNDREMyAgIE9SMTYgVjAsIFYxDQpCRkQwMzVGRSAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDM2MDIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM2MDYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDM2MDggICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDM2MEEgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDM2MEMgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwMzYwRSAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDM2MTAgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDM2MTIgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjANCkJGRDAzNjE2ICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMA0KQkZEMDM2MTggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM2MUMgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwMzYxRSAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDM2MjAgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAzNjIyICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQNCkJGRDAzNjI0ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQ0KQkZEMDM2MjYgICAgICAwQzAwICAgTk9QDQpCRkQwMzYyOCAgICAgIENDMDcgICBCIDB4QkZEMDM2MzgNCkJGRDAzNjJBICAgICAgMEMwMCAgIE5PUA0KMzQ2MDogICAgICAgICAgICAgICAgCQkJCX0NCjM0NjE6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQozNDYyOiAgICAgICAgICAgICAgICAJCQkJew0KMzQ2MzogICAgICAgICAgICAgICAgCQkJCQkvKiBKdXN0IGluaGVyaXQgdGhlIHByaW9yaXR5LiAqLw0KMzQ2NDogICAgICAgICAgICAgICAgCQkJCQlweFRDQi0+dXhQcmlvcml0eSA9IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eTsNCkJGRDAzNjJDICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMzYzMCAgICAgIDY5QUIgICBMVyBWMSwgNDQoVjApDQpCRkQwMzYzMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzYzNiAgICAgIEU5QUIgICBTVyBWMSwgNDQoVjApDQozNDY1OiAgICAgICAgICAgICAgICAJCQkJfQ0KMzQ2NjogICAgICAgICAgICAgICAgDQozNDY3OiAgICAgICAgICAgICAgICAJCQkJdHJhY2VUQVNLX1BSSU9SSVRZX0lOSEVSSVQoIHB4VENCLCBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKTsNCjM0Njg6ICAgICAgICAgICAgICAgIAkJCX0NCjM0Njk6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjM0NzA6ICAgICAgICAgICAgICAgIAkJCXsNCjM0NzE6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNDcyOiAgICAgICAgICAgICAgICAJCQl9DQozNDczOiAgICAgICAgICAgICAgICAJCX0NCjM0NzQ6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzQ3NTogICAgICAgICAgICAgICAgCQl7DQozNDc2OiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNDc3OiAgICAgICAgICAgICAgICAJCX0NCjM0Nzg6ICAgICAgICAgICAgICAgIAl9DQpCRkQwMzYzOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDM2M0EgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDM2M0MgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDM2M0UgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDM2NDAgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDM2NDIgICAgICAwQzAwICAgTk9QDQozNDc5OiAgICAgICAgICAgICAgICANCjM0ODA6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfTVVURVhFUyAqLw0KMzQ4MTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozNDgyOiAgICAgICAgICAgICAgICANCjM0ODM6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KMzQ4NDogICAgICAgICAgICAgICAgDQozNDg1OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4VGFza1ByaW9yaXR5RGlzaW5oZXJpdCggVGFza0hhbmRsZV90IGNvbnN0IHB4TXV0ZXhIb2xkZXIgKQ0KMzQ4NjogICAgICAgICAgICAgICAgCXsNCkJGRDAyRjA0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwMkYwNiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwMkYwOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwMkYwQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDJGMEMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KMzQ4NzogICAgICAgICAgICAgICAgCVRDQl90ICogY29uc3QgcHhUQ0IgPSAoIFRDQl90ICogKSBweE11dGV4SG9sZGVyOw0KQkZEMDJGMTAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDJGMTQgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMzQ4ODogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybiA9IHBkRkFMU0U7DQpCRkQwMkYxOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCjM0ODk6ICAgICAgICAgICAgICAgIA0KMzQ5MDogICAgICAgICAgICAgICAgCQlpZiggcHhNdXRleEhvbGRlciAhPSBOVUxMICkNCkJGRDAyRjFDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyRjIwICAwMDhCNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzMDNBDQozNDkxOiAgICAgICAgICAgICAgICAJCXsNCjM0OTI6ICAgICAgICAgICAgICAgIAkJCS8qIEEgdGFzayBjYW4gb25seSBoYXZlIGFuIGluaGVyaXRlZCBwcmlvcml0eSBpZiBpdCBob2xkcyB0aGUgbXV0ZXguDQozNDkzOiAgICAgICAgICAgICAgICAJCQlJZiB0aGUgbXV0ZXggaXMgaGVsZCBieSBhIHRhc2sgdGhlbiBpdCBjYW5ub3QgYmUgZ2l2ZW4gZnJvbSBhbg0KMzQ5NDogICAgICAgICAgICAgICAgCQkJaW50ZXJydXB0LCBhbmQgaWYgYSBtdXRleCBpcyBnaXZlbiBieSB0aGUgaG9sZGluZyB0YXNrIHRoZW4gaXQgbXVzdA0KMzQ5NTogICAgICAgICAgICAgICAgCQkJYmUgdGhlIHJ1bm5pbmcgc3RhdGUgdGFzay4gKi8NCjM0OTY6ICAgICAgICAgICAgICAgIAkJCWNvbmZpZ0FTU0VSVCggcHhUQ0IgPT0gcHhDdXJyZW50VENCICk7DQpCRkQwMkYyNCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDJGMjggIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQ0KQkZEMDJGMkMgIDAwMEE5NDQzICAgQkVRIFYxLCBWMCwgMHhCRkQwMkY0NA0KQkZEMDJGMkUgIDBDMDAwMDBBICAgU0xMIFpFUk8sIFQyLCAxDQpCRkQwMkYzMCAgICAgIDBDMDAgICBOT1ANCkJGRDAyRjMyICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMkYzNCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMkYzNiAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDJGMzggIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMkYzQSAgMERBODMwQTAgICBBRERJVSBBMSwgWkVSTywgMzQ5Ng0KQkZEMDJGM0MgICAgICAwREE4ICAgTU9WRSBUNSwgVDANCkJGRDAyRjNFICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDJGNDAgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAyRjQyICAgICAgMEMwMCAgIE5PUA0KMzQ5NzogICAgICAgICAgICAgICAgDQozNDk4OiAgICAgICAgICAgICAgICAJCQljb25maWdBU1NFUlQoIHB4VENCLT51eE11dGV4ZXNIZWxkICk7DQpCRkQwMkY0NCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMkY0OCAgMDA0NEZDNDIgICBMVyBWMCwgNjgoVjApDQpCRkQwMkY0QyAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMkY2Mg0KQkZEMDJGNTAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAyRjUyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAyRjU0ICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwMkY1NiAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDAyRjU4ICAwREFBMzBBMCAgIEFERElVIEExLCBaRVJPLCAzNDk4DQpCRkQwMkY1QSAgICAgIDBEQUEgICBNT1ZFIFQ1LCBUMg0KQkZEMDJGNUMgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMkY1RSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDJGNjAgICAgICAwQzAwICAgTk9QDQozNDk5OiAgICAgICAgICAgICAgICAJCQkoIHB4VENCLT51eE11dGV4ZXNIZWxkICktLTsNCkJGRDAyRjYyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRjY2ICAwMDQ0RkM0MiAgIExXIFYwLCA2OChWMCkNCkJGRDAyRjZBICAgICAgNkRBRSAgIEFERElVIFYxLCBWMCwgLTENCkJGRDAyRjZDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRjcwICAwMDQ0Rjg2MiAgIFNXIFYxLCA2OChWMCkNCjM1MDA6ICAgICAgICAgICAgICAgIA0KMzUwMTogICAgICAgICAgICAgICAgCQkJLyogSGFzIHRoZSBob2xkZXIgb2YgdGhlIG11dGV4IGluaGVyaXRlZCB0aGUgcHJpb3JpdHkgb2YgYW5vdGhlcg0KMzUwMjogICAgICAgICAgICAgICAgCQkJdGFzaz8gKi8NCjM1MDM6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFRDQi0+dXhQcmlvcml0eSAhPSBweFRDQi0+dXhCYXNlUHJpb3JpdHkgKQ0KQkZEMDJGNzQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDJGNzggICAgICA2OUFCICAgTFcgVjEsIDQ0KFYwKQ0KQkZEMDJGN0EgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDJGN0UgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQ0KQkZEMDJGODIgIDAwNUE5NDQzICAgQkVRIFYxLCBWMCwgMHhCRkQwMzAzQQ0KQkZEMDJGODQgIDBDMDAwMDVBICAgU0xMIFYwLCBLMCwgMQ0KQkZEMDJGODYgICAgICAwQzAwICAgTk9QDQozNTA0OiAgICAgICAgICAgICAgICAJCQl7DQozNTA1OiAgICAgICAgICAgICAgICAJCQkJLyogT25seSBkaXNpbmhlcml0IGlmIG5vIG90aGVyIG11dGV4ZXMgYXJlIGhlbGQuICovDQozNTA2OiAgICAgICAgICAgICAgICAJCQkJaWYoIHB4VENCLT51eE11dGV4ZXNIZWxkID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAyRjg4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRjhDICAwMDQ0RkM0MiAgIExXIFYwLCA2OChWMCkNCkJGRDAyRjkwICAwMDUzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzMDNBDQozNTA3OiAgICAgICAgICAgICAgICAJCQkJew0KMzUwODogICAgICAgICAgICAgICAgCQkJCQkvKiBBIHRhc2sgY2FuIG9ubHkgaGF2ZSBhbiBpbmhlcml0ZWQgcHJpb3JpdHkgaWYgaXQgaG9sZHMNCjM1MDk6ICAgICAgICAgICAgICAgIAkJCQkJdGhlIG11dGV4LiAgSWYgdGhlIG11dGV4IGlzIGhlbGQgYnkgYSB0YXNrIHRoZW4gaXQgY2Fubm90IGJlDQozNTEwOiAgICAgICAgICAgICAgICAJCQkJCWdpdmVuIGZyb20gYW4gaW50ZXJydXB0LCBhbmQgaWYgYSBtdXRleCBpcyBnaXZlbiBieSB0aGUNCjM1MTE6ICAgICAgICAgICAgICAgIAkJCQkJaG9sZGluZwl0YXNrIHRoZW4gaXQgbXVzdCBiZSB0aGUgcnVubmluZyBzdGF0ZSB0YXNrLiAgUmVtb3ZlDQozNTEyOiAgICAgICAgICAgICAgICAJCQkJCXRoZQlob2xkaW5nIHRhc2sgZnJvbSB0aGUgcmVhZHkJbGlzdC4gKi8NCjM1MTM6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHV4TGlzdFJlbW92ZSggJiggcHhUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAyRjk0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRjk4ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDJGOUEgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAyRjlDICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMkY5RSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMkZBMCAgICAgIDBDMDAgICBOT1ANCkJGRDAyRkEyICAwMDFBNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyRkRBDQozNTE0OiAgICAgICAgICAgICAgICAJCQkJCXsNCjM1MTU6ICAgICAgICAgICAgICAgIAkJCQkJCXRhc2tSRVNFVF9SRUFEWV9QUklPUklUWSggcHhUQ0ItPnV4UHJpb3JpdHkgKTsNCkJGRDAyRkE2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRkFBICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAyRkFDICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAyRkFFICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAyRkIwICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQ0KQkZEMDJGQjIgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAyRkI0ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAyRkI2ICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwMkZCQSAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDAyRkJDICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDJGQkUgIDAwMEM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJGREENCkJGRDAyRkMyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRkM2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAyRkM4ICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwMkZDQSAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjENCkJGRDAyRkNDICA0NDFBMTAxMCAgIEFEREkgWkVSTywgUzAsIDE3NDM0DQpCRkQwMkZDRSAgICAgIDQ0MUEgICBOT1QxNiBWMSwgVjANCkJGRDAyRkQwICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApDQpCRkQwMkZENCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDAyRkQ2ICA4MDQwRjg1QyAgIFNXIFYwLCAtMzI3MDQoR1ApDQozNTE2OiAgICAgICAgICAgICAgICAJCQkJCX0NCjM1MTc6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMzUxODogICAgICAgICAgICAgICAgCQkJCQl7DQozNTE5OiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNTIwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjM1MjE6ICAgICAgICAgICAgICAgIA0KMzUyMjogICAgICAgICAgICAgICAgCQkJCQkvKiBEaXNpbmhlcml0IHRoZSBwcmlvcml0eSBiZWZvcmUgYWRkaW5nIHRoZSB0YXNrIGludG8gdGhlDQozNTIzOiAgICAgICAgICAgICAgICAJCQkJCW5ldwlyZWFkeSBsaXN0LiAqLw0KMzUyNDogICAgICAgICAgICAgICAgCQkJCQl0cmFjZVRBU0tfUFJJT1JJVFlfRElTSU5IRVJJVCggcHhUQ0IsIHB4VENCLT51eEJhc2VQcmlvcml0eSApOw0KMzUyNTogICAgICAgICAgICAgICAgCQkJCQlweFRDQi0+dXhQcmlvcml0eSA9IHB4VENCLT51eEJhc2VQcmlvcml0eTsNCkJGRDAyRkRBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRkRFICAwMDQwRkM2MiAgIExXIFYxLCA2NChWMCkNCkJGRDAyRkUyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRkU2ICAgICAgRTlBQiAgIFNXIFYxLCA0NChWMCkNCjM1MjY6ICAgICAgICAgICAgICAgIA0KMzUyNzogICAgICAgICAgICAgICAgCQkJCQkvKiBSZXNldCB0aGUgZXZlbnQgbGlzdCBpdGVtIHZhbHVlLiAgSXQgY2Fubm90IGJlIGluIHVzZSBmb3INCjM1Mjg6ICAgICAgICAgICAgICAgIAkJCQkJYW55IG90aGVyIHB1cnBvc2UgaWYgdGhpcyB0YXNrIGlzIHJ1bm5pbmcsIGFuZCBpdCBtdXN0IGJlDQozNTI5OiAgICAgICAgICAgICAgICAJCQkJCXJ1bm5pbmcgdG8gZ2l2ZSBiYWNrIHRoZSBtdXRleC4gKi8NCjM1MzA6ICAgICAgICAgICAgICAgIAkJCQkJbGlzdFNFVF9MSVNUX0lURU1fVkFMVUUoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApLCAoIFRpY2tUeXBlX3QgKSBjb25maWdNQVhfUFJJT1JJVElFUyAtICggVGlja1R5cGVfdCApIHB4VENCLT51eFByaW9yaXR5ICk7IC8qbGludCAhZTk2MSBNSVNSQSBleGNlcHRpb24gYXMgdGhlIGNhc3RzIGFyZSBvbmx5IHJlZHVuZGFudCBmb3Igc29tZSBwb3J0cy4gKi8NCkJGRDAyRkU4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRkVDICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAyRkVFICAgICAgRUQ4NSAgIExJIFYxLCA1DQpCRkQwMkZGMCAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjANCkJGRDAyRkYyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyRkY2ICAgICAgRTlBNiAgIFNXIFYxLCAyNChWMCkNCjM1MzE6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFRDQiApOw0KQkZEMDJGRjggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDJGRkMgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDJGRkUgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAzMDAwICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQ0KQkZEMDMwMDIgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkNCkJGRDAzMDA0ICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApDQpCRkQwMzAwOCAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQ0KQkZEMDMwMEEgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCkJGRDAzMDBFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAzMDEyICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAzMDE0ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAzMDE2ICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAzMDE4ICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQ0KQkZEMDMwMUEgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAzMDFDICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAzMDFFICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwMzAyMiAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjANCkJGRDAzMDI0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAzMDI4ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDMwMkEgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDAzMDJDICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMzAyRSAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwMzAzMCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDAzMDMyICAgICAgMEMwMCAgIE5PUA0KMzUzMjogICAgICAgICAgICAgICAgDQozNTMzOiAgICAgICAgICAgICAgICAJCQkJCS8qIFJldHVybiB0cnVlIHRvIGluZGljYXRlIHRoYXQgYSBjb250ZXh0IHN3aXRjaCBpcyByZXF1aXJlZC4NCjM1MzQ6ICAgICAgICAgICAgICAgIAkJCQkJVGhpcyBpcyBvbmx5IGFjdHVhbGx5IHJlcXVpcmVkIGluIHRoZSBjb3JuZXIgY2FzZSB3aGVyZWJ5DQozNTM1OiAgICAgICAgICAgICAgICAJCQkJCW11bHRpcGxlIG11dGV4ZXMgd2VyZSBoZWxkIGFuZCB0aGUgbXV0ZXhlcyB3ZXJlIGdpdmVuIGJhY2sNCjM1MzY6ICAgICAgICAgICAgICAgIAkJCQkJaW4gYW4gb3JkZXIgZGlmZmVyZW50IHRvIHRoYXQgaW4gd2hpY2ggdGhleSB3ZXJlIHRha2VuLg0KMzUzNzogICAgICAgICAgICAgICAgCQkJCQlJZiBhIGNvbnRleHQgc3dpdGNoIGRpZCBub3Qgb2NjdXIgd2hlbiB0aGUgZmlyc3QgbXV0ZXggd2FzDQozNTM4OiAgICAgICAgICAgICAgICAJCQkJCXJldHVybmVkLCBldmVuIGlmIGEgdGFzayB3YXMgd2FpdGluZyBvbiBpdCwgdGhlbiBhIGNvbnRleHQNCjM1Mzk6ICAgICAgICAgICAgICAgIAkJCQkJc3dpdGNoIHNob3VsZCBvY2N1ciB3aGVuIHRoZSBsYXN0IG11dGV4IGlzIHJldHVybmVkIHdoZXRoZXINCjM1NDA6ICAgICAgICAgICAgICAgIAkJCQkJYSB0YXNrIGlzIHdhaXRpbmcgb24gaXQgb3Igbm90LiAqLw0KMzU0MTogICAgICAgICAgICAgICAgCQkJCQl4UmV0dXJuID0gcGRUUlVFOw0KQkZEMDMwMzQgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAzMDM2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjM1NDI6ICAgICAgICAgICAgICAgIAkJCQl9DQozNTQzOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMzU0NDogICAgICAgICAgICAgICAgCQkJCXsNCjM1NDU6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzU0NjogICAgICAgICAgICAgICAgCQkJCX0NCjM1NDc6ICAgICAgICAgICAgICAgIAkJCX0NCjM1NDg6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjM1NDk6ICAgICAgICAgICAgICAgIAkJCXsNCjM1NTA6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNTUxOiAgICAgICAgICAgICAgICAJCQl9DQozNTUyOiAgICAgICAgICAgICAgICAJCX0NCjM1NTM6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzU1NDogICAgICAgICAgICAgICAgCQl7DQozNTU1OiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNTU2OiAgICAgICAgICAgICAgICAJCX0NCjM1NTc6ICAgICAgICAgICAgICAgIA0KMzU1ODogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDAzMDNBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjM1NTk6ICAgICAgICAgICAgICAgIAl9DQpCRkQwMzAzRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDMwNDAgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDMwNDIgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDMwNDQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDMwNDYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDMwNDggICAgICAwQzAwICAgTk9QDQozNTYwOiAgICAgICAgICAgICAgICANCjM1NjE6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfTVVURVhFUyAqLw0KMzU2MjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozNTYzOiAgICAgICAgICAgICAgICANCjM1NjQ6ICAgICAgICAgICAgICAgICNpZiAoIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiA9PSAxICkNCjM1NjU6ICAgICAgICAgICAgICAgIA0KMzU2NjogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICkNCjM1Njc6ICAgICAgICAgICAgICAgIAl7DQpCRkQwNjc3MCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDY3NzIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDY3NzQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDY3NzYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjM1Njg6ICAgICAgICAgICAgICAgIAkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KQkZEMDY3NzggIDRFMzY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBTdGF0dXMNCkJGRDA2NzdBICAgICAgNEUzNiAgIEFERElVIFMxLCBTMSwgLTUNCkJGRDA2NzdDICAgICAgMEMwMCAgIE5PUA0KQkZEMDY3N0UgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KQkZEMDY3ODIgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDY3ODYgIDAwMDE0MUEyICAgTFVJIFYwLCAweDENCkJGRDA2NzhBICBGQzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xMDI0DQpCRkQwNjc4QyAgNDQ5M0ZDMDAgICBMVyBaRVJPLCAxNzU1NShaRVJPKQ0KQkZEMDY3OEUgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwNjc5MCAgNTA0MDAwNDIgICBTUkwgVjAsIFYwLCAxMA0KQkZEMDY3OTIgIEIwNDI1MDQwICAgT1JJIFYwLCBaRVJPLCAtMjA0MTQNCkJGRDA2Nzk0ICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMw0KQkZEMDY3OTggIDAwMTE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDY3QkUNCkJGRDA2NzlDICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDA2N0EwICBGRkZFNDFBMiAgIExVSSBWMCwgMHhGRkZFDQpCRkQwNjdBMiAgNTA0MkZGRkUgICBMVyBSQSwgMjA1NDYoUzgpDQpCRkQwNjdBNCAgMDNGRjUwNDIgICBPUkkgVjAsIFYwLCAxMDIzDQpCRkQwNjdBOCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA2N0FBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA2N0FFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2N0IyICAwQzAwNTA0MiAgIE9SSSBWMCwgVjAsIDMwNzINCkJGRDA2N0I0ICAgICAgMEMwMCAgIE5PUA0KQkZEMDY3QjYgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA2N0I4ICA0RTQ2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBTdGF0dXMNCkJGRDA2N0JBICAgICAgNEU0NiAgIEFERElVIFMyLCBTMiwgMw0KQkZEMDY3QkMgICAgICAwQzAwICAgTk9QDQozNTY5OiAgICAgICAgICAgICAgICANCjM1NzA6ICAgICAgICAgICAgICAgIAkJaWYoIHhTY2hlZHVsZXJSdW5uaW5nICE9IHBkRkFMU0UgKQ0KQkZEMDY3QkUgIDgwNDRGQzVDICAgTFcgVjAsIC0zMjcwMChHUCkNCkJGRDA2N0MyICAwMDE5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA2N0Y4DQozNTcxOiAgICAgICAgICAgICAgICAJCXsNCjM1NzI6ICAgICAgICAgICAgICAgIAkJCSggcHhDdXJyZW50VENCLT51eENyaXRpY2FsTmVzdGluZyApKys7DQpCRkQwNjdDNiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDY3Q0EgICAgICA2OUFGICAgTFcgVjEsIDYwKFYwKQ0KQkZEMDY3Q0MgICAgICA2REIwICAgQURESVUgVjEsIFYxLCAxDQpCRkQwNjdDRSAgICAgIEU5QUYgICBTVyBWMSwgNjAoVjApDQozNTczOiAgICAgICAgICAgICAgICANCjM1NzQ6ICAgICAgICAgICAgICAgIAkJCS8qIFRoaXMgaXMgbm90IHRoZSBpbnRlcnJ1cHQgc2FmZSB2ZXJzaW9uIG9mIHRoZSBlbnRlciBjcml0aWNhbA0KMzU3NTogICAgICAgICAgICAgICAgCQkJZnVuY3Rpb24gc28JYXNzZXJ0KCkgaWYgaXQgaXMgYmVpbmcgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0DQozNTc2OiAgICAgICAgICAgICAgICAJCQljb250ZXh0LiAgT25seSBBUEkgZnVuY3Rpb25zIHRoYXQgZW5kIGluICJGcm9tSVNSIiBjYW4gYmUgdXNlZCBpbiBhbg0KMzU3NzogICAgICAgICAgICAgICAgCQkJaW50ZXJydXB0LiAgT25seSBhc3NlcnQgaWYgdGhlIGNyaXRpY2FsIG5lc3RpbmcgY291bnQgaXMgMSB0bw0KMzU3ODogICAgICAgICAgICAgICAgCQkJcHJvdGVjdCBhZ2FpbnN0IHJlY3Vyc2l2ZSBjYWxscyBpZiB0aGUgYXNzZXJ0IGZ1bmN0aW9uIGFsc28gdXNlcyBhDQozNTc5OiAgICAgICAgICAgICAgICAJCQljcml0aWNhbCBzZWN0aW9uLiAqLw0KMzU4MDogICAgICAgICAgICAgICAgCQkJaWYoIHB4Q3VycmVudFRDQi0+dXhDcml0aWNhbE5lc3RpbmcgPT0gMSApDQpCRkQwNjdEMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDY3RDQgICAgICA2OUFGICAgTFcgVjEsIDYwKFYwKQ0KQkZEMDY3RDYgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA2N0Q4ICAwMDBFQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDY3RjgNCkJGRDA2N0RBICAwQzAwMDAwRSAgIFNMTCBaRVJPLCBUNiwgMQ0KQkZEMDY3REMgICAgICAwQzAwICAgTk9QDQozNTgxOiAgICAgICAgICAgICAgICAJCQl7DQozNTgyOiAgICAgICAgICAgICAgICAJCQkJcG9ydEFTU0VSVF9JRl9JTl9JU1IoKTsNCkJGRDA2N0RFICA4MDE0RkM1QyAgIExXIFYwLCAtMzI3NDgoR1ApDQpCRkQwNjdFMiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjdGOA0KQkZEMDY3RTYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA2N0U4ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA2N0VBICA5ODEwMzA4MiAgIEFERElVIEEwLCBWMCwgLTI2NjA4DQpCRkQwNjdFQyAgMzBBMDk4MTAgICBTV0MxIEYwLCAxMjQ0OChTMCkNCkJGRDA2N0VFICAwREZFMzBBMCAgIEFERElVIEExLCBaRVJPLCAzNTgyDQpCRkQwNjdGMCAgICAgIDBERkUgICBNT1ZFIFQ3LCBTOA0KQkZEMDY3RjIgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwNjdGNCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDY3RjYgICAgICAwQzAwICAgTk9QDQozNTgzOiAgICAgICAgICAgICAgICAJCQl9DQozNTg0OiAgICAgICAgICAgICAgICANCjM1ODU6ICAgICAgICAgICAgICAgIAkJfQ0KMzU4NjogICAgICAgICAgICAgICAgCQllbHNlDQozNTg3OiAgICAgICAgICAgICAgICAJCXsNCjM1ODg6ICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM1ODk6ICAgICAgICAgICAgICAgIAkJfQ0KMzU5MDogICAgICAgICAgICAgICAgCX0NCkJGRDA2N0Y4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNjdGQSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNjdGQyAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNjdGRSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNjgwMCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNjgwMiAgICAgIDBDMDAgICBOT1ANCjM1OTE6ICAgICAgICAgICAgICAgIA0KMzU5MjogICAgICAgICAgICAgICAgI2VuZGlmIC8qIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAqLw0KMzU5MzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozNTk0OiAgICAgICAgICAgICAgICANCjM1OTU6ICAgICAgICAgICAgICAgICNpZiAoIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiA9PSAxICkNCjM1OTY6ICAgICAgICAgICAgICAgIA0KMzU5NzogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tFeGl0Q3JpdGljYWwoIHZvaWQgKQ0KMzU5ODogICAgICAgICAgICAgICAgCXsNCkJGRDA4MTU0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwODE1NiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwODE1OCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwODE1QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMzU5OTogICAgICAgICAgICAgICAgCQlpZiggeFNjaGVkdWxlclJ1bm5pbmcgIT0gcGRGQUxTRSApDQpCRkQwODE1QyAgODA0NEZDNUMgICBMVyBWMCwgLTMyNzAwKEdQKQ0KQkZEMDgxNjAgIDAwMjI0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDgxQTgNCjM2MDA6ICAgICAgICAgICAgICAgIAkJew0KMzYwMTogICAgICAgICAgICAgICAgCQkJaWYoIHB4Q3VycmVudFRDQi0+dXhDcml0aWNhbE5lc3RpbmcgPiAwVSApDQpCRkQwODE2NCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDgxNjggICAgICA2OTJGICAgTFcgVjAsIDYwKFYwKQ0KQkZEMDgxNkEgIDAwMUQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDgxQTgNCjM2MDI6ICAgICAgICAgICAgICAgIAkJCXsNCjM2MDM6ICAgICAgICAgICAgICAgIAkJCQkoIHB4Q3VycmVudFRDQi0+dXhDcml0aWNhbE5lc3RpbmcgKS0tOw0KQkZEMDgxNkUgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA4MTcyICAgICAgNjlBRiAgIExXIFYxLCA2MChWMCkNCkJGRDA4MTc0ICAgICAgNkRCRSAgIEFERElVIFYxLCBWMSwgLTENCkJGRDA4MTc2ICAgICAgRTlBRiAgIFNXIFYxLCA2MChWMCkNCjM2MDQ6ICAgICAgICAgICAgICAgIA0KMzYwNTogICAgICAgICAgICAgICAgCQkJCWlmKCBweEN1cnJlbnRUQ0ItPnV4Q3JpdGljYWxOZXN0aW5nID09IDBVICkNCkJGRDA4MTc4ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwODE3QyAgICAgIDY5MkYgICBMVyBWMCwgNjAoVjApDQpCRkQwODE3RSAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwODFBOA0KMzYwNjogICAgICAgICAgICAgICAgCQkJCXsNCjM2MDc6ICAgICAgICAgICAgICAgIAkJCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQpCRkQwODE4MiAgNEUzNjc3RTggICBKQUxTIHVsUG9ydEdldENQMFN0YXR1cw0KQkZEMDgxODQgICAgICA0RTM2ICAgQURESVUgUzEsIFMxLCAtNQ0KQkZEMDgxODYgICAgICAwQzAwICAgTk9QDQpCRkQwODE4OCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwODE4QyAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwODE5MCAgRkZGRTQxQTIgICBMVUkgVjAsIDB4RkZGRQ0KQkZEMDgxOTIgIDUwNDJGRkZFICAgTFcgUkEsIDIwNTQ2KFM4KQ0KQkZEMDgxOTQgIDAzRkY1MDQyICAgT1JJIFYwLCBWMCwgMTAyMw0KQkZEMDgxOTggICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwODE5QSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwODE5RSAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpDQpCRkQwODFBMiAgNEU0Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwU3RhdHVzDQpCRkQwODFBNCAgICAgIDRFNDYgICBBRERJVSBTMiwgUzIsIDMNCkJGRDA4MUE2ICAgICAgMEMwMCAgIE5PUA0KMzYwODogICAgICAgICAgICAgICAgCQkJCX0NCjM2MDk6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQozNjEwOiAgICAgICAgICAgICAgICAJCQkJew0KMzYxMTogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozNjEyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzYxMzogICAgICAgICAgICAgICAgCQkJfQ0KMzYxNDogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMzYxNTogICAgICAgICAgICAgICAgCQkJew0KMzYxNjogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM2MTc6ICAgICAgICAgICAgICAgIAkJCX0NCjM2MTg6ICAgICAgICAgICAgICAgIAkJfQ0KMzYxOTogICAgICAgICAgICAgICAgCQllbHNlDQozNjIwOiAgICAgICAgICAgICAgICAJCXsNCjM2MjE6ICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM2MjI6ICAgICAgICAgICAgICAgIAkJfQ0KMzYyMzogICAgICAgICAgICAgICAgCX0NCkJGRDA4MUE4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwODFBQSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwODFBQyAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwODFBRSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwODFCMCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwODFCMiAgICAgIDBDMDAgICBOT1ANCjM2MjQ6ICAgICAgICAgICAgICAgIA0KMzYyNTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIHBvcnRDUklUSUNBTF9ORVNUSU5HX0lOX1RDQiAqLw0KMzYyNjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozNjI3OiAgICAgICAgICAgICAgICANCjM2Mjg6ICAgICAgICAgICAgICAgICNpZiAoICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9TVEFUU19GT1JNQVRUSU5HX0ZVTkNUSU9OUyA+IDAgKSApDQozNjI5OiAgICAgICAgICAgICAgICANCjM2MzA6ICAgICAgICAgICAgICAgIAlzdGF0aWMgY2hhciAqcHJ2V3JpdGVOYW1lVG9CdWZmZXIoIGNoYXIgKnBjQnVmZmVyLCBjb25zdCBjaGFyICpwY1Rhc2tOYW1lICkNCjM2MzE6ICAgICAgICAgICAgICAgIAl7DQozNjMyOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4Ow0KMzYzMzogICAgICAgICAgICAgICAgDQozNjM0OiAgICAgICAgICAgICAgICAJCS8qIFN0YXJ0IGJ5IGNvcHlpbmcgdGhlIGVudGlyZSBzdHJpbmcuICovDQozNjM1OiAgICAgICAgICAgICAgICAJCXN0cmNweSggcGNCdWZmZXIsIHBjVGFza05hbWUgKTsNCjM2MzY6ICAgICAgICAgICAgICAgIA0KMzYzNzogICAgICAgICAgICAgICAgCQkvKiBQYWQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdpdGggc3BhY2VzIHRvIGVuc3VyZSBjb2x1bW5zIGxpbmUgdXAgd2hlbg0KMzYzODogICAgICAgICAgICAgICAgCQlwcmludGVkIG91dC4gKi8NCjM2Mzk6ICAgICAgICAgICAgICAgIAkJZm9yKCB4ID0gc3RybGVuKCBwY0J1ZmZlciApOyB4IDwgKCBjb25maWdNQVhfVEFTS19OQU1FX0xFTiAtIDEgKTsgeCsrICkNCjM2NDA6ICAgICAgICAgICAgICAgIAkJew0KMzY0MTogICAgICAgICAgICAgICAgCQkJcGNCdWZmZXJbIHggXSA9ICcgJzsNCjM2NDI6ICAgICAgICAgICAgICAgIAkJfQ0KMzY0MzogICAgICAgICAgICAgICAgDQozNjQ0OiAgICAgICAgICAgICAgICAJCS8qIFRlcm1pbmF0ZS4gKi8NCjM2NDU6ICAgICAgICAgICAgICAgIAkJcGNCdWZmZXJbIHggXSA9IDB4MDA7DQozNjQ2OiAgICAgICAgICAgICAgICANCjM2NDc6ICAgICAgICAgICAgICAgIAkJLyogUmV0dXJuIHRoZSBuZXcgZW5kIG9mIHN0cmluZy4gKi8NCjM2NDg6ICAgICAgICAgICAgICAgIAkJcmV0dXJuICYoIHBjQnVmZmVyWyB4IF0gKTsNCjM2NDk6ICAgICAgICAgICAgICAgIAl9DQozNjUwOiAgICAgICAgICAgICAgICANCjM2NTE6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgJiYgKCBjb25maWdVU0VfU1RBVFNfRk9STUFUVElOR19GVU5DVElPTlMgPiAwICkgKi8NCjM2NTI6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzY1MzogICAgICAgICAgICAgICAgDQozNjU0OiAgICAgICAgICAgICAgICAjaWYgKCAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkgJiYgKCBjb25maWdVU0VfU1RBVFNfRk9STUFUVElOR19GVU5DVElPTlMgPiAwICkgKQ0KMzY1NTogICAgICAgICAgICAgICAgDQozNjU2OiAgICAgICAgICAgICAgICAJdm9pZCB2VGFza0xpc3QoIGNoYXIgKiBwY1dyaXRlQnVmZmVyICkNCjM2NTc6ICAgICAgICAgICAgICAgIAl7DQozNjU4OiAgICAgICAgICAgICAgICAJVGFza1N0YXR1c190ICpweFRhc2tTdGF0dXNBcnJheTsNCjM2NTk6ICAgICAgICAgICAgICAgIAl2b2xhdGlsZSBVQmFzZVR5cGVfdCB1eEFycmF5U2l6ZSwgeDsNCjM2NjA6ICAgICAgICAgICAgICAgIAljaGFyIGNTdGF0dXM7DQozNjYxOiAgICAgICAgICAgICAgICANCjM2NjI6ICAgICAgICAgICAgICAgIAkJLyoNCjM2NjM6ICAgICAgICAgICAgICAgIAkJICogUExFQVNFIE5PVEU6DQozNjY0OiAgICAgICAgICAgICAgICAJCSAqDQozNjY1OiAgICAgICAgICAgICAgICAJCSAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlIG9ubHksIGFuZCBpcyB1c2VkIGJ5IG1hbnkNCjM2NjY6ICAgICAgICAgICAgICAgIAkJICogb2YgdGhlIGRlbW8gYXBwbGljYXRpb25zLiAgRG8gbm90IGNvbnNpZGVyIGl0IHRvIGJlIHBhcnQgb2YgdGhlDQozNjY3OiAgICAgICAgICAgICAgICAJCSAqIHNjaGVkdWxlci4NCjM2Njg6ICAgICAgICAgICAgICAgIAkJICoNCjM2Njk6ICAgICAgICAgICAgICAgIAkJICogdlRhc2tMaXN0KCkgY2FsbHMgdXhUYXNrR2V0U3lzdGVtU3RhdGUoKSwgdGhlbiBmb3JtYXRzIHBhcnQgb2YgdGhlDQozNjcwOiAgICAgICAgICAgICAgICAJCSAqIHV4VGFza0dldFN5c3RlbVN0YXRlKCkgb3V0cHV0IGludG8gYSBodW1hbiByZWFkYWJsZSB0YWJsZSB0aGF0DQozNjcxOiAgICAgICAgICAgICAgICAJCSAqIGRpc3BsYXlzIHRhc2sgbmFtZXMsIHN0YXRlcyBhbmQgc3RhY2sgdXNhZ2UuDQozNjcyOiAgICAgICAgICAgICAgICAJCSAqDQozNjczOiAgICAgICAgICAgICAgICAJCSAqIHZUYXNrTGlzdCgpIGhhcyBhIGRlcGVuZGVuY3kgb24gdGhlIHNwcmludGYoKSBDIGxpYnJhcnkgZnVuY3Rpb24gdGhhdA0KMzY3NDogICAgICAgICAgICAgICAgCQkgKiBtaWdodCBibG9hdCB0aGUgY29kZSBzaXplLCB1c2UgYSBsb3Qgb2Ygc3RhY2ssIGFuZCBwcm92aWRlIGRpZmZlcmVudA0KMzY3NTogICAgICAgICAgICAgICAgCQkgKiByZXN1bHRzIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuICBBbiBhbHRlcm5hdGl2ZSwgdGlueSwgdGhpcmQgcGFydHksDQozNjc2OiAgICAgICAgICAgICAgICAJCSAqIGFuZCBsaW1pdGVkIGZ1bmN0aW9uYWxpdHkgaW1wbGVtZW50YXRpb24gb2Ygc3ByaW50ZigpIGlzIHByb3ZpZGVkIGluDQozNjc3OiAgICAgICAgICAgICAgICAJCSAqIG1hbnkgb2YgdGhlIEZyZWVSVE9TL0RlbW8gc3ViLWRpcmVjdG9yaWVzIGluIGEgZmlsZSBjYWxsZWQNCjM2Nzg6ICAgICAgICAgICAgICAgIAkJICogcHJpbnRmLXN0ZGFyZy5jIChub3RlIHByaW50Zi1zdGRhcmcuYyBkb2VzIG5vdCBwcm92aWRlIGEgZnVsbA0KMzY3OTogICAgICAgICAgICAgICAgCQkgKiBzbnByaW50ZigpIGltcGxlbWVudGF0aW9uISkuDQozNjgwOiAgICAgICAgICAgICAgICAJCSAqDQozNjgxOiAgICAgICAgICAgICAgICAJCSAqIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgcHJvZHVjdGlvbiBzeXN0ZW1zIGNhbGwgdXhUYXNrR2V0U3lzdGVtU3RhdGUoKQ0KMzY4MjogICAgICAgICAgICAgICAgCQkgKiBkaXJlY3RseSB0byBnZXQgYWNjZXNzIHRvIHJhdyBzdGF0cyBkYXRhLCByYXRoZXIgdGhhbiBpbmRpcmVjdGx5DQozNjgzOiAgICAgICAgICAgICAgICAJCSAqIHRocm91Z2ggYSBjYWxsIHRvIHZUYXNrTGlzdCgpLg0KMzY4NDogICAgICAgICAgICAgICAgCQkgKi8NCjM2ODU6ICAgICAgICAgICAgICAgIA0KMzY4NjogICAgICAgICAgICAgICAgDQozNjg3OiAgICAgICAgICAgICAgICAJCS8qIE1ha2Ugc3VyZSB0aGUgd3JpdGUgYnVmZmVyIGRvZXMgbm90IGNvbnRhaW4gYSBzdHJpbmcuICovDQozNjg4OiAgICAgICAgICAgICAgICAJCSpwY1dyaXRlQnVmZmVyID0gMHgwMDsNCjM2ODk6ICAgICAgICAgICAgICAgIA0KMzY5MDogICAgICAgICAgICAgICAgCQkvKiBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIG51bWJlciBvZiB0YXNrcyBpbiBjYXNlIGl0IGNoYW5nZXMgd2hpbGUgdGhpcw0KMzY5MTogICAgICAgICAgICAgICAgCQlmdW5jdGlvbiBpcyBleGVjdXRpbmcuICovDQozNjkyOiAgICAgICAgICAgICAgICAJCXV4QXJyYXlTaXplID0gdXhDdXJyZW50TnVtYmVyT2ZUYXNrczsNCjM2OTM6ICAgICAgICAgICAgICAgIA0KMzY5NDogICAgICAgICAgICAgICAgCQkvKiBBbGxvY2F0ZSBhbiBhcnJheSBpbmRleCBmb3IgZWFjaCB0YXNrLiAqLw0KMzY5NTogICAgICAgICAgICAgICAgCQlweFRhc2tTdGF0dXNBcnJheSA9IHB2UG9ydE1hbGxvYyggdXhDdXJyZW50TnVtYmVyT2ZUYXNrcyAqIHNpemVvZiggVGFza1N0YXR1c190ICkgKTsNCjM2OTY6ICAgICAgICAgICAgICAgIA0KMzY5NzogICAgICAgICAgICAgICAgCQlpZiggcHhUYXNrU3RhdHVzQXJyYXkgIT0gTlVMTCApDQozNjk4OiAgICAgICAgICAgICAgICAJCXsNCjM2OTk6ICAgICAgICAgICAgICAgIAkJCS8qIEdlbmVyYXRlIHRoZSAoYmluYXJ5KSBkYXRhLiAqLw0KMzcwMDogICAgICAgICAgICAgICAgCQkJdXhBcnJheVNpemUgPSB1eFRhc2tHZXRTeXN0ZW1TdGF0ZSggcHhUYXNrU3RhdHVzQXJyYXksIHV4QXJyYXlTaXplLCBOVUxMICk7DQozNzAxOiAgICAgICAgICAgICAgICANCjM3MDI6ICAgICAgICAgICAgICAgIAkJCS8qIENyZWF0ZSBhIGh1bWFuIHJlYWRhYmxlIHRhYmxlIGZyb20gdGhlIGJpbmFyeSBkYXRhLiAqLw0KMzcwMzogICAgICAgICAgICAgICAgCQkJZm9yKCB4ID0gMDsgeCA8IHV4QXJyYXlTaXplOyB4KysgKQ0KMzcwNDogICAgICAgICAgICAgICAgCQkJew0KMzcwNTogICAgICAgICAgICAgICAgCQkJCXN3aXRjaCggcHhUYXNrU3RhdHVzQXJyYXlbIHggXS5lQ3VycmVudFN0YXRlICkNCjM3MDY6ICAgICAgICAgICAgICAgIAkJCQl7DQozNzA3OiAgICAgICAgICAgICAgICAJCQkJCWNhc2UgZVJlYWR5OgkJY1N0YXR1cyA9IHRza1JFQURZX0NIQVI7DQozNzA4OiAgICAgICAgICAgICAgICAJCQkJCQkJCQkJYnJlYWs7DQozNzA5OiAgICAgICAgICAgICAgICANCjM3MTA6ICAgICAgICAgICAgICAgIAkJCQkJY2FzZSBlQmxvY2tlZDoJCWNTdGF0dXMgPSB0c2tCTE9DS0VEX0NIQVI7DQozNzExOiAgICAgICAgICAgICAgICAJCQkJCQkJCQkJYnJlYWs7DQozNzEyOiAgICAgICAgICAgICAgICANCjM3MTM6ICAgICAgICAgICAgICAgIAkJCQkJY2FzZSBlU3VzcGVuZGVkOgljU3RhdHVzID0gdHNrU1VTUEVOREVEX0NIQVI7DQozNzE0OiAgICAgICAgICAgICAgICAJCQkJCQkJCQkJYnJlYWs7DQozNzE1OiAgICAgICAgICAgICAgICANCjM3MTY6ICAgICAgICAgICAgICAgIAkJCQkJY2FzZSBlRGVsZXRlZDoJCWNTdGF0dXMgPSB0c2tERUxFVEVEX0NIQVI7DQozNzE3OiAgICAgICAgICAgICAgICAJCQkJCQkJCQkJYnJlYWs7DQozNzE4OiAgICAgICAgICAgICAgICANCjM3MTk6ICAgICAgICAgICAgICAgIAkJCQkJZGVmYXVsdDoJCQkvKiBTaG91bGQgbm90IGdldCBoZXJlLCBidXQgaXQgaXMgaW5jbHVkZWQNCjM3MjA6ICAgICAgICAgICAgICAgIAkJCQkJCQkJCQl0byBwcmV2ZW50IHN0YXRpYyBjaGVja2luZyBlcnJvcnMuICovDQozNzIxOiAgICAgICAgICAgICAgICAJCQkJCQkJCQkJY1N0YXR1cyA9IDB4MDA7DQozNzIyOiAgICAgICAgICAgICAgICAJCQkJCQkJCQkJYnJlYWs7DQozNzIzOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzcyNDogICAgICAgICAgICAgICAgDQozNzI1OiAgICAgICAgICAgICAgICAJCQkJLyogV3JpdGUgdGhlIHRhc2sgbmFtZSB0byB0aGUgc3RyaW5nLCBwYWRkaW5nIHdpdGggc3BhY2VzIHNvIGl0DQozNzI2OiAgICAgICAgICAgICAgICAJCQkJY2FuIGJlIHByaW50ZWQgaW4gdGFidWxhciBmb3JtIG1vcmUgZWFzaWx5LiAqLw0KMzcyNzogICAgICAgICAgICAgICAgCQkJCXBjV3JpdGVCdWZmZXIgPSBwcnZXcml0ZU5hbWVUb0J1ZmZlciggcGNXcml0ZUJ1ZmZlciwgcHhUYXNrU3RhdHVzQXJyYXlbIHggXS5wY1Rhc2tOYW1lICk7DQozNzI4OiAgICAgICAgICAgICAgICANCjM3Mjk6ICAgICAgICAgICAgICAgIAkJCQkvKiBXcml0ZSB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nLiAqLw0KMzczMDogICAgICAgICAgICAgICAgCQkJCXNwcmludGYoIHBjV3JpdGVCdWZmZXIsICJcdCVjXHQldVx0JXVcdCV1XHJcbiIsIGNTdGF0dXMsICggdW5zaWduZWQgaW50ICkgcHhUYXNrU3RhdHVzQXJyYXlbIHggXS51eEN1cnJlbnRQcmlvcml0eSwgKCB1bnNpZ25lZCBpbnQgKSBweFRhc2tTdGF0dXNBcnJheVsgeCBdLnVzU3RhY2tIaWdoV2F0ZXJNYXJrLCAoIHVuc2lnbmVkIGludCApIHB4VGFza1N0YXR1c0FycmF5WyB4IF0ueFRhc2tOdW1iZXIgKTsNCjM3MzE6ICAgICAgICAgICAgICAgIAkJCQlwY1dyaXRlQnVmZmVyICs9IHN0cmxlbiggcGNXcml0ZUJ1ZmZlciApOw0KMzczMjogICAgICAgICAgICAgICAgCQkJfQ0KMzczMzogICAgICAgICAgICAgICAgDQozNzM0OiAgICAgICAgICAgICAgICAJCQkvKiBGcmVlIHRoZSBhcnJheSBhZ2Fpbi4gKi8NCjM3MzU6ICAgICAgICAgICAgICAgIAkJCXZQb3J0RnJlZSggcHhUYXNrU3RhdHVzQXJyYXkgKTsNCjM3MzY6ICAgICAgICAgICAgICAgIAkJfQ0KMzczNzogICAgICAgICAgICAgICAgCQllbHNlDQozNzM4OiAgICAgICAgICAgICAgICAJCXsNCjM3Mzk6ICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM3NDA6ICAgICAgICAgICAgICAgIAkJfQ0KMzc0MTogICAgICAgICAgICAgICAgCX0NCjM3NDI6ICAgICAgICAgICAgICAgIA0KMzc0MzogICAgICAgICAgICAgICAgI2VuZGlmIC8qICggKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApICYmICggY29uZmlnVVNFX1NUQVRTX0ZPUk1BVFRJTkdfRlVOQ1RJT05TID4gMCApICkgKi8NCjM3NDQ6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozNzQ1OiAgICAgICAgICAgICAgICANCjM3NDY6ICAgICAgICAgICAgICAgICNpZiAoICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApICYmICggY29uZmlnVVNFX1NUQVRTX0ZPUk1BVFRJTkdfRlVOQ1RJT05TID4gMCApICkNCjM3NDc6ICAgICAgICAgICAgICAgIA0KMzc0ODogICAgICAgICAgICAgICAgCXZvaWQgdlRhc2tHZXRSdW5UaW1lU3RhdHMoIGNoYXIgKnBjV3JpdGVCdWZmZXIgKQ0KMzc0OTogICAgICAgICAgICAgICAgCXsNCjM3NTA6ICAgICAgICAgICAgICAgIAlUYXNrU3RhdHVzX3QgKnB4VGFza1N0YXR1c0FycmF5Ow0KMzc1MTogICAgICAgICAgICAgICAgCXZvbGF0aWxlIFVCYXNlVHlwZV90IHV4QXJyYXlTaXplLCB4Ow0KMzc1MjogICAgICAgICAgICAgICAgCXVpbnQzMl90IHVsVG90YWxUaW1lLCB1bFN0YXRzQXNQZXJjZW50YWdlOw0KMzc1MzogICAgICAgICAgICAgICAgDQozNzU0OiAgICAgICAgICAgICAgICAJCSNpZiggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZICE9IDEgKQ0KMzc1NTogICAgICAgICAgICAgICAgCQl7DQozNzU2OiAgICAgICAgICAgICAgICAJCQkjZXJyb3IgY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZIG11c3QgYWxzbyBiZSBzZXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oIHRvIHVzZSB2VGFza0dldFJ1blRpbWVTdGF0cygpLg0KMzc1NzogICAgICAgICAgICAgICAgCQl9DQozNzU4OiAgICAgICAgICAgICAgICAJCSNlbmRpZg0KMzc1OTogICAgICAgICAgICAgICAgDQozNzYwOiAgICAgICAgICAgICAgICAJCS8qDQozNzYxOiAgICAgICAgICAgICAgICAJCSAqIFBMRUFTRSBOT1RFOg0KMzc2MjogICAgICAgICAgICAgICAgCQkgKg0KMzc2MzogICAgICAgICAgICAgICAgCQkgKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZSBvbmx5LCBhbmQgaXMgdXNlZCBieSBtYW55DQozNzY0OiAgICAgICAgICAgICAgICAJCSAqIG9mIHRoZSBkZW1vIGFwcGxpY2F0aW9ucy4gIERvIG5vdCBjb25zaWRlciBpdCB0byBiZSBwYXJ0IG9mIHRoZQ0KMzc2NTogICAgICAgICAgICAgICAgCQkgKiBzY2hlZHVsZXIuDQozNzY2OiAgICAgICAgICAgICAgICAJCSAqDQozNzY3OiAgICAgICAgICAgICAgICAJCSAqIHZUYXNrR2V0UnVuVGltZVN0YXRzKCkgY2FsbHMgdXhUYXNrR2V0U3lzdGVtU3RhdGUoKSwgdGhlbiBmb3JtYXRzIHBhcnQNCjM3Njg6ICAgICAgICAgICAgICAgIAkJICogb2YgdGhlIHV4VGFza0dldFN5c3RlbVN0YXRlKCkgb3V0cHV0IGludG8gYSBodW1hbiByZWFkYWJsZSB0YWJsZSB0aGF0DQozNzY5OiAgICAgICAgICAgICAgICAJCSAqIGRpc3BsYXlzIHRoZSBhbW91bnQgb2YgdGltZSBlYWNoIHRhc2sgaGFzIHNwZW50IGluIHRoZSBSdW5uaW5nIHN0YXRlDQozNzcwOiAgICAgICAgICAgICAgICAJCSAqIGluIGJvdGggYWJzb2x1dGUgYW5kIHBlcmNlbnRhZ2UgdGVybXMuDQozNzcxOiAgICAgICAgICAgICAgICAJCSAqDQozNzcyOiAgICAgICAgICAgICAgICAJCSAqIHZUYXNrR2V0UnVuVGltZVN0YXRzKCkgaGFzIGEgZGVwZW5kZW5jeSBvbiB0aGUgc3ByaW50ZigpIEMgbGlicmFyeQ0KMzc3MzogICAgICAgICAgICAgICAgCQkgKiBmdW5jdGlvbiB0aGF0IG1pZ2h0IGJsb2F0IHRoZSBjb2RlIHNpemUsIHVzZSBhIGxvdCBvZiBzdGFjaywgYW5kDQozNzc0OiAgICAgICAgICAgICAgICAJCSAqIHByb3ZpZGUgZGlmZmVyZW50IHJlc3VsdHMgb24gZGlmZmVyZW50IHBsYXRmb3Jtcy4gIEFuIGFsdGVybmF0aXZlLA0KMzc3NTogICAgICAgICAgICAgICAgCQkgKiB0aW55LCB0aGlyZCBwYXJ0eSwgYW5kIGxpbWl0ZWQgZnVuY3Rpb25hbGl0eSBpbXBsZW1lbnRhdGlvbiBvZg0KMzc3NjogICAgICAgICAgICAgICAgCQkgKiBzcHJpbnRmKCkgaXMgcHJvdmlkZWQgaW4gbWFueSBvZiB0aGUgRnJlZVJUT1MvRGVtbyBzdWItZGlyZWN0b3JpZXMgaW4NCjM3Nzc6ICAgICAgICAgICAgICAgIAkJICogYSBmaWxlIGNhbGxlZCBwcmludGYtc3RkYXJnLmMgKG5vdGUgcHJpbnRmLXN0ZGFyZy5jIGRvZXMgbm90IHByb3ZpZGUNCjM3Nzg6ICAgICAgICAgICAgICAgIAkJICogYSBmdWxsIHNucHJpbnRmKCkgaW1wbGVtZW50YXRpb24hKS4NCjM3Nzk6ICAgICAgICAgICAgICAgIAkJICoNCjM3ODA6ICAgICAgICAgICAgICAgIAkJICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBwcm9kdWN0aW9uIHN5c3RlbXMgY2FsbCB1eFRhc2tHZXRTeXN0ZW1TdGF0ZSgpDQozNzgxOiAgICAgICAgICAgICAgICAJCSAqIGRpcmVjdGx5IHRvIGdldCBhY2Nlc3MgdG8gcmF3IHN0YXRzIGRhdGEsIHJhdGhlciB0aGFuIGluZGlyZWN0bHkNCjM3ODI6ICAgICAgICAgICAgICAgIAkJICogdGhyb3VnaCBhIGNhbGwgdG8gdlRhc2tHZXRSdW5UaW1lU3RhdHMoKS4NCjM3ODM6ICAgICAgICAgICAgICAgIAkJICovDQozNzg0OiAgICAgICAgICAgICAgICANCjM3ODU6ICAgICAgICAgICAgICAgIAkJLyogTWFrZSBzdXJlIHRoZSB3cml0ZSBidWZmZXIgZG9lcyBub3QgY29udGFpbiBhIHN0cmluZy4gKi8NCjM3ODY6ICAgICAgICAgICAgICAgIAkJKnBjV3JpdGVCdWZmZXIgPSAweDAwOw0KMzc4NzogICAgICAgICAgICAgICAgDQozNzg4OiAgICAgICAgICAgICAgICAJCS8qIFRha2UgYSBzbmFwc2hvdCBvZiB0aGUgbnVtYmVyIG9mIHRhc2tzIGluIGNhc2UgaXQgY2hhbmdlcyB3aGlsZSB0aGlzDQozNzg5OiAgICAgICAgICAgICAgICAJCWZ1bmN0aW9uIGlzIGV4ZWN1dGluZy4gKi8NCjM3OTA6ICAgICAgICAgICAgICAgIAkJdXhBcnJheVNpemUgPSB1eEN1cnJlbnROdW1iZXJPZlRhc2tzOw0KMzc5MTogICAgICAgICAgICAgICAgDQozNzkyOiAgICAgICAgICAgICAgICAJCS8qIEFsbG9jYXRlIGFuIGFycmF5IGluZGV4IGZvciBlYWNoIHRhc2suICovDQozNzkzOiAgICAgICAgICAgICAgICAJCXB4VGFza1N0YXR1c0FycmF5ID0gcHZQb3J0TWFsbG9jKCB1eEN1cnJlbnROdW1iZXJPZlRhc2tzICogc2l6ZW9mKCBUYXNrU3RhdHVzX3QgKSApOw0KMzc5NDogICAgICAgICAgICAgICAgDQozNzk1OiAgICAgICAgICAgICAgICAJCWlmKCBweFRhc2tTdGF0dXNBcnJheSAhPSBOVUxMICkNCjM3OTY6ICAgICAgICAgICAgICAgIAkJew0KMzc5NzogICAgICAgICAgICAgICAgCQkJLyogR2VuZXJhdGUgdGhlIChiaW5hcnkpIGRhdGEuICovDQozNzk4OiAgICAgICAgICAgICAgICAJCQl1eEFycmF5U2l6ZSA9IHV4VGFza0dldFN5c3RlbVN0YXRlKCBweFRhc2tTdGF0dXNBcnJheSwgdXhBcnJheVNpemUsICZ1bFRvdGFsVGltZSApOw0KMzc5OTogICAgICAgICAgICAgICAgDQozODAwOiAgICAgICAgICAgICAgICAJCQkvKiBGb3IgcGVyY2VudGFnZSBjYWxjdWxhdGlvbnMuICovDQozODAxOiAgICAgICAgICAgICAgICAJCQl1bFRvdGFsVGltZSAvPSAxMDBVTDsNCjM4MDI6ICAgICAgICAgICAgICAgIA0KMzgwMzogICAgICAgICAgICAgICAgCQkJLyogQXZvaWQgZGl2aWRlIGJ5IHplcm8gZXJyb3JzLiAqLw0KMzgwNDogICAgICAgICAgICAgICAgCQkJaWYoIHVsVG90YWxUaW1lID4gMCApDQozODA1OiAgICAgICAgICAgICAgICAJCQl7DQozODA2OiAgICAgICAgICAgICAgICAJCQkJLyogQ3JlYXRlIGEgaHVtYW4gcmVhZGFibGUgdGFibGUgZnJvbSB0aGUgYmluYXJ5IGRhdGEuICovDQozODA3OiAgICAgICAgICAgICAgICAJCQkJZm9yKCB4ID0gMDsgeCA8IHV4QXJyYXlTaXplOyB4KysgKQ0KMzgwODogICAgICAgICAgICAgICAgCQkJCXsNCjM4MDk6ICAgICAgICAgICAgICAgIAkJCQkJLyogV2hhdCBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBydW4gdGltZSBoYXMgdGhlIHRhc2sgdXNlZD8NCjM4MTA6ICAgICAgICAgICAgICAgIAkJCQkJVGhpcyB3aWxsIGFsd2F5cyBiZSByb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4NCjM4MTE6ICAgICAgICAgICAgICAgIAkJCQkJdWxUb3RhbFJ1blRpbWVEaXYxMDAgaGFzIGFscmVhZHkgYmVlbiBkaXZpZGVkIGJ5IDEwMC4gKi8NCjM4MTI6ICAgICAgICAgICAgICAgIAkJCQkJdWxTdGF0c0FzUGVyY2VudGFnZSA9IHB4VGFza1N0YXR1c0FycmF5WyB4IF0udWxSdW5UaW1lQ291bnRlciAvIHVsVG90YWxUaW1lOw0KMzgxMzogICAgICAgICAgICAgICAgDQozODE0OiAgICAgICAgICAgICAgICAJCQkJCS8qIFdyaXRlIHRoZSB0YXNrIG5hbWUgdG8gdGhlIHN0cmluZywgcGFkZGluZyB3aXRoDQozODE1OiAgICAgICAgICAgICAgICAJCQkJCXNwYWNlcyBzbyBpdCBjYW4gYmUgcHJpbnRlZCBpbiB0YWJ1bGFyIGZvcm0gbW9yZQ0KMzgxNjogICAgICAgICAgICAgICAgCQkJCQllYXNpbHkuICovDQozODE3OiAgICAgICAgICAgICAgICAJCQkJCXBjV3JpdGVCdWZmZXIgPSBwcnZXcml0ZU5hbWVUb0J1ZmZlciggcGNXcml0ZUJ1ZmZlciwgcHhUYXNrU3RhdHVzQXJyYXlbIHggXS5wY1Rhc2tOYW1lICk7DQozODE4OiAgICAgICAgICAgICAgICANCjM4MTk6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHVsU3RhdHNBc1BlcmNlbnRhZ2UgPiAwVUwgKQ0KMzgyMDogICAgICAgICAgICAgICAgCQkJCQl7DQozODIxOiAgICAgICAgICAgICAgICAJCQkJCQkjaWZkZWYgcG9ydExVX1BSSU5URl9TUEVDSUZJRVJfUkVRVUlSRUQNCjM4MjI6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjM4MjM6ICAgICAgICAgICAgICAgIAkJCQkJCQlzcHJpbnRmKCBwY1dyaXRlQnVmZmVyLCAiXHQlbHVcdFx0JWx1JSVcclxuIiwgcHhUYXNrU3RhdHVzQXJyYXlbIHggXS51bFJ1blRpbWVDb3VudGVyLCB1bFN0YXRzQXNQZXJjZW50YWdlICk7DQozODI0OiAgICAgICAgICAgICAgICAJCQkJCQl9DQozODI1OiAgICAgICAgICAgICAgICAJCQkJCQkjZWxzZQ0KMzgyNjogICAgICAgICAgICAgICAgCQkJCQkJew0KMzgyNzogICAgICAgICAgICAgICAgCQkJCQkJCS8qIHNpemVvZiggaW50ICkgPT0gc2l6ZW9mKCBsb25nICkgc28gYSBzbWFsbGVyDQozODI4OiAgICAgICAgICAgICAgICAJCQkJCQkJcHJpbnRmKCkgbGlicmFyeSBjYW4gYmUgdXNlZC4gKi8NCjM4Mjk6ICAgICAgICAgICAgICAgIAkJCQkJCQlzcHJpbnRmKCBwY1dyaXRlQnVmZmVyLCAiXHQldVx0XHQldSUlXHJcbiIsICggdW5zaWduZWQgaW50ICkgcHhUYXNrU3RhdHVzQXJyYXlbIHggXS51bFJ1blRpbWVDb3VudGVyLCAoIHVuc2lnbmVkIGludCApIHVsU3RhdHNBc1BlcmNlbnRhZ2UgKTsNCjM4MzA6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjM4MzE6ICAgICAgICAgICAgICAgIAkJCQkJCSNlbmRpZg0KMzgzMjogICAgICAgICAgICAgICAgCQkJCQl9DQozODMzOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjM4MzQ6ICAgICAgICAgICAgICAgIAkJCQkJew0KMzgzNTogICAgICAgICAgICAgICAgCQkJCQkJLyogSWYgdGhlIHBlcmNlbnRhZ2UgaXMgemVybyBoZXJlIHRoZW4gdGhlIHRhc2sgaGFzDQozODM2OiAgICAgICAgICAgICAgICAJCQkJCQljb25zdW1lZCBsZXNzIHRoYW4gMSUgb2YgdGhlIHRvdGFsIHJ1biB0aW1lLiAqLw0KMzgzNzogICAgICAgICAgICAgICAgCQkJCQkJI2lmZGVmIHBvcnRMVV9QUklOVEZfU1BFQ0lGSUVSX1JFUVVJUkVEDQozODM4OiAgICAgICAgICAgICAgICAJCQkJCQl7DQozODM5OiAgICAgICAgICAgICAgICAJCQkJCQkJc3ByaW50ZiggcGNXcml0ZUJ1ZmZlciwgIlx0JWx1XHRcdDwxJSVcclxuIiwgcHhUYXNrU3RhdHVzQXJyYXlbIHggXS51bFJ1blRpbWVDb3VudGVyICk7DQozODQwOiAgICAgICAgICAgICAgICAJCQkJCQl9DQozODQxOiAgICAgICAgICAgICAgICAJCQkJCQkjZWxzZQ0KMzg0MjogICAgICAgICAgICAgICAgCQkJCQkJew0KMzg0MzogICAgICAgICAgICAgICAgCQkJCQkJCS8qIHNpemVvZiggaW50ICkgPT0gc2l6ZW9mKCBsb25nICkgc28gYSBzbWFsbGVyDQozODQ0OiAgICAgICAgICAgICAgICAJCQkJCQkJcHJpbnRmKCkgbGlicmFyeSBjYW4gYmUgdXNlZC4gKi8NCjM4NDU6ICAgICAgICAgICAgICAgIAkJCQkJCQlzcHJpbnRmKCBwY1dyaXRlQnVmZmVyLCAiXHQldVx0XHQ8MSUlXHJcbiIsICggdW5zaWduZWQgaW50ICkgcHhUYXNrU3RhdHVzQXJyYXlbIHggXS51bFJ1blRpbWVDb3VudGVyICk7DQozODQ2OiAgICAgICAgICAgICAgICAJCQkJCQl9DQozODQ3OiAgICAgICAgICAgICAgICAJCQkJCQkjZW5kaWYNCjM4NDg6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzg0OTogICAgICAgICAgICAgICAgDQozODUwOiAgICAgICAgICAgICAgICAJCQkJCXBjV3JpdGVCdWZmZXIgKz0gc3RybGVuKCBwY1dyaXRlQnVmZmVyICk7DQozODUxOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzg1MjogICAgICAgICAgICAgICAgCQkJfQ0KMzg1MzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMzg1NDogICAgICAgICAgICAgICAgCQkJew0KMzg1NTogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM4NTY6ICAgICAgICAgICAgICAgIAkJCX0NCjM4NTc6ICAgICAgICAgICAgICAgIA0KMzg1ODogICAgICAgICAgICAgICAgCQkJLyogRnJlZSB0aGUgYXJyYXkgYWdhaW4uICovDQozODU5OiAgICAgICAgICAgICAgICAJCQl2UG9ydEZyZWUoIHB4VGFza1N0YXR1c0FycmF5ICk7DQozODYwOiAgICAgICAgICAgICAgICAJCX0NCjM4NjE6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMzg2MjogICAgICAgICAgICAgICAgCQl7DQozODYzOiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozODY0OiAgICAgICAgICAgICAgICAJCX0NCjM4NjU6ICAgICAgICAgICAgICAgIAl9DQozODY2OiAgICAgICAgICAgICAgICANCjM4Njc6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiAoICggY29uZmlnR0VORVJBVEVfUlVOX1RJTUVfU1RBVFMgPT0gMSApICYmICggY29uZmlnVVNFX1NUQVRTX0ZPUk1BVFRJTkdfRlVOQ1RJT05TID4gMCApICkgKi8NCjM4Njg6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzg2OTogICAgICAgICAgICAgICAgDQozODcwOiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHV4VGFza1Jlc2V0RXZlbnRJdGVtVmFsdWUoIHZvaWQgKQ0KMzg3MTogICAgICAgICAgICAgICAgew0KQkZEMDk5MEMgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYNCkJGRDA5OTBFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA5OTEwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQozODcyOiAgICAgICAgICAgICAgICBUaWNrVHlwZV90IHV4UmV0dXJuOw0KMzg3MzogICAgICAgICAgICAgICAgDQozODc0OiAgICAgICAgICAgICAgICAJdXhSZXR1cm4gPSBsaXN0R0VUX0xJU1RfSVRFTV9WQUxVRSggJiggcHhDdXJyZW50VENCLT54RXZlbnRMaXN0SXRlbSApICk7DQpCRkQwOTkxMiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDk5MTYgICAgICA2OTI2ICAgTFcgVjAsIDI0KFYwKQ0KQkZEMDk5MTggIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpDQozODc1OiAgICAgICAgICAgICAgICANCjM4NzY6ICAgICAgICAgICAgICAgIAkvKiBSZXNldCB0aGUgZXZlbnQgbGlzdCBpdGVtIHRvIGl0cyBub3JtYWwgdmFsdWUgLSBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoDQozODc3OiAgICAgICAgICAgICAgICAJcXVldWVzIGFuZCBzZW1hcGhvcmVzLiAqLw0KMzg3ODogICAgICAgICAgICAgICAgCWxpc3RTRVRfTElTVF9JVEVNX1ZBTFVFKCAmKCBweEN1cnJlbnRUQ0ItPnhFdmVudExpc3RJdGVtICksICggKCBUaWNrVHlwZV90ICkgY29uZmlnTUFYX1BSSU9SSVRJRVMgLSAoIFRpY2tUeXBlX3QgKSBweEN1cnJlbnRUQ0ItPnV4UHJpb3JpdHkgKSApOyAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMuICovDQpCRkQwOTkxQyAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDk5MjAgIDgwMzBGQzdDICAgTFcgVjEsIC0zMjcyMChHUCkNCkJGRDA5OTI0ICAgICAgNjlCQiAgIExXIFYxLCA0NChWMSkNCkJGRDA5OTI2ICAgICAgRUUwNSAgIExJIEEwLCA1DQpCRkQwOTkyOCAgICAgIDA1QjkgICBTVUJVIFYxLCBBMCwgVjENCkJGRDA5OTJBICAgICAgRTlBNiAgIFNXIFYxLCAyNChWMCkNCjM4Nzk6ICAgICAgICAgICAgICAgIA0KMzg4MDogICAgICAgICAgICAgICAgCXJldHVybiB1eFJldHVybjsNCkJGRDA5OTJDICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KMzg4MTogICAgICAgICAgICAgICAgfQ0KQkZEMDk5MzAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5OTMyICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDA5OTM0ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA5OTM2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5OTM4ICAgICAgMEMwMCAgIE5PUA0KMzg4MjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozODgzOiAgICAgICAgICAgICAgICANCjM4ODQ6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KMzg4NTogICAgICAgICAgICAgICAgDQozODg2OiAgICAgICAgICAgICAgICAJdm9pZCAqcHZUYXNrSW5jcmVtZW50TXV0ZXhIZWxkQ291bnQoIHZvaWQgKQ0KMzg4NzogICAgICAgICAgICAgICAgCXsNCkJGRDA5OUMwICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5OUMyICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDk5QzQgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjM4ODg6ICAgICAgICAgICAgICAgIAkJLyogSWYgeFNlbWFwaG9yZUNyZWF0ZU11dGV4KCkgaXMgY2FsbGVkIGJlZm9yZSBhbnkgdGFza3MgaGF2ZSBiZWVuIGNyZWF0ZWQNCjM4ODk6ICAgICAgICAgICAgICAgIAkJdGhlbiBweEN1cnJlbnRUQ0Igd2lsbCBiZSBOVUxMLiAqLw0KMzg5MDogICAgICAgICAgICAgICAgCQlpZiggcHhDdXJyZW50VENCICE9IE5VTEwgKQ0KQkZEMDk5QzYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDA5OUNBICAwMDA3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5OURDDQozODkxOiAgICAgICAgICAgICAgICAJCXsNCjM4OTI6ICAgICAgICAgICAgICAgIAkJCSggcHhDdXJyZW50VENCLT51eE11dGV4ZXNIZWxkICkrKzsNCkJGRDA5OUNFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwOTlEMiAgMDA0NEZDNjIgICBMVyBWMSwgNjgoVjApDQpCRkQwOTlENiAgICAgIDZEQjAgICBBRERJVSBWMSwgVjEsIDENCkJGRDA5OUQ4ICAwMDQ0Rjg2MiAgIFNXIFYxLCA2OChWMCkNCjM4OTM6ICAgICAgICAgICAgICAgIAkJfQ0KMzg5NDogICAgICAgICAgICAgICAgDQozODk1OiAgICAgICAgICAgICAgICAJCXJldHVybiBweEN1cnJlbnRUQ0I7DQpCRkQwOTlEQyAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KMzg5NjogICAgICAgICAgICAgICAgCX0NCkJGRDA5OUUwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTlFMiAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA5OUU0ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KQkZEMDk5RTYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDk5RTggICAgICAwQzAwICAgTk9QDQozODk3OiAgICAgICAgICAgICAgICANCjM4OTg6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfTVVURVhFUyAqLw0KMzg5OTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozOTAwOiAgICAgICAgICAgICAgICANCjM5MDE6ICAgICAgICAgICAgICAgICNpZiggY29uZmlnVVNFX1RBU0tfTk9USUZJQ0FUSU9OUyA9PSAxICkNCjM5MDI6ICAgICAgICAgICAgICAgIA0KMzkwMzogICAgICAgICAgICAgICAgCXVpbnQzMl90IHVsVGFza05vdGlmeVRha2UoIEJhc2VUeXBlX3QgeENsZWFyQ291bnRPbkV4aXQsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjM5MDQ6ICAgICAgICAgICAgICAgIAl7DQpCRkQwMzlBQyAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MA0KQkZEMDM5QUUgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQ0KQkZEMDM5QjAgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQ0KQkZEMDM5QjIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDAzOUI0ICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkNCkJGRDAzOUI4ICAwMDJDRjhCRSAgIFNXIEExLCA0NChTOCkNCjM5MDU6ICAgICAgICAgICAgICAgIAlUaWNrVHlwZV90IHhUaW1lVG9XYWtlOw0KMzkwNjogICAgICAgICAgICAgICAgCXVpbnQzMl90IHVsUmV0dXJuOw0KMzkwNzogICAgICAgICAgICAgICAgDQozOTA4OiAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDM5QkMgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDAzOUJFICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDM5QzAgICAgICAwQzAwICAgTk9QDQozOTA5OiAgICAgICAgICAgICAgICAJCXsNCjM5MTA6ICAgICAgICAgICAgICAgIAkJCS8qIE9ubHkgYmxvY2sgaWYgdGhlIG5vdGlmaWNhdGlvbiBjb3VudCBpcyBub3QgYWxyZWFkeSBub24temVyby4gKi8NCjM5MTE6ICAgICAgICAgICAgICAgIAkJCWlmKCBweEN1cnJlbnRUQ0ItPnVsTm90aWZpZWRWYWx1ZSA9PSAwVUwgKQ0KQkZEMDM5QzIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAzOUM2ICAwMDQ4RkM0MiAgIExXIFYwLCA3MihWMCkNCkJGRDAzOUNBICAwMDRENDBBMiAgIEJORVpDIFYwLCAweEJGRDAzQTY4DQozOTEyOiAgICAgICAgICAgICAgICAJCQl7DQozOTEzOiAgICAgICAgICAgICAgICAJCQkJLyogTWFyayB0aGlzIHRhc2sgYXMgd2FpdGluZyBmb3IgYSBub3RpZmljYXRpb24uICovDQozOTE0OiAgICAgICAgICAgICAgICAJCQkJcHhDdXJyZW50VENCLT5lTm90aWZ5U3RhdGUgPSBlV2FpdGluZ05vdGlmaWNhdGlvbjsNCkJGRDAzOUNFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMzlEMiAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDM5RDQgIDAwNENGODYyICAgU1cgVjEsIDc2KFYwKQ0KMzkxNTogICAgICAgICAgICAgICAgDQozOTE2OiAgICAgICAgICAgICAgICAJCQkJaWYoIHhUaWNrc1RvV2FpdCA+ICggVGlja1R5cGVfdCApIDAgKQ0KQkZEMDM5RDggIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQ0KQkZEMDM5REMgIDAwNDQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNBNjgNCjM5MTc6ICAgICAgICAgICAgICAgIAkJCQl7DQozOTE4OiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSB0YXNrIGlzIGdvaW5nIHRvIGJsb2NrLiAgRmlyc3QgaXQgbXVzdCBiZSByZW1vdmVkDQozOTE5OiAgICAgICAgICAgICAgICAJCQkJCWZyb20gdGhlIHJlYWR5IGxpc3QuICovDQozOTIwOiAgICAgICAgICAgICAgICAJCQkJCWlmKCB1eExpc3RSZW1vdmUoICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICkgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDM5RTAgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAzOUU0ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDM5RTYgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzOUU4ICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMzlFQSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMzlFQyAgICAgIDBDMDAgICBOT1ANCkJGRDAzOUVFICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAzQTBBDQozOTIxOiAgICAgICAgICAgICAgICAJCQkJCXsNCjM5MjI6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSBjdXJyZW50IHRhc2sgbXVzdCBiZSBpbiBhIHJlYWR5IGxpc3QsIHNvIHRoZXJlIGlzDQozOTIzOiAgICAgICAgICAgICAgICAJCQkJCQlubyBuZWVkIHRvIGNoZWNrLCBhbmQgdGhlIHBvcnQgcmVzZXQgbWFjcm8gY2FuIGJlIGNhbGxlZA0KMzkyNDogICAgICAgICAgICAgICAgCQkJCQkJZGlyZWN0bHkuICovDQozOTI1OiAgICAgICAgICAgICAgICAJCQkJCQlwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSwgdXhUb3BSZWFkeVByaW9yaXR5ICk7DQpCRkQwMzlGMiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDM5RjYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDM5RjggICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAzOUZBICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQ0KQkZEMDM5RkMgIDQ0MUExMDEwICAgQURESSBaRVJPLCBTMCwgMTc0MzQNCkJGRDAzOUZFICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMA0KQkZEMDNBMDAgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDAzQTA0ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDNBMDYgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCjM5MjY6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzkyNzogICAgICAgICAgICAgICAgCQkJCQllbHNlDQozOTI4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjM5Mjk6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM5MzA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzkzMTogICAgICAgICAgICAgICAgDQozOTMyOiAgICAgICAgICAgICAgICAJCQkJCSNpZiAoIElOQ0xVREVfdlRhc2tTdXNwZW5kID09IDEgKQ0KMzkzMzogICAgICAgICAgICAgICAgCQkJCQl7DQozOTM0OiAgICAgICAgICAgICAgICAJCQkJCQlpZiggeFRpY2tzVG9XYWl0ID09IHBvcnRNQVhfREVMQVkgKQ0KQkZEMDNBMEEgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQ0KQkZEMDNBMEUgICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwM0ExMCAgMDAwRUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAzQTMwDQpCRkQwM0ExMiAgMEMwMDAwMEUgICBTTEwgWkVSTywgVDYsIDENCkJGRDAzQTE0ICAgICAgMEMwMCAgIE5PUA0KMzkzNTogICAgICAgICAgICAgICAgCQkJCQkJew0KMzkzNjogICAgICAgICAgICAgICAgCQkJCQkJCS8qIEFkZCB0aGUgdGFzayB0byB0aGUgc3VzcGVuZGVkIHRhc2sgbGlzdCBpbnN0ZWFkDQozOTM3OiAgICAgICAgICAgICAgICAJCQkJCQkJb2YgYSBkZWxheWVkIHRhc2sgbGlzdCB0byBlbnN1cmUgdGhlIHRhc2sgaXMgbm90DQozOTM4OiAgICAgICAgICAgICAgICAJCQkJCQkJd29rZW4gYnkgYSB0aW1pbmcgZXZlbnQuICBJdCB3aWxsIGJsb2NrDQozOTM5OiAgICAgICAgICAgICAgICAJCQkJCQkJaW5kZWZpbml0ZWx5LiAqLw0KMzk0MDogICAgICAgICAgICAgICAgCQkJCQkJCXZMaXN0SW5zZXJ0RW5kKCAmeFN1c3BlbmRlZFRhc2tMaXN0LCAmKCBweEN1cnJlbnRUQ0ItPnhHZW5lcmljTGlzdEl0ZW0gKSApOw0KQkZEMDNBMTYgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAzQTFBICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDNBMUMgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAzQTFFICAzMDgzQkZEMiAgIExEQzEgRjMwLCAxMjQxOShTMikNCkJGRDAzQTIwICA4MEU0MzA4MyAgIEFERElVIEEwLCBWMSwgLTMyNTQwDQpCRkQwM0EyNCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDNBMjYgIDNFNEE3N0U4ICAgSkFMUyB2TGlzdEluc2VydEVuZA0KQkZEMDNBMjggIDBDMDAzRTRBICAgTEggUzIsIDMwNzIoVDIpDQpCRkQwM0EyQSAgICAgIDBDMDAgICBOT1ANCkJGRDAzQTJDICAgICAgQ0MwRCAgIEIgMHhCRkQwM0E0OA0KQkZEMDNBMkUgICAgICAwQzAwICAgTk9QDQozOTQxOiAgICAgICAgICAgICAgICAJCQkJCQl9DQozOTQyOiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQozOTQzOiAgICAgICAgICAgICAgICAJCQkJCQl7DQozOTQ0OiAgICAgICAgICAgICAgICAJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB0YXNrIHNob3VsZCBiZQ0KMzk0NTogICAgICAgICAgICAgICAgCQkJCQkJCXdva2VuIGlmIG5vIG5vdGlmaWNhdGlvbiBldmVudHMgb2NjdXIuICBUaGlzIG1heQ0KMzk0NjogICAgICAgICAgICAgICAgCQkJCQkJCW92ZXJmbG93IGJ1dCB0aGlzIGRvZXNuJ3QgbWF0dGVyLCB0aGUgc2NoZWR1bGVyIHdpbGwNCjM5NDc6ICAgICAgICAgICAgICAgIAkJCQkJCQloYW5kbGUgaXQuICovDQozOTQ4OiAgICAgICAgICAgICAgICAJCQkJCQkJeFRpbWVUb1dha2UgPSB4VGlja0NvdW50ICsgeFRpY2tzVG9XYWl0Ow0KQkZEMDNBMzAgIDgwM0NGQzdDICAgTFcgVjEsIC0zMjcwOChHUCkNCkJGRDAzQTM0ICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAzQTM4ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDNBM0EgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMzk0OTogICAgICAgICAgICAgICAgCQkJCQkJCXBydkFkZEN1cnJlbnRUYXNrVG9EZWxheWVkTGlzdCggeFRpbWVUb1dha2UgKTsNCkJGRDAzQTNFICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkNCkJGRDAzQTQyICAzNzM0NzdFOCAgIEpBTFMgcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0DQpCRkQwM0E0NCAgMEMwMDM3MzQgICBMSFUgVDksIDMwNzIoUzQpDQpCRkQwM0E0NiAgICAgIDBDMDAgICBOT1ANCjM5NTA6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjM5NTE6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMzk1MjogICAgICAgICAgICAgICAgCQkJCQkjZWxzZSAvKiBJTkNMVURFX3ZUYXNrU3VzcGVuZCAqLw0KMzk1MzogICAgICAgICAgICAgICAgCQkJCQl7DQozOTU0OiAgICAgICAgICAgICAgICAJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSB0YXNrIHNob3VsZCBiZQ0KMzk1NTogICAgICAgICAgICAgICAgCQkJCQkJCXdva2VuIGlmIHRoZSBldmVudCBkb2VzIG5vdCBvY2N1ci4gIFRoaXMgbWF5DQozOTU2OiAgICAgICAgICAgICAgICAJCQkJCQkJb3ZlcmZsb3cgYnV0IHRoaXMgZG9lc24ndCBtYXR0ZXIsIHRoZSBzY2hlZHVsZXIgd2lsbA0KMzk1NzogICAgICAgICAgICAgICAgCQkJCQkJCWhhbmRsZSBpdC4gKi8NCjM5NTg6ICAgICAgICAgICAgICAgIAkJCQkJCQl4VGltZVRvV2FrZSA9IHhUaWNrQ291bnQgKyB4VGlja3NUb1dhaXQ7DQozOTU5OiAgICAgICAgICAgICAgICAJCQkJCQkJcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCB4VGltZVRvV2FrZSApOw0KMzk2MDogICAgICAgICAgICAgICAgCQkJCQl9DQozOTYxOiAgICAgICAgICAgICAgICAJCQkJCSNlbmRpZiAvKiBJTkNMVURFX3ZUYXNrU3VzcGVuZCAqLw0KMzk2MjogICAgICAgICAgICAgICAgDQozOTYzOiAgICAgICAgICAgICAgICAJCQkJCS8qIEFsbCBwb3J0cyBhcmUgd3JpdHRlbiB0byBhbGxvdyBhIHlpZWxkIGluIGEgY3JpdGljYWwNCjM5NjQ6ICAgICAgICAgICAgICAgIAkJCQkJc2VjdGlvbiAoc29tZSB3aWxsIHlpZWxkIGltbWVkaWF0ZWx5LCBvdGhlcnMgd2FpdCB1bnRpbCB0aGUNCjM5NjU6ICAgICAgICAgICAgICAgIAkJCQkJY3JpdGljYWwgc2VjdGlvbiBleGl0cykgLSBidXQgaXQgaXMgbm90IHNvbWV0aGluZyB0aGF0DQozOTY2OiAgICAgICAgICAgICAgICAJCQkJCWFwcGxpY2F0aW9uIGNvZGUgc2hvdWxkIGV2ZXIgZG8uICovDQozOTY3OiAgICAgICAgICAgICAgICAJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQpCRkQwM0E0OCAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwM0E0QSAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01DQpCRkQwM0E0QyAgICAgIDBDMDAgICBOT1ANCkJGRDAzQTRFICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCkJGRDAzQTUyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAzQTU2ICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDNBNUEgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KQkZEMDNBNUUgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQ0KQkZEMDNBNjIgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwM0E2NCAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMNCkJGRDAzQTY2ICAgICAgMEMwMCAgIE5PUA0KMzk2ODogICAgICAgICAgICAgICAgCQkJCX0NCjM5Njk6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQozOTcwOiAgICAgICAgICAgICAgICAJCQkJew0KMzk3MTogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozOTcyOiAgICAgICAgICAgICAgICAJCQkJfQ0KMzk3MzogICAgICAgICAgICAgICAgCQkJfQ0KMzk3NDogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMzk3NTogICAgICAgICAgICAgICAgCQkJew0KMzk3NjogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjM5Nzc6ICAgICAgICAgICAgICAgIAkJCX0NCjM5Nzg6ICAgICAgICAgICAgICAgIAkJfQ0KMzk3OTogICAgICAgICAgICAgICAgCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDNBNjggIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDNBNkEgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDUyNkUNCkJGRDAzQTZDICAgICAgMEMwMCAgIE5PUA0KMzk4MDogICAgICAgICAgICAgICAgDQozOTgxOiAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDNBNkUgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDAzQTcwICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDNBNzIgICAgICAwQzAwICAgTk9QDQozOTgyOiAgICAgICAgICAgICAgICAJCXsNCjM5ODM6ICAgICAgICAgICAgICAgIAkJCXVsUmV0dXJuID0gcHhDdXJyZW50VENCLT51bE5vdGlmaWVkVmFsdWU7DQpCRkQwM0E3NCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDNBNzggIDAwNDhGQzQyICAgTFcgVjAsIDcyKFYwKQ0KQkZEMDNBN0MgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMzk4NDogICAgICAgICAgICAgICAgDQozOTg1OiAgICAgICAgICAgICAgICAJCQlpZiggdWxSZXR1cm4gIT0gMFVMICkNCkJGRDAzQTgwICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAzQTg0ICAwMDExNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzQUFBDQozOTg2OiAgICAgICAgICAgICAgICAJCQl7DQozOTg3OiAgICAgICAgICAgICAgICAJCQkJaWYoIHhDbGVhckNvdW50T25FeGl0ICE9IHBkRkFMU0UgKQ0KQkZEMDNBODggIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDNBOEMgIDAwMDY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNBOUMNCjM5ODg6ICAgICAgICAgICAgICAgIAkJCQl7DQozOTg5OiAgICAgICAgICAgICAgICAJCQkJCXB4Q3VycmVudFRDQi0+dWxOb3RpZmllZFZhbHVlID0gMFVMOw0KQkZEMDNBOTAgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAzQTk0ICAwMDQ4RjgwMiAgIFNXIFpFUk8sIDcyKFYwKQ0KQkZEMDNBOTggICAgICBDQzA4ICAgQiAweEJGRDAzQUFBDQpCRkQwM0E5QSAgICAgIDBDMDAgICBOT1ANCjM5OTA6ICAgICAgICAgICAgICAgIAkJCQl9DQozOTkxOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMzk5MjogICAgICAgICAgICAgICAgCQkJCXsNCjM5OTM6ICAgICAgICAgICAgICAgIAkJCQkJKCBweEN1cnJlbnRUQ0ItPnVsTm90aWZpZWRWYWx1ZSApLS07DQpCRkQwM0E5QyAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDNBQTAgIDAwNDhGQzYyICAgTFcgVjEsIDcyKFYwKQ0KQkZEMDNBQTQgICAgICA2REJFICAgQURESVUgVjEsIFYxLCAtMQ0KQkZEMDNBQTYgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQ0KMzk5NDogICAgICAgICAgICAgICAgCQkJCX0NCjM5OTU6ICAgICAgICAgICAgICAgIAkJCX0NCjM5OTY6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjM5OTc6ICAgICAgICAgICAgICAgIAkJCXsNCjM5OTg6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozOTk5OiAgICAgICAgICAgICAgICAJCQl9DQo0MDAwOiAgICAgICAgICAgICAgICANCjQwMDE6ICAgICAgICAgICAgICAgIAkJCXB4Q3VycmVudFRDQi0+ZU5vdGlmeVN0YXRlID0gZU5vdFdhaXRpbmdOb3RpZmljYXRpb247DQpCRkQwM0FBQSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDNBQUUgIDAwNENGODAyICAgU1cgWkVSTywgNzYoVjApDQo0MDAyOiAgICAgICAgICAgICAgICAJCX0NCjQwMDM6ICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAzQUIyICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDAzQUI0ICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1MkI4DQpCRkQwM0FCNiAgICAgIDBDMDAgICBOT1ANCjQwMDQ6ICAgICAgICAgICAgICAgIA0KNDAwNTogICAgICAgICAgICAgICAgCQlyZXR1cm4gdWxSZXR1cm47DQpCRkQwM0FCOCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQo0MDA2OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDNBQkMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAzQUJFICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkNCkJGRDAzQUMwICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkNCkJGRDAzQUMyICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDANCkJGRDAzQUM0ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAzQUM2ICAgICAgMEMwMCAgIE5PUA0KNDAwNzogICAgICAgICAgICAgICAgDQo0MDA4OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1RBU0tfTk9USUZJQ0FUSU9OUyAqLw0KNDAwOTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0MDEwOiAgICAgICAgICAgICAgICANCjQwMTE6ICAgICAgICAgICAgICAgICNpZiggY29uZmlnVVNFX1RBU0tfTk9USUZJQ0FUSU9OUyA9PSAxICkNCjQwMTI6ICAgICAgICAgICAgICAgIA0KNDAxMzogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFRhc2tOb3RpZnlXYWl0KCB1aW50MzJfdCB1bEJpdHNUb0NsZWFyT25FbnRyeSwgdWludDMyX3QgdWxCaXRzVG9DbGVhck9uRXhpdCwgdWludDMyX3QgKnB1bE5vdGlmaWNhdGlvblZhbHVlLCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCApDQo0MDE0OiAgICAgICAgICAgICAgICAJew0KQkZEMDJDNkMgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDAyQzZFICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkNCkJGRDAyQzcwICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkNCkJGRDAyQzcyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwMkM3NCAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpDQpCRkQwMkM3OCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpDQpCRkQwMkM3QyAgMDAzMEY4REUgICBTVyBBMiwgNDgoUzgpDQpCRkQwMkM4MCAgMDAzNEY4RkUgICBTVyBBMywgNTIoUzgpDQo0MDE1OiAgICAgICAgICAgICAgICAJVGlja1R5cGVfdCB4VGltZVRvV2FrZTsNCjQwMTY6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm47DQo0MDE3OiAgICAgICAgICAgICAgICANCjQwMTg6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMkM4NCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDJDODYgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwMkM4OCAgICAgIDBDMDAgICBOT1ANCjQwMTk6ICAgICAgICAgICAgICAgIAkJew0KNDAyMDogICAgICAgICAgICAgICAgCQkJLyogT25seSBibG9jayBpZiBhIG5vdGlmaWNhdGlvbiBpcyBub3QgYWxyZWFkeSBwZW5kaW5nLiAqLw0KNDAyMTogICAgICAgICAgICAgICAgCQkJaWYoIHB4Q3VycmVudFRDQi0+ZU5vdGlmeVN0YXRlICE9IGVOb3RpZmllZCApDQpCRkQwMkM4QSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDJDOEUgIDAwNENGQzYyICAgTFcgVjEsIDc2KFYwKQ0KQkZEMDJDOTIgICAgICBFRDAyICAgTEkgVjAsIDINCkJGRDAyQzk0ICAwMDU4OTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDJENDgNCkJGRDAyQzk2ICAwQzAwMDA1OCAgIFNMTCBWMCwgVDgsIDENCkJGRDAyQzk4ICAgICAgMEMwMCAgIE5PUA0KNDAyMjogICAgICAgICAgICAgICAgCQkJew0KNDAyMzogICAgICAgICAgICAgICAgCQkJCS8qIENsZWFyIGJpdHMgaW4gdGhlIHRhc2sncyBub3RpZmljYXRpb24gdmFsdWUgYXMgYml0cyBtYXkgZ2V0DQo0MDI0OiAgICAgICAgICAgICAgICAJCQkJc2V0CWJ5IHRoZSBub3RpZnlpbmcgdGFzayBvciBpbnRlcnJ1cHQuICBUaGlzIGNhbiBiZSB1c2VkIHRvDQo0MDI1OiAgICAgICAgICAgICAgICAJCQkJY2xlYXIgdGhlIHZhbHVlIHRvIHplcm8uICovDQo0MDI2OiAgICAgICAgICAgICAgICAJCQkJcHhDdXJyZW50VENCLT51bE5vdGlmaWVkVmFsdWUgJj0gfnVsQml0c1RvQ2xlYXJPbkVudHJ5Ow0KQkZEMDJDOUEgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAyQzlFICAwMDQ4RkM4MiAgIExXIEEwLCA3MihWMCkNCkJGRDAyQ0EyICAwMDI4RkM3RSAgIExXIFYxLCA0MChTOCkNCkJGRDAyQ0E2ICAgICAgNDQxQiAgIE5PVDE2IFYxLCBWMQ0KQkZEMDJDQTggICAgICA0NDlDICAgQU5EMTYgVjEsIEEwDQpCRkQwMkNBQSAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApDQo0MDI3OiAgICAgICAgICAgICAgICANCjQwMjg6ICAgICAgICAgICAgICAgIAkJCQkvKiBNYXJrIHRoaXMgdGFzayBhcyB3YWl0aW5nIGZvciBhIG5vdGlmaWNhdGlvbi4gKi8NCjQwMjk6ICAgICAgICAgICAgICAgIAkJCQlweEN1cnJlbnRUQ0ItPmVOb3RpZnlTdGF0ZSA9IGVXYWl0aW5nTm90aWZpY2F0aW9uOw0KQkZEMDJDQUUgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAyQ0IyICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwMkNCNCAgMDA0Q0Y4NjIgICBTVyBWMSwgNzYoVjApDQo0MDMwOiAgICAgICAgICAgICAgICANCjQwMzE6ICAgICAgICAgICAgICAgIAkJCQlpZiggeFRpY2tzVG9XYWl0ID4gKCBUaWNrVHlwZV90ICkgMCApDQpCRkQwMkNCOCAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpDQpCRkQwMkNCQyAgMDA0NDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMkQ0OA0KNDAzMjogICAgICAgICAgICAgICAgCQkJCXsNCjQwMzM6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHRhc2sgaXMgZ29pbmcgdG8gYmxvY2suICBGaXJzdCBpdCBtdXN0IGJlIHJlbW92ZWQNCjQwMzQ6ICAgICAgICAgICAgICAgIAkJCQkJZnJvbSB0aGUJcmVhZHkgbGlzdC4gKi8NCjQwMzU6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHV4TGlzdFJlbW92ZSggJiggcHhDdXJyZW50VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwMkNDMCAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDJDQzQgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwMkNDNiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDJDQzggIDAwQzg3N0U4ICAgSkFMUyB1eExpc3RSZW1vdmUNCkJGRDAyQ0NBICAwQzAwMDBDOCAgIFNMTCBBMiwgVDAsIDENCkJGRDAyQ0NDICAgICAgMEMwMCAgIE5PUA0KQkZEMDJDQ0UgIDAwMEM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJDRUENCjQwMzY6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDAzNzogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIGN1cnJlbnQgdGFzayBtdXN0IGJlIGluIGEgcmVhZHkgbGlzdCwgc28gdGhlcmUgaXMNCjQwMzg6ICAgICAgICAgICAgICAgIAkJCQkJCW5vIG5lZWQgdG8gY2hlY2ssIGFuZCB0aGUgcG9ydCByZXNldCBtYWNybyBjYW4gYmUgY2FsbGVkDQo0MDM5OiAgICAgICAgICAgICAgICAJCQkJCQlkaXJlY3RseS4gKi8NCjQwNDA6ICAgICAgICAgICAgICAgIAkJCQkJCXBvcnRSRVNFVF9SRUFEWV9QUklPUklUWSggcHhDdXJyZW50VENCLT51eFByaW9yaXR5LCB1eFRvcFJlYWR5UHJpb3JpdHkgKTsNCkJGRDAyQ0QyICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMkNENiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMkNEOCAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDJDREEgIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxDQpCRkQwMkNEQyAgNDQxQTEwMTAgICBBRERJIFpFUk8sIFMwLCAxNzQzNA0KQkZEMDJDREUgICAgICA0NDFBICAgTk9UMTYgVjEsIFYwDQpCRkQwMkNFMCAgODA0MEZDNUMgICBMVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDJDRTQgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwMkNFNiAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQ0KNDA0MTogICAgICAgICAgICAgICAgCQkJCQl9DQo0MDQyOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjQwNDM6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDA0NDogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNDA0NTogICAgICAgICAgICAgICAgCQkJCQl9DQo0MDQ2OiAgICAgICAgICAgICAgICANCjQwNDc6ICAgICAgICAgICAgICAgIAkJCQkJI2lmICggSU5DTFVERV92VGFza1N1c3BlbmQgPT0gMSApDQo0MDQ4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjQwNDk6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGlja3NUb1dhaXQgPT0gcG9ydE1BWF9ERUxBWSApDQpCRkQwMkNFQSAgMDAzNEZDN0UgICBMVyBWMSwgNTIoUzgpDQpCRkQwMkNFRSAgICAgIEVEN0YgICBMSSBWMCwgLTENCkJGRDAyQ0YwICAwMDBFQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDJEMTANCkJGRDAyQ0YyICAwQzAwMDAwRSAgIFNMTCBaRVJPLCBUNiwgMQ0KQkZEMDJDRjQgICAgICAwQzAwICAgTk9QDQo0MDUwOiAgICAgICAgICAgICAgICAJCQkJCQl7DQo0MDUxOiAgICAgICAgICAgICAgICAJCQkJCQkJLyogQWRkIHRoZSB0YXNrIHRvIHRoZSBzdXNwZW5kZWQgdGFzayBsaXN0IGluc3RlYWQNCjQwNTI6ICAgICAgICAgICAgICAgIAkJCQkJCQlvZiBhIGRlbGF5ZWQgdGFzayBsaXN0IHRvIGVuc3VyZSB0aGUgdGFzayBpcyBub3QNCjQwNTM6ICAgICAgICAgICAgICAgIAkJCQkJCQl3b2tlbiBieSBhIHRpbWluZyBldmVudC4gIEl0IHdpbGwgYmxvY2sNCjQwNTQ6ICAgICAgICAgICAgICAgIAkJCQkJCQlpbmRlZmluaXRlbHkuICovDQo0MDU1OiAgICAgICAgICAgICAgICAJCQkJCQkJdkxpc3RJbnNlcnRFbmQoICZ4U3VzcGVuZGVkVGFza0xpc3QsICYoIHB4Q3VycmVudFRDQi0+eEdlbmVyaWNMaXN0SXRlbSApICk7DQpCRkQwMkNGNiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDJDRkEgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwMkNGQyAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDJDRkUgIDMwODNCRkQyICAgTERDMSBGMzAsIDEyNDE5KFMyKQ0KQkZEMDJEMDAgIDgwRTQzMDgzICAgQURESVUgQTAsIFYxLCAtMzI1NDANCkJGRDAyRDA0ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMkQwNiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwMkQwOCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDAyRDBBICAgICAgMEMwMCAgIE5PUA0KQkZEMDJEMEMgICAgICBDQzBEICAgQiAweEJGRDAyRDI4DQpCRkQwMkQwRSAgICAgIDBDMDAgICBOT1ANCjQwNTY6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjQwNTc6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjQwNTg6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjQwNTk6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgc2hvdWxkIGJlDQo0MDYwOiAgICAgICAgICAgICAgICAJCQkJCQkJd29rZW4gaWYgbm8gbm90aWZpY2F0aW9uIGV2ZW50cyBvY2N1ci4gIFRoaXMgbWF5DQo0MDYxOiAgICAgICAgICAgICAgICAJCQkJCQkJb3ZlcmZsb3cgYnV0IHRoaXMgZG9lc24ndCBtYXR0ZXIsIHRoZSBzY2hlZHVsZXIgd2lsbA0KNDA2MjogICAgICAgICAgICAgICAgCQkJCQkJCWhhbmRsZSBpdC4gKi8NCjQwNjM6ICAgICAgICAgICAgICAgIAkJCQkJCQl4VGltZVRvV2FrZSA9IHhUaWNrQ291bnQgKyB4VGlja3NUb1dhaXQ7DQpCRkQwMkQxMCAgODAzQ0ZDN0MgICBMVyBWMSwgLTMyNzA4KEdQKQ0KQkZEMDJEMTQgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQ0KQkZEMDJEMTggICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwMkQxQSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQo0MDY0OiAgICAgICAgICAgICAgICAJCQkJCQkJcHJ2QWRkQ3VycmVudFRhc2tUb0RlbGF5ZWRMaXN0KCB4VGltZVRvV2FrZSApOw0KQkZEMDJEMUUgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQ0KQkZEMDJEMjIgIDM3MzQ3N0U4ICAgSkFMUyBwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QNCkJGRDAyRDI0ICAwQzAwMzczNCAgIExIVSBUOSwgMzA3MihTNCkNCkJGRDAyRDI2ICAgICAgMEMwMCAgIE5PUA0KNDA2NTogICAgICAgICAgICAgICAgCQkJCQkJfQ0KNDA2NjogICAgICAgICAgICAgICAgCQkJCQl9DQo0MDY3OiAgICAgICAgICAgICAgICAJCQkJCSNlbHNlIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQo0MDY4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjQwNjk6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHRhc2sgc2hvdWxkIGJlDQo0MDcwOiAgICAgICAgICAgICAgICAJCQkJCQkJd29rZW4gaWYgdGhlIGV2ZW50IGRvZXMgbm90IG9jY3VyLiAgVGhpcyBtYXkNCjQwNzE6ICAgICAgICAgICAgICAgIAkJCQkJCQlvdmVyZmxvdyBidXQgdGhpcyBkb2Vzbid0IG1hdHRlciwgdGhlIHNjaGVkdWxlciB3aWxsDQo0MDcyOiAgICAgICAgICAgICAgICAJCQkJCQkJaGFuZGxlIGl0LiAqLw0KNDA3MzogICAgICAgICAgICAgICAgCQkJCQkJCXhUaW1lVG9XYWtlID0geFRpY2tDb3VudCArIHhUaWNrc1RvV2FpdDsNCjQwNzQ6ICAgICAgICAgICAgICAgIAkJCQkJCQlwcnZBZGRDdXJyZW50VGFza1RvRGVsYXllZExpc3QoIHhUaW1lVG9XYWtlICk7DQo0MDc1OiAgICAgICAgICAgICAgICAJCQkJCX0NCjQwNzY6ICAgICAgICAgICAgICAgIAkJCQkJI2VuZGlmIC8qIElOQ0xVREVfdlRhc2tTdXNwZW5kICovDQo0MDc3OiAgICAgICAgICAgICAgICANCjQwNzg6ICAgICAgICAgICAgICAgIAkJCQkJLyogQWxsIHBvcnRzIGFyZSB3cml0dGVuIHRvIGFsbG93IGEgeWllbGQgaW4gYSBjcml0aWNhbA0KNDA3OTogICAgICAgICAgICAgICAgCQkJCQlzZWN0aW9uIChzb21lIHdpbGwgeWllbGQgaW1tZWRpYXRlbHksIG90aGVycyB3YWl0IHVudGlsIHRoZQ0KNDA4MDogICAgICAgICAgICAgICAgCQkJCQljcml0aWNhbCBzZWN0aW9uIGV4aXRzKSAtIGJ1dCBpdCBpcyBub3Qgc29tZXRoaW5nIHRoYXQNCjQwODE6ICAgICAgICAgICAgICAgIAkJCQkJYXBwbGljYXRpb24gY29kZSBzaG91bGQgZXZlciBkby4gKi8NCjQwODI6ICAgICAgICAgICAgICAgIAkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCkJGRDAyRDI4ICA0RTU2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UNCkJGRDAyRDJBICAgICAgNEU1NiAgIEFERElVIFMyLCBTMiwgLTUNCkJGRDAyRDJDICAgICAgMEMwMCAgIE5PUA0KQkZEMDJEMkUgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KQkZEMDJEMzIgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDJEMzYgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2DQpCRkQwMkQzQSAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQpCRkQwMkQzRSAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpDQpCRkQwMkQ0MiAgNEU2Njc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UNCkJGRDAyRDQ0ICAgICAgNEU2NiAgIEFERElVIFMzLCBTMywgMw0KQkZEMDJENDYgICAgICAwQzAwICAgTk9QDQo0MDgzOiAgICAgICAgICAgICAgICAJCQkJfQ0KNDA4NDogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjQwODU6ICAgICAgICAgICAgICAgIAkJCQl7DQo0MDg2OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjQwODc6ICAgICAgICAgICAgICAgIAkJCQl9DQo0MDg4OiAgICAgICAgICAgICAgICAJCQl9DQo0MDg5OiAgICAgICAgICAgICAgICAJCQllbHNlDQo0MDkwOiAgICAgICAgICAgICAgICAJCQl7DQo0MDkxOiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNDA5MjogICAgICAgICAgICAgICAgCQkJfQ0KNDA5MzogICAgICAgICAgICAgICAgCQl9DQo0MDk0OiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMkQ0OCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMkQ0QSAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNDU0RQ0KQkZEMDJENEMgICAgICAwQzAwICAgTk9QDQo0MDk1OiAgICAgICAgICAgICAgICANCjQwOTY6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMkQ0RSAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDJENTAgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwMkQ1MiAgICAgIDBDMDAgICBOT1ANCjQwOTc6ICAgICAgICAgICAgICAgIAkJew0KNDA5ODogICAgICAgICAgICAgICAgCQkJaWYoIHB1bE5vdGlmaWNhdGlvblZhbHVlICE9IE5VTEwgKQ0KQkZEMDJENTQgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDJENTggIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDJENkENCjQwOTk6ICAgICAgICAgICAgICAgIAkJCXsNCjQxMDA6ICAgICAgICAgICAgICAgIAkJCQkvKiBPdXRwdXQgdGhlIGN1cnJlbnQgbm90aWZpY2F0aW9uIHZhbHVlLCB3aGljaCBtYXkgb3IgbWF5IG5vdA0KNDEwMTogICAgICAgICAgICAgICAgCQkJCWhhdmUgY2hhbmdlZC4gKi8NCjQxMDI6ICAgICAgICAgICAgICAgIAkJCQkqcHVsTm90aWZpY2F0aW9uVmFsdWUgPSBweEN1cnJlbnRUQ0ItPnVsTm90aWZpZWRWYWx1ZTsNCkJGRDAyRDVDICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMkQ2MCAgMDA0OEZDNjIgICBMVyBWMSwgNzIoVjApDQpCRkQwMkQ2NCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMkQ2OCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQxMDM6ICAgICAgICAgICAgICAgIAkJCX0NCjQxMDQ6ICAgICAgICAgICAgICAgIA0KNDEwNTogICAgICAgICAgICAgICAgCQkJLyogSWYgZU5vdGlmeVZhbHVlIGlzIHNldCB0aGVuIGVpdGhlciB0aGUgdGFzayBuZXZlciBlbnRlcmVkIHRoZQ0KNDEwNjogICAgICAgICAgICAgICAgCQkJYmxvY2tlZCBzdGF0ZSAoYmVjYXVzZSBhIG5vdGlmaWNhdGlvbiB3YXMgYWxyZWFkeSBwZW5kaW5nKSBvciB0aGUNCjQxMDc6ICAgICAgICAgICAgICAgIAkJCXRhc2sgdW5ibG9ja2VkIGJlY2F1c2Ugb2YgYSBub3RpZmljYXRpb24uICBPdGhlcndpc2UgdGhlIHRhc2sNCjQxMDg6ICAgICAgICAgICAgICAgIAkJCXVuYmxvY2tlZCBiZWNhdXNlIG9mIGEgdGltZW91dC4gKi8NCjQxMDk6ICAgICAgICAgICAgICAgIAkJCWlmKCBweEN1cnJlbnRUQ0ItPmVOb3RpZnlTdGF0ZSA9PSBlV2FpdGluZ05vdGlmaWNhdGlvbiApDQpCRkQwMkQ2QSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDJENkUgIDAwNENGQzYyICAgTFcgVjEsIDc2KFYwKQ0KQkZEMDJENzIgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAyRDc0ICAwMDA1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDJEODINCkJGRDAyRDc2ICAwQzAwMDAwNSAgIFNMTCBaRVJPLCBBMSwgMQ0KQkZEMDJENzggICAgICAwQzAwICAgTk9QDQo0MTEwOiAgICAgICAgICAgICAgICAJCQl7DQo0MTExOiAgICAgICAgICAgICAgICAJCQkJLyogQSBub3RpZmljYXRpb24gd2FzIG5vdCByZWNlaXZlZC4gKi8NCjQxMTI6ICAgICAgICAgICAgICAgIAkJCQl4UmV0dXJuID0gcGRGQUxTRTsNCkJGRDAyRDdBICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KQkZEMDJEN0UgICAgICBDQzBFICAgQiAweEJGRDAyRDlDDQpCRkQwMkQ4MCAgICAgIDBDMDAgICBOT1ANCjQxMTM6ICAgICAgICAgICAgICAgIAkJCX0NCjQxMTQ6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjQxMTU6ICAgICAgICAgICAgICAgIAkJCXsNCjQxMTY6ICAgICAgICAgICAgICAgIAkJCQkvKiBBIG5vdGlmaWNhdGlvbiB3YXMgYWxyZWFkeSBwZW5kaW5nIG9yIGEgbm90aWZpY2F0aW9uIHdhcw0KNDExNzogICAgICAgICAgICAgICAgCQkJCXJlY2VpdmVkIHdoaWxlIHRoZSB0YXNrIHdhcyB3YWl0aW5nLiAqLw0KNDExODogICAgICAgICAgICAgICAgCQkJCXB4Q3VycmVudFRDQi0+dWxOb3RpZmllZFZhbHVlICY9IH51bEJpdHNUb0NsZWFyT25FeGl0Ow0KQkZEMDJEODIgIDgwMzBGQzVDICAgTFcgVjAsIC0zMjcyMChHUCkNCkJGRDAyRDg2ICAwMDQ4RkM4MiAgIExXIEEwLCA3MihWMCkNCkJGRDAyRDhBICAwMDJDRkM3RSAgIExXIFYxLCA0NChTOCkNCkJGRDAyRDhFICAgICAgNDQxQiAgIE5PVDE2IFYxLCBWMQ0KQkZEMDJEOTAgICAgICA0NDlDICAgQU5EMTYgVjEsIEEwDQpCRkQwMkQ5MiAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApDQo0MTE5OiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDAyRDk2ICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMkQ5OCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo0MTIwOiAgICAgICAgICAgICAgICAJCQl9DQo0MTIxOiAgICAgICAgICAgICAgICANCjQxMjI6ICAgICAgICAgICAgICAgIAkJCXB4Q3VycmVudFRDQi0+ZU5vdGlmeVN0YXRlID0gZU5vdFdhaXRpbmdOb3RpZmljYXRpb247DQpCRkQwMkQ5QyAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDJEQTAgIDAwNENGODAyICAgU1cgWkVSTywgNzYoVjApDQo0MTIzOiAgICAgICAgICAgICAgICAJCX0NCjQxMjQ6ICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAyREE0ICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDAyREE2ICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA0NUFBDQpCRkQwMkRBOCAgICAgIDBDMDAgICBOT1ANCjQxMjU6ICAgICAgICAgICAgICAgIA0KNDEyNjogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDAyREFBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjQxMjc6ICAgICAgICAgICAgICAgIAl9DQpCRkQwMkRBRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDJEQjAgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQ0KQkZEMDJEQjIgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQ0KQkZEMDJEQjQgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MA0KQkZEMDJEQjYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDJEQjggICAgICAwQzAwICAgTk9QDQo0MTI4OiAgICAgICAgICAgICAgICANCjQxMjk6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVEFTS19OT1RJRklDQVRJT05TICovDQo0MTMwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQxMzE6ICAgICAgICAgICAgICAgIA0KNDEzMjogICAgICAgICAgICAgICAgI2lmKCBjb25maWdVU0VfVEFTS19OT1RJRklDQVRJT05TID09IDEgKQ0KNDEzMzogICAgICAgICAgICAgICAgDQo0MTM0OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4VGFza0dlbmVyaWNOb3RpZnkoIFRhc2tIYW5kbGVfdCB4VGFza1RvTm90aWZ5LCB1aW50MzJfdCB1bFZhbHVlLCBlTm90aWZ5QWN0aW9uIGVBY3Rpb24sIHVpbnQzMl90ICpwdWxQcmV2aW91c05vdGlmaWNhdGlvblZhbHVlICkNCjQxMzU6ICAgICAgICAgICAgICAgIAl7DQpCRkQwMUNFOCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MA0KQkZEMDFDRUEgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQ0KQkZEMDFDRUMgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQ0KQkZEMDFDRUUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDAxQ0YwICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkNCkJGRDAxQ0Y0ICAwMDJDRjhCRSAgIFNXIEExLCA0NChTOCkNCkJGRDAxQ0Y4ICAwMDMwRjhERSAgIFNXIEEyLCA0OChTOCkNCkJGRDAxQ0ZDICAwMDM0RjhGRSAgIFNXIEEzLCA1MihTOCkNCjQxMzY6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqIHB4VENCOw0KNDEzNzogICAgICAgICAgICAgICAgCWVOb3RpZnlWYWx1ZSBlT3JpZ2luYWxOb3RpZnlTdGF0ZTsNCjQxMzg6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm4gPSBwZFBBU1M7DQpCRkQwMUQwMCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDFEMDIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KNDEzOTogICAgICAgICAgICAgICAgDQo0MTQwOiAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeFRhc2tUb05vdGlmeSApOw0KQkZEMDFEMDYgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDFEMEEgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDFEMjANCkJGRDAxRDBFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMUQxMCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMUQxMiAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDFEMTQgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMUQxNiAgMTAyQzMwQTAgICBBRERJVSBBMSwgWkVSTywgNDE0MA0KQkZEMDFEMTggIDc3RTgxMDJDICAgQURESSBBVCwgVDQsIDMwNjk2DQpCRkQwMUQxQSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAxRDFDICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMUQxRSAgICAgIDBDMDAgICBOT1ANCjQxNDE6ICAgICAgICAgICAgICAgIAkJcHhUQ0IgPSAoIFRDQl90ICogKSB4VGFza1RvTm90aWZ5Ow0KQkZEMDFEMjAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDFEMjQgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KNDE0MjogICAgICAgICAgICAgICAgDQo0MTQzOiAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDFEMjggIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDAxRDJBICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDFEMkMgICAgICAwQzAwICAgTk9QDQo0MTQ0OiAgICAgICAgICAgICAgICAJCXsNCjQxNDU6ICAgICAgICAgICAgICAgIAkJCWlmKCBwdWxQcmV2aW91c05vdGlmaWNhdGlvblZhbHVlICE9IE5VTEwgKQ0KQkZEMDFEMkUgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQ0KQkZEMDFEMzIgIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDFENDQNCjQxNDY6ICAgICAgICAgICAgICAgIAkJCXsNCjQxNDc6ICAgICAgICAgICAgICAgIAkJCQkqcHVsUHJldmlvdXNOb3RpZmljYXRpb25WYWx1ZSA9IHB4VENCLT51bE5vdGlmaWVkVmFsdWU7DQpCRkQwMUQzNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUQzQSAgMDA0OEZDNjIgICBMVyBWMSwgNzIoVjApDQpCRkQwMUQzRSAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpDQpCRkQwMUQ0MiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQxNDg6ICAgICAgICAgICAgICAgIAkJCX0NCjQxNDk6ICAgICAgICAgICAgICAgIA0KNDE1MDogICAgICAgICAgICAgICAgCQkJZU9yaWdpbmFsTm90aWZ5U3RhdGUgPSBweFRDQi0+ZU5vdGlmeVN0YXRlOw0KQkZEMDFENDQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFENDggIDAwNENGQzQyICAgTFcgVjAsIDc2KFYwKQ0KQkZEMDFENEMgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KNDE1MTogICAgICAgICAgICAgICAgDQo0MTUyOiAgICAgICAgICAgICAgICAJCQlweFRDQi0+ZU5vdGlmeVN0YXRlID0gZU5vdGlmaWVkOw0KQkZEMDFENTAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFENTQgICAgICBFRDgyICAgTEkgVjEsIDINCkJGRDAxRDU2ICAwMDRDRjg2MiAgIFNXIFYxLCA3NihWMCkNCjQxNTM6ICAgICAgICAgICAgICAgIA0KNDE1NDogICAgICAgICAgICAgICAgCQkJc3dpdGNoKCBlQWN0aW9uICkNCkJGRDAxRDVBICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkNCkJGRDAxRDVFICAwMDA1QjA0MiAgIFNMVElVIFYwLCBWMCwgNQ0KQkZEMDFENjIgIDAwNDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDFERjYNCkJGRDAxRDY2ICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkNCkJGRDAxRDZBICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAxRDZDICBCRkQwNDFBMiAgIExVSSBWMCwgMHhCRkQwDQpCRkQwMUQ2RSAgMzA0MkJGRDAgICBMREMxIEYzMCwgMTIzNTQoUzApDQpCRkQwMUQ3MCAgMUQ3QzMwNDIgICBBRERJVSBWMCwgVjAsIDc1NDgNCkJGRDAxRDcyICAwNTI2MUQ3QyAgIExCIFQzLCAxMzE4KEdQKQ0KQkZEMDFENzQgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwMUQ3NiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAxRDc4ICAgICAgNDVBMiAgIEpSQyBWMA0KQkZEMDFEN0EgICAgICAwQzAwICAgTk9QDQpCRkQwMUQ3QyAgQkZEMDFERjUgICBMQiBUNywgLTE2NDMyKFM1KQ0KQkZEMDFEN0UgIDFEOTFCRkQwICAgTERDMSBGMzAsIDc1NjkoUzApDQpCRkQwMUQ4MCAgQkZEMDFEOTEgICBMQiBUNCwgLTE2NDMyKFMxKQ0KQkZEMDFEODIgIDFEQUJCRkQwICAgTERDMSBGMzAsIDc1OTUoUzApDQpCRkQwMUQ4NCAgQkZEMDFEQUIgICBMQiBUNSwgLTE2NDMyKFQzKQ0KQkZEMDFEODYgIDFEQzFCRkQwICAgTERDMSBGMzAsIDc2MTcoUzApDQpCRkQwMUQ4OCAgQkZEMDFEQzEgICBMQiBUNiwgLTE2NDMyKEFUKQ0KQkZEMDFEOEEgIDFERDFCRkQwICAgTERDMSBGMzAsIDc2MzMoUzApDQpCRkQwMUQ4QyAgQkZEMDFERDEgICBMQiBUNiwgLTE2NDMyKFMxKQ0KQkZEMDFEOEUgIEZDNUVCRkQwICAgTERDMSBGMzAsIC05MzAoUzApDQo0MTU1OiAgICAgICAgICAgICAgICAJCQl7DQo0MTU2OiAgICAgICAgICAgICAgICAJCQkJY2FzZSBlU2V0Qml0cwk6DQo0MTU3OiAgICAgICAgICAgICAgICAJCQkJCXB4VENCLT51bE5vdGlmaWVkVmFsdWUgfD0gdWxWYWx1ZTsNCkJGRDAxRDkwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxRDk0ICAwMDQ4RkM2MiAgIExXIFYxLCA3MihWMCkNCkJGRDAxRDk4ICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAxRDlDICAgICAgNDREQSAgIE9SMTYgVjEsIFYwDQpCRkQwMUQ5RSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMURBMiAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApDQo0MTU4OiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDFEQTYgICAgICBDQzI3ICAgQiAweEJGRDAxREY2DQpCRkQwMURBOCAgICAgIDBDMDAgICBOT1ANCjQxNTk6ICAgICAgICAgICAgICAgIA0KNDE2MDogICAgICAgICAgICAgICAgCQkJCWNhc2UgZUluY3JlbWVudAk6DQo0MTYxOiAgICAgICAgICAgICAgICAJCQkJCSggcHhUQ0ItPnVsTm90aWZpZWRWYWx1ZSApKys7DQpCRkQwMURBQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMURBRSAgMDA0OEZDNDIgICBMVyBWMCwgNzIoVjApDQpCRkQwMURCMiAgICAgIDZEQTAgICBBRERJVSBWMSwgVjAsIDENCkJGRDAxREI0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxREI4ICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkNCjQxNjI6ICAgICAgICAgICAgICAgIAkJCQkJYnJlYWs7DQpCRkQwMURCQyAgICAgIENDMUMgICBCIDB4QkZEMDFERjYNCkJGRDAxREJFICAgICAgMEMwMCAgIE5PUA0KNDE2MzogICAgICAgICAgICAgICAgDQo0MTY0OiAgICAgICAgICAgICAgICAJCQkJY2FzZSBlU2V0VmFsdWVXaXRoT3ZlcndyaXRlCToNCjQxNjU6ICAgICAgICAgICAgICAgIAkJCQkJcHhUQ0ItPnVsTm90aWZpZWRWYWx1ZSA9IHVsVmFsdWU7DQpCRkQwMURDMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMURDNCAgMDAyQ0ZDN0UgICBMVyBWMSwgNDQoUzgpDQpCRkQwMURDOCAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApDQo0MTY2OiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDFEQ0MgICAgICBDQzE0ICAgQiAweEJGRDAxREY2DQpCRkQwMURDRSAgICAgIDBDMDAgICBOT1ANCjQxNjc6ICAgICAgICAgICAgICAgIA0KNDE2ODogICAgICAgICAgICAgICAgCQkJCWNhc2UgZVNldFZhbHVlV2l0aG91dE92ZXJ3cml0ZSA6DQo0MTY5OiAgICAgICAgICAgICAgICAJCQkJCWlmKCBlT3JpZ2luYWxOb3RpZnlTdGF0ZSAhPSBlTm90aWZpZWQgKQ0KQkZEMDFERDAgIDAwMThGQzdFICAgTFcgVjEsIDI0KFM4KQ0KQkZEMDFERDQgICAgICBFRDAyICAgTEkgVjAsIDINCkJGRDAxREQ2ICAwMDA5OTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDFERUMNCkJGRDAxREQ4ICAwQzAwMDAwOSAgIFNMTCBaRVJPLCBUMSwgMQ0KQkZEMDFEREEgICAgICAwQzAwICAgTk9QDQo0MTcwOiAgICAgICAgICAgICAgICAJCQkJCXsNCjQxNzE6ICAgICAgICAgICAgICAgIAkJCQkJCXB4VENCLT51bE5vdGlmaWVkVmFsdWUgPSB1bFZhbHVlOw0KQkZEMDFEREMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFERTAgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQ0KQkZEMDFERTQgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQ0KNDE3MjogICAgICAgICAgICAgICAgCQkJCQl9DQo0MTczOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjQxNzQ6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDE3NTogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIHZhbHVlIGNvdWxkIG5vdCBiZSB3cml0dGVuIHRvIHRoZSB0YXNrLiAqLw0KNDE3NjogICAgICAgICAgICAgICAgCQkJCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDAxREVDICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KNDE3NzogICAgICAgICAgICAgICAgCQkJCQl9DQo0MTc4OiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDFERTggICAgICBDQzA2ICAgQiAweEJGRDAxREY2DQpCRkQwMURFQSAgICAgIDBDMDAgICBOT1ANCkJGRDAxREYwICAgICAgQ0MwMiAgIEIgMHhCRkQwMURGNg0KQkZEMDFERjIgICAgICAwQzAwICAgTk9QDQo0MTc5OiAgICAgICAgICAgICAgICANCjQxODA6ICAgICAgICAgICAgICAgIAkJCQljYXNlIGVOb0FjdGlvbjoNCjQxODE6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHRhc2sgaXMgYmVpbmcgbm90aWZpZWQgd2l0aG91dCBpdHMgbm90aWZ5IHZhbHVlIGJlaW5nDQo0MTgyOiAgICAgICAgICAgICAgICAJCQkJCXVwZGF0ZWQuICovDQo0MTgzOiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDFERjQgICAgICAwQzAwICAgTk9QDQo0MTg0OiAgICAgICAgICAgICAgICAJCQl9DQo0MTg1OiAgICAgICAgICAgICAgICANCjQxODY6ICAgICAgICAgICAgICAgIA0KNDE4NzogICAgICAgICAgICAgICAgCQkJLyogSWYgdGhlIHRhc2sgaXMgaW4gdGhlIGJsb2NrZWQgc3RhdGUgc3BlY2lmaWNhbGx5IHRvIHdhaXQgZm9yIGENCjQxODg6ICAgICAgICAgICAgICAgIAkJCW5vdGlmaWNhdGlvbiB0aGVuIHVuYmxvY2sgaXQgbm93LiAqLw0KNDE4OTogICAgICAgICAgICAgICAgCQkJaWYoIGVPcmlnaW5hbE5vdGlmeVN0YXRlID09IGVXYWl0aW5nTm90aWZpY2F0aW9uICkNCkJGRDAxREY2ICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDAxREZBICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMURGQyAgMDA0RUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxRTlDDQpCRkQwMURGRSAgMEMwMDAwNEUgICBTTEwgVjAsIFQ2LCAxDQpCRkQwMUUwMCAgICAgIDBDMDAgICBOT1ANCjQxOTA6ICAgICAgICAgICAgICAgIAkJCXsNCjQxOTE6ICAgICAgICAgICAgICAgIAkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDAxRTAyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxRTA2ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDFFMDggICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAxRTBBICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMUUwQyAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMUUwRSAgICAgIDBDMDAgICBOT1ANCjQxOTI6ICAgICAgICAgICAgICAgIAkJCQlwcnZBZGRUYXNrVG9SZWFkeUxpc3QoIHB4VENCICk7DQpCRkQwMUUxMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUUxNCAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMUUxNiAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDFFMTggIDE4MTAwMDYyICAgU0xMViBWMSwgVjAsIFYxDQpCRkQwMUUxQSAgRkM1QzE4MTAgICBTQiBaRVJPLCAtOTMyKFMwKQ0KQkZEMDFFMUMgIDgwNDBGQzVDICAgTFcgVjAsIC0zMjcwNChHUCkNCkJGRDAxRTIwICAgICAgNDREMyAgIE9SMTYgVjAsIFYxDQpCRkQwMUUyMiAgODA0MEY4NUMgICBTVyBWMCwgLTMyNzA0KEdQKQ0KQkZEMDFFMjYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFFMkEgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDFFMkMgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDFFMkUgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDFFMzAgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwMUUzMiAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDFFMzQgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDFFMzYgIDgwNkMzMDQyICAgQURESVUgVjAsIFYwLCAtMzI2NjANCkJGRDAxRTNBICAgICAgMDVBNiAgIEFERFUgVjEsIFYxLCBWMA0KQkZEMDFFM0MgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFFNDAgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwMUU0MiAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDFFNDQgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAxRTQ2ICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQNCkJGRDAxRTQ4ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQ0KQkZEMDFFNEEgICAgICAwQzAwICAgTk9QDQo0MTkzOiAgICAgICAgICAgICAgICANCjQxOTQ6ICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgdGFzayBzaG91bGQgbm90IGhhdmUgYmVlbiBvbiBhbiBldmVudCBsaXN0LiAqLw0KNDE5NTogICAgICAgICAgICAgICAgCQkJCWNvbmZpZ0FTU0VSVCggbGlzdExJU1RfSVRFTV9DT05UQUlORVIoICYoIHB4VENCLT54RXZlbnRMaXN0SXRlbSApICkgPT0gTlVMTCApOw0KQkZEMDFFNEMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFFNTAgICAgICA2OTJBICAgTFcgVjAsIDQwKFYwKQ0KQkZEMDFFNTIgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDFFNjgNCkJGRDAxRTU2ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMUU1OCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMUU1QSAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDFFNUMgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMUU1RSAgMTA2MzMwQTAgICBBRERJVSBBMSwgWkVSTywgNDE5NQ0KQkZEMDFFNjAgIDc3RTgxMDYzICAgQURESSBWMSwgVjEsIDMwNjk2DQpCRkQwMUU2MiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAxRTY0ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMUU2NiAgICAgIDBDMDAgICBOT1ANCjQxOTY6ICAgICAgICAgICAgICAgIA0KNDE5NzogICAgICAgICAgICAgICAgCQkJCSNpZiggY29uZmlnVVNFX1RJQ0tMRVNTX0lETEUgIT0gMCApDQo0MTk4OiAgICAgICAgICAgICAgICAJCQkJew0KNDE5OTogICAgICAgICAgICAgICAgCQkJCQkvKiBJZiBhIHRhc2sgaXMgYmxvY2tlZCB3YWl0aW5nIGZvciBhIG5vdGlmaWNhdGlvbiB0aGVuDQo0MjAwOiAgICAgICAgICAgICAgICAJCQkJCXhOZXh0VGFza1VuYmxvY2tUaW1lIG1pZ2h0IGJlIHNldCB0byB0aGUgYmxvY2tlZCB0YXNrJ3MgdGltZQ0KNDIwMTogICAgICAgICAgICAgICAgCQkJCQlvdXQgdGltZS4gIElmIHRoZSB0YXNrIGlzIHVuYmxvY2tlZCBmb3IgYSByZWFzb24gb3RoZXIgdGhhbg0KNDIwMjogICAgICAgICAgICAgICAgCQkJCQlhIHRpbWVvdXQgeE5leHRUYXNrVW5ibG9ja1RpbWUgaXMgbm9ybWFsbHkgbGVmdCB1bmNoYW5nZWQsDQo0MjAzOiAgICAgICAgICAgICAgICAJCQkJCWJlY2F1c2UgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGdldCByZXNldCB0byBhIG5ldyB2YWx1ZSB3aGVuDQo0MjA0OiAgICAgICAgICAgICAgICAJCQkJCXRoZSB0aWNrIGNvdW50IGVxdWFscyB4TmV4dFRhc2tVbmJsb2NrVGltZS4gIEhvd2V2ZXIgaWYNCjQyMDU6ICAgICAgICAgICAgICAgIAkJCQkJdGlja2xlc3MgaWRsaW5nIGlzIHVzZWQgaXQgbWlnaHQgYmUgbW9yZSBpbXBvcnRhbnQgdG8gZW50ZXINCjQyMDY6ICAgICAgICAgICAgICAgIAkJCQkJc2xlZXAgbW9kZSBhdCB0aGUgZWFybGllc3QgcG9zc2libGUgdGltZSAtIHNvIHJlc2V0DQo0MjA3OiAgICAgICAgICAgICAgICAJCQkJCXhOZXh0VGFza1VuYmxvY2tUaW1lIGhlcmUgdG8gZW5zdXJlIGl0IGlzIHVwZGF0ZWQgYXQgdGhlDQo0MjA4OiAgICAgICAgICAgICAgICAJCQkJCWVhcmxpZXN0IHBvc3NpYmxlIHRpbWUuICovDQo0MjA5OiAgICAgICAgICAgICAgICAJCQkJCXBydlJlc2V0TmV4dFRhc2tVbmJsb2NrVGltZSgpOw0KNDIxMDogICAgICAgICAgICAgICAgCQkJCX0NCjQyMTE6ICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYNCjQyMTI6ICAgICAgICAgICAgICAgIA0KNDIxMzogICAgICAgICAgICAgICAgCQkJCWlmKCBweFRDQi0+dXhQcmlvcml0eSA+IHB4Q3VycmVudFRDQi0+dXhQcmlvcml0eSApDQpCRkQwMUU2OCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUU2QyAgICAgIDY5QUIgICBMVyBWMSwgNDQoVjApDQpCRkQwMUU2RSAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDFFNzIgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDFFNzQgIDEzOTAwMDYyICAgU0xUVSBWMCwgVjAsIFYxDQpCRkQwMUU3NiAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTANCkJGRDAxRTc4ICAwMDEwNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxRTlDDQo0MjE0OiAgICAgICAgICAgICAgICAJCQkJew0KNDIxNTogICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgbm90aWZpZWQgdGFzayBoYXMgYSBwcmlvcml0eSBhYm92ZSB0aGUgY3VycmVudGx5DQo0MjE2OiAgICAgICAgICAgICAgICAJCQkJCWV4ZWN1dGluZyB0YXNrIHNvIGEgeWllbGQgaXMgcmVxdWlyZWQuICovDQo0MjE3OiAgICAgICAgICAgICAgICAJCQkJCXRhc2tZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwMUU3QyAgNEU1Njc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwMUU3RSAgICAgIDRFNTYgICBBRERJVSBTMiwgUzIsIC01DQpCRkQwMUU4MCAgICAgIDBDMDAgICBOT1ANCkJGRDAxRTgyICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkNCkJGRDAxRTg2ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAxRThBICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDFFOEUgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQ0KQkZEMDFFOTIgIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQ0KQkZEMDFFOTYgIDRFNjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwMUU5OCAgICAgIDRFNjYgICBBRERJVSBTMywgUzMsIDMNCkJGRDAxRTlBICAgICAgMEMwMCAgIE5PUA0KNDIxODogICAgICAgICAgICAgICAgCQkJCX0NCjQyMTk6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQo0MjIwOiAgICAgICAgICAgICAgICAJCQkJew0KNDIyMTogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo0MjIyOiAgICAgICAgICAgICAgICAJCQkJfQ0KNDIyMzogICAgICAgICAgICAgICAgCQkJfQ0KNDIyNDogICAgICAgICAgICAgICAgCQkJZWxzZQ0KNDIyNTogICAgICAgICAgICAgICAgCQkJew0KNDIyNjogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjQyMjc6ICAgICAgICAgICAgICAgIAkJCX0NCjQyMjg6ICAgICAgICAgICAgICAgIAkJfQ0KNDIyOTogICAgICAgICAgICAgICAgCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDFFOUMgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDFFOUUgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDM2QTINCkJGRDAxRUEwICAgICAgMEMwMCAgIE5PUA0KNDIzMDogICAgICAgICAgICAgICAgDQo0MjMxOiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KQkZEMDFFQTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KNDIzMjogICAgICAgICAgICAgICAgCX0NCkJGRDAxRUE2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwMUVBOCAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwMUVBQSAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwMUVBQyAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwMUVBRSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwMUVCMCAgICAgIDBDMDAgICBOT1ANCjQyMzM6ICAgICAgICAgICAgICAgIA0KNDIzNDogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgKi8NCjQyMzU6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDIzNjogICAgICAgICAgICAgICAgDQo0MjM3OiAgICAgICAgICAgICAgICAjaWYoIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgPT0gMSApDQo0MjM4OiAgICAgICAgICAgICAgICANCjQyMzk6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhUYXNrTm90aWZ5RnJvbUlTUiggVGFza0hhbmRsZV90IHhUYXNrVG9Ob3RpZnksIHVpbnQzMl90IHVsVmFsdWUsIGVOb3RpZnlBY3Rpb24gZUFjdGlvbiwgQmFzZVR5cGVfdCAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApDQo0MjQwOiAgICAgICAgICAgICAgICAJew0KQkZEMDFFQjQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDAxRUI2ICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkNCkJGRDAxRUI4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkNCkJGRDAxRUJBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwMUVCQyAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpDQpCRkQwMUVDMCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpDQpCRkQwMUVDNCAgMDAzMEY4REUgICBTVyBBMiwgNDgoUzgpDQpCRkQwMUVDOCAgMDAzNEY4RkUgICBTVyBBMywgNTIoUzgpDQo0MjQxOiAgICAgICAgICAgICAgICAJVENCX3QgKiBweFRDQjsNCjQyNDI6ICAgICAgICAgICAgICAgIAllTm90aWZ5VmFsdWUgZU9yaWdpbmFsTm90aWZ5U3RhdGU7DQo0MjQzOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UmV0dXJuID0gcGRQQVNTOw0KQkZEMDFFQ0MgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAxRUNFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjQyNDQ6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzOw0KNDI0NTogICAgICAgICAgICAgICAgDQo0MjQ2OiAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeFRhc2tUb05vdGlmeSApOw0KQkZEMDFFRDIgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDFFRDYgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDFFRUMNCkJGRDAxRURBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMUVEQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMUVERSAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDFFRTAgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMUVFMiAgMTA5NjMwQTAgICBBRERJVSBBMSwgWkVSTywgNDI0Ng0KQkZEMDFFRTQgIDc3RTgxMDk2ICAgQURESSBBMCwgUzYsIDMwNjk2DQpCRkQwMUVFNiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAxRUU4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMUVFQSAgICAgIDBDMDAgICBOT1ANCjQyNDc6ICAgICAgICAgICAgICAgIA0KNDI0ODogICAgICAgICAgICAgICAgCQkvKiBSVE9TIHBvcnRzIHRoYXQgc3VwcG9ydCBpbnRlcnJ1cHQgbmVzdGluZyBoYXZlIHRoZSBjb25jZXB0IG9mIGENCjQyNDk6ICAgICAgICAgICAgICAgIAkJbWF4aW11bQlzeXN0ZW0gY2FsbCAob3IgbWF4aW11bSBBUEkgY2FsbCkgaW50ZXJydXB0IHByaW9yaXR5Lg0KNDI1MDogICAgICAgICAgICAgICAgCQlJbnRlcnJ1cHRzIHRoYXQgYXJlCWFib3ZlIHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5IGFyZSBrZWVwDQo0MjUxOiAgICAgICAgICAgICAgICAJCXBlcm1hbmVudGx5IGVuYWJsZWQsIGV2ZW4gd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLA0KNDI1MjogICAgICAgICAgICAgICAgCQlidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMuICBJZiBjb25maWdBU1NFUlQoKQ0KNDI1MzogICAgICAgICAgICAgICAgCQlpcyBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdGhlbg0KNDI1NDogICAgICAgICAgICAgICAgCQlwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2lsbCByZXN1bHQgaW4gYW4gYXNzZXJ0aW9uDQo0MjU1OiAgICAgICAgICAgICAgICAJCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzDQo0MjU2OiAgICAgICAgICAgICAgICAJCWJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZSB0aGUgY29uZmlndXJlZCBtYXhpbXVtIHN5c3RlbSBjYWxsDQo0MjU3OiAgICAgICAgICAgICAgICAJCXByaW9yaXR5LiAgT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkDQo0MjU4OiAgICAgICAgICAgICAgICAJCWZyb20gaW50ZXJydXB0cwl0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIChsb2dpY2FsbHkpDQo0MjU5OiAgICAgICAgICAgICAgICAJCWJlbG93IHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIGludGVycnVwdCBwcmlvcml0eS4gIEZyZWVSVE9TIG1haW50YWlucyBhDQo0MjYwOiAgICAgICAgICAgICAgICAJCXNlcGFyYXRlIGludGVycnVwdCBzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQo0MjYxOiAgICAgICAgICAgICAgICAJCXNpbXBsZSBhcyBwb3NzaWJsZS4gIE1vcmUgaW5mb3JtYXRpb24gKGFsYmVpdCBDb3J0ZXgtTSBzcGVjaWZpYykgaXMNCjQyNjI6ICAgICAgICAgICAgICAgIAkJcHJvdmlkZWQgb24gdGhlIGZvbGxvd2luZyBsaW5rOg0KNDI2MzogICAgICAgICAgICAgICAgCQlodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQo0MjY0OiAgICAgICAgICAgICAgICAJCXBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKTsNCjQyNjU6ICAgICAgICAgICAgICAgIA0KNDI2NjogICAgICAgICAgICAgICAgCQlweFRDQiA9ICggVENCX3QgKiApIHhUYXNrVG9Ob3RpZnk7DQpCRkQwMUVFQyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwMUVGMCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQo0MjY3OiAgICAgICAgICAgICAgICANCjQyNjg6ICAgICAgICAgICAgICAgIAkJdXhTYXZlZEludGVycnVwdFN0YXR1cyA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDAxRUY0ICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDAxRUY4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDFFRkEgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KNDI2OTogICAgICAgICAgICAgICAgCQl7DQo0MjcwOiAgICAgICAgICAgICAgICAJCQllT3JpZ2luYWxOb3RpZnlTdGF0ZSA9IHB4VENCLT5lTm90aWZ5U3RhdGU7DQpCRkQwMUVGRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUYwMiAgMDA0Q0ZDNDIgICBMVyBWMCwgNzYoVjApDQpCRkQwMUYwNiAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQo0MjcxOiAgICAgICAgICAgICAgICANCjQyNzI6ICAgICAgICAgICAgICAgIAkJCXB4VENCLT5lTm90aWZ5U3RhdGUgPSBlTm90aWZpZWQ7DQpCRkQwMUYwQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUYwRSAgICAgIEVEODIgICBMSSBWMSwgMg0KQkZEMDFGMTAgIDAwNENGODYyICAgU1cgVjEsIDc2KFYwKQ0KNDI3MzogICAgICAgICAgICAgICAgDQo0Mjc0OiAgICAgICAgICAgICAgICAJCQlzd2l0Y2goIGVBY3Rpb24gKQ0KQkZEMDFGMTQgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDFGMTggIDAwMDVCMDQyICAgU0xUSVUgVjAsIFYwLCA1DQpCRkQwMUYxQyAgMDA0NzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMUZBRQ0KQkZEMDFGMjAgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDFGMjQgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDFGMjYgIEJGRDA0MUEyICAgTFVJIFYwLCAweEJGRDANCkJGRDAxRjI4ICAzMDQyQkZEMCAgIExEQzEgRjMwLCAxMjM1NChTMCkNCkJGRDAxRjJBICAxRjM0MzA0MiAgIEFERElVIFYwLCBWMCwgNzk4OA0KQkZEMDFGMkMgIDA1MjYxRjM0ICAgTEIgVDksIDEzMTgoUzQpDQpCRkQwMUYyRSAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDAxRjMwICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDFGMzIgICAgICA0NUEyICAgSlJDIFYwDQpCRkQwMUYzNCAgQkZEMDFGQUQgICBMQiBTUCwgLTE2NDMyKFQ1KQ0KQkZEMDFGMzYgIDFGNDlCRkQwICAgTERDMSBGMzAsIDgwMDkoUzApDQpCRkQwMUYzOCAgQkZEMDFGNDkgICBMQiBLMCwgLTE2NDMyKFQxKQ0KQkZEMDFGM0EgIDFGNjNCRkQwICAgTERDMSBGMzAsIDgwMzUoUzApDQpCRkQwMUYzQyAgQkZEMDFGNjMgICBMQiBLMSwgLTE2NDMyKFYxKQ0KQkZEMDFGM0UgIDFGNzlCRkQwICAgTERDMSBGMzAsIDgwNTcoUzApDQpCRkQwMUY0MCAgQkZEMDFGNzkgICBMQiBLMSwgLTE2NDMyKFQ5KQ0KQkZEMDFGNDIgIDFGODlCRkQwICAgTERDMSBGMzAsIDgwNzMoUzApDQpCRkQwMUY0NCAgQkZEMDFGODkgICBMQiBHUCwgLTE2NDMyKFQxKQ0KQkZEMDFGNDYgIEZDNUVCRkQwICAgTERDMSBGMzAsIC05MzAoUzApDQo0Mjc1OiAgICAgICAgICAgICAgICAJCQl7DQo0Mjc2OiAgICAgICAgICAgICAgICAJCQkJY2FzZSBlU2V0Qml0cwk6DQo0Mjc3OiAgICAgICAgICAgICAgICAJCQkJCXB4VENCLT51bE5vdGlmaWVkVmFsdWUgfD0gdWxWYWx1ZTsNCkJGRDAxRjQ4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxRjRDICAwMDQ4RkM2MiAgIExXIFYxLCA3MihWMCkNCkJGRDAxRjUwICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAxRjU0ICAgICAgNDREQSAgIE9SMTYgVjEsIFYwDQpCRkQwMUY1NiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUY1QSAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApDQo0Mjc4OiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDFGNUUgICAgICBDQzI3ICAgQiAweEJGRDAxRkFFDQpCRkQwMUY2MCAgICAgIDBDMDAgICBOT1ANCjQyNzk6ICAgICAgICAgICAgICAgIA0KNDI4MDogICAgICAgICAgICAgICAgCQkJCWNhc2UgZUluY3JlbWVudAk6DQo0MjgxOiAgICAgICAgICAgICAgICAJCQkJCSggcHhUQ0ItPnVsTm90aWZpZWRWYWx1ZSApKys7DQpCRkQwMUY2MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUY2NiAgMDA0OEZDNDIgICBMVyBWMCwgNzIoVjApDQpCRkQwMUY2QSAgICAgIDZEQTAgICBBRERJVSBWMSwgVjAsIDENCkJGRDAxRjZDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxRjcwICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkNCjQyODI6ICAgICAgICAgICAgICAgIAkJCQkJYnJlYWs7DQpCRkQwMUY3NCAgICAgIENDMUMgICBCIDB4QkZEMDFGQUUNCkJGRDAxRjc2ICAgICAgMEMwMCAgIE5PUA0KNDI4MzogICAgICAgICAgICAgICAgDQo0Mjg0OiAgICAgICAgICAgICAgICAJCQkJY2FzZSBlU2V0VmFsdWVXaXRoT3ZlcndyaXRlCToNCjQyODU6ICAgICAgICAgICAgICAgIAkJCQkJcHhUQ0ItPnVsTm90aWZpZWRWYWx1ZSA9IHVsVmFsdWU7DQpCRkQwMUY3OCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUY3QyAgMDAyQ0ZDN0UgICBMVyBWMSwgNDQoUzgpDQpCRkQwMUY4MCAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApDQo0Mjg2OiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDFGODQgICAgICBDQzE0ICAgQiAweEJGRDAxRkFFDQpCRkQwMUY4NiAgICAgIDBDMDAgICBOT1ANCjQyODc6ICAgICAgICAgICAgICAgIA0KNDI4ODogICAgICAgICAgICAgICAgCQkJCWNhc2UgZVNldFZhbHVlV2l0aG91dE92ZXJ3cml0ZSA6DQo0Mjg5OiAgICAgICAgICAgICAgICAJCQkJCWlmKCBlT3JpZ2luYWxOb3RpZnlTdGF0ZSAhPSBlTm90aWZpZWQgKQ0KQkZEMDFGODggIDAwMUNGQzdFICAgTFcgVjEsIDI4KFM4KQ0KQkZEMDFGOEMgICAgICBFRDAyICAgTEkgVjAsIDINCkJGRDAxRjhFICAwMDA5OTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDFGQTQNCkJGRDAxRjkwICAwQzAwMDAwOSAgIFNMTCBaRVJPLCBUMSwgMQ0KQkZEMDFGOTIgICAgICAwQzAwICAgTk9QDQo0MjkwOiAgICAgICAgICAgICAgICAJCQkJCXsNCjQyOTE6ICAgICAgICAgICAgICAgIAkJCQkJCXB4VENCLT51bE5vdGlmaWVkVmFsdWUgPSB1bFZhbHVlOw0KQkZEMDFGOTQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFGOTggIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQ0KQkZEMDFGOUMgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQ0KNDI5MjogICAgICAgICAgICAgICAgCQkJCQl9DQo0MjkzOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjQyOTQ6ICAgICAgICAgICAgICAgIAkJCQkJew0KNDI5NTogICAgICAgICAgICAgICAgCQkJCQkJLyogVGhlIHZhbHVlIGNvdWxkIG5vdCBiZSB3cml0dGVuIHRvIHRoZSB0YXNrLiAqLw0KNDI5NjogICAgICAgICAgICAgICAgCQkJCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDAxRkE0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KNDI5NzogICAgICAgICAgICAgICAgCQkJCQl9DQo0Mjk4OiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KQkZEMDFGQTAgICAgICBDQzA2ICAgQiAweEJGRDAxRkFFDQpCRkQwMUZBMiAgICAgIDBDMDAgICBOT1ANCkJGRDAxRkE4ICAgICAgQ0MwMiAgIEIgMHhCRkQwMUZBRQ0KQkZEMDFGQUEgICAgICAwQzAwICAgTk9QDQo0Mjk5OiAgICAgICAgICAgICAgICANCjQzMDA6ICAgICAgICAgICAgICAgIAkJCQljYXNlIGVOb0FjdGlvbiA6DQo0MzAxOiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSB0YXNrIGlzIGJlaW5nIG5vdGlmaWVkIHdpdGhvdXQgaXRzIG5vdGlmeSB2YWx1ZSBiZWluZw0KNDMwMjogICAgICAgICAgICAgICAgCQkJCQl1cGRhdGVkLiAqLw0KNDMwMzogICAgICAgICAgICAgICAgCQkJCQlicmVhazsNCkJGRDAxRkFDICAgICAgMEMwMCAgIE5PUA0KNDMwNDogICAgICAgICAgICAgICAgCQkJfQ0KNDMwNTogICAgICAgICAgICAgICAgDQo0MzA2OiAgICAgICAgICAgICAgICANCjQzMDc6ICAgICAgICAgICAgICAgIAkJCS8qIElmIHRoZSB0YXNrIGlzIGluIHRoZSBibG9ja2VkIHN0YXRlIHNwZWNpZmljYWxseSB0byB3YWl0IGZvciBhDQo0MzA4OiAgICAgICAgICAgICAgICAJCQlub3RpZmljYXRpb24gdGhlbiB1bmJsb2NrIGl0IG5vdy4gKi8NCjQzMDk6ICAgICAgICAgICAgICAgIAkJCWlmKCBlT3JpZ2luYWxOb3RpZnlTdGF0ZSA9PSBlV2FpdGluZ05vdGlmaWNhdGlvbiApDQpCRkQwMUZBRSAgMDAxQ0ZDN0UgICBMVyBWMSwgMjgoUzgpDQpCRkQwMUZCMiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDFGQjQgIDAwNTdCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMjA2Ng0KQkZEMDFGQjYgIDBDMDAwMDU3ICAgU0xMIFYwLCBTNywgMQ0KQkZEMDFGQjggICAgICAwQzAwICAgTk9QDQo0MzEwOiAgICAgICAgICAgICAgICAJCQl7DQo0MzExOiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHRhc2sgc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW4gZXZlbnQgbGlzdC4gKi8NCjQzMTI6ICAgICAgICAgICAgICAgIAkJCQljb25maWdBU1NFUlQoIGxpc3RMSVNUX0lURU1fQ09OVEFJTkVSKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApID09IE5VTEwgKTsNCkJGRDAxRkJBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxRkJFICAgICAgNjkyQSAgIExXIFYwLCA0MChWMCkNCkJGRDAxRkMwICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxRkQ2DQpCRkQwMUZDNCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDFGQzYgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDFGQzggIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgNCkJGRDAxRkNBICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQ0KQkZEMDFGQ0MgIDEwRDgzMEEwICAgQURESVUgQTEsIFpFUk8sIDQzMTINCkJGRDAxRkNFICA3N0U4MTBEOCAgIEFEREkgQTIsIFQ4LCAzMDY5Ng0KQkZEMDFGRDAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMUZEMiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDFGRDQgICAgICAwQzAwICAgTk9QDQo0MzEzOiAgICAgICAgICAgICAgICANCjQzMTQ6ICAgICAgICAgICAgICAgIAkJCQlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0UgKQ0KQkZEMDFGRDYgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkNCkJGRDAxRkRBICAwMDI3NDBBMiAgIEJORVpDIFYwLCAweEJGRDAyMDJDDQo0MzE1OiAgICAgICAgICAgICAgICAJCQkJew0KNDMxNjogICAgICAgICAgICAgICAgCQkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDAxRkRFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxRkUyICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDFGRTQgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAxRkU2ICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMUZFOCAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMUZFQSAgICAgIDBDMDAgICBOT1ANCjQzMTc6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFRDQiApOw0KQkZEMDFGRUMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFGRjAgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDFGRjIgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAxRkY0ICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQ0KQkZEMDFGRjYgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkNCkJGRDAxRkY4ICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApDQpCRkQwMUZGQyAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQ0KQkZEMDFGRkUgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCkJGRDAyMDAyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyMDA2ICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAyMDA4ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAyMDBBICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAyMDBDICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQ0KQkZEMDIwMEUgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAyMDEwICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAyMDEyICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwMjAxNiAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjANCkJGRDAyMDE4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyMDFDICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDIwMUUgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDAyMDIwICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMjAyMiAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwMjAyNCAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDAyMDI2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDIwMjggICAgICBDQzBDICAgQiAweEJGRDAyMDQyDQpCRkQwMjAyQSAgICAgIDBDMDAgICBOT1ANCjQzMTg6ICAgICAgICAgICAgICAgIAkJCQl9DQo0MzE5OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KNDMyMDogICAgICAgICAgICAgICAgCQkJCXsNCjQzMjE6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIGRlbGF5ZWQgYW5kIHJlYWR5IGxpc3RzIGNhbm5vdCBiZSBhY2Nlc3NlZCwgc28gaG9sZA0KNDMyMjogICAgICAgICAgICAgICAgCQkJCQl0aGlzIHRhc2sgcGVuZGluZyB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIHJlc3VtZWQuICovDQo0MzIzOiAgICAgICAgICAgICAgICAJCQkJCXZMaXN0SW5zZXJ0RW5kKCAmKCB4UGVuZGluZ1JlYWR5TGlzdCApLCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDIwMkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDIwMkUgIDZEMkMwMDE0ICAgRVhUIFpFUk8sIFM0LCAyMCwgMTQNCkJGRDAyMDMwICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQNCkJGRDAyMDMyICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMjAzNCAgMzA4M0JGRDIgICBMREMxIEYzMCwgMTI0MTkoUzIpDQpCRkQwMjAzNiAgODBEMDMwODMgICBBRERJVSBBMCwgVjEsIC0zMjU2MA0KQkZEMDIwM0EgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAyMDNDICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQNCkJGRDAyMDNFICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQ0KQkZEMDIwNDAgICAgICAwQzAwICAgTk9QDQo0MzI0OiAgICAgICAgICAgICAgICAJCQkJfQ0KNDMyNTogICAgICAgICAgICAgICAgDQo0MzI2OiAgICAgICAgICAgICAgICAJCQkJaWYoIHB4VENCLT51eFByaW9yaXR5ID4gcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCkJGRDAyMDQyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyMDQ2ICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkNCkJGRDAyMDQ4ICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMjA0QyAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMjA0RSAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjENCkJGRDAyMDUwICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMA0KQkZEMDIwNTIgIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDIwNjYNCjQzMjc6ICAgICAgICAgICAgICAgIAkJCQl7DQo0MzI4OiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBub3RpZmllZCB0YXNrIGhhcyBhIHByaW9yaXR5IGFib3ZlIHRoZSBjdXJyZW50bHkNCjQzMjk6ICAgICAgICAgICAgICAgIAkJCQkJZXhlY3V0aW5nIHRhc2sgc28gYSB5aWVsZCBpcyByZXF1aXJlZC4gKi8NCjQzMzA6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gTlVMTCApDQpCRkQwMjA1NiAgMDAzNEZDNUUgICBMVyBWMCwgNTIoUzgpDQpCRkQwMjA1QSAgMDAwNDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjA2Ng0KNDMzMTogICAgICAgICAgICAgICAgCQkJCQl7DQo0MzMyOiAgICAgICAgICAgICAgICAJCQkJCQkqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiA9IHBkVFJVRTsNCkJGRDAyMDVFICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkNCkJGRDAyMDYyICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwMjA2NCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQzMzM6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KNDMzNDogICAgICAgICAgICAgICAgCQkJCX0NCjQzMzU6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQo0MzM2OiAgICAgICAgICAgICAgICAJCQkJew0KNDMzNzogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo0MzM4OiAgICAgICAgICAgICAgICAJCQkJfQ0KNDMzOTogICAgICAgICAgICAgICAgCQkJfQ0KNDM0MDogICAgICAgICAgICAgICAgCQl9DQo0MzQxOiAgICAgICAgICAgICAgICAJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDIwNjYgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDIwNkEgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDAyMDZDICAgICAgNEQ1RSAgIEFERElVIFQyLCBUMiwgLTENCkJGRDAyMDZFICAgICAgMEMwMCAgIE5PUA0KNDM0MjogICAgICAgICAgICAgICAgDQo0MzQzOiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KQkZEMDIwNzAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KNDM0NDogICAgICAgICAgICAgICAgCX0NCkJGRDAyMDc0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwMjA3NiAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwMjA3OCAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwMjA3QSAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwMjA3QyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwMjA3RSAgICAgIDBDMDAgICBOT1ANCjQzNDU6ICAgICAgICAgICAgICAgIA0KNDM0NjogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgKi8NCjQzNDc6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDM0ODogICAgICAgICAgICAgICAgDQo0MzQ5OiAgICAgICAgICAgICAgICAjaWYoIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgPT0gMSApDQo0MzUwOiAgICAgICAgICAgICAgICANCjQzNTE6ICAgICAgICAgICAgICAgIAl2b2lkIHZUYXNrTm90aWZ5R2l2ZUZyb21JU1IoIFRhc2tIYW5kbGVfdCB4VGFza1RvTm90aWZ5LCBCYXNlVHlwZV90ICpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkNCjQzNTI6ICAgICAgICAgICAgICAgIAl7DQpCRkQwMzE5MCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MA0KQkZEMDMxOTIgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQ0KQkZEMDMxOTQgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQ0KQkZEMDMxOTYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDAzMTk4ICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkNCkJGRDAzMTlDICAwMDJDRjhCRSAgIFNXIEExLCA0NChTOCkNCjQzNTM6ICAgICAgICAgICAgICAgIAlUQ0JfdCAqIHB4VENCOw0KNDM1NDogICAgICAgICAgICAgICAgCWVOb3RpZnlWYWx1ZSBlT3JpZ2luYWxOb3RpZnlTdGF0ZTsNCjQzNTU6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzOw0KNDM1NjogICAgICAgICAgICAgICAgDQo0MzU3OiAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeFRhc2tUb05vdGlmeSApOw0KQkZEMDMxQTAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDMxQTQgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDMxQkENCkJGRDAzMUE4ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMzFBQSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMzFBQyAgOTgxMDMwODIgICBBRERJVSBBMCwgVjAsIC0yNjYwOA0KQkZEMDMxQUUgIDMwQTA5ODEwICAgU1dDMSBGMCwgMTI0NDgoUzApDQpCRkQwMzFCMCAgMTEwNTMwQTAgICBBRERJVSBBMSwgWkVSTywgNDM1Nw0KQkZEMDMxQjIgIDc3RTgxMTA1ICAgQURESSBUMCwgQTEsIDMwNjk2DQpCRkQwMzFCNCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAzMUI2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMzFCOCAgICAgIDBDMDAgICBOT1ANCjQzNTg6ICAgICAgICAgICAgICAgIA0KNDM1OTogICAgICAgICAgICAgICAgCQkvKiBSVE9TIHBvcnRzIHRoYXQgc3VwcG9ydCBpbnRlcnJ1cHQgbmVzdGluZyBoYXZlIHRoZSBjb25jZXB0IG9mIGENCjQzNjA6ICAgICAgICAgICAgICAgIAkJbWF4aW11bQlzeXN0ZW0gY2FsbCAob3IgbWF4aW11bSBBUEkgY2FsbCkgaW50ZXJydXB0IHByaW9yaXR5Lg0KNDM2MTogICAgICAgICAgICAgICAgCQlJbnRlcnJ1cHRzIHRoYXQgYXJlCWFib3ZlIHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIHByaW9yaXR5IGFyZSBrZWVwDQo0MzYyOiAgICAgICAgICAgICAgICAJCXBlcm1hbmVudGx5IGVuYWJsZWQsIGV2ZW4gd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLA0KNDM2MzogICAgICAgICAgICAgICAgCQlidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvIEZyZWVSVE9TIEFQSSBmdW5jdGlvbnMuICBJZiBjb25maWdBU1NFUlQoKQ0KNDM2NDogICAgICAgICAgICAgICAgCQlpcyBkZWZpbmVkIGluIEZyZWVSVE9TQ29uZmlnLmggdGhlbg0KNDM2NTogICAgICAgICAgICAgICAgCQlwb3J0QVNTRVJUX0lGX0lOVEVSUlVQVF9QUklPUklUWV9JTlZBTElEKCkgd2lsbCByZXN1bHQgaW4gYW4gYXNzZXJ0aW9uDQo0MzY2OiAgICAgICAgICAgICAgICAJCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzDQo0MzY3OiAgICAgICAgICAgICAgICAJCWJlZW4gYXNzaWduZWQgYSBwcmlvcml0eSBhYm92ZSB0aGUgY29uZmlndXJlZCBtYXhpbXVtIHN5c3RlbSBjYWxsDQo0MzY4OiAgICAgICAgICAgICAgICAJCXByaW9yaXR5LiAgT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkDQo0MzY5OiAgICAgICAgICAgICAgICAJCWZyb20gaW50ZXJydXB0cwl0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCBhIHByaW9yaXR5IGF0IG9yIChsb2dpY2FsbHkpDQo0MzcwOiAgICAgICAgICAgICAgICAJCWJlbG93IHRoZSBtYXhpbXVtIHN5c3RlbSBjYWxsIGludGVycnVwdCBwcmlvcml0eS4gIEZyZWVSVE9TIG1haW50YWlucyBhDQo0MzcxOiAgICAgICAgICAgICAgICAJCXNlcGFyYXRlIGludGVycnVwdCBzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzDQo0MzcyOiAgICAgICAgICAgICAgICAJCXNpbXBsZSBhcyBwb3NzaWJsZS4gIE1vcmUgaW5mb3JtYXRpb24gKGFsYmVpdCBDb3J0ZXgtTSBzcGVjaWZpYykgaXMNCjQzNzM6ICAgICAgICAgICAgICAgIAkJcHJvdmlkZWQgb24gdGhlIGZvbGxvd2luZyBsaW5rOg0KNDM3NDogICAgICAgICAgICAgICAgCQlodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQo0Mzc1OiAgICAgICAgICAgICAgICAJCXBvcnRBU1NFUlRfSUZfSU5URVJSVVBUX1BSSU9SSVRZX0lOVkFMSUQoKTsNCjQzNzY6ICAgICAgICAgICAgICAgIA0KNDM3NzogICAgICAgICAgICAgICAgCQlweFRDQiA9ICggVENCX3QgKiApIHhUYXNrVG9Ob3RpZnk7DQpCRkQwMzFCQSAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwMzFCRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo0Mzc4OiAgICAgICAgICAgICAgICANCjQzNzk6ICAgICAgICAgICAgICAgIAkJdXhTYXZlZEludGVycnVwdFN0YXR1cyA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDAzMUMyICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDAzMUM2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDMxQzggIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KNDM4MDogICAgICAgICAgICAgICAgCQl7DQo0MzgxOiAgICAgICAgICAgICAgICAJCQllT3JpZ2luYWxOb3RpZnlTdGF0ZSA9IHB4VENCLT5lTm90aWZ5U3RhdGU7DQpCRkQwMzFDQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzFEMCAgMDA0Q0ZDNDIgICBMVyBWMCwgNzYoVjApDQpCRkQwMzFENCAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQo0MzgyOiAgICAgICAgICAgICAgICAJCQlweFRDQi0+ZU5vdGlmeVN0YXRlID0gZU5vdGlmaWVkOw0KQkZEMDMxRDggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDMxREMgICAgICBFRDgyICAgTEkgVjEsIDINCkJGRDAzMURFICAwMDRDRjg2MiAgIFNXIFYxLCA3NihWMCkNCjQzODM6ICAgICAgICAgICAgICAgIA0KNDM4NDogICAgICAgICAgICAgICAgCQkJLyogJ0dpdmluZycgaXMgZXF1aXZhbGVudCB0byBpbmNyZW1lbnRpbmcgYSBjb3VudCBpbiBhIGNvdW50aW5nDQo0Mzg1OiAgICAgICAgICAgICAgICAJCQlzZW1hcGhvcmUuICovDQo0Mzg2OiAgICAgICAgICAgICAgICAJCQkoIHB4VENCLT51bE5vdGlmaWVkVmFsdWUgKSsrOw0KQkZEMDMxRTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDMxRTYgIDAwNDhGQzQyICAgTFcgVjAsIDcyKFYwKQ0KQkZEMDMxRUEgICAgICA2REEwICAgQURESVUgVjEsIFYwLCAxDQpCRkQwMzFFQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzFGMCAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApDQo0Mzg3OiAgICAgICAgICAgICAgICANCjQzODg6ICAgICAgICAgICAgICAgIAkJCS8qIElmIHRoZSB0YXNrIGlzIGluIHRoZSBibG9ja2VkIHN0YXRlIHNwZWNpZmljYWxseSB0byB3YWl0IGZvciBhDQo0Mzg5OiAgICAgICAgICAgICAgICAJCQlub3RpZmljYXRpb24gdGhlbiB1bmJsb2NrIGl0IG5vdy4gKi8NCjQzOTA6ICAgICAgICAgICAgICAgIAkJCWlmKCBlT3JpZ2luYWxOb3RpZnlTdGF0ZSA9PSBlV2FpdGluZ05vdGlmaWNhdGlvbiApDQpCRkQwMzFGNCAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpDQpCRkQwMzFGOCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDMxRkEgIDAwNTdCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMzJBQw0KQkZEMDMxRkMgIDBDMDAwMDU3ICAgU0xMIFYwLCBTNywgMQ0KQkZEMDMxRkUgICAgICAwQzAwICAgTk9QDQo0MzkxOiAgICAgICAgICAgICAgICAJCQl7DQo0MzkyOiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIHRhc2sgc2hvdWxkIG5vdCBoYXZlIGJlZW4gb24gYW4gZXZlbnQgbGlzdC4gKi8NCjQzOTM6ICAgICAgICAgICAgICAgIAkJCQljb25maWdBU1NFUlQoIGxpc3RMSVNUX0lURU1fQ09OVEFJTkVSKCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApID09IE5VTEwgKTsNCkJGRDAzMjAwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzMjA0ICAgICAgNjkyQSAgIExXIFYwLCA0MChWMCkNCkJGRDAzMjA2ICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzMjFDDQpCRkQwMzIwQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDMyMEMgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDMyMEUgIDk4MTAzMDgyICAgQURESVUgQTAsIFYwLCAtMjY2MDgNCkJGRDAzMjEwICAzMEEwOTgxMCAgIFNXQzEgRjAsIDEyNDQ4KFMwKQ0KQkZEMDMyMTIgIDExMjkzMEEwICAgQURESVUgQTEsIFpFUk8sIDQzOTMNCkJGRDAzMjE0ICA3N0U4MTEyOSAgIEFEREkgVDEsIFQxLCAzMDY5Ng0KQkZEMDMyMTYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMzIxOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDMyMUEgICAgICAwQzAwICAgTk9QDQo0Mzk0OiAgICAgICAgICAgICAgICANCjQzOTU6ICAgICAgICAgICAgICAgIAkJCQlpZiggdXhTY2hlZHVsZXJTdXNwZW5kZWQgPT0gKCBVQmFzZVR5cGVfdCApIHBkRkFMU0UgKQ0KQkZEMDMyMUMgIDgwNUNGQzVDICAgTFcgVjAsIC0zMjY3NihHUCkNCkJGRDAzMjIwICAwMDI3NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzMjcyDQo0Mzk2OiAgICAgICAgICAgICAgICAJCQkJew0KNDM5NzogICAgICAgICAgICAgICAgCQkJCQkoIHZvaWQgKSB1eExpc3RSZW1vdmUoICYoIHB4VENCLT54R2VuZXJpY0xpc3RJdGVtICkgKTsNCkJGRDAzMjI0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzMjI4ICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDMyMkEgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzMjJDICAwMEM4NzdFOCAgIEpBTFMgdXhMaXN0UmVtb3ZlDQpCRkQwMzIyRSAgMEMwMDAwQzggICBTTEwgQTIsIFQwLCAxDQpCRkQwMzIzMCAgICAgIDBDMDAgICBOT1ANCjQzOTg6ICAgICAgICAgICAgICAgIAkJCQkJcHJ2QWRkVGFza1RvUmVhZHlMaXN0KCBweFRDQiApOw0KQkZEMDMyMzIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDMyMzYgICAgICA2OTJCICAgTFcgVjAsIDQ0KFYwKQ0KQkZEMDMyMzggICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAzMjNBICAxODEwMDA2MiAgIFNMTFYgVjEsIFYwLCBWMQ0KQkZEMDMyM0MgIEZDNUMxODEwICAgU0IgWkVSTywgLTkzMihTMCkNCkJGRDAzMjNFICA4MDQwRkM1QyAgIExXIFYwLCAtMzI3MDQoR1ApDQpCRkQwMzI0MiAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQ0KQkZEMDMyNDQgIDgwNDBGODVDICAgU1cgVjAsIC0zMjcwNChHUCkNCkJGRDAzMjQ4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzMjRDICAgICAgNjkyQiAgIExXIFYwLCA0NChWMCkNCkJGRDAzMjRFICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAzMjUwICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAzMjUyICAgICAgMDVCNCAgIEFERFUgVjEsIFYwLCBWMQ0KQkZEMDMyNTQgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAzMjU2ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAzMjU4ICA4MDZDMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNjYwDQpCRkQwMzI1QyAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjANCkJGRDAzMjVFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzMjYyICAgICAgNkQyMiAgIEFERElVIFYwLCBWMCwgNA0KQkZEMDMyNjQgICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDAzMjY2ICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwMzI2OCAgM0U0QTc3RTggICBKQUxTIHZMaXN0SW5zZXJ0RW5kDQpCRkQwMzI2QSAgMEMwMDNFNEEgICBMSCBTMiwgMzA3MihUMikNCkJGRDAzMjZDICAgICAgMEMwMCAgIE5PUA0KQkZEMDMyNkUgICAgICBDQzBDICAgQiAweEJGRDAzMjg4DQpCRkQwMzI3MCAgICAgIDBDMDAgICBOT1ANCjQzOTk6ICAgICAgICAgICAgICAgIAkJCQl9DQo0NDAwOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KNDQwMTogICAgICAgICAgICAgICAgCQkJCXsNCjQ0MDI6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIGRlbGF5ZWQgYW5kIHJlYWR5IGxpc3RzIGNhbm5vdCBiZSBhY2Nlc3NlZCwgc28gaG9sZA0KNDQwMzogICAgICAgICAgICAgICAgCQkJCQl0aGlzIHRhc2sgcGVuZGluZyB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIHJlc3VtZWQuICovDQo0NDA0OiAgICAgICAgICAgICAgICAJCQkJCXZMaXN0SW5zZXJ0RW5kKCAmKCB4UGVuZGluZ1JlYWR5TGlzdCApLCAmKCBweFRDQi0+eEV2ZW50TGlzdEl0ZW0gKSApOw0KQkZEMDMyNzIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDMyNzQgIDZEMkMwMDEwICAgRVhUIFpFUk8sIFMwLCAyMCwgMTQNCkJGRDAzMjc2ICAgICAgNkQyQyAgIEFERElVIFYwLCBWMCwgMjQNCkJGRDAzMjc4ICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMzI3QSAgMzA4M0JGRDIgICBMREMxIEYzMCwgMTI0MTkoUzIpDQpCRkQwMzI3QyAgODBEMDMwODMgICBBRERJVSBBMCwgVjEsIC0zMjU2MA0KQkZEMDMyODAgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAzMjgyICAzRTRBNzdFOCAgIEpBTFMgdkxpc3RJbnNlcnRFbmQNCkJGRDAzMjg0ICAwQzAwM0U0QSAgIExIIFMyLCAzMDcyKFQyKQ0KQkZEMDMyODYgICAgICAwQzAwICAgTk9QDQo0NDA1OiAgICAgICAgICAgICAgICAJCQkJfQ0KNDQwNjogICAgICAgICAgICAgICAgDQo0NDA3OiAgICAgICAgICAgICAgICAJCQkJaWYoIHB4VENCLT51eFByaW9yaXR5ID4gcHhDdXJyZW50VENCLT51eFByaW9yaXR5ICkNCkJGRDAzMjg4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzMjhDICAgICAgNjlBQiAgIExXIFYxLCA0NChWMCkNCkJGRDAzMjhFICA4MDMwRkM1QyAgIExXIFYwLCAtMzI3MjAoR1ApDQpCRkQwMzI5MiAgICAgIDY5MkIgICBMVyBWMCwgNDQoVjApDQpCRkQwMzI5NCAgMTM5MDAwNjIgICBTTFRVIFYwLCBWMCwgVjENCkJGRDAzMjk2ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMA0KQkZEMDMyOTggIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDMyQUMNCjQ0MDg6ICAgICAgICAgICAgICAgIAkJCQl7DQo0NDA5OiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBub3RpZmllZCB0YXNrIGhhcyBhIHByaW9yaXR5IGFib3ZlIHRoZSBjdXJyZW50bHkNCjQ0MTA6ICAgICAgICAgICAgICAgIAkJCQkJZXhlY3V0aW5nIHRhc2sgc28gYSB5aWVsZCBpcyByZXF1aXJlZC4gKi8NCjQ0MTE6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gTlVMTCApDQpCRkQwMzI5QyAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpDQpCRkQwMzJBMCAgMDAwNDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzJBQw0KNDQxMjogICAgICAgICAgICAgICAgCQkJCQl7DQo0NDEzOiAgICAgICAgICAgICAgICAJCQkJCQkqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiA9IHBkVFJVRTsNCkJGRDAzMkE0ICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAzMkE4ICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwMzJBQSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQ0MTQ6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KNDQxNTogICAgICAgICAgICAgICAgCQkJCX0NCjQ0MTY6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQo0NDE3OiAgICAgICAgICAgICAgICAJCQkJew0KNDQxODogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo0NDE5OiAgICAgICAgICAgICAgICAJCQkJfQ0KNDQyMDogICAgICAgICAgICAgICAgCQkJfQ0KNDQyMTogICAgICAgICAgICAgICAgCQl9DQo0NDIyOiAgICAgICAgICAgICAgICAJCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDMyQUMgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQ0KQkZEMDMyQjAgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDAzMkIyICAgICAgNEQ1RSAgIEFERElVIFQyLCBUMiwgLTENCkJGRDAzMkI0ICAgICAgMEMwMCAgIE5PUA0KNDQyMzogICAgICAgICAgICAgICAgCX0NCkJGRDAzMkI2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwMzJCOCAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwMzJCQSAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwMzJCQyAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwMzJCRSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwMzJDMCAgICAgIDBDMDAgICBOT1ANCjQ0MjQ6ICAgICAgICAgICAgICAgIA0KNDQyNTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UQVNLX05PVElGSUNBVElPTlMgKi8NCjQ0MjY6ICAgICAgICAgICAgICAgIA0KNDQyNzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0NDI4OiAgICAgICAgICAgICAgICANCjQ0Mjk6ICAgICAgICAgICAgICAgIA0KNDQzMDogICAgICAgICAgICAgICAgI2lmZGVmIEZSRUVSVE9TX01PRFVMRV9URVNUDQo0NDMxOiAgICAgICAgICAgICAgICAJI2luY2x1ZGUgInRhc2tzX3Rlc3RfYWNjZXNzX2Z1bmN0aW9ucy5oIg0KNDQzMjogICAgICAgICAgICAgICAgI2VuZGlmDQo0NDMzOiAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3Mvc291cmNlL3F1ZXVlLmMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoNCjI6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBWOC4yLjEgLSBDb3B5cmlnaHQgKEMpIDIwMTUgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQozOiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KNDogICAgICAgICAgICAgICAgICAgDQo1OiAgICAgICAgICAgICAgICAgICAgICAgVklTSVQgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgVE8gRU5TVVJFIFlPVSBBUkUgVVNJTkcgVEhFIExBVEVTVCBWRVJTSU9OLg0KNjogICAgICAgICAgICAgICAgICAgDQo3OiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCjg6ICAgICAgICAgICAgICAgICAgIA0KOTogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCjEwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCjExOiAgICAgICAgICAgICAgICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gPj4+PiBBTkQgTU9ESUZJRUQgQlkgPDw8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KMTI6ICAgICAgICAgICAgICAgICAgDQoxMzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxNDogICAgICAgICAgICAgICAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQoxNTogICAgICAgICAgICAgICAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQoxNjogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQoxNzogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQoxODogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxOTogICAgICAgICAgICAgICAgICANCjIwOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCjIxOiAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQoyMjogICAgICAgICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCjIzOiAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KMjQ6ICAgICAgICAgICAgICAgICAgDQoyNTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjI3OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KMjg6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQoyOTogICAgICAgICAgICAgICAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCjMwOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzE6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMjogICAgICAgICAgICAgICAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCjMzOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KMzQ6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNTogICAgICAgICAgICAgICAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzc6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCjQwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCjQxOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KNDI6ICAgICAgICAgICAgICAgICAgDQo0MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCjQ0OiAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCjQ1OiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KNDg6ICAgICAgICAgICAgICAgICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQo0OTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQo1MzogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCjU0OiAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQo1NTogICAgICAgICAgICAgICAgICANCjU2OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KNTc6ICAgICAgICAgICAgICAgICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCjY1OiAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCjY2OiAgICAgICAgICAgICAgICAgIA0KNjc6ICAgICAgICAgICAgICAgICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KNjg6ICAgICAgICAgICAgICAgICAgKi8NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KNzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPg0KNzI6ICAgICAgICAgICAgICAgICAgDQo3MzogICAgICAgICAgICAgICAgICAvKiBEZWZpbmluZyBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSBwcmV2ZW50cyB0YXNrLmggZnJvbSByZWRlZmluaW5nDQo3NDogICAgICAgICAgICAgICAgICBhbGwgdGhlIEFQSSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBNUFUgd3JhcHBlcnMuICBUaGF0IHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbg0KNzU6ICAgICAgICAgICAgICAgICAgdGFzay5oIGlzIGluY2x1ZGVkIGZyb20gYW4gYXBwbGljYXRpb24gZmlsZS4gKi8NCjc2OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUNCjc3OiAgICAgICAgICAgICAgICAgIA0KNzg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQo3OTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAidGFzay5oIg0KODA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInF1ZXVlLmgiDQo4MTogICAgICAgICAgICAgICAgICANCjgyOiAgICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyA9PSAxICkNCjgzOiAgICAgICAgICAgICAgICAgIAkjaW5jbHVkZSAiY3JvdXRpbmUuaCINCjg0OiAgICAgICAgICAgICAgICAgICNlbmRpZg0KODU6ICAgICAgICAgICAgICAgICAgDQo4NjogICAgICAgICAgICAgICAgICAvKiBMaW50IGU5NjEgYW5kIGU3NTAgYXJlIHN1cHByZXNzZWQgYXMgYSBNSVNSQSBleGNlcHRpb24ganVzdGlmaWVkIGJlY2F1c2UgdGhlDQo4NzogICAgICAgICAgICAgICAgICBNUFUgcG9ydHMgcmVxdWlyZSBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSB0byBiZSBkZWZpbmVkIGZvciB0aGUNCjg4OiAgICAgICAgICAgICAgICAgIGhlYWRlciBmaWxlcyBhYm92ZSwgYnV0IG5vdCBpbiB0aGlzIGZpbGUsIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjb3JyZWN0DQo4OTogICAgICAgICAgICAgICAgICBwcml2aWxlZ2VkIFZzIHVucHJpdmlsZWdlZCBsaW5rYWdlIGFuZCBwbGFjZW1lbnQuICovDQo5MDogICAgICAgICAgICAgICAgICAjdW5kZWYgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUgLypsaW50ICFlOTYxICFlNzUwLiAqLw0KOTE6ICAgICAgICAgICAgICAgICAgDQo5MjogICAgICAgICAgICAgICAgICANCjkzOiAgICAgICAgICAgICAgICAgIC8qIENvbnN0YW50cyB1c2VkIHdpdGggdGhlIHhSeExvY2sgYW5kIHhUeExvY2sgc3RydWN0dXJlIG1lbWJlcnMuICovDQo5NDogICAgICAgICAgICAgICAgICAjZGVmaW5lIHF1ZXVlVU5MT0NLRUQJCQkJCSggKCBCYXNlVHlwZV90ICkgLTEgKQ0KOTU6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBxdWV1ZUxPQ0tFRF9VTk1PRElGSUVECQkJKCAoIEJhc2VUeXBlX3QgKSAwICkNCjk2OiAgICAgICAgICAgICAgICAgIA0KOTc6ICAgICAgICAgICAgICAgICAgLyogV2hlbiB0aGUgUXVldWVfdCBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgYSBiYXNlIHF1ZXVlIGl0cyBwY0hlYWQgYW5kDQo5ODogICAgICAgICAgICAgICAgICBwY1RhaWwgbWVtYmVycyBhcmUgdXNlZCBhcyBwb2ludGVycyBpbnRvIHRoZSBxdWV1ZSBzdG9yYWdlIGFyZWEuICBXaGVuIHRoZQ0KOTk6ICAgICAgICAgICAgICAgICAgUXVldWVfdCBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgYSBtdXRleCBwY0hlYWQgYW5kIHBjVGFpbCBwb2ludGVycyBhcmUNCjEwMDogICAgICAgICAgICAgICAgIG5vdCBuZWNlc3NhcnksIGFuZCB0aGUgcGNIZWFkIHBvaW50ZXIgaXMgc2V0IHRvIE5VTEwgdG8gaW5kaWNhdGUgdGhhdCB0aGUNCjEwMTogICAgICAgICAgICAgICAgIHBjVGFpbCBwb2ludGVyIGFjdHVhbGx5IHBvaW50cyB0byB0aGUgbXV0ZXggaG9sZGVyIChpZiBhbnkpLiAgTWFwIGFsdGVybmF0aXZlDQoxMDI6ICAgICAgICAgICAgICAgICBuYW1lcyB0byB0aGUgcGNIZWFkIGFuZCBwY1RhaWwgc3RydWN0dXJlIG1lbWJlcnMgdG8gZW5zdXJlIHRoZSByZWFkYWJpbGl0eSBvZg0KMTAzOiAgICAgICAgICAgICAgICAgdGhlIGNvZGUgaXMgbWFpbnRhaW5lZCBkZXNwaXRlIHRoaXMgZHVhbCB1c2Ugb2YgdHdvIHN0cnVjdHVyZSBtZW1iZXJzLiAgQW4NCjEwNDogICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIHdvdWxkIGJlIHRvIHVzZSBhIHVuaW9uLCBidXQgdXNlIG9mIGEgdW5pb24gaXMNCjEwNTogICAgICAgICAgICAgICAgIGFnYWluc3QgdGhlIGNvZGluZyBzdGFuZGFyZCAoYWx0aG91Z2ggYW4gZXhjZXB0aW9uIHRvIHRoZSBzdGFuZGFyZCBoYXMgYmVlbg0KMTA2OiAgICAgICAgICAgICAgICAgcGVybWl0dGVkIHdoZXJlIHRoZSBkdWFsIHVzZSBhbHNvIHNpZ25pZmljYW50bHkgY2hhbmdlcyB0aGUgdHlwZSBvZiB0aGUNCjEwNzogICAgICAgICAgICAgICAgIHN0cnVjdHVyZSBtZW1iZXIpLiAqLw0KMTA4OiAgICAgICAgICAgICAgICAgI2RlZmluZSBweE11dGV4SG9sZGVyCQkJCQlwY1RhaWwNCjEwOTogICAgICAgICAgICAgICAgICNkZWZpbmUgdXhRdWV1ZVR5cGUJCQkJCQlwY0hlYWQNCjExMDogICAgICAgICAgICAgICAgICNkZWZpbmUgcXVldWVRVUVVRV9JU19NVVRFWAkJCQlOVUxMDQoxMTE6ICAgICAgICAgICAgICAgICANCjExMjogICAgICAgICAgICAgICAgIC8qIFNlbWFwaG9yZXMgZG8gbm90IGFjdHVhbGx5IHN0b3JlIG9yIGNvcHkgZGF0YSwgc28gaGF2ZSBhbiBpdGVtIHNpemUgb2YNCjExMzogICAgICAgICAgICAgICAgIHplcm8uICovDQoxMTQ6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHF1ZXVlU0VNQVBIT1JFX1FVRVVFX0lURU1fTEVOR1RIICggKCBVQmFzZVR5cGVfdCApIDAgKQ0KMTE1OiAgICAgICAgICAgICAgICAgI2RlZmluZSBxdWV1ZU1VVEVYX0dJVkVfQkxPQ0tfVElNRQkJICggKCBUaWNrVHlwZV90ICkgMFUgKQ0KMTE2OiAgICAgICAgICAgICAgICAgDQoxMTc6ICAgICAgICAgICAgICAgICAjaWYoIGNvbmZpZ1VTRV9QUkVFTVBUSU9OID09IDAgKQ0KMTE4OiAgICAgICAgICAgICAgICAgCS8qIElmIHRoZSBjb29wZXJhdGl2ZSBzY2hlZHVsZXIgaXMgYmVpbmcgdXNlZCB0aGVuIGEgeWllbGQgc2hvdWxkIG5vdCBiZQ0KMTE5OiAgICAgICAgICAgICAgICAgCXBlcmZvcm1lZCBqdXN0IGJlY2F1c2UgYSBoaWdoZXIgcHJpb3JpdHkgdGFzayBoYXMgYmVlbiB3b2tlbi4gKi8NCjEyMDogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHF1ZXVlWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpDQoxMjE6ICAgICAgICAgICAgICAgICAjZWxzZQ0KMTIyOiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgcXVldWVZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCkgcG9ydFlJRUxEX1dJVEhJTl9BUEkoKQ0KMTIzOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxMjQ6ICAgICAgICAgICAgICAgICANCjEyNTogICAgICAgICAgICAgICAgIC8qDQoxMjY6ICAgICAgICAgICAgICAgICAgKiBEZWZpbml0aW9uIG9mIHRoZSBxdWV1ZSB1c2VkIGJ5IHRoZSBzY2hlZHVsZXIuDQoxMjc6ICAgICAgICAgICAgICAgICAgKiBJdGVtcyBhcmUgcXVldWVkIGJ5IGNvcHksIG5vdCByZWZlcmVuY2UuICBTZWUgdGhlIGZvbGxvd2luZyBsaW5rIGZvciB0aGUNCjEyODogICAgICAgICAgICAgICAgICAqIHJhdGlvbmFsZTogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvRW1iZWRkZWQtUlRPUy1RdWV1ZXMuaHRtbA0KMTI5OiAgICAgICAgICAgICAgICAgICovDQoxMzA6ICAgICAgICAgICAgICAgICB0eXBlZGVmIHN0cnVjdCBRdWV1ZURlZmluaXRpb24NCjEzMTogICAgICAgICAgICAgICAgIHsNCjEzMjogICAgICAgICAgICAgICAgIAlpbnQ4X3QgKnBjSGVhZDsJCQkJCS8qPCBQb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVldWUgc3RvcmFnZSBhcmVhLiAqLw0KMTMzOiAgICAgICAgICAgICAgICAgCWludDhfdCAqcGNUYWlsOwkJCQkJLyo8IFBvaW50cyB0byB0aGUgYnl0ZSBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZSBzdG9yYWdlIGFyZWEuICBPbmNlIG1vcmUgYnl0ZSBpcyBhbGxvY2F0ZWQgdGhhbiBuZWNlc3NhcnkgdG8gc3RvcmUgdGhlIHF1ZXVlIGl0ZW1zLCB0aGlzIGlzIHVzZWQgYXMgYSBtYXJrZXIuICovDQoxMzQ6ICAgICAgICAgICAgICAgICAJaW50OF90ICpwY1dyaXRlVG87CQkJCS8qPCBQb2ludHMgdG8gdGhlIGZyZWUgbmV4dCBwbGFjZSBpbiB0aGUgc3RvcmFnZSBhcmVhLiAqLw0KMTM1OiAgICAgICAgICAgICAgICAgDQoxMzY6ICAgICAgICAgICAgICAgICAJdW5pb24JCQkJCQkJLyogVXNlIG9mIGEgdW5pb24gaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBjb2Rpbmcgc3RhbmRhcmQgdG8gZW5zdXJlIHR3byBtdXR1YWxseSBleGNsdXNpdmUgc3RydWN0dXJlIG1lbWJlcnMgZG9uJ3QgYXBwZWFyIHNpbXVsdGFuZW91c2x5ICh3YXN0aW5nIFJBTSkuICovDQoxMzc6ICAgICAgICAgICAgICAgICAJew0KMTM4OiAgICAgICAgICAgICAgICAgCQlpbnQ4X3QgKnBjUmVhZEZyb207CQkJLyo8IFBvaW50cyB0byB0aGUgbGFzdCBwbGFjZSB0aGF0IGEgcXVldWVkIGl0ZW0gd2FzIHJlYWQgZnJvbSB3aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyBhIHF1ZXVlLiAqLw0KMTM5OiAgICAgICAgICAgICAgICAgCQlVQmFzZVR5cGVfdCB1eFJlY3Vyc2l2ZUNhbGxDb3VudDsvKjwgTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiB0aW1lcyBhIHJlY3Vyc2l2ZSBtdXRleCBoYXMgYmVlbiByZWN1cnNpdmVseSAndGFrZW4nIHdoZW4gdGhlIHN0cnVjdHVyZSBpcyB1c2VkIGFzIGEgbXV0ZXguICovDQoxNDA6ICAgICAgICAgICAgICAgICAJfSB1Ow0KMTQxOiAgICAgICAgICAgICAgICAgDQoxNDI6ICAgICAgICAgICAgICAgICAJTGlzdF90IHhUYXNrc1dhaXRpbmdUb1NlbmQ7CQkvKjwgTGlzdCBvZiB0YXNrcyB0aGF0IGFyZSBibG9ja2VkIHdhaXRpbmcgdG8gcG9zdCBvbnRvIHRoaXMgcXVldWUuICBTdG9yZWQgaW4gcHJpb3JpdHkgb3JkZXIuICovDQoxNDM6ICAgICAgICAgICAgICAgICAJTGlzdF90IHhUYXNrc1dhaXRpbmdUb1JlY2VpdmU7CS8qPCBMaXN0IG9mIHRhc2tzIHRoYXQgYXJlIGJsb2NrZWQgd2FpdGluZyB0byByZWFkIGZyb20gdGhpcyBxdWV1ZS4gIFN0b3JlZCBpbiBwcmlvcml0eSBvcmRlci4gKi8NCjE0NDogICAgICAgICAgICAgICAgIA0KMTQ1OiAgICAgICAgICAgICAgICAgCXZvbGF0aWxlIFVCYXNlVHlwZV90IHV4TWVzc2FnZXNXYWl0aW5nOy8qPCBUaGUgbnVtYmVyIG9mIGl0ZW1zIGN1cnJlbnRseSBpbiB0aGUgcXVldWUuICovDQoxNDY6ICAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhMZW5ndGg7CQkJLyo8IFRoZSBsZW5ndGggb2YgdGhlIHF1ZXVlIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBpdGVtcyBpdCB3aWxsIGhvbGQsIG5vdCB0aGUgbnVtYmVyIG9mIGJ5dGVzLiAqLw0KMTQ3OiAgICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4SXRlbVNpemU7CQkJLyo8IFRoZSBzaXplIG9mIGVhY2ggaXRlbXMgdGhhdCB0aGUgcXVldWUgd2lsbCBob2xkLiAqLw0KMTQ4OiAgICAgICAgICAgICAgICAgDQoxNDk6ICAgICAgICAgICAgICAgICAJdm9sYXRpbGUgQmFzZVR5cGVfdCB4UnhMb2NrOwkvKjwgU3RvcmVzIHRoZSBudW1iZXIgb2YgaXRlbXMgcmVjZWl2ZWQgZnJvbSB0aGUgcXVldWUgKHJlbW92ZWQgZnJvbSB0aGUgcXVldWUpIHdoaWxlIHRoZSBxdWV1ZSB3YXMgbG9ja2VkLiAgU2V0IHRvIHF1ZXVlVU5MT0NLRUQgd2hlbiB0aGUgcXVldWUgaXMgbm90IGxvY2tlZC4gKi8NCjE1MDogICAgICAgICAgICAgICAgIAl2b2xhdGlsZSBCYXNlVHlwZV90IHhUeExvY2s7CS8qPCBTdG9yZXMgdGhlIG51bWJlciBvZiBpdGVtcyB0cmFuc21pdHRlZCB0byB0aGUgcXVldWUgKGFkZGVkIHRvIHRoZSBxdWV1ZSkgd2hpbGUgdGhlIHF1ZXVlIHdhcyBsb2NrZWQuICBTZXQgdG8gcXVldWVVTkxPQ0tFRCB3aGVuIHRoZSBxdWV1ZSBpcyBub3QgbG9ja2VkLiAqLw0KMTUxOiAgICAgICAgICAgICAgICAgDQoxNTI6ICAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KMTUzOiAgICAgICAgICAgICAgICAgCQlVQmFzZVR5cGVfdCB1eFF1ZXVlTnVtYmVyOw0KMTU0OiAgICAgICAgICAgICAgICAgCQl1aW50OF90IHVjUXVldWVUeXBlOw0KMTU1OiAgICAgICAgICAgICAgICAgCSNlbmRpZg0KMTU2OiAgICAgICAgICAgICAgICAgDQoxNTc6ICAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQoxNTg6ICAgICAgICAgICAgICAgICAJCXN0cnVjdCBRdWV1ZURlZmluaXRpb24gKnB4UXVldWVTZXRDb250YWluZXI7DQoxNTk6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNjA6ICAgICAgICAgICAgICAgICANCjE2MTogICAgICAgICAgICAgICAgIH0geFFVRVVFOw0KMTYyOiAgICAgICAgICAgICAgICAgDQoxNjM6ICAgICAgICAgICAgICAgICAvKiBUaGUgb2xkIHhRVUVVRSBuYW1lIGlzIG1haW50YWluZWQgYWJvdmUgdGhlbiB0eXBlZGVmZWQgdG8gdGhlIG5ldyBRdWV1ZV90DQoxNjQ6ICAgICAgICAgICAgICAgICBuYW1lIGJlbG93IHRvIGVuYWJsZSB0aGUgdXNlIG9mIG9sZGVyIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlcnMuICovDQoxNjU6ICAgICAgICAgICAgICAgICB0eXBlZGVmIHhRVUVVRSBRdWV1ZV90Ow0KMTY2OiAgICAgICAgICAgICAgICAgDQoxNjc6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE2ODogICAgICAgICAgICAgICAgIA0KMTY5OiAgICAgICAgICAgICAgICAgLyoNCjE3MDogICAgICAgICAgICAgICAgICAqIFRoZSBxdWV1ZSByZWdpc3RyeSBpcyBqdXN0IGEgbWVhbnMgZm9yIGtlcm5lbCBhd2FyZSBkZWJ1Z2dlcnMgdG8gbG9jYXRlDQoxNzE6ICAgICAgICAgICAgICAgICAgKiBxdWV1ZSBzdHJ1Y3R1cmVzLiAgSXQgaGFzIG5vIG90aGVyIHB1cnBvc2Ugc28gaXMgYW4gb3B0aW9uYWwgY29tcG9uZW50Lg0KMTcyOiAgICAgICAgICAgICAgICAgICovDQoxNzM6ICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFID4gMCApDQoxNzQ6ICAgICAgICAgICAgICAgICANCjE3NTogICAgICAgICAgICAgICAgIAkvKiBUaGUgdHlwZSBzdG9yZWQgd2l0aGluIHRoZSBxdWV1ZSByZWdpc3RyeSBhcnJheS4gIFRoaXMgYWxsb3dzIGEgbmFtZQ0KMTc2OiAgICAgICAgICAgICAgICAgCXRvIGJlIGFzc2lnbmVkIHRvIGVhY2ggcXVldWUgbWFraW5nIGtlcm5lbCBhd2FyZSBkZWJ1Z2dpbmcgYSBsaXR0bGUNCjE3NzogICAgICAgICAgICAgICAgIAltb3JlIHVzZXIgZnJpZW5kbHkuICovDQoxNzg6ICAgICAgICAgICAgICAgICAJdHlwZWRlZiBzdHJ1Y3QgUVVFVUVfUkVHSVNUUllfSVRFTQ0KMTc5OiAgICAgICAgICAgICAgICAgCXsNCjE4MDogICAgICAgICAgICAgICAgIAkJY29uc3QgY2hhciAqcGNRdWV1ZU5hbWU7IC8qbGludCAhZTk3MSBVbnF1YWxpZmllZCBjaGFyIHR5cGVzIGFyZSBhbGxvd2VkIGZvciBzdHJpbmdzIGFuZCBzaW5nbGUgY2hhcmFjdGVycyBvbmx5LiAqLw0KMTgxOiAgICAgICAgICAgICAgICAgCQlRdWV1ZUhhbmRsZV90IHhIYW5kbGU7DQoxODI6ICAgICAgICAgICAgICAgICAJfSB4UXVldWVSZWdpc3RyeUl0ZW07DQoxODM6ICAgICAgICAgICAgICAgICANCjE4NDogICAgICAgICAgICAgICAgIAkvKiBUaGUgb2xkIHhRdWV1ZVJlZ2lzdHJ5SXRlbSBuYW1lIGlzIG1haW50YWluZWQgYWJvdmUgdGhlbiB0eXBlZGVmZWQgdG8gdGhlDQoxODU6ICAgICAgICAgICAgICAgICAJbmV3IHhRdWV1ZVJlZ2lzdHJ5SXRlbSBuYW1lIGJlbG93IHRvIGVuYWJsZSB0aGUgdXNlIG9mIG9sZGVyIGtlcm5lbCBhd2FyZQ0KMTg2OiAgICAgICAgICAgICAgICAgCWRlYnVnZ2Vycy4gKi8NCjE4NzogICAgICAgICAgICAgICAgIAl0eXBlZGVmIHhRdWV1ZVJlZ2lzdHJ5SXRlbSBRdWV1ZVJlZ2lzdHJ5SXRlbV90Ow0KMTg4OiAgICAgICAgICAgICAgICAgDQoxODk6ICAgICAgICAgICAgICAgICAJLyogVGhlIHF1ZXVlIHJlZ2lzdHJ5IGlzIHNpbXBseSBhbiBhcnJheSBvZiBRdWV1ZVJlZ2lzdHJ5SXRlbV90IHN0cnVjdHVyZXMuDQoxOTA6ICAgICAgICAgICAgICAgICAJVGhlIHBjUXVldWVOYW1lIG1lbWJlciBvZiBhIHN0cnVjdHVyZSBiZWluZyBOVUxMIGlzIGluZGljYXRpdmUgb2YgdGhlDQoxOTE6ICAgICAgICAgICAgICAgICAJYXJyYXkgcG9zaXRpb24gYmVpbmcgdmFjYW50LiAqLw0KMTkyOiAgICAgICAgICAgICAgICAgCVBSSVZJTEVHRURfREFUQSBRdWV1ZVJlZ2lzdHJ5SXRlbV90IHhRdWV1ZVJlZ2lzdHJ5WyBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFIF07DQoxOTM6ICAgICAgICAgICAgICAgICANCjE5NDogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFICovDQoxOTU6ICAgICAgICAgICAgICAgICANCjE5NjogICAgICAgICAgICAgICAgIC8qDQoxOTc6ICAgICAgICAgICAgICAgICAgKiBVbmxvY2tzIGEgcXVldWUgbG9ja2VkIGJ5IGEgY2FsbCB0byBwcnZMb2NrUXVldWUuICBMb2NraW5nIGEgcXVldWUgZG9lcyBub3QNCjE5ODogICAgICAgICAgICAgICAgICAqIHByZXZlbnQgYW4gSVNSIGZyb20gYWRkaW5nIG9yIHJlbW92aW5nIGl0ZW1zIHRvIHRoZSBxdWV1ZSwgYnV0IGRvZXMgcHJldmVudA0KMTk5OiAgICAgICAgICAgICAgICAgICogYW4gSVNSIGZyb20gcmVtb3ZpbmcgdGFza3MgZnJvbSB0aGUgcXVldWUgZXZlbnQgbGlzdHMuICBJZiBhbiBJU1IgZmluZHMgYQ0KMjAwOiAgICAgICAgICAgICAgICAgICogcXVldWUgaXMgbG9ja2VkIGl0IHdpbGwgaW5zdGVhZCBpbmNyZW1lbnQgdGhlIGFwcHJvcHJpYXRlIHF1ZXVlIGxvY2sgY291bnQNCjIwMTogICAgICAgICAgICAgICAgICAqIHRvIGluZGljYXRlIHRoYXQgYSB0YXNrIG1heSByZXF1aXJlIHVuYmxvY2tpbmcuICBXaGVuIHRoZSBxdWV1ZSBpbiB1bmxvY2tlZA0KMjAyOiAgICAgICAgICAgICAgICAgICogdGhlc2UgbG9jayBjb3VudHMgYXJlIGluc3BlY3RlZCwgYW5kIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24gdGFrZW4uDQoyMDM6ICAgICAgICAgICAgICAgICAgKi8NCjIwNDogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydlVubG9ja1F1ZXVlKCBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoyMDU6ICAgICAgICAgICAgICAgICANCjIwNjogICAgICAgICAgICAgICAgIC8qDQoyMDc6ICAgICAgICAgICAgICAgICAgKiBVc2VzIGEgY3JpdGljYWwgc2VjdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYW55IGRhdGEgaW4gYSBxdWV1ZS4NCjIwODogICAgICAgICAgICAgICAgICAqDQoyMDk6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHBkVFJVRSBpZiB0aGUgcXVldWUgY29udGFpbnMgbm8gaXRlbXMsIG90aGVyd2lzZSBwZEZBTFNFLg0KMjEwOiAgICAgICAgICAgICAgICAgICovDQoyMTE6ICAgICAgICAgICAgICAgICBzdGF0aWMgQmFzZVR5cGVfdCBwcnZJc1F1ZXVlRW1wdHkoIGNvbnN0IFF1ZXVlX3QgKnB4UXVldWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMjEyOiAgICAgICAgICAgICAgICAgDQoyMTM6ICAgICAgICAgICAgICAgICAvKg0KMjE0OiAgICAgICAgICAgICAgICAgICogVXNlcyBhIGNyaXRpY2FsIHNlY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGFueSBzcGFjZSBpbiBhIHF1ZXVlLg0KMjE1OiAgICAgICAgICAgICAgICAgICoNCjIxNjogICAgICAgICAgICAgICAgICAqIEByZXR1cm4gcGRUUlVFIGlmIHRoZXJlIGlzIG5vIHNwYWNlLCBvdGhlcndpc2UgcGRGQUxTRTsNCjIxNzogICAgICAgICAgICAgICAgICAqLw0KMjE4OiAgICAgICAgICAgICAgICAgc3RhdGljIEJhc2VUeXBlX3QgcHJ2SXNRdWV1ZUZ1bGwoIGNvbnN0IFF1ZXVlX3QgKnB4UXVldWUgKSBQUklWSUxFR0VEX0ZVTkNUSU9OOw0KMjE5OiAgICAgICAgICAgICAgICAgDQoyMjA6ICAgICAgICAgICAgICAgICAvKg0KMjIxOiAgICAgICAgICAgICAgICAgICogQ29waWVzIGFuIGl0ZW0gaW50byB0aGUgcXVldWUsIGVpdGhlciBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIG9yIHRoZQ0KMjIyOiAgICAgICAgICAgICAgICAgICogYmFjayBvZiB0aGUgcXVldWUuDQoyMjM6ICAgICAgICAgICAgICAgICAgKi8NCjIyNDogICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHBydkNvcHlEYXRhVG9RdWV1ZSggUXVldWVfdCAqIGNvbnN0IHB4UXVldWUsIGNvbnN0IHZvaWQgKnB2SXRlbVRvUXVldWUsIGNvbnN0IEJhc2VUeXBlX3QgeFBvc2l0aW9uICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjIyNTogICAgICAgICAgICAgICAgIA0KMjI2OiAgICAgICAgICAgICAgICAgLyoNCjIyNzogICAgICAgICAgICAgICAgICAqIENvcGllcyBhbiBpdGVtIG91dCBvZiBhIHF1ZXVlLg0KMjI4OiAgICAgICAgICAgICAgICAgICovDQoyMjk6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZDb3B5RGF0YUZyb21RdWV1ZSggUXVldWVfdCAqIGNvbnN0IHB4UXVldWUsIHZvaWQgKiBjb25zdCBwdkJ1ZmZlciApIFBSSVZJTEVHRURfRlVOQ1RJT047DQoyMzA6ICAgICAgICAgICAgICAgICANCjIzMTogICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMjMyOiAgICAgICAgICAgICAgICAgCS8qDQoyMzM6ICAgICAgICAgICAgICAgICAJICogQ2hlY2tzIHRvIHNlZSBpZiBhIHF1ZXVlIGlzIGEgbWVtYmVyIG9mIGEgcXVldWUgc2V0LCBhbmQgaWYgc28sIG5vdGlmaWVzDQoyMzQ6ICAgICAgICAgICAgICAgICAJICogdGhlIHF1ZXVlIHNldCB0aGF0IHRoZSBxdWV1ZSBjb250YWlucyBkYXRhLg0KMjM1OiAgICAgICAgICAgICAgICAgCSAqLw0KMjM2OiAgICAgICAgICAgICAgICAgCXN0YXRpYyBCYXNlVHlwZV90IHBydk5vdGlmeVF1ZXVlU2V0Q29udGFpbmVyKCBjb25zdCBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSwgY29uc3QgQmFzZVR5cGVfdCB4Q29weVBvc2l0aW9uICkgUFJJVklMRUdFRF9GVU5DVElPTjsNCjIzNzogICAgICAgICAgICAgICAgICNlbmRpZg0KMjM4OiAgICAgICAgICAgICAgICAgDQoyMzk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI0MDogICAgICAgICAgICAgICAgIA0KMjQxOiAgICAgICAgICAgICAgICAgLyoNCjI0MjogICAgICAgICAgICAgICAgICAqIE1hY3JvIHRvIG1hcmsgYSBxdWV1ZSBhcyBsb2NrZWQuICBMb2NraW5nIGEgcXVldWUgcHJldmVudHMgYW4gSVNSIGZyb20NCjI0MzogICAgICAgICAgICAgICAgICAqIGFjY2Vzc2luZyB0aGUgcXVldWUgZXZlbnQgbGlzdHMuDQoyNDQ6ICAgICAgICAgICAgICAgICAgKi8NCjI0NTogICAgICAgICAgICAgICAgICNkZWZpbmUgcHJ2TG9ja1F1ZXVlKCBweFF1ZXVlICkJCQkJCQkJCVwNCjI0NjogICAgICAgICAgICAgICAgIAl0YXNrRU5URVJfQ1JJVElDQUwoKTsJCQkJCQkJCQlcDQoyNDc6ICAgICAgICAgICAgICAgICAJewkJCQkJCQkJCQkJCQkJXA0KMjQ4OiAgICAgICAgICAgICAgICAgCQlpZiggKCBweFF1ZXVlICktPnhSeExvY2sgPT0gcXVldWVVTkxPQ0tFRCApCQkJXA0KMjQ5OiAgICAgICAgICAgICAgICAgCQl7CQkJCQkJCQkJCQkJCVwNCjI1MDogICAgICAgICAgICAgICAgIAkJCSggcHhRdWV1ZSApLT54UnhMb2NrID0gcXVldWVMT0NLRURfVU5NT0RJRklFRDsJXA0KMjUxOiAgICAgICAgICAgICAgICAgCQl9CQkJCQkJCQkJCQkJCVwNCjI1MjogICAgICAgICAgICAgICAgIAkJaWYoICggcHhRdWV1ZSApLT54VHhMb2NrID09IHF1ZXVlVU5MT0NLRUQgKQkJCVwNCjI1MzogICAgICAgICAgICAgICAgIAkJewkJCQkJCQkJCQkJCQlcDQoyNTQ6ICAgICAgICAgICAgICAgICAJCQkoIHB4UXVldWUgKS0+eFR4TG9jayA9IHF1ZXVlTE9DS0VEX1VOTU9ESUZJRUQ7CVwNCjI1NTogICAgICAgICAgICAgICAgIAkJfQkJCQkJCQkJCQkJCQlcDQoyNTY6ICAgICAgICAgICAgICAgICAJfQkJCQkJCQkJCQkJCQkJXA0KMjU3OiAgICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCkNCjI1ODogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjU5OiAgICAgICAgICAgICAgICAgDQoyNjA6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhRdWV1ZUdlbmVyaWNSZXNldCggUXVldWVIYW5kbGVfdCB4UXVldWUsIEJhc2VUeXBlX3QgeE5ld1F1ZXVlICkNCjI2MTogICAgICAgICAgICAgICAgIHsNCkJGRDAzODhDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwMzg4RSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwMzg5MCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwMzg5MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDM4OTQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KQkZEMDM4OTggIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQ0KMjYyOiAgICAgICAgICAgICAgICAgUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZTsNCkJGRDAzODlDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAzOEEwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjI2MzogICAgICAgICAgICAgICAgIA0KMjY0OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KQkZEMDM4QTQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM4QTggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDM4QkUNCkJGRDAzOEFDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMzhBRSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMzhCMCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDM4QjIgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDM4QjQgIDAxMDgzMEEwICAgQURESVUgQTEsIFpFUk8sIDI2NA0KQkZEMDM4QjggIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMzhCQSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDM4QkMgICAgICAwQzAwICAgTk9QDQoyNjU6ICAgICAgICAgICAgICAgICANCjI2NjogICAgICAgICAgICAgICAgIAl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAzOEJFICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwMzhDMCAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDAzOEMyICAgICAgMEMwMCAgIE5PUA0KMjY3OiAgICAgICAgICAgICAgICAgCXsNCjI2ODogICAgICAgICAgICAgICAgIAkJcHhRdWV1ZS0+cGNUYWlsID0gcHhRdWV1ZS0+cGNIZWFkICsgKCBweFF1ZXVlLT51eExlbmd0aCAqIHB4UXVldWUtPnV4SXRlbVNpemUgKTsNCkJGRDAzOEM0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzOEM4ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDM4Q0EgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDM4Q0UgICAgICA2QTNGICAgTFcgQTAsIDYwKFYxKQ0KQkZEMDM4RDAgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDM4RDQgIDAwNDBGQzYzICAgTFcgVjEsIDY0KFYxKQ0KQkZEMDM4RDggIDFBMTAwMDY0ICAgTVVMIFYxLCBBMCwgVjENCkJGRDAzOERBICAwNUI0MUExMCAgIFNCIFMwLCAxNDYwKFMwKQ0KQkZEMDM4REMgICAgICAwNUI0ICAgQUREVSBWMSwgVjAsIFYxDQpCRkQwMzhERSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzhFMiAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkNCjI2OTogICAgICAgICAgICAgICAgIAkJcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPSAoIFVCYXNlVHlwZV90ICkgMFU7DQpCRkQwMzhFNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzhFOCAgICAgIEU4MkUgICBTVyBTMCwgNTYoVjApDQoyNzA6ICAgICAgICAgICAgICAgICAJCXB4UXVldWUtPnBjV3JpdGVUbyA9IHB4UXVldWUtPnBjSGVhZDsNCkJGRDAzOEVBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzOEVFICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDM4RjAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM4RjQgICAgICBFOUEyICAgU1cgVjEsIDgoVjApDQoyNzE6ICAgICAgICAgICAgICAgICAJCXB4UXVldWUtPnUucGNSZWFkRnJvbSA9IHB4UXVldWUtPnBjSGVhZCArICggKCBweFF1ZXVlLT51eExlbmd0aCAtICggVUJhc2VUeXBlX3QgKSAxVSApICogcHhRdWV1ZS0+dXhJdGVtU2l6ZSApOw0KQkZEMDM4RjYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM4RkEgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMzhGQyAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwMzkwMCAgICAgIDY5QkYgICBMVyBWMSwgNjAoVjEpDQpCRkQwMzkwMiAgICAgIDZFM0UgICBBRERJVSBBMCwgVjEsIC0xDQpCRkQwMzkwNCAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwMzkwOCAgMDA0MEZDNjMgICBMVyBWMSwgNjQoVjEpDQpCRkQwMzkwQyAgMUExMDAwNjQgICBNVUwgVjEsIEEwLCBWMQ0KQkZEMDM5MEUgIDA1QjQxQTEwICAgU0IgUzAsIDE0NjAoUzApDQpCRkQwMzkxMCAgICAgIDA1QjQgICBBRERVIFYxLCBWMCwgVjENCkJGRDAzOTEyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzOTE2ICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkNCjI3MjogICAgICAgICAgICAgICAgIAkJcHhRdWV1ZS0+eFJ4TG9jayA9IHF1ZXVlVU5MT0NLRUQ7DQpCRkQwMzkxOCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzkxQyAgICAgIEVERkYgICBMSSBWMSwgLTENCkJGRDAzOTFFICAwMDQ0Rjg2MiAgIFNXIFYxLCA2OChWMCkNCjI3MzogICAgICAgICAgICAgICAgIAkJcHhRdWV1ZS0+eFR4TG9jayA9IHF1ZXVlVU5MT0NLRUQ7DQpCRkQwMzkyMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzkyNiAgICAgIEVERkYgICBMSSBWMSwgLTENCkJGRDAzOTI4ICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkNCjI3NDogICAgICAgICAgICAgICAgIA0KMjc1OiAgICAgICAgICAgICAgICAgCQlpZiggeE5ld1F1ZXVlID09IHBkRkFMU0UgKQ0KQkZEMDM5MkMgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDM5MzAgIDAwMjM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDM5N0ENCjI3NjogICAgICAgICAgICAgICAgIAkJew0KMjc3OiAgICAgICAgICAgICAgICAgCQkJLyogSWYgdGhlcmUgYXJlIHRhc2tzIGJsb2NrZWQgd2FpdGluZyB0byByZWFkIGZyb20gdGhlIHF1ZXVlLCB0aGVuDQoyNzg6ICAgICAgICAgICAgICAgICAJCQl0aGUgdGFza3Mgd2lsbCByZW1haW4gYmxvY2tlZCBhcyBhZnRlciB0aGlzIGZ1bmN0aW9uIGV4aXRzIHRoZSBxdWV1ZQ0KMjc5OiAgICAgICAgICAgICAgICAgCQkJd2lsbCBzdGlsbCBiZSBlbXB0eS4gIElmIHRoZXJlIGFyZSB0YXNrcyBibG9ja2VkIHdhaXRpbmcgdG8gd3JpdGUgdG8NCjI4MDogICAgICAgICAgICAgICAgIAkJCXRoZSBxdWV1ZSwgdGhlbiBvbmUgc2hvdWxkIGJlIHVuYmxvY2tlZCBhcyBhZnRlciB0aGlzIGZ1bmN0aW9uIGV4aXRzDQoyODE6ICAgICAgICAgICAgICAgICAJCQlpdCB3aWxsIGJlIHBvc3NpYmxlIHRvIHdyaXRlIHRvIGl0LiAqLw0KMjgyOiAgICAgICAgICAgICAgICAgCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCkJGRDAzOTM0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzOTM4ICAgICAgNjkyNCAgIExXIFYwLCAxNihWMCkNCkJGRDAzOTNBICAwMDJENDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzOTk4DQoyODM6ICAgICAgICAgICAgICAgICAJCQl7DQoyODQ6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgPT0gcGRUUlVFICkNCkJGRDAzOTNFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAzOTQyICAgICAgNkQyOCAgIEFERElVIFYwLCBWMCwgMTYNCkJGRDAzOTQ0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwMzk0NiAgMjJCQzc3RTggICBKQUxTIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdA0KQkZEMDM5NDggIDBDMDAyMkJDICAgTFdDMiBTNSwgMzA3MihHUCkNCkJGRDAzOTRBICAgICAgMEMwMCAgIE5PUA0KQkZEMDM5NEMgICAgICAwQzYyICAgTU9WRSBWMSwgVjANCkJGRDAzOTRFICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMzk1MCAgMDAyMkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAzOTk4DQpCRkQwMzk1MiAgMEMwMDAwMjIgICBTTEwgQVQsIFYwLCAxDQpCRkQwMzk1NCAgICAgIDBDMDAgICBOT1ANCjI4NTogICAgICAgICAgICAgICAgIAkJCQl7DQoyODY6ICAgICAgICAgICAgICAgICAJCQkJCXF1ZXVlWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpOw0KQkZEMDM5NTYgIDRFMTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQ0KQkZEMDM5NTggICAgICA0RTE2ICAgQURESVUgUzAsIFMwLCAtNQ0KQkZEMDM5NUEgICAgICAwQzAwICAgTk9QDQpCRkQwMzk1QyAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQpCRkQwMzk2MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMzk2NCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDAzOTY4ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCkJGRDAzOTZDICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDAzOTcwICA0RTI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQ0KQkZEMDM5NzIgICAgICA0RTI2ICAgQURESVUgUzEsIFMxLCAzDQpCRkQwMzk3NCAgICAgIDBDMDAgICBOT1ANCkJGRDAzOTc2ICAgICAgQ0MxMCAgIEIgMHhCRkQwMzk5OA0KQkZEMDM5NzggICAgICAwQzAwICAgTk9QDQoyODc6ICAgICAgICAgICAgICAgICAJCQkJfQ0KMjg4OiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjI4OTogICAgICAgICAgICAgICAgIAkJCQl7DQoyOTA6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjI5MTogICAgICAgICAgICAgICAgIAkJCQl9DQoyOTI6ICAgICAgICAgICAgICAgICAJCQl9DQoyOTM6ICAgICAgICAgICAgICAgICAJCQllbHNlDQoyOTQ6ICAgICAgICAgICAgICAgICAJCQl7DQoyOTU6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjk2OiAgICAgICAgICAgICAgICAgCQkJfQ0KMjk3OiAgICAgICAgICAgICAgICAgCQl9DQoyOTg6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjI5OTogICAgICAgICAgICAgICAgIAkJew0KMzAwOiAgICAgICAgICAgICAgICAgCQkJLyogRW5zdXJlIHRoZSBldmVudCBxdWV1ZXMgc3RhcnQgaW4gdGhlIGNvcnJlY3Qgc3RhdGUuICovDQozMDE6ICAgICAgICAgICAgICAgICAJCQl2TGlzdEluaXRpYWxpc2UoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApOw0KQkZEMDM5N0EgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDM5N0UgICAgICA2RDI4ICAgQURESVUgVjAsIFYwLCAxNg0KQkZEMDM5ODAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzOTgyICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlDQpCRkQwMzk4NCAgICAgIDQ1NzAgICBTV00xNiAweDMsIDAoU1ApDQpCRkQwMzk4NiAgICAgIDBDMDAgICBOT1ANCjMwMjogICAgICAgICAgICAgICAgIAkJCXZMaXN0SW5pdGlhbGlzZSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICk7DQpCRkQwMzk4OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMzk4QyAgMDAyNDMwNDIgICBBRERJVSBWMCwgVjAsIDM2DQpCRkQwMzk5MCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDM5OTIgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UNCkJGRDAzOTk0ICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkNCkJGRDAzOTk2ICAgICAgMEMwMCAgIE5PUA0KMzAzOiAgICAgICAgICAgICAgICAgCQl9DQozMDQ6ICAgICAgICAgICAgICAgICAJfQ0KMzA1OiAgICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMzk5OCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMzk5QSAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNTE5RQ0KQkZEMDM5OUMgICAgICAwQzAwICAgTk9QDQozMDY6ICAgICAgICAgICAgICAgICANCjMwNzogICAgICAgICAgICAgICAgIAkvKiBBIHZhbHVlIGlzIHJldHVybmVkIGZvciBjYWxsaW5nIHNlbWFudGljIGNvbnNpc3RlbmN5IHdpdGggcHJldmlvdXMNCjMwODogICAgICAgICAgICAgICAgIAl2ZXJzaW9ucy4gKi8NCjMwOTogICAgICAgICAgICAgICAgIAlyZXR1cm4gcGRQQVNTOw0KQkZEMDM5OUUgICAgICBFRDAxICAgTEkgVjAsIDENCjMxMDogICAgICAgICAgICAgICAgIH0NCkJGRDAzOUEwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwMzlBMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwMzlBNCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwMzlBNiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwMzlBOCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwMzlBQSAgICAgIDBDMDAgICBOT1ANCjMxMTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzEyOiAgICAgICAgICAgICAgICAgDQozMTM6ICAgICAgICAgICAgICAgICBRdWV1ZUhhbmRsZV90IHhRdWV1ZUdlbmVyaWNDcmVhdGUoIGNvbnN0IFVCYXNlVHlwZV90IHV4UXVldWVMZW5ndGgsIGNvbnN0IFVCYXNlVHlwZV90IHV4SXRlbVNpemUsIGNvbnN0IHVpbnQ4X3QgdWNRdWV1ZVR5cGUgKQ0KMzE0OiAgICAgICAgICAgICAgICAgew0KQkZEMDNERjQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDAzREY2ICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkNCkJGRDAzREY4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkNCkJGRDAzREZBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwM0RGQyAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpDQpCRkQwM0UwMCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpDQpCRkQwM0UwNCAgICAgIDBDNDYgICBNT1ZFIFYwLCBBMg0KQkZEMDNFMDYgIDAwMzAxODVFICAgU0IgVjAsIDQ4KFM4KQ0KMzE1OiAgICAgICAgICAgICAgICAgUXVldWVfdCAqcHhOZXdRdWV1ZTsNCjMxNjogICAgICAgICAgICAgICAgIHNpemVfdCB4UXVldWVTaXplSW5CeXRlczsNCjMxNzogICAgICAgICAgICAgICAgIFF1ZXVlSGFuZGxlX3QgeFJldHVybiA9IE5VTEw7DQpCRkQwM0UwQSAgMDAxNEY4MUUgICBTVyBaRVJPLCAyMChTOCkNCjMxODogICAgICAgICAgICAgICAgIGludDhfdCAqcGNBbGxvY2F0ZWRCdWZmZXI7DQozMTk6ICAgICAgICAgICAgICAgICANCjMyMDogICAgICAgICAgICAgICAgIAkvKiBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgdW51c2VkIHBhcmFtZXRlcnMgc2hvdWxkDQozMjE6ICAgICAgICAgICAgICAgICAJY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZIG5vdCBiZSBzZXQgdG8gMS4gKi8NCjMyMjogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSB1Y1F1ZXVlVHlwZTsNCjMyMzogICAgICAgICAgICAgICAgIA0KMzI0OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggdXhRdWV1ZUxlbmd0aCA+ICggVUJhc2VUeXBlX3QgKSAwICk7DQpCRkQwM0UwRSAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwM0UxMiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwM0UyOA0KQkZEMDNFMTYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAzRTE4ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAzRTFBICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwM0UxQyAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwM0UxRSAgMDE0NDMwQTAgICBBRERJVSBBMSwgWkVSTywgMzI0DQpCRkQwM0UyMiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAzRTI0ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwM0UyNiAgICAgIDBDMDAgICBOT1ANCjMyNTogICAgICAgICAgICAgICAgIA0KMzI2OiAgICAgICAgICAgICAgICAgCWlmKCB1eEl0ZW1TaXplID09ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAzRTI4ICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAzRTJDICAwMDA0NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzRTM4DQozMjc6ICAgICAgICAgICAgICAgICAJew0KMzI4OiAgICAgICAgICAgICAgICAgCQkvKiBUaGVyZSBpcyBub3QgZ29pbmcgdG8gYmUgYSBxdWV1ZSBzdG9yYWdlIGFyZWEuICovDQozMjk6ICAgICAgICAgICAgICAgICAJCXhRdWV1ZVNpemVJbkJ5dGVzID0gKCBzaXplX3QgKSAwOw0KQkZEMDNFMzAgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQpCRkQwM0UzNCAgICAgIENDMEEgICBCIDB4QkZEMDNFNEENCkJGRDAzRTM2ICAgICAgMEMwMCAgIE5PUA0KMzMwOiAgICAgICAgICAgICAgICAgCX0NCjMzMTogICAgICAgICAgICAgICAgIAllbHNlDQozMzI6ICAgICAgICAgICAgICAgICAJew0KMzMzOiAgICAgICAgICAgICAgICAgCQkvKiBUaGUgcXVldWUgaXMgb25lIGJ5dGUgbG9uZ2VyIHRoYW4gYXNrZWQgZm9yIHRvIG1ha2Ugd3JhcCBjaGVja2luZw0KMzM0OiAgICAgICAgICAgICAgICAgCQllYXNpZXIvZmFzdGVyLiAqLw0KMzM1OiAgICAgICAgICAgICAgICAgCQl4UXVldWVTaXplSW5CeXRlcyA9ICggc2l6ZV90ICkgKCB1eFF1ZXVlTGVuZ3RoICogdXhJdGVtU2l6ZSApICsgKCBzaXplX3QgKSAxOyAvKmxpbnQgIWU5NjEgTUlTUkEgZXhjZXB0aW9uIGFzIHRoZSBjYXN0cyBhcmUgb25seSByZWR1bmRhbnQgZm9yIHNvbWUgcG9ydHMuICovDQpCRkQwM0UzOCAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpDQpCRkQwM0UzQyAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpDQpCRkQwM0U0MCAgMTIxMDAwNDMgICBNVUwgVjAsIFYxLCBWMA0KQkZEMDNFNDIgIDZEMjAxMjEwICAgQURESSBTMCwgUzAsIDI3OTM2DQpCRkQwM0U0NCAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDENCkJGRDAzRTQ2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjMzNjogICAgICAgICAgICAgICAgIAl9DQozMzc6ICAgICAgICAgICAgICAgICANCjMzODogICAgICAgICAgICAgICAgIAkvKiBBbGxvY2F0ZSB0aGUgbmV3IHF1ZXVlIHN0cnVjdHVyZSBhbmQgc3RvcmFnZSBhcmVhLiAqLw0KMzM5OiAgICAgICAgICAgICAgICAgCXBjQWxsb2NhdGVkQnVmZmVyID0gKCBpbnQ4X3QgKiApIHB2UG9ydE1hbGxvYyggc2l6ZW9mKCBRdWV1ZV90ICkgKyB4UXVldWVTaXplSW5CeXRlcyApOw0KQkZEMDNFNEEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDNFNEUgIDAwNTAzMDQyICAgQURESVUgVjAsIFYwLCA4MA0KQkZEMDNFNTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzRTU0ICAxMTE2NzdFOCAgIEpBTFMgcHZQb3J0TWFsbG9jDQpCRkQwM0U1NiAgMEMwMDExMTYgICBBRERJIFQwLCBTNiwgMzA3Mg0KQkZEMDNFNTggICAgICAwQzAwICAgTk9QDQpCRkQwM0U1QSAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQozNDA6ICAgICAgICAgICAgICAgICANCjM0MTogICAgICAgICAgICAgICAgIAlpZiggcGNBbGxvY2F0ZWRCdWZmZXIgIT0gTlVMTCApDQpCRkQwM0U1RSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwM0U2MiAgMDAyRjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0VDNA0KMzQyOiAgICAgICAgICAgICAgICAgCXsNCjM0MzogICAgICAgICAgICAgICAgIAkJcHhOZXdRdWV1ZSA9ICggUXVldWVfdCAqICkgcGNBbGxvY2F0ZWRCdWZmZXI7IC8qbGludCAhZTgyNiBNSVNSQSBUaGUgYnVmZmVyIGNhbm5vdCBiZSB0b28gc21hbGwgYmVjYXVzZSBpdCB3YXMgZGltZW5zaW9uZWQgYnkgc2l6ZW9mKCBRdWV1ZV90ICkgKyB4UXVldWVTaXplSW5CeXRlcy4gKi8NCkJGRDAzRTY2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAzRTZBICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkNCjM0NDogICAgICAgICAgICAgICAgIA0KMzQ1OiAgICAgICAgICAgICAgICAgCQlpZiggdXhJdGVtU2l6ZSA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwM0U2RSAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpDQpCRkQwM0U3MiAgMDAwNzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwM0U4NA0KMzQ2OiAgICAgICAgICAgICAgICAgCQl7DQozNDc6ICAgICAgICAgICAgICAgICAJCQkvKiBObyBSQU0gd2FzIGFsbG9jYXRlZCBmb3IgdGhlIHF1ZXVlIHN0b3JhZ2UgYXJlYSwgYnV0IFBDIGhlYWQNCjM0ODogICAgICAgICAgICAgICAgIAkJCWNhbm5vdCBiZSBzZXQgdG8gTlVMTCBiZWNhdXNlIE5VTEwgaXMgdXNlZCBhcyBhIGtleSB0byBzYXkgdGhlIHF1ZXVlDQozNDk6ICAgICAgICAgICAgICAgICAJCQlpcyB1c2VkIGFzIGEgbXV0ZXguICBUaGVyZWZvcmUganVzdCBzZXQgcGNIZWFkIHRvIHBvaW50IHRvIHRoZSBxdWV1ZQ0KMzUwOiAgICAgICAgICAgICAgICAgCQkJYXMgYSBiZW5pZ24gdmFsdWUgdGhhdCBpcyBrbm93biB0byBiZSB3aXRoaW4gdGhlIG1lbW9yeSBtYXAuICovDQozNTE6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT5wY0hlYWQgPSAoIGludDhfdCAqICkgcHhOZXdRdWV1ZTsNCkJGRDAzRTc2ICAwMDFDRkM3RSAgIExXIFYxLCAyOChTOCkNCkJGRDAzRTdBICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAzRTdFICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KQkZEMDNFODAgICAgICBDQzA4ICAgQiAweEJGRDAzRTkyDQpCRkQwM0U4MiAgICAgIDBDMDAgICBOT1ANCjM1MjogICAgICAgICAgICAgICAgIAkJfQ0KMzUzOiAgICAgICAgICAgICAgICAgCQllbHNlDQozNTQ6ICAgICAgICAgICAgICAgICAJCXsNCjM1NTogICAgICAgICAgICAgICAgIAkJCS8qIEp1bXAgcGFzdCB0aGUgcXVldWUgc3RydWN0dXJlIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBxdWV1ZQ0KMzU2OiAgICAgICAgICAgICAgICAgCQkJc3RvcmFnZSBhcmVhIC0gYWRkaW5nIHRoZSBwYWRkaW5nIGJ5dGVzIHRvIGdldCBhIGJldHRlciBhbGlnbm1lbnQuICovDQozNTc6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT5wY0hlYWQgPSBwY0FsbG9jYXRlZEJ1ZmZlciArIHNpemVvZiggUXVldWVfdCApOw0KQkZEMDNFODQgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDNFODggIDAwNTAzMDYyICAgQURESVUgVjEsIFYwLCA4MA0KQkZEMDNFOEMgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDNFOTAgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQozNTg6ICAgICAgICAgICAgICAgICAJCX0NCjM1OTogICAgICAgICAgICAgICAgIA0KMzYwOiAgICAgICAgICAgICAgICAgCQkvKiBJbml0aWFsaXNlIHRoZSBxdWV1ZSBtZW1iZXJzIGFzIGRlc2NyaWJlZCBhYm92ZSB3aGVyZSB0aGUgcXVldWUgdHlwZQ0KMzYxOiAgICAgICAgICAgICAgICAgCQlpcyBkZWZpbmVkLiAqLw0KMzYyOiAgICAgICAgICAgICAgICAgCQlweE5ld1F1ZXVlLT51eExlbmd0aCA9IHV4UXVldWVMZW5ndGg7DQpCRkQwM0U5MiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwM0U5NiAgMDAyOEZDN0UgICBMVyBWMSwgNDAoUzgpDQpCRkQwM0U5QSAgICAgIEU5QUYgICBTVyBWMSwgNjAoVjApDQozNjM6ICAgICAgICAgICAgICAgICAJCXB4TmV3UXVldWUtPnV4SXRlbVNpemUgPSB1eEl0ZW1TaXplOw0KQkZEMDNFOUMgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDNFQTAgIDAwMkNGQzdFICAgTFcgVjEsIDQ0KFM4KQ0KQkZEMDNFQTQgIDAwNDBGODYyICAgU1cgVjEsIDY0KFYwKQ0KMzY0OiAgICAgICAgICAgICAgICAgCQkoIHZvaWQgKSB4UXVldWVHZW5lcmljUmVzZXQoIHB4TmV3UXVldWUsIHBkVFJVRSApOw0KQkZEMDNFQTggIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQ0KQkZEMDNFQUMgICAgICBFRTgxICAgTEkgQTEsIDENCkJGRDAzRUFFICAxQzQ2NzdFOCAgIEpBTFMgeFF1ZXVlR2VuZXJpY1Jlc2V0DQpCRkQwM0VCMCAgMEMwMDFDNDYgICBMQiBWMCwgMzA3MihBMikNCkJGRDAzRUIyICAgICAgMEMwMCAgIE5PUA0KMzY1OiAgICAgICAgICAgICAgICAgDQozNjY6ICAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxICkNCjM2NzogICAgICAgICAgICAgICAgIAkJew0KMzY4OiAgICAgICAgICAgICAgICAgCQkJcHhOZXdRdWV1ZS0+dWNRdWV1ZVR5cGUgPSB1Y1F1ZXVlVHlwZTsNCjM2OTogICAgICAgICAgICAgICAgIAkJfQ0KMzcwOiAgICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZICovDQozNzE6ICAgICAgICAgICAgICAgICANCjM3MjogICAgICAgICAgICAgICAgIAkJI2lmKCBjb25maWdVU0VfUVVFVUVfU0VUUyA9PSAxICkNCjM3MzogICAgICAgICAgICAgICAgIAkJew0KMzc0OiAgICAgICAgICAgICAgICAgCQkJcHhOZXdRdWV1ZS0+cHhRdWV1ZVNldENvbnRhaW5lciA9IE5VTEw7DQpCRkQwM0VCNCAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwM0VCOCAgMDA0Q0Y4MDIgICBTVyBaRVJPLCA3NihWMCkNCjM3NTogICAgICAgICAgICAgICAgIAkJfQ0KMzc2OiAgICAgICAgICAgICAgICAgCQkjZW5kaWYgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjM3NzogICAgICAgICAgICAgICAgIA0KMzc4OiAgICAgICAgICAgICAgICAgCQl0cmFjZVFVRVVFX0NSRUFURSggcHhOZXdRdWV1ZSApOw0KMzc5OiAgICAgICAgICAgICAgICAgCQl4UmV0dXJuID0gcHhOZXdRdWV1ZTsNCkJGRDAzRUJDICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAzRUMwICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjM4MDogICAgICAgICAgICAgICAgIAl9DQozODE6ICAgICAgICAgICAgICAgICAJZWxzZQ0KMzgyOiAgICAgICAgICAgICAgICAgCXsNCjM4MzogICAgICAgICAgICAgICAgIAkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzg0OiAgICAgICAgICAgICAgICAgCX0NCjM4NTogICAgICAgICAgICAgICAgIA0KMzg2OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeFJldHVybiApOw0KQkZEMDNFQzQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDNFQzggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDNFREUNCkJGRDAzRUNDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwM0VDRSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwM0VEMCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDNFRDIgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDNFRDQgIDAxODIzMEEwICAgQURESVUgQTEsIFpFUk8sIDM4Ng0KQkZEMDNFRDggIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwM0VEQSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDNFREMgICAgICAwQzAwICAgTk9QDQozODc6ICAgICAgICAgICAgICAgICANCjM4ODogICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDAzRURFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCjM4OTogICAgICAgICAgICAgICAgIH0NCkJGRDAzRUUyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwM0VFNCAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwM0VFNiAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwM0VFOCAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwM0VFQSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwM0VFQyAgICAgIDBDMDAgICBOT1ANCjM5MDogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzkxOiAgICAgICAgICAgICAgICAgDQozOTI6ICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkNCjM5MzogICAgICAgICAgICAgICAgIA0KMzk0OiAgICAgICAgICAgICAgICAgCVF1ZXVlSGFuZGxlX3QgeFF1ZXVlQ3JlYXRlTXV0ZXgoIGNvbnN0IHVpbnQ4X3QgdWNRdWV1ZVR5cGUgKQ0KMzk1OiAgICAgICAgICAgICAgICAgCXsNCkJGRDA1OTU4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNTk1QSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNTk1QyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNTk1RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDU5NjAgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTANCkJGRDA1OTYyICAwMDIwMTg1RSAgIFNCIFYwLCAzMihTOCkNCkJGRDA1OTY0ICBFRTUwMDAyMCAgIEFORCBTUCwgWkVSTywgQVQNCjM5NjogICAgICAgICAgICAgICAgIAlRdWV1ZV90ICpweE5ld1F1ZXVlOw0KMzk3OiAgICAgICAgICAgICAgICAgDQozOTg6ICAgICAgICAgICAgICAgICAJCS8qIFByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgdW51c2VkIHBhcmFtZXRlcnMgaWYNCjM5OTogICAgICAgICAgICAgICAgIAkJY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZIGRvZXMgbm90IGVxdWFsIDEuICovDQo0MDA6ICAgICAgICAgICAgICAgICAJCSggdm9pZCApIHVjUXVldWVUeXBlOw0KNDAxOiAgICAgICAgICAgICAgICAgDQo0MDI6ICAgICAgICAgICAgICAgICAJCS8qIEFsbG9jYXRlIHRoZSBuZXcgcXVldWUgc3RydWN0dXJlLiAqLw0KNDAzOiAgICAgICAgICAgICAgICAgCQlweE5ld1F1ZXVlID0gKCBRdWV1ZV90ICogKSBwdlBvcnRNYWxsb2MoIHNpemVvZiggUXVldWVfdCApICk7DQpCRkQwNTk2NiAgICAgIEVFNTAgICBMSSBBMCwgODANCkJGRDA1OTY4ICAxMTE2NzdFOCAgIEpBTFMgcHZQb3J0TWFsbG9jDQpCRkQwNTk2QSAgMEMwMDExMTYgICBBRERJIFQwLCBTNiwgMzA3Mg0KQkZEMDU5NkMgICAgICAwQzAwICAgTk9QDQpCRkQwNTk2RSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo0MDQ6ICAgICAgICAgICAgICAgICAJCWlmKCBweE5ld1F1ZXVlICE9IE5VTEwgKQ0KQkZEMDU5NzIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDU5NzYgIDAwM0M0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDU5RjINCjQwNTogICAgICAgICAgICAgICAgIAkJew0KNDA2OiAgICAgICAgICAgICAgICAgCQkJLyogSW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIHByaW9yaXR5IGluaGVyaXRhbmNlLiAqLw0KNDA3OiAgICAgICAgICAgICAgICAgCQkJcHhOZXdRdWV1ZS0+cHhNdXRleEhvbGRlciA9IE5VTEw7DQpCRkQwNTk3QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNTk3RSAgICAgIEU4MjEgICBTVyBTMCwgNChWMCkNCjQwODogICAgICAgICAgICAgICAgIAkJCXB4TmV3UXVldWUtPnV4UXVldWVUeXBlID0gcXVldWVRVUVVRV9JU19NVVRFWDsNCkJGRDA1OTgwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1OTg0ICAgICAgRTgyMCAgIFNXIFMwLCAwKFYwKQ0KNDA5OiAgICAgICAgICAgICAgICAgDQo0MTA6ICAgICAgICAgICAgICAgICAJCQkvKiBRdWV1ZXMgdXNlZCBhcyBhIG11dGV4IG5vIGRhdGEgaXMgYWN0dWFsbHkgY29waWVkIGludG8gb3Igb3V0DQo0MTE6ICAgICAgICAgICAgICAgICAJCQlvZiB0aGUgcXVldWUuICovDQo0MTI6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT5wY1dyaXRlVG8gPSBOVUxMOw0KQkZEMDU5ODYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDU5OEEgICAgICBFODIyICAgU1cgUzAsIDgoVjApDQo0MTM6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT51LnBjUmVhZEZyb20gPSBOVUxMOw0KQkZEMDU5OEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDU5OTAgICAgICBFODIzICAgU1cgUzAsIDEyKFYwKQ0KNDE0OiAgICAgICAgICAgICAgICAgDQo0MTU6ICAgICAgICAgICAgICAgICAJCQkvKiBFYWNoIG11dGV4IGhhcyBhIGxlbmd0aCBvZiAxIChsaWtlIGEgYmluYXJ5IHNlbWFwaG9yZSkgYW5kDQo0MTY6ICAgICAgICAgICAgICAgICAJCQlhbiBpdGVtIHNpemUgb2YgMCBhcyBub3RoaW5nIGlzIGFjdHVhbGx5IGNvcGllZCBpbnRvIG9yIG91dA0KNDE3OiAgICAgICAgICAgICAgICAgCQkJb2YgdGhlIG11dGV4LiAqLw0KNDE4OiAgICAgICAgICAgICAgICAgCQkJcHhOZXdRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPSAoIFVCYXNlVHlwZV90ICkgMFU7DQpCRkQwNTk5MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNTk5NiAgICAgIEU4MkUgICBTVyBTMCwgNTYoVjApDQo0MTk6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT51eExlbmd0aCA9ICggVUJhc2VUeXBlX3QgKSAxVTsNCkJGRDA1OTk4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1OTlDICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwNTk5RSAgICAgIEU5QUYgICBTVyBWMSwgNjAoVjApDQo0MjA6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT51eEl0ZW1TaXplID0gKCBVQmFzZVR5cGVfdCApIDBVOw0KQkZEMDU5QTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDU5QTQgIDAwNDBGODAyICAgU1cgWkVSTywgNjQoVjApDQo0MjE6ICAgICAgICAgICAgICAgICAJCQlweE5ld1F1ZXVlLT54UnhMb2NrID0gcXVldWVVTkxPQ0tFRDsNCkJGRDA1OUE4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1OUFDICAgICAgRURGRiAgIExJIFYxLCAtMQ0KQkZEMDU5QUUgIDAwNDRGODYyICAgU1cgVjEsIDY4KFYwKQ0KNDIyOiAgICAgICAgICAgICAgICAgCQkJcHhOZXdRdWV1ZS0+eFR4TG9jayA9IHF1ZXVlVU5MT0NLRUQ7DQpCRkQwNTlCMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNTlCNiAgICAgIEVERkYgICBMSSBWMSwgLTENCkJGRDA1OUI4ICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkNCjQyMzogICAgICAgICAgICAgICAgIA0KNDI0OiAgICAgICAgICAgICAgICAgCQkJI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KNDI1OiAgICAgICAgICAgICAgICAgCQkJew0KNDI2OiAgICAgICAgICAgICAgICAgCQkJCXB4TmV3UXVldWUtPnVjUXVldWVUeXBlID0gdWNRdWV1ZVR5cGU7DQo0Mjc6ICAgICAgICAgICAgICAgICAJCQl9DQo0Mjg6ICAgICAgICAgICAgICAgICAJCQkjZW5kaWYNCjQyOTogICAgICAgICAgICAgICAgIA0KNDMwOiAgICAgICAgICAgICAgICAgCQkJI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQo0MzE6ICAgICAgICAgICAgICAgICAJCQl7DQo0MzI6ICAgICAgICAgICAgICAgICAJCQkJcHhOZXdRdWV1ZS0+cHhRdWV1ZVNldENvbnRhaW5lciA9IE5VTEw7DQpCRkQwNTlCQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNTlDMCAgMDA0Q0Y4MDIgICBTVyBaRVJPLCA3NihWMCkNCjQzMzogICAgICAgICAgICAgICAgIAkJCX0NCjQzNDogICAgICAgICAgICAgICAgIAkJCSNlbmRpZg0KNDM1OiAgICAgICAgICAgICAgICAgDQo0MzY6ICAgICAgICAgICAgICAgICAJCQkvKiBFbnN1cmUgdGhlIGV2ZW50IHF1ZXVlcyBzdGFydCB3aXRoIHRoZSBjb3JyZWN0IHN0YXRlLiAqLw0KNDM3OiAgICAgICAgICAgICAgICAgCQkJdkxpc3RJbml0aWFsaXNlKCAmKCBweE5ld1F1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKTsNCkJGRDA1OUM0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1OUM4ICAgICAgNkQyOCAgIEFERElVIFYwLCBWMCwgMTYNCkJGRDA1OUNBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNTlDQyAgNDU3MDc3RTggICBKQUxTIHZMaXN0SW5pdGlhbGlzZQ0KQkZEMDU5Q0UgICAgICA0NTcwICAgU1dNMTYgMHgzLCAwKFNQKQ0KQkZEMDU5RDAgICAgICAwQzAwICAgTk9QDQo0Mzg6ICAgICAgICAgICAgICAgICAJCQl2TGlzdEluaXRpYWxpc2UoICYoIHB4TmV3UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApOw0KQkZEMDU5RDIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDU5RDYgIDAwMjQzMDQyICAgQURESVUgVjAsIFYwLCAzNg0KQkZEMDU5REEgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA1OURDICA0NTcwNzdFOCAgIEpBTFMgdkxpc3RJbml0aWFsaXNlDQpCRkQwNTlERSAgICAgIDQ1NzAgICBTV00xNiAweDMsIDAoU1ApDQpCRkQwNTlFMCAgICAgIDBDMDAgICBOT1ANCjQzOTogICAgICAgICAgICAgICAgIA0KNDQwOiAgICAgICAgICAgICAgICAgCQkJdHJhY2VDUkVBVEVfTVVURVgoIHB4TmV3UXVldWUgKTsNCjQ0MTogICAgICAgICAgICAgICAgIA0KNDQyOiAgICAgICAgICAgICAgICAgCQkJLyogU3RhcnQgd2l0aCB0aGUgc2VtYXBob3JlIGluIHRoZSBleHBlY3RlZCBzdGF0ZS4gKi8NCjQ0MzogICAgICAgICAgICAgICAgIAkJCSggdm9pZCApIHhRdWV1ZUdlbmVyaWNTZW5kKCBweE5ld1F1ZXVlLCBOVUxMLCAoIFRpY2tUeXBlX3QgKSAwVSwgcXVldWVTRU5EX1RPX0JBQ0sgKTsNCkJGRDA1OUUyICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkNCkJGRDA1OUU2ICAgICAgMENBMCAgIE1PVkUgQTEsIFpFUk8NCkJGRDA1OUU4ICAgICAgMENDMCAgIE1PVkUgQTIsIFpFUk8NCkJGRDA1OUVBICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8NCkJGRDA1OUVDICAwNkEyNzdFOCAgIEpBTFMgeFF1ZXVlR2VuZXJpY1NlbmQNCkJGRDA1OUVFICAgICAgMDZBMiAgIEFERFUgQTEsIFMxLCBWMA0KQkZEMDU5RjAgICAgICAwQzAwICAgTk9QDQo0NDQ6ICAgICAgICAgICAgICAgICAJCX0NCjQ0NTogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNDQ2OiAgICAgICAgICAgICAgICAgCQl7DQo0NDc6ICAgICAgICAgICAgICAgICAJCQl0cmFjZUNSRUFURV9NVVRFWF9GQUlMRUQoKTsNCjQ0ODogICAgICAgICAgICAgICAgIAkJfQ0KNDQ5OiAgICAgICAgICAgICAgICAgDQo0NTA6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggcHhOZXdRdWV1ZSApOw0KQkZEMDU5RjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDU5RjYgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDVBMEMNCkJGRDA1OUZBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNTlGQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNTlGRSAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDVBMDAgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDVBMDIgIDAxQzIzMEEwICAgQURESVUgQTEsIFpFUk8sIDQ1MA0KQkZEMDVBMDYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwNUEwOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDVBMEEgICAgICAwQzAwICAgTk9QDQo0NTE6ICAgICAgICAgICAgICAgICAJCXJldHVybiBweE5ld1F1ZXVlOw0KQkZEMDVBMEMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KNDUyOiAgICAgICAgICAgICAgICAgCX0NCkJGRDA1QTEwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNUExMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNUExNCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNUExNiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNUExOCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNUExQSAgICAgIDBDMDAgICBOT1ANCjQ1MzogICAgICAgICAgICAgICAgIA0KNDU0OiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9NVVRFWEVTICovDQo0NTU6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjQ1NjogICAgICAgICAgICAgICAgIA0KNDU3OiAgICAgICAgICAgICAgICAgI2lmICggKCBjb25maWdVU0VfTVVURVhFUyA9PSAxICkgJiYgKCBJTkNMVURFX3hTZW1hcGhvcmVHZXRNdXRleEhvbGRlciA9PSAxICkgKQ0KNDU4OiAgICAgICAgICAgICAgICAgDQo0NTk6ICAgICAgICAgICAgICAgICAJdm9pZCogeFF1ZXVlR2V0TXV0ZXhIb2xkZXIoIFF1ZXVlSGFuZGxlX3QgeFNlbWFwaG9yZSApDQo0NjA6ICAgICAgICAgICAgICAgICAJew0KNDYxOiAgICAgICAgICAgICAgICAgCXZvaWQgKnB4UmV0dXJuOw0KNDYyOiAgICAgICAgICAgICAgICAgDQo0NjM6ICAgICAgICAgICAgICAgICAJCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHhTZW1hcGhvcmVHZXRNdXRleEhvbGRlcigpLCBhbmQgc2hvdWxkIG5vdA0KNDY0OiAgICAgICAgICAgICAgICAgCQliZSBjYWxsZWQgZGlyZWN0bHkuICBOb3RlOiAgVGhpcyBpcyBhIGdvb2Qgd2F5IG9mIGRldGVybWluaW5nIGlmIHRoZQ0KNDY1OiAgICAgICAgICAgICAgICAgCQljYWxsaW5nIHRhc2sgaXMgdGhlIG11dGV4IGhvbGRlciwgYnV0IG5vdCBhIGdvb2Qgd2F5IG9mIGRldGVybWluaW5nIHRoZQ0KNDY2OiAgICAgICAgICAgICAgICAgCQlpZGVudGl0eSBvZiB0aGUgbXV0ZXggaG9sZGVyLCBhcyB0aGUgaG9sZGVyIG1heSBjaGFuZ2UgYmV0d2VlbiB0aGUNCjQ2NzogICAgICAgICAgICAgICAgIAkJZm9sbG93aW5nIGNyaXRpY2FsIHNlY3Rpb24gZXhpdGluZyBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybmluZy4gKi8NCjQ2ODogICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQo0Njk6ICAgICAgICAgICAgICAgICAJCXsNCjQ3MDogICAgICAgICAgICAgICAgIAkJCWlmKCAoICggUXVldWVfdCAqICkgeFNlbWFwaG9yZSApLT51eFF1ZXVlVHlwZSA9PSBxdWV1ZVFVRVVFX0lTX01VVEVYICkNCjQ3MTogICAgICAgICAgICAgICAgIAkJCXsNCjQ3MjogICAgICAgICAgICAgICAgIAkJCQlweFJldHVybiA9ICggdm9pZCAqICkgKCAoIFF1ZXVlX3QgKiApIHhTZW1hcGhvcmUgKS0+cHhNdXRleEhvbGRlcjsNCjQ3MzogICAgICAgICAgICAgICAgIAkJCX0NCjQ3NDogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjQ3NTogICAgICAgICAgICAgICAgIAkJCXsNCjQ3NjogICAgICAgICAgICAgICAgIAkJCQlweFJldHVybiA9IE5VTEw7DQo0Nzc6ICAgICAgICAgICAgICAgICAJCQl9DQo0Nzg6ICAgICAgICAgICAgICAgICAJCX0NCjQ3OTogICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjQ4MDogICAgICAgICAgICAgICAgIA0KNDgxOiAgICAgICAgICAgICAgICAgCQlyZXR1cm4gcHhSZXR1cm47DQo0ODI6ICAgICAgICAgICAgICAgICAJfSAvKmxpbnQgIWU4MTggeFNlbWFwaG9yZSBjYW5ub3QgYmUgYSBwb2ludGVyIHRvIGNvbnN0IGJlY2F1c2UgaXQgaXMgYSB0eXBlZGVmLiAqLw0KNDgzOiAgICAgICAgICAgICAgICAgDQo0ODQ6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjQ4NTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDg2OiAgICAgICAgICAgICAgICAgDQo0ODc6ICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfUkVDVVJTSVZFX01VVEVYRVMgPT0gMSApDQo0ODg6ICAgICAgICAgICAgICAgICANCjQ4OTogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhRdWV1ZUdpdmVNdXRleFJlY3Vyc2l2ZSggUXVldWVIYW5kbGVfdCB4TXV0ZXggKQ0KNDkwOiAgICAgICAgICAgICAgICAgCXsNCkJGRDA2QUQwICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwDQpCRkQwNkFEMiAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApDQpCRkQwNkFENCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApDQpCRkQwNkFENiAgICAgIENBMDcgICBTVyBTMCwgMjgoU1ApDQpCRkQwNkFEOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDZBREEgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQ0KNDkxOiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjQ5MjogICAgICAgICAgICAgICAgIAlRdWV1ZV90ICogY29uc3QgcHhNdXRleCA9ICggUXVldWVfdCAqICkgeE11dGV4Ow0KQkZEMDZBREUgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDZBRTIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KNDkzOiAgICAgICAgICAgICAgICAgDQo0OTQ6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggcHhNdXRleCApOw0KQkZEMDZBRTYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDZBRUEgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZCMDANCkJGRDA2QUVFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNkFGMCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNkFGMiAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDZBRjQgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDZBRjYgIDAxRUUzMEEwICAgQURESVUgQTEsIFpFUk8sIDQ5NA0KQkZEMDZBRkEgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwNkFGQyAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDZBRkUgICAgICAwQzAwICAgTk9QDQo0OTU6ICAgICAgICAgICAgICAgICANCjQ5NjogICAgICAgICAgICAgICAgIAkJLyogSWYgdGhpcyBpcyB0aGUgdGFzayB0aGF0IGhvbGRzIHRoZSBtdXRleCB0aGVuIHB4TXV0ZXhIb2xkZXIgd2lsbCBub3QNCjQ5NzogICAgICAgICAgICAgICAgIAkJY2hhbmdlIG91dHNpZGUgb2YgdGhpcyB0YXNrLiAgSWYgdGhpcyB0YXNrIGRvZXMgbm90IGhvbGQgdGhlIG11dGV4IHRoZW4NCjQ5ODogICAgICAgICAgICAgICAgIAkJcHhNdXRleEhvbGRlciBjYW4gbmV2ZXIgY29pbmNpZGVudGFsbHkgZXF1YWwgdGhlIHRhc2tzIGhhbmRsZSwgYW5kIGFzDQo0OTk6ICAgICAgICAgICAgICAgICAJCXRoaXMgaXMgdGhlIG9ubHkgY29uZGl0aW9uIHdlIGFyZSBpbnRlcmVzdGVkIGluIGl0IGRvZXMgbm90IG1hdHRlciBpZg0KNTAwOiAgICAgICAgICAgICAgICAgCQlweE11dGV4SG9sZGVyIGlzIGFjY2Vzc2VkIHNpbXVsdGFuZW91c2x5IGJ5IGFub3RoZXIgdGFzay4gIFRoZXJlZm9yZSBubw0KNTAxOiAgICAgICAgICAgICAgICAgCQltdXR1YWwgZXhjbHVzaW9uIGlzIHJlcXVpcmVkIHRvIHRlc3QgdGhlIHB4TXV0ZXhIb2xkZXIgdmFyaWFibGUuICovDQo1MDI6ICAgICAgICAgICAgICAgICAJCWlmKCBweE11dGV4LT5weE11dGV4SG9sZGVyID09ICggdm9pZCAqICkgeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpICkgLypsaW50ICFlOTYxIE5vdCBhIHJlZHVuZGFudCBjYXN0IGFzIFRhc2tIYW5kbGVfdCBpcyBhIHR5cGVkZWYuICovDQpCRkQwNkIwMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNkIwNCAgICAgIDY4MjEgICBMVyBTMCwgNChWMCkNCkJGRDA2QjA2ICA0RjAyNzdFOCAgIEpBTFMgeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZQ0KQkZEMDZCMDggICAgICA0RjAyICAgQURESVUgVDgsIFQ4LCAxDQpCRkQwNkIwQSAgICAgIDBDMDAgICBOT1ANCkJGRDA2QjBDICAwMDFBQjQ1MCAgIEJORSBTMCwgVjAsIDB4QkZEMDZCNDQNCkJGRDA2QjBFICAwQzAwMDAxQSAgIFNMTCBaRVJPLCBLMCwgMQ0KQkZEMDZCMTAgICAgICAwQzAwICAgTk9QDQo1MDM6ICAgICAgICAgICAgICAgICAJCXsNCjUwNDogICAgICAgICAgICAgICAgIAkJCXRyYWNlR0lWRV9NVVRFWF9SRUNVUlNJVkUoIHB4TXV0ZXggKTsNCjUwNTogICAgICAgICAgICAgICAgIA0KNTA2OiAgICAgICAgICAgICAgICAgCQkJLyogdXhSZWN1cnNpdmVDYWxsQ291bnQgY2Fubm90IGJlIHplcm8gaWYgcHhNdXRleEhvbGRlciBpcyBlcXVhbCB0bw0KNTA3OiAgICAgICAgICAgICAgICAgCQkJdGhlIHRhc2sgaGFuZGxlLCB0aGVyZWZvcmUgbm8gdW5kZXJmbG93IGNoZWNrIGlzIHJlcXVpcmVkLiAgQWxzbywNCjUwODogICAgICAgICAgICAgICAgIAkJCXV4UmVjdXJzaXZlQ2FsbENvdW50IGlzIG9ubHkgbW9kaWZpZWQgYnkgdGhlIG11dGV4IGhvbGRlciwgYW5kIGFzDQo1MDk6ICAgICAgICAgICAgICAgICAJCQl0aGVyZSBjYW4gb25seSBiZSBvbmUsIG5vIG11dHVhbCBleGNsdXNpb24gaXMgcmVxdWlyZWQgdG8gbW9kaWZ5IHRoZQ0KNTEwOiAgICAgICAgICAgICAgICAgCQkJdXhSZWN1cnNpdmVDYWxsQ291bnQgbWVtYmVyLiAqLw0KNTExOiAgICAgICAgICAgICAgICAgCQkJKCBweE11dGV4LT51LnV4UmVjdXJzaXZlQ2FsbENvdW50ICktLTsNCkJGRDA2QjEyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2QjE2ICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDA2QjE4ICAgICAgNkRBRSAgIEFERElVIFYxLCBWMCwgLTENCkJGRDA2QjFBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2QjFFICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkNCjUxMjogICAgICAgICAgICAgICAgIA0KNTEzOiAgICAgICAgICAgICAgICAgCQkJLyogSGF2ZSB3ZSB1bndvdW5kIHRoZSBjYWxsIGNvdW50PyAqLw0KNTE0OiAgICAgICAgICAgICAgICAgCQkJaWYoIHB4TXV0ZXgtPnUudXhSZWN1cnNpdmVDYWxsQ291bnQgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDZCMjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDZCMjQgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQ0KQkZEMDZCMjYgIDAwMDg0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZCM0ENCjUxNTogICAgICAgICAgICAgICAgIAkJCXsNCjUxNjogICAgICAgICAgICAgICAgIAkJCQkvKiBSZXR1cm4gdGhlIG11dGV4LiAgVGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgdW5ibG9jayBhbnkgb3RoZXINCjUxNzogICAgICAgICAgICAgICAgIAkJCQl0YXNrIHRoYXQgbWlnaHQgYmUgd2FpdGluZyB0byBhY2Nlc3MgdGhlIG11dGV4LiAqLw0KNTE4OiAgICAgICAgICAgICAgICAgCQkJCSggdm9pZCApIHhRdWV1ZUdlbmVyaWNTZW5kKCBweE11dGV4LCBOVUxMLCBxdWV1ZU1VVEVYX0dJVkVfQkxPQ0tfVElNRSwgcXVldWVTRU5EX1RPX0JBQ0sgKTsNCkJGRDA2QjJBICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDA2QjJFICAgICAgMENBMCAgIE1PVkUgQTEsIFpFUk8NCkJGRDA2QjMwICAgICAgMENDMCAgIE1PVkUgQTIsIFpFUk8NCkJGRDA2QjMyICAgICAgMENFMCAgIE1PVkUgQTMsIFpFUk8NCkJGRDA2QjM0ICAwNkEyNzdFOCAgIEpBTFMgeFF1ZXVlR2VuZXJpY1NlbmQNCkJGRDA2QjM2ICAgICAgMDZBMiAgIEFERFUgQTEsIFMxLCBWMA0KQkZEMDZCMzggICAgICAwQzAwICAgTk9QDQo1MTk6ICAgICAgICAgICAgICAgICAJCQl9DQo1MjA6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo1MjE6ICAgICAgICAgICAgICAgICAJCQl7DQo1MjI6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNTIzOiAgICAgICAgICAgICAgICAgCQkJfQ0KNTI0OiAgICAgICAgICAgICAgICAgDQo1MjU6ICAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRQQVNTOw0KQkZEMDZCM0EgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA2QjNDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA2QjQwICAgICAgQ0MwMyAgIEIgMHhCRkQwNkI0OA0KQkZEMDZCNDIgICAgICAwQzAwICAgTk9QDQo1MjY6ICAgICAgICAgICAgICAgICAJCX0NCjUyNzogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNTI4OiAgICAgICAgICAgICAgICAgCQl7DQo1Mjk6ICAgICAgICAgICAgICAgICAJCQkvKiBUaGUgbXV0ZXggY2Fubm90IGJlIGdpdmVuIGJlY2F1c2UgdGhlIGNhbGxpbmcgdGFzayBpcyBub3QgdGhlDQo1MzA6ICAgICAgICAgICAgICAgICAJCQlob2xkZXIuICovDQo1MzE6ICAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRGQUlMOw0KQkZEMDZCNDQgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQo1MzI6ICAgICAgICAgICAgICAgICANCjUzMzogICAgICAgICAgICAgICAgIAkJCXRyYWNlR0lWRV9NVVRFWF9SRUNVUlNJVkVfRkFJTEVEKCBweE11dGV4ICk7DQo1MzQ6ICAgICAgICAgICAgICAgICAJCX0NCjUzNTogICAgICAgICAgICAgICAgIA0KNTM2OiAgICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDA2QjQ4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjUzNzogICAgICAgICAgICAgICAgIAl9DQpCRkQwNkI0QyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDZCNEUgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQ0KQkZEMDZCNTAgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQ0KQkZEMDZCNTIgICAgICA0QTA3ICAgTFcgUzAsIDI4KFNQKQ0KQkZEMDZCNTQgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MA0KQkZEMDZCNTYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDZCNTggICAgICAwQzAwICAgTk9QDQo1Mzg6ICAgICAgICAgICAgICAgICANCjUzOTogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfUkVDVVJTSVZFX01VVEVYRVMgKi8NCjU0MDogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNTQxOiAgICAgICAgICAgICAgICAgDQo1NDI6ICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfUkVDVVJTSVZFX01VVEVYRVMgPT0gMSApDQo1NDM6ICAgICAgICAgICAgICAgICANCjU0NDogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhRdWV1ZVRha2VNdXRleFJlY3Vyc2l2ZSggUXVldWVIYW5kbGVfdCB4TXV0ZXgsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjU0NTogICAgICAgICAgICAgICAgIAl7DQpCRkQwNjNDQyAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MA0KQkZEMDYzQ0UgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQ0KQkZEMDYzRDAgICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQ0KQkZEMDYzRDIgICAgICBDQTA3ICAgU1cgUzAsIDI4KFNQKQ0KQkZEMDYzRDQgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA2M0Q2ICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkNCkJGRDA2M0RBICAwMDJDRjhCRSAgIFNXIEExLCA0NChTOCkNCjU0NjogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm47DQo1NDc6ICAgICAgICAgICAgICAgICAJUXVldWVfdCAqIGNvbnN0IHB4TXV0ZXggPSAoIFF1ZXVlX3QgKiApIHhNdXRleDsNCkJGRDA2M0RFICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDA2M0UyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjU0ODogICAgICAgICAgICAgICAgIA0KNTQ5OiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHB4TXV0ZXggKTsNCkJGRDA2M0U2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2M0VBICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA2NDAwDQpCRkQwNjNFRSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDYzRjAgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDYzRjIgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDA2M0Y0ICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDA2M0Y2ICAwMjI1MzBBMCAgIEFERElVIEExLCBaRVJPLCA1NDkNCkJGRDA2M0ZBICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDYzRkMgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA2M0ZFICAgICAgMEMwMCAgIE5PUA0KNTUwOiAgICAgICAgICAgICAgICAgDQo1NTE6ICAgICAgICAgICAgICAgICAJCS8qIENvbW1lbnRzIHJlZ2FyZGluZyBtdXR1YWwgZXhjbHVzaW9uIGFzIHBlciB0aG9zZSB3aXRoaW4NCjU1MjogICAgICAgICAgICAgICAgIAkJeFF1ZXVlR2l2ZU11dGV4UmVjdXJzaXZlKCkuICovDQo1NTM6ICAgICAgICAgICAgICAgICANCjU1NDogICAgICAgICAgICAgICAgIAkJdHJhY2VUQUtFX01VVEVYX1JFQ1VSU0lWRSggcHhNdXRleCApOw0KNTU1OiAgICAgICAgICAgICAgICAgDQo1NTY6ICAgICAgICAgICAgICAgICAJCWlmKCBweE11dGV4LT5weE11dGV4SG9sZGVyID09ICggdm9pZCAqICkgeFRhc2tHZXRDdXJyZW50VGFza0hhbmRsZSgpICkgLypsaW50ICFlOTYxIENhc3QgaXMgbm90IHJlZHVuZGFudCBhcyBUYXNrSGFuZGxlX3QgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDY0MDAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDY0MDQgICAgICA2ODIxICAgTFcgUzAsIDQoVjApDQpCRkQwNjQwNiAgNEYwMjc3RTggICBKQUxTIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUNCkJGRDA2NDA4ICAgICAgNEYwMiAgIEFERElVIFQ4LCBUOCwgMQ0KQkZEMDY0MEEgICAgICAwQzAwICAgTk9QDQpCRkQwNjQwQyAgMDAwREI0NTAgICBCTkUgUzAsIFYwLCAweEJGRDA2NDJBDQpCRkQwNjQwRSAgMEMwMDAwMEQgICBTTEwgWkVSTywgVDUsIDENCkJGRDA2NDEwICAgICAgMEMwMCAgIE5PUA0KNTU3OiAgICAgICAgICAgICAgICAgCQl7DQo1NTg6ICAgICAgICAgICAgICAgICAJCQkoIHB4TXV0ZXgtPnUudXhSZWN1cnNpdmVDYWxsQ291bnQgKSsrOw0KQkZEMDY0MTIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDY0MTYgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQ0KQkZEMDY0MTggICAgICA2REEwICAgQURESVUgVjEsIFYwLCAxDQpCRkQwNjQxQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNjQxRSAgICAgIEU5QTMgICBTVyBWMSwgMTIoVjApDQo1NTk6ICAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRQQVNTOw0KQkZEMDY0MjAgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA2NDIyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA2NDI2ICAgICAgQ0MxOSAgIEIgMHhCRkQwNjQ1QQ0KQkZEMDY0MjggICAgICAwQzAwICAgTk9QDQo1NjA6ICAgICAgICAgICAgICAgICAJCX0NCjU2MTogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNTYyOiAgICAgICAgICAgICAgICAgCQl7DQo1NjM6ICAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0geFF1ZXVlR2VuZXJpY1JlY2VpdmUoIHB4TXV0ZXgsIE5VTEwsIHhUaWNrc1RvV2FpdCwgcGRGQUxTRSApOw0KQkZEMDY0MkEgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQ0KQkZEMDY0MkUgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTw0KQkZEMDY0MzAgIDAwMkNGQ0RFICAgTFcgQTIsIDQ0KFM4KQ0KQkZEMDY0MzQgICAgICAwQ0UwICAgTU9WRSBBMywgWkVSTw0KQkZEMDY0MzYgIDA4MUU3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljUmVjZWl2ZQ0KQkZEMDY0MzggICAgICAwODFFICAgTEJVIFMwLCAxNChTMSkNCkJGRDA2NDNBICAgICAgMEMwMCAgIE5PUA0KQkZEMDY0M0MgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KNTY0OiAgICAgICAgICAgICAgICAgDQo1NjU6ICAgICAgICAgICAgICAgICAJCQkvKiBwZFBBU1Mgd2lsbCBvbmx5IGJlIHJldHVybmVkIGlmIHRoZSBtdXRleCB3YXMgc3VjY2Vzc2Z1bGx5DQo1NjY6ICAgICAgICAgICAgICAgICAJCQlvYnRhaW5lZC4gIFRoZSBjYWxsaW5nIHRhc2sgbWF5IGhhdmUgZW50ZXJlZCB0aGUgQmxvY2tlZCBzdGF0ZQ0KNTY3OiAgICAgICAgICAgICAgICAgCQkJYmVmb3JlIHJlYWNoaW5nIGhlcmUuICovDQo1Njg6ICAgICAgICAgICAgICAgICAJCQlpZiggeFJldHVybiA9PSBwZFBBU1MgKQ0KQkZEMDY0NDAgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDY0NDQgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA2NDQ2ICAwMDA4QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDY0NUENCkJGRDA2NDQ4ICAwQzAwMDAwOCAgIFNMTCBaRVJPLCBUMCwgMQ0KQkZEMDY0NEEgICAgICAwQzAwICAgTk9QDQo1Njk6ICAgICAgICAgICAgICAgICAJCQl7DQo1NzA6ICAgICAgICAgICAgICAgICAJCQkJKCBweE11dGV4LT51LnV4UmVjdXJzaXZlQ2FsbENvdW50ICkrKzsNCkJGRDA2NDRDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2NDUwICAgICAgNjkyMyAgIExXIFYwLCAxMihWMCkNCkJGRDA2NDUyICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQ0KQkZEMDY0NTQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDY0NTggICAgICBFOUEzICAgU1cgVjEsIDEyKFYwKQ0KNTcxOiAgICAgICAgICAgICAgICAgCQkJfQ0KNTcyOiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KNTczOiAgICAgICAgICAgICAgICAgCQkJew0KNTc0OiAgICAgICAgICAgICAgICAgCQkJCXRyYWNlVEFLRV9NVVRFWF9SRUNVUlNJVkVfRkFJTEVEKCBweE11dGV4ICk7DQo1NzU6ICAgICAgICAgICAgICAgICAJCQl9DQo1NzY6ICAgICAgICAgICAgICAgICAJCX0NCjU3NzogICAgICAgICAgICAgICAgIA0KNTc4OiAgICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCkJGRDA2NDVBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjU3OTogICAgICAgICAgICAgICAgIAl9DQpCRkQwNjQ1RSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDY0NjAgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQ0KQkZEMDY0NjIgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQ0KQkZEMDY0NjQgICAgICA0QTA3ICAgTFcgUzAsIDI4KFNQKQ0KQkZEMDY0NjYgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MA0KQkZEMDY0NjggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDY0NkEgICAgICAwQzAwICAgTk9QDQo1ODA6ICAgICAgICAgICAgICAgICANCjU4MTogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfUkVDVVJTSVZFX01VVEVYRVMgKi8NCjU4MjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNTgzOiAgICAgICAgICAgICAgICAgDQo1ODQ6ICAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfQ09VTlRJTkdfU0VNQVBIT1JFUyA9PSAxICkNCjU4NTogICAgICAgICAgICAgICAgIA0KNTg2OiAgICAgICAgICAgICAgICAgCVF1ZXVlSGFuZGxlX3QgeFF1ZXVlQ3JlYXRlQ291bnRpbmdTZW1hcGhvcmUoIGNvbnN0IFVCYXNlVHlwZV90IHV4TWF4Q291bnQsIGNvbnN0IFVCYXNlVHlwZV90IHV4SW5pdGlhbENvdW50ICkNCjU4NzogICAgICAgICAgICAgICAgIAl7DQpCRkQwNjUwQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDY1MEUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDY1MTAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDY1MTIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA2NTE0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCkJGRDA2NTE4ICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkNCjU4ODogICAgICAgICAgICAgICAgIAlRdWV1ZUhhbmRsZV90IHhIYW5kbGU7DQo1ODk6ICAgICAgICAgICAgICAgICANCjU5MDogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCB1eE1heENvdW50ICE9IDAgKTsNCkJGRDA2NTFDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA2NTIwICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA2NTM2DQpCRkQwNjUyNCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDY1MjYgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDY1MjggIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDA2NTJBICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDA2NTJDICAwMjRFMzBBMCAgIEFERElVIEExLCBaRVJPLCA1OTANCkJGRDA2NTMwICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDY1MzIgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA2NTM0ICAgICAgMEMwMCAgIE5PUA0KNTkxOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHV4SW5pdGlhbENvdW50IDw9IHV4TWF4Q291bnQgKTsNCkJGRDA2NTM2ICAwMDI0RkM3RSAgIExXIFYxLCAzNihTOCkNCkJGRDA2NTNBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA2NTNFICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQ0KQkZEMDY1NDAgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwNjU0MiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjU1OA0KQkZEMDY1NDYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA2NTQ4ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA2NTRBICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwNjU0QyAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwNjU0RSAgMDI0RjMwQTAgICBBRERJVSBBMSwgWkVSTywgNTkxDQpCRkQwNjU1MiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA2NTU0ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNjU1NiAgICAgIDBDMDAgICBOT1ANCjU5MjogICAgICAgICAgICAgICAgIA0KNTkzOiAgICAgICAgICAgICAgICAgCQl4SGFuZGxlID0geFF1ZXVlR2VuZXJpY0NyZWF0ZSggdXhNYXhDb3VudCwgcXVldWVTRU1BUEhPUkVfUVVFVUVfSVRFTV9MRU5HVEgsIHF1ZXVlUVVFVUVfVFlQRV9DT1VOVElOR19TRU1BUEhPUkUgKTsNCkJGRDA2NTU4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA2NTVDICAgICAgMENBMCAgIE1PVkUgQTEsIFpFUk8NCkJGRDA2NTVFICAgICAgRUYwMiAgIExJIEEyLCAyDQpCRkQwNjU2MCAgMUVGQTc3RTggICBKQUxTIHhRdWV1ZUdlbmVyaWNDcmVhdGUNCkJGRDA2NTYyICAwQzAwMUVGQSAgIExCIFM3LCAzMDcyKEswKQ0KQkZEMDY1NjQgICAgICAwQzAwICAgTk9QDQpCRkQwNjU2NiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo1OTQ6ICAgICAgICAgICAgICAgICANCjU5NTogICAgICAgICAgICAgICAgIAkJaWYoIHhIYW5kbGUgIT0gTlVMTCApDQpCRkQwNjU2QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjU2RSAgMDAwNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjU3Qw0KNTk2OiAgICAgICAgICAgICAgICAgCQl7DQo1OTc6ICAgICAgICAgICAgICAgICAJCQkoICggUXVldWVfdCAqICkgeEhhbmRsZSApLT51eE1lc3NhZ2VzV2FpdGluZyA9IHV4SW5pdGlhbENvdW50Ow0KQkZEMDY1NzIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDY1NzYgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQ0KQkZEMDY1N0EgICAgICBFOUFFICAgU1cgVjEsIDU2KFYwKQ0KNTk4OiAgICAgICAgICAgICAgICAgDQo1OTk6ICAgICAgICAgICAgICAgICAJCQl0cmFjZUNSRUFURV9DT1VOVElOR19TRU1BUEhPUkUoKTsNCjYwMDogICAgICAgICAgICAgICAgIAkJfQ0KNjAxOiAgICAgICAgICAgICAgICAgCQllbHNlDQo2MDI6ICAgICAgICAgICAgICAgICAJCXsNCjYwMzogICAgICAgICAgICAgICAgIAkJCXRyYWNlQ1JFQVRFX0NPVU5USU5HX1NFTUFQSE9SRV9GQUlMRUQoKTsNCjYwNDogICAgICAgICAgICAgICAgIAkJfQ0KNjA1OiAgICAgICAgICAgICAgICAgDQo2MDY6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeEhhbmRsZSApOw0KQkZEMDY1N0MgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDY1ODAgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDY1OTYNCkJGRDA2NTg0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNjU4NiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNjU4OCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDY1OEEgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDY1OEMgIDAyNUUzMEEwICAgQURESVUgQTEsIFpFUk8sIDYwNg0KQkZEMDY1OTAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwNjU5MiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDY1OTQgICAgICAwQzAwICAgTk9QDQo2MDc6ICAgICAgICAgICAgICAgICAJCXJldHVybiB4SGFuZGxlOw0KQkZEMDY1OTYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KNjA4OiAgICAgICAgICAgICAgICAgCX0NCkJGRDA2NTlBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNjU5QyAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNjU5RSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNjVBMCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNjVBMiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNjVBNCAgICAgIDBDMDAgICBOT1ANCjYwOTogICAgICAgICAgICAgICAgIA0KNjEwOiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9DT1VOVElOR19TRU1BUEhPUkVTICovDQo2MTE6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjYxMjogICAgICAgICAgICAgICAgIA0KNjEzOiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UXVldWVHZW5lcmljU2VuZCggUXVldWVIYW5kbGVfdCB4UXVldWUsIGNvbnN0IHZvaWQgKiBjb25zdCBwdkl0ZW1Ub1F1ZXVlLCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCwgY29uc3QgQmFzZVR5cGVfdCB4Q29weVBvc2l0aW9uICkNCjYxNDogICAgICAgICAgICAgICAgIHsNCkJGRDAwRDQ0ICAgICAgNEZFMSAgIEFERElVIFNQLCBTUCwgLTY0DQpCRkQwMEQ0NiAgICAgIENCRUYgICBTVyBSQSwgNjAoU1ApDQpCRkQwMEQ0OCAgICAgIENCQ0UgICBTVyBTOCwgNTYoU1ApDQpCRkQwMEQ0QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDBENEMgIDAwNDBGODlFICAgU1cgQTAsIDY0KFM4KQ0KQkZEMDBENTAgIDAwNDRGOEJFICAgU1cgQTEsIDY4KFM4KQ0KQkZEMDBENTQgIDAwNDhGOERFICAgU1cgQTIsIDcyKFM4KQ0KQkZEMDBENTggIDAwNENGOEZFICAgU1cgQTMsIDc2KFM4KQ0KNjE1OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4RW50cnlUaW1lU2V0ID0gcGRGQUxTRSwgeFlpZWxkUmVxdWlyZWQ7DQpCRkQwMEQ1QyAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCjYxNjogICAgICAgICAgICAgICAgIFRpbWVPdXRfdCB4VGltZU91dDsNCjYxNzogICAgICAgICAgICAgICAgIFF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlID0gKCBRdWV1ZV90ICogKSB4UXVldWU7DQpCRkQwMEQ2MCAgMDA0MEZDNUUgICBMVyBWMCwgNjQoUzgpDQpCRkQwMEQ2NCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQo2MTg6ICAgICAgICAgICAgICAgICANCjYxOTogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCkJGRDAwRDY4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAwRDZDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAwRDgyDQpCRkQwMEQ3MCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDBENzIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDBENzQgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDAwRDc2ICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDAwRDc4ICAwMjZCMzBBMCAgIEFERElVIEExLCBaRVJPLCA2MTkNCkJGRDAwRDdDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDBEN0UgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAwRDgwICAgICAgMEMwMCAgIE5PUA0KNjIwOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggISggKCBwdkl0ZW1Ub1F1ZXVlID09IE5VTEwgKSAmJiAoIHB4UXVldWUtPnV4SXRlbVNpemUgIT0gKCBVQmFzZVR5cGVfdCApIDBVICkgKSApOw0KQkZEMDBEODIgIDAwNDRGQzVFICAgTFcgVjAsIDY4KFM4KQ0KQkZEMDBEODYgIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDBEOTYNCkJGRDAwRDhBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAwRDhFICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkNCkJGRDAwRDkyICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAwRDlDDQpCRkQwMEQ5NiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDBEOTggICAgICBDQzAyICAgQiAweEJGRDAwRDlFDQpCRkQwMEQ5QSAgICAgIDBDMDAgICBOT1ANCkJGRDAwRDlDICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8NCkJGRDAwRDlFICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAwREI0DQpCRkQwMERBMiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDBEQTQgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDBEQTYgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDAwREE4ICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDAwREFBICAwMjZDMzBBMCAgIEFERElVIEExLCBaRVJPLCA2MjANCkJGRDAwREFFICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDBEQjAgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAwREIyICAgICAgMEMwMCAgIE5PUA0KNjIxOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggISggKCB4Q29weVBvc2l0aW9uID09IHF1ZXVlT1ZFUldSSVRFICkgJiYgKCBweFF1ZXVlLT51eExlbmd0aCAhPSAxICkgKSApOw0KQkZEMDBEQjQgIDAwNENGQzdFICAgTFcgVjEsIDc2KFM4KQ0KQkZEMDBEQjggICAgICBFRDAyICAgTEkgVjAsIDINCkJGRDAwREJBICAwMDA4QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDBEQ0UNCkJGRDAwREJDICAwQzAwMDAwOCAgIFNMTCBaRVJPLCBUMCwgMQ0KQkZEMDBEQkUgICAgICAwQzAwICAgTk9QDQpCRkQwMERDMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMERDNCAgICAgIDY5QUYgICBMVyBWMSwgNjAoVjApDQpCRkQwMERDNiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDBEQzggIDAwMDRCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMERENA0KQkZEMDBEQ0EgIDBDMDAwMDA0ICAgU0xMIFpFUk8sIEEwLCAxDQpCRkQwMERDQyAgICAgIDBDMDAgICBOT1ANCkJGRDAwRENFICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMEREMCAgICAgIENDMDIgICBCIDB4QkZEMDBERDYNCkJGRDAwREQyICAgICAgMEMwMCAgIE5PUA0KQkZEMDBERDQgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTw0KQkZEMDBERDYgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDBERUMNCkJGRDAwRERBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMEREQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMERERSAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDBERTAgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDBERTIgIDAyNkQzMEEwICAgQURESVUgQTEsIFpFUk8sIDYyMQ0KQkZEMDBERTYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMERFOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDBERUEgICAgICAwQzAwICAgTk9QDQo2MjI6ICAgICAgICAgICAgICAgICAJI2lmICggKCBJTkNMVURFX3hUYXNrR2V0U2NoZWR1bGVyU3RhdGUgPT0gMSApIHx8ICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkgKQ0KNjIzOiAgICAgICAgICAgICAgICAgCXsNCjYyNDogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCAhKCAoIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoKSA9PSB0YXNrU0NIRURVTEVSX1NVU1BFTkRFRCApICYmICggeFRpY2tzVG9XYWl0ICE9IDAgKSApICk7DQpCRkQwMERFQyAgNEE4RTc3RTggICBKQUxTIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUNCkJGRDAwREVFICAgICAgNEE4RSAgIExXIFM0LCA1NihTUCkNCkJGRDAwREYwICAgICAgMEMwMCAgIE5PUA0KQkZEMDBERjIgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDBERkUNCkJGRDAwREY2ICAwMDQ4RkM1RSAgIExXIFYwLCA3MihTOCkNCkJGRDAwREZBICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAwRTA0DQpCRkQwMERGRSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDBFMDAgICAgICBDQzAyICAgQiAweEJGRDAwRTA2DQpCRkQwMEUwMiAgICAgIDBDMDAgICBOT1ANCkJGRDAwRTA0ICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8NCkJGRDAwRTA2ICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAwRTIyDQpCRkQwMEUwQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDBFMEMgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDBFMEUgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDAwRTEwICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDAwRTEyICAwMjcwMzBBMCAgIEFERElVIEExLCBaRVJPLCA2MjQNCkJGRDAwRTE2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDBFMTggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAwRTFBICAgICAgMEMwMCAgIE5PUA0KQkZEMDBFMUMgICAgICBDQzAyICAgQiAweEJGRDAwRTIyDQpCRkQwMEUxRSAgICAgIDBDMDAgICBOT1ANCjYyNTogICAgICAgICAgICAgICAgIAl9DQo2MjY6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQo2Mjc6ICAgICAgICAgICAgICAgICANCjYyODogICAgICAgICAgICAgICAgIA0KNjI5OiAgICAgICAgICAgICAgICAgCS8qIFRoaXMgZnVuY3Rpb24gcmVsYXhlcyB0aGUgY29kaW5nIHN0YW5kYXJkIHNvbWV3aGF0IHRvIGFsbG93IHJldHVybg0KNjMwOiAgICAgICAgICAgICAgICAgCXN0YXRlbWVudHMgd2l0aGluIHRoZSBmdW5jdGlvbiBpdHNlbGYuICBUaGlzIGlzIGRvbmUgaW4gdGhlIGludGVyZXN0DQo2MzE6ICAgICAgICAgICAgICAgICAJb2YgZXhlY3V0aW9uIHRpbWUgZWZmaWNpZW5jeS4gKi8NCjYzMjogICAgICAgICAgICAgICAgIAlmb3IoIDs7ICkNCjYzMzogICAgICAgICAgICAgICAgIAl7DQo2MzQ6ICAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDBFMjIgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDAwRTI0ICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDBFMjYgICAgICAwQzAwICAgTk9QDQo2MzU6ICAgICAgICAgICAgICAgICAJCXsNCjYzNjogICAgICAgICAgICAgICAgIAkJCS8qIElzIHRoZXJlIHJvb20gb24gdGhlIHF1ZXVlIG5vdz8gIFRoZSBydW5uaW5nIHRhc2sgbXVzdCBiZSB0aGUNCjYzNzogICAgICAgICAgICAgICAgIAkJCWhpZ2hlc3QgcHJpb3JpdHkgdGFzayB3YW50aW5nIHRvIGFjY2VzcyB0aGUgcXVldWUuICBJZiB0aGUgaGVhZCBpdGVtDQo2Mzg6ICAgICAgICAgICAgICAgICAJCQlpbiB0aGUgcXVldWUgaXMgdG8gYmUgb3ZlcndyaXR0ZW4gdGhlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgdGhlDQo2Mzk6ICAgICAgICAgICAgICAgICAJCQlxdWV1ZSBpcyBmdWxsLiAqLw0KNjQwOiAgICAgICAgICAgICAgICAgCQkJaWYoICggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPCBweFF1ZXVlLT51eExlbmd0aCApIHx8ICggeENvcHlQb3NpdGlvbiA9PSBxdWV1ZU9WRVJXUklURSApICkNCkJGRDAwRTI4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAwRTJDICAgICAgNjlBRSAgIExXIFYxLCA1NihWMCkNCkJGRDAwRTJFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAwRTMyICAgICAgNjkyRiAgIExXIFYwLCA2MChWMCkNCkJGRDAwRTM0ICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDBFMzYgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwMEUzOCAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMEU0OA0KQkZEMDBFM0MgIDAwNENGQzdFICAgTFcgVjEsIDc2KFM4KQ0KQkZEMDBFNDAgICAgICBFRDAyICAgTEkgVjAsIDINCkJGRDAwRTQyICAwMDZFQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDBGMjINCkJGRDAwRTQ0ICAwQzAwMDA2RSAgIFNMTCBWMSwgVDYsIDENCkJGRDAwRTQ2ICAgICAgMEMwMCAgIE5PUA0KNjQxOiAgICAgICAgICAgICAgICAgCQkJew0KNjQyOiAgICAgICAgICAgICAgICAgCQkJCXRyYWNlUVVFVUVfU0VORCggcHhRdWV1ZSApOw0KNjQzOiAgICAgICAgICAgICAgICAgCQkJCXhZaWVsZFJlcXVpcmVkID0gcHJ2Q29weURhdGFUb1F1ZXVlKCBweFF1ZXVlLCBwdkl0ZW1Ub1F1ZXVlLCB4Q29weVBvc2l0aW9uICk7DQpCRkQwMEU0OCAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwMEU0QyAgMDA0NEZDQkUgICBMVyBBMSwgNjgoUzgpDQpCRkQwMEU1MCAgMDA0Q0ZDREUgICBMVyBBMiwgNzYoUzgpDQpCRkQwMEU1NCAgMTRFNjc3RTggICBKQUxTIHBydkNvcHlEYXRhVG9RdWV1ZQ0KQkZEMDBFNTYgIDBDMDAxNEU2ICAgTEJVIEEzLCAzMDcyKEEyKQ0KQkZEMDBFNTggICAgICAwQzAwICAgTk9QDQpCRkQwMEU1QSAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQo2NDQ6ICAgICAgICAgICAgICAgICANCjY0NTogICAgICAgICAgICAgICAgIAkJCQkjaWYgKCBjb25maWdVU0VfUVVFVUVfU0VUUyA9PSAxICkNCjY0NjogICAgICAgICAgICAgICAgIAkJCQl7DQo2NDc6ICAgICAgICAgICAgICAgICAJCQkJCWlmKCBweFF1ZXVlLT5weFF1ZXVlU2V0Q29udGFpbmVyICE9IE5VTEwgKQ0KQkZEMDBFNUUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDBFNjIgIDAwNENGQzQyICAgTFcgVjAsIDc2KFYwKQ0KQkZEMDBFNjYgIDAwMUU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDBFQTYNCjY0ODogICAgICAgICAgICAgICAgIAkJCQkJew0KNjQ5OiAgICAgICAgICAgICAgICAgCQkJCQkJaWYoIHBydk5vdGlmeVF1ZXVlU2V0Q29udGFpbmVyKCBweFF1ZXVlLCB4Q29weVBvc2l0aW9uICkgPT0gcGRUUlVFICkNCkJGRDAwRTZBICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDAwRTZFICAwMDRDRkNCRSAgIExXIEExLCA3NihTOCkNCkJGRDAwRTcyICAyMUQ4NzdFOCAgIEpBTFMgcHJ2Tm90aWZ5UXVldWVTZXRDb250YWluZXINCkJGRDAwRTc0ICAwQzAwMjFEOCAgIExXQzIgVDYsIDMwNzIoVDgpDQpCRkQwMEU3NiAgICAgIDBDMDAgICBOT1ANCkJGRDAwRTc4ICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwDQpCRkQwMEU3QSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDBFN0MgIDAwNEJCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMEYxNg0KQkZEMDBFN0UgIDBDMDAwMDRCICAgU0xMIFYwLCBUMywgMQ0KQkZEMDBFODAgICAgICAwQzAwICAgTk9QDQo2NTA6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo2NTE6ICAgICAgICAgICAgICAgICAJCQkJCQkJLyogVGhlIHF1ZXVlIGlzIGEgbWVtYmVyIG9mIGEgcXVldWUgc2V0LCBhbmQgcG9zdGluZw0KNjUyOiAgICAgICAgICAgICAgICAgCQkJCQkJCXRvIHRoZSBxdWV1ZSBzZXQgY2F1c2VkIGEgaGlnaGVyIHByaW9yaXR5IHRhc2sgdG8NCjY1MzogICAgICAgICAgICAgICAgIAkJCQkJCQl1bmJsb2NrLiBBIGNvbnRleHQgc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KNjU0OiAgICAgICAgICAgICAgICAgCQkJCQkJCXF1ZXVlWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpOw0KQkZEMDBFODIgIDRFMTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQ0KQkZEMDBFODQgICAgICA0RTE2ICAgQURESVUgUzAsIFMwLCAtNQ0KQkZEMDBFODYgICAgICAwQzAwICAgTk9QDQpCRkQwMEU4OCAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQpCRkQwMEU4QyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMEU5MCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDAwRTk0ICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkNCkJGRDAwRTk4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDAwRTlDICA0RTI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQ0KQkZEMDBFOUUgICAgICA0RTI2ICAgQURESVUgUzEsIFMxLCAzDQpCRkQwMEVBMCAgICAgIDBDMDAgICBOT1ANCkJGRDAwRUEyICAgICAgQ0MzOSAgIEIgMHhCRkQwMEYxNg0KQkZEMDBFQTQgICAgICAwQzAwICAgTk9QDQo2NTU6ICAgICAgICAgICAgICAgICAJCQkJCQl9DQo2NTY6ICAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQo2NTc6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo2NTg6ICAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjU5OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KNjYwOiAgICAgICAgICAgICAgICAgCQkJCQl9DQo2NjE6ICAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjY2MjogICAgICAgICAgICAgICAgIAkJCQkJew0KNjYzOiAgICAgICAgICAgICAgICAgCQkJCQkJLyogSWYgdGhlcmUgd2FzIGEgdGFzayB3YWl0aW5nIGZvciBkYXRhIHRvIGFycml2ZSBvbiB0aGUNCjY2NDogICAgICAgICAgICAgICAgIAkJCQkJCXF1ZXVlIHRoZW4gdW5ibG9jayBpdCBub3cuICovDQo2NjU6ICAgICAgICAgICAgICAgICAJCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KQkZEMDBFQTYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDBFQUEgICAgICA2OTI5ICAgTFcgVjAsIDM2KFYwKQ0KQkZEMDBFQUMgIDAwMUY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDBFRUUNCjY2NjogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjY2NzogICAgICAgICAgICAgICAgIAkJCQkJCQlpZiggeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZFRSVUUgKQ0KQkZEMDBFQjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDBFQjQgIDAwMjQzMDQyICAgQURESVUgVjAsIFYwLCAzNg0KQkZEMDBFQjggICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAwRUJBICAyMkJDNzdFOCAgIEpBTFMgeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0DQpCRkQwMEVCQyAgMEMwMDIyQkMgICBMV0MyIFM1LCAzMDcyKEdQKQ0KQkZEMDBFQkUgICAgICAwQzAwICAgTk9QDQpCRkQwMEVDMCAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMA0KQkZEMDBFQzIgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAwRUM0ICAwMDI3QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDBGMTYNCkJGRDAwRUM2ICAwQzAwMDAyNyAgIFNMTCBBVCwgQTMsIDENCkJGRDAwRUM4ICAgICAgMEMwMCAgIE5PUA0KNjY4OiAgICAgICAgICAgICAgICAgCQkJCQkJCXsNCjY2OTogICAgICAgICAgICAgICAgIAkJCQkJCQkJLyogVGhlIHVuYmxvY2tlZCB0YXNrIGhhcyBhIHByaW9yaXR5IGhpZ2hlciB0aGFuDQo2NzA6ICAgICAgICAgICAgICAgICAJCQkJCQkJCW91ciBvd24gc28geWllbGQgaW1tZWRpYXRlbHkuICBZZXMgaXQgaXMgb2sgdG8NCjY3MTogICAgICAgICAgICAgICAgIAkJCQkJCQkJZG8gdGhpcyBmcm9tIHdpdGhpbiB0aGUgY3JpdGljYWwgc2VjdGlvbiAtIHRoZQ0KNjcyOiAgICAgICAgICAgICAgICAgCQkJCQkJCQlrZXJuZWwgdGFrZXMgY2FyZSBvZiB0aGF0LiAqLw0KNjczOiAgICAgICAgICAgICAgICAgCQkJCQkJCQlxdWV1ZVlJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKTsNCkJGRDAwRUNBICA0RTE2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UNCkJGRDAwRUNDICAgICAgNEUxNiAgIEFERElVIFMwLCBTMCwgLTUNCkJGRDAwRUNFICAgICAgMEMwMCAgIE5PUA0KQkZEMDBFRDAgIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQ0KQkZEMDBFRDQgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDBFRDggIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2DQpCRkQwMEVEQyAgMDAyNEY4NUUgICBTVyBWMCwgMzYoUzgpDQpCRkQwMEVFMCAgMDAyNEZDOUUgICBMVyBBMCwgMzYoUzgpDQpCRkQwMEVFNCAgNEUyNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UNCkJGRDAwRUU2ICAgICAgNEUyNiAgIEFERElVIFMxLCBTMSwgMw0KQkZEMDBFRTggICAgICAwQzAwICAgTk9QDQpCRkQwMEVFQSAgICAgIENDMTUgICBCIDB4QkZEMDBGMTYNCkJGRDAwRUVDICAgICAgMEMwMCAgIE5PUA0KNjc0OiAgICAgICAgICAgICAgICAgCQkJCQkJCX0NCjY3NTogICAgICAgICAgICAgICAgIAkJCQkJCQllbHNlDQo2NzY6ICAgICAgICAgICAgICAgICAJCQkJCQkJew0KNjc3OiAgICAgICAgICAgICAgICAgCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo2Nzg6ICAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KNjc5OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KNjgwOiAgICAgICAgICAgICAgICAgCQkJCQkJZWxzZSBpZiggeFlpZWxkUmVxdWlyZWQgIT0gcGRGQUxTRSApDQpCRkQwMEVFRSAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMEVGMiAgMDAxMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMEYxNg0KNjgxOiAgICAgICAgICAgICAgICAgCQkJCQkJew0KNjgyOiAgICAgICAgICAgICAgICAgCQkJCQkJCS8qIFRoaXMgcGF0aCBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IHdpbGwgb25seSBnZXQNCjY4MzogICAgICAgICAgICAgICAgIAkJCQkJCQlleGVjdXRlZCBpZiB0aGUgdGFzayB3YXMgaG9sZGluZyBtdWx0aXBsZSBtdXRleGVzDQo2ODQ6ICAgICAgICAgICAgICAgICAJCQkJCQkJYW5kIHRoZSBtdXRleGVzIHdlcmUgZ2l2ZW4gYmFjayBpbiBhbiBvcmRlciB0aGF0IGlzDQo2ODU6ICAgICAgICAgICAgICAgICAJCQkJCQkJZGlmZmVyZW50IHRvIHRoYXQgaW4gd2hpY2ggdGhleSB3ZXJlIHRha2VuLiAqLw0KNjg2OiAgICAgICAgICAgICAgICAgCQkJCQkJCXF1ZXVlWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpOw0KQkZEMDBFRjYgIDRFMTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQ0KQkZEMDBFRjggICAgICA0RTE2ICAgQURESVUgUzAsIFMwLCAtNQ0KQkZEMDBFRkEgICAgICAwQzAwICAgTk9QDQpCRkQwMEVGQyAgMDAyOEY4NUUgICBTVyBWMCwgNDAoUzgpDQpCRkQwMEYwMCAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwMEYwNCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDAwRjA4ICAwMDI4Rjg1RSAgIFNXIFYwLCA0MChTOCkNCkJGRDAwRjBDICAwMDI4RkM5RSAgIExXIEEwLCA0MChTOCkNCkJGRDAwRjEwICA0RTI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQ0KQkZEMDBGMTIgICAgICA0RTI2ICAgQURESVUgUzEsIFMxLCAzDQpCRkQwMEYxNCAgICAgIDBDMDAgICBOT1ANCjY4NzogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjY4ODogICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjY4OTogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjY5MDogICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo2OTE6ICAgICAgICAgICAgICAgICAJCQkJCQl9DQo2OTI6ICAgICAgICAgICAgICAgICAJCQkJCX0NCjY5MzogICAgICAgICAgICAgICAgIAkJCQl9DQo2OTQ6ICAgICAgICAgICAgICAgICAJCQkJI2Vsc2UgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjY5NTogICAgICAgICAgICAgICAgIAkJCQl7DQo2OTY6ICAgICAgICAgICAgICAgICAJCQkJCS8qIElmIHRoZXJlIHdhcyBhIHRhc2sgd2FpdGluZyBmb3IgZGF0YSB0byBhcnJpdmUgb24gdGhlDQo2OTc6ICAgICAgICAgICAgICAgICAJCQkJCXF1ZXVlIHRoZW4gdW5ibG9jayBpdCBub3cuICovDQo2OTg6ICAgICAgICAgICAgICAgICAJCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQo2OTk6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjcwMDogICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkVFJVRSApDQo3MDE6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo3MDI6ICAgICAgICAgICAgICAgICAJCQkJCQkJLyogVGhlIHVuYmxvY2tlZCB0YXNrIGhhcyBhIHByaW9yaXR5IGhpZ2hlciB0aGFuDQo3MDM6ICAgICAgICAgICAgICAgICAJCQkJCQkJb3VyIG93biBzbyB5aWVsZCBpbW1lZGlhdGVseS4gIFllcyBpdCBpcyBvayB0byBkbw0KNzA0OiAgICAgICAgICAgICAgICAgCQkJCQkJCXRoaXMgZnJvbSB3aXRoaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24gLSB0aGUga2VybmVsDQo3MDU6ICAgICAgICAgICAgICAgICAJCQkJCQkJdGFrZXMgY2FyZSBvZiB0aGF0LiAqLw0KNzA2OiAgICAgICAgICAgICAgICAgCQkJCQkJCXF1ZXVlWUlFTERfSUZfVVNJTkdfUFJFRU1QVElPTigpOw0KNzA3OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KNzA4OiAgICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KNzA5OiAgICAgICAgICAgICAgICAgCQkJCQkJew0KNzEwOiAgICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjcxMTogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjcxMjogICAgICAgICAgICAgICAgIAkJCQkJfQ0KNzEzOiAgICAgICAgICAgICAgICAgCQkJCQllbHNlIGlmKCB4WWllbGRSZXF1aXJlZCAhPSBwZEZBTFNFICkNCjcxNDogICAgICAgICAgICAgICAgIAkJCQkJew0KNzE1OiAgICAgICAgICAgICAgICAgCQkJCQkJLyogVGhpcyBwYXRoIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgd2lsbCBvbmx5IGdldA0KNzE2OiAgICAgICAgICAgICAgICAgCQkJCQkJZXhlY3V0ZWQgaWYgdGhlIHRhc2sgd2FzIGhvbGRpbmcgbXVsdGlwbGUgbXV0ZXhlcyBhbmQNCjcxNzogICAgICAgICAgICAgICAgIAkJCQkJCXRoZSBtdXRleGVzIHdlcmUgZ2l2ZW4gYmFjayBpbiBhbiBvcmRlciB0aGF0IGlzDQo3MTg6ICAgICAgICAgICAgICAgICAJCQkJCQlkaWZmZXJlbnQgdG8gdGhhdCBpbiB3aGljaCB0aGV5IHdlcmUgdGFrZW4uICovDQo3MTk6ICAgICAgICAgICAgICAgICAJCQkJCQlxdWV1ZVlJRUxEX0lGX1VTSU5HX1BSRUVNUFRJT04oKTsNCjcyMDogICAgICAgICAgICAgICAgIAkJCQkJfQ0KNzIxOiAgICAgICAgICAgICAgICAgCQkJCQllbHNlDQo3MjI6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjcyMzogICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjcyNDogICAgICAgICAgICAgICAgIAkJCQkJfQ0KNzI1OiAgICAgICAgICAgICAgICAgCQkJCX0NCjcyNjogICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjcyNzogICAgICAgICAgICAgICAgIA0KNzI4OiAgICAgICAgICAgICAgICAgCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMEYxNiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMEYxOCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMjcxQw0KQkZEMDBGMUEgICAgICAwQzAwICAgTk9QDQo3Mjk6ICAgICAgICAgICAgICAgICAJCQkJcmV0dXJuIHBkUEFTUzsNCkJGRDAwRjFDICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMEYxRSAgICAgIENDODcgICBCIDB4QkZEMDEwMkUNCkJGRDAwRjIwICAgICAgMEMwMCAgIE5PUA0KNzMwOiAgICAgICAgICAgICAgICAgCQkJfQ0KNzMxOiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KNzMyOiAgICAgICAgICAgICAgICAgCQkJew0KNzMzOiAgICAgICAgICAgICAgICAgCQkJCWlmKCB4VGlja3NUb1dhaXQgPT0gKCBUaWNrVHlwZV90ICkgMCApDQpCRkQwMEYyMiAgMDA0OEZDNUUgICBMVyBWMCwgNzIoUzgpDQpCRkQwMEYyNiAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMEYzNg0KNzM0OiAgICAgICAgICAgICAgICAgCQkJCXsNCjczNTogICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIHF1ZXVlIHdhcyBmdWxsIGFuZCBubyBibG9jayB0aW1lIGlzIHNwZWNpZmllZCAob3INCjczNjogICAgICAgICAgICAgICAgIAkJCQkJdGhlIGJsb2NrIHRpbWUgaGFzIGV4cGlyZWQpIHNvIGxlYXZlIG5vdy4gKi8NCjczNzogICAgICAgICAgICAgICAgIAkJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAwRjJBICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDAwRjJDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyNzMwDQpCRkQwMEYyRSAgICAgIDBDMDAgICBOT1ANCjczODogICAgICAgICAgICAgICAgIA0KNzM5OiAgICAgICAgICAgICAgICAgCQkJCQkvKiBSZXR1cm4gdG8gdGhlIG9yaWdpbmFsIHByaXZpbGVnZSBsZXZlbCBiZWZvcmUgZXhpdGluZw0KNzQwOiAgICAgICAgICAgICAgICAgCQkJCQl0aGUgZnVuY3Rpb24uICovDQo3NDE6ICAgICAgICAgICAgICAgICAJCQkJCXRyYWNlUVVFVUVfU0VORF9GQUlMRUQoIHB4UXVldWUgKTsNCjc0MjogICAgICAgICAgICAgICAgIAkJCQkJcmV0dXJuIGVyclFVRVVFX0ZVTEw7DQpCRkQwMEYzMCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQpCRkQwMEYzMiAgICAgIENDN0QgICBCIDB4QkZEMDEwMkUNCkJGRDAwRjM0ICAgICAgMEMwMCAgIE5PUA0KNzQzOiAgICAgICAgICAgICAgICAgCQkJCX0NCjc0NDogICAgICAgICAgICAgICAgIAkJCQllbHNlIGlmKCB4RW50cnlUaW1lU2V0ID09IHBkRkFMU0UgKQ0KQkZEMDBGMzYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDBGM0EgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDBGNTANCjc0NTogICAgICAgICAgICAgICAgIAkJCQl7DQo3NDY6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBxdWV1ZSB3YXMgZnVsbCBhbmQgYSBibG9jayB0aW1lIHdhcyBzcGVjaWZpZWQgc28NCjc0NzogICAgICAgICAgICAgICAgIAkJCQkJY29uZmlndXJlIHRoZSB0aW1lb3V0IHN0cnVjdHVyZS4gKi8NCjc0ODogICAgICAgICAgICAgICAgIAkJCQkJdlRhc2tTZXRUaW1lT3V0U3RhdGUoICZ4VGltZU91dCApOw0KQkZEMDBGM0UgIDAwMkMzMDVFICAgQURESVUgVjAsIFM4LCA0NA0KQkZEMDBGNDIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAwRjQ0ICA0N0E2NzdFOCAgIEpBTFMgdlRhc2tTZXRUaW1lT3V0U3RhdGUNCkJGRDAwRjQ4ICAgICAgMEMwMCAgIE5PUA0KNzQ5OiAgICAgICAgICAgICAgICAgCQkJCQl4RW50cnlUaW1lU2V0ID0gcGRUUlVFOw0KQkZEMDBGNEEgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAwRjRDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjc1MDogICAgICAgICAgICAgICAgIAkJCQl9DQo3NTE6ICAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KNzUyOiAgICAgICAgICAgICAgICAgCQkJCXsNCjc1MzogICAgICAgICAgICAgICAgIAkJCQkJLyogRW50cnkgdGltZSB3YXMgYWxyZWFkeSBzZXQuICovDQo3NTQ6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjc1NTogICAgICAgICAgICAgICAgIAkJCQl9DQo3NTY6ICAgICAgICAgICAgICAgICAJCQl9DQo3NTc6ICAgICAgICAgICAgICAgICAJCX0NCjc1ODogICAgICAgICAgICAgICAgIAkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAwRjUwICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDAwRjUyICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyNzU2DQpCRkQwMEY1NCAgICAgIDBDMDAgICBOT1ANCjc1OTogICAgICAgICAgICAgICAgIA0KNzYwOiAgICAgICAgICAgICAgICAgCQkvKiBJbnRlcnJ1cHRzIGFuZCBvdGhlciB0YXNrcyBjYW4gc2VuZCB0byBhbmQgcmVjZWl2ZSBmcm9tIHRoZSBxdWV1ZQ0KNzYxOiAgICAgICAgICAgICAgICAgCQlub3cgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaGFzIGJlZW4gZXhpdGVkLiAqLw0KNzYyOiAgICAgICAgICAgICAgICAgDQo3NjM6ICAgICAgICAgICAgICAgICAJCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDBGNTYgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwNCkJGRDAwRjU4ICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYNCkJGRDAwRjVBICAgICAgMEMwMCAgIE5PUA0KNzY0OiAgICAgICAgICAgICAgICAgCQlwcnZMb2NrUXVldWUoIHB4UXVldWUgKTsNCkJGRDAwRjVDICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwMEY1RSAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDAwRjYwICAgICAgMEMwMCAgIE5PUA0KQkZEMDBGNjIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDBGNjYgIDAwNDRGQzYyICAgTFcgVjEsIDY4KFYwKQ0KQkZEMDBGNkEgICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwMEY2QyAgMDAwNUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAwRjdBDQpCRkQwMEY2RSAgMEMwMDAwMDUgICBTTEwgWkVSTywgQTEsIDENCkJGRDAwRjcwICAgICAgMEMwMCAgIE5PUA0KQkZEMDBGNzIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDBGNzYgIDAwNDRGODAyICAgU1cgWkVSTywgNjgoVjApDQpCRkQwMEY3QSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMEY3RSAgMDA0OEZDNjIgICBMVyBWMSwgNzIoVjApDQpCRkQwMEY4MiAgICAgIEVEN0YgICBMSSBWMCwgLTENCkJGRDAwRjg0ICAwMDA1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDBGOTINCkJGRDAwRjg2ICAwQzAwMDAwNSAgIFNMTCBaRVJPLCBBMSwgMQ0KQkZEMDBGODggICAgICAwQzAwICAgTk9QDQpCRkQwMEY4QSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMEY4RSAgMDA0OEY4MDIgICBTVyBaRVJPLCA3MihWMCkNCkJGRDAwRjkyICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDAwRjk0ICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyNzk4DQpCRkQwMEY5NiAgICAgIDBDMDAgICBOT1ANCjc2NTogICAgICAgICAgICAgICAgIA0KNzY2OiAgICAgICAgICAgICAgICAgCQkvKiBVcGRhdGUgdGhlIHRpbWVvdXQgc3RhdGUgdG8gc2VlIGlmIGl0IGhhcyBleHBpcmVkIHlldC4gKi8NCjc2NzogICAgICAgICAgICAgICAgIAkJaWYoIHhUYXNrQ2hlY2tGb3JUaW1lT3V0KCAmeFRpbWVPdXQsICZ4VGlja3NUb1dhaXQgKSA9PSBwZEZBTFNFICkNCkJGRDAwRjk4ICAwMDJDMzA3RSAgIEFERElVIFYxLCBTOCwgNDQNCkJGRDAwRjlDICAwMDQ4MzA1RSAgIEFERElVIFYwLCBTOCwgNzINCkJGRDAwRkEwICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwMEZBMiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDBGQTQgIDFGRjY3N0U4ICAgSkFMUyB4VGFza0NoZWNrRm9yVGltZU91dA0KQkZEMDBGQTYgIDBDMDAxRkY2ICAgTEIgUkEsIDMwNzIoUzYpDQpCRkQwMEZBOCAgICAgIDBDMDAgICBOT1ANCkJGRDAwRkFBICAwMDM3NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMDFDDQo3Njg6ICAgICAgICAgICAgICAgICAJCXsNCjc2OTogICAgICAgICAgICAgICAgIAkJCWlmKCBwcnZJc1F1ZXVlRnVsbCggcHhRdWV1ZSApICE9IHBkRkFMU0UgKQ0KQkZEMDBGQUUgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQ0KQkZEMDBGQjIgIDQ3ODI3N0U4ICAgSkFMUyBwcnZJc1F1ZXVlRnVsbA0KQkZEMDBGQjYgICAgICAwQzAwICAgTk9QDQpCRkQwMEZCOCAgMDAyNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTAwOA0KNzcwOiAgICAgICAgICAgICAgICAgCQkJew0KNzcxOiAgICAgICAgICAgICAgICAgCQkJCXRyYWNlQkxPQ0tJTkdfT05fUVVFVUVfU0VORCggcHhRdWV1ZSApOw0KNzcyOiAgICAgICAgICAgICAgICAgCQkJCXZUYXNrUGxhY2VPbkV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApLCB4VGlja3NUb1dhaXQgKTsNCkJGRDAwRkJDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAwRkMwICAgICAgNkRBOCAgIEFERElVIFYxLCBWMCwgMTYNCkJGRDAwRkMyICAwMDQ4RkM1RSAgIExXIFYwLCA3MihTOCkNCkJGRDAwRkM2ICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwMEZDOCAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDBGQ0EgIDJGM0E3N0U4ICAgSkFMUyB2VGFza1BsYWNlT25FdmVudExpc3QNCkJGRDAwRkNDICAgICAgMkYzQSAgIEFOREkgQTIsIFYxLCAweDIwDQpCRkQwMEZDRSAgICAgIDBDMDAgICBOT1ANCjc3MzogICAgICAgICAgICAgICAgIA0KNzc0OiAgICAgICAgICAgICAgICAgCQkJCS8qIFVubG9ja2luZyB0aGUgcXVldWUgbWVhbnMgcXVldWUgZXZlbnRzIGNhbiBlZmZlY3QgdGhlDQo3NzU6ICAgICAgICAgICAgICAgICAJCQkJZXZlbnQgbGlzdC4gIEl0IGlzIHBvc3NpYmxlCXRoYXQgaW50ZXJydXB0cyBvY2N1cnJpbmcgbm93DQo3NzY6ICAgICAgICAgICAgICAgICAJCQkJcmVtb3ZlIHRoaXMgdGFzayBmcm9tIHRoZSBldmVudAlsaXN0IGFnYWluIC0gYnV0IGFzIHRoZQ0KNzc3OiAgICAgICAgICAgICAgICAgCQkJCXNjaGVkdWxlciBpcyBzdXNwZW5kZWQgdGhlIHRhc2sgd2lsbCBnbyBvbnRvIHRoZSBwZW5kaW5nDQo3Nzg6ICAgICAgICAgICAgICAgICAJCQkJcmVhZHkgbGFzdCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgcmVhZHkgbGlzdC4gKi8NCjc3OTogICAgICAgICAgICAgICAgIAkJCQlwcnZVbmxvY2tRdWV1ZSggcHhRdWV1ZSApOw0KQkZEMDBGRDAgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQ0KQkZEMDBGRDQgIDFERUU3N0U4ICAgSkFMUyBwcnZVbmxvY2tRdWV1ZQ0KQkZEMDBGRDYgIDBDMDAxREVFICAgTEIgVDcsIDMwNzIoVDYpDQpCRkQwMEZEOCAgICAgIDBDMDAgICBOT1ANCjc4MDogICAgICAgICAgICAgICAgIA0KNzgxOiAgICAgICAgICAgICAgICAgCQkJCS8qIFJlc3VtaW5nIHRoZSBzY2hlZHVsZXIgd2lsbCBtb3ZlIHRhc2tzIGZyb20gdGhlIHBlbmRpbmcNCjc4MjogICAgICAgICAgICAgICAgIAkJCQlyZWFkeSBsaXN0IGludG8gdGhlIHJlYWR5IGxpc3QgLSBzbyBpdCBpcyBmZWFzaWJsZSB0aGF0IHRoaXMNCjc4MzogICAgICAgICAgICAgICAgIAkJCQl0YXNrIGlzIGFscmVhZHkgaW4gYSByZWFkeSBsaXN0IGJlZm9yZSBpdCB5aWVsZHMgLSBpbiB3aGljaA0KNzg0OiAgICAgICAgICAgICAgICAgCQkJCWNhc2UgdGhlIHlpZWxkIHdpbGwgbm90IGNhdXNlIGEgY29udGV4dCBzd2l0Y2ggdW5sZXNzIHRoZXJlDQo3ODU6ICAgICAgICAgICAgICAgICAJCQkJaXMgYWxzbyBhIGhpZ2hlciBwcmlvcml0eSB0YXNrIGluIHRoZSBwZW5kaW5nIHJlYWR5IGxpc3QuICovDQo3ODY6ICAgICAgICAgICAgICAgICAJCQkJaWYoIHhUYXNrUmVzdW1lQWxsKCkgPT0gcGRGQUxTRSApDQpCRkQwMEZEQSAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsDQpCRkQwMEZEQyAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpDQpCRkQwMEZERSAgICAgIDBDMDAgICBOT1ANCkJGRDAwRkUwICBGRjFFNDBBMiAgIEJORVpDIFYwLCAweEJGRDAwRTIwDQpCRkQwMEZFMiAgNzdFOEZGMUUgICBMVyBUOCwgMzA2OTYoUzgpDQo3ODc6ICAgICAgICAgICAgICAgICAJCQkJew0KNzg4OiAgICAgICAgICAgICAgICAgCQkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KQkZEMDBGRTQgIDRFMTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQ0KQkZEMDBGRTYgICAgICA0RTE2ICAgQURESVUgUzAsIFMwLCAtNQ0KQkZEMDBGRTggICAgICAwQzAwICAgTk9QDQpCRkQwMEZFQSAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQpCRkQwMEZFRSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwMEZGMiAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDAwRkY2ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCkJGRDAwRkZBICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkNCkJGRDAwRkZFICA0RTI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQ0KQkZEMDEwMDAgICAgICA0RTI2ICAgQURESVUgUzEsIFMxLCAzDQpCRkQwMTAwMiAgICAgIDBDMDAgICBOT1ANCjc4OTogICAgICAgICAgICAgICAgIAkJCQl9DQo3OTA6ICAgICAgICAgICAgICAgICAJCQl9DQo3OTE6ICAgICAgICAgICAgICAgICAJCQllbHNlDQo3OTI6ICAgICAgICAgICAgICAgICAJCQl7DQo3OTM6ICAgICAgICAgICAgICAgICAJCQkJLyogVHJ5IGFnYWluLiAqLw0KNzk0OiAgICAgICAgICAgICAgICAgCQkJCXBydlVubG9ja1F1ZXVlKCBweFF1ZXVlICk7DQpCRkQwMTAwOCAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwMTAwQyAgMURFRTc3RTggICBKQUxTIHBydlVubG9ja1F1ZXVlDQpCRkQwMTAwRSAgMEMwMDFERUUgICBMQiBUNywgMzA3MihUNikNCkJGRDAxMDEwICAgICAgMEMwMCAgIE5PUA0KNzk1OiAgICAgICAgICAgICAgICAgCQkJCSggdm9pZCApIHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwMTAxMiAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsDQpCRkQwMTAxNCAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpDQpCRkQwMTAxNiAgICAgIDBDMDAgICBOT1ANCjc5NjogICAgICAgICAgICAgICAgIAkJCX0NCjc5NzogICAgICAgICAgICAgICAgIAkJfQ0KNzk4OiAgICAgICAgICAgICAgICAgCQllbHNlDQo3OTk6ICAgICAgICAgICAgICAgICAJCXsNCjgwMDogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0aW1lb3V0IGhhcyBleHBpcmVkLiAqLw0KODAxOiAgICAgICAgICAgICAgICAgCQkJcHJ2VW5sb2NrUXVldWUoIHB4UXVldWUgKTsNCkJGRDAxMDFDICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDAxMDIwICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUNCkJGRDAxMDIyICAwQzAwMURFRSAgIExCIFQ3LCAzMDcyKFQ2KQ0KQkZEMDEwMjQgICAgICAwQzAwICAgTk9QDQo4MDI6ICAgICAgICAgICAgICAgICAJCQkoIHZvaWQgKSB4VGFza1Jlc3VtZUFsbCgpOw0KQkZEMDEwMjYgIDE1OEU3N0U4ICAgSkFMUyB4VGFza1Jlc3VtZUFsbA0KQkZEMDEwMjggIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQ0KQkZEMDEwMkEgICAgICAwQzAwICAgTk9QDQo4MDM6ICAgICAgICAgICAgICAgICANCjgwNDogICAgICAgICAgICAgICAgIAkJCS8qIFJldHVybiB0byB0aGUgb3JpZ2luYWwgcHJpdmlsZWdlIGxldmVsIGJlZm9yZSBleGl0aW5nIHRoZQ0KODA1OiAgICAgICAgICAgICAgICAgCQkJZnVuY3Rpb24uICovDQo4MDY6ICAgICAgICAgICAgICAgICAJCQl0cmFjZVFVRVVFX1NFTkRfRkFJTEVEKCBweFF1ZXVlICk7DQo4MDc6ICAgICAgICAgICAgICAgICAJCQlyZXR1cm4gZXJyUVVFVUVfRlVMTDsNCkJGRDAxMDJDICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8NCjgwODogICAgICAgICAgICAgICAgIAkJfQ0KODA5OiAgICAgICAgICAgICAgICAgCX0NCkJGRDAwRTIwICAgICAgMEMwMCAgIE5PUA0KQkZEMDEwMDQgICAgICBDRjBFICAgQiAweEJGRDAwRTIyDQpCRkQwMTAwNiAgICAgIDBDMDAgICBOT1ANCkJGRDAxMDE4ICAgICAgQ0YwNCAgIEIgMHhCRkQwMEUyMg0KQkZEMDEwMUEgICAgICAwQzAwICAgTk9QDQo4MTA6ICAgICAgICAgICAgICAgICB9DQpCRkQwMTAyRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDEwMzAgICAgICA0QkVGICAgTFcgUkEsIDYwKFNQKQ0KQkZEMDEwMzIgICAgICA0QkNFICAgTFcgUzgsIDU2KFNQKQ0KQkZEMDEwMzQgICAgICA0QzIxICAgQURESVUgU1AsIFNQLCA2NA0KQkZEMDEwMzYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDEwMzggICAgICAwQzAwICAgTk9QDQo4MTE6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjgxMjogICAgICAgICAgICAgICAgIA0KODEzOiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX0FMVEVSTkFUSVZFX0FQSSA9PSAxICkNCjgxNDogICAgICAgICAgICAgICAgIA0KODE1OiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFF1ZXVlQWx0R2VuZXJpY1NlbmQoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCBjb25zdCB2b2lkICogY29uc3QgcHZJdGVtVG9RdWV1ZSwgVGlja1R5cGVfdCB4VGlja3NUb1dhaXQsIEJhc2VUeXBlX3QgeENvcHlQb3NpdGlvbiApDQo4MTY6ICAgICAgICAgICAgICAgICAJew0KODE3OiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeEVudHJ5VGltZVNldCA9IHBkRkFMU0U7DQo4MTg6ICAgICAgICAgICAgICAgICAJVGltZU91dF90IHhUaW1lT3V0Ow0KODE5OiAgICAgICAgICAgICAgICAgCVF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlID0gKCBRdWV1ZV90ICogKSB4UXVldWU7DQo4MjA6ICAgICAgICAgICAgICAgICANCjgyMTogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQo4MjI6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggISggKCBwdkl0ZW1Ub1F1ZXVlID09IE5VTEwgKSAmJiAoIHB4UXVldWUtPnV4SXRlbVNpemUgIT0gKCBVQmFzZVR5cGVfdCApIDBVICkgKSApOw0KODIzOiAgICAgICAgICAgICAgICAgDQo4MjQ6ICAgICAgICAgICAgICAgICAJCWZvciggOzsgKQ0KODI1OiAgICAgICAgICAgICAgICAgCQl7DQo4MjY6ICAgICAgICAgICAgICAgICAJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCjgyNzogICAgICAgICAgICAgICAgIAkJCXsNCjgyODogICAgICAgICAgICAgICAgIAkJCQkvKiBJcyB0aGVyZSByb29tIG9uIHRoZSBxdWV1ZSBub3c/ICBUbyBiZSBydW5uaW5nIHdlIG11c3QgYmUNCjgyOTogICAgICAgICAgICAgICAgIAkJCQl0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHdhbnRpbmcgdG8gYWNjZXNzIHRoZSBxdWV1ZS4gKi8NCjgzMDogICAgICAgICAgICAgICAgIAkJCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPCBweFF1ZXVlLT51eExlbmd0aCApDQo4MzE6ICAgICAgICAgICAgICAgICAJCQkJew0KODMyOiAgICAgICAgICAgICAgICAgCQkJCQl0cmFjZVFVRVVFX1NFTkQoIHB4UXVldWUgKTsNCjgzMzogICAgICAgICAgICAgICAgIAkJCQkJcHJ2Q29weURhdGFUb1F1ZXVlKCBweFF1ZXVlLCBwdkl0ZW1Ub1F1ZXVlLCB4Q29weVBvc2l0aW9uICk7DQo4MzQ6ICAgICAgICAgICAgICAgICANCjgzNTogICAgICAgICAgICAgICAgIAkJCQkJLyogSWYgdGhlcmUgd2FzIGEgdGFzayB3YWl0aW5nIGZvciBkYXRhIHRvIGFycml2ZSBvbiB0aGUNCjgzNjogICAgICAgICAgICAgICAgIAkJCQkJcXVldWUgdGhlbiB1bmJsb2NrIGl0IG5vdy4gKi8NCjgzNzogICAgICAgICAgICAgICAgIAkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCjgzODogICAgICAgICAgICAgICAgIAkJCQkJew0KODM5OiAgICAgICAgICAgICAgICAgCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRUUlVFICkNCjg0MDogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjg0MTogICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBUaGUgdW5ibG9ja2VkIHRhc2sgaGFzIGEgcHJpb3JpdHkgaGlnaGVyIHRoYW4NCjg0MjogICAgICAgICAgICAgICAgIAkJCQkJCQlvdXIgb3duIHNvIHlpZWxkIGltbWVkaWF0ZWx5LiAqLw0KODQzOiAgICAgICAgICAgICAgICAgCQkJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQo4NDQ6ICAgICAgICAgICAgICAgICAJCQkJCQl9DQo4NDU6ICAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQo4NDY6ICAgICAgICAgICAgICAgICAJCQkJCQl7DQo4NDc6ICAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KODQ4OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KODQ5OiAgICAgICAgICAgICAgICAgCQkJCQl9DQo4NTA6ICAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjg1MTogICAgICAgICAgICAgICAgIAkJCQkJew0KODUyOiAgICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KODUzOiAgICAgICAgICAgICAgICAgCQkJCQl9DQo4NTQ6ICAgICAgICAgICAgICAgICANCjg1NTogICAgICAgICAgICAgICAgIAkJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjg1NjogICAgICAgICAgICAgICAgIAkJCQkJcmV0dXJuIHBkUEFTUzsNCjg1NzogICAgICAgICAgICAgICAgIAkJCQl9DQo4NTg6ICAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KODU5OiAgICAgICAgICAgICAgICAgCQkJCXsNCjg2MDogICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhUaWNrc1RvV2FpdCA9PSAoIFRpY2tUeXBlX3QgKSAwICkNCjg2MTogICAgICAgICAgICAgICAgIAkJCQkJew0KODYyOiAgICAgICAgICAgICAgICAgCQkJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjg2MzogICAgICAgICAgICAgICAgIAkJCQkJCXJldHVybiBlcnJRVUVVRV9GVUxMOw0KODY0OiAgICAgICAgICAgICAgICAgCQkJCQl9DQo4NjU6ICAgICAgICAgICAgICAgICAJCQkJCWVsc2UgaWYoIHhFbnRyeVRpbWVTZXQgPT0gcGRGQUxTRSApDQo4NjY6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjg2NzogICAgICAgICAgICAgICAgIAkJCQkJCXZUYXNrU2V0VGltZU91dFN0YXRlKCAmeFRpbWVPdXQgKTsNCjg2ODogICAgICAgICAgICAgICAgIAkJCQkJCXhFbnRyeVRpbWVTZXQgPSBwZFRSVUU7DQo4Njk6ICAgICAgICAgICAgICAgICAJCQkJCX0NCjg3MDogICAgICAgICAgICAgICAgIAkJCQl9DQo4NzE6ICAgICAgICAgICAgICAgICAJCQl9DQo4NzI6ICAgICAgICAgICAgICAgICAJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KODczOiAgICAgICAgICAgICAgICAgDQo4NzQ6ICAgICAgICAgICAgICAgICAJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCjg3NTogICAgICAgICAgICAgICAgIAkJCXsNCjg3NjogICAgICAgICAgICAgICAgIAkJCQlpZiggeFRhc2tDaGVja0ZvclRpbWVPdXQoICZ4VGltZU91dCwgJnhUaWNrc1RvV2FpdCApID09IHBkRkFMU0UgKQ0KODc3OiAgICAgICAgICAgICAgICAgCQkJCXsNCjg3ODogICAgICAgICAgICAgICAgIAkJCQkJaWYoIHBydklzUXVldWVGdWxsKCBweFF1ZXVlICkgIT0gcGRGQUxTRSApDQo4Nzk6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjg4MDogICAgICAgICAgICAgICAgIAkJCQkJCXRyYWNlQkxPQ0tJTkdfT05fUVVFVUVfU0VORCggcHhRdWV1ZSApOw0KODgxOiAgICAgICAgICAgICAgICAgCQkJCQkJdlRhc2tQbGFjZU9uRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICksIHhUaWNrc1RvV2FpdCApOw0KODgyOiAgICAgICAgICAgICAgICAgCQkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCjg4MzogICAgICAgICAgICAgICAgIAkJCQkJfQ0KODg0OiAgICAgICAgICAgICAgICAgCQkJCQllbHNlDQo4ODU6ICAgICAgICAgICAgICAgICAJCQkJCXsNCjg4NjogICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjg4NzogICAgICAgICAgICAgICAgIAkJCQkJfQ0KODg4OiAgICAgICAgICAgICAgICAgCQkJCX0NCjg4OTogICAgICAgICAgICAgICAgIAkJCQllbHNlDQo4OTA6ICAgICAgICAgICAgICAgICAJCQkJew0KODkxOiAgICAgICAgICAgICAgICAgCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KODkyOiAgICAgICAgICAgICAgICAgCQkJCQl0cmFjZVFVRVVFX1NFTkRfRkFJTEVEKCBweFF1ZXVlICk7DQo4OTM6ICAgICAgICAgICAgICAgICAJCQkJCXJldHVybiBlcnJRVUVVRV9GVUxMOw0KODk0OiAgICAgICAgICAgICAgICAgCQkJCX0NCjg5NTogICAgICAgICAgICAgICAgIAkJCX0NCjg5NjogICAgICAgICAgICAgICAgIAkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQo4OTc6ICAgICAgICAgICAgICAgICAJCX0NCjg5ODogICAgICAgICAgICAgICAgIAl9DQo4OTk6ICAgICAgICAgICAgICAgICANCjkwMDogICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfQUxURVJOQVRJVkVfQVBJICovDQo5MDE6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjkwMjogICAgICAgICAgICAgICAgIA0KOTAzOiAgICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX0FMVEVSTkFUSVZFX0FQSSA9PSAxICkNCjkwNDogICAgICAgICAgICAgICAgIA0KOTA1OiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFF1ZXVlQWx0R2VuZXJpY1JlY2VpdmUoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCB2b2lkICogY29uc3QgcHZCdWZmZXIsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0LCBCYXNlVHlwZV90IHhKdXN0UGVla2luZyApDQo5MDY6ICAgICAgICAgICAgICAgICAJew0KOTA3OiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeEVudHJ5VGltZVNldCA9IHBkRkFMU0U7DQo5MDg6ICAgICAgICAgICAgICAgICAJVGltZU91dF90IHhUaW1lT3V0Ow0KOTA5OiAgICAgICAgICAgICAgICAgCWludDhfdCAqcGNPcmlnaW5hbFJlYWRQb3NpdGlvbjsNCjkxMDogICAgICAgICAgICAgICAgIAlRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KOTExOiAgICAgICAgICAgICAgICAgDQo5MTI6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KOTEzOiAgICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoICEoICggcHZCdWZmZXIgPT0gTlVMTCApICYmICggcHhRdWV1ZS0+dXhJdGVtU2l6ZSAhPSAoIFVCYXNlVHlwZV90ICkgMFUgKSApICk7DQo5MTQ6ICAgICAgICAgICAgICAgICANCjkxNTogICAgICAgICAgICAgICAgIAkJZm9yKCA7OyApDQo5MTY6ICAgICAgICAgICAgICAgICAJCXsNCjkxNzogICAgICAgICAgICAgICAgIAkJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KOTE4OiAgICAgICAgICAgICAgICAgCQkJew0KOTE5OiAgICAgICAgICAgICAgICAgCQkJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA+ICggVUJhc2VUeXBlX3QgKSAwICkNCjkyMDogICAgICAgICAgICAgICAgIAkJCQl7DQo5MjE6ICAgICAgICAgICAgICAgICAJCQkJCS8qIFJlbWVtYmVyIG91ciByZWFkIHBvc2l0aW9uIGluIGNhc2Ugd2UgYXJlIGp1c3QgcGVla2luZy4gKi8NCjkyMjogICAgICAgICAgICAgICAgIAkJCQkJcGNPcmlnaW5hbFJlYWRQb3NpdGlvbiA9IHB4UXVldWUtPnUucGNSZWFkRnJvbTsNCjkyMzogICAgICAgICAgICAgICAgIA0KOTI0OiAgICAgICAgICAgICAgICAgCQkJCQlwcnZDb3B5RGF0YUZyb21RdWV1ZSggcHhRdWV1ZSwgcHZCdWZmZXIgKTsNCjkyNTogICAgICAgICAgICAgICAgIA0KOTI2OiAgICAgICAgICAgICAgICAgCQkJCQlpZiggeEp1c3RQZWVraW5nID09IHBkRkFMU0UgKQ0KOTI3OiAgICAgICAgICAgICAgICAgCQkJCQl7DQo5Mjg6ICAgICAgICAgICAgICAgICAJCQkJCQl0cmFjZVFVRVVFX1JFQ0VJVkUoIHB4UXVldWUgKTsNCjkyOTogICAgICAgICAgICAgICAgIA0KOTMwOiAgICAgICAgICAgICAgICAgCQkJCQkJLyogRGF0YSBpcyBhY3R1YWxseSBiZWluZyByZW1vdmVkIChub3QganVzdCBwZWVrZWQpLiAqLw0KOTMxOiAgICAgICAgICAgICAgICAgCQkJCQkJLS0oIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICk7DQo5MzI6ICAgICAgICAgICAgICAgICANCjkzMzogICAgICAgICAgICAgICAgIAkJCQkJCSNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KOTM0OiAgICAgICAgICAgICAgICAgCQkJCQkJew0KOTM1OiAgICAgICAgICAgICAgICAgCQkJCQkJCWlmKCBweFF1ZXVlLT51eFF1ZXVlVHlwZSA9PSBxdWV1ZVFVRVVFX0lTX01VVEVYICkNCjkzNjogICAgICAgICAgICAgICAgIAkJCQkJCQl7DQo5Mzc6ICAgICAgICAgICAgICAgICAJCQkJCQkJCS8qIFJlY29yZCB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW1wbGVtZW50DQo5Mzg6ICAgICAgICAgICAgICAgICAJCQkJCQkJCXByaW9yaXR5IGluaGVyaXRhbmNlIHNob3VsZCBpdCBiZWNvbWUgbmVjZXNzYXJ5LiAqLw0KOTM5OiAgICAgICAgICAgICAgICAgCQkJCQkJCQlweFF1ZXVlLT5weE11dGV4SG9sZGVyID0gKCBpbnQ4X3QgKiApIHhUYXNrR2V0Q3VycmVudFRhc2tIYW5kbGUoKTsNCjk0MDogICAgICAgICAgICAgICAgIAkJCQkJCQl9DQo5NDE6ICAgICAgICAgICAgICAgICAJCQkJCQkJZWxzZQ0KOTQyOiAgICAgICAgICAgICAgICAgCQkJCQkJCXsNCjk0MzogICAgICAgICAgICAgICAgIAkJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KOTQ0OiAgICAgICAgICAgICAgICAgCQkJCQkJCX0NCjk0NTogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjk0NjogICAgICAgICAgICAgICAgIAkJCQkJCSNlbmRpZg0KOTQ3OiAgICAgICAgICAgICAgICAgDQo5NDg6ICAgICAgICAgICAgICAgICAJCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkRkFMU0UgKQ0KOTQ5OiAgICAgICAgICAgICAgICAgCQkJCQkJew0KOTUwOiAgICAgICAgICAgICAgICAgCQkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkVFJVRSApDQo5NTE6ICAgICAgICAgICAgICAgICAJCQkJCQkJew0KOTUyOiAgICAgICAgICAgICAgICAgCQkJCQkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KOTUzOiAgICAgICAgICAgICAgICAgCQkJCQkJCX0NCjk1NDogICAgICAgICAgICAgICAgIAkJCQkJCQllbHNlDQo5NTU6ICAgICAgICAgICAgICAgICAJCQkJCQkJew0KOTU2OiAgICAgICAgICAgICAgICAgCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo5NTc6ICAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KOTU4OiAgICAgICAgICAgICAgICAgCQkJCQkJfQ0KOTU5OiAgICAgICAgICAgICAgICAgCQkJCQl9DQo5NjA6ICAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjk2MTogICAgICAgICAgICAgICAgIAkJCQkJew0KOTYyOiAgICAgICAgICAgICAgICAgCQkJCQkJdHJhY2VRVUVVRV9QRUVLKCBweFF1ZXVlICk7DQo5NjM6ICAgICAgICAgICAgICAgICANCjk2NDogICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSBkYXRhIGlzIG5vdCBiZWluZyByZW1vdmVkLCBzbyByZXNldCBvdXIgcmVhZA0KOTY1OiAgICAgICAgICAgICAgICAgCQkJCQkJcG9pbnRlci4gKi8NCjk2NjogICAgICAgICAgICAgICAgIAkJCQkJCXB4UXVldWUtPnUucGNSZWFkRnJvbSA9IHBjT3JpZ2luYWxSZWFkUG9zaXRpb247DQo5Njc6ICAgICAgICAgICAgICAgICANCjk2ODogICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSBkYXRhIGlzIGJlaW5nIGxlZnQgaW4gdGhlIHF1ZXVlLCBzbyBzZWUgaWYgdGhlcmUgYXJlDQo5Njk6ICAgICAgICAgICAgICAgICAJCQkJCQlhbnkgb3RoZXIgdGFza3Mgd2FpdGluZyBmb3IgdGhlIGRhdGEuICovDQo5NzA6ICAgICAgICAgICAgICAgICAJCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KOTcxOiAgICAgICAgICAgICAgICAgCQkJCQkJew0KOTcyOiAgICAgICAgICAgICAgICAgCQkJCQkJCS8qIFRhc2tzIHRoYXQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQgbGlzdCB3aWxsIGdldCBhZGRlZCB0bw0KOTczOiAgICAgICAgICAgICAgICAgCQkJCQkJCXRoZSBwZW5kaW5nIHJlYWR5IGxpc3QgYXMgdGhlIHNjaGVkdWxlciBpcyBzdGlsbCBzdXNwZW5kZWQuICovDQo5NzQ6ICAgICAgICAgICAgICAgICAJCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQo5NzU6ICAgICAgICAgICAgICAgICAJCQkJCQkJew0KOTc2OiAgICAgICAgICAgICAgICAgCQkJCQkJCQkvKiBUaGUgdGFzayB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoaXMgdGFzay4gKi8NCjk3NzogICAgICAgICAgICAgICAgIAkJCQkJCQkJcG9ydFlJRUxEX1dJVEhJTl9BUEkoKTsNCjk3ODogICAgICAgICAgICAgICAgIAkJCQkJCQl9DQo5Nzk6ICAgICAgICAgICAgICAgICAJCQkJCQkJZWxzZQ0KOTgwOiAgICAgICAgICAgICAgICAgCQkJCQkJCXsNCjk4MTogICAgICAgICAgICAgICAgIAkJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KOTgyOiAgICAgICAgICAgICAgICAgCQkJCQkJCX0NCjk4MzogICAgICAgICAgICAgICAgIAkJCQkJCX0NCjk4NDogICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjk4NTogICAgICAgICAgICAgICAgIAkJCQkJCXsNCjk4NjogICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQo5ODc6ICAgICAgICAgICAgICAgICAJCQkJCQl9DQo5ODg6ICAgICAgICAgICAgICAgICAJCQkJCX0NCjk4OTogICAgICAgICAgICAgICAgIA0KOTkwOiAgICAgICAgICAgICAgICAgCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KOTkxOiAgICAgICAgICAgICAgICAgCQkJCQlyZXR1cm4gcGRQQVNTOw0KOTkyOiAgICAgICAgICAgICAgICAgCQkJCX0NCjk5MzogICAgICAgICAgICAgICAgIAkJCQllbHNlDQo5OTQ6ICAgICAgICAgICAgICAgICAJCQkJew0KOTk1OiAgICAgICAgICAgICAgICAgCQkJCQlpZiggeFRpY2tzVG9XYWl0ID09ICggVGlja1R5cGVfdCApIDAgKQ0KOTk2OiAgICAgICAgICAgICAgICAgCQkJCQl7DQo5OTc6ICAgICAgICAgICAgICAgICAJCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KOTk4OiAgICAgICAgICAgICAgICAgCQkJCQkJdHJhY2VRVUVVRV9SRUNFSVZFX0ZBSUxFRCggcHhRdWV1ZSApOw0KOTk5OiAgICAgICAgICAgICAgICAgCQkJCQkJcmV0dXJuIGVyclFVRVVFX0VNUFRZOw0KMTAwMDogICAgICAgICAgICAgICAgCQkJCQl9DQoxMDAxOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UgaWYoIHhFbnRyeVRpbWVTZXQgPT0gcGRGQUxTRSApDQoxMDAyOiAgICAgICAgICAgICAgICAJCQkJCXsNCjEwMDM6ICAgICAgICAgICAgICAgIAkJCQkJCXZUYXNrU2V0VGltZU91dFN0YXRlKCAmeFRpbWVPdXQgKTsNCjEwMDQ6ICAgICAgICAgICAgICAgIAkJCQkJCXhFbnRyeVRpbWVTZXQgPSBwZFRSVUU7DQoxMDA1OiAgICAgICAgICAgICAgICAJCQkJCX0NCjEwMDY6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMDA3OiAgICAgICAgICAgICAgICAJCQl9DQoxMDA4OiAgICAgICAgICAgICAgICAJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KMTAwOTogICAgICAgICAgICAgICAgDQoxMDEwOiAgICAgICAgICAgICAgICAJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCjEwMTE6ICAgICAgICAgICAgICAgIAkJCXsNCjEwMTI6ICAgICAgICAgICAgICAgIAkJCQlpZiggeFRhc2tDaGVja0ZvclRpbWVPdXQoICZ4VGltZU91dCwgJnhUaWNrc1RvV2FpdCApID09IHBkRkFMU0UgKQ0KMTAxMzogICAgICAgICAgICAgICAgCQkJCXsNCjEwMTQ6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHBydklzUXVldWVFbXB0eSggcHhRdWV1ZSApICE9IHBkRkFMU0UgKQ0KMTAxNTogICAgICAgICAgICAgICAgCQkJCQl7DQoxMDE2OiAgICAgICAgICAgICAgICAJCQkJCQl0cmFjZUJMT0NLSU5HX09OX1FVRVVFX1JFQ0VJVkUoIHB4UXVldWUgKTsNCjEwMTc6ICAgICAgICAgICAgICAgIA0KMTAxODogICAgICAgICAgICAgICAgCQkJCQkJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoxMDE5OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMDIwOiAgICAgICAgICAgICAgICAJCQkJCQkJaWYoIHB4UXVldWUtPnV4UXVldWVUeXBlID09IHF1ZXVlUVVFVUVfSVNfTVVURVggKQ0KMTAyMTogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjEwMjI6ICAgICAgICAgICAgICAgIAkJCQkJCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQoxMDIzOiAgICAgICAgICAgICAgICAJCQkJCQkJCXsNCjEwMjQ6ICAgICAgICAgICAgICAgIAkJCQkJCQkJCXZUYXNrUHJpb3JpdHlJbmhlcml0KCAoIHZvaWQgKiApIHB4UXVldWUtPnB4TXV0ZXhIb2xkZXIgKTsNCjEwMjU6ICAgICAgICAgICAgICAgIAkJCQkJCQkJfQ0KMTAyNjogICAgICAgICAgICAgICAgCQkJCQkJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KMTAyNzogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjEwMjg6ICAgICAgICAgICAgICAgIAkJCQkJCQllbHNlDQoxMDI5OiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTAzMDogICAgICAgICAgICAgICAgCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMDMxOiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTAzMjogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTAzMzogICAgICAgICAgICAgICAgCQkJCQkJI2VuZGlmDQoxMDM0OiAgICAgICAgICAgICAgICANCjEwMzU6ICAgICAgICAgICAgICAgIAkJCQkJCXZUYXNrUGxhY2VPbkV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApLCB4VGlja3NUb1dhaXQgKTsNCjEwMzY6ICAgICAgICAgICAgICAgIAkJCQkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQoxMDM3OiAgICAgICAgICAgICAgICAJCQkJCX0NCjEwMzg6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTAzOTogICAgICAgICAgICAgICAgCQkJCQl7DQoxMDQwOiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMDQxOiAgICAgICAgICAgICAgICAJCQkJCX0NCjEwNDI6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMDQzOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTA0NDogICAgICAgICAgICAgICAgCQkJCXsNCjEwNDU6ICAgICAgICAgICAgICAgIAkJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjEwNDY6ICAgICAgICAgICAgICAgIAkJCQkJdHJhY2VRVUVVRV9SRUNFSVZFX0ZBSUxFRCggcHhRdWV1ZSApOw0KMTA0NzogICAgICAgICAgICAgICAgCQkJCQlyZXR1cm4gZXJyUVVFVUVfRU1QVFk7DQoxMDQ4OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTA0OTogICAgICAgICAgICAgICAgCQkJfQ0KMTA1MDogICAgICAgICAgICAgICAgCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCjEwNTE6ICAgICAgICAgICAgICAgIAkJfQ0KMTA1MjogICAgICAgICAgICAgICAgCX0NCjEwNTM6ICAgICAgICAgICAgICAgIA0KMTA1NDogICAgICAgICAgICAgICAgDQoxMDU1OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX0FMVEVSTkFUSVZFX0FQSSAqLw0KMTA1NjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMDU3OiAgICAgICAgICAgICAgICANCjEwNTg6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFF1ZXVlR2VuZXJpY1NlbmRGcm9tSVNSKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSwgY29uc3Qgdm9pZCAqIGNvbnN0IHB2SXRlbVRvUXVldWUsIEJhc2VUeXBlX3QgKiBjb25zdCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuLCBjb25zdCBCYXNlVHlwZV90IHhDb3B5UG9zaXRpb24gKQ0KMTA1OTogICAgICAgICAgICAgICAgew0KQkZEMDIzRDQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDAyM0Q2ICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkNCkJGRDAyM0Q4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkNCkJGRDAyM0RBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwMjNEQyAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpDQpCRkQwMjNFMCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpDQpCRkQwMjNFNCAgMDAzMEY4REUgICBTVyBBMiwgNDgoUzgpDQpCRkQwMjNFOCAgMDAzNEY4RkUgICBTVyBBMywgNTIoUzgpDQoxMDYwOiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQoxMDYxOiAgICAgICAgICAgICAgICBVQmFzZVR5cGVfdCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzOw0KMTA2MjogICAgICAgICAgICAgICAgUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZTsNCkJGRDAyM0VDICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDAyM0YwICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjEwNjM6ICAgICAgICAgICAgICAgIA0KMTA2NDogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KQkZEMDIzRjQgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDIzRjggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDI0MEUNCkJGRDAyM0ZDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMjNGRSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMjQwMCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDI0MDIgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDI0MDQgIDA0MjgzMEEwICAgQURESVUgQTEsIFpFUk8sIDEwNjQNCkJGRDAyNDA2ICAgICAgMDQyOCAgIEFERFUgUzAsIEEwLCBWMA0KQkZEMDI0MDggIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMjQwQSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDI0MEMgICAgICAwQzAwICAgTk9QDQoxMDY1OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCAhKCAoIHB2SXRlbVRvUXVldWUgPT0gTlVMTCApICYmICggcHhRdWV1ZS0+dXhJdGVtU2l6ZSAhPSAoIFVCYXNlVHlwZV90ICkgMFUgKSApICk7DQpCRkQwMjQwRSAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpDQpCRkQwMjQxMiAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjQyMg0KQkZEMDI0MTYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDI0MUEgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQ0KQkZEMDI0MUUgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDI0MjgNCkJGRDAyNDIyICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMjQyNCAgICAgIENDMDIgICBCIDB4QkZEMDI0MkENCkJGRDAyNDI2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDI0MjggICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTw0KQkZEMDI0MkEgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDI0NDANCkJGRDAyNDJFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMjQzMCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMjQzMiAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDI0MzQgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDI0MzYgIDA0MjkzMEEwICAgQURESVUgQTEsIFpFUk8sIDEwNjUNCkJGRDAyNDM4ICAgICAgMDQyOSAgIFNVQlUgUzAsIEEwLCBWMA0KQkZEMDI0M0EgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMjQzQyAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDI0M0UgICAgICAwQzAwICAgTk9QDQoxMDY2OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCAhKCAoIHhDb3B5UG9zaXRpb24gPT0gcXVldWVPVkVSV1JJVEUgKSAmJiAoIHB4UXVldWUtPnV4TGVuZ3RoICE9IDEgKSApICk7DQpCRkQwMjQ0MCAgMDAzNEZDN0UgICBMVyBWMSwgNTIoUzgpDQpCRkQwMjQ0NCAgICAgIEVEMDIgICBMSSBWMCwgMg0KQkZEMDI0NDYgIDAwMDhCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMjQ1QQ0KQkZEMDI0NDggIDBDMDAwMDA4ICAgU0xMIFpFUk8sIFQwLCAxDQpCRkQwMjQ0QSAgICAgIDBDMDAgICBOT1ANCkJGRDAyNDRDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyNDUwICAgICAgNjlBRiAgIExXIFYxLCA2MChWMCkNCkJGRDAyNDUyICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMjQ1NCAgMDAwNEI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAyNDYwDQpCRkQwMjQ1NiAgMEMwMDAwMDQgICBTTEwgWkVSTywgQTAsIDENCkJGRDAyNDU4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDI0NUEgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAyNDVDICAgICAgQ0MwMiAgIEIgMHhCRkQwMjQ2Mg0KQkZEMDI0NUUgICAgICAwQzAwICAgTk9QDQpCRkQwMjQ2MCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQpCRkQwMjQ2MiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjQ3OA0KQkZEMDI0NjYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAyNDY4ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAyNDZBICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwMjQ2QyAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwMjQ2RSAgMDQyQTMwQTAgICBBRERJVSBBMSwgWkVSTywgMTA2Ng0KQkZEMDI0NzAgICAgICAwNDJBICAgQUREVSBTMCwgQTEsIFYwDQpCRkQwMjQ3MiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAyNDc0ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMjQ3NiAgICAgIDBDMDAgICBOT1ANCjEwNjc6ICAgICAgICAgICAgICAgIA0KMTA2ODogICAgICAgICAgICAgICAgCS8qIFJUT1MgcG9ydHMgdGhhdCBzdXBwb3J0IGludGVycnVwdCBuZXN0aW5nIGhhdmUgdGhlIGNvbmNlcHQgb2YgYSBtYXhpbXVtDQoxMDY5OiAgICAgICAgICAgICAgICAJc3lzdGVtIGNhbGwgKG9yIG1heGltdW0gQVBJIGNhbGwpIGludGVycnVwdCBwcmlvcml0eS4gIEludGVycnVwdHMgdGhhdCBhcmUNCjEwNzA6ICAgICAgICAgICAgICAgIAlhYm92ZSB0aGUgbWF4aW11bSBzeXN0ZW0gY2FsbCBwcmlvcml0eSBhcmUga2VwdCBwZXJtYW5lbnRseSBlbmFibGVkLCBldmVuDQoxMDcxOiAgICAgICAgICAgICAgICAJd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvDQoxMDcyOiAgICAgICAgICAgICAgICAJRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucy4gIElmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaA0KMTA3MzogICAgICAgICAgICAgICAgCXRoZW4gcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIHdpbGwgcmVzdWx0IGluIGFuIGFzc2VydGlvbg0KMTA3NDogICAgICAgICAgICAgICAgCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGJlZW4NCjEwNzU6ICAgICAgICAgICAgICAgIAlhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlIHRoZSBjb25maWd1cmVkIG1heGltdW0gc3lzdGVtIGNhbGwgcHJpb3JpdHkuDQoxMDc2OiAgICAgICAgICAgICAgICAJT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0cw0KMTA3NzogICAgICAgICAgICAgICAgCXRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYXQgb3IgKGxvZ2ljYWxseSkgYmVsb3cgdGhlIG1heGltdW0NCjEwNzg6ICAgICAgICAgICAgICAgIAlzeXN0ZW0gY2FsbAlpbnRlcnJ1cHQgcHJpb3JpdHkuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQNCjEwNzk6ICAgICAgICAgICAgICAgIAlzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4NCjEwODA6ICAgICAgICAgICAgICAgIAlNb3JlIGluZm9ybWF0aW9uIChhbGJlaXQgQ29ydGV4LU0gc3BlY2lmaWMpIGlzIHByb3ZpZGVkIG9uIHRoZSBmb2xsb3dpbmcNCjEwODE6ICAgICAgICAgICAgICAgIAlsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQoxMDgyOiAgICAgICAgICAgICAgICAJcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpOw0KMTA4MzogICAgICAgICAgICAgICAgDQoxMDg0OiAgICAgICAgICAgICAgICAJLyogU2ltaWxhciB0byB4UXVldWVHZW5lcmljU2VuZCwgZXhjZXB0IHdpdGhvdXQgYmxvY2tpbmcgaWYgdGhlcmUgaXMgbm8gcm9vbQ0KMTA4NTogICAgICAgICAgICAgICAgCWluIHRoZSBxdWV1ZS4gIEFsc28gZG9uJ3QgZGlyZWN0bHkgd2FrZSBhIHRhc2sgdGhhdCB3YXMgYmxvY2tlZCBvbiBhIHF1ZXVlDQoxMDg2OiAgICAgICAgICAgICAgICAJcmVhZCwgaW5zdGVhZCByZXR1cm4gYSBmbGFnIHRvIHNheSB3aGV0aGVyIGEgY29udGV4dCBzd2l0Y2ggaXMgcmVxdWlyZWQgb3INCjEwODc6ICAgICAgICAgICAgICAgIAlub3QgKGkuZS4gaGFzIGEgdGFzayB3aXRoIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdXMgYmVlbiB3b2tlbiBieSB0aGlzDQoxMDg4OiAgICAgICAgICAgICAgICAJcG9zdCkuICovDQoxMDg5OiAgICAgICAgICAgICAgICAJdXhTYXZlZEludGVycnVwdFN0YXR1cyA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDAyNDc4ICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDAyNDdDICAgICAgMEMwMCAgIE5PUA0KQkZEMDI0N0UgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMTA5MDogICAgICAgICAgICAgICAgCXsNCjEwOTE6ICAgICAgICAgICAgICAgIAkJaWYoICggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPCBweFF1ZXVlLT51eExlbmd0aCApIHx8ICggeENvcHlQb3NpdGlvbiA9PSBxdWV1ZU9WRVJXUklURSApICkNCkJGRDAyNDgyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyNDg2ICAgICAgNjlBRSAgIExXIFYxLCA1NihWMCkNCkJGRDAyNDg4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyNDhDICAgICAgNjkyRiAgIExXIFYwLCA2MChWMCkNCkJGRDAyNDhFICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDI0OTAgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwMjQ5MiAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjRBMg0KQkZEMDI0OTYgIDAwMzRGQzdFICAgTFcgVjEsIDUyKFM4KQ0KQkZEMDI0OUEgICAgICBFRDAyICAgTEkgVjAsIDINCkJGRDAyNDlDICAwMDU1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDI1NEENCkJGRDAyNDlFICAwQzAwMDA1NSAgIFNMTCBWMCwgUzUsIDENCkJGRDAyNEEwICAgICAgMEMwMCAgIE5PUA0KMTA5MjogICAgICAgICAgICAgICAgCQl7DQoxMDkzOiAgICAgICAgICAgICAgICAJCQl0cmFjZVFVRVVFX1NFTkRfRlJPTV9JU1IoIHB4UXVldWUgKTsNCjEwOTQ6ICAgICAgICAgICAgICAgIA0KMTA5NTogICAgICAgICAgICAgICAgCQkJLyogU2VtYXBob3JlcyB1c2UgeFF1ZXVlR2l2ZUZyb21JU1IoKSwgc28gcHhRdWV1ZSB3aWxsIG5vdCBiZSBhDQoxMDk2OiAgICAgICAgICAgICAgICAJCQlzZW1hcGhvcmUgb3IgbXV0ZXguICBUaGF0IG1lYW5zIHBydkNvcHlEYXRhVG9RdWV1ZSgpIGNhbm5vdCByZXN1bHQNCjEwOTc6ICAgICAgICAgICAgICAgIAkJCWluIGEgdGFzayBkaXNpbmhlcml0aW5nIGEgcHJpb3JpdHkgYW5kIHBydkNvcHlEYXRhVG9RdWV1ZSgpIGNhbiBiZQ0KMTA5ODogICAgICAgICAgICAgICAgCQkJY2FsbGVkIGhlcmUgZXZlbiB0aG91Z2ggdGhlIGRpc2luaGVyaXQgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgaWYNCjEwOTk6ICAgICAgICAgICAgICAgIAkJCXRoZSBzY2hlZHVsZXIgaXMgc3VzcGVuZGVkIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIHJlYWR5IGxpc3RzLiAqLw0KMTEwMDogICAgICAgICAgICAgICAgCQkJKCB2b2lkICkgcHJ2Q29weURhdGFUb1F1ZXVlKCBweFF1ZXVlLCBwdkl0ZW1Ub1F1ZXVlLCB4Q29weVBvc2l0aW9uICk7DQpCRkQwMjRBMiAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwMjRBNiAgMDAyQ0ZDQkUgICBMVyBBMSwgNDQoUzgpDQpCRkQwMjRBQSAgMDAzNEZDREUgICBMVyBBMiwgNTIoUzgpDQpCRkQwMjRBRSAgMTRFNjc3RTggICBKQUxTIHBydkNvcHlEYXRhVG9RdWV1ZQ0KQkZEMDI0QjAgIDBDMDAxNEU2ICAgTEJVIEEzLCAzMDcyKEEyKQ0KQkZEMDI0QjIgICAgICAwQzAwICAgTk9QDQoxMTAxOiAgICAgICAgICAgICAgICANCjExMDI6ICAgICAgICAgICAgICAgIAkJCS8qIFRoZSBldmVudCBsaXN0IGlzIG5vdCBhbHRlcmVkIGlmIHRoZSBxdWV1ZSBpcyBsb2NrZWQuICBUaGlzIHdpbGwNCjExMDM6ICAgICAgICAgICAgICAgIAkJCWJlIGRvbmUgd2hlbiB0aGUgcXVldWUgaXMgdW5sb2NrZWQgbGF0ZXIuICovDQoxMTA0OiAgICAgICAgICAgICAgICAJCQlpZiggcHhRdWV1ZS0+eFR4TG9jayA9PSBxdWV1ZVVOTE9DS0VEICkNCkJGRDAyNEI0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyNEI4ICAwMDQ4RkM2MiAgIExXIFYxLCA3MihWMCkNCkJGRDAyNEJDICAgICAgRUQ3RiAgIExJIFYwLCAtMQ0KQkZEMDI0QkUgIDAwMzZCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMjUyRQ0KQkZEMDI0QzAgIDBDMDAwMDM2ICAgU0xMIEFULCBTNiwgMQ0KQkZEMDI0QzIgICAgICAwQzAwICAgTk9QDQoxMTA1OiAgICAgICAgICAgICAgICAJCQl7DQoxMTA2OiAgICAgICAgICAgICAgICAJCQkJI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQoxMTA3OiAgICAgICAgICAgICAgICAJCQkJew0KMTEwODogICAgICAgICAgICAgICAgCQkJCQlpZiggcHhRdWV1ZS0+cHhRdWV1ZVNldENvbnRhaW5lciAhPSBOVUxMICkNCkJGRDAyNEM0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyNEM4ICAwMDRDRkM0MiAgIExXIFYwLCA3NihWMCkNCkJGRDAyNENDICAwMDE2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyNEZDDQoxMTA5OiAgICAgICAgICAgICAgICAJCQkJCXsNCjExMTA6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCBwcnZOb3RpZnlRdWV1ZVNldENvbnRhaW5lciggcHhRdWV1ZSwgeENvcHlQb3NpdGlvbiApID09IHBkVFJVRSApDQpCRkQwMjREMCAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwMjRENCAgMDAzNEZDQkUgICBMVyBBMSwgNTIoUzgpDQpCRkQwMjREOCAgMjFEODc3RTggICBKQUxTIHBydk5vdGlmeVF1ZXVlU2V0Q29udGFpbmVyDQpCRkQwMjREQSAgMEMwMDIxRDggICBMV0MyIFQ2LCAzMDcyKFQ4KQ0KQkZEMDI0REMgICAgICAwQzAwICAgTk9QDQpCRkQwMjRERSAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMA0KQkZEMDI0RTAgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAyNEUyICAwMDJEQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDI1NDANCkJGRDAyNEU0ICAwQzAwMDAyRCAgIFNMTCBBVCwgVDUsIDENCkJGRDAyNEU2ICAgICAgMEMwMCAgIE5PUA0KMTExMTogICAgICAgICAgICAgICAgCQkJCQkJew0KMTExMjogICAgICAgICAgICAgICAgCQkJCQkJCS8qIFRoZSBxdWV1ZSBpcyBhIG1lbWJlciBvZiBhIHF1ZXVlIHNldCwgYW5kIHBvc3RpbmcNCjExMTM6ICAgICAgICAgICAgICAgIAkJCQkJCQl0byB0aGUgcXVldWUgc2V0IGNhdXNlZCBhIGhpZ2hlciBwcmlvcml0eSB0YXNrIHRvDQoxMTE0OiAgICAgICAgICAgICAgICAJCQkJCQkJdW5ibG9jay4gIEEgY29udGV4dCBzd2l0Y2ggaXMgcmVxdWlyZWQuICovDQoxMTE1OiAgICAgICAgICAgICAgICAJCQkJCQkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gTlVMTCApDQpCRkQwMjRFOCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMjRFQyAgMDAyODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjU0MA0KMTExNjogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjExMTc6ICAgICAgICAgICAgICAgIAkJCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQpCRkQwMjRGMCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMjRGNCAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDI0RjYgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQpCRkQwMjRGOCAgICAgIENDMjMgICBCIDB4QkZEMDI1NDANCkJGRDAyNEZBICAgICAgMEMwMCAgIE5PUA0KMTExODogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjExMTk6ICAgICAgICAgICAgICAgIAkJCQkJCQllbHNlDQoxMTIwOiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTEyMTogICAgICAgICAgICAgICAgCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMTIyOiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTEyMzogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTEyNDogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KMTEyNTogICAgICAgICAgICAgICAgCQkJCQkJew0KMTEyNjogICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjExMjc6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjExMjg6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTEyOTogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoxMTMwOiAgICAgICAgICAgICAgICAJCQkJCXsNCjExMzE6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQpCRkQwMjRGQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMjUwMCAgICAgIDY5MjkgICBMVyBWMCwgMzYoVjApDQpCRkQwMjUwMiAgMDAxRDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjU0MA0KMTEzMjogICAgICAgICAgICAgICAgCQkJCQkJew0KMTEzMzogICAgICAgICAgICAgICAgCQkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApICE9IHBkRkFMU0UgKQ0KQkZEMDI1MDYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDI1MEEgIDAwMjQzMDQyICAgQURESVUgVjAsIFYwLCAzNg0KQkZEMDI1MEUgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAyNTEwICAyMkJDNzdFOCAgIEpBTFMgeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0DQpCRkQwMjUxMiAgMEMwMDIyQkMgICBMV0MyIFM1LCAzMDcyKEdQKQ0KQkZEMDI1MTQgICAgICAwQzAwICAgTk9QDQpCRkQwMjUxNiAgMDAxMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjU0MA0KMTEzNDogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjExMzU6ICAgICAgICAgICAgICAgIAkJCQkJCQkJLyogVGhlIHRhc2sgd2FpdGluZyBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgc28NCjExMzY6ICAgICAgICAgICAgICAgIAkJCQkJCQkJcmVjb3JkIHRoYXQgYSBjb250ZXh0IHN3aXRjaCBpcyByZXF1aXJlZC4gKi8NCjExMzc6ICAgICAgICAgICAgICAgIAkJCQkJCQkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gTlVMTCApDQpCRkQwMjUxQSAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMjUxRSAgMDAwRjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjU0MA0KMTEzODogICAgICAgICAgICAgICAgCQkJCQkJCQl7DQoxMTM5OiAgICAgICAgICAgICAgICAJCQkJCQkJCQkqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiA9IHBkVFJVRTsNCkJGRDAyNTIyICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkNCkJGRDAyNTI2ICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwMjUyOCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCkJGRDAyNTJBICAgICAgQ0MwQSAgIEIgMHhCRkQwMjU0MA0KQkZEMDI1MkMgICAgICAwQzAwICAgTk9QDQoxMTQwOiAgICAgICAgICAgICAgICAJCQkJCQkJCX0NCjExNDE6ICAgICAgICAgICAgICAgIAkJCQkJCQkJZWxzZQ0KMTE0MjogICAgICAgICAgICAgICAgCQkJCQkJCQl7DQoxMTQzOiAgICAgICAgICAgICAgICAJCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMTQ0OiAgICAgICAgICAgICAgICAJCQkJCQkJCX0NCjExNDU6ICAgICAgICAgICAgICAgIAkJCQkJCQl9DQoxMTQ2OiAgICAgICAgICAgICAgICAJCQkJCQkJZWxzZQ0KMTE0NzogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjExNDg6ICAgICAgICAgICAgICAgIAkJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTE0OTogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjExNTA6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjExNTE6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjExNTI6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjExNTM6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMTU0OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxMTU1OiAgICAgICAgICAgICAgICAJCQkJCX0NCjExNTY6ICAgICAgICAgICAgICAgIAkJCQl9DQoxMTU3OiAgICAgICAgICAgICAgICAJCQkJI2Vsc2UgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjExNTg6ICAgICAgICAgICAgICAgIAkJCQl7DQoxMTU5OiAgICAgICAgICAgICAgICAJCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQoxMTYwOiAgICAgICAgICAgICAgICAJCQkJCXsNCjExNjE6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApICE9IHBkRkFMU0UgKQ0KMTE2MjogICAgICAgICAgICAgICAgCQkJCQkJew0KMTE2MzogICAgICAgICAgICAgICAgCQkJCQkJCS8qIFRoZSB0YXNrIHdhaXRpbmcgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHNvIHJlY29yZCB0aGF0IGENCjExNjQ6ICAgICAgICAgICAgICAgIAkJCQkJCQljb250ZXh0CXN3aXRjaCBpcyByZXF1aXJlZC4gKi8NCjExNjU6ICAgICAgICAgICAgICAgIAkJCQkJCQlpZiggcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBOVUxMICkNCjExNjY6ICAgICAgICAgICAgICAgIAkJCQkJCQl7DQoxMTY3OiAgICAgICAgICAgICAgICAJCQkJCQkJCSpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuID0gcGRUUlVFOw0KMTE2ODogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjExNjk6ICAgICAgICAgICAgICAgIAkJCQkJCQllbHNlDQoxMTcwOiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTE3MTogICAgICAgICAgICAgICAgCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMTcyOiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTE3MzogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTE3NDogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KMTE3NTogICAgICAgICAgICAgICAgCQkJCQkJew0KMTE3NjogICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjExNzc6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjExNzg6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTE3OTogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoxMTgwOiAgICAgICAgICAgICAgICAJCQkJCXsNCjExODE6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjExODI6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTE4MzogICAgICAgICAgICAgICAgCQkJCX0NCjExODQ6ICAgICAgICAgICAgICAgIAkJCQkjZW5kaWYgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjExODU6ICAgICAgICAgICAgICAgIAkJCX0NCjExODY6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjExODc6ICAgICAgICAgICAgICAgIAkJCXsNCjExODg6ICAgICAgICAgICAgICAgIAkJCQkvKiBJbmNyZW1lbnQgdGhlIGxvY2sgY291bnQgc28gdGhlIHRhc2sgdGhhdCB1bmxvY2tzIHRoZSBxdWV1ZQ0KMTE4OTogICAgICAgICAgICAgICAgCQkJCWtub3dzIHRoYXQgZGF0YSB3YXMgcG9zdGVkIHdoaWxlIGl0IHdhcyBsb2NrZWQuICovDQoxMTkwOiAgICAgICAgICAgICAgICAJCQkJKysoIHB4UXVldWUtPnhUeExvY2sgKTsNCkJGRDAyNTJFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyNTMyICAwMDQ4RkM0MiAgIExXIFYwLCA3MihWMCkNCkJGRDAyNTM2ICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQ0KQkZEMDI1MzggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDI1M0MgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQ0KMTE5MTogICAgICAgICAgICAgICAgCQkJfQ0KMTE5MjogICAgICAgICAgICAgICAgDQoxMTkzOiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRQQVNTOw0KQkZEMDI1NDAgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAyNTQyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDAyNTQ2ICAgICAgQ0MwMyAgIEIgMHhCRkQwMjU0RQ0KQkZEMDI1NDggICAgICAwQzAwICAgTk9QDQoxMTk0OiAgICAgICAgICAgICAgICAJCX0NCjExOTU6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMTE5NjogICAgICAgICAgICAgICAgCQl7DQoxMTk3OiAgICAgICAgICAgICAgICAJCQl0cmFjZVFVRVVFX1NFTkRfRlJPTV9JU1JfRkFJTEVEKCBweFF1ZXVlICk7DQoxMTk4OiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gZXJyUVVFVUVfRlVMTDsNCkJGRDAyNTRBICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMTE5OTogICAgICAgICAgICAgICAgCQl9DQoxMjAwOiAgICAgICAgICAgICAgICAJfQ0KMTIwMTogICAgICAgICAgICAgICAgCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDI1NEUgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDI1NTIgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDAyNTU0ICAgICAgNEQ1RSAgIEFERElVIFQyLCBUMiwgLTENCkJGRDAyNTU2ICAgICAgMEMwMCAgIE5PUA0KMTIwMjogICAgICAgICAgICAgICAgDQoxMjAzOiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwMjU1OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoxMjA0OiAgICAgICAgICAgICAgICB9DQpCRkQwMjU1QyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDI1NUUgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQ0KQkZEMDI1NjAgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQ0KQkZEMDI1NjIgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MA0KQkZEMDI1NjQgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDI1NjYgICAgICAwQzAwICAgTk9QDQoxMjA1OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEyMDY6ICAgICAgICAgICAgICAgIA0KMTIwNzogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UXVldWVHaXZlRnJvbUlTUiggUXVldWVIYW5kbGVfdCB4UXVldWUsIEJhc2VUeXBlX3QgKiBjb25zdCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkNCjEyMDg6ICAgICAgICAgICAgICAgIHsNCkJGRDAyODZDICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwDQpCRkQwMjg2RSAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApDQpCRkQwMjg3MCAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApDQpCRkQwMjg3MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDI4NzQgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQ0KQkZEMDI4NzggIDAwMkNGOEJFICAgU1cgQTEsIDQ0KFM4KQ0KMTIwOTogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KMTIxMDogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhTYXZlZEludGVycnVwdFN0YXR1czsNCjEyMTE6ICAgICAgICAgICAgICAgIFF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlID0gKCBRdWV1ZV90ICogKSB4UXVldWU7DQpCRkQwMjg3QyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwMjg4MCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoxMjEyOiAgICAgICAgICAgICAgICANCjEyMTM6ICAgICAgICAgICAgICAgIAkvKiBTaW1pbGFyIHRvIHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUigpIGJ1dCB1c2VkIHdpdGggc2VtYXBob3JlcyB3aGVyZSB0aGUNCjEyMTQ6ICAgICAgICAgICAgICAgIAlpdGVtIHNpemUgaXMgMC4gIERvbid0IGRpcmVjdGx5IHdha2UgYSB0YXNrIHRoYXQgd2FzIGJsb2NrZWQgb24gYSBxdWV1ZQ0KMTIxNTogICAgICAgICAgICAgICAgCXJlYWQsIGluc3RlYWQgcmV0dXJuIGEgZmxhZyB0byBzYXkgd2hldGhlciBhIGNvbnRleHQgc3dpdGNoIGlzIHJlcXVpcmVkIG9yDQoxMjE2OiAgICAgICAgICAgICAgICAJbm90IChpLmUuIGhhcyBhIHRhc2sgd2l0aCBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHVzIGJlZW4gd29rZW4gYnkgdGhpcw0KMTIxNzogICAgICAgICAgICAgICAgCXBvc3QpLiAqLw0KMTIxODogICAgICAgICAgICAgICAgDQoxMjE5OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQpCRkQwMjg4NCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMjg4OCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjg5RQ0KQkZEMDI4OEMgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAyODhFICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAyODkwICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwMjg5MiAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwMjg5NCAgMDRDMzMwQTAgICBBRERJVSBBMSwgWkVSTywgMTIxOQ0KQkZEMDI4OTYgICAgICAwNEMzICAgU1VCVSBTMSwgUzEsIEEwDQpCRkQwMjg5OCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAyODlBICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMjg5QyAgICAgIDBDMDAgICBOT1ANCjEyMjA6ICAgICAgICAgICAgICAgIA0KMTIyMTogICAgICAgICAgICAgICAgCS8qIHhRdWV1ZUdlbmVyaWNTZW5kRnJvbUlTUigpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgeFF1ZXVlR2l2ZUZyb21JU1IoKQ0KMTIyMjogICAgICAgICAgICAgICAgCWlmIHRoZSBpdGVtIHNpemUgaXMgbm90IDAuICovDQoxMjIzOiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweFF1ZXVlLT51eEl0ZW1TaXplID09IDAgKTsNCkJGRDAyODlFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyOEEyICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkNCkJGRDAyOEE2ICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyOEJDDQpCRkQwMjhBQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDI4QUMgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDI4QUUgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDAyOEIwICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDAyOEIyICAwNEM3MzBBMCAgIEFERElVIEExLCBaRVJPLCAxMjIzDQpCRkQwMjhCNCAgICAgIDA0QzcgICBTVUJVIFMxLCBWMSwgQTANCkJGRDAyOEI2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDI4QjggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAyOEJBICAgICAgMEMwMCAgIE5PUA0KMTIyNDogICAgICAgICAgICAgICAgDQoxMjI1OiAgICAgICAgICAgICAgICAJLyogTm9ybWFsbHkgYSBtdXRleCB3b3VsZCBub3QgYmUgZ2l2ZW4gZnJvbSBhbiBpbnRlcnJ1cHQsIGFuZCBkb2luZyBzbyBpcw0KMTIyNjogICAgICAgICAgICAgICAgCWRlZmluaXRlbHkgd3JvbmcgaWYgdGhlcmUgaXMgYSBtdXRleCBob2xkZXIgYXMgcHJpb3JpdHkgaW5oZXJpdGFuY2UgbWFrZXMgbm8NCjEyMjc6ICAgICAgICAgICAgICAgIAlzZW5zZSBmb3IgYW4gaW50ZXJydXB0cywgb25seSB0YXNrcy4gKi8NCjEyMjg6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICEoICggcHhRdWV1ZS0+dXhRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9JU19NVVRFWCApICYmICggcHhRdWV1ZS0+cHhNdXRleEhvbGRlciAhPSBOVUxMICkgKSApOw0KQkZEMDI4QkMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDI4QzAgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMjhDMiAgMDAwNTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjhEMA0KQkZEMDI4QzYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDI4Q0EgICAgICA2OTIxICAgTFcgVjAsIDQoVjApDQpCRkQwMjhDQyAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjhENg0KQkZEMDI4RDAgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAyOEQyICAgICAgQ0MwMiAgIEIgMHhCRkQwMjhEOA0KQkZEMDI4RDQgICAgICAwQzAwICAgTk9QDQpCRkQwMjhENiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQpCRkQwMjhEOCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjhFRQ0KQkZEMDI4REMgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAyOERFICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAyOEUwICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwMjhFMiAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwMjhFNCAgMDRDQzMwQTAgICBBRERJVSBBMSwgWkVSTywgMTIyOA0KQkZEMDI4RTYgICAgICAwNENDICAgQUREVSBTMSwgQTIsIEEwDQpCRkQwMjhFOCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAyOEVBICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMjhFQyAgICAgIDBDMDAgICBOT1ANCjEyMjk6ICAgICAgICAgICAgICAgIA0KMTIzMDogICAgICAgICAgICAgICAgCS8qIFJUT1MgcG9ydHMgdGhhdCBzdXBwb3J0IGludGVycnVwdCBuZXN0aW5nIGhhdmUgdGhlIGNvbmNlcHQgb2YgYSBtYXhpbXVtDQoxMjMxOiAgICAgICAgICAgICAgICAJc3lzdGVtIGNhbGwgKG9yIG1heGltdW0gQVBJIGNhbGwpIGludGVycnVwdCBwcmlvcml0eS4gIEludGVycnVwdHMgdGhhdCBhcmUNCjEyMzI6ICAgICAgICAgICAgICAgIAlhYm92ZSB0aGUgbWF4aW11bSBzeXN0ZW0gY2FsbCBwcmlvcml0eSBhcmUga2VwdCBwZXJtYW5lbnRseSBlbmFibGVkLCBldmVuDQoxMjMzOiAgICAgICAgICAgICAgICAJd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvDQoxMjM0OiAgICAgICAgICAgICAgICAJRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucy4gIElmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaA0KMTIzNTogICAgICAgICAgICAgICAgCXRoZW4gcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIHdpbGwgcmVzdWx0IGluIGFuIGFzc2VydGlvbg0KMTIzNjogICAgICAgICAgICAgICAgCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGJlZW4NCjEyMzc6ICAgICAgICAgICAgICAgIAlhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlIHRoZSBjb25maWd1cmVkIG1heGltdW0gc3lzdGVtIGNhbGwgcHJpb3JpdHkuDQoxMjM4OiAgICAgICAgICAgICAgICAJT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0cw0KMTIzOTogICAgICAgICAgICAgICAgCXRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYXQgb3IgKGxvZ2ljYWxseSkgYmVsb3cgdGhlIG1heGltdW0NCjEyNDA6ICAgICAgICAgICAgICAgIAlzeXN0ZW0gY2FsbAlpbnRlcnJ1cHQgcHJpb3JpdHkuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQNCjEyNDE6ICAgICAgICAgICAgICAgIAlzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4NCjEyNDI6ICAgICAgICAgICAgICAgIAlNb3JlIGluZm9ybWF0aW9uIChhbGJlaXQgQ29ydGV4LU0gc3BlY2lmaWMpIGlzIHByb3ZpZGVkIG9uIHRoZSBmb2xsb3dpbmcNCjEyNDM6ICAgICAgICAgICAgICAgIAlsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQoxMjQ0OiAgICAgICAgICAgICAgICAJcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpOw0KMTI0NTogICAgICAgICAgICAgICAgDQoxMjQ2OiAgICAgICAgICAgICAgICAJdXhTYXZlZEludGVycnVwdFN0YXR1cyA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDAyOEVFICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDAyOEYyICAgICAgMEMwMCAgIE5PUA0KQkZEMDI4RjQgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMTI0NzogICAgICAgICAgICAgICAgCXsNCjEyNDg6ICAgICAgICAgICAgICAgIAkJLyogV2hlbiB0aGUgcXVldWUgaXMgdXNlZCB0byBpbXBsZW1lbnQgYSBzZW1hcGhvcmUgbm8gZGF0YSBpcyBldmVyDQoxMjQ5OiAgICAgICAgICAgICAgICAJCW1vdmVkIHRocm91Z2ggdGhlIHF1ZXVlIGJ1dCBpdCBpcyBzdGlsbCB2YWxpZCB0byBzZWUgaWYgdGhlIHF1ZXVlICdoYXMNCjEyNTA6ICAgICAgICAgICAgICAgIAkJc3BhY2UnLiAqLw0KMTI1MTogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPCBweFF1ZXVlLT51eExlbmd0aCApDQpCRkQwMjhGOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMjhGQyAgICAgIDY5QUUgICBMVyBWMSwgNTYoVjApDQpCRkQwMjhGRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMjkwMiAgICAgIDY5MkYgICBMVyBWMCwgNjAoVjApDQpCRkQwMjkwNCAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDAyOTA2ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMA0KQkZEMDI5MDggIDAwNTE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI5QUUNCjEyNTI6ICAgICAgICAgICAgICAgIAkJew0KMTI1MzogICAgICAgICAgICAgICAgCQkJdHJhY2VRVUVVRV9TRU5EX0ZST01fSVNSKCBweFF1ZXVlICk7DQoxMjU0OiAgICAgICAgICAgICAgICANCjEyNTU6ICAgICAgICAgICAgICAgIAkJCS8qIEEgdGFzayBjYW4gb25seSBoYXZlIGFuIGluaGVyaXRlZCBwcmlvcml0eSBpZiBpdCBpcyBhIG11dGV4DQoxMjU2OiAgICAgICAgICAgICAgICAJCQlob2xkZXIgLSBhbmQgaWYgdGhlcmUgaXMgYSBtdXRleCBob2xkZXIgdGhlbiB0aGUgbXV0ZXggY2Fubm90IGJlDQoxMjU3OiAgICAgICAgICAgICAgICAJCQlnaXZlbiBmcm9tIGFuIElTUi4gIEFzIHRoaXMgaXMgdGhlIElTUiB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBpdA0KMTI1ODogICAgICAgICAgICAgICAgCQkJY2FuIGJlIGFzc3VtZWQgdGhlcmUgaXMgbm8gbXV0ZXggaG9sZGVyIGFuZCBubyBuZWVkIHRvIGRldGVybWluZSBpZg0KMTI1OTogICAgICAgICAgICAgICAgCQkJcHJpb3JpdHkgZGlzaW5oZXJpdGFuY2UgaXMgbmVlZGVkLiAgU2ltcGx5IGluY3JlYXNlIHRoZSBjb3VudCBvZg0KMTI2MDogICAgICAgICAgICAgICAgCQkJbWVzc2FnZXMgKHNlbWFwaG9yZXMpIGF2YWlsYWJsZS4gKi8NCjEyNjE6ICAgICAgICAgICAgICAgIAkJCSsrKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyApOw0KQkZEMDI5MEMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDI5MTAgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQ0KQkZEMDI5MTIgICAgICA2REEwICAgQURESVUgVjEsIFYwLCAxDQpCRkQwMjkxNCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMjkxOCAgICAgIEU5QUUgICBTVyBWMSwgNTYoVjApDQoxMjYyOiAgICAgICAgICAgICAgICANCjEyNjM6ICAgICAgICAgICAgICAgIAkJCS8qIFRoZSBldmVudCBsaXN0IGlzIG5vdCBhbHRlcmVkIGlmIHRoZSBxdWV1ZSBpcyBsb2NrZWQuICBUaGlzIHdpbGwNCjEyNjQ6ICAgICAgICAgICAgICAgIAkJCWJlIGRvbmUgd2hlbiB0aGUgcXVldWUgaXMgdW5sb2NrZWQgbGF0ZXIuICovDQoxMjY1OiAgICAgICAgICAgICAgICAJCQlpZiggcHhRdWV1ZS0+eFR4TG9jayA9PSBxdWV1ZVVOTE9DS0VEICkNCkJGRDAyOTFBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyOTFFICAwMDQ4RkM2MiAgIExXIFYxLCA3MihWMCkNCkJGRDAyOTIyICAgICAgRUQ3RiAgIExJIFYwLCAtMQ0KQkZEMDI5MjQgIDAwMzVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMjk5Mg0KQkZEMDI5MjYgIDBDMDAwMDM1ICAgU0xMIEFULCBTNSwgMQ0KQkZEMDI5MjggICAgICAwQzAwICAgTk9QDQoxMjY2OiAgICAgICAgICAgICAgICAJCQl7DQoxMjY3OiAgICAgICAgICAgICAgICAJCQkJI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQoxMjY4OiAgICAgICAgICAgICAgICAJCQkJew0KMTI2OTogICAgICAgICAgICAgICAgCQkJCQlpZiggcHhRdWV1ZS0+cHhRdWV1ZVNldENvbnRhaW5lciAhPSBOVUxMICkNCkJGRDAyOTJBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyOTJFICAwMDRDRkM0MiAgIExXIFYwLCA3NihWMCkNCkJGRDAyOTMyICAwMDE1NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyOTYwDQoxMjcwOiAgICAgICAgICAgICAgICAJCQkJCXsNCjEyNzE6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCBwcnZOb3RpZnlRdWV1ZVNldENvbnRhaW5lciggcHhRdWV1ZSwgcXVldWVTRU5EX1RPX0JBQ0sgKSA9PSBwZFRSVUUgKQ0KQkZEMDI5MzYgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQ0KQkZEMDI5M0EgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTw0KQkZEMDI5M0MgIDIxRDg3N0U4ICAgSkFMUyBwcnZOb3RpZnlRdWV1ZVNldENvbnRhaW5lcg0KQkZEMDI5M0UgIDBDMDAyMUQ4ICAgTFdDMiBUNiwgMzA3MihUOCkNCkJGRDAyOTQwICAgICAgMEMwMCAgIE5PUA0KQkZEMDI5NDIgICAgICAwQzYyICAgTU9WRSBWMSwgVjANCkJGRDAyOTQ0ICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMjk0NiAgMDAyREI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAyOUE0DQpCRkQwMjk0OCAgMEMwMDAwMkQgICBTTEwgQVQsIFQ1LCAxDQpCRkQwMjk0QSAgICAgIDBDMDAgICBOT1ANCjEyNzI6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjEyNzM6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBUaGUgc2VtYXBob3JlIGlzIGEgbWVtYmVyIG9mIGEgcXVldWUgc2V0LCBhbmQNCjEyNzQ6ICAgICAgICAgICAgICAgIAkJCQkJCQlwb3N0aW5nCXRvIHRoZSBxdWV1ZSBzZXQgY2F1c2VkIGEgaGlnaGVyIHByaW9yaXR5DQoxMjc1OiAgICAgICAgICAgICAgICAJCQkJCQkJdGFzayB0bwl1bmJsb2NrLiAgQSBjb250ZXh0IHN3aXRjaCBpcyByZXF1aXJlZC4gKi8NCjEyNzY6ICAgICAgICAgICAgICAgIAkJCQkJCQlpZiggcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBOVUxMICkNCkJGRDAyOTRDICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAyOTUwICAwMDI4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyOUE0DQoxMjc3OiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTI3ODogICAgICAgICAgICAgICAgCQkJCQkJCQkqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiA9IHBkVFJVRTsNCkJGRDAyOTU0ICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAyOTU4ICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwMjk1QSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCkJGRDAyOTVDICAgICAgQ0MyMyAgIEIgMHhCRkQwMjlBNA0KQkZEMDI5NUUgICAgICAwQzAwICAgTk9QDQoxMjc5OiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTI4MDogICAgICAgICAgICAgICAgCQkJCQkJCWVsc2UNCjEyODE6ICAgICAgICAgICAgICAgIAkJCQkJCQl7DQoxMjgyOiAgICAgICAgICAgICAgICAJCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEyODM6ICAgICAgICAgICAgICAgIAkJCQkJCQl9DQoxMjg0OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxMjg1OiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQoxMjg2OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMjg3OiAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTI4ODogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTI4OTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMjkwOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjEyOTE6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTI5MjogICAgICAgICAgICAgICAgCQkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCkJGRDAyOTYwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyOTY0ICAgICAgNjkyOSAgIExXIFYwLCAzNihWMCkNCkJGRDAyOTY2ICAwMDFENDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyOUE0DQoxMjkzOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMjk0OiAgICAgICAgICAgICAgICAJCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQpCRkQwMjk2QSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMjk2RSAgMDAyNDMwNDIgICBBRERJVSBWMCwgVjAsIDM2DQpCRkQwMjk3MiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDI5NzQgIDIyQkM3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21FdmVudExpc3QNCkJGRDAyOTc2ICAwQzAwMjJCQyAgIExXQzIgUzUsIDMwNzIoR1ApDQpCRkQwMjk3OCAgICAgIDBDMDAgICBOT1ANCkJGRDAyOTdBICAwMDEzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyOUE0DQoxMjk1OiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTI5NjogICAgICAgICAgICAgICAgCQkJCQkJCQkvKiBUaGUgdGFzayB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSBzbw0KMTI5NzogICAgICAgICAgICAgICAgCQkJCQkJCQlyZWNvcmQgdGhhdCBhIGNvbnRleHQgc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KMTI5ODogICAgICAgICAgICAgICAgCQkJCQkJCQlpZiggcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiAhPSBOVUxMICkNCkJGRDAyOTdFICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAyOTgyICAwMDBGNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyOUE0DQoxMjk5OiAgICAgICAgICAgICAgICAJCQkJCQkJCXsNCjEzMDA6ICAgICAgICAgICAgICAgIAkJCQkJCQkJCSpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuID0gcGRUUlVFOw0KQkZEMDI5ODYgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQ0KQkZEMDI5OEEgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAyOThDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KQkZEMDI5OEUgICAgICBDQzBBICAgQiAweEJGRDAyOUE0DQpCRkQwMjk5MCAgICAgIDBDMDAgICBOT1ANCjEzMDE6ICAgICAgICAgICAgICAgIAkJCQkJCQkJfQ0KMTMwMjogICAgICAgICAgICAgICAgCQkJCQkJCQllbHNlDQoxMzAzOiAgICAgICAgICAgICAgICAJCQkJCQkJCXsNCjEzMDQ6ICAgICAgICAgICAgICAgIAkJCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEzMDU6ICAgICAgICAgICAgICAgIAkJCQkJCQkJfQ0KMTMwNjogICAgICAgICAgICAgICAgCQkJCQkJCX0NCjEzMDc6ICAgICAgICAgICAgICAgIAkJCQkJCQllbHNlDQoxMzA4OiAgICAgICAgICAgICAgICAJCQkJCQkJew0KMTMwOTogICAgICAgICAgICAgICAgCQkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxMzEwOiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTMxMTogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTMxMjogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KMTMxMzogICAgICAgICAgICAgICAgCQkJCQkJew0KMTMxNDogICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEzMTU6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjEzMTY6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTMxNzogICAgICAgICAgICAgICAgCQkJCX0NCjEzMTg6ICAgICAgICAgICAgICAgIAkJCQkjZWxzZSAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMTMxOTogICAgICAgICAgICAgICAgCQkJCXsNCjEzMjA6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCjEzMjE6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTMyMjogICAgICAgICAgICAgICAgCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQoxMzIzOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMzI0OiAgICAgICAgICAgICAgICAJCQkJCQkJLyogVGhlIHRhc2sgd2FpdGluZyBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgc28gcmVjb3JkIHRoYXQgYQ0KMTMyNTogICAgICAgICAgICAgICAgCQkJCQkJCWNvbnRleHQJc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KMTMyNjogICAgICAgICAgICAgICAgCQkJCQkJCWlmKCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICE9IE5VTEwgKQ0KMTMyNzogICAgICAgICAgICAgICAgCQkJCQkJCXsNCjEzMjg6ICAgICAgICAgICAgICAgIAkJCQkJCQkJKnB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gPSBwZFRSVUU7DQoxMzI5OiAgICAgICAgICAgICAgICAJCQkJCQkJfQ0KMTMzMDogICAgICAgICAgICAgICAgCQkJCQkJCWVsc2UNCjEzMzE6ICAgICAgICAgICAgICAgIAkJCQkJCQl7DQoxMzMyOiAgICAgICAgICAgICAgICAJCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjEzMzM6ICAgICAgICAgICAgICAgIAkJCQkJCQl9DQoxMzM0OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxMzM1OiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQoxMzM2OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxMzM3OiAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTMzODogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTMzOTogICAgICAgICAgICAgICAgCQkJCQl9DQoxMzQwOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjEzNDE6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTM0MjogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTM0MzogICAgICAgICAgICAgICAgCQkJCQl9DQoxMzQ0OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTM0NTogICAgICAgICAgICAgICAgCQkJCSNlbmRpZiAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMTM0NjogICAgICAgICAgICAgICAgCQkJfQ0KMTM0NzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMTM0ODogICAgICAgICAgICAgICAgCQkJew0KMTM0OTogICAgICAgICAgICAgICAgCQkJCS8qIEluY3JlbWVudCB0aGUgbG9jayBjb3VudCBzbyB0aGUgdGFzayB0aGF0IHVubG9ja3MgdGhlIHF1ZXVlDQoxMzUwOiAgICAgICAgICAgICAgICAJCQkJa25vd3MgdGhhdCBkYXRhIHdhcyBwb3N0ZWQgd2hpbGUgaXQgd2FzIGxvY2tlZC4gKi8NCjEzNTE6ICAgICAgICAgICAgICAgIAkJCQkrKyggcHhRdWV1ZS0+eFR4TG9jayApOw0KQkZEMDI5OTIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDI5OTYgIDAwNDhGQzQyICAgTFcgVjAsIDcyKFYwKQ0KQkZEMDI5OUEgICAgICA2REEwICAgQURESVUgVjEsIFYwLCAxDQpCRkQwMjk5QyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMjlBMCAgMDA0OEY4NjIgICBTVyBWMSwgNzIoVjApDQoxMzUyOiAgICAgICAgICAgICAgICAJCQl9DQoxMzUzOiAgICAgICAgICAgICAgICANCjEzNTQ6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZFBBU1M7DQpCRkQwMjlBNCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDI5QTYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KQkZEMDI5QUEgICAgICBDQzAzICAgQiAweEJGRDAyOUIyDQpCRkQwMjlBQyAgICAgIDBDMDAgICBOT1ANCjEzNTU6ICAgICAgICAgICAgICAgIAkJfQ0KMTM1NjogICAgICAgICAgICAgICAgCQllbHNlDQoxMzU3OiAgICAgICAgICAgICAgICAJCXsNCjEzNTg6ICAgICAgICAgICAgICAgIAkJCXRyYWNlUVVFVUVfU0VORF9GUk9NX0lTUl9GQUlMRUQoIHB4UXVldWUgKTsNCjEzNTk6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBlcnJRVUVVRV9GVUxMOw0KQkZEMDI5QUUgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQoxMzYwOiAgICAgICAgICAgICAgICAJCX0NCjEzNjE6ICAgICAgICAgICAgICAgIAl9DQoxMzYyOiAgICAgICAgICAgICAgICAJcG9ydENMRUFSX0lOVEVSUlVQVF9NQVNLX0ZST01fSVNSKCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzICk7DQpCRkQwMjlCMiAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpDQpCRkQwMjlCNiAgNEQ1RTc3RTggICBKQUxTIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUg0KQkZEMDI5QjggICAgICA0RDVFICAgQURESVUgVDIsIFQyLCAtMQ0KQkZEMDI5QkEgICAgICAwQzAwICAgTk9QDQoxMzYzOiAgICAgICAgICAgICAgICANCjEzNjQ6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDAyOUJDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjEzNjU6ICAgICAgICAgICAgICAgIH0NCkJGRDAyOUMwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwMjlDMiAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwMjlDNCAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwMjlDNiAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwMjlDOCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwMjlDQSAgICAgIDBDMDAgICBOT1ANCjEzNjY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTM2NzogICAgICAgICAgICAgICAgDQoxMzY4OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhRdWV1ZUdlbmVyaWNSZWNlaXZlKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSwgdm9pZCAqIGNvbnN0IHB2QnVmZmVyLCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCwgY29uc3QgQmFzZVR5cGVfdCB4SnVzdFBlZWtpbmcgKQ0KMTM2OTogICAgICAgICAgICAgICAgew0KQkZEMDEwM0MgICAgICA0RkU1ICAgQURESVUgU1AsIFNQLCAtNTYNCkJGRDAxMDNFICAgICAgQ0JFRCAgIFNXIFJBLCA1MihTUCkNCkJGRDAxMDQwICAgICAgQ0JDQyAgIFNXIFM4LCA0OChTUCkNCkJGRDAxMDQyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwMTA0NCAgMDAzOEY4OUUgICBTVyBBMCwgNTYoUzgpDQpCRkQwMTA0OCAgMDAzQ0Y4QkUgICBTVyBBMSwgNjAoUzgpDQpCRkQwMTA0QyAgMDA0MEY4REUgICBTVyBBMiwgNjQoUzgpDQpCRkQwMTA1MCAgMDA0NEY4RkUgICBTVyBBMywgNjgoUzgpDQoxMzcwOiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhFbnRyeVRpbWVTZXQgPSBwZEZBTFNFOw0KQkZEMDEwNTQgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQoxMzcxOiAgICAgICAgICAgICAgICBUaW1lT3V0X3QgeFRpbWVPdXQ7DQoxMzcyOiAgICAgICAgICAgICAgICBpbnQ4X3QgKnBjT3JpZ2luYWxSZWFkUG9zaXRpb247DQoxMzczOiAgICAgICAgICAgICAgICBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDEwNTggIDAwMzhGQzVFICAgTFcgVjAsIDU2KFM4KQ0KQkZEMDEwNUMgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMTM3NDogICAgICAgICAgICAgICAgDQoxMzc1OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQpCRkQwMTA2MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTA2NCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTA3QQ0KQkZEMDEwNjggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAxMDZBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAxMDZDICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwMTA2RSAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwMTA3MCAgMDU1RjMwQTAgICBBRERJVSBBMSwgWkVSTywgMTM3NQ0KQkZEMDEwNzIgICAgICAwNTVGICAgU1VCVSBWMCwgQTMsIEExDQpCRkQwMTA3NCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAxMDc2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMTA3OCAgICAgIDBDMDAgICBOT1ANCjEzNzY6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICEoICggcHZCdWZmZXIgPT0gTlVMTCApICYmICggcHhRdWV1ZS0+dXhJdGVtU2l6ZSAhPSAoIFVCYXNlVHlwZV90ICkgMFUgKSApICk7DQpCRkQwMTA3QSAgMDAzQ0ZDNUUgICBMVyBWMCwgNjAoUzgpDQpCRkQwMTA3RSAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTA4RQ0KQkZEMDEwODIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDEwODYgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQ0KQkZEMDEwOEEgIDAwMDM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEwOTQNCkJGRDAxMDhFICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMTA5MCAgICAgIENDMDIgICBCIDB4QkZEMDEwOTYNCkJGRDAxMDkyICAgICAgMEMwMCAgIE5PUA0KQkZEMDEwOTQgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTw0KQkZEMDEwOTYgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEwQUMNCkJGRDAxMDlBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMTA5QyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMTA5RSAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDEwQTAgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDEwQTIgIDA1NjAzMEEwICAgQURESVUgQTEsIFpFUk8sIDEzNzYNCkJGRDAxMEE0ICAgICAgMDU2MCAgIEFERFUgVjAsIFMwLCBBMg0KQkZEMDEwQTYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMTBBOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDEwQUEgICAgICAwQzAwICAgTk9QDQoxMzc3OiAgICAgICAgICAgICAgICAJI2lmICggKCBJTkNMVURFX3hUYXNrR2V0U2NoZWR1bGVyU3RhdGUgPT0gMSApIHx8ICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkgKQ0KMTM3ODogICAgICAgICAgICAgICAgCXsNCjEzNzk6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCAhKCAoIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoKSA9PSB0YXNrU0NIRURVTEVSX1NVU1BFTkRFRCApICYmICggeFRpY2tzVG9XYWl0ICE9IDAgKSApICk7DQpCRkQwMTBBQyAgNEE4RTc3RTggICBKQUxTIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUNCkJGRDAxMEFFICAgICAgNEE4RSAgIExXIFM0LCA1NihTUCkNCkJGRDAxMEIwICAgICAgMEMwMCAgIE5PUA0KQkZEMDEwQjIgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEwQkUNCkJGRDAxMEI2ICAwMDQwRkM1RSAgIExXIFYwLCA2NChTOCkNCkJGRDAxMEJBICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMEM0DQpCRkQwMTBCRSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDEwQzAgICAgICBDQzAyICAgQiAweEJGRDAxMEM2DQpCRkQwMTBDMiAgICAgIDBDMDAgICBOT1ANCkJGRDAxMEM0ICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8NCkJGRDAxMEM2ICAwMDBDNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMEUyDQpCRkQwMTBDQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDEwQ0MgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDEwQ0UgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDAxMEQwICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDAxMEQyICAwNTYzMzBBMCAgIEFERElVIEExLCBaRVJPLCAxMzc5DQpCRkQwMTBENCAgICAgIDA1NjMgICBTVUJVIFYwLCBTMSwgQTINCkJGRDAxMEQ2ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDEwRDggICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAxMERBICAgICAgMEMwMCAgIE5PUA0KQkZEMDEwREMgICAgICBDQzAyICAgQiAweEJGRDAxMEUyDQpCRkQwMTBERSAgICAgIDBDMDAgICBOT1ANCjEzODA6ICAgICAgICAgICAgICAgIAl9DQoxMzgxOiAgICAgICAgICAgICAgICAJI2VuZGlmDQoxMzgyOiAgICAgICAgICAgICAgICANCjEzODM6ICAgICAgICAgICAgICAgIAkvKiBUaGlzIGZ1bmN0aW9uIHJlbGF4ZXMgdGhlIGNvZGluZyBzdGFuZGFyZCBzb21ld2hhdCB0byBhbGxvdyByZXR1cm4NCjEzODQ6ICAgICAgICAgICAgICAgIAlzdGF0ZW1lbnRzIHdpdGhpbiB0aGUgZnVuY3Rpb24gaXRzZWxmLiAgVGhpcyBpcyBkb25lIGluIHRoZSBpbnRlcmVzdA0KMTM4NTogICAgICAgICAgICAgICAgCW9mIGV4ZWN1dGlvbiB0aW1lIGVmZmljaWVuY3kuICovDQoxMzg2OiAgICAgICAgICAgICAgICANCjEzODc6ICAgICAgICAgICAgICAgIAlmb3IoIDs7ICkNCjEzODg6ICAgICAgICAgICAgICAgIAl7DQoxMzg5OiAgICAgICAgICAgICAgICAJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDEwRTIgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDAxMEU0ICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDEwRTYgICAgICAwQzAwICAgTk9QDQoxMzkwOiAgICAgICAgICAgICAgICAJCXsNCjEzOTE6ICAgICAgICAgICAgICAgIAkJCS8qIElzIHRoZXJlIGRhdGEgaW4gdGhlIHF1ZXVlIG5vdz8gIFRvIGJlIHJ1bm5pbmcgdGhlIGNhbGxpbmcgdGFzaw0KMTM5MjogICAgICAgICAgICAgICAgCQkJbXVzdCBiZQl0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHdhbnRpbmcgdG8gYWNjZXNzIHRoZSBxdWV1ZS4gKi8NCjEzOTM6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA+ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAxMEU4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxMEVDICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkNCkJGRDAxMEVFICAwMDcwNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxMUQyDQoxMzk0OiAgICAgICAgICAgICAgICAJCQl7DQoxMzk1OiAgICAgICAgICAgICAgICAJCQkJLyogUmVtZW1iZXIgdGhlIHJlYWQgcG9zaXRpb24gaW4gY2FzZSB0aGUgcXVldWUgaXMgb25seSBiZWluZw0KMTM5NjogICAgICAgICAgICAgICAgCQkJCXBlZWtlZC4gKi8NCjEzOTc6ICAgICAgICAgICAgICAgIAkJCQlwY09yaWdpbmFsUmVhZFBvc2l0aW9uID0gcHhRdWV1ZS0+dS5wY1JlYWRGcm9tOw0KQkZEMDEwRjIgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDEwRjYgICAgICA2OTIzICAgTFcgVjAsIDEyKFYwKQ0KQkZEMDEwRjggIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMTM5ODogICAgICAgICAgICAgICAgDQoxMzk5OiAgICAgICAgICAgICAgICAJCQkJcHJ2Q29weURhdGFGcm9tUXVldWUoIHB4UXVldWUsIHB2QnVmZmVyICk7DQpCRkQwMTBGQyAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwMTEwMCAgMDAzQ0ZDQkUgICBMVyBBMSwgNjAoUzgpDQpCRkQwMTEwNCAgMzY3QTc3RTggICBKQUxTIHBydkNvcHlEYXRhRnJvbVF1ZXVlDQpCRkQwMTEwNiAgMEMwMDM2N0EgICBMSFUgUzMsIDMwNzIoSzApDQpCRkQwMTEwOCAgICAgIDBDMDAgICBOT1ANCjE0MDA6ICAgICAgICAgICAgICAgIA0KMTQwMTogICAgICAgICAgICAgICAgCQkJCWlmKCB4SnVzdFBlZWtpbmcgPT0gcGRGQUxTRSApDQpCRkQwMTEwQSAgMDA0NEZDNUUgICBMVyBWMCwgNjgoUzgpDQpCRkQwMTEwRSAgMDAzNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTE3RQ0KMTQwMjogICAgICAgICAgICAgICAgCQkJCXsNCjE0MDM6ICAgICAgICAgICAgICAgIAkJCQkJdHJhY2VRVUVVRV9SRUNFSVZFKCBweFF1ZXVlICk7DQoxNDA0OiAgICAgICAgICAgICAgICANCjE0MDU6ICAgICAgICAgICAgICAgIAkJCQkJLyogQWN0dWFsbHkgcmVtb3ZpbmcgZGF0YSwgbm90IGp1c3QgcGVla2luZy4gKi8NCjE0MDY6ICAgICAgICAgICAgICAgIAkJCQkJLS0oIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICk7DQpCRkQwMTExMiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTExNiAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApDQpCRkQwMTExOCAgICAgIDZEQUUgICBBRERJVSBWMSwgVjAsIC0xDQpCRkQwMTExQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTExRSAgICAgIEU5QUUgICBTVyBWMSwgNTYoVjApDQoxNDA3OiAgICAgICAgICAgICAgICANCjE0MDg6ICAgICAgICAgICAgICAgIAkJCQkJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoxNDA5OiAgICAgICAgICAgICAgICAJCQkJCXsNCjE0MTA6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCBweFF1ZXVlLT51eFF1ZXVlVHlwZSA9PSBxdWV1ZVFVRVVFX0lTX01VVEVYICkNCkJGRDAxMTIwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxMTI0ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDExMjYgIDAwMDc0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDExMzgNCjE0MTE6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE0MTI6ICAgICAgICAgICAgICAgIAkJCQkJCQkvKiBSZWNvcmQgdGhlIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGltcGxlbWVudA0KMTQxMzogICAgICAgICAgICAgICAgCQkJCQkJCXByaW9yaXR5IGluaGVyaXRhbmNlIHNob3VsZCBpdCBiZWNvbWUgbmVjZXNzYXJ5LiAqLw0KMTQxNDogICAgICAgICAgICAgICAgCQkJCQkJCXB4UXVldWUtPnB4TXV0ZXhIb2xkZXIgPSAoIGludDhfdCAqICkgcHZUYXNrSW5jcmVtZW50TXV0ZXhIZWxkQ291bnQoKTsgLypsaW50ICFlOTYxIENhc3QgaXMgbm90IHJlZHVuZGFudCBhcyBUYXNrSGFuZGxlX3QgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDExMkEgIDRDRTA3N0U4ICAgSkFMUyBwdlRhc2tJbmNyZW1lbnRNdXRleEhlbGRDb3VudA0KQkZEMDExMkMgICAgICA0Q0UwICAgQURESVUgQTMsIEEzLCAwDQpCRkQwMTEyRSAgICAgIDBDMDAgICBOT1ANCkJGRDAxMTMwICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwDQpCRkQwMTEzMiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTEzNiAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkNCjE0MTU6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE0MTY6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjE0MTc6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE0MTg6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNDE5OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxNDIwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE0MjE6ICAgICAgICAgICAgICAgIAkJCQkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9NVVRFWEVTICovDQoxNDIyOiAgICAgICAgICAgICAgICANCjE0MjM6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCkJGRDAxMTM4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxMTNDICAgICAgNjkyNCAgIExXIFYwLCAxNihWMCkNCkJGRDAxMTNFICAwMDQyNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxMUM2DQoxNDI0OiAgICAgICAgICAgICAgICAJCQkJCXsNCjE0MjU6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkVFJVRSApDQpCRkQwMTE0MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTE0NiAgICAgIDZEMjggICBBRERJVSBWMCwgVjAsIDE2DQpCRkQwMTE0OCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDExNEEgIDIyQkM3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21FdmVudExpc3QNCkJGRDAxMTRDICAwQzAwMjJCQyAgIExXQzIgUzUsIDMwNzIoR1ApDQpCRkQwMTE0RSAgICAgIDBDMDAgICBOT1ANCkJGRDAxMTUwICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwDQpCRkQwMTE1MiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDExNTQgIDAwMzdCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMTFDNg0KQkZEMDExNTYgIDBDMDAwMDM3ICAgU0xMIEFULCBTNywgMQ0KQkZEMDExNTggICAgICAwQzAwICAgTk9QDQoxNDI2OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxNDI3OiAgICAgICAgICAgICAgICAJCQkJCQkJcXVldWVZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwMTE1QSAgNEUxNjc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwMTE1QyAgICAgIDRFMTYgICBBRERJVSBTMCwgUzAsIC01DQpCRkQwMTE1RSAgICAgIDBDMDAgICBOT1ANCkJGRDAxMTYwICAwMDFDRjg1RSAgIFNXIFYwLCAyOChTOCkNCkJGRDAxMTY0ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAxMTY4ICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDExNkMgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQ0KQkZEMDExNzAgIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQ0KQkZEMDExNzQgIDRFMjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwMTE3NiAgICAgIDRFMjYgICBBRERJVSBTMSwgUzEsIDMNCkJGRDAxMTc4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDExN0EgICAgICBDQzI1ICAgQiAweEJGRDAxMUM2DQpCRkQwMTE3QyAgICAgIDBDMDAgICBOT1ANCjE0Mjg6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE0Mjk6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjE0MzA6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE0MzE6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNDMyOiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxNDMzOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE0MzQ6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTQzNTogICAgICAgICAgICAgICAgCQkJCQl7DQoxNDM2OiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNDM3OiAgICAgICAgICAgICAgICAJCQkJCX0NCjE0Mzg6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNDM5OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTQ0MDogICAgICAgICAgICAgICAgCQkJCXsNCjE0NDE6ICAgICAgICAgICAgICAgIAkJCQkJdHJhY2VRVUVVRV9QRUVLKCBweFF1ZXVlICk7DQoxNDQyOiAgICAgICAgICAgICAgICANCjE0NDM6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIGRhdGEgaXMgbm90IGJlaW5nIHJlbW92ZWQsIHNvIHJlc2V0IHRoZSByZWFkDQoxNDQ0OiAgICAgICAgICAgICAgICAJCQkJCXBvaW50ZXIuICovDQoxNDQ1OiAgICAgICAgICAgICAgICAJCQkJCXB4UXVldWUtPnUucGNSZWFkRnJvbSA9IHBjT3JpZ2luYWxSZWFkUG9zaXRpb247DQpCRkQwMTE3RSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTE4MiAgMDAxOEZDN0UgICBMVyBWMSwgMjQoUzgpDQpCRkQwMTE4NiAgICAgIEU5QTMgICBTVyBWMSwgMTIoVjApDQoxNDQ2OiAgICAgICAgICAgICAgICANCjE0NDc6ICAgICAgICAgICAgICAgIAkJCQkJLyogVGhlIGRhdGEgaXMgYmVpbmcgbGVmdCBpbiB0aGUgcXVldWUsIHNvIHNlZSBpZiB0aGVyZSBhcmUNCjE0NDg6ICAgICAgICAgICAgICAgIAkJCQkJYW55IG90aGVyIHRhc2tzIHdhaXRpbmcgZm9yIHRoZSBkYXRhLiAqLw0KMTQ0OTogICAgICAgICAgICAgICAgCQkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KQkZEMDExODggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDExOEMgICAgICA2OTI5ICAgTFcgVjAsIDM2KFYwKQ0KQkZEMDExOEUgIDAwMUE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDExQzYNCjE0NTA6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTQ1MTogICAgICAgICAgICAgICAgCQkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQpCRkQwMTE5MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTE5NiAgMDAyNDMwNDIgICBBRERJVSBWMCwgVjAsIDM2DQpCRkQwMTE5QSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDExOUMgIDIyQkM3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21FdmVudExpc3QNCkJGRDAxMTlFICAwQzAwMjJCQyAgIExXQzIgUzUsIDMwNzIoR1ApDQpCRkQwMTFBMCAgICAgIDBDMDAgICBOT1ANCkJGRDAxMUEyICAwMDEwNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxMUM2DQoxNDUyOiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxNDUzOiAgICAgICAgICAgICAgICAJCQkJCQkJLyogVGhlIHRhc2sgd2FpdGluZyBoYXMgYSBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGlzIHRhc2suICovDQoxNDU0OiAgICAgICAgICAgICAgICAJCQkJCQkJcXVldWVZSUVMRF9JRl9VU0lOR19QUkVFTVBUSU9OKCk7DQpCRkQwMTFBNiAgNEUxNjc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwMTFBOCAgICAgIDRFMTYgICBBRERJVSBTMCwgUzAsIC01DQpCRkQwMTFBQSAgICAgIDBDMDAgICBOT1ANCkJGRDAxMUFDICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkNCkJGRDAxMUIwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAxMUI0ICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDExQjggIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQ0KQkZEMDExQkMgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDExQzAgIDRFMjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwMTFDMiAgICAgIDRFMjYgICBBRERJVSBTMSwgUzEsIDMNCkJGRDAxMUM0ICAgICAgMEMwMCAgIE5PUA0KMTQ1NTogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTQ1NjogICAgICAgICAgICAgICAgCQkJCQkJZWxzZQ0KMTQ1NzogICAgICAgICAgICAgICAgCQkJCQkJew0KMTQ1ODogICAgICAgICAgICAgICAgCQkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE0NTk6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE0NjA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTQ2MTogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoxNDYyOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE0NjM6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE0NjQ6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTQ2NTogICAgICAgICAgICAgICAgCQkJCX0NCjE0NjY6ICAgICAgICAgICAgICAgIA0KMTQ2NzogICAgICAgICAgICAgICAgCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMTFDNiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMTFDOCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgcHJ2Q29weURhdGFUb1F1ZXVlDQpCRkQwMTFDQSAgICAgIDBDMDAgICBOT1ANCjE0Njg6ICAgICAgICAgICAgICAgIAkJCQlyZXR1cm4gcGRQQVNTOw0KQkZEMDExQ0MgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAxMUNFICAgICAgQ0M5QSAgIEIgMHhCRkQwMTMwNA0KQkZEMDExRDAgICAgICAwQzAwICAgTk9QDQoxNDY5OiAgICAgICAgICAgICAgICAJCQl9DQoxNDcwOiAgICAgICAgICAgICAgICAJCQllbHNlDQoxNDcxOiAgICAgICAgICAgICAgICAJCQl7DQoxNDcyOiAgICAgICAgICAgICAgICAJCQkJaWYoIHhUaWNrc1RvV2FpdCA9PSAoIFRpY2tUeXBlX3QgKSAwICkNCkJGRDAxMUQyICAwMDQwRkM1RSAgIExXIFYwLCA2NChTOCkNCkJGRDAxMUQ2ICAwMDA2NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMUU2DQoxNDczOiAgICAgICAgICAgICAgICAJCQkJew0KMTQ3NDogICAgICAgICAgICAgICAgCQkJCQkvKiBUaGUgcXVldWUgd2FzIGVtcHR5IGFuZCBubyBibG9jayB0aW1lIGlzIHNwZWNpZmllZCAob3INCjE0NzU6ICAgICAgICAgICAgICAgIAkJCQkJdGhlIGJsb2NrIHRpbWUgaGFzIGV4cGlyZWQpIHNvIGxlYXZlIG5vdy4gKi8NCjE0NzY6ICAgICAgICAgICAgICAgIAkJCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAxMURBICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDAxMURDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDAyOUUwDQpCRkQwMTFERSAgICAgIDBDMDAgICBOT1ANCjE0Nzc6ICAgICAgICAgICAgICAgIAkJCQkJdHJhY2VRVUVVRV9SRUNFSVZFX0ZBSUxFRCggcHhRdWV1ZSApOw0KMTQ3ODogICAgICAgICAgICAgICAgCQkJCQlyZXR1cm4gZXJyUVVFVUVfRU1QVFk7DQpCRkQwMTFFMCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQpCRkQwMTFFMiAgICAgIENDOTAgICBCIDB4QkZEMDEzMDQNCkJGRDAxMUU0ICAgICAgMEMwMCAgIE5PUA0KMTQ3OTogICAgICAgICAgICAgICAgCQkJCX0NCjE0ODA6ICAgICAgICAgICAgICAgIAkJCQllbHNlIGlmKCB4RW50cnlUaW1lU2V0ID09IHBkRkFMU0UgKQ0KQkZEMDExRTYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDExRUEgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEyMDANCjE0ODE6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNDgyOiAgICAgICAgICAgICAgICAJCQkJCS8qIFRoZSBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgYmxvY2sgdGltZSB3YXMgc3BlY2lmaWVkIHNvDQoxNDgzOiAgICAgICAgICAgICAgICAJCQkJCWNvbmZpZ3VyZSB0aGUgdGltZW91dCBzdHJ1Y3R1cmUuICovDQoxNDg0OiAgICAgICAgICAgICAgICAJCQkJCXZUYXNrU2V0VGltZU91dFN0YXRlKCAmeFRpbWVPdXQgKTsNCkJGRDAxMUVFICAwMDI4MzA1RSAgIEFERElVIFYwLCBTOCwgNDANCkJGRDAxMUYyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwMTFGNCAgNDdBNjc3RTggICBKQUxTIHZUYXNrU2V0VGltZU91dFN0YXRlDQpCRkQwMTFGOCAgICAgIDBDMDAgICBOT1ANCjE0ODU6ICAgICAgICAgICAgICAgIAkJCQkJeEVudHJ5VGltZVNldCA9IHBkVFJVRTsNCkJGRDAxMUZBICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMTFGQyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxNDg2OiAgICAgICAgICAgICAgICAJCQkJfQ0KMTQ4NzogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjE0ODg6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNDg5OiAgICAgICAgICAgICAgICAJCQkJCS8qIEVudHJ5IHRpbWUgd2FzIGFscmVhZHkgc2V0LiAqLw0KMTQ5MDogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNDkxOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTQ5MjogICAgICAgICAgICAgICAgCQkJfQ0KMTQ5MzogICAgICAgICAgICAgICAgCQl9DQoxNDk0OiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMTIwMCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMTIwMiAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMkEwNg0KQkZEMDEyMDQgICAgICAwQzAwICAgTk9QDQoxNDk1OiAgICAgICAgICAgICAgICANCjE0OTY6ICAgICAgICAgICAgICAgIAkJLyogSW50ZXJydXB0cyBhbmQgb3RoZXIgdGFza3MgY2FuIHNlbmQgdG8gYW5kIHJlY2VpdmUgZnJvbSB0aGUgcXVldWUNCjE0OTc6ICAgICAgICAgICAgICAgIAkJbm93IHRoZSBjcml0aWNhbCBzZWN0aW9uIGhhcyBiZWVuIGV4aXRlZC4gKi8NCjE0OTg6ICAgICAgICAgICAgICAgIA0KMTQ5OTogICAgICAgICAgICAgICAgCQl2VGFza1N1c3BlbmRBbGwoKTsNCkJGRDAxMjA2ICA0RUY0NzdFOCAgIEpBTFMgdlRhc2tTdXNwZW5kQWxsDQpCRkQwMTIwOCAgICAgIDRFRjQgICBBRERJVSBTNywgUzcsIC02DQpCRkQwMTIwQSAgICAgIDBDMDAgICBOT1ANCjE1MDA6ICAgICAgICAgICAgICAgIAkJcHJ2TG9ja1F1ZXVlKCBweFF1ZXVlICk7DQpCRkQwMTIwQyAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDEyMEUgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwMTIxMCAgICAgIDBDMDAgICBOT1ANCkJGRDAxMjEyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxMjE2ICAwMDQ0RkM2MiAgIExXIFYxLCA2OChWMCkNCkJGRDAxMjFBICAgICAgRUQ3RiAgIExJIFYwLCAtMQ0KQkZEMDEyMUMgIDAwMDVCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMTIyQQ0KQkZEMDEyMUUgIDBDMDAwMDA1ICAgU0xMIFpFUk8sIEExLCAxDQpCRkQwMTIyMCAgICAgIDBDMDAgICBOT1ANCkJGRDAxMjIyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxMjI2ICAwMDQ0RjgwMiAgIFNXIFpFUk8sIDY4KFYwKQ0KQkZEMDEyMkEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDEyMkUgIDAwNDhGQzYyICAgTFcgVjEsIDcyKFYwKQ0KQkZEMDEyMzIgICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwMTIzNCAgMDAwNUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxMjQyDQpCRkQwMTIzNiAgMEMwMDAwMDUgICBTTEwgWkVSTywgQTEsIDENCkJGRDAxMjM4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDEyM0EgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDEyM0UgIDAwNDhGODAyICAgU1cgWkVSTywgNzIoVjApDQpCRkQwMTI0MiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMTI0NCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMkE0OA0KQkZEMDEyNDYgICAgICAwQzAwICAgTk9QDQoxNTAxOiAgICAgICAgICAgICAgICANCjE1MDI6ICAgICAgICAgICAgICAgIAkJLyogVXBkYXRlIHRoZSB0aW1lb3V0IHN0YXRlIHRvIHNlZSBpZiBpdCBoYXMgZXhwaXJlZCB5ZXQuICovDQoxNTAzOiAgICAgICAgICAgICAgICAJCWlmKCB4VGFza0NoZWNrRm9yVGltZU91dCggJnhUaW1lT3V0LCAmeFRpY2tzVG9XYWl0ICkgPT0gcGRGQUxTRSApDQpCRkQwMTI0OCAgMDAyODMwN0UgICBBRERJVSBWMSwgUzgsIDQwDQpCRkQwMTI0QyAgMDA0MDMwNUUgICBBRERJVSBWMCwgUzgsIDY0DQpCRkQwMTI1MCAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDEyNTIgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAxMjU0ICAxRkY2NzdFOCAgIEpBTFMgeFRhc2tDaGVja0ZvclRpbWVPdXQNCkJGRDAxMjU2ICAwQzAwMUZGNiAgIExCIFJBLCAzMDcyKFM2KQ0KQkZEMDEyNTggICAgICAwQzAwICAgTk9QDQpCRkQwMTI1QSAgMDA0QTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMTJGMg0KMTUwNDogICAgICAgICAgICAgICAgCQl7DQoxNTA1OiAgICAgICAgICAgICAgICAJCQlpZiggcHJ2SXNRdWV1ZUVtcHR5KCBweFF1ZXVlICkgIT0gcGRGQUxTRSApDQpCRkQwMTI1RSAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwMTI2MiAgNDlEMDc3RTggICBKQUxTIHBydklzUXVldWVFbXB0eQ0KQkZEMDEyNjQgICAgICA0OUQwICAgTFcgVDYsIDY0KFNQKQ0KQkZEMDEyNjYgICAgICAwQzAwICAgTk9QDQpCRkQwMTI2OCAgMDAzOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTJERQ0KMTUwNjogICAgICAgICAgICAgICAgCQkJew0KMTUwNzogICAgICAgICAgICAgICAgCQkJCXRyYWNlQkxPQ0tJTkdfT05fUVVFVUVfUkVDRUlWRSggcHhRdWV1ZSApOw0KMTUwODogICAgICAgICAgICAgICAgDQoxNTA5OiAgICAgICAgICAgICAgICAJCQkJI2lmICggY29uZmlnVVNFX01VVEVYRVMgPT0gMSApDQoxNTEwOiAgICAgICAgICAgICAgICAJCQkJew0KMTUxMTogICAgICAgICAgICAgICAgCQkJCQlpZiggcHhRdWV1ZS0+dXhRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9JU19NVVRFWCApDQpCRkQwMTI2QyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTI3MCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAxMjcyICAwMDBENDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMjkwDQoxNTEyOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE1MTM6ICAgICAgICAgICAgICAgIAkJCQkJCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDEyNzYgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDAxMjc4ICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDEyN0EgICAgICAwQzAwICAgTk9QDQoxNTE0OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxNTE1OiAgICAgICAgICAgICAgICAJCQkJCQkJdlRhc2tQcmlvcml0eUluaGVyaXQoICggdm9pZCAqICkgcHhRdWV1ZS0+cHhNdXRleEhvbGRlciApOw0KQkZEMDEyN0MgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDEyODAgICAgICA2OTIxICAgTFcgVjAsIDQoVjApDQpCRkQwMTI4MiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDEyODQgIDFBOTA3N0U4ICAgSkFMUyB2VGFza1ByaW9yaXR5SW5oZXJpdA0KQkZEMDEyODYgIDBDMDAxQTkwICAgU0IgUzQsIDMwNzIoUzApDQpCRkQwMTI4OCAgICAgIDBDMDAgICBOT1ANCjE1MTY6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE1MTc6ICAgICAgICAgICAgICAgIAkJCQkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMTI4QSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMTI4QyAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMkE5MA0KQkZEMDEyOEUgICAgICAwQzAwICAgTk9QDQoxNTE4OiAgICAgICAgICAgICAgICAJCQkJCX0NCjE1MTk6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTUyMDogICAgICAgICAgICAgICAgCQkJCQl7DQoxNTIxOiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNTIyOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE1MjM6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNTI0OiAgICAgICAgICAgICAgICAJCQkJI2VuZGlmDQoxNTI1OiAgICAgICAgICAgICAgICANCjE1MjY6ICAgICAgICAgICAgICAgIAkJCQl2VGFza1BsYWNlT25FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSwgeFRpY2tzVG9XYWl0ICk7DQpCRkQwMTI5MCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMTI5NCAgMDAyNDMwNjIgICBBRERJVSBWMSwgVjAsIDM2DQpCRkQwMTI5OCAgMDA0MEZDNUUgICBMVyBWMCwgNjQoUzgpDQpCRkQwMTI5QyAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDEyOUUgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAxMkEwICAyRjNBNzdFOCAgIEpBTFMgdlRhc2tQbGFjZU9uRXZlbnRMaXN0DQpCRkQwMTJBMiAgICAgIDJGM0EgICBBTkRJIEEyLCBWMSwgMHgyMA0KQkZEMDEyQTQgICAgICAwQzAwICAgTk9QDQoxNTI3OiAgICAgICAgICAgICAgICAJCQkJcHJ2VW5sb2NrUXVldWUoIHB4UXVldWUgKTsNCkJGRDAxMkE2ICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDAxMkFBICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUNCkJGRDAxMkFDICAwQzAwMURFRSAgIExCIFQ3LCAzMDcyKFQ2KQ0KQkZEMDEyQUUgICAgICAwQzAwICAgTk9QDQoxNTI4OiAgICAgICAgICAgICAgICAJCQkJaWYoIHhUYXNrUmVzdW1lQWxsKCkgPT0gcGRGQUxTRSApDQpCRkQwMTJCMCAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsDQpCRkQwMTJCMiAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpDQpCRkQwMTJCNCAgICAgIDBDMDAgICBOT1ANCkJGRDAxMkI2ICBGRjEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMEUwDQpCRkQwMTJCOCAgNzdFOEZGMTMgICBMVyBUOCwgMzA2OTYoUzMpDQoxNTI5OiAgICAgICAgICAgICAgICAJCQkJew0KMTUzMDogICAgICAgICAgICAgICAgCQkJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KQkZEMDEyQkEgIDRFMTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQ0KQkZEMDEyQkMgICAgICA0RTE2ICAgQURESVUgUzAsIFMwLCAtNQ0KQkZEMDEyQkUgICAgICAwQzAwICAgTk9QDQpCRkQwMTJDMCAgMDAyNEY4NUUgICBTVyBWMCwgMzYoUzgpDQpCRkQwMTJDNCAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwMTJDOCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDAxMkNDICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkNCkJGRDAxMkQwICAwMDI0RkM5RSAgIExXIEEwLCAzNihTOCkNCkJGRDAxMkQ0ICA0RTI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBDYXVzZQ0KQkZEMDEyRDYgICAgICA0RTI2ICAgQURESVUgUzEsIFMxLCAzDQpCRkQwMTJEOCAgICAgIDBDMDAgICBOT1ANCjE1MzE6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNTMyOiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTUzMzogICAgICAgICAgICAgICAgCQkJCXsNCjE1MzQ6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTUzNTogICAgICAgICAgICAgICAgCQkJCX0NCjE1MzY6ICAgICAgICAgICAgICAgIAkJCX0NCjE1Mzc6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjE1Mzg6ICAgICAgICAgICAgICAgIAkJCXsNCjE1Mzk6ICAgICAgICAgICAgICAgIAkJCQkvKiBUcnkgYWdhaW4uICovDQoxNTQwOiAgICAgICAgICAgICAgICAJCQkJcHJ2VW5sb2NrUXVldWUoIHB4UXVldWUgKTsNCkJGRDAxMkRFICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDAxMkUyICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUNCkJGRDAxMkU0ICAwQzAwMURFRSAgIExCIFQ3LCAzMDcyKFQ2KQ0KQkZEMDEyRTYgICAgICAwQzAwICAgTk9QDQoxNTQxOiAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgeFRhc2tSZXN1bWVBbGwoKTsNCkJGRDAxMkU4ICAxNThFNzdFOCAgIEpBTFMgeFRhc2tSZXN1bWVBbGwNCkJGRDAxMkVBICAwQzAwMTU4RSAgIExCVSBUNCwgMzA3MihUNikNCkJGRDAxMkVDICAgICAgMEMwMCAgIE5PUA0KMTU0MjogICAgICAgICAgICAgICAgCQkJfQ0KMTU0MzogICAgICAgICAgICAgICAgCQl9DQoxNTQ0OiAgICAgICAgICAgICAgICAJCWVsc2UNCjE1NDU6ICAgICAgICAgICAgICAgIAkJew0KMTU0NjogICAgICAgICAgICAgICAgCQkJcHJ2VW5sb2NrUXVldWUoIHB4UXVldWUgKTsNCkJGRDAxMkYyICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDAxMkY2ICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUNCkJGRDAxMkY4ICAwQzAwMURFRSAgIExCIFQ3LCAzMDcyKFQ2KQ0KQkZEMDEyRkEgICAgICAwQzAwICAgTk9QDQoxNTQ3OiAgICAgICAgICAgICAgICAJCQkoIHZvaWQgKSB4VGFza1Jlc3VtZUFsbCgpOw0KQkZEMDEyRkMgIDE1OEU3N0U4ICAgSkFMUyB4VGFza1Jlc3VtZUFsbA0KQkZEMDEyRkUgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQ0KQkZEMDEzMDAgICAgICAwQzAwICAgTk9QDQoxNTQ4OiAgICAgICAgICAgICAgICAJCQl0cmFjZVFVRVVFX1JFQ0VJVkVfRkFJTEVEKCBweFF1ZXVlICk7DQoxNTQ5OiAgICAgICAgICAgICAgICAJCQlyZXR1cm4gZXJyUVVFVUVfRU1QVFk7DQpCRkQwMTMwMiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQoxNTUwOiAgICAgICAgICAgICAgICAJCX0NCjE1NTE6ICAgICAgICAgICAgICAgIAl9DQpCRkQwMTBFMCAgICAgIDBDMDAgICBOT1ANCkJGRDAxMkRBICAgICAgQ0YwMyAgIEIgMHhCRkQwMTBFMg0KQkZEMDEyREMgICAgICAwQzAwICAgTk9QDQpCRkQwMTJFRSAgICAgIENFRjkgICBCIDB4QkZEMDEwRTINCkJGRDAxMkYwICAgICAgMEMwMCAgIE5PUA0KMTU1MjogICAgICAgICAgICAgICAgfQ0KQkZEMDEzMDQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAxMzA2ICAgICAgNEJFRCAgIExXIFJBLCA1MihTUCkNCkJGRDAxMzA4ICAgICAgNEJDQyAgIExXIFM4LCA0OChTUCkNCkJGRDAxMzBBICAgICAgNEMxRCAgIEFERElVIFNQLCBTUCwgNTYNCkJGRDAxMzBDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAxMzBFICAgICAgMEMwMCAgIE5PUA0KMTU1MzogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNTU0OiAgICAgICAgICAgICAgICANCjE1NTU6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFF1ZXVlUmVjZWl2ZUZyb21JU1IoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCB2b2lkICogY29uc3QgcHZCdWZmZXIsIEJhc2VUeXBlX3QgKiBjb25zdCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICkNCjE1NTY6ICAgICAgICAgICAgICAgIHsNCkJGRDAzQUM4ICAgICAgNEZFRCAgIEFERElVIFNQLCBTUCwgLTQwDQpCRkQwM0FDQSAgICAgIENCRTkgICBTVyBSQSwgMzYoU1ApDQpCRkQwM0FDQyAgICAgIENCQzggICBTVyBTOCwgMzIoU1ApDQpCRkQwM0FDRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDNBRDAgIDAwMjhGODlFICAgU1cgQTAsIDQwKFM4KQ0KQkZEMDNBRDQgIDAwMkNGOEJFICAgU1cgQTEsIDQ0KFM4KQ0KQkZEMDNBRDggIDAwMzBGOERFICAgU1cgQTIsIDQ4KFM4KQ0KMTU1NzogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KMTU1ODogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhTYXZlZEludGVycnVwdFN0YXR1czsNCjE1NTk6ICAgICAgICAgICAgICAgIFF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlID0gKCBRdWV1ZV90ICogKSB4UXVldWU7DQpCRkQwM0FEQyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwM0FFMCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoxNTYwOiAgICAgICAgICAgICAgICANCjE1NjE6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHB4UXVldWUgKTsNCkJGRDAzQUU0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAzQUU4ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzQUZFDQpCRkQwM0FFQyAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDNBRUUgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDNBRjAgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDAzQUYyICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDAzQUY0ICAwNjE5MzBBMCAgIEFERElVIEExLCBaRVJPLCAxNTYxDQpCRkQwM0FGNiAgICAgIDA2MTkgICBTVUJVIEEwLCBBMCwgUzENCkJGRDAzQUY4ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDNBRkEgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAzQUZDICAgICAgMEMwMCAgIE5PUA0KMTU2MjogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggISggKCBwdkJ1ZmZlciA9PSBOVUxMICkgJiYgKCBweFF1ZXVlLT51eEl0ZW1TaXplICE9ICggVUJhc2VUeXBlX3QgKSAwVSApICkgKTsNCkJGRDAzQUZFICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAzQjAyICAwMDA2NDBBMiAgIEJORVpDIFYwLCAweEJGRDAzQjEyDQpCRkQwM0IwNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwM0IwQSAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApDQpCRkQwM0IwRSAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwM0IxOA0KQkZEMDNCMTIgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAzQjE0ICAgICAgQ0MwMiAgIEIgMHhCRkQwM0IxQQ0KQkZEMDNCMTYgICAgICAwQzAwICAgTk9QDQpCRkQwM0IxOCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQpCRkQwM0IxQSAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwM0IzMA0KQkZEMDNCMUUgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAzQjIwICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAzQjIyICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwM0IyNCAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwM0IyNiAgMDYxQTMwQTAgICBBRERJVSBBMSwgWkVSTywgMTU2Mg0KQkZEMDNCMjggICAgICAwNjFBICAgQUREVSBBMCwgQTEsIFMxDQpCRkQwM0IyQSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAzQjJDICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwM0IyRSAgICAgIDBDMDAgICBOT1ANCjE1NjM6ICAgICAgICAgICAgICAgIA0KMTU2NDogICAgICAgICAgICAgICAgCS8qIFJUT1MgcG9ydHMgdGhhdCBzdXBwb3J0IGludGVycnVwdCBuZXN0aW5nIGhhdmUgdGhlIGNvbmNlcHQgb2YgYSBtYXhpbXVtDQoxNTY1OiAgICAgICAgICAgICAgICAJc3lzdGVtIGNhbGwgKG9yIG1heGltdW0gQVBJIGNhbGwpIGludGVycnVwdCBwcmlvcml0eS4gIEludGVycnVwdHMgdGhhdCBhcmUNCjE1NjY6ICAgICAgICAgICAgICAgIAlhYm92ZSB0aGUgbWF4aW11bSBzeXN0ZW0gY2FsbCBwcmlvcml0eSBhcmUga2VwdCBwZXJtYW5lbnRseSBlbmFibGVkLCBldmVuDQoxNTY3OiAgICAgICAgICAgICAgICAJd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvDQoxNTY4OiAgICAgICAgICAgICAgICAJRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucy4gIElmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaA0KMTU2OTogICAgICAgICAgICAgICAgCXRoZW4gcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIHdpbGwgcmVzdWx0IGluIGFuIGFzc2VydGlvbg0KMTU3MDogICAgICAgICAgICAgICAgCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGJlZW4NCjE1NzE6ICAgICAgICAgICAgICAgIAlhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlIHRoZSBjb25maWd1cmVkIG1heGltdW0gc3lzdGVtIGNhbGwgcHJpb3JpdHkuDQoxNTcyOiAgICAgICAgICAgICAgICAJT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0cw0KMTU3MzogICAgICAgICAgICAgICAgCXRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYXQgb3IgKGxvZ2ljYWxseSkgYmVsb3cgdGhlIG1heGltdW0NCjE1NzQ6ICAgICAgICAgICAgICAgIAlzeXN0ZW0gY2FsbAlpbnRlcnJ1cHQgcHJpb3JpdHkuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQNCjE1NzU6ICAgICAgICAgICAgICAgIAlzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4NCjE1NzY6ICAgICAgICAgICAgICAgIAlNb3JlIGluZm9ybWF0aW9uIChhbGJlaXQgQ29ydGV4LU0gc3BlY2lmaWMpIGlzIHByb3ZpZGVkIG9uIHRoZSBmb2xsb3dpbmcNCjE1Nzc6ICAgICAgICAgICAgICAgIAlsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQoxNTc4OiAgICAgICAgICAgICAgICAJcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpOw0KMTU3OTogICAgICAgICAgICAgICAgDQoxNTgwOiAgICAgICAgICAgICAgICAJdXhTYXZlZEludGVycnVwdFN0YXR1cyA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDAzQjMwICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDAzQjM0ICAgICAgMEMwMCAgIE5PUA0KQkZEMDNCMzYgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMTU4MTogICAgICAgICAgICAgICAgCXsNCjE1ODI6ICAgICAgICAgICAgICAgIAkJLyogQ2Fubm90IGJsb2NrIGluIGFuIElTUiwgc28gY2hlY2sgdGhlcmUgaXMgZGF0YSBhdmFpbGFibGUuICovDQoxNTgzOiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA+ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAzQjNBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAzQjNFICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkNCkJGRDAzQjQwICAwMDNDNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzQkJDDQoxNTg0OiAgICAgICAgICAgICAgICAJCXsNCjE1ODU6ICAgICAgICAgICAgICAgIAkJCXRyYWNlUVVFVUVfUkVDRUlWRV9GUk9NX0lTUiggcHhRdWV1ZSApOw0KMTU4NjogICAgICAgICAgICAgICAgDQoxNTg3OiAgICAgICAgICAgICAgICAJCQlwcnZDb3B5RGF0YUZyb21RdWV1ZSggcHhRdWV1ZSwgcHZCdWZmZXIgKTsNCkJGRDAzQjQ0ICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDAzQjQ4ICAwMDJDRkNCRSAgIExXIEExLCA0NChTOCkNCkJGRDAzQjRDICAzNjdBNzdFOCAgIEpBTFMgcHJ2Q29weURhdGFGcm9tUXVldWUNCkJGRDAzQjRFICAwQzAwMzY3QSAgIExIVSBTMywgMzA3MihLMCkNCkJGRDAzQjUwICAgICAgMEMwMCAgIE5PUA0KMTU4ODogICAgICAgICAgICAgICAgCQkJLS0oIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nICk7DQpCRkQwM0I1MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwM0I1NiAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApDQpCRkQwM0I1OCAgICAgIDZEQUUgICBBRERJVSBWMSwgVjAsIC0xDQpCRkQwM0I1QSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwM0I1RSAgICAgIEU5QUUgICBTVyBWMSwgNTYoVjApDQoxNTg5OiAgICAgICAgICAgICAgICANCjE1OTA6ICAgICAgICAgICAgICAgIAkJCS8qIElmIHRoZSBxdWV1ZSBpcyBsb2NrZWQgdGhlIGV2ZW50IGxpc3Qgd2lsbCBub3QgYmUgbW9kaWZpZWQuDQoxNTkxOiAgICAgICAgICAgICAgICAJCQlJbnN0ZWFkIHVwZGF0ZSB0aGUgbG9jayBjb3VudCBzbyB0aGUgdGFzayB0aGF0IHVubG9ja3MgdGhlIHF1ZXVlDQoxNTkyOiAgICAgICAgICAgICAgICAJCQl3aWxsIGtub3cgdGhhdCBhbiBJU1IgaGFzIHJlbW92ZWQgZGF0YSB3aGlsZSB0aGUgcXVldWUgd2FzDQoxNTkzOiAgICAgICAgICAgICAgICAJCQlsb2NrZWQuICovDQoxNTk0OiAgICAgICAgICAgICAgICAJCQlpZiggcHhRdWV1ZS0+eFJ4TG9jayA9PSBxdWV1ZVVOTE9DS0VEICkNCkJGRDAzQjYwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAzQjY0ICAwMDQ0RkM2MiAgIExXIFYxLCA2OChWMCkNCkJGRDAzQjY4ICAgICAgRUQ3RiAgIExJIFYwLCAtMQ0KQkZEMDNCNkEgIDAwMTlCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwM0JBMA0KQkZEMDNCNkMgIDBDMDAwMDE5ICAgU0xMIFpFUk8sIFQ5LCAxDQpCRkQwM0I2RSAgICAgIDBDMDAgICBOT1ANCjE1OTU6ICAgICAgICAgICAgICAgIAkJCXsNCjE1OTY6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkRkFMU0UgKQ0KQkZEMDNCNzAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDNCNzQgICAgICA2OTI0ICAgTFcgVjAsIDE2KFYwKQ0KQkZEMDNCNzYgIDAwMUM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNCQjINCjE1OTc6ICAgICAgICAgICAgICAgIAkJCQl7DQoxNTk4OiAgICAgICAgICAgICAgICAJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApICE9IHBkRkFMU0UgKQ0KQkZEMDNCN0EgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDNCN0UgICAgICA2RDI4ICAgQURESVUgVjAsIFYwLCAxNg0KQkZEMDNCODAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzQjgyICAyMkJDNzdFOCAgIEpBTFMgeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0DQpCRkQwM0I4NCAgMEMwMDIyQkMgICBMV0MyIFM1LCAzMDcyKEdQKQ0KQkZEMDNCODYgICAgICAwQzAwICAgTk9QDQpCRkQwM0I4OCAgMDAxMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0JCMg0KMTU5OTogICAgICAgICAgICAgICAgCQkJCQl7DQoxNjAwOiAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgdGFzayB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIHVzIHNvDQoxNjAxOiAgICAgICAgICAgICAgICAJCQkJCQlmb3JjZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KMTYwMjogICAgICAgICAgICAgICAgCQkJCQkJaWYoIHB4SGlnaGVyUHJpb3JpdHlUYXNrV29rZW4gIT0gTlVMTCApDQpCRkQwM0I4QyAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwM0I5MCAgMDAwRjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0JCMg0KMTYwMzogICAgICAgICAgICAgICAgCQkJCQkJew0KMTYwNDogICAgICAgICAgICAgICAgCQkJCQkJCSpweEhpZ2hlclByaW9yaXR5VGFza1dva2VuID0gcGRUUlVFOw0KQkZEMDNCOTQgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDNCOTggICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDAzQjlBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KQkZEMDNCOUMgICAgICBDQzBBICAgQiAweEJGRDAzQkIyDQpCRkQwM0I5RSAgICAgIDBDMDAgICBOT1ANCjE2MDU6ICAgICAgICAgICAgICAgIAkJCQkJCX0NCjE2MDY6ICAgICAgICAgICAgICAgIAkJCQkJCWVsc2UNCjE2MDc6ICAgICAgICAgICAgICAgIAkJCQkJCXsNCjE2MDg6ICAgICAgICAgICAgICAgIAkJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNjA5OiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxNjEwOiAgICAgICAgICAgICAgICAJCQkJCX0NCjE2MTE6ICAgICAgICAgICAgICAgIAkJCQkJZWxzZQ0KMTYxMjogICAgICAgICAgICAgICAgCQkJCQl7DQoxNjEzOiAgICAgICAgICAgICAgICAJCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxNjE0OiAgICAgICAgICAgICAgICAJCQkJCX0NCjE2MTU6ICAgICAgICAgICAgICAgIAkJCQl9DQoxNjE2OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTYxNzogICAgICAgICAgICAgICAgCQkJCXsNCjE2MTg6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTYxOTogICAgICAgICAgICAgICAgCQkJCX0NCjE2MjA6ICAgICAgICAgICAgICAgIAkJCX0NCjE2MjE6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjE2MjI6ICAgICAgICAgICAgICAgIAkJCXsNCjE2MjM6ICAgICAgICAgICAgICAgIAkJCQkvKiBJbmNyZW1lbnQgdGhlIGxvY2sgY291bnQgc28gdGhlIHRhc2sgdGhhdCB1bmxvY2tzIHRoZSBxdWV1ZQ0KMTYyNDogICAgICAgICAgICAgICAgCQkJCWtub3dzIHRoYXQgZGF0YSB3YXMgcmVtb3ZlZCB3aGlsZSBpdCB3YXMgbG9ja2VkLiAqLw0KMTYyNTogICAgICAgICAgICAgICAgCQkJCSsrKCBweFF1ZXVlLT54UnhMb2NrICk7DQpCRkQwM0JBMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwM0JBNCAgMDA0NEZDNDIgICBMVyBWMCwgNjgoVjApDQpCRkQwM0JBOCAgICAgIDZEQTAgICBBRERJVSBWMSwgVjAsIDENCkJGRDAzQkFBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAzQkFFICAwMDQ0Rjg2MiAgIFNXIFYxLCA2OChWMCkNCjE2MjY6ICAgICAgICAgICAgICAgIAkJCX0NCjE2Mjc6ICAgICAgICAgICAgICAgIA0KMTYyODogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkUEFTUzsNCkJGRDAzQkIyICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwM0JCNCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwM0JCOCAgICAgIENDMDMgICBCIDB4QkZEMDNCQzANCkJGRDAzQkJBICAgICAgMEMwMCAgIE5PUA0KMTYyOTogICAgICAgICAgICAgICAgCQl9DQoxNjMwOiAgICAgICAgICAgICAgICAJCWVsc2UNCjE2MzE6ICAgICAgICAgICAgICAgIAkJew0KMTYzMjogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDAzQkJDICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMTYzMzogICAgICAgICAgICAgICAgCQkJdHJhY2VRVUVVRV9SRUNFSVZFX0ZST01fSVNSX0ZBSUxFRCggcHhRdWV1ZSApOw0KMTYzNDogICAgICAgICAgICAgICAgCQl9DQoxNjM1OiAgICAgICAgICAgICAgICAJfQ0KMTYzNjogICAgICAgICAgICAgICAgCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDNCQzAgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDNCQzQgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDAzQkM2ICAgICAgNEQ1RSAgIEFERElVIFQyLCBUMiwgLTENCkJGRDAzQkM4ICAgICAgMEMwMCAgIE5PUA0KMTYzNzogICAgICAgICAgICAgICAgDQoxNjM4OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwM0JDQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoxNjM5OiAgICAgICAgICAgICAgICB9DQpCRkQwM0JDRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDNCRDAgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQ0KQkZEMDNCRDIgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQ0KQkZEMDNCRDQgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MA0KQkZEMDNCRDYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDNCRDggICAgICAwQzAwICAgTk9QDQoxNjQwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE2NDE6ICAgICAgICAgICAgICAgIA0KMTY0MjogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UXVldWVQZWVrRnJvbUlTUiggUXVldWVIYW5kbGVfdCB4UXVldWUsICB2b2lkICogY29uc3QgcHZCdWZmZXIgKQ0KMTY0MzogICAgICAgICAgICAgICAgew0KQkZEMDQ4MjQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDA0ODI2ICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkNCkJGRDA0ODI4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkNCkJGRDA0ODJBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNDgyQyAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpDQpCRkQwNDgzMCAgMDAyQ0Y4QkUgICBTVyBBMSwgNDQoUzgpDQoxNjQ0OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQoxNjQ1OiAgICAgICAgICAgICAgICBVQmFzZVR5cGVfdCB1eFNhdmVkSW50ZXJydXB0U3RhdHVzOw0KMTY0NjogICAgICAgICAgICAgICAgaW50OF90ICpwY09yaWdpbmFsUmVhZFBvc2l0aW9uOw0KMTY0NzogICAgICAgICAgICAgICAgUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZTsNCkJGRDA0ODM0ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDA0ODM4ICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjE2NDg6ICAgICAgICAgICAgICAgIA0KMTY0OTogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KQkZEMDQ4M0MgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQ4NDAgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQ4NTYNCkJGRDA0ODQ0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNDg0NiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNDg0OCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDQ4NEEgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDQ4NEMgIDA2NzEzMEEwICAgQURESVUgQTEsIFpFUk8sIDE2NDkNCkJGRDA0ODRFICAgICAgMDY3MSAgIFNVQlUgQTAsIFMwLCBBMw0KQkZEMDQ4NTAgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwNDg1MiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDQ4NTQgICAgICAwQzAwICAgTk9QDQoxNjUwOiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCAhKCAoIHB2QnVmZmVyID09IE5VTEwgKSAmJiAoIHB4UXVldWUtPnV4SXRlbVNpemUgIT0gKCBVQmFzZVR5cGVfdCApIDBVICkgKSApOw0KQkZEMDQ4NTYgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQ0KQkZEMDQ4NUEgIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDQ4NkENCkJGRDA0ODVFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0ODYyICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkNCkJGRDA0ODY2ICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA0ODcwDQpCRkQwNDg2QSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDQ4NkMgICAgICBDQzAyICAgQiAweEJGRDA0ODcyDQpCRkQwNDg2RSAgICAgIDBDMDAgICBOT1ANCkJGRDA0ODcwICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8NCkJGRDA0ODcyICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA0ODg4DQpCRkQwNDg3NiAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDQ4NzggIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDQ4N0EgIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDA0ODdDICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDA0ODdFICAwNjcyMzBBMCAgIEFERElVIEExLCBaRVJPLCAxNjUwDQpCRkQwNDg4MCAgICAgIDA2NzIgICBBRERVIEEwLCBTMSwgQTMNCkJGRDA0ODgyICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDQ4ODQgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0ODg2ICAgICAgMEMwMCAgIE5PUA0KMTY1MTogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZS0+dXhJdGVtU2l6ZSAhPSAwICk7IC8qIENhbid0IHBlZWsgYSBzZW1hcGhvcmUuICovDQpCRkQwNDg4OCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDg4QyAgMDA0MEZDNDIgICBMVyBWMCwgNjQoVjApDQpCRkQwNDg5MCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDhBNg0KQkZEMDQ4OTQgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0ODk2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA0ODk4ICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwNDg5QSAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwNDg5QyAgMDY3MzMwQTAgICBBRERJVSBBMSwgWkVSTywgMTY1MQ0KQkZEMDQ4OUUgICAgICAwNjczICAgU1VCVSBBMCwgUzEsIEEzDQpCRkQwNDhBMCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA0OEEyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNDhBNCAgICAgIDBDMDAgICBOT1ANCjE2NTI6ICAgICAgICAgICAgICAgIA0KMTY1MzogICAgICAgICAgICAgICAgCS8qIFJUT1MgcG9ydHMgdGhhdCBzdXBwb3J0IGludGVycnVwdCBuZXN0aW5nIGhhdmUgdGhlIGNvbmNlcHQgb2YgYSBtYXhpbXVtDQoxNjU0OiAgICAgICAgICAgICAgICAJc3lzdGVtIGNhbGwgKG9yIG1heGltdW0gQVBJIGNhbGwpIGludGVycnVwdCBwcmlvcml0eS4gIEludGVycnVwdHMgdGhhdCBhcmUNCjE2NTU6ICAgICAgICAgICAgICAgIAlhYm92ZSB0aGUgbWF4aW11bSBzeXN0ZW0gY2FsbCBwcmlvcml0eSBhcmUga2VwdCBwZXJtYW5lbnRseSBlbmFibGVkLCBldmVuDQoxNjU2OiAgICAgICAgICAgICAgICAJd2hlbiB0aGUgUlRPUyBrZXJuZWwgaXMgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBidXQgY2Fubm90IG1ha2UgYW55IGNhbGxzIHRvDQoxNjU3OiAgICAgICAgICAgICAgICAJRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucy4gIElmIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaA0KMTY1ODogICAgICAgICAgICAgICAgCXRoZW4gcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpIHdpbGwgcmVzdWx0IGluIGFuIGFzc2VydGlvbg0KMTY1OTogICAgICAgICAgICAgICAgCWZhaWx1cmUgaWYgYSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGJlZW4NCjE2NjA6ICAgICAgICAgICAgICAgIAlhc3NpZ25lZCBhIHByaW9yaXR5IGFib3ZlIHRoZSBjb25maWd1cmVkIG1heGltdW0gc3lzdGVtIGNhbGwgcHJpb3JpdHkuDQoxNjYxOiAgICAgICAgICAgICAgICAJT25seSBGcmVlUlRPUyBmdW5jdGlvbnMgdGhhdCBlbmQgaW4gRnJvbUlTUiBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0cw0KMTY2MjogICAgICAgICAgICAgICAgCXRoYXQgaGF2ZSBiZWVuIGFzc2lnbmVkIGEgcHJpb3JpdHkgYXQgb3IgKGxvZ2ljYWxseSkgYmVsb3cgdGhlIG1heGltdW0NCjE2NjM6ICAgICAgICAgICAgICAgIAlzeXN0ZW0gY2FsbAlpbnRlcnJ1cHQgcHJpb3JpdHkuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQNCjE2NjQ6ICAgICAgICAgICAgICAgIAlzYWZlIEFQSSB0byBlbnN1cmUgaW50ZXJydXB0IGVudHJ5IGlzIGFzIGZhc3QgYW5kIGFzIHNpbXBsZSBhcyBwb3NzaWJsZS4NCjE2NjU6ICAgICAgICAgICAgICAgIAlNb3JlIGluZm9ybWF0aW9uIChhbGJlaXQgQ29ydGV4LU0gc3BlY2lmaWMpIGlzIHByb3ZpZGVkIG9uIHRoZSBmb2xsb3dpbmcNCjE2NjY6ICAgICAgICAgICAgICAgIAlsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9SVE9TLUNvcnRleC1NMy1NNC5odG1sICovDQoxNjY3OiAgICAgICAgICAgICAgICAJcG9ydEFTU0VSVF9JRl9JTlRFUlJVUFRfUFJJT1JJVFlfSU5WQUxJRCgpOw0KMTY2ODogICAgICAgICAgICAgICAgDQoxNjY5OiAgICAgICAgICAgICAgICAJdXhTYXZlZEludGVycnVwdFN0YXR1cyA9IHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKTsNCkJGRDA0OEE2ICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDA0OEFBICAgICAgMEMwMCAgIE5PUA0KQkZEMDQ4QUMgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMTY3MDogICAgICAgICAgICAgICAgCXsNCjE2NzE6ICAgICAgICAgICAgICAgIAkJLyogQ2Fubm90IGJsb2NrIGluIGFuIElTUiwgc28gY2hlY2sgdGhlcmUgaXMgZGF0YSBhdmFpbGFibGUuICovDQoxNjcyOiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA+ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDA0OEIwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0OEI0ICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkNCkJGRDA0OEI2ICAwMDE2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA0OEU2DQoxNjczOiAgICAgICAgICAgICAgICAJCXsNCjE2NzQ6ICAgICAgICAgICAgICAgIAkJCXRyYWNlUVVFVUVfUEVFS19GUk9NX0lTUiggcHhRdWV1ZSApOw0KMTY3NTogICAgICAgICAgICAgICAgDQoxNjc2OiAgICAgICAgICAgICAgICAJCQkvKiBSZW1lbWJlciB0aGUgcmVhZCBwb3NpdGlvbiBzbyBpdCBjYW4gYmUgcmVzZXQgYXMgbm90aGluZyBpcw0KMTY3NzogICAgICAgICAgICAgICAgCQkJYWN0dWFsbHkgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4gKi8NCjE2Nzg6ICAgICAgICAgICAgICAgIAkJCXBjT3JpZ2luYWxSZWFkUG9zaXRpb24gPSBweFF1ZXVlLT51LnBjUmVhZEZyb207DQpCRkQwNDhCQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDhCRSAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApDQpCRkQwNDhDMCAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQoxNjc5OiAgICAgICAgICAgICAgICAJCQlwcnZDb3B5RGF0YUZyb21RdWV1ZSggcHhRdWV1ZSwgcHZCdWZmZXIgKTsNCkJGRDA0OEM0ICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDA0OEM4ICAwMDJDRkNCRSAgIExXIEExLCA0NChTOCkNCkJGRDA0OENDICAzNjdBNzdFOCAgIEpBTFMgcHJ2Q29weURhdGFGcm9tUXVldWUNCkJGRDA0OENFICAwQzAwMzY3QSAgIExIVSBTMywgMzA3MihLMCkNCkJGRDA0OEQwICAgICAgMEMwMCAgIE5PUA0KMTY4MDogICAgICAgICAgICAgICAgCQkJcHhRdWV1ZS0+dS5wY1JlYWRGcm9tID0gcGNPcmlnaW5hbFJlYWRQb3NpdGlvbjsNCkJGRDA0OEQyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0OEQ2ICAwMDFDRkM3RSAgIExXIFYxLCAyOChTOCkNCkJGRDA0OERBICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkNCjE2ODE6ICAgICAgICAgICAgICAgIA0KMTY4MjogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkUEFTUzsNCkJGRDA0OERDICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwNDhERSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwNDhFMiAgICAgIENDMDMgICBCIDB4QkZEMDQ4RUENCkJGRDA0OEU0ICAgICAgMEMwMCAgIE5PUA0KMTY4MzogICAgICAgICAgICAgICAgCQl9DQoxNjg0OiAgICAgICAgICAgICAgICAJCWVsc2UNCjE2ODU6ICAgICAgICAgICAgICAgIAkJew0KMTY4NjogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDA0OEU2ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMTY4NzogICAgICAgICAgICAgICAgCQkJdHJhY2VRVUVVRV9QRUVLX0ZST01fSVNSX0ZBSUxFRCggcHhRdWV1ZSApOw0KMTY4ODogICAgICAgICAgICAgICAgCQl9DQoxNjg5OiAgICAgICAgICAgICAgICAJfQ0KMTY5MDogICAgICAgICAgICAgICAgCXBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZEludGVycnVwdFN0YXR1cyApOw0KQkZEMDQ4RUEgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDQ4RUUgIDRENUU3N0U4ICAgSkFMUyB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDA0OEYwICAgICAgNEQ1RSAgIEFERElVIFQyLCBUMiwgLTENCkJGRDA0OEYyICAgICAgMEMwMCAgIE5PUA0KMTY5MTogICAgICAgICAgICAgICAgDQoxNjkyOiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwNDhGNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoxNjkzOiAgICAgICAgICAgICAgICB9DQpCRkQwNDhGOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDQ4RkEgICAgICA0QkU5ICAgTFcgUkEsIDM2KFNQKQ0KQkZEMDQ4RkMgICAgICA0QkM4ICAgTFcgUzgsIDMyKFNQKQ0KQkZEMDQ4RkUgICAgICA0QzE1ICAgQURESVUgU1AsIFNQLCA0MA0KQkZEMDQ5MDAgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDQ5MDIgICAgICAwQzAwICAgTk9QDQoxNjk0OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE2OTU6ICAgICAgICAgICAgICAgIA0KMTY5NjogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhRdWV1ZU1lc3NhZ2VzV2FpdGluZyggY29uc3QgUXVldWVIYW5kbGVfdCB4UXVldWUgKQ0KMTY5NzogICAgICAgICAgICAgICAgew0KQkZEMDhCMkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4QjJFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4QjMwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4QjMyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOEIzNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQoxNjk4OiAgICAgICAgICAgICAgICBVQmFzZVR5cGVfdCB1eFJldHVybjsNCjE2OTk6ICAgICAgICAgICAgICAgIA0KMTcwMDogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeFF1ZXVlICk7DQpCRkQwOEIzOCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwOEIzQyAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOEI1Mg0KQkZEMDhCNDAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA4QjQyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA4QjQ0ICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwOEI0NiAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwOEI0OCAgMDZBNDMwQTAgICBBRERJVSBBMSwgWkVSTywgMTcwMA0KQkZEMDhCNEEgICAgICAwNkE0ICAgQUREVSBBMSwgVjAsIFYwDQpCRkQwOEI0QyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA4QjRFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwOEI1MCAgICAgIDBDMDAgICBOT1ANCjE3MDE6ICAgICAgICAgICAgICAgIA0KMTcwMjogICAgICAgICAgICAgICAgCXRhc2tFTlRFUl9DUklUSUNBTCgpOw0KQkZEMDhCNTIgIDMzQjg3N0U4ICAgSkFMUyB2VGFza0VudGVyQ3JpdGljYWwNCkJGRDA4QjU0ICAwQzAwMzNCOCAgIEFERElVIFNQLCBUOCwgMzA3Mg0KQkZEMDhCNTYgICAgICAwQzAwICAgTk9QDQoxNzAzOiAgICAgICAgICAgICAgICAJew0KMTcwNDogICAgICAgICAgICAgICAgCQl1eFJldHVybiA9ICggKCBRdWV1ZV90ICogKSB4UXVldWUgKS0+dXhNZXNzYWdlc1dhaXRpbmc7DQpCRkQwOEI1OCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwOEI1QyAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApDQpCRkQwOEI1RSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxNzA1OiAgICAgICAgICAgICAgICAJfQ0KMTcwNjogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwOEI2MiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwOEI2NCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwQTM2OA0KQkZEMDhCNjYgICAgICAwQzAwICAgTk9QDQoxNzA3OiAgICAgICAgICAgICAgICANCjE3MDg6ICAgICAgICAgICAgICAgIAlyZXR1cm4gdXhSZXR1cm47DQpCRkQwOEI2OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoxNzA5OiAgICAgICAgICAgICAgICB9IC8qbGludCAhZTgxOCBQb2ludGVyIGNhbm5vdCBiZSBkZWNsYXJlZCBjb25zdCBhcyB4UXVldWUgaXMgYSB0eXBlZGVmIG5vdCBwb2ludGVyLiAqLw0KQkZEMDhCNkMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4QjZFICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA4QjcwICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA4QjcyICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA4Qjc0ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4Qjc2ICAgICAgMEMwMCAgIE5PUA0KMTcxMDogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNzExOiAgICAgICAgICAgICAgICANCjE3MTI6ICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4UXVldWVTcGFjZXNBdmFpbGFibGUoIGNvbnN0IFF1ZXVlSGFuZGxlX3QgeFF1ZXVlICkNCjE3MTM6ICAgICAgICAgICAgICAgIHsNCkJGRDA4MkQ0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwODJENiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwODJEOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwODJEQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDgyREMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KMTcxNDogICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhSZXR1cm47DQoxNzE1OiAgICAgICAgICAgICAgICBRdWV1ZV90ICpweFF1ZXVlOw0KMTcxNjogICAgICAgICAgICAgICAgDQoxNzE3OiAgICAgICAgICAgICAgICAJcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDgyRTAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDgyRTQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTcxODogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggcHhRdWV1ZSApOw0KQkZEMDgyRTggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDgyRUMgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDgzMDINCkJGRDA4MkYwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwODJGMiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwODJGNCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDgyRjYgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDgyRjggIDA2QjYzMEEwICAgQURESVUgQTEsIFpFUk8sIDE3MTgNCkJGRDA4MkZBICAgICAgMDZCNiAgIEFERFUgQTEsIFYxLCBWMQ0KQkZEMDgyRkMgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwODJGRSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDgzMDAgICAgICAwQzAwICAgTk9QDQoxNzE5OiAgICAgICAgICAgICAgICANCjE3MjA6ICAgICAgICAgICAgICAgIAl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA4MzAyICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwODMwNCAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDA4MzA2ICAgICAgMEMwMCAgIE5PUA0KMTcyMTogICAgICAgICAgICAgICAgCXsNCjE3MjI6ICAgICAgICAgICAgICAgIAkJdXhSZXR1cm4gPSBweFF1ZXVlLT51eExlbmd0aCAtIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nOw0KQkZEMDgzMDggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDgzMEMgICAgICA2OUFGICAgTFcgVjEsIDYwKFYwKQ0KQkZEMDgzMEUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDgzMTIgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQ0KQkZEMDgzMTQgICAgICAwNTI3ICAgU1VCVSBWMCwgVjEsIFYwDQpCRkQwODMxNiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoxNzIzOiAgICAgICAgICAgICAgICAJfQ0KMTcyNDogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwODMxQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwODMxQyAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwOUIyMA0KQkZEMDgzMUUgICAgICAwQzAwICAgTk9QDQoxNzI1OiAgICAgICAgICAgICAgICANCjE3MjY6ICAgICAgICAgICAgICAgIAlyZXR1cm4gdXhSZXR1cm47DQpCRkQwODMyMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQoxNzI3OiAgICAgICAgICAgICAgICB9IC8qbGludCAhZTgxOCBQb2ludGVyIGNhbm5vdCBiZSBkZWNsYXJlZCBjb25zdCBhcyB4UXVldWUgaXMgYSB0eXBlZGVmIG5vdCBwb2ludGVyLiAqLw0KQkZEMDgzMjQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4MzI2ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA4MzI4ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA4MzJBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA4MzJDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4MzJFICAgICAgMEMwMCAgIE5PUA0KMTcyODogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNzI5OiAgICAgICAgICAgICAgICANCjE3MzA6ICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4UXVldWVNZXNzYWdlc1dhaXRpbmdGcm9tSVNSKCBjb25zdCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSApDQoxNzMxOiAgICAgICAgICAgICAgICB7DQpCRkQwOTM2MCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDkzNjIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDkzNjQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDkzNjYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5MzY4ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCjE3MzI6ICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4UmV0dXJuOw0KMTczMzogICAgICAgICAgICAgICAgDQoxNzM0OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB4UXVldWUgKTsNCkJGRDA5MzZDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA5MzcwICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDA5Mzg2DQpCRkQwOTM3NCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDkzNzYgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDkzNzggIDlFM0MzMDgyICAgQURESVUgQTAsIFYwLCAtMjUwMjgNCkJGRDA5MzdBICAzMEEwOUUzQyAgIExXQzEgRjE3LCAxMjQ0OChHUCkNCkJGRDA5MzdDICAwNkM2MzBBMCAgIEFERElVIEExLCBaRVJPLCAxNzM0DQpCRkQwOTM3RSAgICAgIDA2QzYgICBBRERVIEExLCBWMSwgQTANCkJGRDA5MzgwICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDkzODIgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA5Mzg0ICAgICAgMEMwMCAgIE5PUA0KMTczNTogICAgICAgICAgICAgICAgDQoxNzM2OiAgICAgICAgICAgICAgICAJdXhSZXR1cm4gPSAoICggUXVldWVfdCAqICkgeFF1ZXVlICktPnV4TWVzc2FnZXNXYWl0aW5nOw0KQkZEMDkzODYgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDkzOEEgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQ0KQkZEMDkzOEMgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTczNzogICAgICAgICAgICAgICAgDQoxNzM4OiAgICAgICAgICAgICAgICAJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDkzOTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMTczOTogICAgICAgICAgICAgICAgfSAvKmxpbnQgIWU4MTggUG9pbnRlciBjYW5ub3QgYmUgZGVjbGFyZWQgY29uc3QgYXMgeFF1ZXVlIGlzIGEgdHlwZWRlZiBub3QgcG9pbnRlci4gKi8NCkJGRDA5Mzk0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTM5NiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOTM5OCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOTM5QSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOTM5QyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTM5RSAgICAgIDBDMDAgICBOT1ANCjE3NDA6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTc0MTogICAgICAgICAgICAgICAgDQoxNzQyOiAgICAgICAgICAgICAgICB2b2lkIHZRdWV1ZURlbGV0ZSggUXVldWVIYW5kbGVfdCB4UXVldWUgKQ0KMTc0MzogICAgICAgICAgICAgICAgew0KQkZEMDkxODggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA5MThBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA5MThDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA5MThFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOTE5MCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQoxNzQ0OiAgICAgICAgICAgICAgICBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDkxOTQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDkxOTggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTc0NTogICAgICAgICAgICAgICAgDQoxNzQ2OiAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCBweFF1ZXVlICk7DQpCRkQwOTE5QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOTFBMCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOTFCNg0KQkZEMDkxQTQgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA5MUE2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA5MUE4ICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwOTFBQSAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwOTFBQyAgMDZEMjMwQTAgICBBRERJVSBBMSwgWkVSTywgMTc0Ng0KQkZEMDkxQUUgICAgICAwNkQyICAgQUREVSBBMSwgUzEsIEExDQpCRkQwOTFCMCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA5MUIyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwOTFCNCAgICAgIDBDMDAgICBOT1ANCjE3NDc6ICAgICAgICAgICAgICAgIA0KMTc0ODogICAgICAgICAgICAgICAgCXRyYWNlUVVFVUVfREVMRVRFKCBweFF1ZXVlICk7DQoxNzQ5OiAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSA+IDAgKQ0KMTc1MDogICAgICAgICAgICAgICAgCXsNCjE3NTE6ICAgICAgICAgICAgICAgIAkJdlF1ZXVlVW5yZWdpc3RlclF1ZXVlKCBweFF1ZXVlICk7DQoxNzUyOiAgICAgICAgICAgICAgICAJfQ0KMTc1MzogICAgICAgICAgICAgICAgCSNlbmRpZg0KMTc1NDogICAgICAgICAgICAgICAgCXZQb3J0RnJlZSggcHhRdWV1ZSApOw0KQkZEMDkxQjYgIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQ0KQkZEMDkxQkEgIDJGRUE3N0U4ICAgSkFMUyB2UG9ydEZyZWUNCkJGRDA5MUJDICAgICAgMkZFQSAgIEFOREkgQTMsIEEyLCAweDIwDQpCRkQwOTFCRSAgICAgIDBDMDAgICBOT1ANCjE3NTU6ICAgICAgICAgICAgICAgIH0NCkJGRDA5MUMwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTFDMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOTFDNCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOTFDNiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOTFDOCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTFDQSAgICAgIDBDMDAgICBOT1ANCjE3NTY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTc1NzogICAgICAgICAgICAgICAgDQoxNzU4OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQoxNzU5OiAgICAgICAgICAgICAgICANCjE3NjA6ICAgICAgICAgICAgICAgIAlVQmFzZVR5cGVfdCB1eFF1ZXVlR2V0UXVldWVOdW1iZXIoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlICkNCjE3NjE6ICAgICAgICAgICAgICAgIAl7DQoxNzYyOiAgICAgICAgICAgICAgICAJCXJldHVybiAoICggUXVldWVfdCAqICkgeFF1ZXVlICktPnV4UXVldWVOdW1iZXI7DQoxNzYzOiAgICAgICAgICAgICAgICAJfQ0KMTc2NDogICAgICAgICAgICAgICAgDQoxNzY1OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZICovDQoxNzY2OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE3Njc6ICAgICAgICAgICAgICAgIA0KMTc2ODogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KMTc2OTogICAgICAgICAgICAgICAgDQoxNzcwOiAgICAgICAgICAgICAgICAJdm9pZCB2UXVldWVTZXRRdWV1ZU51bWJlciggUXVldWVIYW5kbGVfdCB4UXVldWUsIFVCYXNlVHlwZV90IHV4UXVldWVOdW1iZXIgKQ0KMTc3MTogICAgICAgICAgICAgICAgCXsNCjE3NzI6ICAgICAgICAgICAgICAgIAkJKCAoIFF1ZXVlX3QgKiApIHhRdWV1ZSApLT51eFF1ZXVlTnVtYmVyID0gdXhRdWV1ZU51bWJlcjsNCjE3NzM6ICAgICAgICAgICAgICAgIAl9DQoxNzc0OiAgICAgICAgICAgICAgICANCjE3NzU6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgKi8NCjE3NzY6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTc3NzogICAgICAgICAgICAgICAgDQoxNzc4OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApDQoxNzc5OiAgICAgICAgICAgICAgICANCjE3ODA6ICAgICAgICAgICAgICAgIAl1aW50OF90IHVjUXVldWVHZXRRdWV1ZVR5cGUoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlICkNCjE3ODE6ICAgICAgICAgICAgICAgIAl7DQoxNzgyOiAgICAgICAgICAgICAgICAJCXJldHVybiAoICggUXVldWVfdCAqICkgeFF1ZXVlICktPnVjUXVldWVUeXBlOw0KMTc4MzogICAgICAgICAgICAgICAgCX0NCjE3ODQ6ICAgICAgICAgICAgICAgIA0KMTc4NTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSAqLw0KMTc4NjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNzg3OiAgICAgICAgICAgICAgICANCjE3ODg6ICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHBydkNvcHlEYXRhVG9RdWV1ZSggUXVldWVfdCAqIGNvbnN0IHB4UXVldWUsIGNvbnN0IHZvaWQgKnB2SXRlbVRvUXVldWUsIGNvbnN0IEJhc2VUeXBlX3QgeFBvc2l0aW9uICkNCjE3ODk6ICAgICAgICAgICAgICAgIHsNCkJGRDAyOUNDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwMjlDRSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwMjlEMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwMjlEMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDI5RDQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KQkZEMDI5RDggIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQ0KQkZEMDI5REMgIDAwMjhGOERFICAgU1cgQTIsIDQwKFM4KQ0KMTc5MDogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuID0gcGRGQUxTRTsNCkJGRDAyOUUwICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMTc5MTogICAgICAgICAgICAgICAgDQoxNzkyOiAgICAgICAgICAgICAgICAJaWYoIHB4UXVldWUtPnV4SXRlbVNpemUgPT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDI5RTQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDI5RTggIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQ0KQkZEMDI5RUMgIDAwMTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJBMTYNCjE3OTM6ICAgICAgICAgICAgICAgIAl7DQoxNzk0OiAgICAgICAgICAgICAgICAJCSNpZiAoIGNvbmZpZ1VTRV9NVVRFWEVTID09IDEgKQ0KMTc5NTogICAgICAgICAgICAgICAgCQl7DQoxNzk2OiAgICAgICAgICAgICAgICAJCQlpZiggcHhRdWV1ZS0+dXhRdWV1ZVR5cGUgPT0gcXVldWVRVUVVRV9JU19NVVRFWCApDQpCRkQwMjlGMCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMjlGNCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAyOUY2ICAwMDgxNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyQUZDDQoxNzk3OiAgICAgICAgICAgICAgICAJCQl7DQoxNzk4OiAgICAgICAgICAgICAgICAJCQkJLyogVGhlIG11dGV4IGlzIG5vIGxvbmdlciBiZWluZyBoZWxkLiAqLw0KMTc5OTogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSB4VGFza1ByaW9yaXR5RGlzaW5oZXJpdCggKCB2b2lkICogKSBweFF1ZXVlLT5weE11dGV4SG9sZGVyICk7DQpCRkQwMjlGQSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMjlGRSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkNCkJGRDAyQTAwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwMkEwMiAgMTc4Mjc3RTggICBKQUxTIHhUYXNrUHJpb3JpdHlEaXNpbmhlcml0DQpCRkQwMkEwNCAgMEMwMDE3ODIgICBMQlUgR1AsIDMwNzIoVjApDQpCRkQwMkEwNiAgICAgIDBDMDAgICBOT1ANCkJGRDAyQTA4ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjE4MDA6ICAgICAgICAgICAgICAgIAkJCQlweFF1ZXVlLT5weE11dGV4SG9sZGVyID0gTlVMTDsNCkJGRDAyQTBDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQTEwICAgICAgRTgyMSAgIFNXIFMwLCA0KFYwKQ0KQkZEMDJBMTIgICAgICBDQzc0ICAgQiAweEJGRDAyQUZDDQpCRkQwMkExNCAgICAgIDBDMDAgICBOT1ANCjE4MDE6ICAgICAgICAgICAgICAgIAkJCX0NCjE4MDI6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjE4MDM6ICAgICAgICAgICAgICAgIAkJCXsNCjE4MDQ6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxODA1OiAgICAgICAgICAgICAgICAJCQl9DQoxODA2OiAgICAgICAgICAgICAgICAJCX0NCjE4MDc6ICAgICAgICAgICAgICAgIAkJI2VuZGlmIC8qIGNvbmZpZ1VTRV9NVVRFWEVTICovDQoxODA4OiAgICAgICAgICAgICAgICAJfQ0KMTgwOTogICAgICAgICAgICAgICAgCWVsc2UgaWYoIHhQb3NpdGlvbiA9PSBxdWV1ZVNFTkRfVE9fQkFDSyApDQpCRkQwMkExNiAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwMkExQSAgMDAyQjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMkE3NA0KMTgxMDogICAgICAgICAgICAgICAgCXsNCjE4MTE6ICAgICAgICAgICAgICAgIAkJKCB2b2lkICkgbWVtY3B5KCAoIHZvaWQgKiApIHB4UXVldWUtPnBjV3JpdGVUbywgcHZJdGVtVG9RdWV1ZSwgKCBzaXplX3QgKSBweFF1ZXVlLT51eEl0ZW1TaXplICk7IC8qbGludCAhZTk2MSAhZTQxOCBNSVNSQSBleGNlcHRpb24gYXMgdGhlIGNhc3RzIGFyZSBvbmx5IHJlZHVuZGFudCBmb3Igc29tZSBwb3J0cywgcGx1cyBwcmV2aW91cyBsb2dpYyBlbnN1cmVzIGEgbnVsbCBwb2ludGVyIGNhbiBvbmx5IGJlIHBhc3NlZCB0byBtZW1jcHkoKSBpZiB0aGUgY29weSBzaXplIGlzIDAuICovDQpCRkQwMkExRSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMkEyMiAgICAgIDY5QTIgICBMVyBWMSwgOChWMCkNCkJGRDAyQTI0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQTI4ICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkNCkJGRDAyQTJDICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwMkEyRSAgMDAyNEZDQkUgICBMVyBBMSwgMzYoUzgpDQpCRkQwMkEzMiAgICAgIDBDQzIgICBNT1ZFIEEyLCBWMA0KQkZEMDJBMzQgIDFCQjQ3N0U4ICAgSkFMUyAweEJGRDAzNzY4DQpCRkQwMkEzNiAgMEMwMDFCQjQgICBTQiBTUCwgMzA3MihTNCkNCkJGRDAyQTM4ICAgICAgMEMwMCAgIE5PUA0KMTgxMjogICAgICAgICAgICAgICAgCQlweFF1ZXVlLT5wY1dyaXRlVG8gKz0gcHhRdWV1ZS0+dXhJdGVtU2l6ZTsNCkJGRDAyQTNBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQTNFICAgICAgNjlBMiAgIExXIFYxLCA4KFYwKQ0KQkZEMDJBNDAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDJBNDQgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQ0KQkZEMDJBNDggICAgICAwNUE2ICAgQUREVSBWMSwgVjEsIFYwDQpCRkQwMkE0QSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMkE0RSAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkNCjE4MTM6ICAgICAgICAgICAgICAgIAkJaWYoIHB4UXVldWUtPnBjV3JpdGVUbyA+PSBweFF1ZXVlLT5wY1RhaWwgKSAvKmxpbnQgIWU5NDYgTUlTUkEgZXhjZXB0aW9uIGp1c3RpZmllZCBhcyBjb21wYXJpc29uIG9mIHBvaW50ZXJzIGlzIHRoZSBjbGVhbmVzdCBzb2x1dGlvbi4gKi8NCkJGRDAyQTUwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQTU0ICAgICAgNjlBMiAgIExXIFYxLCA4KFYwKQ0KQkZEMDJBNTYgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDJBNUEgICAgICA2OTIxICAgTFcgVjAsIDQoVjApDQpCRkQwMkE1QyAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDAyQTVFICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDJBNjAgIDAwNEM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDJBRkMNCjE4MTQ6ICAgICAgICAgICAgICAgIAkJew0KMTgxNTogICAgICAgICAgICAgICAgCQkJcHhRdWV1ZS0+cGNXcml0ZVRvID0gcHhRdWV1ZS0+cGNIZWFkOw0KQkZEMDJBNjQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDJBNjggICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwMkE2QSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMkE2RSAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkNCkJGRDAyQTcwICAgICAgQ0M0NSAgIEIgMHhCRkQwMkFGQw0KQkZEMDJBNzIgICAgICAwQzAwICAgTk9QDQoxODE2OiAgICAgICAgICAgICAgICAJCX0NCjE4MTc6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMTgxODogICAgICAgICAgICAgICAgCQl7DQoxODE5OiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxODIwOiAgICAgICAgICAgICAgICAJCX0NCjE4MjE6ICAgICAgICAgICAgICAgIAl9DQoxODIyOiAgICAgICAgICAgICAgICAJZWxzZQ0KMTgyMzogICAgICAgICAgICAgICAgCXsNCjE4MjQ6ICAgICAgICAgICAgICAgIAkJKCB2b2lkICkgbWVtY3B5KCAoIHZvaWQgKiApIHB4UXVldWUtPnUucGNSZWFkRnJvbSwgcHZJdGVtVG9RdWV1ZSwgKCBzaXplX3QgKSBweFF1ZXVlLT51eEl0ZW1TaXplICk7IC8qbGludCAhZTk2MSBNSVNSQSBleGNlcHRpb24gYXMgdGhlIGNhc3RzIGFyZSBvbmx5IHJlZHVuZGFudCBmb3Igc29tZSBwb3J0cy4gKi8NCkJGRDAyQTc0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQTc4ICAgICAgNjlBMyAgIExXIFYxLCAxMihWMCkNCkJGRDAyQTdBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQTdFICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkNCkJGRDAyQTgyICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwMkE4NCAgMDAyNEZDQkUgICBMVyBBMSwgMzYoUzgpDQpCRkQwMkE4OCAgICAgIDBDQzIgICBNT1ZFIEEyLCBWMA0KQkZEMDJBOEEgIDFCQjQ3N0U4ICAgSkFMUyAweEJGRDAzNzY4DQpCRkQwMkE4QyAgMEMwMDFCQjQgICBTQiBTUCwgMzA3MihTNCkNCkJGRDAyQThFICAgICAgMEMwMCAgIE5PUA0KMTgyNTogICAgICAgICAgICAgICAgCQlweFF1ZXVlLT51LnBjUmVhZEZyb20gLT0gcHhRdWV1ZS0+dXhJdGVtU2l6ZTsNCkJGRDAyQTkwICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQTk0ICAgICAgNjlBMyAgIExXIFYxLCAxMihWMCkNCkJGRDAyQTk2ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQTlBICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkNCkJGRDAyQTlDICAwMDQwMDA0MCAgIFNSTCBWMCwgWkVSTywgMA0KQkZEMDJBOUUgIDExRDAwMDQwICAgU1VCVSBWMCwgWkVSTywgVjANCkJGRDAyQUEwICAwNUE2MTFEMCAgIEFEREkgVDYsIFMwLCAxNDQ2DQpCRkQwMkFBMiAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjANCkJGRDAyQUE0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQUE4ICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkNCjE4MjY6ICAgICAgICAgICAgICAgIAkJaWYoIHB4UXVldWUtPnUucGNSZWFkRnJvbSA8IHB4UXVldWUtPnBjSGVhZCApIC8qbGludCAhZTk0NiBNSVNSQSBleGNlcHRpb24ganVzdGlmaWVkIGFzIGNvbXBhcmlzb24gb2YgcG9pbnRlcnMgaXMgdGhlIGNsZWFuZXN0IHNvbHV0aW9uLiAqLw0KQkZEMDJBQUEgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDJBQUUgICAgICA2OUEzICAgTFcgVjEsIDEyKFYwKQ0KQkZEMDJBQjAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDJBQjQgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMkFCNiAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDAyQUI4ICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMA0KQkZEMDJBQkEgIDAwMEQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDJBRDgNCjE4Mjc6ICAgICAgICAgICAgICAgIAkJew0KMTgyODogICAgICAgICAgICAgICAgCQkJcHhRdWV1ZS0+dS5wY1JlYWRGcm9tID0gKCBweFF1ZXVlLT5wY1RhaWwgLSBweFF1ZXVlLT51eEl0ZW1TaXplICk7DQpCRkQwMkFCRSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMkFDMiAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkNCkJGRDAyQUM0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQUM4ICAwMDQwRkM0MiAgIExXIFYwLCA2NChWMCkNCkJGRDAyQUNBICAwMDQwMDA0MCAgIFNSTCBWMCwgWkVSTywgMA0KQkZEMDJBQ0MgIDExRDAwMDQwICAgU1VCVSBWMCwgWkVSTywgVjANCkJGRDAyQUNFICAwNUE2MTFEMCAgIEFEREkgVDYsIFMwLCAxNDQ2DQpCRkQwMkFEMCAgICAgIDA1QTYgICBBRERVIFYxLCBWMSwgVjANCkJGRDAyQUQyICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQUQ2ICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkNCjE4Mjk6ICAgICAgICAgICAgICAgIAkJfQ0KMTgzMDogICAgICAgICAgICAgICAgCQllbHNlDQoxODMxOiAgICAgICAgICAgICAgICAJCXsNCjE4MzI6ICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE4MzM6ICAgICAgICAgICAgICAgIAkJfQ0KMTgzNDogICAgICAgICAgICAgICAgDQoxODM1OiAgICAgICAgICAgICAgICAJCWlmKCB4UG9zaXRpb24gPT0gcXVldWVPVkVSV1JJVEUgKQ0KQkZEMDJBRDggIDAwMjhGQzdFICAgTFcgVjEsIDQwKFM4KQ0KQkZEMDJBREMgICAgICBFRDAyICAgTEkgVjAsIDINCkJGRDAyQURFICAwMDBEQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDJBRkMNCkJGRDAyQUUwICAwQzAwMDAwRCAgIFNMTCBaRVJPLCBUNSwgMQ0KQkZEMDJBRTIgICAgICAwQzAwICAgTk9QDQoxODM2OiAgICAgICAgICAgICAgICAJCXsNCjE4Mzc6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA+ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDAyQUU0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQUU4ICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkNCkJGRDAyQUVBICAwMDA3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyQUZDDQoxODM4OiAgICAgICAgICAgICAgICAJCQl7DQoxODM5OiAgICAgICAgICAgICAgICAJCQkJLyogQW4gaXRlbSBpcyBub3QgYmVpbmcgYWRkZWQgYnV0IG92ZXJ3cml0dGVuLCBzbyBzdWJ0cmFjdA0KMTg0MDogICAgICAgICAgICAgICAgCQkJCW9uZSBmcm9tIHRoZSByZWNvcmRlZCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHF1ZXVlIHNvIHdoZW4NCjE4NDE6ICAgICAgICAgICAgICAgIAkJCQlvbmUgaXMgYWRkZWQgYWdhaW4gYmVsb3cgdGhlIG51bWJlciBvZiByZWNvcmRlZCBpdGVtcyByZW1haW5zDQoxODQyOiAgICAgICAgICAgICAgICAJCQkJY29ycmVjdC4gKi8NCjE4NDM6ICAgICAgICAgICAgICAgIAkJCQktLSggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgKTsNCkJGRDAyQUVFICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQUYyICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkNCkJGRDAyQUY0ICAgICAgNkRBRSAgIEFERElVIFYxLCBWMCwgLTENCkJGRDAyQUY2ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQUZBICAgICAgRTlBRSAgIFNXIFYxLCA1NihWMCkNCjE4NDQ6ICAgICAgICAgICAgICAgIAkJCX0NCjE4NDU6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjE4NDY6ICAgICAgICAgICAgICAgIAkJCXsNCjE4NDc6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxODQ4OiAgICAgICAgICAgICAgICAJCQl9DQoxODQ5OiAgICAgICAgICAgICAgICAJCX0NCjE4NTA6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMTg1MTogICAgICAgICAgICAgICAgCQl7DQoxODUyOiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoxODUzOiAgICAgICAgICAgICAgICAJCX0NCjE4NTQ6ICAgICAgICAgICAgICAgIAl9DQoxODU1OiAgICAgICAgICAgICAgICANCjE4NTY6ICAgICAgICAgICAgICAgIAkrKyggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgKTsNCkJGRDAyQUZDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyQjAwICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkNCkJGRDAyQjAyICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQ0KQkZEMDJCMDQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDJCMDggICAgICBFOUFFICAgU1cgVjEsIDU2KFYwKQ0KMTg1NzogICAgICAgICAgICAgICAgDQoxODU4OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwMkIwQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoxODU5OiAgICAgICAgICAgICAgICB9DQpCRkQwMkIwRSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDJCMTAgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDJCMTIgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDJCMTQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDJCMTYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDJCMTggICAgICAwQzAwICAgTk9QDQoxODYwOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE4NjE6ICAgICAgICAgICAgICAgIA0KMTg2MjogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2Q29weURhdGFGcm9tUXVldWUoIFF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlLCB2b2lkICogY29uc3QgcHZCdWZmZXIgKQ0KMTg2MzogICAgICAgICAgICAgICAgew0KQkZEMDZDRjQgICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQNCkJGRDA2Q0Y2ICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkNCkJGRDA2Q0Y4ICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkNCkJGRDA2Q0ZBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNkNGQyAgMDAxOEY4OUUgICBTVyBBMCwgMjQoUzgpDQpCRkQwNkQwMCAgMDAxQ0Y4QkUgICBTVyBBMSwgMjgoUzgpDQoxODY0OiAgICAgICAgICAgICAgICAJaWYoIHB4UXVldWUtPnV4SXRlbVNpemUgIT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDZEMDQgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDZEMDggIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQ0KQkZEMDZEMEMgIDAwMjk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDZENjINCjE4NjU6ICAgICAgICAgICAgICAgIAl7DQoxODY2OiAgICAgICAgICAgICAgICAJCXB4UXVldWUtPnUucGNSZWFkRnJvbSArPSBweFF1ZXVlLT51eEl0ZW1TaXplOw0KQkZEMDZEMTAgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDZEMTQgICAgICA2OUEzICAgTFcgVjEsIDEyKFYwKQ0KQkZEMDZEMTYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDZEMUEgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQ0KQkZEMDZEMUUgICAgICAwNUE2ICAgQUREVSBWMSwgVjEsIFYwDQpCRkQwNkQyMCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNkQyNCAgICAgIEU5QTMgICBTVyBWMSwgMTIoVjApDQoxODY3OiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlLT51LnBjUmVhZEZyb20gPj0gcHhRdWV1ZS0+cGNUYWlsICkgLypsaW50ICFlOTQ2IE1JU1JBIGV4Y2VwdGlvbiBqdXN0aWZpZWQgYXMgdXNlIG9mIHRoZSByZWxhdGlvbmFsIG9wZXJhdG9yIGlzIHRoZSBjbGVhbmVzdCBzb2x1dGlvbnMuICovDQpCRkQwNkQyNiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNkQyQSAgICAgIDY5QTMgICBMVyBWMSwgMTIoVjApDQpCRkQwNkQyQyAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNkQzMCAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkNCkJGRDA2RDMyICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDZEMzQgIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwNkQzNiAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNkQ0Ng0KMTg2ODogICAgICAgICAgICAgICAgCQl7DQoxODY5OiAgICAgICAgICAgICAgICAJCQlweFF1ZXVlLT51LnBjUmVhZEZyb20gPSBweFF1ZXVlLT5wY0hlYWQ7DQpCRkQwNkQzQSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNkQzRSAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDA2RDQwICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA2RDQ0ICAgICAgRTlBMyAgIFNXIFYxLCAxMihWMCkNCjE4NzA6ICAgICAgICAgICAgICAgIAkJfQ0KMTg3MTogICAgICAgICAgICAgICAgCQllbHNlDQoxODcyOiAgICAgICAgICAgICAgICAJCXsNCjE4NzM6ICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE4NzQ6ICAgICAgICAgICAgICAgIAkJfQ0KMTg3NTogICAgICAgICAgICAgICAgCQkoIHZvaWQgKSBtZW1jcHkoICggdm9pZCAqICkgcHZCdWZmZXIsICggdm9pZCAqICkgcHhRdWV1ZS0+dS5wY1JlYWRGcm9tLCAoIHNpemVfdCApIHB4UXVldWUtPnV4SXRlbVNpemUgKTsgLypsaW50ICFlOTYxICFlNDE4IE1JU1JBIGV4Y2VwdGlvbiBhcyB0aGUgY2FzdHMgYXJlIG9ubHkgcmVkdW5kYW50IGZvciBzb21lIHBvcnRzLiAgQWxzbyBwcmV2aW91cyBsb2dpYyBlbnN1cmVzIGEgbnVsbCBwb2ludGVyIGNhbiBvbmx5IGJlIHBhc3NlZCB0byBtZW1jcHkoKSB3aGVuIHRoZSBjb3VudCBpcyAwLiAqLw0KQkZEMDZENDYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDZENEEgICAgICA2OUEzICAgTFcgVjEsIDEyKFYwKQ0KQkZEMDZENEMgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDZENTAgIDAwNDBGQzQyICAgTFcgVjAsIDY0KFYwKQ0KQkZEMDZENTQgIDAwMUNGQzlFICAgTFcgQTAsIDI4KFM4KQ0KQkZEMDZENTggICAgICAwQ0EzICAgTU9WRSBBMSwgVjENCkJGRDA2RDVBICAgICAgMENDMiAgIE1PVkUgQTIsIFYwDQpCRkQwNkQ1QyAgMUJCNDc3RTggICBKQUxTIDB4QkZEMDM3NjgNCkJGRDA2RDVFICAwQzAwMUJCNCAgIFNCIFNQLCAzMDcyKFM0KQ0KQkZEMDZENjAgICAgICAwQzAwICAgTk9QDQoxODc2OiAgICAgICAgICAgICAgICAJfQ0KMTg3NzogICAgICAgICAgICAgICAgfQ0KQkZEMDZENjIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA2RDY0ICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA2RDY2ICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA2RDY4ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA2RDZBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA2RDZDICAgICAgMEMwMCAgIE5PUA0KMTg3ODogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxODc5OiAgICAgICAgICAgICAgICANCjE4ODA6ICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydlVubG9ja1F1ZXVlKCBRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSApDQoxODgxOiAgICAgICAgICAgICAgICB7DQpCRkQwM0JEQyAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNA0KQkZEMDNCREUgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQ0KQkZEMDNCRTAgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQ0KQkZEMDNCRTIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDAzQkU0ICAwMDE4Rjg5RSAgIFNXIEEwLCAyNChTOCkNCjE4ODI6ICAgICAgICAgICAgICAgIAkvKiBUSElTIEZVTkNUSU9OIE1VU1QgQkUgQ0FMTEVEIFdJVEggVEhFIFNDSEVEVUxFUiBTVVNQRU5ERUQuICovDQoxODgzOiAgICAgICAgICAgICAgICANCjE4ODQ6ICAgICAgICAgICAgICAgIAkvKiBUaGUgbG9jayBjb3VudHMgY29udGFpbnMgdGhlIG51bWJlciBvZiBleHRyYSBkYXRhIGl0ZW1zIHBsYWNlZCBvcg0KMTg4NTogICAgICAgICAgICAgICAgCXJlbW92ZWQgZnJvbSB0aGUgcXVldWUgd2hpbGUgdGhlIHF1ZXVlIHdhcyBsb2NrZWQuICBXaGVuIGEgcXVldWUgaXMNCjE4ODY6ICAgICAgICAgICAgICAgIAlsb2NrZWQgaXRlbXMgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQsIGJ1dCB0aGUgZXZlbnQgbGlzdHMgY2Fubm90IGJlDQoxODg3OiAgICAgICAgICAgICAgICAJdXBkYXRlZC4gKi8NCjE4ODg6ICAgICAgICAgICAgICAgIAl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAzQkU4ICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwM0JFQSAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDAzQkVDICAgICAgMEMwMCAgIE5PUA0KMTg4OTogICAgICAgICAgICAgICAgCXsNCjE4OTA6ICAgICAgICAgICAgICAgIAkJLyogU2VlIGlmIGRhdGEgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSB3aGlsZSBpdCB3YXMgbG9ja2VkLiAqLw0KMTg5MTogICAgICAgICAgICAgICAgCQl3aGlsZSggcHhRdWV1ZS0+eFR4TG9jayA+IHF1ZXVlTE9DS0VEX1VOTU9ESUZJRUQgKQ0KQkZEMDNCRUUgICAgICBDQzMyICAgQiAweEJGRDAzQzU0DQpCRkQwM0JGMCAgICAgIDBDMDAgICBOT1ANCkJGRDAzQzU0ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAzQzU4ICAwMDQ4RkM0MiAgIExXIFYwLCA3MihWMCkNCkJGRDAzQzVDICBGRkM5NDBDMiAgIEJHVFogVjAsIDB4QkZEMDNCRjINCkJGRDAzQzVFICAwQzAwRkZDOSAgIExXIFM4LCAzMDcyKFQxKQ0KQkZEMDNDNjAgICAgICAwQzAwICAgTk9QDQpCRkQwM0M2MiAgICAgIENDMDIgICBCIDB4QkZEMDNDNjgNCkJGRDAzQzY0ICAgICAgMEMwMCAgIE5PUA0KMTg5MjogICAgICAgICAgICAgICAgCQl7DQoxODkzOiAgICAgICAgICAgICAgICAJCQkvKiBEYXRhIHdhcyBwb3N0ZWQgd2hpbGUgdGhlIHF1ZXVlIHdhcyBsb2NrZWQuICBBcmUgYW55IHRhc2tzDQoxODk0OiAgICAgICAgICAgICAgICAJCQlibG9ja2VkIHdhaXRpbmcgZm9yIGRhdGEgdG8gYmVjb21lIGF2YWlsYWJsZT8gKi8NCjE4OTU6ICAgICAgICAgICAgICAgIAkJCSNpZiAoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMTg5NjogICAgICAgICAgICAgICAgCQkJew0KMTg5NzogICAgICAgICAgICAgICAgCQkJCWlmKCBweFF1ZXVlLT5weFF1ZXVlU2V0Q29udGFpbmVyICE9IE5VTEwgKQ0KQkZEMDNCRjIgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDNCRjYgIDAwNENGQzQyICAgTFcgVjAsIDc2KFYwKQ0KQkZEMDNCRkEgIDAwMTA0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNDMUUNCjE4OTg6ICAgICAgICAgICAgICAgIAkJCQl7DQoxODk5OiAgICAgICAgICAgICAgICAJCQkJCWlmKCBwcnZOb3RpZnlRdWV1ZVNldENvbnRhaW5lciggcHhRdWV1ZSwgcXVldWVTRU5EX1RPX0JBQ0sgKSA9PSBwZFRSVUUgKQ0KQkZEMDNCRkUgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDNDMDIgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTw0KQkZEMDNDMDQgIDIxRDg3N0U4ICAgSkFMUyBwcnZOb3RpZnlRdWV1ZVNldENvbnRhaW5lcg0KQkZEMDNDMDYgIDBDMDAyMUQ4ICAgTFdDMiBUNiwgMzA3MihUOCkNCkJGRDAzQzA4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDNDMEEgICAgICAwQzYyICAgTU9WRSBWMSwgVjANCkJGRDAzQzBDICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwM0MwRSAgMDAxOEI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAzQzQyDQpCRkQwM0MxMCAgMEMwMDAwMTggICBTTEwgWkVSTywgVDgsIDENCkJGRDAzQzEyICAgICAgMEMwMCAgIE5PUA0KMTkwMDogICAgICAgICAgICAgICAgCQkJCQl7DQoxOTAxOiAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgcXVldWUgaXMgYSBtZW1iZXIgb2YgYSBxdWV1ZSBzZXQsIGFuZCBwb3N0aW5nIHRvDQoxOTAyOiAgICAgICAgICAgICAgICAJCQkJCQl0aGUgcXVldWUgc2V0IGNhdXNlZCBhIGhpZ2hlciBwcmlvcml0eSB0YXNrIHRvIHVuYmxvY2suDQoxOTAzOiAgICAgICAgICAgICAgICAJCQkJCQlBIGNvbnRleHQgc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KMTkwNDogICAgICAgICAgICAgICAgCQkJCQkJdlRhc2tNaXNzZWRZaWVsZCgpOw0KQkZEMDNDMTQgIDRGMkE3N0U4ICAgSkFMUyB2VGFza01pc3NlZFlpZWxkDQpCRkQwM0MxNiAgICAgIDRGMkEgICBBRERJVSBUOSwgVDksIDUNCkJGRDAzQzE4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDNDMUEgICAgICBDQzEzICAgQiAweEJGRDAzQzQyDQpCRkQwM0MxQyAgICAgIDBDMDAgICBOT1ANCjE5MDU6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTkwNjogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoxOTA3OiAgICAgICAgICAgICAgICAJCQkJCXsNCjE5MDg6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjE5MDk6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTkxMDogICAgICAgICAgICAgICAgCQkJCX0NCjE5MTE6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoxOTEyOiAgICAgICAgICAgICAgICAJCQkJew0KMTkxMzogICAgICAgICAgICAgICAgCQkJCQkvKiBUYXNrcyB0aGF0IGFyZSByZW1vdmVkIGZyb20gdGhlIGV2ZW50IGxpc3Qgd2lsbCBnZXQgYWRkZWQgdG8NCjE5MTQ6ICAgICAgICAgICAgICAgIAkJCQkJdGhlIHBlbmRpbmcgcmVhZHkgbGlzdCBhcyB0aGUgc2NoZWR1bGVyIGlzIHN0aWxsIHN1c3BlbmRlZC4gKi8NCjE5MTU6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9SZWNlaXZlICkgKSA9PSBwZEZBTFNFICkNCkJGRDAzQzFFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAzQzIyICAgICAgNjkyOSAgIExXIFYwLCAzNihWMCkNCkJGRDAzQzI0ICAwMDFGNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzQzY2DQoxOTE2OiAgICAgICAgICAgICAgICAJCQkJCXsNCjE5MTc6ICAgICAgICAgICAgICAgIAkJCQkJCWlmKCB4VGFza1JlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApICE9IHBkRkFMU0UgKQ0KQkZEMDNDMjggIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDNDMkMgIDAwMjQzMDQyICAgQURESVUgVjAsIFYwLCAzNg0KQkZEMDNDMzAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDAzQzMyICAyMkJDNzdFOCAgIEpBTFMgeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0DQpCRkQwM0MzNCAgMEMwMDIyQkMgICBMV0MyIFM1LCAzMDcyKEdQKQ0KQkZEMDNDMzYgICAgICAwQzAwICAgTk9QDQpCRkQwM0MzOCAgMDAwMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwM0M0Mg0KMTkxODogICAgICAgICAgICAgICAgCQkJCQkJew0KMTkxOTogICAgICAgICAgICAgICAgCQkJCQkJCS8qIFRoZSB0YXNrIHdhaXRpbmcgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHNvIHJlY29yZCB0aGF0IGENCjE5MjA6ICAgICAgICAgICAgICAgIAkJCQkJCQljb250ZXh0CXN3aXRjaCBpcyByZXF1aXJlZC4gKi8NCjE5MjE6ICAgICAgICAgICAgICAgIAkJCQkJCQl2VGFza01pc3NlZFlpZWxkKCk7DQpCRkQwM0MzQyAgNEYyQTc3RTggICBKQUxTIHZUYXNrTWlzc2VkWWllbGQNCkJGRDAzQzNFICAgICAgNEYyQSAgIEFERElVIFQ5LCBUOSwgNQ0KQkZEMDNDNDAgICAgICAwQzAwICAgTk9QDQoxOTIyOiAgICAgICAgICAgICAgICAJCQkJCQl9DQoxOTIzOiAgICAgICAgICAgICAgICAJCQkJCQllbHNlDQoxOTI0OiAgICAgICAgICAgICAgICAJCQkJCQl7DQoxOTI1OiAgICAgICAgICAgICAgICAJCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTkyNjogICAgICAgICAgICAgICAgCQkJCQkJfQ0KMTkyNzogICAgICAgICAgICAgICAgCQkJCQl9DQoxOTI4OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjE5Mjk6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTkzMDogICAgICAgICAgICAgICAgCQkJCQkJYnJlYWs7DQpCRkQwM0M2NiAgICAgIDBDMDAgICBOT1ANCjE5MzE6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMTkzMjogICAgICAgICAgICAgICAgCQkJCX0NCjE5MzM6ICAgICAgICAgICAgICAgIAkJCX0NCjE5MzQ6ICAgICAgICAgICAgICAgIAkJCSNlbHNlIC8qIGNvbmZpZ1VTRV9RVUVVRV9TRVRTICovDQoxOTM1OiAgICAgICAgICAgICAgICAJCQl7DQoxOTM2OiAgICAgICAgICAgICAgICAJCQkJLyogVGFza3MgdGhhdCBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBldmVudCBsaXN0IHdpbGwgZ2V0IGFkZGVkIHRvDQoxOTM3OiAgICAgICAgICAgICAgICAJCQkJdGhlIHBlbmRpbmcgcmVhZHkgbGlzdCBhcyB0aGUgc2NoZWR1bGVyIGlzIHN0aWxsIHN1c3BlbmRlZC4gKi8NCjE5Mzg6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApID09IHBkRkFMU0UgKQ0KMTkzOTogICAgICAgICAgICAgICAgCQkJCXsNCjE5NDA6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQoxOTQxOiAgICAgICAgICAgICAgICAJCQkJCXsNCjE5NDI6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSB0YXNrIHdhaXRpbmcgaGFzIGEgaGlnaGVyIHByaW9yaXR5IHNvIHJlY29yZCB0aGF0IGENCjE5NDM6ICAgICAgICAgICAgICAgIAkJCQkJCWNvbnRleHQJc3dpdGNoIGlzIHJlcXVpcmVkLiAqLw0KMTk0NDogICAgICAgICAgICAgICAgCQkJCQkJdlRhc2tNaXNzZWRZaWVsZCgpOw0KMTk0NTogICAgICAgICAgICAgICAgCQkJCQl9DQoxOTQ2OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjE5NDc6ICAgICAgICAgICAgICAgIAkJCQkJew0KMTk0ODogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTk0OTogICAgICAgICAgICAgICAgCQkJCQl9DQoxOTUwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMTk1MTogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjE5NTI6ICAgICAgICAgICAgICAgIAkJCQl7DQoxOTUzOiAgICAgICAgICAgICAgICAJCQkJCWJyZWFrOw0KMTk1NDogICAgICAgICAgICAgICAgCQkJCX0NCjE5NTU6ICAgICAgICAgICAgICAgIAkJCX0NCjE5NTY6ICAgICAgICAgICAgICAgIAkJCSNlbmRpZiAvKiBjb25maWdVU0VfUVVFVUVfU0VUUyAqLw0KMTk1NzogICAgICAgICAgICAgICAgDQoxOTU4OiAgICAgICAgICAgICAgICAJCQktLSggcHhRdWV1ZS0+eFR4TG9jayApOw0KQkZEMDNDNDIgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDNDNDYgIDAwNDhGQzQyICAgTFcgVjAsIDcyKFYwKQ0KQkZEMDNDNEEgICAgICA2REFFICAgQURESVUgVjEsIFYwLCAtMQ0KQkZEMDNDNEMgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDNDNTAgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQ0KMTk1OTogICAgICAgICAgICAgICAgCQl9DQoxOTYwOiAgICAgICAgICAgICAgICANCjE5NjE6ICAgICAgICAgICAgICAgIAkJcHhRdWV1ZS0+eFR4TG9jayA9IHF1ZXVlVU5MT0NLRUQ7DQpCRkQwM0M2OCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwM0M2QyAgICAgIEVERkYgICBMSSBWMSwgLTENCkJGRDAzQzZFICAwMDQ4Rjg2MiAgIFNXIFYxLCA3MihWMCkNCjE5NjI6ICAgICAgICAgICAgICAgIAl9DQoxOTYzOiAgICAgICAgICAgICAgICAJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDAzQzcyICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDAzQzc0ICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA1NDc4DQpCRkQwM0M3NiAgICAgIDBDMDAgICBOT1ANCjE5NjQ6ICAgICAgICAgICAgICAgIA0KMTk2NTogICAgICAgICAgICAgICAgCS8qIERvIHRoZSBzYW1lIGZvciB0aGUgUnggbG9jay4gKi8NCjE5NjY6ICAgICAgICAgICAgICAgIAl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDAzQzc4ICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwM0M3QSAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDAzQzdDICAgICAgMEMwMCAgIE5PUA0KMTk2NzogICAgICAgICAgICAgICAgCXsNCjE5Njg6ICAgICAgICAgICAgICAgIAkJd2hpbGUoIHB4UXVldWUtPnhSeExvY2sgPiBxdWV1ZUxPQ0tFRF9VTk1PRElGSUVEICkNCkJGRDAzQzdFICAgICAgQ0MxQiAgIEIgMHhCRkQwM0NCNg0KQkZEMDNDODAgICAgICAwQzAwICAgTk9QDQpCRkQwM0NCNiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwM0NCQSAgMDA0NEZDNDIgICBMVyBWMCwgNjgoVjApDQpCRkQwM0NCRSAgRkZFMDQwQzIgICBCR1RaIFYwLCAweEJGRDAzQzgyDQpCRkQwM0NDMCAgMEMwMEZGRTAgICBMVyBSQSwgMzA3MihaRVJPKQ0KQkZEMDNDQzIgICAgICAwQzAwICAgTk9QDQpCRkQwM0NDNCAgICAgIENDMDIgICBCIDB4QkZEMDNDQ0ENCkJGRDAzQ0M2ICAgICAgMEMwMCAgIE5PUA0KMTk2OTogICAgICAgICAgICAgICAgCQl7DQoxOTcwOiAgICAgICAgICAgICAgICAJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkRkFMU0UgKQ0KQkZEMDNDODIgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDNDODYgICAgICA2OTI0ICAgTFcgVjAsIDE2KFYwKQ0KQkZEMDNDODggIDAwMUU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNDQzgNCjE5NzE6ICAgICAgICAgICAgICAgIAkJCXsNCjE5NzI6ICAgICAgICAgICAgICAgIAkJCQlpZiggeFRhc2tSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSAhPSBwZEZBTFNFICkNCkJGRDAzQzhDICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAzQzkwICAgICAgNkQyOCAgIEFERElVIFYwLCBWMCwgMTYNCkJGRDAzQzkyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwM0M5NCAgMjJCQzc3RTggICBKQUxTIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdA0KQkZEMDNDOTYgIDBDMDAyMkJDICAgTFdDMiBTNSwgMzA3MihHUCkNCkJGRDAzQzk4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDNDOUEgIDAwMDM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDNDQTQNCjE5NzM6ICAgICAgICAgICAgICAgIAkJCQl7DQoxOTc0OiAgICAgICAgICAgICAgICAJCQkJCXZUYXNrTWlzc2VkWWllbGQoKTsNCkJGRDAzQzlFICA0RjJBNzdFOCAgIEpBTFMgdlRhc2tNaXNzZWRZaWVsZA0KQkZEMDNDQTAgICAgICA0RjJBICAgQURESVUgVDksIFQ5LCA1DQpCRkQwM0NBMiAgICAgIDBDMDAgICBOT1ANCjE5NzU6ICAgICAgICAgICAgICAgIAkJCQl9DQoxOTc2OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMTk3NzogICAgICAgICAgICAgICAgCQkJCXsNCjE5Nzg6ICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMTk3OTogICAgICAgICAgICAgICAgCQkJCX0NCjE5ODA6ICAgICAgICAgICAgICAgIA0KMTk4MTogICAgICAgICAgICAgICAgCQkJCS0tKCBweFF1ZXVlLT54UnhMb2NrICk7DQpCRkQwM0NBNCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwM0NBOCAgMDA0NEZDNDIgICBMVyBWMCwgNjgoVjApDQpCRkQwM0NBQyAgICAgIDZEQUUgICBBRERJVSBWMSwgVjAsIC0xDQpCRkQwM0NBRSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwM0NCMiAgMDA0NEY4NjIgICBTVyBWMSwgNjgoVjApDQoxOTgyOiAgICAgICAgICAgICAgICAJCQl9DQoxOTgzOiAgICAgICAgICAgICAgICAJCQllbHNlDQoxOTg0OiAgICAgICAgICAgICAgICAJCQl7DQoxOTg1OiAgICAgICAgICAgICAgICAJCQkJYnJlYWs7DQpCRkQwM0NDOCAgICAgIDBDMDAgICBOT1ANCjE5ODY6ICAgICAgICAgICAgICAgIAkJCX0NCjE5ODc6ICAgICAgICAgICAgICAgIAkJfQ0KMTk4ODogICAgICAgICAgICAgICAgDQoxOTg5OiAgICAgICAgICAgICAgICAJCXB4UXVldWUtPnhSeExvY2sgPSBxdWV1ZVVOTE9DS0VEOw0KQkZEMDNDQ0EgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDNDQ0UgICAgICBFREZGICAgTEkgVjEsIC0xDQpCRkQwM0NEMCAgMDA0NEY4NjIgICBTVyBWMSwgNjgoVjApDQoxOTkwOiAgICAgICAgICAgICAgICAJfQ0KMTk5MTogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwM0NENCAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwM0NENiAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwNTREQQ0KQkZEMDNDRDggICAgICAwQzAwICAgTk9QDQoxOTkyOiAgICAgICAgICAgICAgICB9DQpCRkQwM0NEQSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDNDREMgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQ0KQkZEMDNDREUgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQ0KQkZEMDNDRTAgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNA0KQkZEMDNDRTIgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDNDRTQgICAgICAwQzAwICAgTk9QDQoxOTkzOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE5OTQ6ICAgICAgICAgICAgICAgIA0KMTk5NTogICAgICAgICAgICAgICAgc3RhdGljIEJhc2VUeXBlX3QgcHJ2SXNRdWV1ZUVtcHR5KCBjb25zdCBRdWV1ZV90ICpweFF1ZXVlICkNCjE5OTY6ICAgICAgICAgICAgICAgIHsNCkJGRDA5M0EwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwOTNBMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwOTNBNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwOTNBNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDkzQTggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KMTk5NzogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KMTk5ODogICAgICAgICAgICAgICAgDQoxOTk5OiAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwOTNBQyAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDkzQUUgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwOTNCMCAgICAgIDBDMDAgICBOT1ANCjIwMDA6ICAgICAgICAgICAgICAgIAl7DQoyMDAxOiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA9PSAoIFVCYXNlVHlwZV90ICkgIDAgKQ0KQkZEMDkzQjIgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDkzQjYgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQ0KQkZEMDkzQjggIDAwMDU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDkzQzYNCjIwMDI6ICAgICAgICAgICAgICAgIAkJew0KMjAwMzogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA5M0JDICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwOTNCRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwOTNDMiAgICAgIENDMDMgICBCIDB4QkZEMDkzQ0ENCkJGRDA5M0M0ICAgICAgMEMwMCAgIE5PUA0KMjAwNDogICAgICAgICAgICAgICAgCQl9DQoyMDA1OiAgICAgICAgICAgICAgICAJCWVsc2UNCjIwMDY6ICAgICAgICAgICAgICAgIAkJew0KMjAwNzogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkRkFMU0U7DQpCRkQwOTNDNiAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCjIwMDg6ICAgICAgICAgICAgICAgIAkJfQ0KMjAwOTogICAgICAgICAgICAgICAgCX0NCjIwMTA6ICAgICAgICAgICAgICAgIAl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDkzQ0EgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDkzQ0MgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMEFCRDANCkJGRDA5M0NFICAgICAgMEMwMCAgIE5PUA0KMjAxMTogICAgICAgICAgICAgICAgDQoyMDEyOiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwOTNEMCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoyMDEzOiAgICAgICAgICAgICAgICB9DQpCRkQwOTNENCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDkzRDYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDkzRDggICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDkzREEgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDkzREMgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDkzREUgICAgICAwQzAwICAgTk9QDQoyMDE0OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIwMTU6ICAgICAgICAgICAgICAgIA0KMjAxNjogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UXVldWVJc1F1ZXVlRW1wdHlGcm9tSVNSKCBjb25zdCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSApDQoyMDE3OiAgICAgICAgICAgICAgICB7DQpCRkQwODk1NCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDg5NTYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDg5NTggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDg5NUEgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4OTVDICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCjIwMTg6ICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFJldHVybjsNCjIwMTk6ICAgICAgICAgICAgICAgIA0KMjAyMDogICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeFF1ZXVlICk7DQpCRkQwODk2MCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwODk2NCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwODk3QQ0KQkZEMDg5NjggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA4OTZBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA4OTZDICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwODk2RSAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwODk3MCAgMDdFNDMwQTAgICBBRERJVSBBMSwgWkVSTywgMjAyMA0KQkZEMDg5NzIgICAgICAwN0U0ICAgQUREVSBBMywgVjAsIEEyDQpCRkQwODk3NCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA4OTc2ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwODk3OCAgICAgIDBDMDAgICBOT1ANCjIwMjE6ICAgICAgICAgICAgICAgIAlpZiggKCAoIFF1ZXVlX3QgKiApIHhRdWV1ZSApLT51eE1lc3NhZ2VzV2FpdGluZyA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQpCRkQwODk3QSAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwODk3RSAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApDQpCRkQwODk4MCAgMDAwNTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwODk4RQ0KMjAyMjogICAgICAgICAgICAgICAgCXsNCjIwMjM6ICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA4OTg0ICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwODk4NiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwODk4QSAgICAgIENDMDMgICBCIDB4QkZEMDg5OTINCkJGRDA4OThDICAgICAgMEMwMCAgIE5PUA0KMjAyNDogICAgICAgICAgICAgICAgCX0NCjIwMjU6ICAgICAgICAgICAgICAgIAllbHNlDQoyMDI2OiAgICAgICAgICAgICAgICAJew0KMjAyNzogICAgICAgICAgICAgICAgCQl4UmV0dXJuID0gcGRGQUxTRTsNCkJGRDA4OThFICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMjAyODogICAgICAgICAgICAgICAgCX0NCjIwMjk6ICAgICAgICAgICAgICAgIA0KMjAzMDogICAgICAgICAgICAgICAgCXJldHVybiB4UmV0dXJuOw0KQkZEMDg5OTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMjAzMTogICAgICAgICAgICAgICAgfSAvKmxpbnQgIWU4MTggeFF1ZXVlIGNvdWxkIG5vdCBiZSBwb2ludGVyIHRvIGNvbnN0IGJlY2F1c2UgaXQgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDg5OTYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4OTk4ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA4OTlBICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA4OTlDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA4OTlFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4OUEwICAgICAgMEMwMCAgIE5PUA0KMjAzMjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMDMzOiAgICAgICAgICAgICAgICANCjIwMzQ6ICAgICAgICAgICAgICAgIHN0YXRpYyBCYXNlVHlwZV90IHBydklzUXVldWVGdWxsKCBjb25zdCBRdWV1ZV90ICpweFF1ZXVlICkNCjIwMzU6ICAgICAgICAgICAgICAgIHsNCkJGRDA4RjA0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwOEYwNiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwOEYwOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwOEYwQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDhGMEMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KMjAzNjogICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4UmV0dXJuOw0KMjAzNzogICAgICAgICAgICAgICAgDQoyMDM4OiAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwOEYxMCAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDhGMTIgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwOEYxNCAgICAgIDBDMDAgICBOT1ANCjIwMzk6ICAgICAgICAgICAgICAgIAl7DQoyMDQwOiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA9PSBweFF1ZXVlLT51eExlbmd0aCApDQpCRkQwOEYxNiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwOEYxQSAgICAgIDY5QUUgICBMVyBWMSwgNTYoVjApDQpCRkQwOEYxQyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwOEYyMCAgICAgIDY5MkYgICBMVyBWMCwgNjAoVjApDQpCRkQwOEYyMiAgMDAwNkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA4RjMyDQpCRkQwOEYyNCAgMEMwMDAwMDYgICBTTEwgWkVSTywgQTIsIDENCkJGRDA4RjI2ICAgICAgMEMwMCAgIE5PUA0KMjA0MTogICAgICAgICAgICAgICAgCQl7DQoyMDQyOiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRUUlVFOw0KQkZEMDhGMjggICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA4RjJBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA4RjJFICAgICAgQ0MwMyAgIEIgMHhCRkQwOEYzNg0KQkZEMDhGMzAgICAgICAwQzAwICAgTk9QDQoyMDQzOiAgICAgICAgICAgICAgICAJCX0NCjIwNDQ6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjA0NTogICAgICAgICAgICAgICAgCQl7DQoyMDQ2OiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRGQUxTRTsNCkJGRDA4RjMyICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMjA0NzogICAgICAgICAgICAgICAgCQl9DQoyMDQ4OiAgICAgICAgICAgICAgICAJfQ0KMjA0OTogICAgICAgICAgICAgICAgCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwOEYzNiAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwOEYzOCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwQTczQw0KQkZEMDhGM0EgICAgICAwQzAwICAgTk9QDQoyMDUwOiAgICAgICAgICAgICAgICANCjIwNTE6ICAgICAgICAgICAgICAgIAlyZXR1cm4geFJldHVybjsNCkJGRDA4RjNDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjIwNTI6ICAgICAgICAgICAgICAgIH0NCkJGRDA4RjQwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOEY0MiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOEY0NCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOEY0NiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOEY0OCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOEY0QSAgICAgIDBDMDAgICBOT1ANCjIwNTM6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjA1NDogICAgICAgICAgICAgICAgDQoyMDU1OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhRdWV1ZUlzUXVldWVGdWxsRnJvbUlTUiggY29uc3QgUXVldWVIYW5kbGVfdCB4UXVldWUgKQ0KMjA1NjogICAgICAgICAgICAgICAgew0KQkZEMDg0RjggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4NEZBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4NEZDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4NEZFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwODUwMCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQoyMDU3OiAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhSZXR1cm47DQoyMDU4OiAgICAgICAgICAgICAgICANCjIwNTk6ICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHhRdWV1ZSApOw0KQkZEMDg1MDQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDg1MDggIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDg1MUUNCkJGRDA4NTBDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwODUwRSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwODUxMCAgOUUzQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTAyOA0KQkZEMDg1MTIgIDMwQTA5RTNDICAgTFdDMSBGMTcsIDEyNDQ4KEdQKQ0KQkZEMDg1MTQgIDA4MEIzMEEwICAgQURESVUgQTEsIFpFUk8sIDIwNTkNCkJGRDA4NTE2ICAgICAgMDgwQiAgIExCVSBTMCwgMTEoUzApDQpCRkQwODUxOCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA4NTFBICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwODUxQyAgICAgIDBDMDAgICBOT1ANCjIwNjA6ICAgICAgICAgICAgICAgIAlpZiggKCAoIFF1ZXVlX3QgKiApIHhRdWV1ZSApLT51eE1lc3NhZ2VzV2FpdGluZyA9PSAoICggUXVldWVfdCAqICkgeFF1ZXVlICktPnV4TGVuZ3RoICkNCkJGRDA4NTFFICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA4NTIyICAgICAgNjlBRSAgIExXIFYxLCA1NihWMCkNCkJGRDA4NTI0ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA4NTI4ICAgICAgNjkyRiAgIExXIFYwLCA2MChWMCkNCkJGRDA4NTJBICAwMDA2QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDg1M0ENCkJGRDA4NTJDICAwQzAwMDAwNiAgIFNMTCBaRVJPLCBBMiwgMQ0KQkZEMDg1MkUgICAgICAwQzAwICAgTk9QDQoyMDYxOiAgICAgICAgICAgICAgICAJew0KMjA2MjogICAgICAgICAgICAgICAgCQl4UmV0dXJuID0gcGRUUlVFOw0KQkZEMDg1MzAgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA4NTMyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA4NTM2ICAgICAgQ0MwMyAgIEIgMHhCRkQwODUzRQ0KQkZEMDg1MzggICAgICAwQzAwICAgTk9QDQoyMDYzOiAgICAgICAgICAgICAgICAJfQ0KMjA2NDogICAgICAgICAgICAgICAgCWVsc2UNCjIwNjU6ICAgICAgICAgICAgICAgIAl7DQoyMDY2OiAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSBwZEZBTFNFOw0KQkZEMDg1M0EgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQoyMDY3OiAgICAgICAgICAgICAgICAJfQ0KMjA2ODogICAgICAgICAgICAgICAgDQoyMDY5OiAgICAgICAgICAgICAgICAJcmV0dXJuIHhSZXR1cm47DQpCRkQwODUzRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoyMDcwOiAgICAgICAgICAgICAgICB9IC8qbGludCAhZTgxOCB4UXVldWUgY291bGQgbm90IGJlIHBvaW50ZXIgdG8gY29uc3QgYmVjYXVzZSBpdCBpcyBhIHR5cGVkZWYuICovDQpCRkQwODU0MiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDg1NDQgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDg1NDYgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDg1NDggICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDg1NEEgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDg1NEMgICAgICAwQzAwICAgTk9QDQoyMDcxOiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIwNzI6ICAgICAgICAgICAgICAgIA0KMjA3MzogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX0NPX1JPVVRJTkVTID09IDEgKQ0KMjA3NDogICAgICAgICAgICAgICAgDQoyMDc1OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UXVldWVDUlNlbmQoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCBjb25zdCB2b2lkICpwdkl0ZW1Ub1F1ZXVlLCBUaWNrVHlwZV90IHhUaWNrc1RvV2FpdCApDQoyMDc2OiAgICAgICAgICAgICAgICAJew0KMjA3NzogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjIwNzg6ICAgICAgICAgICAgICAgIAlRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KMjA3OTogICAgICAgICAgICAgICAgDQoyMDgwOiAgICAgICAgICAgICAgICAJCS8qIElmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGZ1bGwgd2UgbWF5IGhhdmUgdG8gYmxvY2suICBBIGNyaXRpY2FsIHNlY3Rpb24NCjIwODE6ICAgICAgICAgICAgICAgIAkJaXMgcmVxdWlyZWQgdG8gcHJldmVudCBhbiBpbnRlcnJ1cHQgcmVtb3Zpbmcgc29tZXRoaW5nIGZyb20gdGhlIHF1ZXVlDQoyMDgyOiAgICAgICAgICAgICAgICAJCWJldHdlZW4gdGhlIGNoZWNrIHRvIHNlZSBpZiB0aGUgcXVldWUgaXMgZnVsbCBhbmQgYmxvY2tpbmcgb24gdGhlIHF1ZXVlLiAqLw0KMjA4MzogICAgICAgICAgICAgICAgCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQoyMDg0OiAgICAgICAgICAgICAgICAJCXsNCjIwODU6ICAgICAgICAgICAgICAgIAkJCWlmKCBwcnZJc1F1ZXVlRnVsbCggcHhRdWV1ZSApICE9IHBkRkFMU0UgKQ0KMjA4NjogICAgICAgICAgICAgICAgCQkJew0KMjA4NzogICAgICAgICAgICAgICAgCQkJCS8qIFRoZSBxdWV1ZSBpcyBmdWxsIC0gZG8gd2Ugd2FudCB0byBibG9jayBvciBqdXN0IGxlYXZlIHdpdGhvdXQNCjIwODg6ICAgICAgICAgICAgICAgIAkJCQlwb3N0aW5nPyAqLw0KMjA4OTogICAgICAgICAgICAgICAgCQkJCWlmKCB4VGlja3NUb1dhaXQgPiAoIFRpY2tUeXBlX3QgKSAwICkNCjIwOTA6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMDkxOiAgICAgICAgICAgICAgICAJCQkJCS8qIEFzIHRoaXMgaXMgY2FsbGVkIGZyb20gYSBjb3JvdXRpbmUgd2UgY2Fubm90IGJsb2NrIGRpcmVjdGx5LCBidXQNCjIwOTI6ICAgICAgICAgICAgICAgIAkJCQkJcmV0dXJuIGluZGljYXRpbmcgdGhhdCB3ZSBuZWVkIHRvIGJsb2NrLiAqLw0KMjA5MzogICAgICAgICAgICAgICAgCQkJCQl2Q29Sb3V0aW5lQWRkVG9EZWxheWVkTGlzdCggeFRpY2tzVG9XYWl0LCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKTsNCjIwOTQ6ICAgICAgICAgICAgICAgIAkJCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQoyMDk1OiAgICAgICAgICAgICAgICAJCQkJCXJldHVybiBlcnJRVUVVRV9CTE9DS0VEOw0KMjA5NjogICAgICAgICAgICAgICAgCQkJCX0NCjIwOTc6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoyMDk4OiAgICAgICAgICAgICAgICAJCQkJew0KMjA5OTogICAgICAgICAgICAgICAgCQkJCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCjIxMDA6ICAgICAgICAgICAgICAgIAkJCQkJcmV0dXJuIGVyclFVRVVFX0ZVTEw7DQoyMTAxOiAgICAgICAgICAgICAgICAJCQkJfQ0KMjEwMjogICAgICAgICAgICAgICAgCQkJfQ0KMjEwMzogICAgICAgICAgICAgICAgCQl9DQoyMTA0OiAgICAgICAgICAgICAgICAJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KMjEwNTogICAgICAgICAgICAgICAgDQoyMTA2OiAgICAgICAgICAgICAgICAJCXBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKTsNCjIxMDc6ICAgICAgICAgICAgICAgIAkJew0KMjEwODogICAgICAgICAgICAgICAgCQkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nIDwgcHhRdWV1ZS0+dXhMZW5ndGggKQ0KMjEwOTogICAgICAgICAgICAgICAgCQkJew0KMjExMDogICAgICAgICAgICAgICAgCQkJCS8qIFRoZXJlIGlzIHJvb20gaW4gdGhlIHF1ZXVlLCBjb3B5IHRoZSBkYXRhIGludG8gdGhlIHF1ZXVlLiAqLw0KMjExMTogICAgICAgICAgICAgICAgCQkJCXBydkNvcHlEYXRhVG9RdWV1ZSggcHhRdWV1ZSwgcHZJdGVtVG9RdWV1ZSwgcXVldWVTRU5EX1RPX0JBQ0sgKTsNCjIxMTI6ICAgICAgICAgICAgICAgIAkJCQl4UmV0dXJuID0gcGRQQVNTOw0KMjExMzogICAgICAgICAgICAgICAgDQoyMTE0OiAgICAgICAgICAgICAgICAJCQkJLyogV2VyZSBhbnkgY28tcm91dGluZXMgd2FpdGluZyBmb3IgZGF0YSB0byBiZWNvbWUgYXZhaWxhYmxlPyAqLw0KMjExNTogICAgICAgICAgICAgICAgCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQoyMTE2OiAgICAgICAgICAgICAgICAJCQkJew0KMjExNzogICAgICAgICAgICAgICAgCQkJCQkvKiBJbiB0aGlzIGluc3RhbmNlIHRoZSBjby1yb3V0aW5lIGNvdWxkIGJlIHBsYWNlZCBkaXJlY3RseQ0KMjExODogICAgICAgICAgICAgICAgCQkJCQlpbnRvIHRoZSByZWFkeSBsaXN0IGFzIHdlIGFyZSB3aXRoaW4gYSBjcml0aWNhbCBzZWN0aW9uLg0KMjExOTogICAgICAgICAgICAgICAgCQkJCQlJbnN0ZWFkIHRoZSBzYW1lIHBlbmRpbmcgcmVhZHkgbGlzdCBtZWNoYW5pc20gaXMgdXNlZCBhcyBpZg0KMjEyMDogICAgICAgICAgICAgICAgCQkJCQl0aGUgZXZlbnQgd2VyZSBjYXVzZWQgZnJvbSB3aXRoaW4gYW4gaW50ZXJydXB0LiAqLw0KMjEyMTogICAgICAgICAgICAgICAgCQkJCQlpZiggeENvUm91dGluZVJlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApICE9IHBkRkFMU0UgKQ0KMjEyMjogICAgICAgICAgICAgICAgCQkJCQl7DQoyMTIzOiAgICAgICAgICAgICAgICAJCQkJCQkvKiBUaGUgY28tcm91dGluZSB3YWl0aW5nIGhhcyBhIGhpZ2hlciBwcmlvcml0eSBzbyByZWNvcmQNCjIxMjQ6ICAgICAgICAgICAgICAgIAkJCQkJCXRoYXQgYSB5aWVsZCBtaWdodCBiZSBhcHByb3ByaWF0ZS4gKi8NCjIxMjU6ICAgICAgICAgICAgICAgIAkJCQkJCXhSZXR1cm4gPSBlcnJRVUVVRV9ZSUVMRDsNCjIxMjY6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjEyNzogICAgICAgICAgICAgICAgCQkJCQllbHNlDQoyMTI4OiAgICAgICAgICAgICAgICAJCQkJCXsNCjIxMjk6ICAgICAgICAgICAgICAgIAkJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIxMzA6ICAgICAgICAgICAgICAgIAkJCQkJfQ0KMjEzMTogICAgICAgICAgICAgICAgCQkJCX0NCjIxMzI6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoyMTMzOiAgICAgICAgICAgICAgICAJCQkJew0KMjEzNDogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMTM1OiAgICAgICAgICAgICAgICAJCQkJfQ0KMjEzNjogICAgICAgICAgICAgICAgCQkJfQ0KMjEzNzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjEzODogICAgICAgICAgICAgICAgCQkJew0KMjEzOTogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSBlcnJRVUVVRV9GVUxMOw0KMjE0MDogICAgICAgICAgICAgICAgCQkJfQ0KMjE0MTogICAgICAgICAgICAgICAgCQl9DQoyMTQyOiAgICAgICAgICAgICAgICAJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KMjE0MzogICAgICAgICAgICAgICAgDQoyMTQ0OiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KMjE0NTogICAgICAgICAgICAgICAgCX0NCjIxNDY6ICAgICAgICAgICAgICAgIA0KMjE0NzogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyAqLw0KMjE0ODogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMTQ5OiAgICAgICAgICAgICAgICANCjIxNTA6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyA9PSAxICkNCjIxNTE6ICAgICAgICAgICAgICAgIA0KMjE1MjogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFF1ZXVlQ1JSZWNlaXZlKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSwgdm9pZCAqcHZCdWZmZXIsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjIxNTM6ICAgICAgICAgICAgICAgIAl7DQoyMTU0OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UmV0dXJuOw0KMjE1NTogICAgICAgICAgICAgICAgCVF1ZXVlX3QgKiBjb25zdCBweFF1ZXVlID0gKCBRdWV1ZV90ICogKSB4UXVldWU7DQoyMTU2OiAgICAgICAgICAgICAgICANCjIxNTc6ICAgICAgICAgICAgICAgIAkJLyogSWYgdGhlIHF1ZXVlIGlzIGFscmVhZHkgZW1wdHkgd2UgbWF5IGhhdmUgdG8gYmxvY2suICBBIGNyaXRpY2FsIHNlY3Rpb24NCjIxNTg6ICAgICAgICAgICAgICAgIAkJaXMgcmVxdWlyZWQgdG8gcHJldmVudCBhbiBpbnRlcnJ1cHQgYWRkaW5nIHNvbWV0aGluZyB0byB0aGUgcXVldWUNCjIxNTk6ICAgICAgICAgICAgICAgIAkJYmV0d2VlbiB0aGUgY2hlY2sgdG8gc2VlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSBhbmQgYmxvY2tpbmcgb24gdGhlIHF1ZXVlLiAqLw0KMjE2MDogICAgICAgICAgICAgICAgCQlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQoyMTYxOiAgICAgICAgICAgICAgICAJCXsNCjIxNjI6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA9PSAoIFVCYXNlVHlwZV90ICkgMCApDQoyMTYzOiAgICAgICAgICAgICAgICAJCQl7DQoyMTY0OiAgICAgICAgICAgICAgICAJCQkJLyogVGhlcmUgYXJlIG5vIG1lc3NhZ2VzIGluIHRoZSBxdWV1ZSwgZG8gd2Ugd2FudCB0byBibG9jayBvciBqdXN0DQoyMTY1OiAgICAgICAgICAgICAgICAJCQkJbGVhdmUgd2l0aCBub3RoaW5nPyAqLw0KMjE2NjogICAgICAgICAgICAgICAgCQkJCWlmKCB4VGlja3NUb1dhaXQgPiAoIFRpY2tUeXBlX3QgKSAwICkNCjIxNjc6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMTY4OiAgICAgICAgICAgICAgICAJCQkJCS8qIEFzIHRoaXMgaXMgYSBjby1yb3V0aW5lIHdlIGNhbm5vdCBibG9jayBkaXJlY3RseSwgYnV0IHJldHVybg0KMjE2OTogICAgICAgICAgICAgICAgCQkJCQlpbmRpY2F0aW5nIHRoYXQgd2UgbmVlZCB0byBibG9jay4gKi8NCjIxNzA6ICAgICAgICAgICAgICAgIAkJCQkJdkNvUm91dGluZUFkZFRvRGVsYXllZExpc3QoIHhUaWNrc1RvV2FpdCwgJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICk7DQoyMTcxOiAgICAgICAgICAgICAgICAJCQkJCXBvcnRFTkFCTEVfSU5URVJSVVBUUygpOw0KMjE3MjogICAgICAgICAgICAgICAgCQkJCQlyZXR1cm4gZXJyUVVFVUVfQkxPQ0tFRDsNCjIxNzM6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMTc0OiAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMjE3NTogICAgICAgICAgICAgICAgCQkJCXsNCjIxNzY6ICAgICAgICAgICAgICAgIAkJCQkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQoyMTc3OiAgICAgICAgICAgICAgICAJCQkJCXJldHVybiBlcnJRVUVVRV9GVUxMOw0KMjE3ODogICAgICAgICAgICAgICAgCQkJCX0NCjIxNzk6ICAgICAgICAgICAgICAgIAkJCX0NCjIxODA6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjIxODE6ICAgICAgICAgICAgICAgIAkJCXsNCjIxODI6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMTgzOiAgICAgICAgICAgICAgICAJCQl9DQoyMTg0OiAgICAgICAgICAgICAgICAJCX0NCjIxODU6ICAgICAgICAgICAgICAgIAkJcG9ydEVOQUJMRV9JTlRFUlJVUFRTKCk7DQoyMTg2OiAgICAgICAgICAgICAgICANCjIxODc6ICAgICAgICAgICAgICAgIAkJcG9ydERJU0FCTEVfSU5URVJSVVBUUygpOw0KMjE4ODogICAgICAgICAgICAgICAgCQl7DQoyMTg5OiAgICAgICAgICAgICAgICAJCQlpZiggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgPiAoIFVCYXNlVHlwZV90ICkgMCApDQoyMTkwOiAgICAgICAgICAgICAgICAJCQl7DQoyMTkxOiAgICAgICAgICAgICAgICAJCQkJLyogRGF0YSBpcyBhdmFpbGFibGUgZnJvbSB0aGUgcXVldWUuICovDQoyMTkyOiAgICAgICAgICAgICAgICAJCQkJcHhRdWV1ZS0+dS5wY1JlYWRGcm9tICs9IHB4UXVldWUtPnV4SXRlbVNpemU7DQoyMTkzOiAgICAgICAgICAgICAgICAJCQkJaWYoIHB4UXVldWUtPnUucGNSZWFkRnJvbSA+PSBweFF1ZXVlLT5wY1RhaWwgKQ0KMjE5NDogICAgICAgICAgICAgICAgCQkJCXsNCjIxOTU6ICAgICAgICAgICAgICAgIAkJCQkJcHhRdWV1ZS0+dS5wY1JlYWRGcm9tID0gcHhRdWV1ZS0+cGNIZWFkOw0KMjE5NjogICAgICAgICAgICAgICAgCQkJCX0NCjIxOTc6ICAgICAgICAgICAgICAgIAkJCQllbHNlDQoyMTk4OiAgICAgICAgICAgICAgICAJCQkJew0KMjE5OTogICAgICAgICAgICAgICAgCQkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMjAwOiAgICAgICAgICAgICAgICAJCQkJfQ0KMjIwMTogICAgICAgICAgICAgICAgCQkJCS0tKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyApOw0KMjIwMjogICAgICAgICAgICAgICAgCQkJCSggdm9pZCApIG1lbWNweSggKCB2b2lkICogKSBwdkJ1ZmZlciwgKCB2b2lkICogKSBweFF1ZXVlLT51LnBjUmVhZEZyb20sICggdW5zaWduZWQgKSBweFF1ZXVlLT51eEl0ZW1TaXplICk7DQoyMjAzOiAgICAgICAgICAgICAgICANCjIyMDQ6ICAgICAgICAgICAgICAgIAkJCQl4UmV0dXJuID0gcGRQQVNTOw0KMjIwNTogICAgICAgICAgICAgICAgDQoyMjA2OiAgICAgICAgICAgICAgICAJCQkJLyogV2VyZSBhbnkgY28tcm91dGluZXMgd2FpdGluZyBmb3Igc3BhY2UgdG8gYmVjb21lIGF2YWlsYWJsZT8gKi8NCjIyMDc6ICAgICAgICAgICAgICAgIAkJCQlpZiggbGlzdExJU1RfSVNfRU1QVFkoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1NlbmQgKSApID09IHBkRkFMU0UgKQ0KMjIwODogICAgICAgICAgICAgICAgCQkJCXsNCjIyMDk6ICAgICAgICAgICAgICAgIAkJCQkJLyogSW4gdGhpcyBpbnN0YW5jZSB0aGUgY28tcm91dGluZSBjb3VsZCBiZSBwbGFjZWQgZGlyZWN0bHkNCjIyMTA6ICAgICAgICAgICAgICAgIAkJCQkJaW50byB0aGUgcmVhZHkgbGlzdCBhcyB3ZSBhcmUgd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbi4NCjIyMTE6ICAgICAgICAgICAgICAgIAkJCQkJSW5zdGVhZCB0aGUgc2FtZSBwZW5kaW5nIHJlYWR5IGxpc3QgbWVjaGFuaXNtIGlzIHVzZWQgYXMgaWYNCjIyMTI6ICAgICAgICAgICAgICAgIAkJCQkJdGhlIGV2ZW50IHdlcmUgY2F1c2VkIGZyb20gd2l0aGluIGFuIGludGVycnVwdC4gKi8NCjIyMTM6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhDb1JvdXRpbmVSZW1vdmVGcm9tRXZlbnRMaXN0KCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSAhPSBwZEZBTFNFICkNCjIyMTQ6ICAgICAgICAgICAgICAgIAkJCQkJew0KMjIxNTogICAgICAgICAgICAgICAgCQkJCQkJeFJldHVybiA9IGVyclFVRVVFX1lJRUxEOw0KMjIxNjogICAgICAgICAgICAgICAgCQkJCQl9DQoyMjE3OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjIyMTg6ICAgICAgICAgICAgICAgIAkJCQkJew0KMjIxOTogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjIyMDogICAgICAgICAgICAgICAgCQkJCQl9DQoyMjIxOiAgICAgICAgICAgICAgICAJCQkJfQ0KMjIyMjogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjIyMjM6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMjI0OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyMjU6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMjI2OiAgICAgICAgICAgICAgICAJCQl9DQoyMjI3OiAgICAgICAgICAgICAgICAJCQllbHNlDQoyMjI4OiAgICAgICAgICAgICAgICAJCQl7DQoyMjI5OiAgICAgICAgICAgICAgICAJCQkJeFJldHVybiA9IHBkRkFJTDsNCjIyMzA6ICAgICAgICAgICAgICAgIAkJCX0NCjIyMzE6ICAgICAgICAgICAgICAgIAkJfQ0KMjIzMjogICAgICAgICAgICAgICAgCQlwb3J0RU5BQkxFX0lOVEVSUlVQVFMoKTsNCjIyMzM6ICAgICAgICAgICAgICAgIA0KMjIzNDogICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCjIyMzU6ICAgICAgICAgICAgICAgIAl9DQoyMjM2OiAgICAgICAgICAgICAgICANCjIyMzc6ICAgICAgICAgICAgICAgICNlbmRpZiAvKiBjb25maWdVU0VfQ09fUk9VVElORVMgKi8NCjIyMzg6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjIzOTogICAgICAgICAgICAgICAgDQoyMjQwOiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfQ09fUk9VVElORVMgPT0gMSApDQoyMjQxOiAgICAgICAgICAgICAgICANCjIyNDI6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhRdWV1ZUNSU2VuZEZyb21JU1IoIFF1ZXVlSGFuZGxlX3QgeFF1ZXVlLCBjb25zdCB2b2lkICpwdkl0ZW1Ub1F1ZXVlLCBCYXNlVHlwZV90IHhDb1JvdXRpbmVQcmV2aW91c2x5V29rZW4gKQ0KMjI0MzogICAgICAgICAgICAgICAgCXsNCjIyNDQ6ICAgICAgICAgICAgICAgIAlRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KMjI0NTogICAgICAgICAgICAgICAgDQoyMjQ2OiAgICAgICAgICAgICAgICAJCS8qIENhbm5vdCBibG9jayB3aXRoaW4gYW4gSVNSIHNvIGlmIHRoZXJlIGlzIG5vIHNwYWNlIG9uIHRoZSBxdWV1ZSB0aGVuDQoyMjQ3OiAgICAgICAgICAgICAgICAJCWV4aXQgd2l0aG91dCBkb2luZyBhbnl0aGluZy4gKi8NCjIyNDg6ICAgICAgICAgICAgICAgIAkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nIDwgcHhRdWV1ZS0+dXhMZW5ndGggKQ0KMjI0OTogICAgICAgICAgICAgICAgCQl7DQoyMjUwOiAgICAgICAgICAgICAgICAJCQlwcnZDb3B5RGF0YVRvUXVldWUoIHB4UXVldWUsIHB2SXRlbVRvUXVldWUsIHF1ZXVlU0VORF9UT19CQUNLICk7DQoyMjUxOiAgICAgICAgICAgICAgICANCjIyNTI6ICAgICAgICAgICAgICAgIAkJCS8qIFdlIG9ubHkgd2FudCB0byB3YWtlIG9uZSBjby1yb3V0aW5lIHBlciBJU1IsIHNvIGNoZWNrIHRoYXQgYQ0KMjI1MzogICAgICAgICAgICAgICAgCQkJY28tcm91dGluZSBoYXMgbm90IGFscmVhZHkgYmVlbiB3b2tlbi4gKi8NCjIyNTQ6ICAgICAgICAgICAgICAgIAkJCWlmKCB4Q29Sb3V0aW5lUHJldmlvdXNseVdva2VuID09IHBkRkFMU0UgKQ0KMjI1NTogICAgICAgICAgICAgICAgCQkJew0KMjI1NjogICAgICAgICAgICAgICAgCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQoyMjU3OiAgICAgICAgICAgICAgICAJCQkJew0KMjI1ODogICAgICAgICAgICAgICAgCQkJCQlpZiggeENvUm91dGluZVJlbW92ZUZyb21FdmVudExpc3QoICYoIHB4UXVldWUtPnhUYXNrc1dhaXRpbmdUb1JlY2VpdmUgKSApICE9IHBkRkFMU0UgKQ0KMjI1OTogICAgICAgICAgICAgICAgCQkJCQl7DQoyMjYwOiAgICAgICAgICAgICAgICAJCQkJCQlyZXR1cm4gcGRUUlVFOw0KMjI2MTogICAgICAgICAgICAgICAgCQkJCQl9DQoyMjYyOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjIyNjM6ICAgICAgICAgICAgICAgIAkJCQkJew0KMjI2NDogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjI2NTogICAgICAgICAgICAgICAgCQkJCQl9DQoyMjY2OiAgICAgICAgICAgICAgICAJCQkJfQ0KMjI2NzogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjIyNjg6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMjY5OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyNzA6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMjcxOiAgICAgICAgICAgICAgICAJCQl9DQoyMjcyOiAgICAgICAgICAgICAgICAJCQllbHNlDQoyMjczOiAgICAgICAgICAgICAgICAJCQl7DQoyMjc0OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjI3NTogICAgICAgICAgICAgICAgCQkJfQ0KMjI3NjogICAgICAgICAgICAgICAgCQl9DQoyMjc3OiAgICAgICAgICAgICAgICAJCWVsc2UNCjIyNzg6ICAgICAgICAgICAgICAgIAkJew0KMjI3OTogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjI4MDogICAgICAgICAgICAgICAgCQl9DQoyMjgxOiAgICAgICAgICAgICAgICANCjIyODI6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhDb1JvdXRpbmVQcmV2aW91c2x5V29rZW47DQoyMjgzOiAgICAgICAgICAgICAgICAJfQ0KMjI4NDogICAgICAgICAgICAgICAgDQoyMjg1OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX0NPX1JPVVRJTkVTICovDQoyMjg2OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIyODc6ICAgICAgICAgICAgICAgIA0KMjI4ODogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX0NPX1JPVVRJTkVTID09IDEgKQ0KMjI4OTogICAgICAgICAgICAgICAgDQoyMjkwOiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UXVldWVDUlJlY2VpdmVGcm9tSVNSKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSwgdm9pZCAqcHZCdWZmZXIsIEJhc2VUeXBlX3QgKnB4Q29Sb3V0aW5lV29rZW4gKQ0KMjI5MTogICAgICAgICAgICAgICAgCXsNCjIyOTI6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm47DQoyMjkzOiAgICAgICAgICAgICAgICAJUXVldWVfdCAqIGNvbnN0IHB4UXVldWUgPSAoIFF1ZXVlX3QgKiApIHhRdWV1ZTsNCjIyOTQ6ICAgICAgICAgICAgICAgIA0KMjI5NTogICAgICAgICAgICAgICAgCQkvKiBXZSBjYW5ub3QgYmxvY2sgZnJvbSBhbiBJU1IsIHNvIGNoZWNrIHRoZXJlIGlzIGRhdGEgYXZhaWxhYmxlLiBJZg0KMjI5NjogICAgICAgICAgICAgICAgCQlub3QgdGhlbiBqdXN0IGxlYXZlIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuICovDQoyMjk3OiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlLT51eE1lc3NhZ2VzV2FpdGluZyA+ICggVUJhc2VUeXBlX3QgKSAwICkNCjIyOTg6ICAgICAgICAgICAgICAgIAkJew0KMjI5OTogICAgICAgICAgICAgICAgCQkJLyogQ29weSB0aGUgZGF0YSBmcm9tIHRoZSBxdWV1ZS4gKi8NCjIzMDA6ICAgICAgICAgICAgICAgIAkJCXB4UXVldWUtPnUucGNSZWFkRnJvbSArPSBweFF1ZXVlLT51eEl0ZW1TaXplOw0KMjMwMTogICAgICAgICAgICAgICAgCQkJaWYoIHB4UXVldWUtPnUucGNSZWFkRnJvbSA+PSBweFF1ZXVlLT5wY1RhaWwgKQ0KMjMwMjogICAgICAgICAgICAgICAgCQkJew0KMjMwMzogICAgICAgICAgICAgICAgCQkJCXB4UXVldWUtPnUucGNSZWFkRnJvbSA9IHB4UXVldWUtPnBjSGVhZDsNCjIzMDQ6ICAgICAgICAgICAgICAgIAkJCX0NCjIzMDU6ICAgICAgICAgICAgICAgIAkJCWVsc2UNCjIzMDY6ICAgICAgICAgICAgICAgIAkJCXsNCjIzMDc6ICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMzA4OiAgICAgICAgICAgICAgICAJCQl9DQoyMzA5OiAgICAgICAgICAgICAgICAJCQktLSggcHhRdWV1ZS0+dXhNZXNzYWdlc1dhaXRpbmcgKTsNCjIzMTA6ICAgICAgICAgICAgICAgIAkJCSggdm9pZCApIG1lbWNweSggKCB2b2lkICogKSBwdkJ1ZmZlciwgKCB2b2lkICogKSBweFF1ZXVlLT51LnBjUmVhZEZyb20sICggdW5zaWduZWQgKSBweFF1ZXVlLT51eEl0ZW1TaXplICk7DQoyMzExOiAgICAgICAgICAgICAgICANCjIzMTI6ICAgICAgICAgICAgICAgIAkJCWlmKCAoICpweENvUm91dGluZVdva2VuICkgPT0gcGRGQUxTRSApDQoyMzEzOiAgICAgICAgICAgICAgICAJCQl7DQoyMzE0OiAgICAgICAgICAgICAgICAJCQkJaWYoIGxpc3RMSVNUX0lTX0VNUFRZKCAmKCBweFF1ZXVlLT54VGFza3NXYWl0aW5nVG9TZW5kICkgKSA9PSBwZEZBTFNFICkNCjIzMTU6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMzE2OiAgICAgICAgICAgICAgICAJCQkJCWlmKCB4Q29Sb3V0aW5lUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvU2VuZCApICkgIT0gcGRGQUxTRSApDQoyMzE3OiAgICAgICAgICAgICAgICAJCQkJCXsNCjIzMTg6ICAgICAgICAgICAgICAgIAkJCQkJCSpweENvUm91dGluZVdva2VuID0gcGRUUlVFOw0KMjMxOTogICAgICAgICAgICAgICAgCQkJCQl9DQoyMzIwOiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjIzMjE6ICAgICAgICAgICAgICAgIAkJCQkJew0KMjMyMjogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjMyMzogICAgICAgICAgICAgICAgCQkJCQl9DQoyMzI0OiAgICAgICAgICAgICAgICAJCQkJfQ0KMjMyNTogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjIzMjY6ICAgICAgICAgICAgICAgIAkJCQl7DQoyMzI3OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIzMjg6ICAgICAgICAgICAgICAgIAkJCQl9DQoyMzI5OiAgICAgICAgICAgICAgICAJCQl9DQoyMzMwOiAgICAgICAgICAgICAgICAJCQllbHNlDQoyMzMxOiAgICAgICAgICAgICAgICAJCQl7DQoyMzMyOiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjMzMzogICAgICAgICAgICAgICAgCQkJfQ0KMjMzNDogICAgICAgICAgICAgICAgDQoyMzM1OiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRQQVNTOw0KMjMzNjogICAgICAgICAgICAgICAgCQl9DQoyMzM3OiAgICAgICAgICAgICAgICAJCWVsc2UNCjIzMzg6ICAgICAgICAgICAgICAgIAkJew0KMjMzOTogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkRkFJTDsNCjIzNDA6ICAgICAgICAgICAgICAgIAkJfQ0KMjM0MTogICAgICAgICAgICAgICAgDQoyMzQyOiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KMjM0MzogICAgICAgICAgICAgICAgCX0NCjIzNDQ6ICAgICAgICAgICAgICAgIA0KMjM0NTogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9DT19ST1VUSU5FUyAqLw0KMjM0NjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMzQ3OiAgICAgICAgICAgICAgICANCjIzNDg6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkUgPiAwICkNCjIzNDk6ICAgICAgICAgICAgICAgIA0KMjM1MDogICAgICAgICAgICAgICAgCXZvaWQgdlF1ZXVlQWRkVG9SZWdpc3RyeSggUXVldWVIYW5kbGVfdCB4UXVldWUsIGNvbnN0IGNoYXIgKnBjUXVldWVOYW1lICkgLypsaW50ICFlOTcxIFVucXVhbGlmaWVkIGNoYXIgdHlwZXMgYXJlIGFsbG93ZWQgZm9yIHN0cmluZ3MgYW5kIHNpbmdsZSBjaGFyYWN0ZXJzIG9ubHkuICovDQoyMzUxOiAgICAgICAgICAgICAgICAJew0KMjM1MjogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4Ow0KMjM1MzogICAgICAgICAgICAgICAgDQoyMzU0OiAgICAgICAgICAgICAgICAJCS8qIFNlZSBpZiB0aGVyZSBpcyBhbiBlbXB0eSBzcGFjZSBpbiB0aGUgcmVnaXN0cnkuICBBIE5VTEwgbmFtZSBkZW5vdGVzDQoyMzU1OiAgICAgICAgICAgICAgICAJCWEgZnJlZSBzbG90LiAqLw0KMjM1NjogICAgICAgICAgICAgICAgCQlmb3IoIHV4ID0gKCBVQmFzZVR5cGVfdCApIDBVOyB1eCA8ICggVUJhc2VUeXBlX3QgKSBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFOyB1eCsrICkNCjIzNTc6ICAgICAgICAgICAgICAgIAkJew0KMjM1ODogICAgICAgICAgICAgICAgCQkJaWYoIHhRdWV1ZVJlZ2lzdHJ5WyB1eCBdLnBjUXVldWVOYW1lID09IE5VTEwgKQ0KMjM1OTogICAgICAgICAgICAgICAgCQkJew0KMjM2MDogICAgICAgICAgICAgICAgCQkJCS8qIFN0b3JlIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHF1ZXVlLiAqLw0KMjM2MTogICAgICAgICAgICAgICAgCQkJCXhRdWV1ZVJlZ2lzdHJ5WyB1eCBdLnBjUXVldWVOYW1lID0gcGNRdWV1ZU5hbWU7DQoyMzYyOiAgICAgICAgICAgICAgICAJCQkJeFF1ZXVlUmVnaXN0cnlbIHV4IF0ueEhhbmRsZSA9IHhRdWV1ZTsNCjIzNjM6ICAgICAgICAgICAgICAgIA0KMjM2NDogICAgICAgICAgICAgICAgCQkJCXRyYWNlUVVFVUVfUkVHSVNUUllfQUREKCB4UXVldWUsIHBjUXVldWVOYW1lICk7DQoyMzY1OiAgICAgICAgICAgICAgICAJCQkJYnJlYWs7DQoyMzY2OiAgICAgICAgICAgICAgICAJCQl9DQoyMzY3OiAgICAgICAgICAgICAgICAJCQllbHNlDQoyMzY4OiAgICAgICAgICAgICAgICAJCQl7DQoyMzY5OiAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjM3MDogICAgICAgICAgICAgICAgCQkJfQ0KMjM3MTogICAgICAgICAgICAgICAgCQl9DQoyMzcyOiAgICAgICAgICAgICAgICAJfQ0KMjM3MzogICAgICAgICAgICAgICAgDQoyMzc0OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSAqLw0KMjM3NTogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyMzc2OiAgICAgICAgICAgICAgICANCjIzNzc6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1FVRVVFX1JFR0lTVFJZX1NJWkUgPiAwICkNCjIzNzg6ICAgICAgICAgICAgICAgIA0KMjM3OTogICAgICAgICAgICAgICAgCXZvaWQgdlF1ZXVlVW5yZWdpc3RlclF1ZXVlKCBRdWV1ZUhhbmRsZV90IHhRdWV1ZSApDQoyMzgwOiAgICAgICAgICAgICAgICAJew0KMjM4MTogICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHV4Ow0KMjM4MjogICAgICAgICAgICAgICAgDQoyMzgzOiAgICAgICAgICAgICAgICAJCS8qIFNlZSBpZiB0aGUgaGFuZGxlIG9mIHRoZSBxdWV1ZSBiZWluZyB1bnJlZ2lzdGVyZWQgaW4gYWN0dWFsbHkgaW4gdGhlDQoyMzg0OiAgICAgICAgICAgICAgICAJCXJlZ2lzdHJ5LiAqLw0KMjM4NTogICAgICAgICAgICAgICAgCQlmb3IoIHV4ID0gKCBVQmFzZVR5cGVfdCApIDBVOyB1eCA8ICggVUJhc2VUeXBlX3QgKSBjb25maWdRVUVVRV9SRUdJU1RSWV9TSVpFOyB1eCsrICkNCjIzODY6ICAgICAgICAgICAgICAgIAkJew0KMjM4NzogICAgICAgICAgICAgICAgCQkJaWYoIHhRdWV1ZVJlZ2lzdHJ5WyB1eCBdLnhIYW5kbGUgPT0geFF1ZXVlICkNCjIzODg6ICAgICAgICAgICAgICAgIAkJCXsNCjIzODk6ICAgICAgICAgICAgICAgIAkJCQkvKiBTZXQgdGhlIG5hbWUgdG8gTlVMTCB0byBzaG93IHRoYXQgdGhpcyBzbG90IGlmIGZyZWUgYWdhaW4uICovDQoyMzkwOiAgICAgICAgICAgICAgICAJCQkJeFF1ZXVlUmVnaXN0cnlbIHV4IF0ucGNRdWV1ZU5hbWUgPSBOVUxMOw0KMjM5MTogICAgICAgICAgICAgICAgCQkJCWJyZWFrOw0KMjM5MjogICAgICAgICAgICAgICAgCQkJfQ0KMjM5MzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjM5NDogICAgICAgICAgICAgICAgCQkJew0KMjM5NTogICAgICAgICAgICAgICAgCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIzOTY6ICAgICAgICAgICAgICAgIAkJCX0NCjIzOTc6ICAgICAgICAgICAgICAgIAkJfQ0KMjM5ODogICAgICAgICAgICAgICAgDQoyMzk5OiAgICAgICAgICAgICAgICAJfSAvKmxpbnQgIWU4MTggeFF1ZXVlIGNvdWxkIG5vdCBiZSBwb2ludGVyIHRvIGNvbnN0IGJlY2F1c2UgaXQgaXMgYSB0eXBlZGVmLiAqLw0KMjQwMDogICAgICAgICAgICAgICAgDQoyNDAxOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnUVVFVUVfUkVHSVNUUllfU0laRSAqLw0KMjQwMjogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNDAzOiAgICAgICAgICAgICAgICANCjI0MDQ6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApDQoyNDA1OiAgICAgICAgICAgICAgICANCjI0MDY6ICAgICAgICAgICAgICAgIAl2b2lkIHZRdWV1ZVdhaXRGb3JNZXNzYWdlUmVzdHJpY3RlZCggUXVldWVIYW5kbGVfdCB4UXVldWUsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0LCBjb25zdCBCYXNlVHlwZV90IHhXYWl0SW5kZWZpbml0ZWx5ICkNCjI0MDc6ICAgICAgICAgICAgICAgIAl7DQpCRkQwNjkyOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDY5MkEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDY5MkMgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDY5MkUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA2OTMwICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCkJGRDA2OTM0ICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkNCkJGRDA2OTM4ICAwMDI4RjhERSAgIFNXIEEyLCA0MChTOCkNCjI0MDg6ICAgICAgICAgICAgICAgIAlRdWV1ZV90ICogY29uc3QgcHhRdWV1ZSA9ICggUXVldWVfdCAqICkgeFF1ZXVlOw0KQkZEMDY5M0MgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDY5NDAgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjQwOTogICAgICAgICAgICAgICAgDQoyNDEwOiAgICAgICAgICAgICAgICAJCS8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYnkgYXBwbGljYXRpb24gY29kZSBoZW5jZSB0aGUNCjI0MTE6ICAgICAgICAgICAgICAgIAkJJ1Jlc3RyaWN0ZWQnIGluIGl0cyBuYW1lLiAgSXQgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuICBJdCBpcw0KMjQxMjogICAgICAgICAgICAgICAgCQlkZXNpZ25lZCBmb3IgdXNlIGJ5IGtlcm5lbCBjb2RlLCBhbmQgaGFzIHNwZWNpYWwgY2FsbGluZyByZXF1aXJlbWVudHMuDQoyNDEzOiAgICAgICAgICAgICAgICAJCUl0IGNhbiByZXN1bHQgaW4gdkxpc3RJbnNlcnQoKSBiZWluZyBjYWxsZWQgb24gYSBsaXN0IHRoYXQgY2FuIG9ubHkNCjI0MTQ6ICAgICAgICAgICAgICAgIAkJcG9zc2libHkgZXZlciBoYXZlIG9uZSBpdGVtIGluIGl0LCBzbyB0aGUgbGlzdCB3aWxsIGJlIGZhc3QsIGJ1dCBldmVuDQoyNDE1OiAgICAgICAgICAgICAgICAJCXNvIGl0IHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgc2NoZWR1bGVyIGxvY2tlZCBhbmQgbm90IGZyb20gYSBjcml0aWNhbA0KMjQxNjogICAgICAgICAgICAgICAgCQlzZWN0aW9uLiAqLw0KMjQxNzogICAgICAgICAgICAgICAgDQoyNDE4OiAgICAgICAgICAgICAgICAJCS8qIE9ubHkgZG8gYW55dGhpbmcgaWYgdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIGluIHRoZSBxdWV1ZS4gIFRoaXMgZnVuY3Rpb24NCjI0MTk6ICAgICAgICAgICAgICAgIAkJd2lsbCBub3QgYWN0dWFsbHkgY2F1c2UgdGhlIHRhc2sgdG8gYmxvY2ssIGp1c3QgcGxhY2UgaXQgb24gYSBibG9ja2VkDQoyNDIwOiAgICAgICAgICAgICAgICAJCWxpc3QuICBJdCB3aWxsIG5vdCBibG9jayB1bnRpbCB0aGUgc2NoZWR1bGVyIGlzIHVubG9ja2VkIC0gYXQgd2hpY2gNCjI0MjE6ICAgICAgICAgICAgICAgIAkJdGltZSBhIHlpZWxkIHdpbGwgYmUgcGVyZm9ybWVkLiAgSWYgYW4gaXRlbSBpcyBhZGRlZCB0byB0aGUgcXVldWUgd2hpbGUNCjI0MjI6ICAgICAgICAgICAgICAgIAkJdGhlIHF1ZXVlIGlzIGxvY2tlZCwgYW5kIHRoZSBjYWxsaW5nIHRhc2sgYmxvY2tzIG9uIHRoZSBxdWV1ZSwgdGhlbiB0aGUNCjI0MjM6ICAgICAgICAgICAgICAgIAkJY2FsbGluZyB0YXNrIHdpbGwgYmUgaW1tZWRpYXRlbHkgdW5ibG9ja2VkIHdoZW4gdGhlIHF1ZXVlIGlzIHVubG9ja2VkLiAqLw0KMjQyNDogICAgICAgICAgICAgICAgCQlwcnZMb2NrUXVldWUoIHB4UXVldWUgKTsNCkJGRDA2OTQ0ICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwNjk0NiAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDA2OTQ4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDY5NEEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDY5NEUgIDAwNDRGQzYyICAgTFcgVjEsIDY4KFYwKQ0KQkZEMDY5NTIgICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwNjk1NCAgMDAwNUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA2OTYyDQpCRkQwNjk1NiAgMEMwMDAwMDUgICBTTEwgWkVSTywgQTEsIDENCkJGRDA2OTU4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDY5NUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDY5NUUgIDAwNDRGODAyICAgU1cgWkVSTywgNjgoVjApDQpCRkQwNjk2MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjk2NiAgMDA0OEZDNjIgICBMVyBWMSwgNzIoVjApDQpCRkQwNjk2QSAgICAgIEVEN0YgICBMSSBWMCwgLTENCkJGRDA2OTZDICAwMDA1QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDY5N0ENCkJGRDA2OTZFICAwQzAwMDAwNSAgIFNMTCBaRVJPLCBBMSwgMQ0KQkZEMDY5NzAgICAgICAwQzAwICAgTk9QDQpCRkQwNjk3MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjk3NiAgMDA0OEY4MDIgICBTVyBaRVJPLCA3MihWMCkNCkJGRDA2OTdBICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDA2OTdDICAwQzAwNDBBQSAgIEJORVpDIFQyLCAweEJGRDA4MTgwDQpCRkQwNjk3RSAgICAgIDBDMDAgICBOT1ANCjI0MjU6ICAgICAgICAgICAgICAgIAkJaWYoIHB4UXVldWUtPnV4TWVzc2FnZXNXYWl0aW5nID09ICggVUJhc2VUeXBlX3QgKSAwVSApDQpCRkQwNjk4MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjk4NCAgICAgIDY5MkUgICBMVyBWMCwgNTYoVjApDQpCRkQwNjk4NiAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjlBMg0KMjQyNjogICAgICAgICAgICAgICAgCQl7DQoyNDI3OiAgICAgICAgICAgICAgICAJCQkvKiBUaGVyZSBpcyBub3RoaW5nIGluIHRoZSBxdWV1ZSwgYmxvY2sgZm9yIHRoZSBzcGVjaWZpZWQgcGVyaW9kLiAqLw0KMjQyODogICAgICAgICAgICAgICAgCQkJdlRhc2tQbGFjZU9uRXZlbnRMaXN0UmVzdHJpY3RlZCggJiggcHhRdWV1ZS0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApLCB4VGlja3NUb1dhaXQsIHhXYWl0SW5kZWZpbml0ZWx5ICk7DQpCRkQwNjk4QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjk4RSAgMDAyNDMwNDIgICBBRERJVSBWMCwgVjAsIDM2DQpCRkQwNjk5MiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDY5OTQgIDAwMjRGQ0JFICAgTFcgQTEsIDM2KFM4KQ0KQkZEMDY5OTggIDAwMjhGQ0RFICAgTFcgQTIsIDQwKFM4KQ0KQkZEMDY5OUMgIDJFMkM3N0U4ICAgSkFMUyB2VGFza1BsYWNlT25FdmVudExpc3RSZXN0cmljdGVkDQpCRkQwNjk5RSAgICAgIDJFMkMgICBBTkRJIEEwLCBWMCwgMHg0MA0KQkZEMDY5QTAgICAgICAwQzAwICAgTk9QDQoyNDI5OiAgICAgICAgICAgICAgICAJCX0NCjI0MzA6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjQzMTogICAgICAgICAgICAgICAgCQl7DQoyNDMyOiAgICAgICAgICAgICAgICAJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyNDMzOiAgICAgICAgICAgICAgICAJCX0NCjI0MzQ6ICAgICAgICAgICAgICAgIAkJcHJ2VW5sb2NrUXVldWUoIHB4UXVldWUgKTsNCkJGRDA2OUEyICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkNCkJGRDA2OUE2ICAxREVFNzdFOCAgIEpBTFMgcHJ2VW5sb2NrUXVldWUNCkJGRDA2OUE4ICAwQzAwMURFRSAgIExCIFQ3LCAzMDcyKFQ2KQ0KQkZEMDY5QUEgICAgICAwQzAwICAgTk9QDQoyNDM1OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDY5QUMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA2OUFFICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA2OUIwICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA2OUIyICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA2OUI0ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA2OUI2ICAgICAgMEMwMCAgIE5PUA0KMjQzNjogICAgICAgICAgICAgICAgDQoyNDM3OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1RJTUVSUyAqLw0KMjQzODogICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNDM5OiAgICAgICAgICAgICAgICANCjI0NDA6ICAgICAgICAgICAgICAgICNpZiAoIGNvbmZpZ1VTRV9RVUVVRV9TRVRTID09IDEgKQ0KMjQ0MTogICAgICAgICAgICAgICAgDQoyNDQyOiAgICAgICAgICAgICAgICAJUXVldWVTZXRIYW5kbGVfdCB4UXVldWVDcmVhdGVTZXQoIGNvbnN0IFVCYXNlVHlwZV90IHV4RXZlbnRRdWV1ZUxlbmd0aCApDQoyNDQzOiAgICAgICAgICAgICAgICAJew0KQkZEMDk4QUMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA5OEFFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA5OEIwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA5OEIyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOThCNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQoyNDQ0OiAgICAgICAgICAgICAgICAJUXVldWVTZXRIYW5kbGVfdCBweFF1ZXVlOw0KMjQ0NTogICAgICAgICAgICAgICAgDQoyNDQ2OiAgICAgICAgICAgICAgICAJCXB4UXVldWUgPSB4UXVldWVHZW5lcmljQ3JlYXRlKCB1eEV2ZW50UXVldWVMZW5ndGgsIHNpemVvZiggUXVldWVfdCAqICksIHF1ZXVlUVVFVUVfVFlQRV9TRVQgKTsNCkJGRDA5OEI4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA5OEJDICAgICAgRUU4NCAgIExJIEExLCA0DQpCRkQwOThCRSAgICAgIDBDQzAgICBNT1ZFIEEyLCBaRVJPDQpCRkQwOThDMCAgMUVGQTc3RTggICBKQUxTIHhRdWV1ZUdlbmVyaWNDcmVhdGUNCkJGRDA5OEMyICAwQzAwMUVGQSAgIExCIFM3LCAzMDcyKEswKQ0KQkZEMDk4QzQgICAgICAwQzAwICAgTk9QDQpCRkQwOThDNiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoyNDQ3OiAgICAgICAgICAgICAgICANCjI0NDg6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHB4UXVldWU7DQpCRkQwOThDQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoyNDQ5OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDk4Q0UgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5OEQwICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA5OEQyICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA5OEQ0ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA5OEQ2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5OEQ4ICAgICAgMEMwMCAgIE5PUA0KMjQ1MDogICAgICAgICAgICAgICAgDQoyNDUxOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjI0NTI6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjQ1MzogICAgICAgICAgICAgICAgDQoyNDU0OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfUVVFVUVfU0VUUyA9PSAxICkNCjI0NTU6ICAgICAgICAgICAgICAgIA0KMjQ1NjogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFF1ZXVlQWRkVG9TZXQoIFF1ZXVlU2V0TWVtYmVySGFuZGxlX3QgeFF1ZXVlT3JTZW1hcGhvcmUsIFF1ZXVlU2V0SGFuZGxlX3QgeFF1ZXVlU2V0ICkNCjI0NTc6ICAgICAgICAgICAgICAgIAl7DQpCRkQwN0U5QyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDdFOUUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDdFQTAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDdFQTIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA3RUE0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCkJGRDA3RUE4ICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkNCjI0NTg6ICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhSZXR1cm47DQoyNDU5OiAgICAgICAgICAgICAgICANCjI0NjA6ICAgICAgICAgICAgICAgIAkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwN0VBQyAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDdFQUUgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwN0VCMCAgICAgIDBDMDAgICBOT1ANCjI0NjE6ICAgICAgICAgICAgICAgIAkJew0KMjQ2MjogICAgICAgICAgICAgICAgCQkJaWYoICggKCBRdWV1ZV90ICogKSB4UXVldWVPclNlbWFwaG9yZSApLT5weFF1ZXVlU2V0Q29udGFpbmVyICE9IE5VTEwgKQ0KQkZEMDdFQjIgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDdFQjYgIDAwNENGQzQyICAgTFcgVjAsIDc2KFYwKQ0KQkZEMDdFQkEgIDAwMDQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDdFQzYNCjI0NjM6ICAgICAgICAgICAgICAgIAkJCXsNCjI0NjQ6ICAgICAgICAgICAgICAgIAkJCQkvKiBDYW5ub3QgYWRkIGEgcXVldWUvc2VtYXBob3JlIHRvIG1vcmUgdGhhbiBvbmUgcXVldWUgc2V0LiAqLw0KMjQ2NTogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSBwZEZBSUw7DQpCRkQwN0VCRSAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCkJGRDA3RUMyICAgICAgQ0MxMyAgIEIgMHhCRkQwN0VFQQ0KQkZEMDdFQzQgICAgICAwQzAwICAgTk9QDQoyNDY2OiAgICAgICAgICAgICAgICAJCQl9DQoyNDY3OiAgICAgICAgICAgICAgICAJCQllbHNlIGlmKCAoICggUXVldWVfdCAqICkgeFF1ZXVlT3JTZW1hcGhvcmUgKS0+dXhNZXNzYWdlc1dhaXRpbmcgIT0gKCBVQmFzZVR5cGVfdCApIDAgKQ0KQkZEMDdFQzYgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDdFQ0EgICAgICA2OTJFICAgTFcgVjAsIDU2KFYwKQ0KQkZEMDdFQ0MgIDAwMDQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDdFRDgNCjI0Njg6ICAgICAgICAgICAgICAgIAkJCXsNCjI0Njk6ICAgICAgICAgICAgICAgIAkJCQkvKiBDYW5ub3QgYWRkIGEgcXVldWUvc2VtYXBob3JlIHRvIGEgcXVldWUgc2V0IGlmIHRoZXJlIGFyZSBhbHJlYWR5DQoyNDcwOiAgICAgICAgICAgICAgICAJCQkJaXRlbXMgaW4gdGhlIHF1ZXVlL3NlbWFwaG9yZS4gKi8NCjI0NzE6ICAgICAgICAgICAgICAgIAkJCQl4UmV0dXJuID0gcGRGQUlMOw0KQkZEMDdFRDAgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQpCRkQwN0VENCAgICAgIENDMEEgICBCIDB4QkZEMDdFRUENCkJGRDA3RUQ2ICAgICAgMEMwMCAgIE5PUA0KMjQ3MjogICAgICAgICAgICAgICAgCQkJfQ0KMjQ3MzogICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjQ3NDogICAgICAgICAgICAgICAgCQkJew0KMjQ3NTogICAgICAgICAgICAgICAgCQkJCSggKCBRdWV1ZV90ICogKSB4UXVldWVPclNlbWFwaG9yZSApLT5weFF1ZXVlU2V0Q29udGFpbmVyID0geFF1ZXVlU2V0Ow0KQkZEMDdFRDggIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDdFREMgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQ0KQkZEMDdFRTAgIDAwNENGODYyICAgU1cgVjEsIDc2KFYwKQ0KMjQ3NjogICAgICAgICAgICAgICAgCQkJCXhSZXR1cm4gPSBwZFBBU1M7DQpCRkQwN0VFNCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDdFRTYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjQ3NzogICAgICAgICAgICAgICAgCQkJfQ0KMjQ3ODogICAgICAgICAgICAgICAgCQl9DQoyNDc5OiAgICAgICAgICAgICAgICAJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwN0VFQSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwN0VFQyAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwOTZGMA0KQkZEMDdFRUUgICAgICAwQzAwICAgTk9QDQoyNDgwOiAgICAgICAgICAgICAgICANCjI0ODE6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwN0VGMCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoyNDgyOiAgICAgICAgICAgICAgICAJfQ0KQkZEMDdFRjQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3RUY2ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA3RUY4ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA3RUZBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3RUZDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA3RUZFICAgICAgMEMwMCAgIE5PUA0KMjQ4MzogICAgICAgICAgICAgICAgDQoyNDg0OiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjI0ODU6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjQ4NjogICAgICAgICAgICAgICAgDQoyNDg3OiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfUVVFVUVfU0VUUyA9PSAxICkNCjI0ODg6ICAgICAgICAgICAgICAgIA0KMjQ4OTogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFF1ZXVlUmVtb3ZlRnJvbVNldCggUXVldWVTZXRNZW1iZXJIYW5kbGVfdCB4UXVldWVPclNlbWFwaG9yZSwgUXVldWVTZXRIYW5kbGVfdCB4UXVldWVTZXQgKQ0KMjQ5MDogICAgICAgICAgICAgICAgCXsNCkJGRDA3OUZDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNzlGRSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwN0EwMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwN0EwMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDdBMDQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KQkZEMDdBMDggIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQ0KMjQ5MTogICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjI0OTI6ICAgICAgICAgICAgICAgIAlRdWV1ZV90ICogY29uc3QgcHhRdWV1ZU9yU2VtYXBob3JlID0gKCBRdWV1ZV90ICogKSB4UXVldWVPclNlbWFwaG9yZTsNCkJGRDA3QTBDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA3QTEwICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjI0OTM6ICAgICAgICAgICAgICAgIA0KMjQ5NDogICAgICAgICAgICAgICAgCQlpZiggcHhRdWV1ZU9yU2VtYXBob3JlLT5weFF1ZXVlU2V0Q29udGFpbmVyICE9IHhRdWV1ZVNldCApDQpCRkQwN0ExNCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwN0ExOCAgMDA0Q0ZDNjIgICBMVyBWMSwgNzYoVjApDQpCRkQwN0ExQyAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwN0EyMCAgMDAwNTk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA3QTJFDQpCRkQwN0EyMiAgMEMwMDAwMDUgICBTTEwgWkVSTywgQTEsIDENCkJGRDA3QTI0ICAgICAgMEMwMCAgIE5PUA0KMjQ5NTogICAgICAgICAgICAgICAgCQl7DQoyNDk2OiAgICAgICAgICAgICAgICAJCQkvKiBUaGUgcXVldWUgd2FzIG5vdCBhIG1lbWJlciBvZiB0aGUgc2V0LiAqLw0KMjQ5NzogICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHBkRkFJTDsNCkJGRDA3QTI2ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KQkZEMDdBMkEgICAgICBDQzE3ICAgQiAweEJGRDA3QTVBDQpCRkQwN0EyQyAgICAgIDBDMDAgICBOT1ANCjI0OTg6ICAgICAgICAgICAgICAgIAkJfQ0KMjQ5OTogICAgICAgICAgICAgICAgCQllbHNlIGlmKCBweFF1ZXVlT3JTZW1hcGhvcmUtPnV4TWVzc2FnZXNXYWl0aW5nICE9ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDA3QTJFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA3QTMyICAgICAgNjkyRSAgIExXIFYwLCA1NihWMCkNCkJGRDA3QTM0ICAwMDA0NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA3QTQwDQoyNTAwOiAgICAgICAgICAgICAgICAJCXsNCjI1MDE6ICAgICAgICAgICAgICAgIAkJCS8qIEl0IGlzIGRhbmdlcm91cyB0byByZW1vdmUgYSBxdWV1ZSBmcm9tIGEgc2V0IHdoZW4gdGhlIHF1ZXVlIGlzDQoyNTAyOiAgICAgICAgICAgICAgICAJCQlub3QgZW1wdHkgYmVjYXVzZSB0aGUgcXVldWUgc2V0IHdpbGwgc3RpbGwgaG9sZCBwZW5kaW5nIGV2ZW50cyBmb3INCjI1MDM6ICAgICAgICAgICAgICAgIAkJCXRoZSBxdWV1ZS4gKi8NCjI1MDQ6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwZEZBSUw7DQpCRkQwN0EzOCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCkJGRDA3QTNDICAgICAgQ0MwRSAgIEIgMHhCRkQwN0E1QQ0KQkZEMDdBM0UgICAgICAwQzAwICAgTk9QDQoyNTA1OiAgICAgICAgICAgICAgICAJCX0NCjI1MDY6ICAgICAgICAgICAgICAgIAkJZWxzZQ0KMjUwNzogICAgICAgICAgICAgICAgCQl7DQoyNTA4OiAgICAgICAgICAgICAgICAJCQl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA3QTQwICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwN0E0MiAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDA3QTQ0ICAgICAgMEMwMCAgIE5PUA0KMjUwOTogICAgICAgICAgICAgICAgCQkJew0KMjUxMDogICAgICAgICAgICAgICAgCQkJCS8qIFRoZSBxdWV1ZSBpcyBubyBsb25nZXIgY29udGFpbmVkIGluIHRoZSBzZXQuICovDQoyNTExOiAgICAgICAgICAgICAgICAJCQkJcHhRdWV1ZU9yU2VtYXBob3JlLT5weFF1ZXVlU2V0Q29udGFpbmVyID0gTlVMTDsNCkJGRDA3QTQ2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA3QTRBICAwMDRDRjgwMiAgIFNXIFpFUk8sIDc2KFYwKQ0KMjUxMjogICAgICAgICAgICAgICAgCQkJfQ0KMjUxMzogICAgICAgICAgICAgICAgCQkJdGFza0VYSVRfQ1JJVElDQUwoKTsNCkJGRDA3QTRFICA0MEFBNzdFOCAgIEpBTFMgdlRhc2tFeGl0Q3JpdGljYWwNCkJGRDA3QTUwICAwQzAwNDBBQSAgIEJORVpDIFQyLCBncGlvX3BvcnRfYml0bWFwcw0KQkZEMDdBNTIgICAgICAwQzAwICAgTk9QDQoyNTE0OiAgICAgICAgICAgICAgICAJCQl4UmV0dXJuID0gcGRQQVNTOw0KQkZEMDdBNTQgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA3QTU2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjI1MTU6ICAgICAgICAgICAgICAgIAkJfQ0KMjUxNjogICAgICAgICAgICAgICAgDQoyNTE3OiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KQkZEMDdBNUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMjUxODogICAgICAgICAgICAgICAgCX0gLypsaW50ICFlODE4IHhRdWV1ZVNldCBjb3VsZCBub3QgYmUgZGVjbGFyZWQgYXMgcG9pbnRpbmcgdG8gY29uc3QgYXMgaXQgaXMgYSB0eXBlZGVmLiAqLw0KQkZEMDdBNUUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3QTYwICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA3QTYyICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA3QTY0ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3QTY2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA3QTY4ICAgICAgMEMwMCAgIE5PUA0KMjUxOTogICAgICAgICAgICAgICAgDQoyNTIwOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjI1MjE6ICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjUyMjogICAgICAgICAgICAgICAgDQoyNTIzOiAgICAgICAgICAgICAgICAjaWYgKCBjb25maWdVU0VfUVVFVUVfU0VUUyA9PSAxICkNCjI1MjQ6ICAgICAgICAgICAgICAgIA0KMjUyNTogICAgICAgICAgICAgICAgCVF1ZXVlU2V0TWVtYmVySGFuZGxlX3QgeFF1ZXVlU2VsZWN0RnJvbVNldCggUXVldWVTZXRIYW5kbGVfdCB4UXVldWVTZXQsIFRpY2tUeXBlX3QgY29uc3QgeFRpY2tzVG9XYWl0ICkNCjI1MjY6ICAgICAgICAgICAgICAgIAl7DQpCRkQwOTRFMCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDk0RTIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDk0RTQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDk0RTYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5NEU4ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCkJGRDA5NEVDICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkNCjI1Mjc6ICAgICAgICAgICAgICAgIAlRdWV1ZVNldE1lbWJlckhhbmRsZV90IHhSZXR1cm4gPSBOVUxMOw0KQkZEMDk0RjAgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQoyNTI4OiAgICAgICAgICAgICAgICANCjI1Mjk6ICAgICAgICAgICAgICAgIAkJKCB2b2lkICkgeFF1ZXVlR2VuZXJpY1JlY2VpdmUoICggUXVldWVIYW5kbGVfdCApIHhRdWV1ZVNldCwgJnhSZXR1cm4sIHhUaWNrc1RvV2FpdCwgcGRGQUxTRSApOyAvKmxpbnQgIWU5NjEgQ2FzdGluZyBmcm9tIG9uZSB0eXBlZGVmIHRvIGFub3RoZXIgaXMgbm90IHJlZHVuZGFudC4gKi8NCkJGRDA5NEY0ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA5NEY4ICAwMDEwMzA1RSAgIEFERElVIFYwLCBTOCwgMTYNCkJGRDA5NEZDICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwOTRGRSAgMDAyNEZDREUgICBMVyBBMiwgMzYoUzgpDQpCRkQwOTUwMiAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPDQpCRkQwOTUwNCAgMDgxRTc3RTggICBKQUxTIHhRdWV1ZUdlbmVyaWNSZWNlaXZlDQpCRkQwOTUwNiAgICAgIDA4MUUgICBMQlUgUzAsIDE0KFMxKQ0KQkZEMDk1MDggICAgICAwQzAwICAgTk9QDQoyNTMwOiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KQkZEMDk1MEEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMjUzMTogICAgICAgICAgICAgICAgCX0NCkJGRDA5NTBFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTUxMCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOTUxMiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOTUxNCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOTUxNiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTUxOCAgICAgIDBDMDAgICBOT1ANCjI1MzI6ICAgICAgICAgICAgICAgIA0KMjUzMzogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9RVUVVRV9TRVRTICovDQoyNTM0OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI1MzU6ICAgICAgICAgICAgICAgIA0KMjUzNjogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQoyNTM3OiAgICAgICAgICAgICAgICANCjI1Mzg6ICAgICAgICAgICAgICAgIAlRdWV1ZVNldE1lbWJlckhhbmRsZV90IHhRdWV1ZVNlbGVjdEZyb21TZXRGcm9tSVNSKCBRdWV1ZVNldEhhbmRsZV90IHhRdWV1ZVNldCApDQoyNTM5OiAgICAgICAgICAgICAgICAJew0KQkZEMDk3REMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA5N0RFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA5N0UwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA5N0UyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOTdFNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQoyNTQwOiAgICAgICAgICAgICAgICAJUXVldWVTZXRNZW1iZXJIYW5kbGVfdCB4UmV0dXJuID0gTlVMTDsNCkJGRDA5N0U4ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMjU0MTogICAgICAgICAgICAgICAgDQoyNTQyOiAgICAgICAgICAgICAgICAJCSggdm9pZCApIHhRdWV1ZVJlY2VpdmVGcm9tSVNSKCAoIFF1ZXVlSGFuZGxlX3QgKSB4UXVldWVTZXQsICZ4UmV0dXJuLCBOVUxMICk7IC8qbGludCAhZTk2MSBDYXN0aW5nIGZyb20gb25lIHR5cGVkZWYgdG8gYW5vdGhlciBpcyBub3QgcmVkdW5kYW50LiAqLw0KQkZEMDk3RUMgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDk3RjAgIDAwMTAzMDVFICAgQURESVUgVjAsIFM4LCAxNg0KQkZEMDk3RjQgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDA5N0Y2ICAgICAgMENDMCAgIE1PVkUgQTIsIFpFUk8NCkJGRDA5N0Y4ICAxRDY0NzdFOCAgIEpBTFMgeFF1ZXVlUmVjZWl2ZUZyb21JU1INCkJGRDA5N0ZBICAwQzAwMUQ2NCAgIExCIFQzLCAzMDcyKEEwKQ0KQkZEMDk3RkMgICAgICAwQzAwICAgTk9QDQoyNTQzOiAgICAgICAgICAgICAgICAJCXJldHVybiB4UmV0dXJuOw0KQkZEMDk3RkUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMjU0NDogICAgICAgICAgICAgICAgCX0NCkJGRDA5ODAyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTgwNCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOTgwNiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOTgwOCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOTgwQSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTgwQyAgICAgIDBDMDAgICBOT1ANCjI1NDU6ICAgICAgICAgICAgICAgIA0KMjU0NjogICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ1VTRV9RVUVVRV9TRVRTICovDQoyNTQ3OiAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI1NDg6ICAgICAgICAgICAgICAgIA0KMjU0OTogICAgICAgICAgICAgICAgI2lmICggY29uZmlnVVNFX1FVRVVFX1NFVFMgPT0gMSApDQoyNTUwOiAgICAgICAgICAgICAgICANCjI1NTE6ICAgICAgICAgICAgICAgIAlzdGF0aWMgQmFzZVR5cGVfdCBwcnZOb3RpZnlRdWV1ZVNldENvbnRhaW5lciggY29uc3QgUXVldWVfdCAqIGNvbnN0IHB4UXVldWUsIGNvbnN0IEJhc2VUeXBlX3QgeENvcHlQb3NpdGlvbiApDQoyNTUyOiAgICAgICAgICAgICAgICAJew0KQkZEMDQzQjAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA0M0IyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA0M0I0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA0M0I2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNDNCOCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwNDNCQyAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQoyNTUzOiAgICAgICAgICAgICAgICAJUXVldWVfdCAqcHhRdWV1ZVNldENvbnRhaW5lciA9IHB4UXVldWUtPnB4UXVldWVTZXRDb250YWluZXI7DQpCRkQwNDNDMCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwNDNDNCAgMDA0Q0ZDNDIgICBMVyBWMCwgNzYoVjApDQpCRkQwNDNDOCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoyNTU0OiAgICAgICAgICAgICAgICAJQmFzZVR5cGVfdCB4UmV0dXJuID0gcGRGQUxTRTsNCkJGRDA0M0NDICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMjU1NTogICAgICAgICAgICAgICAgDQoyNTU2OiAgICAgICAgICAgICAgICAJCS8qIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZm9ybSBhIGNyaXRpY2FsIHNlY3Rpb24uICovDQoyNTU3OiAgICAgICAgICAgICAgICANCjI1NTg6ICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCBweFF1ZXVlU2V0Q29udGFpbmVyICk7DQpCRkQwNDNEMCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDNENCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDNFQQ0KQkZEMDQzRDggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0M0RBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA0M0RDICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwNDNERSAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwNDNFMCAgMDlGRTMwQTAgICBBRERJVSBBMSwgWkVSTywgMjU1OA0KQkZEMDQzRTIgICAgICAwOUZFICAgTEJVIFYxLCAxNChBMykNCkJGRDA0M0U0ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDQzRTYgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0M0U4ICAgICAgMEMwMCAgIE5PUA0KMjU1OTogICAgICAgICAgICAgICAgCQljb25maWdBU1NFUlQoIHB4UXVldWVTZXRDb250YWluZXItPnV4TWVzc2FnZXNXYWl0aW5nIDwgcHhRdWV1ZVNldENvbnRhaW5lci0+dXhMZW5ndGggKTsNCkJGRDA0M0VBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0M0VFICAgICAgNjlBRSAgIExXIFYxLCA1NihWMCkNCkJGRDA0M0YwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0M0Y0ICAgICAgNjkyRiAgIExXIFYwLCA2MChWMCkNCkJGRDA0M0Y2ICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDQzRjggIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwNDNGQSAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDQxMA0KQkZEMDQzRkUgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0NDAwICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA0NDAyICA5RTNDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1MDI4DQpCRkQwNDQwNCAgMzBBMDlFM0MgICBMV0MxIEYxNywgMTI0NDgoR1ApDQpCRkQwNDQwNiAgMDlGRjMwQTAgICBBRERJVSBBMSwgWkVSTywgMjU1OQ0KQkZEMDQ0MDggICAgICAwOUZGICAgTEJVIFYxLCAtMShBMykNCkJGRDA0NDBBICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDQ0MEMgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA0NDBFICAgICAgMEMwMCAgIE5PUA0KMjU2MDogICAgICAgICAgICAgICAgDQoyNTYxOiAgICAgICAgICAgICAgICAJCWlmKCBweFF1ZXVlU2V0Q29udGFpbmVyLT51eE1lc3NhZ2VzV2FpdGluZyA8IHB4UXVldWVTZXRDb250YWluZXItPnV4TGVuZ3RoICkNCkJGRDA0NDEwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0NDE0ICAgICAgNjlBRSAgIExXIFYxLCA1NihWMCkNCkJGRDA0NDE2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0NDFBICAgICAgNjkyRiAgIExXIFYwLCA2MChWMCkNCkJGRDA0NDFDICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDQ0MUUgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwNDQyMCAgMDAzMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNDQ4NA0KMjU2MjogICAgICAgICAgICAgICAgCQl7DQoyNTYzOiAgICAgICAgICAgICAgICAJCQl0cmFjZVFVRVVFX1NFTkQoIHB4UXVldWVTZXRDb250YWluZXIgKTsNCjI1NjQ6ICAgICAgICAgICAgICAgIA0KMjU2NTogICAgICAgICAgICAgICAgCQkJLyogVGhlIGRhdGEgY29waWVkIGlzIHRoZSBoYW5kbGUgb2YgdGhlIHF1ZXVlIHRoYXQgY29udGFpbnMgZGF0YS4gKi8NCjI1NjY6ICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSBwcnZDb3B5RGF0YVRvUXVldWUoIHB4UXVldWVTZXRDb250YWluZXIsICZweFF1ZXVlLCB4Q29weVBvc2l0aW9uICk7DQpCRkQwNDQyNCAgMDAxNEZDOUUgICBMVyBBMCwgMjAoUzgpDQpCRkQwNDQyOCAgMDAyMDMwQkUgICBBRERJVSBBMSwgUzgsIDMyDQpCRkQwNDQyQyAgMDAyNEZDREUgICBMVyBBMiwgMzYoUzgpDQpCRkQwNDQzMCAgMTRFNjc3RTggICBKQUxTIHBydkNvcHlEYXRhVG9RdWV1ZQ0KQkZEMDQ0MzIgIDBDMDAxNEU2ICAgTEJVIEEzLCAzMDcyKEEyKQ0KQkZEMDQ0MzQgICAgICAwQzAwICAgTk9QDQpCRkQwNDQzNiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoyNTY3OiAgICAgICAgICAgICAgICANCjI1Njg6ICAgICAgICAgICAgICAgIAkJCWlmKCBweFF1ZXVlU2V0Q29udGFpbmVyLT54VHhMb2NrID09IHF1ZXVlVU5MT0NLRUQgKQ0KQkZEMDQ0M0EgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQ0M0UgIDAwNDhGQzYyICAgTFcgVjEsIDcyKFYwKQ0KQkZEMDQ0NDIgICAgICBFRDdGICAgTEkgVjAsIC0xDQpCRkQwNDQ0NCAgMDAxNUI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDA0NDcyDQpCRkQwNDQ0NiAgMEMwMDAwMTUgICBTTEwgWkVSTywgUzUsIDENCkJGRDA0NDQ4ICAgICAgMEMwMCAgIE5PUA0KMjU2OTogICAgICAgICAgICAgICAgCQkJew0KMjU3MDogICAgICAgICAgICAgICAgCQkJCWlmKCBsaXN0TElTVF9JU19FTVBUWSggJiggcHhRdWV1ZVNldENvbnRhaW5lci0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgPT0gcGRGQUxTRSApDQpCRkQwNDQ0QSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDQ0RSAgICAgIDY5MjkgICBMVyBWMCwgMzYoVjApDQpCRkQwNDQ1MCAgMDAxODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNDQ4NA0KMjU3MTogICAgICAgICAgICAgICAgCQkJCXsNCjI1NzI6ICAgICAgICAgICAgICAgIAkJCQkJaWYoIHhUYXNrUmVtb3ZlRnJvbUV2ZW50TGlzdCggJiggcHhRdWV1ZVNldENvbnRhaW5lci0+eFRhc2tzV2FpdGluZ1RvUmVjZWl2ZSApICkgIT0gcGRGQUxTRSApDQpCRkQwNDQ1NCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNDQ1OCAgMDAyNDMwNDIgICBBRERJVSBWMCwgVjAsIDM2DQpCRkQwNDQ1QyAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDQ0NUUgIDIyQkM3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21FdmVudExpc3QNCkJGRDA0NDYwICAwQzAwMjJCQyAgIExXQzIgUzUsIDMwNzIoR1ApDQpCRkQwNDQ2MiAgICAgIDBDMDAgICBOT1ANCkJGRDA0NDY0ICAwMDBFNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA0NDg0DQoyNTczOiAgICAgICAgICAgICAgICAJCQkJCXsNCjI1NzQ6ICAgICAgICAgICAgICAgIAkJCQkJCS8qIFRoZSB0YXNrIHdhaXRpbmcgaGFzIGEgaGlnaGVyIHByaW9yaXR5LiAqLw0KMjU3NTogICAgICAgICAgICAgICAgCQkJCQkJeFJldHVybiA9IHBkVFJVRTsNCkJGRDA0NDY4ICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwNDQ2QSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwNDQ2RSAgICAgIENDMEEgICBCIDB4QkZEMDQ0ODQNCkJGRDA0NDcwICAgICAgMEMwMCAgIE5PUA0KMjU3NjogICAgICAgICAgICAgICAgCQkJCQl9DQoyNTc3OiAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjI1Nzg6ICAgICAgICAgICAgICAgIAkJCQkJew0KMjU3OTogICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjU4MDogICAgICAgICAgICAgICAgCQkJCQl9DQoyNTgxOiAgICAgICAgICAgICAgICAJCQkJfQ0KMjU4MjogICAgICAgICAgICAgICAgCQkJCWVsc2UNCjI1ODM6ICAgICAgICAgICAgICAgIAkJCQl7DQoyNTg0OiAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjI1ODU6ICAgICAgICAgICAgICAgIAkJCQl9DQoyNTg2OiAgICAgICAgICAgICAgICAJCQl9DQoyNTg3OiAgICAgICAgICAgICAgICAJCQllbHNlDQoyNTg4OiAgICAgICAgICAgICAgICAJCQl7DQoyNTg5OiAgICAgICAgICAgICAgICAJCQkJKCBweFF1ZXVlU2V0Q29udGFpbmVyLT54VHhMb2NrICkrKzsNCkJGRDA0NDcyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0NDc2ICAwMDQ4RkM0MiAgIExXIFYwLCA3MihWMCkNCkJGRDA0NDdBICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQ0KQkZEMDQ0N0MgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDQ0ODAgIDAwNDhGODYyICAgU1cgVjEsIDcyKFYwKQ0KMjU5MDogICAgICAgICAgICAgICAgCQkJfQ0KMjU5MTogICAgICAgICAgICAgICAgCQl9DQoyNTkyOiAgICAgICAgICAgICAgICAJCWVsc2UNCjI1OTM6ICAgICAgICAgICAgICAgIAkJew0KMjU5NDogICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjU5NTogICAgICAgICAgICAgICAgCQl9DQoyNTk2OiAgICAgICAgICAgICAgICANCjI1OTc6ICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQpCRkQwNDQ4NCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoyNTk4OiAgICAgICAgICAgICAgICAJfQ0KQkZEMDQ0ODggICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA0NDhBICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA0NDhDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA0NDhFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA0NDkwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA0NDkyICAgICAgMEMwMCAgIE5PUA0KMjU5OTogICAgICAgICAgICAgICAgDQoyNjAwOiAgICAgICAgICAgICAgICAjZW5kaWYgLyogY29uZmlnVVNFX1FVRVVFX1NFVFMgKi8NCjI2MDE6ICAgICAgICAgICAgICAgIA0KMjYwMjogICAgICAgICAgICAgICAgDQoyNjAzOiAgICAgICAgICAgICAgICANCjI2MDQ6ICAgICAgICAgICAgICAgIA0KMjYwNTogICAgICAgICAgICAgICAgDQoyNjA2OiAgICAgICAgICAgICAgICANCjI2MDc6ICAgICAgICAgICAgICAgIA0KMjYwODogICAgICAgICAgICAgICAgDQoyNjA5OiAgICAgICAgICAgICAgICANCjI2MTA6ICAgICAgICAgICAgICAgIA0KMjYxMTogICAgICAgICAgICAgICAgDQoyNjEyOiAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3Mvc291cmNlL3BvcnRhYmxlL21wbGFiL3BpYzMybWVjMTR4eC9wb3J0bWFjcm8uaCAgLS0tLS0tLS0tLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoNCjI6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBWOC4yLjEgLSBDb3B5cmlnaHQgKEMpIDIwMTUgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQozOiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KNDogICAgICAgICAgICAgICAgICAgDQo1OiAgICAgICAgICAgICAgICAgICAgICAgVklTSVQgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgVE8gRU5TVVJFIFlPVSBBUkUgVVNJTkcgVEhFIExBVEVTVCBWRVJTSU9OLg0KNjogICAgICAgICAgICAgICAgICAgDQo3OiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCjg6ICAgICAgICAgICAgICAgICAgIA0KOTogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCjEwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCjExOiAgICAgICAgICAgICAgICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gPj4+PiBBTkQgTU9ESUZJRUQgQlkgPDw8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KMTI6ICAgICAgICAgICAgICAgICAgDQoxMzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxNDogICAgICAgICAgICAgICAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQoxNTogICAgICAgICAgICAgICAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQoxNjogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQoxNzogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQoxODogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxOTogICAgICAgICAgICAgICAgICANCjIwOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCjIxOiAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQoyMjogICAgICAgICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCjIzOiAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KMjQ6ICAgICAgICAgICAgICAgICAgDQoyNTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjI3OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KMjg6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQoyOTogICAgICAgICAgICAgICAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCjMwOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzE6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMjogICAgICAgICAgICAgICAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCjMzOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KMzQ6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNTogICAgICAgICAgICAgICAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzc6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCjQwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCjQxOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KNDI6ICAgICAgICAgICAgICAgICAgDQo0MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCjQ0OiAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCjQ1OiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KNDg6ICAgICAgICAgICAgICAgICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQo0OTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQo1MzogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCjU0OiAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQo1NTogICAgICAgICAgICAgICAgICANCjU2OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KNTc6ICAgICAgICAgICAgICAgICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCjY1OiAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCjY2OiAgICAgICAgICAgICAgICAgIA0KNjc6ICAgICAgICAgICAgICAgICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KNjg6ICAgICAgICAgICAgICAgICAgKi8NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgI2lmbmRlZiBQT1JUTUFDUk9fSA0KNzE6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBQT1JUTUFDUk9fSA0KNzI6ICAgICAgICAgICAgICAgICAgDQo3MzogICAgICAgICAgICAgICAgICAjaWZkZWYgX19jcGx1c3BsdXMNCjc0OiAgICAgICAgICAgICAgICAgIGV4dGVybiAiQyIgew0KNzU6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo3NjogICAgICAgICAgICAgICAgICANCjc3OiAgICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjc4OiAgICAgICAgICAgICAgICAgICAqIFBvcnQgc3BlY2lmaWMgZGVmaW5pdGlvbnMuDQo3OTogICAgICAgICAgICAgICAgICAgKg0KODA6ICAgICAgICAgICAgICAgICAgICogVGhlIHNldHRpbmdzIGluIHRoaXMgZmlsZSBjb25maWd1cmUgRnJlZVJUT1MgY29ycmVjdGx5IGZvciB0aGUNCjgxOiAgICAgICAgICAgICAgICAgICAqIGdpdmVuIGhhcmR3YXJlIGFuZCBjb21waWxlci4NCjgyOiAgICAgICAgICAgICAgICAgICAqDQo4MzogICAgICAgICAgICAgICAgICAgKiBUaGVzZSBzZXR0aW5ncyBzaG91bGQgbm90IGJlIGFsdGVyZWQuDQo4NDogICAgICAgICAgICAgICAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo4NTogICAgICAgICAgICAgICAgICAgKi8NCjg2OiAgICAgICAgICAgICAgICAgIA0KODc6ICAgICAgICAgICAgICAgICAgLyogVHlwZSBkZWZpbml0aW9ucy4gKi8NCjg4OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydENIQVIgICAgICAgIGNoYXINCjg5OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydEZMT0FUICAgICAgIGZsb2F0DQo5MDogICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRET1VCTEUgICAgICBkb3VibGUNCjkxOiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydExPTkcgICAgICAgIGxvbmcNCjkyOiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydFNIT1JUICAgICAgIHNob3J0DQo5MzogICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRTVEFDS19UWVBFICB1aW50MzJfdA0KOTQ6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0QkFTRV9UWVBFICAgbG9uZw0KOTU6ICAgICAgICAgICAgICAgICAgDQo5NjogICAgICAgICAgICAgICAgICB0eXBlZGVmIHBvcnRTVEFDS19UWVBFIFN0YWNrVHlwZV90Ow0KOTc6ICAgICAgICAgICAgICAgICAgdHlwZWRlZiBsb25nIEJhc2VUeXBlX3Q7DQo5ODogICAgICAgICAgICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUJhc2VUeXBlX3Q7DQo5OTogICAgICAgICAgICAgICAgICANCjEwMDogICAgICAgICAgICAgICAgICNpZiggY29uZmlnVVNFXzE2X0JJVF9USUNLUyA9PSAxICkNCjEwMTogICAgICAgICAgICAgICAgICAgICB0eXBlZGVmIHVpbnQxNl90IFRpY2tUeXBlX3Q7DQoxMDI6ICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZg0KMTAzOiAgICAgICAgICAgICAgICAgI2Vsc2UNCjEwNDogICAgICAgICAgICAgICAgICAgICB0eXBlZGVmIHVpbnQzMl90IFRpY2tUeXBlX3Q7DQoxMDU6ICAgICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TUFYX0RFTEFZICggVGlja1R5cGVfdCApIDB4ZmZmZmZmZmZVTA0KMTA2OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxMDc6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEwODogICAgICAgICAgICAgICAgIA0KMTA5OiAgICAgICAgICAgICAgICAgLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KMTEwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0QllURV9BTElHTk1FTlQgIDgNCjExMTogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydFNUQUNLX0dST1dUSCAgICAtMQ0KMTEyOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0VElDS19QRVJJT0RfTVMgICggKCBUaWNrVHlwZV90ICkgMTAwMCAvIGNvbmZpZ1RJQ0tfUkFURV9IWiApDQoxMTM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjExNDogICAgICAgICAgICAgICAgIA0KMTE1OiAgICAgICAgICAgICAgICAgLyogQ3JpdGljYWwgc2VjdGlvbiBtYW5hZ2VtZW50LiAqLw0KMTE2OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0SVBMX1NISUZUICAgICAgICggMTBVTCApDQoxMTc6ICAgICAgICAgICAgICAgICAvKiBEb24ndCBzdHJhZGRsZSB0aGUgQ0VFIGJpdC4gIEludGVycnVwdHMgY2FsbGluZyBGcmVlUlRPUyBmdW5jdGlvbnMgc2hvdWxkDQoxMTg6ICAgICAgICAgICAgICAgICAgICBuZXZlciBoYXZlIGhpZ2hlciBJUEwgYml0cyBzZXQgYW55d2F5LiAqLw0KMTE5OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0QUxMX0lQTF9CSVRTICAgICggMHg3RlVMIDw8IHBvcnRJUExfU0hJRlQgKQ0KMTIwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0U1cwX0JJVCAgICAgICAgICggMHgwMSA8PCA4ICkNCjEyMTogICAgICAgICAgICAgICAgIA0KMTIyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMjM6ICAgICAgICAgICAgICAgICANCjEyNDogICAgICAgICAgICAgICAgIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgdWxQb3J0R2V0Q1AwU3RhdHVzKCB2b2lkICkNCjEyNTogICAgICAgICAgICAgICAgIHsNCkJGRDA5QjRDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwOUI0RSAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwOUI1MCAgICAgIENBMDIgICBTVyBTMCwgOChTUCkNCkJGRDA5QjUyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOUM2QyAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNg0KQkZEMDlDNkUgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDlDNzAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApDQpCRkQwOUM3MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlENkMgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYNCkJGRDA5RDZFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA5RDcwICAgICAgQ0EwMiAgIFNXIFMwLCA4KFNQKQ0KQkZEMDlENzIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjEyNjogICAgICAgICAgICAgICAgIHVpbnQzMl90IHJ2Ow0KMTI3OiAgICAgICAgICAgICAgICAgDQoxMjg6ICAgICAgICAgICAgICAgICAJX19hc20gdm9sYXRpbGUoDQpCRkQwOUI1NCAgMDBGQzAyMEMgICBNRkMwIFMwLCBTdGF0dXMNCkJGRDA5QjU4ICAwMDAwRkExRSAgIFNXIFMwLCAwKFM4KQ0KQkZEMDlDNzQgIDAwRkMwMjBDICAgTUZDMCBTMCwgU3RhdHVzDQpCRkQwOUM3OCAgMDAwMEZBMUUgICBTVyBTMCwgMChTOCkNCkJGRDA5RDc0ICAwMEZDMDIwQyAgIE1GQzAgUzAsIFN0YXR1cw0KQkZEMDlENzggIDAwMDBGQTFFICAgU1cgUzAsIDAoUzgpDQoxMjk6ICAgICAgICAgICAgICAgICAJCQkiXG5cdCINCjEzMDogICAgICAgICAgICAgICAgIAkJCSJtZmMwICUwLCQxMiwwICAgICAgXG5cdCINCjEzMTogICAgICAgICAgICAgICAgIAkJCTogIj1yIiAoIHJ2ICkgOjogKTsNCjEzMjogICAgICAgICAgICAgICAgIA0KMTMzOiAgICAgICAgICAgICAgICAgCXJldHVybiBydjsNCkJGRDA5QjVDICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KQkZEMDlDN0MgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwOUQ3QyAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCjEzNDogICAgICAgICAgICAgICAgIH0NCkJGRDA5QjYwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUI2MiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOUI2NCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkNCkJGRDA5QjY2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5QjY4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA5QzgwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUM4MiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOUM4NCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkNCkJGRDA5Qzg2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5Qzg4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA5RDgwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUQ4MiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOUQ4NCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkNCkJGRDA5RDg2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5RDg4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCjEzNTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTM2OiAgICAgICAgICAgICAgICAgDQoxMzc6ICAgICAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIHZvaWQgdlBvcnRTZXRDUDBTdGF0dXMoIHVpbnQzMl90IG5ld19zdGF0dXMpDQoxMzg6ICAgICAgICAgICAgICAgICB7DQpCRkQwOUI2QyAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUI2RSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5QjcwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOUI3MiAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkNCkJGRDA5QzhDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5QzhFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDlDOTAgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5QzkyICAwMDA4Rjg5RSAgIFNXIEEwLCA4KFM4KQ0KQkZEMDlEOEMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOA0KQkZEMDlEOEUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApDQpCRkQwOUQ5MCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlEOTIgIDAwMDhGODlFICAgU1cgQTAsIDgoUzgpDQoxMzk6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgbmV3X3N0YXR1czsNCjE0MDogICAgICAgICAgICAgICAgIA0KMTQxOiAgICAgICAgICAgICAgICAgCV9fYXNtX18gX192b2xhdGlsZV9fKA0KQkZEMDlCNzYgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpDQpCRkQwOUI3OCAgMDA0QzAwMDggICBJTlMgWkVSTywgVDAsIDEsIDANCkJGRDA5QjdBICAwMkZDMDA0QyAgIE1UQzAgVjAsIFN0YXR1cw0KQkZEMDlCN0MgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDlCN0UgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA5QjgwICAwRkJFMTgwMCAgIFNCIFpFUk8sIDQwMzAoWkVSTykNCkJGRDA5Qzk2ICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQ0KQkZEMDlDOTggIDAwNEMwMDA4ICAgSU5TIFpFUk8sIFQwLCAxLCAwDQpCRkQwOUM5QSAgMDJGQzAwNEMgICBNVEMwIFYwLCBTdGF0dXMNCkJGRDA5QzlDICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA5QzlFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwOUNBMCAgMEZCRTE4MDAgICBTQiBaRVJPLCA0MDMwKFpFUk8pDQpCRkQwOUQ5NiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA5RDk4ICAwMDRDMDAwOCAgIElOUyBaRVJPLCBUMCwgMSwgMA0KQkZEMDlEOUEgIDAyRkMwMDRDICAgTVRDMCBWMCwgU3RhdHVzDQpCRkQwOUQ5QyAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwOUQ5RSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDlEQTAgIDBGQkUxODAwICAgU0IgWkVSTywgNDAzMChaRVJPKQ0KMTQyOiAgICAgICAgICAgICAgICAgCQkJIlxuXHQiDQoxNDM6ICAgICAgICAgICAgICAgICAJCQkibXRjMCAlMCwkMTIsMCAgICAgIFxuXHQiDQoxNDQ6ICAgICAgICAgICAgICAgICAJCQkiZWhiICAgICAgICAgICAgICAgIFxuXHQiDQoxNDU6ICAgICAgICAgICAgICAgICAJCQk6DQoxNDY6ICAgICAgICAgICAgICAgICAJCQk6InIiICggbmV3X3N0YXR1cyApIDogKTsNCjE0NzogICAgICAgICAgICAgICAgIH0NCkJGRDA5QjgyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUI4NCAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA5Qjg2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5Qjg4ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KQkZEMDlDQTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5Q0E0ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlDQTYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDlDQTggICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOURBMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlEQTQgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOURBNiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOURBOCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCjE0ODogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTQ5OiAgICAgICAgICAgICAgICAgDQoxNTA6ICAgICAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHVsUG9ydEdldENQMENhdXNlKCB2b2lkICkNCjE1MTogICAgICAgICAgICAgICAgIHsNCkJGRDA5QjhDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwOUI4RSAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwOUI5MCAgICAgIENBMDIgICBTVyBTMCwgOChTUCkNCkJGRDA5QjkyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOUJDQyAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNg0KQkZEMDlCQ0UgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDlCRDAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApDQpCRkQwOUJEMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlDMkMgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYNCkJGRDA5QzJFICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA5QzMwICAgICAgQ0EwMiAgIFNXIFMwLCA4KFNQKQ0KQkZEMDlDMzIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5Q0FDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwOUNBRSAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwOUNCMCAgICAgIENBMDIgICBTVyBTMCwgOChTUCkNCkJGRDA5Q0IyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOUNFQyAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNg0KQkZEMDlDRUUgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDlDRjAgICAgICBDQTAyICAgU1cgUzAsIDgoU1ApDQpCRkQwOUNGMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMTUyOiAgICAgICAgICAgICAgICAgdWludDMyX3QgcnY7DQoxNTM6ICAgICAgICAgICAgICAgICANCjE1NDogICAgICAgICAgICAgICAgIAlfX2FzbSB2b2xhdGlsZSgNCkJGRDA5Qjk0ICAwMEZDMDIwRCAgIE1GQzAgUzAsIENhdXNlDQpCRkQwOUI5OCAgMDAwMEZBMUUgICBTVyBTMCwgMChTOCkNCkJGRDA5QkQ0ICAwMEZDMDIwRCAgIE1GQzAgUzAsIENhdXNlDQpCRkQwOUJEOCAgMDAwMEZBMUUgICBTVyBTMCwgMChTOCkNCkJGRDA5QzM0ICAwMEZDMDIwRCAgIE1GQzAgUzAsIENhdXNlDQpCRkQwOUMzOCAgMDAwMEZBMUUgICBTVyBTMCwgMChTOCkNCkJGRDA5Q0I0ICAwMEZDMDIwRCAgIE1GQzAgUzAsIENhdXNlDQpCRkQwOUNCOCAgMDAwMEZBMUUgICBTVyBTMCwgMChTOCkNCkJGRDA5Q0Y0ICAwMEZDMDIwRCAgIE1GQzAgUzAsIENhdXNlDQpCRkQwOUNGOCAgMDAwMEZBMUUgICBTVyBTMCwgMChTOCkNCjE1NTogICAgICAgICAgICAgICAgIAkJCSJcblx0Ig0KMTU2OiAgICAgICAgICAgICAgICAgCQkJIm1mYzAgJTAsJDEzLDAgICAgICBcblx0Ig0KMTU3OiAgICAgICAgICAgICAgICAgCQkJOiAiPXIiICggcnYgKSA6OiApOw0KMTU4OiAgICAgICAgICAgICAgICAgDQoxNTk6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KQkZEMDlCOUMgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwOUJEQyAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDA5QzNDICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KQkZEMDlDQkMgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwOUNGQyAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCjE2MDogICAgICAgICAgICAgICAgIH0NCkJGRDA5QkEwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUJBMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOUJBNCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkNCkJGRDA5QkE2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5QkE4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA5QkUwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUJFMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOUJFNCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkNCkJGRDA5QkU2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5QkU4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA5QzQwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUM0MiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOUM0NCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkNCkJGRDA5QzQ2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5QzQ4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA5Q0MwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUNDMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOUNDNCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkNCkJGRDA5Q0M2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5Q0M4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA5RDAwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUQwMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOUQwNCAgICAgIDRBMDIgICBMVyBTMCwgOChTUCkNCkJGRDA5RDA2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5RDA4ICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCjE2MTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTYyOiAgICAgICAgICAgICAgICAgDQoxNjM6ICAgICAgICAgICAgICAgICBzdGF0aWMgaW5saW5lIHZvaWQgdlBvcnRTZXRDUDBDYXVzZSggdWludDMyX3QgbmV3X2NhdXNlICkNCjE2NDogICAgICAgICAgICAgICAgIHsNCkJGRDA5QkFDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5QkFFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDlCQjAgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5QkIyICAwMDA4Rjg5RSAgIFNXIEEwLCA4KFM4KQ0KQkZEMDlCRUMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOA0KQkZEMDlCRUUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApDQpCRkQwOUJGMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlCRjIgIDAwMDhGODlFICAgU1cgQTAsIDgoUzgpDQpCRkQwOUM0QyAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUM0RSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5QzUwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOUM1MiAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkNCkJGRDA5Q0NDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5Q0NFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDlDRDAgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5Q0QyICAwMDA4Rjg5RSAgIFNXIEEwLCA4KFM4KQ0KQkZEMDlEMEMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOA0KQkZEMDlEMEUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApDQpCRkQwOUQxMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlEMTIgIDAwMDhGODlFICAgU1cgQTAsIDgoUzgpDQoxNjU6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgbmV3X2NhdXNlOw0KMTY2OiAgICAgICAgICAgICAgICAgDQoxNjc6ICAgICAgICAgICAgICAgICAJX19hc21fXyBfX3ZvbGF0aWxlX18oDQpCRkQwOUJCNiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA5QkI4ICAwMDREMDAwOCAgIEFERFFILlBIIFpFUk8sIFQwLCBaRVJPDQpCRkQwOUJCQSAgMDJGQzAwNEQgICBNVEMwIFYwLCBDYXVzZQ0KQkZEMDlCQkMgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDlCQkUgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA5QkMwICAwRkJFMTgwMCAgIFNCIFpFUk8sIDQwMzAoWkVSTykNCkJGRDA5QkY2ICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQ0KQkZEMDlCRjggIDAwNEQwMDA4ICAgQUREUUguUEggWkVSTywgVDAsIFpFUk8NCkJGRDA5QkZBICAwMkZDMDA0RCAgIE1UQzAgVjAsIENhdXNlDQpCRkQwOUJGQyAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwOUJGRSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDlDMDAgIDBGQkUxODAwICAgU0IgWkVSTywgNDAzMChaRVJPKQ0KQkZEMDlDNTYgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpDQpCRkQwOUM1OCAgMDA0RDAwMDggICBBRERRSC5QSCBaRVJPLCBUMCwgWkVSTw0KQkZEMDlDNUEgIDAyRkMwMDREICAgTVRDMCBWMCwgQ2F1c2UNCkJGRDA5QzVDICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA5QzVFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwOUM2MCAgMEZCRTE4MDAgICBTQiBaRVJPLCA0MDMwKFpFUk8pDQpCRkQwOUNENiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA5Q0Q4ICAwMDREMDAwOCAgIEFERFFILlBIIFpFUk8sIFQwLCBaRVJPDQpCRkQwOUNEQSAgMDJGQzAwNEQgICBNVEMwIFYwLCBDYXVzZQ0KQkZEMDlDREMgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDlDREUgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA5Q0UwICAwRkJFMTgwMCAgIFNCIFpFUk8sIDQwMzAoWkVSTykNCkJGRDA5RDE2ICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQ0KQkZEMDlEMTggIDAwNEQwMDA4ICAgQUREUUguUEggWkVSTywgVDAsIFpFUk8NCkJGRDA5RDFBICAwMkZDMDA0RCAgIE1UQzAgVjAsIENhdXNlDQpCRkQwOUQxQyAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwOUQxRSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDlEMjAgIDBGQkUxODAwICAgU0IgWkVSTywgNDAzMChaRVJPKQ0KMTY4OiAgICAgICAgICAgICAgICAgCQkJIlxuXHQiDQoxNjk6ICAgICAgICAgICAgICAgICAJCQkibXRjMCAlMCwkMTMsMCAgICAgIFxuXHQiDQoxNzA6ICAgICAgICAgICAgICAgICAJCQkiZWhiICAgICAgICAgICAgICAgIFxuXHQiDQoxNzE6ICAgICAgICAgICAgICAgICAJCQk6DQoxNzI6ICAgICAgICAgICAgICAgICAJCQk6InIiICggbmV3X2NhdXNlICkgOiApOw0KMTczOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlCQzIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5QkM0ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlCQzYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDlCQzggICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOUMwMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlDMDQgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOUMwNiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUMwOCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA5QzYyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUM2NCAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA5QzY2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5QzY4ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KQkZEMDlDRTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5Q0U0ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlDRTYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDlDRTggICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOUQyMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlEMjQgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOUQyNiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUQyOCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCjE3NDogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTc1OiAgICAgICAgICAgICAgICAgDQoxNzY6ICAgICAgICAgICAgICAgICAvKiBUaGlzIGNsZWFycyB0aGUgSVBMIGJpdHMsIHRoZW4gc2V0cyB0aGVtIHRvDQoxNzc6ICAgICAgICAgICAgICAgICBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkuICBBbiBleHRyYSBjaGVjayBpcyBwZXJmb3JtZWQgaWYNCjE3ODogICAgICAgICAgICAgICAgIGNvbmZpZ0FTU0VSVCgpIGlzIGRlZmluZWQgdG8gZW5zdXJlIGFuIGFzc2VydGlvbiBoYW5kbGVyIGRvZXMgbm90IGluYWR2ZXJ0ZW50bHkNCjE3OTogICAgICAgICAgICAgICAgIGF0dGVtcHQgdG8gbG93ZXIgdGhlIElQTCB3aGVuIHRoZSBjYWxsIHRvIGFzc2VydCB3YXMgdHJpZ2dlcmVkIGJlY2F1c2UgdGhlIElQTA0KMTgwOiAgICAgICAgICAgICAgICAgdmFsdWUgd2FzIGZvdW5kIHRvIGJlIGFib3ZlIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSB3aGVuIGFuIElTUg0KMTgxOiAgICAgICAgICAgICAgICAgc2FmZSBGcmVlUlRPUyBBUEkgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLiAgSVNSIHNhZmUgRnJlZVJUT1MgQVBJIGZ1bmN0aW9ucyBhcmUNCjE4MjogICAgICAgICAgICAgICAgIHRob3NlIHRoYXQgZW5kIGluIEZyb21JU1IuICBGcmVlUlRPUyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbnRlcnJ1cHQgQVBJIHRvDQoxODM6ICAgICAgICAgICAgICAgICBlbnN1cmUgQVBJIGZ1bmN0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgaXMgYXMgZmFzdCBhbmQgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLiAqLw0KMTg0OiAgICAgICAgICAgICAgICAgI2lmZGVmIGNvbmZpZ0FTU0VSVA0KMTg1OiAgICAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydERJU0FCTEVfSU5URVJSVVBUUygpIAkJCQkJCQkJCQkJCQkJCQkJCQlcDQoxODY6ICAgICAgICAgICAgICAgICAJeyAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQoxODc6ICAgICAgICAgICAgICAgICAJdWludDMyX3QgdWxTdGF0dXM7IAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMTg4OiAgICAgICAgICAgICAgICAgCQkvKiBNYXNrIGludGVycnVwdHMgYXQgYW5kIGJlbG93IHRoZSBrZXJuZWwgaW50ZXJydXB0IHByaW9yaXR5LiAqLyAgCQkJCQkJCQkJCVwNCjE4OTogICAgICAgICAgICAgICAgIAkJdWxTdGF0dXMgPSB1bFBvcnRHZXRDUDBTdGF0dXMoKTsgCQkJCQkJCQkJCQkJCQkJCQkJXA0KMTkwOiAgICAgICAgICAgICAgICAgCQkvKiBJcyB0aGUgY3VycmVudCBJUEwgYmVsb3cgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZPyAqLyAJCQkJCQkJCQlcDQoxOTE6ICAgICAgICAgICAgICAgICAJCWlmKCAoICggdWxTdGF0dXMgJiBwb3J0QUxMX0lQTF9CSVRTICkgPj4gcG9ydElQTF9TSElGVCApIDwgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZICkgCQlcDQoxOTI6ICAgICAgICAgICAgICAgICAJCXsgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQoxOTM6ICAgICAgICAgICAgICAgICAJCQl1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsgIAkJCQkJCQkJCQkJCQkJCQkJXA0KMTk0OiAgICAgICAgICAgICAgICAgCQkJdlBvcnRTZXRDUDBTdGF0dXMoICggdWxTdGF0dXMgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKSApOyAJCVwNCjE5NTogICAgICAgICAgICAgICAgIAkJfSAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjE5NjogICAgICAgICAgICAgICAgICAgICB9DQoxOTc6ICAgICAgICAgICAgICAgICAjZWxzZSAvKiBjb25maWdBU1NFUlQgKi8NCjE5ODogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHBvcnRESVNBQkxFX0lOVEVSUlVQVFMoKSAJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMTk5OiAgICAgICAgICAgICAgICAgCXsgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMjAwOiAgICAgICAgICAgICAgICAgCXVpbnQzMl90IHVsU3RhdHVzOyAgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjIwMTogICAgICAgICAgICAgICAgIAkJLyogTWFzayBpbnRlcnJ1cHRzIGF0IGFuZCBiZWxvdyB0aGUga2VybmVsIGludGVycnVwdCBwcmlvcml0eS4gKi8gCQkJCQkJCQkJCVwNCjIwMjogICAgICAgICAgICAgICAgIAkJdWxTdGF0dXMgPSB1bFBvcnRHZXRDUDBTdGF0dXMoKTsgCQkJCQkJCQkJCQkJCQkJCQkJXA0KMjAzOiAgICAgICAgICAgICAgICAgCQl1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsgCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjIwNDogICAgICAgICAgICAgICAgIAkJdlBvcnRTZXRDUDBTdGF0dXMoICggdWxTdGF0dXMgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKSApOyAJCQlcDQoyMDU6ICAgICAgICAgICAgICAgICAJfQ0KMjA2OiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0FTU0VSVCAqLw0KMjA3OiAgICAgICAgICAgICAgICAgDQoyMDg6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRFTkFCTEVfSU5URVJSVVBUUygpIAkJCVwNCjIwOTogICAgICAgICAgICAgICAgIHsgCQkJCQkJCQkJCQlcDQoyMTA6ICAgICAgICAgICAgICAgICB1aW50MzJfdCB1bFN0YXR1czsgCQkJCQkJCVwNCjIxMTogICAgICAgICAgICAgICAgIAkvKiBVbm1hc2sgYWxsIGludGVycnVwdHMuICovIAkJCVwNCjIxMjogICAgICAgICAgICAgICAgIAl1bFN0YXR1cyA9IHVsUG9ydEdldENQMFN0YXR1cygpOyAJCVwNCjIxMzogICAgICAgICAgICAgICAgIAl1bFN0YXR1cyAmPSB+cG9ydEFMTF9JUExfQklUUzsgCQkJXA0KMjE0OiAgICAgICAgICAgICAgICAgCXZQb3J0U2V0Q1AwU3RhdHVzKCB1bFN0YXR1cyApOyAJCQlcDQoyMTU6ICAgICAgICAgICAgICAgICB9DQoyMTY6ICAgICAgICAgICAgICAgICANCjIxNzogICAgICAgICAgICAgICAgIA0KMjE4OiAgICAgICAgICAgICAgICAgZXh0ZXJuIHZvaWQgdlRhc2tFbnRlckNyaXRpY2FsKCB2b2lkICk7DQoyMTk6ICAgICAgICAgICAgICAgICBleHRlcm4gdm9pZCB2VGFza0V4aXRDcml0aWNhbCggdm9pZCApOw0KMjIwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0Q1JJVElDQUxfTkVTVElOR19JTl9UQ0IJMQ0KMjIxOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0RU5URVJfQ1JJVElDQUwoKQkJdlRhc2tFbnRlckNyaXRpY2FsKCkNCjIyMjogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydEVYSVRfQ1JJVElDQUwoKQkJCXZUYXNrRXhpdENyaXRpY2FsKCkNCjIyMzogICAgICAgICAgICAgICAgIA0KMjI0OiAgICAgICAgICAgICAgICAgZXh0ZXJuIFVCYXNlVHlwZV90IHV4UG9ydFNldEludGVycnVwdE1hc2tGcm9tSVNSKCk7DQoyMjU6ICAgICAgICAgICAgICAgICBleHRlcm4gdm9pZCB2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIFVCYXNlVHlwZV90ICk7DQoyMjY6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRTRVRfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoKSB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUigpDQoyMjc6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRDTEVBUl9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUiggdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKQ0KMjI4OiAgICAgICAgICAgICAgICAgDQoyMjk6ICAgICAgICAgICAgICAgICAjaWZuZGVmIGNvbmZpZ1VTRV9QT1JUX09QVElNSVNFRF9UQVNLX1NFTEVDVElPTg0KMjMwOiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OIDENCjIzMTogICAgICAgICAgICAgICAgICNlbmRpZg0KMjMyOiAgICAgICAgICAgICAgICAgDQoyMzM6ICAgICAgICAgICAgICAgICAjaWYgY29uZmlnVVNFX1BPUlRfT1BUSU1JU0VEX1RBU0tfU0VMRUNUSU9OID09IDENCjIzNDogICAgICAgICAgICAgICAgIA0KMjM1OiAgICAgICAgICAgICAgICAgCS8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uLiAqLw0KMjM2OiAgICAgICAgICAgICAgICAgCSNpZiggY29uZmlnTUFYX1BSSU9SSVRJRVMgPiAzMiApDQoyMzc6ICAgICAgICAgICAgICAgICAJCSNlcnJvciBjb25maWdVU0VfUE9SVF9PUFRJTUlTRURfVEFTS19TRUxFQ1RJT04gY2FuIG9ubHkgYmUgc2V0IHRvIDEgd2hlbiBjb25maWdNQVhfUFJJT1JJVElFUyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMzIuICBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCBhIHN5c3RlbSByZXF1aXJlcyBtb3JlIHRoYW4gMTAgdG8gMTUgZGlmZmVyZW5jZSBwcmlvcml0aWVzIGFzIHRhc2tzIHRoYXQgc2hhcmUgYSBwcmlvcml0eSB3aWxsIHRpbWUgc2xpY2UuDQoyMzg6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoyMzk6ICAgICAgICAgICAgICAgICANCjI0MDogICAgICAgICAgICAgICAgIAkvKiBTdG9yZS9jbGVhciB0aGUgcmVhZHkgcHJpb3JpdGllcyBpbiBhIGJpdCBtYXAuICovDQoyNDE6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBwb3J0UkVDT1JEX1JFQURZX1BSSU9SSVRZKCB1eFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApICggdXhSZWFkeVByaW9yaXRpZXMgKSB8PSAoIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQoyNDI6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBwb3J0UkVTRVRfUkVBRFlfUFJJT1JJVFkoIHV4UHJpb3JpdHksIHV4UmVhZHlQcmlvcml0aWVzICkgKCB1eFJlYWR5UHJpb3JpdGllcyApICY9IH4oIDFVTCA8PCAoIHV4UHJpb3JpdHkgKSApDQoyNDM6ICAgICAgICAgICAgICAgICANCjI0NDogICAgICAgICAgICAgICAgIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI0NTogICAgICAgICAgICAgICAgIA0KMjQ2OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgcG9ydEdFVF9ISUdIRVNUX1BSSU9SSVRZKCB1eFRvcFByaW9yaXR5LCB1eFJlYWR5UHJpb3JpdGllcyApIHV4VG9wUHJpb3JpdHkgPSAoIDMxIC0gX2NseiggKCB1eFJlYWR5UHJpb3JpdGllcyApICkgKQ0KMjQ3OiAgICAgICAgICAgICAgICAgDQoyNDg6ICAgICAgICAgICAgICAgICAjZW5kaWYgLyogdGFza1JFQ09SRF9SRUFEWV9QUklPUklUWSAqLw0KMjQ5OiAgICAgICAgICAgICAgICAgDQoyNTA6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI1MTogICAgICAgICAgICAgICAgIA0KMjUyOiAgICAgICAgICAgICAgICAgLyogVGFzayB1dGlsaXRpZXMuICovDQoyNTM6ICAgICAgICAgICAgICAgICANCjI1NDogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydFlJRUxEKCkgCQkJCQkJXA0KMjU1OiAgICAgICAgICAgICAgICAgeyAJCQkJCQkJCQkJCVwNCjI1NjogICAgICAgICAgICAgICAgIHVpbnQzMl90IHVsQ2F1c2U7IAkJCQkJCQlcDQoyNTc6ICAgICAgICAgICAgICAgICAgICAgLyogVHJpZ2dlciBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovIAkJXA0KMjU4OiAgICAgICAgICAgICAgICAgICAgIHVsQ2F1c2UgPSB1bFBvcnRHZXRDUDBDYXVzZSgpOyAJCQlcDQoyNTk6ICAgICAgICAgICAgICAgICAgICAgdWxDYXVzZSB8PSBwb3J0U1cwX0JJVDsgCQkJCVwNCjI2MDogICAgICAgICAgICAgICAgICAgICB2UG9ydFNldENQMENhdXNlKCB1bENhdXNlICk7IAkJCVwNCjI2MTogICAgICAgICAgICAgICAgIH0NCjI2MjogICAgICAgICAgICAgICAgIA0KMjYzOiAgICAgICAgICAgICAgICAgZXh0ZXJuIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4SW50ZXJydXB0TmVzdGluZzsNCjI2NDogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydEFTU0VSVF9JRl9JTl9JU1IoKSBjb25maWdBU1NFUlQoIHV4SW50ZXJydXB0TmVzdGluZyA9PSAwICkNCjI2NTogICAgICAgICAgICAgICAgIA0KMjY2OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0Tk9QKCkgX19hc20gdm9sYXRpbGUgKCAibm9wIiApDQoyNjc6ICAgICAgICAgICAgICAgICANCjI2ODogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjY5OiAgICAgICAgICAgICAgICAgDQoyNzA6ICAgICAgICAgICAgICAgICAvKiBUYXNrIGZ1bmN0aW9uIG1hY3JvcyBhcyBkZXNjcmliZWQgb24gdGhlIEZyZWVSVE9TLm9yZyBXRUIgc2l0ZS4gKi8NCjI3MTogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT05fUFJPVE8oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkNCjI3MjogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydFRBU0tfRlVOQ1RJT04oIHZGdW5jdGlvbiwgcHZQYXJhbWV0ZXJzICkgdm9pZCB2RnVuY3Rpb24oIHZvaWQgKnB2UGFyYW1ldGVycyApDQoyNzM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI3NDogICAgICAgICAgICAgICAgIA0KMjc1OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0RU5EX1NXSVRDSElOR19JU1IoIHhTd2l0Y2hSZXF1aXJlZCApIAlpZiggeFN3aXRjaFJlcXVpcmVkICkJXA0KMjc2OiAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCXsgCQkJCQkJXA0KMjc3OiAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQlwb3J0WUlFTEQoKTsJCVwNCjI3ODogICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQl9DQoyNzk6ICAgICAgICAgICAgICAgICANCjI4MDogICAgICAgICAgICAgICAgIC8qIFJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgYXdhcmUgZGVidWdnZXIuICovDQoyODE6ICAgICAgICAgICAgICAgICAjaWZkZWYgX19ERUJVRw0KMjgyOiAgICAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydFJFTU9WRV9TVEFUSUNfUVVBTElGSUVSDQoyODM6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjI4NDogICAgICAgICAgICAgICAgIA0KMjg1OiAgICAgICAgICAgICAgICAgI2lmZGVmIF9fY3BsdXNwbHVzDQoyODY6ICAgICAgICAgICAgICAgICB9DQoyODc6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjI4ODogICAgICAgICAgICAgICAgIA0KMjg5OiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIFBPUlRNQUNST19IICovDQoyOTA6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3Mvc291cmNlL3BvcnRhYmxlL21wbGFiL3BpYzMybWVjMTR4eC9wb3J0LmMgIC0tLS0tLS0tLS0tLS0tLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoNCjI6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBWOC4yLjEgLSBDb3B5cmlnaHQgKEMpIDIwMTUgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQozOiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KNDogICAgICAgICAgICAgICAgICAgDQo1OiAgICAgICAgICAgICAgICAgICAgICAgVklTSVQgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgVE8gRU5TVVJFIFlPVSBBUkUgVVNJTkcgVEhFIExBVEVTVCBWRVJTSU9OLg0KNjogICAgICAgICAgICAgICAgICAgDQo3OiAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCjg6ICAgICAgICAgICAgICAgICAgIA0KOTogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCjEwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCjExOiAgICAgICAgICAgICAgICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gPj4+PiBBTkQgTU9ESUZJRUQgQlkgPDw8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KMTI6ICAgICAgICAgICAgICAgICAgDQoxMzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxNDogICAgICAgICAgICAgICAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQoxNTogICAgICAgICAgICAgICAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQoxNjogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQoxNzogICAgICAgICAgICAgICAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQoxODogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoxOTogICAgICAgICAgICAgICAgICANCjIwOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCjIxOiAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQoyMjogICAgICAgICAgICAgICAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCjIzOiAgICAgICAgICAgICAgICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KMjQ6ICAgICAgICAgICAgICAgICAgDQoyNTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjI3OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KMjg6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQoyOTogICAgICAgICAgICAgICAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCjMwOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzE6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMjogICAgICAgICAgICAgICAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCjMzOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KMzQ6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNTogICAgICAgICAgICAgICAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzc6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCjQwOiAgICAgICAgICAgICAgICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCjQxOiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KNDI6ICAgICAgICAgICAgICAgICAgDQo0MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCjQ0OiAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCjQ1OiAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KNDg6ICAgICAgICAgICAgICAgICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQo0OTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQo1MzogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCjU0OiAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQo1NTogICAgICAgICAgICAgICAgICANCjU2OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KNTc6ICAgICAgICAgICAgICAgICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCjY1OiAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCjY2OiAgICAgICAgICAgICAgICAgIA0KNjc6ICAgICAgICAgICAgICAgICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KNjg6ICAgICAgICAgICAgICAgICAgKi8NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KNzE6ICAgICAgICAgICAgICAgICAgICogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gcG9ydGFibGUuaCBmb3IgdGhlIFBJQzMyTVogcG9ydC4NCjcyOiAgICAgICAgICAgICAgICAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNzM6ICAgICAgICAgICAgICAgICAgDQo3NDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8eGMuaD4NCjc1OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxjcDBkZWZzLmg+DQo3NjogICAgICAgICAgICAgICAgICANCjc3OiAgICAgICAgICAgICAgICAgIC8qIFNjaGVkdWxlciBpbmNsdWRlIGZpbGVzLiAqLw0KNzg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQo3OTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAidGFzay5oIg0KODA6ICAgICAgICAgICAgICAgICAgDQo4MTogICAgICAgICAgICAgICAgICAjaWYgIWRlZmluZWQoX19NRUNfXykNCjgyOiAgICAgICAgICAgICAgICAgICAgICAjZXJyb3IgVGhpcyBwb3J0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBYQzMyIG9uIE1FQzE0eHguICBQbGVhc2UgdXBkYXRlIHlvdXIgQyBjb21waWxlciB2ZXJzaW9uIG9yIHNldHRpbmdzLg0KODM6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo4NDogICAgICAgICAgICAgICAgICANCjg1OiAgICAgICAgICAgICAgICAgICNpZiggKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPj0gMHg3ICkgfHwgKCBjb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgPT0gMCApICkNCjg2OiAgICAgICAgICAgICAgICAgIAkjZXJyb3IgY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIG11c3QgYmUgbGVzcyB0aGFuIDcgYW5kIGdyZWF0ZXIgdGhhbiAwDQo4NzogICAgICAgICAgICAgICAgICAjZW5kaWYNCjg4OiAgICAgICAgICAgICAgICAgIA0KODk6ICAgICAgICAgICAgICAgICAgLyogSGFyZHdhcmUgc3BlY2lmaWNzLiAqLw0KOTA6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0VElNRVJfUFJFU0NBTEUJOA0KOTE6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0UFJFU0NBTEVfQklUUwkxDQo5MjogICAgICAgICAgICAgICAgICANCjkzOiAgICAgICAgICAgICAgICAgIC8qIEJpdHMgd2l0aGluIHZhcmlvdXMgcmVnaXN0ZXJzLiAqLw0KOTQ6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0SUVfQklUCQkJCQkoIDB4MDAwMDAwMDEgKQ0KOTU6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0RVhMX0JJVAkJCQkJKCAweDAwMDAwMDAyICkNCjk2OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1YX0JJVAkJCQkJKCAweDAxMDAwMDAwICkgLyogQWxsb3cgYWNjZXNzIHRvIERTUCBpbnN0cnVjdGlvbnMuICovDQo5NzogICAgICAgICAgICAgICAgICANCjk4OiAgICAgICAgICAgICAgICAgIC8qIEJpdHMgd2l0aGluIHRoZSBDQVVTRSByZWdpc3Rlci4gKi8NCjk5OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydENPUkVfU1dfMAkJCQkoIDB4MDAwMDAxMDAgKQ0KMTAwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0Q09SRV9TV18xCQkJCSggMHgwMDAwMDIwMCApDQoxMDE6ICAgICAgICAgICAgICAgICANCjEwMjogICAgICAgICAgICAgICAgIC8qIFRoZSBFWEwgYml0IGlzIHNldCB0byBlbnN1cmUgaW50ZXJydXB0cyBkbyBub3Qgb2NjdXIgd2hpbGUgdGhlIGNvbnRleHQgb2YNCjEwMzogICAgICAgICAgICAgICAgIHRoZSBmaXJzdCB0YXNrIGlzIGJlaW5nIHJlc3RvcmVkLiAqLw0KMTA0OiAgICAgICAgICAgICAgICAgLyogTUVDMTR4eCBkb2VzIG5vdCBoYXZlIERTUCBIVyAqLw0KMTA1OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0SU5JVElBTF9TUgkJCQkoIHBvcnRJRV9CSVQgfCBwb3J0RVhMX0JJVCApDQoxMDY6ICAgICAgICAgICAgICAgICANCjEwNzogICAgICAgICAgICAgICAgIC8qIE1FQzE0eHggUlRPUyBUaW1lciBNTUNSJ3MgKi8NCjEwODogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfUlRNUl9QUkVMT0FECSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QTAwMDc0MDR1bCkpDQoxMDk6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX1JUTVJfQ09OVFJPTAkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEEwMDA3NDA4dWwpKQ0KMTEwOiAgICAgICAgICAgICAgICAgDQoxMTE6ICAgICAgICAgICAgICAgICAvKiBNRUMxNHh4IEpUVklDIGV4dGVybmFsIGludGVycnVwdCBjb250cm9sbGVyDQoxMTI6ICAgICAgICAgICAgICAgICAgKiBpcyBtYXBwZWQgdG8gTTE0SyBjbG9zZWx5LWNvdXBsZWQgcGVyaXBoZXJhbCBzcGFjZS4NCjExMzogICAgICAgICAgICAgICAgICAqLw0KMTE0OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0R0lSUTIzX1JUT1NfVElNRVJfQklUUE9TCSg0KQ0KMTE1OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0R0lSUTIzX1JUT1NfVElNRVJfTUFTSwkJKDF1bCA8PCAocG9ydEdJUlEyM19SVE9TX1RJTUVSX0JJVFBPUykpDQoxMTY6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19TUkMJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMwRjB1bCkpDQoxMTc6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19TRVRFTgkJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzBGNHVsKSkNCjExODogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX0NMUkVOCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDMEY4dWwpKQ0KMTE5OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjNfUkVTVUxUCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMwRkN1bCkpDQoxMjA6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19BR0NUUkwJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzIzQ3VsKSkNCjEyMTogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1BSSUEJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMzRjB1bCkpDQoxMjI6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyM19QUklCCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDM0Y0dWwpKQ0KMTIzOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjNfUFJJQwkJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzNGOHVsKSkNCjEyNDogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1BSSUQJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMzRkN1bCkpDQoxMjU6ICAgICAgICAgICAgICAgICANCjEyNjogICAgICAgICAgICAgICAgIC8qIE1JUFMgU29mdHdhcmUgSW50ZXJydXB0cyBhcmUgcm91dGVkIHRocm91Z2ggSlRWSUMgR0lSUTI0ICovDQoxMjc6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9CSVRQT1MJKDEpDQoxMjg6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9NQVNLCSgxdWwgPDwgKHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9CSVRQT1MpKQ0KMTI5OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfU1JDCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDMTAwdWwpKQ0KMTMwOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfU0VURU4JCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMxMDR1bCkpDQoxMzE6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9DTFJFTgkJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzEwOHVsKSkNCjEzMjogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1JFU1VMVAkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDMTBDdWwpKQ0KMTMzOiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfQUdDVFJMCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkMyNDB1bCkpDQoxMzQ6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9QUklBCQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDNDAwdWwpKQ0KMTM1OiAgICAgICAgICAgICAgICAgI2RlZmluZSBwb3J0TU1DUl9KVFZJQ19HSVJRMjRfUFJJQgkJKigodm9sYXRpbGUgdWludDMyX3QgKikoMHhCRkZGQzQwNHVsKSkNCjEzNjogICAgICAgICAgICAgICAgICNkZWZpbmUgcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1BSSUMJCSooKHZvbGF0aWxlIHVpbnQzMl90ICopKDB4QkZGRkM0MDh1bCkpDQoxMzc6ICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRNTUNSX0pUVklDX0dJUlEyNF9QUklECQkqKCh2b2xhdGlsZSB1aW50MzJfdCAqKSgweEJGRkZDNDBDdWwpKQ0KMTM4OiAgICAgICAgICAgICAgICAgDQoxMzk6ICAgICAgICAgICAgICAgICAvKg0KMTQwOiAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCBwb3J0LmMgZ2VuZXJhdGVzIGl0cyB0aWNrIGludGVycnVwdCBmcm9tIFRJTUVSMS4gIFRoZSB1c2VyIGNhbg0KMTQxOiAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgdGhpcyBiZWhhdmlvdXIgYnk6DQoxNDI6ICAgICAgICAgICAgICAgICAJMTogUHJvdmlkaW5nIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB2QXBwbGljYXRpb25TZXR1cFRpY2tUaW1lckludGVycnVwdCgpLA0KMTQzOiAgICAgICAgICAgICAgICAgCSAgIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGNvbmZpZ3VyZXMgdGhlIHRpbWVyLiAgVGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQNCjE0NDogICAgICAgICAgICAgICAgIAkgICBhcyBhIHdlYWsgc3ltYm9sIGluIHRoaXMgZmlsZSBzbyBpZiB0aGUgc2FtZSBmdW5jdGlvbiBuYW1lIGlzIHVzZWQgaW4gdGhlDQoxNDU6ICAgICAgICAgICAgICAgICAJICAgYXBwbGljYXRpb24gY29kZSB0aGVuIHRoZSB2ZXJzaW9uIGluIHRoZSBhcHBsaWNhdGlvbiBjb2RlIHdpbGwgYmUgbGlua2VkDQoxNDY6ICAgICAgICAgICAgICAgICAJICAgaW50byB0aGUgYXBwbGljYXRpb24gaW4gcHJlZmVyZW5jZSB0byB0aGUgdmVyc2lvbiBkZWZpbmVkIGluIHRoaXMgZmlsZS4NCjE0NzogICAgICAgICAgICAgICAgIAkyOiBEZWZpbmUgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIHRvIHRoZSB2ZWN0b3IgbnVtYmVyIG9mIHRoZSB0aW1lciB1c2VkDQoxNDg6ICAgICAgICAgICAgICAgICAJICAgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAgRm9yIGV4YW1wbGUsIHdoZW4gdGltZXIgMSBpcyB1c2VkIHRoZW4NCjE0OTogICAgICAgICAgICAgICAgIAkgICBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgaXMgc2V0IHRvIF9USU1FUl8xX1ZFQ1RPUi4NCjE1MDogICAgICAgICAgICAgICAgIAkgICBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1Igc2hvdWxkIGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaC4NCjE1MTogICAgICAgICAgICAgICAgIAkzOiBEZWZpbmUgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSB0byBjbGVhciB0aGUgaW50ZXJydXB0IGluIHRoZQ0KMTUyOiAgICAgICAgICAgICAgICAgCSAgIHRpbWVyIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRpY2sgaW50ZXJydXB0LiAgRm9yIGV4YW1wbGUsIHdoZW4gdGltZXIgMSBpcw0KMTUzOiAgICAgICAgICAgICAgICAgCSAgIHVzZWQgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSBpcyBkZWZpbmVkIHRvDQoxNTQ6ICAgICAgICAgICAgICAgICAJICAgSUZTMENMUiA9IF9JRlMwX1QxSUZfTUFTSy4NCjE1NTogICAgICAgICAgICAgICAgICovDQoxNTY6ICAgICAgICAgICAgICAgICAjaWZuZGVmIGNvbmZpZ1RJQ0tfSU5URVJSVVBUX1ZFQ1RPUg0KMTU3OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIGdpcnEyM19iNA0KMTU4OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKSBwb3J0TU1DUl9KVFZJQ19HSVJRMjNfU1JDID0gcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sNCjE1OTogICAgICAgICAgICAgICAgICNlbHNlDQoxNjA6ICAgICAgICAgICAgICAgICAJI2lmbmRlZiBjb25maWdDTEVBUl9USUNLX1RJTUVSX0lOVEVSUlVQVA0KMTYxOiAgICAgICAgICAgICAgICAgCQkjZXJyb3IgSWYgY29uZmlnVElDS19JTlRFUlJVUFRfVkVDVE9SIGlzIGRlZmluZWQgaW4gYXBwbGljYXRpb24gY29kZSB0aGVuIGNvbmZpZ0NMRUFSX1RJQ0tfVElNRVJfSU5URVJSVVBUIG11c3QgYWxzbyBiZSBkZWZpbmVkIGluIGFwcGxpY2F0aW9uIGNvZGUuDQoxNjI6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxNjM6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjE2NDogICAgICAgICAgICAgICAgIA0KMTY1OiAgICAgICAgICAgICAgICAgLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBwcmUtbG9hZGluZyBvZiB0aGUgaW5pdGlhbCBSQSB3aXRoIHRoZSBhZGRyZXNzIG9mDQoxNjY6ICAgICAgICAgICAgICAgICBwcnZUYXNrRXhpdEVycm9yKCkgaW4gY2FzZSBpcyBtZXNzZXMgdXAgdW53aW5kaW5nIG9mIHRoZSBzdGFjayBpbiB0aGUNCjE2NzogICAgICAgICAgICAgICAgIGRlYnVnZ2VyIC0gaW4gd2hpY2ggY2FzZSBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTIGNhbiBiZSBkZWZpbmVkIGFzIDAgKE5VTEwpLiAqLw0KMTY4OiAgICAgICAgICAgICAgICAgI2lmZGVmIGNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCjE2OTogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHBvcnRUQVNLX1JFVFVSTl9BRERSRVNTCWNvbmZpZ1RBU0tfUkVUVVJOX0FERFJFU1MNCjE3MDogICAgICAgICAgICAgICAgICNlbHNlDQoxNzE6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBwb3J0VEFTS19SRVRVUk5fQUREUkVTUwlwcnZUYXNrRXhpdEVycm9yDQoxNzI6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjE3MzogICAgICAgICAgICAgICAgIA0KMTc0OiAgICAgICAgICAgICAgICAgLyogU2V0IGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyB0byAzIHRvIGFkZCBJU1Igc3RhY2sgY2hlY2tpbmcgdG8gdGFzaw0KMTc1OiAgICAgICAgICAgICAgICAgc3RhY2sgY2hlY2tpbmcuICBBIHByb2JsZW0gaW4gdGhlIElTUiBzdGFjayB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0LCBub3QgY2FsbCB0aGUNCjE3NjogICAgICAgICAgICAgICAgIHN0YWNrIG92ZXJmbG93IGhvb2sgZnVuY3Rpb24gKGJlY2F1c2UgdGhlIHN0YWNrIG92ZXJmbG93IGhvb2sgaXMgc3BlY2lmaWMgdG8gYQ0KMTc3OiAgICAgICAgICAgICAgICAgdGFzayBzdGFjaywgbm90IHRoZSBJU1Igc3RhY2spLiAqLw0KMTc4OiAgICAgICAgICAgICAgICAgI2lmKCBjb25maWdDSEVDS19GT1JfU1RBQ0tfT1ZFUkZMT1cgPiAyICkNCjE3OTogICAgICAgICAgICAgICAgIA0KMTgwOiAgICAgICAgICAgICAgICAgICAgIC8qIERvbid0IHVzZSAweGE1IGFzIHRoZSBzdGFjayBmaWxsIGJ5dGVzIGFzIHRoYXQgaXMgdXNlZCBieSB0aGUga2VybmVybCBmb3INCjE4MTogICAgICAgICAgICAgICAgICAgICAgICB0aGUgdGFzayBzdGFja3MsIGFuZCBzbyB3aWxsIGxlZ2l0aW1hdGVseSBhcHBlYXIgaW4gbWFueSBwb3NpdGlvbnMgd2l0aGluDQoxODI6ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIElTUiBzdGFjay4gKi8NCjE4MzogICAgICAgICAgICAgICAgICAgICAjZGVmaW5lIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFCTB4ZWUNCjE4NDogICAgICAgICAgICAgICAgIA0KMTg1OiAgICAgICAgICAgICAgICAgCXN0YXRpYyBjb25zdCB1aW50OF90IHVjRXhwZWN0ZWRTdGFja0J5dGVzW10gPSB7DQoxODY6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQoxODc6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQoxODg6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQoxODk6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsCQlcDQoxOTA6ICAgICAgICAgICAgICAgICAJCQkJCQkJcG9ydElTUl9TVEFDS19GSUxMX0JZVEUsIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBwb3J0SVNSX1NUQUNLX0ZJTExfQllURSwgcG9ydElTUl9TVEFDS19GSUxMX0JZVEUgfTsJXA0KMTkxOiAgICAgICAgICAgICAgICAgDQoxOTI6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBwb3J0Q0hFQ0tfSVNSX1NUQUNLKCkgY29uZmlnQVNTRVJUKCAoIG1lbWNtcCggKCB2b2lkICogKSB4SVNSU3RhY2ssICggdm9pZCAqICkgdWNFeHBlY3RlZFN0YWNrQnl0ZXMsIHNpemVvZiggdWNFeHBlY3RlZFN0YWNrQnl0ZXMgKSApID09IDAgKSApDQoxOTM6ICAgICAgICAgICAgICAgICAjZWxzZQ0KMTk0OiAgICAgICAgICAgICAgICAgCS8qIERlZmluZSB0aGUgZnVuY3Rpb24gYXdheS4gKi8NCjE5NTogICAgICAgICAgICAgICAgIAkjZGVmaW5lIHBvcnRDSEVDS19JU1JfU1RBQ0soKQ0KMTk2OiAgICAgICAgICAgICAgICAgI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCjE5NzogICAgICAgICAgICAgICAgIA0KMTk4OiAgICAgICAgICAgICAgICAgDQoxOTk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIwMDogICAgICAgICAgICAgICAgIA0KMjAxOiAgICAgICAgICAgICAgICAgLyoNCjIwMjogICAgICAgICAgICAgICAgICAqIFVzZWQgdG8gY2F0Y2ggdGFza3MgdGhhdCBhdHRlbXB0IHRvIHJldHVybiBmcm9tIHRoZWlyIGltcGxlbWVudGluZyBmdW5jdGlvbi4NCjIwMzogICAgICAgICAgICAgICAgICAqLw0KMjA0OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2VGFza0V4aXRFcnJvciggdm9pZCApOw0KMjA1OiAgICAgICAgICAgICAgICAgDQoyMDY6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIwNzogICAgICAgICAgICAgICAgIA0KMjA4OiAgICAgICAgICAgICAgICAgLyogUmVjb3JkcyB0aGUgaW50ZXJydXB0IG5lc3RpbmcgZGVwdGguICBUaGlzIGlzIGluaXRpYWxpc2VkIHRvIG9uZSBhcyBpdCBpcw0KMjA5OiAgICAgICAgICAgICAgICAgZGVjcmVtZW50ZWQgdG8gMCB3aGVuIHRoZSBmaXJzdCB0YXNrIHN0YXJ0cy4gKi8NCjIxMDogICAgICAgICAgICAgICAgIHZvbGF0aWxlIFVCYXNlVHlwZV90IHV4SW50ZXJydXB0TmVzdGluZyA9IDB4MDE7DQoyMTE6ICAgICAgICAgICAgICAgICANCjIxMjogICAgICAgICAgICAgICAgIC8qIFN0b3JlcyB0aGUgdGFzayBzdGFjayBwb2ludGVyIHdoZW4gYSBzd2l0Y2ggaXMgbWFkZSB0byB1c2UgdGhlIHN5c3RlbSBzdGFjay4gKi8NCjIxMzogICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4U2F2ZWRUYXNrU3RhY2tQb2ludGVyID0gMDsNCjIxNDogICAgICAgICAgICAgICAgIA0KMjE1OiAgICAgICAgICAgICAgICAgLyogVGhlIHN0YWNrIHVzZWQgYnkgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgdGhhdCBjYXVzZSBhIGNvbnRleHQgc3dpdGNoLiAqLw0KMjE2OiAgICAgICAgICAgICAgICAgU3RhY2tUeXBlX3QgeElTUlN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRSBdID0geyAwIH07DQoyMTc6ICAgICAgICAgICAgICAgICANCjIxODogICAgICAgICAgICAgICAgIC8qIFRoZSB0b3Agb2Ygc3RhY2sgdmFsdWUgZW5zdXJlcyB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgdG8gc3RvcmUgNiByZWdpc3RlcnMgb24NCjIxOTogICAgICAgICAgICAgICAgIHRoZSBjYWxsZXJzIHN0YWNrLCBhcyBzb21lIGZ1bmN0aW9ucyBzZWVtIHRvIHdhbnQgdG8gZG8gdGhpcy4gKi8NCjIyMDogICAgICAgICAgICAgICAgIGNvbnN0IFN0YWNrVHlwZV90ICogY29uc3QgeElTUlN0YWNrVG9wID0gJiggeElTUlN0YWNrWyBjb25maWdJU1JfU1RBQ0tfU0laRSAtIDcgXSApOw0KMjIxOiAgICAgICAgICAgICAgICAgDQoyMjI6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIyMzogICAgICAgICAgICAgICAgIA0KMjI0OiAgICAgICAgICAgICAgICAgLyogTG9jYWwgaW5saW5lIGFzc2VtYmx5IHJvdXRpbmVzIHRvIHJlYWQvd3JpdGUgTUlQUyBNMTRLIENQMCByZWdpc3RlcnMuICBBdm9pZHMNCjIyNTogICAgICAgICAgICAgICAgIHRoZSBuZWVkIGZvciBjb21waWxlciBpbnRyaW5zaWNzIHdoaWNoIHZhcnkgd2l0aCBjb21waWxlci4gKi8NCjIyNjogICAgICAgICAgICAgICAgIHN0YXRpYyB1aW50MzJfdCBwcnZEaXNhYmxlSW50ZXJydXB0KCB2b2lkICkNCjIyNzogICAgICAgICAgICAgICAgIHsNCkJGRDA5QTk4ICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwOUE5QSAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwOUE5QyAgICAgIENBMDIgICBTVyBTMCwgOChTUCkNCkJGRDA5QTlFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoyMjg6ICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcmV2X3N0YXRlOw0KMjI5OiAgICAgICAgICAgICAgICAgDQoyMzA6ICAgICAgICAgICAgICAgICAJX19hc20gdm9sYXRpbGUoICJkaSAlMDsgZWhiIiA6ICI9ciIgKCBwcmV2X3N0YXRlICkgOjogIm1lbW9yeSIgKTsNCkJGRDA5QUEwICA0NzdDMDAxMCAgIERJIFMwDQpCRkQwOUFBNCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDlBQTYgIEZBMUUxODAwICAgU0IgWkVSTywgLTE1MDYoWkVSTykNCkJGRDA5QUE4ICAwMDAwRkExRSAgIFNXIFMwLCAwKFM4KQ0KMjMxOiAgICAgICAgICAgICAgICAgCXJldHVybiBwcmV2X3N0YXRlOw0KQkZEMDlBQUMgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQoyMzI6ICAgICAgICAgICAgICAgICB9DQpCRkQwOUFCMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlBQjIgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDlBQjQgICAgICA0QTAyICAgTFcgUzAsIDgoU1ApDQpCRkQwOUFCNiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUFCOCAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2DQoyMzM6ICAgICAgICAgICAgICAgICANCjIzNDogICAgICAgICAgICAgICAgIA0KMjM1OiAgICAgICAgICAgICAgICAgLyoNCjIzNjogICAgICAgICAgICAgICAgICAqIFNlZSBoZWFkZXIgZmlsZSBmb3IgZGVzY3JpcHRpb24uDQoyMzc6ICAgICAgICAgICAgICAgICAgKi8NCjIzODogICAgICAgICAgICAgICAgIFN0YWNrVHlwZV90ICpweFBvcnRJbml0aWFsaXNlU3RhY2soIFN0YWNrVHlwZV90ICpweFRvcE9mU3RhY2ssIFRhc2tGdW5jdGlvbl90IHB4Q29kZSwgdm9pZCAqcHZQYXJhbWV0ZXJzICkNCjIzOTogICAgICAgICAgICAgICAgIHsNCkJGRDA1NjMwICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwNTYzMiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwNTYzNCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwNTYzNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDU2MzggIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQ0KQkZEMDU2M0MgIDAwMUNGOEJFICAgU1cgQTEsIDI4KFM4KQ0KQkZEMDU2NDAgIDAwMjBGOERFICAgU1cgQTIsIDMyKFM4KQ0KMjQwOiAgICAgICAgICAgICAgICAgCS8qIEVuc3VyZSBieXRlIGFsaWdubWVudCBpcyBtYWludGFpbmVkIHdoZW4gbGVhdmluZyB0aGlzIGZ1bmN0aW9uLiAqLw0KMjQxOiAgICAgICAgICAgICAgICAgCXB4VG9wT2ZTdGFjay0tOw0KQkZEMDU2NDQgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDU2NDYgIDRDNTgwMDE4ICAgTU9WWiBUMSwgVDgsIFpFUk8NCkJGRDA1NjQ4ICAgICAgNEM1OCAgIEFERElVIFYwLCBWMCwgLTQNCkJGRDA1NjRBICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjI0MjogICAgICAgICAgICAgICAgIA0KMjQzOiAgICAgICAgICAgICAgICAgCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIDB4REVBREJFRUY7DQpCRkQwNTY0RSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNTY1MiAgREVBRDQxQTMgICBMVUkgVjEsIDB4REVBRA0KQkZEMDU2NTYgIEJFRUY1MDYzICAgT1JJIFYxLCBWMSwgLTE2NjU3DQpCRkQwNTY1OCAgRTlBMEJFRUYgICBMREMxIEYyMywgLTU3MjgoVDcpDQpCRkQwNTY1QSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjI0NDogICAgICAgICAgICAgICAgIAlweFRvcE9mU3RhY2stLTsNCkJGRDA1NjVDICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA1NjVFICA0QzU4MDAxOCAgIE1PVlogVDEsIFQ4LCBaRVJPDQpCRkQwNTY2MCAgICAgIDRDNTggICBBRERJVSBWMCwgVjAsIC00DQpCRkQwNTY2MiAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQoyNDU6ICAgICAgICAgICAgICAgICANCjI0NjogICAgICAgICAgICAgICAgIAkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSAweDEyMzQ1Njc4OwkvKiBXb3JkIHRvIHdoaWNoIHRoZSBzdGFjayBwb2ludGVyIHdpbGwgYmUgbGVmdCBwb2ludGluZyBhZnRlciBjb250ZXh0IHJlc3RvcmUuICovDQpCRkQwNTY2NiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNTY2QSAgMTIzNDQxQTMgICBMVUkgVjEsIDB4MTIzNA0KQkZEMDU2NkMgIDUwNjMxMjM0ICAgQURESSBTMSwgUzQsIDIwNTc5DQpCRkQwNTY2RSAgNTY3ODUwNjMgICBPUkkgVjEsIFYxLCAyMjEzNg0KQkZEMDU2NzAgIEU5QTA1Njc4ICAgUFJFRlggMjksIDE5KFQ4KQ0KQkZEMDU2NzIgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyNDc6ICAgICAgICAgICAgICAgICAJcHhUb3BPZlN0YWNrLS07DQpCRkQwNTY3NCAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNTY3NiAgNEM1ODAwMTggICBNT1ZaIFQxLCBUOCwgWkVSTw0KQkZEMDU2NzggICAgICA0QzU4ICAgQURESVUgVjAsIFYwLCAtNA0KQkZEMDU2N0EgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMjQ4OiAgICAgICAgICAgICAgICAgDQoyNDk6ICAgICAgICAgICAgICAgICAJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgdWxQb3J0R2V0Q1AwQ2F1c2UoKTsNCkJGRDA1NjdFICA0REM2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwQ2F1c2UNCkJGRDA1NjgwICAgICAgNERDNiAgIEFERElVIFQ2LCBUNiwgMw0KQkZEMDU2ODIgICAgICAwQzAwICAgTk9QDQpCRkQwNTY4NCAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMA0KQkZEMDU2ODYgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDU2OEEgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyNTA6ICAgICAgICAgICAgICAgICAJcHhUb3BPZlN0YWNrLS07DQpCRkQwNTY4QyAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNTY4RSAgNEM1ODAwMTggICBNT1ZaIFQxLCBUOCwgWkVSTw0KQkZEMDU2OTAgICAgICA0QzU4ICAgQURESVUgVjAsIFYwLCAtNA0KQkZEMDU2OTIgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMjUxOiAgICAgICAgICAgICAgICAgDQoyNTI6ICAgICAgICAgICAgICAgICAJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgcG9ydElOSVRJQUxfU1I7CS8qIENQMF9TVEFUVVMgKi8NCkJGRDA1Njk2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA1NjlBICAgICAgRUQ4MyAgIExJIFYxLCAzDQpCRkQwNTY5QyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjI1MzogICAgICAgICAgICAgICAgIAlweFRvcE9mU3RhY2stLTsNCkJGRDA1NjlFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA1NkEwICA0QzU4MDAxOCAgIE1PVlogVDEsIFQ4LCBaRVJPDQpCRkQwNTZBMiAgICAgIDRDNTggICBBRERJVSBWMCwgVjAsIC00DQpCRkQwNTZBNCAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQoyNTQ6ICAgICAgICAgICAgICAgICANCjI1NTogICAgICAgICAgICAgICAgIAkqcHhUb3BPZlN0YWNrID0gKFN0YWNrVHlwZV90KSBweENvZGU7IAkJLyogQ1AwX0VQQyAqLw0KQkZEMDU2QTggIDAwMUNGQzdFICAgTFcgVjEsIDI4KFM4KQ0KQkZEMDU2QUMgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDU2QjAgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyNTY6ICAgICAgICAgICAgICAgICAJcHhUb3BPZlN0YWNrLS07DQpCRkQwNTZCMiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNTZCNCAgNEM1ODAwMTggICBNT1ZaIFQxLCBUOCwgWkVSTw0KQkZEMDU2QjYgICAgICA0QzU4ICAgQURESVUgVjAsIFYwLCAtNA0KQkZEMDU2QjggIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMjU3OiAgICAgICAgICAgICAgICAgDQoyNTg6ICAgICAgICAgICAgICAgICAJKnB4VG9wT2ZTdGFjayA9IChTdGFja1R5cGVfdCkgcG9ydFRBU0tfUkVUVVJOX0FERFJFU1M7CS8qIHJhICovDQpCRkQwNTZCQyAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMA0KQkZEMDU2QkUgIDMwNjJCRkQwICAgTERDMSBGMzAsIDEyMzg2KFMwKQ0KQkZEMDU2QzAgIDdCQkQzMDYyICAgQURESVUgVjEsIFYwLCAzMTY3Nw0KQkZEMDU2QzIgIEZDNUU3QkJEICAgQURESVVQQyBBMywgNDA2MjMwMg0KQkZEMDU2QzQgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDU2QzggICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyNTk6ICAgICAgICAgICAgICAgICAJcHhUb3BPZlN0YWNrIC09IDE1Ow0KQkZEMDU2Q0EgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDU2Q0UgIEZGQzQzMDQyICAgQURESVUgVjAsIFYwLCAtNjANCkJGRDA1NkQwICBGODVFRkZDNCAgIExXIFM4LCAtMTk1NChBMCkNCkJGRDA1NkQyICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjI2MDogICAgICAgICAgICAgICAgIA0KMjYxOiAgICAgICAgICAgICAgICAgCSpweFRvcE9mU3RhY2sgPSAoU3RhY2tUeXBlX3QpIHB2UGFyYW1ldGVyczsgLyogUGFyYW1ldGVycyB0byBwYXNzIGluLiAqLw0KQkZEMDU2RDYgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQ0KQkZEMDU2REEgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDU2REUgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyNjI6ICAgICAgICAgICAgICAgICAJcHhUb3BPZlN0YWNrIC09IDE1Ow0KQkZEMDU2RTAgIDAwMThGQzVFICAgTFcgVjAsIDI0KFM4KQ0KQkZEMDU2RTQgIEZGQzQzMDQyICAgQURESVUgVjAsIFYwLCAtNjANCkJGRDA1NkU2ICBGODVFRkZDNCAgIExXIFM4LCAtMTk1NChBMCkNCkJGRDA1NkU4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjI2MzogICAgICAgICAgICAgICAgIA0KMjY0OiAgICAgICAgICAgICAgICAgCXJldHVybiBweFRvcE9mU3RhY2s7DQpCRkQwNTZFQyAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQoyNjU6ICAgICAgICAgICAgICAgICB9DQpCRkQwNTZGMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDU2RjIgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQ0KQkZEMDU2RjQgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQ0KQkZEMDU2RjYgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNA0KQkZEMDU2RjggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDU2RkEgICAgICAwQzAwICAgTk9QDQoyNjY6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI2NzogICAgICAgICAgICAgICAgIA0KMjY4OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2VGFza0V4aXRFcnJvciggdm9pZCApDQoyNjk6ICAgICAgICAgICAgICAgICB7DQpCRkQwN0JCQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDdCQkUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDdCQzAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDdCQzIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjI3MDogICAgICAgICAgICAgICAgIAkvKiBBIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHRhc2sgbXVzdCBub3QgZXhpdCBvciBhdHRlbXB0IHRvIHJldHVybiB0bw0KMjcxOiAgICAgICAgICAgICAgICAgCWl0cyBjYWxsZXIgYXMgdGhlcmUgaXMgbm90aGluZyB0byByZXR1cm4gdG8uICBJZiBhIHRhc2sgd2FudHMgdG8gZXhpdCBpdA0KMjcyOiAgICAgICAgICAgICAgICAgCXNob3VsZCBpbnN0ZWFkIGNhbGwgdlRhc2tEZWxldGUoIE5VTEwgKS4NCjI3MzogICAgICAgICAgICAgICAgIA0KMjc0OiAgICAgICAgICAgICAgICAgCUFydGlmaWNpYWxseSBmb3JjZSBhbiBhc3NlcnQoKSB0byBiZSB0cmlnZ2VyZWQgaWYgY29uZmlnQVNTRVJUKCkgaXMNCjI3NTogICAgICAgICAgICAgICAgIAlkZWZpbmVkLCB0aGVuIHN0b3AgaGVyZSBzbyBhcHBsaWNhdGlvbiB3cml0ZXJzIGNhbiBjYXRjaCB0aGUgZXJyb3IuICovDQoyNzY6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB1eFNhdmVkVGFza1N0YWNrUG9pbnRlciA9PSAwVUwgKTsNCkJGRDA3QkM0ICA4MDJDRkM1QyAgIExXIFYwLCAtMzI3MjQoR1ApDQpCRkQwN0JDOCAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwN0JERQ0KQkZEMDdCQ0MgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA3QkNFICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA3QkQwICA4QUFDMzA4MiAgIEFERElVIEEwLCBWMCwgLTMwMDM2DQpCRkQwN0JEMiAgICAgIDhBQUMgICBTQiBBMSwgMTIoVjApDQpCRkQwN0JENCAgMDExNDMwQTAgICBBRERJVSBBMSwgWkVSTywgMjc2DQpCRkQwN0JEOCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA3QkRBICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwN0JEQyAgICAgIDBDMDAgICBOT1ANCjI3NzogICAgICAgICAgICAgICAgIAlwb3J0RElTQUJMRV9JTlRFUlJVUFRTKCk7DQpCRkQwN0JERSAgNERBNjc3RTggICBKQUxTIHVsUG9ydEdldENQMFN0YXR1cw0KQkZEMDdCRTAgICAgICA0REE2ICAgQURESVUgVDUsIFQ1LCAzDQpCRkQwN0JFMiAgICAgIDBDMDAgICBOT1ANCkJGRDA3QkU0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA3QkU4ICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDA3QkVDICAwMDAxNDFBMiAgIExVSSBWMCwgMHgxDQpCRkQwN0JGMCAgRkMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMTAyNA0KQkZEMDdCRjIgIDQ0OTNGQzAwICAgTFcgWkVSTywgMTc1NTUoWkVSTykNCkJGRDA3QkY0ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDdCRjYgIDUwNDAwMDQyICAgU1JMIFYwLCBWMCwgMTANCkJGRDA3QkY4ICBCMDQyNTA0MCAgIE9SSSBWMCwgWkVSTywgLTIwNDE0DQpCRkQwN0JGQSAgMDAwM0IwNDIgICBTTFRJVSBWMCwgVjAsIDMNCkJGRDA3QkZFICAwMDExNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA3QzI0DQpCRkQwN0MwMiAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwN0MwNiAgRkZGRTQxQTIgICBMVUkgVjAsIDB4RkZGRQ0KQkZEMDdDMDggIDUwNDJGRkZFICAgTFcgUkEsIDIwNTQ2KFM4KQ0KQkZEMDdDMEEgIDAzRkY1MDQyICAgT1JJIFYwLCBWMCwgMTAyMw0KQkZEMDdDMEUgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwN0MxMCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwN0MxNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwN0MxOCAgMEMwMDUwNDIgICBPUkkgVjAsIFYwLCAzMDcyDQpCRkQwN0MxQSAgICAgIDBDMDAgICBOT1ANCkJGRDA3QzFDICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwN0MxRSAgNERCNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwU3RhdHVzDQpCRkQwN0MyMCAgICAgIDREQjYgICBBRERJVSBUNSwgVDUsIC01DQpCRkQwN0MyMiAgICAgIDBDMDAgICBOT1ANCjI3ODogICAgICAgICAgICAgICAgIAlmb3IoIDs7ICk7DQpCRkQwN0MyNCAgICAgIENGRkYgICBCIDB4QkZEMDdDMjQNCkJGRDA3QzI2ICAgICAgMEMwMCAgIE5PUA0KMjc5OiAgICAgICAgICAgICAgICAgfQ0KMjgwOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyODE6ICAgICAgICAgICAgICAgICANCjI4MjogICAgICAgICAgICAgICAgIC8qDQoyODM6ICAgICAgICAgICAgICAgICAgKiBTZXR1cCBhIHRpbWVyIGZvciBhIHJlZ3VsYXIgdGljay4gIFRoaXMgZnVuY3Rpb24gdXNlcyBwZXJpcGhlcmFsIHRpbWVyIDEuDQoyODQ6ICAgICAgICAgICAgICAgICAgKiBUaGUgZnVuY3Rpb24gaXMgZGVjbGFyZWQgd2VhayBzbyBhbiBhcHBsaWNhdGlvbiB3cml0ZXIgY2FuIHVzZSBhIGRpZmZlcmVudA0KMjg1OiAgICAgICAgICAgICAgICAgICogdGltZXIgYnkgcmVkZWZpbmluZyB0aGlzIGltcGxlbWVudGF0aW9uLiAgSWYgYSBkaWZmZXJlbnQgdGltZXIgaXMgdXNlZCB0aGVuDQoyODY6ICAgICAgICAgICAgICAgICAgKiBjb25maWdUSUNLX0lOVEVSUlVQVF9WRUNUT1IgbXVzdCBhbHNvIGJlIGRlZmluZWQgaW4gRnJlZVJUT1NDb25maWcuaCB0bw0KMjg3OiAgICAgICAgICAgICAgICAgICogZW5zdXJlIHRoZSBSVE9TIHByb3ZpZGVkIHRpY2sgaW50ZXJydXB0IGhhbmRsZXIgaXMgaW5zdGFsbGVkIG9uIHRoZSBjb3JyZWN0DQoyODg6ICAgICAgICAgICAgICAgICAgKiB2ZWN0b3IgbnVtYmVyLiAgV2hlbiBUaW1lciAxIGlzIHVzZWQgdGhlIHZlY3RvciBudW1iZXIgaXMgZGVmaW5lZCBhcw0KMjg5OiAgICAgICAgICAgICAgICAgICogX1RJTUVSXzFfVkVDVE9SLg0KMjkwOiAgICAgICAgICAgICAgICAgICovDQoyOTE6ICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKCggd2VhayApKSB2b2lkIHZBcHBsaWNhdGlvblNldHVwVGlja1RpbWVySW50ZXJydXB0KCB2b2lkICkNCjI5MjogICAgICAgICAgICAgICAgIHsNCkJGRDA2Mjg0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNjI4NiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNjI4OCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNjI4QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMjkzOiAgICAgICAgICAgICAgICAgCS8qIE1FQzE0eHggUlRPUyBUaW1lciB3aG9zZSBpbnB1dCBjbG9jayBpcyAzMktIeiAqLw0KMjk0OiAgICAgICAgICAgICAgICAgCWNvbnN0IHVpbnQzMl90IHByZWxvYWQgPSAoIDMyNzY4dWwgLyAoIGNvbmZpZ1RJQ0tfUkFURV9IWiApICk7DQpCRkQwNjI4QyAgICAgIEVEMjAgICBMSSBWMCwgMzINCkJGRDA2MjhFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjI5NTogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHByZWxvYWQgIT0gMFVMICk7DQpCRkQwNjI5MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjI5NiAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNjJBQw0KQkZEMDYyOUEgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA2MjlDICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA2MjlFICA4QUFDMzA4MiAgIEFERElVIEEwLCBWMCwgLTMwMDM2DQpCRkQwNjJBMCAgICAgIDhBQUMgICBTQiBBMSwgMTIoVjApDQpCRkQwNjJBMiAgMDEyNzMwQTAgICBBRERJVSBBMSwgWkVSTywgMjk1DQpCRkQwNjJBNiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA2MkE4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNjJBQSAgICAgIDBDMDAgICBOT1ANCjI5NjogICAgICAgICAgICAgICAgIA0KMjk3OiAgICAgICAgICAgICAgICAgCXBvcnRNTUNSX1JUTVJfQ09OVFJPTCA9IDB1bDsNCkJGRDA2MkFDICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwNjJCMCAgNzQwODUwNDIgICBPUkkgVjAsIFYwLCAyOTcwNA0KQkZEMDYyQjIgIEU4MjA3NDA4ICAgSkFMUyAweEI4MTFEMDQwDQpCRkQwNjJCNCAgICAgIEU4MjAgICBTVyBTMCwgMChWMCkNCjI5ODogICAgICAgICAgICAgICAgIAlwb3J0TU1DUl9SVE1SX1BSRUxPQUQgPSBwcmVsb2FkOw0KQkZEMDYyQjYgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDA2MkJBICA3NDA0NTA0MiAgIE9SSSBWMCwgVjAsIDI5NzAwDQpCRkQwNjJCQyAgRkM3RTc0MDQgICBKQUxTIDB4QjgwOUY4RkMNCkJGRDA2MkJFICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDA2MkMyICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMjk5OiAgICAgICAgICAgICAgICAgDQozMDA6ICAgICAgICAgICAgICAgICAJcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1NSQyA9ICggcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sgKTsNCkJGRDA2MkM0ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNjJDNiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNjJDOCAgQzBGMDUwNDIgICBPUkkgVjAsIFYwLCAtMTYxNDQNCkJGRDA2MkNDICAgICAgRUQ5MCAgIExJIFYxLCAxNg0KQkZEMDYyQ0UgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQozMDE6ICAgICAgICAgICAgICAgICAJcG9ydE1NQ1JfSlRWSUNfR0lSUTIzX1BSSUEgJj0gfiggMHgwRnVsIDw8IDE2ICk7DQpCRkQwNjJEMCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDYyRDIgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDYyRDQgIEMzRjA1MDQyICAgT1JJIFYwLCBWMCwgLTE1Mzc2DQpCRkQwNjJEOCAgQkZGRjQxQTMgICBMVUkgVjEsIDB4QkZGRg0KQkZEMDYyREEgIDUwNjNCRkZGICAgTERDMSBGMzEsIDIwNTc5KFJBKQ0KQkZEMDYyREMgIEMzRjA1MDYzICAgT1JJIFYxLCBWMSwgLTE1Mzc2DQpCRkQwNjJFMCAgICAgIDZBMzAgICBMVyBBMCwgMChWMSkNCkJGRDA2MkUyICBGRkYwNDFBMyAgIExVSSBWMSwgMHhGRkYwDQpCRkQwNjJFNCAgNTA2M0ZGRjAgICBMVyBSQSwgMjA1NzkoUzApDQpCRkQwNjJFNiAgRkZGRjUwNjMgICBPUkkgVjEsIFYxLCAtMQ0KQkZEMDYyRTggIDQ0OUNGRkZGICAgTFcgUkEsIDE3NTY0KFJBKQ0KQkZEMDYyRUEgICAgICA0NDlDICAgQU5EMTYgVjEsIEEwDQpCRkQwNjJFQyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjMwMjogICAgICAgICAgICAgICAgIAlwb3J0TU1DUl9KVFZJQ19HSVJRMjNfUFJJQSB8PSAoICggY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWSApIDw8IDE2ICk7DQpCRkQwNjJFRSAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDYyRjAgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDYyRjIgIEMzRjA1MDQyICAgT1JJIFYwLCBWMCwgLTE1Mzc2DQpCRkQwNjJGNiAgQkZGRjQxQTMgICBMVUkgVjEsIDB4QkZGRg0KQkZEMDYyRjggIDUwNjNCRkZGICAgTERDMSBGMzEsIDIwNTc5KFJBKQ0KQkZEMDYyRkEgIEMzRjA1MDYzICAgT1JJIFYxLCBWMSwgLTE1Mzc2DQpCRkQwNjJGRSAgICAgIDY5QjAgICBMVyBWMSwgMChWMSkNCkJGRDA2MzAwICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMzAzOiAgICAgICAgICAgICAgICAgCXBvcnRNTUNSX0pUVklDX0dJUlEyM19TRVRFTiA9ICggcG9ydEdJUlEyM19SVE9TX1RJTUVSX01BU0sgKTsNCkJGRDA2MzAyICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNjMwNCAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNjMwNiAgQzBGNDUwNDIgICBPUkkgVjAsIFYwLCAtMTYxNDANCkJGRDA2MzBBICAgICAgRUQ5MCAgIExJIFYxLCAxNg0KQkZEMDYzMEMgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQozMDQ6ICAgICAgICAgICAgICAgICANCjMwNTogICAgICAgICAgICAgICAgIAlwb3J0TU1DUl9SVE1SX0NPTlRST0wgPSAweDBGdTsNCkJGRDA2MzBFICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwNjMxMiAgNzQwODUwNDIgICBPUkkgVjAsIFYwLCAyOTcwNA0KQkZEMDYzMTQgIEVEOEY3NDA4ICAgSkFMUyAweEI4MTFEQjFFDQpCRkQwNjMxNiAgICAgIEVEOEYgICBMSSBWMSwgMTUNCkJGRDA2MzE4ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMzA2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDYzMUEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA2MzFDICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA2MzFFICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA2MzIwICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA2MzIyICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA2MzI0ICAgICAgMEMwMCAgIE5PUA0KMzA3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMDg6ICAgICAgICAgICAgICAgICANCjMwOTogICAgICAgICAgICAgICAgIHZvaWQgdlBvcnRFbmRTY2hlZHVsZXIodm9pZCkNCjMxMDogICAgICAgICAgICAgICAgIHsNCkJGRDA5N0E4ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwOTdBQSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwOTdBQyAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwOTdBRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMzExOiAgICAgICAgICAgICAgICAgCS8qIE5vdCBpbXBsZW1lbnRlZCBpbiBwb3J0cyB3aGVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJldHVybiB0by4NCjMxMjogICAgICAgICAgICAgICAgIAlBcnRpZmljaWFsbHkgZm9yY2UgYW4gYXNzZXJ0LiAqLw0KMzEzOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggdXhJbnRlcnJ1cHROZXN0aW5nID09IDEwMDBVTCApOw0KQkZEMDk3QjAgIDgwMTRGQzdDICAgTFcgVjEsIC0zMjc0OChHUCkNCkJGRDA5N0I0ICAwM0U4MzA0MCAgIEFERElVIFYwLCBaRVJPLCAxMDAwDQpCRkQwOTdCOCAgMDAwQTk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA5N0QwDQpCRkQwOTdCQSAgMEMwMDAwMEEgICBTTEwgWkVSTywgVDIsIDENCkJGRDA5N0JDICAgICAgMEMwMCAgIE5PUA0KQkZEMDk3QkUgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA5N0MwICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA5N0MyICA4QUFDMzA4MiAgIEFERElVIEEwLCBWMCwgLTMwMDM2DQpCRkQwOTdDNCAgICAgIDhBQUMgICBTQiBBMSwgMTIoVjApDQpCRkQwOTdDNiAgMDEzOTMwQTAgICBBRERJVSBBMSwgWkVSTywgMzEzDQpCRkQwOTdDQSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA5N0NDICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwOTdDRSAgICAgIDBDMDAgICBOT1ANCjMxNDogICAgICAgICAgICAgICAgIH0NCkJGRDA5N0QwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTdEMiAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApDQpCRkQwOTdENCAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApDQpCRkQwOTdENiAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0DQpCRkQwOTdEOCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTdEQSAgICAgIDBDMDAgICBOT1ANCjMxNTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMzE2OiAgICAgICAgICAgICAgICAgDQozMTc6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhQb3J0U3RhcnRTY2hlZHVsZXIoIHZvaWQgKQ0KMzE4OiAgICAgICAgICAgICAgICAgew0KQkZEMDY4OTggICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQNCkJGRDA2ODlBICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkNCkJGRDA2ODlDICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkNCkJGRDA2ODlFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQozMTk6ICAgICAgICAgICAgICAgICBleHRlcm4gdm9pZCB2UG9ydFN0YXJ0Rmlyc3RUYXNrKCB2b2lkICk7DQozMjA6ICAgICAgICAgICAgICAgICBleHRlcm4gdm9pZCAqcHhDdXJyZW50VENCOw0KMzIxOiAgICAgICAgICAgICAgICAgDQozMjI6ICAgICAgICAgICAgICAgICAJI2lmICggY29uZmlnQ0hFQ0tfRk9SX1NUQUNLX09WRVJGTE9XID4gMiApDQozMjM6ICAgICAgICAgICAgICAgICAJew0KMzI0OiAgICAgICAgICAgICAgICAgCQkvKiBGaWxsIHRoZSBJU1Igc3RhY2sgdG8gbWFrZSBpdCBlYXN5IHRvIGFzc2VzIGhvdyBtdWNoIGlzIGJlaW5nIHVzZWQuICovDQozMjU6ICAgICAgICAgICAgICAgICAJCW1lbXNldCggKCB2b2lkICogKSB4SVNSU3RhY2ssIHBvcnRJU1JfU1RBQ0tfRklMTF9CWVRFLCBzaXplb2YoIHhJU1JTdGFjayApICk7DQpCRkQwNjhBMCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDY4QTIgIDMwODJCRkQyICAgTERDMSBGMzAsIDEyNDE4KFMyKQ0KQkZEMDY4QTQgIEFENjgzMDgyICAgQURESVUgQTAsIFYwLCAtMjExNDQNCkJGRDA2OEE2ICAgICAgQUQ2OCAgIEJORVogVjAsIDB4QkZEMDY5NzgNCkJGRDA2OEE4ICAwMEVFMzBBMCAgIEFERElVIEExLCBaRVJPLCAyMzgNCkJGRDA2OEFBICAzMEMwMDBFRSAgIFJPVFIgQTMsIFQ2LCA2DQpCRkQwNjhBQyAgMEJFMDMwQzAgICBBRERJVSBBMiwgWkVSTywgMzA0MA0KQkZEMDY4QUUgICAgICAwQkUwICAgTEJVIEEzLCAwKEEyKQ0KQkZEMDY4QjAgIDM2RjY3N0U4ICAgSkFMUyAweEJGRDA2REVDDQpCRkQwNjhCMiAgMEMwMDM2RjYgICBMSFUgUzcsIDMwNzIoUzYpDQpCRkQwNjhCNCAgICAgIDBDMDAgICBOT1ANCjMyNjogICAgICAgICAgICAgICAgIAl9DQozMjc6ICAgICAgICAgICAgICAgICAJI2VuZGlmIC8qIGNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyA+IDIgKi8NCjMyODogICAgICAgICAgICAgICAgIA0KMzI5OiAgICAgICAgICAgICAgICAgCS8qIENsZWFyIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgZmxhZy4gKi8NCjMzMDogICAgICAgICAgICAgICAgIAlwb3J0TU1DUl9KVFZJQ19HSVJRMjRfU1JDID0gKHBvcnRHSVJRMjRfTTE0S19TT0ZUSVJRMF9NQVNLKTsNCkJGRDA2OEI2ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNjhCOCAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNjhCQSAgQzEwMDUwNDIgICBPUkkgVjAsIFYwLCAtMTYxMjgNCkJGRDA2OEJFICAgICAgRUQ4MiAgIExJIFYxLCAyDQpCRkQwNjhDMCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjMzMTogICAgICAgICAgICAgICAgIA0KMzMyOiAgICAgICAgICAgICAgICAgCS8qIFNldCBzb2Z0d2FyZSB0aW1lciBwcmlvcml0eS4NCjMzMzogICAgICAgICAgICAgICAgIAlFYWNoIEdJUlFuIGhhcyBvbmUgbmliYmxlIGNvbnRhaW5pbmcgaXRzIHByaW9yaXR5ICovDQozMzQ6ICAgICAgICAgICAgICAgICAJcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1BSSUEgJj0gfigweEYwdWwpOw0KQkZEMDY4QzIgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA2OEM0ICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkNCkJGRDA2OEM2ICBDNDAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTM2MA0KQkZEMDY4Q0EgIEJGRkY0MUEzICAgTFVJIFYxLCAweEJGRkYNCkJGRDA2OENDICA1MDYzQkZGRiAgIExEQzEgRjMxLCAyMDU3OShSQSkNCkJGRDA2OENFICBDNDAwNTA2MyAgIE9SSSBWMSwgVjEsIC0xNTM2MA0KQkZEMDY4RDIgICAgICA2QTMwICAgTFcgQTAsIDAoVjEpDQpCRkQwNjhENCAgRkYwRjMwNjAgICBBRERJVSBWMSwgWkVSTywgLTI0MQ0KQkZEMDY4RDYgIDQ0OUNGRjBGICAgTFcgVDgsIDE3NTY0KFQ3KQ0KQkZEMDY4RDggICAgICA0NDlDICAgQU5EMTYgVjEsIEEwDQpCRkQwNjhEQSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjMzNTogICAgICAgICAgICAgICAgIAlwb3J0TU1DUl9KVFZJQ19HSVJRMjRfUFJJQSB8PSAoIGNvbmZpZ0tFUk5FTF9JTlRFUlJVUFRfUFJJT1JJVFkgPDwgNCApOw0KQkZEMDY4REMgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA2OERFICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkNCkJGRDA2OEUwICBDNDAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTM2MA0KQkZEMDY4RTQgIEJGRkY0MUEzICAgTFVJIFYxLCAweEJGRkYNCkJGRDA2OEU2ICA1MDYzQkZGRiAgIExEQzEgRjMxLCAyMDU3OShSQSkNCkJGRDA2OEU4ICBDNDAwNTA2MyAgIE9SSSBWMSwgVjEsIC0xNTM2MA0KQkZEMDY4RUMgICAgICA2OUIwICAgTFcgVjEsIDAoVjEpDQpCRkQwNjhFRSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjMzNjogICAgICAgICAgICAgICAgIA0KMzM3OiAgICAgICAgICAgICAgICAgCS8qIEVuYWJsZSBzb2Z0d2FyZSBpbnRlcnJ1cHQuICovDQozMzg6ICAgICAgICAgICAgICAgICAJcG9ydE1NQ1JfSlRWSUNfR0lSUTI0X1NFVEVOID0gKCBwb3J0R0lSUTI0X00xNEtfU09GVElSUTBfTUFTSyApOw0KQkZEMDY4RjAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA2OEYyICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkNCkJGRDA2OEY0ICBDMTA0NTA0MiAgIE9SSSBWMCwgVjAsIC0xNjEyNA0KQkZEMDY4RjggICAgICBFRDgyICAgTEkgVjEsIDINCkJGRDA2OEZBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMzM5OiAgICAgICAgICAgICAgICAgDQozNDA6ICAgICAgICAgICAgICAgICAJLyogU2V0dXAgdGhlIHRpbWVyIHRvIGdlbmVyYXRlIHRoZSB0aWNrLiAgSW50ZXJydXB0cyB3aWxsIGhhdmUgYmVlbg0KMzQxOiAgICAgICAgICAgICAgICAgCWRpc2FibGVkIGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLiAqLw0KMzQyOiAgICAgICAgICAgICAgICAgCXZBcHBsaWNhdGlvblNldHVwVGlja1RpbWVySW50ZXJydXB0KCk7DQpCRkQwNjhGQyAgMzE0Mjc3RTggICBKQUxTIHZBcHBsaWNhdGlvblNldHVwVGlja1RpbWVySW50ZXJydXB0DQpCRkQwNjhGRSAgMEMwMDMxNDIgICBBRERJVSBUMiwgVjAsIDMwNzINCkJGRDA2OTAwICAgICAgMEMwMCAgIE5PUA0KMzQzOiAgICAgICAgICAgICAgICAgDQozNDQ6ICAgICAgICAgICAgICAgICAJLyogS2ljayBvZmYgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGhhcyBiZWVuIGNyZWF0ZWQgc28gZmFyLg0KMzQ1OiAgICAgICAgICAgICAgICAgCUl0cyBzdGFjayBsb2NhdGlvbiBpcyBsb2FkZWQgaW50byB1eFNhdmVkVGFza1N0YWNrUG9pbnRlci4gKi8NCjM0NjogICAgICAgICAgICAgICAgIAl1eFNhdmVkVGFza1N0YWNrUG9pbnRlciA9ICooIFVCYXNlVHlwZV90ICogKSBweEN1cnJlbnRUQ0I7DQpCRkQwNjkwMiAgODAzMEZDNUMgICBMVyBWMCwgLTMyNzIwKEdQKQ0KQkZEMDY5MDYgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwNjkwOCAgODAyQ0Y4NUMgICBTVyBWMCwgLTMyNzI0KEdQKQ0KMzQ3OiAgICAgICAgICAgICAgICAgCXZQb3J0U3RhcnRGaXJzdFRhc2soKTsNCkJGRDA2OTBDICAwNTVBNzdFOCAgIEpBTFMgMHhCRkQwMEFCNA0KQkZEMDY5MEUgICAgICAwNTVBICAgQUREVSBWMCwgQTEsIEExDQpCRkQwNjkxMCAgICAgIDBDMDAgICBOT1ANCjM0ODogICAgICAgICAgICAgICAgIA0KMzQ5OiAgICAgICAgICAgICAgICAgCS8qIFNob3VsZCBuZXZlciBnZXQgaGVyZSBhcyB0aGUgdGFza3Mgd2lsbCBub3cgYmUgZXhlY3V0aW5nISAgQ2FsbCB0aGUgdGFzaw0KMzUwOiAgICAgICAgICAgICAgICAgCWV4aXQgZXJyb3IgZnVuY3Rpb24gdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBhIHN0YXRpYyBmdW5jdGlvbg0KMzUxOiAgICAgICAgICAgICAgICAgCW5vdCBiZWluZyBjYWxsZWQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgYXBwbGljYXRpb24gd3JpdGVyIG92ZXJyaWRlcyB0aGlzDQozNTI6ICAgICAgICAgICAgICAgICAJZnVuY3Rpb25hbGl0eSBieSBkZWZpbmluZyBjb25maWdUQVNLX1JFVFVSTl9BRERSRVNTLiAqLw0KMzUzOiAgICAgICAgICAgICAgICAgCXBydlRhc2tFeGl0RXJyb3IoKTsNCkJGRDA2OTEyICAzRERFNzdFOCAgIEpBTFMgcHJ2VGFza0V4aXRFcnJvcg0KQkZEMDY5MTQgIDBDMDAzRERFICAgTEggVDYsIDMwNzIoUzgpDQpCRkQwNjkxNiAgICAgIDBDMDAgICBOT1ANCjM1NDogICAgICAgICAgICAgICAgIA0KMzU1OiAgICAgICAgICAgICAgICAgCXJldHVybiBwZEZBTFNFOw0KQkZEMDY5MTggICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTw0KMzU2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDY5MUEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA2OTFDICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA2OTFFICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA2OTIwICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA2OTIyICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA2OTI0ICAgICAgMEMwMCAgIE5PUA0KMzU3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozNTg6ICAgICAgICAgICAgICAgICANCjM1OTogICAgICAgICAgICAgICAgIHZvaWQgdlBvcnRJbmNyZW1lbnRUaWNrKCB2b2lkICkNCjM2MDogICAgICAgICAgICAgICAgIHsNCkJGRDA2OUI4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNjlCQSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNjlCQyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNjlCRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMzYxOiAgICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1czsNCjM2MjogICAgICAgICAgICAgICAgIHVpbnQzMl90IHVsQ2F1c2U7DQozNjM6ICAgICAgICAgICAgICAgICANCjM2NDogICAgICAgICAgICAgICAgIAl1eFNhdmVkU3RhdHVzID0gdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoKTsNCkJGRDA2OUMwICA0NzVFNzdFOCAgIEpBTFMgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1INCkJGRDA2OUM0ICAgICAgMEMwMCAgIE5PUA0KQkZEMDY5QzYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMzY1OiAgICAgICAgICAgICAgICAgCXsNCjM2NjogICAgICAgICAgICAgICAgIAkJaWYoIHhUYXNrSW5jcmVtZW50VGljaygpICE9IHBkRkFMU0UgKQ0KQkZEMDY5Q0EgIDEwNDA3N0U4ICAgSkFMUyB4VGFza0luY3JlbWVudFRpY2sNCkJGRDA2OUNDICAwQzAwMTA0MCAgIEFEREkgVjAsIFpFUk8sIDMwNzINCkJGRDA2OUNFICAgICAgMEMwMCAgIE5PUA0KQkZEMDY5RDAgIDAwMTA0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDY5RjQNCjM2NzogICAgICAgICAgICAgICAgIAkJew0KMzY4OiAgICAgICAgICAgICAgICAgCQkJLyogUGVuZCBhIGNvbnRleHQgc3dpdGNoLiAqLw0KMzY5OiAgICAgICAgICAgICAgICAgCQkJdWxDYXVzZSA9IHVsUG9ydEdldENQMENhdXNlKCk7DQpCRkQwNjlENCAgNERDNjc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwNjlENiAgICAgIDREQzYgICBBRERJVSBUNiwgVDYsIDMNCkJGRDA2OUQ4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDY5REEgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMzcwOiAgICAgICAgICAgICAgICAgCQkJdWxDYXVzZSB8PSAoIDF1bCA8PCA4VUwgKTsNCkJGRDA2OURFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2OUUyICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDY5RTYgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMzcxOiAgICAgICAgICAgICAgICAgCQkJdlBvcnRTZXRDUDBDYXVzZSggdWxDYXVzZSApOw0KQkZEMDY5RUEgIDAwMTRGQzlFICAgTFcgQTAsIDIwKFM4KQ0KQkZEMDY5RUUgIDRERDY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwNjlGMCAgICAgIDRERDYgICBBRERJVSBUNiwgVDYsIC01DQpCRkQwNjlGMiAgICAgIDBDMDAgICBOT1ANCjM3MjogICAgICAgICAgICAgICAgIAkJfQ0KMzczOiAgICAgICAgICAgICAgICAgCX0NCjM3NDogICAgICAgICAgICAgICAgIAl2UG9ydENsZWFySW50ZXJydXB0TWFza0Zyb21JU1IoIHV4U2F2ZWRTdGF0dXMgKTsNCkJGRDA2OUY0ICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkNCkJGRDA2OUY4ICA0RDVFNzdFOCAgIEpBTFMgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSDQpCRkQwNjlGQSAgICAgIDRENUUgICBBRERJVSBUMiwgVDIsIC0xDQpCRkQwNjlGQyAgICAgIDBDMDAgICBOT1ANCjM3NTogICAgICAgICAgICAgICAgIA0KMzc2OiAgICAgICAgICAgICAgICAgCS8qIExvb2sgZm9yIHRoZSBJU1Igc3RhY2sgZ2V0dGluZyBuZWFyIG9yIHBhc3QgaXRzIGxpbWl0LiAqLw0KMzc3OiAgICAgICAgICAgICAgICAgCXBvcnRDSEVDS19JU1JfU1RBQ0soKTsNCkJGRDA2OUZFICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwNkEwMCAgMzA4MkJGRDIgICBMREMxIEYzMCwgMTI0MTgoUzIpDQpCRkQwNkEwMiAgQUQ2ODMwODIgICBBRERJVSBBMCwgVjAsIC0yMTE0NA0KQkZEMDZBMDQgICAgICBBRDY4ICAgQk5FWiBWMCwgMHhCRkQwNkFENg0KQkZEMDZBMDYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA2QTA4ICAzMEEyQkZEMSAgIExEQzEgRjMwLCAxMjQ1MChTMSkNCkJGRDA2QTBBICA4QTk0MzBBMiAgIEFERElVIEExLCBWMCwgLTMwMDYwDQpCRkQwNkEwQyAgICAgIDhBOTQgICBTQiBBMSwgNChTMSkNCkJGRDA2QTBFICAgICAgRUYxNCAgIExJIEEyLCAyMA0KQkZEMDZBMTAgIDNEQTY3N0U4ICAgSkFMUyAweEJGRDA3QjRDDQpCRkQwNkExMiAgMEMwMDNEQTYgICBMSCBUNSwgMzA3MihBMikNCkJGRDA2QTE0ICAgICAgMEMwMCAgIE5PUA0KQkZEMDZBMTYgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDZBMkMNCkJGRDA2QTFBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNkExQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNkExRSAgOEFBQzMwODIgICBBRERJVSBBMCwgVjAsIC0zMDAzNg0KQkZEMDZBMjAgICAgICA4QUFDICAgU0IgQTEsIDEyKFYwKQ0KQkZEMDZBMjIgIDAxNzkzMEEwICAgQURESVUgQTEsIFpFUk8sIDM3Nw0KQkZEMDZBMjYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwNkEyOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDZBMkEgICAgICAwQzAwICAgTk9QDQozNzg6ICAgICAgICAgICAgICAgICANCjM3OTogICAgICAgICAgICAgICAgIAkvKiBDbGVhciB0aW1lciBpbnRlcnJ1cHQuICovDQozODA6ICAgICAgICAgICAgICAgICAJY29uZmlnQ0xFQVJfVElDS19USU1FUl9JTlRFUlJVUFQoKTsNCkJGRDA2QTJDICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNkEyRSAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNkEzMCAgQzBGMDUwNDIgICBPUkkgVjAsIFYwLCAtMTYxNDQNCkJGRDA2QTM0ICAgICAgRUQ5MCAgIExJIFYxLCAxNg0KQkZEMDZBMzYgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQozODE6ICAgICAgICAgICAgICAgICB9DQpCRkQwNkEzOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDZBM0EgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDZBM0MgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDZBM0UgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDZBNDAgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDZBNDIgICAgICAwQzAwICAgTk9QDQozODI6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM4MzogICAgICAgICAgICAgICAgIA0KMzg0OiAgICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhQb3J0U2V0SW50ZXJydXB0TWFza0Zyb21JU1IoIHZvaWQgKQ0KMzg1OiAgICAgICAgICAgICAgICAgew0KQkZEMDhFQkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4RUJFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4RUMwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4RUMyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQozODY6ICAgICAgICAgICAgICAgICBVQmFzZVR5cGVfdCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXI7DQozODc6ICAgICAgICAgICAgICAgICANCjM4ODogICAgICAgICAgICAgICAgIAlwcnZEaXNhYmxlSW50ZXJydXB0KCk7DQpCRkQwOEVDNCAgNEQ0Qzc3RTggICBKQUxTIHBydkRpc2FibGVJbnRlcnJ1cHQNCkJGRDA4RUM2ICAgICAgNEQ0QyAgIEFERElVIFQyLCBUMiwgNg0KQkZEMDhFQzggICAgICAwQzAwICAgTk9QDQozODk6ICAgICAgICAgICAgICAgICAJdXhTYXZlZFN0YXR1c1JlZ2lzdGVyID0gdWxQb3J0R2V0Q1AwU3RhdHVzKCkgfCAweDAxOw0KQkZEMDhFQ0EgIDREQTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBTdGF0dXMNCkJGRDA4RUNDICAgICAgNERBNiAgIEFERElVIFQ1LCBUNSwgMw0KQkZEMDhFQ0UgICAgICAwQzAwICAgTk9QDQpCRkQwOEVEMCAgMDAwMTUwNDIgICBPUkkgVjAsIFYwLCAxDQpCRkQwOEVENCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQozOTA6ICAgICAgICAgICAgICAgICANCjM5MTogICAgICAgICAgICAgICAgIAkvKiBUaGlzIGNsZWFycyB0aGUgSVBMIGJpdHMsIHRoZW4gc2V0cyB0aGVtIHRvDQozOTI6ICAgICAgICAgICAgICAgICAJY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZA0KMzkzOiAgICAgICAgICAgICAgICAgCWZyb20gYW4gaW50ZXJydXB0IHRoYXQgaGFzIGEgcHJpb3JpdHkgYWJvdmUNCjM5NDogICAgICAgICAgICAgICAgIAljb25maWdNQVhfU1lTQ0FMTF9JTlRFUlJVUFRfUFJJT1JJVFkgc28sIHdoZW4gdXNlZCBjb3JyZWN0bHksIHRoZSBhY3Rpb24NCjM5NTogICAgICAgICAgICAgICAgIAljYW4gb25seSByZXN1bHQgaW4gdGhlIElQTCBiZWluZyB1bmNoYW5nZWQgb3IgcmFpc2VkLCBhbmQgdGhlcmVmb3JlIG5ldmVyDQozOTY6ICAgICAgICAgICAgICAgICAJbG93ZXJlZC4gKi8NCjM5NzogICAgICAgICAgICAgICAgIAl2UG9ydFNldENQMFN0YXR1cyggKCAoIHV4U2F2ZWRTdGF0dXNSZWdpc3RlciAmICggfnBvcnRBTExfSVBMX0JJVFMgKSApICkgfCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCBwb3J0SVBMX1NISUZUICkgKTsNCkJGRDA4RUQ4ICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDA4RURDICBGRkZFNDFBMiAgIExVSSBWMCwgMHhGRkZFDQpCRkQwOEVERSAgNTA0MkZGRkUgICBMVyBSQSwgMjA1NDYoUzgpDQpCRkQwOEVFMCAgMDNGRjUwNDIgICBPUkkgVjAsIFYwLCAxMDIzDQpCRkQwOEVFNCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA4RUU2ICAwQzAwNTA0MiAgIE9SSSBWMCwgVjAsIDMwNzINCkJGRDA4RUU4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDhFRUEgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4RUVDICA0REI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBTdGF0dXMNCkJGRDA4RUVFICAgICAgNERCNiAgIEFERElVIFQ1LCBUNSwgLTUNCkJGRDA4RUYwICAgICAgMEMwMCAgIE5PUA0KMzk4OiAgICAgICAgICAgICAgICAgDQozOTk6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHV4U2F2ZWRTdGF0dXNSZWdpc3RlcjsNCkJGRDA4RUYyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjQwMDogICAgICAgICAgICAgICAgIH0NCkJGRDA4RUY2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOEVGOCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOEVGQSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOEVGQyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOEVGRSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOEYwMCAgICAgIDBDMDAgICBOT1ANCjQwMTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDAyOiAgICAgICAgICAgICAgICAgDQo0MDM6ICAgICAgICAgICAgICAgICB2b2lkIHZQb3J0Q2xlYXJJbnRlcnJ1cHRNYXNrRnJvbUlTUiggVUJhc2VUeXBlX3QgdXhTYXZlZFN0YXR1c1JlZ2lzdGVyICkNCjQwNDogICAgICAgICAgICAgICAgIHsNCkJGRDA5QUJDICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwOUFCRSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwOUFDMCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwOUFDMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlBQzQgIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQ0KNDA1OiAgICAgICAgICAgICAgICAgCXZQb3J0U2V0Q1AwU3RhdHVzKCB1eFNhdmVkU3RhdHVzUmVnaXN0ZXIgKTsNCkJGRDA5QUM4ICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkNCkJGRDA5QUNDICA0REI2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBTdGF0dXMNCkJGRDA5QUNFICAgICAgNERCNiAgIEFERElVIFQ1LCBUNSwgLTUNCkJGRDA5QUQwICAgICAgMEMwMCAgIE5PUA0KNDA2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlBRDIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5QUQ0ICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA5QUQ2ICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA5QUQ4ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA5QURBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5QURDICAgICAgMEMwMCAgIE5PUA0KNDA3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0MDg6ICAgICAgICAgICAgICAgICANCjQwOTogICAgICAgICAgICAgICAgIA0KNDEwOiAgICAgICAgICAgICAgICAgDQo0MTE6ICAgICAgICAgICAgICAgICANCjQxMjogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9zb3VyY2UvcG9ydGFibGUvbWVtbWFuZy9oZWFwXzIuYyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKg0KMjogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIFY4LjIuMSAtIENvcHlyaWdodCAoQykgMjAxNSBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCjM6ICAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkDQo0OiAgICAgICAgICAgICAgICAgICANCjU6ICAgICAgICAgICAgICAgICAgICAgICBWSVNJVCBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBUTyBFTlNVUkUgWU9VIEFSRSBVU0lORyBUSEUgTEFURVNUIFZFUlNJT04uDQo2OiAgICAgICAgICAgICAgICAgICANCjc6ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KODogICAgICAgICAgICAgICAgICAgDQo5OiAgICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KMTA6ICAgICAgICAgICAgICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KMTE6ICAgICAgICAgICAgICAgICAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiA+Pj4+IEFORCBNT0RJRklFRCBCWSA8PDw8IHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQoxMjogICAgICAgICAgICAgICAgICANCjEzOiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE0OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBOT1RFOiBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvICAgICAhPDwNCjE1OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgICAhPDwNCjE2OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvYmxpZ2VkIHRvIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzICAgICAhPDwNCjE3OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUyBrZXJuZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPDwNCjE4OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE5OiAgICAgICAgICAgICAgICAgIA0KMjA6ICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQ0KMjE6ICAgICAgICAgICAgICAgICAgICAgIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MNCjIyOiAgICAgICAgICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBGdWxsIGxpY2Vuc2UgdGV4dCBpcyBhdmFpbGFibGUgb24gdGhlIGZvbGxvd2luZw0KMjM6ICAgICAgICAgICAgICAgICAgICAgIGxpbms6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sDQoyNDogICAgICAgICAgICAgICAgICANCjI1OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMjc6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIEZyZWVSVE9TIHByb3ZpZGVzIGNvbXBsZXRlbHkgZnJlZSB5ZXQgcHJvZmVzc2lvbmFsbHkgZGV2ZWxvcGVkLCAgICAqDQoyODogICAgICAgICAgICAgICAgICAgICAgICogICAgcm9idXN0LCBzdHJpY3RseSBxdWFsaXR5IGNvbnRyb2xsZWQsIHN1cHBvcnRlZCwgYW5kIGNyb3NzICAgICAgICAgICoNCjI5OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBwbGF0Zm9ybSBzb2Z0d2FyZSB0aGF0IGlzIG1vcmUgdGhhbiBqdXN0IHRoZSBtYXJrZXQgbGVhZGVyLCBpdCAgICAgKg0KMzA6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIGlzIHRoZSBpbmR1c3RyeSdzIGRlIGZhY3RvIHN0YW5kYXJkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMTogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjMyOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBIZWxwIHlvdXJzZWxmIGdldCBzdGFydGVkIHF1aWNrbHkgd2hpbGUgc2ltdWx0YW5lb3VzbHkgaGVscGluZyAgICAgKg0KMzM6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHRvIHN1cHBvcnQgdGhlIEZyZWVSVE9TIHByb2plY3QgYnkgcHVyY2hhc2luZyBhIEZyZWVSVE9TICAgICAgICAgICAqDQozNDogICAgICAgICAgICAgICAgICAgICAgICogICAgdHV0b3JpYWwgYm9vaywgcmVmZXJlbmNlIG1hbnVhbCwgb3IgYm90aDogICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM1OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzY6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgLSBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZw0KNDA6ICAgICAgICAgICAgICAgICAgICAgIHRoZSBGQVEgcGFnZSAiTXkgYXBwbGljYXRpb24gZG9lcyBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyIuICBIYXZlIHlvdQ0KNDE6ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY29uZmlnQVNTRVJUKCk/DQo0MjogICAgICAgICAgICAgICAgICANCjQzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9zdXBwb3J0IC0gSW4gcmV0dXJuIGZvciByZWNlaXZpbmcgdGhpcyB0b3AgcXVhbGl0eQ0KNDQ6ICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIHNvZnR3YXJlIGZvciBmcmVlIHdlIHJlcXVlc3QgeW91IGFzc2lzdCBvdXIgZ2xvYmFsIGNvbW11bml0eSBieQ0KNDU6ICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHN1cHBvcnQgZm9ydW0uDQo0NjogICAgICAgICAgICAgICAgICANCjQ3OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy90cmFpbmluZyAtIEludmVzdGluZyBpbiB0cmFpbmluZyBhbGxvd3MgeW91ciB0ZWFtIHRvDQo0ODogICAgICAgICAgICAgICAgICAgICAgYmUgYXMgcHJvZHVjdGl2ZSBhcyBwb3NzaWJsZSBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIE5vdyB5b3UgY2FuIHJlY2VpdmUNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyB0cmFpbmluZyBkaXJlY3RseSBmcm9tIFJpY2hhcmQgQmFycnksIENFTyBvZiBSZWFsIFRpbWUgRW5naW5lZXJzDQo1MDogICAgICAgICAgICAgICAgICAgICAgTHRkLCBhbmQgdGhlIHdvcmxkJ3MgbGVhZGluZyBhdXRob3JpdHkgb24gdGhlIHdvcmxkJ3MgbGVhZGluZyBSVE9TLg0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCjUzOiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLCBhIERPUw0KNTQ6ICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgRkFUIGZpbGUgc3lzdGVtLCBhbmQgb3VyIHRpbnkgdGhyZWFkIGF3YXJlIFVEUC9JUCBzdGFjay4NCjU1OiAgICAgICAgICAgICAgICAgIA0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL2xhYnMgLSBXaGVyZSBuZXcgRnJlZVJUT1MgcHJvZHVjdHMgZ28gdG8gaW5jdWJhdGUuDQo1NzogICAgICAgICAgICAgICAgICAgICAgQ29tZSBhbmQgdHJ5IEZyZWVSVE9TK1RDUCwgb3VyIG5ldyBvcGVuIHNvdXJjZSBUQ1AvSVAgc3RhY2sgZm9yIEZyZWVSVE9TLg0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZC4gbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoDQo2MDogICAgICAgICAgICAgICAgICAgICAgSW50ZWdyaXR5IFN5c3RlbXMgbHRkLiB0byBzZWxsIHVuZGVyIHRoZSBPcGVuUlRPUyBicmFuZC4gIExvdyBjb3N0IE9wZW5SVE9TDQo2MTogICAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMgb2ZmZXIgdGlja2V0ZWQgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uIGFuZCBjb21tZXJjaWFsIG1pZGRsZXdhcmUuDQo2MjogICAgICAgICAgICAgICAgICANCjYzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbyBwcm92aWRlIGEgc2FmZXR5DQo2NDogICAgICAgICAgICAgICAgICAgICAgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIGZvciB1c2UgaW4gc2FmZXR5IGFuZA0KNjU6ICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb24gY3JpdGljYWwgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBwcm92YWJsZSBkZXBlbmRhYmlsaXR5Lg0KNjY6ICAgICAgICAgICAgICAgICAgDQo2NzogICAgICAgICAgICAgICAgICAgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQo2ODogICAgICAgICAgICAgICAgICAqLw0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICAvKg0KNzE6ICAgICAgICAgICAgICAgICAgICogQSBzYW1wbGUgaW1wbGVtZW50YXRpb24gb2YgcHZQb3J0TWFsbG9jKCkgYW5kIHZQb3J0RnJlZSgpIHRoYXQgcGVybWl0cw0KNzI6ICAgICAgICAgICAgICAgICAgICogYWxsb2NhdGVkIGJsb2NrcyB0byBiZSBmcmVlZCwgYnV0IGRvZXMgbm90IGNvbWJpbmUgYWRqYWNlbnQgZnJlZSBibG9ja3MNCjczOiAgICAgICAgICAgICAgICAgICAqIGludG8gYSBzaW5nbGUgbGFyZ2VyIGJsb2NrIChhbmQgc28gd2lsbCBmcmFnbWVudCBtZW1vcnkpLiAgU2VlIGhlYXBfNC5jIGZvcg0KNzQ6ICAgICAgICAgICAgICAgICAgICogYW4gZXF1aXZhbGVudCB0aGF0IGRvZXMgY29tYmluZSBhZGphY2VudCBibG9ja3MgaW50byBzaW5nbGUgbGFyZ2VyIGJsb2Nrcy4NCjc1OiAgICAgICAgICAgICAgICAgICAqDQo3NjogICAgICAgICAgICAgICAgICAgKiBTZWUgaGVhcF8xLmMsIGhlYXBfMy5jIGFuZCBoZWFwXzQuYyBmb3IgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhlDQo3NzogICAgICAgICAgICAgICAgICAgKiBtZW1vcnkgbWFuYWdlbWVudCBwYWdlcyBvZiBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4NCjc4OiAgICAgICAgICAgICAgICAgICAqLw0KNzk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KODA6ICAgICAgICAgICAgICAgICAgDQo4MTogICAgICAgICAgICAgICAgICAvKiBEZWZpbmluZyBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSBwcmV2ZW50cyB0YXNrLmggZnJvbSByZWRlZmluaW5nDQo4MjogICAgICAgICAgICAgICAgICBhbGwgdGhlIEFQSSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBNUFUgd3JhcHBlcnMuICBUaGF0IHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbg0KODM6ICAgICAgICAgICAgICAgICAgdGFzay5oIGlzIGluY2x1ZGVkIGZyb20gYW4gYXBwbGljYXRpb24gZmlsZS4gKi8NCjg0OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUNCjg1OiAgICAgICAgICAgICAgICAgIA0KODY6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIkZyZWVSVE9TLmgiDQo4NzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAidGFzay5oIg0KODg6ICAgICAgICAgICAgICAgICAgDQo4OTogICAgICAgICAgICAgICAgICAjdW5kZWYgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUNCjkwOiAgICAgICAgICAgICAgICAgIA0KOTE6ICAgICAgICAgICAgICAgICAgLyogQSBmZXcgYnl0ZXMgbWlnaHQgYmUgbG9zdCB0byBieXRlIGFsaWduaW5nIHRoZSBoZWFwIHN0YXJ0IGFkZHJlc3MuICovDQo5MjogICAgICAgICAgICAgICAgICAjZGVmaW5lIGNvbmZpZ0FESlVTVEVEX0hFQVBfU0laRQkoIGNvbmZpZ1RPVEFMX0hFQVBfU0laRSAtIHBvcnRCWVRFX0FMSUdOTUVOVCApDQo5MzogICAgICAgICAgICAgICAgICANCjk0OiAgICAgICAgICAgICAgICAgIC8qDQo5NTogICAgICAgICAgICAgICAgICAgKiBJbml0aWFsaXNlcyB0aGUgaGVhcCBzdHJ1Y3R1cmVzIGJlZm9yZSB0aGVpciBmaXJzdCB1c2UuDQo5NjogICAgICAgICAgICAgICAgICAgKi8NCjk3OiAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkhlYXBJbml0KCB2b2lkICk7DQo5ODogICAgICAgICAgICAgICAgICANCjk5OiAgICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIHRoZSBtZW1vcnkgZm9yIHRoZSBoZWFwLiAqLw0KMTAwOiAgICAgICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgdWNIZWFwWyBjb25maWdUT1RBTF9IRUFQX1NJWkUgXTsNCjEwMTogICAgICAgICAgICAgICAgIA0KMTAyOiAgICAgICAgICAgICAgICAgLyogRGVmaW5lIHRoZSBsaW5rZWQgbGlzdCBzdHJ1Y3R1cmUuICBUaGlzIGlzIHVzZWQgdG8gbGluayBmcmVlIGJsb2NrcyBpbiBvcmRlcg0KMTAzOiAgICAgICAgICAgICAgICAgb2YgdGhlaXIgc2l6ZS4gKi8NCjEwNDogICAgICAgICAgICAgICAgIHR5cGVkZWYgc3RydWN0IEFfQkxPQ0tfTElOSw0KMTA1OiAgICAgICAgICAgICAgICAgew0KMTA2OiAgICAgICAgICAgICAgICAgCXN0cnVjdCBBX0JMT0NLX0xJTksgKnB4TmV4dEZyZWVCbG9jazsJLyo8PCBUaGUgbmV4dCBmcmVlIGJsb2NrIGluIHRoZSBsaXN0LiAqLw0KMTA3OiAgICAgICAgICAgICAgICAgCXNpemVfdCB4QmxvY2tTaXplOwkJCQkJCS8qPDwgVGhlIHNpemUgb2YgdGhlIGZyZWUgYmxvY2suICovDQoxMDg6ICAgICAgICAgICAgICAgICB9IEJsb2NrTGlua190Ow0KMTA5OiAgICAgICAgICAgICAgICAgDQoxMTA6ICAgICAgICAgICAgICAgICANCjExMTogICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1aW50MTZfdCBoZWFwU1RSVUNUX1NJWkUJPSAoICggc2l6ZW9mICggQmxvY2tMaW5rX3QgKSArICggcG9ydEJZVEVfQUxJR05NRU5UIC0gMSApICkgJiB+cG9ydEJZVEVfQUxJR05NRU5UX01BU0sgKTsNCjExMjogICAgICAgICAgICAgICAgICNkZWZpbmUgaGVhcE1JTklNVU1fQkxPQ0tfU0laRQkoICggc2l6ZV90ICkgKCBoZWFwU1RSVUNUX1NJWkUgKiAyICkgKQ0KMTEzOiAgICAgICAgICAgICAgICAgDQoxMTQ6ICAgICAgICAgICAgICAgICAvKiBDcmVhdGUgYSBjb3VwbGUgb2YgbGlzdCBsaW5rcyB0byBtYXJrIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBsaXN0LiAqLw0KMTE1OiAgICAgICAgICAgICAgICAgc3RhdGljIEJsb2NrTGlua190IHhTdGFydCwgeEVuZDsNCjExNjogICAgICAgICAgICAgICAgIA0KMTE3OiAgICAgICAgICAgICAgICAgLyogS2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBmcmVlIGJ5dGVzIHJlbWFpbmluZywgYnV0IHNheXMgbm90aGluZyBhYm91dA0KMTE4OiAgICAgICAgICAgICAgICAgZnJhZ21lbnRhdGlvbi4gKi8NCjExOTogICAgICAgICAgICAgICAgIHN0YXRpYyBzaXplX3QgeEZyZWVCeXRlc1JlbWFpbmluZyA9IGNvbmZpZ0FESlVTVEVEX0hFQVBfU0laRTsNCjEyMDogICAgICAgICAgICAgICAgIA0KMTIxOiAgICAgICAgICAgICAgICAgLyogU1RBVElDIEZVTkNUSU9OUyBBUkUgREVGSU5FRCBBUyBNQUNST1MgVE8gTUlOSU1JWkUgVEhFIEZVTkNUSU9OIENBTEwgREVQVEguICovDQoxMjI6ICAgICAgICAgICAgICAgICANCjEyMzogICAgICAgICAgICAgICAgIC8qDQoxMjQ6ICAgICAgICAgICAgICAgICAgKiBJbnNlcnQgYSBibG9jayBpbnRvIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzIC0gd2hpY2ggaXMgb3JkZXJlZCBieSBzaXplIG9mDQoxMjU6ICAgICAgICAgICAgICAgICAgKiB0aGUgYmxvY2suICBTbWFsbCBibG9ja3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IGFuZCBsYXJnZSBibG9ja3MgYXQgdGhlIGVuZA0KMTI2OiAgICAgICAgICAgICAgICAgICogb2YgdGhlIGxpc3QuDQoxMjc6ICAgICAgICAgICAgICAgICAgKi8NCjEyODogICAgICAgICAgICAgICAgICNkZWZpbmUgcHJ2SW5zZXJ0QmxvY2tJbnRvRnJlZUxpc3QoIHB4QmxvY2tUb0luc2VydCApCQkJCQkJCQlcDQoxMjk6ICAgICAgICAgICAgICAgICB7CQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMTMwOiAgICAgICAgICAgICAgICAgQmxvY2tMaW5rX3QgKnB4SXRlcmF0b3I7CQkJCQkJCQkJCQkJCQkJCVwNCjEzMTogICAgICAgICAgICAgICAgIHNpemVfdCB4QmxvY2tTaXplOwkJCQkJCQkJCQkJCQkJCQkJXA0KMTMyOiAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMTMzOiAgICAgICAgICAgICAgICAgCXhCbG9ja1NpemUgPSBweEJsb2NrVG9JbnNlcnQtPnhCbG9ja1NpemU7CQkJCQkJCQkJCVwNCjEzNDogICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCVwNCjEzNTogICAgICAgICAgICAgICAgIAkvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3QgdW50aWwgYSBibG9jayBpcyBmb3VuZCB0aGF0IGhhcyBhIGxhcmdlciBzaXplICovCVwNCjEzNjogICAgICAgICAgICAgICAgIAkvKiB0aGFuIHRoZSBibG9jayB3ZSBhcmUgaW5zZXJ0aW5nLiAqLwkJCQkJCQkJCQkJXA0KMTM3OiAgICAgICAgICAgICAgICAgCWZvciggcHhJdGVyYXRvciA9ICZ4U3RhcnQ7IHB4SXRlcmF0b3ItPnB4TmV4dEZyZWVCbG9jay0+eEJsb2NrU2l6ZSA8IHhCbG9ja1NpemU7IHB4SXRlcmF0b3IgPSBweEl0ZXJhdG9yLT5weE5leHRGcmVlQmxvY2sgKQlcDQoxMzg6ICAgICAgICAgICAgICAgICAJewkJCQkJCQkJCQkJCQkJCQkJCQkJXA0KMTM5OiAgICAgICAgICAgICAgICAgCQkvKiBUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUgLSBqdXN0IGl0ZXJhdGUgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24uICovCVwNCjE0MDogICAgICAgICAgICAgICAgIAl9CQkJCQkJCQkJCQkJCQkJCQkJCQlcDQoxNDE6ICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCQkJCQkJCQlcDQoxNDI6ICAgICAgICAgICAgICAgICAJLyogVXBkYXRlIHRoZSBsaXN0IHRvIGluY2x1ZGUgdGhlIGJsb2NrIGJlaW5nIGluc2VydGVkIGluIHRoZSBjb3JyZWN0ICovCQlcDQoxNDM6ICAgICAgICAgICAgICAgICAJLyogcG9zaXRpb24uICovCQkJCQkJCQkJCQkJCQkJCQlcDQoxNDQ6ICAgICAgICAgICAgICAgICAJcHhCbG9ja1RvSW5zZXJ0LT5weE5leHRGcmVlQmxvY2sgPSBweEl0ZXJhdG9yLT5weE5leHRGcmVlQmxvY2s7CQkJCQlcDQoxNDU6ICAgICAgICAgICAgICAgICAJcHhJdGVyYXRvci0+cHhOZXh0RnJlZUJsb2NrID0gcHhCbG9ja1RvSW5zZXJ0OwkJCQkJCQkJCVwNCjE0NjogICAgICAgICAgICAgICAgIH0NCjE0NzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTQ4OiAgICAgICAgICAgICAgICAgDQoxNDk6ICAgICAgICAgICAgICAgICB2b2lkICpwdlBvcnRNYWxsb2MoIHNpemVfdCB4V2FudGVkU2l6ZSApDQoxNTA6ICAgICAgICAgICAgICAgICB7DQpCRkQwMjIyQyAgICAgIDRGRTkgICBBRERJVSBTUCwgU1AsIC00OA0KQkZEMDIyMkUgICAgICBDQkVCICAgU1cgUkEsIDQ0KFNQKQ0KQkZEMDIyMzAgICAgICBDQkNBICAgU1cgUzgsIDQwKFNQKQ0KQkZEMDIyMzIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDAyMjM0ICAwMDMwRjg5RSAgIFNXIEEwLCA0OChTOCkNCjE1MTogICAgICAgICAgICAgICAgIEJsb2NrTGlua190ICpweEJsb2NrLCAqcHhQcmV2aW91c0Jsb2NrLCAqcHhOZXdCbG9ja0xpbms7DQoxNTI6ICAgICAgICAgICAgICAgICBzdGF0aWMgQmFzZVR5cGVfdCB4SGVhcEhhc0JlZW5Jbml0aWFsaXNlZCA9IHBkRkFMU0U7DQoxNTM6ICAgICAgICAgICAgICAgICB2b2lkICpwdlJldHVybiA9IE5VTEw7DQpCRkQwMjIzOCAgMDAxOEY4MUUgICBTVyBaRVJPLCAyNChTOCkNCjE1NDogICAgICAgICAgICAgICAgIA0KMTU1OiAgICAgICAgICAgICAgICAgCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDIyM0MgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwNCkJGRDAyMjNFICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYNCkJGRDAyMjQwICAgICAgMEMwMCAgIE5PUA0KMTU2OiAgICAgICAgICAgICAgICAgCXsNCjE1NzogICAgICAgICAgICAgICAgIAkJLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byBtYWxsb2MgdGhlbiB0aGUgaGVhcCB3aWxsIHJlcXVpcmUNCjE1ODogICAgICAgICAgICAgICAgIAkJaW5pdGlhbGlzYXRpb24gdG8gc2V0dXAgdGhlIGxpc3Qgb2YgZnJlZSBibG9ja3MuICovDQoxNTk6ICAgICAgICAgICAgICAgICAJCWlmKCB4SGVhcEhhc0JlZW5Jbml0aWFsaXNlZCA9PSBwZEZBTFNFICkNCkJGRDAyMjQyICA4MDI4RkM1QyAgIExXIFYwLCAtMzI3MjgoR1ApDQpCRkQwMjI0NiAgMDAwNjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMjI1Ng0KMTYwOiAgICAgICAgICAgICAgICAgCQl7DQoxNjE6ICAgICAgICAgICAgICAgICAJCQlwcnZIZWFwSW5pdCgpOw0KQkZEMDIyNEEgIDQyNTA3N0U4ICAgSkFMUyBwcnZIZWFwSW5pdA0KQkZEMDIyNEUgICAgICAwQzAwICAgTk9QDQoxNjI6ICAgICAgICAgICAgICAgICAJCQl4SGVhcEhhc0JlZW5Jbml0aWFsaXNlZCA9IHBkVFJVRTsNCkJGRDAyMjUwICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwMjI1MiAgODAyOEY4NUMgICBTVyBWMCwgLTMyNzI4KEdQKQ0KMTYzOiAgICAgICAgICAgICAgICAgCQl9DQoxNjQ6ICAgICAgICAgICAgICAgICANCjE2NTogICAgICAgICAgICAgICAgIAkJLyogVGhlIHdhbnRlZCBzaXplIGlzIGluY3JlYXNlZCBzbyBpdCBjYW4gY29udGFpbiBhIEJsb2NrTGlua190DQoxNjY6ICAgICAgICAgICAgICAgICAJCXN0cnVjdHVyZSBpbiBhZGRpdGlvbiB0byB0aGUgcmVxdWVzdGVkIGFtb3VudCBvZiBieXRlcy4gKi8NCjE2NzogICAgICAgICAgICAgICAgIAkJaWYoIHhXYW50ZWRTaXplID4gMCApDQpCRkQwMjI1NiAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMjI1QSAgMDAxNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjI4QQ0KMTY4OiAgICAgICAgICAgICAgICAgCQl7DQoxNjk6ICAgICAgICAgICAgICAgICAJCQl4V2FudGVkU2l6ZSArPSBoZWFwU1RSVUNUX1NJWkU7DQpCRkQwMjI1RSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDIyNjAgIDM0NDJCRkQxICAgTERDMSBGMzAsIDEzMzc4KFMxKQ0KQkZEMDIyNjIgIDlGMkMzNDQyICAgTEhVIFYwLCAtMjQ3ODgoVjApDQpCRkQwMjI2NCAgRkM3RTlGMkMgICBMV0MxIEYyNSwgLTg5OChUNCkNCkJGRDAyMjY2ICAwMDMwRkM3RSAgIExXIFYxLCA0OChTOCkNCkJGRDAyMjZBICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDIyNkMgIDAwMzBGODVFICAgU1cgVjAsIDQ4KFM4KQ0KMTcwOiAgICAgICAgICAgICAgICAgDQoxNzE6ICAgICAgICAgICAgICAgICAJCQkvKiBFbnN1cmUgdGhhdCBibG9ja3MgYXJlIGFsd2F5cyBhbGlnbmVkIHRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMuICovDQoxNzI6ICAgICAgICAgICAgICAgICAJCQlpZiggKCB4V2FudGVkU2l6ZSAmIHBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLICkgIT0gMCApDQpCRkQwMjI3MCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMjI3NCAgICAgIDJEMjUgICBBTkRJIFYwLCBWMCwgMHg3DQpCRkQwMjI3NiAgMDAwODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjI4QQ0KMTczOiAgICAgICAgICAgICAgICAgCQkJew0KMTc0OiAgICAgICAgICAgICAgICAgCQkJCS8qIEJ5dGUgYWxpZ25tZW50IHJlcXVpcmVkLiAqLw0KMTc1OiAgICAgICAgICAgICAgICAgCQkJCXhXYW50ZWRTaXplICs9ICggcG9ydEJZVEVfQUxJR05NRU5UIC0gKCB4V2FudGVkU2l6ZSAmIHBvcnRCWVRFX0FMSUdOTUVOVF9NQVNLICkgKTsNCkJGRDAyMjdBICAwMDMwRkM3RSAgIExXIFYxLCA0OChTOCkNCkJGRDAyMjdDICAzMDQwMDAzMCAgIFNSTCBBVCwgUzAsIDYNCkJGRDAyMjdFICBGRkY4MzA0MCAgIEFERElVIFYwLCBaRVJPLCAtOA0KQkZEMDIyODAgIDQ0OTNGRkY4ICAgTFcgUkEsIDE3NTU1KFQ4KQ0KQkZEMDIyODIgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwMjI4NCAgICAgIDZEMjQgICBBRERJVSBWMCwgVjAsIDgNCkJGRDAyMjg2ICAwMDMwRjg1RSAgIFNXIFYwLCA0OChTOCkNCjE3NjogICAgICAgICAgICAgICAgIAkJCX0NCjE3NzogICAgICAgICAgICAgICAgIAkJfQ0KMTc4OiAgICAgICAgICAgICAgICAgDQoxNzk6ICAgICAgICAgICAgICAgICAJCWlmKCAoIHhXYW50ZWRTaXplID4gMCApICYmICggeFdhbnRlZFNpemUgPCBjb25maWdBREpVU1RFRF9IRUFQX1NJWkUgKSApDQpCRkQwMjI4QSAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMjI4RSAgMDA4RjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjNCMA0KQkZEMDIyOTIgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDIyOTYgIDFGRjhCMDQyICAgU0xUSVUgVjAsIFYwLCA4MTg0DQpCRkQwMjI5OCAgNDBFMjFGRjggICBMQiBSQSwgMTY2MTAoVDgpDQpCRkQwMjI5QSAgMDA4OTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjNCMA0KMTgwOiAgICAgICAgICAgICAgICAgCQl7DQoxODE6ICAgICAgICAgICAgICAgICAJCQkvKiBCbG9ja3MgYXJlIHN0b3JlZCBpbiBieXRlIG9yZGVyIC0gdHJhdmVyc2UgdGhlIGxpc3QgZnJvbSB0aGUgc3RhcnQNCjE4MjogICAgICAgICAgICAgICAgIAkJCShzbWFsbGVzdCkgYmxvY2sgdW50aWwgb25lIG9mIGFkZXF1YXRlIHNpemUgaXMgZm91bmQuICovDQoxODM6ICAgICAgICAgICAgICAgICAJCQlweFByZXZpb3VzQmxvY2sgPSAmeFN0YXJ0Ow0KQkZEMDIyOUUgIDgwMTgzMDVDICAgQURESVUgVjAsIEdQLCAtMzI3NDQNCkJGRDAyMkEyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjE4NDogICAgICAgICAgICAgICAgIAkJCXB4QmxvY2sgPSB4U3RhcnQucHhOZXh0RnJlZUJsb2NrOw0KQkZEMDIyQTYgIDgwMThGQzVDICAgTFcgVjAsIC0zMjc0NChHUCkNCkJGRDAyMkFBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjE4NTogICAgICAgICAgICAgICAgIAkJCXdoaWxlKCAoIHB4QmxvY2stPnhCbG9ja1NpemUgPCB4V2FudGVkU2l6ZSApICYmICggcHhCbG9jay0+cHhOZXh0RnJlZUJsb2NrICE9IE5VTEwgKSApDQpCRkQwMjJBRSAgICAgIENDMEEgICBCIDB4QkZEMDIyQzQNCkJGRDAyMkIwICAgICAgMEMwMCAgIE5PUA0KQkZEMDIyQzQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDIyQzggICAgICA2OUExICAgTFcgVjEsIDQoVjApDQpCRkQwMjJDQSAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMjJDRSAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDAyMkQwICA0MEUyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjYxMA0KQkZEMDIyRDIgIDAwMDU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDIyRTANCkJGRDAyMkQ2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAyMkRBICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDIyREMgIEZGRTk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDIyQjINCkJGRDAyMkRFICBGQzdFRkZFOSAgIExXIFJBLCAtODk4KFQxKQ0KMTg2OiAgICAgICAgICAgICAgICAgCQkJew0KMTg3OiAgICAgICAgICAgICAgICAgCQkJCXB4UHJldmlvdXNCbG9jayA9IHB4QmxvY2s7DQpCRkQwMjJCMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMjJCNiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoxODg6ICAgICAgICAgICAgICAgICAJCQkJcHhCbG9jayA9IHB4QmxvY2stPnB4TmV4dEZyZWVCbG9jazsNCkJGRDAyMkJBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAyMkJFICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDIyQzAgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTg5OiAgICAgICAgICAgICAgICAgCQkJfQ0KMTkwOiAgICAgICAgICAgICAgICAgDQoxOTE6ICAgICAgICAgICAgICAgICAJCQkvKiBJZiB3ZSBmb3VuZCB0aGUgZW5kIG1hcmtlciB0aGVuIGEgYmxvY2sgb2YgYWRlcXVhdGUgc2l6ZSB3YXMgbm90IGZvdW5kLiAqLw0KMTkyOiAgICAgICAgICAgICAgICAgCQkJaWYoIHB4QmxvY2sgIT0gJnhFbmQgKQ0KQkZEMDIyRTAgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDIyRTQgIDgwMjAzMDVDICAgQURESVUgVjAsIEdQLCAtMzI3MzYNCkJGRDAyMkU4ICAwMDYyOTQ0MyAgIEJFUSBWMSwgVjAsIDB4QkZEMDIzQjANCkJGRDAyMkVBICAwQzAwMDA2MiAgIFNMTCBWMSwgVjAsIDENCkJGRDAyMkVDICAgICAgMEMwMCAgIE5PUA0KMTkzOiAgICAgICAgICAgICAgICAgCQkJew0KMTk0OiAgICAgICAgICAgICAgICAgCQkJCS8qIFJldHVybiB0aGUgbWVtb3J5IHNwYWNlIC0ganVtcGluZyBvdmVyIHRoZSBCbG9ja0xpbmtfdCBzdHJ1Y3R1cmUNCjE5NTogICAgICAgICAgICAgICAgIAkJCQlhdCBpdHMgc3RhcnQuICovDQoxOTY6ICAgICAgICAgICAgICAgICAJCQkJcHZSZXR1cm4gPSAoIHZvaWQgKiApICggKCAoIHVpbnQ4X3QgKiApIHB4UHJldmlvdXNCbG9jay0+cHhOZXh0RnJlZUJsb2NrICkgKyBoZWFwU1RSVUNUX1NJWkUgKTsNCkJGRDAyMkVFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAyMkYyICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDIyRjQgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAyMkY2ICAzNDQyQkZEMSAgIExEQzEgRjMwLCAxMzM3OChTMSkNCkJGRDAyMkY4ICA5RjJDMzQ0MiAgIExIVSBWMCwgLTI0Nzg4KFYwKQ0KQkZEMDIyRkEgIDA1MjY5RjJDICAgTFdDMSBGMjUsIDEzMTgoVDQpDQpCRkQwMjJGQyAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDAyMkZFICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjE5NzogICAgICAgICAgICAgICAgIA0KMTk4OiAgICAgICAgICAgICAgICAgCQkJCS8qIFRoaXMgYmxvY2sgaXMgYmVpbmcgcmV0dXJuZWQgZm9yIHVzZSBzbyBtdXN0IGJlIHRha2VuIG91dCBvZiB0aGUNCjE5OTogICAgICAgICAgICAgICAgIAkJCQlsaXN0IG9mIGZyZWUgYmxvY2tzLiAqLw0KMjAwOiAgICAgICAgICAgICAgICAgCQkJCXB4UHJldmlvdXNCbG9jay0+cHhOZXh0RnJlZUJsb2NrID0gcHhCbG9jay0+cHhOZXh0RnJlZUJsb2NrOw0KQkZEMDIzMDIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDIzMDYgICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwMjMwOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMjMwQyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjIwMTogICAgICAgICAgICAgICAgIA0KMjAyOiAgICAgICAgICAgICAgICAgCQkJCS8qIElmIHRoZSBibG9jayBpcyBsYXJnZXIgdGhhbiByZXF1aXJlZCBpdCBjYW4gYmUgc3BsaXQgaW50byB0d28uICovDQoyMDM6ICAgICAgICAgICAgICAgICAJCQkJaWYoICggcHhCbG9jay0+eEJsb2NrU2l6ZSAtIHhXYW50ZWRTaXplICkgPiBoZWFwTUlOSU1VTV9CTE9DS19TSVpFICkNCkJGRDAyMzBFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAyMzEyICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQ0KQkZEMDIzMTQgIDAwMzBGQzVFICAgTFcgVjAsIDQ4KFM4KQ0KQkZEMDIzMTggICAgICAwNUE3ICAgU1VCVSBWMSwgVjEsIFYwDQpCRkQwMjMxQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDIzMUMgIDM0NDJCRkQxICAgTERDMSBGMzAsIDEzMzc4KFMxKQ0KQkZEMDIzMUUgIDlGMkMzNDQyICAgTEhVIFYwLCAtMjQ3ODgoVjApDQpCRkQwMjMyMCAgMjUyMjlGMkMgICBMV0MxIEYyNSwgOTUwNihUNCkNCkJGRDAyMzIyICAgICAgMjUyMiAgIFNMTCBWMCwgVjAsIDENCkJGRDAyMzI0ICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQ0KQkZEMDIzMjYgIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwMjMyOCAgMDAzQTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMjNBMA0KMjA0OiAgICAgICAgICAgICAgICAgCQkJCXsNCjIwNTogICAgICAgICAgICAgICAgIAkJCQkJLyogVGhpcyBibG9jayBpcyB0byBiZSBzcGxpdCBpbnRvIHR3by4gIENyZWF0ZSBhIG5ldyBibG9jaw0KMjA2OiAgICAgICAgICAgICAgICAgCQkJCQlmb2xsb3dpbmcgdGhlIG51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQuIFRoZSB2b2lkIGNhc3QgaXMNCjIwNzogICAgICAgICAgICAgICAgIAkJCQkJdXNlZCB0byBwcmV2ZW50IGJ5dGUgYWxpZ25tZW50IHdhcm5pbmdzIGZyb20gdGhlIGNvbXBpbGVyLiAqLw0KMjA4OiAgICAgICAgICAgICAgICAgCQkJCQlweE5ld0Jsb2NrTGluayA9ICggdm9pZCAqICkgKCAoICggdWludDhfdCAqICkgcHhCbG9jayApICsgeFdhbnRlZFNpemUgKTsNCkJGRDAyMzJDICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDAyMzMwICAwMDMwRkM1RSAgIExXIFYwLCA0OChTOCkNCkJGRDAyMzM0ICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDIzMzYgIDAwMjBGODVFICAgU1cgVjAsIDMyKFM4KQ0KMjA5OiAgICAgICAgICAgICAgICAgDQoyMTA6ICAgICAgICAgICAgICAgICAJCQkJCS8qIENhbGN1bGF0ZSB0aGUgc2l6ZXMgb2YgdHdvIGJsb2NrcyBzcGxpdCBmcm9tIHRoZSBzaW5nbGUNCjIxMTogICAgICAgICAgICAgICAgIAkJCQkJYmxvY2suICovDQoyMTI6ICAgICAgICAgICAgICAgICAJCQkJCXB4TmV3QmxvY2tMaW5rLT54QmxvY2tTaXplID0gcHhCbG9jay0+eEJsb2NrU2l6ZSAtIHhXYW50ZWRTaXplOw0KQkZEMDIzM0EgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDIzM0UgICAgICA2OUExICAgTFcgVjEsIDQoVjApDQpCRkQwMjM0MCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMjM0NCAgICAgIDA1QTcgICBTVUJVIFYxLCBWMSwgVjANCkJGRDAyMzQ2ICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyMzRBICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQ0KMjEzOiAgICAgICAgICAgICAgICAgCQkJCQlweEJsb2NrLT54QmxvY2tTaXplID0geFdhbnRlZFNpemU7DQpCRkQwMjM0QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMjM1MCAgMDAzMEZDN0UgICBMVyBWMSwgNDgoUzgpDQpCRkQwMjM1NCAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkNCjIxNDogICAgICAgICAgICAgICAgIA0KMjE1OiAgICAgICAgICAgICAgICAgCQkJCQkvKiBJbnNlcnQgdGhlIG5ldyBibG9jayBpbnRvIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiAqLw0KMjE2OiAgICAgICAgICAgICAgICAgCQkJCQlwcnZJbnNlcnRCbG9ja0ludG9GcmVlTGlzdCggKCBweE5ld0Jsb2NrTGluayApICk7DQpCRkQwMjM1NiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMjM1QSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkNCkJGRDAyMzVDICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkNCkJGRDAyMzYwICA4MDE4MzA1QyAgIEFERElVIFYwLCBHUCwgLTMyNzQ0DQpCRkQwMjM2NCAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQpCRkQwMjM2OCAgICAgIENDMDYgICBCIDB4QkZEMDIzNzYNCkJGRDAyMzZBICAgICAgMEMwMCAgIE5PUA0KQkZEMDIzNkMgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDIzNzAgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMjM3MiAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQpCRkQwMjM3NiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjM3QSAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAyMzdDICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQ0KQkZEMDIzN0UgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDIzODIgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwDQpCRkQwMjM4NCAgNDBBMjEzOTAgICBBRERJIEdQLCBTMCwgMTY1NDYNCkJGRDAyMzg2ICBGRkYxNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyMzZDDQpCRkQwMjM4OCAgRkM1RUZGRjEgICBMVyBSQSwgLTkzMChTMSkNCkJGRDAyMzhBICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAyMzhFICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDIzOTAgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDIzOTQgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQpCRkQwMjM5NiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjM5QSAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpDQpCRkQwMjM5RSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjIxNzogICAgICAgICAgICAgICAgIAkJCQl9DQoyMTg6ICAgICAgICAgICAgICAgICANCjIxOTogICAgICAgICAgICAgICAgIAkJCQl4RnJlZUJ5dGVzUmVtYWluaW5nIC09IHB4QmxvY2stPnhCbG9ja1NpemU7DQpCRkQwMjNBMCAgODAxMEZDN0MgICBMVyBWMSwgLTMyNzUyKEdQKQ0KQkZEMDIzQTQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDIzQTggICAgICA2OTIxICAgTFcgVjAsIDQoVjApDQpCRkQwMjNBQSAgICAgIDA1MjcgICBTVUJVIFYwLCBWMSwgVjANCkJGRDAyM0FDICA4MDEwRjg1QyAgIFNXIFYwLCAtMzI3NTIoR1ApDQoyMjA6ICAgICAgICAgICAgICAgICAJCQl9DQoyMjE6ICAgICAgICAgICAgICAgICAJCX0NCjIyMjogICAgICAgICAgICAgICAgIA0KMjIzOiAgICAgICAgICAgICAgICAgCQl0cmFjZU1BTExPQyggcHZSZXR1cm4sIHhXYW50ZWRTaXplICk7DQoyMjQ6ICAgICAgICAgICAgICAgICAJfQ0KMjI1OiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwMjNCMCAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsDQpCRkQwMjNCMiAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpDQpCRkQwMjNCNCAgICAgIDBDMDAgICBOT1ANCjIyNjogICAgICAgICAgICAgICAgIA0KMjI3OiAgICAgICAgICAgICAgICAgCSNpZiggY29uZmlnVVNFX01BTExPQ19GQUlMRURfSE9PSyA9PSAxICkNCjIyODogICAgICAgICAgICAgICAgIAl7DQoyMjk6ICAgICAgICAgICAgICAgICAJCWlmKCBwdlJldHVybiA9PSBOVUxMICkNCkJGRDAyM0I2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAyM0JBICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAyM0M0DQoyMzA6ICAgICAgICAgICAgICAgICAJCXsNCjIzMTogICAgICAgICAgICAgICAgIAkJCWV4dGVybiB2b2lkIHZBcHBsaWNhdGlvbk1hbGxvY0ZhaWxlZEhvb2soIHZvaWQgKTsNCjIzMjogICAgICAgICAgICAgICAgIAkJCXZBcHBsaWNhdGlvbk1hbGxvY0ZhaWxlZEhvb2soKTsNCkJGRDAyM0JFICA0NDgwNzdFOCAgIEpBTFMgdkFwcGxpY2F0aW9uTWFsbG9jRmFpbGVkSG9vaw0KQkZEMDIzQzAgICAgICA0NDgwICAgQU5EMTYgUzAsIFMwDQpCRkQwMjNDMiAgICAgIDBDMDAgICBOT1ANCjIzMzogICAgICAgICAgICAgICAgIAkJfQ0KMjM0OiAgICAgICAgICAgICAgICAgCX0NCjIzNTogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjIzNjogICAgICAgICAgICAgICAgIA0KMjM3OiAgICAgICAgICAgICAgICAgCXJldHVybiBwdlJldHVybjsNCkJGRDAyM0M0ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCjIzODogICAgICAgICAgICAgICAgIH0NCkJGRDAyM0M4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwMjNDQSAgICAgIDRCRUIgICBMVyBSQSwgNDQoU1ApDQpCRkQwMjNDQyAgICAgIDRCQ0EgICBMVyBTOCwgNDAoU1ApDQpCRkQwMjNDRSAgICAgIDRDMTkgICBBRERJVSBTUCwgU1AsIDQ4DQpCRkQwMjNEMCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwMjNEMiAgICAgIDBDMDAgICBOT1ANCjIzOTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjQwOiAgICAgICAgICAgICAgICAgDQoyNDE6ICAgICAgICAgICAgICAgICB2b2lkIHZQb3J0RnJlZSggdm9pZCAqcHYgKQ0KMjQyOiAgICAgICAgICAgICAgICAgew0KQkZEMDVGRDQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDA1RkQ2ICAgICAgQ0JFOSAgIFNXIFJBLCAzNihTUCkNCkJGRDA1RkQ4ICAgICAgQ0JDOCAgIFNXIFM4LCAzMihTUCkNCkJGRDA1RkRBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNUZEQyAgMDAyOEY4OUUgICBTVyBBMCwgNDAoUzgpDQoyNDM6ICAgICAgICAgICAgICAgICB1aW50OF90ICpwdWMgPSAoIHVpbnQ4X3QgKiApIHB2Ow0KQkZEMDVGRTAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDVGRTQgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMjQ0OiAgICAgICAgICAgICAgICAgQmxvY2tMaW5rX3QgKnB4TGluazsNCjI0NTogICAgICAgICAgICAgICAgIA0KMjQ2OiAgICAgICAgICAgICAgICAgCWlmKCBwdiAhPSBOVUxMICkNCkJGRDA1RkU4ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDA1RkVDICAwMDQyNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA2MDc0DQoyNDc6ICAgICAgICAgICAgICAgICAJew0KMjQ4OiAgICAgICAgICAgICAgICAgCQkvKiBUaGUgbWVtb3J5IGJlaW5nIGZyZWVkIHdpbGwgaGF2ZSBhbiBCbG9ja0xpbmtfdCBzdHJ1Y3R1cmUgaW1tZWRpYXRlbHkNCjI0OTogICAgICAgICAgICAgICAgIAkJYmVmb3JlIGl0LiAqLw0KMjUwOiAgICAgICAgICAgICAgICAgCQlwdWMgLT0gaGVhcFNUUlVDVF9TSVpFOw0KQkZEMDVGRjAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA1RkYyICAzNDQyQkZEMSAgIExEQzEgRjMwLCAxMzM3OChTMSkNCkJGRDA1RkY0ICA5RjJDMzQ0MiAgIExIVSBWMCwgLTI0Nzg4KFYwKQ0KQkZEMDVGRjYgIDAwNDA5RjJDICAgTFdDMSBGMjUsIDY0KFQ0KQ0KQkZEMDVGRjggIDExRDAwMDQwICAgU1VCVSBWMCwgWkVSTywgVjANCkJGRDA1RkZBICBGQzdFMTFEMCAgIEFEREkgVDYsIFMwLCAtODk4DQpCRkQwNUZGQyAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpDQpCRkQwNjAwMCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA2MDAyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjI1MTogICAgICAgICAgICAgICAgIA0KMjUyOiAgICAgICAgICAgICAgICAgCQkvKiBUaGlzIHVuZXhwZWN0ZWQgY2FzdGluZyBpcyB0byBrZWVwIHNvbWUgY29tcGlsZXJzIGZyb20gaXNzdWluZw0KMjUzOiAgICAgICAgICAgICAgICAgCQlieXRlIGFsaWdubWVudCB3YXJuaW5ncy4gKi8NCjI1NDogICAgICAgICAgICAgICAgIAkJcHhMaW5rID0gKCB2b2lkICogKSBwdWM7DQpCRkQwNjAwNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNjAwQSAgMDAxOEY4NUUgICBTVyBWMCwgMjQoUzgpDQoyNTU6ICAgICAgICAgICAgICAgICANCjI1NjogICAgICAgICAgICAgICAgIAkJdlRhc2tTdXNwZW5kQWxsKCk7DQpCRkQwNjAwRSAgNEVGNDc3RTggICBKQUxTIHZUYXNrU3VzcGVuZEFsbA0KQkZEMDYwMTAgICAgICA0RUY0ICAgQURESVUgUzcsIFM3LCAtNg0KQkZEMDYwMTIgICAgICAwQzAwICAgTk9QDQoyNTc6ICAgICAgICAgICAgICAgICAJCXsNCjI1ODogICAgICAgICAgICAgICAgIAkJCS8qIEFkZCB0aGlzIGJsb2NrIHRvIHRoZSBsaXN0IG9mIGZyZWUgYmxvY2tzLiAqLw0KMjU5OiAgICAgICAgICAgICAgICAgCQkJcHJ2SW5zZXJ0QmxvY2tJbnRvRnJlZUxpc3QoICggKCBCbG9ja0xpbmtfdCAqICkgcHhMaW5rICkgKTsNCkJGRDA2MDE0ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA2MDE4ICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQ0KQkZEMDYwMUEgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQ0KQkZEMDYwMUUgIDgwMTgzMDVDICAgQURESVUgVjAsIEdQLCAtMzI3NDQNCkJGRDA2MDIyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA2MDI2ICAgICAgQ0MwNiAgIEIgMHhCRkQwNjAzNA0KQkZEMDYwMjggICAgICAwQzAwICAgTk9QDQpCRkQwNjAyQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjAyRSAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDA2MDMwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA2MDM0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2MDM4ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDYwM0EgICAgICA2OUExICAgTFcgVjEsIDQoVjApDQpCRkQwNjAzQyAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwNjA0MCAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDA2MDQyICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDYwNDQgIEZGRjE0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDYwMkENCkJGRDA2MDQ2ICBGQzVFRkZGMSAgIExXIFJBLCAtOTMwKFMxKQ0KQkZEMDYwNDggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDYwNEMgICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwNjA0RSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNjA1MiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCkJGRDA2MDU0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2MDU4ICAwMDE4RkM3RSAgIExXIFYxLCAyNChTOCkNCkJGRDA2MDVDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMjYwOiAgICAgICAgICAgICAgICAgCQkJeEZyZWVCeXRlc1JlbWFpbmluZyArPSBweExpbmstPnhCbG9ja1NpemU7DQpCRkQwNjA1RSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNjA2MiAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkNCkJGRDA2MDY0ICA4MDEwRkM1QyAgIExXIFYwLCAtMzI3NTIoR1ApDQpCRkQwNjA2OCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA2MDZBICA4MDEwRjg1QyAgIFNXIFYwLCAtMzI3NTIoR1ApDQoyNjE6ICAgICAgICAgICAgICAgICAJCQl0cmFjZUZSRUUoIHB2LCBweExpbmstPnhCbG9ja1NpemUgKTsNCjI2MjogICAgICAgICAgICAgICAgIAkJfQ0KMjYzOiAgICAgICAgICAgICAgICAgCQkoIHZvaWQgKSB4VGFza1Jlc3VtZUFsbCgpOw0KQkZEMDYwNkUgIDE1OEU3N0U4ICAgSkFMUyB4VGFza1Jlc3VtZUFsbA0KQkZEMDYwNzAgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQ0KQkZEMDYwNzIgICAgICAwQzAwICAgTk9QDQoyNjQ6ICAgICAgICAgICAgICAgICAJfQ0KMjY1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDYwNzQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA2MDc2ICAgICAgNEJFOSAgIExXIFJBLCAzNihTUCkNCkJGRDA2MDc4ICAgICAgNEJDOCAgIExXIFM4LCAzMihTUCkNCkJGRDA2MDdBICAgICAgNEMxNSAgIEFERElVIFNQLCBTUCwgNDANCkJGRDA2MDdDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA2MDdFICAgICAgMEMwMCAgIE5PUA0KMjY2OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNjc6ICAgICAgICAgICAgICAgICANCjI2ODogICAgICAgICAgICAgICAgIHNpemVfdCB4UG9ydEdldEZyZWVIZWFwU2l6ZSggdm9pZCApDQoyNjk6ICAgICAgICAgICAgICAgICB7DQpCRkQwOUU4NCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUU4NiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5RTg4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoyNzA6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHhGcmVlQnl0ZXNSZW1haW5pbmc7DQpCRkQwOUU4QSAgODAxMEZDNUMgICBMVyBWMCwgLTMyNzUyKEdQKQ0KMjcxOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlFOEUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5RTkwICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlFOTIgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOUU5NCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUU5NiAgICAgIDBDMDAgICBOT1ANCjI3MjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjczOiAgICAgICAgICAgICAgICAgDQoyNzQ6ICAgICAgICAgICAgICAgICB2b2lkIHZQb3J0SW5pdGlhbGlzZUJsb2Nrcyggdm9pZCApDQoyNzU6ICAgICAgICAgICAgICAgICB7DQpCRkQwOUVENCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUVENiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5RUQ4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoyNzY6ICAgICAgICAgICAgICAgICAJLyogVGhpcyBqdXN0IGV4aXN0cyB0byBrZWVwIHRoZSBsaW5rZXIgcXVpZXQuICovDQoyNzc6ICAgICAgICAgICAgICAgICB9DQpCRkQwOUVEQSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlFREMgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOUVERSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA5RUUwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5RUUyICAgICAgMEMwMCAgIE5PUA0KMjc4OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNzk6ICAgICAgICAgICAgICAgICANCjI4MDogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkhlYXBJbml0KCB2b2lkICkNCjI4MTogICAgICAgICAgICAgICAgIHsNCkJGRDA4NEEwICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwODRBMiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwODRBNCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMjgyOiAgICAgICAgICAgICAgICAgQmxvY2tMaW5rX3QgKnB4Rmlyc3RGcmVlQmxvY2s7DQoyODM6ICAgICAgICAgICAgICAgICB1aW50OF90ICpwdWNBbGlnbmVkSGVhcDsNCjI4NDogICAgICAgICAgICAgICAgIA0KMjg1OiAgICAgICAgICAgICAgICAgCS8qIEVuc3VyZSB0aGUgaGVhcCBzdGFydHMgb24gYSBjb3JyZWN0bHkgYWxpZ25lZCBib3VuZGFyeS4gKi8NCjI4NjogICAgICAgICAgICAgICAgIAlwdWNBbGlnbmVkSGVhcCA9ICggdWludDhfdCAqICkgKCAoICggcG9ydFBPSU5URVJfU0laRV9UWVBFICkgJnVjSGVhcFsgcG9ydEJZVEVfQUxJR05NRU5UIF0gKSAmICggfiggKCBwb3J0UE9JTlRFUl9TSVpFX1RZUEUgKSBwb3J0QllURV9BTElHTk1FTlRfTUFTSyApICkgKTsNCkJGRDA4NEE2ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwODRBOCAgMzA2MkJGRDIgICBMREMxIEYzMCwgMTIzODYoUzIpDQpCRkQwODRBQSAgOEQ3MDMwNjIgICBBRERJVSBWMSwgVjAsIC0yOTMyOA0KQkZEMDg0QUMgICAgICA4RDcwICAgQkVRWiBWMCwgMHhCRkQwODU4RQ0KQkZEMDg0QUUgIEZGRjgzMDQwICAgQURESVUgVjAsIFpFUk8sIC04DQpCRkQwODRCMCAgNDQ5M0ZGRjggICBMVyBSQSwgMTc1NTUoVDgpDQpCRkQwODRCMiAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA4NEI0ICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQ0KMjg3OiAgICAgICAgICAgICAgICAgDQoyODg6ICAgICAgICAgICAgICAgICAJLyogeFN0YXJ0IGlzIHVzZWQgdG8gaG9sZCBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3Qgb2YgZnJlZQ0KMjg5OiAgICAgICAgICAgICAgICAgCWJsb2Nrcy4gIFRoZSB2b2lkIGNhc3QgaXMgdXNlZCB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzLiAqLw0KMjkwOiAgICAgICAgICAgICAgICAgCXhTdGFydC5weE5leHRGcmVlQmxvY2sgPSAoIHZvaWQgKiApIHB1Y0FsaWduZWRIZWFwOw0KQkZEMDg0QjggIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwODRCQyAgODAxOEY4NUMgICBTVyBWMCwgLTMyNzQ0KEdQKQ0KMjkxOiAgICAgICAgICAgICAgICAgCXhTdGFydC54QmxvY2tTaXplID0gKCBzaXplX3QgKSAwOw0KQkZEMDg0QzAgIDgwMUNGODFDICAgU1cgWkVSTywgLTMyNzQwKEdQKQ0KMjkyOiAgICAgICAgICAgICAgICAgDQoyOTM6ICAgICAgICAgICAgICAgICAJLyogeEVuZCBpcyB1c2VkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBmcmVlIGJsb2Nrcy4gKi8NCjI5NDogICAgICAgICAgICAgICAgIAl4RW5kLnhCbG9ja1NpemUgPSBjb25maWdBREpVU1RFRF9IRUFQX1NJWkU7DQpCRkQwODRDNCAgMUZGODMwNDAgICBBRERJVSBWMCwgWkVSTywgODE4NA0KQkZEMDg0QzYgIEY4NUMxRkY4ICAgTEIgUkEsIC0xOTU2KFQ4KQ0KQkZEMDg0QzggIDgwMjRGODVDICAgU1cgVjAsIC0zMjczMihHUCkNCjI5NTogICAgICAgICAgICAgICAgIAl4RW5kLnB4TmV4dEZyZWVCbG9jayA9IE5VTEw7DQpCRkQwODRDQyAgODAyMEY4MUMgICBTVyBaRVJPLCAtMzI3MzYoR1ApDQoyOTY6ICAgICAgICAgICAgICAgICANCjI5NzogICAgICAgICAgICAgICAgIAkvKiBUbyBzdGFydCB3aXRoIHRoZXJlIGlzIGEgc2luZ2xlIGZyZWUgYmxvY2sgdGhhdCBpcyBzaXplZCB0byB0YWtlIHVwIHRoZQ0KMjk4OiAgICAgICAgICAgICAgICAgCWVudGlyZSBoZWFwIHNwYWNlLiAqLw0KMjk5OiAgICAgICAgICAgICAgICAgCXB4Rmlyc3RGcmVlQmxvY2sgPSAoIHZvaWQgKiApIHB1Y0FsaWduZWRIZWFwOw0KQkZEMDg0RDAgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwODRENCAgMDAwNEY4NUUgICBTVyBWMCwgNChTOCkNCjMwMDogICAgICAgICAgICAgICAgIAlweEZpcnN0RnJlZUJsb2NrLT54QmxvY2tTaXplID0gY29uZmlnQURKVVNURURfSEVBUF9TSVpFOw0KQkZEMDg0RDggIDAwMDRGQzVFICAgTFcgVjAsIDQoUzgpDQpCRkQwODREQyAgMUZGODMwNjAgICBBRERJVSBWMSwgWkVSTywgODE4NA0KQkZEMDg0REUgIEU5QTExRkY4ICAgTEIgUkEsIC01NzI3KFQ4KQ0KQkZEMDg0RTAgICAgICBFOUExICAgU1cgVjEsIDQoVjApDQozMDE6ICAgICAgICAgICAgICAgICAJcHhGaXJzdEZyZWVCbG9jay0+cHhOZXh0RnJlZUJsb2NrID0gJnhFbmQ7DQpCRkQwODRFMiAgMDAwNEZDNUUgICBMVyBWMCwgNChTOCkNCkJGRDA4NEU0ICAzMDdDMDAwNCAgIE1UTE8gQTAsIDANCkJGRDA4NEU2ICA4MDIwMzA3QyAgIEFERElVIFYxLCBHUCwgLTMyNzM2DQpCRkQwODRFQSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjMwMjogICAgICAgICAgICAgICAgIH0NCkJGRDA4NEVDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwODRFRSAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwODRGMCAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2DQpCRkQwODRGMiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwODRGNCAgICAgIDBDMDAgICBOT1ANCjMwMzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9zb3VyY2UvbGlzdC5jICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKg0KMjogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIFY4LjIuMSAtIENvcHlyaWdodCAoQykgMjAxNSBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCjM6ICAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkDQo0OiAgICAgICAgICAgICAgICAgICANCjU6ICAgICAgICAgICAgICAgICAgICAgICBWSVNJVCBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBUTyBFTlNVUkUgWU9VIEFSRSBVU0lORyBUSEUgTEFURVNUIFZFUlNJT04uDQo2OiAgICAgICAgICAgICAgICAgICANCjc6ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KODogICAgICAgICAgICAgICAgICAgDQo5OiAgICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KMTA6ICAgICAgICAgICAgICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KMTE6ICAgICAgICAgICAgICAgICAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiA+Pj4+IEFORCBNT0RJRklFRCBCWSA8PDw8IHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQoxMjogICAgICAgICAgICAgICAgICANCjEzOiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE0OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBOT1RFOiBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvICAgICAhPDwNCjE1OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgICAhPDwNCjE2OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvYmxpZ2VkIHRvIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzICAgICAhPDwNCjE3OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUyBrZXJuZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPDwNCjE4OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE5OiAgICAgICAgICAgICAgICAgIA0KMjA6ICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQ0KMjE6ICAgICAgICAgICAgICAgICAgICAgIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MNCjIyOiAgICAgICAgICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBGdWxsIGxpY2Vuc2UgdGV4dCBpcyBhdmFpbGFibGUgb24gdGhlIGZvbGxvd2luZw0KMjM6ICAgICAgICAgICAgICAgICAgICAgIGxpbms6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sDQoyNDogICAgICAgICAgICAgICAgICANCjI1OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI2OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMjc6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIEZyZWVSVE9TIHByb3ZpZGVzIGNvbXBsZXRlbHkgZnJlZSB5ZXQgcHJvZmVzc2lvbmFsbHkgZGV2ZWxvcGVkLCAgICAqDQoyODogICAgICAgICAgICAgICAgICAgICAgICogICAgcm9idXN0LCBzdHJpY3RseSBxdWFsaXR5IGNvbnRyb2xsZWQsIHN1cHBvcnRlZCwgYW5kIGNyb3NzICAgICAgICAgICoNCjI5OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBwbGF0Zm9ybSBzb2Z0d2FyZSB0aGF0IGlzIG1vcmUgdGhhbiBqdXN0IHRoZSBtYXJrZXQgbGVhZGVyLCBpdCAgICAgKg0KMzA6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIGlzIHRoZSBpbmR1c3RyeSdzIGRlIGZhY3RvIHN0YW5kYXJkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMTogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjMyOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBIZWxwIHlvdXJzZWxmIGdldCBzdGFydGVkIHF1aWNrbHkgd2hpbGUgc2ltdWx0YW5lb3VzbHkgaGVscGluZyAgICAgKg0KMzM6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHRvIHN1cHBvcnQgdGhlIEZyZWVSVE9TIHByb2plY3QgYnkgcHVyY2hhc2luZyBhIEZyZWVSVE9TICAgICAgICAgICAqDQozNDogICAgICAgICAgICAgICAgICAgICAgICogICAgdHV0b3JpYWwgYm9vaywgcmVmZXJlbmNlIG1hbnVhbCwgb3IgYm90aDogICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM1OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzY6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNzogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgLSBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZw0KNDA6ICAgICAgICAgICAgICAgICAgICAgIHRoZSBGQVEgcGFnZSAiTXkgYXBwbGljYXRpb24gZG9lcyBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyIuICBIYXZlIHlvdQ0KNDE6ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY29uZmlnQVNTRVJUKCk/DQo0MjogICAgICAgICAgICAgICAgICANCjQzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9zdXBwb3J0IC0gSW4gcmV0dXJuIGZvciByZWNlaXZpbmcgdGhpcyB0b3AgcXVhbGl0eQ0KNDQ6ICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIHNvZnR3YXJlIGZvciBmcmVlIHdlIHJlcXVlc3QgeW91IGFzc2lzdCBvdXIgZ2xvYmFsIGNvbW11bml0eSBieQ0KNDU6ICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHN1cHBvcnQgZm9ydW0uDQo0NjogICAgICAgICAgICAgICAgICANCjQ3OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy90cmFpbmluZyAtIEludmVzdGluZyBpbiB0cmFpbmluZyBhbGxvd3MgeW91ciB0ZWFtIHRvDQo0ODogICAgICAgICAgICAgICAgICAgICAgYmUgYXMgcHJvZHVjdGl2ZSBhcyBwb3NzaWJsZSBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIE5vdyB5b3UgY2FuIHJlY2VpdmUNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyB0cmFpbmluZyBkaXJlY3RseSBmcm9tIFJpY2hhcmQgQmFycnksIENFTyBvZiBSZWFsIFRpbWUgRW5naW5lZXJzDQo1MDogICAgICAgICAgICAgICAgICAgICAgTHRkLCBhbmQgdGhlIHdvcmxkJ3MgbGVhZGluZyBhdXRob3JpdHkgb24gdGhlIHdvcmxkJ3MgbGVhZGluZyBSVE9TLg0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCjUzOiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLCBhIERPUw0KNTQ6ICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgRkFUIGZpbGUgc3lzdGVtLCBhbmQgb3VyIHRpbnkgdGhyZWFkIGF3YXJlIFVEUC9JUCBzdGFjay4NCjU1OiAgICAgICAgICAgICAgICAgIA0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL2xhYnMgLSBXaGVyZSBuZXcgRnJlZVJUT1MgcHJvZHVjdHMgZ28gdG8gaW5jdWJhdGUuDQo1NzogICAgICAgICAgICAgICAgICAgICAgQ29tZSBhbmQgdHJ5IEZyZWVSVE9TK1RDUCwgb3VyIG5ldyBvcGVuIHNvdXJjZSBUQ1AvSVAgc3RhY2sgZm9yIEZyZWVSVE9TLg0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZC4gbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoDQo2MDogICAgICAgICAgICAgICAgICAgICAgSW50ZWdyaXR5IFN5c3RlbXMgbHRkLiB0byBzZWxsIHVuZGVyIHRoZSBPcGVuUlRPUyBicmFuZC4gIExvdyBjb3N0IE9wZW5SVE9TDQo2MTogICAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMgb2ZmZXIgdGlja2V0ZWQgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uIGFuZCBjb21tZXJjaWFsIG1pZGRsZXdhcmUuDQo2MjogICAgICAgICAgICAgICAgICANCjYzOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbyBwcm92aWRlIGEgc2FmZXR5DQo2NDogICAgICAgICAgICAgICAgICAgICAgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIGZvciB1c2UgaW4gc2FmZXR5IGFuZA0KNjU6ICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb24gY3JpdGljYWwgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBwcm92YWJsZSBkZXBlbmRhYmlsaXR5Lg0KNjY6ICAgICAgICAgICAgICAgICAgDQo2NzogICAgICAgICAgICAgICAgICAgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQo2ODogICAgICAgICAgICAgICAgICAqLw0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICANCjcxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4NCjcyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJGcmVlUlRPUy5oIg0KNzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImxpc3QuaCINCjc0OiAgICAgICAgICAgICAgICAgIA0KNzU6ICAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KNzY6ICAgICAgICAgICAgICAgICAgICogUFVCTElDIExJU1QgQVBJIGRvY3VtZW50ZWQgaW4gbGlzdC5oDQo3NzogICAgICAgICAgICAgICAgICAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNzg6ICAgICAgICAgICAgICAgICAgDQo3OTogICAgICAgICAgICAgICAgICB2b2lkIHZMaXN0SW5pdGlhbGlzZSggTGlzdF90ICogY29uc3QgcHhMaXN0ICkNCjgwOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA4QUUwICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA4QUUyICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDhBRTQgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4QUU2ICAwMDA4Rjg5RSAgIFNXIEEwLCA4KFM4KQ0KODE6ICAgICAgICAgICAgICAgICAgCS8qIFRoZSBsaXN0IHN0cnVjdHVyZSBjb250YWlucyBhIGxpc3QgaXRlbSB3aGljaCBpcyB1c2VkIHRvIG1hcmsgdGhlDQo4MjogICAgICAgICAgICAgICAgICAJZW5kIG9mIHRoZSBsaXN0LiAgVG8gaW5pdGlhbGlzZSB0aGUgbGlzdCB0aGUgbGlzdCBlbmQgaXMgaW5zZXJ0ZWQNCjgzOiAgICAgICAgICAgICAgICAgIAlhcyB0aGUgb25seSBsaXN0IGVudHJ5LiAqLw0KODQ6ICAgICAgICAgICAgICAgICAgCXB4TGlzdC0+cHhJbmRleCA9ICggTGlzdEl0ZW1fdCAqICkgJiggcHhMaXN0LT54TGlzdEVuZCApOwkJCS8qbGludCAhZTgyNiAhZTc0MCBUaGUgbWluaSBsaXN0IHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBsaXN0IGVuZCB0byBzYXZlIFJBTS4gIFRoaXMgaXMgY2hlY2tlZCBhbmQgdmFsaWQuICovDQpCRkQwOEFFQSAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA4QUVFICAgICAgNkQyNCAgIEFERElVIFYwLCBWMCwgOA0KQkZEMDhBRjAgICAgICAwQzYyICAgTU9WRSBWMSwgVjANCkJGRDA4QUYyICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQ0KQkZEMDhBRjYgICAgICBFOUExICAgU1cgVjEsIDQoVjApDQo4NTogICAgICAgICAgICAgICAgICANCjg2OiAgICAgICAgICAgICAgICAgIAkvKiBUaGUgbGlzdCBlbmQgdmFsdWUgaXMgdGhlIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUgaW4gdGhlIGxpc3QgdG8NCjg3OiAgICAgICAgICAgICAgICAgIAllbnN1cmUgaXQgcmVtYWlucyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiAqLw0KODg6ICAgICAgICAgICAgICAgICAgCXB4TGlzdC0+eExpc3RFbmQueEl0ZW1WYWx1ZSA9IHBvcnRNQVhfREVMQVk7DQpCRkQwOEFGOCAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA4QUZDICAgICAgRURGRiAgIExJIFYxLCAtMQ0KQkZEMDhBRkUgICAgICBFOUEyICAgU1cgVjEsIDgoVjApDQo4OTogICAgICAgICAgICAgICAgICANCjkwOiAgICAgICAgICAgICAgICAgIAkvKiBUaGUgbGlzdCBlbmQgbmV4dCBhbmQgcHJldmlvdXMgcG9pbnRlcnMgcG9pbnQgdG8gaXRzZWxmIHNvIHdlIGtub3cNCjkxOiAgICAgICAgICAgICAgICAgIAl3aGVuIHRoZSBsaXN0IGlzIGVtcHR5LiAqLw0KOTI6ICAgICAgICAgICAgICAgICAgCXB4TGlzdC0+eExpc3RFbmQucHhOZXh0ID0gKCBMaXN0SXRlbV90ICogKSAmKCBweExpc3QtPnhMaXN0RW5kICk7CS8qbGludCAhZTgyNiAhZTc0MCBUaGUgbWluaSBsaXN0IHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBsaXN0IGVuZCB0byBzYXZlIFJBTS4gIFRoaXMgaXMgY2hlY2tlZCBhbmQgdmFsaWQuICovDQpCRkQwOEIwMCAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA4QjA0ICAgICAgNkQyNCAgIEFERElVIFYwLCBWMCwgOA0KQkZEMDhCMDYgICAgICAwQzYyICAgTU9WRSBWMSwgVjANCkJGRDA4QjA4ICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQ0KQkZEMDhCMEMgICAgICBFOUEzICAgU1cgVjEsIDEyKFYwKQ0KOTM6ICAgICAgICAgICAgICAgICAgCXB4TGlzdC0+eExpc3RFbmQucHhQcmV2aW91cyA9ICggTGlzdEl0ZW1fdCAqICkgJiggcHhMaXN0LT54TGlzdEVuZCApOy8qbGludCAhZTgyNiAhZTc0MCBUaGUgbWluaSBsaXN0IHN0cnVjdHVyZSBpcyB1c2VkIGFzIHRoZSBsaXN0IGVuZCB0byBzYXZlIFJBTS4gIFRoaXMgaXMgY2hlY2tlZCBhbmQgdmFsaWQuICovDQpCRkQwOEIwRSAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA4QjEyICAgICAgNkQyNCAgIEFERElVIFYwLCBWMCwgOA0KQkZEMDhCMTQgICAgICAwQzYyICAgTU9WRSBWMSwgVjANCkJGRDA4QjE2ICAwMDA4RkM1RSAgIExXIFYwLCA4KFM4KQ0KQkZEMDhCMUEgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQ0KOTQ6ICAgICAgICAgICAgICAgICAgDQo5NTogICAgICAgICAgICAgICAgICAJcHhMaXN0LT51eE51bWJlck9mSXRlbXMgPSAoIFVCYXNlVHlwZV90ICkgMFU7DQpCRkQwOEIxQyAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA4QjIwICAgICAgRTgyMCAgIFNXIFMwLCAwKFYwKQ0KOTY6ICAgICAgICAgICAgICAgICAgDQo5NzogICAgICAgICAgICAgICAgICAJLyogV3JpdGUga25vd24gdmFsdWVzIGludG8gdGhlIGxpc3QgaWYNCjk4OiAgICAgICAgICAgICAgICAgIAljb25maWdVU0VfTElTVF9EQVRBX0lOVEVHUklUWV9DSEVDS19CWVRFUyBpcyBzZXQgdG8gMS4gKi8NCjk5OiAgICAgICAgICAgICAgICAgIAlsaXN0U0VUX0xJU1RfSU5URUdSSVRZX0NIRUNLXzFfVkFMVUUoIHB4TGlzdCApOw0KMTAwOiAgICAgICAgICAgICAgICAgCWxpc3RTRVRfTElTVF9JTlRFR1JJVFlfQ0hFQ0tfMl9WQUxVRSggcHhMaXN0ICk7DQoxMDE6ICAgICAgICAgICAgICAgICB9DQpCRkQwOEIyMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDhCMjQgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOEIyNiAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA4QjI4ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4QjJBICAgICAgMEMwMCAgIE5PUA0KMTAyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxMDM6ICAgICAgICAgICAgICAgICANCjEwNDogICAgICAgICAgICAgICAgIHZvaWQgdkxpc3RJbml0aWFsaXNlSXRlbSggTGlzdEl0ZW1fdCAqIGNvbnN0IHB4SXRlbSApDQoxMDU6ICAgICAgICAgICAgICAgICB7DQpCRkQwOURDQyAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOURDRSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5REQwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOUREMiAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkNCjEwNjogICAgICAgICAgICAgICAgIAkvKiBNYWtlIHN1cmUgdGhlIGxpc3QgaXRlbSBpcyBub3QgcmVjb3JkZWQgYXMgYmVpbmcgb24gYSBsaXN0LiAqLw0KMTA3OiAgICAgICAgICAgICAgICAgCXB4SXRlbS0+cHZDb250YWluZXIgPSBOVUxMOw0KQkZEMDlERDYgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpDQpCRkQwOUREQSAgICAgIEU4MjQgICBTVyBTMCwgMTYoVjApDQoxMDg6ICAgICAgICAgICAgICAgICANCjEwOTogICAgICAgICAgICAgICAgIAkvKiBXcml0ZSBrbm93biB2YWx1ZXMgaW50byB0aGUgbGlzdCBpdGVtIGlmDQoxMTA6ICAgICAgICAgICAgICAgICAJY29uZmlnVVNFX0xJU1RfREFUQV9JTlRFR1JJVFlfQ0hFQ0tfQllURVMgaXMgc2V0IHRvIDEuICovDQoxMTE6ICAgICAgICAgICAgICAgICAJbGlzdFNFVF9GSVJTVF9MSVNUX0lURU1fSU5URUdSSVRZX0NIRUNLX1ZBTFVFKCBweEl0ZW0gKTsNCjExMjogICAgICAgICAgICAgICAgIAlsaXN0U0VUX1NFQ09ORF9MSVNUX0lURU1fSU5URUdSSVRZX0NIRUNLX1ZBTFVFKCBweEl0ZW0gKTsNCjExMzogICAgICAgICAgICAgICAgIH0NCkJGRDA5RERDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOURERSAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA5REUwICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KQkZEMDlERTIgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDlERTQgICAgICAwQzAwICAgTk9QDQoxMTQ6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjExNTogICAgICAgICAgICAgICAgIA0KMTE2OiAgICAgICAgICAgICAgICAgdm9pZCB2TGlzdEluc2VydEVuZCggTGlzdF90ICogY29uc3QgcHhMaXN0LCBMaXN0SXRlbV90ICogY29uc3QgcHhOZXdMaXN0SXRlbSApDQoxMTc6ICAgICAgICAgICAgICAgICB7DQpCRkQwN0M5NCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNg0KQkZEMDdDOTYgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDdDOTggICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA3QzlBICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkNCkJGRDA3QzlFICAwMDE0RjhCRSAgIFNXIEExLCAyMChTOCkNCjExODogICAgICAgICAgICAgICAgIExpc3RJdGVtX3QgKiBjb25zdCBweEluZGV4ID0gcHhMaXN0LT5weEluZGV4Ow0KQkZEMDdDQTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDdDQTYgICAgICA2OTIxICAgTFcgVjAsIDQoVjApDQpCRkQwN0NBOCAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCjExOTogICAgICAgICAgICAgICAgIA0KMTIwOiAgICAgICAgICAgICAgICAgCS8qIE9ubHkgZWZmZWN0aXZlIHdoZW4gY29uZmlnQVNTRVJUKCkgaXMgYWxzbyBkZWZpbmVkLCB0aGVzZSB0ZXN0cyBtYXkgY2F0Y2gNCjEyMTogICAgICAgICAgICAgICAgIAl0aGUgbGlzdCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgb3ZlcndyaXR0ZW4gaW4gbWVtb3J5LiAgVGhleSB3aWxsIG5vdCBjYXRjaA0KMTIyOiAgICAgICAgICAgICAgICAgCWRhdGEgZXJyb3JzIGNhdXNlZCBieSBpbmNvcnJlY3QgY29uZmlndXJhdGlvbiBvciB1c2Ugb2YgRnJlZVJUT1MuICovDQoxMjM6ICAgICAgICAgICAgICAgICAJbGlzdFRFU1RfTElTVF9JTlRFR1JJVFkoIHB4TGlzdCApOw0KMTI0OiAgICAgICAgICAgICAgICAgCWxpc3RURVNUX0xJU1RfSVRFTV9JTlRFR1JJVFkoIHB4TmV3TGlzdEl0ZW0gKTsNCjEyNTogICAgICAgICAgICAgICAgIA0KMTI2OiAgICAgICAgICAgICAgICAgCS8qIEluc2VydCBhIG5ldyBsaXN0IGl0ZW0gaW50byBweExpc3QsIGJ1dCByYXRoZXIgdGhhbiBzb3J0IHRoZSBsaXN0LA0KMTI3OiAgICAgICAgICAgICAgICAgCW1ha2VzIHRoZSBuZXcgbGlzdCBpdGVtIHRoZSBsYXN0IGl0ZW0gdG8gYmUgcmVtb3ZlZCBieSBhIGNhbGwgdG8NCjEyODogICAgICAgICAgICAgICAgIAlsaXN0R0VUX09XTkVSX09GX05FWFRfRU5UUlkoKS4gKi8NCjEyOTogICAgICAgICAgICAgICAgIAlweE5ld0xpc3RJdGVtLT5weE5leHQgPSBweEluZGV4Ow0KQkZEMDdDQUMgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDdDQjAgIDAwMDBGQzdFICAgTFcgVjEsIDAoUzgpDQpCRkQwN0NCNCAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkNCjEzMDogICAgICAgICAgICAgICAgIAlweE5ld0xpc3RJdGVtLT5weFByZXZpb3VzID0gcHhJbmRleC0+cHhQcmV2aW91czsNCkJGRDA3Q0I2ICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KQkZEMDdDQkEgICAgICA2OUEyICAgTFcgVjEsIDgoVjApDQpCRkQwN0NCQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwN0NDMCAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkNCjEzMTogICAgICAgICAgICAgICAgIA0KMTMyOiAgICAgICAgICAgICAgICAgCS8qIE9ubHkgdXNlZCBkdXJpbmcgZGVjaXNpb24gY292ZXJhZ2UgdGVzdGluZy4gKi8NCjEzMzogICAgICAgICAgICAgICAgIAltdENPVkVSQUdFX1RFU1RfREVMQVkoKTsNCjEzNDogICAgICAgICAgICAgICAgIA0KMTM1OiAgICAgICAgICAgICAgICAgCXB4SW5kZXgtPnB4UHJldmlvdXMtPnB4TmV4dCA9IHB4TmV3TGlzdEl0ZW07DQpCRkQwN0NDMiAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDA3Q0M2ICAgICAgNjkyMiAgIExXIFYwLCA4KFYwKQ0KQkZEMDdDQzggIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQ0KQkZEMDdDQ0MgICAgICBFOUExICAgU1cgVjEsIDQoVjApDQoxMzY6ICAgICAgICAgICAgICAgICAJcHhJbmRleC0+cHhQcmV2aW91cyA9IHB4TmV3TGlzdEl0ZW07DQpCRkQwN0NDRSAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDA3Q0QyICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkNCkJGRDA3Q0Q2ICAgICAgRTlBMiAgIFNXIFYxLCA4KFYwKQ0KMTM3OiAgICAgICAgICAgICAgICAgDQoxMzg6ICAgICAgICAgICAgICAgICAJLyogUmVtZW1iZXIgd2hpY2ggbGlzdCB0aGUgaXRlbSBpcyBpbi4gKi8NCjEzOTogICAgICAgICAgICAgICAgIAlweE5ld0xpc3RJdGVtLT5wdkNvbnRhaW5lciA9ICggdm9pZCAqICkgcHhMaXN0Ow0KQkZEMDdDRDggIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDdDREMgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDdDRTAgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQ0KMTQwOiAgICAgICAgICAgICAgICAgDQoxNDE6ICAgICAgICAgICAgICAgICAJKCBweExpc3QtPnV4TnVtYmVyT2ZJdGVtcyApKys7DQpCRkQwN0NFMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwN0NFNiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDA3Q0U4ICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQ0KQkZEMDdDRUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDdDRUUgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoxNDI6ICAgICAgICAgICAgICAgICB9DQpCRkQwN0NGMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDdDRjIgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDdDRjQgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNg0KQkZEMDdDRjYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDdDRjggICAgICAwQzAwICAgTk9QDQoxNDM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE0NDogICAgICAgICAgICAgICAgIA0KMTQ1OiAgICAgICAgICAgICAgICAgdm9pZCB2TGlzdEluc2VydCggTGlzdF90ICogY29uc3QgcHhMaXN0LCBMaXN0SXRlbV90ICogY29uc3QgcHhOZXdMaXN0SXRlbSApDQoxNDY6ICAgICAgICAgICAgICAgICB7DQpCRkQwNjA4MCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNg0KQkZEMDYwODIgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDYwODQgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA2MDg2ICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkNCkJGRDA2MDhBICAwMDE0RjhCRSAgIFNXIEExLCAyMChTOCkNCjE0NzogICAgICAgICAgICAgICAgIExpc3RJdGVtX3QgKnB4SXRlcmF0b3I7DQoxNDg6ICAgICAgICAgICAgICAgICBjb25zdCBUaWNrVHlwZV90IHhWYWx1ZU9mSW5zZXJ0aW9uID0gcHhOZXdMaXN0SXRlbS0+eEl0ZW1WYWx1ZTsNCkJGRDA2MDhFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2MDkyICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDYwOTQgIDAwMDRGODVFICAgU1cgVjAsIDQoUzgpDQoxNDk6ICAgICAgICAgICAgICAgICANCjE1MDogICAgICAgICAgICAgICAgIAkvKiBPbmx5IGVmZmVjdGl2ZSB3aGVuIGNvbmZpZ0FTU0VSVCgpIGlzIGFsc28gZGVmaW5lZCwgdGhlc2UgdGVzdHMgbWF5IGNhdGNoDQoxNTE6ICAgICAgICAgICAgICAgICAJdGhlIGxpc3QgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG92ZXJ3cml0dGVuIGluIG1lbW9yeS4gIFRoZXkgd2lsbCBub3QgY2F0Y2gNCjE1MjogICAgICAgICAgICAgICAgIAlkYXRhIGVycm9ycyBjYXVzZWQgYnkgaW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3IgdXNlIG9mIEZyZWVSVE9TLiAqLw0KMTUzOiAgICAgICAgICAgICAgICAgCWxpc3RURVNUX0xJU1RfSU5URUdSSVRZKCBweExpc3QgKTsNCjE1NDogICAgICAgICAgICAgICAgIAlsaXN0VEVTVF9MSVNUX0lURU1fSU5URUdSSVRZKCBweE5ld0xpc3RJdGVtICk7DQoxNTU6ICAgICAgICAgICAgICAgICANCjE1NjogICAgICAgICAgICAgICAgIAkvKiBJbnNlcnQgdGhlIG5ldyBsaXN0IGl0ZW0gaW50byB0aGUgbGlzdCwgc29ydGVkIGluIHhJdGVtVmFsdWUgb3JkZXIuDQoxNTc6ICAgICAgICAgICAgICAgICANCjE1ODogICAgICAgICAgICAgICAgIAlJZiB0aGUgbGlzdCBhbHJlYWR5IGNvbnRhaW5zIGEgbGlzdCBpdGVtIHdpdGggdGhlIHNhbWUgaXRlbSB2YWx1ZSB0aGVuIHRoZQ0KMTU5OiAgICAgICAgICAgICAgICAgCW5ldyBsaXN0IGl0ZW0gc2hvdWxkIGJlIHBsYWNlZCBhZnRlciBpdC4gIFRoaXMgZW5zdXJlcyB0aGF0IFRDQidzIHdoaWNoIGFyZQ0KMTYwOiAgICAgICAgICAgICAgICAgCXN0b3JlZCBpbiByZWFkeSBsaXN0cyAoYWxsIG9mIHdoaWNoIGhhdmUgdGhlIHNhbWUgeEl0ZW1WYWx1ZSB2YWx1ZSkgZ2V0IGENCjE2MTogICAgICAgICAgICAgICAgIAlzaGFyZSBvZiB0aGUgQ1BVLiAgSG93ZXZlciwgaWYgdGhlIHhJdGVtVmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIGJhY2sgbWFya2VyDQoxNjI6ICAgICAgICAgICAgICAgICAJdGhlIGl0ZXJhdGlvbiBsb29wIGJlbG93IHdpbGwgbm90IGVuZC4gIFRoZXJlZm9yZSB0aGUgdmFsdWUgaXMgY2hlY2tlZA0KMTYzOiAgICAgICAgICAgICAgICAgCWZpcnN0LCBhbmQgdGhlIGFsZ29yaXRobSBzbGlnaHRseSBtb2RpZmllZCBpZiBuZWNlc3NhcnkuICovDQoxNjQ6ICAgICAgICAgICAgICAgICAJaWYoIHhWYWx1ZU9mSW5zZXJ0aW9uID09IHBvcnRNQVhfREVMQVkgKQ0KQkZEMDYwOTggIDAwMDRGQzdFICAgTFcgVjEsIDQoUzgpDQpCRkQwNjA5QyAgICAgIEVEN0YgICBMSSBWMCwgLTENCkJGRDA2MDlFICAwMDA4QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDYwQjINCkJGRDA2MEEwICAwQzAwMDAwOCAgIFNMTCBaRVJPLCBUMCwgMQ0KQkZEMDYwQTIgICAgICAwQzAwICAgTk9QDQoxNjU6ICAgICAgICAgICAgICAgICAJew0KMTY2OiAgICAgICAgICAgICAgICAgCQlweEl0ZXJhdG9yID0gcHhMaXN0LT54TGlzdEVuZC5weFByZXZpb3VzOw0KQkZEMDYwQTQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDYwQTggICAgICA2OTI0ICAgTFcgVjAsIDE2KFYwKQ0KQkZEMDYwQUEgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpDQpCRkQwNjBBRSAgICAgIENDMTcgICBCIDB4QkZEMDYwREUNCkJGRDA2MEIwICAgICAgMEMwMCAgIE5PUA0KMTY3OiAgICAgICAgICAgICAgICAgCX0NCjE2ODogICAgICAgICAgICAgICAgIAllbHNlDQoxNjk6ICAgICAgICAgICAgICAgICAJew0KMTcwOiAgICAgICAgICAgICAgICAgCQkvKiAqKiogTk9URSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMTcxOiAgICAgICAgICAgICAgICAgCQlJZiB5b3UgZmluZCB5b3VyIGFwcGxpY2F0aW9uIGlzIGNyYXNoaW5nIGhlcmUgdGhlbiBsaWtlbHkgY2F1c2VzIGFyZQ0KMTcyOiAgICAgICAgICAgICAgICAgCQlsaXN0ZWQgYmVsb3cuICBJbiBhZGRpdGlvbiBzZWUgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvRkFRSGVscC5odG1sIGZvcg0KMTczOiAgICAgICAgICAgICAgICAgCQltb3JlIHRpcHMsIGFuZCBlbnN1cmUgY29uZmlnQVNTRVJUKCkgaXMgZGVmaW5lZCENCjE3NDogICAgICAgICAgICAgICAgIAkJaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTEwLmh0bWwjY29uZmlnQVNTRVJUDQoxNzU6ICAgICAgICAgICAgICAgICANCjE3NjogICAgICAgICAgICAgICAgIAkJCTEpIFN0YWNrIG92ZXJmbG93IC0NCjE3NzogICAgICAgICAgICAgICAgIAkJCSAgIHNlZSBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9TdGFja3MtYW5kLXN0YWNrLW92ZXJmbG93LWNoZWNraW5nLmh0bWwNCjE3ODogICAgICAgICAgICAgICAgIAkJCTIpIEluY29ycmVjdCBpbnRlcnJ1cHQgcHJpb3JpdHkgYXNzaWdubWVudCwgZXNwZWNpYWxseSBvbiBDb3J0ZXgtTQ0KMTc5OiAgICAgICAgICAgICAgICAgCQkJICAgcGFydHMgd2hlcmUgbnVtZXJpY2FsbHkgaGlnaCBwcmlvcml0eSB2YWx1ZXMgZGVub3RlIGxvdyBhY3R1YWwNCjE4MDogICAgICAgICAgICAgICAgIAkJCSAgIGludGVycnVwdCBwcmlvcml0aWVzLCB3aGljaCBjYW4gc2VlbSBjb3VudGVyIGludHVpdGl2ZS4gIFNlZQ0KMTgxOiAgICAgICAgICAgICAgICAgCQkJICAgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvUlRPUy1Db3J0ZXgtTTMtTTQuaHRtbCBhbmQgdGhlIGRlZmluaXRpb24NCjE4MjogICAgICAgICAgICAgICAgIAkJCSAgIG9mIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSBvbg0KMTgzOiAgICAgICAgICAgICAgICAgCQkJICAgaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTEwLmh0bWwNCjE4NDogICAgICAgICAgICAgICAgIAkJCTMpIENhbGxpbmcgYW4gQVBJIGZ1bmN0aW9uIGZyb20gd2l0aGluIGEgY3JpdGljYWwgc2VjdGlvbiBvciB3aGVuDQoxODU6ICAgICAgICAgICAgICAgICAJCQkgICB0aGUgc2NoZWR1bGVyIGlzIHN1c3BlbmRlZCwgb3IgY2FsbGluZyBhbiBBUEkgZnVuY3Rpb24gdGhhdCBkb2VzDQoxODY6ICAgICAgICAgICAgICAgICAJCQkgICBub3QgZW5kIGluICJGcm9tSVNSIiBmcm9tIGFuIGludGVycnVwdC4NCjE4NzogICAgICAgICAgICAgICAgIAkJCTQpIFVzaW5nIGEgcXVldWUgb3Igc2VtYXBob3JlIGJlZm9yZSBpdCBoYXMgYmVlbiBpbml0aWFsaXNlZCBvcg0KMTg4OiAgICAgICAgICAgICAgICAgCQkJICAgYmVmb3JlIHRoZSBzY2hlZHVsZXIgaGFzIGJlZW4gc3RhcnRlZCAoYXJlIGludGVycnVwdHMgZmlyaW5nDQoxODk6ICAgICAgICAgICAgICAgICAJCQkgICBiZWZvcmUgdlRhc2tTdGFydFNjaGVkdWxlcigpIGhhcyBiZWVuIGNhbGxlZD8pLg0KMTkwOiAgICAgICAgICAgICAgICAgCQkqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMTkxOiAgICAgICAgICAgICAgICAgDQoxOTI6ICAgICAgICAgICAgICAgICAJCWZvciggcHhJdGVyYXRvciA9ICggTGlzdEl0ZW1fdCAqICkgJiggcHhMaXN0LT54TGlzdEVuZCApOyBweEl0ZXJhdG9yLT5weE5leHQtPnhJdGVtVmFsdWUgPD0geFZhbHVlT2ZJbnNlcnRpb247IHB4SXRlcmF0b3IgPSBweEl0ZXJhdG9yLT5weE5leHQgKSAvKmxpbnQgIWU4MjYgIWU3NDAgVGhlIG1pbmkgbGlzdCBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyB0aGUgbGlzdCBlbmQgdG8gc2F2ZSBSQU0uICBUaGlzIGlzIGNoZWNrZWQgYW5kIHZhbGlkLiAqLw0KQkZEMDYwQjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDYwQjYgICAgICA2RDI0ICAgQURESVUgVjAsIFYwLCA4DQpCRkQwNjBCOCAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCkJGRDA2MEJDICAgICAgQ0MwNiAgIEIgMHhCRkQwNjBDQQ0KQkZEMDYwQkUgICAgICAwQzAwICAgTk9QDQpCRkQwNjBDMCAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDA2MEM0ICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQ0KQkZEMDYwQzYgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpDQpCRkQwNjBDQSAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDA2MENFICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQ0KQkZEMDYwRDAgICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwNjBEMiAgMDAwNEZDNUUgICBMVyBWMCwgNChTOCkNCkJGRDA2MEQ2ICAxMzkwMDA2MiAgIFNMVFUgVjAsIFYwLCBWMQ0KQkZEMDYwRDggIDQwRTIxMzkwICAgQURESSBHUCwgUzAsIDE2NjEwDQpCRkQwNjBEQSAgRkZGMTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjBDMA0KQkZEMDYwREMgIEZDNUVGRkYxICAgTFcgUkEsIC05MzAoUzEpDQoxOTM6ICAgICAgICAgICAgICAgICAJCXsNCjE5NDogICAgICAgICAgICAgICAgIAkJCS8qIFRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZSwganVzdCBpdGVyYXRpbmcgdG8gdGhlIHdhbnRlZA0KMTk1OiAgICAgICAgICAgICAgICAgCQkJaW5zZXJ0aW9uIHBvc2l0aW9uLiAqLw0KMTk2OiAgICAgICAgICAgICAgICAgCQl9DQoxOTc6ICAgICAgICAgICAgICAgICAJfQ0KMTk4OiAgICAgICAgICAgICAgICAgDQoxOTk6ICAgICAgICAgICAgICAgICAJcHhOZXdMaXN0SXRlbS0+cHhOZXh0ID0gcHhJdGVyYXRvci0+cHhOZXh0Ow0KQkZEMDYwREUgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwNjBFMiAgICAgIDY5QTEgICBMVyBWMSwgNChWMCkNCkJGRDA2MEU0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2MEU4ICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQ0KMjAwOiAgICAgICAgICAgICAgICAgCXB4TmV3TGlzdEl0ZW0tPnB4TmV4dC0+cHhQcmV2aW91cyA9IHB4TmV3TGlzdEl0ZW07DQpCRkQwNjBFQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNjBFRSAgICAgIDY5MjEgICBMVyBWMCwgNChWMCkNCkJGRDA2MEYwICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkNCkJGRDA2MEY0ICAgICAgRTlBMiAgIFNXIFYxLCA4KFYwKQ0KMjAxOiAgICAgICAgICAgICAgICAgCXB4TmV3TGlzdEl0ZW0tPnB4UHJldmlvdXMgPSBweEl0ZXJhdG9yOw0KQkZEMDYwRjYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDYwRkEgIDAwMDBGQzdFICAgTFcgVjEsIDAoUzgpDQpCRkQwNjBGRSAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkNCjIwMjogICAgICAgICAgICAgICAgIAlweEl0ZXJhdG9yLT5weE5leHQgPSBweE5ld0xpc3RJdGVtOw0KQkZEMDYxMDAgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwNjEwNCAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpDQpCRkQwNjEwOCAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkNCjIwMzogICAgICAgICAgICAgICAgIA0KMjA0OiAgICAgICAgICAgICAgICAgCS8qIFJlbWVtYmVyIHdoaWNoIGxpc3QgdGhlIGl0ZW0gaXMgaW4uICBUaGlzIGFsbG93cyBmYXN0IHJlbW92YWwgb2YgdGhlDQoyMDU6ICAgICAgICAgICAgICAgICAJaXRlbSBsYXRlci4gKi8NCjIwNjogICAgICAgICAgICAgICAgIAlweE5ld0xpc3RJdGVtLT5wdkNvbnRhaW5lciA9ICggdm9pZCAqICkgcHhMaXN0Ow0KQkZEMDYxMEEgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDYxMEUgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDYxMTIgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQ0KMjA3OiAgICAgICAgICAgICAgICAgDQoyMDg6ICAgICAgICAgICAgICAgICAJKCBweExpc3QtPnV4TnVtYmVyT2ZJdGVtcyApKys7DQpCRkQwNjExNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNjExOCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDA2MTFBICAgICAgNkRBMCAgIEFERElVIFYxLCBWMCwgMQ0KQkZEMDYxMUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDYxMjAgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyMDk6ICAgICAgICAgICAgICAgICB9DQpCRkQwNjEyMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDYxMjQgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDYxMjYgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNg0KQkZEMDYxMjggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDYxMkEgICAgICAwQzAwICAgTk9QDQoyMTA6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIxMTogICAgICAgICAgICAgICAgIA0KMjEyOiAgICAgICAgICAgICAgICAgVUJhc2VUeXBlX3QgdXhMaXN0UmVtb3ZlKCBMaXN0SXRlbV90ICogY29uc3QgcHhJdGVtVG9SZW1vdmUgKQ0KMjEzOiAgICAgICAgICAgICAgICAgew0KQkZEMDAxOTAgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYNCkJGRDAwMTkyICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDAwMTk0ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwMDE5NiAgMDAxMEY4OUUgICBTVyBBMCwgMTYoUzgpDQoyMTQ6ICAgICAgICAgICAgICAgICAvKiBUaGUgbGlzdCBpdGVtIGtub3dzIHdoaWNoIGxpc3QgaXQgaXMgaW4uICBPYnRhaW4gdGhlIGxpc3QgZnJvbSB0aGUgbGlzdA0KMjE1OiAgICAgICAgICAgICAgICAgaXRlbS4gKi8NCjIxNjogICAgICAgICAgICAgICAgIExpc3RfdCAqIGNvbnN0IHB4TGlzdCA9ICggTGlzdF90ICogKSBweEl0ZW1Ub1JlbW92ZS0+cHZDb250YWluZXI7DQpCRkQwMDE5QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMDE5RSAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApDQpCRkQwMDFBMCAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCjIxNzogICAgICAgICAgICAgICAgIA0KMjE4OiAgICAgICAgICAgICAgICAgCXB4SXRlbVRvUmVtb3ZlLT5weE5leHQtPnB4UHJldmlvdXMgPSBweEl0ZW1Ub1JlbW92ZS0+cHhQcmV2aW91czsNCkJGRDAwMUE0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAwMUE4ICAgICAgNjkyMSAgIExXIFYwLCA0KFYwKQ0KQkZEMDAxQUEgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDAxQUUgICAgICA2OUIyICAgTFcgVjEsIDgoVjEpDQpCRkQwMDFCMCAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkNCjIxOTogICAgICAgICAgICAgICAgIAlweEl0ZW1Ub1JlbW92ZS0+cHhQcmV2aW91cy0+cHhOZXh0ID0gcHhJdGVtVG9SZW1vdmUtPnB4TmV4dDsNCkJGRDAwMUIyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAwMUI2ICAgICAgNjkyMiAgIExXIFYwLCA4KFYwKQ0KQkZEMDAxQjggIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDAxQkMgICAgICA2OUIxICAgTFcgVjEsIDQoVjEpDQpCRkQwMDFCRSAgICAgIEU5QTEgICBTVyBWMSwgNChWMCkNCjIyMDogICAgICAgICAgICAgICAgIA0KMjIxOiAgICAgICAgICAgICAgICAgCS8qIE9ubHkgdXNlZCBkdXJpbmcgZGVjaXNpb24gY292ZXJhZ2UgdGVzdGluZy4gKi8NCjIyMjogICAgICAgICAgICAgICAgIAltdENPVkVSQUdFX1RFU1RfREVMQVkoKTsNCjIyMzogICAgICAgICAgICAgICAgIA0KMjI0OiAgICAgICAgICAgICAgICAgCS8qIE1ha2Ugc3VyZSB0aGUgaW5kZXggaXMgbGVmdCBwb2ludGluZyB0byBhIHZhbGlkIGl0ZW0uICovDQoyMjU6ICAgICAgICAgICAgICAgICAJaWYoIHB4TGlzdC0+cHhJbmRleCA9PSBweEl0ZW1Ub1JlbW92ZSApDQpCRkQwMDFDMCAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDAwMUM0ICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQ0KQkZEMDAxQzYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDAxQ0EgIDAwMDdCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMDFEQw0KQkZEMDAxQ0MgIDBDMDAwMDA3ICAgU0xMIFpFUk8sIEEzLCAxDQpCRkQwMDFDRSAgICAgIDBDMDAgICBOT1ANCjIyNjogICAgICAgICAgICAgICAgIAl7DQoyMjc6ICAgICAgICAgICAgICAgICAJCXB4TGlzdC0+cHhJbmRleCA9IHB4SXRlbVRvUmVtb3ZlLT5weFByZXZpb3VzOw0KQkZEMDAxRDAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDAxRDQgICAgICA2OUEyICAgTFcgVjEsIDgoVjApDQpCRkQwMDFENiAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDAwMURBICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQ0KMjI4OiAgICAgICAgICAgICAgICAgCX0NCjIyOTogICAgICAgICAgICAgICAgIAllbHNlDQoyMzA6ICAgICAgICAgICAgICAgICAJew0KMjMxOiAgICAgICAgICAgICAgICAgCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQoyMzI6ICAgICAgICAgICAgICAgICAJfQ0KMjMzOiAgICAgICAgICAgICAgICAgDQoyMzQ6ICAgICAgICAgICAgICAgICAJcHhJdGVtVG9SZW1vdmUtPnB2Q29udGFpbmVyID0gTlVMTDsNCkJGRDAwMURDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAwMUUwICAgICAgRTgyNCAgIFNXIFMwLCAxNihWMCkNCjIzNTogICAgICAgICAgICAgICAgIAkoIHB4TGlzdC0+dXhOdW1iZXJPZkl0ZW1zICktLTsNCkJGRDAwMUUyICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KQkZEMDAxRTYgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMDFFOCAgICAgIDZEQUUgICBBRERJVSBWMSwgVjAsIC0xDQpCRkQwMDFFQSAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDAwMUVFICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMjM2OiAgICAgICAgICAgICAgICAgDQoyMzc6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHB4TGlzdC0+dXhOdW1iZXJPZkl0ZW1zOw0KQkZEMDAxRjAgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwMDFGNCAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCjIzODogICAgICAgICAgICAgICAgIH0NCkJGRDAwMUY2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwMDFGOCAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwMDFGQSAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2DQpCRkQwMDFGQyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwMDFGRSAgICAgIDBDMDAgICBOT1ANCjIzOTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMjQwOiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL3NvdXJjZS9ldmVudF9ncm91cHMuYyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qDQoyOiAgICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgVjguMi4xIC0gQ29weXJpZ2h0IChDKSAyMDE1IFJlYWwgVGltZSBFbmdpbmVlcnMgTHRkLg0KMzogICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQNCjQ6ICAgICAgICAgICAgICAgICAgIA0KNTogICAgICAgICAgICAgICAgICAgICAgIFZJU0lUIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnIFRPIEVOU1VSRSBZT1UgQVJFIFVTSU5HIFRIRSBMQVRFU1QgVkVSU0lPTi4NCjY6ICAgICAgICAgICAgICAgICAgIA0KNzogICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlUlRPUyBkaXN0cmlidXRpb24uDQo4OiAgICAgICAgICAgICAgICAgICANCjk6ICAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyDQoxMDogICAgICAgICAgICAgICAgICAgICAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyKSBhcyBwdWJsaXNoZWQgYnkgdGhlDQoxMTogICAgICAgICAgICAgICAgICAgICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uID4+Pj4gQU5EIE1PRElGSUVEIEJZIDw8PDwgdGhlIEZyZWVSVE9TIGV4Y2VwdGlvbi4NCjEyOiAgICAgICAgICAgICAgICAgIA0KMTM6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMTQ6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIE5PVEU6IFRoZSBtb2RpZmljYXRpb24gdG8gdGhlIEdQTCBpcyBpbmNsdWRlZCB0byBhbGxvdyB5b3UgdG8gICAgICE8PA0KMTU6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIGRpc3RyaWJ1dGUgYSBjb21iaW5lZCB3b3JrIHRoYXQgaW5jbHVkZXMgRnJlZVJUT1Mgd2l0aG91dCBiZWluZyAgICE8PA0KMTY6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIG9ibGlnZWQgdG8gcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGNvbXBvbmVudHMgICAgICE8PA0KMTc6ICAgICAgICAgICAgICAgICAgICAgID4+ISAgIG91dHNpZGUgb2YgdGhlIEZyZWVSVE9TIGtlcm5lbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE8PA0KMTg6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMTk6ICAgICAgICAgICAgICAgICAgDQoyMDogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZDQoyMTogICAgICAgICAgICAgICAgICAgICAgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUw0KMjI6ICAgICAgICAgICAgICAgICAgICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIEZ1bGwgbGljZW5zZSB0ZXh0IGlzIGF2YWlsYWJsZSBvbiB0aGUgZm9sbG93aW5nDQoyMzogICAgICAgICAgICAgICAgICAgICAgbGluazogaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTE0Lmh0bWwNCjI0OiAgICAgICAgICAgICAgICAgIA0KMjU6ICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjY6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoyNzogICAgICAgICAgICAgICAgICAgICAgICogICAgRnJlZVJUT1MgcHJvdmlkZXMgY29tcGxldGVseSBmcmVlIHlldCBwcm9mZXNzaW9uYWxseSBkZXZlbG9wZWQsICAgICoNCjI4OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICByb2J1c3QsIHN0cmljdGx5IHF1YWxpdHkgY29udHJvbGxlZCwgc3VwcG9ydGVkLCBhbmQgY3Jvc3MgICAgICAgICAgKg0KMjk6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHBsYXRmb3JtIHNvZnR3YXJlIHRoYXQgaXMgbW9yZSB0aGFuIGp1c3QgdGhlIG1hcmtldCBsZWFkZXIsIGl0ICAgICAqDQozMDogICAgICAgICAgICAgICAgICAgICAgICogICAgaXMgdGhlIGluZHVzdHJ5J3MgZGUgZmFjdG8gc3RhbmRhcmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjMxOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzI6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIEhlbHAgeW91cnNlbGYgZ2V0IHN0YXJ0ZWQgcXVpY2tseSB3aGlsZSBzaW11bHRhbmVvdXNseSBoZWxwaW5nICAgICAqDQozMzogICAgICAgICAgICAgICAgICAgICAgICogICAgdG8gc3VwcG9ydCB0aGUgRnJlZVJUT1MgcHJvamVjdCBieSBwdXJjaGFzaW5nIGEgRnJlZVJUT1MgICAgICAgICAgICoNCjM0OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICB0dXRvcmlhbCBib29rLCByZWZlcmVuY2UgbWFudWFsLCBvciBib3RoOiAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzU6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0RvY3VtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozNjogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM3OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjM4OiAgICAgICAgICAgICAgICAgIA0KMzk6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL0ZBUUhlbHAuaHRtbCAtIEhhdmluZyBhIHByb2JsZW0/ICBTdGFydCBieSByZWFkaW5nDQo0MDogICAgICAgICAgICAgICAgICAgICAgdGhlIEZBUSBwYWdlICJNeSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBydW4sIHdoYXQgY291bGQgYmUgd3Jvbmc/Ii4gIEhhdmUgeW91DQo0MTogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBjb25maWdBU1NFUlQoKT8NCjQyOiAgICAgICAgICAgICAgICAgIA0KNDM6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3N1cHBvcnQgLSBJbiByZXR1cm4gZm9yIHJlY2VpdmluZyB0aGlzIHRvcCBxdWFsaXR5DQo0NDogICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQgc29mdHdhcmUgZm9yIGZyZWUgd2UgcmVxdWVzdCB5b3UgYXNzaXN0IG91ciBnbG9iYWwgY29tbXVuaXR5IGJ5DQo0NTogICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhdGluZyBpbiB0aGUgc3VwcG9ydCBmb3J1bS4NCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3RyYWluaW5nIC0gSW52ZXN0aW5nIGluIHRyYWluaW5nIGFsbG93cyB5b3VyIHRlYW0gdG8NCjQ4OiAgICAgICAgICAgICAgICAgICAgICBiZSBhcyBwcm9kdWN0aXZlIGFzIHBvc3NpYmxlIGFzIGVhcmx5IGFzIHBvc3NpYmxlLiAgTm93IHlvdSBjYW4gcmVjZWl2ZQ0KNDk6ICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIHRyYWluaW5nIGRpcmVjdGx5IGZyb20gUmljaGFyZCBCYXJyeSwgQ0VPIG9mIFJlYWwgVGltZSBFbmdpbmVlcnMNCjUwOiAgICAgICAgICAgICAgICAgICAgICBMdGQsIGFuZCB0aGUgd29ybGQncyBsZWFkaW5nIGF1dGhvcml0eSBvbiB0aGUgd29ybGQncyBsZWFkaW5nIFJUT1MuDQo1MTogICAgICAgICAgICAgICAgICANCjUyOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9wbHVzIC0gQSBzZWxlY3Rpb24gb2YgRnJlZVJUT1MgZWNvc3lzdGVtIHByb2R1Y3RzLA0KNTM6ICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyBGcmVlUlRPUytUcmFjZSAtIGFuIGluZGlzcGVuc2FibGUgcHJvZHVjdGl2aXR5IHRvb2wsIGEgRE9TDQo1NDogICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSBGQVQgZmlsZSBzeXN0ZW0sIGFuZCBvdXIgdGlueSB0aHJlYWQgYXdhcmUgVURQL0lQIHN0YWNrLg0KNTU6ICAgICAgICAgICAgICAgICAgDQo1NjogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvbGFicyAtIFdoZXJlIG5ldyBGcmVlUlRPUyBwcm9kdWN0cyBnbyB0byBpbmN1YmF0ZS4NCjU3OiAgICAgICAgICAgICAgICAgICAgICBDb21lIGFuZCB0cnkgRnJlZVJUT1MrVENQLCBvdXIgbmV3IG9wZW4gc291cmNlIFRDUC9JUCBzdGFjayBmb3IgRnJlZVJUT1MuDQo1ODogICAgICAgICAgICAgICAgICANCjU5OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lk9wZW5SVE9TLmNvbSAtIFJlYWwgVGltZSBFbmdpbmVlcnMgbHRkLiBsaWNlbnNlIEZyZWVSVE9TIHRvIEhpZ2gNCjYwOiAgICAgICAgICAgICAgICAgICAgICBJbnRlZ3JpdHkgU3lzdGVtcyBsdGQuIHRvIHNlbGwgdW5kZXIgdGhlIE9wZW5SVE9TIGJyYW5kLiAgTG93IGNvc3QgT3BlblJUT1MNCjYxOiAgICAgICAgICAgICAgICAgICAgICBsaWNlbnNlcyBvZmZlciB0aWNrZXRlZCBzdXBwb3J0LCBpbmRlbW5pZmljYXRpb24gYW5kIGNvbW1lcmNpYWwgbWlkZGxld2FyZS4NCjYyOiAgICAgICAgICAgICAgICAgIA0KNjM6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuU2FmZVJUT1MuY29tIC0gSGlnaCBJbnRlZ3JpdHkgU3lzdGVtcyBhbHNvIHByb3ZpZGUgYSBzYWZldHkNCjY0OiAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVlcmVkIGFuZCBpbmRlcGVuZGVudGx5IFNJTDMgY2VydGlmaWVkIHZlcnNpb24gZm9yIHVzZSBpbiBzYWZldHkgYW5kDQo2NTogICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIHByb3ZhYmxlIGRlcGVuZGFiaWxpdHkuDQo2NjogICAgICAgICAgICAgICAgICANCjY3OiAgICAgICAgICAgICAgICAgICAgICAxIHRhYiA9PSA0IHNwYWNlcyENCjY4OiAgICAgICAgICAgICAgICAgICovDQo2OTogICAgICAgICAgICAgICAgICANCjcwOiAgICAgICAgICAgICAgICAgIC8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KNzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KNzI6ICAgICAgICAgICAgICAgICAgDQo3MzogICAgICAgICAgICAgICAgICAvKiBEZWZpbmluZyBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSBwcmV2ZW50cyB0YXNrLmggZnJvbSByZWRlZmluaW5nDQo3NDogICAgICAgICAgICAgICAgICBhbGwgdGhlIEFQSSBmdW5jdGlvbnMgdG8gdXNlIHRoZSBNUFUgd3JhcHBlcnMuICBUaGF0IHNob3VsZCBvbmx5IGJlIGRvbmUgd2hlbg0KNzU6ICAgICAgICAgICAgICAgICAgdGFzay5oIGlzIGluY2x1ZGVkIGZyb20gYW4gYXBwbGljYXRpb24gZmlsZS4gKi8NCjc2OiAgICAgICAgICAgICAgICAgICNkZWZpbmUgTVBVX1dSQVBQRVJTX0lOQ0xVREVEX0ZST01fQVBJX0ZJTEUNCjc3OiAgICAgICAgICAgICAgICAgIA0KNzg6ICAgICAgICAgICAgICAgICAgLyogRnJlZVJUT1MgaW5jbHVkZXMuICovDQo3OTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiRnJlZVJUT1MuaCINCjgwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJ0YXNrLmgiDQo4MTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAidGltZXJzLmgiDQo4MjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiZXZlbnRfZ3JvdXBzLmgiDQo4MzogICAgICAgICAgICAgICAgICANCjg0OiAgICAgICAgICAgICAgICAgIC8qIExpbnQgZTk2MSBhbmQgZTc1MCBhcmUgc3VwcHJlc3NlZCBhcyBhIE1JU1JBIGV4Y2VwdGlvbiBqdXN0aWZpZWQgYmVjYXVzZSB0aGUNCjg1OiAgICAgICAgICAgICAgICAgIE1QVSBwb3J0cyByZXF1aXJlIE1QVV9XUkFQUEVSU19JTkNMVURFRF9GUk9NX0FQSV9GSUxFIHRvIGJlIGRlZmluZWQgZm9yIHRoZQ0KODY6ICAgICAgICAgICAgICAgICAgaGVhZGVyIGZpbGVzIGFib3ZlLCBidXQgbm90IGluIHRoaXMgZmlsZSwgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3QNCjg3OiAgICAgICAgICAgICAgICAgIHByaXZpbGVnZWQgVnMgdW5wcml2aWxlZ2VkIGxpbmthZ2UgYW5kIHBsYWNlbWVudC4gKi8NCjg4OiAgICAgICAgICAgICAgICAgICN1bmRlZiBNUFVfV1JBUFBFUlNfSU5DTFVERURfRlJPTV9BUElfRklMRSAvKmxpbnQgIWU5NjEgIWU3NTAuICovDQo4OTogICAgICAgICAgICAgICAgICANCjkwOiAgICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfeEV2ZW50R3JvdXBTZXRCaXRzRnJvbUlTUiA9PSAxICkgJiYgKCBjb25maWdVU0VfVElNRVJTID09IDAgKQ0KOTE6ICAgICAgICAgICAgICAgICAgCSNlcnJvciBjb25maWdVU0VfVElNRVJTIG11c3QgYmUgc2V0IHRvIDEgdG8gbWFrZSB0aGUgeEV2ZW50R3JvdXBTZXRCaXRGcm9tSVNSKCkgZnVuY3Rpb24gYXZhaWxhYmxlLg0KOTI6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo5MzogICAgICAgICAgICAgICAgICANCjk0OiAgICAgICAgICAgICAgICAgICNpZiAoIElOQ0xVREVfeEV2ZW50R3JvdXBTZXRCaXRzRnJvbUlTUiA9PSAxICkgJiYgKCBJTkNMVURFX3hUaW1lclBlbmRGdW5jdGlvbkNhbGwgPT0gMCApDQo5NTogICAgICAgICAgICAgICAgICAJI2Vycm9yIElOQ0xVREVfeFRpbWVyUGVuZEZ1bmN0aW9uQ2FsbCBtdXN0IGFsc28gYmUgc2V0IHRvIG9uZSB0byBtYWtlIHRoZSB4RXZlbnRHcm91cFNldEJpdEZyb21JU1IoKSBmdW5jdGlvbiBhdmFpbGFibGUuDQo5NjogICAgICAgICAgICAgICAgICAjZW5kaWYNCjk3OiAgICAgICAgICAgICAgICAgIA0KOTg6ICAgICAgICAgICAgICAgICAgLyogVGhlIGZvbGxvd2luZyBiaXQgZmllbGRzIGNvbnZleSBjb250cm9sIGluZm9ybWF0aW9uIGluIGEgdGFzaydzIGV2ZW50IGxpc3QNCjk5OiAgICAgICAgICAgICAgICAgIGl0ZW0gdmFsdWUuICBJdCBpcyBpbXBvcnRhbnQgdGhleSBkb24ndCBjbGFzaCB3aXRoIHRoZQ0KMTAwOiAgICAgICAgICAgICAgICAgdGFza0VWRU5UX0xJU1RfSVRFTV9WQUxVRV9JTl9VU0UgZGVmaW5pdGlvbi4gKi8NCjEwMTogICAgICAgICAgICAgICAgICNpZiBjb25maWdVU0VfMTZfQklUX1RJQ0tTID09IDENCjEwMjogICAgICAgICAgICAgICAgIAkjZGVmaW5lIGV2ZW50Q0xFQVJfRVZFTlRTX09OX0VYSVRfQklUCTB4MDEwMFUNCjEwMzogICAgICAgICAgICAgICAgIAkjZGVmaW5lIGV2ZW50VU5CTE9DS0VEX0RVRV9UT19CSVRfU0VUCTB4MDIwMFUNCjEwNDogICAgICAgICAgICAgICAgIAkjZGVmaW5lIGV2ZW50V0FJVF9GT1JfQUxMX0JJVFMJCQkweDA0MDBVDQoxMDU6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBldmVudEVWRU5UX0JJVFNfQ09OVFJPTF9CWVRFUwkweGZmMDBVDQoxMDY6ICAgICAgICAgICAgICAgICAjZWxzZQ0KMTA3OiAgICAgICAgICAgICAgICAgCSNkZWZpbmUgZXZlbnRDTEVBUl9FVkVOVFNfT05fRVhJVF9CSVQJMHgwMTAwMDAwMFVMDQoxMDg6ICAgICAgICAgICAgICAgICAJI2RlZmluZSBldmVudFVOQkxPQ0tFRF9EVUVfVE9fQklUX1NFVAkweDAyMDAwMDAwVUwNCjEwOTogICAgICAgICAgICAgICAgIAkjZGVmaW5lIGV2ZW50V0FJVF9GT1JfQUxMX0JJVFMJCQkweDA0MDAwMDAwVUwNCjExMDogICAgICAgICAgICAgICAgIAkjZGVmaW5lIGV2ZW50RVZFTlRfQklUU19DT05UUk9MX0JZVEVTCTB4ZmYwMDAwMDBVTA0KMTExOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxMTI6ICAgICAgICAgICAgICAgICANCjExMzogICAgICAgICAgICAgICAgIHR5cGVkZWYgc3RydWN0IHhFdmVudEdyb3VwRGVmaW5pdGlvbg0KMTE0OiAgICAgICAgICAgICAgICAgew0KMTE1OiAgICAgICAgICAgICAgICAgCUV2ZW50Qml0c190IHV4RXZlbnRCaXRzOw0KMTE2OiAgICAgICAgICAgICAgICAgCUxpc3RfdCB4VGFza3NXYWl0aW5nRm9yQml0czsJCS8qPCBMaXN0IG9mIHRhc2tzIHdhaXRpbmcgZm9yIGEgYml0IHRvIGJlIHNldC4gKi8NCjExNzogICAgICAgICAgICAgICAgIA0KMTE4OiAgICAgICAgICAgICAgICAgCSNpZiggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKQ0KMTE5OiAgICAgICAgICAgICAgICAgCQlVQmFzZVR5cGVfdCB1eEV2ZW50R3JvdXBOdW1iZXI7DQoxMjA6ICAgICAgICAgICAgICAgICAJI2VuZGlmDQoxMjE6ICAgICAgICAgICAgICAgICANCjEyMjogICAgICAgICAgICAgICAgIH0gRXZlbnRHcm91cF90Ow0KMTIzOiAgICAgICAgICAgICAgICAgDQoxMjQ6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEyNTogICAgICAgICAgICAgICAgIA0KMTI2OiAgICAgICAgICAgICAgICAgLyoNCjEyNzogICAgICAgICAgICAgICAgICAqIFRlc3QgdGhlIGJpdHMgc2V0IGluIHV4Q3VycmVudEV2ZW50Qml0cyB0byBzZWUgaWYgdGhlIHdhaXQgY29uZGl0aW9uIGlzIG1ldC4NCjEyODogICAgICAgICAgICAgICAgICAqIFRoZSB3YWl0IGNvbmRpdGlvbiBpcyBkZWZpbmVkIGJ5IHhXYWl0Rm9yQWxsQml0cy4gIElmIHhXYWl0Rm9yQWxsQml0cyBpcw0KMTI5OiAgICAgICAgICAgICAgICAgICogcGRUUlVFIHRoZW4gdGhlIHdhaXQgY29uZGl0aW9uIGlzIG1ldCBpZiBhbGwgdGhlIGJpdHMgc2V0IGluIHV4Qml0c1RvV2FpdEZvcg0KMTMwOiAgICAgICAgICAgICAgICAgICogYXJlIGFsc28gc2V0IGluIHV4Q3VycmVudEV2ZW50Qml0cy4gIElmIHhXYWl0Rm9yQWxsQml0cyBpcyBwZEZBTFNFIHRoZW4gdGhlDQoxMzE6ICAgICAgICAgICAgICAgICAgKiB3YWl0IGNvbmRpdGlvbiBpcyBtZXQgaWYgYW55IG9mIHRoZSBiaXRzIHNldCBpbiB1eEJpdHNUb1dhaXQgZm9yIGFyZSBhbHNvIHNldA0KMTMyOiAgICAgICAgICAgICAgICAgICogaW4gdXhDdXJyZW50RXZlbnRCaXRzLg0KMTMzOiAgICAgICAgICAgICAgICAgICovDQoxMzQ6ICAgICAgICAgICAgICAgICBzdGF0aWMgQmFzZVR5cGVfdCBwcnZUZXN0V2FpdENvbmRpdGlvbiggY29uc3QgRXZlbnRCaXRzX3QgdXhDdXJyZW50RXZlbnRCaXRzLCBjb25zdCBFdmVudEJpdHNfdCB1eEJpdHNUb1dhaXRGb3IsIGNvbnN0IEJhc2VUeXBlX3QgeFdhaXRGb3JBbGxCaXRzICk7DQoxMzU6ICAgICAgICAgICAgICAgICANCjEzNjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTM3OiAgICAgICAgICAgICAgICAgDQoxMzg6ICAgICAgICAgICAgICAgICBFdmVudEdyb3VwSGFuZGxlX3QgeEV2ZW50R3JvdXBDcmVhdGUoIHZvaWQgKQ0KMTM5OiAgICAgICAgICAgICAgICAgew0KQkZEMDkzMjAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA5MzIyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA5MzI0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA5MzI2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoxNDA6ICAgICAgICAgICAgICAgICBFdmVudEdyb3VwX3QgKnB4RXZlbnRCaXRzOw0KMTQxOiAgICAgICAgICAgICAgICAgDQoxNDI6ICAgICAgICAgICAgICAgICAJcHhFdmVudEJpdHMgPSAoIEV2ZW50R3JvdXBfdCAqICkgcHZQb3J0TWFsbG9jKCBzaXplb2YoIEV2ZW50R3JvdXBfdCApICk7DQpCRkQwOTMyOCAgICAgIEVFMTggICBMSSBBMCwgMjQNCkJGRDA5MzJBICAxMTE2NzdFOCAgIEpBTFMgcHZQb3J0TWFsbG9jDQpCRkQwOTMyQyAgMEMwMDExMTYgICBBRERJIFQwLCBTNiwgMzA3Mg0KQkZEMDkzMkUgICAgICAwQzAwICAgTk9QDQpCRkQwOTMzMCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxNDM6ICAgICAgICAgICAgICAgICAJaWYoIHB4RXZlbnRCaXRzICE9IE5VTEwgKQ0KQkZEMDkzMzQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDkzMzggIDAwMEE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDkzNTANCjE0NDogICAgICAgICAgICAgICAgIAl7DQoxNDU6ICAgICAgICAgICAgICAgICAJCXB4RXZlbnRCaXRzLT51eEV2ZW50Qml0cyA9IDA7DQpCRkQwOTMzQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOTM0MCAgICAgIEU4MjAgICBTVyBTMCwgMChWMCkNCjE0NjogICAgICAgICAgICAgICAgIAkJdkxpc3RJbml0aWFsaXNlKCAmKCBweEV2ZW50Qml0cy0+eFRhc2tzV2FpdGluZ0ZvckJpdHMgKSApOw0KQkZEMDkzNDIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDkzNDYgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwOTM0OCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDkzNEEgIDQ1NzA3N0U4ICAgSkFMUyB2TGlzdEluaXRpYWxpc2UNCkJGRDA5MzRDICAgICAgNDU3MCAgIFNXTTE2IDB4MywgMChTUCkNCkJGRDA5MzRFICAgICAgMEMwMCAgIE5PUA0KMTQ3OiAgICAgICAgICAgICAgICAgCQl0cmFjZUVWRU5UX0dST1VQX0NSRUFURSggcHhFdmVudEJpdHMgKTsNCjE0ODogICAgICAgICAgICAgICAgIAl9DQoxNDk6ICAgICAgICAgICAgICAgICAJZWxzZQ0KMTUwOiAgICAgICAgICAgICAgICAgCXsNCjE1MTogICAgICAgICAgICAgICAgIAkJdHJhY2VFVkVOVF9HUk9VUF9DUkVBVEVfRkFJTEVEKCk7DQoxNTI6ICAgICAgICAgICAgICAgICAJfQ0KMTUzOiAgICAgICAgICAgICAgICAgDQoxNTQ6ICAgICAgICAgICAgICAgICAJcmV0dXJuICggRXZlbnRHcm91cEhhbmRsZV90ICkgcHhFdmVudEJpdHM7DQpCRkQwOTM1MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQoxNTU6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTM1NCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDkzNTYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDkzNTggICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDkzNUEgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDkzNUMgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDkzNUUgICAgICAwQzAwICAgTk9QDQoxNTY6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE1NzogICAgICAgICAgICAgICAgIA0KMTU4OiAgICAgICAgICAgICAgICAgRXZlbnRCaXRzX3QgeEV2ZW50R3JvdXBTeW5jKCBFdmVudEdyb3VwSGFuZGxlX3QgeEV2ZW50R3JvdXAsIGNvbnN0IEV2ZW50Qml0c190IHV4Qml0c1RvU2V0LCBjb25zdCBFdmVudEJpdHNfdCB1eEJpdHNUb1dhaXRGb3IsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjE1OTogICAgICAgICAgICAgICAgIHsNCkJGRDAxQjBDICAgICAgNEZFOSAgIEFERElVIFNQLCBTUCwgLTQ4DQpCRkQwMUIwRSAgICAgIENCRUIgICBTVyBSQSwgNDQoU1ApDQpCRkQwMUIxMCAgICAgIENCQ0EgICBTVyBTOCwgNDAoU1ApDQpCRkQwMUIxMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDFCMTQgIDAwMzBGODlFICAgU1cgQTAsIDQ4KFM4KQ0KQkZEMDFCMTggIDAwMzRGOEJFICAgU1cgQTEsIDUyKFM4KQ0KQkZEMDFCMUMgIDAwMzhGOERFICAgU1cgQTIsIDU2KFM4KQ0KQkZEMDFCMjAgIDAwM0NGOEZFICAgU1cgQTMsIDYwKFM4KQ0KMTYwOiAgICAgICAgICAgICAgICAgRXZlbnRCaXRzX3QgdXhPcmlnaW5hbEJpdFZhbHVlLCB1eFJldHVybjsNCjE2MTogICAgICAgICAgICAgICAgIEV2ZW50R3JvdXBfdCAqcHhFdmVudEJpdHMgPSAoIEV2ZW50R3JvdXBfdCAqICkgeEV2ZW50R3JvdXA7DQpCRkQwMUIyNCAgMDAzMEZDNUUgICBMVyBWMCwgNDgoUzgpDQpCRkQwMUIyOCAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoxNjI6ICAgICAgICAgICAgICAgICBCYXNlVHlwZV90IHhBbHJlYWR5WWllbGRlZDsNCjE2MzogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFRpbWVvdXRPY2N1cnJlZCA9IHBkRkFMU0U7DQpCRkQwMUIyQyAgMDAxOEY4MUUgICBTVyBaRVJPLCAyNChTOCkNCjE2NDogICAgICAgICAgICAgICAgIA0KMTY1OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggKCB1eEJpdHNUb1dhaXRGb3IgJiBldmVudEVWRU5UX0JJVFNfQ09OVFJPTF9CWVRFUyApID09IDAgKTsNCkJGRDAxQjMwICAwMDM4RkM3RSAgIExXIFYxLCA1NihTOCkNCkJGRDAxQjM0ICBGRjAwNDFBMiAgIExVSSBWMCwgMHhGRjAwDQpCRkQwMUIzNiAgNDQ5M0ZGMDAgICBMVyBUOCwgMTc1NTUoWkVSTykNCkJGRDAxQjM4ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDFCM0EgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDFCNTANCkJGRDAxQjNFICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMUI0MCAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMUI0MiAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OA0KQkZEMDFCNDQgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpDQpCRkQwMUI0NiAgMDBBNTMwQTAgICBBRERJVSBBMSwgWkVSTywgMTY1DQpCRkQwMUI0QSAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAxQjRDICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMUI0RSAgICAgIDBDMDAgICBOT1ANCjE2NjogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoIHV4Qml0c1RvV2FpdEZvciAhPSAwICk7DQpCRkQwMUI1MCAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpDQpCRkQwMUI1NCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMUI2QQ0KQkZEMDFCNTggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAxQjVBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAxQjVDICA5QzBDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1NTg4DQpCRkQwMUI1RSAgMzBBMDlDMEMgICBMV0MxIEYwLCAxMjQ0OChUNCkNCkJGRDAxQjYwICAwMEE2MzBBMCAgIEFERElVIEExLCBaRVJPLCAxNjYNCkJGRDAxQjY0ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDFCNjYgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAxQjY4ICAgICAgMEMwMCAgIE5PUA0KMTY3OiAgICAgICAgICAgICAgICAgCSNpZiAoICggSU5DTFVERV94VGFza0dldFNjaGVkdWxlclN0YXRlID09IDEgKSB8fCAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApICkNCjE2ODogICAgICAgICAgICAgICAgIAl7DQoxNjk6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggISggKCB4VGFza0dldFNjaGVkdWxlclN0YXRlKCkgPT0gdGFza1NDSEVEVUxFUl9TVVNQRU5ERUQgKSAmJiAoIHhUaWNrc1RvV2FpdCAhPSAwICkgKSApOw0KQkZEMDFCNkEgIDRBOEU3N0U4ICAgSkFMUyB4VGFza0dldFNjaGVkdWxlclN0YXRlDQpCRkQwMUI2QyAgICAgIDRBOEUgICBMVyBTNCwgNTYoU1ApDQpCRkQwMUI2RSAgICAgIDBDMDAgICBOT1ANCkJGRDAxQjcwICAwMDA0NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxQjdDDQpCRkQwMUI3NCAgMDAzQ0ZDNUUgICBMVyBWMCwgNjAoUzgpDQpCRkQwMUI3OCAgMDAwMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMUI4Mg0KQkZEMDFCN0MgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAxQjdFICAgICAgQ0MwMiAgIEIgMHhCRkQwMUI4NA0KQkZEMDFCODAgICAgICAwQzAwICAgTk9QDQpCRkQwMUI4MiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQpCRkQwMUI4NCAgMDAwOTQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMUI5QQ0KQkZEMDFCODggIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAxQjhBICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAxQjhDICA5QzBDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1NTg4DQpCRkQwMUI4RSAgMzBBMDlDMEMgICBMV0MxIEYwLCAxMjQ0OChUNCkNCkJGRDAxQjkwICAwMEE5MzBBMCAgIEFERElVIEExLCBaRVJPLCAxNjkNCkJGRDAxQjk0ICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDFCOTYgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAxQjk4ICAgICAgMEMwMCAgIE5PUA0KMTcwOiAgICAgICAgICAgICAgICAgCX0NCjE3MTogICAgICAgICAgICAgICAgIAkjZW5kaWYNCjE3MjogICAgICAgICAgICAgICAgIA0KMTczOiAgICAgICAgICAgICAgICAgCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDFCOUEgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwNCkJGRDAxQjlDICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYNCkJGRDAxQjlFICAgICAgMEMwMCAgIE5PUA0KMTc0OiAgICAgICAgICAgICAgICAgCXsNCjE3NTogICAgICAgICAgICAgICAgIAkJdXhPcmlnaW5hbEJpdFZhbHVlID0gcHhFdmVudEJpdHMtPnV4RXZlbnRCaXRzOw0KQkZEMDFCQTAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFCQTQgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMUJBNiAgMDAxQ0Y4NUUgICBTVyBWMCwgMjgoUzgpDQoxNzY6ICAgICAgICAgICAgICAgICANCjE3NzogICAgICAgICAgICAgICAgIAkJKCB2b2lkICkgeEV2ZW50R3JvdXBTZXRCaXRzKCB4RXZlbnRHcm91cCwgdXhCaXRzVG9TZXQgKTsNCkJGRDAxQkFBICAwMDMwRkM5RSAgIExXIEEwLCA0OChTOCkNCkJGRDAxQkFFICAwMDM0RkNCRSAgIExXIEExLCA1MihTOCkNCkJGRDAxQkIyICAxMkI0NzdFOCAgIEpBTFMgeEV2ZW50R3JvdXBTZXRCaXRzDQpCRkQwMUJCNCAgMEMwMDEyQjQgICBBRERJIFM1LCBTNCwgMzA3Mg0KQkZEMDFCQjYgICAgICAwQzAwICAgTk9QDQoxNzg6ICAgICAgICAgICAgICAgICANCjE3OTogICAgICAgICAgICAgICAgIAkJaWYoICggKCB1eE9yaWdpbmFsQml0VmFsdWUgfCB1eEJpdHNUb1NldCApICYgdXhCaXRzVG9XYWl0Rm9yICkgPT0gdXhCaXRzVG9XYWl0Rm9yICkNCkJGRDAxQkI4ICAwMDFDRkM3RSAgIExXIFYxLCAyOChTOCkNCkJGRDAxQkJDICAwMDM0RkM1RSAgIExXIFYwLCA1MihTOCkNCkJGRDAxQkMwICAgICAgNDREQSAgIE9SMTYgVjEsIFYwDQpCRkQwMUJDMiAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpDQpCRkQwMUJDNiAgICAgIDQ0OUEgICBBTkQxNiBWMSwgVjANCkJGRDAxQkM4ICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkNCkJGRDAxQkNDICAwMDE2QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDFCRkMNCkJGRDAxQkNFICAwQzAwMDAxNiAgIFNMTCBaRVJPLCBTNiwgMQ0KQkZEMDFCRDAgICAgICAwQzAwICAgTk9QDQoxODA6ICAgICAgICAgICAgICAgICAJCXsNCjE4MTogICAgICAgICAgICAgICAgIAkJCS8qIEFsbCB0aGUgcmVuZGV6dm91cyBiaXRzIGFyZSBub3cgc2V0IC0gbm8gbmVlZCB0byBibG9jay4gKi8NCjE4MjogICAgICAgICAgICAgICAgIAkJCXV4UmV0dXJuID0gKCB1eE9yaWdpbmFsQml0VmFsdWUgfCB1eEJpdHNUb1NldCApOw0KQkZEMDFCRDIgIDAwMUNGQzdFICAgTFcgVjEsIDI4KFM4KQ0KQkZEMDFCRDYgIDAwMzRGQzVFICAgTFcgVjAsIDUyKFM4KQ0KQkZEMDFCREEgICAgICA0NEQzICAgT1IxNiBWMCwgVjENCkJGRDAxQkRDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjE4MzogICAgICAgICAgICAgICAgIA0KMTg0OiAgICAgICAgICAgICAgICAgCQkJLyogUmVuZGV6dm91cyBhbHdheXMgY2xlYXIgdGhlIGJpdHMuICBUaGV5IHdpbGwgaGF2ZSBiZWVuIGNsZWFyZWQNCjE4NTogICAgICAgICAgICAgICAgIAkJCWFscmVhZHkgdW5sZXNzIHRoaXMgaXMgdGhlIG9ubHkgdGFzayBpbiB0aGUgcmVuZGV6dm91cy4gKi8NCjE4NjogICAgICAgICAgICAgICAgIAkJCXB4RXZlbnRCaXRzLT51eEV2ZW50Qml0cyAmPSB+dXhCaXRzVG9XYWl0Rm9yOw0KQkZEMDFCRTAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFCRTQgICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwMUJFNiAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpDQpCRkQwMUJFQSAgICAgIDQ0MTIgICBOT1QxNiBWMCwgVjANCkJGRDAxQkVDICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMA0KQkZEMDFCRUUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDFCRjIgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoxODc6ICAgICAgICAgICAgICAgICANCjE4ODogICAgICAgICAgICAgICAgIAkJCXhUaWNrc1RvV2FpdCA9IDA7DQpCRkQwMUJGNCAgMDAzQ0Y4MUUgICBTVyBaRVJPLCA2MChTOCkNCkJGRDAxQkY2ICBDQzFEMDAzQyAgIFNISUxPIG51bGwsIDYwDQpCRkQwMUJGOCAgICAgIENDMUQgICBCIDB4QkZEMDFDMzQNCkJGRDAxQkZBICAgICAgMEMwMCAgIE5PUA0KMTg5OiAgICAgICAgICAgICAgICAgCQl9DQoxOTA6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjE5MTogICAgICAgICAgICAgICAgIAkJew0KMTkyOiAgICAgICAgICAgICAgICAgCQkJaWYoIHhUaWNrc1RvV2FpdCAhPSAoIFRpY2tUeXBlX3QgKSAwICkNCkJGRDAxQkZDICAwMDNDRkM1RSAgIExXIFYwLCA2MChTOCkNCkJGRDAxQzAwICAwMDEzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxQzJBDQoxOTM6ICAgICAgICAgICAgICAgICAJCQl7DQoxOTQ6ICAgICAgICAgICAgICAgICAJCQkJdHJhY2VFVkVOVF9HUk9VUF9TWU5DX0JMT0NLKCB4RXZlbnRHcm91cCwgdXhCaXRzVG9TZXQsIHV4Qml0c1RvV2FpdEZvciApOw0KMTk1OiAgICAgICAgICAgICAgICAgDQoxOTY6ICAgICAgICAgICAgICAgICAJCQkJLyogU3RvcmUgdGhlIGJpdHMgdGhhdCB0aGUgY2FsbGluZyB0YXNrIGlzIHdhaXRpbmcgZm9yIGluIHRoZQ0KMTk3OiAgICAgICAgICAgICAgICAgCQkJCXRhc2sncyBldmVudCBsaXN0IGl0ZW0gc28gdGhlIGtlcm5lbCBrbm93cyB3aGVuIGEgbWF0Y2ggaXMNCjE5ODogICAgICAgICAgICAgICAgIAkJCQlmb3VuZC4gIFRoZW4gZW50ZXIgdGhlIGJsb2NrZWQgc3RhdGUuICovDQoxOTk6ICAgICAgICAgICAgICAgICAJCQkJdlRhc2tQbGFjZU9uVW5vcmRlcmVkRXZlbnRMaXN0KCAmKCBweEV2ZW50Qml0cy0+eFRhc2tzV2FpdGluZ0ZvckJpdHMgKSwgKCB1eEJpdHNUb1dhaXRGb3IgfCBldmVudENMRUFSX0VWRU5UU19PTl9FWElUX0JJVCB8IGV2ZW50V0FJVF9GT1JfQUxMX0JJVFMgKSwgeFRpY2tzVG9XYWl0ICk7DQpCRkQwMUMwNCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUMwOCAgICAgIDZEQTIgICBBRERJVSBWMSwgVjAsIDQNCkJGRDAxQzBBICAwMDM4RkM5RSAgIExXIEEwLCA1NihTOCkNCkJGRDAxQzBFICAwNTAwNDFBMiAgIExVSSBWMCwgMHg1MDANCkJGRDAxQzEwICAgICAgMDUwMCAgIEFERFUgVjAsIFMwLCBTMA0KQkZEMDFDMTIgICAgICA0NEQ0ICAgT1IxNiBWMCwgQTANCkJGRDAxQzE0ICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwMUMxNiAgICAgIDBDQTIgICBNT1ZFIEExLCBWMA0KQkZEMDFDMTggIDAwM0NGQ0RFICAgTFcgQTIsIDYwKFM4KQ0KQkZEMDFDMUMgIDI0ODI3N0U4ICAgSkFMUyB2VGFza1BsYWNlT25Vbm9yZGVyZWRFdmVudExpc3QNCkJGRDAxQzFFICAgICAgMjQ4MiAgIFNMTCBTMSwgUzAsIDENCkJGRDAxQzIwICAgICAgMEMwMCAgIE5PUA0KMjAwOiAgICAgICAgICAgICAgICAgDQoyMDE6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhpcyBhc3NpZ25tZW50IGlzIG9ic29sZXRlIGFzIHV4UmV0dXJuIHdpbGwgZ2V0IHNldCBhZnRlcg0KMjAyOiAgICAgICAgICAgICAgICAgCQkJCXRoZSB0YXNrIHVuYmxvY2tzLCBidXQgc29tZSBjb21waWxlcnMgbWlzdGFrZW5seSBnZW5lcmF0ZSBhDQoyMDM6ICAgICAgICAgICAgICAgICAJCQkJd2FybmluZyBhYm91dCB1eFJldHVybiBiZWluZyByZXR1cm5lZCB3aXRob3V0IGJlaW5nIHNldCBpZiB0aGUNCjIwNDogICAgICAgICAgICAgICAgIAkJCQlhc3NpZ25tZW50IGlzIG9taXR0ZWQuICovDQoyMDU6ICAgICAgICAgICAgICAgICAJCQkJdXhSZXR1cm4gPSAwOw0KQkZEMDFDMjIgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQpCRkQwMUMyNiAgICAgIENDMDYgICBCIDB4QkZEMDFDMzQNCkJGRDAxQzI4ICAgICAgMEMwMCAgIE5PUA0KMjA2OiAgICAgICAgICAgICAgICAgCQkJfQ0KMjA3OiAgICAgICAgICAgICAgICAgCQkJZWxzZQ0KMjA4OiAgICAgICAgICAgICAgICAgCQkJew0KMjA5OiAgICAgICAgICAgICAgICAgCQkJCS8qIFRoZSByZW5kZXp2b3VzIGJpdHMgd2VyZSBub3Qgc2V0LCBidXQgbm8gYmxvY2sgdGltZSB3YXMNCjIxMDogICAgICAgICAgICAgICAgIAkJCQlzcGVjaWZpZWQgLSBqdXN0IHJldHVybiB0aGUgY3VycmVudCBldmVudCBiaXQgdmFsdWUuICovDQoyMTE6ICAgICAgICAgICAgICAgICAJCQkJdXhSZXR1cm4gPSBweEV2ZW50Qml0cy0+dXhFdmVudEJpdHM7DQpCRkQwMUMyQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUMyRSAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAxQzMwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjIxMjogICAgICAgICAgICAgICAgIAkJCX0NCjIxMzogICAgICAgICAgICAgICAgIAkJfQ0KMjE0OiAgICAgICAgICAgICAgICAgCX0NCjIxNTogICAgICAgICAgICAgICAgIAl4QWxyZWFkeVlpZWxkZWQgPSB4VGFza1Jlc3VtZUFsbCgpOw0KQkZEMDFDMzQgIDE1OEU3N0U4ICAgSkFMUyB4VGFza1Jlc3VtZUFsbA0KQkZEMDFDMzYgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQ0KQkZEMDFDMzggICAgICAwQzAwICAgTk9QDQpCRkQwMUMzQSAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQoyMTY6ICAgICAgICAgICAgICAgICANCjIxNzogICAgICAgICAgICAgICAgIAlpZiggeFRpY2tzVG9XYWl0ICE9ICggVGlja1R5cGVfdCApIDAgKQ0KQkZEMDFDM0UgIDAwM0NGQzVFICAgTFcgVjAsIDYwKFM4KQ0KQkZEMDFDNDIgIDAwNDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDFDRDYNCjIxODogICAgICAgICAgICAgICAgIAl7DQoyMTk6ICAgICAgICAgICAgICAgICAJCWlmKCB4QWxyZWFkeVlpZWxkZWQgPT0gcGRGQUxTRSApDQpCRkQwMUM0NiAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMUM0QSAgMDAxMDQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMUM2RQ0KMjIwOiAgICAgICAgICAgICAgICAgCQl7DQoyMjE6ICAgICAgICAgICAgICAgICAJCQlwb3J0WUlFTERfV0lUSElOX0FQSSgpOw0KQkZEMDFDNEUgIDRERTY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBDYXVzZQ0KQkZEMDFDNTAgICAgICA0REU2ICAgQURESVUgVDcsIFQ3LCAzDQpCRkQwMUM1MiAgICAgIDBDMDAgICBOT1ANCkJGRDAxQzU0ICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkNCkJGRDAxQzU4ICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDAxQzVDICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDFDNjAgIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQ0KQkZEMDFDNjQgIDAwMjRGQzlFICAgTFcgQTAsIDM2KFM4KQ0KQkZEMDFDNjggIDRERjY3N0U4ICAgSkFMUyB2UG9ydFNldENQMENhdXNlDQpCRkQwMUM2QSAgICAgIDRERjYgICBBRERJVSBUNywgVDcsIC01DQpCRkQwMUM2QyAgICAgIDBDMDAgICBOT1ANCjIyMjogICAgICAgICAgICAgICAgIAkJfQ0KMjIzOiAgICAgICAgICAgICAgICAgCQllbHNlDQoyMjQ6ICAgICAgICAgICAgICAgICAJCXsNCjIyNTogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjIyNjogICAgICAgICAgICAgICAgIAkJfQ0KMjI3OiAgICAgICAgICAgICAgICAgDQoyMjg6ICAgICAgICAgICAgICAgICAJCS8qIFRoZSB0YXNrIGJsb2NrZWQgdG8gd2FpdCBmb3IgaXRzIHJlcXVpcmVkIGJpdHMgdG8gYmUgc2V0IC0gYXQgdGhpcw0KMjI5OiAgICAgICAgICAgICAgICAgCQlwb2ludCBlaXRoZXIgdGhlIHJlcXVpcmVkIGJpdHMgd2VyZSBzZXQgb3IgdGhlIGJsb2NrIHRpbWUgZXhwaXJlZC4gIElmDQoyMzA6ICAgICAgICAgICAgICAgICAJCXRoZSByZXF1aXJlZCBiaXRzIHdlcmUgc2V0IHRoZXkgd2lsbCBoYXZlIGJlZW4gc3RvcmVkIGluIHRoZSB0YXNrJ3MNCjIzMTogICAgICAgICAgICAgICAgIAkJZXZlbnQgbGlzdCBpdGVtLCBhbmQgdGhleSBzaG91bGQgbm93IGJlIHJldHJpZXZlZCB0aGVuIGNsZWFyZWQuICovDQoyMzI6ICAgICAgICAgICAgICAgICAJCXV4UmV0dXJuID0gdXhUYXNrUmVzZXRFdmVudEl0ZW1WYWx1ZSgpOw0KQkZEMDFDNkUgIDRDODY3N0U4ICAgSkFMUyB1eFRhc2tSZXNldEV2ZW50SXRlbVZhbHVlDQpCRkQwMUM3MCAgICAgIDRDODYgICBBRERJVSBBMCwgQTAsIDMNCkJGRDAxQzcyICAgICAgMEMwMCAgIE5PUA0KQkZEMDFDNzQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjMzOiAgICAgICAgICAgICAgICAgDQoyMzQ6ICAgICAgICAgICAgICAgICAJCWlmKCAoIHV4UmV0dXJuICYgZXZlbnRVTkJMT0NLRURfRFVFX1RPX0JJVF9TRVQgKSA9PSAoIEV2ZW50Qml0c190ICkgMCApDQpCRkQwMUM3OCAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwMUM3QyAgMDIwMDQxQTIgICBMVUkgVjAsIDB4MjAwDQpCRkQwMUM4MCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDAxQzgyICAwMDIyNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxQ0NBDQoyMzU6ICAgICAgICAgICAgICAgICAJCXsNCjIzNjogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0YXNrIHRpbWVkIG91dCwganVzdCByZXR1cm4gdGhlIGN1cnJlbnQgZXZlbnQgYml0IHZhbHVlLiAqLw0KMjM3OiAgICAgICAgICAgICAgICAgCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMUM4NiAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDFDODggIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwMUM4QSAgICAgIDBDMDAgICBOT1ANCjIzODogICAgICAgICAgICAgICAgIAkJCXsNCjIzOTogICAgICAgICAgICAgICAgIAkJCQl1eFJldHVybiA9IHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0czsNCkJGRDAxQzhDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxQzkwICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDFDOTIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjQwOiAgICAgICAgICAgICAgICAgDQoyNDE6ICAgICAgICAgICAgICAgICAJCQkJLyogQWx0aG91Z2ggdGhlIHRhc2sgZ290IGhlcmUgYmVjYXVzZSBpdCB0aW1lZCBvdXQgYmVmb3JlIHRoZQ0KMjQyOiAgICAgICAgICAgICAgICAgCQkJCWJpdHMgaXQgd2FzIHdhaXRpbmcgZm9yIHdlcmUgc2V0LCBpdCBpcyBwb3NzaWJsZSB0aGF0IHNpbmNlIGl0DQoyNDM6ICAgICAgICAgICAgICAgICAJCQkJdW5ibG9ja2VkIGFub3RoZXIgdGFzayBoYXMgc2V0IHRoZSBiaXRzLiAgSWYgdGhpcyBpcyB0aGUgY2FzZQ0KMjQ0OiAgICAgICAgICAgICAgICAgCQkJCXRoZW4gaXQgbmVlZHMgdG8gY2xlYXIgdGhlIGJpdHMgYmVmb3JlIGV4aXRpbmcuICovDQoyNDU6ICAgICAgICAgICAgICAgICAJCQkJaWYoICggdXhSZXR1cm4gJiB1eEJpdHNUb1dhaXRGb3IgKSA9PSB1eEJpdHNUb1dhaXRGb3IgKQ0KQkZEMDFDOTYgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDFDOUEgIDAwMzhGQzVFICAgTFcgVjAsIDU2KFM4KQ0KQkZEMDFDOUUgICAgICA0NDlBICAgQU5EMTYgVjEsIFYwDQpCRkQwMUNBMCAgMDAzOEZDNUUgICBMVyBWMCwgNTYoUzgpDQpCRkQwMUNBNCAgMDAwQkI0NDMgICBCTkUgVjEsIFYwLCAweEJGRDAxQ0JFDQpCRkQwMUNBNiAgMEMwMDAwMEIgICBTTEwgWkVSTywgVDMsIDENCkJGRDAxQ0E4ICAgICAgMEMwMCAgIE5PUA0KMjQ2OiAgICAgICAgICAgICAgICAgCQkJCXsNCjI0NzogICAgICAgICAgICAgICAgIAkJCQkJcHhFdmVudEJpdHMtPnV4RXZlbnRCaXRzICY9IH51eEJpdHNUb1dhaXRGb3I7DQpCRkQwMUNBQSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUNBRSAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDAxQ0IwICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkNCkJGRDAxQ0I0ICAgICAgNDQxMiAgIE5PVDE2IFYwLCBWMA0KQkZEMDFDQjYgICAgICA0NDlBICAgQU5EMTYgVjEsIFYwDQpCRkQwMUNCOCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwMUNCQyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjI0ODogICAgICAgICAgICAgICAgIAkJCQl9DQoyNDk6ICAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KMjUwOiAgICAgICAgICAgICAgICAgCQkJCXsNCjI1MTogICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMjUyOiAgICAgICAgICAgICAgICAgCQkJCX0NCjI1MzogICAgICAgICAgICAgICAgIAkJCX0NCjI1NDogICAgICAgICAgICAgICAgIAkJCXRhc2tFWElUX0NSSVRJQ0FMKCk7DQpCRkQwMUNCRSAgNDBBQTc3RTggICBKQUxTIHZUYXNrRXhpdENyaXRpY2FsDQpCRkQwMUNDMCAgMEMwMDQwQUEgICBCTkVaQyBUMiwgMHhCRkQwMzRDNA0KQkZEMDFDQzIgICAgICAwQzAwICAgTk9QDQoyNTU6ICAgICAgICAgICAgICAgICANCjI1NjogICAgICAgICAgICAgICAgIAkJCXhUaW1lb3V0T2NjdXJyZWQgPSBwZFRSVUU7DQpCRkQwMUNDNCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDFDQzYgIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KMjU3OiAgICAgICAgICAgICAgICAgCQl9DQoyNTg6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjI1OTogICAgICAgICAgICAgICAgIAkJew0KMjYwOiAgICAgICAgICAgICAgICAgCQkJLyogVGhlIHRhc2sgdW5ibG9ja2VkIGJlY2F1c2UgdGhlIGJpdHMgd2VyZSBzZXQuICovDQoyNjE6ICAgICAgICAgICAgICAgICAJCX0NCjI2MjogICAgICAgICAgICAgICAgIA0KMjYzOiAgICAgICAgICAgICAgICAgCQkvKiBDb250cm9sIGJpdHMgbWlnaHQgYmUgc2V0IGFzIHRoZSB0YXNrIGhhZCBibG9ja2VkIHNob3VsZCBub3QgYmUNCjI2NDogICAgICAgICAgICAgICAgIAkJcmV0dXJuZWQuICovDQoyNjU6ICAgICAgICAgICAgICAgICAJCXV4UmV0dXJuICY9IH5ldmVudEVWRU5UX0JJVFNfQ09OVFJPTF9CWVRFUzsNCkJGRDAxQ0NBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDAxQ0NFICBCODJDMDA0MiAgIEVYVCBWMCwgVjAsIDAsIDI0DQpCRkQwMUNEMCAgRjg1RUI4MkMgICBTREMxIEYxLCAtMTk1NChUNCkNCkJGRDAxQ0QyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjI2NjogICAgICAgICAgICAgICAgIAl9DQoyNjc6ICAgICAgICAgICAgICAgICANCjI2ODogICAgICAgICAgICAgICAgIAl0cmFjZUVWRU5UX0dST1VQX1NZTkNfRU5EKCB4RXZlbnRHcm91cCwgdXhCaXRzVG9TZXQsIHV4Qml0c1RvV2FpdEZvciwgeFRpbWVvdXRPY2N1cnJlZCApOw0KMjY5OiAgICAgICAgICAgICAgICAgDQoyNzA6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDFDRDYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KMjcxOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDFDREEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAxQ0RDICAgICAgNEJFQiAgIExXIFJBLCA0NChTUCkNCkJGRDAxQ0RFICAgICAgNEJDQSAgIExXIFM4LCA0MChTUCkNCkJGRDAxQ0UwICAgICAgNEMxOSAgIEFERElVIFNQLCBTUCwgNDgNCkJGRDAxQ0UyICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAxQ0U0ICAgICAgMEMwMCAgIE5PUA0KMjcyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyNzM6ICAgICAgICAgICAgICAgICANCjI3NDogICAgICAgICAgICAgICAgIEV2ZW50Qml0c190IHhFdmVudEdyb3VwV2FpdEJpdHMoIEV2ZW50R3JvdXBIYW5kbGVfdCB4RXZlbnRHcm91cCwgY29uc3QgRXZlbnRCaXRzX3QgdXhCaXRzVG9XYWl0Rm9yLCBjb25zdCBCYXNlVHlwZV90IHhDbGVhck9uRXhpdCwgY29uc3QgQmFzZVR5cGVfdCB4V2FpdEZvckFsbEJpdHMsIFRpY2tUeXBlX3QgeFRpY2tzVG9XYWl0ICkNCjI3NTogICAgICAgICAgICAgICAgIHsNCkJGRDAxMzEwICAgICAgNEZFNSAgIEFERElVIFNQLCBTUCwgLTU2DQpCRkQwMTMxMiAgICAgIENCRUQgICBTVyBSQSwgNTIoU1ApDQpCRkQwMTMxNCAgICAgIENCQ0MgICBTVyBTOCwgNDgoU1ApDQpCRkQwMTMxNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDEzMTggIDAwMzhGODlFICAgU1cgQTAsIDU2KFM4KQ0KQkZEMDEzMUMgIDAwM0NGOEJFICAgU1cgQTEsIDYwKFM4KQ0KQkZEMDEzMjAgIDAwNDBGOERFICAgU1cgQTIsIDY0KFM4KQ0KQkZEMDEzMjQgIDAwNDRGOEZFICAgU1cgQTMsIDY4KFM4KQ0KMjc2OiAgICAgICAgICAgICAgICAgRXZlbnRHcm91cF90ICpweEV2ZW50Qml0cyA9ICggRXZlbnRHcm91cF90ICogKSB4RXZlbnRHcm91cDsNCkJGRDAxMzI4ICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkNCkJGRDAxMzJDICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjI3NzogICAgICAgICAgICAgICAgIEV2ZW50Qml0c190IHV4UmV0dXJuLCB1eENvbnRyb2xCaXRzID0gMDsNCkJGRDAxMzMwICAwMDE0RjgxRSAgIFNXIFpFUk8sIDIwKFM4KQ0KMjc4OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4V2FpdENvbmRpdGlvbk1ldCwgeEFscmVhZHlZaWVsZGVkOw0KMjc5OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4VGltZW91dE9jY3VycmVkID0gcGRGQUxTRTsNCkJGRDAxMzM0ICAwMDFDRjgxRSAgIFNXIFpFUk8sIDI4KFM4KQ0KMjgwOiAgICAgICAgICAgICAgICAgDQoyODE6ICAgICAgICAgICAgICAgICAJLyogQ2hlY2sgdGhlIHVzZXIgaXMgbm90IGF0dGVtcHRpbmcgdG8gd2FpdCBvbiB0aGUgYml0cyB1c2VkIGJ5IHRoZSBrZXJuZWwNCjI4MjogICAgICAgICAgICAgICAgIAlpdHNlbGYsIGFuZCB0aGF0IGF0IGxlYXN0IG9uZSBiaXQgaXMgYmVpbmcgcmVxdWVzdGVkLiAqLw0KMjgzOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeEV2ZW50R3JvdXAgKTsNCkJGRDAxMzM4ICAwMDM4RkM1RSAgIExXIFYwLCA1NihTOCkNCkJGRDAxMzNDICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMzUyDQpCRkQwMTM0MCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDEzNDIgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDEzNDQgIDlDMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMjU1ODgNCkJGRDAxMzQ2ICAzMEEwOUMwQyAgIExXQzEgRjAsIDEyNDQ4KFQ0KQ0KQkZEMDEzNDggIDAxMUIzMEEwICAgQURESVUgQTEsIFpFUk8sIDI4Mw0KQkZEMDEzNEMgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMTM0RSAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDEzNTAgICAgICAwQzAwICAgTk9QDQoyODQ6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCAoIHV4Qml0c1RvV2FpdEZvciAmIGV2ZW50RVZFTlRfQklUU19DT05UUk9MX0JZVEVTICkgPT0gMCApOw0KQkZEMDEzNTIgIDAwM0NGQzdFICAgTFcgVjEsIDYwKFM4KQ0KQkZEMDEzNTYgIEZGMDA0MUEyICAgTFVJIFYwLCAweEZGMDANCkJGRDAxMzU4ICA0NDkzRkYwMCAgIExXIFQ4LCAxNzU1NShaRVJPKQ0KQkZEMDEzNUEgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwMTM1QyAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTM3Mg0KQkZEMDEzNjAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDAxMzYyICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDAxMzY0ICA5QzBDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1NTg4DQpCRkQwMTM2NiAgMzBBMDlDMEMgICBMV0MxIEYwLCAxMjQ0OChUNCkNCkJGRDAxMzY4ICAwMTFDMzBBMCAgIEFERElVIEExLCBaRVJPLCAyODQNCkJGRDAxMzZDICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDEzNkUgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDAxMzcwICAgICAgMEMwMCAgIE5PUA0KMjg1OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggdXhCaXRzVG9XYWl0Rm9yICE9IDAgKTsNCkJGRDAxMzcyICAwMDNDRkM1RSAgIExXIFYwLCA2MChTOCkNCkJGRDAxMzc2ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxMzhDDQpCRkQwMTM3QSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDEzN0MgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDEzN0UgIDlDMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMjU1ODgNCkJGRDAxMzgwICAzMEEwOUMwQyAgIExXQzEgRjAsIDEyNDQ4KFQ0KQ0KQkZEMDEzODIgIDAxMUQzMEEwICAgQURESVUgQTEsIFpFUk8sIDI4NQ0KQkZEMDEzODYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMTM4OCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDEzOEEgICAgICAwQzAwICAgTk9QDQoyODY6ICAgICAgICAgICAgICAgICAJI2lmICggKCBJTkNMVURFX3hUYXNrR2V0U2NoZWR1bGVyU3RhdGUgPT0gMSApIHx8ICggY29uZmlnVVNFX1RJTUVSUyA9PSAxICkgKQ0KMjg3OiAgICAgICAgICAgICAgICAgCXsNCjI4ODogICAgICAgICAgICAgICAgIAkJY29uZmlnQVNTRVJUKCAhKCAoIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUoKSA9PSB0YXNrU0NIRURVTEVSX1NVU1BFTkRFRCApICYmICggeFRpY2tzVG9XYWl0ICE9IDAgKSApICk7DQpCRkQwMTM4QyAgNEE4RTc3RTggICBKQUxTIHhUYXNrR2V0U2NoZWR1bGVyU3RhdGUNCkJGRDAxMzhFICAgICAgNEE4RSAgIExXIFM0LCA1NihTUCkNCkJGRDAxMzkwICAgICAgMEMwMCAgIE5PUA0KQkZEMDEzOTIgIDAwMDQ0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDEzOUUNCkJGRDAxMzk2ICAwMDQ4RkM1RSAgIExXIFYwLCA3MihTOCkNCkJGRDAxMzlBICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxM0E0DQpCRkQwMTM5RSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDEzQTAgICAgICBDQzAyICAgQiAweEJGRDAxM0E2DQpCRkQwMTNBMiAgICAgIDBDMDAgICBOT1ANCkJGRDAxM0E0ICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8NCkJGRDAxM0E2ICAwMDA5NDBBMiAgIEJORVpDIFYwLCAweEJGRDAxM0JDDQpCRkQwMTNBQSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDEzQUMgIDMwODJCRkQxICAgTERDMSBGMzAsIDEyNDE4KFMxKQ0KQkZEMDEzQUUgIDlDMEMzMDgyICAgQURESVUgQTAsIFYwLCAtMjU1ODgNCkJGRDAxM0IwICAzMEEwOUMwQyAgIExXQzEgRjAsIDEyNDQ4KFQ0KQ0KQkZEMDEzQjIgIDAxMjAzMEEwICAgQURESVUgQTEsIFpFUk8sIDI4OA0KQkZEMDEzQjYgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwMTNCOCAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDEzQkEgICAgICAwQzAwICAgTk9QDQoyODk6ICAgICAgICAgICAgICAgICAJfQ0KMjkwOiAgICAgICAgICAgICAgICAgCSNlbmRpZg0KMjkxOiAgICAgICAgICAgICAgICAgDQoyOTI6ICAgICAgICAgICAgICAgICAJdlRhc2tTdXNwZW5kQWxsKCk7DQpCRkQwMTNCQyAgNEVGNDc3RTggICBKQUxTIHZUYXNrU3VzcGVuZEFsbA0KQkZEMDEzQkUgICAgICA0RUY0ICAgQURESVUgUzcsIFM3LCAtNg0KQkZEMDEzQzAgICAgICAwQzAwICAgTk9QDQoyOTM6ICAgICAgICAgICAgICAgICAJew0KMjk0OiAgICAgICAgICAgICAgICAgCQljb25zdCBFdmVudEJpdHNfdCB1eEN1cnJlbnRFdmVudEJpdHMgPSBweEV2ZW50Qml0cy0+dXhFdmVudEJpdHM7DQpCRkQwMTNDMiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwMTNDNiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDAxM0M4ICAwMDIwRjg1RSAgIFNXIFYwLCAzMihTOCkNCjI5NTogICAgICAgICAgICAgICAgIA0KMjk2OiAgICAgICAgICAgICAgICAgCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIHdhaXQgY29uZGl0aW9uIGlzIGFscmVhZHkgbWV0IG9yIG5vdC4gKi8NCjI5NzogICAgICAgICAgICAgICAgIAkJeFdhaXRDb25kaXRpb25NZXQgPSBwcnZUZXN0V2FpdENvbmRpdGlvbiggdXhDdXJyZW50RXZlbnRCaXRzLCB1eEJpdHNUb1dhaXRGb3IsIHhXYWl0Rm9yQWxsQml0cyApOw0KQkZEMDEzQ0MgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDEzRDAgIDAwM0NGQ0JFICAgTFcgQTEsIDYwKFM4KQ0KQkZEMDEzRDQgIDAwNDRGQ0RFICAgTFcgQTIsIDY4KFM4KQ0KQkZEMDEzRDggIDQwN0E3N0U4ICAgSkFMUyBwcnZUZXN0V2FpdENvbmRpdGlvbg0KQkZEMDEzREEgIDBDMDA0MDdBICAgQkdFWkFMIEswLCAweEJGRDAyQkRFDQpCRkQwMTNEQyAgICAgIDBDMDAgICBOT1ANCkJGRDAxM0RFICAwMDI0Rjg1RSAgIFNXIFYwLCAzNihTOCkNCjI5ODogICAgICAgICAgICAgICAgIA0KMjk5OiAgICAgICAgICAgICAgICAgCQlpZiggeFdhaXRDb25kaXRpb25NZXQgIT0gcGRGQUxTRSApDQpCRkQwMTNFMiAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwMTNFNiAgMDAxNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTQxNg0KMzAwOiAgICAgICAgICAgICAgICAgCQl7DQozMDE6ICAgICAgICAgICAgICAgICAJCQkvKiBUaGUgd2FpdCBjb25kaXRpb24gaGFzIGFscmVhZHkgYmVlbiBtZXQgc28gdGhlcmUgaXMgbm8gbmVlZCB0bw0KMzAyOiAgICAgICAgICAgICAgICAgCQkJYmxvY2suICovDQozMDM6ICAgICAgICAgICAgICAgICAJCQl1eFJldHVybiA9IHV4Q3VycmVudEV2ZW50Qml0czsNCkJGRDAxM0VBICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAxM0VFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjMwNDogICAgICAgICAgICAgICAgIAkJCXhUaWNrc1RvV2FpdCA9ICggVGlja1R5cGVfdCApIDA7DQpCRkQwMTNGMiAgMDA0OEY4MUUgICBTVyBaRVJPLCA3MihTOCkNCjMwNTogICAgICAgICAgICAgICAgIA0KMzA2OiAgICAgICAgICAgICAgICAgCQkJLyogQ2xlYXIgdGhlIHdhaXQgYml0cyBpZiByZXF1ZXN0ZWQgdG8gZG8gc28uICovDQozMDc6ICAgICAgICAgICAgICAgICAJCQlpZiggeENsZWFyT25FeGl0ICE9IHBkRkFMU0UgKQ0KQkZEMDEzRjYgIDAwNDBGQzVFICAgTFcgVjAsIDY0KFM4KQ0KQkZEMDEzRkEgIDAwM0Q0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE0NzgNCjMwODogICAgICAgICAgICAgICAgIAkJCXsNCjMwOTogICAgICAgICAgICAgICAgIAkJCQlweEV2ZW50Qml0cy0+dXhFdmVudEJpdHMgJj0gfnV4Qml0c1RvV2FpdEZvcjsNCkJGRDAxM0ZFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAxNDAyICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDE0MDQgIDAwM0NGQzVFICAgTFcgVjAsIDYwKFM4KQ0KQkZEMDE0MDggICAgICA0NDEyICAgTk9UMTYgVjAsIFYwDQpCRkQwMTQwQSAgICAgIDQ0OUEgICBBTkQxNiBWMSwgVjANCkJGRDAxNDBDICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAxNDEwICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KQkZEMDE0MTIgICAgICBDQzMyICAgQiAweEJGRDAxNDc4DQpCRkQwMTQxNCAgICAgIDBDMDAgICBOT1ANCjMxMDogICAgICAgICAgICAgICAgIAkJCX0NCjMxMTogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjMxMjogICAgICAgICAgICAgICAgIAkJCXsNCjMxMzogICAgICAgICAgICAgICAgIAkJCQltdENPVkVSQUdFX1RFU1RfTUFSS0VSKCk7DQozMTQ6ICAgICAgICAgICAgICAgICAJCQl9DQozMTU6ICAgICAgICAgICAgICAgICAJCX0NCjMxNjogICAgICAgICAgICAgICAgIAkJZWxzZSBpZiggeFRpY2tzVG9XYWl0ID09ICggVGlja1R5cGVfdCApIDAgKQ0KQkZEMDE0MTYgIDAwNDhGQzVFICAgTFcgVjAsIDcyKFM4KQ0KQkZEMDE0MUEgIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE0MkENCjMxNzogICAgICAgICAgICAgICAgIAkJew0KMzE4OiAgICAgICAgICAgICAgICAgCQkJLyogVGhlIHdhaXQgY29uZGl0aW9uIGhhcyBub3QgYmVlbiBtZXQsIGJ1dCBubyBibG9jayB0aW1lIHdhcw0KMzE5OiAgICAgICAgICAgICAgICAgCQkJc3BlY2lmaWVkLCBzbyBqdXN0IHJldHVybiB0aGUgY3VycmVudCB2YWx1ZS4gKi8NCjMyMDogICAgICAgICAgICAgICAgIAkJCXV4UmV0dXJuID0gdXhDdXJyZW50RXZlbnRCaXRzOw0KQkZEMDE0MUUgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDE0MjIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KQkZEMDE0MjYgICAgICBDQzI4ICAgQiAweEJGRDAxNDc4DQpCRkQwMTQyOCAgICAgIDBDMDAgICBOT1ANCjMyMTogICAgICAgICAgICAgICAgIAkJfQ0KMzIyOiAgICAgICAgICAgICAgICAgCQllbHNlDQozMjM6ICAgICAgICAgICAgICAgICAJCXsNCjMyNDogICAgICAgICAgICAgICAgIAkJCS8qIFRoZSB0YXNrIGlzIGdvaW5nIHRvIGJsb2NrIHRvIHdhaXQgZm9yIGl0cyByZXF1aXJlZCBiaXRzIHRvIGJlDQozMjU6ICAgICAgICAgICAgICAgICAJCQlzZXQuICB1eENvbnRyb2xCaXRzIGFyZSB1c2VkIHRvIHJlbWVtYmVyIHRoZSBzcGVjaWZpZWQgYmVoYXZpb3VyIG9mDQozMjY6ICAgICAgICAgICAgICAgICAJCQl0aGlzIGNhbGwgdG8geEV2ZW50R3JvdXBXYWl0Qml0cygpIC0gZm9yIHVzZSB3aGVuIHRoZSBldmVudCBiaXRzDQozMjc6ICAgICAgICAgICAgICAgICAJCQl1bmJsb2NrIHRoZSB0YXNrLiAqLw0KMzI4OiAgICAgICAgICAgICAgICAgCQkJaWYoIHhDbGVhck9uRXhpdCAhPSBwZEZBTFNFICkNCkJGRDAxNDJBICAwMDQwRkM1RSAgIExXIFYwLCA2NChTOCkNCkJGRDAxNDJFICAwMDA3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAxNDQwDQozMjk6ICAgICAgICAgICAgICAgICAJCQl7DQozMzA6ICAgICAgICAgICAgICAgICAJCQkJdXhDb250cm9sQml0cyB8PSBldmVudENMRUFSX0VWRU5UU19PTl9FWElUX0JJVDsNCkJGRDAxNDMyICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkNCkJGRDAxNDM2ICAwMTAwNDFBMiAgIExVSSBWMCwgMHgxMDANCkJGRDAxNDNBICAgICAgNDREMyAgIE9SMTYgVjAsIFYxDQpCRkQwMTQzQyAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQozMzE6ICAgICAgICAgICAgICAgICAJCQl9DQozMzI6ICAgICAgICAgICAgICAgICAJCQllbHNlDQozMzM6ICAgICAgICAgICAgICAgICAJCQl7DQozMzQ6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzM1OiAgICAgICAgICAgICAgICAgCQkJfQ0KMzM2OiAgICAgICAgICAgICAgICAgDQozMzc6ICAgICAgICAgICAgICAgICAJCQlpZiggeFdhaXRGb3JBbGxCaXRzICE9IHBkRkFMU0UgKQ0KQkZEMDE0NDAgIDAwNDRGQzVFICAgTFcgVjAsIDY4KFM4KQ0KQkZEMDE0NDQgIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE0NTYNCjMzODogICAgICAgICAgICAgICAgIAkJCXsNCjMzOTogICAgICAgICAgICAgICAgIAkJCQl1eENvbnRyb2xCaXRzIHw9IGV2ZW50V0FJVF9GT1JfQUxMX0JJVFM7DQpCRkQwMTQ0OCAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpDQpCRkQwMTQ0QyAgMDQwMDQxQTIgICBMVUkgVjAsIDB4NDAwDQpCRkQwMTQ0RSAgICAgIDA0MDAgICBBRERVIFMwLCBTMCwgUzANCkJGRDAxNDUwICAgICAgNDREMyAgIE9SMTYgVjAsIFYxDQpCRkQwMTQ1MiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQozNDA6ICAgICAgICAgICAgICAgICAJCQl9DQozNDE6ICAgICAgICAgICAgICAgICAJCQllbHNlDQozNDI6ICAgICAgICAgICAgICAgICAJCQl7DQozNDM6ICAgICAgICAgICAgICAgICAJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzQ0OiAgICAgICAgICAgICAgICAgCQkJfQ0KMzQ1OiAgICAgICAgICAgICAgICAgDQozNDY6ICAgICAgICAgICAgICAgICAJCQkvKiBTdG9yZSB0aGUgYml0cyB0aGF0IHRoZSBjYWxsaW5nIHRhc2sgaXMgd2FpdGluZyBmb3IgaW4gdGhlDQozNDc6ICAgICAgICAgICAgICAgICAJCQl0YXNrJ3MgZXZlbnQgbGlzdCBpdGVtIHNvIHRoZSBrZXJuZWwga25vd3Mgd2hlbiBhIG1hdGNoIGlzDQozNDg6ICAgICAgICAgICAgICAgICAJCQlmb3VuZC4gIFRoZW4gZW50ZXIgdGhlIGJsb2NrZWQgc3RhdGUuICovDQozNDk6ICAgICAgICAgICAgICAgICAJCQl2VGFza1BsYWNlT25Vbm9yZGVyZWRFdmVudExpc3QoICYoIHB4RXZlbnRCaXRzLT54VGFza3NXYWl0aW5nRm9yQml0cyApLCAoIHV4Qml0c1RvV2FpdEZvciB8IHV4Q29udHJvbEJpdHMgKSwgeFRpY2tzVG9XYWl0ICk7DQpCRkQwMTQ1NiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwMTQ1QSAgICAgIDZEQTIgICBBRERJVSBWMSwgVjAsIDQNCkJGRDAxNDVDICAwMDNDRkM5RSAgIExXIEEwLCA2MChTOCkNCkJGRDAxNDYwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDAxNDY0ICAgICAgNDRENCAgIE9SMTYgVjAsIEEwDQpCRkQwMTQ2NiAgICAgIDBDODMgICBNT1ZFIEEwLCBWMQ0KQkZEMDE0NjggICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAxNDZBICAwMDQ4RkNERSAgIExXIEEyLCA3MihTOCkNCkJGRDAxNDZFICAyNDgyNzdFOCAgIEpBTFMgdlRhc2tQbGFjZU9uVW5vcmRlcmVkRXZlbnRMaXN0DQpCRkQwMTQ3MCAgICAgIDI0ODIgICBTTEwgUzEsIFMwLCAxDQpCRkQwMTQ3MiAgICAgIDBDMDAgICBOT1ANCjM1MDogICAgICAgICAgICAgICAgIA0KMzUxOiAgICAgICAgICAgICAgICAgCQkJLyogVGhpcyBpcyBvYnNvbGV0ZSBhcyBpdCB3aWxsIGdldCBzZXQgYWZ0ZXIgdGhlIHRhc2sgdW5ibG9ja3MsIGJ1dA0KMzUyOiAgICAgICAgICAgICAgICAgCQkJc29tZSBjb21waWxlcnMgbWlzdGFrZW5seSBnZW5lcmF0ZSBhIHdhcm5pbmcgYWJvdXQgdGhlIHZhcmlhYmxlDQozNTM6ICAgICAgICAgICAgICAgICAJCQliZWluZyByZXR1cm5lZCB3aXRob3V0IGJlaW5nIHNldCBpZiBpdCBpcyBub3QgZG9uZS4gKi8NCjM1NDogICAgICAgICAgICAgICAgIAkJCXV4UmV0dXJuID0gMDsNCkJGRDAxNDc0ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMzU1OiAgICAgICAgICAgICAgICAgDQozNTY6ICAgICAgICAgICAgICAgICAJCQl0cmFjZUVWRU5UX0dST1VQX1dBSVRfQklUU19CTE9DSyggeEV2ZW50R3JvdXAsIHV4Qml0c1RvV2FpdEZvciApOw0KMzU3OiAgICAgICAgICAgICAgICAgCQl9DQozNTg6ICAgICAgICAgICAgICAgICAJfQ0KMzU5OiAgICAgICAgICAgICAgICAgCXhBbHJlYWR5WWllbGRlZCA9IHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwMTQ3OCAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsDQpCRkQwMTQ3QSAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpDQpCRkQwMTQ3QyAgICAgIDBDMDAgICBOT1ANCkJGRDAxNDdFICAwMDI4Rjg1RSAgIFNXIFYwLCA0MChTOCkNCjM2MDogICAgICAgICAgICAgICAgIA0KMzYxOiAgICAgICAgICAgICAgICAgCWlmKCB4VGlja3NUb1dhaXQgIT0gKCBUaWNrVHlwZV90ICkgMCApDQpCRkQwMTQ4MiAgMDA0OEZDNUUgICBMVyBWMCwgNzIoUzgpDQpCRkQwMTQ4NiAgMDA0QzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTUyMg0KMzYyOiAgICAgICAgICAgICAgICAgCXsNCjM2MzogICAgICAgICAgICAgICAgIAkJaWYoIHhBbHJlYWR5WWllbGRlZCA9PSBwZEZBTFNFICkNCkJGRDAxNDhBICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDAxNDhFICAwMDEwNDBBMiAgIEJORVpDIFYwLCAweEJGRDAxNEIyDQozNjQ6ICAgICAgICAgICAgICAgICAJCXsNCjM2NTogICAgICAgICAgICAgICAgIAkJCXBvcnRZSUVMRF9XSVRISU5fQVBJKCk7DQpCRkQwMTQ5MiAgNERFNjc3RTggICBKQUxTIHVsUG9ydEdldENQMENhdXNlDQpCRkQwMTQ5NCAgICAgIDRERTYgICBBRERJVSBUNywgVDcsIDMNCkJGRDAxNDk2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDE0OTggIDAwMkNGODVFICAgU1cgVjAsIDQ0KFM4KQ0KQkZEMDE0OUMgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQ0KQkZEMDE0QTAgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2DQpCRkQwMTRBNCAgMDAyQ0Y4NUUgICBTVyBWMCwgNDQoUzgpDQpCRkQwMTRBOCAgMDAyQ0ZDOUUgICBMVyBBMCwgNDQoUzgpDQpCRkQwMTRBQyAgNERGNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwQ2F1c2UNCkJGRDAxNEFFICAgICAgNERGNiAgIEFERElVIFQ3LCBUNywgLTUNCkJGRDAxNEIwICAgICAgMEMwMCAgIE5PUA0KMzY2OiAgICAgICAgICAgICAgICAgCQl9DQozNjc6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjM2ODogICAgICAgICAgICAgICAgIAkJew0KMzY5OiAgICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzcwOiAgICAgICAgICAgICAgICAgCQl9DQozNzE6ICAgICAgICAgICAgICAgICANCjM3MjogICAgICAgICAgICAgICAgIAkJLyogVGhlIHRhc2sgYmxvY2tlZCB0byB3YWl0IGZvciBpdHMgcmVxdWlyZWQgYml0cyB0byBiZSBzZXQgLSBhdCB0aGlzDQozNzM6ICAgICAgICAgICAgICAgICAJCXBvaW50IGVpdGhlciB0aGUgcmVxdWlyZWQgYml0cyB3ZXJlIHNldCBvciB0aGUgYmxvY2sgdGltZSBleHBpcmVkLiAgSWYNCjM3NDogICAgICAgICAgICAgICAgIAkJdGhlIHJlcXVpcmVkIGJpdHMgd2VyZSBzZXQgdGhleSB3aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlIHRhc2sncw0KMzc1OiAgICAgICAgICAgICAgICAgCQlldmVudCBsaXN0IGl0ZW0sIGFuZCB0aGV5IHNob3VsZCBub3cgYmUgcmV0cmlldmVkIHRoZW4gY2xlYXJlZC4gKi8NCjM3NjogICAgICAgICAgICAgICAgIAkJdXhSZXR1cm4gPSB1eFRhc2tSZXNldEV2ZW50SXRlbVZhbHVlKCk7DQpCRkQwMTRCMiAgNEM4Njc3RTggICBKQUxTIHV4VGFza1Jlc2V0RXZlbnRJdGVtVmFsdWUNCkJGRDAxNEI0ICAgICAgNEM4NiAgIEFERElVIEEwLCBBMCwgMw0KQkZEMDE0QjYgICAgICAwQzAwICAgTk9QDQpCRkQwMTRCOCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQozNzc6ICAgICAgICAgICAgICAgICANCjM3ODogICAgICAgICAgICAgICAgIAkJaWYoICggdXhSZXR1cm4gJiBldmVudFVOQkxPQ0tFRF9EVUVfVE9fQklUX1NFVCApID09ICggRXZlbnRCaXRzX3QgKSAwICkNCkJGRDAxNEJDICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDAxNEMwICAwMjAwNDFBMiAgIExVSSBWMCwgMHgyMDANCkJGRDAxNEM0ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDE0QzYgIDAwMjY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDE1MTYNCjM3OTogICAgICAgICAgICAgICAgIAkJew0KMzgwOiAgICAgICAgICAgICAgICAgCQkJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwMTRDQSAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDE0Q0MgIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwMTRDRSAgICAgIDBDMDAgICBOT1ANCjM4MTogICAgICAgICAgICAgICAgIAkJCXsNCjM4MjogICAgICAgICAgICAgICAgIAkJCQkvKiBUaGUgdGFzayB0aW1lZCBvdXQsIGp1c3QgcmV0dXJuIHRoZSBjdXJyZW50IGV2ZW50IGJpdCB2YWx1ZS4gKi8NCjM4MzogICAgICAgICAgICAgICAgIAkJCQl1eFJldHVybiA9IHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0czsNCkJGRDAxNEQwICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAxNEQ0ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDE0RDYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMzg0OiAgICAgICAgICAgICAgICAgDQozODU6ICAgICAgICAgICAgICAgICAJCQkJLyogSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgZXZlbnQgYml0cyB3ZXJlIHVwZGF0ZWQgYmV0d2VlbiB0aGlzDQozODY6ICAgICAgICAgICAgICAgICAJCQkJdGFzayBsZWF2aW5nIHRoZSBCbG9ja2VkIHN0YXRlIGFuZCBydW5uaW5nIGFnYWluLiAqLw0KMzg3OiAgICAgICAgICAgICAgICAgCQkJCWlmKCBwcnZUZXN0V2FpdENvbmRpdGlvbiggdXhSZXR1cm4sIHV4Qml0c1RvV2FpdEZvciwgeFdhaXRGb3JBbGxCaXRzICkgIT0gcGRGQUxTRSApDQpCRkQwMTREQSAgMDAxMEZDOUUgICBMVyBBMCwgMTYoUzgpDQpCRkQwMTRERSAgMDAzQ0ZDQkUgICBMVyBBMSwgNjAoUzgpDQpCRkQwMTRFMiAgMDA0NEZDREUgICBMVyBBMiwgNjgoUzgpDQpCRkQwMTRFNiAgNDA3QTc3RTggICBKQUxTIHBydlRlc3RXYWl0Q29uZGl0aW9uDQpCRkQwMTRFOCAgMEMwMDQwN0EgICBCR0VaQUwgSzAsIDB4QkZEMDJDRUMNCkJGRDAxNEVBICAgICAgMEMwMCAgIE5PUA0KQkZEMDE0RUMgIDAwMEU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDE1MEMNCjM4ODogICAgICAgICAgICAgICAgIAkJCQl7DQozODk6ICAgICAgICAgICAgICAgICAJCQkJCWlmKCB4Q2xlYXJPbkV4aXQgIT0gcGRGQUxTRSApDQpCRkQwMTRGMCAgMDA0MEZDNUUgICBMVyBWMCwgNjQoUzgpDQpCRkQwMTRGNCAgMDAwQTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMTUwQw0KMzkwOiAgICAgICAgICAgICAgICAgCQkJCQl7DQozOTE6ICAgICAgICAgICAgICAgICAJCQkJCQlweEV2ZW50Qml0cy0+dXhFdmVudEJpdHMgJj0gfnV4Qml0c1RvV2FpdEZvcjsNCkJGRDAxNEY4ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAxNEZDICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDE0RkUgIDAwM0NGQzVFICAgTFcgVjAsIDYwKFM4KQ0KQkZEMDE1MDIgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwDQpCRkQwMTUwNCAgICAgIDQ0OUEgICBBTkQxNiBWMSwgVjANCkJGRDAxNTA2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAxNTBBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMzkyOiAgICAgICAgICAgICAgICAgCQkJCQl9DQozOTM6ICAgICAgICAgICAgICAgICAJCQkJCWVsc2UNCjM5NDogICAgICAgICAgICAgICAgIAkJCQkJew0KMzk1OiAgICAgICAgICAgICAgICAgCQkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KMzk2OiAgICAgICAgICAgICAgICAgCQkJCQl9DQozOTc6ICAgICAgICAgICAgICAgICAJCQkJfQ0KMzk4OiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjM5OTogICAgICAgICAgICAgICAgIAkJCQl7DQo0MDA6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjQwMTogICAgICAgICAgICAgICAgIAkJCQl9DQo0MDI6ICAgICAgICAgICAgICAgICAJCQl9DQo0MDM6ICAgICAgICAgICAgICAgICAJCQl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDE1MEMgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDE1MEUgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDJEMTINCkJGRDAxNTEwICAgICAgMEMwMCAgIE5PUA0KNDA0OiAgICAgICAgICAgICAgICAgDQo0MDU6ICAgICAgICAgICAgICAgICAJCQkvKiBQcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzIHdoZW4gdHJhY2UgbWFjcm9zIGFyZSBub3QgdXNlZC4gKi8NCjQwNjogICAgICAgICAgICAgICAgIAkJCXhUaW1lb3V0T2NjdXJyZWQgPSBwZEZBTFNFOw0KQkZEMDE1MTIgIDAwMUNGODFFICAgU1cgWkVSTywgMjgoUzgpDQo0MDc6ICAgICAgICAgICAgICAgICAJCX0NCjQwODogICAgICAgICAgICAgICAgIAkJZWxzZQ0KNDA5OiAgICAgICAgICAgICAgICAgCQl7DQo0MTA6ICAgICAgICAgICAgICAgICAJCQkvKiBUaGUgdGFzayB1bmJsb2NrZWQgYmVjYXVzZSB0aGUgYml0cyB3ZXJlIHNldC4gKi8NCjQxMTogICAgICAgICAgICAgICAgIAkJfQ0KNDEyOiAgICAgICAgICAgICAgICAgDQo0MTM6ICAgICAgICAgICAgICAgICAJCS8qIFRoZSB0YXNrIGJsb2NrZWQgc28gY29udHJvbCBiaXRzIG1heSBoYXZlIGJlZW4gc2V0LiAqLw0KNDE0OiAgICAgICAgICAgICAgICAgCQl1eFJldHVybiAmPSB+ZXZlbnRFVkVOVF9CSVRTX0NPTlRST0xfQllURVM7DQpCRkQwMTUxNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwMTUxQSAgQjgyQzAwNDIgICBFWFQgVjAsIFYwLCAwLCAyNA0KQkZEMDE1MUMgIEY4NUVCODJDICAgU0RDMSBGMSwgLTE5NTQoVDQpDQpCRkQwMTUxRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo0MTU6ICAgICAgICAgICAgICAgICAJfQ0KNDE2OiAgICAgICAgICAgICAgICAgCXRyYWNlRVZFTlRfR1JPVVBfV0FJVF9CSVRTX0VORCggeEV2ZW50R3JvdXAsIHV4Qml0c1RvV2FpdEZvciwgeFRpbWVvdXRPY2N1cnJlZCApOw0KNDE3OiAgICAgICAgICAgICAgICAgDQo0MTg6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDE1MjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KNDE5OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDE1MjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAxNTI4ICAgICAgNEJFRCAgIExXIFJBLCA1MihTUCkNCkJGRDAxNTJBICAgICAgNEJDQyAgIExXIFM4LCA0OChTUCkNCkJGRDAxNTJDICAgICAgNEMxRCAgIEFERElVIFNQLCBTUCwgNTYNCkJGRDAxNTJFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAxNTMwICAgICAgMEMwMCAgIE5PUA0KNDIwOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0MjE6ICAgICAgICAgICAgICAgICANCjQyMjogICAgICAgICAgICAgICAgIEV2ZW50Qml0c190IHhFdmVudEdyb3VwQ2xlYXJCaXRzKCBFdmVudEdyb3VwSGFuZGxlX3QgeEV2ZW50R3JvdXAsIGNvbnN0IEV2ZW50Qml0c190IHV4Qml0c1RvQ2xlYXIgKQ0KNDIzOiAgICAgICAgICAgICAgICAgew0KQkZEMDZBNDQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA2QTQ2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA2QTQ4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA2QTRBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNkE0QyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwNkE1MCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQo0MjQ6ICAgICAgICAgICAgICAgICBFdmVudEdyb3VwX3QgKnB4RXZlbnRCaXRzID0gKCBFdmVudEdyb3VwX3QgKiApIHhFdmVudEdyb3VwOw0KQkZEMDZBNTQgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDZBNTggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KNDI1OiAgICAgICAgICAgICAgICAgRXZlbnRCaXRzX3QgdXhSZXR1cm47DQo0MjY6ICAgICAgICAgICAgICAgICANCjQyNzogICAgICAgICAgICAgICAgIAkvKiBDaGVjayB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byBjbGVhciB0aGUgYml0cyB1c2VkIGJ5IHRoZSBrZXJuZWwNCjQyODogICAgICAgICAgICAgICAgIAlpdHNlbGYuICovDQo0Mjk6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB4RXZlbnRHcm91cCApOw0KQkZEMDZBNUMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDZBNjAgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDZBNzYNCkJGRDA2QTY0ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNkE2NiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNkE2OCAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OA0KQkZEMDZBNkEgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpDQpCRkQwNkE2QyAgMDFBRDMwQTAgICBBRERJVSBBMSwgWkVSTywgNDI5DQpCRkQwNkE3MCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA2QTcyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNkE3NCAgICAgIDBDMDAgICBOT1ANCjQzMDogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICggdXhCaXRzVG9DbGVhciAmIGV2ZW50RVZFTlRfQklUU19DT05UUk9MX0JZVEVTICkgPT0gMCApOw0KQkZEMDZBNzYgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQ0KQkZEMDZBN0EgIEZGMDA0MUEyICAgTFVJIFYwLCAweEZGMDANCkJGRDA2QTdDICA0NDkzRkYwMCAgIExXIFQ4LCAxNzU1NShaRVJPKQ0KQkZEMDZBN0UgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwNkE4MCAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNkE5Ng0KQkZEMDZBODQgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA2QTg2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA2QTg4ICA5QzBDMzA4MiAgIEFERElVIEEwLCBWMCwgLTI1NTg4DQpCRkQwNkE4QSAgMzBBMDlDMEMgICBMV0MxIEYwLCAxMjQ0OChUNCkNCkJGRDA2QThDICAwMUFFMzBBMCAgIEFERElVIEExLCBaRVJPLCA0MzANCkJGRDA2QTkwICA0QjdFNzdFOCAgIEpBTFMgdkFzc2VydENhbGxlZA0KQkZEMDZBOTIgICAgICA0QjdFICAgTFcgSzEsIDEyMChTUCkNCkJGRDA2QTk0ICAgICAgMEMwMCAgIE5PUA0KNDMxOiAgICAgICAgICAgICAgICAgDQo0MzI6ICAgICAgICAgICAgICAgICAJdGFza0VOVEVSX0NSSVRJQ0FMKCk7DQpCRkQwNkE5NiAgMzNCODc3RTggICBKQUxTIHZUYXNrRW50ZXJDcml0aWNhbA0KQkZEMDZBOTggIDBDMDAzM0I4ICAgQURESVUgU1AsIFQ4LCAzMDcyDQpCRkQwNkE5QSAgICAgIDBDMDAgICBOT1ANCjQzMzogICAgICAgICAgICAgICAgIAl7DQo0MzQ6ICAgICAgICAgICAgICAgICAJCXRyYWNlRVZFTlRfR1JPVVBfQ0xFQVJfQklUUyggeEV2ZW50R3JvdXAsIHV4Qml0c1RvQ2xlYXIgKTsNCjQzNTogICAgICAgICAgICAgICAgIA0KNDM2OiAgICAgICAgICAgICAgICAgCQkvKiBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIGV2ZW50IGdyb3VwIHZhbHVlIHByaW9yIHRvIHRoZSBiaXRzIGJlaW5nDQo0Mzc6ICAgICAgICAgICAgICAgICAJCWNsZWFyZWQuICovDQo0Mzg6ICAgICAgICAgICAgICAgICAJCXV4UmV0dXJuID0gcHhFdmVudEJpdHMtPnV4RXZlbnRCaXRzOw0KQkZEMDZBOUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDZBQTAgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwNkFBMiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQo0Mzk6ICAgICAgICAgICAgICAgICANCjQ0MDogICAgICAgICAgICAgICAgIAkJLyogQ2xlYXIgdGhlIGJpdHMuICovDQo0NDE6ICAgICAgICAgICAgICAgICAJCXB4RXZlbnRCaXRzLT51eEV2ZW50Qml0cyAmPSB+dXhCaXRzVG9DbGVhcjsNCkJGRDA2QUE2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2QUFBICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDZBQUMgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDZBQjAgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwDQpCRkQwNkFCMiAgICAgIDQ0OUEgICBBTkQxNiBWMSwgVjANCkJGRDA2QUI0ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2QUI4ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNDQyOiAgICAgICAgICAgICAgICAgCX0NCjQ0MzogICAgICAgICAgICAgICAgIAl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDZBQkEgIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDZBQkMgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMDgyQzANCkJGRDA2QUJFICAgICAgMEMwMCAgIE5PUA0KNDQ0OiAgICAgICAgICAgICAgICAgDQo0NDU6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHV4UmV0dXJuOw0KQkZEMDZBQzAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KNDQ2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDZBQzQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA2QUM2ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA2QUM4ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA2QUNBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA2QUNDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA2QUNFICAgICAgMEMwMCAgIE5PUA0KNDQ3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0NDg6ICAgICAgICAgICAgICAgICANCjQ0OTogICAgICAgICAgICAgICAgICNpZiAoICggY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZID09IDEgKSAmJiAoIElOQ0xVREVfeFRpbWVyUGVuZEZ1bmN0aW9uQ2FsbCA9PSAxICkgJiYgKCBjb25maWdVU0VfVElNRVJTID09IDEgKSApDQo0NTA6ICAgICAgICAgICAgICAgICANCjQ1MTogICAgICAgICAgICAgICAgIAlCYXNlVHlwZV90IHhFdmVudEdyb3VwQ2xlYXJCaXRzRnJvbUlTUiggRXZlbnRHcm91cEhhbmRsZV90IHhFdmVudEdyb3VwLCBjb25zdCBFdmVudEJpdHNfdCB1eEJpdHNUb0NsZWFyICkNCjQ1MjogICAgICAgICAgICAgICAgIAl7DQo0NTM6ICAgICAgICAgICAgICAgICAJCUJhc2VUeXBlX3QgeFJldHVybjsNCjQ1NDogICAgICAgICAgICAgICAgIA0KNDU1OiAgICAgICAgICAgICAgICAgCQl0cmFjZUVWRU5UX0dST1VQX0NMRUFSX0JJVFNfRlJPTV9JU1IoIHhFdmVudEdyb3VwLCB1eEJpdHNUb0NsZWFyICk7DQo0NTY6ICAgICAgICAgICAgICAgICAJCXhSZXR1cm4gPSB4VGltZXJQZW5kRnVuY3Rpb25DYWxsRnJvbUlTUiggdkV2ZW50R3JvdXBDbGVhckJpdHNDYWxsYmFjaywgKCB2b2lkICogKSB4RXZlbnRHcm91cCwgKCB1aW50MzJfdCApIHV4Qml0c1RvQ2xlYXIsIE5VTEwgKTsNCjQ1NzogICAgICAgICAgICAgICAgIA0KNDU4OiAgICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCjQ1OTogICAgICAgICAgICAgICAgIAl9DQo0NjA6ICAgICAgICAgICAgICAgICANCjQ2MTogICAgICAgICAgICAgICAgICNlbmRpZg0KNDYyOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0NjM6ICAgICAgICAgICAgICAgICANCjQ2NDogICAgICAgICAgICAgICAgIEV2ZW50Qml0c190IHhFdmVudEdyb3VwR2V0Qml0c0Zyb21JU1IoIEV2ZW50R3JvdXBIYW5kbGVfdCB4RXZlbnRHcm91cCApDQo0NjU6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTE0NCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MA0KQkZEMDkxNDYgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQ0KQkZEMDkxNDggICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQ0KQkZEMDkxNEEgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5MTRDICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkNCjQ2NjogICAgICAgICAgICAgICAgIFVCYXNlVHlwZV90IHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXM7DQo0Njc6ICAgICAgICAgICAgICAgICBFdmVudEdyb3VwX3QgKnB4RXZlbnRCaXRzID0gKCBFdmVudEdyb3VwX3QgKiApIHhFdmVudEdyb3VwOw0KQkZEMDkxNTAgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDkxNTQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KNDY4OiAgICAgICAgICAgICAgICAgRXZlbnRCaXRzX3QgdXhSZXR1cm47DQo0Njk6ICAgICAgICAgICAgICAgICANCjQ3MDogICAgICAgICAgICAgICAgIAl1eFNhdmVkSW50ZXJydXB0U3RhdHVzID0gcG9ydFNFVF9JTlRFUlJVUFRfTUFTS19GUk9NX0lTUigpOw0KQkZEMDkxNTggIDQ3NUU3N0U4ICAgSkFMUyB1eFBvcnRTZXRJbnRlcnJ1cHRNYXNrRnJvbUlTUg0KQkZEMDkxNUMgICAgICAwQzAwICAgTk9QDQpCRkQwOTE1RSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQo0NzE6ICAgICAgICAgICAgICAgICAJew0KNDcyOiAgICAgICAgICAgICAgICAgCQl1eFJldHVybiA9IHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0czsNCkJGRDA5MTYyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA5MTY2ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDkxNjggIDAwMThGODVFICAgU1cgVjAsIDI0KFM4KQ0KNDczOiAgICAgICAgICAgICAgICAgCX0NCjQ3NDogICAgICAgICAgICAgICAgIAlwb3J0Q0xFQVJfSU5URVJSVVBUX01BU0tfRlJPTV9JU1IoIHV4U2F2ZWRJbnRlcnJ1cHRTdGF0dXMgKTsNCkJGRDA5MTZDICAwMDE0RkM5RSAgIExXIEEwLCAyMChTOCkNCkJGRDA5MTcwICA0RDVFNzdFOCAgIEpBTFMgdlBvcnRDbGVhckludGVycnVwdE1hc2tGcm9tSVNSDQpCRkQwOTE3MiAgICAgIDRENUUgICBBRERJVSBUMiwgVDIsIC0xDQpCRkQwOTE3NCAgICAgIDBDMDAgICBOT1ANCjQ3NTogICAgICAgICAgICAgICAgIA0KNDc2OiAgICAgICAgICAgICAgICAgCXJldHVybiB1eFJldHVybjsNCkJGRDA5MTc2ICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCjQ3NzogICAgICAgICAgICAgICAgIH0NCkJGRDA5MTdBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTE3QyAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwOTE3RSAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwOTE4MCAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwOTE4MiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTE4NCAgICAgIDBDMDAgICBOT1ANCjQ3ODogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDc5OiAgICAgICAgICAgICAgICAgDQo0ODA6ICAgICAgICAgICAgICAgICBFdmVudEJpdHNfdCB4RXZlbnRHcm91cFNldEJpdHMoIEV2ZW50R3JvdXBIYW5kbGVfdCB4RXZlbnRHcm91cCwgY29uc3QgRXZlbnRCaXRzX3QgdXhCaXRzVG9TZXQgKQ0KNDgxOiAgICAgICAgICAgICAgICAgew0KQkZEMDI1NjggICAgICA0RkUxICAgQURESVUgU1AsIFNQLCAtNjQNCkJGRDAyNTZBICAgICAgQ0JFRiAgIFNXIFJBLCA2MChTUCkNCkJGRDAyNTZDICAgICAgQ0JDRSAgIFNXIFM4LCA1NihTUCkNCkJGRDAyNTZFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwMjU3MCAgMDA0MEY4OUUgICBTVyBBMCwgNjQoUzgpDQpCRkQwMjU3NCAgMDA0NEY4QkUgICBTVyBBMSwgNjgoUzgpDQo0ODI6ICAgICAgICAgICAgICAgICBMaXN0SXRlbV90ICpweExpc3RJdGVtLCAqcHhOZXh0Ow0KNDgzOiAgICAgICAgICAgICAgICAgTGlzdEl0ZW1fdCBjb25zdCAqcHhMaXN0RW5kOw0KNDg0OiAgICAgICAgICAgICAgICAgTGlzdF90ICpweExpc3Q7DQo0ODU6ICAgICAgICAgICAgICAgICBFdmVudEJpdHNfdCB1eEJpdHNUb0NsZWFyID0gMCwgdXhCaXRzV2FpdGVkRm9yLCB1eENvbnRyb2xCaXRzOw0KQkZEMDI1NzggIDAwMTRGODFFICAgU1cgWkVSTywgMjAoUzgpDQo0ODY6ICAgICAgICAgICAgICAgICBFdmVudEdyb3VwX3QgKnB4RXZlbnRCaXRzID0gKCBFdmVudEdyb3VwX3QgKiApIHhFdmVudEdyb3VwOw0KQkZEMDI1N0MgIDAwNDBGQzVFICAgTFcgVjAsIDY0KFM4KQ0KQkZEMDI1ODAgIDAwMUNGODVFICAgU1cgVjAsIDI4KFM4KQ0KNDg3OiAgICAgICAgICAgICAgICAgQmFzZVR5cGVfdCB4TWF0Y2hGb3VuZCA9IHBkRkFMU0U7DQpCRkQwMjU4NCAgMDAxOEY4MUUgICBTVyBaRVJPLCAyNChTOCkNCjQ4ODogICAgICAgICAgICAgICAgIA0KNDg5OiAgICAgICAgICAgICAgICAgCS8qIENoZWNrIHRoZSB1c2VyIGlzIG5vdCBhdHRlbXB0aW5nIHRvIHNldCB0aGUgYml0cyB1c2VkIGJ5IHRoZSBrZXJuZWwNCjQ5MDogICAgICAgICAgICAgICAgIAlpdHNlbGYuICovDQo0OTE6ICAgICAgICAgICAgICAgICAJY29uZmlnQVNTRVJUKCB4RXZlbnRHcm91cCApOw0KQkZEMDI1ODggIDAwNDBGQzVFICAgTFcgVjAsIDY0KFM4KQ0KQkZEMDI1OEMgIDAwMDk0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDI1QTINCkJGRDAyNTkwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMjU5MiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMjU5NCAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OA0KQkZEMDI1OTYgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpDQpCRkQwMjU5OCAgMDFFQjMwQTAgICBBRERJVSBBMSwgWkVSTywgNDkxDQpCRkQwMjU5QyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAyNTlFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMjVBMCAgICAgIDBDMDAgICBOT1ANCjQ5MjogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICggdXhCaXRzVG9TZXQgJiBldmVudEVWRU5UX0JJVFNfQ09OVFJPTF9CWVRFUyApID09IDAgKTsNCkJGRDAyNUEyICAwMDQ0RkM3RSAgIExXIFYxLCA2OChTOCkNCkJGRDAyNUE2ICBGRjAwNDFBMiAgIExVSSBWMCwgMHhGRjAwDQpCRkQwMjVBOCAgNDQ5M0ZGMDAgICBMVyBUOCwgMTc1NTUoWkVSTykNCkJGRDAyNUFBICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDI1QUMgIDAwMDk0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI1QzINCkJGRDAyNUIwICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwMjVCMiAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwMjVCNCAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OA0KQkZEMDI1QjYgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpDQpCRkQwMjVCOCAgMDFFQzMwQTAgICBBRERJVSBBMSwgWkVSTywgNDkyDQpCRkQwMjVCQyAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDAyNUJFICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwMjVDMCAgICAgIDBDMDAgICBOT1ANCjQ5MzogICAgICAgICAgICAgICAgIA0KNDk0OiAgICAgICAgICAgICAgICAgCXB4TGlzdCA9ICYoIHB4RXZlbnRCaXRzLT54VGFza3NXYWl0aW5nRm9yQml0cyApOw0KQkZEMDI1QzIgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDI1QzYgICAgICA2RDIyICAgQURESVUgVjAsIFYwLCA0DQpCRkQwMjVDOCAgMDAyMEY4NUUgICBTVyBWMCwgMzIoUzgpDQo0OTU6ICAgICAgICAgICAgICAgICAJcHhMaXN0RW5kID0gbGlzdEdFVF9FTkRfTUFSS0VSKCBweExpc3QgKTsgLypsaW50ICFlODI2ICFlNzQwIFRoZSBtaW5pIGxpc3Qgc3RydWN0dXJlIGlzIHVzZWQgYXMgdGhlIGxpc3QgZW5kIHRvIHNhdmUgUkFNLiAgVGhpcyBpcyBjaGVja2VkIGFuZCB2YWxpZC4gKi8NCkJGRDAyNUNDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDAyNUQwICAgICAgNkQyNCAgIEFERElVIFYwLCBWMCwgOA0KQkZEMDI1RDIgIDAwMjRGODVFICAgU1cgVjAsIDM2KFM4KQ0KNDk2OiAgICAgICAgICAgICAgICAgCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDI1RDYgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwNCkJGRDAyNUQ4ICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYNCkJGRDAyNURBICAgICAgMEMwMCAgIE5PUA0KNDk3OiAgICAgICAgICAgICAgICAgCXsNCjQ5ODogICAgICAgICAgICAgICAgIAkJdHJhY2VFVkVOVF9HUk9VUF9TRVRfQklUUyggeEV2ZW50R3JvdXAsIHV4Qml0c1RvU2V0ICk7DQo0OTk6ICAgICAgICAgICAgICAgICANCjUwMDogICAgICAgICAgICAgICAgIAkJcHhMaXN0SXRlbSA9IGxpc3RHRVRfSEVBRF9FTlRSWSggcHhMaXN0ICk7DQpCRkQwMjVEQyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwMjVFMCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApDQpCRkQwMjVFMiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo1MDE6ICAgICAgICAgICAgICAgICANCjUwMjogICAgICAgICAgICAgICAgIAkJLyogU2V0IHRoZSBiaXRzLiAqLw0KNTAzOiAgICAgICAgICAgICAgICAgCQlweEV2ZW50Qml0cy0+dXhFdmVudEJpdHMgfD0gdXhCaXRzVG9TZXQ7DQpCRkQwMjVFNiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjVFQSAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDAyNUVDICAwMDQ0RkM1RSAgIExXIFYwLCA2OChTOCkNCkJGRDAyNUYwICAgICAgNDREQSAgIE9SMTYgVjEsIFYwDQpCRkQwMjVGMiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjVGNiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjUwNDogICAgICAgICAgICAgICAgIA0KNTA1OiAgICAgICAgICAgICAgICAgCQkvKiBTZWUgaWYgdGhlIG5ldyBiaXQgdmFsdWUgc2hvdWxkIHVuYmxvY2sgYW55IHRhc2tzLiAqLw0KNTA2OiAgICAgICAgICAgICAgICAgCQl3aGlsZSggcHhMaXN0SXRlbSAhPSBweExpc3RFbmQgKQ0KQkZEMDI1RjggICAgICBDQzVFICAgQiAweEJGRDAyNkI2DQpCRkQwMjVGQSAgICAgIDBDMDAgICBOT1ANCkJGRDAyNkI2ICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDAyNkJBICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDAyNkJFICBGRjlEQjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDI1RkMNCkJGRDAyNkMwICAwQzAwRkY5RCAgIExXIEdQLCAzMDcyKFNQKQ0KQkZEMDI2QzIgICAgICAwQzAwICAgTk9QDQo1MDc6ICAgICAgICAgICAgICAgICAJCXsNCjUwODogICAgICAgICAgICAgICAgIAkJCXB4TmV4dCA9IGxpc3RHRVRfTkVYVCggcHhMaXN0SXRlbSApOw0KQkZEMDI1RkMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDI2MDAgICAgICA2OTIxICAgTFcgVjAsIDQoVjApDQpCRkQwMjYwMiAgMDAyOEY4NUUgICBTVyBWMCwgNDAoUzgpDQo1MDk6ICAgICAgICAgICAgICAgICAJCQl1eEJpdHNXYWl0ZWRGb3IgPSBsaXN0R0VUX0xJU1RfSVRFTV9WQUxVRSggcHhMaXN0SXRlbSApOw0KQkZEMDI2MDYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDI2MEEgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwMjYwQyAgMDAyQ0Y4NUUgICBTVyBWMCwgNDQoUzgpDQo1MTA6ICAgICAgICAgICAgICAgICAJCQl4TWF0Y2hGb3VuZCA9IHBkRkFMU0U7DQpCRkQwMjYxMCAgMDAxOEY4MUUgICBTVyBaRVJPLCAyNChTOCkNCjUxMTogICAgICAgICAgICAgICAgIA0KNTEyOiAgICAgICAgICAgICAgICAgCQkJLyogU3BsaXQgdGhlIGJpdHMgd2FpdGVkIGZvciBmcm9tIHRoZSBjb250cm9sIGJpdHMuICovDQo1MTM6ICAgICAgICAgICAgICAgICAJCQl1eENvbnRyb2xCaXRzID0gdXhCaXRzV2FpdGVkRm9yICYgZXZlbnRFVkVOVF9CSVRTX0NPTlRST0xfQllURVM7DQpCRkQwMjYxNCAgMDAyQ0ZDN0UgICBMVyBWMSwgNDQoUzgpDQpCRkQwMjYxOCAgRkYwMDQxQTIgICBMVUkgVjAsIDB4RkYwMA0KQkZEMDI2MUEgIDQ0OTNGRjAwICAgTFcgVDgsIDE3NTU1KFpFUk8pDQpCRkQwMjYxQyAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDAyNjFFICAwMDMwRjg1RSAgIFNXIFYwLCA0OChTOCkNCjUxNDogICAgICAgICAgICAgICAgIAkJCXV4Qml0c1dhaXRlZEZvciAmPSB+ZXZlbnRFVkVOVF9CSVRTX0NPTlRST0xfQllURVM7DQpCRkQwMjYyMiAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpDQpCRkQwMjYyNiAgQjgyQzAwNDIgICBFWFQgVjAsIFYwLCAwLCAyNA0KQkZEMDI2MjggIEY4NUVCODJDICAgU0RDMSBGMSwgLTE5NTQoVDQpDQpCRkQwMjYyQSAgMDAyQ0Y4NUUgICBTVyBWMCwgNDQoUzgpDQo1MTU6ICAgICAgICAgICAgICAgICANCjUxNjogICAgICAgICAgICAgICAgIAkJCWlmKCAoIHV4Q29udHJvbEJpdHMgJiBldmVudFdBSVRfRk9SX0FMTF9CSVRTICkgPT0gKCBFdmVudEJpdHNfdCApIDAgKQ0KQkZEMDI2MkUgIDAwMzBGQzdFICAgTFcgVjEsIDQ4KFM4KQ0KQkZEMDI2MzIgIDA0MDA0MUEyICAgTFVJIFYwLCAweDQwMA0KQkZEMDI2MzQgICAgICAwNDAwICAgQUREVSBTMCwgUzAsIFMwDQpCRkQwMjYzNiAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDAyNjM4ICAwMDBENDBBMiAgIEJORVpDIFYwLCAweEJGRDAyNjU2DQo1MTc6ICAgICAgICAgICAgICAgICAJCQl7DQo1MTg6ICAgICAgICAgICAgICAgICAJCQkJLyogSnVzdCBsb29raW5nIGZvciBzaW5nbGUgYml0IGJlaW5nIHNldC4gKi8NCjUxOTogICAgICAgICAgICAgICAgIAkJCQlpZiggKCB1eEJpdHNXYWl0ZWRGb3IgJiBweEV2ZW50Qml0cy0+dXhFdmVudEJpdHMgKSAhPSAoIEV2ZW50Qml0c190ICkgMCApDQpCRkQwMjYzQyAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjY0MCAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDAyNjQyICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAyNjQ2ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDI2NDggIDAwMTM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI2NzINCjUyMDogICAgICAgICAgICAgICAgIAkJCQl7DQo1MjE6ICAgICAgICAgICAgICAgICAJCQkJCXhNYXRjaEZvdW5kID0gcGRUUlVFOw0KQkZEMDI2NEMgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAyNjRFICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCkJGRDAyNjUyICAgICAgQ0MwRiAgIEIgMHhCRkQwMjY3Mg0KQkZEMDI2NTQgICAgICAwQzAwICAgTk9QDQo1MjI6ICAgICAgICAgICAgICAgICAJCQkJfQ0KNTIzOiAgICAgICAgICAgICAgICAgCQkJCWVsc2UNCjUyNDogICAgICAgICAgICAgICAgIAkJCQl7DQo1MjU6ICAgICAgICAgICAgICAgICAJCQkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjUyNjogICAgICAgICAgICAgICAgIAkJCQl9DQo1Mjc6ICAgICAgICAgICAgICAgICAJCQl9DQo1Mjg6ICAgICAgICAgICAgICAgICAJCQllbHNlIGlmKCAoIHV4Qml0c1dhaXRlZEZvciAmIHB4RXZlbnRCaXRzLT51eEV2ZW50Qml0cyApID09IHV4Qml0c1dhaXRlZEZvciApDQpCRkQwMjY1NiAgMDAxQ0ZDNUUgICBMVyBWMCwgMjgoUzgpDQpCRkQwMjY1QSAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDAyNjVDICAwMDJDRkM1RSAgIExXIFYwLCA0NChTOCkNCkJGRDAyNjYwICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMA0KQkZEMDI2NjIgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQ0KQkZEMDI2NjYgIDAwMDRCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwMjY3Mg0KQkZEMDI2NjggIDBDMDAwMDA0ICAgU0xMIFpFUk8sIEEwLCAxDQpCRkQwMjY2QSAgICAgIDBDMDAgICBOT1ANCjUyOTogICAgICAgICAgICAgICAgIAkJCXsNCjUzMDogICAgICAgICAgICAgICAgIAkJCQkvKiBBbGwgYml0cyBhcmUgc2V0LiAqLw0KNTMxOiAgICAgICAgICAgICAgICAgCQkJCXhNYXRjaEZvdW5kID0gcGRUUlVFOw0KQkZEMDI2NkMgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDAyNjZFICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjUzMjogICAgICAgICAgICAgICAgIAkJCX0NCjUzMzogICAgICAgICAgICAgICAgIAkJCWVsc2UNCjUzNDogICAgICAgICAgICAgICAgIAkJCXsNCjUzNTogICAgICAgICAgICAgICAgIAkJCQkvKiBOZWVkIGFsbCBiaXRzIHRvIGJlIHNldCwgYnV0IG5vdCBhbGwgdGhlIGJpdHMgd2VyZSBzZXQuICovDQo1MzY6ICAgICAgICAgICAgICAgICAJCQl9DQo1Mzc6ICAgICAgICAgICAgICAgICANCjUzODogICAgICAgICAgICAgICAgIAkJCWlmKCB4TWF0Y2hGb3VuZCAhPSBwZEZBTFNFICkNCkJGRDAyNjcyICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDAyNjc2ICAwMDFBNDBFMiAgIEJFUVpDIFYwLCAweEJGRDAyNkFFDQo1Mzk6ICAgICAgICAgICAgICAgICAJCQl7DQo1NDA6ICAgICAgICAgICAgICAgICAJCQkJLyogVGhlIGJpdHMgbWF0Y2guICBTaG91bGQgdGhlIGJpdHMgYmUgY2xlYXJlZCBvbiBleGl0PyAqLw0KNTQxOiAgICAgICAgICAgICAgICAgCQkJCWlmKCAoIHV4Q29udHJvbEJpdHMgJiBldmVudENMRUFSX0VWRU5UU19PTl9FWElUX0JJVCApICE9ICggRXZlbnRCaXRzX3QgKSAwICkNCkJGRDAyNjdBICAwMDMwRkM3RSAgIExXIFYxLCA0OChTOCkNCkJGRDAyNjdFICAwMTAwNDFBMiAgIExVSSBWMCwgMHgxMDANCkJGRDAyNjgyICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDI2ODQgIDAwMDc0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDI2OTYNCjU0MjogICAgICAgICAgICAgICAgIAkJCQl7DQo1NDM6ICAgICAgICAgICAgICAgICAJCQkJCXV4Qml0c1RvQ2xlYXIgfD0gdXhCaXRzV2FpdGVkRm9yOw0KQkZEMDI2ODggIDAwMTRGQzdFICAgTFcgVjEsIDIwKFM4KQ0KQkZEMDI2OEMgIDAwMkNGQzVFICAgTFcgVjAsIDQ0KFM4KQ0KQkZEMDI2OTAgICAgICA0NEQzICAgT1IxNiBWMCwgVjENCkJGRDAyNjkyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjU0NDogICAgICAgICAgICAgICAgIAkJCQl9DQo1NDU6ICAgICAgICAgICAgICAgICAJCQkJZWxzZQ0KNTQ2OiAgICAgICAgICAgICAgICAgCQkJCXsNCjU0NzogICAgICAgICAgICAgICAgIAkJCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNTQ4OiAgICAgICAgICAgICAgICAgCQkJCX0NCjU0OTogICAgICAgICAgICAgICAgIA0KNTUwOiAgICAgICAgICAgICAgICAgCQkJCS8qIFN0b3JlIHRoZSBhY3R1YWwgZXZlbnQgZmxhZyB2YWx1ZSBpbiB0aGUgdGFzaydzIGV2ZW50IGxpc3QNCjU1MTogICAgICAgICAgICAgICAgIAkJCQlpdGVtIGJlZm9yZSByZW1vdmluZyB0aGUgdGFzayBmcm9tIHRoZSBldmVudCBsaXN0LiAgVGhlDQo1NTI6ICAgICAgICAgICAgICAgICAJCQkJZXZlbnRVTkJMT0NLRURfRFVFX1RPX0JJVF9TRVQgYml0IGlzIHNldCBzbyB0aGUgdGFzayBrbm93cw0KNTUzOiAgICAgICAgICAgICAgICAgCQkJCXRoYXQgaXMgd2FzIHVuYmxvY2tlZCBkdWUgdG8gaXRzIHJlcXVpcmVkIGJpdHMgbWF0Y2hpbmcsIHJhdGhlcg0KNTU0OiAgICAgICAgICAgICAgICAgCQkJCXRoYW4gYmVjYXVzZSBpdCB0aW1lZCBvdXQuICovDQo1NTU6ICAgICAgICAgICAgICAgICAJCQkJKCB2b2lkICkgeFRhc2tSZW1vdmVGcm9tVW5vcmRlcmVkRXZlbnRMaXN0KCBweExpc3RJdGVtLCBweEV2ZW50Qml0cy0+dXhFdmVudEJpdHMgfCBldmVudFVOQkxPQ0tFRF9EVUVfVE9fQklUX1NFVCApOw0KQkZEMDI2OTYgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDI2OUEgICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwMjY5QyAgMDIwMDQxQTIgICBMVUkgVjAsIDB4MjAwDQpCRkQwMjZBMCAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQ0KQkZEMDI2QTIgIDAwMTBGQzlFICAgTFcgQTAsIDE2KFM4KQ0KQkZEMDI2QTYgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDAyNkE4ICAyMTYyNzdFOCAgIEpBTFMgeFRhc2tSZW1vdmVGcm9tVW5vcmRlcmVkRXZlbnRMaXN0DQpCRkQwMjZBQSAgMEMwMDIxNjIgICBMV0MyIFQzLCAzMDcyKFYwKQ0KQkZEMDI2QUMgICAgICAwQzAwICAgTk9QDQo1NTY6ICAgICAgICAgICAgICAgICAJCQl9DQo1NTc6ICAgICAgICAgICAgICAgICANCjU1ODogICAgICAgICAgICAgICAgIAkJCS8qIE1vdmUgb250byB0aGUgbmV4dCBsaXN0IGl0ZW0uICBOb3RlIHB4TGlzdEl0ZW0tPnB4TmV4dCBpcyBub3QNCjU1OTogICAgICAgICAgICAgICAgIAkJCXVzZWQgaGVyZSBhcyB0aGUgbGlzdCBpdGVtIG1heSBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBldmVudCBsaXN0DQo1NjA6ICAgICAgICAgICAgICAgICAJCQlhbmQgaW5zZXJ0ZWQgaW50byB0aGUgcmVhZHkvcGVuZGluZyByZWFkaW5nIGxpc3QuICovDQo1NjE6ICAgICAgICAgICAgICAgICAJCQlweExpc3RJdGVtID0gcHhOZXh0Ow0KQkZEMDI2QUUgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDI2QjIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KNTYyOiAgICAgICAgICAgICAgICAgCQl9DQo1NjM6ICAgICAgICAgICAgICAgICANCjU2NDogICAgICAgICAgICAgICAgIAkJLyogQ2xlYXIgYW55IGJpdHMgdGhhdCBtYXRjaGVkIHdoZW4gdGhlIGV2ZW50Q0xFQVJfRVZFTlRTX09OX0VYSVRfQklUDQo1NjU6ICAgICAgICAgICAgICAgICAJCWJpdCB3YXMgc2V0IGluIHRoZSBjb250cm9sIHdvcmQuICovDQo1NjY6ICAgICAgICAgICAgICAgICAJCXB4RXZlbnRCaXRzLT51eEV2ZW50Qml0cyAmPSB+dXhCaXRzVG9DbGVhcjsNCkJGRDAyNkM0ICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAyNkM4ICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDI2Q0EgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDI2Q0UgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwDQpCRkQwMjZEMCAgICAgIDQ0OUEgICBBTkQxNiBWMSwgVjANCkJGRDAyNkQyICAwMDFDRkM1RSAgIExXIFYwLCAyOChTOCkNCkJGRDAyNkQ2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNTY3OiAgICAgICAgICAgICAgICAgCX0NCjU2ODogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSB4VGFza1Jlc3VtZUFsbCgpOw0KQkZEMDI2RDggIDE1OEU3N0U4ICAgSkFMUyB4VGFza1Jlc3VtZUFsbA0KQkZEMDI2REEgIDBDMDAxNThFICAgTEJVIFQ0LCAzMDcyKFQ2KQ0KQkZEMDI2REMgICAgICAwQzAwICAgTk9QDQo1Njk6ICAgICAgICAgICAgICAgICANCjU3MDogICAgICAgICAgICAgICAgIAlyZXR1cm4gcHhFdmVudEJpdHMtPnV4RXZlbnRCaXRzOw0KQkZEMDI2REUgIDAwMUNGQzVFICAgTFcgVjAsIDI4KFM4KQ0KQkZEMDI2RTIgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQo1NzE6ICAgICAgICAgICAgICAgICB9DQpCRkQwMjZFNCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDI2RTYgICAgICA0QkVGICAgTFcgUkEsIDYwKFNQKQ0KQkZEMDI2RTggICAgICA0QkNFICAgTFcgUzgsIDU2KFNQKQ0KQkZEMDI2RUEgICAgICA0QzIxICAgQURESVUgU1AsIFNQLCA2NA0KQkZEMDI2RUMgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDI2RUUgICAgICAwQzAwICAgTk9QDQo1NzI6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjU3MzogICAgICAgICAgICAgICAgIA0KNTc0OiAgICAgICAgICAgICAgICAgdm9pZCB2RXZlbnRHcm91cERlbGV0ZSggRXZlbnRHcm91cEhhbmRsZV90IHhFdmVudEdyb3VwICkNCjU3NTogICAgICAgICAgICAgICAgIHsNCkJGRDA2QzcwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNkM3MiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNkM3NCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNkM3NiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDZDNzggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KNTc2OiAgICAgICAgICAgICAgICAgRXZlbnRHcm91cF90ICpweEV2ZW50Qml0cyA9ICggRXZlbnRHcm91cF90ICogKSB4RXZlbnRHcm91cDsNCkJGRDA2QzdDICAwMDIwRkM1RSAgIExXIFYwLCAzMihTOCkNCkJGRDA2QzgwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjU3NzogICAgICAgICAgICAgICAgIGNvbnN0IExpc3RfdCAqcHhUYXNrc1dhaXRpbmdGb3JCaXRzID0gJiggcHhFdmVudEJpdHMtPnhUYXNrc1dhaXRpbmdGb3JCaXRzICk7DQpCRkQwNkM4NCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNkM4OCAgICAgIDZEMjIgICBBRERJVSBWMCwgVjAsIDQNCkJGRDA2QzhBICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjU3ODogICAgICAgICAgICAgICAgIA0KNTc5OiAgICAgICAgICAgICAgICAgCXZUYXNrU3VzcGVuZEFsbCgpOw0KQkZEMDZDOEUgIDRFRjQ3N0U4ICAgSkFMUyB2VGFza1N1c3BlbmRBbGwNCkJGRDA2QzkwICAgICAgNEVGNCAgIEFERElVIFM3LCBTNywgLTYNCkJGRDA2QzkyICAgICAgMEMwMCAgIE5PUA0KNTgwOiAgICAgICAgICAgICAgICAgCXsNCjU4MTogICAgICAgICAgICAgICAgIAkJdHJhY2VFVkVOVF9HUk9VUF9ERUxFVEUoIHhFdmVudEdyb3VwICk7DQo1ODI6ICAgICAgICAgICAgICAgICANCjU4MzogICAgICAgICAgICAgICAgIAkJd2hpbGUoIGxpc3RDVVJSRU5UX0xJU1RfTEVOR1RIKCBweFRhc2tzV2FpdGluZ0ZvckJpdHMgKSA+ICggVUJhc2VUeXBlX3QgKSAwICkNCkJGRDA2Qzk0ICAgICAgQ0MxQyAgIEIgMHhCRkQwNkNDRQ0KQkZEMDZDOTYgICAgICAwQzAwICAgTk9QDQpCRkQwNkNDRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNkNEMiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDA2Q0Q0ICBGRkUwNDBBMiAgIEJORVpDIFYwLCAweEJGRDA2Qzk4DQpCRkQwNkNENiAgRkM5RUZGRTAgICBMVyBSQSwgLTg2NihaRVJPKQ0KNTg0OiAgICAgICAgICAgICAgICAgCQl7DQo1ODU6ICAgICAgICAgICAgICAgICAJCQkvKiBVbmJsb2NrIHRoZSB0YXNrLCByZXR1cm5pbmcgMCBhcyB0aGUgZXZlbnQgbGlzdCBpcyBiZWluZyBkZWxldGVkDQo1ODY6ICAgICAgICAgICAgICAgICAJCQlhbmQJY2Fubm90IHRoZXJlZm9yZSBoYXZlIGFueSBiaXRzIHNldC4gKi8NCjU4NzogICAgICAgICAgICAgICAgIAkJCWNvbmZpZ0FTU0VSVCggcHhUYXNrc1dhaXRpbmdGb3JCaXRzLT54TGlzdEVuZC5weE5leHQgIT0gKCBMaXN0SXRlbV90ICogKSAmKCBweFRhc2tzV2FpdGluZ0ZvckJpdHMtPnhMaXN0RW5kICkgKTsNCkJGRDA2Qzk4ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2QzlDICAgICAgNjlBMyAgIExXIFYxLCAxMihWMCkNCkJGRDA2QzlFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA2Q0EyICAgICAgNkQyNCAgIEFERElVIFYwLCBWMCwgOA0KQkZEMDZDQTQgIDAwMEFCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwNkNCQw0KQkZEMDZDQTYgIDBDMDAwMDBBICAgU0xMIFpFUk8sIFQyLCAxDQpCRkQwNkNBOCAgICAgIDBDMDAgICBOT1ANCkJGRDA2Q0FBICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNkNBQyAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwNkNBRSAgOUMwQzMwODIgICBBRERJVSBBMCwgVjAsIC0yNTU4OA0KQkZEMDZDQjAgIDMwQTA5QzBDICAgTFdDMSBGMCwgMTI0NDgoVDQpDQpCRkQwNkNCMiAgMDI0QjMwQTAgICBBRERJVSBBMSwgWkVSTywgNTg3DQpCRkQwNkNCNiAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA2Q0I4ICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwNkNCQSAgICAgIDBDMDAgICBOT1ANCjU4ODogICAgICAgICAgICAgICAgIAkJCSggdm9pZCApIHhUYXNrUmVtb3ZlRnJvbVVub3JkZXJlZEV2ZW50TGlzdCggcHhUYXNrc1dhaXRpbmdGb3JCaXRzLT54TGlzdEVuZC5weE5leHQsIGV2ZW50VU5CTE9DS0VEX0RVRV9UT19CSVRfU0VUICk7DQpCRkQwNkNCQyAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNkNDMCAgICAgIDY5MjMgICBMVyBWMCwgMTIoVjApDQpCRkQwNkNDMiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDZDQzQgIDAyMDA0MUE1ICAgTFVJIEExLCAweDIwMA0KQkZEMDZDQzggIDIxNjI3N0U4ICAgSkFMUyB4VGFza1JlbW92ZUZyb21Vbm9yZGVyZWRFdmVudExpc3QNCkJGRDA2Q0NBICAwQzAwMjE2MiAgIExXQzIgVDMsIDMwNzIoVjApDQpCRkQwNkNDQyAgICAgIDBDMDAgICBOT1ANCjU4OTogICAgICAgICAgICAgICAgIAkJfQ0KNTkwOiAgICAgICAgICAgICAgICAgDQo1OTE6ICAgICAgICAgICAgICAgICAJCXZQb3J0RnJlZSggcHhFdmVudEJpdHMgKTsNCkJGRDA2Q0Q4ICAwMDEwRkM5RSAgIExXIEEwLCAxNihTOCkNCkJGRDA2Q0RDICAyRkVBNzdFOCAgIEpBTFMgdlBvcnRGcmVlDQpCRkQwNkNERSAgICAgIDJGRUEgICBBTkRJIEEzLCBBMiwgMHgyMA0KQkZEMDZDRTAgICAgICAwQzAwICAgTk9QDQo1OTI6ICAgICAgICAgICAgICAgICAJfQ0KNTkzOiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHhUYXNrUmVzdW1lQWxsKCk7DQpCRkQwNkNFMiAgMTU4RTc3RTggICBKQUxTIHhUYXNrUmVzdW1lQWxsDQpCRkQwNkNFNCAgMEMwMDE1OEUgICBMQlUgVDQsIDMwNzIoVDYpDQpCRkQwNkNFNiAgICAgIDBDMDAgICBOT1ANCjU5NDogICAgICAgICAgICAgICAgIH0NCkJGRDA2Q0U4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNkNFQSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNkNFQyAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNkNFRSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNkNGMCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNkNGMiAgICAgIDBDMDAgICBOT1ANCjU5NTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNTk2OiAgICAgICAgICAgICAgICAgDQo1OTc6ICAgICAgICAgICAgICAgICAvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkgLSBleGVjdXRlIGEgJ3NldCBiaXRzJyBjb21tYW5kIHRoYXQgd2FzIHBlbmRlZCBmcm9tDQo1OTg6ICAgICAgICAgICAgICAgICBhbiBpbnRlcnJ1cHQuICovDQo1OTk6ICAgICAgICAgICAgICAgICB2b2lkIHZFdmVudEdyb3VwU2V0Qml0c0NhbGxiYWNrKCB2b2lkICpwdkV2ZW50R3JvdXAsIGNvbnN0IHVpbnQzMl90IHVsQml0c1RvU2V0ICkNCjYwMDogICAgICAgICAgICAgICAgIHsNCkJGRDA5OTNDICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwOTkzRSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwOTk0MCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwOTk0MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDk5NDQgIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQ0KQkZEMDk5NDggIDAwMUNGOEJFICAgU1cgQTEsIDI4KFM4KQ0KNjAxOiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHhFdmVudEdyb3VwU2V0Qml0cyggcHZFdmVudEdyb3VwLCAoIEV2ZW50Qml0c190ICkgdWxCaXRzVG9TZXQgKTsNCkJGRDA5OTRDICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkNCkJGRDA5OTUwICAwMDFDRkNCRSAgIExXIEExLCAyOChTOCkNCkJGRDA5OTU0ICAxMkI0NzdFOCAgIEpBTFMgeEV2ZW50R3JvdXBTZXRCaXRzDQpCRkQwOTk1NiAgMEMwMDEyQjQgICBBRERJIFM1LCBTNCwgMzA3Mg0KQkZEMDk5NTggICAgICAwQzAwICAgTk9QDQo2MDI6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTk1QSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDk5NUMgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQ0KQkZEMDk5NUUgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQ0KQkZEMDk5NjAgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNA0KQkZEMDk5NjIgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDk5NjQgICAgICAwQzAwICAgTk9QDQo2MDM6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjYwNDogICAgICAgICAgICAgICAgIA0KNjA1OiAgICAgICAgICAgICAgICAgLyogRm9yIGludGVybmFsIHVzZSBvbmx5IC0gZXhlY3V0ZSBhICdjbGVhciBiaXRzJyBjb21tYW5kIHRoYXQgd2FzIHBlbmRlZCBmcm9tDQo2MDY6ICAgICAgICAgICAgICAgICBhbiBpbnRlcnJ1cHQuICovDQo2MDc6ICAgICAgICAgICAgICAgICB2b2lkIHZFdmVudEdyb3VwQ2xlYXJCaXRzQ2FsbGJhY2soIHZvaWQgKnB2RXZlbnRHcm91cCwgY29uc3QgdWludDMyX3QgdWxCaXRzVG9DbGVhciApDQo2MDg6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTk2OCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNA0KQkZEMDk5NkEgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQ0KQkZEMDk5NkMgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQ0KQkZEMDk5NkUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5OTcwICAwMDE4Rjg5RSAgIFNXIEEwLCAyNChTOCkNCkJGRDA5OTc0ICAwMDFDRjhCRSAgIFNXIEExLCAyOChTOCkNCjYwOTogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSB4RXZlbnRHcm91cENsZWFyQml0cyggcHZFdmVudEdyb3VwLCAoIEV2ZW50Qml0c190ICkgdWxCaXRzVG9DbGVhciApOw0KQkZEMDk5NzggIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDk5N0MgIDAwMUNGQ0JFICAgTFcgQTEsIDI4KFM4KQ0KQkZEMDk5ODAgIDM1MjI3N0U4ICAgSkFMUyB4RXZlbnRHcm91cENsZWFyQml0cw0KQkZEMDk5ODIgIDBDMDAzNTIyICAgTEhVIFQxLCAzMDcyKFYwKQ0KQkZEMDk5ODQgICAgICAwQzAwICAgTk9QDQo2MTA6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTk4NiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDk5ODggICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQ0KQkZEMDk5OEEgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQ0KQkZEMDk5OEMgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNA0KQkZEMDk5OEUgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDk5OTAgICAgICAwQzAwICAgTk9QDQo2MTE6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjYxMjogICAgICAgICAgICAgICAgIA0KNjEzOiAgICAgICAgICAgICAgICAgc3RhdGljIEJhc2VUeXBlX3QgcHJ2VGVzdFdhaXRDb25kaXRpb24oIGNvbnN0IEV2ZW50Qml0c190IHV4Q3VycmVudEV2ZW50Qml0cywgY29uc3QgRXZlbnRCaXRzX3QgdXhCaXRzVG9XYWl0Rm9yLCBjb25zdCBCYXNlVHlwZV90IHhXYWl0Rm9yQWxsQml0cyApDQo2MTQ6ICAgICAgICAgICAgICAgICB7DQpCRkQwODBGNCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNg0KQkZEMDgwRjYgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDgwRjggICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4MEZBICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkNCkJGRDA4MEZFICAwMDE0RjhCRSAgIFNXIEExLCAyMChTOCkNCkJGRDA4MTAyICAwMDE4RjhERSAgIFNXIEEyLCAyNChTOCkNCjYxNTogICAgICAgICAgICAgICAgIEJhc2VUeXBlX3QgeFdhaXRDb25kaXRpb25NZXQgPSBwZEZBTFNFOw0KQkZEMDgxMDYgIDAwMDBGODFFICAgU1cgWkVSTywgMChTOCkNCjYxNjogICAgICAgICAgICAgICAgIA0KNjE3OiAgICAgICAgICAgICAgICAgCWlmKCB4V2FpdEZvckFsbEJpdHMgPT0gcGRGQUxTRSApDQpCRkQwODEwQSAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwODEwRSAgMDAwQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwODEyQQ0KNjE4OiAgICAgICAgICAgICAgICAgCXsNCjYxOTogICAgICAgICAgICAgICAgIAkJLyogVGFzayBvbmx5IGhhcyB0byB3YWl0IGZvciBvbmUgYml0IHdpdGhpbiB1eEJpdHNUb1dhaXRGb3IgdG8gYmUNCjYyMDogICAgICAgICAgICAgICAgIAkJc2V0LiAgSXMgb25lIGFscmVhZHkgc2V0PyAqLw0KNjIxOiAgICAgICAgICAgICAgICAgCQlpZiggKCB1eEN1cnJlbnRFdmVudEJpdHMgJiB1eEJpdHNUb1dhaXRGb3IgKSAhPSAoIEV2ZW50Qml0c190ICkgMCApDQpCRkQwODExMiAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwODExNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwODExQSAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA4MTFDICAwMDEyNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4MTQ0DQo2MjI6ICAgICAgICAgICAgICAgICAJCXsNCjYyMzogICAgICAgICAgICAgICAgIAkJCXhXYWl0Q29uZGl0aW9uTWV0ID0gcGRUUlVFOw0KQkZEMDgxMjAgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA4MTIyICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQ0KQkZEMDgxMjYgICAgICBDQzBFICAgQiAweEJGRDA4MTQ0DQpCRkQwODEyOCAgICAgIDBDMDAgICBOT1ANCjYyNDogICAgICAgICAgICAgICAgIAkJfQ0KNjI1OiAgICAgICAgICAgICAgICAgCQllbHNlDQo2MjY6ICAgICAgICAgICAgICAgICAJCXsNCjYyNzogICAgICAgICAgICAgICAgIAkJCW10Q09WRVJBR0VfVEVTVF9NQVJLRVIoKTsNCjYyODogICAgICAgICAgICAgICAgIAkJfQ0KNjI5OiAgICAgICAgICAgICAgICAgCX0NCjYzMDogICAgICAgICAgICAgICAgIAllbHNlDQo2MzE6ICAgICAgICAgICAgICAgICAJew0KNjMyOiAgICAgICAgICAgICAgICAgCQkvKiBUYXNrIGhhcyB0byB3YWl0IGZvciBhbGwgdGhlIGJpdHMgaW4gdXhCaXRzVG9XYWl0Rm9yIHRvIGJlIHNldC4NCjYzMzogICAgICAgICAgICAgICAgIAkJQXJlIHRoZXkgc2V0IGFscmVhZHk/ICovDQo2MzQ6ICAgICAgICAgICAgICAgICAJCWlmKCAoIHV4Q3VycmVudEV2ZW50Qml0cyAmIHV4Qml0c1RvV2FpdEZvciApID09IHV4Qml0c1RvV2FpdEZvciApDQpCRkQwODEyQSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwODEyRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwODEzMiAgICAgIDQ0OUEgICBBTkQxNiBWMSwgVjANCkJGRDA4MTM0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA4MTM4ICAwMDA0QjQ0MyAgIEJORSBWMSwgVjAsIDB4QkZEMDgxNDQNCkJGRDA4MTNBICAwQzAwMDAwNCAgIFNMTCBaRVJPLCBBMCwgMQ0KQkZEMDgxM0MgICAgICAwQzAwICAgTk9QDQo2MzU6ICAgICAgICAgICAgICAgICAJCXsNCjYzNjogICAgICAgICAgICAgICAgIAkJCXhXYWl0Q29uZGl0aW9uTWV0ID0gcGRUUlVFOw0KQkZEMDgxM0UgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA4MTQwICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQ0KNjM3OiAgICAgICAgICAgICAgICAgCQl9DQo2Mzg6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjYzOTogICAgICAgICAgICAgICAgIAkJew0KNjQwOiAgICAgICAgICAgICAgICAgCQkJbXRDT1ZFUkFHRV9URVNUX01BUktFUigpOw0KNjQxOiAgICAgICAgICAgICAgICAgCQl9DQo2NDI6ICAgICAgICAgICAgICAgICAJfQ0KNjQzOiAgICAgICAgICAgICAgICAgDQo2NDQ6ICAgICAgICAgICAgICAgICAJcmV0dXJuIHhXYWl0Q29uZGl0aW9uTWV0Ow0KQkZEMDgxNDQgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQo2NDU6ICAgICAgICAgICAgICAgICB9DQpCRkQwODE0OCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDgxNEEgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDgxNEMgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNg0KQkZEMDgxNEUgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDgxNTAgICAgICAwQzAwICAgTk9QDQo2NDY6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjY0NzogICAgICAgICAgICAgICAgIA0KNjQ4OiAgICAgICAgICAgICAgICAgI2lmICggKCBjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSApICYmICggSU5DTFVERV94VGltZXJQZW5kRnVuY3Rpb25DYWxsID09IDEgKSAmJiAoIGNvbmZpZ1VTRV9USU1FUlMgPT0gMSApICkNCjY0OTogICAgICAgICAgICAgICAgIA0KNjUwOiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeEV2ZW50R3JvdXBTZXRCaXRzRnJvbUlTUiggRXZlbnRHcm91cEhhbmRsZV90IHhFdmVudEdyb3VwLCBjb25zdCBFdmVudEJpdHNfdCB1eEJpdHNUb1NldCwgQmFzZVR5cGVfdCAqcHhIaWdoZXJQcmlvcml0eVRhc2tXb2tlbiApDQo2NTE6ICAgICAgICAgICAgICAgICAJew0KNjUyOiAgICAgICAgICAgICAgICAgCUJhc2VUeXBlX3QgeFJldHVybjsNCjY1MzogICAgICAgICAgICAgICAgIA0KNjU0OiAgICAgICAgICAgICAgICAgCQl0cmFjZUVWRU5UX0dST1VQX1NFVF9CSVRTX0ZST01fSVNSKCB4RXZlbnRHcm91cCwgdXhCaXRzVG9TZXQgKTsNCjY1NTogICAgICAgICAgICAgICAgIAkJeFJldHVybiA9IHhUaW1lclBlbmRGdW5jdGlvbkNhbGxGcm9tSVNSKCB2RXZlbnRHcm91cFNldEJpdHNDYWxsYmFjaywgKCB2b2lkICogKSB4RXZlbnRHcm91cCwgKCB1aW50MzJfdCApIHV4Qml0c1RvU2V0LCBweEhpZ2hlclByaW9yaXR5VGFza1dva2VuICk7DQo2NTY6ICAgICAgICAgICAgICAgICANCjY1NzogICAgICAgICAgICAgICAgIAkJcmV0dXJuIHhSZXR1cm47DQo2NTg6ICAgICAgICAgICAgICAgICAJfQ0KNjU5OiAgICAgICAgICAgICAgICAgDQo2NjA6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjY2MTogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNjYyOiAgICAgICAgICAgICAgICAgDQo2NjM6ICAgICAgICAgICAgICAgICAjaWYgKGNvbmZpZ1VTRV9UUkFDRV9GQUNJTElUWSA9PSAxKQ0KNjY0OiAgICAgICAgICAgICAgICAgDQo2NjU6ICAgICAgICAgICAgICAgICAJVUJhc2VUeXBlX3QgdXhFdmVudEdyb3VwR2V0TnVtYmVyKCB2b2lkKiB4RXZlbnRHcm91cCApDQo2NjY6ICAgICAgICAgICAgICAgICAJew0KNjY3OiAgICAgICAgICAgICAgICAgCVVCYXNlVHlwZV90IHhSZXR1cm47DQo2Njg6ICAgICAgICAgICAgICAgICAJRXZlbnRHcm91cF90ICpweEV2ZW50Qml0cyA9ICggRXZlbnRHcm91cF90ICogKSB4RXZlbnRHcm91cDsNCjY2OTogICAgICAgICAgICAgICAgIA0KNjcwOiAgICAgICAgICAgICAgICAgCQlpZiggeEV2ZW50R3JvdXAgPT0gTlVMTCApDQo2NzE6ICAgICAgICAgICAgICAgICAJCXsNCjY3MjogICAgICAgICAgICAgICAgIAkJCXhSZXR1cm4gPSAwOw0KNjczOiAgICAgICAgICAgICAgICAgCQl9DQo2NzQ6ICAgICAgICAgICAgICAgICAJCWVsc2UNCjY3NTogICAgICAgICAgICAgICAgIAkJew0KNjc2OiAgICAgICAgICAgICAgICAgCQkJeFJldHVybiA9IHB4RXZlbnRCaXRzLT51eEV2ZW50R3JvdXBOdW1iZXI7DQo2Nzc6ICAgICAgICAgICAgICAgICAJCX0NCjY3ODogICAgICAgICAgICAgICAgIA0KNjc5OiAgICAgICAgICAgICAgICAgCQlyZXR1cm4geFJldHVybjsNCjY4MDogICAgICAgICAgICAgICAgIAl9DQo2ODE6ICAgICAgICAgICAgICAgICANCjY4MjogICAgICAgICAgICAgICAgICNlbmRpZg0KNjgzOiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L3N0YXJ0dXAvbXBsYWIvb25fcmVzZXQuYyAgDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIG9uX3Jlc2V0LmMNCjIyOiAgICAgICAgICAgICAgICAgICAqTUVDMTR4eCBYQzMyIE0xNEsgU3RhcnR1cCBjb2RlIF9vbl9yZXNldCBoYW5kbGVyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBTdGFydHVwDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICANCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9wY3IuaCINCjMzOiAgICAgICAgICAgICAgICAgIA0KMzQ6ICAgICAgICAgICAgICAgICAgLyoNCjM1OiAgICAgICAgICAgICAgICAgICAqIEZyb20gbGlua2VyIGNvbW1hbmQgZmlsZQ0KMzY6ICAgICAgICAgICAgICAgICAgICovDQozNzogICAgICAgICAgICAgICAgICBleHRlcm4gdWludDMyX3QgX2ViYXNlX2FkZHJlc3NbXTsNCjM4OiAgICAgICAgICAgICAgICAgIA0KMzk6ICAgICAgICAgICAgICAgICAgDQo0MDogICAgICAgICAgICAgICAgICAvKiogX29uX3Jlc2V0IC0gVmVyeSBlYXJseSBIVyBpbml0aWFsaXphdGlvbi4NCjQxOiAgICAgICAgICAgICAgICAgICAqIEBub3RlIFhDMzIgc3RhcnR1cCBjb2RlIGhhcyBpbml0aWFsaXplZCBTUCAmIEdQLiBObyBvdGhlcg0KNDI6ICAgICAgICAgICAgICAgICAgICogQyBmZWF0dXJlcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgKGJlZm9yZSAuYnNzIGNsZWFyIGFuZA0KNDM6ICAgICAgICAgICAgICAgICAgICogZ2xvYmFsIGRhdGEgaW5pdC4pIE5PVEU6IE1JUFMgTTE0SyBpcyBzdGlsbCBpbiBCb290LVN0cmFwIA0KNDQ6ICAgICAgICAgICAgICAgICAgICogbW9kZSBhbmQgRUJBU0UgaGFzIG5vdCBiZWVuIHByb2dyYW1tZWQuIEFueSBleGNlcHRpb24gb3IgDQo0NTogICAgICAgICAgICAgICAgICAgKiBpbnRlcnJ1cHRzIHdpbGwgdmVjdG9yIHRvIHRoZSBCRVYgRXhjZXB0aW9uIGhhbmRsZXIhIA0KNDY6ICAgICAgICAgICAgICAgICAgICovDQo0NzogICAgICAgICAgICAgICAgICB2b2lkDQo0ODogICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChub21pcHMxNikpIF9vbl9yZXNldCAodm9pZCkNCjQ5OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA5MUNDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5MUNFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDkxRDAgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjUwOiAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgSlRBRyAqLw0KNTE6ICAgICAgICAgICAgICAgICAgICAgIEVDU19SRUctPkpUQUdfRU5BQkxFIHw9IDF1Ow0KQkZEMDkxRDIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDA5MUQ2ICBGQzIwNTA0MiAgIE9SSSBWMCwgVjAsIC05OTINCkJGRDA5MUQ4ICA0MUEzRkMyMCAgIExXIEFULCAxNjgwMyhaRVJPKQ0KQkZEMDkxREEgIEEwMDA0MUEzICAgTFVJIFYxLCAweEEwMDANCkJGRDA5MURFICBGQzIwNTA2MyAgIE9SSSBWMSwgVjEsIC05OTINCkJGRDA5MUUwICA2OUIwRkMyMCAgIExXIEFULCAyNzA1NihaRVJPKQ0KQkZEMDkxRTIgICAgICA2OUIwICAgTFcgVjEsIDAoVjEpDQpCRkQwOTFFNCAgMDAwMTUwNjMgICBPUkkgVjEsIFYxLCAxDQpCRkQwOTFFOCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjUyOiAgICAgICAgICAgICAgICAgIA0KNTM6ICAgICAgICAgICAgICAgICAgICAgIC8qIERpc2FibGUgV0RUICovDQo1NDogICAgICAgICAgICAgICAgICAgICAgV0RULT5DT05UUk9MID0gMHU7DQpCRkQwOTFFQSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDkxRUUgIDA0MDA1MDQyICAgT1JJIFYwLCBWMCwgMTAyNA0KQkZEMDkxRjAgICAgICAwNDAwICAgQUREVSBTMCwgUzAsIFMwDQpCRkQwOTFGMiAgICAgIDg4MjQgICBTQiBTMCwgNChWMCkNCjU1OiAgICAgICAgICAgICAgICAgIA0KNTY6ICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBDUFUgY2xvY2sgZGl2aWRlciBzcGVjaWZpZWQgaW4gYXBwY2ZnLmggKi8NCjU3OiAgICAgICAgICAgICAgICAgICAgICBQQ1ItPlBST0NfQ0xPQ0tfQ05UUkwgPSAoIFBDUl9DTE9DS19ESVZJREVSICk7DQpCRkQwOTFGNCAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOA0KQkZEMDkxRjggIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2DQpCRkQwOTFGQyAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDkxRkUgICAgICBFOUE4ICAgU1cgVjEsIDMyKFYwKQ0KNTg6ICAgICAgICAgICAgICAgICAgICAgIF9fRUhCKCk7DQpCRkQwOTIwMCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDkyMDIgIDAwMDAxODAwICAgU0IgWkVSTywgMChaRVJPKQ0KNTk6ICAgICAgICAgICAgICAgICAgICAgIENQVV9OT1AoKTsNCkJGRDA5MjA0ICAwODAwMDAwMCAgIFNTTk9QDQpCRkQwOTIwNiAgICAgIDA4MDAgICBMQlUgUzAsIDAoUzApDQo2MDogICAgICAgICAgICAgICAgICANCjYxOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA5MjA4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTIwQSAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA5MjBDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5MjBFICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KNjI6ICAgICAgICAgICAgICAgICAgDQo2MzogICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvc3RhcnR1cC9tcGxhYi9kZWZhdWx0LW9uLWJvb3RzdHJhcC5jDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAgKg0KMzogICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgIERlZmF1bHQgX29uX2Jvb3RzdHJhcCBJbXBsZW1lbnRhdGlvbg0KNDogICAgICAgICAgICAgICAgICAgICoNCjU6ICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjY6ICAgICAgICAgICAgICAgICAgICAqIEZpbGVuYW1lOiAgICAgICAgZGVmYXVsdC1vbi1ib290c3RyYXAuYw0KNzogICAgICAgICAgICAgICAgICAgICoNCjg6ICAgICAgICAgICAgICAgICAgICAqIFByb2Nlc3NvcjogICAgICAgUElDMzINCjk6ICAgICAgICAgICAgICAgICAgICAqDQoxMDogICAgICAgICAgICAgICAgICAgKiBDb21waWxlcjogICAgICAgIE1QTEFCIEMgQ29tcGlsZXIgZm9yIFBJQzMyIE1DVXMNCjExOiAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgTVBMQUIgSURFDQoxMjogICAgICAgICAgICAgICAgICAgKiBDb21wYW55OiAgICAgICAgIE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4NCjEzOiAgICAgICAgICAgICAgICAgICAqDQoxNDogICAgICAgICAgICAgICAgICAgKiBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudA0KMTU6ICAgICAgICAgICAgICAgICAgICoNCjE2OiAgICAgICAgICAgICAgICAgICAqIFRoZSBzb2Z0d2FyZSBzdXBwbGllZCBoZXJld2l0aCBieSBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmNvcnBvcmF0ZWQNCjE3OiAgICAgICAgICAgICAgICAgICAqICh0aGUgJ0NvbXBhbnknKSBmb3IgaXRzIFBJQzMyL1BJQzI0RiBNaWNyb2NvbnRyb2xsZXIgaXMgaW50ZW5kZWQNCjE4OiAgICAgICAgICAgICAgICAgICAqIGFuZCBzdXBwbGllZCB0byB5b3UsIHRoZSBDb21wYW55J3MgY3VzdG9tZXIsIGZvciB1c2Ugc29sZWx5IGFuZA0KMTk6ICAgICAgICAgICAgICAgICAgICogZXhjbHVzaXZlbHkgb24gTWljcm9jaGlwIFBJQzMyL1BJQzI0RiBNaWNyb2NvbnRyb2xsZXIgcHJvZHVjdHMuDQoyMDogICAgICAgICAgICAgICAgICAgKiBUaGUgc29mdHdhcmUgaXMgb3duZWQgYnkgdGhlIENvbXBhbnkgYW5kL29yIGl0cyBzdXBwbGllciwgYW5kIGlzDQoyMTogICAgICAgICAgICAgICAgICAgKiBwcm90ZWN0ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3cy4gQWxsIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQuDQoyMjogICAgICAgICAgICAgICAgICAgKiBBbnkgdXNlIGluIHZpb2xhdGlvbiBvZiB0aGUgZm9yZWdvaW5nIHJlc3RyaWN0aW9ucyBtYXkgc3ViamVjdCB0aGUNCjIzOiAgICAgICAgICAgICAgICAgICAqIHVzZXIgdG8gY3JpbWluYWwgc2FuY3Rpb25zIHVuZGVyIGFwcGxpY2FibGUgbGF3cywgYXMgd2VsbCBhcyB0bw0KMjQ6ICAgICAgICAgICAgICAgICAgICogY2l2aWwgbGlhYmlsaXR5IGZvciB0aGUgYnJlYWNoIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzDQoyNTogICAgICAgICAgICAgICAgICAgKiBsaWNlbnNlLg0KMjY6ICAgICAgICAgICAgICAgICAgICoNCjI3OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgSU4gQU4gIkFTIElTIiBDT05ESVRJT04uIE5PIFdBUlJBTlRJRVMsDQoyODogICAgICAgICAgICAgICAgICAgKiBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRA0KMjk6ICAgICAgICAgICAgICAgICAgICogVE8sIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEENCjMwOiAgICAgICAgICAgICAgICAgICAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLiBUSEUgQ09NUEFOWSBTSEFMTCBOT1QsDQozMTogICAgICAgICAgICAgICAgICAgKiBJTiBBTlkgQ0lSQ1VNU1RBTkNFUywgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBJTkNJREVOVEFMIE9SDQozMjogICAgICAgICAgICAgICAgICAgKiBDT05TRVFVRU5USUFMIERBTUFHRVMsIEZPUiBBTlkgUkVBU09OIFdIQVRTT0VWRVIuDQozMzogICAgICAgICAgICAgICAgICAgKg0KMzQ6ICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMzU6ICAgICAgICAgICAgICAgICAgLyogVGhpcyBpcyBhIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiBhbiBfb25fYm9vdHN0cmFwKCkgZnVuY3Rpb24uDQozNjogICAgICAgICAgICAgICAgICAgKiBJdCBkb2VzIG5vdGhpbmcgYW5kIGp1c3QgZ29lcyByZXR1cm5zLiBJZiB0aGUgdXNlcg0KMzc6ICAgICAgICAgICAgICAgICAgICogYXBwbGljYXRpb24gc3VwcGxpZXMgYSBoYW5kbGVyIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGJlDQozODogICAgICAgICAgICAgICAgICAgKiByZWZlcmVuY2VkIGFuZCB0aHVzIG5vdCBwdWxsZWQgaW4gZnJvbSB0aGUgbGlicmFyeS4NCjM5OiAgICAgICAgICAgICAgICAgICAqLw0KNDA6ICAgICAgICAgICAgICAgICAgdm9pZCANCjQxOiAgICAgICAgICAgICAgICAgIF9vbl9ib290c3RyYXAgKHZvaWQpDQo0MjogICAgICAgICAgICAgICAgICB7DQpCRkQwOUVFNCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUVFNiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5RUU4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo0MzogICAgICAgICAgICAgICAgICB9DQpCRkQwOUVFQSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlFRUMgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOUVFRSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA5RUYwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5RUYyICAgICAgMEMwMCAgIE5PUA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9tZWMxNHh4X3RpbWVycy5jICAtLS0tLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogqSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIA0KMjI6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIG1lYzE0eHhfdGltZXJzLmMNCjIzOiAgICAgICAgICAgICAgICAgICAqTUVDMTR4eCBUaW1lcnMgDQoyNDogICAgICAgICAgICAgICAgICAgKi8NCjI1OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBQZXJpcGhlcmFscyBUaW1lcnMNCjI2OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjc6ICAgICAgICAgICAgICAgICAgICovDQoyODogICAgICAgICAgICAgICAgICANCjI5OiAgICAgICAgICAgICAgICAgIA0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3Bjci5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90aW1lcnMuaCINCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgDQozNzogICAgICAgICAgICAgICAgICAvLyBwYWlycyBvZiBieXRlcyAoc2xlZXAgcmVnLCBiaXQgcG9zaXRpb24pDQozODogICAgICAgICAgICAgICAgICAvLyBzbGVlcCByZWcgPSAwIGZvciBFQ19TTEVFUF9FTiBvciAxIGZvciBFQ19TTEVFUF9FTjINCjM5OiAgICAgICAgICAgICAgICAgIC8vDQo0MDogICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnRtcl9zbGVlcF9pbmZvX3Mgew0KNDE6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc2xwX3JlZzsNCjQyOiAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJpdF9wb3M7DQo0MzogICAgICAgICAgICAgICAgICB9Ow0KNDQ6ICAgICAgICAgICAgICAgICAgDQo0NTogICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0bXJfc2xlZXBfaW5mb19zIGJ0bXJfc2xwX2luZm9bQlRNUl9NQVhfSU5TVEFOQ0VdID0gew0KNDY6ICAgICAgICAgICAgICAgICAgICAgIHsgMCwgUENSX0VDX1RJTUVSMF9TTFBfQklUUE9TIH0sDQo0NzogICAgICAgICAgICAgICAgICAgICAgeyAwLCBQQ1JfRUNfVElNRVIxX1NMUF9CSVRQT1MgfSwNCjQ4OiAgICAgICAgICAgICAgICAgICAgICB7IDEsIFBDUl9FQzJfVElNRVIyX1NMUF9CSVRQT1MgfSwNCjQ5OiAgICAgICAgICAgICAgICAgICAgICB7IDEsIFBDUl9FQzJfVElNRVIzX1NMUF9CSVRQT1MgfQ0KNTA6ICAgICAgICAgICAgICAgICAgIH07DQo1MTogICAgICAgICAgICAgICAgICANCjUyOiAgICAgICAgICAgICAgICAgIA0KNTM6ICAgICAgICAgICAgICAgICAgI2lmZGVmIE1FQzE0WFhfQlRJTUVSX0NIRUNLX0lEDQo1NDogICAgICAgICAgICAgICAgICANCjU1OiAgICAgICAgICAgICAgICAgIC8qKg0KNTY6ICAgICAgICAgICAgICAgICAgICogdG1yX3ZhbGlkIC0gTG9jYWwgaGVscGVyIHRoYXQgY2hlY2tzIGlmIGxvZ2ljYWwgVGltZXIgSUQgaXMgDQo1NzogICAgICAgICAgICAgICAgICAgKiB2YWxpZC4gDQo1ODogICAgICAgICAgICAgICAgICAgKiANCjU5OiAgICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjYwOiAgICAgICAgICAgICAgICAgICAqIA0KNjE6ICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCAwLWJhc2VkIFRpbWVyIElEDQo2MjogICAgICAgICAgICAgICAgICAgKiANCjYzOiAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4gdWludDhfdCBOb24temVybyhWQUxJRCksIDAoSW52YWxpZCkNCjY0OiAgICAgICAgICAgICAgICAgICAqLw0KNjU6ICAgICAgICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgYnRtcl92YWxpZCh1aW50OF90IHRtcl9pZCkNCjY2OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA5QTQ0ICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5QTQ2ICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDlBNDggICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5QTRBICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwOUE0QyAgMDAwODE4NUUgICBTQiBWMCwgOChTOCkNCjY3OiAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRtcl9pZCA8IChCVE1SX0lEX01BWCApICkgew0KQkZEMDlBNTAgIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQ0KQkZEMDlBNTQgIDAwMDRCMDQyICAgU0xUSVUgVjAsIFYwLCA0DQpCRkQwOUE1OCAgMDAwMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOUE2Mg0KNjg6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCkJGRDA5QTVDICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwOUE1RSAgICAgIENDMDIgICBCIDB4QkZEMDlBNjQNCkJGRDA5QTYwICAgICAgMEMwMCAgIE5PUA0KNjk6ICAgICAgICAgICAgICAgICAgICAgIH0NCjcwOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQpCRkQwOUE2MiAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQo3MTogICAgICAgICAgICAgICAgICB9DQpCRkQwOUE2NCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlBNjYgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOUE2OCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA5QTZBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5QTZDICAgICAgMEMwMCAgIE5PUA0KNzI6ICAgICAgICAgICAgICAgICAgDQo3MzogICAgICAgICAgICAgICAgICAjZWxzZQ0KNzQ6ICAgICAgICAgICAgICAgICAgDQo3NTogICAgICAgICAgICAgICAgICAvKioNCjc2OiAgICAgICAgICAgICAgICAgICAqIEBicmllZiAtIFRoaXMgdmVyc2lvbiBvZiB0bXJfdmFsaWQgc2tpcHMgY2hlY2tpbmcgYWx3YXlzIA0KNzc6ICAgICAgICAgICAgICAgICAgICogICAgICAgIHJldHVybmluZyBUUlVFLiBDb21waWxlciBtYXkgb3B0aW1pemUgaXQgb3V0Lg0KNzg6ICAgICAgICAgICAgICAgICAgICogDQo3OTogICAgICAgICAgICAgICAgICAgKi8NCjgwOiAgICAgICAgICAgICAgICAgIHN0YXRpYyB1aW50OF90IGJ0bXJfdmFsaWQodWludDhfdCB0bXJfaWQpIA0KODE6ICAgICAgICAgICAgICAgICAgeyANCjgyOiAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgdG1yX2lkOw0KODM6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyANCjg0OiAgICAgICAgICAgICAgICAgIH0NCjg1OiAgICAgICAgICAgICAgICAgIA0KODY6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo4NzogICAgICAgICAgICAgICAgICANCjg4OiAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGJ0bXJfZ2V0X2h3X2FkZHIodWludDhfdCBidG1yX2lkKQ0KODk6ICAgICAgICAgICAgICAgICAgew0KQkZEMDlBNzAgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOA0KQkZEMDlBNzIgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApDQpCRkQwOUE3NCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlBNzYgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTANCkJGRDA5QTc4ICAwMDA4MTg1RSAgIFNCIFYwLCA4KFM4KQ0KOTA6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodWludDMyX3QpKEJUTVIwX0JBU0UpICsgDQpCRkQwOUE4MiAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDlBODYgIDBDMDA1MDQyICAgT1JJIFYwLCBWMCwgMzA3Mg0KQkZEMDlBODggICAgICAwQzAwICAgTk9QDQpCRkQwOUE4QSAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCjkxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoYnRtcl9pZCkgPDwgKEJUTVJfSU5TVEFOQ0VfQklUUE9TKSk7DQpCRkQwOUE3QyAgMDAwODE0NUUgICBMQlUgVjAsIDgoUzgpDQpCRkQwOUE4MCAgICAgIDI1QUEgICBTTEwgVjEsIFYwLCA1DQo5MjogICAgICAgICAgICAgICAgICB9DQpCRkQwOUE4QyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlBOEUgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOUE5MCAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA5QTkyICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5QTk0ICAgICAgMEMwMCAgIE5PUA0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICAvKioNCjk1OiAgICAgICAgICAgICAgICAgICAqIGJ0bXJfc2xlZXBfZW4gLSBFbmFibGUvRGlzYWJsZSBjbG9jayBnYXRpbmcgb24gaWRsZSBvZiBhIA0KOTY6ICAgICAgICAgICAgICAgICAgICogdGltZXIgDQo5NzogICAgICAgICAgICAgICAgICAgKiANCjk4OiAgICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSAoOC8xNi8yMDEzKQ0KOTk6ICAgICAgICAgICAgICAgICAgICogDQoxMDA6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIHplcm8gYmFzZWQgdGltZXIgSUQuDQoxMDE6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gcHdyX29uIGJvb2xlYW4gdHJ1ZT1PTiwgZmFsc2U9T0ZGDQoxMDI6ICAgICAgICAgICAgICAgICAgKi8NCjEwMzogICAgICAgICAgICAgICAgIHZvaWQgYnRtcl9zbGVlcF9lbih1aW50OF90IHRtcl9pZCwgdWludDhfdCBzbGVlcF9lbikNCjEwNDogICAgICAgICAgICAgICAgIHsNCkJGRDA1REMwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNURDMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNURDNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNURDNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDVEQzggICAgICAwQzY0ICAgTU9WRSBWMSwgQTANCkJGRDA1RENBICAgICAgMEM0NSAgIE1PVkUgVjAsIEExDQpCRkQwNURDQyAgMDAyMDE4N0UgICBTQiBWMSwgMzIoUzgpDQpCRkQwNUREMCAgMDAyNDE4NUUgICBTQiBWMCwgMzYoUzgpDQoxMDU6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2xlZXBfbWFzazsNCjEwNjogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2b2xhdGlsZSAqIHA7DQoxMDc6ICAgICAgICAgICAgICAgICAgICAgDQoxMDg6ICAgICAgICAgICAgICAgICAgICAgc2xlZXBfbWFzayA9IDB1bDsNCkJGRDA1REQ0ICAwMDE0RjgxRSAgIFNXIFpFUk8sIDIwKFM4KQ0KMTA5OiAgICAgICAgICAgICAgICAgICAgIGlmICggYnRtcl92YWxpZCh0bXJfaWQpICkgew0KQkZEMDVERDggIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA1RERDICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNURERSAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQNCkJGRDA1REUwICAgICAgNEQyMiAgIEFERElVIFQxLCBUMSwgMQ0KQkZEMDVERTIgICAgICAwQzAwICAgTk9QDQpCRkQwNURFNCAgMDA0MDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNUU2OA0KMTEwOiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnRtcl9zbHBfaW5mb1t0bXJfaWRdLnNscF9yZWcpIHsNCkJGRDA1REU4ICAwMDIwMTQ3RSAgIExCVSBWMSwgMzIoUzgpDQpCRkQwNURFQyAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDVERUUgIDI1QjJCRkQxICAgTERDMSBGMzAsIDk2NTAoUzEpDQpCRkQwNURGMCAgICAgIDI1QjIgICBTTEwgVjEsIFYxLCAxDQpCRkQwNURGMiAgOUYyNDMwNDIgICBBRERJVSBWMCwgVjAsIC0yNDc5Ng0KQkZEMDVERjQgIDA1MjY5RjI0ICAgTFdDMSBGMjUsIDEzMTgoQTApDQpCRkQwNURGNiAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA1REY4ICAgICAgMDkyMCAgIExCVSBWMCwgMChWMCkNCkJGRDA1REZBICAwMDA4NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA1RTBFDQoxMTE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKHVpbnQzMl90IHZvbGF0aWxlICopJihQQ1ItPkVDX1NMRUVQX0VOMik7DQpCRkQwNURGRSAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOA0KQkZEMDVFMDIgIDAxMjQ1MDQyICAgT1JJIFYwLCBWMCwgMjkyDQpCRkQwNUUwNiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwNUUwOCAgQ0MwNzAwMTAgICBCUkVBSw0KQkZEMDVFMEEgICAgICBDQzA3ICAgQiAweEJGRDA1RTFBDQpCRkQwNUUwQyAgICAgIDBDMDAgICBOT1ANCjExMjogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCjExMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAodWludDMyX3Qgdm9sYXRpbGUgKikmKFBDUi0+RUNfU0xFRVBfRU4pOw0KQkZEMDVFMEUgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgNCkJGRDA1RTEyICAwMTA4NTA0MiAgIE9SSSBWMCwgVjAsIDI2NA0KQkZEMDVFMTYgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTE0OiAgICAgICAgICAgICAgICAgICAgICAgICB9DQoxMTU6ICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwX21hc2sgPSAoMXVsIDw8IGJ0bXJfc2xwX2luZm9bdG1yX2lkXS5iaXRfcG9zKTsNCkJGRDA1RTFBICAwMDIwMTQ3RSAgIExCVSBWMSwgMzIoUzgpDQpCRkQwNUUxRSAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDVFMjAgIDI1QjJCRkQxICAgTERDMSBGMzAsIDk2NTAoUzEpDQpCRkQwNUUyMiAgICAgIDI1QjIgICBTTEwgVjEsIFYxLCAxDQpCRkQwNUUyNCAgOUYyNDMwNDIgICBBRERJVSBWMCwgVjAsIC0yNDc5Ng0KQkZEMDVFMjYgIDA1MjY5RjI0ICAgTFdDMSBGMjUsIDEzMTgoQTApDQpCRkQwNUUyOCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA1RTJBICAgICAgMDkyMSAgIExCVSBWMCwgMShWMCkNCkJGRDA1RTJDICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwNUUyRSAgMTAxMDAwNjIgICBTTExWIFYwLCBWMCwgVjENCkJGRDA1RTMwICBGODVFMTAxMCAgIEFEREkgWkVSTywgUzAsIC0xOTU0DQpCRkQwNUUzMiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoxMTY6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbGVlcF9lbikgew0KQkZEMDVFMzYgIDAwMjQxNDVFICAgTEJVIFYwLCAzNihTOCkNCkJGRDA1RTNBICAwMDBCNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA1RTU0DQoxMTc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCB8PSAoc2xlZXBfbWFzayk7DQpCRkQwNUUzRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNUU0MiAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDA1RTQ0ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA1RTQ4ICAgICAgNDREQSAgIE9SMTYgVjEsIFYwDQpCRkQwNUU0QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNUU0RSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCkJGRDA1RTUwICAgICAgQ0MwQiAgIEIgMHhCRkQwNUU2OA0KQkZEMDVFNTIgICAgICAwQzAwICAgTk9QDQoxMTg6ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoxMTk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCAmPSB+KHNsZWVwX21hc2spOw0KQkZEMDVFNTQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDVFNTggICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwNUU1QSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNUU1RSAgICAgIDQ0MTIgICBOT1QxNiBWMCwgVjANCkJGRDA1RTYwICAgICAgNDQ5QSAgIEFORDE2IFYxLCBWMA0KQkZEMDVFNjIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDVFNjYgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoxMjA6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjEyMTogICAgICAgICAgICAgICAgICAgICB9DQoxMjI6ICAgICAgICAgICAgICAgICB9DQpCRkQwNUU2OCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDVFNkEgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDVFNkMgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDVFNkUgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDVFNzAgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDVFNzIgICAgICAwQzAwICAgTk9QDQoxMjM6ICAgICAgICAgICAgICAgICANCjEyNDogICAgICAgICAgICAgICAgIC8qKg0KMTI1OiAgICAgICAgICAgICAgICAgICogYnRtcl9yZXNldCAtIFBlZm9ybSBzb2Z0IHJlc2V0IG9mIHNwZWNpZmllZCB0aW1lci4NCjEyNjogICAgICAgICAgICAgICAgICAqIA0KMTI3OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMTI4OiAgICAgICAgICAgICAgICAgICogDQoxMjk6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIDAtYmFzZWQgVGltZXIgSUQgDQoxMzA6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBTb2Z0IHJlc2V0IHNldCBhbGwgcmVnaXN0ZXJzIHRvIFBPUiB2YWx1ZXMuDQoxMzE6ICAgICAgICAgICAgICAgICAgKiBTcGlucyAyNTYgdGltZXMgd2FpdGluZyBvbiBoYXJkd2FyZSB0byBjbGVhciByZXNldCBiaXQuIA0KMTMyOiAgICAgICAgICAgICAgICAgICovDQoxMzM6ICAgICAgICAgICAgICAgICB2b2lkIGJ0bXJfcmVzZXQodWludDhfdCB0bXJfaWQpDQoxMzQ6ICAgICAgICAgICAgICAgICB7DQpCRkQwNzk4OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDc5OEEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDc5OEMgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDc5OEUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA3OTkwICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwNzk5MiAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpDQoxMzU6ICAgICAgICAgICAgICAgICAgICBCVE1SX1R5cGVEZWYgKiBwOw0KMTM2OiAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2FpdF9jbnQ7DQoxMzc6ICAgICAgICAgICAgICAgICANCjEzODogICAgICAgICAgICAgICAgICAgIGlmIChidG1yX3ZhbGlkKHRtcl9pZCkpIHsNCkJGRDA3OTk2ICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwNzk5QSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDc5OUMgIDREMjI3N0U4ICAgSkFMUyBidG1yX3ZhbGlkDQpCRkQwNzk5RSAgICAgIDREMjIgICBBRERJVSBUMSwgVDEsIDENCkJGRDA3OUEwICAgICAgMEMwMCAgIE5PUA0KQkZEMDc5QTIgIDAwMjU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDc5RjANCjEzOTogICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDc5QTYgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA3OUFBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNzlBQyAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHINCkJGRDA3OUFFICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQNCkJGRDA3OUIwICAgICAgMEMwMCAgIE5PUA0KQkZEMDc5QjIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMTQwOiAgICAgICAgICAgICAgICAgDQoxNDE6ICAgICAgICAgICAgICAgICAgICAgICBwLT5DT05UUk9MID0gKEJUTVJfQ05UTF9TT0ZUX1JFU0VUKTsNCkJGRDA3OUI2ICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA3OUI4ICBFRDkwMDAxNCAgIFNVQiBTUCwgUzQsIFpFUk8NCkJGRDA3OUJBICAgICAgRUQ5MCAgIExJIFYxLCAxNg0KQkZEMDc5QkMgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQ0KMTQyOiAgICAgICAgICAgICAgICAgDQoxNDM6ICAgICAgICAgICAgICAgICAgICAgICB3YWl0X2NudCA9IDI1NnVsOw0KQkZEMDc5QkUgIDAxMDAzMDQwICAgQURESVUgVjAsIFpFUk8sIDI1Ng0KQkZEMDc5QzIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTQ0OiAgICAgICAgICAgICAgICAgICAgICAgZG8gew0KMTQ1OiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggMHVsID09IChwLT5DT05UUk9MICYgQlRNUl9DTlRMX1NPRlRfUkVTRVQpICkgew0KQkZEMDc5QzYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDc5Q0EgICAgICA2OTI0ICAgTFcgVjAsIDE2KFYwKQ0KQkZEMDc5Q0MgICAgICAyRDI4ICAgQU5ESSBWMCwgVjAsIDB4MTANCkJGRDA3OUNFICAwMDBFNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA3OUVFDQoxNDY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KQkZEMDc5RUUgICAgICAwQzAwICAgTk9QDQoxNDc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTQ4OiAgICAgICAgICAgICAgICAgICAgICAgfSANCjE0OTogICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggd2FpdF9jbnQtLSApOyANCkJGRDA3OUQyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA3OUQ0ICAwMDQwMDAxMCAgIFNSTCBaRVJPLCBTMCwgMA0KQkZEMDc5RDYgIDEzOTAwMDQwICAgU0xUVSBWMCwgWkVSTywgVjANCkJGRDA3OUQ4ICAyRDJEMTM5MCAgIEFEREkgR1AsIFMwLCAxMTU2NQ0KQkZEMDc5REEgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYNCkJGRDA3OURDICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDA3OUUwICAgICAgNkRCRSAgIEFERElVIFYxLCBWMSwgLTENCkJGRDA3OUUyICAwMDEwRjg3RSAgIFNXIFYxLCAxNihTOCkNCkJGRDA3OUU2ICBGRkVFNDBBMiAgIEJORVpDIFYwLCAweEJGRDA3OUM2DQpCRkQwNzlFOCAgQ0MwMkZGRUUgICBMVyBSQSwgLTEzMzEwKFQ2KQ0KQkZEMDc5RUEgICAgICBDQzAyICAgQiAweEJGRDA3OUYwDQpCRkQwNzlFQyAgICAgIDBDMDAgICBOT1ANCjE1MDogICAgICAgICAgICAgICAgICAgIH0gICAgICANCjE1MTogICAgICAgICAgICAgICAgIH0NCkJGRDA3OUYwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNzlGMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNzlGNCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNzlGNiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNzlGOCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNzlGQSAgICAgIDBDMDAgICBOT1ANCjE1MjogICAgICAgICAgICAgICAgIA0KMTUzOiAgICAgICAgICAgICAgICAgLyoqDQoxNTQ6ICAgICAgICAgICAgICAgICAgKiBidG1yX2luaXQgLSBJbml0aWFsaXplIHNwZWNpZmllZCB0aW1lcg0KMTU1OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHplcm8gYmFzZWQgdGltZXIgSUQNCjE1NjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB0bXJfY250bCBiWzE1OjBdID0gdGltZXIgY29uZmlndXJhdGlvbiBmbGFncy4NCjE1NzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBpbml0aWFsX2NvdW50IA0KMTU4OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHByZWxvYWRfY291bnQgDQoxNTk6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBwZXJmb3JtcyBhIHNvZnQgcmVzZXQgb2YgdGhlIHRpbWVyIGJlZm9yZSANCjE2MDogICAgICAgICAgICAgICAgICAqICAgICAgIGNvbmZpZ3VyYXRpb24uDQoxNjE6ICAgICAgICAgICAgICAgICAgKi8NCjE2MjogICAgICAgICAgICAgICAgIHZvaWQgYnRtcl9pbml0KHVpbnQ4X3QgdG1yX2lkLCANCjE2MzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHRtcl9jbnRsLA0KMTY0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgcHJlc2NhbGVyLA0KMTY1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5pdGlhbF9jb3VudCwNCjE2NjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHByZWxvYWRfY291bnQpDQoxNjc6ICAgICAgICAgICAgICAgICB7DQpCRkQwNTZGQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDU2RkUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDU3MDAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDU3MDIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA1NzA0ICAgICAgMEM2NSAgIE1PVkUgVjEsIEExDQpCRkQwNTcwNiAgICAgIDBDNDYgICBNT1ZFIFYwLCBBMg0KQkZEMDU3MDggIDAwMkNGOEZFICAgU1cgQTMsIDQ0KFM4KQ0KQkZEMDU3MEMgIDAwMjAxODlFICAgU0IgQTAsIDMyKFM4KQ0KQkZEMDU3MTAgIDAwMjQzODdFICAgU0ggVjEsIDM2KFM4KQ0KQkZEMDU3MTQgIDAwMjgzODVFICAgU0ggVjAsIDQwKFM4KQ0KMTY4OiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHBUTVI7DQoxNjk6ICAgICAgICAgICAgICAgICANCjE3MDogICAgICAgICAgICAgICAgICAgICBwVE1SID0gTlVMTDsNCkJGRDA1NzE4ICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMTcxOiAgICAgICAgICAgICAgICAgDQoxNzI6ICAgICAgICAgICAgICAgICAgICAgaWYgKGJ0bXJfdmFsaWQodG1yX2lkKSkgew0KQkZEMDU3MUMgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA1NzIwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNTcyMiAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQNCkJGRDA1NzI0ICAgICAgNEQyMiAgIEFERElVIFQxLCBUMSwgMQ0KQkZEMDU3MjYgICAgICAwQzAwICAgTk9QDQpCRkQwNTcyOCAgMDA0ODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNTdCQw0KMTczOiAgICAgICAgICAgICAgICAgICAgICAgICBidG1yX3Jlc2V0KHRtcl9pZCk7DQpCRkQwNTcyQyAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDU3MzAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA1NzMyICAzQ0M0NzdFOCAgIEpBTFMgYnRtcl9yZXNldA0KQkZEMDU3MzQgIDBDMDAzQ0M0ICAgTEggQTIsIDMwNzIoQTApDQpCRkQwNTczNiAgICAgIDBDMDAgICBOT1ANCjE3NDogICAgICAgICAgICAgICAgICAgICAgICAgDQoxNzU6ICAgICAgICAgICAgICAgICAgICAgICAgIHBUTVIgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDU3MzggIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA1NzNDICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNTczRSAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHINCkJGRDA1NzQwICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQNCkJGRDA1NzQyICAgICAgMEMwMCAgIE5PUA0KQkZEMDU3NDQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTc2OiAgICAgICAgICAgICAgICAgICAgICAgICANCjE3NzogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5nYXRlIHRpbWVyIGNsb2NrcyBhbmQgcHJvZ3JhbSBwcmVzY2FsZQ0KMTc4OiAgICAgICAgICAgICAgICAgICAgICAgICBwVE1SLT5DT05UUk9MID0gKCh1aW50MzJfdClwcmVzY2FsZXIgPDwgMTYpICsgKEJUTVJfQ05UTF9FTkFCTEUpOw0KQkZEMDU3NDggIDAwMjgzNDVFICAgTEhVIFYwLCA0MChTOCkNCkJGRDA1NzRDICA4MDAwMDA0MiAgIFNMTCBWMCwgVjAsIDE2DQpCRkQwNTc1MCAgICAgIDZEQTAgICBBRERJVSBWMSwgVjAsIDENCkJGRDA1NzUyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1NzU2ICAgICAgRTlBNCAgIFNXIFYxLCAxNihWMCkNCjE3OTogICAgICAgICAgICAgICAgICAgICAgICAgDQoxODA6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb2dyYW0gUHJlbG9hZCAmIGluaXRpYWwgY291bnRlciB2YWx1ZQ0KMTgxOiAgICAgICAgICAgICAgICAgICAgICAgICBwVE1SLT5QUkVMT0FEID0gcHJlbG9hZF9jb3VudDsNCkJGRDA1NzU4ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1NzVDICAwMDMwRkM3RSAgIExXIFYxLCA0OChTOCkNCkJGRDA1NzYwICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQ0KMTgyOiAgICAgICAgICAgICAgICAgICAgICAgICBwVE1SLT5DT1VOVCA9IGluaXRpYWxfY291bnQ7DQpCRkQwNTc2MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNTc2NiAgMDAyQ0ZDN0UgICBMVyBWMSwgNDQoUzgpDQpCRkQwNTc2QSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjE4MzogICAgICAgICAgICAgICAgICAgICAgICAgDQoxODQ6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb2dyYW0gY29udHJvbCByZWdpc3RlciwgaW50ZXJydXB0IGVuYWJsZSwgYW5kIGNsZWFyIHN0YXR1cw0KMTg1OiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1yX2NudGwgJiBCVE1SX0NPVU5UX1VQKSB7DQpCRkQwNTc2QyAgMDAyNDM0NUUgICBMSFUgVjAsIDM2KFM4KQ0KQkZEMDU3NzAgICAgICAyRDI0ICAgQU5ESSBWMCwgVjAsIDB4NA0KQkZEMDU3NzIgIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDU3ODYNCjE4NjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUTVItPkNPTlRST0wgfD0gQlRNUl9DTlRMX0NPVU5UX1VQOyAgDQpCRkQwNTc3NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNTc3QSAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApDQpCRkQwNTc3QyAgMDAwNDUwNjIgICBPUkkgVjEsIFYwLCA0DQpCRkQwNTc4MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNTc4NCAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApDQoxODc6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjE4ODogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcl9jbnRsICYgQlRNUl9BVVRPX1JFU1RBUlQpIHsNCkJGRDA1Nzg2ICAwMDI0MzQ1RSAgIExIVSBWMCwgMzYoUzgpDQpCRkQwNTc4QSAgICAgIDJEMjYgICBBTkRJIFYwLCBWMCwgMHg4DQpCRkQwNTc4QyAgMDAwODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNTdBMA0KMTg5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFRNUi0+Q09OVFJPTCB8PSBCVE1SX0NOVExfQVVUT19SRVNUQVJUOyANCkJGRDA1NzkwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1Nzk0ICAgICAgNjkyNCAgIExXIFYwLCAxNihWMCkNCkJGRDA1Nzk2ICAwMDA4NTA2MiAgIE9SSSBWMSwgVjAsIDgNCkJGRDA1NzlBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1NzlFICAgICAgRTlBNCAgIFNXIFYxLCAxNihWMCkNCjE5MDogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTkxOiAgICAgICAgICAgICAgICAgICAgICAgICANCjE5MjogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcl9jbnRsICYgQlRNUl9JTlRfRU4pIHsNCkJGRDA1N0EwICAwMDI0MzQ1RSAgIExIVSBWMCwgMzYoUzgpDQpCRkQwNTdBNCAgICAgIDJEMjEgICBBTkRJIFYwLCBWMCwgMHgxDQpCRkQwNTdBNiAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDU3QTggIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDU3QkMNCjE5MzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUTVItPklOVEVOID0gMHgwMXU7ICAgIC8vIGVuYWJsZSBmaXJzdA0KQkZEMDU3QUMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDU3QjAgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDA1N0IyICAgICAgODlBQyAgIFNCIFYxLCAxMihWMCkNCjE5NDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUTVItPlNUQVRVUyA9IDB4MDF1OyAgIC8vIGNsZWFyIHN0YXR1cw0KQkZEMDU3QjQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDU3QjggICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDA1N0JBICAgICAgODlBOCAgIFNCIFYxLCA4KFYwKQ0KMTk1OiAgICAgICAgICAgICAgICAgICAgICAgICB9DQoxOTY6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTk3OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDU3QkMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA1N0JFICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA1N0MwICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA1N0MyICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA1N0M0ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA1N0M2ICAgICAgMEMwMCAgIE5PUA0KMTk4OiAgICAgICAgICAgICAgICAgDQoxOTk6ICAgICAgICAgICAgICAgICAvKioNCjIwMDogICAgICAgICAgICAgICAgICAqIGJ0bXJfaWVuIC0gRW5hYmxlIHNwZWNpZmllZCB0aW1lcidzIGludGVycnVwdC4NCjIwMTogICAgICAgICAgICAgICAgICAqIA0KMjAyOiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjAzOiAgICAgICAgICAgICAgICAgICogDQoyMDQ6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIHplcm8gYmFzZWQgdGltZXIgSUQuDQoyMDU6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gaWVuIE5vbi16ZXJvIGVuYWJsZSBpbnRlcnJ1cHQgaW4gdGltZXIgYmxvY2ssIDAgDQoyMDY6ICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgIGRpc2FibGUuDQoyMDc6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBXcml0ZSAwIG9yIDEgdG8gdGltZXIncyBJTlRFTiByZWdpc3Rlci4NCjIwODogICAgICAgICAgICAgICAgICAqLw0KMjA5OiAgICAgICAgICAgICAgICAgdm9pZCBidG1yX2llbih1aW50OF90IHRtcl9pZCwgdWludDhfdCBpZW4pDQoyMTA6ICAgICAgICAgICAgICAgICB7DQpCRkQwODMzMCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDgzMzIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDgzMzQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDgzMzYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4MzM4ICAgICAgMEM2NCAgIE1PVkUgVjEsIEEwDQpCRkQwODMzQSAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQ0KQkZEMDgzM0MgIDAwMjAxODdFICAgU0IgVjEsIDMyKFM4KQ0KQkZEMDgzNDAgIDAwMjQxODVFICAgU0IgVjAsIDM2KFM4KQ0KMjExOiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHA7DQoyMTI6ICAgICAgICAgICAgICAgICANCjIxMzogICAgICAgICAgICAgICAgICAgICBpZiAoYnRtcl92YWxpZCh0bXJfaWQpKSB7DQpCRkQwODM0NCAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDgzNDggICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4MzRBICA0RDIyNzdFOCAgIEpBTFMgYnRtcl92YWxpZA0KQkZEMDgzNEMgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxDQpCRkQwODM0RSAgICAgIDBDMDAgICBOT1ANCkJGRDA4MzUwICAwMDE1NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4MzdFDQoyMTQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDgzNTQgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA4MzU4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwODM1QSAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHINCkJGRDA4MzVDICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQNCkJGRDA4MzVFICAgICAgMEMwMCAgIE5PUA0KQkZEMDgzNjAgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjE1OiAgICAgICAgICAgICAgICAgDQoyMTY6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZW4pIHsNCkJGRDA4MzY0ICAwMDI0MTQ1RSAgIExCVSBWMCwgMzYoUzgpDQpCRkQwODM2OCAgMDAwNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODM3OA0KMjE3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPklOVEVOID0gKEJUTVJfSU5URU4pOyANCkJGRDA4MzZDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA4MzcwICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwODM3MiAgICAgIDg5QUMgICBTQiBWMSwgMTIoVjApDQpCRkQwODM3NCAgICAgIENDMDQgICBCIDB4QkZEMDgzN0UNCkJGRDA4Mzc2ICAgICAgMEMwMCAgIE5PUA0KMjE4OiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KMjE5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPklOVEVOID0gKEJUTVJfSU5URElTKTsgDQpCRkQwODM3OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODM3QSAgODgyQzAwMTAgICBFWFQgWkVSTywgUzAsIDAsIDE4DQpCRkQwODM3QyAgICAgIDg4MkMgICBTQiBTMCwgMTIoVjApDQoyMjA6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjIyMTogICAgICAgICAgICAgICAgICAgICB9DQoyMjI6ICAgICAgICAgICAgICAgICB9DQpCRkQwODM3RSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDgzODAgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDgzODIgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDgzODQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDgzODYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDgzODggICAgICAwQzAwICAgTk9QDQoyMjM6ICAgICAgICAgICAgICAgICANCjIyNDogICAgICAgICAgICAgICAgIC8qKg0KMjI1OiAgICAgICAgICAgICAgICAgICogdG1yX2dldF9jbHJfaXN0cyAtIFJlYWQgVGltZXIgaW50ZXJydXB0IHN0YXR1cyBhbmQgY2xlYXIgaWYNCjIyNjogICAgICAgICAgICAgICAgICAqIHNldC4gDQoyMjc6ICAgICAgICAgICAgICAgICAgKiANCjIyODogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjIyOTogICAgICAgICAgICAgICAgICAqIA0KMjMwOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCB6ZXJvIGJhc2VkIHRpbWVyIElELg0KMjMxOiAgICAgICAgICAgICAgICAgICogDQoyMzI6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQ4X3QgdHJ1ZSAoVGltZXIgaW50ZXJydXB0IHN0YXR1cyBzZXQpIGVsc2UgZmFsc2UuIA0KMjMzOiAgICAgICAgICAgICAgICAgICogQG5vdGUgSWYgdGltZXIgaW50ZXJydXB0IHN0YXR1cyBpcyBzZXQgdGhlbiBjbGVhciBpdCBiZWZvcmUgDQoyMzQ6ICAgICAgICAgICAgICAgICAgKiAgICAgICByZXR1cm5pbmcuDQoyMzU6ICAgICAgICAgICAgICAgICAgKi8NCjIzNjogICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnRtcl9nZXRfY2xyX2lzdHModWludDhfdCB0bXJfaWQpDQoyMzc6ICAgICAgICAgICAgICAgICB7DQpCRkQwODM4QyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDgzOEUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDgzOTAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDgzOTIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4Mzk0ICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwODM5NiAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpDQoyMzg6ICAgICAgICAgICAgICAgICAgICAgQlRNUl9UeXBlRGVmICogcDsNCjIzOTogICAgICAgICAgICAgICAgICAgICB1aW50OF90IHJjOw0KMjQwOiAgICAgICAgICAgICAgICAgDQoyNDE6ICAgICAgICAgICAgICAgICAgICAgcmMgPSAoTUVDMTRYWF9GQUxTRSk7DQpCRkQwODM5QSAgMDAxMDE4MUUgICBTQiBaRVJPLCAxNihTOCkNCjI0MjogICAgICAgICAgICAgICAgICAgICBpZiAoYnRtcl92YWxpZCh0bXJfaWQpKSB7DQpCRkQwODM5RSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDgzQTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4M0E0ICA0RDIyNzdFOCAgIEpBTFMgYnRtcl92YWxpZA0KQkZEMDgzQTYgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxDQpCRkQwODNBOCAgICAgIDBDMDAgICBOT1ANCkJGRDA4M0FBICAwMDE1NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4M0Q4DQoyNDM6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDgzQUUgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA4M0IyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwODNCNCAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHINCkJGRDA4M0I2ICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQNCkJGRDA4M0I4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDgzQkEgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMjQ0OiAgICAgICAgICAgICAgICAgDQoyNDU6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcC0+U1RBVFVTICkgew0KQkZEMDgzQkUgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDgzQzIgICAgICAwOTI4ICAgTEJVIFYwLCA4KFYwKQ0KQkZEMDgzQzQgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYNCkJGRDA4M0M2ICAwMDA3NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4M0Q4DQoyNDY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5TVEFUVVMgPSAoQlRNUl9TVEFUVVNfQUNUSVZFKTsNCkJGRDA4M0NBICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA4M0NFICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwODNEMCAgICAgIDg5QTggICBTQiBWMSwgOChWMCkNCjI0NzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gdHJ1ZTsNCkJGRDA4M0QyICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwODNENCAgMDAxMDE4NUUgICBTQiBWMCwgMTYoUzgpDQoyNDg6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjI0OTogICAgICAgICAgICAgICAgICAgICB9DQoyNTA6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJjOw0KQkZEMDgzRDggIDAwMTAxNDVFICAgTEJVIFYwLCAxNihTOCkNCjI1MTogICAgICAgICAgICAgICAgIH0NCkJGRDA4M0RDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwODNERSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwODNFMCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwODNFMiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwODNFNCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwODNFNiAgICAgIDBDMDAgICBOT1ANCjI1MjogICAgICAgICAgICAgICAgIA0KMjUzOiAgICAgICAgICAgICAgICAgLyoqDQoyNTQ6ICAgICAgICAgICAgICAgICAgKiBidG1yX3JlbG9hZCAtIEZvcmNlIHRpbWVyIHRvIHJlbG9hZCBjb3VudGVyIGZyb20gcHJlbG9hZCANCjI1NTogICAgICAgICAgICAgICAgICAqIHJlZ2lzdGVyLiANCjI1NjogICAgICAgICAgICAgICAgICAqIA0KMjU3OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCB6ZXJvIGJhc2VkIHRpbWVyIElELiANCjI1ODogICAgICAgICAgICAgICAgICAqIEBub3RlIEhhcmR3YXJlIHdpbGwgb25seSByZWxvYWQgY291bnRlciBpZiB0aW1lciBpcyBydW5uaW5nLiANCjI1OTogICAgICAgICAgICAgICAgICAqLw0KMjYwOiAgICAgICAgICAgICAgICAgdm9pZCBidG1yX3JlbG9hZCh1aW50OF90IHRtcl9pZCkNCjI2MTogICAgICAgICAgICAgICAgIHsNCkJGRDA4NkIwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwODZCMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwODZCNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwODZCNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDg2QjggICAgICAwQzQ0ICAgTU9WRSBWMCwgQTANCkJGRDA4NkJBICAwMDIwMTg1RSAgIFNCIFYwLCAzMihTOCkNCjI2MjogICAgICAgICAgICAgICAgICAgICBCVE1SX1R5cGVEZWYgKiBwOw0KMjYzOiAgICAgICAgICAgICAgICAgDQoyNjQ6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBidG1yX3ZhbGlkKHRtcl9pZCkgKSB7DQpCRkQwODZCRSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDg2QzIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4NkM0ICA0RDIyNzdFOCAgIEpBTFMgYnRtcl92YWxpZA0KQkZEMDg2QzYgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxDQpCRkQwODZDOCAgICAgIDBDMDAgICBOT1ANCkJGRDA4NkNBICAwMDE2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4NkZBDQoyNjU6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDg2Q0UgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA4NkQyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwODZENCAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHINCkJGRDA4NkQ2ICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQNCkJGRDA4NkQ4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDg2REEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjY2OiAgICAgICAgICAgICAgICAgDQoyNjc6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLT5DT05UUk9MICYgQlRNUl9DTlRMX1NUQVJUKSB7DQpCRkQwODZERSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODZFMiAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApDQpCRkQwODZFNCAgICAgIDJEMkEgICBBTkRJIFYwLCBWMCwgMHgyMA0KQkZEMDg2RTYgIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg2RkENCjI2ODogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPkNPTlRST0wgfD0gQlRNUl9DTlRMX1JFTE9BRDsNCkJGRDA4NkVBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA4NkVFICAgICAgNjkyNCAgIExXIFYwLCAxNihWMCkNCkJGRDA4NkYwICAwMDQwNTA2MiAgIE9SSSBWMSwgVjAsIDY0DQpCRkQwODZGNCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODZGOCAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApDQoyNjk6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjI3MDogICAgICAgICAgICAgICAgICAgICB9DQoyNzE6ICAgICAgICAgICAgICAgICB9DQpCRkQwODZGQSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDg2RkMgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDg2RkUgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDg3MDAgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDg3MDIgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDg3MDQgICAgICAwQzAwICAgTk9QDQoyNzI6ICAgICAgICAgICAgICAgICANCjI3MzogICAgICAgICAgICAgICAgIC8qKg0KMjc0OiAgICAgICAgICAgICAgICAgICogYnRtcl9zZXRfY291bnQgLSBQcm9ncmFtIHRpbWVyJ3MgY291bnRlciByZWdpc3Rlci4NCjI3NTogICAgICAgICAgICAgICAgICAqIA0KMjc2OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjc3OiAgICAgICAgICAgICAgICAgICogDQoyNzg6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIHplcm8gYmFzZWQgdGltZXIgSUQNCjI3OTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBjb3VudCBuZXcgY291bnRlciB2YWx1ZSANCjI4MDogICAgICAgICAgICAgICAgICAqIEBub3RlIFRpbWVyIGhhcmR3YXJlIG1heSBpbXBsZW1lbnQgYSAxNi1iaXQgb3IgMzItYml0IA0KMjgxOiAgICAgICAgICAgICAgICAgICogICAgICAgaGFyZHdhcmUgY291bnRlci4gSWYgdGhlIHRpbWVyIGlzIDE2LWJpdCBvbmx5IHRoZSBsb3dlcg0KMjgyOiAgICAgICAgICAgICAgICAgICogICAgICAgMTYtYml0cyBvZiB0aGUgY291bnQgcGFyYW10ZXIgYXJlIHVzZWQuDQoyODM6ICAgICAgICAgICAgICAgICAgKi8NCjI4NDogICAgICAgICAgICAgICAgIHZvaWQgYnRtcl9zZXRfY291bnQodWludDhfdCB0bXJfaWQsIHVpbnQzMl90IGNvdW50KQ0KMjg1OiAgICAgICAgICAgICAgICAgew0KQkZEMDkwRkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA5MEZFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA5MTAwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA5MTAyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOTEwNCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMA0KQkZEMDkxMDYgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQ0KQkZEMDkxMEEgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQ0KMjg2OiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHA7DQoyODc6ICAgICAgICAgICAgICAgICANCjI4ODogICAgICAgICAgICAgICAgICAgICBpZiAoYnRtcl92YWxpZCh0bXJfaWQpKSB7DQpCRkQwOTEwRSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDkxMTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA5MTE0ICA0RDIyNzdFOCAgIEpBTFMgYnRtcl92YWxpZA0KQkZEMDkxMTYgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxDQpCRkQwOTExOCAgICAgIDBDMDAgICBOT1ANCkJGRDA5MTFBICAwMDBENDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5MTM4DQoyODk6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcih0bXJfaWQpOw0KQkZEMDkxMUUgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA5MTIyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwOTEyNCAgNEQzODc3RTggICBKQUxTIGJ0bXJfZ2V0X2h3X2FkZHINCkJGRDA5MTI2ICAgICAgNEQzOCAgIEFERElVIFQxLCBUMSwgLTQNCkJGRDA5MTI4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDkxMkEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjkwOiAgICAgICAgICAgICAgICAgDQoyOTE6ICAgICAgICAgICAgICAgICAgICAgICAgIHAtPkNPVU5UID0gY291bnQ7DQpCRkQwOTEyRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOTEzMiAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpDQpCRkQwOTEzNiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjI5MjogICAgICAgICAgICAgICAgICAgICB9DQoyOTM6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTEzOCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDkxM0EgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDkxM0MgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDkxM0UgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDkxNDAgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDkxNDIgICAgICAwQzAwICAgTk9QDQoyOTQ6ICAgICAgICAgICAgICAgICANCjI5NTogICAgICAgICAgICAgICAgIC8qKg0KMjk2OiAgICAgICAgICAgICAgICAgICogYnRtcl9jb3VudCAtIFJldHVybiBjdXJyZW50IHZhbHVlIG9mIHRpbWVyJ3MgY291bnQgcmVnaXN0ZXIuDQoyOTc6ICAgICAgICAgICAgICAgICAgKiANCjI5ODogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjI5OTogICAgICAgICAgICAgICAgICAqIA0KMzAwOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCB6ZXJvIGJhc2VkIHRpbWVyIElELg0KMzAxOiAgICAgICAgICAgICAgICAgICogDQozMDI6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQzMl90IHRpbWVyIGNvdW50IG1heSBiZSAzMiBvciAxNiBiaXRzIGRlcGVuZGluZyANCjMwMzogICAgICAgICAgICAgICAgICAqICAgICAgICAgdXBvbiB0aGUgaGFyZHdhcmUuICBPbiBNRUMxMzIyIFRpbWVycyAwLTMgYXJlIDE2LWJpdA0KMzA0OiAgICAgICAgICAgICAgICAgICogICAgICAgICBhbmQgVGltZXJzIDQtNSBhcmUgMzItYml0Lg0KMzA1OiAgICAgICAgICAgICAgICAgICovDQozMDY6ICAgICAgICAgICAgICAgICB1aW50MzJfdCBidG1yX2NvdW50KHVpbnQ4X3QgdG1yX2lkKQ0KMzA3OiAgICAgICAgICAgICAgICAgew0KQkZEMDhENDAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4RDQyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4RDQ0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4RDQ2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOEQ0OCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMA0KQkZEMDhENEEgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQ0KMzA4OiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHA7DQozMDk6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY250Ow0KMzEwOiAgICAgICAgICAgICAgICAgICAgIA0KMzExOiAgICAgICAgICAgICAgICAgICAgIGNudCA9IDB1bDsNCkJGRDA4RDRFICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMzEyOiAgICAgICAgICAgICAgICAgICAgIGlmICggYnRtcl92YWxpZCh0bXJfaWQpICkgew0KQkZEMDhENTIgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA4RDU2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwOEQ1OCAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQNCkJGRDA4RDVBICAgICAgNEQyMiAgIEFERElVIFQxLCBUMSwgMQ0KQkZEMDhENUMgICAgICAwQzAwICAgTk9QDQpCRkQwOEQ1RSAgMDAwRDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOEQ3Qw0KMzEzOiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKEJUTVJfVHlwZURlZiAqKWJ0bXJfZ2V0X2h3X2FkZHIodG1yX2lkKTsNCkJGRDA4RDYyICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwOEQ2NiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDhENjggIDREMzg3N0U4ICAgSkFMUyBidG1yX2dldF9od19hZGRyDQpCRkQwOEQ2QSAgICAgIDREMzggICBBRERJVSBUMSwgVDEsIC00DQpCRkQwOEQ2QyAgICAgIDBDMDAgICBOT1ANCkJGRDA4RDZFICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjMxNDogICAgICAgICAgICAgICAgICAgICAgICAgY250ID0gKHVpbnQzMl90KShwLT5DT1VOVCk7DQpCRkQwOEQ3MiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwOEQ3NiAgICAgIDY5MjAgICBMVyBWMCwgMChWMCkNCkJGRDA4RDc4ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjMxNTogICAgICAgICAgICAgICAgICAgICB9DQozMTY6ICAgICAgICAgICAgICAgICAgICAgDQozMTc6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNudDsNCkJGRDA4RDdDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjMxODogICAgICAgICAgICAgICAgIH0NCkJGRDA4RDgwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOEQ4MiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOEQ4NCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOEQ4NiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOEQ4OCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOEQ4QSAgICAgIDBDMDAgICBOT1ANCjMxOTogICAgICAgICAgICAgICAgIA0KMzIwOiAgICAgICAgICAgICAgICAgLyoqDQozMjE6ICAgICAgICAgICAgICAgICAgKiBidG1yX3N0YXJ0IC0gU3RhcnQgdGltZXIgY291bnRpbmcuDQozMjI6ICAgICAgICAgICAgICAgICAgKiANCjMyMzogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjMyNDogICAgICAgICAgICAgICAgICAqIA0KMzI1OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCB6ZXJvIGJhc2VkIHRpbWVyIElELg0KMzI2OiAgICAgICAgICAgICAgICAgICovDQozMjc6ICAgICAgICAgICAgICAgICB2b2lkIGJ0bXJfc3RhcnQodWludDhfdCBidG1yX2lkKQ0KMzI4OiAgICAgICAgICAgICAgICAgew0KQkZEMDhEOEMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4RDhFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4RDkwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4RDkyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOEQ5NCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMA0KQkZEMDhEOTYgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQ0KMzI5OiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHA7DQozMzA6ICAgICAgICAgICAgICAgICANCjMzMTogICAgICAgICAgICAgICAgICAgICBpZiAoIGJ0bXJfdmFsaWQoYnRtcl9pZCkgKSB7DQpCRkQwOEQ5QSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDhEOUUgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4REEwICA0RDIyNzdFOCAgIEpBTFMgYnRtcl92YWxpZA0KQkZEMDhEQTIgICAgICA0RDIyICAgQURESVUgVDEsIFQxLCAxDQpCRkQwOERBNCAgICAgIDBDMDAgICBOT1ANCkJGRDA4REE2ICAwMDEwNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4RENBDQozMzI6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAoQlRNUl9UeXBlRGVmICopYnRtcl9nZXRfaHdfYWRkcihidG1yX2lkKTsNCkJGRDA4REFBICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwOERBRSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDhEQjAgIDREMzg3N0U4ICAgSkFMUyBidG1yX2dldF9od19hZGRyDQpCRkQwOERCMiAgICAgIDREMzggICBBRERJVSBUMSwgVDEsIC00DQpCRkQwOERCNCAgICAgIDBDMDAgICBOT1ANCkJGRDA4REI2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjMzMzogICAgICAgICAgICAgICAgICAgICAgICAgcC0+Q09OVFJPTCB8PSBCVE1SX0NOVExfU1RBUlQ7DQpCRkQwOERCQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOERCRSAgICAgIDY5MjQgICBMVyBWMCwgMTYoVjApDQpCRkQwOERDMCAgMDAyMDUwNjIgICBPUkkgVjEsIFYwLCAzMg0KQkZEMDhEQzQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDhEQzggICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQ0KMzM0OiAgICAgICAgICAgICAgICAgICAgIH0NCjMzNTogICAgICAgICAgICAgICAgIH0NCkJGRDA4RENBICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOERDQyAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOERDRSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOEREMCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOEREMiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOERENCAgICAgIDBDMDAgICBOT1ANCjMzNjogICAgICAgICAgICAgICAgIA0KMzM3OiAgICAgICAgICAgICAgICAgLyoqDQozMzg6ICAgICAgICAgICAgICAgICAgKiBidG1yX3N0b3AgLSBTdG9wIHRpbWVyLg0KMzM5OiAgICAgICAgICAgICAgICAgICogDQozNDA6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQozNDE6ICAgICAgICAgICAgICAgICAgKiANCjM0MjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB0bXJfaWQgemVybyBiYXNlZCB0aW1lciBJRC4gDQozNDM6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBXaGVuIGEgc3RvcHBlZCB0aW1lciBpcyBzdGFydGVkIGFnYWluIGl0IHdpbGwgcmVsb2FkIA0KMzQ0OiAgICAgICAgICAgICAgICAgICogICAgICAgdGhlIGNvdW50IHJlZ2lzdGVyIGZyb20gcHJlbG9hZCB2YWx1ZS4NCjM0NTogICAgICAgICAgICAgICAgICAqLw0KMzQ2OiAgICAgICAgICAgICAgICAgdm9pZCBidG1yX3N0b3AodWludDhfdCB0bXJfaWQpDQozNDc6ICAgICAgICAgICAgICAgICB7DQpCRkQwOEREOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDhEREEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDhEREMgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDhEREUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4REUwICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwOERFMiAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpDQozNDg6ICAgICAgICAgICAgICAgICAgICAgQlRNUl9UeXBlRGVmICogcDsNCjM0OTogICAgICAgICAgICAgICAgIA0KMzUwOiAgICAgICAgICAgICAgICAgICAgIGlmIChidG1yX3ZhbGlkKHRtcl9pZCkpIHsNCkJGRDA4REU2ICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwOERFQSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDhERUMgIDREMjI3N0U4ICAgSkFMUyBidG1yX3ZhbGlkDQpCRkQwOERFRSAgICAgIDREMjIgICBBRERJVSBUMSwgVDEsIDENCkJGRDA4REYwICAgICAgMEMwMCAgIE5PUA0KQkZEMDhERjIgIDAwMTE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDhFMTgNCjM1MTogICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChCVE1SX1R5cGVEZWYgKilidG1yX2dldF9od19hZGRyKHRtcl9pZCk7DQpCRkQwOERGNiAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDhERkEgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4REZDICA0RDM4NzdFOCAgIEpBTFMgYnRtcl9nZXRfaHdfYWRkcg0KQkZEMDhERkUgICAgICA0RDM4ICAgQURESVUgVDEsIFQxLCAtNA0KQkZEMDhFMDAgICAgICAwQzAwICAgTk9QDQpCRkQwOEUwMiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQozNTI6ICAgICAgICAgICAgICAgICAgICAgICAgIHAtPkNPTlRST0wgJj0gfihCVE1SX0NOVExfU1RBUlQpOw0KQkZEMDhFMDYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDhFMEEgICAgICA2OUE0ICAgTFcgVjEsIDE2KFYwKQ0KQkZEMDhFMEMgIEZGREYzMDQwICAgQURESVUgVjAsIFpFUk8sIC0zMw0KQkZEMDhFMEUgIDQ0OUFGRkRGICAgTFcgUzgsIDE3NTYyKFJBKQ0KQkZEMDhFMTAgICAgICA0NDlBICAgQU5EMTYgVjEsIFYwDQpCRkQwOEUxMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOEUxNiAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApDQozNTM6ICAgICAgICAgICAgICAgICAgICAgfQ0KMzU0OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDhFMTggICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4RTFBICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA4RTFDICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA4RTFFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA4RTIwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4RTIyICAgICAgMEMwMCAgIE5PUA0KMzU1OiAgICAgICAgICAgICAgICAgDQozNTY6ICAgICAgICAgICAgICAgICAvKioNCjM1NzogICAgICAgICAgICAgICAgICAqIGJ0bXJfaXNfc3RvcHBlZCAtIFJldHVybiBzdGF0ZSBvZiB0aW1lcidzIFNUQVJUIGJpdC4NCjM1ODogICAgICAgICAgICAgICAgICAqIA0KMzU5OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMzYwOiAgICAgICAgICAgICAgICAgICogDQozNjE6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdG1yX2lkIHplcm8gYmFzZWQgdGltZXIgSUQuDQozNjI6ICAgICAgICAgICAgICAgICAgKiANCjM2MzogICAgICAgICAgICAgICAgICAqIEByZXR1cm4gdWludDhfdCBmYWxzZSh0aW1lciBub3Qgc3RhcnRlZCksIHRydWUodGltZXIgc3RhcnRlZCkNCjM2NDogICAgICAgICAgICAgICAgICAqLw0KMzY1OiAgICAgICAgICAgICAgICAgdWludDhfdCBidG1yX2lzX3N0b3BwZWQodWludDhfdCB0bXJfaWQpDQozNjY6ICAgICAgICAgICAgICAgICB7DQpCRkQwODNFOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDgzRUEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDgzRUMgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDgzRUUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4M0YwICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwODNGMiAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpDQozNjc6ICAgICAgICAgICAgICAgICAgICAgQlRNUl9UeXBlRGVmICogcDsNCjM2ODogICAgICAgICAgICAgICAgICAgICB1aW50OF90IHJjOw0KMzY5OiAgICAgICAgICAgICAgICAgICAgIA0KMzcwOiAgICAgICAgICAgICAgICAgICAgIHJjID0gKE1FQzE0WFhfVFJVRSk7DQpCRkQwODNGNiAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDgzRjggIDAwMTAxODVFICAgU0IgVjAsIDE2KFM4KQ0KMzcxOiAgICAgICAgICAgICAgICAgICAgIGlmIChidG1yX3ZhbGlkKHRtcl9pZCkpIHsNCkJGRDA4M0ZDICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwODQwMCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDg0MDIgIDREMjI3N0U4ICAgSkFMUyBidG1yX3ZhbGlkDQpCRkQwODQwNCAgICAgIDREMjIgICBBRERJVSBUMSwgVDEsIDENCkJGRDA4NDA2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDg0MDggIDAwMTM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg0MzINCjM3MjogICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAoTUVDMTRYWF9GQUxTRSk7DQpCRkQwODQwQyAgMDAxMDE4MUUgICBTQiBaRVJPLCAxNihTOCkNCjM3MzogICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChCVE1SX1R5cGVEZWYgKilidG1yX2dldF9od19hZGRyKHRtcl9pZCk7DQpCRkQwODQxMCAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDg0MTQgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4NDE2ICA0RDM4NzdFOCAgIEpBTFMgYnRtcl9nZXRfaHdfYWRkcg0KQkZEMDg0MTggICAgICA0RDM4ICAgQURESVUgVDEsIFQxLCAtNA0KQkZEMDg0MUEgICAgICAwQzAwICAgTk9QDQpCRkQwODQxQyAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQozNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocC0+Q09OVFJPTCAmIEJUTVJfQ05UTF9TVEFSVCkgPT0gMCkgew0KQkZEMDg0MjAgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDg0MjQgICAgICA2OTI0ICAgTFcgVjAsIDE2KFYwKQ0KQkZEMDg0MjYgICAgICAyRDJBICAgQU5ESSBWMCwgVjAsIDB4MjANCkJGRDA4NDI4ICAwMDAzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA4NDMyDQozNzU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IChNRUMxNFhYX1RSVUUpOw0KQkZEMDg0MkMgICAgICBFRDAxICAgTEkgVjAsIDENCkJGRDA4NDJFICAwMDEwMTg1RSAgIFNCIFYwLCAxNihTOCkNCjM3NjogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMzc3OiAgICAgICAgICAgICAgICAgICAgIH0NCjM3ODogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmM7DQpCRkQwODQzMiAgMDAxMDE0NUUgICBMQlUgVjAsIDE2KFM4KQ0KMzc5OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDg0MzYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4NDM4ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA4NDNBICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA4NDNDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA4NDNFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4NDQwICAgICAgMEMwMCAgIE5PUA0KMzgwOiAgICAgICAgICAgICAgICAgDQozODE6ICAgICAgICAgICAgICAgICANCjM4MjogICAgICAgICAgICAgICAgIC8qKg0KMzgzOiAgICAgICAgICAgICAgICAgICogYnRtcl9oYWx0IC0gSGFsdCB0aW1lciBjb3VudGluZyB3aXRoIG5vIHJlbG9hZCBvbiB1bmhhbHQuIA0KMzg0OiAgICAgICAgICAgICAgICAgICogDQozODU6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQozODY6ICAgICAgICAgICAgICAgICAgKiANCjM4NzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB0bXJfaWQgemVybyBiYXNlZCB0aW1lciBJRC4gDQozODg6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBBIGhhbHRlZCB0aW1lciB3aWxsIG5vdCByZWxvYWQgdGhlIGNvdW50IHJlZ2lzdGVyIHdoZW4gDQozODk6ICAgICAgICAgICAgICAgICAgKiAgICAgICB1bmhhbHRlZCwgaXQgd2lsbCBjb250aW51ZSBjb3VudGluZyBmcm9tIHRoZSBjdXJyZW50DQozOTA6ICAgICAgICAgICAgICAgICAgKiAgICAgICBjb3VudCB2YWx1ZS4NCjM5MTogICAgICAgICAgICAgICAgICAqLw0KMzkyOiAgICAgICAgICAgICAgICAgdm9pZCBidG1yX2hhbHQodWludDhfdCB0bXJfaWQpDQozOTM6ICAgICAgICAgICAgICAgICB7DQpCRkQwOEUyNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDhFMjYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDhFMjggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDhFMkEgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4RTJDICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwOEUyRSAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpDQozOTQ6ICAgICAgICAgICAgICAgICAgICAgQlRNUl9UeXBlRGVmICogcDsNCjM5NTogICAgICAgICAgICAgICAgIA0KMzk2OiAgICAgICAgICAgICAgICAgICAgIGlmICggYnRtcl92YWxpZCh0bXJfaWQpICkgew0KQkZEMDhFMzIgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA4RTM2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwOEUzOCAgNEQyMjc3RTggICBKQUxTIGJ0bXJfdmFsaWQNCkJGRDA4RTNBICAgICAgNEQyMiAgIEFERElVIFQxLCBUMSwgMQ0KQkZEMDhFM0MgICAgICAwQzAwICAgTk9QDQpCRkQwOEUzRSAgMDAxMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOEU2Mg0KMzk3OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKEJUTVJfVHlwZURlZiAqKWJ0bXJfZ2V0X2h3X2FkZHIodG1yX2lkKTsNCkJGRDA4RTQyICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwOEU0NiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDhFNDggIDREMzg3N0U4ICAgSkFMUyBidG1yX2dldF9od19hZGRyDQpCRkQwOEU0QSAgICAgIDREMzggICBBRERJVSBUMSwgVDEsIC00DQpCRkQwOEU0QyAgICAgIDBDMDAgICBOT1ANCkJGRDA4RTRFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjM5ODogICAgICAgICAgICAgICAgICAgICAgICAgcC0+Q09OVFJPTCB8PSAoQlRNUl9DTlRMX0hBTFQpOw0KQkZEMDhFNTIgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDhFNTYgICAgICA2OTI0ICAgTFcgVjAsIDE2KFYwKQ0KQkZEMDhFNTggIDAwODA1MDYyICAgT1JJIFYxLCBWMCwgMTI4DQpCRkQwOEU1QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOEU2MCAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApDQozOTk6ICAgICAgICAgICAgICAgICAgICAgfQ0KNDAwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDhFNjIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4RTY0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA4RTY2ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA4RTY4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA4RTZBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4RTZDICAgICAgMEMwMCAgIE5PUA0KNDAxOiAgICAgICAgICAgICAgICAgDQo0MDI6ICAgICAgICAgICAgICAgICANCjQwMzogICAgICAgICAgICAgICAgIC8qKg0KNDA0OiAgICAgICAgICAgICAgICAgICogYnRtcl91bmhhbHQgLSBVbmhhbHQgdGltZXIgY291bnRpbmcuDQo0MDU6ICAgICAgICAgICAgICAgICAgKiANCjQwNjogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjQwNzogICAgICAgICAgICAgICAgICAqIA0KNDA4OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHRtcl9pZCB6ZXJvIGJhc2VkIHRpbWVyIElELg0KNDA5OiAgICAgICAgICAgICAgICAgICovDQo0MTA6ICAgICAgICAgICAgICAgICB2b2lkIGJ0bXJfdW5oYWx0KHVpbnQ4X3QgdG1yX2lkKQ0KNDExOiAgICAgICAgICAgICAgICAgew0KQkZEMDhFNzAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4RTcyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4RTc0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4RTc2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOEU3OCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMA0KQkZEMDhFN0EgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQ0KNDEyOiAgICAgICAgICAgICAgICAgICAgIEJUTVJfVHlwZURlZiAqIHA7DQo0MTM6ICAgICAgICAgICAgICAgICANCjQxNDogICAgICAgICAgICAgICAgICAgICBpZiAoIGJ0bXJfdmFsaWQodG1yX2lkKSApIHsNCkJGRDA4RTdFICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwOEU4MiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDhFODQgIDREMjI3N0U4ICAgSkFMUyBidG1yX3ZhbGlkDQpCRkQwOEU4NiAgICAgIDREMjIgICBBRERJVSBUMSwgVDEsIDENCkJGRDA4RTg4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDhFOEEgIDAwMTE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDhFQjANCjQxNTogICAgICAgICAgICAgICAgICAgICAgICAgcCA9IChCVE1SX1R5cGVEZWYgKilidG1yX2dldF9od19hZGRyKHRtcl9pZCk7DQpCRkQwOEU4RSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDhFOTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4RTk0ICA0RDM4NzdFOCAgIEpBTFMgYnRtcl9nZXRfaHdfYWRkcg0KQkZEMDhFOTYgICAgICA0RDM4ICAgQURESVUgVDEsIFQxLCAtNA0KQkZEMDhFOTggICAgICAwQzAwICAgTk9QDQpCRkQwOEU5QSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo0MTY6ICAgICAgICAgICAgICAgICAgICAgICAgIHAtPkNPTlRST0wgJj0gfihCVE1SX0NOVExfSEFMVCk7DQpCRkQwOEU5RSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOEVBMiAgICAgIDY5QTQgICBMVyBWMSwgMTYoVjApDQpCRkQwOEVBNCAgRkY3RjMwNDAgICBBRERJVSBWMCwgWkVSTywgLTEyOQ0KQkZEMDhFQTYgIDQ0OUFGRjdGICAgTFcgSzEsIDE3NTYyKFJBKQ0KQkZEMDhFQTggICAgICA0NDlBICAgQU5EMTYgVjEsIFYwDQpCRkQwOEVBQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOEVBRSAgICAgIEU5QTQgICBTVyBWMSwgMTYoVjApDQo0MTc6ICAgICAgICAgICAgICAgICAgICAgfQ0KNDE4OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDhFQjAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4RUIyICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA4RUI0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA4RUI2ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA4RUI4ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4RUJBICAgICAgMEMwMCAgIE5PUA0KNDE5OiAgICAgICAgICAgICAgICAgDQo0MjA6ICAgICAgICAgICAgICAgICANCjQyMTogICAgICAgICAgICAgICAgIC8qIGVuZCBtZWMxNHh4X3RpbWVycy5jICovDQo0MjI6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KNDIzOiAgICAgICAgICAgICAgICAgICovDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L21lYzE0eHhfdGZkcC5jICAtLS0tLS0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiCpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIG1lYzE0eHhfdGZkcC5jDQoyMjogICAgICAgICAgICAgICAgICAgKk1FQzE0eHggVHJhY2UgRklGTyBEYXRhIFBvcnQgaGFyZHdhcmUgYWNjZXNzDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBQZXJpcGhlcmFscyBURkRQDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfcGNyLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgICNpZmRlZiBFTkFCTEVfVEZEUF9UUkFDRQ0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICAjdW5kZWYgVEZEUF9QSU5fMQ0KMzk6ICAgICAgICAgICAgICAgICAgI3VuZGVmIFRGRFBfUElOXzINCjQwOiAgICAgICAgICAgICAgICAgIA0KNDE6ICAgICAgICAgICAgICAgICAgDQo0MjogICAgICAgICAgICAgICAgICAjZGVmaW5lIFRGRFBfUElOXzEgKEdQSU9fMDExNl9JRCkgICAvLyBGdW5jMSBQdWxsVXAgZW5hYmxlZA0KNDM6ICAgICAgICAgICAgICAgICAgI2RlZmluZSBURkRQX1BJTl8yIChHUElPXzAxMTdfSUQpICAgLy8gRnVuYzEgUHVsbFVwIGVuYWJsZWQNCjQ0OiAgICAgICAgICAgICAgICAgIA0KNDU6ICAgICAgICAgICAgICAgICAgDQo0NjogICAgICAgICAgICAgICAgICANCjQ3OiAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHRmZHBfeG1pdF9oZWFkZXIodWludDE2X3QgbmJyKQ0KNDg6ICAgICAgICAgICAgICAgICAgew0KQkZEMDkwNkMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOA0KQkZEMDkwNkUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApDQpCRkQwOTA3MCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDkwNzIgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTANCkJGRDA5MDc0ICAwMDA4Mzg1RSAgIFNIIFYwLCA4KFM4KQ0KNDk6ICAgICAgICAgICAgICAgICAgICAgIFRGRFAtPkRBVEEgPSBURkRQX0ZSQU1FX1NUQVJUOw0KQkZEMDkwNzggIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDA5MDdDICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDkwN0UgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwOTA4MA0KQkZEMDkwODAgIEZGRkQzMDYwICAgQURESVUgVjEsIFpFUk8sIC0zDQpCRkQwOTA4MiAgODlBMEZGRkQgICBMVyBSQSwgLTMwMzA0KFNQKQ0KQkZEMDkwODQgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQo1MDogICAgICAgICAgICAgICAgICAgICAgVEZEUF9ERUxBWSgpOw0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICAgICAgVEZEUC0+REFUQSA9ICh1aW50OF90KW5icjsNCkJGRDA5MDg2ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwOTA4QSAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDA5MDhDICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDkwOEUNCkJGRDA5MDhFICAwMDA4MzQ3RSAgIExIVSBWMSwgOChTOCkNCkJGRDA5MDkyICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwOTA5NCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCjUzOiAgICAgICAgICAgICAgICAgICAgICBURkRQX0RFTEFZKCk7DQo1NDogICAgICAgICAgICAgICAgICAgICAgVEZEUC0+REFUQSA9ICh1aW50OF90KShuYnIgPj4gOCk7DQpCRkQwOTA5NiAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDkwOUEgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwOTA5QyAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDA5MDlFDQpCRkQwOTA5RSAgMDAwODM0N0UgICBMSFUgVjEsIDgoUzgpDQpCRkQwOTBBMiAgICAgIDI1QjEgICBTUkwgVjEsIFYxLCA4DQpCRkQwOTBBNCAgICAgIDJEQkYgICBBTkRJIFYxLCBWMSwgMHhGRkZGDQpCRkQwOTBBNiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDkwQTggICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQo1NTogICAgICAgICAgICAgICAgICAgICAgVEZEUF9ERUxBWSgpOw0KNTY6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDkwQUEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5MEFDICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDkwQUUgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOTBCMCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTBCMiAgICAgIDBDMDAgICBOT1ANCjU3OiAgICAgICAgICAgICAgICAgIA0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCB0ZmRwX3htaXRfaHdvcmQodWludDE2X3QgaHdvcmQpDQo2MDogICAgICAgICAgICAgICAgICB7DQpCRkQwOTY0OCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOTY0QSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5NjRDICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOTY0RSAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMA0KQkZEMDk2NTAgIDAwMDgzODVFICAgU0ggVjAsIDgoUzgpDQo2MTogICAgICAgICAgICAgICAgICAgICAgVEZEUC0+REFUQSA9ICh1aW50OF90KWh3b3JkOw0KQkZEMDk2NTQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDA5NjU4ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDk2NUEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwOTY1Qw0KQkZEMDk2NUMgIDAwMDgzNDdFICAgTEhVIFYxLCA4KFM4KQ0KQkZEMDk2NjAgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDA5NjYyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KNjI6ICAgICAgICAgICAgICAgICAgICAgIFRGRFBfREVMQVkoKTsNCjYzOiAgICAgICAgICAgICAgICAgICAgICBURkRQLT5EQVRBID0gKHVpbnQ4X3QpKGh3b3JkID4+IDgpOw0KQkZEMDk2NjQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDA5NjY4ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDk2NkEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwOTY2Qw0KQkZEMDk2NkMgIDAwMDgzNDdFICAgTEhVIFYxLCA4KFM4KQ0KQkZEMDk2NzAgICAgICAyNUIxICAgU1JMIFYxLCBWMSwgOA0KQkZEMDk2NzIgICAgICAyREJGICAgQU5ESSBWMSwgVjEsIDB4RkZGRg0KQkZEMDk2NzQgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDA5Njc2ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIFRGRFBfREVMQVkoKTsNCjY1OiAgICAgICAgICAgICAgICAgIH0NCkJGRDA5Njc4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTY3QSAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA5NjdDICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KQkZEMDk2N0UgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDk2ODAgICAgICAwQzAwICAgTk9QDQo2NjogICAgICAgICAgICAgICAgICANCjY3OiAgICAgICAgICAgICAgICAgIA0KNjg6ICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgdGZkcF94bWl0X3dvcmQodWludDMyX3Qgd29yZCkNCjY5OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA4Q0Y0ICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwOENGNiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwOENGOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDhDRkEgIDAwMTBGODlFICAgU1cgQTAsIDE2KFM4KQ0KNzA6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgaTsNCjcxOiAgICAgICAgICAgICAgICAgIA0KNzI6ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDB1OyBpIDwgNDsgaSsrKSB7DQpCRkQwOENGRSAgMDAwMDE4MUUgICBTQiBaRVJPLCAwKFM4KQ0KQkZEMDhEMDIgICAgICBDQzEzICAgQiAweEJGRDA4RDJBDQpCRkQwOEQwNCAgICAgIDBDMDAgICBOT1ANCkJGRDA4RDIwICAwMDAwMTQ1RSAgIExCVSBWMCwgMChTOCkNCkJGRDA4RDI0ICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQ0KQkZEMDhEMjYgIDAwMDAxODVFICAgU0IgVjAsIDAoUzgpDQpCRkQwOEQyQSAgMDAwMDE0NUUgICBMQlUgVjAsIDAoUzgpDQpCRkQwOEQyRSAgMDAwNEIwNDIgICBTTFRJVSBWMCwgVjAsIDQNCkJGRDA4RDMyICBGRkU4NDBBMiAgIEJORVpDIFYwLCAweEJGRDA4RDA2DQpCRkQwOEQzNCAgMEZCRUZGRTggICBMVyBSQSwgNDAzMChUMCkNCjczOiAgICAgICAgICAgICAgICAgICAgICAgICAgVEZEUC0+REFUQSA9ICh1aW50OF90KXdvcmQ7DQpCRkQwOEQwNiAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDhEMEEgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwOEQwQyAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDA4RDBFDQpCRkQwOEQwRSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwOEQxMiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDhEMTQgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQo3NDogICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgPj49IDg7IA0KQkZEMDhEMTYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDhEMUEgICAgICAyNTIxICAgU1JMIFYwLCBWMCwgOA0KQkZEMDhEMUMgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KNzU6ICAgICAgICAgICAgICAgICAgICAgICAgICBURkRQX0RFTEFZKCk7DQo3NjogICAgICAgICAgICAgICAgICAgICAgfQ0KNzc6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDhEMzYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4RDM4ICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDA4RDNBICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA4RDNDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4RDNFICAgICAgMEMwMCAgIE5PUA0KNzg6ICAgICAgICAgICAgICAgICAgDQo3OTogICAgICAgICAgICAgICAgICANCjgwOiAgICAgICAgICAgICAgICAgIC8qKg0KODE6ICAgICAgICAgICAgICAgICAgICogdGZkcF9zbGVlcF9lbiAtIEdhdGUgY2xvY2tzIE9uL09mZiB0byBURkRQIGJsb2NrIHdoZW4gaWRsZQ0KODI6ICAgICAgICAgICAgICAgICAgICogDQo4MzogICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIEMyMTk2OSAoMi80LzIwMTQpDQo4NDogICAgICAgICAgICAgICAgICAgKiANCjg1OiAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSBzbGVlcF9lbiAoMT1HYXRlIGNsb2NrcyB3aGVuIGlkbGUpLCAoMD1EbyBub3QgZ2F0ZSANCjg2OiAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICBjbG9ja3Mgd2hlbiBpZGxlKQ0KODc6ICAgICAgICAgICAgICAgICAgICovDQo4ODogICAgICAgICAgICAgICAgICB2b2lkIHRmZHBfc2xlZXBfZW4odWludDhfdCBzbGVlcF9lbikNCjg5OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA4OEFDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA4OEFFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDg4QjAgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4OEIyICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwODhCNCAgMDAwODE4NUUgICBTQiBWMCwgOChTOCkNCjkwOiAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNsZWVwX2VuICkgew0KQkZEMDg4QjggIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQ0KQkZEMDg4QkMgIDAwMEU0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg4REMNCjkxOiAgICAgICAgICAgICAgICAgICAgICAgICAgUENSLT5FQ19TTEVFUF9FTiB8PSAoUENSX0VDX1RGRFBfU0xQX0NMSyk7DQpCRkQwODhDMCAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOA0KQkZEMDg4QzQgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2DQpCRkQwODhDOCAgQTAwODQxQTMgICBMVUkgVjEsIDB4QTAwOA0KQkZEMDg4Q0MgIDAxMDA1MDYzICAgT1JJIFYxLCBWMSwgMjU2DQpCRkQwODhEMCAgICAgIDY5QjIgICBMVyBWMSwgOChWMSkNCkJGRDA4OEQyICAwMDgwNTA2MyAgIE9SSSBWMSwgVjEsIDEyOA0KQkZEMDg4RDYgICAgICBFOUEyICAgU1cgVjEsIDgoVjApDQpCRkQwODhEOCAgICAgIENDMEUgICBCIDB4QkZEMDg4RjYNCkJGRDA4OERBICAgICAgMEMwMCAgIE5PUA0KOTI6ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQo5MzogICAgICAgICAgICAgICAgICAgICAgICAgIFBDUi0+RUNfU0xFRVBfRU4gJj0gfihQQ1JfRUNfVEZEUF9TTFBfQ0xLKTsNCkJGRDA4OERDICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4DQpCRkQwODhFMCAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDA4OEU0ICBBMDA4NDFBMyAgIExVSSBWMSwgMHhBMDA4DQpCRkQwODhFOCAgMDEwMDUwNjMgICBPUkkgVjEsIFYxLCAyNTYNCkJGRDA4OEVDICAgICAgNkEzMiAgIExXIEEwLCA4KFYxKQ0KQkZEMDg4RUUgIEZGN0YzMDYwICAgQURESVUgVjEsIFpFUk8sIC0xMjkNCkJGRDA4OEYwICA0NDlDRkY3RiAgIExXIEsxLCAxNzU2NChSQSkNCkJGRDA4OEYyICAgICAgNDQ5QyAgIEFORDE2IFYxLCBBMA0KQkZEMDg4RjQgICAgICBFOUEyICAgU1cgVjEsIDgoVjApDQo5NDogICAgICAgICAgICAgICAgICAgICAgfQ0KOTU6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDg4RjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4OEY4ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDg4RkEgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwODhGQyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwODhGRSAgICAgIDBDMDAgICBOT1ANCjk2OiAgICAgICAgICAgICAgICAgIA0KOTc6ICAgICAgICAgICAgICAgICAgDQo5ODogICAgICAgICAgICAgICAgICAvKioNCjk5OiAgICAgICAgICAgICAgICAgICAqIHRmZHBfZW5hYmxlIC0gSW5pdCBUcmFjZSBGSUZPIERhdGEgUG9ydA0KMTAwOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGJvb2xlYW4gdHJ1ZT1lbmFibGUgVEZEUCwgZmFsc2U9ZGlzYWJsZSBURkRQIA0KMTAxOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGJvb2xlYW4gdHJ1ZT1jaGFuZ2UgVEZEUCBwaW4gY29uZmlndXJhdGlvbi4gDQoxMDI6ICAgICAgICAgICAgICAgICAgKiBJZiBURkRQIGlzIGVuYWJsZWQgdGhlbiBHUElPMTAzLzEwNCBzZXQgdG8gQWx0LiBGdW5jLiAxIA0KMTAzOiAgICAgICAgICAgICAgICAgICogRWxzZSBHUElPMTAzLzEwNCBzZXQgdG8gR1BJTyBpbnB1dCwgaW50ZXJuYWwgUFUgZW5hYmxlZC4gDQoxMDQ6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSAtIA0KMTA1OiAgICAgICAgICAgICAgICAgICovDQoxMDY6ICAgICAgICAgICAgICAgICB2b2lkIHRmZHBfZW5hYmxlKHVpbnQ4X3QgZW4sIHVpbnQ4X3QgcGluX2NmZykNCjEwNzogICAgICAgICAgICAgICAgIHsNCkJGRDAzMkM0ICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwMzJDNiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwMzJDOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDMyQ0EgICAgICAwQzY0ICAgTU9WRSBWMSwgQTANCkJGRDAzMkNDICAgICAgMEM0NSAgIE1PVkUgVjAsIEExDQpCRkQwMzJDRSAgMDAxMDE4N0UgICBTQiBWMSwgMTYoUzgpDQpCRkQwMzJEMiAgMDAxNDE4NUUgICBTQiBWMCwgMjAoUzgpDQoxMDg6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGVsYXk7DQoxMDk6ICAgICAgICAgICAgICAgICANCjExMDogICAgICAgICAgICAgICAgICAgICBpZiAoZW4pIHsNCkJGRDAzMkQ2ICAwMDEwMTQ1RSAgIExCVSBWMCwgMTYoUzgpDQpCRkQwMzJEQSAgMDA3MjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzNDMg0KMTExOiAgICAgICAgICAgICAgICAgICAgICAgICANCjExMjogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpbl9jZmcpIHsNCkJGRDAzMkRFICAwMDE0MTQ1RSAgIExCVSBWMCwgMjAoUzgpDQpCRkQwMzJFMiAgMDA2NzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzNCNA0KMTEzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5wdXQgd2l0aCBBbHRPdXQ9MSB0byBkcml2ZSBoaWdoIHdoZW4gc3dpdGNoZWQgdG8gb3V0cHV0DQoxMTQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0NUUkwtPlJFR1tURkRQX1BJTl8xXS53ID0gKDF1bCA8PCAxNik7DQpCRkQwMzJFNiAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOA0KQkZEMDMyRUEgIDEwMDA1MDQyICAgT1JJIFYwLCBWMCwgNDA5Ng0KQkZEMDMyRUMgIDQxQTMxMDAwICAgQURESSBaRVJPLCBaRVJPLCAxNjgwMw0KQkZEMDMyRUUgIDAwMDE0MUEzICAgTFVJIFYxLCAweDENCkJGRDAzMkYyICAwMTM4Rjg2MiAgIFNXIFYxLCAzMTIoVjApDQoxMTU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0NUUkwtPlJFR1tURkRQX1BJTl8yXS53ID0gKDF1bCA8PCAxNik7DQpCRkQwMzJGNiAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOA0KQkZEMDMyRkEgIDEwMDA1MDQyICAgT1JJIFYwLCBWMCwgNDA5Ng0KQkZEMDMyRkMgIDQxQTMxMDAwICAgQURESSBaRVJPLCBaRVJPLCAxNjgwMw0KQkZEMDMyRkUgIDAwMDE0MUEzICAgTFVJIFYxLCAweDENCkJGRDAzMzAyICAwMTNDRjg2MiAgIFNXIFYxLCAzMTYoVjApDQpCRkQwMzMwNCAgMzA0MDAxM0MgICBTUkwgVDEsIEdQLCA2DQoxMTY6ICAgICAgICAgICAgICAgICANCjExNzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gMTI4Ow0KQkZEMDMzMDYgIDAwODAzMDQwICAgQURESVUgVjAsIFpFUk8sIDEyOA0KQkZEMDMzMEEgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpDQoxMTg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRlbGF5LS0gKQ0KQkZEMDMzMEUgICAgICBDQzAzICAgQiAweEJGRDAzMzE2DQpCRkQwMzMxMCAgICAgIDBDMDAgICBOT1ANCkJGRDAzMzE2ICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KQkZEMDMzMTggIDAwNDAwMDAwICAgU1JMIFpFUk8sIFpFUk8sIDANCkJGRDAzMzFBICAxMzkwMDA0MCAgIFNMVFUgVjAsIFpFUk8sIFYwDQpCRkQwMzMxQyAgMkQyRDEzOTAgICBBRERJIEdQLCBTMCwgMTE1NjUNCkJGRDAzMzFFICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGDQpCRkQwMzMyMCAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkNCkJGRDAzMzI0ICAgICAgNkRCRSAgIEFERElVIFYxLCBWMSwgLTENCkJGRDAzMzI2ICAwMDAwRjg3RSAgIFNXIFYxLCAwKFM4KQ0KQkZEMDMzMkEgIEZGRjI0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDMzMTINCkJGRDAzMzJDICA0MUEyRkZGMiAgIExXIFJBLCAxNjgwMihTMikNCjExOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCjEyMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFVfTk9QKCk7DQpCRkQwMzMxMiAgMDgwMDAwMDAgICBTU05PUA0KQkZEMDMzMTQgICAgICAwODAwICAgTEJVIFMwLCAwKFMwKQ0KMTIxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTIyOiAgICAgICAgICAgICAgICAgDQoxMjM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHUElPIE91dHB1dCBlbmFibGVkIChkcml2ZSBiYXNlZCBvbiBhYm92ZSBzZXR0aW5ncykNCjEyNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQ1RSTC0+UkVHW1RGRFBfUElOXzFdLncgfD0gKDF1bCA8PCA5KTsNCkJGRDAzMzJFICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4DQpCRkQwMzMzMiAgMTAwMDUwNDIgICBPUkkgVjAsIFYwLCA0MDk2DQpCRkQwMzMzNCAgNDFBMzEwMDAgICBBRERJIFpFUk8sIFpFUk8sIDE2ODAzDQpCRkQwMzMzNiAgQTAwODQxQTMgICBMVUkgVjEsIDB4QTAwOA0KQkZEMDMzM0EgIDEwMDA1MDYzICAgT1JJIFYxLCBWMSwgNDA5Ng0KQkZEMDMzM0MgIEZDNjMxMDAwICAgQURESSBaRVJPLCBaRVJPLCAtOTI1DQpCRkQwMzMzRSAgMDEzOEZDNjMgICBMVyBWMSwgMzEyKFYxKQ0KQkZEMDMzNDIgIDAyMDA1MDYzICAgT1JJIFYxLCBWMSwgNTEyDQpCRkQwMzM0NiAgMDEzOEY4NjIgICBTVyBWMSwgMzEyKFYwKQ0KMTI1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19DVFJMLT5SRUdbVEZEUF9QSU5fMl0udyB8PSAoMXVsIDw8IDkpOw0KQkZEMDMzNEEgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgNCkJGRDAzMzRFICAxMDAwNTA0MiAgIE9SSSBWMCwgVjAsIDQwOTYNCkJGRDAzMzUwICA0MUEzMTAwMCAgIEFEREkgWkVSTywgWkVSTywgMTY4MDMNCkJGRDAzMzUyICBBMDA4NDFBMyAgIExVSSBWMSwgMHhBMDA4DQpCRkQwMzM1NiAgMTAwMDUwNjMgICBPUkkgVjEsIFYxLCA0MDk2DQpCRkQwMzM1OCAgRkM2MzEwMDAgICBBRERJIFpFUk8sIFpFUk8sIC05MjUNCkJGRDAzMzVBICAwMTNDRkM2MyAgIExXIFYxLCAzMTYoVjEpDQpCRkQwMzM1RSAgMDIwMDUwNjMgICBPUkkgVjEsIFYxLCA1MTINCkJGRDAzMzYyICAwMTNDRjg2MiAgIFNXIFYxLCAzMTYoVjApDQpCRkQwMzM2NCAgMzA0MDAxM0MgICBTUkwgVDEsIEdQLCA2DQoxMjY6ICAgICAgICAgICAgICAgICANCjEyNzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gMTI4Ow0KQkZEMDMzNjYgIDAwODAzMDQwICAgQURESVUgVjAsIFpFUk8sIDEyOA0KMTI4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBkZWxheS0tICkNCkJGRDAzMzZBICAgICAgQ0MwNCAgIEIgMHhCRkQwMzM3NA0KQkZEMDMzNkMgIDAwMDBGODVFICAgU1cgVjAsIDAoUzgpDQpCRkQwMzM2RSAgMDAwMDAwMDAgICBOT1ANCkJGRDAzMzc0ICAwMDAwRkM1RSAgIExXIFYwLCAwKFM4KQ0KQkZEMDMzNzYgIDAwNDAwMDAwICAgU1JMIFpFUk8sIFpFUk8sIDANCkJGRDAzMzc4ICAxMzkwMDA0MCAgIFNMVFUgVjAsIFpFUk8sIFYwDQpCRkQwMzM3QSAgMkQyRDEzOTAgICBBRERJIEdQLCBTMCwgMTE1NjUNCkJGRDAzMzdDICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGDQpCRkQwMzM3RSAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkNCkJGRDAzMzgyICAgICAgNkRCRSAgIEFERElVIFYxLCBWMSwgLTENCkJGRDAzMzg0ICAwMDAwRjg3RSAgIFNXIFYxLCAwKFM4KQ0KQkZEMDMzODggIEZGRjI0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDMzNzANCkJGRDAzMzhBICA0MUEyRkZGMiAgIExXIFJBLCAxNjgwMihTMikNCjEyOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCjEzMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFVfTk9QKCk7DQpCRkQwMzM3MCAgMDgwMDAwMDAgICBTU05PUA0KQkZEMDMzNzIgICAgICAwODAwICAgTEJVIFMwLCAwKFMwKQ0KMTMxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTMyOiAgICAgICAgICAgICAgICAgDQoxMzM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggdG8gRnVuY3Rpb24gMSAoVEZEUCBtb2RlIGJbMTM6MTJdPTAxYikNCjEzNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQ1RSTC0+UkVHW1RGRFBfUElOXzFdLncgPSAoMXVsIDw8IDE2KSArICgxdWwgPDwgMTIpOw0KQkZEMDMzOEMgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgNCkJGRDAzMzkwICAxMDAwNTA0MiAgIE9SSSBWMCwgVjAsIDQwOTYNCkJGRDAzMzkyICA0MUEzMTAwMCAgIEFEREkgWkVSTywgWkVSTywgMTY4MDMNCkJGRDAzMzk0ICAwMDAxNDFBMyAgIExVSSBWMSwgMHgxDQpCRkQwMzM5OCAgMTAwMDUwNjMgICBPUkkgVjEsIFYxLCA0MDk2DQpCRkQwMzM5QSAgRjg2MjEwMDAgICBBRERJIFpFUk8sIFpFUk8sIC0xOTUwDQpCRkQwMzM5QyAgMDEzOEY4NjIgICBTVyBWMSwgMzEyKFYwKQ0KMTM1OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19DVFJMLT5SRUdbVEZEUF9QSU5fMl0udyA9ICgxdWwgPDwgMTYpICsgKDF1bCA8PCAxMik7DQpCRkQwMzNBMCAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOA0KQkZEMDMzQTQgIDEwMDA1MDQyICAgT1JJIFYwLCBWMCwgNDA5Ng0KQkZEMDMzQTYgIDQxQTMxMDAwICAgQURESSBaRVJPLCBaRVJPLCAxNjgwMw0KQkZEMDMzQTggIDAwMDE0MUEzICAgTFVJIFYxLCAweDENCkJGRDAzM0FDICAxMDAwNTA2MyAgIE9SSSBWMSwgVjEsIDQwOTYNCkJGRDAzM0FFICBGODYyMTAwMCAgIEFEREkgWkVSTywgWkVSTywgLTE5NTANCkJGRDAzM0IwICAwMTNDRjg2MiAgIFNXIFYxLCAzMTYoVjApDQoxMzY6ICAgICAgICAgICAgICAgICANCjEzNzogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTM4OiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiWzBdPTEoRW5hYmxlKQ0KMTM5OiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiWzFdPTAoU2hpZnQgZGF0YSBvdXQgb24gcmlzaW5nIGVkZ2UpIA0KMTQwOiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiWzM6Ml09MDBiIFRGRFAgc2hpZnQgY2xvY2tzID0gQUhCX0NMSy8yDQoxNDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJbNjo0XT0wMDBiIDEgY2xvY2sgaW50ZXItcGFja2V0IGRlbGF5DQoxNDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KMTQzOiAgICAgICAgICAgICAgICAgICAgICAgICBURkRQLT5DT05UUk9MID0gMHgwMXU7DQpCRkQwMzNCNCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDMzQjggIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMzNCQSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAzM0JDDQpCRkQwMzNCQyAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDMzQkUgICAgICBDQzE2ICAgQiAweEJGRDAzM0VDDQpCRkQwMzNDMCAgICAgIDg5QTQgICBTQiBWMSwgNChWMCkNCjE0NDogICAgICAgICAgICAgICAgIA0KMTQ1OiAgICAgICAgICAgICAgICAgICAgIH0gDQoxNDY6ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KMTQ3OiAgICAgICAgICAgICAgICAgICAgIHsNCjE0ODogICAgICAgICAgICAgICAgICAgICAgICAgVEZEUC0+Q09OVFJPTCA9IDB4MDB1Ow0KQkZEMDMzQzIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAzM0M2ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDMzQzggICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMzNDQQ0KQkZEMDMzQ0EgICAgICA4ODI0ICAgU0IgUzAsIDQoVjApDQoxNDk6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaW5fY2ZnKSANCkJGRDAzM0NDICAwMDE0MTQ1RSAgIExCVSBWMCwgMjAoUzgpDQpCRkQwMzNEMCAgMDAwQzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwMzNFQw0KMTUwOiAgICAgICAgICAgICAgICAgICAgICAgICB7IC8qIFNldCB0byBQT1IgdmFsdWUgKHRyaS1zdGF0ZWQgaW5wdXQpICovDQoxNTE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0NUUkwtPlJFR1tURkRQX1BJTl8xXS53ID0gMDsNCkJGRDAzM0Q0ICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4DQpCRkQwMzNEOCAgMTAwMDUwNDIgICBPUkkgVjAsIFYwLCA0MDk2DQpCRkQwMzNEQSAgRjgwMjEwMDAgICBBRERJIFpFUk8sIFpFUk8sIC0yMDQ2DQpCRkQwMzNEQyAgMDEzOEY4MDIgICBTVyBaRVJPLCAzMTIoVjApDQoxNTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0NUUkwtPlJFR1tURkRQX1BJTl8yXS53ID0gMDsNCkJGRDAzM0UwICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4DQpCRkQwMzNFNCAgMTAwMDUwNDIgICBPUkkgVjAsIFYwLCA0MDk2DQpCRkQwMzNFNiAgRjgwMjEwMDAgICBBRERJIFpFUk8sIFpFUk8sIC0yMDQ2DQpCRkQwMzNFOCAgMDEzQ0Y4MDIgICBTVyBaRVJPLCAzMTYoVjApDQoxNTM6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjE1NDogICAgICAgICAgICAgICAgICAgICB9DQoxNTU6ICAgICAgICAgICAgICAgICB9IC8vIGVuZCB0ZmRwX2VuYWJsZSgpDQpCRkQwMzNFQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDMzRUUgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDMzRjAgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDMzRjIgICAgICA0QzA5ICAgQURESVUgU1AsIFNQLCAxNg0KMTU2OiAgICAgICAgICAgICAgICAgDQoxNTc6ICAgICAgICAgICAgICAgICANCjE1ODogICAgICAgICAgICAgICAgIC8qKg0KMTU5OiAgICAgICAgICAgICAgICAgICogVEZEUFRyYWNlMCAtIFRSQUNFMDogdHJhbnNtaXQgMTYtYml0IHRyYWNlIG51bWJlciBsc2IgZmlyc3QgDQoxNjA6ICAgICAgICAgICAgICAgICAgKiBvdmVyIFRGRFAuIA0KMTYxOiAgICAgICAgICAgICAgICAgICogDQoxNjI6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoxNjM6ICAgICAgICAgICAgICAgICAgKiANCjE2NDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuYnIgMTYtYml0IHRyYWNlIG51bWJlciANCjE2NTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBiIHVudXNlZA0KMTY2OiAgICAgICAgICAgICAgICAgICogDQoxNjc6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQ4X3QgYWx3YXlzIFRSVUUgDQoxNjg6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBGdW5jdGlvbiBpbXBsZW1lbnRzIGNyaXRpY2FsIHNlY3Rpb24uIA0KMTY5OiAgICAgICAgICAgICAgICAgICogVXNlcyB0b29sIGtpdCBfX2Rpc2FibGVfaXJxKCkvX19lbmFibGVfaXJxKCkgcGFpciB3aGljaCBtYXkgdXNlIA0KMTcwOiAgICAgICAgICAgICAgICAgICogcHJpdmlsZWRnZWQgQ29ydGV4LU14IGluc3RydWN0aW9ucy4gDQoxNzE6ICAgICAgICAgICAgICAgICAgKi8NCjE3MjogICAgICAgICAgICAgICAgIHZvaWQgVEZEUFRyYWNlMCAoIHVpbnQxNl90IG5iciwgdWludDhfdCBiICkNCjE3MzogICAgICAgICAgICAgICAgIHsNCkJGRDA5QTE4ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwOUExQSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwOUExQyAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwOUExRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlBMjAgICAgICAwQzY0ICAgTU9WRSBWMSwgQTANCkJGRDA5QTIyICAgICAgMEM0NSAgIE1PVkUgVjAsIEExDQpCRkQwOUEyNCAgMDAxODM4N0UgICBTSCBWMSwgMjQoUzgpDQpCRkQwOUEyOCAgMDAxQzE4NUUgICBTQiBWMCwgMjgoUzgpDQoxNzQ6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQoxNzU6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXNhdmU7DQoxNzY6ICAgICAgICAgICAgICAgICANCjE3NzogICAgICAgICAgICAgICAgICAgICBpc2F2ZSA9IG1pcHMzMnIyX2Rpc19pbnRyKCk7DQoxNzg6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjE3OTogICAgICAgICAgICAgICAgIA0KMTgwOiAgICAgICAgICAgICAgICAgICAgICh2b2lkKWI7DQoxODE6ICAgICAgICAgICAgICAgICAgICAgdGZkcF94bWl0X2hlYWRlcihuYnIpOw0KQkZEMDlBMkMgIDAwMTgzNDVFICAgTEhVIFYwLCAyNChTOCkNCkJGRDA5QTMwICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwOUEzMiAgNDgzNjc3RTggICBKQUxTIHRmZHBfeG1pdF9oZWFkZXINCkJGRDA5QTM0ICAgICAgNDgzNiAgIExXIEFULCA4OChTUCkNCkJGRDA5QTM2ICAgICAgMEMwMCAgIE5PUA0KMTgyOiAgICAgICAgICAgICAgICAgDQoxODM6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQoxODQ6ICAgICAgICAgICAgICAgICAgICAgIG1pcHMzMnIyX3Jlc3RvcmVfaW50cihpc2F2ZSk7DQoxODU6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjE4NjogICAgICAgICAgICAgICAgIH0NCkJGRDA5QTM4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUEzQSAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApDQpCRkQwOUEzQyAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApDQpCRkQwOUEzRSAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0DQpCRkQwOUE0MCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUE0MiAgICAgIDBDMDAgICBOT1ANCjE4NzogICAgICAgICAgICAgICAgIA0KMTg4OiAgICAgICAgICAgICAgICAgDQoxODk6ICAgICAgICAgICAgICAgICAvKioNCjE5MDogICAgICAgICAgICAgICAgICAqIFRSRFBUcmFjZTEgLSBUUkFDRTE6IHRyYW5zbWl0IDE2LWJpdCB0cmFjZSBudW1iZXIgbHNiIGZpcnN0IA0KMTkxOiAgICAgICAgICAgICAgICAgICogYW5kIDE2LWJpdCBkYXRhIGxzYiBmaXJzdCBvdmVyIFRGRFAuIA0KMTkyOiAgICAgICAgICAgICAgICAgICogDQoxOTM6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoxOTQ6ICAgICAgICAgICAgICAgICAgKiANCjE5NTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuYnIgMTYtYml0IHRyYWNlIG51bWJlciANCjE5NjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBiIHVudXNlZCANCjE5NzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB1aW50MzJfdCBwMSAxNi1iaXQgZGF0YTEgaW4gYlsxNTowXQ0KMTk4OiAgICAgICAgICAgICAgICAgICogDQoxOTk6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQ4X3QgYWx3YXlzIFRSVUUgDQoyMDA6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBGdW5jdGlvbiBpbXBsZW1lbnRzIGNyaXRpY2FsIHNlY3Rpb24uIA0KMjAxOiAgICAgICAgICAgICAgICAgICogVXNlcyB0b29sIGtpdCBfX2Rpc2FibGVfaXJxKCkvX19lbmFibGVfaXJxKCkgcGFpciB3aGljaCBtYXkgdXNlIA0KMjAyOiAgICAgICAgICAgICAgICAgICogcHJpdmlsZWRnZWQgQ29ydGV4LU14IGluc3RydWN0aW9ucy4gDQoyMDM6ICAgICAgICAgICAgICAgICAgKi8NCjIwNDogICAgICAgICAgICAgICAgIHZvaWQgVEZEUFRyYWNlMSAoIHVpbnQxNl90IG5iciwgdWludDhfdCBiLCB1aW50MzJfdCBwMSApDQoyMDU6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTRBMCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNA0KQkZEMDk0QTIgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQ0KQkZEMDk0QTQgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQ0KQkZEMDk0QTYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5NEE4ICAgICAgMEM2NCAgIE1PVkUgVjEsIEEwDQpCRkQwOTRBQSAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQ0KQkZEMDk0QUMgIDAwMjBGOERFICAgU1cgQTIsIDMyKFM4KQ0KQkZEMDk0QjAgIDAwMTgzODdFICAgU0ggVjEsIDI0KFM4KQ0KQkZEMDk0QjQgIDAwMUMxODVFICAgU0IgVjAsIDI4KFM4KQ0KMjA2OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMjA3OiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlzYXZlOw0KMjA4OiAgICAgICAgICAgICAgICAgICAgIA0KMjA5OiAgICAgICAgICAgICAgICAgICAgIGlzYXZlID0gbWlwczMycjJfZGlzX2ludHIoKTsNCjIxMDogICAgICAgICAgICAgICAgICNlbmRpZg0KMjExOiAgICAgICAgICAgICAgICAgICAgICh2b2lkKWI7DQoyMTI6ICAgICAgICAgICAgICAgICAgICAgdGZkcF94bWl0X2hlYWRlcihuYnIpOw0KQkZEMDk0QjggIDAwMTgzNDVFICAgTEhVIFYwLCAyNChTOCkNCkJGRDA5NEJDICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwOTRCRSAgNDgzNjc3RTggICBKQUxTIHRmZHBfeG1pdF9oZWFkZXINCkJGRDA5NEMwICAgICAgNDgzNiAgIExXIEFULCA4OChTUCkNCkJGRDA5NEMyICAgICAgMEMwMCAgIE5PUA0KMjEzOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMSk7DQpCRkQwOTRDNCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwOTRDOCAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGDQpCRkQwOTRDQSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDk0Q0MgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQNCkJGRDA5NENFICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkNCkJGRDA5NEQwICAgICAgMEMwMCAgIE5PUA0KMjE0OiAgICAgICAgICAgICAgICAgDQoyMTU6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQoyMTY6ICAgICAgICAgICAgICAgICAgICAgbWlwczMycjJfcmVzdG9yZV9pbnRyKGlzYXZlKTsNCjIxNzogICAgICAgICAgICAgICAgICNlbmRpZg0KMjE4OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDk0RDIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5NEQ0ICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA5NEQ2ICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA5NEQ4ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA5NERBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5NERDICAgICAgMEMwMCAgIE5PUA0KMjE5OiAgICAgICAgICAgICAgICAgDQoyMjA6ICAgICAgICAgICAgICAgICANCjIyMTogICAgICAgICAgICAgICAgIC8qKg0KMjIyOiAgICAgICAgICAgICAgICAgICogVEZEUFRyYWNlMiAtIFRSQUNFMjogdHJhbnNtaXQgMTYtYml0IHRyYWNlIG51bWJlciBsc2IgZmlyc3QgDQoyMjM6ICAgICAgICAgICAgICAgICAgKiBhbmQgdHdvIDE2LWJpdCBkYXRhIHBhcmFtZXRlcnMgbHNiIGZpcnN0IG92ZXIgVEZEUC4NCjIyNDogICAgICAgICAgICAgICAgICAqIA0KMjI1OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjI2OiAgICAgICAgICAgICAgICAgICogDQoyMjc6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmJyIHRyYWNlIG51bWJlcg0KMjI4OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGIgdW51c2VkDQoyMjk6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdWludDMyX3QgcDEgMTYtYml0IGRhdGExIGluIGJbMTU6MF0NCjIzMDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB1aW50MzJfdCBwMiAxNi1iaXQgZGF0YTIgaW4gYlsxNTowXQ0KMjMxOiAgICAgICAgICAgICAgICAgICogDQoyMzI6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQ4X3QgYWx3YXlzIFRSVUUgDQoyMzM6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBVc2VzIHRvb2wga2l0IGZ1bmN0aW9ucyB0byBzYXZlL2Rpc2FibGUvcmVzdG9yZSANCjIzNDogICAgICAgICAgICAgICAgICAqICAgICAgIGludGVycnVwdHMgZm9yIGNyaXRpY2FsIHNlY3Rpb24uIFRoZXNlIG1heSB1c2UNCjIzNTogICAgICAgICAgICAgICAgICAqICAgICAgIHByaXZpbGVkZ2VkIGluc3RydWN0aW9ucy4NCjIzNjogICAgICAgICAgICAgICAgICAqLw0KMjM3OiAgICAgICAgICAgICAgICAgdm9pZCBURkRQVHJhY2UyICggdWludDE2X3QgbmJyLCB1aW50OF90IGIsIHVpbnQzMl90IHAxLCB1aW50MzJfdCBwMiApDQoyMzg6ICAgICAgICAgICAgICAgICB7DQpCRkQwOEE0NCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNA0KQkZEMDhBNDYgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQ0KQkZEMDhBNDggICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQ0KQkZEMDhBNEEgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4QTRDICAgICAgMEM2NCAgIE1PVkUgVjEsIEEwDQpCRkQwOEE0RSAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQ0KQkZEMDhBNTAgIDAwMjBGOERFICAgU1cgQTIsIDMyKFM4KQ0KQkZEMDhBNTQgIDAwMjRGOEZFICAgU1cgQTMsIDM2KFM4KQ0KQkZEMDhBNTggIDAwMTgzODdFICAgU0ggVjEsIDI0KFM4KQ0KQkZEMDhBNUMgIDAwMUMxODVFICAgU0IgVjAsIDI4KFM4KQ0KMjM5OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMjQwOiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlzYXZlOw0KMjQxOiAgICAgICAgICAgICAgICAgICAgIA0KMjQyOiAgICAgICAgICAgICAgICAgICAgIGlzYXZlID0gbWlwczMycjJfZGlzX2ludHIoKTsNCjI0MzogICAgICAgICAgICAgICAgICNlbmRpZg0KMjQ0OiAgICAgICAgICAgICAgICAgICAgICh2b2lkKWI7DQoyNDU6ICAgICAgICAgICAgICAgICAgICAgdGZkcF94bWl0X2hlYWRlcihuYnIpOw0KQkZEMDhBNjAgIDAwMTgzNDVFICAgTEhVIFYwLCAyNChTOCkNCkJGRDA4QTY0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwOEE2NiAgNDgzNjc3RTggICBKQUxTIHRmZHBfeG1pdF9oZWFkZXINCkJGRDA4QTY4ICAgICAgNDgzNiAgIExXIEFULCA4OChTUCkNCkJGRDA4QTZBICAgICAgMEMwMCAgIE5PUA0KMjQ2OiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMSk7DQpCRkQwOEE2QyAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwOEE3MCAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGDQpCRkQwOEE3MiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDhBNzQgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQNCkJGRDA4QTc2ICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkNCkJGRDA4QTc4ICAgICAgMEMwMCAgIE5PUA0KMjQ3OiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMik7DQpCRkQwOEE3QSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwOEE3RSAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGDQpCRkQwOEE4MCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDhBODIgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQNCkJGRDA4QTg0ICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkNCkJGRDA4QTg2ICAgICAgMEMwMCAgIE5PUA0KMjQ4OiAgICAgICAgICAgICAgICAgDQoyNDk6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQoyNTA6ICAgICAgICAgICAgICAgICAgICAgbWlwczMycjJfcmVzdG9yZV9pbnRyKGlzYXZlKTsNCjI1MTogICAgICAgICAgICAgICAgICNlbmRpZg0KMjUyOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDhBODggICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4QThBICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA4QThDICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA4QThFICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA4QTkwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4QTkyICAgICAgMEMwMCAgIE5PUA0KMjUzOiAgICAgICAgICAgICAgICAgDQoyNTQ6ICAgICAgICAgICAgICAgICANCjI1NTogICAgICAgICAgICAgICAgIC8qKg0KMjU2OiAgICAgICAgICAgICAgICAgICogVEZEUFRyYWNlMyAtIFRSQUNFMzogdHJhbnNtaXQgMTYtYml0IHRyYWNlIG51bWJlciBsc2IgZmlyc3QgDQoyNTc6ICAgICAgICAgICAgICAgICAgKiBhbmQgdGhyZWUgMTYtYml0IGRhdGEgcGFyYW1ldGVycyBsc2IgZmlyc3Qgb3ZlciBURkRQLg0KMjU4OiAgICAgICAgICAgICAgICAgICogDQoyNTk6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoyNjA6ICAgICAgICAgICAgICAgICAgKiANCjI2MTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBuYnIgdHJhY2UgbnVtYmVyDQoyNjI6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gYiB1bnVzZWQNCjI2MzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB1aW50MzJfdCBwMSAxNi1iaXQgZGF0YTEgaW4gYlsxNTowXQ0KMjY0OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHVpbnQzMl90IHAyIDE2LWJpdCBkYXRhMiBpbiBiWzE1OjBdDQoyNjU6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdWludDMyX3QgcDMgMTYtYml0IGRhdGEzIGluIGJbMTU6MF0NCjI2NjogICAgICAgICAgICAgICAgICAqIA0KMjY3OiAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IGFsd2F5cyBUUlVFIA0KMjY4OiAgICAgICAgICAgICAgICAgICogQG5vdGUgVXNlcyB0b29sIGtpdCBmdW5jdGlvbnMgdG8gc2F2ZS9kaXNhYmxlL3Jlc3RvcmUgDQoyNjk6ICAgICAgICAgICAgICAgICAgKiAgICAgICBpbnRlcnJ1cHRzIGZvciBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBtYXkgdXNlDQoyNzA6ICAgICAgICAgICAgICAgICAgKiAgICAgICBwcml2aWxlZGdlZCBpbnN0cnVjdGlvbnMuIA0KMjcxOiAgICAgICAgICAgICAgICAgICovDQoyNzI6ICAgICAgICAgICAgICAgICB2b2lkIFRGRFBUcmFjZTMgKCB1aW50MTZfdCBuYnIsIHVpbnQ4X3QgYiwgdWludDMyX3QgcDEsIHVpbnQzMl90IHAyLCB1aW50MzJfdCBwMykNCjI3MzogICAgICAgICAgICAgICAgIHsNCkJGRDA4Mjc0ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwODI3NiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwODI3OCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwODI3QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDgyN0MgICAgICAwQzY0ICAgTU9WRSBWMSwgQTANCkJGRDA4MjdFICAgICAgMEM0NSAgIE1PVkUgVjAsIEExDQpCRkQwODI4MCAgMDAyMEY4REUgICBTVyBBMiwgMzIoUzgpDQpCRkQwODI4NCAgMDAyNEY4RkUgICBTVyBBMywgMzYoUzgpDQpCRkQwODI4OCAgMDAxODM4N0UgICBTSCBWMSwgMjQoUzgpDQpCRkQwODI4QyAgMDAxQzE4NUUgICBTQiBWMCwgMjgoUzgpDQoyNzQ6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQoyNzU6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXNhdmU7DQoyNzY6ICAgICAgICAgICAgICAgICAgICAgDQoyNzc6ICAgICAgICAgICAgICAgICAgICAgaXNhdmUgPSBtaXBzMzJyMl9kaXNfaW50cigpOw0KMjc4OiAgICAgICAgICAgICAgICAgI2VuZGlmICANCjI3OTogICAgICAgICAgICAgICAgICAgICAodm9pZCliOw0KMjgwOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9oZWFkZXIobmJyKTsNCkJGRDA4MjkwICAwMDE4MzQ1RSAgIExIVSBWMCwgMjQoUzgpDQpCRkQwODI5NCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDgyOTYgIDQ4MzY3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaGVhZGVyDQpCRkQwODI5OCAgICAgIDQ4MzYgICBMVyBBVCwgODgoU1ApDQpCRkQwODI5QSAgICAgIDBDMDAgICBOT1ANCjI4MTogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaHdvcmQocDEpOw0KQkZEMDgyOUMgIDAwMjBGQzVFICAgTFcgVjAsIDMyKFM4KQ0KQkZEMDgyQTAgICAgICAyRDJGICAgQU5ESSBWMCwgVjAsIDB4RkZGRg0KQkZEMDgyQTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4MkE0ICA0QjI0NzdFOCAgIEpBTFMgdGZkcF94bWl0X2h3b3JkDQpCRkQwODJBNiAgICAgIDRCMjQgICBMVyBUOSwgMTYoU1ApDQpCRkQwODJBOCAgICAgIDBDMDAgICBOT1ANCjI4MjogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaHdvcmQocDIpOw0KQkZEMDgyQUEgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDgyQUUgICAgICAyRDJGICAgQU5ESSBWMCwgVjAsIDB4RkZGRg0KQkZEMDgyQjAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4MkIyICA0QjI0NzdFOCAgIEpBTFMgdGZkcF94bWl0X2h3b3JkDQpCRkQwODJCNCAgICAgIDRCMjQgICBMVyBUOSwgMTYoU1ApDQpCRkQwODJCNiAgICAgIDBDMDAgICBOT1ANCjI4MzogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaHdvcmQocDMpOw0KQkZEMDgyQjggIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDgyQkMgICAgICAyRDJGICAgQU5ESSBWMCwgVjAsIDB4RkZGRg0KQkZEMDgyQkUgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4MkMwICA0QjI0NzdFOCAgIEpBTFMgdGZkcF94bWl0X2h3b3JkDQpCRkQwODJDMiAgICAgIDRCMjQgICBMVyBUOSwgMTYoU1ApDQpCRkQwODJDNCAgICAgIDBDMDAgICBOT1ANCjI4NDogICAgICAgICAgICAgICAgIA0KMjg1OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMjg2OiAgICAgICAgICAgICAgICAgICAgIGlmICggaXNhdmUgJiAoMXVsPDwwKSApDQoyODc6ICAgICAgICAgICAgICAgICAgICAgew0KMjg4OiAgICAgICAgICAgICAgICAgICAgICAgICBtaXBzMzJyMl9lbl9pbnRyKCk7DQoyODk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjkwOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyOTE6ICAgICAgICAgICAgICAgICB9DQpCRkQwODJDNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDgyQzggICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQ0KQkZEMDgyQ0EgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQ0KQkZEMDgyQ0MgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNA0KQkZEMDgyQ0UgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDgyRDAgICAgICAwQzAwICAgTk9QDQoyOTI6ICAgICAgICAgICAgICAgICANCjI5MzogICAgICAgICAgICAgICAgIA0KMjk0OiAgICAgICAgICAgICAgICAgLyoqDQoyOTU6ICAgICAgICAgICAgICAgICAgKiBURkRQVHJhY2U0IC0gVFJBQ0UzOiB0cmFuc21pdCAxNi1iaXQgdHJhY2UgbnVtYmVyIGxzYiBmaXJzdCANCjI5NjogICAgICAgICAgICAgICAgICAqIGFuZCBmb3VyIDE2LWJpdCBkYXRhIHBhcmFtZXRlcnMgbHNiIGZpcnN0IG92ZXIgVEZEUC4NCjI5NzogICAgICAgICAgICAgICAgICAqIA0KMjk4OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjk5OiAgICAgICAgICAgICAgICAgICogDQozMDA6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbmJyIHRyYWNlIG51bWJlcg0KMzAxOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGIgdW51c2VkDQozMDI6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdWludDMyX3QgcDEgMTYtYml0IGRhdGExIGluIGJbMTU6MF0NCjMwMzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSB1aW50MzJfdCBwMiAxNi1iaXQgZGF0YTIgaW4gYlsxNTowXQ0KMzA0OiAgICAgICAgICAgICAgICAgICogQHBhcmFtIHVpbnQzMl90IHAzIDE2LWJpdCBkYXRhMyBpbiBiWzE1OjBdDQozMDU6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdWludDMyX3QgcDQgMTYtYml0IGRhdGE0IGluIGJbMTU6MF0NCjMwNjogICAgICAgICAgICAgICAgICAqIA0KMzA3OiAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IGFsd2F5cyBUUlVFIA0KMzA4OiAgICAgICAgICAgICAgICAgICogQG5vdGUgVXNlcyB0b29sIGtpdCBmdW5jdGlvbnMgdG8gc2F2ZS9kaXNhYmxlL3Jlc3RvcmUgDQozMDk6ICAgICAgICAgICAgICAgICAgKiAgICAgICBpbnRlcnJ1cHRzIGZvciBjcml0aWNhbCBzZWN0aW9uLiBUaGVzZSBtYXkgdXNlDQozMTA6ICAgICAgICAgICAgICAgICAgKiAgICAgICBwcml2aWxlZGdlZCBpbnN0cnVjdGlvbnMuIA0KMzExOiAgICAgICAgICAgICAgICAgICovDQozMTI6ICAgICAgICAgICAgICAgICB2b2lkIFRGRFBUcmFjZTQgKCB1aW50MTZfdCBuYnIsIHVpbnQ4X3QgYiwgdWludDMyX3QgcDEsIHVpbnQzMl90IHAyLCB1aW50MzJfdCBwMywgdWludDMyX3QgcDQpDQozMTM6ICAgICAgICAgICAgICAgICB7DQpCRkQwN0MyOCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNA0KQkZEMDdDMkEgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQ0KQkZEMDdDMkMgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQ0KQkZEMDdDMkUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA3QzMwICAgICAgMEM2NCAgIE1PVkUgVjEsIEEwDQpCRkQwN0MzMiAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQ0KQkZEMDdDMzQgIDAwMjBGOERFICAgU1cgQTIsIDMyKFM4KQ0KQkZEMDdDMzggIDAwMjRGOEZFICAgU1cgQTMsIDM2KFM4KQ0KQkZEMDdDM0MgIDAwMTgzODdFICAgU0ggVjEsIDI0KFM4KQ0KQkZEMDdDNDAgIDAwMUMxODVFICAgU0IgVjAsIDI4KFM4KQ0KMzE0OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMzE1OiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlzYXZlOw0KMzE2OiAgICAgICAgICAgICAgICAgICAgIA0KMzE3OiAgICAgICAgICAgICAgICAgICAgIGlzYXZlID0gbWlwczMycjJfZGlzX2ludHIoKTsNCjMxODogICAgICAgICAgICAgICAgICNlbmRpZg0KMzE5OiAgICAgICAgICAgICAgICAgICAgICh2b2lkKWI7DQozMjA6ICAgICAgICAgICAgICAgICAgICAgdGZkcF94bWl0X2hlYWRlcihuYnIpOw0KQkZEMDdDNDQgIDAwMTgzNDVFICAgTEhVIFYwLCAyNChTOCkNCkJGRDA3QzQ4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwN0M0QSAgNDgzNjc3RTggICBKQUxTIHRmZHBfeG1pdF9oZWFkZXINCkJGRDA3QzRDICAgICAgNDgzNiAgIExXIEFULCA4OChTUCkNCkJGRDA3QzRFICAgICAgMEMwMCAgIE5PUA0KMzIxOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMSk7DQpCRkQwN0M1MCAgMDAyMEZDNUUgICBMVyBWMCwgMzIoUzgpDQpCRkQwN0M1NCAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGDQpCRkQwN0M1NiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDdDNTggIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQNCkJGRDA3QzVBICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkNCkJGRDA3QzVDICAgICAgMEMwMCAgIE5PUA0KMzIyOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMik7DQpCRkQwN0M1RSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwN0M2MiAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGDQpCRkQwN0M2NCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDdDNjYgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQNCkJGRDA3QzY4ICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkNCkJGRDA3QzZBICAgICAgMEMwMCAgIE5PUA0KMzIzOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwMyk7DQpCRkQwN0M2QyAgMDAyOEZDNUUgICBMVyBWMCwgNDAoUzgpDQpCRkQwN0M3MCAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGDQpCRkQwN0M3MiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDdDNzQgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQNCkJGRDA3Qzc2ICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkNCkJGRDA3Qzc4ICAgICAgMEMwMCAgIE5PUA0KMzI0OiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9od29yZChwNCk7DQpCRkQwN0M3QSAgMDAyQ0ZDNUUgICBMVyBWMCwgNDQoUzgpDQpCRkQwN0M3RSAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGDQpCRkQwN0M4MCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDdDODIgIDRCMjQ3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaHdvcmQNCkJGRDA3Qzg0ICAgICAgNEIyNCAgIExXIFQ5LCAxNihTUCkNCkJGRDA3Qzg2ICAgICAgMEMwMCAgIE5PUA0KMzI1OiAgICAgICAgICAgICAgICAgICAgICAgDQozMjY6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQozMjc6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc2F2ZSAmICgxdWw8PDApICkNCjMyODogICAgICAgICAgICAgICAgICAgICB7DQozMjk6ICAgICAgICAgICAgICAgICAgICAgICAgIG1pcHMzMnIyX2VuX2ludHIoKTsNCjMzMDogICAgICAgICAgICAgICAgICAgICB9DQozMzE6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjMzMjogICAgICAgICAgICAgICAgIH0NCkJGRDA3Qzg4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwN0M4QSAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApDQpCRkQwN0M4QyAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApDQpCRkQwN0M4RSAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0DQpCRkQwN0M5MCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwN0M5MiAgICAgIDBDMDAgICBOT1ANCjMzMzogICAgICAgICAgICAgICAgIA0KMzM0OiAgICAgICAgICAgICAgICAgDQozMzU6ICAgICAgICAgICAgICAgICAvKiogDQozMzY6ICAgICAgICAgICAgICAgICAgKiAgVEZEUFRyYWNlMTEgLSBUcmFuc21pdCBvbmUgMzItYml0IGRhdGEgaXRlbSBvdmVyIFRGRFAgDQozMzc6ICAgICAgICAgICAgICAgICAgKiANCjMzODogICAgICAgICAgICAgICAgICAqICBAcGFyYW0gbmJyIHRyYWNlIG51bWJlcg0KMzM5OiAgICAgICAgICAgICAgICAgICogIEBwYXJhbSBiIHVudXNlZCANCjM0MDogICAgICAgICAgICAgICAgICAqICBAcGFyYW0gdWludDMyX3QgcDEgMzItYml0IGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQNCjM0MTogICAgICAgICAgICAgICAgICAqIA0KMzQyOiAgICAgICAgICAgICAgICAgICovDQozNDM6ICAgICAgICAgICAgICAgICB2b2lkIFRGRFBUcmFjZTExKCB1aW50MTZfdCBuYnIsIHVpbnQ4X3QgYiwgdWludDMyX3QgcDEpDQozNDQ6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTY4NCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNA0KQkZEMDk2ODYgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQ0KQkZEMDk2ODggICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQ0KQkZEMDk2OEEgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5NjhDICAgICAgMEM2NCAgIE1PVkUgVjEsIEEwDQpCRkQwOTY4RSAgICAgIDBDNDUgICBNT1ZFIFYwLCBBMQ0KQkZEMDk2OTAgIDAwMjBGOERFICAgU1cgQTIsIDMyKFM4KQ0KQkZEMDk2OTQgIDAwMTgzODdFICAgU0ggVjEsIDI0KFM4KQ0KQkZEMDk2OTggIDAwMUMxODVFICAgU0IgVjAsIDI4KFM4KQ0KMzQ1OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMzQ2OiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlzYXZlOw0KMzQ3OiAgICAgICAgICAgICAgICAgICAgIA0KMzQ4OiAgICAgICAgICAgICAgICAgICAgIGlzYXZlID0gbWlwczMycjJfZGlzX2ludHIoKTsNCjM0OTogICAgICAgICAgICAgICAgICNlbmRpZiAgDQozNTA6ICAgICAgICAgICAgICAgICAgICAgKHZvaWQpYjsNCjM1MTogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfaGVhZGVyKG5icik7DQpCRkQwOTY5QyAgMDAxODM0NUUgICBMSFUgVjAsIDI0KFM4KQ0KQkZEMDk2QTAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA5NkEyICA0ODM2NzdFOCAgIEpBTFMgdGZkcF94bWl0X2hlYWRlcg0KQkZEMDk2QTQgICAgICA0ODM2ICAgTFcgQVQsIDg4KFNQKQ0KQkZEMDk2QTYgICAgICAwQzAwICAgTk9QDQozNTI6ICAgICAgICAgICAgICAgICAgICAgdGZkcF94bWl0X3dvcmQocDEpOw0KQkZEMDk2QTggIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDk2QUMgIDQ2N0E3N0U4ICAgSkFMUyB0ZmRwX3htaXRfd29yZA0KQkZEMDk2QjAgICAgICAwQzAwICAgTk9QDQozNTM6ICAgICAgICAgICAgICAgICAgICAgDQozNTQ6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQozNTU6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc2F2ZSAmICgxdWw8PDApICkNCjM1NjogICAgICAgICAgICAgICAgICAgICB7DQozNTc6ICAgICAgICAgICAgICAgICAgICAgICAgIG1pcHMzMnIyX2VuX2ludHIoKTsNCjM1ODogICAgICAgICAgICAgICAgICAgICB9DQozNTk6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjM2MDogICAgICAgICAgICAgICAgIH0NCkJGRDA5NkIyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTZCNCAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApDQpCRkQwOTZCNiAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApDQpCRkQwOTZCOCAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0DQpCRkQwOTZCQSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTZCQyAgICAgIDBDMDAgICBOT1ANCjM2MTogICAgICAgICAgICAgICAgIA0KMzYyOiAgICAgICAgICAgICAgICAgDQozNjM6ICAgICAgICAgICAgICAgICAvKiogDQozNjQ6ICAgICAgICAgICAgICAgICAgKiAgVEZEUFRyYWNlMTIgLSBUcmFuc21pdCB0d28gMzItYml0IGRhdGEgaXRlbXMgb3ZlciBURkRQIA0KMzY1OiAgICAgICAgICAgICAgICAgICogDQozNjY6ICAgICAgICAgICAgICAgICAgKiAgQHBhcmFtIG5iciB0cmFjZSBudW1iZXINCjM2NzogICAgICAgICAgICAgICAgICAqICBAcGFyYW0gYiB1bnVzZWQgDQozNjg6ICAgICAgICAgICAgICAgICAgKiAgQHBhcmFtIHVpbnQzMl90IHAxIDMyLWJpdCBkYXRhMSB0byBiZSB0cmFuc21pdHRlZA0KMzY5OiAgICAgICAgICAgICAgICAgICogIEBwYXJhbSB1aW50MzJfdCBwMiAzMi1iaXQgZGF0YTIgdG8gYmUgdHJhbnNtaXR0ZWQNCjM3MDogICAgICAgICAgICAgICAgICAqIA0KMzcxOiAgICAgICAgICAgICAgICAgICovDQozNzI6ICAgICAgICAgICAgICAgICB2b2lkIFRGRFBUcmFjZTEyKCB1aW50MTZfdCBuYnIsIHVpbnQ4X3QgYiwgdWludDMyX3QgcDEsIHVpbnQzMl90IHAyICkNCjM3MzogICAgICAgICAgICAgICAgIHsNCkJGRDA5MEI0ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwOTBCNiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwOTBCOCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwOTBCQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDkwQkMgICAgICAwQzY0ICAgTU9WRSBWMSwgQTANCkJGRDA5MEJFICAgICAgMEM0NSAgIE1PVkUgVjAsIEExDQpCRkQwOTBDMCAgMDAyMEY4REUgICBTVyBBMiwgMzIoUzgpDQpCRkQwOTBDNCAgMDAyNEY4RkUgICBTVyBBMywgMzYoUzgpDQpCRkQwOTBDOCAgMDAxODM4N0UgICBTSCBWMSwgMjQoUzgpDQpCRkQwOTBDQyAgMDAxQzE4NUUgICBTQiBWMCwgMjgoUzgpDQozNzQ6ICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX1RSQUNFX01BU0tfSVJRDQozNzU6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaXNhdmU7DQozNzY6ICAgICAgICAgICAgICAgICAgICAgDQozNzc6ICAgICAgICAgICAgICAgICAgICAgaXNhdmUgPSBtaXBzMzJyMl9kaXNfaW50cigpOw0KMzc4OiAgICAgICAgICAgICAgICAgI2VuZGlmICANCjM3OTogICAgICAgICAgICAgICAgICAgICAodm9pZCliOw0KMzgwOiAgICAgICAgICAgICAgICAgICAgIHRmZHBfeG1pdF9oZWFkZXIobmJyKTsNCkJGRDA5MEQwICAwMDE4MzQ1RSAgIExIVSBWMCwgMjQoUzgpDQpCRkQwOTBENCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDkwRDYgIDQ4MzY3N0U4ICAgSkFMUyB0ZmRwX3htaXRfaGVhZGVyDQpCRkQwOTBEOCAgICAgIDQ4MzYgICBMVyBBVCwgODgoU1ApDQpCRkQwOTBEQSAgICAgIDBDMDAgICBOT1ANCjM4MTogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfd29yZChwMSk7DQpCRkQwOTBEQyAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpDQpCRkQwOTBFMCAgNDY3QTc3RTggICBKQUxTIHRmZHBfeG1pdF93b3JkDQpCRkQwOTBFNCAgICAgIDBDMDAgICBOT1ANCjM4MjogICAgICAgICAgICAgICAgICAgICB0ZmRwX3htaXRfd29yZChwMik7DQpCRkQwOTBFNiAgMDAyNEZDOUUgICBMVyBBMCwgMzYoUzgpDQpCRkQwOTBFQSAgNDY3QTc3RTggICBKQUxTIHRmZHBfeG1pdF93b3JkDQpCRkQwOTBFRSAgICAgIDBDMDAgICBOT1ANCjM4MzogICAgICAgICAgICAgICAgIA0KMzg0OiAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9UUkFDRV9NQVNLX0lSUQ0KMzg1OiAgICAgICAgICAgICAgICAgICAgIGlmICggaXNhdmUgJiAoMXVsPDwwKSApDQozODY6ICAgICAgICAgICAgICAgICAgICAgew0KMzg3OiAgICAgICAgICAgICAgICAgICAgICAgICBtaXBzMzJyMl9lbl9pbnRyKCk7DQozODg6ICAgICAgICAgICAgICAgICAgICAgfQ0KMzg5OiAgICAgICAgICAgICAgICAgI2VuZGlmDQozOTA6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTBGMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDkwRjIgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQ0KQkZEMDkwRjQgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQ0KQkZEMDkwRjYgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNA0KQkZEMDkwRjggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDkwRkEgICAgICAwQzAwICAgTk9QDQozOTE6ICAgICAgICAgICAgICAgICANCjM5MjogICAgICAgICAgICAgICAgICNlbmRpZiAvLyAjaWZkZWYgRU5BQkxFX1RGRFBfVFJBQ0UNCjM5MzogICAgICAgICAgICAgICAgIA0KMzk0OiAgICAgICAgICAgICAgICAgDQozOTU6ICAgICAgICAgICAgICAgICAvKiBlbmQgbWVjMTR4eF90ZmRwLmMgKi8NCjM5NjogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQozOTc6ICAgICAgICAgICAgICAgICAgKi8NCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvbWVjMTR4eF9zeXN0ZW0uYyAgLS0tLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIChjKSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBtZWMxNHh4X3N5c3RlbS5jDQoyMjogICAgICAgICAgICAgICAgICAgKk1FQzE0eHggc3lzdGVtIGZ1bmN0aW9ucw0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggU3lzdGVtDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICANCjI5OiAgICAgICAgICAgICAgICAgIA0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3N5c3RlbS5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9qdHZpYy5oIg0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAvKioNCjQwOiAgICAgICAgICAgICAgICAgICAqIEluaXRpYWxpemUgdGhlIHN5c3RlbQ0KNDE6ICAgICAgICAgICAgICAgICAgICoNCjQyOiAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSAgbm9uZQ0KNDM6ICAgICAgICAgICAgICAgICAgICogQHJldHVybiBub25lDQo0NDogICAgICAgICAgICAgICAgICAgKg0KNDU6ICAgICAgICAgICAgICAgICAgICogQGJyaWVmICBTZXR1cCB0aGUgbWljcm9jb250cm9sbGVyIHN5c3RlbS4NCjQ2OiAgICAgICAgICAgICAgICAgICAqICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgU3lzdGVtLg0KNDc6ICAgICAgICAgICAgICAgICAgICovDQo0ODogICAgICAgICAgICAgICAgICB2b2lkIFN5c3RlbUluaXQgKHZvaWQpDQo0OTogICAgICAgICAgICAgICAgICB7DQpCRkQwOUUyMCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUUyMiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5RTI0ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo1MDogICAgICAgICAgICAgICAgICAgICAgDQo1MTogICAgICAgICAgICAgICAgICAgICAgUENSLT5QUk9DX0NMT0NLX0NOVFJMID0gKFBDUl9DTE9DS19ESVZJREVSKTsNCkJGRDA5RTI2ICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4DQpCRkQwOUUyQSAgMDEwMDUwNDIgICBPUkkgVjAsIFYwLCAyNTYNCkJGRDA5RTJFICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwOUUzMCAgICAgIEU5QTggICBTVyBWMSwgMzIoVjApDQo1MjogICAgICAgICAgICAgICAgICAgICAgDQo1MzogICAgICAgICAgICAgICAgICB9DQpCRkQwOUUzMiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlFMzQgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOUUzNiAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA5RTM4ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5RTNBICAgICAgMEMwMCAgIE5PUA0KNTQ6ICAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNTU6ICAgICAgICAgICAgICAgICAgDQo1NjogICAgICAgICAgICAgICAgICB1aW50MzJfdCBzeXNfY29kZV9zcmFtX2Jhc2Uodm9pZCkNCjU3OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA5RUFDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5RUFFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDlFQjAgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjU4OiAgICAgICAgICAgICAgICAgICNpZiBNRUMxNFhYX0RFVklEICA9PSBNRUMxNDE4X0RFVklEDQo1OTogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1aW50MzJfdCkoTUVDMTQxOF9JQ09ERV9QU1JBTV9CQVNFKTsNCjYwOiAgICAgICAgICAgICAgICAgICNlbHNlDQo2MTogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1aW50MzJfdCkoTUVDMTQwNF9JQ09ERV9QU1JBTV9CQVNFKTsNCkJGRDA5RUIyICAxRkQwNDFBMiAgIExVSSBWMCwgMHgxRkQwDQpCRkQwOUVCNCAgMEZCRTFGRDAgICBMQiBTOCwgNDAzMChTMCkNCjYyOiAgICAgICAgICAgICAgICAgICNlbmRpZg0KNjM6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDlFQjYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5RUI4ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlFQkEgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOUVCQyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUVCRSAgICAgIDBDMDAgICBOT1ANCjY0OiAgICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjY1OiAgICAgICAgICAgICAgICAgIA0KNjY6ICAgICAgICAgICAgICAgICAgdWludDhfdCBzeXNfdmFsaWRfc3JhbV9hZGRyKHZvaWQgKiBjb25zdCBwKQ0KNjc6ICAgICAgICAgICAgICAgICAgew0KQkZEMDhDQTggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4Q0FBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4Q0FDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4Q0FFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOENCMCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQo2ODogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmFzZTsNCjY5OiAgICAgICAgICAgICAgICAgICAgICANCjcwOiAgICAgICAgICAgICAgICAgICAgICBiYXNlID0gc3lzX2NvZGVfc3JhbV9iYXNlKCk7DQpCRkQwOENCNCAgNEY1Njc3RTggICBKQUxTIHN5c19jb2RlX3NyYW1fYmFzZQ0KQkZEMDhDQjYgICAgICA0RjU2ICAgQURESVUgSzAsIEswLCAtNQ0KQkZEMDhDQjggICAgICAwQzAwICAgTk9QDQpCRkQwOENCQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQo3MTogICAgICAgICAgICAgICAgICAgICAgICAgIA0KNzI6ICAgICAgICAgICAgICAgICAgICAgIGlmICgodWludDMyX3QpcCA+PSBiYXNlKSB7DQpCRkQwOENCRSAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpDQpCRkQwOENDMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOENDNiAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDA4Q0M4ICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDhDQ0EgIDAwMEI0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDhDRTQNCjczOiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1aW50MzJfdClwIDwgKE1FQzE0WFhfRENPREVfVlNSQU1fTElNSVQpKSB7DQpCRkQwOENDRSAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpDQpCRkQwOENEMiAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDhDRDQgIDAwNDNCRkQyICAgTERDMSBGMzAsIDY3KFMyKQ0KQkZEMDhDRDYgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwDQpCRkQwOENEOCAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTANCkJGRDA4Q0RBICAwMDAzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4Q0U0DQo3NDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMXU7DQpCRkQwOENERSAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDhDRTAgICAgICBDQzAyICAgQiAweEJGRDA4Q0U2DQpCRkQwOENFMiAgICAgIDBDMDAgICBOT1ANCjc1OiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KNzY6ICAgICAgICAgICAgICAgICAgICAgIH0NCjc3OiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHU7DQpCRkQwOENFNCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQo3ODogICAgICAgICAgICAgICAgICB9DQpCRkQwOENFNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDhDRTggICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDhDRUEgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDhDRUMgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDhDRUUgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDhDRjAgICAgICAwQzAwICAgTk9QDQo3OTogICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo4MDogICAgICAgICAgICAgICAgICANCjgxOiAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc3lzX3ZhbGlkX3NyYW1fcmFuZ2Uodm9pZCAqIGNvbnN0IHAsIGNvbnN0IHVpbnQzMl90IGJ5dGVfbGVuKQ0KODI6ICAgICAgICAgICAgICAgICAgew0KQkZEMDg4NTggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4ODVBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4ODVDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4ODVFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwODg2MCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwODg2NCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQo4MzogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYmFzZTsNCjg0OiAgICAgICAgICAgICAgICAgIA0KODU6ICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBzeXNfY29kZV9zcmFtX2Jhc2UoKTsNCkJGRDA4ODY4ICA0RjU2NzdFOCAgIEpBTFMgc3lzX2NvZGVfc3JhbV9iYXNlDQpCRkQwODg2QSAgICAgIDRGNTYgICBBRERJVSBLMCwgSzAsIC01DQpCRkQwODg2QyAgICAgIDBDMDAgICBOT1ANCkJGRDA4ODZFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjg2OiAgICAgICAgICAgICAgICAgIA0KODc6ICAgICAgICAgICAgICAgICAgICAgIGlmICgodWludDMyX3QpcCA+PSBiYXNlKSB7DQpCRkQwODg3MiAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpDQpCRkQwODg3NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODg3QSAgMTM5MDAwNDMgICBTTFRVIFYwLCBWMSwgVjANCkJGRDA4ODdDICA0MEEyMTM5MCAgIEFEREkgR1AsIFMwLCAxNjU0Ng0KQkZEMDg4N0UgIDAwMEU0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDg4OUUNCjg4OiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgodWludDMyX3QpcCArIGJ5dGVfbGVuKSA8IChNRUMxNFhYX0RDT0RFX1ZTUkFNX0xJTUlUKSkgew0KQkZEMDg4ODIgIDAwMjBGQzdFICAgTFcgVjEsIDMyKFM4KQ0KQkZEMDg4ODYgIDAwMjRGQzVFICAgTFcgVjAsIDM2KFM4KQ0KQkZEMDg4OEEgICAgICAwNUE2ICAgQUREVSBWMSwgVjEsIFYwDQpCRkQwODg4QyAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDg4OEUgIDAwNDNCRkQyICAgTERDMSBGMzAsIDY3KFMyKQ0KQkZEMDg4OTAgIDEzOTAwMDQzICAgU0xUVSBWMCwgVjEsIFYwDQpCRkQwODg5MiAgNDBFMjEzOTAgICBBRERJIEdQLCBTMCwgMTY2MTANCkJGRDA4ODk0ICAwMDAzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4ODlFDQo4OTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMXU7DQpCRkQwODg5OCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDg4OUEgICAgICBDQzAyICAgQiAweEJGRDA4OEEwDQpCRkQwODg5QyAgICAgIDBDMDAgICBOT1ANCjkwOiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KOTE6ICAgICAgICAgICAgICAgICAgICAgIH0NCjkyOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHU7DQpCRkQwODg5RSAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQo5MzogICAgICAgICAgICAgICAgICB9DQpCRkQwODhBMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDg4QTIgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDg4QTQgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDg4QTYgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDg4QTggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDg4QUEgICAgICAwQzAwICAgTk9QDQo5NDogICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo5NTogICAgICAgICAgICAgICAgICANCjk2OiAgICAgICAgICAgICAgICAgIHZvaWQgc3lzX2NwdV9lbl90aW1lcih1aW50MzJfdCBjb3VudHMsIHVpbnQ4X3QgaWVuKQ0KOTc6ICAgICAgICAgICAgICAgICAgew0KQkZEMDc1NzAgICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQNCkJGRDA3NTcyICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkNCkJGRDA3NTc0ICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkNCkJGRDA3NTc2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNzU3OCAgMDAxOEY4OUUgICBTVyBBMCwgMjQoUzgpDQpCRkQwNzU3QSAgMEM0NTAwMTggICBDTVAuTFQuUEggWkVSTywgVDgNCkJGRDA3NTdDICAgICAgMEM0NSAgIE1PVkUgVjAsIEExDQpCRkQwNzU3RSAgMDAxQzE4NUUgICBTQiBWMCwgMjgoUzgpDQo5ODogICAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBDb3VudGVyIGJ5IHNldHRpbmcgREMgYml0IHRvIDEgaW4gQ1AwLkNhdXNlICovDQo5OTogICAgICAgICAgICAgICAgICAgICAgX0NQMF9CSVNfQ0FVU0UoX0NQMF9DQVVTRV9EQ19NQVNLKTsNCkJGRDA3NTgyICAwODAwNDFBMiAgIExVSSBWMCwgMHg4MDANCkJGRDA3NTg0ICAgICAgMDgwMCAgIExCVSBTMCwgMChTMCkNCkJGRDA3NTg2ICAwMEZDMDA2RCAgIE1GQzAgVjEsIENhdXNlDQpCRkQwNzU4OCAgMEMwMDAwRkMgICBTTEwgQTMsIEdQLCAxDQpCRkQwNzU4QSAgICAgIDBDMDAgICBOT1ANCkJGRDA3NThDICAgICAgNDREMyAgIE9SMTYgVjAsIFYxDQpCRkQwNzU4RSAgMDJGQzAwNEQgICBNVEMwIFYwLCBDYXVzZQ0KQkZEMDc1OTAgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDc1OTIgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA3NTk0ICBGQzVFMTgwMCAgIFNCIFpFUk8sIC05MzAoWkVSTykNCjEwMDogICAgICAgICAgICAgICAgIA0KMTAxOiAgICAgICAgICAgICAgICAgICAgIF9DUDBfU0VUX0NPVU5UKGNvdW50cyk7DQpCRkQwNzU5NiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwNzU5QSAgMDJGQzAwNDkgICBNVEMwIFYwLCBDb3VudA0KQkZEMDc1OUMgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDc1OUUgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA3NUEwICAxNDVFMTgwMCAgIFNCIFpFUk8sIDUyMTQoWkVSTykNCjEwMjogICAgICAgICAgICAgICAgICAgICBpZiAoaWVuKSB7DQpCRkQwNzVBMiAgMDAxQzE0NUUgICBMQlUgVjAsIDI4KFM4KQ0KQkZEMDc1QTYgIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDc1QkENCkJGRDA3NUE4ICBFRTEwMDAwOCAgIE1VTCBTUCwgVDAsIFpFUk8NCjEwMzogICAgICAgICAgICAgICAgICAgICAgICAganR2aWNfZW5fc291cmNlKE1FQzE0eHhfR0lSUTI0X0lELCAwLCAwKTsNCkJGRDA3NUFBICAgICAgRUUxMCAgIExJIEEwLCAxNg0KQkZEMDc1QUMgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTw0KQkZEMDc1QUUgICAgICAwQ0MwICAgTU9WRSBBMiwgWkVSTw0KQkZEMDc1QjAgIDNBN0M3N0U4ICAgSkFMUyBqdHZpY19lbl9zb3VyY2UNCkJGRDA3NUIyICAwQzAwM0E3QyAgIFNIIFMzLCAzMDcyKEdQKQ0KQkZEMDc1QjQgICAgICAwQzAwICAgTk9QDQpCRkQwNzVCNiAgICAgIENDMDcgICBCIDB4QkZEMDc1QzYNCkJGRDA3NUI4ICAgICAgMEMwMCAgIE5PUA0KMTA0OiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoxMDU6ICAgICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI0X0lELCAwLCAxKTsNCkJGRDA3NUJBICAgICAgRUUxMCAgIExJIEEwLCAxNg0KQkZEMDc1QkMgICAgICAwQ0EwICAgTU9WRSBBMSwgWkVSTw0KQkZEMDc1QkUgICAgICBFRjAxICAgTEkgQTIsIDENCkJGRDA3NUMwICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UNCkJGRDA3NUMyICAwQzAwM0E0MCAgIFNIIFMyLCAzMDcyKFpFUk8pDQpCRkQwNzVDNCAgICAgIDBDMDAgICBOT1ANCjEwNjogICAgICAgICAgICAgICAgICAgICB9DQoxMDc6ICAgICAgICAgICAgICAgICANCjEwODogICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgQ291bnRlciAqLw0KMTA5OiAgICAgICAgICAgICAgICAgICAgIF9DUDBfQklDX0NBVVNFKF9DUDBfQ0FVU0VfRENfTUFTSyk7DQpCRkQwNzVDNiAgMDgwMDQxQTIgICBMVUkgVjAsIDB4ODAwDQpCRkQwNzVDOCAgICAgIDA4MDAgICBMQlUgUzAsIDAoUzApDQpCRkQwNzVDQSAgMDBGQzAwNkQgICBNRkMwIFYxLCBDYXVzZQ0KQkZEMDc1Q0MgIDBDMDAwMEZDICAgU0xMIEEzLCBHUCwgMQ0KQkZEMDc1Q0UgICAgICAwQzAwICAgTk9QDQpCRkQwNzVEMCAgICAgIDQ0MTIgICBOT1QxNiBWMCwgVjANCkJGRDA3NUQyICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDc1RDQgIDAyRkMwMDREICAgTVRDMCBWMCwgQ2F1c2UNCkJGRDA3NUQ2ICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA3NUQ4ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNzVEQSAgMEZCRTE4MDAgICBTQiBaRVJPLCA0MDMwKFpFUk8pDQoxMTA6ICAgICAgICAgICAgICAgICANCjExMTogICAgICAgICAgICAgICAgIH0NCkJGRDA3NURDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNzVERSAgICAgIDRCRTUgICBMVyBSQSwgMjAoU1ApDQpCRkQwNzVFMCAgICAgIDRCQzQgICBMVyBTOCwgMTYoU1ApDQpCRkQwNzVFMiAgICAgIDRDMEQgICBBRERJVSBTUCwgU1AsIDI0DQpCRkQwNzVFNCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNzVFNiAgICAgIDBDMDAgICBOT1ANCjExMjogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjExMzogICAgICAgICAgICAgICAgIA0KMTE0OiAgICAgICAgICAgICAgICAgdWludDMyX3QgY3B1X21pY3Jvc2Vjb25kX2NvdW50KHZvaWQpDQoxMTU6ICAgICAgICAgICAgICAgICB7DQpCRkQwOUVDMCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUVDMiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5RUM0ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoxMTY6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9DUDBfR0VUX0NPVU5UKCk7DQpCRkQwOUVDNiAgMDBGQzAwNDkgICBNRkMwIFYwLCBDb3VudA0KMTE3OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlFQ0EgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5RUNDICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlFQ0UgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOUVEMCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUVEMiAgICAgIDBDMDAgICBOT1ANCjExODogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjExOTogICAgICAgICAgICAgICAgIA0KMTIwOiAgICAgICAgICAgICAgICAgLyoNCjEyMTogICAgICAgICAgICAgICAgICAqIEFzc3VtZXMgTTE0SyBDUFUgaXMgcnVubmluZyBhdCBjbG9jayBkaXZpZGUgYnkgMSAoNDhNSHopDQoxMjI6ICAgICAgICAgICAgICAgICAgKiAxdXMgPSA0OCBjb3VudHMuIA0KMTIzOiAgICAgICAgICAgICAgICAgICogTk9URTogV2UgbmVlZCB0byBmaW5kIG91dCBmcm9tIERFIHdoYXQgdGhlIHBpcGVsaW5lIHJhdGUgaXMuIA0KMTI0OiAgICAgICAgICAgICAgICAgICogTTE0SyBjb3VudGVyIHRpY2tzIGF0IHBpcGVsaW5lIHJhdGUuIA0KMTI1OiAgICAgICAgICAgICAgICAgICovDQoxMjY6ICAgICAgICAgICAgICAgICB1aW50MzJfdCBjcHVfbWljcm9zZWNvbmRfaW50ZXJ2YWwodWludDMyX3Qgc3RhcnRfY291bnQpDQoxMjc6ICAgICAgICAgICAgICAgICB7DQpCRkQwN0RDQyAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNg0KQkZEMDdEQ0UgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDdERDAgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA3REQyICAwMDEwRjg5RSAgIFNXIEEwLCAxNihTOCkNCjEyODogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjdXJyX2NvdW50Ow0KMTI5OiAgICAgICAgICAgICAgICAgICAgIA0KMTMwOiAgICAgICAgICAgICAgICAgICAgIGN1cnJfY291bnQgPSBfQ1AwX0dFVF9DT1VOVCgpOw0KQkZEMDdERDYgIDAwRkMwMDQ5ICAgTUZDMCBWMCwgQ291bnQNCkJGRDA3RERBICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQ0KMTMxOiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyX2NvdW50ID49IHN0YXJ0X2NvdW50KSB7DQpCRkQwN0RERSAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkNCkJGRDA3REUyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA3REU2ICAxMzkwMDA0MyAgIFNMVFUgVjAsIFYxLCBWMA0KQkZEMDdERTggIDQwQTIxMzkwICAgQURESSBHUCwgUzAsIDE2NTQ2DQpCRkQwN0RFQSAgMDAwRjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwN0UwQw0KMTMyOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChjdXJyX2NvdW50IC0gc3RhcnRfY291bnQpID4+IDQpLyAzdWw7DQpCRkQwN0RFRSAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkNCkJGRDA3REYyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA3REY2ICAgICAgMDUyNyAgIFNVQlUgVjAsIFYxLCBWMA0KQkZEMDdERjggICAgICAyNUE5ICAgU1JMIFYxLCBWMCwgNA0KQkZEMDdERkEgICAgICBFRDAzICAgTEkgVjAsIDMNCkJGRDA3REZDICBCQjNDMDA0MyAgIERJVlUgVjAsIFYxDQpCRkQwN0RGRSAgMDAwMkJCM0MgICBTREMxIEYyNSwgMihHUCkNCkJGRDA3RTAwICA3MDNDMDAwMiAgIFRFUSBWMCwgWkVSTw0KQkZEMDdFMDIgIDQ2MDM3MDNDICAgWE9SSSBBVCwgR1AsIDE3OTIzDQpCRkQwN0UwNCAgICAgIDQ2MDMgICBNRkhJIFYxDQpCRkQwN0UwNiAgICAgIDQ2NDIgICBNRkxPIFYwDQpCRkQwN0UwOCAgICAgIENDMEYgICBCIDB4QkZEMDdFMjgNCkJGRDA3RTBBICAgICAgMEMwMCAgIE5PUA0KMTMzOiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQoxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKCgweEZGRkZGRkZGdWwgLSBzdGFydF9jb3VudCkgKyBjdXJyX2NvdW50KSA+PiA0KSAvIDN1bDsNCkJGRDA3RTBDICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA3RTEwICAgICAgNDQxQSAgIE5PVDE2IFYxLCBWMA0KQkZEMDdFMTIgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwN0UxNiAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA3RTE4ICAgICAgMjVBOSAgIFNSTCBWMSwgVjAsIDQNCkJGRDA3RTFBICAgICAgRUQwMyAgIExJIFYwLCAzDQpCRkQwN0UxQyAgQkIzQzAwNDMgICBESVZVIFYwLCBWMQ0KQkZEMDdFMUUgIDAwMDJCQjNDICAgU0RDMSBGMjUsIDIoR1ApDQpCRkQwN0UyMCAgNzAzQzAwMDIgICBURVEgVjAsIFpFUk8NCkJGRDA3RTIyICA0NjAzNzAzQyAgIFhPUkkgQVQsIEdQLCAxNzkyMw0KQkZEMDdFMjQgICAgICA0NjAzICAgTUZISSBWMQ0KQkZEMDdFMjYgICAgICA0NjQyICAgTUZMTyBWMA0KMTM1OiAgICAgICAgICAgICAgICAgICAgIH0NCjEzNjogICAgICAgICAgICAgICAgIH0NCkJGRDA3RTI4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwN0UyQSAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwN0UyQyAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2DQpCRkQwN0UyRSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwN0UzMCAgICAgIDBDMDAgICBOT1ANCjEzNzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjEzODogICAgICAgICAgICAgICAgIA0KMTM5OiAgICAgICAgICAgICAgICAgLyogZW5kIG1lYzE0eHhfc3lzdGVtLmMgKi8NCjE0MDogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoxNDE6ICAgICAgICAgICAgICAgICAgKi8NCjE0MjogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9tZWMxNHh4X2p0dmljLmMgIC0tLS0tLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogqSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBtZWMxNHh4X2p0dmljLmMNCjIyOiAgICAgICAgICAgICAgICAgICAqTUVDMTR4eCBKVFZJQw0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggUGVyaXBoZXJhbHMgSlRWSUMNCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgIA0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2p0dmljLmgiDQozMzogICAgICAgICAgICAgICAgICANCjM0OiAgICAgICAgICAgICAgICAgIA0KMzU6ICAgICAgICAgICAgICAgICAgdm9pZCBqdHZpY19pbml0KGNvbnN0IEpUVklDX0NGRyAqaWhfdGFibGUsIHVpbnQzMl90IGRpc2FnZ19iaXRtYXAsIHVpbnQzMl90IGNmbGFncykNCjM2OiAgICAgICAgICAgICAgICAgIHsNCkJGRDAzNjQ0ICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwMzY0NiAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwMzY0OCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDM2NEEgIDAwMTBGODlFICAgU1cgQTAsIDE2KFM4KQ0KQkZEMDM2NEUgIDAwMTRGOEJFICAgU1cgQTEsIDIwKFM4KQ0KQkZEMDM2NTIgIDAwMThGOERFICAgU1cgQTIsIDI0KFM4KQ0KMzc6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGQ7DQozODogICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBpLCBqLCBwaWR4Ow0KMzk6ICAgICAgICAgICAgICAgICAgDQo0MDogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfQ1RSTC0+dyA9ICgxdWwgPDwgMCk7ICAvLyBTb2Z0LVJlc2V0DQpCRkQwMzY1NiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDM2NTggIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDM2NUEgIEM1MDA1MDQyICAgT1JJIFYwLCBWMCwgLTE1MTA0DQpCRkQwMzY1RSAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDM2NjAgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo0MTogICAgICAgICAgICAgICAgICAgICAgZCA9IDB1bDsNCkJGRDAzNjYyICAwMDAwRjgxRSAgIFNXIFpFUk8sIDAoUzgpDQo0MjogICAgICAgICAgICAgICAgICAgICAgaWYgKCBjZmxhZ3MgJiAoMXVsIDw8IDApICkgDQpCRkQwMzY2NiAgMDAxOEZDNUUgICBMVyBWMCwgMjQoUzgpDQpCRkQwMzY2QSAgICAgIDJEMjEgICBBTkRJIFYwLCBWMCwgMHgxDQpCRkQwMzY2QyAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDM2NkUgIDAwMDQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDM2N0ENCkJGRDAzNjcwICAzMDQwMDAwNCAgIFNSTCBaRVJPLCBBMCwgNg0KNDM6ICAgICAgICAgICAgICAgICAgICAgIHsNCjQ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9ICgxdWwgPDwgOCk7DQpCRkQwMzY3MiAgMDEwMDMwNDAgICBBRERJVSBWMCwgWkVSTywgMjU2DQpCRkQwMzY3NiAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCjQ1OiAgICAgICAgICAgICAgICAgICAgICB9DQo0NjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfQ1RSTC0+dyA9IGQ7ICAvLyBIVyBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IGNsZWFyIFNvZnQtUmVzZXQNCkJGRDAzNjdBICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwMzY3QyAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwMzY3RSAgQzUwMDUwNDIgICBPUkkgVjAsIFYwLCAtMTUxMDQNCkJGRDAzNjgyICAwMDAwRkM3RSAgIExXIFYxLCAwKFM4KQ0KQkZEMDM2ODYgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo0NzogICAgICAgICAgICAgICAgICANCjQ4OiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwdTsgaSA8IChNRUMxNHh4X05VTV9KVFZJQ19JTlRTKTsgaSsrKSB7DQpCRkQwMzY4OCAgMDAwNDE4MUUgICBTQiBaRVJPLCA0KFM4KQ0KQkZEMDM2OEMgICAgICBDQzVDICAgQiAweEJGRDAzNzQ2DQpCRkQwMzY4RSAgICAgIDBDMDAgICBOT1ANCkJGRDAzNzNDICAwMDA0MTQ1RSAgIExCVSBWMCwgNChTOCkNCkJGRDAzNzQwICAgICAgNkQyMCAgIEFERElVIFYwLCBWMCwgMQ0KQkZEMDM3NDIgIDAwMDQxODVFICAgU0IgVjAsIDQoUzgpDQpCRkQwMzc0NiAgMDAwNDE0NUUgICBMQlUgVjAsIDQoUzgpDQpCRkQwMzc0QSAgMDAxM0IwNDIgICBTTFRJVSBWMCwgVjAsIDE5DQpCRkQwMzc0RSAgRkY5RjQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzY5MA0KQkZEMDM3NTAgIDQxQTJGRjlGICAgTFcgR1AsIDE2ODAyKFJBKQ0KNDk6ICAgICAgICAgICAgICAgICAgICAgICAgICBwaWR4ID0gaSA8PCAyOw0KQkZEMDM2OTAgIDAwMDQxNDVFICAgTEJVIFYwLCA0KFM4KQ0KQkZEMDM2OTQgICAgICAyNTI0ICAgU0xMIFYwLCBWMCwgMg0KQkZEMDM2OTYgIDAwMDYxODVFICAgU0IgVjAsIDYoUzgpDQo1MDogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDB1OyBqIDwgNHU7IGorKykgew0KQkZEMDM2OUEgIDAwMDUxODFFICAgU0IgWkVSTywgNShTOCkNCkJGRDAzNjlFICAgICAgQ0MxRiAgIEIgMHhCRkQwMzZERQ0KQkZEMDM2QTAgICAgICAwQzAwICAgTk9QDQpCRkQwMzZENCAgMDAwNTE0NUUgICBMQlUgVjAsIDUoUzgpDQpCRkQwMzZEOCAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDENCkJGRDAzNkRBICAwMDA1MTg1RSAgIFNCIFYwLCA1KFM4KQ0KQkZEMDM2REUgIDAwMDUxNDVFICAgTEJVIFYwLCA1KFM4KQ0KQkZEMDM2RTIgIDAwMDRCMDQyICAgU0xUSVUgVjAsIFYwLCA0DQpCRkQwMzZFNiAgRkZEQzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwMzZBMg0KQkZEMDM2RTggIDE0NUVGRkRDICAgTFcgUzgsIDUyMTQoR1ApDQo1MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19QUkktPlJFRzMyW3BpZHgral0gPSAodWludDMyX3QpKGloX3RhYmxlW2ldLnByaVtqXSk7DQpCRkQwMzZBMiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDM2QTQgIDUwODJCRkZGICAgTERDMSBGMzEsIDIwNjEwKFJBKQ0KQkZEMDM2QTYgIEMzMDA1MDgyICAgT1JJIEEwLCBWMCwgLTE1NjE2DQpCRkQwMzZBQSAgMDAwNjE0N0UgICBMQlUgVjEsIDYoUzgpDQpCRkQwMzZBRSAgMDAwNTE0NUUgICBMQlUgVjAsIDUoUzgpDQpCRkQwMzZCMiAgICAgIDA2QTYgICBBRERVIEExLCBWMSwgVjANCkJGRDAzNkI0ICAwMDA0MTQ1RSAgIExCVSBWMCwgNChTOCkNCkJGRDAzNkI4ICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAzNkJBICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAzNkJDICAgICAgMDUzNCAgIEFERFUgVjAsIFYwLCBWMQ0KQkZEMDM2QkUgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDM2QzIgICAgICAwNUE2ICAgQUREVSBWMSwgVjEsIFYwDQpCRkQwMzZDNCAgMDAwNTE0NUUgICBMQlUgVjAsIDUoUzgpDQpCRkQwMzZDOCAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyDQpCRkQwMzZDQSAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDAzNkNDICAgICAgNjlBMSAgIExXIFYxLCA0KFYwKQ0KQkZEMDM2Q0UgICAgICAyNTU0ICAgU0xMIFYwLCBBMSwgMg0KQkZEMDM2RDAgICAgICAwNTI4ICAgQUREVSBWMCwgQTAsIFYwDQpCRkQwMzZEMiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjUyOiAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KNTM6ICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gaWhfdGFibGVbaV0uaXNyX2FkZHIgJiB+KDF1bCA8PCAwKTsNCkJGRDAzNkVBICAwMDA0MTQ1RSAgIExCVSBWMCwgNChTOCkNCkJGRDAzNkVFICAgICAgMjUyNCAgIFNMTCBWMCwgVjAsIDINCkJGRDAzNkYwICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDAzNkYyICAgICAgMDUzNCAgIEFERFUgVjAsIFYwLCBWMQ0KQkZEMDM2RjQgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDM2RjggICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwMzZGQSAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDAzNkZDICBGRkZFMzA0MCAgIEFERElVIFYwLCBaRVJPLCAtMg0KQkZEMDM2RkUgIDQ0OTNGRkZFICAgTFcgUkEsIDE3NTU1KFM4KQ0KQkZEMDM3MDAgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwMzcwMiAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCjU0OiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc2FnZ19iaXRtYXAgJiAoMXVsIDw8IGkpKSB7DQpCRkQwMzcwNiAgMDAwNDE0NUUgICBMQlUgVjAsIDQoUzgpDQpCRkQwMzcwQSAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpDQpCRkQwMzcwRSAgMTA1MDAwNjIgICBTUkxWIFYwLCBWMCwgVjENCkJGRDAzNzEwICAyRDIxMTA1MCAgIEFEREkgVjAsIFMwLCAxMTU1Mw0KQkZEMDM3MTIgICAgICAyRDIxICAgQU5ESSBWMCwgVjAsIDB4MQ0KQkZEMDM3MTQgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYNCkJGRDAzNzE2ICAwMDA2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDAzNzI2DQo1NTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkIHw9ICgxdWwgPDwgMCk7ICAgIC8vIGRpcy1hZ2dyZWdhdGUgdGhpcyBHSVJRDQpCRkQwMzcxQSAgMDAwMEZDNUUgICBMVyBWMCwgMChTOCkNCkJGRDAzNzFFICAwMDAxNTA0MiAgIE9SSSBWMCwgVjAsIDENCkJGRDAzNzIyICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQ0KNTY6ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQo1NzogICAgICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0FDVFJMLT5SRUczMltpXSA9IGQ7DQpCRkQwMzcyNiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDM3MjggIDUwNjJCRkZGICAgTERDMSBGMzEsIDIwNTc4KFJBKQ0KQkZEMDM3MkEgIEMyMDA1MDYyICAgT1JJIFYxLCBWMCwgLTE1ODcyDQpCRkQwMzcyRSAgMDAwNDE0NUUgICBMQlUgVjAsIDQoUzgpDQpCRkQwMzczMiAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyDQpCRkQwMzczNCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDAzNzM2ICAwMDAwRkM3RSAgIExXIFYxLCAwKFM4KQ0KQkZEMDM3M0EgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo1ODogICAgICAgICAgICAgICAgICAgICAgfQ0KNTk6ICAgICAgICAgICAgICAgICAgICAgIA0KNjA6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX1NFVC0+dyA9IDB4RkZGRkZGRkZ1bDsgICAvLyBFbmFibGUgR0lSUTA4IC0gR0lSUTE4IChhbGwpDQpCRkQwMzc1MiAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDM3NTQgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDM3NTYgIEM1MDg1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDk2DQpCRkQwMzc1QSAgICAgIEVERkYgICBMSSBWMSwgLTENCkJGRDAzNzVDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNjE6ICAgICAgICAgICAgICAgICAgICAgIA0KNjI6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDM3NUUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDAzNzYwICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDAzNzYyICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDAzNzY0ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDAzNzY2ICAgICAgMEMwMCAgIE5PUA0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICAvKiBDbGVhciBKVFZJQyBHSVJRbiBzb3VyY2UgYml0DQo2NTogICAgICAgICAgICAgICAgICAgKg0KNjY6ICAgICAgICAgICAgICAgICAgICovDQo2NzogICAgICAgICAgICAgICAgICB2b2lkIGp0dmljX2Nscl9zb3VyY2UodWludDhfdCBnaXJxX251bSwgdWludDhfdCBiaXRfbnVtKQ0KNjg6ICAgICAgICAgICAgICAgICAgew0KQkZEMDg5RjQgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOA0KQkZEMDg5RjYgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApDQpCRkQwODlGOCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDg5RkEgICAgICAwQzY0ICAgTU9WRSBWMSwgQTANCkJGRDA4OUZDICAgICAgMEM0NSAgIE1PVkUgVjAsIEExDQpCRkQwODlGRSAgMDAwODE4N0UgICBTQiBWMSwgOChTOCkNCkJGRDA4QTAyICAwMDBDMTg1RSAgIFNCIFYwLCAxMihTOCkNCjY5OiAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2lycV9udW0gPCAoTUVDMTR4eF9OVU1fSlRWSUNfSU5UUykpDQpCRkQwOEEwNiAgMDAwODE0NUUgICBMQlUgVjAsIDgoUzgpDQpCRkQwOEEwQSAgMDAxM0IwNDIgICBTTFRJVSBWMCwgVjAsIDE5DQpCRkQwOEEwRSAgMDAxMzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOEEzOA0KNzA6ICAgICAgICAgICAgICAgICAgICAgIHsNCjcxOiAgICAgICAgICAgICAgICAgICAgICAgICAgYml0X251bSAmPSAweDFGdTsNCkJGRDA4QTEyICAwMDBDMTQ1RSAgIExCVSBWMCwgMTIoUzgpDQpCRkQwOEExNiAgICAgIDJEMjkgICBBTkRJIFYwLCBWMCwgMHgxRg0KQkZEMDhBMTggIDAwMEMxODVFICAgU0IgVjAsIDEyKFM4KQ0KNzI6ICAgICAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW2dpcnFfbnVtXS5TT1VSQ0UgPSAoMXVsIDw8IGJpdF9udW0pOw0KQkZEMDhBMUMgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA4QTFFICA1MDgyQkZGRiAgIExEQzEgRjMxLCAyMDYxMChSQSkNCkJGRDA4QTIwICBDMDAwNTA4MiAgIE9SSSBBMCwgVjAsIC0xNjM4NA0KQkZEMDhBMjQgIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQ0KQkZEMDhBMjggIDAwMEMxNDdFICAgTEJVIFYxLCAxMihTOCkNCkJGRDA4QTJDICAgICAgRUU4MSAgIExJIEExLCAxDQpCRkQwOEEyRSAgMTgxMDAwQTMgICBTTExWIFYxLCBWMSwgQTENCkJGRDA4QTMwICAyNTI4MTgxMCAgIFNCIFpFUk8sIDk1MTIoUzApDQpCRkQwOEEzMiAgICAgIDI1MjggICBTTEwgVjAsIFYwLCA0DQpCRkQwOEEzNCAgICAgIDA1MjggICBBRERVIFYwLCBBMCwgVjANCkJGRDA4QTM2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNzM6ICAgICAgICAgICAgICAgICAgICAgIH0NCjc0OiAgICAgICAgICAgICAgICAgIH0NCkJGRDA4QTM4ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOEEzQSAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA4QTNDICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KQkZEMDhBM0UgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDhBNDAgICAgICAwQzAwICAgTk9QDQo3NTogICAgICAgICAgICAgICAgICANCjc2OiAgICAgICAgICAgICAgICAgIA0KNzc6ICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBHSVJRbiBzb3VyY2Ugd2l0aCBvcHRpb25hbCBjbGVhcmluZyBvZiBzb3VyY2UuDQo3ODogICAgICAgICAgICAgICAgICAgKiBnaXJxX251bSA9IFswLCAxOF0sIDA9R0lSUTA4LCAxPUdJUlEwOSwgLi4uLCAxOD1HSVJRMjYNCjc5OiAgICAgICAgICAgICAgICAgICAqIGJpdF9udW0gPSBbMCwgMzFdDQo4MDogICAgICAgICAgICAgICAgICAgKi8NCjgxOiAgICAgICAgICAgICAgICAgIHZvaWQganR2aWNfZGlzX2Nscl9zb3VyY2UodWludDhfdCBnaXJxX251bSwgdWludDhfdCBiaXRfbnVtLCB1aW50OF90IGNscl9zcmMpDQo4MjogICAgICAgICAgICAgICAgICB7DQpCRkQwNzQ4MCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwNzQ4MiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA3NDg0ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNzQ4NiAgICAgIDBDNjUgICBNT1ZFIFYxLCBBMQ0KQkZEMDc0ODggICAgICAwQzQ2ICAgTU9WRSBWMCwgQTINCkJGRDA3NDhBICAwMDA4MTg5RSAgIFNCIEEwLCA4KFM4KQ0KQkZEMDc0OEUgIDAwMEMxODdFICAgU0IgVjEsIDEyKFM4KQ0KQkZEMDc0OTIgIDAwMTAxODVFICAgU0IgVjAsIDE2KFM4KQ0KODM6ICAgICAgICAgICAgICAgICAgICAgIGlmIChnaXJxX251bSA8IChNRUMxNHh4X05VTV9KVFZJQ19JTlRTKSkNCkJGRDA3NDk2ICAwMDA4MTQ1RSAgIExCVSBWMCwgOChTOCkNCkJGRDA3NDlBICAwMDEzQjA0MiAgIFNMVElVIFYwLCBWMCwgMTkNCkJGRDA3NDlFICAwMDI1NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA3NEVDDQo4NDogICAgICAgICAgICAgICAgICAgICAgew0KODU6ICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfbnVtICY9IDB4MUZ1Ow0KQkZEMDc0QTIgIDAwMEMxNDVFICAgTEJVIFYwLCAxMihTOCkNCkJGRDA3NEE2ICAgICAgMkQyOSAgIEFOREkgVjAsIFYwLCAweDFGDQpCRkQwNzRBOCAgMDAwQzE4NUUgICBTQiBWMCwgMTIoUzgpDQo4NjogICAgICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbZ2lycV9udW1dLkVOX0NMUiA9ICgxdWwgPDwgYml0X251bSk7DQpCRkQwNzRBQyAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDc0QUUgIDUwODJCRkZGICAgTERDMSBGMzEsIDIwNjEwKFJBKQ0KQkZEMDc0QjAgIEMwMDA1MDgyICAgT1JJIEEwLCBWMCwgLTE2Mzg0DQpCRkQwNzRCNCAgMDAwODE0NUUgICBMQlUgVjAsIDgoUzgpDQpCRkQwNzRCOCAgMDAwQzE0N0UgICBMQlUgVjEsIDEyKFM4KQ0KQkZEMDc0QkMgICAgICBFRTgxICAgTEkgQTEsIDENCkJGRDA3NEJFICAxODEwMDBBMyAgIFNMTFYgVjEsIFYxLCBBMQ0KQkZEMDc0QzAgIDI1MjgxODEwICAgU0IgWkVSTywgOTUxMihTMCkNCkJGRDA3NEMyICAgICAgMjUyOCAgIFNMTCBWMCwgVjAsIDQNCkJGRDA3NEM0ICAgICAgMDUyOCAgIEFERFUgVjAsIEEwLCBWMA0KQkZEMDc0QzYgICAgICBFOUEyICAgU1cgVjEsIDgoVjApDQo4NzogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggMCAhPSBjbHJfc3JjICkNCkJGRDA3NEM4ICAwMDEwMTQ1RSAgIExCVSBWMCwgMTYoUzgpDQpCRkQwNzRDQyAgMDAwRTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNzRFQw0KODg6ICAgICAgICAgICAgICAgICAgICAgICAgICB7DQo4OTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW2dpcnFfbnVtXS5TT1VSQ0UgPSAoMXVsIDw8IGJpdF9udW0pOw0KQkZEMDc0RDAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA3NEQyICA1MDgyQkZGRiAgIExEQzEgRjMxLCAyMDYxMChSQSkNCkJGRDA3NEQ0ICBDMDAwNTA4MiAgIE9SSSBBMCwgVjAsIC0xNjM4NA0KQkZEMDc0RDggIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQ0KQkZEMDc0REMgIDAwMEMxNDdFICAgTEJVIFYxLCAxMihTOCkNCkJGRDA3NEUwICAgICAgRUU4MSAgIExJIEExLCAxDQpCRkQwNzRFMiAgMTgxMDAwQTMgICBTTExWIFYxLCBWMSwgQTENCkJGRDA3NEU0ICAyNTI4MTgxMCAgIFNCIFpFUk8sIDk1MTIoUzApDQpCRkQwNzRFNiAgICAgIDI1MjggICBTTEwgVjAsIFYwLCA0DQpCRkQwNzRFOCAgICAgIDA1MjggICBBRERVIFYwLCBBMCwgVjANCkJGRDA3NEVBICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KOTA6ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQo5MTogICAgICAgICAgICAgICAgICAgICAgfQ0KOTI6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDc0RUMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3NEVFICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDc0RjAgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwNzRGMiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNzRGNCAgICAgIDBDMDAgICBOT1ANCjkzOiAgICAgICAgICAgICAgICAgIA0KOTQ6ICAgICAgICAgICAgICAgICAgDQo5NTogICAgICAgICAgICAgICAgICAvKiBFbmFibGUgd2l0aCBvcHRpb25hbCBzb3VyY2UgY2xlYXIgYmVmb3JlIGVuYWJsZS4NCjk2OiAgICAgICAgICAgICAgICAgICAqIGdpcnFfbnVtID0gWzAsIDE4XSwgMD1HSVJRMDgsIDE9R0lSUTA5LCAuLi4sIDE4PUdJUlEyNg0KOTc6ICAgICAgICAgICAgICAgICAgICogYml0X251bSA9IFswLCAzMV0NCjk4OiAgICAgICAgICAgICAgICAgICAqLw0KOTk6ICAgICAgICAgICAgICAgICAgdm9pZCBqdHZpY19lbl9zb3VyY2UodWludDhfdCBnaXJxX251bSwgdWludDhfdCBiaXRfbnVtLCB1aW50OF90IGNscl9zcmMpDQoxMDA6ICAgICAgICAgICAgICAgICB7DQpCRkQwNzRGOCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwNzRGQSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA3NEZDICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNzRGRSAgICAgIDBDNjUgICBNT1ZFIFYxLCBBMQ0KQkZEMDc1MDAgICAgICAwQzQ2ICAgTU9WRSBWMCwgQTINCkJGRDA3NTAyICAwMDA4MTg5RSAgIFNCIEEwLCA4KFM4KQ0KQkZEMDc1MDYgIDAwMEMxODdFICAgU0IgVjEsIDEyKFM4KQ0KQkZEMDc1MEEgIDAwMTAxODVFICAgU0IgVjAsIDE2KFM4KQ0KMTAxOiAgICAgICAgICAgICAgICAgICAgIGlmIChnaXJxX251bSA8IChNRUMxNHh4X05VTV9KVFZJQ19JTlRTKSkNCkJGRDA3NTBFICAwMDA4MTQ1RSAgIExCVSBWMCwgOChTOCkNCkJGRDA3NTEyICAwMDEzQjA0MiAgIFNMVElVIFYwLCBWMCwgMTkNCkJGRDA3NTE2ICAwMDI1NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA3NTY0DQoxMDI6ICAgICAgICAgICAgICAgICAgICAgew0KMTAzOiAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfbnVtICY9IDB4MUZ1Ow0KQkZEMDc1MUEgIDAwMEMxNDVFICAgTEJVIFYwLCAxMihTOCkNCkJGRDA3NTFFICAgICAgMkQyOSAgIEFOREkgVjAsIFYwLCAweDFGDQpCRkQwNzUyMCAgMDAwQzE4NUUgICBTQiBWMCwgMTIoUzgpDQoxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggMCAhPSBjbHJfc3JjICkNCkJGRDA3NTI0ICAwMDEwMTQ1RSAgIExCVSBWMCwgMTYoUzgpDQpCRkQwNzUyOCAgMDAwRTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNzU0OA0KMTA1OiAgICAgICAgICAgICAgICAgICAgICAgICB7DQoxMDY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW2dpcnFfbnVtXS5TT1VSQ0UgPSAoMXVsIDw8IGJpdF9udW0pOw0KQkZEMDc1MkMgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA3NTJFICA1MDgyQkZGRiAgIExEQzEgRjMxLCAyMDYxMChSQSkNCkJGRDA3NTMwICBDMDAwNTA4MiAgIE9SSSBBMCwgVjAsIC0xNjM4NA0KQkZEMDc1MzQgIDAwMDgxNDVFICAgTEJVIFYwLCA4KFM4KQ0KQkZEMDc1MzggIDAwMEMxNDdFICAgTEJVIFYxLCAxMihTOCkNCkJGRDA3NTNDICAgICAgRUU4MSAgIExJIEExLCAxDQpCRkQwNzUzRSAgMTgxMDAwQTMgICBTTExWIFYxLCBWMSwgQTENCkJGRDA3NTQwICAyNTI4MTgxMCAgIFNCIFpFUk8sIDk1MTIoUzApDQpCRkQwNzU0MiAgICAgIDI1MjggICBTTEwgVjAsIFYwLCA0DQpCRkQwNzU0NCAgICAgIDA1MjggICBBRERVIFYwLCBBMCwgVjANCkJGRDA3NTQ2ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMTA3OiAgICAgICAgICAgICAgICAgICAgICAgICB9DQoxMDg6ICAgICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbZ2lycV9udW1dLkVOX1NFVCA9ICgxdWwgPDwgYml0X251bSk7DQpCRkQwNzU0OCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDc1NEEgIDUwODJCRkZGICAgTERDMSBGMzEsIDIwNjEwKFJBKQ0KQkZEMDc1NEMgIEMwMDA1MDgyICAgT1JJIEEwLCBWMCwgLTE2Mzg0DQpCRkQwNzU1MCAgMDAwODE0NUUgICBMQlUgVjAsIDgoUzgpDQpCRkQwNzU1NCAgMDAwQzE0N0UgICBMQlUgVjEsIDEyKFM4KQ0KQkZEMDc1NTggICAgICBFRTgxICAgTEkgQTEsIDENCkJGRDA3NTVBICAxODEwMDBBMyAgIFNMTFYgVjEsIFYxLCBBMQ0KQkZEMDc1NUMgIDI1MjgxODEwICAgU0IgWkVSTywgOTUxMihTMCkNCkJGRDA3NTVFICAgICAgMjUyOCAgIFNMTCBWMCwgVjAsIDQNCkJGRDA3NTYwICAgICAgMDUyOCAgIEFERFUgVjAsIEEwLCBWMA0KQkZEMDc1NjIgICAgICBFOUExICAgU1cgVjEsIDQoVjApDQoxMDk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTEwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDc1NjQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3NTY2ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDc1NjggICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwNzU2QSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNzU2QyAgICAgIDBDMDAgICBOT1ANCjExMTogICAgICAgICAgICAgICAgIA0KMTEyOiAgICAgICAgICAgICAgICAgDQoxMTM6ICAgICAgICAgICAgICAgICAvKiBlbmQgbWVjMTR4eF9qdHZpYy5jICovDQoxMTQ6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KMTE1OiAgICAgICAgICAgICAgICAgICovDQoxMTY6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvbWVjMTR4eF9ncGlvLmMgIC0tLS0tLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIKkgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICANCjIyOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBtZWMxNHh4X2dwaW8uYw0KMjM6ICAgICAgICAgICAgICAgICAgICpNRUMxNHh4IEdQSU8gaGFyZHdhcmUgYWNjZXNzDQoyNDogICAgICAgICAgICAgICAgICAgKi8NCjI1OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBQZXJpcGhlcmFscyBHUElPDQoyNjogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI3OiAgICAgICAgICAgICAgICAgICAqLw0KMjg6ICAgICAgICAgICAgICAgICAgDQoyOTogICAgICAgICAgICAgICAgICANCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgDQozNzogICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDMyX3QgZ3Bpb19oYXNfZHJ2X3N0ciAoIGVudW0gZ3Bpb19pZF90IGdwaW9faWQgKTsNCjM4OiAgICAgICAgICAgICAgICAgIA0KMzk6ICAgICAgICAgICAgICAgICAgDQo0MDogICAgICAgICAgICAgICAgICAjaWZkZWYgRU5BQkxFX0dQSU9fUElOX1ZBTElEQVRJT04NCjQxOiAgICAgICAgICAgICAgICAgIA0KNDI6ICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGdwaW9fcG9ydF9iaXRtYXBzW05VTV9HUElPX1BPUlRTXSA9IA0KNDM6ICAgICAgICAgICAgICAgICAgew0KNDQ6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfQV9CSVRNQVApLA0KNDU6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfQl9CSVRNQVApLA0KNDY6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfQ19CSVRNQVApLA0KNDc6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfRF9CSVRNQVApDQo0ODogICAgICAgICAgICAgICAgICB9Ow0KNDk6ICAgICAgICAgICAgICAgICAgDQo1MDogICAgICAgICAgICAgICAgICAjZW5kaWYNCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgLy8gDQo1MzogICAgICAgICAgICAgICAgICAvLyBEcml2ZSBTdHJlbmd0aCBSZWdpc3RlciBiaXRtYXANCjU0OiAgICAgICAgICAgICAgICAgIC8vDQo1NTogICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgZ3Bpb19kcnZfc3RyX2JpdG1hcFtOVU1fR1BJT19QT1JUU10gPSANCjU2OiAgICAgICAgICAgICAgICAgIHsNCjU3OiAgICAgICAgICAgICAgICAgICAgICAoR1BJT19QT1JUX0FfRFJWU1RSX0JJVE1BUCksDQo1ODogICAgICAgICAgICAgICAgICAgICAgKEdQSU9fUE9SVF9CX0RSVlNUUl9CSVRNQVApLA0KNTk6ICAgICAgICAgICAgICAgICAgICAgIChHUElPX1BPUlRfQ19EUlZTVFJfQklUTUFQKSwNCjYwOiAgICAgICAgICAgICAgICAgICAgICAoR1BJT19QT1JUX0RfRFJWU1RSX0JJVE1BUCkNCjYxOiAgICAgICAgICAgICAgICAgIH07DQo2MjogICAgICAgICAgICAgICAgICANCjYzOiAgICAgICAgICAgICAgICAgIA0KNjQ6ICAgICAgICAgICAgICAgICAgc3RydWN0IGdwaW9fY2ZnIA0KNjU6ICAgICAgICAgICAgICAgICAgew0KNjY6ICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgYml0X21hc2s7DQo2NzogICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJpdF9wb3M7DQo2ODogICAgICAgICAgICAgICAgICB9Ow0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGdwaW9fY2ZnIGdwaW9fY2ZnX3RibFtHUElPX1BST1BfTUFYXSA9IA0KNzE6ICAgICAgICAgICAgICAgICAgew0KNzI6ICAgICAgICAgICAgICAgICAgICAgeyAweDAwMDN1LCAweDAwdSB9LA0KNzM6ICAgICAgICAgICAgICAgICAgICAgeyAweDAwMEN1LCAweDAydSB9LA0KNzQ6ICAgICAgICAgICAgICAgICAgICAgeyAweDAwRjB1LCAweDA0dSB9LA0KNzU6ICAgICAgICAgICAgICAgICAgICAgeyAweDAxMDB1LCAweDA4dSB9LA0KNzY6ICAgICAgICAgICAgICAgICAgICAgeyAweDAyMDB1LCAweDA5dSB9LA0KNzc6ICAgICAgICAgICAgICAgICAgICAgeyAweDA0MDB1LCAweDBBdSB9LA0KNzg6ICAgICAgICAgICAgICAgICAgICAgeyAweDA4MDB1LCAweDBCdSB9LA0KNzk6ICAgICAgICAgICAgICAgICAgICAgeyAweDMwMDB1LCAweDBDdSB9LA0KODA6ICAgICAgICAgICAgICAgICAgICAgeyAweDNGRkZ1LCAweDAwdSB9DQo4MTogICAgICAgICAgICAgICAgICB9Ow0KODI6ICAgICAgICAgICAgICAgICAgDQo4MzogICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDMyX3QgZ3Bpb19waW5fY3RybF9hZGRyKGVudW0gZ3Bpb19pZF90IGdwaW9faWQpDQo4NDogICAgICAgICAgICAgICAgICB7DQpCRkQwOUIyOCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUIyQSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5QjJDICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOUIyRSAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkNCjg1OiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCh1aW50MzJfdCkoR1BJT19CQVNFKSArICh1aW50MzJfdCkoZ3Bpb19pZCA8PCAyKSk7DQpCRkQwOUIzMiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA5QjM2ICAgICAgMjVBNCAgIFNMTCBWMSwgVjAsIDINCkJGRDA5QjM4ICBBMDA4NDFBMiAgIExVSSBWMCwgMHhBMDA4DQpCRkQwOUIzQyAgMTAwMDUwNDIgICBPUkkgVjAsIFYwLCA0MDk2DQpCRkQwOUIzRSAgMDUyNjEwMDAgICBBRERJIFpFUk8sIFpFUk8sIDEzMTgNCkJGRDA5QjQwICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KODY6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDlCNDIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5QjQ0ICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlCNDYgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOUI0OCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUI0QSAgICAgIDBDMDAgICBOT1ANCjg3OiAgICAgICAgICAgICAgICAgIA0KODg6ICAgICAgICAgICAgICAgICAgI2lmZGVmIEVOQUJMRV9HUElPX1BJTl9WQUxJREFUSU9ODQo4OTogICAgICAgICAgICAgICAgICANCjkwOiAgICAgICAgICAgICAgICAgIC8qKg0KOTE6ICAgICAgICAgICAgICAgICAgICogZ3Bpb19pc192YWxpZCAtIGxvY2FsIGhlbHBlciBjaGVja3MgaWYgR1BJTyBwaW4gaXMgDQo5MjogICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRlZCBpbiB0aGlzIGhhcmR3YXJlLiANCjkzOiAgICAgICAgICAgICAgICAgICAqIA0KOTQ6ICAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KOTU6ICAgICAgICAgICAgICAgICAgICogDQo5NjogICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQNCjk3OiAgICAgICAgICAgICAgICAgICAqIA0KOTg6ICAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IE5vbi16ZXJvKEdQSU8gUGluIGltcGxlbWVudGVkKSwgMChub3QgDQo5OTogICAgICAgICAgICAgICAgICAgKiAgICAgICAgIGltcGxlbWVudGVkKS4NCjEwMDogICAgICAgICAgICAgICAgICAqLw0KMTAxOiAgICAgICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgZ3Bpb19pc192YWxpZCAoIGVudW0gZ3Bpb19pZF90IGdwaW9faWQgKQ0KMTAyOiAgICAgICAgICAgICAgICAgew0KQkZEMDgxQjQgICAgICA0RkY5ICAgQURESVUgU1AsIFNQLCAtMTYNCkJGRDA4MUI2ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA4MUI4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwODFCQSAgMDAxMEY4OUUgICBTVyBBMCwgMTYoUzgpDQoxMDM6ICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBncF9iYW5rOw0KMTA0OiAgICAgICAgICAgICAgICAgDQoxMDU6ICAgICAgICAgICAgICAgICAgICBncF9iYW5rID0gMDsNCkJGRDA4MUJFICAwMDAwMzgxRSAgIFNIIFpFUk8sIDAoUzgpDQoxMDY6ICAgICAgICAgICAgICAgICANCjEwNzogICAgICAgICAgICAgICAgICAgIGlmICggKHVpbnQxNl90KWdwaW9faWQgPCAodWludDE2X3QpKE1BWF9HUElPX0lEKSApDQpCRkQwODFDMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODFDNiAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGDQpCRkQwODFDOCAgMDA3OEIwNDIgICBTTFRJVSBWMCwgVjAsIDEyMA0KQkZEMDgxQ0MgIDAwMUI0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDgyMDYNCjEwODogICAgICAgICAgICAgICAgICAgIHsNCjEwOTogICAgICAgICAgICAgICAgICAgICAgIGdwX2JhbmsgPSAodWludDE2X3QpZ3Bpb19pZCA+PiA1Ow0KQkZEMDgxRDAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDgxRDQgICAgICAyRDJGICAgQU5ESSBWMCwgVjAsIDB4RkZGRg0KQkZEMDgxRDYgICAgICAyNTJCICAgU1JMIFYwLCBWMCwgNQ0KQkZEMDgxRDggIDAwMDAzODVFICAgU0ggVjAsIDAoUzgpDQoxMTA6ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGdwaW9fcG9ydF9iaXRtYXBzW2dwX2JhbmtdICYgKDEgPDwgKGdwaW9faWQgJiAweDAwMUZ1KSkgKQ0KQkZEMDgxREMgIDAwMDAzNDdFICAgTEhVIFYxLCAwKFM4KQ0KQkZEMDgxRTAgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA4MUUyICAyNUI0QkZEMSAgIExEQzEgRjMwLCA5NjUyKFMxKQ0KQkZEMDgxRTQgICAgICAyNUI0ICAgU0xMIFYxLCBWMSwgMg0KQkZEMDgxRTYgIDkyNTQzMDQyICAgQURESVUgVjAsIFYwLCAtMjgwNzYNCkJGRDA4MUU4ICAwNTI2OTI1NCAgIFNMVEkgUzIsIFM0LCAxMzE4DQpCRkQwODFFQSAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA4MUVDICAgICAgNjlBMCAgIExXIFYxLCAwKFYwKQ0KQkZEMDgxRUUgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDgxRjIgICAgICAyRDI5ICAgQU5ESSBWMCwgVjAsIDB4MUYNCkJGRDA4MUY0ICAgICAgRUUwMSAgIExJIEEwLCAxDQpCRkQwODFGNiAgMTAxMDAwODIgICBTTExWIFYwLCBWMCwgQTANCkJGRDA4MUY4ICA0NDkzMTAxMCAgIEFEREkgWkVSTywgUzAsIDE3NTU1DQpCRkQwODFGQSAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA4MUZDICAwMDAzNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4MjA2DQoxMTE6ICAgICAgICAgICAgICAgICAgICAgICB7IA0KMTEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQpCRkQwODIwMCAgICAgIEVEMDEgICBMSSBWMCwgMQ0KQkZEMDgyMDIgICAgICBDQzAyICAgQiAweEJGRDA4MjA4DQpCRkQwODIwNCAgICAgIDBDMDAgICBOT1ANCjExMzogICAgICAgICAgICAgICAgICAgICAgIH0NCjExNDogICAgICAgICAgICAgICAgICAgIH0NCjExNTogICAgICAgICAgICAgICAgIA0KMTE2OiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KQkZEMDgyMDYgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTw0KMTE3OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDgyMDggICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA4MjBBICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDA4MjBDICAgICAgNEMwOSAgIEFERElVIFNQLCBTUCwgMTYNCkJGRDA4MjBFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA4MjEwICAgICAgMEMwMCAgIE5PUA0KMTE4OiAgICAgICAgICAgICAgICAgDQoxMTk6ICAgICAgICAgICAgICAgICAjZWxzZQ0KMTIwOiAgICAgICAgICAgICAgICAgc3RhdGljIHVpbnQzMl90IGdwaW9faXNfdmFsaWQoZW51bSBncGlvX2lkX3QgZ3Bpb19pZCkgeyByZXR1cm4gdHJ1ZTsgfQ0KMTIxOiAgICAgICAgICAgICAgICAgDQoxMjI6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjEyMzogICAgICAgICAgICAgICAgIA0KMTI0OiAgICAgICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgZ3Bpb19iYW5rX251bShlbnVtIGdwaW9faWRfdCBncGlvX2lkKQ0KMTI1OiAgICAgICAgICAgICAgICAgew0KQkZEMDlEMkMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOA0KQkZEMDlEMkUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApDQpCRkQwOUQzMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlEMzIgIDAwMDhGODlFICAgU1cgQTAsIDgoUzgpDQoxMjY6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1aW50OF90KShncGlvX2lkKSA+PiA1Ow0KQkZEMDlEMzYgIDAwMDhGQzVFICAgTFcgVjAsIDgoUzgpDQpCRkQwOUQzQSAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDlEM0MgICAgICAyNTJCICAgU1JMIFYwLCBWMCwgNQ0KQkZEMDlEM0UgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYNCjEyNzogICAgICAgICAgICAgICAgIH0NCkJGRDA5RDQwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUQ0MiAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA5RDQ0ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KQkZEMDlENDYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDlENDggICAgICAwQzAwICAgTk9QDQoxMjg6ICAgICAgICAgICAgICAgICANCjEyOTogICAgICAgICAgICAgICAgIA0KMTMwOiAgICAgICAgICAgICAgICAgc3RhdGljIHVpbnQ4X3QgZ3Bpb19waW5fbnVtKGVudW0gZ3Bpb19pZF90IGdwaW9faWQpDQoxMzE6ICAgICAgICAgICAgICAgICB7DQpCRkQwOUQ0QyAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUQ0RSAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5RDUwICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOUQ1MiAgMDAwOEY4OUUgICBTVyBBMCwgOChTOCkNCjEzMjogICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHVpbnQ4X3QpKGdwaW9faWQpICYgMHgxRnU7DQpCRkQwOUQ1NiAgMDAwOEZDNUUgICBMVyBWMCwgOChTOCkNCkJGRDA5RDVBICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGDQpCRkQwOUQ1QyAgICAgIDJEMjkgICBBTkRJIFYwLCBWMCwgMHgxRg0KQkZEMDlENUUgICAgICAyRDJEICAgQU5ESSBWMCwgVjAsIDB4RkYNCjEzMzogICAgICAgICAgICAgICAgIH0NCkJGRDA5RDYwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOUQ2MiAgICAgIDRCQzEgICBMVyBTOCwgNChTUCkNCkJGRDA5RDY0ICAgICAgNEMwNSAgIEFERElVIFNQLCBTUCwgOA0KQkZEMDlENjYgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDlENjggICAgICAwQzAwICAgTk9QDQoxMzQ6ICAgICAgICAgICAgICAgICANCjEzNTogICAgICAgICAgICAgICAgIA0KMTM2OiAgICAgICAgICAgICAgICAgLyoqDQoxMzc6ICAgICAgICAgICAgICAgICAgKiBncGlvX2hhc19kcnZfc3RyIC0gTG9jYWwgaGVscGVyIHRvIGNoZWNrIGlmIEdQSU8gcGluIGhhcyANCjEzODogICAgICAgICAgICAgICAgICAqIGFzc29jaWF0ZWQgZHJpdmUgc3RyZW5ndGggcmVnaXN0ZXIuIA0KMTM5OiAgICAgICAgICAgICAgICAgICogDQoxNDA6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoxNDE6ICAgICAgICAgICAgICAgICAgKiANCjE0MjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX2lkIDAtYmFzZWQgR1BJTyBJRA0KMTQzOiAgICAgICAgICAgICAgICAgICogDQoxNDQ6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQzMl90IDAoTm8gRHJpdmUgU3RyZW5ndGgpLCBOb24temVybyhQaHlzaWNhbCANCjE0NTogICAgICAgICAgICAgICAgICAqICAgICAgICAgYWRkcmVzcyBvZiBEcml2ZSBTdHJlbmd0aCBSZWdpc3RlcikuDQoxNDY6ICAgICAgICAgICAgICAgICAgKi8NCjE0NzogICAgICAgICAgICAgICAgIHN0YXRpYyB1aW50MzJfdCBncGlvX2hhc19kcnZfc3RyICggZW51bSBncGlvX2lkX3QgZ3Bpb19pZCApDQoxNDg6ICAgICAgICAgICAgICAgICB7DQpCRkQwNjY0NCAgICAgIDRGRUQgICBBRERJVSBTUCwgU1AsIC00MA0KQkZEMDY2NDYgICAgICBDQkU5ICAgU1cgUkEsIDM2KFNQKQ0KQkZEMDY2NDggICAgICBDQkM4ICAgU1cgUzgsIDMyKFNQKQ0KQkZEMDY2NEEgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA2NjRDICAwMDI4Rjg5RSAgIFNXIEEwLCA0MChTOCkNCjE0OTogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiYW5rLCBiaXRwb3MsIGFkZHI7DQoxNTA6ICAgICAgICAgICAgICAgICAgICAgDQoxNTE6ICAgICAgICAgICAgICAgICAgICAgYWRkciA9IDB1bDsNCkJGRDA2NjUwICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMTUyOiAgICAgICAgICAgICAgICAgICAgIGlmICggZ3Bpb19pZCA8IE1BWF9HUElPX0lEICkNCkJGRDA2NjU0ICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDA2NjU4ICAwMDc4QjA0MiAgIFNMVElVIFYwLCBWMCwgMTIwDQpCRkQwNjY1QyAgMDAzNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNjZDQQ0KMTUzOiAgICAgICAgICAgICAgICAgICAgIHsNCjE1NDogICAgICAgICAgICAgICAgICAgICAgICAgYmFuayA9IGdwaW9fYmFua19udW0oZ3Bpb19pZCk7DQpCRkQwNjY2MCAgMDAyOEZDOUUgICBMVyBBMCwgNDAoUzgpDQpCRkQwNjY2NCAgNEU5Njc3RTggICBKQUxTIGdwaW9fYmFua19udW0NCkJGRDA2NjY2ICAgICAgNEU5NiAgIEFERElVIFM0LCBTNCwgLTUNCkJGRDA2NjY4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDY2NkEgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMTU1OiAgICAgICAgICAgICAgICAgICAgICAgICBiaXRwb3MgPSBncGlvX3Bpbl9udW0oZ3Bpb19pZCk7DQpCRkQwNjY2RSAgMDAyOEZDOUUgICBMVyBBMCwgNDAoUzgpDQpCRkQwNjY3MiAgNEVBNjc3RTggICBKQUxTIGdwaW9fcGluX251bQ0KQkZEMDY2NzQgICAgICA0RUE2ICAgQURESVUgUzUsIFM1LCAzDQpCRkQwNjY3NiAgICAgIDBDMDAgICBOT1ANCkJGRDA2Njc4ICAwMDE4Rjg1RSAgIFNXIFYwLCAyNChTOCkNCjE1NjogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBncGlvX2Rydl9zdHJfYml0bWFwW2JhbmtdICYgKDF1bCA8PCBiaXRwb3MpICkNCkJGRDA2NjdDICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwNjY3RSAgRkM3RUJGRDEgICBMREMxIEYzMCwgLTg5OChTMSkNCkJGRDA2NjgwICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkNCkJGRDA2Njg0ICAgICAgMjVCNCAgIFNMTCBWMSwgVjEsIDINCkJGRDA2Njg2ICA5MjY0MzA0MiAgIEFERElVIFYwLCBWMCwgLTI4MDYwDQpCRkQwNjY4OCAgMDUyNjkyNjQgICBTTFRJIFMzLCBBMCwgMTMxOA0KQkZEMDY2OEEgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwNjY4QyAgICAgIDY5QTAgICBMVyBWMSwgMChWMCkNCkJGRDA2NjhFICAwMDE4RkM1RSAgIExXIFYwLCAyNChTOCkNCkJGRDA2NjkyICAxMDUwMDA2MiAgIFNSTFYgVjAsIFYwLCBWMQ0KQkZEMDY2OTQgIDJEMjExMDUwICAgQURESSBWMCwgUzAsIDExNTUzDQpCRkQwNjY5NiAgICAgIDJEMjEgICBBTkRJIFYwLCBWMCwgMHgxDQpCRkQwNjY5OCAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDY2OUEgIDAwMTY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDY2Q0ENCjE1NzogICAgICAgICAgICAgICAgICAgICAgICAgew0KMTU4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9IChHUElPX1BDVFJMMl9CQVNFKSArICgodWludDMyX3QpKGdwaW9faWQpIDw8IDIpOw0KQkZEMDY2OUUgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDY2QTIgICAgICAyNUE0ICAgU0xMIFYxLCBWMCwgMg0KQkZEMDY2QTQgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgNCkJGRDA2NkE4ICAxNTAwNTA0MiAgIE9SSSBWMCwgVjAsIDUzNzYNCkJGRDA2NkFBICAwNTI2MTUwMCAgIExCVSBUMCwgMTMxOChaRVJPKQ0KQkZEMDY2QUMgICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwNjZBRSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxNTk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGdwaW9faWQgPiBHUElPXzAwNzdfSUQgKQ0KQkZEMDY2QjIgIDAwMjhGQzVFICAgTFcgVjAsIDQwKFM4KQ0KQkZEMDY2QjYgIDAwNDBCMDQyICAgU0xUSVUgVjAsIFYwLCA2NA0KQkZEMDY2QkEgIDAwMDY0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDY2Q0ENCjE2MDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCjE2MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyIC09IDB4MjB1bDsNCkJGRDA2NkJFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA2NkMyICBGRkUwMzA0MiAgIEFERElVIFYwLCBWMCwgLTMyDQpCRkQwNjZDNCAgRjg1RUZGRTAgICBMVyBSQSwgLTE5NTQoWkVSTykNCkJGRDA2NkM2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjE2MjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjE2MzogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTY0OiAgICAgICAgICAgICAgICAgICAgIH0NCjE2NTogICAgICAgICAgICAgICAgICAgICANCjE2NjogICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkcjsNCkJGRDA2NkNBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCjE2NzogICAgICAgICAgICAgICAgIH0NCkJGRDA2NkNFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNjZEMCAgICAgIDRCRTkgICBMVyBSQSwgMzYoU1ApDQpCRkQwNjZEMiAgICAgIDRCQzggICBMVyBTOCwgMzIoU1ApDQpCRkQwNjZENCAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwNjZENiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNjZEOCAgICAgIDBDMDAgICBOT1ANCjE2ODogICAgICAgICAgICAgICAgIA0KMTY5OiAgICAgICAgICAgICAgICAgDQoxNzA6ICAgICAgICAgICAgICAgICB1aW50MTZfdCBHUElPR2V0Q29uZmlnKGVudW0gZ3Bpb19pZF90IGdwaW9faWQpDQoxNzE6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTU1OCAgICAgIDRGRjUgICBBRERJVSBTUCwgU1AsIC0yNA0KQkZEMDk1NUEgICAgICBDQkU1ICAgU1cgUkEsIDIwKFNQKQ0KQkZEMDk1NUMgICAgICBDQkM0ICAgU1cgUzgsIDE2KFNQKQ0KQkZEMDk1NUUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5NTYwICAwMDE4Rjg5RSAgIFNXIEEwLCAyNChTOCkNCjE3MjogICAgICAgICAgICAgICAgICAgICBpZiAoZ3Bpb19pc192YWxpZChncGlvX2lkKSkgew0KQkZEMDk1NjQgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDk1NjggIDQwREE3N0U4ICAgSkFMUyBncGlvX2lzX3ZhbGlkDQpCRkQwOTU2QSAgMEMwMDQwREEgICBCR1RaIEswLCAweEJGRDBBRDZFDQpCRkQwOTU2QyAgICAgIDBDMDAgICBOT1ANCkJGRDA5NTZFICAwMDA5NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5NTg0DQoxNzM6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgKigodm9sYXRpbGUgdWludDE2X3QgKilncGlvX3Bpbl9jdHJsX2FkZHIoZ3Bpb19pZCkpOw0KQkZEMDk1NzIgIDAwMThGQzlFICAgTFcgQTAsIDI0KFM4KQ0KQkZEMDk1NzYgIDREOTQ3N0U4ICAgSkFMUyBncGlvX3Bpbl9jdHJsX2FkZHINCkJGRDA5NTc4ICAgICAgNEQ5NCAgIEFERElVIFQ0LCBUNCwgLTYNCkJGRDA5NTdBICAgICAgMEMwMCAgIE5PUA0KQkZEMDk1N0MgICAgICAyOTIwICAgTEhVIFYwLCAwKFYwKQ0KQkZEMDk1N0UgICAgICAyRDJGICAgQU5ESSBWMCwgVjAsIDB4RkZGRg0KQkZEMDk1ODAgICAgICBDQzAyICAgQiAweEJGRDA5NTg2DQpCRkQwOTU4MiAgICAgIDBDMDAgICBOT1ANCjE3NDogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KMTc1OiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHU7DQpCRkQwOTU4NCAgICAgIDBDNDAgICBNT1ZFIFYwLCBaRVJPDQoxNzY6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTc3OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDk1ODYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5NTg4ICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA5NThBICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA5NThDICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA5NThFICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5NTkwICAgICAgMEMwMCAgIE5PUA0KMTc4OiAgICAgICAgICAgICAgICAgDQoxNzk6ICAgICAgICAgICAgICAgICANCjE4MDogICAgICAgICAgICAgICAgIHZvaWQgR1BJT1NldENvbmZpZyhlbnVtIGdwaW9faWRfdCBncGlvX2lkLCB1aW50MTZfdCBjb25maWcpDQoxODE6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTI5OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDkyOUEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDkyOUMgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDkyOUUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5MkEwICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCkJGRDA5MkEyICAwQzQ1MDAyMCAgIENNUC5MVC5QSCBBVCwgWkVSTw0KQkZEMDkyQTQgICAgICAwQzQ1ICAgTU9WRSBWMCwgQTENCkJGRDA5MkE2ICAwMDI0Mzg1RSAgIFNIIFYwLCAzNihTOCkNCjE4MjogICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50MTZfdCAqIHA7DQoxODM6ICAgICAgICAgICAgICAgICAgICAgDQoxODQ6ICAgICAgICAgICAgICAgICAgICAgaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19pZCkpIHsNCkJGRDA5MkFBICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA5MkFFICA0MERBNzdFOCAgIEpBTFMgZ3Bpb19pc192YWxpZA0KQkZEMDkyQjAgIDBDMDA0MERBICAgQkdUWiBLMCwgMHhCRkQwQUFCNA0KQkZEMDkyQjIgICAgICAwQzAwICAgTk9QDQpCRkQwOTJCNCAgMDAwQzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOTJEMA0KMTg1OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHVpbnQxNl90ICopZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpOw0KQkZEMDkyQjggIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDkyQkMgIDREOTQ3N0U4ICAgSkFMUyBncGlvX3Bpbl9jdHJsX2FkZHINCkJGRDA5MkJFICAgICAgNEQ5NCAgIEFERElVIFQ0LCBUNCwgLTYNCkJGRDA5MkMwICAgICAgMEMwMCAgIE5PUA0KQkZEMDkyQzIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTg2OiAgICAgICAgICAgICAgICAgICAgICAgICAqcCA9IGNvbmZpZzsNCkJGRDA5MkM2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA5MkNBICAwMDI0MzQ3RSAgIExIVSBWMSwgMzYoUzgpDQpCRkQwOTJDRSAgICAgIEE5QTAgICBTSCBWMSwgMChWMCkNCjE4NzogICAgICAgICAgICAgICAgICAgICB9DQoxODg6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTJEMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDkyRDIgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDkyRDQgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDkyRDYgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDkyRDggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDkyREEgICAgICAwQzAwICAgTk9QDQoxODk6ICAgICAgICAgICAgICAgICANCjE5MDogICAgICAgICAgICAgICAgIA0KMTkxOiAgICAgICAgICAgICAgICAgdm9pZCBHUElPQ29uZmlnQW5kT3IoZW51bSBncGlvX2lkX3QgZ3Bpb19pZCwgdWludDE2X3QgYW5kX21hc2ssIHVpbnQxNl90IG9yX21hc2spDQoxOTI6ICAgICAgICAgICAgICAgICB7DQpCRkQwODIxNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDgyMTYgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDgyMTggICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDgyMUEgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4MjFDICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCkJGRDA4MjFFICAwQzY1MDAyMCAgIE1VTEVRX1MuVy5QSFIgQVQsIFpFUk8sIEFUDQpCRkQwODIyMCAgICAgIDBDNjUgICBNT1ZFIFYxLCBBMQ0KQkZEMDgyMjIgICAgICAwQzQ2ICAgTU9WRSBWMCwgQTINCkJGRDA4MjI0ICAwMDI0Mzg3RSAgIFNIIFYxLCAzNihTOCkNCkJGRDA4MjI4ICAwMDI4Mzg1RSAgIFNIIFYwLCA0MChTOCkNCjE5MzogICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50MTZfdCAqIHA7DQoxOTQ6ICAgICAgICAgICAgICAgICANCjE5NTogICAgICAgICAgICAgICAgIA0KMTk2OiAgICAgICAgICAgICAgICAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGdwaW9faWQpKSB7DQpCRkQwODIyQyAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpDQpCRkQwODIzMCAgNDBEQTc3RTggICBKQUxTIGdwaW9faXNfdmFsaWQNCkJGRDA4MjMyICAwQzAwNDBEQSAgIEJHVFogSzAsIDB4QkZEMDlBMzYNCkJGRDA4MjM0ICAgICAgMEMwMCAgIE5PUA0KQkZEMDgyMzYgIDAwMTY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDgyNjYNCjE5NzogICAgICAgICAgICAgICAgICAgICAgICAgcCA9ICh2b2xhdGlsZSB1aW50MTZfdCAqKWdwaW9fcGluX2N0cmxfYWRkcihncGlvX2lkKTsNCkJGRDA4MjNBICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA4MjNFICA0RDk0NzdFOCAgIEpBTFMgZ3Bpb19waW5fY3RybF9hZGRyDQpCRkQwODI0MCAgICAgIDREOTQgICBBRERJVSBUNCwgVDQsIC02DQpCRkQwODI0MiAgICAgIDBDMDAgICBOT1ANCkJGRDA4MjQ0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjE5ODogICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAoKnAgJiBhbmRfbWFzaykgfCBvcl9tYXNrOw0KQkZEMDgyNDggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDgyNEMgICAgICAyOTIwICAgTEhVIFYwLCAwKFYwKQ0KQkZEMDgyNEUgICAgICAyREFGICAgQU5ESSBWMSwgVjAsIDB4RkZGRg0KQkZEMDgyNTAgIDAwMjQzNDVFICAgTEhVIFYwLCAzNihTOCkNCkJGRDA4MjU0ICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDgyNTYgICAgICAyREFGICAgQU5ESSBWMSwgVjAsIDB4RkZGRg0KQkZEMDgyNTggIDAwMjgzNDVFICAgTEhVIFYwLCA0MChTOCkNCkJGRDA4MjVDICAgICAgNDREMyAgIE9SMTYgVjAsIFYxDQpCRkQwODI1RSAgICAgIDJEQUYgICBBTkRJIFYxLCBWMCwgMHhGRkZGDQpCRkQwODI2MCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODI2NCAgICAgIEE5QTAgICBTSCBWMSwgMChWMCkNCjE5OTogICAgICAgICAgICAgICAgICAgICB9DQoyMDA6ICAgICAgICAgICAgICAgICB9DQpCRkQwODI2NiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDgyNjggICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDgyNkEgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDgyNkMgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDgyNkUgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDgyNzAgICAgICAwQzAwICAgTk9QDQoyMDE6ICAgICAgICAgICAgICAgICANCjIwMjogICAgICAgICAgICAgICAgIA0KMjAzOiAgICAgICAgICAgICAgICAgdWludDMyX3QgR1BJT0dldENvbnRyb2woZW51bSBncGlvX2lkX3QgZ3Bpb19pZCkNCjIwNDogICAgICAgICAgICAgICAgIHsNCkJGRDA5NzcwICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwOTc3MiAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwOTc3NCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwOTc3NiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDk3NzggIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQ0KMjA1OiAgICAgICAgICAgICAgICAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGdwaW9faWQpKSB7DQpCRkQwOTc3QyAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpDQpCRkQwOTc4MCAgNDBEQTc3RTggICBKQUxTIGdwaW9faXNfdmFsaWQNCkJGRDA5NzgyICAwQzAwNDBEQSAgIEJHVFogSzAsIDB4QkZEMEFGODYNCkJGRDA5Nzg0ICAgICAgMEMwMCAgIE5PUA0KQkZEMDk3ODYgIDAwMDg0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDk3OUENCjIwNjogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICooKHZvbGF0aWxlIHVpbnQzMl90ICopZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpKTsNCkJGRDA5NzhBICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkNCkJGRDA5NzhFICA0RDk0NzdFOCAgIEpBTFMgZ3Bpb19waW5fY3RybF9hZGRyDQpCRkQwOTc5MCAgICAgIDREOTQgICBBRERJVSBUNCwgVDQsIC02DQpCRkQwOTc5MiAgICAgIDBDMDAgICBOT1ANCkJGRDA5Nzk0ICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDk3OTYgICAgICBDQzAyICAgQiAweEJGRDA5NzlDDQpCRkQwOTc5OCAgICAgIDBDMDAgICBOT1ANCjIwNzogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KMjA4OiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHhGRkZGRkZGRnVsOw0KQkZEMDk3OUEgICAgICBFRDdGICAgTEkgVjAsIC0xDQoyMDk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjEwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDk3OUMgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5NzlFICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA5N0EwICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA5N0EyICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA5N0E0ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5N0E2ICAgICAgMEMwMCAgIE5PUA0KMjExOiAgICAgICAgICAgICAgICAgDQoyMTI6ICAgICAgICAgICAgICAgICANCjIxMzogICAgICAgICAgICAgICAgIHZvaWQgR1BJT1NldENvbnRyb2woZW51bSBncGlvX2lkX3QgZ3Bpb19pZCwgdWludDMyX3QgY3RybF92YWwpDQoyMTQ6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTJEQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDkyREUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDkyRTAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDkyRTIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5MkU0ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCkJGRDA5MkU4ICAwMDI0RjhCRSAgIFNXIEExLCAzNihTOCkNCjIxNTogICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCAqIHA7DQoyMTY6ICAgICAgICAgICAgICAgICAgICAgDQoyMTc6ICAgICAgICAgICAgICAgICAgICAgaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19pZCkpIHsNCkJGRDA5MkVDICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA5MkYwICA0MERBNzdFOCAgIEpBTFMgZ3Bpb19pc192YWxpZA0KQkZEMDkyRjIgIDBDMDA0MERBICAgQkdUWiBLMCwgMHhCRkQwQUFGNg0KQkZEMDkyRjQgICAgICAwQzAwICAgTk9QDQpCRkQwOTJGNiAgMDAwQzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOTMxMg0KMjE4OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHVpbnQzMl90ICopZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpOw0KQkZEMDkyRkEgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDkyRkUgIDREOTQ3N0U4ICAgSkFMUyBncGlvX3Bpbl9jdHJsX2FkZHINCkJGRDA5MzAwICAgICAgNEQ5NCAgIEFERElVIFQ0LCBUNCwgLTYNCkJGRDA5MzAyICAgICAgMEMwMCAgIE5PUA0KQkZEMDkzMDQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjE5OiAgICAgICAgICAgICAgICAgICAgICAgICAqcCA9IGN0cmxfdmFsOw0KQkZEMDkzMDggIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDkzMEMgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQ0KQkZEMDkzMTAgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyMjA6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjIxOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDkzMTIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5MzE0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA5MzE2ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA5MzE4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA5MzFBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5MzFDICAgICAgMEMwMCAgIE5PUA0KMjIyOiAgICAgICAgICAgICAgICAgDQoyMjM6ICAgICAgICAgICAgICAgICANCjIyNDogICAgICAgICAgICAgICAgIHZvaWQgR1BJT0NvbnRyb2xBbmRPcihlbnVtIGdwaW9faWRfdCBncGlvX2lkLCB1aW50MzJfdCBhbmRfbWFzaywgdWludDMyX3Qgb3JfbWFzaykNCjIyNTogICAgICAgICAgICAgICAgIHsNCkJGRDA4ODA0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwODgwNiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwODgwOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwODgwQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDg4MEMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KQkZEMDg4MTAgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQ0KQkZEMDg4MTQgIDAwMjhGOERFICAgU1cgQTIsIDQwKFM4KQ0KMjI2OiAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQzMl90ICogcDsNCjIyNzogICAgICAgICAgICAgICAgIA0KMjI4OiAgICAgICAgICAgICAgICAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGdwaW9faWQpKSB7DQpCRkQwODgxOCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpDQpCRkQwODgxQyAgNDBEQTc3RTggICBKQUxTIGdwaW9faXNfdmFsaWQNCkJGRDA4ODFFICAwQzAwNDBEQSAgIEJHVFogSzAsIDB4QkZEMEEwMjINCkJGRDA4ODIwICAgICAgMEMwMCAgIE5PUA0KQkZEMDg4MjIgIDAwMTM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg4NEMNCjIyOTogICAgICAgICAgICAgICAgICAgICAgICAgcCA9ICh2b2xhdGlsZSB1aW50MzJfdCAqKWdwaW9fcGluX2N0cmxfYWRkcihncGlvX2lkKTsNCkJGRDA4ODI2ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA4ODJBICA0RDk0NzdFOCAgIEpBTFMgZ3Bpb19waW5fY3RybF9hZGRyDQpCRkQwODgyQyAgICAgIDREOTQgICBBRERJVSBUNCwgVDQsIC02DQpCRkQwODgyRSAgICAgIDBDMDAgICBOT1ANCkJGRDA4ODMwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjIzMDogICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAoKnAgJiBhbmRfbWFzaykgfCBvcl9tYXNrOw0KQkZEMDg4MzQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDg4MzggICAgICA2OUEwICAgTFcgVjEsIDAoVjApDQpCRkQwODgzQSAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwODgzRSAgICAgIDQ0OUEgICBBTkQxNiBWMSwgVjANCkJGRDA4ODQwICAwMDI4RkM1RSAgIExXIFYwLCA0MChTOCkNCkJGRDA4ODQ0ICAgICAgNDREQSAgIE9SMTYgVjEsIFYwDQpCRkQwODg0NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODg0QSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjIzMTogICAgICAgICAgICAgICAgICAgICB9DQoyMzI6ICAgICAgICAgICAgICAgICB9DQpCRkQwODg0QyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDg4NEUgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDg4NTAgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDg4NTIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDg4NTQgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDg4NTYgICAgICAwQzAwICAgTk9QDQoyMzM6ICAgICAgICAgICAgICAgICANCjIzNDogICAgICAgICAgICAgICAgIA0KMjM1OiAgICAgICAgICAgICAgICAgLyoqDQoyMzY6ICAgICAgICAgICAgICAgICAgKiBHUElPUHJvcGVydHlTZXQgLSBQcm9ncmFtIHNwZWNpZmllZCBHUElPIFBpbiBjb25maWd1cmF0aW9uIA0KMjM3OiAgICAgICAgICAgICAgICAgICogaXRlbS4gDQoyMzg6ICAgICAgICAgICAgICAgICAgKiANCjIzOTogICAgICAgICAgICAgICAgICAqIEBhdXRob3Igc3dvcmxleSANCjI0MDogICAgICAgICAgICAgICAgICAqIA0KMjQxOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGdwaW9faWQgMC1iYXNlZCBHUElPIElEDQoyNDI6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19wcm9wIGVudW1lcmF0ZWQgR1BJTyBQcm9wZXJ0eShjb25maWd1cmF0aW9uIGl0ZW0pDQoyNDM6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gcHJvcF92YWwgbmV3IHByb3BlcnR5IHZhbHVlDQoyNDQ6ICAgICAgICAgICAgICAgICAgKi8NCjI0NTogICAgICAgICAgICAgICAgIHZvaWQgR1BJT1Byb3BlcnR5U2V0ICggZW51bSBncGlvX2lkX3QgZ3Bpb19pZCwgDQoyNDY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ3Bpb19wcm9wX3QgZ3Bpb19wcm9wLA0KMjQ3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwcm9wX3ZhbA0KMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KMjQ5OiAgICAgICAgICAgICAgICAgew0KQkZEMDRCOTggICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA0QjlBICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA0QjlDICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA0QjlFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwNEJBMCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwNEJBNCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQpCRkQwNEJBOCAgICAgIDBDNDYgICBNT1ZFIFYwLCBBMg0KQkZEMDRCQUEgIDAwMjgzODVFICAgU0ggVjAsIDQwKFM4KQ0KMjUwOiAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQxNl90ICogcDsNCjI1MTogICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBncF9jZmc7DQoyNTI6ICAgICAgICAgICAgICAgICAgIA0KMjUzOiAgICAgICAgICAgICAgICAgICAgIGdwX2NmZyA9IDB1Ow0KQkZEMDRCQUUgIDAwMTAzODFFICAgU0ggWkVSTywgMTYoUzgpDQoyNTQ6ICAgICAgICAgICAgICAgICANCjI1NTogICAgICAgICAgICAgICAgICAgICBpZiAoIGdwaW9faXNfdmFsaWQoZ3Bpb19pZCkgJiYgKCh1aW50MTZfdClncGlvX3Byb3AgPCAodWludDE2X3QpR1BJT19QUk9QX01BWCkgKQ0KQkZEMDRCQjIgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDRCQjYgIDQwREE3N0U4ICAgSkFMUyBncGlvX2lzX3ZhbGlkDQpCRkQwNEJCOCAgMEMwMDQwREEgICBCR1RaIEswLCAweEJGRDA2M0JDDQpCRkQwNEJCQSAgICAgIDBDMDAgICBOT1ANCkJGRDA0QkJDICAwMDUxNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA0QzYyDQpCRkQwNEJDMCAgMDAyNEZDNUUgICBMVyBWMCwgMzYoUzgpDQpCRkQwNEJDNCAgICAgIDJEMkYgICBBTkRJIFYwLCBWMCwgMHhGRkZGDQpCRkQwNEJDNiAgMDAwOUIwNDIgICBTTFRJVSBWMCwgVjAsIDkNCkJGRDA0QkNBICAwMDRBNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA0QzYyDQoyNTY6ICAgICAgICAgICAgICAgICAgICAgew0KMjU3OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHVpbnQxNl90ICopZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpOw0KQkZEMDRCQ0UgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDRCRDIgIDREOTQ3N0U4ICAgSkFMUyBncGlvX3Bpbl9jdHJsX2FkZHINCkJGRDA0QkQ0ICAgICAgNEQ5NCAgIEFERElVIFQ0LCBUNCwgLTYNCkJGRDA0QkQ2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDRCRDggIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KMjU4OiAgICAgICAgICAgICAgICAgICAgICAgICBncF9jZmcgPSAqcDsNCkJGRDA0QkRDICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA0QkUwICAgICAgMjkyMCAgIExIVSBWMCwgMChWMCkNCkJGRDA0QkUyICAwMDEwMzg1RSAgIFNIIFYwLCAxNihTOCkNCjI1OTogICAgICAgICAgICAgICAgICAgICAgICAgZ3BfY2ZnICY9IH4oZ3Bpb19jZmdfdGJsW2dwaW9fcHJvcF0uYml0X21hc2spOw0KQkZEMDRCRTYgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0QkU4ICBGQzdFQkZEMSAgIExEQzEgRjMwLCAtODk4KFMxKQ0KQkZEMDRCRUEgIDAwMjRGQzdFICAgTFcgVjEsIDM2KFM4KQ0KQkZEMDRCRUUgICAgICAyNUI0ICAgU0xMIFYxLCBWMSwgMg0KQkZEMDRCRjAgIDkyNzQzMDQyICAgQURESVUgVjAsIFYwLCAtMjgwNDQNCkJGRDA0QkYyICAwNTI2OTI3NCAgIFNMVEkgUzMsIFM0LCAxMzE4DQpCRkQwNEJGNCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA0QkY2ICAgICAgMjkyMCAgIExIVSBWMCwgMChWMCkNCkJGRDA0QkY4ICAzQjNDMDA0MiAgIFNFSCBWMCwgVjANCkJGRDA0QkZBICA0NDEyM0IzQyAgIFNIIFQ5LCAxNzQyNihHUCkNCkJGRDA0QkZDICAgICAgNDQxMiAgIE5PVDE2IFYwLCBWMA0KQkZEMDRCRkUgIDNCM0MwMDYyICAgU0VIIFYxLCBWMA0KQkZEMDRDMDAgIDNDNUUzQjNDICAgU0ggVDksIDE1NDU0KEdQKQ0KQkZEMDRDMDIgIDAwMTAzQzVFICAgTEggVjAsIDE2KFM4KQ0KQkZEMDRDMDYgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwNEMwOCAgM0IzQzAwNDIgICBTRUggVjAsIFYwDQpCRkQwNEMwQSAgMzg1RTNCM0MgICBTSCBUOSwgMTQ0MzAoR1ApDQpCRkQwNEMwQyAgMDAxMDM4NUUgICBTSCBWMCwgMTYoUzgpDQoyNjA6ICAgICAgICAgICAgICAgICAgICAgICAgIGdwX2NmZyB8PSAocHJvcF92YWwgPDwgZ3Bpb19jZmdfdGJsW2dwaW9fcHJvcF0uYml0X3BvcykgJiANCkJGRDA0QzEwICAwMDI4MzQ3RSAgIExIVSBWMSwgNDAoUzgpDQpCRkQwNEMxNCAgQkZEMTQxQTIgICBMVUkgVjAsIDB4QkZEMQ0KQkZEMDRDMTYgIEZDOUVCRkQxICAgTERDMSBGMzAsIC04NjYoUzEpDQpCRkQwNEMxOCAgMDAyNEZDOUUgICBMVyBBMCwgMzYoUzgpDQpCRkQwNEMxQyAgICAgIDI2NDQgICBTTEwgQTAsIEEwLCAyDQpCRkQwNEMxRSAgOTI3NDMwNDIgICBBRERJVSBWMCwgVjAsIC0yODA0NA0KQkZEMDRDMjAgIDA1Mjg5Mjc0ICAgU0xUSSBTMywgUzQsIDEzMjANCkJGRDA0QzIyICAgICAgMDUyOCAgIEFERFUgVjAsIEEwLCBWMA0KQkZEMDRDMjQgICAgICAwOTIyICAgTEJVIFYwLCAyKFYwKQ0KQkZEMDRDMjYgIDEwMTAwMDYyICAgU0xMViBWMCwgVjAsIFYxDQpCRkQwNEMyOCAgMDA2MjEwMTAgICBBRERJIFpFUk8sIFMwLCA5OA0KQkZEMDRDMkEgIDNCM0MwMDYyICAgU0VIIFYxLCBWMA0KQkZEMDRDMkMgIDQxQTIzQjNDICAgU0ggVDksIDE2ODAyKEdQKQ0KQkZEMDRDNDAgIDNCM0MwMDQyICAgU0VIIFYwLCBWMA0KQkZEMDRDNDIgIDQ0OTMzQjNDICAgU0ggVDksIDE3NTU1KEdQKQ0KQkZEMDRDNDQgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwNEM0NiAgM0IzQzAwNjIgICBTRUggVjEsIFYwDQpCRkQwNEM0OCAgM0M1RTNCM0MgICBTSCBUOSwgMTU0NTQoR1ApDQpCRkQwNEM0QSAgMDAxMDNDNUUgICBMSCBWMCwgMTYoUzgpDQpCRkQwNEM0RSAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQ0KQkZEMDRDNTAgIDNCM0MwMDQyICAgU0VIIFYwLCBWMA0KQkZEMDRDNTIgIDM4NUUzQjNDICAgU0ggVDksIDE0NDMwKEdQKQ0KQkZEMDRDNTQgIDAwMTAzODVFICAgU0ggVjAsIDE2KFM4KQ0KMjYxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bpb19jZmdfdGJsW2dwaW9fcHJvcF0uYml0X21hc2s7IA0KQkZEMDRDMkUgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA0QzMwICBGQzlFQkZEMSAgIExEQzEgRjMwLCAtODY2KFMxKQ0KQkZEMDRDMzIgIDAwMjRGQzlFICAgTFcgQTAsIDM2KFM4KQ0KQkZEMDRDMzYgICAgICAyNjQ0ICAgU0xMIEEwLCBBMCwgMg0KQkZEMDRDMzggIDkyNzQzMDQyICAgQURESVUgVjAsIFYwLCAtMjgwNDQNCkJGRDA0QzNBICAwNTI4OTI3NCAgIFNMVEkgUzMsIFM0LCAxMzIwDQpCRkQwNEMzQyAgICAgIDA1MjggICBBRERVIFYwLCBBMCwgVjANCkJGRDA0QzNFICAgICAgMjkyMCAgIExIVSBWMCwgMChWMCkNCjI2MjogICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSBncF9jZmc7DQpCRkQwNEM1OCAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwNEM1QyAgMDAxMDM0N0UgICBMSFUgVjEsIDE2KFM4KQ0KQkZEMDRDNjAgICAgICBBOUEwICAgU0ggVjEsIDAoVjApDQoyNjM6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjY0OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDRDNjIgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA0QzY0ICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA0QzY2ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA0QzY4ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA0QzZBICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA0QzZDICAgICAgMEMwMCAgIE5PUA0KMjY1OiAgICAgICAgICAgICAgICAgDQoyNjY6ICAgICAgICAgICAgICAgICANCjI2NzogICAgICAgICAgICAgICAgIC8qKg0KMjY4OiAgICAgICAgICAgICAgICAgICogR1BJT0dldFNsZXdSYXRlIC0gUmV0dXJuIEdQSU8gUGluIFNsZXcgUmF0ZQ0KMjY5OiAgICAgICAgICAgICAgICAgICogDQoyNzA6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoyNzE6ICAgICAgICAgICAgICAgICAgKiANCjI3MjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX2lkIDAtYmFzZWQgR1BJTyBJRA0KMjczOiAgICAgICAgICAgICAgICAgICogDQoyNzQ6ICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHVpbnQ4X3QgR1BJTyBQaW4gU2xldyBSYXRlOiAwKFNsb3cpIG9yIDEoRmFzdCkNCjI3NTogICAgICAgICAgICAgICAgICAqLw0KMjc2OiAgICAgICAgICAgICAgICAgdWludDhfdCBHUElPR2V0U2xld1JhdGUoIGVudW0gZ3Bpb19pZF90IGdwaW9faWQgKQ0KMjc3OiAgICAgICAgICAgICAgICAgew0KQkZEMDkwMjQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA5MDI2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA5MDI4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA5MDJBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOTAyQyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQoyNzg6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcjsNCjI3OTogICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNsZXc7DQoyODA6ICAgICAgICAgICAgICAgICAgICAgDQoyODE6ICAgICAgICAgICAgICAgICAgICAgYWRkciA9IGdwaW9faGFzX2Rydl9zdHIoZ3Bpb19pZCk7DQpCRkQwOTAzMCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpDQpCRkQwOTAzNCAgMzMyMjc3RTggICBKQUxTIGdwaW9faGFzX2Rydl9zdHINCkJGRDA5MDM2ICAwQzAwMzMyMiAgIEFERElVIFQ5LCBWMCwgMzA3Mg0KQkZEMDkwMzggICAgICAwQzAwICAgTk9QDQpCRkQwOTAzQSAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoyODI6ICAgICAgICAgICAgICAgICAgICAgaWYgKCAwdWwgIT0gYWRkciApDQpCRkQwOTAzRSAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwOTA0MiAgMDAwOTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOTA1OA0KMjgzOiAgICAgICAgICAgICAgICAgICAgIHsNCjI4NDogICAgICAgICAgICAgICAgICAgICAgICAgc2xldyA9ICgoKih2b2xhdGlsZSB1aW50OF90ICopYWRkcikgPj4gR1BJT19EUlZfU0xFV19CSVRQT1MpICYgMHgwMXU7DQpCRkQwOTA0NiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwOTA0QSAgICAgIDA5MjAgICBMQlUgVjAsIDAoVjApDQpCRkQwOTA0QyAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDkwNEUgICAgICAyRDIxICAgQU5ESSBWMCwgVjAsIDB4MQ0KQkZEMDkwNTAgIDAwMTAxODVFICAgU0IgVjAsIDE2KFM4KQ0KQkZEMDkwNTQgICAgICBDQzAzICAgQiAweEJGRDA5MDVDDQpCRkQwOTA1NiAgICAgIDBDMDAgICBOT1ANCjI4NTogICAgICAgICAgICAgICAgICAgICB9DQoyODY6ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KMjg3OiAgICAgICAgICAgICAgICAgICAgIHsNCjI4ODogICAgICAgICAgICAgICAgICAgICAgICAgc2xldyA9IDB1Ow0KQkZEMDkwNTggIDAwMTAxODFFICAgU0IgWkVSTywgMTYoUzgpDQoyODk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjkwOiAgICAgICAgICAgICAgICAgICAgIA0KMjkxOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzbGV3Ow0KQkZEMDkwNUMgIDAwMTAxNDVFICAgTEJVIFYwLCAxNihTOCkNCjI5MjogICAgICAgICAgICAgICAgIH0NCkJGRDA5MDYwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTA2MiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOTA2NCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOTA2NiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOTA2OCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTA2QSAgICAgIDBDMDAgICBOT1ANCjI5MzogICAgICAgICAgICAgICAgIA0KMjk0OiAgICAgICAgICAgICAgICAgDQoyOTU6ICAgICAgICAgICAgICAgICAvKioNCjI5NjogICAgICAgICAgICAgICAgICAqIEdQSU9TZXRTbGV3UmF0ZSAtIFByb2dyYW0gR1BJTyBQaW4ncyBTbGV3IFJhdGUNCjI5NzogICAgICAgICAgICAgICAgICAqIA0KMjk4OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjk5OiAgICAgICAgICAgICAgICAgICogDQozMDA6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQNCjMwMTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBzbGV3X3JhdGUgbmV3IHNsZXcgcmF0ZTogMChTbG93KSwgTm9uLXplcm8oRmFzdCkNCjMwMjogICAgICAgICAgICAgICAgICAqLw0KMzAzOiAgICAgICAgICAgICAgICAgdm9pZCBHUElPU2V0U2xld1JhdGUgKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkLA0KMzA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGdwaW9fc2xld19yYXRlX3Qgc2xld19yYXRlICkNCjMwNTogICAgICAgICAgICAgICAgIHsNCkJGRDA4NjAwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwODYwMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwODYwNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwODYwNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDg2MDggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KQkZEMDg2MEMgIDAwMjRGOEJFICAgU1cgQTEsIDM2KFM4KQ0KMzA2OiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHI7DQozMDc6ICAgICAgICAgICAgICAgICAgICAgDQozMDg6ICAgICAgICAgICAgICAgICAgICAgYWRkciA9IGdwaW9faGFzX2Rydl9zdHIoZ3Bpb19pZCApOw0KQkZEMDg2MTAgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDg2MTQgIDMzMjI3N0U4ICAgSkFMUyBncGlvX2hhc19kcnZfc3RyDQpCRkQwODYxNiAgMEMwMDMzMjIgICBBRERJVSBUOSwgVjAsIDMwNzINCkJGRDA4NjE4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDg2MUEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMzA5OiAgICAgICAgICAgICAgICAgICAgIGlmICggYWRkciApDQpCRkQwODYxRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODYyMiAgMDAxMjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODY0QQ0KMzEwOiAgICAgICAgICAgICAgICAgICAgIHsNCjMxMTogICAgICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1aW50OF90ICopYWRkciA9ICgqKHZvbGF0aWxlIHVpbnQ4X3QgKilhZGRyICYgDQpCRkQwODYyNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODYyQSAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwODYyRSAgICAgIDA5QjAgICBMQlUgVjEsIDAoVjEpDQpCRkQwODYzMCAgICAgIDJFM0QgICBBTkRJIEEwLCBWMSwgMHhGRg0KQkZEMDg2MzIgIEZGRkUzMDYwICAgQURESVUgVjEsIFpFUk8sIC0yDQpCRkQwODYzNCAgNDQ5Q0ZGRkUgICBMVyBSQSwgMTc1NjQoUzgpDQpCRkQwODYzNiAgICAgIDQ0OUMgICBBTkQxNiBWMSwgQTANCkJGRDA4NjM4ICAgICAgMkUzRCAgIEFOREkgQTAsIFYxLCAweEZGDQpCRkQwODYzQSAgMDAyNEZDN0UgICBMVyBWMSwgMzYoUzgpDQpCRkQwODYzRSAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDg2NDAgICAgICAyREIxICAgQU5ESSBWMSwgVjEsIDB4MQ0KQkZEMDg2NDIgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDA4NjQ0ICAgICAgNDREQyAgIE9SMTYgVjEsIEEwDQpCRkQwODY0NiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDg2NDggICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQozMTI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+KEdQSU9fRFJWX1NMRVdfTUFTSykpIHwgDQozMTM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHNsZXdfcmF0ZSA8PCAoR1BJT19EUlZfU0xFV19CSVRQT1MpKSAmIChHUElPX0RSVl9TTEVXX01BU0spKTsNCjMxNDogICAgICAgICAgICAgICAgICAgICB9DQozMTU6ICAgICAgICAgICAgICAgICB9DQpCRkQwODY0QSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDg2NEMgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDg2NEUgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDg2NTAgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDg2NTIgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDg2NTQgICAgICAwQzAwICAgTk9QDQozMTY6ICAgICAgICAgICAgICAgICANCjMxNzogICAgICAgICAgICAgICAgIA0KMzE4OiAgICAgICAgICAgICAgICAgLyoqDQozMTk6ICAgICAgICAgICAgICAgICAgKiBHUElPR2V0RHJpdmVTdHIgLSBHZXQgR1BJTyBQaW4ncyBEcml2ZSBTdHJlbmd0aCANCjMyMDogICAgICAgICAgICAgICAgICAqIA0KMzIxOiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMzIyOiAgICAgICAgICAgICAgICAgICogDQozMjM6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQNCjMyNDogICAgICAgICAgICAgICAgICAqIA0KMzI1OiAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IFBpbiBEcml2ZSBTdHJlbmd0aDogMD0ybUEsIDE9NG1BLCAyPThtQSwgDQozMjY6ICAgICAgICAgICAgICAgICAgKiAgICAgICAgIDM9MTJtQS4NCjMyNzogICAgICAgICAgICAgICAgICAqLw0KMzI4OiAgICAgICAgICAgICAgICAgdWludDhfdCBHUElPR2V0RHJpdmVTdHIgKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkICkNCjMyOTogICAgICAgICAgICAgICAgIHsNCkJGRDA5NTk0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwOTU5NiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwOTU5OCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwOTU5QSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDk1OUMgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KMzMwOiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFkZHI7DQozMzE6ICAgICAgICAgICAgICAgICAgICAgDQozMzI6ICAgICAgICAgICAgICAgICAgICAgYWRkciA9IGdwaW9faGFzX2Rydl9zdHIoZ3Bpb19pZCApOw0KQkZEMDk1QTAgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDk1QTQgIDMzMjI3N0U4ICAgSkFMUyBncGlvX2hhc19kcnZfc3RyDQpCRkQwOTVBNiAgMEMwMDMzMjIgICBBRERJVSBUOSwgVjAsIDMwNzINCkJGRDA5NUE4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDk1QUEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMzMzOiAgICAgICAgICAgICAgICAgICAgIGlmICggYWRkciApDQpCRkQwOTVBRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOTVCMiAgMDAwNjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOTVDMg0KMzM0OiAgICAgICAgICAgICAgICAgICAgIHsNCjMzNTogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoKih2b2xhdGlsZSB1aW50OF90ICopYWRkcikgPj4gR1BJT19EUlZfU1RSX0JJVFBPUykgJiAoR1BJT19EUlZfU1RSX01BU0spOw0KQkZEMDk1QjYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDk1QkEgICAgICAwOTIwICAgTEJVIFYwLCAwKFYwKQ0KQkZEMDk1QkMgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTw0KQkZEMDk1QkUgICAgICBDQzAyICAgQiAweEJGRDA5NUM0DQpCRkQwOTVDMCAgICAgIDBDMDAgICBOT1ANCjMzNjogICAgICAgICAgICAgICAgICAgICB9DQozMzc6ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KMzM4OiAgICAgICAgICAgICAgICAgICAgIHsNCjMzOTogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDB1Ow0KQkZEMDk1QzIgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTw0KMzQwOiAgICAgICAgICAgICAgICAgICAgIH0NCjM0MTogICAgICAgICAgICAgICAgIH0NCkJGRDA5NUM0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTVDNiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOTVDOCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOTVDQSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOTVDQyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTVDRSAgICAgIDBDMDAgICBOT1ANCjM0MjogICAgICAgICAgICAgICAgIA0KMzQzOiAgICAgICAgICAgICAgICAgDQozNDQ6ICAgICAgICAgICAgICAgICAvKioNCjM0NTogICAgICAgICAgICAgICAgICAqIEdQSU9TZXREcml2ZVN0ciAtIFByb2dyYW0gR1BJTyBQaW4ncyBEcml2ZSBTdHJlbmd0aA0KMzQ2OiAgICAgICAgICAgICAgICAgICogDQozNDc6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQozNDg6ICAgICAgICAgICAgICAgICAgKiANCjM0OTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX2lkIDAtYmFzZWQgR1BJTyBJRA0KMzUwOiAgICAgICAgICAgICAgICAgICogQHBhcmFtIGRydl9zdHIgZW51bWVyYXRlZCBkcml2ZSBzdHJlbmd0aDogMD0ybUEsIDE9NG1BLCANCjM1MTogICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgIDI9OG1BLCAzPTEybUENCjM1MjogICAgICAgICAgICAgICAgICAqLw0KMzUzOiAgICAgICAgICAgICAgICAgdm9pZCBHUElPU2V0RHJpdmVTdHIgKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkLA0KMzU0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGdwaW9fZHJ2X3N0cl90IGRydl9zdHIgKQ0KMzU1OiAgICAgICAgICAgICAgICAgew0KQkZEMDdENjQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA3RDY2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA3RDY4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA3RDZBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwN0Q2QyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwN0Q3MCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQozNTY6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcjsNCjM1NzogICAgICAgICAgICAgICAgICAgICB1aW50OF90IHI4Ow0KMzU4OiAgICAgICAgICAgICAgICAgICAgIA0KMzU5OiAgICAgICAgICAgICAgICAgICAgIGFkZHIgPSBncGlvX2hhc19kcnZfc3RyKGdwaW9faWQpOw0KQkZEMDdENzQgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDdENzggIDMzMjI3N0U4ICAgSkFMUyBncGlvX2hhc19kcnZfc3RyDQpCRkQwN0Q3QSAgMEMwMDMzMjIgICBBRERJVSBUOSwgVjAsIDMwNzINCkJGRDA3RDdDICAgICAgMEMwMCAgIE5PUA0KQkZEMDdEN0UgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMzYwOiAgICAgICAgICAgICAgICAgICAgIGlmICggYWRkciApDQpCRkQwN0Q4MiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwN0Q4NiAgMDAxQjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwN0RDMA0KMzYxOiAgICAgICAgICAgICAgICAgICAgIHsNCjM2MjogICAgICAgICAgICAgICAgICAgICAgICAgcjggPSAqKHZvbGF0aWxlIHVpbnQ4X3QgKilhZGRyICYgfihHUElPX0RSVl9TVFJfTUFTSyk7DQpCRkQwN0Q4QSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwN0Q4RSAgICAgIDA5MjAgICBMQlUgVjAsIDAoVjApDQpCRkQwN0Q5MCAgICAgIDJEQUQgICBBTkRJIFYxLCBWMCwgMHhGRg0KQkZEMDdEOTIgIEZGQ0YzMDQwICAgQURESVUgVjAsIFpFUk8sIC00OQ0KQkZEMDdEOTQgIDQ0OTNGRkNGICAgTFcgUzgsIDE3NTU1KFQ3KQ0KQkZEMDdEOTYgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwN0Q5OCAgMDAxNDE4NUUgICBTQiBWMCwgMjAoUzgpDQozNjM6ICAgICAgICAgICAgICAgICAgICAgICAgIHI4ICs9ICgoZHJ2X3N0ciA8PCBHUElPX0RSVl9TVFJfQklUUE9TKSAmIEdQSU9fRFJWX1NUUl9NQVNLKTsNCkJGRDA3RDlDICAwMDI0RkM1RSAgIExXIFYwLCAzNihTOCkNCkJGRDA3REEwICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGDQpCRkQwN0RBMiAgICAgIDI1MjggICBTTEwgVjAsIFYwLCA0DQpCRkQwN0RBNCAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDdEQTYgIDAwMzBEMDQyICAgQU5ESSBWMCwgVjAsIDQ4DQpCRkQwN0RBQSAgICAgIDJEQUQgICBBTkRJIFYxLCBWMCwgMHhGRg0KQkZEMDdEQUMgIDAwMTQxNDVFICAgTEJVIFYwLCAyMChTOCkNCkJGRDA3REIwICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDdEQjIgIDAwMTQxODVFICAgU0IgVjAsIDIwKFM4KQ0KMzY0OiAgICAgICAgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHVpbnQ4X3QgKilhZGRyID0gcjg7DQpCRkQwN0RCNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwN0RCQSAgMDAxNDE0N0UgICBMQlUgVjEsIDIwKFM4KQ0KQkZEMDdEQkUgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQozNjU6ICAgICAgICAgICAgICAgICAgICAgfQ0KMzY2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDdEQzAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3REMyICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA3REM0ICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA3REM2ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3REM4ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA3RENBICAgICAgMEMwMCAgIE5PUA0KMzY3OiAgICAgICAgICAgICAgICAgDQozNjg6ICAgICAgICAgICAgICAgICANCjM2OTogICAgICAgICAgICAgICAgIC8qKg0KMzcwOiAgICAgICAgICAgICAgICAgICogR1BJT0dldERyaXZlU3RyQW5kU2xldyAtIFJldHVybiBjb21iaW5lZCB2YWx1ZSByZXByZXNlbnRpbmcgDQozNzE6ICAgICAgICAgICAgICAgICAgKiBEcml2ZSBTdHJlbmd0aCBhbmQgU2xldyBSYXRlLiANCjM3MjogICAgICAgICAgICAgICAgICAqIA0KMzczOiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMzc0OiAgICAgICAgICAgICAgICAgICogDQozNzU6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQNCjM3NjogICAgICAgICAgICAgICAgICAqIA0KMzc3OiAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IGJpdFswXSA9IFNsZXcgUmF0ZSwgYml0c1szOjFdPTAoUmVzZXJ2ZWQpLCANCjM3ODogICAgICAgICAgICAgICAgICAqICAgICAgICAgYml0c1s1OjRdPURyaXZlIFN0cmVuZ3RoLCBiaXRzWzc6Nl09MChSZXNlcnZlZCkNCjM3OTogICAgICAgICAgICAgICAgICAqLw0KMzgwOiAgICAgICAgICAgICAgICAgdWludDhfdCBHUElPR2V0RHJpdmVTdHJBbmRTbGV3ICggZW51bSBncGlvX2lkX3QgZ3Bpb19pZCApDQozODE6ICAgICAgICAgICAgICAgICB7DQpCRkQwOTVEMCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDk1RDIgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDk1RDQgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDk1RDYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5NUQ4ICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCjM4MjogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhZGRyOw0KMzgzOiAgICAgICAgICAgICAgICAgICAgIA0KMzg0OiAgICAgICAgICAgICAgICAgICAgIGFkZHIgPSBncGlvX2hhc19kcnZfc3RyKGdwaW9faWQgKTsNCkJGRDA5NURDICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA5NUUwICAzMzIyNzdFOCAgIEpBTFMgZ3Bpb19oYXNfZHJ2X3N0cg0KQkZEMDk1RTIgIDBDMDAzMzIyICAgQURESVUgVDksIFYwLCAzMDcyDQpCRkQwOTVFNCAgICAgIDBDMDAgICBOT1ANCkJGRDA5NUU2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjM4NTogICAgICAgICAgICAgICAgICAgICBpZiAoIGFkZHIgKQ0KQkZEMDk1RUEgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDk1RUUgIDAwMDY0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDk1RkUNCjM4NjogICAgICAgICAgICAgICAgICAgICB7DQozODc6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKih2b2xhdGlsZSB1aW50OF90ICopYWRkcik7DQpCRkQwOTVGMiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOTVGNiAgICAgIDA5MjAgICBMQlUgVjAsIDAoVjApDQpCRkQwOTVGOCAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDk1RkEgICAgICBDQzAyICAgQiAweEJGRDA5NjAwDQpCRkQwOTVGQyAgICAgIDBDMDAgICBOT1ANCjM4ODogICAgICAgICAgICAgICAgICAgICB9DQozODk6ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KMzkwOiAgICAgICAgICAgICAgICAgICAgIHsNCjM5MTogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDB1Ow0KQkZEMDk1RkUgICAgICAwQzQwICAgTU9WRSBWMCwgWkVSTw0KMzkyOiAgICAgICAgICAgICAgICAgICAgIH0NCjM5MzogICAgICAgICAgICAgICAgIH0NCkJGRDA5NjAwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTYwMiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOTYwNCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOTYwNiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOTYwOCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTYwQSAgICAgIDBDMDAgICBOT1ANCjM5NDogICAgICAgICAgICAgICAgIA0KMzk1OiAgICAgICAgICAgICAgICAgDQozOTY6ICAgICAgICAgICAgICAgICAvKioNCjM5NzogICAgICAgICAgICAgICAgICAqIEdQSU9TZXREcml2ZVN0ckFuZFNsZXcgLSBQcm9ncmFtIEdQSU8gUGluJ3MgZHJpdmUgc3RyZW5ndGggDQozOTg6ICAgICAgICAgICAgICAgICAgKiBhbmQgc2xldyByYXRlLiANCjM5OTogICAgICAgICAgICAgICAgICAqIA0KNDAwOiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KNDAxOiAgICAgICAgICAgICAgICAgICogDQo0MDI6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQNCjQwMzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBkcnZfYW5kX3NsZXcgYml0WzBdID0gU2xldyBSYXRlLCBiaXRzWzM6MV09MChSZXNlcnZlZCksIA0KNDA0OiAgICAgICAgICAgICAgICAgICogICAgICAgICBiaXRzWzU6NF09RHJpdmUgU3RyZW5ndGgsIGJpdHNbNzo2XT0wKFJlc2VydmVkKQ0KNDA1OiAgICAgICAgICAgICAgICAgICovDQo0MDY6ICAgICAgICAgICAgICAgICB2b2lkIEdQSU9TZXREcml2ZVN0ckFuZFNsZXcgKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkLA0KNDA3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkcnZfYW5kX3NsZXcgKQ0KNDA4OiAgICAgICAgICAgICAgICAgew0KQkZEMDgwMkMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4MDJFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4MDMwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4MDMyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwODAzNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwODAzNiAgMEM0NTAwMjAgICBDTVAuTFQuUEggQVQsIFpFUk8NCkJGRDA4MDM4ICAgICAgMEM0NSAgIE1PVkUgVjAsIEExDQpCRkQwODAzQSAgMDAyNDE4NUUgICBTQiBWMCwgMzYoUzgpDQo0MDk6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcjsNCjQxMDogICAgICAgICAgICAgICAgICAgICB1aW50OF90IHI4Ow0KNDExOiAgICAgICAgICAgICAgICAgICAgIA0KNDEyOiAgICAgICAgICAgICAgICAgICAgIGFkZHIgPSBncGlvX2hhc19kcnZfc3RyKGdwaW9faWQpOw0KQkZEMDgwM0UgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDgwNDIgIDMzMjI3N0U4ICAgSkFMUyBncGlvX2hhc19kcnZfc3RyDQpCRkQwODA0NCAgMEMwMDMzMjIgICBBRERJVSBUOSwgVjAsIDMwNzINCkJGRDA4MDQ2ICAgICAgMEMwMCAgIE5PUA0KQkZEMDgwNDggIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KNDEzOiAgICAgICAgICAgICAgICAgICAgIGlmICggYWRkciApDQpCRkQwODA0QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODA1MCAgMDAxODQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODA4NA0KNDE0OiAgICAgICAgICAgICAgICAgICAgIHsNCjQxNTogICAgICAgICAgICAgICAgICAgICAgICAgcjggPSAqKHZvbGF0aWxlIHVpbnQ4X3QgKilhZGRyICYgfihHUElPX0RSVl9TTEVXX01BU0sgKyBHUElPX0RSVl9TVFJfTUFTSyk7DQpCRkQwODA1NCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODA1OCAgICAgIDA5MjAgICBMQlUgVjAsIDAoVjApDQpCRkQwODA1QSAgICAgIDJEQUQgICBBTkRJIFYxLCBWMCwgMHhGRg0KQkZEMDgwNUMgIEZGQ0UzMDQwICAgQURESVUgVjAsIFpFUk8sIC01MA0KQkZEMDgwNUUgIDQ0OTNGRkNFICAgTFcgUzgsIDE3NTU1KFQ2KQ0KQkZEMDgwNjAgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwODA2MiAgMDAxNDE4NUUgICBTQiBWMCwgMjAoUzgpDQo0MTY6ICAgICAgICAgICAgICAgICAgICAgICAgIHI4IHw9IChkcnZfYW5kX3NsZXcgJiAoR1BJT19EUlZfU0xFV19NQVNLICsgR1BJT19EUlZfU1RSX01BU0spKTsNCkJGRDA4MDY2ICAwMDI0MTQ1RSAgIExCVSBWMCwgMzYoUzgpDQpCRkQwODA2QSAgMDAzMUQwNDIgICBBTkRJIFYwLCBWMCwgNDkNCkJGRDA4MDZFICAgICAgMkRBRCAgIEFOREkgVjEsIFYwLCAweEZGDQpCRkQwODA3MCAgMDAxNDE0NUUgICBMQlUgVjAsIDIwKFM4KQ0KQkZEMDgwNzQgICAgICA0NEQzICAgT1IxNiBWMCwgVjENCkJGRDA4MDc2ICAwMDE0MTg1RSAgIFNCIFYwLCAyMChTOCkNCjQxNzogICAgICAgICAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1aW50OF90ICopYWRkciA9IHI4Ow0KQkZEMDgwN0EgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDgwN0UgIDAwMTQxNDdFICAgTEJVIFYxLCAyMChTOCkNCkJGRDA4MDgyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KNDE4OiAgICAgICAgICAgICAgICAgICAgIH0NCjQxOTogICAgICAgICAgICAgICAgIH0NCkJGRDA4MDg0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwODA4NiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwODA4OCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwODA4QSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwODA4QyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwODA4RSAgICAgIDBDMDAgICBOT1ANCjQyMDogICAgICAgICAgICAgICAgIA0KNDIxOiAgICAgICAgICAgICAgICAgDQo0MjI6ICAgICAgICAgICAgICAgICAvKioNCjQyMzogICAgICAgICAgICAgICAgICAqIEdQSU9TZXRPdXRwdXQgLSBQcm9ncmFtIEdQSU8gUGluJ3Mgb3V0cHV0IHN0YXRlIHVzaW5nIFBpbiANCjQyNDogICAgICAgICAgICAgICAgICAqIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKG5vdCBwYXJhbGxlbCBvdXRwdXQgcmVnaXN0ZXIpLiANCjQyNTogICAgICAgICAgICAgICAgICAqIA0KNDI2OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KNDI3OiAgICAgICAgICAgICAgICAgICogDQo0Mjg6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gZ3Bpb19pZCAwLWJhc2VkIEdQSU8gSUQNCjQyOTogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX3N0YXRlIHBpbiBzdGF0ZTogYWN0dWFsIHBpbiBzdGF0ZSBhdCBwYWQgd2lsbCANCjQzMDogICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgIGRlcGVuZCB1cG9uIEdQSU8gT3V0cHV0IGludmVydA0KNDMxOiAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi4NCjQzMjogICAgICAgICAgICAgICAgICAqIEBub3RlIHBlZm9ybXMgYSBieXRlIHdpZGUgd3JpdGUgdG8gYnl0ZSBvZmZzZXQgMiBvZiB0aGUgR1BJTyANCjQzMzogICAgICAgICAgICAgICAgICAqICAgICAgIFBpbidzIDMyLWJpdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiBObw0KNDM0OiAgICAgICAgICAgICAgICAgICogICAgICAgcmVhZC1tb2RpZnktd3JpdGUuDQo0MzU6ICAgICAgICAgICAgICAgICAgKi8NCjQzNjogICAgICAgICAgICAgICAgIHZvaWQgR1BJT1NldE91dHB1dCAoIGVudW0gZ3Bpb19pZF90IGdwaW9faWQsIA0KNDM3OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBncGlvX3N0YXRlDQo0Mzg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQo0Mzk6ICAgICAgICAgICAgICAgICB7DQpCRkQwODY1OCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDg2NUEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDg2NUMgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDg2NUUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4NjYwICAwMDIwRjg5RSAgIFNXIEEwLCAzMihTOCkNCkJGRDA4NjYyICAwQzQ1MDAyMCAgIENNUC5MVC5QSCBBVCwgWkVSTw0KQkZEMDg2NjQgICAgICAwQzQ1ICAgTU9WRSBWMCwgQTENCkJGRDA4NjY2ICAwMDI0MTg1RSAgIFNCIFYwLCAzNihTOCkNCjQ0MDogICAgICAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50OF90ICogcDsNCjQ0MTogICAgICAgICAgICAgICAgICAgICANCjQ0MjogICAgICAgICAgICAgICAgICAgICBpZiAoIGdwaW9faXNfdmFsaWQoZ3Bpb19pZCkgKQ0KQkZEMDg2NkEgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDg2NkUgIDQwREE3N0U4ICAgSkFMUyBncGlvX2lzX3ZhbGlkDQpCRkQwODY3MCAgMEMwMDQwREEgICBCR1RaIEswLCAweEJGRDA5RTc0DQpCRkQwODY3MiAgICAgIDBDMDAgICBOT1ANCkJGRDA4Njc0ICAwMDE1NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4NkEyDQo0NDM6ICAgICAgICAgICAgICAgICAgICAgew0KNDQ0OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHVpbnQ4X3QgKikoZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpICsgMnVsKTsNCkJGRDA4Njc4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA4NjdDICA0RDk0NzdFOCAgIEpBTFMgZ3Bpb19waW5fY3RybF9hZGRyDQpCRkQwODY3RSAgICAgIDREOTQgICBBRERJVSBUNCwgVDQsIC02DQpCRkQwODY4MCAgICAgIDBDMDAgICBOT1ANCkJGRDA4NjgyICAgICAgNEM0NCAgIEFERElVIFYwLCBWMCwgMg0KQkZEMDg2ODQgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KNDQ1OiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3Bpb19zdGF0ZSkgew0KQkZEMDg2ODggIDAwMjQxNDVFICAgTEJVIFYwLCAzNihTOCkNCkJGRDA4NjhDICAwMDA2NDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4NjlDDQo0NDY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcCA9IDB4MDF1Ow0KQkZEMDg2OTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDg2OTQgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDA4Njk2ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDg2OTggICAgICBDQzA0ICAgQiAweEJGRDA4NkEyDQpCRkQwODY5QSAgICAgIDBDMDAgICBOT1ANCjQ0NzogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCjQ0ODogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwID0gMHU7DQpCRkQwODY5QyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODZBMCAgICAgIDg4MjAgICBTQiBTMCwgMChWMCkNCjQ0OTogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KNDUwOiAgICAgICAgICAgICAgICAgICAgIH0NCjQ1MTogICAgICAgICAgICAgICAgIH0NCkJGRDA4NkEyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwODZBNCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwODZBNiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwODZBOCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwODZBQSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwODZBQyAgICAgIDBDMDAgICBOT1ANCjQ1MjogICAgICAgICAgICAgICAgIA0KNDUzOiAgICAgICAgICAgICAgICAgDQo0NTQ6ICAgICAgICAgICAgICAgICB2b2lkIEdQSU9Ub2dnbGVPdXRwdXQgKCBlbnVtIGdwaW9faWRfdCBncGlvX2lkICkNCjQ1NTogICAgICAgICAgICAgICAgIHsNCkJGRDA4QzVDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwOEM1RSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwOEM2MCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwOEM2MiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDhDNjQgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KNDU2OiAgICAgICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVpbnQ4X3QgKiBwOw0KNDU3OiAgICAgICAgICAgICAgICAgDQo0NTg6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBncGlvX2lzX3ZhbGlkKGdwaW9faWQpICkNCkJGRDA4QzY4ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA4QzZDICA0MERBNzdFOCAgIEpBTFMgZ3Bpb19pc192YWxpZA0KQkZEMDhDNkUgIDBDMDA0MERBICAgQkdUWiBLMCwgMHhCRkQwQTQ3Mg0KQkZEMDhDNzAgICAgICAwQzAwICAgTk9QDQpCRkQwOEM3MiAgMDAxMjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOEM5QQ0KNDU5OiAgICAgICAgICAgICAgICAgICAgIHsNCjQ2MDogICAgICAgICAgICAgICAgICAgICAgICAgcCA9ICh2b2xhdGlsZSB1aW50OF90ICopKGdwaW9fcGluX2N0cmxfYWRkcihncGlvX2lkKSArIDJ1bCk7DQpCRkQwOEM3NiAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpDQpCRkQwOEM3QSAgNEQ5NDc3RTggICBKQUxTIGdwaW9fcGluX2N0cmxfYWRkcg0KQkZEMDhDN0MgICAgICA0RDk0ICAgQURESVUgVDQsIFQ0LCAtNg0KQkZEMDhDN0UgICAgICAwQzAwICAgTk9QDQpCRkQwOEM4MCAgICAgIDRDNDQgICBBRERJVSBWMCwgVjAsIDINCkJGRDA4QzgyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjQ2MTogICAgICAgICAgICAgICAgICAgICAgICAgKnAgXj0gMHgwMXU7DQpCRkQwOEM4NiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOEM4QSAgICAgIDA5MjAgICBMQlUgVjAsIDAoVjApDQpCRkQwOEM4QyAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDhDOEUgIDAwMDE3MDQyICAgWE9SSSBWMCwgVjAsIDENCkJGRDA4QzkyICAgICAgMkRBRCAgIEFOREkgVjEsIFYwLCAweEZGDQpCRkQwOEM5NCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOEM5OCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCjQ2MjogICAgICAgICAgICAgICAgICAgICB9DQo0NjM6ICAgICAgICAgICAgICAgICB9DQpCRkQwOEM5QSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDhDOUMgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDhDOUUgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDhDQTAgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDhDQTIgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDhDQTQgICAgICAwQzAwICAgTk9QDQo0NjQ6ICAgICAgICAgICAgICAgICANCjQ2NTogICAgICAgICAgICAgICAgIA0KNDY2OiAgICAgICAgICAgICAgICAgLyoqDQo0Njc6ICAgICAgICAgICAgICAgICAgKiBHUElPUmVhZFBpbiAtIFJlYWQgR1BJTyBQaW4ncyBQYWQgSW5wdXQgZnJvbSBjb25maWd1cmF0aW9uIA0KNDY4OiAgICAgICAgICAgICAgICAgICogcmVnaXN0ZXIuIA0KNDY5OiAgICAgICAgICAgICAgICAgICogDQo0NzA6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQo0NzE6ICAgICAgICAgICAgICAgICAgKiANCjQ3MjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBncGlvX2lkIDAtYmFzZWQgR1BJTyBJRC4NCjQ3MzogICAgICAgICAgICAgICAgICAqIA0KNDc0OiAgICAgICAgICAgICAgICAgICogQHJldHVybiB1aW50OF90IDAgb3IgMSBkZXBlbmRpbmcgdXBvbiB0aGUgc3RhdGUgb2YgdGhlIEdQSU8gDQo0NzU6ICAgICAgICAgICAgICAgICAgKiAgICAgICAgIHBhZC4NCjQ3NjogICAgICAgICAgICAgICAgICAqIEBub3RlIHBlcmZvcm1zIGEgYnl0ZSByZWFkIG9mIG9mZnNldCAzIG9mIHRoZSBHUElPIFBpbidzIA0KNDc3OiAgICAgICAgICAgICAgICAgICogICAgICAgMzItYml0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo0Nzg6ICAgICAgICAgICAgICAgICAgKi8NCjQ3OTogICAgICAgICAgICAgICAgIHVpbnQ4X3QgR1BJT1JlYWRQaW4oIGVudW0gZ3Bpb19pZF90IGdwaW9faWQgKQ0KNDgwOiAgICAgICAgICAgICAgICAgew0KQkZEMDk2MEMgICAgICA0RkY1ICAgQURESVUgU1AsIFNQLCAtMjQNCkJGRDA5NjBFICAgICAgQ0JFNSAgIFNXIFJBLCAyMChTUCkNCkJGRDA5NjEwICAgICAgQ0JDNCAgIFNXIFM4LCAxNihTUCkNCkJGRDA5NjEyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOTYxNCAgMDAxOEY4OUUgICBTVyBBMCwgMjQoUzgpDQo0ODE6ICAgICAgICAgICAgICAgICAgICAgaWYgKCBncGlvX2lzX3ZhbGlkKGdwaW9faWQpICkNCkJGRDA5NjE4ICAwMDE4RkM5RSAgIExXIEEwLCAyNChTOCkNCkJGRDA5NjFDICA0MERBNzdFOCAgIEpBTFMgZ3Bpb19pc192YWxpZA0KQkZEMDk2MUUgIDBDMDA0MERBICAgQkdUWiBLMCwgMHhCRkQwQUUyMg0KQkZEMDk2MjAgICAgICAwQzAwICAgTk9QDQpCRkQwOTYyMiAgMDAwQTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwOTYzQQ0KNDgyOiAgICAgICAgICAgICAgICAgICAgIHsNCjQ4MzogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICooKHZvbGF0aWxlIHVpbnQ4X3QgKikoZ3Bpb19waW5fY3RybF9hZGRyKGdwaW9faWQpICsgM3VsKSk7DQpCRkQwOTYyNiAgMDAxOEZDOUUgICBMVyBBMCwgMjQoUzgpDQpCRkQwOTYyQSAgNEQ5NDc3RTggICBKQUxTIGdwaW9fcGluX2N0cmxfYWRkcg0KQkZEMDk2MkMgICAgICA0RDk0ICAgQURESVUgVDQsIFQ0LCAtNg0KQkZEMDk2MkUgICAgICAwQzAwICAgTk9QDQpCRkQwOTYzMCAgICAgIDRDNDYgICBBRERJVSBWMCwgVjAsIDMNCkJGRDA5NjMyICAgICAgMDkyMCAgIExCVSBWMCwgMChWMCkNCkJGRDA5NjM0ICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGDQpCRkQwOTYzNiAgICAgIENDMDIgICBCIDB4QkZEMDk2M0MNCkJGRDA5NjM4ICAgICAgMEMwMCAgIE5PUA0KNDg0OiAgICAgICAgICAgICAgICAgICAgIH0gDQo0ODU6ICAgICAgICAgICAgICAgICAgICAgZWxzZSANCjQ4NjogICAgICAgICAgICAgICAgICAgICB7DQo0ODc6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwdTsNCkJGRDA5NjNBICAgICAgMEM0MCAgIE1PVkUgVjAsIFpFUk8NCjQ4ODogICAgICAgICAgICAgICAgICAgICB9DQo0ODk6ICAgICAgICAgICAgICAgICB9DQpCRkQwOTYzQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDk2M0UgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQ0KQkZEMDk2NDAgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQ0KQkZEMDk2NDIgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNA0KQkZEMDk2NDQgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDk2NDYgICAgICAwQzAwICAgTk9QDQo0OTA6ICAgICAgICAgICAgICAgICANCjQ5MTogICAgICAgICAgICAgICAgIA0KNDkyOiAgICAgICAgICAgICAgICAgLyoqIEdQSU9QaW5Mb2NrIC0gTG9jayBzcGVjaWZpZWQgR1BJTydzIGNvbnRyb2wgcmVnaXN0ZXIuDQo0OTM6ICAgICAgICAgICAgICAgICAgKiAgQHBhcmFtIGVudW0gZ3Bpb19pZF90IHplcm8gYmFzZWQgR1BJTyBJRA0KNDk0OiAgICAgICAgICAgICAgICAgICogIEBub3RlIExvY2sgYml0IGlzIG9ubHkgY2xlYXJlZCBvbiBQT1IuIExvY2sgcmVnaXN0ZXJzDQo0OTU6ICAgICAgICAgICAgICAgICAgKiAgYXJlIGluIHJldmVyc2Ugb3JkZXIsIGZpcnN0IHJlZ2lzdGVyIGlzIGF0IHRvcCBhZGRyZXNzLg0KNDk2OiAgICAgICAgICAgICAgICAgICogIEdQSU9fTE9DS19CQVNFIGRlZmluZWQgdG8gdG9wKGZpcnN0KSByZWdpc3RlciBhZGRyZXNzLg0KNDk3OiAgICAgICAgICAgICAgICAgICogICovIA0KNDk4OiAgICAgICAgICAgICAgICAgdm9pZCBHUElPUGluTG9jayhlbnVtIGdwaW9faWRfdCBncGlvX2lkKQ0KNDk5OiAgICAgICAgICAgICAgICAgew0KQkZEMDdBREMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA3QURFICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA3QUUwICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA3QUUyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwN0FFNCAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQo1MDA6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYWRkcjsNCjUwMTogICAgICAgICAgICAgICAgICAgICB1aW50OF90IGJhbmssIGJpdHBvczsNCjUwMjogICAgICAgICAgICAgICAgIA0KNTAzOiAgICAgICAgICAgICAgICAgICAgIGlmIChncGlvX2lzX3ZhbGlkKGdwaW9faWQpKSB7DQpCRkQwN0FFOCAgMDAyMEZDOUUgICBMVyBBMCwgMzIoUzgpDQpCRkQwN0FFQyAgNDBEQTc3RTggICBKQUxTIGdwaW9faXNfdmFsaWQNCkJGRDA3QUVFICAwQzAwNDBEQSAgIEJHVFogSzAsIDB4QkZEMDkyRjINCkJGRDA3QUYwICAgICAgMEMwMCAgIE5PUA0KQkZEMDdBRjIgIDAwMjQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDdCM0UNCjUwNDogICAgICAgICAgICAgICAgICAgICAgICAgYmFuayA9IGdwaW9fYmFua19udW0oZ3Bpb19pZCk7ICAvLyAwIC0gNA0KQkZEMDdBRjYgIDAwMjBGQzlFICAgTFcgQTAsIDMyKFM4KQ0KQkZEMDdBRkEgIDRFOTY3N0U4ICAgSkFMUyBncGlvX2JhbmtfbnVtDQpCRkQwN0FGQyAgICAgIDRFOTYgICBBRERJVSBTNCwgUzQsIC01DQpCRkQwN0FGRSAgICAgIDBDMDAgICBOT1ANCkJGRDA3QjAwICAwMDEwMTg1RSAgIFNCIFYwLCAxNihTOCkNCjUwNTogICAgICAgICAgICAgICAgICAgICAgICAgYml0cG9zID0gZ3Bpb19waW5fbnVtKGdwaW9faWQpOyAvLyAwIC0gMzENCkJGRDA3QjA0ICAwMDIwRkM5RSAgIExXIEEwLCAzMihTOCkNCkJGRDA3QjA4ICA0RUE2NzdFOCAgIEpBTFMgZ3Bpb19waW5fbnVtDQpCRkQwN0IwQSAgICAgIDRFQTYgICBBRERJVSBTNSwgUzUsIDMNCkJGRDA3QjBDICAgICAgMEMwMCAgIE5PUA0KQkZEMDdCMEUgIDAwMTExODVFICAgU0IgVjAsIDE3KFM4KQ0KNTA2OiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyID0gKHVpbnQzMl90KShHUElPX0xPQ0tfQkFTRSkgLSAoYmFuayA8PCAyKTsNCkJGRDA3QjEyICAwMDEwMTQ1RSAgIExCVSBWMCwgMTYoUzgpDQpCRkQwN0IxNiAgICAgIDI1MjQgICBTTEwgVjAsIFYwLCAyDQpCRkQwN0IxOCAgQTAwODQxQTMgICBMVUkgVjEsIDB4QTAwOA0KQkZEMDdCMUMgIDEzRjA1MDYzICAgT1JJIFYxLCBWMSwgNTEwNA0KQkZEMDdCMUUgIDA1MjcxM0YwICAgQURESSBSQSwgUzAsIDEzMTkNCkJGRDA3QjIwICAgICAgMDUyNyAgIFNVQlUgVjAsIFYxLCBWMA0KQkZEMDdCMjIgIDAwMTRGODVFICAgU1cgVjAsIDIwKFM4KQ0KNTA3OiAgICAgICAgICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHVpbnQzMl90ICopYWRkciB8PSAoMXVsIDw8IGJpdHBvcyk7DQpCRkQwN0IyNiAgMDAxNEZDNUUgICBMVyBWMCwgMjAoUzgpDQpCRkQwN0IyQSAgMDAxNEZDN0UgICBMVyBWMSwgMjAoUzgpDQpCRkQwN0IyRSAgICAgIDZBMzAgICBMVyBBMCwgMChWMSkNCkJGRDA3QjMwICAwMDExMTQ3RSAgIExCVSBWMSwgMTcoUzgpDQpCRkQwN0IzNCAgICAgIEVFODEgICBMSSBBMSwgMQ0KQkZEMDdCMzYgIDE4MTAwMEEzICAgU0xMViBWMSwgVjEsIEExDQpCRkQwN0IzOCAgNDREQzE4MTAgICBTQiBaRVJPLCAxNzYyOChTMCkNCkJGRDA3QjNBICAgICAgNDREQyAgIE9SMTYgVjEsIEEwDQpCRkQwN0IzQyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjUwODogICAgICAgICAgICAgICAgICAgICB9IA0KNTA5OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDdCM0UgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3QjQwICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA3QjQyICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA3QjQ0ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3QjQ2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA3QjQ4ICAgICAgMEMwMCAgIE5PUA0KNTEwOiAgICAgICAgICAgICAgICAgDQo1MTE6ICAgICAgICAgICAgICAgICANCjUxMjogICAgICAgICAgICAgICAgIC8qIGVuZCBtZWMxNHh4X2dwaW8uYyAqLw0KNTEzOiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjUxNDogICAgICAgICAgICAgICAgICAqLw0KNTE1OiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L21lYzE0eHhfYmJsZWQuYyAgLS0tLS0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiBDb3B5cmlnaHQgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgbWVjMTR4eF9iYmxlZC5jDQoyMjogICAgICAgICAgICAgICAgICAgKk1FQzE0eHggQnJlYXRpbmctQmxpbmtpbmcgTEVEIGRlZmluaXRpb25zDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBQZXJpcGhlcmFscyBCQkxFRA0KMjU6ICAgICAgICAgICAgICAgICAgICovDQoyNjogICAgICAgICAgICAgICAgICANCjI3OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjI4OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9wY3IuaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfYmJsZWQuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9iYmxlZC5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICAjaWZkZWYgX19jcGx1c3BsdXMNCjM2OiAgICAgICAgICAgICAgICAgIGV4dGVybiAiQyIgew0KMzc6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgIA0KNDA6ICAgICAgICAgICAgICAgICAgc3RhdGljIHVpbnQzMl90IGxlZF9hZGRyKHVpbnQ4X3QgbGVkX2lkKSANCjQxOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA5NDIwICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5NDIyICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDk0MjQgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5NDI2ICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwOTQyOCAgMDAwODE4NUUgICBTQiBWMCwgOChTOCkNCjQyOiAgICAgICAgICAgICAgICAgICAgICBpZiAobGVkX2lkIDwgKExFRF9JRF9NQVgpICkNCkJGRDA5NDJDICAwMDA4MTQ1RSAgIExCVSBWMCwgOChTOCkNCkJGRDA5NDMwICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMw0KQkZEMDk0MzQgIDAwMEI0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDk0NEUNCjQzOiAgICAgICAgICAgICAgICAgICAgICB7DQo0NDogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKExFRDBfQkFTRSkgKyAobGVkX2lkIDw8IDgpKTsNCkJGRDA5NDM4ICAwMDA4MTQ1RSAgIExCVSBWMCwgOChTOCkNCkJGRDA5NDNDICAgICAgMjUyMCAgIFNMTCBWMCwgVjAsIDgNCkJGRDA5NDNFICAgICAgMEM2MiAgIE1PVkUgVjEsIFYwDQpCRkQwOTQ0MCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDk0NDQgIEI4MDA1MDQyICAgT1JJIFYwLCBWMCwgLTE4NDMyDQpCRkQwOTQ0NiAgMDUyNkI4MDAgICBTREMxIEYwLCAxMzE4KFpFUk8pDQpCRkQwOTQ0OCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA5NDRBICAgICAgQ0MwNSAgIEIgMHhCRkQwOTQ1Ng0KQkZEMDk0NEMgICAgICAwQzAwICAgTk9QDQo0NTogICAgICAgICAgICAgICAgICAgICAgfQ0KNDY6ICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCjQ3OiAgICAgICAgICAgICAgICAgICAgICB7DQo0ODogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTEVEMF9CQVNFKTsNCkJGRDA5NDRFICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwOTQ1MiAgQjgwMDUwNDIgICBPUkkgVjAsIFYwLCAtMTg0MzINCkJGRDA5NDU0ICAwRkJFQjgwMCAgIFNEQzEgRjAsIDQwMzAoWkVSTykNCjQ5OiAgICAgICAgICAgICAgICAgICAgICB9DQo1MDogICAgICAgICAgICAgICAgICB9DQpCRkQwOTQ1NiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDk0NTggICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOTQ1QSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA5NDVDICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5NDVFICAgICAgMEMwMCAgIE5PUA0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICAjaWZkZWYgTEVEX0VOQUJMRV9WQUxJRF9DSEVDSw0KNTM6ICAgICAgICAgICAgICAgICAgDQo1NDogICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDhfdCBsZWRfaXNfdmFsaWQodWludDhfdCBsZWRfaWQpDQo1NTogICAgICAgICAgICAgICAgICB7DQo1NjogICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZF9pZCA8IChMRURfSURfTUFYKSkgew0KNTc6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCjU4OiAgICAgICAgICAgICAgICAgICAgICB9DQo1OTogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KNjA6ICAgICAgICAgICAgICAgICAgfQ0KNjE6ICAgICAgICAgICAgICAgICAgDQo2MjogICAgICAgICAgICAgICAgICAjZWxzZQ0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICBzdGF0aWMgdWludDhfdCBsZWRfaXNfdmFsaWQodWludDhfdCBsZWRfaWQpIHsgKCB2b2lkICkgbGVkX2lkOyByZXR1cm4gKE1FQzE0WFhfVFJVRSk7IH0NCkJGRDA5RTZDICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5RTZFICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDlFNzAgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA5RTcyICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwOUU3NCAgMDAwODE4NUUgICBTQiBWMCwgOChTOCkNCkJGRDA5RTc4ICAgICAgRUQwMSAgIExJIFYwLCAxDQpCRkQwOUU3QSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlFN0MgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOUU3RSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA5RTgwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5RTgyICAgICAgMEMwMCAgIE5PUA0KNjU6ICAgICAgICAgICAgICAgICAgDQo2NjogICAgICAgICAgICAgICAgICAjZW5kaWYNCjY3OiAgICAgICAgICAgICAgICAgIA0KNjg6ICAgICAgICAgICAgICAgICAgDQo2OTogICAgICAgICAgICAgICAgICAvKiogDQo3MDogICAgICAgICAgICAgICAgICAgICAgQGJyaWVmIE1FQzE0MDQgTEVEIGFyZSBhbHRlcm5hdGUgZnVuY3Rpb25zIG9mIEdQSU8gcGlucy4gDQo3MTogICAgICAgICAgICAgICAgICAgICAgQG5vdGUgLSANCjcyOiAgICAgICAgICAgICAgICAgICAgICAgICAgTEVEMCBpcyBHUElPMTU3IEZ1bmN0aW9uIDENCjczOiAgICAgICAgICAgICAgICAgICAgICAgICAgTEVEMSBpcyBHUElPMTU2IEZ1bmN0aW9uIDENCjc0OiAgICAgICAgICAgICAgICAgICAgICAgICAgTEVEMiBpcyBHUElPMTA0IEZ1bmN0aW9uIDENCjc1OiAgICAgICAgICAgICAgICAgICovDQo3NjogICAgICAgICAgICAgICAgICANCjc3OiAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGxlZF9wY3Jfc2xwMl9iaXRwb3NbTEVEX0lEX01BWF0gPSB7DQo3ODogICAgICAgICAgICAgICAgICAgICAgKFBDUl9FQzJfTEVEMF9TTFBfQklUUE9TKSwNCjc5OiAgICAgICAgICAgICAgICAgICAgICAoUENSX0VDMl9MRUQxX1NMUF9CSVRQT1MpLA0KODA6ICAgICAgICAgICAgICAgICAgICAgIChQQ1JfRUMyX0xFRDJfU0xQX0JJVFBPUykNCjgxOiAgICAgICAgICAgICAgICAgIH07DQo4MjogICAgICAgICAgICAgICAgICANCjgzOiAgICAgICAgICAgICAgICAgIA0KODQ6ICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQxNl90IGxlZF9ncGlvX3RibFtMRURfSURfTUFYXSA9IHsNCjg1OiAgICAgICAgICAgICAgICAgICAgICAoKCh1aW50MTZfdCkoR1BJT19GVU5DXzEpPDw4KSArICh1aW50MTZfdClHUElPXzAxNTdfSUQpLA0KODY6ICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQxNl90KShHUElPX0ZVTkNfMSk8PDgpICsgKHVpbnQxNl90KUdQSU9fMDE1Nl9JRCksDQo4NzogICAgICAgICAgICAgICAgICAgICAgKCgodWludDE2X3QpKEdQSU9fRlVOQ18xKTw8OCkgKyAodWludDE2X3QpR1BJT18wMTA0X0lEKQ0KODg6ICAgICAgICAgICAgICAgICAgfTsNCjg5OiAgICAgICAgICAgICAgICAgIA0KOTA6ICAgICAgICAgICAgICAgICAgDQo5MTogICAgICAgICAgICAgICAgICANCjkyOiAgICAgICAgICAgICAgICAgIC8qKg0KOTM6ICAgICAgICAgICAgICAgICAgICogbGVkX3NsZWVwX2VuIC0gRW5hYmxlL0Rpc2FibGUgZ2F0aW5nIG9mIGNsb2NrcyBvbiBpZGxlIHRvIHRoZQ0KOTQ6ICAgICAgICAgICAgICAgICAgICogQkJMRUQgYmxvY2sgDQo5NTogICAgICAgICAgICAgICAgICAgKiAgDQo5NjogICAgICAgICAgICAgICAgICAgKg0KOTc6ICAgICAgICAgICAgICAgICAgICogQHBhcmFtIHVpbnQ4X3Qgc2xlZXBfZW4gKDE9RW5hYmxlIHNsZWVwIG9uIGlkbGUpLCAoMD1ObyBzbGVlcA0KOTg6ICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgb24gaWRsZSkuDQo5OTogICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gdWludDhfdCBMRUQgSUQgKDAtMykNCjEwMDogICAgICAgICAgICAgICAgICAqIEBub3RlIGlmIExFRCBJRCA+IDMgbm8gYWN0aW9uIHRha2VuLg0KMTAxOiAgICAgICAgICAgICAgICAgICovDQoxMDI6ICAgICAgICAgICAgICAgICB2b2lkIGxlZF9zbGVlcF9lbih1aW50OF90IGxlZF9pZCwgdWludDhfdCBzbGVlcF9lbikNCjEwMzogICAgICAgICAgICAgICAgIHsNCkJGRDA1RDBDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNUQwRSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNUQxMCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNUQxMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDVEMTQgICAgICAwQzY0ICAgTU9WRSBWMSwgQTANCkJGRDA1RDE2ICAgICAgMEM0NSAgIE1PVkUgVjAsIEExDQpCRkQwNUQxOCAgMDAyMDE4N0UgICBTQiBWMSwgMzIoUzgpDQpCRkQwNUQxQyAgMDAyNDE4NUUgICBTQiBWMCwgMzYoUzgpDQoxMDQ6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2xwX21hc2s7DQoxMDU6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGFkZHI7DQoxMDY6ICAgICAgICAgICAgICAgICAgICAgDQoxMDc6ICAgICAgICAgICAgICAgICAgICAgc2xwX21hc2sgPSAwdWw7DQpCRkQwNUQyMCAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCjEwODogICAgICAgICAgICAgICAgICAgICBpZiAoIGxlZF9pc192YWxpZChsZWRfaWQpICkgew0KQkZEMDVEMjQgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA1RDI4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNUQyQSAgNEYzNjc3RTggICBKQUxTIGxlZF9pc192YWxpZA0KQkZEMDVEMkMgICAgICA0RjM2ICAgQURESVUgVDksIFQ5LCAtNQ0KQkZEMDVEMkUgICAgICAwQzAwICAgTk9QDQpCRkQwNUQzMCAgMDAzRjQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNURCMg0KMTA5OiAgICAgICAgICAgICAgICAgICAgICAgICBzbHBfbWFzayA9ICgxdWwgPDwgbGVkX3Bjcl9zbHAyX2JpdHBvc1tsZWRfaWRdKTsNCkJGRDA1RDM0ICAwMDIwMTQ3RSAgIExCVSBWMSwgMzIoUzgpDQpCRkQwNUQzOCAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMA0KQkZEMDVEM0EgIDMwNDJCRkQwICAgTERDMSBGMzAsIDEyMzU0KFMwKQ0KQkZEMDVEM0MgIDAxNzQzMDQyICAgQURESVUgVjAsIFYwLCAzNzINCkJGRDA1RDQwICAgICAgMDUyNiAgIEFERFUgVjAsIFYxLCBWMA0KQkZEMDVENDIgICAgICAwOTIwICAgTEJVIFYwLCAwKFYwKQ0KQkZEMDVENDQgICAgICBFRDgxICAgTEkgVjEsIDENCkJGRDA1RDQ2ICAxMDEwMDA2MiAgIFNMTFYgVjAsIFYwLCBWMQ0KQkZEMDVENDggIEY4NUUxMDEwICAgQURESSBaRVJPLCBTMCwgLTE5NTQNCkJGRDA1RDRBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjExMDogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzbGVlcF9lbiApIHsNCkJGRDA1RDRFICAwMDI0MTQ1RSAgIExCVSBWMCwgMzYoUzgpDQpCRkQwNUQ1MiAgMDAyMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNUQ5Ng0KMTExOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSLT5FQ19TTEVFUF9FTjIgfD0gc2xwX21hc2s7DQpCRkQwNUQ1NiAgQTAwODQxQTIgICBMVUkgVjAsIDB4QTAwOA0KQkZEMDVENUEgIDAxMDA1MDQyICAgT1JJIFYwLCBWMCwgMjU2DQpCRkQwNUQ1RSAgQTAwODQxQTMgICBMVUkgVjEsIDB4QTAwOA0KQkZEMDVENjIgIDAxMDA1MDYzICAgT1JJIFYxLCBWMSwgMjU2DQpCRkQwNUQ2NiAgICAgIDZBMzkgICBMVyBBMCwgMzYoVjEpDQpCRkQwNUQ2OCAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwNUQ2QyAgICAgIDQ0REMgICBPUjE2IFYxLCBBMA0KQkZEMDVENkUgICAgICBFOUE5ICAgU1cgVjEsIDM2KFYwKQ0KMTEyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFkZHIgPSBsZWRfYWRkcihsZWRfaWQpOw0KQkZEMDVENzAgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA1RDc0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNUQ3NiAgNEExMDc3RTggICBKQUxTIGxlZF9hZGRyDQpCRkQwNUQ3OCAgICAgIDRBMTAgICBMVyBTMCwgNjQoU1ApDQpCRkQwNUQ3QSAgICAgIDBDMDAgICBOT1ANCkJGRDA1RDdDICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjExMzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkJMRURfVHlwZURlZiAqKWxhZGRyKS0+Q09ORklHICY9IH4oMHgwM3VsKTsNCkJGRDA1RDgwICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA1RDg0ICAwMDE0RkM3RSAgIExXIFYxLCAyMChTOCkNCkJGRDA1RDg4ICAgICAgNkEzMCAgIExXIEEwLCAwKFYxKQ0KQkZEMDVEOEEgIEZGRkMzMDYwICAgQURESVUgVjEsIFpFUk8sIC00DQpCRkQwNUQ4QyAgNDQ5Q0ZGRkMgICBMVyBSQSwgMTc1NjQoR1ApDQpCRkQwNUQ4RSAgICAgIDQ0OUMgICBBTkQxNiBWMSwgQTANCkJGRDA1RDkwICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KQkZEMDVEOTIgICAgICBDQzBGICAgQiAweEJGRDA1REIyDQpCRkQwNUQ5NCAgICAgIDBDMDAgICBOT1ANCjExNDogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCjExNTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUi0+RUNfU0xFRVBfRU4yICY9IH4oc2xwX21hc2spOw0KQkZEMDVEOTYgIEEwMDg0MUEyICAgTFVJIFYwLCAweEEwMDgNCkJGRDA1RDlBICAwMTAwNTA0MiAgIE9SSSBWMCwgVjAsIDI1Ng0KQkZEMDVEOUUgIEEwMDg0MUEzICAgTFVJIFYxLCAweEEwMDgNCkJGRDA1REEyICAwMTAwNTA2MyAgIE9SSSBWMSwgVjEsIDI1Ng0KQkZEMDVEQTYgICAgICA2QTM5ICAgTFcgQTAsIDM2KFYxKQ0KQkZEMDVEQTggIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDVEQUMgICAgICA0NDFCICAgTk9UMTYgVjEsIFYxDQpCRkQwNURBRSAgICAgIDQ0OUMgICBBTkQxNiBWMSwgQTANCkJGRDA1REIwICAgICAgRTlBOSAgIFNXIFYxLCAzNihWMCkNCjExNjogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTE3OiAgICAgICAgICAgICAgICAgICAgIH0NCjExODogICAgICAgICAgICAgICAgIH0NCkJGRDA1REIyICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNURCNCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNURCNiAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNURCOCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNURCQSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNURCQyAgICAgIDBDMDAgICBOT1ANCjExOTogICAgICAgICAgICAgICAgIA0KMTIwOiAgICAgICAgICAgICAgICAgDQoxMjE6ICAgICAgICAgICAgICAgICAvKioNCjEyMjogICAgICAgICAgICAgICAgICAqIGxlZF9yZXNldCAtIFJlc2V0IHRoZSBzcGVjaWZpZWQgTEVEIGhhcmR3YXJlIGJsb2NrLg0KMTIzOiAgICAgICAgICAgICAgICAgICogDQoxMjQ6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoxMjU6ICAgICAgICAgICAgICAgICAgKiANCjEyNjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBsZWRfaWQgMC1iYXNlZCBMRUQgSUQgDQoxMjc6ICAgICAgICAgICAgICAgICAgKiBAbm90ZSBTZXRzIHRoZSBMRUQncyBzb2Z0IHJlc2V0IGJpdCBhbmQgd2FpdHMgZm9yIGhhcmR3YXJlIHRvIA0KMTI4OiAgICAgICAgICAgICAgICAgICogICAgICAgY2xlYXIgaXQuIFdpbGwgd2FpdCB1cCB0byAweDEwMDAwIHRpbWVzLg0KMTI5OiAgICAgICAgICAgICAgICAgICovDQoxMzA6ICAgICAgICAgICAgICAgICB2b2lkIGxlZF9yZXNldCh1aW50OF90IGxlZF9pZCkNCjEzMTogICAgICAgICAgICAgICAgIHsNCkJGRDA3RkM4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwN0ZDQSAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwN0ZDQyAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwN0ZDRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDdGRDAgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTANCkJGRDA3RkQyICAwMDIwMTg1RSAgIFNCIFYwLCAzMihTOCkNCjEzMjogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwOw0KMTMzOiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNudDsNCjEzNDogICAgICAgICAgICAgICAgIA0KMTM1OiAgICAgICAgICAgICAgICAgICAgIHAgPSBsZWRfYWRkcihsZWRfaWQpOw0KQkZEMDdGRDYgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA3RkRBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwN0ZEQyAgNEExMDc3RTggICBKQUxTIGxlZF9hZGRyDQpCRkQwN0ZERSAgICAgIDRBMTAgICBMVyBTMCwgNjQoU1ApDQpCRkQwN0ZFMCAgICAgIDBDMDAgICBOT1ANCkJGRDA3RkUyICAwMDE0Rjg1RSAgIFNXIFYwLCAyMChTOCkNCjEzNjogICAgICAgICAgICAgICAgICAgICAoKEJCTEVEX1R5cGVEZWYgKilwKS0+Q09ORklHID0gKExFRF9DRkdfUkVTRVQpOw0KQkZEMDdGRTYgIDAwMTRGQzVFICAgTFcgVjAsIDIwKFM4KQ0KQkZEMDdGRUEgIDAwODAzMDYwICAgQURESVUgVjEsIFpFUk8sIDEyOA0KQkZEMDdGRUUgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoxMzc6ICAgICAgICAgICAgICAgICANCjEzODogICAgICAgICAgICAgICAgICAgICBjbnQgPSAweDEwMDAwMFVMOw0KQkZEMDdGRjAgIDAwMTA0MUEyICAgTFVJIFYwLCAweDEwDQpCRkQwN0ZGNCAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxMzk6ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAoKEJCTEVEX1R5cGVEZWYgKilwKS0+Q09ORklHICYgKExFRF9DRkdfUkVTRVQpICkgew0KQkZEMDdGRjggICAgICBDQzBBICAgQiAweEJGRDA4MDBFDQpCRkQwN0ZGQSAgICAgIDBDMDAgICBOT1ANCkJGRDA4MDBFICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA4MDEyICAgICAgNjkyMCAgIExXIFYwLCAwKFYwKQ0KQkZEMDgwMTQgICAgICAyRDIwICAgQU5ESSBWMCwgVjAsIDB4ODANCkJGRDA4MDE2ICBGRkYxNDBBMiAgIEJORVpDIFYwLCAweEJGRDA3RkZDDQpCRkQwODAxOCAgQ0MwMkZGRjEgICBMVyBSQSwgLTEzMzEwKFMxKQ0KQkZEMDgwMUEgICAgICBDQzAyICAgQiAweEJGRDA4MDIwDQpCRkQwODAxQyAgICAgIDBDMDAgICBOT1ANCjE0MDogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjbnQgIT0gMFVMICkgew0KQkZEMDdGRkMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDgwMDAgIDAwMEQ0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDgwMUUNCjE0MTogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudC0tOw0KQkZEMDgwMDQgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDgwMDggICAgICA2RDJFICAgQURESVUgVjAsIFYwLCAtMQ0KQkZEMDgwMEEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMTQyOiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KMTQzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQpCRkQwODAxRSAgICAgIDBDMDAgICBOT1ANCjE0NDogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KMTQ1OiAgICAgICAgICAgICAgICAgICAgIH0NCjE0NjogICAgICAgICAgICAgICAgIH0gDQpCRkQwODAyMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDgwMjIgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDgwMjQgICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDgwMjYgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDgwMjggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDgwMkEgICAgICAwQzAwICAgTk9QDQoxNDc6ICAgICAgICAgICAgICAgICANCjE0ODogICAgICAgICAgICAgICAgIA0KMTQ5OiAgICAgICAgICAgICAgICAgdWludDhfdCBsZWRfZ2V0X2dwaW9fbnVtKHVpbnQ4X3QgbGVkX2lkKQ0KMTUwOiAgICAgICAgICAgICAgICAgew0KQkZEMDk5RUMgICAgICA0RkIwICAgQURESVUgU1AsIFNQLCAtOA0KQkZEMDk5RUUgICAgICBDQkMxICAgU1cgUzgsIDQoU1ApDQpCRkQwOTlGMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDk5RjIgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTANCkJGRDA5OUY0ICAwMDA4MTg1RSAgIFNCIFYwLCA4KFM4KQ0KMTUxOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWRfZ3Bpb190YmxbKGxlZF9pZCAmICgoTEVEX0lEX01BWCktMXUpKV07DQpCRkQwOTlGOCAgMDAwODE0NUUgICBMQlUgVjAsIDgoUzgpDQpCRkQwOTlGQyAgICAgIDJEQTIgICBBTkRJIFYxLCBWMCwgMHgyDQpCRkQwOTlGRSAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMA0KQkZEMDlBMDAgIDI1QjJCRkQwICAgTERDMSBGMzAsIDk2NTAoUzApDQpCRkQwOUEwMiAgICAgIDI1QjIgICBTTEwgVjEsIFYxLCAxDQpCRkQwOUEwNCAgMDE3ODMwNDIgICBBRERJVSBWMCwgVjAsIDM3Ng0KQkZEMDlBMDggICAgICAwNTI2ICAgQUREVSBWMCwgVjEsIFYwDQpCRkQwOUEwQSAgICAgIDI5MjAgICBMSFUgVjAsIDAoVjApDQpCRkQwOUEwQyAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KMTUyOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlBMEUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5QTEwICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlBMTIgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOUExNCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUExNiAgICAgIDBDMDAgICBOT1ANCjE1MzogICAgICAgICAgICAgICAgIA0KMTU0OiAgICAgICAgICAgICAgICAgDQoxNTU6ICAgICAgICAgICAgICAgICAvKioNCjE1NjogICAgICAgICAgICAgICAgICAqIGxlZF9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgc3BlY2lmaWVkIExFRCANCjE1NzogICAgICAgICAgICAgICAgICAqIA0KMTU4OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMTU5OiAgICAgICAgICAgICAgICAgICogDQoxNjA6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbGVkX2lkIDAtYmFzZWQgTEVEIElEIA0KMTYxOiAgICAgICAgICAgICAgICAgICogQG5vdGUgQ29uZmlndXJlcyB0aGUgTEVEJ3MgR1BJTyBwaW4gZm9yIExFRCBmdW5jdGlvbiBhbmQgdGhlbiANCjE2MjogICAgICAgICAgICAgICAgICAqICAgICAgIHBlZm9ybXMgYSBzb2Z0IHJlc2V0IG9mIHRoZSBMRUQgaGFyZHdhcmUuDQoxNjM6ICAgICAgICAgICAgICAgICAgKi8NCjE2NDogICAgICAgICAgICAgICAgIHZvaWQgbGVkX2luaXQodWludDhfdCBsZWRfaWQpDQoxNjU6ICAgICAgICAgICAgICAgICB7DQpCRkQwN0NGQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDdDRkUgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDdEMDAgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDdEMDIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA3RDA0ICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwN0QwNiAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpDQoxNjY6ICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbGVkaTsNCjE2NzogICAgICAgICAgICAgICAgIA0KMTY4OiAgICAgICAgICAgICAgICAgICAgIGlmICggbGVkX2lkIDwgTEVEX0lEX01BWCApDQpCRkQwN0QwQSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDdEMEUgIDAwMDNCMDQyICAgU0xUSVUgVjAsIFYwLCAzDQpCRkQwN0QxMiAgMDAyMDQwRTIgICBCRVFaQyBWMCwgMHhCRkQwN0Q1Ng0KMTY5OiAgICAgICAgICAgICAgICAgICAgIHsNCjE3MDogICAgICAgICAgICAgICAgICAgICAgICAgLyogYml0c1s3OjBdID0gR1BJT19JRCwgYml0c1sxNTo4XSA9IEdQSU8gRnVuY3Rpb24gKi8NCjE3MTogICAgICAgICAgICAgICAgICAgICAgICAgbGVkaSA9IGxlZF9ncGlvX3RibFtsZWRfaWRdOw0KQkZEMDdEMTYgIDAwMjAxNDdFICAgTEJVIFYxLCAzMihTOCkNCkJGRDA3RDFBICBCRkQwNDFBMiAgIExVSSBWMCwgMHhCRkQwDQpCRkQwN0QxQyAgMjVCMkJGRDAgICBMREMxIEYzMCwgOTY1MChTMCkNCkJGRDA3RDFFICAgICAgMjVCMiAgIFNMTCBWMSwgVjEsIDENCkJGRDA3RDIwICAwMTc4MzA0MiAgIEFERElVIFYwLCBWMCwgMzc2DQpCRkQwN0QyNCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA3RDI2ICAgICAgMjkyMCAgIExIVSBWMCwgMChWMCkNCkJGRDA3RDI4ICAwMDEwMzg1RSAgIFNIIFYwLCAxNihTOCkNCjE3MjogICAgICAgICAgICAgICAgICAgICAgICAgR1BJT1Byb3BlcnR5U2V0KChsZWRpICYgMHhGRiksIEdQSU9fUFJPUF9NVVhfU0VMLCAobGVkaSA+PiA4KSAmIDB4RkYpOw0KQkZEMDdEMkMgIDAwMTAzNDVFICAgTEhVIFYwLCAxNihTOCkNCkJGRDA3RDMwICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGDQpCRkQwN0QzMiAgICAgIDBDNjIgICBNT1ZFIFYxLCBWMA0KQkZEMDdEMzQgIDAwMTAzNDVFICAgTEhVIFYwLCAxNihTOCkNCkJGRDA3RDM4ICAgICAgMjUyMSAgIFNSTCBWMCwgVjAsIDgNCkJGRDA3RDNBICAgICAgMkQyRiAgIEFOREkgVjAsIFYwLCAweEZGRkYNCkJGRDA3RDNDICAgICAgMEM4MyAgIE1PVkUgQTAsIFYxDQpCRkQwN0QzRSAgICAgIEVFODcgICBMSSBBMSwgNw0KQkZEMDdENDAgICAgICAwQ0MyICAgTU9WRSBBMiwgVjANCkJGRDA3RDQyICAyNUNDNzdFOCAgIEpBTFMgR1BJT1Byb3BlcnR5U2V0DQpCRkQwN0Q0NCAgICAgIDI1Q0MgICBTTEwgVjEsIEEwLCA2DQpCRkQwN0Q0NiAgICAgIDBDMDAgICBOT1ANCjE3MzogICAgICAgICAgICAgICAgICAgICAgICAgbGVkX3Jlc2V0KGxlZGkgJiAweEZGKTsNCkJGRDA3RDQ4ICAwMDEwMzQ1RSAgIExIVSBWMCwgMTYoUzgpDQpCRkQwN0Q0QyAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDdENEUgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA3RDUwICAzRkU0NzdFOCAgIEpBTFMgbGVkX3Jlc2V0DQpCRkQwN0Q1MiAgMEMwMDNGRTQgICBMSCBSQSwgMzA3MihBMCkNCkJGRDA3RDU0ICAgICAgMEMwMCAgIE5PUA0KMTc0OiAgICAgICAgICAgICAgICAgICAgIH0NCjE3NTogICAgICAgICAgICAgICAgIH0NCkJGRDA3RDU2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwN0Q1OCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwN0Q1QSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwN0Q1QyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwN0Q1RSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwN0Q2MCAgICAgIDBDMDAgICBOT1ANCjE3NjogICAgICAgICAgICAgICAgIA0KMTc3OiAgICAgICAgICAgICAgICAgDQoxNzg6ICAgICAgICAgICAgICAgICAvKioNCjE3OTogICAgICAgICAgICAgICAgICAqIGxlZF9tb2RlX2JsaW5rIC0gRW5hYmxlIExFRCBoYXJkd2FyZSBibGluaw0KMTgwOiAgICAgICAgICAgICAgICAgICogDQoxODE6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoxODI6ICAgICAgICAgICAgICAgICAgKiANCjE4MzogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBsZWRfaWQgMC1iYXNlZCBMRUQgSUQNCjE4NDogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBkdXR5X2N5Y2xlIGR1dHkgY3ljbGUgKDB4ODAgPSA1MCUpDQoxODU6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gcHJlc2NhbGUgc2V0cyB0aGUgYmxpbmsgZnJlcXVlbmN5IA0KMTg2OiAgICAgICAgICAgICAgICAgICogQG5vdGUgQmxpbmsgZnJlcXVlbmN5IGlzICgzMjc2OCAqIDI1NSkvKHByZXNjYWxlICsgMSkgSHoNCjE4NzogICAgICAgICAgICAgICAgICAqLw0KMTg4OiAgICAgICAgICAgICAgICAgdm9pZCBsZWRfbW9kZV9ibGluayh1aW50OF90IGxlZF9pZCwNCjE4OTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkdXR5X2N5Y2xlLA0KMTkwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwcmVzY2FsZSkNCjE5MTogICAgICAgICAgICAgICAgIHsNCkJGRDA3OTE0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNzkxNiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwNzkxOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwNzkxQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDc5MUMgICAgICAwQzY1ICAgTU9WRSBWMSwgQTENCkJGRDA3OTFFICAgICAgMEM0NiAgIE1PVkUgVjAsIEEyDQpCRkQwNzkyMCAgMDAyMDE4OUUgICBTQiBBMCwgMzIoUzgpDQpCRkQwNzkyNCAgMDAyNDE4N0UgICBTQiBWMSwgMzYoUzgpDQpCRkQwNzkyOCAgMDAyODM4NUUgICBTSCBWMCwgNDAoUzgpDQoxOTI6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcExlZDsNCjE5MzogICAgICAgICAgICAgICAgIA0KMTk0OiAgICAgICAgICAgICAgICAgICAgIHBMZWQgPSAwVUw7DQpCRkQwNzkyQyAgMDAxMEY4MUUgICBTVyBaRVJPLCAxNihTOCkNCjE5NTogICAgICAgICAgICAgICAgIA0KMTk2OiAgICAgICAgICAgICAgICAgICAgIGlmIChsZWRfaXNfdmFsaWQobGVkX2lkKSkgew0KQkZEMDc5MzAgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA3OTM0ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwNzkzNiAgNEYzNjc3RTggICBKQUxTIGxlZF9pc192YWxpZA0KQkZEMDc5MzggICAgICA0RjM2ICAgQURESVUgVDksIFQ5LCAtNQ0KQkZEMDc5M0EgICAgICAwQzAwICAgTk9QDQpCRkQwNzkzQyAgMDAxRTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwNzk3Qw0KMTk3OiAgICAgICAgICAgICAgICAgICAgICAgICBwTGVkID0gbGVkX2FkZHIobGVkX2lkKTsNCkJGRDA3OTQwICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwNzk0NCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDc5NDYgIDRBMTA3N0U4ICAgSkFMUyBsZWRfYWRkcg0KQkZEMDc5NDggICAgICA0QTEwICAgTFcgUzAsIDY0KFNQKQ0KQkZEMDc5NEEgICAgICAwQzAwICAgTk9QDQpCRkQwNzk0QyAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoxOTg6ICAgICAgICAgICAgICAgICANCjE5OTogICAgICAgICAgICAgICAgICAgICAgICAgKChCQkxFRF9UeXBlRGVmICopcExlZCktPkNPTkZJRyA9IExFRF9DRkdfQ05UTF9CTElOSzsNCkJGRDA3OTUwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA3OTU0ICAgICAgRUQ4MiAgIExJIFYxLCAyDQpCRkQwNzk1NiAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjIwMDogICAgICAgICAgICAgICAgICAgICAgICAgKChCQkxFRF9UeXBlRGVmICopcExlZCktPkxJTUlUID0gKHVpbnQzMl90KWR1dHlfY3ljbGU7DQpCRkQwNzk1OCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNzk1QyAgMDAyNDE0N0UgICBMQlUgVjEsIDM2KFM4KQ0KQkZEMDc5NjAgICAgICBFOUExICAgU1cgVjEsIDQoVjApDQoyMDE6ICAgICAgICAgICAgICAgICAgICAgICAgICgoQkJMRURfVHlwZURlZiAqKXBMZWQpLT5ERUxBWSA9ICh1aW50MzJfdClwcmVzY2FsZTsNCkJGRDA3OTYyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA3OTY2ICAwMDI4MzQ3RSAgIExIVSBWMSwgNDAoUzgpDQpCRkQwNzk2QSAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkNCjIwMjogICAgICAgICAgICAgICAgICAgICAgICAgKChCQkxFRF9UeXBlRGVmICopcExlZCktPkNPTkZJRyB8PSAoTEVEX0NGR19FTl9VUERBVEUpOw0KQkZEMDc5NkMgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDc5NzAgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDc5NzQgICAgICA2OUIwICAgTFcgVjEsIDAoVjEpDQpCRkQwNzk3NiAgMDA0MDUwNjMgICBPUkkgVjEsIFYxLCA2NA0KQkZEMDc5N0EgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyMDM6ICAgICAgICAgICAgICAgICAgICAgfQ0KMjA0OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDc5N0MgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3OTdFICAgICAgNEJFNyAgIExXIFJBLCAyOChTUCkNCkJGRDA3OTgwICAgICAgNEJDNiAgIExXIFM4LCAyNChTUCkNCkJGRDA3OTgyICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3OTg0ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA3OTg2ICAgICAgMEMwMCAgIE5PUA0KMjA1OiAgICAgICAgICAgICAgICAgDQoyMDY6ICAgICAgICAgICAgICAgICANCjIwNzogICAgICAgICAgICAgICAgIC8qKg0KMjA4OiAgICAgICAgICAgICAgICAgICogbGVkX291dF90b2dnbGUgLSBUb2dnbGUgdGhlIExFRCBvdXRwdXQgcGluLg0KMjA5OiAgICAgICAgICAgICAgICAgICogDQoyMTA6ICAgICAgICAgICAgICAgICAgKiBAYXV0aG9yIHN3b3JsZXkgDQoyMTE6ICAgICAgICAgICAgICAgICAgKiANCjIxMjogICAgICAgICAgICAgICAgICAqIEBwYXJhbSBsZWRfaWQgMC1iYXNlZCBMRUQgSUQuDQoyMTM6ICAgICAgICAgICAgICAgICAgKi8NCjIxNDogICAgICAgICAgICAgICAgIHZvaWQgbGVkX291dF90b2dnbGUodWludDhfdCBsZWRfaWQpDQoyMTU6ICAgICAgICAgICAgICAgICB7DQpCRkQwODVBOCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDg1QUEgICAgICBDQkU3ICAgU1cgUkEsIDI4KFNQKQ0KQkZEMDg1QUMgICAgICBDQkM2ICAgU1cgUzgsIDI0KFNQKQ0KQkZEMDg1QUUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCkJGRDA4NUIwICAgICAgMEM0NCAgIE1PVkUgVjAsIEEwDQpCRkQwODVCMiAgMDAyMDE4NUUgICBTQiBWMCwgMzIoUzgpDQoyMTY6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcDsNCjIxNzogICAgICAgICAgICAgICAgIA0KMjE4OiAgICAgICAgICAgICAgICAgICAgIGlmIChsZWRfaXNfdmFsaWQobGVkX2lkKSkgew0KQkZEMDg1QjYgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA4NUJBICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwODVCQyAgNEYzNjc3RTggICBKQUxTIGxlZF9pc192YWxpZA0KQkZEMDg1QkUgICAgICA0RjM2ICAgQURESVUgVDksIFQ5LCAtNQ0KQkZEMDg1QzAgICAgICAwQzAwICAgTk9QDQpCRkQwODVDMiAgMDAxNzQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODVGNA0KMjE5OiAgICAgICAgICAgICAgICAgICAgICAgICBwID0gbGVkX2FkZHIobGVkX2lkKTsNCkJGRDA4NUM2ICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwODVDQSAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDg1Q0MgIDRBMTA3N0U4ICAgSkFMUyBsZWRfYWRkcg0KQkZEMDg1Q0UgICAgICA0QTEwICAgTFcgUzAsIDY0KFNQKQ0KQkZEMDg1RDAgICAgICAwQzAwICAgTk9QDQpCRkQwODVEMiAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQoyMjA6ICAgICAgICAgICAgICAgICANCjIyMTogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoQkJMRURfVHlwZURlZiAqKXApLT5DT05GSUcgJiBMRURfQ0ZHX0NOVExfTUFTSykgew0KQkZEMDg1RDYgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDg1REEgICAgICA2OTIwICAgTFcgVjAsIDAoVjApDQpCRkQwODVEQyAgICAgIDJEMjMgICBBTkRJIFYwLCBWMCwgMHgzDQpCRkQwODVERSAgMDAwNTQwRTIgICBCRVFaQyBWMCwgMHhCRkQwODVFQw0KMjIyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQkxFRF9UeXBlRGVmICopcCktPkNPTkZJRyA9IExFRF9DRkdfQ05UTF9MTzsNCkJGRDA4NUUyICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA4NUU2ICAgICAgRTgyMCAgIFNXIFMwLCAwKFYwKQ0KQkZEMDg1RTggICAgICBDQzA1ICAgQiAweEJGRDA4NUY0DQpCRkQwODVFQSAgICAgIDBDMDAgICBOT1ANCjIyMzogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCjIyNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkJMRURfVHlwZURlZiAqKXApLT5DT05GSUcgPSBMRURfQ0ZHX0NOVExfSEk7DQpCRkQwODVFQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODVGMCAgICAgIEVEODMgICBMSSBWMSwgMw0KQkZEMDg1RjIgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQoyMjU6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCjIyNjogICAgICAgICAgICAgICAgICAgICB9DQoyMjc6ICAgICAgICAgICAgICAgICB9DQpCRkQwODVGNCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDg1RjYgICAgICA0QkU3ICAgTFcgUkEsIDI4KFNQKQ0KQkZEMDg1RjggICAgICA0QkM2ICAgTFcgUzgsIDI0KFNQKQ0KQkZEMDg1RkEgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDg1RkMgICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDg1RkUgICAgICAwQzAwICAgTk9QDQoyMjg6ICAgICAgICAgICAgICAgICANCjIyOTogICAgICAgICAgICAgICAgIA0KMjMwOiAgICAgICAgICAgICAgICAgLyoqDQoyMzE6ICAgICAgICAgICAgICAgICAgKiBsZWRfb3V0X2hpZ2ggLSBTZXQgdGhlIExFRCBibG9jayB0byBkcml2ZSB0aGUgcGluIEhpZ2gNCjIzMjogICAgICAgICAgICAgICAgICAqIA0KMjMzOiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjM0OiAgICAgICAgICAgICAgICAgICogDQoyMzU6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbGVkX2lkIDAtYmFzZWQgTEVEIElEIA0KMjM2OiAgICAgICAgICAgICAgICAgICogQG5vdGUgVGhlIExFRCBjb250cm9sbGVyIHdpbGwgZHJpdmUgdGhlIHBpbiBIaWdoLiBEZXBlbmRpbmcgDQoyMzc6ICAgICAgICAgICAgICAgICAgKiAgICAgICB1cG9uIHRoZSBleHRlcm5hbCBjaXJjdWl0IHRoZSBMRUQgbWF5IGJlIGluIE9OIG9yIE9GRg0KMjM4OiAgICAgICAgICAgICAgICAgICogICAgICAgc3RhdGUuDQoyMzk6ICAgICAgICAgICAgICAgICAgKi8NCjI0MDogICAgICAgICAgICAgICAgIHZvaWQgbGVkX291dF9oaWdoKHVpbnQ4X3QgbGVkX2lkKQ0KMjQxOiAgICAgICAgICAgICAgICAgew0KQkZEMDkyMTAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA5MjEyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA5MjE0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA5MjE2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwOTIxOCAgICAgIDBDNDQgICBNT1ZFIFYwLCBBMA0KQkZEMDkyMUEgIDAwMjAxODVFICAgU0IgVjAsIDMyKFM4KQ0KMjQyOiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHA7DQoyNDM6ICAgICAgICAgICAgICAgICANCjI0NDogICAgICAgICAgICAgICAgICAgICBpZiAobGVkX2lzX3ZhbGlkKGxlZF9pZCkpIHsNCkJGRDA5MjFFICAwMDIwMTQ1RSAgIExCVSBWMCwgMzIoUzgpDQpCRkQwOTIyMiAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDkyMjQgIDRGMzY3N0U4ICAgSkFMUyBsZWRfaXNfdmFsaWQNCkJGRDA5MjI2ICAgICAgNEYzNiAgIEFERElVIFQ5LCBUOSwgLTUNCkJGRDA5MjI4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDkyMkEgIDAwMEM0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDkyNDYNCjI0NTogICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGxlZF9hZGRyKGxlZF9pZCk7DQpCRkQwOTIyRSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDkyMzIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA5MjM0ICA0QTEwNzdFOCAgIEpBTFMgbGVkX2FkZHINCkJGRDA5MjM2ICAgICAgNEExMCAgIExXIFMwLCA2NChTUCkNCkJGRDA5MjM4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDkyM0EgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjQ2OiAgICAgICAgICAgICAgICAgICAgICAgICAoKEJCTEVEX1R5cGVEZWYgKilwKS0+Q09ORklHID0gTEVEX0NGR19DTlRMX0hJOw0KQkZEMDkyM0UgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDkyNDIgICAgICBFRDgzICAgTEkgVjEsIDMNCkJGRDA5MjQ0ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KMjQ3OiAgICAgICAgICAgICAgICAgICAgIH0NCjI0ODogICAgICAgICAgICAgICAgIH0NCkJGRDA5MjQ2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTI0OCAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOTI0QSAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOTI0QyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOTI0RSAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTI1MCAgICAgIDBDMDAgICBOT1ANCjI0OTogICAgICAgICAgICAgICAgIA0KMjUwOiAgICAgICAgICAgICAgICAgDQoyNTE6ICAgICAgICAgICAgICAgICAvKioNCjI1MjogICAgICAgICAgICAgICAgICAqIGxlZF9vdXRfbG93IC0gU2V0IHRoZSBMRUQgYmxvY2sgdG8gZHJpdmUgdGhlIHBpbiBMb3cNCjI1MzogICAgICAgICAgICAgICAgICAqIA0KMjU0OiAgICAgICAgICAgICAgICAgICogQGF1dGhvciBzd29ybGV5IA0KMjU1OiAgICAgICAgICAgICAgICAgICogDQoyNTY6ICAgICAgICAgICAgICAgICAgKiBAcGFyYW0gbGVkX2lkIDAtYmFzZWQgTEVEIElEIA0KMjU3OiAgICAgICAgICAgICAgICAgICogQG5vdGUgVGhlIExFRCBjb250cm9sbGVyIHdpbGwgZHJpdmUgdGhlIHBpbiBMb3cuIERlcGVuZGluZyANCjI1ODogICAgICAgICAgICAgICAgICAqICAgICAgIHVwb24gdGhlIGV4dGVybmFsIGNpcmN1aXQgdGhlIExFRCBtYXkgYmUgaW4gT04gb3IgT0ZGDQoyNTk6ICAgICAgICAgICAgICAgICAgKiAgICAgICBzdGF0ZS4NCjI2MDogICAgICAgICAgICAgICAgICAqLw0KMjYxOiAgICAgICAgICAgICAgICAgdm9pZCBsZWRfb3V0X2xvdyh1aW50OF90IGxlZF9pZCkNCjI2MjogICAgICAgICAgICAgICAgIHsNCkJGRDA5NDYwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwOTQ2MiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwOTQ2NCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwOTQ2NiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDk0NjggICAgICAwQzQ0ICAgTU9WRSBWMCwgQTANCkJGRDA5NDZBICAwMDIwMTg1RSAgIFNCIFYwLCAzMihTOCkNCjI2MzogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwOw0KMjY0OiAgICAgICAgICAgICAgICAgDQoyNjU6ICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZF9pc192YWxpZChsZWRfaWQpKSB7DQpCRkQwOTQ2RSAgMDAyMDE0NUUgICBMQlUgVjAsIDMyKFM4KQ0KQkZEMDk0NzIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA5NDc0ICA0RjM2NzdFOCAgIEpBTFMgbGVkX2lzX3ZhbGlkDQpCRkQwOTQ3NiAgICAgIDRGMzYgICBBRERJVSBUOSwgVDksIC01DQpCRkQwOTQ3OCAgICAgIDBDMDAgICBOT1ANCkJGRDA5NDdBICAwMDBCNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA5NDk0DQoyNjY6ICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBsZWRfYWRkcihsZWRfaWQpOw0KQkZEMDk0N0UgIDAwMjAxNDVFICAgTEJVIFYwLCAzMihTOCkNCkJGRDA5NDgyICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwOTQ4NCAgNEExMDc3RTggICBKQUxTIGxlZF9hZGRyDQpCRkQwOTQ4NiAgICAgIDRBMTAgICBMVyBTMCwgNjQoU1ApDQpCRkQwOTQ4OCAgICAgIDBDMDAgICBOT1ANCkJGRDA5NDhBICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjI2NzogICAgICAgICAgICAgICAgICAgICAgICAgKChCQkxFRF9UeXBlRGVmICopcCktPkNPTkZJRyA9IExFRF9DRkdfQ05UTF9MTzsNCkJGRDA5NDhFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA5NDkyICAgICAgRTgyMCAgIFNXIFMwLCAwKFYwKQ0KMjY4OiAgICAgICAgICAgICAgICAgICAgIH0NCjI2OTogICAgICAgICAgICAgICAgIH0NCkJGRDA5NDk0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTQ5NiAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwOTQ5OCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwOTQ5QSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwOTQ5QyAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTQ5RSAgICAgIDBDMDAgICBOT1ANCjI3MDogICAgICAgICAgICAgICAgIA0KMjcxOiAgICAgICAgICAgICAgICAgDQoyNzI6ICAgICAgICAgICAgICAgICAjaWZkZWYgX19jcGx1c3BsdXMNCjI3MzogICAgICAgICAgICAgICAgIH0NCjI3NDogICAgICAgICAgICAgICAgICNlbmRpZg0KMjc1OiAgICAgICAgICAgICAgICAgDQoyNzY6ICAgICAgICAgICAgICAgICAvKiBlbmQgbWVjMTR4eF9iYmxlZC5oICovDQoyNzc6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KMjc4OiAgICAgICAgICAgICAgICAgICovDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTI2LmMgIC0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxMyBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTI2LmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICANCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozNDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgDQozNzogICAgICAgICAgICAgICAgICAjaWYgR0lSUTI2X0RJU0FHRyA9PSAwDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KNDA6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2lzcih2b2lkKQ0KNDE6ICAgICAgICAgICAgICAgICAgew0KQkZEMDc0MDggIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDc0MEMgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNzQwRSAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNzQxMCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA3NDEyICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQ0KQkZEMDc0MTQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA3NDE2ICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkNCkJGRDA3NDE4ICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDc0MUMgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQ0KQkZEMDc0MUUgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA3NDIyICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkNCkJGRDA3NDI0ICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNzQyNiAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDc0MjggIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA3NDJBICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDc0MkMgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNzQyRSAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNzQzMCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3NDM0ICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQ0KQkZEMDc0MzYgICAgICBDODQxICAgU1cgVjAsIDQoU1ApDQpCRkQwNzQzOCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApDQpCRkQwNzQzQSAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNzQzQyAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwNzQzRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KNDI6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDE2KTsNCkJGRDA3NDQwICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNzQ0MiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNzQ0NCAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTINCkJGRDA3NDQ4ICAwMDAxNDFBMyAgIExVSSBWMSwgMHgxDQpCRkQwNzQ0QyAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQzOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3NDRFICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNzQ1MCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNzQ1MiAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNzQ1NCAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwNzQ1NiAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkNCkJGRDA3NDU4ICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQ0KQkZEMDc0NUEgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDc0NUUgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA3NDYwICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pDQpCRkQwNzQ2MiAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApDQpCRkQwNzQ2NCAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApDQpCRkQwNzQ2NiAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA3NDZBICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkNCkJGRDA3NDZDICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3NDZFICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDc0NzAgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDc0NzIgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDc0NzQgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNzQ3NiAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3NDc4ICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA3NDdBICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA3NDdDICAwQzAwRjM3QyAgIEpBTFggMHhCREYwMzAwMA0KNDQ6ICAgICAgICAgICAgICAgICAgDQo0NTogICAgICAgICAgICAgICAgICAjZWxzZQ0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNDg6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2IwKHZvaWQpDQo0OTogICAgICAgICAgICAgICAgICB7DQo1MDogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDApOw0KNTE6ICAgICAgICAgICAgICAgICAgfQ0KNTI6ICAgICAgICAgICAgICAgICAgDQo1MzogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTQ6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2IxKHZvaWQpDQo1NTogICAgICAgICAgICAgICAgICB7DQo1NjogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDEpOw0KNTc6ICAgICAgICAgICAgICAgICAgfQ0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjA6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2IyKHZvaWQpDQo2MTogICAgICAgICAgICAgICAgICB7DQo2MjogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDIpOw0KNjM6ICAgICAgICAgICAgICAgICAgfQ0KNjQ6ICAgICAgICAgICAgICAgICAgDQo2NTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjY6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2IzKHZvaWQpDQo2NzogICAgICAgICAgICAgICAgICB7DQo2ODogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDMpOw0KNjk6ICAgICAgICAgICAgICAgICAgfQ0KNzA6ICAgICAgICAgICAgICAgICAgDQo3MTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzI6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2I0KHZvaWQpDQo3MzogICAgICAgICAgICAgICAgICB7DQo3NDogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDQpOw0KNzU6ICAgICAgICAgICAgICAgICAgfQ0KNzY6ICAgICAgICAgICAgICAgICAgDQo3NzogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzg6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2I1KHZvaWQpDQo3OTogICAgICAgICAgICAgICAgICB7DQo4MDogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDUpOw0KODE6ICAgICAgICAgICAgICAgICAgfQ0KODI6ICAgICAgICAgICAgICAgICAgDQo4MzogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODQ6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2I2KHZvaWQpDQo4NTogICAgICAgICAgICAgICAgICB7DQo4NjogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDYpOw0KODc6ICAgICAgICAgICAgICAgICAgfQ0KODg6ICAgICAgICAgICAgICAgICAgDQo4OTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTA6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2I3KHZvaWQpDQo5MTogICAgICAgICAgICAgICAgICB7DQo5MjogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDcpOw0KOTM6ICAgICAgICAgICAgICAgICAgfQ0KOTQ6ICAgICAgICAgICAgICAgICAgDQo5NTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTY6ICAgICAgICAgICAgICAgICAgZ2lycTI2X2I4KHZvaWQpDQo5NzogICAgICAgICAgICAgICAgICB7DQo5ODogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDgpOw0KOTk6ICAgICAgICAgICAgICAgICAgfQ0KMTAwOiAgICAgICAgICAgICAgICAgDQoxMDE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTAyOiAgICAgICAgICAgICAgICAgZ2lycTI2X2I5KHZvaWQpDQoxMDM6ICAgICAgICAgICAgICAgICB7DQoxMDQ6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDkpOw0KMTA1OiAgICAgICAgICAgICAgICAgfQ0KMTA2OiAgICAgICAgICAgICAgICAgDQoxMDc6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTA4OiAgICAgICAgICAgICAgICAgZ2lycTI2X2IxMCh2b2lkKQ0KMTA5OiAgICAgICAgICAgICAgICAgew0KMTEwOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI2X0lELCAxMCk7DQoxMTE6ICAgICAgICAgICAgICAgICB9DQoxMTI6ICAgICAgICAgICAgICAgICANCjExMzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMTQ6ICAgICAgICAgICAgICAgICBnaXJxMjZfYjExKHZvaWQpDQoxMTU6ICAgICAgICAgICAgICAgICB7DQoxMTY6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjZfSUQsIDExKTsNCjExNzogICAgICAgICAgICAgICAgIH0NCjExODogICAgICAgICAgICAgICAgIA0KMTE5OiAgICAgICAgICAgICAgICAgDQoxMjA6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjEyMTogICAgICAgICAgICAgICAgIA0KMTIyOiAgICAgICAgICAgICAgICAgLyogZW5kIGdpcnEyNi5jICovDQoxMjM6ICAgICAgICAgICAgICAgICAvKiogICBAfQ0KMTI0OiAgICAgICAgICAgICAgICAgICovDQoxMjU6ICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMjUuYyAgLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIChjKSAyMDEzIE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnaXJxMjUuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBmb3IgTUlQUyB1c2luZyB2YW5pbGxhIEdDQyBhbmQgTUNIUCBYQzMyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBJU1INCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM0OiAgICAgICAgICAgICAgICAgIA0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICAjaWYgR0lSUTI1X0RJU0FHRyA9PSAwDQozNzogICAgICAgICAgICAgICAgICANCjM4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KMzk6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2lzcih2b2lkKQ0KNDA6ICAgICAgICAgICAgICAgICAgew0KQkZEMDczOTAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDczOTQgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNzM5NiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNzM5OCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA3MzlBICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQ0KQkZEMDczOUMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA3MzlFICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkNCkJGRDA3M0EwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDczQTQgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQ0KQkZEMDczQTYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA3M0FBICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkNCkJGRDA3M0FDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNzNBRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDczQjAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA3M0IyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDczQjQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNzNCNiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNzNCOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3M0JDICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQ0KQkZEMDczQkUgICAgICBDODQxICAgU1cgVjAsIDQoU1ApDQpCRkQwNzNDMCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApDQpCRkQwNzNDMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNzNDNCAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwNzNDNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KNDE6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDE1KTsNCkJGRDA3M0M4ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNzNDQSAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNzNDQyAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTINCkJGRDA3M0QwICA4MDAwNTA2MCAgIE9SSSBWMSwgWkVSTywgLTMyNzY4DQpCRkQwNzNENCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQyOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3M0Q2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNzNEOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNzNEQSAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNzNEQyAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwNzNERSAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkNCkJGRDA3M0UwICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQ0KQkZEMDczRTIgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDczRTYgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA3M0U4ICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pDQpCRkQwNzNFQSAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApDQpCRkQwNzNFQyAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApDQpCRkQwNzNFRSAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA3M0YyICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkNCkJGRDA3M0Y0ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3M0Y2ICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDczRjggIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDczRkEgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDczRkMgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNzNGRSAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3NDAwICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA3NDAyICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA3NDA0ICAwQzAwRjM3QyAgIEpBTFggMHhCREYwMzAwMA0KNDM6ICAgICAgICAgICAgICAgICAgDQo0NDogICAgICAgICAgICAgICAgICAjZWxzZQ0KNDU6ICAgICAgICAgICAgICAgICAgDQo0NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNDc6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2IwKHZvaWQpDQo0ODogICAgICAgICAgICAgICAgICB7DQo0OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDApOw0KNTA6ICAgICAgICAgICAgICAgICAgfQ0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTM6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2IxKHZvaWQpDQo1NDogICAgICAgICAgICAgICAgICB7DQo1NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDEpOw0KNTY6ICAgICAgICAgICAgICAgICAgfQ0KNTc6ICAgICAgICAgICAgICAgICAgDQo1ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTk6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2IyKHZvaWQpDQo2MDogICAgICAgICAgICAgICAgICB7DQo2MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDIpOw0KNjI6ICAgICAgICAgICAgICAgICAgfQ0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjU6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2IzKHZvaWQpDQo2NjogICAgICAgICAgICAgICAgICB7DQo2NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDMpOw0KNjg6ICAgICAgICAgICAgICAgICAgfQ0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzE6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I0KHZvaWQpDQo3MjogICAgICAgICAgICAgICAgICB7DQo3MzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDQpOw0KNzQ6ICAgICAgICAgICAgICAgICAgfQ0KNzU6ICAgICAgICAgICAgICAgICAgDQo3NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzc6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I1KHZvaWQpDQo3ODogICAgICAgICAgICAgICAgICB7DQo3OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDUpOw0KODA6ICAgICAgICAgICAgICAgICAgfQ0KODE6ICAgICAgICAgICAgICAgICAgDQo4MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODM6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I2KHZvaWQpDQo4NDogICAgICAgICAgICAgICAgICB7DQo4NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDYpOw0KODY6ICAgICAgICAgICAgICAgICAgfQ0KODc6ICAgICAgICAgICAgICAgICAgDQo4ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODk6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I3KHZvaWQpDQo5MDogICAgICAgICAgICAgICAgICB7DQo5MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDcpOw0KOTI6ICAgICAgICAgICAgICAgICAgfQ0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTU6ICAgICAgICAgICAgICAgICAgZ2lycTI1X2I4KHZvaWQpDQo5NjogICAgICAgICAgICAgICAgICB7DQo5NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDgpOw0KOTg6ICAgICAgICAgICAgICAgICAgfQ0KOTk6ICAgICAgICAgICAgICAgICAgDQoxMDA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTAxOiAgICAgICAgICAgICAgICAgZ2lycTI1X2I5KHZvaWQpDQoxMDI6ICAgICAgICAgICAgICAgICB7DQoxMDM6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDkpOw0KMTA0OiAgICAgICAgICAgICAgICAgfQ0KMTA1OiAgICAgICAgICAgICAgICAgDQoxMDY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTA3OiAgICAgICAgICAgICAgICAgZ2lycTI1X2IxMCh2b2lkKQ0KMTA4OiAgICAgICAgICAgICAgICAgew0KMTA5OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAxMCk7DQoxMTA6ICAgICAgICAgICAgICAgICB9DQoxMTE6ICAgICAgICAgICAgICAgICANCjExMjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMTM6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjExKHZvaWQpDQoxMTQ6ICAgICAgICAgICAgICAgICB7DQoxMTU6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDExKTsNCjExNjogICAgICAgICAgICAgICAgIH0NCjExNzogICAgICAgICAgICAgICAgIA0KMTE4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjExOTogICAgICAgICAgICAgICAgIGdpcnEyNV9iMTIodm9pZCkNCjEyMDogICAgICAgICAgICAgICAgIHsNCjEyMTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMTIpOw0KMTIyOiAgICAgICAgICAgICAgICAgfQ0KMTIzOiAgICAgICAgICAgICAgICAgDQoxMjQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTI1OiAgICAgICAgICAgICAgICAgZ2lycTI1X2IxMyh2b2lkKQ0KMTI2OiAgICAgICAgICAgICAgICAgew0KMTI3OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAxMyk7DQoxMjg6ICAgICAgICAgICAgICAgICB9DQoxMjk6ICAgICAgICAgICAgICAgICANCjEzMDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzE6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjE0KHZvaWQpDQoxMzI6ICAgICAgICAgICAgICAgICB7DQoxMzM6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDE0KTsNCjEzNDogICAgICAgICAgICAgICAgIH0NCjEzNTogICAgICAgICAgICAgICAgIA0KMTM2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEzNzogICAgICAgICAgICAgICAgIGdpcnEyNV9iMTUodm9pZCkNCjEzODogICAgICAgICAgICAgICAgIHsNCjEzOTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMTUpOw0KMTQwOiAgICAgICAgICAgICAgICAgfQ0KMTQxOiAgICAgICAgICAgICAgICAgDQoxNDI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTQzOiAgICAgICAgICAgICAgICAgZ2lycTI1X2IxNih2b2lkKQ0KMTQ0OiAgICAgICAgICAgICAgICAgew0KMTQ1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAxNik7DQoxNDY6ICAgICAgICAgICAgICAgICB9DQoxNDc6ICAgICAgICAgICAgICAgICANCjE0ODogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNDk6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjE3KHZvaWQpDQoxNTA6ICAgICAgICAgICAgICAgICB7DQoxNTE6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDE3KTsNCjE1MjogICAgICAgICAgICAgICAgIH0NCjE1MzogICAgICAgICAgICAgICAgIA0KMTU0OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE1NTogICAgICAgICAgICAgICAgIGdpcnEyNV9iMTgodm9pZCkNCjE1NjogICAgICAgICAgICAgICAgIHsNCjE1NzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMTgpOw0KMTU4OiAgICAgICAgICAgICAgICAgfQ0KMTU5OiAgICAgICAgICAgICAgICAgDQoxNjA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTYxOiAgICAgICAgICAgICAgICAgZ2lycTI1X2IxOSh2b2lkKQ0KMTYyOiAgICAgICAgICAgICAgICAgew0KMTYzOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAxOSk7DQoxNjQ6ICAgICAgICAgICAgICAgICB9DQoxNjU6ICAgICAgICAgICAgICAgICANCjE2NjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNjc6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjIwKHZvaWQpDQoxNjg6ICAgICAgICAgICAgICAgICB7DQoxNjk6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDIwKTsNCjE3MDogICAgICAgICAgICAgICAgIH0NCjE3MTogICAgICAgICAgICAgICAgIA0KMTcyOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE3MzogICAgICAgICAgICAgICAgIGdpcnEyNV9iMjEodm9pZCkNCjE3NDogICAgICAgICAgICAgICAgIHsNCjE3NTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMjEpOw0KMTc2OiAgICAgICAgICAgICAgICAgfQ0KMTc3OiAgICAgICAgICAgICAgICAgDQoxNzg6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTc5OiAgICAgICAgICAgICAgICAgZ2lycTI1X2IyMih2b2lkKQ0KMTgwOiAgICAgICAgICAgICAgICAgew0KMTgxOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAyMik7DQoxODI6ICAgICAgICAgICAgICAgICB9DQoxODM6ICAgICAgICAgICAgICAgICANCjE4NDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxODU6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjIzKHZvaWQpDQoxODY6ICAgICAgICAgICAgICAgICB7DQoxODc6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDIzKTsNCjE4ODogICAgICAgICAgICAgICAgIH0NCjE4OTogICAgICAgICAgICAgICAgIA0KMTkwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE5MTogICAgICAgICAgICAgICAgIGdpcnEyNV9iMjQodm9pZCkNCjE5MjogICAgICAgICAgICAgICAgIHsNCjE5MzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMjQpOw0KMTk0OiAgICAgICAgICAgICAgICAgfQ0KMTk1OiAgICAgICAgICAgICAgICAgDQoxOTY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTk3OiAgICAgICAgICAgICAgICAgZ2lycTI1X2IyNSh2b2lkKQ0KMTk4OiAgICAgICAgICAgICAgICAgew0KMTk5OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI1X0lELCAyNSk7DQoyMDA6ICAgICAgICAgICAgICAgICB9DQoyMDE6ICAgICAgICAgICAgICAgICANCjIwMjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMDM6ICAgICAgICAgICAgICAgICBnaXJxMjVfYjI2KHZvaWQpDQoyMDQ6ICAgICAgICAgICAgICAgICB7DQoyMDU6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjVfSUQsIDI2KTsNCjIwNjogICAgICAgICAgICAgICAgIH0NCjIwNzogICAgICAgICAgICAgICAgIA0KMjA4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIwOTogICAgICAgICAgICAgICAgIGdpcnEyNV9iMjcodm9pZCkNCjIxMDogICAgICAgICAgICAgICAgIHsNCjIxMTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNV9JRCwgMjcpOw0KMjEyOiAgICAgICAgICAgICAgICAgfQ0KMjEzOiAgICAgICAgICAgICAgICAgDQoyMTQ6ICAgICAgICAgICAgICAgICANCjIxNTogICAgICAgICAgICAgICAgICNlbmRpZg0KMjE2OiAgICAgICAgICAgICAgICAgDQoyMTc6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTI1LmMgKi8NCjIxODogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoyMTk6ICAgICAgICAgICAgICAgICAgKi8NCjIyMDogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnEyNC5jICAtLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnEyNC5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfYmJsZWQuaCINCjM0OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICANCjM3OiAgICAgICAgICAgICAgICAgIHR5cGVkZWYgdm9pZCAoKiBHSVJRMjRfRlBWVTgpKHVpbnQ4X3QpOw0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICANCjQwOiAgICAgICAgICAgICAgICAgIC8qIE1JUFMgTTE0SyBpbnRlcm5hbCBjb3VudGVyIGlzIGNvbm5lY3RlZCB0byBHSVJRMjQgYml0WzBdDQo0MTogICAgICAgICAgICAgICAgICAgKiBJdCBpcyBhIHNpbXBsZSBjb3VudGVyIHdoaWNoIGZpcmVzIGFuIGludGVycnVwdCB3aGVuIGl0cyANCjQyOiAgICAgICAgICAgICAgICAgICAqIGNvdW50IHZhbHVlIGlzIGVxdWFsIHRvIGEgbWF0Y2ggdmFsdWUuDQo0MzogICAgICAgICAgICAgICAgICAgKiANCjQ0OiAgICAgICAgICAgICAgICAgICAqLw0KNDU6ICAgICAgICAgICAgICAgICAgIA0KNDY6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlEyNF9ESVNBR0cgPT0gMA0KNDc6ICAgICAgICAgICAgICAgICAgDQo0ODogICAgICAgICAgICAgICAgICANCjQ5OiAgICAgICAgICAgICAgICAgIHZvaWQgZ2lycTI0X2RmbHRfaGFuZGxlcih1aW50OF90IGludW0pDQo1MDogICAgICAgICAgICAgICAgICB7DQo1MTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyNF9JRF0uRU5fQ0xSID0gKDF1bCA8PCBpbnVtKTsNCjUyOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTI0X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IGludW0pOw0KNTM6ICAgICAgICAgICAgICAgICAgfQ0KNTQ6ICAgICAgICAgICAgICAgICAgDQo1NTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWspKSBtMTRrX2NvdW50ZXJfaGFuZGxlcih1aW50OF90IGludW0pDQo1NjogICAgICAgICAgICAgICAgICB7DQo1NzogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcjsNCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBpbnVtOw0KNjA6ICAgICAgICAgICAgICAgICAgDQo2MTogICAgICAgICAgICAgICAgICAgICAgciA9IF9DUDBfR0VUX0NPVU5UKCk7DQo2MjogICAgICAgICAgICAgICAgICAgICAgciArPSAoTTE0S19USU1FUl9DT01QQVJFKTsNCjYzOiAgICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBvZiBDUDAuQ29tcGFyZSBjbGVhcnMgc3RhdHVzIGluIE0xNEsgKi8NCjY0OiAgICAgICAgICAgICAgICAgICAgICBfQ1AwX1NFVF9DT1VOVChyKTsNCjY1OiAgICAgICAgICAgICAgICAgIA0KNjY6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMjRfSURdLlNPVVJDRSA9ICgxdWwgPDwgMCk7DQo2NzogICAgICAgICAgICAgICAgICANCjY4OiAgICAgICAgICAgICAgICAgIH0NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgLyoNCjcxOiAgICAgICAgICAgICAgICAgICAqIFRPRE8gLSBGcmVlUlRPUyBNMTRLIFNvZnR3YXJlIEludGVycnVwdCAwIGhhbmRsZXINCjcyOiAgICAgICAgICAgICAgICAgICAqIGlzIHZQb3J0WWllbGRJU1IgaW4gcG9ydF9hc20uUw0KNzM6ICAgICAgICAgICAgICAgICAgICogdlBvcnRZaWVsZElTUiB3YXMgZGVzaWduZWQgdG8gYmUgZW50ZXJlZCBkaXJlY3RseSBieSB0aGUNCjc0OiAgICAgICAgICAgICAgICAgICAqIENQVSBub3QgdmlhIGEgaGlnaGVyIGxldmVsIElTUiBoYW5kbGVyLg0KNzU6ICAgICAgICAgICAgICAgICAgICogT25lIHdvcmstYXJvdW5kIGlzIHRvIG1vZGlmeSB2UG9ydFlpZWxkSVNSIHRvIGRvIHRoZSB3b3JrDQo3NjogICAgICAgICAgICAgICAgICAgKiBvZiBnaXJxMjRfaGFuZGxlciBiZWxvdy4gSXQgbXVzdCBkZXRlcm1pbmUgd2hpY2ggR0lSUTI0IHNvdXJjZQ0KNzc6ICAgICAgICAgICAgICAgICAgICogd2FzIGFjdGl2ZTogTTE0SyBjb3VudGVyLCBTb2Z0SVJRMCwgb3IgU29mdElSUTEuDQo3ODogICAgICAgICAgICAgICAgICAgKi8NCjc5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIG0xNGtfc29mdF9pcnEwKHVpbnQ4X3QgaW51bSkNCjgwOiAgICAgICAgICAgICAgICAgIHsNCjgxOiAgICAgICAgICAgICAgICAgICAgICAodm9pZCkgaW51bTsNCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMjRfSURdLlNPVVJDRSA9ICgxdWwgPDwgMSk7DQo4NDogICAgICAgICAgICAgICAgICANCjg1OiAgICAgICAgICAgICAgICAgIH0NCjg2OiAgICAgICAgICAgICAgICAgIA0KODc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgbTE0a19zb2Z0X2lycTEodWludDhfdCBpbnVtKQ0KODg6ICAgICAgICAgICAgICAgICAgew0KODk6ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBpbnVtOw0KOTA6ICAgICAgICAgICAgICAgICAgDQo5MTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyNF9JRF0uU09VUkNFID0gKDF1bCA8PCAyKTsNCjkyOiAgICAgICAgICAgICAgICAgICAgICANCjkzOiAgICAgICAgICAgICAgICAgIH0NCjk0OiAgICAgICAgICAgICAgICAgIA0KOTU6ICAgICAgICAgICAgICAgICAgdm9pZCBnaXJxMjRfYl8wXzIoIHZvaWQgKQ0KOTY6ICAgICAgICAgICAgICAgICAgew0KOTc6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGQ7DQo5ODogICAgICAgICAgICAgICAgICANCjk5OiAgICAgICAgICAgICAgICAgICAgICBkID0gSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyNF9JRF0uUkVTVUxUICYgKEdJUlEyNF9TUkNfTUFTSyk7DQoxMDA6ICAgICAgICAgICAgICAgICANCjEwMTogICAgICAgICAgICAgICAgICAgICBpZiAoIGQgJiAoMXVsIDw8IDApICkNCjEwMjogICAgICAgICAgICAgICAgICAgICB7DQoxMDM6ICAgICAgICAgICAgICAgICAgICAgICAgIG0xNGtfY291bnRlcl9oYW5kbGVyKDApOw0KMTA0OiAgICAgICAgICAgICAgICAgICAgIH0NCjEwNTogICAgICAgICAgICAgICAgIA0KMTA2OiAgICAgICAgICAgICAgICAgICAgIGlmICggZCAmICgxdWwgPDwgMikgKQ0KMTA3OiAgICAgICAgICAgICAgICAgICAgIHsNCjEwODogICAgICAgICAgICAgICAgICAgICAgICAgbTE0a19zb2Z0X2lycTEoMik7DQoxMDk6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTEwOiAgICAgICAgICAgICAgICAgfQ0KMTExOiAgICAgICAgICAgICAgICAgDQoxMTI6ICAgICAgICAgICAgICAgICANCjExMzogICAgICAgICAgICAgICAgIGNvbnN0IEdJUlEyNF9GUFZVOCBnaXJxMjRfaHRhYmxlW0dJUlEyNF9OVU1fU09VUkNFU10gPQ0KMTE0OiAgICAgICAgICAgICAgICAgew0KMTE1OiAgICAgICAgICAgICAgICAgICAgIG0xNGtfY291bnRlcl9oYW5kbGVyLCAgIC8qIG0xNGtfY291bnRlcl9oYW5kbGVyLCAqLw0KMTE2OiAgICAgICAgICAgICAgICAgICAgIG0xNGtfc29mdF9pcnEwLCAgICAgICAgIC8qIG0xNGtfc29mdF9pcnEwLCAqLw0KMTE3OiAgICAgICAgICAgICAgICAgICAgIG0xNGtfc29mdF9pcnExLCAgICAgICAgIC8qIG0xNGtfc29mdF9pcnExICovDQoxMTg6ICAgICAgICAgICAgICAgICB9Ow0KMTE5OiAgICAgICAgICAgICAgICAgDQoxMjA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjEyMTogICAgICAgICAgICAgICAgIGdpcnEyNF9pc3Iodm9pZCkNCjEyMjogICAgICAgICAgICAgICAgIHsNCjEyMzogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkOw0KMTI0OiAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYml0cG9zOw0KMTI1OiAgICAgICAgICAgICAgICAgDQoxMjY6ICAgICAgICAgICAgICAgICAgICAgZCA9IEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMjRfSURdLlJFU1VMVCAmIChHSVJRMjRfU1JDX01BU0spOw0KMTI3OiAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggMCAhPSBkICkNCjEyODogICAgICAgICAgICAgICAgICAgICB7DQoxMjk6ICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHBvcyA9IDMxIC0gKCh1aW50OF90KV9fYnVpbHRpbl9jbHooZCkgJiAweDFGKTsNCjEzMDogICAgICAgICAgICAgICAgICAgICAgICAgKGdpcnEyNF9odGFibGVbYml0cG9zXSkoYml0cG9zKTsNCjEzMTogICAgICAgICAgICAgICAgICAgICAgICAgZCAmPSB+KDF1bCA8PCBiaXRwb3MpOw0KMTMyOiAgICAgICAgICAgICAgICAgICAgIH0NCjEzMzogICAgICAgICAgICAgICAgIH0NCjEzNDogICAgICAgICAgICAgICAgIA0KMTM1OiAgICAgICAgICAgICAgICAgI2Vsc2UNCjEzNjogICAgICAgICAgICAgICAgIA0KMTM3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEzODogICAgICAgICAgICAgICAgIGdpcnEyNF9iMCh2b2lkKQ0KMTM5OiAgICAgICAgICAgICAgICAgew0KQkZEMDY1QTggIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDY1QUMgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNjVBRSAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNjVCMCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA2NUIyICA0RkVEMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2MQ0KQkZEMDY1QjQgICAgICA0RkVEICAgQURESVUgU1AsIFNQLCAtNDANCkJGRDA2NUI2ICAgICAgQ0I2OSAgIFNXIEsxLCAzNihTUCkNCkJGRDA2NUI4ICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDY1QkMgICAgICBDQjQ4ICAgU1cgSzAsIDMyKFNQKQ0KQkZEMDY1QkUgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA2NUMyICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkNCkJGRDA2NUM0ICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNjVDNiAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDY1QzggIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA2NUNBICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDY1Q0MgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNjVDRSAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNjVEMCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA2NUQ0ICAgICAgQzg2NCAgIFNXIFYxLCAxNihTUCkNCkJGRDA2NUQ2ICAgICAgQzg0MyAgIFNXIFYwLCAxMihTUCkNCkJGRDA2NUQ4ICAgICAgNDg2OCAgIExXIFYxLCAzMihTUCkNCkJGRDA2NURBICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA2NURDICAgICAgQ0JDNSAgIFNXIFM4LCAyMChTUCkNCkJGRDA2NURFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoxNDA6ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcjsNCjE0MTogICAgICAgICAgICAgICAgICAgICANCjE0MjogICAgICAgICAgICAgICAgICAgICByID0gX0NQMF9HRVRfQ09VTlQoKTsNCkJGRDA2NUUwICAwMEZDMDA0OSAgIE1GQzAgVjAsIENvdW50DQpCRkQwNjVFNCAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCjE0MzogICAgICAgICAgICAgICAgICAgICByICs9IChNMTRLX1RJTUVSX0NPTVBBUkUpOw0KQkZEMDY1RTggIDAwMDBGQzdFICAgTFcgVjEsIDAoUzgpDQpCRkQwNjVFQyAgMDBCNzQxQTIgICBMVUkgVjAsIDB4QjcNCkJGRDA2NUYwICAxQjAwNTA0MiAgIE9SSSBWMCwgVjAsIDY5MTINCkJGRDA2NUYyICAwNTI2MUIwMCAgIFNCIFQ4LCAxMzE4KFpFUk8pDQpCRkQwNjVGNCAgICAgIDA1MjYgICBBRERVIFYwLCBWMSwgVjANCkJGRDA2NUY2ICAwMDAwRjg1RSAgIFNXIFYwLCAwKFM4KQ0KMTQ0OiAgICAgICAgICAgICAgICAgICAgIF9DUDBfU0VUX0NPVU5UKHIpOw0KQkZEMDY1RkEgIDAwMDBGQzVFICAgTFcgVjAsIDAoUzgpDQpCRkQwNjVGRSAgMDJGQzAwNDkgICBNVEMwIFYwLCBDb3VudA0KQkZEMDY2MDAgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDY2MDIgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA2NjA0ICA0MUEyMTgwMCAgIFNCIFpFUk8sIDE2ODAyKFpFUk8pDQoxNDU6ICAgICAgICAgICAgICAgICANCjE0NjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTI0X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDApOyAgICANCkJGRDA2NjA2ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNjYwOCAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNjYwQSAgQzAwMDUwNDIgICBPUkkgVjAsIFYwLCAtMTYzODQNCkJGRDA2NjBFICAgICAgRUQ4MSAgIExJIFYxLCAxDQpCRkQwNjYxMCAgMDEwMEY4NjIgICBTVyBWMSwgMjU2KFYwKQ0KMTQ3OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDY2MTQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA2NjE2ICAgICAgNDg0OCAgIExXIFYwLCAzMihTUCkNCkJGRDA2NjE4ICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA2NjFBICAgICAgNEJDNSAgIExXIFM4LCAyMChTUCkNCkJGRDA2NjFDICAgICAgNDg2NCAgIExXIFYxLCAxNihTUCkNCkJGRDA2NjFFICAgICAgNDg0MyAgIExXIFYwLCAxMihTUCkNCkJGRDA2NjIwICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA2NjI0ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNjYyNiAgNEI0OTE4MDAgICBTQiBaRVJPLCAxOTI3MyhaRVJPKQ0KQkZEMDY2MjggICAgICA0QjQ5ICAgTFcgSzAsIDM2KFNQKQ0KQkZEMDY2MkEgICAgICA0QjY3ICAgTFcgSzEsIDI4KFNQKQ0KQkZEMDY2MkMgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNjYzMCAgICAgIDRCNDggICBMVyBLMCwgMzIoU1ApDQpCRkQwNjYzMiAgICAgIDRDMTUgICBBRERJVSBTUCwgU1AsIDQwDQpCRkQwNjYzNCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA2NjM2ICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA2NjM4ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA2NjNBICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDY2M0MgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNjYzRSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNjY0MCAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNjY0MiAgNEZFREYzN0MgICBKQUxYIDB4QkRGMTNGQjQNCjE0ODogICAgICAgICAgICAgICAgIA0KMTQ5OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE1MDogICAgICAgICAgICAgICAgIGdpcnEyNF9iMSh2b2lkKQ0KMTUxOiAgICAgICAgICAgICAgICAgew0KQkZEMDQ2NUMgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDQ2NjAgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNDY2MiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNDY2NCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA0NjY2ICA0RkM1MTBGQyAgIEFEREkgQTMsIEdQLCAyMDQyMQ0KQkZEMDQ2NjggICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwDQpCRkQwNDY2QSAgICAgIENCN0QgICBTVyBLMSwgMTE2KFNQKQ0KQkZEMDQ2NkMgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzDQpCRkQwNDY3MCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQ0KQkZEMDQ2NzIgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA0Njc2ICAgICAgQ0I3QiAgIFNXIEsxLCAxMDgoU1ApDQpCRkQwNDY3OCAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDQ2N0EgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA0NjdDICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNDY3RSAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA0NjgwICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDQ2ODIgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDQ2ODQgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNDY4OCAgICAgIEM4NjcgICBTVyBWMSwgMjgoU1ApDQpCRkQwNDY4QSAgICAgIEM4NDYgICBTVyBWMCwgMjQoU1ApDQpCRkQwNDY4QyAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQ0KQkZEMDQ2OEUgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDQ2OTAgIDAwMTE0MEEzICAgQk5FWkMgVjEsIDB4QkZEMDQ2QjYNCkJGRDA0Njk0ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkNCkJGRDA0Njk2ICAgICAgQ0JENiAgIFNXIFM4LCA4OChTUCkNCkJGRDA0Njk4ICAgICAgQ0IzNSAgIFNXIFQ5LCA4NChTUCkNCkJGRDA0NjlBICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkNCkJGRDA0NjlDICAgICAgQzlGMyAgIFNXIFQ3LCA3NihTUCkNCkJGRDA0NjlFICAgICAgQzlEMiAgIFNXIFQ2LCA3MihTUCkNCkJGRDA0NkEwICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkNCkJGRDA0NkEyICAgICAgQzk5MCAgIFNXIFQ0LCA2NChTUCkNCkJGRDA0NkE0ICAgICAgQzk2RiAgIFNXIFQzLCA2MChTUCkNCkJGRDA0NkE2ICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkNCkJGRDA0NkE4ICAgICAgQzkyRCAgIFNXIFQxLCA1MihTUCkNCkJGRDA0NkFBICAgICAgQzkwQyAgIFNXIFQwLCA0OChTUCkNCkJGRDA0NkFDICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkNCkJGRDA0NkFFICAgICAgQzhDQSAgIFNXIEEyLCA0MChTUCkNCkJGRDA0NkIwICAgICAgQzhBOSAgIFNXIEExLCAzNihTUCkNCkJGRDA0NkIyICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkNCkJGRDA0NkI0ICAgICAgQzgyNSAgIFNXIEFULCAyMChTUCkNCkJGRDA0NkI2ICAgICAgNDY0MiAgIE1GTE8gVjANCkJGRDA0NkI4ICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApDQpCRkQwNDZCQSAgICAgIDQ2MDMgICBNRkhJIFYxDQpCRkQwNDZCQyAgICAgIEM4NzggICBTVyBWMSwgOTYoU1ApDQpCRkQwNDZCRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMTUyOiAgICAgICAgICAgICAgICAgDQoxNTM6ICAgICAgICAgICAgICAgICAgICAgX0NQMF9CSUNfQ0FVU0UoMHgxMDB1bCk7DQpCRkQwNDZDMCAgMDEwMDMwNDAgICBBRERJVSBWMCwgWkVSTywgMjU2DQpCRkQwNDZDMiAgMDA2RDAxMDAgICBQUkVDUi5RQi5QSCBaRVJPLCBaRVJPLCBUMA0KQkZEMDQ2QzQgIDAwRkMwMDZEICAgTUZDMCBWMSwgQ2F1c2UNCkJGRDA0NkM2ICAwQzAwMDBGQyAgIFNMTCBBMywgR1AsIDENCkJGRDA0NkM4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDQ2Q0EgICAgICA0NDEyICAgTk9UMTYgVjAsIFYwDQpCRkQwNDZDQyAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA0NkNFICAwMkZDMDA0RCAgIE1UQzAgVjAsIENhdXNlDQpCRkQwNDZEMCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNDZEMiAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDQ2RDQgIEVFMTAxODAwICAgU0IgWkVSTywgLTQ1OTIoWkVSTykNCjE1NDogICAgICAgICAgICAgICAgICANCjE1NTogICAgICAgICAgICAgICAgICAgICBqdHZpY19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTI0X0lELCAxKTsNCkJGRDA0NkQ2ICAgICAgRUUxMCAgIExJIEEwLCAxNg0KQkZEMDQ2RDggICAgICBFRTgxICAgTEkgQTEsIDENCkJGRDA0NkRBICA0NEZBNzdFOCAgIEpBTFMganR2aWNfY2xyX3NvdXJjZQ0KQkZEMDQ2REMgICAgICA0NEZBICAgT1IxNiBBMywgVjANCkJGRDA0NkRFICAgICAgMEMwMCAgIE5PUA0KMTU2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDQ2RTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA0NkUyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApDQpCRkQwNDZFNCAgM0Q3QzAwMDIgICBNVExPIFYwDQpCRkQwNDZFNiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApDQpCRkQwNDZFOCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApDQpCRkQwNDZFQSAgMkQ3QzAwMDMgICBNVEhJIFYxDQpCRkQwNDZFQyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MA0KQkZEMDQ2RUUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkNCkJGRDA0NkYwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA0NkYyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA0NzFDDQpCRkQwNDZGNiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApDQpCRkQwNDZGOCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApDQpCRkQwNDZGQSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApDQpCRkQwNDZGQyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApDQpCRkQwNDZGRSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApDQpCRkQwNDcwMCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApDQpCRkQwNDcwMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApDQpCRkQwNDcwNCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApDQpCRkQwNDcwNiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApDQpCRkQwNDcwOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApDQpCRkQwNDcwQSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApDQpCRkQwNDcwQyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApDQpCRkQwNDcwRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApDQpCRkQwNDcxMCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApDQpCRkQwNDcxMiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApDQpCRkQwNDcxNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApDQpCRkQwNDcxNiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApDQpCRkQwNDcxOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNDcxQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApDQpCRkQwNDcxQyAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNDcyMCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDQ3MjIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykNCkJGRDA0NzI0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApDQpCRkQwNDcyNiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQ0KQkZEMDQ3MjggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNDcyQyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQ0KQkZEMDQ3MkUgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjANCkJGRDA0NzMwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDQ3MzIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDQ3MzQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDQ3MzYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNDczOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA0NzNBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA0NzNDICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA0NzNFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNA0KMTU3OiAgICAgICAgICAgICAgICAgDQoxNTg6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTU5OiAgICAgICAgICAgICAgICAgZ2lycTI0X2IyKHZvaWQpDQoxNjA6ICAgICAgICAgICAgICAgICB7DQpCRkQwNDc0MCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNDc0NCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA0NzQ2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA0NzQ4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDQ3NEEgIDRGQzUxMEZDICAgQURESSBBMywgR1AsIDIwNDIxDQpCRkQwNDc0QyAgICAgIDRGQzUgICBBRERJVSBTUCwgU1AsIC0xMjANCkJGRDA0NzRFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApDQpCRkQwNDc1MCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA0NzU0ICAgICAgQ0I1QyAgIFNXIEswLCAxMTIoU1ApDQpCRkQwNDc1NiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDQ3NUEgICAgICBDQjdCICAgU1cgSzEsIDEwOChTUCkNCkJGRDA0NzVDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNDc1RSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDQ3NjAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA0NzYyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDQ3NjQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNDc2NiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNDc2OCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA0NzZDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkNCkJGRDA0NzZFICAgICAgQzg0NiAgIFNXIFYwLCAyNChTUCkNCkJGRDA0NzcwICAgICAgNDg3QyAgIExXIFYxLCAxMTIoU1ApDQpCRkQwNDc3MiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNDc3NCAgMDAxMTQwQTMgICBCTkVaQyBWMSwgMHhCRkQwNDc5QQ0KQkZEMDQ3NzggICAgICBDQkY3ICAgU1cgUkEsIDkyKFNQKQ0KQkZEMDQ3N0EgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQ0KQkZEMDQ3N0MgICAgICBDQjM1ICAgU1cgVDksIDg0KFNQKQ0KQkZEMDQ3N0UgICAgICBDQjE0ICAgU1cgVDgsIDgwKFNQKQ0KQkZEMDQ3ODAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQ0KQkZEMDQ3ODIgICAgICBDOUQyICAgU1cgVDYsIDcyKFNQKQ0KQkZEMDQ3ODQgICAgICBDOUIxICAgU1cgVDUsIDY4KFNQKQ0KQkZEMDQ3ODYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQ0KQkZEMDQ3ODggICAgICBDOTZGICAgU1cgVDMsIDYwKFNQKQ0KQkZEMDQ3OEEgICAgICBDOTRFICAgU1cgVDIsIDU2KFNQKQ0KQkZEMDQ3OEMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQ0KQkZEMDQ3OEUgICAgICBDOTBDICAgU1cgVDAsIDQ4KFNQKQ0KQkZEMDQ3OTAgICAgICBDOEVCICAgU1cgQTMsIDQ0KFNQKQ0KQkZEMDQ3OTIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQ0KQkZEMDQ3OTQgICAgICBDOEE5ICAgU1cgQTEsIDM2KFNQKQ0KQkZEMDQ3OTYgICAgICBDODg4ICAgU1cgQTAsIDMyKFNQKQ0KQkZEMDQ3OTggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQ0KQkZEMDQ3OUEgICAgICA0NjQyICAgTUZMTyBWMA0KQkZEMDQ3OUMgICAgICBDODU5ICAgU1cgVjAsIDEwMChTUCkNCkJGRDA0NzlFICAgICAgNDYwMyAgIE1GSEkgVjENCkJGRDA0N0EwICAgICAgQzg3OCAgIFNXIFYxLCA5NihTUCkNCkJGRDA0N0EyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoxNjE6ICAgICAgICAgICAgICAgICANCjE2MjogICAgICAgICAgICAgICAgICAgICBfQ1AwX0JJQ19DQVVTRSgweDIwMHVsKTsNCkJGRDA0N0E0ICAwMjAwMzA0MCAgIEFERElVIFYwLCBaRVJPLCA1MTINCkJGRDA0N0E2ICAwMDZEMDIwMCAgIFBSRUNSLlFCLlBIIFpFUk8sIFpFUk8sIFMwDQpCRkQwNDdBOCAgMDBGQzAwNkQgICBNRkMwIFYxLCBDYXVzZQ0KQkZEMDQ3QUEgIDBDMDAwMEZDICAgU0xMIEEzLCBHUCwgMQ0KQkZEMDQ3QUMgICAgICAwQzAwICAgTk9QDQpCRkQwNDdBRSAgICAgIDQ0MTIgICBOT1QxNiBWMCwgVjANCkJGRDA0N0IwICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDQ3QjIgIDAyRkMwMDREICAgTVRDMCBWMCwgQ2F1c2UNCkJGRDA0N0I0ICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA0N0I2ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNDdCOCAgRUUxMDE4MDAgICBTQiBaRVJPLCAtNDU5MihaRVJPKQ0KMTYzOiAgICAgICAgICAgICAgICAgDQoxNjQ6ICAgICAgICAgICAgICAgICAgICAganR2aWNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyNF9JRCwgMik7DQpCRkQwNDdCQSAgICAgIEVFMTAgICBMSSBBMCwgMTYNCkJGRDA0N0JDICAgICAgRUU4MiAgIExJIEExLCAyDQpCRkQwNDdCRSAgNDRGQTc3RTggICBKQUxTIGp0dmljX2Nscl9zb3VyY2UNCkJGRDA0N0MwICAgICAgNDRGQSAgIE9SMTYgQTMsIFYwDQpCRkQwNDdDMiAgICAgIDBDMDAgICBOT1ANCjE2NTogICAgICAgICAgICAgICAgIH0NCkJGRDA0N0M0ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNDdDNiAgICAgIDQ4NTkgICBMVyBWMCwgMTAwKFNQKQ0KQkZEMDQ3QzggIDNEN0MwMDAyICAgTVRMTyBWMA0KQkZEMDQ3Q0EgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQ0KQkZEMDQ3Q0MgICAgICA0ODc4ICAgTFcgVjEsIDk2KFNQKQ0KQkZEMDQ3Q0UgIDJEN0MwMDAzICAgTVRISSBWMQ0KQkZEMDQ3RDAgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDANCkJGRDA0N0QyICAgICAgNDg1QyAgIExXIFYwLCAxMTIoU1ApDQpCRkQwNDdENCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNDdENiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNDgwMA0KQkZEMDQ3REEgICAgICA0QkY3ICAgTFcgUkEsIDkyKFNQKQ0KQkZEMDQ3REMgICAgICA0QkQ2ICAgTFcgUzgsIDg4KFNQKQ0KQkZEMDQ3REUgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQ0KQkZEMDQ3RTAgICAgICA0QjE0ICAgTFcgVDgsIDgwKFNQKQ0KQkZEMDQ3RTIgICAgICA0OUYzICAgTFcgVDcsIDc2KFNQKQ0KQkZEMDQ3RTQgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQ0KQkZEMDQ3RTYgICAgICA0OUIxICAgTFcgVDUsIDY4KFNQKQ0KQkZEMDQ3RTggICAgICA0OTkwICAgTFcgVDQsIDY0KFNQKQ0KQkZEMDQ3RUEgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQ0KQkZEMDQ3RUMgICAgICA0OTRFICAgTFcgVDIsIDU2KFNQKQ0KQkZEMDQ3RUUgICAgICA0OTJEICAgTFcgVDEsIDUyKFNQKQ0KQkZEMDQ3RjAgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQ0KQkZEMDQ3RjIgICAgICA0OEVCICAgTFcgQTMsIDQ0KFNQKQ0KQkZEMDQ3RjQgICAgICA0OENBICAgTFcgQTIsIDQwKFNQKQ0KQkZEMDQ3RjYgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQ0KQkZEMDQ3RjggICAgICA0ODg4ICAgTFcgQTAsIDMyKFNQKQ0KQkZEMDQ3RkEgICAgICA0ODY3ICAgTFcgVjEsIDI4KFNQKQ0KQkZEMDQ3RkMgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDQ3RkUgICAgICA0ODI1ICAgTFcgQVQsIDIwKFNQKQ0KQkZEMDQ4MDAgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDQ4MDQgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA0ODA2ICA0QjVEMTgwMCAgIFNCIFpFUk8sIDE5MjkzKFpFUk8pDQpCRkQwNDgwOCAgICAgIDRCNUQgICBMVyBLMCwgMTE2KFNQKQ0KQkZEMDQ4MEEgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkNCkJGRDA0ODBDICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQw0KQkZEMDQ4MTAgICAgICA0QjVDICAgTFcgSzAsIDExMihTUCkNCkJGRDA0ODEyICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwDQpCRkQwNDgxNCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA0ODE2ICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA0ODE4ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA0ODFBICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDQ4MUMgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNDgxRSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNDgyMCAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNDgyMiAgNEZFREYzN0MgICBKQUxYIDB4QkRGMTNGQjQNCjE2NjogICAgICAgICAgICAgICAgIA0KMTY3OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxNjg6ICAgICAgICAgICAgICAgICANCjE2OTogICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMjQuYyAqLw0KMTcwOiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjE3MTogICAgICAgICAgICAgICAgICAqLw0KMTcyOiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTIzLmMgIC0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTIzLmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9iYmxlZC5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgIA0KMzc6ICAgICAgICAgICAgICAgICAgdHlwZWRlZiB2b2lkICgqIEdJUlEyM19GUFZVOCkodWludDhfdCk7DQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMjNfRElTQUdHID09IDANCjQwOiAgICAgICAgICAgICAgICAgIA0KNDE6ICAgICAgICAgICAgICAgICAgLyoNCjQyOiAgICAgICAgICAgICAgICAgICAqIEZyZWVSVE9TIElTUiBmb3IgSFcgdGltZXIgdXNlZCBhcyBSVE9TIHRpY2suDQo0MzogICAgICAgICAgICAgICAgICAgKiBJbXBsZW1lbnRlZCBpbiBNRUMxNHh4IEZyZWVSVE9TIHBvcnRpbmcgbGF5ZXIsIHBvcnRfYXNtLlMNCjQ0OiAgICAgICAgICAgICAgICAgICAqIEl0IHNhdmUvcmVzdG9yZXMgQ1BVIGNvbnRleHQgYW5kIGNsZWFycyBIVyB0aW1lciBpbnRlcnJ1cHQgDQo0NTogICAgICAgICAgICAgICAgICAgKiBzdGF0dXMgaW4gSlRWSUMuIE9uIGVhY2ggdGltZXIgdGljayBpdCBjaGVja3MgaWYgYW55IHRhc2sgDQo0NjogICAgICAgICAgICAgICAgICAgKiByZXF1aXJlcyBzZXJ2aWNlLiBJZiB5ZXMgdGhlbiBpdCB0cmlnZ2VycyB0aGUgUGVuZFNWIGxvdyANCjQ3OiAgICAgICAgICAgICAgICAgICAqIHByaW9yaXR5IHNvZnR3YXJlIGludGVycnVwdC4NCjQ4OiAgICAgICAgICAgICAgICAgICAqIElzc3VlOg0KNDk6ICAgICAgICAgICAgICAgICAgICogV2hlbiBhZ2dyZWdhdGVkIGdpcnEyM19pc3Igc2F2ZSBDUFUgY29udGV4dCBidXQgdGhpcyBjb250ZXh0IA0KNTA6ICAgICAgICAgICAgICAgICAgICogaXMgbm90IHRoZSBzYW1lIGFzIGEgRnJlZVJUT1MgY29udGV4dCBzYXZlLiBJZiB0aGUgUlRPUyB0aW1lciANCjUxOiAgICAgICAgICAgICAgICAgICAqIGlzIGFjdGl2ZSB0aGVuIGdpcnEyM19pc3Igd291bGQgY2FsbCB2UG9ydFRpY2tJbnRlcnJ1cHRIYW5kbGVyIA0KNTI6ICAgICAgICAgICAgICAgICAgICogd2hpY2ggdXNlcyBGcmVlUlRPUyBwb3J0U0FWRV9DT05URVhUIG1hY3JvIHRvIHNhdmUgUlRPUyArIENQVSANCjUzOiAgICAgICAgICAgICAgICAgICAqIGNvbnRleHQuIEF0IHRoaXMgcG9pbnQgeW91IGhhdmUgdHdvIGNvbnRleHQgc2F2ZXMgb24gdGhlIHN0YWNrLg0KNTQ6ICAgICAgICAgICAgICAgICAgICogVGhlcmUgaXMgYSBwcm9ibGVtOg0KNTU6ICAgICAgICAgICAgICAgICAgICogdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlciBkb2VzIG5vdCByZXR1cm4gYnV0IGV4aXRzIHVzaW5nIA0KNTY6ICAgICAgICAgICAgICAgICAgICogcG9ydFJFU1RPUkVfQ09OVEVYVC4gVGhpcyBtZWFucyB0aGUgY29udGV4dCBzYXZlIHBlcmZvcm1lZCANCjU3OiAgICAgICAgICAgICAgICAgICAqIGJ5IGFnZ3JlZ2F0ZWQgZ2lycTIzX2lzciBpcyBsZWZ0IG9uIHRoZSBzdGFjay4gRXZlbnR1YWxseSANCjU4OiAgICAgICAgICAgICAgICAgICAqIGEgc3RhY2sgb3ZlcmZsb3cgd2lsbCBvY2N1ci4NCjU5OiAgICAgICAgICAgICAgICAgICAqIA0KNjA6ICAgICAgICAgICAgICAgICAgICogU29sdXRpb25zOg0KNjE6ICAgICAgICAgICAgICAgICAgICogMS4gdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlciBtdXN0IGJlIG1vZGlmaWVkIHRvIGhhbmRsZSBzY2FuIA0KNjI6ICAgICAgICAgICAgICAgICAgICogICAgR0lSUTIzIFJlc3VsdCBiaXRzIGFuZCBhbGwgdGhlIHJlc3BlY3RpdmUgaGFuZGxlci4gQWxsIA0KNjM6ICAgICAgICAgICAgICAgICAgICogICAgb3RoZXIgR0lSUTIzIHNvdXJjZSBhcmUgY2FsbGVkIGFzIGhvb2sgZnVuY3Rpb25zLg0KNjQ6ICAgICAgICAgICAgICAgICAgICogIA0KNjU6ICAgICAgICAgICAgICAgICAgICogMi4gRG8gbm90IHVzZSB2UG9ydFRpY2tJbnRlcnJ1cHRIYW5kbGVyLg0KNjY6ICAgICAgICAgICAgICAgICAgICogICAgTW9kaWZ5IGdpcnEyM19pc3IgaGVyZSB0byB1c2UgRnJlZVJUT1MgcG9ydFNBVkVfQ09OVEVYVCANCjY3OiAgICAgICAgICAgICAgICAgICAqICAgIGFuZCBwb3J0UkVTVE9SRV9DT05URVhUIG1hY3Jvcy4gDQo2ODogICAgICAgICAgICAgICAgICAgKiAgICBJZiBSVE9TIHRpbWVyIGlzIGFjdGl2ZSBpbnRlcnJ1cHQgdGhlbiBjYWxsIHZQb3J0SW5jcmVtZW50VGljayANCjY5OiAgICAgICAgICAgICAgICAgICAqICAgIGFzIHZQb3J0VGlja0ludGVycnVwdEhhbmRsZXIgZG9lcy4NCjcwOiAgICAgICAgICAgICAgICAgICAqICAgIEZvciBhbGwgb3RoZXIgR0lSUTIzIHNvdXJjZXMgY2FsbCB0aGUgcmVzcGVjdGl2ZSBoYW5kbGVycy4NCjcxOiAgICAgICAgICAgICAgICAgICAqICANCjcyOiAgICAgICAgICAgICAgICAgICAqICBOT1RFOiBmb3IgYm90aCBvZiB0aGUgYWJvdmUgc29sdXRpb25zIGEgd2UgbXVzdCBlaXRoZXI6DQo3MzogICAgICAgICAgICAgICAgICAgKiAgQS4gU2VydmljZSBvbmUgc291cmNlIG9ubHkgcmVzdWx0aW5nIGluIEdJUlEyMyBmaXJpbmcgbXVsdGlwbGUgDQo3NDogICAgICAgICAgICAgICAgICAgKiAgICAgdGltZXMgaWYgbW9yZSB0aGFuIG9uZSBzb3VyY2UgaXMgYWN0aXZlLg0KNzU6ICAgICAgICAgICAgICAgICAgICogIEIuIFNlcnZpY2UgYWxsIGFjdGl2ZSBzb3VyY2VzIHdpdGggUlRPUyBUaW1lciBjaGVja2VkIGZpcnN0Lg0KNzY6ICAgICAgICAgICAgICAgICAgICogIA0KNzc6ICAgICAgICAgICAgICAgICAgICogIFdlIHdpbGwgaW1wbGVtZW50IDFBIHdpdGggYSBzaW5nbGUgaG9vayBmb3IgYWxsIG90aGVyIHNvdXJjZXMuDQo3ODogICAgICAgICAgICAgICAgICAgKiAgDQo3OTogICAgICAgICAgICAgICAgICAgKi8NCjgwOiAgICAgICAgICAgICAgICAgIA0KODE6ICAgICAgICAgICAgICAgICAgZXh0ZXJuIHZvaWQgdlBvcnRJbmNyZW1lbnRUaWNrKHZvaWQpOw0KODI6ICAgICAgICAgICAgICAgICAgDQo4MzogICAgICAgICAgICAgICAgICB2b2lkIGdpcnEyM19kZmx0X2hhbmRsZXIodWludDhfdCBpbnVtKQ0KODQ6ICAgICAgICAgICAgICAgICAgew0KODU6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMjNfSURdLkVOX0NMUiA9ICgxdWwgPDwgaW51bSk7DQo4NjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyM19JRF0uU09VUkNFID0gKDF1bCA8PCBpbnVtKTsNCjg3OiAgICAgICAgICAgICAgICAgIH0NCjg4OiAgICAgICAgICAgICAgICAgIA0KODk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgcnRvc190bXJfaGFuZGxlcih1aW50OF90IGludW0pDQo5MDogICAgICAgICAgICAgICAgICB7DQo5MTogICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGludW07DQo5MjogICAgICAgICAgICAgICAgICANCjkzOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTIzX0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDQpOw0KOTQ6ICAgICAgICAgICAgICAgICAgfQ0KOTU6ICAgICAgICAgICAgICAgICAgDQo5NjogICAgICAgICAgICAgICAgICBjb25zdCBHSVJRMjNfRlBWVTggZ2lycTIzX2h0YWJsZVtHSVJRMjNfTlVNX1NPVVJDRVNdID0NCjk3OiAgICAgICAgICAgICAgICAgIHsNCjk4OiAgICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiBidG1yMF9oYW5kbGVyLCAqLw0KOTk6ICAgICAgICAgICAgICAgICAgICAgIGdpcnEyM19kZmx0X2hhbmRsZXIsICAgIC8qIGJ0bXIxX2hhbmRsZXIsICovDQoxMDA6ICAgICAgICAgICAgICAgICAgICAgZ2lycTIzX2RmbHRfaGFuZGxlciwgICAgLyogYnRtcjJfaGFuZGxlciwgKi8NCjEwMTogICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiBidG1yM19oYW5kbGVyLCAqLw0KMTAyOiAgICAgICAgICAgICAgICAgICAgIHZQb3J0SW5jcmVtZW50VGljaywNCjEwMzogICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiBoaWJfdG1yX2hhbmRsZXIsICovDQoxMDQ6ICAgICAgICAgICAgICAgICAgICAgZ2lycTIzX2RmbHRfaGFuZGxlciwgICAgLyogd2Vla190bXJfaGFuZGxlciwgKi8NCjEwNTogICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiB3ZWVrX3Rtcl9oYW5kbGVyLCAqLw0KMTA2OiAgICAgICAgICAgICAgICAgICAgIGdpcnEyM19kZmx0X2hhbmRsZXIsICAgIC8qIHdlZWtfdG1yX2hhbmRsZXIsICovDQoxMDc6ICAgICAgICAgICAgICAgICAgICAgZ2lycTIzX2RmbHRfaGFuZGxlciwgICAgLyogd2Vla190bXJfaGFuZGxlciwgKi8NCjEwODogICAgICAgICAgICAgICAgICAgICBnaXJxMjNfZGZsdF9oYW5kbGVyLCAgICAvKiB3ZWVrX3Rtcl9oYW5kbGVyLCAqLw0KMTA5OiAgICAgICAgICAgICAgICAgICAgIGdpcnEyM19kZmx0X2hhbmRsZXIsICAgIC8qIHZjaV9oYW5kbGVyLCAqLw0KMTEwOiAgICAgICAgICAgICAgICAgICAgIGdpcnEyM19kZmx0X2hhbmRsZXIsICAgIC8qIHZjaV9oYW5kbGVyLCAqLw0KMTExOiAgICAgICAgICAgICAgICAgICAgIGdpcnEyM19kZmx0X2hhbmRsZXIsICAgIC8qIHZjaV9oYW5kbGVyLCAqLw0KMTEyOiAgICAgICAgICAgICAgICAgfTsNCjExMzogICAgICAgICAgICAgICAgIA0KMTE0OiAgICAgICAgICAgICAgICAgLyogQ2FsbGVkIGJ5IEZyZWVSVE9TIHZQb3J0VGlja0ludGVycnVwdEhhbmRsZXIoZ2lycTIzX2lzcikgDQoxMTU6ICAgICAgICAgICAgICAgICAgKiBhZnRlciBzYXZpbmcgRnJlZVJUT1MgY29udGV4dCANCjExNjogICAgICAgICAgICAgICAgICAqLw0KMTE3OiAgICAgICAgICAgICAgICAgdm9pZCBnaXJxMjNfaGFuZGxlcih2b2lkKQ0KMTE4OiAgICAgICAgICAgICAgICAgew0KMTE5OiAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGQ7DQoxMjA6ICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiaXRwb3M7DQoxMjE6ICAgICAgICAgICAgICAgICANCjEyMjogICAgICAgICAgICAgICAgICAgICBkID0gSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEyM19JRF0uUkVTVUxUICYgKEdJUlEyM19TUkNfTUFTSyk7DQoxMjM6ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAwICE9IGQgKQ0KMTI0OiAgICAgICAgICAgICAgICAgICAgIHsNCjEyNTogICAgICAgICAgICAgICAgICAgICAgICAgYml0cG9zID0gMzEgLSAoKHVpbnQ4X3QpX19idWlsdGluX2NseihkKSAmIDB4MUYpOw0KMTI2OiAgICAgICAgICAgICAgICAgICAgICAgICAoZ2lycTIzX2h0YWJsZVtiaXRwb3NdKShiaXRwb3MpOw0KMTI3OiAgICAgICAgICAgICAgICAgICAgICAgICBkICY9IH4oMXVsIDw8IGJpdHBvcyk7DQoxMjg6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTI5OiAgICAgICAgICAgICAgICAgfQ0KMTMwOiAgICAgICAgICAgICAgICAgDQoxMzE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjEzMjogICAgICAgICAgICAgICAgIGdpcnEyM19pc3Iodm9pZCkNCjEzMzogICAgICAgICAgICAgICAgIHsNCjEzNDogICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkOw0KMTM1OiAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYml0cG9zOw0KMTM2OiAgICAgICAgICAgICAgICAgDQoxMzc6ICAgICAgICAgICAgICAgICAgICAgZCA9IEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMjNfSURdLlJFU1VMVCAmIChHSVJRMjNfU1JDX01BU0spOw0KMTM4OiAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggMCAhPSBkICkNCjEzOTogICAgICAgICAgICAgICAgICAgICB7DQoxNDA6ICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHBvcyA9IDMxIC0gKCh1aW50OF90KV9fYnVpbHRpbl9jbHooZCkgJiAweDFGKTsNCjE0MTogICAgICAgICAgICAgICAgICAgICAgICAgKGdpcnEyM19odGFibGVbYml0cG9zXSkoYml0cG9zKTsNCjE0MjogICAgICAgICAgICAgICAgICAgICAgICAgZCAmPSB+KDF1bCA8PCBiaXRwb3MpOw0KMTQzOiAgICAgICAgICAgICAgICAgICAgIH0gICAgDQoxNDQ6ICAgICAgICAgICAgICAgICB9DQoxNDU6ICAgICAgICAgICAgICAgICANCjE0NjogICAgICAgICAgICAgICAgICNlbHNlDQoxNDc6ICAgICAgICAgICAgICAgICANCjE0ODogICAgICAgICAgICAgICAgIA0KMTQ5OiAgICAgICAgICAgICAgICAgLyogMTYtYml0IEJhc2ljIFRpbWVyIDAgKi8NCjE1MDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTE6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjAodm9pZCkNCjE1MjogICAgICAgICAgICAgICAgIHsNCkJGRDA3MkEwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA3MkE0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDcyQTYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDcyQTggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNzJBQSAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUNCkJGRDA3MkFDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNzJBRSAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApDQpCRkQwNzJCMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA3MkI0ICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkNCkJGRDA3MkI2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNzJCQSAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApDQpCRkQwNzJCQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDcyQkUgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA3MkMwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNzJDMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA3MkM0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDcyQzYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDcyQzggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzJDQyAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkNCkJGRDA3MkNFICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQ0KQkZEMDcyRDAgICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQ0KQkZEMDcyRDIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDcyRDQgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDcyRDYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjE1MzogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTIzX0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDApOyAgDQpCRkQwNzJEOCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDcyREEgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDcyREMgIEMwMDA1MDQyICAgT1JJIFYwLCBWMCwgLTE2Mzg0DQpCRkQwNzJFMCAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDcyRTIgIDAwRjBGODYyICAgU1cgVjEsIDI0MChWMCkNCjE1NDogICAgICAgICAgICAgICAgIH0NCkJGRDA3MkU2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNzJFOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNzJFQSAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNzJFQyAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwNzJFRSAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkNCkJGRDA3MkYwICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQ0KQkZEMDcyRjIgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDcyRjYgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA3MkY4ICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pDQpCRkQwNzJGQSAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApDQpCRkQwNzJGQyAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApDQpCRkQwNzJGRSAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA3MzAyICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkNCkJGRDA3MzA0ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3MzA2ICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDczMDggIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDczMEEgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDczMEMgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNzMwRSAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3MzEwICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA3MzEyICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA3MzE0ICAwQzAwRjM3QyAgIEpBTFggMHhCREYwMzAwMA0KMTU1OiAgICAgICAgICAgICAgICAgDQoxNTY6ICAgICAgICAgICAgICAgICAvKiAxNi1iaXQgQmFzaWMgVGltZXIgMSAqLw0KMTU3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE1ODogICAgICAgICAgICAgICAgIGdpcnEyM19iMSh2b2lkKQ0KMTU5OiAgICAgICAgICAgICAgICAgew0KQkZEMDRDNzAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDRDNzQgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNEM3NiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNEM3OCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA0QzdBICA0RkM1MTBGQyAgIEFEREkgQTMsIEdQLCAyMDQyMQ0KQkZEMDRDN0MgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwDQpCRkQwNEM3RSAgICAgIENCN0QgICBTVyBLMSwgMTE2KFNQKQ0KQkZEMDRDODAgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzDQpCRkQwNEM4NCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQ0KQkZEMDRDODYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA0QzhBICAgICAgQ0I3QiAgIFNXIEsxLCAxMDgoU1ApDQpCRkQwNEM4QyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDRDOEUgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA0QzkwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNEM5MiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA0Qzk0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDRDOTYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDRDOTggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNEM5QyAgICAgIEM4NjcgICBTVyBWMSwgMjgoU1ApDQpCRkQwNEM5RSAgICAgIEM4NDYgICBTVyBWMCwgMjQoU1ApDQpCRkQwNENBMCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQ0KQkZEMDRDQTIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDRDQTQgIDAwMTE0MEEzICAgQk5FWkMgVjEsIDB4QkZEMDRDQ0ENCkJGRDA0Q0E4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkNCkJGRDA0Q0FBICAgICAgQ0JENiAgIFNXIFM4LCA4OChTUCkNCkJGRDA0Q0FDICAgICAgQ0IzNSAgIFNXIFQ5LCA4NChTUCkNCkJGRDA0Q0FFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkNCkJGRDA0Q0IwICAgICAgQzlGMyAgIFNXIFQ3LCA3NihTUCkNCkJGRDA0Q0IyICAgICAgQzlEMiAgIFNXIFQ2LCA3MihTUCkNCkJGRDA0Q0I0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkNCkJGRDA0Q0I2ICAgICAgQzk5MCAgIFNXIFQ0LCA2NChTUCkNCkJGRDA0Q0I4ICAgICAgQzk2RiAgIFNXIFQzLCA2MChTUCkNCkJGRDA0Q0JBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkNCkJGRDA0Q0JDICAgICAgQzkyRCAgIFNXIFQxLCA1MihTUCkNCkJGRDA0Q0JFICAgICAgQzkwQyAgIFNXIFQwLCA0OChTUCkNCkJGRDA0Q0MwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkNCkJGRDA0Q0MyICAgICAgQzhDQSAgIFNXIEEyLCA0MChTUCkNCkJGRDA0Q0M0ICAgICAgQzhBOSAgIFNXIEExLCAzNihTUCkNCkJGRDA0Q0M2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkNCkJGRDA0Q0M4ICAgICAgQzgyNSAgIFNXIEFULCAyMChTUCkNCkJGRDA0Q0NBICAgICAgNDY0MiAgIE1GTE8gVjANCkJGRDA0Q0NDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApDQpCRkQwNENDRSAgICAgIDQ2MDMgICBNRkhJIFYxDQpCRkQwNENEMCAgICAgIEM4NzggICBTVyBWMSwgOTYoU1ApDQpCRkQwNENEMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMTYwOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIzX0lELCAxLCBUUlVFKTsNCkJGRDA0Q0Q0ICAgICAgRUUwRiAgIExJIEEwLCAxNQ0KQkZEMDRDRDYgICAgICBFRTgxICAgTEkgQTEsIDENCkJGRDA0Q0Q4ICAgICAgRUYwMSAgIExJIEEyLCAxDQpCRkQwNENEQSAgM0E0MDc3RTggICBKQUxTIGp0dmljX2Rpc19jbHJfc291cmNlDQpCRkQwNENEQyAgMEMwMDNBNDAgICBTSCBTMiwgMzA3MihaRVJPKQ0KQkZEMDRDREUgICAgICAwQzAwICAgTk9QDQoxNjE6ICAgICAgICAgICAgICAgICB9DQpCRkQwNENFMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDRDRTIgICAgICA0ODU5ICAgTFcgVjAsIDEwMChTUCkNCkJGRDA0Q0U0ICAzRDdDMDAwMiAgIE1UTE8gVjANCkJGRDA0Q0U2ICA0ODc4M0Q3QyAgIExIIFQzLCAxODU1MihHUCkNCkJGRDA0Q0U4ICAgICAgNDg3OCAgIExXIFYxLCA5NihTUCkNCkJGRDA0Q0VBICAyRDdDMDAwMyAgIE1USEkgVjENCkJGRDA0Q0VDICAgICAgMkQ3QyAgIEFOREkgVjAsIEEzLCAweDQwDQpCRkQwNENFRSAgICAgIDQ4NUMgICBMVyBWMCwgMTEyKFNQKQ0KQkZEMDRDRjAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDRDRjIgIDAwMTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDREMUMNCkJGRDA0Q0Y2ICAgICAgNEJGNyAgIExXIFJBLCA5MihTUCkNCkJGRDA0Q0Y4ICAgICAgNEJENiAgIExXIFM4LCA4OChTUCkNCkJGRDA0Q0ZBICAgICAgNEIzNSAgIExXIFQ5LCA4NChTUCkNCkJGRDA0Q0ZDICAgICAgNEIxNCAgIExXIFQ4LCA4MChTUCkNCkJGRDA0Q0ZFICAgICAgNDlGMyAgIExXIFQ3LCA3NihTUCkNCkJGRDA0RDAwICAgICAgNDlEMiAgIExXIFQ2LCA3MihTUCkNCkJGRDA0RDAyICAgICAgNDlCMSAgIExXIFQ1LCA2OChTUCkNCkJGRDA0RDA0ICAgICAgNDk5MCAgIExXIFQ0LCA2NChTUCkNCkJGRDA0RDA2ICAgICAgNDk2RiAgIExXIFQzLCA2MChTUCkNCkJGRDA0RDA4ICAgICAgNDk0RSAgIExXIFQyLCA1NihTUCkNCkJGRDA0RDBBICAgICAgNDkyRCAgIExXIFQxLCA1MihTUCkNCkJGRDA0RDBDICAgICAgNDkwQyAgIExXIFQwLCA0OChTUCkNCkJGRDA0RDBFICAgICAgNDhFQiAgIExXIEEzLCA0NChTUCkNCkJGRDA0RDEwICAgICAgNDhDQSAgIExXIEEyLCA0MChTUCkNCkJGRDA0RDEyICAgICAgNDhBOSAgIExXIEExLCAzNihTUCkNCkJGRDA0RDE0ICAgICAgNDg4OCAgIExXIEEwLCAzMihTUCkNCkJGRDA0RDE2ICAgICAgNDg2NyAgIExXIFYxLCAyOChTUCkNCkJGRDA0RDE4ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkNCkJGRDA0RDFBICAgICAgNDgyNSAgIExXIEFULCAyMChTUCkNCkJGRDA0RDFDICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA0RDIwICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNEQyMiAgNEI1RDE4MDAgICBTQiBaRVJPLCAxOTI5MyhaRVJPKQ0KQkZEMDREMjQgICAgICA0QjVEICAgTFcgSzAsIDExNihTUCkNCkJGRDA0RDI2ICAgICAgNEI3QiAgIExXIEsxLCAxMDgoU1ApDQpCRkQwNEQyOCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA0RDJDICAgICAgNEI1QyAgIExXIEswLCAxMTIoU1ApDQpCRkQwNEQyRSAgICAgIDRDM0QgICBBRERJVSBTUCwgU1AsIDEyMA0KQkZEMDREMzAgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsDQpCRkQwNEQzMiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3DQpCRkQwNEQzNCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQDQpCRkQwNEQzNiAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjANCkJGRDA0RDM4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDREM0EgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDREM0MgIEYzN0MwMDAwICAgRVJFVA0KQkZEMDREM0UgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0DQoxNjI6ICAgICAgICAgICAgICAgICANCjE2MzogICAgICAgICAgICAgICAgIC8qIDE2LWJpdCBCYXNpYyBUaW1lciAyICovDQoxNjQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTY1OiAgICAgICAgICAgICAgICAgZ2lycTIzX2IyKHZvaWQpDQoxNjY6ICAgICAgICAgICAgICAgICB7DQpCRkQwNEQ0MCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNEQ0NCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA0RDQ2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA0RDQ4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDRENEEgIDRGQzUxMEZDICAgQURESSBBMywgR1AsIDIwNDIxDQpCRkQwNEQ0QyAgICAgIDRGQzUgICBBRERJVSBTUCwgU1AsIC0xMjANCkJGRDA0RDRFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApDQpCRkQwNEQ1MCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA0RDU0ICAgICAgQ0I1QyAgIFNXIEswLCAxMTIoU1ApDQpCRkQwNEQ1NiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDRENUEgICAgICBDQjdCICAgU1cgSzEsIDEwOChTUCkNCkJGRDA0RDVDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNEQ1RSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDRENjAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA0RDYyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDRENjQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNEQ2NiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNEQ2OCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA0RDZDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkNCkJGRDA0RDZFICAgICAgQzg0NiAgIFNXIFYwLCAyNChTUCkNCkJGRDA0RDcwICAgICAgNDg3QyAgIExXIFYxLCAxMTIoU1ApDQpCRkQwNEQ3MiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNEQ3NCAgMDAxMTQwQTMgICBCTkVaQyBWMSwgMHhCRkQwNEQ5QQ0KQkZEMDRENzggICAgICBDQkY3ICAgU1cgUkEsIDkyKFNQKQ0KQkZEMDREN0EgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQ0KQkZEMDREN0MgICAgICBDQjM1ICAgU1cgVDksIDg0KFNQKQ0KQkZEMDREN0UgICAgICBDQjE0ICAgU1cgVDgsIDgwKFNQKQ0KQkZEMDREODAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQ0KQkZEMDREODIgICAgICBDOUQyICAgU1cgVDYsIDcyKFNQKQ0KQkZEMDREODQgICAgICBDOUIxICAgU1cgVDUsIDY4KFNQKQ0KQkZEMDREODYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQ0KQkZEMDREODggICAgICBDOTZGICAgU1cgVDMsIDYwKFNQKQ0KQkZEMDREOEEgICAgICBDOTRFICAgU1cgVDIsIDU2KFNQKQ0KQkZEMDREOEMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQ0KQkZEMDREOEUgICAgICBDOTBDICAgU1cgVDAsIDQ4KFNQKQ0KQkZEMDREOTAgICAgICBDOEVCICAgU1cgQTMsIDQ0KFNQKQ0KQkZEMDREOTIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQ0KQkZEMDREOTQgICAgICBDOEE5ICAgU1cgQTEsIDM2KFNQKQ0KQkZEMDREOTYgICAgICBDODg4ICAgU1cgQTAsIDMyKFNQKQ0KQkZEMDREOTggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQ0KQkZEMDREOUEgICAgICA0NjQyICAgTUZMTyBWMA0KQkZEMDREOUMgICAgICBDODU5ICAgU1cgVjAsIDEwMChTUCkNCkJGRDA0RDlFICAgICAgNDYwMyAgIE1GSEkgVjENCkJGRDA0REEwICAgICAgQzg3OCAgIFNXIFYxLCA5NihTUCkNCkJGRDA0REEyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoxNjc6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDIsIFRSVUUpOw0KQkZEMDREQTQgICAgICBFRTBGICAgTEkgQTAsIDE1DQpCRkQwNERBNiAgICAgIEVFODIgICBMSSBBMSwgMg0KQkZEMDREQTggICAgICBFRjAxICAgTEkgQTIsIDENCkJGRDA0REFBICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UNCkJGRDA0REFDICAwQzAwM0E0MCAgIFNIIFMyLCAzMDcyKFpFUk8pDQpCRkQwNERBRSAgICAgIDBDMDAgICBOT1ANCjE2ODogICAgICAgICAgICAgICAgIH0NCkJGRDA0REIwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNERCMiAgICAgIDQ4NTkgICBMVyBWMCwgMTAwKFNQKQ0KQkZEMDREQjQgIDNEN0MwMDAyICAgTVRMTyBWMA0KQkZEMDREQjYgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQ0KQkZEMDREQjggICAgICA0ODc4ICAgTFcgVjEsIDk2KFNQKQ0KQkZEMDREQkEgIDJEN0MwMDAzICAgTVRISSBWMQ0KQkZEMDREQkMgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDANCkJGRDA0REJFICAgICAgNDg1QyAgIExXIFYwLCAxMTIoU1ApDQpCRkQwNERDMCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNERDMiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNERFQw0KQkZEMDREQzYgICAgICA0QkY3ICAgTFcgUkEsIDkyKFNQKQ0KQkZEMDREQzggICAgICA0QkQ2ICAgTFcgUzgsIDg4KFNQKQ0KQkZEMDREQ0EgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQ0KQkZEMDREQ0MgICAgICA0QjE0ICAgTFcgVDgsIDgwKFNQKQ0KQkZEMDREQ0UgICAgICA0OUYzICAgTFcgVDcsIDc2KFNQKQ0KQkZEMDRERDAgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQ0KQkZEMDRERDIgICAgICA0OUIxICAgTFcgVDUsIDY4KFNQKQ0KQkZEMDRERDQgICAgICA0OTkwICAgTFcgVDQsIDY0KFNQKQ0KQkZEMDRERDYgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQ0KQkZEMDRERDggICAgICA0OTRFICAgTFcgVDIsIDU2KFNQKQ0KQkZEMDREREEgICAgICA0OTJEICAgTFcgVDEsIDUyKFNQKQ0KQkZEMDREREMgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQ0KQkZEMDREREUgICAgICA0OEVCICAgTFcgQTMsIDQ0KFNQKQ0KQkZEMDRERTAgICAgICA0OENBICAgTFcgQTIsIDQwKFNQKQ0KQkZEMDRERTIgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQ0KQkZEMDRERTQgICAgICA0ODg4ICAgTFcgQTAsIDMyKFNQKQ0KQkZEMDRERTYgICAgICA0ODY3ICAgTFcgVjEsIDI4KFNQKQ0KQkZEMDRERTggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDRERUEgICAgICA0ODI1ICAgTFcgQVQsIDIwKFNQKQ0KQkZEMDRERUMgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDRERjAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA0REYyICA0QjVEMTgwMCAgIFNCIFpFUk8sIDE5MjkzKFpFUk8pDQpCRkQwNERGNCAgICAgIDRCNUQgICBMVyBLMCwgMTE2KFNQKQ0KQkZEMDRERjYgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkNCkJGRDA0REY4ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQw0KQkZEMDRERkMgICAgICA0QjVDICAgTFcgSzAsIDExMihTUCkNCkJGRDA0REZFICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwDQpCRkQwNEUwMCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA0RTAyICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA0RTA0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA0RTA2ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDRFMDggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNEUwQSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNEUwQyAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNEUwRSAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQNCjE2OTogICAgICAgICAgICAgICAgIA0KMTcwOiAgICAgICAgICAgICAgICAgLyogMTYtYml0IEJhc2ljIFRpbWVyIDMgKi8NCjE3MTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNzI6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjModm9pZCkNCjE3MzogICAgICAgICAgICAgICAgIHsNCkJGRDA0RTEwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA0RTE0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDRFMTYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDRFMTggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNEUxQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjENCkJGRDA0RTFDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMA0KQkZEMDRFMUUgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkNCkJGRDA0RTIwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDRFMjQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkNCkJGRDA0RTI2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNEUyQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQ0KQkZEMDRFMkMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA0RTJFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNEUzMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDRFMzIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNEUzNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA0RTM2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA0RTM4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDRFM0MgICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQ0KQkZEMDRFM0UgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQ0KQkZEMDRFNDAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkNCkJGRDA0RTQyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA0RTQ0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA0RTZBDQpCRkQwNEU0OCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApDQpCRkQwNEU0QSAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApDQpCRkQwNEU0QyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApDQpCRkQwNEU0RSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApDQpCRkQwNEU1MCAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApDQpCRkQwNEU1MiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApDQpCRkQwNEU1NCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApDQpCRkQwNEU1NiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApDQpCRkQwNEU1OCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApDQpCRkQwNEU1QSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApDQpCRkQwNEU1QyAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApDQpCRkQwNEU1RSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApDQpCRkQwNEU2MCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApDQpCRkQwNEU2MiAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApDQpCRkQwNEU2NCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApDQpCRkQwNEU2NiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApDQpCRkQwNEU2OCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApDQpCRkQwNEU2QSAgICAgIDQ2NDIgICBNRkxPIFYwDQpCRkQwNEU2QyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQ0KQkZEMDRFNkUgICAgICA0NjAzICAgTUZISSBWMQ0KQkZEMDRFNzAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQ0KQkZEMDRFNzIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjE3NDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyM19JRCwgMywgVFJVRSk7DQpCRkQwNEU3NCAgICAgIEVFMEYgICBMSSBBMCwgMTUNCkJGRDA0RTc2ICAgICAgRUU4MyAgIExJIEExLCAzDQpCRkQwNEU3OCAgICAgIEVGMDEgICBMSSBBMiwgMQ0KQkZEMDRFN0EgIDNBNDA3N0U4ICAgSkFMUyBqdHZpY19kaXNfY2xyX3NvdXJjZQ0KQkZEMDRFN0MgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykNCkJGRDA0RTdFICAgICAgMEMwMCAgIE5PUA0KMTc1OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDRFODAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA0RTgyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApDQpCRkQwNEU4NCAgM0Q3QzAwMDIgICBNVExPIFYwDQpCRkQwNEU4NiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApDQpCRkQwNEU4OCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApDQpCRkQwNEU4QSAgMkQ3QzAwMDMgICBNVEhJIFYxDQpCRkQwNEU4QyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MA0KQkZEMDRFOEUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkNCkJGRDA0RTkwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA0RTkyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA0RUJDDQpCRkQwNEU5NiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApDQpCRkQwNEU5OCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApDQpCRkQwNEU5QSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApDQpCRkQwNEU5QyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApDQpCRkQwNEU5RSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApDQpCRkQwNEVBMCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApDQpCRkQwNEVBMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApDQpCRkQwNEVBNCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApDQpCRkQwNEVBNiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApDQpCRkQwNEVBOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApDQpCRkQwNEVBQSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApDQpCRkQwNEVBQyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApDQpCRkQwNEVBRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApDQpCRkQwNEVCMCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApDQpCRkQwNEVCMiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApDQpCRkQwNEVCNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApDQpCRkQwNEVCNiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApDQpCRkQwNEVCOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNEVCQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApDQpCRkQwNEVCQyAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNEVDMCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDRFQzIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykNCkJGRDA0RUM0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApDQpCRkQwNEVDNiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQ0KQkZEMDRFQzggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNEVDQyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQ0KQkZEMDRFQ0UgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjANCkJGRDA0RUQwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDRFRDIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDRFRDQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDRFRDYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNEVEOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA0RURBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA0RURDICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA0RURFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNA0KMTc2OiAgICAgICAgICAgICAgICAgDQoxNzc6ICAgICAgICAgICAgICAgICAvKiBSVE9TIFRpbWVyICAqLw0KMTc4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE3OTogICAgICAgICAgICAgICAgIGdpcnEyM19iNCh2b2lkKQ0KMTgwOiAgICAgICAgICAgICAgICAgew0KQkZEMDczMTggIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDczMUMgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNzMxRSAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNzMyMCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA3MzIyICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQ0KQkZEMDczMjQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA3MzI2ICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkNCkJGRDA3MzI4ICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDczMkMgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQ0KQkZEMDczMkUgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA3MzMyICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkNCkJGRDA3MzM0ICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNzMzNiAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDczMzggIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA3MzNBICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDczM0MgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNzMzRSAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNzM0MCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3MzQ0ICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQ0KQkZEMDczNDYgICAgICBDODQxICAgU1cgVjAsIDQoU1ApDQpCRkQwNzM0OCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApDQpCRkQwNzM0QSAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNzM0QyAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwNzM0RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMTgxOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMjNfSURdLlNPVVJDRSA9ICgxdWwgPDwgNCk7DQpCRkQwNzM1MCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDczNTIgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDczNTQgIEMwMDA1MDQyICAgT1JJIFYwLCBWMCwgLTE2Mzg0DQpCRkQwNzM1OCAgICAgIEVEOTAgICBMSSBWMSwgMTYNCkJGRDA3MzVBICAwMEYwRjg2MiAgIFNXIFYxLCAyNDAoVjApDQoxODI6ICAgICAgICAgICAgICAgICAgICAgDQoxODM6ICAgICAgICAgICAgICAgICB9DQpCRkQwNzM1RSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDczNjAgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDczNjIgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDczNjQgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDczNjYgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApDQpCRkQwNzM2OCAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkNCkJGRDA3MzZBICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA3MzZFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNzM3MCAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQ0KQkZEMDczNzIgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQ0KQkZEMDczNzQgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQ0KQkZEMDczNzYgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNzM3QSAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApDQpCRkQwNzM3QyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNzM3RSAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA3MzgwICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA3MzgyICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA3Mzg0ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDczODYgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzM4OCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNzM4QSAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNzM4QyAgMEMwMEYzN0MgICBKQUxYIDB4QkRGMDMwMDANCjE4NDogICAgICAgICAgICAgICAgIA0KMTg1OiAgICAgICAgICAgICAgICAgLyogSGliZXJuYXRpb24gVGltZXIgKi8NCjE4NjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxODc6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjUodm9pZCkNCjE4ODogICAgICAgICAgICAgICAgIHsNCkJGRDA0RUUwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA0RUU0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDRFRTYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDRFRTggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNEVFQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjENCkJGRDA0RUVDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMA0KQkZEMDRFRUUgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkNCkJGRDA0RUYwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDRFRjQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkNCkJGRDA0RUY2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNEVGQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQ0KQkZEMDRFRkMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA0RUZFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNEYwMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDRGMDIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNEYwNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA0RjA2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA0RjA4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDRGMEMgICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQ0KQkZEMDRGMEUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQ0KQkZEMDRGMTAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkNCkJGRDA0RjEyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA0RjE0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA0RjNBDQpCRkQwNEYxOCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApDQpCRkQwNEYxQSAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApDQpCRkQwNEYxQyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApDQpCRkQwNEYxRSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApDQpCRkQwNEYyMCAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApDQpCRkQwNEYyMiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApDQpCRkQwNEYyNCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApDQpCRkQwNEYyNiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApDQpCRkQwNEYyOCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApDQpCRkQwNEYyQSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApDQpCRkQwNEYyQyAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApDQpCRkQwNEYyRSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApDQpCRkQwNEYzMCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApDQpCRkQwNEYzMiAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApDQpCRkQwNEYzNCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApDQpCRkQwNEYzNiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApDQpCRkQwNEYzOCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApDQpCRkQwNEYzQSAgICAgIDQ2NDIgICBNRkxPIFYwDQpCRkQwNEYzQyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQ0KQkZEMDRGM0UgICAgICA0NjAzICAgTUZISSBWMQ0KQkZEMDRGNDAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQ0KQkZEMDRGNDIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjE4OTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyM19JRCwgNSwgVFJVRSk7DQpCRkQwNEY0NCAgICAgIEVFMEYgICBMSSBBMCwgMTUNCkJGRDA0RjQ2ICAgICAgRUU4NSAgIExJIEExLCA1DQpCRkQwNEY0OCAgICAgIEVGMDEgICBMSSBBMiwgMQ0KQkZEMDRGNEEgIDNBNDA3N0U4ICAgSkFMUyBqdHZpY19kaXNfY2xyX3NvdXJjZQ0KQkZEMDRGNEMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykNCkJGRDA0RjRFICAgICAgMEMwMCAgIE5PUA0KMTkwOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDRGNTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA0RjUyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApDQpCRkQwNEY1NCAgM0Q3QzAwMDIgICBNVExPIFYwDQpCRkQwNEY1NiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApDQpCRkQwNEY1OCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApDQpCRkQwNEY1QSAgMkQ3QzAwMDMgICBNVEhJIFYxDQpCRkQwNEY1QyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MA0KQkZEMDRGNUUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkNCkJGRDA0RjYwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA0RjYyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA0RjhDDQpCRkQwNEY2NiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApDQpCRkQwNEY2OCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApDQpCRkQwNEY2QSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApDQpCRkQwNEY2QyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApDQpCRkQwNEY2RSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApDQpCRkQwNEY3MCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApDQpCRkQwNEY3MiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApDQpCRkQwNEY3NCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApDQpCRkQwNEY3NiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApDQpCRkQwNEY3OCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApDQpCRkQwNEY3QSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApDQpCRkQwNEY3QyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApDQpCRkQwNEY3RSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApDQpCRkQwNEY4MCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApDQpCRkQwNEY4MiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApDQpCRkQwNEY4NCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApDQpCRkQwNEY4NiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApDQpCRkQwNEY4OCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNEY4QSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApDQpCRkQwNEY4QyAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNEY5MCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDRGOTIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykNCkJGRDA0Rjk0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApDQpCRkQwNEY5NiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQ0KQkZEMDRGOTggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNEY5QyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQ0KQkZEMDRGOUUgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjANCkJGRDA0RkEwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDRGQTIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDRGQTQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDRGQTYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNEZBOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA0RkFBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA0RkFDICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA0RkFFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNA0KMTkxOiAgICAgICAgICAgICAgICAgDQoxOTI6ICAgICAgICAgICAgICAgICAvKiBXZWVrIEFsYXJtICovDQoxOTM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTk0OiAgICAgICAgICAgICAgICAgZ2lycTIzX2I2KHZvaWQpDQoxOTU6ICAgICAgICAgICAgICAgICB7DQpCRkQwNEZCMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNEZCNCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA0RkI2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA0RkI4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDRGQkEgIDRGQzUxMEZDICAgQURESSBBMywgR1AsIDIwNDIxDQpCRkQwNEZCQyAgICAgIDRGQzUgICBBRERJVSBTUCwgU1AsIC0xMjANCkJGRDA0RkJFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApDQpCRkQwNEZDMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA0RkM0ICAgICAgQ0I1QyAgIFNXIEswLCAxMTIoU1ApDQpCRkQwNEZDNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDRGQ0EgICAgICBDQjdCICAgU1cgSzEsIDEwOChTUCkNCkJGRDA0RkNDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNEZDRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDRGRDAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA0RkQyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDRGRDQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNEZENiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNEZEOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA0RkRDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkNCkJGRDA0RkRFICAgICAgQzg0NiAgIFNXIFYwLCAyNChTUCkNCkJGRDA0RkUwICAgICAgNDg3QyAgIExXIFYxLCAxMTIoU1ApDQpCRkQwNEZFMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNEZFNCAgMDAxMTQwQTMgICBCTkVaQyBWMSwgMHhCRkQwNTAwQQ0KQkZEMDRGRTggICAgICBDQkY3ICAgU1cgUkEsIDkyKFNQKQ0KQkZEMDRGRUEgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQ0KQkZEMDRGRUMgICAgICBDQjM1ICAgU1cgVDksIDg0KFNQKQ0KQkZEMDRGRUUgICAgICBDQjE0ICAgU1cgVDgsIDgwKFNQKQ0KQkZEMDRGRjAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQ0KQkZEMDRGRjIgICAgICBDOUQyICAgU1cgVDYsIDcyKFNQKQ0KQkZEMDRGRjQgICAgICBDOUIxICAgU1cgVDUsIDY4KFNQKQ0KQkZEMDRGRjYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQ0KQkZEMDRGRjggICAgICBDOTZGICAgU1cgVDMsIDYwKFNQKQ0KQkZEMDRGRkEgICAgICBDOTRFICAgU1cgVDIsIDU2KFNQKQ0KQkZEMDRGRkMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQ0KQkZEMDRGRkUgICAgICBDOTBDICAgU1cgVDAsIDQ4KFNQKQ0KQkZEMDUwMDAgICAgICBDOEVCICAgU1cgQTMsIDQ0KFNQKQ0KQkZEMDUwMDIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQ0KQkZEMDUwMDQgICAgICBDOEE5ICAgU1cgQTEsIDM2KFNQKQ0KQkZEMDUwMDYgICAgICBDODg4ICAgU1cgQTAsIDMyKFNQKQ0KQkZEMDUwMDggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQ0KQkZEMDUwMEEgICAgICA0NjQyICAgTUZMTyBWMA0KQkZEMDUwMEMgICAgICBDODU5ICAgU1cgVjAsIDEwMChTUCkNCkJGRDA1MDBFICAgICAgNDYwMyAgIE1GSEkgVjENCkJGRDA1MDEwICAgICAgQzg3OCAgIFNXIFYxLCA5NihTUCkNCkJGRDA1MDEyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoxOTY6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDYsIFRSVUUpOw0KQkZEMDUwMTQgICAgICBFRTBGICAgTEkgQTAsIDE1DQpCRkQwNTAxNiAgICAgIEVFODYgICBMSSBBMSwgNg0KQkZEMDUwMTggICAgICBFRjAxICAgTEkgQTIsIDENCkJGRDA1MDFBICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UNCkJGRDA1MDFDICAwQzAwM0E0MCAgIFNIIFMyLCAzMDcyKFpFUk8pDQpCRkQwNTAxRSAgICAgIDBDMDAgICBOT1ANCjE5NzogICAgICAgICAgICAgICAgIH0NCkJGRDA1MDIwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNTAyMiAgICAgIDQ4NTkgICBMVyBWMCwgMTAwKFNQKQ0KQkZEMDUwMjQgIDNEN0MwMDAyICAgTVRMTyBWMA0KQkZEMDUwMjYgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQ0KQkZEMDUwMjggICAgICA0ODc4ICAgTFcgVjEsIDk2KFNQKQ0KQkZEMDUwMkEgIDJEN0MwMDAzICAgTVRISSBWMQ0KQkZEMDUwMkMgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDANCkJGRDA1MDJFICAgICAgNDg1QyAgIExXIFYwLCAxMTIoU1ApDQpCRkQwNTAzMCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNTAzMiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNTA1Qw0KQkZEMDUwMzYgICAgICA0QkY3ICAgTFcgUkEsIDkyKFNQKQ0KQkZEMDUwMzggICAgICA0QkQ2ICAgTFcgUzgsIDg4KFNQKQ0KQkZEMDUwM0EgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQ0KQkZEMDUwM0MgICAgICA0QjE0ICAgTFcgVDgsIDgwKFNQKQ0KQkZEMDUwM0UgICAgICA0OUYzICAgTFcgVDcsIDc2KFNQKQ0KQkZEMDUwNDAgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQ0KQkZEMDUwNDIgICAgICA0OUIxICAgTFcgVDUsIDY4KFNQKQ0KQkZEMDUwNDQgICAgICA0OTkwICAgTFcgVDQsIDY0KFNQKQ0KQkZEMDUwNDYgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQ0KQkZEMDUwNDggICAgICA0OTRFICAgTFcgVDIsIDU2KFNQKQ0KQkZEMDUwNEEgICAgICA0OTJEICAgTFcgVDEsIDUyKFNQKQ0KQkZEMDUwNEMgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQ0KQkZEMDUwNEUgICAgICA0OEVCICAgTFcgQTMsIDQ0KFNQKQ0KQkZEMDUwNTAgICAgICA0OENBICAgTFcgQTIsIDQwKFNQKQ0KQkZEMDUwNTIgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQ0KQkZEMDUwNTQgICAgICA0ODg4ICAgTFcgQTAsIDMyKFNQKQ0KQkZEMDUwNTYgICAgICA0ODY3ICAgTFcgVjEsIDI4KFNQKQ0KQkZEMDUwNTggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDUwNUEgICAgICA0ODI1ICAgTFcgQVQsIDIwKFNQKQ0KQkZEMDUwNUMgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDUwNjAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA1MDYyICA0QjVEMTgwMCAgIFNCIFpFUk8sIDE5MjkzKFpFUk8pDQpCRkQwNTA2NCAgICAgIDRCNUQgICBMVyBLMCwgMTE2KFNQKQ0KQkZEMDUwNjYgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkNCkJGRDA1MDY4ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQw0KQkZEMDUwNkMgICAgICA0QjVDICAgTFcgSzAsIDExMihTUCkNCkJGRDA1MDZFICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwDQpCRkQwNTA3MCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA1MDcyICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA1MDc0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA1MDc2ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDUwNzggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNTA3QSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNTA3QyAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNTA3RSAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQNCjE5ODogICAgICAgICAgICAgICAgIA0KMTk5OiAgICAgICAgICAgICAgICAgLyogU3ViLVdlZWsgQWxhcm0gKi8NCjIwMDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMDE6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjcodm9pZCkNCjIwMjogICAgICAgICAgICAgICAgIHsNCkJGRDA1MDgwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA1MDg0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDUwODYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDUwODggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNTA4QSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjENCkJGRDA1MDhDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMA0KQkZEMDUwOEUgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkNCkJGRDA1MDkwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDUwOTQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkNCkJGRDA1MDk2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNTA5QSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQ0KQkZEMDUwOUMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA1MDlFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNTBBMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDUwQTIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNTBBNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA1MEE2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA1MEE4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDUwQUMgICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQ0KQkZEMDUwQUUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQ0KQkZEMDUwQjAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkNCkJGRDA1MEIyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA1MEI0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1MERBDQpCRkQwNTBCOCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApDQpCRkQwNTBCQSAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApDQpCRkQwNTBCQyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApDQpCRkQwNTBCRSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApDQpCRkQwNTBDMCAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApDQpCRkQwNTBDMiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApDQpCRkQwNTBDNCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApDQpCRkQwNTBDNiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApDQpCRkQwNTBDOCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApDQpCRkQwNTBDQSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApDQpCRkQwNTBDQyAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApDQpCRkQwNTBDRSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApDQpCRkQwNTBEMCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApDQpCRkQwNTBEMiAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApDQpCRkQwNTBENCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApDQpCRkQwNTBENiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApDQpCRkQwNTBEOCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApDQpCRkQwNTBEQSAgICAgIDQ2NDIgICBNRkxPIFYwDQpCRkQwNTBEQyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQ0KQkZEMDUwREUgICAgICA0NjAzICAgTUZISSBWMQ0KQkZEMDUwRTAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQ0KQkZEMDUwRTIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjIwMzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyM19JRCwgNywgVFJVRSk7DQpCRkQwNTBFNCAgICAgIEVFMEYgICBMSSBBMCwgMTUNCkJGRDA1MEU2ICAgICAgRUU4NyAgIExJIEExLCA3DQpCRkQwNTBFOCAgICAgIEVGMDEgICBMSSBBMiwgMQ0KQkZEMDUwRUEgIDNBNDA3N0U4ICAgSkFMUyBqdHZpY19kaXNfY2xyX3NvdXJjZQ0KQkZEMDUwRUMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykNCkJGRDA1MEVFICAgICAgMEMwMCAgIE5PUA0KMjA0OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDUwRjAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA1MEYyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApDQpCRkQwNTBGNCAgM0Q3QzAwMDIgICBNVExPIFYwDQpCRkQwNTBGNiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApDQpCRkQwNTBGOCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApDQpCRkQwNTBGQSAgMkQ3QzAwMDMgICBNVEhJIFYxDQpCRkQwNTBGQyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MA0KQkZEMDUwRkUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkNCkJGRDA1MTAwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA1MTAyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1MTJDDQpCRkQwNTEwNiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApDQpCRkQwNTEwOCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApDQpCRkQwNTEwQSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApDQpCRkQwNTEwQyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApDQpCRkQwNTEwRSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApDQpCRkQwNTExMCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApDQpCRkQwNTExMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApDQpCRkQwNTExNCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApDQpCRkQwNTExNiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApDQpCRkQwNTExOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApDQpCRkQwNTExQSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApDQpCRkQwNTExQyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApDQpCRkQwNTExRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApDQpCRkQwNTEyMCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApDQpCRkQwNTEyMiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApDQpCRkQwNTEyNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApDQpCRkQwNTEyNiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApDQpCRkQwNTEyOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNTEyQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApDQpCRkQwNTEyQyAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNTEzMCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDUxMzIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykNCkJGRDA1MTM0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApDQpCRkQwNTEzNiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQ0KQkZEMDUxMzggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNTEzQyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQ0KQkZEMDUxM0UgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjANCkJGRDA1MTQwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDUxNDIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDUxNDQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDUxNDYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNTE0OCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA1MTRBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA1MTRDICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA1MTRFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNA0KMjA1OiAgICAgICAgICAgICAgICAgDQoyMDY6ICAgICAgICAgICAgICAgICAvKiBXZWVrIEFsYXJtIE9uZSBTZWNvbmQgKi8NCjIwNzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMDg6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjgodm9pZCkNCjIwOTogICAgICAgICAgICAgICAgIHsNCkJGRDA1MTUwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA1MTU0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDUxNTYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDUxNTggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNTE1QSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjENCkJGRDA1MTVDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMA0KQkZEMDUxNUUgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkNCkJGRDA1MTYwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDUxNjQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkNCkJGRDA1MTY2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNTE2QSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQ0KQkZEMDUxNkMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA1MTZFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNTE3MCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDUxNzIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNTE3NCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA1MTc2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA1MTc4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDUxN0MgICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQ0KQkZEMDUxN0UgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQ0KQkZEMDUxODAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkNCkJGRDA1MTgyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA1MTg0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1MUFBDQpCRkQwNTE4OCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApDQpCRkQwNTE4QSAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApDQpCRkQwNTE4QyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApDQpCRkQwNTE4RSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApDQpCRkQwNTE5MCAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApDQpCRkQwNTE5MiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApDQpCRkQwNTE5NCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApDQpCRkQwNTE5NiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApDQpCRkQwNTE5OCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApDQpCRkQwNTE5QSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApDQpCRkQwNTE5QyAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApDQpCRkQwNTE5RSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApDQpCRkQwNTFBMCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApDQpCRkQwNTFBMiAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApDQpCRkQwNTFBNCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApDQpCRkQwNTFBNiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApDQpCRkQwNTFBOCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApDQpCRkQwNTFBQSAgICAgIDQ2NDIgICBNRkxPIFYwDQpCRkQwNTFBQyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQ0KQkZEMDUxQUUgICAgICA0NjAzICAgTUZISSBWMQ0KQkZEMDUxQjAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQ0KQkZEMDUxQjIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjIxMDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyM19JRCwgOCwgVFJVRSk7DQpCRkQwNTFCNCAgICAgIEVFMEYgICBMSSBBMCwgMTUNCkJGRDA1MUI2ICAgICAgRUU4OCAgIExJIEExLCA4DQpCRkQwNTFCOCAgICAgIEVGMDEgICBMSSBBMiwgMQ0KQkZEMDUxQkEgIDNBNDA3N0U4ICAgSkFMUyBqdHZpY19kaXNfY2xyX3NvdXJjZQ0KQkZEMDUxQkMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykNCkJGRDA1MUJFICAgICAgMEMwMCAgIE5PUA0KMjExOiAgICAgICAgICAgICAgICAgfQ0KQkZEMDUxQzAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA1MUMyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApDQpCRkQwNTFDNCAgM0Q3QzAwMDIgICBNVExPIFYwDQpCRkQwNTFDNiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApDQpCRkQwNTFDOCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApDQpCRkQwNTFDQSAgMkQ3QzAwMDMgICBNVEhJIFYxDQpCRkQwNTFDQyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MA0KQkZEMDUxQ0UgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkNCkJGRDA1MUQwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA1MUQyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1MUZDDQpCRkQwNTFENiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApDQpCRkQwNTFEOCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApDQpCRkQwNTFEQSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApDQpCRkQwNTFEQyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApDQpCRkQwNTFERSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApDQpCRkQwNTFFMCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApDQpCRkQwNTFFMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApDQpCRkQwNTFFNCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApDQpCRkQwNTFFNiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApDQpCRkQwNTFFOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApDQpCRkQwNTFFQSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApDQpCRkQwNTFFQyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApDQpCRkQwNTFFRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApDQpCRkQwNTFGMCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApDQpCRkQwNTFGMiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApDQpCRkQwNTFGNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApDQpCRkQwNTFGNiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApDQpCRkQwNTFGOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNTFGQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApDQpCRkQwNTFGQyAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNTIwMCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDUyMDIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykNCkJGRDA1MjA0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApDQpCRkQwNTIwNiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQ0KQkZEMDUyMDggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNTIwQyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQ0KQkZEMDUyMEUgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjANCkJGRDA1MjEwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDUyMTIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDUyMTQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDUyMTYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNTIxOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA1MjFBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA1MjFDICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA1MjFFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNA0KMjEyOiAgICAgICAgICAgICAgICAgDQoyMTM6ICAgICAgICAgICAgICAgICAvKiBXZWVrIEFsYXJtIFN1YiBTZWNvbmQgKi8NCjIxNDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMTU6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjkodm9pZCkNCjIxNjogICAgICAgICAgICAgICAgIHsNCkJGRDA1MjIwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA1MjI0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDUyMjYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDUyMjggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNTIyQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjENCkJGRDA1MjJDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMA0KQkZEMDUyMkUgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkNCkJGRDA1MjMwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDUyMzQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkNCkJGRDA1MjM2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNTIzQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQ0KQkZEMDUyM0MgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA1MjNFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNTI0MCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDUyNDIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNTI0NCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA1MjQ2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA1MjQ4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDUyNEMgICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQ0KQkZEMDUyNEUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQ0KQkZEMDUyNTAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkNCkJGRDA1MjUyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA1MjU0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1MjdBDQpCRkQwNTI1OCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApDQpCRkQwNTI1QSAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApDQpCRkQwNTI1QyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApDQpCRkQwNTI1RSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApDQpCRkQwNTI2MCAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApDQpCRkQwNTI2MiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApDQpCRkQwNTI2NCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApDQpCRkQwNTI2NiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApDQpCRkQwNTI2OCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApDQpCRkQwNTI2QSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApDQpCRkQwNTI2QyAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApDQpCRkQwNTI2RSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApDQpCRkQwNTI3MCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApDQpCRkQwNTI3MiAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApDQpCRkQwNTI3NCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApDQpCRkQwNTI3NiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApDQpCRkQwNTI3OCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApDQpCRkQwNTI3QSAgICAgIDQ2NDIgICBNRkxPIFYwDQpCRkQwNTI3QyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQ0KQkZEMDUyN0UgICAgICA0NjAzICAgTUZISSBWMQ0KQkZEMDUyODAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQ0KQkZEMDUyODIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjIxNzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyM19JRCwgOSwgVFJVRSk7DQpCRkQwNTI4NCAgICAgIEVFMEYgICBMSSBBMCwgMTUNCkJGRDA1Mjg2ICAgICAgRUU4OSAgIExJIEExLCA5DQpCRkQwNTI4OCAgICAgIEVGMDEgICBMSSBBMiwgMQ0KQkZEMDUyOEEgIDNBNDA3N0U4ICAgSkFMUyBqdHZpY19kaXNfY2xyX3NvdXJjZQ0KQkZEMDUyOEMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykNCkJGRDA1MjhFICAgICAgMEMwMCAgIE5PUA0KMjE4OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDUyOTAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA1MjkyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApDQpCRkQwNTI5NCAgM0Q3QzAwMDIgICBNVExPIFYwDQpCRkQwNTI5NiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApDQpCRkQwNTI5OCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApDQpCRkQwNTI5QSAgMkQ3QzAwMDMgICBNVEhJIFYxDQpCRkQwNTI5QyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MA0KQkZEMDUyOUUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkNCkJGRDA1MkEwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA1MkEyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1MkNDDQpCRkQwNTJBNiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApDQpCRkQwNTJBOCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApDQpCRkQwNTJBQSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApDQpCRkQwNTJBQyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApDQpCRkQwNTJBRSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApDQpCRkQwNTJCMCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApDQpCRkQwNTJCMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApDQpCRkQwNTJCNCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApDQpCRkQwNTJCNiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApDQpCRkQwNTJCOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApDQpCRkQwNTJCQSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApDQpCRkQwNTJCQyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApDQpCRkQwNTJCRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApDQpCRkQwNTJDMCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApDQpCRkQwNTJDMiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApDQpCRkQwNTJDNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApDQpCRkQwNTJDNiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApDQpCRkQwNTJDOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNTJDQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApDQpCRkQwNTJDQyAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNTJEMCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDUyRDIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykNCkJGRDA1MkQ0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApDQpCRkQwNTJENiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQ0KQkZEMDUyRDggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNTJEQyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQ0KQkZEMDUyREUgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjANCkJGRDA1MkUwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDUyRTIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDUyRTQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDUyRTYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNTJFOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA1MkVBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA1MkVDICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA1MkVFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNA0KMjE5OiAgICAgICAgICAgICAgICAgDQoyMjA6ICAgICAgICAgICAgICAgICAvKiBXZWVrIEFsYXJtIFN5c3RlbSBQb3dlciBQcmVzZW50IFBpbiAqLw0KMjIxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIyMjogICAgICAgICAgICAgICAgIGdpcnEyM19iMTAodm9pZCkNCjIyMzogICAgICAgICAgICAgICAgIHsNCkJGRDA1MkYwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA1MkY0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDUyRjYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDUyRjggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNTJGQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjENCkJGRDA1MkZDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMA0KQkZEMDUyRkUgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkNCkJGRDA1MzAwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDUzMDQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkNCkJGRDA1MzA2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNTMwQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQ0KQkZEMDUzMEMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA1MzBFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNTMxMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDUzMTIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNTMxNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA1MzE2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA1MzE4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDUzMUMgICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQ0KQkZEMDUzMUUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQ0KQkZEMDUzMjAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkNCkJGRDA1MzIyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA1MzI0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1MzRBDQpCRkQwNTMyOCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApDQpCRkQwNTMyQSAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApDQpCRkQwNTMyQyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApDQpCRkQwNTMyRSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApDQpCRkQwNTMzMCAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApDQpCRkQwNTMzMiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApDQpCRkQwNTMzNCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApDQpCRkQwNTMzNiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApDQpCRkQwNTMzOCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApDQpCRkQwNTMzQSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApDQpCRkQwNTMzQyAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApDQpCRkQwNTMzRSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApDQpCRkQwNTM0MCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApDQpCRkQwNTM0MiAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApDQpCRkQwNTM0NCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApDQpCRkQwNTM0NiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApDQpCRkQwNTM0OCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApDQpCRkQwNTM0QSAgICAgIDQ2NDIgICBNRkxPIFYwDQpCRkQwNTM0QyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQ0KQkZEMDUzNEUgICAgICA0NjAzICAgTUZISSBWMQ0KQkZEMDUzNTAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQ0KQkZEMDUzNTIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjIyNDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyM19JRCwgMTAsIFRSVUUpOw0KQkZEMDUzNTQgICAgICBFRTBGICAgTEkgQTAsIDE1DQpCRkQwNTM1NiAgICAgIEVFOEEgICBMSSBBMSwgMTANCkJGRDA1MzU4ICAgICAgRUYwMSAgIExJIEEyLCAxDQpCRkQwNTM1QSAgM0E0MDc3RTggICBKQUxTIGp0dmljX2Rpc19jbHJfc291cmNlDQpCRkQwNTM1QyAgMEMwMDNBNDAgICBTSCBTMiwgMzA3MihaRVJPKQ0KQkZEMDUzNUUgICAgICAwQzAwICAgTk9QDQoyMjU6ICAgICAgICAgICAgICAgICB9DQpCRkQwNTM2MCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDUzNjIgICAgICA0ODU5ICAgTFcgVjAsIDEwMChTUCkNCkJGRDA1MzY0ICAzRDdDMDAwMiAgIE1UTE8gVjANCkJGRDA1MzY2ICA0ODc4M0Q3QyAgIExIIFQzLCAxODU1MihHUCkNCkJGRDA1MzY4ICAgICAgNDg3OCAgIExXIFYxLCA5NihTUCkNCkJGRDA1MzZBICAyRDdDMDAwMyAgIE1USEkgVjENCkJGRDA1MzZDICAgICAgMkQ3QyAgIEFOREkgVjAsIEEzLCAweDQwDQpCRkQwNTM2RSAgICAgIDQ4NUMgICBMVyBWMCwgMTEyKFNQKQ0KQkZEMDUzNzAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDUzNzIgIDAwMTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDUzOUMNCkJGRDA1Mzc2ICAgICAgNEJGNyAgIExXIFJBLCA5MihTUCkNCkJGRDA1Mzc4ICAgICAgNEJENiAgIExXIFM4LCA4OChTUCkNCkJGRDA1MzdBICAgICAgNEIzNSAgIExXIFQ5LCA4NChTUCkNCkJGRDA1MzdDICAgICAgNEIxNCAgIExXIFQ4LCA4MChTUCkNCkJGRDA1MzdFICAgICAgNDlGMyAgIExXIFQ3LCA3NihTUCkNCkJGRDA1MzgwICAgICAgNDlEMiAgIExXIFQ2LCA3MihTUCkNCkJGRDA1MzgyICAgICAgNDlCMSAgIExXIFQ1LCA2OChTUCkNCkJGRDA1Mzg0ICAgICAgNDk5MCAgIExXIFQ0LCA2NChTUCkNCkJGRDA1Mzg2ICAgICAgNDk2RiAgIExXIFQzLCA2MChTUCkNCkJGRDA1Mzg4ICAgICAgNDk0RSAgIExXIFQyLCA1NihTUCkNCkJGRDA1MzhBICAgICAgNDkyRCAgIExXIFQxLCA1MihTUCkNCkJGRDA1MzhDICAgICAgNDkwQyAgIExXIFQwLCA0OChTUCkNCkJGRDA1MzhFICAgICAgNDhFQiAgIExXIEEzLCA0NChTUCkNCkJGRDA1MzkwICAgICAgNDhDQSAgIExXIEEyLCA0MChTUCkNCkJGRDA1MzkyICAgICAgNDhBOSAgIExXIEExLCAzNihTUCkNCkJGRDA1Mzk0ICAgICAgNDg4OCAgIExXIEEwLCAzMihTUCkNCkJGRDA1Mzk2ICAgICAgNDg2NyAgIExXIFYxLCAyOChTUCkNCkJGRDA1Mzk4ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkNCkJGRDA1MzlBICAgICAgNDgyNSAgIExXIEFULCAyMChTUCkNCkJGRDA1MzlDICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA1M0EwICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNTNBMiAgNEI1RDE4MDAgICBTQiBaRVJPLCAxOTI5MyhaRVJPKQ0KQkZEMDUzQTQgICAgICA0QjVEICAgTFcgSzAsIDExNihTUCkNCkJGRDA1M0E2ICAgICAgNEI3QiAgIExXIEsxLCAxMDgoU1ApDQpCRkQwNTNBOCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA1M0FDICAgICAgNEI1QyAgIExXIEswLCAxMTIoU1ApDQpCRkQwNTNBRSAgICAgIDRDM0QgICBBRERJVSBTUCwgU1AsIDEyMA0KQkZEMDUzQjAgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsDQpCRkQwNTNCMiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3DQpCRkQwNTNCNCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQDQpCRkQwNTNCNiAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjANCkJGRDA1M0I4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDUzQkEgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDUzQkMgIEYzN0MwMDAwICAgRVJFVA0KQkZEMDUzQkUgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0DQoyMjY6ICAgICAgICAgICAgICAgICANCjIyNzogICAgICAgICAgICAgICAgIC8qIFZDSSBPVlJEIElucHV0ICAqLw0KMjI4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIyOTogICAgICAgICAgICAgICAgIGdpcnEyM19iMTEodm9pZCkNCjIzMDogICAgICAgICAgICAgICAgIHsNCkJGRDA1M0MwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA1M0M0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDUzQzYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDUzQzggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNTNDQSAgNEZDNTEwRkMgICBBRERJIEEzLCBHUCwgMjA0MjENCkJGRDA1M0NDICAgICAgNEZDNSAgIEFERElVIFNQLCBTUCwgLTEyMA0KQkZEMDUzQ0UgICAgICBDQjdEICAgU1cgSzEsIDExNihTUCkNCkJGRDA1M0QwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDUzRDQgICAgICBDQjVDICAgU1cgSzAsIDExMihTUCkNCkJGRDA1M0Q2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNTNEQSAgICAgIENCN0IgICBTVyBLMSwgMTA4KFNQKQ0KQkZEMDUzREMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA1M0RFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNTNFMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDUzRTIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNTNFNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA1M0U2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA1M0U4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDUzRUMgICAgICBDODY3ICAgU1cgVjEsIDI4KFNQKQ0KQkZEMDUzRUUgICAgICBDODQ2ICAgU1cgVjAsIDI0KFNQKQ0KQkZEMDUzRjAgICAgICA0ODdDICAgTFcgVjEsIDExMihTUCkNCkJGRDA1M0YyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA1M0Y0ICAwMDExNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1NDFBDQpCRkQwNTNGOCAgICAgIENCRjcgICBTVyBSQSwgOTIoU1ApDQpCRkQwNTNGQSAgICAgIENCRDYgICBTVyBTOCwgODgoU1ApDQpCRkQwNTNGQyAgICAgIENCMzUgICBTVyBUOSwgODQoU1ApDQpCRkQwNTNGRSAgICAgIENCMTQgICBTVyBUOCwgODAoU1ApDQpCRkQwNTQwMCAgICAgIEM5RjMgICBTVyBUNywgNzYoU1ApDQpCRkQwNTQwMiAgICAgIEM5RDIgICBTVyBUNiwgNzIoU1ApDQpCRkQwNTQwNCAgICAgIEM5QjEgICBTVyBUNSwgNjgoU1ApDQpCRkQwNTQwNiAgICAgIEM5OTAgICBTVyBUNCwgNjQoU1ApDQpCRkQwNTQwOCAgICAgIEM5NkYgICBTVyBUMywgNjAoU1ApDQpCRkQwNTQwQSAgICAgIEM5NEUgICBTVyBUMiwgNTYoU1ApDQpCRkQwNTQwQyAgICAgIEM5MkQgICBTVyBUMSwgNTIoU1ApDQpCRkQwNTQwRSAgICAgIEM5MEMgICBTVyBUMCwgNDgoU1ApDQpCRkQwNTQxMCAgICAgIEM4RUIgICBTVyBBMywgNDQoU1ApDQpCRkQwNTQxMiAgICAgIEM4Q0EgICBTVyBBMiwgNDAoU1ApDQpCRkQwNTQxNCAgICAgIEM4QTkgICBTVyBBMSwgMzYoU1ApDQpCRkQwNTQxNiAgICAgIEM4ODggICBTVyBBMCwgMzIoU1ApDQpCRkQwNTQxOCAgICAgIEM4MjUgICBTVyBBVCwgMjAoU1ApDQpCRkQwNTQxQSAgICAgIDQ2NDIgICBNRkxPIFYwDQpCRkQwNTQxQyAgICAgIEM4NTkgICBTVyBWMCwgMTAwKFNQKQ0KQkZEMDU0MUUgICAgICA0NjAzICAgTUZISSBWMQ0KQkZEMDU0MjAgICAgICBDODc4ICAgU1cgVjEsIDk2KFNQKQ0KQkZEMDU0MjIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjIzMTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyM19JRCwgMTEsIFRSVUUpOw0KQkZEMDU0MjQgICAgICBFRTBGICAgTEkgQTAsIDE1DQpCRkQwNTQyNiAgICAgIEVFOEIgICBMSSBBMSwgMTENCkJGRDA1NDI4ICAgICAgRUYwMSAgIExJIEEyLCAxDQpCRkQwNTQyQSAgM0E0MDc3RTggICBKQUxTIGp0dmljX2Rpc19jbHJfc291cmNlDQpCRkQwNTQyQyAgMEMwMDNBNDAgICBTSCBTMiwgMzA3MihaRVJPKQ0KQkZEMDU0MkUgICAgICAwQzAwICAgTk9QDQoyMzI6ICAgICAgICAgICAgICAgICB9DQpCRkQwNTQzMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDU0MzIgICAgICA0ODU5ICAgTFcgVjAsIDEwMChTUCkNCkJGRDA1NDM0ICAzRDdDMDAwMiAgIE1UTE8gVjANCkJGRDA1NDM2ICA0ODc4M0Q3QyAgIExIIFQzLCAxODU1MihHUCkNCkJGRDA1NDM4ICAgICAgNDg3OCAgIExXIFYxLCA5NihTUCkNCkJGRDA1NDNBICAyRDdDMDAwMyAgIE1USEkgVjENCkJGRDA1NDNDICAgICAgMkQ3QyAgIEFOREkgVjAsIEEzLCAweDQwDQpCRkQwNTQzRSAgICAgIDQ4NUMgICBMVyBWMCwgMTEyKFNQKQ0KQkZEMDU0NDAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDU0NDIgIDAwMTM0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDU0NkMNCkJGRDA1NDQ2ICAgICAgNEJGNyAgIExXIFJBLCA5MihTUCkNCkJGRDA1NDQ4ICAgICAgNEJENiAgIExXIFM4LCA4OChTUCkNCkJGRDA1NDRBICAgICAgNEIzNSAgIExXIFQ5LCA4NChTUCkNCkJGRDA1NDRDICAgICAgNEIxNCAgIExXIFQ4LCA4MChTUCkNCkJGRDA1NDRFICAgICAgNDlGMyAgIExXIFQ3LCA3NihTUCkNCkJGRDA1NDUwICAgICAgNDlEMiAgIExXIFQ2LCA3MihTUCkNCkJGRDA1NDUyICAgICAgNDlCMSAgIExXIFQ1LCA2OChTUCkNCkJGRDA1NDU0ICAgICAgNDk5MCAgIExXIFQ0LCA2NChTUCkNCkJGRDA1NDU2ICAgICAgNDk2RiAgIExXIFQzLCA2MChTUCkNCkJGRDA1NDU4ICAgICAgNDk0RSAgIExXIFQyLCA1NihTUCkNCkJGRDA1NDVBICAgICAgNDkyRCAgIExXIFQxLCA1MihTUCkNCkJGRDA1NDVDICAgICAgNDkwQyAgIExXIFQwLCA0OChTUCkNCkJGRDA1NDVFICAgICAgNDhFQiAgIExXIEEzLCA0NChTUCkNCkJGRDA1NDYwICAgICAgNDhDQSAgIExXIEEyLCA0MChTUCkNCkJGRDA1NDYyICAgICAgNDhBOSAgIExXIEExLCAzNihTUCkNCkJGRDA1NDY0ICAgICAgNDg4OCAgIExXIEEwLCAzMihTUCkNCkJGRDA1NDY2ICAgICAgNDg2NyAgIExXIFYxLCAyOChTUCkNCkJGRDA1NDY4ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkNCkJGRDA1NDZBICAgICAgNDgyNSAgIExXIEFULCAyMChTUCkNCkJGRDA1NDZDICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA1NDcwICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNTQ3MiAgNEI1RDE4MDAgICBTQiBaRVJPLCAxOTI5MyhaRVJPKQ0KQkZEMDU0NzQgICAgICA0QjVEICAgTFcgSzAsIDExNihTUCkNCkJGRDA1NDc2ICAgICAgNEI3QiAgIExXIEsxLCAxMDgoU1ApDQpCRkQwNTQ3OCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA1NDdDICAgICAgNEI1QyAgIExXIEswLCAxMTIoU1ApDQpCRkQwNTQ3RSAgICAgIDRDM0QgICBBRERJVSBTUCwgU1AsIDEyMA0KQkZEMDU0ODAgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsDQpCRkQwNTQ4MiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3DQpCRkQwNTQ4NCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQDQpCRkQwNTQ4NiAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjANCkJGRDA1NDg4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDU0OEEgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDU0OEMgIEYzN0MwMDAwICAgRVJFVA0KQkZEMDU0OEUgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0DQoyMzM6ICAgICAgICAgICAgICAgICANCjIzNDogICAgICAgICAgICAgICAgIC8qIFZDSSBJTjAgKi8NCjIzNTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMzY6ICAgICAgICAgICAgICAgICBnaXJxMjNfYjEyKHZvaWQpDQoyMzc6ICAgICAgICAgICAgICAgICB7DQpCRkQwNTQ5MCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNTQ5NCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA1NDk2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA1NDk4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDU0OUEgIDRGQzUxMEZDICAgQURESSBBMywgR1AsIDIwNDIxDQpCRkQwNTQ5QyAgICAgIDRGQzUgICBBRERJVSBTUCwgU1AsIC0xMjANCkJGRDA1NDlFICAgICAgQ0I3RCAgIFNXIEsxLCAxMTYoU1ApDQpCRkQwNTRBMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA1NEE0ICAgICAgQ0I1QyAgIFNXIEswLCAxMTIoU1ApDQpCRkQwNTRBNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDU0QUEgICAgICBDQjdCICAgU1cgSzEsIDEwOChTUCkNCkJGRDA1NEFDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNTRBRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDU0QjAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA1NEIyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDU0QjQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNTRCNiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNTRCOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA1NEJDICAgICAgQzg2NyAgIFNXIFYxLCAyOChTUCkNCkJGRDA1NEJFICAgICAgQzg0NiAgIFNXIFYwLCAyNChTUCkNCkJGRDA1NEMwICAgICAgNDg3QyAgIExXIFYxLCAxMTIoU1ApDQpCRkQwNTRDMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNTRDNCAgMDAxMTQwQTMgICBCTkVaQyBWMSwgMHhCRkQwNTRFQQ0KQkZEMDU0QzggICAgICBDQkY3ICAgU1cgUkEsIDkyKFNQKQ0KQkZEMDU0Q0EgICAgICBDQkQ2ICAgU1cgUzgsIDg4KFNQKQ0KQkZEMDU0Q0MgICAgICBDQjM1ICAgU1cgVDksIDg0KFNQKQ0KQkZEMDU0Q0UgICAgICBDQjE0ICAgU1cgVDgsIDgwKFNQKQ0KQkZEMDU0RDAgICAgICBDOUYzICAgU1cgVDcsIDc2KFNQKQ0KQkZEMDU0RDIgICAgICBDOUQyICAgU1cgVDYsIDcyKFNQKQ0KQkZEMDU0RDQgICAgICBDOUIxICAgU1cgVDUsIDY4KFNQKQ0KQkZEMDU0RDYgICAgICBDOTkwICAgU1cgVDQsIDY0KFNQKQ0KQkZEMDU0RDggICAgICBDOTZGICAgU1cgVDMsIDYwKFNQKQ0KQkZEMDU0REEgICAgICBDOTRFICAgU1cgVDIsIDU2KFNQKQ0KQkZEMDU0REMgICAgICBDOTJEICAgU1cgVDEsIDUyKFNQKQ0KQkZEMDU0REUgICAgICBDOTBDICAgU1cgVDAsIDQ4KFNQKQ0KQkZEMDU0RTAgICAgICBDOEVCICAgU1cgQTMsIDQ0KFNQKQ0KQkZEMDU0RTIgICAgICBDOENBICAgU1cgQTIsIDQwKFNQKQ0KQkZEMDU0RTQgICAgICBDOEE5ICAgU1cgQTEsIDM2KFNQKQ0KQkZEMDU0RTYgICAgICBDODg4ICAgU1cgQTAsIDMyKFNQKQ0KQkZEMDU0RTggICAgICBDODI1ICAgU1cgQVQsIDIwKFNQKQ0KQkZEMDU0RUEgICAgICA0NjQyICAgTUZMTyBWMA0KQkZEMDU0RUMgICAgICBDODU5ICAgU1cgVjAsIDEwMChTUCkNCkJGRDA1NEVFICAgICAgNDYwMyAgIE1GSEkgVjENCkJGRDA1NEYwICAgICAgQzg3OCAgIFNXIFYxLCA5NihTUCkNCkJGRDA1NEYyICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoyMzg6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMjNfSUQsIDEyLCBUUlVFKTsNCkJGRDA1NEY0ICAgICAgRUUwRiAgIExJIEEwLCAxNQ0KQkZEMDU0RjYgICAgICBFRThDICAgTEkgQTEsIDEyDQpCRkQwNTRGOCAgICAgIEVGMDEgICBMSSBBMiwgMQ0KQkZEMDU0RkEgIDNBNDA3N0U4ICAgSkFMUyBqdHZpY19kaXNfY2xyX3NvdXJjZQ0KQkZEMDU0RkMgIDBDMDAzQTQwICAgU0ggUzIsIDMwNzIoWkVSTykNCkJGRDA1NEZFICAgICAgMEMwMCAgIE5PUA0KMjM5OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDU1MDAgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA1NTAyICAgICAgNDg1OSAgIExXIFYwLCAxMDAoU1ApDQpCRkQwNTUwNCAgM0Q3QzAwMDIgICBNVExPIFYwDQpCRkQwNTUwNiAgNDg3ODNEN0MgICBMSCBUMywgMTg1NTIoR1ApDQpCRkQwNTUwOCAgICAgIDQ4NzggICBMVyBWMSwgOTYoU1ApDQpCRkQwNTUwQSAgMkQ3QzAwMDMgICBNVEhJIFYxDQpCRkQwNTUwQyAgICAgIDJEN0MgICBBTkRJIFYwLCBBMywgMHg0MA0KQkZEMDU1MEUgICAgICA0ODVDICAgTFcgVjAsIDExMihTUCkNCkJGRDA1NTEwICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA1NTEyICAwMDEzNDBBMiAgIEJORVpDIFYwLCAweEJGRDA1NTNDDQpCRkQwNTUxNiAgICAgIDRCRjcgICBMVyBSQSwgOTIoU1ApDQpCRkQwNTUxOCAgICAgIDRCRDYgICBMVyBTOCwgODgoU1ApDQpCRkQwNTUxQSAgICAgIDRCMzUgICBMVyBUOSwgODQoU1ApDQpCRkQwNTUxQyAgICAgIDRCMTQgICBMVyBUOCwgODAoU1ApDQpCRkQwNTUxRSAgICAgIDQ5RjMgICBMVyBUNywgNzYoU1ApDQpCRkQwNTUyMCAgICAgIDQ5RDIgICBMVyBUNiwgNzIoU1ApDQpCRkQwNTUyMiAgICAgIDQ5QjEgICBMVyBUNSwgNjgoU1ApDQpCRkQwNTUyNCAgICAgIDQ5OTAgICBMVyBUNCwgNjQoU1ApDQpCRkQwNTUyNiAgICAgIDQ5NkYgICBMVyBUMywgNjAoU1ApDQpCRkQwNTUyOCAgICAgIDQ5NEUgICBMVyBUMiwgNTYoU1ApDQpCRkQwNTUyQSAgICAgIDQ5MkQgICBMVyBUMSwgNTIoU1ApDQpCRkQwNTUyQyAgICAgIDQ5MEMgICBMVyBUMCwgNDgoU1ApDQpCRkQwNTUyRSAgICAgIDQ4RUIgICBMVyBBMywgNDQoU1ApDQpCRkQwNTUzMCAgICAgIDQ4Q0EgICBMVyBBMiwgNDAoU1ApDQpCRkQwNTUzMiAgICAgIDQ4QTkgICBMVyBBMSwgMzYoU1ApDQpCRkQwNTUzNCAgICAgIDQ4ODggICBMVyBBMCwgMzIoU1ApDQpCRkQwNTUzNiAgICAgIDQ4NjcgICBMVyBWMSwgMjgoU1ApDQpCRkQwNTUzOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNTUzQSAgICAgIDQ4MjUgICBMVyBBVCwgMjAoU1ApDQpCRkQwNTUzQyAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNTU0MCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDU1NDIgIDRCNUQxODAwICAgU0IgWkVSTywgMTkyOTMoWkVSTykNCkJGRDA1NTQ0ICAgICAgNEI1RCAgIExXIEswLCAxMTYoU1ApDQpCRkQwNTU0NiAgICAgIDRCN0IgICBMVyBLMSwgMTA4KFNQKQ0KQkZEMDU1NDggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNTU0QyAgICAgIDRCNUMgICBMVyBLMCwgMTEyKFNQKQ0KQkZEMDU1NEUgICAgICA0QzNEICAgQURESVUgU1AsIFNQLCAxMjANCkJGRDA1NTUwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDU1NTIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDU1NTQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDU1NTYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNTU1OCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA1NTVBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA1NTVDICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA1NTVFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNA0KMjQwOiAgICAgICAgICAgICAgICAgDQoyNDE6ICAgICAgICAgICAgICAgICAvKiBWQ0kgSU4xICovDQoyNDI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjQzOiAgICAgICAgICAgICAgICAgZ2lycTIzX2IxMyh2b2lkKQ0KMjQ0OiAgICAgICAgICAgICAgICAgew0KQkZEMDU1NjAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDU1NjQgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNTU2NiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNTU2OCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA1NTZBICA0RkM1MTBGQyAgIEFEREkgQTMsIEdQLCAyMDQyMQ0KQkZEMDU1NkMgICAgICA0RkM1ICAgQURESVUgU1AsIFNQLCAtMTIwDQpCRkQwNTU2RSAgICAgIENCN0QgICBTVyBLMSwgMTE2KFNQKQ0KQkZEMDU1NzAgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzDQpCRkQwNTU3NCAgICAgIENCNUMgICBTVyBLMCwgMTEyKFNQKQ0KQkZEMDU1NzYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA1NTdBICAgICAgQ0I3QiAgIFNXIEsxLCAxMDgoU1ApDQpCRkQwNTU3QyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDU1N0UgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA1NTgwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNTU4MiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA1NTg0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDU1ODYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDU1ODggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNTU4QyAgICAgIEM4NjcgICBTVyBWMSwgMjgoU1ApDQpCRkQwNTU4RSAgICAgIEM4NDYgICBTVyBWMCwgMjQoU1ApDQpCRkQwNTU5MCAgICAgIDQ4N0MgICBMVyBWMSwgMTEyKFNQKQ0KQkZEMDU1OTIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDU1OTQgIDAwMTE0MEEzICAgQk5FWkMgVjEsIDB4QkZEMDU1QkENCkJGRDA1NTk4ICAgICAgQ0JGNyAgIFNXIFJBLCA5MihTUCkNCkJGRDA1NTlBICAgICAgQ0JENiAgIFNXIFM4LCA4OChTUCkNCkJGRDA1NTlDICAgICAgQ0IzNSAgIFNXIFQ5LCA4NChTUCkNCkJGRDA1NTlFICAgICAgQ0IxNCAgIFNXIFQ4LCA4MChTUCkNCkJGRDA1NUEwICAgICAgQzlGMyAgIFNXIFQ3LCA3NihTUCkNCkJGRDA1NUEyICAgICAgQzlEMiAgIFNXIFQ2LCA3MihTUCkNCkJGRDA1NUE0ICAgICAgQzlCMSAgIFNXIFQ1LCA2OChTUCkNCkJGRDA1NUE2ICAgICAgQzk5MCAgIFNXIFQ0LCA2NChTUCkNCkJGRDA1NUE4ICAgICAgQzk2RiAgIFNXIFQzLCA2MChTUCkNCkJGRDA1NUFBICAgICAgQzk0RSAgIFNXIFQyLCA1NihTUCkNCkJGRDA1NUFDICAgICAgQzkyRCAgIFNXIFQxLCA1MihTUCkNCkJGRDA1NUFFICAgICAgQzkwQyAgIFNXIFQwLCA0OChTUCkNCkJGRDA1NUIwICAgICAgQzhFQiAgIFNXIEEzLCA0NChTUCkNCkJGRDA1NUIyICAgICAgQzhDQSAgIFNXIEEyLCA0MChTUCkNCkJGRDA1NUI0ICAgICAgQzhBOSAgIFNXIEExLCAzNihTUCkNCkJGRDA1NUI2ICAgICAgQzg4OCAgIFNXIEEwLCAzMihTUCkNCkJGRDA1NUI4ICAgICAgQzgyNSAgIFNXIEFULCAyMChTUCkNCkJGRDA1NUJBICAgICAgNDY0MiAgIE1GTE8gVjANCkJGRDA1NUJDICAgICAgQzg1OSAgIFNXIFYwLCAxMDAoU1ApDQpCRkQwNTVCRSAgICAgIDQ2MDMgICBNRkhJIFYxDQpCRkQwNTVDMCAgICAgIEM4NzggICBTVyBWMSwgOTYoU1ApDQpCRkQwNTVDMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMjQ1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIzX0lELCAxMywgVFJVRSk7DQpCRkQwNTVDNCAgICAgIEVFMEYgICBMSSBBMCwgMTUNCkJGRDA1NUM2ICAgICAgRUU4RCAgIExJIEExLCAxMw0KQkZEMDU1QzggICAgICBFRjAxICAgTEkgQTIsIDENCkJGRDA1NUNBICAzQTQwNzdFOCAgIEpBTFMganR2aWNfZGlzX2Nscl9zb3VyY2UNCkJGRDA1NUNDICAwQzAwM0E0MCAgIFNIIFMyLCAzMDcyKFpFUk8pDQpCRkQwNTVDRSAgICAgIDBDMDAgICBOT1ANCjI0NjogICAgICAgICAgICAgICAgIH0NCkJGRDA1NUQwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNTVEMiAgICAgIDQ4NTkgICBMVyBWMCwgMTAwKFNQKQ0KQkZEMDU1RDQgIDNEN0MwMDAyICAgTVRMTyBWMA0KQkZEMDU1RDYgIDQ4NzgzRDdDICAgTEggVDMsIDE4NTUyKEdQKQ0KQkZEMDU1RDggICAgICA0ODc4ICAgTFcgVjEsIDk2KFNQKQ0KQkZEMDU1REEgIDJEN0MwMDAzICAgTVRISSBWMQ0KQkZEMDU1REMgICAgICAyRDdDICAgQU5ESSBWMCwgQTMsIDB4NDANCkJGRDA1NURFICAgICAgNDg1QyAgIExXIFYwLCAxMTIoU1ApDQpCRkQwNTVFMCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNTVFMiAgMDAxMzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwNTYwQw0KQkZEMDU1RTYgICAgICA0QkY3ICAgTFcgUkEsIDkyKFNQKQ0KQkZEMDU1RTggICAgICA0QkQ2ICAgTFcgUzgsIDg4KFNQKQ0KQkZEMDU1RUEgICAgICA0QjM1ICAgTFcgVDksIDg0KFNQKQ0KQkZEMDU1RUMgICAgICA0QjE0ICAgTFcgVDgsIDgwKFNQKQ0KQkZEMDU1RUUgICAgICA0OUYzICAgTFcgVDcsIDc2KFNQKQ0KQkZEMDU1RjAgICAgICA0OUQyICAgTFcgVDYsIDcyKFNQKQ0KQkZEMDU1RjIgICAgICA0OUIxICAgTFcgVDUsIDY4KFNQKQ0KQkZEMDU1RjQgICAgICA0OTkwICAgTFcgVDQsIDY0KFNQKQ0KQkZEMDU1RjYgICAgICA0OTZGICAgTFcgVDMsIDYwKFNQKQ0KQkZEMDU1RjggICAgICA0OTRFICAgTFcgVDIsIDU2KFNQKQ0KQkZEMDU1RkEgICAgICA0OTJEICAgTFcgVDEsIDUyKFNQKQ0KQkZEMDU1RkMgICAgICA0OTBDICAgTFcgVDAsIDQ4KFNQKQ0KQkZEMDU1RkUgICAgICA0OEVCICAgTFcgQTMsIDQ0KFNQKQ0KQkZEMDU2MDAgICAgICA0OENBICAgTFcgQTIsIDQwKFNQKQ0KQkZEMDU2MDIgICAgICA0OEE5ICAgTFcgQTEsIDM2KFNQKQ0KQkZEMDU2MDQgICAgICA0ODg4ICAgTFcgQTAsIDMyKFNQKQ0KQkZEMDU2MDYgICAgICA0ODY3ICAgTFcgVjEsIDI4KFNQKQ0KQkZEMDU2MDggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDU2MEEgICAgICA0ODI1ICAgTFcgQVQsIDIwKFNQKQ0KQkZEMDU2MEMgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDU2MTAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA1NjEyICA0QjVEMTgwMCAgIFNCIFpFUk8sIDE5MjkzKFpFUk8pDQpCRkQwNTYxNCAgICAgIDRCNUQgICBMVyBLMCwgMTE2KFNQKQ0KQkZEMDU2MTYgICAgICA0QjdCICAgTFcgSzEsIDEwOChTUCkNCkJGRDA1NjE4ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQw0KQkZEMDU2MUMgICAgICA0QjVDICAgTFcgSzAsIDExMihTUCkNCkJGRDA1NjFFICAgICAgNEMzRCAgIEFERElVIFNQLCBTUCwgMTIwDQpCRkQwNTYyMCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA1NjIyICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA1NjI0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA1NjI2ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDU2MjggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNTYyQSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNTYyQyAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNTYyRSAgNEZGNUYzN0MgICBKQUxYIDB4QkRGMTNGRDQNCjI0NzogICAgICAgICAgICAgICAgIA0KMjQ4OiAgICAgICAgICAgICAgICAgDQoyNDk6ICAgICAgICAgICAgICAgICAjZW5kaWYNCjI1MDogICAgICAgICAgICAgICAgIA0KMjUxOiAgICAgICAgICAgICAgICAgDQoyNTI6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTIzLmMgKi8NCjI1MzogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoyNTQ6ICAgICAgICAgICAgICAgICAgKi8NCjI1NTogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnEyMi5jICAtLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnEyMi5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMjJfRElTQUdHID09IDANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQozOTogICAgICAgICAgICAgICAgICBnaXJxMjJfaXNyKHZvaWQpDQo0MDogICAgICAgICAgICAgICAgICB7DQpCRkQwNzIyOCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNzIyQyAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA3MjJFICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA3MjMwICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDcyMzIgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1DQpCRkQwNzIzNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDcyMzYgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQ0KQkZEMDcyMzggIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzDQpCRkQwNzIzQyAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApDQpCRkQwNzIzRSAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDcyNDIgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQ0KQkZEMDcyNDQgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA3MjQ2ICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNzI0OCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDcyNEEgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNzI0QyAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA3MjRFICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA3MjUwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDcyNTQgICAgICBDODYyICAgU1cgVjEsIDgoU1ApDQpCRkQwNzI1NiAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkNCkJGRDA3MjU4ICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkNCkJGRDA3MjVBICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA3MjVDICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA3MjVFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo0MTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8MTQpOw0KQkZEMDcyNjAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA3MjYyICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkNCkJGRDA3MjY0ICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5Mg0KQkZEMDcyNjggIDQwMDAzMDYwICAgQURESVUgVjEsIFpFUk8sIDE2Mzg0DQpCRkQwNzI2QSAgRTlBMDQwMDAgICBCTFRaIFpFUk8sIDB4QkZEMDQ1QUUNCkJGRDA3MjZDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNDI6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDcyNkUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3MjcwICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkNCkJGRDA3MjcyICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA3Mjc0ICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDA3Mjc2ICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQ0KQkZEMDcyNzggICAgICA0ODQxICAgTFcgVjAsIDQoU1ApDQpCRkQwNzI3QSAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNzI3RSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDcyODAgIDRCNDcxODAwICAgU0IgWkVSTywgMTkyNzEoWkVSTykNCkJGRDA3MjgyICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkNCkJGRDA3Mjg0ICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkNCkJGRDA3Mjg2ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQw0KQkZEMDcyOEEgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQ0KQkZEMDcyOEMgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDcyOEUgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsDQpCRkQwNzI5MCAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3DQpCRkQwNzI5MiAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQDQpCRkQwNzI5NCAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjANCkJGRDA3Mjk2ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDcyOTggIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDcyOUEgIEYzN0MwMDAwICAgRVJFVA0KQkZEMDcyOUMgIDBDMDBGMzdDICAgSkFMWCAweEJERjAzMDAwDQo0MzogICAgICAgICAgICAgICAgICANCjQ0OiAgICAgICAgICAgICAgICAgICNlbHNlDQo0NTogICAgICAgICAgICAgICAgICANCjQ2OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo0NzogICAgICAgICAgICAgICAgICBnaXJxMjJfYjAodm9pZCkNCjQ4OiAgICAgICAgICAgICAgICAgIHsNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgMCk7DQo1MDogICAgICAgICAgICAgICAgICB9DQo1MTogICAgICAgICAgICAgICAgICANCjUyOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1MzogICAgICAgICAgICAgICAgICBnaXJxMjJfYjEodm9pZCkNCjU0OiAgICAgICAgICAgICAgICAgIHsNCjU1OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgMSk7DQo1NjogICAgICAgICAgICAgICAgICB9DQo1NzogICAgICAgICAgICAgICAgICANCjU4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1OTogICAgICAgICAgICAgICAgICBnaXJxMjJfYjIodm9pZCkNCjYwOiAgICAgICAgICAgICAgICAgIHsNCjYxOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgMik7DQo2MjogICAgICAgICAgICAgICAgICB9DQo2MzogICAgICAgICAgICAgICAgICANCjY0OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2NTogICAgICAgICAgICAgICAgICBnaXJxMjJfYjModm9pZCkNCjY2OiAgICAgICAgICAgICAgICAgIHsNCjY3OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgMyk7DQo2ODogICAgICAgICAgICAgICAgICB9DQo2OTogICAgICAgICAgICAgICAgICANCjcwOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3MTogICAgICAgICAgICAgICAgICBnaXJxMjJfYjQodm9pZCkNCjcyOiAgICAgICAgICAgICAgICAgIHsNCjczOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgNCk7DQo3NDogICAgICAgICAgICAgICAgICB9DQo3NTogICAgICAgICAgICAgICAgICANCjc2OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3NzogICAgICAgICAgICAgICAgICBnaXJxMjJfYjUodm9pZCkNCjc4OiAgICAgICAgICAgICAgICAgIHsNCjc5OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgNSk7DQo4MDogICAgICAgICAgICAgICAgICB9DQo4MTogICAgICAgICAgICAgICAgICANCjgyOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo4MzogICAgICAgICAgICAgICAgICBnaXJxMjJfYjYodm9pZCkNCjg0OiAgICAgICAgICAgICAgICAgIHsNCjg1OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgNik7DQo4NjogICAgICAgICAgICAgICAgICB9DQo4NzogICAgICAgICAgICAgICAgICANCjg4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo4OTogICAgICAgICAgICAgICAgICBnaXJxMjJfYjcodm9pZCkNCjkwOiAgICAgICAgICAgICAgICAgIHsNCjkxOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgNyk7DQo5MjogICAgICAgICAgICAgICAgICB9DQo5MzogICAgICAgICAgICAgICAgICANCjk0OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo5NTogICAgICAgICAgICAgICAgICBnaXJxMjJfYjgodm9pZCkNCjk2OiAgICAgICAgICAgICAgICAgIHsNCjk3OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgOCk7DQo5ODogICAgICAgICAgICAgICAgICB9DQo5OTogICAgICAgICAgICAgICAgICANCjEwMDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMDE6ICAgICAgICAgICAgICAgICBnaXJxMjJfYjkodm9pZCkNCjEwMjogICAgICAgICAgICAgICAgIHsNCjEwMzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEyMl9JRCwgOSk7DQoxMDQ6ICAgICAgICAgICAgICAgICB9DQoxMDU6ICAgICAgICAgICAgICAgICANCjEwNjogICAgICAgICAgICAgICAgIA0KMTA3OiAgICAgICAgICAgICAgICAgI2VuZGlmDQoxMDg6ICAgICAgICAgICAgICAgICANCjEwOTogICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMjIuYyAqLw0KMTEwOiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjExMTogICAgICAgICAgICAgICAgICAqLw0KMTEyOiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTIxLmMgIC0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTIxLmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlEyMV9ESVNBR0cgPT0gMA0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICAvKg0KMzk6ICAgICAgICAgICAgICAgICAgICogR0lSUTIxIGlzIGEgd2FrZSBwZXJpcGhlcmFsIGxvZ2ljIG9ubHkgaW50ZXJydXB0Lg0KNDA6ICAgICAgICAgICAgICAgICAgICogSXQncyBwdXJwb3NlIGlzIHRvIGFsbG93IHRoZSBwZXJpcGhlcmFsIGxvZ2ljIHN1Y2ggYXMgU01CdXMgb3IgTFBDIHRvIA0KNDE6ICAgICAgICAgICAgICAgICAgICogd2FrZSBhbiBzZXJ2aWNlIEhXIGV2ZW50IHdpdGhvdXQgd2FraW5nIHRoZSBFQy4NCjQyOiAgICAgICAgICAgICAgICAgICAqIFRoaXMgaGFuZGxlciBpcyBzdXBlcmZsdW91cy4NCjQzOiAgICAgICAgICAgICAgICAgICAqLw0KNDQ6ICAgICAgICAgICAgICAgICAgDQo0NTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjQ2OiAgICAgICAgICAgICAgICAgIGdpcnEyMV9pc3Iodm9pZCkNCjQ3OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA3MUIwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA3MUI0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDcxQjYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDcxQjggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNzFCQSAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUNCkJGRDA3MUJDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNzFCRSAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApDQpCRkQwNzFDMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA3MUM0ICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkNCkJGRDA3MUM2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNzFDQSAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApDQpCRkQwNzFDQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDcxQ0UgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA3MUQwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNzFEMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA3MUQ0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDcxRDYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDcxRDggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzFEQyAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkNCkJGRDA3MURFICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQ0KQkZEMDcxRTAgICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQ0KQkZEMDcxRTIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDcxRTQgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDcxRTYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjQ4OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDwxMyk7DQpCRkQwNzFFOCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDcxRUEgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDcxRUMgIEM1MEM1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDkyDQpCRkQwNzFGMCAgMjAwMDMwNjAgICBBRERJVSBWMSwgWkVSTywgODE5Mg0KQkZEMDcxRjQgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo0OTogICAgICAgICAgICAgICAgICB9DQpCRkQwNzFGNiAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDcxRjggICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDcxRkEgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDcxRkMgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDcxRkUgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApDQpCRkQwNzIwMCAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkNCkJGRDA3MjAyICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA3MjA2ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNzIwOCAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQ0KQkZEMDcyMEEgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQ0KQkZEMDcyMEMgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQ0KQkZEMDcyMEUgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNzIxMiAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApDQpCRkQwNzIxNCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNzIxNiAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA3MjE4ICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA3MjFBICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA3MjFDICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDcyMUUgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzIyMCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNzIyMiAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNzIyNCAgMEMwMEYzN0MgICBKQUxYIDB4QkRGMDMwMDANCjUwOiAgICAgICAgICAgICAgICAgIA0KNTE6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjUyOiAgICAgICAgICAgICAgICAgIA0KNTM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU0OiAgICAgICAgICAgICAgICAgIGdpcnEyMV9iMCh2b2lkKQ0KNTU6ICAgICAgICAgICAgICAgICAgew0KNTY6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDEzKTsNCjU3OiAgICAgICAgICAgICAgICAgIH0NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo2MDogICAgICAgICAgICAgICAgICANCjYxOiAgICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMjEuYyAqLw0KNjI6ICAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjYzOiAgICAgICAgICAgICAgICAgICAqLw0KNjQ6ICAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTIwLmMgIC0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTIwLmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlEyMF9ESVNBR0cgPT0gMA0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjM5OiAgICAgICAgICAgICAgICAgIGdpcnEyMF9pc3Iodm9pZCkNCjQwOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA3MTM4ICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA3MTNDICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDcxM0UgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDcxNDAgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNzE0MiAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUNCkJGRDA3MTQ0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNzE0NiAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApDQpCRkQwNzE0OCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA3MTRDICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkNCkJGRDA3MTRFICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNzE1MiAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApDQpCRkQwNzE1NCAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDcxNTYgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA3MTU4ICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNzE1QSAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA3MTVDICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDcxNUUgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDcxNjAgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzE2NCAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkNCkJGRDA3MTY2ICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQ0KQkZEMDcxNjggICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQ0KQkZEMDcxNkEgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDcxNkMgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDcxNkUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjQxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDwxMik7DQpCRkQwNzE3MCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDcxNzIgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDcxNzQgIEM1MEM1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDkyDQpCRkQwNzE3OCAgMTAwMDMwNjAgICBBRERJVSBWMSwgWkVSTywgNDA5Ng0KQkZEMDcxN0EgIEU5QTAxMDAwICAgQURESSBaRVJPLCBaRVJPLCAtNTcyOA0KQkZEMDcxN0MgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo0MjogICAgICAgICAgICAgICAgICB9DQpCRkQwNzE3RSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDcxODAgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDcxODIgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDcxODQgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDcxODYgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApDQpCRkQwNzE4OCAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkNCkJGRDA3MThBICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA3MThFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNzE5MCAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQ0KQkZEMDcxOTIgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQ0KQkZEMDcxOTQgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQ0KQkZEMDcxOTYgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNzE5QSAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApDQpCRkQwNzE5QyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNzE5RSAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA3MUEwICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA3MUEyICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA3MUE0ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDcxQTYgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzFBOCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNzFBQSAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNzFBQyAgMEMwMEYzN0MgICBKQUxYIDB4QkRGMDMwMDANCjQzOiAgICAgICAgICAgICAgICAgIA0KNDQ6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ1OiAgICAgICAgICAgICAgICAgIA0KNDY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ3OiAgICAgICAgICAgICAgICAgIGdpcnEyMF9iMCh2b2lkKQ0KNDg6ICAgICAgICAgICAgICAgICAgew0KNDk6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIwX0lELCAwKTsNCjUwOiAgICAgICAgICAgICAgICAgIH0NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjUzOiAgICAgICAgICAgICAgICAgIGdpcnEyMF9iMSh2b2lkKQ0KNTQ6ICAgICAgICAgICAgICAgICAgew0KNTU6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIwX0lELCAxKTsNCjU2OiAgICAgICAgICAgICAgICAgIH0NCjU3OiAgICAgICAgICAgICAgICAgIA0KNTg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU5OiAgICAgICAgICAgICAgICAgIGdpcnEyMF9iMih2b2lkKQ0KNjA6ICAgICAgICAgICAgICAgICAgew0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIwX0lELCAyKTsNCjYyOiAgICAgICAgICAgICAgICAgIH0NCjYzOiAgICAgICAgICAgICAgICAgIA0KNjQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY1OiAgICAgICAgICAgICAgICAgIGdpcnEyMF9iMyh2b2lkKQ0KNjY6ICAgICAgICAgICAgICAgICAgew0KNjc6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIwX0lELCAzKTsNCjY4OiAgICAgICAgICAgICAgICAgIH0NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjcxOiAgICAgICAgICAgICAgICAgIGdpcnEyMF9iNCh2b2lkKQ0KNzI6ICAgICAgICAgICAgICAgICAgew0KNzM6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIwX0lELCA0KTsNCjc0OiAgICAgICAgICAgICAgICAgIH0NCjc1OiAgICAgICAgICAgICAgICAgIA0KNzY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc3OiAgICAgICAgICAgICAgICAgIGdpcnEyMF9iNSh2b2lkKQ0KNzg6ICAgICAgICAgICAgICAgICAgew0KNzk6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTIwX0lELCA1KTsNCjgwOiAgICAgICAgICAgICAgICAgIH0NCjgxOiAgICAgICAgICAgICAgICAgIA0KODI6ICAgICAgICAgICAgICAgICAgDQo4MzogICAgICAgICAgICAgICAgICAjZW5kaWYNCjg0OiAgICAgICAgICAgICAgICAgIA0KODU6ICAgICAgICAgICAgICAgICAgLyogZW5kIGdpcnEyMC5jICovDQo4NjogICAgICAgICAgICAgICAgICAvKiogICBAfQ0KODc6ICAgICAgICAgICAgICAgICAgICovDQo4ODogICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMTkuYyAgLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIChjKSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnaXJxMTkuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBmb3IgTUlQUyB1c2luZyB2YW5pbGxhIEdDQyBhbmQgTUNIUCBYQzMyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBJU1INCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM0OiAgICAgICAgICAgICAgICAgIA0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICAjaWYgR0lSUTE5X0RJU0FHRyA9PSAwDQozNzogICAgICAgICAgICAgICAgICANCjM4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KMzk6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2lzcih2b2lkKQ0KNDA6ICAgICAgICAgICAgICAgICAgew0KQkZEMDcwQzAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDcwQzQgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNzBDNiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNzBDOCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA3MENBICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQ0KQkZEMDcwQ0MgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA3MENFICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkNCkJGRDA3MEQwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDcwRDQgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQ0KQkZEMDcwRDYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA3MERBICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkNCkJGRDA3MERDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNzBERSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDcwRTAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA3MEUyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDcwRTQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNzBFNiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNzBFOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3MEVDICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQ0KQkZEMDcwRUUgICAgICBDODQxICAgU1cgVjAsIDQoU1ApDQpCRkQwNzBGMCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApDQpCRkQwNzBGMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNzBGNCAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwNzBGNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KNDE6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDExKTsNCkJGRDA3MEY4ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNzBGQSAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNzBGQyAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTINCkJGRDA3MTAwICAwODAwMzA2MCAgIEFERElVIFYxLCBaRVJPLCAyMDQ4DQpCRkQwNzEwMiAgICAgIDA4MDAgICBMQlUgUzAsIDAoUzApDQpCRkQwNzEwNCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQyOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3MTA2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNzEwOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNzEwQSAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNzEwQyAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwNzEwRSAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkNCkJGRDA3MTEwICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQ0KQkZEMDcxMTIgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDcxMTYgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA3MTE4ICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pDQpCRkQwNzExQSAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApDQpCRkQwNzExQyAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApDQpCRkQwNzExRSAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA3MTIyICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkNCkJGRDA3MTI0ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3MTI2ICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDcxMjggIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDcxMkEgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDcxMkMgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNzEyRSAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3MTMwICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA3MTMyICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA3MTM0ICAwQzAwRjM3QyAgIEpBTFggMHhCREYwMzAwMA0KNDM6ICAgICAgICAgICAgICAgICAgDQo0NDogICAgICAgICAgICAgICAgICAjZWxzZQ0KNDU6ICAgICAgICAgICAgICAgICAgDQo0NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNDc6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2IwKHZvaWQpDQo0ODogICAgICAgICAgICAgICAgICB7DQo0OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDApOw0KNTA6ICAgICAgICAgICAgICAgICAgfQ0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTM6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2IxKHZvaWQpDQo1NDogICAgICAgICAgICAgICAgICB7DQo1NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDEpOw0KNTY6ICAgICAgICAgICAgICAgICAgfQ0KNTc6ICAgICAgICAgICAgICAgICAgDQo1ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTk6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2IyKHZvaWQpDQo2MDogICAgICAgICAgICAgICAgICB7DQo2MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDIpOw0KNjI6ICAgICAgICAgICAgICAgICAgfQ0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjU6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2IzKHZvaWQpDQo2NjogICAgICAgICAgICAgICAgICB7DQo2NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDMpOw0KNjg6ICAgICAgICAgICAgICAgICAgfQ0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzE6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I0KHZvaWQpDQo3MjogICAgICAgICAgICAgICAgICB7DQo3MzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDQpOw0KNzQ6ICAgICAgICAgICAgICAgICAgfQ0KNzU6ICAgICAgICAgICAgICAgICAgDQo3NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzc6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I1KHZvaWQpDQo3ODogICAgICAgICAgICAgICAgICB7DQo3OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDUpOw0KODA6ICAgICAgICAgICAgICAgICAgfQ0KODE6ICAgICAgICAgICAgICAgICAgDQo4MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODM6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I2KHZvaWQpDQo4NDogICAgICAgICAgICAgICAgICB7DQo4NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDYpOw0KODY6ICAgICAgICAgICAgICAgICAgfQ0KODc6ICAgICAgICAgICAgICAgICAgDQo4ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODk6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I3KHZvaWQpDQo5MDogICAgICAgICAgICAgICAgICB7DQo5MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDcpOw0KOTI6ICAgICAgICAgICAgICAgICAgfQ0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTU6ICAgICAgICAgICAgICAgICAgZ2lycTE5X2I4KHZvaWQpDQo5NjogICAgICAgICAgICAgICAgICB7DQo5NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTlfSUQsIDgpOw0KOTg6ICAgICAgICAgICAgICAgICAgfQ0KOTk6ICAgICAgICAgICAgICAgICAgDQoxMDA6ICAgICAgICAgICAgICAgICANCjEwMTogICAgICAgICAgICAgICAgICNlbmRpZg0KMTAyOiAgICAgICAgICAgICAgICAgDQoxMDM6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTE5LmMgKi8NCjEwNDogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoxMDU6ICAgICAgICAgICAgICAgICAgKi8NCjEwNjogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnExOC5jICAtLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnExOC5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMThfRElTQUdHID09IDANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQozOTogICAgICAgICAgICAgICAgICBnaXJxMThfaXNyKHZvaWQpDQo0MDogICAgICAgICAgICAgICAgICB7DQpCRkQwNzA0OCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNzA0QyAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA3MDRFICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA3MDUwICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDcwNTIgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1DQpCRkQwNzA1NCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDcwNTYgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQ0KQkZEMDcwNTggIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzDQpCRkQwNzA1QyAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApDQpCRkQwNzA1RSAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDcwNjIgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQ0KQkZEMDcwNjQgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA3MDY2ICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNzA2OCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDcwNkEgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNzA2QyAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA3MDZFICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA3MDcwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDcwNzQgICAgICBDODYyICAgU1cgVjEsIDgoU1ApDQpCRkQwNzA3NiAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkNCkJGRDA3MDc4ICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkNCkJGRDA3MDdBICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA3MDdDICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA3MDdFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo0MTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8MTApOw0KQkZEMDcwODAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA3MDgyICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkNCkJGRDA3MDg0ICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5Mg0KQkZEMDcwODggIDA0MDAzMDYwICAgQURESVUgVjEsIFpFUk8sIDEwMjQNCkJGRDA3MDhBICAgICAgMDQwMCAgIEFERFUgUzAsIFMwLCBTMA0KQkZEMDcwOEMgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo0MjogICAgICAgICAgICAgICAgICB9DQpCRkQwNzA4RSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDcwOTAgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDcwOTIgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDcwOTQgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDcwOTYgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApDQpCRkQwNzA5OCAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkNCkJGRDA3MDlBICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA3MDlFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNzBBMCAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQ0KQkZEMDcwQTIgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQ0KQkZEMDcwQTQgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQ0KQkZEMDcwQTYgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNzBBQSAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApDQpCRkQwNzBBQyAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNzBBRSAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA3MEIwICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA3MEIyICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA3MEI0ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDcwQjYgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzBCOCAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNzBCQSAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNzBCQyAgMEMwMEYzN0MgICBKQUxYIDB4QkRGMDMwMDANCjQzOiAgICAgICAgICAgICAgICAgIA0KNDQ6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ1OiAgICAgICAgICAgICAgICAgIA0KNDY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ3OiAgICAgICAgICAgICAgICAgIGdpcnExOF9iMCh2b2lkKQ0KNDg6ICAgICAgICAgICAgICAgICAgew0KNDk6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE4X0lELCAwKTsNCjUwOiAgICAgICAgICAgICAgICAgIH0NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo1MzogICAgICAgICAgICAgICAgICANCjU0OiAgICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMTguYyAqLw0KNTU6ICAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjU2OiAgICAgICAgICAgICAgICAgICAqLw0KNTc6ICAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTE3LmMgIC0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTE3LmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlExN19ESVNBR0cgPT0gMA0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjM5OiAgICAgICAgICAgICAgICAgIGdpcnExN19pc3Iodm9pZCkNCjQwOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA2RkQwICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA2RkQ0ICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDZGRDYgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDZGRDggIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNkZEQSAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUNCkJGRDA2RkRDICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNkZERSAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApDQpCRkQwNkZFMCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA2RkU0ICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkNCkJGRDA2RkU2ICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNkZFQSAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApDQpCRkQwNkZFQyAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDZGRUUgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA2RkYwICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNkZGMiAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA2RkY0ICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDZGRjYgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDZGRjggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNkZGQyAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkNCkJGRDA2RkZFICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQ0KQkZEMDcwMDAgICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQ0KQkZEMDcwMDIgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDcwMDQgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDcwMDYgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjQxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDw5KTsNCkJGRDA3MDA4ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNzAwQSAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNzAwQyAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTINCkJGRDA3MDEwICAwMjAwMzA2MCAgIEFERElVIFYxLCBaRVJPLCA1MTINCkJGRDA3MDE0ICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNDI6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDcwMTYgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3MDE4ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkNCkJGRDA3MDFBICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA3MDFDICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDA3MDFFICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQ0KQkZEMDcwMjAgICAgICA0ODQxICAgTFcgVjAsIDQoU1ApDQpCRkQwNzAyMiAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNzAyNiAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDcwMjggIDRCNDcxODAwICAgU0IgWkVSTywgMTkyNzEoWkVSTykNCkJGRDA3MDJBICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkNCkJGRDA3MDJDICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkNCkJGRDA3MDJFICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQw0KQkZEMDcwMzIgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQ0KQkZEMDcwMzQgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDcwMzYgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsDQpCRkQwNzAzOCAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3DQpCRkQwNzAzQSAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQDQpCRkQwNzAzQyAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjANCkJGRDA3MDNFICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDcwNDAgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDcwNDIgIEYzN0MwMDAwICAgRVJFVA0KQkZEMDcwNDQgIDBDMDBGMzdDICAgSkFMWCAweEJERjAzMDAwDQo0MzogICAgICAgICAgICAgICAgICANCjQ0OiAgICAgICAgICAgICAgICAgICNlbHNlDQo0NTogICAgICAgICAgICAgICAgICANCjQ2OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo0NzogICAgICAgICAgICAgICAgICBnaXJxMTdfYjAodm9pZCkNCjQ4OiAgICAgICAgICAgICAgICAgIHsNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDApOw0KNTA6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgMCk7DQo1MTogICAgICAgICAgICAgICAgICB9DQo1MjogICAgICAgICAgICAgICAgICANCjUzOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1NDogICAgICAgICAgICAgICAgICBnaXJxMTdfYjEodm9pZCkNCjU1OiAgICAgICAgICAgICAgICAgIHsNCjU2OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDEpOw0KNTc6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgMSk7DQo1ODogICAgICAgICAgICAgICAgICB9DQo1OTogICAgICAgICAgICAgICAgICANCjYwOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2MTogICAgICAgICAgICAgICAgICBnaXJxMTdfYjIodm9pZCkNCjYyOiAgICAgICAgICAgICAgICAgIHsNCjYzOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDIpOw0KNjQ6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgMik7DQo2NTogICAgICAgICAgICAgICAgICB9DQo2NjogICAgICAgICAgICAgICAgICANCjY3OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2ODogICAgICAgICAgICAgICAgICBnaXJxMTdfYjModm9pZCkNCjY5OiAgICAgICAgICAgICAgICAgIHsNCjcwOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDMpOw0KNzE6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgMyk7DQo3MjogICAgICAgICAgICAgICAgICB9DQo3MzogICAgICAgICAgICAgICAgICANCjc0OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3NTogICAgICAgICAgICAgICAgICBnaXJxMTdfYjQodm9pZCkNCjc2OiAgICAgICAgICAgICAgICAgIHsNCjc3OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDQpOw0KNzg6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgNCk7DQo3OTogICAgICAgICAgICAgICAgICB9DQo4MDogICAgICAgICAgICAgICAgICANCjgxOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo4MjogICAgICAgICAgICAgICAgICBnaXJxMTdfYjUodm9pZCkNCjgzOiAgICAgICAgICAgICAgICAgIHsNCjg0OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDUpOw0KODU6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgNSk7DQo4NjogICAgICAgICAgICAgICAgICB9DQo4NzogICAgICAgICAgICAgICAgICANCjg4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo4OTogICAgICAgICAgICAgICAgICBnaXJxMTdfYjYodm9pZCkNCjkwOiAgICAgICAgICAgICAgICAgIHsNCjkxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDYpOw0KOTI6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgNik7DQo5MzogICAgICAgICAgICAgICAgICB9DQo5NDogICAgICAgICAgICAgICAgICANCjk1OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo5NjogICAgICAgICAgICAgICAgICBnaXJxMTdfYjcodm9pZCkNCjk3OiAgICAgICAgICAgICAgICAgIHsNCjk4OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDcpOw0KOTk6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgNyk7DQoxMDA6ICAgICAgICAgICAgICAgICB9DQoxMDE6ICAgICAgICAgICAgICAgICANCjEwMjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMDM6ICAgICAgICAgICAgICAgICBnaXJxMTdfYjgodm9pZCkNCjEwNDogICAgICAgICAgICAgICAgIHsNCjEwNTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDgpOw0KMTA2OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgOCk7DQoxMDc6ICAgICAgICAgICAgICAgICB9DQoxMDg6ICAgICAgICAgICAgICAgICANCjEwOTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMTA6ICAgICAgICAgICAgICAgICBnaXJxMTdfYjkodm9pZCkNCjExMTogICAgICAgICAgICAgICAgIHsNCjExMjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTE3X0lEXS5FTl9DTFIgPSAoMXVsIDw8IDkpOw0KMTEzOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMTdfSURdLlNPVVJDRSA9ICgxdWwgPDwgOSk7DQoxMTQ6ICAgICAgICAgICAgICAgICB9DQoxMTU6ICAgICAgICAgICAgICAgICANCjExNjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMTc6ICAgICAgICAgICAgICAgICBnaXJxMTdfYjEwKHZvaWQpDQoxMTg6ICAgICAgICAgICAgICAgICB7DQoxMTk6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlExN19JRF0uRU5fQ0xSID0gKDF1bCA8PCAxMCk7DQoxMjA6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlExN19JRF0uU09VUkNFID0gKDF1bCA8PCAxMCk7DQoxMjE6ICAgICAgICAgICAgICAgICB9DQoxMjI6ICAgICAgICAgICAgICAgICANCjEyMzogICAgICAgICAgICAgICAgICNlbmRpZg0KMTI0OiAgICAgICAgICAgICAgICAgDQoxMjU6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTE3LmMgKi8NCjEyNjogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoxMjc6ICAgICAgICAgICAgICAgICAgKi8NCjEyODogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnExNi5jICAtLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnExNi5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgIA0KMzc6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlExNl9ESVNBR0cgPT0gMA0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjQwOiAgICAgICAgICAgICAgICAgIGdpcnExNl9pc3Iodm9pZCkNCjQxOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA2RjU4ICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA2RjVDICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDZGNUUgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDZGNjAgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNkY2MiAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUNCkJGRDA2RjY0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNkY2NiAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApDQpCRkQwNkY2OCAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA2RjZDICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkNCkJGRDA2RjZFICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNkY3MiAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApDQpCRkQwNkY3NCAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDZGNzYgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA2Rjc4ICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNkY3QSAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA2RjdDICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDZGN0UgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDZGODAgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNkY4NCAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkNCkJGRDA2Rjg2ICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQ0KQkZEMDZGODggICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQ0KQkZEMDZGOEEgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDZGOEMgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDZGOEUgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjQyOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDw4KTsNCkJGRDA2RjkwICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNkY5MiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNkY5NCAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTINCkJGRDA2Rjk4ICAwMTAwMzA2MCAgIEFERElVIFYxLCBaRVJPLCAyNTYNCkJGRDA2RjlDICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNDM6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDZGOUUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA2RkEwICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkNCkJGRDA2RkEyICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA2RkE0ICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDA2RkE2ICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQ0KQkZEMDZGQTggICAgICA0ODQxICAgTFcgVjAsIDQoU1ApDQpCRkQwNkZBQSAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNkZBRSAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDZGQjAgIDRCNDcxODAwICAgU0IgWkVSTywgMTkyNzEoWkVSTykNCkJGRDA2RkIyICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkNCkJGRDA2RkI0ICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkNCkJGRDA2RkI2ICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQw0KQkZEMDZGQkEgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQ0KQkZEMDZGQkMgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDZGQkUgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsDQpCRkQwNkZDMCAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3DQpCRkQwNkZDMiAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQDQpCRkQwNkZDNCAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjANCkJGRDA2RkM2ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDZGQzggIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDZGQ0EgIEYzN0MwMDAwICAgRVJFVA0KQkZEMDZGQ0MgIDBDMDBGMzdDICAgSkFMWCAweEJERjAzMDAwDQo0NDogICAgICAgICAgICAgICAgICANCjQ1OiAgICAgICAgICAgICAgICAgICNlbHNlDQo0NjogICAgICAgICAgICAgICAgICANCjQ3OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo0ODogICAgICAgICAgICAgICAgICBnaXJxMTZfYjAodm9pZCkNCjQ5OiAgICAgICAgICAgICAgICAgIHsNCjUwOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgMCk7DQo1MTogICAgICAgICAgICAgICAgICB9DQo1MjogICAgICAgICAgICAgICAgICANCjUzOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1NDogICAgICAgICAgICAgICAgICBnaXJxMTZfYjEodm9pZCkNCjU1OiAgICAgICAgICAgICAgICAgIHsNCjU2OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgMSk7DQo1NzogICAgICAgICAgICAgICAgICB9DQo1ODogICAgICAgICAgICAgICAgICANCjU5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2MDogICAgICAgICAgICAgICAgICBnaXJxMTZfYjIodm9pZCkNCjYxOiAgICAgICAgICAgICAgICAgIHsNCjYyOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgMik7DQo2MzogICAgICAgICAgICAgICAgICB9DQo2NDogICAgICAgICAgICAgICAgICANCjY1OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2NjogICAgICAgICAgICAgICAgICBnaXJxMTZfYjModm9pZCkNCjY3OiAgICAgICAgICAgICAgICAgIHsNCjY4OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgMyk7DQo2OTogICAgICAgICAgICAgICAgICB9DQo3MDogICAgICAgICAgICAgICAgICANCjcxOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3MjogICAgICAgICAgICAgICAgICBnaXJxMTZfYjQodm9pZCkNCjczOiAgICAgICAgICAgICAgICAgIHsNCjc0OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgNCk7DQo3NTogICAgICAgICAgICAgICAgICB9DQo3NjogICAgICAgICAgICAgICAgICANCjc3OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3ODogICAgICAgICAgICAgICAgICBnaXJxMTZfYjUodm9pZCkNCjc5OiAgICAgICAgICAgICAgICAgIHsNCjgwOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgNSk7DQo4MTogICAgICAgICAgICAgICAgICB9DQo4MjogICAgICAgICAgICAgICAgICANCjgzOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo4NDogICAgICAgICAgICAgICAgICBnaXJxMTZfYjYodm9pZCkNCjg1OiAgICAgICAgICAgICAgICAgIHsNCjg2OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgNik7DQo4NzogICAgICAgICAgICAgICAgICB9DQo4ODogICAgICAgICAgICAgICAgICANCjg5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo5MDogICAgICAgICAgICAgICAgICBnaXJxMTZfYjcodm9pZCkNCjkxOiAgICAgICAgICAgICAgICAgIHsNCjkyOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgNyk7DQo5MzogICAgICAgICAgICAgICAgICB9DQo5NDogICAgICAgICAgICAgICAgICANCjk1OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo5NjogICAgICAgICAgICAgICAgICBnaXJxMTZfYjgodm9pZCkNCjk3OiAgICAgICAgICAgICAgICAgIHsNCjk4OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgOCk7DQo5OTogICAgICAgICAgICAgICAgICB9DQoxMDA6ICAgICAgICAgICAgICAgICANCjEwMTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMDI6ICAgICAgICAgICAgICAgICBnaXJxMTZfYjkodm9pZCkNCjEwMzogICAgICAgICAgICAgICAgIHsNCjEwNDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNl9JRCwgOSk7DQoxMDU6ICAgICAgICAgICAgICAgICB9DQoxMDY6ICAgICAgICAgICAgICAgICANCjEwNzogICAgICAgICAgICAgICAgICNlbmRpZg0KMTA4OiAgICAgICAgICAgICAgICAgDQoxMDk6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTE2LmMgKi8NCjExMDogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoxMTE6ICAgICAgICAgICAgICAgICAgKi8NCjExMjogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnExNS5jICAtLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnExNS5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMTVfRElTQUdHID09IDANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQozOTogICAgICAgICAgICAgICAgICBnaXJxMTVfaXNyKHZvaWQpDQo0MDogICAgICAgICAgICAgICAgICB7DQpCRkQwNkVFMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNkVFNCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA2RUU2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA2RUU4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDZFRUEgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1DQpCRkQwNkVFQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDZFRUUgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQ0KQkZEMDZFRjAgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzDQpCRkQwNkVGNCAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApDQpCRkQwNkVGNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDZFRkEgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQ0KQkZEMDZFRkMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA2RUZFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNkYwMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDZGMDIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNkYwNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA2RjA2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA2RjA4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDZGMEMgICAgICBDODYyICAgU1cgVjEsIDgoU1ApDQpCRkQwNkYwRSAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkNCkJGRDA2RjEwICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkNCkJGRDA2RjEyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA2RjE0ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA2RjE2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo0MTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8Nyk7DQpCRkQwNkYxOCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDZGMUEgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDZGMUMgIEM1MEM1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDkyDQpCRkQwNkYyMCAgMDA4MDMwNjAgICBBRERJVSBWMSwgWkVSTywgMTI4DQpCRkQwNkYyNCAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQyOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA2RjI2ICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNkYyOCAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNkYyQSAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNkYyQyAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwNkYyRSAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkNCkJGRDA2RjMwICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQ0KQkZEMDZGMzIgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDZGMzYgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA2RjM4ICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pDQpCRkQwNkYzQSAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApDQpCRkQwNkYzQyAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApDQpCRkQwNkYzRSAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA2RjQyICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkNCkJGRDA2RjQ0ICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA2RjQ2ICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDZGNDggIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDZGNEEgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDZGNEMgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNkY0RSAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA2RjUwICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA2RjUyICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA2RjU0ICAwQzAwRjM3QyAgIEpBTFggMHhCREYwMzAwMA0KNDM6ICAgICAgICAgICAgICAgICAgDQo0NDogICAgICAgICAgICAgICAgICAjZWxzZQ0KNDU6ICAgICAgICAgICAgICAgICAgDQo0NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNDc6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2IwKHZvaWQpDQo0ODogICAgICAgICAgICAgICAgICB7DQo0OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDApOw0KNTA6ICAgICAgICAgICAgICAgICAgfQ0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTM6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2IxKHZvaWQpDQo1NDogICAgICAgICAgICAgICAgICB7DQo1NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDEpOw0KNTY6ICAgICAgICAgICAgICAgICAgfQ0KNTc6ICAgICAgICAgICAgICAgICAgDQo1ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTk6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2IyKHZvaWQpDQo2MDogICAgICAgICAgICAgICAgICB7DQo2MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDIpOw0KNjI6ICAgICAgICAgICAgICAgICAgfQ0KNjM6ICAgICAgICAgICAgICAgICAgDQo2NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjU6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2IzKHZvaWQpDQo2NjogICAgICAgICAgICAgICAgICB7DQo2NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDMpOw0KNjg6ICAgICAgICAgICAgICAgICAgfQ0KNjk6ICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzE6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2I0KHZvaWQpDQo3MjogICAgICAgICAgICAgICAgICB7DQo3MzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDQpOw0KNzQ6ICAgICAgICAgICAgICAgICAgfQ0KNzU6ICAgICAgICAgICAgICAgICAgDQo3NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzc6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2I1KHZvaWQpDQo3ODogICAgICAgICAgICAgICAgICB7DQo3OTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDUpOw0KODA6ICAgICAgICAgICAgICAgICAgfQ0KODE6ICAgICAgICAgICAgICAgICAgDQo4MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODM6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2I2KHZvaWQpDQo4NDogICAgICAgICAgICAgICAgICB7DQo4NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDYpOw0KODY6ICAgICAgICAgICAgICAgICAgfQ0KODc6ICAgICAgICAgICAgICAgICAgDQo4ODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODk6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2I3KHZvaWQpDQo5MDogICAgICAgICAgICAgICAgICB7DQo5MTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDcpOw0KOTI6ICAgICAgICAgICAgICAgICAgfQ0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTU6ICAgICAgICAgICAgICAgICAgZ2lycTE1X2I4KHZvaWQpDQo5NjogICAgICAgICAgICAgICAgICB7DQo5NzogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDgpOw0KOTg6ICAgICAgICAgICAgICAgICAgfQ0KOTk6ICAgICAgICAgICAgICAgICAgDQoxMDA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTAxOiAgICAgICAgICAgICAgICAgZ2lycTE1X2I5KHZvaWQpDQoxMDI6ICAgICAgICAgICAgICAgICB7DQoxMDM6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDkpOw0KMTA0OiAgICAgICAgICAgICAgICAgfQ0KMTA1OiAgICAgICAgICAgICAgICAgDQoxMDY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTA3OiAgICAgICAgICAgICAgICAgZ2lycTE1X2IxMCh2b2lkKQ0KMTA4OiAgICAgICAgICAgICAgICAgew0KMTA5OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAxMCk7DQoxMTA6ICAgICAgICAgICAgICAgICB9DQoxMTE6ICAgICAgICAgICAgICAgICANCjExMjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMTM6ICAgICAgICAgICAgICAgICBnaXJxMTVfYjExKHZvaWQpDQoxMTQ6ICAgICAgICAgICAgICAgICB7DQoxMTU6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDExKTsNCjExNjogICAgICAgICAgICAgICAgIH0NCjExNzogICAgICAgICAgICAgICAgIA0KMTE4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjExOTogICAgICAgICAgICAgICAgIGdpcnExNV9iMTIodm9pZCkNCjEyMDogICAgICAgICAgICAgICAgIHsNCjEyMTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNV9JRCwgMTIpOw0KMTIyOiAgICAgICAgICAgICAgICAgfQ0KMTIzOiAgICAgICAgICAgICAgICAgDQoxMjQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTI1OiAgICAgICAgICAgICAgICAgZ2lycTE1X2IxMyh2b2lkKQ0KMTI2OiAgICAgICAgICAgICAgICAgew0KMTI3OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAxMyk7DQoxMjg6ICAgICAgICAgICAgICAgICB9DQoxMjk6ICAgICAgICAgICAgICAgICANCjEzMDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzE6ICAgICAgICAgICAgICAgICBnaXJxMTVfYjE0KHZvaWQpDQoxMzI6ICAgICAgICAgICAgICAgICB7DQoxMzM6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDE0KTsNCjEzNDogICAgICAgICAgICAgICAgIH0NCjEzNTogICAgICAgICAgICAgICAgIA0KMTM2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEzNzogICAgICAgICAgICAgICAgIGdpcnExNV9iMTUodm9pZCkNCjEzODogICAgICAgICAgICAgICAgIHsNCjEzOTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNV9JRCwgMTUpOw0KMTQwOiAgICAgICAgICAgICAgICAgfQ0KMTQxOiAgICAgICAgICAgICAgICAgDQoxNDI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTQzOiAgICAgICAgICAgICAgICAgZ2lycTE1X2IxNih2b2lkKQ0KMTQ0OiAgICAgICAgICAgICAgICAgew0KMTQ1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTE1X0lELCAxNik7DQoxNDY6ICAgICAgICAgICAgICAgICB9DQoxNDc6ICAgICAgICAgICAgICAgICANCjE0ODogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNDk6ICAgICAgICAgICAgICAgICBnaXJxMTVfYjE3KHZvaWQpDQoxNTA6ICAgICAgICAgICAgICAgICB7DQoxNTE6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTVfSUQsIDE3KTsNCjE1MjogICAgICAgICAgICAgICAgIH0NCjE1MzogICAgICAgICAgICAgICAgIA0KMTU0OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE1NTogICAgICAgICAgICAgICAgIGdpcnExNV9iMTgodm9pZCkNCjE1NjogICAgICAgICAgICAgICAgIHsNCjE1NzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNV9JRCwgMTgpOw0KMTU4OiAgICAgICAgICAgICAgICAgfQ0KMTU5OiAgICAgICAgICAgICAgICAgDQoxNjA6ICAgICAgICAgICAgICAgICANCjE2MTogICAgICAgICAgICAgICAgICNlbmRpZg0KMTYyOiAgICAgICAgICAgICAgICAgDQoxNjM6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTE1LmMgKi8NCjE2NDogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoxNjU6ICAgICAgICAgICAgICAgICAgKi8NCjE2NjogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnExNC5jICAtLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogKGMpIDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnExNC5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMTRfRElTQUdHID09IDANCjM3OiAgICAgICAgICAgICAgICAgIA0KMzg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQozOTogICAgICAgICAgICAgICAgICBnaXJxMTRfaXNyKHZvaWQpDQo0MDogICAgICAgICAgICAgICAgICB7DQpCRkQwNzhBMCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNzhBNCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA3OEE2ICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA3OEE4ICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDc4QUEgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1DQpCRkQwNzhBQyAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDc4QUUgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQ0KQkZEMDc4QjAgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzDQpCRkQwNzhCNCAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApDQpCRkQwNzhCNiAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDc4QkEgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQ0KQkZEMDc4QkMgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA3OEJFICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNzhDMCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDc4QzIgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNzhDNCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA3OEM2ICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA3OEM4ICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDc4Q0MgICAgICBDODYyICAgU1cgVjEsIDgoU1ApDQpCRkQwNzhDRSAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkNCkJGRDA3OEQwICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkNCkJGRDA3OEQyICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA3OEQ0ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA3OEQ2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo0MTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8Nik7DQpCRkQwNzhEOCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDc4REEgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDc4REMgIEM1MEM1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDkyDQpCRkQwNzhFMCAgICAgIEVEQzAgICBMSSBWMSwgNjQNCkJGRDA3OEUyICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNDI6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDc4RTQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3OEU2ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkNCkJGRDA3OEU4ICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA3OEVBICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDA3OEVDICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQ0KQkZEMDc4RUUgICAgICA0ODQxICAgTFcgVjAsIDQoU1ApDQpCRkQwNzhGMCAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNzhGNCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDc4RjYgIDRCNDcxODAwICAgU0IgWkVSTywgMTkyNzEoWkVSTykNCkJGRDA3OEY4ICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkNCkJGRDA3OEZBICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkNCkJGRDA3OEZDICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQw0KQkZEMDc5MDAgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQ0KQkZEMDc5MDIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDc5MDQgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsDQpCRkQwNzkwNiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3DQpCRkQwNzkwOCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQDQpCRkQwNzkwQSAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjANCkJGRDA3OTBDICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDc5MEUgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDc5MTAgIEYzN0MwMDAwICAgRVJFVA0KQkZEMDc5MTIgIDRGRjFGMzdDICAgSkFMWCAweEJERjEzRkM0DQo0MzogICAgICAgICAgICAgICAgICANCjQ0OiAgICAgICAgICAgICAgICAgICNlbHNlDQo0NTogICAgICAgICAgICAgICAgICANCjQ2OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo0NzogICAgICAgICAgICAgICAgICBnaXJxMTRfYjAodm9pZCkNCjQ4OiAgICAgICAgICAgICAgICAgIHsNCjQ5OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgMCk7DQo1MDogICAgICAgICAgICAgICAgICB9DQo1MTogICAgICAgICAgICAgICAgICANCjUyOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1MzogICAgICAgICAgICAgICAgICBnaXJxMTRfYjEodm9pZCkNCjU0OiAgICAgICAgICAgICAgICAgIHsNCjU1OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgMSk7DQo1NjogICAgICAgICAgICAgICAgICB9DQo1NzogICAgICAgICAgICAgICAgICANCjU4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1OTogICAgICAgICAgICAgICAgICBnaXJxMTRfYjIodm9pZCkNCjYwOiAgICAgICAgICAgICAgICAgIHsNCjYxOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgMik7DQo2MjogICAgICAgICAgICAgICAgICB9DQo2MzogICAgICAgICAgICAgICAgICANCjY0OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2NTogICAgICAgICAgICAgICAgICBnaXJxMTRfYjModm9pZCkNCjY2OiAgICAgICAgICAgICAgICAgIHsNCjY3OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgMyk7DQo2ODogICAgICAgICAgICAgICAgICB9DQo2OTogICAgICAgICAgICAgICAgICANCjcwOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3MTogICAgICAgICAgICAgICAgICBnaXJxMTRfYjQodm9pZCkNCjcyOiAgICAgICAgICAgICAgICAgIHsNCjczOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgNCk7DQo3NDogICAgICAgICAgICAgICAgICB9DQo3NTogICAgICAgICAgICAgICAgICANCjc2OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3NzogICAgICAgICAgICAgICAgICBnaXJxMTRfYjUodm9pZCkNCjc4OiAgICAgICAgICAgICAgICAgIHsNCjc5OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExNF9JRCwgNSk7DQo4MDogICAgICAgICAgICAgICAgICB9DQo4MTogICAgICAgICAgICAgICAgICANCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo4NDogICAgICAgICAgICAgICAgICANCjg1OiAgICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMTQuYyAqLw0KODY6ICAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjg3OiAgICAgICAgICAgICAgICAgICAqLw0KODg6ICAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTEzLmMgIC0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTEzLmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycXMuaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ3Bpby5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF90cmFjZV9mdW5jLmgiDQozNDogICAgICAgICAgICAgICAgICANCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlExM19ESVNBR0cgPT0gMA0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYsIHNlY3Rpb24oIi5naXJxcyIpKSkNCjM5OiAgICAgICAgICAgICAgICAgIGdpcnExM19pc3Iodm9pZCkNCjQwOiAgICAgICAgICAgICAgICAgIHsNCkJGRDA3ODJDICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA3ODMwICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDc4MzIgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDc4MzQgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNzgzNiAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUNCkJGRDA3ODM4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNzgzQSAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApDQpCRkQwNzgzQyAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA3ODQwICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkNCkJGRDA3ODQyICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNzg0NiAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApDQpCRkQwNzg0OCAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDc4NEEgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA3ODRDICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNzg0RSAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA3ODUwICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDc4NTIgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDc4NTQgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzg1OCAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkNCkJGRDA3ODVBICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQ0KQkZEMDc4NUMgICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQ0KQkZEMDc4NUUgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDc4NjAgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDc4NjIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjQxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDw1KTsNCkJGRDA3ODY0ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNzg2NiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNzg2OCAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTINCkJGRDA3ODZDICAgICAgRURBMCAgIExJIFYxLCAzMg0KQkZEMDc4NkUgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo0MjogICAgICAgICAgICAgICAgICB9DQpCRkQwNzg3MCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDc4NzIgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDc4NzQgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDc4NzYgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDc4NzggICAgICA0ODYyICAgTFcgVjEsIDgoU1ApDQpCRkQwNzg3QSAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkNCkJGRDA3ODdDICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA3ODgwICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNzg4MiAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQ0KQkZEMDc4ODQgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQ0KQkZEMDc4ODYgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQ0KQkZEMDc4ODggIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNzg4QyAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApDQpCRkQwNzg4RSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNzg5MCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA3ODkyICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA3ODk0ICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA3ODk2ICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDc4OTggIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzg5QSAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNzg5QyAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNzg5RSAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQNCjQzOiAgICAgICAgICAgICAgICAgIA0KNDQ6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ1OiAgICAgICAgICAgICAgICAgIA0KNDY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ3OiAgICAgICAgICAgICAgICAgIGdpcnExM19iMCh2b2lkKQ0KNDg6ICAgICAgICAgICAgICAgICAgew0KNDk6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEzX0lELCAwKTsNCjUwOiAgICAgICAgICAgICAgICAgIH0NCjUxOiAgICAgICAgICAgICAgICAgIA0KNTI6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjUzOiAgICAgICAgICAgICAgICAgIGdpcnExM19iMSh2b2lkKQ0KNTQ6ICAgICAgICAgICAgICAgICAgew0KNTU6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEzX0lELCAxKTsNCjU2OiAgICAgICAgICAgICAgICAgIH0NCjU3OiAgICAgICAgICAgICAgICAgIA0KNTg6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU5OiAgICAgICAgICAgICAgICAgIGdpcnExM19iMih2b2lkKQ0KNjA6ICAgICAgICAgICAgICAgICAgew0KNjE6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEzX0lELCAyKTsNCjYyOiAgICAgICAgICAgICAgICAgIH0NCjYzOiAgICAgICAgICAgICAgICAgIA0KNjQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY1OiAgICAgICAgICAgICAgICAgIGdpcnExM19iMyh2b2lkKQ0KNjY6ICAgICAgICAgICAgICAgICAgew0KNjc6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEzX0lELCAzKTsNCjY4OiAgICAgICAgICAgICAgICAgIH0NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjcxOiAgICAgICAgICAgICAgICAgIGdpcnExM19iNCh2b2lkKQ0KNzI6ICAgICAgICAgICAgICAgICAgew0KNzM6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEzX0lELCA0KTsNCjc0OiAgICAgICAgICAgICAgICAgIH0NCjc1OiAgICAgICAgICAgICAgICAgIA0KNzY6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc3OiAgICAgICAgICAgICAgICAgIGdpcnExM19iNSh2b2lkKQ0KNzg6ICAgICAgICAgICAgICAgICAgew0KNzk6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEzX0lELCA1KTsNCjgwOiAgICAgICAgICAgICAgICAgIH0NCjgxOiAgICAgICAgICAgICAgICAgIA0KODI6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjgzOiAgICAgICAgICAgICAgICAgIGdpcnExM19iNih2b2lkKQ0KODQ6ICAgICAgICAgICAgICAgICAgew0KODU6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEzX0lELCA2KTsNCjg2OiAgICAgICAgICAgICAgICAgIH0NCjg3OiAgICAgICAgICAgICAgICAgIA0KODg6ICAgICAgICAgICAgICAgICAgI2VuZGlmDQo4OTogICAgICAgICAgICAgICAgICANCjkwOiAgICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMTMuYyAqLw0KOTE6ICAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjkyOiAgICAgICAgICAgICAgICAgICAqLw0KOTM6ICAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTEyLmMgIC0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiAoYykgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTEyLmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICANCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozNDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgDQozNzogICAgICAgICAgICAgICAgICAjaWYgR0lSUTEyX0RJU0FHRyA9PSAwDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KNDA6ICAgICAgICAgICAgICAgICAgZ2lycTEyX2lzcih2b2lkKQ0KNDE6ICAgICAgICAgICAgICAgICAgew0KQkZEMDc3QjggIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDc3QkMgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNzdCRSAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNzdDMCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA3N0MyICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQ0KQkZEMDc3QzQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA3N0M2ICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkNCkJGRDA3N0M4ICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDc3Q0MgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQ0KQkZEMDc3Q0UgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA3N0QyICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkNCkJGRDA3N0Q0ICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNzdENiAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDc3RDggIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA3N0RBICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDc3REMgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNzdERSAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNzdFMCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3N0U0ICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQ0KQkZEMDc3RTYgICAgICBDODQxICAgU1cgVjAsIDQoU1ApDQpCRkQwNzdFOCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApDQpCRkQwNzdFQSAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNzdFQyAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwNzdFRSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KNDI6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDQpOw0KQkZEMDc3RjAgIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA3N0YyICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkNCkJGRDA3N0Y0ICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5Mg0KQkZEMDc3RjggICAgICBFRDkwICAgTEkgVjEsIDE2DQpCRkQwNzdGQSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQzOiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3N0ZDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNzdGRSAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNzgwMCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNzgwMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwNzgwNCAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkNCkJGRDA3ODA2ICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQ0KQkZEMDc4MDggIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDc4MEMgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA3ODBFICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pDQpCRkQwNzgxMCAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApDQpCRkQwNzgxMiAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApDQpCRkQwNzgxNCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA3ODE4ICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkNCkJGRDA3ODFBICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3ODFDICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDc4MUUgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDc4MjAgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDc4MjIgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNzgyNCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3ODI2ICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA3ODI4ICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA3ODJBICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNA0KNDQ6ICAgICAgICAgICAgICAgICAgDQo0NTogICAgICAgICAgICAgICAgICAjZWxzZQ0KNDY6ICAgICAgICAgICAgICAgICAgDQo0NzogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNDg6ICAgICAgICAgICAgICAgICAgZ2lycTEyX2IwKHZvaWQpDQo0OTogICAgICAgICAgICAgICAgICB7DQo1MDogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTJfSUQsIDApOw0KNTE6ICAgICAgICAgICAgICAgICAgfQ0KNTI6ICAgICAgICAgICAgICAgICAgDQo1MzogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTQ6ICAgICAgICAgICAgICAgICAgZ2lycTEyX2IxKHZvaWQpDQo1NTogICAgICAgICAgICAgICAgICB7DQo1NjogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTJfSUQsIDEpOw0KNTc6ICAgICAgICAgICAgICAgICAgfQ0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjA6ICAgICAgICAgICAgICAgICAgZ2lycTEyX2IyKHZvaWQpDQo2MTogICAgICAgICAgICAgICAgICB7DQo2MjogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTJfSUQsIDIpOw0KNjM6ICAgICAgICAgICAgICAgICAgfQ0KNjQ6ICAgICAgICAgICAgICAgICAgDQo2NTogICAgICAgICAgICAgICAgICAjZW5kaWYNCjY2OiAgICAgICAgICAgICAgICAgIA0KNjc6ICAgICAgICAgICAgICAgICAgLyogZW5kIGdpcnExMi5jICovDQo2ODogICAgICAgICAgICAgICAgICAvKiogICBAfQ0KNjk6ICAgICAgICAgICAgICAgICAgICovDQo3MDogICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21lYzE0eHgvaW50ZXJydXB0cy9naXJxMTEuYyAgLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIENvcHlyaWdodCAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnaXJxMTEuYw0KMjI6ICAgICAgICAgICAgICAgICAgICpJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lcyBmb3IgTUlQUyB1c2luZyB2YW5pbGxhIEdDQyBhbmQgTUNIUCBYQzMyDQoyMzogICAgICAgICAgICAgICAgICAgKi8NCjI0OiAgICAgICAgICAgICAgICAgIC8qKiBAZGVmZ3JvdXAgTUVDMTR4eCBJU1INCjI1OiAgICAgICAgICAgICAgICAgICAqICBAew0KMjY6ICAgICAgICAgICAgICAgICAgICovDQoyNzogICAgICAgICAgICAgICAgICANCjI4OiAgICAgICAgICAgICAgICAgIA0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMzA6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjM0OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzU6ICAgICAgICAgICAgICAgICAgDQozNjogICAgICAgICAgICAgICAgICANCjM3OiAgICAgICAgICAgICAgICAgICNpZiBHSVJRMTFfRElTQUdHID09IDANCjM4OiAgICAgICAgICAgICAgICAgIA0KMzk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQo0MDogICAgICAgICAgICAgICAgICBnaXJxMTFfaXNyKHZvaWQpDQo0MTogICAgICAgICAgICAgICAgICB7DQpCRkQwNzc0NCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNzc0OCAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA3NzRBICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA3NzRDICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDc3NEUgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1DQpCRkQwNzc1MCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDc3NTIgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQ0KQkZEMDc3NTQgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzDQpCRkQwNzc1OCAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApDQpCRkQwNzc1QSAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDc3NUUgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQ0KQkZEMDc3NjAgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA3NzYyICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNzc2NCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDc3NjYgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNzc2OCAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA3NzZBICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA3NzZDICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDc3NzAgICAgICBDODYyICAgU1cgVjEsIDgoU1ApDQpCRkQwNzc3MiAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkNCkJGRDA3Nzc0ICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkNCkJGRDA3Nzc2ICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA3Nzc4ICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA3NzdBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo0MjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8Myk7DQpCRkQwNzc3QyAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDc3N0UgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDc3ODAgIEM1MEM1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDkyDQpCRkQwNzc4NCAgICAgIEVEODggICBMSSBWMSwgOA0KQkZEMDc3ODYgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo0MzogICAgICAgICAgICAgICAgICB9DQpCRkQwNzc4OCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDc3OEEgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDc3OEMgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDc3OEUgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDc3OTAgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApDQpCRkQwNzc5MiAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkNCkJGRDA3Nzk0ICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA3Nzk4ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNzc5QSAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQ0KQkZEMDc3OUMgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQ0KQkZEMDc3OUUgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQ0KQkZEMDc3QTAgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNzdBNCAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApDQpCRkQwNzdBNiAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNzdBOCAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA3N0FBICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA3N0FDICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA3N0FFICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDc3QjAgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzdCMiAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNzdCNCAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNzdCNiAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQNCjQ0OiAgICAgICAgICAgICAgICAgIA0KNDU6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjQ4OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iMCh2b2lkKQ0KNDk6ICAgICAgICAgICAgICAgICAgew0KNTA6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCjUxOiAgICAgICAgICAgICAgICAgIH0NCjUyOiAgICAgICAgICAgICAgICAgIA0KNTM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjU0OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iMSh2b2lkKQ0KNTU6ICAgICAgICAgICAgICAgICAgew0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAxLCBKVFZJQ19DTFJfU1JDKTsNCjU3OiAgICAgICAgICAgICAgICAgIH0NCjU4OiAgICAgICAgICAgICAgICAgIA0KNTk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjYwOiAgICAgICAgICAgICAgICAgIGdpcnExMV9iMih2b2lkKQ0KNjE6ICAgICAgICAgICAgICAgICAgew0KNjI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyLCBKVFZJQ19DTFJfU1JDKTsNCjYzOiAgICAgICAgICAgICAgICAgIH0NCjY0OiAgICAgICAgICAgICAgICAgIA0KNjU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY2OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iMyh2b2lkKQ0KNjc6ICAgICAgICAgICAgICAgICAgew0KNjg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAzLCBKVFZJQ19DTFJfU1JDKTsNCjY5OiAgICAgICAgICAgICAgICAgIH0NCjcwOiAgICAgICAgICAgICAgICAgIA0KNzE6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjcyOiAgICAgICAgICAgICAgICAgIGdpcnExMV9iNCh2b2lkKQ0KNzM6ICAgICAgICAgICAgICAgICAgew0KNzQ6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA0LCBKVFZJQ19DTFJfU1JDKTsNCjc1OiAgICAgICAgICAgICAgICAgIH0NCjc2OiAgICAgICAgICAgICAgICAgIA0KNzc6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjc4OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iNSh2b2lkKQ0KNzk6ICAgICAgICAgICAgICAgICAgew0KODA6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA1LCBKVFZJQ19DTFJfU1JDKTsNCjgxOiAgICAgICAgICAgICAgICAgIH0NCjgyOiAgICAgICAgICAgICAgICAgIA0KODM6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg0OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iNih2b2lkKQ0KODU6ICAgICAgICAgICAgICAgICAgew0KODY6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA2LCBKVFZJQ19DTFJfU1JDKTsNCjg3OiAgICAgICAgICAgICAgICAgIH0NCjg4OiAgICAgICAgICAgICAgICAgIA0KODk6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjkwOiAgICAgICAgICAgICAgICAgIGdpcnExMV9iNyh2b2lkKQ0KOTE6ICAgICAgICAgICAgICAgICAgew0KOTI6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA3LCBKVFZJQ19DTFJfU1JDKTsNCjkzOiAgICAgICAgICAgICAgICAgIH0NCjk0OiAgICAgICAgICAgICAgICAgIA0KOTU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjk2OiAgICAgICAgICAgICAgICAgIGdpcnExMV9iOCh2b2lkKQ0KOTc6ICAgICAgICAgICAgICAgICAgew0KOTg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA4LCBKVFZJQ19DTFJfU1JDKTsNCjk5OiAgICAgICAgICAgICAgICAgIH0NCjEwMDogICAgICAgICAgICAgICAgIA0KMTAxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwMjogICAgICAgICAgICAgICAgIGdpcnExMV9iOSh2b2lkKQ0KMTAzOiAgICAgICAgICAgICAgICAgew0KMTA0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCA5LCBKVFZJQ19DTFJfU1JDKTsNCjEwNTogICAgICAgICAgICAgICAgIH0NCjEwNjogICAgICAgICAgICAgICAgIA0KMTA3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwODogICAgICAgICAgICAgICAgIGdpcnExMV9iMTAodm9pZCkNCjEwOTogICAgICAgICAgICAgICAgIHsNCjExMDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMTAsIEpUVklDX0NMUl9TUkMpOw0KMTExOiAgICAgICAgICAgICAgICAgfQ0KMTEyOiAgICAgICAgICAgICAgICAgDQoxMTM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTE0OiAgICAgICAgICAgICAgICAgZ2lycTExX2IxMSh2b2lkKQ0KMTE1OiAgICAgICAgICAgICAgICAgew0KMTE2OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAxMSwgSlRWSUNfQ0xSX1NSQyk7DQoxMTc6ICAgICAgICAgICAgICAgICB9DQoxMTg6ICAgICAgICAgICAgICAgICANCjExOTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMjA6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjEyKHZvaWQpDQoxMjE6ICAgICAgICAgICAgICAgICB7DQoxMjI6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDEyLCBKVFZJQ19DTFJfU1JDKTsNCjEyMzogICAgICAgICAgICAgICAgIH0NCjEyNDogICAgICAgICAgICAgICAgIA0KMTI1OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEyNjogICAgICAgICAgICAgICAgIGdpcnExMV9iMTModm9pZCkNCjEyNzogICAgICAgICAgICAgICAgIHsNCjEyODogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMTMsIEpUVklDX0NMUl9TUkMpOw0KMTI5OiAgICAgICAgICAgICAgICAgfQ0KMTMwOiAgICAgICAgICAgICAgICAgDQoxMzE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTMyOiAgICAgICAgICAgICAgICAgZ2lycTExX2IxNCh2b2lkKQ0KMTMzOiAgICAgICAgICAgICAgICAgew0KMTM0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAxNCwgSlRWSUNfQ0xSX1NSQyk7DQoxMzU6ICAgICAgICAgICAgICAgICB9DQoxMzY6ICAgICAgICAgICAgICAgICANCjEzNzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzg6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjE1KHZvaWQpDQoxMzk6ICAgICAgICAgICAgICAgICB7DQoxNDA6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDE1LCBKVFZJQ19DTFJfU1JDKTsNCjE0MTogICAgICAgICAgICAgICAgIH0NCjE0MjogICAgICAgICAgICAgICAgIA0KMTQzOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE0NDogICAgICAgICAgICAgICAgIGdpcnExMV9iMTYodm9pZCkNCjE0NTogICAgICAgICAgICAgICAgIHsNCjE0NjogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMTYsIEpUVklDX0NMUl9TUkMpOw0KMTQ3OiAgICAgICAgICAgICAgICAgfQ0KMTQ4OiAgICAgICAgICAgICAgICAgDQoxNDk6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTUwOiAgICAgICAgICAgICAgICAgZ2lycTExX2IxNyh2b2lkKQ0KMTUxOiAgICAgICAgICAgICAgICAgew0KMTUyOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAxNywgSlRWSUNfQ0xSX1NSQyk7DQoxNTM6ICAgICAgICAgICAgICAgICB9DQoxNTQ6ICAgICAgICAgICAgICAgICANCjE1NTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTY6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjE4KHZvaWQpDQoxNTc6ICAgICAgICAgICAgICAgICB7DQoxNTg6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDE4LCBKVFZJQ19DTFJfU1JDKTsNCjE1OTogICAgICAgICAgICAgICAgIH0NCjE2MDogICAgICAgICAgICAgICAgIA0KMTYxOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE2MjogICAgICAgICAgICAgICAgIGdpcnExMV9iMTkodm9pZCkNCjE2MzogICAgICAgICAgICAgICAgIHsNCjE2NDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMTksIEpUVklDX0NMUl9TUkMpOw0KMTY1OiAgICAgICAgICAgICAgICAgfQ0KMTY2OiAgICAgICAgICAgICAgICAgDQoxNjc6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTY4OiAgICAgICAgICAgICAgICAgZ2lycTExX2IyMCh2b2lkKQ0KMTY5OiAgICAgICAgICAgICAgICAgew0KMTcwOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyMCwgSlRWSUNfQ0xSX1NSQyk7DQoxNzE6ICAgICAgICAgICAgICAgICB9DQoxNzI6ICAgICAgICAgICAgICAgICANCjE3MzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNzQ6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjIxKHZvaWQpDQoxNzU6ICAgICAgICAgICAgICAgICB7DQoxNzY6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDIxLCBKVFZJQ19DTFJfU1JDKTsNCjE3NzogICAgICAgICAgICAgICAgIH0NCjE3ODogICAgICAgICAgICAgICAgIA0KMTc5OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE4MDogICAgICAgICAgICAgICAgIGdpcnExMV9iMjIodm9pZCkNCjE4MTogICAgICAgICAgICAgICAgIHsNCjE4MjogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMjIsIEpUVklDX0NMUl9TUkMpOw0KMTgzOiAgICAgICAgICAgICAgICAgfQ0KMTg0OiAgICAgICAgICAgICAgICAgDQoxODU6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTg2OiAgICAgICAgICAgICAgICAgZ2lycTExX2IyMyh2b2lkKQ0KMTg3OiAgICAgICAgICAgICAgICAgew0KMTg4OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyMywgSlRWSUNfQ0xSX1NSQyk7DQoxODk6ICAgICAgICAgICAgICAgICB9DQoxOTA6ICAgICAgICAgICAgICAgICANCjE5MTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxOTI6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjI0KHZvaWQpDQoxOTM6ICAgICAgICAgICAgICAgICB7DQoxOTQ6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDI0LCBKVFZJQ19DTFJfU1JDKTsNCjE5NTogICAgICAgICAgICAgICAgIH0NCjE5NjogICAgICAgICAgICAgICAgIA0KMTk3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE5ODogICAgICAgICAgICAgICAgIGdpcnExMV9iMjUodm9pZCkNCjE5OTogICAgICAgICAgICAgICAgIHsNCjIwMDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMjUsIEpUVklDX0NMUl9TUkMpOw0KMjAxOiAgICAgICAgICAgICAgICAgfQ0KMjAyOiAgICAgICAgICAgICAgICAgDQoyMDM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjA0OiAgICAgICAgICAgICAgICAgZ2lycTExX2IyNih2b2lkKQ0KMjA1OiAgICAgICAgICAgICAgICAgew0KMjA2OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyNiwgSlRWSUNfQ0xSX1NSQyk7DQoyMDc6ICAgICAgICAgICAgICAgICB9DQoyMDg6ICAgICAgICAgICAgICAgICANCjIwOTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMTA6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjI3KHZvaWQpDQoyMTE6ICAgICAgICAgICAgICAgICB7DQoyMTI6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDI3LCBKVFZJQ19DTFJfU1JDKTsNCjIxMzogICAgICAgICAgICAgICAgIH0NCjIxNDogICAgICAgICAgICAgICAgIA0KMjE1OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIxNjogICAgICAgICAgICAgICAgIGdpcnExMV9iMjgodm9pZCkNCjIxNzogICAgICAgICAgICAgICAgIHsNCjIxODogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMV9JRCwgMjgsIEpUVklDX0NMUl9TUkMpOw0KMjE5OiAgICAgICAgICAgICAgICAgfQ0KMjIwOiAgICAgICAgICAgICAgICAgDQoyMjE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjIyOiAgICAgICAgICAgICAgICAgZ2lycTExX2IyOSh2b2lkKQ0KMjIzOiAgICAgICAgICAgICAgICAgew0KMjI0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTExX0lELCAyOSwgSlRWSUNfQ0xSX1NSQyk7DQoyMjU6ICAgICAgICAgICAgICAgICB9DQoyMjY6ICAgICAgICAgICAgICAgICANCjIyNzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoyMjg6ICAgICAgICAgICAgICAgICBnaXJxMTFfYjMwKHZvaWQpDQoyMjk6ICAgICAgICAgICAgICAgICB7DQoyMzA6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTFfSUQsIDMwLCBKVFZJQ19DTFJfU1JDKTsNCjIzMTogICAgICAgICAgICAgICAgIH0NCjIzMjogICAgICAgICAgICAgICAgIA0KMjMzOiAgICAgICAgICAgICAgICAgI2VuZGlmDQoyMzQ6ICAgICAgICAgICAgICAgICANCjIzNTogICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMTEuYyAqLw0KMjM2OiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjIzNzogICAgICAgICAgICAgICAgICAqLw0KMjM4OiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2ludGVycnVwdHMvZ2lycTEwLmMgIC0tLS0NCjE6ICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KMjogICAgICAgICAgICAgICAgICAgKiBDb3B5cmlnaHQgMjAxNCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KMzogICAgICAgICAgICAgICAgICAgKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KNDogICAgICAgICAgICAgICAgICAgKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQo1OiAgICAgICAgICAgICAgICAgICAqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQo2OiAgICAgICAgICAgICAgICAgICAqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQo3OiAgICAgICAgICAgICAgICAgICAqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCjg6ICAgICAgICAgICAgICAgICAgICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCjk6ICAgICAgICAgICAgICAgICAgICogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KMTA6ICAgICAgICAgICAgICAgICAgKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoxMTogICAgICAgICAgICAgICAgICAqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KMTI6ICAgICAgICAgICAgICAgICAgKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoxMzogICAgICAgICAgICAgICAgICAqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KMTQ6ICAgICAgICAgICAgICAgICAgKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCjE1OiAgICAgICAgICAgICAgICAgICogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoxNjogICAgICAgICAgICAgICAgICAqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCjE3OiAgICAgICAgICAgICAgICAgICogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KMTg6ICAgICAgICAgICAgICAgICAgKiBPRiBUSEVTRSBURVJNUy4NCjE5OiAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KMjA6ICAgICAgICAgICAgICAgICAgDQoyMTogICAgICAgICAgICAgICAgICAvKiogQGZpbGUgZ2lycTEwLmMNCjIyOiAgICAgICAgICAgICAgICAgICAqSW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZXMgZm9yIE1JUFMgdXNpbmcgdmFuaWxsYSBHQ0MgYW5kIE1DSFAgWEMzMg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggSVNSDQoyNTogICAgICAgICAgICAgICAgICAgKiAgQHsNCjI2OiAgICAgICAgICAgICAgICAgICAqLw0KMjc6ICAgICAgICAgICAgICAgICAgDQoyODogICAgICAgICAgICAgICAgICANCjI5OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzE6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozNDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM1OiAgICAgICAgICAgICAgICAgIA0KMzY6ICAgICAgICAgICAgICAgICAgDQozNzogICAgICAgICAgICAgICAgICAjaWYgR0lSUTEwX0RJU0FHRyA9PSAwDQozODogICAgICAgICAgICAgICAgICANCjM5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KNDA6ICAgICAgICAgICAgICAgICAgZ2lycTEwX2lzcih2b2lkKQ0KNDE6ICAgICAgICAgICAgICAgICAgew0KQkZEMDc2RDAgIEUxN0MwM0JEICAgUkRQR1BSIFNQLCBTUA0KQkZEMDc2RDQgIDAwRkMwMzZFICAgTUZDMCBLMSwgRVBDDQpCRkQwNzZENiAgMDM0QzAwRkMgICBJTlMgQTMsIEdQLCAxMywgLTEyDQpCRkQwNzZEOCAgMTBGQzAzNEMgICBNRkMwIEswLCBTUlNDdGwNCkJGRDA3NkRBICA0RkYxMTBGQyAgIEFEREkgQTMsIEdQLCAyMDQ2NQ0KQkZEMDc2REMgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA3NkRFICAgICAgQ0I2NyAgIFNXIEsxLCAyOChTUCkNCkJGRDA3NkUwICAwMEZDMDM2QyAgIE1GQzAgSzEsIFN0YXR1cw0KQkZEMDc2RTQgICAgICBDQjQ2ICAgU1cgSzAsIDI0KFNQKQ0KQkZEMDc2RTYgIDAwRkMwMzREICAgTUZDMCBLMCwgQ2F1c2UNCkJGRDA3NkVBICAgICAgQ0I2NSAgIFNXIEsxLCAyMChTUCkNCkJGRDA3NkVDICA1MDQwMDM1QSAgIFNSTCBLMCwgSzAsIDEwDQpCRkQwNzZFRSAgMDM3QTUwNDAgICBPUkkgVjAsIFpFUk8sIDg5MA0KQkZEMDc2RjAgIDdBOEMwMzdBICAgSU5TIEsxLCBLMCwgMTAsIDYNCkJGRDA3NkYyICAwMzYwN0E4QyAgIEFERElVUEMgQTEsIDc4NzI5Ng0KQkZEMDc2RjQgIDIwNEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxLCA0DQpCRkQwNzZGNiAgMDM2QzIwNEMgICBMV0MyIFYwLCA4NzYoVDQpDQpCRkQwNzZGOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3NkZDICAgICAgQzg2MiAgIFNXIFYxLCA4KFNQKQ0KQkZEMDc2RkUgICAgICBDODQxICAgU1cgVjAsIDQoU1ApDQpCRkQwNzcwMCAgICAgIDQ4NjYgICBMVyBWMSwgMjQoU1ApDQpCRkQwNzcwMiAgICAgIDJEQjcgICBBTkRJIFYxLCBWMSwgMHhGDQpCRkQwNzcwNCAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwNzcwNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KNDI6ICAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dST1VQX0VOX0NMUi0+dyA9ICgxdWw8PDIpOw0KQkZEMDc3MDggIEJGRkY0MUEyICAgTFVJIFYwLCAweEJGRkYNCkJGRDA3NzBBICA1MDQyQkZGRiAgIExEQzEgRjMxLCAyMDU0NihSQSkNCkJGRDA3NzBDICBDNTBDNTA0MiAgIE9SSSBWMCwgVjAsIC0xNTA5Mg0KQkZEMDc3MTAgICAgICBFRDg0ICAgTEkgVjEsIDQNCkJGRDA3NzEyICAgICAgRTlBMCAgIFNXIFYxLCAwKFYwKQ0KNDM6ICAgICAgICAgICAgICAgICAgfQ0KQkZEMDc3MTQgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA3NzE2ICAgICAgNDg0NiAgIExXIFYwLCAyNChTUCkNCkJGRDA3NzE4ICAgICAgMkQyNyAgIEFOREkgVjAsIFYwLCAweEYNCkJGRDA3NzFBICAgICAgNEJDMyAgIExXIFM4LCAxMihTUCkNCkJGRDA3NzFDICAgICAgNDg2MiAgIExXIFYxLCA4KFNQKQ0KQkZEMDc3MUUgICAgICA0ODQxICAgTFcgVjAsIDQoU1ApDQpCRkQwNzcyMCAgNDc3QzAwMDAgICBESSBaRVJPDQpCRkQwNzcyNCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMw0KQkZEMDc3MjYgIDRCNDcxODAwICAgU0IgWkVSTywgMTkyNzEoWkVSTykNCkJGRDA3NzI4ICAgICAgNEI0NyAgIExXIEswLCAyOChTUCkNCkJGRDA3NzJBICAgICAgNEI2NSAgIExXIEsxLCAyMChTUCkNCkJGRDA3NzJDICAwMkZDMDM0RSAgIE1UQzAgSzAsIEVQQw0KQkZEMDc3MzAgICAgICA0QjQ2ICAgTFcgSzAsIDI0KFNQKQ0KQkZEMDc3MzIgICAgICA0QzExICAgQURESVUgU1AsIFNQLCAzMg0KQkZEMDc3MzQgIDEyRkMwMzRDICAgTVRDMCBLMCwgU1JTQ3RsDQpCRkQwNzczNiAgMDNCRDEyRkMgICBBRERJIFM3LCBHUCwgOTU3DQpCRkQwNzczOCAgRjE3QzAzQkQgICBXUlBHUFIgU1AsIFNQDQpCRkQwNzczQSAgMDM2Q0YxN0MgICBKQUxYIDB4QkRGMDBEQjANCkJGRDA3NzNDICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDc3M0UgIDAwMDAwMkZDICAgU0xMIFM3LCBHUCwgMA0KQkZEMDc3NDAgIEYzN0MwMDAwICAgRVJFVA0KQkZEMDc3NDIgIDAzQkRGMzdDICAgSkFMWCAweEJERjAwRUY0DQo0NDogICAgICAgICAgICAgICAgICANCjQ1OiAgICAgICAgICAgICAgICAgICNlbHNlDQo0NjogICAgICAgICAgICAgICAgICANCjQ3OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo0ODogICAgICAgICAgICAgICAgICBnaXJxMTBfYjAodm9pZCkNCjQ5OiAgICAgICAgICAgICAgICAgIHsNCjUwOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMCwgSlRWSUNfQ0xSX1NSQyk7DQo1MTogICAgICAgICAgICAgICAgICB9DQo1MjogICAgICAgICAgICAgICAgICANCjUzOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1NDogICAgICAgICAgICAgICAgICBnaXJxMTBfYjEodm9pZCkNCjU1OiAgICAgICAgICAgICAgICAgIHsNCjU2OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMSwgSlRWSUNfQ0xSX1NSQyk7DQo1NzogICAgICAgICAgICAgICAgICB9DQo1ODogICAgICAgICAgICAgICAgICANCjU5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2MDogICAgICAgICAgICAgICAgICBnaXJxMTBfYjIodm9pZCkNCjYxOiAgICAgICAgICAgICAgICAgIHsNCjYyOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMiwgSlRWSUNfQ0xSX1NSQyk7DQo2MzogICAgICAgICAgICAgICAgICB9DQo2NDogICAgICAgICAgICAgICAgICANCjY1OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo2NjogICAgICAgICAgICAgICAgICBnaXJxMTBfYjModm9pZCkNCjY3OiAgICAgICAgICAgICAgICAgIHsNCjY4OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMywgSlRWSUNfQ0xSX1NSQyk7DQo2OTogICAgICAgICAgICAgICAgICB9DQo3MDogICAgICAgICAgICAgICAgICANCjcxOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3MjogICAgICAgICAgICAgICAgICBnaXJxMTBfYjQodm9pZCkNCjczOiAgICAgICAgICAgICAgICAgIHsNCjc0OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgNCwgSlRWSUNfQ0xSX1NSQyk7DQo3NTogICAgICAgICAgICAgICAgICB9DQo3NjogICAgICAgICAgICAgICAgICANCjc3OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3ODogICAgICAgICAgICAgICAgICBnaXJxMTBfYjUodm9pZCkNCjc5OiAgICAgICAgICAgICAgICAgIHsNCjgwOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgNSwgSlRWSUNfQ0xSX1NSQyk7DQo4MTogICAgICAgICAgICAgICAgICB9DQo4MjogICAgICAgICAgICAgICAgICANCjgzOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo4NDogICAgICAgICAgICAgICAgICBnaXJxMTBfYjYodm9pZCkNCjg1OiAgICAgICAgICAgICAgICAgIHsNCjg2OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgNiwgSlRWSUNfQ0xSX1NSQyk7DQo4NzogICAgICAgICAgICAgICAgICB9DQo4ODogICAgICAgICAgICAgICAgICANCjg5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo5MDogICAgICAgICAgICAgICAgICBnaXJxMTBfYjcodm9pZCkNCjkxOiAgICAgICAgICAgICAgICAgIHsNCjkyOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgNywgSlRWSUNfQ0xSX1NSQyk7DQo5MzogICAgICAgICAgICAgICAgICB9DQo5NDogICAgICAgICAgICAgICAgICANCjk1OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo5NjogICAgICAgICAgICAgICAgICBnaXJxMTBfYjgodm9pZCkNCjk3OiAgICAgICAgICAgICAgICAgIHsNCjk4OiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgOCwgSlRWSUNfQ0xSX1NSQyk7DQo5OTogICAgICAgICAgICAgICAgICB9DQoxMDA6ICAgICAgICAgICAgICAgICANCjEwMTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMDI6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjkodm9pZCkNCjEwMzogICAgICAgICAgICAgICAgIHsNCjEwNDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgOSwgSlRWSUNfQ0xSX1NSQyk7DQoxMDU6ICAgICAgICAgICAgICAgICB9DQoxMDY6ICAgICAgICAgICAgICAgICANCjEwNzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMDg6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjEwKHZvaWQpDQoxMDk6ICAgICAgICAgICAgICAgICB7DQoxMTA6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTBfSUQsIDEwLCBKVFZJQ19DTFJfU1JDKTsNCjExMTogICAgICAgICAgICAgICAgIH0NCjExMjogICAgICAgICAgICAgICAgIA0KMTEzOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjExNDogICAgICAgICAgICAgICAgIGdpcnExMF9iMTEodm9pZCkNCjExNTogICAgICAgICAgICAgICAgIHsNCjExNjogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMTEsIEpUVklDX0NMUl9TUkMpOw0KMTE3OiAgICAgICAgICAgICAgICAgfQ0KMTE4OiAgICAgICAgICAgICAgICAgDQoxMTk6ICAgICAgICAgICAgICAgICANCjEyMDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMjE6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjEyKHZvaWQpDQoxMjI6ICAgICAgICAgICAgICAgICB7DQoxMjM6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTBfSUQsIDEyLCBKVFZJQ19DTFJfU1JDKTsNCjEyNDogICAgICAgICAgICAgICAgIH0NCjEyNTogICAgICAgICAgICAgICAgIA0KMTI2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEyNzogICAgICAgICAgICAgICAgIGdpcnExMF9iMTModm9pZCkNCjEyODogICAgICAgICAgICAgICAgIHsNCjEyOTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMTMsIEpUVklDX0NMUl9TUkMpOw0KMTMwOiAgICAgICAgICAgICAgICAgfQ0KMTMxOiAgICAgICAgICAgICAgICAgDQoxMzI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTMzOiAgICAgICAgICAgICAgICAgZ2lycTEwX2IxNCh2b2lkKQ0KMTM0OiAgICAgICAgICAgICAgICAgew0KMTM1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAxNCwgSlRWSUNfQ0xSX1NSQyk7DQoxMzY6ICAgICAgICAgICAgICAgICB9DQoxMzc6ICAgICAgICAgICAgICAgICANCjEzODogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzk6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjE1KHZvaWQpDQoxNDA6ICAgICAgICAgICAgICAgICB7DQoxNDE6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTBfSUQsIDE1LCBKVFZJQ19DTFJfU1JDKTsNCjE0MjogICAgICAgICAgICAgICAgIH0NCjE0MzogICAgICAgICAgICAgICAgIA0KMTQ0OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE0NTogICAgICAgICAgICAgICAgIGdpcnExMF9iMTYodm9pZCkNCjE0NjogICAgICAgICAgICAgICAgIHsNCjE0NzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMTYsIEpUVklDX0NMUl9TUkMpOw0KMTQ4OiAgICAgICAgICAgICAgICAgfQ0KMTQ5OiAgICAgICAgICAgICAgICAgDQoxNTA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTUxOiAgICAgICAgICAgICAgICAgZ2lycTEwX2IxNyh2b2lkKQ0KMTUyOiAgICAgICAgICAgICAgICAgew0KMTUzOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAxNywgSlRWSUNfQ0xSX1NSQyk7DQoxNTQ6ICAgICAgICAgICAgICAgICB9DQoxNTU6ICAgICAgICAgICAgICAgICANCjE1NjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTc6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjE4KHZvaWQpDQoxNTg6ICAgICAgICAgICAgICAgICB7DQoxNTk6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTBfSUQsIDE4LCBKVFZJQ19DTFJfU1JDKTsNCjE2MDogICAgICAgICAgICAgICAgIH0NCjE2MTogICAgICAgICAgICAgICAgIA0KMTYyOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE2MzogICAgICAgICAgICAgICAgIGdpcnExMF9iMTkodm9pZCkNCjE2NDogICAgICAgICAgICAgICAgIHsNCjE2NTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMTksIEpUVklDX0NMUl9TUkMpOw0KMTY2OiAgICAgICAgICAgICAgICAgfQ0KMTY3OiAgICAgICAgICAgICAgICAgDQoxNjg6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTY5OiAgICAgICAgICAgICAgICAgZ2lycTEwX2IyMCh2b2lkKQ0KMTcwOiAgICAgICAgICAgICAgICAgew0KMTcxOiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAyMCwgSlRWSUNfQ0xSX1NSQyk7DQoxNzI6ICAgICAgICAgICAgICAgICB9DQoxNzM6ICAgICAgICAgICAgICAgICANCjE3NDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNzU6ICAgICAgICAgICAgICAgICBnaXJxMTBfYjIxKHZvaWQpDQoxNzY6ICAgICAgICAgICAgICAgICB7DQoxNzc6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMTBfSUQsIDIxLCBKVFZJQ19DTFJfU1JDKTsNCjE3ODogICAgICAgICAgICAgICAgIH0NCjE3OTogICAgICAgICAgICAgICAgIA0KMTgwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE4MTogICAgICAgICAgICAgICAgIGdpcnExMF9iMjIodm9pZCkNCjE4MjogICAgICAgICAgICAgICAgIHsNCjE4MzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlExMF9JRCwgMjIsIEpUVklDX0NMUl9TUkMpOw0KMTg0OiAgICAgICAgICAgICAgICAgfQ0KMTg1OiAgICAgICAgICAgICAgICAgDQoxODY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTg3OiAgICAgICAgICAgICAgICAgZ2lycTEwX2IyMyh2b2lkKQ0KMTg4OiAgICAgICAgICAgICAgICAgew0KMTg5OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTEwX0lELCAyMywgSlRWSUNfQ0xSX1NSQyk7DQoxOTA6ICAgICAgICAgICAgICAgICB9DQoxOTE6ICAgICAgICAgICAgICAgICANCjE5MjogICAgICAgICAgICAgICAgICNlbmRpZg0KMTkzOiAgICAgICAgICAgICAgICAgDQoxOTQ6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTEwLmMgKi8NCjE5NTogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoxOTY6ICAgICAgICAgICAgICAgICAgKi8NCjE5NzogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnEwOS5jICAtLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogQ29weXJpZ2h0IDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnEwOS5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgDQoyOTogICAgICAgICAgICAgICAgICANCjMwOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJhcHBjZmcuaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJwbGF0Zm9ybS5oIg0KMzI6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMzM6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9ncGlvLmgiDQozNTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X3RyYWNlX2Z1bmMuaCINCjM2OiAgICAgICAgICAgICAgICAgIA0KMzc6ICAgICAgICAgICAgICAgICAgDQozODogICAgICAgICAgICAgICAgICAjaWYgR0lSUTA5X0RJU0FHRyA9PSAwDQozOTogICAgICAgICAgICAgICAgICANCjQwOiAgICAgICAgICAgICAgICAgIC8qDQo0MTogICAgICAgICAgICAgICAgICAgKiBBZ2dyZWdhdGVkIG1vZGUgaGFuZGxlciwgbXVzdCBoYW5kbGUgYWxsIGVuYWJsZWQgDQo0MjogICAgICAgICAgICAgICAgICAgKiBHSVJRMDggc291cmNlcy4gDQo0MzogICAgICAgICAgICAgICAgICAqLw0KNDQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2LCBzZWN0aW9uKCIuZ2lycXMiKSkpDQo0NTogICAgICAgICAgICAgICAgICBnaXJxMDlfaXNyKCB2b2lkICkNCjQ2OiAgICAgICAgICAgICAgICAgIHsNCkJGRDA3NjVDICBFMTdDMDNCRCAgIFJEUEdQUiBTUCwgU1ANCkJGRDA3NjYwICAwMEZDMDM2RSAgIE1GQzAgSzEsIEVQQw0KQkZEMDc2NjIgIDAzNEMwMEZDICAgSU5TIEEzLCBHUCwgMTMsIC0xMg0KQkZEMDc2NjQgIDEwRkMwMzRDICAgTUZDMCBLMCwgU1JTQ3RsDQpCRkQwNzY2NiAgNEZGMTEwRkMgICBBRERJIEEzLCBHUCwgMjA0NjUNCkJGRDA3NjY4ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwNzY2QSAgICAgIENCNjcgICBTVyBLMSwgMjgoU1ApDQpCRkQwNzY2QyAgMDBGQzAzNkMgICBNRkMwIEsxLCBTdGF0dXMNCkJGRDA3NjcwICAgICAgQ0I0NiAgIFNXIEswLCAyNChTUCkNCkJGRDA3NjcyICAwMEZDMDM0RCAgIE1GQzAgSzAsIENhdXNlDQpCRkQwNzY3NiAgICAgIENCNjUgICBTVyBLMSwgMjAoU1ApDQpCRkQwNzY3OCAgNTA0MDAzNUEgICBTUkwgSzAsIEswLCAxMA0KQkZEMDc2N0EgIDAzN0E1MDQwICAgT1JJIFYwLCBaRVJPLCA4OTANCkJGRDA3NjdDICA3QThDMDM3QSAgIElOUyBLMSwgSzAsIDEwLCA2DQpCRkQwNzY3RSAgMDM2MDdBOEMgICBBRERJVVBDIEExLCA3ODcyOTYNCkJGRDA3NjgwICAyMDRDMDM2MCAgIElOUyBLMSwgWkVSTywgMSwgNA0KQkZEMDc2ODIgIDAzNkMyMDRDICAgTFdDMiBWMCwgODc2KFQ0KQ0KQkZEMDc2ODQgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzY4OCAgICAgIEM4NjIgICBTVyBWMSwgOChTUCkNCkJGRDA3NjhBICAgICAgQzg0MSAgIFNXIFYwLCA0KFNQKQ0KQkZEMDc2OEMgICAgICA0ODY2ICAgTFcgVjEsIDI0KFNQKQ0KQkZEMDc2OEUgICAgICAyREI3ICAgQU5ESSBWMSwgVjEsIDB4Rg0KQkZEMDc2OTAgICAgICBDQkMzICAgU1cgUzgsIDEyKFNQKQ0KQkZEMDc2OTIgICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjQ3OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HUk9VUF9FTl9DTFItPncgPSAoMXVsPDwxKTsNCkJGRDA3Njk0ICBCRkZGNDFBMiAgIExVSSBWMCwgMHhCRkZGDQpCRkQwNzY5NiAgNTA0MkJGRkYgICBMREMxIEYzMSwgMjA1NDYoUkEpDQpCRkQwNzY5OCAgQzUwQzUwNDIgICBPUkkgVjAsIFYwLCAtMTUwOTINCkJGRDA3NjlDICAgICAgRUQ4MiAgIExJIFYxLCAyDQpCRkQwNzY5RSAgICAgIEU5QTAgICBTVyBWMSwgMChWMCkNCjQ4OiAgICAgICAgICAgICAgICAgIH0NCkJGRDA3NkEwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNzZBMiAgICAgIDQ4NDYgICBMVyBWMCwgMjQoU1ApDQpCRkQwNzZBNCAgICAgIDJEMjcgICBBTkRJIFYwLCBWMCwgMHhGDQpCRkQwNzZBNiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwNzZBOCAgICAgIDQ4NjIgICBMVyBWMSwgOChTUCkNCkJGRDA3NkFBICAgICAgNDg0MSAgIExXIFYwLCA0KFNQKQ0KQkZEMDc2QUMgIDQ3N0MwMDAwICAgREkgWkVSTw0KQkZEMDc2QjAgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMNCkJGRDA3NkIyICA0QjQ3MTgwMCAgIFNCIFpFUk8sIDE5MjcxKFpFUk8pDQpCRkQwNzZCNCAgICAgIDRCNDcgICBMVyBLMCwgMjgoU1ApDQpCRkQwNzZCNiAgICAgIDRCNjUgICBMVyBLMSwgMjAoU1ApDQpCRkQwNzZCOCAgMDJGQzAzNEUgICBNVEMwIEswLCBFUEMNCkJGRDA3NkJDICAgICAgNEI0NiAgIExXIEswLCAyNChTUCkNCkJGRDA3NkJFICAgICAgNEMxMSAgIEFERElVIFNQLCBTUCwgMzINCkJGRDA3NkMwICAxMkZDMDM0QyAgIE1UQzAgSzAsIFNSU0N0bA0KQkZEMDc2QzIgIDAzQkQxMkZDICAgQURESSBTNywgR1AsIDk1Nw0KQkZEMDc2QzQgIEYxN0MwM0JEICAgV1JQR1BSIFNQLCBTUA0KQkZEMDc2QzYgIDAzNkNGMTdDICAgSkFMWCAweEJERjAwREIwDQpCRkQwNzZDOCAgMDJGQzAzNkMgICBNVEMwIEsxLCBTdGF0dXMNCkJGRDA3NkNBICAwMDAwMDJGQyAgIFNMTCBTNywgR1AsIDANCkJGRDA3NkNDICBGMzdDMDAwMCAgIEVSRVQNCkJGRDA3NkNFICAwM0JERjM3QyAgIEpBTFggMHhCREYwMEVGNA0KNDk6ICAgICAgICAgICAgICAgICAgDQo1MDogICAgICAgICAgICAgICAgICAjZWxzZQ0KNTE6ICAgICAgICAgICAgICAgICAgDQo1MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNTM6ICAgICAgICAgICAgICAgICAgZ2lycTA5X2IwKHZvaWQpDQo1NDogICAgICAgICAgICAgICAgICB7DQo1NTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCAwKTsNCjU2OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDApOw0KNTc6ICAgICAgICAgICAgICAgICAgfQ0KNTg6ICAgICAgICAgICAgICAgICAgDQo1OTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjA6ICAgICAgICAgICAgICAgICAgZ2lycTA5X2IxKHZvaWQpDQo2MTogICAgICAgICAgICAgICAgICB7DQo2MjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCAxKTsNCjYzOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDEpOw0KNjQ6ICAgICAgICAgICAgICAgICAgfQ0KNjU6ICAgICAgICAgICAgICAgICAgDQo2NjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNjc6ICAgICAgICAgICAgICAgICAgZ2lycTA5X2IyKHZvaWQpDQo2ODogICAgICAgICAgICAgICAgICB7DQo2OTogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCAyKTsNCjcwOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDIpOw0KNzE6ICAgICAgICAgICAgICAgICAgfQ0KNzI6ICAgICAgICAgICAgICAgICAgDQo3MzogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzQ6ICAgICAgICAgICAgICAgICAgZ2lycTA5X2IzKHZvaWQpDQo3NTogICAgICAgICAgICAgICAgICB7DQo3NjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCAzKTsNCjc3OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDMpOw0KNzg6ICAgICAgICAgICAgICAgICAgfQ0KNzk6ICAgICAgICAgICAgICAgICAgDQo4MDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODE6ICAgICAgICAgICAgICAgICAgZ2lycTA5X2I0KHZvaWQpDQo4MjogICAgICAgICAgICAgICAgICB7DQo4MzogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCA0KTsNCjg0OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDQpOw0KODU6ICAgICAgICAgICAgICAgICAgfQ0KODY6ICAgICAgICAgICAgICAgICAgDQo4NzogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KODg6ICAgICAgICAgICAgICAgICAgZ2lycTA5X2I1KHZvaWQpDQo4OTogICAgICAgICAgICAgICAgICB7DQo5MDogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCA1KTsNCjkxOiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDUpOw0KOTI6ICAgICAgICAgICAgICAgICAgfQ0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTU6ICAgICAgICAgICAgICAgICAgZ2lycTA5X2I2KHZvaWQpDQo5NjogICAgICAgICAgICAgICAgICB7DQo5NzogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCA2KTsNCjk4OiAgICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDYpOw0KOTk6ICAgICAgICAgICAgICAgICAgfQ0KMTAwOiAgICAgICAgICAgICAgICAgDQoxMDE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTAyOiAgICAgICAgICAgICAgICAgZ2lycTA5X2I3KHZvaWQpDQoxMDM6ICAgICAgICAgICAgICAgICB7DQoxMDQ6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCA3KTsNCjEwNTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDcpOw0KMTA2OiAgICAgICAgICAgICAgICAgfQ0KMTA3OiAgICAgICAgICAgICAgICAgDQoxMDg6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTA5OiAgICAgICAgICAgICAgICAgZ2lycTA5X2I4KHZvaWQpDQoxMTA6ICAgICAgICAgICAgICAgICB7DQoxMTE6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCA4KTsNCjExMjogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDgpOw0KMTEzOiAgICAgICAgICAgICAgICAgfQ0KMTE0OiAgICAgICAgICAgICAgICAgDQoxMTU6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTE2OiAgICAgICAgICAgICAgICAgZ2lycTA5X2I5KHZvaWQpDQoxMTc6ICAgICAgICAgICAgICAgICB7DQoxMTg6ICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR0lSUS0+UkVHU1tNRUMxNHh4X0dJUlEwOV9JRF0uRU5fQ0xSID0gKDF1bCA8PCA5KTsNCjExOTogICAgICAgICAgICAgICAgICAgICBKVFZJQ19HSVJRLT5SRUdTW01FQzE0eHhfR0lSUTA5X0lEXS5TT1VSQ0UgPSAoMXVsIDw8IDkpOw0KMTIwOiAgICAgICAgICAgICAgICAgfQ0KMTIxOiAgICAgICAgICAgICAgICAgDQoxMjI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTIzOiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxMCh2b2lkKQ0KMTI0OiAgICAgICAgICAgICAgICAgew0KMTI1OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTApOw0KMTI2OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTApOw0KMTI3OiAgICAgICAgICAgICAgICAgfQ0KMTI4OiAgICAgICAgICAgICAgICAgDQoxMjk6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTMwOiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxMSh2b2lkKQ0KMTMxOiAgICAgICAgICAgICAgICAgew0KMTMyOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTEpOw0KMTMzOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTEpOw0KMTM0OiAgICAgICAgICAgICAgICAgfQ0KMTM1OiAgICAgICAgICAgICAgICAgDQoxMzY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTM3OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxMih2b2lkKQ0KMTM4OiAgICAgICAgICAgICAgICAgew0KMTM5OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTIpOw0KMTQwOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTIpOw0KMTQxOiAgICAgICAgICAgICAgICAgfQ0KMTQyOiAgICAgICAgICAgICAgICAgDQoxNDM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTQ0OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxMyh2b2lkKQ0KMTQ1OiAgICAgICAgICAgICAgICAgew0KMTQ2OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTMpOw0KMTQ3OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTMpOw0KMTQ4OiAgICAgICAgICAgICAgICAgfQ0KMTQ5OiAgICAgICAgICAgICAgICAgDQoxNTA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTUxOiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxNCh2b2lkKQ0KMTUyOiAgICAgICAgICAgICAgICAgew0KMTUzOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTQpOw0KMTU0OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTQpOw0KMTU1OiAgICAgICAgICAgICAgICAgfQ0KMTU2OiAgICAgICAgICAgICAgICAgDQoxNTc6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTU4OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxNSh2b2lkKQ0KMTU5OiAgICAgICAgICAgICAgICAgew0KMTYwOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTUpOw0KMTYxOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTUpOw0KMTYyOiAgICAgICAgICAgICAgICAgfQ0KMTYzOiAgICAgICAgICAgICAgICAgDQoxNjQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTY1OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxNih2b2lkKQ0KMTY2OiAgICAgICAgICAgICAgICAgew0KMTY3OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTYpOw0KMTY4OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTYpOw0KMTY5OiAgICAgICAgICAgICAgICAgfQ0KMTcwOiAgICAgICAgICAgICAgICAgDQoxNzE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTcyOiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxNyh2b2lkKQ0KMTczOiAgICAgICAgICAgICAgICAgew0KMTc0OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTcpOw0KMTc1OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTcpOw0KMTc2OiAgICAgICAgICAgICAgICAgfQ0KMTc3OiAgICAgICAgICAgICAgICAgDQoxNzg6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTc5OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxOCh2b2lkKQ0KMTgwOiAgICAgICAgICAgICAgICAgew0KMTgxOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTgpOw0KMTgyOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTgpOw0KMTgzOiAgICAgICAgICAgICAgICAgfQ0KMTg0OiAgICAgICAgICAgICAgICAgDQoxODU6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTg2OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IxOSh2b2lkKQ0KMTg3OiAgICAgICAgICAgICAgICAgew0KMTg4OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMTkpOw0KMTg5OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMTkpOw0KMTkwOiAgICAgICAgICAgICAgICAgfQ0KMTkxOiAgICAgICAgICAgICAgICAgDQoxOTI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTkzOiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyMCh2b2lkKQ0KMTk0OiAgICAgICAgICAgICAgICAgew0KMTk1OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjApOw0KMTk2OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjApOw0KMTk3OiAgICAgICAgICAgICAgICAgfQ0KMTk4OiAgICAgICAgICAgICAgICAgDQoxOTk6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjAwOiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyMSh2b2lkKQ0KMjAxOiAgICAgICAgICAgICAgICAgew0KMjAyOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjEpOw0KMjAzOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjEpOw0KMjA0OiAgICAgICAgICAgICAgICAgfQ0KMjA1OiAgICAgICAgICAgICAgICAgDQoyMDY6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjA3OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyMih2b2lkKQ0KMjA4OiAgICAgICAgICAgICAgICAgew0KMjA5OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjIpOw0KMjEwOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjIpOw0KMjExOiAgICAgICAgICAgICAgICAgfQ0KMjEyOiAgICAgICAgICAgICAgICAgDQoyMTM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjE0OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyMyh2b2lkKQ0KMjE1OiAgICAgICAgICAgICAgICAgew0KMjE2OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjMpOw0KMjE3OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjMpOw0KMjE4OiAgICAgICAgICAgICAgICAgfQ0KMjE5OiAgICAgICAgICAgICAgICAgDQoyMjA6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjIxOiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyNCh2b2lkKQ0KMjIyOiAgICAgICAgICAgICAgICAgew0KMjIzOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjQpOw0KMjI0OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjQpOw0KMjI1OiAgICAgICAgICAgICAgICAgfQ0KMjI2OiAgICAgICAgICAgICAgICAgDQoyMjc6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjI4OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyNSh2b2lkKQ0KMjI5OiAgICAgICAgICAgICAgICAgew0KMjMwOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjUpOw0KMjMxOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjUpOw0KMjMyOiAgICAgICAgICAgICAgICAgfQ0KMjMzOiAgICAgICAgICAgICAgICAgDQoyMzQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjM1OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyNih2b2lkKQ0KMjM2OiAgICAgICAgICAgICAgICAgew0KMjM3OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjYpOw0KMjM4OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjYpOw0KMjM5OiAgICAgICAgICAgICAgICAgfQ0KMjQwOiAgICAgICAgICAgICAgICAgDQoyNDE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjQyOiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyNyh2b2lkKQ0KMjQzOiAgICAgICAgICAgICAgICAgew0KMjQ0OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjcpOw0KMjQ1OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjcpOw0KMjQ2OiAgICAgICAgICAgICAgICAgfQ0KMjQ3OiAgICAgICAgICAgICAgICAgDQoyNDg6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjQ5OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyOCh2b2lkKQ0KMjUwOiAgICAgICAgICAgICAgICAgew0KMjUxOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjgpOw0KMjUyOiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjgpOw0KMjUzOiAgICAgICAgICAgICAgICAgfQ0KMjU0OiAgICAgICAgICAgICAgICAgDQoyNTU6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjU2OiAgICAgICAgICAgICAgICAgZ2lycTA5X2IyOSh2b2lkKQ0KMjU3OiAgICAgICAgICAgICAgICAgew0KMjU4OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMjkpOw0KMjU5OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMjkpOw0KMjYwOiAgICAgICAgICAgICAgICAgfQ0KMjYxOiAgICAgICAgICAgICAgICAgDQoyNjI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjYzOiAgICAgICAgICAgICAgICAgZ2lycTA5X2IzMCh2b2lkKQ0KMjY0OiAgICAgICAgICAgICAgICAgew0KMjY1OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLkVOX0NMUiA9ICgxdWwgPDwgMzApOw0KMjY2OiAgICAgICAgICAgICAgICAgICAgIEpUVklDX0dJUlEtPlJFR1NbTUVDMTR4eF9HSVJRMDlfSURdLlNPVVJDRSA9ICgxdWwgPDwgMzApOw0KMjY3OiAgICAgICAgICAgICAgICAgfQ0KMjY4OiAgICAgICAgICAgICAgICAgDQoyNjk6ICAgICAgICAgICAgICAgICANCjI3MDogICAgICAgICAgICAgICAgICNlbmRpZg0KMjcxOiAgICAgICAgICAgICAgICAgDQoyNzI6ICAgICAgICAgICAgICAgICAvKiBlbmQgZ2lycTA5LmMgKi8NCjI3MzogICAgICAgICAgICAgICAgIC8qKiAgIEB9DQoyNzQ6ICAgICAgICAgICAgICAgICAgKi8NCjI3NTogICAgICAgICAgICAgICAgIA0KLS0tICBjOi9lL2Rldi9mcmVlcnRvcy93b3JraW5nY29weS9mcmVlcnRvcy9kZW1vL3BpYzMybWVjMTR4eF9tcGxhYi9zcmMvbWVjMTR4eC9pbnRlcnJ1cHRzL2dpcnEwOC5jICAtLS0tDQoxOiAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI6ICAgICAgICAgICAgICAgICAgICogQ29weXJpZ2h0IDIwMTQgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4NCjM6ICAgICAgICAgICAgICAgICAgICogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgNCjQ6ICAgICAgICAgICAgICAgICAgICogTWljcm9jaGlwIHByb2R1Y3RzLg0KNTogICAgICAgICAgICAgICAgICAgKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLg0KNjogICAgICAgICAgICAgICAgICAgKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLA0KNzogICAgICAgICAgICAgICAgICAgKiBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksDQo4OiAgICAgICAgICAgICAgICAgICAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQDQo5OiAgICAgICAgICAgICAgICAgICAqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4NCjEwOiAgICAgICAgICAgICAgICAgICogSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLA0KMTE6ICAgICAgICAgICAgICAgICAgKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQNCjEyOiAgICAgICAgICAgICAgICAgICogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUw0KMTM6ICAgICAgICAgICAgICAgICAgKiBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9SIFRIRSBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4NCjE0OiAgICAgICAgICAgICAgICAgICogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMDQoxNTogICAgICAgICAgICAgICAgICAqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRg0KMTY6ICAgICAgICAgICAgICAgICAgKiBGRUVTLCBJRiBBTlksIFRIQVQgWU9VIEhBVkUgUEFJRCBESVJFQ1RMWSBUTyBNSUNST0NISVAgRk9SIFRISVMgU09GVFdBUkUuDQoxNzogICAgICAgICAgICAgICAgICAqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UNCjE4OiAgICAgICAgICAgICAgICAgICogT0YgVEhFU0UgVEVSTVMuDQoxOTogICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCjIwOiAgICAgICAgICAgICAgICAgIA0KMjE6ICAgICAgICAgICAgICAgICAgLyoqIEBmaWxlIGdpcnEwOC5jDQoyMjogICAgICAgICAgICAgICAgICAgKkludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmVzIGZvciBNSVBTIHVzaW5nIHZhbmlsbGEgR0NDIGFuZCBNQ0hQIFhDMzINCjIzOiAgICAgICAgICAgICAgICAgICAqLw0KMjQ6ICAgICAgICAgICAgICAgICAgLyoqIEBkZWZncm91cCBNRUMxNHh4IElTUg0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMjk6ICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgInBsYXRmb3JtLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4LmgiDQozMTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFzLmgiDQozMjogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dwaW8uaCINCjMzOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfZnVuYy5oIg0KMzQ6ICAgICAgICAgICAgICAgICAgDQozNTogICAgICAgICAgICAgICAgICANCjM2OiAgICAgICAgICAgICAgICAgIA0KMzc6ICAgICAgICAgICAgICAgICAgI2lmIEdJUlEwOF9ESVNBR0cgPT0gMA0KMzg6ICAgICAgICAgICAgICAgICAgDQozOTogICAgICAgICAgICAgICAgICAvKg0KNDA6ICAgICAgICAgICAgICAgICAgICogQWdncmVnYXRlZCBtb2RlIGhhbmRsZXIsIG11c3QgaGFuZGxlIGFsbCBlbmFibGVkIA0KNDE6ICAgICAgICAgICAgICAgICAgICogR0lSUTA4IHNvdXJjZXMuIA0KNDI6ICAgICAgICAgICAgICAgICAgKi8NCjQzOiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNiwgc2VjdGlvbigiLmdpcnFzIikpKQ0KNDQ6ICAgICAgICAgICAgICAgICAgZ2lycTA4X2lzciggdm9pZCApDQo0NTogICAgICAgICAgICAgICAgICB7DQpCRkQwNzVFOCAgRTE3QzAzQkQgICBSRFBHUFIgU1AsIFNQDQpCRkQwNzVFQyAgMDBGQzAzNkUgICBNRkMwIEsxLCBFUEMNCkJGRDA3NUVFICAwMzRDMDBGQyAgIElOUyBBMywgR1AsIDEzLCAtMTINCkJGRDA3NUYwICAxMEZDMDM0QyAgIE1GQzAgSzAsIFNSU0N0bA0KQkZEMDc1RjIgIDRGRjExMEZDICAgQURESSBBMywgR1AsIDIwNDY1DQpCRkQwNzVGNCAgICAgIDRGRjEgICBBRERJVSBTUCwgU1AsIC0zMg0KQkZEMDc1RjYgICAgICBDQjY3ICAgU1cgSzEsIDI4KFNQKQ0KQkZEMDc1RjggIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzDQpCRkQwNzVGQyAgICAgIENCNDYgICBTVyBLMCwgMjQoU1ApDQpCRkQwNzVGRSAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZQ0KQkZEMDc2MDIgICAgICBDQjY1ICAgU1cgSzEsIDIwKFNQKQ0KQkZEMDc2MDQgIDUwNDAwMzVBICAgU1JMIEswLCBLMCwgMTANCkJGRDA3NjA2ICAwMzdBNTA0MCAgIE9SSSBWMCwgWkVSTywgODkwDQpCRkQwNzYwOCAgN0E4QzAzN0EgICBJTlMgSzEsIEswLCAxMCwgNg0KQkZEMDc2MEEgIDAzNjA3QThDICAgQURESVVQQyBBMSwgNzg3Mjk2DQpCRkQwNzYwQyAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQNCkJGRDA3NjBFICAwMzZDMjA0QyAgIExXQzIgVjAsIDg3NihUNCkNCkJGRDA3NjEwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cw0KQkZEMDc2MTQgICAgICBDODYyICAgU1cgVjEsIDgoU1ApDQpCRkQwNzYxNiAgICAgIEM4NDEgICBTVyBWMCwgNChTUCkNCkJGRDA3NjE4ICAgICAgNDg2NiAgIExXIFYxLCAyNChTUCkNCkJGRDA3NjFBICAgICAgMkRCNyAgIEFOREkgVjEsIFYxLCAweEYNCkJGRDA3NjFDICAgICAgQ0JDMyAgIFNXIFM4LCAxMihTUCkNCkJGRDA3NjFFICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQo0NjogICAgICAgICAgICAgICAgICAgICAgSlRWSUNfR1JPVVBfRU5fQ0xSLT53ID0gKDF1bDw8MCk7DQpCRkQwNzYyMCAgQkZGRjQxQTIgICBMVUkgVjAsIDB4QkZGRg0KQkZEMDc2MjIgIDUwNDJCRkZGICAgTERDMSBGMzEsIDIwNTQ2KFJBKQ0KQkZEMDc2MjQgIEM1MEM1MDQyICAgT1JJIFYwLCBWMCwgLTE1MDkyDQpCRkQwNzYyOCAgICAgIEVEODEgICBMSSBWMSwgMQ0KQkZEMDc2MkEgICAgICBFOUEwICAgU1cgVjEsIDAoVjApDQo0NzogICAgICAgICAgICAgICAgICB9DQpCRkQwNzYyQyAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDc2MkUgICAgICA0ODQ2ICAgTFcgVjAsIDI0KFNQKQ0KQkZEMDc2MzAgICAgICAyRDI3ICAgQU5ESSBWMCwgVjAsIDB4Rg0KQkZEMDc2MzIgICAgICA0QkMzICAgTFcgUzgsIDEyKFNQKQ0KQkZEMDc2MzQgICAgICA0ODYyICAgTFcgVjEsIDgoU1ApDQpCRkQwNzYzNiAgICAgIDQ4NDEgICBMVyBWMCwgNChTUCkNCkJGRDA3NjM4ICA0NzdDMDAwMCAgIERJIFpFUk8NCkJGRDA3NjNDICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNzYzRSAgNEI0NzE4MDAgICBTQiBaRVJPLCAxOTI3MShaRVJPKQ0KQkZEMDc2NDAgICAgICA0QjQ3ICAgTFcgSzAsIDI4KFNQKQ0KQkZEMDc2NDIgICAgICA0QjY1ICAgTFcgSzEsIDIwKFNQKQ0KQkZEMDc2NDQgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDDQpCRkQwNzY0OCAgICAgIDRCNDYgICBMVyBLMCwgMjQoU1ApDQpCRkQwNzY0QSAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQpCRkQwNzY0QyAgMTJGQzAzNEMgICBNVEMwIEswLCBTUlNDdGwNCkJGRDA3NjRFICAwM0JEMTJGQyAgIEFEREkgUzcsIEdQLCA5NTcNCkJGRDA3NjUwICBGMTdDMDNCRCAgIFdSUEdQUiBTUCwgU1ANCkJGRDA3NjUyICAwMzZDRjE3QyAgIEpBTFggMHhCREYwMERCMA0KQkZEMDc2NTQgIDAyRkMwMzZDICAgTVRDMCBLMSwgU3RhdHVzDQpCRkQwNzY1NiAgMDAwMDAyRkMgICBTTEwgUzcsIEdQLCAwDQpCRkQwNzY1OCAgRjM3QzAwMDAgICBFUkVUDQpCRkQwNzY1QSAgMDNCREYzN0MgICBKQUxYIDB4QkRGMDBFRjQNCjQ4OiAgICAgICAgICAgICAgICAgIA0KNDk6ICAgICAgICAgICAgICAgICAgI2Vsc2UNCjUwOiAgICAgICAgICAgICAgICAgIA0KNTE6ICAgICAgICAgICAgICAgICAgLyoNCjUyOiAgICAgICAgICAgICAgICAgICAqIERpc2FnZ3JlZ2F0ZWQgR0lSUTA4IHN1YmhhbmRsZXJzLCBvbmUgZm9yIGVhY2ggDQo1MzogICAgICAgICAgICAgICAgICAgKiBzb3VyY2UuICBDYWxsZWQgYnkgYXNzZW1ibHkgbGFuZ3VhZ2Ugd3JhcHBlci4gDQo1NDogICAgICAgICAgICAgICAgICAqLw0KNTU6ICAgICAgICAgICAgICAgICAgDQo1NjogICAgICAgICAgICAgICAgICANCjU3OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo1ODogICAgICAgICAgICAgICAgICBnaXJxMDhfYjAodm9pZCkNCjU5OiAgICAgICAgICAgICAgICAgIHsNCjYwOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMCk7DQo2MTogICAgICAgICAgICAgICAgICB9DQo2MjogICAgICAgICAgICAgICAgICANCjYzOiAgICAgICAgICAgICAgICAgIA0KNjQ6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjY1OiAgICAgICAgICAgICAgICAgIGdpcnEwOF9iMSh2b2lkKQ0KNjY6ICAgICAgICAgICAgICAgICAgew0KNjc6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAxKTsNCjY4OiAgICAgICAgICAgICAgICAgIH0NCjY5OiAgICAgICAgICAgICAgICAgIA0KNzA6ICAgICAgICAgICAgICAgICAgDQo3MTogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KNzI6ICAgICAgICAgICAgICAgICAgZ2lycTA4X2IyKHZvaWQpDQo3MzogICAgICAgICAgICAgICAgICB7DQo3NDogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDIpOw0KNzU6ICAgICAgICAgICAgICAgICAgfQ0KNzY6ICAgICAgICAgICAgICAgICAgDQo3NzogICAgICAgICAgICAgICAgICANCjc4OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQo3OTogICAgICAgICAgICAgICAgICBnaXJxMDhfYjModm9pZCkNCjgwOiAgICAgICAgICAgICAgICAgIHsNCjgxOiAgICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMyk7DQo4MjogICAgICAgICAgICAgICAgICB9DQo4MzogICAgICAgICAgICAgICAgICANCjg0OiAgICAgICAgICAgICAgICAgIA0KODU6ICAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjg2OiAgICAgICAgICAgICAgICAgIGdpcnEwOF9iNCh2b2lkKQ0KODc6ICAgICAgICAgICAgICAgICAgew0KODg6ICAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCA0KTsNCjg5OiAgICAgICAgICAgICAgICAgIH0NCjkwOiAgICAgICAgICAgICAgICAgIA0KOTE6ICAgICAgICAgICAgICAgICAgDQo5MjogICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KOTM6ICAgICAgICAgICAgICAgICAgZ2lycTA4X2I1KHZvaWQpDQo5NDogICAgICAgICAgICAgICAgICB7DQo5NTogICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDUpOw0KOTY6ICAgICAgICAgICAgICAgICAgfQ0KOTc6ICAgICAgICAgICAgICAgICAgDQo5ODogICAgICAgICAgICAgICAgICANCjk5OiAgICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMDA6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjYodm9pZCkNCjEwMTogICAgICAgICAgICAgICAgIHsNCjEwMjogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgNik7DQoxMDM6ICAgICAgICAgICAgICAgICB9DQoxMDQ6ICAgICAgICAgICAgICAgICANCjEwNTogICAgICAgICAgICAgICAgIA0KMTA2OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEwNzogICAgICAgICAgICAgICAgIGdpcnEwOF9iNyh2b2lkKQ0KMTA4OiAgICAgICAgICAgICAgICAgew0KMTA5OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCA3KTsNCjExMDogICAgICAgICAgICAgICAgIH0NCjExMTogICAgICAgICAgICAgICAgIA0KMTEyOiAgICAgICAgICAgICAgICAgDQoxMTM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTE0OiAgICAgICAgICAgICAgICAgZ2lycTA4X2I4KHZvaWQpDQoxMTU6ICAgICAgICAgICAgICAgICB7DQoxMTY6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDgpOw0KMTE3OiAgICAgICAgICAgICAgICAgfQ0KMTE4OiAgICAgICAgICAgICAgICAgDQoxMTk6ICAgICAgICAgICAgICAgICANCjEyMDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMjE6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjkodm9pZCkNCjEyMjogICAgICAgICAgICAgICAgIHsNCjEyMzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgOSk7DQoxMjQ6ICAgICAgICAgICAgICAgICB9DQoxMjU6ICAgICAgICAgICAgICAgICANCjEyNjogICAgICAgICAgICAgICAgIA0KMTI3OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjEyODogICAgICAgICAgICAgICAgIGdpcnEwOF9iMTAodm9pZCkNCjEyOTogICAgICAgICAgICAgICAgIHsNCjEzMDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMTApOw0KMTMxOiAgICAgICAgICAgICAgICAgfQ0KMTMyOiAgICAgICAgICAgICAgICAgDQoxMzM6ICAgICAgICAgICAgICAgICANCjEzNDogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxMzU6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjExKHZvaWQpDQoxMzY6ICAgICAgICAgICAgICAgICB7DQoxMzc6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDExKTsNCjEzODogICAgICAgICAgICAgICAgIH0NCjEzOTogICAgICAgICAgICAgICAgIA0KMTQwOiAgICAgICAgICAgICAgICAgDQoxNDE6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTQyOiAgICAgICAgICAgICAgICAgZ2lycTA4X2IxMih2b2lkKQ0KMTQzOiAgICAgICAgICAgICAgICAgew0KMTQ0OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAxMik7DQoxNDU6ICAgICAgICAgICAgICAgICB9DQoxNDY6ICAgICAgICAgICAgICAgICANCjE0NzogICAgICAgICAgICAgICAgIA0KMTQ4OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE0OTogICAgICAgICAgICAgICAgIGdpcnEwOF9iMTModm9pZCkNCjE1MDogICAgICAgICAgICAgICAgIHsNCjE1MTogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMTMpOw0KMTUyOiAgICAgICAgICAgICAgICAgfQ0KMTUzOiAgICAgICAgICAgICAgICAgDQoxNTQ6ICAgICAgICAgICAgICAgICANCjE1NTogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNTY6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjE0KHZvaWQpDQoxNTc6ICAgICAgICAgICAgICAgICB7DQoxNTg6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDE0KTsNCjE1OTogICAgICAgICAgICAgICAgIH0NCjE2MDogICAgICAgICAgICAgICAgIA0KMTYxOiAgICAgICAgICAgICAgICAgDQoxNjI6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTYzOiAgICAgICAgICAgICAgICAgZ2lycTA4X2IxNSh2b2lkKQ0KMTY0OiAgICAgICAgICAgICAgICAgew0KMTY1OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAxNSk7DQoxNjY6ICAgICAgICAgICAgICAgICB9DQoxNjc6ICAgICAgICAgICAgICAgICANCjE2ODogICAgICAgICAgICAgICAgIA0KMTY5OiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE3MDogICAgICAgICAgICAgICAgIGdpcnEwOF9iMTYodm9pZCkNCjE3MTogICAgICAgICAgICAgICAgIHsNCjE3MjogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMTYpOw0KMTczOiAgICAgICAgICAgICAgICAgfQ0KMTc0OiAgICAgICAgICAgICAgICAgDQoxNzU6ICAgICAgICAgICAgICAgICANCjE3NjogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxNzc6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjE3KHZvaWQpDQoxNzg6ICAgICAgICAgICAgICAgICB7DQoxNzk6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDE3KTsNCjE4MDogICAgICAgICAgICAgICAgIH0NCjE4MTogICAgICAgICAgICAgICAgIA0KMTgyOiAgICAgICAgICAgICAgICAgDQoxODM6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMTg0OiAgICAgICAgICAgICAgICAgZ2lycTA4X2IxOCh2b2lkKQ0KMTg1OiAgICAgICAgICAgICAgICAgew0KMTg2OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAxOCk7DQoxODc6ICAgICAgICAgICAgICAgICB9DQoxODg6ICAgICAgICAgICAgICAgICANCjE4OTogICAgICAgICAgICAgICAgIA0KMTkwOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjE5MTogICAgICAgICAgICAgICAgIGdpcnEwOF9iMTkodm9pZCkNCjE5MjogICAgICAgICAgICAgICAgIHsNCjE5MzogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMTkpOw0KMTk0OiAgICAgICAgICAgICAgICAgfQ0KMTk1OiAgICAgICAgICAgICAgICAgDQoxOTY6ICAgICAgICAgICAgICAgICANCjE5NzogICAgICAgICAgICAgICAgIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaywgaW50ZXJydXB0LCBub21pcHMxNikpDQoxOTg6ICAgICAgICAgICAgICAgICBnaXJxMDhfYjIwKHZvaWQpDQoxOTk6ICAgICAgICAgICAgICAgICB7DQoyMDA6ICAgICAgICAgICAgICAgICAgICAganR2aWNfZGlzX2Nscl9zb3VyY2UoTUVDMTR4eF9HSVJRMDhfSUQsIDIwKTsNCjIwMTogICAgICAgICAgICAgICAgIH0NCjIwMjogICAgICAgICAgICAgICAgIA0KMjAzOiAgICAgICAgICAgICAgICAgDQoyMDQ6ICAgICAgICAgICAgICAgICB2b2lkIF9fYXR0cmlidXRlX18oKHdlYWssIGludGVycnVwdCwgbm9taXBzMTYpKQ0KMjA1OiAgICAgICAgICAgICAgICAgZ2lycTA4X2IyMSh2b2lkKQ0KMjA2OiAgICAgICAgICAgICAgICAgew0KMjA3OiAgICAgICAgICAgICAgICAgICAgIGp0dmljX2Rpc19jbHJfc291cmNlKE1FQzE0eHhfR0lSUTA4X0lELCAyMSk7DQoyMDg6ICAgICAgICAgICAgICAgICB9DQoyMDk6ICAgICAgICAgICAgICAgICANCjIxMDogICAgICAgICAgICAgICAgIA0KMjExOiAgICAgICAgICAgICAgICAgdm9pZCBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBpbnRlcnJ1cHQsIG5vbWlwczE2KSkNCjIxMjogICAgICAgICAgICAgICAgIGdpcnEwOF9iMjIodm9pZCkNCjIxMzogICAgICAgICAgICAgICAgIHsNCjIxNDogICAgICAgICAgICAgICAgICAgICBqdHZpY19kaXNfY2xyX3NvdXJjZShNRUMxNHh4X0dJUlEwOF9JRCwgMjIpOw0KMjE1OiAgICAgICAgICAgICAgICAgfQ0KMjE2OiAgICAgICAgICAgICAgICAgDQoyMTc6ICAgICAgICAgICAgICAgICANCjIxODogICAgICAgICAgICAgICAgICNlbmRpZg0KMjE5OiAgICAgICAgICAgICAgICAgDQoyMjA6ICAgICAgICAgICAgICAgICANCjIyMTogICAgICAgICAgICAgICAgIC8qIGVuZCBnaXJxMDguYyAqLw0KMjIyOiAgICAgICAgICAgICAgICAgLyoqICAgQH0NCjIyMzogICAgICAgICAgICAgICAgICAqLw0KMjI0OiAgICAgICAgICAgICAgICAgDQotLS0gIGM6L2UvZGV2L2ZyZWVydG9zL3dvcmtpbmdjb3B5L2ZyZWVydG9zL2RlbW8vcGljMzJtZWMxNHh4X21wbGFiL3NyYy9tZWMxNHh4L2V4Y2VwdGlvbnMvbXBsYWIvZ2VuZXJhbF9leGNlcHRpb24uYw0KMTogICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoyOiAgICAgICAgICAgICAgICAgICAqIChjKSAyMDE0IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuDQozOiAgICAgICAgICAgICAgICAgICAqIFlvdSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgYW5kIGFueSBkZXJpdmF0aXZlcyBleGNsdXNpdmVseSB3aXRoDQo0OiAgICAgICAgICAgICAgICAgICAqIE1pY3JvY2hpcCBwcm9kdWN0cy4NCjU6ICAgICAgICAgICAgICAgICAgICogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4NCjY6ICAgICAgICAgICAgICAgICAgICogTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRSwNCjc6ICAgICAgICAgICAgICAgICAgICogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLA0KODogICAgICAgICAgICAgICAgICAgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUA0KOTogICAgICAgICAgICAgICAgICAgKiBQUk9EVUNUUywgQ09NQklOQVRJT04gV0lUSCBBTlkgT1RIRVIgUFJPRFVDVFMsIE9SIFVTRSBJTiBBTlkgQVBQTElDQVRJT04uDQoxMDogICAgICAgICAgICAgICAgICAqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwNCjExOiAgICAgICAgICAgICAgICAgICogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5EDQoxMjogICAgICAgICAgICAgICAgICAqIFdIQVRTT0VWRVIgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEhPV0VWRVIgQ0FVU0VELCBFVkVOIElGIE1JQ1JPQ0hJUCBIQVMNCjEzOiAgICAgICAgICAgICAgICAgICogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuDQoxNDogICAgICAgICAgICAgICAgICAqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTA0KMTU6ICAgICAgICAgICAgICAgICAgKiBDTEFJTVMgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUgV0lMTCBOT1QgRVhDRUVEIFRIRSBBTU9VTlQgT0YNCjE2OiAgICAgICAgICAgICAgICAgICogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLg0KMTc6ICAgICAgICAgICAgICAgICAgKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFDQoxODogICAgICAgICAgICAgICAgICAqIE9GIFRIRVNFIFRFUk1TLg0KMTk6ICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoyMDogICAgICAgICAgICAgICAgICANCjIxOiAgICAgICAgICAgICAgICAgIC8qKiBAZmlsZSBnZW5lcmFsX2V4Y2VwdGlvbi5jDQoyMjogICAgICAgICAgICAgICAgICAgKk1FQzE0eHggR2VuZXJhbCBFeGNlcHRpb24gSGFuZGxlcg0KMjM6ICAgICAgICAgICAgICAgICAgICovDQoyNDogICAgICAgICAgICAgICAgICAvKiogQGRlZmdyb3VwIE1FQzE0eHggRXhjZXB0aW9ucw0KMjU6ICAgICAgICAgICAgICAgICAgICogIEB7DQoyNjogICAgICAgICAgICAgICAgICAgKi8NCjI3OiAgICAgICAgICAgICAgICAgIA0KMjg6ICAgICAgICAgICAgICAgICAgDQoyOTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiYXBwY2ZnLmgiDQozMDogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicGxhdGZvcm0uaCINCjMxOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHguaCINCjMyOiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfdHJhY2VfaW5saW5lLmgiDQozMzogICAgICAgICAgICAgICAgICANCjM0OiAgICAgICAgICAgICAgICAgIHR5cGVkZWYgc3RydWN0IGdlbl9leGNlcHRfY2FwdHVyZQ0KMzU6ICAgICAgICAgICAgICAgICAgew0KMzY6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0YWNrX3B0cjsNCjM3OiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjcDBfc3RhdHVzOw0KMzg6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNwMF9jYXVzZTsNCjM5OiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjcDBfZXBjOw0KNDA6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNwMF9lcnJvcl9lcGM7DQo0MTogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY3AwX25leGM7DQo0MjogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY3AwX25lcGM7DQo0MzogICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY3AwX2JhZHZhZGRyOw0KNDQ6ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGFoYl9lcnI7DQo0NTogICAgICAgICAgICAgICAgICB9IEdFTl9FWENFUFRfQ0FQVFVSRTsNCjQ2OiAgICAgICAgICAgICAgICAgIA0KNDc6ICAgICAgICAgICAgICAgICAgR0VOX0VYQ0VQVF9DQVBUVVJFIGdleGNfY2FwOw0KNDg6ICAgICAgICAgICAgICAgICAgDQo0OTogICAgICAgICAgICAgICAgICB2b2lkIA0KNTA6ICAgICAgICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygobm9taXBzMTYsIG5vcmV0dXJuKSkgX2dlbmVyYWxfZXhjZXB0aW9uX2hhbmRsZXIgKHZvaWQpDQo1MTogICAgICAgICAgICAgICAgICB7DQpCRkQwMDQ2MCAgICAgIDRGRjkgICBBRERJVSBTUCwgU1AsIC0xNg0KQkZEMDA0NjIgICAgICBDQkUzICAgU1cgUkEsIDEyKFNQKQ0KQkZEMDA0NjQgICAgICBDQkMyICAgU1cgUzgsIDgoU1ApDQpCRkQwMDQ2NiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KNTI6ICAgICAgICAgICAgICAgICAgICAgIC8qIA0KNTM6ICAgICAgICAgICAgICAgICAgICAgICAqICBNRUMxNHh4IEFwcGxpY2F0aW9uIEdlbmVyYWwgRXhjZXB0aW9uIGhhbmRsZXINCjU0OiAgICAgICAgICAgICAgICAgICAgICAgKi8NCjU1OiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBlOw0KNTY6ICAgICAgICAgICAgICAgICAgDQo1NzogICAgICAgICAgICAgICAgICAgICAgLyogR2V0IGN1cnJlbnQgU3RhY2sgUG9pbnRlci4gTm90ZTogdGhpcyBpcyBub3QgU1AgYXQNCjU4OiAgICAgICAgICAgICAgICAgICAgICAgKiBleGNlcHRpb24uIFhDMzIgd3JhcHMgX2dlbmVyYWxfZXhjZXB0aW9uX2hhbmRsZXIgaW4NCjU5OiAgICAgICAgICAgICAgICAgICAgICAgKiBhc3NlbWJseSBjb2RlIHdoaWNoIHNhdmVzIHN0YXRlIHJlc3VsdGluZyBpcyBhDQo2MDogICAgICAgICAgICAgICAgICAgICAgICogbW9kaWZpZWQgU1AuIFdyYXBwZXIgYWxsb2NhdGVzIDg4IGJ5dGVzIGZvciBjb250ZXh0DQo2MTogICAgICAgICAgICAgICAgICAgICAgICogc2F2ZS4gT3JpZ2luYWwgU1AgPSBTUGN1cnJlbnQgKyA4OC4NCjYyOiAgICAgICAgICAgICAgICAgICAgICAgKi8NCjYzOiAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGUgKA0KQkZEMDA0NjggICAgICAwRkZEICAgTU9WRSBSQSwgU1ANCkJGRDAwNDZBICAgICAgMEMwMCAgIE5PUA0KQkZEMDA0NkMgIDAwMDBGQkZFICAgU1cgUkEsIDAoUzgpDQo2NDogICAgICAgICAgICAgICAgICAgICAgICAibW92ZSAlMCwkc3AgXG5cdCINCjY1OiAgICAgICAgICAgICAgICAgICAgICAgICJub3AgICAgICAgIFxuXHQiIA0KNjY6ICAgICAgICAgICAgICAgICAgICAgICAgOiI9ciIgKGUpIA0KNjc6ICAgICAgICAgICAgICAgICAgICAgICAgOjopOw0KNjg6ICAgICAgICAgICAgICAgICAgICAgIGdleGNfY2FwLnN0YWNrX3B0ciA9IGU7DQpCRkQwMDQ3MCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDA0NzIgIEZDN0VCRkQyICAgTERDMSBGMzAsIC04OTgoUzIpDQpCRkQwMDQ3NCAgMDAwMEZDN0UgICBMVyBWMSwgMChTOCkNCkJGRDAwNDc4ICA4MTM0Rjg2MiAgIFNXIFYxLCAtMzI0NjAoVjApDQo2OTogICAgICAgICAgICAgICAgICAgICAgDQo3MDogICAgICAgICAgICAgICAgICAgICAgZ2V4Y19jYXAuY3AwX3N0YXR1cyA9IF9DUDBfR0VUX1NUQVRVUygpOw0KQkZEMDA0N0MgIDAwRkMwMDZDICAgTUZDMCBWMSwgU3RhdHVzDQpCRkQwMDQ4MCAgQkZEMjQxQTIgICBMVUkgVjAsIDB4QkZEMg0KQkZEMDA0ODIgIDMwNDJCRkQyICAgTERDMSBGMzAsIDEyMzU0KFMyKQ0KQkZEMDA0ODQgIDgxMzQzMDQyICAgQURESVUgVjAsIFYwLCAtMzI0NjANCkJGRDAwNDg4ICAgICAgRTlBMSAgIFNXIFYxLCA0KFYwKQ0KNzE6ICAgICAgICAgICAgICAgICAgICAgIGdleGNfY2FwLmNwMF9jYXVzZSA9IF9DUDBfR0VUX0NBVVNFKCk7DQpCRkQwMDQ4QSAgMDBGQzAwNkQgICBNRkMwIFYxLCBDYXVzZQ0KQkZEMDA0OEUgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAwNDkwICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAwNDkyICA4MTM0MzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNDYwDQpCRkQwMDQ5NiAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkNCjcyOiAgICAgICAgICAgICAgICAgICAgICBnZXhjX2NhcC5jcDBfZXBjID0gX0NQMF9HRVRfRVBDKCk7DQpCRkQwMDQ5OCAgMDBGQzAwNkUgICBNRkMwIFYxLCBFUEMNCkJGRDAwNDlDICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwMDQ5RSAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwMDRBMCAgODEzNDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjQ2MA0KQkZEMDA0QTQgICAgICBFOUEzICAgU1cgVjEsIDEyKFYwKQ0KNzM6ICAgICAgICAgICAgICAgICAgICAgIGdleGNfY2FwLmNwMF9lcnJvcl9lcGMgPSBfQ1AwX0dFVF9FUlJPUkVQQygpOw0KQkZEMDA0QTYgIDAwRkMwMDdFICAgTUZDMCBWMSwgRXJyb3JFUEMNCkJGRDAwNEFBICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwMDRBQyAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwMDRBRSAgODEzNDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjQ2MA0KQkZEMDA0QjIgICAgICBFOUE0ICAgU1cgVjEsIDE2KFYwKQ0KNzQ6ICAgICAgICAgICAgICAgICAgICAgIGdleGNfY2FwLmNwMF9uZXhjID0gX0NQMF9HRVRfTkVTVEVERVhDKCk7DQpCRkQwMDRCNCAgMTBGQzAwNkQgICBNRkMwIFYxLCAkMTMsIDINCkJGRDAwNEI2ICA0MUEyMTBGQyAgIEFEREkgQTMsIEdQLCAxNjgwMg0KQkZEMDA0QjggIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAwNEJBICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAwNEJDICA4MTM0MzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNDYwDQpCRkQwMDRDMCAgICAgIEU5QTUgICBTVyBWMSwgMjAoVjApDQo3NTogICAgICAgICAgICAgICAgICAgICAgZ2V4Y19jYXAuY3AwX25lcGMgPSBfQ1AwX0dFVF9ORVNURURFUEMoKTsNCkJGRDAwNEMyICAwOEZDMDA2RSAgIE1GQzAgVjEsICQxNCwgMQ0KQkZEMDA0QzQgICAgICAwOEZDICAgTEJVIFMxLCAxMihBMykNCkJGRDAwNEM2ICBCRkQyNDFBMiAgIExVSSBWMCwgMHhCRkQyDQpCRkQwMDRDOCAgMzA0MkJGRDIgICBMREMxIEYzMCwgMTIzNTQoUzIpDQpCRkQwMDRDQSAgODEzNDMwNDIgICBBRERJVSBWMCwgVjAsIC0zMjQ2MA0KQkZEMDA0Q0UgICAgICBFOUE2ICAgU1cgVjEsIDI0KFYwKQ0KNzY6ICAgICAgICAgICAgICAgICAgICAgIGdleGNfY2FwLmNwMF9iYWR2YWRkciA9IF9DUDBfR0VUX0JBRFZBRERSKCk7DQpCRkQwMDREMCAgMDBGQzAwNjggICBNRkMwIFYxLCBCYWRWQWRkcg0KQkZEMDA0RDQgIEJGRDI0MUEyICAgTFVJIFYwLCAweEJGRDINCkJGRDAwNEQ2ICAzMDQyQkZEMiAgIExEQzEgRjMwLCAxMjM1NChTMikNCkJGRDAwNEQ4ICA4MTM0MzA0MiAgIEFERElVIFYwLCBWMCwgLTMyNDYwDQpCRkQwMDREQyAgICAgIEU5QTcgICBTVyBWMSwgMjgoVjApDQo3NzogICAgICAgICAgICAgICAgICANCjc4OiAgICAgICAgICAgICAgICAgICAgICB0cmFjZTAoMCwgQVAzR0VORVhDRVBULCAwLCAiQXBwbGljYXRpb24gR2VuZXJhbCBFeGNlcHRpb24gSGFuZGxlciAoQkVWPTApIik7DQo3OTogICAgICAgICAgICAgICAgICAgICAgVFJBQ0UxMSg2MDEsIEFQM0dFTkVYQ0VQVCwgMCwgIkN1cnJlbnQgU1AgICA9IDB4JTA4eCIsZ2V4Y19jYXAuc3RhY2tfcHRyKTsNCkJGRDAwNERFICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDRFMiAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNEU0ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA0RTYNCkJGRDAwNEU2ICBGRkZEMzA2MCAgIEFERElVIFYxLCBaRVJPLCAtMw0KQkZEMDA0RTggIDg5QTBGRkZEICAgTFcgUkEsIC0zMDMwNChTUCkNCkJGRDAwNEVBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA0RUMgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNEYwICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA0RjIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDRGNA0KQkZEMDA0RjQgICAgICBFREQ5ICAgTEkgVjEsIDg5DQpCRkQwMDRGNiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNEY4ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDRGQyAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNEZFICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA1MDANCkJGRDAwNTAwICAgICAgRUQ4MiAgIExJIFYxLCAyDQpCRkQwMDUwMiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNTA0ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDUwOCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNTBBICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA1MEMNCkJGRDAwNTBDICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDUwRSAgRkM2M0JGRDIgICBMREMxIEYzMCwgLTkyNShTMikNCkJGRDAwNTEwICA4MTM0RkM2MyAgIExXIFYxLCAtMzI0NjAoVjEpDQpCRkQwMDUxNCAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA1MTYgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDUxOCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA1MUMgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDUxRSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNTIwDQpCRkQwMDUyMCAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA1MjIgIEZDNjNCRkQyICAgTERDMSBGMzAsIC05MjUoUzIpDQpCRkQwMDUyNCAgODEzNEZDNjMgICBMVyBWMSwgLTMyNDYwKFYxKQ0KQkZEMDA1MjggICAgICAyNUIxICAgU1JMIFYxLCBWMSwgOA0KQkZEMDA1MkEgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwNTJDICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA1MkUgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNTMyICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA1MzQgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDUzNg0KQkZEMDA1MzYgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwNTM4ICBGQzYzQkZEMiAgIExEQzEgRjMwLCAtOTI1KFMyKQ0KQkZEMDA1M0EgIDgxMzRGQzYzICAgTFcgVjEsIC0zMjQ2MChWMSkNCkJGRDAwNTNFICA4MDQwMDA2MyAgIFNSTCBWMSwgVjEsIDE2DQpCRkQwMDU0MiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA1NDQgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDU0NiAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA1NEEgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDU0QyAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNTRFDQpCRkQwMDU0RSAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA1NTAgIEZDNjNCRkQyICAgTERDMSBGMzAsIC05MjUoUzIpDQpCRkQwMDU1MiAgODEzNEZDNjMgICBMVyBWMSwgLTMyNDYwKFYxKQ0KQkZEMDA1NTYgIEMwNDAwMDYzICAgU1JMIFYxLCBWMSwgMjQNCkJGRDAwNTVBICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDU1QyAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCjgwOiAgICAgICAgICAgICAgICAgICAgICBUUkFDRTExKDYwMiwgQVAzR0VORVhDRVBULCAwLCAiQ1AwIFNUQVRVUyAgID0gMHglMDh4IixnZXhjX2NhcC5jcDBfc3RhdHVzKTsNCkJGRDAwNTVFICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDU2MiAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNTY0ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA1NjYNCkJGRDAwNTY2ICBGRkZEMzA2MCAgIEFERElVIFYxLCBaRVJPLCAtMw0KQkZEMDA1NjggIDg5QTBGRkZEICAgTFcgUkEsIC0zMDMwNChTUCkNCkJGRDAwNTZBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA1NkMgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNTcwICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA1NzIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDU3NA0KQkZEMDA1NzQgICAgICBFRERBICAgTEkgVjEsIDkwDQpCRkQwMDU3NiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNTc4ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDU3QyAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNTdFICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA1ODANCkJGRDAwNTgwICAgICAgRUQ4MiAgIExJIFYxLCAyDQpCRkQwMDU4MiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNTg0ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDU4OCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNThBICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA1OEMNCkJGRDAwNThDICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDU4RSAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDU5MCAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA1OTQgICAgICA2OUIxICAgTFcgVjEsIDQoVjEpDQpCRkQwMDU5NiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA1OTggICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDU5QSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA1OUUgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDVBMCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNUEyDQpCRkQwMDVBMiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA1QTQgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQ0KQkZEMDA1QTYgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjANCkJGRDAwNUFBICAgICAgNjlCMSAgIExXIFYxLCA0KFYxKQ0KQkZEMDA1QUMgICAgICAyNUIxICAgU1JMIFYxLCBWMSwgOA0KQkZEMDA1QUUgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwNUIwICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA1QjIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNUI2ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA1QjggICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDVCQQ0KQkZEMDA1QkEgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwNUJDICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikNCkJGRDAwNUJFICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwDQpCRkQwMDVDMiAgICAgIDY5QjEgICBMVyBWMSwgNChWMSkNCkJGRDAwNUM0ICA4MDQwMDA2MyAgIFNSTCBWMSwgVjEsIDE2DQpCRkQwMDVDOCAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA1Q0EgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDVDQyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA1RDAgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDVEMiAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNUQ0DQpCRkQwMDVENCAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA1RDYgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQ0KQkZEMDA1RDggIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjANCkJGRDAwNURDICAgICAgNjlCMSAgIExXIFYxLCA0KFYxKQ0KQkZEMDA1REUgIEMwNDAwMDYzICAgU1JMIFYxLCBWMSwgMjQNCkJGRDAwNUUyICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDVFNCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCjgxOiAgICAgICAgICAgICAgICAgICAgICBUUkFDRTExKDYwMywgQVAzR0VORVhDRVBULCAwLCAiQ1AwIENBVVNFICAgID0gMHglMDh4IixnZXhjX2NhcC5jcDBfY2F1c2UpOw0KQkZEMDA1RTYgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNUVBICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA1RUMgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDVFRQ0KQkZEMDA1RUUgIEZGRkQzMDYwICAgQURESVUgVjEsIFpFUk8sIC0zDQpCRkQwMDVGMCAgODlBMEZGRkQgICBMVyBSQSwgLTMwMzA0KFNQKQ0KQkZEMDA1RjIgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDVGNCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA1RjggIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDVGQSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNUZDDQpCRkQwMDVGQyAgICAgIEVEREIgICBMSSBWMSwgOTENCkJGRDAwNUZFICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA2MDAgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNjA0ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA2MDYgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDYwOA0KQkZEMDA2MDggICAgICBFRDgyICAgTEkgVjEsIDINCkJGRDAwNjBBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA2MEMgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNjEwICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA2MTIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDYxNA0KQkZEMDA2MTQgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwNjE2ICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikNCkJGRDAwNjE4ICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwDQpCRkQwMDYxQyAgICAgIDY5QjIgICBMVyBWMSwgOChWMSkNCkJGRDAwNjFFICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDYyMCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNjIyICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDYyNiAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNjI4ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA2MkENCkJGRDAwNjJBICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDYyQyAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDYyRSAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA2MzIgICAgICA2OUIyICAgTFcgVjEsIDgoVjEpDQpCRkQwMDYzNCAgICAgIDI1QjEgICBTUkwgVjEsIFYxLCA4DQpCRkQwMDYzNiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA2MzggICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDYzQSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA2M0UgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDY0MCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNjQyDQpCRkQwMDY0MiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA2NDQgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQ0KQkZEMDA2NDYgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjANCkJGRDAwNjRBICAgICAgNjlCMiAgIExXIFYxLCA4KFYxKQ0KQkZEMDA2NEMgIDgwNDAwMDYzICAgU1JMIFYxLCBWMSwgMTYNCkJGRDAwNjUwICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDY1MiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNjU0ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDY1OCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNjVBICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA2NUMNCkJGRDAwNjVDICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDY1RSAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDY2MCAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA2NjQgICAgICA2OUIyICAgTFcgVjEsIDgoVjEpDQpCRkQwMDY2NiAgQzA0MDAwNjMgICBTUkwgVjEsIFYxLCAyNA0KQkZEMDA2NkEgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwNjZDICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KODI6ICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMTEoNjA0LCBBUDNHRU5FWENFUFQsIDAsICJDUDAgRVBDICAgICAgPSAweCUwOHgiLGdleGNfY2FwLmNwMF9lcGMpOw0KQkZEMDA2NkUgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNjcyICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA2NzQgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDY3Ng0KQkZEMDA2NzYgIEZGRkQzMDYwICAgQURESVUgVjEsIFpFUk8sIC0zDQpCRkQwMDY3OCAgODlBMEZGRkQgICBMVyBSQSwgLTMwMzA0KFNQKQ0KQkZEMDA2N0EgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDY3QyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA2ODAgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDY4MiAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNjg0DQpCRkQwMDY4NCAgICAgIEVEREMgICBMSSBWMSwgOTINCkJGRDAwNjg2ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA2ODggIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNjhDICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA2OEUgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDY5MA0KQkZEMDA2OTAgICAgICBFRDgyICAgTEkgVjEsIDINCkJGRDAwNjkyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA2OTQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNjk4ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA2OUEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDY5Qw0KQkZEMDA2OUMgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwNjlFICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikNCkJGRDAwNkEwICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwDQpCRkQwMDZBNCAgICAgIDY5QjMgICBMVyBWMSwgMTIoVjEpDQpCRkQwMDZBNiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA2QTggICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDZBQSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA2QUUgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDZCMCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNkIyDQpCRkQwMDZCMiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA2QjQgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQ0KQkZEMDA2QjYgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjANCkJGRDAwNkJBICAgICAgNjlCMyAgIExXIFYxLCAxMihWMSkNCkJGRDAwNkJDICAgICAgMjVCMSAgIFNSTCBWMSwgVjEsIDgNCkJGRDAwNkJFICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDZDMCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNkMyICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDZDNiAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNkM4ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA2Q0ENCkJGRDAwNkNBICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDZDQyAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDZDRSAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA2RDIgICAgICA2OUIzICAgTFcgVjEsIDEyKFYxKQ0KQkZEMDA2RDQgIDgwNDAwMDYzICAgU1JMIFYxLCBWMSwgMTYNCkJGRDAwNkQ4ICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDZEQSAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNkRDICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDZFMCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNkUyICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA2RTQNCkJGRDAwNkU0ICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDZFNiAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDZFOCAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA2RUMgICAgICA2OUIzICAgTFcgVjEsIDEyKFYxKQ0KQkZEMDA2RUUgIEMwNDAwMDYzICAgU1JMIFYxLCBWMSwgMjQNCkJGRDAwNkYyICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDZGNCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCjgzOiAgICAgICAgICAgICAgICAgICAgICBUUkFDRTExKDYwNSwgQVAzR0VORVhDRVBULCAwLCAiQ1AwIEVSUk9SRVBDID0gMHglMDh4IixnZXhjX2NhcC5jcDBfZXJyb3JfZXBjKTsNCkJGRDAwNkY2ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDZGQSAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNkZDICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA2RkUNCkJGRDAwNkZFICBGRkZEMzA2MCAgIEFERElVIFYxLCBaRVJPLCAtMw0KQkZEMDA3MDAgIDg5QTBGRkZEICAgTFcgUkEsIC0zMDMwNChTUCkNCkJGRDAwNzAyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA3MDQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNzA4ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA3MEEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDcwQw0KQkZEMDA3MEMgICAgICBFREREICAgTEkgVjEsIDkzDQpCRkQwMDcwRSAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNzEwICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDcxNCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNzE2ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA3MTgNCkJGRDAwNzE4ICAgICAgRUQ4MiAgIExJIFYxLCAyDQpCRkQwMDcxQSAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwNzFDICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDcyMCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwNzIyICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA3MjQNCkJGRDAwNzI0ICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDcyNiAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDcyOCAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA3MkMgICAgICA2OUI0ICAgTFcgVjEsIDE2KFYxKQ0KQkZEMDA3MkUgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwNzMwICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA3MzIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNzM2ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA3MzggICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDczQQ0KQkZEMDA3M0EgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwNzNDICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikNCkJGRDAwNzNFICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwDQpCRkQwMDc0MiAgICAgIDY5QjQgICBMVyBWMSwgMTYoVjEpDQpCRkQwMDc0NCAgICAgIDI1QjEgICBTUkwgVjEsIFYxLCA4DQpCRkQwMDc0NiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA3NDggICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDc0QSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA3NEUgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDc1MCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNzUyDQpCRkQwMDc1MiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA3NTQgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQ0KQkZEMDA3NTYgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjANCkJGRDAwNzVBICAgICAgNjlCNCAgIExXIFYxLCAxNihWMSkNCkJGRDAwNzVDICA4MDQwMDA2MyAgIFNSTCBWMSwgVjEsIDE2DQpCRkQwMDc2MCAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA3NjIgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDc2NCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA3NjggIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDc2QSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNzZDDQpCRkQwMDc2QyAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA3NkUgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQ0KQkZEMDA3NzAgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjANCkJGRDAwNzc0ICAgICAgNjlCNCAgIExXIFYxLCAxNihWMSkNCkJGRDAwNzc2ICBDMDQwMDA2MyAgIFNSTCBWMSwgVjEsIDI0DQpCRkQwMDc3QSAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA3N0MgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQo4NDogICAgICAgICAgICAgICAgICAgICAgVFJBQ0UxMSg2MDYsIEFQM0dFTkVYQ0VQVCwgMCwgIkNQMCBORVhDICAgICA9IDB4JTA4eCIsZ2V4Y19jYXAuY3AwX25leGMpOw0KQkZEMDA3N0UgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNzgyICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA3ODQgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDc4Ng0KQkZEMDA3ODYgIEZGRkQzMDYwICAgQURESVUgVjEsIFpFUk8sIC0zDQpCRkQwMDc4OCAgODlBMEZGRkQgICBMVyBSQSwgLTMwMzA0KFNQKQ0KQkZEMDA3OEEgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDc4QyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA3OTAgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDc5MiAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwNzk0DQpCRkQwMDc5NCAgICAgIEVEREUgICBMSSBWMSwgOTQNCkJGRDAwNzk2ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA3OTggIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwNzlDICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA3OUUgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDdBMA0KQkZEMDA3QTAgICAgICBFRDgyICAgTEkgVjEsIDINCkJGRDAwN0EyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA3QTQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwN0E4ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA3QUEgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDdBQw0KQkZEMDA3QUMgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwN0FFICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikNCkJGRDAwN0IwICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwDQpCRkQwMDdCNCAgICAgIDY5QjUgICBMVyBWMSwgMjAoVjEpDQpCRkQwMDdCNiAgICAgIDJEQkQgICBBTkRJIFYxLCBWMSwgMHhGRg0KQkZEMDA3QjggICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDdCQSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA3QkUgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDdDMCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwN0MyDQpCRkQwMDdDMiAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA3QzQgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQ0KQkZEMDA3QzYgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjANCkJGRDAwN0NBICAgICAgNjlCNSAgIExXIFYxLCAyMChWMSkNCkJGRDAwN0NDICAgICAgMjVCMSAgIFNSTCBWMSwgVjEsIDgNCkJGRDAwN0NFICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDdEMCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwN0QyICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDdENiAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwN0Q4ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA3REENCkJGRDAwN0RBICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDdEQyAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDdERSAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA3RTIgICAgICA2OUI1ICAgTFcgVjEsIDIwKFYxKQ0KQkZEMDA3RTQgIDgwNDAwMDYzICAgU1JMIFYxLCBWMSwgMTYNCkJGRDAwN0U4ICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDdFQSAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwN0VDICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDdGMCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwN0YyICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA3RjQNCkJGRDAwN0Y0ICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDdGNiAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDdGOCAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA3RkMgICAgICA2OUI1ICAgTFcgVjEsIDIwKFYxKQ0KQkZEMDA3RkUgIEMwNDAwMDYzICAgU1JMIFYxLCBWMSwgMjQNCkJGRDAwODAyICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDgwNCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCjg1OiAgICAgICAgICAgICAgICAgICAgICBUUkFDRTExKDYwNywgQVAzR0VORVhDRVBULCAwLCAiQ1AwIE5FUEMgICAgID0gMHglMDh4IixnZXhjX2NhcC5jcDBfbmVwYyk7DQpCRkQwMDgwNiAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA4MEEgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDgwQyAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwODBFDQpCRkQwMDgwRSAgRkZGRDMwNjAgICBBRERJVSBWMSwgWkVSTywgLTMNCkJGRDAwODEwICA4OUEwRkZGRCAgIExXIFJBLCAtMzAzMDQoU1ApDQpCRkQwMDgxMiAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwODE0ICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDgxOCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwODFBICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4MUMNCkJGRDAwODFDICAgICAgRURERiAgIExJIFYxLCA5NQ0KQkZEMDA4MUUgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDgyMCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA4MjQgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDgyNiAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwODI4DQpCRkQwMDgyOCAgICAgIEVEODIgICBMSSBWMSwgMg0KQkZEMDA4MkEgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDgyQyAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA4MzAgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDgzMiAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwODM0DQpCRkQwMDgzNCAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA4MzYgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQ0KQkZEMDA4MzggIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjANCkJGRDAwODNDICAgICAgNjlCNiAgIExXIFYxLCAyNChWMSkNCkJGRDAwODNFICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDg0MCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwODQyICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDg0NiAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwODQ4ICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4NEENCkJGRDAwODRBICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDg0QyAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDg0RSAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA4NTIgICAgICA2OUI2ICAgTFcgVjEsIDI0KFYxKQ0KQkZEMDA4NTQgICAgICAyNUIxICAgU1JMIFYxLCBWMSwgOA0KQkZEMDA4NTYgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwODU4ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA4NUEgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwODVFICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA4NjAgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDg2Mg0KQkZEMDA4NjIgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwODY0ICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikNCkJGRDAwODY2ICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwDQpCRkQwMDg2QSAgICAgIDY5QjYgICBMVyBWMSwgMjQoVjEpDQpCRkQwMDg2QyAgODA0MDAwNjMgICBTUkwgVjEsIFYxLCAxNg0KQkZEMDA4NzAgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwODcyICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA4NzQgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwODc4ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA4N0EgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDg3Qw0KQkZEMDA4N0MgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwODdFICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikNCkJGRDAwODgwICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwDQpCRkQwMDg4NCAgICAgIDY5QjYgICBMVyBWMSwgMjQoVjEpDQpCRkQwMDg4NiAgQzA0MDAwNjMgICBTUkwgVjEsIFYxLCAyNA0KQkZEMDA4OEEgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwODhDICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KODY6ICAgICAgICAgICAgICAgICAgICAgIFRSQUNFMTEoNjA4LCBBUDNHRU5FWENFUFQsIDAsICJDUDAgQkFEVkFERFIgPSAweCUwOHgiLGdleGNfY2FwLmNwMF9iYWR2YWRkcik7DQpCRkQwMDg4RSAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA4OTIgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDg5NCAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwODk2DQpCRkQwMDg5NiAgRkZGRDMwNjAgICBBRERJVSBWMSwgWkVSTywgLTMNCkJGRDAwODk4ICA4OUEwRkZGRCAgIExXIFJBLCAtMzAzMDQoU1ApDQpCRkQwMDg5QSAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwODlDICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDhBMCAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwOEEyICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4QTQNCkJGRDAwOEE0ICAgICAgRURFMCAgIExJIFYxLCA5Ng0KQkZEMDA4QTYgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDhBOCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA4QUMgIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDhBRSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwOEIwDQpCRkQwMDhCMCAgICAgIEVEODIgICBMSSBWMSwgMg0KQkZEMDA4QjIgICAgICA4OUEwICAgU0IgVjEsIDAoVjApDQpCRkQwMDhCNCAgQTAwMDQxQTIgICBMVUkgVjAsIDB4QTAwMA0KQkZEMDA4QjggIDhDMDA1MDQyICAgT1JJIFYwLCBWMCwgLTI5Njk2DQpCRkQwMDhCQSAgICAgIDhDMDAgICBCRVFaIFMwLCAweEJGRDAwOEJDDQpCRkQwMDhCQyAgQkZEMjQxQTMgICBMVUkgVjEsIDB4QkZEMg0KQkZEMDA4QkUgIDMwNjNCRkQyICAgTERDMSBGMzAsIDEyMzg3KFMyKQ0KQkZEMDA4QzAgIDgxMzQzMDYzICAgQURESVUgVjEsIFYxLCAtMzI0NjANCkJGRDAwOEM0ICAgICAgNjlCNyAgIExXIFYxLCAyOChWMSkNCkJGRDAwOEM2ICAgICAgMkRCRCAgIEFOREkgVjEsIFYxLCAweEZGDQpCRkQwMDhDOCAgICAgIDg5QTAgICBTQiBWMSwgMChWMCkNCkJGRDAwOENBICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwMDhDRSAgOEMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjk2OTYNCkJGRDAwOEQwICAgICAgOEMwMCAgIEJFUVogUzAsIDB4QkZEMDA4RDINCkJGRDAwOEQyICBCRkQyNDFBMyAgIExVSSBWMSwgMHhCRkQyDQpCRkQwMDhENCAgMzA2M0JGRDIgICBMREMxIEYzMCwgMTIzODcoUzIpDQpCRkQwMDhENiAgODEzNDMwNjMgICBBRERJVSBWMSwgVjEsIC0zMjQ2MA0KQkZEMDA4REEgICAgICA2OUI3ICAgTFcgVjEsIDI4KFYxKQ0KQkZEMDA4REMgICAgICAyNUIxICAgU1JMIFYxLCBWMSwgOA0KQkZEMDA4REUgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwOEUwICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA4RTIgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwOEU2ICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA4RTggICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDhFQQ0KQkZEMDA4RUEgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwOEVDICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikNCkJGRDAwOEVFICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwDQpCRkQwMDhGMiAgICAgIDY5QjcgICBMVyBWMSwgMjgoVjEpDQpCRkQwMDhGNCAgODA0MDAwNjMgICBTUkwgVjEsIFYxLCAxNg0KQkZEMDA4RjggICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwOEZBICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KQkZEMDA4RkMgIEEwMDA0MUEyICAgTFVJIFYwLCAweEEwMDANCkJGRDAwOTAwICA4QzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0yOTY5Ng0KQkZEMDA5MDIgICAgICA4QzAwICAgQkVRWiBTMCwgMHhCRkQwMDkwNA0KQkZEMDA5MDQgIEJGRDI0MUEzICAgTFVJIFYxLCAweEJGRDINCkJGRDAwOTA2ICAzMDYzQkZEMiAgIExEQzEgRjMwLCAxMjM4NyhTMikNCkJGRDAwOTA4ICA4MTM0MzA2MyAgIEFERElVIFYxLCBWMSwgLTMyNDYwDQpCRkQwMDkwQyAgICAgIDY5QjcgICBMVyBWMSwgMjgoVjEpDQpCRkQwMDkwRSAgQzA0MDAwNjMgICBTUkwgVjEsIFYxLCAyNA0KQkZEMDA5MTIgICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDAwOTE0ICAgICAgODlBMCAgIFNCIFYxLCAwKFYwKQ0KODc6ICAgICAgICAgICAgICAgICAgDQo4ODogICAgICAgICAgICAgICAgICAgICAgZm9yICg7Oykgew0KODk6ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGUgKCIlKHNzbm9wJSkiIDogOik7DQpCRkQwMDkxNiAgMDgwMDAwMDAgICBTU05PUA0KQkZEMDA5MTggICAgICAwODAwICAgTEJVIFMwLCAwKFMwKQ0KOTA6ICAgICAgICAgICAgICAgICAgICAgIH0gDQpCRkQwMDkxQSAgICAgIENGRkQgICBCIDB4QkZEMDA5MTYNCkJGRDAwOTFDICAgICAgMEMwMCAgIE5PUA0KOTE6ICAgICAgICAgICAgICAgICAgfQ0KOTI6ICAgICAgICAgICAgICAgICAgDQo5MzogICAgICAgICAgICAgICAgICANCjk0OiAgICAgICAgICAgICAgICAgIC8qIGVuZCBnZW5lcmFsX2V4Y2VwdGlvbi5jICovDQo5NTogICAgICAgICAgICAgICAgICAvKiogICBAfQ0KOTY6ICAgICAgICAgICAgICAgICAgICovDQo5NzogICAgICAgICAgICAgICAgICANCi0tLSAgYzovZS9kZXYvZnJlZXJ0b3Mvd29ya2luZ2NvcHkvZnJlZXJ0b3MvZGVtby9waWMzMm1lYzE0eHhfbXBsYWIvc3JjL21haW4uYyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMTogICAgICAgICAgICAgICAgICAgI3dhcm5pbmcgY29uZmlnVElNRVJTX0RJU0FHR1JFR0FURURfSVNSUyBhbmQgY29uZmlnQ1BVX0RJU0FHR1JFR0FURURfSVNSUyBuZWVkIGRvY3VtZW50aW5nLg0KMjogICAgICAgICAgICAgICAgICAgDQozOiAgICAgICAgICAgICAgICAgICAvKg0KNDogICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIFY4LjIuMSAtIENvcHlyaWdodCAoQykgMjAxNSBSZWFsIFRpbWUgRW5naW5lZXJzIEx0ZC4NCjU6ICAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkDQo2OiAgICAgICAgICAgICAgICAgICANCjc6ICAgICAgICAgICAgICAgICAgICAgICBWSVNJVCBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZyBUTyBFTlNVUkUgWU9VIEFSRSBVU0lORyBUSEUgTEFURVNUIFZFUlNJT04uDQo4OiAgICAgICAgICAgICAgICAgICANCjk6ICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVJUT1MgZGlzdHJpYnV0aW9uLg0KMTA6ICAgICAgICAgICAgICAgICAgDQoxMTogICAgICAgICAgICAgICAgICAgICAgRnJlZVJUT1MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KMTI6ICAgICAgICAgICAgICAgICAgICAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHZlcnNpb24gMikgYXMgcHVibGlzaGVkIGJ5IHRoZQ0KMTM6ICAgICAgICAgICAgICAgICAgICAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiA+Pj4+IEFORCBNT0RJRklFRCBCWSA8PDw8IHRoZSBGcmVlUlRPUyBleGNlcHRpb24uDQoxNDogICAgICAgICAgICAgICAgICANCjE1OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjE2OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBOT1RFOiBUaGUgbW9kaWZpY2F0aW9uIHRvIHRoZSBHUEwgaXMgaW5jbHVkZWQgdG8gYWxsb3cgeW91IHRvICAgICAhPDwNCjE3OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBkaXN0cmlidXRlIGEgY29tYmluZWQgd29yayB0aGF0IGluY2x1ZGVzIEZyZWVSVE9TIHdpdGhvdXQgYmVpbmcgICAhPDwNCjE4OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvYmxpZ2VkIHRvIHByb3ZpZGUgdGhlIHNvdXJjZSBjb2RlIGZvciBwcm9wcmlldGFyeSBjb21wb25lbnRzICAgICAhPDwNCjE5OiAgICAgICAgICAgICAgICAgICAgICA+PiEgICBvdXRzaWRlIG9mIHRoZSBGcmVlUlRPUyBrZXJuZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPDwNCjIwOiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjIxOiAgICAgICAgICAgICAgICAgIA0KMjI6ICAgICAgICAgICAgICAgICAgICAgIEZyZWVSVE9TIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQ0KMjM6ICAgICAgICAgICAgICAgICAgICAgIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MNCjI0OiAgICAgICAgICAgICAgICAgICAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBGdWxsIGxpY2Vuc2UgdGV4dCBpcyBhdmFpbGFibGUgb24gdGhlIGZvbGxvd2luZw0KMjU6ICAgICAgICAgICAgICAgICAgICAgIGxpbms6IGh0dHA6Ly93d3cuZnJlZXJ0b3Mub3JnL2EwMDExNC5odG1sDQoyNjogICAgICAgICAgICAgICAgICANCjI3OiAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCjI4OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMjk6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIEZyZWVSVE9TIHByb3ZpZGVzIGNvbXBsZXRlbHkgZnJlZSB5ZXQgcHJvZmVzc2lvbmFsbHkgZGV2ZWxvcGVkLCAgICAqDQozMDogICAgICAgICAgICAgICAgICAgICAgICogICAgcm9idXN0LCBzdHJpY3RseSBxdWFsaXR5IGNvbnRyb2xsZWQsIHN1cHBvcnRlZCwgYW5kIGNyb3NzICAgICAgICAgICoNCjMxOiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBwbGF0Zm9ybSBzb2Z0d2FyZSB0aGF0IGlzIG1vcmUgdGhhbiBqdXN0IHRoZSBtYXJrZXQgbGVhZGVyLCBpdCAgICAgKg0KMzI6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIGlzIHRoZSBpbmR1c3RyeSdzIGRlIGZhY3RvIHN0YW5kYXJkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozMzogICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM0OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBIZWxwIHlvdXJzZWxmIGdldCBzdGFydGVkIHF1aWNrbHkgd2hpbGUgc2ltdWx0YW5lb3VzbHkgaGVscGluZyAgICAgKg0KMzU6ICAgICAgICAgICAgICAgICAgICAgICAqICAgIHRvIHN1cHBvcnQgdGhlIEZyZWVSVE9TIHByb2plY3QgYnkgcHVyY2hhc2luZyBhIEZyZWVSVE9TICAgICAgICAgICAqDQozNjogICAgICAgICAgICAgICAgICAgICAgICogICAgdHV0b3JpYWwgYm9vaywgcmVmZXJlbmNlIG1hbnVhbCwgb3IgYm90aDogICAgICAgICAgICAgICAgICAgICAgICAgICoNCjM3OiAgICAgICAgICAgICAgICAgICAgICAgKiAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9Eb2N1bWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KMzg6ICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQozOTogICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo0MDogICAgICAgICAgICAgICAgICANCjQxOiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9GQVFIZWxwLmh0bWwgLSBIYXZpbmcgYSBwcm9ibGVtPyAgU3RhcnQgYnkgcmVhZGluZw0KNDI6ICAgICAgICAgICAgICAgICAgICAgIHRoZSBGQVEgcGFnZSAiTXkgYXBwbGljYXRpb24gZG9lcyBub3QgcnVuLCB3aGF0IGNvdWxkIGJlIHdyb25nPyIuICBIYXZlIHlvdQ0KNDM6ICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgY29uZmlnQVNTRVJUKCk/DQo0NDogICAgICAgICAgICAgICAgICANCjQ1OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9zdXBwb3J0IC0gSW4gcmV0dXJuIGZvciByZWNlaXZpbmcgdGhpcyB0b3AgcXVhbGl0eQ0KNDY6ICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkIHNvZnR3YXJlIGZvciBmcmVlIHdlIHJlcXVlc3QgeW91IGFzc2lzdCBvdXIgZ2xvYmFsIGNvbW11bml0eSBieQ0KNDc6ICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHN1cHBvcnQgZm9ydW0uDQo0ODogICAgICAgICAgICAgICAgICANCjQ5OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy90cmFpbmluZyAtIEludmVzdGluZyBpbiB0cmFpbmluZyBhbGxvd3MgeW91ciB0ZWFtIHRvDQo1MDogICAgICAgICAgICAgICAgICAgICAgYmUgYXMgcHJvZHVjdGl2ZSBhcyBwb3NzaWJsZSBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIE5vdyB5b3UgY2FuIHJlY2VpdmUNCjUxOiAgICAgICAgICAgICAgICAgICAgICBGcmVlUlRPUyB0cmFpbmluZyBkaXJlY3RseSBmcm9tIFJpY2hhcmQgQmFycnksIENFTyBvZiBSZWFsIFRpbWUgRW5naW5lZXJzDQo1MjogICAgICAgICAgICAgICAgICAgICAgTHRkLCBhbmQgdGhlIHdvcmxkJ3MgbGVhZGluZyBhdXRob3JpdHkgb24gdGhlIHdvcmxkJ3MgbGVhZGluZyBSVE9TLg0KNTM6ICAgICAgICAgICAgICAgICAgDQo1NDogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvcGx1cyAtIEEgc2VsZWN0aW9uIG9mIEZyZWVSVE9TIGVjb3N5c3RlbSBwcm9kdWN0cywNCjU1OiAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgRnJlZVJUT1MrVHJhY2UgLSBhbiBpbmRpc3BlbnNhYmxlIHByb2R1Y3Rpdml0eSB0b29sLCBhIERPUw0KNTY6ICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgRkFUIGZpbGUgc3lzdGVtLCBhbmQgb3VyIHRpbnkgdGhyZWFkIGF3YXJlIFVEUC9JUCBzdGFjay4NCjU3OiAgICAgICAgICAgICAgICAgIA0KNTg6ICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL2xhYnMgLSBXaGVyZSBuZXcgRnJlZVJUT1MgcHJvZHVjdHMgZ28gdG8gaW5jdWJhdGUuDQo1OTogICAgICAgICAgICAgICAgICAgICAgQ29tZSBhbmQgdHJ5IEZyZWVSVE9TK1RDUCwgb3VyIG5ldyBvcGVuIHNvdXJjZSBUQ1AvSVAgc3RhY2sgZm9yIEZyZWVSVE9TLg0KNjA6ICAgICAgICAgICAgICAgICAgDQo2MTogICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5PcGVuUlRPUy5jb20gLSBSZWFsIFRpbWUgRW5naW5lZXJzIGx0ZC4gbGljZW5zZSBGcmVlUlRPUyB0byBIaWdoDQo2MjogICAgICAgICAgICAgICAgICAgICAgSW50ZWdyaXR5IFN5c3RlbXMgbHRkLiB0byBzZWxsIHVuZGVyIHRoZSBPcGVuUlRPUyBicmFuZC4gIExvdyBjb3N0IE9wZW5SVE9TDQo2MzogICAgICAgICAgICAgICAgICAgICAgbGljZW5zZXMgb2ZmZXIgdGlja2V0ZWQgc3VwcG9ydCwgaW5kZW1uaWZpY2F0aW9uIGFuZCBjb21tZXJjaWFsIG1pZGRsZXdhcmUuDQo2NDogICAgICAgICAgICAgICAgICANCjY1OiAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LlNhZmVSVE9TLmNvbSAtIEhpZ2ggSW50ZWdyaXR5IFN5c3RlbXMgYWxzbyBwcm92aWRlIGEgc2FmZXR5DQo2NjogICAgICAgICAgICAgICAgICAgICAgZW5naW5lZXJlZCBhbmQgaW5kZXBlbmRlbnRseSBTSUwzIGNlcnRpZmllZCB2ZXJzaW9uIGZvciB1c2UgaW4gc2FmZXR5IGFuZA0KNjc6ICAgICAgICAgICAgICAgICAgICAgIG1pc3Npb24gY3JpdGljYWwgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBwcm92YWJsZSBkZXBlbmRhYmlsaXR5Lg0KNjg6ICAgICAgICAgICAgICAgICAgDQo2OTogICAgICAgICAgICAgICAgICAgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQo3MDogICAgICAgICAgICAgICAgICAqLw0KNzE6ICAgICAgICAgICAgICAgICAgDQo3MjogICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo3MzogICAgICAgICAgICAgICAgICAgKiBUaGlzIHByb2plY3Qgb25seSBwcm92aWRlcyBhIHNpbXBsZSBibGlua3kgZGVtb25zdHJhdGlvbi4NCjc0OiAgICAgICAgICAgICAgICAgICAqDQo3NTogICAgICAgICAgICAgICAgICAgKiBtYWluKCkgY3JlYXRlcyBvbmUgcXVldWUsIHR3byB0YXNrcywgYW5kIG9uZSBzb2Z0d2FyZSB0aW1lci4gIEl0IHRoZW4gc3RhcnRzDQo3NjogICAgICAgICAgICAgICAgICAgKiB0aGUgc2NoZWR1bGVyLg0KNzc6ICAgICAgICAgICAgICAgICAgICoNCjc4OiAgICAgICAgICAgICAgICAgICAqIFRoZSBCbGlua3kgU29mdHdhcmUgVGltZXI6DQo3OTogICAgICAgICAgICAgICAgICAgKiBUaGlzIGRlbW9uc3RyYXRlcyBhbiBhdXRvLXJlbG9hZCBzb2Z0d2FyZSB0aW1lci4gIFRoZSB0aW1lciBjYWxsYmFjayBmdW5jdGlvbg0KODA6ICAgICAgICAgICAgICAgICAgICogZG9lcyBub3RoaW5nIGJ1dCB0b2dnbGUgYW4gTEVELg0KODE6ICAgICAgICAgICAgICAgICAgICoNCjgyOiAgICAgICAgICAgICAgICAgICAqIFRoZSBRdWV1ZSBTZW5kIFRhc2s6DQo4MzogICAgICAgICAgICAgICAgICAgKiBUaGUgcXVldWUgc2VuZCB0YXNrIGlzIGltcGxlbWVudGVkIGJ5IHBydlF1ZXVlU2VuZFRhc2soKS4gIEl0IHNlbmRzIHRoZSB2YWx1ZQ0KODQ6ICAgICAgICAgICAgICAgICAgICogMTAwIHRvIHRoZSBxdWV1ZSBldmVyeSAyMDAgbWlsbGlzZWNvbmRzLg0KODU6ICAgICAgICAgICAgICAgICAgICoNCjg2OiAgICAgICAgICAgICAgICAgICAqIFRoZSBRdWV1ZSBSZWNlaXZlIFRhc2s6DQo4NzogICAgICAgICAgICAgICAgICAgKiBUaGUgcXVldWUgcmVjZWl2ZSB0YXNrIGlzIGltcGxlbWVudGVkIGJ5IHBydlF1ZXVlUmVjZWl2ZVRhc2soKS4NCjg4OiAgICAgICAgICAgICAgICAgICAqIHBydlF1ZXVlUmVjZWl2ZVRhc2soKSByZXBlYXRlZGx5IGJsb2NrcyBvbiBhdHRlbXB0cyB0byByZWFkIGZyb20gdGhlIHF1ZXVlLA0KODk6ICAgICAgICAgICAgICAgICAgICogdG9nZ2xpbmcgYW4gTEVEIGVhY2ggdGltZSBkYXRhIGlzIHJlY2VpdmVkLiAgVGhlIHF1ZXVlIHNlbmQgdGFzayBzZW5kcyBkYXRhDQo5MDogICAgICAgICAgICAgICAgICAgKiB0byB0aGUgcXVldWUgZXZlcnkgMjAwIG1pbGxpc2Vjb25kcywgc28gdGhlIExFRCB3aWxsIHRvZ2dsZSBldmVyeSAyMDANCjkxOiAgICAgICAgICAgICAgICAgICAqIG1pbGxpc2Vjb25kcy4NCjkyOiAgICAgICAgICAgICAgICAgICAqLw0KOTM6ICAgICAgICAgICAgICAgICAgDQo5NDogICAgICAgICAgICAgICAgICAvKiBLZXJuZWwgaW5jbHVkZXMuICovDQo5NTogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAiRnJlZVJUT1MuaCINCjk2OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJ0YXNrLmgiDQo5NzogICAgICAgICAgICAgICAgICAjaW5jbHVkZSAicXVldWUuaCINCjk4OiAgICAgICAgICAgICAgICAgICNpbmNsdWRlICJ0aW1lcnMuaCINCjk5OiAgICAgICAgICAgICAgICAgIA0KMTAwOiAgICAgICAgICAgICAgICAgLyogVGFyZ2V0IGluY2x1ZGVzLiAqLw0KMTAxOiAgICAgICAgICAgICAgICAgI2luY2x1ZGUgImFwcGNmZy5oIg0KMTAyOiAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eC5oIg0KMTAzOiAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9qdHZpYy5oIg0KMTA0OiAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9iYmxlZC5oIg0KMTA1OiAgICAgICAgICAgICAgICAgI2luY2x1ZGUgIk1FQzE0eHgvbWVjMTR4eF9naXJxcy5oIg0KMTA2OiAgICAgICAgICAgICAgICAgDQoxMDc6ICAgICAgICAgICAgICAgICAvKiBQcmlvcml0aWVzIGF0IHdoaWNoIHRoZSB0YXNrcyBhcmUgY3JlYXRlZC4gKi8NCjEwODogICAgICAgICAgICAgICAgICNkZWZpbmUgbWFpblFVRVVFX1NFTkRfVEFTS19QUklPUklUWQkoIHRza0lETEVfUFJJT1JJVFkgKyAxICkNCjEwOTogICAgICAgICAgICAgICAgICNkZWZpbmUgbWFpblFVRVVFX1JFQ0VJVkVfVEFTS19QUklPUklUWQkoIHRza0lETEVfUFJJT1JJVFkgKyAyICkNCjExMDogICAgICAgICAgICAgICAgIA0KMTExOiAgICAgICAgICAgICAgICAgLyogVGhlIHJhdGUgYXQgd2hpY2ggZGF0YSBpcyBzZW50IHRvIHRoZSBxdWV1ZS4gIFRoZSAyMDBtcyB2YWx1ZSBpcyBjb252ZXJ0ZWQNCjExMjogICAgICAgICAgICAgICAgIHRvIHRpY2tzIHVzaW5nIHRoZSBwZE1TX1RPX1RJQ0tTKCkgbWFjcm8uICovDQoxMTM6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5RVUVVRV9TRU5EX0ZSRVFVRU5DWV9NUwkJKCBwZE1TX1RPX1RJQ0tTKCAyMDBVTCApICkNCjExNDogICAgICAgICAgICAgICAgIA0KMTE1OiAgICAgICAgICAgICAgICAgLyogVGhlIG51bWJlciBvZiBpdGVtcyB0aGUgcXVldWUgY2FuIGhvbGQuICBUaGlzIGlzIDEgYXMgdGhlIHJlY2VpdmUgdGFzaw0KMTE2OiAgICAgICAgICAgICAgICAgd2lsbCByZW1vdmUgaXRlbXMgYXMgdGhleSBhcmUgYWRkZWQsIG1lYW5pbmcgdGhlIHNlbmQgdGFzayBzaG91bGQgYWx3YXlzIGZpbmQNCjExNzogICAgICAgICAgICAgICAgIHRoZSBxdWV1ZSBlbXB0eS4gKi8NCjExODogICAgICAgICAgICAgICAgICNkZWZpbmUgbWFpblFVRVVFX0xFTkdUSAkJCQkoIDEgKQ0KMTE5OiAgICAgICAgICAgICAgICAgDQoxMjA6ICAgICAgICAgICAgICAgICAvKiBWYWx1ZXMgcGFzc2VkIHRvIHRoZSB0d28gdGFza3MganVzdCB0byBjaGVjayB0aGUgdGFzayBwYXJhbWV0ZXINCjEyMTogICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHkuICovDQoxMjI6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5RVUVVRV9TRU5EX1BBUkFNRVRFUgkJKCAweDExMTFVTCApDQoxMjM6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5RVUVVRV9SRUNFSVZFX1BBUkFNRVRFUgkJKCAweDIyVUwgKQ0KMTI0OiAgICAgICAgICAgICAgICAgDQoxMjU6ICAgICAgICAgICAgICAgICAvKiBUaGUgcGVyaW9kIG9mIHRoZSBzb2Z0d2FyZSB0aW1lci4gIFRoZSBwZXJpb2QgaXMgc3BlY2lmaWVkIGluIG1zIGFuZA0KMTI2OiAgICAgICAgICAgICAgICAgY29udmVydGVkIHRvIHRpY2tzIHVzaW5nIHRoZSBwZE1TX1RPX1RJQ0tTKCkgbWFjcm8uICovDQoxMjc6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5CTElOS1lfVElNRVJfUEVSSU9ECQkJKCBwZE1TX1RPX1RJQ0tTKCA1MFVMICkgKQ0KMTI4OiAgICAgICAgICAgICAgICAgDQoxMjk6ICAgICAgICAgICAgICAgICAvKiBUaGUgTEVEIHVzZWQgYnkgdGhlIGNvbW11bmljYXRpbmcgdGFza3MgYW5kIHRoZSB0aW1lciByZXNwZWN0aXZlbHkuICovDQoxMzA6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5UQVNLU19MRUQJCQkJCSggTEVEMF9JRCApDQoxMzE6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5USU1FUl9MRUQJCQkJCSggTEVEMV9JRCApDQoxMzI6ICAgICAgICAgICAgICAgICANCjEzMzogICAgICAgICAgICAgICAgIC8qIE1pc2MuICovDQoxMzQ6ICAgICAgICAgICAgICAgICAjZGVmaW5lIG1haW5ET05UX0JMT0NLCQkJCQkoIDAgKQ0KMTM1OiAgICAgICAgICAgICAgICAgDQoxMzY6ICAgICAgICAgICAgICAgICANCjEzNzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KMTM4OiAgICAgICAgICAgICAgICAgDQoxMzk6ICAgICAgICAgICAgICAgICAvKg0KMTQwOiAgICAgICAgICAgICAgICAgICogVGhlIHRhc2tzIGFzIGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuDQoxNDE6ICAgICAgICAgICAgICAgICAgKi8NCjE0MjogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydlF1ZXVlUmVjZWl2ZVRhc2soIHZvaWQgKnB2UGFyYW1ldGVycyApOw0KMTQzOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UXVldWVTZW5kVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICk7DQoxNDQ6ICAgICAgICAgICAgICAgICANCjE0NTogICAgICAgICAgICAgICAgIC8qDQoxNDY6ICAgICAgICAgICAgICAgICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBzb2Z0d2FyZSB0aW1lciwgYXMgZGVzY3JpYmVkIGF0IHRoZSB0b3Agb2YgdGhpcw0KMTQ3OiAgICAgICAgICAgICAgICAgICogZmlsZS4NCjE0ODogICAgICAgICAgICAgICAgICAqLw0KMTQ5OiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2Qmxpbmt5VGltZXJDYWxsYmFjayggVGltZXJIYW5kbGVfdCB4VGltZXIgKTsNCjE1MDogICAgICAgICAgICAgICAgIA0KMTUxOiAgICAgICAgICAgICAgICAgLyoNCjE1MjogICAgICAgICAgICAgICAgICAqIFBlcmZvcm1zIGFueSBoYXJkd2FyZSBzZXR1cCBuZWNlc3NhcnkuDQoxNTM6ICAgICAgICAgICAgICAgICAgKi8NCjE1NDogICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZTZXR1cEhhcmR3YXJlKCB2b2lkICk7DQoxNTU6ICAgICAgICAgICAgICAgICANCjE1NjogICAgICAgICAgICAgICAgIC8qDQoxNTc6ICAgICAgICAgICAgICAgICAgKiBBZGQgc29tZSB0aHJlYWQgc2FmZXR5IHRvIHRoZSBMRUQgdG9nZ2xlIGZ1bmN0aW9uLg0KMTU4OiAgICAgICAgICAgICAgICAgICovDQoxNTk6ICAgICAgICAgICAgICAgICBzdGF0aWMgdm9pZCBwcnZUb2dnbGVMRUQoIHVpbnQ4X3QgdWNMRUQgKTsNCjE2MDogICAgICAgICAgICAgICAgIA0KMTYxOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoxNjI6ICAgICAgICAgICAgICAgICANCjE2MzogICAgICAgICAgICAgICAgIC8qIFRoZSBxdWV1ZSB1c2VkIGJ5IGJvdGggdGFza3MuICovDQoxNjQ6ICAgICAgICAgICAgICAgICBzdGF0aWMgUXVldWVIYW5kbGVfdCB4UXVldWUgPSBOVUxMOw0KMTY1OiAgICAgICAgICAgICAgICAgDQoxNjY6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjE2NzogICAgICAgICAgICAgICAgIA0KMTY4OiAgICAgICAgICAgICAgICAgaW50IG1haW4oIHZvaWQgKQ0KMTY5OiAgICAgICAgICAgICAgICAgew0KQkZEMDk2QzAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA5NkMyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA5NkM0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA5NkM2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQoxNzA6ICAgICAgICAgICAgICAgICBUaW1lckhhbmRsZV90IHhUaW1lcjsNCjE3MTogICAgICAgICAgICAgICAgIA0KMTcyOiAgICAgICAgICAgICAgICAgCS8qIFBlcmZvcm0gYW55IGhhcmR3YXJlIGluaXRpYWxpc2F0aW9uIG5lY2Vzc2FyeS4gKi8NCjE3MzogICAgICAgICAgICAgICAgIAkvL3BydlNldHVwSGFyZHdhcmUoKTsNCjE3NDogICAgICAgICAgICAgICAgIA0KMTc1OiAgICAgICAgICAgICAgICAgICAgCV9fYXNtIHZvbGF0aWxlKCAiZGkiICk7DQpCRkQwOTZDOCAgNDc3QzAwMDAgICBESSBaRVJPDQoxNzY6ICAgICAgICAgICAgICAgICANCjE3NzogICAgICAgICAgICAgICAgIA0KMTc4OiAgICAgICAgICAgICAgICAgICAgIHsNCjE3OTogICAgICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGUgdWludDMyX3QgdWx4ID0gMDsNCkJGRDA5NkNDICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMTgwOiAgICAgICAgICAgICAgICAgICAgICAgICANCjE4MTogICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCA7OyApDQoxODI6ICAgICAgICAgICAgICAgICAgICAgICAgIHsNCjE4MzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciggdWx4ID0gMDsgdWx4IDwgMHgxZmZmOyB1bHgrKyApDQpCRkQwOTZEMCAgICAgIENDMEEgICBCIDB4QkZEMDk2RTYNCkJGRDA5NkQyICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KQkZEMDk2RDQgIDBDMDAwMDEwICAgU0xMIFpFUk8sIFMwLCAxDQpCRkQwOTZEQyAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOTZFMCAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDENCkJGRDA5NkUyICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA5NkU2ICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA5NkVBICAxRkZGQjA0MiAgIFNMVElVIFYwLCBWMCwgODE5MQ0KQkZEMDk2RUMgIDQwQTIxRkZGICAgTEIgUkEsIDE2NTQ2KFJBKQ0KQkZEMDk2RUUgIEZGRjI0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDk2RDYNCkJGRDA5NkYwICA3N0U4RkZGMiAgIExXIFJBLCAzMDY5NihTMikNCjE4NDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCjE4NTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA5NkQ2ICAgICAgMEMwMCAgIE5PUA0KMTg2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtIHZvbGF0aWxlKCAiTk9QIiApOw0KQkZEMDk2RDggICAgICAwQzAwICAgTk9QDQoxODc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc20gdm9sYXRpbGUoICJOT1AiICk7ICAgIA0KQkZEMDk2REEgICAgICAwQzAwICAgTk9QDQoxODg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQoxODk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCjE5MDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZF9vdXRfdG9nZ2xlKCAwICk7DQpCRkQwOTZGMiAgNDJENDc3RTggICBKQUxTIGxlZF9vdXRfdG9nZ2xlDQpCRkQwOTZGNiAgICAgIDBDODAgICBNT1ZFIEEwLCBaRVJPDQoxOTE6ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCkJGRDA5NkY4ICAgICAgQ0ZFQiAgIEIgMHhCRkQwOTZEMA0KQkZEMDk2RkEgICAgICAwQzAwICAgTk9QDQoxOTI6ICAgICAgICAgICAgICAgICAgICAgfQ0KMTkzOiAgICAgICAgICAgICAgICAgICAgIA0KMTk0OiAgICAgICAgICAgICAgICAgICAgIA0KMTk1OiAgICAgICAgICAgICAgICAgICAgIA0KMTk2OiAgICAgICAgICAgICAgICAgCS8qIENyZWF0ZSB0aGUgcXVldWUuICovDQoxOTc6ICAgICAgICAgICAgICAgICAJeFF1ZXVlID0geFF1ZXVlQ3JlYXRlKCBtYWluUVVFVUVfTEVOR1RILCBzaXplb2YoIHVuc2lnbmVkIGxvbmcgKSApOw0KMTk4OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggeFF1ZXVlICk7DQoxOTk6ICAgICAgICAgICAgICAgICANCjIwMDogICAgICAgICAgICAgICAgIAlpZiggeFF1ZXVlICE9IE5VTEwgKQ0KMjAxOiAgICAgICAgICAgICAgICAgCXsNCjIwMjogICAgICAgICAgICAgICAgIAkJLyogQ3JlYXRlIHRoZSB0d28gdGFza3MgYXMgZGVzY3JpYmVkIGluIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoaXMNCjIwMzogICAgICAgICAgICAgICAgIAkJZmlsZS4gKi8NCjIwNDogICAgICAgICAgICAgICAgIAkJeFRhc2tDcmVhdGUoCXBydlF1ZXVlUmVjZWl2ZVRhc2ssCQkJCQkvKiBUaGUgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIHRoZSB0YXNrLiAqLw0KMjA1OiAgICAgICAgICAgICAgICAgCQkJCQkJIlJ4IiwgCQkJCQkJCQkJLyogVGhlIHRleHQgbmFtZSBhc3NpZ25lZCB0byB0aGUgdGFzayAtIGZvciBkZWJ1ZyBvbmx5IGFzIGl0IGlzIG5vdCB1c2VkIGJ5IHRoZSBrZXJuZWwuICovDQoyMDY6ICAgICAgICAgICAgICAgICAJCQkJCQljb25maWdNSU5JTUFMX1NUQUNLX1NJWkUsIAkJCQkvKiBUaGUgc2l6ZSBvZiB0aGUgc3RhY2sgdG8gYWxsb2NhdGUgdG8gdGhlIHRhc2suICovDQoyMDc6ICAgICAgICAgICAgICAgICAJCQkJCQkoIHZvaWQgKiApIG1haW5RVUVVRV9SRUNFSVZFX1BBUkFNRVRFUiwJLyogVGhlIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIHRhc2sgLSBqdXN0IHRvIGNoZWNrIHRoZSBmdW5jdGlvbmFsaXR5LiAqLw0KMjA4OiAgICAgICAgICAgICAgICAgCQkJCQkJbWFpblFVRVVFX1JFQ0VJVkVfVEFTS19QUklPUklUWSwJCS8qIFRoZSBwcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgdGFzay4gKi8NCjIwOTogICAgICAgICAgICAgICAgIAkJCQkJCU5VTEwgKTsJCQkJCQkJCQkvKiBUaGUgdGFzayBoYW5kbGUgaXMgbm90IHJlcXVpcmVkLCBzbyBOVUxMIGlzIHBhc3NlZC4gKi8NCjIxMDogICAgICAgICAgICAgICAgIA0KMjExOiAgICAgICAgICAgICAgICAgCQl4VGFza0NyZWF0ZSggcHJ2UXVldWVTZW5kVGFzaywgIlRYIiwgY29uZmlnTUlOSU1BTF9TVEFDS19TSVpFLCAoIHZvaWQgKiApIG1haW5RVUVVRV9TRU5EX1BBUkFNRVRFUiwgbWFpblFVRVVFX1NFTkRfVEFTS19QUklPUklUWSwgTlVMTCApOw0KMjEyOiAgICAgICAgICAgICAgICAgDQoyMTM6ICAgICAgICAgICAgICAgICANCjIxNDogICAgICAgICAgICAgICAgIAkJLyogQ3JlYXRlIHRoZSBibGlua3kgc29mdHdhcmUgdGltZXIgYXMgZGVzY3JpYmVkIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLiAqLw0KMjE1OiAgICAgICAgICAgICAgICAgCQl4VGltZXIgPSB4VGltZXJDcmVhdGUoCSJCbGlua3kiLAkJCQkJLyogQSB0ZXh0IG5hbWUsIHB1cmVseSB0byBoZWxwIGRlYnVnZ2luZy4gKi8NCjIxNjogICAgICAgICAgICAgICAgIAkJCQkJCQkJKCBtYWluQkxJTktZX1RJTUVSX1BFUklPRCApLC8qIFRoZSB0aW1lciBwZXJpb2QuICovDQoyMTc6ICAgICAgICAgICAgICAgICAJCQkJCQkJCXBkVFJVRSwJCQkJCQkvKiBUaGlzIGlzIGFuIGF1dG8tcmVsb2FkIHRpbWVyLCBzbyB4QXV0b1JlbG9hZCBpcyBzZXQgdG8gcGRUUlVFLiAqLw0KMjE4OiAgICAgICAgICAgICAgICAgCQkJCQkJCQkoIHZvaWQgKiApIDAsCQkJCS8qIFRoZSBJRCBpcyBub3QgdXNlZCwgc28gY2FuIGJlIHNldCB0byBhbnl0aGluZy4gKi8NCjIxOTogICAgICAgICAgICAgICAgIAkJCQkJCQkJcHJ2Qmxpbmt5VGltZXJDYWxsYmFjayApOwkvKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpbnNwZWN0cyB0aGUgc3RhdHVzIG9mIGFsbCB0aGUgb3RoZXIgdGFza3MuICovDQoyMjA6ICAgICAgICAgICAgICAgICAJCWNvbmZpZ0FTU0VSVCggeFRpbWVyICk7DQoyMjE6ICAgICAgICAgICAgICAgICANCjIyMjogICAgICAgICAgICAgICAgIAkJaWYoIHhUaW1lciAhPSBOVUxMICkNCjIyMzogICAgICAgICAgICAgICAgIAkJew0KMjI0OiAgICAgICAgICAgICAgICAgCQkJeFRpbWVyU3RhcnQoIHhUaW1lciwgbWFpbkRPTlRfQkxPQ0sgKTsNCjIyNTogICAgICAgICAgICAgICAgIAkJfQ0KMjI2OiAgICAgICAgICAgICAgICAgDQoyMjc6ICAgICAgICAgICAgICAgICAJCS8qIFN0YXJ0IHRoZSB0YXNrcyBhbmQgdGltZXIgcnVubmluZy4gKi8NCjIyODogICAgICAgICAgICAgICAgIAkJdlRhc2tTdGFydFNjaGVkdWxlcigpOw0KMjI5OiAgICAgICAgICAgICAgICAgCX0NCjIzMDogICAgICAgICAgICAgICAgIA0KMjMxOiAgICAgICAgICAgICAgICAgCS8qIElmIGFsbCBpcyB3ZWxsLCB0aGUgc2NoZWR1bGVyIHdpbGwgbm93IGJlIHJ1bm5pbmcsIGFuZCB0aGUgZm9sbG93aW5nDQoyMzI6ICAgICAgICAgICAgICAgICAJbGluZSB3aWxsIG5ldmVyIGJlIHJlYWNoZWQuICBJZiB0aGUgZm9sbG93aW5nIGxpbmUgZG9lcyBleGVjdXRlLCB0aGVuDQoyMzM6ICAgICAgICAgICAgICAgICAJdGhlcmUgd2FzIGluc3VmZmljaWVudCBGcmVlUlRPUyBoZWFwIG1lbW9yeSBhdmFpbGFibGUgZm9yIHRoZSBpZGxlIGFuZC9vcg0KMjM0OiAgICAgICAgICAgICAgICAgCXRpbWVyIHRhc2tzCXRvIGJlIGNyZWF0ZWQuICBTZWUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNlY3Rpb24gb24gdGhlDQoyMzU6ICAgICAgICAgICAgICAgICAJRnJlZVJUT1Mgd2ViIHNpdGUgZm9yIG1vcmUgZGV0YWlscy4gaHR0cDovL3d3dy5mcmVlcnRvcy5vcmcvYTAwMTExLmh0bWwgKi8NCjIzNjogICAgICAgICAgICAgICAgIAlmb3IoIDs7ICk7DQoyMzc6ICAgICAgICAgICAgICAgICB9DQoyMzg6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjIzOTogICAgICAgICAgICAgICAgIA0KMjQwOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UXVldWVTZW5kVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCjI0MTogICAgICAgICAgICAgICAgIHsNCkJGRDA3RTM0ICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwN0UzNiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwN0UzOCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwN0UzQSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDdFM0MgIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KMjQyOiAgICAgICAgICAgICAgICAgVGlja1R5cGVfdCB4TmV4dFdha2VUaW1lOw0KMjQzOiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyB1bFZhbHVlVG9TZW5kID0gMTAwVUw7DQpCRkQwN0U0MCAgICAgIEVENjQgICBMSSBWMCwgMTAwDQpCRkQwN0U0MiAgMDAxNEY4NUUgICBTVyBWMCwgMjAoUzgpDQoyNDQ6ICAgICAgICAgICAgICAgICANCjI0NTogICAgICAgICAgICAgICAgIAkvKiBSZW1vdmUgY29tcGlsZXIgd2FybmlnbnMgaW4gdGhlIGNhc2UgdGhhdCBjb25maWdBU1NFUlQoKSBpcyBub3QgZGZpbmVkLiAqLw0KMjQ2OiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHB2UGFyYW1ldGVyczsNCjI0NzogICAgICAgICAgICAgICAgIA0KMjQ4OiAgICAgICAgICAgICAgICAgCS8qIENoZWNrIHRoZSB0YXNrIHBhcmFtZXRlciBpcyBhcyBleHBlY3RlZC4gKi8NCjI0OTogICAgICAgICAgICAgICAgIAljb25maWdBU1NFUlQoICggKCB1bnNpZ25lZCBsb25nICkgcHZQYXJhbWV0ZXJzICkgPT0gbWFpblFVRVVFX1NFTkRfUEFSQU1FVEVSICk7DQpCRkQwN0U0NiAgMDAyMEZDN0UgICBMVyBWMSwgMzIoUzgpDQpCRkQwN0U0OCAgMzA0MDAwMjAgICBTUkwgQVQsIFpFUk8sIDYNCkJGRDA3RTRBICAxMTExMzA0MCAgIEFERElVIFYwLCBaRVJPLCA0MzY5DQpCRkQwN0U0QyAgOTQ0MzExMTEgICBBRERJIFQwLCBTMSwgLTI3NTgxDQpCRkQwN0U0RSAgMDAwQTk0NDMgICBCRVEgVjEsIFYwLCAweEJGRDA3RTY2DQpCRkQwN0U1MCAgMEMwMDAwMEEgICBTTEwgWkVSTywgVDIsIDENCkJGRDA3RTUyICAgICAgMEMwMCAgIE5PUA0KQkZEMDdFNTQgIEJGRDE0MUEyICAgTFVJIFYwLCAweEJGRDENCkJGRDA3RTU2ICAzMDgyQkZEMSAgIExEQzEgRjMwLCAxMjQxOChTMSkNCkJGRDA3RTU4ICA5RUY0MzA4MiAgIEFERElVIEEwLCBWMCwgLTI0ODQ0DQpCRkQwN0U1QSAgMzBBMDlFRjQgICBMV0MxIEYyMywgMTI0NDgoUzQpDQpCRkQwN0U1QyAgMDBGOTMwQTAgICBBRERJVSBBMSwgWkVSTywgMjQ5DQpCRkQwN0U2MCAgNEI3RTc3RTggICBKQUxTIHZBc3NlcnRDYWxsZWQNCkJGRDA3RTYyICAgICAgNEI3RSAgIExXIEsxLCAxMjAoU1ApDQpCRkQwN0U2NCAgICAgIDBDMDAgICBOT1ANCjI1MDogICAgICAgICAgICAgICAgIA0KMjUxOiAgICAgICAgICAgICAgICAgCS8qIEluaXRpYWxpc2UgeE5leHRXYWtlVGltZSAtIHRoaXMgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UuICovDQoyNTI6ICAgICAgICAgICAgICAgICAJeE5leHRXYWtlVGltZSA9IHhUYXNrR2V0VGlja0NvdW50KCk7DQpCRkQwN0U2NiAgNENDQTc3RTggICBKQUxTIHhUYXNrR2V0VGlja0NvdW50DQpCRkQwN0U2OCAgICAgIDRDQ0EgICBBRERJVSBBMiwgQTIsIDUNCkJGRDA3RTZBICAgICAgMEMwMCAgIE5PUA0KQkZEMDdFNkMgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMjUzOiAgICAgICAgICAgICAgICAgDQoyNTQ6ICAgICAgICAgICAgICAgICAJZm9yKCA7OyApDQoyNTU6ICAgICAgICAgICAgICAgICAJew0KMjU2OiAgICAgICAgICAgICAgICAgCQkvKiBQbGFjZSB0aGlzIHRhc2sgaW4gdGhlIGJsb2NrZWQgc3RhdGUgdW50aWwgaXQgaXMgdGltZSB0byBydW4gYWdhaW4uDQoyNTc6ICAgICAgICAgICAgICAgICAJCVRoZSBibG9jayB0aW1lIGlzIHNwZWNpZmllZCBpbiB0aWNrcywgdGhlIGNvbnN0YW50IHVzZWQgY29udmVydHMgdGlja3MNCjI1ODogICAgICAgICAgICAgICAgIAkJdG8gbXMuICBXaGlsZSBpbiB0aGUgQmxvY2tlZCBzdGF0ZSB0aGlzIHRhc2sgd2lsbCBub3QgY29uc3VtZSBhbnkgQ1BVDQoyNTk6ICAgICAgICAgICAgICAgICAJCXRpbWUuICovDQoyNjA6ICAgICAgICAgICAgICAgICAJCXZUYXNrRGVsYXlVbnRpbCggJnhOZXh0V2FrZVRpbWUsIG1haW5RVUVVRV9TRU5EX0ZSRVFVRU5DWV9NUyApOw0KQkZEMDdFNzAgIDAwMTAzMDVFICAgQURESVUgVjAsIFM4LCAxNg0KQkZEMDdFNzQgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA3RTc2ICAwMEM4MzBBMCAgIEFERElVIEExLCBaRVJPLCAyMDANCkJGRDA3RTdBICAwMDA0NzdFOCAgIEpBTFMgdlRhc2tEZWxheVVudGlsDQpCRkQwN0U3QyAgMEMwMDAwMDQgICBTTEwgWkVSTywgQTAsIDENCkJGRDA3RTdFICAgICAgMEMwMCAgIE5PUA0KMjYxOiAgICAgICAgICAgICAgICAgDQoyNjI6ICAgICAgICAgICAgICAgICAJCS8qIFNlbmQgdG8gdGhlIHF1ZXVlIC0gY2F1c2luZyB0aGUgcXVldWUgcmVjZWl2ZSB0YXNrIHRvIHVuYmxvY2sgYW5kDQoyNjM6ICAgICAgICAgICAgICAgICAJCXRvZ2dsZSB0aGUgTEVELiAgMCBpcyB1c2VkIGFzIHRoZSBibG9jayB0aW1lIHNvIHRoZSBzZW5kaW5nIG9wZXJhdGlvbg0KMjY0OiAgICAgICAgICAgICAgICAgCQl3aWxsIG5vdCBibG9jayAtIGl0IHNob3VsZG4ndCBuZWVkIHRvIGJsb2NrIGFzIHRoZSBxdWV1ZSBzaG91bGQgYWx3YXlzDQoyNjU6ICAgICAgICAgICAgICAgICAJCWJlIGVtcHR5IGF0IHRoaXMgcG9pbnQgaW4gdGhlIGNvZGUuICovDQoyNjY6ICAgICAgICAgICAgICAgICAJCXhRdWV1ZVNlbmQoIHhRdWV1ZSwgJnVsVmFsdWVUb1NlbmQsIDBVICk7DQpCRkQwN0U4MCAgODA3MEZDN0MgICBMVyBWMSwgLTMyNjU2KEdQKQ0KQkZEMDdFODQgIDAwMTQzMDVFICAgQURESVUgVjAsIFM4LCAyMA0KQkZEMDdFODggICAgICAwQzgzICAgTU9WRSBBMCwgVjENCkJGRDA3RThBICAgICAgMENBMiAgIE1PVkUgQTEsIFYwDQpCRkQwN0U4QyAgICAgIDBDQzAgICBNT1ZFIEEyLCBaRVJPDQpCRkQwN0U4RSAgICAgIDBDRTAgICBNT1ZFIEEzLCBaRVJPDQpCRkQwN0U5MCAgMDZBMjc3RTggICBKQUxTIHhRdWV1ZUdlbmVyaWNTZW5kDQpCRkQwN0U5MiAgICAgIDA2QTIgICBBRERVIEExLCBTMSwgVjANCkJGRDA3RTk0ICAgICAgMEMwMCAgIE5PUA0KMjY3OiAgICAgICAgICAgICAgICAgCX0NCkJGRDA3RTk2ICAgICAgQ0ZFQyAgIEIgMHhCRkQwN0U3MA0KQkZEMDdFOTggICAgICAwQzAwICAgTk9QDQoyNjg6ICAgICAgICAgICAgICAgICB9DQoyNjk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjI3MDogICAgICAgICAgICAgICAgIA0KMjcxOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2UXVldWVSZWNlaXZlVGFzayggdm9pZCAqcHZQYXJhbWV0ZXJzICkNCjI3MjogICAgICAgICAgICAgICAgIHsNCkJGRDA4MDkwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwODA5MiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwODA5NCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwODA5NiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDgwOTggIDAwMjBGODlFICAgU1cgQTAsIDMyKFM4KQ0KMjczOiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB1bFJlY2VpdmVkVmFsdWU7DQoyNzQ6ICAgICAgICAgICAgICAgICANCjI3NTogICAgICAgICAgICAgICAgIAkvKiBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3MgaW4gdGhlIGNhc2Ugd2hlcmUgY29uZmlnQVNTRVJUKCkgaXMgbm90IGRlZmluZWQuICovDQoyNzY6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgcHZQYXJhbWV0ZXJzOw0KMjc3OiAgICAgICAgICAgICAgICAgDQoyNzg6ICAgICAgICAgICAgICAgICAJLyogQ2hlY2sgdGhlIHRhc2sgcGFyYW1ldGVyIGlzIGFzIGV4cGVjdGVkLiAqLw0KMjc5OiAgICAgICAgICAgICAgICAgCWNvbmZpZ0FTU0VSVCggKCAoIHVuc2lnbmVkIGxvbmcgKSBwdlBhcmFtZXRlcnMgKSA9PSBtYWluUVVFVUVfUkVDRUlWRV9QQVJBTUVURVIgKTsNCkJGRDA4MDlDICAwMDIwRkM3RSAgIExXIFYxLCAzMihTOCkNCkJGRDA4MEEwICAgICAgRUQyMiAgIExJIFYwLCAzNA0KQkZEMDgwQTIgIDAwMEQ5NDQzICAgQkVRIFYxLCBWMCwgMHhCRkQwODBDMA0KQkZEMDgwQTQgIDBDMDAwMDBEICAgU0xMIFpFUk8sIFQ1LCAxDQpCRkQwODBBNiAgICAgIDBDMDAgICBOT1ANCkJGRDA4MEE4ICBCRkQxNDFBMiAgIExVSSBWMCwgMHhCRkQxDQpCRkQwODBBQSAgMzA4MkJGRDEgICBMREMxIEYzMCwgMTI0MTgoUzEpDQpCRkQwODBBQyAgOUVGNDMwODIgICBBRERJVSBBMCwgVjAsIC0yNDg0NA0KQkZEMDgwQUUgIDMwQTA5RUY0ICAgTFdDMSBGMjMsIDEyNDQ4KFM0KQ0KQkZEMDgwQjAgIDAxMTczMEEwICAgQURESVUgQTEsIFpFUk8sIDI3OQ0KQkZEMDgwQjQgIDRCN0U3N0U4ICAgSkFMUyB2QXNzZXJ0Q2FsbGVkDQpCRkQwODBCNiAgICAgIDRCN0UgICBMVyBLMSwgMTIwKFNQKQ0KQkZEMDgwQjggICAgICAwQzAwICAgTk9QDQpCRkQwODBCQSAgICAgIENDMDIgICBCIDB4QkZEMDgwQzANCkJGRDA4MEJDICAgICAgMEMwMCAgIE5PUA0KMjgwOiAgICAgICAgICAgICAgICAgDQoyODE6ICAgICAgICAgICAgICAgICAJZm9yKCA7OyApDQoyODI6ICAgICAgICAgICAgICAgICAJew0KMjgzOiAgICAgICAgICAgICAgICAgCQkvKiBXYWl0IHVudGlsIHNvbWV0aGluZyBhcnJpdmVzIGluIHRoZSBxdWV1ZSAtIHRoaXMgdGFzayB3aWxsIGJsb2NrDQoyODQ6ICAgICAgICAgICAgICAgICAJCWluZGVmaW5pdGVseSBwcm92aWRlZCBJTkNMVURFX3ZUYXNrU3VzcGVuZCBpcyBzZXQgdG8gMSBpbg0KMjg1OiAgICAgICAgICAgICAgICAgCQlGcmVlUlRPU0NvbmZpZy5oLiAqLw0KMjg2OiAgICAgICAgICAgICAgICAgCQl4UXVldWVSZWNlaXZlKCB4UXVldWUsICZ1bFJlY2VpdmVkVmFsdWUsIHBvcnRNQVhfREVMQVkgKTsNCkJGRDA4MEMwICA4MDcwRkM1QyAgIExXIFYwLCAtMzI2NTYoR1ApDQpCRkQwODBDNCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KQkZEMDgwQzYgIDAwMTAzMDVFICAgQURESVUgVjAsIFM4LCAxNg0KQkZEMDgwQ0EgICAgICAwQ0EyICAgTU9WRSBBMSwgVjANCkJGRDA4MENDICAgICAgRUY3RiAgIExJIEEyLCAtMQ0KQkZEMDgwQ0UgICAgICAwQ0UwICAgTU9WRSBBMywgWkVSTw0KQkZEMDgwRDAgIDA4MUU3N0U4ICAgSkFMUyB4UXVldWVHZW5lcmljUmVjZWl2ZQ0KQkZEMDgwRDIgICAgICAwODFFICAgTEJVIFMwLCAxNChTMSkNCkJGRDA4MEQ0ICAgICAgMEMwMCAgIE5PUA0KMjg3OiAgICAgICAgICAgICAgICAgDQoyODg6ICAgICAgICAgICAgICAgICAJCS8qICBUbyBnZXQgaGVyZSBzb21ldGhpbmcgbXVzdCBoYXZlIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGUgcXVldWUsIGJ1dA0KMjg5OiAgICAgICAgICAgICAgICAgCQlpcyBpdCB0aGUgZXhwZWN0ZWQgdmFsdWU/ICBJZiBpdCBpcywgdG9nZ2xlIHRoZSBMRUQuICovDQoyOTA6ICAgICAgICAgICAgICAgICAJCWlmKCB1bFJlY2VpdmVkVmFsdWUgPT0gMTAwVUwgKQ0KQkZEMDgwRDYgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDgwREEgICAgICBFRDY0ICAgTEkgVjAsIDEwMA0KQkZEMDgwREMgIEZGRUZCNDQzICAgQk5FIFYxLCBWMCwgMHhCRkQwODBCRQ0KQkZEMDgwREUgIDBDMDBGRkVGICAgTFcgUkEsIDMwNzIoVDcpDQpCRkQwODBFMCAgICAgIDBDMDAgICBOT1ANCjI5MTogICAgICAgICAgICAgICAgIAkJew0KMjkyOiAgICAgICAgICAgICAgICAgCQkJcHJ2VG9nZ2xlTEVEKCBtYWluVEFTS1NfTEVEICk7DQpCRkQwODBFMiAgICAgIDBDODAgICBNT1ZFIEEwLCBaRVJPDQpCRkQwODBFNCAgNEMzQzc3RTggICBKQUxTIHBydlRvZ2dsZUxFRA0KQkZEMDgwRTYgICAgICA0QzNDICAgQURESVUgQVQsIEFULCAtMg0KQkZEMDgwRTggICAgICAwQzAwICAgTk9QDQoyOTM6ICAgICAgICAgICAgICAgICAJCQl1bFJlY2VpdmVkVmFsdWUgPSAwVTsNCkJGRDA4MEVBICAwMDEwRjgxRSAgIFNXIFpFUk8sIDE2KFM4KQ0KMjk0OiAgICAgICAgICAgICAgICAgCQl9DQoyOTU6ICAgICAgICAgICAgICAgICAJfQ0KQkZEMDgwQkUgICAgICAwQzAwICAgTk9QDQpCRkQwODBFRSAgICAgIENGRTggICBCIDB4QkZEMDgwQzANCkJGRDA4MEYwICAgICAgMEMwMCAgIE5PUA0KMjk2OiAgICAgICAgICAgICAgICAgfQ0KMjk3OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoyOTg6ICAgICAgICAgICAgICAgICANCjI5OTogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydkJsaW5reVRpbWVyQ2FsbGJhY2soIFRpbWVySGFuZGxlX3QgeFRpbWVyICkNCjMwMDogICAgICAgICAgICAgICAgIHsNCkJGRDA5REFDICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwOURBRSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwOURCMCAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwOURCMiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDlEQjQgIDAwMThGODlFICAgU1cgQTAsIDI0KFM4KQ0KMzAxOiAgICAgICAgICAgICAgICAgCS8qIEF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzLiAqLw0KMzAyOiAgICAgICAgICAgICAgICAgCSggdm9pZCApIHhUaW1lcjsNCjMwMzogICAgICAgICAgICAgICAgIA0KMzA0OiAgICAgICAgICAgICAgICAgCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGJsaW5reSBzb2Z0d2FyZSB0aW1lIGV4cGlyZXMuICBBbGwgdGhlDQozMDU6ICAgICAgICAgICAgICAgICAJZnVuY3Rpb24gZG9lcyBpcyB0b2dnbGUgdGhlIExFRC4gIExFRCBtYWluVElNRVJfTEVEIHNob3VsZCB0aGVyZWZvcmUgdG9nZ2xlDQozMDY6ICAgICAgICAgICAgICAgICAJd2l0aCB0aGUgcGVyaW9kIHNldCBieSBtYWluQkxJTktZX1RJTUVSX1BFUklPRC4gKi8NCjMwNzogICAgICAgICAgICAgICAgIAlwcnZUb2dnbGVMRUQoIG1haW5USU1FUl9MRUQgKTsNCkJGRDA5REI4ICAgICAgRUUwMSAgIExJIEEwLCAxDQpCRkQwOURCQSAgNEMzQzc3RTggICBKQUxTIHBydlRvZ2dsZUxFRA0KQkZEMDlEQkMgICAgICA0QzNDICAgQURESVUgQVQsIEFULCAtMg0KQkZEMDlEQkUgICAgICAwQzAwICAgTk9QDQozMDg6ICAgICAgICAgICAgICAgICB9DQpCRkQwOURDMCAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlEQzIgICAgICA0QkU1ICAgTFcgUkEsIDIwKFNQKQ0KQkZEMDlEQzQgICAgICA0QkM0ICAgTFcgUzgsIDE2KFNQKQ0KQkZEMDlEQzYgICAgICA0QzBEICAgQURESVUgU1AsIFNQLCAyNA0KQkZEMDlEQzggICAgICA0NTlGICAgSlIxNiBSQQ0KQkZEMDlEQ0EgICAgICAwQzAwICAgTk9QDQozMDk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjMxMDogICAgICAgICAgICAgICAgIA0KMzExOiAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgcHJ2VG9nZ2xlTEVEKCB1aW50OF90IHVjTEVEICkNCjMxMjogICAgICAgICAgICAgICAgIHsNCkJGRDA5ODc4ICAgICAgNEZGNSAgIEFERElVIFNQLCBTUCwgLTI0DQpCRkQwOTg3QSAgICAgIENCRTUgICBTVyBSQSwgMjAoU1ApDQpCRkQwOTg3QyAgICAgIENCQzQgICBTVyBTOCwgMTYoU1ApDQpCRkQwOTg3RSAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDk4ODAgICAgICAwQzQ0ICAgTU9WRSBWMCwgQTANCkJGRDA5ODgyICAwMDE4MTg1RSAgIFNCIFYwLCAyNChTOCkNCjMxMzogICAgICAgICAgICAgICAgIAl0YXNrRU5URVJfQ1JJVElDQUwoKTsNCkJGRDA5ODg2ICAzM0I4NzdFOCAgIEpBTFMgdlRhc2tFbnRlckNyaXRpY2FsDQpCRkQwOTg4OCAgMEMwMDMzQjggICBBRERJVSBTUCwgVDgsIDMwNzINCkJGRDA5ODhBICAgICAgMEMwMCAgIE5PUA0KMzE0OiAgICAgICAgICAgICAgICAgCXsNCjMxNTogICAgICAgICAgICAgICAgIAkJbGVkX291dF90b2dnbGUoIHVjTEVEICk7DQpCRkQwOTg4QyAgMDAxODE0NUUgICBMQlUgVjAsIDI0KFM4KQ0KQkZEMDk4OTAgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA5ODkyICA0MkQ0NzdFOCAgIEpBTFMgbGVkX291dF90b2dnbGUNCkJGRDA5ODk2ICAgICAgMEMwMCAgIE5PUA0KMzE2OiAgICAgICAgICAgICAgICAgCX0NCjMxNzogICAgICAgICAgICAgICAgIAl0YXNrRVhJVF9DUklUSUNBTCgpOw0KQkZEMDk4OTggIDQwQUE3N0U4ICAgSkFMUyB2VGFza0V4aXRDcml0aWNhbA0KQkZEMDk4OUEgIDBDMDA0MEFBICAgQk5FWkMgVDIsIDB4QkZEMEIwOUUNCkJGRDA5ODlDICAgICAgMEMwMCAgIE5PUA0KMzE4OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDk4OUUgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5OEEwICAgICAgNEJFNSAgIExXIFJBLCAyMChTUCkNCkJGRDA5OEEyICAgICAgNEJDNCAgIExXIFM4LCAxNihTUCkNCkJGRDA5OEE0ICAgICAgNEMwRCAgIEFERElVIFNQLCBTUCwgMjQNCkJGRDA5OEE2ICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5OEE4ICAgICAgMEMwMCAgIE5PUA0KMzE5OiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQozMjA6ICAgICAgICAgICAgICAgICANCjMyMTogICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHBydlNldHVwSGFyZHdhcmUoIHZvaWQgKQ0KMzIyOiAgICAgICAgICAgICAgICAgew0KQkZEMDU4OTAgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA1ODkyICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA1ODk0ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA1ODk2ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQozMjM6ICAgICAgICAgICAgICAgICB2b2xhdGlsZSB1aW50MzJfdCB1bFRlbXA7DQozMjQ6ICAgICAgICAgICAgICAgICANCjMyNTogICAgICAgICAgICAgICAgIAkvKiBJbnRlcnJ1cHRzIGFyZSBhdXRvbWF0aWNhbGx5IHJlLWVuYWJsZWQgd2hlbiB0aGUgc2NoZWR1bGVyIGlzIHN0YXJ0ZWQuICovDQozMjY6ICAgICAgICAgICAgICAgICAJX19hc20gdm9sYXRpbGUoICJkaSIgKTsNCkJGRDA1ODk4ICA0NzdDMDAwMCAgIERJIFpFUk8NCjMyNzogICAgICAgICAgICAgICAgIA0KMzI4OiAgICAgICAgICAgICAgICAgCS8qIEVuYWJsZSBNMTRLIFZlY3RvciBQcmUtZmV0Y2g6IENQMC5JbnRDdGwgYlsyMl09MQ0KMzI5OiAgICAgICAgICAgICAgICAgCSAgIElSRVQgKGludGVycnVwdCBjaGFpbmluZyk6IGJbMjFdPTENCjMzMDogICAgICAgICAgICAgICAgIAkgICBFbmFibGUgQXV0by1Qcm9sb2c6IGJbMTRdPTEgKi8NCjMzMTogICAgICAgICAgICAgICAgIAl1bFRlbXAgPSBfQ1AwX0dFVF9JTlRDVEwoKTsNCkJGRDA1ODlDICAwOEZDMDA0QyAgIE1GQzAgVjAsIEludEN0bA0KQkZEMDU4OUUgICAgICAwOEZDICAgTEJVIFMxLCAxMihBMykNCkJGRDA1OEEwICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCjMzMjogICAgICAgICAgICAgICAgIAl1bFRlbXAgfD0gKCAxdWwgPDwgMjIgKSArICggMXVsIDw8IDIxICkgKyAoIDF1bCA8PCAxNCApOw0KQkZEMDU4QTQgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDU4QTggIDAwNjA0MUEyICAgTFVJIFYwLCAweDYwDQpCRkQwNThBQyAgNDAwMDUwNDIgICBPUkkgVjAsIFYwLCAxNjM4NA0KQkZEMDU4QUUgIDQ0RDM0MDAwICAgQkxUWiBaRVJPLCAweEJGRDBFMjU4DQpCRkQwNThCMCAgICAgIDQ0RDMgICBPUjE2IFYwLCBWMQ0KQkZEMDU4QjIgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KMzMzOiAgICAgICAgICAgICAgICAgCV9DUDBfU0VUX0lOVENUTCggdWxUZW1wICk7DQpCRkQwNThCNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNThCOCAgMDA0QzAwMTAgICBJTlMgWkVSTywgUzAsIDEsIDANCkJGRDA1OEJBICAwQUZDMDA0QyAgIE1UQzAgVjAsIEludEN0bA0KQkZEMDU4QkMgICAgICAwQUZDICAgTEJVIEExLCAxMihBMykNCkJGRDA1OEJFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzDQpCRkQwNThDMCAgNDFBMjE4MDAgICBTQiBaRVJPLCAxNjgwMihaRVJPKQ0KMzM0OiAgICAgICAgICAgICAgICAgDQozMzU6ICAgICAgICAgICAgICAgICAJLyogQ29uZmlndXJlIDMyS0h6IGZvciBTd2l0Y2hlZCBDbG9jayBTb3VyY2UgYWx3YXlzIE9ODQozMzY6ICAgICAgICAgICAgICAgICAJICAgYlsgMCBdID0gWE9TRUwgICAgICAgICAgICAgICAgICAgICA9IDENCjMzNzogICAgICAgICAgICAgICAgIAkgICBiWyAxIF0gPSBFWFRfMzJLX09TQ19FTiAgICAgICAgICAgID0gMQ0KMzM4OiAgICAgICAgICAgICAgICAgCSAgIGJbIDIgXSA9IElOVF8zMktfT1NDX0VOICAgICAgICAgICAgPSAxDQozMzk6ICAgICAgICAgICAgICAgICAJICAgYlsgMyBdID0gSU5UXzMyS19WVFJfUFdSX1dFTExfRU1VTCA9IDANCjM0MDogICAgICAgICAgICAgICAgIAkgICBiWyA0IF0gPSAzMktfU1dJVENIRVJfQ1RSTCAgICAgICAgID0gMCAqLw0KMzQxOiAgICAgICAgICAgICAgICAgCVZCQVRfUkVHUy0+Q0xPQ0tfRU5BQkxFID0gMHgwNzsNCkJGRDA1OEMyICBBMDAwNDFBMiAgIExVSSBWMCwgMHhBMDAwDQpCRkQwNThDNiAgQTQwMDUwNDIgICBPUkkgVjAsIFYwLCAtMjM1NTINCkJGRDA1OENBICAgICAgRUQ4NyAgIExJIFYxLCA3DQpCRkQwNThDQyAgICAgIEU5QTIgICBTVyBWMSwgOChWMCkNCjM0MjogICAgICAgICAgICAgICAgIA0KMzQzOiAgICAgICAgICAgICAgICAgCXVsVGVtcCA9IDI1NjsNCkJGRDA1OENFICAwMTAwMzA0MCAgIEFERElVIFYwLCBaRVJPLCAyNTYNCjM0NDogICAgICAgICAgICAgICAgIAl3aGlsZSAodWxUZW1wLS0pDQpCRkQwNThEMiAgICAgIENDMDYgICBCIDB4QkZEMDU4RTANCkJGRDA1OEQ0ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA1OEQ2ICAwQzAwMDAxMCAgIFNMTCBaRVJPLCBTMCwgMQ0KQkZEMDU4RTAgIDAwMTBGQzVFICAgTFcgVjAsIDE2KFM4KQ0KQkZEMDU4RTIgIDAwNDAwMDEwICAgU1JMIFpFUk8sIFMwLCAwDQpCRkQwNThFNCAgMUI5MDAwNDAgICBTTFRVIFYxLCBaRVJPLCBWMA0KQkZEMDU4RTYgIDJEQkQxQjkwICAgU0IgR1AsIDExNzA5KFMwKQ0KQkZEMDU4RTggICAgICAyREJEICAgQU5ESSBWMSwgVjEsIDB4RkYNCkJGRDA1OEVBICAgICAgNkQyRSAgIEFERElVIFYwLCBWMCwgLTENCkJGRDA1OEVDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA1OEYwICBGRkYyNDBBMyAgIEJORVpDIFYxLCAweEJGRDA1OEQ4DQpCRkQwNThGMiAgNDFBMkZGRjIgICBMVyBSQSwgMTY4MDIoUzIpDQozNDU6ICAgICAgICAgICAgICAgICAJew0KMzQ2OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA1OEQ4ICAgICAgMEMwMCAgIE5PUA0KMzQ3OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA1OERBICAgICAgMEMwMCAgIE5PUA0KMzQ4OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA1OERDICAgICAgMEMwMCAgIE5PUA0KMzQ5OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA1OERFICAgICAgMEMwMCAgIE5PUA0KMzUwOiAgICAgICAgICAgICAgICAgCX0NCjM1MTogICAgICAgICAgICAgICAgIA0KMzUyOiAgICAgICAgICAgICAgICAgCS8qIERpc2FnZ3JlZ2F0ZSBHSVJRMjMgJiBHSVJRMjQgZm9yIEZyZWVSVE9TLiAgU2Vjb25kIHBhcmFtZXRlciBpcyBhIGJpdC1tYXANCjM1MzogICAgICAgICAgICAgICAgIAlmb3IgZWFjaCBHSVJRIHdoZXJlDQozNTQ6ICAgICAgICAgICAgICAgICAJICAwID0gQWdncmVnYXRlZCwgMSA9IERpcy1hZ2dyZWdhdGUNCjM1NTogICAgICAgICAgICAgICAgIAkgIEJpdCBwb3NpdGlvbiA9IEdJUlFfTnVtYmVyIC0gOA0KMzU2OiAgICAgICAgICAgICAgICAgCSAgRXhhbXBsZTogR0lSUTIzICggMjMgLSA4ICkgPSAxNQ0KMzU3OiAgICAgICAgICAgICAgICAgCSAgRGlzLWFnZ3JlZ2F0ZSBHSVJRMjMgJiBHSVJRMjQNCjM1ODogICAgICAgICAgICAgICAgIAkgIFRoZSBzeW1ib2xzIEpUVklDX0RJU0FHUl9CSVRNQVAgaXMgZ2VuZXJhdGVkIGluIGhlYWRlciBmaWxlIG1lYzE0eHhfZ2lycW0uaA0KMzU5OiAgICAgICAgICAgICAgICAgDQozNjA6ICAgICAgICAgICAgICAgICAJICBFYWNoIGRpc2FnZ3JlZ2F0ZWQgaW50ZXJydXB0IGhhbmRsZXIgaXMgc3BhY2VkIDgtYnl0ZXMgYXBhcnQgc3RhcnRpbmcgYXQNCjM2MTogICAgICAgICAgICAgICAgIAkgIGJhc2UgYWRkcmVzcyBmb3IgdGhhdCBHSVJRLiAqLw0KMzYyOiAgICAgICAgICAgICAgICAgCWp0dmljX2luaXQoIGRmbHRfaWhfdGFibGUsICggSlRWSUNfRElTQUdSX0JJVE1BUCApLCAoIEpUVklDX0ZMQUdfRElTQUdSX1NQQUNJTkdfOCApICk7DQpCRkQwNThGNCAgQkZEMDQxQTIgICBMVUkgVjAsIDB4QkZEMA0KQkZEMDU4RjYgIDMwODJCRkQwICAgTERDMSBGMzAsIDEyNDE4KFMwKQ0KQkZEMDU4RjggIDI2RjAzMDgyICAgQURESVUgQTAsIFYwLCA5OTY4DQpCRkQwNThGQSAgICAgIDI2RjAgICBTTEwgQTEsIEEzLCA4DQpCRkQwNThGQyAgMDAwMTQxQTIgICBMVUkgVjAsIDB4MQ0KQkZEMDU5MDAgIDgwMDA1MEEyICAgT1JJIEExLCBWMCwgLTMyNzY4DQpCRkQwNTkwNCAgMUIyMjc3RTggICBKQUxTIGp0dmljX2luaXQNCkJGRDA1OTA2ICAwQ0MwMUIyMiAgIFNCIFQ5LCAzMjY0KFYwKQ0KQkZEMDU5MDggICAgICAwQ0MwICAgTU9WRSBBMiwgWkVSTw0KMzYzOiAgICAgICAgICAgICAgICAgDQozNjQ6ICAgICAgICAgICAgICAgICAJLyogSW5pdGlhbGlzZSB0aGUgTEVEcy4gKi8NCjM2NTogICAgICAgICAgICAgICAgIAlmb3IoIHVsVGVtcCA9IDA7IHVsVGVtcCA8IExFRF9JRF9NQVg7IHVsVGVtcCsrICkNCkJGRDA1OTBBICAgICAgQ0MxQSAgIEIgMHhCRkQwNTk0MA0KQkZEMDU5MEMgIDAwMTBGODFFICAgU1cgWkVSTywgMTYoUzgpDQpCRkQwNTkzNiAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNTkzQSAgICAgIDZEMjAgICBBRERJVSBWMCwgVjAsIDENCkJGRDA1OTNDICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA1OTQwICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1OTQ0ICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMw0KQkZEMDU5NDggIEZGRTI0MEEyICAgQk5FWkMgVjAsIDB4QkZEMDU5MTANCkJGRDA1OTRBICAwRkJFRkZFMiAgIExXIFJBLCA0MDMwKFYwKQ0KMzY2OiAgICAgICAgICAgICAgICAgCXsNCjM2NzogICAgICAgICAgICAgICAgIAkJbGVkX3NsZWVwX2VuKCB1bFRlbXAsIEFESVNBQkxFICk7DQpCRkQwNTkxMCAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwNTkxNCAgICAgIDJEMkQgICBBTkRJIFYwLCBWMCwgMHhGRg0KQkZEMDU5MTYgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA1OTE4ICAyRTg2NzdFOCAgIEpBTFMgbGVkX3NsZWVwX2VuDQpCRkQwNTkxQSAgICAgIDJFODYgICBBTkRJIEExLCBTMCwgMHg4DQpCRkQwNTkxQyAgICAgIDBDQTAgICBNT1ZFIEExLCBaRVJPDQozNjg6ICAgICAgICAgICAgICAgICAJCWxlZF9pbml0KCB1bFRlbXAgKTsNCkJGRDA1OTFFICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1OTIyICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGDQpCRkQwNTkyNCAgM0U3RTc3RTggICBKQUxTIGxlZF9pbml0DQpCRkQwNTkyNiAgMEM4MjNFN0UgICBMSCBTMywgMzIwMihTOCkNCkJGRDA1OTI4ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQozNjk6ICAgICAgICAgICAgICAgICAJCWxlZF9vdXRfbG93KCB1bFRlbXAgKTsNCkJGRDA1OTJBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA1OTJFICAgICAgMkQyRCAgIEFOREkgVjAsIFYwLCAweEZGDQpCRkQwNTkzMCAgNEEzMDc3RTggICBKQUxTIGxlZF9vdXRfbG93DQpCRkQwNTkzMiAgICAgIDRBMzAgICBMVyBTMSwgNjQoU1ApDQpCRkQwNTkzNCAgICAgIDBDODIgICBNT1ZFIEEwLCBWMA0KMzcwOiAgICAgICAgICAgICAgICAgCX0NCjM3MTogICAgICAgICAgICAgICAgIH0NCkJGRDA1OTRDICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwNTk0RSAgICAgIDRCRTcgICBMVyBSQSwgMjgoU1ApDQpCRkQwNTk1MCAgICAgIDRCQzYgICBMVyBTOCwgMjQoU1ApDQpCRkQwNTk1MiAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwNTk1NCAgICAgIDRDMTEgICBBRERJVSBTUCwgU1AsIDMyDQozNzI6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM3MzogICAgICAgICAgICAgICAgIA0KMzc0OiAgICAgICAgICAgICAgICAgdm9pZCB2QXBwbGljYXRpb25NYWxsb2NGYWlsZWRIb29rKCB2b2lkICkNCjM3NTogICAgICAgICAgICAgICAgIHsNCkJGRDA4OTAwICAgICAgNEZGMSAgIEFERElVIFNQLCBTUCwgLTMyDQpCRkQwODkwMiAgICAgIENCRTcgICBTVyBSQSwgMjgoU1ApDQpCRkQwODkwNCAgICAgIENCQzYgICBTVyBTOCwgMjQoU1ApDQpCRkQwODkwNiAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KMzc2OiAgICAgICAgICAgICAgICAgCS8qIHZBcHBsaWNhdGlvbk1hbGxvY0ZhaWxlZEhvb2soKSB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmDQozNzc6ICAgICAgICAgICAgICAgICAJY29uZmlnVVNFX01BTExPQ19GQUlMRURfSE9PSyBpcyBzZXQgdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oLiAgSXQgaXMgYSBob29rDQozNzg6ICAgICAgICAgICAgICAgICAJZnVuY3Rpb24gdGhhdCB3aWxsIGdldCBjYWxsZWQgaWYgYSBjYWxsIHRvIHB2UG9ydE1hbGxvYygpIGZhaWxzLg0KMzc5OiAgICAgICAgICAgICAgICAgCXB2UG9ydE1hbGxvYygpIGlzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgd2hlbmV2ZXIgYSB0YXNrLCBxdWV1ZSwNCjM4MDogICAgICAgICAgICAgICAgIAl0aW1lciBvciBzZW1hcGhvcmUgaXMgY3JlYXRlZC4gIEl0IGlzIGFsc28gY2FsbGVkIGJ5IHZhcmlvdXMgcGFydHMgb2YgdGhlDQozODE6ICAgICAgICAgICAgICAgICAJZGVtbyBhcHBsaWNhdGlvbi4gIElmIGhlYXBfMS5jIG9yIGhlYXBfMi5jIGFyZSB1c2VkLCB0aGVuIHRoZSBzaXplIG9mIHRoZQ0KMzgyOiAgICAgICAgICAgICAgICAgCWhlYXAgYXZhaWxhYmxlIHRvIHB2UG9ydE1hbGxvYygpIGlzIGRlZmluZWQgYnkgY29uZmlnVE9UQUxfSEVBUF9TSVpFIGluDQozODM6ICAgICAgICAgICAgICAgICAJRnJlZVJUT1NDb25maWcuaCwgYW5kIHRoZSB4UG9ydEdldEZyZWVIZWFwU2l6ZSgpIEFQSSBmdW5jdGlvbiBjYW4gYmUgdXNlZA0KMzg0OiAgICAgICAgICAgICAgICAgCXRvIHF1ZXJ5IHRoZSBzaXplIG9mIGZyZWUgaGVhcCBzcGFjZSB0aGF0IHJlbWFpbnMgKGFsdGhvdWdoIGl0IGRvZXMgbm90DQozODU6ICAgICAgICAgICAgICAgICAJcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIHJlbWFpbmluZyBoZWFwIG1pZ2h0IGJlIGZyYWdtZW50ZWQpLiAqLw0KMzg2OiAgICAgICAgICAgICAgICAgCXRhc2tESVNBQkxFX0lOVEVSUlVQVFMoKTsNCkJGRDA4OTA4ICA0RUI2NzdFOCAgIEpBTFMgdWxQb3J0R2V0Q1AwU3RhdHVzDQpCRkQwODkwQSAgICAgIDRFQjYgICBBRERJVSBTNSwgUzUsIC01DQpCRkQwODkwQyAgICAgIDBDMDAgICBOT1ANCkJGRDA4OTBFICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA4OTEyICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDA4OTE2ICAwMDAxNDFBMiAgIExVSSBWMCwgMHgxDQpCRkQwODkxQSAgRkMwMDUwNDIgICBPUkkgVjAsIFYwLCAtMTAyNA0KQkZEMDg5MUMgIDQ0OTNGQzAwICAgTFcgWkVSTywgMTc1NTUoWkVSTykNCkJGRDA4OTFFICAgICAgNDQ5MyAgIEFORDE2IFYwLCBWMQ0KQkZEMDg5MjAgIDUwNDAwMDQyICAgU1JMIFYwLCBWMCwgMTANCkJGRDA4OTIyICBCMDQyNTA0MCAgIE9SSSBWMCwgWkVSTywgLTIwNDE0DQpCRkQwODkyNCAgMDAwM0IwNDIgICBTTFRJVSBWMCwgVjAsIDMNCkJGRDA4OTI4ICAwMDExNDBFMiAgIEJFUVpDIFYwLCAweEJGRDA4OTRFDQpCRkQwODkyQyAgMDAxMEZDN0UgICBMVyBWMSwgMTYoUzgpDQpCRkQwODkzMCAgRkZGRTQxQTIgICBMVUkgVjAsIDB4RkZGRQ0KQkZEMDg5MzIgIDUwNDJGRkZFICAgTFcgUkEsIDIwNTQ2KFM4KQ0KQkZEMDg5MzQgIDAzRkY1MDQyICAgT1JJIFYwLCBWMCwgMTAyMw0KQkZEMDg5MzggICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwODkzQSAgMDAxMEY4NUUgICBTVyBWMCwgMTYoUzgpDQpCRkQwODkzRSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwODk0MiAgMEMwMDUwNDIgICBPUkkgVjAsIFYwLCAzMDcyDQpCRkQwODk0NCAgICAgIDBDMDAgICBOT1ANCkJGRDA4OTQ2ICAgICAgMEM4MiAgIE1PVkUgQTAsIFYwDQpCRkQwODk0OCAgNEVDNjc3RTggICBKQUxTIHZQb3J0U2V0Q1AwU3RhdHVzDQpCRkQwODk0QSAgICAgIDRFQzYgICBBRERJVSBTNiwgUzYsIDMNCkJGRDA4OTRDICAgICAgMEMwMCAgIE5PUA0KMzg3OiAgICAgICAgICAgICAgICAgCWZvciggOzsgKTsNCkJGRDA4OTRFICAgICAgQ0ZGRiAgIEIgMHhCRkQwODk0RQ0KQkZEMDg5NTAgICAgICAwQzAwICAgTk9QDQozODg6ICAgICAgICAgICAgICAgICB9DQozODk6ICAgICAgICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCjM5MDogICAgICAgICAgICAgICAgIA0KMzkxOiAgICAgICAgICAgICAgICAgdm9pZCB2QXBwbGljYXRpb25JZGxlSG9vayggdm9pZCApDQozOTI6ICAgICAgICAgICAgICAgICB7DQpCRkQwOUYwNCAgICAgIDRGQjAgICBBRERJVSBTUCwgU1AsIC04DQpCRkQwOUYwNiAgICAgIENCQzEgICBTVyBTOCwgNChTUCkNCkJGRDA5RjA4ICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQozOTM6ICAgICAgICAgICAgICAgICAJLyogdkFwcGxpY2F0aW9uSWRsZUhvb2soKSB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIGNvbmZpZ1VTRV9JRExFX0hPT0sgaXMgc2V0DQozOTQ6ICAgICAgICAgICAgICAgICAJdG8gMSBpbiBGcmVlUlRPU0NvbmZpZy5oLiAgSXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBpdGVyYXRpb24gb2YgdGhlIGlkbGUNCjM5NTogICAgICAgICAgICAgICAgIAl0YXNrLiAgSXQgaXMgZXNzZW50aWFsIHRoYXQgY29kZSBhZGRlZCB0byB0aGlzIGhvb2sgZnVuY3Rpb24gbmV2ZXIgYXR0ZW1wdHMNCjM5NjogICAgICAgICAgICAgICAgIAl0byBibG9jayBpbiBhbnkgd2F5IChmb3IgZXhhbXBsZSwgY2FsbCB4UXVldWVSZWNlaXZlKCkgd2l0aCBhIGJsb2NrIHRpbWUNCjM5NzogICAgICAgICAgICAgICAgIAlzcGVjaWZpZWQsIG9yIGNhbGwgdlRhc2tEZWxheSgpKS4gIElmIHRoZSBhcHBsaWNhdGlvbiBtYWtlcyB1c2Ugb2YgdGhlDQozOTg6ICAgICAgICAgICAgICAgICAJdlRhc2tEZWxldGUoKSBBUEkgZnVuY3Rpb24gKGFzIHRoaXMgZGVtbyBhcHBsaWNhdGlvbiBkb2VzKSB0aGVuIGl0IGlzIGFsc28NCjM5OTogICAgICAgICAgICAgICAgIAlpbXBvcnRhbnQgdGhhdCB2QXBwbGljYXRpb25JZGxlSG9vaygpIGlzIHBlcm1pdHRlZCB0byByZXR1cm4gdG8gaXRzIGNhbGxpbmcNCjQwMDogICAgICAgICAgICAgICAgIAlmdW5jdGlvbiwgYmVjYXVzZSBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGlkbGUgdGFzayB0byBjbGVhbiB1cA0KNDAxOiAgICAgICAgICAgICAgICAgCW1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIGtlcm5lbCB0byBhbnkgdGFzayB0aGF0IGhhcyBzaW5jZSBiZWVuIGRlbGV0ZWQuICovDQo0MDI6ICAgICAgICAgICAgICAgICB9DQpCRkQwOUYwQSAgICAgIDBGQkUgICBNT1ZFIFNQLCBTOA0KQkZEMDlGMEMgICAgICA0QkMxICAgTFcgUzgsIDQoU1ApDQpCRkQwOUYwRSAgICAgIDRDMDUgICBBRERJVSBTUCwgU1AsIDgNCkJGRDA5RjEwICAgICAgNDU5RiAgIEpSMTYgUkENCkJGRDA5RjEyICAgICAgMEMwMCAgIE5PUA0KNDAzOiAgICAgICAgICAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQo0MDQ6ICAgICAgICAgICAgICAgICANCjQwNTogICAgICAgICAgICAgICAgIHZvaWQgdkFwcGxpY2F0aW9uU3RhY2tPdmVyZmxvd0hvb2soIFRhc2tIYW5kbGVfdCBweFRhc2ssIGNoYXIgKnBjVGFza05hbWUgKQ0KNDA2OiAgICAgICAgICAgICAgICAgew0KQkZEMDg0NDQgICAgICA0RkYxICAgQURESVUgU1AsIFNQLCAtMzINCkJGRDA4NDQ2ICAgICAgQ0JFNyAgIFNXIFJBLCAyOChTUCkNCkJGRDA4NDQ4ICAgICAgQ0JDNiAgIFNXIFM4LCAyNChTUCkNCkJGRDA4NDRBICAgICAgMEZERCAgIE1PVkUgUzgsIFNQDQpCRkQwODQ0QyAgMDAyMEY4OUUgICBTVyBBMCwgMzIoUzgpDQpCRkQwODQ1MCAgMDAyNEY4QkUgICBTVyBBMSwgMzYoUzgpDQo0MDc6ICAgICAgICAgICAgICAgICAJKCB2b2lkICkgcGNUYXNrTmFtZTsNCjQwODogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSBweFRhc2s7DQo0MDk6ICAgICAgICAgICAgICAgICANCjQxMDogICAgICAgICAgICAgICAgIAkvKiBSdW4gdGltZSB0YXNrIHN0YWNrIG92ZXJmbG93IGNoZWNraW5nIGlzIHBlcmZvcm1lZCBpZg0KNDExOiAgICAgICAgICAgICAgICAgCWNvbmZpZ0NIRUNLX0ZPUl9TVEFDS19PVkVSRkxPVyBpcyBkZWZpbmVkIHRvIDEgb3IgMi4gIFRoaXMgaG9vawlmdW5jdGlvbiBpcw0KNDEyOiAgICAgICAgICAgICAgICAgCWNhbGxlZCBpZiBhIHRhc2sgc3RhY2sgb3ZlcmZsb3cgaXMgZGV0ZWN0ZWQuICBOb3RlIHRoZSBzeXN0ZW0vaW50ZXJydXB0DQo0MTM6ICAgICAgICAgICAgICAgICAJc3RhY2sgaXMgbm90IGNoZWNrZWQuICovDQo0MTQ6ICAgICAgICAgICAgICAgICAJdGFza0RJU0FCTEVfSU5URVJSVVBUUygpOw0KQkZEMDg0NTQgIDRFQjY3N0U4ICAgSkFMUyB1bFBvcnRHZXRDUDBTdGF0dXMNCkJGRDA4NDU2ICAgICAgNEVCNiAgIEFERElVIFM1LCBTNSwgLTUNCkJGRDA4NDU4ICAgICAgMEMwMCAgIE5PUA0KQkZEMDg0NUEgIDAwMTBGODVFICAgU1cgVjAsIDE2KFM4KQ0KQkZEMDg0NUUgIDAwMTBGQzdFICAgTFcgVjEsIDE2KFM4KQ0KQkZEMDg0NjIgIDAwMDE0MUEyICAgTFVJIFYwLCAweDENCkJGRDA4NDY2ICBGQzAwNTA0MiAgIE9SSSBWMCwgVjAsIC0xMDI0DQpCRkQwODQ2OCAgNDQ5M0ZDMDAgICBMVyBaRVJPLCAxNzU1NShaRVJPKQ0KQkZEMDg0NkEgICAgICA0NDkzICAgQU5EMTYgVjAsIFYxDQpCRkQwODQ2QyAgNTA0MDAwNDIgICBTUkwgVjAsIFYwLCAxMA0KQkZEMDg0NkUgIEIwNDI1MDQwICAgT1JJIFYwLCBaRVJPLCAtMjA0MTQNCkJGRDA4NDcwICAwMDAzQjA0MiAgIFNMVElVIFYwLCBWMCwgMw0KQkZEMDg0NzQgIDAwMTE0MEUyICAgQkVRWkMgVjAsIDB4QkZEMDg0OUENCkJGRDA4NDc4ICAwMDEwRkM3RSAgIExXIFYxLCAxNihTOCkNCkJGRDA4NDdDICBGRkZFNDFBMiAgIExVSSBWMCwgMHhGRkZFDQpCRkQwODQ3RSAgNTA0MkZGRkUgICBMVyBSQSwgMjA1NDYoUzgpDQpCRkQwODQ4MCAgMDNGRjUwNDIgICBPUkkgVjAsIFYwLCAxMDIzDQpCRkQwODQ4NCAgICAgIDQ0OTMgICBBTkQxNiBWMCwgVjENCkJGRDA4NDg2ICAwMDEwRjg1RSAgIFNXIFYwLCAxNihTOCkNCkJGRDA4NDhBICAwMDEwRkM1RSAgIExXIFYwLCAxNihTOCkNCkJGRDA4NDhFICAwQzAwNTA0MiAgIE9SSSBWMCwgVjAsIDMwNzINCkJGRDA4NDkwICAgICAgMEMwMCAgIE5PUA0KQkZEMDg0OTIgICAgICAwQzgyICAgTU9WRSBBMCwgVjANCkJGRDA4NDk0ICA0RUM2NzdFOCAgIEpBTFMgdlBvcnRTZXRDUDBTdGF0dXMNCkJGRDA4NDk2ICAgICAgNEVDNiAgIEFERElVIFM2LCBTNiwgMw0KQkZEMDg0OTggICAgICAwQzAwICAgTk9QDQo0MTU6ICAgICAgICAgICAgICAgICAJZm9yKCA7OyApOw0KQkZEMDg0OUEgICAgICBDRkZGICAgQiAweEJGRDA4NDlBDQpCRkQwODQ5QyAgICAgIDBDMDAgICBOT1ANCjQxNjogICAgICAgICAgICAgICAgIH0NCjQxNzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDE4OiAgICAgICAgICAgICAgICAgDQo0MTk6ICAgICAgICAgICAgICAgICB2b2lkIHZBcHBsaWNhdGlvblRpY2tIb29rKCB2b2lkICkNCjQyMDogICAgICAgICAgICAgICAgIHsNCkJGRDA5RjE0ICAgICAgNEZCMCAgIEFERElVIFNQLCBTUCwgLTgNCkJGRDA5RjE2ICAgICAgQ0JDMSAgIFNXIFM4LCA0KFNQKQ0KQkZEMDlGMTggICAgICAwRkREICAgTU9WRSBTOCwgU1ANCjQyMTogICAgICAgICAgICAgICAgIAkvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGVhY2ggdGljayBpbnRlcnJ1cHQgaWYNCjQyMjogICAgICAgICAgICAgICAgIAljb25maWdVU0VfVElDS19IT09LIGlzIHNldCB0byAxIGluIEZyZWVSVE9TQ29uZmlnLmguICBVc2VyIGNvZGUgY2FuIGJlDQo0MjM6ICAgICAgICAgICAgICAgICAJYWRkZWQgaGVyZSwgYnV0IHRoZSB0aWNrIGhvb2sgaXMgY2FsbGVkIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQsIHNvDQo0MjQ6ICAgICAgICAgICAgICAgICAJY29kZSBtdXN0IG5vdCBhdHRlbXB0IHRvIGJsb2NrLCBhbmQgb25seSB0aGUgaW50ZXJydXB0IHNhZmUgRnJlZVJUT1MgQVBJDQo0MjU6ICAgICAgICAgICAgICAgICAJZnVuY3Rpb25zIGNhbiBiZSB1c2VkICh0aG9zZSB0aGF0IGVuZCBpbiBGcm9tSVNSKCkpLiAqLw0KNDI2OiAgICAgICAgICAgICAgICAgfQ0KQkZEMDlGMUEgICAgICAwRkJFICAgTU9WRSBTUCwgUzgNCkJGRDA5RjFDICAgICAgNEJDMSAgIExXIFM4LCA0KFNQKQ0KQkZEMDlGMUUgICAgICA0QzA1ICAgQURESVUgU1AsIFNQLCA4DQpCRkQwOUYyMCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOUYyMiAgICAgIDBDMDAgICBOT1ANCjQyNzogICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KNDI4OiAgICAgICAgICAgICAgICAgDQo0Mjk6ICAgICAgICAgICAgICAgICB2b2lkIHZBc3NlcnRDYWxsZWQoIGNvbnN0IGNoYXIgKiBwY0ZpbGUsIHVuc2lnbmVkIGxvbmcgdWxMaW5lICkNCjQzMDogICAgICAgICAgICAgICAgIHsNCkJGRDA5NkZDICAgICAgNEZGOSAgIEFERElVIFNQLCBTUCwgLTE2DQpCRkQwOTZGRSAgICAgIENCQzMgICBTVyBTOCwgMTIoU1ApDQpCRkQwOTcwMCAgICAgIDBGREQgICBNT1ZFIFM4LCBTUA0KQkZEMDk3MDIgIDAwMTBGODlFICAgU1cgQTAsIDE2KFM4KQ0KQkZEMDk3MDYgIDAwMTRGOEJFICAgU1cgQTEsIDIwKFM4KQ0KNDMxOiAgICAgICAgICAgICAgICAgdm9sYXRpbGUgY2hhciAqcGNGaWxlTmFtZTsNCjQzMjogICAgICAgICAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgdWxMaW5lTnVtYmVyOw0KNDMzOiAgICAgICAgICAgICAgICAgDQo0MzQ6ICAgICAgICAgICAgICAgICAJLyogUHJldmVudCB0aGluZ3MgdGhhdCBhcmUgdXNlZnVsIHRvIHZpZXcgaW4gdGhlIGRlYnVnZ2VyIGZyb20gYmVpbmcNCjQzNTogICAgICAgICAgICAgICAgIAlvcHRpbWlzZWQgYXdheS4gKi8NCjQzNjogICAgICAgICAgICAgICAgIAlwY0ZpbGVOYW1lID0gKCBjaGFyICogKSBwY0ZpbGU7DQpCRkQwOTcwQSAgMDAxMEZDNUUgICBMVyBWMCwgMTYoUzgpDQpCRkQwOTcwRSAgMDAwMEY4NUUgICBTVyBWMCwgMChTOCkNCjQzNzogICAgICAgICAgICAgICAgIAkoIHZvaWQgKSBwY0ZpbGVOYW1lOw0KNDM4OiAgICAgICAgICAgICAgICAgCXVsTGluZU51bWJlciA9IHVsTGluZTsNCkJGRDA5NzEyICAwMDE0RkM1RSAgIExXIFYwLCAyMChTOCkNCkJGRDA5NzE2ICAwMDA0Rjg1RSAgIFNXIFYwLCA0KFM4KQ0KNDM5OiAgICAgICAgICAgICAgICAgDQo0NDA6ICAgICAgICAgICAgICAgICAJLyogU2V0IHVsTGluZU51bWJlciB0byAwIGluIHRoZSBkZWJ1Z2dlciB0byBicmVhayBvdXQgb2YgdGhpcyBsb29wIGFuZA0KNDQxOiAgICAgICAgICAgICAgICAgCXJldHVybiB0byB0aGUgbGluZSB0aGF0IHRyaWdnZXJlZCB0aGUgYXNzZXJ0LiAqLw0KNDQyOiAgICAgICAgICAgICAgICAgCXdoaWxlKCB1bExpbmVOdW1iZXIgIT0gMCApDQpCRkQwOTcxQSAgICAgIENDMDYgICBCIDB4QkZEMDk3MjgNCkJGRDA5NzFDICAgICAgMEMwMCAgIE5PUA0KQkZEMDk3MjggIDAwMDRGQzVFICAgTFcgVjAsIDQoUzgpDQpCRkQwOTcyQyAgRkZGNzQwQTIgICBCTkVaQyBWMCwgMHhCRkQwOTcxRQ0KQkZEMDk3MkUgIDBGQkVGRkY3ICAgTFcgUkEsIDQwMzAoUzcpDQo0NDM6ICAgICAgICAgICAgICAgICAJew0KNDQ0OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA5NzFFICAgICAgMEMwMCAgIE5PUA0KNDQ1OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA5NzIwICAgICAgMEMwMCAgIE5PUA0KNDQ2OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA5NzIyICAgICAgMEMwMCAgIE5PUA0KNDQ3OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA5NzI0ICAgICAgMEMwMCAgIE5PUA0KNDQ4OiAgICAgICAgICAgICAgICAgCQlfX2FzbSB2b2xhdGlsZSggIk5PUCIgKTsNCkJGRDA5NzI2ICAgICAgMEMwMCAgIE5PUA0KNDQ5OiAgICAgICAgICAgICAgICAgCX0NCjQ1MDogICAgICAgICAgICAgICAgIH0NCkJGRDA5NzMwICAgICAgMEZCRSAgIE1PVkUgU1AsIFM4DQpCRkQwOTczMiAgICAgIDRCQzMgICBMVyBTOCwgMTIoU1ApDQpCRkQwOTczNCAgICAgIDQ1OUYgICBKUjE2IFJBDQpCRkQwOTczNiAgICAgIDRDMDkgICBBRERJVSBTUCwgU1AsIDE2DQo0NTE6ICAgICAgICAgICAgICAgICANCi0tLSAgQzovRS9EZXYvRnJlZVJUT1MvV29ya2luZ0NvcHkvRnJlZVJUT1MvU291cmNlL3BvcnRhYmxlL01QTEFCL1BJQzMyTUVDMTR4eC9wb3J0X2FzbS5TICAtLS0tLS0tLS0tLS0tLQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogICAgICAgICBGcmVlUlRPUyBWOC4yLjEgLSBDb3B5cmlnaHQgKEMpIDIwMTUgUmVhbCBUaW1lIEVuZ2luZWVycyBMdGQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6ICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OiAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6ICAgICAgICAgVklTSVQgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcgVE8gRU5TVVJFIFlPVSBBUkUgVVNJTkcgVEhFIExBVEVTVCBWRVJTSU9OLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2OiAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6ICAgICAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVSVE9TIGRpc3RyaWJ1dGlvbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODogICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OiAgICAgICAgIEZyZWVSVE9TIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6ICAgICAgICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIpIGFzIHB1Ymxpc2hlZCBieSB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6ICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gPj4+PiBBTkQgTU9ESUZJRUQgQlkgPDw8PCB0aGUgRnJlZVJUT1MgZXhjZXB0aW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OiAgICAgICAgPj4hICAgTk9URTogVGhlIG1vZGlmaWNhdGlvbiB0byB0aGUgR1BMIGlzIGluY2x1ZGVkIHRvIGFsbG93IHlvdSB0byAgICAgITw8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OiAgICAgICAgPj4hICAgZGlzdHJpYnV0ZSBhIGNvbWJpbmVkIHdvcmsgdGhhdCBpbmNsdWRlcyBGcmVlUlRPUyB3aXRob3V0IGJlaW5nICAgITw8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAgICAgICAgPj4hICAgb2JsaWdlZCB0byBwcm92aWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgcHJvcHJpZXRhcnkgY29tcG9uZW50cyAgICAgITw8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3OiAgICAgICAgPj4hICAgb3V0c2lkZSBvZiB0aGUgRnJlZVJUT1Mga2VybmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgITw8DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OiAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA6ICAgICAgICBGcmVlUlRPUyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE6ICAgICAgICBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyOiAgICAgICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRnVsbCBsaWNlbnNlIHRleHQgaXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6ICAgICAgICBsaW5rOiBodHRwOi8vd3d3LmZyZWVydG9zLm9yZy9hMDAxMTQuaHRtbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OiAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjc6ICAgICAgICAgKiAgICBGcmVlUlRPUyBwcm92aWRlcyBjb21wbGV0ZWx5IGZyZWUgeWV0IHByb2Zlc3Npb25hbGx5IGRldmVsb3BlZCwgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODogICAgICAgICAqICAgIHJvYnVzdCwgc3RyaWN0bHkgcXVhbGl0eSBjb250cm9sbGVkLCBzdXBwb3J0ZWQsIGFuZCBjcm9zcyAgICAgICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5OiAgICAgICAgICogICAgcGxhdGZvcm0gc29mdHdhcmUgdGhhdCBpcyBtb3JlIHRoYW4ganVzdCB0aGUgbWFya2V0IGxlYWRlciwgaXQgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6ICAgICAgICAgKiAgICBpcyB0aGUgaW5kdXN0cnkncyBkZSBmYWN0byBzdGFuZGFyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTogICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyOiAgICAgICAgICogICAgSGVscCB5b3Vyc2VsZiBnZXQgc3RhcnRlZCBxdWlja2x5IHdoaWxlIHNpbXVsdGFuZW91c2x5IGhlbHBpbmcgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM6ICAgICAgICAgKiAgICB0byBzdXBwb3J0IHRoZSBGcmVlUlRPUyBwcm9qZWN0IGJ5IHB1cmNoYXNpbmcgYSBGcmVlUlRPUyAgICAgICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDogICAgICAgICAqICAgIHR1dG9yaWFsIGJvb2ssIHJlZmVyZW5jZSBtYW51YWwsIG9yIGJvdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1OiAgICAgICAgICogICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRG9jdW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzY6ICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzogICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5OiAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvRkFRSGVscC5odG1sIC0gSGF2aW5nIGEgcHJvYmxlbT8gIFN0YXJ0IGJ5IHJlYWRpbmcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA6ICAgICAgICB0aGUgRkFRIHBhZ2UgIk15IGFwcGxpY2F0aW9uIGRvZXMgbm90IHJ1biwgd2hhdCBjb3VsZCBiZSB3cm9uZz8iLiAgSGF2ZSB5b3UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDE6ICAgICAgICBkZWZpbmVkIGNvbmZpZ0FTU0VSVCgpPw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MjogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzOiAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvc3VwcG9ydCAtIEluIHJldHVybiBmb3IgcmVjZWl2aW5nIHRoaXMgdG9wIHF1YWxpdHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQ6ICAgICAgICBlbWJlZGRlZCBzb2Z0d2FyZSBmb3IgZnJlZSB3ZSByZXF1ZXN0IHlvdSBhc3Npc3Qgb3VyIGdsb2JhbCBjb21tdW5pdHkgYnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDU6ICAgICAgICBwYXJ0aWNpcGF0aW5nIGluIHRoZSBzdXBwb3J0IGZvcnVtLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NjogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OiAgICAgICAgaHR0cDovL3d3dy5GcmVlUlRPUy5vcmcvdHJhaW5pbmcgLSBJbnZlc3RpbmcgaW4gdHJhaW5pbmcgYWxsb3dzIHlvdXIgdGVhbSB0bw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODogICAgICAgIGJlIGFzIHByb2R1Y3RpdmUgYXMgcG9zc2libGUgYXMgZWFybHkgYXMgcG9zc2libGUuICBOb3cgeW91IGNhbiByZWNlaXZlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5OiAgICAgICAgRnJlZVJUT1MgdHJhaW5pbmcgZGlyZWN0bHkgZnJvbSBSaWNoYXJkIEJhcnJ5LCBDRU8gb2YgUmVhbCBUaW1lIEVuZ2luZWVycw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDogICAgICAgIEx0ZCwgYW5kIHRoZSB3b3JsZCdzIGxlYWRpbmcgYXV0aG9yaXR5IG9uIHRoZSB3b3JsZCdzIGxlYWRpbmcgUlRPUy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MjogICAgICAgIGh0dHA6Ly93d3cuRnJlZVJUT1Mub3JnL3BsdXMgLSBBIHNlbGVjdGlvbiBvZiBGcmVlUlRPUyBlY29zeXN0ZW0gcHJvZHVjdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzOiAgICAgICAgaW5jbHVkaW5nIEZyZWVSVE9TK1RyYWNlIC0gYW4gaW5kaXNwZW5zYWJsZSBwcm9kdWN0aXZpdHkgdG9vbCwgYSBET1MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTQ6ICAgICAgICBjb21wYXRpYmxlIEZBVCBmaWxlIHN5c3RlbSwgYW5kIG91ciB0aW55IHRocmVhZCBhd2FyZSBVRFAvSVAgc3RhY2suDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY6ICAgICAgICBodHRwOi8vd3d3LkZyZWVSVE9TLm9yZy9sYWJzIC0gV2hlcmUgbmV3IEZyZWVSVE9TIHByb2R1Y3RzIGdvIHRvIGluY3ViYXRlLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NzogICAgICAgIENvbWUgYW5kIHRyeSBGcmVlUlRPUytUQ1AsIG91ciBuZXcgb3BlbiBzb3VyY2UgVENQL0lQIHN0YWNrIGZvciBGcmVlUlRPUy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTg6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OTogICAgICAgIGh0dHA6Ly93d3cuT3BlblJUT1MuY29tIC0gUmVhbCBUaW1lIEVuZ2luZWVycyBsdGQuIGxpY2Vuc2UgRnJlZVJUT1MgdG8gSGlnaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MDogICAgICAgIEludGVncml0eSBTeXN0ZW1zIGx0ZC4gdG8gc2VsbCB1bmRlciB0aGUgT3BlblJUT1MgYnJhbmQuICBMb3cgY29zdCBPcGVuUlRPUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTogICAgICAgIGxpY2Vuc2VzIG9mZmVyIHRpY2tldGVkIHN1cHBvcnQsIGluZGVtbmlmaWNhdGlvbiBhbmQgY29tbWVyY2lhbCBtaWRkbGV3YXJlLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MjogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYzOiAgICAgICAgaHR0cDovL3d3dy5TYWZlUlRPUy5jb20gLSBIaWdoIEludGVncml0eSBTeXN0ZW1zIGFsc28gcHJvdmlkZSBhIHNhZmV0eQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NDogICAgICAgIGVuZ2luZWVyZWQgYW5kIGluZGVwZW5kZW50bHkgU0lMMyBjZXJ0aWZpZWQgdmVyc2lvbiBmb3IgdXNlIGluIHNhZmV0eSBhbmQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU6ICAgICAgICBtaXNzaW9uIGNyaXRpY2FsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUgcHJvdmFibGUgZGVwZW5kYWJpbGl0eS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjY6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NzogICAgICAgIDEgdGFiID09IDQgc3BhY2VzIQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2ODogICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjk6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MDogICAgI2luY2x1ZGUgPHhjLmg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcxOiAgICAjaW5jbHVkZSA8c3lzL2FzbS5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MjogICAgI2luY2x1ZGUgIkZyZWVSVE9TQ29uZmlnLmgiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDczOiAgICAjaW5jbHVkZSAiSVNSX1N1cHBvcnQuaCINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzQ6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc2OiAgICAJLmV4dGVybiBweEN1cnJlbnRUQ0INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzc6ICAgIAkuZXh0ZXJuIHZUYXNrU3dpdGNoQ29udGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ODogICAgCS5leHRlcm4gdlBvcnRJbmNyZW1lbnRUaWNrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc5OiAgICAJLmV4dGVybiB4SVNSU3RhY2tUb3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODA6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MTogICAgCVBPUlRfQ1BQX0pUVklDX0JBU0UgPSAweEJGRkZDMDAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgyOiAgICAJUE9SVF9DQ1BfSlRWSUNfR0lSUTI0X1NSQyA9IDB4QkZGRkMxMDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODM6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NDogICAgCS5nbG9iYWwgdlBvcnRTdGFydEZpcnN0VGFzayAudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NTogICAgCS5nbG9iYWwgdlBvcnRZaWVsZElTUiAudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NjogICAgCS5nbG9iYWwgdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlciAudGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg4OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODk6ICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTE6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MjogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MzogICAgKiAgVGhlIGZvbGxvd2luZyBpcyBuZWVkZWQgdG8gbG9jYXRlIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NDogICAgKiAgdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlciBmdW5jdGlvbiBpbnRvIHRoZSBjb3JyZWN0IHZlY3Rvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NTogICAgKiAgTUVDMTR4eCAtIFRoaXMgSVNSIHdpbGwgb25seSBiZSB1c2VkIGlmIEhXIHRpbWVycycgaW50ZXJydXB0cw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NjogICAgKiAgaW4gR0lSUTIzIGFyZSBkaXNhZ2dyZWdhdGVkLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NzogICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5ODogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDogICAJLnNldCAgbm9yZW9yZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMTogICAJLnNldCAgbm9hdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI6ICAgCS5zZXQgIG1pY3JvbWlwcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNDogICAJLnNlY3Rpb24gLnRleHQsIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA1OiAgIAkuZW50ICAgIHZQb3J0VGlja0ludGVycnVwdEhhbmRsZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDc6ICAgI2lmIGNvbmZpZ1RJTUVSU19ESVNBR0dSRUdBVEVEX0lTUlMgPT0gMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOTogICAJLmdsb2JsIGdpcnEyM19pc3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTE6ICAgZ2lycTIzX2lzcjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEyOiAgIHZQb3J0VGlja0ludGVycnVwdEhhbmRsZXI6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE0OiAgIAlwb3J0U0FWRV9DT05URVhUMiB2cHRpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE2OiAgIAlqYWwJCWdpcnEyM19oYW5kbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNzogICAJbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE5OiAgIAlwb3J0UkVTVE9SRV9DT05URVhUDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIxOiAgIC5lbmQgdlBvcnRUaWNrSW50ZXJydXB0SGFuZGxlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMzogICAjZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNTogICAJLmdsb2JsIGdpcnEyM19iNA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNzogICBnaXJxMjNfYjQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyODogICB2UG9ydFRpY2tJbnRlcnJ1cHRIYW5kbGVyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjk6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMDogICAJLyogICAgcG9ydFNBVkVfQ09OVEVYVCAgICovDQpCRkQwMDkyMCAgMDBGQzAzNEQgICBNRkMwIEswLCBDYXVzZSAgICAgICAgICAgICAgIDEzMTogICAJcG9ydFNBVkVfQ09OVEVYVDIgdnB0aQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzI6ICAgDQpCRkQwMDlGMCAgMzREQ0Y3RTggICBKQUwgMHhCRkQwNjlCOCAgICAgICAgICAgICAgIDEzMzogICAJamFsCQl2UG9ydEluY3JlbWVudFRpY2sNCkJGRDAwOUY0ICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgMTM0OiAgIAlub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM1OiAgIA0KQkZEMDA5RjggIEJGRDI0MUI2ICAgTFVJIFM2LCAweEJGRDIgICAgICAgICAgICAgICAxMzY6ICAgCXBvcnRSRVNUT1JFX0NPTlRFWFQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM3OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzg6ICAgLmVuZCB2UG9ydFRpY2tJbnRlcnJ1cHRIYW5kbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQwOiAgICNlbmRpZiAvKiAjaWYgY29uZmlnVElNRVJTX0RJU0FHR1JFR0FURURfSVNSUyA9PSAwICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQyOiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ0OiAgIAkuc2V0CW1pY3JvbWlwcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDU6ICAgCS5zZXQJbm9yZW9yZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NjogICAJLnNldAlub2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ4OiAgIAkuc2VjdGlvbiAudGV4dCwgY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDk6ICAgCS5lbnQJdlBvcnRTdGFydEZpcnN0VGFzaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MTogICB2UG9ydFN0YXJ0Rmlyc3RUYXNrOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MzogICAJLyogU2ltcGx5IHJlc3RvcmUgdGhlIGNvbnRleHQgb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGhhcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTQ6ICAgCWJlZW4gY3JlYXRlZCBzbyBmYXIuICovDQpCRkQwMEFCNCAgQkZEMjQxQjYgICBMVUkgUzYsIDB4QkZEMiAgICAgICAgICAgICAgIDE1NTogICAJcG9ydFJFU1RPUkVfQ09OVEVYVA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NzogICAuZW5kIHZQb3J0U3RhcnRGaXJzdFRhc2sNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU4OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTk6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYxOiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MzogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NDogICAqICBUaGUgZm9sbG93aW5nIGlzIG5lZWRlZCB0byBsb2NhdGUgdGhlIHZQb3J0WWllbGRJU1IgZnVuY3Rpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY1OiAgICogIGludG8gdGhlIGNvcnJlY3QgdmVjdG9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NjogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY4OiAgIAkuc2V0IG1pY3JvbWlwcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjk6ICAgCS5zZXQgbm9yZW9yZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3MDogICAJLnNldCBub2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3MTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcyOiAgIAkuc2VjdGlvbiAudGV4dCwgY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzM6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3NDogICAJLmdsb2JhbCB2UG9ydFlpZWxkSVNSDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3NTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzc6ICAgI2lmIGNvbmZpZ0NQVV9ESVNBR0dSRUdBVEVEX0lTUlMgPT0gMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzg6ICAgCS5nbG9iYWwgZ2lycTI0X2lzcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzk6ICAgCS5lbnQgZ2lycTI0X2lzcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODA6ICAgZ2lycTI0X2lzcjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgxOiAgIAlsYQkJazAsIFBPUlRfQ1BQX0pUVklDX0JBU0UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTgyOiAgIAlsdwkJazAsIDB4MTBDKGswKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODM6ICAgCWFuZGkJazEsIGswLCAweDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg0OiAgIAliZ3R6CWsxLCB2UG9ydFlpZWxkSVNSDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NTogICAJbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg3OiAgIAlwb3J0U0FWRV9DT05URVhUDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4ODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg5OiAgIAlqYWwJCWdpcnEyNF9iXzBfMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MTogICAJcG9ydFJFU1RPUkVfQ09OVEVYVA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MzogICAJLmVuZCBnaXJxMjRfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5NDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk1OiAgICNlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5NjogICAJLmdsb2JhbCBnaXJxMjRfYjENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk3OiAgIGdpcnEyNF9iMToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk4OiAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTk6ICAgCQkuZW50ICB2UG9ydFlpZWxkSVNSDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDogICB2UG9ydFlpZWxkSVNSOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDE6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMjogICAJLyogTWFrZSByb29tIGZvciB0aGUgY29udGV4dC4gRmlyc3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMgc28gaXQgY2FuIGJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMzogICAJbWFuaXB1bGF0ZWQsIGFuZCB0aGUgY2F1c2UgYW5kIEVQQyByZWdpc3RlcnMgc28gdGhpZXIgb3JpZ2luYWwgdmFsdWVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwNDogICAJYXJlIGNhcHR1cmVkLiAqLw0KQkZEMDBCNzAgICAgICA0RkJGICAgQURESVUgU1AsIFNQLCAtMTMyICAgICAgICAgICAyMDU6ICAgCWFkZGl1ICAgc3AsIHNwLCAtcG9ydENPTlRFWFRfU0laRQ0KQkZEMDBCNzIgIDAwRkMwMzZDICAgTUZDMCBLMSwgU3RhdHVzICAgICAgICAgICAgICAyMDY6ICAgCW1mYzAJazEsIF9DUDBfU1RBVFVTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwNzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA4OiAgIAkvKiBBbHNvIHNhdmUgczYgYW5kIHM1IHNvIHRoZXkgY2FuIGJlIHVzZWQuICBBbnkgbmVzdGluZyBpbnRlcnJ1cHRzIHNob3VsZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDk6ICAgCW1haW50YWluIHRoZSB2YWx1ZXMgb2YgdGhlc2UgcmVnaXN0ZXJzIGFjcm9zcyB0aGUgSVNSLiAqLw0KQkZEMDBCNzYgICAgICBDQUNCICAgU1cgUzYsIDQ0KFNQKSAgICAgICAgICAgICAgICAyMTA6ICAgCXN3CQlzNiwgNDQoc3ApDQpCRkQwMEI3OCAgICAgIENBQUEgICBTVyBTNSwgNDAoU1ApICAgICAgICAgICAgICAgIDIxMTogICAJc3cJCXM1LCA0MChzcCkNCkJGRDAwQjdBICAwMDgwRkI3RCAgIFNXIEsxLCAxMjgoU1ApICAgICAgICAgICAgICAgMjEyOiAgIAlzdwkJazEsIHBvcnRTVEFUVVNfU1RBQ0tfTE9DQVRJT04oc3ApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxMzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE0OiAgIAkvKiBQcmVwYXJlIHRvIHJlLWVuYWJsZWQgaW50ZXJydXB0cyBhYm92ZSB0aGUga2VybmVsIHByaW9yaXR5LiAqLw0KQkZEMDBCN0UgIDgyOEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxMCwgNyAgICAgICAgICAyMTU6ICAgCWlucwkJazEsIHplcm8sIDEwLCA3CQkgLyogQ2xlYXIgSVBMIGJpdHMgMDo2LiAqLw0KQkZEMDBCODIgIDk0OEMwMzYwICAgSU5TIEsxLCBaRVJPLCAxOCwgMSAgICAgICAgICAyMTY6ICAgCWlucwkJazEsIHplcm8sIDE4LCAxCQkgLyogQ2xlYXIgSVBMIGJpdCA3ICAqLw0KQkZEMDBCODYgIDBDMDA1MzdCICAgT1JJIEsxLCBLMSwgMzA3MiAgICAgICAgICAgICAyMTc6ICAgCW9yaQkJazEsIGsxLCAoIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSA8PCAxMCApDQpCRkQwMEI4QSAgMjA0QzAzNjAgICBJTlMgSzEsIFpFUk8sIDEsIDQgICAgICAgICAgIDIxODogICAJaW5zCQlrMSwgemVybywgMSwgNAkJICAvKiBDbGVhciBFWEwsIEVSTCBhbmQgVU0uICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIwOiAgIAkvKiBzNSBpcyB1c2VkIGFzIHRoZSBmcmFtZSBwb2ludGVyLiAqLw0KQkZEMDBCOEUgIEE5MTAwM0EwICAgQUREIFM1LCBaRVJPLCBTUCAgICAgICAgICAgICAyMjE6ICAgCWFkZAkJczUsIHplcm8sIHNwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyMjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIzOiAgIAkvKiBTd2FwIHRvIHRoZSBzeXN0ZW0gc3RhY2suICBUaGlzIGlzIG5vdCBjb25kaXRpb25hbCBvbiB0aGUgbmVzdGluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjQ6ICAgCWNvdW50IGFzIHRoaXMgaW50ZXJydXB0IGlzIGFsd2F5cyB0aGUgbG93ZXN0IHByaW9yaXR5IGFuZCB0aGVyZWZvcmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI1OiAgIAl0aGUgbmVzdGluZyBpcyBhbHdheXMgMC4gKi8NCkJGRDAwQjkyICBCRkQxNDFCRCAgIExVSSBTUCwgMHhCRkQxICAgICAgICAgICAgICAgMjI2OiAgIAlsYQkJc3AsIHhJU1JTdGFja1RvcA0KQkZEMDBCOUEgICAgICA0QkEwICAgTFcgU1AsIDAoU1ApICAgICAgICAgICAgICAgICAyMjc6ICAgCWx3CQlzcCwgKHNwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyOTogICAJLyogU2V0IHRoZSBuZXN0aW5nIGNvdW50LiAqLw0KQkZEMDBCOUMgIEJGRDI0MUJBICAgTFVJIEswLCAweEJGRDIgICAgICAgICAgICAgICAyMzA6ICAgCWxhCQlrMCwgdXhJbnRlcnJ1cHROZXN0aW5nDQpCRkQwMEJBNCAgMDAwMTMyQzAgICBBRERJVSBTNiwgWkVSTywgMSAgICAgICAgICAgIDIzMTogICAJYWRkaXUgICBzNiwgemVybywgMQ0KQkZEMDBCQTggIDAwMDBGQURBICAgU1cgUzYsIDAoSzApICAgICAgICAgICAgICAgICAyMzI6ICAgCXN3CQlzNiwgMChrMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMzOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzQ6ICAgCS8qIHM2IGhvbGRzIHRoZSBFUEMgdmFsdWUsIHRoaXMgaXMgc2F2ZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29udGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzU6ICAgCWFmdGVyIGludGVycnVwdHMgYXJlIGVuYWJsZWQuICovDQpCRkQwMEJBQyAgMDBGQzAyQ0UgICBNRkMwIFM2LCBFUEMgICAgICAgICAgICAgICAgIDIzNjogICAJbWZjMAlzNiwgX0NQMF9FUEMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM3OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzg6ICAgCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzIGFib3ZlIGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4gKi8NCkJGRDAwQkIwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cyAgICAgICAgICAgICAgMjM5OiAgIAltdGMwCWsxLCBfQ1AwX1NUQVRVUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MTogICAJLyogU2F2ZSB0aGUgY29udGV4dCBpbnRvIHRoZSBzcGFjZSBqdXN0IGNyZWF0ZWQuICBzNiBpcyBzYXZlZCBhZ2Fpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDI6ICAgCWhlcmUgYXMgaXQgbm93IGNvbnRhaW5zIHRoZSBFUEMgdmFsdWUuICovDQpCRkQwMEJCNCAgMDA3OEZCRjUgICBTVyBSQSwgMTIwKFM1KSAgICAgICAgICAgICAgIDI0MzogICAJc3cJCXJhLCAxMjAoczUpDQpCRkQwMEJCOCAgMDA3NEZCRDUgICBTVyBTOCwgMTE2KFM1KSAgICAgICAgICAgICAgIDI0NDogICAJc3cJCXM4LCAxMTYoczUpDQpCRkQwMEJCQyAgMDA3MEZCMzUgICBTVyBUOSwgMTEyKFM1KSAgICAgICAgICAgICAgIDI0NTogICAJc3cJCXQ5LCAxMTIoczUpDQpCRkQwMEJDMCAgMDA2Q0ZCMTUgICBTVyBUOCwgMTA4KFM1KSAgICAgICAgICAgICAgIDI0NjogICAJc3cJCXQ4LCAxMDgoczUpDQpCRkQwMEJDNCAgMDA2OEY5RjUgICBTVyBUNywgMTA0KFM1KSAgICAgICAgICAgICAgIDI0NzogICAJc3cJCXQ3LCAxMDQoczUpDQpCRkQwMEJDOCAgMDA2NEY5RDUgICBTVyBUNiwgMTAwKFM1KSAgICAgICAgICAgICAgIDI0ODogICAJc3cJCXQ2LCAxMDAoczUpDQpCRkQwMEJDQyAgMDA2MEY5QjUgICBTVyBUNSwgOTYoUzUpICAgICAgICAgICAgICAgIDI0OTogICAJc3cJCXQ1LCA5NihzNSkNCkJGRDAwQkQwICAwMDVDRjk5NSAgIFNXIFQ0LCA5MihTNSkgICAgICAgICAgICAgICAgMjUwOiAgIAlzdwkJdDQsIDkyKHM1KQ0KQkZEMDBCRDQgIDAwNThGOTc1ICAgU1cgVDMsIDg4KFM1KSAgICAgICAgICAgICAgICAyNTE6ICAgCXN3CQl0MywgODgoczUpDQpCRkQwMEJEOCAgMDA1NEY5NTUgICBTVyBUMiwgODQoUzUpICAgICAgICAgICAgICAgIDI1MjogICAJc3cJCXQyLCA4NChzNSkNCkJGRDAwQkRDICAwMDUwRjkzNSAgIFNXIFQxLCA4MChTNSkgICAgICAgICAgICAgICAgMjUzOiAgIAlzdwkJdDEsIDgwKHM1KQ0KQkZEMDBCRTAgIDAwNENGOTE1ICAgU1cgVDAsIDc2KFM1KSAgICAgICAgICAgICAgICAyNTQ6ICAgCXN3CQl0MCwgNzYoczUpDQpCRkQwMEJFNCAgMDA0OEY4RjUgICBTVyBBMywgNzIoUzUpICAgICAgICAgICAgICAgIDI1NTogICAJc3cJCWEzLCA3MihzNSkNCkJGRDAwQkU4ICAwMDQ0RjhENSAgIFNXIEEyLCA2OChTNSkgICAgICAgICAgICAgICAgMjU2OiAgIAlzdwkJYTIsIDY4KHM1KQ0KQkZEMDBCRUMgIDAwNDBGOEI1ICAgU1cgQTEsIDY0KFM1KSAgICAgICAgICAgICAgICAyNTc6ICAgCXN3CQlhMSwgNjQoczUpDQpCRkQwMEJGMCAgMDAzQ0Y4OTUgICBTVyBBMCwgNjAoUzUpICAgICAgICAgICAgICAgIDI1ODogICAJc3cJCWEwLCA2MChzNSkNCkJGRDAwQkY0ICAwMDM4Rjg3NSAgIFNXIFYxLCA1NihTNSkgICAgICAgICAgICAgICAgMjU5OiAgIAlzdwkJdjEsIDU2KHM1KQ0KQkZEMDBCRjggIDAwMzRGODU1ICAgU1cgVjAsIDUyKFM1KSAgICAgICAgICAgICAgICAyNjA6ICAgCXN3CQl2MCwgNTIoczUpDQpCRkQwMEJGQyAgMDAzMEZBRjUgICBTVyBTNywgNDgoUzUpICAgICAgICAgICAgICAgIDI2MTogICAJc3cJCXM3LCA0OChzNSkNCkJGRDAwQzAwICAwMDdDRkFENSAgIFNXIFM2LCAxMjQoUzUpICAgICAgICAgICAgICAgMjYyOiAgIAlzdwkJczYsIHBvcnRFUENfU1RBQ0tfTE9DQVRJT04oczUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2MzogICAJLyogczUgYW5kIHM2IGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQuICovDQpCRkQwMEMwNCAgMDAyNEZBOTUgICBTVyBTNCwgMzYoUzUpICAgICAgICAgICAgICAgIDI2NDogICAJc3cJCXM0LCAzNihzNSkNCkJGRDAwQzA4ICAwMDIwRkE3NSAgIFNXIFMzLCAzMihTNSkgICAgICAgICAgICAgICAgMjY1OiAgIAlzdwkJczMsIDMyKHM1KQ0KQkZEMDBDMEMgIDAwMUNGQTU1ICAgU1cgUzIsIDI4KFM1KSAgICAgICAgICAgICAgICAyNjY6ICAgCXN3CQlzMiwgMjgoczUpDQpCRkQwMEMxMCAgMDAxOEZBMzUgICBTVyBTMSwgMjQoUzUpICAgICAgICAgICAgICAgIDI2NzogICAJc3cJCXMxLCAyNChzNSkNCkJGRDAwQzE0ICAwMDE0RkExNSAgIFNXIFMwLCAyMChTNSkgICAgICAgICAgICAgICAgMjY4OiAgIAlzdwkJczAsIDIwKHM1KQ0KQkZEMDBDMTggIDAwMTBGODM1ICAgU1cgQVQsIDE2KFM1KSAgICAgICAgICAgICAgICAyNjk6ICAgCXN3CQkkMSwgMTYoczUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3MDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjcxOiAgIAkvKiBzNyBpcyB1c2VkIGFzIGEgc2NyYXRjaCByZWdpc3RlciBhcyB0aGlzIHNob3VsZCBhbHdheXMgYmUgc2F2ZWQgYWNybyBzcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzI6ICAgCW5lc3RpbmcgaW50ZXJydXB0cy4gKi8NCkJGRDAwQzFDICAgICAgNDYxNyAgIE1GSEkgUzcgICAgICAgICAgICAgICAgICAgICAgMjczOiAgIAltZmhpCXM3DQpCRkQwMEMxRSAgMDAwQ0ZBRjUgICBTVyBTNywgMTIoUzUpICAgICAgICAgICAgICAgIDI3NDogICAJc3cJCXM3LCAxMihzNSkNCkJGRDAwQzIyICAgICAgNDY1NyAgIE1GTE8gUzcgICAgICAgICAgICAgICAgICAgICAgMjc1OiAgIAltZmxvCXM3DQpCRkQwMEMyNCAgMDAwOEZBRjUgICBTVyBTNywgOChTNSkgICAgICAgICAgICAgICAgIDI3NjogICAJc3cJCXM3LCA4KHM1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3ODogICAJLyogU2F2ZSB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgdGFzay4gKi8NCkJGRDAwQzI4ICBCRkQyNDFCNyAgIExVSSBTNywgMHhCRkQyICAgICAgICAgICAgICAgMjc5OiAgIAlsYQkJczcsIHB4Q3VycmVudFRDQg0KQkZEMDBDMzAgIDAwMDBGRUY3ICAgTFcgUzcsIDAoUzcpICAgICAgICAgICAgICAgICAyODA6ICAgCWx3CQlzNywgKHM3KQ0KQkZEMDBDMzQgIDAwMDBGQUI3ICAgU1cgUzUsIDAoUzcpICAgICAgICAgICAgICAgICAyODE6ICAgCXN3CQlzNSwgKHM3KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4MzogICAJLyogU2V0IHRoZSBpbnRlcnJ1cHQgbWFzayB0byB0aGUgbWF4IHByaW9yaXR5IHRoYXQgY2FuIHVzZSB0aGUgQVBJLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODQ6ICAgCVRoZSB5aWVsZCBoYW5kbGVyIHdpbGwgb25seSBiZSBjYWxsZWQgYXQgY29uZmlnS0VSTkVMX0lOVEVSUlVQVF9QUklPUklUWQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODU6ICAgCXdoaWNoIGlzIGJlbG93IGNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWSAtIHNvIHRoaXMgY2FuIG9ubHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg2OiAgIAlldmVyIHJhaXNlIHRoZSBJUEwgdmFsdWUgYW5kIG5ldmVyIGxvd2VyIGl0LiAqLw0KQkZEMDBDMzggIDQ3N0MwMDAwICAgREkgWkVSTyAgICAgICAgICAgICAgICAgICAgICAyODc6ICAgCWRpDQpCRkQwMEMzQyAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMyAgICAgICAgICAgIDI4ODogICAJZWhiDQpCRkQwMEM0MCAgMDBGQzAyRUMgICBNRkMwIFM3LCBTdGF0dXMgICAgICAgICAgICAgIDI4OTogICAJbWZjMAlzNywgX0NQMF9TVEFUVVMNCkJGRDAwQzQ0ICA4MjhDMDJFMCAgIElOUyBTNywgWkVSTywgMTAsIDcgICAgICAgICAgMjkwOiAgIAlpbnMJCXM3LCB6ZXJvLCAxMCwgNw0KQkZEMDBDNDggIDk0OEMwMkUwICAgSU5TIFM3LCBaRVJPLCAxOCwgMSAgICAgICAgICAyOTE6ICAgCWlucwkJczcsIHplcm8sIDE4LCAxDQpCRkQwMEM0QyAgMEMwMTUyRDcgICBPUkkgUzYsIFM3LCAzMDczICAgICAgICAgICAgIDI5MjogICAJb3JpCQlzNiwgczcsICggY29uZmlnTUFYX1NZU0NBTExfSU5URVJSVVBUX1BSSU9SSVRZIDw8IDEwICkgfCAxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5MzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk0OiAgIAkvKiBUaGlzIG10YzAgcmUtZW5hYmxlcyBpbnRlcnJ1cHRzLCBidXQgb25seSBhYm92ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTU6ICAgCWNvbmZpZ01BWF9TWVNDQUxMX0lOVEVSUlVQVF9QUklPUklUWS4gKi8NCkJGRDAwQzUwICAwMkZDMDJDQyAgIE1UQzAgUzYsIFN0YXR1cyAgICAgICAgICAgICAgMjk2OiAgIAltdGMwCXM2LCBfQ1AwX1NUQVRVUw0KQkZEMDBDNTQgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMgICAgICAgICAgICAyOTc6ICAgCWVoYg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5OTogICAJLyogQ2xlYXIgdGhlIHNvZnR3YXJlIGludGVycnVwdCBpbiB0aGUgY29yZS4gKi8NCkJGRDAwQzU4ICAwMEZDMDJDRCAgIE1GQzAgUzYsIENhdXNlICAgICAgICAgICAgICAgMzAwOiAgIAltZmMwCXM2LCBfQ1AwX0NBVVNFDQpCRkQwMEM1QyAgNDIwQzAyQzAgICBJTlMgUzYsIFpFUk8sIDgsIDEgICAgICAgICAgIDMwMTogICAJaW5zCQlzNiwgemVybywgOCwgMQ0KQkZEMDBDNjAgIDAyRkMwMkNEICAgTVRDMCBTNiwgQ2F1c2UgICAgICAgICAgICAgICAzMDI6ICAgCW10YzAJczYsIF9DUDBfQ0FVU0UNCkJGRDAwQzY0ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzICAgICAgICAgICAgMzAzOiAgIAllaGINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA0OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDU6ICAgCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDY6ICAgCU1FQzE0eHggR0lSUTI0IFNvdXJjZSBiaXRbMV0gPSAxIHRvIGNsZWFyICovDQpCRkQwMEM2OCAgQkZGRjQxQjYgICBMVUkgUzYsIDB4QkZGRiAgICAgICAgICAgICAgIDMwNzogICAJbGEJCXM2LCBQT1JUX0NDUF9KVFZJQ19HSVJRMjRfU1JDDQpCRkQwMEM3MCAgMDAwMjMyODAgICBBRERJVSBTNCwgWkVSTywgMiAgICAgICAgICAgIDMwODogICAJYWRkaXUgICBzNCwgemVybywgMg0KQkZEMDBDNzQgIDAwMDBGQTk2ICAgU1cgUzQsIDAoUzYpICAgICAgICAgICAgICAgICAzMDk6ICAgCXN3CQlzNCwgKHM2KQ0KQkZEMDBDNzggIDE2REVGN0U4ICAgSkFMIDB4QkZEMDJEQkMgICAgICAgICAgICAgICAzMTA6ICAgCWphbAkJdlRhc2tTd2l0Y2hDb250ZXh0DQpCRkQwMEM3QyAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDMxMTogICAJbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxMjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEzOiAgIAkvKiBDbGVhciB0aGUgaW50ZXJydXB0IG1hc2sgYWdhaW4uIFRoZSBzYXZlZCBzdGF0dXMgdmFsdWUgaXMgc3RpbGwgaW4gczcgKi8NCkJGRDAwQzgwICAwMkZDMDJFQyAgIE1UQzAgUzcsIFN0YXR1cyAgICAgICAgICAgICAgMzE0OiAgIAltdGMwCXM3LCBfQ1AwX1NUQVRVUw0KQkZEMDBDODQgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMgICAgICAgICAgICAzMTU6ICAgCWVoYg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxNzogICAJLyogUmVzdG9yZSB0aGUgc3RhY2sgcG9pbnRlciBmcm9tIHRoZSBUQ0IuICovDQpCRkQwMEM4OCAgQkZEMjQxQjAgICBMVUkgUzAsIDB4QkZEMiAgICAgICAgICAgICAgIDMxODogICAJbGEJCXMwLCBweEN1cnJlbnRUQ0INCkJGRDAwQzkwICAgICAgNjgwMCAgIExXIFMwLCAwKFMwKSAgICAgICAgICAgICAgICAgMzE5OiAgIAlsdwkJczAsIChzMCkNCkJGRDAwQzkyICAwMDAwRkVCMCAgIExXIFM1LCAwKFMwKSAgICAgICAgICAgICAgICAgMzIwOiAgIAlsdwkJczUsIChzMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIxOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjI6ICAgCS8qIFJlc3RvcmUgdGhlIHJlc3Qgb2YgdGhlIGNvbnRleHQuICovDQpCRkQwMEM5NiAgMDAwOEZFMTUgICBMVyBTMCwgOChTNSkgICAgICAgICAgICAgICAgIDMyMzogICAJbHcJCXMwLCA4KHM1KQ0KQkZEMDBDOUEgIDNEN0MwMDEwICAgTVRMTyBTMCAgICAgICAgICAgICAgICAgICAgICAzMjQ6ICAgCW10bG8JczANCkJGRDAwQzlFICAwMDBDRkUxNSAgIExXIFMwLCAxMihTNSkgICAgICAgICAgICAgICAgMzI1OiAgIAlsdwkJczAsIDEyKHM1KQ0KQkZEMDBDQTIgIDJEN0MwMDEwICAgTVRISSBTMCAgICAgICAgICAgICAgICAgICAgICAzMjY6ICAgCW10aGkJczANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI3OiAgIA0KQkZEMDBDQTYgIDAwMTBGQzM1ICAgTFcgQVQsIDE2KFM1KSAgICAgICAgICAgICAgICAzMjg6ICAgCWx3CQkkMSwgMTYoczUpDQpCRkQwMENBQSAgMDAxNEZFMTUgICBMVyBTMCwgMjAoUzUpICAgICAgICAgICAgICAgIDMyOTogICAJbHcJCXMwLCAyMChzNSkNCkJGRDAwQ0FFICAwMDE4RkUzNSAgIExXIFMxLCAyNChTNSkgICAgICAgICAgICAgICAgMzMwOiAgIAlsdwkJczEsIDI0KHM1KQ0KQkZEMDBDQjIgIDAwMUNGRTU1ICAgTFcgUzIsIDI4KFM1KSAgICAgICAgICAgICAgICAzMzE6ICAgCWx3CQlzMiwgMjgoczUpDQpCRkQwMENCNiAgMDAyMEZFNzUgICBMVyBTMywgMzIoUzUpICAgICAgICAgICAgICAgIDMzMjogICAJbHcJCXMzLCAzMihzNSkNCkJGRDAwQ0JBICAwMDI0RkU5NSAgIExXIFM0LCAzNihTNSkgICAgICAgICAgICAgICAgMzMzOiAgIAlsdwkJczQsIDM2KHM1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzNTogICAJLyogczUgaXMgbG9hZGVkIGxhdGVyLiAqLw0KQkZEMDBDQkUgIDAwMkNGRUQ1ICAgTFcgUzYsIDQ0KFM1KSAgICAgICAgICAgICAgICAzMzY6ICAgCWx3CQlzNiwgNDQoczUpDQpCRkQwMENDMiAgMDAzMEZFRjUgICBMVyBTNywgNDgoUzUpICAgICAgICAgICAgICAgIDMzNzogICAJbHcJCXM3LCA0OChzNSkNCkJGRDAwQ0M2ICAwMDM0RkM1NSAgIExXIFYwLCA1MihTNSkgICAgICAgICAgICAgICAgMzM4OiAgIAlsdwkJdjAsIDUyKHM1KQ0KQkZEMDBDQ0EgIDAwMzhGQzc1ICAgTFcgVjEsIDU2KFM1KSAgICAgICAgICAgICAgICAzMzk6ICAgCWx3CQl2MSwgNTYoczUpDQpCRkQwMENDRSAgMDAzQ0ZDOTUgICBMVyBBMCwgNjAoUzUpICAgICAgICAgICAgICAgIDM0MDogICAJbHcJCWEwLCA2MChzNSkNCkJGRDAwQ0QyICAwMDQwRkNCNSAgIExXIEExLCA2NChTNSkgICAgICAgICAgICAgICAgMzQxOiAgIAlsdwkJYTEsIDY0KHM1KQ0KQkZEMDBDRDYgIDAwNDRGQ0Q1ICAgTFcgQTIsIDY4KFM1KSAgICAgICAgICAgICAgICAzNDI6ICAgCWx3CQlhMiwgNjgoczUpDQpCRkQwMENEQSAgMDA0OEZDRjUgICBMVyBBMywgNzIoUzUpICAgICAgICAgICAgICAgIDM0MzogICAJbHcJCWEzLCA3MihzNSkNCkJGRDAwQ0RFICAwMDRDRkQxNSAgIExXIFQwLCA3NihTNSkgICAgICAgICAgICAgICAgMzQ0OiAgIAlsdwkJdDAsIDc2KHM1KQ0KQkZEMDBDRTIgIDAwNTBGRDM1ICAgTFcgVDEsIDgwKFM1KSAgICAgICAgICAgICAgICAzNDU6ICAgCWx3CQl0MSwgODAoczUpDQpCRkQwMENFNiAgMDA1NEZENTUgICBMVyBUMiwgODQoUzUpICAgICAgICAgICAgICAgIDM0NjogICAJbHcJCXQyLCA4NChzNSkNCkJGRDAwQ0VBICAwMDU4RkQ3NSAgIExXIFQzLCA4OChTNSkgICAgICAgICAgICAgICAgMzQ3OiAgIAlsdwkJdDMsIDg4KHM1KQ0KQkZEMDBDRUUgIDAwNUNGRDk1ICAgTFcgVDQsIDkyKFM1KSAgICAgICAgICAgICAgICAzNDg6ICAgCWx3CQl0NCwgOTIoczUpDQpCRkQwMENGMiAgMDA2MEZEQjUgICBMVyBUNSwgOTYoUzUpICAgICAgICAgICAgICAgIDM0OTogICAJbHcJCXQ1LCA5NihzNSkNCkJGRDAwQ0Y2ICAwMDY0RkRENSAgIExXIFQ2LCAxMDAoUzUpICAgICAgICAgICAgICAgMzUwOiAgIAlsdwkJdDYsIDEwMChzNSkNCkJGRDAwQ0ZBICAwMDY4RkRGNSAgIExXIFQ3LCAxMDQoUzUpICAgICAgICAgICAgICAgMzUxOiAgIAlsdwkJdDcsIDEwNChzNSkNCkJGRDAwQ0ZFICAwMDZDRkYxNSAgIExXIFQ4LCAxMDgoUzUpICAgICAgICAgICAgICAgMzUyOiAgIAlsdwkJdDgsIDEwOChzNSkNCkJGRDAwRDAyICAwMDcwRkYzNSAgIExXIFQ5LCAxMTIoUzUpICAgICAgICAgICAgICAgMzUzOiAgIAlsdwkJdDksIDExMihzNSkNCkJGRDAwRDA2ICAwMDc0RkZENSAgIExXIFM4LCAxMTYoUzUpICAgICAgICAgICAgICAgMzU0OiAgIAlsdwkJczgsIDExNihzNSkNCkJGRDAwRDBBICAwMDc4RkZGNSAgIExXIFJBLCAxMjAoUzUpICAgICAgICAgICAgICAgMzU1OiAgIAlsdwkJcmEsIDEyMChzNSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTc6ICAgCS8qIFByb3RlY3QgYWNjZXNzIHRvIHRoZSBrIHJlZ2lzdGVycywgYW5kIG90aGVycy4gKi8NCkJGRDAwRDBFICA0NzdDMDAwMCAgIERJIFpFUk8gICAgICAgICAgICAgICAgICAgICAgMzU4OiAgIAlkaQ0KQkZEMDBEMTIgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMgICAgICAgICAgICAzNTk6ICAgCWVoYg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MTogICAJLyogU2V0IG5lc3RpbmcgYmFjayB0byB6ZXJvLiAgQXMgdGhlIGxvd2VzdCBwcmlvcml0eSBpbnRlcnJ1cHQgdGhpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjI6ICAgCWludGVycnVwdCBjYW5ub3QgaGF2ZSBuZXN0ZWQuICovDQpCRkQwMEQxNiAgQkZEMjQxQkEgICBMVUkgSzAsIDB4QkZEMiAgICAgICAgICAgICAgIDM2MzogICAJbGEJCWswLCB1eEludGVycnVwdE5lc3RpbmcNCkJGRDAwRDFFICAwMDAwRjgxQSAgIFNXIFpFUk8sIDAoSzApICAgICAgICAgICAgICAgMzY0OiAgIAlzdwkJemVybywgMChrMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzY1OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjY6ICAgCS8qIFN3aXRjaCBiYWNrIHRvIHVzZSB0aGUgcmVhbCBzdGFjayBwb2ludGVyLiAqLw0KQkZEMDBEMjIgIEU5MTAwMkEwICAgQUREIFNQLCBaRVJPLCBTNSAgICAgICAgICAgICAzNjc6ICAgCWFkZAkJc3AsIHplcm8sIHM1DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2ODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzY5OiAgIAkvKiBSZXN0b3JlIHRoZSByZWFsIHM1IHZhbHVlLiAqLw0KQkZEMDBEMjYgICAgICA0QUFBICAgTFcgUzUsIDQwKFNQKSAgICAgICAgICAgICAgICAzNzA6ICAgCWx3CQlzNSwgNDAoc3ApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3MTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzcyOiAgIAkvKiBQb3AgdGhlIHN0YXR1cyBhbmQgZXBjIHZhbHVlcy4gKi8NCkJGRDAwRDI4ICAwMDgwRkY3RCAgIExXIEsxLCAxMjgoU1ApICAgICAgICAgICAgICAgMzczOiAgIAlsdwkJazEsIHBvcnRTVEFUVVNfU1RBQ0tfTE9DQVRJT04oc3ApDQpCRkQwMEQyQyAgICAgIDRCNUYgICBMVyBLMCwgMTI0KFNQKSAgICAgICAgICAgICAgIDM3NDogICAJbHcJCWswLCBwb3J0RVBDX1NUQUNLX0xPQ0FUSU9OKHNwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzU6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3NjogICAJLyogUmVtb3ZlIHN0YWNrIGZyYW1lLiAqLw0KQkZEMDBEMkUgICAgICA0QzQzICAgQURESVUgU1AsIFNQLCAxMzIgICAgICAgICAgICAzNzc6ICAgCWFkZGl1ICAgc3AsIHNwLCBwb3J0Q09OVEVYVF9TSVpFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3ODogICANCkJGRDAwRDMwICAwMkZDMDM2QyAgIE1UQzAgSzEsIFN0YXR1cyAgICAgICAgICAgICAgMzc5OiAgIAltdGMwCWsxLCBfQ1AwX1NUQVRVUw0KQkZEMDBEMzQgIDAyRkMwMzRFICAgTVRDMCBLMCwgRVBDICAgICAgICAgICAgICAgICAzODA6ICAgCW10YzAJazAsIF9DUDBfRVBDDQpCRkQwMEQzOCAgMTgwMDAwMDAgICBTTEwgWkVSTywgWkVSTywgMyAgICAgICAgICAgIDM4MTogICAJZWhiDQpCRkQwMEQzQyAgRjM3QzAwMDAgICBFUkVUICAgICAgICAgICAgICAgICAgICAgICAgIDM4MjogICAJZXJldA0KQkZEMDBENDAgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAzODM6ICAgCW5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4NTogICAuZW5kCXZQb3J0WWllbGRJU1INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4ODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg5OiAgIA0KLS0tICBDOi9FL0Rldi9GcmVlUlRPUy9Xb3JraW5nQ29weS9GcmVlUlRPUy9EZW1vL1BJQzMyTUVDMTR4eF9NUExBQi9zcmMvTUVDMTR4eC9zdGFydHVwL01QTEFCL2NydG4uUyAgLS0tDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6ICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOiAgICAgICogICAgICAgICAgICAgICAgICBDIFJ1bnRpbWUgU3RhcnR1cA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjogICAgICAqIEZpbGVuYW1lOiAgICAgICAgY3J0bi5zDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OiAgICAgICogUHJvY2Vzc29yOiAgICAgICBQSUMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6ICAgICAqIENvbXBpbGVyOiAgICAgICAgTVBMQUIgWEMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTogICAgICogICAgICAgICAgICAgICAgICBNUExBQiBYIElERQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogICAgICogQ29tcGFueTogICAgICAgICBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogICAgICogU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAgICAgKiBUaGlzIHNvZnR3YXJlIGlzIGRldmVsb3BlZCBieSBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6ICAgICAqIHN1YnNpZGlhcmllcyAoIk1pY3JvY2hpcCIpLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk6ICAgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDogICAgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogICAgICogMS4gICAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzogICAgICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU6ICAgICAqIDIuICAgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjY6ICAgICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjc6ICAgICAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTogICAgICogMy4gICAgICBNaWNyb2NoaXAncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6ICAgICAqIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI6ICAgICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTUlDUk9DSElQICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM6ICAgICAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0OiAgICAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTogICAgICogTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2OiAgICAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzogICAgICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg6ICAgICAqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XU09FVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5OiAgICAgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDogICAgICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTogICAgICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MzogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1OiAgICAjaWZkZWYgX19MSUJCVUlMRF9fDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2OiAgICAJIyBSZXBsYWNlIHRoZSBzdGFuZGFyZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gd2l0aCBhIHNpbXBsZSBmaWxlbmFtZS4gVGhpcyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc6ICAgIAkjIHByZXZlbnRzIHRoZSBsaWJyYXJ5IGJ1aWxkIGRpcmVjdG9yeSBmcm9tIHNob3dpbmcgdXAgaW4gTVBMQUIgSURFLiBJdCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg6ICAgIAkjIGFsc28gZWZmZWN0aXZlbHkgZGlzYWJsZXMgc291cmNlLWxpbmUgZGVidWdnaW5nLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTogICAgCS5maWxlIDEgImxpYnBpYzMyL3N0YXJ0dXAvY3J0bi5zIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDogICAgCS5sb2MgMSAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxOiAgICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTI6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MzogICAgCS5zZWN0aW9uIC5pbml0LCBjb2RlDQpCRkQwMDQ0MCAgOEZCRjAwMTQgICBMVyBSQSwgMjAoU1ApICAgICAgICAgICAgICAgIDU0OiAgICAJbHcJJDMxLDIwKCRzcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTU6ICAgIAlhZGR1CSRzcCwkc3AsMzINCkJGRDAwNDQ0ICAwM0UwMDAwOCAgIEpSIFJBICAgICAgICAgICAgICAgICAgICAgICAgNTY6ICAgIAlqCSQzMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4OiAgICAJLnNlY3Rpb24gLmZpbmksIGNvZGUNCkJGRDAwNDU0ICA4RkJGMDAxNCAgIExXIFJBLCAyMChTUCkgICAgICAgICAgICAgICAgNTk6ICAgIAlsdwkkMzEsMjAoJHNwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MDogICAgCWFkZHUJJHNwLCRzcCwzMg0KQkZEMDA0NTggIDAzRTAwMDA4ICAgSlIgUkEgICAgICAgICAgICAgICAgICAgICAgICA2MTogICAgCWoJJDMxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYyOiAgICANCi0tLSAgQzovRS9EZXYvRnJlZVJUT1MvV29ya2luZ0NvcHkvRnJlZVJUT1MvRGVtby9QSUMzMk1FQzE0eHhfTVBMQUIvc3JjL01FQzE0eHgvc3RhcnR1cC9NUExBQi9jcnRpLlMgIC0tLQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzogICAgICAqICAgICAgICAgICAgICAgICAgQyBSdW50aW1lIFN0YXJ0dXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDogICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6ICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY6ICAgICAgKiBGaWxlbmFtZTogICAgICAgIGNydGkucw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODogICAgICAqIFByb2Nlc3NvcjogICAgICAgUElDMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTogICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAgICAgKiBDb21waWxlcjogICAgICAgIE1QTEFCIFhDMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6ICAgICAqICAgICAgICAgICAgICAgICAgTVBMQUIgWCBJREUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI6ICAgICAqIENvbXBhbnk6ICAgICAgICAgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6ICAgICAqIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjogICAgICogVGhpcyBzb2Z0d2FyZSBpcyBkZXZlbG9wZWQgYnkgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3OiAgICAgKiBzdWJzaWRpYXJpZXMgKCJNaWNyb2NoaXAiKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OiAgICAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA6ICAgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6ICAgICAqIDEuICAgICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6ICAgICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OiAgICAgKiAyLiAgICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAgICAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OiAgICAgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk6ICAgICAqIDMuICAgICAgTWljcm9jaGlwJ3MgbmFtZSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwOiAgICAgKiBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyOiAgICAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzOiAgICAgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDogICAgICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU6ICAgICAqIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjogICAgICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzc6ICAgICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4OiAgICAgKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV1NPRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOTogICAgICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA6ICAgICAqIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDE6ICAgICAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MjogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDM6ICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQ6ICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDU6ICAgICNpZmRlZiBfX0xJQkJVSUxEX18NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDY6ICAgIAkjIFJlcGxhY2UgdGhlIHN0YW5kYXJkIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB3aXRoIGEgc2ltcGxlIGZpbGVuYW1lLiBUaGlzIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NzogICAgCSMgcHJldmVudHMgdGhlIGxpYnJhcnkgYnVpbGQgZGlyZWN0b3J5IGZyb20gc2hvd2luZyB1cCBpbiBNUExBQiBJREUuIEl0IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODogICAgCSMgYWxzbyBlZmZlY3RpdmVseSBkaXNhYmxlcyBzb3VyY2UtbGluZSBkZWJ1Z2dpbmcuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5OiAgICAJLmZpbGUgMSAibGlicGljMzIvc3RhcnR1cC9jcnRpLnMiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwOiAgICAJLmxvYyAxIDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MjogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzOiAgICAvKiA0IHNsb3RzIGZvciBhcmd1bWVudCBzcGlsbCBhcmVhLiAgMSBmb3IgY3ByZXR1cm4sIDEgZm9yIHN0YWNrLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NDogICAgICAgUmV0dXJuIHNwaWxsIG9mZnNldCBvZiA0MCBhbmQgMjAuICBBbGlnbmVkIHRvIDE2IGJ5dGVzIGZvciBuMzIuICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2OiAgICAJLnNlY3Rpb24gLmluaXQsIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc6ICAgIAkuZ2xvYmwJX2luaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTg6ICAgIAkudHlwZQlfaW5pdCxAZnVuY3Rpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTk6ICAgIF9pbml0Og0KQkZEMDA0MzggIDI3QkRGRkUwICAgQURESVUgU1AsIFNQLCAtMzIgICAgICAgICAgICA2MDogICAgCWFkZHUJJHNwLCRzcCwtMzINCkJGRDAwNDNDICBBRkJGMDAxNCAgIFNXIFJBLCAyMChTUCkgICAgICAgICAgICAgICAgNjE6ICAgIAlzdwkkMzEsMjAoJHNwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MjogICAgCQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MzogICAgCS5zZWN0aW9uIC5maW5pLCBjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0OiAgICAJLmdsb2JsCV9maW5pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1OiAgICAJLnR5cGUJX2ZpbmksQGZ1bmN0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY2OiAgICBfZmluaToNCkJGRDAwNDRDICAyN0JERkZFMCAgIEFERElVIFNQLCBTUCwgLTMyICAgICAgICAgICAgNjc6ICAgIAlhZGR1CSRzcCwkc3AsLTMyDQpCRkQwMDQ1MCAgQUZCRjAwMTQgICBTVyBSQSwgMjAoU1ApICAgICAgICAgICAgICAgIDY4OiAgICAJc3cJJDMxLDIwKCRzcCkNCi0tLSAgQzovRS9EZXYvRnJlZVJUT1MvV29ya2luZ0NvcHkvRnJlZVJUT1MvRGVtby9QSUMzMk1FQzE0eHhfTVBMQUIvc3JjL01FQzE0eHgvc3RhcnR1cC9NUExBQi9jcnQwLlMgIC0tLQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzogICAgICAqICAgICAgICAgICAgICAgICAgQyBSdW50aW1lIFN0YXJ0dXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDogICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6ICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY6ICAgICAgKiBGaWxlbmFtZTogICAgICAgIGNydDAuUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODogICAgICAqIFByb2Nlc3NvcjogICAgICAgUElDMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTogICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAgICAgKiBDb21waWxlcjogICAgICAgIE1QTEFCIFhDMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6ICAgICAqICAgICAgICAgICAgICAgICAgTVBMQUIgWCBJREUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI6ICAgICAqIENvbXBhbnk6ICAgICAgICAgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6ICAgICAqIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjogICAgICogVGhpcyBzb2Z0d2FyZSBpcyBkZXZlbG9wZWQgYnkgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3OiAgICAgKiBzdWJzaWRpYXJpZXMgKCJNaWNyb2NoaXAiKS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OiAgICAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA6ICAgICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6ICAgICAqIDEuICAgICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6ICAgICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OiAgICAgKiAyLiAgICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAgICAgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3OiAgICAgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk6ICAgICAqIDMuICAgICAgTWljcm9jaGlwJ3MgbmFtZSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwOiAgICAgKiBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyOiAgICAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzOiAgICAgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDogICAgICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU6ICAgICAqIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjogICAgICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzc6ICAgICAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFM7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4OiAgICAgKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV1NPRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOTogICAgICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA6ICAgICAqIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDE6ICAgICAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MjogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDM6ICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQ6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTogICAgI2luY2x1ZGUgPHhjLmg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2OiAgICAjaW5jbHVkZSA8Y3AwZGVmcy5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4OiAgICAvKiBNRUMxNHh4ICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5OiAgICAjZGVmaW5lIFBJQzMyX1NSU19TRVRfQ09VTlQgMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDogICAgI2RlZmluZSBJTklUX1NTWA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTogICAgI3VuZGVmIElOSVRfTU1VX01aX0ZJWEVEDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyOiAgICAjdW5kZWYgSU5JVF9MMV9DQUNIRQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0OiAgICAvKiBNRUMxNHh4IGZpbGwgc3RhY2sgd2l0aCBzZW50aW5lbCB2YWx1ZSAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTogICAgI2RlZmluZSBFTl9TVEFDS19GSUxMICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc6ICAgICNpZiAoX19YQzMyX1ZFUlNJT04gPiAxMDAwKSAmJiAhZGVmaW5lZChDUFBfSU5JVCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTg6ICAgICNkZWZpbmUgQ1BQX0lOSVQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTk6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxOiAgICAjaWYgIWRlZmluZWQoUElDMzJfU1JTX1NFVF9DT1VOVCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjI6ICAgICMgd2FybmluZyBQSUMzMl9TUlNfU0VUX0NPVU5UIG5vdCBkZWZpbmVkIG9uIGJ1aWxkIGxpbmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjM6ICAgICMgZGVmaW5lIFBJQzMyX1NSU19TRVRfQ09VTlQgMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NDogICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjY6ICAgICNpZiAhZGVmaW5lZChTVEFDS19GSUxMX1ZBTFVFKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NzogICAgIyBkZWZpbmUgU1RBQ0tfRklMTF9WQUxVRSAweERFQURCRUVGdWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjg6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2OTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcwOiAgICAvKiBUaGlzIGZpbGUgY29udGFpbnMgMzItYml0IGFzc2VtYmx5IGNvZGUgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzE6ICAgICAgICAgICAuc2V0IG5vbWlwczE2DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcyOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzM6ICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc0OiAgICAgICAgICAgICMgRW50cnkgcG9pbnQgb2YgdGhlIGVudGlyZSBhcHBsaWNhdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NTogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzY6ICAgICAgICAgICAgLnNlY3Rpb24gLnJlc2V0LGNvZGUsa2VlcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NzogICAgICAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ODogICAgICAgICAgICAuc2V0IG5vcmVvcmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OTogICAgICAgICAgICAuZW50IF9yZXNldA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgxOiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgyOiAgICAjIEJlZ2luIElTQSBzd2l0Y2hpbmcgY29kZSAjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgzOiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg0OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODU6ICAgICNpZiBkZWZpbmVkKF9fUElDMzJfSEFTX01JQ1JPTUlQUykgfHwgZGVmaW5lZChfX21pcHNfbWljcm9taXBzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4NjogICAgI2lmIGRlZmluZWQgKF9fbWlwc19taWNyb21pcHMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg3OiAgICAgICAgICAgIC5zZXQgbWljcm9taXBzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg4OiAgICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODk6ICAgIF9yZXNldDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTA6ICAgICAgICAgICAgLndvcmQgMHgxMDAwMDAwMyAgICAgLyogTUlQUzMyOiAgICBicmFuY2ggdG8gMHhCRkMwMDAxMCBmcm9tIGhlcmUgICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1pY3JvTUlQUzogQURESTMyICQwLCAkMCwgMHgwMDA3IChub3ApICAgICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBETyBOT1QgY2hhbmdlIHRoZSByZWxhdGl2ZSBicmFuY2ggICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTM6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NDogICAgICAgICAgICAud29yZCAweDAwMDAwMDAwICAgICAvKiBOT1AgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTU6ICAgIF9fcmVzZXRfbWljcm9taXBzX2lzYToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTY6ICAgICAgICAgICAgLnNldCAgICBtaWNyb21pcHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTc6ICAgICAgICAgICAgamFsICAgICBfc3RhcnR1cA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5ODogICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTk6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDA6ICAgICAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDE6ICAgICAgICAgICAvKiBEZXZpY2Ugbm90IGluIHByb3BlciBJU0EgbW9kZSAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI6ICAgICAgICAgICAuc2V0IG5vbWljcm9taXBzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMzogICBfX3Jlc2V0X3N3aXRjaF9pc2E6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNDogICAgICAgICAgIGphbCBfc3RhcnR1cA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDU6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDc6ICAgI2Vsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDk6ICAgX3Jlc2V0Og0KQkZEMDAwMDAgIDBGRjQwMEEyICAgSkFMIDB4QkZEMDAyODggICAgICAgICAgICAgICAxMTA6ICAgICAgICAgICBqYWwgX3N0YXJ0dXANCkJGRDAwMDA0ICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgMTExOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEzOiAgICNlbmRpZiAgLyogX19QSUMzMl9IQVNfTUlDUk9NSVBTICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE1OiAgICAgICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE2OiAgICAgICAgICAgLmVuZCBfcmVzZXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE3OiAgICAgICAgICAgLmdsb2JsIF9yZXNldA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTg6ICAgICAgICAgICAuc2l6ZSBfcmVzZXQsIC4tX3Jlc2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIwOiAgICAgICAgICAgLnNlY3Rpb24gLnJlc2V0LnN0YXJ0dXAsY29kZSxrZWVwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMTogICAgICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMjogICAgICAgICAgIC5zZXQgbm9yZW9yZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI0OiAgICNpZiBkZWZpbmVkIChfX21pcHNfbWljcm9taXBzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjU6ICAgICAgICAgICAuc2V0IG1pY3JvbWlwcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjY6ICAgI2Vsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI3OiAgICAgICAgICAgLnNldCBub21pY3JvbWlwcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjg6ICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMwOiAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMxOiAgICMgRW5kIElTQSBzd2l0Y2hpbmcgY29kZSAgICMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMyOiAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMzOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzY6ICAgICAgICAgICAjIFN0YXJ0dXAgY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzc6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM4OiAgICAgICAgICAgLmFsaWduIDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM5OiAgICAgICAgICAgLnNldCBub3Jlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQwOiAgICAgICAgICAgLmVudCBfc3RhcnR1cA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDE6ICAgX3N0YXJ0dXA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQzOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NDogICAgICAgICAgICMgTmV3IC0gU2V0IEJFVj0xIGZvciB0aGUgY2FzZXMgd2hlcmUgTTE0SyBpbnN0cnVjdGlvbiBwb2ludGVyIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDU6ICAgICAgICAgICAjIGlzIGNoYW5nZWQgdG8gZm9yY2UgUk9NIHRvIHJ1biBhZ2Fpbi4gQ1AwLkJFViBtdXN0IGJlIDEgdG8gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NjogICAgICAgICAgICMgc2FmZWx5IHdyaXRlIENQMC5FQkFTRQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDc6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwMjg4ICA0MDFBNjAwMCAgIE1GQzAgSzAsIFN0YXR1cyAgICAgICAgICAgICAgMTQ4OiAgICAgICAgICAgbWZjMCAgICBrMCwgX0NQMF9TVEFUVVMNCkJGRDAwMjhDICAzQzFCMDA0MCAgIExVSSBLMSwgNjQgICAgICAgICAgICAgICAgICAgMTQ5OiAgICAgICAgICAgbHVpICAgICBrMSwgMHgwMDQwDQpCRkQwMDI5MCAgMDM1QkQwMjUgICBPUiBLMCwgSzAsIEsxICAgICAgICAgICAgICAgIDE1MDogICAgICAgICAgIG9yICAgICAgazAsIGswLCBrMSAgICAgICAgIyBDUDAuU1RBVFVTLkJFVihiaXRbMjJdKSA9IDENCkJGRDAwMjk0ICA0MDlBNjAwMCAgIE1UQzAgSzAsIFN0YXR1cyAgICAgICAgICAgICAgMTUxOiAgICAgICAgICAgbXRjMCAgICBrMCwgX0NQMF9TVEFUVVMNCkJGRDAwMjk4ICAwMDAwMDBDMCAgIEVIQiAgICAgICAgICAgICAgICAgICAgICAgICAgMTUyOiAgICAgICAgICAgZWhiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU0OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NTogICAgICAgICAgICMgSW5pdGlhbGl6ZSBTdGFjayBQb2ludGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NjogICAgICAgICAgICMgICBfc3RhY2sgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGxpbmtlciBzY3JpcHQgdG8gcG9pbnQgdG8gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NzogICAgICAgICAgICMgICAgc3RhcnRpbmcgbG9jYXRpb24gb2YgdGhlIHN0YWNrIGluIERSTQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTg6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwMjlDICAzQzFEQkZEMiAgIExVSSBTUCwgLTE2NDMwICAgICAgICAgICAgICAgMTU5OiAgICAgICAgICAgbGEgICAgICBzcCxfc3RhY2sNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjE6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYyOiAgICAgICAgICAgIyBJbml0aWFsaXplIEdsb2JhbCBQb2ludGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MzogICAgICAgICAgICMgICBfZ3AgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGxpbmtlciBzY3JpcHQgdG8gcG9pbnQgdG8gIm1pZGRsZSINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY0OiAgICAgICAgICAgIyAgIG9mIHRoZSBzbWFsbCB2YXJpYWJsZXMgcmVnaW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2NTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDAyQTQgIDNDMUNCRkQyICAgTFVJIEdQLCAtMTY0MzAgICAgICAgICAgICAgICAxNjY6ICAgICAgICAgICBsYSAgICAgIGdwLF9ncA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ODogICAjaWYgKFBJQzMyX1NSU19TRVRfQ09VTlQgPT0gMikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY5OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3MDogICAgICAgICAgICMgSW5pdGlhbGl6ZSBHbG9iYWwgUG9pbnRlciBpbiBTaGFkb3cgU2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3MTogICAgICAgICAgICMgICBUaGUgU1JTQ3RsJ3MgUFNTIGZpZWxkIG11c3QgYmUgc2V0IHRvIHRoZSBzaGFkb3cgc2V0IGluIHdoaWNoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3MjogICAgICAgICAgICMgICB0byBpbml0aWFsaXplIHRoZSBnbG9iYWwgcG9pbnRlci4gIFNpbmNlIHdlIGhhdmUgb25seSBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3MzogICAgICAgICAgICMgICBzaW5nbGUgc2hhZG93IHNldCAoYmVzaWRlcyB0aGUgbm9ybWFsKSwgd2Ugd2lsbCBpbml0aWFsaXplDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3NDogICAgICAgICAgICMgICBTUlNDdGw8UFNTPiB0byBTUlNDdGw8SFNTPi4gIFdlIHRoZW4gd3JpdGUgdGhlIGdsb2JhbCBwb2ludGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3NTogICAgICAgICAgICMgICB0byB0aGUgcHJldmlvdXMgc2hhZG93IHNldCB0byBlbnN1cmUgdGhhdCBvbiBpbnRlcnJ1cHQsIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzY6ICAgICAgICAgICAjICAgZ2xvYmFsIHBvaW50ZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE3NzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzg6ICAgICAgICAgICBtZmMwICAgIHQxLF9DUDBfU1JTQ1RMICAgICAgICAgICMgUmVhZCBTUlNDdGwgcmVnaXN0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc5OiAgICAgICAgICAgYWRkICAgICB0Myx0MSx6ZXJvICAgICAgICAgICAgICAjIFNhdmUgb2ZmIGN1cnJlbnQgU1JTQ3RsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4MDogICAgICAgICAgIGV4dCAgICAgdDIsdDEsMjYsNCAgICAgICAgICAgICAgIyB0byBvYnRhaW4gSFNTIGZpZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4MTogICAgICAgICAgIGlucyAgICAgdDEsdDIsNiw0ICAgICAgICAgICAgICAgIyBQdXQgSFNTIGZpZWxkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4MjogICAgICAgICAgIG10YzAgICAgdDEsX0NQMF9TUlNDVEwgICAgICAgICAgIyBpbnRvIFNSU0N0bDxQU1M+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4MzogICAgICAgICAgIGVoYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDbGVhciBoYXphcmQgYmVmb3JlIHVzaW5nIG5ldyBTUlNDVEwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg0OiAgICAgICAgICAgd3JwZ3ByICBncCxncCAgICAgICAgICAgICAgICAgICAjIFNldCBnbG9iYWwgcG9pbnRlciBpbiBQU1MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTg1OiAgICAgICAgICAgbXRjMCAgICB0MyxfQ1AwX1NSU0NUTCAgICAgICAgICAjIFJlc3RvcmUgU1JTQ3RsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4NjogICAgICAgICAgIGVoYg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4ODogICAjZWxpZiAoUElDMzJfU1JTX1NFVF9DT1VOVCA+IDIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTA6ICAgICAgICAgICAjIEluaXRpYWxpemUgR2xvYmFsIFBvaW50ZXIgaW4gU2hhZG93IFNldChzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTE6ICAgICAgICAgICAjICAgVGhlIFNSU0N0bCBQU1MgZmllbGQgbXVzdCBiZSBzZXQgdG8gdGhlIHNoYWRvdyBzZXQgaW4gd2hpY2gNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkyOiAgICAgICAgICAgIyAgIHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbCBwb2ludGVyLiAgV2Ugd2lsbCBpbml0aWFsaXplDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5MzogICAgICAgICAgICMgICBTUlNDdGw8UFNTPiB0byB0aGUgbnVtYmVyIG9mIHJlZyBzZXRzIGFuZCB3b3JrIGRvd24gdG8gc2V0IHplcm8uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5NDogICAgICAgICAgICMgICBXZSB3cml0ZSB0aGUgZ2xvYmFsIHBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIHNoYWRvdyBzZXQgdG8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk1OiAgICAgICAgICAgIyAgIGVuc3VyZSB0aGF0IG9uIGludGVycnVwdCwgdGhlIGdsb2JhbCBwb2ludGVyIGhhcyBiZWVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5NjogICAgICAgICAgICMgICBpbml0aWFsaXplZC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk3OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5ODogICAgICAgICAgIG1mYzAgICAgdDEsX0NQMF9TUlNDVEwgICAgICAgICAgIyBSZWFkIFNSU0N0bCByZWdpc3Rlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOTk6ICAgICAgICAgICBhZGQgICAgIHQzLHQxLHplcm8gICAgICAgICAgICAgICMgU2F2ZSBvZmYgY3VycmVudCBTUlNDdGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDE6ICAgICAgICAgICBsaSAgICAgIHQyLChQSUMzMl9TUlNfU0VUX0NPVU5ULTEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAzOiAgIDE6ICAgICAgaW5zICAgICB0MSx0Miw2LDQgICAgICAgICAgICAgICAjIFB1dCBuZXh0IHNoYWRvdyBzZXQgZmllbGQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA0OiAgICAgICAgICAgbXRjMCAgICB0MSxfQ1AwX1NSU0NUTCAgICAgICAgICAjIGludG8gU1JTQ3RsPFBTUz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA1OiAgICAgICAgICAgZWhiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENsZWFyIGhhemFyZCBiZWZvcmUgdXNpbmcgbmV3IFNSU0NUTA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDY6ICAgICAgICAgICB3cnBncHIgIGdwLGdwICAgICAgICAgICAgICAgICAgICMgU2V0IGdsb2JhbCBwb2ludGVyIGluIFBTUw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwODogICAgICAgICAgIGFkZGl1ICAgdDIsdDIsLTEgICAgICAgICAgICAgICAgIyBOZXh0IGxvd2VyIHNoYWRvdyBzZXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIExvb3AgZm9yIGFsbCBzZXRzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxMDogICAgICAgICAgIGJuZSAgICAgdDIsJDAsMWIgICAgICAgICAgICAgICAgIyBEb3duIHRvIHplcm8gKG5vcm1hbCBHUFIgc2V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTE6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjEyOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMTM6ICAgICAgICAgICBtdGMwICAgIHQzLF9DUDBfU1JTQ1RMICAgICAgICAgICMgUmVzdG9yZSBTUlNDdGwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE0OiAgICAgICAgICAgZWhiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE2OiAgICNlbmRpZiAvKiAoUElDMzJfU1JTX1NFVF9DT1VOVCA+IDIpICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxNzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE4OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOTogICAgICAgICAgICMgQ2FsbCB0aGUgIm9uIHJlc2V0IiBwcm9jZWR1cmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjIwOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDJBQyAgM0MwOEJGRDEgICBMVUkgVDAsIC0xNjQzMSAgICAgICAgICAgICAgIDIyMTogICAgICAgICAgIGxhICAgICAgdDAsX29uX3Jlc2V0DQpCRkQwMDJCNCAgMDEwMEY4MDkgICBKQUxSIFQwICAgICAgICAgICAgICAgICAgICAgIDIyMjogICAgICAgICAgIGphbHIgICAgdDANCkJGRDAwMkI4ICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgMjIzOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyNDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI1OiAgICNpZiBkZWZpbmVkKElOSVRfTU1VX01aX0ZJWEVEKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjY6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI3OiAgICAgICAgICAgIyBJbml0aWFsaXplIFRMQiBmb3IgZml4ZWQgbWFwcGluZyB0byBFQkkgYW5kIFNRSQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjg6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI5OiAgICAgICAgICAgLmV4dGVybiBfX3BpYzMyX3RsYl9pbml0X2ViaV9zcWkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMwOiAgICAgICAgICAgbGEgICAgICB0MCxfX3BpYzMyX3RsYl9pbml0X2ViaV9zcWkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMxOiAgICAgICAgICAgamFsciAgICB0MA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzI6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMzOiAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzNTogICAjaWYgZGVmaW5lZChJTklUX0wxX0NBQ0hFKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzY6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM3OiAgICAgICAgICAgIyBJbml0aWFsaXplIEwxIGNhY2hlIHJlZ2lzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzODogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzk6ICAgICAgICAgICAuZXh0ZXJuIF9fcGljMzJfaW5pdF9jYWNoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDA6ICAgICAgICAgICBsYSAgICAgIHQwLF9fcGljMzJfaW5pdF9jYWNoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDE6ICAgICAgICAgICBqYWxyICAgIHQwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MjogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDM6ICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0NDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ1OiAgICNpZiBkZWZpbmVkKEVOX1NUQUNLX0ZJTEwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0NjogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDc6ICAgICAgICAgICAjIEZpbGwgc3RhY2sNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ4OiAgICAgICAgICAgIyBUT0RPIC0gaGFuZGxlIGRpZmZlcmVudCBzdGFjayBsZW5ndGhzOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDk6ICAgICAgICAgICAjIG11bGl0cGxlIG9mIDQsIDgsIDE2LCBvciAzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTA6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwMkJDICAzQzA4QkZEMiAgIExVSSBUMCwgLTE2NDMwICAgICAgICAgICAgICAgMjUxOiAgICAgICAgICAgbGEgICAgICB0MCxfc3RhY2tfc3RhcnQNCkJGRDAwMkM0ICAzQzA5QkZEMiAgIExVSSBUMSwgLTE2NDMwICAgICAgICAgICAgICAgMjUyOiAgICAgICAgICAgbGEgICAgICB0MSxfc3RhY2sNCkJGRDAwMkNDICAxMDAwMDAwNSAgIEJFUSBaRVJPLCBaRVJPLCAweEJGRDAwMkU0ICAgMjUzOiAgICAgICAgICAgYiAgICAgICBfc3RhY2tfY2hlY2sNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU0OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTU6ICAgX3N0YWNrX2luaXQ6DQpCRkQwMDJEMCAgQUQwMDAwMDAgICBTVyBaRVJPLCAwKFQwKSAgICAgICAgICAgICAgIDI1NjogICAgICAgICAgIHN3ICAgICAgemVybywweDAodDApDQpCRkQwMDJENCAgQUQwMDAwMDQgICBTVyBaRVJPLCA0KFQwKSAgICAgICAgICAgICAgIDI1NzogICAgICAgICAgIHN3ICAgICAgemVybywweDQodDApDQpCRkQwMDJEOCAgQUQwMDAwMDggICBTVyBaRVJPLCA4KFQwKSAgICAgICAgICAgICAgIDI1ODogICAgICAgICAgIHN3ICAgICAgemVybywweDgodDApDQpCRkQwMDJEQyAgQUQwMDAwMEMgICBTVyBaRVJPLCAxMihUMCkgICAgICAgICAgICAgIDI1OTogICAgICAgICAgIHN3ICAgICAgemVybywweGModDApDQpCRkQwMDJFMCAgMjUwODAwMTAgICBBRERJVSBUMCwgVDAsIDE2ICAgICAgICAgICAgIDI2MDogICAgICAgICAgIGFkZHUgICAgdDAsMTYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYxOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNjI6ICAgX3N0YWNrX2NoZWNrOg0KQkZEMDAyRTQgIDAxMDkwODJCICAgU0xUVSBBVCwgVDAsIFQxICAgICAgICAgICAgICAyNjM6ICAgICAgICAgICBibHR1ICAgIHQwLHQxLF9zdGFja19pbml0DQpCRkQwMDJFQyAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDI2NDogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNjU6ICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2NjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjY3OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2ODogICAgICAgICAgICMgQ2xlYXIgdW5pbml0aWFsaXplZCBkYXRhIHNlY3Rpb25zDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDAyRjAgIDNDMDhCRkQyICAgTFVJIFQwLCAtMTY0MzAgICAgICAgICAgICAgICAyNzA6ICAgICAgICAgICBsYSAgICAgIHQwLF9ic3NfYmVnaW4NCkJGRDAwMkY4ICAzQzA5QkZEMiAgIExVSSBUMSwgLTE2NDMwICAgICAgICAgICAgICAgMjcxOiAgICAgICAgICAgbGEgICAgICB0MSxfYnNzX2VuZA0KQkZEMDAzMDAgIDEwMDAwMDA2ICAgQkVRIFpFUk8sIFpFUk8sIDB4QkZEMDAzMUMgICAyNzI6ICAgICAgICAgICBiICAgICAgIF9ic3NfY2hlY2sNCkJGRDAwMzA0ICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgMjczOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3NDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjc1OiAgIF9ic3NfaW5pdDoNCkJGRDAwMzA4ICBBRDAwMDAwMCAgIFNXIFpFUk8sIDAoVDApICAgICAgICAgICAgICAgMjc2OiAgICAgICAgICAgc3cgICAgICB6ZXJvLDB4MCh0MCkNCkJGRDAwMzBDICBBRDAwMDAwNCAgIFNXIFpFUk8sIDQoVDApICAgICAgICAgICAgICAgMjc3OiAgICAgICAgICAgc3cgICAgICB6ZXJvLDB4NCh0MCkNCkJGRDAwMzEwICBBRDAwMDAwOCAgIFNXIFpFUk8sIDgoVDApICAgICAgICAgICAgICAgMjc4OiAgICAgICAgICAgc3cgICAgICB6ZXJvLDB4OCh0MCkNCkJGRDAwMzE0ICBBRDAwMDAwQyAgIFNXIFpFUk8sIDEyKFQwKSAgICAgICAgICAgICAgMjc5OiAgICAgICAgICAgc3cgICAgICB6ZXJvLDB4Yyh0MCkNCkJGRDAwMzE4ICAyNTA4MDAxMCAgIEFERElVIFQwLCBUMCwgMTYgICAgICAgICAgICAgMjgwOiAgICAgICAgICAgYWRkdSAgICB0MCwxNg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODE6ICAgX2Jzc19jaGVjazoNCkJGRDAwMzFDICAwMTA5MDgyQiAgIFNMVFUgQVQsIFQwLCBUMSAgICAgICAgICAgICAgMjgyOiAgICAgICAgICAgYmx0dSAgICB0MCx0MSxfYnNzX2luaXQNCkJGRDAwMzI0ICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgMjgzOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4NDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg1OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4NjogICAgICAgICAgICMgSW5pdGlhbGl6ZSBkYXRhIHVzaW5nIHRoZSBsaW5rZXItZ2VuZXJhdGVkIC5kaW5pdCB0YWJsZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyODc6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjg4OiAgICAgICAgICAgLmVxdWl2IEZNVF9DTEVBUiwwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OTogICAgICAgICAgIC5lcXVpdiBGTVRfQ09QWSwxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5MDogICBfZGluaXRfaW5pdDoNCkJGRDAwMzI4ICAzQzA4QkZEMCAgIExVSSBUMCwgLTE2NDMyICAgICAgICAgICAgICAgMjkxOiAgICAgICAgICAgbGEgICAgICB0MCxfZGluaXRfYWRkcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTI6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5MzogICAjZGVmaW5lIFNSQyB0MA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTQ6ICAgI2RlZmluZSBEU1QgdDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk1OiAgICNkZWZpbmUgTEVOIHQyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5NjogICAjZGVmaW5lIEZNVCB0Mw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTc6ICAgDQpCRkQwMDMzMCAgOEQwOTAwMDAgICBMVyBUMSwgMChUMCkgICAgICAgICAgICAgICAgIDI5ODogICAwOiAgICAgIGx3ICAgICAgRFNULDAoU1JDKQ0KQkZEMDAzMzQgIDExMjAwMDE4ICAgQkVRIFQxLCBaRVJPLCAweEJGRDAwMzk4ICAgICAyOTk6ICAgICAgICAgICBiZXF6ICAgIERTVCw5Zg0KQkZEMDAzMzggIDI1MDgwMDA0ICAgQURESVUgVDAsIFQwLCA0ICAgICAgICAgICAgICAzMDA6ICAgICAgICAgICBhZGR1ICAgIFNSQyw0DQpCRkQwMDMzQyAgOEQwQTAwMDAgICBMVyBUMiwgMChUMCkgICAgICAgICAgICAgICAgIDMwMTogICAgICAgICAgIGx3ICAgICAgTEVOLDAoU1JDKQ0KQkZEMDAzNDAgIDI1MDgwMDA0ICAgQURESVUgVDAsIFQwLCA0ICAgICAgICAgICAgICAzMDI6ICAgICAgICAgICBhZGR1ICAgIFNSQyw0DQpCRkQwMDM0NCAgOEQwQjAwMDAgICBMVyBUMywgMChUMCkgICAgICAgICAgICAgICAgIDMwMzogICAgICAgICAgIGx3ICAgICAgRk1ULDAoU1JDKQ0KQkZEMDAzNDggIDExNjAwMDA5ICAgQkVRIFQzLCBaRVJPLCAweEJGRDAwMzcwICAgICAzMDQ6ICAgICAgICAgICBiZXEgICAgIEZNVCwkMCxfZGluaXRfY2xlYXINCkJGRDAwMzRDICAyNTA4MDAwNCAgIEFERElVIFQwLCBUMCwgNCAgICAgICAgICAgICAgMzA1OiAgICAgICAgICAgYWRkdSAgICBTUkMsNA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwNzogICBfZGluaXRfY29weToNCkJGRDAwMzUwICA5MTBDMDAwMCAgIExCVSBUNCwgMChUMCkgICAgICAgICAgICAgICAgMzA4OiAgICAgICAgICAgbGJ1ICAgICB0NCwwKFNSQykNCkJGRDAwMzU0ICAyNTRBRkZGRiAgIEFERElVIFQyLCBUMiwgLTEgICAgICAgICAgICAgMzA5OiAgICAgICAgICAgc3VidSAgICBMRU4sMQ0KQkZEMDAzNTggIDI1MDgwMDAxICAgQURESVUgVDAsIFQwLCAxICAgICAgICAgICAgICAzMTA6ICAgICAgICAgICBhZGR1ICAgIFNSQywxDQpCRkQwMDM1QyAgQTEyQzAwMDAgICBTQiBUNCwgMChUMSkgICAgICAgICAgICAgICAgIDMxMTogICAgICAgICAgIHNiICAgICAgdDQsMChEU1QpDQpCRkQwMDM2MCAgMTU0MEZGRkIgICBCTkUgVDIsIFpFUk8sIDB4QkZEMDAzNTAgICAgIDMxMjogICAgICAgICAgIGJuZSAgICAgTEVOLCQwLF9kaW5pdF9jb3B5DQpCRkQwMDM2NCAgMjUyOTAwMDEgICBBRERJVSBUMSwgVDEsIDEgICAgICAgICAgICAgIDMxMzogICAgICAgICAgIGFkZHUgICAgRFNULDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE0OiAgIA0KQkZEMDAzNjggIDEwMDAwMDA1ICAgQkVRIFpFUk8sIFpFUk8sIDB4QkZEMDAzODAgICAzMTU6ICAgICAgICAgICBiICAgICAgIF9kaW5pdF9lbmQNCkJGRDAwMzZDICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgMzE2OiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxNzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzE4OiAgIF9kaW5pdF9jbGVhcjoNCkJGRDAwMzcwICBBMTIwMDAwMCAgIFNCIFpFUk8sIDAoVDEpICAgICAgICAgICAgICAgMzE5OiAgICAgICAgICAgc2IgICAgICAkMCwoRFNUKQ0KQkZEMDAzNzQgIDI1NEFGRkZGICAgQURESVUgVDIsIFQyLCAtMSAgICAgICAgICAgICAzMjA6ICAgICAgICAgICBzdWJ1ICAgIExFTiwxDQpCRkQwMDM3OCAgMTU0MEZGRkQgICBCTkUgVDIsIFpFUk8sIDB4QkZEMDAzNzAgICAgIDMyMTogICAgICAgICAgIGJuZSAgICAgTEVOLCQwLF9kaW5pdF9jbGVhcg0KQkZEMDAzN0MgIDI1MjkwMDAxICAgQURESVUgVDEsIFQxLCAxICAgICAgICAgICAgICAzMjI6ICAgICAgICAgICBhZGR1ICAgIERTVCwxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyMzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI0OiAgIF9kaW5pdF9lbmQ6DQpCRkQwMDM4MCAgMjUwODAwMDMgICBBRERJVSBUMCwgVDAsIDMgICAgICAgICAgICAgIDMyNTogICAgICAgICAgIGFkZHUgICAgU1JDLDMNCkJGRDAwMzg0ICAyNDBBRkZGQyAgIEFERElVIFQyLCBaRVJPLCAtNCAgICAgICAgICAgMzI2OiAgICAgICAgICAgYWRkaXUgICBMRU4sJDAsMHhGRkZGRkZGQw0KQkZEMDAzODggIDAxNDg0MDI0ICAgQU5EIFQwLCBUMiwgVDAgICAgICAgICAgICAgICAzMjc6ICAgICAgICAgICBhbmQgICAgIFNSQyxMRU4sU1JDDQpCRkQwMDM4QyAgOEQwOTAwMDAgICBMVyBUMSwgMChUMCkgICAgICAgICAgICAgICAgIDMyODogICAgICAgICAgIGx3ICAgICAgRFNULDAoU1JDKQ0KQkZEMDAzOTAgIDE1MjBGRkU3ICAgQk5FIFQxLCBaRVJPLCAweEJGRDAwMzMwICAgICAzMjk6ICAgICAgICAgICBibmUgICAgIERTVCwkMCwwYg0KQkZEMDAzOTQgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICAzMzA6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMxOiAgIDk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzMjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMzOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzNDogICAgICAgICAgICMgSWYgdGhlcmUgYXJlIG5vIFJBTSBmdW5jdGlvbnMsIHNraXAgdGhlIG5leHQgc2VjdGlvbiAtLQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzU6ICAgICAgICAgICAjIGluaXRpYWxpemluZyBidXMgbWF0cml4IHJlZ2lzdGVycy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM2OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDM5OCAgM0MwOTAwMDAgICBMVUkgVDEsIDAgICAgICAgICAgICAgICAgICAgIDMzNzogICAgICAgICAgIGxhICAgICAgdDEsX3JhbWZ1bmNfYmVnaW4NCkJGRDAwM0EwICAxMTIwMDAwMSAgIEJFUSBUMSwgWkVSTywgMHhCRkQwMDNBOCAgICAgMzM4OiAgICAgICAgICAgYmVxeiAgICB0MSxfcmFtZnVuY19kb25lDQpCRkQwMDNBNCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDMzOTogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0MTogICAjaWYgZGVmaW5lZChJTklUX1NTWCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQyOiAgICAgLyogTm8gaW5pdGlhbGl6YXRpb24gcmVxdWlyZWQgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQzOiAgICNlbHNlIC8qIFVzZSBCTVggKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQ0OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0NTogICAgICAgICAgICMgSW5pdGlhbGl6ZSBidXMgbWF0cml4IHJlZ2lzdGVycyBpZiBSQU0gZnVuY3Rpb25zIGV4aXN0IGluIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDY6ICAgICAgICAgICAjIGFwcGxpY2F0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0NzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDg6ICAgICAgICAgICBsYSAgICAgIHQxLF9ibXhka3BiYV9hZGRyZXNzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0OTogICAgICAgICAgIGxhICAgICAgdDIsQk1YREtQQkENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzUwOiAgICAgICAgICAgc3cgICAgICB0MSwwKHQyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTE6ICAgICAgICAgICBsYSAgICAgIHQxLF9ibXhkdWRiYV9hZGRyZXNzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1MjogICAgICAgICAgIGxhICAgICAgdDIsQk1YRFVEQkENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzUzOiAgICAgICAgICAgc3cgICAgICB0MSwwKHQyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTQ6ICAgICAgICAgICBsYSAgICAgIHQxLF9ibXhkdXBiYV9hZGRyZXNzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1NTogICAgICAgICAgIGxhICAgICAgdDIsQk1YRFVQQkENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU2OiAgICAgICAgICAgc3cgICAgICB0MSwwKHQyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTc6ICAgI2VuZGlmIC8qIElOSVRfU1NYICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM1ODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU5OiAgIF9yYW1mdW5jX2RvbmU6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYxOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MjogICAgICAgICAgICMgSW5pdGlhbGl6ZSBDUDAgcmVnaXN0ZXJzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjQ6ICAgICAgICAgICAjIEluaXRpYWxpemUgQ291bnQgcmVnaXN0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzY1OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDNBOCAgNDA4MDQ4MDAgICBNVEMwIFpFUk8sIENvdW50ICAgICAgICAgICAgIDM2NjogICAgICAgICAgIG10YzAgICAgemVybyxfQ1AwX0NPVU5UDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2NzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzY4OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2OTogICAgICAgICAgICMgSW5pdGlhbGl6ZSBDb21wYXJlIHJlZ2lzdGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3MDogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDAzQUMgIDI0MEFGRkZGICAgQURESVUgVDIsIFpFUk8sIC0xICAgICAgICAgICAzNzE6ICAgICAgICAgICBsaSAgICAgIHQyLC0xDQpCRkQwMDNCMCAgNDA4QTU4MDAgICBNVEMwIFQyLCBDb21wYXJlICAgICAgICAgICAgIDM3MjogICAgICAgICAgIG10YzAgICAgdDIsX0NQMF9DT01QQVJFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3MzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzc0OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3NTogICAgICAgICAgICMgSW5pdGlhbGl6ZSBFQmFzZSByZWdpc3Rlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzY6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwM0I0ICAzQzA5QkZEMCAgIExVSSBUMSwgLTE2NDMyICAgICAgICAgICAgICAgMzc3OiAgICAgICAgICAgbGEgICAgICB0MSxfZWJhc2VfYWRkcmVzcw0KQkZEMDAzQkMgIDQwODk3ODAxICAgTVRDMCBUMSwgRUJhc2UgICAgICAgICAgICAgICAzNzg6ICAgICAgICAgICBtdGMwICAgIHQxLF9DUDBfRUJBU0UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzc5OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODA6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzgxOiAgICAgICAgICAgIyBJbml0aWFsaXplIEludEN0bCByZWdpc3Rlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODI6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkJGRDAwM0MwICAzQzA5MDAwMCAgIExVSSBUMSwgMCAgICAgICAgICAgICAgICAgICAgMzgzOiAgICAgICAgICAgbGEgICAgICB0MSxfdmVjdG9yX3NwYWNpbmcNCkJGRDAwM0M4ICAyNDBBMDAwMCAgIEFERElVIFQyLCBaRVJPLCAwICAgICAgICAgICAgMzg0OiAgICAgICAgICAgbGkgICAgICB0MiwwICAgICAgICAgICAgICAgICAgICAjIENsZWFyIHQyIGFuZA0KQkZEMDAzQ0MgIDdEMkE0OTQ0ICAgSU5TIFQyLCBUMSwgNSwgNSAgICAgICAgICAgICAzODU6ICAgICAgICAgICBpbnMgICAgIHQyLHQxLDUsNSAgICAgICAgICAgICAgICMgc2hpZnQgdmFsdWUgdG8gVlMgZmllbGQNCkJGRDAwM0QwICA0MDhBNjAwMSAgIE1UQzAgVDIsIEludEN0bCAgICAgICAgICAgICAgMzg2OiAgICAgICAgICAgbXRjMCAgICB0MixfQ1AwX0lOVENUTA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4ODogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODk6ICAgICAgICAgICAjIEluaXRpYWxpemUgQ0FVU0UgcmVnaXN0ZXJzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5MDogICAgICAgICAgICMgLSBFbmFibGUgY291bnRpbmcgb2YgQ291bnQgcmVnaXN0ZXIgPERDID0gMD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzkxOiAgICAgICAgICAgIyAtIFVzZSBzcGVjaWFsIGV4Y2VwdGlvbiB2ZWN0b3IgPElWID0gMT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzkyOiAgICAgICAgICAgIyAtIENsZWFyIHBlbmRpbmcgc29mdHdhcmUgaW50ZXJydXB0cyA8SVAxOklQMCA9IDA+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5MzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDAzRDQgIDNDMDkwMDgwICAgTFVJIFQxLCAxMjggICAgICAgICAgICAgICAgICAzOTQ6ICAgICAgICAgICBsaSAgICAgIHQxLDB4MDA4MDAwMDANCkJGRDAwM0Q4ICA0MDg5NjgwMCAgIE1UQzAgVDEsIENhdXNlICAgICAgICAgICAgICAgMzk1OiAgICAgICAgICAgbXRjMCAgICB0MSxfQ1AwX0NBVVNFDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5NjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzk3OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5ODogICAgICAgICAgICMgSW5pdGlhbGl6ZSBTVEFUVVMgcmVnaXN0ZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzk5OiAgICAgICAgICAgIyAtIEFjY2VzcyB0byBDb3Byb2Nlc3NvciAwIG5vdCBhbGxvd2VkIGluIHVzZXIgbW9kZSA8Q1UwID0gMD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDAwOiAgICAgICAgICAgIyAtIFVzZXIgbW9kZSB1c2VzIGNvbmZpZ3VyZWQgZW5kaWFubmVzcyA8UkUgPSAwPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDE6ICAgICAgICAgICAjIC0gUHJlc2VydmUgQm9vdHN0cmFwIEV4Y2VwdGlvbiB2ZWN0b3JzIDxCRVY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwMjogICAgICAgICAgICMgLSBQcmVzZXJ2ZSBzb2Z0IHJlc2V0IDxTUj4gYW5kIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgPE5NST4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDAzOiAgICAgICAgICAgIyAtIENvckV4dGVuZCBlbmFibGVkIGJhc2VkIG9uIHdoZXRoZXIgQ29yRXh0ZW5kIFVzZXIgRGVmaW5lZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDQ6ICAgICAgICAgICAjICAgSW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCA8Q0VFID0gQ29uZmlnPFVEST4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNTogICAgICAgICAgICMgLSBEaXNhYmxlIGFueSBwZW5kaW5nIGludGVycnVwcyA8SU03Li5JTTIgPSAwLCBJTTEuLklNMCA9IDA+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNjogICAgICAgICAgICMgLSBEaXNhYmxlIGhhcmR3YXJlIGludGVycnVwdHMgPElQTDc6SVBMMiA9IDA+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNzogICAgICAgICAgICMgLSBCYXNlIG1vZGUgaXMgS2VybmVsIG1vZGUgPFVNID0gMD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA4OiAgICAgICAgICAgIyAtIEVycm9yIGxldmVsIGlzIG5vcm1hbCA8RVJMID0gMD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA5OiAgICAgICAgICAgIyAtIEV4Y2VwdGlvbiBsZXZlbCBpcyBub3JtYWwgPEVYTCA9IDA+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxMDogICAgICAgICAgICMgLSBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCA8SUUgPSAwPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTE6ICAgICAgICAgICAjIC0gRFNQcjIgQVNFIGlzIGVuYWJsZWQgZm9yIGRldmljZXMgdGhhdCBzdXBwb3J0IGl0IDxNWCA9IDE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxMjogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDAzREMgIDQwMDg4MDAwICAgTUZDMCBUMCwgQ29uZmlnICAgICAgICAgICAgICA0MTM6ICAgICAgICAgICBtZmMwICAgIHQwLF9DUDBfQ09ORklHDQpCRkQwMDNFMCAgN0QwOTA1ODAgICBFWFQgVDEsIFQwLCAyMiwgMSAgICAgICAgICAgIDQxNDogICAgICAgICAgIGV4dCAgICAgdDEsdDAsMjIsMSAgICAgICAgICAgICAgIyBFeHRyYWN0IFVESSBmcm9tIENvbmZpZyByZWdpc3Rlcg0KQkZEMDAzRTQgIDAwMDk0QzQwICAgU0xMIFQxLCBUMSwgMTcgICAgICAgICAgICAgICA0MTU6ICAgICAgICAgICBzbGwgICAgIHQxLHQxLDE3ICAgICAgICAgICAgICAgICMgTW92ZSBVREkgdG8gU3RhdHVzLkNFRSBsb2NhdGlvbg0KQkZEMDAzRTggIDQwMDg2MDAwICAgTUZDMCBUMCwgU3RhdHVzICAgICAgICAgICAgICA0MTY6ICAgICAgICAgICBtZmMwICAgIHQwLF9DUDBfU1RBVFVTDQpCRkQwMDNFQyAgM0MwMTAwNTggICBMVUkgQVQsIDg4ICAgICAgICAgICAgICAgICAgIDQxNzogICAgICAgICAgIGFuZCAgICAgdDAsdDAsMHgwMDU4MDAwMCAgICAgICAgIyBQcmVzZXJ2ZSBTUiwgTk1JLCBhbmQgQkVWDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxODogICAjaWYgZGVmaW5lZChJTklUX0RTUFIyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTk6ICAgICAgICAgICBsaSAgICAgIHQyLCAweDAxMDAwMDAwICAgICAgICAgICMgU2V0IHRoZSBTdGF0dXMuTVggYml0IHRvIGVuYWJsZSBEU1ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDIwOiAgICAgICAgICAgb3IgICAgICB0MCx0Mix0MA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MjE6ICAgI2VuZGlmDQpCRkQwMDNGNCAgMDEyODQwMjUgICBPUiBUMCwgVDEsIFQwICAgICAgICAgICAgICAgIDQyMjogICAgICAgICAgIG9yICAgICAgdDAsdDEsdDAgICAgICAgICAgICAgICAgIyBJbmNsdWRlIFN0YXR1cy5DRUUgKGZyb20gVURJKQ0KQkZEMDAzRjggIDQwODg2MDAwICAgTVRDMCBUMCwgU3RhdHVzICAgICAgICAgICAgICA0MjM6ICAgICAgICAgICBtdGMwICAgIHQwLF9DUDBfU1RBVFVTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyNDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDI1OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyNjogICAgICAgICAgICMgQ2FsbCB0aGUgIm9uIGJvb3RzdHJhcCIgcHJvY2VkdXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyNzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDAzRkMgIDNDMDhCRkQxICAgTFVJIFQwLCAtMTY0MzEgICAgICAgICAgICAgICA0Mjg6ICAgICAgICAgICBsYSAgICAgIHQwLF9vbl9ib290c3RyYXANCkJGRDAwNDA0ICAwMTAwRjgwOSAgIEpBTFIgVDAgICAgICAgICAgICAgICAgICAgICAgNDI5OiAgICAgICAgICAgamFsciAgICB0MA0KQkZEMDA0MDggIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA0MzA6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDMxOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MzI6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDMzOiAgICAgICAgICAgIyBJbml0aWFsaXplIFN0YXR1czxCRVY+IGZvciBub3JtYWwgZXhjZXB0aW9uIHZlY3RvcnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDM0OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDQwQyAgNDAwODYwMDAgICBNRkMwIFQwLCBTdGF0dXMgICAgICAgICAgICAgIDQzNTogICAgICAgICAgIG1mYzAgICAgdDAsX0NQMF9TVEFUVVMNCkJGRDAwNDEwICAzQzAxRkZCRiAgIExVSSBBVCwgLTY1ICAgICAgICAgICAgICAgICAgNDM2OiAgICAgICAgICAgYW5kICAgICB0MCx0MCwweGZmYmZmZmZmICAgICAgICAjIENsZWFyIEJFVg0KQkZEMDA0MUMgIDQwODg2MDAwICAgTVRDMCBUMCwgU3RhdHVzICAgICAgICAgICAgICA0Mzc6ICAgICAgICAgICBtdGMwICAgIHQwLF9DUDBfU1RBVFVTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDM5OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0MDogICAgICAgICAgICMgQ2FsbCBtYWluLiBXZSBkbyB0aGlzIHZpYSBhIHRodW5rIGluIHRoZSB0ZXh0IHNlY3Rpb24gc28gdGhhdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDE6ICAgICAgICAgICAjIGEgbm9ybWFsIGp1bXAgYW5kIGxpbmsgY2FuIGJlIHVzZWQsIGVuYWJsaW5nIHRoZSBzdGFydHVwIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQyOiAgICAgICAgICAgIyB0byB3b3JrIHByb3Blcmx5IHdoZXRoZXIgbWFpbiBpcyB3cml0dGVuIGluIE1JUFMxNiBvciBNSVBTMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQzOiAgICAgICAgICAgIyBjb2RlLiBJLmUuLCB0aGUgbGlua2VyIHdpbGwgY29ycmVjdGx5IGFkanVzdCB0aGUgSkFMIHRvIEpBTFggaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQ0OiAgICAgICAgICAgIyBuZWNlc3NhcnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQ1OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpCRkQwMDQyMCAgMzA4NDAwMDAgICBBTkRJIEEwLCBBMCwgMCAgICAgICAgICAgICAgIDQ0NjogICAgICAgICAgIGFuZCAgICAgYTAsYTAsMA0KQkZEMDA0MjQgIDMwQTUwMDAwICAgQU5ESSBBMSwgQTEsIDAgICAgICAgICAgICAgICA0NDc6ICAgICAgICAgICBhbmQgICAgIGExLGExLDANCkJGRDAwNDI4ICAzQzA4QkZEMCAgIExVSSBUMCwgLTE2NDMyICAgICAgICAgICAgICAgNDQ4OiAgICAgICAgICAgbGEgICAgICB0MCxfbWFpbl9lbnRyeQ0KQkZEMDA0MzAgIDAxMDAwMDA4ICAgSlIgVDAgICAgICAgICAgICAgICAgICAgICAgICA0NDk6ICAgICAgICAgICBqciAgICAgIHQwDQpCRkQwMDQzNCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1MDogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTE6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1MjogICAgICAgICAgIC5lbmQgX3N0YXJ0dXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDUzOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTQ6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1NTogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTY6ICAgICAgICAgICAjIEdlbmVyYWwgRXhjZXB0aW9uIFZlY3RvciBIYW5kbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1NzogICAgICAgICAgICMgSnVtcHMgdG8gX2dlbmVyYWxfZXhjZXB0aW9uX2NvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDU4OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1OTogICAgICAgICAgIC5zZWN0aW9uIC5nZW5faGFuZGxlcixjb2RlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2MDogICAgICAgICAgIC5zZXQgbm9yZW9yZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2MTogICAgICAgICAgIC5lbnQgX2dlbl9leGNlcHRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDYyOiAgIF9nZW5fZXhjZXB0aW9uOg0KQkZEMDAxODAgIDNDMUFCRkQwICAgTFVJIEswLCAtMTY0MzIgICAgICAgICAgICAgICA0NjM6ICAgMDogICAgICBsYSAgICAgIGswLF9nZW5lcmFsX2V4Y2VwdGlvbl9jb250ZXh0DQpCRkQwMDE4OCAgMDM0MDAwMDggICBKUiBLMCAgICAgICAgICAgICAgICAgICAgICAgIDQ2NDogICAgICAgICAgIGpyICAgICAgazANCkJGRDAwMThDICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNDY1OiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2NjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDY3OiAgICAgICAgICAgLmVuZCBfZ2VuX2V4Y2VwdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0Njg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2OTogICAjaWYgZGVmaW5lZChJTklUX01NVV9NWl9GSVhFRCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDcwOiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3MTogICAgICAgICAgICMgU2ltcGxlIFRMQi1SZWZpbGwgRXhjZXB0aW9uIFZlY3Rvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NzI6ICAgICAgICAgICAjIEp1bXBzIHRvIF9zaW1wbGVfdGxiX3JlZmlsbF9leGNlcHRpb25fY29udGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NzM6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc0OiAgICAgICAgICAgLnNlY3Rpb24gLnNpbXBsZV90bGJfcmVmaWxsX3ZlY3Rvcixjb2RlLGtlZXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc1OiAgICAgICAgICAgLnNldCBub3Jlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc2OiAgICAgICAgICAgLmVudCBzaW1wbGVfdGxiX3JlZmlsbF92ZWN0b3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc3OiAgIHNpbXBsZV90bGJfcmVmaWxsX3ZlY3RvcjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc4OiAgICAgICAgICAgbGEgICAgICBrMCxfc2ltcGxlX3RsYl9yZWZpbGxfZXhjZXB0aW9uX2NvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDc5OiAgICAgICAgICAganIgICAgICBrMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODA6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgxOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODI6ICAgICAgICAgICAuZW5kIHNpbXBsZV90bGJfcmVmaWxsX3ZlY3Rvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODM6ICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4NDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg1OiAgICNpZiBkZWZpbmVkKElOSVRfTDFfQ0FDSEUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ4NjogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODc6ICAgICAgICAgICAjIENhY2hlLUVycm9yIEV4Y2VwdGlvbiBWZWN0b3IgSGFuZGxlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODg6ICAgICAgICAgICAjIEp1bXBzIHRvIF9jYWNoZV9lcnJfZXhjZXB0aW9uX2NvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg5OiAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5MDogICAgICAgICAgIC5zZWN0aW9uIC5jYWNoZV9lcnJfdmVjdG9yLGNvZGUsa2VlcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTE6ICAgICAgICAgICAuc2V0IG5vcmVvcmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTI6ICAgICAgICAgICAuZW50IF9jYWNoZV9lcnJfdmVjdG9yDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5MzogICBfY2FjaGVfZXJyX3ZlY3RvcjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk0OiAgICAgICAgICAgbGEgICAgICBrMCxfY2FjaGVfZXJyX2V4Y2VwdGlvbl9jb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5NTogICAgICAgICAgIGpyICAgICAgazANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk2OiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ5NzogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk4OiAgICAgICAgICAgLmVuZCBfY2FjaGVfZXJyX3ZlY3Rvcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTk6ICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwMDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAxOiAgICAgICAgICAgLnNlY3Rpb24gLnRleHQubWFpbl9lbnRyeSxjb2RlLGtlZXANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTAyOiAgICAgICAgICAgLmVudCBfbWFpbl9lbnRyeQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDM6ICAgX21haW5fZW50cnk6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwNDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTA1OiAgICNpZiBkZWZpbmVkKENQUF9JTklUKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDY6ICAgICAgICAgICAud2VhayBfaW5pdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDc6ICAgICAgICAgICAjIGNhbGwgLmluaXQgc2VjdGlvbiB0byBydW4gY29uc3RydWN0b3JzIGV0Yw0KQkZEMDY4MDQgIDNDMDRCRkQwICAgTFVJIEEwLCAtMTY0MzIgICAgICAgICAgICAgICA1MDg6ICAgICAgICAgICBsdWkJYTAsJWhpKF9pbml0KQ0KQkZEMDY4MDggIDI3QkRGRkU4ICAgQURESVUgU1AsIFNQLCAtMjQgICAgICAgICAgICA1MDk6ICAgICAgICAgICBhZGRpdQlzcCxzcCwtMjQNCkJGRDA2ODBDICAyNDg0MDQzOCAgIEFERElVIEEwLCBBMCwgMTA4MCAgICAgICAgICAgNTEwOiAgICAgICAgICAgYWRkaXUJYTAsYTAsJWxvKF9pbml0KQ0KQkZEMDY4MTAgIDEwODAwMDAzICAgQkVRIEEwLCBaRVJPLCAweEJGRDA2ODIwICAgICA1MTE6ICAgICAgICAgICBiZXEJYTAsJDAsMmYNCkJGRDA2ODE0ICBBRkJGMDAxNCAgIFNXIFJBLCAyMChTUCkgICAgICAgICAgICAgICAgNTEyOiAgICAgICAgICAgc3cJJDMxLDIwKHNwKQkgIywNCkJGRDA2ODE4ICAwMDgwRjgwOSAgIEpBTFIgQTAgICAgICAgICAgICAgICAgICAgICAgNTEzOiAgICAgICAgICAgamFscglhMA0KQkZEMDY4MUMgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA1MTQ6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE1OiAgIDI6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxNjogICAjZW5kaWYNCkJGRDA2ODIwICAzMDg0MDAwMCAgIEFOREkgQTAsIEEwLCAwICAgICAgICAgICAgICAgNTE3OiAgICAgICAgICAgYW5kICAgICBhMCxhMCwwDQpCRkQwNjgyNCAgMzBBNTAwMDAgICBBTkRJIEExLCBBMSwgMCAgICAgICAgICAgICAgIDUxODogICAgICAgICAgIGFuZCAgICAgYTEsYTEsMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTk6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyMDogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MjE6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyMjogICAgICAgICAgICMgQ2FsbCBtYWluDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyMzogICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQkZEMDY4MjggIDc3RjQyNUIwICAgSkFMWCAweEJGRDA5NkMwICAgICAgICAgICAgICA1MjQ6ICAgICAgICAgICBqYWwgbWFpbg0KQkZEMDY4MkMgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA1MjU6ICAgICAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTI2OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Mjc6ICAgI2lmIGRlZmluZWQoQ0FMTF9FWElUKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Mjg6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTI5OiAgICAgICAgICAgIyBDYWxsIGV4aXQoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MzA6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTMxOiAgICAgICAgICAgamFsIGV4aXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTMyOiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzMzogICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM0OiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MzU6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM2OiAgICAgICAgICAgIyBKdXN0IGluIGNhc2UsIGdvIGludG8gaW5maW5pdGUgbG9vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Mzc6ICAgICAgICAgICAjIENhbGwgYSBzb2Z0d2FyZSBicmVha3BvaW50IG9ubHkgd2l0aCAtbWRlYnVnZ2VyIGNvbXBpbGVyIG9wdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Mzg6ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM5OiAgICAgICAgICAgLndlYWsgX19leGNlcHRpb25faGFuZGxlcl9icmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NDA6ICAgX19jcnQwX2V4aXQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0MTogICAxOg0KQkZEMDY4MzAgIDNDMDIwMDAwICAgTFVJIFYwLCAwICAgICAgICAgICAgICAgICAgICA1NDI6ICAgICAgICAgICBsYSAgICAgIHYwLF9fZXhjZXB0aW9uX2hhbmRsZXJfYnJlYWsNCkJGRDA2ODM4ICAxMDQwMDAwMyAgIEJFUSBWMCwgWkVSTywgMHhCRkQwNjg0OCAgICAgNTQzOiAgICAgICAgICAgYmVxICAgICB2MCwwLDBmDQpCRkQwNjgzQyAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDU0NDogICAgICAgICAgIG5vcA0KQkZEMDY4NDAgIDAwNDBGODA5ICAgSkFMUiBWMCAgICAgICAgICAgICAgICAgICAgICA1NDU6ICAgICAgICAgICBqYWxyICAgIHYwDQpCRkQwNjg0NCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDU0NjogICAgICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NDc6ICAgDQpCRkQwNjg0OCAgMTAwMEZGRjkgICBCRVEgWkVSTywgWkVSTywgMHhCRkQwNjgzMCAgIDU0ODogICAwOiAgICAgIGIgICAgICAgMWINCkJGRDA2ODRDICAwMDAwMDAwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNTQ5OiAgICAgICAgICAgbm9wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1MDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTUxOiAgICAgICAgICAgLmdsb2JsIF9fY3J0MF9leGl0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1MjogICAgICAgICAgIC5lbmQgX21haW5fZW50cnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTUzOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTQ6ICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTU6ICAgICAgICMgbGF1bmNoX2Z3DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1NjogICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1NzogICAgICAgLmdsb2JsICByb21fbGF1bmNoX2Z3DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1ODogICAgICAgLnNldCAgICBub21pcHMxNg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NTk6ICAgICAgIC5zZXQgICAgbWljcm9taXBzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2MDogICAgICAgLmVudCAgIHJvbV9sYXVuY2hfZncNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTYxOiAgICAgICAudHlwZSAgcm9tX2xhdW5jaF9mdywgQGZ1bmN0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2MjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTYzOiAgIHJvbV9sYXVuY2hfZnc6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2NDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY1OiAgICAgICAuc2V0ICAgIG5vcmVvcmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NjY6ICAgICAgIC5zZXQgICAgbm9tYWNybw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Njc6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2ODogICBsZncxOg0KQkZEMDY4NTAgIDQ3N0MwMDAwICAgREkgWkVSTyAgICAgICAgICAgICAgICAgICAgICA1Njk6ICAgICAgIGRpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3MDogICBsZncyOg0KQkZEMDY4NTQgIDE4MDAwMDAwICAgU0xMIFpFUk8sIFpFUk8sIDMgICAgICAgICAgICA1NzE6ICAgICAgIGVoYg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NzI6ICAgbGZ3MzoNCkJGRDA2ODU4ICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNTczOiAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc0OiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc1OiAgICAgICAjIHR1cm4gb2ZmIGNvcmUgdGltZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc2OiAgIGxmdzQ6DQpCRkQwNjg1QSAgMDBGQzAxMEQgICBNRkMwIFQwLCBDYXVzZSAgICAgICAgICAgICAgIDU3NzogICAgICAgbWZjMCAgICB0MCwgX0NQMF9DQVVTRQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Nzg6ICAgbGZ3NToNCkJGRDA2ODVFICBGN0ZGNDFBOSAgIExVSSBUMSwgMHhGN0ZGICAgICAgICAgICAgICAgNTc5OiAgICAgICBsdWkgICAgIHQxLCAweGY3ZmYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTgwOiAgIGxmdzY6DQpCRkQwNjg2MiAgRkZGRjUxMjkgICBPUkkgVDEsIFQxLCAtMSAgICAgICAgICAgICAgIDU4MTogICAgICAgb3JpICAgICB0MSwgdDEsIDB4ZmZmZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ODI6ICAgbGZ3NzoNCkJGRDA2ODY2ICA0MjUwMDEyOCAgIEFORCBUMCwgVDAsIFQxICAgICAgICAgICAgICAgNTgzOiAgICAgICBhbmQgICAgIHQwLCB0MCwgdDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTg0OiAgIGxmdzg6DQpCRkQwNjg2QSAgMDJGQzAxMEQgICBNVEMwIFQwLCBDYXVzZSAgICAgICAgICAgICAgIDU4NTogICAgICAgbXRjMCAgICB0MCwgX0NQMF9DQVVTRQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ODY6ICAgbGZ3OToNCkJGRDA2ODZFICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzICAgICAgICAgICAgNTg3OiAgICAgICBlaGINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTg4OiAgIGxmdzEwOg0KQkZEMDY4NzIgICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA1ODk6ICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OTA6ICAgbGZ3MTE6DQpCRkQwNjg3NCAgMDBGQzAxMEMgICBNRkMwIFQwLCBTdGF0dXMgICAgICAgICAgICAgIDU5MTogICAgICAgbWZjMCAgICB0MCwgX0NQMF9TVEFUVVMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTkyOiAgIGxmdzEyOg0KQkZEMDY4NzggIDAwNDA0MUE5ICAgTFVJIFQxLCAweDQwICAgICAgICAgICAgICAgICA1OTM6ICAgICAgIGx1aSAgICAgdDEsIDB4MDA0MA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OTQ6ICAgbGZ3MTM6DQpCRkQwNjg3QyAgNDI5MDAxMjggICBPUiBUMCwgVDAsIFQxICAgICAgICAgICAgICAgIDU5NTogICAgICAgb3IgICAgICB0MCwgdDAsIHQxICAgICAgICAjIEJFVihiaXRbMjJdKSA9IDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTk2OiAgIGxmdzE0Og0KQkZEMDY4ODAgIDAyRkMwMTBDICAgTVRDMCBUMCwgU3RhdHVzICAgICAgICAgICAgICA1OTc6ICAgICAgIG10YzAgICAgdDAsIF9DUDBfU1RBVFVTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5ODogICBsZncxNToNCkJGRDA2ODg0ICAxODAwMDAwMCAgIFNMTCBaRVJPLCBaRVJPLCAzICAgICAgICAgICAgNTk5OiAgICAgICBlaGINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAwOiAgIGxmdzE2Og0KQkZEMDY4ODggICAgICAwQzAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA2MDE6ICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MDI6ICAgbGZ3MTc6ICAgIA0KQkZEMDY4OEEgIDFGM0MwMDA0ICAgSkFMUi5IQiBaRVJPLCBBMCAgICAgICAgICAgICA2MDM6ICAgICAgIEpSLkhCICAgYTANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA0OiAgIGxmdzE4Og0KQkZEMDY4OEUgIDAwMDAwMDAwICAgTk9QICAgICAgICAgICAgICAgICAgICAgICAgICA2MDU6ICAgICAgIG5vcA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MDY6ICAgMDoNCkJGRDA2ODkyICAzNDQ5RDdFOCAgIEogMHhCRkQwNjg5MiAgICAgICAgICAgICAgICAgNjA3OiAgICAgICBqICAgICAgIDBiICAgICAgICAgICAgICAgICAgIyBzaG91bGQgbm90IGdldCBoZXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYwODogICBsZncxOToNCkJGRDA2ODk2ICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNjA5OiAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjEwOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTE6ICAgICAgIC5zZXQgICAgbWFjcm8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjEyOiAgICAgICAuc2V0ICAgIHJlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjEzOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTQ6ICAgICAgIC5lbmQgICAgcm9tX2xhdW5jaF9mdw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MTU6ICAgICAgIC5zaXplICAgcm9tX2xhdW5jaF9mdywgLi1yb21fbGF1bmNoX2Z3DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxNjogICAgICAgDQotLS0gIEM6L0UvRGV2L0ZyZWVSVE9TL1dvcmtpbmdDb3B5L0ZyZWVSVE9TL0RlbW8vUElDMzJNRUMxNHh4X01QTEFCL3NyYy9NRUMxNHh4L2ludGVycnVwdHMvZ2lycTI0ZC5TICAtLS0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogICAgIC8qDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI6ICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDE0IE1pY3JvY2hpcCBJbmMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6ICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OiAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6ICAgICAgICAgMSB0YWIgPT0gNCBzcGFjZXMhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY6ICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3OiAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6ICAgICAjaWZkZWYgX19YQzMyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk6ICAgICAjaW5jbHVkZSA8eGMuaD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6ICAgICNpbmNsdWRlIDxzeXMvYXNtLmg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExOiAgICAjZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogICAgI2luY2x1ZGUgIlJlZ3MuUyINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OiAgICAjaW5jbHVkZSAiTUVDMTR4eC9tZWMxNHh4X2dpcnFtLmgiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6ICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk6ICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA6ICAgICAqICBNRUMxNHh4IEdJUlEyNCBEaXNhZ2dyZWdhdGVkIFZlY3RvciBKdW1wIHRhYmxlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogICAgICAgIC5leHRlcm4gZ2lycTI0X2IwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OiAgICAgICAgLmV4dGVybiBnaXJxMjRfYjENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjY6ICAgICAgICAuZXh0ZXJuIGdpcnEyNF9iMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OiAgICAjaWYgR0lSUTI0X0RJU0FHRyAhPSAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI5OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6ICAgIC8qIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTogICAgICogRnJlZVJUT1MgSGFuZGxlciBmb3IgTUlQUyBNMTRLIFNvZnR3YXJlIEludGVycnVwdCAwIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjogICAgICogaW1wbGVtZW50ZWQgaW4gdGhlIHBvcnRpbmcgbGF5ZXIuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzOiAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQ6ICAgICAgICAuZXh0ZXJuIHZQb3J0WWllbGRJU1INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzU6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjogICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzc6ICAgICAqIERpc2FnZ3JlZ2F0ZWQgZ2lycTI0X2lzcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODogICAgICogUHJvZ3JhbSBhZGRyZXNzIG9mIHRoaXMgdmVyc2lvbiBvZiBnaXJxMjRfaXNyIGludG8gSlRWSUMgR0lSUTI0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5OiAgICAgKiBBZ2dyZWdhdG9yIENvbnRyb2wgcmVnaXN0ZXIgd2l0aCBiaXRbMF0gPSAxLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDogICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDI6ICAgIC8qDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzOiAgICAgKiBOT1RFOiBBbGwgdGhlIGFkZGl0aW9uYWwgbGFiZWxzIHN1cnJvdW5kaW5nIGV2ZXJ5IGluc3RydWN0aW9uIGFyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDogICAgICogdGhlcmUgdG8gZm9yY2UgR0NDIE9CSkRVTVAgdG8gZGlzYXNzZW1ibGUgbWljcm9NSVBTIGNvcnJlY3RseS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDU6ICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NjogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OiAgICAgICAgLmluc24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg6ICAgICNpZmRlZiBfX1hDMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk6ICAgICAgICAuc2VjdGlvbiAuZ2lycXMuZ2lycTI0X2lzciwgY29kZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDogICAgI2Vsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE6ICAgICAgICAuc2VjdGlvbiAuZ2lycXMuZ2lycTI0X2lzciwieCINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTI6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MzogICAgICAgIC5zZXQgIG5vbWlwczE2DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU0OiAgICAgICAgLnNldCAgbWljcm9taXBzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1OiAgICAgICAgLnNldCAgbm9yZW9yZGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2OiAgICAgICAgLnNldCAgbm9hdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NzogICAgICAgIC5lbnQgZ2lycTI0X2lzcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ODogICAgICAgIC5nbG9iYWwgZ2lycTI0X2lzcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OTogICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYwOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjE6ICAgIGdpcnEyNF9pc3I6DQpCRkQwMDI3MCAgMzJENEQ3RTggICBKIDB4QkZEMDY1QTggICAgICAgICAgICAgICAgIDYyOiAgICAgICAgSiAgICAgICBnaXJxMjRfYjANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjM6ICAgIGcyNGIwYjoNCkJGRDAwMjc0ICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNjQ6ICAgICAgICBOT1ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NjogICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY3OiAgICBnMjRiMWE6DQpCRkQwMDI3OCAgMDVCOEQ3RTggICBKIDB4QkZEMDBCNzAgICAgICAgICAgICAgICAgIDY4OiAgICAgICAgSiAgICAgICB2UG9ydFlpZWxkSVNSICAgLyogZ2lycTI0X2IxICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY5OiAgICBnMjRiMWI6DQpCRkQwMDI3QyAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDcwOiAgICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcxOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzI6ICAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MzogICAgZzI0YjJhOg0KQkZEMDAyODAgIDIzQTBEN0U4ICAgSiAweEJGRDA0NzQwICAgICAgICAgICAgICAgICA3NDogICAgICAgIEogICAgICAgZ2lycTI0X2IyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc1OiAgICBnMjRiMmI6DQpCRkQwMDI4NCAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDc2OiAgICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc3OiAgICBnMjRlbmQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc4OiAgICAgICAgLmVuZCBnaXJxMjRfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc5OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODA6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgyOiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg0OiAgICANCi0tLSAgQzovRS9EZXYvRnJlZVJUT1MvV29ya2luZ0NvcHkvRnJlZVJUT1MvRGVtby9QSUMzMk1FQzE0eHhfTVBMQUIvc3JjL01FQzE0eHgvaW50ZXJydXB0cy9naXJxMjNkLlMgIC0tLQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiAgICAgLyoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTQgTWljcm9jaGlwIEluYy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzogICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6ICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTogICAgICAgICAxIHRhYiA9PSA0IHNwYWNlcyENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjogICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6ICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODogICAgICNpZmRlZiBfX1hDMzINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTogICAgICNpbmNsdWRlIDx4Yy5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDogICAgI2luY2x1ZGUgPHN5cy9hc20uaD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6ICAgICNlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOiAgICAjaW5jbHVkZSAiUmVncy5TIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzogICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6ICAgICNpbmNsdWRlICJNRUMxNHh4L21lYzE0eHhfZ2lycW0uaCINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4OiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OiAgICAgKiAgTUVDMTR4eCBHSVJRMjMgRGlzYWdncmVnYXRlZCBWZWN0b3IgSnVtcCB0YWJsZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjE6ICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIyOiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjM6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogICAgICAgIC5leHRlcm4gZ2lycTIzX2IxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OiAgICAgICAgLmV4dGVybiBnaXJxMjNfYjINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjY6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iMw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzogICAgICAgIC5leHRlcm4gZ2lycTIzX2I0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OiAgICAgICAgLmV4dGVybiBnaXJxMjNfYjUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjk6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iNg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDogICAgICAgIC5leHRlcm4gZ2lycTIzX2I3DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxOiAgICAgICAgLmV4dGVybiBnaXJxMjNfYjgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI6ICAgICAgICAuZXh0ZXJuIGdpcnEyM19iOQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMzogICAgICAgIC5leHRlcm4gZ2lycTIzX2IxMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNDogICAgICAgIC5leHRlcm4gZ2lycTIzX2IxMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTogICAgICAgIC5leHRlcm4gZ2lycTIzX2IxMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNjogICAgICAgIC5leHRlcm4gZ2lycTIzX2IxMw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM4OiAgICAjaWYgR0lSUTIzX0RJU0FHRyAhPSAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA6ICAgIC8qDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxOiAgICAgKiBGcmVlUlRPUyBIYW5kbGVyIGZvciBNRUMxNHh4IFJUT1MgVGltZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDI6ICAgICAqIGltcGxlbWVudGVkIGluIHRoZSBwb3J0aW5nIGxheWVyLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MzogICAgICovDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0OiAgICAgICAgLmV4dGVybiB2UG9ydFRpY2tJbnRlcnJ1cHRIYW5kbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ1OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDY6ICAgIC8qDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OiAgICAgKiBEaXNhZ2dyZWdhdGVkIGdpcnEyM19pc3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDg6ICAgICAqIFByb2dyYW0gYWRkcmVzcyBvZiB0aGlzIHZlcnNpb24gb2YgZ2lycTIzX2lzciBpbnRvIEpUVklDIEdJUlEyMw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0OTogICAgICogQWdncmVnYXRvciBDb250cm9sIHJlZ2lzdGVyIHdpdGggYml0WzBdID0gMS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTA6ICAgICAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyOiAgICAvKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MzogICAgICogTk9URTogQWxsIHRoZSBhZGRpdGlvbmFsIGxhYmVscyBzdXJyb3VuZGluZyBldmVyeSBpbnN0cnVjdGlvbiBhcmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTQ6ICAgICAqIHRoZXJlIHRvIGZvcmNlIEdDQyBPQkpEVU1QIHRvIGRpc2Fzc2VtYmxlIG1pY3JvTUlQUyBjb3JyZWN0bHkuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1OiAgICAgKi8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NzogICAgICAgIC5pbnNuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU4OiAgICAjaWZkZWYgX19YQzMyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5OiAgICAgICAgLnNlY3Rpb24gLmdpcnFzLmdpcnEyM19pc3IsIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA6ICAgICNlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxOiAgICAgICAgLnNlY3Rpb24gLmdpcnFzLmdpcnEyM19pc3IsIngiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYyOiAgICAjZW5kaWYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjM6ICAgICAgICAuc2V0ICBub21pcHMxNg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NDogICAgICAgIC5zZXQgIG1pY3JvbWlwcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTogICAgICAgIC5zZXQgIG5vcmVvcmRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NjogICAgICAgIC5zZXQgIG5vYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjc6ICAgICAgICAuZW50IGdpcnEyM19pc3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjg6ICAgICAgICAuZ2xvYmFsIGdpcnEyM19pc3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjk6ICAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MDogICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcxOiAgICBnaXJxMjNfaXNyOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MjogICAgDQpCRkQwMDIwMCAgMzk1MEQ3RTggICBKIDB4QkZEMDcyQTAgICAgICAgICAgICAgICAgIDczOiAgICAgICAgSiAgICAgICBnaXJxMjNfYjANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzQ6ICAgIGcyM2IwYjoNCkJGRDAwMjA0ICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgNzU6ICAgICAgICBOT1ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzY6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NzogICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc4OiAgICBnMjNiMWE6DQpCRkQwMDIwOCAgMjYzOEQ3RTggICBKIDB4QkZEMDRDNzAgICAgICAgICAgICAgICAgIDc5OiAgICAgICAgSiAgICAgICBnaXJxMjNfYjENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODA6ICAgIGcyM2IxYjoNCkJGRDAwMjBDICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgODE6ICAgICAgICBOT1ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODI6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MzogICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg0OiAgICBnMjNiMmE6DQpCRkQwMDIxMCAgMjZBMEQ3RTggICBKIDB4QkZEMDRENDAgICAgICAgICAgICAgICAgIDg1OiAgICAgICAgSiAgICAgICBnaXJxMjNfYjINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODY6ICAgIGcyM2IyYjoNCkJGRDAwMjE0ICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgODc6ICAgICAgICBOT1ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODg6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OTogICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwOiAgICBnMjNiM2E6DQpCRkQwMDIxOCAgMjcwOEQ3RTggICBKIDB4QkZEMDRFMTAgICAgICAgICAgICAgICAgIDkxOiAgICAgICAgSiAgICAgICBnaXJxMjNfYjMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTI6ICAgIGcyM2IzYjoNCkJGRDAwMjFDICAgICAgMEMwMCAgIE5PUCAgICAgICAgICAgICAgICAgICAgICAgICAgOTM6ICAgICAgICBOT1ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTQ6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5NTogICAgICAgIC5hbGlnbiAyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk2OiAgICBnMjNiNGE6DQpCRkQwMDIyMCAgMDQ5MEQ3RTggICBKIDB4QkZEMDA5MjAgICAgICAgICAgICAgICAgIDk3OiAgICAgICAgSiAgICAgICBnaXJxMjNfYjQgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk4OiAgICBnMjNiNGI6DQpCRkQwMDIyNCAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDk5OiAgICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxOiAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI6ICAgZzIzYjVhOg0KQkZEMDAyMjggIDI3NzBEN0U4ICAgSiAweEJGRDA0RUUwICAgICAgICAgICAgICAgICAxMDM6ICAgICAgIEogICAgICAgZ2lycTIzX2I1DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNDogICBnMjNiNWI6DQpCRkQwMDIyQyAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNTogICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA3OiAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDg6ICAgZzIzYjZhOg0KQkZEMDAyMzAgIDI3RDhEN0U4ICAgSiAweEJGRDA0RkIwICAgICAgICAgICAgICAgICAxMDk6ICAgICAgIEogICAgICAgZ2lycTIzX2I2DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMDogICBnMjNiNmI6DQpCRkQwMDIzNCAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDExMTogICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEzOiAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTQ6ICAgZzIzYjdhOg0KQkZEMDAyMzggIDI4NDBEN0U4ICAgSiAweEJGRDA1MDgwICAgICAgICAgICAgICAgICAxMTU6ICAgICAgIEogICAgICAgZ2lycTIzX2I3DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNjogICBnMjNiN2I6DQpCRkQwMDIzQyAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDExNzogICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE5OiAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjA6ICAgZzIzYjhhOg0KQkZEMDAyNDAgIDI4QThEN0U4ICAgSiAweEJGRDA1MTUwICAgICAgICAgICAgICAgICAxMjE6ICAgICAgIEogICAgICAgZ2lycTIzX2I4DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMjogICBnMjNiOGI6DQpCRkQwMDI0NCAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMzogICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI1OiAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjY6ICAgZzIzYjlhOg0KQkZEMDAyNDggIDI5MTBEN0U4ICAgSiAweEJGRDA1MjIwICAgICAgICAgICAgICAgICAxMjc6ICAgICAgIEogICAgICAgZ2lycTIzX2I5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyODogICBnMjNiOWI6DQpCRkQwMDI0QyAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOTogICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMDogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMxOiAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzI6ICAgZzIzYjEwYToNCkJGRDAwMjUwICAyOTc4RDdFOCAgIEogMHhCRkQwNTJGMCAgICAgICAgICAgICAgICAgMTMzOiAgICAgICBKICAgICAgIGdpcnEyM19iMTANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM0OiAgIGcyM2IxMGI6DQpCRkQwMDI1NCAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNTogICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM3OiAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzg6ICAgZzIzYjExYToNCkJGRDAwMjU4ICAyOUUwRDdFOCAgIEogMHhCRkQwNTNDMCAgICAgICAgICAgICAgICAgMTM5OiAgICAgICBKICAgICAgIGdpcnEyM19iMTENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQwOiAgIGcyM2IxMWI6DQpCRkQwMDI1QyAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MTogICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQzOiAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDQ6ICAgZzIzYjEyYToNCkJGRDAwMjYwICAyQTQ4RDdFOCAgIEogMHhCRkQwNTQ5MCAgICAgICAgICAgICAgICAgMTQ1OiAgICAgICBKICAgICAgIGdpcnEyM19iMTINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ2OiAgIGcyM2IxMmI6DQpCRkQwMDI2NCAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NzogICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0ODogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ5OiAgICAgICAuYWxpZ24gMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTA6ICAgZzIzYjEzYToNCkJGRDAwMjY4ICAyQUIwRDdFOCAgIEogMHhCRkQwNTU2MCAgICAgICAgICAgICAgICAgMTUxOiAgICAgICBKICAgICAgIGdpcnEyM19iMTMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUyOiAgIGcyM2IxM2I6DQpCRkQwMDI2QyAgICAgIDBDMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MzogICAgICAgTk9QDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NDogICBnMjNlbmQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NTogICAgICAgLmVuZCBnaXJxMjNfaXNyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1NjogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU3OiAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTg6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1OTogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjA6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MTogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYyOiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjM6ICAgDQotLS0gIEM6L0UvRGV2L0ZyZWVSVE9TL1dvcmtpbmdDb3B5L0ZyZWVSVE9TL0RlbW8vUElDMzJNRUMxNHh4X01QTEFCL3NyYy9NRUMxNHh4L2V4Y2VwdGlvbnMvTVBMQUIvZ2VuZXJhbF9leGNlcHRpb25fY3R4LlMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjogICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6ICAgICAgKiAgICAgICAgICAgICAgICAgIEdlbmVyYWwgRXhjZXB0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2OiAgICAgICogRmlsZW5hbWU6ICAgICAgICBnZW5lcmFsLWV4Y2VwdGlvbi5TDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc6ICAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OiAgICAgICogUHJvY2Vzc29yOiAgICAgICBQSUMzMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5OiAgICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA6ICAgICAqIENvbXBpbGVyOiAgICAgICAgTVBMQUIgWEMzMiB2MS4wMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTogICAgICogICAgICAgICAgICAgICAgICBNUExBQiBYIElERQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogICAgICogQ29tcGFueTogICAgICAgICBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNDogICAgICogU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTU6ICAgICAqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAgICAgKiBUaGlzIHNvZnR3YXJlIGlzIGRldmVsb3BlZCBieSBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6ICAgICAqIHN1YnNpZGlhcmllcyAoIk1pY3JvY2hpcCIpLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTk6ICAgICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDogICAgICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIxOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMjogICAgICogMS4gICAgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMzogICAgICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU6ICAgICAqIDIuICAgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjY6ICAgICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjc6ICAgICAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4OiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOTogICAgICogMy4gICAgICBNaWNyb2NoaXAncyBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6ICAgICAqIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMTogICAgICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI6ICAgICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTUlDUk9DSElQICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzM6ICAgICAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0OiAgICAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNTogICAgICogTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2OiAgICAgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzogICAgICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg6ICAgICAqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XU09FVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM5OiAgICAgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDogICAgICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MTogICAgICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQyOiAgICAgKg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MzogICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDogICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NTogICAgI2luY2x1ZGUgPHhjLmg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ2OiAgICAjaWZkZWYgX19MSUJCVUlMRF9fDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ3OiAgICAgICAuZmlsZSAxICJnZW5lcmFsLWV4Y2VwdGlvbi5TIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ODogICAgICAgLmxvYyAxIDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDk6ICAgICNlbmRpZg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDogICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxOiAgICAgICMgRGVmYXVsdCBnZW5lcmFsIGV4Y2VwdGlvbiBoYW5kbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUyOiAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTM6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1NDogICAgICAuZXh0ZXJuIF9nZW5lcmFsX2V4Y2VwdGlvbl9oYW5kbGVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU1OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY6ICAgICAgLnNlY3Rpb24gLnRleHQuZ2VuZXJhbF9leGNlcHRpb24sIGNvZGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTc6ICAgICAgLnNldCBub3Jlb3JkZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTg6ICAgICAgLnNldCBub2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU5OiAgICAgIC5zZXQgbm9taXBzMTYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjA6ICAgICAgLmdsb2JsIF9nZW5lcmFsX2V4Y2VwdGlvbl9jb250ZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxOiAgICAgIC5lbnQgX2dlbmVyYWxfZXhjZXB0aW9uX2NvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjI6ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2MzogICAgX2dlbmVyYWxfZXhjZXB0aW9uX2NvbnRleHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0OiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU6ICAgICAgIyBTYXZlIG9mZiB0aGUgbm9uLWNhbGxlZSBzYXZlZCByZWdpc3RlcnMgdGhhdCBtYXkgZ2V0IG11Y2tlZCB3aXRoDQpCRkQwNDlFNCAgMjdCREZGQTggICBBRERJVSBTUCwgU1AsIC04OCAgICAgICAgICAgIDY2OiAgICAgICBhZGRpdSBzcCwgc3AsIC04OA0KQkZEMDQ5RTggIEFGQTEwMDA0ICAgU1cgQVQsIDQoU1ApICAgICAgICAgICAgICAgICA2NzogICAgICAgc3cgJDEsICA0KHNwKQ0KQkZEMDQ5RUMgIEFGQTIwMDA4ICAgU1cgVjAsIDgoU1ApICAgICAgICAgICAgICAgICA2ODogICAgICAgc3cgdjAsICA4KHNwKQ0KQkZEMDQ5RjAgIEFGQTMwMDBDICAgU1cgVjEsIDEyKFNQKSAgICAgICAgICAgICAgICA2OTogICAgICAgc3cgdjEsIDEyKHNwKQ0KQkZEMDQ5RjQgIEFGQTQwMDEwICAgU1cgQTAsIDE2KFNQKSAgICAgICAgICAgICAgICA3MDogICAgICAgc3cgYTAsIDE2KHNwKQ0KQkZEMDQ5RjggIEFGQTUwMDE0ICAgU1cgQTEsIDIwKFNQKSAgICAgICAgICAgICAgICA3MTogICAgICAgc3cgYTEsIDIwKHNwKQ0KQkZEMDQ5RkMgIEFGQTYwMDE4ICAgU1cgQTIsIDI0KFNQKSAgICAgICAgICAgICAgICA3MjogICAgICAgc3cgYTIsIDI0KHNwKQ0KQkZEMDRBMDAgIEFGQTcwMDFDICAgU1cgQTMsIDI4KFNQKSAgICAgICAgICAgICAgICA3MzogICAgICAgc3cgYTMsIDI4KHNwKQ0KQkZEMDRBMDQgIEFGQTgwMDIwICAgU1cgVDAsIDMyKFNQKSAgICAgICAgICAgICAgICA3NDogICAgICAgc3cgdDAsIDMyKHNwKQ0KQkZEMDRBMDggIEFGQTkwMDI0ICAgU1cgVDEsIDM2KFNQKSAgICAgICAgICAgICAgICA3NTogICAgICAgc3cgdDEsIDM2KHNwKQ0KQkZEMDRBMEMgIEFGQUEwMDI4ICAgU1cgVDIsIDQwKFNQKSAgICAgICAgICAgICAgICA3NjogICAgICAgc3cgdDIsIDQwKHNwKQ0KQkZEMDRBMTAgIEFGQUIwMDJDICAgU1cgVDMsIDQ0KFNQKSAgICAgICAgICAgICAgICA3NzogICAgICAgc3cgdDMsIDQ0KHNwKQ0KQkZEMDRBMTQgIEFGQUMwMDMwICAgU1cgVDQsIDQ4KFNQKSAgICAgICAgICAgICAgICA3ODogICAgICAgc3cgdDQsIDQ4KHNwKQ0KQkZEMDRBMTggIEFGQUQwMDM0ICAgU1cgVDUsIDUyKFNQKSAgICAgICAgICAgICAgICA3OTogICAgICAgc3cgdDUsIDUyKHNwKQ0KQkZEMDRBMUMgIEFGQUUwMDM4ICAgU1cgVDYsIDU2KFNQKSAgICAgICAgICAgICAgICA4MDogICAgICAgc3cgdDYsIDU2KHNwKQ0KQkZEMDRBMjAgIEFGQUYwMDNDICAgU1cgVDcsIDYwKFNQKSAgICAgICAgICAgICAgICA4MTogICAgICAgc3cgdDcsIDYwKHNwKQ0KQkZEMDRBMjQgIEFGQjgwMDQwICAgU1cgVDgsIDY0KFNQKSAgICAgICAgICAgICAgICA4MjogICAgICAgc3cgdDgsIDY0KHNwKQ0KQkZEMDRBMjggIEFGQjkwMDQ0ICAgU1cgVDksIDY4KFNQKSAgICAgICAgICAgICAgICA4MzogICAgICAgc3cgdDksIDY4KHNwKQ0KQkZEMDRBMkMgIEFGQkYwMDQ4ICAgU1cgUkEsIDcyKFNQKSAgICAgICAgICAgICAgICA4NDogICAgICAgc3cgcmEsIDcyKHNwKQ0KQkZEMDRBMzAgIDAwMDA0MDEyICAgTUZMTyBUMCwgMCAgICAgICAgICAgICAgICAgICA4NTogICAgICAgbWZsbyB0MA0KQkZEMDRBMzQgIEFGQTgwMDRDICAgU1cgVDAsIDc2KFNQKSAgICAgICAgICAgICAgICA4NjogICAgICAgc3cgdDAsIDc2KHNwKQ0KQkZEMDRBMzggIDAwMDA0MDEwICAgTUZISSBUMCwgMCAgICAgICAgICAgICAgICAgICA4NzogICAgICAgbWZoaSB0MA0KQkZEMDRBM0MgIEFGQTgwMDUwICAgU1cgVDAsIDgwKFNQKSAgICAgICAgICAgICAgICA4ODogICAgICAgc3cgdDAsIDgwKHNwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4OTogICAgDQpCRkQwNEE0MCAgM0MxQUJGRDAgICBMVUkgSzAsIC0xNjQzMiAgICAgICAgICAgICAgIDkwOiAgICAgICBsYSAgICAgIGswLF9nZW5lcmFsX2V4Y2VwdGlvbl9oYW5kbGVyDQpCRkQwNEE0OCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDkxOiAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTI6ICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MzogICAgICAgIyBQYXNzIENhdXNlIGFuZCBTdGF0dXMgdG8gdGhlIGhhbmRsZXIgZnVuY3Rpb24NCkJGRDA0QTRDICA0MDA0NjgwMCAgIE1GQzAgQTAsIENhdXNlICAgICAgICAgICAgICAgOTQ6ICAgICAgIG1mYzAgYTAsIF9DUDBfQ0FVU0UNCkJGRDA0QTUwICA0MDA1NjAwMCAgIE1GQzAgQTEsIFN0YXR1cyAgICAgICAgICAgICAgOTU6ICAgICAgIG1mYzAgYTEsIF9DUDBfU1RBVFVTDQpCRkQwNEE1NCAgMDM0MEY4MDkgICBKQUxSIEswICAgICAgICAgICAgICAgICAgICAgIDk2OiAgICAgICBqYWxyICAgIGswDQpCRkQwNEE1OCAgMDAwMDAwMDAgICBOT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDk3OiAgICAgICBub3ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTg6ICAgIA0KQkZEMDRBNUMgIDhGQTgwMDUwICAgTFcgVDAsIDgwKFNQKSAgICAgICAgICAgICAgICA5OTogICAgICAgbHcgdDAsIDgwKHNwKQ0KQkZEMDRBNjAgIDAxMDAwMDExICAgTVRISSBUMCwgMCAgICAgICAgICAgICAgICAgICAxMDA6ICAgICAgbXRoaSB0MA0KQkZEMDRBNjQgIDhGQTgwMDRDICAgTFcgVDAsIDc2KFNQKSAgICAgICAgICAgICAgICAxMDE6ICAgICAgbHcgdDAsIDc2KHNwKQ0KQkZEMDRBNjggIDAxMDAwMDEzICAgTVRMTyBUMCwgMCAgICAgICAgICAgICAgICAgICAxMDI6ICAgICAgbXRsbyB0MA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDM6ICAgDQpCRkQwNEE2QyAgOEZBMTAwMDQgICBMVyBBVCwgNChTUCkgICAgICAgICAgICAgICAgIDEwNDogICAgICBsdyAkMSwgIDQoc3ApDQpCRkQwNEE3MCAgOEZBMjAwMDggICBMVyBWMCwgOChTUCkgICAgICAgICAgICAgICAgIDEwNTogICAgICBsdyB2MCwgIDgoc3ApDQpCRkQwNEE3NCAgOEZBMzAwMEMgICBMVyBWMSwgMTIoU1ApICAgICAgICAgICAgICAgIDEwNjogICAgICBsdyB2MSwgMTIoc3ApDQpCRkQwNEE3OCAgOEZBNDAwMTAgICBMVyBBMCwgMTYoU1ApICAgICAgICAgICAgICAgIDEwNzogICAgICBsdyBhMCwgMTYoc3ApDQpCRkQwNEE3QyAgOEZBNTAwMTQgICBMVyBBMSwgMjAoU1ApICAgICAgICAgICAgICAgIDEwODogICAgICBsdyBhMSwgMjAoc3ApDQpCRkQwNEE4MCAgOEZBNjAwMTggICBMVyBBMiwgMjQoU1ApICAgICAgICAgICAgICAgIDEwOTogICAgICBsdyBhMiwgMjQoc3ApDQpCRkQwNEE4NCAgOEZBNzAwMUMgICBMVyBBMywgMjgoU1ApICAgICAgICAgICAgICAgIDExMDogICAgICBsdyBhMywgMjgoc3ApDQpCRkQwNEE4OCAgOEZBODAwMjAgICBMVyBUMCwgMzIoU1ApICAgICAgICAgICAgICAgIDExMTogICAgICBsdyB0MCwgMzIoc3ApDQpCRkQwNEE4QyAgOEZBOTAwMjQgICBMVyBUMSwgMzYoU1ApICAgICAgICAgICAgICAgIDExMjogICAgICBsdyB0MSwgMzYoc3ApDQpCRkQwNEE5MCAgOEZBQTAwMjggICBMVyBUMiwgNDAoU1ApICAgICAgICAgICAgICAgIDExMzogICAgICBsdyB0MiwgNDAoc3ApDQpCRkQwNEE5NCAgOEZBQjAwMkMgICBMVyBUMywgNDQoU1ApICAgICAgICAgICAgICAgIDExNDogICAgICBsdyB0MywgNDQoc3ApDQpCRkQwNEE5OCAgOEZBQzAwMzAgICBMVyBUNCwgNDgoU1ApICAgICAgICAgICAgICAgIDExNTogICAgICBsdyB0NCwgNDgoc3ApDQpCRkQwNEE5QyAgOEZBRDAwMzQgICBMVyBUNSwgNTIoU1ApICAgICAgICAgICAgICAgIDExNjogICAgICBsdyB0NSwgNTIoc3ApDQpCRkQwNEFBMCAgOEZBRTAwMzggICBMVyBUNiwgNTYoU1ApICAgICAgICAgICAgICAgIDExNzogICAgICBsdyB0NiwgNTYoc3ApDQpCRkQwNEFBNCAgOEZBRjAwM0MgICBMVyBUNywgNjAoU1ApICAgICAgICAgICAgICAgIDExODogICAgICBsdyB0NywgNjAoc3ApDQpCRkQwNEFBOCAgOEZCODAwNDAgICBMVyBUOCwgNjQoU1ApICAgICAgICAgICAgICAgIDExOTogICAgICBsdyB0OCwgNjQoc3ApDQpCRkQwNEFBQyAgOEZCOTAwNDQgICBMVyBUOSwgNjgoU1ApICAgICAgICAgICAgICAgIDEyMDogICAgICBsdyB0OSwgNjgoc3ApDQpCRkQwNEFCMCAgOEZCRjAwNDggICBMVyBSQSwgNzIoU1ApICAgICAgICAgICAgICAgIDEyMTogICAgICBsdyByYSwgNzIoc3ApDQpCRkQwNEFCNCAgMjdCRDAwNTggICBBRERJVSBTUCwgU1AsIDg4ICAgICAgICAgICAgIDEyMjogICAgICBhZGRpdSBzcCwgc3AsIDg4DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMzogICANCkJGRDA0QUI4ICAwMDAwMDBDMCAgIEVIQiAgICAgICAgICAgICAgICAgICAgICAgICAgMTI0OiAgICAgIGVoYg0KQkZEMDRBQkMgIDQyMDAwMDE4ICAgRVJFVCAgICAgICAgICAgICAgICAgICAgICAgICAxMjU6ICAgICAgZXJldA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjY6ICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNzogICAgIC5lbmQgX2dlbmVyYWxfZXhjZXB0aW9uX2NvbnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4OiAgIA0K