From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 32362FD8FCF for ; Thu, 26 Feb 2026 16:30:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8195910E9C4; Thu, 26 Feb 2026 16:30:36 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=linux.dev header.i=@linux.dev header.b="XNfvb3gN"; dkim-atps=neutral X-Greylist: delayed 376 seconds by postgrey-1.36 at gabe; Thu, 26 Feb 2026 16:30:35 UTC Received: from out-189.mta0.migadu.com (out-189.mta0.migadu.com [91.218.175.189]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1DA3710E9C5; Thu, 26 Feb 2026 16:30:35 +0000 (UTC) Message-ID: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1772123046; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Mot2vauLG07vA2kiO70W8m+1wIvRmpWaKTQPNgejD+E=; b=XNfvb3gNCQYVnDPdOX4cgYnYDectI0KeFSjLMjAl64DNssi19dgYuSfMaP8KG4MPGM70wI /Cx/++mtEKJjl6Y2E3LIwM9cmNehjx7aaUd4aRIKFIWg07iwAv94BE11CxqyfubAdNrr99 8/PNQg9ZeCjOyYa8jk8uPVP302WIxBA= Date: Fri, 27 Feb 2026 00:23:34 +0800 MIME-Version: 1.0 Subject: Re: [PATCH v11 2/2] rust: clist: Add support to interface with C linked lists To: Joel Fernandes , linux-kernel@vger.kernel.org Cc: Miguel Ojeda , Boqun Feng , Gary Guo , =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Alex Gaynor , Danilo Krummrich , Dave Airlie , David Airlie , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Simona Vetter , Daniel Almeida , Koen Koning , Nikola Djukic , Alexandre Courbot , Philipp Stanner , Elle Rhumsaa , Jonathan Corbet , Alex Deucher , =?UTF-8?Q?Christian_K=C3=B6nig?= , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Lucas De Marchi , =?UTF-8?Q?Thomas_Hellstr=C3=B6m?= , Helge Deller , John Hubbard , Alistair Popple , Timur Tabi , Edwin Peer , Andrea Righi , Andy Ritger , Zhi Wang , Balbir Singh , alexeyi@nvidia.com, Eliot Courtney , dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, linux-doc@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-fbdev@vger.kernel.org References: <20260224222734.3153931-1-joelagnelf@nvidia.com> <20260224222734.3153931-3-joelagnelf@nvidia.com> X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Alvin Sun In-Reply-To: <20260224222734.3153931-3-joelagnelf@nvidia.com> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 X-Migadu-Flow: FLOW_OUT X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Ck9uIDIvMjUvMjYgMDY6MjcsIEpvZWwgRmVybmFuZGVzIHdyb3RlOgo+IEFkZCBhIG5ldyBtb2R1 bGUgYGNsaXN0YCBmb3Igd29ya2luZyB3aXRoIEMncyBkb3VibHkgY2lyY3VsYXIgbGlua2VkCj4g bGlzdHMuIFByb3ZpZGUgbG93LWxldmVsIGl0ZXJhdGlvbiBvdmVyIGxpc3Qgbm9kZXMuCj4KPiBU eXBlZCBpdGVyYXRpb24gb3ZlciBhY3R1YWwgaXRlbXMgaXMgcHJvdmlkZWQgd2l0aCBhIGBjbGlz dF9jcmVhdGVgCj4gbWFjcm8gdG8gYXNzaXN0IGluIGNyZWF0aW9uIG9mIHRoZSBgQ0xpc3RgIHR5 cGUuCj4KPiBDYzogTmlrb2xhIERqdWtpYyA8bmRqdWtpY0BudmlkaWEuY29tPgo+IFJldmlld2Vk LWJ5OiBEYW5pZWwgQWxtZWlkYSA8ZGFuaWVsLmFsbWVpZGFAY29sbGFib3JhLmNvbT4KPiBBY2tl ZC1ieTogR2FyeSBHdW8gPGdhcnlAZ2FyeWd1by5uZXQ+Cj4gU2lnbmVkLW9mZi1ieTogSm9lbCBG ZXJuYW5kZXMgPGpvZWxhZ25lbGZAbnZpZGlhLmNvbT4KPiAtLS0KPiAgIE1BSU5UQUlORVJTICAg ICAgICAgICAgICB8ICAgOCArCj4gICBydXN0L2hlbHBlcnMvaGVscGVycy5jICAgfCAgIDEgKwo+ ICAgcnVzdC9oZWxwZXJzL2xpc3QuYyAgICAgIHwgIDE3ICsrCj4gICBydXN0L2tlcm5lbC9mZmkv Y2xpc3QucnMgfCAzMzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g ICBydXN0L2tlcm5lbC9mZmkvbW9kLnJzICAgfCAgIDIgKwo+ICAgcnVzdC9rZXJuZWwvbGliLnJz ICAgICAgIHwgICAxICsKPiAgIDYgZmlsZXMgY2hhbmdlZCwgMzY3IGluc2VydGlvbnMoKykKPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBydXN0L2hlbHBlcnMvbGlzdC5jCj4gICBjcmVhdGUgbW9kZSAx MDA2NDQgcnVzdC9rZXJuZWwvZmZpL2NsaXN0LnJzCj4KPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5F UlMgYi9NQUlOVEFJTkVSUwo+IGluZGV4IGRjODJhNmJkMWE2MS4uMGRjMzE4Yzk0Yzk5IDEwMDY0 NAo+IC0tLSBhL01BSU5UQUlORVJTCj4gKysrIGIvTUFJTlRBSU5FUlMKPiBAQCAtMjMxODEsNiAr MjMxODEsMTQgQEAgVDoJZ2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9SdXN0LWZvci1MaW51eC9saW51 eC5naXQgYWxsb2MtbmV4dAo+ICAgRjoJcnVzdC9rZXJuZWwvYWxsb2MucnMKPiAgIEY6CXJ1c3Qv a2VybmVsL2FsbG9jLwo+ICAgCj4gK1JVU1QgW0ZGSSBIRUxQRVJdCj4gK006CUpvZWwgRmVybmFu ZGVzIDxqb2VsYWduZWxmQG52aWRpYS5jb20+IChDTElTVCkKPiArTToJQWxleGFuZHJlIENvdXJi b3QgPGFjb3VyYm90QG52aWRpYS5jb20+IChDTElTVCkKPiArTDoJcnVzdC1mb3ItbGludXhAdmdl ci5rZXJuZWwub3JnCj4gK1M6CU1haW50YWluZWQKPiArVDoJZ2l0IGh0dHBzOi8vZ2l0aHViLmNv bS9SdXN0LWZvci1MaW51eC9saW51eC5naXQgZmZpLW5leHQKPiArRjoJcnVzdC9rZXJuZWwvZmZp Lwo+ICsKPiAgIFJVU1QgW05VTV0KPiAgIE06CUFsZXhhbmRyZSBDb3VyYm90IDxhY291cmJvdEBu dmlkaWEuY29tPgo+ICAgUjoJWXVyeSBOb3JvdiA8eXVyeS5ub3JvdkBnbWFpbC5jb20+Cj4gZGlm ZiAtLWdpdCBhL3J1c3QvaGVscGVycy9oZWxwZXJzLmMgYi9ydXN0L2hlbHBlcnMvaGVscGVycy5j Cj4gaW5kZXggYTNjNDJlNTFmMDBhLi43MjRmY2I4MjQwYWMgMTAwNjQ0Cj4gLS0tIGEvcnVzdC9o ZWxwZXJzL2hlbHBlcnMuYwo+ICsrKyBiL3J1c3QvaGVscGVycy9oZWxwZXJzLmMKPiBAQCAtMzUs NiArMzUsNyBAQAo+ICAgI2luY2x1ZGUgImlvLmMiCj4gICAjaW5jbHVkZSAianVtcF9sYWJlbC5j Igo+ICAgI2luY2x1ZGUgImt1bml0LmMiCj4gKyNpbmNsdWRlICJsaXN0LmMiCj4gICAjaW5jbHVk ZSAibWFwbGVfdHJlZS5jIgo+ICAgI2luY2x1ZGUgIm1tLmMiCj4gICAjaW5jbHVkZSAibXV0ZXgu YyIKPiBkaWZmIC0tZ2l0IGEvcnVzdC9oZWxwZXJzL2xpc3QuYyBiL3J1c3QvaGVscGVycy9saXN0 LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTgwOTVhNTU5 M2M1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3J1c3QvaGVscGVycy9saXN0LmMKPiBAQCAtMCww ICsxLDE3IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKwo+ICsv Kgo+ICsgKiBIZWxwZXJzIGZvciBDIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBpbXBsZW1l bnRhdGlvbi4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ICsKPiArX19y dXN0X2hlbHBlciB2b2lkIHJ1c3RfaGVscGVyX0lOSVRfTElTVF9IRUFEKHN0cnVjdCBsaXN0X2hl YWQgKmxpc3QpCj4gK3sKPiArCUlOSVRfTElTVF9IRUFEKGxpc3QpOwo+ICt9Cj4gKwo+ICtfX3J1 c3RfaGVscGVyIHZvaWQgcnVzdF9oZWxwZXJfbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbGlzdF9oZWFk ICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCj4gK3sKPiArCWxpc3RfYWRkX3RhaWwobmV3 LCBoZWFkKTsKPiArfQo+IGRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9mZmkvY2xpc3QucnMgYi9y dXN0L2tlcm5lbC9mZmkvY2xpc3QucnMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAwMC4uYTY0NTM1OGVlZTU4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3J1c3Qva2Vy bmVsL2ZmaS9jbGlzdC5ycwo+IEBAIC0wLDAgKzEsMzM4IEBACj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4gKwo+ICsvLyEgRkZJIGludGVyZmFjZSBmb3IgQyBkb3VibHkg Y2lyY3VsYXIgaW50cnVzaXZlIGxpbmtlZCBsaXN0cy4KPiArLy8hCj4gKy8vISBUaGlzIG1vZHVs ZSBwcm92aWRlcyBSdXN0IGFic3RyYWN0aW9ucyBmb3IgaXRlcmF0aW5nIG92ZXIgQyBgbGlzdF9o ZWFkYC1iYXNlZAo+ICsvLyEgbGlua2VkIGxpc3RzLiBJdCBzaG91bGQgb25seSBiZSB1c2VkIGZv ciBjYXNlcyB3aGVyZSBDIGFuZCBSdXN0IGNvZGUgc2hhcmUKPiArLy8hIGRpcmVjdCBhY2Nlc3Mg dG8gdGhlIHNhbWUgbGlua2VkIGxpc3QgdGhyb3VnaCBhbiBGRkkgaW50ZXJmYWNlLgo+ICsvLyEK PiArLy8hIE5vdGU6IFRoaXMgKm11c3Qgbm90KiBiZSB1c2VkIGJ5IFJ1c3QgY29tcG9uZW50cyB0 aGF0IGp1c3QgbmVlZCBhIGxpbmtlZCBsaXN0Cj4gKy8vISBwcmltaXRpdmUuIFVzZSBbYGtlcm5l bDo6bGlzdDo6TGlzdGBdIGluc3RlYWQuCj4gKy8vIQo+ICsvLyEgIyBFeGFtcGxlcwo+ICsvLyEK PiArLy8hIGBgYAo+ICsvLyEgdXNlIGtlcm5lbDo6ewo+ICsvLyEgICAgIGJpbmRpbmdzLAo+ICsv LyEgICAgIGNsaXN0X2NyZWF0ZSwKPiArLy8hICAgICB0eXBlczo6T3BhcXVlLAo+ICsvLyEgfTsK PiArLy8hICMgLy8gQ3JlYXRlIHRlc3QgbGlzdCB3aXRoIHZhbHVlcyAoMCwgMTAsIDIwKSAtIG5v cm1hbGx5IGRvbmUgYnkgQyBjb2RlIGJ1dCBpdCBpcwo+ICsvLyEgIyAvLyBlbXVsYXRlZCBoZXJl IGZvciBkb2N0ZXN0cyB1c2luZyB0aGUgQyBiaW5kaW5ncy4KPiArLy8hICMgdXNlIGNvcmU6Om1l bTo6TWF5YmVVbmluaXQ7Cj4gKy8vISAjCj4gKy8vISAjIC8vLyBDIHN0cnVjdCB3aXRoIGVtYmVk ZGVkIGBsaXN0X2hlYWRgICh0eXBpY2FsbHkgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgQyBjb2RlKS4K PiArLy8hICMgI1tyZXByKEMpXQo+ICsvLyEgIyBwdWIgc3RydWN0IFNhbXBsZUl0ZW1DIHsKPiAr Ly8hICMgICAgIHB1YiB2YWx1ZTogaTMyLAo+ICsvLyEgIyAgICAgcHViIGxpbms6IGJpbmRpbmdz OjpsaXN0X2hlYWQsCj4gKy8vISAjIH0KPiArLy8hICMKPiArLy8hICMgbGV0IG11dCBoZWFkID0g TWF5YmVVbmluaXQ6OjxiaW5kaW5nczo6bGlzdF9oZWFkPjo6dW5pbml0KCk7Cj4gKy8vISAjCj4g Ky8vISAjIGxldCBoZWFkID0gaGVhZC5hc19tdXRfcHRyKCk7Cj4gKy8vISAjIC8vIFNBRkVUWTog aGVhZCBhbmQgYWxsIHRoZSBpdGVtcyBhcmUgdGVzdCBvYmplY3RzIGFsbG9jYXRlZCBpbiB0aGlz IHNjb3BlLgo+ICsvLyEgIyB1bnNhZmUgeyBiaW5kaW5nczo6SU5JVF9MSVNUX0hFQUQoaGVhZCkg fTsKPiArLy8hICMKPiArLy8hICMgbGV0IG11dCBpdGVtcyA9IFsKPiArLy8hICMgICAgIE1heWJl VW5pbml0Ojo8U2FtcGxlSXRlbUM+Ojp1bmluaXQoKSwKPiArLy8hICMgICAgIE1heWJlVW5pbml0 Ojo8U2FtcGxlSXRlbUM+Ojp1bmluaXQoKSwKPiArLy8hICMgICAgIE1heWJlVW5pbml0Ojo8U2Ft cGxlSXRlbUM+Ojp1bmluaXQoKSwKPiArLy8hICMgXTsKPiArLy8hICMKPiArLy8hICMgZm9yIChp LCBpdGVtKSBpbiBpdGVtcy5pdGVyX211dCgpLmVudW1lcmF0ZSgpIHsKPiArLy8hICMgICAgIGxl dCBwdHIgPSBpdGVtLmFzX211dF9wdHIoKTsKPiArLy8hICMgICAgIC8vIFNBRkVUWTogYHB0cmAg cG9pbnRzIHRvIGEgdmFsaWQgYE1heWJlVW5pbml0PFNhbXBsZUl0ZW1DPmAuCj4gKy8vISAjICAg ICB1bnNhZmUgeyAoKnB0cikudmFsdWUgPSBpIGFzIGkzMiAqIDEwIH07Cj4gKy8vISAjICAgICAv LyBTQUZFVFk6IGAmcmF3IG11dGAgY3JlYXRlcyBhIHBvaW50ZXIgdmFsaWQgZm9yIGBJTklUX0xJ U1RfSEVBRGAuCj4gKy8vISAjICAgICB1bnNhZmUgeyBiaW5kaW5nczo6SU5JVF9MSVNUX0hFQUQo JnJhdyBtdXQgKCpwdHIpLmxpbmspIH07Cj4gKy8vISAjICAgICAvLyBTQUZFVFk6IGBsaW5rYCB3 YXMganVzdCBpbml0aWFsaXplZCBhbmQgYGhlYWRgIGlzIGEgdmFsaWQgbGlzdCBoZWFkLgo+ICsv LyEgIyAgICAgdW5zYWZlIHsgYmluZGluZ3M6Omxpc3RfYWRkX3RhaWwoJm11dCAoKnB0cikubGlu aywgaGVhZCkgfTsKPiArLy8hICMgfQo+ICsvLyEKPiArLy8hIC8vIFJ1c3Qgd3JhcHBlciBmb3Ig dGhlIEMgc3RydWN0Lgo+ICsvLyEgLy8gVGhlIGxpc3QgaXRlbSBzdHJ1Y3QgaW4gdGhpcyBleGFt cGxlIGlzIGRlZmluZWQgaW4gQyBjb2RlIGFzOgo+ICsvLyEgLy8gICBzdHJ1Y3QgU2FtcGxlSXRl bUMgewo+ICsvLyEgLy8gICAgICAgaW50IHZhbHVlOwo+ICsvLyEgLy8gICAgICAgc3RydWN0IGxp c3RfaGVhZCBsaW5rOwo+ICsvLyEgLy8gICB9Owo+ICsvLyEgLy8KPiArLy8hICNbcmVwcih0cmFu c3BhcmVudCldCj4gKy8vISBwdWIgc3RydWN0IEl0ZW0oT3BhcXVlPFNhbXBsZUl0ZW1DPik7Cj4g Ky8vIQo+ICsvLyEgaW1wbCBJdGVtIHsKPiArLy8hICAgICBwdWIgZm4gdmFsdWUoJnNlbGYpIC0+ IGkzMiB7Cj4gKy8vISAgICAgICAgIC8vIFNBRkVUWTogW2BJdGVtYF0gaGFzIHNhbWUgbGF5b3V0 IGFzIFtgU2FtcGxlSXRlbUNgXS4KPiArLy8hICAgICAgICAgdW5zYWZlIHsgKCpzZWxmLjAuZ2V0 KCkpLnZhbHVlIH0KPiArLy8hICAgICB9Cj4gKy8vISB9Cj4gKy8vIQo+ICsvLyEgLy8gQ3JlYXRl IHR5cGVkIFtgQ0xpc3RgXSBmcm9tIHNlbnRpbmVsIGhlYWQuCj4gKy8vISAvLyBTQUZFVFk6IGhl YWQgaXMgdmFsaWQgYW5kIGluaXRpYWxpemVkLCBpdGVtcyBhcmUgYFNhbXBsZUl0ZW1DYCB3aXRo Cj4gKy8vISAvLyBlbWJlZGRlZCBgbGlua2AgZmllbGQsIGFuZCBgSXRlbWAgaXMgYCNbcmVwcih0 cmFuc3BhcmVudCldYCBvdmVyIGBTYW1wbGVJdGVtQ2AuCj4gKy8vISBsZXQgbGlzdCA9IGNsaXN0 X2NyZWF0ZSEodW5zYWZlIHsgaGVhZCwgSXRlbSwgU2FtcGxlSXRlbUMsIGxpbmsgfSk7Cj4gKy8v IQo+ICsvLyEgLy8gSXRlcmF0ZSBkaXJlY3RseSBvdmVyIHR5cGVkIGl0ZW1zLgo+ICsvLyEgbGV0 IG11dCBmb3VuZF8wID0gZmFsc2U7Cj4gKy8vISBsZXQgbXV0IGZvdW5kXzEwID0gZmFsc2U7Cj4g Ky8vISBsZXQgbXV0IGZvdW5kXzIwID0gZmFsc2U7Cj4gKy8vIQo+ICsvLyEgZm9yIGl0ZW0gaW4g bGlzdC5pdGVyKCkgewo+ICsvLyEgICAgIGxldCB2YWwgPSBpdGVtLnZhbHVlKCk7Cj4gKy8vISAg ICAgaWYgdmFsID09IDAgeyBmb3VuZF8wID0gdHJ1ZTsgfQo+ICsvLyEgICAgIGlmIHZhbCA9PSAx MCB7IGZvdW5kXzEwID0gdHJ1ZTsgfQo+ICsvLyEgICAgIGlmIHZhbCA9PSAyMCB7IGZvdW5kXzIw ID0gdHJ1ZTsgfQo+ICsvLyEgfQo+ICsvLyEKPiArLy8hIGFzc2VydCEoZm91bmRfMCAmJiBmb3Vu ZF8xMCAmJiBmb3VuZF8yMCk7Cj4gKy8vISBgYGAKPiArCj4gK3VzZSBjb3JlOjp7Cj4gKyAgICBp dGVyOjpGdXNlZEl0ZXJhdG9yLAo+ICsgICAgbWFya2VyOjpQaGFudG9tRGF0YSwgLy8KPiArfTsK PiArCj4gK3VzZSBjcmF0ZTo6ewo+ICsgICAgYmluZGluZ3MsCj4gKyAgICB0eXBlczo6T3BhcXVl LCAvLwo+ICt9Owo+ICsKPiArdXNlIHBpbl9pbml0Ojp7Cj4gKyAgICBwaW5fZGF0YSwKPiArICAg IHBpbl9pbml0LAo+ICsgICAgUGluSW5pdCwgLy8KPiArfTsKPiArCj4gKy8vLyBGRkkgd3JhcHBl ciBmb3IgYSBDIGBsaXN0X2hlYWRgIG9iamVjdCB1c2VkIGluIGludHJ1c2l2ZSBsaW5rZWQgbGlz dHMuCj4gKy8vLwo+ICsvLy8gIyBJbnZhcmlhbnRzCj4gKy8vLwo+ICsvLy8gLSBUaGUgdW5kZXJs eWluZyBgbGlzdF9oZWFkYCBoYXMgYmVlbiBpbml0aWFsaXplZCAoZS5nLiB2aWEgYElOSVRfTElT VF9IRUFEKClgKSBhbmQgaXRzCj4gKy8vLyAgIGBuZXh0YC9gcHJldmAgcG9pbnRlcnMgYXJlIHZh bGlkIGFuZCBub24tTlVMTC4KPiArI1twaW5fZGF0YV0KPiArI1tyZXByKHRyYW5zcGFyZW50KV0K PiArcHViIHN0cnVjdCBDTGlzdEhlYWQgewo+ICsgICAgI1twaW5dCj4gKyAgICBpbm5lcjogT3Bh cXVlPGJpbmRpbmdzOjpsaXN0X2hlYWQ+LAo+ICt9Cj4gKwo+ICtpbXBsIENMaXN0SGVhZCB7Cj4g KyAgICAvLy8gQ3JlYXRlIGEgYCZDTGlzdEhlYWRgIHJlZmVyZW5jZSBmcm9tIGEgcmF3IGBsaXN0 X2hlYWRgIHBvaW50ZXIuCj4gKyAgICAvLy8KPiArICAgIC8vLyAjIFNhZmV0eQo+ICsgICAgLy8v Cj4gKyAgICAvLy8gLSBgcHRyYCBtdXN0IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBpbml0aWFs aXplZCBgbGlzdF9oZWFkYCAoZS5nLiB2aWEKPiArICAgIC8vLyAgIGBJTklUX0xJU1RfSEVBRCgp YCksIHdpdGggdmFsaWQgbm9uLU5VTEwgYG5leHRgL2BwcmV2YCBwb2ludGVycy4KPiArICAgIC8v LyAtIGBwdHJgIG11c3QgcmVtYWluIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgYCdhYC4KPiArICAg IC8vLyAtIFRoZSBsaXN0IGFuZCBhbGwgbGlua2VkIGBsaXN0X2hlYWRgIG5vZGVzIG11c3Qgbm90 IGJlIG1vZGlmaWVkIGZyb20KPiArICAgIC8vLyAgIGFueXdoZXJlIGZvciB0aGUgbGlmZXRpbWUg YCdhYCwgdW5sZXNzIGRvbmUgc28gdmlhIGFueSBbYENMaXN0SGVhZGBdIEFQSXMuCj4gKyAgICAj W2lubGluZV0KPiArICAgIHB1YiB1bnNhZmUgZm4gZnJvbV9yYXc8J2E+KHB0cjogKm11dCBiaW5k aW5nczo6bGlzdF9oZWFkKSAtPiAmJ2EgU2VsZiB7Cj4gKyAgICAgICAgLy8gU0FGRVRZOgo+ICsg ICAgICAgIC8vIC0gW2BDTGlzdEhlYWRgXSBoYXMgc2FtZSBsYXlvdXQgYXMgYGxpc3RfaGVhZGAu Cj4gKyAgICAgICAgLy8gLSBgcHRyYCBpcyB2YWxpZCBhbmQgdW5tb2RpZmllZCBmb3IgJ2EgcGVy IGNhbGxlciBndWFyYW50ZWVzLgo+ICsgICAgICAgIHVuc2FmZSB7ICYqcHRyLmNhc3QoKSB9Cj4g KyAgICB9Cj4gKwo+ICsgICAgLy8vIEdldCB0aGUgcmF3IGBsaXN0X2hlYWRgIHBvaW50ZXIuCj4g KyAgICAjW2lubGluZV0KPiArICAgIHB1YiBmbiBhc19yYXcoJnNlbGYpIC0+ICptdXQgYmluZGlu Z3M6Omxpc3RfaGVhZCB7Cj4gKyAgICAgICAgc2VsZi5pbm5lci5nZXQoKQo+ICsgICAgfQo+ICsK PiArICAgIC8vLyBHZXQgdGhlIG5leHQgW2BDTGlzdEhlYWRgXSBpbiB0aGUgbGlzdC4KPiArICAg ICNbaW5saW5lXQo+ICsgICAgcHViIGZuIG5leHQoJnNlbGYpIC0+ICZTZWxmIHsKPiArICAgICAg ICBsZXQgcmF3ID0gc2VsZi5hc19yYXcoKTsKPiArICAgICAgICAvLyBTQUZFVFk6Cj4gKyAgICAg ICAgLy8gLSBgc2VsZi5hc19yYXcoKWAgaXMgdmFsaWQgYW5kIGluaXRpYWxpemVkIHBlciB0eXBl IGludmFyaWFudHMuCj4gKyAgICAgICAgLy8gLSBUaGUgYG5leHRgIHBvaW50ZXIgaXMgdmFsaWQg YW5kIG5vbi1OVUxMIHBlciB0eXBlIGludmFyaWFudHMKPiArICAgICAgICAvLyAgIChpbml0aWFs aXplZCB2aWEgYElOSVRfTElTVF9IRUFEKClgIG9yIGVxdWl2YWxlbnQpLgo+ICsgICAgICAgIHVu c2FmZSB7IFNlbGY6OmZyb21fcmF3KCgqcmF3KS5uZXh0KSB9Cj4gKyAgICB9Cj4gKwo+ICsgICAg Ly8vIENoZWNrIGlmIHRoaXMgbm9kZSBpcyBsaW5rZWQgaW4gYSBsaXN0IChub3QgaXNvbGF0ZWQp Lgo+ICsgICAgI1tpbmxpbmVdCj4gKyAgICBwdWIgZm4gaXNfbGlua2VkKCZzZWxmKSAtPiBib29s IHsKPiArICAgICAgICBsZXQgcmF3ID0gc2VsZi5hc19yYXcoKTsKPiArICAgICAgICAvLyBTQUZF VFk6IHNlbGYuYXNfcmF3KCkgaXMgdmFsaWQgcGVyIHR5cGUgaW52YXJpYW50cy4KPiArICAgICAg ICB1bnNhZmUgeyAoKnJhdykubmV4dCAhPSByYXcgJiYgKCpyYXcpLnByZXYgIT0gcmF3IH0KPiAr ICAgIH0KPiArCj4gKyAgICAvLy8gUGluLWluaXRpYWxpemVyIHRoYXQgaW5pdGlhbGl6ZXMgdGhl IGxpc3QgaGVhZC4KPiArICAgIHB1YiBmbiBuZXcoKSAtPiBpbXBsIFBpbkluaXQ8U2VsZj4gewo+ ICsgICAgICAgIHBpbl9pbml0IShTZWxmIHsKPiArICAgICAgICAgICAgLy8gU0FGRVRZOiBgSU5J VF9MSVNUX0hFQURgIGluaXRpYWxpemVzIGBzbG90YCB0byBhIHZhbGlkIGVtcHR5IGxpc3QuCj4g KyAgICAgICAgICAgIGlubmVyIDwtIE9wYXF1ZTo6ZmZpX2luaXQofHNsb3R8IHVuc2FmZSB7IGJp bmRpbmdzOjpJTklUX0xJU1RfSEVBRChzbG90KSB9KSwKPiArICAgICAgICB9KQo+ICsgICAgfQo+ ICt9Cj4gKwo+ICsvLyBTQUZFVFk6IGBsaXN0X2hlYWRgIGNvbnRhaW5zIG5vIHRocmVhZC1ib3Vu ZCBzdGF0ZTsgaXQgb25seSBob2xkcwo+ICsvLyBgbmV4dGAvYHByZXZgIHBvaW50ZXJzLgo+ICt1 bnNhZmUgaW1wbCBTZW5kIGZvciBDTGlzdEhlYWQge30KPiArCj4gKy8vIFNBRkVUWTogYENMaXN0 SGVhZGAgY2FuIGJlIHNoYXJlZCBhbW9uZyB0aHJlYWRzIGFzIG1vZGlmaWNhdGlvbnMgYXJlCj4g Ky8vIG5vdCBhbGxvd2VkIGF0IHRoZSBtb21lbnQuCj4gK3Vuc2FmZSBpbXBsIFN5bmMgZm9yIENM aXN0SGVhZCB7fQo+ICsKPiAraW1wbCBQYXJ0aWFsRXEgZm9yIENMaXN0SGVhZCB7Cj4gKyAgICAj W2lubGluZV0KPiArICAgIGZuIGVxKCZzZWxmLCBvdGhlcjogJlNlbGYpIC0+IGJvb2wgewo+ICsg ICAgICAgIGNvcmU6OnB0cjo6ZXEoc2VsZiwgb3RoZXIpCj4gKyAgICB9Cj4gK30KPiArCj4gK2lt cGwgRXEgZm9yIENMaXN0SGVhZCB7fQo+ICsKPiArLy8vIExvdy1sZXZlbCBpdGVyYXRvciBvdmVy IGBsaXN0X2hlYWRgIG5vZGVzLgo+ICsvLy8KPiArLy8vIEFuIGl0ZXJhdG9yIHVzZWQgdG8gaXRl cmF0ZSBvdmVyIGEgQyBpbnRydXNpdmUgbGlua2VkIGxpc3QgKGBsaXN0X2hlYWRgKS4gQ2FsbGVy IGhhcyB0bwo+ICsvLy8gcGVyZm9ybSBjb252ZXJzaW9uIG9mIHJldHVybmVkIFtgQ0xpc3RIZWFk YF0gdG8gYW4gaXRlbSAodXNpbmcgYGNvbnRhaW5lcl9vZmAgbWFjcm8gb3Igc2ltaWxhcikuCj4g Ky8vLwo+ICsvLy8gIyBJbnZhcmlhbnRzCj4gKy8vLwo+ICsvLy8gW2BDTGlzdEhlYWRJdGVyYF0g aXMgaXRlcmF0aW5nIG92ZXIgYW4gaW5pdGlhbGl6ZWQgYW5kIHZhbGlkIGxpc3QuCj4gK3N0cnVj dCBDTGlzdEhlYWRJdGVyPCdhPiB7CkhpLApKb2VsCgpUaGFua3MgZm9yIHRoZSBjbGlzdCBhYnN0 cmFjdGlvbi4gVGhlIFR5ciBkZWJ1Z2ZzIFsxXSBJJ20gaW1wbGVtZW50aW5nCm5lZWRzIHRvIGl0 ZXJhdGUgb3ZlciBhIEdwdVZtJ3MgVkEgbGlzdCwgYW5kIEknZCBsaWtlIHRvIHN3aXRjaCB0aGF0 IHRvCmEgQ0xpc3QtYmFzZWQgaW1wbGVtZW50YXRpb24uCgpDb3VsZCB5b3UgbWFrZSBDTGlzdEhl YWRJdGVyIHB1YmxpYyBhbmQgZXhwb3NlIGEgcHVibGljIGNvbnN0cnVjdG9yPwpPciBkbyB5b3Ug aGF2ZSBhIGJldHRlciBzdWdnZXN0aW9uPwoKVGhlIFZBIGxpc3QgbWl4ZXMgdHdvIG5vZGUgdHlw ZXMgaW4gb25lIGxpc3Qg4oCUIEdwdVZhICh3aXRoIGRyaXZlci1zcGVjaWZpYwpkYXRhKSBhbmQg S2VybmVsR3B1VmEg4oCUIHNvIHdlIGhhdmUgdG8gZmlsdGVyL3NraXAgbm9kZXMgYW5kIGNhbid0 IHVzZQpDTGlzdCBhcy1pcy4gV2l0aCBhIHB1YmxpYyBDTGlzdEhlYWRJdGVyIGFuZCBuZXcoKSwg d2UgY2FuIGltcGxlbWVudCBhCmN1c3RvbSBpdGVyYXRvciAobGlrZSBvdXIgY3VycmVudCBHcHVW YUl0ZXIpIG9uIHRvcCBvZiBDTGlzdEhlYWRJdGVyIGFuZCAKdGhlbgptaWdyYXRlIHRoYXQgY29k ZSB0byBjbGlzdCBpbnN0ZWFkIG9mIGhhbmQtcm9sbGVkIGxpc3QgdHJhdmVyc2FsLgoKWzFdIApo dHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvcGFuZnJvc3QvbGludXgvLS9tZXJnZV9yZXF1 ZXN0cy81OS9kaWZmcz9jb21taXRfaWQ9MDg1M2E3YjY5YTQyYjMyODMyYzhlNTdkYTYzMjcyYTg1 ODVjYjc2YiMyMzU4MWUxMGM4YjU4M2U4NWViZGU2MWExNjc1YWMzYTcwZTM3YzE0Xzg0XzE0OAoK VGhhbmtzLApBbHZpbiBTdW4KCgo+ICsgICAgLy8vIEN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGxp c3QuCj4gKyAgICBjdXJyZW50OiAmJ2EgQ0xpc3RIZWFkLAo+ICsgICAgLy8vIFRoZSBzZW50aW5l bCBoZWFkICh1c2VkIHRvIGRldGVjdCBlbmQgb2YgaXRlcmF0aW9uKS4KPiArICAgIHNlbnRpbmVs OiAmJ2EgQ0xpc3RIZWFkLAo+ICt9Cj4gKwo+ICtpbXBsPCdhPiBJdGVyYXRvciBmb3IgQ0xpc3RI ZWFkSXRlcjwnYT4gewo+ICsgICAgdHlwZSBJdGVtID0gJidhIENMaXN0SGVhZDsKPiArCj4gKyAg ICAjW2lubGluZV0KPiArICAgIGZuIG5leHQoJm11dCBzZWxmKSAtPiBPcHRpb248U2VsZjo6SXRl bT4gewo+ICsgICAgICAgIC8vIENoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIHNlbnRpbmVsIChl bmQgb2YgbGlzdCkuCj4gKyAgICAgICAgaWYgc2VsZi5jdXJyZW50ID09IHNlbGYuc2VudGluZWwg ewo+ICsgICAgICAgICAgICByZXR1cm4gTm9uZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAg IGxldCBpdGVtID0gc2VsZi5jdXJyZW50Owo+ICsgICAgICAgIHNlbGYuY3VycmVudCA9IGl0ZW0u bmV4dCgpOwo+ICsgICAgICAgIFNvbWUoaXRlbSkKPiArICAgIH0KPiArfQo+ICsKPiAraW1wbDwn YT4gRnVzZWRJdGVyYXRvciBmb3IgQ0xpc3RIZWFkSXRlcjwnYT4ge30KPiArCj4gKy8vLyBBIHR5 cGVkIEMgbGlua2VkIGxpc3Qgd2l0aCBhIHNlbnRpbmVsIGhlYWQgaW50ZW5kZWQgZm9yIEZGSSB1 c2UtY2FzZXMgd2hlcmUKPiArLy8vIEMgc3Vic3lzdGVtIG1hbmFnZXMgYSBsaW5rZWQgbGlzdCB0 aGF0IFJ1c3QgY29kZSBuZWVkcyB0byByZWFkLiBHZW5lcmFsbHkKPiArLy8vIHJlcXVpcmVkIG9u bHkgZm9yIHNwZWNpYWwgY2FzZXMuCj4gKy8vLwo+ICsvLy8gQSBzZW50aW5lbCBoZWFkIFtgQ0xp c3RIZWFkYF0gcmVwcmVzZW50cyB0aGUgZW50aXJlIGxpbmtlZCBsaXN0IGFuZCBjYW4gYmUgdXNl ZAo+ICsvLy8gZm9yIGl0ZXJhdGlvbiBvdmVyIGl0ZW1zIG9mIHR5cGUgYFRgLCBpdCBpcyBub3Qg YXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgaXRlbS4KPiArLy8vCj4gKy8vLyBUaGUgY29uc3Qg Z2VuZXJpYyBgT0ZGU0VUYCBzcGVjaWZpZXMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBgbGlzdF9o ZWFkYCBmaWVsZCB3aXRoaW4KPiArLy8vIHRoZSBzdHJ1Y3QgdGhhdCBgVGAgd3JhcHMuCj4gKy8v Lwo+ICsvLy8gIyBJbnZhcmlhbnRzCj4gKy8vLwo+ICsvLy8gLSBUaGUgc2VudGluZWwgW2BDTGlz dEhlYWRgXSBoYXMgYmVlbiBpbml0aWFsaXplZCAoZS5nLiB2aWEgYElOSVRfTElTVF9IRUFEKClg KSB3aXRoIHZhbGlkCj4gKy8vLyAgIG5vbi1OVUxMIGBuZXh0YC9gcHJldmAgcG9pbnRlcnMuCj4g Ky8vLyAtIGBPRkZTRVRgIGlzIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgYGxpc3RfaGVhZGAgZmll bGQgd2l0aGluIHRoZSBzdHJ1Y3QgdGhhdCBgVGAgd3JhcHMuCj4gKy8vLyAtIEFsbCB0aGUgbGlz dCdzIGBsaXN0X2hlYWRgIG5vZGVzIGhhdmUgYmVlbiBpbml0aWFsaXplZCB3aXRoIHZhbGlkIG5v bi1OVUxMIGBuZXh0YC9gcHJldmAKPiArLy8vICAgcG9pbnRlcnMuCj4gKyNbcmVwcih0cmFuc3Bh cmVudCldCj4gK3B1YiBzdHJ1Y3QgQ0xpc3Q8VCwgY29uc3QgT0ZGU0VUOiB1c2l6ZT4oQ0xpc3RI ZWFkLCBQaGFudG9tRGF0YTxUPik7Cj4gKwo+ICtpbXBsPFQsIGNvbnN0IE9GRlNFVDogdXNpemU+ IENMaXN0PFQsIE9GRlNFVD4gewo+ICsgICAgLy8vIENyZWF0ZSBhIHR5cGVkIFtgQ0xpc3RgXSBy ZWZlcmVuY2UgZnJvbSBhIHJhdyBzZW50aW5lbCBgbGlzdF9oZWFkYCBwb2ludGVyLgo+ICsgICAg Ly8vCj4gKyAgICAvLy8gIyBTYWZldHkKPiArICAgIC8vLwo+ICsgICAgLy8vIC0gYHB0cmAgbXVz dCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6ZWQgc2VudGluZWwgYGxpc3RfaGVh ZGAgKGUuZy4gdmlhCj4gKyAgICAvLy8gICBgSU5JVF9MSVNUX0hFQUQoKWApLCB3aXRoIHZhbGlk IG5vbi1OVUxMIGBuZXh0YC9gcHJldmAgcG9pbnRlcnMuCj4gKyAgICAvLy8gLSBgcHRyYCBtdXN0 IHJlbWFpbiB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIGAnYWAuCj4gKyAgICAvLy8gLSBUaGUgbGlz dCBhbmQgYWxsIGxpbmtlZCBub2RlcyBtdXN0IG5vdCBiZSBjb25jdXJyZW50bHkgbW9kaWZpZWQg Zm9yIHRoZSBsaWZldGltZSBgJ2FgLgo+ICsgICAgLy8vIC0gVGhlIGxpc3QgbXVzdCBjb250YWlu IGl0ZW1zIHdoZXJlIHRoZSBgbGlzdF9oZWFkYCBmaWVsZCBpcyBhdCBieXRlIG9mZnNldCBgT0ZG U0VUYC4KPiArICAgIC8vLyAtIGBUYCBtdXN0IGJlIGAjW3JlcHIodHJhbnNwYXJlbnQpXWAgb3Zl ciB0aGUgQyBzdHJ1Y3QuCj4gKyAgICAjW2lubGluZV0KPiArICAgIHB1YiB1bnNhZmUgZm4gZnJv bV9yYXc8J2E+KHB0cjogKm11dCBiaW5kaW5nczo6bGlzdF9oZWFkKSAtPiAmJ2EgU2VsZiB7Cj4g KyAgICAgICAgLy8gU0FGRVRZOgo+ICsgICAgICAgIC8vIC0gW2BDTGlzdGBdIGhhcyBzYW1lIGxh eW91dCBhcyBbYENMaXN0SGVhZGBdIGR1ZSB0byByZXByKHRyYW5zcGFyZW50KS4KPiArICAgICAg ICAvLyAtIENhbGxlciBndWFyYW50ZWVzIGBwdHJgIGlzIGEgdmFsaWQsIHNlbnRpbmVsIGBsaXN0 X2hlYWRgIG9iamVjdC4KPiArICAgICAgICB1bnNhZmUgeyAmKnB0ci5jYXN0KCkgfQo+ICsgICAg fQo+ICsKPiArICAgIC8vLyBDaGVjayBpZiB0aGUgbGlzdCBpcyBlbXB0eS4KPiArICAgICNbaW5s aW5lXQo+ICsgICAgcHViIGZuIGlzX2VtcHR5KCZzZWxmKSAtPiBib29sIHsKPiArICAgICAgICAh c2VsZi4wLmlzX2xpbmtlZCgpCj4gKyAgICB9Cj4gKwo+ICsgICAgLy8vIENyZWF0ZSBhbiBpdGVy YXRvciBvdmVyIHR5cGVkIGl0ZW1zLgo+ICsgICAgI1tpbmxpbmVdCj4gKyAgICBwdWIgZm4gaXRl cigmc2VsZikgLT4gQ0xpc3RJdGVyPCdfLCBULCBPRkZTRVQ+IHsKPiArICAgICAgICBsZXQgaGVh ZCA9ICZzZWxmLjA7Cj4gKyAgICAgICAgQ0xpc3RJdGVyIHsKPiArICAgICAgICAgICAgaGVhZF9p dGVyOiBDTGlzdEhlYWRJdGVyIHsKPiArICAgICAgICAgICAgICAgIGN1cnJlbnQ6IGhlYWQubmV4 dCgpLAo+ICsgICAgICAgICAgICAgICAgc2VudGluZWw6IGhlYWQsCj4gKyAgICAgICAgICAgIH0s Cj4gKyAgICAgICAgICAgIF9waGFudG9tOiBQaGFudG9tRGF0YSwKPiArICAgICAgICB9Cj4gKyAg ICB9Cj4gK30KPiArCj4gKy8vLyBIaWdoLWxldmVsIGl0ZXJhdG9yIG92ZXIgdHlwZWQgbGlzdCBp dGVtcy4KPiArcHViIHN0cnVjdCBDTGlzdEl0ZXI8J2EsIFQsIGNvbnN0IE9GRlNFVDogdXNpemU+ IHsKPiArICAgIGhlYWRfaXRlcjogQ0xpc3RIZWFkSXRlcjwnYT4sCj4gKyAgICBfcGhhbnRvbTog UGhhbnRvbURhdGE8JidhIFQ+LAo+ICt9Cj4gKwo+ICtpbXBsPCdhLCBULCBjb25zdCBPRkZTRVQ6 IHVzaXplPiBJdGVyYXRvciBmb3IgQ0xpc3RJdGVyPCdhLCBULCBPRkZTRVQ+IHsKPiArICAgIHR5 cGUgSXRlbSA9ICYnYSBUOwo+ICsKPiArICAgICNbaW5saW5lXQo+ICsgICAgZm4gbmV4dCgmbXV0 IHNlbGYpIC0+IE9wdGlvbjxTZWxmOjpJdGVtPiB7Cj4gKyAgICAgICAgbGV0IGhlYWQgPSBzZWxm LmhlYWRfaXRlci5uZXh0KCk/Owo+ICsKPiArICAgICAgICAvLyBDb252ZXJ0IHRvIGl0ZW0gdXNp bmcgT0ZGU0VULgo+ICsgICAgICAgIC8vIFNBRkVUWTogYGl0ZW1fcHRyYCBjYWxjdWxhdGlvbiBm cm9tIGBPRkZTRVRgIChjYWxjdWxhdGVkIHVzaW5nIG9mZnNldF9vZiEpCj4gKyAgICAgICAgLy8g aXMgdmFsaWQgcGVyIGludmFyaWFudHMuCj4gKyAgICAgICAgU29tZSh1bnNhZmUgeyAmKmhlYWQu YXNfcmF3KCkuYnl0ZV9zdWIoT0ZGU0VUKS5jYXN0Ojo8VD4oKSB9KQo+ICsgICAgfQo+ICt9Cj4g Kwo+ICtpbXBsPCdhLCBULCBjb25zdCBPRkZTRVQ6IHVzaXplPiBGdXNlZEl0ZXJhdG9yIGZvciBD TGlzdEl0ZXI8J2EsIFQsIE9GRlNFVD4ge30KPiArCj4gKy8vLyBDcmVhdGUgYSBDIGRvdWJseS1j aXJjdWxhciBsaW5rZWQgbGlzdCBpbnRlcmZhY2UgYENMaXN0YCBmcm9tIGEgcmF3IGBsaXN0X2hl YWRgIHBvaW50ZXIuCj4gKy8vLwo+ICsvLy8gVGhpcyBtYWNybyBjcmVhdGVzIGEgYENMaXN0PFQs IE9GRlNFVD5gIHRoYXQgY2FuIGl0ZXJhdGUgb3ZlciBpdGVtcyBvZiB0eXBlIGAkcnVzdF90eXBl YAo+ICsvLy8gbGlua2VkIHZpYSB0aGUgYCRmaWVsZGAgZmllbGQgaW4gdGhlIHVuZGVybHlpbmcg QyBzdHJ1Y3QgYCRjX3R5cGVgLgo+ICsvLy8KPiArLy8vICMgQXJndW1lbnRzCj4gKy8vLwo+ICsv Ly8gLSBgJGhlYWRgOiBSYXcgcG9pbnRlciB0byB0aGUgc2VudGluZWwgYGxpc3RfaGVhZGAgb2Jq ZWN0IChgKm11dCBiaW5kaW5nczo6bGlzdF9oZWFkYCkuCj4gKy8vLyAtIGAkcnVzdF90eXBlYDog RWFjaCBpdGVtJ3MgcnVzdCB3cmFwcGVyIHR5cGUuCj4gKy8vLyAtIGAkY190eXBlYDogRWFjaCBp dGVtJ3MgQyBzdHJ1Y3QgdHlwZSB0aGF0IGNvbnRhaW5zIHRoZSBlbWJlZGRlZCBgbGlzdF9oZWFk YC4KPiArLy8vIC0gYCRmaWVsZGA6IFRoZSBuYW1lIG9mIHRoZSBgbGlzdF9oZWFkYCBmaWVsZCB3 aXRoaW4gdGhlIEMgc3RydWN0Lgo+ICsvLy8KPiArLy8vICMgU2FmZXR5Cj4gKy8vLwo+ICsvLy8g VGhlIGNhbGxlciBtdXN0IGVuc3VyZToKPiArLy8vCj4gKy8vLyAtIGAkaGVhZGAgaXMgYSB2YWxp ZCwgaW5pdGlhbGl6ZWQgc2VudGluZWwgYGxpc3RfaGVhZGAgKGUuZy4gdmlhIGBJTklUX0xJU1Rf SEVBRCgpYCkKPiArLy8vICAgcG9pbnRpbmcgdG8gYSBsaXN0IHRoYXQgaXMgbm90IGNvbmN1cnJl bnRseSBtb2RpZmllZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBgQ0xpc3RgLgo+ICsvLy8gLSBU aGUgbGlzdCBjb250YWlucyBpdGVtcyBvZiB0eXBlIGAkY190eXBlYCBsaW5rZWQgdmlhIGFuIGVt YmVkZGVkIGAkZmllbGRgLgo+ICsvLy8gLSBgJHJ1c3RfdHlwZWAgaXMgYCNbcmVwcih0cmFuc3Bh cmVudCldYCBvdmVyIGAkY190eXBlYCBvciBoYXMgY29tcGF0aWJsZSBsYXlvdXQuCj4gKy8vLwo+ ICsvLy8gIyBFeGFtcGxlcwo+ICsvLy8KPiArLy8vIFJlZmVyIHRvIHRoZSBleGFtcGxlcyBpbiB0 aGlzIG1vZHVsZSdzIGRvY3VtZW50YXRpb24uCj4gKyNbbWFjcm9fZXhwb3J0XQo+ICttYWNyb19y dWxlcyEgY2xpc3RfY3JlYXRlIHsKPiArICAgICh1bnNhZmUgeyAkaGVhZDpleHByLCAkcnVzdF90 eXBlOnR5LCAkY190eXBlOnR5LCAkKCRmaWVsZDp0dCkuKyB9KSA9PiB7ewo+ICsgICAgICAgIC8v IENvbXBpbGUtdGltZSBjaGVjayB0aGF0IGZpZWxkIHBhdGggaXMgYSBsaXN0X2hlYWQuCj4gKyAg ICAgICAgbGV0IF86IGZuKCpjb25zdCAkY190eXBlKSAtPiAqY29uc3QgJGNyYXRlOjpiaW5kaW5n czo6bGlzdF9oZWFkID0KPiArICAgICAgICAgICAgfHB8IHVuc2FmZSB7ICZyYXcgY29uc3QgKCpw KS4kKCRmaWVsZCkuKyB9Owo+ICsKPiArICAgICAgICAvLyBDYWxjdWxhdGUgb2Zmc2V0IGFuZCBj cmVhdGUgYENMaXN0YC4KPiArICAgICAgICBjb25zdCBPRkZTRVQ6IHVzaXplID0gOjpjb3JlOjpt ZW06Om9mZnNldF9vZiEoJGNfdHlwZSwgJCgkZmllbGQpLispOwo+ICsgICAgICAgIC8vIFNBRkVU WTogVGhlIGNhbGxlciBvZiB0aGlzIG1hY3JvIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyBz YWZldHkuCj4gKyAgICAgICAgdW5zYWZlIHsgJGNyYXRlOjpmZmk6OmNsaXN0OjpDTGlzdDo6PCRy dXN0X3R5cGUsIE9GRlNFVD46OmZyb21fcmF3KCRoZWFkKSB9Cj4gKyAgICB9fTsKPiArfQo+IGRp ZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9mZmkvbW9kLnJzIGIvcnVzdC9rZXJuZWwvZmZpL21vZC5y cwo+IGluZGV4IDdkODQ0ZTljYjMzOS4uOGMyMzVjYTBkMWUzIDEwMDY0NAo+IC0tLSBhL3J1c3Qv a2VybmVsL2ZmaS9tb2QucnMKPiArKysgYi9ydXN0L2tlcm5lbC9mZmkvbW9kLnJzCj4gQEAgLTUs MyArNSw1IEBACj4gICAvLyBSZS1leHBvcnQgQyB0eXBlIGRlZmluaXRpb25zIGZyb20gdGhlIGBm ZmlgIGNyYXRlIHNvIHRoYXQgZXhpc3RpbmcKPiAgIC8vIGBrZXJuZWw6OmZmaTo6Y19pbnRgIGV0 Yy4gcGF0aHMgY29udGludWUgdG8gd29yay4KPiAgIHB1YiB1c2UgOjpmZmk6Oio7Cj4gKwo+ICtw dWIgbW9kIGNsaXN0Owo+IGRpZmYgLS1naXQgYS9ydXN0L2tlcm5lbC9saWIucnMgYi9ydXN0L2tl cm5lbC9saWIucnMKPiBpbmRleCAwYTc3YjRjMGZmZWIuLjU4ZGJiMDJjNTE5NyAxMDA2NDQKPiAt LS0gYS9ydXN0L2tlcm5lbC9saWIucnMKPiArKysgYi9ydXN0L2tlcm5lbC9saWIucnMKPiBAQCAt MjgsNiArMjgsNyBAQAo+ICAgIyFbZmVhdHVyZShsaW50X3JlYXNvbnMpXQo+ICAgLy8KPiAgIC8v IFN0YWJsZSBzaW5jZSBSdXN0IDEuODIuMC4KPiArIyFbZmVhdHVyZShvZmZzZXRfb2ZfbmVzdGVk KV0KPiAgICMhW2ZlYXR1cmUocmF3X3JlZl9vcCldCj4gICAvLwo+ICAgLy8gU3RhYmxlIHNpbmNl IFJ1c3QgMS44My4wLgo=