Received: by 2002:a05:7412:31a9:b0:e2:908c:2ebd with SMTP id et41csp5915188rdb; Sun, 17 Sep 2023 19:30:17 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGzdIhApxfJqTBNgrZ10K3CZILiHq3i3DMBHH1raeFWghI4BLttLjXdUgKEQkssNNDkAFCF X-Received: by 2002:a05:6a20:2594:b0:154:c959:f157 with SMTP id k20-20020a056a20259400b00154c959f157mr6410470pzd.30.1695004217627; Sun, 17 Sep 2023 19:30:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695004217; cv=none; d=google.com; s=arc-20160816; b=WUvfgBnOF7xd2Oj9ZMytQhUSR5AnTaCwq5QuVS2+3adl5NcZgb+FMU7S8N0bpbMcge twX+3E0ra+LiW6PmRjCh7q+BghhsWokcAHTNJ4U27cP67VjMJriRvDBQU3fPXS4yM2lB gr1P0rdYuzOE19dm7+x9MWrinC4U/J8w09ROPgBze10i41Bhx7eeDNHwmmu2p3hhKVl1 ULeMSBdfp8qH7Wx09dHCKGR5xhAaRNnAIZdJAhDTo1M7jDgCnezO7eYbxz5WZYyRfroe dbxAhebbyDOZIIVfqaWnyt6GS8TynhzZt0vlPoFk+InS+jctbSne4LNTe93HQEF0+BeX +vyw== 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=yDQaVVYAItnt+hTohrXFHyIXvvO6FgbfaRGZxjMTYhQ=; fh=IQNYCJ+KFX0LXtJ3nNhRHTpyatq2V+fRsX0YY1D1/ZY=; b=gNVZea8Pyz28ndJ/oapZY0sf98mpeMQ2ES8Hrqnifne72eU/lalmHFLWJsXbJQNA8V KB92fx0/J/zQZbgvlmNiNWmWNxYnL+6TQIKsjLygexVi7sDyuXsKXp2NAOO6+OoVCaJH aH43sxLblCgiaG7mjXAf8nkujVaE9Wk5CHM5yEhy7FmrMT1w3UQQmJygD+v8OKT027PC pgrZ6jMCqRm64fG2Bw9Cmhe0Xv3zbqWMA74iBBdgO0TUHfaTQQ339MHnIjdcRVSqYpvi DQpCMrn8d0IPxJILuZEaBhRsxEECWUh7rIwsatu8edTkU6f4NQtmB2JwrGZT/y57rwdd 2vDQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id ju4-20020a170903428400b001b045d65aedsi7097797plb.228.2023.09.17.19.30.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Sep 2023 19:30:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id E71A38033360; Sun, 17 Sep 2023 19:29:21 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235866AbjIRC2c (ORCPT + 99 others); Sun, 17 Sep 2023 22:28:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53554 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237425AbjIRC2B (ORCPT ); Sun, 17 Sep 2023 22:28:01 -0400 Received: from mail-io1-f41.google.com (mail-io1-f41.google.com [209.85.166.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7173C122 for ; Sun, 17 Sep 2023 19:27:51 -0700 (PDT) Received: by mail-io1-f41.google.com with SMTP id ca18e2360f4ac-794e0e8b588so159191439f.1 for ; Sun, 17 Sep 2023 19:27:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695004070; x=1695608870; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=yDQaVVYAItnt+hTohrXFHyIXvvO6FgbfaRGZxjMTYhQ=; b=HCuO8duEM63m8QJ5zSPG+/oy3Zgt51KFp7/K2tG4S1zzSqDOHv8+baNiB+AmR9tRhR SNBGAIGSIc+48N7SoeCqivcROYAHtcT1dTWsQTr08xDs3vI522YZA07IoGJJ6xZMIch0 /XPQF6CnXHHB8u0kQbZKCgH8fJuY8cBCjrnchxxkXNcn85FVm6L+6JdHBq5Lg1q2cOk/ U2iGGCg2wbX2mlAAH46GVMkIaGiLenTKez95Fx1acsIXSzkRd184DnsM0lWofsDiCbn7 9GSjUvnG1RG+9vjkdHduK3RGrUERugznps87EtSVsMAywwsFReRjlrzxcUZ6yr07Ln1Q zNVw== X-Gm-Message-State: AOJu0YxhTJOQdZteiuMVLjq4IgKU+xZzZ5i1LN5WPSoGAeiULHDQ+4pQ 1Tfc+oEOUSdDv4HZQtaYEg== X-Received: by 2002:a05:6e02:1344:b0:345:f28f:cc26 with SMTP id k4-20020a056e02134400b00345f28fcc26mr8111878ilr.24.1695004070560; Sun, 17 Sep 2023 19:27:50 -0700 (PDT) Received: from [192.168.75.138] (50-36-86-126.alma.mi.frontiernet.net. [50.36.86.126]) by smtp.gmail.com with ESMTPSA id dp32-20020a0566381ca000b00430a69ea278sm2546228jab.167.2023.09.17.19.27.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Sep 2023 19:27:50 -0700 (PDT) Message-ID: Subject: Re: [PATCH 2/2] NFSv4: Fix a state manager thread deadlock regression From: Trond Myklebust To: NeilBrown Cc: Anna Schumaker , linux-nfs@vger.kernel.org Date: Sun, 17 Sep 2023 22:27:47 -0400 In-Reply-To: <169500033147.8274.17464264746177119631@noble.neil.brown.name> References: <20230917230551.30483-1-trondmy@kernel.org> , <20230917230551.30483-2-trondmy@kernel.org> <169500033147.8274.17464264746177119631@noble.neil.brown.name> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) MIME-Version: 1.0 X-Spam-Status: No, score=-1.0 required=5.0 tests=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 lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Sun, 17 Sep 2023 19:29:22 -0700 (PDT) T24gTW9uLCAyMDIzLTA5LTE4IGF0IDExOjI1ICsxMDAwLCBOZWlsQnJvd24gd3JvdGU6Cj4gT24g TW9uLCAxOCBTZXAgMjAyMywgdHJvbmRteUBrZXJuZWwub3JnwqB3cm90ZToKPiA+IEZyb206IFRy b25kIE15a2xlYnVzdCA8dHJvbmQubXlrbGVidXN0QGhhbW1lcnNwYWNlLmNvbT4KPiA+IAo+ID4g Q29tbWl0IDRkYzczYzY3OTExNCByZWludHJvZHVjZXMgdGhlIGRlYWRsb2NrIHRoYXQgd2FzIGZp eGVkIGJ5Cj4gPiBjb21taXQKPiA+IGFlYWJiM2M5NjE4NiAoIk5GU3Y0OiBGaXggYSBORlN2NCBz dGF0ZSBtYW5hZ2VyIGRlYWRsb2NrIikgYmVjYXVzZQo+ID4gaXQKPiA+IHByZXZlbnRzIHRoZSBz ZXR1cCBvZiBuZXcgdGhyZWFkcyB0byBoYW5kbGUgcmVib290IHJlY292ZXJ5LCB3aGlsZQo+ID4g dGhlCj4gPiBvbGRlciByZWNvdmVyeSB0aHJlYWQgaXMgc3R1Y2sgcmV0dXJuaW5nIGRlbGVnYXRp b25zLgo+IAo+IEkgaGFkbid0IHJlYWxpc2VkIHRoYXQgdGhlIHN0YXRlIG1hbmFnZXIgdGhyZWFk IGRpZCB0aGVzZSB0d28KPiBkaXN0aW5jdAo+IHRhc2tzIGFuZCBtaWdodCBuZWVkIHRvIGJlIGRv aW5nIGJvdGggYXQgb25jZSAtIHJlcXVpcmluZyB0d28KPiB0aHJlYWRzLgo+IFRoYW5rcyBmb3Ig aGlnaGxpZ2h0aW5nIHRoYXQuCj4gCj4gSXQgc2VlbXMgdG8gbWUgdGhhdCBldmVuIHdpdGggdGhl IG5ldyBjb2RlLCB3ZSBjYW4gc3RpbGwgZ2V0IGEKPiBkZWFkbG9jawo+IHdoZW4gc3dhcCBpcyBl bmFibGVkLCBhcyB3ZSBvbmx5IGV2ZXIgcnVuIG9uZSB0aHJlYWQgaW4gdGhhdCBjYXNlLgo+IElz IHRoYXQgY29ycmVjdCwgb3IgZGlkIEkgbWlzcyBzb21ldGhpbmc/CgpUaGF0IGlzIGNvcnJlY3Qu IEkgZGlkIHRyeSB0byBwb2ludCB0aGlzIG91dCB3aGVuIHlvdSB3ZXJlIHN1Ym1pdHRpbmcKdGhl IHN3YXAgcGF0Y2hlcywgYnV0IG15IHVuZGVyc3RhbmRpbmcgd2FzIHRoYXQgeW91IHdlcmUgYXNz dW1pbmcgdGhhdApkZWxlZ2F0aW9ucyB3b3VsZCBub3QgYmUgZW5hYmxlZCB3aGVuIHN3YXAgaXMg ZW5hYmxlZC4KCj4gCj4gTWF5YmUgd2UgbmVlZCB0d28gdGhyZWFkcyAtIGEgc3RhdGUgbWFuYWdl ciBhbmQgYSBkZWxlZ2F0aW9uIHJlY2FsbAo+IGhhbmRsZXIuwqAgQW5kIHdoZW4gc3dhcCBpcyBl bmFibGVkLCBib3RoIG5lZWQgdG8gYmUgcnVubmluZwo+IHBlcm1hbmVudGx5Cj4gPz8KClBvc3Np Ymx5LgoKPiAKPiA+IAo+ID4gRml4ZXM6IDRkYzczYzY3OTExNCAoIk5GU3Y0OiBrZWVwIHN0YXRl IG1hbmFnZXIgdGhyZWFkIGFjdGl2ZSBpZgo+ID4gc3dhcCBpcyBlbmFibGVkIikKPiA+IENjOiBz dGFibGVAdmdlci5rZXJuZWwub3JnCj4gPiBTaWduZWQtb2ZmLWJ5OiBUcm9uZCBNeWtsZWJ1c3Qg PHRyb25kLm15a2xlYnVzdEBoYW1tZXJzcGFjZS5jb20+Cj4gPiAtLS0KPiA+IMKgZnMvbmZzL25m czRwcm9jLmPCoCB8wqAgNCArKystCj4gPiDCoGZzL25mcy9uZnM0c3RhdGUuYyB8IDM4ICsrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCj4gPiDCoDIgZmlsZXMgY2hhbmdlZCwg MjkgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9m cy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCj4gPiBpbmRleCA1ZGVlYWVhODAy NmUuLmExOWU4MDljYWQxNiAxMDA2NDQKPiA+IC0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCj4gPiAr KysgYi9mcy9uZnMvbmZzNHByb2MuYwo+ID4gQEAgLTEwNjUyLDcgKzEwNjUyLDkgQEAgc3RhdGlj IHZvaWQgbmZzNF9kaXNhYmxlX3N3YXAoc3RydWN0IGlub2RlCj4gPiAqaW5vZGUpCj4gPiDCoMKg wqDCoMKgwqDCoMKgICovCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG5mc19jbGllbnQgKmNs cCA9IE5GU19TRVJWRVIoaW5vZGUpLT5uZnNfY2xpZW50Owo+ID4gwqAKPiA+IC3CoMKgwqDCoMKg wqDCoG5mczRfc2NoZWR1bGVfc3RhdGVfbWFuYWdlcihjbHApOwo+ID4gK8KgwqDCoMKgwqDCoMKg c2V0X2JpdChORlM0Q0xOVF9SVU5fTUFOQUdFUiwgJmNscC0+Y2xfc3RhdGUpOwo+ID4gK8KgwqDC oMKgwqDCoMKgY2xlYXJfYml0KE5GUzRDTE5UX01BTkFHRVJfQVZBSUxBQkxFLCAmY2xwLT5jbF9z dGF0ZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqB3YWtlX3VwX3ZhcigmY2xwLT5jbF9zdGF0ZSk7Cj4g PiDCoH0KPiA+IMKgCj4gPiDCoHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBu ZnM0X2Rpcl9pbm9kZV9vcGVyYXRpb25zID0gewo+ID4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0 c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwo+ID4gaW5kZXggMGJjMTYwZmJhYmVjLi41NzUx YTY4ODZkYTQgMTAwNjQ0Cj4gPiAtLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKPiA+ICsrKyBiL2Zz L25mcy9uZnM0c3RhdGUuYwo+ID4gQEAgLTEyMDksMTYgKzEyMDksMjYgQEAgdm9pZCBuZnM0X3Nj aGVkdWxlX3N0YXRlX21hbmFnZXIoc3RydWN0Cj4gPiBuZnNfY2xpZW50ICpjbHApCj4gPiDCoHsK PiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Cj4gPiDCoMKgwqDC oMKgwqDCoMKgY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTiArIHNpemVvZigiLW1hbmFnZXIiKSAr IDFdOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJwY19jbG50ICpjbG50ID0gY2xwLT5jbF9y cGNjbGllbnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBib29sIHN3YXBvbiA9IGZhbHNlOwo+ID4gwqAK PiA+IC3CoMKgwqDCoMKgwqDCoGlmIChjbHAtPmNsX3JwY2NsaWVudC0+Y2xfc2h1dGRvd24pCj4g PiArwqDCoMKgwqDCoMKgwqBpZiAoY2xudC0+Y2xfc2h1dGRvd24pCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgc2V0 X2JpdChORlM0Q0xOVF9SVU5fTUFOQUdFUiwgJmNscC0+Y2xfc3RhdGUpOwo+ID4gLcKgwqDCoMKg wqDCoMKgaWYgKHRlc3RfYW5kX3NldF9iaXQoTkZTNENMTlRfTUFOQUdFUl9BVkFJTEFCTEUsICZj bHAtCj4gPiA+Y2xfc3RhdGUpICE9IDApIHsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB3YWtlX3VwX3ZhcigmY2xwLT5jbF9zdGF0ZSk7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGF0b21pY19y ZWFkKCZjbG50LT5jbF9zd2FwcGVyKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN3YXBvbiA9Cj4gPiAhdGVzdF9hbmRfc2V0X2JpdChORlM0Q0xOVF9NQU5BR0VSX0FWQUlM QUJMRSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZjbHAtPmNsX3N0YXRlKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXN3YXBvbikgewo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3YWtlX3VwX3ZhcigmY2xw LT5jbF9zdGF0ZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybjsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiDC oMKgwqDCoMKgwqDCoMKgfQo+ID4gLcKgwqDCoMKgwqDCoMKgc2V0X2JpdChORlM0Q0xOVF9NQU5B R0VSX1JVTk5JTkcsICZjbHAtPmNsX3N0YXRlKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGlm ICh0ZXN0X2FuZF9zZXRfYml0KE5GUzRDTE5UX01BTkFHRVJfUlVOTklORywgJmNscC0KPiA+ID5j bF9zdGF0ZSkgIT0gMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47 Cj4gPiArCj4gPiDCoMKgwqDCoMKgwqDCoMKgX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKPiA+ IMKgwqDCoMKgwqDCoMKgwqByZWZjb3VudF9pbmMoJmNscC0+Y2xfY291bnQpOwo+ID4gwqAKPiA+ IEBAIC0xMjM1LDggKzEyNDUsOSBAQCB2b2lkIG5mczRfc2NoZWR1bGVfc3RhdGVfbWFuYWdlcihz dHJ1Y3QKPiA+IG5mc19jbGllbnQgKmNscCkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fZnVuY19fLCBQVFJfRVJSKHRhc2spKTsKPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFuZnNfY2xpZW50X2luaXRfaXNfY29tcGxl dGUoY2xwKSkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG5mc19tYXJrX2NsaWVudF9yZWFkeShjbHAsIFBUUl9FUlIodGFzaykpOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChzd2Fwb24pCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsZWFyX2JpdChORlM0Q0xOVF9NQU5BR0VS X0FWQUlMQUJMRSwgJmNscC0KPiA+ID5jbF9zdGF0ZSk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG5mczRfY2xlYXJfc3RhdGVfbWFuYWdlcl9iaXQoY2xwKTsKPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGVhcl9iaXQoTkZTNENMTlRfTUFOQUdFUl9BVkFJ TEFCTEUsICZjbHAtCj4gPiA+Y2xfc3RhdGUpOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBuZnNfcHV0X2NsaWVudChjbHApOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqB9Cj4g PiBAQCAtMjc0OCwyMiArMjc1OSwyNSBAQCBzdGF0aWMgaW50IG5mczRfcnVuX3N0YXRlX21hbmFn ZXIodm9pZAo+ID4gKnB0cikKPiA+IMKgCj4gPiDCoMKgwqDCoMKgwqDCoMKgYWxsb3dfc2lnbmFs KFNJR0tJTEwpOwo+ID4gwqBhZ2FpbjoKPiA+IC3CoMKgwqDCoMKgwqDCoHNldF9iaXQoTkZTNENM TlRfTUFOQUdFUl9SVU5OSU5HLCAmY2xwLT5jbF9zdGF0ZSk7Cj4gPiDCoMKgwqDCoMKgwqDCoMKg bmZzNF9zdGF0ZV9tYW5hZ2VyKGNscCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoYXRvbWljX3Jl YWQoJmNsLT5jbF9zd2FwcGVyKSkgewo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHRlc3Rf Yml0KE5GUzRDTE5UX01BTkFHRVJfQVZBSUxBQkxFLCAmY2xwLT5jbF9zdGF0ZSkgJiYKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCAhdGVzdF9hbmRfc2V0X2JpdChORlM0Q0xOVF9NQU5BR0VSX1JV Tk5JTkcsICZjbHAtCj4gPiA+Y2xfc3RhdGUpKSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHdhaXRfdmFyX2V2ZW50X2ludGVycnVwdGlibGUoJmNscC0+Y2xfc3RhdGUsCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gPiB0ZXN0X2JpdChORlM0Q0xOVF9S VU5fTUFOQUdFUiwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJmNscC0KPiA+ID5jbF9zdGF0ZSkpOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChhdG9taWNfcmVhZCgmY2wtPmNsX3N3YXBwZXIpICYmCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRlc3RfYml0KE5GUzRDTE5UX1JVTl9NQU5B R0VSLCAmY2xwLT5jbF9zdGF0ZSkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCFhdG9taWNfcmVhZCgmY2wtPmNsX3N3YXBwZXIpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGVhcl9iaXQoTkZTNENMTlRfTUFOQUdFUl9B VkFJTEFCTEUsICZjbHAtCj4gPiA+Y2xfc3RhdGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChyZWZjb3VudF9yZWFkKCZjbHAtPmNsX2NvdW50KSA+IDEgJiYKPiA+ICFz aWduYWxsZWQoKSkKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGdvdG8gYWdhaW47Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8q IEVpdGhlciBubyBsb25nZXIgYSBzd2FwcGVyLCBvciB3ZXJlIHNpZ25hbGxlZCAqLwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsZWFyX2JpdChORlM0Q0xOVF9NQU5BR0VSX0FW QUlMQUJMRSwgJmNscC0KPiA+ID5jbF9zdGF0ZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgbmZzNF9jbGVhcl9zdGF0ZV9tYW5hZ2VyX2JpdChjbHApOwo+ID4gwqDCoMKgwqDC oMKgwqDCoH0KPiA+IC3CoMKgwqDCoMKgwqDCoGNsZWFyX2JpdChORlM0Q0xOVF9NQU5BR0VSX0FW QUlMQUJMRSwgJmNscC0+Y2xfc3RhdGUpOwo+ID4gwqAKPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAo cmVmY291bnRfcmVhZCgmY2xwLT5jbF9jb3VudCkgPiAxICYmICFzaWduYWxsZWQoKSAmJgo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0ZXN0X2JpdChORlM0Q0xOVF9SVU5fTUFOQUdFUiwgJmNs cC0+Y2xfc3RhdGUpICYmCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqAgIXRlc3RfYW5kX3NldF9i aXQoTkZTNENMTlRfTUFOQUdFUl9BVkFJTEFCTEUsICZjbHAtCj4gPiA+Y2xfc3RhdGUpKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgICF0ZXN0X2FuZF9zZXRfYml0KE5GUzRDTE5UX01BTkFHRVJf UlVOTklORywgJmNscC0KPiA+ID5jbF9zdGF0ZSkpCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGdvdG8gYWdhaW47Cj4gPiDCoAo+ID4gwqDCoMKgwqDCoMKgwqDCoG5mc19wdXRf Y2xpZW50KGNscCk7Cj4gPiAtLSAKPiA+IDIuNDEuMAo+ID4gCj4gPiAKPiAKCg==