From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.2.67; helo=eur01-db5-obe.outbound.protection.outlook.com; envelope-from=evan.lloyd@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0067.outbound.protection.outlook.com [104.47.2.67]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id D2DC12218E956 for ; Tue, 5 Dec 2017 14:01:53 -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=EsGNpOcRabk8pUowg6Oqz1dTdk08wVOHWXyaUpXFA3o=; b=izvsM8fBdlA8FPoY3PgNEn11ODXWVx2UCiYN5SrnStfWQtjig5qZPPPa5EaP75eVglRJeznCa701oQOebw42SIOw0X1qVBdWTL8sRtmMkvboK3XdDytu6zk3owgtWaQAr5cTWwNDOagaL6JbkLC/3zyQ3gWuMgaG4hH7y15GGsM= Received: from AM4PR0801MB1444.eurprd08.prod.outlook.com (10.168.5.24) by AM4PR0801MB1444.eurprd08.prod.outlook.com (10.168.5.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.302.9; Tue, 5 Dec 2017 22:06:22 +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 22:06:22 +0000 From: Evan Lloyd To: Leif Lindholm CC: "edk2-devel@lists.01.org" , "dp@arm.com" Thread-Topic: [edk2] [PATCH 02/19] ArmPlatformPkg: Tidy LcdGraphicsOutputDxe code: Added comments Thread-Index: AQHTNwRIiRSyeJngAke6xVIBe38dHKLgqysAgFTTe9CAABo4gIAAGPrQ Date: Tue, 5 Dec 2017 22:06:21 +0000 Message-ID: References: <20170926201529.11644-1-evan.lloyd@arm.com> <20170926201529.11644-3-evan.lloyd@arm.com> <20171012190208.q27xin4lleppjqo4@bivouac.eciton.net> <20171205195843.f4vub54dye3c3yus@bivouac.eciton.net> In-Reply-To: <20171205195843.f4vub54dye3c3yus@bivouac.eciton.net> 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; AM4PR0801MB1444; 6:G8ZseYUIbqnuPcu64UTThOZTAEZcH9TIncd/tTo9VP+2YnTinCmtVqdG+M6CKwOK6U1rrsDoozPuQ77/XPVUA7nln2HCgjXuSTHuoWfgdqlp+nKJ5+wkI+NjEYTLsdgYVdQ38lEM3w3x3ZsI+F9mGOLnWiH7PTQ4JGbQXPs1ayHK1QO1v6yg6lg7Nj+CoEvjNa6kgsobA7inMXq1Ek828p1y/ye8BfheLmeD/NEmlDycnU/E/SvuiBHr2d6HefFwoTjzh7k+GmxNdqzTBvtT/RhgN0Nha92syyTg9/I6HbCP1ZpxhePwMSeegYLqBKvKeQG/QHKk1xKf0ak0F2yp13p4XwltAUMouLXuoYUQ6Vg=; 5:vC7oB867PtYVp4YX+LL8s49zzcH2hv1U+IfGyp3q3m/mprmatcvmTWoT/Sz7RyJJUx0aRbfHG6NqKXCWWUUoqeZJZegrkMq+c7WHAz2N+QK874umzj1toO8amSycw79OjONYksot3ftsZ4GFUCiGGBvILkYGJJ220/2rVycrn30=; 24:ca/QPZ+oB5TIvcwsrK4dt/WHR4MqYmW2BmDVpb5DGDqcNxWyEaUZOdLzSM+cOiuZA+z+v34J8YEJ3QT6HQOu8XJ/bqYXj1V7jETPhc9IKv4=; 7:hEbsf7E06oNWGTdPrZxG0TJbRnEOWbtsnBgI7p9Cj9k7iJO6m+jAMrULdTGSGJxRJef/RJiTHE3Nvw2LcsPkYLDMwVsA1VljL8QFWRmX963II94Y4zOWwUQylrMI2qrWigwlM1Q1kBbj6s2cB4NiCw+6BVBCdpiFvkR54/SK+YLXjzpxeWJpgGIB0VwtgZVSzdbSOzcjQDG0baIfJXc/4/KI+mVMWsBH/FkCj0DZy6brory90cb69FaQ8Ggj+2F1 x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: 715152a0-3703-4e0a-bd72-08d53c2c6b5c 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:AM4PR0801MB1444; x-ms-traffictypediagnostic: AM4PR0801MB1444: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(162533806227266); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(10201501046)(3231022)(6055026)(6041248)(20161123555025)(20161123558100)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(201708071742011); SRVR:AM4PR0801MB1444; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM4PR0801MB1444; x-forefront-prvs: 0512CC5201 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(376002)(366004)(346002)(24454002)(13464003)(85644002)(40434004)(199004)(189003)(8936002)(2906002)(6916009)(2950100002)(14454004)(229853002)(478600001)(45080400002)(68736007)(105586002)(72206003)(55016002)(966005)(106356001)(316002)(575784001)(76176011)(7696005)(86362001)(99286004)(102836003)(93886005)(6246003)(54906003)(3280700002)(3846002)(3660700001)(6116002)(97736004)(33656002)(81156014)(81166006)(66066001)(8676002)(74316002)(305945005)(101416001)(7736002)(2900100001)(5660300001)(6436002)(5250100002)(4326008)(6506006)(53546010)(53946003)(5890100001)(25786009)(9686003)(6306002)(53936002)(559001)(579004)(19627235001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0801MB1444; 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: 715152a0-3703-4e0a-bd72-08d53c2c6b5c X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Dec 2017 22:06:21.9010 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0801MB1444 Subject: Re: [PATCH 02/19] ArmPlatformPkg: Tidy LcdGraphicsOutputDxe code: Added comments 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 22:01:55 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTGVpZiBMaW5kaG9sbSBb bWFpbHRvOmxlaWYubGluZGhvbG1AbGluYXJvLm9yZ10NCj4gU2VudDogMDUgRGVjZW1iZXIgMjAx NyAxOTo1OQ0KPiBUbzogRXZhbiBMbG95ZCA8RXZhbi5MbG95ZEBhcm0uY29tPg0KPiBDYzogZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggMDIvMTld IEFybVBsYXRmb3JtUGtnOiBUaWR5DQo+IExjZEdyYXBoaWNzT3V0cHV0RHhlIGNvZGU6IEFkZGVk IGNvbW1lbnRzDQo+DQo+IE9uIFR1ZSwgRGVjIDA1LCAyMDE3IGF0IDA2OjU1OjI1UE0gKzAwMDAs IEV2YW4gTGxveWQgd3JvdGU6DQo+ID4NCj4gPg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gPiA+IEZyb206IExlaWYgTGluZGhvbG0gW21haWx0bzpsZWlmLmxpbmRob2xtQGxp bmFyby5vcmddDQo+ID4gPiBTZW50OiAxMiBPY3RvYmVyIDIwMTcgMjA6MDINCj4gPiA+IFRvOiBF dmFuIExsb3lkIDxFdmFuLkxsb3lkQGFybS5jb20+DQo+ID4gPiBDYzogZWRrMi1kZXZlbEBsaXN0 cy4wMS5vcmcNCj4gPiA+IFN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENIIDAyLzE5XSBBcm1QbGF0 Zm9ybVBrZzogVGlkeQ0KPiA+ID4gTGNkR3JhcGhpY3NPdXRwdXREeGUgY29kZTogQWRkZWQgY29t bWVudHMNCj4gPiA+DQo+ID4gPiBHaXZlbiB0aGF0IGFsbCBjaGFuZ2VzIHRvIHRoZSBmaXJzdCBm aWxlIF9yZW1vdmVfIGNvbW1lbnRzLCBpdCBtYXkNCj4gPiA+IGJlIGJldHRlciB3aXRoIGEgc3Vi amVjdCBsaW5lIHNheWluZyAidXBkYXRpbmcgY29tbWVudHMiLg0KPiA+ID4NCj4gPiA+IE9uIFR1 ZSwgU2VwIDI2LCAyMDE3IGF0IDA5OjE1OjEyUE0gKzAxMDAsIGV2YW4ubGxveWRAYXJtLmNvbQ0K PiB3cm90ZToNCj4gPiA+ID4gRnJvbTogR2lyaXNoIFBhdGhhayA8Z2lyaXNoLnBhdGhha0Bhcm0u Y29tPg0KPiA+ID4gPg0KPiA+ID4gPiBUaGVyZSBpcyBubyBmdW5jdGlvbmFsIG1vZGlmaWNhdGlv biBpbiB0aGlzIGNoYW5nZSBBcyBwcmVwYXJhdGlvbg0KPiA+ID4gPiBmb3IgYSBDaGFuZ2UgKFJl amlnIG9mIExjZEdyYXBoaWNzT3V0UHV0RHhlKSwgc29tZSBjb21tZW50cyBhcmUNCj4gPiA+ID4g bW9kaWZpZWQgYW5kIGEgZmV3IG5ldyBjb21tZW50cyBhcmUgYWRkZWQuDQo+ID4gPiA+IFRoaXMg aXMgdG8gcHJldmVudCBtaXhpbmcgZm9ybWF0dGluZyBjaGFuZ2VzIHdpdGggZnVuY3Rpb25hbCBj aGFuZ2VzLg0KPiA+ID4gPg0KPiA+ID4gPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENv bnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEdpcmlzaCBQ YXRoYWsgPGdpcmlzaC5wYXRoYWtAYXJtLmNvbT4NCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogRXZh biBMbG95ZCA8ZXZhbi5sbG95ZEBhcm0uY29tPg0KPiA+ID4gPiAtLS0NCj4gPiAuLi4NCj4gPiA+ ID4NCj4gPiA+ID4gLQ0KPiA+ID4gPiArLyoqIFBsYXRmb3JtIHJlbGF0ZWQgaW5pdGlhbGl6YXRp b24gZnVuY3Rpb24uDQo+ID4gPiA+ICsgICoNCj4gPiA+ID4gKyAgKiBAcGFyYW0gSU4gSGFuZGxl ICAgICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBMQ0QgZGV2aWNlIGluc3RhbmNlLg0KPiA+ID4g PiArICAqDQo+ID4gPiA+ICsgICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFBsYXRm b3JtIGluaXRpYWxpemF0aW9uIHN1Y2Nlc3MuDQo+ID4gPiA+ICsgICogQHJldHZhbCAhKEVGSV9T VUNDRVNTKSAgICAgICAgIE90aGVyIGVycm9ycy4NCj4gPiA+ID4gKyoqLw0KPiA+ID4NCj4gPiA+ IFNvIC4uLiA2LjggbGlzdHMNCj4gPiA+IC8qKg0KPiA+ID4gICB0ZXh0DQo+ID4gPiAqKi8NCj4g PiA+IGFzIHRoZQ0KPiA+ID4NCj4gPiA+IFRoZSBmb3JtYXQNCj4gPiA+IC8qKg0KPiA+ID4gICog dGV4dA0KPiA+ID4gKiovDQo+ID4gPiBpcyBtZW50aW9uZWQgYXMgImFsc28gbGVnYWwgYmVjYXVz ZSBkb3h5Z2VuIGlnbm9yZXMgdGhlIGxlYWRpbmcgKiIuDQo+ID4gPg0KPiA+ID4gVGhlIGZvcm1h dA0KPiA+ID4gLyoqDQo+ID4gPiAgICoNCj4gPiA+ICoqLw0KPiA+ID4gaXMgbmV2ZXIgbWVudGlv bmVkLCBhbHRob3VnaCBJIGd1ZXNzICJhbHNvIGxlZ2FsIiBiZWNhdXNlICogaWdub3JlZC4NCj4g PiA+DQo+ID4gPiBIb3dldmVyLCBhIHF1aWNrIHNraW0gaW4gTWRlUGtnIHN1Z2dlc3RzIHRoZSBm b3JtZXIgaXMgdGhlIGdlbmVyYWxseQ0KPiA+ID4gdXNlZCB2YXJpYW50LiBDYW4geW91IHBsZWFz ZSB1cGRhdGUgdG8gdGhhdCBmb3JtYXQgdGhyb3VnaG91dCAoZHJvcA0KPiA+ID4gdGhlIGxlYWRp bmcgJyonIG9uIGxpbmVzIG5vdCBzdGFydGluZyBvciBlbmRpbmcgdGhlIGNvbW1lbnQgYmxvY2sp Pw0KPiA+DQo+ID4gIFtbRXZhbiBMbG95ZF1dIEknbSBub3Qgc3VyZSBpZiBPdXRsb29rIGhhcyBt YW5nbGVkIHNvbWV0aGluZywgb3IgSSdtDQo+ID4gYmVpbmcgb2J0dXNlLCBidXQgSSdtIG5vdCBz dXJlIEkgZm9sbG93IHRoZSBkaXN0aW5jdGlvbiB5b3UgYXJlIG1ha2luZw0KPiB0aGVyZS4NCj4g PiBIb3dldmVyLCBpZiB5b3VyIG9iamVjdGlvbiBpcyB0byB0aGUgbGVhZGluZyAnKicgdGhlbiB3 ZSBjYW4gcmVtb3ZlDQo+ID4gaXQuDQo+DQo+IFRoZSBvYmplY3Rpb24gaXMgc2xpZ2h0bHkgd2l0 aCByZWdhcmRzIHRvIHRoZSBsZWFkaW5nICosIGJ1dCBtb3Jlc28gb3ZlciBpdA0KPiBhbGlnbmlu ZyB3aXRoIHRoZSBzZWNvbmQgKiBvZiB0aGUgb3BlbmluZyAvKiogcmF0aGVyIHRoYW4gdGhlIGZp cnN0Lg0KDQpbW0V2YW4gTGxveWRdXSBKdXN0IHRvIGJlIGEgYmFycmFjayByb29tIGxhd3llciAt IHRoZSBDQ1MgY2xlYXJseSBzdGF0ZXM6DQoiIDMuMi4xIEZvcm1hdHRpbmc6IEdlbmVyYWwgUnVs ZXMNCi4uLg0K74K3IEFsbCBpbmRlbnRhdGlvbiAodGFicykgaXMgdHdvIHNwYWNlcy4gU2VlICJH ZW5lcmFsIFJ1bGVz4oCdLiINCiIgNS4xLjIgLi4uIEFsbCBpbmRlbnRhdGlvbiBpcyBvbiB0d28g c3BhY2UgYm91bmRhcmllcy4gVGhlcmUgYXJlIG5vIGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlISIN Cg0KT2YgY291cnNlIHlvdSBtYXkgcXVpYmJsZSBvdmVyIHRoaXMgYmVpbmcgYW4gaW5kZW50YXRp b24sIGJ1dCB0aGUgbGVhZGluZyAnKidzIGFyZSBjZXJ0YWlubHkgaW5kZW50ZWQgcmVsYXRpdmUg dG8gdGhlICIvKioiIGluIGVpdGhlciBjYXNlLg0KDQo+DQo+IEl0IGlzIGVudGlyZWx5IHBvc3Np YmxlIHRoYXQgc29tZSBmb3JtIG9mIGVtYWlsIG1hbmdsaW5nIGlzIHRoZSBjYXVzZQ0KPiAoaW5j bHVkaW5nIHBlcmhhcHMgeW91IHJlYWRpbmcgbXkgcmVwbHkgaW4gbm9uLWZpeGVkIHdpZHRoIGZv bnQpLg0KW1tFdmFuIExsb3lkXV0gQWxtb3N0IGNlcnRhaW5seSB0cnVlLg0KPg0KPiA+IEJ5IHRo ZSB3YXkgLSBzaG91bGRuJ3QgaXQgYmU6DQo+ID4gLyoqICBCcmllZiBkZXNjcmlwdGlvbg0KPiA+ DQo+ID4gICBEZXRhaWxzDQo+ID4gKiovICAoc2VlIEhvcm9yIHZhY3VpaSkNCj4NCj4gVGhhdCB3 b3VsZCBiZSBteSBwcmVmZXJyZWQgdmVyc2lvbi4gKEkgc3RhcnRlZCB0eXBpbmcgdGhhdCBhYm92 ZSwgYnV0IHNlZW0NCj4gdG8gaGF2ZSBsb3N0IG15IHdheSBhZnRlciAiYXMgdGhlIi4pDQo+DQo+ IEl0J3MganVzdCB0aGF0DQo+IC8qKg0KPiAgKg0KPiAgKiovDQo+IGlzIGNvbW1vbiBlbm91Z2gg aW4gdGhlIGNvZGViYXNlIHRoYXQgSSB3b3VsZG4ndCBvYmplY3QgdG8gaXQuDQo+DQo+IFdoZXJl YXMgSSBoYXZlbid0IHNlZW4NCj4gLyoqDQo+ICAgKg0KPiAgKiovDQo+IGFueXdoZXJlIGVsc2UN Cg0KIFtbRXZhbiBMbG95ZF1dIEkgcmVmZXIgbXkgbGVhcm5lZCBmcmllbmQgdG8gICJDQ1MgNS4x LjIgLi4uIEFsbCBpbmRlbnRhdGlvbiBpcyBvbiB0d28gc3BhY2UgYm91bmRhcmllcy4gVGhlcmUg YXJlIG5vIGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlISINCkFsc286DQoiMS4xIEFic3RyYWN0DQou Li4gQWxsIGNoYW5nZXMgb3IgYWRkaXRpb25zIGZyb20gdGhpcyBwb2ludCBvbiBzaGFsbCBjb25m b3JtIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi4gUHJlLWV4aXN0aW5nIGNvZGUgZG9lcyBub3QgbmVl ZCB0byBiZSB1cGRhdGVkIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGNvbmZvcm1pbmcgdG8gdGhp cyBzcGVjaWZpY2F0aW9uLiBBcyBjb25mb3JtaW5nIHVwZGF0ZXMgYXJlIG1hZGUsIHRoZSBkZXZl bG9wZXIgbWF5IHVwZGF0ZSBvdGhlciBjb250ZW50IHdpdGhpbiB0aGUgbW9kaWZpZWQgZmlsZSB0 byBicmluZyBpdCB3aXRoaW4gY29tcGxpYW5jZSB3aXRoIHRoaXMgc3BlY2lmaWNhdGlvbi4iDQoN CkJlaW5nIHNlcmlvdXM6IHNpbmNlIHdlIGFsbCBzZWVtIHRvIHByZWZlciBubyBsZWFkaW5nICcq J3MgdGhlIGFib3ZlIGlzIG5vdCByZWFsbHkgcmVsZXZhbnQgLSB3ZSdsbCBnbyB3aXRoIGEgbWF0 Y2ggb2YgdGhlIGZpbGUgaGVhZGVyIGZvcm1hdCAoYW5kIDIgc3BhY2UgaW5kZW50cyBmb3IgdGhl IGJvZHkgdGV4dCkuDQoNCj4NCj4gPiBJIGFjdHVhbGx5IHRoaW5rIHRoZSBDQ1MgaXMgd29lZnVs bHkgaW5jb25zaXN0ZW50IGluIGl0cyBleGFtcGxlDQo+ID4gY29tbWVudCBzdHlsZSwgYW5kIHRo YXQgYWx0aG91Z2ggbGVhZGluZyAnKidzIGFyZSBhY2NlcHRhYmxlIHRvDQo+ID4gRG94eWdlbiwg aXQgd291bGQgYmUgYmV0dGVyIHRvIHN0aWNrIHRvIG9uZSBzdHlsZSAodGhhdCBvZiB0aGUgZmls ZQ0KPiA+IGhlYWRlciBjb21tZW50LCB3aXRob3V0IGxlYWRpbmcgJyoncykgdGhyb3VnaG91dC4N Cj4NCj4gSSB3b24ndCBhcmd1ZSBhYm91dCB0aGUgY29uc2lzdGVuY3ksIGFuZCBhZ3JlZSB3aXRo IHlvdXIgdmlldyBvbiB0aGlzLg0KPg0KPiAvDQo+ICAgICBMZWlmDQo+DQo+ID4NCj4gPiA+DQo+ ID4gPiBObyBvdGhlciBjb21tZW50cyAob3RoZXIgdGhhbiBoYXZpbmcgdGhlc2UgcHJvdG90eXBl DQo+IGRvY3VtZW50YXRpb25zDQo+ID4gPiBhcmUgYSBncmVhdCBpbXByb3ZlbWVudCkuDQo+ID4g Pg0KPiA+ID4gLw0KPiA+ID4gICAgIExlaWYNCj4gPiA+DQo+ID4gPiA+ICBFRklfU1RBVFVTDQo+ ID4gPiA+ICBMY2RQbGF0Zm9ybUluaXRpYWxpemVEaXNwbGF5ICgNCj4gPiA+ID4gICAgSU4gRUZJ X0hBTkRMRSAgIEhhbmRsZQ0KPiA+ID4gPiAgICApOw0KPiA+ID4gPg0KPiA+ID4gPiArLyoqIFJl c2VydmUgVlJBTSBtZW1vcnkgaW4gRFJBTSBmb3IgdGhlIGZyYW1lIGJ1ZmZlcg0KPiA+ID4gPiAr ICAqICh1bmxlc3MgaXQgaXMgcmVzZXJ2ZWQgYWxyZWFkeSkuDQo+ID4gPiA+ICsgICoNCj4gPiA+ ID4gKyAgKiBUaGUgYWxsb2NhdGVkIGFkZHJlc3MgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBmcmFt ZSBidWZmZXIuDQo+ID4gPiA+ICsgICogQHBhcmFtIE9VVCBWcmFtQmFzZUFkZHJlc3MgICAgICBB IHBvaW50ZXIgdG8gdGhlIGZyYW1lIGJ1ZmZlcg0KPiA+ID4gYWRkcmVzcy4NCj4gPiA+ID4gKyAg KiBAcGFyYW0gT1VUIFZyYW1TaXplICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgc2l6ZSBv ZiB0aGUgZnJhbWUNCj4gPiA+ID4gKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJ1ZmZlciBpbiBieXRlcw0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICAgICBGcmFtZSBidWZmZXIgbWVtb3J5IGFsbG9jYXRpb24NCj4gc3Vj Y2Vzcy4NCj4gPiA+ID4gKyAgKiBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgICAgICAgIE90aGVy IGVycm9ycy4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAgRUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNk UGxhdGZvcm1HZXRWcmFtICgNCj4gPiA+ID4gICAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTKiAg ICAgICAgICAgICAgICAgVnJhbUJhc2VBZGRyZXNzLA0KPiA+ID4gPiAgICBPVVQgVUlOVE4qICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWcmFtU2l6ZQ0KPiA+ID4gPiAgICApOw0KPiA+ ID4gPg0KPiA+ID4gPiArLyoqIFJldHVybiB0b3RhbCBudW1iZXIgb2YgbW9kZXMuDQo+ID4gPiA+ ICsgICoNCj4gPiA+ID4gKyAgKiBAcmV0dmFsIFVJTlQzMiAgICAgICAgICAgICBNb2RlIE51bWJl ci4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAgVUlOVDMyDQo+ID4gPiA+ICBMY2RQbGF0Zm9ybUdl dE1heE1vZGUgKA0KPiA+ID4gPiAgICBWT0lEDQo+ID4gPiA+ICAgICk7DQo+ID4gPiA+DQo+ID4g PiA+ICsvKiogU2V0IHRoZSByZXF1ZXN0ZWQgZGlzcGxheSBtb2RlLg0KPiA+ID4gPiArICAqDQo+ ID4gPiA+ICsgICogQHBhcmFtIElOIE1vZGVOdW1iZXIgICAgICAgICAgICAgTW9kZSBOdW1iZXIu DQo+ID4gPiA+ICsgICogQHJldHZhbCAgIEVGSV9TVUNDRVNTICAgICAgICAgICAgU2V0IG1vZGUg c3VjY2Vzcy4NCj4gPiA+ID4gKyAgKiBAcmV0dmFsICAgRUZJX0lOVkFMSURfUEFSQU1URVIgICBS ZXF1ZXN0ZWQgbW9kZSBub3QgZm91bmQuDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gIEVGSV9TVEFU VVMNCj4gPiA+ID4gIExjZFBsYXRmb3JtU2V0TW9kZSAoDQo+ID4gPiA+ICAgIElOIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVOdW1iZXINCj4gPiA+ID4gICAgKTsN Cj4gPiA+ID4NCj4gPiA+ID4gKy8qKiBSZXR1cm4gaW5mb3JtYXRpb24gZm9yIHRoZSByZXF1ZXN0 ZWQgbW9kZSBudW1iZXIuDQo+ID4gPiA+ICsgICoNCj4gPiA+ID4gKyAgKiBAcGFyYW0gSU4gTW9k ZU51bWJlciAgICAgICAgICAgIE1vZGUgTnVtYmVyLg0KPiA+ID4gPiArICAqIEBwYXJhbSBPVVQg SW5mbyAgICAgICAgICAgICAgICAgUG9pbnRlciBmb3IgcmV0dXJuZWQgbW9kZQ0KPiBpbmZvcm1h dGlvbg0KPiA+ID4gPiArICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uIHN1 Y2Nlc3MpLg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHJldHZhbCBFRklfU1VDQ0VTUyAg ICAgICAgICAgICBTdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgbW9kZSBpcw0KPiBmb3VuZC4NCj4g PiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIFJlcXVlc3RlZCBtb2Rl IG5vdCBmb3VuZC4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAgRUZJX1NUQVRVUw0KPiA+ID4gPiAg TGNkUGxhdGZvcm1RdWVyeU1vZGUgKA0KPiA+ID4gPiAgICBJTiAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNb2RlTnVtYmVyLA0KPiA+ID4gPiAgICBPVVQgRUZJX0dSQVBI SUNTX09VVFBVVF9NT0RFX0lORk9STUFUSU9OICAqSW5mbw0KPiA+ID4gPiAgICApOw0KPiA+ID4g Pg0KPiA+ID4gPiArLyoqIFJldHVybnMgdGhlIGRpc3BsYXkgdGltaW5nIGluZm9ybWF0aW9uIGZv ciB0aGUgcmVxdWVzdGVkIG1vZGUNCj4gPiA+IG51bWJlci4NCj4gPiA+ID4gKyAgKg0KPiA+ID4g PiArICAqIEBwYXJhbSBJTiAgTW9kZU51bWJlciAgICAgICAgICAgTW9kZSBOdW1iZXIuDQo+ID4g PiA+ICsgICogQHBhcmFtIE9VVCBIUmVzICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGhvcml6 b250YWwgcmVzb2x1dGlvbi4NCj4gPiA+ID4gKyAgKiBAcGFyYW0gT1VUIEhTeW5jICAgICAgICAg ICAgICAgIFBvaW50ZXIgdG8gaG9yaXpvbnRhbCBzeW5jIHdpZHRoLg0KPiA+ID4gPiArICAqIEBw YXJhbSBPVVQgSEJhY2tQb3JjaCAgICAgICAgICAgUG9pbnRlciB0byBob3Jpem9udGFsIGJhY2sg cG9yY2guDQo+ID4gPiA+ICsgICogQHBhcmFtIE9VVCBIRnJvbnRQb3JjaCAgICAgICAgICBQb2lu dGVyIHRvIGhvcml6b250YWwgZnJvbnQgcG9yY2guDQo+ID4gPiA+ICsgICogQHBhcmFtIE9VVCBW UmVzICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHZlcnRpY2FsIHJlc29sdXRpb24uDQo+ID4g PiA+ICsgICogQHBhcmFtIE9VVCBWU3luYyAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHZlcnRp Y2FsIHN5bmMgd2lkdGguDQo+ID4gPiA+ICsgICogQHBhcmFtIE9VVCBWQmFja1BvcmNoICAgICAg ICAgICBQb2ludGVyIHRvIHZlcnRpY2FsIGJhY2sgcG9yY2guDQo+ID4gPiA+ICsgICogQHBhcmFt IE9VVCBWRnJvbnRQb3JjaCAgICAgICAgICBQb2ludGVyIHRvIHZlcnRpY2FsIGZyb250IHBvcmNo Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg ICBTdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQgbW9kZSBpcw0KPiBmb3VuZC4NCj4gPiA+ID4gKyAg KiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgIFJlcXVlc3RlZCBtb2RlIG5vdCBmb3Vu ZC4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAgRUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNkUGxhdGZv cm1HZXRUaW1pbmdzICgNCj4gPiA+ID4gICAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1vZGVOdW1iZXIsDQo+ID4gPiA+IEBAIC0yMTIsNiArMjQ0LDE0IEBAIExjZFBs YXRmb3JtR2V0VGltaW5ncyAoDQo+ID4gPiA+ICAgIE9VVCBVSU5UMzIqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWRnJvbnRQb3JjaA0KPiA+ID4gPiAgICApOw0KPiA+ID4gPg0KPiA+ID4g PiArLyoqIFJldHVybiBiaXRzIHBlciBwaXhlbCBpbmZvcm1hdGlvbiBmb3IgYSBtb2RlIG51bWJl ci4NCj4gPiA+ID4gKyAgKg0KPiA+ID4gPiArICAqIEBwYXJhbSBJTiAgTW9kZU51bWJlciAgICAg ICAgICAgTW9kZSBOdW1iZXIuDQo+ID4gPiA+ICsgICogQHBhcmFtIE9VVCBCcHAgICAgICAgICAg ICAgICAgICBQb2ludGVyIHRvIHZhbHVlIEJ5dGVzIFBlciBQaXhlbC4NCj4gPiA+ID4gKyAgKg0K PiA+ID4gPiArICAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIHJlcXVlc3Rl ZCBtb2RlIGlzIGZvdW5kLg0KPiA+ID4gPiArICAqIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICAgUmVxdWVzdGVkIG1vZGUgbm90IGZvdW5kLg0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICBF RklfU1RBVFVTDQo+ID4gPiA+ICBMY2RQbGF0Zm9ybUdldEJwcCAoDQo+ID4gPiA+ICAgIElOICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVOdW1iZXIsDQo+ID4gPiA+ IGRpZmYgLS1naXQNCj4gPiA+ID4NCj4gPiA+DQo+IGEvQXJtUGxhdGZvcm1Qa2cvQXJtVkV4cHJl c3NQa2cvTGlicmFyeS9IZExjZEFybVZFeHByZXNzTGliL0hkTGNkDQo+ID4gPiBBcm1WRQ0KPiA+ ID4gPiB4cHJlc3MuYw0KPiA+ID4gPg0KPiA+ID4NCj4gYi9Bcm1QbGF0Zm9ybVBrZy9Bcm1WRXhw cmVzc1BrZy9MaWJyYXJ5L0hkTGNkQXJtVkV4cHJlc3NMaWIvSGRMY2QNCj4gPiA+IEFybVZFDQo+ ID4gPiA+IHhwcmVzcy5jIGluZGV4DQo+ID4gPiA+DQo+ID4gPg0KPiAyMDQxZGU1ZjYzYzcyZGU2 ZjBjZTQwNDc0MjBjMjgyNTA3YTFkMDRhLi5jZmUzMjU5ZDNjNzM3ZGUyNDAzNTANCj4gPiA+IGU4 YzNlYWINCj4gPiA+ID4gODY3YjgwYzQwOTQ4IDEwMDY0NA0KPiA+ID4gPiAtLS0NCj4gPiA+ID4N Cj4gPiA+DQo+IGEvQXJtUGxhdGZvcm1Qa2cvQXJtVkV4cHJlc3NQa2cvTGlicmFyeS9IZExjZEFy bVZFeHByZXNzTGliL0hkTGNkDQo+ID4gPiBBcm1WRQ0KPiA+ID4gPiB4cHJlc3MuYw0KPiA+ID4g PiArKysNCj4gPiA+DQo+IGIvQXJtUGxhdGZvcm1Qa2cvQXJtVkV4cHJlc3NQa2cvTGlicmFyeS9I ZExjZEFybVZFeHByZXNzTGliL0hkTGNkDQo+ID4gPiBBDQo+ID4gPiA+ICsrKyBybVZFeHByZXNz LmMNCj4gPiA+ID4gQEAgLTQ0LDcgKzQ0LDggQEAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gPiAg ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICBWRnJvbnRQb3JjaDsNCj4gPiA+ID4gIH0gTENE X1JFU09MVVRJT047DQo+ID4gPiA+DQo+ID4gPiA+IC0NCj4gPiA+ID4gKy8qKiBUaGUgZGlzcGxh eSBtb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLg0KPiA+ID4gPiArKiovDQo+ID4gPiA+ ICBMQ0RfUkVTT0xVVElPTiBtUmVzb2x1dGlvbnNbXSA9IHsNCj4gPiA+ID4gICAgeyAvLyBNb2Rl IDAgOiBWR0EgOiA2NDAgeCA0ODAgeCAyNCBicHANCj4gPiA+ID4gICAgICBWR0EsIFZHQV9IX1JF U19QSVhFTFMsIFZHQV9WX1JFU19QSVhFTFMsDQo+ID4gPiBMQ0RfQklUU19QRVJfUElYRUxfMjQs DQo+ID4gPiA+IEBAIC05NCw2ICs5NSwxMSBAQCBFRklfRURJRF9BQ1RJVkVfUFJPVE9DT0wgICAg ICBtRWRpZEFjdGl2ZSA9DQo+IHsNCj4gPiA+ID4gICAgTlVMTA0KPiA+ID4gPiAgfTsNCj4gPiA+ ID4NCj4gPiA+ID4gKy8qKiBIRExDRCBQbGF0Zm9ybSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBm dW5jdGlvbi4NCj4gPiA+ID4gKyAgKg0KPiA+ID4gPiArICAqIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgICBQbGFmb3JtIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gc3VjY2Vzcy4NCj4gPiA+ ID4gKyAgKiBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgICAgICAgT3RoZXIgZXJyb3JzLg0KPiA+ ID4gPiArKiovDQo+ID4gPiA+ICBFRklfU1RBVFVTDQo+ID4gPiA+ICBMY2RQbGF0Zm9ybUluaXRp YWxpemVEaXNwbGF5ICgNCj4gPiA+ID4gICAgSU4gRUZJX0hBTkRMRSAgIEhhbmRsZQ0KPiA+ID4g PiBAQCAtMTI0LDYgKzEzMCwxOCBAQCBMY2RQbGF0Zm9ybUluaXRpYWxpemVEaXNwbGF5ICgNCj4g PiA+ID4gICAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gKy8q KiBSZXNlcnZlIFZSQU0gbWVtb3J5IGluIERSQU0gZm9yIHRoZSBmcmFtZSBidWZmZXINCj4gPiA+ ID4gKyAgKiAodW5sZXNzIGl0IGlzIHJlc2VydmVkIGFscmVhZHkpLg0KPiA+ID4gPiArICAqDQo+ ID4gPiA+ICsgICogVGhlIGFsbG9jYXRlZCBhZGRyZXNzIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUg ZnJhbWUgYnVmZmVyLg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHBhcmFtIE9VVCBWcmFt QmFzZUFkZHJlc3MgICAgICBBIHBvaW50ZXIgdG8gdGhlIGZyYW1lIGJ1ZmZlcg0KPiA+ID4gYWRk cmVzcy4NCj4gPiA+ID4gKyAgKiBAcGFyYW0gT1VUIFZyYW1TaXplICAgICAgICAgICAgIEEgcG9p bnRlciB0byB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUNCj4gPiA+ID4gKyAgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpbiBieXRlcw0KPiA+ID4gPiArICAqDQo+ID4gPiA+ ICsgICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBGcmFtZSBidWZmZXIgbWVtb3J5 IGFsbG9jYXRpb24NCj4gc3VjY2Vzcy4NCj4gPiA+ID4gKyAgKiBAcmV0dmFsICEoRUZJX1NVQ0NF U1MpICAgICAgICAgIE90aGVyIGVycm9ycy4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAgRUZJX1NU QVRVUw0KPiA+ID4gPiAgTGNkUGxhdGZvcm1HZXRWcmFtICgNCj4gPiA+ID4gICAgT1VUIEVGSV9Q SFlTSUNBTF9BRERSRVNTKiAgVnJhbUJhc2VBZGRyZXNzLCBAQCAtMTcwLDYNCj4gKzE4OCwxMw0K PiA+ID4gQEANCj4gPiA+ID4gTGNkUGxhdGZvcm1HZXRWcmFtICgNCj4gPiA+ID4gICAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPiA+ID4gPiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiArLyoqIFJldHVybiB0 b3RhbCBudW1iZXIgb2YgbW9kZXMgc3VwcG9ydGVkLg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsg ICogTm90ZTogVmFsaWQgbW9kZSBudW1iZXJzIGFyZSAwIHRvIE1heE1vZGUgLSAxDQo+ID4gPiA+ ICsgICogU2VlIFNlY3Rpb24gMTEuOSBvZiB0aGUgVUVGSSBTcGVjaWZpY2F0aW9uIDIuNiBFcnJh dGEgQSAoSmFuDQo+ID4gPiA+ICsyMDE3KQ0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHJl dHZhbCBVSU5UMzIgICAgICAgICAgICAgTW9kZSBOdW1iZXIuDQo+ID4gPiA+ICsqKi8NCj4gPiA+ ID4gIFVJTlQzMg0KPiA+ID4gPiAgTGNkUGxhdGZvcm1HZXRNYXhNb2RlKFZPSUQpDQo+ID4gPiA+ ICB7DQo+ID4gPiA+IEBAIC0xNzgsNiArMjAzLDEwIEBAIExjZFBsYXRmb3JtR2V0TWF4TW9kZShW T0lEKQ0KPiA+ID4gPiAgICByZXR1cm4gKHNpemVvZiAobVJlc29sdXRpb25zKSAvIHNpemVvZiAo TENEX1JFU09MVVRJT04pKTsgIH0NCj4gPiA+ID4NCj4gPiA+ID4gKy8qKiBTZXQgdGhlIHJlcXVl c3RlZCBkaXNwbGF5IG1vZGUuDQo+ID4gPiA+ICsgICoNCj4gPiA+ID4gKyAgKiBAcGFyYW0gSU4g TW9kZU51bWJlciAgICAgICAgICAgICBNb2RlIE51bWJlci4NCj4gPiA+ID4gKyoqLw0KPiA+ID4g PiAgRUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNkUGxhdGZvcm1TZXRNb2RlICgNCj4gPiA+ID4gICAg SU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVOdW1iZXINCj4gPiA+ID4gQEAg LTIyNyw2ICsyNTYsMTUgQEAgTGNkUGxhdGZvcm1TZXRNb2RlICgNCj4gPiA+ID4gICAgcmV0dXJu IFN0YXR1czsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gKy8qKiBSZXR1cm4gaW5mb3Jt YXRpb24gZm9yIHRoZSByZXF1ZXN0ZWQgbW9kZSBudW1iZXIuDQo+ID4gPiA+ICsgICoNCj4gPiA+ ID4gKyAgKiBAcGFyYW0gSU4gTW9kZU51bWJlciAgICAgICAgICAgIE1vZGUgTnVtYmVyLg0KPiA+ ID4gPiArICAqIEBwYXJhbSBPVVQgSW5mbyAgICAgICAgICAgICAgICAgUG9pbnRlciBmb3IgcmV0 dXJuZWQgbW9kZQ0KPiBpbmZvcm1hdGlvbg0KPiA+ID4gPiArICAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKG9uIHN1Y2Nlc3MpLg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICog QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBTdWNjZXNzIGlmIHRoZSByZXF1ZXN0ZWQg bW9kZSBpcw0KPiBmb3VuZC4NCj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgIFJlcXVlc3RlZCBtb2RlIG5vdCBmb3VuZC4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAg RUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNkUGxhdGZvcm1RdWVyeU1vZGUgKA0KPiA+ID4gPiAgICBJ TiAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlTnVtYmVyLA0KPiA+ ID4gPiBAQCAtMjY3LDYgKzMwNSwyMSBAQCBMY2RQbGF0Zm9ybVF1ZXJ5TW9kZSAoDQo+ID4gPiA+ ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gKy8q KiBSZXR1cm5zIHRoZSBkaXNwbGF5IHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlcXVlc3Rl ZCBtb2RlDQo+ID4gPiBudW1iZXIuDQo+ID4gPiA+ICsgICoNCj4gPiA+ID4gKyAgKiBAcGFyYW0g SU4gIE1vZGVOdW1iZXIgICAgICAgICAgIE1vZGUgTnVtYmVyLg0KPiA+ID4gPiArICAqIEBwYXJh bSBPVVQgSFJlcyAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBob3Jpem9udGFsIHJlc29sdXRp b24uDQo+ID4gPiA+ICsgICogQHBhcmFtIE9VVCBIU3luYyAgICAgICAgICAgICAgICBQb2ludGVy IHRvIGhvcml6b250YWwgc3luYyB3aWR0aC4NCj4gPiA+ID4gKyAgKiBAcGFyYW0gT1VUIEhCYWNr UG9yY2ggICAgICAgICAgIFBvaW50ZXIgdG8gaG9yaXpvbnRhbCBiYWNrIHBvcmNoLg0KPiA+ID4g PiArICAqIEBwYXJhbSBPVVQgSEZyb250UG9yY2ggICAgICAgICAgUG9pbnRlciB0byBob3Jpem9u dGFsIGZyb250IHBvcmNoLg0KPiA+ID4gPiArICAqIEBwYXJhbSBPVVQgVlJlcyAgICAgICAgICAg ICAgICAgUG9pbnRlciB0byB2ZXJ0aWNhbCByZXNvbHV0aW9uLg0KPiA+ID4gPiArICAqIEBwYXJh bSBPVVQgVlN5bmMgICAgICAgICAgICAgICAgUG9pbnRlciB0byB2ZXJ0aWNhbCBzeW5jIHdpZHRo Lg0KPiA+ID4gPiArICAqIEBwYXJhbSBPVVQgVkJhY2tQb3JjaCAgICAgICAgICAgUG9pbnRlciB0 byB2ZXJ0aWNhbCBiYWNrIHBvcmNoLg0KPiA+ID4gPiArICAqIEBwYXJhbSBPVVQgVkZyb250UG9y Y2ggICAgICAgICAgUG9pbnRlciB0byB2ZXJ0aWNhbCBmcm9udCBwb3JjaC4NCj4gPiA+ID4gKyAg Kg0KPiA+ID4gPiArICAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgU3VjY2VzcyBp ZiB0aGUgcmVxdWVzdGVkIG1vZGUgaXMNCj4gZm91bmQuDQo+ID4gPiA+ICsgICogQHJldHZhbCBF RklfSU5WQUxJRF9QQVJBTUVURVIgICBSZXF1ZXN0ZWQgbW9kZSBub3QgZm91bmQuDQo+ID4gPiA+ ICsqKi8NCj4gPiA+ID4gIEVGSV9TVEFUVVMNCj4gPiA+ID4gIExjZFBsYXRmb3JtR2V0VGltaW5n cyAoDQo+ID4gPiA+ICAgIElOICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN b2RlTnVtYmVyLA0KPiA+ID4gPiBAQCAtMjk2LDYgKzM0OSwxNCBAQCBMY2RQbGF0Zm9ybUdldFRp bWluZ3MgKA0KPiA+ID4gPiAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiA+ICB9DQo+ID4g PiA+DQo+ID4gPiA+ICsvKiogUmV0dXJuIGJpdHMgcGVyIHBpeGVsIGZvciBhIG1vZGUgbnVtYmVy Lg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHBhcmFtIElOICBNb2RlTnVtYmVyICAgICAg ICAgICBNb2RlIE51bWJlci4NCj4gPiA+ID4gKyAgKiBAcGFyYW0gT1VUIEJwcCAgICAgICAgICAg ICAgICAgIFBvaW50ZXIgdG8gdmFsdWUgQml0cyBQZXIgUGl4ZWwuDQo+ID4gPiA+ICsgICoNCj4g PiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSByZXF1ZXN0ZWQg bW9kZSBpcyBmb3VuZC4NCj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgIFJlcXVlc3RlZCBtb2RlIG5vdCBmb3VuZC4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAgRUZJ X1NUQVRVUw0KPiA+ID4gPiAgTGNkUGxhdGZvcm1HZXRCcHAgKA0KPiA+ID4gPiAgICBJTiAgVUlO VDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZU51bWJlciwNCj4gPiA+ID4gZGlm ZiAtLWdpdA0KPiA+ID4gPg0KPiA+ID4NCj4gYS9Bcm1QbGF0Zm9ybVBrZy9Bcm1WRXhwcmVzc1Br Zy9MaWJyYXJ5L1BMMTExTGNkQXJtVkV4cHJlc3NMaWIvUEwxDQo+ID4gPiAxMUxjDQo+ID4gPiA+ IGRBcm1WRXhwcmVzcy5jDQo+ID4gPiA+DQo+ID4gPg0KPiBiL0FybVBsYXRmb3JtUGtnL0FybVZF eHByZXNzUGtnL0xpYnJhcnkvUEwxMTFMY2RBcm1WRXhwcmVzc0xpYi9QTDENCj4gPiA+IDExTGMN Cj4gPiA+ID4gZEFybVZFeHByZXNzLmMgaW5kZXgNCj4gPiA+ID4NCj4gPiA+DQo+IDhkMDQ2ODE2 NDU0ZjY0MmJjZWQwMGUyOWM0ZTAyMDkzYjc0YWZkMjQuLjg0ODgwZTVmZDFkZmU2ZjgyNGIyNw0K PiA+ID4gZTUzOTI2Zg0KPiA+ID4gPiA5YmIzMmZmNmNkZjcgMTAwNjQ0DQo+ID4gPiA+IC0tLQ0K PiA+ID4gPg0KPiA+ID4NCj4gYS9Bcm1QbGF0Zm9ybVBrZy9Bcm1WRXhwcmVzc1BrZy9MaWJyYXJ5 L1BMMTExTGNkQXJtVkV4cHJlc3NMaWIvUEwxDQo+ID4gPiAxMUxjDQo+ID4gPiA+IGRBcm1WRXhw cmVzcy5jDQo+ID4gPiA+ICsrKw0KPiA+ID4NCj4gYi9Bcm1QbGF0Zm9ybVBrZy9Bcm1WRXhwcmVz c1BrZy9MaWJyYXJ5L1BMMTExTGNkQXJtVkV4cHJlc3NMaWIvUEwxDQo+ID4gPiA+ICsrKyAxMUxj ZEFybVZFeHByZXNzLmMNCj4gPiA+ID4gQEAgLTQxLDcgKzQxLDggQEAgdHlwZWRlZiBzdHJ1Y3Qg ew0KPiA+ID4gPiAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICBWRnJvbnRQb3JjaDsNCj4g PiA+ID4gIH0gTENEX1JFU09MVVRJT047DQo+ID4gPiA+DQo+ID4gPiA+IC0NCj4gPiA+ID4gKy8q KiBUaGUgZGlzcGxheSBtb2RlcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLg0KPiA+ID4gPiAr KiovDQo+ID4gPiA+ICBMQ0RfUkVTT0xVVElPTiBtUmVzb2x1dGlvbnNbXSA9IHsNCj4gPiA+ID4g ICAgeyAgIC8vIE1vZGUgMCA6IFZHQSA6IDY0MCB4IDQ4MCB4IDI0IGJwcA0KPiA+ID4gPiAgICAg ICAgVkdBLCBWR0FfSF9SRVNfUElYRUxTLCBWR0FfVl9SRVNfUElYRUxTLA0KPiA+ID4gTENEX0JJ VFNfUEVSX1BJWEVMXzI0LA0KPiA+ID4gPiBAQCAtMTUxLDcgKzE1MiwxMSBAQCBFRklfRURJRF9B Q1RJVkVfUFJPVE9DT0wNCj4gbUVkaWRBY3RpdmUgPSB7DQo+ID4gPiA+ICAgIE5VTEwNCj4gPiA+ ID4gIH07DQo+ID4gPiA+DQo+ID4gPiA+IC0NCj4gPiA+ID4gKy8qKiBQTDExMSBQbGF0Zm9ybSBz cGVjaWZpYyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4NCj4gPiA+ID4gKyAgKg0KPiA+ID4gPiAr ICAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBQbGFmb3JtIGxpYnJhcnkgaW5pdGlh bGl6YXRpb24gc3VjY2Vzcy4NCj4gPiA+ID4gKyAgKiBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAg ICAgICAgT3RoZXIgZXJyb3JzLg0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICBFRklfU1RBVFVTDQo+ ID4gPiA+ICBMY2RQbGF0Zm9ybUluaXRpYWxpemVEaXNwbGF5ICgNCj4gPiA+ID4gICAgSU4gRUZJ X0hBTkRMRSAgIEhhbmRsZQ0KPiA+ID4gPiBAQCAtMTc2LDYgKzE4MSwxOCBAQCBMY2RQbGF0Zm9y bUluaXRpYWxpemVEaXNwbGF5ICgNCj4gPiA+ID4gICAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ID4g IH0NCj4gPiA+ID4NCj4gPiA+ID4gKy8qKiBSZXNlcnZlIFZSQU0gbWVtb3J5IGluIERSQU0gZm9y IHRoZSBmcmFtZSBidWZmZXINCj4gPiA+ID4gKyAgKiAodW5sZXNzIGl0IGlzIHJlc2VydmVkIGFs cmVhZHkpLg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogVGhlIGFsbG9jYXRlZCBhZGRyZXNz IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgZnJhbWUgYnVmZmVyLg0KPiA+ID4gPiArICAqDQo+ID4g PiA+ICsgICogQHBhcmFtIE9VVCBWcmFtQmFzZUFkZHJlc3MgICAgICBBIHBvaW50ZXIgdG8gdGhl IGZyYW1lIGJ1ZmZlcg0KPiA+ID4gYWRkcmVzcy4NCj4gPiA+ID4gKyAgKiBAcGFyYW0gT1VUIFZy YW1TaXplICAgICAgICAgICAgIEEgcG9pbnRlciB0byB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUNCj4g PiA+ID4gKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBpbiBieXRl cw0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgICBGcmFtZSBidWZmZXIgbWVtb3J5IGFsbG9jYXRpb24NCj4gc3VjY2Vzcy4NCj4gPiA+ID4g KyAgKiBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgICAgICAgIE90aGVyIGVycm9ycy4NCj4gPiA+ ID4gKyoqLw0KPiA+ID4gPiAgRUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNkUGxhdGZvcm1HZXRWcmFt ICgNCj4gPiA+ID4gICAgT1VUIEVGSV9QSFlTSUNBTF9BRERSRVNTKiAgVnJhbUJhc2VBZGRyZXNz LCBAQCAtMjMyLDYNCj4gKzI0OSwxMw0KPiA+ID4gQEANCj4gPiA+ID4gTGNkUGxhdGZvcm1HZXRW cmFtICgNCj4gPiA+ID4gICAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4g PiA+ID4gKy8qKiBSZXR1cm4gdG90YWwgbnVtYmVyIG9mIG1vZGVzIHN1cHBvcnRlZC4NCj4gPiA+ ID4gKyAgKg0KPiA+ID4gPiArICAqIE5vdGU6IFZhbGlkIG1vZGUgbnVtYmVycyBhcmUgMCB0byBN YXhNb2RlIC0gMQ0KPiA+ID4gPiArICAqIFNlZSBTZWN0aW9uIDExLjkgb2YgdGhlIFVFRkkgU3Bl Y2lmaWNhdGlvbiAyLjYgRXJyYXRhIEEgKEphbg0KPiA+ID4gPiArMjAxNykNCj4gPiA+ID4gKyAg Kg0KPiA+ID4gPiArICAqIEByZXR2YWwgVUlOVDMyICAgICAgICAgICAgIE1vZGUgTnVtYmVyLg0K PiA+ID4gPiArKiovDQo+ID4gPiA+ICBVSU5UMzINCj4gPiA+ID4gIExjZFBsYXRmb3JtR2V0TWF4 TW9kZShWT0lEKQ0KPiA+ID4gPiAgew0KPiA+ID4gPiBAQCAtMjQ5LDYgKzI3MywxNCBAQCBMY2RQ bGF0Zm9ybUdldE1heE1vZGUoVk9JRCkNCj4gPiA+ID4gICAgcmV0dXJuIChQY2RHZXQzMiAoUGNk UEwxMTFMY2RNYXhNb2RlKSk7ICB9DQo+ID4gPiA+DQo+ID4gPiA+ICsvKiogU2V0IHRoZSByZXF1 ZXN0ZWQgZGlzcGxheSBtb2RlLg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHBhcmFtIElO IE1vZGVOdW1iZXIgICAgICAgICAgICBNb2RlIE51bWJlci4NCj4gPiA+ID4gKyAgKg0KPiA+ID4g PiArICAqIEByZXR2YWwgIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgUmVxdWVzdGVkIG1vZGUgbm90 IGZvdW5kLg0KPiA+ID4gPiArICAqIEByZXR2YWwgIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgUExM MTExIGNvbmZpZ3VyYXRpb24gbm90DQo+IHN1cHBvcnRlZC4NCj4gPiA+ID4gKyAgKiBAcmV0dmFs ICAhKEVGSV9TVUNDRVNTKSAgICAgICAgIE90aGVyIGVycm9ycy4NCj4gPiA+ID4gKyoqLw0KPiA+ ID4gPiAgRUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNkUGxhdGZvcm1TZXRNb2RlICgNCj4gPiA+ID4g ICAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGVOdW1iZXINCj4gPiA+ID4g QEAgLTMyMCw2ICszNTIsMTUgQEAgTGNkUGxhdGZvcm1TZXRNb2RlICgNCj4gPiA+ID4gICAgcmV0 dXJuIFN0YXR1czsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gKy8qKiBSZXR1cm4gaW5m b3JtYXRpb24gZm9yIHRoZSByZXF1ZXN0ZWQgbW9kZSBudW1iZXIuDQo+ID4gPiA+ICsgICoNCj4g PiA+ID4gKyAgKiBAcGFyYW0gSU4gTW9kZU51bWJlciAgICAgICAgICAgIE1vZGUgTnVtYmVyLg0K PiA+ID4gPiArICAqIEBwYXJhbSBPVVQgSW5mbyAgICAgICAgICAgICAgICAgUG9pbnRlciBmb3Ig cmV0dXJuZWQgbW9kZQ0KPiBpbmZvcm1hdGlvbg0KPiA+ID4gPiArICAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG9uIHN1Y2Nlc3MpLg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsg ICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICBTdWNjZXNzIGlmIHRoZSByZXF1ZXN0 ZWQgbW9kZSBpcw0KPiBmb3VuZC4NCj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BB UkFNRVRFUiAgIFJlcXVlc3RlZCBtb2RlIG5vdCBmb3VuZC4NCj4gPiA+ID4gKyoqLw0KPiA+ID4g PiAgRUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNkUGxhdGZvcm1RdWVyeU1vZGUgKA0KPiA+ID4gPiAg ICBJTiAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlTnVtYmVyLA0K PiA+ID4gPiBAQCAtMzYwLDYgKzQwMSwyMSBAQCBMY2RQbGF0Zm9ybVF1ZXJ5TW9kZSAoDQo+ID4g PiA+ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4g Ky8qKiBSZXR1cm5zIHRoZSBkaXNwbGF5IHRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlcXVl c3RlZCBtb2RlDQo+ID4gPiBudW1iZXIuDQo+ID4gPiA+ICsgICoNCj4gPiA+ID4gKyAgKiBAcGFy YW0gSU4gIE1vZGVOdW1iZXIgICAgICAgICAgIE1vZGUgTnVtYmVyLg0KPiA+ID4gPiArICAqIEBw YXJhbSBPVVQgSFJlcyAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBob3Jpem9udGFsIHJlc29s dXRpb24uDQo+ID4gPiA+ICsgICogQHBhcmFtIE9VVCBIU3luYyAgICAgICAgICAgICAgICBQb2lu dGVyIHRvIGhvcml6b250YWwgc3luYyB3aWR0aC4NCj4gPiA+ID4gKyAgKiBAcGFyYW0gT1VUIEhC YWNrUG9yY2ggICAgICAgICAgIFBvaW50ZXIgdG8gaG9yaXpvbnRhbCBiYWNrIHBvcmNoLg0KPiA+ ID4gPiArICAqIEBwYXJhbSBPVVQgSEZyb250UG9yY2ggICAgICAgICAgUG9pbnRlciB0byBob3Jp em9udGFsIGZyb250IHBvcmNoLg0KPiA+ID4gPiArICAqIEBwYXJhbSBPVVQgVlJlcyAgICAgICAg ICAgICAgICAgUG9pbnRlciB0byB2ZXJ0aWNhbCByZXNvbHV0aW9uLg0KPiA+ID4gPiArICAqIEBw YXJhbSBPVVQgVlN5bmMgICAgICAgICAgICAgICAgUG9pbnRlciB0byB2ZXJ0aWNhbCBzeW5jIHdp ZHRoLg0KPiA+ID4gPiArICAqIEBwYXJhbSBPVVQgVkJhY2tQb3JjaCAgICAgICAgICAgUG9pbnRl ciB0byB2ZXJ0aWNhbCBiYWNrIHBvcmNoLg0KPiA+ID4gPiArICAqIEBwYXJhbSBPVVQgVkZyb250 UG9yY2ggICAgICAgICAgUG9pbnRlciB0byB2ZXJ0aWNhbCBmcm9udCBwb3JjaC4NCj4gPiA+ID4g KyAgKg0KPiA+ID4gPiArICAqIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgU3VjY2Vz cyBpZiB0aGUgcmVxdWVzdGVkIG1vZGUgaXMNCj4gZm91bmQuDQo+ID4gPiA+ICsgICogQHJldHZh bCBFRklfSU5WQUxJRF9QQVJBTUVURVIgICBSZXF1ZXN0ZWQgbW9kZSBub3QgZm91bmQuDQo+ID4g PiA+ICsqKi8NCj4gPiA+ID4gIEVGSV9TVEFUVVMNCj4gPiA+ID4gIExjZFBsYXRmb3JtR2V0VGlt aW5ncyAoDQo+ID4gPiA+ICAgIElOICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBNb2RlTnVtYmVyLA0KPiA+ID4gPiBAQCAtMzg5LDYgKzQ0NSwxNCBAQCBMY2RQbGF0Zm9ybUdl dFRpbWluZ3MgKA0KPiA+ID4gPiAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiA+ICB9DQo+ ID4gPiA+DQo+ID4gPiA+ICsvKiogUmV0dXJuIGJpdHMgcGVyIHBpeGVsIGZvciBhIG1vZGUgbnVt YmVyLg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHBhcmFtIElOICBNb2RlTnVtYmVyICAg ICAgICAgICBNb2RlIE51bWJlci4NCj4gPiA+ID4gKyAgKiBAcGFyYW0gT1VUIEJwcCAgICAgICAg ICAgICAgICAgIFBvaW50ZXIgdG8gdmFsdWUgQml0cyBQZXIgUGl4ZWwuDQo+ID4gPiA+ICsgICoN Cj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSByZXF1ZXN0 ZWQgbW9kZSBpcyBmb3VuZC4NCj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgIFJlcXVlc3RlZCBtb2RlIG5vdCBmb3VuZC4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAg RUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNkUGxhdGZvcm1HZXRCcHAgKA0KPiA+ID4gPiAgICBJTiAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZU51bWJlciwNCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL0FybVBsYXRmb3JtUGtnL0RyaXZlcnMvTGNkR3JhcGhpY3NPdXRwdXREeGUv SGRMY2QuYw0KPiA+ID4gPiBiL0FybVBsYXRmb3JtUGtnL0RyaXZlcnMvTGNkR3JhcGhpY3NPdXRw dXREeGUvSGRMY2QuYw0KPiA+ID4gPiBpbmRleA0KPiA+ID4gPg0KPiA+ID4NCj4gZWIwYjZmYjNm YmJjMWNiNjA1NDY5NDMzZjZjNmRjYjg1YmFjNjY4Yy4uNzQ0ZGQzZDU1NmI1MDcxZGVmYzZiDQo+ ID4gPiBjYWQ1YTlhDQo+ID4gPiA+IDMwODgxYmNiNGI2ZiAxMDA2NDQNCj4gPiA+ID4gLS0tIGEv QXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9IZExjZC5jDQo+ID4g PiA+ICsrKyBiL0FybVBsYXRmb3JtUGtnL0RyaXZlcnMvTGNkR3JhcGhpY3NPdXRwdXREeGUvSGRM Y2QuYw0KPiA+ID4gPiBAQCAtMjksNiArMjksMTIgQEANCj4gPiA+ID4gICAqDQo+ID4gPiA+DQo+ ID4gPiA+DQo+ID4gPg0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQo+ID4gPiAqKioqKioqKioqKioNCj4gPiA+ID4gLw0KPiA+ID4g Pg0KPiA+ID4gPiArLyoqIEluaXRpYWxpemUgZGlzcGxheS4NCj4gPiA+ID4gKyAgKg0KPiA+ID4g PiArICAqIEBwYXJhbSAgVnJhbUJhc2VBZGRyZXNzICAgICAgICBBZGRyZXNzIG9mIHRoZSBmcmFt ZSBidWZmZXIuDQo+ID4gPiA+ICsgICoNCj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgICAgRGlzcGxheSBpbml0aWFsaXphdGlvbiBzdWNjZXNzLg0KPiA+ID4gPiArKiov DQo+ID4gPiA+ICBFRklfU1RBVFVTDQo+ID4gPiA+ICBMY2RJbml0aWFsaXplICgNCj4gPiA+ID4g ICAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgICBWcmFtQmFzZUFkZHJlc3MNCj4gPiA+ID4gQEAg LTY3LDYgKzczLDEyIEBAIExjZEluaXRpYWxpemUgKA0KPiA+ID4gPiAgICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+ICsvKiogU2V0IHJlcXVlc3RlZCBt b2RlIG9mIHRoZSBkaXNwbGF5Lg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHBhcmFtICBN b2RlTnVtYmVyICAgICAgICAgICAgIERpc3BsYXkgbW9kZSBudW1iZXIuDQo+ID4gPiA+ICsgICog QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIERpc3BsYXkgc2V0IG1vZGUgc3VjY2Vzcy4N Cj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgSWYgbW9kZSBub3Qg Zm91bmQvc3VwcG9ydGVkLg0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICBFRklfU1RBVFVTDQo+ID4g PiA+ICBMY2RTZXRNb2RlICgNCj4gPiA+ID4gICAgSU4gVUlOVDMyICBNb2RlTnVtYmVyDQo+ID4g PiA+IEBAIC0xMzYsNiArMTQ4LDggQEAgTGNkU2V0TW9kZSAoDQo+ID4gPiA+ICAgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gKy8qKiBEZS1pbml0aWFs aXplcyB0aGUgZGlzcGxheS4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAgVk9JRA0KPiA+ID4gPiAg TGNkU2h1dGRvd24gKA0KPiA+ID4gPiAgICBWT0lEDQo+ID4gPiA+IEBAIC0xNDUsNiArMTU5LDEy IEBAIExjZFNodXRkb3duICgNCj4gPiA+ID4gICAgTW1pb1dyaXRlMzIgKEhETENEX1JFR19DT01N QU5ELCBIRExDRF9ESVNBQkxFKTsgIH0NCj4gPiA+ID4NCj4gPiA+ID4gKy8qKiBDaGVjayBmb3Ig cHJlc2VuY2Ugb2YgSERMQ0QuDQo+ID4gPiA+ICsgICoNCj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgUGxhdGZvcm0gaW1wbGVtZW50cyBIRExDRC4NCj4gPiA+ID4g KyAgKiBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgSERMQ0QgZGlzcGxheSBjb250cm9s bGVyIG5vdA0KPiA+ID4gPiArICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu ZC4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAgRUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNkSWRlbnRp ZnkgKA0KPiA+ID4gPiAgICBWT0lEDQo+ID4gPiA+IGRpZmYgLS1naXQNCj4gPiA+ID4NCj4gPiA+ DQo+IGEvQXJtUGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9MY2RHcmFw aGljc091dHB1dER4ZS4NCj4gPiA+IGMNCj4gPiA+ID4NCj4gPiA+DQo+IGIvQXJtUGxhdGZvcm1Q a2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9MY2RHcmFwaGljc091dHB1dER4ZS4NCj4g PiA+IGMNCj4gPiA+ID4gaW5kZXgNCj4gPiA+ID4NCj4gPiA+DQo+IDJkZDhmMzk4NzNmNzdiMWMy MTFiZmY0MDdjYWJlOTBjMTc5NWIxMjEuLmM0MGM4ZTBmYTZmNGI1Zjc3OThhZWINCj4gPiA+IDNj OGJmMw0KPiA+ID4gPiBmMjYxZjE0Y2I2N2IgMTAwNjQ0DQo+ID4gPiA+IC0tLQ0KPiA+ID4gPg0K PiA+ID4NCj4gYS9Bcm1QbGF0Zm9ybVBrZy9Ecml2ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL0xj ZEdyYXBoaWNzT3V0cHV0RHhlLg0KPiA+ID4gYw0KPiA+ID4gPiArKysNCj4gPiA+DQo+IGIvQXJt UGxhdGZvcm1Qa2cvRHJpdmVycy9MY2RHcmFwaGljc091dHB1dER4ZS9MY2RHcmFwaGljc091dHB1 dER4ZQ0KPiA+ID4gPiArKysgLmMNCj4gPiA+ID4gQEAgLTM1Nyw4ICszNTcsOCBAQCBMY2RHcmFw aGljc1NldE1vZGUgKA0KPiA+ID4gPiAgICAgIGdvdG8gRVhJVDsNCj4gPiA+ID4gICAgfQ0KPiA+ ID4gPg0KPiA+ID4gPiAtICAvLyBUaGUgVUVGSSBzcGVjIHJlcXVpcmVzIHRoYXQgd2Ugbm93IGNs ZWFyIHRoZSB2aXNpYmxlDQo+ID4gPiA+IHBvcnRpb25zIG9mIHRoZQ0KPiA+ID4gPiAtICAvLyBv dXRwdXQgZGlzcGxheSB0byBibGFjay4NCj4gPiA+ID4gKyAgLyogVGhlIFVFRkkgc3BlYyByZXF1 aXJlcyB0aGF0IHdlIG5vdyBjbGVhciB0aGUgdmlzaWJsZSBwb3J0aW9ucyBvZg0KPiB0aGUNCj4g PiA+ID4gKyAgICogb3V0cHV0IGRpc3BsYXkgdG8gYmxhY2suICovDQo+ID4gPiA+DQo+ID4gPiA+ ICAgIC8vIFNldCB0aGUgZmlsbCBjb2xvdXIgdG8gYmxhY2sNCj4gPiA+ID4gICAgU2V0TWVtICgm RmlsbENvbG91ciwgc2l6ZW9mIChFRklfR1JBUEhJQ1NfT1VUUFVUX0JMVF9QSVhFTCksDQo+ID4g PiA+IDB4MCk7IGRpZmYgLS1naXQNCj4gPiA+ID4gYS9Bcm1QbGF0Zm9ybVBrZy9Ecml2ZXJzL0xj ZEdyYXBoaWNzT3V0cHV0RHhlL1BMMTExTGNkLmMNCj4gPiA+ID4gYi9Bcm1QbGF0Zm9ybVBrZy9E cml2ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL1BMMTExTGNkLmMNCj4gPiA+ID4gaW5kZXgNCj4g PiA+ID4NCj4gPiA+DQo+IDBiMGM0MjA0ZmJjNDRiYzllOTBkY2UzZDdiNDEwY2UxNjdkOWY0MGMu LmY4YTNjMWY4MjY2YzBhMTFmMTExYzMNCj4gPiA+IDc0NzY4OA0KPiA+ID4gPiBkZWZjMGQ0OTg3 N2MgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL0FybVBsYXRmb3JtUGtnL0RyaXZlcnMvTGNkR3JhcGhp Y3NPdXRwdXREeGUvUEwxMTFMY2QuYw0KPiA+ID4gPiArKysgYi9Bcm1QbGF0Zm9ybVBrZy9Ecml2 ZXJzL0xjZEdyYXBoaWNzT3V0cHV0RHhlL1BMMTExTGNkLmMNCj4gPiA+ID4gQEAgLTI2LDYgKzI2 LDEyIEBADQo+ID4gPiA+ICAgKg0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4NCj4gKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiA+ID4g KioqKioqKioqKioqDQo+ID4gPiA+IC8NCj4gPiA+ID4NCj4gPiA+ID4gKy8qKiBDaGVjayBmb3Ig cHJlc2VuY2Ugb2YgUEwxMTEuDQo+ID4gPiA+ICsgICoNCj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgUGxhdGZvcm0gaW1wbGVtZW50cyBQTDExMS4NCj4gPiA+ID4g KyAgKiBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgUEwxMTEgZGlzcGxheSBjb250cm9s bGVyIG5vdA0KPiA+ID4gPiArICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu ZC4NCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiAgRUZJX1NUQVRVUw0KPiA+ID4gPiAgTGNkSWRlbnRp ZnkgKA0KPiA+ID4gPiAgICBWT0lEDQo+ID4gPiA+IEBAIC00OCw2ICs1NCwxMiBAQCBMY2RJZGVu dGlmeSAoDQo+ID4gPiA+ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ID4gPiAgfQ0KPiA+ ID4gPg0KPiA+ID4gPiArLyoqIEluaXRpYWxpemUgZGlzcGxheS4NCj4gPiA+ID4gKyAgKg0KPiA+ ID4gPiArICAqIEBwYXJhbSAgVnJhbUJhc2VBZGRyZXNzICAgICAgICBBZGRyZXNzIG9mIHRoZSBm cmFtZSBidWZmZXIuDQo+ID4gPiA+ICsgICoNCj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgRGlzcGxheSBpbml0aWFsaXphdGlvbiBzdWNjZXNzLg0KPiA+ID4gPiAr KiovDQo+ID4gPiA+ICBFRklfU1RBVFVTDQo+ID4gPiA+ICBMY2RJbml0aWFsaXplICgNCj4gPiA+ ID4gICAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgICBWcmFtQmFzZUFkZHJlc3MNCj4gPiA+ID4g QEAgLTYzLDYgKzc1LDEyIEBAIExjZEluaXRpYWxpemUgKA0KPiA+ID4gPiAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+ICsvKiogU2V0IHJlcXVlc3Rl ZCBtb2RlIG9mIHRoZSBkaXNwbGF5Lg0KPiA+ID4gPiArICAqDQo+ID4gPiA+ICsgICogQHBhcmFt ICBNb2RlTnVtYmVyICAgICAgICAgICAgIERpc3BsYXkgbW9kZSBudW1iZXIuDQo+ID4gPiA+ICsg ICogQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIERpc3BsYXkgc2V0IG1vZGUgc3VjY2Vz cy4NCj4gPiA+ID4gKyAgKiBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgSWYgbW9kZSBu b3QgZm91bmQvc3VwcG9ydGVkLg0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICBFRklfU1RBVFVTDQo+ ID4gPiA+ICBMY2RTZXRNb2RlICgNCj4gPiA+ID4gICAgSU4gVUlOVDMyICBNb2RlTnVtYmVyDQo+ ID4gPiA+IEBAIC0xMjMsNyArMTQxLDcgQEAgTGNkU2V0TW9kZSAoDQo+ID4gPiA+DQo+ID4gPiA+ ICAgIC8vIFBMMTExX1JFR19MQ0RfQ09OVFJPTA0KPiA+ID4gPiAgICBMY2RDb250cm9sID0gUEwx MTFfQ1RSTF9MQ0RfRU4gfCBQTDExMV9DVFJMX0xDRF9CUFAgKExjZEJwcCkNCj4gPiA+ID4gLSAg ICAgICAgICAgICAgICAgfCBQTDExMV9DVFJMX0xDRF9URlQgfCBQTDExMV9DVFJMX0JHUjsNCj4g PiA+ID4gKyAgICAgICAgICAgICAgIHwgUEwxMTFfQ1RSTF9MQ0RfVEZUIHwgUEwxMTFfQ1RSTF9C R1I7DQo+ID4gPiA+DQo+ID4gPiA+ICAgIE1taW9Xcml0ZTMyIChQTDExMV9SRUdfTENEX0NPTlRS T0wsIExjZENvbnRyb2wpOw0KPiA+ID4gPg0KPiA+ID4gPiBAQCAtMTM0LDYgKzE1Miw4IEBAIExj ZFNldE1vZGUgKA0KPiA+ID4gPiAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiA+ICB9DQo+ ID4gPiA+DQo+ID4gPiA+ICsvKiogRGUtaW5pdGlhbGl6ZXMgdGhlIGRpc3BsYXkuDQo+ID4gPiA+ ICsqLw0KPiA+ID4gPiAgVk9JRA0KPiA+ID4gPiAgTGNkU2h1dGRvd24gKA0KPiA+ID4gPiAgICBW T0lEDQo+ID4gPiA+IC0tDQo+ID4gPiA+IEd1aWQoIkNFMTY1NjY5LTNFRjMtNDkzRi1CODVELTYx OTBFRTVCOTc1OSIpDQo+ID4gPiA+DQo+ID4gPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fDQo+ID4gPiA+IGVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+ ID4gPiA+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4gPiA+IGh0dHBzOi8vbGlzdHMuMDEu b3JnL21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0KPiA+IElNUE9SVEFOVCBOT1RJQ0U6IFRo ZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJlDQo+IGNvbmZp ZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGlu dGVuZGVkDQo+IHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5 IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlDQo+IGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24s IHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlDQo+IGluZm9ybWF0 aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCklNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250 ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBh bmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJl Y2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3Qg ZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55 IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0u IFRoYW5rIHlvdS4NCg==