From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.4.68; helo=eur03-db5-obe.outbound.protection.outlook.com; envelope-from=evan.lloyd@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40068.outbound.protection.outlook.com [40.107.4.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 930C72218E93C for ; Tue, 5 Dec 2017 12:41:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=ltNeOYkh1eXb+iod+yE9SLeJGPcUCFCSFlPzfZMzoNM=; b=PeNpenNu4qQN5/qbNUDnutJTm/aAbtP9PqMzYFWmMn0OuL3SZwYSHTcQWxqjZmMyymmVcfU2O/IwPY5fn/XaoKS5VSjG56YYH0QDIP0gpk7bp2Xt80VpWx792xQNZUxtY/jCdcxGQz1z9w1nygqrQ4C8kfJ1lhOoXwsebcvLVIU= Received: from AM4PR0801MB1444.eurprd08.prod.outlook.com (10.168.5.24) by AM4PR0801MB1442.eurprd08.prod.outlook.com (10.168.5.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.282.5; Tue, 5 Dec 2017 20:46:11 +0000 Received: from AM4PR0801MB1444.eurprd08.prod.outlook.com ([fe80::2953:37dd:2fcb:a418]) by AM4PR0801MB1444.eurprd08.prod.outlook.com ([fe80::2953:37dd:2fcb:a418%14]) with mapi id 15.20.0302.007; Tue, 5 Dec 2017 20:46:11 +0000 From: Evan Lloyd To: Ard Biesheuvel CC: "edk2-devel@lists.01.org" , "ard.biesheuvel@linaro.org@arm.com" <"ard.biesheuvel@linaro.org"@arm.com>, "leif.lindholm@linaro.org@arm.com" <"leif.lindholm@linaro.org"@arm.com>, "Matteo.Carlini@arm.com@arm.com" <"Matteo.Carlini@arm.com"@arm.com>, "nd@arm.com@arm.com" <"nd@arm.com"@arm.com> Thread-Topic: [PATCH 04/19] ArmPlatformPkg: LcdGraphicsOurputDxe: Add debug asserts Thread-Index: AQHTQ/WEa5djh95Z3ECbte6hBaR2naMu+GyQgAAVDACABnxAcA== Date: Tue, 5 Dec 2017 20:46:11 +0000 Message-ID: References: <20170926201529.11644-1-evan.lloyd@arm.com> <20170926201529.11644-5-evan.lloyd@arm.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Evan.Lloyd@arm.com; x-originating-ip: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM4PR0801MB1442; 6:dURXqQnQeVUkyhRGxldlwTF57y94K8jkg72M4weqFCMLBCQ/qToVBMdkusCTzHw+LZ9zRUqE9vThPm7uv8FmqOyT00s9EmHX+6LfyVmKhs07on+/ER4FOimJ374lXMQXCe9VdTZgseA/jqU6sC6UeTd3/685qLIealxZ0eB7K0f0/J7xMejQJADhi34LZcqh652MEb3hP76kHFRyX5Aqk9Pxes05hMtuegOnPgvJu25Vu3ceq+L+JJaOqFZ5uXCpDCEVxvATk7bPgHFTtVTmC0mFk57FbVJUSdpLwLurXuSbHAb5UHD7OZ9ZAsY+0gMNduFjVi5ocU1FrXr6/G16f+NReqkePPpdrLFci/jWoVw=; 5:iSl0rYtctCIXOVbjmNby+/TIOqDjLXyd/dPPp2H2qFKpascsBT3stOtUE/5yrzfEM6UvhGq7RMVCPfMtCKjsSmYzJJxggVqETGHU7i3SreBoMYqHWnhKmKbShxDwWpbNVztPLOoQvM6B55uvRp6xo24PJ5/rldhiYKNClvqvv7I=; 24:b9SbxjpWJ49cR7P2diLfdgm2aEJ9uY8UGvyo2wF61+k16t4M2t3ITLQGpH9wR+UcTJVbEjpI15qqiZameFFTveRanzzgg6xXu/XW9kIb+Hw=; 7:qj/mXHGSzWCTT9LvFKzTGf0ZyEQ3DlJrJtbhohfmPOorJdaM0s/BBjzOhpe89r9GPPO8MZse0uQKkZnwPO1292cBsPbLzYzGq5i3ISHjFTWr98sFuagH4azeqfhDgwNWaKLFuTJrcK0xTl7HfNXh4Tm7X7L3Wa3E98zY9GLVEKQ7KOsevfMODNkccyRpOcHjBFL5nxx2HYxlyGDhsg7xZosXpOGeJP23qNDNOCRriBbc3peWmLrrI81oNDiDiZuA x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: a3ae80da-e13d-4076-6659-08d53c213811 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603286); SRVR:AM4PR0801MB1442; x-ms-traffictypediagnostic: AM4PR0801MB1442: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(162533806227266)(17755550239193); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(3231022)(10201501046)(6055026)(6041248)(20161123560025)(20161123562025)(20161123564025)(20161123555025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:AM4PR0801MB1442; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM4PR0801MB1442; x-forefront-prvs: 0512CC5201 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(366004)(346002)(376002)(13464003)(40434004)(199004)(189003)(24454002)(478600001)(76176011)(86362001)(53546010)(7696005)(68736007)(81166006)(81156014)(2900100001)(105586002)(97736004)(7736002)(33656002)(74316002)(4326008)(25786009)(6246003)(93886005)(305945005)(575784001)(102836003)(6506006)(3660700001)(316002)(6116002)(101416001)(3280700002)(6436002)(2906002)(53946003)(66066001)(5890100001)(53936002)(55016002)(14454004)(8676002)(9686003)(99286004)(6916009)(106356001)(229853002)(8936002)(5660300001)(72206003)(3846002)(2950100002)(5250100002)(19627235001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0801MB1442; H:AM4PR0801MB1444.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: a3ae80da-e13d-4076-6659-08d53c213811 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Dec 2017 20:46:11.3951 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0801MB1442 Subject: Re: [PATCH 04/19] ArmPlatformPkg: LcdGraphicsOurputDxe: Add debug asserts X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Dec 2017 20:41:44 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwg W21haWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiBTZW50OiAwMSBEZWNlbWJlciAy MDE3IDE3OjM1DQo+IFRvOiBFdmFuIExsb3lkIDxFdmFuLkxsb3lkQGFybS5jb20+DQo+IENjOiBl ZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgYXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZ0Bhcm0uY29t DQo+IDwiYXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZyJAYXJtLmNvbT47DQo+IGxlaWYubGluZGhv bG1AbGluYXJvLm9yZ0Bhcm0uY29tIDwibGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnIkBhcm0uY29t PjsNCj4gTWF0dGVvLkNhcmxpbmlAYXJtLmNvbUBhcm0uY29tDQo+IDwiTWF0dGVvLkNhcmxpbmlA YXJtLmNvbSJAYXJtLmNvbT47IG5kQGFybS5jb21AYXJtLmNvbQ0KPiA8Im5kQGFybS5jb20iQGFy bS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMDQvMTldIEFybVBsYXRmb3JtUGtnOiBMY2RH cmFwaGljc091cnB1dER4ZTogQWRkDQo+IGRlYnVnIGFzc2VydHMNCj4NCj4gT24gMSBEZWNlbWJl ciAyMDE3IGF0IDE2OjMzLCBFdmFuIExsb3lkIDxFdmFuLkxsb3lkQGFybS5jb20+IHdyb3RlOg0K PiA+IFJlc3BvbnNlcyBpbmxpbmU6DQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gPj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwgW21haWx0bzphcmQuYmllc2hldXZlbEBsaW5h cm8ub3JnXQ0KPiA+PiBTZW50OiAxMyBPY3RvYmVyIDIwMTcgMDg6MzMNCj4gPj4gVG86IEV2YW4g TGxveWQgPEV2YW4uTGxveWRAYXJtLmNvbT4NCj4gPj4gQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEu b3JnOyAiYXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZyJAYXJtLmNvbTsNCj4gPj4gImxlaWYubGlu ZGhvbG1AbGluYXJvLm9yZyJAYXJtLmNvbTsNCj4gPj4gIk1hdHRlby5DYXJsaW5pQGFybS5jb20i QGFybS5jb207ICJuZEBhcm0uY29tIkBhcm0uY29tDQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg MDQvMTldIEFybVBsYXRmb3JtUGtnOiBMY2RHcmFwaGljc091cnB1dER4ZToNCj4gQWRkDQo+ID4+ IGRlYnVnIGFzc2VydHMNCj4gPj4NCj4gPj4gT24gMjYgU2VwdGVtYmVyIDIwMTcgYXQgMjE6MTUs ICA8ZXZhbi5sbG95ZEBhcm0uY29tPiB3cm90ZToNCj4gPj4gPiBGcm9tOiBHaXJpc2ggUGF0aGFr IDxnaXJpc2gucGF0aGFrQGFybS5jb20+DQo+ID4+ID4NCj4gPj4gPiBUaGlzIGNoYW5nZSBhZGRz IHNvbWUgZGVidWcgYXNzZXJ0aW9ucyBlLmcgdG8gY2F0Y2ggTlVMTCBwb2ludGVyDQo+ID4+ID4g ZXJyb3JzIG1pc3NpbmcgaW4gUEwxMUxjZCBhbmQgSGRMY2QgbW9kdWxlcy4NCj4gPj4gPg0KPiA+ PiA+IFRoaXMgY2hhbmdlIGFsc28gaW1wcm92ZXMgcmVsYXRlZCBlcnJvciBoYW5kbGluZyBjb2Rl Lg0KPiA+PiA+DQo+ID4+ID4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRp b24gQWdyZWVtZW50IDEuMQ0KPiA+PiA+IFNpZ25lZC1vZmYtYnk6IEdpcmlzaCBQYXRoYWsgPGdp cmlzaC5wYXRoYWtAYXJtLmNvbT4NCj4gPj4gPiBTaWduZWQtb2ZmLWJ5OiBFdmFuIExsb3lkIDxl dmFuLmxsb3lkQGFybS5jb20+DQo+ID4+ID4gLS0tDQo+ID4+ID4NCj4gPj4NCj4gQXJtUGxhdGZv cm1Qa2cvQXJtVkV4cHJlc3NQa2cvTGlicmFyeS9IZExjZEFybVZFeHByZXNzTGliL0hkTGNkQXIN Cj4gPj4gbVZFeHByZXNzLmMgICAgICAgfCA0NCArKysrKysrKysrKysrKysrKystLQ0KPiA+PiA+ DQo+ID4+DQo+IEFybVBsYXRmb3JtUGtnL0FybVZFeHByZXNzUGtnL0xpYnJhcnkvUEwxMTFMY2RB cm1WRXhwcmVzc0xpYi9QTDExDQo+ID4+IDFMY2RBcm1WRXhwcmVzcy5jIHwgNDMgKysrKysrKysr KysrKysrKysrLQ0KPiA+PiA+ICBBcm1QbGF0Zm9ybVBrZy9Ecml2ZXJzL0xjZEdyYXBoaWNzT3V0 cHV0RHhlL0hkTGNkLmMNCj4gPj4gfCAgOCArKy0tDQo+ID4+ID4gIEFybVBsYXRmb3JtUGtnL0Ry aXZlcnMvTGNkR3JhcGhpY3NPdXRwdXREeGUvUEwxMTFMY2QuYw0KPiA+PiB8ICA4ICsrLS0NCj4g Pj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCA5MCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkN Cj4gPj4gPg0KPiA+PiA+IGRpZmYgLS1naXQNCj4gPj4gPg0KPiA+Pg0KPiBhL0FybVBsYXRmb3Jt UGtnL0FybVZFeHByZXNzUGtnL0xpYnJhcnkvSGRMY2RBcm1WRXhwcmVzc0xpYi9IZExjZA0KPiA+ PiBBcm1WRQ0KPiA+PiA+IHhwcmVzcy5jDQo+ID4+ID4NCj4gPj4NCj4gYi9Bcm1QbGF0Zm9ybVBr Zy9Bcm1WRXhwcmVzc1BrZy9MaWJyYXJ5L0hkTGNkQXJtVkV4cHJlc3NMaWIvSGRMY2QNCj4gPj4g QXJtVkUNCj4gPj4gPiB4cHJlc3MuYyBpbmRleA0KPiA+PiA+DQo+ID4+DQo+IGI5ODU5YTU2OTg4 ZjdlNWJlMGFkYmFhNDkwNDhhNjgzZmU1ODZiZmUuLjU4ZGQ5ZjBjNzdlMWJjOWFmNTU5YQ0KPiA+ PiA3MWQwYzdjDQo+ID4+ID4gY2U3MmQ3MWM2ZGE1IDEwMDY0NA0KPiA+PiA+IC0tLQ0KPiA+PiA+ DQo+ID4+DQo+IGEvQXJtUGxhdGZvcm1Qa2cvQXJtVkV4cHJlc3NQa2cvTGlicmFyeS9IZExjZEFy bVZFeHByZXNzTGliL0hkTGNkDQo+ID4+IEFybVZFDQo+ID4+ID4geHByZXNzLmMNCj4gPj4gPiAr KysNCj4gPj4NCj4gYi9Bcm1QbGF0Zm9ybVBrZy9Bcm1WRXhwcmVzc1BrZy9MaWJyYXJ5L0hkTGNk QXJtVkV4cHJlc3NMaWIvSGRMY2QNCj4gPj4gQQ0KPiA+PiA+ICsrKyBybVZFeHByZXNzLmMNCj4g Pj4gPiBAQCAtMTQwLDYgKzE0MCw3IEBAIExjZFBsYXRmb3JtSW5pdGlhbGl6ZURpc3BsYXkgKA0K PiA+PiA+ICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgaW4gYnl0 ZXMNCj4gPj4gPiAgICAqDQo+ID4+ID4gICAgKiBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAg ICAgIEZyYW1lIGJ1ZmZlciBtZW1vcnkgYWxsb2NhdGlvbg0KPiBzdWNjZXNzLg0KPiA+PiA+ICsg ICogQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBWcmFtQmFzZUFkZHJlc3Mgb3INCj4g VnJhbVNpemUNCj4gPj4gYXJlIE5VTEwuDQo+ID4+ID4gICAgKiBAcmV0dmFsICEoRUZJX1NVQ0NF U1MpICAgICAgICAgIE90aGVyIGVycm9ycy4NCj4gPj4gPiAgKiovDQo+ID4+ID4gIEVGSV9TVEFU VVMNCj4gPj4gPiBAQCAtMTUxLDYgKzE1MiwxMyBAQCBMY2RQbGF0Zm9ybUdldFZyYW0gKA0KPiA+ PiA+ICAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsNCj4gPj4gPiAgICBFRklfQUxM T0NBVEVfVFlQRSAgICAgICBBbGxvY2F0aW9uVHlwZTsNCj4gPj4gPg0KPiA+PiA+ICsgIC8vIENo ZWNrIFZyYW1CYXNlQWRkcmVzcyBhbmQgVnJhbVNpemUgYXJlIG5vdCBOVUxMLg0KPiA+PiA+ICsg IGlmIChWcmFtQmFzZUFkZHJlc3MgPT0gTlVMTCB8fCBWcmFtU2l6ZSA9PSBOVUxMKSB7DQo+ID4+ ID4gKyAgICBBU1NFUlQgKFZyYW1CYXNlQWRkcmVzcyAhPSBOVUxMKTsNCj4gPj4gPiArICAgIEFT U0VSVCAoVnJhbVNpemUgIT0gTlVMTCk7DQo+ID4+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+PiA+ICsgIH0NCj4gPj4gPiArDQo+ID4+ID4gICAgLy8gU2V0IHRoZSB2 cmFtIHNpemUNCj4gPj4gPiAgICAqVnJhbVNpemUgPSBMQ0RfVlJBTV9TSVpFOw0KPiA+PiA+DQo+ ID4+ID4gQEAgLTE2OSw2ICsxNzcsNyBAQCBMY2RQbGF0Zm9ybUdldFZyYW0gKA0KPiA+PiA+ICAg ICAgICAgICAgICAgICAgICBWcmFtQmFzZUFkZHJlc3MNCj4gPj4gPiAgICAgICAgICAgICAgICAg ICAgKTsNCj4gPj4gPiAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+ID4gKyAgICBB U1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+PiA+ICAgICAgcmV0dXJuIFN0YXR1czsNCj4g Pj4gPiAgICB9DQo+ID4+ID4NCj4gPj4gPiBAQCAtMTc5LDggKzE4OCw4IEBAIExjZFBsYXRmb3Jt R2V0VnJhbSAoDQo+ID4+ID4gICAgICAgICAgICAgICAgICAgICpWcmFtU2l6ZSwNCj4gPj4gPiAg ICAgICAgICAgICAgICAgICAgRUZJX01FTU9SWV9XQw0KPiA+PiA+ICAgICAgICAgICAgICAgICAg ICApOw0KPiA+PiA+IC0gIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4+ID4gICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+PiA+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3Rh dHVzKTsNCj4gPj4NCj4gPj4gV2hhdCBpcyB0aGUgcG9pbnQgb2YgdGhpcyBjaGFuZ2U/DQo+ID4g W1tFdmFuIExsb3lkXV0gSXQgaXMgYSBtaW5vciBlZmZpY2llbmN5IGltcHJvdmVtZW50LiAgU2lu Y2UgdGhlIEFTU0VSVCBjYW4NCj4gb25seSBmaXJlIHdoZW4gdGhlIGlmIGNvbmRpdGlvbiBpcyB0 cnVlLCBpdCByZW1vdmVzIGEgZHVwbGljYXRlZCB0ZXN0IGZyb20gdGhlDQo+IG1haW4gKG5vbi1l cnJvcikgY29kZSBmbG93LiAgVGhpcyBpcyBpcnJlbGV2YW50IG9uIGhhcmR3YXJlLCBidXQgYWN0 dWFsbHkNCj4gc2lnbmlmaWNhbnQgd2hlbiBydW5uaW5nIGRlYnVnIGJ1aWxkcyBvbiBhbiBlbXVs YXRvciBlbnZpcm9ubWVudC4NCj4gPg0KPg0KPiBGYWlyIGVub3VnaC4gQnV0IEknZCBwcmVmZXIg dG8gZmluYWxseSBmaXggdGhlIERFQlVHIHZzIE5PT1BUIGJ1aWxkIHRhcmdldHMNCj4gZm9yIEFS TS9BQVJDSDY0LiBERUJVRyB3YXMgbmV2ZXIgaW50ZW5kZWQgdG8gYmUgLU8wIChhbmQgaXQgaXMg bm90IG9uDQo+IFg4NiBlaXRoZXIpLg0KPg0KPiBDb2RlIGlzIGNvbXBsZXggZW5vdWdoIGFzIGl0 IGlzLCBhbmQgaG93IHRvIG1vdmUgdHJpdmlhbCB0ZXN0cyBsaWtlIHRoaXMNCj4gYXJvdW5kIGZv ciAncGVyZm9ybWFuY2UnIHJlYXNvbnMgaXMgYSBkaW1lbnNpb24gSSB3b3VsZCBsaWtlIHRvIGF2 b2lkLg0KDQogW1tFdmFuIExsb3lkXV0gSSBoYXZlIG5vIG9iamVjdGlvbiB0byB0aGUgREVCVUcg YnVpbGQgYmVpbmcgdXBkYXRlZCBmcm9tIC1PMC4NCkkgc3Ryb25nbHkgc3VzcGVjdCB0aGF0IGl0 IHdhcyBzZXQgdG8gdGhhdCBiZWNhdXNlIGl0IHJlZHVjZWQgdGhlIGluY2lkZW5jZSBvZiB0aGUg cjE4IHByb2JsZW0gdGhhdCBoYXMgbm93IGJlZW4gZml4ZWQuDQpIb3dldmVyLCBJIGNhbiBjZXJ0 YWlubHkgZW52aXNhZ2UgY2lyY3Vtc3RhbmNlcyB3aGVuIHdlIG1pZ2h0IG5lZWQgdG8gZG8gYW4g ZW11bGF0b3IgcnVuIHdpdGggLU8wIHVzZWQgZm9yIHRoZSBidWlsZCAtIHNvIHRoZSByZW9yZGVy aW5nIHdvdWxkIHN0aWxsIGJlIGJlbmVmaWNpYWwuDQoNCj4NCj4gPj4NCj4gPj4gPiAgICAgIGdC Uy0+RnJlZVBhZ2VzICgqVnJhbUJhc2VBZGRyZXNzLCBFRklfU0laRV9UT19QQUdFUw0KPiAoKlZy YW1TaXplKSk7DQo+ID4+ID4gICAgICByZXR1cm4gU3RhdHVzOw0KPiA+PiA+ICAgIH0NCj4gPj4g PiBAQCAtMjE1LDYgKzIyNCw3IEBAIExjZFBsYXRmb3JtU2V0TW9kZSAoDQo+ID4+ID4gICAgRUZJ X1NUQVRVUyAgICAgICAgICAgIFN0YXR1czsNCj4gPj4gPg0KPiA+PiA+ICAgIGlmIChNb2RlTnVt YmVyID49IExjZFBsYXRmb3JtR2V0TWF4TW9kZSAoKSkgew0KPiA+PiA+ICsgICAgQVNTRVJUIChN b2RlTnVtYmVyIDwgTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKTsNCj4gPj4gPiAgICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4+ID4gICAgfQ0KPiA+PiA+DQo+ID4+ID4gQEAg LTI2NCw2ICsyNzQsNyBAQCBMY2RQbGF0Zm9ybVNldE1vZGUgKA0KPiA+PiA+ICAgICoNCj4gPj4g PiAgICAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgU3VjY2VzcyBpZiB0aGUgcmVx dWVzdGVkIG1vZGUgaXMNCj4gZm91bmQuDQo+ID4+ID4gICAgKiBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiAgIFJlcXVlc3RlZCBtb2RlIG5vdCBmb3VuZC4NCj4gPj4gPiArICAqIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgSW5mbyBpcyBOVUxMLg0KPiA+PiA+ICAqKi8NCj4g Pj4gPiAgRUZJX1NUQVRVUw0KPiA+PiA+ICBMY2RQbGF0Zm9ybVF1ZXJ5TW9kZSAoDQo+ID4+ID4g QEAgLTI3MSw3ICsyODIsOSBAQCBMY2RQbGF0Zm9ybVF1ZXJ5TW9kZSAoDQo+ID4+ID4gICAgT1VU IEVGSV9HUkFQSElDU19PVVRQVVRfTU9ERV9JTkZPUk1BVElPTiAqIENPTlNUICBJbmZvDQo+ID4+ ID4gICAgKQ0KPiA+PiA+ICB7DQo+ID4+ID4gLSAgaWYgKE1vZGVOdW1iZXIgPj0gTGNkUGxhdGZv cm1HZXRNYXhNb2RlICgpKSB7DQo+ID4+ID4gKyAgaWYgKE1vZGVOdW1iZXIgPj0gTGNkUGxhdGZv cm1HZXRNYXhNb2RlICgpIHx8IEluZm8gPT0gTlVMTCkgew0KPiA+PiA+ICsgICAgQVNTRVJUIChN b2RlTnVtYmVyIDwgTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKTsNCj4gPj4NCj4gPj4gUGxlYXNl IGRvbid0IHB1dCBhbnl0aGluZyB0aGF0IG1heSBoYXZlIGEgc2lkZSBlZmZlY3QgaW5zaWRlIEFT U0VSVA0KPiA+PiAoKSwgc2luY2UgdGhleSBhcmUgZHJvcHBlZCBmcm9tIFJFTEVBU0UgYnVpbGRz LiBZb3UgY2FuIGp1c3QgdXNlDQo+ID4+IEFTU0VSVCAoRkFMU0UpIGhlcmUsIG9yIHVzZSBhIHRl bXAgdmFyaWFibGUuDQo+ID4NCj4gPiAgW1tFdmFuIExsb3lkXV0gQWdyZWVkDQo+ID4NCj4gPj4N Cj4gPj4NCj4gPj4gPiArICAgIEFTU0VSVCAoSW5mbyAhPSBOVUxMKTsNCj4gPj4gPiAgICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4+ID4gICAgfQ0KPiA+PiA+DQo+ID4+ID4g QEAgLTMzNCw2ICszNDcsMjggQEAgTGNkUGxhdGZvcm1HZXRUaW1pbmdzICgNCj4gPj4gPiAgICAp DQo+ID4+ID4gIHsNCj4gPj4gPiAgICBpZiAoTW9kZU51bWJlciA+PSBMY2RQbGF0Zm9ybUdldE1h eE1vZGUgKCkpIHsNCj4gPj4gPiArICAgIEFTU0VSVCAoTW9kZU51bWJlciA8IExjZFBsYXRmb3Jt R2V0TWF4TW9kZSAoKSk7DQo+ID4+DQo+ID4+IHNhbWUgaGVyZQ0KPiA+IFtbRXZhbiBMbG95ZF1d IEFncmVlZA0KPiA+Pg0KPiA+PiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gPj4gPiArICB9DQo+ID4+ID4gKw0KPiA+PiA+ICsgIGlmIChIUmVzID09IE5VTEwNCj4gPj4g PiArICAgIHx8IEhTeW5jID09IE5VTEwNCj4gPj4gPiArICAgIHx8IEhCYWNrUG9yY2ggPT0gTlVM TA0KPiA+PiA+ICsgICAgfHwgSEZyb250UG9yY2ggPT0gTlVMTA0KPiA+PiA+ICsgICAgfHwgVlJl cyA9PSBOVUxMDQo+ID4+ID4gKyAgICB8fCBWU3luYyA9PSBOVUxMDQo+ID4+ID4gKyAgICB8fCBW QmFja1BvcmNoID09IE5VTEwNCj4gPj4gPiArICAgIHx8IFZGcm9udFBvcmNoID09IE5VTEwpDQo+ ID4+ID4gKyAgew0KPiA+PiA+ICsgICAgLy8gT25lIG9mIHRoZSBwb2ludGVycyBpcyBOVUxMDQo+ ID4+ID4gKyAgICBBU1NFUlQgKEhSZXMgIT0gTlVMTCk7DQo+ID4+ID4gKyAgICBBU1NFUlQgKEhT eW5jICE9IE5VTEwpOw0KPiA+PiA+ICsgICAgQVNTRVJUIChIQmFja1BvcmNoICE9IE5VTEwpOw0K PiA+PiA+ICsgICAgQVNTRVJUIChIRnJvbnRQb3JjaCAhPSBOVUxMKTsNCj4gPj4gPiArICAgIEFT U0VSVCAoVlJlcyAhPSBOVUxMKTsNCj4gPj4gPiArICAgIEFTU0VSVCAoVlN5bmMgIT0gTlVMTCk7 DQo+ID4+ID4gKyAgICBBU1NFUlQgKFZCYWNrUG9yY2ggIT0gTlVMTCk7DQo+ID4+ID4gKyAgICBB U1NFUlQgKFZGcm9udFBvcmNoICE9IE5VTEwpOw0KPiA+PiA+ICAgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4gPj4gPiAgICB9DQo+ID4+ID4NCj4gPj4gPiBAQCAtMzU2LDYgKzM5 MSw3IEBAIExjZFBsYXRmb3JtR2V0VGltaW5ncyAoDQo+ID4+ID4gICAgKg0KPiA+PiA+ICAgICog QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBUaGUgcmVxdWVzdGVkIG1vZGUgaXMgZm91 bmQuDQo+ID4+ID4gICAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIFJlcXVlc3Rl ZCBtb2RlIG5vdCBmb3VuZC4NCj4gPj4gPiArICAqIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICAgQnBwIGlzIE5VTEwuDQo+ID4+ID4gICoqLw0KPiA+PiA+ICBFRklfU1RBVFVTDQo+ID4+ ID4gIExjZFBsYXRmb3JtR2V0QnBwICgNCj4gPj4gPiBAQCAtMzYzLDcgKzM5OSw5IEBAIExjZFBs YXRmb3JtR2V0QnBwICgNCj4gPj4gPiAgICBPVVQgTENEX0JQUCAqIENPTlNUICAgICAgICAgICAg ICAgICAgICBCcHANCj4gPj4gPiAgICApDQo+ID4+ID4gIHsNCj4gPj4gPiAtICBpZiAoTW9kZU51 bWJlciA+PSBMY2RQbGF0Zm9ybUdldE1heE1vZGUgKCkpIHsNCj4gPj4gPiArICBpZiAoTW9kZU51 bWJlciA+PSBMY2RQbGF0Zm9ybUdldE1heE1vZGUgKCkgfHwgQnBwID09IE5VTEwpIHsNCj4gPj4g PiArICAgIEFTU0VSVCAoTW9kZU51bWJlciA8IExjZFBsYXRmb3JtR2V0TWF4TW9kZSAoKSk7DQo+ ID4+ID4gKyAgICBBU1NFUlQgKEJwcCAhPSBOVUxMKTsNCj4gPj4gPiAgICAgIHJldHVybiBFRklf SU5WQUxJRF9QQVJBTUVURVI7DQo+ID4+ID4gICAgfQ0KPiA+PiA+DQo+ID4+ID4gZGlmZiAtLWdp dA0KPiA+PiA+DQo+ID4+DQo+IGEvQXJtUGxhdGZvcm1Qa2cvQXJtVkV4cHJlc3NQa2cvTGlicmFy eS9QTDExMUxjZEFybVZFeHByZXNzTGliL1BMMQ0KPiA+PiAxMUxjDQo+ID4+ID4gZEFybVZFeHBy ZXNzLmMNCj4gPj4gPg0KPiA+Pg0KPiBiL0FybVBsYXRmb3JtUGtnL0FybVZFeHByZXNzUGtnL0xp YnJhcnkvUEwxMTFMY2RBcm1WRXhwcmVzc0xpYi9QTDENCj4gPj4gMTFMYw0KPiA+PiA+IGRBcm1W RXhwcmVzcy5jIGluZGV4DQo+ID4+ID4NCj4gPj4NCj4gNmFlMTNmMDZkOGIzOTZlYTFjNjdmMGJj ZDczNWE5ZDcwZjQ3NjQwMC4uNWE0YWJkNGM2ZjllODRkM2Q2OTBhDQo+ID4+IGY3MjMzYzENCj4g Pj4gPiBjZWJmZTFhZDMzOWIgMTAwNjQ0DQo+ID4+ID4gLS0tDQo+ID4+ID4NCj4gPj4NCj4gYS9B cm1QbGF0Zm9ybVBrZy9Bcm1WRXhwcmVzc1BrZy9MaWJyYXJ5L1BMMTExTGNkQXJtVkV4cHJlc3NM aWIvUEwxDQo+ID4+IDExTGMNCj4gPj4gPiBkQXJtVkV4cHJlc3MuYw0KPiA+PiA+ICsrKw0KPiA+ Pg0KPiBiL0FybVBsYXRmb3JtUGtnL0FybVZFeHByZXNzUGtnL0xpYnJhcnkvUEwxMTFMY2RBcm1W RXhwcmVzc0xpYi9QTDENCj4gPj4gPiArKysgMTFMY2RBcm1WRXhwcmVzcy5jDQo+ID4+ID4gQEAg LTE5MSw2ICsxOTEsNyBAQCBMY2RQbGF0Zm9ybUluaXRpYWxpemVEaXNwbGF5ICgNCj4gPj4gPiAg ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIGluIGJ5dGVzDQo+ID4+ ID4gICAgKg0KPiA+PiA+ICAgICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBGcmFt ZSBidWZmZXIgbWVtb3J5IGFsbG9jYXRpb24NCj4gc3VjY2Vzcy4NCj4gPj4gPiArICAqIEByZXR2 YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgVnJhbUJhc2VBZGRyZXNzIG9yDQo+IFZyYW1TaXpl IGlzDQo+ID4+IE5VTEwuDQo+ID4+ID4gICAgKiBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgICAg ICAgIE90aGVyIGVycm9ycy4NCj4gPj4gPiAgKiovDQo+ID4+ID4gIEVGSV9TVEFUVVMNCj4gPj4g PiBAQCAtMjAzLDYgKzIwNCwxMyBAQCBMY2RQbGF0Zm9ybUdldFZyYW0gKA0KPiA+PiA+DQo+ID4+ ID4gICAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4+ID4NCj4gPj4gPiArICAvLyBDaGVjayBW cmFtQmFzZUFkZHJlc3MgYW5kIFZyYW1TaXplIGFyZSBub3QgTlVMTC4NCj4gPj4gPiArICBpZiAo VnJhbUJhc2VBZGRyZXNzID09IE5VTEwgfHwgVnJhbVNpemUgPT0gTlVMTCkgew0KPiA+PiA+ICsg ICAgQVNTRVJUIChWcmFtQmFzZUFkZHJlc3MgIT0gTlVMTCk7DQo+ID4+ID4gKyAgICBBU1NFUlQg KFZyYW1TaXplICE9IE5VTEwpOw0KPiA+PiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4gPj4gPiArICB9DQo+ID4+ID4gKw0KPiA+PiA+ICAgIC8vIElzIGl0IG9uIHRoZSBt b3RoZXJib2FyZCBvciBvbiB0aGUgZGF1Z2h0ZXJib2FyZD8NCj4gPj4gPiAgICBzd2l0Y2ggKFBM MTExX0NMQ0RfU0lURSkgew0KPiA+PiA+DQo+ID4+ID4gQEAgLTIyMyw2ICsyMzEsNyBAQCBMY2RQ bGF0Zm9ybUdldFZyYW0gKA0KPiA+PiA+ICAgICAgICAgICAgICAgICAgICAgIFZyYW1CYXNlQWRk cmVzcw0KPiA+PiA+ICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4+ID4gICAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+ID4gKyAgICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ID4+ID4gICAgICAgIHJldHVybiBTdGF0dXM7DQo+ID4+ID4gICAgICB9DQo+ID4+ID4N Cj4gPj4gPiBAQCAtMjMzLDggKzI0Miw4IEBAIExjZFBsYXRmb3JtR2V0VnJhbSAoDQo+ID4+ID4g ICAgICAgICAgICAgICAgICAgICAgKlZyYW1TaXplLA0KPiA+PiA+ICAgICAgICAgICAgICAgICAg ICAgIEVGSV9NRU1PUllfV0MNCj4gPj4gPiAgICAgICAgICAgICAgICAgICAgICApOw0KPiA+PiA+ IC0gICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPj4gPiAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPj4gPiArICAgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsN Cj4gPj4NCj4gPj4gUGxlYXNlIGRyb3AgdGhpcyBjaGFuZ2UNCj4gPg0KPiA+ICBbW0V2YW4gTGxv eWRdXSBBcyBzdGF0ZWQgYWJvdmUsIHRoaXMgaXMgbm90IGluY29uc2VxdWVudGlhbCBmb3Igc29t ZSB1c2UNCj4gY2FzZXMuICBUaGUgQVNTRVJUIGNhbiBvbmx5IGZpcmUgd2hlbiB0aGUgaWYgaXMg c2F0aXNmaWVkLCBzbyBtb3ZpbmcgdGhlDQo+IEFTU0VSVCByZWR1Y2VzIHRoZSBudW1iZXIgb2Yg dGVzdHMgZXhlY3V0ZWQgaW4gbm9ybWFsIGV4ZWN1dGlvbg0KPiAoZGVwZW5kaW5nIG9uIG9wdGlt aXNhdGlvbiBsZXZlbCkuDQo+ID4NCj4NCj4gQXMgc3RhdGVkIGFib3ZlLCBsZXQncyBmaXggREVC VUcgdnMgTk9PUFQgaW5zdGVhZC4NCj4NCj4gPj4NCj4gPj4gPiAgICAgICAgZ0JTLT5GcmVlUGFn ZXMgKCpWcmFtQmFzZUFkZHJlc3MsIEVGSV9TSVpFX1RPX1BBR0VTDQo+ID4+ICgqVnJhbVNpemUp KTsNCj4gPj4gPiAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPj4gPiAgICAgIH0NCj4gPj4gPiBA QCAtMjkzLDYgKzMwMiw3IEBAIExjZFBsYXRmb3JtU2V0TW9kZSAoDQo+ID4+ID4gICAgVUlOVDMy ICAgICAgICAgICAgICAgIFN5c0lkOw0KPiA+PiA+DQo+ID4+ID4gICAgaWYgKE1vZGVOdW1iZXIg Pj0gTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKSB7DQo+ID4+ID4gKyAgICBBU1NFUlQgKE1vZGVO dW1iZXIgPCBMY2RQbGF0Zm9ybUdldE1heE1vZGUgKCkpOw0KPiA+Pg0KPiA+PiBObyBmdW5jdGlv biBjYWxscyBpbnNpZGUgQVNTRVJUICgpIHBsZWFzZQ0KPiA+IFtbRXZhbiBMbG95ZF1dIEFncmVl ZA0KPiA+DQo+ID4+DQo+ID4+ID4gICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K PiA+PiA+ICAgIH0NCj4gPj4gPg0KPiA+PiA+IEBAIC0zNTksNiArMzY5LDcgQEAgTGNkUGxhdGZv cm1TZXRNb2RlICgNCj4gPj4gPiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KG9uIHN1Y2Nlc3MpLg0KPiA+PiA+ICAgICoNCj4gPj4gPiAgICAqIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICAgU3VjY2VzcyBpZiB0aGUgcmVxdWVzdGVkIG1vZGUgaXMNCj4gZm91bmQu DQo+ID4+ID4gKyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIEluZm8gaXMgTlVM TC4NCj4gPj4gPiAgICAqIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgUmVxdWVzdGVk IG1vZGUgbm90IGZvdW5kLg0KPiA+PiA+ICAqKi8NCj4gPj4gPiAgRUZJX1NUQVRVUw0KPiA+PiA+ IEBAIC0zNjcsNyArMzc4LDkgQEAgTGNkUGxhdGZvcm1RdWVyeU1vZGUgKA0KPiA+PiA+ICAgIE9V VCBFRklfR1JBUEhJQ1NfT1VUUFVUX01PREVfSU5GT1JNQVRJT04gKiBDT05TVCBJbmZvDQo+ID4+ ID4gICAgKQ0KPiA+PiA+ICB7DQo+ID4+ID4gLSAgaWYgKE1vZGVOdW1iZXIgPj0gTGNkUGxhdGZv cm1HZXRNYXhNb2RlICgpKSB7DQo+ID4+ID4gKyAgaWYgKE1vZGVOdW1iZXIgPj0gTGNkUGxhdGZv cm1HZXRNYXhNb2RlICgpIHx8IEluZm8gPT0gTlVMTCkgew0KPiA+PiA+ICsgICAgQVNTRVJUIChN b2RlTnVtYmVyIDwgTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKTsNCj4gPj4gPiArICAgIEFTU0VS VCAoSW5mbyAhPSBOVUxMKTsNCj4gPj4gPiAgICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVU RVI7DQo+ID4+ID4gICAgfQ0KPiA+PiA+DQo+ID4+ID4gQEAgLTQxNSw2ICs0MjgsNyBAQCBMY2RQ bGF0Zm9ybVF1ZXJ5TW9kZSAoDQo+ID4+ID4gICAgKg0KPiA+PiA+ICAgICogQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICBTdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgbW9kZSBpcw0KPiBm b3VuZC4NCj4gPj4gPiAgICAqIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICAgUmVxdWVz dGVkIG1vZGUgbm90IGZvdW5kLg0KPiA+PiA+ICsgICogQHJldHZhbCBFRklfSU5WQUxJRF9QQVJB TUVURVIgICBPbmUgb2YgdGhlIE9VVCBwYXJhbWV0ZXJzIGlzDQo+ID4+IE5VTEwuDQo+ID4+ID4g ICoqLw0KPiA+PiA+ICBFRklfU1RBVFVTDQo+ID4+ID4gIExjZFBsYXRmb3JtR2V0VGltaW5ncyAo DQo+ID4+ID4gQEAgLTQzMCw2ICs0NDQsMjggQEAgTGNkUGxhdGZvcm1HZXRUaW1pbmdzICgNCj4g Pj4gPiAgICApDQo+ID4+ID4gIHsNCj4gPj4gPiAgICBpZiAoTW9kZU51bWJlciA+PSBMY2RQbGF0 Zm9ybUdldE1heE1vZGUgKCkpIHsNCj4gPj4gPiArICAgIEFTU0VSVCAoTW9kZU51bWJlciA8IExj ZFBsYXRmb3JtR2V0TWF4TW9kZSAoKSk7DQo+ID4+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURf UEFSQU1FVEVSOw0KPiA+PiA+ICsgIH0NCj4gPj4gPiArDQo+ID4+ID4gKyAgaWYgKEhSZXMgPT0g TlVMTA0KPiA+PiA+ICsgICAgfHwgSFN5bmMgPT0gTlVMTA0KPiA+PiA+ICsgICAgfHwgSEJhY2tQ b3JjaCA9PSBOVUxMDQo+ID4+ID4gKyAgICB8fCBIRnJvbnRQb3JjaCA9PSBOVUxMDQo+ID4+ID4g KyAgICB8fCBWUmVzID09IE5VTEwNCj4gPj4gPiArICAgIHx8IFZTeW5jID09IE5VTEwNCj4gPj4g PiArICAgIHx8IFZCYWNrUG9yY2ggPT0gTlVMTA0KPiA+PiA+ICsgICAgfHwgVkZyb250UG9yY2gg PT0gTlVMTCkNCj4gPj4gPiArICB7DQo+ID4+ID4gKyAgICAvLyBPbmUgb2YgdGhlIHBvaW50ZXJz IGlzIE5VTEwNCj4gPj4gPiArICAgIEFTU0VSVCAoSFJlcyAhPSBOVUxMKTsNCj4gPj4gPiArICAg IEFTU0VSVCAoSFN5bmMgIT0gTlVMTCk7DQo+ID4+ID4gKyAgICBBU1NFUlQgKEhCYWNrUG9yY2gg IT0gTlVMTCk7DQo+ID4+ID4gKyAgICBBU1NFUlQgKEhGcm9udFBvcmNoICE9IE5VTEwpOw0KPiA+ PiA+ICsgICAgQVNTRVJUIChWUmVzICE9IE5VTEwpOw0KPiA+PiA+ICsgICAgQVNTRVJUIChWU3lu YyAhPSBOVUxMKTsNCj4gPj4gPiArICAgIEFTU0VSVCAoVkJhY2tQb3JjaCAhPSBOVUxMKTsNCj4g Pj4gPiArICAgIEFTU0VSVCAoVkZyb250UG9yY2ggIT0gTlVMTCk7DQo+ID4+ID4gICAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+PiA+ICAgIH0NCj4gPj4gPg0KPiA+PiA+IEBA IC00NTIsNiArNDg4LDcgQEAgTGNkUGxhdGZvcm1HZXRUaW1pbmdzICgNCj4gPj4gPiAgICAqDQo+ ID4+ID4gICAgKiBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSByZXF1ZXN0ZWQg bW9kZSBpcyBmb3VuZC4NCj4gPj4gPiAgICAqIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVS ICAgUmVxdWVzdGVkIG1vZGUgbm90IGZvdW5kLg0KPiA+PiA+ICsgICogQHJldHZhbCBFRklfSU5W QUxJRF9QQVJBTUVURVIgICBCcHAgaXMgTlVMTC4NCj4gPj4gPiAgKiovDQo+ID4+ID4gIEVGSV9T VEFUVVMNCj4gPj4gPiAgTGNkUGxhdGZvcm1HZXRCcHAgKA0KPiA+PiA+IEBAIC00NjAsNiArNDk3 LDggQEAgTGNkUGxhdGZvcm1HZXRCcHAgKA0KPiA+PiA+ICAgICkNCj4gPj4gPiAgew0KPiA+PiA+ ICAgIGlmIChNb2RlTnVtYmVyID49IExjZFBsYXRmb3JtR2V0TWF4TW9kZSAoKSkgew0KPiA+PiA+ ICsgICAgQVNTRVJUIChNb2RlTnVtYmVyIDwgTGNkUGxhdGZvcm1HZXRNYXhNb2RlICgpKTsNCj4g Pj4gPiArICAgIEFTU0VSVCAoQnBwICE9IE5VTEwpOw0KPiA+PiA+ICAgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPj4gPiAgICB9DQo+ID4+ID4NCj4gPj4gPiBkaWZmIC0tZ2l0 IGEvQXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9IZExjZC5jDQo+ ID4+ID4gYi9Bcm1QbGF0Zm9ybVBrZy9Ecml2ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL0hkTGNk LmMNCj4gPj4gPiBpbmRleA0KPiA+PiA+DQo+ID4+DQo+IDVmOTUwNTc5NzIwZmI2OWUwYTQ4MWY2 OTdhNWNjNDAzODE1OGI0MDkuLmEyNjY2NzFhMjZmMDFkMzFlOGRkDQo+ID4+IGIwY2Y3Y2JmDQo+ ID4+ID4gZTU5ZDJmNGRjNDljIDEwMDY0NA0KPiA+PiA+IC0tLSBhL0FybVBsYXRmb3JtUGtnL0Ry aXZlcnMvTGNkR3JhcGhpY3NPdXRwdXREeGUvSGRMY2QuYw0KPiA+PiA+ICsrKyBiL0FybVBsYXRm b3JtUGtnL0RyaXZlcnMvTGNkR3JhcGhpY3NPdXRwdXREeGUvSGRMY2QuYw0KPiA+PiA+IEBAIC0x MDksMTUgKzEwOSwxNSBAQCBMY2RTZXRNb2RlICgNCj4gPj4gPiAgICAgICAgICAgICAgICZWQmFj a1BvcmNoLA0KPiA+PiA+ICAgICAgICAgICAgICAgJlZGcm9udFBvcmNoDQo+ID4+ID4gICAgICAg ICAgICAgICApOw0KPiA+PiA+IC0gIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4+ID4g ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+PiA+IC0gICAgcmV0dXJuIEVGSV9ERVZJ Q0VfRVJST1I7DQo+ID4+ID4gKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+PiA+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gPj4gPiAgICB9DQo+ID4+ID4NCj4gPj4gPiAgICBTdGF0 dXMgPSBMY2RQbGF0Zm9ybUdldEJwcCAoTW9kZU51bWJlciwgJkxjZEJwcCk7DQo+ID4+ID4gLSAg QVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPj4gPiAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ID4+ID4gLSAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gPj4gPiArICAg IEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiA+PiA+ICAgIH0NCj4gPj4gPg0KPiA+PiA+ICAgIEJ5dGVzUGVyUGl4ZWwgPSBHZXRCeXRlc1Bl clBpeGVsIChMY2RCcHApOyBkaWZmIC0tZ2l0DQo+ID4+ID4gYS9Bcm1QbGF0Zm9ybVBrZy9Ecml2 ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL1BMMTExTGNkLmMNCj4gPj4gPiBiL0FybVBsYXRmb3Jt UGtnL0RyaXZlcnMvTGNkR3JhcGhpY3NPdXRwdXREeGUvUEwxMTFMY2QuYw0KPiA+PiA+IGluZGV4 DQo+ID4+ID4NCj4gPj4NCj4gMzg2ZTYxNDBhNjliMDQ1Zjc3ZWU3ZmE2MGM0NTg3ZDhiZjRlN2Q1 NC4uZjQzMmM4ZDgwMjYxNGU4YTBlNGRkDQo+ID4+IGFiMzg5OGYNCj4gPj4gPiA2ZTBkYmY5YTE1 NzIgMTAwNjQ0DQo+ID4+ID4gLS0tIGEvQXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGlj c091dHB1dER4ZS9QTDExMUxjZC5jDQo+ID4+ID4gKysrIGIvQXJtUGxhdGZvcm1Qa2cvRHJpdmVy cy9MY2RHcmFwaGljc091dHB1dER4ZS9QTDExMUxjZC5jDQo+ID4+ID4gQEAgLTExMCwxNSArMTEw LDE1IEBAIExjZFNldE1vZGUgKA0KPiA+PiA+ICAgICAgICAgICAgICAgJlZCYWNrUG9yY2gsDQo+ ID4+ID4gICAgICAgICAgICAgICAmVkZyb250UG9yY2gNCj4gPj4gPiAgICAgICAgICAgICAgICk7 DQo+ID4+ID4gLSAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gPj4gPiAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4+ID4gLSAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsN Cj4gPj4gPiArICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4+ID4gKyAgICByZXR1 cm4gU3RhdHVzOw0KPiA+PiA+ICAgIH0NCj4gPj4gPg0KPiA+PiA+ICAgIFN0YXR1cyA9IExjZFBs YXRmb3JtR2V0QnBwIChNb2RlTnVtYmVyLCAmTGNkQnBwKTsNCj4gPj4gPiAtICBBU1NFUlRfRUZJ X0VSUk9SIChTdGF0dXMpOw0KPiA+PiA+ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g Pj4gPiAtICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiA+PiA+ICsgICAgQVNTRVJUX0VG SV9FUlJPUiAoU3RhdHVzKTsNCj4gPj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4+ID4gICAg fQ0KPiA+PiA+DQo+ID4+ID4gICAgLy8gRGlzYWJsZSB0aGUgQ0xDRF9MY2RFbiBiaXQNCj4gPj4g PiAtLQ0KPiA+PiA+IEd1aWQoIkNFMTY1NjY5LTNFRjMtNDkzRi1CODVELTYxOTBFRTVCOTc1OSIp DQo+ID4+ID4NCj4gPiBJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29udGVudHMgb2YgdGhpcyBlbWFp bCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZQ0KPiBjb25maWRlbnRpYWwgYW5kIG1heSBhbHNvIGJl IHByaXZpbGVnZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZA0KPiByZWNpcGllbnQsIHBs ZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Nsb3NlIHRo ZQ0KPiBjb250ZW50cyB0byBhbnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFueSBwdXJwb3Nl LCBvciBzdG9yZSBvciBjb3B5IHRoZQ0KPiBpbmZvcm1hdGlvbiBpbiBhbnkgbWVkaXVtLiBUaGFu ayB5b3UuDQpJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29udGVudHMgb2YgdGhpcyBlbWFpbCBhbmQg YW55IGF0dGFjaG1lbnRzIGFyZSBjb25maWRlbnRpYWwgYW5kIG1heSBhbHNvIGJlIHByaXZpbGVn ZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHBsZWFzZSBub3RpZnkg dGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Nsb3NlIHRoZSBjb250ZW50cyB0 byBhbnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFueSBwdXJwb3NlLCBvciBzdG9yZSBvciBj b3B5IHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgbWVkaXVtLiBUaGFuayB5b3UuDQo=