Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp1041970ybb; Fri, 10 Apr 2020 15:54:51 -0700 (PDT) X-Google-Smtp-Source: APiQypIhwNvsbg95fQI/vQ0FHBI2ALpwO/pgbXFtc1ZfLjMCgC3mTRFuwFTZl2x7U+ieXKD5ET7w X-Received: by 2002:aed:34a5:: with SMTP id x34mr1355171qtd.216.1586559291498; Fri, 10 Apr 2020 15:54:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586559291; cv=none; d=google.com; s=arc-20160816; b=fxGkFeMEE1dqt597PiG6vjqBxYb8FLFTitg3pmg5p/q8HYgYnElRLa4QdGFOBFEEmT QyDnPniwI9XfVKHw8H2WYPx1/WBfTyPG9Ap9gGex1MjZcojVxin38w43KfwEhlpfXlph 7DohbDxh4WYxIbhyGBwPSzg0fKKFtunCubzG800iiXs1Pomu94Fbjo/X33aNTVGS7eHW xJV4IzuqOYhCDIWXiGGYGbGAdCx2rnJjIuB/Kkq2ZNW4DlOxQb78cbG7qGgbZVkLPayG 3Lc8rmd5ChQ1mdpNQgRorEO7l5X1KbJza1UXGlkSf/fhfLPlaAG3VkNAkwf43FR9K4DW KG2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/9YGHaZAI8IJT1wo1jeF1/l/E5FGeX/q6L3YT+t6KPU=; b=CoajwP1yz04VFE+++6vQV2EoM8KhogxMmlTBgL7zKAhiIi069WF+ddXq8VH2JIzjow iJmGVO1qKPgH75E7NtZIUV4Uvkye/o/diyjZirmJ+Z1vB4YN5k5g+LEHM+2bTqDZDNJ3 MTRbWenwOAX6exxnExzhMbfI2nWlSipRAG+sClOToS8bNd+FajLmVWresVmX/GnEWOOn pCA2HMk+hQwMo0/K2plrZ8EwSotSvVEMBmA0Z08Sn/PTiqOxtkEb9t0hv5WD3hHdkgO7 1ff2LaXk12lDv1oqb0mVsaAqoHQLJJC86YY2b95NlENCFRUqs84oqGQxXjNQLc+siB3S VXMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=bJ8L0KZr; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i2si2237230qki.240.2020.04.10.15.54.36; Fri, 10 Apr 2020 15:54:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=bJ8L0KZr; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726646AbgDJWwz (ORCPT + 99 others); Fri, 10 Apr 2020 18:52:55 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:63954 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726594AbgDJWwy (ORCPT ); Fri, 10 Apr 2020 18:52:54 -0400 X-UUID: 0c2bcfcc12034f96a7f58b038245049b-20200411 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=/9YGHaZAI8IJT1wo1jeF1/l/E5FGeX/q6L3YT+t6KPU=; b=bJ8L0KZrGTkszQmTVypAd1YO2+WKocE47bQeq+4RBqzJthzuvjFLwHmK1JKZzidLEIO6y1745bwUd46tX3gWtE17B1ZNrLx+xKiQzzleDWbI5qTKEQsQ8POec8pwYLv/9qiw6+XZHvsUmVblKQUYa/Idso3apXOJf2N01uwmOmE=; X-UUID: 0c2bcfcc12034f96a7f58b038245049b-20200411 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1441318605; Sat, 11 Apr 2020 06:51:50 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sat, 11 Apr 2020 06:51:44 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sat, 11 Apr 2020 06:51:43 +0800 From: Ryder Lee To: Felix Fietkau , Lorenzo Bianconi CC: Shayne Chen , YF Luo , Yiwei Chung , Chih-Min Chen , Evelyn Tsai , Sean Wang , , , Ryder Lee Subject: [PATCH v1 06/16] mt76: add mac80211 driver for MT7915 PCIe-based chipsets Date: Sat, 11 Apr 2020 06:51:21 +0800 Message-ID: <126ba84cd4f86b92881aa808e5fa4d2a04035b74.1586558901.git.ryder.lee@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBNZWRpYVRlayBsYXRlc3QgZ2VuZXJhdGlvbiBJRUVFIDgwMi4x MWF4IDR4NA0KZGV2aWNlIE1UNzkxNUUsIHdoaWNoIHN1cHBvcnRzIGNvbmN1cnJlbnQgZHVhbC1i YW5kIG9wZXJhdGlvbiBhdA0KYm90aCA1R0h6IGFuZCAyLjRHSHouDQoNCk5vdGUgdGhhdCB0aGlz IHBhdGNoIGp1c3QgYWRkIGJhc2ljIHBhcnQgYW5kIHdpbGwgYWRkIG1vcmUgSEUNCmNhcGFiaWxp dGllcyBzdXBwb3J0IGluIHRoZSBmdXJ0aGVyIHBhdGNoZXMuDQoNClRoZSBkcml2ZXIgc3VwcG9y dHMgQVAsIFN0YXRpb24sIE1lc2ggYW5kIG1vbml0b3IgbW9kZS4NCg0KU2lnbmVkLW9mZi1ieTog UnlkZXIgTGVlIDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPg0KU2lnbmVkLW9mZi1ieTogU2hheW5l IENoZW4gPHNoYXluZS5jaGVuQG1lZGlhdGVrLmNvbT4NClNpZ25lZC1vZmYtYnk6IENoaWgtTWlu IENoZW4gPGNoaWgtbWluLmNoZW5AbWVkaWF0ZWsuY29tPg0KVGVzdGVkLWJ5OiBFdmVseW4gVHNh aSA8ZXZlbHluLnRzYWlAbWVkaWF0ZWsuY29tPg0KQWNrZWQtYnk6IFlpd2VpIENodW5nIDx5aXdl aS5jaHVuZ0BtZWRpYXRlay5jb20+DQpBY2tlZC1ieTogWUYgTHVvIDx5Zi5sdW9AbWVkaWF0ZWsu Y29tPg0KLS0tDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnICAg IHwgICAgMSArDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZSAg IHwgICAgMSArDQogLi4uL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9LY29uZmln IHwgICAxMyArDQogLi4uL3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L01ha2VmaWxlICAg IHwgICAgNiArDQogLi4uL3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2RlYnVnZnMuYyAg IHwgIDI0NSArKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZG1hLmMg ICB8ICAyODMgKysNCiAuLi4vd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmMg ICAgfCAgMTI1ICsNCiAuLi4vd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmgg ICAgfCAgIDc4ICsNCiAuLi4vbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2luaXQu YyAgfCAgMzkzICsrKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFj LmMgICB8IDEzMTcgKysrKysrKysrKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9t dDc5MTUvbWFjLmggICB8ICAzMzAgKysrDQogLi4uL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2 L210NzkxNS9tYWluLmMgIHwgIDc0MyArKysrKysNCiAuLi4vbmV0L3dpcmVsZXNzL21lZGlhdGVr L210NzYvbXQ3OTE1L21jdS5jICAgfCAyMzE5ICsrKysrKysrKysrKysrKysrDQogLi4uL25ldC93 aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuaCAgIHwgIDgzNyArKysrKysNCiAuLi4v d2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbXQ3OTE1LmggICAgfCAgNDQyICsrKysNCiAu Li4vbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3BjaS5jICAgfCAgMTY2ICsrDQog Li4uL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9yZWdzLmggIHwgIDM0NCArKysN CiAxNyBmaWxlcyBjaGFuZ2VkLCA3NjQzIGluc2VydGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvS2NvbmZpZw0KIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzkx NS9NYWtlZmlsZQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRp YXRlay9tdDc2L210NzkxNS9kZWJ1Z2ZzLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9u ZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZG1hLmMNCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmMNCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5 MTUvZWVwcm9tLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVk aWF0ZWsvbXQ3Ni9tdDc5MTUvaW5pdC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21hYy5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21hYy5oDQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21h aW4uYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9t dDc2L210NzkxNS9tY3UuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVz cy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tdDc5MTUuaA0KIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9wY2kuYw0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210 NzkxNS9yZWdzLmgNCg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVr L210NzYvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZp Zw0KaW5kZXggY2JjMmQ4YTVkMzU0Li40MTUzM2EwZTE3MjAgMTAwNjQ0DQotLS0gYS9kcml2ZXJz L25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWcNCisrKyBiL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZw0KQEAgLTI0LDMgKzI0LDQgQEAgc291cmNlICJk cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4MC9LY29uZmlnIg0KIHNvdXJj ZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2eDIvS2NvbmZpZyINCiBz b3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjAzL0tjb25maWci DQogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYxNS9LY29u ZmlnIg0KK3NvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUv S2NvbmZpZyINCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2 L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZQ0K aW5kZXggZDdhMWRkYzllNDA3Li4xZGYwNDE1NmY5N2YgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL25l dC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L01ha2VmaWxlDQorKysgYi9kcml2ZXJzL25ldC93aXJl bGVzcy9tZWRpYXRlay9tdDc2L01ha2VmaWxlDQpAQCAtMjcsMyArMjcsNCBAQCBvYmotJChDT05G SUdfTVQ3NngwX0NPTU1PTikgKz0gbXQ3NngwLw0KIG9iai0kKENPTkZJR19NVDc2eDJfQ09NTU9O KSArPSBtdDc2eDIvDQogb2JqLSQoQ09ORklHX01UNzYwM0UpICs9IG10NzYwMy8NCiBvYmotJChD T05GSUdfTVQ3NjE1RSkgKz0gbXQ3NjE1Lw0KK29iai0kKENPTkZJR19NVDc5MTVFKSArPSBtdDc5 MTUvDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5 MTUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L0tj b25maWcNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjE3MzdmYjJi NGFkYw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc5MTUvS2NvbmZpZw0KQEAgLTAsMCArMSwxMyBAQA0KKyMgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KK2NvbmZpZyBNVDc5MTVFDQorCXRyaXN0YXRlICJNZWRp YVRlayBNVDc5MTVFIChQQ0llKSBzdXBwb3J0Ig0KKwlzZWxlY3QgTVQ3Nl9DT1JFDQorCWRlcGVu ZHMgb24gTUFDODAyMTENCisJZGVwZW5kcyBvbiBQQ0kNCisJaGVscA0KKwkgIFRoaXMgYWRkcyBz dXBwb3J0IGZvciBNVDc5MTUtYmFzZWQgd2lyZWxlc3MgUENJZSBkZXZpY2VzLA0KKwkgIHdoaWNo IHN1cHBvcnQgY29uY3VycmVudCBkdWFsLWJhbmQgb3BlcmF0aW9uIGF0IGJvdGggNUdIeg0KKwkg IGFuZCAyLjRHSHogSUVFRSA4MDIuMTFheCA0eDQ6NFNTIDEwMjQtUUFNLCAxNjBNSHogY2hhbm5l bHMsDQorCSAgT0ZETUEsIHNwYXRpYWwgcmV1c2UgYW5kIGR1YWwgY2FycmllciBtb2R1bGF0aW9u Lg0KKw0KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhl cmUuDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5 MTUvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9N YWtlZmlsZQ0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uNTdmZTcy NmNjMzhiDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRl ay9tdDc2L210NzkxNS9NYWtlZmlsZQ0KQEAgLTAsMCArMSw2IEBADQorI1NQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBJU0MNCisNCitvYmotJChDT05GSUdfTVQ3OTE1RSkgKz0gbXQ3OTE1ZS5vDQor DQorbXQ3OTE1ZS15IDo9IHBjaS5vIGluaXQubyBkbWEubyBlZXByb20ubyBtYWluLm8gbWN1Lm8g bWFjLm8gXA0KKwkgICAgIGRlYnVnZnMubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVs ZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNz L21lZGlhdGVrL210NzYvbXQ3OTE1L2RlYnVnZnMuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDAwMDAwMDAwMDAwMC4uMTUyYWUwNjE3ZjNkDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2 ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9kZWJ1Z2ZzLmMNCkBAIC0wLDAg KzEsMjQ1IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQw0KKy8qIENvcHlyaWdo dCAoQykgMjAyMCBNZWRpYVRlayBJbmMuICovDQorDQorI2luY2x1ZGUgIm10NzkxNS5oIg0KKyNp bmNsdWRlICJlZXByb20uaCINCisNCisvKiogZ2xvYmFsIGRlYnVnZnMgKiovDQorDQorLyogdGVz dCBrbm9iIG9mIHN5c3RlbSBsYXllciAxLzIgZXJyb3IgcmVjb3ZlcnkgKi8NCitzdGF0aWMgaW50 IG10NzkxNV9zZXJfdHJpZ2dlcl9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkNCit7DQorCWVudW0g ew0KKwkJU0VSX1NFVF9SRUNPVkVSX0wxID0gMSwNCisJCVNFUl9TRVRfUkVDT1ZFUl9MMiwNCisJ CVNFUl9FTkFCTEUgPSAyLA0KKwkJU0VSX1JFQ09WRVINCisJfTsNCisJc3RydWN0IG10NzkxNV9k ZXYgKmRldiA9IGRhdGE7DQorCWludCByZXQgPSAwOw0KKw0KKwlzd2l0Y2ggKHZhbCkgew0KKwlj YXNlIFNFUl9TRVRfUkVDT1ZFUl9MMToNCisJY2FzZSBTRVJfU0VUX1JFQ09WRVJfTDI6DQorCQkv KiBmYWxsIHRocm91Z2ggKi8NCisJCXJldCA9IG10NzkxNV9tY3Vfc2V0X3NlcihkZXYsIFNFUl9F TkFCTEUsIEJJVCh2YWwpLCAwKTsNCisJCWlmIChyZXQpDQorCQkJcmV0dXJuIHJldDsNCisNCisJ CXJldHVybiBtdDc5MTVfbWN1X3NldF9zZXIoZGV2LCBTRVJfUkVDT1ZFUiwgdmFsLCAwKTsNCisJ ZGVmYXVsdDoNCisJCWJyZWFrOw0KKwl9DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK0RFRklO RV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX3Nlcl90cmlnZ2VyLCBOVUxMLA0KKwkJCSBtdDc5MTVf c2VyX3RyaWdnZXJfc2V0LCAiJWxsZFxuIik7DQorDQorc3RhdGljIGludA0KK210NzkxNV9yYWRh cl90cmlnZ2VyKHZvaWQgKmRhdGEsIHU2NCB2YWwpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2ID0gZGF0YTsNCisNCisJcmV0dXJuIG10NzkxNV9tY3VfcmRkX2NtZChkZXYsIFJERF9SQURB Ul9FTVVMQVRFLCAxLCAwLCAwKTsNCit9DQorDQorREVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKGZv cHNfcmFkYXJfdHJpZ2dlciwgTlVMTCwNCisJCQkgbXQ3OTE1X3JhZGFyX3RyaWdnZXIsICIlbGxk XG4iKTsNCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X2RiZGNfc2V0KHZvaWQgKmRhdGEsIHU2NCB2 YWwpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gZGF0YTsNCisNCisJaWYgKHZhbCkN CisJCW10NzkxNV9yZWdpc3Rlcl9leHRfcGh5KGRldik7DQorCWVsc2UNCisJCW10NzkxNV91bnJl Z2lzdGVyX2V4dF9waHkoZGV2KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQN CittdDc5MTVfZGJkY19nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpDQorew0KKwlzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2ID0gZGF0YTsNCisNCisJKnZhbCA9ICEhbXQ3OTE1X2V4dF9waHkoZGV2KTsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK0RFRklORV9ERUJVR0ZTX0FUVFJJQlVURShmb3BzX2Ri ZGMsIG10NzkxNV9kYmRjX2dldCwNCisJCQkgbXQ3OTE1X2RiZGNfc2V0LCAiJWxsZFxuIik7DQor DQorc3RhdGljIHZvaWQNCittdDc5MTVfYW1wZHVfc3RhdF9yZWFkX3BoeShzdHJ1Y3QgbXQ3OTE1 X3BoeSAqcGh5LA0KKwkJCSAgIHN0cnVjdCBzZXFfZmlsZSAqZmlsZSkNCit7DQorCXN0cnVjdCBt dDc5MTVfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlOw0KKwlib29sIGV4dF9waHkgPSBwaHkgIT0g JmRldi0+cGh5Ow0KKwlpbnQgYm91bmRbMTVdLCByYW5nZVs0XSwgaSwgbjsNCisNCisJaWYgKCFw aHkpDQorCQlyZXR1cm47DQorDQorCS8qIFR4IGFtcGR1IHN0YXQgKi8NCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUocmFuZ2UpOyBpKyspDQorCQlyYW5nZVtpXSA9IG10NzZfcnIoZGV2LCBN VF9NSUJfQVJORyhleHRfcGh5LCBpKSk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGJvdW5kKTsgaSsrKQ0KKwkJYm91bmRbaV0gPSBNVF9NSUJfQVJOQ1JfUkFOR0UocmFuZ2VbaSAv IDRdLCBpKSArIDE7DQorDQorCXNlcV9wcmludGYoZmlsZSwgIlxuUGh5ICVkXG4iLCBleHRfcGh5 KTsNCisNCisJc2VxX3ByaW50ZihmaWxlLCAiTGVuZ3RoOiAlOGQgfCAiLCBib3VuZFswXSk7DQor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJvdW5kKSAtIDE7IGkrKykNCisJCXNlcV9wcmlu dGYoZmlsZSwgIiUzZCAtJTNkIHwgIiwNCisJCQkgICBib3VuZFtpXSArIDEsIGJvdW5kW2kgKyAx XSk7DQorDQorCXNlcV9wdXRzKGZpbGUsICJcbkNvdW50OiAgIik7DQorCW4gPSBleHRfcGh5ID8g QVJSQVlfU0laRShkZXYtPm10NzYuYWdncl9zdGF0cykgLyAyIDogMDsNCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoYm91bmQpOyBpKyspDQorCQlzZXFfcHJpbnRmKGZpbGUsICIlOGQgfCAi LCBkZXYtPm10NzYuYWdncl9zdGF0c1tpICsgbl0pOw0KKwlzZXFfcHV0cyhmaWxlLCAiXG4iKTsN CisNCisJc2VxX3ByaW50ZihmaWxlLCAiQkEgbWlzcyBjb3VudDogJWRcbiIsIHBoeS0+bWliLmJh X21pc3NfY250KTsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV90eF9zdGF0c19yZWFkKHN0 cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYgPSBmaWxlLT5wcml2YXRlOw0KKwlpbnQgc3RhdFs4XSwgaSwgbjsNCisNCisJbXQ3OTE1 X2FtcGR1X3N0YXRfcmVhZF9waHkoJmRldi0+cGh5LCBmaWxlKTsNCisJbXQ3OTE1X2FtcGR1X3N0 YXRfcmVhZF9waHkobXQ3OTE1X2V4dF9waHkoZGV2KSwgZmlsZSk7DQorDQorCS8qIFR4IGFtc2R1 IGluZm8gKi8NCisJc2VxX3B1dHMoZmlsZSwgIlR4IE1TRFUgc3RhdDpcbiIpOw0KKwlmb3IgKGkg PSAwLCBuID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RhdCk7IGkrKykgew0KKwkJc3RhdFtpXSA9IG10 NzZfcnIoZGV2LCAgTVRfUExFX0FNU0RVX1BBQ0tfTVNEVV9DTlQoaSkpOw0KKwkJbiArPSBzdGF0 W2ldOw0KKwl9DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0YXQpOyBpKyspIHsN CisJCXNlcV9wcmludGYoZmlsZSwgIkFNU0RVIHBhY2sgY291bnQgb2YgJWQgTVNEVSBpbiBUWEQ6 IDB4JXggIiwNCisJCQkgICBpICsgMSwgc3RhdFtpXSk7DQorCQlpZiAobiAhPSAwKQ0KKwkJCXNl cV9wcmludGYoZmlsZSwgIiglZCUlKVxuIiwgc3RhdFtpXSAqIDEwMCAvIG4pOw0KKwkJZWxzZQ0K KwkJCXNlcV9wdXRzKGZpbGUsICJcbiIpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgaW50DQorbXQ3OTE1X3R4X3N0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3Ry dWN0IGZpbGUgKmYpDQorew0KKwlyZXR1cm4gc2luZ2xlX29wZW4oZiwgbXQ3OTE1X3R4X3N0YXRz X3JlYWQsIGlub2RlLT5pX3ByaXZhdGUpOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGZp bGVfb3BlcmF0aW9ucyBmb3BzX3R4X3N0YXRzID0gew0KKwkub3BlbiA9IG10NzkxNV90eF9zdGF0 c19vcGVuLA0KKwkucmVhZCA9IHNlcV9yZWFkLA0KKwkubGxzZWVrID0gc2VxX2xzZWVrLA0KKwku cmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLA0KK307DQorDQorc3RhdGljIGludCBtdDc5MTVfcmVh ZF90ZW1wZXJhdHVyZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpDQorew0KKwlzdHJ1 Y3QgbXQ3OTE1X2RldiAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKHMtPnByaXZhdGUpOw0KKwlpbnQg dGVtcDsNCisNCisJLyogY3B1ICovDQorCXRlbXAgPSBtdDc5MTVfbWN1X2dldF90ZW1wZXJhdHVy ZShkZXYsIDApOw0KKwlzZXFfcHJpbnRmKHMsICJUZW1wZXJhdHVyZTogJWRcbiIsIHRlbXApOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9xdWV1ZXNfYWNxKHN0 cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYgPSBkZXZfZ2V0X2RydmRhdGEocy0+cHJpdmF0ZSk7DQorCWludCBpOw0KKw0KKwlmb3IgKGkg PSAwOyBpIDwgMTY7IGkrKykgew0KKwkJaW50IGosIGFjcyA9IGkgLyA0LCBpbmRleCA9IGkgJSA0 Ow0KKwkJdTMyIGN0cmwsIHZhbCwgcWxlbiA9IDA7DQorDQorCQl2YWwgPSBtdDc2X3JyKGRldiwg TVRfUExFX0FDX1FFTVBUWShhY3MsIGluZGV4KSk7DQorCQljdHJsID0gQklUKDMxKSB8IEJJVCgx NSkgfCAoYWNzIDw8IDgpOw0KKw0KKwkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsNCisJCQlp ZiAodmFsICYgQklUKGopKQ0KKwkJCQljb250aW51ZTsNCisNCisJCQltdDc2X3dyKGRldiwgTVRf UExFX0ZMX1EwX0NUUkwsDQorCQkJCWN0cmwgfCAoaiArIChpbmRleCA8PCA1KSkpOw0KKwkJCXFs ZW4gKz0gbXQ3Nl9nZXRfZmllbGQoZGV2LCBNVF9QTEVfRkxfUTNfQ1RSTCwNCisJCQkJCSAgICAg ICBHRU5NQVNLKDExLCAwKSk7DQorCQl9DQorCQlzZXFfcHJpbnRmKHMsICJBQyVkJWQ6IHF1ZXVl ZD0lZFxuIiwgYWNzLCBpbmRleCwgcWxlbik7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBpbnQNCittdDc5MTVfcXVldWVzX3JlYWQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lk ICpkYXRhKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShz LT5wcml2YXRlKTsNCisJc3RhdGljIGNvbnN0IHN0cnVjdCB7DQorCQljaGFyICpxdWV1ZTsNCisJ CWludCBpZDsNCisJfSBxdWV1ZV9tYXBbXSA9IHsNCisJCXsgIldGRE1BMCIsIE1UX1RYUV9CRSB9 LA0KKwkJeyAiTUNVV00iLCBNVF9UWFFfTUNVIH0sDQorCQl7ICJNQ1VXQSIsIE1UX1RYUV9NQ1Vf V0EgfSwNCisJCXsgIk1DVUZXUSIsIE1UX1RYUV9GV0RMIH0sDQorCX07DQorCWludCBpOw0KKw0K Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShxdWV1ZV9tYXApOyBpKyspIHsNCisJCXN0cnVj dCBtdDc2X3N3X3F1ZXVlICpxID0gJmRldi0+bXQ3Ni5xX3R4W3F1ZXVlX21hcFtpXS5pZF07DQor DQorCQlpZiAoIXEtPnEpDQorCQkJY29udGludWU7DQorDQorCQlzZXFfcHJpbnRmKHMsDQorCQkJ ICAgIiVzOglxdWV1ZWQ9JWQgaGVhZD0lZCB0YWlsPSVkXG4iLA0KKwkJCSAgIHF1ZXVlX21hcFtp XS5xdWV1ZSwgcS0+cS0+cXVldWVkLCBxLT5xLT5oZWFkLA0KKwkJCSAgIHEtPnEtPnRhaWwpOw0K Kwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXQ3OTE1X2luaXRfZGVidWdmcyhzdHJ1 Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJc3RydWN0IGRlbnRyeSAqZGlyOw0KKw0KKwlkaXIg PSBtdDc2X3JlZ2lzdGVyX2RlYnVnZnMoJmRldi0+bXQ3Nik7DQorCWlmICghZGlyKQ0KKwkJcmV0 dXJuIC1FTk9NRU07DQorDQorCWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtPm10NzYu ZGV2LCAicXVldWVzIiwgZGlyLA0KKwkJCQkgICAgbXQ3OTE1X3F1ZXVlc19yZWFkKTsNCisJZGVi dWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi0+bXQ3Ni5kZXYsICJhY3EiLCBkaXIsDQorCQkJ CSAgICBtdDc5MTVfcXVldWVzX2FjcSk7DQorCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInR4X3N0YXRz IiwgMDQwMCwgZGlyLCBkZXYsICZmb3BzX3R4X3N0YXRzKTsNCisJZGVidWdmc19jcmVhdGVfZmls ZSgiZGJkYyIsIDA2MDAsIGRpciwgZGV2LCAmZm9wc19kYmRjKTsNCisJZGVidWdmc19jcmVhdGVf dTMyKCJkZnNfaHdfcGF0dGVybiIsIDA0MDAsIGRpciwgJmRldi0+aHdfcGF0dGVybik7DQorCS8q IHRlc3Qga25vYnMgKi8NCisJZGVidWdmc19jcmVhdGVfZmlsZSgicmFkYXJfdHJpZ2dlciIsIDAy MDAsIGRpciwgZGV2LA0KKwkJCSAgICAmZm9wc19yYWRhcl90cmlnZ2VyKTsNCisJZGVidWdmc19j cmVhdGVfZmlsZSgic2VyX3RyaWdnZXIiLCAwMjAwLCBkaXIsIGRldiwgJmZvcHNfc2VyX3RyaWdn ZXIpOw0KKwlkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LT5tdDc2LmRldiwgInRlbXBl cmF0dXJlIiwgZGlyLA0KKwkJCQkgICAgbXQ3OTE1X3JlYWRfdGVtcGVyYXR1cmUpOw0KKw0KKwly ZXR1cm4gMDsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc5MTUvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210 NzkxNS9kbWEuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uMDE1 NmU2ZTU5MzNhDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRp YXRlay9tdDc2L210NzkxNS9kbWEuYw0KQEAgLTAsMCArMSwyODMgQEANCisvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogSVNDDQorLyogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVrIEluYy4g Ki8NCisNCisjaW5jbHVkZSAibXQ3OTE1LmgiDQorI2luY2x1ZGUgIi4uL2RtYS5oIg0KKyNpbmNs dWRlICJtYWMuaCINCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X2luaXRfdHhfcXVldWVzKHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIGludCBuX2Rlc2MpDQorew0KKwlzdHJ1Y3QgbXQ3Nl9zd19xdWV1 ZSAqcTsNCisJc3RydWN0IG10NzZfcXVldWUgKmh3cTsNCisJaW50IGVyciwgaTsNCisNCisJaHdx ID0gZGV2bV9remFsbG9jKGRldi0+bXQ3Ni5kZXYsIHNpemVvZigqaHdxKSwgR0ZQX0tFUk5FTCk7 DQorCWlmICghaHdxKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWVyciA9IG10NzZfcXVldWVf YWxsb2MoZGV2LCBod3EsIE1UNzkxNV9UWFFfQkFORDAsIG5fZGVzYywgMCwNCisJCQkgICAgICAg TVRfVFhfUklOR19CQVNFKTsNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlm b3IgKGkgPSAwOyBpIDwgTVRfVFhRX01DVTsgaSsrKSB7DQorCQlxID0gJmRldi0+bXQ3Ni5xX3R4 W2ldOw0KKwkJSU5JVF9MSVNUX0hFQUQoJnEtPnN3cSk7DQorCQlxLT5xID0gaHdxOw0KKwl9DQor DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X2luaXRfbWN1X3F1ZXVl KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBtdDc2X3N3X3F1ZXVlICpxLA0KKwkJICAg ICAgaW50IGlkeCwgaW50IG5fZGVzYykNCit7DQorCXN0cnVjdCBtdDc2X3F1ZXVlICpod3E7DQor CWludCBlcnI7DQorDQorCWh3cSA9IGRldm1fa3phbGxvYyhkZXYtPm10NzYuZGV2LCBzaXplb2Yo Kmh3cSksIEdGUF9LRVJORUwpOw0KKwlpZiAoIWh3cSkNCisJCXJldHVybiAtRU5PTUVNOw0KKw0K KwllcnIgPSBtdDc2X3F1ZXVlX2FsbG9jKGRldiwgaHdxLCBpZHgsIG5fZGVzYywgMCwgTVRfVFhf UklOR19CQVNFKTsNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0KKwlJTklUX0xJ U1RfSEVBRCgmcS0+c3dxKTsNCisJcS0+cSA9IGh3cTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3ZvaWQgbXQ3OTE1X3F1ZXVlX3J4X3NrYihzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGVudW0gbXQ3 Nl9yeHFfaWQgcSwNCisJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYgPSBjb250YWluZXJfb2YobWRldiwgc3RydWN0IG10NzkxNV9kZXYsIG10NzYp Ow0KKwlfX2xlMzIgKnJ4ZCA9IChfX2xlMzIgKilza2ItPmRhdGE7DQorCWVudW0gcnhfcGt0X3R5 cGUgdHlwZTsNCisNCisJdHlwZSA9IEZJRUxEX0dFVChNVF9SWEQwX1BLVF9UWVBFLCBsZTMyX3Rv X2NwdShyeGRbMF0pKTsNCisNCisJc3dpdGNoICh0eXBlKSB7DQorCWNhc2UgUEtUX1RZUEVfVFhS WF9OT1RJRlk6DQorCQltdDc5MTVfbWFjX3R4X2ZyZWUoZGV2LCBza2IpOw0KKwkJYnJlYWs7DQor CWNhc2UgUEtUX1RZUEVfUlhfRVZFTlQ6DQorCQltdDc5MTVfbWN1X3J4X2V2ZW50KGRldiwgc2ti KTsNCisJCWJyZWFrOw0KKwljYXNlIFBLVF9UWVBFX05PUk1BTDoNCisJCWlmICghbXQ3OTE1X21h Y19maWxsX3J4KGRldiwgc2tiKSkgew0KKwkJCW10NzZfcngoJmRldi0+bXQ3NiwgcSwgc2tiKTsN CisJCQlyZXR1cm47DQorCQl9DQorCQkvKiBmYWxsIHRocm91Z2ggKi8NCisJZGVmYXVsdDoNCisJ CWRldl9rZnJlZV9za2Ioc2tiKTsNCisJCWJyZWFrOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQg bXQ3OTE1X3BvbGxfdHgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQ0KK3sN CisJc3RhdGljIGNvbnN0IHU4IHF1ZXVlX21hcFtdID0gew0KKwkJTVRfVFhRX01DVSwNCisJCU1U X1RYUV9NQ1VfV0EsDQorCQlNVF9UWFFfQkUNCisJfTsNCisJc3RydWN0IG10NzkxNV9kZXYgKmRl djsNCisJaW50IGk7DQorDQorCWRldiA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgbXQ3OTE1 X2RldiwgbXQ3Ni50eF9uYXBpKTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocXVl dWVfbWFwKTsgaSsrKQ0KKwkJbXQ3Nl9xdWV1ZV90eF9jbGVhbnVwKGRldiwgcXVldWVfbWFwW2ld LCBmYWxzZSk7DQorDQorCWlmIChuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgMCkpDQorCQltdDc5 MTVfaXJxX2VuYWJsZShkZXYsIE1UX0lOVF9UWF9ET05FX0FMTCk7DQorDQorCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKHF1ZXVlX21hcCk7IGkrKykNCisJCW10NzZfcXVldWVfdHhfY2xlYW51 cChkZXYsIHF1ZXVlX21hcFtpXSwgZmFsc2UpOw0KKw0KKwltdDc5MTVfbWFjX3N0YV9wb2xsKGRl dik7DQorDQorCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+bXQ3Ni50eF90YXNrbGV0KTsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X2RtYV9wcmVmZXRjaChzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2KQ0KK3sNCisjZGVmaW5lIFBSRUZFVENIKGJhc2UsIGRlcHRoKQkoKGJhc2UpIDw8 IDE2IHwgKGRlcHRoKSkNCisNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMF9SWF9SSU5HMF9FWFRf Q1RSTCwgUFJFRkVUQ0goMHgwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMF9SWF9S SU5HMV9FWFRfQ1RSTCwgUFJFRkVUQ0goMHg0MCwgMHg0KSk7DQorCW10NzZfd3IoZGV2LCBNVF9X RkRNQTBfUlhfUklORzJfRVhUX0NUUkwsIFBSRUZFVENIKDB4ODAsIDB4MCkpOw0KKw0KKwltdDc2 X3dyKGRldiwgTVRfV0ZETUExX1RYX1JJTkcwX0VYVF9DVFJMLCBQUkVGRVRDSCgweDgwLCAweDQp KTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMV9FWFRfQ1RSTCwgUFJFRkVUQ0go MHhjMCwgMHg0KSk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfVFhfUklORzJfRVhUX0NUUkws IFBSRUZFVENIKDB4MTAwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5H M19FWFRfQ1RSTCwgUFJFRkVUQ0goMHgxNDAsIDB4NCkpOw0KKwltdDc2X3dyKGRldiwgTVRfV0ZE TUExX1RYX1JJTkc0X0VYVF9DVFJMLCBQUkVGRVRDSCgweDE4MCwgMHg0KSk7DQorCW10NzZfd3Io ZGV2LCBNVF9XRkRNQTFfVFhfUklORzVfRVhUX0NUUkwsIFBSRUZFVENIKDB4MWMwLCAweDQpKTsN CisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HNl9FWFRfQ1RSTCwgUFJFRkVUQ0goMHgy MDAsIDB4NCkpOw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUExX1RYX1JJTkc3X0VYVF9DVFJMLCBQ UkVGRVRDSCgweDI0MCwgMHg0KSk7DQorDQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfVFhfUklO RzE2X0VYVF9DVFJMLCBQUkVGRVRDSCgweDI4MCwgMHg0KSk7DQorCW10NzZfd3IoZGV2LCBNVF9X RkRNQTFfVFhfUklORzE3X0VYVF9DVFJMLCBQUkVGRVRDSCgweDJjMCwgMHg0KSk7DQorCW10NzZf d3IoZGV2LCBNVF9XRkRNQTFfVFhfUklORzE4X0VYVF9DVFJMLCBQUkVGRVRDSCgweDMwMCwgMHg0 KSk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfVFhfUklORzE5X0VYVF9DVFJMLCBQUkVGRVRD SCgweDM0MCwgMHg0KSk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfVFhfUklORzIwX0VYVF9D VFJMLCBQUkVGRVRDSCgweDM4MCwgMHg0KSk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfVFhf UklORzIxX0VYVF9DVFJMLCBQUkVGRVRDSCgweDNjMCwgMHgwKSk7DQorDQorCW10NzZfd3IoZGV2 LCBNVF9XRkRNQTFfUlhfUklORzBfRVhUX0NUUkwsIFBSRUZFVENIKDB4M2MwLCAweDQpKTsNCisJ bXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9SWF9SSU5HMV9FWFRfQ1RSTCwgUFJFRkVUQ0goMHg0MDAs IDB4NCkpOw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUExX1JYX1JJTkcyX0VYVF9DVFJMLCBQUkVG RVRDSCgweDQ0MCwgMHg0KSk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfUlhfUklORzNfRVhU X0NUUkwsIFBSRUZFVENIKDB4NDgwLCAweDApKTsNCit9DQorDQoraW50IG10NzkxNV9kbWFfaW5p dChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJaW50IHJldDsNCisNCisJbXQ3Nl9kbWFf YXR0YWNoKCZkZXYtPm10NzYpOw0KKw0KKwkvKiBjb25maWd1cmUgZ2xvYmFsIHNldHRpbmcgKi8N CisJbXQ3Nl9zZXQoZGV2LCBNVF9XRkRNQTFfR0xPX0NGRywNCisJCSBNVF9XRkRNQTFfR0xPX0NG R19PTUlUX1RYX0lORk8gfA0KKwkJIE1UX1dGRE1BMV9HTE9fQ0ZHX09NSVRfUlhfSU5GTyk7DQor DQorCS8qIGNvbmZpZ3VyZSBwZXJmZXRjaCBzZXR0aW5ncyAqLw0KKwltdDc5MTVfZG1hX3ByZWZl dGNoKGRldik7DQorDQorCS8qIHJlc2V0IGRtYSBpZHggKi8NCisJbXQ3Nl93cihkZXYsIE1UX1dG RE1BMF9SU1RfRFRYX1BUUiwgfjApOw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUExX1JTVF9EVFhf UFRSLCB+MCk7DQorDQorCS8qIGNvbmZpZ3VyZSBkZWxheSBpbnRlcnJ1cHQgKi8NCisJbXQ3Nl93 cihkZXYsIE1UX1dGRE1BMF9QUklfRExZX0lOVF9DRkcwLCAwKTsNCisJbXQ3Nl93cihkZXYsIE1U X1dGRE1BMV9QUklfRExZX0lOVF9DRkcwLCAwKTsNCisNCisJLyogaW5pdCB0eCBxdWV1ZSAqLw0K KwlyZXQgPSBtdDc5MTVfaW5pdF90eF9xdWV1ZXMoZGV2LCBNVDc5MTVfVFhfUklOR19TSVpFKTsN CisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCS8qIGNvbW1hbmQgdG8gV00gKi8NCisJ cmV0ID0gbXQ3OTE1X2luaXRfbWN1X3F1ZXVlKGRldiwgJmRldi0+bXQ3Ni5xX3R4W01UX1RYUV9N Q1VdLA0KKwkJCQkgICAgTVQ3OTE1X1RYUV9NQ1VfV00sDQorCQkJCSAgICBNVDc5MTVfVFhfTUNV X1JJTkdfU0laRSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkvKiBjb21tYW5k IHRvIFdBICovDQorCXJldCA9IG10NzkxNV9pbml0X21jdV9xdWV1ZShkZXYsICZkZXYtPm10NzYu cV90eFtNVF9UWFFfTUNVX1dBXSwNCisJCQkJICAgIE1UNzkxNV9UWFFfTUNVX1dBLA0KKwkJCQkg ICAgTVQ3OTE1X1RYX01DVV9SSU5HX1NJWkUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsN CisNCisJLyogZmlybXdhcmUgZG93bmxvYWQgKi8NCisJcmV0ID0gbXQ3OTE1X2luaXRfbWN1X3F1 ZXVlKGRldiwgJmRldi0+bXQ3Ni5xX3R4W01UX1RYUV9GV0RMXSwNCisJCQkJICAgIE1UNzkxNV9U WFFfRldETCwNCisJCQkJICAgIE1UNzkxNV9UWF9GV0RMX1JJTkdfU0laRSk7DQorCWlmIChyZXQp DQorCQlyZXR1cm4gcmV0Ow0KKw0KKwkvKiBldmVudCBmcm9tIFdNICovDQorCXJldCA9IG10NzZf cXVldWVfYWxsb2MoZGV2LCAmZGV2LT5tdDc2LnFfcnhbTVRfUlhRX01DVV0sDQorCQkJICAgICAg IE1UNzkxNV9SWFFfTUNVX1dNLCBNVDc5MTVfUlhfTUNVX1JJTkdfU0laRSwNCisJCQkgICAgICAg TVRfUlhfQlVGX1NJWkUsIE1UX1JYX0VWRU5UX1JJTkdfQkFTRSk7DQorCWlmIChyZXQpDQorCQly ZXR1cm4gcmV0Ow0KKw0KKwkvKiBldmVudCBmcm9tIFdBICovDQorCXJldCA9IG10NzZfcXVldWVf YWxsb2MoZGV2LCAmZGV2LT5tdDc2LnFfcnhbTVRfUlhRX01DVV9XQV0sDQorCQkJICAgICAgIE1U NzkxNV9SWFFfTUNVX1dBLCBNVDc5MTVfUlhfTUNVX1JJTkdfU0laRSwNCisJCQkgICAgICAgTVRf UlhfQlVGX1NJWkUsIE1UX1JYX0VWRU5UX1JJTkdfQkFTRSk7DQorCWlmIChyZXQpDQorCQlyZXR1 cm4gcmV0Ow0KKw0KKwkvKiByeCBkYXRhICovDQorCXJldCA9IG10NzZfcXVldWVfYWxsb2MoZGV2 LCAmZGV2LT5tdDc2LnFfcnhbTVRfUlhRX01BSU5dLCAwLA0KKwkJCSAgICAgICBNVDc5MTVfUlhf UklOR19TSVpFLCBNVF9SWF9CVUZfU0laRSwNCisJCQkgICAgICAgTVRfUlhfREFUQV9SSU5HX0JB U0UpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gbXQ3Nl9pbml0X3F1 ZXVlcyhkZXYpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCW5ldGlmX3R4 X25hcGlfYWRkKCZkZXYtPm10NzYubmFwaV9kZXYsICZkZXYtPm10NzYudHhfbmFwaSwNCisJCQkg IG10NzkxNV9wb2xsX3R4LCBOQVBJX1BPTExfV0VJR0hUKTsNCisJbmFwaV9lbmFibGUoJmRldi0+ bXQ3Ni50eF9uYXBpKTsNCisNCisJLyogaGlmIHdhaXQgV0ZETUEgaWRsZSAqLw0KKwltdDc2X3Nl dChkZXYsIE1UX1dGRE1BMF9CVVNZX0VOQSwNCisJCSBNVF9XRkRNQTBfQlVTWV9FTkFfVFhfRklG TzAgfA0KKwkJIE1UX1dGRE1BMF9CVVNZX0VOQV9UWF9GSUZPMSB8DQorCQkgTVRfV0ZETUEwX0JV U1lfRU5BX1JYX0ZJRk8pOw0KKw0KKwltdDc2X3NldChkZXYsIE1UX1dGRE1BMV9CVVNZX0VOQSwN CisJCSBNVF9XRkRNQTFfQlVTWV9FTkFfVFhfRklGTzAgfA0KKwkJIE1UX1dGRE1BMV9CVVNZX0VO QV9UWF9GSUZPMSB8DQorCQkgTVRfV0ZETUExX0JVU1lfRU5BX1JYX0ZJRk8pOw0KKw0KKwltdDc2 X3NldChkZXYsIE1UX1dGRE1BMF9QQ0lFMV9CVVNZX0VOQSwNCisJCSBNVF9XRkRNQTBfUENJRTFf QlVTWV9FTkFfVFhfRklGTzAgfA0KKwkJIE1UX1dGRE1BMF9QQ0lFMV9CVVNZX0VOQV9UWF9GSUZP MSB8DQorCQkgTVRfV0ZETUEwX1BDSUUxX0JVU1lfRU5BX1JYX0ZJRk8pOw0KKw0KKwltdDc2X3Nl dChkZXYsIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VOQSwNCisJCSBNVF9XRkRNQTFfUENJRTFfQlVT WV9FTkFfVFhfRklGTzAgfA0KKwkJIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VOQV9UWF9GSUZPMSB8 DQorCQkgTVRfV0ZETUExX1BDSUUxX0JVU1lfRU5BX1JYX0ZJRk8pOw0KKw0KKwltdDc2X3BvbGwo ZGV2LCBNVF9XRkRNQV9FWFRfQ1NSX0hJRl9NSVNDLA0KKwkJICBNVF9XRkRNQV9FWFRfQ1NSX0hJ Rl9NSVNDX0JVU1ksIDAsIDEwMDApOw0KKw0KKwkvKiBzZXQgV0ZETUEgVHgvUnggKi8NCisJbXQ3 Nl9zZXQoZGV2LCBNVF9XRkRNQTBfR0xPX0NGRywNCisJCSBNVF9XRkRNQTBfR0xPX0NGR19UWF9E TUFfRU4gfCBNVF9XRkRNQTBfR0xPX0NGR19SWF9ETUFfRU4pOw0KKwltdDc2X3NldChkZXYsIE1U X1dGRE1BMV9HTE9fQ0ZHLA0KKwkJIE1UX1dGRE1BMV9HTE9fQ0ZHX1RYX0RNQV9FTiB8IE1UX1dG RE1BMV9HTE9fQ0ZHX1JYX0RNQV9FTik7DQorDQorCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciBU WC9SWCByaW5ncyAqLw0KKwltdDc5MTVfaXJxX2VuYWJsZShkZXYsIE1UX0lOVF9SWF9ET05FX0FM TCB8IE1UX0lOVF9UWF9ET05FX0FMTCB8DQorCQkJICBNVF9JTlRfTUNVX0NNRCk7DQorDQorCXJl dHVybiAwOw0KK30NCisNCit2b2lkIG10NzkxNV9kbWFfY2xlYW51cChzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2KQ0KK3sNCisJLyogZGlzYWJsZSAqLw0KKwltdDc2X2NsZWFyKGRldiwgTVRfV0ZETUEw X0dMT19DRkcsDQorCQkgICBNVF9XRkRNQTBfR0xPX0NGR19UWF9ETUFfRU4gfA0KKwkJICAgTVRf V0ZETUEwX0dMT19DRkdfUlhfRE1BX0VOKTsNCisJbXQ3Nl9jbGVhcihkZXYsIE1UX1dGRE1BMV9H TE9fQ0ZHLA0KKwkJICAgTVRfV0ZETUExX0dMT19DRkdfVFhfRE1BX0VOIHwNCisJCSAgIE1UX1dG RE1BMV9HTE9fQ0ZHX1JYX0RNQV9FTik7DQorDQorCS8qIHJlc2V0ICovDQorCW10NzZfY2xlYXIo ZGV2LCBNVF9XRkRNQTFfUlNULA0KKwkJICAgTVRfV0ZETUExX1JTVF9ETUFTSERMX0FMTF9SU1Qg fA0KKwkJICAgTVRfV0ZETUExX1JTVF9MT0dJQ19SU1QpOw0KKw0KKwltdDc2X3NldChkZXYsIE1U X1dGRE1BMV9SU1QsDQorCQkgTVRfV0ZETUExX1JTVF9ETUFTSERMX0FMTF9SU1QgfA0KKwkJIE1U X1dGRE1BMV9SU1RfTE9HSUNfUlNUKTsNCisNCisJbXQ3Nl9jbGVhcihkZXYsIE1UX1dGRE1BMF9S U1QsDQorCQkgICBNVF9XRkRNQTBfUlNUX0RNQVNIRExfQUxMX1JTVCB8DQorCQkgICBNVF9XRkRN QTBfUlNUX0xPR0lDX1JTVCk7DQorDQorCW10NzZfc2V0KGRldiwgTVRfV0ZETUEwX1JTVCwNCisJ CSBNVF9XRkRNQTBfUlNUX0RNQVNIRExfQUxMX1JTVCB8DQorCQkgTVRfV0ZETUEwX1JTVF9MT0dJ Q19SU1QpOw0KKw0KKwl0YXNrbGV0X2tpbGwoJmRldi0+bXQ3Ni50eF90YXNrbGV0KTsNCisJbXQ3 Nl9kbWFfY2xlYW51cCgmZGV2LT5tdDc2KTsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv d2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJl bGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9lZXByb20uYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAwMC4uMjA5OWRkNDA1MzBmDQotLS0gL2Rldi9udWxsDQorKysgYi9k cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9lZXByb20uYw0KQEAgLTAs MCArMSwxMjUgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDDQorLyogQ29weXJp Z2h0IChDKSAyMDIwIE1lZGlhVGVrIEluYy4gKi8NCisNCisjaW5jbHVkZSAibXQ3OTE1LmgiDQor I2luY2x1ZGUgImVlcHJvbS5oIg0KKw0KK3N0YXRpYyBpbmxpbmUgYm9vbCBtdDc5MTVfZWZ1c2Vf dmFsaWQodTggdmFsKQ0KK3sNCisJcmV0dXJuICEodmFsID09IDB4ZmYpOw0KK30NCisNCit1MzIg bXQ3OTE1X2VlcHJvbV9yZWFkKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBvZmZzZXQpDQor ew0KKwl1OCAqZGF0YSA9IGRldi0+bXQ3Ni5lZXByb20uZGF0YTsNCisNCisJaWYgKCFtdDc5MTVf ZWZ1c2VfdmFsaWQoZGF0YVtvZmZzZXRdKSkNCisJCW10NzkxNV9tY3VfZ2V0X2VlcHJvbShkZXYs IG9mZnNldCk7DQorDQorCXJldHVybiBkYXRhW29mZnNldF07DQorfQ0KKw0KK3N0YXRpYyBpbnQg bXQ3OTE1X2VlcHJvbV9sb2FkKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlpbnQgcmV0 Ow0KKw0KKwlyZXQgPSBtdDc2X2VlcHJvbV9pbml0KCZkZXYtPm10NzYsIE1UNzkxNV9FRVBST01f U0laRSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJbWVtc2V0KGRldi0+ bXQ3Ni5lZXByb20uZGF0YSwgLTEsIE1UNzkxNV9FRVBST01fU0laRSk7DQorDQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9jaGVja19lZXByb20oc3RydWN0IG10NzkxNV9k ZXYgKmRldikNCit7DQorCXUxNiB2YWw7DQorCXU4ICplZXByb20gPSBkZXYtPm10NzYuZWVwcm9t LmRhdGE7DQorDQorCW10NzkxNV9lZXByb21fcmVhZChkZXYsIDApOw0KKwl2YWwgPSBnZXRfdW5h bGlnbmVkX2xlMTYoZWVwcm9tKTsNCisNCisJc3dpdGNoICh2YWwpIHsNCisJY2FzZSAweDc5MTU6 DQorCQlyZXR1cm4gMDsNCisJZGVmYXVsdDoNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIG10NzkxNV9lZXByb21fcGFyc2VfaHdfY2FwKHN0cnVjdCBtdDc5MTVf ZGV2ICpkZXYpDQorew0KKwl1OCAqZWVwcm9tID0gZGV2LT5tdDc2LmVlcHJvbS5kYXRhOw0KKwl1 OCB0eF9tYXNrLCBtYXhfbnNzID0gNDsNCisJdTMyIHZhbCA9IG10NzkxNV9lZXByb21fcmVhZChk ZXYsIE1UX0VFX1dJRklfQ09ORik7DQorDQorCXZhbCA9IEZJRUxEX0dFVChNVF9FRV9XSUZJX0NP TkZfQkFORF9TRUwsIHZhbCk7DQorCXN3aXRjaCAodmFsKSB7DQorCWNhc2UgTVRfRUVfNUdIWjoN CisJCWRldi0+bXQ3Ni5jYXAuaGFzXzVnaHogPSB0cnVlOw0KKwkJYnJlYWs7DQorCWNhc2UgTVRf RUVfMkdIWjoNCisJCWRldi0+bXQ3Ni5jYXAuaGFzXzJnaHogPSB0cnVlOw0KKwkJYnJlYWs7DQor CWRlZmF1bHQ6DQorCQlkZXYtPm10NzYuY2FwLmhhc18yZ2h6ID0gdHJ1ZTsNCisJCWRldi0+bXQ3 Ni5jYXAuaGFzXzVnaHogPSB0cnVlOw0KKwkJYnJlYWs7DQorCX0NCisNCisJLyogcmVhZCB0eCBt YXNrIGZyb20gZWVwcm9tICovDQorCXR4X21hc2sgPSAgRklFTERfR0VUKE1UX0VFX1dJRklfQ09O Rl9UWF9NQVNLLA0KKwkJCSAgICAgZWVwcm9tW01UX0VFX1dJRklfQ09ORl0pOw0KKwlpZiAoIXR4 X21hc2sgfHwgdHhfbWFzayA+IG1heF9uc3MpDQorCQl0eF9tYXNrID0gbWF4X25zczsNCisNCisJ ZGV2LT5jaGFpbm1hc2sgPSBCSVQodHhfbWFzaykgLSAxOw0KKwlkZXYtPm1waHkuYW50ZW5uYV9t YXNrID0gZGV2LT5jaGFpbm1hc2s7DQorCWRldi0+cGh5LmNoYWlubWFzayA9IGRldi0+Y2hhaW5t YXNrOw0KK30NCisNCitpbnQgbXQ3OTE1X2VlcHJvbV9pbml0KHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYpDQorew0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBtdDc5MTVfZWVwcm9tX2xvYWQoZGV2KTsN CisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBtdDc5MTVfY2hlY2tf ZWVwcm9tKGRldik7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwltdDc5MTVfZWVw cm9tX3BhcnNlX2h3X2NhcChkZXYpOw0KKwltZW1jcHkoZGV2LT5tdDc2Lm1hY2FkZHIsIGRldi0+ bXQ3Ni5lZXByb20uZGF0YSArIE1UX0VFX01BQ19BRERSLA0KKwkgICAgICAgRVRIX0FMRU4pOw0K Kw0KKwltdDc2X2VlcHJvbV9vdmVycmlkZSgmZGV2LT5tdDc2KTsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK2ludCBtdDc5MTVfZWVwcm9tX2dldF90YXJnZXRfcG93ZXIoc3RydWN0IG10NzkxNV9k ZXYgKmRldiwNCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLA0KKwkJCQkg ICB1OCBjaGFpbl9pZHgpDQorew0KKwlpbnQgaW5kZXg7DQorCWJvb2wgdHNzaV9vbjsNCisNCisJ aWYgKGNoYWluX2lkeCA+IDMpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJdHNzaV9vbiA9IG10 NzkxNV90c3NpX2VuYWJsZWQoZGV2LCBjaGFuLT5iYW5kKTsNCisNCisJaWYgKGNoYW4tPmJhbmQg PT0gTkw4MDIxMV9CQU5EXzJHSFopIHsNCisJCWluZGV4ID0gTVRfRUVfVFgwX1BPV0VSXzJHICsg Y2hhaW5faWR4ICogMyArICF0c3NpX29uOw0KKwl9IGVsc2Ugew0KKwkJaW50IGdyb3VwID0gdHNz aV9vbiA/DQorCQkJICAgIG10NzkxNV9nZXRfY2hhbm5lbF9ncm91cChjaGFuLT5od192YWx1ZSkg OiA4Ow0KKw0KKwkJaW5kZXggPSBNVF9FRV9UWDBfUE9XRVJfNUcgKyBjaGFpbl9pZHggKiAxMiAr IGdyb3VwOw0KKwl9DQorDQorCXJldHVybiBtdDc5MTVfZWVwcm9tX3JlYWQoZGV2LCBpbmRleCk7 DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3 OTE1L2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUv ZWVwcm9tLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjMwZmM2 MDdlNDY2ZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0 ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmgNCkBAIC0wLDAgKzEsNzggQEANCisvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogSVNDICovDQorLyogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVrIElu Yy4gKi8NCisNCisjaWZuZGVmIF9fTVQ3OTE1X0VFUFJPTV9IDQorI2RlZmluZSBfX01UNzkxNV9F RVBST01fSA0KKw0KKyNpbmNsdWRlICJtdDc5MTUuaCINCisNCitzdHJ1Y3QgY2FsX2RhdGEgew0K Kwl1OCBjb3VudDsNCisJdTE2IG9mZnNldFs2MF07DQorfTsNCisNCitlbnVtIG10NzkxNV9lZXBy b21fZmllbGQgew0KKwlNVF9FRV9DSElQX0lEID0JCTB4MDAwLA0KKwlNVF9FRV9WRVJTSU9OID0J CTB4MDAyLA0KKwlNVF9FRV9NQUNfQUREUiA9CTB4MDA0LA0KKwlNVF9FRV9ERElFX0ZUX1ZFUlNJ T04gPQkweDA1MCwNCisJTVRfRUVfV0lGSV9DT05GID0JMHgxOTAsDQorCU1UX0VFX1RYMF9QT1dF Ul8yRyA9CTB4MmZjLA0KKwlNVF9FRV9UWDBfUE9XRVJfNUcgPQkweDM0YiwNCisJTVRfRUVfQURJ RV9GVF9WRVJTSU9OID0JMHg5YTAsDQorDQorCV9fTVRfRUVfTUFYID0JCTB4ZTAwDQorfTsNCisN CisjZGVmaW5lIE1UX0VFX1dJRklfQ09ORl9UWF9NQVNLCQkJR0VOTUFTSygyLCAwKQ0KKyNkZWZp bmUgTVRfRUVfV0lGSV9DT05GX0JBTkRfU0VMCQlHRU5NQVNLKDcsIDYpDQorI2RlZmluZSBNVF9F RV9XSUZJX0NPTkZfVFNTSTBfMkcJCUJJVCgwKQ0KKyNkZWZpbmUgTVRfRUVfV0lGSV9DT05GX1RT U0kwXzVHCQlCSVQoMikNCisjZGVmaW5lIE1UX0VFX1dJRklfQ09ORl9UU1NJMV81RwkJQklUKDQp DQorDQorZW51bSBtdDc5MTVfZWVwcm9tX2JhbmQgew0KKwlNVF9FRV9EVUFMX0JBTkQsDQorCU1U X0VFXzVHSFosDQorCU1UX0VFXzJHSFosDQorCU1UX0VFX0RCREMsDQorfTsNCisNCitzdHJ1Y3Qg c2t1X2dyb3VwIHsNCisJdTggbGVuOw0KKwl1MTYgb2Zmc2V0WzJdOw0KKwljb25zdCB1OCAqZGVs dGFfbWFwOw0KK307DQorDQorc3RhdGljIGlubGluZSBpbnQNCittdDc5MTVfZ2V0X2NoYW5uZWxf Z3JvdXAoaW50IGNoYW5uZWwpDQorew0KKwlpZiAoY2hhbm5lbCA+PSAxODQgJiYgY2hhbm5lbCA8 PSAxOTYpDQorCQlyZXR1cm4gMDsNCisJaWYgKGNoYW5uZWwgPD0gNDgpDQorCQlyZXR1cm4gMTsN CisJaWYgKGNoYW5uZWwgPD0gNjQpDQorCQlyZXR1cm4gMjsNCisJaWYgKGNoYW5uZWwgPD0gOTYp DQorCQlyZXR1cm4gMzsNCisJaWYgKGNoYW5uZWwgPD0gMTEyKQ0KKwkJcmV0dXJuIDQ7DQorCWlm IChjaGFubmVsIDw9IDEyOCkNCisJCXJldHVybiA1Ow0KKwlpZiAoY2hhbm5lbCA8PSAxNDQpDQor CQlyZXR1cm4gNjsNCisJcmV0dXJuIDc7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgYm9vbA0KK210 NzkxNV90c3NpX2VuYWJsZWQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgZW51bSBubDgwMjExX2Jh bmQgYmFuZCkNCit7DQorCXU4ICplZXAgPSBkZXYtPm10NzYuZWVwcm9tLmRhdGE7DQorDQorCS8q IFRPRE86IERCREMgKi8NCisJaWYgKGJhbmQgPT0gTkw4MDIxMV9CQU5EXzVHSFopDQorCQlyZXR1 cm4gZWVwW01UX0VFX1dJRklfQ09ORiArIDddICYgTVRfRUVfV0lGSV9DT05GX1RTU0kwXzVHOw0K KwllbHNlDQorCQlyZXR1cm4gZWVwW01UX0VFX1dJRklfQ09ORiArIDddICYgTVRfRUVfV0lGSV9D T05GX1RTU0kwXzJHOw0KK30NCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93 aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVz cy9tZWRpYXRlay9tdDc2L210NzkxNS9pbml0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwMDAuLjU0MjE4MjE5MzBkNA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvaW5pdC5jDQpAQCAtMCwwICsxLDM5 MyBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MNCisvKiBDb3B5cmlnaHQgKEMp IDIwMjAgTWVkaWFUZWsgSW5jLiAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5o Pg0KKyNpbmNsdWRlICJtdDc5MTUuaCINCisjaW5jbHVkZSAibWFjLmgiDQorI2luY2x1ZGUgImVl cHJvbS5oIg0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21hY19pbml0X2JhbmQoc3RydWN0IG10 NzkxNV9kZXYgKmRldiwgdTggYmFuZCkNCit7DQorCXUzMiBtYXNrLCBzZXQ7DQorDQorCW10NzZf cm13X2ZpZWxkKGRldiwgTVRfVE1BQ19DVENSMChiYW5kKSwNCisJCSAgICAgICBNVF9UTUFDX0NU Q1IwX0lOU19ERExNVF9SRUZUSU1FLCAweDNmKTsNCisJbXQ3Nl9zZXQoZGV2LCBNVF9UTUFDX0NU Q1IwKGJhbmQpLA0KKwkJIE1UX1RNQUNfQ1RDUjBfSU5TX0RETE1UX1ZIVF9TTVBEVV9FTiB8DQor CQkgTVRfVE1BQ19DVENSMF9JTlNfRERMTVRfRU4pOw0KKw0KKwltYXNrID0gTVRfTURQX1JDRlIw X01DVV9SWF9NR01UIHwNCisJICAgICAgIE1UX01EUF9SQ0ZSMF9NQ1VfUlhfQ1RMX05PTl9CQVIg fA0KKwkgICAgICAgTVRfTURQX1JDRlIwX01DVV9SWF9DVExfQkFSOw0KKwlzZXQgPSBGSUVMRF9Q UkVQKE1UX01EUF9SQ0ZSMF9NQ1VfUlhfTUdNVCwgTVRfTURQX1RPX0hJRikgfA0KKwkgICAgICBG SUVMRF9QUkVQKE1UX01EUF9SQ0ZSMF9NQ1VfUlhfQ1RMX05PTl9CQVIsIE1UX01EUF9UT19ISUYp IHwNCisJICAgICAgRklFTERfUFJFUChNVF9NRFBfUkNGUjBfTUNVX1JYX0NUTF9CQVIsIE1UX01E UF9UT19ISUYpOw0KKwltdDc2X3JtdyhkZXYsIE1UX01EUF9CTlJDRlIwKGJhbmQpLCBtYXNrLCBz ZXQpOw0KKw0KKwltYXNrID0gTVRfTURQX1JDRlIxX01DVV9SWF9CWVBBU1MgfA0KKwkgICAgICAg TVRfTURQX1JDRlIxX1JYX0RST1BQRURfVUNBU1QgfA0KKwkgICAgICAgTVRfTURQX1JDRlIxX1JY X0RST1BQRURfTUNBU1Q7DQorCXNldCA9IEZJRUxEX1BSRVAoTVRfTURQX1JDRlIxX01DVV9SWF9C WVBBU1MsIE1UX01EUF9UT19ISUYpIHwNCisJICAgICAgRklFTERfUFJFUChNVF9NRFBfUkNGUjFf UlhfRFJPUFBFRF9VQ0FTVCwgTVRfTURQX1RPX0hJRikgfA0KKwkgICAgICBGSUVMRF9QUkVQKE1U X01EUF9SQ0ZSMV9SWF9EUk9QUEVEX01DQVNULCBNVF9NRFBfVE9fSElGKTsNCisJbXQ3Nl9ybXco ZGV2LCBNVF9NRFBfQk5SQ0ZSMShiYW5kKSwgbWFzaywgc2V0KTsNCisNCisJbXQ3Nl9zZXQoZGV2 LCBNVF9XRl9STUFDX01JQl9USU1FMChiYW5kKSwgTVRfV0ZfUk1BQ19NSUJfUlhUSU1FX0VOKTsN CisJbXQ3Nl9zZXQoZGV2LCBNVF9XRl9STUFDX01JQl9BSVJUSU1FMChiYW5kKSwgTVRfV0ZfUk1B Q19NSUJfUlhUSU1FX0VOKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXQ3OTE1X21hY19pbml0KHN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlpbnQgaTsNCisNCisJbXQ3Nl9ybXdfZmllbGQo ZGV2LCBNVF9ETUFfRENSMCwgTVRfRE1BX0RDUjBfTUFYX1JYX0xFTiwgMTUzNik7DQorCW10NzZf cm13X2ZpZWxkKGRldiwgTVRfTURQX0RDUjEsIE1UX01EUF9EQ1IxX01BWF9SWF9MRU4sIDE1MzYp Ow0KKwkvKiBlbmFibGUgcnggcmF0ZSByZXBvcnQgKi8NCisJbXQ3Nl9zZXQoZGV2LCBNVF9ETUFf RENSMCwgTVRfRE1BX0RDUjBfUlhEX0c1X0VOKTsNCisJLyogZGlzYWJsZSBoYXJkd2FyZSBkZS1h Z2cgKi8NCisJbXQ3Nl9jbGVhcihkZXYsIE1UX01EUF9EQ1IwLCBNVF9NRFBfRENSMF9EQU1TRFVf RU4pOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgTVQ3OTE1X1dUQkxfU0laRTsgaSsrKQ0KKwkJbXQ3 OTE1X21hY193dGJsX3VwZGF0ZShkZXYsIGksDQorCQkJCSAgICAgICBNVF9XVEJMX1VQREFURV9B RE1fQ09VTlRfQ0xFQVIpOw0KKw0KKwltdDc5MTVfbWFjX2luaXRfYmFuZChkZXYsIDApOw0KKwlt dDc5MTVfbWFjX2luaXRfYmFuZChkZXYsIDEpOw0KKwltdDc5MTVfbWN1X3NldF9ydHNfdGhyZXNo KCZkZXYtPnBoeSwgMHg5MmIpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9pbml0X3R4 cG93ZXJfYmFuZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSBzdHJ1Y3QgaWVlZTgwMjEx X3N1cHBvcnRlZF9iYW5kICpzYmFuZCkNCit7DQorCWludCBpLCBuX2NoYWlucyA9IGh3ZWlnaHQ4 KGRldi0+bXBoeS5hbnRlbm5hX21hc2spOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5f Y2hhbm5lbHM7IGkrKykgew0KKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gJnNi YW5kLT5jaGFubmVsc1tpXTsNCisJCXUzMiB0YXJnZXRfcG93ZXIgPSAwOw0KKwkJaW50IGo7DQor DQorCQlmb3IgKGogPSAwOyBqIDwgbl9jaGFpbnM7IGorKykgew0KKwkJCXUzMiB2YWw7DQorDQor CQkJdmFsID0gbXQ3OTE1X2VlcHJvbV9nZXRfdGFyZ2V0X3Bvd2VyKGRldiwgY2hhbiwgaik7DQor CQkJdGFyZ2V0X3Bvd2VyID0gbWF4KHRhcmdldF9wb3dlciwgdmFsKTsNCisJCX0NCisNCisJCWNo YW4tPm1heF9wb3dlciA9IG1pbl90KGludCwgY2hhbi0+bWF4X3JlZ19wb3dlciwNCisJCQkJCXRh cmdldF9wb3dlciAvIDIpOw0KKwkJY2hhbi0+b3JpZ19tcHdyID0gdGFyZ2V0X3Bvd2VyIC8gMjsN CisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBtdDc5MTVfaW5pdF90eHBvd2VyKHN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYpDQorew0KKwltdDc5MTVfaW5pdF90eHBvd2VyX2JhbmQoZGV2LCAmZGV2LT5t cGh5LnNiYW5kXzJnLnNiYW5kKTsNCisJbXQ3OTE1X2luaXRfdHhwb3dlcl9iYW5kKGRldiwgJmRl di0+bXBoeS5zYmFuZF81Zy5zYmFuZCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10NzkxNV9pbml0 X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYg KmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXQ3OTE1X2RldiwNCisJCQkJIGluaXRf d29yayk7DQorDQorCW10NzkxNV9tY3Vfc2V0X2VlcHJvbShkZXYpOw0KKwltdDc5MTVfbWFjX2lu aXQoZGV2KTsNCisJbXQ3OTE1X2luaXRfdHhwb3dlcihkZXYpOw0KK30NCisNCitzdGF0aWMgaW50 IG10NzkxNV9pbml0X2hhcmR3YXJlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlpbnQg cmV0LCBpZHg7DQorDQorCW10NzZfd3IoZGV2LCBNVF9JTlRfU09VUkNFX0NTUiwgfjApOw0KKw0K KwlJTklUX1dPUksoJmRldi0+aW5pdF93b3JrLCBtdDc5MTVfaW5pdF93b3JrKTsNCisJc3Bpbl9s b2NrX2luaXQoJmRldi0+dG9rZW5fbG9jayk7DQorCWlkcl9pbml0KCZkZXYtPnRva2VuKTsNCisN CisJcmV0ID0gbXQ3OTE1X2RtYV9pbml0KGRldik7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0 Ow0KKw0KKwlzZXRfYml0KE1UNzZfU1RBVEVfSU5JVElBTElaRUQsICZkZXYtPm1waHkuc3RhdGUp Ow0KKw0KKwlyZXQgPSBtdDc5MTVfbWN1X2luaXQoZGV2KTsNCisJaWYgKHJldCkNCisJCXJldHVy biByZXQ7DQorDQorCXJldCA9IG10NzkxNV9lZXByb21faW5pdChkZXYpOw0KKwlpZiAocmV0IDwg MCkNCisJCXJldHVybiByZXQ7DQorDQorCS8qIEJlYWNvbiBhbmQgbWdtdCBmcmFtZXMgc2hvdWxk IG9jY3VweSB3Y2lkIDAgKi8NCisJaWR4ID0gbXQ3Nl93Y2lkX2FsbG9jKGRldi0+bXQ3Ni53Y2lk X21hc2ssIE1UNzkxNV9XVEJMX1NUQSAtIDEpOw0KKwlpZiAoaWR4KQ0KKwkJcmV0dXJuIC1FTk9T UEM7DQorDQorCWRldi0+bXQ3Ni5nbG9iYWxfd2NpZC5pZHggPSBpZHg7DQorCWRldi0+bXQ3Ni5n bG9iYWxfd2NpZC5od19rZXlfaWR4ID0gLTE7DQorCWRldi0+bXQ3Ni5nbG9iYWxfd2NpZC50eF9p bmZvIHw9IE1UX1dDSURfVFhfSU5GT19TRVQ7DQorCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPm10 NzYud2NpZFtpZHhdLCAmZGV2LT5tdDc2Lmdsb2JhbF93Y2lkKTsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KKyNkZWZpbmUgQ0NLX1JBVEUoX2lkeCwgX3JhdGUpIHsJCQkJCQlcDQorCS5iaXRyYXRl ID0gX3JhdGUsCQkJCQkJXA0KKwkuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJM RSwJCQkJXA0KKwkuaHdfdmFsdWUgPSAoTVRfUEhZX1RZUEVfQ0NLIDw8IDgpIHwgKF9pZHgpLAkJ CVwNCisJLmh3X3ZhbHVlX3Nob3J0ID0gKE1UX1BIWV9UWVBFX0NDSyA8PCA4KSB8ICg0ICsgKF9p ZHgpKSwJXA0KK30NCisNCisjZGVmaW5lIE9GRE1fUkFURShfaWR4LCBfcmF0ZSkgewkJCQkJXA0K KwkuYml0cmF0ZSA9IF9yYXRlLAkJCQkJCVwNCisJLmh3X3ZhbHVlID0gKE1UX1BIWV9UWVBFX09G RE0gPDwgOCkgfCAoX2lkeCksCQkJXA0KKwkuaHdfdmFsdWVfc2hvcnQgPSAoTVRfUEhZX1RZUEVf T0ZETSA8PCA4KSB8IChfaWR4KSwJCVwNCit9DQorDQorc3RhdGljIHN0cnVjdCBpZWVlODAyMTFf cmF0ZSBtdDc5MTVfcmF0ZXNbXSA9IHsNCisJQ0NLX1JBVEUoMCwgMTApLA0KKwlDQ0tfUkFURSgx LCAyMCksDQorCUNDS19SQVRFKDIsIDU1KSwNCisJQ0NLX1JBVEUoMywgMTEwKSwNCisJT0ZETV9S QVRFKDExLCA2MCksDQorCU9GRE1fUkFURSgxNSwgOTApLA0KKwlPRkRNX1JBVEUoMTAsIDEyMCks DQorCU9GRE1fUkFURSgxNCwgMTgwKSwNCisJT0ZETV9SQVRFKDksICAyNDApLA0KKwlPRkRNX1JB VEUoMTMsIDM2MCksDQorCU9GRE1fUkFURSg4LCAgNDgwKSwNCisJT0ZETV9SQVRFKDEyLCA1NDAp LA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZf bGltaXRzW10gPSB7DQorCXsNCisJCS5tYXggPSAxLA0KKwkJLnR5cGVzID0gQklUKE5MODAyMTFf SUZUWVBFX0FESE9DKQ0KKwl9LCB7DQorCQkubWF4ID0gTVQ3OTE1X01BWF9JTlRFUkZBQ0VTLA0K KwkJLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8DQorI2lmZGVmIENPTkZJR19NQUM4 MDIxMV9NRVNIDQorCQkJIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8DQorI2VuZGlm DQorCQkJIEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQ0KKwl9DQorfTsNCisNCitzdGF0aWMg Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiBpZl9jb21iW10gPSB7DQor CXsNCisJCS5saW1pdHMgPSBpZl9saW1pdHMsDQorCQkubl9saW1pdHMgPSBBUlJBWV9TSVpFKGlm X2xpbWl0cyksDQorCQkubWF4X2ludGVyZmFjZXMgPSA0LA0KKwkJLm51bV9kaWZmZXJlbnRfY2hh bm5lbHMgPSAxLA0KKwkJLmJlYWNvbl9pbnRfaW5mcmFfbWF0Y2ggPSB0cnVlLA0KKwkJLnJhZGFy X2RldGVjdF93aWR0aHMgPSBCSVQoTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQpIHwNCisJCQkJ ICAgICAgIEJJVChOTDgwMjExX0NIQU5fV0lEVEhfMjApIHwNCisJCQkJICAgICAgIEJJVChOTDgw MjExX0NIQU5fV0lEVEhfNDApIHwNCisJCQkJICAgICAgIEJJVChOTDgwMjExX0NIQU5fV0lEVEhf ODApIHwNCisJCQkJICAgICAgIEJJVChOTDgwMjExX0NIQU5fV0lEVEhfMTYwKSB8DQorCQkJCSAg ICAgICBCSVQoTkw4MDIxMV9DSEFOX1dJRFRIXzgwUDgwKSwNCisJfQ0KK307DQorDQorc3RhdGlj IHZvaWQNCittdDc5MTVfcmVnZF9ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LA0KKwkJICAg ICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQ0KK3sNCisJc3RydWN0IGllZWU4 MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOw0KKwlzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQorCXN0cnVjdCBtdDc2X3BoeSAqbXBo eSA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXBoeS0+cHJpdjsNCisJ c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmID0gJm1waHktPmNoYW5kZWY7DQorDQor CWRldi0+bXQ3Ni5yZWdpb24gPSByZXF1ZXN0LT5kZnNfcmVnaW9uOw0KKw0KKwlpZiAoIShjaGFu ZGVmLT5jaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSkNCisJCXJldHVybjsNCisN CisJbXQ3OTE1X2Rmc19pbml0X3JhZGFyX2RldGVjdG9yKHBoeSk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorbXQ3OTE1X2luaXRfd2lwaHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQorew0KKwlz dHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7DQorCXN0cnVjdCB3aXBo eSAqd2lwaHkgPSBody0+d2lwaHk7DQorDQorCWh3LT5xdWV1ZXMgPSA0Ow0KKwlody0+bWF4X3J4 X2FnZ3JlZ2F0aW9uX3N1YmZyYW1lcyA9IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGOw0KKwlody0+ bWF4X3R4X2FnZ3JlZ2F0aW9uX3N1YmZyYW1lcyA9IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGOw0K Kw0KKwlwaHktPnNsb3R0aW1lID0gOTsNCisNCisJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yo c3RydWN0IG10NzkxNV9zdGEpOw0KKwlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg bXQ3OTE1X3ZpZik7DQorDQorCXdpcGh5LT5pZmFjZV9jb21iaW5hdGlvbnMgPSBpZl9jb21iOw0K Kwl3aXBoeS0+bl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKGlmX2NvbWIpOw0KKwl3 aXBoeS0+cmVnX25vdGlmaWVyID0gbXQ3OTE1X3JlZ2Rfbm90aWZpZXI7DQorCXdpcGh5LT5mbGFn cyB8PSBXSVBIWV9GTEFHX0hBU19DSEFOTkVMX1NXSVRDSDsNCisNCisJd2lwaHlfZXh0X2ZlYXR1 cmVfc2V0KHdpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX1ZIVF9JQlNTKTsNCisNCisJaWVlZTgw MjExX2h3X3NldChodywgSEFTX1JBVEVfQ09OVFJPTCk7DQorDQorCWh3LT5tYXhfdHhfZnJhZ21l bnRzID0gNDsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfY2FwX2RiZGNfZW5hYmxlKHN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlkZXYtPm1waHkuc2JhbmRfNWcuc2JhbmQudmh0 X2NhcC5jYXAgJj0NCisJCQl+KElFRUU4MDIxMV9WSFRfQ0FQX1NIT1JUX0dJXzE2MCB8DQorCQkJ ICBJRUVFODAyMTFfVkhUX0NBUF9TVVBQX0NIQU5fV0lEVEhfMTYwXzgwUExVUzgwTUhaKTsNCisN CisJaWYgKGRldi0+Y2hhaW5tYXNrID09IDB4ZikNCisJCWRldi0+bXBoeS5hbnRlbm5hX21hc2sg PSBkZXYtPmNoYWlubWFzayA+PiAyOw0KKwllbHNlDQorCQlkZXYtPm1waHkuYW50ZW5uYV9tYXNr ID0gZGV2LT5jaGFpbm1hc2sgPj4gMTsNCisNCisJZGV2LT5waHkuY2hhaW5tYXNrID0gZGV2LT5t cGh5LmFudGVubmFfbWFzazsNCisJZGV2LT5tcGh5Lmh3LT53aXBoeS0+YXZhaWxhYmxlX2FudGVu bmFzX3J4ID0gZGV2LT5waHkuY2hhaW5tYXNrOw0KKwlkZXYtPm1waHkuaHctPndpcGh5LT5hdmFp bGFibGVfYW50ZW5uYXNfdHggPSBkZXYtPnBoeS5jaGFpbm1hc2s7DQorDQorCW10NzZfc2V0X3N0 cmVhbV9jYXBzKCZkZXYtPm10NzYsIHRydWUpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210Nzkx NV9jYXBfZGJkY19kaXNhYmxlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlkZXYtPm1w aHkuc2JhbmRfNWcuc2JhbmQudmh0X2NhcC5jYXAgfD0NCisJCQlJRUVFODAyMTFfVkhUX0NBUF9T SE9SVF9HSV8xNjAgfA0KKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX1NVUFBfQ0hBTl9XSURUSF8xNjBf ODBQTFVTODBNSFo7DQorDQorCWRldi0+bXBoeS5hbnRlbm5hX21hc2sgPSBkZXYtPmNoYWlubWFz azsNCisJZGV2LT5waHkuY2hhaW5tYXNrID0gZGV2LT5jaGFpbm1hc2s7DQorCWRldi0+bXBoeS5o dy0+d2lwaHktPmF2YWlsYWJsZV9hbnRlbm5hc19yeCA9IGRldi0+Y2hhaW5tYXNrOw0KKwlkZXYt Pm1waHkuaHctPndpcGh5LT5hdmFpbGFibGVfYW50ZW5uYXNfdHggPSBkZXYtPmNoYWlubWFzazsN CisNCisJbXQ3Nl9zZXRfc3RyZWFtX2NhcHMoJmRldi0+bXQ3NiwgdHJ1ZSk7DQorfQ0KKw0KK2lu dCBtdDc5MTVfcmVnaXN0ZXJfZXh0X3BoeShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJ c3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9leHRfcGh5KGRldik7DQorCXN0cnVjdCBt dDc2X3BoeSAqbXBoeTsNCisJaW50IHJldDsNCisJYm9vbCBib3VuZDsNCisNCisJLyogVE9ETzog ZW5ibGUgREJEQyAqLw0KKwlib3VuZCA9IG10NzkxNV9sMV9ycihkZXYsIE1UX0hXX0JPVU5EKSAm IEJJVCg1KTsNCisJaWYgKCFib3VuZCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpZiAodGVz dF9iaXQoTVQ3Nl9TVEFURV9SVU5OSU5HLCAmZGV2LT5tcGh5LnN0YXRlKSkNCisJCXJldHVybiAt RUlOVkFMOw0KKw0KKwlpZiAocGh5KQ0KKwkJcmV0dXJuIDA7DQorDQorCW10NzkxNV9jYXBfZGJk Y19lbmFibGUoZGV2KTsNCisJbXBoeSA9IG10NzZfYWxsb2NfcGh5KCZkZXYtPm10NzYsIHNpemVv ZigqcGh5KSwgJm10NzkxNV9vcHMpOw0KKwlpZiAoIW1waHkpDQorCQlyZXR1cm4gLUVOT01FTTsN CisNCisJcGh5ID0gbXBoeS0+cHJpdjsNCisJcGh5LT5kZXYgPSBkZXY7DQorCXBoeS0+bXQ3NiA9 IG1waHk7DQorCXBoeS0+Y2hhaW5tYXNrID0gZGV2LT5jaGFpbm1hc2sgJiB+ZGV2LT5waHkuY2hh aW5tYXNrOw0KKwltcGh5LT5hbnRlbm5hX21hc2sgPSBCSVQoaHdlaWdodDgocGh5LT5jaGFpbm1h c2spKSAtIDE7DQorCW10NzkxNV9pbml0X3dpcGh5KG1waHktPmh3KTsNCisNCisJLyoNCisJICog TWFrZSB0aGUgc2Vjb25kYXJ5IFBIWSBNQUMgYWRkcmVzcyBsb2NhbCB3aXRob3V0IG92ZXJsYXBw aW5nIHdpdGgNCisJICogdGhlIHVzdWFsIE1BQyBhZGRyZXNzIGFsbG9jYXRpb24gc2NoZW1lIG9u IG11bHRpcGxlIHZpcnR1YWwgaW50ZXJmYWNlcw0KKwkgKi8NCisJbXBoeS0+aHctPndpcGh5LT5w ZXJtX2FkZHJbMF0gfD0gMjsNCisJbXBoeS0+aHctPndpcGh5LT5wZXJtX2FkZHJbMF0gXj0gQklU KDcpOw0KKw0KKwkvKiBUaGUgc2Vjb25kIGludGVyZmFjZSBkb2VzIG5vdCBnZXQgYW55IHBhY2tl dHMgdW5sZXNzIGl0IGhhcyBhIHZpZiAqLw0KKwlpZWVlODAyMTFfaHdfc2V0KG1waHktPmh3LCBX QU5UX01PTklUT1JfVklGKTsNCisNCisJcmV0ID0gbXQ3Nl9yZWdpc3Rlcl9waHkobXBoeSk7DQor CWlmIChyZXQpDQorCQlpZWVlODAyMTFfZnJlZV9odyhtcGh5LT5odyk7DQorDQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X3VucmVnaXN0ZXJfZXh0X3BoeShzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2KQ0KK3sNCisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9leHRfcGh5 KGRldik7DQorCXN0cnVjdCBtdDc2X3BoeSAqbXBoeSA9IGRldi0+bXQ3Ni5waHkyOw0KKw0KKwlp ZiAoIXBoeSkNCisJCXJldHVybjsNCisNCisJbXQ3OTE1X2NhcF9kYmRjX2Rpc2FibGUoZGV2KTsN CisJbXQ3Nl91bnJlZ2lzdGVyX3BoeShtcGh5KTsNCisJaWVlZTgwMjExX2ZyZWVfaHcobXBoeS0+ aHcpOw0KK30NCisNCitpbnQgbXQ3OTE1X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2KQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtdDc2X2h3KGRldik7DQor CWludCByZXQ7DQorDQorCWRldi0+cGh5LmRldiA9IGRldjsNCisJZGV2LT5waHkubXQ3NiA9ICZk ZXYtPm10NzYucGh5Ow0KKwlkZXYtPm10NzYucGh5LnByaXYgPSAmZGV2LT5waHk7DQorCUlOSVRf REVMQVlFRF9XT1JLKCZkZXYtPm10NzYubWFjX3dvcmssIG10NzkxNV9tYWNfd29yayk7DQorCUlO SVRfTElTVF9IRUFEKCZkZXYtPnN0YV9wb2xsX2xpc3QpOw0KKwlzcGluX2xvY2tfaW5pdCgmZGV2 LT5zdGFfcG9sbF9sb2NrKTsNCisNCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5yZXNldF93 YWl0KTsNCisJSU5JVF9XT1JLKCZkZXYtPnJlc2V0X3dvcmssIG10NzkxNV9tYWNfcmVzZXRfd29y ayk7DQorDQorCXJldCA9IG10NzkxNV9pbml0X2hhcmR3YXJlKGRldik7DQorCWlmIChyZXQpDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwltdDc5MTVfaW5pdF93aXBoeShodyk7DQorCWRldi0+bXBoeS5z YmFuZF8yZy5zYmFuZC5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfTERQQ19DT0RJTkc7 DQorCWRldi0+bXBoeS5zYmFuZF81Zy5zYmFuZC5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9D QVBfTERQQ19DT0RJTkc7DQorCWRldi0+bXBoeS5zYmFuZF81Zy5zYmFuZC52aHRfY2FwLmNhcCB8 PQ0KKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9NUERVX0xFTkdUSF83OTkxIHwNCisJCQlJRUVF ODAyMTFfVkhUX0NBUF9NQVhfQV9NUERVX0xFTkdUSF9FWFBPTkVOVF9NQVNLOw0KKwltdDc5MTVf Y2FwX2RiZGNfZGlzYWJsZShkZXYpOw0KKwlkZXYtPnBoeS5kZnNfc3RhdGUgPSAtMTsNCisNCisJ cmV0ID0gbXQ3Nl9yZWdpc3Rlcl9kZXZpY2UoJmRldi0+bXQ3NiwgdHJ1ZSwgbXQ3OTE1X3JhdGVz LA0KKwkJCQkgICBBUlJBWV9TSVpFKG10NzkxNV9yYXRlcykpOw0KKwlpZiAocmV0KQ0KKwkJcmV0 dXJuIHJldDsNCisNCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsobXQ3Nl9odyhkZXYpLCAmZGV2LT5p bml0X3dvcmspOw0KKw0KKwlyZXR1cm4gbXQ3OTE1X2luaXRfZGVidWdmcyhkZXYpOw0KK30NCisN Cit2b2lkIG10NzkxNV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0K K3sNCisJc3RydWN0IG10NzZfdHh3aV9jYWNoZSAqdHh3aTsNCisJaW50IGlkOw0KKw0KKwltdDc5 MTVfdW5yZWdpc3Rlcl9leHRfcGh5KGRldik7DQorCW10NzZfdW5yZWdpc3Rlcl9kZXZpY2UoJmRl di0+bXQ3Nik7DQorCW10NzkxNV9tY3VfZXhpdChkZXYpOw0KKwltdDc5MTVfZG1hX2NsZWFudXAo ZGV2KTsNCisNCisJc3Bpbl9sb2NrX2JoKCZkZXYtPnRva2VuX2xvY2spOw0KKwlpZHJfZm9yX2Vh Y2hfZW50cnkoJmRldi0+dG9rZW4sIHR4d2ksIGlkKSB7DQorCQltdDc5MTVfdHhwX3NrYl91bm1h cCgmZGV2LT5tdDc2LCB0eHdpKTsNCisJCWlmICh0eHdpLT5za2IpDQorCQkJZGV2X2tmcmVlX3Nr Yl9hbnkodHh3aS0+c2tiKTsNCisJCW10NzZfcHV0X3R4d2koJmRldi0+bXQ3NiwgdHh3aSk7DQor CX0NCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+dG9rZW5fbG9jayk7DQorCWlkcl9kZXN0cm95KCZk ZXYtPnRva2VuKTsNCisNCisJbXQ3Nl9mcmVlX2RldmljZSgmZGV2LT5tdDc2KTsNCit9DQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmMg Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tYWMuYw0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uNTExYTZkMmU4ZGQxDQotLS0gL2Rl di9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9t YWMuYw0KQEAgLTAsMCArMSwxMzE3IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElT Qw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuICovDQorDQorI2luY2x1ZGUg PGxpbnV4L2V0aGVyZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3RpbWVrZWVwaW5nLmg+DQor I2luY2x1ZGUgIm10NzkxNS5oIg0KKyNpbmNsdWRlICIuLi9kbWEuaCINCisjaW5jbHVkZSAibWFj LmgiDQorDQorI2RlZmluZSB0b19yc3NpKGZpZWxkLCByeHYpCSgoRklFTERfR0VUKGZpZWxkLCBy eHYpIC0gMjIwKSAvIDIpDQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBtdDc5MTVfZGZzX3JhZGFy X3NwZWMgZXRzaV9yYWRhcl9zcGVjcyA9IHsNCisJLnB1bHNlX3RoID0geyAxMTAsIC0xMCwgLTgw LCA0MCwgNTIwMCwgMTI4LCA1MjAwIH0sDQorCS5yYWRhcl9wYXR0ZXJuID0gew0KKwkJWzVdID0g IHsgMSwgMCwgIDYsIDMyLCAyOCwgMCwgIDk5MCwgNTAxMCwgMTcsIDEsIDEgfSwNCisJCVs2XSA9 ICB7IDEsIDAsICA5LCAzMiwgMjgsIDAsICA2MTUsIDUwMTAsIDI3LCAxLCAxIH0sDQorCQlbN10g PSAgeyAxLCAwLCAxNSwgMzIsIDI4LCAwLCAgMjQwLCAgNDQ1LCAyNywgMSwgMSB9LA0KKwkJWzhd ID0gIHsgMSwgMCwgMTIsIDMyLCAyOCwgMCwgIDI0MCwgIDUxMCwgNDIsIDEsIDEgfSwNCisJCVs5 XSA9ICB7IDEsIDEsICAwLCAgMCwgIDAsIDAsIDI0OTAsIDMzNDMsIDE0LCAwLCAwLCAxMiwgMzIs IDI4LCB7IH0sIDEyNiB9LA0KKwkJWzEwXSA9IHsgMSwgMSwgIDAsICAwLCAgMCwgMCwgMjQ5MCwg MzM0MywgMTQsIDAsIDAsIDE1LCAzMiwgMjQsIHsgfSwgMTI2IH0sDQorCQlbMTFdID0geyAxLCAx LCAgMCwgIDAsICAwLCAwLCAgODIzLCAyNTEwLCAxNCwgMCwgMCwgMTgsIDMyLCAyOCwgeyB9LCAg NTQgfSwNCisJCVsxMl0gPSB7IDEsIDEsICAwLCAgMCwgIDAsIDAsICA4MjMsIDI1MTAsIDE0LCAw LCAwLCAyNywgMzIsIDI0LCB7IH0sICA1NCB9LA0KKwl9LA0KK307DQorDQorc3RhdGljIGNvbnN0 IHN0cnVjdCBtdDc5MTVfZGZzX3JhZGFyX3NwZWMgZmNjX3JhZGFyX3NwZWNzID0gew0KKwkucHVs c2VfdGggPSB7IDExMCwgLTEwLCAtODAsIDQwLCA1MjAwLCAxMjgsIDUyMDAgfSwNCisJLnJhZGFy X3BhdHRlcm4gPSB7DQorCQlbMF0gPSB7IDEsIDAsICA4LCAgMzIsIDI4LCAwLCA1MDgsIDMwNzYs IDEzLCAxLCAgMSB9LA0KKwkJWzFdID0geyAxLCAwLCAxMiwgIDMyLCAyOCwgMCwgMTQwLCAgMjQw LCAxNywgMSwgIDEgfSwNCisJCVsyXSA9IHsgMSwgMCwgIDgsICAzMiwgMjgsIDAsIDE5MCwgIDUx MCwgMjIsIDEsICAxIH0sDQorCQlbM10gPSB7IDEsIDAsICA2LCAgMzIsIDI4LCAwLCAxOTAsICA1 MTAsIDMyLCAxLCAgMSB9LA0KKwkJWzRdID0geyAxLCAwLCAgOSwgMjU1LCAyOCwgMCwgMzIzLCAg MzQzLCAxMywgMSwgMzIgfSwNCisJfSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3 OTE1X2Rmc19yYWRhcl9zcGVjIGpwX3JhZGFyX3NwZWNzID0gew0KKwkucHVsc2VfdGggPSB7IDEx MCwgLTEwLCAtODAsIDQwLCA1MjAwLCAxMjgsIDUyMDAgfSwNCisJLnJhZGFyX3BhdHRlcm4gPSB7 DQorCQlbMF0gPSAgeyAxLCAwLCAgOCwgIDMyLCAyOCwgMCwgIDUwOCwgMzA3NiwgIDEzLCAxLCAg MSB9LA0KKwkJWzFdID0gIHsgMSwgMCwgMTIsICAzMiwgMjgsIDAsICAxNDAsICAyNDAsICAxNywg MSwgIDEgfSwNCisJCVsyXSA9ICB7IDEsIDAsICA4LCAgMzIsIDI4LCAwLCAgMTkwLCAgNTEwLCAg MjIsIDEsICAxIH0sDQorCQlbM10gPSAgeyAxLCAwLCAgNiwgIDMyLCAyOCwgMCwgIDE5MCwgIDUx MCwgIDMyLCAxLCAgMSB9LA0KKwkJWzRdID0gIHsgMSwgMCwgIDksIDI1NSwgMjgsIDAsICAzMjMs ICAzNDMsICAxMywgMSwgMzIgfSwNCisJCVsxM10gPSB7IDEsIDAsICA3LCAgMzIsIDI4LCAwLCAz ODM2LCAzODU2LCAgMTQsIDEsICAxIH0sDQorCQlbMTRdID0geyAxLCAwLCAgNiwgIDMyLCAyOCwg MCwgIDYxNSwgNTAxMCwgMTEwLCAxLCAgMSB9LA0KKwkJWzE1XSA9IHsgMSwgMSwgIDAsICAgMCwg IDAsIDAsICAgMTUsIDUwMTAsIDExMCwgMCwgIDAsIDEyLCAzMiwgMjggfSwNCisJfSwNCit9Ow0K Kw0KK3N0YXRpYyBzdHJ1Y3QgbXQ3Nl93Y2lkICptdDc5MTVfcnhfZ2V0X3djaWQoc3RydWN0IG10 NzkxNV9kZXYgKmRldiwNCisJCQkJCSAgICB1MTYgaWR4LCBib29sIHVuaWNhc3QpDQorew0KKwlz dHJ1Y3QgbXQ3OTE1X3N0YSAqc3RhOw0KKwlzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkOw0KKw0KKwlp ZiAoaWR4ID49IEFSUkFZX1NJWkUoZGV2LT5tdDc2LndjaWQpKQ0KKwkJcmV0dXJuIE5VTEw7DQor DQorCXdjaWQgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5tdDc2LndjaWRbaWR4XSk7DQorCWlmICh1 bmljYXN0IHx8ICF3Y2lkKQ0KKwkJcmV0dXJuIHdjaWQ7DQorDQorCWlmICghd2NpZC0+c3RhKQ0K KwkJcmV0dXJuIE5VTEw7DQorDQorCXN0YSA9IGNvbnRhaW5lcl9vZih3Y2lkLCBzdHJ1Y3QgbXQ3 OTE1X3N0YSwgd2NpZCk7DQorCWlmICghc3RhLT52aWYpDQorCQlyZXR1cm4gTlVMTDsNCisNCisJ cmV0dXJuICZzdGEtPnZpZi0+c3RhLndjaWQ7DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X3N0YV9wcyhz dHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgcHMp DQorew0KK30NCisNCitib29sIG10NzkxNV9tYWNfd3RibF91cGRhdGUoc3RydWN0IG10NzkxNV9k ZXYgKmRldiwgaW50IGlkeCwgdTMyIG1hc2spDQorew0KKwltdDc2X3JtdyhkZXYsIE1UX1dUQkxf VVBEQVRFLCBNVF9XVEJMX1VQREFURV9XTEFOX0lEWCwNCisJCSBGSUVMRF9QUkVQKE1UX1dUQkxf VVBEQVRFX1dMQU5fSURYLCBpZHgpIHwgbWFzayk7DQorDQorCXJldHVybiBtdDc2X3BvbGwoZGV2 LCBNVF9XVEJMX1VQREFURSwgTVRfV1RCTF9VUERBVEVfQlVTWSwNCisJCQkgMCwgNTAwMCk7DQor fQ0KKw0KK3N0YXRpYyB1MzIgbXQ3OTE1X21hY193dGJsX2xtYWNfcmVhZChzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2LCB1MTYgd2NpZCwNCisJCQkJICAgICB1MTYgYWRkcikNCit7DQorCW10NzZfd3Io ZGV2LCBNVF9XVEJMT05fVE9QX1dEVUNSLA0KKwkJRklFTERfUFJFUChNVF9XVEJMT05fVE9QX1dE VUNSX0dST1VQLCAod2NpZCA+PiA3KSkpOw0KKw0KKwlyZXR1cm4gbXQ3Nl9ycihkZXYsIE1UX1dU QkxfTE1BQ19PRkZTKHdjaWQsIGFkZHIpKTsNCit9DQorDQorLyogVE9ETzogdXNlIHR4ZnJlZSBh aXJ0aW1lIGluZm8gdG8gYXZvaWQgcnVudGltZSBhY2Nlc3NpbmcgaW4gdGhlIGxvbmcgcnVuICov DQordm9pZCBtdDc5MTVfbWFjX3N0YV9wb2xsKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0K KwlzdGF0aWMgY29uc3QgdTggYWNfdG9fdGlkW10gPSB7DQorCQlbSUVFRTgwMjExX0FDX0JFXSA9 IDAsDQorCQlbSUVFRTgwMjExX0FDX0JLXSA9IDEsDQorCQlbSUVFRTgwMjExX0FDX1ZJXSA9IDQs DQorCQlbSUVFRTgwMjExX0FDX1ZPXSA9IDYNCisJfTsNCisJc3RhdGljIGNvbnN0IHU4IGh3X3F1 ZXVlX21hcFtdID0gew0KKwkJW0lFRUU4MDIxMV9BQ19CS10gPSAwLA0KKwkJW0lFRUU4MDIxMV9B Q19CRV0gPSAxLA0KKwkJW0lFRUU4MDIxMV9BQ19WSV0gPSAyLA0KKwkJW0lFRUU4MDIxMV9BQ19W T10gPSAzLA0KKwl9Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOw0KKwlzdHJ1Y3QgbXQ3 OTE1X3N0YSAqbXN0YTsNCisJdTMyIHR4X3RpbWVbSUVFRTgwMjExX05VTV9BQ1NdLCByeF90aW1l W0lFRUU4MDIxMV9OVU1fQUNTXTsNCisJaW50IGk7DQorDQorCXJjdV9yZWFkX2xvY2soKTsNCisN CisJd2hpbGUgKHRydWUpIHsNCisJCWJvb2wgY2xlYXIgPSBmYWxzZTsNCisJCXUxNiBpZHg7DQor DQorCQlzcGluX2xvY2tfYmgoJmRldi0+c3RhX3BvbGxfbG9jayk7DQorCQlpZiAobGlzdF9lbXB0 eSgmZGV2LT5zdGFfcG9sbF9saXN0KSkgew0KKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnN0YV9w b2xsX2xvY2spOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJbXN0YSA9IGxpc3RfZmlyc3RfZW50cnko JmRldi0+c3RhX3BvbGxfbGlzdCwNCisJCQkJCXN0cnVjdCBtdDc5MTVfc3RhLCBwb2xsX2xpc3Qp Ow0KKwkJbGlzdF9kZWxfaW5pdCgmbXN0YS0+cG9sbF9saXN0KTsNCisJCXNwaW5fdW5sb2NrX2Jo KCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KKw0KKwkJZm9yIChpID0gMCwgaWR4ID0gbXN0YS0+d2Np ZC5pZHg7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7DQorCQkJdTMyIHR4X2xhc3QgPSBt c3RhLT5haXJ0aW1lX2FjW2ldOw0KKwkJCXUzMiByeF9sYXN0ID0gbXN0YS0+YWlydGltZV9hY1tp ICsgSUVFRTgwMjExX05VTV9BQ1NdOw0KKw0KKwkJCW1zdGEtPmFpcnRpbWVfYWNbaV0gPQ0KKwkJ CQltdDc5MTVfbWFjX3d0YmxfbG1hY19yZWFkKGRldiwgaWR4LCAyMCArIGkpOw0KKwkJCW1zdGEt PmFpcnRpbWVfYWNbaSArIElFRUU4MDIxMV9OVU1fQUNTXSA9DQorCQkJCW10NzkxNV9tYWNfd3Ri bF9sbWFjX3JlYWQoZGV2LCBpZHgsIDIxICsgaSk7DQorCQkJdHhfdGltZVtpXSA9IG1zdGEtPmFp cnRpbWVfYWNbaV0gLSB0eF9sYXN0Ow0KKwkJCXJ4X3RpbWVbaV0gPSBtc3RhLT5haXJ0aW1lX2Fj W2kgKyBJRUVFODAyMTFfTlVNX0FDU10gLQ0KKwkJCQkgICAgIHJ4X2xhc3Q7DQorDQorCQkJaWYg KCh0eF9sYXN0IHwgcnhfbGFzdCkgJiBCSVQoMzApKQ0KKwkJCQljbGVhciA9IHRydWU7DQorCQl9 DQorDQorCQlpZiAoY2xlYXIpIHsNCisJCQltdDc5MTVfbWFjX3d0YmxfdXBkYXRlKGRldiwgaWR4 LA0KKwkJCQkJICAgICAgIE1UX1dUQkxfVVBEQVRFX0FETV9DT1VOVF9DTEVBUik7DQorCQkJbWVt c2V0KG1zdGEtPmFpcnRpbWVfYWMsIDAsIHNpemVvZihtc3RhLT5haXJ0aW1lX2FjKSk7DQorCQl9 DQorDQorCQlpZiAoIW1zdGEtPndjaWQuc3RhKQ0KKwkJCWNvbnRpbnVlOw0KKw0KKwkJc3RhID0g Y29udGFpbmVyX29mKCh2b2lkICopbXN0YSwgc3RydWN0IGllZWU4MDIxMV9zdGEsDQorCQkJCSAg IGRydl9wcml2KTsNCisJCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7 DQorCQkJdTMyIHR4X2N1ciA9IHR4X3RpbWVbaV07DQorCQkJdTMyIHJ4X2N1ciA9IHJ4X3RpbWVb aHdfcXVldWVfbWFwW2ldXTsNCisJCQl1OCB0aWQgPSBhY190b190aWRbaV07DQorDQorCQkJaWYg KCF0eF9jdXIgJiYgIXJ4X2N1cikNCisJCQkJY29udGludWU7DQorDQorCQkJaWVlZTgwMjExX3N0 YV9yZWdpc3Rlcl9haXJ0aW1lKHN0YSwgdGlkLCB0eF9jdXIsDQorCQkJCQkJICAgICAgIHJ4X2N1 cik7DQorCQl9DQorCX0NCisNCisJcmN1X3JlYWRfdW5sb2NrKCk7DQorfQ0KKw0KK2ludCBtdDc5 MTVfbWFjX2ZpbGxfcngoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNr YikNCit7DQorCXN0cnVjdCBtdDc2X3J4X3N0YXR1cyAqc3RhdHVzID0gKHN0cnVjdCBtdDc2X3J4 X3N0YXR1cyAqKXNrYi0+Y2I7DQorCXN0cnVjdCBtdDc2X3BoeSAqbXBoeSA9ICZkZXYtPm10NzYu cGh5Ow0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gJmRldi0+cGh5Ow0KKwlzdHJ1Y3QgaWVl ZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsNCisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhk cjsNCisJc3RydWN0IG10NzkxNV9yeHYgcnh2ID0ge307DQorCV9fbGUzMiAqcnhkID0gKF9fbGUz MiAqKXNrYi0+ZGF0YTsNCisJdTMyIHJ4ZDEgPSBsZTMyX3RvX2NwdShyeGRbMV0pOw0KKwl1MzIg cnhkMiA9IGxlMzJfdG9fY3B1KHJ4ZFsyXSk7DQorCXUzMiByeGQzID0gbGUzMl90b19jcHUocnhk WzNdKTsNCisJYm9vbCB1bmljYXN0LCBpbnNlcnRfY2NtcF9oZHIgPSBmYWxzZTsNCisJdTggcmVt b3ZlX3BhZDsNCisJaW50IGksIGlkeDsNCisNCisJbWVtc2V0KHN0YXR1cywgMCwgc2l6ZW9mKCpz dGF0dXMpKTsNCisNCisJaWYgKHJ4ZDEgJiBNVF9SWEQxX05PUk1BTF9CQU5EX0lEWCkgew0KKwkJ bXBoeSA9IGRldi0+bXQ3Ni5waHkyOw0KKwkJaWYgKCFtcGh5KQ0KKwkJCXJldHVybiAtRUlOVkFM Ow0KKw0KKwkJcGh5ID0gbXBoeS0+cHJpdjsNCisJCXN0YXR1cy0+ZXh0X3BoeSA9IHRydWU7DQor CX0NCisNCisJaWYgKCF0ZXN0X2JpdChNVDc2X1NUQVRFX1JVTk5JTkcsICZtcGh5LT5zdGF0ZSkp DQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJdW5pY2FzdCA9IEZJRUxEX0dFVChNVF9SWEQzX05P Uk1BTF9BRERSX1RZUEUsIHJ4ZDMpID09IE1UX1JYRDNfTk9STUFMX1UyTTsNCisJaWR4ID0gRklF TERfR0VUKE1UX1JYRDFfTk9STUFMX1dMQU5fSURYLCByeGQxKTsNCisJc3RhdHVzLT53Y2lkID0g bXQ3OTE1X3J4X2dldF93Y2lkKGRldiwgaWR4LCB1bmljYXN0KTsNCisNCisJaWYgKHN0YXR1cy0+ d2NpZCkgew0KKwkJc3RydWN0IG10NzkxNV9zdGEgKm1zdGE7DQorDQorCQltc3RhID0gY29udGFp bmVyX29mKHN0YXR1cy0+d2NpZCwgc3RydWN0IG10NzkxNV9zdGEsIHdjaWQpOw0KKwkJc3Bpbl9s b2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KKwkJaWYgKGxpc3RfZW1wdHkoJm1zdGEtPnBv bGxfbGlzdCkpDQorCQkJbGlzdF9hZGRfdGFpbCgmbXN0YS0+cG9sbF9saXN0LCAmZGV2LT5zdGFf cG9sbF9saXN0KTsNCisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KKwl9 DQorDQorCXN0YXR1cy0+ZnJlcSA9IG1waHktPmNoYW5kZWYuY2hhbi0+Y2VudGVyX2ZyZXE7DQor CXN0YXR1cy0+YmFuZCA9IG1waHktPmNoYW5kZWYuY2hhbi0+YmFuZDsNCisJaWYgKHN0YXR1cy0+ YmFuZCA9PSBOTDgwMjExX0JBTkRfNUdIWikNCisJCXNiYW5kID0gJm1waHktPnNiYW5kXzVnLnNi YW5kOw0KKwllbHNlDQorCQlzYmFuZCA9ICZtcGh5LT5zYmFuZF8yZy5zYmFuZDsNCisNCisJaWYg KCFzYmFuZC0+Y2hhbm5lbHMpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaWYgKHJ4ZDEgJiBN VF9SWEQxX05PUk1BTF9GQ1NfRVJSKQ0KKwkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVE X0ZDU19DUkM7DQorDQorCWlmIChyeGQxICYgTVRfUlhEMV9OT1JNQUxfVEtJUF9NSUNfRVJSKQ0K KwkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsNCisNCisJaWYgKEZJRUxEX0dF VChNVF9SWEQxX05PUk1BTF9TRUNfTU9ERSwgcnhkMSkgIT0gMCAmJg0KKwkgICAgIShyeGQxICYg KE1UX1JYRDFfTk9STUFMX0NMTSB8IE1UX1JYRDFfTk9STUFMX0NNKSkpIHsNCisJCXN0YXR1cy0+ ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsNCisJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0lW X1NUUklQUEVEOw0KKwkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19TVFJJUFBFRCB8IFJY X0ZMQUdfTUlDX1NUUklQUEVEOw0KKwl9DQorDQorCWlmICghKHJ4ZDIgJiBNVF9SWEQyX05PUk1B TF9OT05fQU1QRFUpKSB7DQorCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19BTVBEVV9ERVRBSUxT Ow0KKw0KKwkJLyogYWxsIHN1YmZyYW1lcyBvZiBhbiBBLU1QRFUgaGF2ZSB0aGUgc2FtZSB0aW1l c3RhbXAgKi8NCisJCWlmIChwaHktPnJ4X2FtcGR1X3RzICE9IHJ4ZFsxNF0pIHsNCisJCQlpZiAo ISsrcGh5LT5hbXBkdV9yZWYpDQorCQkJCXBoeS0+YW1wZHVfcmVmKys7DQorCQl9DQorCQlwaHkt PnJ4X2FtcGR1X3RzID0gcnhkWzE0XTsNCisNCisJCXN0YXR1cy0+YW1wZHVfcmVmID0gcGh5LT5h bXBkdV9yZWY7DQorCX0NCisNCisJcmVtb3ZlX3BhZCA9IEZJRUxEX0dFVChNVF9SWEQyX05PUk1B TF9IRFJfT0ZGU0VULCByeGQyKTsNCisNCisJaWYgKHJ4ZDIgJiBNVF9SWEQyX05PUk1BTF9NQVhf TEVOX0VSUk9SKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCXJ4ZCArPSA2Ow0KKwlpZiAocnhk MSAmIE1UX1JYRDFfTk9STUFMX0dST1VQXzQpIHsNCisJCXJ4ZCArPSA0Ow0KKwkJaWYgKCh1OCAq KXJ4ZCAtIHNrYi0+ZGF0YSA+PSBza2ItPmxlbikNCisJCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0K Kw0KKwlpZiAocnhkMSAmIE1UX1JYRDFfTk9STUFMX0dST1VQXzEpIHsNCisJCXU4ICpkYXRhID0g KHU4ICopcnhkOw0KKw0KKwkJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSB7 DQorCQkJc3RhdHVzLT5pdlswXSA9IGRhdGFbNV07DQorCQkJc3RhdHVzLT5pdlsxXSA9IGRhdGFb NF07DQorCQkJc3RhdHVzLT5pdlsyXSA9IGRhdGFbM107DQorCQkJc3RhdHVzLT5pdlszXSA9IGRh dGFbMl07DQorCQkJc3RhdHVzLT5pdls0XSA9IGRhdGFbMV07DQorCQkJc3RhdHVzLT5pdls1XSA9 IGRhdGFbMF07DQorDQorCQkJaW5zZXJ0X2NjbXBfaGRyID0gRklFTERfR0VUKE1UX1JYRDJfTk9S TUFMX0ZSQUcsIHJ4ZDIpOw0KKwkJfQ0KKwkJcnhkICs9IDQ7DQorCQlpZiAoKHU4ICopcnhkIC0g c2tiLT5kYXRhID49IHNrYi0+bGVuKQ0KKwkJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCWlm IChyeGQxICYgTVRfUlhEMV9OT1JNQUxfR1JPVVBfMikgew0KKwkJcnhkICs9IDI7DQorCQlpZiAo KHU4ICopcnhkIC0gc2tiLT5kYXRhID49IHNrYi0+bGVuKQ0KKwkJCXJldHVybiAtRUlOVkFMOw0K Kwl9DQorDQorCS8qIFJYRCBHcm91cCAzIC0gUC1SWFYgKi8NCisJaWYgKHJ4ZDEgJiBNVF9SWEQx X05PUk1BTF9HUk9VUF8zKSB7DQorCQltZW1jcHkocnh2LnYsIHJ4ZCwgc2l6ZW9mKHJ4di52KSk7 DQorDQorCQlyeGQgKz0gMjsNCisJCWlmICgodTggKilyeGQgLSBza2ItPmRhdGEgPj0gc2tiLT5s ZW4pDQorCQkJcmV0dXJuIC1FSU5WQUw7DQorDQorCQlpZiAocnh2LnZbMF0gJiBNVF9QUlhWX0hU X0FEX0NPREUpDQorCQkJc3RhdHVzLT5lbmNfZmxhZ3MgfD0gUlhfRU5DX0ZMQUdfTERQQzsNCisN CisJCXN0YXR1cy0+Y2hhaW5zID0gbXBoeS0+YW50ZW5uYV9tYXNrOw0KKwkJc3RhdHVzLT5jaGFp bl9zaWduYWxbMF0gPSB0b19yc3NpKE1UX1BSWFZfUkNQSTAsIHJ4di52WzFdKTsNCisJCXN0YXR1 cy0+Y2hhaW5fc2lnbmFsWzFdID0gdG9fcnNzaShNVF9QUlhWX1JDUEkxLCByeHYudlsxXSk7DQor CQlzdGF0dXMtPmNoYWluX3NpZ25hbFsyXSA9IHRvX3Jzc2koTVRfUFJYVl9SQ1BJMiwgcnh2LnZb MV0pOw0KKwkJc3RhdHVzLT5jaGFpbl9zaWduYWxbM10gPSB0b19yc3NpKE1UX1BSWFZfUkNQSTMs IHJ4di52WzFdKTsNCisJCXN0YXR1cy0+c2lnbmFsID0gc3RhdHVzLT5jaGFpbl9zaWduYWxbMF07 DQorDQorCQlmb3IgKGkgPSAxOyBpIDwgaHdlaWdodDgobXBoeS0+YW50ZW5uYV9tYXNrKTsgaSsr KSB7DQorCQkJaWYgKCEoc3RhdHVzLT5jaGFpbnMgJiBCSVQoaSkpKQ0KKwkJCQljb250aW51ZTsN CisNCisJCQlzdGF0dXMtPnNpZ25hbCA9IG1heChzdGF0dXMtPnNpZ25hbCwNCisJCQkJCSAgICAg c3RhdHVzLT5jaGFpbl9zaWduYWxbaV0pOw0KKwkJfQ0KKw0KKwkJLyogUlhEIEdyb3VwIDUgLSBD LVJYViAqLw0KKwkJaWYgKHJ4ZDEgJiBNVF9SWEQxX05PUk1BTF9HUk9VUF81KSB7DQorCQkJdTgg c3RiYyA9IEZJRUxEX0dFVChNVF9DUlhWX0hUX1NUQkMsIHJ4di52WzJdKTsNCisJCQl1OCBnaSA9 IEZJRUxEX0dFVChNVF9DUlhWX0hUX1NIT1JUX0dJLCByeHYudlsyXSk7DQorCQkJYm9vbCBjY2sg PSBmYWxzZTsNCisNCisJCQlyeGQgKz0gMTg7DQorCQkJaWYgKCh1OCAqKXJ4ZCAtIHNrYi0+ZGF0 YSA+PSBza2ItPmxlbikNCisJCQkJcmV0dXJuIC1FSU5WQUw7DQorDQorCQkJaWR4ID0gaSA9IEZJ RUxEX0dFVChNVF9QUlhWX1RYX1JBVEUsIHJ4di52WzBdKTsNCisJCQlyeHYucGh5ID0gRklFTERf R0VUKE1UX0NSWFZfVFhfTU9ERSwgcnh2LnZbMl0pOw0KKw0KKwkJCXN3aXRjaCAocnh2LnBoeSkg ew0KKwkJCWNhc2UgTVRfUEhZX1RZUEVfQ0NLOg0KKwkJCQljY2sgPSB0cnVlOw0KKwkJCQkvKiBm YWxsIHRocm91Z2ggKi8NCisJCQljYXNlIE1UX1BIWV9UWVBFX09GRE06DQorCQkJCWkgPSBtdDc2 X2dldF9yYXRlKCZkZXYtPm10NzYsIHNiYW5kLCBpLCBjY2spOw0KKwkJCQlicmVhazsNCisJCQlj YXNlIE1UX1BIWV9UWVBFX0hUX0dGOg0KKwkJCWNhc2UgTVRfUEhZX1RZUEVfSFQ6DQorCQkJCXN0 YXR1cy0+ZW5jb2RpbmcgPSBSWF9FTkNfSFQ7DQorCQkJCWlmIChpID4gMzEpDQorCQkJCQlyZXR1 cm4gLUVJTlZBTDsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBNVF9QSFlfVFlQRV9WSFQ6DQorCQkJ CXN0YXR1cy0+bnNzID0NCisJCQkJCUZJRUxEX0dFVChNVF9QUlhWX05TVFMsIHJ4di52WzBdKSAr IDE7DQorCQkJCXN0YXR1cy0+ZW5jb2RpbmcgPSBSWF9FTkNfVkhUOw0KKwkJCQlpZiAoaSA+IDkp DQorCQkJCQlyZXR1cm4gLUVJTlZBTDsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBNVF9QSFlfVFlQ RV9IRV9NVToNCisJCQkJLyogZmFsbCB0aHJvdWdoICovDQorCQkJY2FzZSBNVF9QSFlfVFlQRV9I RV9TVToNCisJCQljYXNlIE1UX1BIWV9UWVBFX0hFX0VYVF9TVToNCisJCQljYXNlIE1UX1BIWV9U WVBFX0hFX1RCOg0KKwkJCQlzdGF0dXMtPm5zcyA9DQorCQkJCQlGSUVMRF9HRVQoTVRfUFJYVl9O U1RTLCByeHYudlswXSkgKyAxOw0KKwkJCQlzdGF0dXMtPmVuY29kaW5nID0gUlhfRU5DX0hFOw0K KwkJCQlpICY9IEdFTk1BU0soMywgMCk7DQorDQorCQkJCWlmIChnaSA8PSBOTDgwMjExX1JBVEVf SU5GT19IRV9HSV8zXzIpDQorCQkJCQlzdGF0dXMtPmhlX2dpID0gZ2k7DQorDQorCQkJCWlmIChp ZHggJiBNVF9QUlhWX1RYX0RDTSkNCisJCQkJCXN0YXR1cy0+aGVfZGNtID0gdHJ1ZTsNCisJCQkJ YnJlYWs7DQorCQkJZGVmYXVsdDoNCisJCQkJcmV0dXJuIC1FSU5WQUw7DQorCQkJfQ0KKwkJCXN0 YXR1cy0+cmF0ZV9pZHggPSBpOw0KKw0KKwkJCXN3aXRjaCAoRklFTERfR0VUKE1UX0NSWFZfRlJB TUVfTU9ERSwgcnh2LnZbMl0pKSB7DQorCQkJY2FzZSBJRUVFODAyMTFfU1RBX1JYX0JXXzIwOg0K KwkJCQlicmVhazsNCisJCQljYXNlIElFRUU4MDIxMV9TVEFfUlhfQldfNDA6DQorCQkJCWlmIChy eHYucGh5ICYgTVRfUEhZX1RZUEVfSEVfRVhUX1NVICYmDQorCQkJCSAgICAoaWR4ICYgTVRfUFJY Vl9UWF9FUl9TVV8xMDZUKSkgew0KKwkJCQkJc3RhdHVzLT5idyA9IFJBVEVfSU5GT19CV19IRV9S VTsNCisJCQkJCXN0YXR1cy0+aGVfcnUgPQ0KKwkJCQkJCU5MODAyMTFfUkFURV9JTkZPX0hFX1JV X0FMTE9DXzEwNjsNCisJCQkJfSBlbHNlIHsNCisJCQkJCXN0YXR1cy0+YncgPSBSQVRFX0lORk9f QldfNDA7DQorCQkJCX0NCisJCQkJYnJlYWs7DQorCQkJY2FzZSBJRUVFODAyMTFfU1RBX1JYX0JX XzgwOg0KKwkJCQlzdGF0dXMtPmJ3ID0gUkFURV9JTkZPX0JXXzgwOw0KKwkJCQlicmVhazsNCisJ CQljYXNlIElFRUU4MDIxMV9TVEFfUlhfQldfMTYwOg0KKwkJCQlzdGF0dXMtPmJ3ID0gUkFURV9J TkZPX0JXXzE2MDsNCisJCQkJYnJlYWs7DQorCQkJZGVmYXVsdDoNCisJCQkJcmV0dXJuIC1FSU5W QUw7DQorCQkJfQ0KKw0KKwkJCXN0YXR1cy0+ZW5jX2ZsYWdzIHw9IFJYX0VOQ19GTEFHX1NUQkNf TUFTSyAqIHN0YmM7DQorCQkJaWYgKHJ4di5waHkgPCBNVF9QSFlfVFlQRV9IRV9TVSAmJiBnaSkN CisJCQkJc3RhdHVzLT5lbmNfZmxhZ3MgfD0gUlhfRU5DX0ZMQUdfU0hPUlRfR0k7DQorCQl9DQor CX0NCisNCisJc2tiX3B1bGwoc2tiLCAodTggKilyeGQgLSBza2ItPmRhdGEgKyAyICogcmVtb3Zl X3BhZCk7DQorDQorCWlmIChpbnNlcnRfY2NtcF9oZHIpIHsNCisJCXU4IGtleV9pZCA9IEZJRUxE X0dFVChNVF9SWEQxX05PUk1BTF9LRVlfSUQsIHJ4ZDEpOw0KKw0KKwkJbXQ3Nl9pbnNlcnRfY2Nt cF9oZHIoc2tiLCBrZXlfaWQpOw0KKwl9DQorDQorCWhkciA9IG10NzZfc2tiX2dldF9oZHIoc2ti KTsNCisJaWYgKCFzdGF0dXMtPndjaWQgfHwgIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZy YW1lX2NvbnRyb2wpKQ0KKwkJcmV0dXJuIDA7DQorDQorCXN0YXR1cy0+YWdnciA9IHVuaWNhc3Qg JiYNCisJCSAgICAgICAhaWVlZTgwMjExX2lzX3Fvc19udWxsZnVuYyhoZHItPmZyYW1lX2NvbnRy b2wpOw0KKwlzdGF0dXMtPnRpZCA9ICppZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKSAmIElFRUU4 MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOw0KKwlzdGF0dXMtPnNlcW5vID0gSUVFRTgwMjExX1NFUV9U T19TTihsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSk7DQorDQorCXJldHVybiAwOw0KK30NCisN Cit2b2lkIG10NzkxNV9tYWNfd3JpdGVfdHh3aShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBfX2xl MzIgKnR4d2ksDQorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG10NzZfd2NpZCAq d2NpZCwNCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksIGJvb2wgYmVhY29u KQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9D Qihza2IpOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFf aGRyICopc2tiLT5kYXRhOw0KKwlib29sIG11bHRpY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9h ZGRyKGhkci0+YWRkcjEpOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gaW5mby0+Y29u dHJvbC52aWY7DQorCXN0cnVjdCBtdDc2X3BoeSAqbXBoeSA9ICZkZXYtPm1waHk7DQorCWJvb2wg ZXh0X3BoeSA9IGluZm8tPmh3X3F1ZXVlICYgTVRfVFhfSFdfUVVFVUVfRVhUX1BIWTsNCisJdTgg ZmNfdHlwZSwgZmNfc3R5cGUsIHBfZm10LCBxX2lkeCwgb21hY19pZHggPSAwLCB3bW1faWR4ID0g MDsNCisJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOw0KKwl1MTYgdHhfY291bnQgPSA0 LCBzZXFubyA9IDA7DQorCXUzMiB2YWw7DQorDQorCWlmICh2aWYpIHsNCisJCXN0cnVjdCBtdDc5 MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisNCisJ CW9tYWNfaWR4ID0gbXZpZi0+b21hY19pZHg7DQorCQl3bW1faWR4ID0gbXZpZi0+d21tX2lkeDsN CisJfQ0KKw0KKwlpZiAoZXh0X3BoeSAmJiBkZXYtPm10NzYucGh5MikNCisJCW1waHkgPSBkZXYt Pm10NzYucGh5MjsNCisNCisJZmNfdHlwZSA9IChsZTE2X3RvX2NwdShmYykgJiBJRUVFODAyMTFf RkNUTF9GVFlQRSkgPj4gMjsNCisJZmNfc3R5cGUgPSAobGUxNl90b19jcHUoZmMpICYgSUVFRTgw MjExX0ZDVExfU1RZUEUpID4+IDQ7DQorDQorCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwg aWVlZTgwMjExX2lzX2J1ZmZlcmFibGVfbW1wZHUoZmMpKSB7DQorCQlxX2lkeCA9IHdtbV9pZHgg KiBNVDc5MTVfTUFYX1dNTV9TRVRTICsNCisJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsN CisJCXBfZm10ID0gTVRfVFhfVFlQRV9DVDsNCisJfSBlbHNlIGlmIChiZWFjb24pIHsNCisJCXFf aWR4ID0gTVRfTE1BQ19CQ04wOw0KKwkJcF9mbXQgPSBNVF9UWF9UWVBFX0ZXOw0KKwl9IGVsc2Ug ew0KKwkJcV9pZHggPSBNVF9MTUFDX0FMVFgwOw0KKwkJcF9mbXQgPSBNVF9UWF9UWVBFX0NUOw0K Kwl9DQorDQorCXZhbCA9IEZJRUxEX1BSRVAoTVRfVFhEMF9UWF9CWVRFUywgc2tiLT5sZW4gKyBN VF9UWERfU0laRSkgfA0KKwkgICAgICBGSUVMRF9QUkVQKE1UX1RYRDBfUEtUX0ZNVCwgcF9mbXQp IHwNCisJICAgICAgRklFTERfUFJFUChNVF9UWEQwX1FfSURYLCBxX2lkeCk7DQorCXR4d2lbMF0g PSBjcHVfdG9fbGUzMih2YWwpOw0KKw0KKwl2YWwgPSBNVF9UWEQxX0xPTkdfRk9STUFUIHwNCisJ ICAgICAgRklFTERfUFJFUChNVF9UWEQxX1dMQU5fSURYLCB3Y2lkLT5pZHgpIHwNCisJICAgICAg RklFTERfUFJFUChNVF9UWEQxX0hEUl9GT1JNQVQsIE1UX0hEUl9GT1JNQVRfODAyXzExKSB8DQor CSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMV9IRFJfSU5GTywNCisJCQkgaWVlZTgwMjExX2dldF9o ZHJsZW5fZnJvbV9za2Ioc2tiKSAvIDIpIHwNCisJICAgICAgRklFTERfUFJFUChNVF9UWEQxX1RJ RCwNCisJCQkgc2tiLT5wcmlvcml0eSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLKSB8DQor CSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMV9PV05fTUFDLCBvbWFjX2lkeCk7DQorCWlmIChleHRf cGh5ICYmIHFfaWR4ID49IE1UX0xNQUNfQUxUWDAgJiYgcV9pZHggPD0gTVRfTE1BQ19CQ04wKQ0K KwkJdmFsIHw9IGNwdV90b19sZTMyKE1UX1RYRDFfVEdJRCk7DQorDQorCXR4d2lbMV0gPSBjcHVf dG9fbGUzMih2YWwpOw0KKw0KKwl2YWwgPSBGSUVMRF9QUkVQKE1UX1RYRDJfRlJBTUVfVFlQRSwg ZmNfdHlwZSkgfA0KKwkgICAgICBGSUVMRF9QUkVQKE1UX1RYRDJfU1VCX1RZUEUsIGZjX3N0eXBl KSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMl9NVUxUSUNBU1QsIG11bHRpY2FzdCk7DQor CWlmIChrZXkpIHsNCisJCWlmIChtdWx0aWNhc3QgJiYgaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210 X2ZyYW1lKHNrYikgJiYNCisJCSAgICBrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9B RVNfQ01BQykgew0KKwkJCXZhbCB8PSBNVF9UWEQyX0JJUDsNCisJCQl0eHdpWzNdID0gMDsNCisJ CX0gZWxzZSB7DQorCQkJdHh3aVszXSA9IGNwdV90b19sZTMyKE1UX1RYRDNfUFJPVEVDVF9GUkFN RSk7DQorCQl9DQorCX0gZWxzZSB7DQorCQl0eHdpWzNdID0gMDsNCisJfQ0KKwl0eHdpWzJdID0g Y3B1X3RvX2xlMzIodmFsKTsNCisNCisJdHh3aVs0XSA9IDA7DQorCXR4d2lbNV0gPSAwOw0KKwl0 eHdpWzZdID0gMDsNCisNCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgbXVsdGljYXN0 KSB7DQorCQl1MTYgcmF0ZTsNCisNCisJCS8qIGhhcmR3YXJlIHdvbid0IGFkZCBIVEMgZm9yIG1n bXQvY3RybCBmcmFtZSAqLw0KKwkJdHh3aVsyXSB8PSBjcHVfdG9fbGUzMihNVF9UWEQyX0ZJWF9S QVRFIHwgTVRfVFhEMl9IVENfVkxEKTsNCisNCisJCWlmIChtcGh5LT5jaGFuZGVmLmNoYW4tPmJh bmQgPT0gTkw4MDIxMV9CQU5EXzVHSFopDQorCQkJcmF0ZSA9IE1UNzkxNV81R19SQVRFX0RFRkFV TFQ7DQorCQllbHNlDQorCQkJcmF0ZSA9IE1UNzkxNV8yR19SQVRFX0RFRkFVTFQ7DQorDQorCQl2 YWwgPSBNVF9UWEQ2X0ZJWEVEX0JXIHwNCisJCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhENl9UWF9S QVRFLCByYXRlKTsNCisJCXR4d2lbNl0gfD0gY3B1X3RvX2xlMzIodmFsKTsNCisJCXR4d2lbM10g fD0gY3B1X3RvX2xlMzIoTVRfVFhEM19CQV9ESVNBQkxFKTsNCisJfQ0KKw0KKwlpZiAoIWllZWU4 MDIxMV9pc19iZWFjb24oZmMpKQ0KKwkJdHh3aVszXSB8PSBjcHVfdG9fbGUzMihNVF9UWEQzX1NX X1BPV0VSX01HTVQpOw0KKwllbHNlDQorCQl0eF9jb3VudCA9IDB4MWY7DQorDQorCWlmIChpbmZv LT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQ0KKwkJdHh3aVszXSB8PSBjcHVfdG9f bGUzMihNVF9UWEQzX05PX0FDSyk7DQorDQorCXZhbCA9IEZJRUxEX1BSRVAoTVRfVFhEN19UWVBF LCBmY190eXBlKSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEN19TVUJfVFlQRSwgZmNfc3R5 cGUpOw0KKwl0eHdpWzddID0gY3B1X3RvX2xlMzIodmFsKTsNCisNCisJdmFsID0gRklFTERfUFJF UChNVF9UWEQzX1JFTV9UWF9DT1VOVCwgdHhfY291bnQpOw0KKwlpZiAoaWVlZTgwMjExX2lzX2Rh dGFfcW9zKGZjKSkgew0KKwkJc2Vxbm8gPSBJRUVFODAyMTFfU0VRX1RPX1NOKGxlMTZfdG9fY3B1 KGhkci0+c2VxX2N0cmwpKTsNCisJCXZhbCB8PSBNVF9UWEQzX1NOX1ZBTElEOw0KKwl9IGVsc2Ug aWYgKGllZWU4MDIxMV9pc19iYWNrX3JlcShmYykpIHsNCisJCXN0cnVjdCBpZWVlODAyMTFfYmFy ICpiYXI7DQorDQorCQliYXIgPSAoc3RydWN0IGllZWU4MDIxMV9iYXIgKilza2ItPmRhdGE7DQor CQlzZXFubyA9IElFRUU4MDIxMV9TRVFfVE9fU04obGUxNl90b19jcHUoYmFyLT5zdGFydF9zZXFf bnVtKSk7DQorCQl2YWwgfD0gTVRfVFhEM19TTl9WQUxJRDsNCisJfQ0KKwl2YWwgfD0gRklFTERf UFJFUChNVF9UWEQzX1NFUSwgc2Vxbm8pOw0KKwl0eHdpWzNdIHw9IGNwdV90b19sZTMyKHZhbCk7 DQorfQ0KKw0KK2ludCBtdDc5MTVfdHhfcHJlcGFyZV9za2Ioc3RydWN0IG10NzZfZGV2ICptZGV2 LCB2b2lkICp0eHdpX3B0ciwNCisJCQkgIGVudW0gbXQ3Nl90eHFfaWQgcWlkLCBzdHJ1Y3QgbXQ3 Nl93Y2lkICp3Y2lkLA0KKwkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwNCisJCQkgIHN0 cnVjdCBtdDc2X3R4X2luZm8gKnR4X2luZm8pDQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAq aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHhfaW5mby0+c2tiLT5kYXRhOw0KKwlzdHJ1 Y3QgbXQ3OTE1X2RldiAqZGV2ID0gY29udGFpbmVyX29mKG1kZXYsIHN0cnVjdCBtdDc5MTVfZGV2 LCBtdDc2KTsNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NL Ql9DQih0eF9pbmZvLT5za2IpOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkgPSBp bmZvLT5jb250cm9sLmh3X2tleTsNCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IGluZm8t PmNvbnRyb2wudmlmOw0KKwlzdHJ1Y3QgbXQ3Nl90eF9jYiAqY2IgPSBtdDc2X3R4X3NrYl9jYih0 eF9pbmZvLT5za2IpOw0KKwlzdHJ1Y3QgbXQ3Nl90eHdpX2NhY2hlICp0Ow0KKwlzdHJ1Y3QgbXQ3 OTE1X3R4cCAqdHhwOw0KKwlpbnQgaWQsIGksIG5idWYgPSB0eF9pbmZvLT5uYnVmIC0gMTsNCisJ dTggKnR4d2kgPSAodTggKil0eHdpX3B0cjsNCisNCisJaWYgKCF3Y2lkKQ0KKwkJd2NpZCA9ICZk ZXYtPm10NzYuZ2xvYmFsX3djaWQ7DQorDQorCWNiLT53Y2lkID0gd2NpZC0+aWR4Ow0KKw0KKwlt dDc5MTVfbWFjX3dyaXRlX3R4d2koZGV2LCB0eHdpX3B0ciwgdHhfaW5mby0+c2tiLCB3Y2lkLCBr ZXksDQorCQkJICAgICAgZmFsc2UpOw0KKw0KKwl0eHAgPSAoc3RydWN0IG10NzkxNV90eHAgKiko dHh3aSArIE1UX1RYRF9TSVpFKTsNCisJZm9yIChpID0gMDsgaSA8IG5idWY7IGkrKykgew0KKwkJ dHhwLT5idWZbaV0gPSBjcHVfdG9fbGUzMih0eF9pbmZvLT5idWZbaSArIDFdLmFkZHIpOw0KKwkJ dHhwLT5sZW5baV0gPSBjcHVfdG9fbGUxNih0eF9pbmZvLT5idWZbaSArIDFdLmxlbik7DQorCX0N CisJdHhwLT5uYnVmID0gbmJ1ZjsNCisNCisJLyogcGFzcyBwYXJ0aWFsIHNrYiBoZWFkZXIgdG8g ZncgKi8NCisJdHhfaW5mby0+YnVmWzFdLmxlbiA9IE1UX0NUX1BBUlNFX0xFTjsNCisJdHhfaW5m by0+bmJ1ZiA9IE1UX0NUX0RNQV9CVUZfTlVNOw0KKw0KKwl0eHAtPmZsYWdzID0gY3B1X3RvX2xl MTYoTVRfQ1RfSU5GT19BUFBMWV9UWEQpOw0KKw0KKwlpZiAoIWtleSkNCisJCXR4cC0+ZmxhZ3Mg fD0gY3B1X3RvX2xlMTYoTVRfQ1RfSU5GT19OT05FX0NJUEhFUl9GUkFNRSk7DQorDQorCWlmIChp ZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKQ0KKwkJdHhwLT5mbGFncyB8PSBj cHVfdG9fbGUxNihNVF9DVF9JTkZPX01HTVRfRlJBTUUpOw0KKw0KKwlpZiAodmlmKSB7DQorCQlz dHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3By aXY7DQorDQorCQl0eHAtPmJzc19pZHggPSBtdmlmLT5pZHg7DQorCX0NCisNCisJdCA9IChzdHJ1 Y3QgbXQ3Nl90eHdpX2NhY2hlICopKHR4d2kgKyBtZGV2LT5kcnYtPnR4d2lfc2l6ZSk7DQorCXQt PnNrYiA9IHR4X2luZm8tPnNrYjsNCisNCisJc3Bpbl9sb2NrX2JoKCZkZXYtPnRva2VuX2xvY2sp Ow0KKwlpZCA9IGlkcl9hbGxvYygmZGV2LT50b2tlbiwgdCwgMCwgTVQ3OTE1X1RPS0VOX1NJWkUs IEdGUF9BVE9NSUMpOw0KKwlzcGluX3VubG9ja19iaCgmZGV2LT50b2tlbl9sb2NrKTsNCisJaWYg KGlkIDwgMCkNCisJCXJldHVybiBpZDsNCisNCisJdHhwLT50b2tlbiA9IGNwdV90b19sZTE2KGlk KTsNCisJdHhwLT5yZXB0X3dkc193Y2lkID0gMHhmZjsNCisJdHhfaW5mby0+c2tiID0gRE1BX0RV TU1ZX0RBVEE7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGJvb2wNCitt dDc5MTVfdHhfY2hlY2tfYWdncl90aWQoc3RydWN0IG10NzkxNV9zdGEgKm1zdGEsIHU4IHRpZCkN Cit7DQorCWJvb2wgcmV0ID0gZmFsc2U7DQorDQorCXNwaW5fbG9ja19iaCgmbXN0YS0+YW1wZHVf bG9jayk7DQorCWlmIChtc3RhLT5hbXBkdV9zdGF0ZVt0aWRdID09IE1UNzkxNV9BR0dSX1NUT1Ap DQorCQlyZXQgPSB0cnVlOw0KKwlzcGluX3VubG9ja19iaCgmbXN0YS0+YW1wZHVfbG9jayk7DQor DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X3R4X2NoZWNrX2Fn Z3Ioc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQor CXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2It PmRhdGE7DQorCXN0cnVjdCBtdDc5MTVfc3RhICptc3RhOw0KKwl1MTYgdGlkOw0KKw0KKwlpZiAo IXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkNCisJCXJldHVybjsNCisNCisJaWYgKHNrYl9nZXRf cXVldWVfbWFwcGluZyhza2IpID09IElFRUU4MDIxMV9BQ19WTykNCisJCXJldHVybjsNCisNCisJ aWYgKHVubGlrZWx5KCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkp DQorCQlyZXR1cm47DQorDQorCWlmICh1bmxpa2VseShza2ItPnByb3RvY29sID09IGNwdV90b19i ZTE2KEVUSF9QX1BBRSkpKQ0KKwkJcmV0dXJuOw0KKw0KKwltc3RhID0gKHN0cnVjdCBtdDc5MTVf c3RhICopc3RhLT5kcnZfcHJpdjsNCisJdGlkID0gaWVlZTgwMjExX2dldF90aWQoaGRyKTsNCisN CisJaWYgKG10NzkxNV90eF9jaGVja19hZ2dyX3RpZChtc3RhLCB0aWQpKSB7DQorCQlpZWVlODAy MTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgMCk7DQorCQltdDc5MTVfc2V0X2FnZ3Jf c3RhdGUobXN0YSwgdGlkLCBNVDc5MTVfQUdHUl9QUk9HUkVTUyk7DQorCX0NCit9DQorDQorc3Rh dGljIGlubGluZSB2b2lkDQorbXQ3OTE1X3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX3N0YSAq c3RhLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2lu Zm8gKmluZm8sIHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4 X3N0YXR1cyBzdGF0dXMgPSB7DQorCQkuc3RhID0gc3RhLA0KKwkJLmluZm8gPSBpbmZvLA0KKwl9 Ow0KKw0KKwlpZiAoc2tiKQ0KKwkJc3RhdHVzLnNrYiA9IHNrYjsNCisNCisJaWYgKHN0YSkgew0K KwkJc3RydWN0IG10NzkxNV9zdGEgKm1zdGE7DQorDQorCQltc3RhID0gKHN0cnVjdCBtdDc5MTVf c3RhICopc3RhLT5kcnZfcHJpdjsNCisJCXN0YXR1cy5yYXRlID0gJm1zdGEtPnN0YXRzLnR4X3Jh dGU7DQorCX0NCisNCisJLyogdXNlIHN0YXR1c19leHQgdG8gcmVwb3J0IEhFIHJhdGUgKi8NCisJ aWVlZTgwMjExX3R4X3N0YXR1c19leHQoaHcsICZzdGF0dXMpOw0KK30NCisNCitzdGF0aWMgdm9p ZA0KK210NzkxNV90eF9jb21wbGV0ZV9zdGF0dXMoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLA0KKwkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggc3Rh dCkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0Jf Q0Ioc2tiKTsNCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7DQorDQorCWh3ID0gbXQ3Nl90eF9z dGF0dXNfZ2V0X2h3KG1kZXYsIHNrYik7DQorDQorCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIx MV9UWF9DVExfQU1QRFUpDQorCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBE VTsNCisJZWxzZSBpZiAoc3RhKQ0KKwkJbXQ3OTE1X3R4X2NoZWNrX2FnZ3Ioc3RhLCBza2IpOw0K Kw0KKwlpZiAoc3RhdCkNCisJCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsN CisNCisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpDQorCQlp bmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7DQorDQorCWluZm8tPnN0YXR1cy50 eF90aW1lID0gMDsNCisNCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SRVFf VFhfU1RBVFVTKSB7DQorCQltdDc5MTVfdHhfc3RhdHVzKHN0YSwgaHcsIGluZm8sIHNrYik7DQor CQlyZXR1cm47DQorCX0NCisNCisJaWYgKHN0YSB8fCAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjEx X1RYX0NUTF9OT19BQ0spKQ0KKwkJbXQ3OTE1X3R4X3N0YXR1cyhzdGEsIGh3LCBpbmZvLCBOVUxM KTsNCisNCisJZGV2X2tmcmVlX3NrYihza2IpOw0KK30NCisNCit2b2lkIG10NzkxNV90eHBfc2ti X3VubWFwKHN0cnVjdCBtdDc2X2RldiAqZGV2LA0KKwkJCSAgc3RydWN0IG10NzZfdHh3aV9jYWNo ZSAqdCkNCit7DQorCXN0cnVjdCBtdDc5MTVfdHhwICp0eHA7DQorCWludCBpOw0KKw0KKwl0eHAg PSBtdDc5MTVfdHh3aV90b190eHAoZGV2LCB0KTsNCisJZm9yIChpID0gMTsgaSA8IHR4cC0+bmJ1 ZjsgaSsrKQ0KKwkJZG1hX3VubWFwX3NpbmdsZShkZXYtPmRldiwgbGUzMl90b19jcHUodHhwLT5i dWZbaV0pLA0KKwkJCQkgbGUxNl90b19jcHUodHhwLT5sZW5baV0pLCBETUFfVE9fREVWSUNFKTsN Cit9DQorDQordm9pZCBtdDc5MTVfbWFjX3R4X2ZyZWUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwg c3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBtdDc5MTVfdHhfZnJlZSAqZnJlZSA9 IChzdHJ1Y3QgbXQ3OTE1X3R4X2ZyZWUgKilza2ItPmRhdGE7DQorCXN0cnVjdCBtdDc2X2RldiAq bWRldiA9ICZkZXYtPm10NzY7DQorCXN0cnVjdCBtdDc2X3R4d2lfY2FjaGUgKnR4d2k7DQorCXN0 cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBOVUxMOw0KKwl1OCBpLCBjb3VudDsNCisNCisJLyoN CisJICogVE9ETzogTVRfVFhfRlJFRV9MQVRFTkNZIGlzIG1zZHUgdGltZSBmcm9tIHRoZSBUWEQg aXMgcXVldWVkIGludG8gUExFLA0KKwkgKiB0byB0aGUgdGltZSBhY2sgaXMgcmVjZWl2ZWQgb3Ig ZHJvcHBlZCBieSBodyAoYWlyICsgaHcgcXVldWUgdGltZSkuDQorCSAqIFNob3VsZCBhdm9pZCBh Y2Nlc3NpbmcgV1RCTCB0byBnZXQgVHggYWlydGltZSwgYW5kIHVzZSBpdCBpbnN0ZWFkLg0KKwkg Ki8NCisJY291bnQgPSBGSUVMRF9HRVQoTVRfVFhfRlJFRV9NU0RVX0NOVCwgbGUxNl90b19jcHUo ZnJlZS0+Y3RybCkpOw0KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KKwkJdTMyIG1z ZHUsIGluZm8gPSBsZTMyX3RvX2NwdShmcmVlLT5pbmZvW2ldKTsNCisJCXU4IHN0YXQ7DQorDQor CQkvKg0KKwkJICogMSdiMTogbmV3IHdjaWQgcGFpci4NCisJCSAqIDEnYjA6IG1zZHVfaWQgd2l0 aCB0aGUgc2FtZSAnd2NpZCBwYWlyJyBhcyBhYm92ZS4NCisJCSAqLw0KKwkJaWYgKGluZm8gJiBN VF9UWF9GUkVFX1BBSVIpIHsNCisJCQlzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YTsNCisJCQlzdHJ1 Y3QgbXQ3Nl93Y2lkICp3Y2lkOw0KKwkJCXUxNiBpZHg7DQorDQorCQkJY291bnQrKzsNCisJCQlp ZHggPSBGSUVMRF9HRVQoTVRfVFhfRlJFRV9XTEFOX0lELCBpbmZvKTsNCisJCQl3Y2lkID0gcmN1 X2RlcmVmZXJlbmNlKGRldi0+bXQ3Ni53Y2lkW2lkeF0pOw0KKwkJCXN0YSA9IHdjaWRfdG9fc3Rh KHdjaWQpOw0KKwkJCWlmICghc3RhKQ0KKwkJCQljb250aW51ZTsNCisNCisJCQltc3RhID0gY29u dGFpbmVyX29mKHdjaWQsIHN0cnVjdCBtdDc5MTVfc3RhLCB3Y2lkKTsNCisJCQlpZWVlODAyMTFf cXVldWVfd29yayhtdDc2X2h3KGRldiksICZtc3RhLT5zdGF0c193b3JrKTsNCisJCQljb250aW51 ZTsNCisJCX0NCisNCisJCW1zZHUgPSBGSUVMRF9HRVQoTVRfVFhfRlJFRV9NU0RVX0lELCBpbmZv KTsNCisJCXN0YXQgPSBGSUVMRF9HRVQoTVRfVFhfRlJFRV9TVEFUVVMsIGluZm8pOw0KKw0KKwkJ c3Bpbl9sb2NrX2JoKCZkZXYtPnRva2VuX2xvY2spOw0KKwkJdHh3aSA9IGlkcl9yZW1vdmUoJmRl di0+dG9rZW4sIG1zZHUpOw0KKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+dG9rZW5fbG9jayk7DQor DQorCQlpZiAoIXR4d2kpDQorCQkJY29udGludWU7DQorDQorCQltdDc5MTVfdHhwX3NrYl91bm1h cChtZGV2LCB0eHdpKTsNCisJCWlmICh0eHdpLT5za2IpIHsNCisJCQltdDc5MTVfdHhfY29tcGxl dGVfc3RhdHVzKG1kZXYsIHR4d2ktPnNrYiwgc3RhLCBzdGF0KTsNCisJCQl0eHdpLT5za2IgPSBO VUxMOw0KKwkJfQ0KKw0KKwkJbXQ3Nl9wdXRfdHh3aShtZGV2LCB0eHdpKTsNCisJfQ0KKwlkZXZf a2ZyZWVfc2tiKHNrYik7DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X3R4X2NvbXBsZXRlX3NrYihzdHJ1 Y3QgbXQ3Nl9kZXYgKm1kZXYsIGVudW0gbXQ3Nl90eHFfaWQgcWlkLA0KKwkJCSAgICBzdHJ1Y3Qg bXQ3Nl9xdWV1ZV9lbnRyeSAqZSkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXY7DQorDQor CWlmICghZS0+dHh3aSkgew0KKwkJZGV2X2tmcmVlX3NrYl9hbnkoZS0+c2tiKTsNCisJCXJldHVy bjsNCisJfQ0KKw0KKwlkZXYgPSBjb250YWluZXJfb2YobWRldiwgc3RydWN0IG10NzkxNV9kZXYs IG10NzYpOw0KKw0KKwkvKiBlcnJvciBwYXRoICovDQorCWlmIChlLT5za2IgPT0gRE1BX0RVTU1Z X0RBVEEpIHsNCisJCXN0cnVjdCBtdDc2X3R4d2lfY2FjaGUgKnQ7DQorCQlzdHJ1Y3QgbXQ3OTE1 X3R4cCAqdHhwOw0KKw0KKwkJdHhwID0gbXQ3OTE1X3R4d2lfdG9fdHhwKG1kZXYsIGUtPnR4d2kp Ow0KKw0KKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPnRva2VuX2xvY2spOw0KKwkJdCA9IGlkcl9yZW1v dmUoJmRldi0+dG9rZW4sIGxlMTZfdG9fY3B1KHR4cC0+dG9rZW4pKTsNCisJCXNwaW5fdW5sb2Nr X2JoKCZkZXYtPnRva2VuX2xvY2spOw0KKwkJZS0+c2tiID0gdCA/IHQtPnNrYiA6IE5VTEw7DQor CX0NCisNCisJaWYgKGUtPnNrYikgew0KKwkJc3RydWN0IG10NzZfdHhfY2IgKmNiID0gbXQ3Nl90 eF9za2JfY2IoZS0+c2tiKTsNCisJCXN0cnVjdCBtdDc2X3djaWQgKndjaWQ7DQorDQorCQl3Y2lk ID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+bXQ3Ni53Y2lkW2NiLT53Y2lkXSk7DQorDQorCQltdDc5 MTVfdHhfY29tcGxldGVfc3RhdHVzKG1kZXYsIGUtPnNrYiwgd2NpZF90b19zdGEod2NpZCksIDAp Ow0KKwl9DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X21hY19jY2Ffc3RhdHNfcmVzZXQoc3RydWN0IG10 NzkxNV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBwaHktPmRldjsN CisJYm9vbCBleHRfcGh5ID0gcGh5ICE9ICZkZXYtPnBoeTsNCisJdTMyIHJlZyA9IE1UX1dGX1BI WV9SWF9DVFJMMShleHRfcGh5KTsNCisNCisJbXQ3OTE1X2wyX2NsZWFyKGRldiwgcmVnLCBNVF9X Rl9QSFlfUlhfQ1RSTDFfU1RTQ05UX0VOKTsNCisJbXQ3OTE1X2wyX3NldChkZXYsIHJlZywgQklU KDExKSB8IEJJVCg5KSk7DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X21hY19yZXNldF9jb3VudGVycyhz dHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IHBo eS0+ZGV2Ow0KKwlib29sIGV4dF9waHkgPSBwaHkgIT0gJmRldi0+cGh5Ow0KKwlpbnQgaTsNCisN CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgew0KKwkJbXQ3Nl9ycihkZXYsIE1UX1RYX0FHR19D TlQoZXh0X3BoeSwgaSkpOw0KKwkJbXQ3Nl9ycihkZXYsIE1UX1RYX0FHR19DTlQyKGV4dF9waHks IGkpKTsNCisJfQ0KKw0KKwlpZiAoZXh0X3BoeSkgew0KKwkJZGV2LT5tdDc2LnBoeTItPnN1cnZl eV90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1lKCk7DQorCQlpID0gQVJSQVlfU0laRShkZXYtPm10 NzYuYWdncl9zdGF0cykgLyAyOw0KKwl9IGVsc2Ugew0KKwkJZGV2LT5tdDc2LnBoeS5zdXJ2ZXlf dGltZSA9IGt0aW1lX2dldF9ib290dGltZSgpOw0KKwkJaSA9IDA7DQorCX0NCisJbWVtc2V0KCZk ZXYtPm10NzYuYWdncl9zdGF0c1tpXSwgMCwgc2l6ZW9mKGRldi0+bXQ3Ni5hZ2dyX3N0YXRzKSAv IDIpOw0KKw0KKwkvKiByZXNldCBhaXJ0aW1lIGNvdW50ZXJzICovDQorCW10NzZfcnIoZGV2LCBN VF9NSUJfU0RSOShleHRfcGh5KSk7DQorCW10NzZfcnIoZGV2LCBNVF9NSUJfU0RSMzYoZXh0X3Bo eSkpOw0KKwltdDc2X3JyKGRldiwgTVRfTUlCX1NEUjM3KGV4dF9waHkpKTsNCisNCisJbXQ3Nl9z ZXQoZGV2LCBNVF9XRl9STUFDX01JQl9USU1FMChleHRfcGh5KSwNCisJCSBNVF9XRl9STUFDX01J Ql9SWFRJTUVfQ0xSKTsNCisJbXQ3Nl9zZXQoZGV2LCBNVF9XRl9STUFDX01JQl9BSVJUSU1FMChl eHRfcGh5KSwNCisJCSBNVF9XRl9STUFDX01JQl9SWFRJTUVfQ0xSKTsNCit9DQorDQordm9pZCBt dDc5MTVfbWFjX3NldF90aW1pbmcoc3RydWN0IG10NzkxNV9waHkgKnBoeSkNCit7DQorCXMxNiBj b3ZlcmFnZV9jbGFzcyA9IHBoeS0+Y292ZXJhZ2VfY2xhc3M7DQorCXN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYgPSBwaHktPmRldjsNCisJYm9vbCBleHRfcGh5ID0gcGh5ICE9ICZkZXYtPnBoeTsNCisJ dTMyIHZhbCwgcmVnX29mZnNldDsNCisJdTMyIGNjayA9IEZJRUxEX1BSRVAoTVRfVElNRU9VVF9W QUxfUExDUCwgMjMxKSB8DQorCQkgIEZJRUxEX1BSRVAoTVRfVElNRU9VVF9WQUxfQ0NBLCA0OCk7 DQorCXUzMiBvZmRtID0gRklFTERfUFJFUChNVF9USU1FT1VUX1ZBTF9QTENQLCA2MCkgfA0KKwkJ ICAgRklFTERfUFJFUChNVF9USU1FT1VUX1ZBTF9DQ0EsIDI0KTsNCisJaW50IHNpZnMsIG9mZnNl dDsNCisNCisJaWYgKHBoeS0+bXQ3Ni0+Y2hhbmRlZi5jaGFuLT5iYW5kID09IE5MODAyMTFfQkFO RF81R0haKQ0KKwkJc2lmcyA9IDE2Ow0KKwllbHNlDQorCQlzaWZzID0gMTA7DQorDQorCWlmIChl eHRfcGh5KSB7DQorCQljb3ZlcmFnZV9jbGFzcyA9IG1heF90KHMxNiwgZGV2LT5waHkuY292ZXJh Z2VfY2xhc3MsDQorCQkJCSAgICAgICBjb3ZlcmFnZV9jbGFzcyk7DQorCX0gZWxzZSB7DQorCQlz dHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5X2V4dCA9IG10NzkxNV9leHRfcGh5KGRldik7DQorDQorCQlp ZiAocGh5X2V4dCkNCisJCQljb3ZlcmFnZV9jbGFzcyA9IG1heF90KHMxNiwgcGh5X2V4dC0+Y292 ZXJhZ2VfY2xhc3MsDQorCQkJCQkgICAgICAgY292ZXJhZ2VfY2xhc3MpOw0KKwl9DQorCW10NzZf c2V0KGRldiwgTVRfQVJCX1NDUihleHRfcGh5KSwNCisJCSBNVF9BUkJfU0NSX1RYX0RJU0FCTEUg fCBNVF9BUkJfU0NSX1JYX0RJU0FCTEUpOw0KKwl1ZGVsYXkoMSk7DQorDQorCW9mZnNldCA9IDMg KiBjb3ZlcmFnZV9jbGFzczsNCisJcmVnX29mZnNldCA9IEZJRUxEX1BSRVAoTVRfVElNRU9VVF9W QUxfUExDUCwgb2Zmc2V0KSB8DQorCQkgICAgIEZJRUxEX1BSRVAoTVRfVElNRU9VVF9WQUxfQ0NB LCBvZmZzZXQpOw0KKw0KKwltdDc2X3dyKGRldiwgTVRfVE1BQ19DRFRSKGV4dF9waHkpLCBjY2sg KyByZWdfb2Zmc2V0KTsNCisJbXQ3Nl93cihkZXYsIE1UX1RNQUNfT0RUUihleHRfcGh5KSwgb2Zk bSArIHJlZ19vZmZzZXQpOw0KKwltdDc2X3dyKGRldiwgTVRfVE1BQ19JQ1IwKGV4dF9waHkpLA0K KwkJRklFTERfUFJFUChNVF9JRlNfRUlGUywgMzYwKSB8DQorCQlGSUVMRF9QUkVQKE1UX0lGU19S SUZTLCAyKSB8DQorCQlGSUVMRF9QUkVQKE1UX0lGU19TSUZTLCBzaWZzKSB8DQorCQlGSUVMRF9Q UkVQKE1UX0lGU19TTE9ULCBwaHktPnNsb3R0aW1lKSk7DQorDQorCWlmIChwaHktPnNsb3R0aW1l IDwgMjApDQorCQl2YWwgPSBNVDc5MTVfQ0ZFTkRfUkFURV9ERUZBVUxUOw0KKwllbHNlDQorCQl2 YWwgPSBNVDc5MTVfQ0ZFTkRfUkFURV8xMUI7DQorDQorCW10NzZfcm13X2ZpZWxkKGRldiwgTVRf QUdHX0FDUjAoZXh0X3BoeSksIE1UX0FHR19BQ1JfQ0ZFTkRfUkFURSwgdmFsKTsNCisJbXQ3Nl9j bGVhcihkZXYsIE1UX0FSQl9TQ1IoZXh0X3BoeSksDQorCQkgICBNVF9BUkJfU0NSX1RYX0RJU0FC TEUgfCBNVF9BUkJfU0NSX1JYX0RJU0FCTEUpOw0KK30NCisNCisvKg0KKyAqIFRPRE86IG1pYiBj b3VudGVycyBhcmUgcmVhZC1jbGVhciBhbmQgdGhlcmUncmUgbWFueSBIRSBmdW5jdGlvbmFsaXRp ZXMgbmVlZA0KKyAqIHN1Y2ggaW5mbywgaGVuY2UgZmlybXdhcmUgcHJlcGFyZXMgYSB0YXNrIHRv IHJlYWQgdGhlIGZpZWxkcyBvdXQgdG8gYSBzaGFyZWQNCisgKiBzdHJ1Y3R1cmUuIFVzZXIgc2hv dWxkIHN3aXRjaCB0byB1c2UgZXZlbnQgZm9ybWF0IHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uLg0K KyAqLw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X3BoeV91cGRhdGVfY2hhbm5lbChzdHJ1Y3QgbXQ3 Nl9waHkgKm1waHksIGludCBpZHgpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gY29u dGFpbmVyX29mKG1waHktPmRldiwgc3RydWN0IG10NzkxNV9kZXYsIG10NzYpOw0KKwlzdHJ1Y3Qg bXQ3Nl9jaGFubmVsX3N0YXRlICpzdGF0ZTsNCisJdTY0IGJ1c3lfdGltZSwgdHhfdGltZSwgcnhf dGltZSwgb2Jzc190aW1lOw0KKw0KKwlidXN5X3RpbWUgPSBtdDc2X2dldF9maWVsZChkZXYsIE1U X01JQl9TRFI5KGlkeCksDQorCQkJCSAgIE1UX01JQl9TRFI5X0JVU1lfTUFTSyk7DQorCXR4X3Rp bWUgPSBtdDc2X2dldF9maWVsZChkZXYsIE1UX01JQl9TRFIzNihpZHgpLA0KKwkJCQkgTVRfTUlC X1NEUjM2X1RYVElNRV9NQVNLKTsNCisJcnhfdGltZSA9IG10NzZfZ2V0X2ZpZWxkKGRldiwgTVRf TUlCX1NEUjM3KGlkeCksDQorCQkJCSBNVF9NSUJfU0RSMzdfUlhUSU1FX01BU0spOw0KKwlvYnNz X3RpbWUgPSBtdDc2X2dldF9maWVsZChkZXYsIE1UX1dGX1JNQUNfTUlCX0FJUlRJTUUxNChpZHgp LA0KKwkJCQkgICBNVF9NSUJfT0JTU1RJTUVfTUFTSyk7DQorDQorCS8qIFRPRE86IHN0YXRlLT5u b2lzZSAqLw0KKwlzdGF0ZSA9IG1waHktPmNoYW5fc3RhdGU7DQorCXN0YXRlLT5jY19idXN5ICs9 IGJ1c3lfdGltZTsNCisJc3RhdGUtPmNjX3R4ICs9IHR4X3RpbWU7DQorCXN0YXRlLT5jY19yeCAr PSByeF90aW1lICsgb2Jzc190aW1lOw0KKwlzdGF0ZS0+Y2NfYnNzX3J4ICs9IHJ4X3RpbWU7DQor fQ0KKw0KK3ZvaWQgbXQ3OTE1X3VwZGF0ZV9jaGFubmVsKHN0cnVjdCBtdDc2X2RldiAqbWRldikN Cit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBjb250YWluZXJfb2YobWRldiwgc3RydWN0 IG10NzkxNV9kZXYsIG10NzYpOw0KKw0KKwltdDc5MTVfcGh5X3VwZGF0ZV9jaGFubmVsKCZtZGV2 LT5waHksIDApOw0KKwlpZiAobWRldi0+cGh5MikNCisJCW10NzkxNV9waHlfdXBkYXRlX2NoYW5u ZWwobWRldi0+cGh5MiwgMSk7DQorDQorCS8qIHJlc2V0IG9ic3MgYWlydGltZSAqLw0KKwltdDc2 X3NldChkZXYsIE1UX1dGX1JNQUNfTUlCX1RJTUUwKDApLCBNVF9XRl9STUFDX01JQl9SWFRJTUVf Q0xSKTsNCisJaWYgKG1kZXYtPnBoeTIpDQorCQltdDc2X3NldChkZXYsIE1UX1dGX1JNQUNfTUlC X1RJTUUwKDEpLA0KKwkJCSBNVF9XRl9STUFDX01JQl9SWFRJTUVfQ0xSKTsNCit9DQorDQorc3Rh dGljIGJvb2wNCittdDc5MTVfd2FpdF9yZXNldF9zdGF0ZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 LCB1MzIgc3RhdGUpDQorew0KKwlib29sIHJldDsNCisNCisJcmV0ID0gd2FpdF9ldmVudF90aW1l b3V0KGRldi0+cmVzZXRfd2FpdCwNCisJCQkJIChSRUFEX09OQ0UoZGV2LT5yZXNldF9zdGF0ZSkg JiBzdGF0ZSksDQorCQkJCSBNVDc5MTVfUkVTRVRfVElNRU9VVCk7DQorDQorCVdBUk4oIXJldCwg IlRpbWVvdXQgd2FpdGluZyBmb3IgTUNVIHJlc2V0IHN0YXRlICV4XG4iLCBzdGF0ZSk7DQorCXJl dHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X3VwZGF0ZV92aWZfYmVhY29u KHZvaWQgKnByaXYsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHByaXY7DQorDQorCW10NzkxNV9tY3VfYWRkX2JlYWNv bihodywgdmlmLCB2aWYtPmJzc19jb25mLmVuYWJsZV9iZWFjb24pOw0KK30NCisNCitzdGF0aWMg dm9pZA0KK210NzkxNV91cGRhdGVfYmVhY29ucyhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sN CisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMoZGV2LT5tdDc2Lmh3LA0KKwkJ SUVFRTgwMjExX0lGQUNFX0lURVJfUkVTVU1FX0FMTCwNCisJCW10NzkxNV91cGRhdGVfdmlmX2Jl YWNvbiwgZGV2LT5tdDc2Lmh3KTsNCisNCisJaWYgKCFkZXYtPm10NzYucGh5MikNCisJCXJldHVy bjsNCisNCisJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMoZGV2LT5tdDc2LnBo eTItPmh3LA0KKwkJSUVFRTgwMjExX0lGQUNFX0lURVJfUkVTVU1FX0FMTCwNCisJCW10NzkxNV91 cGRhdGVfdmlmX2JlYWNvbiwgZGV2LT5tdDc2LnBoeTItPmh3KTsNCit9DQorDQorc3RhdGljIHZv aWQNCittdDc5MTVfZG1hX3Jlc2V0KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlpbnQg aTsNCisNCisJbXQ3Nl9jbGVhcihkZXYsIE1UX1dGRE1BMF9HTE9fQ0ZHLA0KKwkJICAgTVRfV0ZE TUEwX0dMT19DRkdfVFhfRE1BX0VOIHwgTVRfV0ZETUEwX0dMT19DRkdfUlhfRE1BX0VOKTsNCisJ bXQ3Nl9jbGVhcihkZXYsIE1UX1dGRE1BMV9HTE9fQ0ZHLA0KKwkJICAgTVRfV0ZETUExX0dMT19D RkdfVFhfRE1BX0VOIHwgTVRfV0ZETUExX0dMT19DRkdfUlhfRE1BX0VOKTsNCisJdXNsZWVwX3Jh bmdlKDEwMDAsIDIwMDApOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgX19NVF9UWFFfTUFYOyBpKysp DQorCQltdDc2X3F1ZXVlX3R4X2NsZWFudXAoZGV2LCBpLCB0cnVlKTsNCisNCisJZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUoZGV2LT5tdDc2LnFfcngpOyBpKyspDQorCQltdDc2X3F1ZXVlX3J4 X3Jlc2V0KGRldiwgaSk7DQorDQorCS8qIHJlLWluaXQgcHJlZmV0Y2ggc2V0dGluZ3MgYWZ0ZXIg cmVzZXQgKi8NCisJbXQ3OTE1X2RtYV9wcmVmZXRjaChkZXYpOw0KKw0KKwltdDc2X3NldChkZXYs IE1UX1dGRE1BMF9HTE9fQ0ZHLA0KKwkJIE1UX1dGRE1BMF9HTE9fQ0ZHX1RYX0RNQV9FTiB8IE1U X1dGRE1BMF9HTE9fQ0ZHX1JYX0RNQV9FTik7DQorCW10NzZfc2V0KGRldiwgTVRfV0ZETUExX0dM T19DRkcsDQorCQkgTVRfV0ZETUExX0dMT19DRkdfVFhfRE1BX0VOIHwgTVRfV0ZETUExX0dMT19D RkdfUlhfRE1BX0VOKTsNCit9DQorDQorLyogc3lzdGVtIGVycm9yIHJlY292ZXJ5ICovDQordm9p ZCBtdDc5MTVfbWFjX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJ c3RydWN0IG10NzkxNV9kZXYgKmRldjsNCisNCisJZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0 cnVjdCBtdDc5MTVfZGV2LCByZXNldF93b3JrKTsNCisNCisJaWYgKCEoUkVBRF9PTkNFKGRldi0+ cmVzZXRfc3RhdGUpICYgTVRfTUNVX0NNRF9TVE9QX0RNQSkpDQorCQlyZXR1cm47DQorDQorCWll ZWU4MDIxMV9zdG9wX3F1ZXVlcyhtdDc2X2h3KGRldikpOw0KKwlpZiAoZGV2LT5tdDc2LnBoeTIp DQorCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoZGV2LT5tdDc2LnBoeTItPmh3KTsNCisNCisJc2V0 X2JpdChNVDc2X1JFU0VULCAmZGV2LT5tcGh5LnN0YXRlKTsNCisJc2V0X2JpdChNVDc2X01DVV9S RVNFVCwgJmRldi0+bXBoeS5zdGF0ZSk7DQorCXdha2VfdXAoJmRldi0+bXQ3Ni5tY3Uud2FpdCk7 DQorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2LT5tdDc2Lm1hY193b3JrKTsNCisNCisJ LyogbG9jay91bmxvY2sgYWxsIHF1ZXVlcyB0byBlbnN1cmUgdGhhdCBubyB0eCBpcyBwZW5kaW5n ICovDQorCW10NzZfdHhxX3NjaGVkdWxlX2FsbCgmZGV2LT5tcGh5KTsNCisJaWYgKGRldi0+bXQ3 Ni5waHkyKQ0KKwkJbXQ3Nl90eHFfc2NoZWR1bGVfYWxsKGRldi0+bXQ3Ni5waHkyKTsNCisNCisJ dGFza2xldF9kaXNhYmxlKCZkZXYtPm10NzYudHhfdGFza2xldCk7DQorCW5hcGlfZGlzYWJsZSgm ZGV2LT5tdDc2Lm5hcGlbMF0pOw0KKwluYXBpX2Rpc2FibGUoJmRldi0+bXQ3Ni5uYXBpWzFdKTsN CisJbmFwaV9kaXNhYmxlKCZkZXYtPm10NzYubmFwaVsyXSk7DQorCW5hcGlfZGlzYWJsZSgmZGV2 LT5tdDc2LnR4X25hcGkpOw0KKw0KKwltdXRleF9sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKw0K KwltdDc2X3dyKGRldiwgTVRfTUNVX0lOVF9FVkVOVCwgTVRfTUNVX0lOVF9FVkVOVF9ETUFfU1RP UFBFRCk7DQorDQorCWlmIChtdDc5MTVfd2FpdF9yZXNldF9zdGF0ZShkZXYsIE1UX01DVV9DTURf UkVTRVRfRE9ORSkpIHsNCisJCW10NzkxNV9kbWFfcmVzZXQoZGV2KTsNCisNCisJCW10NzZfd3Io ZGV2LCBNVF9NQ1VfSU5UX0VWRU5ULCBNVF9NQ1VfSU5UX0VWRU5UX0RNQV9JTklUKTsNCisJCW10 NzkxNV93YWl0X3Jlc2V0X3N0YXRlKGRldiwgTVRfTUNVX0NNRF9SRUNPVkVSWV9ET05FKTsNCisJ fQ0KKw0KKwljbGVhcl9iaXQoTVQ3Nl9NQ1VfUkVTRVQsICZkZXYtPm1waHkuc3RhdGUpOw0KKwlj bGVhcl9iaXQoTVQ3Nl9SRVNFVCwgJmRldi0+bXBoeS5zdGF0ZSk7DQorDQorCXRhc2tsZXRfZW5h YmxlKCZkZXYtPm10NzYudHhfdGFza2xldCk7DQorCW5hcGlfZW5hYmxlKCZkZXYtPm10NzYudHhf bmFwaSk7DQorCW5hcGlfc2NoZWR1bGUoJmRldi0+bXQ3Ni50eF9uYXBpKTsNCisNCisJbmFwaV9l bmFibGUoJmRldi0+bXQ3Ni5uYXBpWzBdKTsNCisJbmFwaV9zY2hlZHVsZSgmZGV2LT5tdDc2Lm5h cGlbMF0pOw0KKw0KKwluYXBpX2VuYWJsZSgmZGV2LT5tdDc2Lm5hcGlbMV0pOw0KKwluYXBpX3Nj aGVkdWxlKCZkZXYtPm10NzYubmFwaVsxXSk7DQorDQorCW5hcGlfZW5hYmxlKCZkZXYtPm10NzYu bmFwaVsyXSk7DQorCW5hcGlfc2NoZWR1bGUoJmRldi0+bXQ3Ni5uYXBpWzJdKTsNCisNCisJaWVl ZTgwMjExX3dha2VfcXVldWVzKG10NzZfaHcoZGV2KSk7DQorCWlmIChkZXYtPm10NzYucGh5MikN CisJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhkZXYtPm10NzYucGh5Mi0+aHcpOw0KKw0KKwltdDc2 X3dyKGRldiwgTVRfTUNVX0lOVF9FVkVOVCwgTVRfTUNVX0lOVF9FVkVOVF9SRVNFVF9ET05FKTsN CisJbXQ3OTE1X3dhaXRfcmVzZXRfc3RhdGUoZGV2LCBNVF9NQ1VfQ01EX05PUk1BTF9TVEFURSk7 DQorDQorCW11dGV4X3VubG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJbXQ3OTE1X3VwZGF0 ZV9iZWFjb25zKGRldik7DQorDQorCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsobXQ3Nl9o dyhkZXYpLCAmZGV2LT5tdDc2Lm1hY193b3JrLA0KKwkJCQkgICAgIE1UNzkxNV9XQVRDSERPR19U SU1FKTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWFjX3VwZGF0ZV9taWJfc3RhdHMo c3RydWN0IG10NzkxNV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBw aHktPmRldjsNCisJc3RydWN0IG1pYl9zdGF0cyAqbWliID0gJnBoeS0+bWliOw0KKwlib29sIGV4 dF9waHkgPSBwaHkgIT0gJmRldi0+cGh5Ow0KKwlpbnQgaSwgYWdncjAsIGFnZ3IxOw0KKw0KKwlt ZW1zZXQobWliLCAwLCBzaXplb2YoKm1pYikpOw0KKw0KKwltaWItPmZjc19lcnJfY250ID0gbXQ3 Nl9nZXRfZmllbGQoZGV2LCBNVF9NSUJfU0RSMyhleHRfcGh5KSwNCisJCQkJCSAgTVRfTUlCX1NE UjNfRkNTX0VSUl9NQVNLKTsNCisNCisJYWdncjAgPSBleHRfcGh5ID8gQVJSQVlfU0laRShkZXYt Pm10NzYuYWdncl9zdGF0cykgLyAyIDogMDsNCisJZm9yIChpID0gMCwgYWdncjEgPSBhZ2dyMCAr IDQ7IGkgPCA0OyBpKyspIHsNCisJCXUzMiB2YWwsIHZhbDI7DQorDQorCQl2YWwgPSBtdDc2X3Jy KGRldiwgTVRfTUlCX01CX1NEUjEoZXh0X3BoeSwgaSkpOw0KKw0KKwkJdmFsMiA9IEZJRUxEX0dF VChNVF9NSUJfQUNLX0ZBSUxfQ09VTlRfTUFTSywgdmFsKTsNCisJCWlmICh2YWwyID4gbWliLT5h Y2tfZmFpbF9jbnQpDQorCQkJbWliLT5hY2tfZmFpbF9jbnQgPSB2YWwyOw0KKw0KKwkJdmFsMiA9 IEZJRUxEX0dFVChNVF9NSUJfQkFfTUlTU19DT1VOVF9NQVNLLCB2YWwpOw0KKwkJaWYgKHZhbDIg PiBtaWItPmJhX21pc3NfY250KQ0KKwkJCW1pYi0+YmFfbWlzc19jbnQgPSB2YWwyOw0KKw0KKwkJ dmFsID0gbXQ3Nl9ycihkZXYsIE1UX01JQl9NQl9TRFIwKGV4dF9waHksIGkpKTsNCisJCXZhbDIg PSBGSUVMRF9HRVQoTVRfTUlCX1JUU19SRVRSSUVTX0NPVU5UX01BU0ssIHZhbCk7DQorCQlpZiAo dmFsMiA+IG1pYi0+cnRzX3JldHJpZXNfY250KSB7DQorCQkJbWliLT5ydHNfY250ID0gRklFTERf R0VUKE1UX01JQl9SVFNfQ09VTlRfTUFTSywgdmFsKTsNCisJCQltaWItPnJ0c19yZXRyaWVzX2Nu dCA9IHZhbDI7DQorCQl9DQorDQorCQl2YWwgPSBtdDc2X3JyKGRldiwgTVRfVFhfQUdHX0NOVChl eHRfcGh5LCBpKSk7DQorCQl2YWwyID0gbXQ3Nl9ycihkZXYsIE1UX1RYX0FHR19DTlQyKGV4dF9w aHksIGkpKTsNCisNCisJCWRldi0+bXQ3Ni5hZ2dyX3N0YXRzW2FnZ3IwKytdICs9IHZhbCAmIDB4 ZmZmZjsNCisJCWRldi0+bXQ3Ni5hZ2dyX3N0YXRzW2FnZ3IwKytdICs9IHZhbCA+PiAxNjsNCisJ CWRldi0+bXQ3Ni5hZ2dyX3N0YXRzW2FnZ3IxKytdICs9IHZhbDIgJiAweGZmZmY7DQorCQlkZXYt Pm10NzYuYWdncl9zdGF0c1thZ2dyMSsrXSArPSB2YWwyID4+IDE2Ow0KKwl9DQorfQ0KKw0KK3Zv aWQgbXQ3OTE1X21hY19zdGFfc3RhdHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQor ew0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmOw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YV9zdGF0cyAqc3RhdHM7DQorCXN0cnVjdCBtdDc5MTVf c3RhICptc3RhOw0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2Ow0KKw0KKwltc3RhID0gY29udGFp bmVyX29mKHdvcmssIHN0cnVjdCBtdDc5MTVfc3RhLCBzdGF0c193b3JrKTsNCisJc3RhID0gY29u dGFpbmVyX29mKCh2b2lkICopbXN0YSwgc3RydWN0IGllZWU4MDIxMV9zdGEsIGRydl9wcml2KTsN CisJdmlmID0gY29udGFpbmVyX29mKCh2b2lkICopbXN0YS0+dmlmLCBzdHJ1Y3QgaWVlZTgwMjEx X3ZpZiwgZHJ2X3ByaXYpOw0KKwlkZXYgPSBtc3RhLT52aWYtPmRldjsNCisJc3RhdHMgPSAmbXN0 YS0+c3RhdHM7DQorDQorCS8qIHVzZSBNVF9UWF9GUkVFX1JBVEUgdG8gcmVwb3J0IFR4IHJhdGUg Zm9yIGZ1cnRoZXIgZGV2aWNlcyAqLw0KKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGF0cy0+ amlmZmllcyArIEhaKSkgew0KKwkJbXQ3OTE1X21jdV9nZXRfcmF0ZV9pbmZvKGRldiwgUkFURV9D VFJMX1JVX0lORk8sDQorCQkJCQkgbXN0YS0+d2NpZC5pZHgpOw0KKw0KKwkJc3RhdHMtPmppZmZp ZXMgPSBqaWZmaWVzOw0KKwl9DQorDQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjEx X1JDX1NVUFBfUkFURVNfQ0hBTkdFRCB8DQorCQkJICAgICAgIElFRUU4MDIxMV9SQ19OU1NfQ0hB TkdFRCB8DQorCQkJICAgICAgIElFRUU4MDIxMV9SQ19CV19DSEFOR0VELCAmc3RhdHMtPmNoYW5n ZWQpKQ0KKwkJbXQ3OTE1X21jdV9hZGRfcmF0ZV9jdHJsKGRldiwgdmlmLCBzdGEpOw0KKw0KKwlp ZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9SQ19TTVBTX0NIQU5HRUQsICZzdGF0cy0+ Y2hhbmdlZCkpDQorCQltdDc5MTVfbWN1X2FkZF9zbXBzKGRldiwgdmlmLCBzdGEpOw0KKw0KKwlz cGluX2xvY2tfYmgoJmRldi0+c3RhX3BvbGxfbG9jayk7DQorCWlmIChsaXN0X2VtcHR5KCZtc3Rh LT5wb2xsX2xpc3QpKQ0KKwkJbGlzdF9hZGRfdGFpbCgmbXN0YS0+cG9sbF9saXN0LCAmZGV2LT5z dGFfcG9sbF9saXN0KTsNCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+c3RhX3BvbGxfbG9jayk7DQor fQ0KKw0KK3ZvaWQgbXQ3OTE1X21hY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7 DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXY7DQorDQorCWRldiA9IChzdHJ1Y3QgbXQ3OTE1X2Rl diAqKWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXQ3Nl9kZXYsDQorCQkJCQkJbWFjX3dvcmsu d29yayk7DQorDQorCW11dGV4X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorCW10NzZfdXBkYXRl X3N1cnZleSgmZGV2LT5tdDc2KTsNCisJaWYgKCsrZGV2LT5tYWNfd29ya19jb3VudCA9PSA1KSB7 DQorCQlzdHJ1Y3QgbXQ3OTE1X3BoeSAqZXh0X3BoeSA9IG10NzkxNV9leHRfcGh5KGRldik7DQor DQorCQltdDc5MTVfbWFjX3VwZGF0ZV9taWJfc3RhdHMoJmRldi0+cGh5KTsNCisJCWlmIChleHRf cGh5KQ0KKwkJCW10NzkxNV9tYWNfdXBkYXRlX21pYl9zdGF0cyhleHRfcGh5KTsNCisNCisJCWRl di0+bWFjX3dvcmtfY291bnQgPSAwOw0KKwl9DQorCW11dGV4X3VubG9jaygmZGV2LT5tdDc2Lm11 dGV4KTsNCisNCisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhtdDc2X2h3KGRldiksICZk ZXYtPm10NzYubWFjX3dvcmssDQorCQkJCSAgICAgTVQ3OTE1X1dBVENIRE9HX1RJTUUpOw0KK30N CisNCitzdGF0aWMgdm9pZCBtdDc5MTVfZGZzX3N0b3BfcmFkYXJfZGV0ZWN0b3Ioc3RydWN0IG10 NzkxNV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBwaHktPmRldjsN CisNCisJaWYgKHBoeS0+cmRkX3N0YXRlICYgQklUKDApKQ0KKwkJbXQ3OTE1X21jdV9yZGRfY21k KGRldiwgUkREX1NUT1AsIDAsIE1UX1JYX1NFTDAsIDApOw0KKwlpZiAocGh5LT5yZGRfc3RhdGUg JiBCSVQoMSkpDQorCQltdDc5MTVfbWN1X3JkZF9jbWQoZGV2LCBSRERfU1RPUCwgMSwgTVRfUlhf U0VMMCwgMCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1X2Rmc19zdGFydF9yZGQoc3RydWN0 IG10NzkxNV9kZXYgKmRldiwgaW50IGNoYWluKQ0KK3sNCisJaW50IGVycjsNCisNCisJZXJyID0g bXQ3OTE1X21jdV9yZGRfY21kKGRldiwgUkREX1NUQVJULCBjaGFpbiwgTVRfUlhfU0VMMCwgMCk7 DQorCWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJcmV0dXJuIG10NzkxNV9tY3Vf cmRkX2NtZChkZXYsIFJERF9ERVRfTU9ERSwgY2hhaW4sIE1UX1JYX1NFTDAsIDEpOw0KK30NCisN CitzdGF0aWMgaW50IG10NzkxNV9kZnNfc3RhcnRfcmFkYXJfZGV0ZWN0b3Ioc3RydWN0IG10Nzkx NV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZiA9ICZw aHktPm10NzYtPmNoYW5kZWY7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBwaHktPmRldjsN CisJYm9vbCBleHRfcGh5ID0gcGh5ICE9ICZkZXYtPnBoeTsNCisJaW50IGVycjsNCisNCisJLyog c3RhcnQgQ0FDICovDQorCWVyciA9IG10NzkxNV9tY3VfcmRkX2NtZChkZXYsIFJERF9DQUNfU1RB UlQsIGV4dF9waHksIE1UX1JYX1NFTDAsIDApOw0KKwlpZiAoZXJyIDwgMCkNCisJCXJldHVybiBl cnI7DQorDQorCWVyciA9IG10NzkxNV9kZnNfc3RhcnRfcmRkKGRldiwgZXh0X3BoeSk7DQorCWlm IChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJcGh5LT5yZGRfc3RhdGUgfD0gQklUKGV4 dF9waHkpOw0KKw0KKwlpZiAoY2hhbmRlZi0+d2lkdGggPT0gTkw4MDIxMV9DSEFOX1dJRFRIXzE2 MCB8fA0KKwkgICAgY2hhbmRlZi0+d2lkdGggPT0gTkw4MDIxMV9DSEFOX1dJRFRIXzgwUDgwKSB7 DQorCQllcnIgPSBtdDc5MTVfZGZzX3N0YXJ0X3JkZChkZXYsIDEpOw0KKwkJaWYgKGVyciA8IDAp DQorCQkJcmV0dXJuIGVycjsNCisNCisJCXBoeS0+cmRkX3N0YXRlIHw9IEJJVCgxKTsNCisJfQ0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9kZnNfaW5pdF9yYWRh cl9zcGVjcyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJY29uc3Qgc3RydWN0IG10Nzkx NV9kZnNfcmFkYXJfc3BlYyAqcmFkYXJfc3BlY3M7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYg PSBwaHktPmRldjsNCisJaW50IGVyciwgaTsNCisNCisJc3dpdGNoIChkZXYtPm10NzYucmVnaW9u KSB7DQorCWNhc2UgTkw4MDIxMV9ERlNfRkNDOg0KKwkJcmFkYXJfc3BlY3MgPSAmZmNjX3JhZGFy X3NwZWNzOw0KKwkJZXJyID0gbXQ3OTE1X21jdV9zZXRfZmNjNV9scG4oZGV2LCA4KTsNCisJCWlm IChlcnIgPCAwKQ0KKwkJCXJldHVybiBlcnI7DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0RG U19FVFNJOg0KKwkJcmFkYXJfc3BlY3MgPSAmZXRzaV9yYWRhcl9zcGVjczsNCisJCWJyZWFrOw0K KwljYXNlIE5MODAyMTFfREZTX0pQOg0KKwkJcmFkYXJfc3BlY3MgPSAmanBfcmFkYXJfc3BlY3M7 DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGFyX3NwZWNzLT5yYWRhcl9wYXR0ZXJuKTsgaSsr KSB7DQorCQllcnIgPSBtdDc5MTVfbWN1X3NldF9yYWRhcl90aChkZXYsIGksDQorCQkJCQkgICAg ICAmcmFkYXJfc3BlY3MtPnJhZGFyX3BhdHRlcm5baV0pOw0KKwkJaWYgKGVyciA8IDApDQorCQkJ cmV0dXJuIGVycjsNCisJfQ0KKw0KKwlyZXR1cm4gbXQ3OTE1X21jdV9zZXRfcHVsc2VfdGgoZGV2 LCAmcmFkYXJfc3BlY3MtPnB1bHNlX3RoKTsNCit9DQorDQoraW50IG10NzkxNV9kZnNfaW5pdF9y YWRhcl9kZXRlY3RvcihzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJc3RydWN0IGNmZzgw MjExX2NoYW5fZGVmICpjaGFuZGVmID0gJnBoeS0+bXQ3Ni0+Y2hhbmRlZjsNCisJc3RydWN0IG10 NzkxNV9kZXYgKmRldiA9IHBoeS0+ZGV2Ow0KKwlib29sIGV4dF9waHkgPSBwaHkgIT0gJmRldi0+ cGh5Ow0KKwlpbnQgZXJyOw0KKw0KKwlpZiAoZGV2LT5tdDc2LnJlZ2lvbiA9PSBOTDgwMjExX0RG U19VTlNFVCkgew0KKwkJcGh5LT5kZnNfc3RhdGUgPSAtMTsNCisJCWlmIChwaHktPnJkZF9zdGF0 ZSkNCisJCQlnb3RvIHN0b3A7DQorDQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlpZiAodGVzdF9i aXQoTVQ3Nl9TQ0FOTklORywgJnBoeS0+bXQ3Ni0+c3RhdGUpKQ0KKwkJcmV0dXJuIDA7DQorDQor CWlmIChwaHktPmRmc19zdGF0ZSA9PSBjaGFuZGVmLT5jaGFuLT5kZnNfc3RhdGUpDQorCQlyZXR1 cm4gMDsNCisNCisJZXJyID0gbXQ3OTE1X2Rmc19pbml0X3JhZGFyX3NwZWNzKHBoeSk7DQorCWlm IChlcnIgPCAwKSB7DQorCQlwaHktPmRmc19zdGF0ZSA9IC0xOw0KKwkJZ290byBzdG9wOw0KKwl9 DQorDQorCXBoeS0+ZGZzX3N0YXRlID0gY2hhbmRlZi0+Y2hhbi0+ZGZzX3N0YXRlOw0KKw0KKwlp ZiAoY2hhbmRlZi0+Y2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikgew0KKwkJaWYg KGNoYW5kZWYtPmNoYW4tPmRmc19zdGF0ZSAhPSBOTDgwMjExX0RGU19BVkFJTEFCTEUpDQorCQkJ cmV0dXJuIG10NzkxNV9kZnNfc3RhcnRfcmFkYXJfZGV0ZWN0b3IocGh5KTsNCisNCisJCXJldHVy biBtdDc5MTVfbWN1X3JkZF9jbWQoZGV2LCBSRERfQ0FDX0VORCwgZXh0X3BoeSwNCisJCQkJCSAg TVRfUlhfU0VMMCwgMCk7DQorCX0NCisNCitzdG9wOg0KKwllcnIgPSBtdDc5MTVfbWN1X3JkZF9j bWQoZGV2LCBSRERfTk9STUFMX1NUQVJULCBleHRfcGh5LA0KKwkJCQkgTVRfUlhfU0VMMCwgMCk7 DQorCWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJbXQ3OTE1X2Rmc19zdG9wX3Jh ZGFyX2RldGVjdG9yKHBoeSk7DQorCXJldHVybiAwOw0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJz L25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tYWMuaCBiL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21hYy5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMDAwLi43MTI3NTM0ODRhZWUNCi0tLSAvZGV2L251bGwNCisrKyBiL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21hYy5oDQpAQCAtMCwwICsx LDMzMCBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MgKi8NCisvKiBDb3B5cmln aHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiAqLw0KKw0KKyNpZm5kZWYgX19NVDc5MTVfTUFDX0gN CisjZGVmaW5lIF9fTVQ3OTE1X01BQ19IDQorDQorI2RlZmluZSBNVF9DVF9QQVJTRV9MRU4JCQk3 Mg0KKyNkZWZpbmUgTVRfQ1RfRE1BX0JVRl9OVU0JCTINCisNCisjZGVmaW5lIE1UX1JYRDBfTEVO R1RICQkJR0VOTUFTSygxNSwgMCkNCisjZGVmaW5lIE1UX1JYRDBfUEtUX1RZUEUJCUdFTk1BU0so MzEsIDI3KQ0KKw0KKyNkZWZpbmUgTVRfUlhEMF9OT1JNQUxfRVRIX1RZUEVfT0ZTCUdFTk1BU0so MjIsIDE2KQ0KKyNkZWZpbmUgTVRfUlhEMF9OT1JNQUxfSVBfU1VNCQlCSVQoMjMpDQorI2RlZmlu ZSBNVF9SWEQwX05PUk1BTF9VRFBfVENQX1NVTQlCSVQoMjQpDQorDQorZW51bSByeF9wa3RfdHlw ZSB7DQorCVBLVF9UWVBFX1RYUywNCisJUEtUX1RZUEVfVFhSWFYsDQorCVBLVF9UWVBFX05PUk1B TCwNCisJUEtUX1RZUEVfUlhfRFVQX1JGQiwNCisJUEtUX1RZUEVfUlhfVE1SLA0KKwlQS1RfVFlQ RV9SRVRSSUVWRSwNCisJUEtUX1RZUEVfVFhSWF9OT1RJRlksDQorCVBLVF9UWVBFX1JYX0VWRU5U LA0KK307DQorDQorLyogUlhEIERXMSAqLw0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxfV0xBTl9J RFgJCUdFTk1BU0soOSwgMCkNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX0dST1VQXzEJCUJJVCgx MSkNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX0dST1VQXzIJCUJJVCgxMikNCisjZGVmaW5lIE1U X1JYRDFfTk9STUFMX0dST1VQXzMJCUJJVCgxMykNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX0dS T1VQXzQJCUJJVCgxNCkNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX0dST1VQXzUJCUJJVCgxNSkN CisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX1NFQ19NT0RFCQlHRU5NQVNLKDIwLCAxNikNCisjZGVm aW5lIE1UX1JYRDFfTk9STUFMX0tFWV9JRAkJR0VOTUFTSygyMiwgMjEpDQorI2RlZmluZSBNVF9S WEQxX05PUk1BTF9DTQkJQklUKDIzKQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxfQ0xNCQlCSVQo MjQpDQorI2RlZmluZSBNVF9SWEQxX05PUk1BTF9JQ1ZfRVJSCQlCSVQoMjUpDQorI2RlZmluZSBN VF9SWEQxX05PUk1BTF9US0lQX01JQ19FUlIJQklUKDI2KQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JN QUxfRkNTX0VSUgkJQklUKDI3KQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxfQkFORF9JRFgJCUJJ VCgyOCkNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX1NQUF9FTgkJQklUKDI5KQ0KKyNkZWZpbmUg TVRfUlhEMV9OT1JNQUxfQUREX09NCQlCSVQoMzApDQorI2RlZmluZSBNVF9SWEQxX05PUk1BTF9T RUNfRE9ORQkJQklUKDMxKQ0KKw0KKy8qIFJYRCBEVzIgKi8NCisjZGVmaW5lIE1UX1JYRDJfTk9S TUFMX0JTU0lECQlHRU5NQVNLKDUsIDApDQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9DT19BTlQJ CUJJVCg2KQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxfQkZfQ1FJCQlCSVQoNykNCisjZGVmaW5l IE1UX1JYRDJfTk9STUFMX01BQ19IRFJfTEVOCUdFTk1BU0soMTIsIDgpDQorI2RlZmluZSBNVF9S WEQyX05PUk1BTF9IRFJfVFJBTlMJQklUKDEzKQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxfSERS X09GRlNFVAlHRU5NQVNLKDE1LCAxNCkNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX1RJRAkJR0VO TUFTSygxOSwgMTYpDQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9NVV9CQVIJCUJJVCgyMSkNCisj ZGVmaW5lIE1UX1JYRDJfTk9STUFMX1NXX0JJVAkJQklUKDIyKQ0KKyNkZWZpbmUgTVRfUlhEMl9O T1JNQUxfQU1TRFVfRVJSCUJJVCgyMykNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX01BWF9MRU5f RVJST1IJQklUKDI0KQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxfSERSX1RSQU5TX0VSUk9SCUJJ VCgyNSkNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX0lOVF9GUkFNRQlCSVQoMjYpDQorI2RlZmlu ZSBNVF9SWEQyX05PUk1BTF9GUkFHCQlCSVQoMjcpDQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9O VUxMX0ZSQU1FCUJJVCgyOCkNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX05EQVRBCQlCSVQoMjkp DQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9OT05fQU1QRFUJQklUKDMwKQ0KKyNkZWZpbmUgTVRf UlhEMl9OT1JNQUxfQkZfUkVQT1JUCUJJVCgzMSkNCisNCisvKiBSWEQgRFczICovDQorI2RlZmlu ZSBNVF9SWEQzX05PUk1BTF9SWFZfU0VRCQlHRU5NQVNLKDcsIDApDQorI2RlZmluZSBNVF9SWEQz X05PUk1BTF9DSF9GUkVRCQlHRU5NQVNLKDE1LCA4KQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxf QUREUl9UWVBFCUdFTk1BU0soMTcsIDE2KQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfVTJNCQlC SVQoMCkNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX0hUQ19WTEQJCUJJVCgwKQ0KKyNkZWZpbmUg TVRfUlhEM19OT1JNQUxfVFNGX0NPTVBBUkVfTE9TUwlCSVQoMTkpDQorI2RlZmluZSBNVF9SWEQz X05PUk1BTF9CRUFDT05fTUMJQklUKDIwKQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfQkVBQ09O X1VDCUJJVCgyMSkNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX0FNU0RVCQlCSVQoMjIpDQorI2Rl ZmluZSBNVF9SWEQzX05PUk1BTF9NRVNICQlCSVQoMjMpDQorI2RlZmluZSBNVF9SWEQzX05PUk1B TF9NSENQCQlCSVQoMjQpDQorI2RlZmluZSBNVF9SWEQzX05PUk1BTF9OT19JTkZPX1dCCUJJVCgy NSkNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX0RJU0FCTEVfUlhfSERSX1RSQU5TCUJJVCgyNikN CisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX1BPV0VSX1NBVkVfU1RBVAlCSVQoMjcpDQorI2RlZmlu ZSBNVF9SWEQzX05PUk1BTF9NT1JFCQlCSVQoMjgpDQorI2RlZmluZSBNVF9SWEQzX05PUk1BTF9V TldBTlQJCUJJVCgyOSkNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX1JYX0RST1AJCUJJVCgzMCkN CisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX1ZMQU4yRVRICQlCSVQoMzEpDQorDQorLyogUlhEIERX NCAqLw0KKyNkZWZpbmUgTVRfUlhENF9OT1JNQUxfUEFZTE9BRF9GT1JNQVQJR0VOTUFTSygxLCAw KQ0KKyNkZWZpbmUgTVRfUlhENF9OT1JNQUxfUEFUVEVSTl9EUk9QCUJJVCg5KQ0KKyNkZWZpbmUg TVRfUlhENF9OT1JNQUxfQ0xTCQlCSVQoMTApDQorI2RlZmluZSBNVF9SWEQ0X05PUk1BTF9PRkxE CQlHRU5NQVNLKDEyLCAxMSkNCisjZGVmaW5lIE1UX1JYRDRfTk9STUFMX01BR0lDX1BLVAlCSVQo MTMpDQorI2RlZmluZSBNVF9SWEQ0X05PUk1BTF9XT0wJCUdFTk1BU0soMTgsIDE0KQ0KKyNkZWZp bmUgTVRfUlhENF9OT1JNQUxfQ0xTX0JJVE1BUAlHRU5NQVNLKDI4LCAxOSkNCisjZGVmaW5lIE1U X1JYRDNfTk9STUFMX1BGX01PREUJCUJJVCgyOSkNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX1BG X1NUUwkJR0VOTUFTSygzMSwgMzApDQorDQorLyogUC1SWFYgKi8NCisjZGVmaW5lIE1UX1BSWFZf VFhfUkFURQkJCUdFTk1BU0soNiwgMCkNCisjZGVmaW5lIE1UX1BSWFZfVFhfRENNCQkJQklUKDQp DQorI2RlZmluZSBNVF9QUlhWX1RYX0VSX1NVXzEwNlQJCUJJVCg1KQ0KKyNkZWZpbmUgTVRfUFJY Vl9OU1RTCQkJR0VOTUFTSyg5LCA3KQ0KKyNkZWZpbmUgTVRfUFJYVl9IVF9BRF9DT0RFCQlCSVQo MTEpDQorI2RlZmluZSBNVF9QUlhWX1JDUEkzCQkJR0VOTUFTSygzMSwgMjQpDQorI2RlZmluZSBN VF9QUlhWX1JDUEkyCQkJR0VOTUFTSygyMywgMTYpDQorI2RlZmluZSBNVF9QUlhWX1JDUEkxCQkJ R0VOTUFTSygxNSwgOCkNCisjZGVmaW5lIE1UX1BSWFZfUkNQSTAJCQlHRU5NQVNLKDcsIDApDQor DQorLyogQy1SWFYgKi8NCisjZGVmaW5lIE1UX0NSWFZfSFRfU1RCQwkJCUdFTk1BU0soMSwgMCkN CisjZGVmaW5lIE1UX0NSWFZfVFhfTU9ERQkJCUdFTk1BU0soNywgNCkNCisjZGVmaW5lIE1UX0NS WFZfRlJBTUVfTU9ERQkJR0VOTUFTSygxMCwgOCkNCisjZGVmaW5lIE1UX0NSWFZfSFRfU0hPUlRf R0kJCUdFTk1BU0soMTQsIDEzKQ0KKw0KK3N0cnVjdCBtdDc5MTVfcnh2IHsNCisJdTMyIHBoeTsN CisNCisJLyogUC1SWFY6IGJpdCAwfjEsIEMtUlhWOiBiaXQgMn4xOSAqLw0KKwlfX2xlMzIgdlsy MF07DQorfTsNCisNCitlbnVtIHR4X2hlYWRlcl9mb3JtYXQgew0KKwlNVF9IRFJfRk9STUFUXzgw Ml8zLA0KKwlNVF9IRFJfRk9STUFUX0NNRCwNCisJTVRfSERSX0ZPUk1BVF84MDJfMTEsDQorCU1U X0hEUl9GT1JNQVRfODAyXzExX0VYVCwNCit9Ow0KKw0KK2VudW0gdHhfcGt0X3R5cGUgew0KKwlN VF9UWF9UWVBFX0NULA0KKwlNVF9UWF9UWVBFX1NGLA0KKwlNVF9UWF9UWVBFX0NNRCwNCisJTVRf VFhfVFlQRV9GVywNCit9Ow0KKw0KK2VudW0gdHhfcGt0X3F1ZXVlX2lkeCB7DQorCU1UX0xNQUNf QUMwMCwNCisJTVRfTE1BQ19BQzAxLA0KKwlNVF9MTUFDX0FDMDIsDQorCU1UX0xNQUNfQUMwMywN CisJTVRfTE1BQ19BTFRYMCA9IDB4MTAsDQorCU1UX0xNQUNfQk1DMCA9IDB4MTAsDQorCU1UX0xN QUNfQkNOMCA9IDB4MTIsDQorfTsNCisNCitlbnVtIHR4X3BvcnRfaWR4IHsNCisJTVRfVFhfUE9S VF9JRFhfTE1BQywNCisJTVRfVFhfUE9SVF9JRFhfTUNVDQorfTsNCisNCitlbnVtIHR4X21jdV9w b3J0X3FfaWR4IHsNCisJTVRfVFhfTUNVX1BPUlRfUlhfUTAgPSAweDIwLA0KKwlNVF9UWF9NQ1Vf UE9SVF9SWF9RMSwNCisJTVRfVFhfTUNVX1BPUlRfUlhfUTIsDQorCU1UX1RYX01DVV9QT1JUX1JY X1EzLA0KKwlNVF9UWF9NQ1VfUE9SVF9SWF9GV0RMID0gMHgzZQ0KK307DQorDQorI2RlZmluZSBN VF9DVF9JTkZPX0FQUExZX1RYRAkJQklUKDApDQorI2RlZmluZSBNVF9DVF9JTkZPX0NPUFlfSE9T VF9UWERfQUxMCUJJVCgxKQ0KKyNkZWZpbmUgTVRfQ1RfSU5GT19NR01UX0ZSQU1FCQlCSVQoMikN CisjZGVmaW5lIE1UX0NUX0lORk9fTk9ORV9DSVBIRVJfRlJBTUUJQklUKDMpDQorI2RlZmluZSBN VF9DVF9JTkZPX0hTUjJfVFgJCUJJVCg0KQ0KKw0KKyNkZWZpbmUgTVRfVFhEX1NJWkUJCQkoOCAq IDQpDQorDQorI2RlZmluZSBNVF9UWEQwX1FfSURYCQkJR0VOTUFTSygzMSwgMjUpDQorI2RlZmlu ZSBNVF9UWEQwX1BLVF9GTVQJCQlHRU5NQVNLKDI0LCAyMykNCisjZGVmaW5lIE1UX1RYRDBfRVRI X1RZUEVfT0ZGU0VUCQlHRU5NQVNLKDIyLCAxNikNCisjZGVmaW5lIE1UX1RYRDBfVFhfQllURVMJ CUdFTk1BU0soMTUsIDApDQorDQorI2RlZmluZSBNVF9UWEQxX0xPTkdfRk9STUFUCQlCSVQoMzEp DQorI2RlZmluZSBNVF9UWEQxX1RHSUQJCQlCSVQoMzApDQorI2RlZmluZSBNVF9UWEQxX09XTl9N QUMJCQlHRU5NQVNLKDI5LCAyNCkNCisjZGVmaW5lIE1UX1RYRDFfQU1TRFUJCQlCSVQoMjMpDQor I2RlZmluZSBNVF9UWEQxX1RJRAkJCUdFTk1BU0soMjIsIDIwKQ0KKyNkZWZpbmUgTVRfVFhEMV9I RFJfUEFECQkJR0VOTUFTSygxOSwgMTgpDQorI2RlZmluZSBNVF9UWEQxX0hEUl9GT1JNQVQJCUdF Tk1BU0soMTcsIDE2KQ0KKyNkZWZpbmUgTVRfVFhEMV9IRFJfSU5GTwkJR0VOTUFTSygxNSwgMTEp DQorI2RlZmluZSBNVF9UWEQxX1ZUQQkJCUJJVCgxMCkNCisjZGVmaW5lIE1UX1RYRDFfV0xBTl9J RFgJCUdFTk1BU0soOSwgMCkNCisNCisjZGVmaW5lIE1UX1RYRDJfRklYX1JBVEUJCUJJVCgzMSkN CisjZGVmaW5lIE1UX1RYRDJfRklYRURfUkFURQkJQklUKDMwKQ0KKyNkZWZpbmUgTVRfVFhEMl9Q T1dFUl9PRkZTRVQJCUdFTk1BU0soMjksIDI0KQ0KKyNkZWZpbmUgTVRfVFhEMl9NQVhfVFhfVElN RQkJR0VOTUFTSygyMywgMTYpDQorI2RlZmluZSBNVF9UWEQyX0ZSQUcJCQlHRU5NQVNLKDE1LCAx NCkNCisjZGVmaW5lIE1UX1RYRDJfSFRDX1ZMRAkJCUJJVCgxMykNCisjZGVmaW5lIE1UX1RYRDJf RFVSQVRJT04JCUJJVCgxMikNCisjZGVmaW5lIE1UX1RYRDJfQklQCQkJQklUKDExKQ0KKyNkZWZp bmUgTVRfVFhEMl9NVUxUSUNBU1QJCUJJVCgxMCkNCisjZGVmaW5lIE1UX1RYRDJfUlRTCQkJQklU KDkpDQorI2RlZmluZSBNVF9UWEQyX1NPVU5ESU5HCQlCSVQoOCkNCisjZGVmaW5lIE1UX1RYRDJf TkRQQQkJCUJJVCg3KQ0KKyNkZWZpbmUgTVRfVFhEMl9ORFAJCQlCSVQoNikNCisjZGVmaW5lIE1U X1RYRDJfRlJBTUVfVFlQRQkJR0VOTUFTSyg1LCA0KQ0KKyNkZWZpbmUgTVRfVFhEMl9TVUJfVFlQ RQkJR0VOTUFTSygzLCAwKQ0KKw0KKyNkZWZpbmUgTVRfVFhEM19TTl9WQUxJRAkJQklUKDMxKQ0K KyNkZWZpbmUgTVRfVFhEM19QTl9WQUxJRAkJQklUKDMwKQ0KKyNkZWZpbmUgTVRfVFhEM19TV19Q T1dFUl9NR01UCQlCSVQoMjkpDQorI2RlZmluZSBNVF9UWEQzX0JBX0RJU0FCTEUJCUJJVCgyOCkN CisjZGVmaW5lIE1UX1RYRDNfU0VRCQkJR0VOTUFTSygyNywgMTYpDQorI2RlZmluZSBNVF9UWEQz X1JFTV9UWF9DT1VOVAkJR0VOTUFTSygxNSwgMTEpDQorI2RlZmluZSBNVF9UWEQzX1RYX0NPVU5U CQlHRU5NQVNLKDEwLCA2KQ0KKyNkZWZpbmUgTVRfVFhEM19USU1JTkdfTUVBU1VSRQkJQklUKDUp DQorI2RlZmluZSBNVF9UWEQzX0RBUwkJCUJJVCg0KQ0KKyNkZWZpbmUgTVRfVFhEM19FRU9TUAkJ CUJJVCgzKQ0KKyNkZWZpbmUgTVRfVFhEM19FTVJECQkJQklUKDIpDQorI2RlZmluZSBNVF9UWEQz X1BST1RFQ1RfRlJBTUUJCUJJVCgxKQ0KKyNkZWZpbmUgTVRfVFhEM19OT19BQ0sJCQlCSVQoMCkN CisNCisjZGVmaW5lIE1UX1RYRDRfUE5fTE9XCQkJR0VOTUFTSygzMSwgMCkNCisNCisjZGVmaW5l IE1UX1RYRDVfUE5fSElHSAkJCUdFTk1BU0soMzEsIDE2KQ0KKyNkZWZpbmUgTVRfVFhENV9NRAkJ CUJJVCgxNSkNCisjZGVmaW5lIE1UX1RYRDVfQUREX0JBCQkJQklUKDE0KQ0KKyNkZWZpbmUgTVRf VFhENV9UWF9TVEFUVVNfSE9TVAkJQklUKDEwKQ0KKyNkZWZpbmUgTVRfVFhENV9UWF9TVEFUVVNf TUNVCQlCSVQoOSkNCisjZGVmaW5lIE1UX1RYRDVfVFhfU1RBVFVTX0ZNVAkJQklUKDgpDQorI2Rl ZmluZSBNVF9UWEQ1X1BJRAkJCUdFTk1BU0soNywgMCkNCisNCisjZGVmaW5lIE1UX1RYRDZfVFhf SUJGCQkJQklUKDMxKQ0KKyNkZWZpbmUgTVRfVFhENl9UWF9FQkYJCQlCSVQoMzApDQorI2RlZmlu ZSBNVF9UWEQ2X1RYX1JBVEUJCQlHRU5NQVNLKDI5LCAxNikNCisjZGVmaW5lIE1UX1RYRDZfU0dJ CQkJR0VOTUFTSygxNSwgMTQpDQorI2RlZmluZSBNVF9UWEQ2X0hFTFRGCQkJR0VOTUFTSygxMywg MTIpDQorI2RlZmluZSBNVF9UWEQ2X0xEUEMJCQlCSVQoMTEpDQorI2RlZmluZSBNVF9UWEQ2X1NQ RV9JRF9JRFgJCUJJVCgxMCkNCisjZGVmaW5lIE1UX1RYRDZfQU5UX0lECQkJR0VOTUFTSyg3LCA0 KQ0KKyNkZWZpbmUgTVRfVFhENl9EWU5fQlcJCQlCSVQoMykNCisjZGVmaW5lIE1UX1RYRDZfRklY RURfQlcJCUJJVCgyKQ0KKyNkZWZpbmUgTVRfVFhENl9CVwkJCUdFTk1BU0soMiwgMCkNCisNCisj ZGVmaW5lIE1UX1RYRDdfVFhEX0xFTgkJCUdFTk1BU0soMzEsIDMwKQ0KKyNkZWZpbmUgTVRfVFhE N19VRFBfVENQX1NVTQkJQklUKDI5KQ0KKyNkZWZpbmUgTVRfVFhEN19JUF9TVU0JCQlCSVQoMjgp DQorDQorI2RlZmluZSBNVF9UWEQ3X1RZUEUJCQlHRU5NQVNLKDIxLCAyMCkNCisjZGVmaW5lIE1U X1RYRDdfU1VCX1RZUEUJCUdFTk1BU0soMTksIDE2KQ0KKw0KKyNkZWZpbmUgTVRfVFhEN19QU0Vf RklECQkJR0VOTUFTSygyNywgMTYpDQorI2RlZmluZSBNVF9UWEQ3X1NQRV9JRFgJCQlHRU5NQVNL KDE1LCAxMSkNCisjZGVmaW5lIE1UX1RYRDdfSFdfQU1TRFUJCUJJVCgxMCkNCisjZGVmaW5lIE1U X1RYRDdfVFhfVElNRQkJCUdFTk1BU0soOSwgMCkNCisNCisjZGVmaW5lIE1UX1RYX1JBVEVfU1RC QwkJCUJJVCgxMykNCisjZGVmaW5lIE1UX1RYX1JBVEVfTlNTCQkJR0VOTUFTSygxMiwgMTApDQor I2RlZmluZSBNVF9UWF9SQVRFX01PREUJCQlHRU5NQVNLKDksIDYpDQorI2RlZmluZSBNVF9UWF9S QVRFX0lEWAkJCUdFTk1BU0soNSwgMCkNCisNCisjZGVmaW5lIE1UX1RYUF9NQVhfQlVGX05VTQkJ Ng0KKw0KK3N0cnVjdCBtdDc5MTVfdHhwIHsNCisJX19sZTE2IGZsYWdzOw0KKwlfX2xlMTYgdG9r ZW47DQorCXU4IGJzc19pZHg7DQorCXU4IHJlcHRfd2RzX3djaWQ7DQorCXU4IHJzdjsNCisJdTgg bmJ1ZjsNCisJX19sZTMyIGJ1ZltNVF9UWFBfTUFYX0JVRl9OVU1dOw0KKwlfX2xlMTYgbGVuW01U X1RYUF9NQVhfQlVGX05VTV07DQorfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7DQorDQorc3RydWN0 IG10NzkxNV90eF9mcmVlIHsNCisJX19sZTE2IHJ4X2J5dGVfY250Ow0KKwlfX2xlMTYgY3RybDsN CisJdTggdHhkX2NudDsNCisJdTggcnN2WzNdOw0KKwlfX2xlMzIgaW5mb1tdOw0KK30gX19wYWNr ZWQgX19hbGlnbmVkKDQpOw0KKw0KKyNkZWZpbmUgTVRfVFhfRlJFRV9NU0RVX0NOVAkJR0VOTUFT Syg5LCAwKQ0KKyNkZWZpbmUgTVRfVFhfRlJFRV9XTEFOX0lECQlHRU5NQVNLKDIzLCAxNCkNCisj ZGVmaW5lIE1UX1RYX0ZSRUVfTEFURU5DWQkJR0VOTUFTSygxMiwgMCkNCisvKiAwOiBzdWNjZXNz LCBvdGhlcnM6IGRyb3BwZWQgKi8NCisjZGVmaW5lIE1UX1RYX0ZSRUVfU1RBVFVTCQlHRU5NQVNL KDE0LCAxMykNCisjZGVmaW5lIE1UX1RYX0ZSRUVfTVNEVV9JRAkJR0VOTUFTSygzMCwgMTYpDQor I2RlZmluZSBNVF9UWF9GUkVFX1BBSVIJCQlCSVQoMzEpDQorLyogd2lsbCBzdXBwb3J0IHRoaXMg ZmllbGQgaW4gZnVydGhlciByZXZpc2lvbiAqLw0KKyNkZWZpbmUgTVRfVFhfRlJFRV9SQVRFCQkJ R0VOTUFTSygxMywgMCkNCisNCitzdHJ1Y3QgbXQ3OTE1X2Rmc19wdWxzZSB7DQorCXUzMiBtYXhf d2lkdGg7CQkvKiB1cyAqLw0KKwlpbnQgbWF4X3B3cjsJCS8qIGRibSAqLw0KKwlpbnQgbWluX3B3 cjsJCS8qIGRibSAqLw0KKwl1MzIgbWluX3N0Z3JfcHJpOwkvKiB1cyAqLw0KKwl1MzIgbWF4X3N0 Z3JfcHJpOwkvKiB1cyAqLw0KKwl1MzIgbWluX2NyX3ByaTsJCS8qIHVzICovDQorCXUzMiBtYXhf Y3JfcHJpOwkJLyogdXMgKi8NCit9Ow0KKw0KK3N0cnVjdCBtdDc5MTVfZGZzX3BhdHRlcm4gew0K Kwl1OCBlbmI7DQorCXU4IHN0Z3I7DQorCXU4IG1pbl9jcnBuOw0KKwl1OCBtYXhfY3JwbjsNCisJ dTggbWluX2NycHI7DQorCXU4IG1pbl9wdzsNCisJdTMyIG1pbl9wcmk7DQorCXUzMiBtYXhfcHJp Ow0KKwl1OCBtYXhfcHc7DQorCXU4IG1pbl9jcmJuOw0KKwl1OCBtYXhfY3JibjsNCisJdTggbWlu X3N0Z3BuOw0KKwl1OCBtYXhfc3RncG47DQorCXU4IG1pbl9zdGdwcjsNCisJdTggcnN2WzJdOw0K Kwl1MzIgbWluX3N0Z3ByX2RpZmY7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgbXQ3OTE1X2Rm c19yYWRhcl9zcGVjIHsNCisJc3RydWN0IG10NzkxNV9kZnNfcHVsc2UgcHVsc2VfdGg7DQorCXN0 cnVjdCBtdDc5MTVfZGZzX3BhdHRlcm4gcmFkYXJfcGF0dGVyblsxNl07DQorfTsNCisNCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBtdDc5MTVfdHhwICoNCittdDc5MTVfdHh3aV90b190eHAoc3RydWN0 IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBtdDc2X3R4d2lfY2FjaGUgKnQpDQorew0KKwl1OCAqdHh3 aTsNCisNCisJaWYgKCF0KQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCXR4d2kgPSBtdDc2X2dldF90 eHdpX3B0cihkZXYsIHQpOw0KKw0KKwlyZXR1cm4gKHN0cnVjdCBtdDc5MTVfdHhwICopKHR4d2kg KyBNVF9UWERfU0laRSk7DQorfQ0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVs ZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21haW4uYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmlu ZGV4IDAwMDAwMDAwMDAwMC4uZTllOWU3ZTIxMzg4DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2 ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tYWluLmMNCkBAIC0wLDAgKzEs NzQzIEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQw0KKy8qIENvcHlyaWdodCAo QykgMjAyMCBNZWRpYVRlayBJbmMuICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNl Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51 eC9wY2kuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgIm10NzkxNS5o Ig0KKyNpbmNsdWRlICJtY3UuaCINCisNCitzdGF0aWMgYm9vbCBtdDc5MTVfZGV2X3J1bm5pbmco c3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHk7DQor DQorCWlmICh0ZXN0X2JpdChNVDc2X1NUQVRFX1JVTk5JTkcsICZkZXYtPm1waHkuc3RhdGUpKQ0K KwkJcmV0dXJuIHRydWU7DQorDQorCXBoeSA9IG10NzkxNV9leHRfcGh5KGRldik7DQorDQorCXJl dHVybiBwaHkgJiYgdGVzdF9iaXQoTVQ3Nl9TVEFURV9SVU5OSU5HLCAmcGh5LT5tdDc2LT5zdGF0 ZSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3KQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19kZXYoaHcpOw0K KwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7DQorCWJvb2wgcnVu bmluZzsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJcnVubmluZyA9 IG10NzkxNV9kZXZfcnVubmluZyhkZXYpOw0KKw0KKwlpZiAoIXJ1bm5pbmcpIHsNCisJCW10Nzkx NV9tY3Vfc2V0X3BtKGRldiwgMCwgMCk7DQorCQltdDc5MTVfbWN1X3NldF9tYWMoZGV2LCAwLCB0 cnVlLCBmYWxzZSk7DQorCQltdDc5MTVfbWN1X3NldF9zY3MoZGV2LCAwLCB0cnVlKTsNCisJfQ0K Kw0KKwlpZiAocGh5ICE9ICZkZXYtPnBoeSkgew0KKwkJbXQ3OTE1X21jdV9zZXRfcG0oZGV2LCAx LCAwKTsNCisJCW10NzkxNV9tY3Vfc2V0X21hYyhkZXYsIDEsIHRydWUsIGZhbHNlKTsNCisJCW10 NzkxNV9tY3Vfc2V0X3NjcyhkZXYsIDEsIHRydWUpOw0KKwl9DQorDQorCW10NzkxNV9tY3Vfc2V0 X2NoYW5faW5mbyhwaHksIE1DVV9FWFRfQ01EX1NFVF9SWF9QQVRIKTsNCisNCisJc2V0X2JpdChN VDc2X1NUQVRFX1JVTk5JTkcsICZwaHktPm10NzYtPnN0YXRlKTsNCisNCisJaWYgKHJ1bm5pbmcp DQorCQlnb3RvIG91dDsNCisNCisJbXQ3OTE1X21hY19yZXNldF9jb3VudGVycyhwaHkpOw0KKw0K KwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKG10NzZfaHcoZGV2KSwgJmRldi0+bXQ3Ni5t YWNfd29yaywNCisJCQkJICAgICBNVDc5MTVfV0FUQ0hET0dfVElNRSk7DQorb3V0Og0KKwltdXRl eF91bmxvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgdm9pZCBtdDc5MTVfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykNCit7DQorCXN0cnVj dCBtdDc5MTVfZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10NzkxNV9w aHkgKnBoeSA9IG10NzkxNV9od19waHkoaHcpOw0KKw0KKwltdXRleF9sb2NrKCZkZXYtPm10NzYu bXV0ZXgpOw0KKw0KKwljbGVhcl9iaXQoTVQ3Nl9TVEFURV9SVU5OSU5HLCAmcGh5LT5tdDc2LT5z dGF0ZSk7DQorDQorCWlmIChwaHkgIT0gJmRldi0+cGh5KSB7DQorCQltdDc5MTVfbWN1X3NldF9w bShkZXYsIDEsIDEpOw0KKwkJbXQ3OTE1X21jdV9zZXRfbWFjKGRldiwgMSwgZmFsc2UsIGZhbHNl KTsNCisJfQ0KKw0KKwlpZiAoIW10NzkxNV9kZXZfcnVubmluZyhkZXYpKSB7DQorCQljYW5jZWxf ZGVsYXllZF93b3JrX3N5bmMoJmRldi0+bXQ3Ni5tYWNfd29yayk7DQorDQorCQltdDc5MTVfbWN1 X3NldF9wbShkZXYsIDAsIDEpOw0KKwkJbXQ3OTE1X21jdV9zZXRfbWFjKGRldiwgMCwgZmFsc2Us IGZhbHNlKTsNCisJfQ0KKw0KKwltdXRleF91bmxvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgZ2V0X29tYWNfaWR4KGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMy IG1hc2spDQorew0KKwlpbnQgaTsNCisNCisJc3dpdGNoICh0eXBlKSB7DQorCWNhc2UgTkw4MDIx MV9JRlRZUEVfTU9OSVRPUjoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoNCisJY2FzZSBOTDgw MjExX0lGVFlQRV9NRVNIX1BPSU5UOg0KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOg0KKwkJ LyogYXAgdXNlcyBodyBic3NpZCAwIGFuZCBleHQgYnNzaWQgKi8NCisJCWlmICh+bWFzayAmIEJJ VChIV19CU1NJRF8wKSkNCisJCQlyZXR1cm4gSFdfQlNTSURfMDsNCisNCisJCWZvciAoaSA9IEVY VF9CU1NJRF8xOyBpIDwgRVhUX0JTU0lEX0VORDsgaSsrKQ0KKwkJCWlmICh+bWFzayAmIEJJVChp KSkNCisJCQkJcmV0dXJuIGk7DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFU SU9OOg0KKwkJLyogc3RhdGlvbiB1c2VzIGh3IGJzc2lkIG90aGVyIHRoYW4gMCAqLw0KKwkJZm9y IChpID0gSFdfQlNTSURfMTsgaSA8IEhXX0JTU0lEX01BWDsgaSsrKQ0KKwkJCWlmICh+bWFzayAm IEJJVChpKSkNCisJCQkJcmV0dXJuIGk7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCVdBUk5f T04oMSk7DQorCQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gLTE7DQorfQ0KKw0KK3N0YXRpYyBp bnQgbXQ3OTE1X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCXN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9 IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10 NzkxNV9od19waHkoaHcpOw0KKwlzdHJ1Y3QgbXQ3Nl90eHEgKm10eHE7DQorCWJvb2wgZXh0X3Bo eSA9IHBoeSAhPSAmZGV2LT5waHk7DQorCWludCBpZHgsIHJldCA9IDA7DQorDQorCW11dGV4X2xv Y2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCW12aWYtPmlkeCA9IGZmcyh+ZGV2LT52aWZfbWFz aykgLSAxOw0KKwlpZiAobXZpZi0+aWR4ID49IE1UNzkxNV9NQVhfSU5URVJGQUNFUykgew0KKwkJ cmV0ID0gLUVOT1NQQzsNCisJCWdvdG8gb3V0Ow0KKwl9DQorDQorCWlkeCA9IGdldF9vbWFjX2lk eCh2aWYtPnR5cGUsIGRldi0+b21hY19tYXNrKTsNCisJaWYgKGlkeCA8IDApIHsNCisJCXJldCA9 IC1FTk9TUEM7DQorCQlnb3RvIG91dDsNCisJfQ0KKwltdmlmLT5vbWFjX2lkeCA9IGlkeDsNCisJ bXZpZi0+ZGV2ID0gZGV2Ow0KKw0KKwltdmlmLT5iYW5kX2lkeCA9IGV4dF9waHk7DQorCWlmICht dDc5MTVfZXh0X3BoeShkZXYpKQ0KKwkJbXZpZi0+d21tX2lkeCA9IGV4dF9waHkgKiAoTVQ3OTE1 X01BWF9XTU1fU0VUUyAvIDIpICsNCisJCQkJbXZpZi0+aWR4ICUgKE1UNzkxNV9NQVhfV01NX1NF VFMgLyAyKTsNCisJZWxzZQ0KKwkJbXZpZi0+d21tX2lkeCA9IG12aWYtPmlkeCAlIE1UNzkxNV9N QVhfV01NX1NFVFM7DQorDQorCXJldCA9IG10NzkxNV9tY3VfYWRkX2Rldl9pbmZvKGRldiwgdmlm LCB0cnVlKTsNCisJaWYgKHJldCkNCisJCWdvdG8gb3V0Ow0KKw0KKwlkZXYtPnZpZl9tYXNrIHw9 IEJJVChtdmlmLT5pZHgpOw0KKwlkZXYtPm9tYWNfbWFzayB8PSBCSVQobXZpZi0+b21hY19pZHgp Ow0KKwlwaHktPm9tYWNfbWFzayB8PSBCSVQobXZpZi0+b21hY19pZHgpOw0KKw0KKwlpZHggPSBN VDc5MTVfV1RCTF9SRVNFUlZFRCAtIG12aWYtPmlkeDsNCisNCisJSU5JVF9MSVNUX0hFQUQoJm12 aWYtPnN0YS5wb2xsX2xpc3QpOw0KKwltdmlmLT5zdGEud2NpZC5pZHggPSBpZHg7DQorCW12aWYt PnN0YS53Y2lkLmV4dF9waHkgPSBtdmlmLT5iYW5kX2lkeDsNCisJbXZpZi0+c3RhLndjaWQuaHdf a2V5X2lkeCA9IC0xOw0KKwltdmlmLT5zdGEud2NpZC50eF9pbmZvIHw9IE1UX1dDSURfVFhfSU5G T19TRVQ7DQorCW10NzkxNV9tYWNfd3RibF91cGRhdGUoZGV2LCBpZHgsDQorCQkJICAgICAgIE1U X1dUQkxfVVBEQVRFX0FETV9DT1VOVF9DTEVBUik7DQorDQorCXJjdV9hc3NpZ25fcG9pbnRlcihk ZXYtPm10NzYud2NpZFtpZHhdLCAmbXZpZi0+c3RhLndjaWQpOw0KKwlpZiAodmlmLT50eHEpIHsN CisJCW10eHEgPSAoc3RydWN0IG10NzZfdHhxICopdmlmLT50eHEtPmRydl9wcml2Ow0KKwkJbXR4 cS0+d2NpZCA9ICZtdmlmLT5zdGEud2NpZDsNCisJCW10NzZfdHhxX2luaXQoJmRldi0+bXQ3Niwg dmlmLT50eHEpOw0KKwl9DQorDQorb3V0Og0KKwltdXRleF91bmxvY2soJmRldi0+bXQ3Ni5tdXRl eCk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10NzkxNV9yZW1vdmVf aW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQkgICAgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZikNCit7DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBt dDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGEgPSAm bXZpZi0+c3RhOw0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7 DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBtdDc5MTVfaHdfcGh5KGh3KTsNCisJaW50IGlk eCA9IG1zdGEtPndjaWQuaWR4Ow0KKw0KKwkvKiBUT0RPOiBkaXNhYmxlIGJlYWNvbiBmb3IgdGhl IGJzcyAqLw0KKw0KKwltdDc5MTVfbWN1X2FkZF9kZXZfaW5mbyhkZXYsIHZpZiwgZmFsc2UpOw0K Kw0KKwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LT5tdDc2LndjaWRbaWR4XSwgTlVMTCk7DQorCWlm ICh2aWYtPnR4cSkNCisJCW10NzZfdHhxX3JlbW92ZSgmZGV2LT5tdDc2LCB2aWYtPnR4cSk7DQor DQorCW11dGV4X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorCWRldi0+dmlmX21hc2sgJj0gfkJJ VChtdmlmLT5pZHgpOw0KKwlkZXYtPm9tYWNfbWFzayAmPSB+QklUKG12aWYtPm9tYWNfaWR4KTsN CisJcGh5LT5vbWFjX21hc2sgJj0gfkJJVChtdmlmLT5vbWFjX2lkeCk7DQorCW11dGV4X3VubG9j aygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJc3Bpbl9sb2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xv Y2spOw0KKwlpZiAoIWxpc3RfZW1wdHkoJm1zdGEtPnBvbGxfbGlzdCkpDQorCQlsaXN0X2RlbF9p bml0KCZtc3RhLT5wb2xsX2xpc3QpOw0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5zdGFfcG9sbF9s b2NrKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXQ3OTE1X2luaXRfZGZzX3N0YXRlKHN0cnVjdCBt dDc5MTVfcGh5ICpwaHkpDQorew0KKwlzdHJ1Y3QgbXQ3Nl9waHkgKm1waHkgPSBwaHktPm10NzY7 DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbXBoeS0+aHc7DQorCXN0cnVjdCBjZmc4MDIx MV9jaGFuX2RlZiAqY2hhbmRlZiA9ICZody0+Y29uZi5jaGFuZGVmOw0KKw0KKwlpZiAoaHctPmNv bmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9PRkZDSEFOTkVMKQ0KKwkJcmV0dXJuOw0KKw0KKwlp ZiAoIShjaGFuZGVmLT5jaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSkNCisJCXJl dHVybjsNCisNCisJaWYgKG1waHktPmNoYW5kZWYuY2hhbi0+Y2VudGVyX2ZyZXEgPT0gY2hhbmRl Zi0+Y2hhbi0+Y2VudGVyX2ZyZXEgJiYNCisJICAgIG1waHktPmNoYW5kZWYud2lkdGggPT0gY2hh bmRlZi0+d2lkdGgpDQorCQlyZXR1cm47DQorDQorCXBoeS0+ZGZzX3N0YXRlID0gLTE7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgbXQ3OTE1X3NldF9jaGFubmVsKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkp DQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5LT5kZXY7DQorCWludCByZXQ7DQor DQorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2LT5tdDc2Lm1hY193b3JrKTsNCisNCisJ bXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisJc2V0X2JpdChNVDc2X1JFU0VULCAmcGh5 LT5tdDc2LT5zdGF0ZSk7DQorDQorCW10NzkxNV9pbml0X2Rmc19zdGF0ZShwaHkpOw0KKwltdDc2 X3NldF9jaGFubmVsKHBoeS0+bXQ3Nik7DQorDQorCXJldCA9IG10NzkxNV9tY3Vfc2V0X2NoYW5f aW5mbyhwaHksIE1DVV9FWFRfQ01EX0NIQU5ORUxfU1dJVENIKTsNCisJaWYgKHJldCkNCisJCWdv dG8gb3V0Ow0KKw0KKwltdDc5MTVfbWFjX3NldF90aW1pbmcocGh5KTsNCisJcmV0ID0gbXQ3OTE1 X2Rmc19pbml0X3JhZGFyX2RldGVjdG9yKHBoeSk7DQorCW10NzkxNV9tYWNfY2NhX3N0YXRzX3Jl c2V0KHBoeSk7DQorDQorCW10NzkxNV9tYWNfcmVzZXRfY291bnRlcnMocGh5KTsNCisJcGh5LT5u b2lzZSA9IDA7DQorDQorb3V0Og0KKwljbGVhcl9iaXQoTVQ3Nl9SRVNFVCwgJnBoeS0+bXQ3Ni0+ c3RhdGUpOw0KKwltdXRleF91bmxvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCW10NzZfdHhx X3NjaGVkdWxlX2FsbChwaHktPm10NzYpOw0KKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3Jr KG10NzZfaHcoZGV2KSwgJmRldi0+bXQ3Ni5tYWNfd29yaywNCisJCQkJICAgICBNVDc5MTVfV0FU Q0hET0dfVElNRSk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1 X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLA0K KwkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0 YSwNCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkNCit7DQorCXN0cnVjdCBt dDc5MTVfZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10NzkxNV92aWYg Km12aWYgPSAoc3RydWN0IG10NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3QgbXQ3 OTE1X3N0YSAqbXN0YSA9IHN0YSA/IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXN0YS0+ZHJ2X3ByaXYg Og0KKwkJCQkgICZtdmlmLT5zdGE7DQorCXN0cnVjdCBtdDc2X3djaWQgKndjaWQgPSAmbXN0YS0+ d2NpZDsNCisJaW50IGlkeCA9IGtleS0+a2V5aWR4Ow0KKw0KKwkvKiBUaGUgaGFyZHdhcmUgZG9l cyBub3Qgc3VwcG9ydCBwZXItU1RBIFJYIEdUSywgZmFsbGJhY2sNCisJICogdG8gc29mdHdhcmUg bW9kZSBmb3IgdGhlc2UuDQorCSAqLw0KKwlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQ RV9BREhPQyB8fA0KKwkgICAgIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5U KSAmJg0KKwkgICAgKGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgfHwNCisJ ICAgICBrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QKSAmJg0KKwkgICAgIShr ZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkNCisJCXJldHVybiAtRU9Q Tk9UU1VQUDsNCisNCisJLyogZmFsbCBiYWNrIHRvIHN3IGVuY3J5cHRpb24gZm9yIHVuc3VwcG9y dGVkIGNpcGhlcnMgKi8NCisJc3dpdGNoIChrZXktPmNpcGhlcikgew0KKwljYXNlIFdMQU5fQ0lQ SEVSX1NVSVRFX0FFU19DTUFDOg0KKwkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdf R0VORVJBVEVfTU1JRTsNCisJCWJyZWFrOw0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQw Og0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoNCisJY2FzZSBXTEFOX0NJUEhFUl9T VUlURV9US0lQOg0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6DQorCWNhc2UgV0xBTl9D SVBIRVJfU1VJVEVfQ0NNUF8yNTY6DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUDoNCisJ Y2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QXzI1NjoNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlU RV9TTVM0Og0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQor CX0NCisNCisJaWYgKGNtZCA9PSBTRVRfS0VZKSB7DQorCQlrZXktPmh3X2tleV9pZHggPSB3Y2lk LT5pZHg7DQorCQl3Y2lkLT5od19rZXlfaWR4ID0gaWR4Ow0KKwl9IGVsc2UgaWYgKGlkeCA9PSB3 Y2lkLT5od19rZXlfaWR4KSB7DQorCQl3Y2lkLT5od19rZXlfaWR4ID0gLTE7DQorCX0NCisJbXQ3 Nl93Y2lkX2tleV9zZXR1cCgmZGV2LT5tdDc2LCB3Y2lkLA0KKwkJCSAgICBjbWQgPT0gU0VUX0tF WSA/IGtleSA6IE5VTEwpOw0KKw0KKwlyZXR1cm4gbXQ3OTE1X21jdV9hZGRfa2V5KGRldiwgdmlm LCBtc3RhLCBrZXksIGNtZCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1X2NvbmZpZyhzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBt dDc5MTVfaHdfcGh5KGh3KTsNCisJYm9vbCBiYW5kID0gcGh5ICE9ICZkZXYtPnBoeTsNCisJaW50 IHJldDsNCisNCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkg ew0KKwkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsNCisJCXJldCA9IG10NzkxNV9zZXRfY2hh bm5lbChwaHkpOw0KKwkJaWYgKHJldCkNCisJCQlyZXR1cm4gcmV0Ow0KKwkJaWVlZTgwMjExX3dh a2VfcXVldWVzKGh3KTsNCisJfQ0KKw0KKwltdXRleF9sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0K Kw0KKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9NT05JVE9SKSB7DQorCQlp ZiAoIShody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX01PTklUT1IpKQ0KKwkJCXBoeS0+ cnhmaWx0ZXIgfD0gTVRfV0ZfUkZDUl9EUk9QX09USEVSX1VDOw0KKwkJZWxzZQ0KKwkJCXBoeS0+ cnhmaWx0ZXIgJj0gfk1UX1dGX1JGQ1JfRFJPUF9PVEhFUl9VQzsNCisNCisJCW10NzZfd3IoZGV2 LCBNVF9XRl9SRkNSKGJhbmQpLCBwaHktPnJ4ZmlsdGVyKTsNCisJfQ0KKw0KKwltdXRleF91bmxv Y2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50 DQorbXQ3OTE1X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsIHUxNiBxdWV1ZSwNCisJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFf dHhfcXVldWVfcGFyYW1zICpwYXJhbXMpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9 IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorDQorCS8qIG5vIG5lZWQgdG8g dXBkYXRlIHJpZ2h0IGF3YXksIHdlJ2xsIGdldCBCU1NfQ0hBTkdFRF9RT1MgKi8NCisJbXZpZi0+ d21tW3F1ZXVlXS5jd19taW4gPSBwYXJhbXMtPmN3X21pbjsNCisJbXZpZi0+d21tW3F1ZXVlXS5j d19tYXggPSBwYXJhbXMtPmN3X21heDsNCisJbXZpZi0+d21tW3F1ZXVlXS5haWZzID0gcGFyYW1z LT5haWZzOw0KKwltdmlmLT53bW1bcXVldWVdLnR4b3AgPSBwYXJhbXMtPnR4b3A7DQorDQorCXJl dHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBtdDc5MTVfY29uZmlndXJlX2ZpbHRlcihzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdz LA0KKwkJCQkgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywNCisJCQkJICAgIHU2NCBtdWx0 aWNhc3QpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7 DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBtdDc5MTVfaHdfcGh5KGh3KTsNCisJYm9vbCBi YW5kID0gcGh5ICE9ICZkZXYtPnBoeTsNCisNCisJdTMyIGN0bF9mbGFncyA9IE1UX1dGX1JGQ1Ix X0RST1BfQUNLIHwNCisJCQlNVF9XRl9SRkNSMV9EUk9QX0JGX1BPTEwgfA0KKwkJCU1UX1dGX1JG Q1IxX0RST1BfQkEgfA0KKwkJCU1UX1dGX1JGQ1IxX0RST1BfQ0ZFTkQgfA0KKwkJCU1UX1dGX1JG Q1IxX0RST1BfQ0ZBQ0s7DQorCXUzMiBmbGFncyA9IDA7DQorDQorI2RlZmluZSBNVDc2X0ZJTFRF UihfZmxhZywgX2h3KSBkbyB7CQkJCQlcDQorCQlmbGFncyB8PSAqdG90YWxfZmxhZ3MgJiBGSUZf IyNfZmxhZzsJCQlcDQorCQlwaHktPnJ4ZmlsdGVyICY9IH4oX2h3KTsJCQkJXA0KKwkJcGh5LT5y eGZpbHRlciB8PSAhKGZsYWdzICYgRklGXyMjX2ZsYWcpICogKF9odyk7CVwNCisJfSB3aGlsZSAo MCkNCisNCisJcGh5LT5yeGZpbHRlciAmPSB+KE1UX1dGX1JGQ1JfRFJPUF9PVEhFUl9CU1MgfA0K KwkJCSAgIE1UX1dGX1JGQ1JfRFJPUF9PVEhFUl9CRUFDT04gfA0KKwkJCSAgIE1UX1dGX1JGQ1Jf RFJPUF9GUkFNRV9SRVBPUlQgfA0KKwkJCSAgIE1UX1dGX1JGQ1JfRFJPUF9QUk9CRVJFUSB8DQor CQkJICAgTVRfV0ZfUkZDUl9EUk9QX01DQVNUX0ZJTFRFUkVEIHwNCisJCQkgICBNVF9XRl9SRkNS X0RST1BfTUNBU1QgfA0KKwkJCSAgIE1UX1dGX1JGQ1JfRFJPUF9CQ0FTVCB8DQorCQkJICAgTVRf V0ZfUkZDUl9EUk9QX0RVUExJQ0FURSB8DQorCQkJICAgTVRfV0ZfUkZDUl9EUk9QX0EyX0JTU0lE IHwNCisJCQkgICBNVF9XRl9SRkNSX0RST1BfVU5XQU5URURfQ1RMIHwNCisJCQkgICBNVF9XRl9S RkNSX0RST1BfU1RCQ19NVUxUSSk7DQorDQorCU1UNzZfRklMVEVSKE9USEVSX0JTUywgTVRfV0Zf UkZDUl9EUk9QX09USEVSX1RJTSB8DQorCQkJICAgICAgIE1UX1dGX1JGQ1JfRFJPUF9BM19NQUMg fA0KKwkJCSAgICAgICBNVF9XRl9SRkNSX0RST1BfQTNfQlNTSUQpOw0KKw0KKwlNVDc2X0ZJTFRF UihGQ1NGQUlMLCBNVF9XRl9SRkNSX0RST1BfRkNTRkFJTCk7DQorDQorCU1UNzZfRklMVEVSKENP TlRST0wsIE1UX1dGX1JGQ1JfRFJPUF9DVFMgfA0KKwkJCSAgICAgTVRfV0ZfUkZDUl9EUk9QX1JU UyB8DQorCQkJICAgICBNVF9XRl9SRkNSX0RST1BfQ1RMX1JTViB8DQorCQkJICAgICBNVF9XRl9S RkNSX0RST1BfTkRQQSk7DQorDQorCSp0b3RhbF9mbGFncyA9IGZsYWdzOw0KKwltdDc2X3dyKGRl diwgTVRfV0ZfUkZDUihiYW5kKSwgcGh5LT5yeGZpbHRlcik7DQorDQorCWlmICgqdG90YWxfZmxh Z3MgJiBGSUZfQ09OVFJPTCkNCisJCW10NzZfY2xlYXIoZGV2LCBNVF9XRl9SRkNSMShiYW5kKSwg Y3RsX2ZsYWdzKTsNCisJZWxzZQ0KKwkJbXQ3Nl9zZXQoZGV2LCBNVF9XRl9SRkNSMShiYW5kKSwg Y3RsX2ZsYWdzKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXQ3OTE1X2Jzc19pbmZvX2NoYW5nZWQo c3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmLA0KKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywNCisJCQkJICAg IHUzMiBjaGFuZ2VkKQ0KK3sNCisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9od19w aHkoaHcpOw0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQor DQorCW11dGV4X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCS8qDQorCSAqIHN0YXRpb24g bW9kZSB1c2VzIEJTU0lEIHRvIG1hcCB0aGUgd2xhbiBlbnRyeSB0byBhIHBlZXIsDQorCSAqIGFu ZCB0aGVuIHBlZXIgcmVmZXJlbmNlcyBic3NfaW5mb19yZmNoIHRvIHNldCBiYW5kd2lkdGggY2Fw Lg0KKwkgKi8NCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCAmJg0KKwkgICAgdmlm LT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsNCisJCWJvb2wgam9pbiA9ICFpc196 ZXJvX2V0aGVyX2FkZHIoaW5mby0+YnNzaWQpOw0KKw0KKwkJbXQ3OTE1X21jdV9hZGRfYnNzX2lu Zm8ocGh5LCB2aWYsIGpvaW4pOw0KKwkJbXQ3OTE1X21jdV9hZGRfc3RhKGRldiwgdmlmLCBOVUxM LCBqb2luKTsNCisJfQ0KKw0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKQ0KKwkJ bXQ3OTE1X21jdV9hZGRfYnNzX2luZm8ocGh5LCB2aWYsIGluZm8tPmFzc29jKTsNCisNCisJaWYg KGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgew0KKwkJaW50IHNsb3R0aW1lID0gaW5m by0+dXNlX3Nob3J0X3Nsb3QgPyA5IDogMjA7DQorDQorCQlpZiAoc2xvdHRpbWUgIT0gcGh5LT5z bG90dGltZSkgew0KKwkJCXBoeS0+c2xvdHRpbWUgPSBzbG90dGltZTsNCisJCQltdDc5MTVfbWFj X3NldF90aW1pbmcocGh5KTsNCisJCX0NCisJfQ0KKw0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFO R0VEX0JFQUNPTl9FTkFCTEVEKSB7DQorCQltdDc5MTVfbWN1X2FkZF9ic3NfaW5mbyhwaHksIHZp ZiwgaW5mby0+ZW5hYmxlX2JlYWNvbik7DQorCQltdDc5MTVfbWN1X2FkZF9zdGEoZGV2LCB2aWYs IE5VTEwsIGluZm8tPmVuYWJsZV9iZWFjb24pOw0KKwl9DQorDQorCS8qIGVuc3VyZSB0aGF0IGVu YWJsZSB0eGNtZF9tb2RlIGFmdGVyIGJzc19pbmZvICovDQorCWlmIChjaGFuZ2VkICYgKEJTU19D SEFOR0VEX1FPUyB8IEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSkNCisJCW10NzkxNV9tY3Vf c2V0X3R4KGRldiwgdmlmKTsNCisNCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQkVBQ09O IHwNCisJCSAgICAgICBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkpDQorCQltdDc5MTVfbWN1 X2FkZF9iZWFjb24oaHcsIHZpZiwgaW5mby0+ZW5hYmxlX2JlYWNvbik7DQorDQorCW11dGV4X3Vu bG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfY2hh bm5lbF9zd2l0Y2hfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCSAgICAgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9jaGFuX2Rl ZiAqY2hhbmRlZikNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2 KGh3KTsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisJbXQ3OTE1X21jdV9h ZGRfYmVhY29uKGh3LCB2aWYsIHRydWUpOw0KKwltdXRleF91bmxvY2soJmRldi0+bXQ3Ni5tdXRl eCk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWFjX3N0YV9hZGQoc3RydWN0IG10NzZfZGV2ICptZGV2 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFf c3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gY29udGFpbmVyX29mKG1k ZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGEg PSAoc3RydWN0IG10NzkxNV9zdGEgKilzdGEtPmRydl9wcml2Ow0KKwlzdHJ1Y3QgbXQ3OTE1X3Zp ZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCWludCBpZHg7 DQorDQorCWlkeCA9IG10NzZfd2NpZF9hbGxvYyhkZXYtPm10NzYud2NpZF9tYXNrLCBNVDc5MTVf V1RCTF9TVEEgLSAxKTsNCisJaWYgKGlkeCA8IDApDQorCQlyZXR1cm4gLUVOT1NQQzsNCisNCisJ SU5JVF9MSVNUX0hFQUQoJm1zdGEtPnBvbGxfbGlzdCk7DQorCUlOSVRfV09SSygmbXN0YS0+c3Rh dHNfd29yaywgbXQ3OTE1X21hY19zdGFfc3RhdHNfd29yayk7DQorCXNwaW5fbG9ja19pbml0KCZt c3RhLT5hbXBkdV9sb2NrKTsNCisJbXN0YS0+dmlmID0gbXZpZjsNCisJbXN0YS0+d2NpZC5zdGEg PSAxOw0KKwltc3RhLT53Y2lkLmlkeCA9IGlkeDsNCisJbXN0YS0+d2NpZC5leHRfcGh5ID0gbXZp Zi0+YmFuZF9pZHg7DQorCW1zdGEtPndjaWQudHhfaW5mbyB8PSBNVF9XQ0lEX1RYX0lORk9fU0VU Ow0KKwltc3RhLT5zdGF0cy5qaWZmaWVzID0gamlmZmllczsNCisNCisJbXQ3OTE1X21hY193dGJs X3VwZGF0ZShkZXYsIGlkeCwNCisJCQkgICAgICAgTVRfV1RCTF9VUERBVEVfQURNX0NPVU5UX0NM RUFSKTsNCisNCisJbXQ3OTE1X21jdV9hZGRfc3RhKGRldiwgdmlmLCBzdGEsIHRydWUpOw0KKw0K KwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBtdDc5MTVfbWFjX3N0YV9yZW1vdmUoc3RydWN0IG10 NzZfZGV2ICptZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgIHN0cnVjdCBp ZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gY29udGFp bmVyX29mKG1kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCisJc3RydWN0IG10NzkxNV9z dGEgKm1zdGEgPSAoc3RydWN0IG10NzkxNV9zdGEgKilzdGEtPmRydl9wcml2Ow0KKw0KKwltdDc5 MTVfbWN1X2FkZF9zdGEoZGV2LCB2aWYsIHN0YSwgZmFsc2UpOw0KKw0KKwltdDc5MTVfbWFjX3d0 YmxfdXBkYXRlKGRldiwgbXN0YS0+d2NpZC5pZHgsDQorCQkJICAgICAgIE1UX1dUQkxfVVBEQVRF X0FETV9DT1VOVF9DTEVBUik7DQorDQorCXNwaW5fbG9ja19iaCgmZGV2LT5zdGFfcG9sbF9sb2Nr KTsNCisJaWYgKCFsaXN0X2VtcHR5KCZtc3RhLT5wb2xsX2xpc3QpKQ0KKwkJbGlzdF9kZWxfaW5p dCgmbXN0YS0+cG9sbF9saXN0KTsNCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+c3RhX3BvbGxfbG9j ayk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10NzkxNV90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywNCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCwNCisJCSAg ICAgIHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0g bXQ3OTE1X2h3X2Rldihodyk7DQorCXN0cnVjdCBtdDc2X3BoeSAqbXBoeSA9IGh3LT5wcml2Ow0K KwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7 DQorCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBpbmZvLT5jb250cm9sLnZpZjsNCisJc3Ry dWN0IG10NzZfd2NpZCAqd2NpZCA9ICZkZXYtPm10NzYuZ2xvYmFsX3djaWQ7DQorDQorCWlmIChj b250cm9sLT5zdGEpIHsNCisJCXN0cnVjdCBtdDc5MTVfc3RhICpzdGE7DQorDQorCQlzdGEgPSAo c3RydWN0IG10NzkxNV9zdGEgKiljb250cm9sLT5zdGEtPmRydl9wcml2Ow0KKwkJd2NpZCA9ICZz dGEtPndjaWQ7DQorCX0NCisNCisJaWYgKHZpZiAmJiAhY29udHJvbC0+c3RhKSB7DQorCQlzdHJ1 Y3QgbXQ3OTE1X3ZpZiAqbXZpZjsNCisNCisJCW12aWYgPSAoc3RydWN0IG10NzkxNV92aWYgKil2 aWYtPmRydl9wcml2Ow0KKwkJd2NpZCA9ICZtdmlmLT5zdGEud2NpZDsNCisJfQ0KKw0KKwltdDc2 X3R4KG1waHksIGNvbnRyb2wtPnN0YSwgd2NpZCwgc2tiKTsNCit9DQorDQorc3RhdGljIGludCBt dDc5MTVfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWwp DQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQorCXN0 cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBtdDc5MTVfaHdfcGh5KGh3KTsNCisNCisJbXV0ZXhfbG9j aygmZGV2LT5tdDc2Lm11dGV4KTsNCisJbXQ3OTE1X21jdV9zZXRfcnRzX3RocmVzaChwaHksIHZh bCk7DQorCW11dGV4X3VubG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgIHN0cnVjdCBpZWVlODAy MTFfYW1wZHVfcGFyYW1zICpwYXJhbXMpDQorew0KKwllbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1l X2FjdGlvbiBhY3Rpb24gPSBwYXJhbXMtPmFjdGlvbjsNCisJc3RydWN0IG10NzkxNV9kZXYgKmRl diA9IG10NzkxNV9od19kZXYoaHcpOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gcGFy YW1zLT5zdGE7DQorCXN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEgPSBzdGEtPnR4cVtwYXJhbXMt PnRpZF07DQorCXN0cnVjdCBtdDc5MTVfc3RhICptc3RhID0gKHN0cnVjdCBtdDc5MTVfc3RhICop c3RhLT5kcnZfcHJpdjsNCisJdTE2IHRpZCA9IHBhcmFtcy0+dGlkOw0KKwl1MTYgc3NuID0gcGFy YW1zLT5zc247DQorCXN0cnVjdCBtdDc2X3R4cSAqbXR4cTsNCisJaW50IHJldCA9IDA7DQorDQor CWlmICghdHhxKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCW10eHEgPSAoc3RydWN0IG10NzZf dHhxICopdHhxLT5kcnZfcHJpdjsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4KTsN CisJc3dpdGNoIChhY3Rpb24pIHsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6DQor CQltdDc2X3J4X2FnZ3Jfc3RhcnQoJmRldi0+bXQ3NiwgJm1zdGEtPndjaWQsIHRpZCwgc3NuLA0K KwkJCQkgICBwYXJhbXMtPmJ1Zl9zaXplKTsNCisJCW10NzkxNV9tY3VfYWRkX3J4X2JhKGRldiwg cGFyYW1zLCB0cnVlKTsNCisJCWJyZWFrOw0KKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9Q Og0KKwkJbXQ3Nl9yeF9hZ2dyX3N0b3AoJmRldi0+bXQ3NiwgJm1zdGEtPndjaWQsIHRpZCk7DQor CQltdDc5MTVfbWN1X2FkZF9yeF9iYShkZXYsIHBhcmFtcywgZmFsc2UpOw0KKwkJYnJlYWs7DQor CWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOg0KKwkJbXR4cS0+YWdnciA9IHRy dWU7DQorCQltdHhxLT5zZW5kX2JhciA9IGZhbHNlOw0KKwkJbXQ3OTE1X3NldF9hZ2dyX3N0YXRl KG1zdGEsIHRpZCwgTVQ3OTE1X0FHR1JfT1BFUkFUSU9OQUwpOw0KKwkJbXQ3OTE1X21jdV9hZGRf dHhfYmEoZGV2LCBwYXJhbXMsIHRydWUpOw0KKwkJYnJlYWs7DQorCWNhc2UgSUVFRTgwMjExX0FN UERVX1RYX1NUT1BfRkxVU0g6DQorCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1BfRkxVU0hf Q09OVDoNCisJCW10eHEtPmFnZ3IgPSBmYWxzZTsNCisJCW10NzkxNV9zZXRfYWdncl9zdGF0ZSht c3RhLCB0aWQsIE1UNzkxNV9BR0dSX1NUT1ApOw0KKwkJbXQ3OTE1X21jdV9hZGRfdHhfYmEoZGV2 LCBwYXJhbXMsIGZhbHNlKTsNCisJCWJyZWFrOw0KKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9T VEFSVDoNCisJCW10eHEtPmFnZ19zc24gPSBJRUVFODAyMTFfU05fVE9fU0VRKHNzbik7DQorCQlt dDc5MTVfc2V0X2FnZ3Jfc3RhdGUobXN0YSwgdGlkLCBNVDc5MTVfQUdHUl9TVEFSVCk7DQorCQly ZXQgPSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlRfSU1NRURJQVRFOw0KKwkJYnJlYWs7DQorCWNh c2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1BfQ09OVDoNCisJCW10eHEtPmFnZ3IgPSBmYWxzZTsN CisJCW10NzkxNV9zZXRfYWdncl9zdGF0ZShtc3RhLCB0aWQsIE1UNzkxNV9BR0dSX1NUT1ApOw0K KwkJbXQ3OTE1X21jdV9hZGRfdHhfYmEoZGV2LCBwYXJhbXMsIGZhbHNlKTsNCisJCWllZWU4MDIx MV9zdG9wX3R4X2JhX2NiX2lycXNhZmUodmlmLCBzdGEtPmFkZHIsIHRpZCk7DQorCQlicmVhazsN CisJfQ0KKwltdXRleF91bmxvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCXJldHVybiByZXQ7 DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJICAgICAgIHN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEpDQorew0KKwlyZXR1cm4gbXQ3Nl9zdGFfc3RhdGUoaHcsIHZpZiwgc3RhLCBJ RUVFODAyMTFfU1RBX05PVEVYSVNULA0KKwkJCSAgICAgIElFRUU4MDIxMV9TVEFfTk9ORSk7DQor fQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgc3RydWN0IGllZWU4MDIxMV9z dGEgKnN0YSkNCit7DQorCXJldHVybiBtdDc2X3N0YV9zdGF0ZShodywgdmlmLCBzdGEsIElFRUU4 MDIxMV9TVEFfTk9ORSwNCisJCQkgICAgICBJRUVFODAyMTFfU1RBX05PVEVYSVNUKTsNCit9DQor DQorc3RhdGljIGludA0KK210NzkxNV9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs DQorCQkgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQ0KK3sNCisJc3Ry dWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9od19waHkoaHcpOw0KKwlzdHJ1Y3QgbWliX3N0 YXRzICptaWIgPSAmcGh5LT5taWI7DQorDQorCXN0YXRzLT5kb3QxMVJUU1N1Y2Nlc3NDb3VudCA9 IG1pYi0+cnRzX2NudDsNCisJc3RhdHMtPmRvdDExUlRTRmFpbHVyZUNvdW50ID0gbWliLT5ydHNf cmV0cmllc19jbnQ7DQorCXN0YXRzLT5kb3QxMUZDU0Vycm9yQ291bnQgPSBtaWItPmZjc19lcnJf Y250Ow0KKwlzdGF0cy0+ZG90MTFBQ0tGYWlsdXJlQ291bnQgPSBtaWItPmFja19mYWlsX2NudDsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X3NldF9jb3ZlcmFn ZV9jbGFzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgczE2IGNvdmVyYWdlX2NsYXNzKQ0KK3sN CisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9od19waHkoaHcpOw0KKw0KKwlwaHkt PmNvdmVyYWdlX2NsYXNzID0gbWF4X3QoczE2LCBjb3ZlcmFnZV9jbGFzcywgMCk7DQorCW10Nzkx NV9tYWNfc2V0X3RpbWluZyhwaHkpOw0KK30NCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X3NldF9h bnRlbm5hKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdHhfYW50LCB1MzIgcnhfYW50KQ0K K3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19kZXYoaHcpOw0KKwlzdHJ1 Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7DQorCWludCBtYXhfbnNzID0g aHdlaWdodDgoaHctPndpcGh5LT5hdmFpbGFibGVfYW50ZW5uYXNfdHgpOw0KKwlib29sIGV4dF9w aHkgPSBwaHkgIT0gJmRldi0+cGh5Ow0KKw0KKwlpZiAoIXR4X2FudCB8fCB0eF9hbnQgIT0gcnhf YW50IHx8IGZmcyh0eF9hbnQpID4gbWF4X25zcykNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlp ZiAoKEJJVChod2VpZ2h0OCh0eF9hbnQpKSAtIDEpICE9IHR4X2FudCkNCisJCXR4X2FudCA9IEJJ VChmZnModHhfYW50KSAtIDEpIC0gMTsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4 KTsNCisNCisJcGh5LT5tdDc2LT5hbnRlbm5hX21hc2sgPSB0eF9hbnQ7DQorDQorCWlmIChleHRf cGh5KSB7DQorCQlpZiAoZGV2LT5jaGFpbm1hc2sgPT0gMHhmKQ0KKwkJCXR4X2FudCA8PD0gMjsN CisJCWVsc2UNCisJCQl0eF9hbnQgPDw9IDE7DQorCX0NCisJcGh5LT5jaGFpbm1hc2sgPSB0eF9h bnQ7DQorDQorCW10NzZfc2V0X3N0cmVhbV9jYXBzKCZkZXYtPm10NzYsIHRydWUpOw0KKw0KKwlt dXRleF91bmxvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgdm9pZA0KK210NzkxNV9zdGFfcmNfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LA0KKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgICBzdHJ1Y3QgaWVl ZTgwMjExX3N0YSAqc3RhLA0KKwkJICAgICB1MzIgY2hhbmdlZCkNCit7DQorCXN0cnVjdCBtdDc5 MTVfc3RhICptc3RhID0gKHN0cnVjdCBtdDc5MTVfc3RhICopc3RhLT5kcnZfcHJpdjsNCisNCisJ cmN1X3JlYWRfbG9jaygpOw0KKwlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEodmlmLCBzdGEtPmFk ZHIpOw0KKwlpZiAoIXN0YSkgew0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7DQorCQlyZXR1cm47DQor CX0NCisJcmN1X3JlYWRfbG9jaygpOw0KKw0KKwlzZXRfYml0KGNoYW5nZWQsICZtc3RhLT5zdGF0 cy5jaGFuZ2VkKTsNCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoaHcsICZtc3RhLT5zdGF0c193b3Jr KTsNCit9DQorDQorY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3OTE1X29wcyA9IHsNCisJ LnR4ID0gbXQ3OTE1X3R4LA0KKwkuc3RhcnQgPSBtdDc5MTVfc3RhcnQsDQorCS5zdG9wID0gbXQ3 OTE1X3N0b3AsDQorCS5hZGRfaW50ZXJmYWNlID0gbXQ3OTE1X2FkZF9pbnRlcmZhY2UsDQorCS5y ZW1vdmVfaW50ZXJmYWNlID0gbXQ3OTE1X3JlbW92ZV9pbnRlcmZhY2UsDQorCS5jb25maWcgPSBt dDc5MTVfY29uZmlnLA0KKwkuY29uZl90eCA9IG10NzkxNV9jb25mX3R4LA0KKwkuY29uZmlndXJl X2ZpbHRlciA9IG10NzkxNV9jb25maWd1cmVfZmlsdGVyLA0KKwkuYnNzX2luZm9fY2hhbmdlZCA9 IG10NzkxNV9ic3NfaW5mb19jaGFuZ2VkLA0KKwkuc3RhX2FkZCA9IG10NzkxNV9zdGFfYWRkLA0K Kwkuc3RhX3JlbW92ZSA9IG10NzkxNV9zdGFfcmVtb3ZlLA0KKwkuc3RhX3ByZV9yY3VfcmVtb3Zl ID0gbXQ3Nl9zdGFfcHJlX3JjdV9yZW1vdmUsDQorCS5zdGFfcmNfdXBkYXRlID0gbXQ3OTE1X3N0 YV9yY191cGRhdGUsDQorCS5zZXRfa2V5ID0gbXQ3OTE1X3NldF9rZXksDQorCS5hbXBkdV9hY3Rp b24gPSBtdDc5MTVfYW1wZHVfYWN0aW9uLA0KKwkuc2V0X3J0c190aHJlc2hvbGQgPSBtdDc5MTVf c2V0X3J0c190aHJlc2hvbGQsDQorCS53YWtlX3R4X3F1ZXVlID0gbXQ3Nl93YWtlX3R4X3F1ZXVl LA0KKwkuc3dfc2Nhbl9zdGFydCA9IG10NzZfc3dfc2NhbiwNCisJLnN3X3NjYW5fY29tcGxldGUg PSBtdDc2X3N3X3NjYW5fY29tcGxldGUsDQorCS5yZWxlYXNlX2J1ZmZlcmVkX2ZyYW1lcyA9IG10 NzZfcmVsZWFzZV9idWZmZXJlZF9mcmFtZXMsDQorCS5nZXRfdHhwb3dlciA9IG10NzZfZ2V0X3R4 cG93ZXIsDQorCS5jaGFubmVsX3N3aXRjaF9iZWFjb24gPSBtdDc5MTVfY2hhbm5lbF9zd2l0Y2hf YmVhY29uLA0KKwkuZ2V0X3N0YXRzID0gbXQ3OTE1X2dldF9zdGF0cywNCisJLmdldF9zdXJ2ZXkg PSBtdDc2X2dldF9zdXJ2ZXksDQorCS5nZXRfYW50ZW5uYSA9IG10NzZfZ2V0X2FudGVubmEsDQor CS5zZXRfYW50ZW5uYSA9IG10NzkxNV9zZXRfYW50ZW5uYSwNCisJLnNldF9jb3ZlcmFnZV9jbGFz cyA9IG10NzkxNV9zZXRfY292ZXJhZ2VfY2xhc3MsDQorfTsNCmRpZmYgLS1naXQgYS9kcml2ZXJz L25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuYyBiL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMDAwLi41Y2E2YmQ5ZjA5OWMNCi0tLSAvZGV2L251bGwNCisrKyBiL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5jDQpAQCAtMCwwICsx LDIzMTkgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDDQorLyogQ29weXJpZ2h0 IChDKSAyMDIwIE1lZGlhVGVrIEluYy4gKi8NCisNCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUu aD4NCisjaW5jbHVkZSA8bGludXgvZnMuaD4NCisjaW5jbHVkZSAibXQ3OTE1LmgiDQorI2luY2x1 ZGUgIm1jdS5oIg0KKyNpbmNsdWRlICJtYWMuaCINCisjaW5jbHVkZSAiZWVwcm9tLmgiDQorDQor c3RydWN0IG10NzkxNV9wYXRjaF9oZHIgew0KKwljaGFyIGJ1aWxkX2RhdGVbMTZdOw0KKwljaGFy IHBsYXRmb3JtWzRdOw0KKwlfX2JlMzIgaHdfc3dfdmVyOw0KKwlfX2JlMzIgcGF0Y2hfdmVyOw0K KwlfX2JlMTYgY2hlY2tzdW07DQorCXUxNiByZXNlcnZlZDsNCisJc3RydWN0IHsNCisJCV9fYmUz MiBwYXRjaF92ZXI7DQorCQlfX2JlMzIgc3Vic3lzOw0KKwkJX19iZTMyIGZlYXR1cmU7DQorCQlf X2JlMzIgbl9yZWdpb247DQorCQlfX2JlMzIgY3JjOw0KKwkJdTMyIHJlc2VydmVkWzExXTsNCisJ fSBkZXNjOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IG10NzkxNV9wYXRjaF9zZWMgew0KKwlf X2JlMzIgdHlwZTsNCisJX19iZTMyIG9mZnM7DQorCV9fYmUzMiBzaXplOw0KKwl1bmlvbiB7DQor CQlfX2JlMzIgc3BlY1sxM107DQorCQlzdHJ1Y3Qgew0KKwkJCV9fYmUzMiBhZGRyOw0KKwkJCV9f YmUzMiBsZW47DQorCQkJX19iZTMyIHNlY19rZXlfaWR4Ow0KKwkJCV9fYmUzMiBhbGlnbl9sZW47 DQorCQkJdTMyIHJlc2VydmVkWzldOw0KKwkJfSBpbmZvOw0KKwl9Ow0KK30gX19wYWNrZWQ7DQor DQorc3RydWN0IG10NzkxNV9md190cmFpbGVyIHsNCisJdTggY2hpcF9pZDsNCisJdTggZWNvX2Nv ZGU7DQorCXU4IG5fcmVnaW9uOw0KKwl1OCBmb3JtYXRfdmVyOw0KKwl1OCBmb3JtYXRfZmxhZzsN CisJdTggcmVzZXJ2ZWRbMl07DQorCWNoYXIgZndfdmVyWzEwXTsNCisJY2hhciBidWlsZF9kYXRl WzE1XTsNCisJdTMyIGNyYzsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBtdDc5MTVfZndfcmVn aW9uIHsNCisJX19sZTMyIGRlY29tcF9jcmM7DQorCV9fbGUzMiBkZWNvbXBfbGVuOw0KKwlfX2xl MzIgZGVjb21wX2Jsa19zejsNCisJdTggcmVzZXJ2ZWRbNF07DQorCV9fbGUzMiBhZGRyOw0KKwlf X2xlMzIgbGVuOw0KKwl1OCBmZWF0dXJlX3NldDsNCisJdTggcmVzZXJ2ZWQxWzE1XTsNCit9IF9f cGFja2VkOw0KKw0KKyNkZWZpbmUgTUNVX1BBVENIX0FERFJFU1MJCTB4MjAwMDAwDQorDQorI2Rl ZmluZSBGV19GRUFUVVJFX1NFVF9FTkNSWVBUCQlCSVQoMCkNCisjZGVmaW5lIEZXX0ZFQVRVUkVf U0VUX0tFWV9JRFgJCUdFTk1BU0soMiwgMSkNCisjZGVmaW5lIEZXX0ZFQVRVUkVfT1ZFUlJJREVf QUREUglCSVQoNSkNCisNCisjZGVmaW5lIERMX01PREVfRU5DUllQVAkJCUJJVCgwKQ0KKyNkZWZp bmUgRExfTU9ERV9LRVlfSURYCQkJR0VOTUFTSygyLCAxKQ0KKyNkZWZpbmUgRExfTU9ERV9SRVNF VF9TRUNfSVYJCUJJVCgzKQ0KKyNkZWZpbmUgRExfTU9ERV9XT1JLSU5HX1BEQV9DUjQJCUJJVCg0 KQ0KKyNkZWZpbmUgRExfTU9ERV9ORUVEX1JTUAkJQklUKDMxKQ0KKw0KKyNkZWZpbmUgRldfU1RB UlRfT1ZFUlJJREUJCUJJVCgwKQ0KKyNkZWZpbmUgRldfU1RBUlRfV09SS0lOR19QREFfQ1I0CUJJ VCgyKQ0KKw0KKyNkZWZpbmUgUEFUQ0hfU0VDX1RZUEVfTUFTSwkJR0VOTUFTSygxNSwgMCkNCisj ZGVmaW5lIFBBVENIX1NFQ19UWVBFX0lORk8JCTB4Mg0KKw0KKyNkZWZpbmUgdG9fd2NpZF9sbyhp ZCkJCQlGSUVMRF9HRVQoR0VOTUFTSyg3LCAwKSwgKHUxNilpZCkNCisjZGVmaW5lIHRvX3djaWRf aGkoaWQpCQkJRklFTERfR0VUKEdFTk1BU0soOSwgOCksICh1MTYpaWQpDQorDQorc3RhdGljIGVu dW0gbXQ3OTE1X2NpcGhlcl90eXBlDQorbXQ3OTE1X21jdV9nZXRfY2lwaGVyKGludCBjaXBoZXIp DQorew0KKwlzd2l0Y2ggKGNpcGhlcikgew0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQw Og0KKwkJcmV0dXJuIE1UX0NJUEhFUl9XRVA0MDsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9X RVAxMDQ6DQorCQlyZXR1cm4gTVRfQ0lQSEVSX1dFUDEwNDsNCisJY2FzZSBXTEFOX0NJUEhFUl9T VUlURV9US0lQOg0KKwkJcmV0dXJuIE1UX0NJUEhFUl9US0lQOw0KKwljYXNlIFdMQU5fQ0lQSEVS X1NVSVRFX0FFU19DTUFDOg0KKwkJcmV0dXJuIE1UX0NJUEhFUl9CSVBfQ01BQ18xMjg7DQorCWNh c2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoNCisJCXJldHVybiBNVF9DSVBIRVJfQUVTX0NDTVA7 DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUF8yNTY6DQorCQlyZXR1cm4gTVRfQ0lQSEVS X0NDTVBfMjU2Ow0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVA6DQorCQlyZXR1cm4gTVRf Q0lQSEVSX0dDTVA7DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTY6DQorCQlyZXR1 cm4gTVRfQ0lQSEVSX0dDTVBfMjU2Ow0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1NNUzQ6DQor CQlyZXR1cm4gTVRfQ0lQSEVSX1dBUEk7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gTVRfQ0lQSEVS X05PTkU7DQorCX0NCit9DQorDQorc3RhdGljIHU4IG10NzkxNV9tY3VfY2hhbl9idyhzdHJ1Y3Qg Y2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYpDQorew0KKwlzdGF0aWMgY29uc3QgdTggd2lkdGhf dG9fYndbXSA9IHsNCisJCVtOTDgwMjExX0NIQU5fV0lEVEhfNDBdID0gQ01EX0NCV180ME1IWiwN CisJCVtOTDgwMjExX0NIQU5fV0lEVEhfODBdID0gQ01EX0NCV184ME1IWiwNCisJCVtOTDgwMjEx X0NIQU5fV0lEVEhfODBQODBdID0gQ01EX0NCV184MDgwTUhaLA0KKwkJW05MODAyMTFfQ0hBTl9X SURUSF8xNjBdID0gQ01EX0NCV18xNjBNSFosDQorCQlbTkw4MDIxMV9DSEFOX1dJRFRIXzVdID0g Q01EX0NCV181TUhaLA0KKwkJW05MODAyMTFfQ0hBTl9XSURUSF8xMF0gPSBDTURfQ0JXXzEwTUha LA0KKwkJW05MODAyMTFfQ0hBTl9XSURUSF8yMF0gPSBDTURfQ0JXXzIwTUhaLA0KKwkJW05MODAy MTFfQ0hBTl9XSURUSF8yMF9OT0hUXSA9IENNRF9DQldfMjBNSFosDQorCX07DQorDQorCWlmIChj aGFuZGVmLT53aWR0aCA+PSBBUlJBWV9TSVpFKHdpZHRoX3RvX2J3KSkNCisJCXJldHVybiAwOw0K Kw0KKwlyZXR1cm4gd2lkdGhfdG9fYndbY2hhbmRlZi0+d2lkdGhdOw0KK30NCisNCitzdGF0aWMg dTgNCittdDc5MTVfZ2V0X3BoeV9tb2RlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBp ZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICAgZW51bSBubDgwMjExX2JhbmQgYmFuZCwgc3RydWN0 IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAq aHRfY2FwOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV92aHRfY2FwICp2aHRfY2FwOw0KKwl1OCBt b2RlID0gMDsNCisNCisJaWYgKHN0YSkgew0KKwkJaHRfY2FwID0gJnN0YS0+aHRfY2FwOw0KKwkJ dmh0X2NhcCA9ICZzdGEtPnZodF9jYXA7DQorCX0gZWxzZSB7DQorCQlzdHJ1Y3QgaWVlZTgwMjEx X3N1cHBvcnRlZF9iYW5kICpzYmFuZDsNCisNCisJCWlmIChiYW5kID09IE5MODAyMTFfQkFORF8y R0haKQ0KKwkJCXNiYW5kID0gJmRldi0+bXBoeS5zYmFuZF8yZy5zYmFuZDsNCisJCWVsc2UNCisJ CQlzYmFuZCA9ICZkZXYtPm1waHkuc2JhbmRfNWcuc2JhbmQ7DQorDQorCQlodF9jYXAgPSAmc2Jh bmQtPmh0X2NhcDsNCisJCXZodF9jYXAgPSAmc2JhbmQtPnZodF9jYXA7DQorCX0NCisNCisJaWYg KGJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopIHsNCisJCW1vZGUgfD0gUEhZX01PREVfQiB8IFBI WV9NT0RFX0c7DQorDQorCQlpZiAoaHRfY2FwLT5odF9zdXBwb3J0ZWQpDQorCQkJbW9kZSB8PSBQ SFlfTU9ERV9HTjsNCisJfSBlbHNlIGlmIChiYW5kID09IE5MODAyMTFfQkFORF81R0haKSB7DQor CQltb2RlIHw9IFBIWV9NT0RFX0E7DQorDQorCQlpZiAoaHRfY2FwLT5odF9zdXBwb3J0ZWQpDQor CQkJbW9kZSB8PSBQSFlfTU9ERV9BTjsNCisNCisJCWlmICh2aHRfY2FwLT52aHRfc3VwcG9ydGVk KQ0KKwkJCW1vZGUgfD0gUEhZX01PREVfQUM7DQorCX0NCisNCisJcmV0dXJuIG1vZGU7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgX19tdDc5MTVfbWN1X21zZ19zZW5kKHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYsIHN0cnVjdCBza19idWZmICpza2IsDQorCQkJCSBpbnQgY21kLCBpbnQgKndhaXRfc2VxKQ0K K3sNCisJc3RydWN0IG10NzkxNV9tY3VfdHhkICptY3VfdHhkOw0KKwl1OCBzZXEsIHBrdF9mbXQs IHFpZHg7DQorCWVudW0gbXQ3OTE1X3R4cV9pZCB0eHE7DQorCV9fbGUzMiAqdHhkOw0KKwl1MzIg dmFsOw0KKw0KKwlzZXEgPSArK2Rldi0+bXQ3Ni5tY3UubXNnX3NlcSAmIDB4ZjsNCisJaWYgKCFz ZXEpDQorCQlzZXEgPSArK2Rldi0+bXQ3Ni5tY3UubXNnX3NlcSAmIDB4ZjsNCisNCisJaWYgKGNt ZCA9PSAtTUNVX0NNRF9GV19TQ0FUVEVSKSB7DQorCQl0eHEgPSBNVF9UWFFfRldETDsNCisJCWdv dG8gZXhpdDsNCisJfQ0KKw0KKwltY3VfdHhkID0gKHN0cnVjdCBtdDc5MTVfbWN1X3R4ZCAqKXNr Yl9wdXNoKHNrYiwgc2l6ZW9mKCptY3VfdHhkKSk7DQorDQorCWlmICh0ZXN0X2JpdChNVDc2X1NU QVRFX01DVV9SVU5OSU5HLCAmZGV2LT5tcGh5LnN0YXRlKSkgew0KKwkJdHhxID0gTVRfVFhRX01D VV9XQTsNCisJCXFpZHggPSBNVF9UWF9NQ1VfUE9SVF9SWF9RMDsNCisJCXBrdF9mbXQgPSBNVF9U WF9UWVBFX0NNRDsNCisJfSBlbHNlIHsNCisJCXR4cSA9IE1UX1RYUV9NQ1U7DQorCQlxaWR4ID0g TVRfVFhfTUNVX1BPUlRfUlhfUTA7DQorCQlwa3RfZm10ID0gTVRfVFhfVFlQRV9DTUQ7DQorCX0N CisNCisJdHhkID0gbWN1X3R4ZC0+dHhkOw0KKw0KKwl2YWwgPSBGSUVMRF9QUkVQKE1UX1RYRDBf VFhfQllURVMsIHNrYi0+bGVuKSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMF9QS1RfRk1U LCBwa3RfZm10KSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMF9RX0lEWCwgcWlkeCk7DQor CXR4ZFswXSA9IGNwdV90b19sZTMyKHZhbCk7DQorDQorCXZhbCA9IE1UX1RYRDFfTE9OR19GT1JN QVQgfA0KKwkgICAgICBGSUVMRF9QUkVQKE1UX1RYRDFfSERSX0ZPUk1BVCwgTVRfSERSX0ZPUk1B VF9DTUQpOw0KKwl0eGRbMV0gPSBjcHVfdG9fbGUzMih2YWwpOw0KKw0KKwltY3VfdHhkLT5sZW4g PSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIHNpemVvZihtY3VfdHhkLT50eGQpKTsNCisJbWN1X3R4 ZC0+cHFfaWQgPSBjcHVfdG9fbGUxNihNQ1VfUFFfSUQoTVRfVFhfUE9SVF9JRFhfTUNVLCBxaWR4 KSk7DQorCW1jdV90eGQtPnBrdF90eXBlID0gTUNVX1BLVF9JRDsNCisJbWN1X3R4ZC0+c2VxID0g c2VxOw0KKw0KKwlpZiAoY21kIDwgMCkgew0KKwkJbWN1X3R4ZC0+c2V0X3F1ZXJ5ID0gTUNVX1Ff TkE7DQorCQltY3VfdHhkLT5jaWQgPSAtY21kOw0KKwl9IGVsc2Ugew0KKwkJbWN1X3R4ZC0+Y2lk ID0gTUNVX0NNRF9FWFRfQ0lEOw0KKwkJbWN1X3R4ZC0+ZXh0X2NpZCA9IGNtZDsNCisJCW1jdV90 eGQtPmV4dF9jaWRfYWNrID0gMTsNCisNCisJCS8qIGRvIG5vdCB1c2UgUV9TRVQgZm9yIGVmdXNl ICovDQorCQlpZiAoY21kID09IE1DVV9FWFRfQ01EX0VGVVNFX0FDQ0VTUykNCisJCQltY3VfdHhk LT5zZXRfcXVlcnkgPSBNQ1VfUV9RVUVSWTsNCisJCWVsc2UNCisJCQltY3VfdHhkLT5zZXRfcXVl cnkgPSBNQ1VfUV9TRVQ7DQorCX0NCisNCisJbWN1X3R4ZC0+czJkX2luZGV4ID0gTUNVX1MyRF9I Mk47DQorCUJVSUxEX0JVR19PTihjbWQgPT0gTUNVX0VYVF9DTURfRUZVU0VfQUNDRVNTICYmDQor CQkgICAgIG1jdV90eGQtPnNldF9xdWVyeSAhPSBNQ1VfUV9RVUVSWSk7DQorDQorZXhpdDoNCisJ aWYgKHdhaXRfc2VxKQ0KKwkJKndhaXRfc2VxID0gc2VxOw0KKw0KKwlyZXR1cm4gbXQ3Nl90eF9x dWV1ZV9za2JfcmF3KGRldiwgdHhxLCBza2IsIDApOw0KK30NCisNCitzdGF0aWMgaW50DQorbXQ3 OTE1X21jdV9wYXJzZV9lZXByb20oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1 ZmYgKnNrYikNCit7DQorCXN0cnVjdCBtdDc5MTVfbWN1X2VlcHJvbV9pbmZvICpyZXM7DQorCXU4 ICpidWY7DQorDQorCWlmICghc2tiKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCXNrYl9wdWxs KHNrYiwgc2l6ZW9mKHN0cnVjdCBtdDc5MTVfbWN1X3J4ZCkpOw0KKw0KKwlyZXMgPSAoc3RydWN0 IG10NzkxNV9tY3VfZWVwcm9tX2luZm8gKilza2ItPmRhdGE7DQorCWJ1ZiA9IGRldi0+bXQ3Ni5l ZXByb20uZGF0YSArIGxlMzJfdG9fY3B1KHJlcy0+YWRkcik7DQorCW1lbWNweShidWYsIHJlcy0+ ZGF0YSwgMTYpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9t Y3VfcGFyc2VfcmVzcG9uc2Uoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgaW50IGNtZCwNCisJCQkg IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZXEpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X21jdV9y eGQgKnJ4ZCA9IChzdHJ1Y3QgbXQ3OTE1X21jdV9yeGQgKilza2ItPmRhdGE7DQorCWludCByZXQg PSAwOw0KKw0KKwlpZiAoc2VxICE9IHJ4ZC0+c2VxKQ0KKwkJcmV0dXJuIC1FQUdBSU47DQorDQor CXN3aXRjaCAoY21kKSB7DQorCWNhc2UgLU1DVV9DTURfUEFUQ0hfU0VNX0NPTlRST0w6DQorCQlz a2JfcHVsbChza2IsIHNpemVvZigqcnhkKSAtIDQpOw0KKwkJcmV0ID0gKnNrYi0+ZGF0YTsNCisJ CWJyZWFrOw0KKwljYXNlIE1DVV9FWFRfQ01EX1RIRVJNQUxfQ1RSTDoNCisJCXNrYl9wdWxsKHNr Yiwgc2l6ZW9mKCpyeGQpICsgNCk7DQorCQlyZXQgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXNr Yi0+ZGF0YSk7DQorCQlicmVhazsNCisJY2FzZSBNQ1VfRVhUX0NNRF9FRlVTRV9BQ0NFU1M6DQor CQlyZXQgPSBtdDc5MTVfbWN1X3BhcnNlX2VlcHJvbShkZXYsIHNrYik7DQorCQlicmVhazsNCisJ ZGVmYXVsdDoNCisJCWJyZWFrOw0KKwl9DQorCWRldl9rZnJlZV9za2Ioc2tiKTsNCisNCisJcmV0 dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9tY3Vfd2FpdF9yZXNwb25zZShz dHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgY21kLCBpbnQgc2VxKQ0KK3sNCisJdW5zaWduZWQg bG9uZyBleHBpcmVzID0gamlmZmllcyArIDIwICogSFo7DQorCXN0cnVjdCBza19idWZmICpza2I7 DQorCWludCByZXQgPSAwOw0KKw0KKwl3aGlsZSAodHJ1ZSkgew0KKwkJc2tiID0gbXQ3Nl9tY3Vf Z2V0X3Jlc3BvbnNlKCZkZXYtPm10NzYsIGV4cGlyZXMpOw0KKwkJaWYgKCFza2IpIHsNCisJCQlk ZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJNZXNzYWdlICVkIChzZXEgJWQpIHRpbWVvdXRcbiIsDQor CQkJCWNtZCwgc2VxKTsNCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsNCisJCX0NCisNCisJCXJldCA9 IG10NzkxNV9tY3VfcGFyc2VfcmVzcG9uc2UoZGV2LCBjbWQsIHNrYiwgc2VxKTsNCisJCWlmIChy ZXQgIT0gLUVBR0FJTikNCisJCQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisN CitzdGF0aWMgaW50DQorbXQ3OTE1X21jdV9zZW5kX21lc3NhZ2Uoc3RydWN0IG10NzZfZGV2ICpt ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KKwkJCWludCBjbWQsIGJvb2wgd2FpdF9yZXNwKQ0K K3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3Qg bXQ3OTE1X2RldiwgbXQ3Nik7DQorCWludCByZXQsIHNlcTsNCisNCisJbXV0ZXhfbG9jaygmbWRl di0+bWN1Lm11dGV4KTsNCisNCisJcmV0ID0gX19tdDc5MTVfbWN1X21zZ19zZW5kKGRldiwgc2ti LCBjbWQsICZzZXEpOw0KKwlpZiAocmV0KQ0KKwkJZ290byBvdXQ7DQorDQorCWlmICh3YWl0X3Jl c3ApDQorCQlyZXQgPSBtdDc5MTVfbWN1X3dhaXRfcmVzcG9uc2UoZGV2LCBjbWQsIHNlcSk7DQor DQorb3V0Og0KKwltdXRleF91bmxvY2soJm1kZXYtPm1jdS5tdXRleCk7DQorDQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfbWN1X21zZ19zZW5kKHN0cnVjdCBtdDc2 X2RldiAqbWRldiwgaW50IGNtZCwgY29uc3Qgdm9pZCAqZGF0YSwNCisJCSAgICBpbnQgbGVuLCBi b29sIHdhaXRfcmVzcCkNCit7DQorCXN0cnVjdCBza19idWZmICpza2I7DQorDQorCXNrYiA9IG10 NzZfbWN1X21zZ19hbGxvYyhtZGV2LCBkYXRhLCBsZW4pOw0KKwlpZiAoIXNrYikNCisJCXJldHVy biAtRU5PTUVNOw0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9za2Jfc2VuZF9tc2cobWRldiwgc2ti LCBjbWQsIHdhaXRfcmVzcCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9jc2Ff ZmluaXNoKHZvaWQgKnByaXYsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQor ew0KKwlpZiAodmlmLT5jc2FfYWN0aXZlKQ0KKwkJaWVlZTgwMjExX2NzYV9maW5pc2godmlmKTsN Cit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X3J4X3JhZGFyX2RldGVjdGVkKHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgbXQ3 Nl9waHkgKm1waHkgPSAmZGV2LT5tdDc2LnBoeTsNCisJc3RydWN0IG10NzkxNV9tY3VfcmRkX3Jl cG9ydCAqcjsNCisNCisJciA9IChzdHJ1Y3QgbXQ3OTE1X21jdV9yZGRfcmVwb3J0ICopc2tiLT5k YXRhOw0KKw0KKwlpZiAoci0+aWR4ICYmIGRldi0+bXQ3Ni5waHkyKQ0KKwkJbXBoeSA9IGRldi0+ bXQ3Ni5waHkyOw0KKw0KKwlpZWVlODAyMTFfcmFkYXJfZGV0ZWN0ZWQobXBoeS0+aHcpOw0KKwlk ZXYtPmh3X3BhdHRlcm4rKzsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X3R4X3Jh dGVfY2FsKHN0cnVjdCBtdDc2X3BoeSAqbXBoeSwgc3RydWN0IG10NzkxNV9tY3VfcmFfaW5mbyAq cmEsDQorCQkgICAgICAgc3RydWN0IHJhdGVfaW5mbyAqcmF0ZSwgdTE2IHIpDQorew0KKwlzdHJ1 Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsNCisJdTE2IHJ1X2lkeCA9IGxlMTZf dG9fY3B1KHJhLT5ydV9pZHgpOw0KKwl1MTYgZmxhZ3MgPSAwOw0KKw0KKwlyYXRlLT5tY3MgPSBG SUVMRF9HRVQoTVRfUkFfUkFURV9NQ1MsIHIpOw0KKwlyYXRlLT5uc3MgPSBGSUVMRF9HRVQoTVRf UkFfUkFURV9OU1MsIHIpICsgMTsNCisNCisJc3dpdGNoIChGSUVMRF9HRVQoTVRfUkFfUkFURV9U WF9NT0RFLCByKSkgew0KKwljYXNlIE1UX1BIWV9UWVBFX0NDSzoNCisJY2FzZSBNVF9QSFlfVFlQ RV9PRkRNOg0KKwkJaWYgKG1waHktPmNoYW5kZWYuY2hhbi0+YmFuZCA9PSBOTDgwMjExX0JBTkRf NUdIWikNCisJCQlzYmFuZCA9ICZtcGh5LT5zYmFuZF81Zy5zYmFuZDsNCisJCWVsc2UNCisJCQlz YmFuZCA9ICZtcGh5LT5zYmFuZF8yZy5zYmFuZDsNCisNCisJCXJhdGUtPmxlZ2FjeSA9IHNiYW5k LT5iaXRyYXRlc1tyYXRlLT5tY3NdLmJpdHJhdGU7DQorCQlicmVhazsNCisJY2FzZSBNVF9QSFlf VFlQRV9IVDoNCisJY2FzZSBNVF9QSFlfVFlQRV9IVF9HRjoNCisJCXJhdGUtPm1jcyArPSAocmF0 ZS0+bnNzIC0gMSkgKiA4Ow0KKwkJZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTX01DUzsNCisNCisJ CWlmIChyYS0+Z2kpDQorCQkJZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTX1NIT1JUX0dJOw0KKwkJ YnJlYWs7DQorCWNhc2UgTVRfUEhZX1RZUEVfVkhUOg0KKwkJZmxhZ3MgfD0gUkFURV9JTkZPX0ZM QUdTX1ZIVF9NQ1M7DQorDQorCQlpZiAocmEtPmdpKQ0KKwkJCWZsYWdzIHw9IFJBVEVfSU5GT19G TEFHU19TSE9SVF9HSTsNCisJCWJyZWFrOw0KKwljYXNlIE1UX1BIWV9UWVBFX0hFX1NVOg0KKwlj YXNlIE1UX1BIWV9UWVBFX0hFX0VYVF9TVToNCisJY2FzZSBNVF9QSFlfVFlQRV9IRV9UQjoNCisJ Y2FzZSBNVF9QSFlfVFlQRV9IRV9NVToNCisJCXJhdGUtPmhlX2dpID0gcmEtPmdpOw0KKwkJcmF0 ZS0+aGVfZGNtID0gRklFTERfR0VUKE1UX1JBX1JBVEVfRENNX0VOLCByKTsNCisNCisJCWZsYWdz IHw9IFJBVEVfSU5GT19GTEFHU19IRV9NQ1M7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCWJy ZWFrOw0KKwl9DQorCXJhdGUtPmZsYWdzID0gZmxhZ3M7DQorDQorCWlmIChydV9pZHgpIHsNCisJ CXN3aXRjaCAocnVfaWR4KSB7DQorCQljYXNlIDEgLi4uIDI6DQorCQkJcmF0ZS0+aGVfcnVfYWxs b2MgPSBOTDgwMjExX1JBVEVfSU5GT19IRV9SVV9BTExPQ185OTY7DQorCQkJYnJlYWs7DQorCQlj YXNlIDMgLi4uIDY6DQorCQkJcmF0ZS0+aGVfcnVfYWxsb2MgPSBOTDgwMjExX1JBVEVfSU5GT19I RV9SVV9BTExPQ180ODQ7DQorCQkJYnJlYWs7DQorCQljYXNlIDcgLi4uIDE0Og0KKwkJCXJhdGUt PmhlX3J1X2FsbG9jID0gTkw4MDIxMV9SQVRFX0lORk9fSEVfUlVfQUxMT0NfMjQyOw0KKwkJCWJy ZWFrOw0KKwkJZGVmYXVsdDoNCisJCQlyYXRlLT5oZV9ydV9hbGxvYyA9IE5MODAyMTFfUkFURV9J TkZPX0hFX1JVX0FMTE9DXzEwNjsNCisJCQlicmVhazsNCisJCX0NCisJCXJhdGUtPmJ3ID0gUkFU RV9JTkZPX0JXX0hFX1JVOw0KKwl9IGVsc2Ugew0KKwkJdTggYncgPSBtdDc5MTVfbWN1X2NoYW5f YncoJm1waHktPmNoYW5kZWYpIC0NCisJCQlGSUVMRF9HRVQoTVRfUkFfUkFURV9CVywgcik7DQor DQorCQlzd2l0Y2ggKGJ3KSB7DQorCQljYXNlIElFRUU4MDIxMV9TVEFfUlhfQldfMTYwOg0KKwkJ CXJhdGUtPmJ3ID0gUkFURV9JTkZPX0JXXzE2MDsNCisJCQlicmVhazsNCisJCWNhc2UgSUVFRTgw MjExX1NUQV9SWF9CV184MDoNCisJCQlyYXRlLT5idyA9IFJBVEVfSU5GT19CV184MDsNCisJCQli cmVhazsNCisJCWNhc2UgSUVFRTgwMjExX1NUQV9SWF9CV180MDoNCisJCQlyYXRlLT5idyA9IFJB VEVfSU5GT19CV180MDsNCisJCQlicmVhazsNCisJCWRlZmF1bHQ6DQorCQkJcmF0ZS0+YncgPSBS QVRFX0lORk9fQldfMjA7DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCit9DQorDQorc3RhdGljIHZv aWQNCittdDc5MTVfbWN1X3R4X3JhdGVfcmVwb3J0KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0 cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X21jdV9yYV9pbmZvICpyYSA9 IChzdHJ1Y3QgbXQ3OTE1X21jdV9yYV9pbmZvICopc2tiLT5kYXRhOw0KKwl1MTYgd2NpZHggPSBs ZTE2X3RvX2NwdShyYS0+d2xhbl9pZHgpOw0KKwlzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkID0gcmN1 X2RlcmVmZXJlbmNlKGRldi0+bXQ3Ni53Y2lkW3djaWR4XSk7DQorCXN0cnVjdCBtdDc5MTVfc3Rh ICptc3RhID0gY29udGFpbmVyX29mKHdjaWQsIHN0cnVjdCBtdDc5MTVfc3RhLCB3Y2lkKTsNCisJ c3RydWN0IG10NzkxNV9zdGFfc3RhdHMgKnN0YXRzID0gJm1zdGEtPnN0YXRzOw0KKwlzdHJ1Y3Qg bXQ3Nl9waHkgKm1waHkgPSAmZGV2LT5tcGh5Ow0KKwlzdHJ1Y3QgcmF0ZV9pbmZvIHJhdGUgPSB7 fSwgcHJvYl9yYXRlID0ge307DQorCXUxNiBhdHRlbXB0cyA9IGxlMTZfdG9fY3B1KHJhLT5hdHRl bXB0cyk7DQorCXUxNiBjdXJyID0gbGUxNl90b19jcHUocmEtPmN1cnJfcmF0ZSk7DQorCXUxNiBw cm9iZSA9IGxlMTZfdG9fY3B1KHJhLT5wcm9iX3VwX3JhdGUpOw0KKw0KKwlpZiAobXN0YS0+d2Np ZC5leHRfcGh5ICYmIGRldi0+bXQ3Ni5waHkyKQ0KKwkJbXBoeSA9IGRldi0+bXQ3Ni5waHkyOw0K Kw0KKwkvKiBjdXJyZW50IHJhdGUgKi8NCisJbXQ3OTE1X21jdV90eF9yYXRlX2NhbChtcGh5LCBy YSwgJnJhdGUsIGN1cnIpOw0KKwlzdGF0cy0+dHhfcmF0ZSA9IHJhdGU7DQorDQorCS8qIHByb2Jp bmcgcmF0ZSAqLw0KKwltdDc5MTVfbWN1X3R4X3JhdGVfY2FsKG1waHksIHJhLCAmcHJvYl9yYXRl LCBwcm9iZSk7DQorCXN0YXRzLT5wcm9iX3JhdGUgPSBwcm9iX3JhdGU7DQorDQorCWlmIChhdHRl bXB0cykgew0KKwkJdTE2IHN1Y2Nlc3MgPSBsZTE2X3RvX2NwdShyYS0+c3VjY2Vzcyk7DQorDQor CQlzdGF0cy0+cGVyID0gMTAwMCAqIChhdHRlbXB0cyAtIHN1Y2Nlc3MpIC8gYXR0ZW1wdHM7DQor CX0NCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X3J4X2V4dF9ldmVudChzdHJ1Y3Qg bXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG10Nzkx NV9tY3VfcnhkICpyeGQgPSAoc3RydWN0IG10NzkxNV9tY3VfcnhkICopc2tiLT5kYXRhOw0KKw0K Kwlzd2l0Y2ggKHJ4ZC0+ZXh0X2VpZCkgew0KKwljYXNlIE1DVV9FWFRfRVZFTlRfUkREX1JFUE9S VDoNCisJCW10NzkxNV9tY3VfcnhfcmFkYXJfZGV0ZWN0ZWQoZGV2LCBza2IpOw0KKwkJYnJlYWs7 DQorCWNhc2UgTUNVX0VYVF9FVkVOVF9DU0FfTk9USUZZOg0KKwkJaWVlZTgwMjExX2l0ZXJhdGVf YWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKGRldi0+bXQ3Ni5odywNCisJCQkJSUVFRTgwMjExX0lG QUNFX0lURVJfUkVTVU1FX0FMTCwNCisJCQkJbXQ3OTE1X21jdV9jc2FfZmluaXNoLCBkZXYpOw0K KwkJYnJlYWs7DQorCWNhc2UgTUNVX0VYVF9FVkVOVF9SQVRFX1JFUE9SVDoNCisJCW10NzkxNV9t Y3VfdHhfcmF0ZV9yZXBvcnQoZGV2LCBza2IpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQli cmVhazsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3VfcnhfdW5zb2xpY2l0 ZWRfZXZlbnQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7 DQorCXN0cnVjdCBtdDc5MTVfbWN1X3J4ZCAqcnhkID0gKHN0cnVjdCBtdDc5MTVfbWN1X3J4ZCAq KXNrYi0+ZGF0YTsNCisNCisJc3dpdGNoIChyeGQtPmVpZCkgew0KKwljYXNlIE1DVV9FVkVOVF9F WFQ6DQorCQltdDc5MTVfbWN1X3J4X2V4dF9ldmVudChkZXYsIHNrYik7DQorCQlicmVhazsNCisJ ZGVmYXVsdDoNCisJCWJyZWFrOw0KKwl9DQorCWRldl9rZnJlZV9za2Ioc2tiKTsNCit9DQorDQor dm9pZCBtdDc5MTVfbWN1X3J4X2V2ZW50KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBz a19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X21jdV9yeGQgKnJ4ZCA9IChzdHJ1Y3Qg bXQ3OTE1X21jdV9yeGQgKilza2ItPmRhdGE7DQorDQorCWlmIChyeGQtPmV4dF9laWQgPT0gTUNV X0VYVF9FVkVOVF9USEVSTUFMX1BST1RFQ1QgfHwNCisJICAgIHJ4ZC0+ZXh0X2VpZCA9PSBNQ1Vf RVhUX0VWRU5UX0FTU0VSVF9EVU1QIHx8DQorCSAgICByeGQtPmV4dF9laWQgPT0gTUNVX0VYVF9F VkVOVF9QU19TWU5DIHx8DQorCSAgICByeGQtPmV4dF9laWQgPT0gTUNVX0VYVF9FVkVOVF9SQVRF X1JFUE9SVCB8fA0KKwkgICAgIXJ4ZC0+c2VxKQ0KKwkJbXQ3OTE1X21jdV9yeF91bnNvbGljaXRl ZF9ldmVudChkZXYsIHNrYik7DQorCWVsc2UNCisJCW10NzZfbWN1X3J4X2V2ZW50KCZkZXYtPm10 NzYsIHNrYik7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqDQorbXQ3OTE1X21jdV9h bGxvY19zdGFfcmVxKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBtdDc5MTVfdmlmICpt dmlmLA0KKwkJCSBzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YSwgaW50IGxlbikNCit7DQorCXN0cnVj dCBzdGFfcmVxX2hkciBoZHIgPSB7DQorCQkuYnNzX2lkeCA9IG12aWYtPmlkeCwNCisJCS53bGFu X2lkeF9sbyA9IG1zdGEgPyB0b193Y2lkX2xvKG1zdGEtPndjaWQuaWR4KSA6IDAsDQorCQkud2xh bl9pZHhfaGkgPSBtc3RhID8gdG9fd2NpZF9oaShtc3RhLT53Y2lkLmlkeCkgOiAwLA0KKwkJLm11 YXJfaWR4ID0gbXN0YSA/IG12aWYtPm9tYWNfaWR4IDogMCwNCisJCS5pc190bHZfYXBwZW5kID0g MSwNCisJfTsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisNCisJc2tiID0gbXQ3Nl9tY3VfbXNn X2FsbG9jKCZkZXYtPm10NzYsIE5VTEwsIGxlbik7DQorCWlmICghc2tiKQ0KKwkJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7DQorDQorCXNrYl9wdXRfZGF0YShza2IsICZoZHIsIHNpemVvZihoZHIp KTsNCisNCisJcmV0dXJuIHNrYjsNCit9DQorDQorc3RhdGljIHN0cnVjdCB3dGJsX3JlcV9oZHIg Kg0KK210NzkxNV9tY3VfYWxsb2Nfd3RibF9yZXEoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3Ry dWN0IG10NzkxNV9zdGEgKm1zdGEsDQorCQkJICBpbnQgY21kLCB2b2lkICpzdGFfd3RibCwgc3Ry dWN0IHNrX2J1ZmYgKipza2IpDQorew0KKwlzdHJ1Y3QgdGx2ICpzdGFfaGRyID0gc3RhX3d0Ymw7 DQorCXN0cnVjdCB3dGJsX3JlcV9oZHIgaGRyID0gew0KKwkJLndsYW5faWR4X2xvID0gdG9fd2Np ZF9sbyhtc3RhLT53Y2lkLmlkeCksDQorCQkud2xhbl9pZHhfaGkgPSB0b193Y2lkX2hpKG1zdGEt PndjaWQuaWR4KSwNCisJCS5vcGVyYXRpb24gPSBjbWQsDQorCX07DQorCXN0cnVjdCBza19idWZm ICpuc2tiID0gKnNrYjsNCisNCisJaWYgKCFuc2tiKSB7DQorCQluc2tiID0gbXQ3Nl9tY3VfbXNn X2FsbG9jKCZkZXYtPm10NzYsIE5VTEwsDQorCQkJCQkgIE1UNzkxNV9XVEJMX1VQREFURV9CQV9T SVpFKTsNCisJCWlmICghbnNrYikNCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCisNCisJ CSpza2IgPSBuc2tiOw0KKwl9DQorDQorCWlmIChzdGFfaGRyKQ0KKwkJc3RhX2hkci0+bGVuID0g Y3B1X3RvX2xlMTYoc2l6ZW9mKGhkcikpOw0KKw0KKwlyZXR1cm4gc2tiX3B1dF9kYXRhKG5za2Is ICZoZHIsIHNpemVvZihoZHIpKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCB0bHYgKg0KK210Nzkx NV9tY3VfYWRkX25lc3RlZF90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhZywgaW50IGxl biwNCisJCQkgIHZvaWQgKnN0YV9udGx2LCB2b2lkICpzdGFfd3RibCkNCit7DQorCXN0cnVjdCBz dGFfbnRsdl9oZHIgKm50bHZfaGRyID0gc3RhX250bHY7DQorCXN0cnVjdCB0bHYgKnN0YV9oZHIg PSBzdGFfd3RibDsNCisJc3RydWN0IHRsdiAqcHRsdiwgdGx2ID0gew0KKwkJLnRhZyA9IGNwdV90 b19sZTE2KHRhZyksDQorCQkubGVuID0gY3B1X3RvX2xlMTYobGVuKSwNCisJfTsNCisJdTE2IG50 bHY7DQorDQorCXB0bHYgPSBza2JfcHV0KHNrYiwgbGVuKTsNCisJbWVtY3B5KHB0bHYsICZ0bHYs IHNpemVvZih0bHYpKTsNCisNCisJbnRsdiA9IGxlMTZfdG9fY3B1KG50bHZfaGRyLT50bHZfbnVt KTsNCisJbnRsdl9oZHItPnRsdl9udW0gPSBjcHVfdG9fbGUxNihudGx2ICsgMSk7DQorDQorCWlm IChzdGFfaGRyKSB7DQorCQl1MTYgc2l6ZSA9IGxlMTZfdG9fY3B1KHN0YV9oZHItPmxlbik7DQor DQorCQlzdGFfaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihzaXplICsgbGVuKTsNCisJfQ0KKw0KKwly ZXR1cm4gcHRsdjsNCit9DQorDQorc3RhdGljIHN0cnVjdCB0bHYgKg0KK210NzkxNV9tY3VfYWRk X3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGFnLCBpbnQgbGVuKQ0KK3sNCisJcmV0dXJu IG10NzkxNV9tY3VfYWRkX25lc3RlZF90bHYoc2tiLCB0YWcsIGxlbiwgc2tiLT5kYXRhLCBOVUxM KTsNCit9DQorDQorc3RhdGljIHN0cnVjdCB0bHYgKg0KK210NzkxNV9tY3VfYWRkX25lc3RlZF9z dWJ0bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHN1Yl90YWcsIGludCBzdWJfbGVuLA0KKwkJ CSAgICAgX19sZTE2ICpzdWJfbnRsdiwgX19sZTE2ICpsZW4pDQorew0KKwlzdHJ1Y3QgdGx2ICpw dGx2LCB0bHYgPSB7DQorCQkudGFnID0gY3B1X3RvX2xlMTYoc3ViX3RhZyksDQorCQkubGVuID0g Y3B1X3RvX2xlMTYoc3ViX2xlbiksDQorCX07DQorDQorCXB0bHYgPSBza2JfcHV0KHNrYiwgc3Vi X2xlbik7DQorCW1lbWNweShwdGx2LCAmdGx2LCBzaXplb2YodGx2KSk7DQorDQorCSpzdWJfbnRs diA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KCpzdWJfbnRsdikgKyAxKTsNCisJKmxlbiA9IGNw dV90b19sZTE2KGxlMTZfdG9fY3B1KCpsZW4pICsgc3ViX2xlbik7DQorDQorCXJldHVybiBwdGx2 Ow0KK30NCisNCisvKiogYnNzIGluZm8gKiovDQorc3RhdGljIGludA0KK210NzkxNV9tY3VfYnNz X2Jhc2ljX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LA0KKwkJCSBzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LCBib29sIGVuYWJsZSkNCit7DQorCXN0cnVj dCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsN CisJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmID0gJnBoeS0+bXQ3Ni0+Y2hhbmRl ZjsNCisJZW51bSBubDgwMjExX2JhbmQgYmFuZCA9IGNoYW5kZWYtPmNoYW4tPmJhbmQ7DQorCXN0 cnVjdCBic3NfaW5mb19iYXNpYyAqYnNzOw0KKwl1MTYgd2xhbl9pZHggPSBtdmlmLT5zdGEud2Np ZC5pZHg7DQorCXUzMiB0eXBlID0gTkVUV09SS19JTkZSQTsNCisJc3RydWN0IHRsdiAqdGx2Ow0K Kw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBCU1NfSU5GT19CQVNJQywgc2l6ZW9m KCpic3MpKTsNCisNCisJc3dpdGNoICh2aWYtPnR5cGUpIHsNCisJY2FzZSBOTDgwMjExX0lGVFlQ RV9NRVNIX1BPSU5UOg0KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOg0KKwkJYnJlYWs7DQorCWNh c2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoNCisJCS8qIFRPRE86IGVuYWJsZSBCU1NfSU5GT19V QVBTRCAmIEJTU19JTkZPX1BNICovDQorCQlpZiAoZW5hYmxlKSB7DQorCQkJc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YTsNCisJCQlzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YTsNCisNCisJCQlyY3Vf cmVhZF9sb2NrKCk7DQorCQkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHZpZiwgdmlmLT5ic3Nf Y29uZi5ic3NpZCk7DQorCQkJaWYgKCFzdGEpIHsNCisJCQkJcmN1X3JlYWRfdW5sb2NrKCk7DQor CQkJCXJldHVybiAtRUlOVkFMOw0KKwkJCX0NCisNCisJCQltc3RhID0gKHN0cnVjdCBtdDc5MTVf c3RhICopc3RhLT5kcnZfcHJpdjsNCisJCQl3bGFuX2lkeCA9IG1zdGEtPndjaWQuaWR4Ow0KKwkJ CXJjdV9yZWFkX3VubG9jaygpOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZ UEVfQURIT0M6DQorCQl0eXBlID0gTkVUV09SS19JQlNTOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6 DQorCQlXQVJOX09OKDEpOw0KKwkJYnJlYWs7DQorCX0NCisNCisJYnNzID0gKHN0cnVjdCBic3Nf aW5mb19iYXNpYyAqKXRsdjsNCisJbWVtY3B5KGJzcy0+YnNzaWQsIHZpZi0+YnNzX2NvbmYuYnNz aWQsIEVUSF9BTEVOKTsNCisJYnNzLT5iY25faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNih2aWYtPmJz c19jb25mLmJlYWNvbl9pbnQpOw0KKwlic3MtPm5ldHdvcmtfdHlwZSA9IGNwdV90b19sZTMyKHR5 cGUpOw0KKwlic3MtPmR0aW1fcGVyaW9kID0gdmlmLT5ic3NfY29uZi5kdGltX3BlcmlvZDsNCisJ YnNzLT5ibWNfd2NpZF9sbyA9IHRvX3djaWRfbG8od2xhbl9pZHgpOw0KKwlic3MtPmJtY193Y2lk X2hpID0gdG9fd2NpZF9oaSh3bGFuX2lkeCk7DQorCWJzcy0+cGh5X21vZGUgPSBtdDc5MTVfZ2V0 X3BoeV9tb2RlKHBoeS0+ZGV2LCB2aWYsIGJhbmQsIE5VTEwpOw0KKwlic3MtPndtbV9pZHggPSBt dmlmLT53bW1faWR4Ow0KKwlic3MtPmFjdGl2ZSA9IGVuYWJsZTsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9ic3Nfb21hY190bHYoc3RydWN0IHNrX2J1 ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikNCit7DQorCXN0cnVjdCBtdDc5MTVf dmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0 IGJzc19pbmZvX29tYWMgKm9tYWM7DQorCXN0cnVjdCB0bHYgKnRsdjsNCisJdTMyIHR5cGUgPSAw Ow0KKwl1OCBpZHg7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIEJTU19JTkZP X09NQUMsIHNpemVvZigqb21hYykpOw0KKw0KKwlzd2l0Y2ggKHZpZi0+dHlwZSkgew0KKwljYXNl IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6DQor CQl0eXBlID0gQ09OTkVDVElPTl9JTkZSQV9BUDsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFf SUZUWVBFX1NUQVRJT046DQorCQl0eXBlID0gQ09OTkVDVElPTl9JTkZSQV9TVEE7DQorCQlicmVh azsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoNCisJCXR5cGUgPSBDT05ORUNUSU9OX0lC U1NfQURIT0M7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCVdBUk5fT04oMSk7DQorCQlicmVh azsNCisJfQ0KKw0KKwlvbWFjID0gKHN0cnVjdCBic3NfaW5mb19vbWFjICopdGx2Ow0KKwlpZHgg PSBtdmlmLT5vbWFjX2lkeCA+IEVYVF9CU1NJRF9TVEFSVCA/IEhXX0JTU0lEXzAgOiBtdmlmLT5v bWFjX2lkeDsNCisJb21hYy0+Y29ubl90eXBlID0gY3B1X3RvX2xlMzIodHlwZSk7DQorCW9tYWMt Pm9tYWNfaWR4ID0gbXZpZi0+b21hY19pZHg7DQorCW9tYWMtPmJhbmRfaWR4ID0gbXZpZi0+YmFu ZF9pZHg7DQorCW9tYWMtPmh3X2Jzc19pZHggPSBpZHg7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQor bXQ3OTE1X21jdV9ic3NfcmZjaF90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwNCisJCQlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJc3RydWN0 IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmID0gJnBoeS0+bXQ3Ni0+Y2hhbmRlZjsNCisJc3Ry dWN0IGJzc19pbmZvX3JmX2NoICpjaDsNCisJc3RydWN0IHRsdiAqdGx2Ow0KKwlpbnQgZnJlcTEg PSBjaGFuZGVmLT5jZW50ZXJfZnJlcTE7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihz a2IsIEJTU19JTkZPX1JGX0NILCBzaXplb2YoKmNoKSk7DQorDQorCWNoID0gKHN0cnVjdCBic3Nf aW5mb19yZl9jaCAqKXRsdjsNCisJY2gtPnByaV9jaCA9IGNoYW5kZWYtPmNoYW4tPmh3X3ZhbHVl Ow0KKwljaC0+Y2VudGVyX2NoMCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChmcmVx MSk7DQorCWNoLT5idyA9IG10NzkxNV9tY3VfY2hhbl9idyhjaGFuZGVmKTsNCisNCisJaWYgKGNo YW5kZWYtPndpZHRoID09IE5MODAyMTFfQ0hBTl9XSURUSF84MFA4MCkgew0KKwkJaW50IGZyZXEy ID0gY2hhbmRlZi0+Y2VudGVyX2ZyZXEyOw0KKw0KKwkJY2gtPmNlbnRlcl9jaDEgPSBpZWVlODAy MTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoZnJlcTIpOw0KKwl9DQorDQorCWNoLT5oZV9hbGxfZGlz YWJsZSA9IHRydWU7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9ic3NfcmFfdGx2 KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICAg ICBzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJc3RydWN0IGJzc19pbmZvX3JhICpyYTsN CisJc3RydWN0IHRsdiAqdGx2Ow0KKwlpbnQgbWF4X25zcyA9IGh3ZWlnaHQ4KHBoeS0+Y2hhaW5t YXNrKTsNCisNCisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgQlNTX0lORk9fUkEsIHNp emVvZigqcmEpKTsNCisNCisJcmEgPSAoc3RydWN0IGJzc19pbmZvX3JhICopdGx2Ow0KKwlyYS0+ b3BfbW9kZSA9IHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUDsNCisJcmEtPmFkaG9jX2Vu ID0gdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DOw0KKwlyYS0+c2hvcnRfcHJlYW1i bGUgPSB0cnVlOw0KKwlyYS0+dHhfc3RyZWFtcyA9IG1heF9uc3M7DQorCXJhLT5yeF9zdHJlYW1z ID0gbWF4X25zczsNCisJcmEtPmFsZ28gPSA0Ow0KKwlyYS0+dHJhaW5fdXBfcnVsZSA9IDI7DQor CXJhLT50cmFpbl91cF9oaWdoX3RocmVzID0gMTEwOw0KKwlyYS0+dHJhaW5fdXBfcnVsZV9yc3Np ID0gLTcwOw0KKwlyYS0+bG93X3RyYWZmaWNfdGhyZXMgPSAyOw0KKwlyYS0+cGh5X2NhcCA9IGNw dV90b19sZTMyKDB4ZmRmKTsNCisJcmEtPmludGVydmFsID0gY3B1X3RvX2xlMzIoNTAwKTsNCisJ cmEtPmZhc3RfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMigxMDApOw0KK30NCisNCitzdGF0aWMgdm9p ZA0KK210NzkxNV9tY3VfYnNzX2V4dF90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG10 NzkxNV92aWYgKm12aWYpDQorew0KKy8qIFNJRlMgMjB1cyArIDUxMiBieXRlIGJlYWNvbiB0cmFu bWl0dGVkIGJ5IDFNYnBzICgzOTA2dXMpICovDQorI2RlZmluZSBCQ05fVFhfRVNUSU1BVEVfVElN RQkoNDA5NiArIDIwKQ0KKwlzdHJ1Y3QgYnNzX2luZm9fZXh0X2JzcyAqZXh0Ow0KKwlpbnQgZXh0 X2Jzc19pZHgsIHRzZl9vZmZzZXQ7DQorCXN0cnVjdCB0bHYgKnRsdjsNCisNCisJZXh0X2Jzc19p ZHggPSBtdmlmLT5vbWFjX2lkeCAtIEVYVF9CU1NJRF9TVEFSVDsNCisJaWYgKGV4dF9ic3NfaWR4 IDwgMCkNCisJCXJldHVybjsNCisNCisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgQlNT X0lORk9fRVhUX0JTUywgc2l6ZW9mKCpleHQpKTsNCisNCisJZXh0ID0gKHN0cnVjdCBic3NfaW5m b19leHRfYnNzICopdGx2Ow0KKwl0c2Zfb2Zmc2V0ID0gZXh0X2Jzc19pZHggKiBCQ05fVFhfRVNU SU1BVEVfVElNRTsNCisJZXh0LT5tYnNzX3RzZl9vZmZzZXQgPSBjcHVfdG9fbGUzMih0c2Zfb2Zm c2V0KTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X2Jzc19ibWNfdGx2KHN0cnVj dCBza19idWZmICpza2IsIHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkpDQorew0KKwlzdHJ1Y3QgYnNz X2luZm9fYm1jX3JhdGUgKmJtYzsNCisJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVm ID0gJnBoeS0+bXQ3Ni0+Y2hhbmRlZjsNCisJZW51bSBubDgwMjExX2JhbmQgYmFuZCA9IGNoYW5k ZWYtPmNoYW4tPmJhbmQ7DQorCXN0cnVjdCB0bHYgKnRsdjsNCisNCisJdGx2ID0gbXQ3OTE1X21j dV9hZGRfdGx2KHNrYiwgQlNTX0lORk9fQk1DX1JBVEUsIHNpemVvZigqYm1jKSk7DQorDQorCWJt YyA9IChzdHJ1Y3QgYnNzX2luZm9fYm1jX3JhdGUgKil0bHY7DQorCWlmIChiYW5kID09IE5MODAy MTFfQkFORF8yR0haKSB7DQorCQlibWMtPnNob3J0X3ByZWFtYmxlID0gdHJ1ZTsNCisJfSBlbHNl IHsNCisJCWJtYy0+YmNfdHJhbnMgPSBjcHVfdG9fbGUxNigweDIwMDApOw0KKwkJYm1jLT5tY190 cmFucyA9IGNwdV90b19sZTE2KDB4MjA4MCk7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQNCitt dDc5MTVfbWN1X2Jzc19zeW5jX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmKQ0KK3sNCisJc3RydWN0IGJzc19pbmZvX3N5bmNfbW9kZSAqc3luYzsNCisJ c3RydWN0IHRsdiAqdGx2Ow0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBCU1Nf SU5GT19TWU5DX01PREUsIHNpemVvZigqc3luYykpOw0KKw0KKwlzeW5jID0gKHN0cnVjdCBic3Nf aW5mb19zeW5jX21vZGUgKil0bHY7DQorCXN5bmMtPmJjbl9pbnRlcnZhbCA9IGNwdV90b19sZTE2 KHZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCk7DQorCXN5bmMtPmR0aW1fcGVyaW9kID0gdmlmLT5i c3NfY29uZi5kdGltX3BlcmlvZDsNCisJc3luYy0+ZW5hYmxlID0gdHJ1ZTsNCit9DQorDQoraW50 IG10NzkxNV9tY3VfYWRkX2Jzc19pbmZvKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksDQorCQkJICAg IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGludCBlbmFibGUpDQorew0KKwlzdHJ1Y3QgbXQ3 OTE1X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0 cnVjdCBza19idWZmICpza2I7DQorDQorCXNrYiA9IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3JlcShw aHktPmRldiwgbXZpZiwgTlVMTCwNCisJCQkJICAgICAgIE1UNzkxNV9TVEFfVVBEQVRFX01BWF9T SVpFKTsNCisJaWYgKElTX0VSUihza2IpKQ0KKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsNCisNCisJ LyogYnNzX29tYWMgbXVzdCBiZSBmaXJzdCAqLw0KKwlpZiAoZW5hYmxlKQ0KKwkJbXQ3OTE1X21j dV9ic3Nfb21hY190bHYoc2tiLCB2aWYpOw0KKw0KKwltdDc5MTVfbWN1X2Jzc19iYXNpY190bHYo c2tiLCB2aWYsIHBoeSwgZW5hYmxlKTsNCisNCisJaWYgKGVuYWJsZSkgew0KKwkJbXQ3OTE1X21j dV9ic3NfcmZjaF90bHYoc2tiLCB2aWYsIHBoeSk7DQorCQltdDc5MTVfbWN1X2Jzc19ibWNfdGx2 KHNrYiwgcGh5KTsNCisJCW10NzkxNV9tY3VfYnNzX3JhX3Rsdihza2IsIHZpZiwgcGh5KTsNCisN CisJCWlmIChtdmlmLT5vbWFjX2lkeCA+IEhXX0JTU0lEX01BWCkNCisJCQltdDc5MTVfbWN1X2Jz c19leHRfdGx2KHNrYiwgbXZpZik7DQorCQllbHNlDQorCQkJbXQ3OTE1X21jdV9ic3Nfc3luY190 bHYoc2tiLCB2aWYpOw0KKwl9DQorDQorCXJldHVybiBfX210NzZfbWN1X3NrYl9zZW5kX21zZygm cGh5LT5kZXYtPm10NzYsIHNrYiwNCisJCQkJICAgICAgIE1DVV9FWFRfQ01EX0JTU19JTkZPX1VQ REFURSwgdHJ1ZSk7DQorfQ0KKw0KKy8qKiBzdGFyZWMgJiB3dGJsICoqLw0KK3N0YXRpYyBpbnQN CittdDc5MTVfbWN1X3N0YV9rZXlfdGx2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVl ODAyMTFfa2V5X2NvbmYgKmtleSwNCisJCSAgICAgICBlbnVtIHNldF9rZXlfY21kIGNtZCkNCit7 DQorCXN0cnVjdCBzdGFfcmVjX3NlYyAqc2VjOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorCXUzMiBs ZW4gPSBzaXplb2YoKnNlYyk7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIFNU QV9SRUNfS0VZX1YyLCBzaXplb2YoKnNlYykpOw0KKw0KKwlzZWMgPSAoc3RydWN0IHN0YV9yZWNf c2VjICopdGx2Ow0KKwlzZWMtPmFkZCA9IGNtZDsNCisNCisJaWYgKGNtZCA9PSBTRVRfS0VZKSB7 DQorCQlzdHJ1Y3Qgc2VjX2tleSAqc2VjX2tleTsNCisJCXU4IGNpcGhlcjsNCisNCisJCWNpcGhl ciA9IG10NzkxNV9tY3VfZ2V0X2NpcGhlcihrZXktPmNpcGhlcik7DQorCQlpZiAoY2lwaGVyID09 IE1UX0NJUEhFUl9OT05FKQ0KKwkJCXJldHVybiAtRU9QTk9UU1VQUDsNCisNCisJCXNlY19rZXkg PSAmc2VjLT5rZXlbMF07DQorCQlzZWNfa2V5LT5jaXBoZXJfbGVuID0gc2l6ZW9mKCpzZWNfa2V5 KTsNCisJCXNlY19rZXktPmtleV9pZCA9IGtleS0+a2V5aWR4Ow0KKw0KKwkJaWYgKGNpcGhlciA9 PSBNVF9DSVBIRVJfQklQX0NNQUNfMTI4KSB7DQorCQkJc2VjX2tleS0+Y2lwaGVyX2lkID0gTVRf Q0lQSEVSX0FFU19DQ01QOw0KKwkJCXNlY19rZXktPmtleV9sZW4gPSAxNjsNCisJCQltZW1jcHko c2VjX2tleS0+a2V5LCBrZXktPmtleSwgMTYpOw0KKw0KKwkJCXNlY19rZXkgPSAmc2VjLT5rZXlb MV07DQorCQkJc2VjX2tleS0+Y2lwaGVyX2lkID0gTVRfQ0lQSEVSX0JJUF9DTUFDXzEyODsNCisJ CQlzZWNfa2V5LT5jaXBoZXJfbGVuID0gc2l6ZW9mKCpzZWNfa2V5KTsNCisJCQlzZWNfa2V5LT5r ZXlfbGVuID0gMTY7DQorCQkJbWVtY3B5KHNlY19rZXktPmtleSwga2V5LT5rZXkgKyAxNiwgMTYp Ow0KKw0KKwkJCXNlYy0+bl9jaXBoZXIgPSAyOw0KKwkJfSBlbHNlIHsNCisJCQlzZWNfa2V5LT5j aXBoZXJfaWQgPSBjaXBoZXI7DQorCQkJc2VjX2tleS0+a2V5X2xlbiA9IGtleS0+a2V5bGVuOw0K KwkJCW1lbWNweShzZWNfa2V5LT5rZXksIGtleS0+a2V5LCBrZXktPmtleWxlbik7DQorDQorCQkJ aWYgKGNpcGhlciA9PSBNVF9DSVBIRVJfVEtJUCkgew0KKwkJCQkvKiBSeC9UeCBNSUMga2V5cyBh cmUgc3dhcHBlZCAqLw0KKwkJCQltZW1jcHkoc2VjX2tleS0+a2V5ICsgMTYsIGtleS0+a2V5ICsg MjQsIDgpOw0KKwkJCQltZW1jcHkoc2VjX2tleS0+a2V5ICsgMjQsIGtleS0+a2V5ICsgMTYsIDgp Ow0KKwkJCX0NCisNCisJCQlsZW4gLT0gc2l6ZW9mKCpzZWNfa2V5KTsNCisJCQlzZWMtPm5fY2lw aGVyID0gMTsNCisJCX0NCisJfSBlbHNlIHsNCisJCWxlbiAtPSBzaXplb2Yoc2VjLT5rZXkpOw0K KwkJc2VjLT5uX2NpcGhlciA9IDA7DQorCX0NCisJc2VjLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4p Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG10NzkxNV9tY3VfYWRkX2tleShzdHJ1Y3Qg bXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAgICAgIHN0 cnVjdCBtdDc5MTVfc3RhICptc3RhLCBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksDQor CQkgICAgICAgZW51bSBzZXRfa2V5X2NtZCBjbWQpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAq bXZpZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBza19i dWZmICpza2I7DQorCWludCByZXQ7DQorDQorCXNrYiA9IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3Jl cShkZXYsIG12aWYsIG1zdGEsDQorCQkJCSAgICAgICBNVDc5MTVfU1RBX1VQREFURV9NQVhfU0la RSk7DQorCWlmIChJU19FUlIoc2tiKSkNCisJCXJldHVybiBQVFJfRVJSKHNrYik7DQorDQorCXJl dCA9IG10NzkxNV9tY3Vfc3RhX2tleV90bHYoc2tiLCBrZXksIGNtZCk7DQorCWlmIChyZXQpDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9za2Jfc2VuZF9tc2coJmRldi0+ bXQ3Niwgc2tiLA0KKwkJCQkgICAgICAgTUNVX0VYVF9DTURfU1RBX1JFQ19VUERBVEUsIHRydWUp Ow0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3Vfc3RhX2JhX3RsdihzdHJ1Y3Qgc2tf YnVmZiAqc2tiLA0KKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFt cywNCisJCSAgICAgIGJvb2wgZW5hYmxlLCBib29sIHR4KQ0KK3sNCisJc3RydWN0IHN0YV9yZWNf YmEgKmJhOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rs dihza2IsIFNUQV9SRUNfQkEsIHNpemVvZigqYmEpKTsNCisNCisJYmEgPSAoc3RydWN0IHN0YV9y ZWNfYmEgKil0bHY7DQorCWJhLT5iYV90eXBlID0gdHggPyBNVF9CQV9UWVBFX09SSUdJTkFUT1Ig OiBNVF9CQV9UWVBFX1JFQ0lQSUVOVCwNCisJYmEtPndpbnNpemUgPSBjcHVfdG9fbGUxNihwYXJh bXMtPmJ1Zl9zaXplKTsNCisJYmEtPnNzbiA9IGNwdV90b19sZTE2KHBhcmFtcy0+c3NuKTsNCisJ YmEtPmJhX2VuID0gZW5hYmxlIDw8IHBhcmFtcy0+dGlkOw0KKwliYS0+YW1zZHUgPSBwYXJhbXMt PmFtc2R1Ow0KKwliYS0+dGlkID0gcGFyYW1zLT50aWQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQor bXQ3OTE1X21jdV93dGJsX2JhX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KKwkJICAgICAgIHN0 cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMsDQorCQkgICAgICAgYm9vbCBlbmFi bGUsIGJvb2wgdHgsIHZvaWQgKnN0YV93dGJsLA0KKwkJICAgICAgIHZvaWQgKnd0YmxfdGx2KQ0K K3sNCisJc3RydWN0IHd0YmxfYmEgKmJhOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorDQorCXRsdiA9 IG10NzkxNV9tY3VfYWRkX25lc3RlZF90bHYoc2tiLCBXVEJMX0JBLCBzaXplb2YoKmJhKSwNCisJ CQkJCXd0YmxfdGx2LCBzdGFfd3RibCk7DQorDQorCWJhID0gKHN0cnVjdCB3dGJsX2JhICopdGx2 Ow0KKwliYS0+dGlkID0gcGFyYW1zLT50aWQ7DQorDQorCWlmICh0eCkgew0KKwkJYmEtPmJhX3R5 cGUgPSBNVF9CQV9UWVBFX09SSUdJTkFUT1I7DQorCQliYS0+c24gPSBlbmFibGUgPyBjcHVfdG9f bGUxNihwYXJhbXMtPnNzbikgOiAwOw0KKwkJYmEtPmJhX2VuID0gZW5hYmxlOw0KKwl9IGVsc2Ug ew0KKwkJbWVtY3B5KGJhLT5wZWVyX2FkZHIsIHBhcmFtcy0+c3RhLT5hZGRyLCBFVEhfQUxFTik7 DQorCQliYS0+YmFfdHlwZSA9IE1UX0JBX1RZUEVfUkVDSVBJRU5UOw0KKwkJYmEtPnJzdF9iYV90 aWQgPSBwYXJhbXMtPnRpZDsNCisJCWJhLT5yc3RfYmFfc2VsID0gUlNUX0JBX01BQ19USURfTUFU Q0g7DQorCQliYS0+cnN0X2JhX3NiID0gMTsNCisJfQ0KKw0KKwlpZiAoZW5hYmxlICYmIHR4KQ0K KwkJYmEtPmJhX3dpbnNpemUgPSBjcHVfdG9fbGUxNihwYXJhbXMtPmJ1Zl9zaXplKTsNCit9DQor DQorc3RhdGljIGludA0KK210NzkxNV9tY3Vfc3RhX2JhKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYs DQorCQkgIHN0cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMsDQorCQkgIGJvb2wg ZW5hYmxlLCBib29sIHR4KQ0KK3sNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGEgPSAoc3RydWN0 IG10NzkxNV9zdGEgKilwYXJhbXMtPnN0YS0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBtdDc5MTVfdmlm ICptdmlmID0gbXN0YS0+dmlmOw0KKwlzdHJ1Y3Qgd3RibF9yZXFfaGRyICp3dGJsX2hkcjsNCisJ c3RydWN0IHRsdiAqc3RhX3d0Ymw7DQorCXN0cnVjdCBza19idWZmICpza2I7DQorDQorCXNrYiA9 IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3JlcShkZXYsIG12aWYsIG1zdGEsDQorCQkJCSAgICAgICBN VDc5MTVfU1RBX1VQREFURV9NQVhfU0laRSk7DQorCWlmIChJU19FUlIoc2tiKSkNCisJCXJldHVy biBQVFJfRVJSKHNrYik7DQorDQorCW10NzkxNV9tY3Vfc3RhX2JhX3Rsdihza2IsIHBhcmFtcywg ZW5hYmxlLCB0eCk7DQorCXN0YV93dGJsID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgU1RBX1JF Q19XVEJMLCBzaXplb2Yoc3RydWN0IHRsdikpOw0KKw0KKwl3dGJsX2hkciA9IG10NzkxNV9tY3Vf YWxsb2Nfd3RibF9yZXEoZGV2LCBtc3RhLCBXVEJMX1NFVCwgc3RhX3d0YmwsDQorCQkJCQkgICAg ICZza2IpOw0KKwltdDc5MTVfbWN1X3d0YmxfYmFfdGx2KHNrYiwgcGFyYW1zLCBlbmFibGUsIHR4 LCBzdGFfd3RibCwgd3RibF9oZHIpOw0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9za2Jfc2VuZF9t c2coJmRldi0+bXQ3Niwgc2tiLA0KKwkJCQkgICAgICAgTUNVX0VYVF9DTURfU1RBX1JFQ19VUERB VEUsIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9hZGRfdHhfYmEoc3RydWN0IG10Nzkx NV9kZXYgKmRldiwNCisJCQkgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcywN CisJCQkgYm9vbCBlbmFibGUpDQorew0KKwlyZXR1cm4gbXQ3OTE1X21jdV9zdGFfYmEoZGV2LCBw YXJhbXMsIGVuYWJsZSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2FkZF9yeF9iYShz dHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX2FtcGR1X3BhcmFt cyAqcGFyYW1zLA0KKwkJCSBib29sIGVuYWJsZSkNCit7DQorCXJldHVybiBtdDc5MTVfbWN1X3N0 YV9iYShkZXYsIHBhcmFtcywgZW5hYmxlLCBmYWxzZSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQor bXQ3OTE1X21jdV93dGJsX2dlbmVyaWNfdGx2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBp ZWVlODAyMTFfdmlmICp2aWYsDQorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZv aWQgKnN0YV93dGJsLA0KKwkJCSAgICB2b2lkICp3dGJsX3RsdikNCit7DQorCXN0cnVjdCBtdDc5 MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3Ry dWN0IHd0YmxfZ2VuZXJpYyAqZ2VuZXJpYzsNCisJc3RydWN0IHd0YmxfcnggKnJ4Ow0KKwlzdHJ1 Y3QgdGx2ICp0bHY7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX25lc3RlZF90bHYoc2tiLCBX VEJMX0dFTkVSSUMsIHNpemVvZigqZ2VuZXJpYyksDQorCQkJCQl3dGJsX3Rsdiwgc3RhX3d0Ymwp Ow0KKw0KKwlnZW5lcmljID0gKHN0cnVjdCB3dGJsX2dlbmVyaWMgKil0bHY7DQorDQorCWlmIChz dGEpIHsNCisJCW1lbWNweShnZW5lcmljLT5wZWVyX2FkZHIsIHN0YS0+YWRkciwgRVRIX0FMRU4p Ow0KKwkJZ2VuZXJpYy0+cGFydGlhbF9haWQgPSBjcHVfdG9fbGUxNihzdGEtPmFpZCk7DQorCQln ZW5lcmljLT5tdWFyX2lkeCA9IG12aWYtPm9tYWNfaWR4Ow0KKwkJZ2VuZXJpYy0+cW9zID0gc3Rh LT53bWU7DQorCX0gZWxzZSB7DQorCQkvKiB1c2UgQlNTSUQgaW4gc3RhdGlvbiBtb2RlICovDQor CQlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pDQorCQkJbWVtY3B5KGdl bmVyaWMtPnBlZXJfYWRkciwgdmlmLT5ic3NfY29uZi5ic3NpZCwNCisJCQkgICAgICAgRVRIX0FM RU4pOw0KKwkJZWxzZQ0KKwkJCWV0aF9icm9hZGNhc3RfYWRkcihnZW5lcmljLT5wZWVyX2FkZHIp Ow0KKw0KKwkJZ2VuZXJpYy0+bXVhcl9pZHggPSAweGU7DQorCX0NCisNCisJdGx2ID0gbXQ3OTE1 X21jdV9hZGRfbmVzdGVkX3Rsdihza2IsIFdUQkxfUlgsIHNpemVvZigqcngpLA0KKwkJCQkJd3Ri bF90bHYsIHN0YV93dGJsKTsNCisNCisJcnggPSAoc3RydWN0IHd0YmxfcnggKil0bHY7DQorCXJ4 LT5yY2ExID0gc3RhID8gdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQIDogMTsNCisJcngt PnJjYTIgPSAxOw0KKwlyeC0+cnYgPSAxOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9t Y3Vfc3RhX2Jhc2ljX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLA0KKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIGVuYWJsZSkNCit7 DQorI2RlZmluZSBFWFRSQV9JTkZPX1ZFUiAgICAgICAgICBCSVQoMCkNCisjZGVmaW5lIEVYVFJB X0lORk9fTkVXICAgICAgICAgIEJJVCgxKQ0KKwlzdHJ1Y3Qgc3RhX3JlY19iYXNpYyAqYmFzaWM7 DQorCXN0cnVjdCB0bHYgKnRsdjsNCisNCisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwg U1RBX1JFQ19CQVNJQywgc2l6ZW9mKCpiYXNpYykpOw0KKw0KKwliYXNpYyA9IChzdHJ1Y3Qgc3Rh X3JlY19iYXNpYyAqKXRsdjsNCisJYmFzaWMtPmV4dHJhX2luZm8gPSBjcHVfdG9fbGUxNihFWFRS QV9JTkZPX1ZFUik7DQorDQorCWlmIChlbmFibGUpIHsNCisJCWJhc2ljLT5leHRyYV9pbmZvIHw9 IGNwdV90b19sZTE2KEVYVFJBX0lORk9fTkVXKTsNCisJCWJhc2ljLT5jb25uX3N0YXRlID0gQ09O Tl9TVEFURV9QT1JUX1NFQ1VSRTsNCisJfSBlbHNlIHsNCisJCWJhc2ljLT5jb25uX3N0YXRlID0g Q09OTl9TVEFURV9ESVNDT05ORUNUOw0KKwl9DQorDQorCWlmICghc3RhKSB7DQorCQliYXNpYy0+ Y29ubl90eXBlID0gY3B1X3RvX2xlMzIoQ09OTkVDVElPTl9JTkZSQV9CQyk7DQorCQlldGhfYnJv YWRjYXN0X2FkZHIoYmFzaWMtPnBlZXJfYWRkcik7DQorCQlyZXR1cm47DQorCX0NCisNCisJc3dp dGNoICh2aWYtPnR5cGUpIHsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOg0KKwlj YXNlIE5MODAyMTFfSUZUWVBFX0FQOg0KKwkJYmFzaWMtPmNvbm5fdHlwZSA9IGNwdV90b19sZTMy KENPTk5FQ1RJT05fSU5GUkFfU1RBKTsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFfSUZUWVBF X1NUQVRJT046DQorCQliYXNpYy0+Y29ubl90eXBlID0gY3B1X3RvX2xlMzIoQ09OTkVDVElPTl9J TkZSQV9BUCk7DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoNCisJCWJh c2ljLT5jb25uX3R5cGUgPSBjcHVfdG9fbGUzMihDT05ORUNUSU9OX0lCU1NfQURIT0MpOw0KKwkJ YnJlYWs7DQorCWRlZmF1bHQ6DQorCQlXQVJOX09OKDEpOw0KKwkJYnJlYWs7DQorCX0NCisNCisJ bWVtY3B5KGJhc2ljLT5wZWVyX2FkZHIsIHN0YS0+YWRkciwgRVRIX0FMRU4pOw0KKwliYXNpYy0+ YWlkID0gY3B1X3RvX2xlMTYoc3RhLT5haWQpOw0KKwliYXNpYy0+cW9zID0gc3RhLT53bWU7DQor fQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9zdGFfdGx2KHN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsDQorCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAq c3RhKQ0KK3sNCisJc3RydWN0IHRsdiAqdGx2Ow0KKw0KKwlpZiAoc3RhLT5odF9jYXAuaHRfc3Vw cG9ydGVkKSB7DQorCQlzdHJ1Y3Qgc3RhX3JlY19odCAqaHQ7DQorDQorCQkvKiBzdGFyZWMgaHQg Ki8NCisJCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIFNUQV9SRUNfSFQsIHNpemVvZigq aHQpKTsNCisJCWh0ID0gKHN0cnVjdCBzdGFfcmVjX2h0ICopdGx2Ow0KKwkJaHQtPmh0X2NhcCA9 IGNwdV90b19sZTE2KHN0YS0+aHRfY2FwLmNhcCk7DQorCX0NCisNCisJLyogc3RhcmVjIHZodCAq Lw0KKwlpZiAoc3RhLT52aHRfY2FwLnZodF9zdXBwb3J0ZWQpIHsNCisJCXN0cnVjdCBzdGFfcmVj X3ZodCAqdmh0Ow0KKw0KKwkJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgU1RBX1JFQ19W SFQsIHNpemVvZigqdmh0KSk7DQorCQl2aHQgPSAoc3RydWN0IHN0YV9yZWNfdmh0ICopdGx2Ow0K KwkJdmh0LT52aHRfY2FwID0gY3B1X3RvX2xlMzIoc3RhLT52aHRfY2FwLmNhcCk7DQorCQl2aHQt PnZodF9yeF9tY3NfbWFwID0gc3RhLT52aHRfY2FwLnZodF9tY3MucnhfbWNzX21hcDsNCisJCXZo dC0+dmh0X3R4X21jc19tYXAgPSBzdGEtPnZodF9jYXAudmh0X21jcy50eF9tY3NfbWFwOw0KKwl9 DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV93dGJsX3NtcHNfdGx2KHN0cnVjdCBz a19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkJIHZvaWQgKnN0YV93 dGJsLCB2b2lkICp3dGJsX3RsdikNCit7DQorCXN0cnVjdCB3dGJsX3NtcHMgKnNtcHM7DQorCXN0 cnVjdCB0bHYgKnRsdjsNCisNCisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfbmVzdGVkX3Rsdihza2Is IFdUQkxfU01QUywgc2l6ZW9mKCpzbXBzKSwNCisJCQkJCXd0YmxfdGx2LCBzdGFfd3RibCk7DQor CXNtcHMgPSAoc3RydWN0IHd0Ymxfc21wcyAqKXRsdjsNCisNCisJaWYgKHN0YS0+c21wc19tb2Rl ID09IElFRUU4MDIxMV9TTVBTX0RZTkFNSUMpDQorCQlzbXBzLT5zbXBzID0gdHJ1ZTsNCit9DQor DQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X3d0YmxfaHRfdGx2KHN0cnVjdCBza19idWZmICpz a2IsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkgICAgICAgdm9pZCAqc3RhX3d0Ymws IHZvaWQgKnd0YmxfdGx2KQ0KK3sNCisJc3RydWN0IHd0YmxfaHQgKmh0ID0gTlVMTDsNCisJc3Ry dWN0IHRsdiAqdGx2Ow0KKw0KKwkvKiB3dGJsIGh0ICovDQorCWlmIChzdGEtPmh0X2NhcC5odF9z dXBwb3J0ZWQpIHsNCisJCXRsdiA9IG10NzkxNV9tY3VfYWRkX25lc3RlZF90bHYoc2tiLCBXVEJM X0hULCBzaXplb2YoKmh0KSwNCisJCQkJCQl3dGJsX3Rsdiwgc3RhX3d0YmwpOw0KKwkJaHQgPSAo c3RydWN0IHd0YmxfaHQgKil0bHY7DQorCQlodC0+bGRwYyA9IHN0YS0+aHRfY2FwLmNhcCAmIElF RUU4MDIxMV9IVF9DQVBfTERQQ19DT0RJTkc7DQorCQlodC0+YWYgPSBzdGEtPmh0X2NhcC5hbXBk dV9mYWN0b3I7DQorCQlodC0+bW0gPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5Ow0KKwkJaHQt Pmh0ID0gdHJ1ZTsNCisJfQ0KKw0KKwkvKiB3dGJsIHZodCAqLw0KKwlpZiAoc3RhLT52aHRfY2Fw LnZodF9zdXBwb3J0ZWQpIHsNCisJCXN0cnVjdCB3dGJsX3ZodCAqdmh0Ow0KKwkJdTMyIGFmOw0K Kw0KKwkJdGx2ID0gbXQ3OTE1X21jdV9hZGRfbmVzdGVkX3Rsdihza2IsIFdUQkxfVkhULCBzaXpl b2YoKnZodCksDQorCQkJCQkJd3RibF90bHYsIHN0YV93dGJsKTsNCisJCXZodCA9IChzdHJ1Y3Qg d3RibF92aHQgKil0bHY7DQorCQl2aHQtPmxkcGMgPSBzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgw MjExX1ZIVF9DQVBfUlhMRFBDLA0KKwkJdmh0LT52aHQgPSB0cnVlOw0KKw0KKwkJYWYgPSAoc3Rh LT52aHRfY2FwLmNhcCAmDQorCQkgICAgICBJRUVFODAyMTFfVkhUX0NBUF9NQVhfQV9NUERVX0xF TkdUSF9FWFBPTkVOVF9NQVNLKSA+Pg0KKwkJICAgICBJRUVFODAyMTFfVkhUX0NBUF9NQVhfQV9N UERVX0xFTkdUSF9FWFBPTkVOVF9TSElGVDsNCisNCisJCWlmIChodCAmJiBhZiA+IGh0LT5hZikN CisJCQlodC0+YWYgPSBhZjsNCisJfQ0KKw0KKwltdDc5MTVfbWN1X3d0Ymxfc21wc190bHYoc2ti LCBzdGEsIHN0YV93dGJsLCB3dGJsX3Rsdik7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2FkZF9z bXBzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQor CQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCBtdDc5MTVfdmlmICpt dmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IG10Nzkx NV9zdGEgKm1zdGEgPSAoc3RydWN0IG10NzkxNV9zdGEgKilzdGEtPmRydl9wcml2Ow0KKwlzdHJ1 Y3Qgd3RibF9yZXFfaGRyICp3dGJsX2hkcjsNCisJc3RydWN0IHRsdiAqc3RhX3d0Ymw7DQorCXN0 cnVjdCBza19idWZmICpza2I7DQorDQorCXNrYiA9IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3JlcShk ZXYsIG12aWYsIG1zdGEsDQorCQkJCSAgICAgICBNVDc5MTVfU1RBX1VQREFURV9NQVhfU0laRSk7 DQorCWlmIChJU19FUlIoc2tiKSkNCisJCXJldHVybiBQVFJfRVJSKHNrYik7DQorDQorCXN0YV93 dGJsID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgU1RBX1JFQ19XVEJMLCBzaXplb2Yoc3RydWN0 IHRsdikpOw0KKw0KKwl3dGJsX2hkciA9IG10NzkxNV9tY3VfYWxsb2Nfd3RibF9yZXEoZGV2LCBt c3RhLCBXVEJMX1NFVCwgc3RhX3d0YmwsDQorCQkJCQkgICAgICZza2IpOw0KKwltdDc5MTVfbWN1 X3d0Ymxfc21wc190bHYoc2tiLCBzdGEsIHN0YV93dGJsLCB3dGJsX2hkcik7DQorDQorCXJldHVy biBfX210NzZfbWN1X3NrYl9zZW5kX21zZygmZGV2LT5tdDc2LCBza2IsDQorCQkJCSAgICAgICBN Q1VfRVhUX0NNRF9TVEFfUkVDX1VQREFURSwgdHJ1ZSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQor bXQ3OTE1X21jdV9zdGFfcmF0ZV9jdHJsX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qg bXQ3OTE1X2RldiAqZGV2LA0KKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJ CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgY2ZnODAyMTFf Y2hhbl9kZWYgKmNoYW5kZWYgPSAmZGV2LT5tcGh5LmNoYW5kZWY7DQorCXN0cnVjdCBzdGFfcmVj X3JhICpyYTsNCisJc3RydWN0IHRsdiAqdGx2Ow0KKwllbnVtIG5sODAyMTFfYmFuZCBiYW5kID0g Y2hhbmRlZi0+Y2hhbi0+YmFuZDsNCisJdTMyIHN1cHBfcmF0ZSA9IHN0YS0+c3VwcF9yYXRlc1ti YW5kXTsNCisJaW50IG5fcmF0ZXMgPSBod2VpZ2h0MzIoc3VwcF9yYXRlKTsNCisJdTMyIGNhcCA9 IHN0YS0+d21lID8gU1RBX0NBUF9XTU0gOiAwOw0KKwl1OCBpLCBuc3MgPSBzdGEtPnJ4X25zcywg bWNzID0gMDsNCisNCisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgU1RBX1JFQ19SQSwg c2l6ZW9mKCpyYSkpOw0KKw0KKwlyYSA9IChzdHJ1Y3Qgc3RhX3JlY19yYSAqKXRsdjsNCisJcmEt PnZhbGlkID0gdHJ1ZTsNCisJcmEtPmF1dG9fcmF0ZSA9IHRydWU7DQorCXJhLT5waHlfbW9kZSA9 IG10NzkxNV9nZXRfcGh5X21vZGUoZGV2LCB2aWYsIGJhbmQsIHN0YSk7DQorCXJhLT5jaGFubmVs ID0gY2hhbmRlZi0+Y2hhbi0+aHdfdmFsdWU7DQorCXJhLT5idyA9IHN0YS0+YmFuZHdpZHRoOw0K KwlyYS0+cmF0ZV9sZW4gPSBuX3JhdGVzOw0KKwlyYS0+cGh5LmJ3ID0gc3RhLT5iYW5kd2lkdGg7 DQorDQorCWlmIChuX3JhdGVzKSB7DQorCQlpZiAoYmFuZCA9PSBOTDgwMjExX0JBTkRfMkdIWikg ew0KKwkJCXJhLT5zdXBwX21vZGUgPSBNT0RFX0NDSzsNCisJCQlyYS0+c3VwcF9jY2tfcmF0ZSA9 IHN1cHBfcmF0ZSAmIEdFTk1BU0soMywgMCk7DQorCQkJcmEtPnBoeS50eXBlID0gTVRfUEhZX1RZ UEVfQ0NLOw0KKw0KKwkJCWlmIChuX3JhdGVzID4gNCkgew0KKwkJCQlyYS0+c3VwcF9tb2RlIHw9 IE1PREVfT0ZETTsNCisJCQkJcmEtPnN1cHBfb2ZkbV9yYXRlID0gc3VwcF9yYXRlID4+IDQ7DQor CQkJCXJhLT5waHkudHlwZSA9IE1UX1BIWV9UWVBFX09GRE07DQorCQkJfQ0KKwkJfSBlbHNlIHsN CisJCQlyYS0+c3VwcF9tb2RlID0gTU9ERV9PRkRNOw0KKwkJCXJhLT5zdXBwX29mZG1fcmF0ZSA9 IHN1cHBfcmF0ZTsNCisJCQlyYS0+cGh5LnR5cGUgPSBNVF9QSFlfVFlQRV9PRkRNOw0KKwkJfQ0K Kwl9DQorDQorCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsNCisJCWZvciAoaSA9IDA7 IGkgPCBuc3M7IGkrKykNCisJCQlyYS0+aHRfbWNzW2ldID0gc3RhLT5odF9jYXAubWNzLnJ4X21h c2tbaV07DQorDQorCQlyYS0+c3VwcF9odF9tY3MgPSAqKF9fbGUzMiAqKXJhLT5odF9tY3M7DQor CQlyYS0+c3VwcF9tb2RlIHw9IE1PREVfSFQ7DQorCQltY3MgPSBod2VpZ2h0MzIocmEtPnN1cHBf aHRfbWNzKSAtIDE7DQorCQlyYS0+YWYgPSBzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3I7DQorCQly YS0+aHRfZ2YgPSAhIShzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQp Ow0KKw0KKwkJY2FwIHw9IFNUQV9DQVBfSFQ7DQorCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVF RTgwMjExX0hUX0NBUF9TR0lfMjApDQorCQkJY2FwIHw9IFNUQV9DQVBfU0dJXzIwOw0KKwkJaWYg KHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKQ0KKwkJCWNhcCB8PSBT VEFfQ0FQX1NHSV80MDsNCisJCWlmIChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQ X1RYX1NUQkMpDQorCQkJY2FwIHw9IFNUQV9DQVBfVFhfU1RCQzsNCisJCWlmIChzdGEtPmh0X2Nh cC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkMpDQorCQkJY2FwIHw9IFNUQV9DQVBfUlhf U1RCQzsNCisJCWlmIChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0xEUENfQ09E SU5HKQ0KKwkJCWNhcCB8PSBTVEFfQ0FQX0xEUEM7DQorCX0NCisNCisJaWYgKHN0YS0+dmh0X2Nh cC52aHRfc3VwcG9ydGVkKSB7DQorCQlfX2xlMTYgbWNzX21hcCA9IHN0YS0+dmh0X2NhcC52aHRf bWNzLnJ4X21jc19tYXA7DQorCQl1MzIgYWY7DQorCQl1MTYgdmh0X21jczsNCisJCXU4IG1jc19w cmV2Ow0KKw0KKwkJYWYgPSAoc3RhLT52aHRfY2FwLmNhcCAmDQorCQkgICAgICBJRUVFODAyMTFf VkhUX0NBUF9NQVhfQV9NUERVX0xFTkdUSF9FWFBPTkVOVF9NQVNLKSA+Pg0KKwkJICAgICBJRUVF ODAyMTFfVkhUX0NBUF9NQVhfQV9NUERVX0xFTkdUSF9FWFBPTkVOVF9TSElGVDsNCisNCisJCWlm IChhZiA+IHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvcikNCisJCQlyYS0+YWYgPSBhZjsNCisNCisJ CWNhcCB8PSBTVEFfQ0FQX1ZIVDsNCisJCWlmIChzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgwMjEx X1ZIVF9DQVBfU0hPUlRfR0lfODApDQorCQkJY2FwIHw9IFNUQV9DQVBfVkhUX1NHSV84MDsNCisJ CWlmIChzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgwMjExX1ZIVF9DQVBfU0hPUlRfR0lfMTYwKQ0K KwkJCWNhcCB8PSBTVEFfQ0FQX1ZIVF9TR0lfMTYwOw0KKwkJaWYgKHN0YS0+dmh0X2NhcC5jYXAg JiBJRUVFODAyMTFfVkhUX0NBUF9UWFNUQkMpDQorCQkJY2FwIHw9IFNUQV9DQVBfVkhUX1RYX1NU QkM7DQorCQlpZiAoc3RhLT52aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQX1JYU1RCQ18x KQ0KKwkJCWNhcCB8PSBTVEFfQ0FQX1ZIVF9SWF9TVEJDOw0KKwkJaWYgKHN0YS0+dmh0X2NhcC5j YXAgJiBJRUVFODAyMTFfVkhUX0NBUF9SWExEUEMpDQorCQkJY2FwIHw9IFNUQV9DQVBfVkhUX0xE UEM7DQorDQorCQlyYS0+c3VwcF9tb2RlIHw9IE1PREVfVkhUOw0KKwkJZm9yIChtY3MgPSAwLCBp ID0gMDsgaSA8IG5zczsgaSsrLCBtY3NfbWFwID4+PSAyKSB7DQorCQkJc3dpdGNoIChtY3NfbWFw ICYgMHgzKSB7DQorCQkJY2FzZSBJRUVFODAyMTFfVkhUX01DU19TVVBQT1JUXzBfOToNCisJCQkJ dmh0X21jcyA9IEdFTk1BU0soOSwgMCk7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgSUVFRTgwMjEx X1ZIVF9NQ1NfU1VQUE9SVF8wXzg6DQorCQkJCXZodF9tY3MgPSBHRU5NQVNLKDgsIDApOw0KKwkJ CQlicmVhazsNCisJCQljYXNlIElFRUU4MDIxMV9WSFRfTUNTX1NVUFBPUlRfMF83Og0KKwkJCQl2 aHRfbWNzID0gR0VOTUFTSyg3LCAwKTsNCisJCQkJYnJlYWs7DQorCQkJZGVmYXVsdDoNCisJCQkJ dmh0X21jcyA9IDA7DQorCQkJfQ0KKw0KKwkJCXJhLT5zdXBwX3ZodF9tY3NbaV0gPSBjcHVfdG9f bGUxNih2aHRfbWNzKTsNCisNCisJCQltY3NfcHJldiA9IGh3ZWlnaHQxNih2aHRfbWNzKSAtIDE7 DQorCQkJaWYgKG1jc19wcmV2ID4gbWNzKQ0KKwkJCQltY3MgPSBtY3NfcHJldjsNCisNCisJCQkv KiBvbmx5IHN1cHBvcnQgMnNzIG9uIDE2ME1IeiAqLw0KKwkJCWlmIChpID4gMSAmJiAocmEtPmJ3 ID09IENNRF9DQldfMTYwTUhaIHx8DQorCQkJCSAgICAgIHJhLT5idyA9PSBDTURfQ0JXXzgwODBN SFopKQ0KKwkJCQlicmVhazsNCisJCX0NCisJfQ0KKw0KKwlyYS0+c3RhX3N0YXR1cyA9IGNwdV90 b19sZTMyKGNhcCk7DQorDQorCXN3aXRjaCAoQklUKGZscyhyYS0+c3VwcF9tb2RlKSAtIDEpKSB7 DQorCWNhc2UgTU9ERV9WSFQ6DQorCQlyYS0+cGh5LnR5cGUgPSBNVF9QSFlfVFlQRV9WSFQ7DQor CQlyYS0+cGh5Lm1jcyA9IG1jczsNCisJCXJhLT5waHkubnNzID0gbnNzOw0KKwkJcmEtPnBoeS5z dGJjID0gISEoc3RhLT52aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQX1RYU1RCQyk7DQor CQlyYS0+cGh5LmxkcGMgPSAhIShzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgwMjExX1ZIVF9DQVBf UlhMRFBDKTsNCisJCXJhLT5waHkuc2dpID0NCisJCQkhIShzdGEtPnZodF9jYXAuY2FwICYgSUVF RTgwMjExX1ZIVF9DQVBfU0hPUlRfR0lfODApOw0KKwkJYnJlYWs7DQorCWNhc2UgTU9ERV9IVDoN CisJCXJhLT5waHkudHlwZSA9IE1UX1BIWV9UWVBFX0hUOw0KKwkJcmEtPnBoeS5tY3MgPSBtY3M7 DQorCQlyYS0+cGh5LmxkcGMgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0xE UENfQ09ESU5HOw0KKwkJcmEtPnBoeS5zdGJjID0gISEoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgw MjExX0hUX0NBUF9UWF9TVEJDKTsNCisJCXJhLT5waHkuc2dpID0gISEoc3RhLT5odF9jYXAuY2Fw ICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQli cmVhazsNCisJfQ0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9hZGRfcmF0ZV9jdHJsKHN0cnVjdCBt dDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJICAgICBzdHJ1 Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQ0KK3sNCisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSAo c3RydWN0IG10NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSAq bXN0YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXN0YS0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBza19i dWZmICpza2I7DQorDQorCXNrYiA9IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3JlcShkZXYsIG12aWYs IG1zdGEsDQorCQkJCSAgICAgICBNVDc5MTVfU1RBX1VQREFURV9NQVhfU0laRSk7DQorCWlmIChJ U19FUlIoc2tiKSkNCisJCXJldHVybiBQVFJfRVJSKHNrYik7DQorDQorCW10NzkxNV9tY3Vfc3Rh X3JhdGVfY3RybF90bHYoc2tiLCBkZXYsIHZpZiwgc3RhKTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9t Y3Vfc2tiX3NlbmRfbXNnKCZkZXYtPm10NzYsIHNrYiwNCisJCQkJICAgICAgIE1DVV9FWFRfQ01E X1NUQV9SRUNfVVBEQVRFLCB0cnVlKTsNCit9DQorDQoraW50IG10NzkxNV9tY3VfYWRkX3N0YShz dHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJICAg ICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgZW5hYmxlKQ0KK3sNCisJc3RydWN0 IG10NzkxNV92aWYgKm12aWYgPSAoc3RydWN0IG10NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0K KwlzdHJ1Y3Qgd3RibF9yZXFfaGRyICp3dGJsX2hkcjsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1z dGE7DQorCXN0cnVjdCB0bHYgKnN0YV93dGJsOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKwlp bnQgcmV0Ow0KKw0KKwltc3RhID0gc3RhID8gKHN0cnVjdCBtdDc5MTVfc3RhICopc3RhLT5kcnZf cHJpdiA6ICZtdmlmLT5zdGE7DQorDQorCXNrYiA9IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3JlcShk ZXYsIG12aWYsIG1zdGEsDQorCQkJCSAgICAgICBNVDc5MTVfU1RBX1VQREFURV9NQVhfU0laRSk7 DQorCWlmIChJU19FUlIoc2tiKSkNCisJCXJldHVybiBQVFJfRVJSKHNrYik7DQorDQorCW10Nzkx NV9tY3Vfc3RhX2Jhc2ljX3Rsdihza2IsIHZpZiwgc3RhLCBlbmFibGUpOw0KKwlpZiAoZW5hYmxl ICYmIHN0YSkNCisJCW10NzkxNV9tY3Vfc3RhX3RsdihkZXYsIHNrYiwgc3RhKTsNCisNCisJc3Rh X3d0YmwgPSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBTVEFfUkVDX1dUQkwsIHNpemVvZihzdHJ1 Y3QgdGx2KSk7DQorDQorCXd0YmxfaGRyID0gbXQ3OTE1X21jdV9hbGxvY193dGJsX3JlcShkZXYs IG1zdGEsIFdUQkxfUkVTRVRfQU5EX1NFVCwNCisJCQkJCSAgICAgc3RhX3d0YmwsICZza2IpOw0K KwlpZiAoZW5hYmxlKSB7DQorCQltdDc5MTVfbWN1X3d0YmxfZ2VuZXJpY190bHYoc2tiLCB2aWYs IHN0YSwgc3RhX3d0YmwsIHd0YmxfaGRyKTsNCisJCWlmIChzdGEpDQorCQkJbXQ3OTE1X21jdV93 dGJsX2h0X3Rsdihza2IsIHN0YSwgc3RhX3d0YmwsIHd0YmxfaGRyKTsNCisJfQ0KKw0KKwlyZXQg PSBfX210NzZfbWN1X3NrYl9zZW5kX21zZygmZGV2LT5tdDc2LCBza2IsDQorCQkJCSAgICAgIE1D VV9FWFRfQ01EX1NUQV9SRUNfVVBEQVRFLCB0cnVlKTsNCisJaWYgKHJldCkNCisJCXJldHVybiBy ZXQ7DQorDQorCWlmIChlbmFibGUgJiYgc3RhKQ0KKwkJcmV0dXJuIG10NzkxNV9tY3VfYWRkX3Jh dGVfY3RybChkZXYsIHZpZiwgc3RhKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtdDc5 MTVfbWN1X2FkZF9kZXZfaW5mbyhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSAgICBzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIGVuYWJsZSkNCit7DQorCXN0cnVjdCBtdDc5MTVf dmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0 IHsNCisJCXN0cnVjdCByZXFfaGRyIHsNCisJCQl1OCBvbWFjX2lkeDsNCisJCQl1OCBkYmRjX2lk eDsNCisJCQlfX2xlMTYgdGx2X251bTsNCisJCQl1OCBpc190bHZfYXBwZW5kOw0KKwkJCXU4IHJz dlszXTsNCisJCX0gX19wYWNrZWQgaGRyOw0KKwkJc3RydWN0IHJlcV90bHYgew0KKwkJCV9fbGUx NiB0YWc7DQorCQkJX19sZTE2IGxlbjsNCisJCQl1OCBhY3RpdmU7DQorCQkJdTggZGJkY19pZHg7 DQorCQkJdTggb21hY19hZGRyW0VUSF9BTEVOXTsNCisJCX0gX19wYWNrZWQgdGx2Ow0KKwl9IGRh dGEgPSB7DQorCQkuaGRyID0gew0KKwkJCS5vbWFjX2lkeCA9IG12aWYtPm9tYWNfaWR4LA0KKwkJ CS5kYmRjX2lkeCA9IG12aWYtPmJhbmRfaWR4LA0KKwkJCS50bHZfbnVtID0gY3B1X3RvX2xlMTYo MSksDQorCQkJLmlzX3Rsdl9hcHBlbmQgPSAxLA0KKwkJfSwNCisJCS50bHYgPSB7DQorCQkJLnRh ZyA9IGNwdV90b19sZTE2KERFVl9JTkZPX0FDVElWRSksDQorCQkJLmxlbiA9IGNwdV90b19sZTE2 KHNpemVvZihzdHJ1Y3QgcmVxX3RsdikpLA0KKwkJCS5hY3RpdmUgPSBlbmFibGUsDQorCQkJLmRi ZGNfaWR4ID0gbXZpZi0+YmFuZF9pZHgsDQorCQl9LA0KKwl9Ow0KKw0KKwltZW1jcHkoZGF0YS50 bHYub21hY19hZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vf c2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfREVWX0lORk9fVVBEQVRFLA0KKwkJCQkg ICAmZGF0YSwgc2l6ZW9mKGRhdGEpLCB0cnVlKTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5 MTVfbWN1X2JlYWNvbl9jc2Eoc3RydWN0IHNrX2J1ZmYgKnJza2IsIHN0cnVjdCBza19idWZmICpz a2IsDQorCQkgICAgICBzdHJ1Y3QgYnNzX2luZm9fYmNuICpiY24sDQorCQkgICAgICBzdHJ1Y3Qg aWVlZTgwMjExX211dGFibGVfb2Zmc2V0cyAqb2ZmcykNCit7DQorCWlmIChvZmZzLT5jc2FfY291 bnRlcl9vZmZzWzBdKSB7DQorCQlzdHJ1Y3QgdGx2ICp0bHY7DQorCQlzdHJ1Y3QgYnNzX2luZm9f YmNuX2NzYSAqY3NhOw0KKw0KKwkJdGx2ID0gbXQ3OTE1X21jdV9hZGRfbmVzdGVkX3N1YnRsdihy c2tiLCBCU1NfSU5GT19CQ05fQ1NBLA0KKwkJCQkJCSAgIHNpemVvZigqY3NhKSwgJmJjbi0+c3Vi X250bHYsDQorCQkJCQkJICAgJmJjbi0+bGVuKTsNCisJCWNzYSA9IChzdHJ1Y3QgYnNzX2luZm9f YmNuX2NzYSAqKXRsdjsNCisJCWNzYS0+Y250ID0gc2tiLT5kYXRhW29mZnMtPmNzYV9jb3VudGVy X29mZnNbMF1dOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9iZWFjb25f Y29udChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqcnNrYiwNCisJCSAg ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnNzX2luZm9fYmNuICpiY24sDQorCQkg ICAgICAgc3RydWN0IGllZWU4MDIxMV9tdXRhYmxlX29mZnNldHMgKm9mZnMpDQorew0KKwlzdHJ1 Y3QgbXQ3Nl93Y2lkICp3Y2lkID0gJmRldi0+bXQ3Ni5nbG9iYWxfd2NpZDsNCisJc3RydWN0IGJz c19pbmZvX2Jjbl9jb250ICpjb250Ow0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorCXU4ICpidWY7DQor CWludCBsZW4gPSBzaXplb2YoKmNvbnQpICsgTVRfVFhEX1NJWkUgKyBza2ItPmxlbjsNCisNCisJ dGx2ID0gbXQ3OTE1X21jdV9hZGRfbmVzdGVkX3N1YnRsdihyc2tiLCBCU1NfSU5GT19CQ05fQ09O VEVOVCwNCisJCQkJCSAgIGxlbiwgJmJjbi0+c3ViX250bHYsICZiY24tPmxlbik7DQorDQorCWNv bnQgPSAoc3RydWN0IGJzc19pbmZvX2Jjbl9jb250ICopdGx2Ow0KKwljb250LT5wa3RfbGVuID0g Y3B1X3RvX2xlMTYoTVRfVFhEX1NJWkUgKyBza2ItPmxlbik7DQorCWNvbnQtPnRpbV9vZnMgPSBj cHVfdG9fbGUxNihvZmZzLT50aW1fb2Zmc2V0KTsNCisNCisJaWYgKG9mZnMtPmNzYV9jb3VudGVy X29mZnNbMF0pDQorCQljb250LT5jc2Ffb2ZzID0gY3B1X3RvX2xlMTYob2Zmcy0+Y3NhX2NvdW50 ZXJfb2Zmc1swXSAtIDQpOw0KKw0KKwlidWYgPSAodTggKil0bHYgKyBzaXplb2YoKmNvbnQpOw0K KwltdDc5MTVfbWFjX3dyaXRlX3R4d2koZGV2LCAoX19sZTMyICopYnVmLCBza2IsIHdjaWQsIE5V TEwsDQorCQkJICAgICAgdHJ1ZSk7DQorCW1lbWNweShidWYgKyBNVF9UWERfU0laRSwgc2tiLT5k YXRhLCBza2ItPmxlbik7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2FkZF9iZWFjb24oc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsDQorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBpbnQg ZW4pDQorew0KKyNkZWZpbmUgTUFYX0JFQUNPTl9TSVpFIDUxMg0KKwlzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBt dDc5MTVfaHdfcGh5KGh3KTsNCisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSAoc3RydWN0IG10 NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX211dGFibGVfb2Zm c2V0cyBvZmZzOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87DQorCXN0cnVjdCBz a19idWZmICpza2IsICpyc2tiOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorCXN0cnVjdCBic3NfaW5m b19iY24gKmJjbjsNCisJaW50IGxlbiA9IE1UNzkxNV9CRUFDT05fVVBEQVRFX1NJWkUgKyBNQVhf QkVBQ09OX1NJWkU7DQorDQorCXJza2IgPSBtdDc5MTVfbWN1X2FsbG9jX3N0YV9yZXEoZGV2LCBt dmlmLCBOVUxMLCBsZW4pOw0KKwlpZiAoSVNfRVJSKHJza2IpKQ0KKwkJcmV0dXJuIFBUUl9FUlIo cnNrYik7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihyc2tiLCBCU1NfSU5GT19PRkZM T0FELCBzaXplb2YoKmJjbikpOw0KKwliY24gPSAoc3RydWN0IGJzc19pbmZvX2JjbiAqKXRsdjsN CisJYmNuLT5lbmFibGUgPSBlbjsNCisNCisJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGVt cGxhdGUoaHcsIHZpZiwgJm9mZnMpOw0KKwlpZiAoIXNrYikNCisJCXJldHVybiAtRUlOVkFMOw0K Kw0KKwlpZiAoc2tiLT5sZW4gPiBNQVhfQkVBQ09OX1NJWkUgLSBNVF9UWERfU0laRSkgew0KKwkJ ZGV2X2VycihkZXYtPm10NzYuZGV2LCAiQmNuIHNpemUgbGltaXQgZXhjZWVkXG4iKTsNCisJCWRl dl9rZnJlZV9za2Ioc2tiKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCWlmIChtdmlm LT5iYW5kX2lkeCkgew0KKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsNCisJCWluZm8t Pmh3X3F1ZXVlIHw9IE1UX1RYX0hXX1FVRVVFX0VYVF9QSFk7DQorCX0NCisNCisJLyogVE9ETzog c3VidGFnIC0gYnNzIGNvbG9yIGNvdW50ICYgMTF2IE1CU1NJRCAqLw0KKwltdDc5MTVfbWN1X2Jl YWNvbl9jc2EocnNrYiwgc2tiLCBiY24sICZvZmZzKTsNCisJbXQ3OTE1X21jdV9iZWFjb25fY29u dChkZXYsIHJza2IsIHNrYiwgYmNuLCAmb2Zmcyk7DQorCWRldl9rZnJlZV9za2Ioc2tiKTsNCisN CisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2tiX3NlbmRfbXNnKCZwaHktPmRldi0+bXQ3NiwgcnNrYiwN CisJCQkJICAgICAgIE1DVV9FWFRfQ01EX0JTU19JTkZPX1VQREFURSwgdHJ1ZSk7DQorfQ0KKw0K K3N0YXRpYyBpbnQgbXQ3OTE1X21jdV9zZW5kX2Zpcm13YXJlKHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYsIGNvbnN0IHZvaWQgKmRhdGEsDQorCQkJCSAgICBpbnQgbGVuKQ0KK3sNCisJaW50IHJldCA9 IDAsIGN1cl9sZW47DQorDQorCXdoaWxlIChsZW4gPiAwKSB7DQorCQljdXJfbGVuID0gbWluX3Qo aW50LCA0MDk2IC0gc2l6ZW9mKHN0cnVjdCBtdDc5MTVfbWN1X3R4ZCksDQorCQkJCWxlbik7DQor DQorCQlyZXQgPSBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIC1NQ1VfQ01EX0ZXX1ND QVRURVIsDQorCQkJCQkgIGRhdGEsIGN1cl9sZW4sIGZhbHNlKTsNCisJCWlmIChyZXQpDQorCQkJ YnJlYWs7DQorDQorCQlkYXRhICs9IGN1cl9sZW47DQorCQlsZW4gLT0gY3VyX2xlbjsNCisJCW10 NzZfcXVldWVfdHhfY2xlYW51cChkZXYsIE1UX1RYUV9GV0RMLCBmYWxzZSk7DQorCX0NCisNCisJ cmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBtdDc5MTVfbWN1X3N0YXJ0X2Zpcm13YXJl KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBhZGRyLA0KKwkJCQkgICAgIHUzMiBvcHRpb24p DQorew0KKwlzdHJ1Y3Qgew0KKwkJX19sZTMyIG9wdGlvbjsNCisJCV9fbGUzMiBhZGRyOw0KKwl9 IHJlcSA9IHsNCisJCS5vcHRpb24gPSBjcHVfdG9fbGUzMihvcHRpb24pLA0KKwkJLmFkZHIgPSBj cHVfdG9fbGUzMihhZGRyKSwNCisJfTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2VuZF9tc2co JmRldi0+bXQ3NiwgLU1DVV9DTURfRldfU1RBUlRfUkVRLA0KKwkJCQkgICAmcmVxLCBzaXplb2Yo cmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1X21jdV9yZXN0YXJ0KHN0cnVj dCBtdDc2X2RldiAqZGV2KQ0KK3sNCisJc3RydWN0IHsNCisJCXU4IHBvd2VyX21vZGU7DQorCQl1 OCByc3ZbM107DQorCX0gcmVxID0gew0KKwkJLnBvd2VyX21vZGUgPSAxLA0KKwl9Ow0KKw0KKwly ZXR1cm4gX19tdDc2X21jdV9zZW5kX21zZyhkZXYsIC1NQ1VfQ01EX05JQ19QT1dFUl9DVFJMLCAm cmVxLA0KKwkJCQkgICBzaXplb2YocmVxKSwgZmFsc2UpOw0KK30NCisNCitzdGF0aWMgaW50IG10 NzkxNV9tY3VfcGF0Y2hfc2VtX2N0cmwoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgYm9vbCBnZXQp DQorew0KKwlzdHJ1Y3Qgew0KKwkJX19sZTMyIG9wOw0KKwl9IHJlcSA9IHsNCisJCS5vcCA9IGNw dV90b19sZTMyKGdldCA/IFBBVENIX1NFTV9HRVQgOiBQQVRDSF9TRU1fUkVMRUFTRSksDQorCX07 DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIC1NQ1VfQ01EX1BB VENIX1NFTV9DT05UUk9MLA0KKwkJCQkgICAmcmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgbXQ3OTE1X21jdV9zdGFydF9wYXRjaChzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2KQ0KK3sNCisJc3RydWN0IHsNCisJCXU4IGNoZWNrX2NyYzsNCisJCXU4IHJlc2VydmVkWzNd Ow0KKwl9IHJlcSA9IHsNCisJCS5jaGVja19jcmMgPSAwLA0KKwl9Ow0KKw0KKwlyZXR1cm4gX19t dDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCAtTUNVX0NNRF9QQVRDSF9GSU5JU0hfUkVRLA0K KwkJCQkgICAmcmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3 OTE1X2RyaXZlcl9vd24oc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXUzMiByZWcgPSBt dDc5MTVfcmVnX21hcF9sMShkZXYsIE1UX1RPUF9MUENSX0hPU1RfQkFORDApOw0KKw0KKwltdDc2 X3dyKGRldiwgcmVnLCBNVF9UT1BfTFBDUl9IT1NUX0RSVl9PV04pOw0KKwlpZiAoIW10NzZfcG9s bF9tc2VjKGRldiwgcmVnLCBNVF9UT1BfTFBDUl9IT1NUX0ZXX09XTiwNCisJCQkgICAgMCwgNTAw KSkgew0KKwkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiVGltZW91dCBmb3IgZHJpdmVyIG93blxu Iik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGludCBtdDc5MTVfbWN1X2luaXRfZG93bmxvYWQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMy IGFkZHIsDQorCQkJCSAgICB1MzIgbGVuLCB1MzIgbW9kZSkNCit7DQorCXN0cnVjdCB7DQorCQlf X2xlMzIgYWRkcjsNCisJCV9fbGUzMiBsZW47DQorCQlfX2xlMzIgbW9kZTsNCisJfSByZXEgPSB7 DQorCQkuYWRkciA9IGNwdV90b19sZTMyKGFkZHIpLA0KKwkJLmxlbiA9IGNwdV90b19sZTMyKGxl biksDQorCQkubW9kZSA9IGNwdV90b19sZTMyKG1vZGUpLA0KKwl9Ow0KKwlpbnQgYXR0cjsNCisN CisJaWYgKHJlcS5hZGRyID09IE1DVV9QQVRDSF9BRERSRVNTKQ0KKwkJYXR0ciA9IC1NQ1VfQ01E X1BBVENIX1NUQVJUX1JFUTsNCisJZWxzZQ0KKwkJYXR0ciA9IC1NQ1VfQ01EX1RBUkdFVF9BRERS RVNTX0xFTl9SRVE7DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYs IGF0dHIsICZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQorc3RhdGljIGludCBtdDc5 MTVfbG9hZF9wYXRjaChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJY29uc3Qgc3RydWN0 IG10NzkxNV9wYXRjaF9oZHIgKmhkcjsNCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5V TEw7DQorCWludCBpLCByZXQsIHNlbTsNCisNCisJc2VtID0gbXQ3OTE1X21jdV9wYXRjaF9zZW1f Y3RybChkZXYsIDEpOw0KKwlzd2l0Y2ggKHNlbSkgew0KKwljYXNlIFBBVENIX0lTX0RMOg0KKwkJ cmV0dXJuIDA7DQorCWNhc2UgUEFUQ0hfTk9UX0RMX1NFTV9TVUNDRVNTOg0KKwkJYnJlYWs7DQor CWRlZmF1bHQ6DQorCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJGYWlsZWQgdG8gZ2V0IHBhdGNo IHNlbWFwaG9yZVxuIik7DQorCQlyZXR1cm4gLUVBR0FJTjsNCisJfQ0KKw0KKwlyZXQgPSByZXF1 ZXN0X2Zpcm13YXJlKCZmdywgTVQ3OTE1X1JPTV9QQVRDSCwgZGV2LT5tdDc2LmRldik7DQorCWlm IChyZXQpDQorCQlnb3RvIG91dDsNCisNCisJaWYgKCFmdyB8fCAhZnctPmRhdGEgfHwgZnctPnNp emUgPCBzaXplb2YoKmhkcikpIHsNCisJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIkludmFsaWQg ZmlybXdhcmVcbiIpOw0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWdvdG8gb3V0Ow0KKwl9DQorDQor CWhkciA9IChjb25zdCBzdHJ1Y3QgbXQ3OTE1X3BhdGNoX2hkciAqKShmdy0+ZGF0YSk7DQorDQor CWRldl9pbmZvKGRldi0+bXQ3Ni5kZXYsICJIVy9TVyBWZXJzaW9uOiAweCV4LCBCdWlsZCBUaW1l OiAlLjE2c1xuIiwNCisJCSBiZTMyX3RvX2NwdShoZHItPmh3X3N3X3ZlciksIGhkci0+YnVpbGRf ZGF0ZSk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBiZTMyX3RvX2NwdShoZHItPmRlc2Mubl9yZWdp b24pOyBpKyspIHsNCisJCXN0cnVjdCBtdDc5MTVfcGF0Y2hfc2VjICpzZWM7DQorCQljb25zdCB1 OCAqZGw7DQorCQl1MzIgbGVuLCBhZGRyOw0KKw0KKwkJc2VjID0gKHN0cnVjdCBtdDc5MTVfcGF0 Y2hfc2VjICopKGZ3LT5kYXRhICsgc2l6ZW9mKCpoZHIpICsNCisJCQkJCQkgIGkgKiBzaXplb2Yo KnNlYykpOw0KKwkJaWYgKChiZTMyX3RvX2NwdShzZWMtPnR5cGUpICYgUEFUQ0hfU0VDX1RZUEVf TUFTSykgIT0NCisJCSAgICBQQVRDSF9TRUNfVFlQRV9JTkZPKSB7DQorCQkJcmV0ID0gLUVJTlZB TDsNCisJCQlnb3RvIG91dDsNCisJCX0NCisNCisJCWFkZHIgPSBiZTMyX3RvX2NwdShzZWMtPmlu Zm8uYWRkcik7DQorCQlsZW4gPSBiZTMyX3RvX2NwdShzZWMtPmluZm8ubGVuKTsNCisJCWRsID0g ZnctPmRhdGEgKyBiZTMyX3RvX2NwdShzZWMtPm9mZnMpOw0KKw0KKwkJcmV0ID0gbXQ3OTE1X21j dV9pbml0X2Rvd25sb2FkKGRldiwgYWRkciwgbGVuLA0KKwkJCQkJICAgICAgIERMX01PREVfTkVF RF9SU1ApOw0KKwkJaWYgKHJldCkgew0KKwkJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIkRvd25s b2FkIHJlcXVlc3QgZmFpbGVkXG4iKTsNCisJCQlnb3RvIG91dDsNCisJCX0NCisNCisJCXJldCA9 IG10NzkxNV9tY3Vfc2VuZF9maXJtd2FyZShkZXYsIGRsLCBsZW4pOw0KKwkJaWYgKHJldCkgew0K KwkJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIkZhaWxlZCB0byBzZW5kIHBhdGNoXG4iKTsNCisJ CQlnb3RvIG91dDsNCisJCX0NCisJfQ0KKw0KKwlyZXQgPSBtdDc5MTVfbWN1X3N0YXJ0X3BhdGNo KGRldik7DQorCWlmIChyZXQpDQorCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJGYWlsZWQgdG8g c3RhcnQgcGF0Y2hcbiIpOw0KKw0KK291dDoNCisJc2VtID0gbXQ3OTE1X21jdV9wYXRjaF9zZW1f Y3RybChkZXYsIDApOw0KKwlzd2l0Y2ggKHNlbSkgew0KKwljYXNlIFBBVENIX1JFTF9TRU1fU1VD Q0VTUzoNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0ID0gLUVBR0FJTjsNCisJCWRldl9l cnIoZGV2LT5tdDc2LmRldiwgIkZhaWxlZCB0byByZWxlYXNlIHBhdGNoIHNlbWFwaG9yZVxuIik7 DQorCQlnb3RvIG91dDsNCisJfQ0KKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsNCisNCisJcmV0dXJu IHJldDsNCit9DQorDQorc3RhdGljIHUzMiBtdDc5MTVfbWN1X2dlbl9kbF9tb2RlKHU4IGZlYXR1 cmVfc2V0LCBib29sIGlzX3dhKQ0KK3sNCisJdTMyIHJldCA9IDA7DQorDQorCXJldCB8PSAoZmVh dHVyZV9zZXQgJiBGV19GRUFUVVJFX1NFVF9FTkNSWVBUKSA/DQorCSAgICAgICAoRExfTU9ERV9F TkNSWVBUIHwgRExfTU9ERV9SRVNFVF9TRUNfSVYpIDogMDsNCisJcmV0IHw9IEZJRUxEX1BSRVAo RExfTU9ERV9LRVlfSURYLA0KKwkJCSAgRklFTERfR0VUKEZXX0ZFQVRVUkVfU0VUX0tFWV9JRFgs IGZlYXR1cmVfc2V0KSk7DQorCXJldCB8PSBETF9NT0RFX05FRURfUlNQOw0KKwlyZXQgfD0gaXNf d2EgPyBETF9NT0RFX1dPUktJTkdfUERBX0NSNCA6IDA7DQorDQorCXJldHVybiByZXQ7DQorfQ0K Kw0KK3N0YXRpYyBpbnQNCittdDc5MTVfbWN1X3NlbmRfcmFtX2Zpcm13YXJlKHN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYsDQorCQkJICAgICBjb25zdCBzdHJ1Y3QgbXQ3OTE1X2Z3X3RyYWlsZXIgKmhk ciwNCisJCQkgICAgIGNvbnN0IHU4ICpkYXRhLCBib29sIGlzX3dhKQ0KK3sNCisJaW50IGksIG9m ZnNldCA9IDA7DQorCXUzMiBvdmVycmlkZSA9IDAsIG9wdGlvbiA9IDA7DQorDQorCWZvciAoaSA9 IDA7IGkgPCBoZHItPm5fcmVnaW9uOyBpKyspIHsNCisJCWNvbnN0IHN0cnVjdCBtdDc5MTVfZndf cmVnaW9uICpyZWdpb247DQorCQlpbnQgZXJyOw0KKwkJdTMyIGxlbiwgYWRkciwgbW9kZTsNCisN CisJCXJlZ2lvbiA9IChjb25zdCBzdHJ1Y3QgbXQ3OTE1X2Z3X3JlZ2lvbiAqKSgoY29uc3QgdTgg KiloZHIgLQ0KKwkJCSAoaGRyLT5uX3JlZ2lvbiAtIGkpICogc2l6ZW9mKCpyZWdpb24pKTsNCisJ CW1vZGUgPSBtdDc5MTVfbWN1X2dlbl9kbF9tb2RlKHJlZ2lvbi0+ZmVhdHVyZV9zZXQsIGlzX3dh KTsNCisJCWxlbiA9IGxlMzJfdG9fY3B1KHJlZ2lvbi0+bGVuKTsNCisJCWFkZHIgPSBsZTMyX3Rv X2NwdShyZWdpb24tPmFkZHIpOw0KKw0KKwkJaWYgKHJlZ2lvbi0+ZmVhdHVyZV9zZXQgJiBGV19G RUFUVVJFX09WRVJSSURFX0FERFIpDQorCQkJb3ZlcnJpZGUgPSBhZGRyOw0KKw0KKwkJZXJyID0g bXQ3OTE1X21jdV9pbml0X2Rvd25sb2FkKGRldiwgYWRkciwgbGVuLCBtb2RlKTsNCisJCWlmIChl cnIpIHsNCisJCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJEb3dubG9hZCByZXF1ZXN0IGZhaWxl ZFxuIik7DQorCQkJcmV0dXJuIGVycjsNCisJCX0NCisNCisJCWVyciA9IG10NzkxNV9tY3Vfc2Vu ZF9maXJtd2FyZShkZXYsIGRhdGEgKyBvZmZzZXQsIGxlbik7DQorCQlpZiAoZXJyKSB7DQorCQkJ ZGV2X2VycihkZXYtPm10NzYuZGV2LCAiRmFpbGVkIHRvIHNlbmQgZmlybXdhcmUuXG4iKTsNCisJ CQlyZXR1cm4gZXJyOw0KKwkJfQ0KKw0KKwkJb2Zmc2V0ICs9IGxlbjsNCisJfQ0KKw0KKwlpZiAo b3ZlcnJpZGUpDQorCQlvcHRpb24gfD0gRldfU1RBUlRfT1ZFUlJJREU7DQorDQorCWlmIChpc193 YSkNCisJCW9wdGlvbiB8PSBGV19TVEFSVF9XT1JLSU5HX1BEQV9DUjQ7DQorDQorCXJldHVybiBt dDc5MTVfbWN1X3N0YXJ0X2Zpcm13YXJlKGRldiwgb3ZlcnJpZGUsIG9wdGlvbik7DQorfQ0KKw0K K3N0YXRpYyBpbnQgbXQ3OTE1X2xvYWRfcmFtKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0K Kwljb25zdCBzdHJ1Y3QgbXQ3OTE1X2Z3X3RyYWlsZXIgKmhkcjsNCisJY29uc3Qgc3RydWN0IGZp cm13YXJlICpmdzsNCisJaW50IHJldDsNCisNCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncs IE1UNzkxNV9GSVJNV0FSRV9XTSwgZGV2LT5tdDc2LmRldik7DQorCWlmIChyZXQpDQorCQlyZXR1 cm4gcmV0Ow0KKw0KKwlpZiAoIWZ3IHx8ICFmdy0+ZGF0YSB8fCBmdy0+c2l6ZSA8IHNpemVvZigq aGRyKSkgew0KKwkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiSW52YWxpZCBmaXJtd2FyZVxuIik7 DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJZ290byBvdXQ7DQorCX0NCisNCisJaGRyID0gKGNvbnN0 IHN0cnVjdCBtdDc5MTVfZndfdHJhaWxlciAqKShmdy0+ZGF0YSArIGZ3LT5zaXplIC0NCisJCQkJ CXNpemVvZigqaGRyKSk7DQorDQorCWRldl9pbmZvKGRldi0+bXQ3Ni5kZXYsICJXTSBGaXJtd2Fy ZSBWZXJzaW9uOiAlLjEwcywgQnVpbGQgVGltZTogJS4xNXNcbiIsDQorCQkgaGRyLT5md192ZXIs IGhkci0+YnVpbGRfZGF0ZSk7DQorDQorCXJldCA9IG10NzkxNV9tY3Vfc2VuZF9yYW1fZmlybXdh cmUoZGV2LCBoZHIsIGZ3LT5kYXRhLCBmYWxzZSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIo ZGV2LT5tdDc2LmRldiwgIkZhaWxlZCB0byBzdGFydCBXTSBmaXJtd2FyZVxuIik7DQorCQlnb3Rv IG91dDsNCisJfQ0KKw0KKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsNCisNCisJcmV0ID0gcmVxdWVz dF9maXJtd2FyZSgmZncsIE1UNzkxNV9GSVJNV0FSRV9XQSwgZGV2LT5tdDc2LmRldik7DQorCWlm IChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlpZiAoIWZ3IHx8ICFmdy0+ZGF0YSB8fCBmdy0+ c2l6ZSA8IHNpemVvZigqaGRyKSkgew0KKwkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiSW52YWxp ZCBmaXJtd2FyZVxuIik7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJZ290byBvdXQ7DQorCX0NCisN CisJaGRyID0gKGNvbnN0IHN0cnVjdCBtdDc5MTVfZndfdHJhaWxlciAqKShmdy0+ZGF0YSArIGZ3 LT5zaXplIC0NCisJCQkJCXNpemVvZigqaGRyKSk7DQorDQorCWRldl9pbmZvKGRldi0+bXQ3Ni5k ZXYsICJXQSBGaXJtd2FyZSBWZXJzaW9uOiAlLjEwcywgQnVpbGQgVGltZTogJS4xNXNcbiIsDQor CQkgaGRyLT5md192ZXIsIGhkci0+YnVpbGRfZGF0ZSk7DQorDQorCXJldCA9IG10NzkxNV9tY3Vf c2VuZF9yYW1fZmlybXdhcmUoZGV2LCBoZHIsIGZ3LT5kYXRhLCB0cnVlKTsNCisJaWYgKHJldCkg ew0KKwkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiRmFpbGVkIHRvIHN0YXJ0IFdBIGZpcm13YXJl XG4iKTsNCisJCWdvdG8gb3V0Ow0KKwl9DQorDQorCXNucHJpbnRmKGRldi0+bXQ3Ni5ody0+d2lw aHktPmZ3X3ZlcnNpb24sDQorCQkgc2l6ZW9mKGRldi0+bXQ3Ni5ody0+d2lwaHktPmZ3X3ZlcnNp b24pLA0KKwkJICIlLjEwcy0lLjE1cyIsIGhkci0+ZndfdmVyLCBoZHItPmJ1aWxkX2RhdGUpOw0K Kw0KK291dDoNCisJcmVsZWFzZV9maXJtd2FyZShmdyk7DQorDQorCXJldHVybiByZXQ7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgbXQ3OTE1X2xvYWRfZmlybXdhcmUoc3RydWN0IG10NzkxNV9kZXYgKmRl dikNCit7DQorCWludCByZXQ7DQorCXUzMiB2YWwsIHJlZyA9IG10NzkxNV9yZWdfbWFwX2wxKGRl diwgTVRfVE9QX01JU0MpOw0KKw0KKwl2YWwgPSBGSUVMRF9QUkVQKE1UX1RPUF9NSVNDX0ZXX1NU QVRFLCBGV19TVEFURV9GV19ET1dOTE9BRCk7DQorDQorCWlmICghbXQ3Nl9wb2xsX21zZWMoZGV2 LCByZWcsIE1UX1RPUF9NSVNDX0ZXX1NUQVRFLCB2YWwsIDEwMDApKSB7DQorCQkvKiByZXN0YXJ0 IGZpcm13YXJlIG9uY2UgKi8NCisJCV9fbXQ3Nl9tY3VfcmVzdGFydCgmZGV2LT5tdDc2KTsNCisJ CWlmICghbXQ3Nl9wb2xsX21zZWMoZGV2LCByZWcsIE1UX1RPUF9NSVNDX0ZXX1NUQVRFLA0KKwkJ CQkgICAgdmFsLCAxMDAwKSkgew0KKwkJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwNCisJCQkJIkZp cm13YXJlIGlzIG5vdCByZWFkeSBmb3IgZG93bmxvYWRcbiIpOw0KKwkJCXJldHVybiAtRUlPOw0K KwkJfQ0KKwl9DQorDQorCXJldCA9IG10NzkxNV9sb2FkX3BhdGNoKGRldik7DQorCWlmIChyZXQp DQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBtdDc5MTVfbG9hZF9yYW0oZGV2KTsNCisJaWYg KHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCWlmICghbXQ3Nl9wb2xsX21zZWMoZGV2LCByZWcs IE1UX1RPUF9NSVNDX0ZXX1NUQVRFLA0KKwkJCSAgICBGSUVMRF9QUkVQKE1UX1RPUF9NSVNDX0ZX X1NUQVRFLA0KKwkJCQkgICAgICAgRldfU1RBVEVfV0FDUFVfUkRZKSwgMTAwMCkpIHsNCisJCWRl dl9lcnIoZGV2LT5tdDc2LmRldiwgIlRpbWVvdXQgZm9yIGluaXRpYWxpemluZyBmaXJtd2FyZVxu Iik7DQorCQlyZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwltdDc2X3F1ZXVlX3R4X2NsZWFudXAoZGV2 LCBNVF9UWFFfRldETCwgZmFsc2UpOw0KKw0KKwlkZXZfZGJnKGRldi0+bXQ3Ni5kZXYsICJGaXJt d2FyZSBpbml0IGRvbmVcbiIpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG10NzkxNV9t Y3VfaW5pdChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJc3RhdGljIGNvbnN0IHN0cnVj dCBtdDc2X21jdV9vcHMgbXQ3OTE1X21jdV9vcHMgPSB7DQorCQkuaGVhZHJvb20gPSBzaXplb2Yo c3RydWN0IG10NzkxNV9tY3VfdHhkKSwNCisJCS5tY3Vfc2tiX3NlbmRfbXNnID0gbXQ3OTE1X21j dV9zZW5kX21lc3NhZ2UsDQorCQkubWN1X3NlbmRfbXNnID0gbXQ3OTE1X21jdV9tc2dfc2VuZCwN CisJCS5tY3VfcmVzdGFydCA9IG10NzkxNV9tY3VfcmVzdGFydCwNCisJfTsNCisJaW50IHJldDsN CisNCisJZGV2LT5tdDc2Lm1jdV9vcHMgPSAmbXQ3OTE1X21jdV9vcHMsDQorDQorCXJldCA9IG10 NzkxNV9kcml2ZXJfb3duKGRldik7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwly ZXQgPSBtdDc5MTVfbG9hZF9maXJtd2FyZShkZXYpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJl dDsNCisNCisJc2V0X2JpdChNVDc2X1NUQVRFX01DVV9SVU5OSU5HLCAmZGV2LT5tcGh5LnN0YXRl KTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X21jdV9leGl0KHN0cnVjdCBt dDc5MTVfZGV2ICpkZXYpDQorew0KKwl1MzIgcmVnID0gbXQ3OTE1X3JlZ19tYXBfbDEoZGV2LCBN VF9UT1BfTUlTQyk7DQorDQorCV9fbXQ3Nl9tY3VfcmVzdGFydCgmZGV2LT5tdDc2KTsNCisJaWYg KCFtdDc2X3BvbGxfbXNlYyhkZXYsIHJlZywgTVRfVE9QX01JU0NfRldfU1RBVEUsDQorCQkJICAg IEZJRUxEX1BSRVAoTVRfVE9QX01JU0NfRldfU1RBVEUsDQorCQkJCSAgICAgICBGV19TVEFURV9G V19ET1dOTE9BRCksIDEwMDApKSB7DQorCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJGYWlsZWQg dG8gZXhpdCBtY3VcbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXJlZyA9IG10NzkxNV9yZWdf bWFwX2wxKGRldiwgTVRfVE9QX0xQQ1JfSE9TVF9CQU5EMCk7DQorCW10NzZfd3IoZGV2LCByZWcs IE1UX1RPUF9MUENSX0hPU1RfRldfT1dOKTsNCisJc2tiX3F1ZXVlX3B1cmdlKCZkZXYtPm10NzYu bWN1LnJlc19xKTsNCit9DQorDQoraW50IG10NzkxNV9tY3Vfc2V0X21hYyhzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2LCBpbnQgYmFuZCwNCisJCSAgICAgICBib29sIGVuYWJsZSwgYm9vbCBoZHJfdHJh bnMpDQorew0KKwlzdHJ1Y3Qgew0KKwkJdTggb3BlcmF0aW9uOw0KKwkJdTggZW5hYmxlOw0KKwkJ dTggY2hlY2tfYnNzaWQ7DQorCQl1OCBpbnNlcnRfdmxhbjsNCisJCXU4IHJlbW92ZV92bGFuOw0K KwkJdTggdGlkOw0KKwkJdTggbW9kZTsNCisJCXU4IHJzdjsNCisJfSBfX3BhY2tlZCByZXFfdHJh bnMgPSB7DQorCQkuZW5hYmxlID0gaGRyX3RyYW5zLA0KKwl9Ow0KKwlzdHJ1Y3Qgew0KKwkJdTgg ZW5hYmxlOw0KKwkJdTggYmFuZDsNCisJCXU4IHJzdlsyXTsNCisJfSBfX3BhY2tlZCByZXFfbWFj ID0gew0KKwkJLmVuYWJsZSA9IGVuYWJsZSwNCisJCS5iYW5kID0gYmFuZCwNCisJfTsNCisJaW50 IHJldDsNCisNCisJcmV0ID0gX19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhU X0NNRF9SWF9IRFJfVFJBTlMsDQorCQkJCSAgJnJlcV90cmFucywgc2l6ZW9mKHJlcV90cmFucyks IGZhbHNlKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiBfX210NzZf bWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX01BQ19JTklUX0NUUkwsDQorCQkJ CSAgICZyZXFfbWFjLCBzaXplb2YocmVxX21hYyksIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1 X21jdV9zZXRfc2NzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHU4IGJhbmQsIGJvb2wgZW5hYmxl KQ0KK3sNCisJc3RydWN0IHsNCisJCV9fbGUzMiBjbWQ7DQorCQl1OCBiYW5kOw0KKwkJdTggZW5h YmxlOw0KKwl9IF9fcGFja2VkIHJlcSA9IHsNCisJCS5jbWQgPSBjcHVfdG9fbGUzMihTQ1NfRU5B QkxFKSwNCisJCS5iYW5kID0gYmFuZCwNCisJCS5lbmFibGUgPSBlbmFibGUgKyAxLA0KKwl9Ow0K Kw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9T Q1NfQ1RSTCwgJnJlcSwNCisJCQkJICAgc2l6ZW9mKHJlcSksIGZhbHNlKTsNCit9DQorDQoraW50 IG10NzkxNV9tY3Vfc2V0X3J0c190aHJlc2goc3RydWN0IG10NzkxNV9waHkgKnBoeSwgdTMyIHZh bCkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBwaHktPmRldjsNCisJc3RydWN0IHsN CisJCXU4IHByb3RfaWR4Ow0KKwkJdTggYmFuZDsNCisJCXU4IHJzdlsyXTsNCisJCV9fbGUzMiBs ZW5fdGhyZXNoOw0KKwkJX19sZTMyIHBrdF90aHJlc2g7DQorCX0gX19wYWNrZWQgcmVxID0gew0K KwkJLnByb3RfaWR4ID0gMSwNCisJCS5iYW5kID0gcGh5ICE9ICZkZXYtPnBoeSwNCisJCS5sZW5f dGhyZXNoID0gY3B1X3RvX2xlMzIodmFsKSwNCisJCS5wa3RfdGhyZXNoID0gY3B1X3RvX2xlMzIo MHgyKSwNCisJfTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3Niwg TUNVX0VYVF9DTURfUFJPVEVDVF9DVFJMLA0KKwkJCQkgICAmcmVxLCBzaXplb2YocmVxKSwgdHJ1 ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X3NldF90eChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KK3sNCisjZGVmaW5lIFdNTV9BSUZTX1NFVAkJ QklUKDApDQorI2RlZmluZSBXTU1fQ1dfTUlOX1NFVAkJQklUKDEpDQorI2RlZmluZSBXTU1fQ1df TUFYX1NFVAkJQklUKDIpDQorI2RlZmluZSBXTU1fVFhPUF9TRVQJCUJJVCgzKQ0KKyNkZWZpbmUg V01NX1BBUkFNX1NFVAkJR0VOTUFTSygzLCAwKQ0KKyNkZWZpbmUgVFhfQ01EX01PREUJCTENCisJ c3RydWN0IGVkY2Egew0KKwkJdTggcXVldWU7DQorCQl1OCBzZXQ7DQorCQl1OCBhaWZzOw0KKwkJ dTggY3dfbWluOw0KKwkJX19sZTE2IGN3X21heDsNCisJCV9fbGUxNiB0eG9wOw0KKwl9Ow0KKwlz dHJ1Y3QgbXQ3OTE1X21jdV90eCB7DQorCQl1OCB0b3RhbDsNCisJCXU4IGFjdGlvbjsNCisJCXU4 IHZhbGlkOw0KKwkJdTggbW9kZTsNCisNCisJCXN0cnVjdCBlZGNhIGVkY2FbSUVFRTgwMjExX05V TV9BQ1NdOw0KKwl9IF9fcGFja2VkIHJlcSA9IHsNCisJCS52YWxpZCA9IHRydWUsDQorCQkubW9k ZSA9IFRYX0NNRF9NT0RFLA0KKwkJLnRvdGFsID0gSUVFRTgwMjExX05VTV9BQ1MsDQorCX07DQor CXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZf cHJpdjsNCisJaW50IGFjOw0KKw0KKwlmb3IgKGFjID0gMDsgYWMgPCBJRUVFODAyMTFfTlVNX0FD UzsgYWMrKykgew0KKwkJc3RydWN0IGVkY2EgKmUgPSAmcmVxLmVkY2FbYWNdOw0KKw0KKwkJZS0+ cXVldWUgPSBhYyArIG12aWYtPndtbV9pZHggKiBNVDc5MTVfTUFYX1dNTV9TRVRTOw0KKwkJZS0+ YWlmcyA9IG12aWYtPndtbVthY10uYWlmczsNCisJCWUtPnR4b3AgPSBjcHVfdG9fbGUxNihtdmlm LT53bW1bYWNdLnR4b3ApOw0KKw0KKwkJaWYgKG12aWYtPndtbVthY10uY3dfbWluKQ0KKwkJCWUt PmN3X21pbiA9IGZscyhtdmlmLT53bW1bYWNdLmN3X21heCk7DQorCQllbHNlDQorCQkJZS0+Y3df bWluID0gNTsNCisNCisJCWlmIChtdmlmLT53bW1bYWNdLmN3X21heCkNCisJCQllLT5jd19tYXgg PSBjcHVfdG9fbGUxNihmbHMobXZpZi0+d21tW2FjXS5jd19tYXgpKTsNCisJCWVsc2UNCisJCQll LT5jd19tYXggPSBjcHVfdG9fbGUxNigxMCk7DQorCX0NCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vf c2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfRURDQV9VUERBVEUsDQorCQkJCSAgJnJl cSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9zZXRfcG0oc3Ry dWN0IG10NzkxNV9kZXYgKmRldiwgaW50IGJhbmQsIGludCBlbnRlcikNCit7DQorI2RlZmluZSBF TlRFUl9QTV9TVEFURQkJMQ0KKyNkZWZpbmUgRVhJVF9QTV9TVEFURQkJMg0KKwlzdHJ1Y3Qgew0K KwkJdTggcG1fbnVtYmVyOw0KKwkJdTggcG1fc3RhdGU7DQorCQl1OCBic3NpZFtFVEhfQUxFTl07 DQorCQl1OCBkdGltX3BlcmlvZDsNCisJCXU4IHdsYW5faWR4X2xvOw0KKwkJX19sZTE2IGJjbl9p bnRlcnZhbDsNCisJCV9fbGUzMiBhaWQ7DQorCQlfX2xlMzIgcnhfZmlsdGVyOw0KKwkJdTggYmFu ZF9pZHg7DQorCQl1OCB3bGFuX2lkeF9oaTsNCisJCXU4IHJzdlsyXTsNCisJCV9fbGUzMiBmZWF0 dXJlOw0KKwkJdTggb21hY19pZHg7DQorCQl1OCB3bW1faWR4Ow0KKwkJdTggYmNuX2xvc3NfY250 Ow0KKwkJdTggYmNuX3NwX2R1cmF0aW9uOw0KKwl9IF9fcGFja2VkIHJlcSA9IHsNCisJCS5wbV9u dW1iZXIgPSA1LA0KKwkJLnBtX3N0YXRlID0gKGVudGVyKSA/IEVOVEVSX1BNX1NUQVRFIDogRVhJ VF9QTV9TVEFURSwNCisJCS5iYW5kX2lkeCA9IGJhbmQsDQorCX07DQorDQorCXJldHVybiBfX210 NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX1BNX1NUQVRFX0NUUkwsDQor CQkJCSAgICZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQoraW50IG10NzkxNV9tY3Vf cmRkX2NtZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJICAgICAgIGVudW0gbXQ3OTE1X3Jk ZF9jbWQgY21kLCB1OCBpbmRleCwNCisJCSAgICAgICB1OCByeF9zZWwsIHU4IHZhbCkNCit7DQor CXN0cnVjdCB7DQorCQl1OCBjdHJsOw0KKwkJdTggcmRkX2lkeDsNCisJCXU4IHJkZF9yeF9zZWw7 DQorCQl1OCB2YWw7DQorCQl1OCByc3ZbNF07DQorCX0gX19wYWNrZWQgcmVxID0gew0KKwkJLmN0 cmwgPSBjbWQsDQorCQkucmRkX2lkeCA9IGluZGV4LA0KKwkJLnJkZF9yeF9zZWwgPSByeF9zZWws DQorCQkudmFsID0gdmFsLA0KKwl9Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5kX21zZygm ZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9TRVRfUkREX0NUUkwsDQorCQkJCSAgICZyZXEsIHNpemVv ZihyZXEpLCB0cnVlKTsNCit9DQorDQoraW50IG10NzkxNV9tY3Vfc2V0X2ZjYzVfbHBuKHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIGludCB2YWwpDQorew0KKwlzdHJ1Y3Qgew0KKwkJdTMyIHRhZzsN CisJCXUxNiBtaW5fbHBuOw0KKwkJdTggcnN2WzJdOw0KKwl9IF9fcGFja2VkIHJlcSA9IHsNCisJ CS50YWcgPSAweDEsDQorCQkubWluX2xwbiA9IHZhbCwNCisJfTsNCisNCisJcmV0dXJuIF9fbXQ3 Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfU0VUX1JERF9USCwNCisJCQkJ ICAgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9zZXRf cHVsc2VfdGgoc3RydWN0IG10NzkxNV9kZXYgKmRldiwNCisJCQkgICAgY29uc3Qgc3RydWN0IG10 NzkxNV9kZnNfcHVsc2UgKnB1bHNlKQ0KK3sNCisJc3RydWN0IHsNCisJCXUzMiB0YWc7DQorCQlz dHJ1Y3QgbXQ3OTE1X2Rmc19wdWxzZSBwdWxzZTsNCisJfSBfX3BhY2tlZCByZXEgPSB7DQorCQku dGFnID0gMHgzLA0KKwl9Ow0KKw0KKwltZW1jcHkoJnJlcS5wdWxzZSwgcHVsc2UsIHNpemVvZigq cHVsc2UpKTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgTUNV X0VYVF9DTURfU0VUX1JERF9USCwNCisJCQkJICAgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUpOw0K K30NCisNCitpbnQgbXQ3OTE1X21jdV9zZXRfcmFkYXJfdGgoc3RydWN0IG10NzkxNV9kZXYgKmRl diwgaW50IGluZGV4LA0KKwkJCSAgICBjb25zdCBzdHJ1Y3QgbXQ3OTE1X2Rmc19wYXR0ZXJuICpw YXR0ZXJuKQ0KK3sNCisJc3RydWN0IHsNCisJCXUzMiB0YWc7DQorCQl1MTYgcmFkYXJfdHlwZTsN CisJCXN0cnVjdCBtdDc5MTVfZGZzX3BhdHRlcm4gcGF0dGVybjsNCisJfSBfX3BhY2tlZCByZXEg PSB7DQorCQkudGFnID0gMHgyLA0KKwkJLnJhZGFyX3R5cGUgPSBpbmRleCwNCisJfTsNCisNCisJ bWVtY3B5KCZyZXEucGF0dGVybiwgcGF0dGVybiwgc2l6ZW9mKCpwYXR0ZXJuKSk7DQorDQorCXJl dHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX1NFVF9SRERf VEgsDQorCQkJCSAgICZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQoraW50IG10Nzkx NV9tY3Vfc2V0X2NoYW5faW5mbyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LCBpbnQgY21kKQ0KK3sN CisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IHBoeS0+ZGV2Ow0KKwlzdHJ1Y3QgY2ZnODAyMTFf Y2hhbl9kZWYgKmNoYW5kZWYgPSAmcGh5LT5tdDc2LT5jaGFuZGVmOw0KKwlpbnQgZnJlcTEgPSBj aGFuZGVmLT5jZW50ZXJfZnJlcTE7DQorCXN0cnVjdCB7DQorCQl1OCBjb250cm9sX2NoOw0KKwkJ dTggY2VudGVyX2NoOw0KKwkJdTggYnc7DQorCQl1OCB0eF9zdHJlYW1zX251bTsNCisJCXU4IHJ4 X3N0cmVhbXM7CS8qIG1hc2sgb3IgbnVtICovDQorCQl1OCBzd2l0Y2hfcmVhc29uOw0KKwkJdTgg YmFuZF9pZHg7DQorCQl1OCBjZW50ZXJfY2gyOwkvKiBmb3IgODArODAgb25seSAqLw0KKwkJX19s ZTE2IGNhY19jYXNlOw0KKwkJdTggY2hhbm5lbF9iYW5kOw0KKwkJdTggcnN2MDsNCisJCV9fbGUz MiBvdXRiYW5kX2ZyZXE7DQorCQl1OCB0eHBvd2VyX2Ryb3A7DQorCQl1OCBhcF9idzsNCisJCXU4 IGFwX2NlbnRlcl9jaDsNCisJCXU4IHJzdjFbNTddOw0KKwl9IF9fcGFja2VkIHJlcSA9IHsNCisJ CS5jb250cm9sX2NoID0gY2hhbmRlZi0+Y2hhbi0+aHdfdmFsdWUsDQorCQkuY2VudGVyX2NoID0g aWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGZyZXExKSwNCisJCS5idyA9IG10NzkxNV9t Y3VfY2hhbl9idyhjaGFuZGVmKSwNCisJCS50eF9zdHJlYW1zX251bSA9IGh3ZWlnaHQ4KHBoeS0+ bXQ3Ni0+YW50ZW5uYV9tYXNrKSwNCisJCS5yeF9zdHJlYW1zID0gcGh5LT5jaGFpbm1hc2ssDQor CQkuYmFuZF9pZHggPSBwaHkgIT0gJmRldi0+cGh5LA0KKwkJLmNoYW5uZWxfYmFuZCA9IGNoYW5k ZWYtPmNoYW4tPmJhbmQsDQorCX07DQorDQorCWlmICgoY2hhbmRlZi0+Y2hhbi0+ZmxhZ3MgJiBJ RUVFODAyMTFfQ0hBTl9SQURBUikgJiYNCisJICAgIGNoYW5kZWYtPmNoYW4tPmRmc19zdGF0ZSAh PSBOTDgwMjExX0RGU19BVkFJTEFCTEUpDQorCQlyZXEuc3dpdGNoX3JlYXNvbiA9IENIX1NXSVRD SF9ERlM7DQorCWVsc2UNCisJCXJlcS5zd2l0Y2hfcmVhc29uID0gQ0hfU1dJVENIX05PUk1BTDsN CisNCisJaWYgKGNtZCA9PSBNQ1VfRVhUX0NNRF9DSEFOTkVMX1NXSVRDSCkNCisJCXJlcS5yeF9z dHJlYW1zID0gaHdlaWdodDgocmVxLnJ4X3N0cmVhbXMpOw0KKw0KKwlpZiAoY2hhbmRlZi0+d2lk dGggPT0gTkw4MDIxMV9DSEFOX1dJRFRIXzgwUDgwKSB7DQorCQlpbnQgZnJlcTIgPSBjaGFuZGVm LT5jZW50ZXJfZnJlcTI7DQorDQorCQlyZXEuY2VudGVyX2NoMiA9IGllZWU4MDIxMV9mcmVxdWVu Y3lfdG9fY2hhbm5lbChmcmVxMik7DQorCX0NCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2VuZF9t c2coJmRldi0+bXQ3NiwgY21kLCAmcmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK2lu dCBtdDc5MTVfbWN1X3NldF9lZXByb20oc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXN0 cnVjdCByZXFfaGRyIHsNCisJCXU4IGJ1ZmZlcl9tb2RlOw0KKwkJdTggZm9ybWF0Ow0KKwkJX19s ZTE2IGxlbjsNCisJfSBfX3BhY2tlZCByZXEgPSB7DQorCQkuYnVmZmVyX21vZGUgPSBFRV9NT0RF X0VGVVNFLA0KKwkJLmZvcm1hdCA9IEVFX0ZPUk1BVF9XSE9MRSwNCisJfTsNCisNCisJcmV0dXJu IF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfRUZVU0VfQlVGRkVS X01PREUsDQorCQkJCSAgICZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQoraW50IG10 NzkxNV9tY3VfZ2V0X2VlcHJvbShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgb2Zmc2V0KQ0K K3sNCisJc3RydWN0IG10NzkxNV9tY3VfZWVwcm9tX2luZm8gcmVxID0gew0KKwkJLmFkZHIgPSBj cHVfdG9fbGUzMihyb3VuZF9kb3duKG9mZnNldCwgMTYpKSwNCisJfTsNCisNCisJcmV0dXJuIF9f bXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfRUZVU0VfQUNDRVNTLCAm cmVxLA0KKwkJCQkgICBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1 X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgaW5kZXgpDQorew0K KwlzdHJ1Y3Qgew0KKwkJdTggY3RybF9pZDsNCisJCXU4IGFjdGlvbjsNCisJCXU4IGJhbmQ7DQor CQl1OCByc3ZbNV07DQorCX0gcmVxID0gew0KKwkJLmN0cmxfaWQgPSBUSEVSTUFMX1NFTlNPUl9U RU1QX1FVRVJZLA0KKwkJLmFjdGlvbiA9IGluZGV4LA0KKwl9Ow0KKw0KKwlyZXR1cm4gX19tdDc2 X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9USEVSTUFMX0NUUkwsICZyZXEs DQorCQkJCSAgIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQoraW50IG10NzkxNV9tY3VfZ2V0 X3JhdGVfaW5mbyhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgY21kLCB1MTYgd2xhbl9pZHgp DQorew0KKwlzdHJ1Y3Qgew0KKwkJX19sZTMyIGNtZDsNCisJCXUxNiB3bGFuX2lkeDsNCisJCXUx NiBydV9pZHg7DQorCQl1MTYgZGlyZWN0aW9uOw0KKwkJdTE2IGR1bXBfZ3JvdXA7DQorCX0gcmVx ID0gew0KKwkJLmNtZCA9IGNwdV90b19sZTMyKGNtZCksDQorCQkud2xhbl9pZHggPSB3bGFuX2lk eCwNCisJCS5kdW1wX2dyb3VwID0gMSwNCisJfTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2Vu ZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfUkFURV9DVFJMLCAmcmVxLA0KKwkJCQkgICBz aXplb2YocmVxKSwgZmFsc2UpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9zZXRfc2VyKHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIHU4IGFjdGlvbiwgdTggc2V0LCB1OCBiYW5kKQ0KK3sNCisJc3Ry dWN0IHsNCisJCXU4IGFjdGlvbjsNCisJCXU4IHNldDsNCisJCXU4IGJhbmQ7DQorCQl1OCByc3Y7 DQorCX0gcmVxID0gew0KKwkJLmFjdGlvbiA9IGFjdGlvbiwNCisJCS5zZXQgPSBzZXQsDQorCQku YmFuZCA9IGJhbmQsDQorCX07DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYt Pm10NzYsIE1DVV9FWFRfQ01EX1NFVF9TRVJfVFJJR0dFUiwNCisJCQkJICAgJnJlcSwgc2l6ZW9m KHJlcSksIGZhbHNlKTsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVk aWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9t dDc2L210NzkxNS9tY3UuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAw MC4uNWU0NzA4ODYxZWRlDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVz cy9tZWRpYXRlay9tdDc2L210NzkxNS9tY3UuaA0KQEAgLTAsMCArMSw4MzcgQEANCisvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDICovDQorLyogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlh VGVrIEluYy4gKi8NCisNCisjaWZuZGVmIF9fTVQ3OTE1X01DVV9IDQorI2RlZmluZSBfX01UNzkx NV9NQ1VfSA0KKw0KK3N0cnVjdCBtdDc5MTVfbWN1X3R4ZCB7DQorCV9fbGUzMiB0eGRbOF07DQor DQorCV9fbGUxNiBsZW47DQorCV9fbGUxNiBwcV9pZDsNCisNCisJdTggY2lkOw0KKwl1OCBwa3Rf dHlwZTsNCisJdTggc2V0X3F1ZXJ5OyAvKiBGVyBkb24ndCBjYXJlICovDQorCXU4IHNlcTsNCisN CisJdTggdWNfZDJiMF9yZXY7DQorCXU4IGV4dF9jaWQ7DQorCXU4IHMyZF9pbmRleDsNCisJdTgg ZXh0X2NpZF9hY2s7DQorDQorCXUzMiByZXNlcnZlZFs1XTsNCit9IF9fcGFja2VkIF9fYWxpZ25l ZCg0KTsNCisNCisvKiBldmVudCB0YWJsZSAqLw0KK2VudW0gew0KKwlNQ1VfRVZFTlRfVEFSR0VU X0FERFJFU1NfTEVOID0gMHgwMSwNCisJTUNVX0VWRU5UX0ZXX1NUQVJUID0gMHgwMSwNCisJTUNV X0VWRU5UX0dFTkVSSUMgPSAweDAxLA0KKwlNQ1VfRVZFTlRfQUNDRVNTX1JFRyA9IDB4MDIsDQor CU1DVV9FVkVOVF9NVF9QQVRDSF9TRU0gPSAweDA0LA0KKwlNQ1VfRVZFTlRfQ0hfUFJJVklMRUdF ID0gMHgxOCwNCisJTUNVX0VWRU5UX0VYVCA9IDB4ZWQsDQorCU1DVV9FVkVOVF9SRVNUQVJUX0RM ID0gMHhlZiwNCit9Ow0KKw0KKy8qIGV4dCBldmVudCB0YWJsZSAqLw0KK2VudW0gew0KKwlNQ1Vf RVhUX0VWRU5UX1BTX1NZTkMgPSAweDUsDQorCU1DVV9FWFRfRVZFTlRfVEhFUk1BTF9QUk9URUNU ID0gMHgyMiwNCisJTUNVX0VYVF9FVkVOVF9BU1NFUlRfRFVNUCA9IDB4MjMsDQorCU1DVV9FWFRf RVZFTlRfUkREX1JFUE9SVCA9IDB4M2EsDQorCU1DVV9FWFRfRVZFTlRfQ1NBX05PVElGWSA9IDB4 NGYsDQorCU1DVV9FWFRfRVZFTlRfUkFURV9SRVBPUlQgPSAweDg3LA0KK307DQorDQorc3RydWN0 IG10NzkxNV9tY3VfcnhkIHsNCisJX19sZTMyIHJ4ZFs2XTsNCisNCisJX19sZTE2IGxlbjsNCisJ X19sZTE2IHBrdF90eXBlX2lkOw0KKw0KKwl1OCBlaWQ7DQorCXU4IHNlcTsNCisJX19sZTE2IF9f cnN2Ow0KKw0KKwl1OCBleHRfZWlkOw0KKwl1OCBfX3JzdjFbMl07DQorCXU4IHMyZF9pbmRleDsN Cit9Ow0KKw0KK3N0cnVjdCBtdDc5MTVfbWN1X3JkZF9yZXBvcnQgew0KKwlzdHJ1Y3QgbXQ3OTE1 X21jdV9yeGQgcnhkOw0KKw0KKwl1OCBpZHg7DQorCXU4IGxvbmdfZGV0ZWN0ZWQ7DQorCXU4IGNv bnN0YW50X3ByZl9kZXRlY3RlZDsNCisJdTggc3RhZ2dlcmVkX3ByZl9kZXRlY3RlZDsNCisJdTgg cmFkYXJfdHlwZV9pZHg7DQorCXU4IHBlcmlvZGljX3B1bHNlX251bTsNCisJdTggbG9uZ19wdWxz ZV9udW07DQorCXU4IGh3X3B1bHNlX251bTsNCisNCisJdTggb3V0X2xwbjsNCisJdTggb3V0X3Nw bjsNCisJdTggb3V0X2NycG47DQorCXU4IG91dF9jcnB3Ow0KKwl1OCBvdXRfY3JibjsNCisJdTgg b3V0X3N0Z3BuOw0KKwl1OCBvdXRfc3RncHc7DQorDQorCXU4IHJzdjsNCisNCisJX19sZTMyIG91 dF9wcmlfY29uc3Q7DQorCV9fbGUzMiBvdXRfcHJpX3N0Z1szXTsNCisNCisJc3RydWN0IHsNCisJ CV9fbGUzMiBzdGFydDsNCisJCV9fbGUxNiBwdWxzZV93aWR0aDsNCisJCV9fbGUxNiBwdWxzZV9w b3dlcjsNCisJCXU4IG1kcmR5X2ZsYWc7DQorCQl1OCByc3ZbM107DQorCX0gbG9uZ19wdWxzZVsz Ml07DQorDQorCXN0cnVjdCB7DQorCQlfX2xlMzIgc3RhcnQ7DQorCQlfX2xlMTYgcHVsc2Vfd2lk dGg7DQorCQlfX2xlMTYgcHVsc2VfcG93ZXI7DQorCQl1OCBtZHJkeV9mbGFnOw0KKwkJdTggcnN2 WzNdOw0KKwl9IHBlcmlvZGljX3B1bHNlWzMyXTsNCisNCisJc3RydWN0IHsNCisJCV9fbGUzMiBz dGFydDsNCisJCV9fbGUxNiBwdWxzZV93aWR0aDsNCisJCV9fbGUxNiBwdWxzZV9wb3dlcjsNCisJ CXU4IHNjX3Bhc3M7DQorCQl1OCBzd19yZXNldDsNCisJCXU4IG1kcmR5X2ZsYWc7DQorCQl1OCB0 eF9hY3RpdmU7DQorCX0gaHdfcHVsc2VbMzJdOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IG10 NzkxNV9tY3VfZWVwcm9tX2luZm8gew0KKwlfX2xlMzIgYWRkcjsNCisJX19sZTMyIHZhbGlkOw0K Kwl1OCBkYXRhWzE2XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBtdDc5MTVfbWN1X3JhX2lu Zm8gew0KKwlzdHJ1Y3QgbXQ3OTE1X21jdV9yeGQgcnhkOw0KKw0KKwlfX2xlMzIgZXZlbnRfaWQ7 DQorCV9fbGUxNiB3bGFuX2lkeDsNCisJX19sZTE2IHJ1X2lkeDsNCisJX19sZTE2IGRpcmVjdGlv bjsNCisJX19sZTE2IGR1bXBfZ3JvdXA7DQorDQorCV9fbGUzMiBzdWdnZXN0X3JhdGU7DQorCV9f bGUzMiBtaW5fcmF0ZTsJLyogZm9yIGR5bmFtaWMgc291bmRpbmcgKi8NCisJX19sZTMyIG1heF9y YXRlOwkvKiBmb3IgZHluYW1pYyBzb3VuZGluZyAqLw0KKwlfX2xlMzIgaW5pdF9yYXRlX2Rvd25f cmF0ZTsNCisNCisJX19sZTE2IGN1cnJfcmF0ZTsNCisJX19sZTE2IGluaXRfcmF0ZV9kb3duX3Rv dGFsOw0KKwlfX2xlMTYgaW5pdF9yYXRlX2Rvd25fc3VjYzsNCisJX19sZTE2IHN1Y2Nlc3M7DQor CV9fbGUxNiBhdHRlbXB0czsNCisNCisJX19sZTE2IHByZXZfcmF0ZTsNCisJX19sZTE2IHByb2Jf dXBfcmF0ZTsNCisJdTggbm9fcmF0ZV91cF9jbnQ7DQorCXU4IHBwZHVfY250Ow0KKwl1OCBnaTsN CisNCisJdTggdHJ5X3VwX2ZhaWw7DQorCXU4IHRyeV91cF90b3RhbDsNCisJdTggc3VnZ2VzdF93 ZjsNCisJdTggdHJ5X3VwX2NoZWNrOw0KKwl1OCBwcm9iX3VwX3BlcmlvZDsNCisJdTggcHJvYl9k b3duX3BlbmRpbmc7DQorfSBfX3BhY2tlZDsNCisNCisjZGVmaW5lIE1UX1JBX1JBVEVfTlNTCQkJ R0VOTUFTSyg4LCA2KQ0KKyNkZWZpbmUgTVRfUkFfUkFURV9NQ1MJCQlHRU5NQVNLKDMsIDApDQor I2RlZmluZSBNVF9SQV9SQVRFX1RYX01PREUJCUdFTk1BU0soMTIsIDkpDQorI2RlZmluZSBNVF9S QV9SQVRFX0RDTV9FTgkJQklUKDQpDQorI2RlZmluZSBNVF9SQV9SQVRFX0JXCQkJR0VOTUFTSygx NCwgMTMpDQorDQorI2RlZmluZSBNQ1VfUFFfSUQocCwgcSkJCQkoKChwKSA8PCAxNSkgfCAoKHEp IDw8IDEwKSkNCisjZGVmaW5lIE1DVV9QS1RfSUQJCQkweGEwDQorDQorZW51bSB7DQorCU1DVV9R X1FVRVJZLA0KKwlNQ1VfUV9TRVQsDQorCU1DVV9RX1JFU0VSVkVELA0KKwlNQ1VfUV9OQQ0KK307 DQorDQorZW51bSB7DQorCU1DVV9TMkRfSDJOLA0KKwlNQ1VfUzJEX0MyTiwNCisJTUNVX1MyRF9I MkMsDQorCU1DVV9TMkRfSDJDTg0KK307DQorDQorZW51bSB7DQorCU1DVV9DTURfVEFSR0VUX0FE RFJFU1NfTEVOX1JFUSA9IDB4MDEsDQorCU1DVV9DTURfRldfU1RBUlRfUkVRID0gMHgwMiwNCisJ TUNVX0NNRF9JTklUX0FDQ0VTU19SRUcgPSAweDMsDQorCU1DVV9DTURfTklDX1BPV0VSX0NUUkwg PSAweDQsDQorCU1DVV9DTURfUEFUQ0hfU1RBUlRfUkVRID0gMHgwNSwNCisJTUNVX0NNRF9QQVRD SF9GSU5JU0hfUkVRID0gMHgwNywNCisJTUNVX0NNRF9QQVRDSF9TRU1fQ09OVFJPTCA9IDB4MTAs DQorCU1DVV9DTURfRVhUX0NJRCA9IDB4RUQsDQorCU1DVV9DTURfRldfU0NBVFRFUiA9IDB4RUUs DQorCU1DVV9DTURfUkVTVEFSVF9ETF9SRVEgPSAweEVGLA0KK307DQorDQorZW51bSB7DQorCU1D VV9FWFRfQ01EX0VGVVNFX0FDQ0VTUyA9IDB4MDEsDQorCU1DVV9FWFRfQ01EX1BNX1NUQVRFX0NU UkwgPSAweDA3LA0KKwlNQ1VfRVhUX0NNRF9DSEFOTkVMX1NXSVRDSCA9IDB4MDgsDQorCU1DVV9F WFRfQ01EX0VGVVNFX0JVRkZFUl9NT0RFID0gMHgyMSwNCisJTUNVX0VYVF9DTURfU1RBX1JFQ19V UERBVEUgPSAweDI1LA0KKwlNQ1VfRVhUX0NNRF9CU1NfSU5GT19VUERBVEUgPSAweDI2LA0KKwlN Q1VfRVhUX0NNRF9FRENBX1VQREFURSA9IDB4MjcsDQorCU1DVV9FWFRfQ01EX0RFVl9JTkZPX1VQ REFURSA9IDB4MkEsDQorCU1DVV9FWFRfQ01EX1RIRVJNQUxfQ1RSTCA9IDB4MmMsDQorCU1DVV9F WFRfQ01EX1NFVF9SRERfQ1RSTCA9IDB4M2EsDQorCU1DVV9FWFRfQ01EX1BST1RFQ1RfQ1RSTCA9 IDB4M2UsDQorCU1DVV9FWFRfQ01EX01BQ19JTklUX0NUUkwgPSAweDQ2LA0KKwlNQ1VfRVhUX0NN RF9SWF9IRFJfVFJBTlMgPSAweDQ3LA0KKwlNQ1VfRVhUX0NNRF9TRVRfUlhfUEFUSCA9IDB4NGUs DQorCU1DVV9FWFRfQ01EX1NFVF9TRVJfVFJJR0dFUiA9IDB4ODEsDQorCU1DVV9FWFRfQ01EX1ND U19DVFJMID0gMHg4MiwNCisJTUNVX0VYVF9DTURfUkFURV9DVFJMID0gMHg4NywNCisJTUNVX0VY VF9DTURfU0VUX1JERF9USCA9IDB4OWQsDQorfTsNCisNCitlbnVtIHsNCisJUEFUQ0hfU0VNX1JF TEVBU0UsDQorCVBBVENIX1NFTV9HRVQNCit9Ow0KKw0KK2VudW0gew0KKwlQQVRDSF9OT1RfRExf U0VNX0ZBSUwsDQorCVBBVENIX0lTX0RMLA0KKwlQQVRDSF9OT1RfRExfU0VNX1NVQ0NFU1MsDQor CVBBVENIX1JFTF9TRU1fU1VDQ0VTUw0KK307DQorDQorZW51bSB7DQorCUZXX1NUQVRFX0lOSVRJ QUwsDQorCUZXX1NUQVRFX0ZXX0RPV05MT0FELA0KKwlGV19TVEFURV9OT1JNQUxfT1BFUkFUSU9O LA0KKwlGV19TVEFURV9OT1JNQUxfVFJYLA0KKwlGV19TVEFURV9XQUNQVV9SRFkgICAgICAgID0g Nw0KK307DQorDQorZW51bSB7DQorCUVFX01PREVfRUZVU0UsDQorCUVFX01PREVfQlVGRkVSLA0K K307DQorDQorZW51bSB7DQorCUVFX0ZPUk1BVF9CSU4sDQorCUVFX0ZPUk1BVF9XSE9MRSwNCisJ RUVfRk9STUFUX01VTFRJUExFLA0KK307DQorDQorI2RlZmluZSBTVEFfVFlQRV9TVEEJCQlCSVQo MCkNCisjZGVmaW5lIFNUQV9UWVBFX0FQCQkJQklUKDEpDQorI2RlZmluZSBTVEFfVFlQRV9BREhP QwkJCUJJVCgyKQ0KKyNkZWZpbmUgU1RBX1RZUEVfV0RTCQkJQklUKDQpDQorI2RlZmluZSBTVEFf VFlQRV9CQwkJCUJJVCg1KQ0KKw0KKyNkZWZpbmUgTkVUV09SS19JTkZSQQkJCUJJVCgxNikNCisj ZGVmaW5lIE5FVFdPUktfUDJQCQkJQklUKDE3KQ0KKyNkZWZpbmUgTkVUV09SS19JQlNTCQkJQklU KDE4KQ0KKyNkZWZpbmUgTkVUV09SS19XRFMJCQlCSVQoMjEpDQorDQorI2RlZmluZSBDT05ORUNU SU9OX0lORlJBX1NUQQkJKFNUQV9UWVBFX1NUQSB8IE5FVFdPUktfSU5GUkEpDQorI2RlZmluZSBD T05ORUNUSU9OX0lORlJBX0FQCQkoU1RBX1RZUEVfQVAgfCBORVRXT1JLX0lORlJBKQ0KKyNkZWZp bmUgQ09OTkVDVElPTl9QMlBfR0MJCShTVEFfVFlQRV9TVEEgfCBORVRXT1JLX1AyUCkNCisjZGVm aW5lIENPTk5FQ1RJT05fUDJQX0dPCQkoU1RBX1RZUEVfQVAgfCBORVRXT1JLX1AyUCkNCisjZGVm aW5lIENPTk5FQ1RJT05fSUJTU19BREhPQwkJKFNUQV9UWVBFX0FESE9DIHwgTkVUV09SS19JQlNT KQ0KKyNkZWZpbmUgQ09OTkVDVElPTl9XRFMJCQkoU1RBX1RZUEVfV0RTIHwgTkVUV09SS19XRFMp DQorI2RlZmluZSBDT05ORUNUSU9OX0lORlJBX0JDCQkoU1RBX1RZUEVfQkMgfCBORVRXT1JLX0lO RlJBKQ0KKw0KKyNkZWZpbmUgQ09OTl9TVEFURV9ESVNDT05ORUNUCQkwDQorI2RlZmluZSBDT05O X1NUQVRFX0NPTk5FQ1QJCTENCisjZGVmaW5lIENPTk5fU1RBVEVfUE9SVF9TRUNVUkUJCTINCisN CitlbnVtIHsNCisJREVWX0lORk9fQUNUSVZFLA0KKwlERVZfSU5GT19NQVhfTlVNDQorfTsNCisN CitlbnVtIHsNCisJU0NTX1NFTkRfREFUQSwNCisJU0NTX1NFVF9NQU5VQUxfUERfVEgsDQorCVND U19DT05GSUcsDQorCVNDU19FTkFCTEUsDQorCVNDU19TSE9XX0lORk8sDQorCVNDU19HRVRfR0xP X0FERFIsDQorCVNDU19HRVRfR0xPX0FERFJfRVZFTlQsDQorfTsNCisNCitlbnVtIHsNCisJQ01E X0NCV18yME1IWiA9IElFRUU4MDIxMV9TVEFfUlhfQldfMjAsDQorCUNNRF9DQldfNDBNSFogPSBJ RUVFODAyMTFfU1RBX1JYX0JXXzQwLA0KKwlDTURfQ0JXXzgwTUhaID0gSUVFRTgwMjExX1NUQV9S WF9CV184MCwNCisJQ01EX0NCV18xNjBNSFogPSBJRUVFODAyMTFfU1RBX1JYX0JXXzE2MCwNCisJ Q01EX0NCV18xME1IWiwNCisJQ01EX0NCV181TUhaLA0KKwlDTURfQ0JXXzgwODBNSFosDQorDQor CUNNRF9IRV9NQ1NfQlc4MCA9IDAsDQorCUNNRF9IRV9NQ1NfQlcxNjAsDQorCUNNRF9IRV9NQ1Nf Qlc4MDgwLA0KKwlDTURfSEVfTUNTX0JXX05VTQ0KK307DQorDQorc3RydWN0IHRsdiB7DQorCV9f bGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgYnNzX2lu Zm9fb21hYyB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCXU4IGh3X2Jzc19pZHg7 DQorCXU4IG9tYWNfaWR4Ow0KKwl1OCBiYW5kX2lkeDsNCisJdTggcnN2MDsNCisJX19sZTMyIGNv bm5fdHlwZTsNCisJdTMyIHJzdjE7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgYnNzX2luZm9f YmFzaWMgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwlfX2xlMzIgbmV0d29ya190 eXBlOw0KKwl1OCBhY3RpdmU7DQorCXU4IHJzdjA7DQorCV9fbGUxNiBiY25faW50ZXJ2YWw7DQor CXU4IGJzc2lkW0VUSF9BTEVOXTsNCisJdTggd21tX2lkeDsNCisJdTggZHRpbV9wZXJpb2Q7DQor CXU4IGJtY193Y2lkX2xvOw0KKwl1OCBjaXBoZXI7DQorCXU4IHBoeV9tb2RlOw0KKwl1OCBtYXhf YnNzaWQ7CS8qIG1heCBCU1NJRC4gcmFuZ2U6IDEgfiA4LCAwOiBNQlNTSUQgZGlzYWJsZWQgKi8N CisJdTggbm9uX3R4X2Jzc2lkOy8qIG5vbi10cmFuc21pdHRlZCBCU1NJRCwgMDogdHJhbnNtaXR0 ZWQgQlNTSUQgKi8NCisJdTggYm1jX3djaWRfaGk7CS8qIGhpZ2ggQnl0ZSBhbmQgdmVyc2lvbiAq Lw0KKwl1OCByc3ZbMl07DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgYnNzX2luZm9fcmZfY2gg ew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBwcmlfY2g7DQorCXU4IGNlbnRl cl9jaDA7DQorCXU4IGNlbnRlcl9jaDE7DQorCXU4IGJ3Ow0KKwl1OCBoZV9ydTI2X2Jsb2NrOwkv KiAxOiBkb24ndCBzZW5kIEhFVEIgaW4gUlUyNiwgMDogYWxsb3cgKi8NCisJdTggaGVfYWxsX2Rp c2FibGU7CS8qIDE6IGRpc2FsbG93IGFsbCBIRVRCLCAwOiBhbGxvdyAqLw0KKwl1OCByc3ZbMl07 DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgYnNzX2luZm9fZXh0X2JzcyB7DQorCV9fbGUxNiB0 YWc7DQorCV9fbGUxNiBsZW47DQorCV9fbGUzMiBtYnNzX3RzZl9vZmZzZXQ7IC8qIGluIHVuaXQg b2YgdXMgKi8NCisJdTggcnN2WzhdOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGJzc19pbmZv X3N5bmNfbW9kZSB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCV9fbGUxNiBiY25f aW50ZXJ2YWw7DQorCXU4IGVuYWJsZTsNCisJdTggZHRpbV9wZXJpb2Q7DQorCXU4IHJzdls4XTsN Cit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBic3NfaW5mb19ibWNfcmF0ZSB7DQorCV9fbGUxNiB0 YWc7DQorCV9fbGUxNiBsZW47DQorCV9fbGUxNiBiY190cmFuczsNCisJX19sZTE2IG1jX3RyYW5z Ow0KKwl1OCBzaG9ydF9wcmVhbWJsZTsNCisJdTggcnN2WzddOw0KK30gX19wYWNrZWQ7DQorDQor c3RydWN0IGJzc19pbmZvX3JhIHsNCisJX19sZTE2IHRhZzsNCisJX19sZTE2IGxlbjsNCisJdTgg b3BfbW9kZTsNCisJdTggYWRob2NfZW47DQorCXU4IHNob3J0X3ByZWFtYmxlOw0KKwl1OCB0eF9z dHJlYW1zOw0KKwl1OCByeF9zdHJlYW1zOw0KKwl1OCBhbGdvOw0KKwl1OCBmb3JjZV9zZ2k7DQor CXU4IGZvcmNlX2dmOw0KKwl1OCBodF9tb2RlOw0KKwl1OCBoYXNfMjBfc3RhOwkJLyogQ2hlY2sg aWYgYW55IHN0YSBzdXBwb3J0IEdGLiAqLw0KKwl1OCBic3Nfd2lkdGhfdHJpZ2dlcl9ldmVudHM7 DQorCXU4IHZodF9uc3NfY2FwOw0KKwl1OCB2aHRfYndfc2lnbmFsOwkvKiBub3QgdXNlICovDQor CXU4IHZodF9mb3JjZV9zZ2k7CS8qIG5vdCB1c2UgKi8NCisJdTggc2Vfb2ZmOw0KKwl1OCBhbnRl bm5hX2lkeDsNCisJdTggdHJhaW5fdXBfcnVsZTsNCisJdTggcnN2WzNdOw0KKwl1bnNpZ25lZCBz aG9ydCB0cmFpbl91cF9oaWdoX3RocmVzOw0KKwlzaG9ydCB0cmFpbl91cF9ydWxlX3Jzc2k7DQor CXVuc2lnbmVkIHNob3J0IGxvd190cmFmZmljX3RocmVzOw0KKwlfX2xlMTYgbWF4X3BoeXJhdGU7 DQorCV9fbGUzMiBwaHlfY2FwOw0KKwlfX2xlMzIgaW50ZXJ2YWw7DQorCV9fbGUzMiBmYXN0X2lu dGVydmFsOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGJzc19pbmZvX2JjbiB7DQorCV9fbGUx NiB0YWc7DQorCV9fbGUxNiBsZW47DQorCXU4IHZlcjsNCisJdTggZW5hYmxlOw0KKwlfX2xlMTYg c3ViX250bHY7DQorfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7DQorDQorc3RydWN0IGJzc19pbmZv X2Jjbl9jc2Egew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBjbnQ7DQorCXU4 IHJzdlszXTsNCit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsNCisNCitzdHJ1Y3QgYnNzX2luZm9f YmNuX2JjYyB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCXU4IGNudDsNCisJdTgg cnN2WzNdOw0KK30gX19wYWNrZWQgX19hbGlnbmVkKDQpOw0KKw0KK3N0cnVjdCBic3NfaW5mb19i Y25fbWJzcyB7DQorI2RlZmluZSBNQVhfQkVBQ09OX05VTQkzMg0KKwlfX2xlMTYgdGFnOw0KKwlf X2xlMTYgbGVuOw0KKwlfX2xlMzIgYml0bWFwOw0KKwlfX2xlMTYgb2Zmc2V0W01BWF9CRUFDT05f TlVNXTsNCisJdTggcnN2WzhdOw0KK30gX19wYWNrZWQgX19hbGlnbmVkKDQpOw0KKw0KK3N0cnVj dCBic3NfaW5mb19iY25fY29udCB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCV9f bGUxNiB0aW1fb2ZzOw0KKwlfX2xlMTYgY3NhX29mczsNCisJX19sZTE2IGJjY19vZnM7DQorCV9f bGUxNiBwa3RfbGVuOw0KK30gX19wYWNrZWQgX19hbGlnbmVkKDQpOw0KKw0KK2VudW0gew0KKwlC U1NfSU5GT19CQ05fQ1NBLA0KKwlCU1NfSU5GT19CQ05fQkNDLA0KKwlCU1NfSU5GT19CQ05fTUJT U0lELA0KKwlCU1NfSU5GT19CQ05fQ09OVEVOVCwNCisJQlNTX0lORk9fQkNOX01BWA0KK307DQor DQorZW51bSB7DQorCUJTU19JTkZPX09NQUMsDQorCUJTU19JTkZPX0JBU0lDLA0KKwlCU1NfSU5G T19SRl9DSCwJCS8qIG9wdGlvbmFsLCBmb3IgQlQvTFRFIGNvZXggKi8NCisJQlNTX0lORk9fUE0s CQkvKiBzdGEgb25seSAqLw0KKwlCU1NfSU5GT19VQVBTRCwJCS8qIHN0YSBvbmx5ICovDQorCUJT U19JTkZPX1JPQU1fREVURUNULAkvKiBvYnNvbGV0ZWQgKi8NCisJQlNTX0lORk9fTFFfUk0sCQkv KiBvYnNvbGV0ZWQgKi8NCisJQlNTX0lORk9fRVhUX0JTUywNCisJQlNTX0lORk9fQk1DX1JBVEUs CS8qIGZvciBibWMgcmF0ZSBjb250cm9sIGluIENSNCAqLw0KKwlCU1NfSU5GT19TWU5DX01PREUs DQorCUJTU19JTkZPX1JBLA0KKwlCU1NfSU5GT19IV19BTVNEVSwNCisJQlNTX0lORk9fQlNTX0NP TE9SLA0KKwlCU1NfSU5GT19IRV9CQVNJQywNCisJQlNTX0lORk9fUFJPVEVDVF9JTkZPLA0KKwlC U1NfSU5GT19PRkZMT0FELA0KKwlCU1NfSU5GT18xMVZfTUJTU0lELA0KKwlCU1NfSU5GT19NQVhf TlVNDQorfTsNCisNCitlbnVtIHsNCisJV1RCTF9SRVNFVF9BTkRfU0VUID0gMSwNCisJV1RCTF9T RVQsDQorCVdUQkxfUVVFUlksDQorCVdUQkxfUkVTRVRfQUxMDQorfTsNCisNCitzdHJ1Y3Qgd3Ri bF9yZXFfaGRyIHsNCisJdTggd2xhbl9pZHhfbG87DQorCXU4IG9wZXJhdGlvbjsNCisJX19sZTE2 IHRsdl9udW07DQorCXU4IHdsYW5faWR4X2hpOw0KKwl1OCByc3ZbM107DQorfSBfX3BhY2tlZDsN CisNCitzdHJ1Y3Qgd3RibF9nZW5lcmljIHsNCisJX19sZTE2IHRhZzsNCisJX19sZTE2IGxlbjsN CisJdTggcGVlcl9hZGRyW0VUSF9BTEVOXTsNCisJdTggbXVhcl9pZHg7DQorCXU4IHNraXBfdHg7 DQorCXU4IGNmX2FjazsNCisJdTggcW9zOw0KKwl1OCBtZXNoOw0KKwl1OCBhZG07DQorCV9fbGUx NiBwYXJ0aWFsX2FpZDsNCisJdTggYmFmX2VuOw0KKwl1OCBhYWRfb207DQorfSBfX3BhY2tlZDsN CisNCitzdHJ1Y3Qgd3RibF9yeCB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCXU4 IHJjaWQ7DQorCXU4IHJjYTE7DQorCXU4IHJjYTI7DQorCXU4IHJ2Ow0KKwl1OCByc3ZbNF07DQor fSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgd3RibF9odCB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUx NiBsZW47DQorCXU4IGh0Ow0KKwl1OCBsZHBjOw0KKwl1OCBhZjsNCisJdTggbW07DQorCXU4IHJz dls0XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCB3dGJsX3ZodCB7DQorCV9fbGUxNiB0YWc7 DQorCV9fbGUxNiBsZW47DQorCXU4IGxkcGM7DQorCXU4IGR5bl9idzsNCisJdTggdmh0Ow0KKwl1 OCB0eG9wX3BzOw0KKwl1OCByc3ZbNF07DQorfSBfX3BhY2tlZDsNCisNCitlbnVtIHsNCisJTVRf QkFfVFlQRV9JTlZBTElELA0KKwlNVF9CQV9UWVBFX09SSUdJTkFUT1IsDQorCU1UX0JBX1RZUEVf UkVDSVBJRU5UDQorfTsNCisNCitlbnVtIHsNCisJUlNUX0JBX01BQ19USURfTUFUQ0gsDQorCVJT VF9CQV9NQUNfTUFUQ0gsDQorCVJTVF9CQV9OT19NQVRDSA0KK307DQorDQorc3RydWN0IHd0Ymxf YmEgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwkvKiBjb21tb24gKi8NCisJdTgg dGlkOw0KKwl1OCBiYV90eXBlOw0KKwl1OCByc3YwWzJdOw0KKwkvKiBvcmlnaW5hdG9yIG9ubHkg Ki8NCisJX19sZTE2IHNuOw0KKwl1OCBiYV9lbjsNCisJdTggYmFfd2luc2l6ZV9pZHg7DQorCV9f bGUxNiBiYV93aW5zaXplOw0KKwkvKiByZWNpcGllbnQgb25seSAqLw0KKwl1OCBwZWVyX2FkZHJb RVRIX0FMRU5dOw0KKwl1OCByc3RfYmFfdGlkOw0KKwl1OCByc3RfYmFfc2VsOw0KKwl1OCByc3Rf YmFfc2I7DQorCXU4IGJhbmRfaWR4Ow0KKwl1OCByc3YxWzRdOw0KK30gX19wYWNrZWQ7DQorDQor c3RydWN0IHd0YmxfYmYgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBpYmY7 DQorCXU4IGViZjsNCisJdTggaWJmX3ZodDsNCisJdTggZWJmX3ZodDsNCisJdTggZ2lkOw0KKwl1 OCBwZm11X2lkeDsNCisJdTggcnN2WzJdOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHd0Ymxf c21wcyB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCXU4IHNtcHM7DQorCXU4IHJz dlszXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCB3dGJsX3NwZSB7DQorCV9fbGUxNiB0YWc7 DQorCV9fbGUxNiBsZW47DQorCXU4IHNwZV9pZHg7DQorCXU4IHJzdlszXTsNCit9IF9fcGFja2Vk Ow0KKw0KK2VudW0gew0KKwlXVEJMX0dFTkVSSUMsDQorCVdUQkxfUlgsDQorCVdUQkxfSFQsDQor CVdUQkxfVkhULA0KKwlXVEJMX1BFRVJfUFMsCQkvKiBub3QgdXNlZCAqLw0KKwlXVEJMX1RYX1BT LA0KKwlXVEJMX0hEUl9UUkFOUywNCisJV1RCTF9TRUNfS0VZLA0KKwlXVEJMX0JBLA0KKwlXVEJM X1JERywJCS8qIG9ic29sZXRlZCAqLw0KKwlXVEJMX1BST1RFQ1QsCQkvKiBub3QgdXNlZCAqLw0K KwlXVEJMX0NMRUFSLAkJLyogbm90IHVzZWQgKi8NCisJV1RCTF9CRiwNCisJV1RCTF9TTVBTLA0K KwlXVEJMX1JBV19EQVRBLAkJLyogZGVidWcgb25seSAqLw0KKwlXVEJMX1BOLA0KKwlXVEJMX1NQ RSwNCisJV1RCTF9NQVhfTlVNDQorfTsNCisNCitzdHJ1Y3Qgc3RhX250bHZfaGRyIHsNCisJdTgg cnN2WzJdOw0KKwlfX2xlMTYgdGx2X251bTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBzdGFf cmVxX2hkciB7DQorCXU4IGJzc19pZHg7DQorCXU4IHdsYW5faWR4X2xvOw0KKwlfX2xlMTYgdGx2 X251bTsNCisJdTggaXNfdGx2X2FwcGVuZDsNCisJdTggbXVhcl9pZHg7DQorCXU4IHdsYW5faWR4 X2hpOw0KKwl1OCByc3Y7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgc3RhX3JlY19iYXNpYyB7 DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCV9fbGUzMiBjb25uX3R5cGU7DQorCXU4 IGNvbm5fc3RhdGU7DQorCXU4IHFvczsNCisJX19sZTE2IGFpZDsNCisJdTggcGVlcl9hZGRyW0VU SF9BTEVOXTsNCisJX19sZTE2IGV4dHJhX2luZm87DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qg c3RhX3JlY19odCB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCV9fbGUxNiBodF9j YXA7DQorCXUxNiByc3Y7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgc3RhX3JlY192aHQgew0K KwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwlfX2xlMzIgdmh0X2NhcDsNCisJX19sZTE2 IHZodF9yeF9tY3NfbWFwOw0KKwlfX2xlMTYgdmh0X3R4X21jc19tYXA7DQorCXU4IHJ0c19id19z aWc7DQorCXU4IHJzdlszXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBzdGFfcmVjX2JhIHsN CisJX19sZTE2IHRhZzsNCisJX19sZTE2IGxlbjsNCisJdTggdGlkOw0KKwl1OCBiYV90eXBlOw0K Kwl1OCBhbXNkdTsNCisJdTggYmFfZW47DQorCV9fbGUxNiBzc247DQorCV9fbGUxNiB3aW5zaXpl Ow0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHNlY19rZXkgew0KKwl1OCBjaXBoZXJfaWQ7DQor CXU4IGNpcGhlcl9sZW47DQorCXU4IGtleV9pZDsNCisJdTgga2V5X2xlbjsNCisJdTgga2V5WzMy XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBzdGFfcmVjX3NlYyB7DQorCV9fbGUxNiB0YWc7 DQorCV9fbGUxNiBsZW47DQorCXU4IGFkZDsNCisJdTggbl9jaXBoZXI7DQorCXU4IHJzdlsyXTsN CisNCisJc3RydWN0IHNlY19rZXkga2V5WzJdOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHJh X3BoeSB7DQorCXU4IHR5cGU7DQorCXU4IGZsYWc7DQorCXU4IHN0YmM7DQorCXU4IHNnaTsNCisJ dTggYnc7DQorCXU4IGxkcGM7DQorCXU4IG1jczsNCisJdTggbnNzOw0KKwl1OCBoZV9sdGY7DQor fTsNCisNCitzdHJ1Y3Qgc3RhX3JlY19yYSB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47 DQorDQorCXU4IHZhbGlkOw0KKwl1OCBhdXRvX3JhdGU7DQorCXU4IHBoeV9tb2RlOw0KKwl1OCBj aGFubmVsOw0KKwl1OCBidzsNCisJdTggZGlzYWJsZV9jY2s7DQorCXU4IGh0X21jczMyOw0KKwl1 OCBodF9nZjsNCisJdTggaHRfbWNzWzRdOw0KKwl1OCBtbXBzX21vZGU7DQorCXU4IGdiYW5kXzI1 NjsNCisJdTggYWY7DQorCXU4IGF1dGhfd2FwaV9tb2RlOw0KKwl1OCByYXRlX2xlbjsNCisNCisJ dTggc3VwcF9tb2RlOw0KKwl1OCBzdXBwX2Nja19yYXRlOw0KKwl1OCBzdXBwX29mZG1fcmF0ZTsN CisJX19sZTMyIHN1cHBfaHRfbWNzOw0KKwlfX2xlMTYgc3VwcF92aHRfbWNzWzRdOw0KKw0KKwl1 OCBvcF9tb2RlOw0KKwl1OCBvcF92aHRfY2hhbl93aWR0aDsNCisJdTggb3Bfdmh0X3J4X25zczsN CisJdTggb3Bfdmh0X3J4X25zc190eXBlOw0KKw0KKwlfX2xlMzIgc3RhX3N0YXR1czsNCisNCisJ c3RydWN0IHJhX3BoeSBwaHk7DQorfSBfX3BhY2tlZDsNCisNCitlbnVtIHsNCisJU1RBX1JFQ19C QVNJQywNCisJU1RBX1JFQ19SQSwNCisJU1RBX1JFQ19SQV9DTU1fSU5GTywNCisJU1RBX1JFQ19S QV9VUERBVEUsDQorCVNUQV9SRUNfQkYsDQorCVNUQV9SRUNfQU1TRFUsDQorCVNUQV9SRUNfQkEs DQorCVNUQV9SRUNfUkVELAkJLyogbm90IHVzZWQgKi8NCisJU1RBX1JFQ19UWF9QUk9DLAkvKiBm b3IgaGRyIHRyYW5zIGFuZCBDU08gaW4gQ1I0ICovDQorCVNUQV9SRUNfSFQsDQorCVNUQV9SRUNf VkhULA0KKwlTVEFfUkVDX0FQUFMsDQorCVNUQV9SRUNfS0VZLA0KKwlTVEFfUkVDX1dUQkwsDQor CVNUQV9SRUNfSEUsDQorCVNUQV9SRUNfSFdfQU1TRFUsDQorCVNUQV9SRUNfV1RCTF9BQURPTSwN CisJU1RBX1JFQ19LRVlfVjIsDQorCVNUQV9SRUNfTVVSVSwNCisJU1RBX1JFQ19NVUVEQ0EsDQor CVNUQV9SRUNfTUFYX05VTQ0KK307DQorDQorZW51bSBtdDc5MTVfY2lwaGVyX3R5cGUgew0KKwlN VF9DSVBIRVJfTk9ORSwNCisJTVRfQ0lQSEVSX1dFUDQwLA0KKwlNVF9DSVBIRVJfV0VQMTA0LA0K KwlNVF9DSVBIRVJfV0VQMTI4LA0KKwlNVF9DSVBIRVJfVEtJUCwNCisJTVRfQ0lQSEVSX0FFU19D Q01QLA0KKwlNVF9DSVBIRVJfQ0NNUF8yNTYsDQorCU1UX0NJUEhFUl9HQ01QLA0KKwlNVF9DSVBI RVJfR0NNUF8yNTYsDQorCU1UX0NJUEhFUl9XQVBJLA0KKwlNVF9DSVBIRVJfQklQX0NNQUNfMTI4 LA0KK307DQorDQorZW51bSB7DQorCUNIX1NXSVRDSF9OT1JNQUwgPSAwLA0KKwlDSF9TV0lUQ0hf U0NBTiA9IDMsDQorCUNIX1NXSVRDSF9NQ0MgPSA0LA0KKwlDSF9TV0lUQ0hfREZTID0gNSwNCisJ Q0hfU1dJVENIX0JBQ0tHUk9VTkRfU0NBTl9TVEFSVCA9IDYsDQorCUNIX1NXSVRDSF9CQUNLR1JP VU5EX1NDQU5fUlVOTklORyA9IDcsDQorCUNIX1NXSVRDSF9CQUNLR1JPVU5EX1NDQU5fU1RPUCA9 IDgsDQorCUNIX1NXSVRDSF9TQ0FOX0JZUEFTU19EUEQgPSA5DQorfTsNCisNCitlbnVtIHsNCisJ VEhFUk1BTF9TRU5TT1JfVEVNUF9RVUVSWSwNCisJVEhFUk1BTF9TRU5TT1JfTUFOVUFMX0NUUkws DQorCVRIRVJNQUxfU0VOU09SX0lORk9fUVVFUlksDQorCVRIRVJNQUxfU0VOU09SX1RBU0tfQ1RS TCwNCit9Ow0KKw0KKyNkZWZpbmUgTVQ3OTE1X1dUQkxfVVBEQVRFX01BWF9TSVpFCShzaXplb2Yo c3RydWN0IHd0YmxfcmVxX2hkcikgKwlcDQorCQkJCQkgc2l6ZW9mKHN0cnVjdCB3dGJsX2dlbmVy aWMpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgd3RibF9yeCkgKwlcDQorCQkJCQkgc2l6ZW9m KHN0cnVjdCB3dGJsX2h0KSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHd0Ymxfdmh0KSArCVwN CisJCQkJCSBzaXplb2Yoc3RydWN0IHd0YmxfYmEpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qg d3RibF9iZikgKwlcDQorCQkJCQkgc2l6ZW9mKHN0cnVjdCB3dGJsX3NtcHMpICsJXA0KKwkJCQkJ IHNpemVvZihzdHJ1Y3Qgd3RibF9zcGUpKQ0KKw0KKyNkZWZpbmUgTVQ3OTE1X1NUQV9VUERBVEVf TUFYX1NJWkUJKHNpemVvZihzdHJ1Y3Qgc3RhX3JlcV9oZHIpICsJXA0KKwkJCQkJIHNpemVvZihz dHJ1Y3Qgc3RhX3JlY19iYXNpYykgKwlcDQorCQkJCQkgc2l6ZW9mKHN0cnVjdCBzdGFfcmVjX2h0 KSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHN0YV9yZWNfYmEpICsJXA0KKwkJCQkJIHNpemVv ZihzdHJ1Y3Qgc3RhX3JlY192aHQpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3QgdGx2KSArCQlc DQorCQkJCQkgc2l6ZW9mKHN0cnVjdCBzdGFfcmVjX3NlYykgKwlcDQorCQkJCQkgc2l6ZW9mKHN0 cnVjdCBzdGFfcmVjX3JhKSArCVwNCisJCQkJCSBNVDc5MTVfV1RCTF9VUERBVEVfTUFYX1NJWkUp DQorDQorI2RlZmluZSBNVDc5MTVfV1RCTF9VUERBVEVfQkFfU0laRQkoc2l6ZW9mKHN0cnVjdCB3 dGJsX3JlcV9oZHIpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgd3RibF9iYSkpDQorDQorI2Rl ZmluZSBNVDc5MTVfQkVBQ09OX1VQREFURV9TSVpFCShzaXplb2Yoc3RydWN0IHN0YV9yZXFfaGRy KSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IGJzc19pbmZvX2Jjbl9jc2EpICsgXA0KKwkJCQkJ IHNpemVvZihzdHJ1Y3QgYnNzX2luZm9fYmNuX2JjYykgKyBcDQorCQkJCQkgc2l6ZW9mKHN0cnVj dCBic3NfaW5mb19iY25fbWJzcykgKyBcDQorCQkJCQkgc2l6ZW9mKHN0cnVjdCBic3NfaW5mb19i Y25fY29udCkpDQorDQorI2RlZmluZSBQSFlfTU9ERV9BCQkJQklUKDApDQorI2RlZmluZSBQSFlf TU9ERV9CCQkJQklUKDEpDQorI2RlZmluZSBQSFlfTU9ERV9HCQkJQklUKDIpDQorI2RlZmluZSBQ SFlfTU9ERV9HTgkJCUJJVCgzKQ0KKyNkZWZpbmUgUEhZX01PREVfQU4JCQlCSVQoNCkNCisjZGVm aW5lIFBIWV9NT0RFX0FDCQkJQklUKDUpDQorDQorI2RlZmluZSBNT0RFX0NDSwkJCUJJVCgwKQ0K KyNkZWZpbmUgTU9ERV9PRkRNCQkJQklUKDEpDQorI2RlZmluZSBNT0RFX0hUCQkJCUJJVCgyKQ0K KyNkZWZpbmUgTU9ERV9WSFQJCQlCSVQoMykNCisNCisjZGVmaW5lIFNUQV9DQVBfV01NCQkJQklU KDApDQorI2RlZmluZSBTVEFfQ0FQX1NHSV8yMAkJCUJJVCg0KQ0KKyNkZWZpbmUgU1RBX0NBUF9T R0lfNDAJCQlCSVQoNSkNCisjZGVmaW5lIFNUQV9DQVBfVFhfU1RCQwkJCUJJVCg2KQ0KKyNkZWZp bmUgU1RBX0NBUF9SWF9TVEJDCQkJQklUKDcpDQorI2RlZmluZSBTVEFfQ0FQX1ZIVF9TR0lfODAJ CUJJVCgxNikNCisjZGVmaW5lIFNUQV9DQVBfVkhUX1NHSV8xNjAJCUJJVCgxNykNCisjZGVmaW5l IFNUQV9DQVBfVkhUX1RYX1NUQkMJCUJJVCgxOCkNCisjZGVmaW5lIFNUQV9DQVBfVkhUX1JYX1NU QkMJCUJJVCgxOSkNCisjZGVmaW5lIFNUQV9DQVBfVkhUX0xEUEMJCUJJVCgyMykNCisjZGVmaW5l IFNUQV9DQVBfTERQQwkJCUJJVCgyNCkNCisjZGVmaW5lIFNUQV9DQVBfSFQJCQlCSVQoMjYpDQor I2RlZmluZSBTVEFfQ0FQX1ZIVAkJCUJJVCgyNykNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tdDc5MTUuaCBiL2RyaXZl cnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L210NzkxNS5oDQpuZXcgZmlsZSBt b2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5mMjEzOWE1MjQ4ZDkNCi0tLSAvZGV2L251 bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L210Nzkx NS5oDQpAQCAtMCwwICsxLDQ0MiBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0Mg Ki8NCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiAqLw0KKw0KKyNpZm5kZWYg X19NVDc5MTVfSA0KKyNkZWZpbmUgX19NVDc5MTVfSA0KKw0KKyNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4NCisjaW5jbHVkZSAiLi4vbXQ3Ni5o Ig0KKyNpbmNsdWRlICJyZWdzLmgiDQorDQorI2RlZmluZSBNVDc5MTVfTUFYX0lOVEVSRkFDRVMJ CTQNCisjZGVmaW5lIE1UNzkxNV9NQVhfV01NX1NFVFMJCTQNCisjZGVmaW5lIE1UNzkxNV9XVEJM X1NJWkUJCTI4OA0KKyNkZWZpbmUgTVQ3OTE1X1dUQkxfUkVTRVJWRUQJCShNVDc5MTVfV1RCTF9T SVpFIC0gMSkNCisjZGVmaW5lIE1UNzkxNV9XVEJMX1NUQQkJCShNVDc5MTVfV1RCTF9SRVNFUlZF RCAtIFwNCisJCQkJCSBNVDc5MTVfTUFYX0lOVEVSRkFDRVMpDQorDQorI2RlZmluZSBNVDc5MTVf V0FUQ0hET0dfVElNRQkJKEhaIC8gMTApDQorI2RlZmluZSBNVDc5MTVfUkVTRVRfVElNRU9VVAkJ KDMwICogSFopDQorDQorI2RlZmluZSBNVDc5MTVfVFhfUklOR19TSVpFCQkyMDQ4DQorI2RlZmlu ZSBNVDc5MTVfVFhfTUNVX1JJTkdfU0laRQkJMjU2DQorI2RlZmluZSBNVDc5MTVfVFhfRldETF9S SU5HX1NJWkUJMTI4DQorDQorI2RlZmluZSBNVDc5MTVfUlhfUklOR19TSVpFCQkxNTM2DQorI2Rl ZmluZSBNVDc5MTVfUlhfTUNVX1JJTkdfU0laRQkJNTEyDQorDQorI2RlZmluZSBNVDc5MTVfRklS TVdBUkVfV0EJCSJtZWRpYXRlay9tdDc5MTVfd2EuYmluIg0KKyNkZWZpbmUgTVQ3OTE1X0ZJUk1X QVJFX1dNCQkibWVkaWF0ZWsvbXQ3OTE1X3dtLmJpbiINCisjZGVmaW5lIE1UNzkxNV9ST01fUEFU Q0gJCSJtZWRpYXRlay9tdDc5MTVfcm9tX3BhdGNoLmJpbiINCisNCisjZGVmaW5lIE1UNzkxNV9F RVBST01fU0laRQkJMzU4NA0KKyNkZWZpbmUgTVQ3OTE1X1RPS0VOX1NJWkUJCTgxOTINCisNCisj ZGVmaW5lIE1UNzkxNV9DRkVORF9SQVRFX0RFRkFVTFQJMHg0OQkvKiBPRkRNIDI0TSAqLw0KKyNk ZWZpbmUgTVQ3OTE1X0NGRU5EX1JBVEVfMTFCCQkweDAzCS8qIDExQiBMUCwgMTFNICovDQorI2Rl ZmluZSBNVDc5MTVfNUdfUkFURV9ERUZBVUxUCQkweDRiCS8qIE9GRE0gNk0gKi8NCisjZGVmaW5l IE1UNzkxNV8yR19SQVRFX0RFRkFVTFQJCTB4MAkvKiBDQ0sgMU0gKi8NCisNCisNCitzdHJ1Y3Qg bXQ3OTE1X3ZpZjsNCitzdHJ1Y3QgbXQ3OTE1X3N0YTsNCitzdHJ1Y3QgbXQ3OTE1X2Rmc19wdWxz ZTsNCitzdHJ1Y3QgbXQ3OTE1X2Rmc19wYXR0ZXJuOw0KKw0KK2VudW0gbXQ3OTE1X3R4cV9pZCB7 DQorCU1UNzkxNV9UWFFfRldETCA9IDE2LA0KKwlNVDc5MTVfVFhRX01DVV9XTSwNCisJTVQ3OTE1 X1RYUV9CQU5EMCwNCisJTVQ3OTE1X1RYUV9CQU5EMSwNCisJTVQ3OTE1X1RYUV9NQ1VfV0EsDQor fTsNCisNCitlbnVtIG10NzkxNV9yeHFfaWQgew0KKwlNVDc5MTVfUlhRX0JBTkQwID0gMCwNCisJ TVQ3OTE1X1JYUV9CQU5EMSwNCisJTVQ3OTE1X1JYUV9NQ1VfV00gPSAwLA0KKwlNVDc5MTVfUlhR X01DVV9XQSwNCit9Ow0KKw0KK2VudW0gbXQ3OTE1X2FtcGR1X3N0YXRlIHsNCisJTVQ3OTE1X0FH R1JfU1RPUCwNCisJTVQ3OTE1X0FHR1JfUFJPR1JFU1MsDQorCU1UNzkxNV9BR0dSX1NUQVJULA0K KwlNVDc5MTVfQUdHUl9PUEVSQVRJT05BTA0KK307DQorDQorc3RydWN0IG10NzkxNV9zdGFfc3Rh dHMgew0KKwlzdHJ1Y3QgcmF0ZV9pbmZvIHByb2JfcmF0ZTsNCisJc3RydWN0IHJhdGVfaW5mbyB0 eF9yYXRlOw0KKw0KKwl1bnNpZ25lZCBsb25nIHBlcjsNCisJdW5zaWduZWQgbG9uZyBjaGFuZ2Vk Ow0KKwl1bnNpZ25lZCBsb25nIGppZmZpZXM7DQorfTsNCisNCitzdHJ1Y3QgbXQ3OTE1X3N0YSB7 DQorCXN0cnVjdCBtdDc2X3djaWQgd2NpZDsgLyogbXVzdCBiZSBmaXJzdCAqLw0KKw0KKwlzdHJ1 Y3QgbXQ3OTE1X3ZpZiAqdmlmOw0KKw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIHBvbGxfbGlzdDsNCisJ dTMyIGFpcnRpbWVfYWNbOF07DQorDQorCXN0cnVjdCBtdDc5MTVfc3RhX3N0YXRzIHN0YXRzOw0K KwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhdHNfd29yazsNCisNCisJc3BpbmxvY2tfdCBhbXBkdV9s b2NrOw0KKwllbnVtIG10NzkxNV9hbXBkdV9zdGF0ZSBhbXBkdV9zdGF0ZVtJRUVFODAyMTFfTlVN X1RJRFNdOw0KK307DQorDQorc3RydWN0IG10NzkxNV92aWYgew0KKwl1MTYgaWR4Ow0KKwl1OCBv bWFjX2lkeDsNCisJdTggYmFuZF9pZHg7DQorCXU4IHdtbV9pZHg7DQorDQorCXN0cnVjdCB7DQor CQl1MTYgY3dfbWluOw0KKwkJdTE2IGN3X21heDsNCisJCXUxNiB0eG9wOw0KKwkJdTggYWlmczsN CisJfSB3bW1bSUVFRTgwMjExX05VTV9BQ1NdOw0KKw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSBzdGE7 DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXY7DQorfTsNCisNCitzdHJ1Y3QgbWliX3N0YXRzIHsN CisJdTE2IGFja19mYWlsX2NudDsNCisJdTE2IGZjc19lcnJfY250Ow0KKwl1MTYgcnRzX2NudDsN CisJdTE2IHJ0c19yZXRyaWVzX2NudDsNCisJdTE2IGJhX21pc3NfY250Ow0KK307DQorDQorc3Ry dWN0IG10NzkxNV9waHkgew0KKwlzdHJ1Y3QgbXQ3Nl9waHkgKm10NzY7DQorCXN0cnVjdCBtdDc5 MTVfZGV2ICpkZXY7DQorDQorCXUzMiByeGZpbHRlcjsNCisJdTMyIG9tYWNfbWFzazsNCisNCisJ dTE2IG5vaXNlOw0KKwl1MTYgY2hhaW5tYXNrOw0KKw0KKwlzMTYgY292ZXJhZ2VfY2xhc3M7DQor CXU4IHNsb3R0aW1lOw0KKw0KKwl1OCByZGRfc3RhdGU7DQorCWludCBkZnNfc3RhdGU7DQorDQor CV9fbGUzMiByeF9hbXBkdV90czsNCisJdTMyIGFtcGR1X3JlZjsNCisNCisJc3RydWN0IG1pYl9z dGF0cyBtaWI7DQorfTsNCisNCitzdHJ1Y3QgbXQ3OTE1X2RldiB7DQorCXVuaW9uIHsgLyogbXVz dCBiZSBmaXJzdCAqLw0KKwkJc3RydWN0IG10NzZfZGV2IG10NzY7DQorCQlzdHJ1Y3QgbXQ3Nl9w aHkgbXBoeTsNCisJfTsNCisNCisJc3RydWN0IG10NzkxNV9waHkgcGh5Ow0KKwl1MzIgdmlmX21h c2s7DQorCXUzMiBvbWFjX21hc2s7DQorDQorCXUxNiBjaGFpbm1hc2s7DQorDQorCXN0cnVjdCB3 b3JrX3N0cnVjdCBpbml0X3dvcms7DQorCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF93b3JrOw0K Kwl3YWl0X3F1ZXVlX2hlYWRfdCByZXNldF93YWl0Ow0KKwl1MzIgcmVzZXRfc3RhdGU7DQorDQor CXN0cnVjdCBsaXN0X2hlYWQgc3RhX3BvbGxfbGlzdDsNCisJc3BpbmxvY2tfdCBzdGFfcG9sbF9s b2NrOw0KKw0KKwl1MzIgaHdfcGF0dGVybjsNCisNCisJc3BpbmxvY2tfdCB0b2tlbl9sb2NrOw0K KwlzdHJ1Y3QgaWRyIHRva2VuOw0KKw0KKwl1OCBtYWNfd29ya19jb3VudDsNCisJYm9vbCBmd19k ZWJ1ZzsNCit9Ow0KKw0KK2VudW0gew0KKwlIV19CU1NJRF8wID0gMHgwLA0KKwlIV19CU1NJRF8x LA0KKwlIV19CU1NJRF8yLA0KKwlIV19CU1NJRF8zLA0KKwlIV19CU1NJRF9NQVgsDQorCUVYVF9C U1NJRF9TVEFSVCA9IDB4MTAsDQorCUVYVF9CU1NJRF8xLA0KKwlFWFRfQlNTSURfMiwNCisJRVhU X0JTU0lEXzMsDQorCUVYVF9CU1NJRF80LA0KKwlFWFRfQlNTSURfNSwNCisJRVhUX0JTU0lEXzYs DQorCUVYVF9CU1NJRF83LA0KKwlFWFRfQlNTSURfOCwNCisJRVhUX0JTU0lEXzksDQorCUVYVF9C U1NJRF8xMCwNCisJRVhUX0JTU0lEXzExLA0KKwlFWFRfQlNTSURfMTIsDQorCUVYVF9CU1NJRF8x MywNCisJRVhUX0JTU0lEXzE0LA0KKwlFWFRfQlNTSURfMTUsDQorCUVYVF9CU1NJRF9FTkQNCit9 Ow0KKw0KK2VudW0gew0KKwlNVF9SWF9TRUwwLA0KKwlNVF9SWF9TRUwxLA0KK307DQorDQorZW51 bSBtdDc5MTVfcmRkX2NtZCB7DQorCVJERF9TVE9QLA0KKwlSRERfU1RBUlQsDQorCVJERF9ERVRf TU9ERSwNCisJUkREX1JBREFSX0VNVUxBVEUsDQorCVJERF9TVEFSVF9UWFEgPSAyMCwNCisJUkRE X0NBQ19TVEFSVCA9IDUwLA0KKwlSRERfQ0FDX0VORCwNCisJUkREX05PUk1BTF9TVEFSVCwNCisJ UkREX0RJU0FCTEVfREZTX0NBTCwNCisJUkREX1BVTFNFX0RCRywNCisJUkREX1JFQURfUFVMU0Us DQorCVJERF9SRVNVTUVfQkYsDQorCVJERF9JUlFfT0ZGLA0KK307DQorDQorZW51bSB7DQorCVJB VEVfQ1RSTF9SVV9JTkZPLA0KKwlSQVRFX0NUUkxfRklYRURfUkFURV9JTkZPLA0KKwlSQVRFX0NU UkxfRFVNUF9JTkZPLA0KKwlSQVRFX0NUUkxfTVVfSU5GTywNCit9Ow0KKw0KK3N0YXRpYyBpbmxp bmUgc3RydWN0IG10NzkxNV9waHkgKg0KK210NzkxNV9od19waHkoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcpDQorew0KKwlzdHJ1Y3QgbXQ3Nl9waHkgKnBoeSA9IGh3LT5wcml2Ow0KKw0KKwlyZXR1 cm4gcGh5LT5wcml2Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdDc5MTVfZGV2ICoN CittdDc5MTVfaHdfZGV2KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG10 NzZfcGh5ICpwaHkgPSBody0+cHJpdjsNCisNCisJcmV0dXJuIGNvbnRhaW5lcl9vZihwaHktPmRl diwgc3RydWN0IG10NzkxNV9kZXYsIG10NzYpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHN0cnVj dCBtdDc5MTVfcGh5ICoNCittdDc5MTVfZXh0X3BoeShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0K K3sNCisJc3RydWN0IG10NzZfcGh5ICpwaHkgPSBkZXYtPm10NzYucGh5MjsNCisNCisJaWYgKCFw aHkpDQorCQlyZXR1cm4gTlVMTDsNCisNCisJcmV0dXJuIHBoeS0+cHJpdjsNCit9DQorDQorc3Rh dGljIGlubGluZSB2b2lkDQorbXQ3OTE1X3NldF9hZ2dyX3N0YXRlKHN0cnVjdCBtdDc5MTVfc3Rh ICptc3RhLCB1OCB0aWQsDQorCQkgICAgICBlbnVtIG10NzkxNV9hbXBkdV9zdGF0ZSBzdGF0ZSkN Cit7DQorCXNwaW5fbG9ja19iaCgmbXN0YS0+YW1wZHVfbG9jayk7DQorCW1zdGEtPmFtcGR1X3N0 YXRlW3RpZF0gPSBzdGF0ZTsNCisJc3Bpbl91bmxvY2tfYmgoJm1zdGEtPmFtcGR1X2xvY2spOw0K K30NCisNCitleHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXQ3OTE1X29wczsNCitl eHRlcm4gc3RydWN0IHBjaV9kcml2ZXIgbXQ3OTE1X3BjaV9kcml2ZXI7DQorDQordTMyIG10Nzkx NV9yZWdfbWFwKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBhZGRyKTsNCisNCitpbnQgbXQ3 OTE1X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KTsNCit2b2lkIG10Nzkx NV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KTsNCitpbnQgbXQ3OTE1 X3JlZ2lzdGVyX2V4dF9waHkoc3RydWN0IG10NzkxNV9kZXYgKmRldik7DQordm9pZCBtdDc5MTVf dW5yZWdpc3Rlcl9leHRfcGh5KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpOw0KK2ludCBtdDc5MTVf ZWVwcm9tX2luaXQoc3RydWN0IG10NzkxNV9kZXYgKmRldik7DQordTMyIG10NzkxNV9lZXByb21f cmVhZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgb2Zmc2V0KTsNCitpbnQgbXQ3OTE1X2Vl cHJvbV9nZXRfdGFyZ2V0X3Bvd2VyKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkJCSAgIHN0 cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwNCisJCQkJICAgdTggY2hhaW5faWR4KTsNCitp bnQgbXQ3OTE1X2RtYV9pbml0KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpOw0KK3ZvaWQgbXQ3OTE1 X2RtYV9wcmVmZXRjaChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KTsNCit2b2lkIG10NzkxNV9kbWFf Y2xlYW51cChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KTsNCitpbnQgbXQ3OTE1X21jdV9pbml0KHN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYpOw0KK2ludCBtdDc5MTVfbWN1X2FkZF9kZXZfaW5mbyhzdHJ1 Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBi b29sIGVuYWJsZSk7DQoraW50IG10NzkxNV9tY3VfYWRkX2Jzc19pbmZvKHN0cnVjdCBtdDc5MTVf cGh5ICpwaHksDQorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGludCBlbmFibGUp Ow0KK2ludCBtdDc5MTVfbWN1X2FkZF9zdGEoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3Rh LCBib29sIGVuYWJsZSk7DQoraW50IG10NzkxNV9tY3VfYWRkX3R4X2JhKHN0cnVjdCBtdDc5MTVf ZGV2ICpkZXYsDQorCQkJIHN0cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMsDQor CQkJIGJvb2wgYWRkKTsNCitpbnQgbXQ3OTE1X21jdV9hZGRfcnhfYmEoc3RydWN0IG10NzkxNV9k ZXYgKmRldiwNCisJCQkgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcywNCisJ CQkgYm9vbCBhZGQpOw0KK2ludCBtdDc5MTVfbWN1X2FkZF9rZXkoc3RydWN0IG10NzkxNV9kZXYg KmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICAgICBzdHJ1Y3QgbXQ3OTE1 X3N0YSAqbXN0YSwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LA0KKwkJICAgICAgIGVu dW0gc2V0X2tleV9jbWQgY21kKTsNCitpbnQgbXQ3OTE1X21jdV9hZGRfYmVhY29uKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgaW50IGVu YWJsZSk7DQoraW50IG10NzkxNV9tY3VfYWRkX3JhdGVfY3RybChzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgICAgc3RydWN0IGllZWU4MDIx MV9zdGEgKnN0YSk7DQoraW50IG10NzkxNV9tY3VfYWRkX3NtcHMoc3RydWN0IG10NzkxNV9kZXYg KmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0 YSAqc3RhKTsNCitpbnQgbXQ3OTE1X21jdV9zZXRfY2hhbl9pbmZvKHN0cnVjdCBtdDc5MTVfcGh5 ICpwaHksIGludCBjbWQpOw0KK2ludCBtdDc5MTVfbWN1X3NldF90eChzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsNCitpbnQgbXQ3OTE1X21jdV9zZXRf ZWVwcm9tKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpOw0KK2ludCBtdDc5MTVfbWN1X2dldF9lZXBy b20oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG9mZnNldCk7DQoraW50IG10NzkxNV9tY3Vf c2V0X21hYyhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgYmFuZCwgYm9vbCBlbmFibGUsDQor CQkgICAgICAgYm9vbCBoZHJfdHJhbnMpOw0KK2ludCBtdDc5MTVfbWN1X3NldF9zY3Moc3RydWN0 IG10NzkxNV9kZXYgKmRldiwgdTggYmFuZCwgYm9vbCBlbmFibGUpOw0KK2ludCBtdDc5MTVfbWN1 X3NldF9zZXIoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTggYWN0aW9uLCB1OCBzZXQsIHU4IGJh bmQpOw0KK2ludCBtdDc5MTVfbWN1X3NldF9ydHNfdGhyZXNoKHN0cnVjdCBtdDc5MTVfcGh5ICpw aHksIHUzMiB2YWwpOw0KK2ludCBtdDc5MTVfbWN1X3NldF9wbShzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2LCBpbnQgYmFuZCwgaW50IGVudGVyKTsNCitpbnQgbXQ3OTE1X21jdV9zZXRfZmNjNV9scG4o c3RydWN0IG10NzkxNV9kZXYgKmRldiwgaW50IHZhbCk7DQoraW50IG10NzkxNV9tY3Vfc2V0X3B1 bHNlX3RoKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkJICAgIGNvbnN0IHN0cnVjdCBtdDc5 MTVfZGZzX3B1bHNlICpwdWxzZSk7DQoraW50IG10NzkxNV9tY3Vfc2V0X3JhZGFyX3RoKHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIGludCBpbmRleCwNCisJCQkgICAgY29uc3Qgc3RydWN0IG10Nzkx NV9kZnNfcGF0dGVybiAqcGF0dGVybik7DQoraW50IG10NzkxNV9tY3VfZ2V0X3JhdGVfaW5mbyhz dHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgY21kLCB1MTYgd2xhbl9pZHgpOw0KK2ludCBtdDc5 MTVfbWN1X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgaW5kZXgp Ow0KK2ludCBtdDc5MTVfbWN1X3JkZF9jbWQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgZW51bSBt dDc5MTVfcmRkX2NtZCBjbWQsDQorCQkgICAgICAgdTggaW5kZXgsIHU4IHJ4X3NlbCwgdTggdmFs KTsNCit2b2lkIG10NzkxNV9tY3VfcnhfZXZlbnQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3Ry dWN0IHNrX2J1ZmYgKnNrYik7DQordm9pZCBtdDc5MTVfbWN1X2V4aXQoc3RydWN0IG10NzkxNV9k ZXYgKmRldik7DQorDQorc3RhdGljIGlubGluZSBib29sIGlzX210NzkxNShzdHJ1Y3QgbXQ3Nl9k ZXYgKmRldikNCit7DQorCXJldHVybiBtdDc2X2NoaXAoZGV2KSA9PSAweDc5MTU7DQorfQ0KKw0K K3N0YXRpYyBpbmxpbmUgdm9pZCBtdDc5MTVfaXJxX2VuYWJsZShzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2LCB1MzIgbWFzaykNCit7DQorCW10NzZfc2V0X2lycV9tYXNrKCZkZXYtPm10NzYsIE1UX0lO VF9NQVNLX0NTUiwgMCwgbWFzayk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtdDc5MTVf aXJxX2Rpc2FibGUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG1hc2spDQorew0KKwltdDc2 X3NldF9pcnFfbWFzaygmZGV2LT5tdDc2LCBNVF9JTlRfTUFTS19DU1IsIG1hc2ssIDApOw0KK30N CisNCitzdGF0aWMgaW5saW5lIHUzMg0KK210NzkxNV9yZWdfbWFwX2wxKHN0cnVjdCBtdDc5MTVf ZGV2ICpkZXYsIHUzMiBhZGRyKQ0KK3sNCisJdTMyIG9mZnNldCA9IEZJRUxEX0dFVChNVF9ISUZf UkVNQVBfTDFfT0ZGU0VULCBhZGRyKTsNCisJdTMyIGJhc2UgPSBGSUVMRF9HRVQoTVRfSElGX1JF TUFQX0wxX0JBU0UsIGFkZHIpOw0KKw0KKwltdDc2X3Jtd19maWVsZChkZXYsIE1UX0hJRl9SRU1B UF9MMSwgTVRfSElGX1JFTUFQX0wxX01BU0ssIGJhc2UpOw0KKwkvKiB1c2UgcmVhZCB0byBwdXNo IHdyaXRlICovDQorCW10NzZfcnIoZGV2LCBNVF9ISUZfUkVNQVBfTDEpOw0KKw0KKwlyZXR1cm4g TVRfSElGX1JFTUFQX0JBU0VfTDEgKyBvZmZzZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdTMy DQorbXQ3OTE1X2wxX3JyKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBhZGRyKQ0KK3sNCisJ cmV0dXJuIG10NzZfcnIoZGV2LCBtdDc5MTVfcmVnX21hcF9sMShkZXYsIGFkZHIpKTsNCit9DQor DQorc3RhdGljIGlubGluZSB2b2lkDQorbXQ3OTE1X2wxX3dyKHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYsIHUzMiBhZGRyLCB1MzIgdmFsKQ0KK3sNCisJbXQ3Nl93cihkZXYsIG10NzkxNV9yZWdfbWFw X2wxKGRldiwgYWRkciksIHZhbCk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdTMyDQorbXQ3OTE1 X2wxX3JtdyhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgYWRkciwgdTMyIG1hc2ssIHUzMiB2 YWwpDQorew0KKwl2YWwgfD0gbXQ3OTE1X2wxX3JyKGRldiwgYWRkcikgJiB+bWFzazsNCisJbXQ3 OTE1X2wxX3dyKGRldiwgYWRkciwgdmFsKTsNCisNCisJcmV0dXJuIHZhbDsNCit9DQorDQorI2Rl ZmluZSBtdDc5MTVfbDFfc2V0KGRldiwgYWRkciwgdmFsKQltdDc5MTVfbDFfcm13KGRldiwgYWRk ciwgMCwgdmFsKQ0KKyNkZWZpbmUgbXQ3OTE1X2wxX2NsZWFyKGRldiwgYWRkciwgdmFsKQltdDc5 MTVfbDFfcm13KGRldiwgYWRkciwgdmFsLCAwKQ0KKw0KK3N0YXRpYyBpbmxpbmUgdTMyDQorbXQ3 OTE1X3JlZ19tYXBfbDIoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIGFkZHIpDQorew0KKwl1 MzIgb2Zmc2V0ID0gRklFTERfR0VUKE1UX0hJRl9SRU1BUF9MMl9PRkZTRVQsIGFkZHIpOw0KKwl1 MzIgYmFzZSA9IEZJRUxEX0dFVChNVF9ISUZfUkVNQVBfTDJfQkFTRSwgYWRkcik7DQorDQorCW10 NzZfcm13X2ZpZWxkKGRldiwgTVRfSElGX1JFTUFQX0wyLCBNVF9ISUZfUkVNQVBfTDJfTUFTSywg YmFzZSk7DQorCS8qIHVzZSByZWFkIHRvIHB1c2ggd3JpdGUgKi8NCisJbXQ3Nl9ycihkZXYsIE1U X0hJRl9SRU1BUF9MMik7DQorDQorCXJldHVybiBNVF9ISUZfUkVNQVBfQkFTRV9MMiArIG9mZnNl dDsNCit9DQorDQorc3RhdGljIGlubGluZSB1MzINCittdDc5MTVfbDJfcnIoc3RydWN0IG10Nzkx NV9kZXYgKmRldiwgdTMyIGFkZHIpDQorew0KKwlyZXR1cm4gbXQ3Nl9ycihkZXYsIG10NzkxNV9y ZWdfbWFwX2wyKGRldiwgYWRkcikpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQNCittdDc5 MTVfbDJfd3Ioc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIGFkZHIsIHUzMiB2YWwpDQorew0K KwltdDc2X3dyKGRldiwgbXQ3OTE1X3JlZ19tYXBfbDIoZGV2LCBhZGRyKSwgdmFsKTsNCit9DQor DQorc3RhdGljIGlubGluZSB1MzINCittdDc5MTVfbDJfcm13KHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYsIHUzMiBhZGRyLCB1MzIgbWFzaywgdTMyIHZhbCkNCit7DQorCXZhbCB8PSBtdDc5MTVfbDJf cnIoZGV2LCBhZGRyKSAmIH5tYXNrOw0KKwltdDc5MTVfbDJfd3IoZGV2LCBhZGRyLCB2YWwpOw0K Kw0KKwlyZXR1cm4gdmFsOw0KK30NCisNCisjZGVmaW5lIG10NzkxNV9sMl9zZXQoZGV2LCBhZGRy LCB2YWwpCW10NzkxNV9sMl9ybXcoZGV2LCBhZGRyLCAwLCB2YWwpDQorI2RlZmluZSBtdDc5MTVf bDJfY2xlYXIoZGV2LCBhZGRyLCB2YWwpCW10NzkxNV9sMl9ybXcoZGV2LCBhZGRyLCB2YWwsIDAp DQorDQorYm9vbCBtdDc5MTVfbWFjX3d0YmxfdXBkYXRlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYs IGludCBpZHgsIHUzMiBtYXNrKTsNCit2b2lkIG10NzkxNV9tYWNfcmVzZXRfY291bnRlcnMoc3Ry dWN0IG10NzkxNV9waHkgKnBoeSk7DQordm9pZCBtdDc5MTVfbWFjX2NjYV9zdGF0c19yZXNldChz dHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KTsNCit2b2lkIG10NzkxNV9tYWNfc3RhX3BvbGwoc3RydWN0 IG10NzkxNV9kZXYgKmRldik7DQordm9pZCBtdDc5MTVfbWFjX3dyaXRlX3R4d2koc3RydWN0IG10 NzkxNV9kZXYgKmRldiwgX19sZTMyICp0eHdpLA0KKwkJCSAgIHN0cnVjdCBza19idWZmICpza2Is IHN0cnVjdCBtdDc2X3djaWQgKndjaWQsDQorCQkJICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29u ZiAqa2V5LCBib29sIGJlYWNvbik7DQordm9pZCBtdDc5MTVfbWFjX3NldF90aW1pbmcoc3RydWN0 IG10NzkxNV9waHkgKnBoeSk7DQoraW50IG10NzkxNV9tYWNfZmlsbF9yeChzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsNCit2b2lkIG10NzkxNV9tYWNfdHhfZnJl ZShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsNCitpbnQgbXQ3 OTE1X21hY19zdGFfYWRkKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwNCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsNCit2b2lkIG10 NzkxNV9tYWNfc3RhX3JlbW92ZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsDQorCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7DQordm9pZCBt dDc5MTVfbWFjX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsNCit2b2lkIG10NzkxNV9t YWNfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOw0KK3ZvaWQgbXQ3OTE1X21h Y19zdGFfc3RhdHNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOw0KK2ludCBtdDc5MTVf dHhfcHJlcGFyZV9za2Ioc3RydWN0IG10NzZfZGV2ICptZGV2LCB2b2lkICp0eHdpX3B0ciwNCisJ CQkgIGVudW0gbXQ3Nl90eHFfaWQgcWlkLCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkLA0KKwkJCSAg c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwNCisJCQkgIHN0cnVjdCBtdDc2X3R4X2luZm8gKnR4 X2luZm8pOw0KK3ZvaWQgbXQ3OTE1X3R4X2NvbXBsZXRlX3NrYihzdHJ1Y3QgbXQ3Nl9kZXYgKm1k ZXYsIGVudW0gbXQ3Nl90eHFfaWQgcWlkLA0KKwkJCSAgICBzdHJ1Y3QgbXQ3Nl9xdWV1ZV9lbnRy eSAqZSk7DQordm9pZCBtdDc5MTVfcXVldWVfcnhfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRldiwg ZW51bSBtdDc2X3J4cV9pZCBxLA0KKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsNCit2b2lkIG10 NzkxNV9zdGFfcHMoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAq c3RhLCBib29sIHBzKTsNCit2b2lkIG10NzkxNV9zdGF0c193b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yayk7DQordm9pZCBtdDc5MTVfdHhwX3NrYl91bm1hcChzdHJ1Y3QgbXQ3Nl9kZXYgKmRl diwNCisJCQkgIHN0cnVjdCBtdDc2X3R4d2lfY2FjaGUgKnR4d2kpOw0KK2ludCBtdDc2X2Rmc19z dGFydF9yZGQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgYm9vbCBmb3JjZSk7DQoraW50IG10Nzkx NV9kZnNfaW5pdF9yYWRhcl9kZXRlY3RvcihzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KTsNCit2b2lk IG10NzkxNV91cGRhdGVfY2hhbm5lbChzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYpOw0KK2ludCBtdDc5 MTVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpOw0KKw0KKyNlbmRpZg0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3BjaS5j IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvcGNpLmMNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmI3OWI1MDYwY2Q3Nw0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUv cGNpLmMNCkBAIC0wLDAgKzEsMTY2IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElT Qw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuDQorICoNCisgKiBBdXRob3I6 IFJ5ZGVyIExlZSA8cnlkZXIubGVlQG1lZGlhdGVrLmNvbT4NCisgKi8NCisNCisjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxs aW51eC9wY2kuaD4NCisNCisjaW5jbHVkZSAibXQ3OTE1LmgiDQorI2luY2x1ZGUgIm1hYy5oIg0K KyNpbmNsdWRlICIuLi90cmFjZS5oIg0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldmlj ZV9pZCBtdDc5MTVfcGNpX2RldmljZV90YWJsZVtdID0gew0KKwl7IFBDSV9ERVZJQ0UoMHgxNGMz LCAweDc5MTUpIH0sDQorCXsgfSwNCit9Ow0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X3J4X3Bv bGxfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICptZGV2LCBlbnVtIG10NzZfcnhxX2lkIHEpDQor ew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gY29udGFpbmVyX29mKG1kZXYsIHN0cnVjdCBt dDc5MTVfZGV2LCBtdDc2KTsNCisNCisJbXQ3OTE1X2lycV9lbmFibGUoZGV2LCBNVF9JTlRfUlhf RE9ORShxKSk7DQorfQ0KKw0KKy8qIFRPRE86IHN1cHBvcnQgMi80LzYvOCBNU0ktWCB2ZWN0b3Jz ICovDQorc3RhdGljIGlycXJldHVybl90IG10NzkxNV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICpkZXZfaW5zdGFuY2UpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gZGV2X2luc3Rh bmNlOw0KKwl1MzIgaW50cjsNCisNCisJaW50ciA9IG10NzZfcnIoZGV2LCBNVF9JTlRfU09VUkNF X0NTUik7DQorCW10NzZfd3IoZGV2LCBNVF9JTlRfU09VUkNFX0NTUiwgaW50cik7DQorDQorCWlm ICghdGVzdF9iaXQoTVQ3Nl9TVEFURV9JTklUSUFMSVpFRCwgJmRldi0+bXBoeS5zdGF0ZSkpDQor CQlyZXR1cm4gSVJRX05PTkU7DQorDQorCXRyYWNlX2Rldl9pcnEoJmRldi0+bXQ3NiwgaW50ciwg ZGV2LT5tdDc2Lm1taW8uaXJxbWFzayk7DQorDQorCWludHIgJj0gZGV2LT5tdDc2Lm1taW8uaXJx bWFzazsNCisNCisJaWYgKGludHIgJiBNVF9JTlRfVFhfRE9ORV9BTEwpIHsNCisJCW10NzkxNV9p cnFfZGlzYWJsZShkZXYsIE1UX0lOVF9UWF9ET05FX0FMTCk7DQorCQluYXBpX3NjaGVkdWxlKCZk ZXYtPm10NzYudHhfbmFwaSk7DQorCX0NCisNCisJaWYgKGludHIgJiBNVF9JTlRfUlhfRE9ORV9E QVRBKSB7DQorCQltdDc5MTVfaXJxX2Rpc2FibGUoZGV2LCBNVF9JTlRfUlhfRE9ORV9EQVRBKTsN CisJCW5hcGlfc2NoZWR1bGUoJmRldi0+bXQ3Ni5uYXBpWzBdKTsNCisJfQ0KKw0KKwlpZiAoaW50 ciAmIE1UX0lOVF9SWF9ET05FX1dNKSB7DQorCQltdDc5MTVfaXJxX2Rpc2FibGUoZGV2LCBNVF9J TlRfUlhfRE9ORV9XTSk7DQorCQluYXBpX3NjaGVkdWxlKCZkZXYtPm10NzYubmFwaVsxXSk7DQor CX0NCisNCisJaWYgKGludHIgJiBNVF9JTlRfUlhfRE9ORV9XQSkgew0KKwkJbXQ3OTE1X2lycV9k aXNhYmxlKGRldiwgTVRfSU5UX1JYX0RPTkVfV0EpOw0KKwkJbmFwaV9zY2hlZHVsZSgmZGV2LT5t dDc2Lm5hcGlbMl0pOw0KKwl9DQorDQorCWlmIChpbnRyICYgTVRfSU5UX01DVV9DTUQpIHsNCisJ CXUzMiB2YWwgPSBtdDc2X3JyKGRldiwgTVRfTUNVX0NNRCk7DQorDQorCQltdDc2X3dyKGRldiwg TVRfTUNVX0NNRCwgdmFsKTsNCisJCWlmICh2YWwgJiBNVF9NQ1VfQ01EX0VSUk9SX01BU0spIHsN CisJCQlkZXYtPnJlc2V0X3N0YXRlID0gdmFsOw0KKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKG10 NzZfaHcoZGV2KSwgJmRldi0+cmVzZXRfd29yayk7DQorCQkJd2FrZV91cCgmZGV2LT5yZXNldF93 YWl0KTsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7DQorfQ0KKw0KK3N0YXRp YyBpbnQgbXQ3OTE1X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwNCisJCQkgICAgY29u c3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQ0KK3sNCisJc3RhdGljIGNvbnN0IHN0cnVjdCBt dDc2X2RyaXZlcl9vcHMgZHJ2X29wcyA9IHsNCisJCS8qIHR4d2lfc2l6ZSA9IHR4ZCBzaXplICsg dHhwIHNpemUgKi8NCisJCS50eHdpX3NpemUgPSBNVF9UWERfU0laRSArIHNpemVvZihzdHJ1Y3Qg bXQ3OTE1X3R4cCksDQorCQkuZHJ2X2ZsYWdzID0gTVRfRFJWX1RYV0lfTk9fRlJFRSwNCisJCS5z dXJ2ZXlfZmxhZ3MgPSBTVVJWRVlfSU5GT19USU1FX1RYIHwNCisJCQkJU1VSVkVZX0lORk9fVElN RV9SWCB8DQorCQkJCVNVUlZFWV9JTkZPX1RJTUVfQlNTX1JYLA0KKwkJLnR4X3ByZXBhcmVfc2ti ID0gbXQ3OTE1X3R4X3ByZXBhcmVfc2tiLA0KKwkJLnR4X2NvbXBsZXRlX3NrYiA9IG10NzkxNV90 eF9jb21wbGV0ZV9za2IsDQorCQkucnhfc2tiID0gbXQ3OTE1X3F1ZXVlX3J4X3NrYiwNCisJCS5y eF9wb2xsX2NvbXBsZXRlID0gbXQ3OTE1X3J4X3BvbGxfY29tcGxldGUsDQorCQkuc3RhX3BzID0g bXQ3OTE1X3N0YV9wcywNCisJCS5zdGFfYWRkID0gbXQ3OTE1X21hY19zdGFfYWRkLA0KKwkJLnN0 YV9yZW1vdmUgPSBtdDc5MTVfbWFjX3N0YV9yZW1vdmUsDQorCQkudXBkYXRlX3N1cnZleSA9IG10 NzkxNV91cGRhdGVfY2hhbm5lbCwNCisJfTsNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldjsNCisJ c3RydWN0IG10NzZfZGV2ICptZGV2Ow0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBwY2ltX2VuYWJs ZV9kZXZpY2UocGRldik7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSBw Y2ltX2lvbWFwX3JlZ2lvbnMocGRldiwgQklUKDApLCBwY2lfbmFtZShwZGV2KSk7DQorCWlmIChy ZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlwY2lfc2V0X21hc3RlcihwZGV2KTsNCisNCisJcmV0 ID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsNCisJaWYgKHJldCkN CisJCXJldHVybiByZXQ7DQorDQorCW1kZXYgPSBtdDc2X2FsbG9jX2RldmljZSgmcGRldi0+ZGV2 LCBzaXplb2YoKmRldiksICZtdDc5MTVfb3BzLA0KKwkJCQkgJmRydl9vcHMpOw0KKwlpZiAoIW1k ZXYpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJZGV2ID0gY29udGFpbmVyX29mKG1kZXYsIHN0 cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCisNCisJbXQ3Nl9tbWlvX2luaXQoJmRldi0+bXQ3Niwg cGNpbV9pb21hcF90YWJsZShwZGV2KVswXSk7DQorCW1kZXYtPnJldiA9IChtdDc5MTVfbDFfcnIo ZGV2LCBNVF9IV19DSElQSUQpIDw8IDE2KSB8DQorCQkgICAgKG10NzkxNV9sMV9ycihkZXYsIE1U X0hXX1JFVikgJiAweGZmKTsNCisJZGV2X2RiZyhtZGV2LT5kZXYsICJBU0lDIHJldmlzaW9uOiAl MDR4XG4iLCBtZGV2LT5yZXYpOw0KKw0KKwkvKiBtYXN0ZXIgc3dpdGNoIG9mIFBDSWUgdG50ZXJy dXB0IGVuYWJsZSAqLw0KKwltdDc5MTVfbDFfd3IoZGV2LCBNVF9QQ0lFX01BQ19JTlRfRU5BQkxF LCAweGZmKTsNCisNCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShtZGV2LT5kZXYsIHBkZXYtPmly cSwgbXQ3OTE1X2lycV9oYW5kbGVyLA0KKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgS0JVSUxEX01P RE5BTUUsIGRldik7DQorCWlmIChyZXQpDQorCQlnb3RvIGVycm9yOw0KKw0KKwlyZXQgPSBtdDc5 MTVfcmVnaXN0ZXJfZGV2aWNlKGRldik7DQorCWlmIChyZXQpDQorCQlnb3RvIGVycm9yOw0KKw0K KwlyZXR1cm4gMDsNCitlcnJvcjoNCisJaWVlZTgwMjExX2ZyZWVfaHcobXQ3Nl9odyhkZXYpKTsN CisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgbXQ3OTE1X3BjaV9yZW1vdmUoc3Ry dWN0IHBjaV9kZXYgKnBkZXYpDQorew0KKwlzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYgPSBwY2lfZ2V0 X2RydmRhdGEocGRldik7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBjb250YWluZXJfb2Yo bWRldiwgc3RydWN0IG10NzkxNV9kZXYsIG10NzYpOw0KKw0KKwltdDc5MTVfdW5yZWdpc3Rlcl9k ZXZpY2UoZGV2KTsNCit9DQorDQorc3RydWN0IHBjaV9kcml2ZXIgbXQ3OTE1X3BjaV9kcml2ZXIg PSB7DQorCS5uYW1lCQk9IEtCVUlMRF9NT0ROQU1FLA0KKwkuaWRfdGFibGUJPSBtdDc5MTVfcGNp X2RldmljZV90YWJsZSwNCisJLnByb2JlCQk9IG10NzkxNV9wY2lfcHJvYmUsDQorCS5yZW1vdmUJ CT0gbXQ3OTE1X3BjaV9yZW1vdmUsDQorfTsNCisNCittb2R1bGVfcGNpX2RyaXZlcihtdDc5MTVf cGNpX2RyaXZlcik7DQorDQorTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG10NzkxNV9wY2lfZGV2 aWNlX3RhYmxlKTsNCitNT0RVTEVfRklSTVdBUkUoTVQ3OTE1X0ZJUk1XQVJFX1dBKTsNCitNT0RV TEVfRklSTVdBUkUoTVQ3OTE1X0ZJUk1XQVJFX1dNKTsNCitNT0RVTEVfRklSTVdBUkUoTVQ3OTE1 X1JPTV9QQVRDSCk7DQorTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOw0KZGlmZiAtLWdp dCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3JlZ3MuaCBiL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3JlZ3MuaA0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uNTcyYmRjMTZmYjJkDQotLS0gL2Rldi9u dWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9yZWdz LmgNCkBAIC0wLDAgKzEsMzQ0IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQyAq Lw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuICovDQorDQorI2lmbmRlZiBf X01UNzkxNV9SRUdTX0gNCisjZGVmaW5lIF9fTVQ3OTE1X1JFR1NfSA0KKw0KKy8qIE1DVSBXRkRN QTEgKi8NCisjZGVmaW5lIE1UX01DVV9XRkRNQTFfQkFTRQkJMHgzMDAwDQorI2RlZmluZSBNVF9N Q1VfV0ZETUExKG9mcykJCShNVF9NQ1VfV0ZETUExX0JBU0UgKyAob2ZzKSkNCisNCisjZGVmaW5l IE1UX01DVV9JTlRfRVZFTlQJCU1UX01DVV9XRkRNQTEoMHgxMDgpDQorI2RlZmluZSBNVF9NQ1Vf SU5UX0VWRU5UX0RNQV9TVE9QUEVECUJJVCgwKQ0KKyNkZWZpbmUgTVRfTUNVX0lOVF9FVkVOVF9E TUFfSU5JVAlCSVQoMSkNCisjZGVmaW5lIE1UX01DVV9JTlRfRVZFTlRfU0VSX1RSSUdHRVIJQklU KDIpDQorI2RlZmluZSBNVF9NQ1VfSU5UX0VWRU5UX1JFU0VUX0RPTkUJQklUKDMpDQorDQorI2Rl ZmluZSBNVF9QTEVfQkFTRQkJCTB4ODAwMA0KKyNkZWZpbmUgTVRfUExFKG9mcykJCQkoTVRfUExF X0JBU0UgKyAob2ZzKSkNCisNCisjZGVmaW5lIE1UX1BMRV9GTF9RMF9DVFJMCQlNVF9QTEUoMHgx YjApDQorI2RlZmluZSBNVF9QTEVfRkxfUTFfQ1RSTAkJTVRfUExFKDB4MWI0KQ0KKyNkZWZpbmUg TVRfUExFX0ZMX1EyX0NUUkwJCU1UX1BMRSgweDFiOCkNCisjZGVmaW5lIE1UX1BMRV9GTF9RM19D VFJMCQlNVF9QTEUoMHgxYmMpDQorDQorI2RlZmluZSBNVF9QTEVfQUNfUUVNUFRZKGFjLCBuKQkJ TVRfUExFKDB4MzAwICsgMHgxMCAqIChhYykgKyBcDQorCQkJCQkgICAgICAgKChuKSA8PCAyKSkN CisjZGVmaW5lIE1UX1BMRV9BTVNEVV9QQUNLX01TRFVfQ05UKG4pCU1UX1BMRSgweDEwZTAgKyAo KG4pIDw8IDIpKQ0KKw0KKyNkZWZpbmUgTVRfTURQX0JBU0UJCQkweGYwMDANCisjZGVmaW5lIE1U X01EUChvZnMpCQkJKE1UX01EUF9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9NRFBfRENS MAkJCU1UX01EUCgweDAwMCkNCisjZGVmaW5lIE1UX01EUF9EQ1IwX0RBTVNEVV9FTgkJQklUKDE1 KQ0KKw0KKyNkZWZpbmUgTVRfTURQX0RDUjEJCQlNVF9NRFAoMHgwMDQpDQorI2RlZmluZSBNVF9N RFBfRENSMV9NQVhfUlhfTEVOCQlHRU5NQVNLKDE1LCAzKQ0KKw0KKyNkZWZpbmUgTVRfTURQX0JO UkNGUjAoX2JhbmQpCQlNVF9NRFAoMHgwNzAgKyAoKF9iYW5kKSA8PCA4KSkNCisjZGVmaW5lIE1U X01EUF9SQ0ZSMF9NQ1VfUlhfTUdNVAlHRU5NQVNLKDUsIDQpDQorI2RlZmluZSBNVF9NRFBfUkNG UjBfTUNVX1JYX0NUTF9OT05fQkFSCUdFTk1BU0soNywgNikNCisjZGVmaW5lIE1UX01EUF9SQ0ZS MF9NQ1VfUlhfQ1RMX0JBUglHRU5NQVNLKDksIDgpDQorDQorI2RlZmluZSBNVF9NRFBfQk5SQ0ZS MShfYmFuZCkJCU1UX01EUCgweDA3NCArICgoX2JhbmQpIDw8IDgpKQ0KKyNkZWZpbmUgTVRfTURQ X1JDRlIxX01DVV9SWF9CWVBBU1MJR0VOTUFTSygyMywgMjIpDQorI2RlZmluZSBNVF9NRFBfUkNG UjFfUlhfRFJPUFBFRF9VQ0FTVAlHRU5NQVNLKDI4LCAyNykNCisjZGVmaW5lIE1UX01EUF9SQ0ZS MV9SWF9EUk9QUEVEX01DQVNUCUdFTk1BU0soMzAsIDI5KQ0KKyNkZWZpbmUgTVRfTURQX1RPX0hJ RgkJCTANCisjZGVmaW5lIE1UX01EUF9UT19XTQkJCTENCisNCisvKiBUTUFDOiBiYW5kIDAoMHgy MTAwMCksIGJhbmQgMSgweGExMDAwKSAqLw0KKyNkZWZpbmUgTVRfV0ZfVE1BQ19CQVNFKF9iYW5k KQkJKChfYmFuZCkgPyAweGExMDAwIDogMHgyMTAwMCkNCisjZGVmaW5lIE1UX1dGX1RNQUMoX2Jh bmQsIG9mcykJCShNVF9XRl9UTUFDX0JBU0UoX2JhbmQpICsgKG9mcykpDQorDQorI2RlZmluZSBN VF9UTUFDX0NEVFIoX2JhbmQpCQlNVF9XRl9UTUFDKF9iYW5kLCAweDA5MCkNCisjZGVmaW5lIE1U X1RNQUNfT0RUUihfYmFuZCkJCU1UX1dGX1RNQUMoX2JhbmQsIDB4MDk0KQ0KKyNkZWZpbmUgTVRf VElNRU9VVF9WQUxfUExDUAkJR0VOTUFTSygxNSwgMCkNCisjZGVmaW5lIE1UX1RJTUVPVVRfVkFM X0NDQQkJR0VOTUFTSygzMSwgMTYpDQorDQorI2RlZmluZSBNVF9UTUFDX0lDUjAoX2JhbmQpCQlN VF9XRl9UTUFDKF9iYW5kLCAweDBhNCkNCisjZGVmaW5lIE1UX0lGU19FSUZTCQkJR0VOTUFTSyg4 LCAwKQ0KKyNkZWZpbmUgTVRfSUZTX1JJRlMJCQlHRU5NQVNLKDE0LCAxMCkNCisjZGVmaW5lIE1U X0lGU19TSUZTCQkJR0VOTUFTSygyMiwgMTYpDQorI2RlZmluZSBNVF9JRlNfU0xPVAkJCUdFTk1B U0soMzAsIDI0KQ0KKw0KKyNkZWZpbmUgTVRfVE1BQ19DVENSMChfYmFuZCkJCQlNVF9XRl9UTUFD KF9iYW5kLCAweDBmNCkNCisjZGVmaW5lIE1UX1RNQUNfQ1RDUjBfSU5TX0RETE1UX1JFRlRJTUUJ CUdFTk1BU0soNSwgMCkNCisjZGVmaW5lIE1UX1RNQUNfQ1RDUjBfSU5TX0RETE1UX0VOCQlCSVQo MTcpDQorI2RlZmluZSBNVF9UTUFDX0NUQ1IwX0lOU19ERExNVF9WSFRfU01QRFVfRU4JQklUKDE4 KQ0KKw0KKy8qIERNQSBCYW5kIDAgKi8NCisjZGVmaW5lIE1UX1dGX0RNQV9CQVNFCQkJMHgyMWUw MA0KKyNkZWZpbmUgTVRfV0ZfRE1BKG9mcykJCQkoTVRfV0ZfRE1BX0JBU0UgKyAob2ZzKSkNCisN CisjZGVmaW5lIE1UX0RNQV9EQ1IwCQkJTVRfV0ZfRE1BKDB4MDAwKQ0KKyNkZWZpbmUgTVRfRE1B X0RDUjBfTUFYX1JYX0xFTgkJR0VOTUFTSygxNSwgMykNCisjZGVmaW5lIE1UX0RNQV9EQ1IwX1JY RF9HNV9FTgkJQklUKDIzKQ0KKw0KKy8qIE1JQjogYmFuZCAwKDB4MjQ4MDApLCBiYW5kIDEoMHhh NDgwMCkgKi8NCisjZGVmaW5lIE1UX1dGX01JQl9CQVNFKF9iYW5kKQkJKChfYmFuZCkgPyAweGE0 ODAwIDogMHgyNDgwMCkNCisjZGVmaW5lIE1UX1dGX01JQihfYmFuZCwgb2ZzKQkJKE1UX1dGX01J Ql9CQVNFKF9iYW5kKSArIChvZnMpKQ0KKw0KKyNkZWZpbmUgTVRfTUlCX1NEUjMoX2JhbmQpCQlN VF9XRl9NSUIoX2JhbmQsIDB4MDE0KQ0KKyNkZWZpbmUgTVRfTUlCX1NEUjNfRkNTX0VSUl9NQVNL CUdFTk1BU0soMTUsIDApDQorDQorI2RlZmluZSBNVF9NSUJfU0RSOShfYmFuZCkJCU1UX1dGX01J QihfYmFuZCwgMHgwMmMpDQorI2RlZmluZSBNVF9NSUJfU0RSOV9CVVNZX01BU0sJCUdFTk1BU0so MjMsIDApDQorDQorI2RlZmluZSBNVF9NSUJfU0RSMTYoX2JhbmQpCQlNVF9XRl9NSUIoX2JhbmQs IDB4MDQ4KQ0KKyNkZWZpbmUgTVRfTUlCX1NEUjE2X0JVU1lfTUFTSwkJR0VOTUFTSygyMywgMCkN CisNCisjZGVmaW5lIE1UX01JQl9TRFIzNihfYmFuZCkJCU1UX1dGX01JQihfYmFuZCwgMHgwOTgp DQorI2RlZmluZSBNVF9NSUJfU0RSMzZfVFhUSU1FX01BU0sJR0VOTUFTSygyMywgMCkNCisjZGVm aW5lIE1UX01JQl9TRFIzNyhfYmFuZCkJCU1UX1dGX01JQihfYmFuZCwgMHgwOWMpDQorI2RlZmlu ZSBNVF9NSUJfU0RSMzdfUlhUSU1FX01BU0sJR0VOTUFTSygyMywgMCkNCisNCisjZGVmaW5lIE1U X01JQl9NQl9TRFIwKF9iYW5kLCBuKQlNVF9XRl9NSUIoX2JhbmQsIDB4MTAwICsgKChuKSA8PCA0 KSkNCisjZGVmaW5lIE1UX01JQl9SVFNfUkVUUklFU19DT1VOVF9NQVNLCUdFTk1BU0soMzEsIDE2 KQ0KKyNkZWZpbmUgTVRfTUlCX1JUU19DT1VOVF9NQVNLCQlHRU5NQVNLKDE1LCAwKQ0KKw0KKyNk ZWZpbmUgTVRfTUlCX01CX1NEUjEoX2JhbmQsIG4pCU1UX1dGX01JQihfYmFuZCwgMHgxMDQgKyAo KG4pIDw8IDQpKQ0KKyNkZWZpbmUgTVRfTUlCX0JBX01JU1NfQ09VTlRfTUFTSwlHRU5NQVNLKDE1 LCAwKQ0KKyNkZWZpbmUgTVRfTUlCX0FDS19GQUlMX0NPVU5UX01BU0sJR0VOTUFTSygzMSwgMTYp DQorDQorI2RlZmluZSBNVF9NSUJfTUJfU0RSMihfYmFuZCwgbikJTVRfV0ZfTUlCKF9iYW5kLCAw eDEwOCArICgobikgPDwgNCkpDQorI2RlZmluZSBNVF9NSUJfRlJBTUVfUkVUUklFU19DT1VOVF9N QVNLCUdFTk1BU0soMTUsIDApDQorDQorI2RlZmluZSBNVF9UWF9BR0dfQ05UKF9iYW5kLCBuKQkJ TVRfV0ZfTUlCKF9iYW5kLCAweDBhOCArICgobikgPDwgMikpDQorI2RlZmluZSBNVF9UWF9BR0df Q05UMihfYmFuZCwgbikJTVRfV0ZfTUlCKF9iYW5kLCAweDE2NCArICgobikgPDwgMikpDQorI2Rl ZmluZSBNVF9NSUJfQVJORyhfYmFuZCwgbikJCU1UX1dGX01JQihfYmFuZCwgMHg0YjggKyAoKG4p IDw8IDIpKQ0KKyNkZWZpbmUgTVRfTUlCX0FSTkNSX1JBTkdFKHZhbCwgbikJKCgodmFsKSA+PiAo KG4pIDw8IDMpKSAmIEdFTk1BU0soNywgMCkpDQorDQorI2RlZmluZSBNVF9XVEJMT05fVE9QX0JB U0UJCTB4MzQwMDANCisjZGVmaW5lIE1UX1dUQkxPTl9UT1Aob2ZzKQkJKE1UX1dUQkxPTl9UT1Bf QkFTRSArIChvZnMpKQ0KKyNkZWZpbmUgTVRfV1RCTE9OX1RPUF9XRFVDUgkJTVRfV1RCTE9OX1RP UCgweDApDQorI2RlZmluZSBNVF9XVEJMT05fVE9QX1dEVUNSX0dST1VQCUdFTk1BU0soMiwgMCkN CisNCisjZGVmaW5lIE1UX1dUQkxfVVBEQVRFCQkJTVRfV1RCTE9OX1RPUCgweDAzMCkNCisjZGVm aW5lIE1UX1dUQkxfVVBEQVRFX1dMQU5fSURYCQlHRU5NQVNLKDksIDApDQorI2RlZmluZSBNVF9X VEJMX1VQREFURV9BRE1fQ09VTlRfQ0xFQVIJQklUKDEyKQ0KKyNkZWZpbmUgTVRfV1RCTF9VUERB VEVfQlVTWQkJQklUKDMxKQ0KKw0KKyNkZWZpbmUgTVRfV1RCTF9CQVNFCQkJMHgzODAwMA0KKyNk ZWZpbmUgTVRfV1RCTF9MTUFDX0lECQkJR0VOTUFTSygxNCwgOCkNCisjZGVmaW5lIE1UX1dUQkxf TE1BQ19EVwkJCUdFTk1BU0soNywgMikNCisjZGVmaW5lIE1UX1dUQkxfTE1BQ19PRkZTKF9pZCwg X2R3KQkoTVRfV1RCTF9CQVNFIHwgXA0KKwkJCQkJRklFTERfUFJFUChNVF9XVEJMX0xNQUNfSUQs IF9pZCkgfCBcDQorCQkJCQlGSUVMRF9QUkVQKE1UX1dUQkxfTE1BQ19EVywgX2R3KSkNCisNCisv KiBBR0c6IGJhbmQgMCgweDIwODAwKSwgYmFuZCAxKDB4YTA4MDApICovDQorI2RlZmluZSBNVF9X Rl9BR0dfQkFTRShfYmFuZCkJCSgoX2JhbmQpID8gMHhhMDgwMCA6IDB4MjA4MDApDQorI2RlZmlu ZSBNVF9XRl9BR0coX2JhbmQsIG9mcykJCShNVF9XRl9BR0dfQkFTRShfYmFuZCkgKyAob2ZzKSkN CisNCisjZGVmaW5lIE1UX0FHR19BQ1IwKF9iYW5kKQkJTVRfV0ZfQUdHKF9iYW5kLCAweDA4NCkN CisjZGVmaW5lIE1UX0FHR19BQ1JfQ0ZFTkRfUkFURQkJR0VOTUFTSygxMywgMCkNCisjZGVmaW5l IE1UX0FHR19BQ1JfQkFSX1JBVEUJCUdFTk1BU0soMjksIDE2KQ0KKw0KKy8qIEFSQjogYmFuZCAw KDB4MjBjMDApLCBiYW5kIDEoMHhhMGMwMCkgKi8NCisjZGVmaW5lIE1UX1dGX0FSQl9CQVNFKF9i YW5kKQkJKChfYmFuZCkgPyAweGEwYzAwIDogMHgyMGMwMCkNCisjZGVmaW5lIE1UX1dGX0FSQihf YmFuZCwgb2ZzKQkJKE1UX1dGX0FSQl9CQVNFKF9iYW5kKSArIChvZnMpKQ0KKw0KKyNkZWZpbmUg TVRfQVJCX1NDUihfYmFuZCkJCU1UX1dGX0FSQihfYmFuZCwgMHgwODApDQorI2RlZmluZSBNVF9B UkJfU0NSX1RYX0RJU0FCTEUJCUJJVCg4KQ0KKyNkZWZpbmUgTVRfQVJCX1NDUl9SWF9ESVNBQkxF CQlCSVQoOSkNCisNCisvKiBSTUFDOiBiYW5kIDAoMHgyMTQwMCksIGJhbmQgMSgweGExNDAwKSAq Lw0KKyNkZWZpbmUgTVRfV0ZfUk1BQ19CQVNFKF9iYW5kKQkJKChfYmFuZCkgPyAweGExNDAwIDog MHgyMTQwMCkNCisjZGVmaW5lIE1UX1dGX1JNQUMoX2JhbmQsIG9mcykJCShNVF9XRl9STUFDX0JB U0UoX2JhbmQpICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9XRl9SRkNSKF9iYW5kKQkJTVRfV0Zf Uk1BQyhfYmFuZCwgMHgwMDApDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfU1RCQ19NVUxUSQlC SVQoMCkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9GQ1NGQUlMCQlCSVQoMSkNCisjZGVmaW5l IE1UX1dGX1JGQ1JfRFJPUF9WRVJTSU9OCQlCSVQoMykNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJP UF9QUk9CRVJFUQlCSVQoNCkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9NQ0FTVAkJQklUKDUp DQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfQkNBU1QJCUJJVCg2KQ0KKyNkZWZpbmUgTVRfV0Zf UkZDUl9EUk9QX01DQVNUX0ZJTFRFUkVECUJJVCg3KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9Q X0EzX01BQwkJQklUKDgpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfQTNfQlNTSUQJQklUKDkp DQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfQTJfQlNTSUQJQklUKDEwKQ0KKyNkZWZpbmUgTVRf V0ZfUkZDUl9EUk9QX09USEVSX0JFQUNPTglCSVQoMTEpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RS T1BfRlJBTUVfUkVQT1JUCUJJVCgxMikNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9DVExfUlNW CQlCSVQoMTMpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfQ1RTCQlCSVQoMTQpDQorI2RlZmlu ZSBNVF9XRl9SRkNSX0RST1BfUlRTCQlCSVQoMTUpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1Bf RFVQTElDQVRFCUJJVCgxNikNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9PVEhFUl9CU1MJQklU KDE3KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX09USEVSX1VDCUJJVCgxOCkNCisjZGVmaW5l IE1UX1dGX1JGQ1JfRFJPUF9PVEhFUl9USU0JQklUKDE5KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9E Uk9QX05EUEEJCUJJVCgyMCkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9VTldBTlRFRF9DVEwJ QklUKDIxKQ0KKw0KKyNkZWZpbmUgTVRfV0ZfUkZDUjEoX2JhbmQpCQlNVF9XRl9STUFDKF9iYW5k LCAweDAwNCkNCisjZGVmaW5lIE1UX1dGX1JGQ1IxX0RST1BfQUNLCQlCSVQoNCkNCisjZGVmaW5l IE1UX1dGX1JGQ1IxX0RST1BfQkZfUE9MTAlCSVQoNSkNCisjZGVmaW5lIE1UX1dGX1JGQ1IxX0RS T1BfQkEJCUJJVCg2KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUjFfRFJPUF9DRkVORAkJQklUKDcpDQor I2RlZmluZSBNVF9XRl9SRkNSMV9EUk9QX0NGQUNLCQlCSVQoOCkNCisNCisjZGVmaW5lIE1UX1dG X1JNQUNfTUlCX1RJTUUwKF9iYW5kKQlNVF9XRl9STUFDKF9iYW5kLCAweDAzYzQpDQorI2RlZmlu ZSBNVF9XRl9STUFDX01JQl9SWFRJTUVfQ0xSCUJJVCgzMSkNCisjZGVmaW5lIE1UX1dGX1JNQUNf TUlCX1JYVElNRV9FTglCSVQoMzApDQorDQorI2RlZmluZSBNVF9XRl9STUFDX01JQl9BSVJUSU1F MTQoX2JhbmQpCU1UX1dGX1JNQUMoX2JhbmQsIDB4MDNiOCkNCisjZGVmaW5lIE1UX01JQl9PQlNT VElNRV9NQVNLCQlHRU5NQVNLKDIzLCAwKQ0KKyNkZWZpbmUgTVRfV0ZfUk1BQ19NSUJfQUlSVElN RTAoX2JhbmQpCU1UX1dGX1JNQUMoX2JhbmQsIDB4MDM4MCkNCisNCisvKiBXRkRNQTAgKi8NCisj ZGVmaW5lIE1UX1dGRE1BMF9CQVNFCQkJMHhkNDAwMA0KKyNkZWZpbmUgTVRfV0ZETUEwKG9mcykJ CQkoTVRfV0ZETUEwX0JBU0UgKyAob2ZzKSkNCisNCisjZGVmaW5lIE1UX1dGRE1BMF9SU1QJCQlN VF9XRkRNQTAoMHgxMDApDQorI2RlZmluZSBNVF9XRkRNQTBfUlNUX0xPR0lDX1JTVAkJQklUKDQp DQorI2RlZmluZSBNVF9XRkRNQTBfUlNUX0RNQVNIRExfQUxMX1JTVAlCSVQoNSkNCisNCisjZGVm aW5lIE1UX1dGRE1BMF9CVVNZX0VOQQkJTVRfV0ZETUEwKDB4MTNjKQ0KKyNkZWZpbmUgTVRfV0ZE TUEwX0JVU1lfRU5BX1RYX0ZJRk8wCUJJVCgwKQ0KKyNkZWZpbmUgTVRfV0ZETUEwX0JVU1lfRU5B X1RYX0ZJRk8xCUJJVCgxKQ0KKyNkZWZpbmUgTVRfV0ZETUEwX0JVU1lfRU5BX1JYX0ZJRk8JQklU KDIpDQorDQorI2RlZmluZSBNVF9XRkRNQTBfR0xPX0NGRwkJTVRfV0ZETUEwKDB4MjA4KQ0KKyNk ZWZpbmUgTVRfV0ZETUEwX0dMT19DRkdfVFhfRE1BX0VOCUJJVCgwKQ0KKyNkZWZpbmUgTVRfV0ZE TUEwX0dMT19DRkdfUlhfRE1BX0VOCUJJVCgyKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUEwX1JTVF9E VFhfUFRSCQlNVF9XRkRNQTAoMHgyMGMpDQorI2RlZmluZSBNVF9XRkRNQTBfUFJJX0RMWV9JTlRf Q0ZHMAlNVF9XRkRNQTAoMHgyZjApDQorDQorI2RlZmluZSBNVF9SWF9EQVRBX1JJTkdfQkFTRQkJ TVRfV0ZETUEwKDB4NTAwKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUEwX1JYX1JJTkcwX0VYVF9DVFJM CU1UX1dGRE1BMCgweDY4MCkNCisjZGVmaW5lIE1UX1dGRE1BMF9SWF9SSU5HMV9FWFRfQ1RSTAlN VF9XRkRNQTAoMHg2ODQpDQorI2RlZmluZSBNVF9XRkRNQTBfUlhfUklORzJfRVhUX0NUUkwJTVRf V0ZETUEwKDB4Njg4KQ0KKw0KKy8qIFdGRE1BMSAqLw0KKyNkZWZpbmUgTVRfV0ZETUExX0JBU0UJ CQkweGQ1MDAwDQorI2RlZmluZSBNVF9XRkRNQTEob2ZzKQkJCShNVF9XRkRNQTFfQkFTRSArIChv ZnMpKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUExX1JTVAkJCU1UX1dGRE1BMSgweDEwMCkNCisjZGVm aW5lIE1UX1dGRE1BMV9SU1RfTE9HSUNfUlNUCQlCSVQoNCkNCisjZGVmaW5lIE1UX1dGRE1BMV9S U1RfRE1BU0hETF9BTExfUlNUCUJJVCg1KQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUExX0JVU1lfRU5B CQlNVF9XRkRNQTEoMHgxM2MpDQorI2RlZmluZSBNVF9XRkRNQTFfQlVTWV9FTkFfVFhfRklGTzAJ QklUKDApDQorI2RlZmluZSBNVF9XRkRNQTFfQlVTWV9FTkFfVFhfRklGTzEJQklUKDEpDQorI2Rl ZmluZSBNVF9XRkRNQTFfQlVTWV9FTkFfUlhfRklGTwlCSVQoMikNCisNCisjZGVmaW5lIE1UX01D VV9DTUQJCQlNVF9XRkRNQTEoMHgxZjApDQorI2RlZmluZSBNVF9NQ1VfQ01EX1NUT1BfRE1BX0ZX X1JFTE9BRAlCSVQoMSkNCisjZGVmaW5lIE1UX01DVV9DTURfU1RPUF9ETUEJCUJJVCgyKQ0KKyNk ZWZpbmUgTVRfTUNVX0NNRF9SRVNFVF9ET05FCQlCSVQoMykNCisjZGVmaW5lIE1UX01DVV9DTURf UkVDT1ZFUllfRE9ORQlCSVQoNCkNCisjZGVmaW5lIE1UX01DVV9DTURfTk9STUFMX1NUQVRFCQlC SVQoNSkNCisjZGVmaW5lIE1UX01DVV9DTURfRVJST1JfTUFTSwkJR0VOTUFTSyg1LCAxKQ0KKw0K KyNkZWZpbmUgTVRfV0ZETUExX0dMT19DRkcJCU1UX1dGRE1BMSgweDIwOCkNCisjZGVmaW5lIE1U X1dGRE1BMV9HTE9fQ0ZHX1RYX0RNQV9FTglCSVQoMCkNCisjZGVmaW5lIE1UX1dGRE1BMV9HTE9f Q0ZHX1JYX0RNQV9FTglCSVQoMikNCisjZGVmaW5lIE1UX1dGRE1BMV9HTE9fQ0ZHX09NSVRfVFhf SU5GTwlCSVQoMjgpDQorI2RlZmluZSBNVF9XRkRNQTFfR0xPX0NGR19PTUlUX1JYX0lORk8JQklU KDI3KQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUExX1JTVF9EVFhfUFRSCQlNVF9XRkRNQTEoMHgyMGMp DQorI2RlZmluZSBNVF9XRkRNQTFfUFJJX0RMWV9JTlRfQ0ZHMAlNVF9XRkRNQTEoMHgyZjApDQor DQorI2RlZmluZSBNVF9UWF9SSU5HX0JBU0UJCQlNVF9XRkRNQTEoMHgzMDApDQorI2RlZmluZSBN VF9SWF9FVkVOVF9SSU5HX0JBU0UJCU1UX1dGRE1BMSgweDUwMCkNCisNCisjZGVmaW5lIE1UX1dG RE1BMV9UWF9SSU5HMF9FWFRfQ1RSTAlNVF9XRkRNQTEoMHg2MDApDQorI2RlZmluZSBNVF9XRkRN QTFfVFhfUklORzFfRVhUX0NUUkwJTVRfV0ZETUExKDB4NjA0KQ0KKyNkZWZpbmUgTVRfV0ZETUEx X1RYX1JJTkcyX0VYVF9DVFJMCU1UX1dGRE1BMSgweDYwOCkNCisjZGVmaW5lIE1UX1dGRE1BMV9U WF9SSU5HM19FWFRfQ1RSTAlNVF9XRkRNQTEoMHg2MGMpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhf UklORzRfRVhUX0NUUkwJTVRfV0ZETUExKDB4NjEwKQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJ Tkc1X0VYVF9DVFJMCU1UX1dGRE1BMSgweDYxNCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5H Nl9FWFRfQ1RSTAlNVF9XRkRNQTEoMHg2MTgpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzdf RVhUX0NUUkwJTVRfV0ZETUExKDB4NjFjKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkcx Nl9FWFRfQ1RSTAlNVF9XRkRNQTEoMHg2NDApDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzE3 X0VYVF9DVFJMCU1UX1dGRE1BMSgweDY0NCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMThf RVhUX0NUUkwJTVRfV0ZETUExKDB4NjQ4KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkcxOV9F WFRfQ1RSTAlNVF9XRkRNQTEoMHg2NGMpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzIwX0VY VF9DVFJMCU1UX1dGRE1BMSgweDY1MCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMjFfRVhU X0NUUkwJTVRfV0ZETUExKDB4NjU0KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkcyMl9FWFRf Q1RSTAlNVF9XRkRNQTEoMHg2NTgpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzIzX0VYVF9D VFJMCU1UX1dGRE1BMSgweDY1YykNCisNCisjZGVmaW5lIE1UX1dGRE1BMV9SWF9SSU5HMF9FWFRf Q1RSTAlNVF9XRkRNQTEoMHg2ODApDQorI2RlZmluZSBNVF9XRkRNQTFfUlhfUklORzFfRVhUX0NU UkwJTVRfV0ZETUExKDB4Njg0KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1JYX1JJTkcyX0VYVF9DVFJM CU1UX1dGRE1BMSgweDY4OCkNCisjZGVmaW5lIE1UX1dGRE1BMV9SWF9SSU5HM19FWFRfQ1RSTAlN VF9XRkRNQTEoMHg2OGMpDQorDQorLyogV0ZETUEgQ1NSICovDQorI2RlZmluZSBNVF9XRkRNQV9F WFRfQ1NSX0JBU0UJCTB4ZDcwMDANCisjZGVmaW5lIE1UX1dGRE1BX0VYVF9DU1Iob2ZzKQkJKE1U X1dGRE1BX0VYVF9DU1JfQkFTRSArIChvZnMpKQ0KKw0KKyNkZWZpbmUgTVRfSU5UX1NPVVJDRV9D U1IJCU1UX1dGRE1BX0VYVF9DU1IoMHgxMCkNCisjZGVmaW5lIE1UX0lOVF9NQVNLX0NTUgkJCU1U X1dGRE1BX0VYVF9DU1IoMHgxNCkNCisjZGVmaW5lIE1UX0lOVF9SWF9ET05FX0RBVEEJCUJJVCgx NikNCisjZGVmaW5lIE1UX0lOVF9SWF9ET05FX1dNCQlCSVQoMCkNCisjZGVmaW5lIE1UX0lOVF9S WF9ET05FX1dBCQlCSVQoMSkNCisjZGVmaW5lIE1UX0lOVF9SWF9ET05FKF9uKQkJKChfbikgPyBC SVQoKF9uKSAtIDEpIDogQklUKDE2KSkNCisjZGVmaW5lIE1UX0lOVF9SWF9ET05FX0FMTAkJKEJJ VCgwKSB8IEJJVCgxKSB8IEJJVCgxNikpDQorI2RlZmluZSBNVF9JTlRfVFhfRE9ORV9BTEwJCShC SVQoMTUpIHwgR0VOTUFTSygyNywgMjYpIHwgQklUKDMwKSkNCisjZGVmaW5lIE1UX0lOVF9NQ1Vf Q01ECQkJQklUKDI5KQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUFfRVhUX0NTUl9ISUZfTUlTQwlNVF9X RkRNQV9FWFRfQ1NSKDB4NDQpDQorI2RlZmluZSBNVF9XRkRNQV9FWFRfQ1NSX0hJRl9NSVNDX0JV U1kJQklUKDApDQorDQorLyogV0ZETUEwIFBDSUUxICovDQorI2RlZmluZSBNVF9XRkRNQTBfUENJ RTFfQkFTRQkJCTB4ZDgwMDANCisjZGVmaW5lIE1UX1dGRE1BMF9QQ0lFMShvZnMpCQkJKE1UX1dG RE1BMF9QQ0lFMV9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9XRkRNQTBfUENJRTFfQlVT WV9FTkEJCU1UX1dGRE1BMF9QQ0lFMSgweDEzYykNCisjZGVmaW5lIE1UX1dGRE1BMF9QQ0lFMV9C VVNZX0VOQV9UWF9GSUZPMAlCSVQoMCkNCisjZGVmaW5lIE1UX1dGRE1BMF9QQ0lFMV9CVVNZX0VO QV9UWF9GSUZPMQlCSVQoMSkNCisjZGVmaW5lIE1UX1dGRE1BMF9QQ0lFMV9CVVNZX0VOQV9SWF9G SUZPCUJJVCgyKQ0KKw0KKy8qIFdGRE1BMSBQQ0lFMSAqLw0KKyNkZWZpbmUgTVRfV0ZETUExX1BD SUUxX0JBU0UJCQkweGQ5MDAwDQorI2RlZmluZSBNVF9XRkRNQTFfUENJRTEob2ZzKQkJCShNVF9X RkRNQTBfUENJRTFfQkFTRSArIChvZnMpKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUExX1BDSUUxX0JV U1lfRU5BCQlNVF9XRkRNQTFfUENJRTEoMHgxM2MpDQorI2RlZmluZSBNVF9XRkRNQTFfUENJRTFf QlVTWV9FTkFfVFhfRklGTzAJQklUKDApDQorI2RlZmluZSBNVF9XRkRNQTFfUENJRTFfQlVTWV9F TkFfVFhfRklGTzEJQklUKDEpDQorI2RlZmluZSBNVF9XRkRNQTFfUENJRTFfQlVTWV9FTkFfUlhf RklGTwlCSVQoMikNCisNCisjZGVmaW5lIE1UX0lORlJBX0NGR19CQVNFCQkweGYxMDAwDQorI2Rl ZmluZSBNVF9JTkZSQShvZnMpCQkJKE1UX0lORlJBX0NGR19CQVNFICsgKG9mcykpDQorDQorI2Rl ZmluZSBNVF9ISUZfUkVNQVBfTDEJCQlNVF9JTkZSQSgweDFhYykNCisjZGVmaW5lIE1UX0hJRl9S RU1BUF9MMV9NQVNLCQlHRU5NQVNLKDE1LCAwKQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wxX09G RlNFVAkJR0VOTUFTSygxNSwgMCkNCisjZGVmaW5lIE1UX0hJRl9SRU1BUF9MMV9CQVNFCQlHRU5N QVNLKDMxLCAxNikNCisjZGVmaW5lIE1UX0hJRl9SRU1BUF9CQVNFX0wxCQkweGUwMDAwDQorDQor I2RlZmluZSBNVF9ISUZfUkVNQVBfTDIJCQlNVF9JTkZSQSgweDFiMCkNCisjZGVmaW5lIE1UX0hJ Rl9SRU1BUF9MMl9NQVNLCQlHRU5NQVNLKDE5LCAwKQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wy X09GRlNFVAkJR0VOTUFTSygxMSwgMCkNCisjZGVmaW5lIE1UX0hJRl9SRU1BUF9MMl9CQVNFCQlH RU5NQVNLKDMxLCAxMikNCisjZGVmaW5lIE1UX0hJRl9SRU1BUF9CQVNFX0wyCQkweDAwMDAwDQor DQorI2RlZmluZSBNVF9UT1BfQkFTRQkJCTB4MTgwNjAwMDANCisjZGVmaW5lIE1UX1RPUChvZnMp CQkJKE1UX1RPUF9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9UT1BfTFBDUl9IT1NUX0JB TkQwCQlNVF9UT1AoMHgxMCkNCisjZGVmaW5lIE1UX1RPUF9MUENSX0hPU1RfRldfT1dOCQlCSVQo MCkNCisjZGVmaW5lIE1UX1RPUF9MUENSX0hPU1RfRFJWX09XTglCSVQoMSkNCisNCisjZGVmaW5l IE1UX1RPUF9NSVNDCQkJTVRfVE9QKDB4ZjApDQorI2RlZmluZSBNVF9UT1BfTUlTQ19GV19TVEFU RQkJR0VOTUFTSygyLCAwKQ0KKw0KKyNkZWZpbmUgTVRfSFdfQk9VTkQJCQkweDcwMDEwMDIwDQor I2RlZmluZSBNVF9IV19DSElQSUQJCQkweDcwMDEwMjAwDQorI2RlZmluZSBNVF9IV19SRVYJCQkw eDcwMDEwMjA0DQorDQorI2RlZmluZSBNVF9QQ0lFX01BQ19CQVNFCQkweDc0MDMwMDAwDQorI2Rl ZmluZSBNVF9QQ0lFX01BQyhvZnMpCQkoTVRfUENJRV9NQUNfQkFTRSArIChvZnMpKQ0KKyNkZWZp bmUgTVRfUENJRV9NQUNfSU5UX0VOQUJMRQkJTVRfUENJRV9NQUMoMHgxODgpDQorDQorLyogUEhZ OiBiYW5kIDAoMHg4MzA4MDAwMCksIGJhbmQgMSgweDgzMDkwMDAwKSAqLw0KKyNkZWZpbmUgTVRf V0ZfUEhZX0JBU0UJCQkweDgzMDgwMDAwDQorI2RlZmluZSBNVF9XRl9QSFkob2ZzKQkJCShNVF9X Rl9QSFlfQkFTRSArIChvZnMpKQ0KKw0KKyNkZWZpbmUgTVRfV0ZfUEhZX1JYX0NUUkwxKF9waHkp CU1UX1dGX1BIWSgweDIwMDQgKyAoKF9waHkpIDw8IDE2KSkNCisjZGVmaW5lIE1UX1dGX1BIWV9S WF9DVFJMMV9TVFNDTlRfRU4JR0VOTUFTSygxMSwgOSkNCisNCisjZW5kaWYNCi0tIA0KMi4xOC4w DQo=