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 Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD8EFC433F5 for ; Thu, 27 Jan 2022 13:48:15 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 1334640BC2; Thu, 27 Jan 2022 08:48:15 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Authentication-Results: mm01.cs.columbia.edu (amavisd-new); dkim=softfail (fail, message has been altered) header.i=@redhat.com Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id LzxlzeOmJHnq; Thu, 27 Jan 2022 08:48:13 -0500 (EST) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 71DD849ED2; Thu, 27 Jan 2022 08:48:13 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 1873C40BC2 for ; Thu, 27 Jan 2022 08:48:12 -0500 (EST) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Y4hSjHqIZsXz for ; Thu, 27 Jan 2022 08:48:10 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 8DAC140B85 for ; Thu, 27 Jan 2022 08:48:10 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1643291290; 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=qeMejuqUYSLLdd514sPE+ORPHLaeU4t8CK+PCMHAxZ8=; b=BVdXGI8Zz/7lKgttHtRT9xB1HQXWQzOppoOBVF7REE7dPfAzeFNgicfR3Pn3XgbSvZNhx1 RADgPs8N2iu0acJt4s1x209fGAuVG9zogp4FMQtyLn2tl93bKquaWQF/PgRlpEy13zKjI2 bUWn+AUkTRgCAkXDtPOdZl1XbWdLSJc= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-350-uVSXNgCrOBi_lDqMWUhBaw-1; Thu, 27 Jan 2022 08:48:08 -0500 X-MC-Unique: uVSXNgCrOBi_lDqMWUhBaw-1 Received: by mail-wm1-f72.google.com with SMTP id s1-20020a1ca901000000b0034ece94dd8cso4213751wme.5 for ; Thu, 27 Jan 2022 05:48:08 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=qeMejuqUYSLLdd514sPE+ORPHLaeU4t8CK+PCMHAxZ8=; b=KKmik/1GCX5/Undvfe2cX1oVfrsVumvlpvKTbnOYHsYSU5C+JSTCxzmouAb7w0lKhq 6Y/vRh5+qR88bRexMwaU6WqtU35AVOXXx+Ael5thWzUPftppDiFjSNrRzef0rxKFmMcQ 04qpE4NHCpPPgYxH9GPWaL+437hI1rHlHMIbJjpJFsF6Jbv/I5SulBoQhXUK3Bg2c0ka qbJFl27WRvw1cnn0i1jfctpXBXLLrbfBLBnzv0GQ1qcrOl7pjAECwab1NIOhr4INADS6 qYZ1t30E2/oJxGoOctkrN97Kmr8zAVMl4JKFbF1Yt0GxywQuCJvHdBOumBEHmPxcorQK dA/A== X-Gm-Message-State: AOAM533CR012DVV+olFJz5g2gBYH5oyZ5TI/dKJUtp4t6B7kgZz526+W 2v3hHAjDK4js+WnYknhKljovhgxo85phJPohyRAnEAvKHaYNMSHUcQqZ2kGz2JacnI9th4qQPZI Upo/+3oH5APiNllNVUUSWGEct X-Received: by 2002:a05:6000:1e07:: with SMTP id bj7mr3126096wrb.154.1643291287410; Thu, 27 Jan 2022 05:48:07 -0800 (PST) X-Google-Smtp-Source: ABdhPJx1yi36HsEaCv3P3WgyXf8vZRq5KMr2tYugmYroN9fO4JUtAwBtQuhc2nSv+yeb4QeF5DfhwQ== X-Received: by 2002:a05:6000:1e07:: with SMTP id bj7mr3126072wrb.154.1643291287167; Thu, 27 Jan 2022 05:48:07 -0800 (PST) Received: from ?IPv6:2a01:e0a:59e:9d80:527b:9dff:feef:3874? ([2a01:e0a:59e:9d80:527b:9dff:feef:3874]) by smtp.gmail.com with ESMTPSA id h1sm2120913wrq.82.2022.01.27.05.48.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 27 Jan 2022 05:48:06 -0800 (PST) Subject: Re: [PATCH v4 16/21] KVM: arm64: Support SDEI ioctl commands on VM To: Gavin Shan , kvmarm@lists.cs.columbia.edu References: <20210815001352.81927-1-gshan@redhat.com> <20210815001352.81927-17-gshan@redhat.com> <6a4f1736-3af0-ccaa-e8a0-242759610430@redhat.com> <96776800-d6fd-757b-348b-e566f068ed2a@redhat.com> From: Eric Auger Message-ID: Date: Thu, 27 Jan 2022 14:48:05 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <96776800-d6fd-757b-348b-e566f068ed2a@redhat.com> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=eauger@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Cc: maz@kernel.org, pbonzini@redhat.com, will@kernel.org, linux-kernel@vger.kernel.org, Jonathan.Cameron@huawei.com X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu SGkgZ2F2aW4sCgpPbiAxLzEyLzIyIDg6MDMgQU0sIEdhdmluIFNoYW4gd3JvdGU6Cj4gSGkgRXJp YywKPiAKPiBPbiAxMS8xMC8yMSA5OjQ4IFBNLCBFcmljIEF1Z2VyIHdyb3RlOgo+PiBPbiA4LzE1 LzIxIDI6MTMgQU0sIEdhdmluIFNoYW4gd3JvdGU6Cj4+PiBUaGlzIHN1cHBvcnRzIGlvY3RsIGNv bW1hbmRzIG9uIFZNIHRvIG1hbmFnZSB0aGUgdmFyaW91cyBvYmplY3RzLgo+Pj4gSXQncyBwcmlt YXJpbHkgdXNlZCBieSBWTU0gdG8gYWNjb21wbGlzaCBsaXZlIG1pZ3JhdGlvbi4gVGhlIGlvY3Rs Cj4+PiBjb21tYW5kcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgYXJlIGhpZ2hsaWdodGVkIGFzIGJsb3c6 Cj4+IGJlbG93Cj4+Pgo+Pj4gwqDCoMKgICogS1ZNX1NERUlfQ01EX0dFVF9WRVJTSU9OCj4+PiDC oMKgwqDCoMKgIFJldHJpZXZlIHRoZSB2ZXJzaW9uIG9mIGN1cnJlbnQgaW1wbGVtZW50YXRpb24K Pj4gd2hpY2ggaW1wbGVtZW50YXRpb24sIFNERUk/Cj4+PiDCoMKgwqAgKiBLVk1fU0RFSV9DTURf U0VUX0VWRU5UCj4+PiDCoMKgwqDCoMKgIEFkZCBldmVudCB0byBiZSBleHBvcnRlZCBmcm9tIEtW TSBzbyB0aGF0IGd1ZXN0IGNhbiByZWdpc3Rlcgo+Pj4gwqDCoMKgwqDCoCBhZ2FpbnN0IGl0IGFm dGVyd2FyZHMKPj4+IMKgwqDCoCAqIEtWTV9TREVJX0NNRF9HRVRfS0VWRU5UX0NPVU5UCj4+PiDC oMKgwqDCoMKgIFJldHJpZXZlIG51bWJlciBvZiByZWdpc3RlcmVkIFNERUkgZXZlbnRzCj4+PiDC oMKgwqAgKiBLVk1fU0RFSV9DTURfR0VUX0tFVkVOVAo+Pj4gwqDCoMKgwqDCoCBSZXRyaWV2ZSB0 aGUgc3RhdGUgb2YgdGhlIHJlZ2lzdGVyZWQgU0RFSSBldmVudAo+Pj4gwqDCoMKgICogS1ZNX1NE RUlfQ01EX1NFVF9LRVZFTlQKPj4+IMKgwqDCoMKgwqAgUG9wdWxhdGUgdGhlIHJlZ2lzdGVyZWQg U0RFSSBldmVudAo+PiBJIHRoaW5rIHdlIHJlYWxseSBtaXNzIHRoZSBmdWxsIHBpY3R1cmUgb2Yg d2hhdCB5b3Ugd2FudCB0byBhY2hpZXZlIHdpdGgKPj4gdGhvc2UgSU9DVExzIG9yIGF0IGxlYXN0 IEkgZmFpbCB0byBnZXQgaXQuIFBsZWFzZSBkb2N1bWVudCB0aGUgVUFQSQo+PiBzZXBhcmF0ZWx5 IGluY2x1ZGluZyB0aGUgc3RydWN0cyBhbmQgSU9DVExzLgo+IAo+IFRoZSBjb21taXQgbG9nIHdp bGwgYmUgaW1wcm92ZWQgYWNjb3JkaW5nbHkgaW4gbmV4dCByZXZpc2lvbi4gWWVwLCBJIHdpbGwK PiBhZGQgZG9jdW1lbnQgZm9yIFVBUEkgYW5kIElPQ1RMcyA6KQo+IAo+Pj4KPj4+IFNpZ25lZC1v ZmYtYnk6IEdhdmluIFNoYW4gPGdzaGFuQHJlZGhhdC5jb20+Cj4+PiAtLS0KPj4+IMKgIGFyY2gv YXJtNjQvaW5jbHVkZS9hc20va3ZtX3NkZWkuaMKgwqDCoMKgwqAgfMKgwqAgMSArCj4+PiDCoCBh cmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtX3NkZWkuaCB8wqAgMTcgKysrCj4+PiDCoCBh cmNoL2FybTY0L2t2bS9hcm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 wqDCoCAzICsKPj4+IMKgIGFyY2gvYXJtNjQva3ZtL3NkZWkuY8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfCAxNzEgKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gwqAgaW5j bHVkZS91YXBpL2xpbnV4L2t2bS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAz ICsKPj4+IMKgIDUgZmlsZXMgY2hhbmdlZCwgMTk1IGluc2VydGlvbnMoKykKPj4+Cj4+PiBkaWZm IC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fc2RlaS5oCj4+PiBiL2FyY2gvYXJt NjQvaW5jbHVkZS9hc20va3ZtX3NkZWkuaAo+Pj4gaW5kZXggMTlmMmQ5YjkxZjg1Li44ZjVlYTk0 N2VkMGUgMTAwNjQ0Cj4+PiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9zZGVpLmgK Pj4+ICsrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX3NkZWkuaAo+Pj4gQEAgLTEyNSw2 ICsxMjUsNyBAQCBpbnQga3ZtX3NkZWlfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7 Cj4+PiDCoCBpbnQga3ZtX3NkZWlfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCB1 bnNpZ25lZCBsb25nIG51bSwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAga3ZtX3NkZWlfbm90aWZpZXIgbm90aWZpZXIpOwo+Pj4gwqAgdm9pZCBrdm1fc2RlaV9k ZWxpdmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cj4+PiArbG9uZyBrdm1fc2RlaV92bV9pb2N0 bChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgYXJnKTsKPj4+IMKgIHZvaWQga3ZtX3Nk ZWlfZGVzdHJveV92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Cj4+PiDCoCB2b2lkIGt2bV9z ZGVpX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKTsKPj4+IMKgIGRpZmYgLS1naXQgYS9hcmNo L2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtX3NkZWkuaAo+Pj4gYi9hcmNoL2FybTY0L2luY2x1 ZGUvdWFwaS9hc20va3ZtX3NkZWkuaAo+Pj4gaW5kZXggNGVmNjYxZDEwNmZlLi4zNWZmMDViZTNj MjggMTAwNjQ0Cj4+PiAtLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20va3ZtX3NkZWku aAo+Pj4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL2t2bV9zZGVpLmgKPj4+IEBA IC01Nyw1ICs1NywyMiBAQCBzdHJ1Y3Qga3ZtX3NkZWlfdmNwdV9zdGF0ZSB7Cj4+PiDCoMKgwqDC oMKgIHN0cnVjdCBrdm1fc2RlaV92Y3B1X3JlZ3PCoMKgwqAgbm9ybWFsX3JlZ3M7Cj4+PiDCoCB9 Owo+Pj4gwqAgKyNkZWZpbmUgS1ZNX1NERUlfQ01EX0dFVF9WRVJTSU9OwqDCoMKgwqDCoMKgwqAg MAo+Pj4gKyNkZWZpbmUgS1ZNX1NERUlfQ01EX1NFVF9FVkVOVMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgMQo+Pj4gKyNkZWZpbmUgS1ZNX1NERUlfQ01EX0dFVF9LRVZFTlRfQ09VTlTCoMKgwqDCoMKg wqDCoCAyCj4+PiArI2RlZmluZSBLVk1fU0RFSV9DTURfR0VUX0tFVkVOVMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMwo+Pj4gKyNkZWZpbmUgS1ZNX1NERUlfQ01EX1NFVF9LRVZFTlTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDQKPj4+ICsKPj4+ICtzdHJ1Y3Qga3ZtX3NkZWlfY21kIHsKPj4+ICvCoMKg wqAgX191MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNt ZDsKPj4+ICvCoMKgwqAgdW5pb24gewo+Pj4gK8KgwqDCoMKgwqDCoMKgIF9fdTMywqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdmVyc2lvbjsKPj4+ICvCoMKgwqDCoMKgwqDC oCBfX3UzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvdW50Owo+Pj4g K8KgwqDCoMKgwqDCoMKgIF9fdTY0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbnVtOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBrdm1fc2RlaV9ldmVudF9zdGF0ZcKg wqDCoMKgwqDCoMKgIGtzZV9zdGF0ZTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qga3ZtX3Nk ZWlfa3ZtX2V2ZW50X3N0YXRlwqDCoMKgwqDCoMKgwqAga3NrZV9zdGF0ZTsKPj4+ICvCoMKgwqAg fTsKPj4+ICt9Owo+Pj4gKwo+Pj4gwqAgI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KPj4+IMKg ICNlbmRpZiAvKiBfVUFQSV9fQVNNX0tWTV9TREVJX0ggKi8KPj4+IGRpZmYgLS1naXQgYS9hcmNo L2FybTY0L2t2bS9hcm0uYyBiL2FyY2gvYXJtNjQva3ZtL2FybS5jCj4+PiBpbmRleCAwYzNkYjFl ZjFiYTkuLjhkNjE1ODUxMjRiMiAxMDA2NDQKPj4+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL2FybS5j Cj4+PiArKysgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwo+Pj4gQEAgLTEzODksNiArMTM4OSw5IEBA IGxvbmcga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVGQVVMVDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4ga3ZtX3ZtX2lvY3RsX210ZV9jb3B5X3RhZ3Moa3ZtLCAmY29weV90YWdzKTsKPj4+IMKg wqDCoMKgwqAgfQo+Pj4gK8KgwqDCoCBjYXNlIEtWTV9BUk1fU0RFSV9DT01NQU5EOiB7Cj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIGt2bV9zZGVpX3ZtX2lvY3RsKGt2bSwgYXJnKTsKPj4+ICvC oMKgwqAgfQo+Pj4gwqDCoMKgwqDCoCBkZWZhdWx0Ogo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRUlOVkFMOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02 NC9rdm0vc2RlaS5jIGIvYXJjaC9hcm02NC9rdm0vc2RlaS5jCj4+PiBpbmRleCA1ZjdhMzdkY2Fh NzcuLmJkZDc2YzNlNTE1MyAxMDA2NDQKPj4+IC0tLSBhL2FyY2gvYXJtNjQva3ZtL3NkZWkuYwo+ Pj4gKysrIGIvYXJjaC9hcm02NC9rdm0vc2RlaS5jCj4+PiBAQCAtOTMxLDYgKzkzMSwxNzcgQEAg dm9pZCBrdm1fc2RlaV9jcmVhdGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4+PiDCoMKg wqDCoMKgIHZjcHUtPmFyY2guc2RlaSA9IHZzZGVpOwo+Pj4gwqAgfQo+Pj4gwqAgK3N0YXRpYyBs b25nIGt2bV9zZGVpX3NldF9ldmVudChzdHJ1Y3Qga3ZtICprdm0sCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBrdm1fc2RlaV9ldmVudF9zdGF0ZSAqa3Nl X3N0YXRlKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IGt2bV9zZGVpX2t2bSAqa3NkZWkgPSBr dm0tPmFyY2guc2RlaTsKPj4+ICvCoMKgwqAgc3RydWN0IGt2bV9zZGVpX2V2ZW50ICprc2UgPSBO VUxMOwo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAoIWt2bV9zZGVpX2lzX3ZhbGlkX2V2ZW50X251bShr c2Vfc3RhdGUtPm51bSkpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+PiAr Cj4+PiArwqDCoMKgIGlmICghKGtzZV9zdGF0ZS0+dHlwZSA9PSBTREVJX0VWRU5UX1RZUEVfU0hB UkVEIHx8Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgIGtzZV9zdGF0ZS0+dHlwZSA9PSBTREVJX0VW RU5UX1RZUEVfUFJJVkFURSkpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ PiArCj4+PiArwqDCoMKgIGlmICghKGtzZV9zdGF0ZS0+cHJpb3JpdHkgPT0gU0RFSV9FVkVOVF9Q UklPUklUWV9OT1JNQUwgfHwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqAga3NlX3N0YXRlLT5wcmlv cml0eSA9PSBTREVJX0VWRU5UX1BSSU9SSVRZX0NSSVRJQ0FMKSkKPj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICvCoMKgwqAga3NlID0ga3ZtX3NkZWlfZmluZF9l dmVudChrdm0sIGtzZV9zdGF0ZS0+bnVtKTsKPj4+ICvCoMKgwqAgaWYgKGtzZSkKPj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVFWElTVDsKPj4+ICsKPj4+ICvCoMKgwqAga3NlID0ga3phbGxv YyhzaXplb2YoKmtzZSksIEdGUF9LRVJORUwpOwo+Pj4gK8KgwqDCoCBpZiAoIWtzZSkKPj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gdXNlcnNwYWNlIGNhbiBleGhhdXN0IHRo ZSBtZW0gc2luY2UgdGhlcmUgaXMgbm8gbGltaXQuIFRoZXJlIG11c3QgYmUgYQo+PiBtYXguCj4+ Cj4gCj4gT2suIEkgdGhpbmsgaXQncyBtaW5vciBvciBjb3JuZXIgY2FzZS4gRm9yIG5vdywgdGhl IG51bWJlciBvZiBkZWZpbmVkIFNERUkKPiBldmVudHMgYXJlIG9ubHkgb25lLiBJIGxlYXZlIGl0 IGZvciBzb21ldGhpbmcgdG8gYmUgaW1wcm92ZWQgaW4gZnV0dXJlLgpIdW0gb2ssIGFjdHVhbGx5 IHRoaXMgZGVwZW5kcyBvbiBrdm1fc2RlaV9pc192YWxpZF9ldmVudF9udW0ncwppbXBsZW1lbnRh dGlvbi4KPiAKPj4+ICsKPj4+ICvCoMKgwqAga3NlLT5zdGF0ZSA9ICprc2Vfc3RhdGU7Cj4+PiAr wqDCoMKgIGtzZS0+a3ZtID0ga3ZtOwo+Pj4gK8KgwqDCoCBsaXN0X2FkZF90YWlsKCZrc2UtPmxp bmssICZrc2RlaS0+ZXZlbnRzKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBsb25nIGt2bV9zZGVpX2dldF9rZXZlbnRfY291bnQoc3RydWN0IGt2 bSAqa3ZtLCBpbnQgKmNvdW50KQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IGt2bV9zZGVpX2t2 bSAqa3NkZWkgPSBrdm0tPmFyY2guc2RlaTsKPj4+ICvCoMKgwqAgc3RydWN0IGt2bV9zZGVpX2t2 bV9ldmVudCAqa3NrZSA9IE5VTEw7Cj4+PiArwqDCoMKgIGludCB0b3RhbCA9IDA7Cj4+PiArCj4+ PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoa3NrZSwgJmtzZGVpLT5rdm1fZXZlbnRzLCBs aW5rKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgdG90YWwrKzsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+ Pj4gK8KgwqDCoCAqY291bnQgPSB0b3RhbDsKPj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBsb25nIGt2bV9zZGVpX2dldF9rZXZlbnQoc3RydWN0IGt2bSAqa3Zt LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qga3ZtX3NkZWlfa3Zt X2V2ZW50X3N0YXRlICprc2tlX3N0YXRlKQpzaG91bGRuJ3QgdGhlIGZ1bmN0aW9uIHJldHVybiBh IGludCBpbnN0ZWFkPwo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IGt2bV9zZGVpX2t2bSAqa3Nk ZWkgPSBrdm0tPmFyY2guc2RlaTsKPj4+ICvCoMKgwqAgc3RydWN0IGt2bV9zZGVpX2t2bV9ldmVu dCAqa3NrZSA9IE5VTEw7Cj4+PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBUaGUg Zmlyc3QgZW50cnkgaXMgZmV0Y2hlZCBpZiB0aGUgZXZlbnQgbnVtYmVyIGlzIGludmFsaWQuCj4+ PiArwqDCoMKgwqAgKiBPdGhlcndpc2UsIHRoZSBuZXh0IGVudHJ5IGlzIGZldGNoZWQuCj4+IHdo eSBkb24ndCB3ZSByZXR1cm4gYW4gZXJyb3I/IFdoYXQgaXMgdGhlIHBvaW50IHJldHVybmluZyB0 aGUgbmV4dCBlbnRyeT8KPiAKPiBUaGUgU0RFSSBldmVudHMgYXR0YWNoZWQgdG8gdGhlIEtWTSBh cmUgbWlncmF0ZWQgb25lIGJ5IG9uZS4gVGhvZXNlCj4gYXR0YWNoZWQKPiBTREVJIGV2ZW50cyBh cmUgbGlua2VkIHRocm91Z2ggYSBsaW5rZWQgbGlzdDoKPiAKPiDCoMKgwqAgKDEpIG9uICFrdm1f c2RlaV9pc192YWxpZF9ldmVudF9udW0oa3NrZV9zdGF0ZS0+bnVtKSwgdGhlIGZpcnN0IFNERUkK PiBldmVudAo+IMKgwqDCoMKgwqDCoMKgIGluIHRoZSBsaW5rZWQgbGlzdCBpcyByZXRyaWV2ZWQg ZnJvbSBzb3VyY2UgVk0gYW5kIHdpbGwgYmUKPiByZXN0b3JlZCBvbgo+IMKgwqDCoMKgwqDCoMKg IHRoZSBkZXN0aW5hdGlvbiBWTS4KPiAKPiDCoMKgwqAgKDIpIE90aGVyd2lzZSwgdGhlIG5leHQg U0RFSSBldmVudCBpbiB0aGUgbGlua2VkIGxpc3Qgd2lsbCBiZSByZXRyaWV2ZWQKPiDCoMKgwqDC oMKgwqDCoCBmcm9tIHNvdXJjZSBWTSBhbmQgcmVzdG9yZWQgb24gdGhlIGRlc3RpbmF0aW9uIFZN LgoKYW5kIHdoeSBub3QgcmV0dXJuaW5nIE5VTEwgaWYgdGhlIG51bSBpcyBpbmNvcnJlY3Q/IFdo eSBkbyByZXR1cm4gdGhlCjFzdCBlbGVtPwoKRXJpYwo+IAo+IEFub3RoZXIgb3B0aW9uIGlzIHRv IGludHJvZHVjZSBhZGRpdGlvbmFsIHN0cnVjdCBsaWtlIGJlbG93LiBJbiB0aGlzCj4gd2F5LCBh bGwKPiB0aGUgYXR0YWNoZWQgU0RFSSBldmVudHMgYXJlIHJldHJpZXZlZCBhbmQgcmVzdG9yZWQg b25jZS4gSW4gdGhpcyB3YXksIHRoZQo+IG1lbW9yeSBibG9jayB1c2VkIGZvciBzdG9yaW5nIEBr dm1fc2RlaV9rdm1fZXZlbnRfc3RhdGUgc2hvdWxkIGJlIGFsbG9jYXRlZAo+IGFuZCByZWxlYXNl ZCBieSBRRU1VLiBQbGVhc2UgbGV0IG1lIGtub3cgeW91ciBwcmVmZXJlbmNlOgo+IAo+IMKgwqDC oCBzdHJ1Y3QgeHh4IHsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX3U2NMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY291bnQ7Cj4gwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGt2bV9zZGVpX2t2bV9ldmVudF9zdGF0ZcKgwqDCoCBl dmVudHM7Cj4gwqDCoMKgIH0KPiAKPj4+ICvCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoCBpZiAoIWt2 bV9zZGVpX2lzX3ZhbGlkX2V2ZW50X251bShrc2tlX3N0YXRlLT5udW0pKSB7Cj4+PiArwqDCoMKg wqDCoMKgwqAga3NrZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgma3NkZWktPmt2bV9ldmVu dHMsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBrdm1fc2RlaV9r dm1fZXZlbnQsIGxpbmspOwo+Pj4gK8KgwqDCoCB9IGVsc2Ugewo+Pj4gK8KgwqDCoMKgwqDCoMKg IGtza2UgPSBrdm1fc2RlaV9maW5kX2t2bV9ldmVudChrdm0sIGtza2Vfc3RhdGUtPm51bSk7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKGtza2UgJiYgIWxpc3RfaXNfbGFzdCgma3NrZS0+bGluaywg JmtzZGVpLT5rdm1fZXZlbnRzKSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtza2UgPSBs aXN0X25leHRfZW50cnkoa3NrZSwgbGluayk7Cj4+IFNvcnJ5IEkgZG9uJ3QgZ2V0IHdoeSB3ZSBy ZXR1cm4gdGhlIG5leHQgb25lPwo+IAo+IFBsZWFzZSByZWZlciB0byB0aGUgZXhwbGFuYXRpb24g YWJvdmUuCj4gCj4+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAga3NrZSA9IE5VTEw7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgaWYgKCFr c2tlKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PRU5UOwo+Pj4gKwo+Pj4gK8KgwqDC oCAqa3NrZV9zdGF0ZSA9IGtza2UtPnN0YXRlOwo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGxvbmcga3ZtX3NkZWlfc2V0X2tldmVudChzdHJ1Y3Qg a3ZtICprdm0sCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBrdm1f c2RlaV9rdm1fZXZlbnRfc3RhdGUgKmtza2Vfc3RhdGUpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1 Y3Qga3ZtX3NkZWlfa3ZtICprc2RlaSA9IGt2bS0+YXJjaC5zZGVpOwo+Pj4gK8KgwqDCoCBzdHJ1 Y3Qga3ZtX3NkZWlfZXZlbnQgKmtzZSA9IE5VTEw7Cj4+PiArwqDCoMKgIHN0cnVjdCBrdm1fc2Rl aV9rdm1fZXZlbnQgKmtza2UgPSBOVUxMOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBTYW5pdHkgY2hl Y2sgKi8KPj4+ICvCoMKgwqAgaWYgKCFrdm1fc2RlaV9pc192YWxpZF9ldmVudF9udW0oa3NrZV9z dGF0ZS0+bnVtKSkKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ ICvCoMKgwqAgaWYgKCEoa3NrZV9zdGF0ZS0+cm91dGVfbW9kZSA9PSBTREVJX0VWRU5UX1JFR0lT VEVSX1JNX0FOWSB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoCBrc2tlX3N0YXRlLT5yb3V0ZV9t b2RlID09IFNERUlfRVZFTlRfUkVHSVNURVJfUk1fUEUpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBDaGVjayBpZiB0aGUgZXZlbnQgbnVt YmVyIGlzIHZhbGlkICovCj4+PiArwqDCoMKgIGtzZSA9IGt2bV9zZGVpX2ZpbmRfZXZlbnQoa3Zt LCBrc2tlX3N0YXRlLT5udW0pOwo+Pj4gK8KgwqDCoCBpZiAoIWtzZSkKPj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVOT0VOVDsKPj4+ICsKPj4+ICvCoMKgwqAgLyogQ2hlY2sgaWYgdGhlIGV2 ZW50IGhhcyBiZWVuIHBvcHVsYXRlZCAqLwo+Pj4gK8KgwqDCoCBrc2tlID0ga3ZtX3NkZWlfZmlu ZF9rdm1fZXZlbnQoa3ZtLCBrc2tlX3N0YXRlLT5udW0pOwo+Pj4gK8KgwqDCoCBpZiAoa3NrZSkK Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVFWElTVDsKPj4+ICsKPj4+ICvCoMKgwqAga3Nr ZSA9IGt6YWxsb2Moc2l6ZW9mKCprc2tlKSwgR0ZQX0tFUk5FTCk7Cj4+IHVzZXJzcGFjZSBjYW4g ZXhoYXVzdCB0aGUgbWVtIHNpbmNlIHRoZXJlIGlzIG5vIGxpbWl0Cj4gCj4gT2suCj4gCj4+PiAr wqDCoMKgIGlmICgha3NrZSkKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4+ ICsKPj4+ICvCoMKgwqAga3NrZS0+c3RhdGUgPSAqa3NrZV9zdGF0ZTsKPj4+ICvCoMKgwqAga3Nr ZS0+a3NlwqDCoCA9IGtzZTsKPj4+ICvCoMKgwqAga3NrZS0+a3ZtwqDCoCA9IGt2bTsKPj4+ICvC oMKgwqAgbGlzdF9hZGRfdGFpbCgma3NrZS0+bGluaywgJmtzZGVpLT5rdm1fZXZlbnRzKTsKPj4+ ICsKPj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK2xvbmcga3ZtX3NkZWlf dm1faW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFyZykKPj4+ICt7Cj4+PiAr wqDCoMKgIHN0cnVjdCBrdm1fc2RlaV9rdm0gKmtzZGVpID0ga3ZtLT5hcmNoLnNkZWk7Cj4+PiAr wqDCoMKgIHN0cnVjdCBrdm1fc2RlaV9jbWQgKmNtZCA9IE5VTEw7Cj4+PiArwqDCoMKgIHZvaWQg X191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwo+Pj4gK8KgwqDCoCBib29sIGNvcHkg PSBmYWxzZTsKPj4+ICvCoMKgwqAgbG9uZyByZXQgPSAwOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBT YW5pdHkgY2hlY2sgKi8KPj4+ICvCoMKgwqAgaWYgKCFrc2RlaSkgewo+Pj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IC1FUEVSTTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4+ICvCoMKg wqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBjbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tF Uk5FTCk7Cj4+PiArwqDCoMKgIGlmICghY21kKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0g LUVOT01FTTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4+ICvCoMKgwqAgfQo+Pj4g Kwo+Pj4gK8KgwqDCoCBpZiAoY29weV9mcm9tX3VzZXIoY21kLCBhcmdwLCBzaXplb2YoKmNtZCkp KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVGQVVMVDsKPj4+ICvCoMKgwqDCoMKgwqDC oCBnb3RvIG91dDsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBzcGluX2xvY2soJmtz ZGVpLT5sb2NrKTsKPj4+ICsKPj4+ICvCoMKgwqAgc3dpdGNoIChjbWQtPmNtZCkgewo+Pj4gK8Kg wqDCoCBjYXNlIEtWTV9TREVJX0NNRF9HRVRfVkVSU0lPTjoKPj4+ICvCoMKgwqDCoMKgwqDCoCBj b3B5ID0gdHJ1ZTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBjbWQtPnZlcnNpb24gPSAoMSA8PCAxNik7 wqDCoMKgwqDCoMKgIC8qIHYxLjAuMCAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4g K8KgwqDCoCBjYXNlIEtWTV9TREVJX0NNRF9TRVRfRVZFTlQ6Cj4+PiArwqDCoMKgwqDCoMKgwqAg cmV0ID0ga3ZtX3NkZWlfc2V0X2V2ZW50KGt2bSwgJmNtZC0+a3NlX3N0YXRlKTsKPj4+ICvCoMKg wqDCoMKgwqDCoCBicmVhazsKPj4+ICvCoMKgwqAgY2FzZSBLVk1fU0RFSV9DTURfR0VUX0tFVkVO VF9DT1VOVDoKPj4+ICvCoMKgwqDCoMKgwqDCoCBjb3B5ID0gdHJ1ZTsKPj4+ICvCoMKgwqDCoMKg wqDCoCByZXQgPSBrdm1fc2RlaV9nZXRfa2V2ZW50X2NvdW50KGt2bSwgJmNtZC0+Y291bnQpOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCBjYXNlIEtWTV9TREVJX0NNRF9H RVRfS0VWRU5UOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIGNvcHkgPSB0cnVlOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIHJldCA9IGt2bV9zZGVpX2dldF9rZXZlbnQoa3ZtLCAmY21kLT5rc2tlX3N0YXRlKTsK Pj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+ICvCoMKgwqAgY2FzZSBLVk1fU0RFSV9DTURf U0VUX0tFVkVOVDoKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBrdm1fc2RlaV9zZXRfa2V2ZW50 KGt2bSwgJmNtZC0+a3NrZV9zdGF0ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiAr wqDCoMKgIGRlZmF1bHQ6Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4+ICvC oMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCBzcGluX3VubG9jaygma3NkZWktPmxvY2spOwo+Pj4g K291dDoKPj4+ICvCoMKgwqAgaWYgKCFyZXQgJiYgY29weSAmJiBjb3B5X3RvX3VzZXIoYXJncCwg Y21kLCBzaXplb2YoKmNtZCkpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FRkFVTFQ7Cj4+ PiArCj4+PiArwqDCoMKgIGtmcmVlKGNtZCk7Cj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+PiAr fQo+Pj4gKwo+Pj4gwqAgdm9pZCBrdm1fc2RlaV9kZXN0cm95X3ZjcHUoc3RydWN0IGt2bV92Y3B1 ICp2Y3B1KQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3Qga3ZtX3NkZWlfdmNwdSAqdnNk ZWkgPSB2Y3B1LT5hcmNoLnNkZWk7Cj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4 L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCj4+PiBpbmRleCBkOWU0YWFiY2IzMWEu LjhjZjQxZmQ0YmY4NiAxMDA2NDQKPj4+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAo+ Pj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCj4+PiBAQCAtMTY3OSw2ICsxNjc5LDkg QEAgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyIHsKPj4+IMKgICNkZWZpbmUgS1ZNX1hFTl9WQ1BV X0FUVFJfVFlQRV9SVU5TVEFURV9EQVRBwqDCoMKgIDB4NAo+Pj4gwqAgI2RlZmluZSBLVk1fWEVO X1ZDUFVfQVRUUl9UWVBFX1JVTlNUQVRFX0FESlVTVMKgwqDCoCAweDUKPj4+IMKgICsvKiBBdmFp bGFibGUgd2l0aCBLVk1fQ0FQX0FSTV9TREVJICovCj4+PiArI2RlZmluZSBLVk1fQVJNX1NERUlf Q09NTUFORMKgwqDCoCBfSU9XUihLVk1JTywgMHhjZSwgc3RydWN0IGt2bV9zZGVpX2NtZCkKPj4+ ICsKPj4+IMKgIC8qIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gY29tbWFuZCAqLwo+ Pj4gwqAgZW51bSBzZXZfY21kX2lkIHsKPj4+IMKgwqDCoMKgwqAgLyogR3Vlc3QgaW5pdGlhbGl6 YXRpb24gY29tbWFuZHMgKi8KPj4+Cj4gCj4gVGhhbmtzLAo+IEdhdmluCj4gCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwprdm1hcm0gbWFpbGluZyBsaXN0 Cmt2bWFybUBsaXN0cy5jcy5jb2x1bWJpYS5lZHUKaHR0cHM6Ly9saXN0cy5jcy5jb2x1bWJpYS5l ZHUvbWFpbG1hbi9saXN0aW5mby9rdm1hcm0K