From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=ga6lCGPQ; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTPS id 4B13C5A0280 for ; Wed, 09 Jul 2025 19:47:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1752083275; 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=9TiI179BUEqsHJMKW7UDunvnqoITchlG7bWd6/4l91E=; b=ga6lCGPQODhcqMwxBUFqDfmvYUj574lJSd1X1bKfbQCcnWLtgitVOUs1U8vA9VGiOPe4Mc 9ORbq04KJ+J7asI9vnPt2cNE6u3EyBTp8M15rCfG+OImDnS+Lp3OmXsaX7PA7ufIJi9To5 82fsnQTpgyQXJcN1TGn4dYAiWY6POlw= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-399-LdnF2w2yNaCWslD3fqpoDg-1; Wed, 09 Jul 2025 13:47:53 -0400 X-MC-Unique: LdnF2w2yNaCWslD3fqpoDg-1 X-Mimecast-MFC-AGG-ID: LdnF2w2yNaCWslD3fqpoDg_1752083273 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id EEDAF180028F for ; Wed, 9 Jul 2025 17:47:52 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.45.225.131]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C3B8730001B1; Wed, 9 Jul 2025 17:47:51 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: passt-dev@passt.top Subject: [RFC v2 01/11] tap: implement vhost_call_cb Date: Wed, 9 Jul 2025 19:47:38 +0200 Message-ID: <20250709174748.3514693-2-eperezma@redhat.com> In-Reply-To: <20250709174748.3514693-1-eperezma@redhat.com> References: <20250709174748.3514693-1-eperezma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: rxHQWfpUFeAl_3bcHWfidN0tZ9crMao1Z54iilsPgAg_1752083273 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: GSAPRLLOTIKVPW6X35TNOBD6JY3LPUDW X-Message-ID-Hash: GSAPRLLOTIKVPW6X35TNOBD6JY3LPUDW X-MailFrom: eperezma@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: jasowang@redhat.com X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: SW1wbGVtZW50IHRoZSByeCBzaWRlIG9mIHRoZSB2aG9zdC1rZXJuZWwsIHdoZXJlIHRoZSBuYW1l c3BhY2Ugc2VuZA0KcGFja2V0cyB0aHJvdWdoIGl0cyB0YXAgZGV2aWNlIGFuZCB0aGUga2VybmVs IHBhc3NlcyB0aGVtIHRvDQpwYXN0YSB1c2luZyBhIHZpcnRxdWV1ZS4gIFRoZSB2aXJ0cXVldWUg aXMgYnVpbGQgdXNpbmcgYQ0KdmlydHVhbCByaW5nICh2cmluZyksIHdoaWNoIGluY2x1ZGVzOg0K KiBBIGRlc2NyaXB0b3IgdGFibGUgKGJ1ZmZlciBpbmZvKQ0KKiBBbiBhdmFpbGFibGUgcmluZyAo YnVmZmVycyByZWFkeSBmb3IgdGhlIGtlcm5lbCkNCiogQSB1c2VkIHJpbmcgKGJ1ZmZlcnMgdGhh dCB0aGUga2VybmVsIGhhcyBmaWxsZWQpDQoNClRoZSBkZXNjcmlwdG9yIHRhYmxlIGhvbGRzIGFu IGFycmF5IG9mIGJ1ZmZlcnMgZGVmaW5lZCBieSBhZGRyZXNzIGFuZA0KbGVuZ3RoLiBUaGUga2Vy bmVsIHdyaXRlcyB0aGUgcGFja2V0cyB0cmFuc21pdHRlZCBieSB0aGUgbmFtZXNwYWNlIGludG8N CnRoZXNlIGJ1ZmZlcnMuICBUaGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzICh2cSBzaXplKSBpcyBz ZXQgYnkNClZIT1NUX05ERVNDUy4gIFBhc3RhIGZpbGxzIHRoaXMgdGFibGUgdXNpbmcgcGt0X2J1 Ziwgc3BsaXR0aW5nIGl0DQpldmVubHkgYWNyb3NzIGFsbCBkZXNjcmlwdG9ycy4gIFRoaXMgdGFi bGUgaXMgcmVhZC1vbmx5IGZvciB0aGUga2VybmVsLg0KDQpUaGUgYXZhaWxhYmxlIHJpbmcgaXMg d2hlcmUgcGFzdGEgbWFya3Mgd2hpY2ggYnVmZmVycyB0aGUga2VybmVsIGNhbg0KdXNlLiAgSXQn cyByZWFkIG9ubHkgZm9yIHRoZSBrZXJuZWwuICBJdCBpbmNsdWRlcyBhIHJpbmdbXSBhcnJheSB3 aXRoDQp0aGUgZGVzY3JpcHRvciBpbmRleGVzIGFuZCBhbiBhdmFpbC0+aWR4IGluZGV4LiBQYXN0 YSBpbmNyZW1lbnRzDQphdmFpbC0+aWR4IHdoZW4gYSBuZXcgYnVmZmVyIGlzIGFkZGVkLCBtb2R1 bG8gdGhlIHNpemUgb2YgdGhlDQp2aXJ0cXVldWUuICBBcyBwYXN0YSB3cml0ZXMgdGhlIHJ4IGJ1 ZmZlcnMgc2VxdWVudGlhbGx5LCByaW5nW10gaXMNCmFsd2F5cyBbMCwgMSwgMi4uLl0gYW5kIG9u bHkgYXZhaWwtPmlkeCBpcyBpbmNyZW1lbnRlZCB3aGVuIG5ldyBidWZmZXJzDQphcmUgYXZhaWxh YmxlIGZvciB0aGUga2VybmVsLiBhdmFpbC0+aWR4IGNhbiBiZSBpbmNyZW1lbnRlZCBieSBtb3Jl DQp0aGFuIG9uZSBhdCBhIHRpbWUuDQoNClBhc3RhIGFsc28gbm90aWZpZXMgdGhlIGtlcm5lbCBv ZiBuZXcgYXZhaWxhYmxlIGJ1ZmZlcnMgYnkgd3JpdGluZyB0bw0KdGhlIGtpY2sgZXZlbnRmZC4N Cg0KT25jZSB0aGUga2VybmVsIGhhcyB3cml0dGVuIGEgZnJhbWUgaW4gYSBkZXNjcmlwdG9yIGl0 IHdyaXRlcyBpdHMgaW5kZXgNCmludG8gdXNlZF9yaW5nLT5yaW5nW10gYW5kIGluY3JlbWVudHMg dGhlIHVzZWRfcmluZy0+aWR4IGFjY29yZGx5Lg0KTGlrZSB0aGUgYXZhaWwgaWR4IHRoZSBrZXJu ZWwgY2FuIGluY3JlYXNlIGl0IGJ5IG1vcmUgdGhhbiBvbmUuICBQYXN0YQ0KZ2V0cyBhIG5vdGlm aWNhdGlvbiBpbiB0aGUgY2FsbCBldmVudGZkLCBzbyB3ZSBhZGQgaXQgaW50byB0aGUgZXBvbGwg Y3R4Lg0KDQpQYXN0YSBhc3N1bWVzIGJ1ZmZlcnMgYXJlIHVzZWQgaW4gb3JkZXIuIFFFTVUgYWxz byBhc3N1bWVzIGl0IGluIHRoZQ0KdmlydGlvLW5ldCBtaWdyYXRpb24gY29kZSBzbyBpdCBpcyBz YWZlLg0KDQpOb3csIHZob3N0LWtlcm5lbCBpcyBkZXNpZ25lZCB0byByZWFkIHRoZSB2aXJ0cXVl dWVzIGFuZCB0aGUgYnVmZmVycyBhcw0KKmd1ZXN0KiBwaHlzaWNhbCBhZGRyZXNzZXMgKEdQQSks IG5vdCBwcm9jZXNzIHZpcnR1YWwgYWRkcmVzc2VzIChIVkEpLg0KVGhlIHdheSBRRU1VIHRlbGxz IHRoZSB0cmFuc2xhdGlvbnMgaXMgdGhyb3VnaCB0aGUgbWVtb3J5IHJlZ2lvbnMuDQpTaW5jZSB3 ZSBkb24ndCBoYXZlIEdQQXMsIGxldCdzIGp1c3Qgc2VuZCB0aGUgbWVtb3J5IHJlZ2lvbnMgYXMg YSAxOjENCnRyYW5zbGF0aW9ucyBvZiB0aGUgSFZBLg0KDQpUT0RPOiBFdmFsdWF0ZSBpZiB3ZSBj YW4gcmV1c2UgdGhlIHRhcCBmZCBjb2RlIGluc3RlYWQgb2YgbWFraW5nIGEgbmV3DQplcG9sbCBl dmVudCB0eXBlLg0KVE9ETzogU3BsaXQgYSBuZXcgZmlsZSBmb3Igdmhvc3QgKFN0ZWZhbm8pDQoN ClNpZ25lZC1vZmYtYnk6IEV1Z2VuaW8gUMOpcmV6IDxlcGVyZXptYUByZWRoYXQuY29tPg0KLS0t DQpSRkMgdjI6DQoqIE5lZWQgdG8gaW50ZWdyYXRlICJub3ciIHBhcmFtZXRlciBpbiB0YXBfYWRk X3BhY2tldCBhbmQgcmVwbGFjZQ0KVEFQX01TR1MgdG8gVEFQX01TR1N7NCw2fS4NCiogQWN0dWFs bHkgcmVmaWxsIHJ4IHF1ZXVlIGF0IHRoZSBlbmQgb2Ygb3BlcmF0aW9uLg0KKiBFeHBsYWluIHZp cnRxdWV1ZXMgYW5kIG1lbW9yeSByZWdpb25zIHRoZW9yeSBvZiBvcGVyYXRpb24uDQoqIEV4dHJh Y2sgdmhvc3Rfa2ljayBzbyBpdCBjYW4gYmUgcmV1c2VkIGJ5IHR4Lg0KKiBBZGQgbWFjcm8gZm9y IFZIT1NUIHJlZ2lvbnMuDQoqIE9ubHkgcmVnaXN0ZXIgY2FsbF9jYiBpbiByeCBxdWV1ZSwgYXMg dHggY2FsbHMgYXJlIGhhbmRsZWQganVzdCBpZg0KICBuZWVkZWQuDQoqIFJlbmFtZWQgdmhvc3Rf Y2FsbF9jYiB0byB0YXBfdmhvc3RfaW5wdXQgKERhdmlkKQ0KKiBNb3ZlIHRoZSBpbnVzZSBhbmQg bGFzdF91c2VkX2lkeCB0byBhIHdyaXRhYmxlIHN0cnVjdCBmcm9tIHZob3N0IHR4DQogIGZ1bmN0 aW9uLiBDb250ZXh0IGlzIHJlYWRvbmx5IGZvciB2aG9zdCB0eCBjb2RlIHBhdGguDQoqIENoYW5n ZWQgZnJvbSBpbnVzZSB0byBudW1fZnJlZSB0cmFja2luZywgbW9yZSBhbGlnbmVkIHdpdGgga2Vy bmVsIGRydg0KKiBVc2UgYWx3YXlzIHRoZSBzYW1lIHRhcF9wb29sIGluc3RlYWQgb2YgaGF2aW5n IHRoZSB0d28gc3BsaXR0ZWQgZm9yIHY0DQogIGFuZCB2Ni4NCiogU3BhY2UgYmV0d2VlbiAoc3Ry dWN0IHZob3N0X21lbW9yeV9yZWdpb24pIHsuWFhYID0gLi4ufS4gKFN0ZWZhbm8pDQoqIEV4cGFu ZCBjb21tZW50cyBhYm91dCBtZW1vcnkgcmVnaW9uIHNpemUgKERhdmlkKQ0KKiBBZGQgc29tZSBU T0RPcy4NCg0KU2lnbmVkLW9mZi1ieTogRXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhhdC5j b20+DQotLS0NCiBlcG9sbF90eXBlLmggfCAgIDIgKw0KIHBhc3N0LmMgICAgICB8ICAgNyArLQ0K IHBhc3N0LmggICAgICB8ICAxMCArLQ0KIHRhcC5jICAgICAgICB8IDMxMSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCiB0YXAuaCAgICAgICAgfCAg IDggKysNCiA1IGZpbGVzIGNoYW5nZWQsIDMzNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygt KQ0KDQpkaWZmIC0tZ2l0IGEvZXBvbGxfdHlwZS5oIGIvZXBvbGxfdHlwZS5oDQppbmRleCAxMmFj NTliLi4wMzcxYzE0IDEwMDY0NA0KLS0tIGEvZXBvbGxfdHlwZS5oDQorKysgYi9lcG9sbF90eXBl LmgNCkBAIC00NCw2ICs0NCw4IEBAIGVudW0gZXBvbGxfdHlwZSB7DQogCUVQT0xMX1RZUEVfUkVQ QUlSX0xJU1RFTiwNCiAJLyogVENQX1JFUEFJUiBoZWxwZXIgc29ja2V0ICovDQogCUVQT0xMX1RZ UEVfUkVQQUlSLA0KKwkvKiB2aG9zdC1rZXJuZWwgY2FsbCBzb2NrZXQgKi8NCisJRVBPTExfVFlQ RV9WSE9TVF9DQUxMLA0KIA0KIAlFUE9MTF9OVU1fVFlQRVMsDQogfTsNCmRpZmYgLS1naXQgYS9w YXNzdC5jIGIvcGFzc3QuYw0KaW5kZXggMzg4ZDEwZi4uMGYyNjU5YyAxMDA2NDQNCi0tLSBhL3Bh c3N0LmMNCisrKyBiL3Bhc3N0LmMNCkBAIC03OSw2ICs3OSw3IEBAIGNoYXIgKmVwb2xsX3R5cGVf c3RyW10gPSB7DQogCVtFUE9MTF9UWVBFX1ZIT1NUX0tJQ0tdCQk9ICJ2aG9zdC11c2VyIGtpY2sg c29ja2V0IiwNCiAJW0VQT0xMX1RZUEVfUkVQQUlSX0xJU1RFTl0JPSAiVENQX1JFUEFJUiBoZWxw ZXIgbGlzdGVuaW5nIHNvY2tldCIsDQogCVtFUE9MTF9UWVBFX1JFUEFJUl0JCT0gIlRDUF9SRVBB SVIgaGVscGVyIHNvY2tldCIsDQorCVtFUE9MTF9UWVBFX1ZIT1NUX0NBTExdCQk9ICJ2aG9zdC1r ZXJuZWwgY2FsbCBzb2NrZXQiLA0KIH07DQogc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKGVwb2xs X3R5cGVfc3RyKSA9PSBFUE9MTF9OVU1fVFlQRVMsDQogCSAgICAgICJlcG9sbF90eXBlX3N0cltd IGRvZXNuJ3QgbWF0Y2ggZW51bSBlcG9sbF90eXBlIik7DQpAQCAtMzEwLDcgKzMxMSw4IEBAIGxv b3A6DQogDQogCQlzd2l0Y2ggKHJlZi50eXBlKSB7DQogCQljYXNlIEVQT0xMX1RZUEVfVEFQX1BB U1RBOg0KLQkJCXRhcF9oYW5kbGVyX3Bhc3RhKCZjLCBldmVudG1hc2ssICZub3cpOw0KKwkJCS8v IFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5LCBtYXliZSByZXVzZSB0aGUgZmQuDQorCQkJLy8gdGFw X2hhbmRsZXJfcGFzdGEoJmMsIGV2ZW50bWFzaywgJm5vdyk7DQogCQkJYnJlYWs7DQogCQljYXNl IEVQT0xMX1RZUEVfVEFQX1BBU1NUOg0KIAkJCXRhcF9oYW5kbGVyX3Bhc3N0KCZjLCBldmVudG1h c2ssICZub3cpOw0KQEAgLTM1Nyw2ICszNTksOSBAQCBsb29wOg0KIAkJY2FzZSBFUE9MTF9UWVBF X1JFUEFJUjoNCiAJCQlyZXBhaXJfaGFuZGxlcigmYywgZXZlbnRtYXNrKTsNCiAJCQlicmVhazsN CisJCWNhc2UgRVBPTExfVFlQRV9WSE9TVF9DQUxMOg0KKwkJCXRhcF92aG9zdF9pbnB1dCgmYywg cmVmLCAmbm93KTsNCisJCQlicmVhazsNCiAJCWRlZmF1bHQ6DQogCQkJLyogQ2FuJ3QgaGFwcGVu ICovDQogCQkJQVNTRVJUKDApOw0KZGlmZiAtLWdpdCBhL3Bhc3N0LmggYi9wYXNzdC5oDQppbmRl eCA4NjkzNzk0Li43YmI4NmM0IDEwMDY0NA0KLS0tIGEvcGFzc3QuaA0KKysrIGIvcGFzc3QuaA0K QEAgLTQ1LDcgKzQ1LDcgQEAgdW5pb24gZXBvbGxfcmVmOw0KICAqIEBpY21wOglJQ01QLXNwZWNp ZmljIHJlZmVyZW5jZSBwYXJ0DQogICogQGRhdGE6CURhdGEgaGFuZGxlZCBieSBwcm90b2NvbCBo YW5kbGVycw0KICAqIEBuc2Rpcl9mZDoJbmV0bnMgZGlyZmQgZm9yIGZhbGxiYWNrIHRpbWVyIGNo ZWNraW5nIGlmIG5hbWVzcGFjZSBpcyBnb25lDQotICogQHF1ZXVlOgl2aG9zdC11c2VyIHF1ZXVl IGluZGV4IGZvciB0aGlzIGZkDQorICogQHF1ZXVlOgl2aG9zdCBxdWV1ZSBpbmRleCBmb3IgdGhp cyBmZA0KICAqIEB1NjQ6CU9wYXF1ZSByZWZlcmVuY2UgZm9yIGVwb2xsX2N0bCgpIGFuZCBlcG9s bF93YWl0KCkNCiAgKi8NCiB1bmlvbiBlcG9sbF9yZWYgew0KQEAgLTI2OSwxMSArMjY5LDE0IEBA IHN0cnVjdCBjdHggew0KIAlpbnQgZmRfdGFwOw0KIAlpbnQgZmRfcmVwYWlyX2xpc3RlbjsNCiAJ aW50IGZkX3JlcGFpcjsNCisJLyogVE9ETyBkb2N1bWVudCBhbGwgYWRkZWQgZmllbGRzICovDQor CWludCBmZF92aG9zdDsNCiAJdW5zaWduZWQgY2hhciBvdXJfdGFwX21hY1tFVEhfQUxFTl07DQog CXVuc2lnbmVkIGNoYXIgZ3Vlc3RfbWFjW0VUSF9BTEVOXTsNCiAJdWludDE2X3QgbXR1Ow0KIA0K IAl1aW50NjRfdCBoYXNoX3NlY3JldFsyXTsNCisJdWludDY0X3QgdmlydGlvX2ZlYXR1cmVzOw0K IA0KIAlpbnQgaWZpNDsNCiAJc3RydWN0IGlwNF9jdHggaXA0Ow0KQEAgLTI5Nyw2ICszMDAsMTEg QEAgc3RydWN0IGN0eCB7DQogCWludCBub19pY21wOw0KIAlzdHJ1Y3QgaWNtcF9jdHggaWNtcDsN CiANCisJc3RydWN0IHsNCisJCWludCBraWNrX2ZkOw0KKwkJaW50IGNhbGxfZmQ7DQorCX0gdnFb Ml07DQorDQogCWludCBub19kbnM7DQogCWludCBub19kbnNfc2VhcmNoOw0KIAlpbnQgbm9fZGhj cF9kbnM7DQpkaWZmIC0tZ2l0IGEvdGFwLmMgYi90YXAuYw0KaW5kZXggNmRiNWQ4OC4uZTRhMzgy MiAxMDA2NDQNCi0tLSBhL3RhcC5jDQorKysgYi90YXAuYw0KQEAgLTMxLDYgKzMxLDcgQEANCiAj aW5jbHVkZSA8c3lzL3R5cGVzLmg+DQogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQogI2luY2x1ZGUg PGZjbnRsLmg+DQorI2luY2x1ZGUgPHN5cy9ldmVudGZkLmg+DQogI2luY2x1ZGUgPHN5cy91aW8u aD4NCiAjaW5jbHVkZSA8c3RkYm9vbC5oPg0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCkBAIC0xMDEs NiArMTAyLDUxIEBAIHN0YXRpYyBQQUNLRVRfUE9PTF9OT0lOSVQocG9vbF90YXA2LCBUQVBfTVNH U19JUDYsIHBrdF9idWYpOw0KICNkZWZpbmUgVEFQX1NFUVMJCTEyOCAvKiBEaWZmZXJlbnQgTDQg dHVwbGVzIGluIG9uZSBiYXRjaCAqLw0KICNkZWZpbmUgRlJBR01FTlRfTVNHX1JBVEUJMTAgIC8q ICMgc2Vjb25kcyBiZXR3ZWVuIGZyYWdtZW50IHdhcm5pbmdzICovDQogDQorI2RlZmluZSBWSE9T VF9WSVJUSU8gICAgICAgICAweEFGDQorI2RlZmluZSBWSE9TVF9HRVRfRkVBVFVSRVMgICBfSU9S KFZIT1NUX1ZJUlRJTywgMHgwMCwgX191NjQpDQorI2RlZmluZSBWSE9TVF9TRVRfRkVBVFVSRVMg ICBfSU9XKFZIT1NUX1ZJUlRJTywgMHgwMCwgX191NjQpDQorI2RlZmluZSBWSE9TVF9TRVRfT1dO RVIJICAgICBfSU8oVkhPU1RfVklSVElPLCAweDAxKQ0KKyNkZWZpbmUgVkhPU1RfU0VUX01FTV9U QUJMRSAgX0lPVyhWSE9TVF9WSVJUSU8sIDB4MDMsIHN0cnVjdCB2aG9zdF9tZW1vcnkpDQorI2Rl ZmluZSBWSE9TVF9TRVRfVlJJTkdfTlVNICBfSU9XKFZIT1NUX1ZJUlRJTywgMHgxMCwgc3RydWN0 IHZob3N0X3ZyaW5nX3N0YXRlKQ0KKyNkZWZpbmUgVkhPU1RfU0VUX1ZSSU5HX0FERFIgX0lPVyhW SE9TVF9WSVJUSU8sIDB4MTEsIHN0cnVjdCB2aG9zdF92cmluZ19hZGRyKQ0KKyNkZWZpbmUgVkhP U1RfU0VUX1ZSSU5HX0tJQ0sgX0lPVyhWSE9TVF9WSVJUSU8sIDB4MjAsIHN0cnVjdCB2aG9zdF92 cmluZ19maWxlKQ0KKyNkZWZpbmUgVkhPU1RfU0VUX1ZSSU5HX0NBTEwgX0lPVyhWSE9TVF9WSVJU SU8sIDB4MjEsIHN0cnVjdCB2aG9zdF92cmluZ19maWxlKQ0KKyNkZWZpbmUgVkhPU1RfU0VUX1ZS SU5HX0VSUiAgX0lPVyhWSE9TVF9WSVJUSU8sIDB4MjIsIHN0cnVjdCB2aG9zdF92cmluZ19maWxl KQ0KKyNkZWZpbmUgVkhPU1RfU0VUX0JBQ0tFTkRfRkVBVFVSRVMgX0lPVyhWSE9TVF9WSVJUSU8s IDB4MjUsIF9fdTY0KQ0KKyNkZWZpbmUgVkhPU1RfTkVUX1NFVF9CQUNLRU5EIF9JT1coVkhPU1Rf VklSVElPLCAweDMwLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSkNCisNCisjZGVmaW5lIFZIT1NU X05ERVNDUyAoUEtUX0JVRl9CWVRFUyAvIDY1NTIwKQ0KK3N0YXRpY19hc3NlcnQoIShWSE9TVF9O REVTQ1MgJiAoVkhPU1RfTkRFU0NTIC0gMSkpLA0KKwkJCSAiTnVtYmVyIG9mIHZob3N0IGRlc2Nz IG11c3QgYmUgYSBwb3dlciBvZiB0d28gYnkgc3RhbmRhcmQiKTsNCitzdGF0aWMgc3RydWN0IHsN CisJLyogTnVtYmVyIG9mIGZyZWUgZGVzY3JpcHRvcnMgKi8NCisJdWludDE2X3QgbnVtX2ZyZWU7 DQorDQorCS8qIExhc3QgdXNlZCBpZHggcHJvY2Vzc2VkICovDQorCXVpbnQxNl90IGxhc3RfdXNl ZF9pZHg7DQorfSB2cXNbMl07DQorDQorc3RhdGljIHN0cnVjdCB2cmluZ19kZXNjIHZyaW5nX2Rl c2NbMl1bVkhPU1RfTkRFU0NTXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsN CitzdGF0aWMgdW5pb24gew0KKwlzdHJ1Y3QgdnJpbmdfYXZhaWwgYXZhaWw7DQorCWNoYXIgYnVm W29mZnNldG9mKHN0cnVjdCB2cmluZ19hdmFpbCwgcmluZ1tWSE9TVF9OREVTQ1NdKV07DQorfSB2 cmluZ19hdmFpbF8wIF9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpLCB2cmluZ19h dmFpbF8xIF9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOw0KK3N0YXRpYyB1bmlv biB7DQorCXN0cnVjdCB2cmluZ191c2VkIHVzZWQ7DQorCWNoYXIgYnVmW29mZnNldG9mKHN0cnVj dCB2cmluZ191c2VkLCByaW5nW1ZIT1NUX05ERVNDU10pXTsNCit9IHZyaW5nX3VzZWRfMCBfX2F0 dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKSwgdnJpbmdfdXNlZF8xIF9fYXR0cmlidXRl X18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOw0KKw0KKy8qIGFsbCBkZXNjcyByaW5nICsgMnJpbmdz ICogMnZxcyArIHR4IHBrdCBidWYgKyByeCBwa3QgYnVmICovDQorI2RlZmluZSBOX1ZIT1NUX1JF R0lPTlMgNg0KK3VuaW9uIHsNCisJc3RydWN0IHZob3N0X21lbW9yeSBtZW07DQorCWNoYXIgYnVm W29mZnNldG9mKHN0cnVjdCB2aG9zdF9tZW1vcnksIHJlZ2lvbnNbTl9WSE9TVF9SRUdJT05TXSld Ow0KK30gdmhvc3RfbWVtb3J5ID0gew0KKwkubWVtID0gew0KKwkJLm5yZWdpb25zID0gTl9WSE9T VF9SRUdJT05TLA0KKwl9LA0KK307DQorDQogLyoqDQogICogdGFwX2wyX21heF9sZW4oKSAtIE1h eGltdW0gZnJhbWUgc2l6ZSAoaW5jbHVkaW5nIEwyIGhlYWRlcikgZm9yIGN1cnJlbnQgbW9kZQ0K ICAqIEBjOgkJRXhlY3V0aW9uIGNvbnRleHQNCkBAIC0zOTksNiArNDQ1LDE4IEBAIHZvaWQgdGFw X2ljbXA2X3NlbmQoY29uc3Qgc3RydWN0IGN0eCAqYywNCiAJdGFwX3NlbmRfc2luZ2xlKGMsIGJ1 ZiwgbDRsZW4gKyAoKGNoYXIgKilpY21wNmggLSBidWYpKTsNCiB9DQogDQorc3RhdGljIHZvaWQg dmhvc3Rfa2ljayhzdHJ1Y3QgdnJpbmdfdXNlZCAqdXNlZCwgaW50IGtpY2tfZmQpIHsNCisJLyog V2UgbmVlZCB0byBleHBvc2UgYXZhaWxhYmxlIGFycmF5IGVudHJpZXMgYmVmb3JlIGNoZWNraW5n IGF2YWlsDQorCSAqIGV2ZW50Lg0KKwkgKg0KKwkgKiBUT0RPOiBEb2VzIGV2ZW50ZmRfd3JpdGUg YWxyZWFkeSBkbyB0aGlzPw0KKwkgKi8NCisJc21wX21iKCk7DQorDQorCWlmICghKHVzZWQtPmZs YWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpDQorCQlldmVudGZkX3dyaXRlKGtpY2tfZmQs IDEpOw0KK30NCisNCiAvKioNCiAgKiB0YXBfc2VuZF9mcmFtZXNfcGFzdGEoKSAtIFNlbmQgbXVs dGlwbGUgZnJhbWVzIHRvIHRoZSBwYXN0YSB0YXANCiAgKiBAYzoJCQlFeGVjdXRpb24gY29udGV4 dA0KQEAgLTEzODYsNiArMTQ0NCw4OSBAQCB2b2lkIHRhcF9saXN0ZW5faGFuZGxlcihzdHJ1Y3Qg Y3R4ICpjLCB1aW50MzJfdCBldmVudHMpDQogCXRhcF9zdGFydF9jb25uZWN0aW9uKGMpOw0KIH0N CiANCitzdGF0aWMgdm9pZCAqdmlydHF1ZXVlX2dldF9yeF9idWYodW5zaWduZWQgcWlkLCB1bnNp Z25lZCAqbGVuKQ0KK3sNCisJc3RydWN0IHZyaW5nX3VzZWQgKnVzZWQgPSAhcWlkID8gJnZyaW5n X3VzZWRfMC51c2VkIDogJnZyaW5nX3VzZWRfMS51c2VkOw0KKwl1aW50MzJfdCBpOw0KKwl1aW50 MTZfdCB1c2VkX2lkeCwgbGFzdF91c2VkOw0KKw0KKwkvKiBUT0RPIHRoaW5rIGlmIHRoaXMgaGFz IHJhY2VzIHdpdGggcHJldmlvdXMgZXZlbnRmZF9yZWFkICovDQorCS8qIFRPRE8gd2UgY291bGQg aW1wcm92ZSBwZXJmb3JtYW5jZSB3aXRoIGEgc2hhZG93X3VzZWRfaWR4ICovDQorCXVzZWRfaWR4 ID0gbGUxNnRvaCh1c2VkLT5pZHgpOw0KKw0KKwlzbXBfcm1iKCk7DQorDQorCWlmICh1c2VkX2lk eCA9PSB2cXNbMF0ubGFzdF91c2VkX2lkeCkgew0KKwkJKmxlbiA9IDA7DQorCQlyZXR1cm4gTlVM TDsNCisJfQ0KKw0KKwlsYXN0X3VzZWQgPSB2cXNbMF0ubGFzdF91c2VkX2lkeCAlIFZIT1NUX05E RVNDUzsNCisJaSA9IGxlMzJ0b2godXNlZC0+cmluZ1tsYXN0X3VzZWRdLmlkKTsNCisJKmxlbiA9 IGxlMzJ0b2godXNlZC0+cmluZ1tsYXN0X3VzZWRdLmxlbik7DQorDQorCS8qIE1ha2Ugc3VyZSB0 aGUga2VybmVsIGlzIGNvbnN1bWluZyB0aGUgZGVzY3JpcHRvcnMgaW4gb3JkZXIgKi8NCisJaWYg KGkgIT0gbGFzdF91c2VkKSB7DQorCQlkaWUoInZob3N0OiBpZCAldSBhdCB1c2VkIHBvc2l0aW9u ICV1ICE9ICV1IiwgaSwgbGFzdF91c2VkLCBpKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQor CWlmICgqbGVuID4gUEtUX0JVRl9CWVRFUy9WSE9TVF9OREVTQ1MpIHsNCisJCXdhcm4oInZob3N0 OiBpZCAlZCBsZW4gJXUgPiAlenUiLCBpLCAqbGVuLCBQS1RfQlVGX0JZVEVTL1ZIT1NUX05ERVND Uyk7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwkvKiBUT0RPIGNoZWNrIGlmIHRoZSBpZCBp cyB2YWxpZCBhbmQgaXQgaGFzIG5vdCBiZWVuIGRvdWJsZSB1c2VkICovDQorCXZxc1swXS5sYXN0 X3VzZWRfaWR4Kys7DQorCXZxc1swXS5udW1fZnJlZSsrOw0KKwlyZXR1cm4gcGt0X2J1ZiArIGkg KiAoUEtUX0JVRl9CWVRFUy9WSE9TVF9OREVTQ1MpOw0KK30NCisNCisvKiBUT0RPIHRoaXMgYXNz dW1lcyB0aGUga2VybmVsIGNvbnN1bWVzIGRlc2NyaXB0b3JzIGluIG9yZGVyICovDQorc3RhdGlj IHZvaWQgcnhfcGt0X3JlZmlsbChzdHJ1Y3QgY3R4ICpjKQ0KK3sNCisJLyogVE9ETzogdHVuZSB0 aGlzIHRocmVzaG9sZCAqLw0KKwlpZiAoIXZxc1swXS5udW1fZnJlZSkNCisJCXJldHVybjsNCisN CisJdnJpbmdfYXZhaWxfMC5hdmFpbC5pZHggKz0gdnFzWzBdLm51bV9mcmVlOw0KKwl2cXNbMF0u bnVtX2ZyZWUgPSAwOw0KKwl2aG9zdF9raWNrKCZ2cmluZ191c2VkXzAudXNlZCwgYy0+dnFbMF0u a2lja19mZCk7DQorfQ0KKw0KK3ZvaWQgdGFwX3Zob3N0X2lucHV0KHN0cnVjdCBjdHggKmMsIHVu aW9uIGVwb2xsX3JlZiByZWYsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KQ0KK3sNCisJZXZl bnRmZF9yZWFkKHJlZi5mZCwgKGV2ZW50ZmRfdFtdKXsgMCB9KTsNCisNCisJdGFwX2ZsdXNoX3Bv b2xzKCk7DQorDQorCXdoaWxlICh0cnVlKSB7DQorCQlzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJn X3J4YnVmICpoZHI7DQorCQl1bnNpZ25lZCBsZW47DQorDQorCQloZHIgPSB2aXJ0cXVldWVfZ2V0 X3J4X2J1ZihyZWYucXVldWUsICZsZW4pOw0KKwkJaWYgKCFoZHIpDQorCQkJYnJlYWs7DQorDQor CQlpZiAobGVuIDwgc2l6ZW9mKCpoZHIpKSB7DQorCQkJd2Fybigidmhvc3Q6IGludmFsaWQgbGVu ICV1IiwgbGVuKTsNCisJCQljb250aW51ZTsNCisJCX0NCisNCisJCS8qIFRPRE8gdGhpcyB3aWxs IGJyZWFrIGZyb20gdGhpcyBtb21lbnQgKi8NCisJCWlmIChoZHItPm51bV9idWZmZXJzICE9IDEp IHsNCisJCQl3YXJuKCJ2aG9zdDogVG9vIG1hbnkgYnVmZmVycyAldSwgJXp1IGJ5dGVzIHNob3Vs ZCBiZSBlbm91Z2ggZm9yIGV2ZXJ5Ym9keSEiLCBoZHItPm51bV9idWZmZXJzLCBQS1RfQlVGX0JZ VEVTL1ZIT1NUX05ERVNDUyk7DQorCQkJY29udGludWU7DQorCQl9DQorDQorCQkvKiBUT0RPIGZp eCB0aGUgdjYgcG9vbCB0byBzdXBwb3J0IGlwdjYgKi8NCisJCXRhcF9hZGRfcGFja2V0KGMsIGxl biAtIHNpemVvZigqaGRyKSwgKHZvaWQgKikoaGRyKzEpLCBub3cpOw0KKwl9DQorDQorCXRhcF9o YW5kbGVyKGMsIG5vdyk7DQorCXJ4X3BrdF9yZWZpbGwoYyk7DQorfQ0KKw0KIC8qKg0KICAqIHRh cF9uc190dW4oKSAtIEdldCB0dW50YXAgZmQgaW4gbmFtZXNwYWNlDQogICogQGM6CQlFeGVjdXRp b24gY29udGV4dA0KQEAgLTEzOTYsMTAgKzE1MzcsMTQgQEAgdm9pZCB0YXBfbGlzdGVuX2hhbmRs ZXIoc3RydWN0IGN0eCAqYywgdWludDMyX3QgZXZlbnRzKQ0KICAqLw0KIHN0YXRpYyBpbnQgdGFw X25zX3R1bih2b2lkICphcmcpDQogew0KKwkvKiBUT0RPIHdlIG5lZWQgdG8gY2hlY2sgaWYgdmhv c3Qgc3VwcG9ydCBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGIGFuZCBWSE9TVF9ORVRfRl9WSVJUSU9f TkVUX0hEUiBhY3R1YWxseSAqLw0KKwlzdGF0aWMgY29uc3QgdWludDY0X3QgZmVhdHVyZXMgPQ0K KwkJKDFVTEwgPDwgVklSVElPX0ZfVkVSU0lPTl8xKSB8ICgxVUxMIDw8IFZJUlRJT19ORVRfRl9N UkdfUlhCVUYpIHwgKDFVTEwgPDwgVkhPU1RfTkVUX0ZfVklSVElPX05FVF9IRFIpOw0KIAlzdHJ1 Y3QgaWZyZXEgaWZyID0geyAuaWZyX2ZsYWdzID0gSUZGX1RBUCB8IElGRl9OT19QSSB9Ow0KIAlp bnQgZmxhZ3MgPSBPX1JEV1IgfCBPX05PTkJMT0NLIHwgT19DTE9FWEVDOw0KIAlzdHJ1Y3QgY3R4 ICpjID0gKHN0cnVjdCBjdHggKilhcmc7DQotCWludCBmZCwgcmM7DQorCXVuc2lnbmVkIGk7DQor CWludCBmZCwgdmhvc3RfZmQsIHJjOw0KIA0KIAljLT5mZF90YXAgPSAtMTsNCiAJbWVtY3B5KGlm ci5pZnJfbmFtZSwgYy0+cGFzdGFfaWZuLCBJRk5BTVNJWik7DQpAQCAtMTQwOSw2ICsxNTU0LDE0 MyBAQCBzdGF0aWMgaW50IHRhcF9uc190dW4odm9pZCAqYXJnKQ0KIAlpZiAoZmQgPCAwKQ0KIAkJ ZGllX3BlcnJvcigiRmFpbGVkIHRvIG9wZW4oKSAvZGV2L25ldC90dW4iKTsNCiANCisJdmhvc3Rf ZmQgPSBvcGVuKCIvZGV2L3Zob3N0LW5ldCIsIGZsYWdzKTsNCisJaWYgKHZob3N0X2ZkIDwgMCkN CisJCWRpZV9wZXJyb3IoIkZhaWxlZCB0byBvcGVuKCkgL2Rldi92aG9zdC1uZXQiKTsNCisNCisJ cmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VUX09XTkVSLCBOVUxMKTsNCisJaWYgKHJjIDwg MCkNCisJCWRpZV9wZXJyb3IoIlZIT1NUX1NFVF9PV05FUiBpb2N0bCBvbiAvZGV2L3Zob3N0LW5l dCBmYWlsZWQiKTsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfR0VUX0ZFQVRVUkVT LCAmYy0+dmlydGlvX2ZlYXR1cmVzKTsNCisJaWYgKHJjIDwgMCkNCisJCWRpZV9wZXJyb3IoIlZI T1NUX0dFVF9GRUFUVVJFUyBpb2N0bCBvbiAvZGV2L3Zob3N0LW5ldCBmYWlsZWQiKTsNCisNCisJ LyogVE9ETyBpbmZvcm0gbW9yZSBleHBsaWNpdGVseSAqLw0KKwlmcHJpbnRmKHN0ZGVyciwgInZo b3N0IGZlYXR1cmVzOiAlbHhcbiIsIGMtPnZpcnRpb19mZWF0dXJlcyk7DQorCWZwcmludGYoc3Rk ZXJyLCAicmVxIGZlYXR1cmVzOiAlbHhcbiIsIGZlYXR1cmVzKTsNCisJYy0+dmlydGlvX2ZlYXR1 cmVzICY9IGZlYXR1cmVzOw0KKwlpZiAoYy0+dmlydGlvX2ZlYXR1cmVzICE9IGZlYXR1cmVzKQ0K KwkJZGllKCJ2aG9zdCBkb2VzIG5vdCBzdXBwb3J0IHJlcXVpcmVkIGZlYXR1cmVzIik7DQorDQor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGMtPnZxKTsgaSsrKSB7DQorCQlzdHJ1Y3Qgdmhv c3RfdnJpbmdfZmlsZSBmaWxlID0gew0KKwkJCS5pbmRleCA9IGksDQorCQl9Ow0KKwkJdW5pb24g ZXBvbGxfcmVmIHJlZiA9IHsgLnR5cGUgPSBFUE9MTF9UWVBFX1ZIT1NUX0NBTEwsDQorCQkJCQku cXVldWUgPSBpIH07DQorCQlzdHJ1Y3QgZXBvbGxfZXZlbnQgZXY7DQorDQorCQlmaWxlLmZkID0g ZXZlbnRmZCgwLCBFRkRfTk9OQkxPQ0sgfCBFRkRfQ0xPRVhFQyk7DQorCQlyZWYuZmQgPSBmaWxl LmZkOw0KKwkJaWYgKGZpbGUuZmQgPCAwKQ0KKwkJCWRpZV9wZXJyb3IoIkZhaWxlZCB0byBjcmVh dGUgY2FsbCBldmVudGZkIik7DQorDQorCQlyYyA9IGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRf VlJJTkdfQ0FMTCwgJmZpbGUpOw0KKwkJaWYgKHJjIDwgMCkNCisJCQlkaWVfcGVycm9yKA0KKwkJ CQkiVkhPU1RfU0VUX1ZSSU5HX0NBTEwgaW9jdGwgb24gL2Rldi92aG9zdC1uZXQgZmFpbGVkIik7 DQorDQorCQlldiA9IChzdHJ1Y3QgZXBvbGxfZXZlbnQpeyAuZGF0YS51NjQgPSByZWYudTY0LCAu ZXZlbnRzID0gRVBPTExJTiB9Ow0KKwkJaWYgKGkgPT0gMCkgew0KKwkJCXJjID0gZXBvbGxfY3Rs KGMtPmVwb2xsZmQsIEVQT0xMX0NUTF9BREQsIHJlZi5mZCwgJmV2KTsNCisJCQlpZiAocmMgPCAw KQ0KKwkJCQlkaWVfcGVycm9yKCJGYWlsZWQgdG8gYWRkIGNhbGwgZXZlbnRmZCB0byBlcG9sbCIp Ow0KKwkJfQ0KKwkJYy0+dnFbaV0uY2FsbF9mZCA9IGZpbGUuZmQ7DQorCX0NCisNCisJLyoNCisJ ICogVW5saWtlIG1vc3Qgb2YgQy1zdHlsZSBBUElzLCB1c2Vyc3BhY2VfYWRkcittZW1vcnlfc2l6 ZSBpcw0KKwkgKiBhbHNvIGFjY2VzaWJsZSBieSB0aGUga2VybmVsLiAgSW5jbHVkZSBhIC0xIHRv IGFkanVzdC4NCisJICovDQorI2RlZmluZSBWSE9TVF9NRU1PUllfUkVHSU9OX1BUUihhZGRyLCBz aXplKSBcDQorCShzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbikgeyBcDQorCQkuZ3Vlc3RfcGh5 c19hZGRyID0gKHVpbnRwdHJfdClhZGRyLCBcDQorCQkubWVtb3J5X3NpemUgPSBzaXplIC0gMSwg XA0KKwkJLnVzZXJzcGFjZV9hZGRyID0gKHVpbnRwdHJfdClhZGRyLCBcDQorCX0NCisjZGVmaW5l IFZIT1NUX01FTU9SWV9SRUdJT04oZWxlbSkgVkhPU1RfTUVNT1JZX1JFR0lPTl9QVFIoJmVsZW0s IHNpemVvZihlbGVtKSkNCisNCisJLyogMToxIHRyYW5zbGF0aW9uICovDQorCXZob3N0X21lbW9y eS5tZW0ucmVnaW9uc1swXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odnJpbmdfZGVzYyk7DQorCXZo b3N0X21lbW9yeS5tZW0ucmVnaW9uc1sxXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odnJpbmdfYXZh aWxfMCk7DQorCXZob3N0X21lbW9yeS5tZW0ucmVnaW9uc1syXSA9IFZIT1NUX01FTU9SWV9SRUdJ T04odnJpbmdfYXZhaWxfMSk7DQorCXZob3N0X21lbW9yeS5tZW0ucmVnaW9uc1szXSA9IFZIT1NU X01FTU9SWV9SRUdJT04odnJpbmdfdXNlZF8wKTsNCisJdmhvc3RfbWVtb3J5Lm1lbS5yZWdpb25z WzRdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih2cmluZ191c2VkXzEpOw0KKwl2aG9zdF9tZW1vcnku bWVtLnJlZ2lvbnNbNV0gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHBrdF9idWYpOw0KKwlzdGF0aWNf YXNzZXJ0KDUgPCBOX1ZIT1NUX1JFR0lPTlMpOw0KKyN1bmRlZiBWSE9TVF9NRU1PUllfUkVHSU9O DQorI3VuZGVmIFZIT1NUX01FTU9SWV9SRUdJT05fUFRSDQorDQorCXJjID0gaW9jdGwodmhvc3Rf ZmQsIFZIT1NUX1NFVF9NRU1fVEFCTEUsICZ2aG9zdF9tZW1vcnkubWVtKTsNCisJaWYgKHJjIDwg MCkNCisJCWRpZV9wZXJyb3IoDQorCQkJIlZIT1NUX1NFVF9NRU1fVEFCTEUgaW9jdGwgb24gL2Rl di92aG9zdC1uZXQgZmFpbGVkIik7DQorDQorCS8qIFRPRE86IHByb2JhYmx5IGl0IGluY3JlYXNl cyBSWCBwZXJmICovDQorI2lmIDANCisJc3RydWN0IGlmcmVxIGlmcjsNCisJbWVtc2V0KCZpZnIs IDAsIHNpemVvZihpZnIpKTsNCisNCisJaWYgKGlvY3RsKGZkLCBUVU5HRVRJRkYsICZpZnIpICE9 IDApDQorCQlkaWVfcGVycm9yKCJVbmFibGUgdG8gcXVlcnkgVFVOR0VUSUZGIG9uIEZEICVkIiwg ZmQpOw0KKwl9DQorDQorCWlmIChpZnIuaWZyX2ZsYWdzICYgSUZGX1ZORVRfSERSKQ0KKwkJbmV0 LT5kZXYuZmVhdHVyZXMgJj0gfigxVUxMIDw8IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpOw0KKyNl bmRpZg0KKwlyYyA9IGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfRkVBVFVSRVMsICZjLT52aXJ0 aW9fZmVhdHVyZXMpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJvcigiVkhPU1RfU0VUX0ZF QVRVUkVTIGlvY3RsIG9uIC9kZXYvdmhvc3QtbmV0IGZhaWxlZCIpOw0KKw0KKwkvKiBEdXBsaWNh dGluZyBmb3JlYWNoIHF1ZXVlIHRvIGZvbGxvdyB0aGUgZXhhY3Qgb3JkZXIgZnJvbSBRRU1VICov DQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGMtPnZxKTsgaSsrKSB7DQorCQlzdHJ1Y3Qg dmhvc3RfdnJpbmdfYWRkciBhZGRyID0gew0KKwkJCS5pbmRleCA9IGksDQorCQkJLmRlc2NfdXNl cl9hZGRyID0gKHVuc2lnbmVkIGxvbmcpdnJpbmdfZGVzY1tpXSwNCisJCQkuYXZhaWxfdXNlcl9h ZGRyID0gaSA9PSAwID8gKHVuc2lnbmVkIGxvbmcpJnZyaW5nX2F2YWlsXzAgOg0KKwkJCQkJCQkJ CQkodW5zaWduZWQgbG9uZykmdnJpbmdfYXZhaWxfMSwNCisJCQkudXNlZF91c2VyX2FkZHIgPSBp ID09IDAgPyAodW5zaWduZWQgbG9uZykmdnJpbmdfdXNlZF8wIDoNCisJCQkJCQkJCQkJKHVuc2ln bmVkIGxvbmcpJnZyaW5nX3VzZWRfMSwNCisJCQkvKiBHUEEgYWRkciAqLw0KKwkJCS5sb2dfZ3Vl c3RfYWRkciA9IGkgPT0gMCA/ICh1bnNpZ25lZCBsb25nKSZ2cmluZ191c2VkXzAgOg0KKwkJCQkJ CQkJCSAgICh1bnNpZ25lZCBsb25nKSZ2cmluZ191c2VkXzEsDQorCQl9Ow0KKwkJc3RydWN0IHZo b3N0X3ZyaW5nX3N0YXRlIHN0YXRlID0gew0KKwkJCS5pbmRleCA9IGksDQorCQkJLm51bSA9IFZI T1NUX05ERVNDUywNCisJCX07DQorCQlzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSBmaWxlID0gew0K KwkJCS5pbmRleCA9IGksDQorCQl9Ow0KKw0KKwkJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1Rf U0VUX1ZSSU5HX05VTSwgJnN0YXRlKTsNCisJCWlmIChyYyA8IDApDQorCQkJZGllX3BlcnJvcigN CisJCQkJIlZIT1NUX1NFVF9WUklOR19OVU0gaW9jdGwgb24gL2Rldi92aG9zdC1uZXQgZmFpbGVk Iik7DQorDQorCQlmcHJpbnRmKHN0ZGVyciwgInFpZDogJWRcbiIsIGkpOw0KKwkJZnByaW50Zihz dGRlcnIsICJ2aG9zdCBkZXNjIGFkZHI6IDB4JWxseFxuIiwgYWRkci5kZXNjX3VzZXJfYWRkcik7 DQorCQlmcHJpbnRmKHN0ZGVyciwgInZob3N0IGF2YWlsIGFkZHI6IDB4JWxseFxuIiwgYWRkci5h dmFpbF91c2VyX2FkZHIpOw0KKwkJZnByaW50ZihzdGRlcnIsICJ2aG9zdCB1c2VkIGFkZHI6IDB4 JWxseFxuIiwgYWRkci51c2VkX3VzZXJfYWRkcik7DQorCQlyYyA9IGlvY3RsKHZob3N0X2ZkLCBW SE9TVF9TRVRfVlJJTkdfQUREUiwgJmFkZHIpOw0KKwkJaWYgKHJjIDwgMCkNCisJCQlkaWVfcGVy cm9yKA0KKwkJCQkiVkhPU1RfU0VUX1ZSSU5HX0FERFIgaW9jdGwgb24gL2Rldi92aG9zdC1uZXQg ZmFpbGVkIik7DQorDQorCQlmaWxlLmZkID0gZXZlbnRmZCgwLCBFRkRfTk9OQkxPQ0sgfCBFRkRf Q0xPRVhFQyk7DQorCQlpZiAoZmlsZS5mZCA8IDApDQorCQkJZGllX3BlcnJvcigiRmFpbGVkIHRv IGNyZWF0ZSBraWNrIGV2ZW50ZmQiKTsNCisJCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NF VF9WUklOR19LSUNLLCAmZmlsZSk7DQorCQlpZiAocmMgPCAwKQ0KKwkJCWRpZV9wZXJyb3IoDQor CQkJCSJWSE9TVF9TRVRfVlJJTkdfS0lDSyBpb2N0bCBvbiAvZGV2L3Zob3N0LW5ldCBmYWlsZWQi KTsNCisJCWMtPnZxW2ldLmtpY2tfZmQgPSBmaWxlLmZkOw0KKw0KKwkJdnFzW2ldLm51bV9mcmVl ID0gVkhPU1RfTkRFU0NTOw0KKwl9DQorDQogCXJjID0gaW9jdGwoZmQsIChpbnQpVFVOU0VUSUZG LCAmaWZyKTsNCiAJaWYgKHJjIDwgMCkNCiAJCWRpZV9wZXJyb3IoIlRVTlNFVElGRiBpb2N0bCBv biAvZGV2L25ldC90dW4gZmFpbGVkIik7DQpAQCAtMTQxNiw3ICsxNjk4LDM0IEBAIHN0YXRpYyBp bnQgdGFwX25zX3R1bih2b2lkICphcmcpDQogCWlmICghKGMtPnBhc3RhX2lmaSA9IGlmX25hbWV0 b2luZGV4KGMtPnBhc3RhX2lmbikpKQ0KIAkJZGllKCJUYXAgZGV2aWNlIG9wZW5lZCBidXQgbm8g bmV0d29yayBpbnRlcmZhY2UgZm91bmQiKTsNCiANCisJZm9yIChpID0gMDsgaSA8IFZIT1NUX05E RVNDUzsgKytpKSB7DQorCQl2cmluZ19kZXNjWzBdW2ldLmFkZHIgPSAodWludHB0cl90KXBrdF9i dWYgKyBpICogKFBLVF9CVUZfQllURVMvVkhPU1RfTkRFU0NTKTsNCisJCXZyaW5nX2Rlc2NbMF1b aV0ubGVuID0gUEtUX0JVRl9CWVRFUy9WSE9TVF9OREVTQ1M7DQorCQl2cmluZ19kZXNjWzBdW2ld LmZsYWdzID0gVlJJTkdfREVTQ19GX1dSSVRFOw0KKwl9DQorCWZvciAoaSA9IDA7IGkgPCBWSE9T VF9OREVTQ1M7ICsraSkgew0KKwkJdnJpbmdfYXZhaWxfMC5hdmFpbC5yaW5nW2ldID0gaTsNCisJ fQ0KKw0KKwlyeF9wa3RfcmVmaWxsKGMpOw0KKw0KKwkvKiBEdXBsaWNhdGluZyBmb3JlYWNoIHF1 ZXVlIHRvIGZvbGxvdyB0aGUgZXhhY3Qgb3JkZXIgZnJvbSBRRU1VICovDQorCWZvciAoaW50IGkg PSAwOyBpIDwgQVJSQVlfU0laRShjLT52cSk7IGkrKykgew0KKwkJc3RydWN0IHZob3N0X3ZyaW5n X2ZpbGUgZmlsZSA9IHsNCisJCQkuaW5kZXggPSBpLA0KKwkJCS5mZCA9IGZkLA0KKwkJfTsNCisN CisJCWZwcmludGYoc3RkZXJyLCAicWlkOiAlZFxuIiwgZmlsZS5pbmRleCk7DQorCQlmcHJpbnRm KHN0ZGVyciwgInRhcCBmZDogJWRcbiIsIGZpbGUuZmQpOw0KKwkJcmMgPSBpb2N0bCh2aG9zdF9m ZCwgVkhPU1RfTkVUX1NFVF9CQUNLRU5ELCAmZmlsZSk7DQorCQlpZiAocmMgPCAwKQ0KKwkJCWRp ZV9wZXJyb3IoDQorCQkJCSJWSE9TVF9ORVRfU0VUX0JBQ0tFTkQgaW9jdGwgb24gL2Rldi92aG9z dC1uZXQgZmFpbGVkIik7DQorCX0NCisNCiAJYy0+ZmRfdGFwID0gZmQ7DQorCWMtPmZkX3Zob3N0 ID0gdmhvc3RfZmQ7DQogDQogCXJldHVybiAwOw0KIH0NCmRpZmYgLS1naXQgYS90YXAuaCBiL3Rh cC5oDQppbmRleCA2ZmUzZDE1Li5mZjhjZWU1IDEwMDY0NA0KLS0tIGEvdGFwLmgNCisrKyBiL3Rh cC5oDQpAQCAtNjksNiArNjksMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhcF9oZHJfdXBkYXRl KHN0cnVjdCB0YXBfaGRyICp0aGRyLCBzaXplX3QgbDJsZW4pDQogCQl0aGRyLT52bmV0X2xlbiA9 IGh0b25sKGwybGVuKTsNCiB9DQogDQorLyoqDQorICogdGFwX3Zob3N0X2lucHV0KCkgLSBIYW5k bGVyIGZvciBuZXcgZGF0YSBvbiB0aGUgc29ja2V0IHRvIGh5cGVydmlzb3IgdnENCisgKiBAYzoJ CUV4ZWN1dGlvbiBjb250ZXh0DQorICogQHJlZjoJZXBvbGwgcmVmZXJlbmNlDQorICogQG5vdzoJ Q3VycmVudCB0aW1lc3RhbXANCisgKi8NCit2b2lkIHRhcF92aG9zdF9pbnB1dChzdHJ1Y3QgY3R4 ICpjLCB1bmlvbiBlcG9sbF9yZWYgcmVmLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKm5vdyk7DQor DQogdW5zaWduZWQgbG9uZyB0YXBfbDJfbWF4X2xlbihjb25zdCBzdHJ1Y3QgY3R4ICpjKTsNCiB2 b2lkICp0YXBfcHVzaF9sMmgoY29uc3Qgc3RydWN0IGN0eCAqYywgdm9pZCAqYnVmLCB1aW50MTZf dCBwcm90byk7DQogdm9pZCAqdGFwX3B1c2hfaXA0aChzdHJ1Y3QgaXBoZHIgKmlwNGgsIHN0cnVj dCBpbl9hZGRyIHNyYywNCi0tIA0KMi41MC4wDQoNCg==