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 X-Spam-Level: X-Spam-Status: No, score=-11.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB1B9C388F9 for ; Thu, 5 Nov 2020 03:13:03 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4C15C20719 for ; Thu, 5 Nov 2020 03:13:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Kc1n5+1N" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4C15C20719 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 6C11C2045B; Thu, 5 Nov 2020 03:13:02 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wj7oAwrPEt9b; Thu, 5 Nov 2020 03:13:00 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 92CA520035; Thu, 5 Nov 2020 03:13:00 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 7642DC0893; Thu, 5 Nov 2020 03:13:00 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id C4899C0889 for ; Thu, 5 Nov 2020 03:12:58 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id AC8D2848AB for ; Thu, 5 Nov 2020 03:12:58 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id uBcTlLFmn0kz for ; Thu, 5 Nov 2020 03:12:57 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by fraxinus.osuosl.org (Postfix) with ESMTPS id AEAC4844D9 for ; Thu, 5 Nov 2020 03:12:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1604545976; 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=uFTsPGcDcUkgQNcoW2dxxsscwMj2/3GBBizTH8MNzEE=; b=Kc1n5+1Nm0a9fsDwO31AgQBRDg48PFhhvDlH91j7y16NmIlkVLF2Ejo5tl4/9a2hhbQ8+5 MMjkFLEvwvxo/xvTjgH/k1YGug0Ep3XlG1/q54mnK24dj3eIZ3z3sFwlXgMmhl0GB4vYHR khRyGeWfQZwa2Iqt5eLpi5xmtclnkIo= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-551-9jC1P1ZTOmquwYW8ZZnbQA-1; Wed, 04 Nov 2020 22:12:54 -0500 X-MC-Unique: 9jC1P1ZTOmquwYW8ZZnbQA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 798C2803F7B; Thu, 5 Nov 2020 03:12:53 +0000 (UTC) Received: from [10.72.13.154] (ovpn-13-154.pek2.redhat.com [10.72.13.154]) by smtp.corp.redhat.com (Postfix) with ESMTP id 10EFE1002C0D; Thu, 5 Nov 2020 03:12:47 +0000 (UTC) Subject: Re: [PATCH 2/2] vhost-vdpa: fix page pinning leakage in error path (rework) To: si-wei liu , mst@redhat.com, lingshan.zhu@intel.com References: <1604043944-4897-1-git-send-email-si-wei.liu@oracle.com> <1604043944-4897-2-git-send-email-si-wei.liu@oracle.com> <77a2aefe-ccad-bd51-3721-1139d4e535d7@redhat.com> <5FA33C06.6010000@oracle.com> From: Jason Wang Message-ID: <38317b10-0f1f-1521-ec10-a462be83b5a6@redhat.com> Date: Thu, 5 Nov 2020 11:12:46 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <5FA33C06.6010000@oracle.com> Content-Language: en-US X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Cc: virtualization@lists.linux-foundation.org, boris.ostrovsky@oracle.com, linux-kernel@vger.kernel.org X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" Ck9uIDIwMjAvMTEvNSDkuIrljYg3OjQwLCBzaS13ZWkgbGl1IHdyb3RlOgo+Cj4gT24gMTEvMy8y MDIwIDY6NDIgUE0sIEphc29uIFdhbmcgd3JvdGU6Cj4+Cj4+IE9uIDIwMjAvMTAvMzAg5LiL5Y2I Mzo0NSwgU2ktV2VpIExpdSB3cm90ZToKPj4+IFBpbm5lZCBwYWdlcyBhcmUgbm90IHByb3Blcmx5 IGFjY291bnRlZCBwYXJ0aWN1bGFybHkgd2hlbgo+Pj4gbWFwcGluZyBlcnJvciBvY2N1cnMgb24g SU9UTEIgdXBkYXRlLiBDbGVhbiB1cCBkYW5nbGluZwo+Pj4gcGlubmVkIHBhZ2VzIGZvciB0aGUg ZXJyb3IgcGF0aC4KPj4+Cj4+PiBUaGUgbWVtb3J5IHVzYWdlIGZvciBib29ra2VlcGluZyBwaW5u ZWQgcGFnZXMgaXMgcmV2ZXJ0ZWQKPj4+IHRvIHdoYXQgaXQgd2FzIGJlZm9yZTogb25seSBvbmUg c2luZ2xlIGZyZWUgcGFnZSBpcyBuZWVkZWQuCj4+PiBUaGlzIGhlbHBzIHJlZHVjZSB0aGUgaG9z dCBtZW1vcnkgZGVtYW5kIGZvciBWTSB3aXRoIGEgbGFyZ2UKPj4+IGFtb3VudCBvZiBtZW1vcnks IG9yIGluIHRoZSBzaXR1YXRpb24gd2hlcmUgaG9zdCBpcyBydW5uaW5nCj4+PiBzaG9ydCBvZiBm cmVlIG1lbW9yeS4KPj4+Cj4+PiBGaXhlczogNGM4Y2YzMTg4NWY2ICgidmhvc3Q6IGludHJvZHVj ZSB2RFBBLWJhc2VkIGJhY2tlbmQiKQo+Pj4gU2lnbmVkLW9mZi1ieTogU2ktV2VpIExpdSA8c2kt d2VpLmxpdUBvcmFjbGUuY29tPgo+Pj4gLS0tCj4+PiDCoCBkcml2ZXJzL3Zob3N0L3ZkcGEuYyB8 IDY0IAo+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLQo+Pj4gwqAgMSBmaWxlIGNoYW5nZWQsIDQ2IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9u cygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3ZkcGEuYyBiL2RyaXZlcnMv dmhvc3QvdmRwYS5jCj4+PiBpbmRleCBiNmQ5MDE2Li44ZGE4NTU4IDEwMDY0NAo+Pj4gLS0tIGEv ZHJpdmVycy92aG9zdC92ZHBhLmMKPj4+ICsrKyBiL2RyaXZlcnMvdmhvc3QvdmRwYS5jCj4+PiBA QCAtNTYwLDYgKzU2MCw4IEBAIHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9tYXAoc3RydWN0IHZob3N0 X3ZkcGEgKnYsCj4+PiDCoMKgwqDCoMKgwqDCoCBpZiAocikKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oCB2aG9zdF9pb3RsYl9kZWxfcmFuZ2UoZGV2LT5pb3RsYiwgaW92YSwgaW92YSArIHNpemUgLSAx KTsKPj4+ICvCoMKgwqAgZWxzZQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGF0b21pYzY0X2FkZChzaXpl ID4+IFBBR0VfU0hJRlQsICZkZXYtPm1tLT5waW5uZWRfdm0pOwo+Pj4gwqDCoMKgwqDCoMKgwqAg cmV0dXJuIHI7Cj4+PiDCoCB9Cj4+PiBAQCAtNTkxLDE0ICs1OTMsMTYgQEAgc3RhdGljIGludCAK Pj4+IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3RsYl91cGRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYs Cj4+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgbGlzdF9zaXplID0gUEFHRV9TSVpFIC8gc2l6 ZW9mKHN0cnVjdCBwYWdlICopOwo+Pj4gwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdz ID0gRk9MTF9MT05HVEVSTTsKPj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBucGFnZXMsIGN1 cl9iYXNlLCBtYXBfcGZuLCBsYXN0X3BmbiA9IDA7Cj4+PiAtwqDCoMKgIHVuc2lnbmVkIGxvbmcg bG9ja2VkLCBsb2NrX2xpbWl0LCBwaW5uZWQsIGk7Cj4+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcg bG9ja19saW1pdCwgc3oycGluLCBuY2h1bmtzLCBpOwo+Pj4gwqDCoMKgwqDCoCB1NjQgaW92YSA9 IG1zZy0+aW92YTsKPj4+ICvCoMKgwqAgbG9uZyBwaW5uZWQ7Cj4+PiDCoMKgwqDCoMKgIGludCBy ZXQgPSAwOwo+Pj4gwqDCoMKgwqDCoMKgwqAgaWYgKHZob3N0X2lvdGxiX2l0cmVlX2ZpcnN0KGlv dGxiLCBtc2ctPmlvdmEsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbXNnLT5pb3ZhICsgbXNnLT5zaXplIC0gMSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FRVhJU1Q7Cj4+PiDCoCArwqDCoMKgIC8qIExpbWl0IHRoZSB1c2Ugb2YgbWVtb3J5 IGZvciBib29ra2VlcGluZyAqLwo+Pj4gwqDCoMKgwqDCoCBwYWdlX2xpc3QgPSAoc3RydWN0IHBh Z2UgKiopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKPj4+IMKgwqDCoMKgwqAgaWYgKCFw YWdlX2xpc3QpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+PiBAQCAt NjA3LDUyICs2MTEsNjQgQEAgc3RhdGljIGludCAKPj4+IHZob3N0X3ZkcGFfcHJvY2Vzc19pb3Rs Yl91cGRhdGUoc3RydWN0IHZob3N0X3ZkcGEgKnYsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ3Vw X2ZsYWdzIHw9IEZPTExfV1JJVEU7Cj4+PiDCoMKgwqDCoMKgwqDCoCBucGFnZXMgPSBQQUdFX0FM SUdOKG1zZy0+c2l6ZSArIChpb3ZhICYgflBBR0VfTUFTSykpID4+IAo+Pj4gUEFHRV9TSElGVDsK Pj4+IC3CoMKgwqAgaWYgKCFucGFnZXMpCj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5W QUw7Cj4+PiArwqDCoMKgIGlmICghbnBhZ2VzKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0g LUVJTlZBTDsKPj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZyZWU7Cj4+PiArwqDCoMKgIH0KPj4+ IMKgwqDCoMKgwqDCoMKgIG1tYXBfcmVhZF9sb2NrKGRldi0+bW0pOwo+Pj4gwqAgLcKgwqDCoCBs b2NrZWQgPSBhdG9taWM2NF9hZGRfcmV0dXJuKG5wYWdlcywgJmRldi0+bW0tPnBpbm5lZF92bSk7 Cj4+PiDCoMKgwqDCoMKgIGxvY2tfbGltaXQgPSBybGltaXQoUkxJTUlUX01FTUxPQ0spID4+IFBB R0VfU0hJRlQ7Cj4+PiAtCj4+PiAtwqDCoMKgIGlmIChsb2NrZWQgPiBsb2NrX2xpbWl0KSB7Cj4+ PiArwqDCoMKgIGlmIChucGFnZXMgKyBhdG9taWM2NF9yZWFkKCZkZXYtPm1tLT5waW5uZWRfdm0p ID4gbG9ja19saW1pdCkgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FTk9NRU07Cj4+ PiAtwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byB1bmxv Y2s7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqDCoMKgIGN1cl9iYXNlID0gbXNnLT51 YWRkciAmIFBBR0VfTUFTSzsKPj4+IMKgwqDCoMKgwqAgaW92YSAmPSBQQUdFX01BU0s7Cj4+PiAr wqDCoMKgIG5jaHVua3MgPSAwOwo+Pj4gwqDCoMKgwqDCoMKgwqAgd2hpbGUgKG5wYWdlcykgewo+ Pj4gLcKgwqDCoMKgwqDCoMKgIHBpbm5lZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIG5wYWdlcywg bGlzdF9zaXplKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCByZXQgPSBwaW5fdXNlcl9wYWdlcyhjdXJf YmFzZSwgcGlubmVkLAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZ3VwX2ZsYWdzLCBwYWdlX2xpc3QsIE5VTEwpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChy ZXQgIT0gcGlubmVkKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN6MnBpbiA9IG1pbl90KHVuc2lnbmVk IGxvbmcsIG5wYWdlcywgbGlzdF9zaXplKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBwaW5uZWQgPSBw aW5fdXNlcl9wYWdlcyhjdXJfYmFzZSwgc3oycGluLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGd1cF9mbGFncywgcGFnZV9saXN0LCBOVUxMKTsKPj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoc3oycGluICE9IHBpbm5lZCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKHBpbm5lZCA8IDApIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0ID0gcGlubmVkOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5waW5fdXNlcl9wYWdlcyhwYWdlX2xp c3QsIHBpbm5lZCk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1F Tk9NRU07Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIG91dDsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgwqDC oMKgwqAgbmNodW5rcysrOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWxhc3RfcGZu KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWFwX3BmbiA9IHBhZ2VfdG9fcGZuKHBh Z2VfbGlzdFswXSk7Cj4+PiDCoCAtwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IHJldDsg aSsrKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IHBpbm5lZDsgaSsrKSB7 Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHRoaXNfcGZuID0g cGFnZV90b19wZm4ocGFnZV9saXN0W2ldKTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHU2NCBjc2l6ZTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobGFzdF9w Zm4gJiYgKHRoaXNfcGZuICE9IGxhc3RfcGZuICsgMSkpIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgLyogUGluIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgKi8K Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3NpemUgPSAobGFzdF9wZm4g LSBtYXBfcGZuICsgMSkgPDwgUEFHRV9TSElGVDsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKHZob3N0X3ZkcGFfbWFwKHYsIGlvdmEsIGNzaXplLAo+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWFwX3BmbiA8PCBQ QUdFX1NISUZULAo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbXNnLT5wZXJtKSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0ID0gdmhvc3RfdmRwYV9tYXAodiwgaW92YSwgY3NpemUsCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWFwX3BmbiA8PCBQ QUdFX1NISUZULAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG1zZy0+cGVybSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChyZXQpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZ290byBvdXQ7Cj4+PiArCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG1hcF9wZm4gPSB0aGlzX3BmbjsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaW92YSArPSBjc2l6ZTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bmNodW5rcyA9IDA7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGFzdF9wZm4gPSB0aGlzX3BmbjsKPj4+IMKgwqDCoMKg wqDCoMKgwqDCoCB9Cj4+PiDCoCAtwqDCoMKgwqDCoMKgwqAgY3VyX2Jhc2UgKz0gcmV0IDw8IFBB R0VfU0hJRlQ7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgbnBhZ2VzIC09IHJldDsKPj4+ICvCoMKgwqDC oMKgwqDCoCBjdXJfYmFzZSArPSBwaW5uZWQgPDwgUEFHRV9TSElGVDsKPj4+ICvCoMKgwqDCoMKg wqDCoCBucGFnZXMgLT0gcGlubmVkOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDC oCAvKiBQaW4gdGhlIHJlc3QgY2h1bmsgKi8KPj4+IEBAIC02NjAsMTAgKzY3NiwyMiBAQCBzdGF0 aWMgaW50IAo+Pj4gdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX3VwZGF0ZShzdHJ1Y3Qgdmhvc3Rf dmRwYSAqdiwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtYXBfcGZu IDw8IFBBR0VfU0hJRlQsIG1zZy0+cGVybSk7Cj4+PiDCoCBvdXQ6Cj4+PiDCoMKgwqDCoMKgIGlm IChyZXQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAobmNodW5rcyAmJiBsYXN0X3Bmbikgewo+ Pgo+Pgo+PiBDYW4gd2UgZGVjcmVhc2UgbnBhZ2VzIHdoZXJlIHlvdSBkaWQgIm5jaHVua3MrKyIg dGhlbiB3ZSBjYW4gY2hlY2sgCj4+IG5wYWdlcyBoZXJlIGluc3RlYWQ/Cj4gSG1tbSwgSSBhbSBu b3Qgc3VyZSBJIGdldCB3aGF0IHlvdSB3YW50Li4uIEBuY2h1bmtzIGdldHMgcmVzZXQgdG8gMCAK PiB3aGVuZXZlciBhIGNlcnRhaW4gcmFuZ2Ugb2YgcGlubmVkIHBhZ2VzIGlzIHN1Y2Nlc3NmdWxs eSBtYXBwZWQuIFRoZSAKPiBjb25kaXRpb25hbCAod2hlbiBuY2h1bmtzIGlzIG5vbi16ZXJvKSBo ZXJlIGluZGljYXRlcyBpZiB0aGVyZSdzIGFueSAKPiBfb3V0c3RhbmRpbmdfIHBpbm5lZCBwYWdl IHRoYXQgaGFzIHRvIGNsZWFuIHVwIGluIHRoZSBlcnJvciBoYW5kbGluZyAKPiBwYXRoLiBXaGls ZSB0aGUgZGVjcmVtZW50IG9mIEBucGFnZXMgbWF5IG5vdCBvY2N1ciB3aGVuIHJlc2V0dGluZyB0 aGUgCj4gQG5jaHVua3MgY291bnRlciwgcmVuZGVyaW5nIGluY29ycmVjdCBjbGVhbnVwIGluIHRo ZSBlcnJvciBwYXRoLgoKClllcywgSSBtZWFudCBlIGNhbiBkZWNyZWFzZSBucGFnZXMgd2hlcmUg eW91IGRpZCAibmNodW5rcysrIi4gQW55aG93LCAKaXQncyBqdXN0IGEgb3B0aW1pemF0aW9uIHRv IGF2b2lkIGEgbG9jYWwgdmFyaWFibGUgd2hpY2ggaXMgbm90IGEgbXVzdC4KCgo+Cj4gQlRXIHdo aWxlIHJldmlld2luZyBpdCBJIGdvdCBub3RpY2VkIG9mIGFuIGVycm9yIGluIG15IGNvZGUuIFRo ZXJlIAo+IG1pZ2h0IGJlIHN0aWxsIHBhZ2UgcGlubmluZyBsZWFrIGZyb20gd2hlcmV2ZXIgdGhl IHZob3N0X3ZkcGFfbWFwKCkgCj4gZXJyb3Igb2NjdXJzIHRvd2FyZHMgdGhlIGVuZCBvZiBwYWdl X2xpc3QuIEkgd2lsbCBwb3N0IGEgdjIgdG8gZml4IHRoaXMuCj4KClN1cmUsIHdpbGwgcmV2aWV3 LgoKVGhhbmtzCgoKPiBSZWdhcmRzLAo+IC1TaXdlaQo+Cj4gLS0tIGEvZHJpdmVycy92aG9zdC92 ZHBhLmMKPiArKysgYi9kcml2ZXJzL3Zob3N0L3ZkcGEuYwo+IEBAIC02NTYsOCArNjU2LDE5IEBA IHN0YXRpYyBpbnQgdmhvc3RfdmRwYV9wcm9jZXNzX2lvdGxiX3VwZGF0ZShzdHJ1Y3QgCj4gdmhv c3RfdmRwYSAqdiwKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSB2aG9zdF92ZHBhX21hcCh2LCBpb3ZhLCBjc2l6ZSwK PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtYXBfcGZu IDw8IAo+IFBBR0VfU0hJRlQsCj4gbXNnLT5wZXJtKTsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAocmV0KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICogVW5waW4gdGhlIHBhZ2VzIHRoYXQgYXJlIAo+IGxlZnQgdW5tYXBwZWQKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICogZnJvbSB0aGlzIHBvaW50IG9uIGluIHRoZSAKPiBjdXJyZW50Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHBhZ2VfbGlzdC4gVGhlIHJlbWFpbmluZyAKPiBvdXRz dGFuZGluZwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBvbmVzIHdoaWNoIG1heSBzdHJpZGUg Cj4gYWNyb3NzIHNldmVyYWwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogY2h1bmtzIHdpbGwg YmUgY292ZXJlZCBpbiAKPiB0aGUgY29tbW9uCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGVy cm9yIHBhdGggc3Vic2VxdWVudGx5Lgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiArIHVu cGluX3VzZXJfcGFnZXMoJnBhZ2VfbGlzdFtpXSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGlubmVkIC0gaSk7Cj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gb3V0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWFwX3BmbiA9IHRoaXNfcGZu Owo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlvdmEgKz0gY3NpemU7Cj4KPgo+Cj4+Cj4+IFRoYW5rcwo+Pgo+Pgo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBwZm47Cj4+PiArCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIFVucGlu IHRoZSBvdXRzdGFuZGluZyBwYWdlcyB3aGljaCBhcmUgdW5tYXBwZWQuCj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICogTWFwcGVkIHBhZ2VzIGFyZSBhY2NvdW50ZWQgaW4gdmRwYV9tYXAo KSwgdGh1cwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHdpbGwgYmUgaGFuZGxlZCBi eSB2ZHBhX3VubWFwKCkuCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKHBmbiA9IG1hcF9wZm47IHBmbiA8PSBsYXN0X3Bmbjsg cGZuKyspCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVucGluX3VzZXJfcGFn ZShwZm5fdG9fcGFnZShwZm4pKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgdmhvc3RfdmRwYV91bm1hcCh2LCBtc2ctPmlvdmEsIG1zZy0+c2l6ZSk7Cj4+PiAt wqDCoMKgwqDCoMKgwqAgYXRvbWljNjRfc3ViKG5wYWdlcywgJmRldi0+bW0tPnBpbm5lZF92bSk7 Cj4+PiDCoMKgwqDCoMKgIH0KPj4+ICt1bmxvY2s6Cj4+PiDCoMKgwqDCoMKgIG1tYXBfcmVhZF91 bmxvY2soZGV2LT5tbSk7Cj4+PiArZnJlZToKPj4+IMKgwqDCoMKgwqAgZnJlZV9wYWdlKCh1bnNp Z25lZCBsb25nKXBhZ2VfbGlzdCk7Cj4+PiDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiDCoCB9 Cj4+Cj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZp cnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3Vu ZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0 aW5mby92aXJ0dWFsaXphdGlvbg==