From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87605357A40 for ; Wed, 3 Jun 2026 14:55:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780498557; cv=none; b=YQE4LJhvYlthDwYWl59car11Tx+PQXVau7q47McxQ3A34rlXO1oc0gJ++Is0A25/X8PUxmjJQOEBGQ2kwEQw549rQjhVpVivq3HMZUpcRleLU5tNmzcTV+SUZgEqI/pzZISflA7HKZhVaa8/bpx03puDqIXU4zk7/lIn5aIzGbc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780498557; c=relaxed/simple; bh=BJNWCXv8Y5N5QNwrUy8FwdqJVx90XnMOk+XLzzny40A=; h=Message-ID:Subject:From:To:Date:In-Reply-To:References: Content-Type:MIME-Version; b=kHsK8i9U7WR+h6usP5jUtRLIdqufmlkAOsQvgzEfdZQtBV52hTDpe+9SMaWY3DRns9orMucHf7VC7mezidouLhNEfgTBvY++XzN0i6qUtv5UAeA+2fotSIM8MktO/XAHfB46dS/GUxEenD7Cm5U4wJngXMi3dyXIWFuP19azKVw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Efs4F87Q; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=m1Rl9Qdu; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Efs4F87Q"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="m1Rl9Qdu" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780498553; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BJNWCXv8Y5N5QNwrUy8FwdqJVx90XnMOk+XLzzny40A=; b=Efs4F87QtdfNSy+qO0WzWQyk58vm4VYHxHEGPQko54iv0PYtzTVlEX0Zt0qHnZNwrOAkpv wjXtxW+muVWR+5rhgHpJF2qYoWhCVMgwCa8p8uiXblK+pY+MtOSQh1fU1uyM6eLyvmkUy0 CBK6Oy3RCzkTcHJMONix/bIj+lHnZsM= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-96-ENmyTaY6OGal2UdKLCdpDA-1; Wed, 03 Jun 2026 10:55:52 -0400 X-MC-Unique: ENmyTaY6OGal2UdKLCdpDA-1 X-Mimecast-MFC-AGG-ID: ENmyTaY6OGal2UdKLCdpDA_1780498551 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-45ef2bd566bso3317602f8f.0 for ; Wed, 03 Jun 2026 07:55:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1780498551; x=1781103351; darn=vger.kernel.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:to:from:subject:message-id:from:to:cc:subject:date :message-id:reply-to; bh=BJNWCXv8Y5N5QNwrUy8FwdqJVx90XnMOk+XLzzny40A=; b=m1Rl9QduAfwwB4+0Fv+0ranhjx76I2QNCGFyh42eArt70ofNKYhrv5q4WsU66AAEVo 8ad8XJJc0bZx978B9pIxBDGdgAZHd9aROHjnSy+89Pl7m/ASd5WZ9DuTnemNZRiwQQG0 cIMcYeteYdqFkYpO6ZU2SRmXyoYrM4XnpTHIgCVyOCHtTeMqhx+igZ5NaHag7C8AP+6s xyyNSeTrpgNUURK0SSKlcFZ2ogSqwQMndQRfSkwdHFPX3YhPLPvH2HbkddEaQKO21L4b ygVu86pPwxF7qhEs6Xaod7aam37yqtrXEszCOZjrWwkhZc1AcC+LghZsPIy8NS1r/hbd DQuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780498551; x=1781103351; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:to:from:subject:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BJNWCXv8Y5N5QNwrUy8FwdqJVx90XnMOk+XLzzny40A=; b=A+y0OsIXetHcw8O0+DI6Uiwqb7riqQd0dd5dKJovG0uURy8Lh6I+t1bH1dI0GHS+0w thvc/EvDJCtuKR+Iw9+5r2U/qgCBmO8/ZfK2OXXKUwPMI7eJdAo5BuqDYROZToGjbsSG TpUiL5m4wgEXjTUhE2tKUKEKVevJmghHJCafPlaY4m9uJpACzuh2GHi/AeL9Tv3ZfRBY Zic42zqR44FMCmpvt5cE6fUr9NMdEC2r4aMVNkY4A8SAPkvwugSAXBVBaOhwPyd9NIvP CiciQa+JoRcsnmQLEmsQr/NFwdBMuAaiU1FvRe+XQN16MY7d8ekw2hK60d6oNH3cAMfk cSyg== X-Forwarded-Encrypted: i=1; AFNElJ+pg8lCfiAPHdf4qR+5xl8Th3DtFbtSGA3ka7Z9CZwcEbyxUUJEXPjZdKzhLwx2Fy0eSdSGTIegvfUuqdY=@vger.kernel.org X-Gm-Message-State: AOJu0YwzDZFu1/0zZ/vadlhnzuWQPxA4RWXeVBqyHHz+uaep86V2Zf33 rMa5ai+3tAUQ24Llz60wdJ23rkJJdmfTnhRFmE12oUv8RmZfVWB8unmX1Lb2t6LoKBoUyzrzF37 4Z2/8NvYUOVAU2R7uSBWk7fvron/HCFjjs3I+6NyHsPn8fb2hIxuD7sWZedvd4ZoDmQ== X-Gm-Gg: Acq92OEdQi/eXs4uR0LlzXa6PBCStfdAz8oQKXU7B1/33k4Z/GZiQPaJx13cuyZf3AR UTOP9jKc40DZQTwLnuM/VzkP2LHfPEyQ+eOo+VDjuEo9EomUwBszJ7RFdHHwoOOwcsaqzGBNCD0 LghFWpCP5O82R0cH/nsSgxA2fXVJVgrPFDIHFWR6gp2zQcqKkMjWtY5a7ZYF60416y1sKUVdRmk +6vCNU2UzDIhK/PlOFILcHQXo8W9qjUHcVqZZDSoe5IacoxgA0crsLDoPb0ysROeEG7RruTa2PC 9v5rwydcFGAKuYgPDjnK6EzODVUvquyvQ0fUgZEGvWq0AHz+z3Mn+/al6BvTGPzJv0l+M7g7/CZ wxK8eMniSk46HQM+co9KuxAAhsxnfx8q3W/i8 X-Received: by 2002:adf:e004:0:10b0:45e:f798:5531 with SMTP id ffacd0b85a97d-460218263a7mr4115394f8f.23.1780498551018; Wed, 03 Jun 2026 07:55:51 -0700 (PDT) X-Received: by 2002:adf:e004:0:10b0:45e:f798:5531 with SMTP id ffacd0b85a97d-460218263a7mr4115341f8f.23.1780498550514; Wed, 03 Jun 2026 07:55:50 -0700 (PDT) Received: from [192.168.1.167] ([185.168.96.228]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4601f2dc577sm7552084f8f.3.2026.06.03.07.55.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 Jun 2026 07:55:50 -0700 (PDT) Message-ID: <1d69cdc51e170c187deb0a7da18f9ad756a892f0.camel@redhat.com> Subject: Re: [PATCH v2 03/13] verification/rvgen: Implement state and transition parser based on Lark From: Gabriele Monaco To: Nam Cao , Wander Lairson Costa , Steven Rostedt , linux-trace-kernel@vger.kernel.org, linux-kernel@vger.kernel.org Date: Wed, 03 Jun 2026 16:55:49 +0200 In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.60.1 (3.60.1-1.fc44) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 T24gVGh1LCAyMDI2LTA1LTI4IGF0IDEwOjI3ICswMjAwLCBOYW0gQ2FvIHdyb3RlOgo+IFRoZSBE T1QgcGFyc2luZyBzY3JpcHRzIGRpcmVjdGx5IHBhcnNlIHRoZSByYXcgdGV4dCBhbmQgdGhleSBh cmUKPiBxdWl0ZQo+IGZyYWdpbGUuIElmIHRoZSBpbnB1dCBkb3QgZmlsZXMnIGZvcm1hdHMgYXJl IHNsaWdodGx5IGNoYW5nZWQgKGZvcgo+IGluc3RhbmNlLCBieSBicmVha2luZyBsb25nIHNvbWUg bGluZXMgd2hpY2ggaXMgYWxsb3dlZCBieSB0aGUgRE9UCj4gbGFuZ3VhZ2UpLCB0aGUgc2NyaXB0 cyB3b3VsZCBmYWlsLgo+IAo+IFByZXBhcmUgdG8gbW92ZSBhd2F5IGZyb20gdGhlIHJhdyB0ZXh0 IHByb2Nlc3NpbmcsIGltcGxlbWVudCBwYXJzZXJzCj4gYmFzZWQKPiBvbiBMYXJrIHdoaWNoIHBh cnNlIHN0YXRlcywgdHJhbnNpdGlvbnMgYW5kIGNvbnN0cmFpbnRzLgo+IAo+IFRoZSBwYXJzZSBy ZXN1bHRzIGFyZSBub3QgdXNlZCB5ZXQuIFRoZSBleGlzdGluZyBzY3JpcHRzIHdpbGwgYmUKPiBj b252ZXJ0ZWQKPiBvbmUgYnkgb25lIHRvIHRoZW0sIGFuZCB0aGUgcmF3IHRleHQgcHJvY2Vzc2lu ZyB3aWxsIGV2ZW50dWFsbHkgYmUKPiByZW1vdmVkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IE5hbSBD YW8gPG5hbWNhb0BsaW51dHJvbml4LmRlPgoKUmV2aWV3ZWQtYnk6IEdhYnJpZWxlIE1vbmFjbyA8 Z21vbmFjb0ByZWRoYXQuY29tPgoKPiAtLS0KPiB2MjoKPiDCoCAtIGZpeHVwIGd1YXJkIGdyYW1t YXIgW0dhYnJpZWxlXQo+IMKgIC0gZml4dXAgaW5jb25zaXN0ZW50IHR5cGVzIGluIGEgbGlzdCBb V2FuZGVyXQo+IMKgIC0gY29tcGlsaW5nIHRoZSBwYXJzZXJzIG9ubHkgb25jZSB0byBhdm9pZCBv dmVyaGVhZCBbU2FzaGlrb10KPiDCoCAtIGZpeCB1cCB0aGUgc2lnbmF0dXJlIG9mIFN0YXRlLl9f aW5pdF9fKCkgW1Nhc2hpa29dCj4gwqAgLSBncmFjZWZ1bGx5IGhhbmRsZSBub2RlIHN0YXRlbWVu dCB3aXRob3V0IGxhYmVsIFtTYXNoaWtvXQo+IMKgIC0gbGFyayBwYXJzZSBleGNlcHRpb24gaGFu ZGxpbmcKPiAtLS0KPiDCoHRvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9ydmdlbi9hdXRvbWF0YS5w eSB8IDIxNgo+ICsrKysrKysrKysrKysrKysrKysrKwo+IMKgMSBmaWxlIGNoYW5nZWQsIDIxNiBp bnNlcnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL3ZlcmlmaWNhdGlvbi9ydmdlbi9y dmdlbi9hdXRvbWF0YS5weQo+IGIvdG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2F1dG9t YXRhLnB5Cj4gaW5kZXggODY0OWQ5ODIzODNkLi5iODYyNzVlN2JmMjggMTAwNjQ0Cj4gLS0tIGEv dG9vbHMvdmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2F1dG9tYXRhLnB5Cj4gKysrIGIvdG9vbHMv dmVyaWZpY2F0aW9uL3J2Z2VuL3J2Z2VuL2F1dG9tYXRhLnB5Cj4gQEAgLTE5OCw2ICsxOTgsMTY0 IEBAIGNsYXNzIFBhcnNlVHJlZToKPiDCoMKgwqDCoMKgwqDCoMKgIHNlbGYubm9kZV9hdHRycyA9 IGF0dHJpYnV0ZXNfcGFyc2VyLm5vZGVfYXR0cnMKPiDCoMKgwqDCoMKgwqDCoMKgIHNlbGYuZWRn ZV9hdHRycyA9IGF0dHJpYnV0ZXNfcGFyc2VyLmVkZ2VfYXR0cnMKPiDCoAo+ICtjbGFzcyBDb25z dHJhaW50Q29uZGl0aW9uOgo+ICvCoMKgwqAgZGVmIF9faW5pdF9fKHNlbGYsIGVudjogc3RyLCBv cDogc3RyLCB2YWw6IHN0ciwgdW5pdD1Ob25lKToKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5lbnYg PSBlbnYKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5vcCA9IG9wCj4gK8KgwqDCoMKgwqDCoMKgIHNl bGYudmFsID0gdmFsCj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYudW5pdCA9IHVuaXQKPiArwqDCoMKg wqDCoMKgwqAgaWYgdW5pdCBpcyBOb25lOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICMgdHJ5 IHRvIGluZmVyIHVuaXQgZnJvbSBjb25zdGFudHMgb3IgcGFyYW1ldGVycwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHZhbF9mb3JfdW5pdCA9IHZhbC5sb3dlcigpLnJlcGxhY2UoIigpIiwgIiIp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgdmFsX2Zvcl91bml0LmVuZHN3aXRoKCJfbnMi KToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGYudW5pdCA9ICJucyIKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiB2YWxfZm9yX3VuaXQuZW5kc3dpdGgoIl9qaWZmaWVz Iik6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxmLnVuaXQgPSAiaiIKPiAr Cj4gK2NsYXNzIENvbnN0cmFpbnRSdWxlOgo+ICvCoMKgwqAgZ3JhbW1hciA9IHInJycKPiArwqDC oMKgwqDCoMKgwqAgcnVsZTogY29uZGl0aW9uIChPUCBjb25kaXRpb24pKgo+ICsKPiArwqDCoMKg wqDCoMKgwqAgT1A6ICImJiIgfCAifHwiCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBjb25kaXRpb246 IEVOViBDTVBfT1AgVkFMIFVOSVQ/Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBFTlY6IENOQU1FCj4g Kwo+ICvCoMKgwqDCoMKgwqDCoCBDTVBfT1A6ICI9PSIgfCAiPD0iIHwgIjwiIHwgIj49IiB8ICI+ Igo+ICsKPiArwqDCoMKgwqDCoMKgwqAgVkFMOiAvWzAtOV0rLwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoCB8IC9bQS1aX10rXChcKS8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAvW0EtWl9dKy8K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAvW2Etel9dK1woXCkvCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIHwgL1thLXpfXSsvCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBVTklUOiAibnMiIHwgInVz IiB8ICJtcyIgfCAicyIKPiArwqDCoMKgICcnJwo+ICsKPiArwqDCoMKgIGRlZiBfX2luaXRfXyhz ZWxmLCBjOiBDb25zdHJhaW50Q29uZGl0aW9uKToKPiArwqDCoMKgwqDCoMKgwqAgJycnCj4gK8Kg wqDCoMKgwqDCoMKgIEEgbGlzdCBvZiBwYWlycyBvZgo+ICvCoMKgwqDCoMKgwqDCoMKgwqAgLSB0 aGUgY29uZGl0aW9uIChlLmcuIGlzX2NvbnN0cl9kbCA9PSAxKQo+ICvCoMKgwqDCoMKgwqDCoMKg wqAgLSB0aGUgbG9naWNhbCBvcGVyYXRvciAoInx8IiBvciAiJiYiKSBjb21iaW5pbmcgdGhpcwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbmRpdGlvbiB3aXRoIHRoZSBuZXh0IG9uZSBpZiBp dCBleGlzdHMsIG90aGVyd2lzZSBOb25lCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBUT0RPOiBQZXJo YXBzIHVzZSBhbiBhYnN0cmFjdCBzeW50YXggdHJlZSBpbnN0ZWFkLCBiZWNhdXNlCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRoaXMgcmVwcmVzZW50YXRpb24gY2Fubm90IGNhcHR1cmUg cHJlY2VkZW5jZQo+ICvCoMKgwqDCoMKgwqDCoCAnJycKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5y dWxlcyA9IFtbYywgTm9uZV1dCj4gKwo+ICvCoMKgwqAgZGVmIGNoYWluKHNlbGYsIG9wOiBzdHIs IGM6IENvbnN0cmFpbnRDb25kaXRpb24pOgo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLnJ1bGVzWy0x XVsxXSA9IG9wCj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYucnVsZXMuYXBwZW5kKFtjLCBOb25lXSkK PiArCj4gK2NsYXNzIENvbnN0cmFpbnRSZXNldDoKPiArwqDCoMKgIGRlZiBfX2luaXRfXyhzZWxm LCBlbnYpOgo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLmVudiA9IGVudgo+ICsKPiArY2xhc3MgU3Rh dGVMYWJlbFBhcnNlcjoKPiArwqDCoMKgIGdyYW1tYXIgPSByJycnCj4gK8KgwqDCoCBsYWJlbDog Q05BTUUgKCJcXG4iIGNvbmRpdGlvbik/Cj4gKwo+ICvCoMKgwqAgJWltcG9ydCBjb21tb24uQ05B TUUKPiArwqDCoMKgICVpbXBvcnQgY29tbW9uLldTCj4gK8KgwqDCoCAlaWdub3JlIFdTCj4gK8Kg wqDCoCAnJycgKyBDb25zdHJhaW50UnVsZS5ncmFtbWFyCj4gKwo+ICvCoMKgwqAgcGFyc2VyID0g bGFyay5MYXJrKGdyYW1tYXIsIHBhcnNlcj0nbGFscicsIHN0YXJ0PSJsYWJlbCIpCj4gKwo+ICvC oMKgwqAgZGVmIF9faW5pdF9fKHNlbGYsIGxhYmVsOiBzdHIpOgo+ICvCoMKgwqDCoMKgwqDCoCB0 cnk6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHJlZSA9IHNlbGYucGFyc2VyLnBhcnNlKGxh YmVsKQo+ICvCoMKgwqDCoMKgwqDCoCBleGNlcHQgbGFyay5leGNlcHRpb25zLlVuZXhwZWN0ZWRJ bnB1dCBhcyBleGM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmFpc2UoQXV0b21hdGFFcnJv cihmIlVucmVjb2duaXNlZCBzdGF0ZQo+IFwie2xhYmVsfVwiXG57ZXhjfSIpKQo+ICsKPiArwqDC oMKgwqDCoMKgwqAgc2VsZi5zdGF0ZSA9IHRyZWUuY2hpbGRyZW5bMF0KPiArwqDCoMKgwqDCoMKg wqAgc2VsZi5jb25zdHJhaW50ID0gTm9uZQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgbGVuKHRy ZWUuY2hpbGRyZW4pID09IDI6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5jb25zdHJh aW50ID0KPiBDb25zdHJhaW50Q29uZGl0aW9uKCp0cmVlLmNoaWxkcmVuWzFdLmNoaWxkcmVuKQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIHNlbGYuY29uc3RyYWludC5vcCBub3QgaW4gKCI8 IiwgIjw9Iik6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYWlzZSBBdXRvbWF0 YUVycm9yKCJTdGF0ZSBjb25zdHJhaW50cyBtdXN0IGJlIGNsb2NrCj4gZXhwaXJhdGlvbnMgbGlr ZSIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBmIiBjbGs8TiAoe2xhYmVsfSkiKQo+ICsKPiArY2xhc3MgRXZl bnRMYWJlbFBhcnNlcjoKPiArwqDCoMKgIGdyYW1tYXIgPSByJycnCj4gK8KgwqDCoCBldmVudHM6 IGV2ZW50ICgiXFxuIiBldmVudCkqCj4gKwo+ICvCoMKgwqAgZXZlbnQ6IG5hbWUgKCI7IiBndWFy ZCk/Cj4gKwo+ICvCoMKgwqAgZ3VhcmQ6IHJlc2V0Cj4gK8KgwqDCoMKgwqDCoMKgwqAgfCBydWxl Cj4gK8KgwqDCoMKgwqDCoMKgwqAgfCBydWxlICI7IiByZXNldAo+ICvCoMKgwqDCoMKgwqDCoMKg IHwgcmVzZXQgIjsiIHJ1bGUKPiArCj4gK8KgwqDCoCBuYW1lOiBDTkFNRQo+ICsKPiArwqDCoMKg IHJlc2V0OiAicmVzZXQiICIoIiBFTlYgIikiCj4gKwo+ICvCoMKgwqAgJWltcG9ydCBjb21tb24u Q05BTUUKPiArwqDCoMKgICVpbXBvcnQgY29tbW9uLldTCj4gK8KgwqDCoCAlaWdub3JlIFdTCj4g K8KgwqDCoCAnJycgKyBDb25zdHJhaW50UnVsZS5ncmFtbWFyCj4gKwo+ICvCoMKgwqAgcGFyc2Vy ID0gbGFyay5MYXJrKGdyYW1tYXIsIHBhcnNlcj0nbGFscicsIHN0YXJ0PSJldmVudHMiKQo+ICsK PiArwqDCoMKgIGNsYXNzIEdldEV2ZW50cyhsYXJrLnZpc2l0b3JzLlRyYW5zZm9ybWVyKToKPiAr wqDCoMKgwqDCoMKgwqAgZGVmIGd1YXJkKHNlbGYsIGFyZ3MpOgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJlc2V0ID0gTm9uZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJ1bGUgPSBOb25l Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm9yIGFyZyBpbiBhcmdzOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgYXJnLmRhdGEgPT0gInJlc2V0IjoKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVzZXQgPSBDb25zdHJhaW50UmVzZXQoYXJn LmNoaWxkcmVuWzBdKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxpZiBhcmcu ZGF0YSA9PSAicnVsZSI6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbmRpdGlvbnMgPSBhcmcuY2hpbGRyZW4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcnVsZSA9IENvbnN0cmFpbnRSdWxlKGNvbmRpdGlvbnNbMF0pCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciBpIGluIHJhbmdlKDEsIGxlbihj b25kaXRpb25zKSwgMik6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcnVsZS5jaGFpbihjb25kaXRpb25zW2ldLCBjb25kaXRpb25zW2kgKyAxXSkKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmVzZXQsIHJ1bGUKPiArCj4gK8KgwqDCoMKg wqDCoMKgIGRlZiBPUChzZWxmLCBhcmdzKToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gYXJncwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgZGVmIGNvbmRpdGlvbihzZWxmLCBhcmdzKToK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQ29uc3RyYWludENvbmRpdGlvbigqYXJn cykKPiArCj4gK8KgwqDCoMKgwqDCoMKgIGRlZiBldmVudChzZWxmLCBhcmdzKToKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhc3NlcnQobGVuKGFyZ3MpIDw9IDIpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbmFtZSA9IGFyZ3NbMF0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydWxlLCBy ZXNldCA9IE5vbmUsIE5vbmUKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBsZW4oYXJncykg PT0gMjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlc2V0LCBydWxlID0gYXJn c1sxXQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBuYW1lLCByZXNldCwgcnVsZQo+ ICsKPiArwqDCoMKgwqDCoMKgwqAgZGVmIGV2ZW50cyhzZWxmLCBhcmdzKToKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gYXJncwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgZGVmIG5hbWUo c2VsZiwgYXJncyk6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGFyZ3NbMF0KPiAr Cj4gK8KgwqDCoCBkZWYgX19pbml0X18oc2VsZiwgbGFiZWw6IHN0cik6Cj4gK8KgwqDCoMKgwqDC oMKgIHRyeToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0cmVlID0gc2VsZi5wYXJzZXIucGFy c2UobGFiZWwpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5ldmVudHMgPSBzZWxmLkdl dEV2ZW50cygpLnRyYW5zZm9ybSh0cmVlKQo+ICvCoMKgwqDCoMKgwqDCoCBleGNlcHQgbGFyay5l eGNlcHRpb25zLlVuZXhwZWN0ZWRJbnB1dCBhcyBleGM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmFpc2UoQXV0b21hdGFFcnJvcihmIlVucmVjb2duaXNlZCBldmVudAo+IFwie2xhYmVsfVwi XG57ZXhjfSIpKQo+ICsKPiArY2xhc3MgVHJhbnNpdGlvbjoKPiArwqDCoMKgIGRlZiBfX2luaXRf XyhzZWxmLCBzcmM6IHN0ciwgZHN0OiBzdHIsIGV2ZW50OiBzdHIsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJlc2V0OiBDb25zdHJhaW50UmVzZXQsIHJ1bGU6IENvbnN0cmFp bnRSdWxlKToKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5zcmMgPSBzcmMKPiArwqDCoMKgwqDCoMKg wqAgc2VsZi5kc3QgPSBkc3QKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5ldmVudCA9IGV2ZW50Cj4g K8KgwqDCoMKgwqDCoMKgIHNlbGYucnVsZSA9IHJ1bGUKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5y ZXNldCA9IHJlc2V0Cj4gKwo+ICtjbGFzcyBTdGF0ZToKPiArwqDCoMKgIGRlZiBfX2luaXRfXyhz ZWxmLCBuYW1lOiBzdHIsIGludjogQ29uc3RyYWludENvbmRpdGlvbik6Cj4gK8KgwqDCoMKgwqDC oMKgIHNlbGYubmFtZSA9IG5hbWUKPiArwqDCoMKgwqDCoMKgwqAgc2VsZi5pbnYgPSBpbnYKPiAr Cj4gwqBjbGFzcyBfQ29uc3RyYWludEtleToKPiDCoMKgwqDCoCAiIiJCYXNlIGNsYXNzIGZvciBj b25zdHJhaW50IGtleXMuIiIiCj4gwqAKPiBAQCAtMjUyLDYgKzQxMCw4IEBAIGNsYXNzIEF1dG9t YXRhOgo+IMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5uYW1lID0gbW9kZWxfbmFtZSBvciBzZWxmLl9f Z2V0X21vZGVsX25hbWUoKQo+IMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5fX2RvdF9saW5lcyA9IHNl bGYuX19vcGVuX2RvdCgpCj4gwqDCoMKgwqDCoMKgwqDCoCBzZWxmLl9fcGFyc2VfdHJlZSA9IFBh cnNlVHJlZShmaWxlX3BhdGgpCj4gK8KgwqDCoMKgwqDCoMKgIHNlbGYudHJhbnNpdGlvbnMgPSBz ZWxmLl9fcGFyc2VfdHJhbnNpdGlvbnMoKQo+ICvCoMKgwqDCoMKgwqDCoCBzZWxmLl9zdGF0ZXMs IHNlbGYuX2luaXRpYWxfc3RhdGUsIHNlbGYuX2ZpbmFsX3N0YXRlcyA9Cj4gc2VsZi5fX3BhcnNl X3N0YXRlcygpCj4gwqDCoMKgwqDCoMKgwqDCoCBzZWxmLnN0YXRlcywgc2VsZi5pbml0aWFsX3N0 YXRlLCBzZWxmLmZpbmFsX3N0YXRlcyA9Cj4gc2VsZi5fX2dldF9zdGF0ZV92YXJpYWJsZXMoKQo+ IMKgwqDCoMKgwqDCoMKgwqAgc2VsZi5lbnZfdHlwZXMgPSB7fQo+IMKgwqDCoMKgwqDCoMKgwqAg c2VsZi5lbnZfc3RvcmVkID0gc2V0KCkKPiBAQCAtMzI3LDYgKzQ4Nyw2MiBAQCBjbGFzcyBBdXRv bWF0YToKPiDCoAo+IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGN1cnNvcgo+IMKgCj4gK8KgwqDC oCBkZWYgX19wYXJzZV90cmFuc2l0aW9ucyhzZWxmKToKPiArwqDCoMKgwqDCoMKgwqAgdHJhbnNp dGlvbnMgPSBbXQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgZm9yIGVkZ2UgaW4gc2VsZi5fX3BhcnNl X3RyZWUuZWRnZXM6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXR0ciA9IHNlbGYuX19wYXJz ZV90cmVlLmVkZ2VfYXR0cnMuZ2V0KGVkZ2UpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg bm90IGF0dHI6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZQo+ICsK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsYWJlbCA9IGF0dHIuZ2V0KCJsYWJlbCIpCj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNyYywgZHN0ID0gZWRnZQo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBwYXJzZXIgPSBFdmVudExhYmVsUGFyc2VyKGxhYmVsKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGZvciBldmVudCwgcmVzZXQsIHJ1bGUgaW4gcGFyc2VyLmV2ZW50czoK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRyYW5zaXRpb25zLmFwcGVuZChUcmFu c2l0aW9uKHNyYywgZHN0LCBldmVudCwKPiByZXNldCwgcnVsZSkpCj4gKwo+ICvCoMKgwqDCoMKg wqDCoCB0cmFuc2l0aW9ucy5zb3J0KGtleT1sYW1iZGEgdCA6ICh0LnNyYywgdC5ldmVudCkpCj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiB0cmFuc2l0aW9ucwo+ICsKPiArwqDCoMKgIGRlZiBfX3Bh cnNlX3N0YXRlcyhzZWxmKToKPiArwqDCoMKgwqDCoMKgwqAgaW5pdGlhbF9zdGF0ZSA9ICIiCj4g K8KgwqDCoMKgwqDCoMKgIHN0YXRlcyA9IFtdCj4gK8KgwqDCoMKgwqDCoMKgIGZpbmFsX3N0YXRl cyA9IFtdCj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBmb3Igbm9kZSBpbiBzZWxmLl9fcGFyc2VfdHJl ZS5ub2RlczoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdHRyID0gc2VsZi5fX3BhcnNlX3Ry ZWUubm9kZV9hdHRyc1tub2RlXQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxhYmVsID0gYXR0 ci5nZXQoImxhYmVsIikKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgbm9kZS5zdGFy dHN3aXRoKEF1dG9tYXRhLmluaXRfbWFya2VyKToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGluaXRpYWxfc3RhdGUgPSBub2RlW2xlbihBdXRvbWF0YS5pbml0X21hcmtlcik6XQo+ ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiBub3QgbGFiZWw6Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZQo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwYXJzZXIgPSBTdGF0ZUxhYmVsUGFyc2VyKGxhYmVsKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHN0YXRlID0gU3RhdGUocGFyc2VyLnN0YXRlLCBwYXJzZXIuY29uc3RyYWludCkKPiArCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RhdGVzLmFwcGVuZChzdGF0ZSkKPiArCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc2hhcGUgPSBhdHRyLmdldCgic2hhcGUiKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIHNoYXBlIGluICgiZG91YmxlY2lyY2xlIiwgImVsbGlwc2UiKToKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZpbmFsX3N0YXRlcy5hcHBlbmQoc3RhdGUp Cj4gKwo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaW5pdGlhbF9zdGF0ZSA9IG5leHQoKHMgZm9yIHMg aW4gc3RhdGVzIGlmIHMubmFtZSA9PQo+IGluaXRpYWxfc3RhdGUpLCBOb25lKQo+ICvCoMKgwqDC oMKgwqDCoCBpZiBub3QgaW5pdGlhbF9zdGF0ZToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy YWlzZSBBdXRvbWF0YUVycm9yKCJUaGUgYXV0b21hdG9uIGRvZXNuJ3QgaGF2ZSBhbgo+IGluaXRp YWwgc3RhdGUiKQo+ICsKPiArwqDCoMKgwqDCoMKgwqAgaWYgbm90IGZpbmFsX3N0YXRlczoKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmaW5hbF9zdGF0ZXMuYXBwZW5kKGluaXRpYWxfc3RhdGUp Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoCBzdGF0ZXMucmVtb3ZlKGluaXRpYWxfc3RhdGUpCj4gK8Kg wqDCoMKgwqDCoMKgIHN0YXRlcy5zb3J0KGtleT1sYW1iZGEgcyA6IHMubmFtZSkKPiArwqDCoMKg wqDCoMKgwqAgc3RhdGVzLmluc2VydCgwLCBpbml0aWFsX3N0YXRlKQo+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gc3RhdGVzLCBpbml0aWFsX3N0YXRlLCBmaW5hbF9zdGF0ZXMKPiArCj4gwqDCoMKg wqAgZGVmIF9fZ2V0X3N0YXRlX3ZhcmlhYmxlcyhzZWxmKSAtPiB0dXBsZVtsaXN0W3N0cl0sIHN0 ciwKPiBsaXN0W3N0cl1dOgo+IMKgwqDCoMKgwqDCoMKgwqAgIyB3YWl0IGZvciBub2RlIGRlY2xh cmF0aW9uCj4gwqDCoMKgwqDCoMKgwqDCoCBzdGF0ZXMgPSBbXQo=