From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=fail (p=none dis=none) header.from=gmail.com Received: from [10.196.169.86] (unknown [105.199.60.27]) by passt.top (Postfix) with ESMTP id 97A0F5A0269 for ; Sat, 05 Sep 2026 18:25:45 +0200 (CEST) X-FEAS-Client-IP: 10.196.169.86 Received: by Ammars-Air.localdomain (Postfix, from userid 501) id 4A38AFD0F5A; Sat, 5 Sep 2026 00:29:00 +0300 (EEST) From: aerosouund To: passt-dev@passt.top Subject: [PATCH 3/7] virtio: Add the pasta vhost-net interface and implementation Date: Sat, 5 Sep 2026 00:28:22 +0300 Message-Id: <20260904212826.41027-4-aerosound161@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20260904212826.41027-1-aerosound161@gmail.com> References: <20260904212826.41027-1-aerosound161@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: HUXPEO6FDKKZY57O2DX24UHHHDFPK7ZR X-Message-ID-Hash: HUXPEO6FDKKZY57O2DX24UHHHDFPK7ZR X-MailFrom: ammaryasser@Ammars-Air.localdomain 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: eperezma@redhat.com, Ammar Yasser 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: RnJvbTogQW1tYXIgWWFzc2VyIDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KDQpBZGQgdmhvc3Qu YyBhbmQgdmhvc3QuaCB3aGljaCBkZWZpbmUgdGhlIGFwaSBhbmQgaW1wbGVtZW50YXRpb24gZm9y DQpwYXN0YSB2aG9zdCBhY2NlbGVyYXRpb24NCg0KLSB2cV9zdGF0ZS92aG9zdF92cV9zdGF0ZVtd OiBvdXIgb3duIHZpZXcgb2YgZWFjaCB2aXJ0cXVldWUsIHdoaWNoIHRoZQ0KICBrZXJuZWwgZG9l c24ndCB0cmFjayBmb3IgdXM6IGRlc2NyaXB0b3JzIHJlYWR5IHRvIGhhbmQgYmFjaywgaG93IGZh cg0KICB3ZSd2ZSByZWFkIHRoZSB1c2VkIHJpbmcsIGFuZCB0aGUgbmV4dCBkZXNjcmlwdG9yIHRv IGFsbG9jYXRlDQotIHZyaW5nX2Rlc2MsIHZyaW5nX2F2YWlsX2FsbCwgdnJpbmdfdXNlZF9hbGws IHZob3N0X21lbW9yeTogdGhlIHJpbmdzDQogIGFuZCB0aGUgcmVnaW9uIHRhYmxlIHNoYXJlZCB3 aXRoIHRoZSBrZXJuZWwNCi0gdmhvc3Rfc2V0dXBfbmV0OiBvcGVuIC9kZXYvdmhvc3QtbmV0IGFu ZCBuZWdvdGlhdGUgVklSVElPX0ZfVkVSU0lPTl8xDQogIGFuZCBWSE9TVF9ORVRfRl9WSVJUSU9f TkVUX0hEUi4gRmFpbHVyZSBpcyBmYXRhbCBvbmx5IGlmDQogIC0tdmhvc3Qta2VybmVsIGlzIHNl dCB0byAnb24nLg0KLSB2aG9zdF9zZXR1cF9ldmVudGZkczogY3JlYXRlLCByZWdpc3RlciBhbmQg d2F0Y2ggdGhlIGNhbGwsIGtpY2sgYW5kDQogIGVycm9yIGV2ZW50ZmRzIGZvciBvbmUgcXVldWUN Ci0gdmhvc3Rfc2V0dXBfbWVtb3J5X3RhYmxlOiByZWdpc3RlciB0aGUgYnVmZmVycyB0aGUga2Vy bmVsIG1heSB0b3VjaC4NCiAgcGFzdGEgaGFzIG5vIGd1ZXN0LCBzbyBlYWNoIHJlZ2lvbiBtYXBz IGd1ZXN0X3BoeXNfYWRkciBvbnRvIHRoZQ0KICBpZGVudGljYWwgdXNlcnNwYWNlX2FkZHIsIG1h a2luZyBHUEEgdHJhbnNsYXRpb24gYW4gaWRlbnRpdHkgbWFwcGluZy4NCiAgVGhpcyBmdW5jdGlv biB1c2VzIHRoZSAqX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zIGZ1bmN0aW9ucyBjcmVhdGVkIHBl cg0KICBwcm90b2NvbCBhbmQgZm9yIGdlbmVyYWwgcHVycG9zZSBidWZmZXJzLg0KLSB2aG9zdF9z ZXRfdnJpbmc6IHB1Ymxpc2ggYSB2cmluZydzIGFkZHJlc3NlcywgYmluZCB0aGUgdGFwIGZkIGFz IGl0cw0KICBiYWNrZW5kIGFuZCBsYXkgb3V0IGl0cyBkZXNjcmlwdG9ycw0KLSB2aG9zdF9yeF9k ZXNjcmlwdG9yX2hhbmRvZmYsIHZob3N0X2tpY2s6IGhhbmQgY29uc3VtZWQgZGVzY3JpcHRvcnMg YmFjaw0KICBhbmQgbm90aWZ5IHRoZSBrZXJuZWwgdW5sZXNzIGl0IHNheXMgaXQncyBhbHJlYWR5 IHBvbGxpbmcNCg0KU2lnbmVkLW9mZi1ieTogRXVnZW5pbyBQw6lyZXogPGVwZXJlem1hQHJlZGhh dC5jb20+DQpTaWduZWQtb2ZmLWJ5OiBBbW1hciBZYXNzZXIgPGFlcm9zb3VuZDE2MUBnbWFpbC5j b20+DQotLS0NCiBNYWtlZmlsZSAgfCAgIDIgKy0NCiB0Y3BfYnVmLmMgfCAgMTYgKystDQogdGNw X2J1Zi5oIHwgICA0ICsNCiB1ZHAuYyAgICAgfCAgMTQgKysrDQogdWRwLmggICAgIHwgICAzICsN CiB1dGlsLmMgICAgfCAgMTIgKysrDQogdXRpbC5oICAgIHwgICAyICsNCiB2aG9zdC5jICAgfCAy OTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr DQogdmhvc3QuaCAgIHwgIDc5ICsrKysrKysrKysrKysrKw0KIDkgZmlsZXMgY2hhbmdlZCwgNDI1 IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQogY3JlYXRlIG1vZGUgMTAwNjQ0IHZob3N0 LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgdmhvc3QuaA0KDQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUg Yi9NYWtlZmlsZQ0KaW5kZXggYjMxNTI0Mi4uNzRkMGY5NiAxMDA2NDQNCi0tLSBhL01ha2VmaWxl DQorKysgYi9NYWtlZmlsZQ0KQEAgLTM4LDcgKzM4LDcgQEAgUEFTU1RfU1JDUyA9IGFyY2guYyBh cnAuYyBiaXRtYXAuYyBjaGVja3N1bS5jIGNvbmYuYyBkaGNwLmMgZGhjcHY2LmMgXA0KIAlpc29s YXRpb24uYyBsaW5lcmVhZC5jIGxvZy5jIG1sZC5jIG5kcC5jIG5ldGxpbmsuYyBtaWdyYXRlLmMg cGFja2V0LmMgXA0KIAlwYXJzZS5jIHBhc3N0LmMgcGFzdGEuYyBwY2FwLmMgcGlmLmMgcmVwYWly LmMgc2VyaWFsaXNlLmMgdGFwLmMgdGNwLmMgXA0KIAl0Y3BfYnVmLmMgdGNwX3NwbGljZS5jIHRj cF92dS5jIHVkcC5jIHVkcF9mbG93LmMgdWRwX3Z1LmMgdXRpbC5jIFwNCi0Jdmhvc3RfdXNlci5j IHZpcnRpby5jIHZ1X2NvbW1vbi5jDQorCXZob3N0LmMgdmhvc3RfdXNlci5jIHZpcnRpby5jIHZ1 X2NvbW1vbi5jDQogUEFTU1RfUkVQQUlSX1NSQ1MgPSBwYXNzdC1yZXBhaXIuYw0KIFBFU1RPX1NS Q1MgPSBwZXN0by5jIGJpdG1hcC5jIGZ3ZF9ydWxlLmMgaW5hbnkuYyBpcC5jIGxpbmVyZWFkLmMg cGFyc2UuYyBcDQogCXNlcmlhbGlzZS5jDQpkaWZmIC0tZ2l0IGEvdGNwX2J1Zi5jIGIvdGNwX2J1 Zi5jDQppbmRleCA3MmM0NTQxLi4xZjI4NzI4IDEwMDY0NA0KLS0tIGEvdGNwX2J1Zi5jDQorKysg Yi90Y3BfYnVmLmMNCkBAIC0zMSw3ICszMSw3IEBADQogI2luY2x1ZGUgImluYW55LmgiDQogI2lu Y2x1ZGUgInRjcF9jb25uLmgiDQogI2luY2x1ZGUgInRjcF9pbnRlcm5hbC5oIg0KLSNpbmNsdWRl ICJ0Y3BfYnVmLmgiDQorI2luY2x1ZGUgInZob3N0LmgiDQogDQogI2RlZmluZSBUQ1BfRlJBTUVT X01FTQkJCTEyOA0KICNkZWZpbmUgVENQX0ZSQU1FUwkJCQkJCQkgICBcDQpAQCAtNzUsNiArNzUs MjAgQEAgdm9pZCB0Y3BfdXBkYXRlX2wyX2J1Zihjb25zdCB1bnNpZ25lZCBjaGFyICpldGhfZCkN CiAJCWV0aF91cGRhdGVfbWFjKCZ0Y3BfZXRoX2hkcltpXSwgZXRoX2QsIE5VTEwpOw0KIH0NCiAN CisvKioNCisgKiB0Y3BfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbigpIC0gUmVnaXN0ZXIgdGhlIFRD UCBzcGVjaWZpYyBidWZmZXJzIGludG8gYSBtZW1vcnkNCisgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNvIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB0aGUga2VybmVsLg0K KyAqIEB2aG9zdF9tZW06IFRoZSBtZW1vcnkgc3RydWN0IHRvIHJlZ2lzdGVyIHJlZ2lvbnMgaW50 bw0KKyAqIEBsYXN0X2lkeDogIFRoZSBsYXN0IGluZGV4IGF0IHdoaWNoIG1lbW9yeSByZWdpb24g aGFzIGJlZW4gcGxhY2VkDQorICovDQordm9pZCB0Y3BfcmVnaXN0ZXJfbWVtb3J5X3JlZ2lvbnMo dW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0X21lbSwgc2l6ZV90ICpsYXN0X2lkeCkgew0KKyAg IAl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JF R0lPTih0Y3BfcGF5bG9hZF90YXBfaGRyKTsNCisJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxh c3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odGNwNF9wYXlsb2FkX2lwKTsNCisJdmhv c3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04o dGNwNl9wYXlsb2FkX2lwKTsNCisJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsr XSA9IFZIT1NUX01FTU9SWV9SRUdJT04odGNwX3BheWxvYWQpOw0KKwl2aG9zdF9tZW0tPm1lbS5y ZWdpb25zWygqbGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTih0Y3BfZXRoX2hkcik7 DQorfQ0KKw0KIC8qKg0KICAqIHRjcF9zb2NrX2lvdl9pbml0KCkgLSBJbml0aWFsaXNlIHNjYXR0 ZXItZ2F0aGVyIEwyIGJ1ZmZlcnMgZm9yIElQdjQgc29ja2V0cw0KICAqIEBjOgkJRXhlY3V0aW9u IGNvbnRleHQNCmRpZmYgLS1naXQgYS90Y3BfYnVmLmggYi90Y3BfYnVmLmgNCmluZGV4IDVkMzFj ZWEuLjVlMzQxZWQgMTAwNjQ0DQotLS0gYS90Y3BfYnVmLmgNCisrKyBiL3RjcF9idWYuaA0KQEAg LTYsMTEgKzYsMTUgQEANCiAjaWZuZGVmIFRDUF9CVUZfSA0KICNkZWZpbmUgVENQX0JVRl9IDQog DQordW5pb24gdmhvc3RfbWVtb3J5X3U7DQorc3RydWN0IHRjcF90YXBfY29ubjsNCisNCiB2b2lk IHRjcF9zb2NrX2lvdl9pbml0KGNvbnN0IHN0cnVjdCBjdHggKmMpOw0KIHZvaWQgdGNwX3BheWxv YWRfZmx1c2goY29uc3Qgc3RydWN0IGN0eCAqYywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpub3cp Ow0KIGludCB0Y3BfYnVmX2RhdGFfZnJvbV9zb2NrKGNvbnN0IHN0cnVjdCBjdHggKmMsIHN0cnVj dCB0Y3BfdGFwX2Nvbm4gKmNvbm4sDQogCQkJICAgdWludDMyX3QgYWxyZWFkeV9zZW50LCBjb25z dCBzdHJ1Y3QgdGltZXNwZWMgKm5vdyk7DQogaW50IHRjcF9idWZfc2VuZF9mbGFnKGNvbnN0IHN0 cnVjdCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4sIGludCBmbGFncywNCiAJCSAg ICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCit2b2lkIHRjcF9yZWdpc3Rlcl9tZW1v cnlfcmVnaW9ucyh1bmlvbiB2aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXplX3QgKmxhc3Rf aWR4KTsNCiANCiAjZW5kaWYgIC8qVENQX0JVRl9IICovDQpkaWZmIC0tZ2l0IGEvdWRwLmMgYi91 ZHAuYw0KaW5kZXggNTA1ZTU1NC4uNWUzYmQ4NiAxMDA2NDQNCi0tLSBhL3VkcC5jDQorKysgYi91 ZHAuYw0KQEAgLTExOCw2ICsxMTgsNyBAQA0KICNpbmNsdWRlICJ1ZHBfaW50ZXJuYWwuaCINCiAj aW5jbHVkZSAidWRwX3Z1LmgiDQogI2luY2x1ZGUgImVwb2xsX2N0bC5oIg0KKyNpbmNsdWRlICJ2 aG9zdC5oIg0KIA0KICNkZWZpbmUgVURQX01BWF9GUkFNRVMJCTMyICAvKiBtYXggIyBvZiBmcmFt ZXMgdG8gcmVjZWl2ZSBhdCBvbmNlICovDQogDQpAQCAtNDQ4LDYgKzQ0OSwxOSBAQCBzdGF0aWMg dm9pZCB1ZHBfc2VuZF90YXBfaWNtcDQoY29uc3Qgc3RydWN0IGN0eCAqYywNCiAJdGFwX2ljbXA0 X3NlbmQoYywgc2FkZHIsIGVhZGRyLCAmbXNnLCB0YXBfb21hYywgbXNnbGVuKTsNCiB9DQogDQor LyoqDQorICogdWRwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb24oKSAtIFJlZ2lzdGVyIHRoZSBVRFAg c3BlY2lmaWMgYnVmZmVycyBpbnRvIGEgbWVtb3J5DQorICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzbyBpdCBjYW4gYmUgc2hhcmVkIHdpdGggdGhlIGtlcm5lbC4NCisg KiBAdmhvc3RfbWVtOiBUaGUgbWVtb3J5IHN0cnVjdCB0byByZWdpc3RlciByZWdpb25zIGludG8N CisgKiBAbGFzdF9pZHg6ICBUaGUgbGFzdCBpbmRleCBhdCB3aGljaCBtZW1vcnkgcmVnaW9uIGhh cyBiZWVuIHBsYWNlZA0KKyAqLw0KK3ZvaWQgdWRwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKHVu aW9uIHZob3N0X21lbW9yeV91ICp2aG9zdF9tZW0sIHNpemVfdCAqbGFzdF9pZHgpIHsNCisgICAJ dmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJ T04odWRwX3BheWxvYWQpOw0KKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygqbGFzdF9pZHgpKytd ID0gVkhPU1RfTUVNT1JZX1JFR0lPTih1ZHBfZXRoX2hkcik7DQorCXZob3N0X21lbS0+bWVtLnJl Z2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllfUkVHSU9OKHVkcF9pb3ZfcmVjdik7 DQorCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBWSE9TVF9NRU1PUllf UkVHSU9OKHVkcF9taF9yZWN2KTsNCisJdmhvc3RfbWVtLT5tZW0ucmVnaW9uc1soKmxhc3RfaWR4 KSsrXSA9IFZIT1NUX01FTU9SWV9SRUdJT04odWRwX21ldGEpOw0KK30NCiANCiAvKioNCiAgKiB1 ZHBfc2VuZF90YXBfaWNtcDYoKSAtIENvbnN0cnVjdCBhbmQgc2VuZCBJQ01QdjYgdG8gbG9jYWwg cGVlcg0KZGlmZiAtLWdpdCBhL3VkcC5oIGIvdWRwLmgNCmluZGV4IGI1MDI4M2UuLmViZjFhNGUg MTAwNjQ0DQotLS0gYS91ZHAuaA0KKysrIGIvdWRwLmgNCkBAIC0xMSw2ICsxMSw4IEBADQogDQog I2luY2x1ZGUgImZ3ZC5oIg0KIA0KK3VuaW9uIHZob3N0X21lbW9yeV91Ow0KKw0KIHZvaWQgdWRw X2xpc3Rlbl9zb2NrX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0eCAqYywgdW5pb24gZXBvbGxfcmVm IHJlZiwNCiAJCQkgICAgIHVpbnQzMl90IGV2ZW50cywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpu b3cpOw0KIHZvaWQgdWRwX3NvY2tfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3R4ICpjLCB1bmlvbiBl cG9sbF9yZWYgcmVmLA0KQEAgLTIxLDYgKzIzLDcgQEAgaW50IHVkcF90YXBfaGFuZGxlcihjb25z dCBzdHJ1Y3QgY3R4ICpjLCB1aW50OF90IHBpZiwNCiAJCSAgICBjb25zdCBzdHJ1Y3QgdGltZXNw ZWMgKm5vdyk7DQogaW50IHVkcF9pbml0KHN0cnVjdCBjdHggKmMpOw0KIHZvaWQgdWRwX3VwZGF0 ZV9sMl9idWYoY29uc3QgdW5zaWduZWQgY2hhciAqZXRoX2QpOw0KK3ZvaWQgdWRwX3JlZ2lzdGVy X21lbW9yeV9yZWdpb25zKHVuaW9uIHZob3N0X21lbW9yeV91ICp2aG9zdF9tZW0sIHNpemVfdCAq bGFzdF9pZHgpOw0KIA0KIC8qKg0KICAqIHN0cnVjdCB1ZHBfY3R4IC0gRXhlY3V0aW9uIGNvbnRl eHQgZm9yIFVEUA0KZGlmZiAtLWdpdCBhL3V0aWwuYyBiL3V0aWwuYw0KaW5kZXggMjhjMzJlNC4u YTk5NGQ4OCAxMDA2NDQNCi0tLSBhL3V0aWwuYw0KKysrIGIvdXRpbC5jDQpAQCAtMzYsNiArMzYs NyBAQA0KICNpbmNsdWRlICJlcG9sbF9jdGwuaCINCiAjaW5jbHVkZSAicGFzdGEuaCINCiAjaW5j bHVkZSAic2VyaWFsaXNlLmgiDQorI2luY2x1ZGUgInZob3N0LmgiDQogI2lmZGVmIEhBU19HRVRS QU5ET00NCiAjaW5jbHVkZSA8c3lzL3JhbmRvbS5oPg0KICNlbmRpZg0KQEAgLTQ1Niw2ICs0NTcs MTcgQEAgaW50IG9wZW5faW5fbnMoY29uc3Qgc3RydWN0IGN0eCAqYywgY29uc3QgY2hhciAqcGF0 aCwgaW50IGZsYWdzKQ0KIAlyZXR1cm4gYXJnLmZkOw0KIH0NCiANCisvKioNCisgKiBnZW5lcmFs X3JlZ2lzdGVyX21lbW9yeV9yZWdpb24oKSAtIFJlZ2lzdGVyIHRoZSBnZW5lcmFsIChub24gcHJv dG9jb2wgc3BlY2lmaWMpIGJ1ZmZlcnMgDQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnRvIGEgbWVtb3J5IHN0cnVjdCBzbyBpdCBjYW4gYmUgc2hhcmVkIHdpdGggdGhl IGtlcm5lbC4NCisgKiBAdmhvc3RfbWVtOiBUaGUgbWVtb3J5IHN0cnVjdCB0byByZWdpc3RlciBy ZWdpb25zIGludG8NCisgKiBAbGFzdF9pZHg6ICBUaGUgbGFzdCBpbmRleCBhdCB3aGljaCBtZW1v cnkgcmVnaW9uIGhhcyBiZWVuIHBsYWNlZA0KKyAqLw0KK3ZvaWQgZ2VuZXJhbF9yZWdpc3Rlcl9t ZW1vcnlfcmVnaW9ucyh1bmlvbiB2aG9zdF9tZW1vcnlfdSAqdmhvc3RfbWVtLCBzaXplX3QgKmxh c3RfaWR4KSB7DQorICAgCXZob3N0X21lbS0+bWVtLnJlZ2lvbnNbKCpsYXN0X2lkeCkrK10gPSBW SE9TVF9NRU1PUllfUkVHSU9OKHBrdF9idWYpOw0KKwl2aG9zdF9tZW0tPm1lbS5yZWdpb25zWygq bGFzdF9pZHgpKytdID0gVkhPU1RfTUVNT1JZX1JFR0lPTihldGhfcGFkKTsNCit9DQorDQogLyoq DQogICogcGlkZmlsZV93cml0ZSgpIC0gV3JpdGUgUElEIHRvIGZpbGUsIGlmIHJlcXVlc3RlZCB0 byBkbyBzbywgYW5kIGNsb3NlIGl0DQogICogQGZkOgkJT3BlbiBQSUQgZmlsZSBkZXNjcmlwdG9y LCBjbG9zZWQgb24gZXhpdCwgLTEgdG8gc2tpcCB3cml0aW5nIGl0DQpkaWZmIC0tZ2l0IGEvdXRp bC5oIGIvdXRpbC5oDQppbmRleCAyNDM1ZjUzLi4yN2VhYzIyIDEwMDY0NA0KLS0tIGEvdXRpbC5o DQorKysgYi91dGlsLmgNCkBAIC0xNDUsNiArMTQ1LDcgQEAgaW50IGRvX2Nsb25lKGludCAoKmZu KSh2b2lkICopLCBjaGFyICpzdGFja19hcmVhLCBzaXplX3Qgc3RhY2tfc2l6ZSwgaW50IGZsYWdz LA0KIA0KIHN0cnVjdCBjdHg7DQogdW5pb24gc29ja2FkZHJfaW5hbnk7DQordW5pb24gdmhvc3Rf bWVtb3J5X3U7DQogDQogaW50IHNvY2tfbDQoY29uc3Qgc3RydWN0IGN0eCAqYywgZW51bSBlcG9s bF90eXBlIHR5cGUsDQogCSAgICBjb25zdCB1bmlvbiBzb2NrYWRkcl9pbmFueSAqc2EsIGNvbnN0 IGNoYXIgKmlmbmFtZSk7DQpAQCAtMTcwLDYgKzE3MSw3IEBAIGludCB3cml0ZV9yZW1haW5kZXIo aW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IGlvdmNudCwNCiBpbnQgcmVh ZF9yZW1haW5kZXIoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgc2l6ZV90IGNudCwg c2l6ZV90IHNraXApOw0KIGJvb2wgc25wcmludGZfY2hlY2soY2hhciAqc3RyLCBzaXplX3Qgc2l6 ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOw0KIGxvbmcgY2xhbXBlZF9zY2FsZShsb25nIHgs IGxvbmcgeSwgbG9uZyBsbywgbG9uZyBoaSwgbG9uZyBmKTsNCit2b2lkIGdlbmVyYWxfcmVnaXN0 ZXJfbWVtb3J5X3JlZ2lvbnModW5pb24gdmhvc3RfbWVtb3J5X3UgKnZob3N0X21lbSwgc2l6ZV90 ICpsYXN0X2lkeCk7DQogDQogLyoqDQogICogYWZfbmFtZSgpIC0gUmV0dXJuIG5hbWUgb2YgYW4g YWRkcmVzcyBmYW1pbHkNCmRpZmYgLS1naXQgYS92aG9zdC5jIGIvdmhvc3QuYw0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjBjNjBjMjENCi0tLSAvZGV2L251bGwNCisrKyBi L3Zob3N0LmMNCkBAIC0wLDAgKzEsMjk1IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb3ItbGF0ZXINCisvKiBDb3B5cmlnaHQgUmVkIEhhdA0KKyAqIEF1dGhvcjogQW1t YXIgWWFzc2VyIDxhZXJvc291bmQxNjFAZ21haWwuY29tPg0KKyAqDQorICogdmhvc3QuYyAtIHZo b3N0LW5ldCAodmhvc3Qta2VybmVsKSBhY2NlbGVyYXRpb24gZm9yIHBhc3RhIG1vZGUNCisgKi8N CisNCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaW5jbHVkZSA8ZmNudGwuaD4NCisjaW5jbHVkZSA8 aW50dHlwZXMuaD4NCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0K KyNpbmNsdWRlIDx1bmlzdGQuaD4NCisjaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4NCisjaW5jbHVk ZSA8c3lzL2lvY3RsLmg+DQorDQorI2luY2x1ZGUgInV0aWwuaCINCisjaW5jbHVkZSAicGFzc3Qu aCINCisjaW5jbHVkZSAidmhvc3QuaCINCisjaW5jbHVkZSAiZXBvbGxfY3RsLmgiDQorI2luY2x1 ZGUgInVkcC5oIg0KKyNpbmNsdWRlICJ0Y3BfYnVmLmgiIA0KKw0KK3N0cnVjdCB2cV9zdGF0ZSB2 aG9zdF92cV9zdGF0ZVsyXTsNCisNCitzdHJ1Y3QgdnJpbmdfZGVzYyB2cmluZ19kZXNjWzJdW1ZI T1NUX05ERVNDU10NCisJCQkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZChQQUdFX1NJWkUpKSk7DQor DQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBp Z25vcmVkICItV3BlZGFudGljIg0KK3VuaW9uIHZyaW5nX2F2YWlsX3UgdnJpbmdfYXZhaWxfYWxs WzJdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOw0KK3VuaW9uIHZyaW5nX3Vz ZWRfdSB2cmluZ191c2VkX2FsbFsyXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkp KTsNCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcA0KKw0KK3VuaW9uIHZob3N0X21lbW9yeV91 IHZob3N0X21lbW9yeSA9IHsNCisJLm1lbSA9IHsNCisJCS5ucmVnaW9ucyA9IE5fVkhPU1RfUkVH SU9OUywNCisJfSwNCit9Ow0KKw0KKy8qKg0KKyAqIHZob3N0X3NldHVwX25ldCgpIC0gT3BlbiBh bmQgbmVnb3RpYXRlIGZlYXR1cmVzIG9uIC9kZXYvdmhvc3QtbmV0DQorICogQGM6CQlFeGVjdXRp b24gY29udGV4dDsgYy0+dmhvc3QuZmQgYW5kIGMtPnZob3N0LmZlYXR1cmVzIGFyZSBzZXQNCisg KgkJb24gc3VjY2VzcywgYW5kIGxlZnQgdW50b3VjaGVkIG9uIGZhaWx1cmUNCisgKg0KKyAqIEZh aWx1cmUgaGVyZSBtZWFucyB2aG9zdC1uZXQgaXNuJ3QgdXNhYmxlLCBub3QgdGhhdCBwYXN0YSBj YW4ndCBydW46IHRoZQ0KKyAqIGNhbGxlciBmYWxscyBiYWNrIHRvIHBsYWluIHRhcCBvcGVyYXRp b24gdW5sZXNzIGFjY2VsZXJhdGlvbiB3YXMgcmVxdWlyZWQuDQorICogVGhhdCdzIHdoeSBub3Ro aW5nIGluIGhlcmUgaXMgZmF0YWwuDQorICoNCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEg aWYgdmhvc3QtbmV0IGlzIHVuYXZhaWxhYmxlIG9yIHVudXNhYmxlDQorICovDQoraW50IHZob3N0 X3NldHVwX25ldChzdHJ1Y3QgY3R4ICpjKQ0KK3sNCisJY29uc3QgdWludDY0X3QgcmVxX2ZlYXR1 cmVzID0gKDFVTEwgPDwgVklSVElPX0ZfVkVSU0lPTl8xKSB8DQorCQkJCSAgICAgICgxVUxMIDw8 IFZIT1NUX05FVF9GX1ZJUlRJT19ORVRfSERSKTsNCisJdWludDY0X3QgZmVhdHVyZXM7DQorCWlu dCB2aG9zdF9mZDsNCisNCisJdmhvc3RfZmQgPSBvcGVuKCIvZGV2L3Zob3N0LW5ldCIsIE9fUkRX UiB8IE9fTk9OQkxPQ0sgfCBPX0NMT0VYRUMpOw0KKwlpZiAodmhvc3RfZmQgPCAwKSB7DQorCQlk ZWJ1Z19wZXJyb3IoIkNvdWxkbid0IG9wZW4gL2Rldi92aG9zdC1uZXQiKTsNCisJCXJldHVybiAt MTsNCisJfQ0KKw0KKwlpZiAoaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9PV05FUiwgTlVMTCkg PCAwKSB7DQorCQlkZWJ1Z19wZXJyb3IoIlZIT1NUX1NFVF9PV05FUiBpb2N0bCBmYWlsZWQiKTsN CisJCWdvdG8gY2xvc2VfZmQ7DQorCX0NCisNCisJaWYgKGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9H RVRfRkVBVFVSRVMsICZmZWF0dXJlcykgPCAwKSB7DQorCQlkZWJ1Z19wZXJyb3IoIlZIT1NUX0dF VF9GRUFUVVJFUyBpb2N0bCBmYWlsZWQiKTsNCisJCWdvdG8gY2xvc2VfZmQ7DQorCX0NCisNCisJ aWYgKChmZWF0dXJlcyAmIHJlcV9mZWF0dXJlcykgIT0gcmVxX2ZlYXR1cmVzKSB7DQorCQlkZWJ1 Zygidmhvc3QtbmV0IGlzIG1pc3NpbmcgZmVhdHVyZXM6IDB4JTAxNiIgUFJJeDY0LA0KKwkJICAg ICAgcmVxX2ZlYXR1cmVzICYgfmZlYXR1cmVzKTsNCisJCWdvdG8gY2xvc2VfZmQ7DQorCX0NCisN CisJZmVhdHVyZXMgPSByZXFfZmVhdHVyZXM7DQorCWlmIChpb2N0bCh2aG9zdF9mZCwgVkhPU1Rf U0VUX0ZFQVRVUkVTLCAmZmVhdHVyZXMpIDwgMCkgew0KKwkJZGVidWdfcGVycm9yKCJWSE9TVF9T RVRfRkVBVFVSRVMgaW9jdGwgZmFpbGVkIik7DQorCQlnb3RvIGNsb3NlX2ZkOw0KKwl9DQorDQor CWMtPnZob3N0LmZlYXR1cmVzID0gZmVhdHVyZXM7DQorCWMtPnZob3N0LmZkID0gdmhvc3RfZmQ7 DQorDQorCXJldHVybiAwOw0KKw0KK2Nsb3NlX2ZkOg0KKwljbG9zZSh2aG9zdF9mZCk7DQorDQor CXJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogdmhvc3Rfc2V0dXBfZXZlbnRmZHMoKSAtIFNl dCB1cCBvbmUgcXVldWUncyBldmVudGZkcyBhbmQgcmluZyBzaXplDQorICogQGM6CQlFeGVjdXRp b24gY29udGV4dDsgYy0+dmhvc3QuZmQgbXVzdCBhbHJlYWR5IGJlIHNldA0KKyAqIEBxdWV1ZV9p ZHg6CUluZGV4IG9mIHRoZSBxdWV1ZSAodnJpbmcpIHRvIGNvbmZpZ3VyZQ0KKyAqDQorICovDQor dm9pZCB2aG9zdF9zZXR1cF9ldmVudGZkcyhzdHJ1Y3QgY3R4ICpjLCBpbnQgcXVldWVfaWR4KQ0K K3sNCisJc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgY2FsbF9maWxlID0geyAuaW5kZXggPSBxdWV1 ZV9pZHggfTsNCisJc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUga2lja19maWxlID0geyAuaW5kZXgg PSBxdWV1ZV9pZHggfTsNCisJc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgZXJyX2ZpbGUgPSB7IC5p bmRleCA9IHF1ZXVlX2lkeCB9Ow0KKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUgc3RhdGUgPSB7 IC5pbmRleCA9IHF1ZXVlX2lkeCB9Ow0KKwl1bmlvbiBlcG9sbF9yZWYgcmVmID0geyAudHlwZSA9 IEVQT0xMX1RZUEVfVkhPU1RfQ0FMTCB9Ow0KKwlpbnQgdmhvc3RfZmQgPSBjLT52aG9zdC5mZDsN CisJc3RydWN0IGVwb2xsX2V2ZW50IGV2Ow0KKwlpbnQgcmM7DQorDQorCXN0YXRlLm51bSA9IFZI T1NUX05ERVNDUzsNCisJcmVmLnF1ZXVlID0gcXVldWVfaWR4Ow0KKw0KKwljYWxsX2ZpbGUuZmQg PSBldmVudGZkKDAsIEVGRF9OT05CTE9DSyB8IEVGRF9DTE9FWEVDKTsNCisJaWYgKGNhbGxfZmls ZS5mZCA8IDApDQorCQlkaWVfcGVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIHZob3N0IGNhbGwgZXZl bnRmZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorCXJlZi5mZCA9IGNhbGxfZmls ZS5mZDsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VUX1ZSSU5HX0NBTEwsICZj YWxsX2ZpbGUpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZSSU5H X0NBTEwgaW9jdGwgZmFpbGVkLCBxdWV1ZSAlZCIsDQorCQkJICAgcXVldWVfaWR4KTsNCisNCisJ ZXYgPSAoc3RydWN0IGVwb2xsX2V2ZW50KXsgLmRhdGEudTY0ID0gcmVmLnU2NCwgLmV2ZW50cyA9 IEVQT0xMSU4gfTsNCisJcmMgPSBlcG9sbF9jdGwoYy0+ZXBvbGxmZCwgRVBPTExfQ1RMX0FERCwg cmVmLmZkLCAmZXYpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJvcigiRmFpbGVkIHRvIHdh dGNoIHZob3N0IGNhbGwgZXZlbnRmZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQor CWMtPnZob3N0LnZxW3F1ZXVlX2lkeF0uY2FsbF9mZCA9IGNhbGxfZmlsZS5mZDsNCisNCisJZXJy X2ZpbGUuZmQgPSBldmVudGZkKDAsIEVGRF9OT05CTE9DSyB8IEVGRF9DTE9FWEVDKTsNCisJaWYg KGVycl9maWxlLmZkIDwgMCkNCisJCWRpZV9wZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgdmhvc3Qg ZXJyb3IgZXZlbnRmZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorDQorCXJjID0g aW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9WUklOR19FUlIsICZlcnJfZmlsZSk7DQorCWlmIChy YyA8IDApDQorCQlkaWVfcGVycm9yKCJWSE9TVF9TRVRfVlJJTkdfRVJSIGlvY3RsIGZhaWxlZCwg cXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorDQorCXJlZi50eXBlID0gRVBPTExfVFlQ RV9WSE9TVF9FUlJPUjsNCisJcmVmLmZkID0gZXJyX2ZpbGUuZmQ7DQorCWV2LmRhdGEudTY0ID0g cmVmLnU2NDsNCisJcmMgPSBlcG9sbF9jdGwoYy0+ZXBvbGxmZCwgRVBPTExfQ1RMX0FERCwgcmVm LmZkLCAmZXYpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3BlcnJvcigiRmFpbGVkIHRvIHdhdGNo IHZob3N0IGVycm9yIGV2ZW50ZmQsIHF1ZXVlICVkIiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KKwlj LT52aG9zdC52cVtxdWV1ZV9pZHhdLmVycl9mZCA9IGVycl9maWxlLmZkOw0KKw0KKwlyYyA9IGlv Y3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRfVlJJTkdfTlVNLCAmc3RhdGUpOw0KKwlpZiAocmMgPCAw KQ0KKwkJZGllX3BlcnJvcigiVkhPU1RfU0VUX1ZSSU5HX05VTSBpb2N0bCBmYWlsZWQsIHF1ZXVl ICVkIiwNCisJCQkgICBxdWV1ZV9pZHgpOw0KKw0KKwlraWNrX2ZpbGUuZmQgPSBldmVudGZkKDAs IEVGRF9OT05CTE9DSyB8IEVGRF9DTE9FWEVDKTsNCisJaWYgKGtpY2tfZmlsZS5mZCA8IDApDQor CQlkaWVfcGVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIHZob3N0IGtpY2sgZXZlbnRmZCwgcXVldWUg JWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorDQorCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NU X1NFVF9WUklOR19LSUNLLCAma2lja19maWxlKTsNCisJaWYgKHJjIDwgMCkNCisJCWRpZV9wZXJy b3IoIlZIT1NUX1NFVF9WUklOR19LSUNLIGlvY3RsIGZhaWxlZCwgcXVldWUgJWQiLA0KKwkJCSAg IHF1ZXVlX2lkeCk7DQorDQorCWMtPnZob3N0LnZxW3F1ZXVlX2lkeF0ua2lja19mZCA9IGtpY2tf ZmlsZS5mZDsNCisNCisJdmhvc3RfdnFfc3RhdGVbcXVldWVfaWR4XS5udW1fZnJlZSA9IFZIT1NU X05ERVNDUzsNCit9DQorDQorLyoqDQorICogdmhvc3Rfc2V0dXBfbWVtb3J5X3RhYmxlKCkgLSBS ZWdpc3RlciB0aGUgR1BBL0hWQSB0cmFuc2xhdGlvbiB0YWJsZQ0KKyAqIEBjOgkJRXhlY3V0aW9u IGNvbnRleHQ7IGMtPnZob3N0LmZkIG11c3QgYWxyZWFkeSBiZSBzZXQNCisgKg0KKyAqIHZob3N0 LW5ldCByZWFkcyB0aGUgYWRkcmVzc2VzIHdlIHB1dCBpbiBkZXNjcmlwdG9ycyBhcyBndWVzdCBw aHlzaWNhbA0KKyAqIGFkZHJlc3NlcywgYW5kIHRyYW5zbGF0ZXMgdGhlbSB0aHJvdWdoIHRoaXMg dGFibGUgYmVmb3JlIHRvdWNoaW5nIHRoZQ0KKyAqIG1lbW9yeSB0aGV5IHJlZmVyIHRvLiBwYXN0 YSBoYXMgbm8gZ3Vlc3QgYW5kIG5vIHNlY29uZCBhZGRyZXNzIHNwYWNlOg0KKyAqIHRoZSBhZGRy ZXNzZXMgd2UgcHV0IHRoZXJlIGFyZSBvdXIgb3duIHZpcnR1YWwgYWRkcmVzc2VzLiBFdmVyeSBy ZWdpb24NCisgKiBiZWxvdyB0aGVyZWZvcmUgc2V0cyBndWVzdF9waHlzX2FkZHIgZXF1YWwgdG8g dXNlcnNwYWNlX2FkZHIsIHNvIHRoYXQNCisgKiBHUEEgPT0gSFZBIGFuZCB0aGUgdHJhbnNsYXRp b24gaXMgYW4gaWRlbnRpdHkgbWFwcGluZy4NCisgKg0KKyAqIFJldHVybjogMCBvbiBzdWNjZXNz LCAtMSBvbiBlcnJvciB3aXRoIGVycm5vIHNldA0KKyAqLw0KK2ludCB2aG9zdF9zZXR1cF9tZW1v cnlfdGFibGUoc3RydWN0IGN0eCAqYykgew0KKwlzaXplX3QgcmVnaW9uX2lkeCA9IDA7DQorDQor CS8qIGdlbmVyYWwgcHVycG9zZSBidWZmZXJzICovIA0KKwlnZW5lcmFsX3JlZ2lzdGVyX21lbW9y eV9yZWdpb25zKCZ2aG9zdF9tZW1vcnksICZyZWdpb25faWR4KTsNCisNCisJLyogdGNwIHNwZWNp ZmljIGJ1ZmZlcnMgKi8NCisJdGNwX3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKCZ2aG9zdF9tZW1v cnksICZyZWdpb25faWR4KTsNCisNCisJLyogdWRwIHNwZWNpZmljIGJ1ZmZlcnMgKi8NCisJdWRw X3JlZ2lzdGVyX21lbW9yeV9yZWdpb25zKCZ2aG9zdF9tZW1vcnksICZyZWdpb25faWR4KTsNCisN CisJdmhvc3RfbWVtb3J5Lm1lbS5ucmVnaW9ucyA9IHJlZ2lvbl9pZHg7DQorDQorCXJldHVybiBp b2N0bChjLT52aG9zdC5mZCwgVkhPU1RfU0VUX01FTV9UQUJMRSwgJnZob3N0X21lbW9yeS5tZW0p Ow0KK30NCisNCisvKioNCisgKiB2aG9zdF9zZXRfdnJpbmcoKSAtIFJlZ2lzdGVyIGEgdnJpbmcn cyBhZGRyZXNzZXMgYW5kIGJpbmQgaXRzIGJhY2tlbmQNCisgKiBAYzoJCUV4ZWN1dGlvbiBjb250 ZXh0OyBjLT52aG9zdC5mZCBtdXN0IGFscmVhZHkgYmUgc2V0DQorICogQHF1ZXVlX2lkeDoJSW5k ZXggb2YgdGhlIHF1ZXVlICh2cmluZykgdG8gY29uZmlndXJlDQorICogQHRhcF9mZDoJVGFwIGZk IHRvIGJpbmQgYXMgdGhpcyBxdWV1ZSdzIGJhY2tlbmQNCisgKi8NCit2b2lkIHZob3N0X3NldF92 cmluZyhzdHJ1Y3QgY3R4ICpjLCBpbnQgcXVldWVfaWR4LCBpbnQgdGFwX2ZkKQ0KK3sNCisJaW50 IHZob3N0X2ZkID0gYy0+dmhvc3QuZmQ7DQorCXN0cnVjdCB2aG9zdF92cmluZ19hZGRyIGFkZHIg PSB7DQorCQkuaW5kZXggPSBxdWV1ZV9pZHgsDQorCQkuZGVzY191c2VyX2FkZHIgPSAodW5zaWdu ZWQgbG9uZyl2cmluZ19kZXNjW3F1ZXVlX2lkeF0sDQorCQkuYXZhaWxfdXNlcl9hZGRyID0gKHVu c2lnbmVkIGxvbmcpJnZyaW5nX2F2YWlsX2FsbFtxdWV1ZV9pZHhdLA0KKwkJLnVzZWRfdXNlcl9h ZGRyID0gKHVuc2lnbmVkIGxvbmcpJnZyaW5nX3VzZWRfYWxsW3F1ZXVlX2lkeF0sDQorCQkubG9n X2d1ZXN0X2FkZHIgPSAodW5zaWduZWQgbG9uZykmdnJpbmdfdXNlZF9hbGxbcXVldWVfaWR4XSwN CisJfTsNCisJc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgZmlsZSA9IHsNCisJCS5pbmRleCA9IHF1 ZXVlX2lkeCwNCisJCS5mZCA9IHRhcF9mZCwNCisJfTsNCisJdW5zaWduZWQgaW50IGk7DQorCWlu dCByYzsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VUX1ZSSU5HX0FERFIsICZh ZGRyKTsNCisJaWYgKHJjIDwgMCkNCisJCWRpZV9wZXJyb3IoIlZIT1NUX1NFVF9WUklOR19BRERS IGlvY3RsIGZhaWxlZCwgcXVldWUgJWQiLA0KKwkJCSAgIHF1ZXVlX2lkeCk7DQorDQorCWlmIChx dWV1ZV9pZHggPT0gMCkgew0KKwkJZm9yIChpID0gMDsgaSA8IFZIT1NUX05ERVNDUzsgKytpKSB7 DQorCQkJdnJpbmdfZGVzY1swXVtpXS5hZGRyID0gKHVpbnRwdHJfdClwa3RfYnVmICsNCisJCQkJ aSAqIFZIT1NUX0RFU0NfQllURVM7DQorCQkJdnJpbmdfZGVzY1swXVtpXS5sZW4gPSBWSE9TVF9E RVNDX0JZVEVTOw0KKwkJCXZyaW5nX2Rlc2NbMF1baV0uZmxhZ3MgPSBWUklOR19ERVNDX0ZfV1JJ VEU7DQorCQl9DQorDQorCQlmb3IgKGkgPSAwOyBpIDwgVkhPU1RfTkRFU0NTOyArK2kpDQorCQkJ dnJpbmdfYXZhaWxfYWxsWzBdLmF2YWlsLnJpbmdbaV0gPSBodG9sZTE2KGkpOw0KKw0KKwkJdmhv c3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKGMpOw0KKwl9DQorDQorCWlmIChxdWV1ZV9pZHggPT0g MSkgew0KKwkJZm9yIChpID0gMDsgaSA8IChWSE9TVF9OREVTQ1MgLSAxKTsgKytpKQ0KKwkJCXZy aW5nX2Rlc2NbMV1baV0ubmV4dCA9IGkgKyAxOw0KKwl9DQorDQorCXJjID0gaW9jdGwodmhvc3Rf ZmQsIFZIT1NUX05FVF9TRVRfQkFDS0VORCwgJmZpbGUpOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGll X3BlcnJvcigiVkhPU1RfTkVUX1NFVF9CQUNLRU5EIGlvY3RsIGZhaWxlZCwgcXVldWUgJWQiLA0K KwkJCSAgIHF1ZXVlX2lkeCk7DQorfQ0KKw0KKy8qKg0KKyAqIHZob3N0X3J4X2Rlc2NyaXB0b3Jf aGFuZG9mZigpIC0gQW5ub3VuY2UgZnJlZWQgZnJvbS1ndWVzdCBkZXNjcmlwdG9ycw0KKyAqIEBj OgkJRXhlY3V0aW9uIGNvbnRleHQNCisgKg0KKyAqIEJ1bXBzIGF2YWlsLmlkeCBieSB0aGUgbnVt YmVyIG9mIGRlc2NyaXB0b3JzIGFjY3VtdWxhdGVkIGluDQorICogdmhvc3RfdnFfc3RhdGVbMF0u bnVtX2ZyZWUgKGZyb20gcHJpb3IgY29uc3VtZV9vbmVfcnhfZGVzY3JpcHRvcigpIGNhbGxzKSwN CisgKiB0aGVuIHJlc2V0cyB0aGUgY291bnRlciB0byB6ZXJvLiBUaGUga2VybmVsIHdpbGwgc2Vl IHRoZSBuZXcNCisgKiBhdmFpbC5pZHggYW5kIGNvbnN1bWUgdGhlIGZyZXNobHktYXZhaWxhYmxl IGRlc2NyaXB0b3JzLg0KKyAqLw0KK3ZvaWQgdmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKHN0 cnVjdCBjdHggKmMpDQorew0KKwlzbXBfd21iKCk7DQorDQorCWlmICghdmhvc3RfdnFfc3RhdGVb MF0ubnVtX2ZyZWUpDQorCQlyZXR1cm47DQorDQorCXZyaW5nX2F2YWlsX2FsbFswXS5hdmFpbC5p ZHggKz0gdmhvc3RfdnFfc3RhdGVbMF0ubnVtX2ZyZWU7DQorCXZob3N0X3ZxX3N0YXRlWzBdLm51 bV9mcmVlID0gMDsNCisJdmhvc3Rfa2ljaygmdnJpbmdfdXNlZF9hbGxbMF0udXNlZCwgYy0+dmhv c3QudnFbMF0ua2lja19mZCk7DQorfQ0KKw0KKy8qKg0KKyAqIHZob3N0X2tpY2soKSAtIE5vdGlm eSB0aGUga2VybmVsIHRoYXQgbmV3IGRlc2NyaXB0b3JzIGFyZSBhdmFpbGFibGUNCisgKiBAdXNl ZDoJVXNlZCByaW5nIG9mIHRoZSBxdWV1ZSB3ZSdyZSBhbm5vdW5jaW5nIG9uLCBjaGVja2VkIHRv IHNlZQ0KKyAqCQl3aGV0aGVyIHRoZSBrZXJuZWwncyB2aXJ0aW8gdGhyZWFkIGlzIGFscmVhZHkg cmVhZGluZw0KKyAqCQlkZXNjcmlwdG9ycyBhbmQgZG9lc24ndCB3YW50IHRvIGJlIG5vdGlmaWVk DQorICogQGtpY2tfZmQ6CUtpY2sgZXZlbnRmZCBvZiB0aGF0IHNhbWUgcXVldWUNCisgKi8NCit2 b2lkIHZob3N0X2tpY2soc3RydWN0IHZyaW5nX3VzZWQgKnVzZWQsIGludCBraWNrX2ZkKQ0KK3sN CisJLyogRW5zdXJlIHRoYXQgdGhlIHJlYWQgb2YgdXNlZC0+ZmxhZ3MgZG9lc24ndCBnZXQgcmVv cmRlcmVkIHRvIGJlDQorCSAqIGFib3ZlIHRoZSBhdmFpbC5pZHggdXBkYXRlDQorCSAqLw0KKwlz bXBfbWIoKTsNCisNCisJaWYgKCEodXNlZC0+ZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZ KSkNCisJCWV2ZW50ZmRfd3JpdGUoa2lja19mZCwgMSk7DQorfQ0KZGlmZiAtLWdpdCBhL3Zob3N0 LmggYi92aG9zdC5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYWFhOTM3 ZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvdmhvc3QuaA0KQEAgLTAsMCArMSw3OSBAQA0KKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyDQorICogQ29weXJpZ2h0IFJl ZCBIYXQNCisgKiBBdXRob3I6IEFtbWFyIFlhc3NlciA8YWVyb3NvdW5kMTYxQGdtYWlsLmNvbT4N CisgKg0KKyAqIHZob3N0LmggLSB2aG9zdC1uZXQgKHZob3N0LWtlcm5lbCkgYWNjZWxlcmF0aW9u IGZvciBwYXN0YSBtb2RlDQorICovDQorDQorI2lmbmRlZiBWSE9TVF9IDQorI2RlZmluZSBWSE9T VF9IDQorDQorI2luY2x1ZGUgPGFzc2VydC5oPg0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5j bHVkZSA8c3RkaW50Lmg+DQorDQorI2luY2x1ZGUgPGxpbnV4L3Zob3N0Lmg+DQorI2luY2x1ZGUg PGxpbnV4L3Zob3N0X3R5cGVzLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4N CisjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPg0KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9f cmluZy5oPg0KKw0KKyNpbmNsdWRlICJwYXNzdC5oIg0KKw0KKy8qKg0KKyAqIHN0cnVjdCB2cV9z dGF0ZSAtIFBlci12aXJ0cXVldWUgbG9jYWwgZGVzY3JpcHRvciB0cmFja2luZw0KKyAqIEBudW1f ZnJlZToJCU51bWJlciBvZiBkZXNjcmlwdG9ycyByZWFkeSB0byBiZSBhbm5vdW5jZWQgdG8gdGhl DQorICoJCQlrZXJuZWwgdmlhIHZob3N0X3J4X2Rlc2NyaXB0b3JfaGFuZG9mZigpDQorICogQGxh c3RfdXNlZF9pZHg6CU51bWJlciBvZiB1c2VkLXJpbmcgZW50cmllcyBjb25zdW1lZCBzbyBmYXI7 DQorICoJCQlsYWdnaW5nIHJlYWQgY3Vyc29yIHZzLiB2cmluZ191c2VkLT5pZHggKHRoZQ0KKyAq CQkJa2VybmVsJ3Mgd3JpdGUgY3Vyc29yKQ0KKyAqLw0KK2V4dGVybiBzdHJ1Y3QgdnFfc3RhdGUg ew0KKwl1aW50MTZfdCBudW1fZnJlZTsNCisJdWludDE2X3QgbGFzdF91c2VkX2lkeDsNCisJdWlu dDE2X3QgbmV4dF9mcmVlOw0KK30gdmhvc3RfdnFfc3RhdGVbMl07DQorDQorDQorZXh0ZXJuIHN0 cnVjdCB2cmluZ19kZXNjIHZyaW5nX2Rlc2NbMl1bVkhPU1RfTkRFU0NTXTsNCit1bmlvbiB2cmlu Z19hdmFpbF91IHsNCisJc3RydWN0IHZyaW5nX2F2YWlsIGF2YWlsOw0KKwljaGFyIGJ1ZltvZmZz ZXRvZihzdHJ1Y3QgdnJpbmdfYXZhaWwsIHJpbmdbVkhPU1RfTkRFU0NTXSldOw0KK307DQorI3By YWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoDQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVk ICItV3BlZGFudGljIg0KK2V4dGVybiB1bmlvbiB2cmluZ19hdmFpbF91IHZyaW5nX2F2YWlsX2Fs bFsyXTsNCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcA0KKw0KK3VuaW9uIHZyaW5nX3VzZWRf dSB7DQorCXN0cnVjdCB2cmluZ191c2VkIHVzZWQ7DQorCWNoYXIgYnVmW29mZnNldG9mKHN0cnVj dCB2cmluZ191c2VkLCByaW5nW1ZIT1NUX05ERVNDU10pXTsNCit9Ow0KKyNwcmFnbWEgR0NDIGRp YWdub3N0aWMgcHVzaA0KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwZWRhbnRp YyINCitleHRlcm4gdW5pb24gdnJpbmdfdXNlZF91IHZyaW5nX3VzZWRfYWxsWzJdOw0KKyNwcmFn bWEgR0NDIGRpYWdub3N0aWMgcG9wDQorDQorI2RlZmluZSBOX1ZIT1NUX1JFR0lPTlMgMg0KK3Vu aW9uIHZob3N0X21lbW9yeV91IHsNCisJc3RydWN0IHZob3N0X21lbW9yeSBtZW07DQorCWNoYXIg YnVmW29mZnNldG9mKHN0cnVjdCB2aG9zdF9tZW1vcnksIHJlZ2lvbnNbTl9WSE9TVF9SRUdJT05T XSldOw0KK307DQorZXh0ZXJuIHVuaW9uIHZob3N0X21lbW9yeV91IHZob3N0X21lbW9yeTsNCisN CisjZGVmaW5lIFZIT1NUX01FTU9SWV9SRUdJT05fUFRSKGFkZHIsIHNpemUpIFwNCisgICAgKHN0 cnVjdCB2aG9zdF9tZW1vcnlfcmVnaW9uKSB7IFwNCisgICAgICAgIC5ndWVzdF9waHlzX2FkZHIg PSAodWludHB0cl90KWFkZHIsIFwNCisgICAgICAgIC5tZW1vcnlfc2l6ZSA9IHNpemUsIFwNCisg ICAgICAgIC51c2Vyc3BhY2VfYWRkciAgPSAodWludHB0cl90KWFkZHIsIFwNCisgICAgfQ0KKyNk ZWZpbmUgVkhPU1RfTUVNT1JZX1JFR0lPTihidWYpIFZIT1NUX01FTU9SWV9SRUdJT05fUFRSKCZi dWYsIHNpemVvZihidWYpKQ0KKw0KK3ZvaWQgdmhvc3Rfc2V0X3ZyaW5nKHN0cnVjdCBjdHggKmMs IGludCBxdWV1ZV9pZHgsIGludCB0YXBfZmQpOw0KK2ludCB2aG9zdF9zZXR1cF9tZW1vcnlfdGFi bGUoc3RydWN0IGN0eCAqYyk7DQoraW50IHZob3N0X3NldHVwX25ldChzdHJ1Y3QgY3R4ICpjKTsN Cit2b2lkIHZob3N0X3NldHVwX2V2ZW50ZmRzKHN0cnVjdCBjdHggKmMsIGludCBxdWV1ZV9pZHgp Ow0KK3ZvaWQgdmhvc3RfcnhfZGVzY3JpcHRvcl9oYW5kb2ZmKHN0cnVjdCBjdHggKmMpOw0KK3Zv aWQgdmhvc3Rfa2ljayhzdHJ1Y3QgdnJpbmdfdXNlZCAqdXNlZCwgaW50IGtpY2tfZmQpOw0KKw0K KyNlbmRpZiAvKiBWSE9TVF9IICovDQotLSANCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkNCg0K