From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CBF573D47C2 for ; Tue, 9 Jun 2026 06:25:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780986350; cv=none; b=hCTIQfRzzDcaowrUg2ZRhVjCXnB9iSAkj2U6nm6ntkQIsuANE7eybOpy1SH3k/JQaRwEcFUYpj+rLsUHp+ZYWhca9vGvCwLI/82yka6KYNm/Q8sqT1zACpuvBVGXX8bgkDREahToJPYge8E9mqIF33TeFN7J46+1X0CvNXukYnU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780986350; c=relaxed/simple; bh=0lmAb3H28yFRWqL/vFjuTMrG8sen3Ov+rd3zZcbDV9g=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=KoWfhG6mPvy48fthx1yUbBpIrklRzLXFlZpPbHi2o54RHqUz/My67ES80NwIq5CT0RTjHkfbtWgYsFv2tx9hgkFcwjdsFTzDEHI9qx9qAv4mQDV3Xu+X8ZfsKZDvd6HICM8m715xHk2c9sQkR5qYrKSlkFuahomMbPfXxQwNf6c= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=qd6qoZi7; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qd6qoZi7" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2c0c379e8ffso34979715ad.3 for ; Mon, 08 Jun 2026 23:25:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780986348; x=1781591148; darn=vger.kernel.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject :date:message-id:reply-to; bh=0lmAb3H28yFRWqL/vFjuTMrG8sen3Ov+rd3zZcbDV9g=; b=qd6qoZi7CygTRrbJdWRfAx/SluTzcolcmk8WsXC5IzW2sYDpPCNKTxWlyDgQv/4aMI iIYqvulFFuuOl6RFULWVigWBiScXz3QvmRPHgJNpf2s0lStghoV/qWVCkZXcoy+dClr8 jCuGm0ngy14SgAFBA4y74fWD4YXxHhept8QE0X1WlmtrRjoi/cOEvytEkh8KiXjrgdh3 Sn3rDKu69fK50+/7IwI1GX67YlsxM9iO/Aop+t/02qr0O3ycsYJC3SCFhfqNRd4CqS8B AER8t13XI537LTmVjYCQFtgSQoko9Y0Qp9lmPPJIJUQJl1zfTBA7cqhnq6/EyOLx+ziE c45A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780986348; x=1781591148; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0lmAb3H28yFRWqL/vFjuTMrG8sen3Ov+rd3zZcbDV9g=; b=kwAogmmjAfb8GO93zH/uNxnfcsh3VS02E0efmBogIfFPQF0NDQ4lae3wQptVd3+TZ7 FNdxC4zO2SaMPirtjsAe6jToJa4OV6Vdh/d/Igf3qnquIh4yFidA+2zSLZB7p8r7z0PE cDcWPO5DJLRbCBSV5b/P89dGbq6sXjZwJmT1gWq/hmPIvWFfZm/FBgjWg39qictHe6LS Ki/a143vD15zySSRU1GUhlYYbxqsYypCFDwh2WXjOAeGygG+q1QHEzEk9diSoh4IOJvb zCjOLsWip6qmvNIBDNlbOeXcYB8JbJdZOKWss8Nc8nFmoJRvwjJQyByf5RtOj7aeHWZy yWbg== X-Forwarded-Encrypted: i=1; AFNElJ+8Y0YLZMqrZGurcgzdPVIGjO2QG2jgHXDPRJ62x9i+Lt0fDPE0N9zYgbz38eBMMk+F/RLExpwN5EVulFY=@vger.kernel.org X-Gm-Message-State: AOJu0Yw8IZqU0BNEP5puphvb5WhxNaNPMmQ67C/3bgfbL7+YX5URAvDU 1+6/V5alqqeFWhdivAlSWYSPgeuoXTd4iz2tRVcmgE/xqXba+aurJfI2NHHndiSpCyiEYw== X-Gm-Gg: Acq92OHq0i/NN80CcbvzXXCx/sw0KsNDAsyWbfWGui+i0OHZtWe3Upzs8HOcrli++xw KaGa8aChmbO5uVtmAaknYa+yyY91g/VuzwTpkBFhXD49j8GtwDdUHZSkbsr8gdc+9dIjPreOo0w QVD83TBTpIiMzG8Ln9DwyQTHDAo8vbuhoX5jYowOKWDr+gACcYI04bMuL5juoZcfKOrHs229ntL pmqSqd5t5Tl/qvsBJX9nZaB4OHEcieOhD+hT9IESXeoFBX+EnqpK4f+tWwIVxLPkN73BnJFH/oj nc7WzeBE+DNFXCfoOK0gLO2Q9MLxFUQRJxuo+lzHCXoLoQVA3md81vZQ+2M7JTp+d7bF20D2X4P 7oZ+V8Y7nMTnPIxRvR3DQbH12r8Qzpu5cssj6xEEmHdbCbRHtwvSa4z0c4jtWQHEs3mX2PjJZsj IVz+NA8opuGgPiDIuKnySmC9mPO/fLucRrbdUhCgvkpcO/2v45o0kT2Rey/Y1NmQ== X-Received: by 2002:a17:902:da8a:b0:2bf:305a:310d with SMTP id d9443c01a7336-2c1e7f92548mr224154905ad.24.1780986347946; Mon, 08 Jun 2026 23:25:47 -0700 (PDT) Received: from [192.168.0.13] ([38.34.87.7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c16609e627sm205571345ad.52.2026.06.08.23.25.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Jun 2026 23:25:47 -0700 (PDT) Message-ID: <670285aeb26ab8c4d4254a73a50f513bf9355246.camel@gmail.com> Subject: Re: [PATCH bpf] bpf: Validate BTF repeated field counts before expansion From: Eduard Zingerman To: Hou Tao , Paul Moses , Kumar Kartikeya Dwivedi Cc: martin.lau@linux.dev, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, bpf@vger.kernel.org, song@kernel.org, yonghong.song@linux.dev, jolsa@kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org Date: Mon, 08 Jun 2026 23:25:44 -0700 In-Reply-To: <83321d7b-516c-f4a0-65ea-6fd224ba3110@huawei.com> References: <20260605234301.1109063-1-p@1g4.org> <0_PQcsqBnb7dqgu9UPK6jIQvePSosttml5p2ZDoXAzy2AseVjvBu3ihswwZPWr5bZkOUCdH6HUvw3MRKJEwVYJAkT3j5gdNBHZp8l7_cP6Y=@1g4.org> <83321d7b-516c-f4a0-65ea-6fd224ba3110@huawei.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.56.2-9 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 T24gVHVlLCAyMDI2LTA2LTA5IGF0IDA5OjMwICswODAwLCBIb3UgVGFvIHdyb3RlOgo+IEhpLAo+ IAo+IE9uIDYvOS8yMDI2IDM6NTkgQU0sIEVkdWFyZCBaaW5nZXJtYW4gd3JvdGU6Cj4gPiBPbiBT dW4sIDIwMjYtMDYtMDcgYXQgMTc6NTMgKzAwMDAsIFBhdWwgTW9zZXMgd3JvdGU6Cj4gPiAKPiA+ IFsuLi5dCj4gPiAKPiA+IFRoZSByZXBybyBpcyBsZWdpdC4KPiA+IEhlcmUgaXMgYSBzb21ld2hh dCBtaW5pbWl6ZWQgdmVyc2lvbiBhcyBhIHNlbGZ0ZXN0Ogo+ID4gCj4gPiDCoMKgwqAgZGlmZiAt LWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jIGIvdG9v bHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmLmMKPiA+IMKgwqDCoCBpbmRl eCBhOWRlMzI4YTg2OTcuLjIxMmNhNDQ3MmE4OSAxMDA2NDQKPiA+IMKgwqDCoCAtLS0gYS90b29s cy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGYuYwo+ID4gwqDCoMKgICsrKyBi L3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zi5jCj4gPiDCoMKgwqAg QEAgLTQyNTgsNiArNDI1OCw0NCBAQCBzdGF0aWMgc3RydWN0IGJ0Zl9yYXdfdGVzdCByYXdfdGVz dHNbXSA9IHsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLm1heF9lbnRyaWVzID0gMSwKPiA+ IMKgwqDCoMKgIH0sCj4gPiDCoMKgwqAgCj4gPiDCoMKgwqAgK3sKPiA+IMKgwqDCoCArI2RlZmlu ZSBOIDB4MTk5OTk5OWFVCj4gPiDCoMKgwqAgK8KgwqDCoMKgwqDCoCAuZGVzY3IgPSAicmVwZWF0 IGZpZWxkcyBvdmVyZmxvdyIsCj4gPiDCoMKgwqAgK8KgwqDCoMKgwqDCoCAucmF3X3R5cGVzID0g ewo+ID4gwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIGludCAqL8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFsxXSAqLwo+ID4gwqDCoMKgICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJURl9UWVBFX0lOVF9FTkMoMCwgQlRGX0lOVF9TSUdO RUQsIDAsIDMyLCA0KSwKPiA+IMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAv KiBzdHJ1Y3QgdGFyZ2V0IHt9ICovwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFsyXSAqLwo+ID4gwqDCoMKgICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJURl9UWVBFX0VOQyhOQU1FX1RCRCwgQlRGX0lORk9f RU5DKEJURl9LSU5EX1NUUlVDVCwgMCwgMCksIDEpLAo+ID4gwqDCoMKgICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC8qIHR5cGVfdGFnICJrcHRyX3VudHJ1c3RlZCIgLT4gdGFyZ2V0ICov wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBbM10gKi8KPiA+IMKgwqDCoCArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCVEZfVFlQRV9UQUdfRU5DKE5BTUVfVEJELCAyKSwKPiA+ IMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiB0YXJnZXQgKiAoa3B0cikg Ki/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBbNF0gKi8KPiA+IMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBCVEZfUFRSX0VOQygzKSwKPiA+IMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAvKiBzdHJ1Y3Qgb3V0ZXIgeyB0YXJnZXQgKmtwOyBlbGVtIGl0ZW1zW05dOyB9ICov wqDCoMKgwqDCoMKgIC8qIFs1XSAqLwo+ID4gwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEJURl9UWVBFX0VOQyhOQU1FX1RCRCwgQlRGX0lORk9fRU5DKEJURl9LSU5EX1NUUlVD VCwgMCwgMiksIChOICogOHUgKyA4dSkpLAo+ID4gwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEJURl9NRU1CRVJfRU5DKE5BTUVfVEJELCA0LCAwKSzCoMKgwqDCoMKgwqDCoMKg IC8qIGtwwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+IMKgwqDCoCArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBCVEZfTUVNQkVSX0VOQyhOQU1FX1RCRCwgNiwgNjQpLMKgwqDCoMKgwqDC oMKgIC8qIGl0ZW1zwqDCoMKgwqDCoMKgwqAgKi8KPiA+IMKgwqDCoCArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBlbGVtW05dICovwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogWzZdICovCj4gPiDCoMKg wqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQlRGX1RZUEVfQVJSQVlfRU5DKDcsIDEs IE4pLAo+ID4gwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHN0cnVjdCBl bGVtIHsgdGFyZ2V0ICpmMC4uZjk7IH0gKi/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgLyogWzddICovCj4gPiDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg QlRGX1RZUEVfRU5DKE5BTUVfVEJELCBCVEZfSU5GT19FTkMoQlRGX0tJTkRfU1RSVUNULCAwLCAx MCksIDgpLAo+ID4gwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJURl9NRU1C RVJfRU5DKE5BTUVfVEJELCA0LCAwKSzCoMKgwqDCoMKgwqDCoMKgIC8qIGYwwqDCoMKgwqDCoMKg wqDCoMKgwqAgKi8KPiA+IMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCVEZf TUVNQkVSX0VOQyhOQU1FX1RCRCwgNCwgMCkswqDCoMKgwqDCoMKgwqDCoCAvKiBmMcKgwqDCoMKg wqDCoMKgwqDCoMKgICovCj4gPiDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg QlRGX01FTUJFUl9FTkMoTkFNRV9UQkQsIDQsIDApLMKgwqDCoMKgwqDCoMKgwqAgLyogZjLCoMKg wqDCoMKgwqDCoMKgwqDCoCAqLwo+ID4gwqDCoMKgICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEJURl9NRU1CRVJfRU5DKE5BTUVfVEJELCA0LCAwKSzCoMKgwqDCoMKgwqDCoMKgIC8qIGYz wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+IMKgwqDCoCArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBCVEZfTUVNQkVSX0VOQyhOQU1FX1RCRCwgNCwgMCkswqDCoMKgwqDCoMKgwqDCoCAv KiBmNMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gPiDCoMKgwqAgK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgQlRGX01FTUJFUl9FTkMoTkFNRV9UQkQsIDQsIDApLMKgwqDCoMKgwqDCoMKg wqAgLyogZjXCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ID4gwqDCoMKgICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEJURl9NRU1CRVJfRU5DKE5BTUVfVEJELCA0LCAwKSzCoMKgwqDCoMKg wqDCoMKgIC8qIGY2wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+IMKgwqDCoCArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBCVEZfTUVNQkVSX0VOQyhOQU1FX1RCRCwgNCwgMCkswqDCoMKg wqDCoMKgwqDCoCAvKiBmN8KgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gPiDCoMKgwqAgK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQlRGX01FTUJFUl9FTkMoTkFNRV9UQkQsIDQsIDApLMKg wqDCoMKgwqDCoMKgwqAgLyogZjjCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ID4gwqDCoMKgICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJURl9NRU1CRVJfRU5DKE5BTUVfVEJELCA0LCAw KSzCoMKgwqDCoMKgwqDCoMKgIC8qIGY5wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiA+IMKgwqDC oCArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCVEZfRU5EX1JBVywKPiA+IMKgwqDCoCAr wqDCoMKgwqDCoMKgIH0sCj4gPiDCoMKgwqAgK8KgwqDCoMKgwqDCoCBCVEZfU1RSX1NFQygiXDB0 YXJnZXRcMGtwdHJfdW50cnVzdGVkXDBvdXRlclwwa3BcMGl0ZW1zXDBlbGVtIgo+ID4gwqDCoMKg ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlwwZjBcMGYxXDBmMlwwZjNc MGY0XDBmNVwwZjZcMGY3XDBmOFwwZjkiKSwKPiA+IMKgwqDCoCArwqDCoMKgwqDCoMKgIC5idGZf bG9hZF9lcnIgPSB0cnVlLAo+ID4gwqDCoMKgICsjdW5kZWYgTgo+ID4gwqDCoMKgICt9LAo+ID4g wqDCoMKgICsKPiA+IMKgwqDCoMKgIH07IC8qIHN0cnVjdCBidGZfcmF3X3Rlc3QgcmF3X3Rlc3Rz W10gKi8KPiA+IMKgwqDCoCAKPiA+IMKgwqDCoMKgIHN0YXRpYyBjb25zdCBjaGFyICpnZXRfbmV4 dF9zdHIoY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKmVuZCkKPiA+IAo+ID4gSG93ZXZl ciwgYXMgZmFyIGFzIEkgdW5kZXJzdGFuZCB0aGUgcmVwcm8gaGl0cyBhbiBvdmVyZmxvdyBvbmx5 Cj4gPiBiZWNhdXNlIGBCVEZfVFlQRV9FTkMoTkFNRV9UQkQsIEJURl9JTkZPX0VOQyhCVEZfS0lO RF9TVFJVQ1QsIDAsIDEwKSwgOClgCj4gPiBsaWVzIGFib3V0IGBzdHJ1Y3QgZWxlbWAgc2l6ZS4g SXQgaXMgc3BlY2lmaWVkIGFzIDgsIHdoaWxlIGluIHJlYWxpdHkgaXQgaXMgODAuCj4gCj4gTm8g ZXhhY3RseS4gRXZlcnkgZmllbGQgaW4gdGhlIHN0cnVjdCBlbGVtIGhhcyB0aGUgc2FtZSBvZmZz ZXQgKDApLCBzbwo+IHRoZSBzaXplIG9mIHN0cnVjdCBlbGVtIGlzIGNvcnJlY3QsIGJ1dCB0aGUg ZmllbGQgZGVmaW5pdGlvbiBvZiBzdHJ1Y3QKPiBlbGVtIGlzIGluY29ycmVjdC4KCkhtLCByaWdo dCwgdGhhbmsgeW91LgpPaywgdGhpcyBtZWFucyB0aGF0IHRoZSBmaXggc3VnZ2VzdGVkIGJ5IFBh dWwgc2hvdWxkIGJlIGxhbmRlZAphbmQgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgaXNzdWVzIHdpdGgg QlRGIHZhbGlkYXRpb24uCihCdXQgaXQgd291bGQgYmUgbmljZSB0byBoYXZlIHNlbGZ0ZXN0IGlu Y2x1ZGVkIGluIHRoZSBwYXRjaHNldCkuCgo+ID4gVGhlIHNpemUgb2YgODAgd291bGQgbWFrZSBg c3RydWN0IG91dGVyYCB1bnJlcHJlc2VudGFibGUgaW4gQlRGLAo+ID4gYmVjYXVzZSAoTiAqIDgw ICsgOCkgZXhjZWVkcyB1MzIgcmFuZ2UsIGFuZCB0aGF0J3Mgd2hhdCBidGZfdHlwZS0+c2l6ZSB1 c2VzLgo+ID4gR2l2ZW4gdGhhdCBidGZfcmVwZWF0X2ZpZWxkcygpIG9ubHkgdHJhdmVyc2VzIHN0 cnVjdHMvYXJyYXlzIGJ1dCBub3QgdW5pb25zLAo+ID4gSSBzdXNwZWN0IHRoYXQgb3ZlcmZsb3cg d29uJ3QgaGFwcGVuIGluIGBmaWVsZF9jbnQgKiAocmVwZWF0X2NudCArIDEpYAo+ID4gaWYgcHJv cGVyIHNpemUgY2hlY2tzIHdlcmUgaW1wbGVtZW50ZWQgaW4gYnRmX3N0cnVjdF9jaGVja19tZXRh KCkgLyBidGZfc3RydWN0X3Jlc29sdmUoKS4KPiA+IEV2ZW4gbW9yZSwgSWYgSSBjaGFuZ2UgImtw dHJfdW50cnVzdGVkIiB0byAia3B0cl91bnRydXN0ZWQxMSIgdG8gYXZvaWQgZmllbGRzIHBhcnNp bmcsCj4gPiB0aGUga2VybmVsIGFjY2VwdHMgdGhlIGJvZ3VzIEJURi4KPiAKPiBidGZfc3RydWN0 X2NoZWNrX21ldGEgaGFzIGNoZWNrZWQgdGhlIHZhbGlkaXR5IG9mIGZpZWxkIG9mZnNldC4gSG93 ZXZlcgo+IGl0IHNlZW1zIHRoZSBjaGVja2luZyBpcyBsb29zZToKPiAKPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLyoKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq ICI+IiBpbnN0ZWFkIG9mICI+PSIgYmVjYXVzZSB0aGUgbGFzdCBtZW1iZXIgY291bGQgYmUKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqICJjaGFyIGFbMF07Igo+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGlmIChsYXN0X29mZnNldCA+IG9mZnNldCkgewo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnRmX3ZlcmlmaWVyX2xvZ19tZW1iZXIoZW52LCB0LCBt ZW1iZXIsCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiSW52YWxpZCBt ZW1iZXIKPiBiaXRzX29mZnNldCIpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0KPiAKPiBGb3Igc3RydWN0IGVsZW0sIGFsbCBmaWVsZHMgaGF2ZSB0aGUgb2Zmc2V0 IDAsIHNvIHRoZSBvZmZzZXQgY2hlY2tpbmcgaXMKPiBwYXNzZWQuIEZyb20gdGhlIGNvZGUgc25p cHBldCBhYm92ZSwgaXQgc2VlbXMgQlRGIHRyaWVzIHRvIHN1cHBvcnQgdGhlCj4gZm9sbG93aW5n IHN0cnVjdCBkZWZpbml0aW9uIGJlbG93LCBpcyBpdCBPSyB0byBvbmx5IHN1cHBvcnQgdGhlIGxh c3QKPiB6ZXJvLXNpemVkIGZpZWxkIGluIHN0cnVjdCBkZWZpbml0aW9uID8KPiAKPiBzdHJ1Y3Qg ZWxlbSB7Cj4gwqDCoMKgIGludCBhOwo+IMKgwqDCoCBjaGFyIGJbMF07Cj4gwqDCoMKgIGludCBj Owo+IMKgwqDCoCBjaGFyIGRbMF07Cj4gfQoKSSB0aGluayBDIHN0YW5kYXJkIG9ubHkgYWxsb3dz IHplcm8gc2l6ZWQgYXJyYXlzIHRvIGJlIHBsYWNlZCBhdCB0aGUKZW5kIG9mIHRoZSBzdHJ1Y3R1 cmUgZGVmaW5pdGlvbi4gQnJvYWRlciBxdWVzdGlvbiBpcyBpZiB3ZSB3YW50IEJURgp2YWxpZGF0 aW9uIHRvIHJlamVjdCBvdmVybGFwcGluZyBmaWVsZHMgb3V0c2lkZSBvZiB1bmlvbnMuCk5vdCBz dXJlIGlmIHRoZXJlIGlzIGEgcHJhY3RpY2FsIHJlYXNvbiB0byBkbyBzby4K