From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 3/7] drm/vmwgfx: Initial DX support Date: Wed, 12 Aug 2015 22:49:04 -0700 Message-ID: <1439444948-4746-4-git-send-email-thellstrom@vmware.com> References: <1439444948-4746-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx6.bahnhof.se (mx6.bahnhof.se [213.80.101.16]) by gabe.freedesktop.org (Postfix) with ESMTPS id AC4F56E286 for ; Wed, 12 Aug 2015 22:49:19 -0700 (PDT) Received: from localhost (mf.bahnhof.se [213.80.101.20]) by mx6-reinject (Postfix) with ESMTP id 22DE8417AA for ; Thu, 13 Aug 2015 07:49:18 +0200 (CEST) Received: from mf1.bahnhof.se ([127.0.0.1]) by localhost (mf1.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id OVvOpe+HMzjT for ; Thu, 13 Aug 2015 07:49:17 +0200 (CEST) Received: from mail.shipmail.org (h-5-150-198-217.na.cust.bahnhof.se [5.150.198.217]) by mf1.bahnhof.se (Postfix) with ESMTP id 3A2E1386EEC for ; Thu, 13 Aug 2015 07:49:17 +0200 (CEST) Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 8256D3F400B for ; Thu, 13 Aug 2015 07:49:16 +0200 (CEST) Received: from localhost.localdomain (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id CC87A3F4009 for ; Thu, 13 Aug 2015 07:49:15 +0200 (CEST) In-Reply-To: <1439444948-4746-1-git-send-email-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SW5pdGlhbCBEWCBzdXBwb3J0LgpDby1hdXRob3JlZCB3aXRoIFNpbmNsYWlyIFllaCwgQ2hhcm1h aW5lIExlZSBhbmQgSmFrb2IgQm9ybmVjcmFudHouCgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgSGVs bHN0cm9tIDx0aGVsbHN0cm9tQHZtd2FyZS5jb20+ClNpZ25lZC1vZmYtYnk6IFNpbmNsYWlyIFll aCA8c3llaEB2bXdhcmUuY29tPgpTaWduZWQtb2ZmLWJ5OiBDaGFybWFpbmUgTGVlIDxjaGFybWFp bmVsQHZtd2FyZS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtlZmlsZSAgICAg ICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iaW5kaW5n LmMgICAgICAgfCAxMjk0ICsrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2JpbmRpbmcuaCAgICAgICB8ICAyMDkgKysrKwogZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfY21kYnVmLmMgICAgICAgIHwgICAgNSArLQogZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfY21kYnVmX3Jlcy5jICAgIHwgICAyNCArLQogZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfY29udGV4dC5jICAgICAgIHwgIDczNSArKysrKystLS0tLS0tCiBkcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb3RhYmxlLmMgICAgICAgfCAgNjYyICsrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyAgICAgICAgICAgfCAgIDU0 ICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCAgICAgICAgICAgfCAgMTc1 ICsrLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jICAgICAgIHwgMTQ2 OCArKysrKysrKysrKysrKysrKysrKysrLS0tCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9maWZvLmMgICAgICAgICAgfCAgIDI4ICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9pb2N0bC5jICAgICAgICAgfCAgICA3ICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9rbXMuYyAgICAgICAgICAgfCAgIDE1ICstCiBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9tb2IuYyAgICAgICAgICAgfCAgMTY5ICstLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfcmVzb3VyY2UuYyAgICAgIHwgICA0OCArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfcmVzb3VyY2VfcHJpdi5oIHwgICAxMiArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn Znhfc2hhZGVyLmMgICAgICAgIHwgIDQ4NCArKysrKysrLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfc28uYyAgICAgICAgICAgIHwgIDU1NSArKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9zby5oICAgICAgICAgICAgfCAgMTYwICsrKwogZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfc3RkdS5jICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9zdXJmYWNlLmMgICAgICAgfCAgMTA5ICstCiBpbmNsdWRlL3VhcGkv ZHJtL3Ztd2dmeF9kcm0uaCAgICAgICAgICAgICAgICAgfCAgIDM1ICstCiAyMiBmaWxlcyBjaGFu Z2VkLCA1NDExIGluc2VydGlvbnMoKyksIDgzOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iaW5kaW5nLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iaW5kaW5nLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb3RhYmxlLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zby5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc28uaAoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L01ha2VmaWxlCmluZGV4IDQ4NDA5MzkuLmQyODE1NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9NYWtl ZmlsZQpAQCAtOCw1ICs4LDYgQEAgdm13Z2Z4LXkgOj0gdm13Z2Z4X2V4ZWNidWYubyB2bXdnZnhf Z21yLm8gdm13Z2Z4X2ttcy5vIHZtd2dmeF9kcnYubyBcCiAJICAgIHZtd2dmeF9mZW5jZS5vIHZt d2dmeF9kbWFidWYubyB2bXdnZnhfc2Nybi5vIHZtd2dmeF9jb250ZXh0Lm8gXAogCSAgICB2bXdn Znhfc3VyZmFjZS5vIHZtd2dmeF9wcmltZS5vIHZtd2dmeF9tb2IubyB2bXdnZnhfc2hhZGVyLm8g XAogCSAgICB2bXdnZnhfY21kYnVmX3Jlcy5vIHZtd2dmeF9jbWRidWYubyB2bXdnZnhfc3RkdS5v IFwKKwkgICAgdm13Z2Z4X2NvdGFibGUubyB2bXdnZnhfc28ubyB2bXdnZnhfYmluZGluZy5vCiAK IG9iai0kKENPTkZJR19EUk1fVk1XR0ZYKSA6PSB2bXdnZngubwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYmluZGluZy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfYmluZGluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlj NDJlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9i aW5kaW5nLmMKQEAgLTAsMCArMSwxMjk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBD b3B5cmlnaHQgwqkgMjAxNSBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKKyAqIEFs bCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJT b2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQv b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25z IHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwor ICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0 IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdI VCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1Ig T1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K Ky8qCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgdm13Z2Z4IGNvbnRleHQgYmluZGluZyBt YW5hZ2VyLAorICogVGhlIHNvbGUgcmVhc29uIGZvciBoYXZpbmcgdG8gdXNlIHRoaXMgY29kZSBp cyB0aGF0IHZtd2FyZSBndWVzdAorICogYmFja2VkIGNvbnRleHRzIGNhbiBiZSBzd2FwcGVkIG91 dCB0byB0aGVpciBiYWNraW5nIG1vYnMgYnkgdGhlIGRldmljZQorICogYXQgYW55IHRpbWUsIGFs c28gc3dhcHBlZCBpbiBhdCBhbnkgdGltZS4gQXQgc3dhcGluIHRpbWUsIHRoZSBkZXZpY2UKKyAq IHZhbGlkYXRlcyB0aGUgY29udGV4dCBiaW5kaW5ncyB0byBtYWtlIHN1cmUgdGhleSBwb2ludCB0 byB2YWxpZCByZXNvdXJjZXMuCisgKiBJdCdzIHRoaXMgb3V0c2lkZS1vZi1kcmF3Y2FsbCB2YWxp ZGF0aW9uICh0aGF0IGNhbiBoYXBwZW4gYXQgYW55IHRpbWUpLAorICogdGhhdCBtYWtlcyB0aGlz IGNvZGUgbmVjZXNzYXJ5LgorICoKKyAqIFdlIHRoZXJlZm9yZSBuZWVkIHRvIGtpbGwgYW55IGNv bnRleHQgYmluZGluZ3MgcG9pbnRpbmcgdG8gYSByZXNvdXJjZQorICogd2hlbiB0aGUgcmVzb3Vy Y2UgaXMgc3dhcHBlZCBvdXQuIEZ1cnRoZXJtb3JlLCBpZiB0aGUgdm13Z2Z4IGRyaXZlciBoYXMK KyAqIHN3YXBwZWQgb3V0IHRoZSBjb250ZXh0IHdlIGNhbid0IHN3YXAgaXQgaW4gYWdhaW4gdG8g a2lsbCBiaW5kaW5ncyBiZWNhdXNlCisgKiBvZiBiYWNraW5nIG1vYiByZXNlcnZhdGlvbiBsb2Nr ZGVwIHZpb2xhdGlvbnMsIHNvIGFzIHBhcnQgb2YKKyAqIGNvbnRleHQgc3dhcG91dCwgYWxzbyBr aWxsIGFsbCBiaW5kaW5ncyBvZiBhIGNvbnRleHQsIHNvIHRoYXQgdGhleSBhcmUKKyAqIGFscmVh ZHkga2lsbGVkIGlmIGEgcmVzb3VyY2UgdG8gd2hpY2ggYSBiaW5kaW5nIHBvaW50cworICogbmVl ZHMgdG8gYmUgc3dhcHBlZCBvdXQuCisgKgorICogTm90ZSB0aGF0IGEgcmVzb3VyY2UgY2FuIGJl IHBvaW50ZWQgdG8gYnkgYmluZGluZ3MgZnJvbSBtdWx0aXBsZSBjb250ZXh0cywKKyAqIFRoZXJl Zm9yZSB3ZSBjYW4ndCBlYXNpbHkgcHJvdGVjdCB0aGlzIGRhdGEgYnkgYSBwZXIgY29udGV4dCBt dXRleAorICogKHVubGVzcyB3ZSB1c2UgZGVhZGxvY2stc2FmZSBXVyBtdXRleGVzKS4gU28gd2Ug dXNlIGEgZ2xvYmFsIGJpbmRpbmdfbXV0ZXgKKyAqIHRvIHByb3RlY3QgYWxsIGJpbmRpbmcgbWFu YWdlciBkYXRhLgorICoKKyAqIEZpbmFsbHksIGFueSBhc3NvY2lhdGlvbiBiZXR3ZWVuIGEgY29u dGV4dCBhbmQgYSBnbG9iYWwgcmVzb3VyY2UKKyAqIChzdXJmYWNlLCBzaGFkZXIgb3IgZXZlbiBE WCBxdWVyeSkgaXMgY29uY2VwdHVhbGx5IGEgY29udGV4dCBiaW5kaW5nIHRoYXQKKyAqIG5lZWRz IHRvIGJlIHRyYWNrZWQgYnkgdGhpcyBjb2RlLgorICovCisKKyNpbmNsdWRlICJ2bXdnZnhfZHJ2 LmgiCisjaW5jbHVkZSAidm13Z2Z4X2JpbmRpbmcuaCIKKyNpbmNsdWRlICJkZXZpY2VfaW5jbHVk ZS9zdmdhM2RfcmVnLmgiCisKKyNkZWZpbmUgVk1XX0JJTkRJTkdfUlRfQklUICAgICAwCisjZGVm aW5lIFZNV19CSU5ESU5HX1BTX0JJVCAgICAgMQorI2RlZmluZSBWTVdfQklORElOR19TT19CSVQg ICAgIDIKKyNkZWZpbmUgVk1XX0JJTkRJTkdfVkJfQklUICAgICAzCisjZGVmaW5lIFZNV19CSU5E SU5HX05VTV9CSVRTICAgNAorCisjZGVmaW5lIFZNV19CSU5ESU5HX1BTX1NSX0JJVCAgMAorCisv KioKKyAqIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgLSBwZXIgY29udGV4dCBiaW5kaW5n IHN0YXRlCisgKgorICogQGRldl9wcml2OiBQb2ludGVyIHRvIGRldmljZSBwcml2YXRlIHN0cnVj dHVyZS4KKyAqIEBsaXN0OiBsaW5rZWQgbGlzdCBvZiBpbmRpdmlkdWFsIGFjdGl2ZSBiaW5kaW5n cy4KKyAqIEByZW5kZXJfdGFyZ2V0czogUmVuZGVyIHRhcmdldCBiaW5kaW5ncy4KKyAqIEB0ZXh0 dXJlX3VuaXRzOiBUZXh0dXJlIHVuaXRzIGJpbmRpbmdzLgorICogQGRzX3ZpZXc6IERlcHRoLXN0 ZW5jaWwgdmlldyBiaW5kaW5nLgorICogQHNvX3RhcmdldHM6IFN0cmVhbU91dHB1dCB0YXJnZXQg YmluZGluZ3MuCisgKiBAdmVydGV4X2J1ZmZlcnM6IFZlcnRleCBidWZmZXIgYmluZGluZ3MuCisg KiBAaW5kZXhfYnVmZmVyOiBJbmRleCBidWZmZXIgYmluZGluZy4KKyAqIEBwZXJfc2hhZGVyOiBQ ZXIgc2hhZGVyLXR5cGUgYmluZGluZ3MuCisgKiBAZGlydHk6IEJpdG1hcCB0cmFja2luZyBwZXIg YmluZGluZy10eXBlIGNoYW5nZXMgdGhhdCBoYXZlIG5vdCB5ZXQKKyAqIGJlZW4gZW1pdHRlZCB0 byB0aGUgZGV2aWNlLgorICogQGRpcnR5X3ZiOiBCaXRtYXAgdHJhY2tpbmcgaW5kaXZpZHVhbCB2 ZXJ0ZXggYnVmZmVyIGJpbmRpbmcgY2hhbmdlcyB0aGF0CisgKiBoYXZlIG5vdCB5ZXQgYmVlbiBl bWl0dGVkIHRvIHRoZSBkZXZpY2UuCisgKiBAYmluZF9jbWRfYnVmZmVyOiBTY3JhdGNoIHNwYWNl IHVzZWQgdG8gY29uc3RydWN0IGJpbmRpbmcgY29tbWFuZHMuCisgKiBAYmluZF9jbWRfY291bnQ6 IE51bWJlciBvZiBiaW5kaW5nIGNvbW1hbmQgZGF0YSBlbnRyaWVzIGluIEBiaW5kX2NtZF9idWZm ZXIKKyAqIEBiaW5kX2ZpcnN0X3Nsb3Q6IFVzZWQgdG9nZXRoZXIgd2l0aCBAYmluZF9jbWRfYnVm ZmVyIHRvIGluZGljYXRlIHRoZQorICogZGV2aWNlIGJpbmRpbmcgc2xvdCBvZiB0aGUgZmlyc3Qg Y29tbWFuZCBkYXRhIGVudHJ5IGluIEBiaW5kX2NtZF9idWZmZXIuCisgKgorICogTm90ZSB0aGF0 IHRoaXMgc3RydWN0dXJlIGFsc28gcHJvdmlkZXMgc3RvcmFnZSBzcGFjZSBmb3IgdGhlIGluZGl2 aWR1YWwKKyAqIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmcgb2JqZWN0cywgc28gdGhhdCBubyBkeW5h bWljIGFsbG9jYXRpb24gaXMgbmVlZGVkCisgKiBmb3IgaW5kaXZpZHVhbCBiaW5kaW5ncy4KKyAq CisgKi8KK3N0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgeworCXN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXY7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCB2bXdfY3R4X2Jp bmRpbmZvX3ZpZXcgcmVuZGVyX3RhcmdldHNbU1ZHQTNEX1JUX01BWF07CisJc3RydWN0IHZtd19j dHhfYmluZGluZm9fdGV4IHRleHR1cmVfdW5pdHNbU1ZHQTNEX05VTV9URVhUVVJFX1VOSVRTXTsK KwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192aWV3IGRzX3ZpZXc7CisJc3RydWN0IHZtd19jdHhf YmluZGluZm9fc28gc29fdGFyZ2V0c1tTVkdBM0RfRFhfTUFYX1NPVEFSR0VUU107CisJc3RydWN0 IHZtd19jdHhfYmluZGluZm9fdmIgdmVydGV4X2J1ZmZlcnNbU1ZHQTNEX0RYX01BWF9WRVJURVhC VUZGRVJTXTsKKwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb19pYiBpbmRleF9idWZmZXI7CisJc3Ry dWN0IHZtd19keF9zaGFkZXJfYmluZGluZ3MgcGVyX3NoYWRlcltTVkdBM0RfTlVNX1NIQURFUlRZ UEVfRFgxMF07CisKKwl1bnNpZ25lZCBsb25nIGRpcnR5OworCURFQ0xBUkVfQklUTUFQKGRpcnR5 X3ZiLCBTVkdBM0RfRFhfTUFYX1ZFUlRFWEJVRkZFUlMpOworCisJdTMyIGJpbmRfY21kX2J1ZmZl cltWTVdfTUFYX1ZJRVdfQklORElOR1NdOworCXUzMiBiaW5kX2NtZF9jb3VudDsKKwl1MzIgYmlu ZF9maXJzdF9zbG90OworfTsKKworc3RhdGljIGludCB2bXdfYmluZGluZ19zY3J1Yl9zaGFkZXIo c3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJpLCBib29sIHJlYmluZCk7CitzdGF0aWMgaW50IHZt d19iaW5kaW5nX3NjcnViX3JlbmRlcl90YXJnZXQoc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJp LAorCQkJCQkgICBib29sIHJlYmluZCk7CitzdGF0aWMgaW50IHZtd19iaW5kaW5nX3NjcnViX3Rl eHR1cmUoc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJpLCBib29sIHJlYmluZCk7CitzdGF0aWMg aW50IHZtd19iaW5kaW5nX3NjcnViX2NiKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpiaSwgYm9v bCByZWJpbmQpOworc3RhdGljIGludCB2bXdfYmluZGluZ19zY3J1Yl9keF9ydChzdHJ1Y3Qgdm13 X2N0eF9iaW5kaW5mbyAqYmksIGJvb2wgcmViaW5kKTsKK3N0YXRpYyBpbnQgdm13X2JpbmRpbmdf c2NydWJfc3Ioc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJpLCBib29sIHJlYmluZCk7CitzdGF0 aWMgaW50IHZtd19iaW5kaW5nX3NjcnViX3NvKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpiaSwg Ym9vbCByZWJpbmQpOworc3RhdGljIGludCB2bXdfYmluZGluZ19lbWl0X2RpcnR5KHN0cnVjdCB2 bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmNicyk7CitzdGF0aWMgaW50IHZtd19iaW5kaW5nX3NjcnVi X2R4X3NoYWRlcihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmksCisJCQkJICAgICAgIGJvb2wg cmViaW5kKTsKK3N0YXRpYyBpbnQgdm13X2JpbmRpbmdfc2NydWJfaWIoc3RydWN0IHZtd19jdHhf YmluZGluZm8gKmJpLCBib29sIHJlYmluZCk7CitzdGF0aWMgaW50IHZtd19iaW5kaW5nX3NjcnVi X3ZiKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpiaSwgYm9vbCByZWJpbmQpOworc3RhdGljIHZv aWQgdm13X2JpbmRpbmdfYnVpbGRfYXNzZXJ0cyh2b2lkKSBfX2F0dHJpYnV0ZV9fICgodW51c2Vk KSk7CisKK3R5cGVkZWYgaW50ICgqdm13X3NjcnViX2Z1bmMpKHN0cnVjdCB2bXdfY3R4X2JpbmRp bmZvICosIGJvb2wpOworCisvKioKKyAqIHN0cnVjdCB2bXdfYmluZGluZ19pbmZvIC0gUGVyIGJp bmRpbmcgdHlwZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJpbmRpbmcKKyAqIG1hbmFnZXIKKyAqCisg KiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIHN0cnVjdCBiaW5kaW5nIGRlcml2ZWQgZnJvbSBhIHN0 cnVjdCB2bXdfY3R4X2JpbmRpbmZvLgorICogQG9mZnNldHM6IGFycmF5W3NoYWRlcl9zbG90XSBv ZiBvZmZzZXRzIHRvIHRoZSBhcnJheVtzbG90XQorICogb2Ygc3RydWN0IGJpbmRpbmdzIGZvciB0 aGUgYmluZGluZyB0eXBlLgorICogQHNjcnViX2Z1bmM6IFBvaW50ZXIgdG8gdGhlIHNjcnViIGZ1 bmN0aW9uIGZvciB0aGlzIGJpbmRpbmcgdHlwZS4KKyAqCisgKiBIb2xkcyBzdGF0aWMgaW5mb3Jt YXRpb24gdG8gaGVscCBvcHRpbWl6ZSB0aGUgYmluZGluZyBtYW5hZ2VyIGFuZCBhdm9pZAorICog YW4gZXhjZXNzaXZlIGFtb3VudCBvZiBzd2l0Y2ggc3RhdGVtZW50cy4KKyAqLworc3RydWN0IHZt d19iaW5kaW5nX2luZm8geworCXNpemVfdCBzaXplOworCWNvbnN0IHNpemVfdCAqb2Zmc2V0czsK Kwl2bXdfc2NydWJfZnVuYyBzY3J1Yl9mdW5jOworfTsKKworLyoKKyAqIEEgbnVtYmVyIG9mIHN0 YXRpYyB2YXJpYWJsZXMgdGhhdCBoZWxwIGRldGVybWluZSB0aGUgc2NydWIgZnVuYyBhbmQgdGhl CisgKiBsb2NhdGlvbiBvZiB0aGUgc3RydWN0IHZtd19jdHhfYmluZGluZm8gc2xvdHMgZm9yIGVh Y2ggYmluZGluZyB0eXBlLgorICovCitzdGF0aWMgY29uc3Qgc2l6ZV90IHZtd19iaW5kaW5nX3No YWRlcl9vZmZzZXRzW10gPSB7CisJb2Zmc2V0b2Yoc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0 ZSwgcGVyX3NoYWRlclswXS5zaGFkZXIpLAorCW9mZnNldG9mKHN0cnVjdCB2bXdfY3R4X2JpbmRp bmdfc3RhdGUsIHBlcl9zaGFkZXJbMV0uc2hhZGVyKSwKKwlvZmZzZXRvZihzdHJ1Y3Qgdm13X2N0 eF9iaW5kaW5nX3N0YXRlLCBwZXJfc2hhZGVyWzJdLnNoYWRlciksCit9Oworc3RhdGljIGNvbnN0 IHNpemVfdCB2bXdfYmluZGluZ19ydF9vZmZzZXRzW10gPSB7CisJb2Zmc2V0b2Yoc3RydWN0IHZt d19jdHhfYmluZGluZ19zdGF0ZSwgcmVuZGVyX3RhcmdldHMpLAorfTsKK3N0YXRpYyBjb25zdCBz aXplX3Qgdm13X2JpbmRpbmdfdGV4X29mZnNldHNbXSA9IHsKKwlvZmZzZXRvZihzdHJ1Y3Qgdm13 X2N0eF9iaW5kaW5nX3N0YXRlLCB0ZXh0dXJlX3VuaXRzKSwKK307CitzdGF0aWMgY29uc3Qgc2l6 ZV90IHZtd19iaW5kaW5nX2NiX29mZnNldHNbXSA9IHsKKwlvZmZzZXRvZihzdHJ1Y3Qgdm13X2N0 eF9iaW5kaW5nX3N0YXRlLCBwZXJfc2hhZGVyWzBdLmNvbnN0X2J1ZmZlcnMpLAorCW9mZnNldG9m KHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUsIHBlcl9zaGFkZXJbMV0uY29uc3RfYnVmZmVy cyksCisJb2Zmc2V0b2Yoc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSwgcGVyX3NoYWRlclsy XS5jb25zdF9idWZmZXJzKSwKK307CitzdGF0aWMgY29uc3Qgc2l6ZV90IHZtd19iaW5kaW5nX2R4 X2RzX29mZnNldHNbXSA9IHsKKwlvZmZzZXRvZihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRl LCBkc192aWV3KSwKK307CitzdGF0aWMgY29uc3Qgc2l6ZV90IHZtd19iaW5kaW5nX3NyX29mZnNl dHNbXSA9IHsKKwlvZmZzZXRvZihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlLCBwZXJfc2hh ZGVyWzBdLnNoYWRlcl9yZXMpLAorCW9mZnNldG9mKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3Rh dGUsIHBlcl9zaGFkZXJbMV0uc2hhZGVyX3JlcyksCisJb2Zmc2V0b2Yoc3RydWN0IHZtd19jdHhf YmluZGluZ19zdGF0ZSwgcGVyX3NoYWRlclsyXS5zaGFkZXJfcmVzKSwKK307CitzdGF0aWMgY29u c3Qgc2l6ZV90IHZtd19iaW5kaW5nX3NvX29mZnNldHNbXSA9IHsKKwlvZmZzZXRvZihzdHJ1Y3Qg dm13X2N0eF9iaW5kaW5nX3N0YXRlLCBzb190YXJnZXRzKSwKK307CitzdGF0aWMgY29uc3Qgc2l6 ZV90IHZtd19iaW5kaW5nX3ZiX29mZnNldHNbXSA9IHsKKwlvZmZzZXRvZihzdHJ1Y3Qgdm13X2N0 eF9iaW5kaW5nX3N0YXRlLCB2ZXJ0ZXhfYnVmZmVycyksCit9Oworc3RhdGljIGNvbnN0IHNpemVf dCB2bXdfYmluZGluZ19pYl9vZmZzZXRzW10gPSB7CisJb2Zmc2V0b2Yoc3RydWN0IHZtd19jdHhf YmluZGluZ19zdGF0ZSwgaW5kZXhfYnVmZmVyKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg dm13X2JpbmRpbmdfaW5mbyB2bXdfYmluZGluZ19pbmZvc1tdID0geworCVt2bXdfY3R4X2JpbmRp bmdfc2hhZGVyXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHZtd19jdHhfYmluZGluZm9f c2hhZGVyKSwKKwkJLm9mZnNldHMgPSB2bXdfYmluZGluZ19zaGFkZXJfb2Zmc2V0cywKKwkJLnNj cnViX2Z1bmMgPSB2bXdfYmluZGluZ19zY3J1Yl9zaGFkZXJ9LAorCVt2bXdfY3R4X2JpbmRpbmdf cnRdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192aWV3KSwK KwkJLm9mZnNldHMgPSB2bXdfYmluZGluZ19ydF9vZmZzZXRzLAorCQkuc2NydWJfZnVuYyA9IHZt d19iaW5kaW5nX3NjcnViX3JlbmRlcl90YXJnZXR9LAorCVt2bXdfY3R4X2JpbmRpbmdfdGV4XSA9 IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHZtd19jdHhfYmluZGluZm9fdGV4KSwKKwkJLm9m ZnNldHMgPSB2bXdfYmluZGluZ190ZXhfb2Zmc2V0cywKKwkJLnNjcnViX2Z1bmMgPSB2bXdfYmlu ZGluZ19zY3J1Yl90ZXh0dXJlfSwKKwlbdm13X2N0eF9iaW5kaW5nX2NiXSA9IHsKKwkJLnNpemUg PSBzaXplb2Yoc3RydWN0IHZtd19jdHhfYmluZGluZm9fY2IpLAorCQkub2Zmc2V0cyA9IHZtd19i aW5kaW5nX2NiX29mZnNldHMsCisJCS5zY3J1Yl9mdW5jID0gdm13X2JpbmRpbmdfc2NydWJfY2J9 LAorCVt2bXdfY3R4X2JpbmRpbmdfZHhfc2hhZGVyXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3Ry dWN0IHZtd19jdHhfYmluZGluZm9fc2hhZGVyKSwKKwkJLm9mZnNldHMgPSB2bXdfYmluZGluZ19z aGFkZXJfb2Zmc2V0cywKKwkJLnNjcnViX2Z1bmMgPSB2bXdfYmluZGluZ19zY3J1Yl9keF9zaGFk ZXJ9LAorCVt2bXdfY3R4X2JpbmRpbmdfZHhfcnRdID0geworCQkuc2l6ZSA9IHNpemVvZihzdHJ1 Y3Qgdm13X2N0eF9iaW5kaW5mb192aWV3KSwKKwkJLm9mZnNldHMgPSB2bXdfYmluZGluZ19ydF9v ZmZzZXRzLAorCQkuc2NydWJfZnVuYyA9IHZtd19iaW5kaW5nX3NjcnViX2R4X3J0fSwKKwlbdm13 X2N0eF9iaW5kaW5nX3NyXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHZtd19jdHhfYmlu ZGluZm9fdmlldyksCisJCS5vZmZzZXRzID0gdm13X2JpbmRpbmdfc3Jfb2Zmc2V0cywKKwkJLnNj cnViX2Z1bmMgPSB2bXdfYmluZGluZ19zY3J1Yl9zcn0sCisJW3Ztd19jdHhfYmluZGluZ19kc10g PSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvX3ZpZXcpLAorCQku b2Zmc2V0cyA9IHZtd19iaW5kaW5nX2R4X2RzX29mZnNldHMsCisJCS5zY3J1Yl9mdW5jID0gdm13 X2JpbmRpbmdfc2NydWJfZHhfcnR9LAorCVt2bXdfY3R4X2JpbmRpbmdfc29dID0geworCQkuc2l6 ZSA9IHNpemVvZihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb19zbyksCisJCS5vZmZzZXRzID0gdm13 X2JpbmRpbmdfc29fb2Zmc2V0cywKKwkJLnNjcnViX2Z1bmMgPSB2bXdfYmluZGluZ19zY3J1Yl9z b30sCisJW3Ztd19jdHhfYmluZGluZ192Yl0gPSB7CisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCB2 bXdfY3R4X2JpbmRpbmZvX3ZiKSwKKwkJLm9mZnNldHMgPSB2bXdfYmluZGluZ192Yl9vZmZzZXRz LAorCQkuc2NydWJfZnVuYyA9IHZtd19iaW5kaW5nX3NjcnViX3ZifSwKKwlbdm13X2N0eF9iaW5k aW5nX2liXSA9IHsKKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHZtd19jdHhfYmluZGluZm9faWIp LAorCQkub2Zmc2V0cyA9IHZtd19iaW5kaW5nX2liX29mZnNldHMsCisJCS5zY3J1Yl9mdW5jID0g dm13X2JpbmRpbmdfc2NydWJfaWJ9LAorfTsKKworLyoqCisgKiB2bXdfY2JzX2NvbnRleHQgLSBS ZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBjb250ZXh0IHJlc291cmNlIG9mIGEKKyAqIGNvbnRleHQg YmluZGluZyBzdGF0ZSB0cmFja2VyLgorICoKKyAqIEBjYnM6IFRoZSBjb250ZXh0IGJpbmRpbmcg c3RhdGUgdHJhY2tlci4KKyAqCisgKiBQcm92aWRlZCB0aGVyZSBhcmUgYW55IGFjdGl2ZSBiaW5k aW5ncywgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBhbgorICogdW5yZWZlcmVuY2VkIHBvaW50 ZXIgdG8gdGhlIGNvbnRleHQgcmVzb3VyY2UgdGhhdCBvd25zIHRoZSBjb250ZXh0CisgKiBiaW5k aW5nIHN0YXRlIHRyYWNrZXIuIElmIHRoZXJlIGFyZSBubyBhY3RpdmUgYmluZGluZ3MsIHRoaXMg ZnVuY3Rpb24KKyAqIHdpbGwgcmV0dXJuIE5VTEwuIE5vdGUgdGhhdCB0aGUgY2FsbGVyIG11c3Qg c29tZWhvdyBlbnN1cmUgdGhhdCBhIHJlZmVyZW5jZQorICogaXMgaGVsZCBvbiB0aGUgY29udGV4 dCByZXNvdXJjZSBwcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgdm13X3Jlc291cmNlICoKK3Ztd19jYnNfY29udGV4dChjb25zdCBzdHJ1Y3Qg dm13X2N0eF9iaW5kaW5nX3N0YXRlICpjYnMpCit7CisJaWYgKGxpc3RfZW1wdHkoJmNicy0+bGlz dCkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJmNicy0+bGlz dCwgc3RydWN0IHZtd19jdHhfYmluZGluZm8sCisJCQkJY3R4X2xpc3QpLT5jdHg7Cit9CisKKy8q KgorICogdm13X2JpbmRpbmdfbG9jIC0gZGV0ZXJtaW5lIHRoZSBzdHJ1Y3Qgdm13X2N0eF9iaW5k aW5mbyBzbG90IGxvY2F0aW9uLgorICoKKyAqIEBjYnM6IFBvaW50ZXIgdG8gYSBzdHJ1Y3Qgdm13 X2N0eF9iaW5kaW5nIHN0YXRlIHdoaWNoIGhvbGRzIHRoZSBzbG90LgorICogQGJ0OiBUaGUgYmlu ZGluZyB0eXBlLgorICogQHNoYWRlcl9zbG90OiBUaGUgc2hhZGVyIHNsb3Qgb2YgdGhlIGJpbmRp bmcuIElmIG5vbmUsIHRoZW4gc2V0IHRvIDAuCisgKiBAc2xvdDogVGhlIHNsb3Qgb2YgdGhlIGJp bmRpbmcuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqCit2bXdfYmluZGlu Z19sb2Moc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqY2JzLAorCQllbnVtIHZtd19jdHhf YmluZGluZ190eXBlIGJ0LCB1MzIgc2hhZGVyX3Nsb3QsIHUzMiBzbG90KQoreworCWNvbnN0IHN0 cnVjdCB2bXdfYmluZGluZ19pbmZvICpiID0gJnZtd19iaW5kaW5nX2luZm9zW2J0XTsKKwlzaXpl X3Qgb2Zmc2V0ID0gYi0+b2Zmc2V0c1tzaGFkZXJfc2xvdF0gKyBiLT5zaXplKnNsb3Q7CisKKwly ZXR1cm4gKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICopKCh1OCAqKSBjYnMgKyBvZmZzZXQpOwor fQorCisvKioKKyAqIHZtd19iaW5kaW5nX2Ryb3A6IFN0b3AgdHJhY2tpbmcgYSBjb250ZXh0IGJp bmRpbmcKKyAqCisgKiBAYmk6IFBvaW50ZXIgdG8gYmluZGluZyB0cmFja2VyIHN0b3JhZ2UuCisg KgorICogU3RvcHMgdHJhY2tpbmcgYSBjb250ZXh0IGJpbmRpbmcsIGFuZCByZS1pbml0aWFsaXpl cyBpdHMgc3RvcmFnZS4KKyAqIFR5cGljYWxseSB1c2VkIHdoZW4gdGhlIGNvbnRleHQgYmluZGlu ZyBpcyByZXBsYWNlZCB3aXRoIGEgYmluZGluZyB0bworICogYW5vdGhlciAob3IgdGhlIHNhbWUs IGZvciB0aGF0IG1hdHRlcikgcmVzb3VyY2UuCisgKi8KK3N0YXRpYyB2b2lkIHZtd19iaW5kaW5n X2Ryb3Aoc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJpKQoreworCWxpc3RfZGVsKCZiaS0+Y3R4 X2xpc3QpOworCWlmICghbGlzdF9lbXB0eSgmYmktPnJlc19saXN0KSkKKwkJbGlzdF9kZWwoJmJp LT5yZXNfbGlzdCk7CisJYmktPmN0eCA9IE5VTEw7Cit9CisKKy8qKgorICogdm13X2JpbmRpbmdf YWRkOiBTdGFydCB0cmFja2luZyBhIGNvbnRleHQgYmluZGluZworICoKKyAqIEBjYnM6IFBvaW50 ZXIgdG8gdGhlIGNvbnRleHQgYmluZGluZyBzdGF0ZSB0cmFja2VyLgorICogQGJpOiBJbmZvcm1h dGlvbiBhYm91dCB0aGUgYmluZGluZyB0byB0cmFjay4KKyAqCisgKiBTdGFydHMgdHJhY2tpbmcg dGhlIGJpbmRpbmcgaW4gdGhlIGNvbnRleHQgYmluZGluZworICogc3RhdGUgc3RydWN0dXJlIEBj YnMuCisgKi8KK3ZvaWQgdm13X2JpbmRpbmdfYWRkKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3Rh dGUgKmNicywKKwkJICAgIGNvbnN0IHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpiaSwKKwkJICAg IHUzMiBzaGFkZXJfc2xvdCwgdTMyIHNsb3QpCit7CisJc3RydWN0IHZtd19jdHhfYmluZGluZm8g KmxvYyA9CisJCXZtd19iaW5kaW5nX2xvYyhjYnMsIGJpLT5idCwgc2hhZGVyX3Nsb3QsIHNsb3Qp OworCWNvbnN0IHN0cnVjdCB2bXdfYmluZGluZ19pbmZvICpiID0gJnZtd19iaW5kaW5nX2luZm9z W2JpLT5idF07CisKKwlpZiAobG9jLT5jdHggIT0gTlVMTCkKKwkJdm13X2JpbmRpbmdfZHJvcChs b2MpOworCisJbWVtY3B5KGxvYywgYmksIGItPnNpemUpOworCWxvYy0+c2NydWJiZWQgPSBmYWxz ZTsKKwlsaXN0X2FkZCgmbG9jLT5jdHhfbGlzdCwgJmNicy0+bGlzdCk7CisJSU5JVF9MSVNUX0hF QUQoJmxvYy0+cmVzX2xpc3QpOworfQorCisvKioKKyAqIHZtd19iaW5kaW5nX3RyYW5zZmVyOiBU cmFuc2ZlciBhIGNvbnRleHQgYmluZGluZyB0cmFja2luZyBlbnRyeS4KKyAqCisgKiBAY2JzOiBQ b2ludGVyIHRvIHRoZSBwZXJzaXN0ZW50IGNvbnRleHQgYmluZGluZyBzdGF0ZSB0cmFja2VyLgor ICogQGJpOiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgYmluZGluZyB0byB0cmFjay4KKyAqCisgKi8K K3N0YXRpYyB2b2lkIHZtd19iaW5kaW5nX3RyYW5zZmVyKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdf c3RhdGUgKmNicywKKwkJCQkgY29uc3Qgc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqZnJv bSwKKwkJCQkgY29uc3Qgc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJpKQoreworCXNpemVfdCBv ZmZzZXQgPSAodW5zaWduZWQgbG9uZyliaSAtICh1bnNpZ25lZCBsb25nKWZyb207CisJc3RydWN0 IHZtd19jdHhfYmluZGluZm8gKmxvYyA9IChzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqKQorCQko KHVuc2lnbmVkIGxvbmcpIGNicyArIG9mZnNldCk7CisKKwlpZiAobG9jLT5jdHggIT0gTlVMTCkg eworCQlXQVJOX09OKGJpLT5zY3J1YmJlZCk7CisKKwkJdm13X2JpbmRpbmdfZHJvcChsb2MpOwor CX0KKworCWlmIChiaS0+cmVzICE9IE5VTEwpIHsKKwkJbWVtY3B5KGxvYywgYmksIHZtd19iaW5k aW5nX2luZm9zW2JpLT5idF0uc2l6ZSk7CisJCWxpc3RfYWRkX3RhaWwoJmxvYy0+Y3R4X2xpc3Qs ICZjYnMtPmxpc3QpOworCQlsaXN0X2FkZF90YWlsKCZsb2MtPnJlc19saXN0LCAmbG9jLT5yZXMt PmJpbmRpbmdfaGVhZCk7CisJfQorfQorCisvKioKKyAqIHZtd19iaW5kaW5nX3N0YXRlX2tpbGwg LSBLaWxsIGFsbCBiaW5kaW5ncyBhc3NvY2lhdGVkIHdpdGggYQorICogc3RydWN0IHZtd19jdHhf YmluZGluZyBzdGF0ZSBzdHJ1Y3R1cmUsIGFuZCByZS1pbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUu CisgKgorICogQGNiczogUG9pbnRlciB0byB0aGUgY29udGV4dCBiaW5kaW5nIHN0YXRlIHRyYWNr ZXIuCisgKgorICogRW1pdHMgY29tbWFuZHMgdG8gc2NydWIgYWxsIGJpbmRpbmdzIGFzc29jaWF0 ZWQgd2l0aCB0aGUKKyAqIGNvbnRleHQgYmluZGluZyBzdGF0ZSB0cmFja2VyLiBUaGVuIHJlLWlu aXRpYWxpemVzIHRoZSB3aG9sZSBzdHJ1Y3R1cmUuCisgKi8KK3ZvaWQgdm13X2JpbmRpbmdfc3Rh dGVfa2lsbChzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpjYnMpCit7CisJc3RydWN0IHZt d19jdHhfYmluZGluZm8gKmVudHJ5LCAqbmV4dDsKKworCXZtd19iaW5kaW5nX3N0YXRlX3NjcnVi KGNicyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmY2JzLT5saXN0 LCBjdHhfbGlzdCkKKwkJdm13X2JpbmRpbmdfZHJvcChlbnRyeSk7Cit9CisKKy8qKgorICogdm13 X2JpbmRpbmdfc3RhdGVfc2NydWIgLSBTY3J1YiBhbGwgYmluZGluZ3MgYXNzb2NpYXRlZCB3aXRo IGEKKyAqIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmcgc3RhdGUgc3RydWN0dXJlLgorICoKKyAqIEBj YnM6IFBvaW50ZXIgdG8gdGhlIGNvbnRleHQgYmluZGluZyBzdGF0ZSB0cmFja2VyLgorICoKKyAq IEVtaXRzIGNvbW1hbmRzIHRvIHNjcnViIGFsbCBiaW5kaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhl CisgKiBjb250ZXh0IGJpbmRpbmcgc3RhdGUgdHJhY2tlci4KKyAqLwordm9pZCB2bXdfYmluZGlu Z19zdGF0ZV9zY3J1YihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpjYnMpCit7CisJc3Ry dWN0IHZtd19jdHhfYmluZGluZm8gKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRy eSwgJmNicy0+bGlzdCwgY3R4X2xpc3QpIHsKKwkJaWYgKCFlbnRyeS0+c2NydWJiZWQpIHsKKwkJ CSh2b2lkKSB2bXdfYmluZGluZ19pbmZvc1tlbnRyeS0+YnRdLnNjcnViX2Z1bmMKKwkJCQkoZW50 cnksIGZhbHNlKTsKKwkJCWVudHJ5LT5zY3J1YmJlZCA9IHRydWU7CisJCX0KKwl9CisKKwkodm9p ZCkgdm13X2JpbmRpbmdfZW1pdF9kaXJ0eShjYnMpOworfQorCisvKioKKyAqIHZtd19iaW5kaW5n X3Jlc19saXN0X2tpbGwgLSBLaWxsIGFsbCBiaW5kaW5ncyBvbiBhCisgKiByZXNvdXJjZSBiaW5k aW5nIGxpc3QKKyAqCisgKiBAaGVhZDogbGlzdCBoZWFkIG9mIHJlc291cmNlIGJpbmRpbmcgbGlz dAorICoKKyAqIEtpbGxzIGFsbCBiaW5kaW5ncyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBy ZXNvdXJjZS4gVHlwaWNhbGx5CisgKiBjYWxsZWQgYmVmb3JlIHRoZSByZXNvdXJjZSBpcyBkZXN0 cm95ZWQuCisgKi8KK3ZvaWQgdm13X2JpbmRpbmdfcmVzX2xpc3Rfa2lsbChzdHJ1Y3QgbGlzdF9o ZWFkICpoZWFkKQoreworCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICplbnRyeSwgKm5leHQ7CisK Kwl2bXdfYmluZGluZ19yZXNfbGlzdF9zY3J1YihoZWFkKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUoZW50cnksIG5leHQsIGhlYWQsIHJlc19saXN0KQorCQl2bXdfYmluZGluZ19kcm9wKGVu dHJ5KTsKK30KKworLyoqCisgKiB2bXdfYmluZGluZ19yZXNfbGlzdF9zY3J1YiAtIFNjcnViIGFs bCBiaW5kaW5ncyBvbiBhCisgKiByZXNvdXJjZSBiaW5kaW5nIGxpc3QKKyAqCisgKiBAaGVhZDog bGlzdCBoZWFkIG9mIHJlc291cmNlIGJpbmRpbmcgbGlzdAorICoKKyAqIFNjcnViIGFsbCBiaW5k aW5ncyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyByZXNvdXJjZS4gVHlwaWNhbGx5CisgKiBj YWxsZWQgYmVmb3JlIHRoZSByZXNvdXJjZSBpcyBldmljdGVkLgorICovCit2b2lkIHZtd19iaW5k aW5nX3Jlc19saXN0X3NjcnViKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHZt d19jdHhfYmluZGluZm8gKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgaGVh ZCwgcmVzX2xpc3QpIHsKKwkJaWYgKCFlbnRyeS0+c2NydWJiZWQpIHsKKwkJCSh2b2lkKSB2bXdf YmluZGluZ19pbmZvc1tlbnRyeS0+YnRdLnNjcnViX2Z1bmMKKwkJCQkoZW50cnksIGZhbHNlKTsK KwkJCWVudHJ5LT5zY3J1YmJlZCA9IHRydWU7CisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGVudHJ5LCBoZWFkLCByZXNfbGlzdCkgeworCQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0 YXRlICpjYnMgPQorCQkJdm13X2NvbnRleHRfYmluZGluZ19zdGF0ZShlbnRyeS0+Y3R4KTsKKwor CQkodm9pZCkgdm13X2JpbmRpbmdfZW1pdF9kaXJ0eShjYnMpOworCX0KK30KKworCisvKioKKyAq IHZtd19iaW5kaW5nX3N0YXRlX2NvbW1pdCAtIENvbW1pdCBzdGFnZWQgYmluZGluZyBpbmZvCisg KgorICogQGN0eDogUG9pbnRlciB0byBjb250ZXh0IHRvIGNvbW1pdCB0aGUgc3RhZ2VkIGJpbmRp bmcgaW5mbyB0by4KKyAqIEBmcm9tOiBTdGFnZWQgYmluZGluZyBpbmZvIGJ1aWx0IGR1cmluZyBl eGVjYnVmLgorICogQHNjcnViYmVkOiBUcmFuc2ZlciBvbmx5IHNjcnViYmVkIGJpbmRpbmdzLgor ICoKKyAqIFRyYW5zZmVycyBiaW5kaW5nIGluZm8gZnJvbSBhIHRlbXBvcmFyeSBzdHJ1Y3R1cmUK KyAqICh0eXBpY2FsbHkgdXNlZCBieSBleGVjYnVmKSB0byB0aGUgcGVyc2lzdGVudAorICogc3Ry dWN0dXJlIGluIHRoZSBjb250ZXh0LiBUaGlzIGNhbiBiZSBkb25lIG9uY2UgY29tbWFuZHMgaGF2 ZSBiZWVuCisgKiBzdWJtaXR0ZWQgdG8gaGFyZHdhcmUKKyAqLwordm9pZCB2bXdfYmluZGluZ19z dGF0ZV9jb21taXQoc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqdG8sCisJCQkgICAgICBz dHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpmcm9tKQoreworCXN0cnVjdCB2bXdfY3R4X2Jp bmRpbmZvICplbnRyeSwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnks IG5leHQsICZmcm9tLT5saXN0LCBjdHhfbGlzdCkgeworCQl2bXdfYmluZGluZ190cmFuc2Zlcih0 bywgZnJvbSwgZW50cnkpOworCQl2bXdfYmluZGluZ19kcm9wKGVudHJ5KTsKKwl9Cit9CisKKy8q KgorICogdm13X2JpbmRpbmdfcmViaW5kX2FsbCAtIFJlYmluZCBhbGwgc2NydWJiZWQgYmluZGlu Z3Mgb2YgYSBjb250ZXh0CisgKgorICogQGN0eDogVGhlIGNvbnRleHQgcmVzb3VyY2UKKyAqCisg KiBXYWxrcyB0aHJvdWdoIHRoZSBjb250ZXh0IGJpbmRpbmcgbGlzdCBhbmQgcmViaW5kcyBhbGwg c2NydWJiZWQKKyAqIHJlc291cmNlcy4KKyAqLworaW50IHZtd19iaW5kaW5nX3JlYmluZF9hbGwo c3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqY2JzKQoreworCXN0cnVjdCB2bXdfY3R4X2Jp bmRpbmZvICplbnRyeTsKKwlpbnQgcmV0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwg JmNicy0+bGlzdCwgY3R4X2xpc3QpIHsKKwkJaWYgKGxpa2VseSghZW50cnktPnNjcnViYmVkKSkK KwkJCWNvbnRpbnVlOworCisJCWlmICgoZW50cnktPnJlcyA9PSBOVUxMIHx8IGVudHJ5LT5yZXMt PmlkID09CisJCQkgICAgU1ZHQTNEX0lOVkFMSURfSUQpKQorCQkJY29udGludWU7CisKKwkJcmV0 ID0gdm13X2JpbmRpbmdfaW5mb3NbZW50cnktPmJ0XS5zY3J1Yl9mdW5jKGVudHJ5LCB0cnVlKTsK KwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCXJldHVybiByZXQ7CisKKwkJZW50cnktPnNj cnViYmVkID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHZtd19iaW5kaW5nX2VtaXRfZGlydHkoY2Jz KTsKK30KKworLyoqCisgKiB2bXdfYmluZGluZ19zY3J1Yl9zaGFkZXIgLSBzY3J1YiBhIHNoYWRl ciBiaW5kaW5nIGZyb20gYSBjb250ZXh0LgorICoKKyAqIEBiaTogc2luZ2xlIGJpbmRpbmcgaW5m b3JtYXRpb24uCisgKiBAcmViaW5kOiBXaGV0aGVyIHRvIGlzc3VlIGEgYmluZCBpbnN0ZWFkIG9m IHNjcnViIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQgdm13X2JpbmRpbmdfc2NydWJfc2hhZGVy KHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpiaSwgYm9vbCByZWJpbmQpCit7CisJc3RydWN0IHZt d19jdHhfYmluZGluZm9fc2hhZGVyICpiaW5kaW5nID0KKwkJY29udGFpbmVyX29mKGJpLCB0eXBl b2YoKmJpbmRpbmcpLCBiaSk7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IGJpLT5j dHgtPmRldl9wcml2OworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNW R0EzZENtZFNldFNoYWRlciBib2R5OworCX0gKmNtZDsKKworCWNtZCA9IHZtd19maWZvX3Jlc2Vy dmUoZGV2X3ByaXYsIHNpemVvZigqY21kKSk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkg eworCQlEUk1fRVJST1IoIkZhaWxlZCByZXNlcnZpbmcgRklGTyBzcGFjZSBmb3Igc2hhZGVyICIK KwkJCSAgInVuYmluZGluZy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbWQtPmhl YWRlci5pZCA9IFNWR0FfM0RfQ01EX1NFVF9TSEFERVI7CisJY21kLT5oZWFkZXIuc2l6ZSA9IHNp emVvZihjbWQtPmJvZHkpOworCWNtZC0+Ym9keS5jaWQgPSBiaS0+Y3R4LT5pZDsKKwljbWQtPmJv ZHkudHlwZSA9IGJpbmRpbmctPnNoYWRlcl9zbG90ICsgU1ZHQTNEX1NIQURFUlRZUEVfTUlOOwor CWNtZC0+Ym9keS5zaGlkID0gKChyZWJpbmQpID8gYmktPnJlcy0+aWQgOiBTVkdBM0RfSU5WQUxJ RF9JRCk7CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJcmV0 dXJuIDA7Cit9CisKKy8qKgorICogdm13X2JpbmRpbmdfc2NydWJfcmVuZGVyX3RhcmdldCAtIHNj cnViIGEgcmVuZGVyIHRhcmdldCBiaW5kaW5nCisgKiBmcm9tIGEgY29udGV4dC4KKyAqCisgKiBA Ymk6IHNpbmdsZSBiaW5kaW5nIGluZm9ybWF0aW9uLgorICogQHJlYmluZDogV2hldGhlciB0byBp c3N1ZSBhIGJpbmQgaW5zdGVhZCBvZiBzY3J1YiBjb21tYW5kLgorICovCitzdGF0aWMgaW50IHZt d19iaW5kaW5nX3NjcnViX3JlbmRlcl90YXJnZXQoc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJp LAorCQkJCQkgICBib29sIHJlYmluZCkKK3sKKwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192aWV3 ICpiaW5kaW5nID0KKwkJY29udGFpbmVyX29mKGJpLCB0eXBlb2YoKmJpbmRpbmcpLCBiaSk7CisJ c3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IGJpLT5jdHgtPmRldl9wcml2OworCXN0cnVj dCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZFNldFJlbmRlclRhcmdl dCBib2R5OworCX0gKmNtZDsKKworCWNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2X3ByaXYsIHNp emVvZigqY21kKSk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1Io IkZhaWxlZCByZXNlcnZpbmcgRklGTyBzcGFjZSBmb3IgcmVuZGVyIHRhcmdldCAiCisJCQkgICJ1 bmJpbmRpbmcuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY21kLT5oZWFkZXIuaWQg PSBTVkdBXzNEX0NNRF9TRVRSRU5ERVJUQVJHRVQ7CisJY21kLT5oZWFkZXIuc2l6ZSA9IHNpemVv ZihjbWQtPmJvZHkpOworCWNtZC0+Ym9keS5jaWQgPSBiaS0+Y3R4LT5pZDsKKwljbWQtPmJvZHku dHlwZSA9IGJpbmRpbmctPnNsb3Q7CisJY21kLT5ib2R5LnRhcmdldC5zaWQgPSAoKHJlYmluZCkg PyBiaS0+cmVzLT5pZCA6IFNWR0EzRF9JTlZBTElEX0lEKTsKKwljbWQtPmJvZHkudGFyZ2V0LmZh Y2UgPSAwOworCWNtZC0+Ym9keS50YXJnZXQubWlwbWFwID0gMDsKKwl2bXdfZmlmb19jb21taXQo ZGV2X3ByaXYsIHNpemVvZigqY21kKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2bXdf YmluZGluZ19zY3J1Yl90ZXh0dXJlIC0gc2NydWIgYSB0ZXh0dXJlIGJpbmRpbmcgZnJvbSBhIGNv bnRleHQuCisgKgorICogQGJpOiBzaW5nbGUgYmluZGluZyBpbmZvcm1hdGlvbi4KKyAqIEByZWJp bmQ6IFdoZXRoZXIgdG8gaXNzdWUgYSBiaW5kIGluc3RlYWQgb2Ygc2NydWIgY29tbWFuZC4KKyAq CisgKiBUT0RPOiBQb3NzaWJseSBjb21wbGVtZW50IHRoaXMgZnVuY3Rpb24gd2l0aCBhIGZ1bmN0 aW9uIHRoYXQgdGFrZXMKKyAqIGEgbGlzdCBvZiB0ZXh0dXJlIGJpbmRpbmdzIGFuZCBjb21iaW5l cyB0aGVtIHRvIGEgc2luZ2xlIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQgdm13X2JpbmRpbmdf c2NydWJfdGV4dHVyZShzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmksCisJCQkJICAgICBib29s IHJlYmluZCkKK3sKKwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb190ZXggKmJpbmRpbmcgPQorCQlj b250YWluZXJfb2YoYmksIHR5cGVvZigqYmluZGluZyksIGJpKTsKKwlzdHJ1Y3Qgdm13X3ByaXZh dGUgKmRldl9wcml2ID0gYmktPmN0eC0+ZGV2X3ByaXY7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21k SGVhZGVyIGhlYWRlcjsKKwkJc3RydWN0IHsKKwkJCVNWR0EzZENtZFNldFRleHR1cmVTdGF0ZSBj OworCQkJU1ZHQTNkVGV4dHVyZVN0YXRlIHMxOworCQl9IGJvZHk7CisJfSAqY21kOworCisJY21k ID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAodW5saWtl bHkoY21kID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHJlc2VydmluZyBGSUZPIHNw YWNlIGZvciB0ZXh0dXJlICIKKwkJCSAgInVuYmluZGluZy5cbiIpOworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwljbWQtPmhlYWRlci5pZCA9IFNWR0FfM0RfQ01EX1NFVFRFWFRVUkVTVEFURTsK KwljbWQtPmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSk7CisJY21kLT5ib2R5LmMuY2lk ID0gYmktPmN0eC0+aWQ7CisJY21kLT5ib2R5LnMxLnN0YWdlID0gYmluZGluZy0+dGV4dHVyZV9z dGFnZTsKKwljbWQtPmJvZHkuczEubmFtZSA9IFNWR0EzRF9UU19CSU5EX1RFWFRVUkU7CisJY21k LT5ib2R5LnMxLnZhbHVlID0gKChyZWJpbmQpID8gYmktPnJlcy0+aWQgOiBTVkdBM0RfSU5WQUxJ RF9JRCk7CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJcmV0 dXJuIDA7Cit9CisKKy8qKgorICogdm13X2JpbmRpbmdfc2NydWJfZHhfc2hhZGVyIC0gc2NydWIg YSBkeCBzaGFkZXIgYmluZGluZyBmcm9tIGEgY29udGV4dC4KKyAqCisgKiBAYmk6IHNpbmdsZSBi aW5kaW5nIGluZm9ybWF0aW9uLgorICogQHJlYmluZDogV2hldGhlciB0byBpc3N1ZSBhIGJpbmQg aW5zdGVhZCBvZiBzY3J1YiBjb21tYW5kLgorICovCitzdGF0aWMgaW50IHZtd19iaW5kaW5nX3Nj cnViX2R4X3NoYWRlcihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmksIGJvb2wgcmViaW5kKQor eworCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvX3NoYWRlciAqYmluZGluZyA9CisJCWNvbnRhaW5l cl9vZihiaSwgdHlwZW9mKCpiaW5kaW5nKSwgYmkpOworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBiaS0+Y3R4LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIg aGVhZGVyOworCQlTVkdBM2RDbWREWFNldFNoYWRlciBib2R5OworCX0gKmNtZDsKKworCWNtZCA9 IHZtd19maWZvX3Jlc2VydmVfZHgoZGV2X3ByaXYsIHNpemVvZigqY21kKSwgYmktPmN0eC0+aWQp OworCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgcmVz ZXJ2aW5nIEZJRk8gc3BhY2UgZm9yIERYIHNoYWRlciAiCisJCQkgICJ1bmJpbmRpbmcuXG4iKTsK KwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNtZC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfRFhf U0VUX1NIQURFUjsKKwljbWQtPmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSk7CisJY21k LT5ib2R5LnR5cGUgPSBiaW5kaW5nLT5zaGFkZXJfc2xvdCArIFNWR0EzRF9TSEFERVJUWVBFX01J TjsKKwljbWQtPmJvZHkuc2hhZGVySWQgPSAoKHJlYmluZCkgPyBiaS0+cmVzLT5pZCA6IFNWR0Ez RF9JTlZBTElEX0lEKTsKKwl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNpemVvZigqY21kKSk7 CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2bXdfYmluZGluZ19zY3J1Yl9jYiAtIHNjcnVi IGEgY29uc3RhbnQgYnVmZmVyIGJpbmRpbmcgZnJvbSBhIGNvbnRleHQuCisgKgorICogQGJpOiBz aW5nbGUgYmluZGluZyBpbmZvcm1hdGlvbi4KKyAqIEByZWJpbmQ6IFdoZXRoZXIgdG8gaXNzdWUg YSBiaW5kIGluc3RlYWQgb2Ygc2NydWIgY29tbWFuZC4KKyAqLworc3RhdGljIGludCB2bXdfYmlu ZGluZ19zY3J1Yl9jYihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmksIGJvb2wgcmViaW5kKQor eworCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvX2NiICpiaW5kaW5nID0KKwkJY29udGFpbmVyX29m KGJpLCB0eXBlb2YoKmJpbmRpbmcpLCBiaSk7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp diA9IGJpLT5jdHgtPmRldl9wcml2OworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFk ZXI7CisJCVNWR0EzZENtZERYU2V0U2luZ2xlQ29uc3RhbnRCdWZmZXIgYm9keTsKKwl9ICpjbWQ7 CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlX2R4KGRldl9wcml2LCBzaXplb2YoKmNtZCksIGJp LT5jdHgtPmlkKTsKKwlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigi RmFpbGVkIHJlc2VydmluZyBGSUZPIHNwYWNlIGZvciBEWCBzaGFkZXIgIgorCQkJICAidW5iaW5k aW5nLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNtZC0+aGVhZGVyLmlkID0gU1ZH QV8zRF9DTURfRFhfU0VUX1NJTkdMRV9DT05TVEFOVF9CVUZGRVI7CisJY21kLT5oZWFkZXIuc2l6 ZSA9IHNpemVvZihjbWQtPmJvZHkpOworCWNtZC0+Ym9keS5zbG90ID0gYmluZGluZy0+c2xvdDsK KwljbWQtPmJvZHkudHlwZSA9IGJpbmRpbmctPnNoYWRlcl9zbG90ICsgU1ZHQTNEX1NIQURFUlRZ UEVfTUlOOworCWlmIChyZWJpbmQpIHsKKwkJY21kLT5ib2R5Lm9mZnNldEluQnl0ZXMgPSBiaW5k aW5nLT5vZmZzZXQ7CisJCWNtZC0+Ym9keS5zaXplSW5CeXRlcyA9IGJpbmRpbmctPnNpemU7CisJ CWNtZC0+Ym9keS5zaWQgPSBiaS0+cmVzLT5pZDsKKwl9IGVsc2UgeworCQljbWQtPmJvZHkub2Zm c2V0SW5CeXRlcyA9IDA7CisJCWNtZC0+Ym9keS5zaXplSW5CeXRlcyA9IDA7CisJCWNtZC0+Ym9k eS5zaWQgPSBTVkdBM0RfSU5WQUxJRF9JRDsKKwl9CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2 LCBzaXplb2YoKmNtZCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdm13X2NvbGxlY3Rf dmlld19pZHMgLSBCdWlsZCB2aWV3IGlkIGRhdGEgZm9yIGEgdmlldyBiaW5kaW5nIGNvbW1hbmQK KyAqIHdpdGhvdXQgY2hlY2tpbmcgd2hpY2ggYmluZGluZ3MgYWN0dWFsbHkgbmVlZCB0byBiZSBl bWl0dGVkCisgKgorICogQGNiczogUG9pbnRlciB0byB0aGUgY29udGV4dCdzIHN0cnVjdCB2bXdf Y3R4X2JpbmRpbmdfc3RhdGUKKyAqIEBiaTogUG9pbnRlciB0byB3aGVyZSB0aGUgYmluZGluZyBp bmZvIGFycmF5IGlzIHN0b3JlZCBpbiBAY2JzCisgKiBAbWF4X251bTogTWF4aW11bSBudW1iZXIg b2YgZW50cmllcyBpbiB0aGUgQGJpIGFycmF5LgorICoKKyAqIFNjYW5zIHRoZSBAYmkgYXJyYXkg Zm9yIGJpbmRpbmdzIGFuZCBidWlsZHMgYSBidWZmZXIgb2YgdmlldyBpZCBkYXRhLgorICogU3Rv cHMgYXQgdGhlIGZpcnN0IG5vbi1leGlzdGluZyBiaW5kaW5nIGluIHRoZSBAYmkgYXJyYXkuCisg KiBPbiBvdXRwdXQsIEBjYnMtPmJpbmRfY21kX2NvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2Yg YmluZGluZ3MgdG8gYmUKKyAqIGVtaXR0ZWQsIEBjYnMtPmJpbmRfZmlyc3Rfc2xvdCBpcyBzZXQg dG8gemVybywgYW5kIEBjYnMtPmJpbmRfY21kX2J1ZmZlcgorICogY29udGFpbnMgdGhlIGNvbW1h bmQgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgdm13X2NvbGxlY3Rfdmlld19pZHMoc3RydWN0IHZt d19jdHhfYmluZGluZ19zdGF0ZSAqY2JzLAorCQkJCSBjb25zdCBzdHJ1Y3Qgdm13X2N0eF9iaW5k aW5mbyAqYmksCisJCQkJIHUzMiBtYXhfbnVtKQoreworCWNvbnN0IHN0cnVjdCB2bXdfY3R4X2Jp bmRpbmZvX3ZpZXcgKmJpdiA9CisJCWNvbnRhaW5lcl9vZihiaSwgc3RydWN0IHZtd19jdHhfYmlu ZGluZm9fdmlldywgYmkpOworCXVuc2lnbmVkIGxvbmcgaTsKKworCWNicy0+YmluZF9jbWRfY291 bnQgPSAwOworCWNicy0+YmluZF9maXJzdF9zbG90ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBt YXhfbnVtOyArK2ksICsrYml2KSB7CisJCWlmICghYml2LT5iaS5jdHgpCisJCQlicmVhazsKKwor CQljYnMtPmJpbmRfY21kX2J1ZmZlcltjYnMtPmJpbmRfY21kX2NvdW50KytdID0KKwkJCSgoYml2 LT5iaS5zY3J1YmJlZCkgPworCQkJIFNWR0EzRF9JTlZBTElEX0lEIDogYml2LT5iaS5yZXMtPmlk KTsKKwl9Cit9CisKKy8qKgorICogdm13X2NvbGxlY3RfZGlydHlfdmlld19pZHMgLSBCdWlsZCB2 aWV3IGlkIGRhdGEgZm9yIGEgdmlldyBiaW5kaW5nIGNvbW1hbmQKKyAqCisgKiBAY2JzOiBQb2lu dGVyIHRvIHRoZSBjb250ZXh0J3Mgc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZQorICogQGJp OiBQb2ludGVyIHRvIHdoZXJlIHRoZSBiaW5kaW5nIGluZm8gYXJyYXkgaXMgc3RvcmVkIGluIEBj YnMKKyAqIEBkaXJ0eTogQml0bWFwIGluZGljYXRpbmcgd2hpY2ggYmluZGluZ3MgbmVlZCB0byBi ZSBlbWl0dGVkLgorICogQG1heF9udW06IE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhl IEBiaSBhcnJheS4KKyAqCisgKiBTY2FucyB0aGUgQGJpIGFycmF5IGZvciBiaW5kaW5ncyB0aGF0 IG5lZWQgdG8gYmUgZW1pdHRlZCBhbmQKKyAqIGJ1aWxkcyBhIGJ1ZmZlciBvZiB2aWV3IGlkIGRh dGEuCisgKiBPbiBvdXRwdXQsIEBjYnMtPmJpbmRfY21kX2NvdW50IGNvbnRhaW5zIHRoZSBudW1i ZXIgb2YgYmluZGluZ3MgdG8gYmUKKyAqIGVtaXR0ZWQsIEBjYnMtPmJpbmRfZmlyc3Rfc2xvdCBp bmRpY2F0ZXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbWl0dGVkCisgKiBiaW5kaW5nLCBhbmQg QGNicy0+YmluZF9jbWRfYnVmZmVyIGNvbnRhaW5zIHRoZSBjb21tYW5kIGRhdGEuCisgKi8KK3N0 YXRpYyB2b2lkIHZtd19jb2xsZWN0X2RpcnR5X3ZpZXdfaWRzKHN0cnVjdCB2bXdfY3R4X2JpbmRp bmdfc3RhdGUgKmNicywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHZtd19jdHhfYmluZGluZm8g KmJpLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICpkaXJ0eSwKKwkJCQkgICAgICAgdTMyIG1h eF9udW0pCit7CisJY29uc3Qgc3RydWN0IHZtd19jdHhfYmluZGluZm9fdmlldyAqYml2ID0KKwkJ Y29udGFpbmVyX29mKGJpLCBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192aWV3LCBiaSk7CisJdW5z aWduZWQgbG9uZyBpLCBuZXh0X2JpdDsKKworCWNicy0+YmluZF9jbWRfY291bnQgPSAwOworCWkg PSBmaW5kX2ZpcnN0X2JpdChkaXJ0eSwgbWF4X251bSk7CisJbmV4dF9iaXQgPSBpOworCWNicy0+ YmluZF9maXJzdF9zbG90ID0gaTsKKworCWJpdiArPSBpOworCWZvciAoOyBpIDwgbWF4X251bTsg KytpLCArK2JpdikgeworCQljYnMtPmJpbmRfY21kX2J1ZmZlcltjYnMtPmJpbmRfY21kX2NvdW50 KytdID0KKwkJCSgoIWJpdi0+YmkuY3R4IHx8IGJpdi0+Ymkuc2NydWJiZWQpID8KKwkJCSBTVkdB M0RfSU5WQUxJRF9JRCA6IGJpdi0+YmkucmVzLT5pZCk7CisKKwkJaWYgKG5leHRfYml0ID09IGkp IHsKKwkJCW5leHRfYml0ID0gZmluZF9uZXh0X2JpdChkaXJ0eSwgbWF4X251bSwgaSArIDEpOwor CQkJaWYgKG5leHRfYml0ID49IG1heF9udW0pCisJCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8q KgorICogdm13X2JpbmRpbmdfZW1pdF9zZXRfc3IgLSBJc3N1ZSBkZWxheWVkIERYIHNoYWRlciBy ZXNvdXJjZSBiaW5kaW5nIGNvbW1hbmRzCisgKgorICogQGNiczogUG9pbnRlciB0byB0aGUgY29u dGV4dCdzIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUKKyAqLworc3RhdGljIGludCB2bXdf ZW1pdF9zZXRfc3Ioc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqY2JzLAorCQkJICAgaW50 IHNoYWRlcl9zbG90KQoreworCWNvbnN0IHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpsb2MgPQor CQkmY2JzLT5wZXJfc2hhZGVyW3NoYWRlcl9zbG90XS5zaGFkZXJfcmVzWzBdLmJpOworCXN0cnVj dCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZERYU2V0U2hhZGVyUmVz b3VyY2VzIGJvZHk7CisJfSAqY21kOworCXNpemVfdCBjbWRfc2l6ZSwgdmlld19pZF9zaXplOwor CWNvbnN0IHN0cnVjdCB2bXdfcmVzb3VyY2UgKmN0eCA9IHZtd19jYnNfY29udGV4dChjYnMpOwor CisJdm13X2NvbGxlY3RfZGlydHlfdmlld19pZHMoY2JzLCBsb2MsCisJCQkJICAgY2JzLT5wZXJf c2hhZGVyW3NoYWRlcl9zbG90XS5kaXJ0eV9zciwKKwkJCQkgICBTVkdBM0RfRFhfTUFYX1NSVklF V1MpOworCWlmIChjYnMtPmJpbmRfY21kX2NvdW50ID09IDApCisJCXJldHVybiAwOworCisJdmll d19pZF9zaXplID0gY2JzLT5iaW5kX2NtZF9jb3VudCpzaXplb2YodWludDMyKTsKKwljbWRfc2l6 ZSA9IHNpemVvZigqY21kKSArIHZpZXdfaWRfc2l6ZTsKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZl X2R4KGN0eC0+ZGV2X3ByaXYsIGNtZF9zaXplLCBjdHgtPmlkKTsKKwlpZiAodW5saWtlbHkoY21k ID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHJlc2VydmluZyBGSUZPIHNwYWNlIGZv ciBEWCBzaGFkZXIiCisJCQkgICIgcmVzb3VyY2UgYmluZGluZy5cbiIpOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisKKwljbWQtPmhlYWRlci5pZCA9IFNWR0FfM0RfQ01EX0RYX1NFVF9TSEFERVJf UkVTT1VSQ0VTOworCWNtZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kLT5ib2R5KSArIHZpZXdf aWRfc2l6ZTsKKwljbWQtPmJvZHkudHlwZSA9IHNoYWRlcl9zbG90ICsgU1ZHQTNEX1NIQURFUlRZ UEVfTUlOOworCWNtZC0+Ym9keS5zdGFydFZpZXcgPSBjYnMtPmJpbmRfZmlyc3Rfc2xvdDsKKwor CW1lbWNweSgmY21kWzFdLCBjYnMtPmJpbmRfY21kX2J1ZmZlciwgdmlld19pZF9zaXplKTsKKwor CXZtd19maWZvX2NvbW1pdChjdHgtPmRldl9wcml2LCBjbWRfc2l6ZSk7CisJYml0bWFwX2NsZWFy KGNicy0+cGVyX3NoYWRlcltzaGFkZXJfc2xvdF0uZGlydHlfc3IsCisJCSAgICAgY2JzLT5iaW5k X2ZpcnN0X3Nsb3QsIGNicy0+YmluZF9jbWRfY291bnQpOworCisJcmV0dXJuIDA7Cit9CisKKy8q KgorICogdm13X2JpbmRpbmdfZW1pdF9zZXRfcnQgLSBJc3N1ZSBkZWxheWVkIERYIHJlbmRlcnRh cmdldCBiaW5kaW5nIGNvbW1hbmRzCisgKgorICogQGNiczogUG9pbnRlciB0byB0aGUgY29udGV4 dCdzIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUKKyAqLworc3RhdGljIGludCB2bXdfZW1p dF9zZXRfcnQoc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqY2JzKQoreworCWNvbnN0IHN0 cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpsb2MgPSAmY2JzLT5yZW5kZXJfdGFyZ2V0c1swXS5iaTsK KwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREWFNldFJl bmRlclRhcmdldHMgYm9keTsKKwl9ICpjbWQ7CisJc2l6ZV90IGNtZF9zaXplLCB2aWV3X2lkX3Np emU7CisJY29uc3Qgc3RydWN0IHZtd19yZXNvdXJjZSAqY3R4ID0gdm13X2Nic19jb250ZXh0KGNi cyk7CisKKwl2bXdfY29sbGVjdF92aWV3X2lkcyhjYnMsIGxvYywgU1ZHQTNEX01BWF9TSU1VTFRB TkVPVVNfUkVOREVSX1RBUkdFVFMpOworCXZpZXdfaWRfc2l6ZSA9IGNicy0+YmluZF9jbWRfY291 bnQqc2l6ZW9mKHVpbnQzMik7CisJY21kX3NpemUgPSBzaXplb2YoKmNtZCkgKyB2aWV3X2lkX3Np emU7CisJY21kID0gdm13X2ZpZm9fcmVzZXJ2ZV9keChjdHgtPmRldl9wcml2LCBjbWRfc2l6ZSwg Y3R4LT5pZCk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZh aWxlZCByZXNlcnZpbmcgRklGTyBzcGFjZSBmb3IgRFggcmVuZGVyLXRhcmdldCIKKwkJCSAgIiBi aW5kaW5nLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNtZC0+aGVhZGVyLmlkID0g U1ZHQV8zRF9DTURfRFhfU0VUX1JFTkRFUlRBUkdFVFM7CisJY21kLT5oZWFkZXIuc2l6ZSA9IHNp emVvZihjbWQtPmJvZHkpICsgdmlld19pZF9zaXplOworCisJaWYgKGNicy0+ZHNfdmlldy5iaS5j dHggJiYgIWNicy0+ZHNfdmlldy5iaS5zY3J1YmJlZCkKKwkJY21kLT5ib2R5LmRlcHRoU3RlbmNp bFZpZXdJZCA9IGNicy0+ZHNfdmlldy5iaS5yZXMtPmlkOworCWVsc2UKKwkJY21kLT5ib2R5LmRl cHRoU3RlbmNpbFZpZXdJZCA9IFNWR0EzRF9JTlZBTElEX0lEOworCisJbWVtY3B5KCZjbWRbMV0s IGNicy0+YmluZF9jbWRfYnVmZmVyLCB2aWV3X2lkX3NpemUpOworCisJdm13X2ZpZm9fY29tbWl0 KGN0eC0+ZGV2X3ByaXYsIGNtZF9zaXplKTsKKworCXJldHVybiAwOworCit9CisKKy8qKgorICog dm13X2NvbGxlY3Rfc29fdGFyZ2V0cyAtIEJ1aWxkIFNWR0EzZFNvVGFyZ2V0IGRhdGEgZm9yIGEg YmluZGluZyBjb21tYW5kCisgKiB3aXRob3V0IGNoZWNraW5nIHdoaWNoIGJpbmRpbmdzIGFjdHVh bGx5IG5lZWQgdG8gYmUgZW1pdHRlZAorICoKKyAqIEBjYnM6IFBvaW50ZXIgdG8gdGhlIGNvbnRl eHQncyBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlCisgKiBAYmk6IFBvaW50ZXIgdG8gd2hl cmUgdGhlIGJpbmRpbmcgaW5mbyBhcnJheSBpcyBzdG9yZWQgaW4gQGNicworICogQG1heF9udW06 IE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIEBiaSBhcnJheS4KKyAqCisgKiBTY2Fu cyB0aGUgQGJpIGFycmF5IGZvciBiaW5kaW5ncyBhbmQgYnVpbGRzIGEgYnVmZmVyIG9mIFNWR0Ez ZFNvVGFyZ2V0IGRhdGEuCisgKiBTdG9wcyBhdCB0aGUgZmlyc3Qgbm9uLWV4aXN0aW5nIGJpbmRp bmcgaW4gdGhlIEBiaSBhcnJheS4KKyAqIE9uIG91dHB1dCwgQGNicy0+YmluZF9jbWRfY291bnQg Y29udGFpbnMgdGhlIG51bWJlciBvZiBiaW5kaW5ncyB0byBiZQorICogZW1pdHRlZCwgQGNicy0+ YmluZF9maXJzdF9zbG90IGlzIHNldCB0byB6ZXJvLCBhbmQgQGNicy0+YmluZF9jbWRfYnVmZmVy CisgKiBjb250YWlucyB0aGUgY29tbWFuZCBkYXRhLgorICovCitzdGF0aWMgdm9pZCB2bXdfY29s bGVjdF9zb190YXJnZXRzKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmNicywKKwkJCQkg ICBjb25zdCBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmksCisJCQkJICAgdTMyIG1heF9udW0p Cit7CisJY29uc3Qgc3RydWN0IHZtd19jdHhfYmluZGluZm9fc28gKmJpc28gPQorCQljb250YWlu ZXJfb2YoYmksIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvX3NvLCBiaSk7CisJdW5zaWduZWQgbG9u ZyBpOworCVNWR0EzZFNvVGFyZ2V0ICpzb19idWZmZXIgPSAoU1ZHQTNkU29UYXJnZXQgKikgY2Jz LT5iaW5kX2NtZF9idWZmZXI7CisKKwljYnMtPmJpbmRfY21kX2NvdW50ID0gMDsKKwljYnMtPmJp bmRfZmlyc3Rfc2xvdCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X251bTsgKytpLCArK2Jp c28sICsrc29fYnVmZmVyLAorCQkgICAgKytjYnMtPmJpbmRfY21kX2NvdW50KSB7CisJCWlmICgh Ymlzby0+YmkuY3R4KQorCQkJYnJlYWs7CisKKwkJaWYgKCFiaXNvLT5iaS5zY3J1YmJlZCkgewor CQkJc29fYnVmZmVyLT5zaWQgPSBiaXNvLT5iaS5yZXMtPmlkOworCQkJc29fYnVmZmVyLT5vZmZz ZXQgPSBiaXNvLT5vZmZzZXQ7CisJCQlzb19idWZmZXItPnNpemVJbkJ5dGVzID0gYmlzby0+c2l6 ZTsKKwkJfSBlbHNlIHsKKwkJCXNvX2J1ZmZlci0+c2lkID0gU1ZHQTNEX0lOVkFMSURfSUQ7CisJ CQlzb19idWZmZXItPm9mZnNldCA9IDA7CisJCQlzb19idWZmZXItPnNpemVJbkJ5dGVzID0gMDsK KwkJfQorCX0KK30KKworLyoqCisgKiB2bXdfYmluZGluZ19lbWl0X3NldF9zbyAtIElzc3VlIGRl bGF5ZWQgc3RyZWFtb3V0IGJpbmRpbmcgY29tbWFuZHMKKyAqCisgKiBAY2JzOiBQb2ludGVyIHRv IHRoZSBjb250ZXh0J3Mgc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZQorICovCitzdGF0aWMg aW50IHZtd19lbWl0X3NldF9zbyhzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpjYnMpCit7 CisJY29uc3Qgc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmxvYyA9ICZjYnMtPnNvX3RhcmdldHNb MF0uYmk7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21k RFhTZXRTT1RhcmdldHMgYm9keTsKKwl9ICpjbWQ7CisJc2l6ZV90IGNtZF9zaXplLCBzb190YXJn ZXRfc2l6ZTsKKwljb25zdCBzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHggPSB2bXdfY2JzX2NvbnRl eHQoY2JzKTsKKworCXZtd19jb2xsZWN0X3NvX3RhcmdldHMoY2JzLCBsb2MsIFNWR0EzRF9EWF9N QVhfU09UQVJHRVRTKTsKKwlpZiAoY2JzLT5iaW5kX2NtZF9jb3VudCA9PSAwKQorCQlyZXR1cm4g MDsKKworCXNvX3RhcmdldF9zaXplID0gY2JzLT5iaW5kX2NtZF9jb3VudCpzaXplb2YoU1ZHQTNk U29UYXJnZXQpOworCWNtZF9zaXplID0gc2l6ZW9mKCpjbWQpICsgc29fdGFyZ2V0X3NpemU7CisJ Y21kID0gdm13X2ZpZm9fcmVzZXJ2ZV9keChjdHgtPmRldl9wcml2LCBjbWRfc2l6ZSwgY3R4LT5p ZCk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCBy ZXNlcnZpbmcgRklGTyBzcGFjZSBmb3IgRFggU08gdGFyZ2V0IgorCQkJICAiIGJpbmRpbmcuXG4i KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY21kLT5oZWFkZXIuaWQgPSBTVkdBXzNEX0NN RF9EWF9TRVRfU09UQVJHRVRTOworCWNtZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kLT5ib2R5 KSArIHNvX3RhcmdldF9zaXplOworCW1lbWNweSgmY21kWzFdLCBjYnMtPmJpbmRfY21kX2J1ZmZl ciwgc29fdGFyZ2V0X3NpemUpOworCisJdm13X2ZpZm9fY29tbWl0KGN0eC0+ZGV2X3ByaXYsIGNt ZF9zaXplKTsKKworCXJldHVybiAwOworCit9CisKKy8qKgorICogdm13X2JpbmRpbmdfZW1pdF9k aXJ0eV9wcyAtIElzc3VlIGRlbGF5ZWQgcGVyIHNoYWRlciBiaW5kaW5nIGNvbW1hbmRzCisgKgor ICogQGNiczogUG9pbnRlciB0byB0aGUgY29udGV4dCdzIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdf c3RhdGUKKyAqCisgKi8KK3N0YXRpYyBpbnQgdm13X2JpbmRpbmdfZW1pdF9kaXJ0eV9wcyhzdHJ1 Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpjYnMpCit7CisJc3RydWN0IHZtd19keF9zaGFkZXJf YmluZGluZ3MgKnNiID0gJmNicy0+cGVyX3NoYWRlclswXTsKKwl1MzIgaTsKKwlpbnQgcmV0Owor CisJZm9yIChpID0gMDsgaSA8IFNWR0EzRF9OVU1fU0hBREVSVFlQRV9EWDEwOyArK2ksICsrc2Ip IHsKKwkJaWYgKCF0ZXN0X2JpdChWTVdfQklORElOR19QU19TUl9CSVQsICZzYi0+ZGlydHkpKQor CQkJY29udGludWU7CisKKwkJcmV0ID0gdm13X2VtaXRfc2V0X3NyKGNicywgaSk7CisJCWlmIChy ZXQpCisJCQlicmVhazsKKworCQlfX2NsZWFyX2JpdChWTVdfQklORElOR19QU19TUl9CSVQsICZz Yi0+ZGlydHkpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZtd19jb2xsZWN0X2Rp cnR5X3ZicyAtIEJ1aWxkIFNWR0EzZFZlcnRleEJ1ZmZlciBkYXRhIGZvciBhCisgKiBTVkdBM2RD bWREWFNldFZlcnRleEJ1ZmZlcnMgY29tbWFuZAorICoKKyAqIEBjYnM6IFBvaW50ZXIgdG8gdGhl IGNvbnRleHQncyBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlCisgKiBAYmk6IFBvaW50ZXIg dG8gd2hlcmUgdGhlIGJpbmRpbmcgaW5mbyBhcnJheSBpcyBzdG9yZWQgaW4gQGNicworICogQGRp cnR5OiBCaXRtYXAgaW5kaWNhdGluZyB3aGljaCBiaW5kaW5ncyBuZWVkIHRvIGJlIGVtaXR0ZWQu CisgKiBAbWF4X251bTogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgQGJpIGFycmF5 LgorICoKKyAqIFNjYW5zIHRoZSBAYmkgYXJyYXkgZm9yIGJpbmRpbmdzIHRoYXQgbmVlZCB0byBi ZSBlbWl0dGVkIGFuZAorICogYnVpbGRzIGEgYnVmZmVyIG9mIFNWR0EzZFZlcnRleEJ1ZmZlciBk YXRhLgorICogT24gb3V0cHV0LCBAY2JzLT5iaW5kX2NtZF9jb3VudCBjb250YWlucyB0aGUgbnVt YmVyIG9mIGJpbmRpbmdzIHRvIGJlCisgKiBlbWl0dGVkLCBAY2JzLT5iaW5kX2ZpcnN0X3Nsb3Qg aW5kaWNhdGVzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZW1pdHRlZAorICogYmluZGluZywgYW5k IEBjYnMtPmJpbmRfY21kX2J1ZmZlciBjb250YWlucyB0aGUgY29tbWFuZCBkYXRhLgorICovCitz dGF0aWMgdm9pZCB2bXdfY29sbGVjdF9kaXJ0eV92YnMoc3RydWN0IHZtd19jdHhfYmluZGluZ19z dGF0ZSAqY2JzLAorCQkJCSAgY29uc3Qgc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJpLAorCQkJ CSAgdW5zaWduZWQgbG9uZyAqZGlydHksCisJCQkJICB1MzIgbWF4X251bSkKK3sKKwljb25zdCBz dHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192YiAqYml2ID0KKwkJY29udGFpbmVyX29mKGJpLCBzdHJ1 Y3Qgdm13X2N0eF9iaW5kaW5mb192YiwgYmkpOworCXVuc2lnbmVkIGxvbmcgaSwgbmV4dF9iaXQ7 CisJU1ZHQTNkVmVydGV4QnVmZmVyICp2YnMgPSAoU1ZHQTNkVmVydGV4QnVmZmVyICopICZjYnMt PmJpbmRfY21kX2J1ZmZlcjsKKworCWNicy0+YmluZF9jbWRfY291bnQgPSAwOworCWkgPSBmaW5k X2ZpcnN0X2JpdChkaXJ0eSwgbWF4X251bSk7CisJbmV4dF9iaXQgPSBpOworCWNicy0+YmluZF9m aXJzdF9zbG90ID0gaTsKKworCWJpdiArPSBpOworCWZvciAoOyBpIDwgbWF4X251bTsgKytpLCAr K2JpdiwgKyt2YnMpIHsKKwkJaWYgKCFiaXYtPmJpLmN0eCB8fCBiaXYtPmJpLnNjcnViYmVkKSB7 CisJCQl2YnMtPnNpZCA9IFNWR0EzRF9JTlZBTElEX0lEOworCQkJdmJzLT5zdHJpZGUgPSAwOwor CQkJdmJzLT5vZmZzZXQgPSAwOworCQl9IGVsc2UgeworCQkJdmJzLT5zaWQgPSBiaXYtPmJpLnJl cy0+aWQ7CisJCQl2YnMtPnN0cmlkZSA9IGJpdi0+c3RyaWRlOworCQkJdmJzLT5vZmZzZXQgPSBi aXYtPm9mZnNldDsKKwkJfQorCQljYnMtPmJpbmRfY21kX2NvdW50Kys7CisJCWlmIChuZXh0X2Jp dCA9PSBpKSB7CisJCQluZXh0X2JpdCA9IGZpbmRfbmV4dF9iaXQoZGlydHksIG1heF9udW0sIGkg KyAxKTsKKwkJCWlmIChuZXh0X2JpdCA+PSBtYXhfbnVtKQorCQkJCWJyZWFrOworCQl9CisJfQor fQorCisvKioKKyAqIHZtd19iaW5kaW5nX2VtaXRfc2V0X3ZiIC0gSXNzdWUgZGVsYXllZCB2ZXJ0 ZXggYnVmZmVyIGJpbmRpbmcgY29tbWFuZHMKKyAqCisgKiBAY2JzOiBQb2ludGVyIHRvIHRoZSBj b250ZXh0J3Mgc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZQorICoKKyAqLworc3RhdGljIGlu dCB2bXdfZW1pdF9zZXRfdmIoc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqY2JzKQorewor CWNvbnN0IHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpsb2MgPQorCQkmY2JzLT52ZXJ0ZXhfYnVm ZmVyc1swXS5iaTsKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdB M2RDbWREWFNldFZlcnRleEJ1ZmZlcnMgYm9keTsKKwl9ICpjbWQ7CisJc2l6ZV90IGNtZF9zaXpl LCBzZXRfdmJfc2l6ZTsKKwljb25zdCBzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHggPSB2bXdfY2Jz X2NvbnRleHQoY2JzKTsKKworCXZtd19jb2xsZWN0X2RpcnR5X3ZicyhjYnMsIGxvYywgY2JzLT5k aXJ0eV92YiwKKwkJCSAgICAgU1ZHQTNEX0RYX01BWF9WRVJURVhCVUZGRVJTKTsKKwlpZiAoY2Jz LT5iaW5kX2NtZF9jb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXNldF92Yl9zaXplID0gY2Jz LT5iaW5kX2NtZF9jb3VudCpzaXplb2YoU1ZHQTNkVmVydGV4QnVmZmVyKTsKKwljbWRfc2l6ZSA9 IHNpemVvZigqY21kKSArIHNldF92Yl9zaXplOworCWNtZCA9IHZtd19maWZvX3Jlc2VydmVfZHgo Y3R4LT5kZXZfcHJpdiwgY21kX3NpemUsIGN0eC0+aWQpOworCWlmICh1bmxpa2VseShjbWQgPT0g TlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgcmVzZXJ2aW5nIEZJRk8gc3BhY2UgZm9yIERY IHZlcnRleCBidWZmZXIiCisJCQkgICIgYmluZGluZy5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsK Kwl9CisKKwljbWQtPmhlYWRlci5pZCA9IFNWR0FfM0RfQ01EX0RYX1NFVF9WRVJURVhfQlVGRkVS UzsKKwljbWQtPmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSkgKyBzZXRfdmJfc2l6ZTsK KwljbWQtPmJvZHkuc3RhcnRCdWZmZXIgPSBjYnMtPmJpbmRfZmlyc3Rfc2xvdDsKKworCW1lbWNw eSgmY21kWzFdLCBjYnMtPmJpbmRfY21kX2J1ZmZlciwgc2V0X3ZiX3NpemUpOworCisJdm13X2Zp Zm9fY29tbWl0KGN0eC0+ZGV2X3ByaXYsIGNtZF9zaXplKTsKKwliaXRtYXBfY2xlYXIoY2JzLT5k aXJ0eV92YiwKKwkJICAgICBjYnMtPmJpbmRfZmlyc3Rfc2xvdCwgY2JzLT5iaW5kX2NtZF9jb3Vu dCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2bXdfYmluZGluZ19lbWl0X2RpcnR5IC0g SXNzdWUgZGVsYXllZCBiaW5kaW5nIGNvbW1hbmRzCisgKgorICogQGNiczogUG9pbnRlciB0byB0 aGUgY29udGV4dCdzIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUKKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIGlzc3VlcyB0aGUgZGVsYXllZCBiaW5kaW5nIGNvbW1hbmRzIHRoYXQgYXJpc2UgZnJv bQorICogcHJldmlvdXMgc2NydWIgLyB1bnNjcnViIGNhbGxzLiBUaGVzZSBiaW5kaW5nIGNvbW1h bmRzIGFyZSB0eXBpY2FsbHkKKyAqIGNvbW1hbmRzIHRoYXQgYmF0Y2ggYSBudW1iZXIgb2YgYmlu ZGluZ3MgYW5kIHRoZXJlZm9yZSBpdCBtYWtlcyBzZW5zZQorICogdG8gZGVsYXkgdGhlbS4KKyAq Lworc3RhdGljIGludCB2bXdfYmluZGluZ19lbWl0X2RpcnR5KHN0cnVjdCB2bXdfY3R4X2JpbmRp bmdfc3RhdGUgKmNicykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGhpdCA9IDA7 CisKKwl3aGlsZSAoKGhpdCA9IGZpbmRfbmV4dF9iaXQoJmNicy0+ZGlydHksIFZNV19CSU5ESU5H X05VTV9CSVRTLCBoaXQpKQorCSAgICAgIDwgVk1XX0JJTkRJTkdfTlVNX0JJVFMpIHsKKworCQlz d2l0Y2ggKGhpdCkgeworCQljYXNlIFZNV19CSU5ESU5HX1JUX0JJVDoKKwkJCXJldCA9IHZtd19l bWl0X3NldF9ydChjYnMpOworCQkJYnJlYWs7CisJCWNhc2UgVk1XX0JJTkRJTkdfUFNfQklUOgor CQkJcmV0ID0gdm13X2JpbmRpbmdfZW1pdF9kaXJ0eV9wcyhjYnMpOworCQkJYnJlYWs7CisJCWNh c2UgVk1XX0JJTkRJTkdfU09fQklUOgorCQkJcmV0ID0gdm13X2VtaXRfc2V0X3NvKGNicyk7CisJ CQlicmVhazsKKwkJY2FzZSBWTVdfQklORElOR19WQl9CSVQ6CisJCQlyZXQgPSB2bXdfZW1pdF9z ZXRfdmIoY2JzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKwkJaWYg KHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJX19jbGVhcl9iaXQoaGl0LCAmY2JzLT5kaXJ0eSk7 CisJCWhpdCsrOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZtd19iaW5kaW5nX3Nj cnViX3NyIC0gU2NoZWR1bGUgYSBkeCBzaGFkZXJyZXNvdXJjZSBiaW5kaW5nCisgKiBzY3J1YiBm cm9tIGEgY29udGV4dAorICoKKyAqIEBiaTogc2luZ2xlIGJpbmRpbmcgaW5mb3JtYXRpb24uCisg KiBAcmViaW5kOiBXaGV0aGVyIHRvIGlzc3VlIGEgYmluZCBpbnN0ZWFkIG9mIHNjcnViIGNvbW1h bmQuCisgKi8KK3N0YXRpYyBpbnQgdm13X2JpbmRpbmdfc2NydWJfc3Ioc3RydWN0IHZtd19jdHhf YmluZGluZm8gKmJpLCBib29sIHJlYmluZCkKK3sKKwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192 aWV3ICpiaXYgPQorCQljb250YWluZXJfb2YoYmksIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvX3Zp ZXcsIGJpKTsKKwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpjYnMgPQorCQl2bXdfY29u dGV4dF9iaW5kaW5nX3N0YXRlKGJpLT5jdHgpOworCisJX19zZXRfYml0KGJpdi0+c2xvdCwgY2Jz LT5wZXJfc2hhZGVyW2Jpdi0+c2hhZGVyX3Nsb3RdLmRpcnR5X3NyKTsKKwlfX3NldF9iaXQoVk1X X0JJTkRJTkdfUFNfU1JfQklULAorCQkgICZjYnMtPnBlcl9zaGFkZXJbYml2LT5zaGFkZXJfc2xv dF0uZGlydHkpOworCV9fc2V0X2JpdChWTVdfQklORElOR19QU19CSVQsICZjYnMtPmRpcnR5KTsK KworCXJldHVybiAwOworfQorCisvKioKKyAqIHZtd19iaW5kaW5nX3NjcnViX2R4X3J0IC0gU2No ZWR1bGUgYSBkeCByZW5kZXJ0YXJnZXQgYmluZGluZworICogc2NydWIgZnJvbSBhIGNvbnRleHQK KyAqCisgKiBAYmk6IHNpbmdsZSBiaW5kaW5nIGluZm9ybWF0aW9uLgorICogQHJlYmluZDogV2hl dGhlciB0byBpc3N1ZSBhIGJpbmQgaW5zdGVhZCBvZiBzY3J1YiBjb21tYW5kLgorICovCitzdGF0 aWMgaW50IHZtd19iaW5kaW5nX3NjcnViX2R4X3J0KHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpi aSwgYm9vbCByZWJpbmQpCit7CisJc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqY2JzID0K KwkJdm13X2NvbnRleHRfYmluZGluZ19zdGF0ZShiaS0+Y3R4KTsKKworCV9fc2V0X2JpdChWTVdf QklORElOR19SVF9CSVQsICZjYnMtPmRpcnR5KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAq IHZtd19iaW5kaW5nX3NjcnViX3NvIC0gU2NoZWR1bGUgYSBkeCBzdHJlYW1vdXRwdXQgYnVmZmVy IGJpbmRpbmcKKyAqIHNjcnViIGZyb20gYSBjb250ZXh0CisgKgorICogQGJpOiBzaW5nbGUgYmlu ZGluZyBpbmZvcm1hdGlvbi4KKyAqIEByZWJpbmQ6IFdoZXRoZXIgdG8gaXNzdWUgYSBiaW5kIGlu c3RlYWQgb2Ygc2NydWIgY29tbWFuZC4KKyAqLworc3RhdGljIGludCB2bXdfYmluZGluZ19zY3J1 Yl9zbyhzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmksIGJvb2wgcmViaW5kKQoreworCXN0cnVj dCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmNicyA9CisJCXZtd19jb250ZXh0X2JpbmRpbmdfc3Rh dGUoYmktPmN0eCk7CisKKwlfX3NldF9iaXQoVk1XX0JJTkRJTkdfU09fQklULCAmY2JzLT5kaXJ0 eSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2bXdfYmluZGluZ19zY3J1Yl92YiAtIFNj aGVkdWxlIGEgZHggdmVydGV4IGJ1ZmZlciBiaW5kaW5nCisgKiBzY3J1YiBmcm9tIGEgY29udGV4 dAorICoKKyAqIEBiaTogc2luZ2xlIGJpbmRpbmcgaW5mb3JtYXRpb24uCisgKiBAcmViaW5kOiBX aGV0aGVyIHRvIGlzc3VlIGEgYmluZCBpbnN0ZWFkIG9mIHNjcnViIGNvbW1hbmQuCisgKi8KK3N0 YXRpYyBpbnQgdm13X2JpbmRpbmdfc2NydWJfdmIoc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJp LCBib29sIHJlYmluZCkKK3sKKwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192YiAqYml2YiA9CisJ CWNvbnRhaW5lcl9vZihiaSwgc3RydWN0IHZtd19jdHhfYmluZGluZm9fdmIsIGJpKTsKKwlzdHJ1 Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpjYnMgPQorCQl2bXdfY29udGV4dF9iaW5kaW5nX3N0 YXRlKGJpLT5jdHgpOworCisJX19zZXRfYml0KGJpdmItPnNsb3QsIGNicy0+ZGlydHlfdmIpOwor CV9fc2V0X2JpdChWTVdfQklORElOR19WQl9CSVQsICZjYnMtPmRpcnR5KTsKKworCXJldHVybiAw OworfQorCisvKioKKyAqIHZtd19iaW5kaW5nX3NjcnViX2liIC0gc2NydWIgYSBkeCBpbmRleCBi dWZmZXIgYmluZGluZyBmcm9tIGEgY29udGV4dAorICoKKyAqIEBiaTogc2luZ2xlIGJpbmRpbmcg aW5mb3JtYXRpb24uCisgKiBAcmViaW5kOiBXaGV0aGVyIHRvIGlzc3VlIGEgYmluZCBpbnN0ZWFk IG9mIHNjcnViIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQgdm13X2JpbmRpbmdfc2NydWJfaWIo c3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJpLCBib29sIHJlYmluZCkKK3sKKwlzdHJ1Y3Qgdm13 X2N0eF9iaW5kaW5mb19pYiAqYmluZGluZyA9CisJCWNvbnRhaW5lcl9vZihiaSwgdHlwZW9mKCpi aW5kaW5nKSwgYmkpOworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSBiaS0+Y3R4LT5k ZXZfcHJpdjsKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RD bWREWFNldEluZGV4QnVmZmVyIGJvZHk7CisJfSAqY21kOworCisJY21kID0gdm13X2ZpZm9fcmVz ZXJ2ZV9keChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpLCBiaS0+Y3R4LT5pZCk7CisJaWYgKHVubGlr ZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCByZXNlcnZpbmcgRklGTyBz cGFjZSBmb3IgRFggaW5kZXggYnVmZmVyICIKKwkJCSAgImJpbmRpbmcuXG4iKTsKKwkJcmV0dXJu IC1FTk9NRU07CisJfQorCWNtZC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfRFhfU0VUX0lOREVY X0JVRkZFUjsKKwljbWQtPmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSk7CisJaWYgKHJl YmluZCkgeworCQljbWQtPmJvZHkuc2lkID0gYmktPnJlcy0+aWQ7CisJCWNtZC0+Ym9keS5mb3Jt YXQgPSBiaW5kaW5nLT5mb3JtYXQ7CisJCWNtZC0+Ym9keS5vZmZzZXQgPSBiaW5kaW5nLT5vZmZz ZXQ7CisJfSBlbHNlIHsKKwkJY21kLT5ib2R5LnNpZCA9IFNWR0EzRF9JTlZBTElEX0lEOworCQlj bWQtPmJvZHkuZm9ybWF0ID0gMDsKKwkJY21kLT5ib2R5Lm9mZnNldCA9IDA7CisJfQorCisJdm13 X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJcmV0dXJuIDA7Cit9CisK Ky8qKgorICogdm13X2JpbmRpbmdfc3RhdGVfYWxsb2MgLSBBbGxvY2F0ZSBhIHN0cnVjdCB2bXdf Y3R4X2JpbmRpbmdfc3RhdGUgd2l0aAorICogbWVtb3J5IGFjY291bnRpbmcuCisgKgorICogQGRl dl9wcml2OiBQb2ludGVyIHRvIGEgZGV2aWNlIHByaXZhdGUgc3RydWN0dXJlLgorICoKKyAqIFJl dHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHN0cnVjdCBvciBhbiBlcnJvciBw b2ludGVyIG9uIGVycm9yLgorICovCitzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICoKK3Zt d19iaW5kaW5nX3N0YXRlX2FsbG9jKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJ c3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqY2JzOworCWludCByZXQ7CisKKwlyZXQgPSB0 dG1fbWVtX2dsb2JhbF9hbGxvYyh2bXdfbWVtX2dsb2IoZGV2X3ByaXYpLCBzaXplb2YoKmNicyks CisJCQkJICAgZmFsc2UsIGZhbHNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQp OworCisJY2JzID0gdnphbGxvYyhzaXplb2YoKmNicykpOworCWlmICghY2JzKSB7CisJCXR0bV9t ZW1fZ2xvYmFsX2ZyZWUodm13X21lbV9nbG9iKGRldl9wcml2KSwgc2l6ZW9mKCpjYnMpKTsKKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJY2JzLT5kZXZfcHJpdiA9IGRldl9wcml2 OworCUlOSVRfTElTVF9IRUFEKCZjYnMtPmxpc3QpOworCisJcmV0dXJuIGNiczsKK30KKworLyoq CisgKiB2bXdfYmluZGluZ19zdGF0ZV9mcmVlIC0gRnJlZSBhIHN0cnVjdCB2bXdfY3R4X2JpbmRp bmdfc3RhdGUgYW5kIGl0cworICogbWVtb3J5IGFjY291bnRpbmcgaW5mby4KKyAqCisgKiBAY2Jz OiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlIHRvIGJlIGZyZWVk LgorICovCit2b2lkIHZtd19iaW5kaW5nX3N0YXRlX2ZyZWUoc3RydWN0IHZtd19jdHhfYmluZGlu Z19zdGF0ZSAqY2JzKQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjYnMtPmRl dl9wcml2OworCisJdmZyZWUoY2JzKTsKKwl0dG1fbWVtX2dsb2JhbF9mcmVlKHZtd19tZW1fZ2xv YihkZXZfcHJpdiksIHNpemVvZigqY2JzKSk7Cit9CisKKy8qKgorICogdm13X2JpbmRpbmdfc3Rh dGVfbGlzdCAtIEdldCB0aGUgYmluZGluZyBsaXN0IG9mIGEKKyAqIHN0cnVjdCB2bXdfY3R4X2Jp bmRpbmdfc3RhdGUKKyAqCisgKiBAY2JzOiBQb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgdm13X2N0eF9i aW5kaW5nX3N0YXRlCisgKgorICogUmV0dXJucyB0aGUgYmluZGluZyBsaXN0IHdoaWNoIGNhbiBi ZSB1c2VkIHRvIHRyYXZlcnNlIHRocm91Z2ggdGhlIGJpbmRpbmdzCisgKiBhbmQgYWNjZXNzIHRo ZSByZXNvdXJjZSBpbmZvcm1hdGlvbiBvZiBhbGwgYmluZGluZ3MuCisgKi8KK3N0cnVjdCBsaXN0 X2hlYWQgKnZtd19iaW5kaW5nX3N0YXRlX2xpc3Qoc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0 ZSAqY2JzKQoreworCXJldHVybiAmY2JzLT5saXN0OworfQorCisvKioKKyAqIHZtd2dmeF9iaW5k aW5nX3N0YXRlX3Jlc2V0IC0gY2xlYXIgYSBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlCisg KgorICogQGNiczogUG9pbnRlciB0byB0aGUgc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSB0 byBiZSBjbGVhcmVkCisgKgorICogRHJvcHMgYWxsIGJpbmRpbmdzIHJlZ2lzdGVyZWQgaW4gQGNi cy4gTm8gZGV2aWNlIGJpbmRpbmcgYWN0aW9ucyBhcmUKKyAqIHBlcmZvcm1lZC4KKyAqLwordm9p ZCB2bXdfYmluZGluZ19zdGF0ZV9yZXNldChzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpj YnMpCit7CisJc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmVudHJ5LCAqbmV4dDsKKworCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgJmNicy0+bGlzdCwgY3R4X2xpc3QpCisJ CXZtd19iaW5kaW5nX2Ryb3AoZW50cnkpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyB1 bnVzZWQgYXQgcnVuLXRpbWUsIGFuZCBvbmx5IHVzZWQgdG8gaG9sZCB2YXJpb3VzIGJ1aWxkCisg KiBhc3NlcnRzIGltcG9ydGFudCBmb3IgY29kZSBvcHRpbWl6YXRpb24gYXNzdW1wdGlvbnMuCisg Ki8KK3N0YXRpYyB2b2lkIHZtd19iaW5kaW5nX2J1aWxkX2Fzc2VydHModm9pZCkKK3sKKwlCVUlM RF9CVUdfT04oU1ZHQTNEX05VTV9TSEFERVJUWVBFX0RYMTAgIT0gMyk7CisJQlVJTERfQlVHX09O KFNWR0EzRF9NQVhfU0lNVUxUQU5FT1VTX1JFTkRFUl9UQVJHRVRTID4gU1ZHQTNEX1JUX01BWCk7 CisJQlVJTERfQlVHX09OKHNpemVvZih1aW50MzIpICE9IHNpemVvZih1MzIpKTsKKworCS8qCisJ ICogc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZTo6YmluZF9jbWRfYnVmZmVyIGlzIHVzZWQg Zm9yIHZhcmlvdXMKKwkgKiB2aWV3IGlkIGFycmF5cy4KKwkgKi8KKwlCVUlMRF9CVUdfT04oVk1X X01BWF9WSUVXX0JJTkRJTkdTIDwgU1ZHQTNEX1JUX01BWCk7CisJQlVJTERfQlVHX09OKFZNV19N QVhfVklFV19CSU5ESU5HUyA8IFNWR0EzRF9EWF9NQVhfU1JWSUVXUyk7CisJQlVJTERfQlVHX09O KFZNV19NQVhfVklFV19CSU5ESU5HUyA8IFNWR0EzRF9EWF9NQVhfQ09OU1RCVUZGRVJTKTsKKwor CS8qCisJICogc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZTo6YmluZF9jbWRfYnVmZmVyIGlz IHVzZWQgZm9yCisJICogdTMyIHZpZXcgaWRzLCBTVkdBM2RTb1RhcmdldHMgYW5kIFNWR0EzZFZl cnRleEJ1ZmZlcnMKKwkgKi8KKwlCVUlMRF9CVUdfT04oU1ZHQTNEX0RYX01BWF9TT1RBUkdFVFMq c2l6ZW9mKFNWR0EzZFNvVGFyZ2V0KSA+CisJCSAgICAgVk1XX01BWF9WSUVXX0JJTkRJTkdTKnNp emVvZih1MzIpKTsKKwlCVUlMRF9CVUdfT04oU1ZHQTNEX0RYX01BWF9WRVJURVhCVUZGRVJTKnNp emVvZihTVkdBM2RWZXJ0ZXhCdWZmZXIpID4KKwkJICAgICBWTVdfTUFYX1ZJRVdfQklORElOR1Mq c2l6ZW9mKHUzMikpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfYmluZGluZy5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYmluZGluZy5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMmU3N2EKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iaW5kaW5nLmgKQEAgLTAsMCArMSwy MDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCDCqSAyMDE1IFZNd2Fy ZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq CisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBs aW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNo LAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUg U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQu IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5E L09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9S IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfVk1XR0ZYX0JJTkRJ TkdfSF8KKyNkZWZpbmUgX1ZNV0dGWF9CSU5ESU5HX0hfCisKKyNpbmNsdWRlICJkZXZpY2VfaW5j bHVkZS9zdmdhM2RfcmVnLmgiCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjZGVmaW5lIFZN V19NQVhfVklFV19CSU5ESU5HUyAxMjgKKworc3RydWN0IHZtd19wcml2YXRlOworc3RydWN0IHZt d19jdHhfYmluZGluZ19zdGF0ZTsKKworLyoKKyAqIGVudW0gdm13X2N0eF9iaW5kaW5nX3R5cGUg LSBhYnN0cmFjdCByZXNvdXJjZSB0byBjb250ZXh0IGJpbmRpbmcgdHlwZXMKKyAqLworZW51bSB2 bXdfY3R4X2JpbmRpbmdfdHlwZSB7CisJdm13X2N0eF9iaW5kaW5nX3NoYWRlciwKKwl2bXdfY3R4 X2JpbmRpbmdfcnQsCisJdm13X2N0eF9iaW5kaW5nX3RleCwKKwl2bXdfY3R4X2JpbmRpbmdfY2Is CisJdm13X2N0eF9iaW5kaW5nX2R4X3NoYWRlciwKKwl2bXdfY3R4X2JpbmRpbmdfZHhfcnQsCisJ dm13X2N0eF9iaW5kaW5nX3NyLAorCXZtd19jdHhfYmluZGluZ19kcywKKwl2bXdfY3R4X2JpbmRp bmdfc28sCisJdm13X2N0eF9iaW5kaW5nX3ZiLAorCXZtd19jdHhfYmluZGluZ19pYiwKKwl2bXdf Y3R4X2JpbmRpbmdfbWF4Cit9OworCisvKioKKyAqIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvIC0g c2luZ2xlIGJpbmRpbmcgbWV0YWRhdGEKKyAqCisgKiBAY3R4X2xpc3Q6IExpc3QgaGVhZCBmb3Ig dGhlIGNvbnRleHQncyBsaXN0IG9mIGJpbmRpbmdzLgorICogQHJlc19saXN0OiBMaXN0IGhlYWQg Zm9yIGEgcmVzb3VyY2UncyBsaXN0IG9mIGJpbmRpbmdzLgorICogQGN0eDogTm9uLXJlZmNvdW50 ZWQgcG9pbnRlciB0byB0aGUgY29udGV4dCB0aGF0IG93bnMgdGhlIGJpbmRpbmcuIE5VTEwKKyAq IGluZGljYXRlcyBubyBiaW5kaW5nIHByZXNlbnQuCisgKiBAcmVzOiBOb24tcmVmY291bnRlZCBw b2ludGVyIHRvIHRoZSByZXNvdXJjZSB0aGUgYmluZGluZyBwb2ludHMgdG8uIFRoaXMKKyAqIGlz IHR5cGljYWxseSBhIHN1cmZhY2Ugb3IgYSB2aWV3LgorICogQGJ0OiBCaW5kaW5nIHR5cGUuCisg KiBAc2NydWJiZWQ6IFdoZXRoZXIgdGhlIGJpbmRpbmcgaGFzIGJlZW4gc2NydWJiZWQgZnJvbSB0 aGUgY29udGV4dC4KKyAqLworc3RydWN0IHZtd19jdHhfYmluZGluZm8geworCXN0cnVjdCBsaXN0 X2hlYWQgY3R4X2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCByZXNfbGlzdDsKKwlzdHJ1Y3Qgdm13 X3Jlc291cmNlICpjdHg7CisJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOworCWVudW0gdm13X2N0 eF9iaW5kaW5nX3R5cGUgYnQ7CisJYm9vbCBzY3J1YmJlZDsKK307CisKKy8qKgorICogc3RydWN0 IHZtd19jdHhfYmluZGluZm9fdGV4IC0gdGV4dHVyZSBzdGFnZSBiaW5kaW5nIG1ldGFkYXRhCisg KgorICogQGJpOiBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyB3ZSBkZXJpdmUgZnJvbS4KKyAqIEB0 ZXh0dXJlX3N0YWdlOiBEZXZpY2UgZGF0YSB1c2VkIHRvIHJlY29uc3RydWN0IGJpbmRpbmcgY29t bWFuZC4KKyAqLworc3RydWN0IHZtd19jdHhfYmluZGluZm9fdGV4IHsKKwlzdHJ1Y3Qgdm13X2N0 eF9iaW5kaW5mbyBiaTsKKwl1aW50MzIgdGV4dHVyZV9zdGFnZTsKK307CisKKy8qKgorICogc3Ry dWN0IHZtd19jdHhfYmluZGluZm9fc2hhZGVyIC0gU2hhZGVyIGJpbmRpbmcgbWV0YWRhdGEKKyAq CisgKiBAYmk6IHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvIHdlIGRlcml2ZSBmcm9tLgorICogQHNo YWRlcl9zbG90OiBEZXZpY2UgZGF0YSB1c2VkIHRvIHJlY29uc3RydWN0IGJpbmRpbmcgY29tbWFu ZC4KKyAqLworc3RydWN0IHZtd19jdHhfYmluZGluZm9fc2hhZGVyIHsKKwlzdHJ1Y3Qgdm13X2N0 eF9iaW5kaW5mbyBiaTsKKwlTVkdBM2RTaGFkZXJUeXBlIHNoYWRlcl9zbG90OworfTsKKworLyoq CisgKiBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb19jYiAtIENvbnN0YW50IGJ1ZmZlciBiaW5kaW5n IG1ldGFkYXRhCisgKgorICogQGJpOiBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyB3ZSBkZXJpdmUg ZnJvbS4KKyAqIEBzaGFkZXJfc2xvdDogRGV2aWNlIGRhdGEgdXNlZCB0byByZWNvbnN0cnVjdCBi aW5kaW5nIGNvbW1hbmQuCisgKiBAb2Zmc2V0OiBEZXZpY2UgZGF0YSB1c2VkIHRvIHJlY29uc3Ry dWN0IGJpbmRpbmcgY29tbWFuZC4KKyAqIEBzaXplOiBEZXZpY2UgZGF0YSB1c2VkIHRvIHJlY29u c3RydWN0IGJpbmRpbmcgY29tbWFuZC4KKyAqIEBzbG90OiBEZXZpY2UgZGF0YSB1c2VkIHRvIHJl Y29uc3RydWN0IGJpbmRpbmcgY29tbWFuZC4KKyAqLworc3RydWN0IHZtd19jdHhfYmluZGluZm9f Y2IgeworCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvIGJpOworCVNWR0EzZFNoYWRlclR5cGUgc2hh ZGVyX3Nsb3Q7CisJdWludDMyIG9mZnNldDsKKwl1aW50MzIgc2l6ZTsKKwl1aW50MzIgc2xvdDsK K307CisKKy8qKgorICogc3RydWN0IHZtd19jdHhfYmluZGluZm9fdmlldyAtIFZpZXcgYmluZGlu ZyBtZXRhZGF0YQorICoKKyAqIEBiaTogc3RydWN0IHZtd19jdHhfYmluZGluZm8gd2UgZGVyaXZl IGZyb20uCisgKiBAc2hhZGVyX3Nsb3Q6IERldmljZSBkYXRhIHVzZWQgdG8gcmVjb25zdHJ1Y3Qg YmluZGluZyBjb21tYW5kLgorICogQHNsb3Q6IERldmljZSBkYXRhIHVzZWQgdG8gcmVjb25zdHJ1 Y3QgYmluZGluZyBjb21tYW5kLgorICovCitzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192aWV3IHsK KwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyBiaTsKKwlTVkdBM2RTaGFkZXJUeXBlIHNoYWRlcl9z bG90OworCXVpbnQzMiBzbG90OworfTsKKworLyoqCisgKiBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5m b19zbyAtIFN0cmVhbU91dHB1dCBiaW5kaW5nIG1ldGFkYXRhCisgKgorICogQGJpOiBzdHJ1Y3Qg dm13X2N0eF9iaW5kaW5mbyB3ZSBkZXJpdmUgZnJvbS4KKyAqIEBvZmZzZXQ6IERldmljZSBkYXRh IHVzZWQgdG8gcmVjb25zdHJ1Y3QgYmluZGluZyBjb21tYW5kLgorICogQHNpemU6IERldmljZSBk YXRhIHVzZWQgdG8gcmVjb25zdHJ1Y3QgYmluZGluZyBjb21tYW5kLgorICogQHNsb3Q6IERldmlj ZSBkYXRhIHVzZWQgdG8gcmVjb25zdHJ1Y3QgYmluZGluZyBjb21tYW5kLgorICovCitzdHJ1Y3Qg dm13X2N0eF9iaW5kaW5mb19zbyB7CisJc3RydWN0IHZtd19jdHhfYmluZGluZm8gYmk7CisJdWlu dDMyIG9mZnNldDsKKwl1aW50MzIgc2l6ZTsKKwl1aW50MzIgc2xvdDsKK307CisKKy8qKgorICog c3RydWN0IHZtd19jdHhfYmluZGluZm9fdmIgLSBWZXJ0ZXggYnVmZmVyIGJpbmRpbmcgbWV0YWRh dGEKKyAqCisgKiBAYmk6IHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvIHdlIGRlcml2ZSBmcm9tLgor ICogQG9mZnNldDogRGV2aWNlIGRhdGEgdXNlZCB0byByZWNvbnN0cnVjdCBiaW5kaW5nIGNvbW1h bmQuCisgKiBAc3RyaWRlOiBEZXZpY2UgZGF0YSB1c2VkIHRvIHJlY29uc3RydWN0IGJpbmRpbmcg Y29tbWFuZC4KKyAqIEBzbG90OiBEZXZpY2UgZGF0YSB1c2VkIHRvIHJlY29uc3RydWN0IGJpbmRp bmcgY29tbWFuZC4KKyAqLworc3RydWN0IHZtd19jdHhfYmluZGluZm9fdmIgeworCXN0cnVjdCB2 bXdfY3R4X2JpbmRpbmZvIGJpOworCXVpbnQzMiBvZmZzZXQ7CisJdWludDMyIHN0cmlkZTsKKwl1 aW50MzIgc2xvdDsKK307CisKKy8qKgorICogc3RydWN0IHZtd19jdHhfYmluZGluZm9faWIgLSBT dHJlYW1PdXRwdXQgYmluZGluZyBtZXRhZGF0YQorICoKKyAqIEBiaTogc3RydWN0IHZtd19jdHhf YmluZGluZm8gd2UgZGVyaXZlIGZyb20uCisgKiBAb2Zmc2V0OiBEZXZpY2UgZGF0YSB1c2VkIHRv IHJlY29uc3RydWN0IGJpbmRpbmcgY29tbWFuZC4KKyAqIEBmb3JtYXQ6IERldmljZSBkYXRhIHVz ZWQgdG8gcmVjb25zdHJ1Y3QgYmluZGluZyBjb21tYW5kLgorICovCitzdHJ1Y3Qgdm13X2N0eF9i aW5kaW5mb19pYiB7CisJc3RydWN0IHZtd19jdHhfYmluZGluZm8gYmk7CisJdWludDMyIG9mZnNl dDsKKwl1aW50MzIgZm9ybWF0OworfTsKKworLyoqCisgKiBzdHJ1Y3Qgdm13X2R4X3NoYWRlcl9i aW5kaW5ncyAtIHBlciBzaGFkZXIgdHlwZSBjb250ZXh0IGJpbmRpbmcgc3RhdGUKKyAqCisgKiBA c2hhZGVyOiBUaGUgc2hhZGVyIGJpbmRpbmcgZm9yIHRoaXMgc2hhZGVyIHR5cGUKKyAqIEBjb25z dF9idWZmZXI6IENvbnN0IGJ1ZmZlciBiaW5kaW5ncyBmb3IgdGhpcyBzaGFkZXIgdHlwZS4KKyAq IEBzaGFkZXJfcmVzOiBTaGFkZXIgcmVzb3VyY2UgdmlldyBiaW5kaW5ncyBmb3IgdGhpcyBzaGFk ZXIgdHlwZS4KKyAqIEBkaXJ0eV9zcjogQml0bWFwIHRyYWNraW5nIGluZGl2aWR1YWwgc2hhZGVy IHJlc291cmNlIGJpbmRpbmdzIGNoYW5nZXMKKyAqIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gZW1p dHRlZCB0byB0aGUgZGV2aWNlLgorICogQGRpcnR5OiBCaXRtYXAgdHJhY2tpbmcgcGVyLWJpbmRp bmcgdHlwZSBiaW5kaW5nIGNoYW5nZXMgdGhhdCBoYXZlIG5vdAorICogeWV0IGJlZW4gZW1pdHRl ZCB0byB0aGUgZGV2aWNlLgorICovCitzdHJ1Y3Qgdm13X2R4X3NoYWRlcl9iaW5kaW5ncyB7CisJ c3RydWN0IHZtd19jdHhfYmluZGluZm9fc2hhZGVyIHNoYWRlcjsKKwlzdHJ1Y3Qgdm13X2N0eF9i aW5kaW5mb19jYiBjb25zdF9idWZmZXJzW1NWR0EzRF9EWF9NQVhfQ09OU1RCVUZGRVJTXTsKKwlz dHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192aWV3IHNoYWRlcl9yZXNbU1ZHQTNEX0RYX01BWF9TUlZJ RVdTXTsKKwlERUNMQVJFX0JJVE1BUChkaXJ0eV9zciwgU1ZHQTNEX0RYX01BWF9TUlZJRVdTKTsK Kwl1bnNpZ25lZCBsb25nIGRpcnR5OworfTsKKworZXh0ZXJuIHZvaWQgdm13X2JpbmRpbmdfYWRk KHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmNicywKKwkJCSAgICBjb25zdCBzdHJ1Y3Qg dm13X2N0eF9iaW5kaW5mbyAqY2ksCisJCQkgICAgdTMyIHNoYWRlcl9zbG90LCB1MzIgc2xvdCk7 CitleHRlcm4gdm9pZAordm13X2JpbmRpbmdfc3RhdGVfY29tbWl0KHN0cnVjdCB2bXdfY3R4X2Jp bmRpbmdfc3RhdGUgKnRvLAorCQkJIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmZyb20p OworZXh0ZXJuIHZvaWQgdm13X2JpbmRpbmdfcmVzX2xpc3Rfa2lsbChzdHJ1Y3QgbGlzdF9oZWFk ICpoZWFkKTsKK2V4dGVybiB2b2lkIHZtd19iaW5kaW5nX3Jlc19saXN0X3NjcnViKHN0cnVjdCBs aXN0X2hlYWQgKmhlYWQpOworZXh0ZXJuIGludCB2bXdfYmluZGluZ19yZWJpbmRfYWxsKHN0cnVj dCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmNicyk7CitleHRlcm4gdm9pZCB2bXdfYmluZGluZ19z dGF0ZV9raWxsKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmNicyk7CitleHRlcm4gdm9p ZCB2bXdfYmluZGluZ19zdGF0ZV9zY3J1YihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpj YnMpOworZXh0ZXJuIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKgordm13X2JpbmRpbmdf c3RhdGVfYWxsb2Moc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCB2 bXdfYmluZGluZ19zdGF0ZV9mcmVlKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmNicyk7 CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqCit2bXdfYmluZGluZ19zdGF0ZV9saXN0KHN0cnVj dCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmNicyk7CitleHRlcm4gdm9pZCB2bXdfYmluZGluZ19z dGF0ZV9yZXNldChzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpjYnMpOworCisjZW5kaWYK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NtZGJ1Zi5jIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMKaW5kZXggMDRmYTg1Mi4uNWFlOGY5 MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmLmMKQEAgLTkxNiw5ICs5MTYs OCBAQCBzdGF0aWMgdm9pZCAqdm13X2NtZGJ1Zl9yZXNlcnZlX2N1cihzdHJ1Y3Qgdm13X2NtZGJ1 Zl9tYW4gKm1hbiwKIAogCWN1ciA9IG1hbi0+Y3VyOwogCWlmIChjdXIgJiYgKHNpemUgKyBtYW4t PmN1cl9wb3MgPiBjdXItPnNpemUgfHwKLQkgICAgKGN0eF9pZCAhPSBTVkdBM0RfSU5WQUxJRF9J RCAmJgotCSAgICAgKGN1ci0+Y2JfaGVhZGVyLT5mbGFncyAmIFNWR0FfQ0JfRkxBR19EWF9DT05U RVhUKSAmJgotCSAgICAgY3R4X2lkICE9IGN1ci0+Y2JfaGVhZGVyLT5keENvbnRleHQpKSkKKwkJ ICAgICgoY3VyLT5jYl9oZWFkZXItPmZsYWdzICYgU1ZHQV9DQl9GTEFHX0RYX0NPTlRFWFQpICYm CisJCSAgICAgY3R4X2lkICE9IGN1ci0+Y2JfaGVhZGVyLT5keENvbnRleHQpKSkKIAkJX192bXdf Y21kYnVmX2N1cl9mbHVzaChtYW4pOwogCiAJaWYgKCFtYW4tPmN1cikgewpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmX3Jlcy5jIGIvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfY21kYnVmX3Jlcy5jCmluZGV4IDIxZTliN2YuLjU5ZDk2NWYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NtZGJ1Zl9yZXMuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jbWRidWZfcmVzLmMKQEAgLTI2LDE1ICsy NiwxMCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgor I2luY2x1ZGUgInZtd2dmeF9yZXNvdXJjZV9wcml2LmgiCiAKICNkZWZpbmUgVk1XX0NNREJVRl9S RVNfTUFOX0hUX09SREVSIDEyCiAKLWVudW0gdm13X2NtZGJ1Zl9yZXNfc3RhdGUgewotCVZNV19D TURCVUZfUkVTX0NPTU1JVEVELAotCVZNV19DTURCVUZfUkVTX0FERCwKLQlWTVdfQ01EQlVGX1JF U19ERUwKLX07Ci0KIC8qKgogICogc3RydWN0IHZtd19jbWRidWZfcmVzIC0gQ29tbWFuZCBidWZm ZXIgbWFuYWdlZCByZXNvdXJjZSBlbnRyeS4KICAqCkBAIC0xMzIsOSArMTI3LDEyIEBAIHZvaWQg dm13X2NtZGJ1Zl9yZXNfY29tbWl0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiAKIAlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGxpc3QsIGhlYWQpIHsKIAkJbGlzdF9kZWwo JmVudHJ5LT5oZWFkKTsKKwkJaWYgKGVudHJ5LT5yZXMtPmZ1bmMtPmNvbW1pdF9ub3RpZnkpCisJ CQllbnRyeS0+cmVzLT5mdW5jLT5jb21taXRfbm90aWZ5KGVudHJ5LT5yZXMsCisJCQkJCQkJZW50 cnktPnN0YXRlKTsKIAkJc3dpdGNoIChlbnRyeS0+c3RhdGUpIHsKIAkJY2FzZSBWTVdfQ01EQlVG X1JFU19BREQ6Ci0JCQllbnRyeS0+c3RhdGUgPSBWTVdfQ01EQlVGX1JFU19DT01NSVRFRDsKKwkJ CWVudHJ5LT5zdGF0ZSA9IFZNV19DTURCVUZfUkVTX0NPTU1JVFRFRDsKIAkJCWxpc3RfYWRkX3Rh aWwoJmVudHJ5LT5oZWFkLCAmZW50cnktPm1hbi0+bGlzdCk7CiAJCQlicmVhazsKIAkJY2FzZSBW TVdfQ01EQlVGX1JFU19ERUw6CkBAIC0xNzUsNyArMTczLDcgQEAgdm9pZCB2bXdfY21kYnVmX3Jl c19yZXZlcnQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIAkJCQkJCSAmZW50cnktPmhhc2gpOwog CQkJbGlzdF9kZWwoJmVudHJ5LT5oZWFkKTsKIAkJCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5oZWFk LCAmZW50cnktPm1hbi0+bGlzdCk7Ci0JCQllbnRyeS0+c3RhdGUgPSBWTVdfQ01EQlVGX1JFU19D T01NSVRFRDsKKwkJCWVudHJ5LT5zdGF0ZSA9IFZNV19DTURCVUZfUkVTX0NPTU1JVFRFRDsKIAkJ CWJyZWFrOwogCQlkZWZhdWx0OgogCQkJQlVHKCk7CkBAIC0yMzEsNiArMjI5LDkgQEAgb3V0X2lu dmFsaWRfa2V5OgogICogQHJlc190eXBlOiBUaGUgcmVzb3VyY2UgdHlwZS4KICAqIEB1c2VyX2tl eTogVGhlIHVzZXItc3BhY2UgaWQgb2YgdGhlIHJlc291cmNlLgogICogQGxpc3Q6IFRoZSBzdGFn aW5nIGxpc3QuCisgKiBAcmVzX3A6IElmIHRoZSByZXNvdXJjZSBpcyBpbiBhbiBhbHJlYWR5IGNv bW1pdHRlZCBzdGF0ZSwgcG9pbnRzIHRvIHRoZQorICogc3RydWN0IHZtd19yZXNvdXJjZSBvbiBz dWNjZXNzZnVsIHJldHVybi4gVGhlIHBvaW50ZXIgd2lsbCBiZQorICogbm9uIHJlZi1jb3VudGVk LgogICoKICAqIFRoaXMgZnVuY3Rpb24gbG9va3MgdXAgdGhlIHN0cnVjdCB2bXdfY21kYnVmX3Jl cyBlbnRyeSBmcm9tIHRoZSBtYW5hZ2VyCiAgKiBoYXNoIHRhYmxlIGFuZCwgaWYgaXQgZXhpc3Rz LCByZW1vdmVzIGl0LiBEZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhZ2luZwpAQCAtMjQwLDcg KzI0MSw4IEBAIG91dF9pbnZhbGlkX2tleToKIGludCB2bXdfY21kYnVmX3Jlc19yZW1vdmUoc3Ry dWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbiwKIAkJCSAgZW51bSB2bXdfY21kYnVmX3Jl c190eXBlIHJlc190eXBlLAogCQkJICB1MzIgdXNlcl9rZXksCi0JCQkgIHN0cnVjdCBsaXN0X2hl YWQgKmxpc3QpCisJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkgIHN0cnVjdCB2bXdf cmVzb3VyY2UgKipyZXNfcCkKIHsKIAlzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXMgKmVudHJ5OwogCXN0 cnVjdCBkcm1faGFzaF9pdGVtICpoYXNoOwpAQCAtMjU2LDEyICsyNTgsMTQgQEAgaW50IHZtd19j bWRidWZfcmVzX3JlbW92ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAogCXN3 aXRjaCAoZW50cnktPnN0YXRlKSB7CiAJY2FzZSBWTVdfQ01EQlVGX1JFU19BREQ6CiAJCXZtd19j bWRidWZfcmVzX2ZyZWUobWFuLCBlbnRyeSk7CisJCSpyZXNfcCA9IE5VTEw7CiAJCWJyZWFrOwot CWNhc2UgVk1XX0NNREJVRl9SRVNfQ09NTUlURUQ6CisJY2FzZSBWTVdfQ01EQlVGX1JFU19DT01N SVRURUQ6CiAJCSh2b2lkKSBkcm1faHRfcmVtb3ZlX2l0ZW0oJm1hbi0+cmVzb3VyY2VzLCAmZW50 cnktPmhhc2gpOwogCQlsaXN0X2RlbCgmZW50cnktPmhlYWQpOwogCQllbnRyeS0+c3RhdGUgPSBW TVdfQ01EQlVGX1JFU19ERUw7CiAJCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5oZWFkLCBsaXN0KTsK KwkJKnJlc19wID0gZW50cnktPnJlczsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb250ZXh0LmMgYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb250ZXh0LmMKaW5kZXggMTVmOTU0NC4uYWJmZTY3 YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfY29udGV4dC5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2NvbnRleHQuYwpAQCAtMjcsMTkgKzI3 LDE4IEBACiAKICNpbmNsdWRlICJ2bXdnZnhfZHJ2LmgiCiAjaW5jbHVkZSAidm13Z2Z4X3Jlc291 cmNlX3ByaXYuaCIKKyNpbmNsdWRlICJ2bXdnZnhfYmluZGluZy5oIgogI2luY2x1ZGUgInR0bS90 dG1fcGxhY2VtZW50LmgiCiAKIHN0cnVjdCB2bXdfdXNlcl9jb250ZXh0IHsKIAlzdHJ1Y3QgdHRt X2Jhc2Vfb2JqZWN0IGJhc2U7CiAJc3RydWN0IHZtd19yZXNvdXJjZSByZXM7Ci0Jc3RydWN0IHZt d19jdHhfYmluZGluZ19zdGF0ZSBjYnM7CisJc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAq Y2JzOwogCXN0cnVjdCB2bXdfY21kYnVmX3Jlc19tYW5hZ2VyICptYW47CisJc3RydWN0IHZtd19y ZXNvdXJjZSAqY290YWJsZXNbU1ZHQV9DT1RBQkxFX0RYMTBfTUFYXTsKKwlzcGlubG9ja190IGNv dGFibGVfbG9jazsKIH07CiAKLQotCi10eXBlZGVmIGludCAoKnZtd19zY3J1Yl9mdW5jKShzdHJ1 Y3Qgdm13X2N0eF9iaW5kaW5mbyAqLCBib29sKTsKLQogc3RhdGljIHZvaWQgdm13X3VzZXJfY29u dGV4dF9mcmVlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7CiBzdGF0aWMgc3RydWN0IHZtd19y ZXNvdXJjZSAqCiB2bXdfdXNlcl9jb250ZXh0X2Jhc2VfdG9fcmVzKHN0cnVjdCB0dG1fYmFzZV9v YmplY3QgKmJhc2UpOwpAQCAtNTEsMTIgKzUwLDE0IEBAIHN0YXRpYyBpbnQgdm13X2diX2NvbnRl eHRfdW5iaW5kKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKIAkJCQkgYm9vbCByZWFkYmFjaywK IAkJCQkgc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgKnZhbF9idWYpOwogc3RhdGljIGludCB2 bXdfZ2JfY29udGV4dF9kZXN0cm95KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7Ci1zdGF0aWMg aW50IHZtd19jb250ZXh0X3NjcnViX3NoYWRlcihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmks IGJvb2wgcmViaW5kKTsKLXN0YXRpYyBpbnQgdm13X2NvbnRleHRfc2NydWJfcmVuZGVyX3Rhcmdl dChzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqYmksCi0JCQkJCSAgIGJvb2wgcmViaW5kKTsKLXN0 YXRpYyBpbnQgdm13X2NvbnRleHRfc2NydWJfdGV4dHVyZShzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5m byAqYmksIGJvb2wgcmViaW5kKTsKLXN0YXRpYyB2b2lkIHZtd19jb250ZXh0X2JpbmRpbmdfc3Rh dGVfc2NydWIoc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqY2JzKTsKLXN0YXRpYyB2b2lk IHZtd19jb250ZXh0X2JpbmRpbmdfc3RhdGVfa2lsbChzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0 YXRlICpjYnMpOworc3RhdGljIGludCB2bXdfZHhfY29udGV4dF9jcmVhdGUoc3RydWN0IHZtd19y ZXNvdXJjZSAqcmVzKTsKK3N0YXRpYyBpbnQgdm13X2R4X2NvbnRleHRfYmluZChzdHJ1Y3Qgdm13 X3Jlc291cmNlICpyZXMsCisJCQkgICAgICAgc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgKnZh bF9idWYpOworc3RhdGljIGludCB2bXdfZHhfY29udGV4dF91bmJpbmQoc3RydWN0IHZtd19yZXNv dXJjZSAqcmVzLAorCQkJCSBib29sIHJlYWRiYWNrLAorCQkJCSBzdHJ1Y3QgdHRtX3ZhbGlkYXRl X2J1ZmZlciAqdmFsX2J1Zik7CitzdGF0aWMgaW50IHZtd19keF9jb250ZXh0X2Rlc3Ryb3koc3Ry dWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKKwogc3RhdGljIHVpbnQ2NF90IHZtd191c2VyX2NvbnRl eHRfc2l6ZTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2bXdfdXNlcl9yZXNvdXJjZV9jb252IHVz ZXJfY29udGV4dF9jb252ID0gewpAQCAtOTMsMTUgKzk0LDM2IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3Qgdm13X3Jlc19mdW5jIHZtd19nYl9jb250ZXh0X2Z1bmMgPSB7CiAJLnVuYmluZCA9IHZtd19n Yl9jb250ZXh0X3VuYmluZAogfTsKIAotc3RhdGljIGNvbnN0IHZtd19zY3J1Yl9mdW5jIHZtd19z Y3J1Yl9mdW5jc1t2bXdfY3R4X2JpbmRpbmdfbWF4XSA9IHsKLQlbdm13X2N0eF9iaW5kaW5nX3No YWRlcl0gPSB2bXdfY29udGV4dF9zY3J1Yl9zaGFkZXIsCi0JW3Ztd19jdHhfYmluZGluZ19ydF0g PSB2bXdfY29udGV4dF9zY3J1Yl9yZW5kZXJfdGFyZ2V0LAotCVt2bXdfY3R4X2JpbmRpbmdfdGV4 XSA9IHZtd19jb250ZXh0X3NjcnViX3RleHR1cmUgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm13 X3Jlc19mdW5jIHZtd19keF9jb250ZXh0X2Z1bmMgPSB7CisJLnJlc190eXBlID0gdm13X3Jlc19k eF9jb250ZXh0LAorCS5uZWVkc19iYWNrdXAgPSB0cnVlLAorCS5tYXlfZXZpY3QgPSB0cnVlLAor CS50eXBlX25hbWUgPSAiZHggY29udGV4dHMiLAorCS5iYWNrdXBfcGxhY2VtZW50ID0gJnZtd19t b2JfcGxhY2VtZW50LAorCS5jcmVhdGUgPSB2bXdfZHhfY29udGV4dF9jcmVhdGUsCisJLmRlc3Ry b3kgPSB2bXdfZHhfY29udGV4dF9kZXN0cm95LAorCS5iaW5kID0gdm13X2R4X2NvbnRleHRfYmlu ZCwKKwkudW5iaW5kID0gdm13X2R4X2NvbnRleHRfdW5iaW5kCit9OwogCiAvKioKICAqIENvbnRl eHQgbWFuYWdlbWVudDoKICAqLwogCitzdGF0aWMgdm9pZCB2bXdfY29udGV4dF9jb3RhYmxlc191 bnJlZihzdHJ1Y3Qgdm13X3VzZXJfY29udGV4dCAqdWN0eCkKK3sKKwlzdHJ1Y3Qgdm13X3Jlc291 cmNlICpyZXM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU1ZHQV9DT1RBQkxFX0RYMTBf TUFYOyArK2kpIHsKKwkJc3Bpbl9sb2NrKCZ1Y3R4LT5jb3RhYmxlX2xvY2spOworCQlyZXMgPSB1 Y3R4LT5jb3RhYmxlc1tpXTsKKwkJdWN0eC0+Y290YWJsZXNbaV0gPSBOVUxMOworCQlzcGluX3Vu bG9jaygmdWN0eC0+Y290YWJsZV9sb2NrKTsKKwkJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZy ZXMpOworCX0KK30KKwogc3RhdGljIHZvaWQgdm13X2h3X2NvbnRleHRfZGVzdHJveShzdHJ1Y3Qg dm13X3Jlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHZtd191c2VyX2NvbnRleHQgKnVjdHggPQpA QCAtMTEzLDE3ICsxMzUsMTkgQEAgc3RhdGljIHZvaWQgdm13X2h3X2NvbnRleHRfZGVzdHJveShz dHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCiAJfSAqY21kOwogCiAKLQlpZiAocmVzLT5mdW5jLT5k ZXN0cm95ID09IHZtd19nYl9jb250ZXh0X2Rlc3Ryb3kpIHsKKwlpZiAocmVzLT5mdW5jLT5kZXN0 cm95ID09IHZtd19nYl9jb250ZXh0X2Rlc3Ryb3kgfHwKKwkgICAgcmVzLT5mdW5jLT5kZXN0cm95 ID09IHZtd19keF9jb250ZXh0X2Rlc3Ryb3kpIHsKIAkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmNt ZGJ1Zl9tdXRleCk7CiAJCXZtd19jbWRidWZfcmVzX21hbl9kZXN0cm95KHVjdHgtPm1hbik7CiAJ CW11dGV4X2xvY2soJmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsKLQkJKHZvaWQpIHZtd19jb250 ZXh0X2JpbmRpbmdfc3RhdGVfa2lsbCgmdWN0eC0+Y2JzKTsKLQkJKHZvaWQpIHZtd19nYl9jb250 ZXh0X2Rlc3Ryb3kocmVzKTsKKwkJdm13X2JpbmRpbmdfc3RhdGVfa2lsbCh1Y3R4LT5jYnMpOwor CQkodm9pZCkgcmVzLT5mdW5jLT5kZXN0cm95KHJlcyk7CiAJCW11dGV4X3VubG9jaygmZGV2X3By aXYtPmJpbmRpbmdfbXV0ZXgpOwogCQlpZiAoZGV2X3ByaXYtPnBpbm5lZF9ibyAhPSBOVUxMICYm CiAJCSAgICAhZGV2X3ByaXYtPnF1ZXJ5X2NpZF92YWxpZCkKIAkJCV9fdm13X2V4ZWNidWZfcmVs ZWFzZV9waW5uZWRfYm8oZGV2X3ByaXYsIE5VTEwpOwogCQltdXRleF91bmxvY2soJmRldl9wcml2 LT5jbWRidWZfbXV0ZXgpOworCQl2bXdfY29udGV4dF9jb3RhYmxlc191bnJlZih1Y3R4KTsKIAkJ cmV0dXJuOwogCX0KIApAQCAtMTQ0LDE2ICsxNjgsMjAgQEAgc3RhdGljIHZvaWQgdm13X2h3X2Nv bnRleHRfZGVzdHJveShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCiB9CiAKIHN0YXRpYyBpbnQg dm13X2diX2NvbnRleHRfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAg ICAgIGJvb2wgZHgsCiAJCQkgICAgICAgc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAotCQkJICAg ICAgIHZvaWQgKCpyZXNfZnJlZSkgKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykpCisJCQkgICAg ICAgdm9pZCAoKnJlc19mcmVlKShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpKQogewotCWludCBy ZXQ7CisJaW50IHJldCwgaTsKIAlzdHJ1Y3Qgdm13X3VzZXJfY29udGV4dCAqdWN0eCA9CiAJCWNv bnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfdXNlcl9jb250ZXh0LCByZXMpOwogCisJcmVzLT5i YWNrdXBfc2l6ZSA9IChkeCA/IHNpemVvZihTVkdBRFhDb250ZXh0TW9iRm9ybWF0KSA6CisJCQkg ICAgU1ZHQTNEX0NPTlRFWFRfREFUQV9TSVpFKTsKIAlyZXQgPSB2bXdfcmVzb3VyY2VfaW5pdChk ZXZfcHJpdiwgcmVzLCB0cnVlLAotCQkJCXJlc19mcmVlLCAmdm13X2diX2NvbnRleHRfZnVuYyk7 Ci0JcmVzLT5iYWNrdXBfc2l6ZSA9IFNWR0EzRF9DT05URVhUX0RBVEFfU0laRTsKKwkJCQlyZXNf ZnJlZSwKKwkJCQlkeCA/ICZ2bXdfZHhfY29udGV4dF9mdW5jIDoKKwkJCQkmdm13X2diX2NvbnRl eHRfZnVuYyk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfZXJyOwogCkBA IC0xNjYsMTIgKzE5NCwzMiBAQCBzdGF0aWMgaW50IHZtd19nYl9jb250ZXh0X2luaXQoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJfQogCX0KIAotCW1lbXNldCgmdWN0eC0+Y2JzLCAw LCBzaXplb2YodWN0eC0+Y2JzKSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnVjdHgtPmNicy5saXN0KTsK Kwl1Y3R4LT5jYnMgPSB2bXdfYmluZGluZ19zdGF0ZV9hbGxvYyhkZXZfcHJpdik7CisJaWYgKElT X0VSUih1Y3R4LT5jYnMpKSB7CisJCXJldCA9IFBUUl9FUlIodWN0eC0+Y2JzKTsKKwkJZ290byBv dXRfZXJyOworCX0KKworCXNwaW5fbG9ja19pbml0KCZ1Y3R4LT5jb3RhYmxlX2xvY2spOworCisJ aWYgKGR4KSB7CisJCWZvciAoaSA9IDA7IGkgPCBTVkdBX0NPVEFCTEVfRFgxMF9NQVg7ICsraSkg eworCQkJdWN0eC0+Y290YWJsZXNbaV0gPSB2bXdfY290YWJsZV9hbGxvYyhkZXZfcHJpdiwKKwkJ CQkJCQkgICAgICAmdWN0eC0+cmVzLCBpKTsKKwkJCWlmICh1bmxpa2VseSh1Y3R4LT5jb3RhYmxl c1tpXSA9PSBOVUxMKSkgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBvdXRfY290YWJs ZXM7CisJCQl9CisJCX0KKwl9CisKKwogCiAJdm13X3Jlc291cmNlX2FjdGl2YXRlKHJlcywgdm13 X2h3X2NvbnRleHRfZGVzdHJveSk7CiAJcmV0dXJuIDA7CiAKK291dF9jb3RhYmxlczoKKwl2bXdf Y29udGV4dF9jb3RhYmxlc191bnJlZih1Y3R4KTsKIG91dF9lcnI6CiAJaWYgKHJlc19mcmVlKQog CQlyZXNfZnJlZShyZXMpOwpAQCAtMTgyLDcgKzIzMCw4IEBAIG91dF9lcnI6CiAKIHN0YXRpYyBp bnQgdm13X2NvbnRleHRfaW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAg IHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKLQkJCSAgICB2b2lkICgqcmVzX2ZyZWUpIChzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXMpKQorCQkJICAgIHZvaWQgKCpyZXNfZnJlZSkoc3RydWN0IHZt d19yZXNvdXJjZSAqcmVzKSwKKwkJCSAgICBib29sIGR4KQogewogCWludCByZXQ7CiAKQEAgLTE5 Miw3ICsyNDEsNyBAQCBzdGF0aWMgaW50IHZtd19jb250ZXh0X2luaXQoc3RydWN0IHZtd19wcml2 YXRlICpkZXZfcHJpdiwKIAl9ICpjbWQ7CiAKIAlpZiAoZGV2X3ByaXYtPmhhc19tb2IpCi0JCXJl dHVybiB2bXdfZ2JfY29udGV4dF9pbml0KGRldl9wcml2LCByZXMsIHJlc19mcmVlKTsKKwkJcmV0 dXJuIHZtd19nYl9jb250ZXh0X2luaXQoZGV2X3ByaXYsIGR4LCByZXMsIHJlc19mcmVlKTsKIAog CXJldCA9IHZtd19yZXNvdXJjZV9pbml0KGRldl9wcml2LCByZXMsIGZhbHNlLAogCQkJCXJlc19m cmVlLCAmdm13X2xlZ2FjeV9jb250ZXh0X2Z1bmMpOwpAQCAtMjMyLDE5ICsyODEsMTAgQEAgb3V0 X2Vhcmx5OgogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCB2bXdfcmVzb3VyY2UgKnZtd19jb250 ZXh0X2FsbG9jKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCi17Ci0Jc3RydWN0IHZtd19y ZXNvdXJjZSAqcmVzID0ga21hbGxvYyhzaXplb2YoKnJlcyksIEdGUF9LRVJORUwpOwotCWludCBy ZXQ7Ci0KLQlpZiAodW5saWtlbHkocmVzID09IE5VTEwpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJl dCA9IHZtd19jb250ZXh0X2luaXQoZGV2X3ByaXYsIHJlcywgTlVMTCk7Ci0KLQlyZXR1cm4gKHJl dCA9PSAwKSA/IHJlcyA6IE5VTEw7Ci19CiAKKy8qCisgKiBHQiBjb250ZXh0LgorICovCiAKIHN0 YXRpYyBpbnQgdm13X2diX2NvbnRleHRfY3JlYXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykK IHsKQEAgLTMwOSw3ICszNDksNiBAQCBzdGF0aWMgaW50IHZtd19nYl9jb250ZXh0X2JpbmQoc3Ry dWN0IHZtd19yZXNvdXJjZSAqcmVzLAogCQkJICAiYmluZGluZy5cbiIpOwogCQlyZXR1cm4gLUVO T01FTTsKIAl9Ci0KIAljbWQtPmhlYWRlci5pZCA9IFNWR0FfM0RfQ01EX0JJTkRfR0JfQ09OVEVY VDsKIAljbWQtPmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSk7CiAJY21kLT5ib2R5LmNp ZCA9IHJlcy0+aWQ7CkBAIC0zNDYsNyArMzg1LDcgQEAgc3RhdGljIGludCB2bXdfZ2JfY29udGV4 dF91bmJpbmQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAogCUJVR19PTihiby0+bWVtLm1lbV90 eXBlICE9IFZNV19QTF9NT0IpOwogCiAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0 ZXgpOwotCXZtd19jb250ZXh0X2JpbmRpbmdfc3RhdGVfc2NydWIoJnVjdHgtPmNicyk7CisJdm13 X2JpbmRpbmdfc3RhdGVfc2NydWIodWN0eC0+Y2JzKTsKIAogCXN1Ym1pdF9zaXplID0gc2l6ZW9m KCpjbWQyKSArIChyZWFkYmFjayA/IHNpemVvZigqY21kMSkgOiAwKTsKIApAQCAtNDE5LDYgKzQ1 OCwyMjEgQEAgc3RhdGljIGludCB2bXdfZ2JfY29udGV4dF9kZXN0cm95KHN0cnVjdCB2bXdfcmVz b3VyY2UgKnJlcykKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIERYIGNvbnRleHQuCisgKi8KKwor c3RhdGljIGludCB2bXdfZHhfY29udGV4dF9jcmVhdGUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVz KQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXMtPmRldl9wcml2OworCWlu dCByZXQ7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21k RFhEZWZpbmVDb250ZXh0IGJvZHk7CisJfSAqY21kOworCisJaWYgKGxpa2VseShyZXMtPmlkICE9 IC0xKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSB2bXdfcmVzb3VyY2VfYWxsb2NfaWQocmVzKTsK KwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9j YXRlIGEgY29udGV4dCBpZC5cbiIpOworCQlnb3RvIG91dF9ub19pZDsKKwl9CisKKwlpZiAodW5s aWtlbHkocmVzLT5pZCA+PSBWTVdHRlhfTlVNX0RYQ09OVEVYVCkpIHsKKwkJcmV0ID0gLUVCVVNZ OworCQlnb3RvIG91dF9ub19maWZvOworCX0KKworCWNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2 X3ByaXYsIHNpemVvZigqY21kKSk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlE Uk1fRVJST1IoIkZhaWxlZCByZXNlcnZpbmcgRklGTyBzcGFjZSBmb3IgY29udGV4dCAiCisJCQkg ICJjcmVhdGlvbi5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ub19maWZvOwor CX0KKworCWNtZC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfRFhfREVGSU5FX0NPTlRFWFQ7CisJ Y21kLT5oZWFkZXIuc2l6ZSA9IHNpemVvZihjbWQtPmJvZHkpOworCWNtZC0+Ym9keS5jaWQgPSBy ZXMtPmlkOworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKwl2bXdf Zmlmb19yZXNvdXJjZV9pbmMoZGV2X3ByaXYpOworCisJcmV0dXJuIDA7CisKK291dF9ub19maWZv OgorCXZtd19yZXNvdXJjZV9yZWxlYXNlX2lkKHJlcyk7CitvdXRfbm9faWQ6CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCB2bXdfZHhfY29udGV4dF9iaW5kKHN0cnVjdCB2bXdfcmVzb3Vy Y2UgKnJlcywKKwkJCSAgICAgICBzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmFsX2J1ZikK K3sKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKwlzdHJ1 Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREWEJpbmRDb250ZXh0 IGJvZHk7CisJfSAqY21kOworCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSB2YWxfYnVm LT5ibzsKKworCUJVR19PTihiby0+bWVtLm1lbV90eXBlICE9IFZNV19QTF9NT0IpOworCisJY21k ID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAodW5saWtl bHkoY21kID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHJlc2VydmluZyBGSUZPIHNw YWNlIGZvciBjb250ZXh0ICIKKwkJCSAgImJpbmRpbmcuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfQorCisJY21kLT5oZWFkZXIuaWQgPSBTVkdBXzNEX0NNRF9EWF9CSU5EX0NPTlRFWFQ7CisJ Y21kLT5oZWFkZXIuc2l6ZSA9IHNpemVvZihjbWQtPmJvZHkpOworCWNtZC0+Ym9keS5jaWQgPSBy ZXMtPmlkOworCWNtZC0+Ym9keS5tb2JpZCA9IGJvLT5tZW0uc3RhcnQ7CisJY21kLT5ib2R5LnZh bGlkQ29udGVudHMgPSByZXMtPmJhY2t1cF9kaXJ0eTsKKwlyZXMtPmJhY2t1cF9kaXJ0eSA9IGZh bHNlOworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKworCisJcmV0 dXJuIDA7Cit9CisKKy8qKgorICogdm13X2R4X2NvbnRleHRfc2NydWJfY290YWJsZXMgLSBTY3J1 YiBhbGwgYmluZGluZ3MgYW5kCisgKiBjb3RhYmxlcyBmcm9tIGEgY29udGV4dAorICoKKyAqIEBj dHg6IFBvaW50ZXIgdG8gdGhlIGNvbnRleHQgcmVzb3VyY2UKKyAqIEByZWFkYmFjazogV2hldGhl ciB0byBzYXZlIHRoZSBvdGFibGUgY29udGVudHMgb24gc2NydWJiaW5nLgorICoKKyAqIENPdGFi bGVzIG11c3QgYmUgdW5ib3VuZCBiZWZvcmUgdGhlaXIgY29udGV4dCwgYnV0IHVuYmluZGluZyBy ZXF1aXJlcworICogdGhlIGJhY2t1cCBidWZmZXIgYmVpbmcgcmVzZXJ2ZWQsIHdoZXJlYXMgc2Ny dWJiaW5nIGRvZXMgbm90LgorICogVGhpcyBmdW5jdGlvbiBzY3J1YnMgYWxsIGNvdGFibGVzIG9m IGEgY29udGV4dCwgcG90ZW50aWFsbHkgcmVhZGluZyBiYWNrCisgKiB0aGUgY29udGVudHMgaW50 byB0aGVpciBiYWNrdXAgYnVmZmVycy4gSG93ZXZlciwgc2NydWJiaW5nIGNvdGFibGVzCisgKiBh bHNvIG1ha2VzIHRoZSBkZXZpY2UgY29udGV4dCBpbnZhbGlkLCBzbyBzY3J1YiBhbGwgYmluZGlu Z3MgZmlyc3Qgc28KKyAqIHRoYXQgZG9lc24ndCBoYXZlIHRvIGJlIGRvbmUgbGF0ZXIgd2l0aCBh biBpbnZhbGlkIGNvbnRleHQuCisgKi8KK3ZvaWQgdm13X2R4X2NvbnRleHRfc2NydWJfY290YWJs ZXMoc3RydWN0IHZtd19yZXNvdXJjZSAqY3R4LAorCQkJCSAgIGJvb2wgcmVhZGJhY2spCit7CisJ c3RydWN0IHZtd191c2VyX2NvbnRleHQgKnVjdHggPQorCQljb250YWluZXJfb2YoY3R4LCBzdHJ1 Y3Qgdm13X3VzZXJfY29udGV4dCwgcmVzKTsKKwlpbnQgaTsKKworCXZtd19iaW5kaW5nX3N0YXRl X3NjcnViKHVjdHgtPmNicyk7CisJZm9yIChpID0gMDsgaSA8IFNWR0FfQ09UQUJMRV9EWDEwX01B WDsgKytpKSB7CisJCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKKworCQkvKiBBdm9pZCByYWNp bmcgd2l0aCBvbmdvaW5nIGNvdGFibGUgZGVzdHJ1Y3Rpb24uICovCisJCXNwaW5fbG9jaygmdWN0 eC0+Y290YWJsZV9sb2NrKTsKKwkJcmVzID0gdWN0eC0+Y290YWJsZXNbdm13X2NvdGFibGVfc2Ny dWJfb3JkZXJbaV1dOworCQlpZiAocmVzKQorCQkJcmVzID0gdm13X3Jlc291cmNlX3JlZmVyZW5j ZV91bmxlc3NfZG9vbWVkKHJlcyk7CisJCXNwaW5fdW5sb2NrKCZ1Y3R4LT5jb3RhYmxlX2xvY2sp OworCQlpZiAoIXJlcykKKwkJCWNvbnRpbnVlOworCisJCVdBUk5fT04odm13X2NvdGFibGVfc2Ny dWIocmVzLCByZWFkYmFjaykpOworCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CisJ fQorfQorCitzdGF0aWMgaW50IHZtd19keF9jb250ZXh0X3VuYmluZChzdHJ1Y3Qgdm13X3Jlc291 cmNlICpyZXMsCisJCQkJIGJvb2wgcmVhZGJhY2ssCisJCQkJIHN0cnVjdCB0dG1fdmFsaWRhdGVf YnVmZmVyICp2YWxfYnVmKQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXMt PmRldl9wcml2OworCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSB2YWxfYnVmLT5ibzsK KwlzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqZmVuY2U7CisKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRI ZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREWFJlYWRiYWNrQ29udGV4dCBib2R5OworCX0gKmNt ZDE7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRFhC aW5kQ29udGV4dCBib2R5OworCX0gKmNtZDI7CisJdWludDMyX3Qgc3VibWl0X3NpemU7CisJdWlu dDhfdCAqY21kOworCisKKwlCVUdfT04oYm8tPm1lbS5tZW1fdHlwZSAhPSBWTVdfUExfTU9CKTsK KworCW11dGV4X2xvY2soJmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsKKwl2bXdfZHhfY29udGV4 dF9zY3J1Yl9jb3RhYmxlcyhyZXMsIHJlYWRiYWNrKTsKKworCXN1Ym1pdF9zaXplID0gc2l6ZW9m KCpjbWQyKSArIChyZWFkYmFjayA/IHNpemVvZigqY21kMSkgOiAwKTsKKworCWNtZCA9IHZtd19m aWZvX3Jlc2VydmUoZGV2X3ByaXYsIHN1Ym1pdF9zaXplKTsKKwlpZiAodW5saWtlbHkoY21kID09 IE5VTEwpKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHJlc2VydmluZyBGSUZPIHNwYWNlIGZvciBj b250ZXh0ICIKKwkJCSAgInVuYmluZGluZy5cbiIpOworCQltdXRleF91bmxvY2soJmRldl9wcml2 LT5iaW5kaW5nX211dGV4KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY21kMiA9ICh2b2lk ICopIGNtZDsKKwlpZiAocmVhZGJhY2spIHsKKwkJY21kMSA9ICh2b2lkICopIGNtZDsKKwkJY21k MS0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfRFhfUkVBREJBQ0tfQ09OVEVYVDsKKwkJY21kMS0+ aGVhZGVyLnNpemUgPSBzaXplb2YoY21kMS0+Ym9keSk7CisJCWNtZDEtPmJvZHkuY2lkID0gcmVz LT5pZDsKKwkJY21kMiA9ICh2b2lkICopICgmY21kMVsxXSk7CisJfQorCWNtZDItPmhlYWRlci5p ZCA9IFNWR0FfM0RfQ01EX0RYX0JJTkRfQ09OVEVYVDsKKwljbWQyLT5oZWFkZXIuc2l6ZSA9IHNp emVvZihjbWQyLT5ib2R5KTsKKwljbWQyLT5ib2R5LmNpZCA9IHJlcy0+aWQ7CisJY21kMi0+Ym9k eS5tb2JpZCA9IFNWR0EzRF9JTlZBTElEX0lEOworCisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2 LCBzdWJtaXRfc2l6ZSk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7 CisKKwkvKgorCSAqIENyZWF0ZSBhIGZlbmNlIG9iamVjdCBhbmQgZmVuY2UgdGhlIGJhY2t1cCBi dWZmZXIuCisJICovCisKKwkodm9pZCkgdm13X2V4ZWNidWZfZmVuY2VfY29tbWFuZHMoTlVMTCwg ZGV2X3ByaXYsCisJCQkJCSAgJmZlbmNlLCBOVUxMKTsKKworCXZtd19mZW5jZV9zaW5nbGVfYm8o Ym8sIGZlbmNlKTsKKworCWlmIChsaWtlbHkoZmVuY2UgIT0gTlVMTCkpCisJCXZtd19mZW5jZV9v YmpfdW5yZWZlcmVuY2UoJmZlbmNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZt d19keF9jb250ZXh0X2Rlc3Ryb3koc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXMtPmRldl9wcml2OworCXN0cnVjdCB7CisJCVNW R0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZERYRGVzdHJveUNvbnRleHQgYm9keTsK Kwl9ICpjbWQ7CisKKwlpZiAobGlrZWx5KHJlcy0+aWQgPT0gLTEpKQorCQlyZXR1cm4gMDsKKwor CWNtZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2X3ByaXYsIHNpemVvZigqY21kKSk7CisJaWYgKHVu bGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCByZXNlcnZpbmcgRklG TyBzcGFjZSBmb3IgY29udGV4dCAiCisJCQkgICJkZXN0cnVjdGlvbi5cbiIpOworCQlyZXR1cm4g LUVOT01FTTsKKwl9CisKKwljbWQtPmhlYWRlci5pZCA9IFNWR0FfM0RfQ01EX0RYX0RFU1RST1lf Q09OVEVYVDsKKwljbWQtPmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSk7CisJY21kLT5i b2R5LmNpZCA9IHJlcy0+aWQ7CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNt ZCkpOworCWlmIChkZXZfcHJpdi0+cXVlcnlfY2lkID09IHJlcy0+aWQpCisJCWRldl9wcml2LT5x dWVyeV9jaWRfdmFsaWQgPSBmYWxzZTsKKwl2bXdfcmVzb3VyY2VfcmVsZWFzZV9pZChyZXMpOwor CXZtd19maWZvX3Jlc291cmNlX2RlYyhkZXZfcHJpdik7CisKKwlyZXR1cm4gMDsKK30KKwogLyoq CiAgKiBVc2VyLXNwYWNlIGNvbnRleHQgbWFuYWdlbWVudDoKICAqLwpAQCAtNDM1LDYgKzY4OSw4 IEBAIHN0YXRpYyB2b2lkIHZtd191c2VyX2NvbnRleHRfZnJlZShzdHJ1Y3Qgdm13X3Jlc291cmNl ICpyZXMpCiAJICAgIGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2bXdfdXNlcl9jb250ZXh0LCBy ZXMpOwogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXMtPmRldl9wcml2OwogCisJ aWYgKGN0eC0+Y2JzKQorCQl2bXdfYmluZGluZ19zdGF0ZV9mcmVlKGN0eC0+Y2JzKTsKIAl0dG1f YmFzZV9vYmplY3Rfa2ZyZWUoY3R4LCBiYXNlKTsKIAl0dG1fbWVtX2dsb2JhbF9mcmVlKHZtd19t ZW1fZ2xvYihkZXZfcHJpdiksCiAJCQkgICAgdm13X3VzZXJfY29udGV4dF9zaXplKTsKQEAgLTQ2 NSw4ICs3MjEsOCBAQCBpbnQgdm13X2NvbnRleHRfZGVzdHJveV9pb2N0bChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXJldHVybiB0dG1fcmVmX29iamVjdF9iYXNlX3VucmVm KHRmaWxlLCBhcmctPmNpZCwgVFRNX1JFRl9VU0FHRSk7CiB9CiAKLWludCB2bXdfY29udGV4dF9k ZWZpbmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAgICAg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitzdGF0aWMgaW50IHZtd19jb250ZXh0X2RlZmlu ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJICAgICAgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYsIGJvb2wgZHgpCiB7CiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiA9IHZtd19wcml2KGRldik7CiAJc3RydWN0IHZtd191c2VyX2NvbnRleHQgKmN0eDsKQEAg LTQ3Niw2ICs3MzIsMTAgQEAgaW50IHZtd19jb250ZXh0X2RlZmluZV9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRmaWxl ID0gdm13X2Zwcml2KGZpbGVfcHJpdiktPnRmaWxlOwogCWludCByZXQ7CiAKKwlpZiAoIWRldl9w cml2LT5oYXNfZHggJiYgZHgpIHsKKwkJRFJNX0VSUk9SKCJEWCBjb250ZXh0cyBub3Qgc3VwcG9y dGVkIGJ5IGRldmljZS5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKgogCSAqIEFw cHJveGltYXRlIGlkciBtZW1vcnkgdXNhZ2Ugd2l0aCAxMjggYnl0ZXMuIEl0IHdpbGwgYmUgbGlt aXRlZApAQCAtNTE2LDcgKzc3Niw3IEBAIGludCB2bXdfY29udGV4dF9kZWZpbmVfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkgKiBGcm9tIGhlcmUgb24sIHRoZSBk ZXN0cnVjdG9yIHRha2VzIG92ZXIgcmVzb3VyY2UgZnJlZWluZy4KIAkgKi8KIAotCXJldCA9IHZt d19jb250ZXh0X2luaXQoZGV2X3ByaXYsIHJlcywgdm13X3VzZXJfY29udGV4dF9mcmVlKTsKKwly ZXQgPSB2bXdfY29udGV4dF9pbml0KGRldl9wcml2LCByZXMsIHZtd191c2VyX2NvbnRleHRfZnJl ZSwgZHgpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0X3VubG9jazsKIApA QCAtNTM1LDM4NyArNzk1LDc0IEBAIG91dF9lcnI6CiBvdXRfdW5sb2NrOgogCXR0bV9yZWFkX3Vu bG9jaygmZGV2X3ByaXYtPnJlc2VydmF0aW9uX3NlbSk7CiAJcmV0dXJuIHJldDsKLQotfQotCi0v KioKLSAqIHZtd19jb250ZXh0X3NjcnViX3NoYWRlciAtIHNjcnViIGEgc2hhZGVyIGJpbmRpbmcg ZnJvbSBhIGNvbnRleHQuCi0gKgotICogQGJpOiBzaW5nbGUgYmluZGluZyBpbmZvcm1hdGlvbi4K LSAqIEByZWJpbmQ6IFdoZXRoZXIgdG8gaXNzdWUgYSBiaW5kIGluc3RlYWQgb2Ygc2NydWIgY29t bWFuZC4KLSAqLwotc3RhdGljIGludCB2bXdfY29udGV4dF9zY3J1Yl9zaGFkZXIoc3RydWN0IHZt d19jdHhfYmluZGluZm8gKmJpLCBib29sIHJlYmluZCkKLXsKLQlzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2ID0gYmktPmN0eC0+ZGV2X3ByaXY7Ci0Jc3RydWN0IHsKLQkJU1ZHQTNkQ21kSGVh ZGVyIGhlYWRlcjsKLQkJU1ZHQTNkQ21kU2V0U2hhZGVyIGJvZHk7Ci0JfSAqY21kOwotCi0JY21k ID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKLQlpZiAodW5saWtl bHkoY21kID09IE5VTEwpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHJlc2VydmluZyBGSUZPIHNw YWNlIGZvciBzaGFkZXIgIgotCQkJICAidW5iaW5kaW5nLlxuIik7Ci0JCXJldHVybiAtRU5PTUVN OwotCX0KLQotCWNtZC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfU0VUX1NIQURFUjsKLQljbWQt PmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSk7Ci0JY21kLT5ib2R5LmNpZCA9IGJpLT5j dHgtPmlkOwotCWNtZC0+Ym9keS50eXBlID0gYmktPmkxLnNoYWRlcl90eXBlOwotCWNtZC0+Ym9k eS5zaGlkID0gKChyZWJpbmQpID8gYmktPnJlcy0+aWQgOiBTVkdBM0RfSU5WQUxJRF9JRCk7Ci0J dm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLS8qKgotICogdm13X2NvbnRleHRfc2NydWJfcmVuZGVyX3RhcmdldCAtIHNjcnViIGEgcmVu ZGVyIHRhcmdldCBiaW5kaW5nCi0gKiBmcm9tIGEgY29udGV4dC4KLSAqCi0gKiBAYmk6IHNpbmds ZSBiaW5kaW5nIGluZm9ybWF0aW9uLgotICogQHJlYmluZDogV2hldGhlciB0byBpc3N1ZSBhIGJp bmQgaW5zdGVhZCBvZiBzY3J1YiBjb21tYW5kLgotICovCi1zdGF0aWMgaW50IHZtd19jb250ZXh0 X3NjcnViX3JlbmRlcl90YXJnZXQoc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJpLAotCQkJCQkg ICBib29sIHJlYmluZCkKLXsKLQlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gYmktPmN0 eC0+ZGV2X3ByaXY7Ci0Jc3RydWN0IHsKLQkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKLQkJU1ZH QTNkQ21kU2V0UmVuZGVyVGFyZ2V0IGJvZHk7Ci0JfSAqY21kOwotCi0JY21kID0gdm13X2ZpZm9f cmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKLQlpZiAodW5saWtlbHkoY21kID09IE5V TEwpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHJlc2VydmluZyBGSUZPIHNwYWNlIGZvciByZW5k ZXIgdGFyZ2V0ICIKLQkJCSAgInVuYmluZGluZy5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9 Ci0KLQljbWQtPmhlYWRlci5pZCA9IFNWR0FfM0RfQ01EX1NFVFJFTkRFUlRBUkdFVDsKLQljbWQt PmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSk7Ci0JY21kLT5ib2R5LmNpZCA9IGJpLT5j dHgtPmlkOwotCWNtZC0+Ym9keS50eXBlID0gYmktPmkxLnJ0X3R5cGU7Ci0JY21kLT5ib2R5LnRh cmdldC5zaWQgPSAoKHJlYmluZCkgPyBiaS0+cmVzLT5pZCA6IFNWR0EzRF9JTlZBTElEX0lEKTsK LQljbWQtPmJvZHkudGFyZ2V0LmZhY2UgPSAwOwotCWNtZC0+Ym9keS50YXJnZXQubWlwbWFwID0g MDsKLQl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNpemVvZigqY21kKSk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotLyoqCi0gKiB2bXdfY29udGV4dF9zY3J1Yl90ZXh0dXJlIC0gc2NydWIgYSB0ZXh0 dXJlIGJpbmRpbmcgZnJvbSBhIGNvbnRleHQuCi0gKgotICogQGJpOiBzaW5nbGUgYmluZGluZyBp bmZvcm1hdGlvbi4KLSAqIEByZWJpbmQ6IFdoZXRoZXIgdG8gaXNzdWUgYSBiaW5kIGluc3RlYWQg b2Ygc2NydWIgY29tbWFuZC4KLSAqCi0gKiBUT0RPOiBQb3NzaWJseSBjb21wbGVtZW50IHRoaXMg ZnVuY3Rpb24gd2l0aCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMKLSAqIGEgbGlzdCBvZiB0ZXh0dXJl IGJpbmRpbmdzIGFuZCBjb21iaW5lcyB0aGVtIHRvIGEgc2luZ2xlIGNvbW1hbmQuCi0gKi8KLXN0 YXRpYyBpbnQgdm13X2NvbnRleHRfc2NydWJfdGV4dHVyZShzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5m byAqYmksCi0JCQkJICAgICBib29sIHJlYmluZCkKLXsKLQlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2ID0gYmktPmN0eC0+ZGV2X3ByaXY7Ci0Jc3RydWN0IHsKLQkJU1ZHQTNkQ21kSGVhZGVy IGhlYWRlcjsKLQkJc3RydWN0IHsKLQkJCVNWR0EzZENtZFNldFRleHR1cmVTdGF0ZSBjOwotCQkJ U1ZHQTNkVGV4dHVyZVN0YXRlIHMxOwotCQl9IGJvZHk7Ci0JfSAqY21kOwotCi0JY21kID0gdm13 X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKLQlpZiAodW5saWtlbHkoY21k ID09IE5VTEwpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHJlc2VydmluZyBGSUZPIHNwYWNlIGZv ciB0ZXh0dXJlICIKLQkJCSAgInVuYmluZGluZy5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9 Ci0KLQotCWNtZC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfU0VUVEVYVFVSRVNUQVRFOwotCWNt ZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kLT5ib2R5KTsKLQljbWQtPmJvZHkuYy5jaWQgPSBi aS0+Y3R4LT5pZDsKLQljbWQtPmJvZHkuczEuc3RhZ2UgPSBiaS0+aTEudGV4dHVyZV9zdGFnZTsK LQljbWQtPmJvZHkuczEubmFtZSA9IFNWR0EzRF9UU19CSU5EX1RFWFRVUkU7Ci0JY21kLT5ib2R5 LnMxLnZhbHVlID0gKChyZWJpbmQpID8gYmktPnJlcy0+aWQgOiBTVkdBM0RfSU5WQUxJRF9JRCk7 Ci0Jdm13X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOwotCi0JcmV0dXJuIDA7 CiB9CiAKLS8qKgotICogdm13X2NvbnRleHRfYmluZGluZ19kcm9wOiBTdG9wIHRyYWNraW5nIGEg Y29udGV4dCBiaW5kaW5nCi0gKgotICogQGNiOiBQb2ludGVyIHRvIGJpbmRpbmcgdHJhY2tlciBz dG9yYWdlLgotICoKLSAqIFN0b3BzIHRyYWNraW5nIGEgY29udGV4dCBiaW5kaW5nLCBhbmQgcmUt aW5pdGlhbGl6ZXMgaXRzIHN0b3JhZ2UuCi0gKiBUeXBpY2FsbHkgdXNlZCB3aGVuIHRoZSBjb250 ZXh0IGJpbmRpbmcgaXMgcmVwbGFjZWQgd2l0aCBhIGJpbmRpbmcgdG8KLSAqIGFub3RoZXIgKG9y IHRoZSBzYW1lLCBmb3IgdGhhdCBtYXR0ZXIpIHJlc291cmNlLgotICovCi1zdGF0aWMgdm9pZCB2 bXdfY29udGV4dF9iaW5kaW5nX2Ryb3Aoc3RydWN0IHZtd19jdHhfYmluZGluZyAqY2IpCitpbnQg dm13X2NvbnRleHRfZGVmaW5lX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsCisJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewotCWxpc3RfZGVsKCZj Yi0+Y3R4X2xpc3QpOwotCWlmICghbGlzdF9lbXB0eSgmY2ItPnJlc19saXN0KSkKLQkJbGlzdF9k ZWwoJmNiLT5yZXNfbGlzdCk7Ci0JY2ItPmJpLmN0eCA9IE5VTEw7CisJcmV0dXJuIHZtd19jb250 ZXh0X2RlZmluZShkZXYsIGRhdGEsIGZpbGVfcHJpdiwgZmFsc2UpOwogfQogCi0vKioKLSAqIHZt d19jb250ZXh0X2JpbmRpbmdfYWRkOiBTdGFydCB0cmFja2luZyBhIGNvbnRleHQgYmluZGluZwot ICoKLSAqIEBjYnM6IFBvaW50ZXIgdG8gdGhlIGNvbnRleHQgYmluZGluZyBzdGF0ZSB0cmFja2Vy LgotICogQGJpOiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgYmluZGluZyB0byB0cmFjay4KLSAqCi0g KiBQZXJmb3JtcyBiYXNpYyBjaGVja3Mgb24gdGhlIGJpbmRpbmcgdG8gbWFrZSBzdXJlIGFyZ3Vt ZW50cyBhcmUgd2l0aGluCi0gKiBib3VuZHMgYW5kIHRoZW4gc3RhcnRzIHRyYWNraW5nIHRoZSBi aW5kaW5nIGluIHRoZSBjb250ZXh0IGJpbmRpbmcKLSAqIHN0YXRlIHN0cnVjdHVyZSBAY2JzLgot ICovCi1pbnQgdm13X2NvbnRleHRfYmluZGluZ19hZGQoc3RydWN0IHZtd19jdHhfYmluZGluZ19z dGF0ZSAqY2JzLAotCQkJICAgIGNvbnN0IHN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvICpiaSkKK2lu dCB2bXdfZXh0ZW5kZWRfY29udGV4dF9kZWZpbmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsK LQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nICpsb2M7Ci0KLQlzd2l0Y2ggKGJpLT5idCkgewotCWNh c2Ugdm13X2N0eF9iaW5kaW5nX3J0OgotCQlpZiAodW5saWtlbHkoKHVuc2lnbmVkKWJpLT5pMS5y dF90eXBlID49IFNWR0EzRF9SVF9NQVgpKSB7Ci0JCQlEUk1fRVJST1IoIklsbGVnYWwgcmVuZGVy IHRhcmdldCB0eXBlICV1LlxuIiwKLQkJCQkgICh1bnNpZ25lZCkgYmktPmkxLnJ0X3R5cGUpOwot CQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbG9jID0gJmNicy0+cmVuZGVyX3RhcmdldHNbYmkt PmkxLnJ0X3R5cGVdOwotCQlicmVhazsKLQljYXNlIHZtd19jdHhfYmluZGluZ190ZXg6Ci0JCWlm ICh1bmxpa2VseSgodW5zaWduZWQpYmktPmkxLnRleHR1cmVfc3RhZ2UgPj0KLQkJCSAgICAgU1ZH QTNEX05VTV9URVhUVVJFX1VOSVRTKSkgewotCQkJRFJNX0VSUk9SKCJJbGxlZ2FsIHRleHR1cmUv c2FtcGxlciB1bml0ICV1LlxuIiwKLQkJCQkgICh1bnNpZ25lZCkgYmktPmkxLnRleHR1cmVfc3Rh Z2UpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbG9jID0gJmNicy0+dGV4dHVyZV91bml0 c1tiaS0+aTEudGV4dHVyZV9zdGFnZV07Ci0JCWJyZWFrOwotCWNhc2Ugdm13X2N0eF9iaW5kaW5n X3NoYWRlcjoKLQkJaWYgKHVubGlrZWx5KCh1bnNpZ25lZCliaS0+aTEuc2hhZGVyX3R5cGUgPj0K LQkJCSAgICAgU1ZHQTNEX1NIQURFUlRZUEVfUFJFRFhfTUFYKSkgewotCQkJRFJNX0VSUk9SKCJJ bGxlZ2FsIHNoYWRlciB0eXBlICV1LlxuIiwKLQkJCQkgICh1bnNpZ25lZCkgYmktPmkxLnNoYWRl cl90eXBlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWxvYyA9ICZjYnMtPnNoYWRlcnNb YmktPmkxLnNoYWRlcl90eXBlXTsKLQkJYnJlYWs7CisJdW5pb24gZHJtX3Ztd19leHRlbmRlZF9j b250ZXh0X2FyZyAqYXJnID0gKHR5cGVvZihhcmcpKSBkYXRhOworCXN0cnVjdCBkcm1fdm13X2Nv bnRleHRfYXJnICpyZXAgPSAmYXJnLT5yZXA7CisKKwlzd2l0Y2ggKGFyZy0+cmVxKSB7CisJY2Fz ZSBkcm1fdm13X2NvbnRleHRfbGVnYWN5OgorCQlyZXR1cm4gdm13X2NvbnRleHRfZGVmaW5lKGRl diwgcmVwLCBmaWxlX3ByaXYsIGZhbHNlKTsKKwljYXNlIGRybV92bXdfY29udGV4dF9keDoKKwkJ cmV0dXJuIHZtd19jb250ZXh0X2RlZmluZShkZXYsIHJlcCwgZmlsZV9wcml2LCB0cnVlKTsKIAlk ZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci0KLQlpZiAobG9jLT5iaS5jdHggIT0gTlVMTCkKLQkJdm13 X2NvbnRleHRfYmluZGluZ19kcm9wKGxvYyk7Ci0KLQlsb2MtPmJpID0gKmJpOwotCWxvYy0+Ymku c2NydWJiZWQgPSBmYWxzZTsKLQlsaXN0X2FkZF90YWlsKCZsb2MtPmN0eF9saXN0LCAmY2JzLT5s aXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbG9jLT5yZXNfbGlzdCk7Ci0KLQlyZXR1cm4gMDsKLX0K LQotLyoqCi0gKiB2bXdfY29udGV4dF9iaW5kaW5nX3RyYW5zZmVyOiBUcmFuc2ZlciBhIGNvbnRl eHQgYmluZGluZyB0cmFja2luZyBlbnRyeS4KLSAqCi0gKiBAY2JzOiBQb2ludGVyIHRvIHRoZSBw ZXJzaXN0ZW50IGNvbnRleHQgYmluZGluZyBzdGF0ZSB0cmFja2VyLgotICogQGJpOiBJbmZvcm1h dGlvbiBhYm91dCB0aGUgYmluZGluZyB0byB0cmFjay4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIHZt d19jb250ZXh0X2JpbmRpbmdfdHJhbnNmZXIoc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAq Y2JzLAotCQkJCQkgY29uc3Qgc3RydWN0IHZtd19jdHhfYmluZGluZm8gKmJpKQotewotCXN0cnVj dCB2bXdfY3R4X2JpbmRpbmcgKmxvYzsKLQotCXN3aXRjaCAoYmktPmJ0KSB7Ci0JY2FzZSB2bXdf Y3R4X2JpbmRpbmdfcnQ6Ci0JCWxvYyA9ICZjYnMtPnJlbmRlcl90YXJnZXRzW2JpLT5pMS5ydF90 eXBlXTsKLQkJYnJlYWs7Ci0JY2FzZSB2bXdfY3R4X2JpbmRpbmdfdGV4OgotCQlsb2MgPSAmY2Jz LT50ZXh0dXJlX3VuaXRzW2JpLT5pMS50ZXh0dXJlX3N0YWdlXTsKLQkJYnJlYWs7Ci0JY2FzZSB2 bXdfY3R4X2JpbmRpbmdfc2hhZGVyOgotCQlsb2MgPSAmY2JzLT5zaGFkZXJzW2JpLT5pMS5zaGFk ZXJfdHlwZV07CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQotCWlmIChsb2Mt PmJpLmN0eCAhPSBOVUxMKQotCQl2bXdfY29udGV4dF9iaW5kaW5nX2Ryb3AobG9jKTsKLQotCWlm IChiaS0+cmVzICE9IE5VTEwpIHsKLQkJbG9jLT5iaSA9ICpiaTsKLQkJbGlzdF9hZGRfdGFpbCgm bG9jLT5jdHhfbGlzdCwgJmNicy0+bGlzdCk7Ci0JCWxpc3RfYWRkX3RhaWwoJmxvYy0+cmVzX2xp c3QsICZiaS0+cmVzLT5iaW5kaW5nX2hlYWQpOwotCX0KLX0KLQotLyoqCi0gKiB2bXdfY29udGV4 dF9iaW5kaW5nX2tpbGwgLSBLaWxsIGEgYmluZGluZyBvbiB0aGUgZGV2aWNlCi0gKiBhbmQgc3Rv cCB0cmFja2luZyBpdC4KLSAqCi0gKiBAY2I6IFBvaW50ZXIgdG8gYmluZGluZyB0cmFja2VyIHN0 b3JhZ2UuCi0gKgotICogRW1pdHMgRklGTyBjb21tYW5kcyB0byBzY3J1YiBhIGJpbmRpbmcgcmVw cmVzZW50ZWQgYnkgQGNiLgotICogVGhlbiBzdG9wcyB0cmFja2luZyB0aGUgYmluZGluZyBhbmQg cmUtaW5pdGlhbGl6ZXMgaXRzIHN0b3JhZ2UuCi0gKi8KLXN0YXRpYyB2b2lkIHZtd19jb250ZXh0 X2JpbmRpbmdfa2lsbChzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nICpjYikKLXsKLQlpZiAoIWNiLT5i aS5zY3J1YmJlZCkgewotCQkodm9pZCkgdm13X3NjcnViX2Z1bmNzW2NiLT5iaS5idF0oJmNiLT5i aSwgZmFsc2UpOwotCQljYi0+Ymkuc2NydWJiZWQgPSB0cnVlOwotCX0KLQl2bXdfY29udGV4dF9i aW5kaW5nX2Ryb3AoY2IpOwotfQotCi0vKioKLSAqIHZtd19jb250ZXh0X2JpbmRpbmdfc3RhdGVf a2lsbCAtIEtpbGwgYWxsIGJpbmRpbmdzIGFzc29jaWF0ZWQgd2l0aCBhCi0gKiBzdHJ1Y3Qgdm13 X2N0eF9iaW5kaW5nIHN0YXRlIHN0cnVjdHVyZSwgYW5kIHJlLWluaXRpYWxpemUgdGhlIHN0cnVj dHVyZS4KLSAqCi0gKiBAY2JzOiBQb2ludGVyIHRvIHRoZSBjb250ZXh0IGJpbmRpbmcgc3RhdGUg dHJhY2tlci4KLSAqCi0gKiBFbWl0cyBjb21tYW5kcyB0byBzY3J1YiBhbGwgYmluZGluZ3MgYXNz b2NpYXRlZCB3aXRoIHRoZQotICogY29udGV4dCBiaW5kaW5nIHN0YXRlIHRyYWNrZXIuIFRoZW4g cmUtaW5pdGlhbGl6ZXMgdGhlIHdob2xlIHN0cnVjdHVyZS4KLSAqLwotc3RhdGljIHZvaWQgdm13 X2NvbnRleHRfYmluZGluZ19zdGF0ZV9raWxsKHN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUg KmNicykKLXsKLQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nICplbnRyeSwgKm5leHQ7Ci0KLQlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsICZjYnMtPmxpc3QsIGN0eF9saXN0KQot CQl2bXdfY29udGV4dF9iaW5kaW5nX2tpbGwoZW50cnkpOwotfQotCi0vKioKLSAqIHZtd19jb250 ZXh0X2JpbmRpbmdfc3RhdGVfc2NydWIgLSBTY3J1YiBhbGwgYmluZGluZ3MgYXNzb2NpYXRlZCB3 aXRoIGEKLSAqIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmcgc3RhdGUgc3RydWN0dXJlLgotICoKLSAq IEBjYnM6IFBvaW50ZXIgdG8gdGhlIGNvbnRleHQgYmluZGluZyBzdGF0ZSB0cmFja2VyLgotICoK LSAqIEVtaXRzIGNvbW1hbmRzIHRvIHNjcnViIGFsbCBiaW5kaW5ncyBhc3NvY2lhdGVkIHdpdGgg dGhlCi0gKiBjb250ZXh0IGJpbmRpbmcgc3RhdGUgdHJhY2tlci4KLSAqLwotc3RhdGljIHZvaWQg dm13X2NvbnRleHRfYmluZGluZ19zdGF0ZV9zY3J1YihzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0 YXRlICpjYnMpCi17Ci0Jc3RydWN0IHZtd19jdHhfYmluZGluZyAqZW50cnk7Ci0KLQlsaXN0X2Zv cl9lYWNoX2VudHJ5KGVudHJ5LCAmY2JzLT5saXN0LCBjdHhfbGlzdCkgewotCQlpZiAoIWVudHJ5 LT5iaS5zY3J1YmJlZCkgewotCQkJKHZvaWQpIHZtd19zY3J1Yl9mdW5jc1tlbnRyeS0+YmkuYnRd KCZlbnRyeS0+YmksIGZhbHNlKTsKLQkJCWVudHJ5LT5iaS5zY3J1YmJlZCA9IHRydWU7Ci0JCX0K LQl9Ci19Ci0KLS8qKgotICogdm13X2NvbnRleHRfYmluZGluZ19yZXNfbGlzdF9raWxsIC0gS2ls bCBhbGwgYmluZGluZ3Mgb24gYQotICogcmVzb3VyY2UgYmluZGluZyBsaXN0Ci0gKgotICogQGhl YWQ6IGxpc3QgaGVhZCBvZiByZXNvdXJjZSBiaW5kaW5nIGxpc3QKLSAqCi0gKiBLaWxscyBhbGwg YmluZGluZ3MgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgcmVzb3VyY2UuIFR5cGljYWxseQot ICogY2FsbGVkIGJlZm9yZSB0aGUgcmVzb3VyY2UgaXMgZGVzdHJveWVkLgotICovCi12b2lkIHZt d19jb250ZXh0X2JpbmRpbmdfcmVzX2xpc3Rfa2lsbChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQot ewotCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmcgKmVudHJ5LCAqbmV4dDsKLQotCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgaGVhZCwgcmVzX2xpc3QpCi0JCXZtd19jb250ZXh0 X2JpbmRpbmdfa2lsbChlbnRyeSk7Ci19Ci0KLS8qKgotICogdm13X2NvbnRleHRfYmluZGluZ19y ZXNfbGlzdF9zY3J1YiAtIFNjcnViIGFsbCBiaW5kaW5ncyBvbiBhCi0gKiByZXNvdXJjZSBiaW5k aW5nIGxpc3QKLSAqCi0gKiBAaGVhZDogbGlzdCBoZWFkIG9mIHJlc291cmNlIGJpbmRpbmcgbGlz dAotICoKLSAqIFNjcnViIGFsbCBiaW5kaW5ncyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBy ZXNvdXJjZS4gVHlwaWNhbGx5Ci0gKiBjYWxsZWQgYmVmb3JlIHRoZSByZXNvdXJjZSBpcyBldmlj dGVkLgotICovCi12b2lkIHZtd19jb250ZXh0X2JpbmRpbmdfcmVzX2xpc3Rfc2NydWIoc3RydWN0 IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nICplbnRyeTsKLQot CWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGhlYWQsIHJlc19saXN0KSB7Ci0JCWlmICghZW50 cnktPmJpLnNjcnViYmVkKSB7Ci0JCQkodm9pZCkgdm13X3NjcnViX2Z1bmNzW2VudHJ5LT5iaS5i dF0oJmVudHJ5LT5iaSwgZmFsc2UpOwotCQkJZW50cnktPmJpLnNjcnViYmVkID0gdHJ1ZTsKLQkJ fQogCX0KKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyoqCi0gKiB2bXdfY29udGV4dF9iaW5kaW5n X3N0YXRlX3RyYW5zZmVyIC0gQ29tbWl0IHN0YWdlZCBiaW5kaW5nIGluZm8KKyAqIHZtd19jb250 ZXh0X2JpbmRpbmdfbGlzdCAtIFJldHVybiBhIGxpc3Qgb2YgY29udGV4dCBiaW5kaW5ncwogICoK LSAqIEBjdHg6IFBvaW50ZXIgdG8gY29udGV4dCB0byBjb21taXQgdGhlIHN0YWdlZCBiaW5kaW5n IGluZm8gdG8uCi0gKiBAZnJvbTogU3RhZ2VkIGJpbmRpbmcgaW5mbyBidWlsdCBkdXJpbmcgZXhl Y2J1Zi4KKyAqIEBjdHg6IFRoZSBjb250ZXh0IHJlc291cmNlCiAgKgotICogVHJhbnNmZXJzIGJp bmRpbmcgaW5mbyBmcm9tIGEgdGVtcG9yYXJ5IHN0cnVjdHVyZSB0byB0aGUgcGVyc2lzdGVudAot ICogc3RydWN0dXJlIGluIHRoZSBjb250ZXh0LiBUaGlzIGNhbiBiZSBkb25lIG9uY2UgY29tbWFu ZHMKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgbGlzdCBvZiBiaW5kaW5ncyBvZiB0aGUgZ2l2ZW4g Y29udGV4dC4gTm90ZSB0aGF0CisgKiB0aGlzIGxpc3QgYmVjb21lcyBzdGFsZSBhcyBzb29uIGFz IHRoZSBkZXZfcHJpdjo6YmluZGluZ19tdXRleCBpcyB1bmxvY2tlZC4KICAqLwotdm9pZCB2bXdf Y29udGV4dF9iaW5kaW5nX3N0YXRlX3RyYW5zZmVyKHN0cnVjdCB2bXdfcmVzb3VyY2UgKmN0eCwK LQkJCQkJc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZSAqZnJvbSkKK3N0cnVjdCBsaXN0X2hl YWQgKnZtd19jb250ZXh0X2JpbmRpbmdfbGlzdChzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHgpCiB7 CiAJc3RydWN0IHZtd191c2VyX2NvbnRleHQgKnVjdHggPQogCQljb250YWluZXJfb2YoY3R4LCBz dHJ1Y3Qgdm13X3VzZXJfY29udGV4dCwgcmVzKTsKLQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nICpl bnRyeSwgKm5leHQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsICZm cm9tLT5saXN0LCBjdHhfbGlzdCkKLQkJdm13X2NvbnRleHRfYmluZGluZ190cmFuc2ZlcigmdWN0 eC0+Y2JzLCAmZW50cnktPmJpKTsKKwlyZXR1cm4gdm13X2JpbmRpbmdfc3RhdGVfbGlzdCh1Y3R4 LT5jYnMpOwogfQogCi0vKioKLSAqIHZtd19jb250ZXh0X3JlYmluZF9hbGwgLSBSZWJpbmQgYWxs IHNjcnViYmVkIGJpbmRpbmdzIG9mIGEgY29udGV4dAotICoKLSAqIEBjdHg6IFRoZSBjb250ZXh0 IHJlc291cmNlCi0gKgotICogV2Fsa3MgdGhyb3VnaCB0aGUgY29udGV4dCBiaW5kaW5nIGxpc3Qg YW5kIHJlYmluZHMgYWxsIHNjcnViYmVkCi0gKiByZXNvdXJjZXMuCi0gKi8KLWludCB2bXdfY29u dGV4dF9yZWJpbmRfYWxsKHN0cnVjdCB2bXdfcmVzb3VyY2UgKmN0eCkKK3N0cnVjdCB2bXdfY21k YnVmX3Jlc19tYW5hZ2VyICp2bXdfY29udGV4dF9yZXNfbWFuKHN0cnVjdCB2bXdfcmVzb3VyY2Ug KmN0eCkKIHsKLQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nICplbnRyeTsKLQlzdHJ1Y3Qgdm13X3Vz ZXJfY29udGV4dCAqdWN0eCA9Ci0JCWNvbnRhaW5lcl9vZihjdHgsIHN0cnVjdCB2bXdfdXNlcl9j b250ZXh0LCByZXMpOwotCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKmNicyA9ICZ1Y3R4 LT5jYnM7Ci0JaW50IHJldDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZjYnMtPmxp c3QsIGN0eF9saXN0KSB7Ci0JCWlmIChsaWtlbHkoIWVudHJ5LT5iaS5zY3J1YmJlZCkpCi0JCQlj b250aW51ZTsKLQotCQlpZiAoV0FSTl9PTihlbnRyeS0+YmkucmVzID09IE5VTEwgfHwgZW50cnkt PmJpLnJlcy0+aWQgPT0KLQkJCSAgICBTVkdBM0RfSU5WQUxJRF9JRCkpCi0JCQljb250aW51ZTsK LQotCQlyZXQgPSB2bXdfc2NydWJfZnVuY3NbZW50cnktPmJpLmJ0XSgmZW50cnktPmJpLCB0cnVl KTsKLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKLQkJCXJldHVybiByZXQ7CisJcmV0dXJuIGNv bnRhaW5lcl9vZihjdHgsIHN0cnVjdCB2bXdfdXNlcl9jb250ZXh0LCByZXMpLT5tYW47Cit9CiAK LQkJZW50cnktPmJpLnNjcnViYmVkID0gZmFsc2U7Ci0JfQorc3RydWN0IHZtd19yZXNvdXJjZSAq dm13X2NvbnRleHRfY290YWJsZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHgsCisJCQkJCSBTVkdB Q09UYWJsZVR5cGUgY290YWJsZV90eXBlKQoreworCWlmIChjb3RhYmxlX3R5cGUgPj0gU1ZHQV9D T1RBQkxFX0RYMTBfTUFYKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCXJldHVybiAw OworCXJldHVybiB2bXdfcmVzb3VyY2VfcmVmZXJlbmNlCisJCShjb250YWluZXJfb2YoY3R4LCBz dHJ1Y3Qgdm13X3VzZXJfY29udGV4dCwgcmVzKS0+CisJCSBjb3RhYmxlc1tjb3RhYmxlX3R5cGVd KTsKIH0KIAogLyoqCi0gKiB2bXdfY29udGV4dF9iaW5kaW5nX2xpc3QgLSBSZXR1cm4gYSBsaXN0 IG9mIGNvbnRleHQgYmluZGluZ3MKKyAqIHZtd19jb250ZXh0X2JpbmRpbmdfc3RhdGUgLQorICog UmV0dXJuIGEgcG9pbnRlciB0byBhIGNvbnRleHQgYmluZGluZyBzdGF0ZSBzdHJ1Y3R1cmUKICAq CiAgKiBAY3R4OiBUaGUgY29udGV4dCByZXNvdXJjZQogICoKLSAqIFJldHVybnMgdGhlIGN1cnJl bnQgbGlzdCBvZiBiaW5kaW5ncyBvZiB0aGUgZ2l2ZW4gY29udGV4dC4gTm90ZSB0aGF0Ci0gKiB0 aGlzIGxpc3QgYmVjb21lcyBzdGFsZSBhcyBzb29uIGFzIHRoZSBkZXZfcHJpdjo6YmluZGluZ19t dXRleCBpcyB1bmxvY2tlZC4KKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYmluZGlu Z3Mgb2YgdGhlIGdpdmVuIGNvbnRleHQuIE5vdGUgdGhhdAorICogdGhpcyBzdGF0ZSBiZWNvbWVz IHN0YWxlIGFzIHNvb24gYXMgdGhlIGRldl9wcml2OjpiaW5kaW5nX211dGV4IGlzIHVubG9ja2Vk LgogICovCi1zdHJ1Y3QgbGlzdF9oZWFkICp2bXdfY29udGV4dF9iaW5kaW5nX2xpc3Qoc3RydWN0 IHZtd19yZXNvdXJjZSAqY3R4KQotewotCXJldHVybiAmKGNvbnRhaW5lcl9vZihjdHgsIHN0cnVj dCB2bXdfdXNlcl9jb250ZXh0LCByZXMpLT5jYnMubGlzdCk7Ci19Ci0KLXN0cnVjdCB2bXdfY21k YnVmX3Jlc19tYW5hZ2VyICp2bXdfY29udGV4dF9yZXNfbWFuKHN0cnVjdCB2bXdfcmVzb3VyY2Ug KmN0eCkKK3N0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgKgordm13X2NvbnRleHRfYmluZGlu Z19zdGF0ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHgpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9v ZihjdHgsIHN0cnVjdCB2bXdfdXNlcl9jb250ZXh0LCByZXMpLT5tYW47CisJcmV0dXJuIGNvbnRh aW5lcl9vZihjdHgsIHN0cnVjdCB2bXdfdXNlcl9jb250ZXh0LCByZXMpLT5jYnM7CiB9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb3RhYmxlLmMgYi9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9jb3RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMjJiYjA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2NvdGFibGUuYwpAQCAtMCwwICsxLDY2MiBAQAorLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTQgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENB LiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIg bGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiovCisvKgorICogVHJlYXQgY29udGV4dCBPVGFibGVzIGFzIHJlc291cmNlcyB0 byBtYWtlIHVzZSBvZiB0aGUgcmVzb3VyY2UKKyAqIGJhY2tpbmcgTU9CIGV2aWN0aW9uIG1lY2hh bmlzbSwgdGhhdCBpcyB1c2VkIHRvIHJlYWQgYmFjayB0aGUgQ09UYWJsZQorICogd2hlbmV2ZXIg dGhlIGJhY2tpbmcgTU9CIGlzIGV2aWN0ZWQuCisgKi8KKworI2luY2x1ZGUgInZtd2dmeF9kcnYu aCIKKyNpbmNsdWRlICJ2bXdnZnhfcmVzb3VyY2VfcHJpdi5oIgorI2luY2x1ZGUgPHR0bS90dG1f cGxhY2VtZW50Lmg+CisjaW5jbHVkZSAidm13Z2Z4X3NvLmgiCisKKy8qKgorICogc3RydWN0IHZt d19jb3RhYmxlIC0gQ29udGV4dCBPYmplY3QgVGFibGUgcmVzb3VyY2UKKyAqCisgKiBAcmVzOiBz dHJ1Y3Qgdm13X3Jlc291cmNlIHdlIGFyZSBkZXJpdmluZyBmcm9tLgorICogQGN0eDogbm9uLXJl ZmNvdW50ZWQgcG9pbnRlciB0byB0aGUgb3duaW5nIGNvbnRleHQuCisgKiBAc2l6ZV9yZWFkX2Jh Y2s6IFNpemUgb2YgZGF0YSByZWFkIGJhY2sgZHVyaW5nIGV2aWN0aW9uLgorICogQHNlZW5fZW50 cmllczogU2VlbiBlbnRyaWVzIGluIGNvbW1hbmQgc3RyZWFtIGZvciB0aGlzIGNvdGFibGUuCisg KiBAdHlwZTogVGhlIGNvdGFibGUgdHlwZS4KKyAqIEBzY3J1YmJlZDogV2hldGhlciB0aGUgY290 YWJsZSBoYXMgYmVlbiBzY3J1YmJlZC4KKyAqIEByZXNvdXJjZV9saXN0OiBMaXN0IG9mIHJlc291 cmNlcyBpbiB0aGUgY290YWJsZS4KKyAqLworc3RydWN0IHZtd19jb3RhYmxlIHsKKwlzdHJ1Y3Qg dm13X3Jlc291cmNlIHJlczsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHg7CisJc2l6ZV90IHNp emVfcmVhZF9iYWNrOworCWludCBzZWVuX2VudHJpZXM7CisJdTMyIHR5cGU7CisJYm9vbCBzY3J1 YmJlZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlX2xpc3Q7Cit9OworCisvKioKKyAqIHN0 cnVjdCB2bXdfY290YWJsZV9pbmZvIC0gU3RhdGljIGluZm8gYWJvdXQgY290YWJsZSB0eXBlcwor ICoKKyAqIEBtaW5faW5pdGlhbF9lbnRyaWVzOiBNaW4gbnVtYmVyIG9mIGluaXRpYWwgaW50cmll cyBhdCBjb3RhYmxlIGFsbG9jYXRpb24KKyAqIGZvciB0aGlzIGNvdGFibGUgdHlwZS4KKyAqIEBz aXplOiBTaXplIG9mIGVhY2ggZW50cnkuCisgKi8KK3N0cnVjdCB2bXdfY290YWJsZV9pbmZvIHsK Kwl1MzIgbWluX2luaXRpYWxfZW50cmllczsKKwl1MzIgc2l6ZTsKKwl2b2lkICgqdW5iaW5kX2Z1 bmMpKHN0cnVjdCB2bXdfcHJpdmF0ZSAqLCBzdHJ1Y3QgbGlzdF9oZWFkICosCisJCQkgICAgYm9v bCk7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZtd19jb3RhYmxlX2luZm8gY29faW5mb1td ID0geworCXsxLCBzaXplb2YoU1ZHQUNPVGFibGVEWFJUVmlld0VudHJ5KSwgJnZtd192aWV3X2Nv dGFibGVfbGlzdF9kZXN0cm95fSwKKwl7MSwgc2l6ZW9mKFNWR0FDT1RhYmxlRFhEU1ZpZXdFbnRy eSksICZ2bXdfdmlld19jb3RhYmxlX2xpc3RfZGVzdHJveX0sCisJezEsIHNpemVvZihTVkdBQ09U YWJsZURYU1JWaWV3RW50cnkpLCAmdm13X3ZpZXdfY290YWJsZV9saXN0X2Rlc3Ryb3l9LAorCXsx LCBzaXplb2YoU1ZHQUNPVGFibGVEWEVsZW1lbnRMYXlvdXRFbnRyeSksIE5VTEx9LAorCXsxLCBz aXplb2YoU1ZHQUNPVGFibGVEWEJsZW5kU3RhdGVFbnRyeSksIE5VTEx9LAorCXsxLCBzaXplb2Yo U1ZHQUNPVGFibGVEWERlcHRoU3RlbmNpbEVudHJ5KSwgTlVMTH0sCisJezEsIHNpemVvZihTVkdB Q09UYWJsZURYUmFzdGVyaXplclN0YXRlRW50cnkpLCBOVUxMfSwKKwl7MSwgc2l6ZW9mKFNWR0FD T1RhYmxlRFhTYW1wbGVyRW50cnkpLCBOVUxMfSwKKwl7MSwgc2l6ZW9mKFNWR0FDT1RhYmxlRFhT dHJlYW1PdXRwdXRFbnRyeSksIE5VTEx9LAorCXsxLCBzaXplb2YoU1ZHQUNPVGFibGVEWFF1ZXJ5 RW50cnkpLCBOVUxMfSwKKwl7MSwgc2l6ZW9mKFNWR0FDT1RhYmxlRFhTaGFkZXJFbnRyeSksICZ2 bXdfZHhfc2hhZGVyX2NvdGFibGVfbGlzdF9zY3J1Yn0KK307CisKKy8qCisgKiBDb3RhYmxlcyB3 aXRoIGJpbmRpbmdzIHRoYXQgd2UgcmVtb3ZlIG11c3QgYmUgc2NydWJiZWQgZmlyc3QsCisgKiBv dGhlcndpc2UsIHRoZSBkZXZpY2Ugd2lsbCBzd2FwIGluIGFuIGludmFsaWQgY29udGV4dCB3aGVu IHdlIHJlbW92ZQorICogYmluZGluZ3MgYmVmb3JlIHNjcnViYmluZyBhIGNvdGFibGUuLi4KKyAq LworY29uc3QgU1ZHQUNPVGFibGVUeXBlIHZtd19jb3RhYmxlX3NjcnViX29yZGVyW10gPSB7CisJ U1ZHQV9DT1RBQkxFX1JUVklFVywKKwlTVkdBX0NPVEFCTEVfRFNWSUVXLAorCVNWR0FfQ09UQUJM RV9TUlZJRVcsCisJU1ZHQV9DT1RBQkxFX0RYU0hBREVSLAorCVNWR0FfQ09UQUJMRV9FTEVNRU5U TEFZT1VULAorCVNWR0FfQ09UQUJMRV9CTEVORFNUQVRFLAorCVNWR0FfQ09UQUJMRV9ERVBUSFNU RU5DSUwsCisJU1ZHQV9DT1RBQkxFX1JBU1RFUklaRVJTVEFURSwKKwlTVkdBX0NPVEFCTEVfU0FN UExFUiwKKwlTVkdBX0NPVEFCTEVfU1RSRUFNT1VUUFVULAorCVNWR0FfQ09UQUJMRV9EWFFVRVJZ LAorfTsKKworc3RhdGljIGludCB2bXdfY290YWJsZV9iaW5kKHN0cnVjdCB2bXdfcmVzb3VyY2Ug KnJlcywKKwkJCSAgICBzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmFsX2J1Zik7CitzdGF0 aWMgaW50IHZtd19jb3RhYmxlX3VuYmluZChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCisJCQkg ICAgICBib29sIHJlYWRiYWNrLAorCQkJICAgICAgc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIg KnZhbF9idWYpOworc3RhdGljIGludCB2bXdfY290YWJsZV9jcmVhdGUoc3RydWN0IHZtd19yZXNv dXJjZSAqcmVzKTsKK3N0YXRpYyBpbnQgdm13X2NvdGFibGVfZGVzdHJveShzdHJ1Y3Qgdm13X3Jl c291cmNlICpyZXMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZtd19yZXNfZnVuYyB2bXdfY290 YWJsZV9mdW5jID0geworCS5yZXNfdHlwZSA9IHZtd19yZXNfY290YWJsZSwKKwkubmVlZHNfYmFj a3VwID0gdHJ1ZSwKKwkubWF5X2V2aWN0ID0gdHJ1ZSwKKwkudHlwZV9uYW1lID0gImNvbnRleHQg Z3Vlc3QgYmFja2VkIG9iamVjdCB0YWJsZXMiLAorCS5iYWNrdXBfcGxhY2VtZW50ID0gJnZtd19t b2JfcGxhY2VtZW50LAorCS5jcmVhdGUgPSB2bXdfY290YWJsZV9jcmVhdGUsCisJLmRlc3Ryb3kg PSB2bXdfY290YWJsZV9kZXN0cm95LAorCS5iaW5kID0gdm13X2NvdGFibGVfYmluZCwKKwkudW5i aW5kID0gdm13X2NvdGFibGVfdW5iaW5kLAorfTsKKworLyoqCisgKiB2bXdfY290YWJsZSAtIENv bnZlcnQgYSBzdHJ1Y3Qgdm13X3Jlc291cmNlIHBvaW50ZXIgdG8gYSBzdHJ1Y3QKKyAqIHZtd19j b3RhYmxlIHBvaW50ZXIKKyAqCisgKiBAcmVzOiBQb2ludGVyIHRvIHRoZSByZXNvdXJjZS4KKyAq Lworc3RhdGljIHN0cnVjdCB2bXdfY290YWJsZSAqdm13X2NvdGFibGUoc3RydWN0IHZtd19yZXNv dXJjZSAqcmVzKQoreworCXJldHVybiBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X2NvdGFi bGUsIHJlcyk7Cit9CisKKy8qKgorICogdm13X2NvdGFibGVfZGVzdHJveSAtIENvdGFibGUgcmVz b3VyY2UgZGVzdHJveSBjYWxsYmFjaworICoKKyAqIEByZXM6IFBvaW50ZXIgdG8gdGhlIGNvdGFi bGUgcmVzb3VyY2UuCisgKgorICogVGhlcmUgaXMgbm8gZGV2aWNlIGNvdGFibGUgZGVzdHJveSBj b21tYW5kLCBzbyB0aGlzIGZ1bmN0aW9uIG9ubHkKKyAqIG1ha2VzIHN1cmUgdGhhdCB0aGUgcmVz b3VyY2UgaWQgaXMgc2V0IHRvIGludmFsaWQuCisgKi8KK3N0YXRpYyBpbnQgdm13X2NvdGFibGVf ZGVzdHJveShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7CisJcmVzLT5pZCA9IC0xOworCXJl dHVybiAwOworfQorCisvKioKKyAqIHZtd19jb3RhYmxlX3Vuc2NydWIgLSBVbmRvIGEgY290YWJs ZSB1bnNjcnViIG9wZXJhdGlvbgorICoKKyAqIEByZXM6IFBvaW50ZXIgdG8gdGhlIGNvdGFibGUg cmVzb3VyY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzc3VlcyBjb21tYW5kcyB0byAocmUpYmlu ZCB0aGUgY290YWJsZSB0bworICogaXRzIGJhY2tpbmcgbW9iLCB3aGljaCBuZWVkcyB0byBiZSB2 YWxpZGF0ZWQgYW5kIHJlc2VydmVkIGF0IHRoaXMgcG9pbnQuCisgKiBUaGlzIGlzIGlkZW50aWNh bCB0byBiaW5kKCkgZXhjZXB0IHRoZSBmdW5jdGlvbiBpbnRlcmZhY2UgbG9va3MgZGlmZmVyZW50 LgorICovCitzdGF0aWMgaW50IHZtd19jb3RhYmxlX3Vuc2NydWIoc3RydWN0IHZtd19yZXNvdXJj ZSAqcmVzKQoreworCXN0cnVjdCB2bXdfY290YWJsZSAqdmNvdGJsID0gdm13X2NvdGFibGUocmVz KTsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKwlzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gJnJlcy0+YmFja3VwLT5iYXNlOworCXN0cnVjdCB7 CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZERYU2V0Q09UYWJsZSBib2R5 OworCX0gKmNtZDsKKworCVdBUk5fT05fT05DRShiby0+bWVtLm1lbV90eXBlICE9IFZNV19QTF9N T0IpOworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmJvLT5yZXN2LT5sb2NrLmJhc2UpOworCisJY21k ID0gdm13X2ZpZm9fcmVzZXJ2ZV9keChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpLCBTVkdBM0RfSU5W QUxJRF9JRCk7CisJaWYgKCFjbWQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgcmVzZXJ2aW5nIEZJ Rk8gc3BhY2UgZm9yIGNvdGFibGUgIgorCQkJICAiYmluZGluZy5cbiIpOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisKKwlXQVJOX09OKHZjb3RibC0+Y3R4LT5pZCA9PSBTVkdBM0RfSU5WQUxJRF9J RCk7CisJV0FSTl9PTihiby0+bWVtLm1lbV90eXBlICE9IFZNV19QTF9NT0IpOworCWNtZC0+aGVh ZGVyLmlkID0gU1ZHQV8zRF9DTURfRFhfU0VUX0NPVEFCTEU7CisJY21kLT5oZWFkZXIuc2l6ZSA9 IHNpemVvZihjbWQtPmJvZHkpOworCWNtZC0+Ym9keS5jaWQgPSB2Y290YmwtPmN0eC0+aWQ7CisJ Y21kLT5ib2R5LnR5cGUgPSB2Y290YmwtPnR5cGU7CisJY21kLT5ib2R5Lm1vYmlkID0gYm8tPm1l bS5zdGFydDsKKwljbWQtPmJvZHkudmFsaWRTaXplSW5CeXRlcyA9IHZjb3RibC0+c2l6ZV9yZWFk X2JhY2s7CisKKwl2bXdfZmlmb19jb21taXRfZmx1c2goZGV2X3ByaXYsIHNpemVvZigqY21kKSk7 CisJdmNvdGJsLT5zY3J1YmJlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICog dm13X2NvdGFibGVfYmluZCAtIFVuZG8gYSBjb3RhYmxlIHVuc2NydWIgb3BlcmF0aW9uCisgKgor ICogQHJlczogUG9pbnRlciB0byB0aGUgY290YWJsZSByZXNvdXJjZQorICogQHZhbF9idWY6IFBv aW50ZXIgdG8gYSBzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciBwcmVwYXJlZCBieSB0aGUgY2Fs bGVyCisgKiBmb3IgY29udmVuaWVuY2UgLyBmZW5jaW5nLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g aXNzdWVzIGNvbW1hbmRzIHRvIChyZSliaW5kIHRoZSBjb3RhYmxlIHRvCisgKiBpdHMgYmFja2lu ZyBtb2IsIHdoaWNoIG5lZWRzIHRvIGJlIHZhbGlkYXRlZCBhbmQgcmVzZXJ2ZWQgYXQgdGhpcyBw b2ludC4KKyAqLworc3RhdGljIGludCB2bXdfY290YWJsZV9iaW5kKHN0cnVjdCB2bXdfcmVzb3Vy Y2UgKnJlcywKKwkJCSAgICBzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmFsX2J1ZikKK3sK KwkvKgorCSAqIFRoZSBjcmVhdGUoKSBjYWxsYmFjayBtYXkgaGF2ZSBjaGFuZ2VkIEByZXMtPmJh Y2t1cCB3aXRob3V0CisJICogdGhlIGNhbGxlciBub3RpY2luZywgYW5kIHdpdGggdmFsX2J1Zi0+ Ym8gc3RpbGwgcG9pbnRpbmcgdG8KKwkgKiB0aGUgb2xkIGJhY2t1cCBidWZmZXIuIEFsdGhvdWdo IGhhY2tpc2gsIGFuZCBub3QgdXNlZCBjdXJyZW50bHksCisJICogdGFrZSB0aGUgb3Bwb3J0dW5p dHkgdG8gY29ycmVjdCB0aGUgdmFsdWUgaGVyZSBzbyB0aGF0IGl0J3Mgbm90CisJICogbWlzdXNl ZCBpbiB0aGUgZnV0dXJlLgorCSAqLworCXZhbF9idWYtPmJvID0gJnJlcy0+YmFja3VwLT5iYXNl OworCisJcmV0dXJuIHZtd19jb3RhYmxlX3Vuc2NydWIocmVzKTsKK30KKworLyoqCisgKiB2bXdf Y290YWJsZV9zY3J1YiAtIFNjcnViIHRoZSBjb3RhYmxlIGZyb20gdGhlIGRldmljZS4KKyAqCisg KiBAcmVzOiBQb2ludGVyIHRvIHRoZSBjb3RhYmxlIHJlc291cmNlLgorICogQHJlYWRiYWNrOiBX aGV0aGVyIGluaXRpYXRlIGEgcmVhZGJhY2sgb2YgdGhlIGNvdGFibGUgZGF0YSB0byB0aGUgYmFj a3VwCisgKiBidWZmZXIuCisgKgorICogSW4gc29tZSBzaXR1YXRpb25zIChjb250ZXh0IHN3YXBv dXRzKSBpdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gbWFrZSB0aGUKKyAqIGRldmljZSBmb3JnZXQg YWJvdXQgdGhlIGNvdGFibGUgd2l0aG91dCBwZXJmb3JtaW5nIGEgZnVsbCB1bmJpbmQuIEEgZnVs bAorICogdW5iaW5kIHJlcXVpcmVzIHJlc2VydmVkIGJhY2t1cCBidWZmZXJzIGFuZCBpdCBtaWdo dCBub3QgYmUgcG9zc2libGUgdG8KKyAqIHJlc2VydmUgdGhlbSBkdWUgdG8gbG9ja2luZyBvcmRl ciB2aW9sYXRpb24gaXNzdWVzLiBUaGUgdm13X2NvdGFibGVfc2NydWIKKyAqIGZ1bmN0aW9uIGlt cGxlbWVudHMgYSBwYXJ0aWFsIHVuYmluZCgpIHdpdGhvdXQgdGhhdCByZXF1aXJlbWVudCBidXQg d2l0aCB0aGUKKyAqIGZvbGxvd2luZyByZXN0cmljdGlvbnMuCisgKiAxKSBCZWZvcmUgdGhlIGNv dGFibGUgaXMgYWdhaW4gdXNlZCBieSB0aGUgR1BVLCB2bXdfY290YWJsZV91bnNjcnViKCkgbXVz dAorICogICAgYmUgY2FsbGVkLgorICogMikgQmVmb3JlIHRoZSBjb3RhYmxlIGJhY2tpbmcgYnVm ZmVyIGlzIHVzZWQgYnkgdGhlIENQVSwgb3IgZHVyaW5nIHRoZQorICogICAgcmVzb3VyY2UgZGVz dHJ1Y3Rpb24sIHZtd19jb3RhYmxlX3VuYmluZCgpIG11c3QgYmUgY2FsbGVkLgorICovCitpbnQg dm13X2NvdGFibGVfc2NydWIoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLCBib29sIHJlYWRiYWNr KQoreworCXN0cnVjdCB2bXdfY290YWJsZSAqdmNvdGJsID0gdm13X2NvdGFibGUocmVzKTsKKwlz dHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKwlzaXplX3Qgc3Vi bWl0X3NpemU7CisKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdB M2RDbWREWFJlYWRiYWNrQ09UYWJsZSBib2R5OworCX0gKmNtZDA7CisJc3RydWN0IHsKKwkJU1ZH QTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRFhTZXRDT1RhYmxlIGJvZHk7CisJfSAq Y21kMTsKKworCWlmICh2Y290YmwtPnNjcnViYmVkKQorCQlyZXR1cm4gMDsKKworCWlmIChjb19p bmZvW3Zjb3RibC0+dHlwZV0udW5iaW5kX2Z1bmMpCisJCWNvX2luZm9bdmNvdGJsLT50eXBlXS51 bmJpbmRfZnVuYyhkZXZfcHJpdiwKKwkJCQkJCSAgJnZjb3RibC0+cmVzb3VyY2VfbGlzdCwKKwkJ CQkJCSAgcmVhZGJhY2spOworCXN1Ym1pdF9zaXplID0gc2l6ZW9mKCpjbWQxKTsKKwlpZiAocmVh ZGJhY2spCisJCXN1Ym1pdF9zaXplICs9IHNpemVvZigqY21kMCk7CisKKwljbWQxID0gdm13X2Zp Zm9fcmVzZXJ2ZV9keChkZXZfcHJpdiwgc3VibWl0X3NpemUsIFNWR0EzRF9JTlZBTElEX0lEKTsK KwlpZiAoIWNtZDEpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgcmVzZXJ2aW5nIEZJRk8gc3BhY2Ug Zm9yIGNvdGFibGUgIgorCQkJICAidW5iaW5kaW5nLlxuIik7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKworCXZjb3RibC0+c2l6ZV9yZWFkX2JhY2sgPSAwOworCWlmIChyZWFkYmFjaykgeworCQlj bWQwID0gKHZvaWQgKikgY21kMTsKKwkJY21kMC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfRFhf UkVBREJBQ0tfQ09UQUJMRTsKKwkJY21kMC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kMC0+Ym9k eSk7CisJCWNtZDAtPmJvZHkuY2lkID0gdmNvdGJsLT5jdHgtPmlkOworCQljbWQwLT5ib2R5LnR5 cGUgPSB2Y290YmwtPnR5cGU7CisJCWNtZDEgPSAodm9pZCAqKSAmY21kMFsxXTsKKwkJdmNvdGJs LT5zaXplX3JlYWRfYmFjayA9IHJlcy0+YmFja3VwX3NpemU7CisJfQorCWNtZDEtPmhlYWRlci5p ZCA9IFNWR0FfM0RfQ01EX0RYX1NFVF9DT1RBQkxFOworCWNtZDEtPmhlYWRlci5zaXplID0gc2l6 ZW9mKGNtZDEtPmJvZHkpOworCWNtZDEtPmJvZHkuY2lkID0gdmNvdGJsLT5jdHgtPmlkOworCWNt ZDEtPmJvZHkudHlwZSA9IHZjb3RibC0+dHlwZTsKKwljbWQxLT5ib2R5Lm1vYmlkID0gU1ZHQTNE X0lOVkFMSURfSUQ7CisJY21kMS0+Ym9keS52YWxpZFNpemVJbkJ5dGVzID0gMDsKKwl2bXdfZmlm b19jb21taXRfZmx1c2goZGV2X3ByaXYsIHN1Ym1pdF9zaXplKTsKKwl2Y290YmwtPnNjcnViYmVk ID0gdHJ1ZTsKKworCS8qIFRyaWdnZXIgYSBjcmVhdGUoKSBvbiBuZXh0IHZhbGlkYXRlLiAqLwor CXJlcy0+aWQgPSAtMTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZtd19jb3RhYmxlX3Vu YmluZCAtIENvdGFibGUgcmVzb3VyY2UgdW5iaW5kIGNhbGxiYWNrCisgKgorICogQHJlczogUG9p bnRlciB0byB0aGUgY290YWJsZSByZXNvdXJjZS4KKyAqIEByZWFkYmFjazogV2hldGhlciB0byBy ZWFkIGJhY2sgY290YWJsZSBkYXRhIHRvIHRoZSBiYWNrdXAgYnVmZmVyLgorICogdmFsX2J1Zjog UG9pbnRlciB0byBhIHN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyIHByZXBhcmVkIGJ5IHRoZSBj YWxsZXIKKyAqIGZvciBjb252ZW5pZW5jZSAvIGZlbmNpbmcuCisgKgorICogVW5iaW5kcyB0aGUg Y290YWJsZSBmcm9tIHRoZSBkZXZpY2UgYW5kIGZlbmNlcyB0aGUgYmFja3VwIGJ1ZmZlci4KKyAq Lworc3RhdGljIGludCB2bXdfY290YWJsZV91bmJpbmQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVz LAorCQkJICAgICAgYm9vbCByZWFkYmFjaywKKwkJCSAgICAgIHN0cnVjdCB0dG1fdmFsaWRhdGVf YnVmZmVyICp2YWxfYnVmKQoreworCXN0cnVjdCB2bXdfY290YWJsZSAqdmNvdGJsID0gdm13X2Nv dGFibGUocmVzKTsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJp djsKKwlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvID0gdmFsX2J1Zi0+Ym87CisJc3RydWN0 IHZtd19mZW5jZV9vYmogKmZlbmNlOworCWludCByZXQ7CisKKwlpZiAobGlzdF9lbXB0eSgmcmVz LT5tb2JfaGVhZCkpCisJCXJldHVybiAwOworCisJV0FSTl9PTl9PTkNFKGJvLT5tZW0ubWVtX3R5 cGUgIT0gVk1XX1BMX01PQik7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYm8tPnJlc3YtPmxvY2su YmFzZSk7CisKKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7CisJaWYgKCF2 Y290YmwtPnNjcnViYmVkKQorCQl2bXdfZHhfY29udGV4dF9zY3J1Yl9jb3RhYmxlcyh2Y290Ymwt PmN0eCwgcmVhZGJhY2spOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgp OworCSh2b2lkKSB2bXdfZXhlY2J1Zl9mZW5jZV9jb21tYW5kcyhOVUxMLCBkZXZfcHJpdiwgJmZl bmNlLCBOVUxMKTsKKwl2bXdfZmVuY2Vfc2luZ2xlX2JvKGJvLCBmZW5jZSk7CisJaWYgKGxpa2Vs eShmZW5jZSAhPSBOVUxMKSkKKwkJdm13X2ZlbmNlX29ial91bnJlZmVyZW5jZSgmZmVuY2UpOwor CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2bXdfY290YWJsZV9yZWFkYmFjayAtIFJlYWQg YmFjayBhIGNvdGFibGUgd2l0aG91dCB1bmJpbmRpbmcuCisgKgorICogQHJlczogVGhlIGNvdGFi bGUgcmVzb3VyY2UuCisgKgorICogUmVhZHMgYmFjayBhIGNvdGFibGUgdG8gaXRzIGJhY2tpbmcg bW9iIHdpdGhvdXQgc2NydWJiaW5nIHRoZSBNT0IgZnJvbQorICogdGhlIGNvdGFibGUuIFRoZSBN T0IgaXMgZmVuY2VkIGZvciBzdWJzZXF1ZW50IENQVSBhY2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQg dm13X2NvdGFibGVfcmVhZGJhY2soc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXN0cnVj dCB2bXdfY290YWJsZSAqdmNvdGJsID0gdm13X2NvdGFibGUocmVzKTsKKwlzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKworCXN0cnVjdCB7CisJCVNWR0EzZENt ZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZERYUmVhZGJhY2tDT1RhYmxlIGJvZHk7CisJfSAq Y21kOworCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICpmZW5jZTsKKworCWlmICghdmNvdGJsLT5zY3J1 YmJlZCkgeworCQljbWQgPSB2bXdfZmlmb19yZXNlcnZlX2R4KGRldl9wcml2LCBzaXplb2YoKmNt ZCksCisJCQkJCSAgU1ZHQTNEX0lOVkFMSURfSUQpOworCQlpZiAoIWNtZCkgeworCQkJRFJNX0VS Uk9SKCJGYWlsZWQgcmVzZXJ2aW5nIEZJRk8gc3BhY2UgZm9yIGNvdGFibGUgIgorCQkJCSAgInJl YWRiYWNrLlxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQljbWQtPmhlYWRlci5pZCA9 IFNWR0FfM0RfQ01EX0RYX1JFQURCQUNLX0NPVEFCTEU7CisJCWNtZC0+aGVhZGVyLnNpemUgPSBz aXplb2YoY21kLT5ib2R5KTsKKwkJY21kLT5ib2R5LmNpZCA9IHZjb3RibC0+Y3R4LT5pZDsKKwkJ Y21kLT5ib2R5LnR5cGUgPSB2Y290YmwtPnR5cGU7CisJCXZjb3RibC0+c2l6ZV9yZWFkX2JhY2sg PSByZXMtPmJhY2t1cF9zaXplOworCQl2bXdfZmlmb19jb21taXQoZGV2X3ByaXYsIHNpemVvZigq Y21kKSk7CisJfQorCisJKHZvaWQpIHZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRzKE5VTEwsIGRl dl9wcml2LCAmZmVuY2UsIE5VTEwpOworCXZtd19mZW5jZV9zaW5nbGVfYm8oJnJlcy0+YmFja3Vw LT5iYXNlLCBmZW5jZSk7CisJdm13X2ZlbmNlX29ial91bnJlZmVyZW5jZSgmZmVuY2UpOworCisJ cmV0dXJuIDA7Cit9CisKKy8qKgorICogdm13X2NvdGFibGVfcmVzaXplIC0gUmVzaXplIGEgY290 YWJsZS4KKyAqCisgKiBAcmVzOiBUaGUgY290YWJsZSByZXNvdXJjZS4KKyAqIEBuZXdfc2l6ZTog VGhlIG5ldyBzaXplLgorICoKKyAqIFJlc2l6ZXMgYSBjb3RhYmxlIGFuZCBiaW5kcyB0aGUgbmV3 IGJhY2t1cCBidWZmZXIuCisgKiBPbiBmYWlsdXJlIHRoZSBjb3RhYmxlIGlzIGxlZnQgaW50YWN0 LgorICogSW1wb3J0YW50ISBUaGlzIGZ1bmN0aW9uIG1heSBub3QgZmFpbCBvbmNlIHRoZSBNT0Ig c3dpdGNoIGhhcyBiZWVuCisgKiBjb21taXR0ZWQgdG8gaGFyZHdhcmUuIFRoYXQgd291bGQgcHV0 IHRoZSBkZXZpY2UgY29udGV4dCBpbiBhbgorICogaW52YWxpZCBzdGF0ZSB3aGljaCB3ZSBjYW4n dCBjdXJyZW50bHkgcmVjb3ZlciBmcm9tLgorICovCitzdGF0aWMgaW50IHZtd19jb3RhYmxlX3Jl c2l6ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKwlzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKwlzdHJ1Y3Qgdm13X2Nv dGFibGUgKnZjb3RibCA9IHZtd19jb3RhYmxlKHJlcyk7CisJc3RydWN0IHZtd19kbWFfYnVmZmVy ICpidWYsICpvbGRfYnVmID0gcmVzLT5iYWNrdXA7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 ICpibywgKm9sZF9ibyA9ICZyZXMtPmJhY2t1cC0+YmFzZTsKKwlzaXplX3Qgb2xkX3NpemUgPSBy ZXMtPmJhY2t1cF9zaXplOworCXNpemVfdCBvbGRfc2l6ZV9yZWFkX2JhY2sgPSB2Y290YmwtPnNp emVfcmVhZF9iYWNrOworCXNpemVfdCBjdXJfc2l6ZV9yZWFkX2JhY2s7CisJc3RydWN0IHR0bV9i b19rbWFwX29iaiBvbGRfbWFwLCBuZXdfbWFwOworCWludCByZXQ7CisJc2l6ZV90IGk7CisKKwly ZXQgPSB2bXdfY290YWJsZV9yZWFkYmFjayhyZXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwljdXJfc2l6ZV9yZWFkX2JhY2sgPSB2Y290YmwtPnNpemVfcmVhZF9iYWNrOworCXZjb3Ri bC0+c2l6ZV9yZWFkX2JhY2sgPSBvbGRfc2l6ZV9yZWFkX2JhY2s7CisKKwkvKgorCSAqIFdoaWxl IGRldmljZSBpcyBwcm9jZXNzaW5nLCBBbGxvY2F0ZSBhbmQgcmVzZXJ2ZSBhIGJ1ZmZlciBvYmpl Y3QKKwkgKiBmb3IgdGhlIG5ldyBDT1RhYmxlLiBJbml0aWFsbHkgcGluIHRoZSBidWZmZXIgb2Jq ZWN0IHRvIG1ha2Ugc3VyZQorCSAqIHdlIGNhbiB1c2UgdHJ5cmVzZXJ2ZSB3aXRob3V0IGZhaWx1 cmUuCisJICovCisJYnVmID0ga3phbGxvYyhzaXplb2YoKmJ1ZiksIEdGUF9LRVJORUwpOworCWlm ICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHZtd19kbWFidWZfaW5pdChkZXZf cHJpdiwgYnVmLCBuZXdfc2l6ZSwgJnZtd19tb2JfbmVfcGxhY2VtZW50LAorCQkJICAgICAgdHJ1 ZSwgdm13X2RtYWJ1Zl9ib19mcmVlKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVk IGluaXRpYWxpemluZyBuZXcgY290YWJsZSBNT0IuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlibyA9ICZidWYtPmJhc2U7CisJV0FSTl9PTl9PTkNFKHR0bV9ib19yZXNlcnZlKGJvLCBmYWxz ZSwgdHJ1ZSwgZmFsc2UsIE5VTEwpKTsKKworCXJldCA9IHR0bV9ib193YWl0KG9sZF9ibywgZmFs c2UsIGZhbHNlLCBmYWxzZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlEUk1fRVJS T1IoIkZhaWxlZCB3YWl0aW5nIGZvciBjb3RhYmxlIHVuYmluZC5cbiIpOworCQlnb3RvIG91dF93 YWl0OworCX0KKworCS8qCisJICogRG8gYSBwYWdlIGJ5IHBhZ2UgY29weSBvZiBDT1RhYmxlcy4g VGhpcyBlbGltaW5hdGVzIHNsb3cgdm1hcCgpcy4KKwkgKiBUaGlzIHNob3VsZCByZWFsbHkgYmUg YSBUVE0gdXRpbGl0eS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgb2xkX2JvLT5udW1fcGFnZXM7 ICsraSkgeworCQlib29sIGR1bW15OworCisJCXJldCA9IHR0bV9ib19rbWFwKG9sZF9ibywgaSwg MSwgJm9sZF9tYXApOworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCQlEUk1fRVJST1Io IkZhaWxlZCBtYXBwaW5nIG9sZCBDT1RhYmxlIG9uIHJlc2l6ZS5cbiIpOworCQkJZ290byBvdXRf d2FpdDsKKwkJfQorCQlyZXQgPSB0dG1fYm9fa21hcChibywgaSwgMSwgJm5ld19tYXApOworCQlp ZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCBtYXBwaW5nIG5l dyBDT1RhYmxlIG9uIHJlc2l6ZS5cbiIpOworCQkJZ290byBvdXRfbWFwX25ldzsKKwkJfQorCQlt ZW1jcHkodHRtX2ttYXBfb2JqX3ZpcnR1YWwoJm5ld19tYXAsICZkdW1teSksCisJCSAgICAgICB0 dG1fa21hcF9vYmpfdmlydHVhbCgmb2xkX21hcCwgJmR1bW15KSwKKwkJICAgICAgIFBBR0VfU0la RSk7CisJCXR0bV9ib19rdW5tYXAoJm5ld19tYXApOworCQl0dG1fYm9fa3VubWFwKCZvbGRfbWFw KTsKKwl9CisKKwkvKiBVbnBpbiBuZXcgYnVmZmVyLCBhbmQgc3dpdGNoIGJhY2t1cCBidWZmZXJz LiAqLworCXJldCA9IHR0bV9ib192YWxpZGF0ZShibywgJnZtd19tb2JfcGxhY2VtZW50LCBmYWxz ZSwgZmFsc2UpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJRFJNX0VSUk9SKCJGYWls ZWQgdmFsaWRhdGluZyBuZXcgQ09UYWJsZSBiYWNrdXAgYnVmZmVyLlxuIik7CisJCWdvdG8gb3V0 X3dhaXQ7CisJfQorCisJcmVzLT5iYWNrdXAgPSBidWY7CisJcmVzLT5iYWNrdXBfc2l6ZSA9IG5l d19zaXplOworCXZjb3RibC0+c2l6ZV9yZWFkX2JhY2sgPSBjdXJfc2l6ZV9yZWFkX2JhY2s7CisK KwkvKgorCSAqIE5vdyB0ZWxsIHRoZSBkZXZpY2UgdG8gc3dpdGNoLiBJZiB0aGlzIGZhaWxzLCB0 aGVuIHdlIG5lZWQgdG8KKwkgKiByZXZlcnQgdGhlIGZ1bGwgcmVzaXplLgorCSAqLworCXJldCA9 IHZtd19jb3RhYmxlX3Vuc2NydWIocmVzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFp bGVkIHN3aXRjaGluZyBDT1RhYmxlIGJhY2t1cCBidWZmZXIuXG4iKTsKKwkJcmVzLT5iYWNrdXAg PSBvbGRfYnVmOworCQlyZXMtPmJhY2t1cF9zaXplID0gb2xkX3NpemU7CisJCXZjb3RibC0+c2l6 ZV9yZWFkX2JhY2sgPSBvbGRfc2l6ZV9yZWFkX2JhY2s7CisJCWdvdG8gb3V0X3dhaXQ7CisJfQor CisJLyogTGV0IGdvIG9mIHRoZSBvbGQgbW9iLiAqLworCWxpc3RfZGVsKCZyZXMtPm1vYl9oZWFk KTsKKwlsaXN0X2FkZF90YWlsKCZyZXMtPm1vYl9oZWFkLCAmYnVmLT5yZXNfbGlzdCk7CisJdm13 X2RtYWJ1Zl91bnJlZmVyZW5jZSgmb2xkX2J1Zik7CisJcmVzLT5pZCA9IHZjb3RibC0+dHlwZTsK KworCXJldHVybiAwOworCitvdXRfbWFwX25ldzoKKwl0dG1fYm9fa3VubWFwKCZvbGRfbWFwKTsK K291dF93YWl0OgorCXR0bV9ib191bnJlc2VydmUoYm8pOworCXZtd19kbWFidWZfdW5yZWZlcmVu Y2UoJmJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZtd19jb3RhYmxlX2NyZWF0 ZSAtIENvdGFibGUgcmVzb3VyY2UgY3JlYXRlIGNhbGxiYWNrCisgKgorICogQHJlczogUG9pbnRl ciB0byBhIGNvdGFibGUgcmVzb3VyY2UuCisgKgorICogVGhlcmUgaXMgbm8gc2VwYXJhdGUgY3Jl YXRlIGNvbW1hbmQgZm9yIGNvdGFibGVzLCBzbyB0aGlzIGNhbGxiYWNrLCB3aGljaAorICogaXMg Y2FsbGVkIGJlZm9yZSBiaW5kKCkgaW4gdGhlIHZhbGlkYXRpb24gc2VxdWVuY2UgaXMgaW5zdGVh ZCB1c2VkIGZvciB0d28KKyAqIHRoaW5ncy4KKyAqIDEpIFVuc2NydWIgdGhlIGNvdGFibGUgaWYg aXQgaXMgc2NydWJiZWQgYW5kIHN0aWxsIGF0dGFjaGVkIHRvIGEgYmFja3VwCisgKiAgICBidWZm ZXIsIHRoYXQgaXMsIGlmIEByZXMtPm1vYl9oZWFkIGlzIG5vbi1lbXB0eS4KKyAqIDIpIFJlc2l6 ZSB0aGUgY290YWJsZSBpZiBuZWVkZWQuCisgKi8KK3N0YXRpYyBpbnQgdm13X2NvdGFibGVfY3Jl YXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3Qgdm13X2NvdGFibGUgKnZj b3RibCA9IHZtd19jb3RhYmxlKHJlcyk7CisJc2l6ZV90IG5ld19zaXplID0gcmVzLT5iYWNrdXBf c2l6ZTsKKwlzaXplX3QgbmVlZGVkX3NpemU7CisJaW50IHJldDsKKworCS8qIENoZWNrIHdoZXRo ZXIgd2UgbmVlZCB0byByZXNpemUgdGhlIGNvdGFibGUgKi8KKwluZWVkZWRfc2l6ZSA9ICh2Y290 YmwtPnNlZW5fZW50cmllcyArIDEpICogY29faW5mb1t2Y290YmwtPnR5cGVdLnNpemU7CisJd2hp bGUgKG5lZWRlZF9zaXplID4gbmV3X3NpemUpCisJCW5ld19zaXplICo9IDI7CisKKwlpZiAobGlr ZWx5KG5ld19zaXplIDw9IHJlcy0+YmFja3VwX3NpemUpKSB7CisJCWlmICh2Y290YmwtPnNjcnVi YmVkICYmICFsaXN0X2VtcHR5KCZyZXMtPm1vYl9oZWFkKSkgeworCQkJcmV0ID0gdm13X2NvdGFi bGVfdW5zY3J1YihyZXMpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXJl cy0+aWQgPSB2Y290YmwtPnR5cGU7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiB2bXdfY290 YWJsZV9yZXNpemUocmVzLCBuZXdfc2l6ZSk7Cit9CisKKy8qKgorICogdm13X2h3X2NvdGFibGVf ZGVzdHJveSAtIENvdGFibGUgaHdfZGVzdHJveSBjYWxsYmFjaworICoKKyAqIEByZXM6IFBvaW50 ZXIgdG8gYSBjb3RhYmxlIHJlc291cmNlLgorICoKKyAqIFRoZSBmaW5hbCAocGFydCBvZiByZXNv dXJjZSBkZXN0cnVjdGlvbikgZGVzdHJveSBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQgdm13 X2h3X2NvdGFibGVfZGVzdHJveShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7CisJKHZvaWQp IHZtd19jb3RhYmxlX2Rlc3Ryb3kocmVzKTsKK30KKworc3RhdGljIHNpemVfdCBjb3RhYmxlX2Fj Y19zaXplOworCisvKioKKyAqIHZtd19jb3RhYmxlX2ZyZWUgLSBDb3RhYmxlIHJlc291cmNlIGRl c3RydWN0b3IKKyAqCisgKiBAcmVzOiBQb2ludGVyIHRvIGEgY290YWJsZSByZXNvdXJjZS4KKyAq Lworc3RhdGljIHZvaWQgdm13X2NvdGFibGVfZnJlZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMp Cit7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CisKKwlr ZnJlZShyZXMpOworCXR0bV9tZW1fZ2xvYmFsX2ZyZWUodm13X21lbV9nbG9iKGRldl9wcml2KSwg Y290YWJsZV9hY2Nfc2l6ZSk7Cit9CisKKy8qKgorICogdm13X2NvdGFibGVfYWxsb2MgLSBDcmVh dGUgYSBjb3RhYmxlIHJlc291cmNlCisgKgorICogQGRldl9wcml2OiBQb2ludGVyIHRvIGEgZGV2 aWNlIHByaXZhdGUgc3RydWN0LgorICogQGN0eDogUG9pbnRlciB0byB0aGUgY29udGV4dCByZXNv dXJjZS4KKyAqIFRoZSBjb3RhYmxlIHJlc291cmNlIHdpbGwgbm90IGFkZCBhIHJlZmNvdW50Lgor ICogQHR5cGU6IFRoZSBjb3RhYmxlIHR5cGUuCisgKi8KK3N0cnVjdCB2bXdfcmVzb3VyY2UgKnZt d19jb3RhYmxlX2FsbG9jKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgICAg IHN0cnVjdCB2bXdfcmVzb3VyY2UgKmN0eCwKKwkJCQkgICAgICAgdTMyIHR5cGUpCit7CisJc3Ry dWN0IHZtd19jb3RhYmxlICp2Y290Ymw7CisJaW50IHJldDsKKwl1MzIgbnVtX2VudHJpZXM7CisK KwlpZiAodW5saWtlbHkoY290YWJsZV9hY2Nfc2l6ZSA9PSAwKSkKKwkJY290YWJsZV9hY2Nfc2l6 ZSA9IHR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB2bXdfY290YWJsZSkpOworCisJcmV0ID0g dHRtX21lbV9nbG9iYWxfYWxsb2Modm13X21lbV9nbG9iKGRldl9wcml2KSwKKwkJCQkgICBjb3Rh YmxlX2FjY19zaXplLCBmYWxzZSwgdHJ1ZSk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVy biBFUlJfUFRSKHJldCk7CisKKwl2Y290YmwgPSBremFsbG9jKHNpemVvZigqdmNvdGJsKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KHZjb3RibCA9PSBOVUxMKSkgeworCQlyZXQgPSAtRU5P TUVNOworCQlnb3RvIG91dF9ub19hbGxvYzsKKwl9CisKKwlyZXQgPSB2bXdfcmVzb3VyY2VfaW5p dChkZXZfcHJpdiwgJnZjb3RibC0+cmVzLCB0cnVlLAorCQkJCXZtd19jb3RhYmxlX2ZyZWUsICZ2 bXdfY290YWJsZV9mdW5jKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dF9u b19pbml0OworCisJSU5JVF9MSVNUX0hFQUQoJnZjb3RibC0+cmVzb3VyY2VfbGlzdCk7CisJdmNv dGJsLT5yZXMuaWQgPSB0eXBlOworCXZjb3RibC0+cmVzLmJhY2t1cF9zaXplID0gUEFHRV9TSVpF OworCW51bV9lbnRyaWVzID0gUEFHRV9TSVpFIC8gY29faW5mb1t0eXBlXS5zaXplOworCWlmIChu dW1fZW50cmllcyA8IGNvX2luZm9bdHlwZV0ubWluX2luaXRpYWxfZW50cmllcykgeworCQl2Y290 YmwtPnJlcy5iYWNrdXBfc2l6ZSA9IGNvX2luZm9bdHlwZV0ubWluX2luaXRpYWxfZW50cmllcyAq CisJCQljb19pbmZvW3R5cGVdLnNpemU7CisJCXZjb3RibC0+cmVzLmJhY2t1cF9zaXplID0KKwkJ CSh2Y290YmwtPnJlcy5iYWNrdXBfc2l6ZSArIFBBR0VfU0laRSAtIDEpICYgUEFHRV9NQVNLOwor CX0KKworCXZjb3RibC0+c2NydWJiZWQgPSB0cnVlOworCXZjb3RibC0+c2Vlbl9lbnRyaWVzID0g LTE7CisJdmNvdGJsLT50eXBlID0gdHlwZTsKKwl2Y290YmwtPmN0eCA9IGN0eDsKKworCXZtd19y ZXNvdXJjZV9hY3RpdmF0ZSgmdmNvdGJsLT5yZXMsIHZtd19od19jb3RhYmxlX2Rlc3Ryb3kpOwor CisJcmV0dXJuICZ2Y290YmwtPnJlczsKKworb3V0X25vX2luaXQ6CisJa2ZyZWUodmNvdGJsKTsK K291dF9ub19hbGxvYzoKKwl0dG1fbWVtX2dsb2JhbF9mcmVlKHZtd19tZW1fZ2xvYihkZXZfcHJp diksIGNvdGFibGVfYWNjX3NpemUpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKy8qKgor ICogdm13X2NvdGFibGVfbm90aWZ5IC0gTm90aWZ5IHRoZSBjb3RhYmxlIGFib3V0IGFuIGl0ZW0g Y3JlYXRpb24KKyAqCisgKiBAcmVzOiBQb2ludGVyIHRvIGEgY290YWJsZSByZXNvdXJjZS4KKyAq IEBpZDogSXRlbSBpZC4KKyAqLworaW50IHZtd19jb3RhYmxlX25vdGlmeShzdHJ1Y3Qgdm13X3Jl c291cmNlICpyZXMsIGludCBpZCkKK3sKKwlzdHJ1Y3Qgdm13X2NvdGFibGUgKnZjb3RibCA9IHZt d19jb3RhYmxlKHJlcyk7CisKKwlpZiAoaWQgPCAwIHx8IGlkID49IFNWR0FfQ09UQUJMRV9NQVhf SURTKSB7CisJCURSTV9FUlJPUigiSWxsZWdhbCBDT1RhYmxlIGlkLiBUeXBlIGlzICV1LiBJZCBp cyAlZFxuIiwKKwkJCSAgKHVuc2lnbmVkKSB2Y290YmwtPnR5cGUsIGlkKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJaWYgKHZjb3RibC0+c2Vlbl9lbnRyaWVzIDwgaWQpIHsKKwkJLyogVHJp Z2dlciBhIGNhbGwgdG8gY3JlYXRlKCkgb24gbmV4dCB2YWxpZGF0ZSAqLworCQlyZXMtPmlkID0g LTE7CisJCXZjb3RibC0+c2Vlbl9lbnRyaWVzID0gaWQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisK Ky8qKgorICogdm13X2NvdGFibGVfYWRkX3ZpZXcgLSBhZGQgYSB2aWV3IHRvIHRoZSBjb3RhYmxl J3MgbGlzdCBvZiBhY3RpdmUgdmlld3MuCisgKgorICogQHJlczogcG9pbnRlciBzdHJ1Y3Qgdm13 X3Jlc291cmNlIHJlcHJlc2VudGluZyB0aGUgY290YWJsZS4KKyAqIEBoZWFkOiBwb2ludGVyIHRv IHRoZSBzdHJ1Y3QgbGlzdF9oZWFkIG1lbWJlciBvZiB0aGUgcmVzb3VyY2UsIGRlZGljYXRlZAor ICogdG8gdGhlIGNvdGFibGUgYWN0aXZlIHJlc291cmNlIGxpc3QuCisgKi8KK3ZvaWQgdm13X2Nv dGFibGVfYWRkX3Jlc291cmNlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywgc3RydWN0IGxpc3Rf aGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3Qgdm13X2NvdGFibGUgKnZjb3RibCA9CisJCWNvbnRhaW5l cl9vZihyZXMsIHN0cnVjdCB2bXdfY290YWJsZSwgcmVzKTsKKworCWxpc3RfYWRkX3RhaWwoaGVh ZCwgJnZjb3RibC0+cmVzb3VyY2VfbGlzdCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Ry di5jCmluZGV4IGI4M2FkZWEuLmZkMGNiOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Ry di5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUg InZtd2dmeF9kcnYuaCIKKyNpbmNsdWRlICJ2bXdnZnhfYmluZGluZy5oIgogI2luY2x1ZGUgPGRy bS90dG0vdHRtX3BsYWNlbWVudC5oPgogI2luY2x1ZGUgPGRybS90dG0vdHRtX2JvX2RyaXZlci5o PgogI2luY2x1ZGUgPGRybS90dG0vdHRtX29iamVjdC5oPgpAQCAtMTI3LDYgKzEyOCw5IEBACiAj ZGVmaW5lIERSTV9JT0NUTF9WTVdfU1lOQ0NQVQkJCQkJXAogCURSTV9JT1coRFJNX0NPTU1BTkRf QkFTRSArIERSTV9WTVdfU1lOQ0NQVSwJCVwKIAkJIHN0cnVjdCBkcm1fdm13X3N5bmNjcHVfYXJn KQorI2RlZmluZSBEUk1fSU9DVExfVk1XX0NSRUFURV9FWFRFTkRFRF9DT05URVhUCQkJXAorCURS TV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fVk1XX0NSRUFURV9FWFRFTkRFRF9DT05URVhU LAlcCisJCXN0cnVjdCBkcm1fdm13X2NvbnRleHRfYXJnKQogCiAvKioKICAqIFRoZSBjb3JlIERS TSB2ZXJzaW9uIG9mIHRoaXMgbWFjcm8gZG9lc24ndCBhY2NvdW50IGZvcgpAQCAtMTY4LDggKzE3 Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2Mgdm13X2lvY3Rsc1tdID0g ewogCQkgICAgICBEUk1fVU5MT0NLRUQgfCBEUk1fUkVOREVSX0FMTE9XKSwKIAlWTVdfSU9DVExf REVGKFZNV19SRUZfU1VSRkFDRSwgdm13X3N1cmZhY2VfcmVmZXJlbmNlX2lvY3RsLAogCQkgICAg ICBEUk1fQVVUSCB8IERSTV9VTkxPQ0tFRCB8IERSTV9SRU5ERVJfQUxMT1cpLAotCVZNV19JT0NU TF9ERUYoVk1XX0VYRUNCVUYsIHZtd19leGVjYnVmX2lvY3RsLAotCQkgICAgICBEUk1fQVVUSCB8 IERSTV9VTkxPQ0tFRCB8IERSTV9SRU5ERVJfQUxMT1cpLAorCVZNV19JT0NUTF9ERUYoVk1XX0VY RUNCVUYsIE5VTEwsIERSTV9BVVRIIHwgRFJNX1VOTE9DS0VEIHwKKwkJICAgICAgRFJNX1JFTkRF Ul9BTExPVyksCiAJVk1XX0lPQ1RMX0RFRihWTVdfRkVOQ0VfV0FJVCwgdm13X2ZlbmNlX29ial93 YWl0X2lvY3RsLAogCQkgICAgICBEUk1fVU5MT0NLRUQgfCBEUk1fUkVOREVSX0FMTE9XKSwKIAlW TVdfSU9DVExfREVGKFZNV19GRU5DRV9TSUdOQUxFRCwKQEAgLTIwNiw2ICsyMTAsOSBAQCBzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIHZtd19pb2N0bHNbXSA9IHsKIAlWTVdfSU9D VExfREVGKFZNV19TWU5DQ1BVLAogCQkgICAgICB2bXdfdXNlcl9kbWFidWZfc3luY2NwdV9pb2N0 bCwKIAkJICAgICAgRFJNX1VOTE9DS0VEIHwgRFJNX1JFTkRFUl9BTExPVyksCisJVk1XX0lPQ1RM X0RFRihWTVdfQ1JFQVRFX0VYVEVOREVEX0NPTlRFWFQsCisJCSAgICAgIHZtd19leHRlbmRlZF9j b250ZXh0X2RlZmluZV9pb2N0bCwKKwkJICAgICAgRFJNX0FVVEggfCBEUk1fVU5MT0NLRUQgfCBE Uk1fUkVOREVSX0FMTE9XKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2bXdf cGNpX2lkX2xpc3RbXSA9IHsKQEAgLTM5MCw4ICszOTcsMTAgQEAgc3RhdGljIGludCB2bXdfcmVx dWVzdF9kZXZpY2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIAl9CiAJdm13X2ZlbmNl X2ZpZm9fdXAoZGV2X3ByaXYtPmZtYW4pOwogCWRldl9wcml2LT5jbWFuID0gdm13X2NtZGJ1Zl9t YW5fY3JlYXRlKGRldl9wcml2KTsKLQlpZiAoSVNfRVJSKGRldl9wcml2LT5jbWFuKSkKKwlpZiAo SVNfRVJSKGRldl9wcml2LT5jbWFuKSkgewogCQlkZXZfcHJpdi0+Y21hbiA9IE5VTEw7CisJCWRl dl9wcml2LT5oYXNfZHggPSBmYWxzZTsKKwl9CiAKIAlyZXQgPSB2bXdfcmVxdWVzdF9kZXZpY2Vf bGF0ZShkZXZfcHJpdik7CiAJaWYgKHJldCkKQEAgLTg0OCw2ICs4NTcsMTQgQEAgc3RhdGljIGlu dCB2bXdfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBj aGlwc2V0KQogCQl9CiAJfQogCisJaWYgKGRldl9wcml2LT5oYXNfbW9iKSB7CisJCXNwaW5fbG9j aygmZGV2X3ByaXYtPmNhcF9sb2NrKTsKKwkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19E RVZfQ0FQLCBTVkdBM0RfREVWQ0FQX0RYKTsKKwkJZGV2X3ByaXYtPmhhc19keCA9ICEhdm13X3Jl YWQoZGV2X3ByaXYsIFNWR0FfUkVHX0RFVl9DQVApOworCQlzcGluX3VubG9jaygmZGV2X3ByaXYt PmNhcF9sb2NrKTsKKwl9CisKKwogCXJldCA9IHZtd19rbXNfaW5pdChkZXZfcHJpdik7CiAJaWYg KHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfbm9fa21zOwpAQCAtODU3LDYgKzg3NCw4 IEBAIHN0YXRpYyBpbnQgdm13X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVu c2lnbmVkIGxvbmcgY2hpcHNldCkKIAlpZiAocmV0KQogCQlnb3RvIG91dF9ub19maWZvOwogCisJ RFJNX0lORk8oIkRYOiAlc1xuIiwgZGV2X3ByaXYtPmhhc19keCA/ICJ5ZXMuIiA6ICJuby4iKTsK KwogCWlmIChkZXZfcHJpdi0+ZW5hYmxlX2ZiKSB7CiAJCXZtd19maWZvX3Jlc291cmNlX2luYyhk ZXZfcHJpdik7CiAJCXZtd19zdmdhX2VuYWJsZShkZXZfcHJpdik7CkBAIC05MDAsNiArOTE5LDgg QEAgb3V0X2VycjA6CiAJZm9yIChpID0gdm13X3Jlc19jb250ZXh0OyBpIDwgdm13X3Jlc19tYXg7 ICsraSkKIAkJaWRyX2Rlc3Ryb3koJmRldl9wcml2LT5yZXNfaWRyW2ldKTsKIAorCWlmIChkZXZf cHJpdi0+Y3R4LnN0YWdlZF9iaW5kaW5ncykKKwkJdm13X2JpbmRpbmdfc3RhdGVfZnJlZShkZXZf cHJpdi0+Y3R4LnN0YWdlZF9iaW5kaW5ncyk7CiAJa2ZyZWUoZGV2X3ByaXYpOwogCXJldHVybiBy ZXQ7CiB9CkBAIC05NDUsNiArOTY2LDggQEAgc3RhdGljIGludCB2bXdfZHJpdmVyX3VubG9hZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCWlvdW5tYXAoZGV2X3ByaXYtPm1taW9fdmlydCk7CiAJ YXJjaF9waHlzX3djX2RlbChkZXZfcHJpdi0+bW1pb19tdHJyKTsKIAkodm9pZCl0dG1fYm9fZGV2 aWNlX3JlbGVhc2UoJmRldl9wcml2LT5iZGV2KTsKKwlpZiAoZGV2X3ByaXYtPmN0eC5zdGFnZWRf YmluZGluZ3MpCisJCXZtd19iaW5kaW5nX3N0YXRlX2ZyZWUoZGV2X3ByaXYtPmN0eC5zdGFnZWRf YmluZGluZ3MpOwogCXZtd190dG1fZ2xvYmFsX3JlbGVhc2UoZGV2X3ByaXYpOwogCiAJZm9yIChp ID0gdm13X3Jlc19jb250ZXh0OyBpIDwgdm13X3Jlc19tYXg7ICsraSkKQEAgLTEwODIsMTEgKzEx MDUsMjEgQEAgc3RhdGljIGxvbmcgdm13X2dlbmVyaWNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAs IHVuc2lnbmVkIGludCBjbWQsCiAJCWNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyAqaW9jdGwg PQogCQkJJnZtd19pb2N0bHNbbnIgLSBEUk1fQ09NTUFORF9CQVNFXTsKIAotCQlpZiAodW5saWtl bHkoaW9jdGwtPmNtZCAhPSBjbWQpKSB7Ci0JCQlEUk1fRVJST1IoIkludmFsaWQgY29tbWFuZCBm b3JtYXQsIGlvY3RsICVkXG4iLAotCQkJCSAgbnIgLSBEUk1fQ09NTUFORF9CQVNFKTsKLQkJCXJl dHVybiAtRUlOVkFMOworCQlpZiAobnIgPT0gRFJNX0NPTU1BTkRfQkFTRSArIERSTV9WTVdfRVhF Q0JVRikgeworCQkJcmV0ID0gKGxvbmcpIGRybV9pb2N0bF9wZXJtaXQoaW9jdGwtPmZsYWdzLCBm aWxlX3ByaXYpOworCQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJCQlyZXR1cm4gcmV0Owor CisJCQlpZiAodW5saWtlbHkoKGNtZCAmIChJT0NfSU4gfCBJT0NfT1VUKSkgIT0gSU9DX0lOKSkK KwkJCQlnb3RvIG91dF9pb19lbmNvZGluZzsKKworCQkJcmV0dXJuIChsb25nKSB2bXdfZXhlY2J1 Zl9pb2N0bChkZXYsIGFyZywgZmlsZV9wcml2LAorCQkJCQkJCV9JT0NfU0laRShjbWQpKTsKIAkJ fQorCisJCWlmICh1bmxpa2VseShpb2N0bC0+Y21kICE9IGNtZCkpCisJCQlnb3RvIG91dF9pb19l bmNvZGluZzsKKwogCQlmbGFncyA9IGlvY3RsLT5mbGFnczsKIAl9IGVsc2UgaWYgKCFkcm1faW9j dGxfZmxhZ3MobnIsICZmbGFncykpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTEwNiw2ICsxMTM5 LDEyIEBAIHN0YXRpYyBsb25nIHZtd19nZW5lcmljX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1 bnNpZ25lZCBpbnQgY21kLAogCQl0dG1fcmVhZF91bmxvY2soJnZtYXN0ZXItPmxvY2spOwogCiAJ cmV0dXJuIHJldDsKKworb3V0X2lvX2VuY29kaW5nOgorCURSTV9FUlJPUigiSW52YWxpZCBjb21t YW5kIGZvcm1hdCwgaW9jdGwgJWRcbiIsCisJCSAgbnIgLSBEUk1fQ09NTUFORF9CQVNFKTsKKwor CXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgbG9uZyB2bXdfdW5sb2NrZWRfaW9jdGwoc3Ry dWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCkBAIC0xMTU2LDcgKzExOTUsNiBAQCBz dGF0aWMgdm9pZCB2bXdfbWFzdGVyX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlr ZnJlZSh2bWFzdGVyKTsKIH0KIAotCiBzdGF0aWMgaW50IHZtd19tYXN0ZXJfc2V0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAogCQkJICBi b29sIGZyb21fb3BlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKaW5kZXggZjUxM2U0 NC4uYjg4ZWE1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKQEAgLTU5LDYgKzU5 LDggQEAKICNkZWZpbmUgVk1XR0ZYX05VTV9HQl9TSEFERVIgMjAwMDAKICNkZWZpbmUgVk1XR0ZY X05VTV9HQl9TVVJGQUNFIDMyNzY4CiAjZGVmaW5lIFZNV0dGWF9OVU1fR0JfU0NSRUVOX1RBUkdF VCBWTVdHRlhfTUFYX0RJU1BMQVlTCisjZGVmaW5lIFZNV0dGWF9OVU1fRFhDT05URVhUIDI1Ngor I2RlZmluZSBWTVdHRlhfTlVNX0RYUVVFUlkgNTEyCiAjZGVmaW5lIFZNV0dGWF9OVU1fTU9CIChW TVdHRlhfTlVNX0dCX0NPTlRFWFQgK1wKIAkJCVZNV0dGWF9OVU1fR0JfU0hBREVSICtcCiAJCQlW TVdHRlhfTlVNX0dCX1NVUkZBQ0UgK1wKQEAgLTEzMiw2ICsxMzQsOSBAQCBlbnVtIHZtd19yZXNf dHlwZSB7CiAJdm13X3Jlc19zdXJmYWNlLAogCXZtd19yZXNfc3RyZWFtLAogCXZtd19yZXNfc2hh ZGVyLAorCXZtd19yZXNfZHhfY29udGV4dCwKKwl2bXdfcmVzX2NvdGFibGUsCisJdm13X3Jlc192 aWV3LAogCXZtd19yZXNfbWF4CiB9OwogCkBAIC0xMzksNyArMTQ0LDggQEAgZW51bSB2bXdfcmVz X3R5cGUgewogICogUmVzb3VyY2VzIHRoYXQgYXJlIG1hbmFnZWQgdXNpbmcgY29tbWFuZCBzdHJl YW1zLgogICovCiBlbnVtIHZtd19jbWRidWZfcmVzX3R5cGUgewotCXZtd19jbWRidWZfcmVzX2Nv bXBhdF9zaGFkZXIKKwl2bXdfY21kYnVmX3Jlc19zaGFkZXIsCisJdm13X2NtZGJ1Zl9yZXNfdmll dwogfTsKIAogc3RydWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXI7CkBAIC0xNjIsMTEgKzE2OCwx MyBAQCBzdHJ1Y3Qgdm13X3N1cmZhY2UgewogCXN0cnVjdCBkcm1fdm13X3NpemUgKnNpemVzOwog CXVpbnQzMl90IG51bV9zaXplczsKIAlib29sIHNjYW5vdXQ7CisJdWludDMyX3QgYXJyYXlfc2l6 ZTsKIAkvKiBUT0RPIHNvIGZhciBqdXN0IGEgZXh0cmEgcG9pbnRlciAqLwogCXN0cnVjdCB2bXdf Y3Vyc29yX3Nub29wZXIgc25vb3BlcjsKIAlzdHJ1Y3Qgdm13X3N1cmZhY2Vfb2Zmc2V0ICpvZmZz ZXRzOwogCVNWR0EzZFRleHR1cmVGaWx0ZXIgYXV0b2dlbl9maWx0ZXI7CiAJdWludDMyX3QgbXVs dGlzYW1wbGVfY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZCB2aWV3X2xpc3Q7CiB9OwogCiBzdHJ1 Y3Qgdm13X21hcmtlcl9xdWV1ZSB7CkBAIC0xODYsNiArMTk0LDcgQEAgc3RydWN0IHZtd19maWZv X3N0YXRlIHsKIAlzdHJ1Y3QgbXV0ZXggZmlmb19tdXRleDsKIAlzdHJ1Y3Qgcndfc2VtYXBob3Jl IHJ3c2VtOwogCXN0cnVjdCB2bXdfbWFya2VyX3F1ZXVlIG1hcmtlcl9xdWV1ZTsKKwlib29sIGR4 OwogfTsKIAogc3RydWN0IHZtd19yZWxvY2F0aW9uIHsKQEAgLTI2Niw3MyArMjc1LDYgQEAgc3Ry dWN0IHZtd19waXRlciB7CiB9OwogCiAvKgotICogZW51bSB2bXdfY3R4X2JpbmRpbmdfdHlwZSAt IGFic3RyYWN0IHJlc291cmNlIHRvIGNvbnRleHQgYmluZGluZyB0eXBlcwotICovCi1lbnVtIHZt d19jdHhfYmluZGluZ190eXBlIHsKLQl2bXdfY3R4X2JpbmRpbmdfc2hhZGVyLAotCXZtd19jdHhf YmluZGluZ19ydCwKLQl2bXdfY3R4X2JpbmRpbmdfdGV4LAotCXZtd19jdHhfYmluZGluZ19tYXgK LX07Ci0KLS8qKgotICogc3RydWN0IHZtd19jdHhfYmluZGluZm8gLSBzdHJ1Y3R1cmUgcmVwcmVz ZW50aW5nIGEgc2luZ2xlIGNvbnRleHQgYmluZGluZwotICoKLSAqIEBjdHg6IFBvaW50ZXIgdG8g dGhlIGNvbnRleHQgc3RydWN0dXJlLiBOVUxMIG1lYW5zIHRoZSBiaW5kaW5nIGlzIG5vdAotICog YWN0aXZlLgotICogQHJlczogTm9uIHJlZi1jb3VudGVkIHBvaW50ZXIgdG8gdGhlIGJvdW5kIHJl c291cmNlLgotICogQGJ0OiBUaGUgYmluZGluZyB0eXBlLgotICogQGkxOiBVbmlvbiBvZiBpbmZv cm1hdGlvbiBuZWVkZWQgdG8gdW5iaW5kLgotICovCi1zdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyB7 Ci0Jc3RydWN0IHZtd19yZXNvdXJjZSAqY3R4OwotCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsK LQllbnVtIHZtd19jdHhfYmluZGluZ190eXBlIGJ0OwotCWJvb2wgc2NydWJiZWQ7Ci0JdW5pb24g ewotCQlTVkdBM2RTaGFkZXJUeXBlIHNoYWRlcl90eXBlOwotCQlTVkdBM2RSZW5kZXJUYXJnZXRU eXBlIHJ0X3R5cGU7Ci0JCXVpbnQzMiB0ZXh0dXJlX3N0YWdlOwotCX0gaTE7Ci19OwotCi0vKioK LSAqIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmcgLSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc2lu Z2xlIGNvbnRleHQgYmluZGluZwotICogICAgICAgICAgICAgICAgICAgICAgICAtIHN1aXRhYmxl IGZvciB0cmFja2luZyBpbiBhIGNvbnRleHQKLSAqCi0gKiBAY3R4X2xpc3Q6IExpc3QgaGVhZCBm b3IgY29udGV4dC4KLSAqIEByZXNfbGlzdDogTGlzdCBoZWFkIGZvciBib3VuZCByZXNvdXJjZS4K LSAqIEBiaTogQmluZGluZyBpbmZvCi0gKi8KLXN0cnVjdCB2bXdfY3R4X2JpbmRpbmcgewotCXN0 cnVjdCBsaXN0X2hlYWQgY3R4X2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCByZXNfbGlzdDsKLQlz dHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyBiaTsKLX07Ci0KLQotLyoqCi0gKiBzdHJ1Y3Qgdm13X2N0 eF9iaW5kaW5nX3N0YXRlIC0gY29udGV4dCBiaW5kaW5nIHN0YXRlCi0gKgotICogQGxpc3Q6IGxp bmtlZCBsaXN0IG9mIGluZGl2aWR1YWwgYmluZGluZ3MuCi0gKiBAcmVuZGVyX3RhcmdldHM6IFJl bmRlciB0YXJnZXQgYmluZGluZ3MuCi0gKiBAdGV4dHVyZV91bml0czogVGV4dHVyZSB1bml0cy9z YW1wbGVycyBiaW5kaW5ncy4KLSAqIEBzaGFkZXJzOiBTaGFkZXIgYmluZGluZ3MuCi0gKgotICog Tm90ZSB0aGF0IHRoaXMgc3RydWN0dXJlIGFsc28gcHJvdmlkZXMgc3RvcmFnZSBzcGFjZSBmb3Ig dGhlIGluZGl2aWR1YWwKLSAqIHN0cnVjdCB2bXdfY3R4X2JpbmRpbmcgb2JqZWN0cywgc28gdGhh dCBubyBkeW5hbWljIGFsbG9jYXRpb24gaXMgbmVlZGVkCi0gKiBmb3IgaW5kaXZpZHVhbCBiaW5k aW5ncy4KLSAqCi0gKi8KLXN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgewotCXN0cnVjdCBs aXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nIHJlbmRlcl90YXJnZXRzW1NW R0EzRF9SVF9NQVhdOwotCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmcgdGV4dHVyZV91bml0c1tTVkdB M0RfTlVNX1RFWFRVUkVfVU5JVFNdOwotCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmcgc2hhZGVyc1tT VkdBM0RfU0hBREVSVFlQRV9QUkVEWF9NQVhdOwotfTsKLQotCi0vKgogICogZW51bSB2bXdfZGlz cGxheV91bml0X3R5cGUgLSBEZXNjcmliZXMgdGhlIGRpc3BsYXkgdW5pdAogICovCiBlbnVtIHZt d19kaXNwbGF5X3VuaXRfdHlwZSB7CkBAIC0zNTYsNiArMjk4LDcgQEAgc3RydWN0IHZtd19zd19j b250ZXh0ewogCXVpbnQzMl90ICpjbWRfYm91bmNlOwogCXVpbnQzMl90IGNtZF9ib3VuY2Vfc2l6 ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBj dHhfcmVzb3VyY2VfbGlzdDsgLyogRm9yIGNvbnRleHRzIGFuZCBjb3RhYmxlcyAqLwogCXN0cnVj dCB2bXdfZG1hX2J1ZmZlciAqY3VyX3F1ZXJ5X2JvOwogCXN0cnVjdCBsaXN0X2hlYWQgcmVzX3Jl bG9jYXRpb25zOwogCXVpbnQzMl90ICpidWZfc3RhcnQ7CkBAIC0zNjMsOCArMzA2LDEzIEBAIHN0 cnVjdCB2bXdfc3dfY29udGV4dHsKIAlzdHJ1Y3Qgdm13X3Jlc291cmNlICpsYXN0X3F1ZXJ5X2N0 eDsKIAlib29sIG5lZWRzX3Bvc3RfcXVlcnlfYmFycmllcjsKIAlzdHJ1Y3Qgdm13X3Jlc291cmNl ICplcnJvcl9yZXNvdXJjZTsKLQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlIHN0YWdlZF9i aW5kaW5nczsKKwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nX3N0YXRlICpzdGFnZWRfYmluZGluZ3M7 CisJYm9vbCBzdGFnZWRfYmluZGluZ3NfaW51c2U7CiAJc3RydWN0IGxpc3RfaGVhZCBzdGFnZWRf Y21kX3JlczsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2RlICpkeF9jdHhfbm9kZTsKKwlz dHJ1Y3Qgdm13X2RtYV9idWZmZXIgKmR4X3F1ZXJ5X21vYjsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNl ICpkeF9xdWVyeV9jdHg7CisJc3RydWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbjsKIH07 CiAKIHN0cnVjdCB2bXdfbGVnYWN5X2Rpc3BsYXk7CkBAIC0zODIsNiArMzMwLDI2IEBAIHN0cnVj dCB2bXdfdmdhX3RvcG9sb2d5X3N0YXRlIHsKIAl1aW50MzJfdCBwb3NfeTsKIH07CiAKKworLyoK KyAqIHN0cnVjdCB2bXdfb3RhYmxlIC0gR3Vlc3QgTWVtb3J5IE9CamVjdCB0YWJsZSBtZXRhZGF0 YQorICoKKyAqIEBzaXplOiAgICAgICAgICAgU2l6ZSBvZiB0aGUgdGFibGUgKHBhZ2UtYWxpZ25l ZCkuCisgKiBAcGFnZV90YWJsZTogICAgIFBvaW50ZXIgdG8gYSBzdHJ1Y3Qgdm13X21vYiBob2xk aW5nIHRoZSBwYWdlIHRhYmxlLgorICovCitzdHJ1Y3Qgdm13X290YWJsZSB7CisJdW5zaWduZWQg bG9uZyBzaXplOworCXN0cnVjdCB2bXdfbW9iICpwYWdlX3RhYmxlOworCWJvb2wgZW5hYmxlZDsK K307CisKK3N0cnVjdCB2bXdfb3RhYmxlX2JhdGNoIHsKKwl1bnNpZ25lZCBudW1fb3RhYmxlczsK KwlzdHJ1Y3Qgdm13X290YWJsZSAqb3RhYmxlczsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpjb250 ZXh0OworCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqb3RhYmxlX2JvOworfTsKKwogc3RydWN0 IHZtd19wcml2YXRlIHsKIAlzdHJ1Y3QgdHRtX2JvX2RldmljZSBiZGV2OwogCXN0cnVjdCB0dG1f Ym9fZ2xvYmFsX3JlZiBib19nbG9iYWxfcmVmOwpAQCAtNDE3LDYgKzM4NSw3IEBAIHN0cnVjdCB2 bXdfcHJpdmF0ZSB7CiAJYm9vbCBoYXNfbW9iOwogCXNwaW5sb2NrX3QgaHdfbG9jazsKIAlzcGlu bG9ja190IGNhcF9sb2NrOworCWJvb2wgaGFzX2R4OwogCiAJLyoKIAkgKiBWR0EgcmVnaXN0ZXJz LgpAQCAtNTUyLDggKzUyMSw3IEBAIHN0cnVjdCB2bXdfcHJpdmF0ZSB7CiAJLyoKIAkgKiBHdWVz dCBCYWNrZWQgc3R1ZmYKIAkgKi8KLQlzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKm90YWJsZV9i bzsKLQlzdHJ1Y3Qgdm13X290YWJsZSAqb3RhYmxlczsKKwlzdHJ1Y3Qgdm13X290YWJsZV9iYXRj aCBvdGFibGVfYmF0Y2g7CiAKIAlzdHJ1Y3Qgdm13X2NtZGJ1Zl9tYW4gKmNtYW47CiB9OwpAQCAt Njg1LDYgKzY1Myw3IEBAIGV4dGVybiBpbnQgdm13X3VzZXJfc3RyZWFtX2xvb2t1cChzdHJ1Y3Qg dm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCSAgdWludDMyX3QgKmlub3V0X2lkLAogCQkJCSAg c3RydWN0IHZtd19yZXNvdXJjZSAqKm91dCk7CiBleHRlcm4gdm9pZCB2bXdfcmVzb3VyY2VfdW5y ZXNlcnZlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKKwkJCQkgICBib29sIHN3aXRjaF9iYWNr dXAsCiAJCQkJICAgc3RydWN0IHZtd19kbWFfYnVmZmVyICpuZXdfYmFja3VwLAogCQkJCSAgIHVu c2lnbmVkIGxvbmcgbmV3X2JhY2t1cF9vZmZzZXQpOwogZXh0ZXJuIHZvaWQgdm13X3Jlc291cmNl X21vdmVfbm90aWZ5KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCkBAIC03NDIsNyArNzEx LDEwIEBAIGV4dGVybiBpbnQgdm13X2ZpZm9faW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2LAogZXh0ZXJuIHZvaWQgdm13X2ZpZm9fcmVsZWFzZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2LAogCQkJICAgICBzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm8pOwogZXh0ZXJuIHZv aWQgKnZtd19maWZvX3Jlc2VydmUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMy X3QgYnl0ZXMpOworZXh0ZXJuIHZvaWQgKgordm13X2ZpZm9fcmVzZXJ2ZV9keChzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCBieXRlcywgaW50IGN0eF9pZCk7CiBleHRlcm4g dm9pZCB2bXdfZmlmb19jb21taXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMy X3QgYnl0ZXMpOworZXh0ZXJuIHZvaWQgdm13X2ZpZm9fY29tbWl0X2ZsdXNoKHN0cnVjdCB2bXdf cHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IGJ5dGVzKTsKIGV4dGVybiBpbnQgdm13X2ZpZm9f c2VuZF9mZW5jZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICAgIHVpbnQz Ml90ICpzZXFubyk7CiBleHRlcm4gdm9pZCB2bXdfZmlmb19waW5nX2hvc3RfbG9ja2VkKHN0cnVj dCB2bXdfcHJpdmF0ZSAqLCB1aW50MzJfdCByZWFzb24pOwpAQCAtODI4LDE0ICs4MDAsMTUgQEAg c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqdm13X3BpdGVyX3BhZ2Uoc3RydWN0IHZtd19waXRl ciAqdml0ZXIpCiAgKiBDb21tYW5kIHN1Ym1pc3Npb24gLSB2bXdnZnhfZXhlY2J1Zi5jCiAgKi8K IAotZXh0ZXJuIGludCB2bXdfZXhlY2J1Zl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAotCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4g aW50IHZtd19leGVjYnVmX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxv bmcgZGF0YSwKKwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHNpemVfdCBzaXpl KTsKIGV4dGVybiBpbnQgdm13X2V4ZWNidWZfcHJvY2VzcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdiwKIAkJCSAgICAgICBzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICAg IHZvaWQgX191c2VyICp1c2VyX2NvbW1hbmRzLAogCQkJICAgICAgIHZvaWQgKmtlcm5lbF9jb21t YW5kcywKIAkJCSAgICAgICB1aW50MzJfdCBjb21tYW5kX3NpemUsCiAJCQkgICAgICAgdWludDY0 X3QgdGhyb3R0bGVfdXMsCisJCQkgICAgICAgdWludDMyX3QgZHhfY29udGV4dF9oYW5kbGUsCiAJ CQkgICAgICAgc3RydWN0IGRybV92bXdfZmVuY2VfcmVwIF9fdXNlcgogCQkJICAgICAgICp1c2Vy X2ZlbmNlX3JlcCwKIAkJCSAgICAgICBzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqKm91dF9mZW5jZSk7 CkBAIC05NjAsNiArOTMzLDcgQEAgaW50IHZtd19kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCiAJCSAgICAgdWludDMyX3QgaGFuZGxlKTsKIGV4dGVybiBpbnQgdm13X3Jl c291cmNlX3BpbihzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsIGJvb2wgaW50ZXJydXB0aWJsZSk7 CiBleHRlcm4gdm9pZCB2bXdfcmVzb3VyY2VfdW5waW4oc3RydWN0IHZtd19yZXNvdXJjZSAqcmVz KTsKK2V4dGVybiBlbnVtIHZtd19yZXNfdHlwZSB2bXdfcmVzX3R5cGUoY29uc3Qgc3RydWN0IHZt d19yZXNvdXJjZSAqcmVzKTsKIAogLyoqCiAgKiBPdmVybGF5IGNvbnRyb2wgLSB2bXdnZnhfb3Zl cmxheS5jCkBAIC0xMDE2LDI3ICs5OTAsMjggQEAgZXh0ZXJuIHZvaWQgdm13X290YWJsZXNfdGFr ZWRvd24oc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdik7CiAKIGV4dGVybiBjb25zdCBzdHJ1 Y3Qgdm13X3VzZXJfcmVzb3VyY2VfY29udiAqdXNlcl9jb250ZXh0X2NvbnZlcnRlcjsKIAotZXh0 ZXJuIHN0cnVjdCB2bXdfcmVzb3VyY2UgKnZtd19jb250ZXh0X2FsbG9jKHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYpOwotCiBleHRlcm4gaW50IHZtd19jb250ZXh0X2NoZWNrKHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkgICAgIHN0cnVjdCB0dG1fb2JqZWN0X2ZpbGUgKnRm aWxlLAogCQkJICAgICBpbnQgaWQsCiAJCQkgICAgIHN0cnVjdCB2bXdfcmVzb3VyY2UgKipwX3Jl cyk7CiBleHRlcm4gaW50IHZtd19jb250ZXh0X2RlZmluZV9pb2N0bChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7 CitleHRlcm4gaW50IHZtd19leHRlbmRlZF9jb250ZXh0X2RlZmluZV9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2KTsKIGV4dGVybiBpbnQgdm13X2NvbnRleHRfZGVzdHJveV9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYpOwotZXh0ZXJuIGludCB2bXdfY29udGV4dF9iaW5kaW5nX2FkZChzdHJ1Y3Qgdm13X2N0 eF9iaW5kaW5nX3N0YXRlICpjYnMsCi0JCQkJICAgY29uc3Qgc3RydWN0IHZtd19jdHhfYmluZGlu Zm8gKmNpKTsKLWV4dGVybiB2b2lkCi12bXdfY29udGV4dF9iaW5kaW5nX3N0YXRlX3RyYW5zZmVy KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKLQkJCQkgICBzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5n X3N0YXRlICpjYnMpOwotZXh0ZXJuIHZvaWQgdm13X2NvbnRleHRfYmluZGluZ19yZXNfbGlzdF9r aWxsKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwotZXh0ZXJuIHZvaWQgdm13X2NvbnRleHRfYmlu ZGluZ19yZXNfbGlzdF9zY3J1YihzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKLWV4dGVybiBpbnQg dm13X2NvbnRleHRfcmViaW5kX2FsbChzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHgpOwogZXh0ZXJu IHN0cnVjdCBsaXN0X2hlYWQgKnZtd19jb250ZXh0X2JpbmRpbmdfbGlzdChzdHJ1Y3Qgdm13X3Jl c291cmNlICpjdHgpOwogZXh0ZXJuIHN0cnVjdCB2bXdfY21kYnVmX3Jlc19tYW5hZ2VyICoKIHZt d19jb250ZXh0X3Jlc19tYW4oc3RydWN0IHZtd19yZXNvdXJjZSAqY3R4KTsKK2V4dGVybiBzdHJ1 Y3Qgdm13X3Jlc291cmNlICp2bXdfY29udGV4dF9jb3RhYmxlKHN0cnVjdCB2bXdfcmVzb3VyY2Ug KmN0eCwKKwkJCQkJCVNWR0FDT1RhYmxlVHlwZSBjb3RhYmxlX3R5cGUpOworZXh0ZXJuIHN0cnVj dCBsaXN0X2hlYWQgKnZtd19jb250ZXh0X2JpbmRpbmdfbGlzdChzdHJ1Y3Qgdm13X3Jlc291cmNl ICpjdHgpOworc3RydWN0IHZtd19jdHhfYmluZGluZ19zdGF0ZTsKK2V4dGVybiBzdHJ1Y3Qgdm13 X2N0eF9iaW5kaW5nX3N0YXRlICoKK3Ztd19jb250ZXh0X2JpbmRpbmdfc3RhdGUoc3RydWN0IHZt d19yZXNvdXJjZSAqY3R4KTsKK2V4dGVybiB2b2lkIHZtd19keF9jb250ZXh0X3NjcnViX2NvdGFi bGVzKHN0cnVjdCB2bXdfcmVzb3VyY2UgKmN0eCwKKwkJCQkJICBib29sIHJlYWRiYWNrKTsKKwog LyoKICAqIFN1cmZhY2UgbWFuYWdlbWVudCAtIHZtd2dmeF9zdXJmYWNlLmMKICAqLwpAQCAtMTA2 Niw2ICsxMDQxLDcgQEAgaW50IHZtd19zdXJmYWNlX2diX3ByaXZfZGVmaW5lKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCiAJCQkgICAgICAgYm9vbCBmb3Jfc2Nhbm91dCwKIAkJCSAgICAgICB1aW50 MzJfdCBudW1fbWlwX2xldmVscywKIAkJCSAgICAgICB1aW50MzJfdCBtdWx0aXNhbXBsZV9jb3Vu dCwKKwkJCSAgICAgICB1aW50MzJfdCBhcnJheV9zaXplLAogCQkJICAgICAgIHN0cnVjdCBkcm1f dm13X3NpemUgc2l6ZSwKIAkJCSAgICAgICBzdHJ1Y3Qgdm13X3N1cmZhY2UgKipzcmZfb3V0KTsK IApAQCAtMTA4NSwxMiArMTA2MSwyMSBAQCBleHRlcm4gaW50IHZtd19jb21wYXRfc2hhZGVyX2Fk ZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCSBTVkdBM2RTaGFkZXJUeXBlIHNo YWRlcl90eXBlLAogCQkJCSBzaXplX3Qgc2l6ZSwKIAkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlz dCk7Ci1leHRlcm4gaW50IHZtd19jb21wYXRfc2hhZGVyX3JlbW92ZShzdHJ1Y3Qgdm13X2NtZGJ1 Zl9yZXNfbWFuYWdlciAqbWFuLAotCQkJCSAgICB1MzIgdXNlcl9rZXksIFNWR0EzZFNoYWRlclR5 cGUgc2hhZGVyX3R5cGUsCi0JCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOworZXh0ZXJu IGludCB2bXdfc2hhZGVyX3JlbW92ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFu LAorCQkJICAgICB1MzIgdXNlcl9rZXksIFNWR0EzZFNoYWRlclR5cGUgc2hhZGVyX3R5cGUsCisJ CQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOworZXh0ZXJuIGludCB2bXdfZHhfc2hhZGVy X2FkZChzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAorCQkJICAgICBzdHJ1Y3Qg dm13X3Jlc291cmNlICpjdHgsCisJCQkgICAgIHUzMiB1c2VyX2tleSwKKwkJCSAgICAgU1ZHQTNk U2hhZGVyVHlwZSBzaGFkZXJfdHlwZSwKKwkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7 CitleHRlcm4gdm9pZCB2bXdfZHhfc2hhZGVyX2NvdGFibGVfbGlzdF9zY3J1YihzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJ CQkJCSAgICAgYm9vbCByZWFkYmFjayk7CisKIGV4dGVybiBzdHJ1Y3Qgdm13X3Jlc291cmNlICoK LXZtd19jb21wYXRfc2hhZGVyX2xvb2t1cChzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAq bWFuLAotCQkJIHUzMiB1c2VyX2tleSwgU1ZHQTNkU2hhZGVyVHlwZSBzaGFkZXJfdHlwZSk7Cit2 bXdfc2hhZGVyX2xvb2t1cChzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAorCQkg IHUzMiB1c2VyX2tleSwgU1ZHQTNkU2hhZGVyVHlwZSBzaGFkZXJfdHlwZSk7CiAKIC8qCiAgKiBD b21tYW5kIGJ1ZmZlciBtYW5hZ2VkIHJlc291cmNlcyAtIHZtd2dmeF9jbWRidWZfcmVzLmMKQEAg LTExMTQsOCArMTA5OSwyMCBAQCBleHRlcm4gaW50IHZtd19jbWRidWZfcmVzX2FkZChzdHJ1Y3Qg dm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAogZXh0ZXJuIGludCB2bXdfY21kYnVmX3Jlc19y ZW1vdmUoc3RydWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbiwKIAkJCQkgZW51bSB2bXdf Y21kYnVmX3Jlc190eXBlIHJlc190eXBlLAogCQkJCSB1MzIgdXNlcl9rZXksCi0JCQkJIHN0cnVj dCBsaXN0X2hlYWQgKmxpc3QpOworCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSBz dHJ1Y3Qgdm13X3Jlc291cmNlICoqcmVzKTsKIAorLyoKKyAqIENPVGFibGUgbWFuYWdlbWVudCAt IHZtd2dmeF9jb3RhYmxlLmMKKyAqLworZXh0ZXJuIGNvbnN0IFNWR0FDT1RhYmxlVHlwZSB2bXdf Y290YWJsZV9zY3J1Yl9vcmRlcltdOworZXh0ZXJuIHN0cnVjdCB2bXdfcmVzb3VyY2UgKnZtd19j b3RhYmxlX2FsbG9jKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCSAgICAgIHN0 cnVjdCB2bXdfcmVzb3VyY2UgKmN0eCwKKwkJCQkJICAgICAgdTMyIHR5cGUpOworZXh0ZXJuIGlu dCB2bXdfY290YWJsZV9ub3RpZnkoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLCBpbnQgaWQpOwor ZXh0ZXJuIGludCB2bXdfY290YWJsZV9zY3J1YihzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsIGJv b2wgcmVhZGJhY2spOworZXh0ZXJuIHZvaWQgdm13X2NvdGFibGVfYWRkX3Jlc291cmNlKHN0cnVj dCB2bXdfcmVzb3VyY2UgKmN0eCwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOwog CiAvKgogICogQ29tbWFuZCBidWZmZXIgbWFuYWdlcm1lbnQgdm13Z2Z4X2NtZGJ1Zi5jCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMgYi9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKaW5kZXggODQ3MjY0ZjguLjQwMTMwNWIg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2V4ZWNidWYuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMKQEAgLTI5LDYgKzI5LDgg QEAKICNpbmNsdWRlICJ2bXdnZnhfcmVnLmgiCiAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fYm9fYXBp Lmg+CiAjaW5jbHVkZSA8ZHJtL3R0bS90dG1fcGxhY2VtZW50Lmg+CisjaW5jbHVkZSAidm13Z2Z4 X3NvLmgiCisjaW5jbHVkZSAidm13Z2Z4X2JpbmRpbmcuaCIKIAogI2RlZmluZSBWTVdfUkVTX0hU X09SREVSIDEyCiAKQEAgLTU5LDggKzYxLDExIEBAIHN0cnVjdCB2bXdfcmVzb3VyY2VfcmVsb2Nh dGlvbiB7CiAgKiBAbmV3X2JhY2t1cF9vZmZzZXQ6IE5ldyBiYWNrdXAgYnVmZmVyIG9mZnNldCBp ZiBAbmV3X2JhY2t1cCBpcyBub24tTlVsbC4KICAqIEBmaXJzdF91c2FnZTogU2V0IHRvIHRydWUg dGhlIGZpcnN0IHRpbWUgdGhlIHJlc291cmNlIGlzIHJlZmVyZW5jZWQgaW4KICAqIHRoZSBjb21t YW5kIHN0cmVhbS4KLSAqIEBub19idWZmZXJfbmVlZGVkOiBSZXNvdXJjZXMgZG8gbm90IG5lZWQg dG8gYWxsb2NhdGUgYnVmZmVyIGJhY2t1cCBvbgotICogcmVzZXJ2YXRpb24uIFRoZSBjb21tYW5k IHN0cmVhbSB3aWxsIHByb3ZpZGUgb25lLgorICogQHN3aXRjaGluZ19iYWNrdXA6IFRoZSBjb21t YW5kIHN0cmVhbSBwcm92aWRlcyBhIG5ldyBiYWNrdXAgYnVmZmVyIGZvciBhCisgKiByZXNvdXJj ZS4KKyAqIEBub19idWZmZXJfbmVlZGVkOiBUaGlzIG1lYW5zIEBzd2l0Y2hpbmdfYmFja3VwIGlz IHRydWUgb24gZmlyc3QgYnVmZmVyCisgKiByZWZlcmVuY2UuIFNvIHJlc291cmNlIHJlc2VydmF0 aW9uIGRvZXMgbm90IG5lZWQgdG8gYWxsb2NhdGUgYSBiYWNrdXAKKyAqIGJ1ZmZlciBmb3IgdGhl IHJlc291cmNlLgogICovCiBzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2RlIHsKIAlzdHJ1Y3Qg bGlzdF9oZWFkIGhlYWQ7CkBAIC02OSw4ICs3NCw5IEBAIHN0cnVjdCB2bXdfcmVzb3VyY2VfdmFs X25vZGUgewogCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqbmV3X2JhY2t1cDsKIAlzdHJ1Y3Qgdm13 X2N0eF9iaW5kaW5nX3N0YXRlICpzdGFnZWRfYmluZGluZ3M7CiAJdW5zaWduZWQgbG9uZyBuZXdf YmFja3VwX29mZnNldDsKLQlib29sIGZpcnN0X3VzYWdlOwotCWJvb2wgbm9fYnVmZmVyX25lZWRl ZDsKKwl1MzIgZmlyc3RfdXNhZ2UgOiAxOworCXUzMiBzd2l0Y2hpbmdfYmFja3VwIDogMTsKKwl1 MzIgbm9fYnVmZmVyX25lZWRlZCA6IDE7CiB9OwogCiAvKioKQEAgLTkyLDYgKzk4LDEwIEBAIHN0 cnVjdCB2bXdfY21kX2VudHJ5IHsKIAlbKF9jbWQpIC0gU1ZHQV8zRF9DTURfQkFTRV0gPSB7KF9m dW5jKSwgKF91c2VyX2FsbG93KSxcCiAJCQkJICAgICAgIChfZ2JfZGlzYWJsZSksIChfZ2JfZW5h YmxlKX0KIAorc3RhdGljIGludCB2bXdfcmVzb3VyY2VfY29udGV4dF9yZXNfYWRkKHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCXN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29u dGV4dCwKKwkJCQkJc3RydWN0IHZtd19yZXNvdXJjZSAqY3R4KTsKKwogLyoqCiAgKiB2bXdfcmVz b3VyY2VfdW5yZXNlcnZlIC0gdW5yZXNlcnZlIHJlc291cmNlcyBwcmV2aW91c2x5IHJlc2VydmVk IGZvcgogICogY29tbWFuZCBzdWJtaXNzaW9uLgpAQCAtOTksMTUgKzEwOSwxNiBAQCBzdHJ1Y3Qg dm13X2NtZF9lbnRyeSB7CiAgKiBAbGlzdF9oZWFkOiBsaXN0IG9mIHJlc291cmNlcyB0byB1bnJl c2VydmUuCiAgKiBAYmFja29mZjogV2hldGhlciBjb21tYW5kIHN1Ym1pc3Npb24gZmFpbGVkLgog ICovCi1zdGF0aWMgdm9pZCB2bXdfcmVzb3VyY2VfbGlzdF91bnJlc2VydmUoc3RydWN0IGxpc3Rf aGVhZCAqbGlzdCwKK3N0YXRpYyB2b2lkIHZtd19yZXNvdXJjZV9saXN0X3VucmVzZXJ2ZShzdHJ1 Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmxp c3QsCiAJCQkJCWJvb2wgYmFja29mZikKIHsKIAlzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2Rl ICp2YWw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhbCwgbGlzdCwgaGVhZCkgewogCQlzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXMgPSB2YWwtPnJlczsKLQkJc3RydWN0IHZtd19kbWFfYnVmZmVy ICpuZXdfYmFja3VwID0KLQkJCWJhY2tvZmYgPyBOVUxMIDogdmFsLT5uZXdfYmFja3VwOworCQli b29sIHN3aXRjaF9iYWNrdXAgPQorCQkJKGJhY2tvZmYpID8gZmFsc2UgOiB2YWwtPnN3aXRjaGlu Z19iYWNrdXA7CiAKIAkJLyoKIAkJICogVHJhbnNmZXIgc3RhZ2VkIGNvbnRleHQgYmluZGluZ3Mg dG8gdGhlCkBAIC0xMTUsMTggKzEyNiw3MSBAQCBzdGF0aWMgdm9pZCB2bXdfcmVzb3VyY2VfbGlz dF91bnJlc2VydmUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKIAkJICovCiAJCWlmICh1bmxpa2Vs eSh2YWwtPnN0YWdlZF9iaW5kaW5ncykpIHsKIAkJCWlmICghYmFja29mZikgewotCQkJCXZtd19j b250ZXh0X2JpbmRpbmdfc3RhdGVfdHJhbnNmZXIKLQkJCQkJKHZhbC0+cmVzLCB2YWwtPnN0YWdl ZF9iaW5kaW5ncyk7CisJCQkJdm13X2JpbmRpbmdfc3RhdGVfY29tbWl0CisJCQkJCSh2bXdfY29u dGV4dF9iaW5kaW5nX3N0YXRlKHZhbC0+cmVzKSwKKwkJCQkJIHZhbC0+c3RhZ2VkX2JpbmRpbmdz KTsKIAkJCX0KLQkJCWtmcmVlKHZhbC0+c3RhZ2VkX2JpbmRpbmdzKTsKKworCQkJaWYgKHZhbC0+ c3RhZ2VkX2JpbmRpbmdzICE9IHN3X2NvbnRleHQtPnN0YWdlZF9iaW5kaW5ncykKKwkJCQl2bXdf YmluZGluZ19zdGF0ZV9mcmVlKHZhbC0+c3RhZ2VkX2JpbmRpbmdzKTsKKwkJCWVsc2UKKwkJCQlz d19jb250ZXh0LT5zdGFnZWRfYmluZGluZ3NfaW51c2UgPSBmYWxzZTsKIAkJCXZhbC0+c3RhZ2Vk X2JpbmRpbmdzID0gTlVMTDsKIAkJfQotCQl2bXdfcmVzb3VyY2VfdW5yZXNlcnZlKHJlcywgbmV3 X2JhY2t1cCwKLQkJCXZhbC0+bmV3X2JhY2t1cF9vZmZzZXQpOworCQl2bXdfcmVzb3VyY2VfdW5y ZXNlcnZlKHJlcywgc3dpdGNoX2JhY2t1cCwgdmFsLT5uZXdfYmFja3VwLAorCQkJCSAgICAgICB2 YWwtPm5ld19iYWNrdXBfb2Zmc2V0KTsKIAkJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmdmFsLT5u ZXdfYmFja3VwKTsKIAl9CiB9CiAKKy8qKgorICogdm13X2NtZF9jdHhfZmlyc3Rfc2V0dXAgLSBQ ZXJmb3JtIHRoZSBzZXR1cCBuZWVkZWQgd2hlbiBhIGNvbnRleHQgaXMKKyAqIGFkZGVkIHRvIHRo ZSB2YWxpZGF0ZSBsaXN0LgorICoKKyAqIEBkZXZfcHJpdjogUG9pbnRlciB0byB0aGUgZGV2aWNl IHByaXZhdGU6CisgKiBAc3dfY29udGV4dDogVGhlIHZhbGlkYXRpb24gY29udGV4dDoKKyAqIEBu b2RlOiBUaGUgdmFsaWRhdGlvbiBub2RlIGhvbGRpbmcgdGhpcyBjb250ZXh0LgorICovCitzdGF0 aWMgaW50IHZtd19jbWRfY3R4X2ZpcnN0X3NldHVwKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYsCisJCQkJICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJCSAgIHN0 cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25vZGUgKm5vZGUpCit7CisJaW50IHJldDsKKworCXJldCA9 IHZtd19yZXNvdXJjZV9jb250ZXh0X3Jlc19hZGQoZGV2X3ByaXYsIHN3X2NvbnRleHQsIG5vZGUt PnJlcyk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRfZXJyOworCisJaWYg KCFzd19jb250ZXh0LT5zdGFnZWRfYmluZGluZ3MpIHsKKwkJc3dfY29udGV4dC0+c3RhZ2VkX2Jp bmRpbmdzID0KKwkJCXZtd19iaW5kaW5nX3N0YXRlX2FsbG9jKGRldl9wcml2KTsKKwkJaWYgKElT X0VSUihzd19jb250ZXh0LT5zdGFnZWRfYmluZGluZ3MpKSB7CisJCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBhbGxvY2F0ZSBjb250ZXh0IGJpbmRpbmcgIgorCQkJCSAgImluZm9ybWF0aW9uLlxuIik7 CisJCQlyZXQgPSBQVFJfRVJSKHN3X2NvbnRleHQtPnN0YWdlZF9iaW5kaW5ncyk7CisJCQlzd19j b250ZXh0LT5zdGFnZWRfYmluZGluZ3MgPSBOVUxMOworCQkJZ290byBvdXRfZXJyOworCQl9CisJ fQorCisJaWYgKHN3X2NvbnRleHQtPnN0YWdlZF9iaW5kaW5nc19pbnVzZSkgeworCQlub2RlLT5z dGFnZWRfYmluZGluZ3MgPSB2bXdfYmluZGluZ19zdGF0ZV9hbGxvYyhkZXZfcHJpdik7CisJCWlm IChJU19FUlIobm9kZS0+c3RhZ2VkX2JpbmRpbmdzKSkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gYWxsb2NhdGUgY29udGV4dCBiaW5kaW5nICIKKwkJCQkgICJpbmZvcm1hdGlvbi5cbiIpOwor CQkJcmV0ID0gUFRSX0VSUihub2RlLT5zdGFnZWRfYmluZGluZ3MpOworCQkJbm9kZS0+c3RhZ2Vk X2JpbmRpbmdzID0gTlVMTDsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCX0gZWxzZSB7CisJCW5v ZGUtPnN0YWdlZF9iaW5kaW5ncyA9IHN3X2NvbnRleHQtPnN0YWdlZF9iaW5kaW5nczsKKwkJc3df Y29udGV4dC0+c3RhZ2VkX2JpbmRpbmdzX2ludXNlID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gMDsK K291dF9lcnI6CisJcmV0dXJuIHJldDsKK30KIAogLyoqCiAgKiB2bXdfcmVzb3VyY2VfdmFsX2Fk ZCAtIEFkZCBhIHJlc291cmNlIHRvIHRoZSBzb2Z0d2FyZSBjb250ZXh0J3MKQEAgLTE0MSw2ICsy MDUsNyBAQCBzdGF0aWMgaW50IHZtd19yZXNvdXJjZV92YWxfYWRkKHN0cnVjdCB2bXdfc3dfY29u dGV4dCAqc3dfY29udGV4dCwKIAkJCQlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAJCQkJc3Ry dWN0IHZtd19yZXNvdXJjZV92YWxfbm9kZSAqKnBfbm9kZSkKIHsKKwlzdHJ1Y3Qgdm13X3ByaXZh dGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKIAlzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9u b2RlICpub2RlOwogCXN0cnVjdCBkcm1faGFzaF9pdGVtICpoYXNoOwogCWludCByZXQ7CkBAIC0x NjksMTQgKzIzNCw5MCBAQCBzdGF0aWMgaW50IHZtd19yZXNvdXJjZV92YWxfYWRkKHN0cnVjdCB2 bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKIAkJa2ZyZWUobm9kZSk7CiAJCXJldHVybiByZXQ7 CiAJfQotCWxpc3RfYWRkX3RhaWwoJm5vZGUtPmhlYWQsICZzd19jb250ZXh0LT5yZXNvdXJjZV9s aXN0KTsKIAlub2RlLT5yZXMgPSB2bXdfcmVzb3VyY2VfcmVmZXJlbmNlKHJlcyk7CiAJbm9kZS0+ Zmlyc3RfdXNhZ2UgPSB0cnVlOwotCiAJaWYgKHVubGlrZWx5KHBfbm9kZSAhPSBOVUxMKSkKIAkJ KnBfbm9kZSA9IG5vZGU7CiAKLQlyZXR1cm4gMDsKKwlpZiAoIWRldl9wcml2LT5oYXNfbW9iKSB7 CisJCWxpc3RfYWRkX3RhaWwoJm5vZGUtPmhlYWQsICZzd19jb250ZXh0LT5yZXNvdXJjZV9saXN0 KTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoICh2bXdfcmVzX3R5cGUocmVzKSkgeworCWNh c2Ugdm13X3Jlc19jb250ZXh0OgorCWNhc2Ugdm13X3Jlc19keF9jb250ZXh0OgorCQlsaXN0X2Fk ZCgmbm9kZS0+aGVhZCwgJnN3X2NvbnRleHQtPmN0eF9yZXNvdXJjZV9saXN0KTsKKwkJcmV0ID0g dm13X2NtZF9jdHhfZmlyc3Rfc2V0dXAoZGV2X3ByaXYsIHN3X2NvbnRleHQsIG5vZGUpOworCQli cmVhazsKKwljYXNlIHZtd19yZXNfY290YWJsZToKKwkJbGlzdF9hZGRfdGFpbCgmbm9kZS0+aGVh ZCwgJnN3X2NvbnRleHQtPmN0eF9yZXNvdXJjZV9saXN0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJbGlzdF9hZGRfdGFpbCgmbm9kZS0+aGVhZCwgJnN3X2NvbnRleHQtPnJlc291cmNlX2xpc3Qp OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZtd192aWV3X3Jl c192YWxfYWRkIC0gQWRkIGEgdmlldyBhbmQgdGhlIHN1cmZhY2UgaXQncyBwb2ludGluZyB0bwor ICogdG8gdGhlIHZhbGlkYXRpb24gbGlzdAorICoKKyAqIEBzd19jb250ZXh0OiBUaGUgc29mdHdh cmUgY29udGV4dCBob2xkaW5nIHRoZSB2YWxpZGF0aW9uIGxpc3QuCisgKiBAdmlldzogUG9pbnRl ciB0byB0aGUgdmlldyByZXNvdXJjZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgc3VjY2VzcywgbmVn YXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdm13X3ZpZXdfcmVz X3ZhbF9hZGQoc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJCXN0cnVjdCB2 bXdfcmVzb3VyY2UgKnZpZXcpCit7CisJaW50IHJldDsKKworCS8qCisJICogRmlyc3QgYWRkIHRo ZSByZXNvdXJjZSB0aGUgdmlldyBpcyBwb2ludGluZyB0bywgb3RoZXJ3aXNlCisJICogaXQgbWF5 IGJlIHN3YXBwZWQgb3V0IHdoZW4gdGhlIHZpZXcgaXMgdmFsaWRhdGVkLgorCSAqLworCXJldCA9 IHZtd19yZXNvdXJjZV92YWxfYWRkKHN3X2NvbnRleHQsIHZtd192aWV3X3NyZih2aWV3KSwgTlVM TCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiB2bXdfcmVzb3VyY2VfdmFs X2FkZChzd19jb250ZXh0LCB2aWV3LCBOVUxMKTsKK30KKworLyoqCisgKiB2bXdfdmlld19pZF92 YWxfYWRkIC0gTG9vayB1cCBhIHZpZXcgYW5kIGFkZCBpdCBhbmQgdGhlIHN1cmZhY2UgaXQncwor ICogcG9pbnRpbmcgdG8gdG8gdGhlIHZhbGlkYXRpb24gbGlzdC4KKyAqCisgKiBAc3dfY29udGV4 dDogVGhlIHNvZnR3YXJlIGNvbnRleHQgaG9sZGluZyB0aGUgdmFsaWRhdGlvbiBsaXN0LgorICog QHZpZXdfdHlwZTogVGhlIHZpZXcgdHlwZSB0byBsb29rIHVwLgorICogQGlkOiB2aWV3IGlkIG9m IHRoZSB2aWV3LgorICoKKyAqIFRoZSB2aWV3IGlzIHJlcHJlc2VudGVkIGJ5IGEgdmlldyBpZCBh bmQgdGhlIERYIGNvbnRleHQgaXQncyBjcmVhdGVkIG9uLAorICogb3Igc2NoZWR1bGVkIGZvciBj cmVhdGlvbiBvbi4gSWYgdGhlcmUgaXMgbm8gRFggY29udGV4dCBzZXQsIHRoZSBmdW5jdGlvbgor ICogd2lsbCByZXR1cm4gLUVJTlZBTC4gT3RoZXJ3aXNlIHJldHVybnMgMCBvbiBzdWNjZXNzIGFu ZCAtRUlOVkFMIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgdm13X3ZpZXdfaWRfdmFsX2Fk ZChzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkgICAgICAgZW51bSB2bXdf dmlld190eXBlIHZpZXdfdHlwZSwgdTMyIGlkKQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFs X25vZGUgKmN0eF9ub2RlID0gc3dfY29udGV4dC0+ZHhfY3R4X25vZGU7CisJc3RydWN0IHZtd19y ZXNvdXJjZSAqdmlldzsKKwlpbnQgcmV0OworCisJaWYgKCFjdHhfbm9kZSkgeworCQlEUk1fRVJS T1IoIkRYIENvbnRleHQgbm90IHNldC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl2 aWV3ID0gdm13X3ZpZXdfbG9va3VwKHN3X2NvbnRleHQtPm1hbiwgdmlld190eXBlLCBpZCk7CisJ aWYgKElTX0VSUih2aWV3KSkKKwkJcmV0dXJuIFBUUl9FUlIodmlldyk7CisKKwlyZXQgPSB2bXdf dmlld19yZXNfdmFsX2FkZChzd19jb250ZXh0LCB2aWV3KTsKKwl2bXdfcmVzb3VyY2VfdW5yZWZl cmVuY2UoJnZpZXcpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xOTUsMTkgKzMzNiw0 MSBAQCBzdGF0aWMgaW50IHZtd19yZXNvdXJjZV9jb250ZXh0X3Jlc19hZGQoc3RydWN0IHZtd19w cml2YXRlICpkZXZfcHJpdiwKIAkJCQkJc3RydWN0IHZtd19yZXNvdXJjZSAqY3R4KQogewogCXN0 cnVjdCBsaXN0X2hlYWQgKmJpbmRpbmdfbGlzdDsKLQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5nICpl bnRyeTsKKwlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mbyAqZW50cnk7CiAJaW50IHJldCA9IDA7CiAJ c3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOworCXUzMiBpOworCisJLyogQWRkIGFsbCBjb3RhYmxl cyB0byB0aGUgdmFsaWRhdGlvbiBsaXN0LiAqLworCWlmIChkZXZfcHJpdi0+aGFzX2R4ICYmIHZt d19yZXNfdHlwZShjdHgpID09IHZtd19yZXNfZHhfY29udGV4dCkgeworCQlmb3IgKGkgPSAwOyBp IDwgU1ZHQV9DT1RBQkxFX0RYMTBfTUFYOyArK2kpIHsKKwkJCXJlcyA9IHZtd19jb250ZXh0X2Nv dGFibGUoY3R4LCBpKTsKKwkJCWlmIChJU19FUlIocmVzKSkKKwkJCQljb250aW51ZTsKKworCQkJ cmV0ID0gdm13X3Jlc291cmNlX3ZhbF9hZGQoc3dfY29udGV4dCwgcmVzLCBOVUxMKTsKKwkJCXZt d19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKKwkJCWlmICh1bmxpa2VseShyZXQgIT0gMCkp CisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwogCisJLyogQWRkIGFsbCByZXNvdXJjZXMgYm91 bmQgdG8gdGhlIGNvbnRleHQgdG8gdGhlIHZhbGlkYXRpb24gbGlzdCAqLwogCW11dGV4X2xvY2so JmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsKIAliaW5kaW5nX2xpc3QgPSB2bXdfY29udGV4dF9i aW5kaW5nX2xpc3QoY3R4KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGJpbmRpbmdf bGlzdCwgY3R4X2xpc3QpIHsKLQkJcmVzID0gdm13X3Jlc291cmNlX3JlZmVyZW5jZV91bmxlc3Nf ZG9vbWVkKGVudHJ5LT5iaS5yZXMpOworCQkvKiBlbnRyeS0+cmVzIGlzIG5vdCByZWZjb3VudGVk ICovCisJCXJlcyA9IHZtd19yZXNvdXJjZV9yZWZlcmVuY2VfdW5sZXNzX2Rvb21lZChlbnRyeS0+ cmVzKTsKIAkJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkKIAkJCWNvbnRpbnVlOwogCi0JCXJl dCA9IHZtd19yZXNvdXJjZV92YWxfYWRkKHN3X2NvbnRleHQsIGVudHJ5LT5iaS5yZXMsIE5VTEwp OworCQlpZiAodm13X3Jlc190eXBlKGVudHJ5LT5yZXMpID09IHZtd19yZXNfdmlldykKKwkJCXJl dCA9IHZtd192aWV3X3Jlc192YWxfYWRkKHN3X2NvbnRleHQsIGVudHJ5LT5yZXMpOworCQllbHNl CisJCQlyZXQgPSB2bXdfcmVzb3VyY2VfdmFsX2FkZChzd19jb250ZXh0LCBlbnRyeS0+cmVzLAor CQkJCQkJICAgTlVMTCk7CiAJCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKIAkJaWYg KHVubGlrZWx5KHJldCAhPSAwKSkKIAkJCWJyZWFrOwpAQCAtNDA5LDYgKzU3Miw3IEBAIHN0YXRp YyBpbnQgdm13X3Jlc291cmNlc192YWxpZGF0ZShzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2Nv bnRleHQpCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZhbCwgJnN3X2NvbnRleHQtPnJlc291cmNl X2xpc3QsIGhlYWQpIHsKIAkJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzID0gdmFsLT5yZXM7CisJ CXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqYmFja3VwID0gcmVzLT5iYWNrdXA7CiAKIAkJcmV0ID0g dm13X3Jlc291cmNlX3ZhbGlkYXRlKHJlcyk7CiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsK QEAgLTQxNiwxOCArNTgwLDI5IEBAIHN0YXRpYyBpbnQgdm13X3Jlc291cmNlc192YWxpZGF0ZShz dHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQpCiAJCQkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gdmFsaWRhdGUgcmVzb3VyY2UuXG4iKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KKworCQkvKiBD aGVjayBpZiB0aGUgcmVzb3VyY2Ugc3dpdGNoZWQgYmFja3VwIGJ1ZmZlciAqLworCQlpZiAoYmFj a3VwICYmIHJlcy0+YmFja3VwICYmIChiYWNrdXAgIT0gcmVzLT5iYWNrdXApKSB7CisJCQlzdHJ1 Y3Qgdm13X2RtYV9idWZmZXIgKnZibyA9IHJlcy0+YmFja3VwOworCisJCQlyZXQgPSB2bXdfYm9f dG9fdmFsaWRhdGVfbGlzdAorCQkJCShzd19jb250ZXh0LCB2Ym8sCisJCQkJIHZtd19yZXNvdXJj ZV9uZWVkc19iYWNrdXAocmVzKSwgTlVMTCk7CisJCQlpZiAocmV0KSB7CisJCQkJdHRtX2JvX3Vu cmVzZXJ2ZSgmdmJvLT5iYXNlKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CiAJfQogCXJl dHVybiAwOwogfQogCi0KIC8qKgogICogdm13X2NtZF9yZXNfcmVsb2NfYWRkIC0gQWRkIGEgcmVz b3VyY2UgdG8gYSBzb2Z0d2FyZSBjb250ZXh0J3MKICAqIHJlbG9jYXRpb24tIGFuZCB2YWxpZGF0 aW9uIGxpc3RzLgogICoKICAqIEBkZXZfcHJpdjogUG9pbnRlciB0byBhIHN0cnVjdCB2bXdfcHJp dmF0ZSBpZGVudGlmeWluZyB0aGUgZGV2aWNlLgogICogQHN3X2NvbnRleHQ6IFBvaW50ZXIgdG8g dGhlIHNvZnR3YXJlIGNvbnRleHQuCi0gKiBAcmVzX3R5cGU6IFJlc291cmNlIHR5cGUuCiAgKiBA aWRfbG9jOiBQb2ludGVyIHRvIHdoZXJlIHRoZSBpZCB0aGF0IG5lZWRzIHRyYW5zbGF0aW9uIGlz IGxvY2F0ZWQuCiAgKiBAcmVzOiBWYWxpZCBwb2ludGVyIHRvIGEgc3RydWN0IHZtd19yZXNvdXJj ZS4KICAqIEBwX3ZhbDogSWYgbm9uIG51bGwsIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IHZtd19y ZXNvdXJjZV92YWxpZGF0ZV9ub2RlCkBAIC00MzUsNyArNjEwLDYgQEAgc3RhdGljIGludCB2bXdf cmVzb3VyY2VzX3ZhbGlkYXRlKHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCkKICAq Lwogc3RhdGljIGludCB2bXdfY21kX3Jlc19yZWxvY19hZGQoc3RydWN0IHZtd19wcml2YXRlICpk ZXZfcHJpdiwKIAkJCQkgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAotCQkJCSBl bnVtIHZtd19yZXNfdHlwZSByZXNfdHlwZSwKIAkJCQkgdWludDMyX3QgKmlkX2xvYywKIAkJCQkg c3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAogCQkJCSBzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9u b2RlICoqcF92YWwpCkBAIC00NTQsMjkgKzYyOCw2IEBAIHN0YXRpYyBpbnQgdm13X2NtZF9yZXNf cmVsb2NfYWRkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJaWYgKHVubGlrZWx5KHJl dCAhPSAwKSkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChyZXNfdHlwZSA9PSB2bXdfcmVzX2NvbnRl eHQgJiYgZGV2X3ByaXYtPmhhc19tb2IgJiYKLQkgICAgbm9kZS0+Zmlyc3RfdXNhZ2UpIHsKLQot CQkvKgotCQkgKiBQdXQgY29udGV4dHMgZmlyc3Qgb24gdGhlIGxpc3QgdG8gYmUgYWJsZSB0byBl eGl0Ci0JCSAqIGxpc3QgdHJhdmVyc2FsIGZvciBjb250ZXh0cyBlYXJseS4KLQkJICovCi0JCWxp c3RfZGVsKCZub2RlLT5oZWFkKTsKLQkJbGlzdF9hZGQoJm5vZGUtPmhlYWQsICZzd19jb250ZXh0 LT5yZXNvdXJjZV9saXN0KTsKLQotCQlyZXQgPSB2bXdfcmVzb3VyY2VfY29udGV4dF9yZXNfYWRk KGRldl9wcml2LCBzd19jb250ZXh0LCByZXMpOwotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQot CQkJcmV0dXJuIHJldDsKLQkJbm9kZS0+c3RhZ2VkX2JpbmRpbmdzID0KLQkJCWt6YWxsb2Moc2l6 ZW9mKCpub2RlLT5zdGFnZWRfYmluZGluZ3MpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKG5vZGUtPnN0 YWdlZF9iaW5kaW5ncyA9PSBOVUxMKSB7Ci0JCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0 ZSBjb250ZXh0IGJpbmRpbmcgIgotCQkJCSAgImluZm9ybWF0aW9uLlxuIik7Ci0JCQlyZXR1cm4g LUVOT01FTTsKLQkJfQotCQlJTklUX0xJU1RfSEVBRCgmbm9kZS0+c3RhZ2VkX2JpbmRpbmdzLT5s aXN0KTsKLQl9Ci0KIAlpZiAocF92YWwpCiAJCSpwX3ZhbCA9IG5vZGU7CiAKQEAgLTU1NCw3ICs3 MDUsNyBAQCB2bXdfY21kX3Jlc19jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAog CXJjYWNoZS0+cmVzID0gcmVzOwogCXJjYWNoZS0+aGFuZGxlID0gKmlkX2xvYzsKIAotCXJldCA9 IHZtd19jbWRfcmVzX3JlbG9jX2FkZChkZXZfcHJpdiwgc3dfY29udGV4dCwgcmVzX3R5cGUsIGlk X2xvYywKKwlyZXQgPSB2bXdfY21kX3Jlc19yZWxvY19hZGQoZGV2X3ByaXYsIHN3X2NvbnRleHQs IGlkX2xvYywKIAkJCQkgICAgcmVzLCAmbm9kZSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkK IAkJZ290byBvdXRfbm9fcmVsb2M7CkBAIC01ODksNyArNzQwLDggQEAgc3RhdGljIGludCB2bXdf cmViaW5kX2NvbnRleHRzKHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCkKIAkJaWYg KHVubGlrZWx5KCF2YWwtPnN0YWdlZF9iaW5kaW5ncykpCiAJCQlicmVhazsKIAotCQlyZXQgPSB2 bXdfY29udGV4dF9yZWJpbmRfYWxsKHZhbC0+cmVzKTsKKwkJcmV0ID0gdm13X2JpbmRpbmdfcmVi aW5kX2FsbAorCQkJKHZtd19jb250ZXh0X2JpbmRpbmdfc3RhdGUodmFsLT5yZXMpKTsKIAkJaWYg KHVubGlrZWx5KHJldCAhPSAwKSkgewogCQkJaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCiAJCQkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gcmViaW5kIGNvbnRleHQuXG4iKTsKQEAgLTYwMSw2ICs3NTMs NjkgQEAgc3RhdGljIGludCB2bXdfcmViaW5kX2NvbnRleHRzKHN0cnVjdCB2bXdfc3dfY29udGV4 dCAqc3dfY29udGV4dCkKIH0KIAogLyoqCisgKiB2bXdfdmlld19iaW5kaW5nc19hZGQgLSBBZGQg YW4gYXJyYXkgb2YgdmlldyBiaW5kaW5ncyB0byBhIGNvbnRleHQKKyAqIGJpbmRpbmcgc3RhdGUg dHJhY2tlci4KKyAqCisgKiBAc3dfY29udGV4dDogVGhlIGV4ZWNidWYgc3RhdGUgdXNlZCBmb3Ig dGhpcyBjb21tYW5kLgorICogQHZpZXdfdHlwZTogVmlldyB0eXBlIGZvciB0aGUgYmluZGluZ3Mu CisgKiBAYmluZGluZ190eXBlOiBCaW5kaW5nIHR5cGUgZm9yIHRoZSBiaW5kaW5ncy4KKyAqIEBz aGFkZXJfc2xvdDogVGhlIHNoYWRlciBzbG90IHRvIHVzZXIgZm9yIHRoZSBiaW5kaW5ncy4KKyAq IEB2aWV3X2lkczogQXJyYXkgb2YgdmlldyBpZHMgdG8gYmUgYm91bmQuCisgKiBAbnVtX3ZpZXdz OiBOdW1iZXIgb2YgdmlldyBpZHMgaW4gQHZpZXdfaWRzLgorICogQGZpcnN0X3Nsb3Q6IFRoZSBi aW5kaW5nIHNsb3QgdG8gYmUgdXNlZCBmb3IgdGhlIGZpcnN0IHZpZXcgaWQgaW4gQHZpZXdfaWRz LgorICovCitzdGF0aWMgaW50IHZtd192aWV3X2JpbmRpbmdzX2FkZChzdHJ1Y3Qgdm13X3N3X2Nv bnRleHQgKnN3X2NvbnRleHQsCisJCQkJIGVudW0gdm13X3ZpZXdfdHlwZSB2aWV3X3R5cGUsCisJ CQkJIGVudW0gdm13X2N0eF9iaW5kaW5nX3R5cGUgYmluZGluZ190eXBlLAorCQkJCSB1aW50MzIg c2hhZGVyX3Nsb3QsCisJCQkJIHVpbnQzMiB2aWV3X2lkc1tdLCB1MzIgbnVtX3ZpZXdzLAorCQkJ CSB1MzIgZmlyc3Rfc2xvdCkKK3sKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2RlICpjdHhf bm9kZSA9IHN3X2NvbnRleHQtPmR4X2N0eF9ub2RlOworCXN0cnVjdCB2bXdfY21kYnVmX3Jlc19t YW5hZ2VyICptYW47CisJdTMyIGk7CisJaW50IHJldDsKKworCWlmICghY3R4X25vZGUpIHsKKwkJ RFJNX0VSUk9SKCJEWCBDb250ZXh0IG5vdCBzZXQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJbWFuID0gc3dfY29udGV4dC0+bWFuOworCWZvciAoaSA9IDA7IGkgPCBudW1fdmlld3M7 ICsraSkgeworCQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192aWV3IGJpbmRpbmc7CisJCXN0cnVj dCB2bXdfcmVzb3VyY2UgKnZpZXcgPSBOVUxMOworCisJCWlmICh2aWV3X2lkc1tpXSAhPSBTVkdB M0RfSU5WQUxJRF9JRCkgeworCQkJdmlldyA9IHZtd192aWV3X2xvb2t1cChtYW4sIHZpZXdfdHlw ZSwgdmlld19pZHNbaV0pOworCQkJaWYgKElTX0VSUih2aWV3KSkgeworCQkJCURSTV9FUlJPUigi VmlldyBub3QgZm91bmQuXG4iKTsKKwkJCQlyZXR1cm4gUFRSX0VSUih2aWV3KTsKKwkJCX0KKwor CQkJcmV0ID0gdm13X3ZpZXdfcmVzX3ZhbF9hZGQoc3dfY29udGV4dCwgdmlldyk7CisJCQlpZiAo cmV0KSB7CisJCQkJRFJNX0VSUk9SKCJDb3VsZCBub3QgYWRkIHZpZXcgdG8gIgorCQkJCQkgICJ2 YWxpZGF0aW9uIGxpc3QuXG4iKTsKKwkJCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnZpZXcp OworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwkJYmluZGluZy5iaS5jdHggPSBjdHhfbm9k ZS0+cmVzOworCQliaW5kaW5nLmJpLnJlcyA9IHZpZXc7CisJCWJpbmRpbmcuYmkuYnQgPSBiaW5k aW5nX3R5cGU7CisJCWJpbmRpbmcuc2hhZGVyX3Nsb3QgPSBzaGFkZXJfc2xvdDsKKwkJYmluZGlu Zy5zbG90ID0gZmlyc3Rfc2xvdCArIGk7CisJCXZtd19iaW5kaW5nX2FkZChjdHhfbm9kZS0+c3Rh Z2VkX2JpbmRpbmdzLCAmYmluZGluZy5iaSwKKwkJCQlzaGFkZXJfc2xvdCwgYmluZGluZy5zbG90 KTsKKwkJaWYgKHZpZXcpCisJCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnZpZXcpOworCX0K KworCXJldHVybiAwOworfQorCisvKioKICAqIHZtd19jbWRfY2lkX2NoZWNrIC0gQ2hlY2sgYSBj b21tYW5kIGhlYWRlciBmb3IgdmFsaWQgY29udGV4dCBpbmZvcm1hdGlvbi4KICAqCiAgKiBAZGV2 X3ByaXY6IFBvaW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuCkBAIC02MzgsNiAr ODUzLDEyIEBAIHN0YXRpYyBpbnQgdm13X2NtZF9zZXRfcmVuZGVyX3RhcmdldF9jaGVjayhzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCiAJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwg c3RydWN0IHZtd19zaWRfY21kLCBoZWFkZXIpOwogCisJaWYgKGNtZC0+Ym9keS50eXBlID49IFNW R0EzRF9SVF9NQVgpIHsKKwkJRFJNX0VSUk9SKCJJbGxlZ2FsIHJlbmRlciB0YXJnZXQgdHlwZSAl dS5cbiIsCisJCQkgICh1bnNpZ25lZCkgY21kLT5ib2R5LnR5cGUpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKIAlyZXQgPSB2bXdfY21kX3Jlc19jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwg dm13X3Jlc19jb250ZXh0LAogCQkJCXVzZXJfY29udGV4dF9jb252ZXJ0ZXIsICZjbWQtPmJvZHku Y2lkLAogCQkJCSZjdHhfbm9kZSk7CkBAIC02NTEsMTMgKzg3MiwxNCBAQCBzdGF0aWMgaW50IHZt d19jbWRfc2V0X3JlbmRlcl90YXJnZXRfY2hlY2soc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp diwKIAkJcmV0dXJuIHJldDsKIAogCWlmIChkZXZfcHJpdi0+aGFzX21vYikgewotCQlzdHJ1Y3Qg dm13X2N0eF9iaW5kaW5mbyBiaTsKKwkJc3RydWN0IHZtd19jdHhfYmluZGluZm9fdmlldyBiaW5k aW5nOwogCi0JCWJpLmN0eCA9IGN0eF9ub2RlLT5yZXM7Ci0JCWJpLnJlcyA9IHJlc19ub2RlID8g cmVzX25vZGUtPnJlcyA6IE5VTEw7Ci0JCWJpLmJ0ID0gdm13X2N0eF9iaW5kaW5nX3J0OwotCQli aS5pMS5ydF90eXBlID0gY21kLT5ib2R5LnR5cGU7Ci0JCXJldHVybiB2bXdfY29udGV4dF9iaW5k aW5nX2FkZChjdHhfbm9kZS0+c3RhZ2VkX2JpbmRpbmdzLCAmYmkpOworCQliaW5kaW5nLmJpLmN0 eCA9IGN0eF9ub2RlLT5yZXM7CisJCWJpbmRpbmcuYmkucmVzID0gcmVzX25vZGUgPyByZXNfbm9k ZS0+cmVzIDogTlVMTDsKKwkJYmluZGluZy5iaS5idCA9IHZtd19jdHhfYmluZGluZ19ydDsKKwkJ YmluZGluZy5zbG90ID0gY21kLT5ib2R5LnR5cGU7CisJCXZtd19iaW5kaW5nX2FkZChjdHhfbm9k ZS0+c3RhZ2VkX2JpbmRpbmdzLAorCQkJCSZiaW5kaW5nLmJpLCAwLCBiaW5kaW5nLnNsb3QpOwog CX0KIAogCXJldHVybiAwOwpAQCAtMTM2NCw2ICsxNTg2LDEyIEBAIHN0YXRpYyBpbnQgdm13X2Nt ZF90ZXhfc3RhdGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJaWYgKGxpa2VseShj dXJfc3RhdGUtPm5hbWUgIT0gU1ZHQTNEX1RTX0JJTkRfVEVYVFVSRSkpCiAJCQljb250aW51ZTsK IAorCQlpZiAoY3VyX3N0YXRlLT5zdGFnZSA+PSBTVkdBM0RfTlVNX1RFWFRVUkVfVU5JVFMpIHsK KwkJCURSTV9FUlJPUigiSWxsZWdhbCB0ZXh0dXJlL3NhbXBsZXIgdW5pdCAldS5cbiIsCisJCQkJ ICAodW5zaWduZWQpIGN1cl9zdGF0ZS0+c3RhZ2UpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0K KwogCQlyZXQgPSB2bXdfY21kX3Jlc19jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgdm13X3Jl c19zdXJmYWNlLAogCQkJCQl1c2VyX3N1cmZhY2VfY29udmVydGVyLAogCQkJCQkmY3VyX3N0YXRl LT52YWx1ZSwgJnJlc19ub2RlKTsKQEAgLTEzNzEsMTQgKzE1OTksMTQgQEAgc3RhdGljIGludCB2 bXdfY21kX3RleF9zdGF0ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJcmV0dXJu IHJldDsKIAogCQlpZiAoZGV2X3ByaXYtPmhhc19tb2IpIHsKLQkJCXN0cnVjdCB2bXdfY3R4X2Jp bmRpbmZvIGJpOwotCi0JCQliaS5jdHggPSBjdHhfbm9kZS0+cmVzOwotCQkJYmkucmVzID0gcmVz X25vZGUgPyByZXNfbm9kZS0+cmVzIDogTlVMTDsKLQkJCWJpLmJ0ID0gdm13X2N0eF9iaW5kaW5n X3RleDsKLQkJCWJpLmkxLnRleHR1cmVfc3RhZ2UgPSBjdXJfc3RhdGUtPnN0YWdlOwotCQkJdm13 X2NvbnRleHRfYmluZGluZ19hZGQoY3R4X25vZGUtPnN0YWdlZF9iaW5kaW5ncywKLQkJCQkJCSZi aSk7CisJCQlzdHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb190ZXggYmluZGluZzsKKworCQkJYmluZGlu Zy5iaS5jdHggPSBjdHhfbm9kZS0+cmVzOworCQkJYmluZGluZy5iaS5yZXMgPSByZXNfbm9kZSA/ IHJlc19ub2RlLT5yZXMgOiBOVUxMOworCQkJYmluZGluZy5iaS5idCA9IHZtd19jdHhfYmluZGlu Z190ZXg7CisJCQliaW5kaW5nLnRleHR1cmVfc3RhZ2UgPSBjdXJfc3RhdGUtPnN0YWdlOworCQkJ dm13X2JpbmRpbmdfYWRkKGN0eF9ub2RlLT5zdGFnZWRfYmluZGluZ3MsICZiaW5kaW5nLmJpLAor CQkJCQkwLCBiaW5kaW5nLnRleHR1cmVfc3RhZ2UpOwogCQl9CiAJfQogCkBAIC0xNDA4LDYgKzE2 MzYsNDcgQEAgc3RhdGljIGludCB2bXdfY21kX2NoZWNrX2RlZmluZV9nbXJmYihzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2LAogCXJldHVybiByZXQ7CiB9CiAKKworLyoqCisgKiB2bXdfY21k X3Jlc19zd2l0Y2hfYmFja3VwIC0gVXRpbGl0eSBmdW5jdGlvbiB0byBoYW5kbGUgYmFja3VwIGJ1 ZmZlcgorICogc3dpdGNoaW5nCisgKgorICogQGRldl9wcml2OiBQb2ludGVyIHRvIGEgZGV2aWNl IHByaXZhdGUgc3RydWN0LgorICogQHN3X2NvbnRleHQ6IFRoZSBzb2Z0d2FyZSBjb250ZXh0IGJl aW5nIHVzZWQgZm9yIHRoaXMgYmF0Y2guCisgKiBAdmFsX25vZGU6IFRoZSB2YWxpZGF0aW9uIG5v ZGUgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZS4KKyAqIEBidWZfaWQ6IFBvaW50ZXIgdG8gdGhl IHVzZXItc3BhY2UgYmFja3VwIGJ1ZmZlciBoYW5kbGUgaW4gdGhlIGNvbW1hbmQKKyAqIHN0cmVh bS4KKyAqIEBiYWNrdXBfb2Zmc2V0OiBPZmZzZXQgb2YgYmFja3VwIGludG8gTU9CLgorICoKKyAq IFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgZm9yIHJlZ2lzdGVyaW5nIGEgc3dpdGNoIG9mIGJhY2t1 cCBidWZmZXJzCisgKiBpbiB0aGUgcmVzb3VyY2UgbWV0YWRhdGEganVzdCBwcmlvciB0byB1bnJl c2VydmluZy4gSXQncyBiYXNpY2FsbHkgYSB3cmFwcGVyCisgKiBhcm91bmQgdm13X2NtZF9yZXNf c3dpdGNoX2JhY2t1cCB3aXRoIGEgZGlmZmVyZW50IGludGVyZmFjZS4KKyAqLworc3RhdGljIGlu dCB2bXdfY21kX3Jlc19zd2l0Y2hfYmFja3VwKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCQkJICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkJICAgICBz dHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2RlICp2YWxfbm9kZSwKKwkJCQkgICAgIHVpbnQzMl90 ICpidWZfaWQsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGJhY2t1cF9vZmZzZXQpCit7CisJc3Ry dWN0IHZtd19kbWFfYnVmZmVyICpkbWFfYnVmOworCWludCByZXQ7CisKKwlyZXQgPSB2bXdfdHJh bnNsYXRlX21vYl9wdHIoZGV2X3ByaXYsIHN3X2NvbnRleHQsIGJ1Zl9pZCwgJmRtYV9idWYpOwor CWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWxfbm9kZS0+c3dpdGNoaW5nX2JhY2t1cCA9 IHRydWU7CisJaWYgKHZhbF9ub2RlLT5maXJzdF91c2FnZSkKKwkJdmFsX25vZGUtPm5vX2J1ZmZl cl9uZWVkZWQgPSB0cnVlOworCisJdm13X2RtYWJ1Zl91bnJlZmVyZW5jZSgmdmFsX25vZGUtPm5l d19iYWNrdXApOworCXZhbF9ub2RlLT5uZXdfYmFja3VwID0gZG1hX2J1ZjsKKwl2YWxfbm9kZS0+ bmV3X2JhY2t1cF9vZmZzZXQgPSBiYWNrdXBfb2Zmc2V0OworCisJcmV0dXJuIDA7Cit9CisKKwog LyoqCiAgKiB2bXdfY21kX3N3aXRjaF9iYWNrdXAgLSBVdGlsaXR5IGZ1bmN0aW9uIHRvIGhhbmRs ZSBiYWNrdXAgYnVmZmVyIHN3aXRjaGluZwogICoKQEAgLTE0MjEsNyArMTY5MCw4IEBAIHN0YXRp YyBpbnQgdm13X2NtZF9jaGVja19kZWZpbmVfZ21yZmIoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiwKICAqIEBiYWNrdXBfb2Zmc2V0OiBPZmZzZXQgb2YgYmFja3VwIGludG8gTU9CLgogICoK ICAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgZm9yIHJlZ2lzdGVyaW5nIGEgc3dpdGNoIG9mIGJh Y2t1cCBidWZmZXJzCi0gKiBpbiB0aGUgcmVzb3VyY2UgbWV0YWRhdGEganVzdCBwcmlvciB0byB1 bnJlc2VydmluZy4KKyAqIGluIHRoZSByZXNvdXJjZSBtZXRhZGF0YSBqdXN0IHByaW9yIHRvIHVu cmVzZXJ2aW5nLiBJdCdzIGJhc2ljYWxseSBhIHdyYXBwZXIKKyAqIGFyb3VuZCB2bXdfY21kX3Jl c19zd2l0Y2hfYmFja3VwIHdpdGggYSBkaWZmZXJlbnQgaW50ZXJmYWNlLgogICovCiBzdGF0aWMg aW50IHZtd19jbWRfc3dpdGNoX2JhY2t1cChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAog CQkJCSBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCkBAIC0xNDMyLDI3ICsxNzAy LDE2IEBAIHN0YXRpYyBpbnQgdm13X2NtZF9zd2l0Y2hfYmFja3VwKHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYsCiAJCQkJIHVpbnQzMl90ICpidWZfaWQsCiAJCQkJIHVuc2lnbmVkIGxvbmcg YmFja3VwX29mZnNldCkKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCB2bXdfZG1hX2J1ZmZlciAqZG1h X2J1ZjsKIAlzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2RlICp2YWxfbm9kZTsKKwlpbnQgcmV0 OwogCiAJcmV0ID0gdm13X2NtZF9yZXNfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIHJlc190 eXBlLAogCQkJCWNvbnZlcnRlciwgcmVzX2lkLCAmdmFsX25vZGUpOwotCWlmICh1bmxpa2VseShy ZXQgIT0gMCkpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB2bXdfdHJhbnNsYXRlX21vYl9wdHIo ZGV2X3ByaXYsIHN3X2NvbnRleHQsIGJ1Zl9pZCwgJmRtYV9idWYpOwotCWlmICh1bmxpa2VseShy ZXQgIT0gMCkpCisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICh2YWxfbm9kZS0+Zmly c3RfdXNhZ2UpCi0JCXZhbF9ub2RlLT5ub19idWZmZXJfbmVlZGVkID0gdHJ1ZTsKLQotCXZtd19k bWFidWZfdW5yZWZlcmVuY2UoJnZhbF9ub2RlLT5uZXdfYmFja3VwKTsKLQl2YWxfbm9kZS0+bmV3 X2JhY2t1cCA9IGRtYV9idWY7Ci0JdmFsX25vZGUtPm5ld19iYWNrdXBfb2Zmc2V0ID0gYmFja3Vw X29mZnNldDsKLQotCXJldHVybiAwOworCXJldHVybiB2bXdfY21kX3Jlc19zd2l0Y2hfYmFja3Vw KGRldl9wcml2LCBzd19jb250ZXh0LCB2YWxfbm9kZSwKKwkJCQkJIGJ1Zl9pZCwgYmFja3VwX29m ZnNldCk7CiB9CiAKIC8qKgpAQCAtMTcwNCwxMCArMTk2MywxMCBAQCBzdGF0aWMgaW50IHZtd19j bWRfc2hhZGVyX2Rlc3Ryb3koc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAlpZiAodW5s aWtlbHkoIWRldl9wcml2LT5oYXNfbW9iKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSB2bXdfY29t cGF0X3NoYWRlcl9yZW1vdmUodm13X2NvbnRleHRfcmVzX21hbih2YWwtPnJlcyksCi0JCQkJICAg ICAgIGNtZC0+Ym9keS5zaGlkLAotCQkJCSAgICAgICBjbWQtPmJvZHkudHlwZSwKLQkJCQkgICAg ICAgJnN3X2NvbnRleHQtPnN0YWdlZF9jbWRfcmVzKTsKKwlyZXQgPSB2bXdfc2hhZGVyX3JlbW92 ZSh2bXdfY29udGV4dF9yZXNfbWFuKHZhbC0+cmVzKSwKKwkJCQljbWQtPmJvZHkuc2hpZCwKKwkJ CQljbWQtPmJvZHkudHlwZSwKKwkJCQkmc3dfY29udGV4dC0+c3RhZ2VkX2NtZF9yZXMpOwogCWlm ICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE3MzUsMTMgKzE5OTQs MTkgQEAgc3RhdGljIGludCB2bXdfY21kX3NldF9zaGFkZXIoc3RydWN0IHZtd19wcml2YXRlICpk ZXZfcHJpdiwKIAkJU1ZHQTNkQ21kU2V0U2hhZGVyIGJvZHk7CiAJfSAqY21kOwogCXN0cnVjdCB2 bXdfcmVzb3VyY2VfdmFsX25vZGUgKmN0eF9ub2RlLCAqcmVzX25vZGUgPSBOVUxMOwotCXN0cnVj dCB2bXdfY3R4X2JpbmRpbmZvIGJpOworCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmZvX3NoYWRlciBi aW5kaW5nOwogCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyA9IE5VTEw7CiAJaW50IHJldDsKIAog CWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHN0cnVjdCB2bXdfc2V0X3NoYWRlcl9jbWQsCiAJ CQkgICBoZWFkZXIpOwogCisJaWYgKGNtZC0+Ym9keS50eXBlID49IFNWR0EzRF9TSEFERVJUWVBF X1BSRURYX01BWCkgeworCQlEUk1fRVJST1IoIklsbGVnYWwgc2hhZGVyIHR5cGUgJXUuXG4iLAor CQkJICAodW5zaWduZWQpIGNtZC0+Ym9keS50eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CiAJcmV0ID0gdm13X2NtZF9yZXNfY2hlY2soZGV2X3ByaXYsIHN3X2NvbnRleHQsIHZtd19yZXNf Y29udGV4dCwKIAkJCQl1c2VyX2NvbnRleHRfY29udmVydGVyLCAmY21kLT5ib2R5LmNpZCwKIAkJ CQkmY3R4X25vZGUpOwpAQCAtMTc1MiwxNCArMjAxNywxMiBAQCBzdGF0aWMgaW50IHZtd19jbWRf c2V0X3NoYWRlcihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQlyZXR1cm4gMDsKIAog CWlmIChjbWQtPmJvZHkuc2hpZCAhPSBTVkdBM0RfSU5WQUxJRF9JRCkgewotCQlyZXMgPSB2bXdf Y29tcGF0X3NoYWRlcl9sb29rdXAKLQkJCSh2bXdfY29udGV4dF9yZXNfbWFuKGN0eF9ub2RlLT5y ZXMpLAotCQkJIGNtZC0+Ym9keS5zaGlkLAotCQkJIGNtZC0+Ym9keS50eXBlKTsKKwkJcmVzID0g dm13X3NoYWRlcl9sb29rdXAodm13X2NvbnRleHRfcmVzX21hbihjdHhfbm9kZS0+cmVzKSwKKwkJ CQkJY21kLT5ib2R5LnNoaWQsCisJCQkJCWNtZC0+Ym9keS50eXBlKTsKIAogCQlpZiAoIUlTX0VS UihyZXMpKSB7CiAJCQlyZXQgPSB2bXdfY21kX3Jlc19yZWxvY19hZGQoZGV2X3ByaXYsIHN3X2Nv bnRleHQsCi0JCQkJCQkgICAgdm13X3Jlc19zaGFkZXIsCiAJCQkJCQkgICAgJmNtZC0+Ym9keS5z aGlkLCByZXMsCiAJCQkJCQkgICAgJnJlc19ub2RlKTsKIAkJCXZtd19yZXNvdXJjZV91bnJlZmVy ZW5jZSgmcmVzKTsKQEAgLTE3NzcsMTEgKzIwNDAsMTMgQEAgc3RhdGljIGludCB2bXdfY21kX3Nl dF9zaGFkZXIoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCXJldHVybiByZXQ7CiAJ fQogCi0JYmkuY3R4ID0gY3R4X25vZGUtPnJlczsKLQliaS5yZXMgPSByZXNfbm9kZSA/IHJlc19u b2RlLT5yZXMgOiBOVUxMOwotCWJpLmJ0ID0gdm13X2N0eF9iaW5kaW5nX3NoYWRlcjsKLQliaS5p MS5zaGFkZXJfdHlwZSA9IGNtZC0+Ym9keS50eXBlOwotCXJldHVybiB2bXdfY29udGV4dF9iaW5k aW5nX2FkZChjdHhfbm9kZS0+c3RhZ2VkX2JpbmRpbmdzLCAmYmkpOworCWJpbmRpbmcuYmkuY3R4 ID0gY3R4X25vZGUtPnJlczsKKwliaW5kaW5nLmJpLnJlcyA9IHJlc19ub2RlID8gcmVzX25vZGUt PnJlcyA6IE5VTEw7CisJYmluZGluZy5iaS5idCA9IHZtd19jdHhfYmluZGluZ19zaGFkZXI7CisJ YmluZGluZy5zaGFkZXJfc2xvdCA9IGNtZC0+Ym9keS50eXBlIC0gU1ZHQTNEX1NIQURFUlRZUEVf TUlOOworCXZtd19iaW5kaW5nX2FkZChjdHhfbm9kZS0+c3RhZ2VkX2JpbmRpbmdzLCAmYmluZGlu Zy5iaSwKKwkJCWJpbmRpbmcuc2hhZGVyX3Nsb3QsIDApOworCXJldHVybiAwOwogfQogCiAvKioK QEAgLTE4NDMsNzggKzIxMDgsNzA1IEBAIHN0YXRpYyBpbnQgdm13X2NtZF9iaW5kX2diX3NoYWRl cihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCSAgICAgY21kLT5ib2R5Lm9mZnNl dEluQnl0ZXMpOwogfQogCi1zdGF0aWMgaW50IHZtd19jbWRfY2hlY2tfbm90XzNkKHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250 ZXh0LAotCQkJCXZvaWQgKmJ1ZiwgdWludDMyX3QgKnNpemUpCisvKioKKyAqIHZtd19jbWRfZHhf c2V0X3NpbmdsZV9jb25zdGFudF9idWZmZXIgLSBWYWxpZGF0ZSBhbgorICogU1ZHQV8zRF9DTURf RFhfU0VUX1NJTkdMRV9DT05TVEFOVF9CVUZGRVIgY29tbWFuZC4KKyAqCisgKiBAZGV2X3ByaXY6 IFBvaW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3QuCisgKiBAc3dfY29udGV4dDogVGhl IHNvZnR3YXJlIGNvbnRleHQgYmVpbmcgdXNlZCBmb3IgdGhpcyBiYXRjaC4KKyAqIEBoZWFkZXI6 IFBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgaGVhZGVyIGluIHRoZSBjb21tYW5kIHN0cmVhbS4KKyAq Lworc3RhdGljIGludAordm13X2NtZF9keF9zZXRfc2luZ2xlX2NvbnN0YW50X2J1ZmZlcihzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgICAgIHN0cnVjdCB2bXdfc3dfY29udGV4 dCAqc3dfY29udGV4dCwKKwkJCQkgICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKIHsKLQl1 aW50MzJfdCBzaXplX3JlbWFpbmluZyA9ICpzaXplOwotCXVpbnQzMl90IGNtZF9pZDsKKwlzdHJ1 Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREWFNldFNpbmdsZUNv bnN0YW50QnVmZmVyIGJvZHk7CisJfSAqY21kOworCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25v ZGUgKnJlc19ub2RlID0gTlVMTDsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9ub2RlICpjdHhf bm9kZSA9IHN3X2NvbnRleHQtPmR4X2N0eF9ub2RlOworCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmZv X2NiIGJpbmRpbmc7CisJaW50IHJldDsKIAotCWNtZF9pZCA9ICgodWludDMyX3QgKilidWYpWzBd OwotCXN3aXRjaCAoY21kX2lkKSB7Ci0JY2FzZSBTVkdBX0NNRF9VUERBVEU6Ci0JCSpzaXplID0g c2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZihTVkdBRmlmb0NtZFVwZGF0ZSk7Ci0JCWJyZWFrOwot CWNhc2UgU1ZHQV9DTURfREVGSU5FX0dNUkZCOgotCQkqc2l6ZSA9IHNpemVvZih1aW50MzJfdCkg KyBzaXplb2YoU1ZHQUZpZm9DbWREZWZpbmVHTVJGQik7Ci0JCWJyZWFrOwotCWNhc2UgU1ZHQV9D TURfQkxJVF9HTVJGQl9UT19TQ1JFRU46Ci0JCSpzaXplID0gc2l6ZW9mKHVpbnQzMl90KSArIHNp emVvZihTVkdBRmlmb0NtZEJsaXRHTVJGQlRvU2NyZWVuKTsKLQkJYnJlYWs7Ci0JY2FzZSBTVkdB X0NNRF9CTElUX1NDUkVFTl9UT19HTVJGQjoKLQkJKnNpemUgPSBzaXplb2YodWludDMyX3QpICsg c2l6ZW9mKFNWR0FGaWZvQ21kQmxpdEdNUkZCVG9TY3JlZW4pOwotCQlicmVhazsKLQlkZWZhdWx0 OgotCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIFNWR0EgY29tbWFuZDogJXUuXG4iLCBjbWRfaWQp OworCWlmICh1bmxpa2VseShjdHhfbm9kZSA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkRYIENv bnRleHQgbm90IHNldC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoKnNpemUg PiBzaXplX3JlbWFpbmluZykgewotCQlEUk1fRVJST1IoIkludmFsaWQgU1ZHQSBjb21tYW5kIChz aXplIG1pc21hdGNoKToiCi0JCQkgICIgJXUuXG4iLCBjbWRfaWQpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9CisJY21kID0gY29udGFpbmVyX29mKGhlYWRlciwgdHlwZW9mKCpjbWQpLCBoZWFkZXIp OworCXJldCA9IHZtd19jbWRfcmVzX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCB2bXdfcmVz X3N1cmZhY2UsCisJCQkJdXNlcl9zdXJmYWNlX2NvbnZlcnRlciwKKwkJCQkmY21kLT5ib2R5LnNp ZCwgJnJlc19ub2RlKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0Owog Ci0JaWYgKHVubGlrZWx5KCFzd19jb250ZXh0LT5rZXJuZWwpKSB7Ci0JCURSTV9FUlJPUigiS2Vy bmVsIG9ubHkgU1ZHQSBjb21tYW5kOiAldS5cbiIsIGNtZF9pZCk7Ci0JCXJldHVybiAtRVBFUk07 CisJYmluZGluZy5iaS5jdHggPSBjdHhfbm9kZS0+cmVzOworCWJpbmRpbmcuYmkucmVzID0gcmVz X25vZGUgPyByZXNfbm9kZS0+cmVzIDogTlVMTDsKKwliaW5kaW5nLmJpLmJ0ID0gdm13X2N0eF9i aW5kaW5nX2NiOworCWJpbmRpbmcuc2hhZGVyX3Nsb3QgPSBjbWQtPmJvZHkudHlwZSAtIFNWR0Ez RF9TSEFERVJUWVBFX01JTjsKKwliaW5kaW5nLm9mZnNldCA9IGNtZC0+Ym9keS5vZmZzZXRJbkJ5 dGVzOworCWJpbmRpbmcuc2l6ZSA9IGNtZC0+Ym9keS5zaXplSW5CeXRlczsKKwliaW5kaW5nLnNs b3QgPSBjbWQtPmJvZHkuc2xvdDsKKworCWlmIChiaW5kaW5nLnNoYWRlcl9zbG90ID49IFNWR0Ez RF9OVU1fU0hBREVSVFlQRV9EWDEwIHx8CisJICAgIGJpbmRpbmcuc2xvdCA+PSBTVkdBM0RfRFhf TUFYX0NPTlNUQlVGRkVSUykgeworCQlEUk1fRVJST1IoIklsbGVnYWwgY29uc3QgYnVmZmVyIHNo YWRlciAldSBzbG90ICV1LlxuIiwKKwkJCSAgKHVuc2lnbmVkKSBjbWQtPmJvZHkudHlwZSwKKwkJ CSAgKHVuc2lnbmVkKSBiaW5kaW5nLnNsb3QpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlp ZiAoY21kX2lkID09IFNWR0FfQ01EX0RFRklORV9HTVJGQikKLQkJcmV0dXJuIHZtd19jbWRfY2hl Y2tfZGVmaW5lX2dtcmZiKGRldl9wcml2LCBzd19jb250ZXh0LCBidWYpOworCXZtd19iaW5kaW5n X2FkZChjdHhfbm9kZS0+c3RhZ2VkX2JpbmRpbmdzLCAmYmluZGluZy5iaSwKKwkJCWJpbmRpbmcu c2hhZGVyX3Nsb3QsIGJpbmRpbmcuc2xvdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNv bnN0IHN0cnVjdCB2bXdfY21kX2VudHJ5IHZtd19jbWRfZW50cmllc1tTVkdBXzNEX0NNRF9NQVhd ID0gewotCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NVUkZBQ0VfREVGSU5FLCAmdm13X2NtZF9p bnZhbGlkLAotCQkgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSksCi0JVk1XX0NNRF9ERUYoU1ZHQV8z RF9DTURfU1VSRkFDRV9ERVNUUk9ZLCAmdm13X2NtZF9pbnZhbGlkLAotCQkgICAgZmFsc2UsIGZh bHNlLCBmYWxzZSksCi0JVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU1VSRkFDRV9DT1BZLCAmdm13 X2NtZF9zdXJmYWNlX2NvcHlfY2hlY2ssCi0JCSAgICB0cnVlLCBmYWxzZSwgZmFsc2UpLAotCVZN V19DTURfREVGKFNWR0FfM0RfQ01EX1NVUkZBQ0VfU1RSRVRDSEJMVCwgJnZtd19jbWRfc3RyZXRj aF9ibHRfY2hlY2ssCi0JCSAgICB0cnVlLCBmYWxzZSwgZmFsc2UpLAotCVZNV19DTURfREVGKFNW R0FfM0RfQ01EX1NVUkZBQ0VfRE1BLCAmdm13X2NtZF9kbWEsCi0JCSAgICB0cnVlLCBmYWxzZSwg ZmFsc2UpLAotCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0NPTlRFWFRfREVGSU5FLCAmdm13X2Nt ZF9pbnZhbGlkLAotCQkgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSksCi0JVk1XX0NNRF9ERUYoU1ZH QV8zRF9DTURfQ09OVEVYVF9ERVNUUk9ZLCAmdm13X2NtZF9pbnZhbGlkLAotCQkgICAgZmFsc2Us IGZhbHNlLCBmYWxzZSksCi0JVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUVFJBTlNGT1JNLCAm dm13X2NtZF9jaWRfY2hlY2ssCi0JCSAgICB0cnVlLCBmYWxzZSwgZmFsc2UpLAotCVZNV19DTURf REVGKFNWR0FfM0RfQ01EX1NFVFpSQU5HRSwgJnZtd19jbWRfY2lkX2NoZWNrLAotCQkgICAgdHJ1 ZSwgZmFsc2UsIGZhbHNlKSwKLQlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRSRU5ERVJTVEFU RSwgJnZtd19jbWRfY2lkX2NoZWNrLAotCQkgICAgdHJ1ZSwgZmFsc2UsIGZhbHNlKSwKLQlWTVdf Q01EX0RFRihTVkdBXzNEX0NNRF9TRVRSRU5ERVJUQVJHRVQsCi0JCSAgICAmdm13X2NtZF9zZXRf cmVuZGVyX3RhcmdldF9jaGVjaywgdHJ1ZSwgZmFsc2UsIGZhbHNlKSwKLQlWTVdfQ01EX0RFRihT VkdBXzNEX0NNRF9TRVRURVhUVVJFU1RBVEUsICZ2bXdfY21kX3RleF9zdGF0ZSwKLQkJICAgIHRy dWUsIGZhbHNlLCBmYWxzZSksCi0JVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUTUFURVJJQUws ICZ2bXdfY21kX2NpZF9jaGVjaywKLQkJICAgIHRydWUsIGZhbHNlLCBmYWxzZSksCi0JVk1XX0NN RF9ERUYoU1ZHQV8zRF9DTURfU0VUTElHSFREQVRBLCAmdm13X2NtZF9jaWRfY2hlY2ssCi0JCSAg ICB0cnVlLCBmYWxzZSwgZmFsc2UpLAorLyoqCisgKiB2bXdfY21kX2R4X3NldF9zaGFkZXJfcmVz IC0gVmFsaWRhdGUgYW4KKyAqIFNWR0FfM0RfQ01EX0RYX1NFVF9TSEFERVJfUkVTT1VSQ0VTIGNv bW1hbmQKKyAqCisgKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBzdHJ1 Y3QuCisgKiBAc3dfY29udGV4dDogVGhlIHNvZnR3YXJlIGNvbnRleHQgYmVpbmcgdXNlZCBmb3Ig dGhpcyBiYXRjaC4KKyAqIEBoZWFkZXI6IFBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgaGVhZGVyIGlu IHRoZSBjb21tYW5kIHN0cmVhbS4KKyAqLworc3RhdGljIGludCB2bXdfY21kX2R4X3NldF9zaGFk ZXJfcmVzKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgICBzdHJ1Y3Qgdm13 X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkJICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRl cikKK3sKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWRE WFNldFNoYWRlclJlc291cmNlcyBib2R5OworCX0gKmNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIs IHR5cGVvZigqY21kKSwgaGVhZGVyKTsKKwl1MzIgbnVtX3NyX3ZpZXcgPSAoY21kLT5oZWFkZXIu c2l6ZSAtIHNpemVvZihjbWQtPmJvZHkpKSAvCisJCXNpemVvZihTVkdBM2RTaGFkZXJSZXNvdXJj ZVZpZXdJZCk7CisKKwlpZiAoKHU2NCkgY21kLT5ib2R5LnN0YXJ0VmlldyArICh1NjQpIG51bV9z cl92aWV3ID4KKwkgICAgKHU2NCkgU1ZHQTNEX0RYX01BWF9TUlZJRVdTIHx8CisJICAgIGNtZC0+ Ym9keS50eXBlID49IFNWR0EzRF9TSEFERVJUWVBFX0RYMTBfTUFYKSB7CisJCURSTV9FUlJPUigi SW52YWxpZCBzaGFkZXIgYmluZGluZy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwly ZXR1cm4gdm13X3ZpZXdfYmluZGluZ3NfYWRkKHN3X2NvbnRleHQsIHZtd192aWV3X3NyLAorCQkJ CSAgICAgdm13X2N0eF9iaW5kaW5nX3NyLAorCQkJCSAgICAgY21kLT5ib2R5LnR5cGUgLSBTVkdB M0RfU0hBREVSVFlQRV9NSU4sCisJCQkJICAgICAodm9pZCAqKSAmY21kWzFdLCBudW1fc3Jfdmll dywKKwkJCQkgICAgIGNtZC0+Ym9keS5zdGFydFZpZXcpOworfQorCisvKioKKyAqIHZtd19jbWRf ZHhfc2V0X3NoYWRlciAtIFZhbGlkYXRlIGFuIFNWR0FfM0RfQ01EX0RYX1NFVF9TSEFERVIKKyAq IGNvbW1hbmQKKyAqCisgKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBz dHJ1Y3QuCisgKiBAc3dfY29udGV4dDogVGhlIHNvZnR3YXJlIGNvbnRleHQgYmVpbmcgdXNlZCBm b3IgdGhpcyBiYXRjaC4KKyAqIEBoZWFkZXI6IFBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgaGVhZGVy IGluIHRoZSBjb21tYW5kIHN0cmVhbS4KKyAqLworc3RhdGljIGludCB2bXdfY21kX2R4X3NldF9z aGFkZXIoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgc3RydWN0IHZtd19zd19j b250ZXh0ICpzd19jb250ZXh0LAorCQkJCSBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlz dHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREWFNldFNoYWRl ciBib2R5OworCX0gKmNtZDsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMgPSBOVUxMOworCXN0 cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25vZGUgKmN0eF9ub2RlID0gc3dfY29udGV4dC0+ZHhfY3R4 X25vZGU7CisJc3RydWN0IHZtd19jdHhfYmluZGluZm9fc2hhZGVyIGJpbmRpbmc7CisJaW50IHJl dCA9IDA7CisKKwlpZiAodW5saWtlbHkoY3R4X25vZGUgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9S KCJEWCBDb250ZXh0IG5vdCBzZXQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY21k ID0gY29udGFpbmVyX29mKGhlYWRlciwgdHlwZW9mKCpjbWQpLCBoZWFkZXIpOworCisJaWYgKGNt ZC0+Ym9keS50eXBlID49IFNWR0EzRF9TSEFERVJUWVBFX0RYMTBfTUFYKSB7CisJCURSTV9FUlJP UigiSWxsZWdhbCBzaGFkZXIgdHlwZSAldS5cbiIsCisJCQkgICh1bnNpZ25lZCkgY21kLT5ib2R5 LnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY21kLT5ib2R5LnNoYWRlcklk ICE9IFNWR0EzRF9JTlZBTElEX0lEKSB7CisJCXJlcyA9IHZtd19zaGFkZXJfbG9va3VwKHN3X2Nv bnRleHQtPm1hbiwgY21kLT5ib2R5LnNoYWRlcklkLCAwKTsKKwkJaWYgKElTX0VSUihyZXMpKSB7 CisJCQlEUk1fRVJST1IoIkNvdWxkIG5vdCBmaW5kIHNoYWRlciBmb3IgYmluZGluZy5cbiIpOwor CQkJcmV0dXJuIFBUUl9FUlIocmVzKTsKKwkJfQorCisJCXJldCA9IHZtd19yZXNvdXJjZV92YWxf YWRkKHN3X2NvbnRleHQsIHJlcywgTlVMTCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF91bnJl ZjsKKwl9CisKKwliaW5kaW5nLmJpLmN0eCA9IGN0eF9ub2RlLT5yZXM7CisJYmluZGluZy5iaS5y ZXMgPSByZXM7CisJYmluZGluZy5iaS5idCA9IHZtd19jdHhfYmluZGluZ19keF9zaGFkZXI7CisJ YmluZGluZy5zaGFkZXJfc2xvdCA9IGNtZC0+Ym9keS50eXBlIC0gU1ZHQTNEX1NIQURFUlRZUEVf TUlOOworCisJdm13X2JpbmRpbmdfYWRkKGN0eF9ub2RlLT5zdGFnZWRfYmluZGluZ3MsICZiaW5k aW5nLmJpLAorCQkJYmluZGluZy5zaGFkZXJfc2xvdCwgMCk7CitvdXRfdW5yZWY6CisJaWYgKHJl cykKKwkJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOworCisJcmV0dXJuIHJldDsKK30K KworLyoqCisgKiB2bXdfY21kX2R4X3NldF92ZXJ0ZXhfYnVmZmVycyAtIFZhbGlkYXRlcyBhbgor ICogU1ZHQV8zRF9DTURfRFhfU0VUX1ZFUlRFWF9CVUZGRVJTIGNvbW1hbmQKKyAqCisgKiBAZGV2 X3ByaXY6IFBvaW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3QuCisgKiBAc3dfY29udGV4 dDogVGhlIHNvZnR3YXJlIGNvbnRleHQgYmVpbmcgdXNlZCBmb3IgdGhpcyBiYXRjaC4KKyAqIEBo ZWFkZXI6IFBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgaGVhZGVyIGluIHRoZSBjb21tYW5kIHN0cmVh bS4KKyAqLworc3RhdGljIGludCB2bXdfY21kX2R4X3NldF92ZXJ0ZXhfYnVmZmVycyhzdHJ1Y3Qg dm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCQkgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19j b250ZXh0LAorCQkJCQkgU1ZHQTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHZtd19y ZXNvdXJjZV92YWxfbm9kZSAqY3R4X25vZGUgPSBzd19jb250ZXh0LT5keF9jdHhfbm9kZTsKKwlz dHJ1Y3Qgdm13X2N0eF9iaW5kaW5mb192YiBiaW5kaW5nOworCXN0cnVjdCB2bXdfcmVzb3VyY2Vf dmFsX25vZGUgKnJlc19ub2RlOworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7 CisJCVNWR0EzZENtZERYU2V0VmVydGV4QnVmZmVycyBib2R5OworCQlTVkdBM2RWZXJ0ZXhCdWZm ZXIgYnVmW107CisJfSAqY21kOworCWludCBpLCByZXQsIG51bTsKKworCWlmICh1bmxpa2VseShj dHhfbm9kZSA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkRYIENvbnRleHQgbm90IHNldC5cbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCB0 eXBlb2YoKmNtZCksIGhlYWRlcik7CisJbnVtID0gKGNtZC0+aGVhZGVyLnNpemUgLSBzaXplb2Yo Y21kLT5ib2R5KSkgLworCQlzaXplb2YoU1ZHQTNkVmVydGV4QnVmZmVyKTsKKwlpZiAoKHU2NClu dW0gKyAodTY0KWNtZC0+Ym9keS5zdGFydEJ1ZmZlciA+CisJICAgICh1NjQpU1ZHQTNEX0RYX01B WF9WRVJURVhCVUZGRVJTKSB7CisJCURSTV9FUlJPUigiSW52YWxpZCBudW1iZXIgb2YgdmVydGV4 IGJ1ZmZlcnMuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8 IG51bTsgaSsrKSB7CisJCXJldCA9IHZtd19jbWRfcmVzX2NoZWNrKGRldl9wcml2LCBzd19jb250 ZXh0LCB2bXdfcmVzX3N1cmZhY2UsCisJCQkJCXVzZXJfc3VyZmFjZV9jb252ZXJ0ZXIsCisJCQkJ CSZjbWQtPmJ1ZltpXS5zaWQsICZyZXNfbm9kZSk7CisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkp CisJCQlyZXR1cm4gcmV0OworCisJCWJpbmRpbmcuYmkuY3R4ID0gY3R4X25vZGUtPnJlczsKKwkJ YmluZGluZy5iaS5idCA9IHZtd19jdHhfYmluZGluZ192YjsKKwkJYmluZGluZy5iaS5yZXMgPSAo KHJlc19ub2RlKSA/IHJlc19ub2RlLT5yZXMgOiBOVUxMKTsKKwkJYmluZGluZy5vZmZzZXQgPSBj bWQtPmJ1ZltpXS5vZmZzZXQ7CisJCWJpbmRpbmcuc3RyaWRlID0gY21kLT5idWZbaV0uc3RyaWRl OworCQliaW5kaW5nLnNsb3QgPSBpICsgY21kLT5ib2R5LnN0YXJ0QnVmZmVyOworCisJCXZtd19i aW5kaW5nX2FkZChjdHhfbm9kZS0+c3RhZ2VkX2JpbmRpbmdzLCAmYmluZGluZy5iaSwKKwkJCQkw LCBiaW5kaW5nLnNsb3QpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZtd19jbWRf ZHhfaWFfc2V0X3ZlcnRleF9idWZmZXJzIC0gVmFsaWRhdGUgYW4KKyAqIFNWR0FfM0RfQ01EX0RY X0lBX1NFVF9WRVJURVhfQlVGRkVSUyBjb21tYW5kLgorICoKKyAqIEBkZXZfcHJpdjogUG9pbnRl ciB0byBhIGRldmljZSBwcml2YXRlIHN0cnVjdC4KKyAqIEBzd19jb250ZXh0OiBUaGUgc29mdHdh cmUgY29udGV4dCBiZWluZyB1c2VkIGZvciB0aGlzIGJhdGNoLgorICogQGhlYWRlcjogUG9pbnRl ciB0byB0aGUgY29tbWFuZCBoZWFkZXIgaW4gdGhlIGNvbW1hbmQgc3RyZWFtLgorICovCitzdGF0 aWMgaW50IHZtd19jbWRfZHhfc2V0X2luZGV4X2J1ZmZlcihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2LAorCQkJCSAgICAgICBzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJ CQkJICAgICAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfcmVzb3Vy Y2VfdmFsX25vZGUgKmN0eF9ub2RlID0gc3dfY29udGV4dC0+ZHhfY3R4X25vZGU7CisJc3RydWN0 IHZtd19jdHhfYmluZGluZm9faWIgYmluZGluZzsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlX3ZhbF9u b2RlICpyZXNfbm9kZTsKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlT VkdBM2RDbWREWFNldEluZGV4QnVmZmVyIGJvZHk7CisJfSAqY21kOworCWludCByZXQ7CisKKwlp ZiAodW5saWtlbHkoY3R4X25vZGUgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJEWCBDb250ZXh0 IG5vdCBzZXQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY21kID0gY29udGFpbmVy X29mKGhlYWRlciwgdHlwZW9mKCpjbWQpLCBoZWFkZXIpOworCXJldCA9IHZtd19jbWRfcmVzX2No ZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCB2bXdfcmVzX3N1cmZhY2UsCisJCQkJdXNlcl9zdXJm YWNlX2NvbnZlcnRlciwKKwkJCQkmY21kLT5ib2R5LnNpZCwgJnJlc19ub2RlKTsKKwlpZiAodW5s aWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gcmV0OworCisJYmluZGluZy5iaS5jdHggPSBjdHhf bm9kZS0+cmVzOworCWJpbmRpbmcuYmkucmVzID0gKChyZXNfbm9kZSkgPyByZXNfbm9kZS0+cmVz IDogTlVMTCk7CisJYmluZGluZy5iaS5idCA9IHZtd19jdHhfYmluZGluZ19pYjsKKwliaW5kaW5n Lm9mZnNldCA9IGNtZC0+Ym9keS5vZmZzZXQ7CisJYmluZGluZy5mb3JtYXQgPSBjbWQtPmJvZHku Zm9ybWF0OworCisJdm13X2JpbmRpbmdfYWRkKGN0eF9ub2RlLT5zdGFnZWRfYmluZGluZ3MsICZi aW5kaW5nLmJpLCAwLCAwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZtd19jbWRfZHhf c2V0X3JlbmRlcnRhcmdldCAtIFZhbGlkYXRlIGFuCisgKiBTVkdBXzNEX0NNRF9EWF9TRVRfUkVO REVSVEFSR0VUUyBjb21tYW5kCisgKgorICogQGRldl9wcml2OiBQb2ludGVyIHRvIGEgZGV2aWNl IHByaXZhdGUgc3RydWN0LgorICogQHN3X2NvbnRleHQ6IFRoZSBzb2Z0d2FyZSBjb250ZXh0IGJl aW5nIHVzZWQgZm9yIHRoaXMgYmF0Y2guCisgKiBAaGVhZGVyOiBQb2ludGVyIHRvIHRoZSBjb21t YW5kIGhlYWRlciBpbiB0aGUgY29tbWFuZCBzdHJlYW0uCisgKi8KK3N0YXRpYyBpbnQgdm13X2Nt ZF9keF9zZXRfcmVuZGVydGFyZ2V0cyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJ CQlzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkJCVNWR0EzZENtZEhlYWRl ciAqaGVhZGVyKQoreworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNW R0EzZENtZERYU2V0UmVuZGVyVGFyZ2V0cyBib2R5OworCX0gKmNtZCA9IGNvbnRhaW5lcl9vZiho ZWFkZXIsIHR5cGVvZigqY21kKSwgaGVhZGVyKTsKKwlpbnQgcmV0OworCXUzMiBudW1fcnRfdmll dyA9IChjbWQtPmhlYWRlci5zaXplIC0gc2l6ZW9mKGNtZC0+Ym9keSkpIC8KKwkJc2l6ZW9mKFNW R0EzZFJlbmRlclRhcmdldFZpZXdJZCk7CisKKwlpZiAobnVtX3J0X3ZpZXcgPiBTVkdBM0RfTUFY X1NJTVVMVEFORU9VU19SRU5ERVJfVEFSR0VUUykgeworCQlEUk1fRVJST1IoIkludmFsaWQgRFgg UmVuZGVydGFyZ2V0IGJpbmRpbmcuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0 ID0gdm13X3ZpZXdfYmluZGluZ3NfYWRkKHN3X2NvbnRleHQsIHZtd192aWV3X2RzLAorCQkJCSAg ICB2bXdfY3R4X2JpbmRpbmdfZHMsIDAsCisJCQkJICAgICZjbWQtPmJvZHkuZGVwdGhTdGVuY2ls Vmlld0lkLCAxLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHZtd192 aWV3X2JpbmRpbmdzX2FkZChzd19jb250ZXh0LCB2bXdfdmlld19ydCwKKwkJCQkgICAgIHZtd19j dHhfYmluZGluZ19keF9ydCwgMCwKKwkJCQkgICAgICh2b2lkICopJmNtZFsxXSwgbnVtX3J0X3Zp ZXcsIDApOworfQorCisvKioKKyAqIHZtd19jbWRfZHhfY2xlYXJfcmVuZGVydGFyZ2V0X3ZpZXcg LSBWYWxpZGF0ZSBhbgorICogU1ZHQV8zRF9DTURfRFhfQ0xFQVJfUkVOREVSVEFSR0VUX1ZJRVcg Y29tbWFuZAorICoKKyAqIEBkZXZfcHJpdjogUG9pbnRlciB0byBhIGRldmljZSBwcml2YXRlIHN0 cnVjdC4KKyAqIEBzd19jb250ZXh0OiBUaGUgc29mdHdhcmUgY29udGV4dCBiZWluZyB1c2VkIGZv ciB0aGlzIGJhdGNoLgorICogQGhlYWRlcjogUG9pbnRlciB0byB0aGUgY29tbWFuZCBoZWFkZXIg aW4gdGhlIGNvbW1hbmQgc3RyZWFtLgorICovCitzdGF0aWMgaW50IHZtd19jbWRfZHhfY2xlYXJf cmVuZGVydGFyZ2V0X3ZpZXcoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJICAg ICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJCQkgICAgICBTVkdBM2RD bWRIZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVy OworCQlTVkdBM2RDbWREWENsZWFyUmVuZGVyVGFyZ2V0VmlldyBib2R5OworCX0gKmNtZCA9IGNv bnRhaW5lcl9vZihoZWFkZXIsIHR5cGVvZigqY21kKSwgaGVhZGVyKTsKKworCXJldHVybiB2bXdf dmlld19pZF92YWxfYWRkKHN3X2NvbnRleHQsIHZtd192aWV3X3J0LAorCQkJCSAgIGNtZC0+Ym9k eS5yZW5kZXJUYXJnZXRWaWV3SWQpOworfQorCisvKioKKyAqIHZtd19jbWRfZHhfY2xlYXJfcmVu ZGVydGFyZ2V0X3ZpZXcgLSBWYWxpZGF0ZSBhbgorICogU1ZHQV8zRF9DTURfRFhfQ0xFQVJfREVQ VEhTVEVOQ0lMX1ZJRVcgY29tbWFuZAorICoKKyAqIEBkZXZfcHJpdjogUG9pbnRlciB0byBhIGRl dmljZSBwcml2YXRlIHN0cnVjdC4KKyAqIEBzd19jb250ZXh0OiBUaGUgc29mdHdhcmUgY29udGV4 dCBiZWluZyB1c2VkIGZvciB0aGlzIGJhdGNoLgorICogQGhlYWRlcjogUG9pbnRlciB0byB0aGUg Y29tbWFuZCBoZWFkZXIgaW4gdGhlIGNvbW1hbmQgc3RyZWFtLgorICovCitzdGF0aWMgaW50IHZt d19jbWRfZHhfY2xlYXJfZGVwdGhzdGVuY2lsX3ZpZXcoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiwKKwkJCQkJICAgICAgc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAorCQkJ CQkgICAgICBTVkdBM2RDbWRIZWFkZXIgKmhlYWRlcikKK3sKKwlzdHJ1Y3QgeworCQlTVkdBM2RD bWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREWENsZWFyRGVwdGhTdGVuY2lsVmlldyBib2R5 OworCX0gKmNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHR5cGVvZigqY21kKSwgaGVhZGVyKTsK KworCXJldHVybiB2bXdfdmlld19pZF92YWxfYWRkKHN3X2NvbnRleHQsIHZtd192aWV3X2RzLAor CQkJCSAgIGNtZC0+Ym9keS5kZXB0aFN0ZW5jaWxWaWV3SWQpOworfQorCitzdGF0aWMgaW50IHZt d19jbWRfZHhfdmlld19kZWZpbmUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkg IHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkgIFNWR0EzZENtZEhlYWRl ciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25vZGUgKmN0eF9ub2RlID0g c3dfY29udGV4dC0+ZHhfY3R4X25vZGU7CisJc3RydWN0IHZtd19yZXNvdXJjZV92YWxfbm9kZSAq c3JmX25vZGU7CisJc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzOworCWVudW0gdm13X3ZpZXdfdHlw ZSB2aWV3X3R5cGU7CisJaW50IHJldDsKKwkvKgorCSAqIFRoaXMgaXMgYmFzZWQgb24gdGhlIGZh Y3QgdGhhdCBhbGwgYWZmZWN0ZWQgZGVmaW5lIGNvbW1hbmRzIGhhdmUKKwkgKiB0aGUgc2FtZSBp bml0aWFsIGNvbW1hbmQgYm9keSBsYXlvdXQuCisJICovCisJc3RydWN0IHsKKwkJU1ZHQTNkQ21k SGVhZGVyIGhlYWRlcjsKKwkJdWludDMyIGRlZmluZWRfaWQ7CisJCXVpbnQzMiBzaWQ7CisJfSAq Y21kOworCisJaWYgKHVubGlrZWx5KGN0eF9ub2RlID09IE5VTEwpKSB7CisJCURSTV9FUlJPUigi RFggQ29udGV4dCBub3Qgc2V0LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZpZXdf dHlwZSA9IHZtd192aWV3X2NtZF90b190eXBlKGhlYWRlci0+aWQpOworCWNtZCA9IGNvbnRhaW5l cl9vZihoZWFkZXIsIHR5cGVvZigqY21kKSwgaGVhZGVyKTsKKwlyZXQgPSB2bXdfY21kX3Jlc19j aGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgdm13X3Jlc19zdXJmYWNlLAorCQkJCXVzZXJfc3Vy ZmFjZV9jb252ZXJ0ZXIsCisJCQkJJmNtZC0+c2lkLCAmc3JmX25vZGUpOworCWlmICh1bmxpa2Vs eShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7CisKKwlyZXMgPSB2bXdfY29udGV4dF9jb3RhYmxl KGN0eF9ub2RlLT5yZXMsIHZtd192aWV3X2NvdGFibGVzW3ZpZXdfdHlwZV0pOworCXJldCA9IHZt d19jb3RhYmxlX25vdGlmeShyZXMsIGNtZC0+ZGVmaW5lZF9pZCk7CisJdm13X3Jlc291cmNlX3Vu cmVmZXJlbmNlKCZyZXMpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiByZXQ7 CisKKwlyZXR1cm4gdm13X3ZpZXdfYWRkKHN3X2NvbnRleHQtPm1hbiwKKwkJCSAgICBjdHhfbm9k ZS0+cmVzLAorCQkJICAgIHNyZl9ub2RlLT5yZXMsCisJCQkgICAgdmlld190eXBlLAorCQkJICAg IGNtZC0+ZGVmaW5lZF9pZCwKKwkJCSAgICBoZWFkZXIsCisJCQkgICAgaGVhZGVyLT5zaXplICsg c2l6ZW9mKCpoZWFkZXIpLAorCQkJICAgICZzd19jb250ZXh0LT5zdGFnZWRfY21kX3Jlcyk7Cit9 CisKK3N0YXRpYyBpbnQgdm13X2NtZF9keF9zb19kZWZpbmUoc3RydWN0IHZtd19wcml2YXRlICpk ZXZfcHJpdiwKKwkJCQlzdHJ1Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkJU1ZH QTNkQ21kSGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHZtd19yZXNvdXJjZV92YWxfbm9kZSAq Y3R4X25vZGUgPSBzd19jb250ZXh0LT5keF9jdHhfbm9kZTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNl ICpyZXM7CisJLyoKKwkgKiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgYWxsIGFmZmVj dGVkIGRlZmluZSBjb21tYW5kcyBoYXZlCisJICogdGhlIHNhbWUgaW5pdGlhbCBjb21tYW5kIGJv ZHkgbGF5b3V0LgorCSAqLworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJ CXVpbnQzMiBkZWZpbmVkX2lkOworCX0gKmNtZDsKKwllbnVtIHZtd19zb190eXBlIHNvX3R5cGU7 CisJaW50IHJldDsKKworCWlmICh1bmxpa2VseShjdHhfbm9kZSA9PSBOVUxMKSkgeworCQlEUk1f RVJST1IoIkRYIENvbnRleHQgbm90IHNldC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK Kwlzb190eXBlID0gdm13X3NvX2NtZF90b190eXBlKGhlYWRlci0+aWQpOworCXJlcyA9IHZtd19j b250ZXh0X2NvdGFibGUoY3R4X25vZGUtPnJlcywgdm13X3NvX2NvdGFibGVzW3NvX3R5cGVdKTsK KwljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCB0eXBlb2YoKmNtZCksIGhlYWRlcik7CisJcmV0 ID0gdm13X2NvdGFibGVfbm90aWZ5KHJlcywgY21kLT5kZWZpbmVkX2lkKTsKKwl2bXdfcmVzb3Vy Y2VfdW5yZWZlcmVuY2UoJnJlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZtd19j bWRfZHhfY2hlY2tfc3VicmVzb3VyY2UgLSBWYWxpZGF0ZSBhbgorICogU1ZHQV8zRF9DTURfRFhf W1hdX1NVQlJFU09VUkNFIGNvbW1hbmQKKyAqCisgKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8gYSBk ZXZpY2UgcHJpdmF0ZSBzdHJ1Y3QuCisgKiBAc3dfY29udGV4dDogVGhlIHNvZnR3YXJlIGNvbnRl eHQgYmVpbmcgdXNlZCBmb3IgdGhpcyBiYXRjaC4KKyAqIEBoZWFkZXI6IFBvaW50ZXIgdG8gdGhl IGNvbW1hbmQgaGVhZGVyIGluIHRoZSBjb21tYW5kIHN0cmVhbS4KKyAqLworc3RhdGljIGludCB2 bXdfY21kX2R4X2NoZWNrX3N1YnJlc291cmNlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCQkJCXN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkJU1ZHQTNkQ21k SGVhZGVyICpoZWFkZXIpCit7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsK KwkJdW5pb24geworCQkJU1ZHQTNkQ21kRFhSZWFkYmFja1N1YlJlc291cmNlIHJfYm9keTsKKwkJ CVNWR0EzZENtZERYSW52YWxpZGF0ZVN1YlJlc291cmNlIGlfYm9keTsKKwkJCVNWR0EzZENtZERY VXBkYXRlU3ViUmVzb3VyY2UgdV9ib2R5OworCQkJU1ZHQTNkU3VyZmFjZUlkIHNpZDsKKwkJfTsK Kwl9ICpjbWQ7CisKKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2YodHlwZW9mKCpjbWQpLCByX2JvZHku c2lkKSAhPQorCQkgICAgIG9mZnNldG9mKHR5cGVvZigqY21kKSwgc2lkKSk7CisJQlVJTERfQlVH X09OKG9mZnNldG9mKHR5cGVvZigqY21kKSwgaV9ib2R5LnNpZCkgIT0KKwkJICAgICBvZmZzZXRv Zih0eXBlb2YoKmNtZCksIHNpZCkpOworCUJVSUxEX0JVR19PTihvZmZzZXRvZih0eXBlb2YoKmNt ZCksIHVfYm9keS5zaWQpICE9CisJCSAgICAgb2Zmc2V0b2YodHlwZW9mKCpjbWQpLCBzaWQpKTsK KworCWNtZCA9IGNvbnRhaW5lcl9vZihoZWFkZXIsIHR5cGVvZigqY21kKSwgaGVhZGVyKTsKKwor CXJldHVybiB2bXdfY21kX3Jlc19jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgdm13X3Jlc19z dXJmYWNlLAorCQkJCSB1c2VyX3N1cmZhY2VfY29udmVydGVyLAorCQkJCSAmY21kLT5zaWQsIE5V TEwpOworfQorCitzdGF0aWMgaW50IHZtd19jbWRfZHhfY2lkX2NoZWNrKHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYsCisJCQkJc3RydWN0IHZtd19zd19jb250ZXh0ICpzd19jb250ZXh0LAor CQkJCVNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFs X25vZGUgKmN0eF9ub2RlID0gc3dfY29udGV4dC0+ZHhfY3R4X25vZGU7CisKKwlpZiAodW5saWtl bHkoY3R4X25vZGUgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJEWCBDb250ZXh0IG5vdCBzZXQu XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICog dm13X2NtZF9keF92aWV3X3JlbW92ZSAtIHZhbGlkYXRlIGEgdmlldyByZW1vdmUgY29tbWFuZCBh bmQKKyAqIHNjaGVkdWxlIHRoZSB2aWV3IHJlc291cmNlIGZvciByZW1vdmFsLgorICoKKyAqIEBk ZXZfcHJpdjogUG9pbnRlciB0byBhIGRldmljZSBwcml2YXRlIHN0cnVjdC4KKyAqIEBzd19jb250 ZXh0OiBUaGUgc29mdHdhcmUgY29udGV4dCBiZWluZyB1c2VkIGZvciB0aGlzIGJhdGNoLgorICog QGhlYWRlcjogUG9pbnRlciB0byB0aGUgY29tbWFuZCBoZWFkZXIgaW4gdGhlIGNvbW1hbmQgc3Ry ZWFtLgorICoKKyAqIENoZWNrIHRoYXQgdGhlIHZpZXcgZXhpc3RzLCBhbmQgaWYgaXQgd2FzIG5v dCBjcmVhdGVkIHVzaW5nIHRoaXMKKyAqIGNvbW1hbmQgYmF0Y2gsIG1ha2Ugc3VyZSBpdCdzIHZh bGlkYXRlZCAocHJlc2VudCBpbiB0aGUgZGV2aWNlKSBzbyB0aGF0CisgKiB0aGUgcmVtb3ZlIGNv bW1hbmQgd2lsbCBub3QgY29uZnVzZSB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHZtd19j bWRfZHhfdmlld19yZW1vdmUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgIHN0 cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkgIFNWR0EzZENtZEhlYWRlciAq aGVhZGVyKQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25vZGUgKmN0eF9ub2RlID0gc3df Y29udGV4dC0+ZHhfY3R4X25vZGU7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRl cjsKKwkJdW5pb24gdm13X3ZpZXdfZGVzdHJveSBib2R5OworCX0gKmNtZCA9IGNvbnRhaW5lcl9v ZihoZWFkZXIsIHR5cGVvZigqY21kKSwgaGVhZGVyKTsKKwllbnVtIHZtd192aWV3X3R5cGUgdmll d190eXBlID0gdm13X3ZpZXdfY21kX3RvX3R5cGUoaGVhZGVyLT5pZCk7CisJc3RydWN0IHZtd19y ZXNvdXJjZSAqdmlldzsKKwlpbnQgcmV0OworCisJaWYgKCFjdHhfbm9kZSkgeworCQlEUk1fRVJS T1IoIkRYIENvbnRleHQgbm90IHNldC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwly ZXQgPSB2bXdfdmlld19yZW1vdmUoc3dfY29udGV4dC0+bWFuLAorCQkJICAgICAgY21kLT5ib2R5 LnZpZXdfaWQsIHZpZXdfdHlwZSwKKwkJCSAgICAgICZzd19jb250ZXh0LT5zdGFnZWRfY21kX3Jl cywKKwkJCSAgICAgICZ2aWV3KTsKKwlpZiAocmV0IHx8ICF2aWV3KQorCQlyZXR1cm4gcmV0Owor CisJLyoKKwkgKiBBZGQgdmlldyB0byB0aGUgdmFsaWRhdGUgbGlzdCBpZmYgaXQgd2FzIG5vdCBj cmVhdGVkIHVzaW5nIHRoaXMKKwkgKiBjb21tYW5kIGJhdGNoLgorCSAqLworCXJldHVybiB2bXdf dmlld19yZXNfdmFsX2FkZChzd19jb250ZXh0LCB2aWV3KTsKK30KKworLyoqCisgKiB2bXdfY21k X2R4X2RlZmluZV9zaGFkZXIgLSBWYWxpZGF0ZSBhbiBTVkdBXzNEX0NNRF9EWF9ERUZJTkVfU0hB REVSCisgKiBjb21tYW5kCisgKgorICogQGRldl9wcml2OiBQb2ludGVyIHRvIGEgZGV2aWNlIHBy aXZhdGUgc3RydWN0LgorICogQHN3X2NvbnRleHQ6IFRoZSBzb2Z0d2FyZSBjb250ZXh0IGJlaW5n IHVzZWQgZm9yIHRoaXMgYmF0Y2guCisgKiBAaGVhZGVyOiBQb2ludGVyIHRvIHRoZSBjb21tYW5k IGhlYWRlciBpbiB0aGUgY29tbWFuZCBzdHJlYW0uCisgKi8KK3N0YXRpYyBpbnQgdm13X2NtZF9k eF9kZWZpbmVfc2hhZGVyKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJICAgIHN0 cnVjdCB2bXdfc3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkgICAgU1ZHQTNkQ21kSGVhZGVy ICpoZWFkZXIpCit7CisJc3RydWN0IHZtd19yZXNvdXJjZV92YWxfbm9kZSAqY3R4X25vZGUgPSBz d19jb250ZXh0LT5keF9jdHhfbm9kZTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CisJc3Ry dWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRFhEZWZpbmVTaGFk ZXIgYm9keTsKKwl9ICpjbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCB0eXBlb2YoKmNtZCksIGhl YWRlcik7CisJaW50IHJldDsKKworCWlmICghY3R4X25vZGUpIHsKKwkJRFJNX0VSUk9SKCJEWCBD b250ZXh0IG5vdCBzZXQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzID0gdm13 X2NvbnRleHRfY290YWJsZShjdHhfbm9kZS0+cmVzLCBTVkdBX0NPVEFCTEVfRFhTSEFERVIpOwor CXJldCA9IHZtd19jb3RhYmxlX25vdGlmeShyZXMsIGNtZC0+Ym9keS5zaGFkZXJJZCk7CisJdm13 X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXR1cm4gdm13X2R4X3NoYWRlcl9hZGQoc3dfY29udGV4dC0+bWFuLCBjdHhfbm9kZS0+cmVz LAorCQkJCSBjbWQtPmJvZHkuc2hhZGVySWQsIGNtZC0+Ym9keS50eXBlLAorCQkJCSAmc3dfY29u dGV4dC0+c3RhZ2VkX2NtZF9yZXMpOworfQorCisvKioKKyAqIHZtd19jbWRfZHhfZGVzdHJveV9z aGFkZXIgLSBWYWxpZGF0ZSBhbiBTVkdBXzNEX0NNRF9EWF9ERVNUUk9ZX1NIQURFUgorICogY29t bWFuZAorICoKKyAqIEBkZXZfcHJpdjogUG9pbnRlciB0byBhIGRldmljZSBwcml2YXRlIHN0cnVj dC4KKyAqIEBzd19jb250ZXh0OiBUaGUgc29mdHdhcmUgY29udGV4dCBiZWluZyB1c2VkIGZvciB0 aGlzIGJhdGNoLgorICogQGhlYWRlcjogUG9pbnRlciB0byB0aGUgY29tbWFuZCBoZWFkZXIgaW4g dGhlIGNvbW1hbmQgc3RyZWFtLgorICovCitzdGF0aWMgaW50IHZtd19jbWRfZHhfZGVzdHJveV9z aGFkZXIoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICAgIHN0cnVjdCB2bXdf c3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkgICAgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVy KQoreworCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25vZGUgKmN0eF9ub2RlID0gc3dfY29udGV4 dC0+ZHhfY3R4X25vZGU7CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJ U1ZHQTNkQ21kRFhEZXN0cm95U2hhZGVyIGJvZHk7CisJfSAqY21kID0gY29udGFpbmVyX29mKGhl YWRlciwgdHlwZW9mKCpjbWQpLCBoZWFkZXIpOworCWludCByZXQ7CisKKwlpZiAoIWN0eF9ub2Rl KSB7CisJCURSTV9FUlJPUigiRFggQ29udGV4dCBub3Qgc2V0LlxuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCXJldCA9IHZtd19zaGFkZXJfcmVtb3ZlKHN3X2NvbnRleHQtPm1hbiwgY21k LT5ib2R5LnNoYWRlcklkLCAwLAorCQkJCSZzd19jb250ZXh0LT5zdGFnZWRfY21kX3Jlcyk7CisJ aWYgKHJldCkKKwkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCBzaGFkZXIgdG8gcmVtb3ZlLlxu Iik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZtd19jbWRfZHhfYmluZF9zaGFkZXIg LSBWYWxpZGF0ZSBhbiBTVkdBXzNEX0NNRF9EWF9CSU5EX1NIQURFUgorICogY29tbWFuZAorICoK KyAqIEBkZXZfcHJpdjogUG9pbnRlciB0byBhIGRldmljZSBwcml2YXRlIHN0cnVjdC4KKyAqIEBz d19jb250ZXh0OiBUaGUgc29mdHdhcmUgY29udGV4dCBiZWluZyB1c2VkIGZvciB0aGlzIGJhdGNo LgorICogQGhlYWRlcjogUG9pbnRlciB0byB0aGUgY29tbWFuZCBoZWFkZXIgaW4gdGhlIGNvbW1h bmQgc3RyZWFtLgorICovCitzdGF0aWMgaW50IHZtd19jbWRfZHhfYmluZF9zaGFkZXIoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgIHN0cnVjdCB2bXdfc3dfY29udGV4dCAqc3df Y29udGV4dCwKKwkJCQkgIFNWR0EzZENtZEhlYWRlciAqaGVhZGVyKQoreworCXN0cnVjdCB2bXdf cmVzb3VyY2VfdmFsX25vZGUgKmN0eF9ub2RlOworCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25v ZGUgKnJlc19ub2RlOworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgeworCQlT VkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCQlTVkdBM2RDbWREWEJpbmRTaGFkZXIgYm9keTsKKwl9 ICpjbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCB0eXBlb2YoKmNtZCksIGhlYWRlcik7CisJaW50 IHJldDsKKworCWlmIChjbWQtPmJvZHkuY2lkICE9IFNWR0EzRF9JTlZBTElEX0lEKSB7CisJCXJl dCA9IHZtd19jbWRfcmVzX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCB2bXdfcmVzX2NvbnRl eHQsCisJCQkJCXVzZXJfY29udGV4dF9jb252ZXJ0ZXIsCisJCQkJCSZjbWQtPmJvZHkuY2lkLCAm Y3R4X25vZGUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQljdHhf bm9kZSA9IHN3X2NvbnRleHQtPmR4X2N0eF9ub2RlOworCQlpZiAoIWN0eF9ub2RlKSB7CisJCQlE Uk1fRVJST1IoIkRYIENvbnRleHQgbm90IHNldC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJ CX0KKwl9CisKKwlyZXMgPSB2bXdfc2hhZGVyX2xvb2t1cCh2bXdfY29udGV4dF9yZXNfbWFuKGN0 eF9ub2RlLT5yZXMpLAorCQkJCWNtZC0+Ym9keS5zaGlkLCAwKTsKKwlpZiAoSVNfRVJSKHJlcykp IHsKKwkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCBzaGFkZXIgdG8gYmluZC5cbiIpOworCQly ZXR1cm4gUFRSX0VSUihyZXMpOworCX0KKworCXJldCA9IHZtd19yZXNvdXJjZV92YWxfYWRkKHN3 X2NvbnRleHQsIHJlcywgJnJlc19ub2RlKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRXJy b3IgY3JlYXRpbmcgcmVzb3VyY2UgdmFsaWRhdGlvbiBub2RlLlxuIik7CisJCWdvdG8gb3V0X3Vu cmVmOworCX0KKworCisJcmV0ID0gdm13X2NtZF9yZXNfc3dpdGNoX2JhY2t1cChkZXZfcHJpdiwg c3dfY29udGV4dCwgcmVzX25vZGUsCisJCQkJCSZjbWQtPmJvZHkubW9iaWQsCisJCQkJCWNtZC0+ Ym9keS5vZmZzZXRJbkJ5dGVzKTsKK291dF91bnJlZjoKKwl2bXdfcmVzb3VyY2VfdW5yZWZlcmVu Y2UoJnJlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZtd19jbWRfY2hlY2tf bm90XzNkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJc3RydWN0IHZtd19zd19j b250ZXh0ICpzd19jb250ZXh0LAorCQkJCXZvaWQgKmJ1ZiwgdWludDMyX3QgKnNpemUpCit7CisJ dWludDMyX3Qgc2l6ZV9yZW1haW5pbmcgPSAqc2l6ZTsKKwl1aW50MzJfdCBjbWRfaWQ7CisKKwlj bWRfaWQgPSAoKHVpbnQzMl90ICopYnVmKVswXTsKKwlzd2l0Y2ggKGNtZF9pZCkgeworCWNhc2Ug U1ZHQV9DTURfVVBEQVRFOgorCQkqc2l6ZSA9IHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YoU1ZH QUZpZm9DbWRVcGRhdGUpOworCQlicmVhazsKKwljYXNlIFNWR0FfQ01EX0RFRklORV9HTVJGQjoK KwkJKnNpemUgPSBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKFNWR0FGaWZvQ21kRGVmaW5lR01S RkIpOworCQlicmVhazsKKwljYXNlIFNWR0FfQ01EX0JMSVRfR01SRkJfVE9fU0NSRUVOOgorCQkq c2l6ZSA9IHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YoU1ZHQUZpZm9DbWRCbGl0R01SRkJUb1Nj cmVlbik7CisJCWJyZWFrOworCWNhc2UgU1ZHQV9DTURfQkxJVF9TQ1JFRU5fVE9fR01SRkI6CisJ CSpzaXplID0gc2l6ZW9mKHVpbnQzMl90KSArIHNpemVvZihTVkdBRmlmb0NtZEJsaXRHTVJGQlRv U2NyZWVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCBT VkdBIGNvbW1hbmQ6ICV1LlxuIiwgY21kX2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ aWYgKCpzaXplID4gc2l6ZV9yZW1haW5pbmcpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIFNWR0Eg Y29tbWFuZCAoc2l6ZSBtaXNtYXRjaCk6IgorCQkJICAiICV1LlxuIiwgY21kX2lkKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KCFzd19jb250ZXh0LT5rZXJuZWwpKSB7 CisJCURSTV9FUlJPUigiS2VybmVsIG9ubHkgU1ZHQSBjb21tYW5kOiAldS5cbiIsIGNtZF9pZCk7 CisJCXJldHVybiAtRVBFUk07CisJfQorCisJaWYgKGNtZF9pZCA9PSBTVkdBX0NNRF9ERUZJTkVf R01SRkIpCisJCXJldHVybiB2bXdfY21kX2NoZWNrX2RlZmluZV9nbXJmYihkZXZfcHJpdiwgc3df Y29udGV4dCwgYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZt d19jbWRfZW50cnkgdm13X2NtZF9lbnRyaWVzW1NWR0FfM0RfQ01EX01BWF0gPSB7CisJVk1XX0NN RF9ERUYoU1ZHQV8zRF9DTURfU1VSRkFDRV9ERUZJTkUsICZ2bXdfY21kX2ludmFsaWQsCisJCSAg ICBmYWxzZSwgZmFsc2UsIGZhbHNlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TVVJGQUNF X0RFU1RST1ksICZ2bXdfY21kX2ludmFsaWQsCisJCSAgICBmYWxzZSwgZmFsc2UsIGZhbHNlKSwK KwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TVVJGQUNFX0NPUFksICZ2bXdfY21kX3N1cmZhY2Vf Y29weV9jaGVjaywKKwkJICAgIHRydWUsIGZhbHNlLCBmYWxzZSksCisJVk1XX0NNRF9ERUYoU1ZH QV8zRF9DTURfU1VSRkFDRV9TVFJFVENIQkxULCAmdm13X2NtZF9zdHJldGNoX2JsdF9jaGVjaywK KwkJICAgIHRydWUsIGZhbHNlLCBmYWxzZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU1VS RkFDRV9ETUEsICZ2bXdfY21kX2RtYSwKKwkJICAgIHRydWUsIGZhbHNlLCBmYWxzZSksCisJVk1X X0NNRF9ERUYoU1ZHQV8zRF9DTURfQ09OVEVYVF9ERUZJTkUsICZ2bXdfY21kX2ludmFsaWQsCisJ CSAgICBmYWxzZSwgZmFsc2UsIGZhbHNlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9DT05U RVhUX0RFU1RST1ksICZ2bXdfY21kX2ludmFsaWQsCisJCSAgICBmYWxzZSwgZmFsc2UsIGZhbHNl KSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRUUkFOU0ZPUk0sICZ2bXdfY21kX2NpZF9j aGVjaywKKwkJICAgIHRydWUsIGZhbHNlLCBmYWxzZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9D TURfU0VUWlJBTkdFLCAmdm13X2NtZF9jaWRfY2hlY2ssCisJCSAgICB0cnVlLCBmYWxzZSwgZmFs c2UpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVFJFTkRFUlNUQVRFLCAmdm13X2NtZF9j aWRfY2hlY2ssCisJCSAgICB0cnVlLCBmYWxzZSwgZmFsc2UpLAorCVZNV19DTURfREVGKFNWR0Ff M0RfQ01EX1NFVFJFTkRFUlRBUkdFVCwKKwkJICAgICZ2bXdfY21kX3NldF9yZW5kZXJfdGFyZ2V0 X2NoZWNrLCB0cnVlLCBmYWxzZSwgZmFsc2UpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NF VFRFWFRVUkVTVEFURSwgJnZtd19jbWRfdGV4X3N0YXRlLAorCQkgICAgdHJ1ZSwgZmFsc2UsIGZh bHNlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9TRVRNQVRFUklBTCwgJnZtd19jbWRfY2lk X2NoZWNrLAorCQkgICAgdHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNE X0NNRF9TRVRMSUdIVERBVEEsICZ2bXdfY21kX2NpZF9jaGVjaywKKwkJICAgIHRydWUsIGZhbHNl LCBmYWxzZSksCiAJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfU0VUTElHSFRFTkFCTEVELCAmdm13 X2NtZF9jaWRfY2hlY2ssCiAJCSAgICB0cnVlLCBmYWxzZSwgZmFsc2UpLAogCVZNV19DTURfREVG KFNWR0FfM0RfQ01EX1NFVFZJRVdQT1JULCAmdm13X2NtZF9jaWRfY2hlY2ssCkBAIC0yMDUwLDcg KzI5NDIsMTM2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm13X2NtZF9lbnRyeSB2bXdfY21kX2Vu dHJpZXNbU1ZHQV8zRF9DTURfTUFYXSA9IHsKIAlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9JTlZB TElEQVRFX0dCX0lNQUdFX1BBUlRJQUwsICZ2bXdfY21kX2ludmFsaWQsCiAJCSAgICBmYWxzZSwg ZmFsc2UsIHRydWUpLAogCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX1NFVF9HQl9TSEFERVJDT05T VFNfSU5MSU5FLCAmdm13X2NtZF9jaWRfY2hlY2ssCi0JCSAgICB0cnVlLCBmYWxzZSwgdHJ1ZSkK KwkJICAgIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9HQl9T Q1JFRU5fRE1BLCAmdm13X2NtZF9pbnZhbGlkLAorCQkgICAgZmFsc2UsIGZhbHNlLCB0cnVlKSwK KwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9CSU5EX0dCX1NVUkZBQ0VfV0lUSF9QSVRDSCwgJnZt d19jbWRfaW52YWxpZCwKKwkJICAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSksCisJVk1XX0NNRF9ERUYo U1ZHQV8zRF9DTURfR0JfTU9CX0ZFTkNFLCAmdm13X2NtZF9pbnZhbGlkLAorCQkgICAgZmFsc2Us IGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9ERUZJTkVfR0JfU1VSRkFD RV9WMiwgJnZtd19jbWRfaW52YWxpZCwKKwkJICAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSksCisKKwkv KgorCSAqIERYIGNvbW1hbmRzCisJICovCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfREVG SU5FX0NPTlRFWFQsICZ2bXdfY21kX2ludmFsaWQsCisJCSAgICBmYWxzZSwgZmFsc2UsIHRydWUp LAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0RFU1RST1lfQ09OVEVYVCwgJnZtd19jbWRf aW52YWxpZCwKKwkJICAgIGZhbHNlLCBmYWxzZSwgdHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8z RF9DTURfRFhfQklORF9DT05URVhULCAmdm13X2NtZF9pbnZhbGlkLAorCQkgICAgZmFsc2UsIGZh bHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9SRUFEQkFDS19DT05URVhU LCAmdm13X2NtZF9pbnZhbGlkLAorCQkgICAgZmFsc2UsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01E X0RFRihTVkdBXzNEX0NNRF9EWF9JTlZBTElEQVRFX0NPTlRFWFQsICZ2bXdfY21kX2ludmFsaWQs CisJCSAgICBmYWxzZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RY X1NFVF9TSU5HTEVfQ09OU1RBTlRfQlVGRkVSLAorCQkgICAgJnZtd19jbWRfZHhfc2V0X3Npbmds ZV9jb25zdGFudF9idWZmZXIsIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdB XzNEX0NNRF9EWF9TRVRfU0hBREVSX1JFU09VUkNFUywKKwkJICAgICZ2bXdfY21kX2R4X3NldF9z aGFkZXJfcmVzLCB0cnVlLCBmYWxzZSwgdHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURf RFhfU0VUX1NIQURFUiwgJnZtd19jbWRfZHhfc2V0X3NoYWRlciwKKwkJICAgIHRydWUsIGZhbHNl LCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9EUkFXX0lOU1RBTkNFRCwgJnZt d19jbWRfaW52YWxpZCwKKwkJICAgIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihT VkdBXzNEX0NNRF9EWF9EUkFXX0lOREVYRURfSU5TVEFOQ0VELCAmdm13X2NtZF9pbnZhbGlkLAor CQkgICAgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0RS QVdfQVVUTywgJnZtd19jbWRfaW52YWxpZCwKKwkJICAgIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlW TVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9TRVRfVkVSVEVYX0JVRkZFUlMsCisJCSAgICAmdm13 X2NtZF9keF9zZXRfdmVydGV4X2J1ZmZlcnMsIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01E X0RFRihTVkdBXzNEX0NNRF9EWF9TRVRfSU5ERVhfQlVGRkVSLAorCQkgICAgJnZtd19jbWRfZHhf c2V0X2luZGV4X2J1ZmZlciwgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0Ff M0RfQ01EX0RYX1NFVF9SRU5ERVJUQVJHRVRTLAorCQkgICAgJnZtd19jbWRfZHhfc2V0X3JlbmRl cnRhcmdldHMsIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9E WF9TRVRfQkxFTkRfU1RBVEUsICZ2bXdfY21kX2R4X2NpZF9jaGVjaywKKwkJICAgIHRydWUsIGZh bHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9TRVRfUkFTVEVSSVpFUl9T VEFURSwgJnZtd19jbWRfZHhfY2lkX2NoZWNrLAorCQkgICAgdHJ1ZSwgZmFsc2UsIHRydWUpLAor CVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX1NFVF9ERVBUSFNURU5DSUxfU1RBVEUsCisJCSAg ICAmdm13X2NtZF9keF9jaWRfY2hlY2ssCisJCSAgICB0cnVlLCBmYWxzZSwgdHJ1ZSksCisJVk1X X0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfREVGSU5FX1FVRVJZLCAmdm13X2NtZF9pbnZhbGlkLAor CQkgICAgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0RF U1RST1lfUVVFUlksICZ2bXdfY21kX2ludmFsaWQsCisJCSAgICB0cnVlLCBmYWxzZSwgdHJ1ZSks CisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfQklORF9RVUVSWSwgJnZtd19jbWRfaW52YWxp ZCwKKwkJICAgIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9E WF9CRUdJTl9RVUVSWSwgJnZtd19jbWRfaW52YWxpZCwKKwkJICAgIHRydWUsIGZhbHNlLCB0cnVl KSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9FTkRfUVVFUlksICZ2bXdfY21kX2ludmFs aWQsCisJCSAgICB0cnVlLCBmYWxzZSwgdHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURf RFhfUkVBREJBQ0tfUVVFUlksICZ2bXdfY21kX2ludmFsaWQsCisJCSAgICB0cnVlLCBmYWxzZSwg dHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfU0VUX1BSRURJQ0FUSU9OLCAmdm13 X2NtZF9pbnZhbGlkLAorCQkgICAgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNW R0FfM0RfQ01EX0RYX1NFVF9WSUVXUE9SVFMsICZ2bXdfY21kX2R4X2NpZF9jaGVjaywKKwkJICAg IHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9TRVRfU0NJ U1NPUlJFQ1RTLCAmdm13X2NtZF9keF9jaWRfY2hlY2ssCisJCSAgICB0cnVlLCBmYWxzZSwgdHJ1 ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfQ0xFQVJfUkVOREVSVEFSR0VUX1ZJRVcs CisJCSAgICAmdm13X2NtZF9keF9jbGVhcl9yZW5kZXJ0YXJnZXRfdmlldywgdHJ1ZSwgZmFsc2Us IHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0NMRUFSX0RFUFRIU1RFTkNJTF9W SUVXLAorCQkgICAgJnZtd19jbWRfZHhfY2xlYXJfZGVwdGhzdGVuY2lsX3ZpZXcsIHRydWUsIGZh bHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9QUkVEX0NPUFlfUkVHSU9O LCAmdm13X2NtZF9pbnZhbGlkLAorCQkgICAgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURf REVGKFNWR0FfM0RfQ01EX0RYX1BSRURfQ09QWSwgJnZtd19jbWRfaW52YWxpZCwKKwkJICAgIHRy dWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9HRU5NSVBTLCAm dm13X2NtZF9pbnZhbGlkLAorCQkgICAgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVG KFNWR0FfM0RfQ01EX0RYX1VQREFURV9TVUJSRVNPVVJDRSwKKwkJICAgICZ2bXdfY21kX2R4X2No ZWNrX3N1YnJlc291cmNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8z RF9DTURfRFhfUkVBREJBQ0tfU1VCUkVTT1VSQ0UsCisJCSAgICAmdm13X2NtZF9keF9jaGVja19z dWJyZXNvdXJjZSwgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01E X0RYX0lOVkFMSURBVEVfU1VCUkVTT1VSQ0UsCisJCSAgICAmdm13X2NtZF9keF9jaGVja19zdWJy ZXNvdXJjZSwgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RY X0RFRklORV9TSEFERVJSRVNPVVJDRV9WSUVXLAorCQkgICAgJnZtd19jbWRfZHhfdmlld19kZWZp bmUsIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9ERVNU Uk9ZX1NIQURFUlJFU09VUkNFX1ZJRVcsCisJCSAgICAmdm13X2NtZF9keF92aWV3X3JlbW92ZSwg dHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0RFRklORV9S RU5ERVJUQVJHRVRfVklFVywKKwkJICAgICZ2bXdfY21kX2R4X3ZpZXdfZGVmaW5lLCB0cnVlLCBm YWxzZSwgdHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfREVTVFJPWV9SRU5ERVJU QVJHRVRfVklFVywKKwkJICAgICZ2bXdfY21kX2R4X3ZpZXdfcmVtb3ZlLCB0cnVlLCBmYWxzZSwg dHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfREVGSU5FX0RFUFRIU1RFTkNJTF9W SUVXLAorCQkgICAgJnZtd19jbWRfZHhfdmlld19kZWZpbmUsIHRydWUsIGZhbHNlLCB0cnVlKSwK KwlWTVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9ERVNUUk9ZX0RFUFRIU1RFTkNJTF9WSUVXLAor CQkgICAgJnZtd19jbWRfZHhfdmlld19yZW1vdmUsIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdf Q01EX0RFRihTVkdBXzNEX0NNRF9EWF9ERUZJTkVfRUxFTUVOVExBWU9VVCwKKwkJICAgICZ2bXdf Y21kX2R4X3NvX2RlZmluZSwgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0Ff M0RfQ01EX0RYX0RFU1RST1lfRUxFTUVOVExBWU9VVCwKKwkJICAgICZ2bXdfY21kX2R4X2NpZF9j aGVjaywgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0RF RklORV9CTEVORF9TVEFURSwKKwkJICAgICZ2bXdfY21kX2R4X3NvX2RlZmluZSwgdHJ1ZSwgZmFs c2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0RFU1RST1lfQkxFTkRfU1RB VEUsCisJCSAgICAmdm13X2NtZF9keF9jaWRfY2hlY2ssIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlW TVdfQ01EX0RFRihTVkdBXzNEX0NNRF9EWF9ERUZJTkVfREVQVEhTVEVOQ0lMX1NUQVRFLAorCQkg ICAgJnZtd19jbWRfZHhfc29fZGVmaW5lLCB0cnVlLCBmYWxzZSwgdHJ1ZSksCisJVk1XX0NNRF9E RUYoU1ZHQV8zRF9DTURfRFhfREVTVFJPWV9ERVBUSFNURU5DSUxfU1RBVEUsCisJCSAgICAmdm13 X2NtZF9keF9jaWRfY2hlY2ssIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdB XzNEX0NNRF9EWF9ERUZJTkVfUkFTVEVSSVpFUl9TVEFURSwKKwkJICAgICZ2bXdfY21kX2R4X3Nv X2RlZmluZSwgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RY X0RFU1RST1lfUkFTVEVSSVpFUl9TVEFURSwKKwkJICAgICZ2bXdfY21kX2R4X2NpZF9jaGVjaywg dHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0RFRklORV9T QU1QTEVSX1NUQVRFLAorCQkgICAgJnZtd19jbWRfZHhfc29fZGVmaW5lLCB0cnVlLCBmYWxzZSwg dHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfREVTVFJPWV9TQU1QTEVSX1NUQVRF LAorCQkgICAgJnZtd19jbWRfZHhfY2lkX2NoZWNrLCB0cnVlLCBmYWxzZSwgdHJ1ZSksCisJVk1X X0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfREVGSU5FX1NIQURFUiwKKwkJICAgICZ2bXdfY21kX2R4 X2RlZmluZV9zaGFkZXIsIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RFRihTVkdBXzNE X0NNRF9EWF9ERVNUUk9ZX1NIQURFUiwKKwkJICAgICZ2bXdfY21kX2R4X2Rlc3Ryb3lfc2hhZGVy LCB0cnVlLCBmYWxzZSwgdHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfQklORF9T SEFERVIsCisJCSAgICAmdm13X2NtZF9keF9iaW5kX3NoYWRlciwgdHJ1ZSwgZmFsc2UsIHRydWUp LAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01EX0RYX0RFRklORV9TVFJFQU1PVVRQVVQsCisJCSAg ICAmdm13X2NtZF9keF9zb19kZWZpbmUsIHRydWUsIGZhbHNlLCB0cnVlKSwKKwlWTVdfQ01EX0RF RihTVkdBXzNEX0NNRF9EWF9ERVNUUk9ZX1NUUkVBTU9VVFBVVCwKKwkJICAgICZ2bXdfY21kX2R4 X2NpZF9jaGVjaywgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19DTURfREVGKFNWR0FfM0RfQ01E X0RYX1NFVF9TVFJFQU1PVVRQVVQsICZ2bXdfY21kX2ludmFsaWQsCisJCSAgICB0cnVlLCBmYWxz ZSwgdHJ1ZSksCisJVk1XX0NNRF9ERUYoU1ZHQV8zRF9DTURfRFhfU0VUX0lOUFVUX0xBWU9VVCwK KwkJICAgICZ2bXdfY21kX2R4X2NpZF9jaGVjaywgdHJ1ZSwgZmFsc2UsIHRydWUpLAorCVZNV19D TURfREVGKFNWR0FfM0RfQ01EX0RYX1NFVF9UT1BPTE9HWSwKKwkJICAgICZ2bXdfY21kX2R4X2Np ZF9jaGVjaywgdHJ1ZSwgZmFsc2UsIHRydWUpLAogfTsKIAogc3RhdGljIGludCB2bXdfY21kX2No ZWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0yMTgzLDcgKzMyMDQsOCBAQCBz dGF0aWMgdm9pZCB2bXdfYXBwbHlfcmVsb2NhdGlvbnMoc3RydWN0IHZtd19zd19jb250ZXh0ICpz d19jb250ZXh0KQogICoKICAqIEBsaXN0OiBUaGUgcmVzb3VyY2UgbGlzdC4KICAqLwotc3RhdGlj IHZvaWQgdm13X3Jlc291cmNlX2xpc3RfdW5yZWZlcmVuY2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlz dCkKK3N0YXRpYyB2b2lkIHZtd19yZXNvdXJjZV9saXN0X3VucmVmZXJlbmNlKHN0cnVjdCB2bXdf c3dfY29udGV4dCAqc3dfY29udGV4dCwKKwkJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQog ewogCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25vZGUgKnZhbCwgKnZhbF9uZXh0OwogCkBAIC0y MTk0LDggKzMyMTYsMTUgQEAgc3RhdGljIHZvaWQgdm13X3Jlc291cmNlX2xpc3RfdW5yZWZlcmVu Y2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmFs LCB2YWxfbmV4dCwgbGlzdCwgaGVhZCkgewogCQlsaXN0X2RlbF9pbml0KCZ2YWwtPmhlYWQpOwog CQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnZhbC0+cmVzKTsKLQkJaWYgKHVubGlrZWx5KHZh bC0+c3RhZ2VkX2JpbmRpbmdzKSkKLQkJCWtmcmVlKHZhbC0+c3RhZ2VkX2JpbmRpbmdzKTsKKwor CQlpZiAodmFsLT5zdGFnZWRfYmluZGluZ3MpIHsKKwkJCWlmICh2YWwtPnN0YWdlZF9iaW5kaW5n cyAhPSBzd19jb250ZXh0LT5zdGFnZWRfYmluZGluZ3MpCisJCQkJdm13X2JpbmRpbmdfc3RhdGVf ZnJlZSh2YWwtPnN0YWdlZF9iaW5kaW5ncyk7CisJCQllbHNlCisJCQkJc3dfY29udGV4dC0+c3Rh Z2VkX2JpbmRpbmdzX2ludXNlID0gZmFsc2U7CisJCQl2YWwtPnN0YWdlZF9iaW5kaW5ncyA9IE5V TEw7CisJCX0KKwogCQlrZnJlZSh2YWwpOwogCX0KIH0KQEAgLTI0MzEsOCArMzQ2MCwxMyBAQCBz dGF0aWMgaW50IHZtd19leGVjYnVmX3N1Ym1pdF9maWZvKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2 X3ByaXYsCiAJCQkJICAgdTMyIGNvbW1hbmRfc2l6ZSwKIAkJCQkgICBzdHJ1Y3Qgdm13X3N3X2Nv bnRleHQgKnN3X2NvbnRleHQpCiB7Ci0Jdm9pZCAqY21kID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZf cHJpdiwgY29tbWFuZF9zaXplKTsKKwl2b2lkICpjbWQ7CiAKKwlpZiAoc3dfY29udGV4dC0+ZHhf Y3R4X25vZGUpCisJCWNtZCA9IHZtd19maWZvX3Jlc2VydmVfZHgoZGV2X3ByaXYsIGNvbW1hbmRf c2l6ZSwKKwkJCQkJICBzd19jb250ZXh0LT5keF9jdHhfbm9kZS0+cmVzLT5pZCk7CisJZWxzZQor CQljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBjb21tYW5kX3NpemUpOwogCWlmICgh Y21kKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHJlc2VydmluZyBmaWZvIHNwYWNlIGZvciBjb21t YW5kcy5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI0NjQsOCArMzQ5OCwxMCBAQCBzdGF0 aWMgaW50IHZtd19leGVjYnVmX3N1Ym1pdF9jbWRidWYoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiwKIAkJCQkgICAgIHUzMiBjb21tYW5kX3NpemUsCiAJCQkJICAgICBzdHJ1Y3Qgdm13X3N3 X2NvbnRleHQgKnN3X2NvbnRleHQpCiB7CisJdTMyIGlkID0gKChzd19jb250ZXh0LT5keF9jdHhf bm9kZSkgPyBzd19jb250ZXh0LT5keF9jdHhfbm9kZS0+cmVzLT5pZCA6CisJCSAgU1ZHQTNEX0lO VkFMSURfSUQpOwogCXZvaWQgKmNtZCA9IHZtd19jbWRidWZfcmVzZXJ2ZShkZXZfcHJpdi0+Y21h biwgY29tbWFuZF9zaXplLAotCQkJCSAgICAgICBTVkdBM0RfSU5WQUxJRF9JRCwgZmFsc2UsIGhl YWRlcik7CisJCQkJICAgICAgIGlkLCBmYWxzZSwgaGVhZGVyKTsKIAogCXZtd19hcHBseV9yZWxv Y2F0aW9ucyhzd19jb250ZXh0KTsKIAl2bXdfcmVzb3VyY2VfcmVsb2NhdGlvbnNfYXBwbHkoY21k LCAmc3dfY29udGV4dC0+cmVzX3JlbG9jYXRpb25zKTsKQEAgLTI1MzUsMTIgKzM1NzEsNDQgQEAg c3RhdGljIHZvaWQgKnZtd19leGVjYnVmX2NtZGJ1ZihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2LAogCXJldHVybiBrZXJuZWxfY29tbWFuZHM7CiB9CiAKK3N0YXRpYyBpbnQgdm13X2V4ZWNi dWZfdGllX2NvbnRleHQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgICBzdHJ1 Y3Qgdm13X3N3X2NvbnRleHQgKnN3X2NvbnRleHQsCisJCQkJICAgdWludDMyX3QgaGFuZGxlKQor eworCXN0cnVjdCB2bXdfcmVzb3VyY2VfdmFsX25vZGUgKmN0eF9ub2RlOworCXN0cnVjdCB2bXdf cmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJaWYgKGhhbmRsZSA9PSBTVkdBM0RfSU5WQUxJ RF9JRCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSB2bXdfdXNlcl9yZXNvdXJjZV9sb29rdXBfaGFu ZGxlKGRldl9wcml2LCBzd19jb250ZXh0LT5mcC0+dGZpbGUsCisJCQkJCSAgICAgIGhhbmRsZSwg dXNlcl9jb250ZXh0X2NvbnZlcnRlciwKKwkJCQkJICAgICAgJnJlcyk7CisJaWYgKHVubGlrZWx5 KHJldCAhPSAwKSkgeworCQlEUk1fRVJST1IoIkNvdWxkIG5vdCBmaW5kIG9yIHVzZXIgRFggY29u dGV4dCAweCUwOHguXG4iLAorCQkJICAodW5zaWduZWQpIGhhbmRsZSk7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0ID0gdm13X3Jlc291cmNlX3ZhbF9hZGQoc3dfY29udGV4dCwgcmVzLCAmY3R4 X25vZGUpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWdvdG8gb3V0X2VycjsKKworCXN3 X2NvbnRleHQtPmR4X2N0eF9ub2RlID0gY3R4X25vZGU7CisJc3dfY29udGV4dC0+bWFuID0gdm13 X2NvbnRleHRfcmVzX21hbihyZXMpOworb3V0X2VycjoKKwl2bXdfcmVzb3VyY2VfdW5yZWZlcmVu Y2UoJnJlcyk7CisJcmV0dXJuIHJldDsKK30KKwogaW50IHZtd19leGVjYnVmX3Byb2Nlc3Moc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCQlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 LAogCQkJdm9pZCBfX3VzZXIgKnVzZXJfY29tbWFuZHMsCiAJCQl2b2lkICprZXJuZWxfY29tbWFu ZHMsCiAJCQl1aW50MzJfdCBjb21tYW5kX3NpemUsCiAJCQl1aW50NjRfdCB0aHJvdHRsZV91cywK KwkJCXVpbnQzMl90IGR4X2NvbnRleHRfaGFuZGxlLAogCQkJc3RydWN0IGRybV92bXdfZmVuY2Vf cmVwIF9fdXNlciAqdXNlcl9mZW5jZV9yZXAsCiAJCQlzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAqKm91 dF9mZW5jZSkKIHsKQEAgLTI1OTYsMTIgKzM2NjQsMTcgQEAgaW50IHZtd19leGVjYnVmX3Byb2Nl c3Moc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJc3dfY29udGV4dC0+Y3VyX3JlbG9jID0g MDsKIAlzd19jb250ZXh0LT5jdXJfdmFsX2J1ZiA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJnN3X2Nv bnRleHQtPnJlc291cmNlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZzd19jb250ZXh0LT5jdHhf cmVzb3VyY2VfbGlzdCk7CiAJc3dfY29udGV4dC0+Y3VyX3F1ZXJ5X2JvID0gZGV2X3ByaXYtPnBp bm5lZF9ibzsKIAlzd19jb250ZXh0LT5sYXN0X3F1ZXJ5X2N0eCA9IE5VTEw7CiAJc3dfY29udGV4 dC0+bmVlZHNfcG9zdF9xdWVyeV9iYXJyaWVyID0gZmFsc2U7CisJc3dfY29udGV4dC0+ZHhfY3R4 X25vZGUgPSBOVUxMOwogCW1lbXNldChzd19jb250ZXh0LT5yZXNfY2FjaGUsIDAsIHNpemVvZihz d19jb250ZXh0LT5yZXNfY2FjaGUpKTsKIAlJTklUX0xJU1RfSEVBRCgmc3dfY29udGV4dC0+dmFs aWRhdGVfbm9kZXMpOwogCUlOSVRfTElTVF9IRUFEKCZzd19jb250ZXh0LT5yZXNfcmVsb2NhdGlv bnMpOworCWlmIChzd19jb250ZXh0LT5zdGFnZWRfYmluZGluZ3MpCisJCXZtd19iaW5kaW5nX3N0 YXRlX3Jlc2V0KHN3X2NvbnRleHQtPnN0YWdlZF9iaW5kaW5ncyk7CisKIAlpZiAoIXN3X2NvbnRl eHQtPnJlc19odF9pbml0aWFsaXplZCkgewogCQlyZXQgPSBkcm1faHRfY3JlYXRlKCZzd19jb250 ZXh0LT5yZXNfaHQsIFZNV19SRVNfSFRfT1JERVIpOwogCQlpZiAodW5saWtlbHkocmV0ICE9IDAp KQpAQCAtMjYxMCwxMSArMzY4MywyMCBAQCBpbnQgdm13X2V4ZWNidWZfcHJvY2VzcyhzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAl9CiAJSU5JVF9MSVNUX0hFQUQoJnN3X2NvbnRleHQtPnN0 YWdlZF9jbWRfcmVzKTsKIAlJTklUX0xJU1RfSEVBRCgmcmVzb3VyY2VfbGlzdCk7CisJcmV0ID0g dm13X2V4ZWNidWZfdGllX2NvbnRleHQoZGV2X3ByaXYsIHN3X2NvbnRleHQsIGR4X2NvbnRleHRf aGFuZGxlKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCWxpc3Rfc3BsaWNlX2luaXQo JnN3X2NvbnRleHQtPmN0eF9yZXNvdXJjZV9saXN0LAorCQkJCSAmc3dfY29udGV4dC0+cmVzb3Vy Y2VfbGlzdCk7CisJCWdvdG8gb3V0X2Vycl9ub3JlczsKKwl9CisKIAlyZXQgPSB2bXdfY21kX2No ZWNrX2FsbChkZXZfcHJpdiwgc3dfY29udGV4dCwga2VybmVsX2NvbW1hbmRzLAogCQkJCWNvbW1h bmRfc2l6ZSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290byBvdXRfZXJyX25vcmVz OwogCisJbGlzdF9zcGxpY2VfaW5pdCgmc3dfY29udGV4dC0+Y3R4X3Jlc291cmNlX2xpc3QsCisJ CQkgJnN3X2NvbnRleHQtPnJlc291cmNlX2xpc3QpOwogCXJldCA9IHZtd19yZXNvdXJjZXNfcmVz ZXJ2ZShzd19jb250ZXh0KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dF9l cnJfbm9yZXM7CkBAIC0yNjIyLDcgKzM3MDQsNyBAQCBpbnQgdm13X2V4ZWNidWZfcHJvY2Vzcyhz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAlyZXQgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJz KCZ0aWNrZXQsICZzd19jb250ZXh0LT52YWxpZGF0ZV9ub2RlcywKIAkJCQkgICAgIHRydWUsIE5V TEwpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCi0JCWdvdG8gb3V0X2VycjsKKwkJZ290byBv dXRfZXJyX25vcmVzOwogCiAJcmV0ID0gdm13X3ZhbGlkYXRlX2J1ZmZlcnMoZGV2X3ByaXYsIHN3 X2NvbnRleHQpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCkBAIC0yNjUyLDggKzM3MzQsOSBA QCBpbnQgdm13X2V4ZWNidWZfcHJvY2VzcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJ CQkJCXN3X2NvbnRleHQpOwogCQloZWFkZXIgPSBOVUxMOwogCX0KKwltdXRleF91bmxvY2soJmRl dl9wcml2LT5iaW5kaW5nX211dGV4KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF91bmxvY2tfYmlu ZGluZzsKKwkJZ290byBvdXRfZXJyOwogCiAJdm13X3F1ZXJ5X2JvX3N3aXRjaF9jb21taXQoZGV2 X3ByaXYsIHN3X2NvbnRleHQpOwogCXJldCA9IHZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRzKGZp bGVfcHJpdiwgZGV2X3ByaXYsCkBAIC0yNjY4LDggKzM3NTEsOCBAQCBpbnQgdm13X2V4ZWNidWZf cHJvY2VzcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAlpZiAocmV0ICE9IDApCiAJCURS TV9FUlJPUigiRmVuY2Ugc3VibWlzc2lvbiBlcnJvci4gU3luY2luZy5cbiIpOwogCi0Jdm13X3Jl c291cmNlX2xpc3RfdW5yZXNlcnZlKCZzd19jb250ZXh0LT5yZXNvdXJjZV9saXN0LCBmYWxzZSk7 Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7CisJdm13X3Jlc291cmNl X2xpc3RfdW5yZXNlcnZlKHN3X2NvbnRleHQsICZzd19jb250ZXh0LT5yZXNvdXJjZV9saXN0LAor CQkJCSAgICBmYWxzZSk7CiAKIAl0dG1fZXVfZmVuY2VfYnVmZmVyX29iamVjdHMoJnRpY2tldCwg JnN3X2NvbnRleHQtPnZhbGlkYXRlX25vZGVzLAogCQkJCSAgICAodm9pZCAqKSBmZW5jZSk7CkBA IC0yNjk4LDcgKzM3ODEsNyBAQCBpbnQgdm13X2V4ZWNidWZfcHJvY2VzcyhzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdiwKIAkgKiBVbnJlZmVyZW5jZSByZXNvdXJjZXMgb3V0c2lkZSBvZiB0aGUg Y21kYnVmX211dGV4IHRvCiAJICogYXZvaWQgZGVhZGxvY2tzIGluIHJlc291cmNlIGRlc3RydWN0 aW9uIHBhdGhzLgogCSAqLwotCXZtd19yZXNvdXJjZV9saXN0X3VucmVmZXJlbmNlKCZyZXNvdXJj ZV9saXN0KTsKKwl2bXdfcmVzb3VyY2VfbGlzdF91bnJlZmVyZW5jZShzd19jb250ZXh0LCAmcmVz b3VyY2VfbGlzdCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjcwNyw3ICszNzkwLDggQEAgb3V0X3Vu bG9ja19iaW5kaW5nOgogb3V0X2VycjoKIAl0dG1fZXVfYmFja29mZl9yZXNlcnZhdGlvbigmdGlj a2V0LCAmc3dfY29udGV4dC0+dmFsaWRhdGVfbm9kZXMpOwogb3V0X2Vycl9ub3JlczoKLQl2bXdf cmVzb3VyY2VfbGlzdF91bnJlc2VydmUoJnN3X2NvbnRleHQtPnJlc291cmNlX2xpc3QsIHRydWUp OworCXZtd19yZXNvdXJjZV9saXN0X3VucmVzZXJ2ZShzd19jb250ZXh0LCAmc3dfY29udGV4dC0+ cmVzb3VyY2VfbGlzdCwKKwkJCQkgICAgdHJ1ZSk7CiAJdm13X3Jlc291cmNlX3JlbG9jYXRpb25z X2ZyZWUoJnN3X2NvbnRleHQtPnJlc19yZWxvY2F0aW9ucyk7CiAJdm13X2ZyZWVfcmVsb2NhdGlv bnMoc3dfY29udGV4dCk7CiAJdm13X2NsZWFyX3ZhbGlkYXRpb25zKHN3X2NvbnRleHQpOwpAQCAt MjcyNSw3ICszODA5LDcgQEAgb3V0X3VubG9jazoKIAkgKiBVbnJlZmVyZW5jZSByZXNvdXJjZXMg b3V0c2lkZSBvZiB0aGUgY21kYnVmX211dGV4IHRvCiAJICogYXZvaWQgZGVhZGxvY2tzIGluIHJl c291cmNlIGRlc3RydWN0aW9uIHBhdGhzLgogCSAqLwotCXZtd19yZXNvdXJjZV9saXN0X3VucmVm ZXJlbmNlKCZyZXNvdXJjZV9saXN0KTsKKwl2bXdfcmVzb3VyY2VfbGlzdF91bnJlZmVyZW5jZShz d19jb250ZXh0LCAmcmVzb3VyY2VfbGlzdCk7CiAJaWYgKHVubGlrZWx5KGVycm9yX3Jlc291cmNl ICE9IE5VTEwpKQogCQl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJmVycm9yX3Jlc291cmNlKTsK IG91dF9mcmVlX2hlYWRlcjoKQEAgLTI4NzcsMzYgKzM5NjEsNjggQEAgdm9pZCB2bXdfZXhlY2J1 Zl9yZWxlYXNlX3Bpbm5lZF9ibyhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7CiB9CiAKLQotaW50IHZtd19leGVjYnVm X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCSAgICAgIHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2KQoraW50IHZtd19leGVjYnVmX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZGF0YSwKKwkJICAgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsIHNpemVfdCBzaXplKQogewogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYgPSB2bXdfcHJpdihkZXYpOwotCXN0cnVjdCBkcm1fdm13X2V4ZWNidWZfYXJnICphcmcgPSAo c3RydWN0IGRybV92bXdfZXhlY2J1Zl9hcmcgKilkYXRhOworCXN0cnVjdCBkcm1fdm13X2V4ZWNi dWZfYXJnIGFyZzsKIAlpbnQgcmV0OworCXN0YXRpYyBjb25zdCBzaXplX3QgY29weV9vZmZzZXRb XSA9IHsKKwkJb2Zmc2V0b2Yoc3RydWN0IGRybV92bXdfZXhlY2J1Zl9hcmcsIGNvbnRleHRfaGFu ZGxlKSwKKwkJc2l6ZW9mKHN0cnVjdCBkcm1fdm13X2V4ZWNidWZfYXJnKX07CisKKwlpZiAodW5s aWtlbHkoc2l6ZSA8IGNvcHlfb2Zmc2V0WzBdKSkgeworCQlEUk1fRVJST1IoIkludmFsaWQgY29t bWFuZCBzaXplLCBpb2N0bCAlZFxuIiwKKwkJCSAgRFJNX1ZNV19FWEVDQlVGKTsKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmcsICh2b2lkIF9fdXNlciAq KSBkYXRhLCBjb3B5X29mZnNldFswXSkgIT0gMCkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkvKgot CSAqIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBleHRlbmQgdGhlIGlvY3RsIGFyZ3VtZW50IHdoaWxl CisJICogRXh0ZW5kIHRoZSBpb2N0bCBhcmd1bWVudCB3aGlsZQogCSAqIG1haW50YWluaW5nIGJh Y2t3YXJkcyBjb21wYXRpYmlsaXR5OgogCSAqIFdlIHRha2UgZGlmZmVyZW50IGNvZGUgcGF0aHMg ZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZgotCSAqIGFyZy0+dmVyc2lvbi4KKwkgKiBhcmcudmVy c2lvbi4KIAkgKi8KIAotCWlmICh1bmxpa2VseShhcmctPnZlcnNpb24gIT0gRFJNX1ZNV19FWEVD QlVGX1ZFUlNJT04pKSB7CisJaWYgKHVubGlrZWx5KGFyZy52ZXJzaW9uID4gRFJNX1ZNV19FWEVD QlVGX1ZFUlNJT04gfHwKKwkJICAgICBhcmcudmVyc2lvbiA9PSAwKSkgewogCQlEUk1fRVJST1Io IkluY29ycmVjdCBleGVjYnVmIHZlcnNpb24uXG4iKTsKLQkJRFJNX0VSUk9SKCJZb3UncmUgcnVu bmluZyBvdXRkYXRlZCBleHBlcmltZW50YWwgIgotCQkJICAidm13Z2Z4IHVzZXItc3BhY2UgZHJp dmVycy4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKGFyZy52ZXJzaW9uID4gMSAm JgorCSAgICBjb3B5X2Zyb21fdXNlcigmYXJnLmNvbnRleHRfaGFuZGxlLAorCQkJICAgKHZvaWQg X191c2VyICopIChkYXRhICsgY29weV9vZmZzZXRbMF0pLAorCQkJICAgY29weV9vZmZzZXRbYXJn LnZlcnNpb24gLSAxXSAtCisJCQkgICBjb3B5X29mZnNldFswXSkgIT0gMCkKKwkJcmV0dXJuIC1F RkFVTFQ7CisKKwlzd2l0Y2ggKGFyZy52ZXJzaW9uKSB7CisJY2FzZSAxOgorCQlhcmcuY29udGV4 dF9oYW5kbGUgPSAodWludDMyX3QpIC0xOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmIChhcmcu cGFkNjQgIT0gMCkgeworCQkJRFJNX0VSUk9SKCJVbnVzZWQgSU9DVEwgZGF0YSBub3Qgc2V0IHRv IHplcm8uXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCWJyZWFrOworCX0KKwogCXJldCA9IHR0bV9yZWFkX2xvY2soJmRldl9wcml2LT5yZXNlcnZh dGlvbl9zZW0sIHRydWUpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiByZXQ7 CiAKIAlyZXQgPSB2bXdfZXhlY2J1Zl9wcm9jZXNzKGZpbGVfcHJpdiwgZGV2X3ByaXYsCi0JCQkJ ICAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylhcmctPmNvbW1hbmRzLAotCQkJCSAgTlVM TCwgYXJnLT5jb21tYW5kX3NpemUsIGFyZy0+dGhyb3R0bGVfdXMsCi0JCQkJICAodm9pZCBfX3Vz ZXIgKikodW5zaWduZWQgbG9uZylhcmctPmZlbmNlX3JlcCwKKwkJCQkgICh2b2lkIF9fdXNlciAq KSh1bnNpZ25lZCBsb25nKWFyZy5jb21tYW5kcywKKwkJCQkgIE5VTEwsIGFyZy5jb21tYW5kX3Np emUsIGFyZy50aHJvdHRsZV91cywKKwkJCQkgIGFyZy5jb250ZXh0X2hhbmRsZSwKKwkJCQkgICh2 b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZy5mZW5jZV9yZXAsCiAJCQkJICBOVUxMKTsK IAl0dG1fcmVhZF91bmxvY2soJmRldl9wcml2LT5yZXNlcnZhdGlvbl9zZW0pOwogCWlmICh1bmxp a2VseShyZXQgIT0gMCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKaW5kZXggY2Iy NDkzNi4uM2M4NzZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhf Zmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYwpAQCAtMjks NiArMjksMTEgQEAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS90dG0vdHRt X3BsYWNlbWVudC5oPgogCitzdHJ1Y3Qgdm13X3RlbXBfc2V0X2NvbnRleHQgeworCVNWR0EzZENt ZEhlYWRlciBoZWFkZXI7CisJU1ZHQTNkQ21kRFhUZW1wU2V0Q29udGV4dCBib2R5OworfTsKKwog Ym9vbCB2bXdfZmlmb19oYXZlXzNkKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJ dTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKQEAgLTk5LDYgKzEw NCw3IEBAIGludCB2bXdfZmlmb19pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0 cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmbykKIAl1aW50MzJfdCBtYXg7CiAJdWludDMyX3QgbWlu OwogCisJZmlmby0+ZHggPSBmYWxzZTsKIAlmaWZvLT5zdGF0aWNfYnVmZmVyX3NpemUgPSBWTVdH RlhfRklGT19TVEFUSUNfU0laRTsKIAlmaWZvLT5zdGF0aWNfYnVmZmVyID0gdm1hbGxvYyhmaWZv LT5zdGF0aWNfYnVmZmVyX3NpemUpOwogCWlmICh1bmxpa2VseShmaWZvLT5zdGF0aWNfYnVmZmVy ID09IE5VTEwpKQpAQCAtMzk2LDE1ICs0MDIsMjAgQEAgb3V0X2VycjoKIAlyZXR1cm4gTlVMTDsK IH0KIAotdm9pZCAqdm13X2ZpZm9fcmVzZXJ2ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 LCB1aW50MzJfdCBieXRlcykKK3ZvaWQgKnZtd19maWZvX3Jlc2VydmVfZHgoc3RydWN0IHZtd19w cml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgYnl0ZXMsCisJCQkgIGludCBjdHhfaWQpCiB7CiAJ dm9pZCAqcmV0OwogCiAJaWYgKGRldl9wcml2LT5jbWFuKQogCQlyZXQgPSB2bXdfY21kYnVmX3Jl c2VydmUoZGV2X3ByaXYtPmNtYW4sIGJ5dGVzLAotCQkJCQkgU1ZHQTNEX0lOVkFMSURfSUQsIGZh bHNlLCBOVUxMKTsKLQllbHNlCisJCQkJCSBjdHhfaWQsIGZhbHNlLCBOVUxMKTsKKwllbHNlIGlm IChjdHhfaWQgPT0gU1ZHQTNEX0lOVkFMSURfSUQpCiAJCXJldCA9IHZtd19sb2NhbF9maWZvX3Jl c2VydmUoZGV2X3ByaXYsIGJ5dGVzKTsKKwllbHNlIHsKKwkJV0FSTl9PTigiQ29tbWFuZCBidWZm ZXIgaGFzIG5vdCBiZWVuIGFsbG9jYXRlZC5cbiIpOworCQlyZXQgPSBOVUxMOworCX0KIAlpZiAo SVNfRVJSX09SX05VTEwocmV0KSkgewogCQlEUk1fRVJST1IoIkZpZm8gcmVzZXJ2ZSBmYWlsdXJl IG9mICV1IGJ5dGVzLlxuIiwKIAkJCSAgKHVuc2lnbmVkKSBieXRlcyk7CkBAIC00NjYsNiArNDc3 LDEwIEBAIHN0YXRpYyB2b2lkIHZtd19sb2NhbF9maWZvX2NvbW1pdChzdHJ1Y3Qgdm13X3ByaXZh dGUgKmRldl9wcml2LCB1aW50MzJfdCBieXRlcykKIAl1aW50MzJfdCBtaW4gPSBpb3JlYWQzMihm aWZvX21lbSArIFNWR0FfRklGT19NSU4pOwogCWJvb2wgcmVzZXJ2ZWFibGUgPSBmaWZvX3N0YXRl LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0ZJRk9fQ0FQX1JFU0VSVkU7CiAKKwlpZiAoZmlmb19zdGF0 ZS0+ZHgpCisJCWJ5dGVzICs9IHNpemVvZihzdHJ1Y3Qgdm13X3RlbXBfc2V0X2NvbnRleHQpOwor CisJZmlmb19zdGF0ZS0+ZHggPSBmYWxzZTsKIAlCVUdfT04oKGJ5dGVzICYgMykgIT0gMCk7CiAJ QlVHX09OKGJ5dGVzID4gZmlmb19zdGF0ZS0+cmVzZXJ2ZWRfc2l6ZSk7CiAKQEAgLTUxOCw3ICs1 MzMsNyBAQCB2b2lkIHZtd19maWZvX2NvbW1pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 LCB1aW50MzJfdCBieXRlcykKICAqIEBkZXZfcHJpdjogUG9pbnRlciB0byBkZXZpY2UgcHJpdmF0 ZSBzdHJ1Y3R1cmUuCiAgKiBAYnl0ZXM6IE51bWJlciBvZiBieXRlcyB0byBjb21taXQuCiAgKi8K LXN0YXRpYyB2b2lkIHZtd19maWZvX2NvbW1pdF9mbHVzaChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRl dl9wcml2LCB1aW50MzJfdCBieXRlcykKK3ZvaWQgdm13X2ZpZm9fY29tbWl0X2ZsdXNoKHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IGJ5dGVzKQogewogCWlmIChkZXZfcHJp di0+Y21hbikKIAkJdm13X2NtZGJ1Zl9jb21taXQoZGV2X3ByaXYtPmNtYW4sIGJ5dGVzLCBOVUxM LCB0cnVlKTsKQEAgLTcwNiwzICs3MjEsOCBAQCBpbnQgdm13X2ZpZm9fZW1pdF9kdW1teV9xdWVy eShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCiAJcmV0dXJuIHZtd19maWZvX2VtaXRf ZHVtbXlfbGVnYWN5X3F1ZXJ5KGRldl9wcml2LCBjaWQpOwogfQorCit2b2lkICp2bXdfZmlmb19y ZXNlcnZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IGJ5dGVzKQorewor CXJldHVybiB2bXdfZmlmb19yZXNlcnZlX2R4KGRldl9wcml2LCBieXRlcywgU1ZHQTNEX0lOVkFM SURfSUQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9j dGwuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMKaW5kZXggOTFlZmU5 Yy4uZGNhN2Y3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9j dGwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCkBAIC0xMTAs NiArMTEwLDkgQEAgaW50IHZtd19nZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLAogCQlwYXJhbS0+dmFsdWUgPQogCQkJKGRldl9wcml2LT5hY3RpdmVfZGlz cGxheV91bml0ID09IHZtd19kdV9zY3JlZW5fdGFyZ2V0KTsKIAkJYnJlYWs7CisJY2FzZSBEUk1f Vk1XX1BBUkFNX0RYOgorCQlwYXJhbS0+dmFsdWUgPSBkZXZfcHJpdi0+aGFzX2R4OworCQlicmVh azsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIklsbGVnYWwgdm13Z2Z4IGdldCBwYXJhbSByZXF1 ZXN0OiAlZFxuIiwKIAkJCSAgcGFyYW0tPnBhcmFtKTsKQEAgLTE5Myw4ICsxOTYsOCBAQCBpbnQg dm13X2dldF9jYXBfM2RfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK IAkJdWludDMyX3QgKmJvdW5jZTMyID0gKHVpbnQzMl90ICopIGJvdW5jZTsKIAogCQludW0gPSBz aXplIC8gc2l6ZW9mKHVpbnQzMl90KTsKLQkJaWYgKG51bSA+IFNWR0EzRF9ERVZDQVBfTUFYKQot CQkJbnVtID0gU1ZHQTNEX0RFVkNBUF9NQVg7CisJCWlmIChudW0gPiBTVkdBM0RfREVWQ0FQX0RY KQorCQkJbnVtID0gU1ZHQTNEX0RFVkNBUF9EWDsKIAogCQlzcGluX2xvY2soJmRldl9wcml2LT5j YXBfbG9jayk7CiAJCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgewpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9rbXMuYwppbmRleCAzNGQwNGJmLi5mOTYxYmI5IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4 L3Ztd2dmeF9rbXMuYwpAQCAtNTI4LDcgKzUyOCwxMSBAQCBzdGF0aWMgaW50IHZtd19rbXNfbmV3 X2ZyYW1lYnVmZmVyX3N1cmZhY2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJcmV0 dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHVubGlrZWx5KGZvcm1hdCAhPSBzdXJmYWNlLT5mb3Jt YXQpKSB7CisJLyoKKwkgKiBGb3IgRFgsIHN1cmZhY2UgZm9ybWF0IHZhbGlkYXRpb24gaXMgZG9u ZSB3aGVuIHN1cmZhY2UtPnNjYW5vdXQKKwkgKiBpcyBzZXQuCisJICovCisJaWYgKCFkZXZfcHJp di0+aGFzX2R4ICYmIGZvcm1hdCAhPSBzdXJmYWNlLT5mb3JtYXQpIHsKIAkJRFJNX0VSUk9SKCJJ bnZhbGlkIHN1cmZhY2UgZm9ybWF0IGZvciByZXF1ZXN0ZWQgbW9kZS5cbiIpOwogCQlyZXR1cm4g LUVJTlZBTDsKIAl9CkBAIC03NTQsNiArNzU4LDcgQEAgc3RhdGljIGludCB2bXdfY3JlYXRlX2Rt YWJ1Zl9wcm94eShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJdHJ1ZSwgLyogY2FuIGJlIGEg c2Nhbm91dCBidWZmZXIgKi8KIAkJCTEsIC8qIG51bSBvZiBtaXAgbGV2ZWxzICovCiAJCQkwLAor CQkJMCwKIAkJCWNvbnRlbnRfYmFzZV9zaXplLAogCQkJc3JmX291dCk7CiAJaWYgKHJldCkgewpA QCAtNzY5LDcgKzc3NCw3IEBAIHN0YXRpYyBpbnQgdm13X2NyZWF0ZV9kbWFidWZfcHJveHkoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAl2bXdfZG1hYnVmX3VucmVmZXJlbmNlKCZyZXMtPmJhY2t1 cCk7CiAJcmVzLT5iYWNrdXAgPSB2bXdfZG1hYnVmX3JlZmVyZW5jZShkbWFidWZfbW9iKTsKIAly ZXMtPmJhY2t1cF9vZmZzZXQgPSAwOwotCXZtd19yZXNvdXJjZV91bnJlc2VydmUocmVzLCBOVUxM LCAwKTsKKwl2bXdfcmVzb3VyY2VfdW5yZXNlcnZlKHJlcywgZmFsc2UsIE5VTEwsIDApOwogCW11 dGV4X3VubG9jaygmcmVzLT5kZXZfcHJpdi0+Y21kYnVmX211dGV4KTsKIAogCXJldHVybiAwOwpA QCAtMTg2OSw3ICsxODc0LDcgQEAgdm9pZCB2bXdfa21zX2hlbHBlcl9idWZmZXJfZmluaXNoKHN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiB2b2lkIHZtd19rbXNfaGVscGVyX3Jlc291cmNl X3JldmVydChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCiB7CiAJdm13X2ttc19oZWxwZXJfYnVm ZmVyX3JldmVydChyZXMtPmJhY2t1cCk7Ci0Jdm13X3Jlc291cmNlX3VucmVzZXJ2ZShyZXMsIE5V TEwsIDApOworCXZtd19yZXNvdXJjZV91bnJlc2VydmUocmVzLCBmYWxzZSwgTlVMTCwgMCk7CiAJ bXV0ZXhfdW5sb2NrKCZyZXMtPmRldl9wcml2LT5jbWRidWZfbXV0ZXgpOwogfQogCkBAIC0xOTE2 LDcgKzE5MjEsNyBAQCBpbnQgdm13X2ttc19oZWxwZXJfcmVzb3VyY2VfcHJlcGFyZShzdHJ1Y3Qg dm13X3Jlc291cmNlICpyZXMsCiBvdXRfcmV2ZXJ0OgogCXZtd19rbXNfaGVscGVyX2J1ZmZlcl9y ZXZlcnQocmVzLT5iYWNrdXApOwogb3V0X3VucmVzZXJ2ZToKLQl2bXdfcmVzb3VyY2VfdW5yZXNl cnZlKHJlcywgTlVMTCwgMCk7CisJdm13X3Jlc291cmNlX3VucmVzZXJ2ZShyZXMsIGZhbHNlLCBO VUxMLCAwKTsKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZyZXMtPmRldl9wcml2LT5jbWRi dWZfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xOTM3LDcgKzE5NDIsNyBAQCB2b2lkIHZtd19r bXNfaGVscGVyX3Jlc291cmNlX2ZpbmlzaChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAJCXZt d19rbXNfaGVscGVyX2J1ZmZlcl9maW5pc2gocmVzLT5kZXZfcHJpdiwgTlVMTCwgcmVzLT5iYWNr dXAsCiAJCQkJCSAgICAgb3V0X2ZlbmNlLCBOVUxMKTsKIAotCXZtd19yZXNvdXJjZV91bnJlc2Vy dmUocmVzLCBOVUxMLCAwKTsKKwl2bXdfcmVzb3VyY2VfdW5yZXNlcnZlKHJlcywgZmFsc2UsIE5V TEwsIDApOwogCW11dGV4X3VubG9jaygmcmVzLT5kZXZfcHJpdi0+Y21kYnVmX211dGV4KTsKIH0K IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfbW9iLmMgYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9tb2IuYwppbmRleCA1YjAyODdlLi5hODIwM2E5IDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9tb2IuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9tb2IuYwpAQCAtNjcsOSArNjcsMjMgQEAgc3RydWN0 IHZtd19tb2IgewogICogQHNpemU6ICAgICAgICAgICBTaXplIG9mIHRoZSB0YWJsZSAocGFnZS1h bGlnbmVkKS4KICAqIEBwYWdlX3RhYmxlOiAgICAgUG9pbnRlciB0byBhIHN0cnVjdCB2bXdfbW9i IGhvbGRpbmcgdGhlIHBhZ2UgdGFibGUuCiAgKi8KLXN0cnVjdCB2bXdfb3RhYmxlIHsKLQl1bnNp Z25lZCBsb25nIHNpemU7Ci0Jc3RydWN0IHZtd19tb2IgKnBhZ2VfdGFibGU7CitzdGF0aWMgY29u c3Qgc3RydWN0IHZtd19vdGFibGUgcHJlX2R4X3RhYmxlc1tdID0geworCXtWTVdHRlhfTlVNX01P QiAqIFNWR0EzRF9PVEFCTEVfTU9CX0VOVFJZX1NJWkUsIE5VTEwsIHRydWV9LAorCXtWTVdHRlhf TlVNX0dCX1NVUkZBQ0UgKiBTVkdBM0RfT1RBQkxFX1NVUkZBQ0VfRU5UUllfU0laRSwgTlVMTCwg dHJ1ZX0sCisJe1ZNV0dGWF9OVU1fR0JfQ09OVEVYVCAqIFNWR0EzRF9PVEFCTEVfQ09OVEVYVF9F TlRSWV9TSVpFLCBOVUxMLCB0cnVlfSwKKwl7Vk1XR0ZYX05VTV9HQl9TSEFERVIgKiBTVkdBM0Rf T1RBQkxFX1NIQURFUl9FTlRSWV9TSVpFLCBOVUxMLCB0cnVlfSwKKwl7Vk1XR0ZYX05VTV9HQl9T Q1JFRU5fVEFSR0VUICogU1ZHQTNEX09UQUJMRV9TQ1JFRU5fVEFSR0VUX0VOVFJZX1NJWkUsCisJ IE5VTEwsIFZNV0dGWF9FTkFCTEVfU0NSRUVOX1RBUkdFVF9PVEFCTEV9Cit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IHZtd19vdGFibGUgZHhfdGFibGVzW10gPSB7CisJe1ZNV0dGWF9OVU1fTU9C ICogU1ZHQTNEX09UQUJMRV9NT0JfRU5UUllfU0laRSwgTlVMTCwgdHJ1ZX0sCisJe1ZNV0dGWF9O VU1fR0JfU1VSRkFDRSAqIFNWR0EzRF9PVEFCTEVfU1VSRkFDRV9FTlRSWV9TSVpFLCBOVUxMLCB0 cnVlfSwKKwl7Vk1XR0ZYX05VTV9HQl9DT05URVhUICogU1ZHQTNEX09UQUJMRV9DT05URVhUX0VO VFJZX1NJWkUsIE5VTEwsIHRydWV9LAorCXtWTVdHRlhfTlVNX0dCX1NIQURFUiAqIFNWR0EzRF9P VEFCTEVfU0hBREVSX0VOVFJZX1NJWkUsIE5VTEwsIHRydWV9LAorCXtWTVdHRlhfTlVNX0dCX1ND UkVFTl9UQVJHRVQgKiBTVkdBM0RfT1RBQkxFX1NDUkVFTl9UQVJHRVRfRU5UUllfU0laRSwKKwkg TlVMTCwgVk1XR0ZYX0VOQUJMRV9TQ1JFRU5fVEFSR0VUX09UQUJMRX0sCisJe1ZNV0dGWF9OVU1f RFhDT05URVhUICogc2l6ZW9mKFNWR0FPVGFibGVEWENvbnRleHRFbnRyeSksIE5VTEwsIHRydWV9 LAogfTsKIAogc3RhdGljIGludCB2bXdfbW9iX3B0X3BvcHVsYXRlKHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYsCkBAIC05Miw2ICsxMDYsNyBAQCBzdGF0aWMgdm9pZCB2bXdfbW9iX3B0X3Nl dHVwKHN0cnVjdCB2bXdfbW9iICptb2IsCiAgKi8KIHN0YXRpYyBpbnQgdm13X3NldHVwX290YWJs ZV9iYXNlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJIFNWR0FPVGFibGVUeXBl IHR5cGUsCisJCQkJIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqb3RhYmxlX2JvLAogCQkJCSB1 bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCQkgc3RydWN0IHZtd19vdGFibGUgKm90YWJsZSkKIHsK QEAgLTEwNiw3ICsxMjEsNyBAQCBzdGF0aWMgaW50IHZtd19zZXR1cF9vdGFibGVfYmFzZShzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCiAJQlVHX09OKG90YWJsZS0+cGFnZV90YWJsZSAh PSBOVUxMKTsKIAotCXZzZ3QgPSB2bXdfYm9fc2dfdGFibGUoZGV2X3ByaXYtPm90YWJsZV9ibyk7 CisJdnNndCA9IHZtd19ib19zZ190YWJsZShvdGFibGVfYm8pOwogCXZtd19waXRlcl9zdGFydCgm aXRlciwgdnNndCwgb2Zmc2V0ID4+IFBBR0VfU0hJRlQpOwogCVdBUk5fT04oIXZtd19waXRlcl9u ZXh0KCZpdGVyKSk7CiAKQEAgLTE5Myw3ICsyMDgsNyBAQCBzdGF0aWMgdm9pZCB2bXdfdGFrZWRv d25fb3RhYmxlX2Jhc2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgInRha2Vk b3duLlxuIik7CiAJCXJldHVybjsKIAl9Ci0gCisKIAltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNt ZCkpOwogCWNtZC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfU0VUX09UQUJMRV9CQVNFOwogCWNt ZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kLT5ib2R5KTsKQEAgLTIxOCw0NyArMjMzLDIxIEBA IHN0YXRpYyB2b2lkIHZtd190YWtlZG93bl9vdGFibGVfYmFzZShzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2LAogCW90YWJsZS0+cGFnZV90YWJsZSA9IE5VTEw7CiB9CiAKLS8qCi0gKiB2bXdf b3RhYmxlc19zZXR1cCAtIFNldCB1cCBndWVzdCBiYWNrZWQgbWVtb3J5IG9iamVjdCB0YWJsZXMK LSAqCi0gKiBAZGV2X3ByaXY6ICAgICAgIFBvaW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBzdHJ1 Y3R1cmUKLSAqCi0gKiBUYWtlcyBjYXJlIG9mIHRoZSBkZXZpY2UgZ3Vlc3QgYmFja2VkIHN1cmZh Y2UKLSAqIGluaXRpYWxpemF0aW9uLCBieSBzZXR0aW5nIHVwIHRoZSBndWVzdCBiYWNrZWQgbWVt b3J5IG9iamVjdCB0YWJsZXMuCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgdmFyaW91cyBl cnJvciBjb2RlcyBvbiBmYWlsdXJlLiBBIHN1Y2Nlc2Z1bCByZXR1cm4KLSAqIG1lYW5zIHRoZSBv YmplY3QgdGFibGVzIGNhbiBiZSB0YWtlbiBkb3duIHVzaW5nIHRoZSB2bXdfb3RhYmxlc190YWtl ZG93bgotICogZnVuY3Rpb24uCi0gKi8KLWludCB2bXdfb3RhYmxlc19zZXR1cChzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2KQorCitzdGF0aWMgaW50IHZtd19vdGFibGVfYmF0Y2hfc2V0dXAo c3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkgIHN0cnVjdCB2bXdfb3RhYmxlX2Jh dGNoICpiYXRjaCkKIHsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIGJv X3NpemU7Ci0Jc3RydWN0IHZtd19vdGFibGUgKm90YWJsZXM7CisJc3RydWN0IHZtd19vdGFibGUg Km90YWJsZXMgPSBiYXRjaC0+b3RhYmxlczsKIAlTVkdBT1RhYmxlVHlwZSBpOwogCWludCByZXQ7 CiAKLQlvdGFibGVzID0ga3phbGxvYyhTVkdBX09UQUJMRV9EWDlfTUFYICogc2l6ZW9mKCpvdGFi bGVzKSwKLQkJCSAgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KG90YWJsZXMgPT0gTlVMTCkp IHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIG90YWJsZSAiCi0J CQkgICJtZXRhZGF0YS5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlvdGFibGVzW1NW R0FfT1RBQkxFX01PQl0uc2l6ZSA9Ci0JCVZNV0dGWF9OVU1fTU9CICogU1ZHQTNEX09UQUJMRV9N T0JfRU5UUllfU0laRTsKLQlvdGFibGVzW1NWR0FfT1RBQkxFX1NVUkZBQ0VdLnNpemUgPQotCQlW TVdHRlhfTlVNX0dCX1NVUkZBQ0UgKiBTVkdBM0RfT1RBQkxFX1NVUkZBQ0VfRU5UUllfU0laRTsK LQlvdGFibGVzW1NWR0FfT1RBQkxFX0NPTlRFWFRdLnNpemUgPQotCQlWTVdHRlhfTlVNX0dCX0NP TlRFWFQgKiBTVkdBM0RfT1RBQkxFX0NPTlRFWFRfRU5UUllfU0laRTsKLQlvdGFibGVzW1NWR0Ff T1RBQkxFX1NIQURFUl0uc2l6ZSA9Ci0JCVZNV0dGWF9OVU1fR0JfU0hBREVSICogU1ZHQTNEX09U QUJMRV9TSEFERVJfRU5UUllfU0laRTsKLQlvdGFibGVzW1NWR0FfT1RBQkxFX1NDUkVFTlRBUkdF VF0uc2l6ZSA9Ci0JCVZNV0dGWF9OVU1fR0JfU0NSRUVOX1RBUkdFVCAqCi0JCVNWR0EzRF9PVEFC TEVfU0NSRUVOX1RBUkdFVF9FTlRSWV9TSVpFOwotCiAJYm9fc2l6ZSA9IDA7Ci0JZm9yIChpID0g MDsgaSA8IFNWR0FfT1RBQkxFX0RYOV9NQVg7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBiYXRj aC0+bnVtX290YWJsZXM7ICsraSkgeworCQlpZiAoIW90YWJsZXNbaV0uZW5hYmxlZCkKKwkJCWNv bnRpbnVlOworCiAJCW90YWJsZXNbaV0uc2l6ZSA9CiAJCQkob3RhYmxlc1tpXS5zaXplICsgUEFH RV9TSVpFIC0gMSkgJiBQQUdFX01BU0s7CiAJCWJvX3NpemUgKz0gb3RhYmxlc1tpXS5zaXplOwpA QCAtMjY4LDYzICsyNTcsMTA1IEBAIGludCB2bXdfb3RhYmxlc19zZXR1cChzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2KQogCQkJICAgIHR0bV9ib190eXBlX2RldmljZSwKIAkJCSAgICAmdm13 X3N5c19uZV9wbGFjZW1lbnQsCiAJCQkgICAgMCwgZmFsc2UsIE5VTEwsCi0JCQkgICAgJmRldl9w cml2LT5vdGFibGVfYm8pOworCQkJICAgICZiYXRjaC0+b3RhYmxlX2JvKTsKIAogCWlmICh1bmxp a2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0X25vX2JvOwogCi0JcmV0ID0gdHRtX2JvX3Jlc2Vy dmUoZGV2X3ByaXYtPm90YWJsZV9ibywgZmFsc2UsIHRydWUsIGZhbHNlLCBOVUxMKTsKKwlyZXQg PSB0dG1fYm9fcmVzZXJ2ZShiYXRjaC0+b3RhYmxlX2JvLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIE5V TEwpOwogCUJVR19PTihyZXQgIT0gMCk7Ci0JcmV0ID0gdm13X2JvX2RyaXZlci50dG1fdHRfcG9w dWxhdGUoZGV2X3ByaXYtPm90YWJsZV9iby0+dHRtKTsKKwlyZXQgPSB2bXdfYm9fZHJpdmVyLnR0 bV90dF9wb3B1bGF0ZShiYXRjaC0+b3RhYmxlX2JvLT50dG0pOwogCWlmICh1bmxpa2VseShyZXQg IT0gMCkpCiAJCWdvdG8gb3V0X3VucmVzZXJ2ZTsKLQlyZXQgPSB2bXdfYm9fbWFwX2RtYShkZXZf cHJpdi0+b3RhYmxlX2JvKTsKKwlyZXQgPSB2bXdfYm9fbWFwX2RtYShiYXRjaC0+b3RhYmxlX2Jv KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQlnb3RvIG91dF91bnJlc2VydmU7CiAKLQl0 dG1fYm9fdW5yZXNlcnZlKGRldl9wcml2LT5vdGFibGVfYm8pOworCXR0bV9ib191bnJlc2VydmUo YmF0Y2gtPm90YWJsZV9ibyk7CiAKIAlvZmZzZXQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBTVkdB X09UQUJMRV9EWDlfTUFYIC0gVk1XX09UQUJMRV9TRVRVUF9TVUI7ICsraSkgewotCQlyZXQgPSB2 bXdfc2V0dXBfb3RhYmxlX2Jhc2UoZGV2X3ByaXYsIGksIG9mZnNldCwKKwlmb3IgKGkgPSAwOyBp IDwgYmF0Y2gtPm51bV9vdGFibGVzOyArK2kpIHsKKwkJaWYgKCFiYXRjaC0+b3RhYmxlc1tpXS5l bmFibGVkKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gdm13X3NldHVwX290YWJsZV9iYXNlKGRl dl9wcml2LCBpLCBiYXRjaC0+b3RhYmxlX2JvLAorCQkJCQkgICAgb2Zmc2V0LAogCQkJCQkgICAg Jm90YWJsZXNbaV0pOwogCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQogCQkJZ290byBvdXRfbm9f c2V0dXA7CiAJCW9mZnNldCArPSBvdGFibGVzW2ldLnNpemU7CiAJfQogCi0JZGV2X3ByaXYtPm90 YWJsZXMgPSBvdGFibGVzOwogCXJldHVybiAwOwogCiBvdXRfdW5yZXNlcnZlOgotCXR0bV9ib191 bnJlc2VydmUoZGV2X3ByaXYtPm90YWJsZV9ibyk7CisJdHRtX2JvX3VucmVzZXJ2ZShiYXRjaC0+ b3RhYmxlX2JvKTsKIG91dF9ub19zZXR1cDoKLQlmb3IgKGkgPSAwOyBpIDwgU1ZHQV9PVEFCTEVf RFg5X01BWCAtIFZNV19PVEFCTEVfU0VUVVBfU1VCOyArK2kpCi0JCXZtd190YWtlZG93bl9vdGFi bGVfYmFzZShkZXZfcHJpdiwgaSwgJm90YWJsZXNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBiYXRj aC0+bnVtX290YWJsZXM7ICsraSkgeworCQlpZiAoYmF0Y2gtPm90YWJsZXNbaV0uZW5hYmxlZCkK KwkJCXZtd190YWtlZG93bl9vdGFibGVfYmFzZShkZXZfcHJpdiwgaSwKKwkJCQkJCSAmYmF0Y2gt Pm90YWJsZXNbaV0pOworCX0KIAotCXR0bV9ib191bnJlZigmZGV2X3ByaXYtPm90YWJsZV9ibyk7 CisJdHRtX2JvX3VucmVmKCZiYXRjaC0+b3RhYmxlX2JvKTsKIG91dF9ub19ibzoKLQlrZnJlZShv dGFibGVzKTsKIAlyZXR1cm4gcmV0OwogfQogCi0KIC8qCi0gKiB2bXdfb3RhYmxlc190YWtlZG93 biAtIFRha2UgZG93biBndWVzdCBiYWNrZWQgbWVtb3J5IG9iamVjdCB0YWJsZXMKKyAqIHZtd19v dGFibGVzX3NldHVwIC0gU2V0IHVwIGd1ZXN0IGJhY2tlZCBtZW1vcnkgb2JqZWN0IHRhYmxlcwog ICoKICAqIEBkZXZfcHJpdjogICAgICAgUG9pbnRlciB0byBhIGRldmljZSBwcml2YXRlIHN0cnVj dHVyZQogICoKLSAqIFRha2UgZG93biB0aGUgR3Vlc3QgTWVtb3J5IE9iamVjdCB0YWJsZXMuCisg KiBUYWtlcyBjYXJlIG9mIHRoZSBkZXZpY2UgZ3Vlc3QgYmFja2VkIHN1cmZhY2UKKyAqIGluaXRp YWxpemF0aW9uLCBieSBzZXR0aW5nIHVwIHRoZSBndWVzdCBiYWNrZWQgbWVtb3J5IG9iamVjdCB0 YWJsZXMuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgdmFyaW91cyBlcnJvciBjb2RlcyBv biBmYWlsdXJlLiBBIHN1Y2Nlc3NmdWwgcmV0dXJuCisgKiBtZWFucyB0aGUgb2JqZWN0IHRhYmxl cyBjYW4gYmUgdGFrZW4gZG93biB1c2luZyB0aGUgdm13X290YWJsZXNfdGFrZWRvd24KKyAqIGZ1 bmN0aW9uLgogICovCi12b2lkIHZtd19vdGFibGVzX3Rha2Vkb3duKHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYpCitpbnQgdm13X290YWJsZXNfc2V0dXAoc3RydWN0IHZtd19wcml2YXRlICpk ZXZfcHJpdikKK3sKKwlzdHJ1Y3Qgdm13X290YWJsZSAqKm90YWJsZXMgPSAmZGV2X3ByaXYtPm90 YWJsZV9iYXRjaC5vdGFibGVzOworCWludCByZXQ7CisKKwlpZiAoZGV2X3ByaXYtPmhhc19keCkg eworCQkqb3RhYmxlcyA9IGttYWxsb2Moc2l6ZW9mKGR4X3RhYmxlcyksIEdGUF9LRVJORUwpOwor CQlpZiAoKm90YWJsZXMgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbWNweSgq b3RhYmxlcywgZHhfdGFibGVzLCBzaXplb2YoZHhfdGFibGVzKSk7CisJCWRldl9wcml2LT5vdGFi bGVfYmF0Y2gubnVtX290YWJsZXMgPSBBUlJBWV9TSVpFKGR4X3RhYmxlcyk7CisJfSBlbHNlIHsK KwkJKm90YWJsZXMgPSBrbWFsbG9jKHNpemVvZihwcmVfZHhfdGFibGVzKSwgR0ZQX0tFUk5FTCk7 CisJCWlmICgqb3RhYmxlcyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbWVtY3B5 KCpvdGFibGVzLCBwcmVfZHhfdGFibGVzLCBzaXplb2YocHJlX2R4X3RhYmxlcykpOworCQlkZXZf cHJpdi0+b3RhYmxlX2JhdGNoLm51bV9vdGFibGVzID0gQVJSQVlfU0laRShwcmVfZHhfdGFibGVz KTsKKwl9CisKKwlyZXQgPSB2bXdfb3RhYmxlX2JhdGNoX3NldHVwKGRldl9wcml2LCAmZGV2X3By aXYtPm90YWJsZV9iYXRjaCk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZ290byBvdXRf c2V0dXA7CisKKwlyZXR1cm4gMDsKKworb3V0X3NldHVwOgorCWtmcmVlKCpvdGFibGVzKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB2bXdfb3RhYmxlX2JhdGNoX3Rha2Vkb3duKHN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkgICAgICAgc3RydWN0IHZtd19vdGFibGVf YmF0Y2ggKmJhdGNoKQogewogCVNWR0FPVGFibGVUeXBlIGk7Ci0Jc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0ICpibyA9IGRldl9wcml2LT5vdGFibGVfYm87CisJc3RydWN0IHR0bV9idWZmZXJfb2Jq ZWN0ICpibyA9IGJhdGNoLT5vdGFibGVfYm87CiAJaW50IHJldDsKIAotCWZvciAoaSA9IDA7IGkg PCBTVkdBX09UQUJMRV9EWDlfTUFYIC0gVk1XX09UQUJMRV9TRVRVUF9TVUI7ICsraSkKLQkJdm13 X3Rha2Vkb3duX290YWJsZV9iYXNlKGRldl9wcml2LCBpLAotCQkJCQkgJmRldl9wcml2LT5vdGFi bGVzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmF0Y2gtPm51bV9vdGFibGVzOyArK2kpCisJCWlm IChiYXRjaC0+b3RhYmxlc1tpXS5lbmFibGVkKQorCQkJdm13X3Rha2Vkb3duX290YWJsZV9iYXNl KGRldl9wcml2LCBpLAorCQkJCQkJICZiYXRjaC0+b3RhYmxlc1tpXSk7CiAKIAlyZXQgPSB0dG1f Ym9fcmVzZXJ2ZShibywgZmFsc2UsIHRydWUsIGZhbHNlLCBOVUxMKTsKIAlCVUdfT04ocmV0ICE9 IDApOwpAQCAtMzMyLDExICszNjMsMjEgQEAgdm9pZCB2bXdfb3RhYmxlc190YWtlZG93bihzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCXZtd19mZW5jZV9zaW5nbGVfYm8oYm8sIE5VTEwp OwogCXR0bV9ib191bnJlc2VydmUoYm8pOwogCi0JdHRtX2JvX3VucmVmKCZkZXZfcHJpdi0+b3Rh YmxlX2JvKTsKLQlrZnJlZShkZXZfcHJpdi0+b3RhYmxlcyk7Ci0JZGV2X3ByaXYtPm90YWJsZXMg PSBOVUxMOworCXR0bV9ib191bnJlZigmYmF0Y2gtPm90YWJsZV9ibyk7CiB9CiAKKy8qCisgKiB2 bXdfb3RhYmxlc190YWtlZG93biAtIFRha2UgZG93biBndWVzdCBiYWNrZWQgbWVtb3J5IG9iamVj dCB0YWJsZXMKKyAqCisgKiBAZGV2X3ByaXY6ICAgICAgIFBvaW50ZXIgdG8gYSBkZXZpY2UgcHJp dmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBUYWtlIGRvd24gdGhlIEd1ZXN0IE1lbW9yeSBPYmplY3Qg dGFibGVzLgorICovCit2b2lkIHZtd19vdGFibGVzX3Rha2Vkb3duKHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYpCit7CisJdm13X290YWJsZV9iYXRjaF90YWtlZG93bihkZXZfcHJpdiwgJmRl dl9wcml2LT5vdGFibGVfYmF0Y2gpOworCWtmcmVlKGRldl9wcml2LT5vdGFibGVfYmF0Y2gub3Rh Ymxlcyk7Cit9CiAKIC8qCiAgKiB2bXdfbW9iX2NhbGN1bGF0ZV9wdF9wYWdlcyAtIENhbGN1bGF0 ZSB0aGUgbnVtYmVyIG9mIHBhZ2UgdGFibGUgcGFnZXMKQEAgLTQxMCw3ICs0NTEsNyBAQCBzdGF0 aWMgaW50IHZtd19tb2JfcHRfcG9wdWxhdGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwK IAkJZ290byBvdXRfdW5yZXNlcnZlOwogCiAJdHRtX2JvX3VucmVzZXJ2ZShtb2ItPnB0X2JvKTsK LQkKKwogCXJldHVybiAwOwogCiBvdXRfdW5yZXNlcnZlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X3Jlc291cmNlLmMKaW5kZXggYmUyODA5YS4uNjE4NmU4NSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZS5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8 ZHJtL3R0bS90dG1fcGxhY2VtZW50Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRl ICJ2bXdnZnhfcmVzb3VyY2VfcHJpdi5oIgorI2luY2x1ZGUgInZtd2dmeF9iaW5kaW5nLmgiCiAK ICNkZWZpbmUgVk1XX1JFU19FVklDVF9FUlJfQ09VTlQgMTAKIApAQCAtMTQ0LDEwICsxNDUsMTAg QEAgc3RhdGljIHZvaWQgdm13X3Jlc291cmNlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCiAJ fQogCiAJaWYgKGxpa2VseShyZXMtPmh3X2Rlc3Ryb3kgIT0gTlVMTCkpIHsKLQkJcmVzLT5od19k ZXN0cm95KHJlcyk7CiAJCW11dGV4X2xvY2soJmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsKLQkJ dm13X2NvbnRleHRfYmluZGluZ19yZXNfbGlzdF9raWxsKCZyZXMtPmJpbmRpbmdfaGVhZCk7CisJ CXZtd19iaW5kaW5nX3Jlc19saXN0X2tpbGwoJnJlcy0+YmluZGluZ19oZWFkKTsKIAkJbXV0ZXhf dW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7CisJCXJlcy0+aHdfZGVzdHJveShyZXMp OwogCX0KIAogCWlkID0gcmVzLT5pZDsKQEAgLTExNDksMTQgKzExNTAsMTYgQEAgb3V0X2JpbmRf ZmFpbGVkOgogICogY29tbWFuZCBzdWJtaXNzaW9uLgogICoKICAqIEByZXM6ICAgICAgICAgICAg ICAgUG9pbnRlciB0byB0aGUgc3RydWN0IHZtd19yZXNvdXJjZSB0byB1bnJlc2VydmUuCisgKiBA c3dpdGNoX2JhY2t1cDogICAgIEJhY2t1cCBidWZmZXIgaGFzIGJlZW4gc3dpdGNoZWQuCiAgKiBA bmV3X2JhY2t1cDogICAgICAgIFBvaW50ZXIgdG8gbmV3IGJhY2t1cCBidWZmZXIgaWYgY29tbWFu ZCBzdWJtaXNzaW9uCi0gKiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaGVkLgotICogQG5ld19i YWNrdXBfb2Zmc2V0OiBOZXcgYmFja3VwIG9mZnNldCBpZiBAbmV3X2JhY2t1cCBpcyAhTlVMTC4K KyAqICAgICAgICAgICAgICAgICAgICAgc3dpdGNoZWQuIE1heSBiZSBOVUxMLgorICogQG5ld19i YWNrdXBfb2Zmc2V0OiBOZXcgYmFja3VwIG9mZnNldCBpZiBAc3dpdGNoX2JhY2t1cCBpcyB0cnVl LgogICoKICAqIEN1cnJlbnRseSB1bnJlc2VydmluZyBhIHJlc291cmNlIG1lYW5zIHB1dHRpbmcg aXQgYmFjayBvbiB0aGUgZGV2aWNlJ3MKICAqIHJlc291cmNlIGxydSBsaXN0LCBzbyB0aGF0IGl0 IGNhbiBiZSBldmljdGVkIGlmIG5lY2Vzc2FyeS4KICAqLwogdm9pZCB2bXdfcmVzb3VyY2VfdW5y ZXNlcnZlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKKwkJCSAgICBib29sIHN3aXRjaF9iYWNr dXAsCiAJCQkgICAgc3RydWN0IHZtd19kbWFfYnVmZmVyICpuZXdfYmFja3VwLAogCQkJICAgIHVu c2lnbmVkIGxvbmcgbmV3X2JhY2t1cF9vZmZzZXQpCiB7CkBAIC0xMTY1LDE5ICsxMTY4LDIyIEBA IHZvaWQgdm13X3Jlc291cmNlX3VucmVzZXJ2ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAJ aWYgKCFsaXN0X2VtcHR5KCZyZXMtPmxydV9oZWFkKSkKIAkJcmV0dXJuOwogCi0JaWYgKG5ld19i YWNrdXAgJiYgbmV3X2JhY2t1cCAhPSByZXMtPmJhY2t1cCkgewotCisJaWYgKHN3aXRjaF9iYWNr dXAgJiYgbmV3X2JhY2t1cCAhPSByZXMtPmJhY2t1cCkgewogCQlpZiAocmVzLT5iYWNrdXApIHsK IAkJCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJlcy0+YmFja3VwLT5iYXNlLnJlc3YtPmxvY2suYmFz ZSk7CiAJCQlsaXN0X2RlbF9pbml0KCZyZXMtPm1vYl9oZWFkKTsKIAkJCXZtd19kbWFidWZfdW5y ZWZlcmVuY2UoJnJlcy0+YmFja3VwKTsKIAkJfQogCi0JCXJlcy0+YmFja3VwID0gdm13X2RtYWJ1 Zl9yZWZlcmVuY2UobmV3X2JhY2t1cCk7Ci0JCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm5ld19iYWNr dXAtPmJhc2UucmVzdi0+bG9jay5iYXNlKTsKLQkJbGlzdF9hZGRfdGFpbCgmcmVzLT5tb2JfaGVh ZCwgJm5ld19iYWNrdXAtPnJlc19saXN0KTsKKwkJaWYgKG5ld19iYWNrdXApIHsKKwkJCXJlcy0+ YmFja3VwID0gdm13X2RtYWJ1Zl9yZWZlcmVuY2UobmV3X2JhY2t1cCk7CisJCQlsb2NrZGVwX2Fz c2VydF9oZWxkKCZuZXdfYmFja3VwLT5iYXNlLnJlc3YtPmxvY2suYmFzZSk7CisJCQlsaXN0X2Fk ZF90YWlsKCZyZXMtPm1vYl9oZWFkLCAmbmV3X2JhY2t1cC0+cmVzX2xpc3QpOworCQl9IGVsc2Ug eworCQkJcmVzLT5iYWNrdXAgPSBOVUxMOworCQl9CiAJfQotCWlmIChuZXdfYmFja3VwKQorCWlm IChzd2l0Y2hfYmFja3VwKQogCQlyZXMtPmJhY2t1cF9vZmZzZXQgPSBuZXdfYmFja3VwX29mZnNl dDsKIAogCWlmICghcmVzLT5mdW5jLT5tYXlfZXZpY3QgfHwgcmVzLT5pZCA9PSAtMSB8fCByZXMt PnBpbl9jb3VudCkKQEAgLTEyNjksOCArMTI3NSwxMiBAQCBpbnQgdm13X3Jlc291cmNlX3Jlc2Vy dmUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLCBib29sIGludGVycnVwdGlibGUsCiAJaWYgKHJl cy0+ZnVuYy0+bmVlZHNfYmFja3VwICYmIHJlcy0+YmFja3VwID09IE5VTEwgJiYKIAkgICAgIW5v X2JhY2t1cCkgewogCQlyZXQgPSB2bXdfcmVzb3VyY2VfYnVmX2FsbG9jKHJlcywgaW50ZXJydXB0 aWJsZSk7Ci0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCWlmICh1bmxpa2VseShyZXQgIT0g MCkpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGEgYmFja3VwIGJ1ZmZlciAi CisJCQkJICAib2Ygc2l6ZSAlbHUuIGJ5dGVzXG4iLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcpIHJl cy0+YmFja3VwX3NpemUpOwogCQkJcmV0dXJuIHJldDsKKwkJfQogCX0KIAogCXJldHVybiAwOwpA QCAtMTM1NCw3ICsxMzY0LDcgQEAgaW50IHZtd19yZXNvdXJjZV92YWxpZGF0ZShzdHJ1Y3Qgdm13 X3Jlc291cmNlICpyZXMpCiAJc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgdmFsX2J1ZjsKIAl1 bnNpZ25lZCBlcnJfY291bnQgPSAwOwogCi0JaWYgKGxpa2VseSghcmVzLT5mdW5jLT5tYXlfZXZp Y3QpKQorCWlmICghcmVzLT5mdW5jLT5jcmVhdGUpCiAJCXJldHVybiAwOwogCiAJdmFsX2J1Zi5i byA9IE5VTEw7CkBAIC0xNjI0LDcgKzE2MzQsNyBAQCBpbnQgdm13X3Jlc291cmNlX3BpbihzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXMsIGJvb2wgaW50ZXJydXB0aWJsZSkKIAlyZXMtPnBpbl9jb3Vu dCsrOwogCiBvdXRfbm9fdmFsaWRhdGU6Ci0Jdm13X3Jlc291cmNlX3VucmVzZXJ2ZShyZXMsIE5V TEwsIDBVTCk7CisJdm13X3Jlc291cmNlX3VucmVzZXJ2ZShyZXMsIGZhbHNlLCBOVUxMLCAwVUwp Owogb3V0X25vX3Jlc2VydmU6CiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Y21kYnVmX211dGV4 KTsKIAl0dG1fd3JpdGVfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKQEAgLTE2 NjAsOCArMTY3MCwxOCBAQCB2b2lkIHZtd19yZXNvdXJjZV91bnBpbihzdHJ1Y3Qgdm13X3Jlc291 cmNlICpyZXMpCiAJCXR0bV9ib191bnJlc2VydmUoJnZiby0+YmFzZSk7CiAJfQogCi0Jdm13X3Jl c291cmNlX3VucmVzZXJ2ZShyZXMsIE5VTEwsIDBVTCk7CisJdm13X3Jlc291cmNlX3VucmVzZXJ2 ZShyZXMsIGZhbHNlLCBOVUxMLCAwVUwpOwogCiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Y21k YnVmX211dGV4KTsKIAl0dG1fcmVhZF91bmxvY2soJmRldl9wcml2LT5yZXNlcnZhdGlvbl9zZW0p OwogfQorCisvKioKKyAqIHZtd19yZXNfdHlwZSAtIFJldHVybiB0aGUgcmVzb3VyY2UgdHlwZQor ICoKKyAqIEByZXM6IFBvaW50ZXIgdG8gdGhlIHJlc291cmNlCisgKi8KK2VudW0gdm13X3Jlc190 eXBlIHZtd19yZXNfdHlwZShjb25zdCBzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7CisJcmV0 dXJuIHJlcy0+ZnVuYy0+cmVzX3R5cGU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9yZXNvdXJjZV9wcml2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Zt d2dmeF9yZXNvdXJjZV9wcml2LmgKaW5kZXggZjNhZGVlZC4uNzQzZTJhZCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2VfcHJpdi5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3Jlc291cmNlX3ByaXYuaApAQCAtMzAsNiArMzAsMTIg QEAKIAogI2luY2x1ZGUgInZtd2dmeF9kcnYuaCIKIAorZW51bSB2bXdfY21kYnVmX3Jlc19zdGF0 ZSB7CisJVk1XX0NNREJVRl9SRVNfQ09NTUlUVEVELAorCVZNV19DTURCVUZfUkVTX0FERCwKKwlW TVdfQ01EQlVGX1JFU19ERUwKK307CisKIC8qKgogICogc3RydWN0IHZtd191c2VyX3Jlc291cmNl X2NvbnYgLSBJZGVudGlmeSBhIGRlcml2ZWQgdXNlci1leHBvcnRlZCByZXNvdXJjZQogICogdHlw ZSBhbmQgcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGNvbnZlcnQgaXRzIHR0bV9iYXNlX29iamVjdCBw b2ludGVyIHRvCkBAIC01NSw4ICs2MSwxMCBAQCBzdHJ1Y3Qgdm13X3VzZXJfcmVzb3VyY2VfY29u diB7CiAgKiBAYmluZDogICAgICAgICAgICAgIEJpbmQgYSBoYXJkd2FyZSByZXNvdXJjZSB0byBw ZXJzaXN0ZW50IGJ1ZmZlciBzdG9yYWdlLgogICogQHVuYmluZDogICAgICAgICAgICBVbmJpbmQg YSBoYXJkd2FyZSByZXNvdXJjZSBmcm9tIHBlcnNpc3RlbnQKICAqICAgICAgICAgICAgICAgICAg ICAgYnVmZmVyIHN0b3JhZ2UuCisgKiBAY29tbWl0X25vdGlmeTogICAgIElmIHRoZSByZXNvdXJj ZSBpcyBhIGNvbW1hbmQgYnVmZmVyIG1hbmFnZWQgcmVzb3VyY2UsCisgKiAgICAgICAgICAgICAg ICAgICAgIGNhbGxiYWNrIHRvIG5vdGlmeSB0aGF0IGEgZGVmaW5lIG9yIHJlbW92ZSBjb21tYW5k CisgKiAgICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIGNvbW1pdHRlZCB0byB0aGUgZGV2aWNl LgogICovCi0KIHN0cnVjdCB2bXdfcmVzX2Z1bmMgewogCWVudW0gdm13X3Jlc190eXBlIHJlc190 eXBlOwogCWJvb2wgbmVlZHNfYmFja3VwOwpAQCAtNzEsNiArNzksOCBAQCBzdHJ1Y3Qgdm13X3Jl c19mdW5jIHsKIAlpbnQgKCp1bmJpbmQpIChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAJCSAg ICAgICBib29sIHJlYWRiYWNrLAogCQkgICAgICAgc3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIg KnZhbF9idWYpOworCXZvaWQgKCpjb21taXRfbm90aWZ5KShzdHJ1Y3Qgdm13X3Jlc291cmNlICpy ZXMsCisJCQkgICAgICBlbnVtIHZtd19jbWRidWZfcmVzX3N0YXRlIHN0YXRlKTsKIH07CiAKIGlu dCB2bXdfcmVzb3VyY2VfYWxsb2NfaWQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3NoYWRlci5jIGIvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfc2hhZGVyLmMKaW5kZXggMTFiYzYwYy4uNjE0MDNlYiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc2hhZGVyLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc2hhZGVyLmMKQEAgLTI3LDEyICsyNywxNSBAQAog CiAjaW5jbHVkZSAidm13Z2Z4X2Rydi5oIgogI2luY2x1ZGUgInZtd2dmeF9yZXNvdXJjZV9wcml2 LmgiCisjaW5jbHVkZSAidm13Z2Z4X2JpbmRpbmcuaCIKICNpbmNsdWRlICJ0dG0vdHRtX3BsYWNl bWVudC5oIgogCiBzdHJ1Y3Qgdm13X3NoYWRlciB7CiAJc3RydWN0IHZtd19yZXNvdXJjZSByZXM7 CiAJU1ZHQTNkU2hhZGVyVHlwZSB0eXBlOwogCXVpbnQzMl90IHNpemU7CisJdWludDhfdCBudW1f aW5wdXRfc2lnOworCXVpbnQ4X3QgbnVtX291dHB1dF9zaWc7CiB9OwogCiBzdHJ1Y3Qgdm13X3Vz ZXJfc2hhZGVyIHsKQEAgLTQwLDggKzQzLDE4IEBAIHN0cnVjdCB2bXdfdXNlcl9zaGFkZXIgewog CXN0cnVjdCB2bXdfc2hhZGVyIHNoYWRlcjsKIH07CiAKK3N0cnVjdCB2bXdfZHhfc2hhZGVyIHsK KwlzdHJ1Y3Qgdm13X3Jlc291cmNlIHJlczsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpjdHg7CisJ c3RydWN0IHZtd19yZXNvdXJjZSAqY290YWJsZTsKKwl1MzIgaWQ7CisJYm9vbCBjb21taXR0ZWQ7 CisJc3RydWN0IGxpc3RfaGVhZCBjb3RhYmxlX2hlYWQ7Cit9OworCiBzdGF0aWMgdWludDY0X3Qg dm13X3VzZXJfc2hhZGVyX3NpemU7CiBzdGF0aWMgdWludDY0X3Qgdm13X3NoYWRlcl9zaXplOwor c3RhdGljIHNpemVfdCB2bXdfc2hhZGVyX2R4X3NpemU7CiAKIHN0YXRpYyB2b2lkIHZtd191c2Vy X3NoYWRlcl9mcmVlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7CiBzdGF0aWMgc3RydWN0IHZt d19yZXNvdXJjZSAqCkBAIC01NSw2ICs2OCwxOCBAQCBzdGF0aWMgaW50IHZtd19nYl9zaGFkZXJf dW5iaW5kKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKIAkJCQkgc3RydWN0IHR0bV92YWxpZGF0 ZV9idWZmZXIgKnZhbF9idWYpOwogc3RhdGljIGludCB2bXdfZ2Jfc2hhZGVyX2Rlc3Ryb3koc3Ry dWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKIAorc3RhdGljIGludCB2bXdfZHhfc2hhZGVyX2NyZWF0 ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpOworc3RhdGljIGludCB2bXdfZHhfc2hhZGVyX2Jp bmQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAorCQkJICAgICAgIHN0cnVjdCB0dG1fdmFsaWRh dGVfYnVmZmVyICp2YWxfYnVmKTsKK3N0YXRpYyBpbnQgdm13X2R4X3NoYWRlcl91bmJpbmQoc3Ry dWN0IHZtd19yZXNvdXJjZSAqcmVzLAorCQkJCSBib29sIHJlYWRiYWNrLAorCQkJCSBzdHJ1Y3Qg dHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmFsX2J1Zik7CitzdGF0aWMgdm9pZCB2bXdfZHhfc2hhZGVy X2NvbW1pdF9ub3RpZnkoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAorCQkJCQllbnVtIHZtd19j bWRidWZfcmVzX3N0YXRlIHN0YXRlKTsKK3N0YXRpYyBib29sIHZtd19zaGFkZXJfaWRfb2sodTMy IHVzZXJfa2V5LCBTVkdBM2RTaGFkZXJUeXBlIHNoYWRlcl90eXBlKTsKK3N0YXRpYyB1MzIgdm13 X3NoYWRlcl9rZXkodTMyIHVzZXJfa2V5LCBTVkdBM2RTaGFkZXJUeXBlIHNoYWRlcl90eXBlKTsK K3N0YXRpYyB1aW50NjRfdCB2bXdfdXNlcl9zaGFkZXJfc2l6ZTsKKwogc3RhdGljIGNvbnN0IHN0 cnVjdCB2bXdfdXNlcl9yZXNvdXJjZV9jb252IHVzZXJfc2hhZGVyX2NvbnYgPSB7CiAJLm9iamVj dF90eXBlID0gVk1XX1JFU19TSEFERVIsCiAJLmJhc2Vfb2JqX3RvX3JlcyA9IHZtd191c2VyX3No YWRlcl9iYXNlX3RvX3JlcywKQEAgLTc3LDYgKzEwMiwyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IHZtd19yZXNfZnVuYyB2bXdfZ2Jfc2hhZGVyX2Z1bmMgPSB7CiAJLnVuYmluZCA9IHZtd19nYl9z aGFkZXJfdW5iaW5kCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHZtd19yZXNfZnVuYyB2bXdf ZHhfc2hhZGVyX2Z1bmMgPSB7CisJLnJlc190eXBlID0gdm13X3Jlc19zaGFkZXIsCisJLm5lZWRz X2JhY2t1cCA9IHRydWUsCisJLm1heV9ldmljdCA9IGZhbHNlLAorCS50eXBlX25hbWUgPSAiZHgg c2hhZGVycyIsCisJLmJhY2t1cF9wbGFjZW1lbnQgPSAmdm13X21vYl9wbGFjZW1lbnQsCisJLmNy ZWF0ZSA9IHZtd19keF9zaGFkZXJfY3JlYXRlLAorCS8qCisJICogVGhlIGRlc3Ryb3kgY2FsbGJh Y2sgaXMgb25seSBjYWxsZWQgd2l0aCBhIGNvbW1pdHRlZCByZXNvdXJjZSBvbgorCSAqIGNvbnRl eHQgZGVzdHJveSwgaW4gd2hpY2ggY2FzZSB3ZSBkZXN0cm95IHRoZSBjb3RhYmxlIGFueXdheSwK KwkgKiBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZGVzdHJveSBEWCBzaGFkZXJzIHNlcGFyYXRlbHku CisJICovCisJLmRlc3Ryb3kgPSBOVUxMLAorCS5iaW5kID0gdm13X2R4X3NoYWRlcl9iaW5kLAor CS51bmJpbmQgPSB2bXdfZHhfc2hhZGVyX3VuYmluZCwKKwkuY29tbWl0X25vdGlmeSA9IHZtd19k eF9zaGFkZXJfY29tbWl0X25vdGlmeSwKK307CisKIC8qKgogICogU2hhZGVyIG1hbmFnZW1lbnQ6 CiAgKi8KQEAgLTg3LDI1ICsxMzAsNDIgQEAgdm13X3Jlc190b19zaGFkZXIoc3RydWN0IHZtd19y ZXNvdXJjZSAqcmVzKQogCXJldHVybiBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qgdm13X3NoYWRl ciwgcmVzKTsKIH0KIAorLyoqCisgKiB2bXdfcmVzX3RvX2R4X3NoYWRlciAtIHR5cGVjYXN0IGEg c3RydWN0IHZtd19yZXNvdXJjZSB0byBhCisgKiBzdHJ1Y3Qgdm13X2R4X3NoYWRlcgorICoKKyAq IEByZXM6IFBvaW50ZXIgdG8gdGhlIHN0cnVjdCB2bXdfcmVzb3VyY2UuCisgKi8KK3N0YXRpYyBp bmxpbmUgc3RydWN0IHZtd19keF9zaGFkZXIgKgordm13X3Jlc190b19keF9zaGFkZXIoc3RydWN0 IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXJldHVybiBjb250YWluZXJfb2YocmVzLCBzdHJ1Y3Qg dm13X2R4X3NoYWRlciwgcmVzKTsKK30KKwogc3RhdGljIHZvaWQgdm13X2h3X3NoYWRlcl9kZXN0 cm95KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKIHsKLQkodm9pZCkgdm13X2diX3NoYWRlcl9k ZXN0cm95KHJlcyk7CisJaWYgKGxpa2VseShyZXMtPmZ1bmMtPmRlc3Ryb3kpKQorCQkodm9pZCkg cmVzLT5mdW5jLT5kZXN0cm95KHJlcyk7CisJZWxzZQorCQlyZXMtPmlkID0gLTE7CiB9CiAKKwog c3RhdGljIGludCB2bXdfZ2Jfc2hhZGVyX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp diwKIAkJCSAgICAgIHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKIAkJCSAgICAgIHVpbnQzMl90 IHNpemUsCiAJCQkgICAgICB1aW50NjRfdCBvZmZzZXQsCiAJCQkgICAgICBTVkdBM2RTaGFkZXJU eXBlIHR5cGUsCisJCQkgICAgICB1aW50OF90IG51bV9pbnB1dF9zaWcsCisJCQkgICAgICB1aW50 OF90IG51bV9vdXRwdXRfc2lnLAogCQkJICAgICAgc3RydWN0IHZtd19kbWFfYnVmZmVyICpieXRl X2NvZGUsCiAJCQkgICAgICB2b2lkICgqcmVzX2ZyZWUpIChzdHJ1Y3Qgdm13X3Jlc291cmNlICpy ZXMpKQogewogCXN0cnVjdCB2bXdfc2hhZGVyICpzaGFkZXIgPSB2bXdfcmVzX3RvX3NoYWRlcihy ZXMpOwogCWludCByZXQ7CiAKLQlyZXQgPSB2bXdfcmVzb3VyY2VfaW5pdChkZXZfcHJpdiwgcmVz LCB0cnVlLAotCQkJCXJlc19mcmVlLCAmdm13X2diX3NoYWRlcl9mdW5jKTsKLQorCXJldCA9IHZt d19yZXNvdXJjZV9pbml0KGRldl9wcml2LCByZXMsIHRydWUsIHJlc19mcmVlLAorCQkJCSZ2bXdf Z2Jfc2hhZGVyX2Z1bmMpOwogCiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewogCQlpZiAocmVz X2ZyZWUpCkBAIC0xMjIsMTEgKzE4MiwxNyBAQCBzdGF0aWMgaW50IHZtd19nYl9zaGFkZXJfaW5p dChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCX0KIAlzaGFkZXItPnNpemUgPSBzaXpl OwogCXNoYWRlci0+dHlwZSA9IHR5cGU7CisJc2hhZGVyLT5udW1faW5wdXRfc2lnID0gbnVtX2lu cHV0X3NpZzsKKwlzaGFkZXItPm51bV9vdXRwdXRfc2lnID0gbnVtX291dHB1dF9zaWc7CiAKIAl2 bXdfcmVzb3VyY2VfYWN0aXZhdGUocmVzLCB2bXdfaHdfc2hhZGVyX2Rlc3Ryb3kpOwogCXJldHVy biAwOwogfQogCisvKgorICogR0Igc2hhZGVyIGNvZGU6CisgKi8KKwogc3RhdGljIGludCB2bXdf Z2Jfc2hhZGVyX2NyZWF0ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CkBAIC0yNTksNyArMzI1LDcgQEAg c3RhdGljIGludCB2bXdfZ2Jfc2hhZGVyX2Rlc3Ryb3koc3RydWN0IHZtd19yZXNvdXJjZSAqcmVz KQogCQlyZXR1cm4gMDsKIAogCW11dGV4X2xvY2soJmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsK LQl2bXdfY29udGV4dF9iaW5kaW5nX3Jlc19saXN0X3NjcnViKCZyZXMtPmJpbmRpbmdfaGVhZCk7 CisJdm13X2JpbmRpbmdfcmVzX2xpc3Rfc2NydWIoJnJlcy0+YmluZGluZ19oZWFkKTsKIAogCWNt ZCA9IHZtd19maWZvX3Jlc2VydmUoZGV2X3ByaXYsIHNpemVvZigqY21kKSk7CiAJaWYgKHVubGlr ZWx5KGNtZCA9PSBOVUxMKSkgewpAQCAtMjgwLDYgKzM0NiwzMjEgQEAgc3RhdGljIGludCB2bXdf Z2Jfc2hhZGVyX2Rlc3Ryb3koc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQogCXJldHVybiAwOwog fQogCisvKgorICogRFggc2hhZGVyIGNvZGU6CisgKi8KKworLyoqCisgKiB2bXdfZHhfc2hhZGVy X2NvbW1pdF9ub3RpZnkgLSBOb3RpZnkgdGhhdCBhIHNoYWRlciBvcGVyYXRpb24gaGFzIGJlZW4K KyAqIGNvbW1pdHRlZCB0byBoYXJkd2FyZSBmcm9tIGEgdXNlci1zdXBwbGllZCBjb21tYW5kIHN0 cmVhbS4KKyAqCisgKiBAcmVzOiBQb2ludGVyIHRvIHRoZSBzaGFkZXIgcmVzb3VyY2UuCisgKiBA c3RhdGU6IEluZGljYXRpbmcgd2hldGhlciBhIGNyZWF0aW9uIG9yIHJlbW92YWwgaGFzIGJlZW4g Y29tbWl0dGVkLgorICoKKyAqLworc3RhdGljIHZvaWQgdm13X2R4X3NoYWRlcl9jb21taXRfbm90 aWZ5KHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKKwkJCQkJZW51bSB2bXdfY21kYnVmX3Jlc19z dGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgdm13X2R4X3NoYWRlciAqc2hhZGVyID0gdm13X3Jlc190 b19keF9zaGFkZXIocmVzKTsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5k ZXZfcHJpdjsKKworCWlmIChzdGF0ZSA9PSBWTVdfQ01EQlVGX1JFU19BREQpIHsKKwkJbXV0ZXhf bG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCQl2bXdfY290YWJsZV9hZGRfcmVzb3Vy Y2Uoc2hhZGVyLT5jb3RhYmxlLAorCQkJCQkgJnNoYWRlci0+Y290YWJsZV9oZWFkKTsKKwkJc2hh ZGVyLT5jb21taXR0ZWQgPSB0cnVlOworCQlyZXMtPmlkID0gc2hhZGVyLT5pZDsKKwkJbXV0ZXhf dW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9j aygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCQlsaXN0X2RlbF9pbml0KCZzaGFkZXItPmNv dGFibGVfaGVhZCk7CisJCXNoYWRlci0+Y29tbWl0dGVkID0gZmFsc2U7CisJCXJlcy0+aWQgPSAt MTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7CisJfQorfQorCisv KioKKyAqIHZtd19keF9zaGFkZXJfdW5zY3J1YiAtIEhhdmUgdGhlIGRldmljZSByZWF0dGFjaCBh IE1PQiB0byBhIERYIHNoYWRlci4KKyAqCisgKiBAcmVzOiBUaGUgc2hhZGVyIHJlc291cmNlCisg KgorICogVGhpcyBmdW5jdGlvbiByZXZlcnRzIGEgc2NydWIgb3BlcmF0aW9uLgorICovCitzdGF0 aWMgaW50IHZtd19keF9zaGFkZXJfdW5zY3J1YihzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7 CisJc3RydWN0IHZtd19keF9zaGFkZXIgKnNoYWRlciA9IHZtd19yZXNfdG9fZHhfc2hhZGVyKHJl cyk7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CisJc3Ry dWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRFhCaW5kU2hhZGVy IGJvZHk7CisJfSAqY21kOworCisJaWYgKCFsaXN0X2VtcHR5KCZzaGFkZXItPmNvdGFibGVfaGVh ZCkgfHwgIXNoYWRlci0+Y29tbWl0dGVkKQorCQlyZXR1cm4gMDsKKworCWNtZCA9IHZtd19maWZv X3Jlc2VydmVfZHgoZGV2X3ByaXYsIHNpemVvZigqY21kKSwKKwkJCQkgIHNoYWRlci0+Y3R4LT5p ZCk7CisJaWYgKHVubGlrZWx5KGNtZCA9PSBOVUxMKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCBy ZXNlcnZpbmcgRklGTyBzcGFjZSBmb3Igc2hhZGVyICIKKwkJCSAgInNjcnViYmluZy5cbiIpOwor CQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbWQtPmhlYWRlci5pZCA9IFNWR0FfM0RfQ01EX0RY X0JJTkRfU0hBREVSOworCWNtZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kLT5ib2R5KTsKKwlj bWQtPmJvZHkuY2lkID0gc2hhZGVyLT5jdHgtPmlkOworCWNtZC0+Ym9keS5zaGlkID0gc2hhZGVy LT5pZDsKKwljbWQtPmJvZHkubW9iaWQgPSByZXMtPmJhY2t1cC0+YmFzZS5tZW0uc3RhcnQ7CisJ Y21kLT5ib2R5Lm9mZnNldEluQnl0ZXMgPSByZXMtPmJhY2t1cF9vZmZzZXQ7CisJdm13X2ZpZm9f Y29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCisJdm13X2NvdGFibGVfYWRkX3Jlc291 cmNlKHNoYWRlci0+Y290YWJsZSwgJnNoYWRlci0+Y290YWJsZV9oZWFkKTsKKworCXJldHVybiAw OworfQorCisvKioKKyAqIHZtd19keF9zaGFkZXJfY3JlYXRlIC0gVGhlIERYIHNoYWRlciBjcmVh dGUgY2FsbGJhY2sKKyAqCisgKiBAcmVzOiBUaGUgRFggc2hhZGVyIHJlc291cmNlCisgKgorICog VGhlIGNyZWF0ZSBjYWxsYmFjayBpcyBjYWxsZWQgYXMgcGFydCBvZiByZXNvdXJjZSB2YWxpZGF0 aW9uIGFuZAorICogbWFrZXMgc3VyZSB0aGF0IHdlIHVuc2NydWIgdGhlIHNoYWRlciBpZiBpdCdz IHByZXZpb3VzbHkgYmVlbiBzY3J1YmJlZC4KKyAqLworc3RhdGljIGludCB2bXdfZHhfc2hhZGVy X2NyZWF0ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7CisJc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CisJc3RydWN0IHZtd19keF9zaGFkZXIgKnNoYWRl ciA9IHZtd19yZXNfdG9fZHhfc2hhZGVyKHJlcyk7CisJaW50IHJldCA9IDA7CisKKwlXQVJOX09O X09OQ0UoIXNoYWRlci0+Y29tbWl0dGVkKTsKKworCWlmICghbGlzdF9lbXB0eSgmcmVzLT5tb2Jf aGVhZCkpIHsKKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCQlyZXQg PSB2bXdfZHhfc2hhZGVyX3Vuc2NydWIocmVzKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ YmluZGluZ19tdXRleCk7CisJfQorCisJcmVzLT5pZCA9IHNoYWRlci0+aWQ7CisJcmV0dXJuIHJl dDsKK30KKworLyoqCisgKiB2bXdfZHhfc2hhZGVyX2JpbmQgLSBUaGUgRFggc2hhZGVyIGJpbmQg Y2FsbGJhY2sKKyAqCisgKiBAcmVzOiBUaGUgRFggc2hhZGVyIHJlc291cmNlCisgKiBAdmFsX2J1 ZjogUG9pbnRlciB0byB0aGUgdmFsaWRhdGUgYnVmZmVyLgorICoKKyAqLworc3RhdGljIGludCB2 bXdfZHhfc2hhZGVyX2JpbmQoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAorCQkJICAgICAgc3Ry dWN0IHR0bV92YWxpZGF0ZV9idWZmZXIgKnZhbF9idWYpCit7CisJc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpi byA9IHZhbF9idWYtPmJvOworCisJQlVHX09OKGJvLT5tZW0ubWVtX3R5cGUgIT0gVk1XX1BMX01P Qik7CisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCXZtd19keF9zaGFk ZXJfdW5zY3J1YihyZXMpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgp OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdm13X2R4X3NoYWRlcl9zY3J1YiAtIEhhdmUg dGhlIGRldmljZSB1bmJpbmQgYSBNT0IgZnJvbSBhIERYIHNoYWRlci4KKyAqCisgKiBAcmVzOiBU aGUgc2hhZGVyIHJlc291cmNlCisgKgorICogVGhpcyBmdW5jdGlvbiB1bmJpbmRzIGEgTU9CIGZy b20gdGhlIERYIHNoYWRlciB3aXRob3V0IHJlcXVpcmluZyB0aGUKKyAqIE1PQiBkbWFfYnVmZmVy IHRvIGJlIHJlc2VydmVkLiBUaGUgZHJpdmVyIHN0aWxsIGNvbnNpZGVycyB0aGUgTU9CIGJvdW5k LgorICogSG93ZXZlciwgb25jZSB0aGUgZHJpdmVyIGV2ZW50dWFsbHkgZGVjaWRlcyB0byB1bmJp bmQgdGhlIE1PQiwgaXQgZG9lc24ndAorICogbmVlZCB0byBhY2Nlc3MgdGhlIGNvbnRleHQuCisg Ki8KK3N0YXRpYyBpbnQgdm13X2R4X3NoYWRlcl9zY3J1YihzdHJ1Y3Qgdm13X3Jlc291cmNlICpy ZXMpCit7CisJc3RydWN0IHZtd19keF9zaGFkZXIgKnNoYWRlciA9IHZtd19yZXNfdG9fZHhfc2hh ZGVyKHJlcyk7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7 CisJc3RydWN0IHsKKwkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKKwkJU1ZHQTNkQ21kRFhCaW5k U2hhZGVyIGJvZHk7CisJfSAqY21kOworCisJaWYgKGxpc3RfZW1wdHkoJnNoYWRlci0+Y290YWJs ZV9oZWFkKSkKKwkJcmV0dXJuIDA7CisKKwlXQVJOX09OX09OQ0UoIXNoYWRlci0+Y29tbWl0dGVk KTsKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlKGRldl9wcml2LCBzaXplb2YoKmNtZCkpOworCWlm ICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgcmVzZXJ2aW5n IEZJRk8gc3BhY2UgZm9yIHNoYWRlciAiCisJCQkgICJzY3J1YmJpbmcuXG4iKTsKKwkJcmV0dXJu IC1FTk9NRU07CisJfQorCisJY21kLT5oZWFkZXIuaWQgPSBTVkdBXzNEX0NNRF9EWF9CSU5EX1NI QURFUjsKKwljbWQtPmhlYWRlci5zaXplID0gc2l6ZW9mKGNtZC0+Ym9keSk7CisJY21kLT5ib2R5 LmNpZCA9IHNoYWRlci0+Y3R4LT5pZDsKKwljbWQtPmJvZHkuc2hpZCA9IHJlcy0+aWQ7CisJY21k LT5ib2R5Lm1vYmlkID0gU1ZHQTNEX0lOVkFMSURfSUQ7CisJY21kLT5ib2R5Lm9mZnNldEluQnl0 ZXMgPSAwOworCXZtd19maWZvX2NvbW1pdChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKKwlyZXMt PmlkID0gLTE7CisJbGlzdF9kZWxfaW5pdCgmc2hhZGVyLT5jb3RhYmxlX2hlYWQpOworCisJcmV0 dXJuIDA7Cit9CisKKy8qKgorICogdm13X2R4X3NoYWRlcl91bmJpbmQgLSBUaGUgZHggc2hhZGVy IHVuYmluZCBjYWxsYmFjay4KKyAqCisgKiBAcmVzOiBUaGUgc2hhZGVyIHJlc291cmNlCisgKiBA cmVhZGJhY2s6IFdoZXRoZXIgdGhpcyBpcyBhIHJlYWRiYWNrIHVuYmluZC4gQ3VycmVudGx5IHVu dXNlZC4KKyAqIEB2YWxfYnVmOiBNT0IgYnVmZmVyIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMg aW50IHZtd19keF9zaGFkZXJfdW5iaW5kKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcywKKwkJCQli b29sIHJlYWRiYWNrLAorCQkJCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YWxfYnVmKQor eworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXMtPmRldl9wcml2OworCXN0cnVj dCB2bXdfZmVuY2Vfb2JqICpmZW5jZTsKKwlpbnQgcmV0OworCisJQlVHX09OKHJlcy0+YmFja3Vw LT5iYXNlLm1lbS5tZW1fdHlwZSAhPSBWTVdfUExfTU9CKTsKKworCW11dGV4X2xvY2soJmRldl9w cml2LT5iaW5kaW5nX211dGV4KTsKKwlyZXQgPSB2bXdfZHhfc2hhZGVyX3NjcnViKHJlcyk7CisJ bXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7CisKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJKHZvaWQpIHZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRzKE5VTEwsIGRl dl9wcml2LAorCQkJCQkgICZmZW5jZSwgTlVMTCk7CisJdm13X2ZlbmNlX3NpbmdsZV9ibyh2YWxf YnVmLT5ibywgZmVuY2UpOworCisJaWYgKGxpa2VseShmZW5jZSAhPSBOVUxMKSkKKwkJdm13X2Zl bmNlX29ial91bnJlZmVyZW5jZSgmZmVuY2UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICog dm13X2R4X3NoYWRlcl9jb3RhYmxlX2xpc3Rfc2NydWIgLSBUaGUgY290YWJsZSB1bmJpbmRfZnVu YyBjYWxsYmFjayBmb3IKKyAqIERYIHNoYWRlcnMuCisgKgorICogQGRldl9wcml2OiBQb2ludGVy IHRvIGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqIEBsaXN0OiBUaGUgbGlzdCBvZiBjb3Rh YmxlIHJlc291cmNlcy4KKyAqIEByZWFkYmFjazogV2hldGhlciB0aGUgY2FsbCB3YXMgcGFydCBv ZiBhIHJlYWRiYWNrIHVuYmluZC4KKyAqCisgKiBTY3J1YnMgYWxsIHNoYWRlciBNT0JzIHNvIHRo YXQgYW55IHN1YnNlcXVlbnQgc2hhZGVyIHVuYmluZCBvciBzaGFkZXIKKyAqIGRlc3Ryb3kgb3Bl cmF0aW9uIHdvbid0IG5lZWQgdG8gc3dhcCBpbiB0aGUgY29udGV4dC4KKyAqLwordm9pZCB2bXdf ZHhfc2hhZGVyX2NvdGFibGVfbGlzdF9zY3J1YihzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2 LAorCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJICAgICAgYm9vbCByZWFk YmFjaykKK3sKKwlzdHJ1Y3Qgdm13X2R4X3NoYWRlciAqZW50cnksICpuZXh0OworCisJV0FSTl9P Tl9PTkNFKCFtdXRleF9pc19sb2NrZWQoJmRldl9wcml2LT5iaW5kaW5nX211dGV4KSk7CisKKwls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGxpc3QsIGNvdGFibGVfaGVhZCkg eworCQlXQVJOX09OKHZtd19keF9zaGFkZXJfc2NydWIoJmVudHJ5LT5yZXMpKTsKKwkJaWYgKCFy ZWFkYmFjaykKKwkJCWVudHJ5LT5jb21taXR0ZWQgPSBmYWxzZTsKKwl9Cit9CisKKy8qKgorICog dm13X2R4X3NoYWRlcl9yZXNfZnJlZSAtIFRoZSBEWCBzaGFkZXIgZnJlZSBjYWxsYmFjaworICoK KyAqIEByZXM6IFRoZSBzaGFkZXIgcmVzb3VyY2UKKyAqCisgKiBGcmVlcyB0aGUgRFggc2hhZGVy IHJlc291cmNlIGFuZCB1cGRhdGVzIG1lbW9yeSBhY2NvdW50aW5nLgorICovCitzdGF0aWMgdm9p ZCB2bXdfZHhfc2hhZGVyX3Jlc19mcmVlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKK3sKKwlz dHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5kZXZfcHJpdjsKKwlzdHJ1Y3Qgdm13 X2R4X3NoYWRlciAqc2hhZGVyID0gdm13X3Jlc190b19keF9zaGFkZXIocmVzKTsKKworCXZtd19y ZXNvdXJjZV91bnJlZmVyZW5jZSgmc2hhZGVyLT5jb3RhYmxlKTsKKwlrZnJlZShzaGFkZXIpOwor CXR0bV9tZW1fZ2xvYmFsX2ZyZWUodm13X21lbV9nbG9iKGRldl9wcml2KSwgdm13X3NoYWRlcl9k eF9zaXplKTsKK30KKworLyoqCisgKiB2bXdfZHhfc2hhZGVyX2FkZCAtIEFkZCBhIHNoYWRlciBy ZXNvdXJjZSBhcyBhIGNvbW1hbmQgYnVmZmVyIG1hbmFnZWQKKyAqIHJlc291cmNlLgorICoKKyAq IEBtYW46IFRoZSBjb21tYW5kIGJ1ZmZlciByZXNvdXJjZSBtYW5hZ2VyLgorICogQGN0eDogUG9p bnRlciB0byB0aGUgY29udGV4dCByZXNvdXJjZS4KKyAqIEB1c2VyX2tleTogVGhlIGlkIHVzZWQg Zm9yIHRoaXMgc2hhZGVyLgorICogQHNoYWRlcl90eXBlOiBUaGUgc2hhZGVyIHR5cGUuCisgKiBA bGlzdDogVGhlIGxpc3Qgb2Ygc3RhZ2VkIGNvbW1hbmQgYnVmZmVyIG1hbmFnZWQgcmVzb3VyY2Vz LgorICovCitpbnQgdm13X2R4X3NoYWRlcl9hZGQoc3RydWN0IHZtd19jbWRidWZfcmVzX21hbmFn ZXIgKm1hbiwKKwkJICAgICAgc3RydWN0IHZtd19yZXNvdXJjZSAqY3R4LAorCQkgICAgICB1MzIg dXNlcl9rZXksCisJCSAgICAgIFNWR0EzZFNoYWRlclR5cGUgc2hhZGVyX3R5cGUsCisJCSAgICAg IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IHZtd19keF9zaGFkZXIgKnNoYWRl cjsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CisJc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiA9IGN0eC0+ZGV2X3ByaXY7CisJaW50IHJldDsKKworCWlmICghdm13X3NoYWRlcl9keF9z aXplKQorCQl2bXdfc2hhZGVyX2R4X3NpemUgPSB0dG1fcm91bmRfcG90KHNpemVvZigqc2hhZGVy KSk7CisKKwlpZiAoIXZtd19zaGFkZXJfaWRfb2sodXNlcl9rZXksIHNoYWRlcl90eXBlKSkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSB0dG1fbWVtX2dsb2JhbF9hbGxvYyh2bXdfbWVtX2ds b2IoZGV2X3ByaXYpLCB2bXdfc2hhZGVyX2R4X3NpemUsCisJCQkJICAgZmFsc2UsIHRydWUpOwor CWlmIChyZXQpIHsKKwkJaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCQlEUk1fRVJST1IoIk91 dCBvZiBncmFwaGljcyBtZW1vcnkgZm9yIHNoYWRlciAiCisJCQkJICAiY3JlYXRpb24uXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlzaGFkZXIgPSBrbWFsbG9jKHNpemVvZigqc2hhZGVyKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFzaGFkZXIpIHsKKwkJdHRtX21lbV9nbG9iYWxfZnJlZSh2bXdf bWVtX2dsb2IoZGV2X3ByaXYpLCB2bXdfc2hhZGVyX2R4X3NpemUpOworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwlyZXMgPSAmc2hhZGVyLT5yZXM7CisJc2hhZGVyLT5jdHggPSBjdHg7CisJc2hh ZGVyLT5jb3RhYmxlID0gdm13X2NvbnRleHRfY290YWJsZShjdHgsIFNWR0FfQ09UQUJMRV9EWFNI QURFUik7CisJc2hhZGVyLT5pZCA9IHVzZXJfa2V5OworCXNoYWRlci0+Y29tbWl0dGVkID0gZmFs c2U7CisJSU5JVF9MSVNUX0hFQUQoJnNoYWRlci0+Y290YWJsZV9oZWFkKTsKKwlyZXQgPSB2bXdf cmVzb3VyY2VfaW5pdChkZXZfcHJpdiwgcmVzLCB0cnVlLAorCQkJCXZtd19keF9zaGFkZXJfcmVz X2ZyZWUsICZ2bXdfZHhfc2hhZGVyX2Z1bmMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3Jlc291 cmNlX2luaXQ7CisKKwkvKgorCSAqIFRoZSB1c2VyX2tleSBuYW1lLXNwYWNlIGlzIG5vdCBwZXIg c2hhZGVyIHR5cGUgZm9yIERYIHNoYWRlcnMsCisJICogc28gd2hlbiBoYXNoaW5nLCB1c2UgYSBz aW5nbGUgemVybyBzaGFkZXIgdHlwZS4KKwkgKi8KKwlyZXQgPSB2bXdfY21kYnVmX3Jlc19hZGQo bWFuLCB2bXdfY21kYnVmX3Jlc19zaGFkZXIsCisJCQkJIHZtd19zaGFkZXJfa2V5KHVzZXJfa2V5 LCAwKSwKKwkJCQkgcmVzLCBsaXN0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZXNvdXJjZV9p bml0OworCisJcmVzLT5pZCA9IHNoYWRlci0+aWQ7CisJdm13X3Jlc291cmNlX2FjdGl2YXRlKHJl cywgdm13X2h3X3NoYWRlcl9kZXN0cm95KTsKKworb3V0X3Jlc291cmNlX2luaXQ6CisJdm13X3Jl c291cmNlX3VucmVmZXJlbmNlKCZyZXMpOworCisJcmV0dXJuIHJldDsKK30KKworCisKIC8qKgog ICogVXNlci1zcGFjZSBzaGFkZXIgbWFuYWdlbWVudDoKICAqLwpAQCAtMzQxLDYgKzcyMiw4IEBA IHN0YXRpYyBpbnQgdm13X3VzZXJfc2hhZGVyX2FsbG9jKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2 X3ByaXYsCiAJCQkJIHNpemVfdCBzaGFkZXJfc2l6ZSwKIAkJCQkgc2l6ZV90IG9mZnNldCwKIAkJ CQkgU1ZHQTNkU2hhZGVyVHlwZSBzaGFkZXJfdHlwZSwKKwkJCQkgdWludDhfdCBudW1faW5wdXRf c2lnLAorCQkJCSB1aW50OF90IG51bV9vdXRwdXRfc2lnLAogCQkJCSBzdHJ1Y3QgdHRtX29iamVj dF9maWxlICp0ZmlsZSwKIAkJCQkgdTMyICpoYW5kbGUpCiB7CkBAIC0zODMsNyArNzY2LDggQEAg c3RhdGljIGludCB2bXdfdXNlcl9zaGFkZXJfYWxsb2Moc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiwKIAkgKi8KIAogCXJldCA9IHZtd19nYl9zaGFkZXJfaW5pdChkZXZfcHJpdiwgcmVzLCBz aGFkZXJfc2l6ZSwKLQkJCQkgb2Zmc2V0LCBzaGFkZXJfdHlwZSwgYnVmZmVyLAorCQkJCSBvZmZz ZXQsIHNoYWRlcl90eXBlLCBudW1faW5wdXRfc2lnLAorCQkJCSBudW1fb3V0cHV0X3NpZywgYnVm ZmVyLAogCQkJCSB2bXdfdXNlcl9zaGFkZXJfZnJlZSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAw KSkKIAkJZ290byBvdXQ7CkBAIC00NDksNyArODMzLDcgQEAgc3RhdGljIHN0cnVjdCB2bXdfcmVz b3VyY2UgKnZtd19zaGFkZXJfYWxsb2Moc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkg KiBGcm9tIGhlcmUgb24sIHRoZSBkZXN0cnVjdG9yIHRha2VzIG92ZXIgcmVzb3VyY2UgZnJlZWlu Zy4KIAkgKi8KIAlyZXQgPSB2bXdfZ2Jfc2hhZGVyX2luaXQoZGV2X3ByaXYsIHJlcywgc2hhZGVy X3NpemUsCi0JCQkJIG9mZnNldCwgc2hhZGVyX3R5cGUsIGJ1ZmZlciwKKwkJCQkgb2Zmc2V0LCBz aGFkZXJfdHlwZSwgMCwgMCwgYnVmZmVyLAogCQkJCSB2bXdfc2hhZGVyX2ZyZWUpOwogCiBvdXRf ZXJyOgpAQCAtNDU3LDE5ICs4NDEsMjAgQEAgb3V0X2VycjoKIH0KIAogCi1pbnQgdm13X3NoYWRl cl9kZWZpbmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKLQkJCSAg ICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitzdGF0aWMgaW50IHZtd19zaGFkZXJfZGVm aW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAor CQkJICAgICBlbnVtIGRybV92bXdfc2hhZGVyX3R5cGUgc2hhZGVyX3R5cGVfZHJtLAorCQkJICAg ICB1MzIgYnVmZmVyX2hhbmRsZSwgc2l6ZV90IHNpemUsIHNpemVfdCBvZmZzZXQsCisJCQkgICAg IHVpbnQ4X3QgbnVtX2lucHV0X3NpZywgdWludDhfdCBudW1fb3V0cHV0X3NpZywKKwkJCSAgICAg dWludDMyX3QgKnNoYWRlcl9oYW5kbGUpCiB7CiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJp diA9IHZtd19wcml2KGRldik7Ci0Jc3RydWN0IGRybV92bXdfc2hhZGVyX2NyZWF0ZV9hcmcgKmFy ZyA9Ci0JCShzdHJ1Y3QgZHJtX3Ztd19zaGFkZXJfY3JlYXRlX2FyZyAqKWRhdGE7CiAJc3RydWN0 IHR0bV9vYmplY3RfZmlsZSAqdGZpbGUgPSB2bXdfZnByaXYoZmlsZV9wcml2KS0+dGZpbGU7CiAJ c3RydWN0IHZtd19kbWFfYnVmZmVyICpidWZmZXIgPSBOVUxMOwogCVNWR0EzZFNoYWRlclR5cGUg c2hhZGVyX3R5cGU7CiAJaW50IHJldDsKIAotCWlmIChhcmctPmJ1ZmZlcl9oYW5kbGUgIT0gU1ZH QTNEX0lOVkFMSURfSUQpIHsKLQkJcmV0ID0gdm13X3VzZXJfZG1hYnVmX2xvb2t1cCh0ZmlsZSwg YXJnLT5idWZmZXJfaGFuZGxlLAorCWlmIChidWZmZXJfaGFuZGxlICE9IFNWR0EzRF9JTlZBTElE X0lEKSB7CisJCXJldCA9IHZtd191c2VyX2RtYWJ1Zl9sb29rdXAodGZpbGUsIGJ1ZmZlcl9oYW5k bGUsCiAJCQkJCSAgICAgJmJ1ZmZlcik7CiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKIAkJ CURSTV9FUlJPUigiQ291bGQgbm90IGZpbmQgYnVmZmVyIGZvciBzaGFkZXIgIgpAQCAtNDc4LDIz ICs4NjMsMjAgQEAgaW50IHZtd19zaGFkZXJfZGVmaW5lX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCiAJCX0KIAogCQlpZiAoKHU2NClidWZmZXItPmJhc2UubnVtX3Bh Z2VzICogUEFHRV9TSVpFIDwKLQkJICAgICh1NjQpYXJnLT5zaXplICsgKHU2NClhcmctPm9mZnNl dCkgeworCQkgICAgKHU2NClzaXplICsgKHU2NClvZmZzZXQpIHsKIAkJCURSTV9FUlJPUigiSWxs ZWdhbCBidWZmZXItIG9yIHNoYWRlciBzaXplLlxuIik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJ Z290byBvdXRfYmFkX2FyZzsKIAkJfQogCX0KIAotCXN3aXRjaCAoYXJnLT5zaGFkZXJfdHlwZSkg eworCXN3aXRjaCAoc2hhZGVyX3R5cGVfZHJtKSB7CiAJY2FzZSBkcm1fdm13X3NoYWRlcl90eXBl X3ZzOgogCQlzaGFkZXJfdHlwZSA9IFNWR0EzRF9TSEFERVJUWVBFX1ZTOwogCQlicmVhazsKIAlj YXNlIGRybV92bXdfc2hhZGVyX3R5cGVfcHM6CiAJCXNoYWRlcl90eXBlID0gU1ZHQTNEX1NIQURF UlRZUEVfUFM7CiAJCWJyZWFrOwotCWNhc2UgZHJtX3Ztd19zaGFkZXJfdHlwZV9nczoKLQkJc2hh ZGVyX3R5cGUgPSBTVkdBM0RfU0hBREVSVFlQRV9HUzsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJ RFJNX0VSUk9SKCJJbGxlZ2FsIHNoYWRlciB0eXBlLlxuIik7CiAJCXJldCA9IC1FSU5WQUw7CkBA IC01MDUsOCArODg3LDkgQEAgaW50IHZtd19zaGFkZXJfZGVmaW5lX2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJZ290 byBvdXRfYmFkX2FyZzsKIAotCXJldCA9IHZtd191c2VyX3NoYWRlcl9hbGxvYyhkZXZfcHJpdiwg YnVmZmVyLCBhcmctPnNpemUsIGFyZy0+b2Zmc2V0LAotCQkJCSAgICBzaGFkZXJfdHlwZSwgdGZp bGUsICZhcmctPnNoYWRlcl9oYW5kbGUpOworCXJldCA9IHZtd191c2VyX3NoYWRlcl9hbGxvYyhk ZXZfcHJpdiwgYnVmZmVyLCBzaXplLCBvZmZzZXQsCisJCQkJICAgIHNoYWRlcl90eXBlLCBudW1f aW5wdXRfc2lnLAorCQkJCSAgICBudW1fb3V0cHV0X3NpZywgdGZpbGUsIHNoYWRlcl9oYW5kbGUp OwogCiAJdHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKIG91dF9i YWRfYXJnOgpAQCAtNTE1LDcgKzg5OCw3IEBAIG91dF9iYWRfYXJnOgogfQogCiAvKioKLSAqIHZt d19jb21wYXRfc2hhZGVyX2lkX29rIC0gQ2hlY2sgd2hldGhlciBhIGNvbXBhdCBzaGFkZXIgdXNl ciBrZXkgYW5kCisgKiB2bXdfc2hhZGVyX2lkX29rIC0gQ2hlY2sgd2hldGhlciBhIGNvbXBhdCBz aGFkZXIgdXNlciBrZXkgYW5kCiAgKiBzaGFkZXIgdHlwZSBhcmUgd2l0aGluIHZhbGlkIGJvdW5k cy4KICAqCiAgKiBAdXNlcl9rZXk6IFVzZXIgc3BhY2UgaWQgb2YgdGhlIHNoYWRlci4KQEAgLTUy MywxMyArOTA2LDEzIEBAIG91dF9iYWRfYXJnOgogICoKICAqIFJldHVybnMgdHJ1ZSBpZiB2YWxp ZCBmYWxzZSBpZiBub3QuCiAgKi8KLXN0YXRpYyBib29sIHZtd19jb21wYXRfc2hhZGVyX2lkX29r KHUzMiB1c2VyX2tleSwgU1ZHQTNkU2hhZGVyVHlwZSBzaGFkZXJfdHlwZSkKK3N0YXRpYyBib29s IHZtd19zaGFkZXJfaWRfb2sodTMyIHVzZXJfa2V5LCBTVkdBM2RTaGFkZXJUeXBlIHNoYWRlcl90 eXBlKQogewogCXJldHVybiB1c2VyX2tleSA8PSAoKDEgPDwgMjApIC0gMSkgJiYgKHVuc2lnbmVk KSBzaGFkZXJfdHlwZSA8IDE2OwogfQogCiAvKioKLSAqIHZtd19jb21wYXRfc2hhZGVyX2tleSAt IENvbXB1dGUgYSBoYXNoIGtleSBzdWl0YWJsZSBmb3IgYSBjb21wYXQgc2hhZGVyLgorICogdm13 X3NoYWRlcl9rZXkgLSBDb21wdXRlIGEgaGFzaCBrZXkgc3VpdGFibGUgZm9yIGEgY29tcGF0IHNo YWRlci4KICAqCiAgKiBAdXNlcl9rZXk6IFVzZXIgc3BhY2UgaWQgb2YgdGhlIHNoYWRlci4KICAq IEBzaGFkZXJfdHlwZTogU2hhZGVyIHR5cGUuCkBAIC01MzcsMTMgKzkyMCwxMyBAQCBzdGF0aWMg Ym9vbCB2bXdfY29tcGF0X3NoYWRlcl9pZF9vayh1MzIgdXNlcl9rZXksIFNWR0EzZFNoYWRlclR5 cGUgc2hhZGVyX3R5cGUpCiAgKiBSZXR1cm5zIGEgaGFzaCBrZXkgc3VpdGFibGUgZm9yIGEgY29t bWFuZCBidWZmZXIgbWFuYWdlZCByZXNvdXJjZQogICogbWFuYWdlciBoYXNoIHRhYmxlLgogICov Ci1zdGF0aWMgdTMyIHZtd19jb21wYXRfc2hhZGVyX2tleSh1MzIgdXNlcl9rZXksIFNWR0EzZFNo YWRlclR5cGUgc2hhZGVyX3R5cGUpCitzdGF0aWMgdTMyIHZtd19zaGFkZXJfa2V5KHUzMiB1c2Vy X2tleSwgU1ZHQTNkU2hhZGVyVHlwZSBzaGFkZXJfdHlwZSkKIHsKIAlyZXR1cm4gdXNlcl9rZXkg fCAoc2hhZGVyX3R5cGUgPDwgMjApOwogfQogCiAvKioKLSAqIHZtd19jb21wYXRfc2hhZGVyX3Jl bW92ZSAtIFN0YWdlIGEgY29tcGF0IHNoYWRlciBmb3IgcmVtb3ZhbC4KKyAqIHZtd19zaGFkZXJf cmVtb3ZlIC0gU3RhZ2UgYSBjb21wYXQgc2hhZGVyIGZvciByZW1vdmFsLgogICoKICAqIEBtYW46 IFBvaW50ZXIgdG8gdGhlIGNvbXBhdCBzaGFkZXIgbWFuYWdlciBpZGVudGlmeWluZyB0aGUgc2hh ZGVyIG5hbWVzcGFjZS4KICAqIEB1c2VyX2tleTogVGhlIGtleSB0aGF0IGlzIHVzZWQgdG8gaWRl bnRpZnkgdGhlIHNoYWRlci4gVGhlIGtleSBpcwpAQCAtNTUxLDE3ICs5MzQsMTggQEAgc3RhdGlj IHUzMiB2bXdfY29tcGF0X3NoYWRlcl9rZXkodTMyIHVzZXJfa2V5LCBTVkdBM2RTaGFkZXJUeXBl IHNoYWRlcl90eXBlKQogICogQHNoYWRlcl90eXBlOiBTaGFkZXIgdHlwZS4KICAqIEBsaXN0OiBD YWxsZXIncyBsaXN0IG9mIHN0YWdlZCBjb21tYW5kIGJ1ZmZlciByZXNvdXJjZSBhY3Rpb25zLgog ICovCi1pbnQgdm13X2NvbXBhdF9zaGFkZXJfcmVtb3ZlKHN0cnVjdCB2bXdfY21kYnVmX3Jlc19t YW5hZ2VyICptYW4sCi0JCQkgICAgIHUzMiB1c2VyX2tleSwgU1ZHQTNkU2hhZGVyVHlwZSBzaGFk ZXJfdHlwZSwKLQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK2ludCB2bXdfc2hhZGVy X3JlbW92ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAorCQkgICAgICB1MzIg dXNlcl9rZXksIFNWR0EzZFNoYWRlclR5cGUgc2hhZGVyX3R5cGUsCisJCSAgICAgIHN0cnVjdCBs aXN0X2hlYWQgKmxpc3QpCiB7Ci0JaWYgKCF2bXdfY29tcGF0X3NoYWRlcl9pZF9vayh1c2VyX2tl eSwgc2hhZGVyX3R5cGUpKQorCXN0cnVjdCB2bXdfcmVzb3VyY2UgKmR1bW15OworCisJaWYgKCF2 bXdfc2hhZGVyX2lkX29rKHVzZXJfa2V5LCBzaGFkZXJfdHlwZSkpCiAJCXJldHVybiAtRUlOVkFM OwogCi0JcmV0dXJuIHZtd19jbWRidWZfcmVzX3JlbW92ZShtYW4sIHZtd19jbWRidWZfcmVzX2Nv bXBhdF9zaGFkZXIsCi0JCQkJICAgICB2bXdfY29tcGF0X3NoYWRlcl9rZXkodXNlcl9rZXksCi0J CQkJCQkJICAgc2hhZGVyX3R5cGUpLAotCQkJCSAgICAgbGlzdCk7CisJcmV0dXJuIHZtd19jbWRi dWZfcmVzX3JlbW92ZShtYW4sIHZtd19jbWRidWZfcmVzX3NoYWRlciwKKwkJCQkgICAgIHZtd19z aGFkZXJfa2V5KHVzZXJfa2V5LCBzaGFkZXJfdHlwZSksCisJCQkJICAgICBsaXN0LCAmZHVtbXkp OwogfQogCiAvKioKQEAgLTU5MSw3ICs5NzUsNyBAQCBpbnQgdm13X2NvbXBhdF9zaGFkZXJfYWRk KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJaW50IHJldDsKIAlzdHJ1Y3Qgdm13X3Jl c291cmNlICpyZXM7CiAKLQlpZiAoIXZtd19jb21wYXRfc2hhZGVyX2lkX29rKHVzZXJfa2V5LCBz aGFkZXJfdHlwZSkpCisJaWYgKCF2bXdfc2hhZGVyX2lkX29rKHVzZXJfa2V5LCBzaGFkZXJfdHlw ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogQWxsb2NhdGUgYW5kIHBpbiBhIERNQSBidWZm ZXIgKi8KQEAgLTYyOCw4ICsxMDEyLDggQEAgaW50IHZtd19jb21wYXRfc2hhZGVyX2FkZChzdHJ1 Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdv dG8gbm9fcmVzZXJ2ZTsKIAotCXJldCA9IHZtd19jbWRidWZfcmVzX2FkZChtYW4sIHZtd19jbWRi dWZfcmVzX2NvbXBhdF9zaGFkZXIsCi0JCQkJIHZtd19jb21wYXRfc2hhZGVyX2tleSh1c2VyX2tl eSwgc2hhZGVyX3R5cGUpLAorCXJldCA9IHZtd19jbWRidWZfcmVzX2FkZChtYW4sIHZtd19jbWRi dWZfcmVzX3NoYWRlciwKKwkJCQkgdm13X3NoYWRlcl9rZXkodXNlcl9rZXksIHNoYWRlcl90eXBl KSwKIAkJCQkgcmVzLCBsaXN0KTsKIAl2bXdfcmVzb3VyY2VfdW5yZWZlcmVuY2UoJnJlcyk7CiBu b19yZXNlcnZlOgpAQCAtNjM5LDcgKzEwMjMsNyBAQCBvdXQ6CiB9CiAKIC8qKgotICogdm13X2Nv bXBhdF9zaGFkZXJfbG9va3VwIC0gTG9vayB1cCBhIGNvbXBhdCBzaGFkZXIKKyAqIHZtd19zaGFk ZXJfbG9va3VwIC0gTG9vayB1cCBhIGNvbXBhdCBzaGFkZXIKICAqCiAgKiBAbWFuOiBQb2ludGVy IHRvIHRoZSBjb21tYW5kIGJ1ZmZlciBtYW5hZ2VkIHJlc291cmNlIG1hbmFnZXIgaWRlbnRpZnlp bmcKICAqIHRoZSBzaGFkZXIgbmFtZXNwYWNlLgpAQCAtNjUwLDE0ICsxMDM0LDI2IEBAIG91dDoK ICAqIGZvdW5kLiBBbiBlcnJvciBwb2ludGVyIG90aGVyd2lzZS4KICAqLwogc3RydWN0IHZtd19y ZXNvdXJjZSAqCi12bXdfY29tcGF0X3NoYWRlcl9sb29rdXAoc3RydWN0IHZtd19jbWRidWZfcmVz X21hbmFnZXIgKm1hbiwKLQkJCSB1MzIgdXNlcl9rZXksCi0JCQkgU1ZHQTNkU2hhZGVyVHlwZSBz aGFkZXJfdHlwZSkKK3Ztd19zaGFkZXJfbG9va3VwKHN0cnVjdCB2bXdfY21kYnVmX3Jlc19tYW5h Z2VyICptYW4sCisJCSAgdTMyIHVzZXJfa2V5LAorCQkgIFNWR0EzZFNoYWRlclR5cGUgc2hhZGVy X3R5cGUpCiB7Ci0JaWYgKCF2bXdfY29tcGF0X3NoYWRlcl9pZF9vayh1c2VyX2tleSwgc2hhZGVy X3R5cGUpKQorCWlmICghdm13X3NoYWRlcl9pZF9vayh1c2VyX2tleSwgc2hhZGVyX3R5cGUpKQog CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCXJldHVybiB2bXdfY21kYnVmX3Jlc19sb29r dXAobWFuLCB2bXdfY21kYnVmX3Jlc19jb21wYXRfc2hhZGVyLAotCQkJCSAgICAgdm13X2NvbXBh dF9zaGFkZXJfa2V5KHVzZXJfa2V5LAotCQkJCQkJCSAgIHNoYWRlcl90eXBlKSk7CisJcmV0dXJu IHZtd19jbWRidWZfcmVzX2xvb2t1cChtYW4sIHZtd19jbWRidWZfcmVzX3NoYWRlciwKKwkJCQkg ICAgIHZtd19zaGFkZXJfa2V5KHVzZXJfa2V5LCBzaGFkZXJfdHlwZSkpOworfQorCitpbnQgdm13 X3NoYWRlcl9kZWZpbmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK KwkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV92bXdf c2hhZGVyX2NyZWF0ZV9hcmcgKmFyZyA9CisJCShzdHJ1Y3QgZHJtX3Ztd19zaGFkZXJfY3JlYXRl X2FyZyAqKWRhdGE7CisKKwlyZXR1cm4gdm13X3NoYWRlcl9kZWZpbmUoZGV2LCBmaWxlX3ByaXYs IGFyZy0+c2hhZGVyX3R5cGUsCisJCQkJIGFyZy0+YnVmZmVyX2hhbmRsZSwKKwkJCQkgYXJnLT5z aXplLCBhcmctPm9mZnNldCwKKwkJCQkgMCwgMCwKKwkJCQkgJmFyZy0+c2hhZGVyX2hhbmRsZSk7 CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zby5jIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc28uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi40ZGZkYzk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zt d2dmeC92bXdnZnhfc28uYwpAQCAtMCwwICsxLDU1NSBAQAorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg KiBDb3B5cmlnaHQgwqkgMjAxNCBWTXdhcmUsIEluYy4sIFBhbG8gQWx0bywgQ0EuLCBVU0EKKyAq IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAq ICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBu ZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlS SUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0Ug T1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworI2luY2x1ZGUgInZtd2dmeF9kcnYuaCIKKyNpbmNsdWRlICJ2bXdnZnhfcmVzb3VyY2Vf cHJpdi5oIgorI2luY2x1ZGUgInZtd2dmeF9zby5oIgorI2luY2x1ZGUgInZtd2dmeF9iaW5kaW5n LmgiCisKKy8qCisgKiBUaGUgY3VycmVudGx5IG9ubHkgcmVhc29uIHdlIG5lZWQgdG8ga2VlcCB0 cmFjayBvZiB2aWV3cyBpcyB0aGF0IGlmIHdlCisgKiBkZXN0cm95IGEgaGFyZHdhcmUgc3VyZmFj ZSwgYWxsIHZpZXdzIHBvaW50aW5nIHRvIGl0IG11c3QgYWxzbyBiZSBkZXN0cm95ZWQsCisgKiBv dGhlcndpc2UgdGhlIGRldmljZSB3aWxsIGVycm9yLgorICogU28gaW4gcGFydGljdWFyIGlmIGEg c3VyZmFjZSBpcyBldmljdGVkLCB3ZSBtdXN0IGRlc3Ryb3kgYWxsIHZpZXdzIHBvaW50aW5nCisg KiB0byBpdCwgYW5kIGFsbCBjb250ZXh0IGJpbmRpbmdzIG9mIHRoYXQgdmlldy4gU2ltaWxhcmx5 IHdlIG11c3QgcmVzdG9yZQorICogdGhlIHZpZXcgYmluZGluZ3MsIHZpZXdzIGFuZCBzdXJmYWNl cyBwb2ludGVkIHRvIGJ5IHRoZSB2aWV3cyB3aGVuIGEKKyAqIGNvbnRleHQgaXMgcmVmZXJlbmNl ZCBpbiB0aGUgY29tbWFuZCBzdHJlYW0uCisgKi8KKworLyoqCisgKiBzdHJ1Y3Qgdm13X3ZpZXcg LSB2aWV3IG1ldGFkYXRhCisgKgorICogQHJlczogVGhlIHN0cnVjdCB2bXdfcmVzb3VyY2Ugd2Ug ZGVyaXZlIGZyb20KKyAqIEBjdHg6IE5vbi1yZWZjb3VudGVkIHBvaW50ZXIgdG8gdGhlIGNvbnRl eHQgdGhpcyB2aWV3IGJlbG9uZ3MgdG8uCisgKiBAc3JmOiBSZWZjb3VudGVkIHBvaW50ZXIgdG8g dGhlIHN1cmZhY2UgcG9pbnRlZCB0byBieSB0aGlzIHZpZXcuCisgKiBAY290YWJsZTogUmVmY291 bnRlZCBwb2ludGVyIHRvIHRoZSBjb3RhYmxlIGhvbGRpbmcgdGhpcyB2aWV3LgorICogQHNyZl9o ZWFkOiBMaXN0IGhlYWQgZm9yIHRoZSBzdXJmYWNlLXRvLXZpZXcgbGlzdC4KKyAqIEBjb3RhYmxl X2hlYWQ6IExpc3QgaGVhZCBmb3IgdGhlIGNvdGFibGUtdG9fdmlldyBsaXN0LgorICogQHZpZXdf dHlwZTogVmlldyB0eXBlLgorICogQHZpZXdfaWQ6IFVzZXItc3BhY2UgcGVyIGNvbnRleHQgdmll dyBpZC4gQ3VycmVudGx5IHVzZWQgYWxzbyBhcyBwZXIKKyAqIGNvbnRleHQgZGV2aWNlIHZpZXcg aWQuCisgKiBAY21kX3NpemU6IFNpemUgb2YgdGhlIFNWR0EzRCBkZWZpbmUgdmlldyBjb21tYW5k IHRoYXQgd2UndmUgY29waWVkIGZyb20gdGhlCisgKiBjb21tYW5kIHN0cmVhbS4KKyAqIEBjb21t aXR0ZWQ6IFdoZXRoZXIgdGhlIHZpZXcgaXMgYWN0dWFsbHkgY3JlYXRlZCBvciBwZW5kaW5nIGNy ZWF0aW9uIGF0IHRoZQorICogZGV2aWNlIGxldmVsLgorICogQGNtZDogVGhlIFNWR0EzRCBkZWZp bmUgdmlldyBjb21tYW5kIGNvcGllZCBmcm9tIHRoZSBjb21tYW5kIHN0cmVhbS4KKyAqLworc3Ry dWN0IHZtd192aWV3IHsKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCXN0cnVjdCB2bXdfcmVzb3Vy Y2UgcmVzOworCXN0cnVjdCB2bXdfcmVzb3VyY2UgKmN0eDsgICAgICAvKiBJbW11dGFibGUgKi8K KwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpzcmY7ICAgICAgLyogSW1tdXRhYmxlICovCisJc3RydWN0 IHZtd19yZXNvdXJjZSAqY290YWJsZTsgIC8qIEltbXV0YWJsZSAqLworCXN0cnVjdCBsaXN0X2hl YWQgc3JmX2hlYWQ7ICAgICAvKiBQcm90ZWN0ZWQgYnkgYmluZGluZ19tdXRleCAqLworCXN0cnVj dCBsaXN0X2hlYWQgY290YWJsZV9oZWFkOyAvKiBQcm90ZWN0ZWQgYnkgYmluZGluZ19tdXRleCAq LworCXVuc2lnbmVkIHZpZXdfdHlwZTsgICAgICAgICAgICAvKiBJbW11dGFibGUgKi8KKwl1bnNp Z25lZCB2aWV3X2lkOyAgICAgICAgICAgICAgLyogSW1tdXRhYmxlICovCisJdTMyIGNtZF9zaXpl OyAgICAgICAgICAgICAgICAgIC8qIEltbXV0YWJsZSAqLworCWJvb2wgY29tbWl0dGVkOyAgICAg ICAgICAgICAgICAvKiBQcm90ZWN0ZWQgYnkgYmluZGluZ19tdXRleCAqLworCXUzMiBjbWRbMV07 ICAgICAgICAgICAgICAgICAgICAvKiBJbW11dGFibGUgKi8KK307CisKK3N0YXRpYyBpbnQgdm13 X3ZpZXdfY3JlYXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcyk7CitzdGF0aWMgaW50IHZtd192 aWV3X2Rlc3Ryb3koc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKK3N0YXRpYyB2b2lkIHZtd19o d192aWV3X2Rlc3Ryb3koc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKK3N0YXRpYyB2b2lkIHZt d192aWV3X2NvbW1pdF9ub3RpZnkoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzLAorCQkJCSAgIGVu dW0gdm13X2NtZGJ1Zl9yZXNfc3RhdGUgc3RhdGUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZt d19yZXNfZnVuYyB2bXdfdmlld19mdW5jID0geworCS5yZXNfdHlwZSA9IHZtd19yZXNfdmlldywK KwkubmVlZHNfYmFja3VwID0gZmFsc2UsCisJLm1heV9ldmljdCA9IGZhbHNlLAorCS50eXBlX25h bWUgPSAiRFggdmlldyIsCisJLmJhY2t1cF9wbGFjZW1lbnQgPSBOVUxMLAorCS5jcmVhdGUgPSB2 bXdfdmlld19jcmVhdGUsCisJLmNvbW1pdF9ub3RpZnkgPSB2bXdfdmlld19jb21taXRfbm90aWZ5 LAorfTsKKworLyoqCisgKiBzdHJ1Y3Qgdm13X3ZpZXcgLSB2aWV3IGRlZmluZSBjb21tYW5kIGJv ZHkgc3R1YgorICoKKyAqIEB2aWV3X2lkOiBUaGUgZGV2aWNlIGlkIG9mIHRoZSB2aWV3IGJlaW5n IGRlZmluZWQKKyAqIEBzaWQ6IFRoZSBzdXJmYWNlIGlkIG9mIHRoZSB2aWV3IGJlaW5nIGRlZmlu ZWQKKyAqCisgKiBUaGlzIGdlbmVyaWMgc3RydWN0IGlzIHVzZWQgYnkgdGhlIGNvZGUgdG8gY2hh bmdlIEB2aWV3X2lkIGFuZCBAc2lkIG9mIGEKKyAqIHNhdmVkIHZpZXcgZGVmaW5lIGNvbW1hbmQu CisgKi8KK3N0cnVjdCB2bXdfdmlld19kZWZpbmUgeworCXVpbnQzMiB2aWV3X2lkOworCXVpbnQz MiBzaWQ7Cit9OworCisvKioKKyAqIHZtd192aWV3IC0gQ29udmVydCBhIHN0cnVjdCB2bXdfcmVz b3VyY2UgdG8gYSBzdHJ1Y3Qgdm13X3ZpZXcKKyAqCisgKiBAcmVzOiBQb2ludGVyIHRvIHRoZSBy ZXNvdXJjZSB0byBjb252ZXJ0LgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIGEgc3RydWN0 IHZtd192aWV3LgorICovCitzdGF0aWMgc3RydWN0IHZtd192aWV3ICp2bXdfdmlldyhzdHJ1Y3Qg dm13X3Jlc291cmNlICpyZXMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihyZXMsIHN0cnVjdCB2 bXdfdmlldywgcmVzKTsKK30KKworLyoqCisgKiB2bXdfdmlld19jb21taXRfbm90aWZ5IC0gTm90 aWZ5IHRoYXQgYSB2aWV3IG9wZXJhdGlvbiBoYXMgYmVlbiBjb21taXR0ZWQgdG8KKyAqIGhhcmR3 YXJlIGZyb20gYSB1c2VyLXN1cHBsaWVkIGNvbW1hbmQgc3RyZWFtLgorICoKKyAqIEByZXM6IFBv aW50ZXIgdG8gdGhlIHZpZXcgcmVzb3VyY2UuCisgKiBAc3RhdGU6IEluZGljYXRpbmcgd2hldGhl ciBhIGNyZWF0aW9uIG9yIHJlbW92YWwgaGFzIGJlZW4gY29tbWl0dGVkLgorICoKKyAqLworc3Rh dGljIHZvaWQgdm13X3ZpZXdfY29tbWl0X25vdGlmeShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMs CisJCQkJICAgZW51bSB2bXdfY21kYnVmX3Jlc19zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgdm13 X3ZpZXcgKnZpZXcgPSB2bXdfdmlldyhyZXMpOworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3By aXYgPSByZXMtPmRldl9wcml2OworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0 ZXgpOworCWlmIChzdGF0ZSA9PSBWTVdfQ01EQlVGX1JFU19BREQpIHsKKwkJc3RydWN0IHZtd19z dXJmYWNlICpzcmYgPSB2bXdfcmVzX3RvX3NyZih2aWV3LT5zcmYpOworCisJCWxpc3RfYWRkX3Rh aWwoJnZpZXctPnNyZl9oZWFkLCAmc3JmLT52aWV3X2xpc3QpOworCQl2bXdfY290YWJsZV9hZGRf cmVzb3VyY2Uodmlldy0+Y290YWJsZSwgJnZpZXctPmNvdGFibGVfaGVhZCk7CisJCXZpZXctPmNv bW1pdHRlZCA9IHRydWU7CisJCXJlcy0+aWQgPSB2aWV3LT52aWV3X2lkOworCisJfSBlbHNlIHsK KwkJbGlzdF9kZWxfaW5pdCgmdmlldy0+Y290YWJsZV9oZWFkKTsKKwkJbGlzdF9kZWxfaW5pdCgm dmlldy0+c3JmX2hlYWQpOworCQl2aWV3LT5jb21taXR0ZWQgPSBmYWxzZTsKKwkJcmVzLT5pZCA9 IC0xOworCX0KKwltdXRleF91bmxvY2soJmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsKK30KKwor LyoqCisgKiB2bXdfdmlld19jcmVhdGUgLSBDcmVhdGUgYSBoYXJkd2FyZSB2aWV3LgorICoKKyAq IEByZXM6IFBvaW50ZXIgdG8gdGhlIHZpZXcgcmVzb3VyY2UuCisgKgorICogQ3JlYXRlIGEgaGFy ZHdhcmUgdmlldy4gVHlwaWNhbGx5IHVzZWQgaWYgdGhhdCB2aWV3IGhhcyBwcmV2aW91c2x5IGJl ZW4KKyAqIGRlc3Ryb3llZCBieSBhbiBldmljdGlvbiBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBp bnQgdm13X3ZpZXdfY3JlYXRlKHN0cnVjdCB2bXdfcmVzb3VyY2UgKnJlcykKK3sKKwlzdHJ1Y3Qg dm13X3ZpZXcgKnZpZXcgPSB2bXdfdmlldyhyZXMpOworCXN0cnVjdCB2bXdfc3VyZmFjZSAqc3Jm ID0gdm13X3Jlc190b19zcmYodmlldy0+c3JmKTsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9w cml2ID0gcmVzLT5kZXZfcHJpdjsKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFkZXIgaGVhZGVy OworCQlzdHJ1Y3Qgdm13X3ZpZXdfZGVmaW5lIGJvZHk7CisJfSAqY21kOworCisJbXV0ZXhfbG9j aygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCWlmICghdmlldy0+Y29tbWl0dGVkKSB7CisJ CW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9 CisKKwljbWQgPSB2bXdfZmlmb19yZXNlcnZlX2R4KHJlcy0+ZGV2X3ByaXYsIHZpZXctPmNtZF9z aXplLAorCQkJCSAgdmlldy0+Y3R4LT5pZCk7CisJaWYgKCFjbWQpIHsKKwkJRFJNX0VSUk9SKCJG YWlsZWQgcmVzZXJ2aW5nIEZJRk8gc3BhY2UgZm9yIHZpZXcgY3JlYXRpb24uXG4iKTsKKwkJbXV0 ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKwltZW1jcHkoY21kLCAmdmlldy0+Y21kLCB2aWV3LT5jbWRfc2l6ZSk7CisJV0FSTl9PTihj bWQtPmJvZHkudmlld19pZCAhPSB2aWV3LT52aWV3X2lkKTsKKwkvKiBTaWQgbWF5IGhhdmUgY2hh bmdlZCBkdWUgdG8gc3VyZmFjZSBldmljdGlvbi4gKi8KKwlXQVJOX09OKHZpZXctPnNyZi0+aWQg PT0gU1ZHQTNEX0lOVkFMSURfSUQpOworCWNtZC0+Ym9keS5zaWQgPSB2aWV3LT5zcmYtPmlkOwor CXZtd19maWZvX2NvbW1pdChyZXMtPmRldl9wcml2LCB2aWV3LT5jbWRfc2l6ZSk7CisJcmVzLT5p ZCA9IHZpZXctPnZpZXdfaWQ7CisJbGlzdF9hZGRfdGFpbCgmdmlldy0+c3JmX2hlYWQsICZzcmYt PnZpZXdfbGlzdCk7CisJdm13X2NvdGFibGVfYWRkX3Jlc291cmNlKHZpZXctPmNvdGFibGUsICZ2 aWV3LT5jb3RhYmxlX2hlYWQpOworCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0 ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdm13X3ZpZXdfZGVzdHJveSAtIERlc3Ry b3kgYSBoYXJkd2FyZSB2aWV3LgorICoKKyAqIEByZXM6IFBvaW50ZXIgdG8gdGhlIHZpZXcgcmVz b3VyY2UuCisgKgorICogRGVzdHJveSBhIGhhcmR3YXJlIHZpZXcuIFR5cGljYWxseSB1c2VkIG9u IHVuZXhwZWN0ZWQgdGVybWluYXRpb24gb2YgdGhlCisgKiBvd25pbmcgcHJvY2VzcyBvciBpZiB0 aGUgc3VyZmFjZSB0aGUgdmlldyBpcyBwb2ludGluZyB0byBpcyBkZXN0cm95ZWQuCisgKi8KK3N0 YXRpYyBpbnQgdm13X3ZpZXdfZGVzdHJveShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCit7CisJ c3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CisJc3RydWN0IHZt d192aWV3ICp2aWV3ID0gdm13X3ZpZXcocmVzKTsKKwlzdHJ1Y3QgeworCQlTVkdBM2RDbWRIZWFk ZXIgaGVhZGVyOworCQl1bmlvbiB2bXdfdmlld19kZXN0cm95IGJvZHk7CisJfSAqY21kOworCisJ V0FSTl9PTl9PTkNFKCFtdXRleF9pc19sb2NrZWQoJmRldl9wcml2LT5iaW5kaW5nX211dGV4KSk7 CisJdm13X2JpbmRpbmdfcmVzX2xpc3Rfc2NydWIoJnJlcy0+YmluZGluZ19oZWFkKTsKKworCWlm ICghdmlldy0+Y29tbWl0dGVkIHx8IHJlcy0+aWQgPT0gLTEpCisJCXJldHVybiAwOworCisJY21k ID0gdm13X2ZpZm9fcmVzZXJ2ZV9keChkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpLCB2aWV3LT5jdHgt PmlkKTsKKwlpZiAoIWNtZCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCByZXNlcnZpbmcgRklGTyBz cGFjZSBmb3IgdmlldyAiCisJCQkgICJkZXN0cnVjdGlvbi5cbiIpOworCQlyZXR1cm4gLUVOT01F TTsKKwl9CisKKwljbWQtPmhlYWRlci5pZCA9IHZtd192aWV3X2Rlc3Ryb3lfY21kc1t2aWV3LT52 aWV3X3R5cGVdOworCWNtZC0+aGVhZGVyLnNpemUgPSBzaXplb2YoY21kLT5ib2R5KTsKKwljbWQt PmJvZHkudmlld19pZCA9IHZpZXctPnZpZXdfaWQ7CisJdm13X2ZpZm9fY29tbWl0KGRldl9wcml2 LCBzaXplb2YoKmNtZCkpOworCXJlcy0+aWQgPSAtMTsKKwlsaXN0X2RlbF9pbml0KCZ2aWV3LT5j b3RhYmxlX2hlYWQpOworCWxpc3RfZGVsX2luaXQoJnZpZXctPnNyZl9oZWFkKTsKKworCXJldHVy biAwOworfQorCisvKioKKyAqIHZtd19od192aWV3X2Rlc3Ryb3kgLSBEZXN0cm95IGEgaGFyZHdh cmUgdmlldyBhcyBwYXJ0IG9mIHJlc291cmNlIGNsZWFudXAuCisgKgorICogQHJlczogUG9pbnRl ciB0byB0aGUgdmlldyByZXNvdXJjZS4KKyAqCisgKiBEZXN0cm95IGEgaGFyZHdhcmUgdmlldyBp ZiBpdCdzIHN0aWxsIHByZXNlbnQuCisgKi8KK3N0YXRpYyB2b2lkIHZtd19od192aWV3X2Rlc3Ry b3koc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2 X3ByaXYgPSByZXMtPmRldl9wcml2OworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmJpbmRpbmdf bXV0ZXgpOworCVdBUk5fT04odm13X3ZpZXdfZGVzdHJveShyZXMpKTsKKwlyZXMtPmlkID0gLTE7 CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+YmluZGluZ19tdXRleCk7Cit9CisKKy8qKgorICog dm13X3ZpZXdfa2V5IC0gQ29tcHV0ZSBhIHZpZXcga2V5IHN1aXRhYmxlIGZvciB0aGUgY21kYnVm IHJlc291cmNlIG1hbmFnZXIKKyAqCisgKiBAdXNlcl9rZXk6IFRoZSB1c2VyLXNwYWNlIGlkIHVz ZWQgZm9yIHRoZSB2aWV3LgorICogQHZpZXdfdHlwZTogVGhlIHZpZXcgdHlwZS4KKyAqCisgKiBE ZXN0cm95IGEgaGFyZHdhcmUgdmlldyBpZiBpdCdzIHN0aWxsIHByZXNlbnQuCisgKi8KK3N0YXRp YyB1MzIgdm13X3ZpZXdfa2V5KHUzMiB1c2VyX2tleSwgZW51bSB2bXdfdmlld190eXBlIHZpZXdf dHlwZSkKK3sKKwlyZXR1cm4gdXNlcl9rZXkgfCAodmlld190eXBlIDw8IDIwKTsKK30KKworLyoq CisgKiB2bXdfdmlld19pZF9vayAtIEJhc2ljIHZpZXcgaWQgYW5kIHR5cGUgcmFuZ2UgY2hlY2tz LgorICoKKyAqIEB1c2VyX2tleTogVGhlIHVzZXItc3BhY2UgaWQgdXNlZCBmb3IgdGhlIHZpZXcu CisgKiBAdmlld190eXBlOiBUaGUgdmlldyB0eXBlLgorICoKKyAqIENoZWNrcyB0aGF0IHRoZSB2 aWV3IGlkIGFuZCB0eXBlICh0eXBpY2FsbHkgcHJvdmlkZWQgYnkgdXNlci1zcGFjZSkgaXMKKyAq IHZhbGlkLgorICovCitzdGF0aWMgYm9vbCB2bXdfdmlld19pZF9vayh1MzIgdXNlcl9rZXksIGVu dW0gdm13X3ZpZXdfdHlwZSB2aWV3X3R5cGUpCit7CisJcmV0dXJuICh1c2VyX2tleSA8IFNWR0Ff Q09UQUJMRV9NQVhfSURTICYmCisJCXZpZXdfdHlwZSA8IHZtd192aWV3X21heCk7Cit9CisKKy8q KgorICogdm13X3ZpZXdfcmVzX2ZyZWUgLSByZXNvdXJjZSByZXNfZnJlZSBjYWxsYmFjayBmb3Ig dmlldyByZXNvdXJjZXMKKyAqCisgKiBAcmVzOiBQb2ludGVyIHRvIGEgc3RydWN0IHZtd19yZXNv dXJjZQorICoKKyAqIEZyZWVzIG1lbW9yeSBhbmQgbWVtb3J5IGFjY291bnRpbmcgaGVsZCBieSBh IHN0cnVjdCB2bXdfdmlldy4KKyAqLworc3RhdGljIHZvaWQgdm13X3ZpZXdfcmVzX2ZyZWUoc3Ry dWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXN0cnVjdCB2bXdfdmlldyAqdmlldyA9IHZtd192 aWV3KHJlcyk7CisJc2l6ZV90IHNpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgdm13X3ZpZXcsIGNtZCkg KyB2aWV3LT5jbWRfc2l6ZTsKKwlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gcmVzLT5k ZXZfcHJpdjsKKworCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmdmlldy0+Y290YWJsZSk7CisJ dm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZ2aWV3LT5zcmYpOworCWtmcmVlX3JjdSh2aWV3LCBy Y3UpOworCXR0bV9tZW1fZ2xvYmFsX2ZyZWUodm13X21lbV9nbG9iKGRldl9wcml2KSwgc2l6ZSk7 Cit9CisKKy8qKgorICogdm13X3ZpZXdfYWRkIC0gQ3JlYXRlIGEgdmlldyByZXNvdXJjZSBhbmQg c3RhZ2UgaXQgZm9yIGFkZGl0aW9uCisgKiBhcyBhIGNvbW1hbmQgYnVmZmVyIG1hbmFnZWQgcmVz b3VyY2UuCisgKgorICogQG1hbjogUG9pbnRlciB0byB0aGUgY29tcGF0IHNoYWRlciBtYW5hZ2Vy IGlkZW50aWZ5aW5nIHRoZSBzaGFkZXIgbmFtZXNwYWNlLgorICogQGN0eDogUG9pbnRlciB0byBh IHN0cnVjdCB2bXdfcmVzb3VyY2UgaWRlbnRpZnlpbmcgdGhlIGFjdGl2ZSBjb250ZXh0LgorICog QHNyZjogUG9pbnRlciB0byBhIHN0cnVjdCB2bXdfcmVzb3VyY2UgaWRlbnRpZnlpbmcgdGhlIHN1 cmZhY2UgdGhlIHZpZXcKKyAqIHBvaW50cyB0by4KKyAqIEB2aWV3X3R5cGU6IFRoZSB2aWV3IHR5 cGUgZGVkdWNlZCBmcm9tIHRoZSB2aWV3IGNyZWF0ZSBjb21tYW5kLgorICogQHVzZXJfa2V5OiBU aGUga2V5IHRoYXQgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgc2hhZGVyLiBUaGUga2V5IGlzCisg KiB1bmlxdWUgdG8gdGhlIHZpZXcgdHlwZSBhbmQgdG8gdGhlIGNvbnRleHQuCisgKiBAY21kOiBQ b2ludGVyIHRvIHRoZSB2aWV3IGNyZWF0ZSBjb21tYW5kIGluIHRoZSBjb21tYW5kIHN0cmVhbS4K KyAqIEBjbWRfc2l6ZTogU2l6ZSBvZiB0aGUgdmlldyBjcmVhdGUgY29tbWFuZCBpbiB0aGUgY29t bWFuZCBzdHJlYW0uCisgKiBAbGlzdDogQ2FsbGVyJ3MgbGlzdCBvZiBzdGFnZWQgY29tbWFuZCBi dWZmZXIgcmVzb3VyY2UgYWN0aW9ucy4KKyAqLworaW50IHZtd192aWV3X2FkZChzdHJ1Y3Qgdm13 X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAorCQkgc3RydWN0IHZtd19yZXNvdXJjZSAqY3R4LAor CQkgc3RydWN0IHZtd19yZXNvdXJjZSAqc3JmLAorCQkgZW51bSB2bXdfdmlld190eXBlIHZpZXdf dHlwZSwKKwkJIHUzMiB1c2VyX2tleSwKKwkJIGNvbnN0IHZvaWQgKmNtZCwKKwkJIHNpemVfdCBj bWRfc2l6ZSwKKwkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RhdGljIGNvbnN0IHNp emVfdCB2bXdfdmlld19kZWZpbmVfc2l6ZXNbXSA9IHsKKwkJW3Ztd192aWV3X3NyXSA9IHNpemVv ZihTVkdBM2RDbWREWERlZmluZVNoYWRlclJlc291cmNlVmlldyksCisJCVt2bXdfdmlld19ydF0g PSBzaXplb2YoU1ZHQTNkQ21kRFhEZWZpbmVSZW5kZXJUYXJnZXRWaWV3KSwKKwkJW3Ztd192aWV3 X2RzXSA9IHNpemVvZihTVkdBM2RDbWREWERlZmluZURlcHRoU3RlbmNpbFZpZXcpCisJfTsKKwor CXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldl9wcml2OworCXN0cnVjdCB2 bXdfcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgdm13X3ZpZXcgKnZpZXc7CisJc2l6ZV90IHNpemU7 CisJaW50IHJldDsKKworCWlmIChjbWRfc2l6ZSAhPSB2bXdfdmlld19kZWZpbmVfc2l6ZXNbdmll d190eXBlXSArCisJICAgIHNpemVvZihTVkdBM2RDbWRIZWFkZXIpKSB7CisJCURSTV9FUlJPUigi SWxsZWdhbCB2aWV3IGNyZWF0ZSBjb21tYW5kIHNpemUuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJaWYgKCF2bXdfdmlld19pZF9vayh1c2VyX2tleSwgdmlld190eXBlKSkgeworCQlE Uk1fRVJST1IoIklsbGVnYWwgdmlldyBhZGQgdmlldyBpZC5cbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlzaXplID0gb2Zmc2V0b2Yoc3RydWN0IHZtd192aWV3LCBjbWQpICsgY21kX3Np emU7CisKKwlyZXQgPSB0dG1fbWVtX2dsb2JhbF9hbGxvYyh2bXdfbWVtX2dsb2IoZGV2X3ByaXYp LCBzaXplLCBmYWxzZSwgdHJ1ZSk7CisJaWYgKHJldCkgeworCQlpZiAocmV0ICE9IC1FUkVTVEFS VFNZUykKKwkJCURSTV9FUlJPUigiT3V0IG9mIGdyYXBoaWNzIG1lbW9yeSBmb3IgdmlldyIKKwkJ CQkgICIgY3JlYXRpb24uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl2aWV3ID0ga21hbGxv YyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZpZXcpIHsKKwkJdHRtX21lbV9nbG9iYWxfZnJl ZSh2bXdfbWVtX2dsb2IoZGV2X3ByaXYpLCBzaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQor CisJcmVzID0gJnZpZXctPnJlczsKKwl2aWV3LT5jdHggPSBjdHg7CisJdmlldy0+c3JmID0gdm13 X3Jlc291cmNlX3JlZmVyZW5jZShzcmYpOworCXZpZXctPmNvdGFibGUgPSB2bXdfY29udGV4dF9j b3RhYmxlKGN0eCwgdm13X3ZpZXdfY290YWJsZXNbdmlld190eXBlXSk7CisJdmlldy0+dmlld190 eXBlID0gdmlld190eXBlOworCXZpZXctPnZpZXdfaWQgPSB1c2VyX2tleTsKKwl2aWV3LT5jbWRf c2l6ZSA9IGNtZF9zaXplOworCXZpZXctPmNvbW1pdHRlZCA9IGZhbHNlOworCUlOSVRfTElTVF9I RUFEKCZ2aWV3LT5zcmZfaGVhZCk7CisJSU5JVF9MSVNUX0hFQUQoJnZpZXctPmNvdGFibGVfaGVh ZCk7CisJbWVtY3B5KCZ2aWV3LT5jbWQsIGNtZCwgY21kX3NpemUpOworCXJldCA9IHZtd19yZXNv dXJjZV9pbml0KGRldl9wcml2LCByZXMsIHRydWUsCisJCQkJdm13X3ZpZXdfcmVzX2ZyZWUsICZ2 bXdfdmlld19mdW5jKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZXNvdXJjZV9pbml0OworCisJ cmV0ID0gdm13X2NtZGJ1Zl9yZXNfYWRkKG1hbiwgdm13X2NtZGJ1Zl9yZXNfdmlldywKKwkJCQkg dm13X3ZpZXdfa2V5KHVzZXJfa2V5LCB2aWV3X3R5cGUpLAorCQkJCSByZXMsIGxpc3QpOworCWlm IChyZXQpCisJCWdvdG8gb3V0X3Jlc291cmNlX2luaXQ7CisKKwlyZXMtPmlkID0gdmlldy0+dmll d19pZDsKKwl2bXdfcmVzb3VyY2VfYWN0aXZhdGUocmVzLCB2bXdfaHdfdmlld19kZXN0cm95KTsK Kworb3V0X3Jlc291cmNlX2luaXQ6CisJdm13X3Jlc291cmNlX3VucmVmZXJlbmNlKCZyZXMpOwor CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB2bXdfdmlld19yZW1vdmUgLSBTdGFnZSBhIHZp ZXcgZm9yIHJlbW92YWwuCisgKgorICogQG1hbjogUG9pbnRlciB0byB0aGUgdmlldyBtYW5hZ2Vy IGlkZW50aWZ5aW5nIHRoZSBzaGFkZXIgbmFtZXNwYWNlLgorICogQHVzZXJfa2V5OiBUaGUga2V5 IHRoYXQgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgdmlldy4gVGhlIGtleSBpcworICogdW5pcXVl IHRvIHRoZSB2aWV3IHR5cGUuCisgKiBAdmlld190eXBlOiBWaWV3IHR5cGUKKyAqIEBsaXN0OiBD YWxsZXIncyBsaXN0IG9mIHN0YWdlZCBjb21tYW5kIGJ1ZmZlciByZXNvdXJjZSBhY3Rpb25zLgor ICogQHJlc19wOiBJZiB0aGUgcmVzb3VyY2UgaXMgaW4gYW4gYWxyZWFkeSBjb21taXR0ZWQgc3Rh dGUsIHBvaW50cyB0byB0aGUKKyAqIHN0cnVjdCB2bXdfcmVzb3VyY2Ugb24gc3VjY2Vzc2Z1bCBy ZXR1cm4uIFRoZSBwb2ludGVyIHdpbGwgYmUKKyAqIG5vbiByZWYtY291bnRlZC4KKyAqLworaW50 IHZtd192aWV3X3JlbW92ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAorCQkg ICAgdTMyIHVzZXJfa2V5LCBlbnVtIHZtd192aWV3X3R5cGUgdmlld190eXBlLAorCQkgICAgc3Ry dWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJICAgIHN0cnVjdCB2bXdfcmVzb3VyY2UgKipyZXNfcCkK K3sKKwlpZiAoIXZtd192aWV3X2lkX29rKHVzZXJfa2V5LCB2aWV3X3R5cGUpKSB7CisJCURSTV9F UlJPUigiSWxsZWdhbCB2aWV3IHJlbW92ZSB2aWV3IGlkLlxuIik7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCXJldHVybiB2bXdfY21kYnVmX3Jlc19yZW1vdmUobWFuLCB2bXdfY21kYnVmX3Jl c192aWV3LAorCQkJCSAgICAgdm13X3ZpZXdfa2V5KHVzZXJfa2V5LCB2aWV3X3R5cGUpLAorCQkJ CSAgICAgbGlzdCwgcmVzX3ApOworfQorCisvKioKKyAqIHZtd192aWV3X2NvdGFibGVfbGlzdF9k ZXN0cm95IC0gRXZpY3QgYWxsIHZpZXdzIGJlbG9uZ2luZyB0byBhIGNvdGFibGUuCisgKgorICog QGRldl9wcml2OiBQb2ludGVyIHRvIGEgZGV2aWNlIHByaXZhdGUgc3RydWN0LgorICogQGxpc3Q6 IExpc3Qgb2Ygdmlld3MgYmVsb25naW5nIHRvIGEgY290YWJsZS4KKyAqIEByZWFkYmFjazogVW51 c2VkLiBOZWVkZWQgZm9yIGZ1bmN0aW9uIGludGVyZmFjZSBvbmx5LgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gZXZpY3RzIGFsbCB2aWV3cyBiZWxvbmdpbmcgdG8gYSBjb3RhYmxlLgorICogSXQgbXVz dCBiZSBjYWxsZWQgd2l0aCB0aGUgYmluZGluZ19tdXRleCBoZWxkLCBhbmQgdGhlIGNhbGxlciBt dXN0IGhvbGQKKyAqIGEgcmVmZXJlbmNlIHRvIHRoZSB2aWV3IHJlc291cmNlLiBUaGlzIGlzIHR5 cGljYWxseSBjYWxsZWQgYmVmb3JlIHRoZQorICogY290YWJsZSBpcyBwYWdlZCBvdXQuCisgKi8K K3ZvaWQgdm13X3ZpZXdfY290YWJsZV9saXN0X2Rlc3Ryb3koc3RydWN0IHZtd19wcml2YXRlICpk ZXZfcHJpdiwKKwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAorCQkJCSAgIGJvb2wgcmVh ZGJhY2spCit7CisJc3RydWN0IHZtd192aWV3ICplbnRyeSwgKm5leHQ7CisKKwlXQVJOX09OX09O Q0UoIW11dGV4X2lzX2xvY2tlZCgmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpKTsKKworCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbmV4dCwgbGlzdCwgY290YWJsZV9oZWFkKQorCQlX QVJOX09OKHZtd192aWV3X2Rlc3Ryb3koJmVudHJ5LT5yZXMpKTsKK30KKworLyoqCisgKiB2bXdf dmlld19zdXJmYWNlX2xpc3RfZGVzdHJveSAtIEV2aWN0IGFsbCB2aWV3cyBwb2ludGluZyB0byBh IHN1cmZhY2UKKyAqCisgKiBAZGV2X3ByaXY6IFBvaW50ZXIgdG8gYSBkZXZpY2UgcHJpdmF0ZSBz dHJ1Y3QuCisgKiBAbGlzdDogTGlzdCBvZiB2aWV3cyBwb2ludGluZyB0byBhIHN1cmZhY2UuCisg KgorICogVGhpcyBmdW5jdGlvbiBldmljdHMgYWxsIHZpZXdzIHBvaW50aW5nIHRvIGEgc3VyZmFj ZS4gVGhpcyBpcyB0eXBpY2FsbHkKKyAqIGNhbGxlZCBiZWZvcmUgdGhlIHN1cmZhY2UgaXMgZXZp Y3RlZC4KKyAqLwordm9pZCB2bXdfdmlld19zdXJmYWNlX2xpc3RfZGVzdHJveShzdHJ1Y3Qgdm13 X3ByaXZhdGUgKmRldl9wcml2LAorCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJ c3RydWN0IHZtd192aWV3ICplbnRyeSwgKm5leHQ7CisKKwlXQVJOX09OX09OQ0UoIW11dGV4X2lz X2xvY2tlZCgmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpKTsKKworCWxpc3RfZm9yX2VhY2hfZW50 cnlfc2FmZShlbnRyeSwgbmV4dCwgbGlzdCwgc3JmX2hlYWQpCisJCVdBUk5fT04odm13X3ZpZXdf ZGVzdHJveSgmZW50cnktPnJlcykpOworfQorCisvKioKKyAqIHZtd192aWV3X3NyZiAtIFJldHVy biBhIG5vbi1yZWZjb3VudGVkIHBvaW50ZXIgdG8gdGhlIHN1cmZhY2UgYSB2aWV3IGlzCisgKiBw b2ludGluZyB0by4KKyAqCisgKiBAcmVzOiBwb2ludGVyIHRvIGEgdmlldyByZXNvdXJjZS4KKyAq CisgKiBOb3RlIHRoYXQgdGhlIHZpZXcgaXRzZWxmIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UsIHNv IGFzIGxvbmcKKyAqIHRoZSB2aWV3IHJlc291cmNlIGlzIGFsaXZlLCB0aGUgc3VyZmFjZSByZXNv dXJjZSB3aWxsIGJlLgorICovCitzdHJ1Y3Qgdm13X3Jlc291cmNlICp2bXdfdmlld19zcmYoc3Ry dWN0IHZtd19yZXNvdXJjZSAqcmVzKQoreworCXJldHVybiB2bXdfdmlldyhyZXMpLT5zcmY7Cit9 CisKKy8qKgorICogdm13X3ZpZXdfbG9va3VwIC0gTG9vayB1cCBhIHZpZXcuCisgKgorICogQG1h bjogVGhlIGNvbnRleHQncyBjbWRidWYgcmVmIG1hbmFnZXIuCisgKiBAdmlld190eXBlOiBUaGUg dmlldyB0eXBlLgorICogQHVzZXJfa2V5OiBUaGUgdmlldyB1c2VyIGlkLgorICoKKyAqIHJldHVy bnMgYSByZWZjb3VudGVkIHBvaW50ZXIgdG8gYSB2aWV3IG9yIGFuIGVycm9yIHBvaW50ZXIgaWYg bm90IGZvdW5kLgorICovCitzdHJ1Y3Qgdm13X3Jlc291cmNlICp2bXdfdmlld19sb29rdXAoc3Ry dWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbiwKKwkJCQkgICAgIGVudW0gdm13X3ZpZXdf dHlwZSB2aWV3X3R5cGUsCisJCQkJICAgICB1MzIgdXNlcl9rZXkpCit7CisJcmV0dXJuIHZtd19j bWRidWZfcmVzX2xvb2t1cChtYW4sIHZtd19jbWRidWZfcmVzX3ZpZXcsCisJCQkJICAgICB2bXdf dmlld19rZXkodXNlcl9rZXksIHZpZXdfdHlwZSkpOworfQorCitjb25zdCB1MzIgdm13X3ZpZXdf ZGVzdHJveV9jbWRzW10gPSB7CisJW3Ztd192aWV3X3NyXSA9IFNWR0FfM0RfQ01EX0RYX0RFU1RS T1lfU0hBREVSUkVTT1VSQ0VfVklFVywKKwlbdm13X3ZpZXdfcnRdID0gU1ZHQV8zRF9DTURfRFhf REVTVFJPWV9SRU5ERVJUQVJHRVRfVklFVywKKwlbdm13X3ZpZXdfZHNdID0gU1ZHQV8zRF9DTURf RFhfREVTVFJPWV9ERVBUSFNURU5DSUxfVklFVywKK307CisKK2NvbnN0IFNWR0FDT1RhYmxlVHlw ZSB2bXdfdmlld19jb3RhYmxlc1tdID0geworCVt2bXdfdmlld19zcl0gPSBTVkdBX0NPVEFCTEVf U1JWSUVXLAorCVt2bXdfdmlld19ydF0gPSBTVkdBX0NPVEFCTEVfUlRWSUVXLAorCVt2bXdfdmll d19kc10gPSBTVkdBX0NPVEFCTEVfRFNWSUVXLAorfTsKKworY29uc3QgU1ZHQUNPVGFibGVUeXBl IHZtd19zb19jb3RhYmxlc1tdID0geworCVt2bXdfc29fZWxdID0gU1ZHQV9DT1RBQkxFX0VMRU1F TlRMQVlPVVQsCisJW3Ztd19zb19ic10gPSBTVkdBX0NPVEFCTEVfQkxFTkRTVEFURSwKKwlbdm13 X3NvX2RzXSA9IFNWR0FfQ09UQUJMRV9ERVBUSFNURU5DSUwsCisJW3Ztd19zb19yc10gPSBTVkdB X0NPVEFCTEVfUkFTVEVSSVpFUlNUQVRFLAorCVt2bXdfc29fc3NdID0gU1ZHQV9DT1RBQkxFX1NB TVBMRVIsCisJW3Ztd19zb19zb10gPSBTVkdBX0NPVEFCTEVfU1RSRUFNT1VUUFVUCit9OworCisK Ky8qIFRvIHJlbW92ZSB1bnVzZWQgZnVuY3Rpb24gd2FybmluZyAqLworc3RhdGljIHZvaWQgdm13 X3NvX2J1aWxkX2Fzc2VydHModm9pZCkgX19hdHRyaWJ1dGVfXygodXNlZCkpOworCisKKy8qCisg KiBUaGlzIGZ1bmN0aW9uIGlzIHVudXNlZCBhdCBydW4tdGltZSwgYW5kIG9ubHkgdXNlZCB0byBk dW1wIHZhcmlvdXMgYnVpbGQKKyAqIGFzc2VydHMgaW1wb3J0YW50IGZvciBjb2RlIG9wdGltaXph dGlvbiBhc3N1bXB0aW9ucy4KKyAqLworc3RhdGljIHZvaWQgdm13X3NvX2J1aWxkX2Fzc2VydHMo dm9pZCkKK3sKKwkvKiBBc3NlcnQgdGhhdCBvdXIgdm13X3ZpZXdfY21kX3RvX3R5cGUoKSBmdW5j dGlvbiBpcyBjb3JyZWN0LiAqLworCUJVSUxEX0JVR19PTihTVkdBXzNEX0NNRF9EWF9ERVNUUk9Z X1NIQURFUlJFU09VUkNFX1ZJRVcgIT0KKwkJICAgICBTVkdBXzNEX0NNRF9EWF9ERUZJTkVfU0hB REVSUkVTT1VSQ0VfVklFVyArIDEpOworCUJVSUxEX0JVR19PTihTVkdBXzNEX0NNRF9EWF9ERUZJ TkVfUkVOREVSVEFSR0VUX1ZJRVcgIT0KKwkJICAgICBTVkdBXzNEX0NNRF9EWF9ERUZJTkVfU0hB REVSUkVTT1VSQ0VfVklFVyArIDIpOworCUJVSUxEX0JVR19PTihTVkdBXzNEX0NNRF9EWF9ERVNU Uk9ZX1JFTkRFUlRBUkdFVF9WSUVXICE9CisJCSAgICAgU1ZHQV8zRF9DTURfRFhfREVGSU5FX1NI QURFUlJFU09VUkNFX1ZJRVcgKyAzKTsKKwlCVUlMRF9CVUdfT04oU1ZHQV8zRF9DTURfRFhfREVG SU5FX0RFUFRIU1RFTkNJTF9WSUVXICE9CisJCSAgICAgU1ZHQV8zRF9DTURfRFhfREVGSU5FX1NI QURFUlJFU09VUkNFX1ZJRVcgKyA0KTsKKwlCVUlMRF9CVUdfT04oU1ZHQV8zRF9DTURfRFhfREVT VFJPWV9ERVBUSFNURU5DSUxfVklFVyAhPQorCQkgICAgIFNWR0FfM0RfQ01EX0RYX0RFRklORV9T SEFERVJSRVNPVVJDRV9WSUVXICsgNSk7CisKKwkvKiBBc3NlcnQgdGhhdCBvdXIgIm9uZSBib2R5 IGZpdHMgYWxsIiBhc3N1bXB0aW9uIGlzIHZhbGlkICovCisJQlVJTERfQlVHX09OKHNpemVvZih1 bmlvbiB2bXdfdmlld19kZXN0cm95KSAhPSBzaXplb2YodTMyKSk7CisKKwkvKiBBc3NlcnQgdGhh dCB0aGUgdmlldyBrZXkgc3BhY2UgY2FuIGhvbGQgYWxsIHZpZXcgaWRzLiAqLworCUJVSUxEX0JV R19PTihTVkdBX0NPVEFCTEVfTUFYX0lEUyA+PSAoKDEgPDwgMjApIC0gMSkpOworCisJLyoKKwkg KiBBc3NlcnQgdGhhdCB0aGUgb2Zmc2V0IG9mIHNpZCBpbiBhbGwgdmlldyBkZWZpbmUgY29tbWFu ZHMKKwkgKiBpcyB3aGF0IHdlIGFzc3VtZSBpdCB0byBiZS4KKwkgKi8KKwlCVUlMRF9CVUdfT04o b2Zmc2V0b2Yoc3RydWN0IHZtd192aWV3X2RlZmluZSwgc2lkKSAhPQorCQkgICAgIG9mZnNldG9m KFNWR0EzZENtZERYRGVmaW5lU2hhZGVyUmVzb3VyY2VWaWV3LCBzaWQpKTsKKwlCVUlMRF9CVUdf T04ob2Zmc2V0b2Yoc3RydWN0IHZtd192aWV3X2RlZmluZSwgc2lkKSAhPQorCQkgICAgIG9mZnNl dG9mKFNWR0EzZENtZERYRGVmaW5lUmVuZGVyVGFyZ2V0Vmlldywgc2lkKSk7CisJQlVJTERfQlVH X09OKG9mZnNldG9mKHN0cnVjdCB2bXdfdmlld19kZWZpbmUsIHNpZCkgIT0KKwkJICAgICBvZmZz ZXRvZihTVkdBM2RDbWREWERlZmluZURlcHRoU3RlbmNpbFZpZXcsIHNpZCkpOworfQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc28uaCBiL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X3NvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NWVmODY3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X3NvLmgKQEAgLTAsMCArMSwxNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0 IMKpIDIwMTQgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRz IFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUi KSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n CisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O LUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVS UywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwK KyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVm IFZNV19TT19ICisjZGVmaW5lIFZNV19TT19ICisKK2VudW0gdm13X3ZpZXdfdHlwZSB7CisJdm13 X3ZpZXdfc3IsCisJdm13X3ZpZXdfcnQsCisJdm13X3ZpZXdfZHMsCisJdm13X3ZpZXdfbWF4LAor fTsKKworZW51bSB2bXdfc29fdHlwZSB7CisJdm13X3NvX2VsLAorCXZtd19zb19icywKKwl2bXdf c29fZHMsCisJdm13X3NvX3JzLAorCXZtd19zb19zcywKKwl2bXdfc29fc28sCisJdm13X3NvX21h eCwKK307CisKKy8qKgorICogdW5pb24gdm13X3ZpZXdfZGVzdHJveSAtIHZpZXcgZGVzdHJ1Y3Rp b24gY29tbWFuZCBib2R5CisgKgorICogQHJ0djogUmVuZGVyVGFyZ2V0IHZpZXcgZGVzdHJ1Y3Rp b24gY29tbWFuZCBib2R5CisgKiBAc3J2OiBTaGFkZXJSZXNvdXJjZSB2aWV3IGRlc3RydWN0aW9u IGNvbW1hbmQgYm9keQorICogQGRzdjogRGVwdGhTdGVuY2lsIHZpZXcgZGVzdHJ1Y3Rpb24gY29t bWFuZCBib2R5CisgKiBAdmlld19pZDogQSBzaW5nbGUgdTMyIHZpZXcgaWQuCisgKgorICogVGhl IGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGFsbCB1bmlvbiBtZW1iZXJzIGFyZSByZWFsbHkgcmVw cmVzZW50ZWQgYnkgYQorICogc2luZ2xlIHUzMiBpbiB0aGUgY29tbWFuZCBzdHJlYW0uIElmIHRo YXQncyBub3QgdGhlIGNhc2UsCisgKiB0aGUgc2l6ZSBvZiB0aGlzIHVuaW9uIHdpbGwgbm90IGVx dWFsIHRoZSBzaXplIG9mIGFuIHUzMiwgYW5kIHRoZQorICogYXNzdW1wdGlvbiBpcyBpbnZhbGlk LCBhbmQgd2UgZGV0ZWN0IHRoYXQgYXQgY29tcGlsZSB0aW1lIGluIHRoZQorICogdm13X3NvX2J1 aWxkX2Fzc2VydHMoKSBmdW5jdGlvbi4KKyAqLwordW5pb24gdm13X3ZpZXdfZGVzdHJveSB7CisJ c3RydWN0IFNWR0EzZENtZERYRGVzdHJveVJlbmRlclRhcmdldFZpZXcgcnR2OworCXN0cnVjdCBT VkdBM2RDbWREWERlc3Ryb3lTaGFkZXJSZXNvdXJjZVZpZXcgc3J2OworCXN0cnVjdCBTVkdBM2RD bWREWERlc3Ryb3lEZXB0aFN0ZW5jaWxWaWV3IGRzdjsKKwl1MzIgdmlld19pZDsKK307CisKKy8q IE1hcCBlbnVtIHZtd192aWV3X3R5cGUgdG8gdmlldyBkZXN0cm95IGNvbW1hbmQgaWRzKi8KK2V4 dGVybiBjb25zdCB1MzIgdm13X3ZpZXdfZGVzdHJveV9jbWRzW107CisKKy8qIE1hcCBlbnVtIHZt d192aWV3X3R5cGUgdG8gU1ZHQUNPVGFibGVUeXBlICovCitleHRlcm4gY29uc3QgU1ZHQUNPVGFi bGVUeXBlIHZtd192aWV3X2NvdGFibGVzW107CisKKy8qIE1hcCBlbnVtIHZtd19zb190eXBlIHRv IFNWR0FDT1RhYmxlVHlwZSAqLworZXh0ZXJuIGNvbnN0IFNWR0FDT1RhYmxlVHlwZSB2bXdfc29f Y290YWJsZXNbXTsKKworLyoKKyAqIHZtd192aWV3X2NtZF90b190eXBlIC0gUmV0dXJuIHRoZSB2 aWV3IHR5cGUgZm9yIGEgY3JlYXRlIG9yIGRlc3Ryb3kgY29tbWFuZAorICoKKyAqIEBpZDogVGhl IFNWR0EzRCBjb21tYW5kIGlkLgorICoKKyAqIEZvciBhIGdpdmVuIHZpZXcgY3JlYXRlIG9yIGRl c3Ryb3kgY29tbWFuZCBpZCwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nCisgKiBlbnVtIHZtd192 aWV3X3R5cGUuIElmIHRoZSBjb21tYW5kIGlzIHVua25vd24sIHJldHVybiB2bXdfdmlld19tYXgu CisgKiBUaGUgdmFsaWRpdHkgb2YgdGhlIHNpbXBsaWZpZWQgY2FsY3VsYXRpb24gaXMgdmVyaWZp ZWQgaW4gdGhlCisgKiB2bXdfc29fYnVpbGRfYXNzZXJ0cygpIGZ1bmN0aW9uLgorICovCitzdGF0 aWMgaW5saW5lIGVudW0gdm13X3ZpZXdfdHlwZSB2bXdfdmlld19jbWRfdG9fdHlwZSh1MzIgaWQp Cit7CisJdTMyIHRtcCA9IChpZCAtIFNWR0FfM0RfQ01EX0RYX0RFRklORV9TSEFERVJSRVNPVVJD RV9WSUVXKSAvIDI7CisKKwlpZiAodG1wID4gKHUzMil2bXdfdmlld19tYXgpCisJCXJldHVybiB2 bXdfdmlld19tYXg7CisKKwlyZXR1cm4gKGVudW0gdm13X3ZpZXdfdHlwZSkgdG1wOworfQorCisv KgorICogdm13X3NvX2NtZF90b190eXBlIC0gUmV0dXJuIHRoZSBzdGF0ZSBvYmplY3QgdHlwZSBm b3IgYQorICogY3JlYXRlIG9yIGRlc3Ryb3kgY29tbWFuZAorICoKKyAqIEBpZDogVGhlIFNWR0Ez RCBjb21tYW5kIGlkLgorICoKKyAqIEZvciBhIGdpdmVuIHN0YXRlIG9iamVjdCBjcmVhdGUgb3Ig ZGVzdHJveSBjb21tYW5kIGlkLAorICogcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGVudW0gdm13 X3NvX3R5cGUuIElmIHRoZSBjb21tYW5kIGlzIHVrbm93biwKKyAqIHJldHVybiB2bXdfc29fbWF4 LiBXZSBzaG91bGQgcGVyaGFwcyBvcHRpbWl6ZSB0aGlzIGZ1bmN0aW9uIHVzaW5nCisgKiBhIHNp bWlsYXIgc3RyYXRlZ3kgYXMgdm13X3ZpZXdfY21kX3RvX3R5cGUoKS4KKyAqLworc3RhdGljIGlu bGluZSBlbnVtIHZtd19zb190eXBlIHZtd19zb19jbWRfdG9fdHlwZSh1MzIgaWQpCit7CisJc3dp dGNoIChpZCkgeworCWNhc2UgU1ZHQV8zRF9DTURfRFhfREVGSU5FX0VMRU1FTlRMQVlPVVQ6CisJ Y2FzZSBTVkdBXzNEX0NNRF9EWF9ERVNUUk9ZX0VMRU1FTlRMQVlPVVQ6CisJCXJldHVybiB2bXdf c29fZWw7CisJY2FzZSBTVkdBXzNEX0NNRF9EWF9ERUZJTkVfQkxFTkRfU1RBVEU6CisJY2FzZSBT VkdBXzNEX0NNRF9EWF9ERVNUUk9ZX0JMRU5EX1NUQVRFOgorCQlyZXR1cm4gdm13X3NvX2JzOwor CWNhc2UgU1ZHQV8zRF9DTURfRFhfREVGSU5FX0RFUFRIU1RFTkNJTF9TVEFURToKKwljYXNlIFNW R0FfM0RfQ01EX0RYX0RFU1RST1lfREVQVEhTVEVOQ0lMX1NUQVRFOgorCQlyZXR1cm4gdm13X3Nv X2RzOworCWNhc2UgU1ZHQV8zRF9DTURfRFhfREVGSU5FX1JBU1RFUklaRVJfU1RBVEU6CisJY2Fz ZSBTVkdBXzNEX0NNRF9EWF9ERVNUUk9ZX1JBU1RFUklaRVJfU1RBVEU6CisJCXJldHVybiB2bXdf c29fcnM7CisJY2FzZSBTVkdBXzNEX0NNRF9EWF9ERUZJTkVfU0FNUExFUl9TVEFURToKKwljYXNl IFNWR0FfM0RfQ01EX0RYX0RFU1RST1lfU0FNUExFUl9TVEFURToKKwkJcmV0dXJuIHZtd19zb19z czsKKwljYXNlIFNWR0FfM0RfQ01EX0RYX0RFRklORV9TVFJFQU1PVVRQVVQ6CisJY2FzZSBTVkdB XzNEX0NNRF9EWF9ERVNUUk9ZX1NUUkVBTU9VVFBVVDoKKwkJcmV0dXJuIHZtd19zb19zbzsKKwlk ZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHZtd19zb19tYXg7Cit9CisKKy8qCisgKiBW aWV3IG1hbmFnZW1lbnQgLSB2bXdnZnhfc28uYworICovCitleHRlcm4gaW50IHZtd192aWV3X2Fk ZChzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFuLAorCQkJc3RydWN0IHZtd19yZXNv dXJjZSAqY3R4LAorCQkJc3RydWN0IHZtd19yZXNvdXJjZSAqc3JmLAorCQkJZW51bSB2bXdfdmll d190eXBlIHZpZXdfdHlwZSwKKwkJCXUzMiB1c2VyX2tleSwKKwkJCWNvbnN0IHZvaWQgKmNtZCwK KwkJCXNpemVfdCBjbWRfc2l6ZSwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOworCitleHRl cm4gaW50IHZtd192aWV3X3JlbW92ZShzdHJ1Y3Qgdm13X2NtZGJ1Zl9yZXNfbWFuYWdlciAqbWFu LAorCQkJICAgdTMyIHVzZXJfa2V5LCBlbnVtIHZtd192aWV3X3R5cGUgdmlld190eXBlLAorCQkJ ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCSAgIHN0cnVjdCB2bXdfcmVzb3VyY2UgKipy ZXNfcCk7CisKK2V4dGVybiB2b2lkIHZtd192aWV3X3N1cmZhY2VfbGlzdF9kZXN0cm95KHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqdmlld19s aXN0KTsKK2V4dGVybiB2b2lkIHZtd192aWV3X2NvdGFibGVfbGlzdF9kZXN0cm95KHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJ CQkJICBib29sIHJlYWRiYWNrKTsKK2V4dGVybiBzdHJ1Y3Qgdm13X3Jlc291cmNlICp2bXdfdmll d19zcmYoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKTsKK2V4dGVybiBzdHJ1Y3Qgdm13X3Jlc291 cmNlICp2bXdfdmlld19sb29rdXAoc3RydWN0IHZtd19jbWRidWZfcmVzX21hbmFnZXIgKm1hbiwK KwkJCQkJICAgIGVudW0gdm13X3ZpZXdfdHlwZSB2aWV3X3R5cGUsCisJCQkJCSAgICB1MzIgdXNl cl9rZXkpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9zdGR1LmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdGR1LmMKaW5kZXggZDRh NDUzNy4uYWU2NzczZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhf c3RkdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N0ZHUuYwpAQCAtNTYx LDYgKzU2MSw3IEBAIHN0YXRpYyBpbnQgdm13X3N0ZHVfY3J0Y19zZXRfY29uZmlnKHN0cnVjdCBk cm1fbW9kZV9zZXQgKnNldCkKIAkJCQl0cnVlLCAvKiBhIHNjYW5vdXQgYnVmZmVyICovCiAJCQkJ Y29udGVudF9zcmYubWlwX2xldmVsc1swXSwKIAkJCQljb250ZW50X3NyZi5tdWx0aXNhbXBsZV9j b3VudCwKKwkJCQkwLAogCQkJCWRpc3BsYXlfYmFzZV9zaXplLAogCQkJCSZkaXNwbGF5X3NyZik7 CiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X3N1cmZhY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X3N1cmZhY2UuYwppbmRleCBlZWExNzkwLi4xMmFkZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdXJmYWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfc3VyZmFjZS5jCkBAIC0yNyw5ICsyNywxMiBAQAogCiAjaW5jbHVkZSAidm13Z2Z4 X2Rydi5oIgogI2luY2x1ZGUgInZtd2dmeF9yZXNvdXJjZV9wcml2LmgiCisjaW5jbHVkZSAidm13 Z2Z4X3NvLmgiCisjaW5jbHVkZSAidm13Z2Z4X2JpbmRpbmcuaCIKICNpbmNsdWRlIDx0dG0vdHRt X3BsYWNlbWVudC5oPgogI2luY2x1ZGUgImRldmljZV9pbmNsdWRlL3N2Z2EzZF9zdXJmYWNlZGVm cy5oIgogCisKIC8qKgogICogc3RydWN0IHZtd191c2VyX3N1cmZhY2UgLSBVc2VyLXNwYWNlIHZp c2libGUgc3VyZmFjZSByZXNvdXJjZQogICoKQEAgLTU5Myw2ICs1OTYsNyBAQCBzdGF0aWMgaW50 IHZtd19zdXJmYWNlX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkgKiBzdXJm YWNlIHZhbGlkYXRlLgogCSAqLwogCisJSU5JVF9MSVNUX0hFQUQoJnNyZi0+dmlld19saXN0KTsK IAl2bXdfcmVzb3VyY2VfYWN0aXZhdGUocmVzLCB2bXdfaHdfc3VyZmFjZV9kZXN0cm95KTsKIAly ZXR1cm4gcmV0OwogfQpAQCAtNzIzLDYgKzcyNyw3IEBAIGludCB2bXdfc3VyZmFjZV9kZWZpbmVf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlkZXNjID0gc3ZnYTNk c3VyZmFjZV9nZXRfZGVzYyhyZXEtPmZvcm1hdCk7CiAJaWYgKHVubGlrZWx5KGRlc2MtPmJsb2Nr X2Rlc2MgPT0gU1ZHQTNEQkxPQ0tERVNDX05PTkUpKSB7CiAJCURSTV9FUlJPUigiSW52YWxpZCBz dXJmYWNlIGZvcm1hdCBmb3Igc3VyZmFjZSBjcmVhdGlvbi5cbiIpOworCQlEUk1fRVJST1IoIkZv cm1hdCByZXF1ZXN0ZWQgaXM6ICVkXG4iLCByZXEtPmZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFM OwogCX0KIApAQCAtMTAxOCwxMiArMTAyMywxNiBAQCBzdGF0aWMgaW50IHZtd19nYl9zdXJmYWNl X2NyZWF0ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiA9IHJlcy0+ZGV2X3ByaXY7CiAJc3RydWN0IHZtd19zdXJmYWNlICpzcmYgPSB2 bXdfcmVzX3RvX3NyZihyZXMpOwotCXVpbnQzMl90IGNtZF9sZW4sIHN1Ym1pdF9sZW47CisJdWlu dDMyX3QgY21kX2xlbiwgY21kX2lkLCBzdWJtaXRfbGVuOwogCWludCByZXQ7CiAJc3RydWN0IHsK IAkJU1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKIAkJU1ZHQTNkQ21kRGVmaW5lR0JTdXJmYWNlIGJv ZHk7CiAJfSAqY21kOworCXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNW R0EzZENtZERlZmluZUdCU3VyZmFjZV92MiBib2R5OworCX0gKmNtZDI7CiAKIAlpZiAobGlrZWx5 KHJlcy0+aWQgIT0gLTEpKQogCQlyZXR1cm4gMDsKQEAgLTEwNDAsOSArMTA0OSwxOSBAQCBzdGF0 aWMgaW50IHZtd19nYl9zdXJmYWNlX2NyZWF0ZShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCiAJ CWdvdG8gb3V0X25vX2ZpZm87CiAJfQogCi0JY21kX2xlbiA9IHNpemVvZihjbWQtPmJvZHkpOwot CXN1Ym1pdF9sZW4gPSBzaXplb2YoKmNtZCk7CisJaWYgKHNyZi0+YXJyYXlfc2l6ZSA+IDApIHsK KwkJLyogaGFzX2R4IGNoZWNrZWQgb24gY3JlYXRpb24gdGltZS4gKi8KKwkJY21kX2lkID0gU1ZH QV8zRF9DTURfREVGSU5FX0dCX1NVUkZBQ0VfVjI7CisJCWNtZF9sZW4gPSBzaXplb2YoY21kMi0+ Ym9keSk7CisJCXN1Ym1pdF9sZW4gPSBzaXplb2YoKmNtZDIpOworCX0gZWxzZSB7CisJCWNtZF9p ZCA9IFNWR0FfM0RfQ01EX0RFRklORV9HQl9TVVJGQUNFOworCQljbWRfbGVuID0gc2l6ZW9mKGNt ZC0+Ym9keSk7CisJCXN1Ym1pdF9sZW4gPSBzaXplb2YoKmNtZCk7CisJfQorCiAJY21kID0gdm13 X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc3VibWl0X2xlbik7CisJY21kMiA9ICh0eXBlb2YoY21k MikpY21kOwogCWlmICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKIAkJRFJNX0VSUk9SKCJGYWls ZWQgcmVzZXJ2aW5nIEZJRk8gc3BhY2UgZm9yIHN1cmZhY2UgIgogCQkJICAiY3JlYXRpb24uXG4i KTsKQEAgLTEwNTAsMTcgKzEwNjksMzMgQEAgc3RhdGljIGludCB2bXdfZ2Jfc3VyZmFjZV9jcmVh dGUoc3RydWN0IHZtd19yZXNvdXJjZSAqcmVzKQogCQlnb3RvIG91dF9ub19maWZvOwogCX0KIAot CWNtZC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfREVGSU5FX0dCX1NVUkZBQ0U7Ci0JY21kLT5o ZWFkZXIuc2l6ZSA9IGNtZF9sZW47Ci0JY21kLT5ib2R5LnNpZCA9IHNyZi0+cmVzLmlkOwotCWNt ZC0+Ym9keS5zdXJmYWNlRmxhZ3MgPSBzcmYtPmZsYWdzOwotCWNtZC0+Ym9keS5mb3JtYXQgPSBz cmYtPmZvcm1hdDsKLQljbWQtPmJvZHkubnVtTWlwTGV2ZWxzID0gc3JmLT5taXBfbGV2ZWxzWzBd OwotCWNtZC0+Ym9keS5tdWx0aXNhbXBsZUNvdW50ID0gc3JmLT5tdWx0aXNhbXBsZV9jb3VudDsK LQljbWQtPmJvZHkuYXV0b2dlbkZpbHRlciA9IHNyZi0+YXV0b2dlbl9maWx0ZXI7Ci0JY21kLT5i b2R5LnNpemUud2lkdGggPSBzcmYtPmJhc2Vfc2l6ZS53aWR0aDsKLQljbWQtPmJvZHkuc2l6ZS5o ZWlnaHQgPSBzcmYtPmJhc2Vfc2l6ZS5oZWlnaHQ7Ci0JY21kLT5ib2R5LnNpemUuZGVwdGggPSBz cmYtPmJhc2Vfc2l6ZS5kZXB0aDsKKwlpZiAoc3JmLT5hcnJheV9zaXplID4gMCkgeworCQljbWQy LT5oZWFkZXIuaWQgPSBjbWRfaWQ7CisJCWNtZDItPmhlYWRlci5zaXplID0gY21kX2xlbjsKKwkJ Y21kMi0+Ym9keS5zaWQgPSBzcmYtPnJlcy5pZDsKKwkJY21kMi0+Ym9keS5zdXJmYWNlRmxhZ3Mg PSBzcmYtPmZsYWdzOworCQljbWQyLT5ib2R5LmZvcm1hdCA9IGNwdV90b19sZTMyKHNyZi0+Zm9y bWF0KTsKKwkJY21kMi0+Ym9keS5udW1NaXBMZXZlbHMgPSBzcmYtPm1pcF9sZXZlbHNbMF07CisJ CWNtZDItPmJvZHkubXVsdGlzYW1wbGVDb3VudCA9IHNyZi0+bXVsdGlzYW1wbGVfY291bnQ7CisJ CWNtZDItPmJvZHkuYXV0b2dlbkZpbHRlciA9IHNyZi0+YXV0b2dlbl9maWx0ZXI7CisJCWNtZDIt PmJvZHkuc2l6ZS53aWR0aCA9IHNyZi0+YmFzZV9zaXplLndpZHRoOworCQljbWQyLT5ib2R5LnNp emUuaGVpZ2h0ID0gc3JmLT5iYXNlX3NpemUuaGVpZ2h0OworCQljbWQyLT5ib2R5LnNpemUuZGVw dGggPSBzcmYtPmJhc2Vfc2l6ZS5kZXB0aDsKKwkJY21kMi0+Ym9keS5hcnJheVNpemUgPSBzcmYt PmFycmF5X3NpemU7CisJfSBlbHNlIHsKKwkJY21kLT5oZWFkZXIuaWQgPSBjbWRfaWQ7CisJCWNt ZC0+aGVhZGVyLnNpemUgPSBjbWRfbGVuOworCQljbWQtPmJvZHkuc2lkID0gc3JmLT5yZXMuaWQ7 CisJCWNtZC0+Ym9keS5zdXJmYWNlRmxhZ3MgPSBzcmYtPmZsYWdzOworCQljbWQtPmJvZHkuZm9y bWF0ID0gY3B1X3RvX2xlMzIoc3JmLT5mb3JtYXQpOworCQljbWQtPmJvZHkubnVtTWlwTGV2ZWxz ID0gc3JmLT5taXBfbGV2ZWxzWzBdOworCQljbWQtPmJvZHkubXVsdGlzYW1wbGVDb3VudCA9IHNy Zi0+bXVsdGlzYW1wbGVfY291bnQ7CisJCWNtZC0+Ym9keS5hdXRvZ2VuRmlsdGVyID0gc3JmLT5h dXRvZ2VuX2ZpbHRlcjsKKwkJY21kLT5ib2R5LnNpemUud2lkdGggPSBzcmYtPmJhc2Vfc2l6ZS53 aWR0aDsKKwkJY21kLT5ib2R5LnNpemUuaGVpZ2h0ID0gc3JmLT5iYXNlX3NpemUuaGVpZ2h0Owor CQljbWQtPmJvZHkuc2l6ZS5kZXB0aCA9IHNyZi0+YmFzZV9zaXplLmRlcHRoOworCX0KKwogCXZt d19maWZvX2NvbW1pdChkZXZfcHJpdiwgc3VibWl0X2xlbik7CiAKIAlyZXR1cm4gMDsKQEAgLTEx ODgsNiArMTIyMyw3IEBAIHN0YXRpYyBpbnQgdm13X2diX3N1cmZhY2VfdW5iaW5kKHN0cnVjdCB2 bXdfcmVzb3VyY2UgKnJlcywKIHN0YXRpYyBpbnQgdm13X2diX3N1cmZhY2VfZGVzdHJveShzdHJ1 Y3Qgdm13X3Jlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9 IHJlcy0+ZGV2X3ByaXY7CisJc3RydWN0IHZtd19zdXJmYWNlICpzcmYgPSB2bXdfcmVzX3RvX3Ny ZihyZXMpOwogCXN0cnVjdCB7CiAJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CiAJCVNWR0EzZENt ZERlc3Ryb3lHQlN1cmZhY2UgYm9keTsKQEAgLTExOTcsNyArMTIzMyw4IEBAIHN0YXRpYyBpbnQg dm13X2diX3N1cmZhY2VfZGVzdHJveShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMpCiAJCXJldHVy biAwOwogCiAJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmJpbmRpbmdfbXV0ZXgpOwotCXZtd19jb250 ZXh0X2JpbmRpbmdfcmVzX2xpc3Rfc2NydWIoJnJlcy0+YmluZGluZ19oZWFkKTsKKwl2bXdfdmll d19zdXJmYWNlX2xpc3RfZGVzdHJveShkZXZfcHJpdiwgJnNyZi0+dmlld19saXN0KTsKKwl2bXdf YmluZGluZ19yZXNfbGlzdF9zY3J1YigmcmVzLT5iaW5kaW5nX2hlYWQpOwogCiAJY21kID0gdm13 X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAodW5saWtlbHkoY21k ID09IE5VTEwpKSB7CkBAIC0xMjU5LDYgKzEyOTYsNyBAQCBpbnQgdm13X2diX3N1cmZhY2VfZGVm aW5lX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQlyZXEtPmRy bV9zdXJmYWNlX2ZsYWdzICYgZHJtX3Ztd19zdXJmYWNlX2ZsYWdfc2Nhbm91dCwKIAkJCXJlcS0+ bWlwX2xldmVscywKIAkJCXJlcS0+bXVsdGlzYW1wbGVfY291bnQsCisJCQlyZXEtPmFycmF5X3Np emUsCiAJCQlyZXEtPmJhc2Vfc2l6ZSwKIAkJCSZzcmYpOwogCWlmICh1bmxpa2VseShyZXQgIT0g MCkpCkBAIC0xMjc1LDEwICsxMzEzLDE3IEBAIGludCB2bXdfZ2Jfc3VyZmFjZV9kZWZpbmVfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlyZXMgPSAmdXNlcl9zcmYt PnNyZi5yZXM7CiAKIAotCWlmIChyZXEtPmJ1ZmZlcl9oYW5kbGUgIT0gU1ZHQTNEX0lOVkFMSURf SUQpCisJaWYgKHJlcS0+YnVmZmVyX2hhbmRsZSAhPSBTVkdBM0RfSU5WQUxJRF9JRCkgewogCQly ZXQgPSB2bXdfdXNlcl9kbWFidWZfbG9va3VwKHRmaWxlLCByZXEtPmJ1ZmZlcl9oYW5kbGUsCiAJ CQkJCSAgICAgJnJlcy0+YmFja3VwKTsKLQllbHNlIGlmIChyZXEtPmRybV9zdXJmYWNlX2ZsYWdz ICYgZHJtX3Ztd19zdXJmYWNlX2ZsYWdfY3JlYXRlX2J1ZmZlcikKKwkJaWYgKHJldCA9PSAwICYm IHJlcy0+YmFja3VwLT5iYXNlLm51bV9wYWdlcyAqIFBBR0VfU0laRSA8CisJCSAgICByZXMtPmJh Y2t1cF9zaXplKSB7CisJCQlEUk1fRVJST1IoIlN1cmZhY2UgYmFja3VwIGJ1ZmZlciBpcyB0b28g c21hbGwuXG4iKTsKKwkJCXZtd19kbWFidWZfdW5yZWZlcmVuY2UoJnJlcy0+YmFja3VwKTsKKwkJ CXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9IGVsc2UgaWYgKHJl cS0+ZHJtX3N1cmZhY2VfZmxhZ3MgJiBkcm1fdm13X3N1cmZhY2VfZmxhZ19jcmVhdGVfYnVmZmVy KQogCQlyZXQgPSB2bXdfdXNlcl9kbWFidWZfYWxsb2MoZGV2X3ByaXYsIHRmaWxlLAogCQkJCQkg ICAgcmVzLT5iYWNrdXBfc2l6ZSwKIAkJCQkJICAgIHJlcS0+ZHJtX3N1cmZhY2VfZmxhZ3MgJgpA QCAtMTM3OCw2ICsxNDIzLDcgQEAgaW50IHZtd19nYl9zdXJmYWNlX3JlZmVyZW5jZV9pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXJlcC0+Y3JlcS5kcm1fc3VyZmFj ZV9mbGFncyA9IDA7CiAJcmVwLT5jcmVxLm11bHRpc2FtcGxlX2NvdW50ID0gc3JmLT5tdWx0aXNh bXBsZV9jb3VudDsKIAlyZXAtPmNyZXEuYXV0b2dlbl9maWx0ZXIgPSBzcmYtPmF1dG9nZW5fZmls dGVyOworCXJlcC0+Y3JlcS5hcnJheV9zaXplID0gc3JmLT5hcnJheV9zaXplOwogCXJlcC0+Y3Jl cS5idWZmZXJfaGFuZGxlID0gYmFja3VwX2hhbmRsZTsKIAlyZXAtPmNyZXEuYmFzZV9zaXplID0g c3JmLT5iYXNlX3NpemU7CiAJcmVwLT5jcmVwLmhhbmRsZSA9IHVzZXJfc3JmLT5wcmltZS5iYXNl Lmhhc2gua2V5OwpAQCAtMTQwNCw2ICsxNDUwLDcgQEAgb3V0X2JhZF9yZXNvdXJjZToKICAqIEBm b3Jfc2Nhbm91dDogdHJ1ZSBpZiBpbnRlZGVkIHRvIGJlIHVzZWQgZm9yIHNjYW5vdXQgYnVmZmVy CiAgKiBAbnVtX21pcF9sZXZlbHM6ICBudW1iZXIgb2YgTUlQIGxldmVscwogICogQG11bHRpc2Ft cGxlX2NvdW50OgorICogQGFycmF5X3NpemU6IFN1cmZhY2UgYXJyYXkgc2l6ZS4KICAqIEBzaXpl OiB3aWR0aCwgaGVpZ2gsIGRlcHRoIG9mIHRoZSBzdXJmYWNlIHJlcXVlc3RlZAogICogQHVzZXJf c3JmX291dDogYWxsb2NhdGVkIHVzZXJfc3JmLiAgU2V0IHRvIE5VTEwgb24gZmFpbHVyZS4KICAq CkBAIC0xNDE5LDYgKzE0NjYsNyBAQCBpbnQgdm13X3N1cmZhY2VfZ2JfcHJpdl9kZWZpbmUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBib29sIGZvcl9zY2Fub3V0LAogCQkJICAg ICAgIHVpbnQzMl90IG51bV9taXBfbGV2ZWxzLAogCQkJICAgICAgIHVpbnQzMl90IG11bHRpc2Ft cGxlX2NvdW50LAorCQkJICAgICAgIHVpbnQzMl90IGFycmF5X3NpemUsCiAJCQkgICAgICAgc3Ry dWN0IGRybV92bXdfc2l6ZSBzaXplLAogCQkJICAgICAgIHN0cnVjdCB2bXdfc3VyZmFjZSAqKnNy Zl9vdXQpCiB7CkBAIC0xNDI2LDcgKzE0NzQsNyBAQCBpbnQgdm13X3N1cmZhY2VfZ2JfcHJpdl9k ZWZpbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSAq dXNlcl9zcmY7CiAJc3RydWN0IHZtd19zdXJmYWNlICpzcmY7CiAJaW50IHJldDsKLQorCXUzMiBu dW1fbGF5ZXJzOwogCiAJKnNyZl9vdXQgPSBOVUxMOwogCkBAIC0xNDQ1LDYgKzE0OTMsMTIgQEAg aW50IHZtd19zdXJmYWNlX2diX3ByaXZfZGVmaW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ CX0KIAl9CiAKKwkvKiBhcnJheV9zaXplIG11c3QgYmUgbnVsbCBmb3Igbm9uLUdMMyBob3N0LiAq LworCWlmIChhcnJheV9zaXplID4gMCAmJiAhZGV2X3ByaXYtPmhhc19keCkgeworCQlEUk1fRVJS T1IoIlRyaWVkIHRvIGNyZWF0ZSBEWCBzdXJmYWNlIG9uIG5vbi1EWCBob3N0LlxuIik7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKwogCXJldCA9IHR0bV9yZWFkX2xvY2soJmRldl9wcml2LT5yZXNl cnZhdGlvbl9zZW0sIHRydWUpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCXJldHVybiBy ZXQ7CkBAIC0xNDgxLDEwICsxNTM1LDIxIEBAIGludCB2bXdfc3VyZmFjZV9nYl9wcml2X2RlZmlu ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXNyZi0+YXV0b2dlbl9maWx0ZXIgICAgPSBTVkdB M0RfVEVYX0ZJTFRFUl9OT05FOwogCXNyZi0+bXVsdGlzYW1wbGVfY291bnQgPSBtdWx0aXNhbXBs ZV9jb3VudDsKIAotCXNyZi0+cmVzLmJhY2t1cF9zaXplICAgPSBzdmdhM2RzdXJmYWNlX2dldF9z ZXJpYWxpemVkX3NpemUoc3JmLT5mb3JtYXQsCi0JCQkJCXNyZi0+YmFzZV9zaXplLAotCQkJCQlz cmYtPm1pcF9sZXZlbHNbMF0sCi0JCQkJCXNyZi0+ZmxhZ3MgJiBTVkdBM0RfU1VSRkFDRV9DVUJF TUFQKTsKKwlpZiAoYXJyYXlfc2l6ZSkKKwkJbnVtX2xheWVycyA9IGFycmF5X3NpemU7CisJZWxz ZSBpZiAoc3ZnYTNkX2ZsYWdzICYgU1ZHQTNEX1NVUkZBQ0VfQ1VCRU1BUCkKKwkJbnVtX2xheWVy cyA9IFNWR0EzRF9NQVhfU1VSRkFDRV9GQUNFUzsKKwllbHNlCisJCW51bV9sYXllcnMgPSAxOwor CisJc3JmLT5yZXMuYmFja3VwX3NpemUgICA9CisJCXN2Z2EzZHN1cmZhY2VfZ2V0X3NlcmlhbGl6 ZWRfc2l6ZShzcmYtPmZvcm1hdCwKKwkJCQkJCSAgc3JmLT5iYXNlX3NpemUsCisJCQkJCQkgIHNy Zi0+bWlwX2xldmVsc1swXSwKKwkJCQkJCSAgbnVtX2xheWVycyk7CisKKwlpZiAoc3JmLT5mbGFn cyAmIFNWR0EzRF9TVVJGQUNFX0JJTkRfU1RSRUFNX09VVFBVVCkKKwkJc3JmLT5yZXMuYmFja3Vw X3NpemUgKz0gc2l6ZW9mKFNWR0EzZERYU09TdGF0ZSk7CiAKIAlpZiAoZGV2X3ByaXYtPmFjdGl2 ZV9kaXNwbGF5X3VuaXQgPT0gdm13X2R1X3NjcmVlbl90YXJnZXQgJiYKIAkgICAgZm9yX3NjYW5v dXQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL3Ztd2dmeF9kcm0uaCBiL2luY2x1ZGUv dWFwaS9kcm0vdm13Z2Z4X2RybS5oCmluZGV4IGM4YTg2MzEuLmM1YmNkZGQgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvdWFwaS9kcm0vdm13Z2Z4X2RybS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vdm13 Z2Z4X2RybS5oCkBAIC02NCw2ICs2NCw3IEBACiAjZGVmaW5lIERSTV9WTVdfR0JfU1VSRkFDRV9D UkVBVEUgICAgMjMKICNkZWZpbmUgRFJNX1ZNV19HQl9TVVJGQUNFX1JFRiAgICAgICAyNAogI2Rl ZmluZSBEUk1fVk1XX1NZTkNDUFUgICAgICAgICAgICAgIDI1CisjZGVmaW5lIERSTV9WTVdfQ1JF QVRFX0VYVEVOREVEX0NPTlRFWFQgMjYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioKQEAgLTg5 LDYgKzkwLDcgQEAKICNkZWZpbmUgRFJNX1ZNV19QQVJBTV9NQVhfTU9CX01FTU9SWSAgIDkKICNk ZWZpbmUgRFJNX1ZNV19QQVJBTV9NQVhfTU9CX1NJWkUgICAgIDEwCiAjZGVmaW5lIERSTV9WTVdf UEFSQU1fU0NSRUVOX1RBUkdFVCAgICAxMQorI2RlZmluZSBEUk1fVk1XX1BBUkFNX0RYICAgICAg ICAgICAgICAgMTIKIAogLyoqCiAgKiBlbnVtIGRybV92bXdfaGFuZGxlX3R5cGUgLSBoYW5kbGUg dHlwZSBmb3IgcmVmIGlvY3RscwpAQCAtMjk3LDcgKzI5OSw3IEBAIHVuaW9uIGRybV92bXdfc3Vy ZmFjZV9yZWZlcmVuY2VfYXJnIHsKICAqIEFyZ3VtZW50IHRvIHRoZSBEUk1fVk1XX0VYRUNCVUYg SW9jdGwuCiAgKi8KIAotI2RlZmluZSBEUk1fVk1XX0VYRUNCVUZfVkVSU0lPTiAxCisjZGVmaW5l IERSTV9WTVdfRVhFQ0JVRl9WRVJTSU9OIDIKIAogc3RydWN0IGRybV92bXdfZXhlY2J1Zl9hcmcg ewogCXVpbnQ2NF90IGNvbW1hbmRzOwpAQCAtMzA2LDYgKzMwOCw4IEBAIHN0cnVjdCBkcm1fdm13 X2V4ZWNidWZfYXJnIHsKIAl1aW50NjRfdCBmZW5jZV9yZXA7CiAJdWludDMyX3QgdmVyc2lvbjsK IAl1aW50MzJfdCBmbGFnczsKKwl1aW50MzJfdCBjb250ZXh0X2hhbmRsZTsKKwl1aW50MzJfdCBw YWQ2NDsKIH07CiAKIC8qKgpAQCAtODI2LDcgKzgzMCw2IEBAIHN0cnVjdCBkcm1fdm13X3VwZGF0 ZV9sYXlvdXRfYXJnIHsKIGVudW0gZHJtX3Ztd19zaGFkZXJfdHlwZSB7CiAJZHJtX3Ztd19zaGFk ZXJfdHlwZV92cyA9IDAsCiAJZHJtX3Ztd19zaGFkZXJfdHlwZV9wcywKLQlkcm1fdm13X3NoYWRl cl90eXBlX2dzCiB9OwogCiAKQEAgLTkwOCw2ICs5MTEsOCBAQCBlbnVtIGRybV92bXdfc3VyZmFj ZV9mbGFncyB7CiAgKiBAYnVmZmVyX2hhbmRsZSAgICAgQnVmZmVyIGhhbmRsZSBvZiBiYWNrdXAg YnVmZmVyLiBTVkdBM0RfSU5WQUxJRF9JRAogICogICAgICAgICAgICAgICAgICAgIGlmIG5vbmUu CiAgKiBAYmFzZV9zaXplICAgICAgICAgU2l6ZSBvZiB0aGUgYmFzZSBtaXAgbGV2ZWwgZm9yIGFs bCBmYWNlcy4KKyAqIEBhcnJheV9zaXplICAgICAgICBNdXN0IGJlIHplcm8gZm9yIG5vbi1EWCBo YXJkd2FyZSwgYW5kIGlmIG5vbi16ZXJvCisgKiAgICAgICAgICAgICAgICAgICAgc3ZnYTNkX2Zs YWdzIG11c3QgaGF2ZSBwcm9wZXIgYmluZCBmbGFncyBzZXR1cC4KICAqCiAgKiBJbnB1dCBhcmd1 bWVudCB0byB0aGUgIERSTV9WTVdfR0JfU1VSRkFDRV9DUkVBVEUgSW9jdGwuCiAgKiBQYXJ0IG9m IG91dHB1dCBhcmd1bWVudCBmb3IgdGhlIERSTV9WTVdfR0JfU1VSRkFDRV9SRUYgSW9jdGwuCkBA IC05MjAsNyArOTI1LDcgQEAgc3RydWN0IGRybV92bXdfZ2Jfc3VyZmFjZV9jcmVhdGVfcmVxIHsK IAl1aW50MzJfdCBtdWx0aXNhbXBsZV9jb3VudDsKIAl1aW50MzJfdCBhdXRvZ2VuX2ZpbHRlcjsK IAl1aW50MzJfdCBidWZmZXJfaGFuZGxlOwotCXVpbnQzMl90IHBhZDY0OworCXVpbnQzMl90IGFy cmF5X3NpemU7CiAJc3RydWN0IGRybV92bXdfc2l6ZSBiYXNlX3NpemU7CiB9OwogCkBAIC0xMDYw LDQgKzEwNjUsMjggQEAgc3RydWN0IGRybV92bXdfc3luY2NwdV9hcmcgewogCXVpbnQzMl90IHBh ZDY0OwogfTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIERSTV9WTVdfQ1JFQVRFX0VY VEVOREVEX0NPTlRFWFQgLSBDcmVhdGUgYSBob3N0IGNvbnRleHQuCisgKgorICogQWxsb2NhdGVz IGEgZGV2aWNlIHVuaXF1ZSBjb250ZXh0IGlkLCBhbmQgcXVldWVzIGEgY3JlYXRlIGNvbnRleHQg Y29tbWFuZAorICogZm9yIHRoZSBob3N0LiBEb2VzIG5vdCB3YWl0IGZvciBob3N0IGNvbXBsZXRp b24uCisgKi8KK2VudW0gZHJtX3Ztd19leHRlbmRlZF9jb250ZXh0IHsKKwlkcm1fdm13X2NvbnRl eHRfbGVnYWN5LAorCWRybV92bXdfY29udGV4dF9keAorfTsKKworLyoqCisgKiB1bmlvbiBkcm1f dm13X2V4dGVuZGVkX2NvbnRleHRfYXJnCisgKgorICogQHJlcTogQ29udGV4dCB0eXBlLgorICog QHJlcDogQ29udGV4dCBpZGVudGlmaWVyLgorICoKKyAqIEFyZ3VtZW50IHRvIHRoZSBEUk1fVk1X X0NSRUFURV9FWFRFTkRFRF9DT05URVhUIElvY3RsLgorICovCit1bmlvbiBkcm1fdm13X2V4dGVu ZGVkX2NvbnRleHRfYXJnIHsKKwllbnVtIGRybV92bXdfZXh0ZW5kZWRfY29udGV4dCByZXE7CisJ c3RydWN0IGRybV92bXdfY29udGV4dF9hcmcgcmVwOworfTsKICNlbmRpZgotLSAKMi4xLjAKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=