Received: by 2002:a05:7412:3784:b0:e2:908c:2ebd with SMTP id jk4csp896399rdb; Sun, 1 Oct 2023 09:56:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFOz4Jk71A35c248RJBqHoAo3rG0c9bkzdtHkZfPdNmiJqYp6BvXIlU1xSmfpLbknjmDCAG X-Received: by 2002:a17:90b:190f:b0:279:5a3:d5f with SMTP id mp15-20020a17090b190f00b0027905a30d5fmr15642857pjb.9.1696179413268; Sun, 01 Oct 2023 09:56:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696179413; cv=none; d=google.com; s=arc-20160816; b=ZW9PR8Q71YXtpg+8g+ba0esyQkBVVeBRlO7dX+AzS7UBTX6GgSWpNrdrT7U5V3BFfT waTAFqvE17Y0KeZMXUnnmQJfR5fc+sLDcRVa4j6T/RMbKd0nLp2nLHEm0OKiG+Fmch2Y XWEfA+N9wZuL+5jQuF71tK12AH+fifLPXOe6RPqoethfeEyzMjwu+mzVffPgnGpZF1KL Optp1WscjWLsjZCUUCYrk9wh4jPl6vCALsB/e9J4IZXhQjQppunZaM5UXjVT6z1FBFIr IUhoqNMuHT1W27vckytOjx6xAAwDyaTuTSTk0FhQBvTTqDz6bb+7NY1MuyBJjWJxu9JM 8MVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:references:in-reply-to:date:cc:to:from :subject:message-id; bh=YO8NAHUoEe2czxoQNgYwZyhqBhcbao4ZNcpGqDmDcLY=; fh=Wtd5bsEgVdHxU/N67F/znfyNlqvceqR3FYJo8SHgFeQ=; b=Fz/+nJnAhJ9bVzjsoscRYCmNkoh/aexFl+yAr5PDRon6E2KQnRBkeCfdODIKa7RTgD lDH6GzV0xYRx9fqVj72XBjJRhRAiHSEFrezLreb2U1mfRxtogb0izwPFjLGnIi4Wf8cJ oEBEY/IOoSjct8UW2OJXSlhsojqvCzXOr8TdVVHhRrrdgw6Y3PkKSLPh6nb4ixbVh90l dO6VrtnZjmqDm6RV36f1o7GqZYTiecew9iHyLCd9MwGKQjUiRHn4INPW3F20RfzV9YOT QB5roOnv5iy/0ibOcvjtEpHIhtGq3maHwdqS7KhDNwFc+5XeW6cGl7HiZvGS7mllZPc6 /zfg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id p14-20020a17090ad30e00b002680abc3699si5697254pju.115.2023.10.01.09.56.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 01 Oct 2023 09:56:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 0A34780BF1C3; Sun, 1 Oct 2023 09:56:50 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235209AbjJAQ4a (ORCPT + 99 others); Sun, 1 Oct 2023 12:56:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235093AbjJAQ42 (ORCPT ); Sun, 1 Oct 2023 12:56:28 -0400 Received: from smtprelay08.ispgateway.de (smtprelay08.ispgateway.de [134.119.228.110]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7944FC9; Sun, 1 Oct 2023 09:56:25 -0700 (PDT) Received: from [92.206.139.21] (helo=note-book.lan) by smtprelay08.ispgateway.de with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qmzjx-0001tl-I7; Sun, 01 Oct 2023 18:56:21 +0200 Message-ID: <250d0e681e7bbb750464338fb3a1a4a3199ce6ef.camel@apitzsch.eu> Subject: Re: [PATCH v5 2/2] leds: add ktd202x driver From: =?ISO-8859-1?Q?Andr=E9?= Apitzsch To: Christophe JAILLET Cc: conor+dt@kernel.org, devicetree@vger.kernel.org, krzysztof.kozlowski+dt@linaro.org, lee@kernel.org, linux-kernel@vger.kernel.org, linux-leds@vger.kernel.org, pavel@ucw.cz, phone-devel@vger.kernel.org, robh+dt@kernel.org, u.kleine-koenig@pengutronix.de, ~postmarketos/upstreaming@lists.sr.ht Date: Sun, 01 Oct 2023 18:56:20 +0200 In-Reply-To: References: <20231001-ktd202x-v5-0-f544a1d0510d@apitzsch.eu> <20231001-ktd202x-v5-2-f544a1d0510d@apitzsch.eu> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.48.4 MIME-Version: 1.0 X-Df-Sender: YW5kcmVAYXBpdHpzY2guZXU= X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Sun, 01 Oct 2023 09:56:50 -0700 (PDT) SGkgQ2hyaXN0b3BoZSwKCkFtIFNvbm50YWcsIGRlbSAwMS4xMC4yMDIzIHVtIDE3OjE1ICswMjAw IHNjaHJpZWIgQ2hyaXN0b3BoZSBKQUlMTEVUOgo+IExlIDAxLzEwLzIwMjMgw6AgMTU6NTIsIEFu ZHLDqSBBcGl0enNjaCBhIMOpY3JpdMKgOgo+ID4gVGhpcyBjb21taXQgYWRkcyBzdXBwb3J0IGZv ciBLaW5ldGljIEtURDIwMjYvNyBSR0IvV2hpdGUgTEVECj4gPiBkcml2ZXIuCj4gPiAKPiA+IFNp Z25lZC1vZmYtYnk6IEFuZHLDqSBBcGl0enNjaAo+ID4gPGdpdC1BdFJLc3pKMW9HUHNxMzVwV1NO c3pBQHB1YmxpYy5nbWFuZS5vcmc+Cj4gCj4gLi4uCj4gCj4gPiArc3RhdGljIGludCBrdGQyMDJ4 X3NldHVwX2xlZF9yZ2Ioc3RydWN0IGt0ZDIwMnggKmNoaXAsIHN0cnVjdAo+ID4gZGV2aWNlX25v ZGUgKm5wLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBrdGQyMDJ4X2xlZCAqbGVkLCBzdHJ1Y3QKPiA+IGxl ZF9pbml0X2RhdGEgKmluaXRfZGF0YSkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg bGVkX2NsYXNzZGV2ICpjZGV2Owo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9ub2Rl ICpjaGlsZDsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtY19zdWJsZWQgKmluZm87Cj4gPiAr wqDCoMKgwqDCoMKgwqBpbnQgbnVtX2NoYW5uZWxzOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IGkg PSAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIHJlZzsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBy ZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBudW1fY2hhbm5lbHMgPSBvZl9nZXRfYXZhaWxh YmxlX2NoaWxkX2NvdW50KG5wKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghbnVtX2NoYW5uZWxz IHx8IG51bV9jaGFubmVscyA+IGNoaXAtPm51bV9sZWRzKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaW5m byA9IGRldm1fa2NhbGxvYyhjaGlwLT5kZXYsIG51bV9jaGFubmVscywgc2l6ZW9mKCppbmZvKSwK PiA+IEdGUF9LRVJORUwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFpbmZvKQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgZm9yX2VhY2hfYXZhaWxhYmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIG1vbm9fY29sb3IgPSAwOwo+IAo+ IFVuLW5lZWRlZCBpbml0Lgo+IEFuZCwgd2h5IGlzIGl0IGRlZmluZWQgaGVyZSwgd2hpbGUgcmVn IGlzIGRlZmluZWQgb3V0LXNpZGUgdGhlIGxvb3A/CgpJJ2xsIG1vdmUgaXQgb3V0LXNpZGUgdGhl IGxvb3AgKHdpdGhvdXQgaW5pdGlhbGl6YXRpb24pLgoKPiAKPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgInJl ZyIsICZyZWcpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgIT0g MCB8fCByZWcgPj0gY2hpcC0+bnVtX2xlZHMpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihjaGlwLT5kZXYsICJpbnZhbGlkICdyZWcn IG9mCj4gPiAlcE9GblxuIiwgbnApOwo+IAo+IE1vc3Npbmcgb2Zfbm9kZV9wdXQobnApOz8KCkl0 IHNob3VsZG4ndCBiZSBuZWVkZWQgaGVyZSBpZiBoYW5kbGVkIGluIHRoZSBjYWxsaW5nIGZ1bmN0 aW9uLCByaWdodD8gCgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJjb2xvciIsCj4gPiAmbW9ub19jb2xvcik7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FSU5W QUwpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2VycihjaGlwLT5kZXYsICJmYWlsZWQgdG8gcGFyc2UgJ2NvbG9yJwo+ID4gb2YgJXBPRlxu IiwgbnApOwo+IAo+IE1vc3Npbmcgb2Zfbm9kZV9wdXQobnApOz8KPiAKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaW5mb1tpXS5jb2xvcl9pbmRleCA9IG1vbm9fY29sb3I7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW5mb1tpXS5jaGFubmVsID0gcmVnOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluZm9baV0uaW50ZW5zaXR5ID0gS1REMjAyWF9NQVhf QlJJR0hUTkVTUzsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpKys7Cj4gPiAr wqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBsZWQtPm1jZGV2LnN1Ymxl ZF9pbmZvID0gaW5mbzsKPiA+ICvCoMKgwqDCoMKgwqDCoGxlZC0+bWNkZXYubnVtX2NvbG9ycyA9 IG51bV9jaGFubmVsczsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGNkZXYgPSAmbGVkLT5tY2Rl di5sZWRfY2RldjsKPiA+ICvCoMKgwqDCoMKgwqDCoGNkZXYtPmJyaWdodG5lc3Nfc2V0X2Jsb2Nr aW5nID0ga3RkMjAyeF9icmlnaHRuZXNzX21jX3NldDsKPiA+ICvCoMKgwqDCoMKgwqDCoGNkZXYt PmJsaW5rX3NldCA9IGt0ZDIwMnhfYmxpbmtfbWNfc2V0Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIGRldm1fbGVkX2NsYXNzZGV2X211bHRpY29sb3JfcmVnaXN0ZXJfZXh0KGNoaXAt PmRldiwKPiA+ICZsZWQtPm1jZGV2LCBpbml0X2RhdGEpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IGt0ZDIwMnhfc2V0dXBfbGVkX3NpbmdsZShzdHJ1Y3Qga3RkMjAyeCAqY2hpcCwgc3Ry dWN0Cj4gPiBkZXZpY2Vfbm9kZSAqbnAsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGt0ZDIwMnhf bGVkICpsZWQsIHN0cnVjdAo+ID4gbGVkX2luaXRfZGF0YSAqaW5pdF9kYXRhKQo+ID4gK3sKPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXY7Cj4gPiArwqDCoMKgwqDC oMKgwqB1MzIgcmVnOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicmVnIiwgJnJlZyk7Cj4g PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0ICE9IDAgfHwgcmVnID49IGNoaXAtPm51bV9sZWRzKSB7 Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihjaGlwLT5kZXYsICJp bnZhbGlkICdyZWcnIG9mICVwT0ZuXG4iLCBucCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKg wqDCoMKgwqBsZWQtPmluZGV4ID0gcmVnOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgY2RldiA9 ICZsZWQtPmNkZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqBjZGV2LT5icmlnaHRuZXNzX3NldF9ibG9j a2luZyA9Cj4gPiBrdGQyMDJ4X2JyaWdodG5lc3Nfc2luZ2xlX3NldDsKPiA+ICvCoMKgwqDCoMKg wqDCoGNkZXYtPmJsaW5rX3NldCA9IGt0ZDIwMnhfYmxpbmtfc2luZ2xlX3NldDsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoY2hp cC0+ZGV2LCAmbGVkLQo+ID4gPmNkZXYsIGluaXRfZGF0YSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyBpbnQga3RkMjAyeF9hZGRfbGVkKHN0cnVjdCBrdGQyMDJ4ICpjaGlwLCBzdHJ1Y3QKPiA+ IGRldmljZV9ub2RlICpucCwgdW5zaWduZWQgaW50IGluZGV4KQo+ID4gK3sKPiA+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBrdGQyMDJ4X2xlZCAqbGVkID0gJmNoaXAtPmxlZHNbaW5kZXhdOwo+ID4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhID0ge307Cj4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2Owo+ID4gK8KgwqDCoMKgwqDC oMKgdTMyIGNvbG9yID0gMDsKPiBVbi1uZWVkZWQgaW5pdC4KPiAKPiA+ICvCoMKgwqDCoMKgwqDC oGludCByZXQ7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKiBDb2xvciBwcm9wZXJ0eSBpcyBv cHRpb25hbCBpbiBzaW5nbGUgY29sb3IgY2FzZSAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0g b2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjb2xvciIsICZjb2xvcik7Cj4gPiArwqDCoMKgwqDC oMKgwqBpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVJTlZBTCkgewo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoY2hpcC0+ZGV2LCAiZmFpbGVkIHRvIHBhcnNlICdjb2xv cicgb2YKPiA+ICVwT0ZcbiIsIG5wKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gcmV0Owo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgbGVkLT5jaGlwID0gY2hpcDsKPiA+ICvCoMKgwqDCoMKgwqDCoGluaXRfZGF0YS5md25vZGUg PSBvZl9md25vZGVfaGFuZGxlKG5wKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChjb2xv ciA9PSBMRURfQ09MT1JfSURfUkdCKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY2RldiA9ICZsZWQtPm1jZGV2LmxlZF9jZGV2Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldCA9IGt0ZDIwMnhfc2V0dXBfbGVkX3JnYihjaGlwLCBucCwgbGVkLAo+ID4g JmluaXRfZGF0YSk7Cj4gPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNkZXYgPSAmbGVkLT5jZGV2Owo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCA9IGt0ZDIwMnhfc2V0dXBfbGVkX3NpbmdsZShjaGlwLCBucCwg bGVkLAo+ID4gJmluaXRfZGF0YSk7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2VycihjaGlwLT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgJXNcbiIsIGNkZXYtCj4gPiA+ bmFtZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zfbm9kZV9wdXQobnAp Owo+IAo+IFRoaXMgaXMgc3RyYW5nZSB0byBoYXZlIGl0IGhlcmUuCj4gV2h5IG5vdCBhYm92ZSBh ZnRlciAiaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FSU5WQUwpIHsiPwo+IAo+IEl0IHdvdWxkIGxv b2sgbXVjaCBtb3JlIG5hdHVyYWwgdG8gaGF2ZSBpdCBhIGZldyBsaW5lcyBiZWxvdywgLi4uIFsx XQoKR29vZCBjYXRjaC4gSSdsbCBtb3ZlIG9mX25vZGVfcHV0KG5wKTsgdG8gWzFdIGFuZCBbMl0u Cgo+IAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiAr wqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBjZGV2LT5tYXhfYnJpZ2h0 bmVzcyA9IEtURDIwMlhfTUFYX0JSSUdIVE5FU1M7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBrdGQyMDJ4X3Byb2JlX2R0KHN0 cnVjdCBrdGQyMDJ4ICpjaGlwKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAgPSBkZXZfb2Zfbm9kZShjaGlwLT5kZXYpLCAqY2hpbGQ7Cj4gPiArwqDCoMKg wqDCoMKgwqB1bnNpZ25lZCBpbnQgaTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBjb3VudCwgcmV0 Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hpcC0+bnVtX2xlZHMgPSAoaW50KSh1bnNpZ25l ZAo+ID4gbG9uZylvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoY2hpcC0+ZGV2KTsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoGNvdW50ID0gb2ZfZ2V0X2F2YWlsYWJsZV9jaGlsZF9jb3VudChucCk7 Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWNvdW50IHx8IGNvdW50ID4gY2hpcC0+bnVtX2xlZHMp CgpbMl0uCgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFM Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVnbWFwX3dyaXRlKGNoaXAtPnJlZ21hcCwgS1RE MjAyWF9SRUdfUkVTRVRfQ09OVFJPTCwKPiA+IEtURDIwMlhfUlNUUl9SRVNFVCk7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqAvKiBBbGxvdyB0aGUgZGV2aWNlIHRvIGV4ZWN1dGUgdGhlIGNvbXBs ZXRlIHJlc2V0ICovCj4gPiArwqDCoMKgwqDCoMKgwqB1c2xlZXBfcmFuZ2UoMjAwLCAzMDApOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaSA9IDA7Cj4gPiArwqDCoMKgwqDCoMKgwqBmb3JfZWFj aF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGQpIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQgPSBrdGQyMDJ4X2FkZF9sZWQoY2hpcCwgY2hpbGQsIGkpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gCj4gWzFdIC4uLiBo ZXJlLgo+IAo+IE90aGVyd2lzZSwgaXQgaXMgbGlrZWx5IHRoYXQsIHRoYW5rcyB0byBhIHN0YXRp YyBjaGVja2VyLCBhbgo+IGFkZGl0aW9ubmFsIAo+IG9mX25vZGVfcHV0KCkgd2lsbCBiZSBhZGRl ZCBvbiBlYXJseSBleGl0IG9mIHRoZSBsb29wLgo+IAo+IENKCj4gCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaSsrOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQo+IAo+IC4uLgo+IAoKQmVzdCByZWdh cmRzLApBbmRyw6kKCg==