Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp7470030rwd; Tue, 20 Jun 2023 01:29:23 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4nhzHXmPFFn+NP/LK5rXC9QAAEdWlY08QzRBgocjNCflFyObBKQeL60Q0vVWghgcbgeDy8 X-Received: by 2002:a17:902:cf46:b0:1ac:820e:c34a with SMTP id e6-20020a170902cf4600b001ac820ec34amr16178959plg.0.1687249763591; Tue, 20 Jun 2023 01:29:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687249763; cv=none; d=google.com; s=arc-20160816; b=OYUWgmLS2oqgc//5CrI4xW7DMPCXlO1JgXQl2nOoFddqAgJAVj5Gt22rGppgKd7HKd xSRzTCcDRzJP5OTm2KL1OV9Y3KwzivvcTffdHbR7gsX3u9gStoj+FQnEFKKAEYoqIXIB o+NKrwgcUzRJ6XNQIFp47M1rIzqdUMteWgHihSBGOl6UghfljKU9oOjCaaLQsi6YHcrl NDetvoZGw771UiHhu5VdT9p2CCjulj8wHvU05GmokyudAWgl2An3mW4tyrSZ9xhTmVWq K9P95y9urEutRP4PAHCFWnnODyp9WNOUMH8+jaCzDgMch5q0h98I1wWHhT37aLB7VoTO lrGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:references:message-id:date :thread-index:thread-topic:subject:cc:to:from:authenticated-by; bh=i6hODTFBzUAdwfMx3DceCUZrIv+YHNnH3MUtMftjiDM=; b=b9IUnacNADwLAn4LkT1QEOAvol5xo8QZDuthClpkoSCo/3OILjsh7D1+qCwQ1AVQZC SPCM2Q43HRyNjTrT6EVMd7nu3Ml+OWOXuXnho0AQezZIcl/PK/3IXu7bD2y02bia/pAI f/UnimXm+3gB7xthcFceoY5nn9CMcirg/P92tsHMcPZV8/aC+/HZBAshzvhN7Q5ijNTB aXAbXbCLeaQHQvn7dY5Jg4Vk71MAh8HZAG1k7zwOQX2DPHUB8ABY9Ui7u1EqFOiB6TA8 BFPVclScz2z/qwXvWQyV0OWIjLuQhsQEc2yB1sqOAHLmUbqtg92BapVkknulRQGD+Np0 531Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l69-20020a638848000000b00553ced07cfasi1249993pgd.411.2023.06.20.01.29.09; Tue, 20 Jun 2023 01:29:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231636AbjFTIKM (ORCPT + 99 others); Tue, 20 Jun 2023 04:10:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231487AbjFTIJn (ORCPT ); Tue, 20 Jun 2023 04:09:43 -0400 Received: from rtits2.realtek.com.tw (rtits2.realtek.com [211.75.126.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 36791E72; Tue, 20 Jun 2023 01:09:37 -0700 (PDT) Authenticated-By: X-SpamFilter-By: ArmorX SpamTrap 5.77 with qID 35K896nN4024043, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtexh36506.realtek.com.tw[172.21.6.27]) by rtits2.realtek.com.tw (8.15.2/2.81/5.90) with ESMTPS id 35K896nN4024043 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=OK); Tue, 20 Jun 2023 16:09:06 +0800 Received: from RTEXMBS06.realtek.com.tw (172.21.6.99) by RTEXH36506.realtek.com.tw (172.21.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.17; Tue, 20 Jun 2023 16:09:26 +0800 Received: from RTEXMBS04.realtek.com.tw (172.21.6.97) by RTEXMBS06.realtek.com.tw (172.21.6.99) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Tue, 20 Jun 2023 16:09:25 +0800 Received: from RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d]) by RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d%5]) with mapi id 15.01.2375.007; Tue, 20 Jun 2023 16:09:25 +0800 From: =?utf-8?B?SnlhbiBDaG91IFvlkajoirflrold?= To: Adrian Hunter , "jh80.chung@samsung.com" , "ulf.hansson@linaro.org" CC: "linux-mmc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , =?utf-8?B?SmFtZXMgVGFpIFvmiLTlv5fls7Bd?= , =?utf-8?B?SnlhbiBDaG91IFvlkajoirflrold?= Subject: RE: [PATCH] CMDQ feature is introduced to eMMC standard in v5.1, which can be used to improve performance. Thread-Topic: [PATCH] CMDQ feature is introduced to eMMC standard in v5.1, which can be used to improve performance. Thread-Index: AQHZoB0OE0kisP5QcU6J48ueKeCt56+Sv2OAgACVe1CAAAc6YA== Date: Tue, 20 Jun 2023 08:09:25 +0000 Message-ID: References: <20230616063731.17591-1-jyanchou@realtek.com> Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.21.190.236] x-kse-serverinfo: RTEXMBS06.realtek.com.tw, 9 x-kse-antispam-interceptor-info: fallback x-kse-antivirus-interceptor-info: fallback Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-KSE-AntiSpam-Interceptor-Info: fallback X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGVsbG8gQWRyaWFuLA0KDQo+IFdoeSBub3QgYWRkIENRSENJIHN1cHBvcnQgdG8gZHdfbW1jLmMg Pw0KDQpUaGUgcmVhc29uIHdoeSB3ZSB3b3VsZCBsaWtlIHRvIGNvbW1pdCBkd19tbWNfY3FlLmMg aXMgdGhhdCB3ZSBmb3VuZCANCg0KdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzeW5vcHN5cycgZGF0 YSBib29rIGFuZCB1c2VyIGd1aWRlLg0KDQpJdCBzZWVtcyB0aGF0IGR3X21tYy5jIGlzIGJhc2Vk IG9uIGZvcm1lciBzcGVjLiANCg0KSW4gbmV3IHNwZWMsIHRoZSBwcm9ncmFtbWFibGUgcmVnaXN0 ZXJzIG9mIHRoZSBEV0NfbW9iaWxlX3N0b3JhZ2UgYXJlIGRpZmZlcmVudCwgDQoNCnNvbWUgb3Bl cmF0ZSBmbG93IGhhZCBjaGFuZ2VkLCBhbmQgYWxzbyB0aGV5IGFkZCBjbWRxIGZlYXR1cmUuDQoN ClRoYW5rcyBhIGxvdC4NCg0KQmVzdCBSZWdhcmRzLA0KSnlhbg0KDQotLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KRnJvbTogSnlhbiBDaG91IFvlkajoirflroldIA0KU2VudDogVHVlc2RheSwg SnVuZSAyMCwgMjAyMyA0OjA0IFBNDQpUbzogJ0FkcmlhbiBIdW50ZXInIDxhZHJpYW4uaHVudGVy QGludGVsLmNvbT47IGpoODAuY2h1bmdAc2Ftc3VuZy5jb207IHVsZi5oYW5zc29uQGxpbmFyby5v cmcNCkNjOiBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJu ZWwub3JnOyBKYW1lcyBUYWkgW+aItOW/l+WzsF0gPGphbWVzLnRhaUByZWFsdGVrLmNvbT4NClN1 YmplY3Q6IFJFOiBbUEFUQ0hdIENNRFEgZmVhdHVyZSBpcyBpbnRyb2R1Y2VkIHRvIGVNTUMgc3Rh bmRhcmQgaW4gdjUuMSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4N Cg0KSGVsbG8gQWRyaWFuLA0KDQo+IFdoeSBub3QgYWRkIENRSENJIHN1cHBvcnQgdG8gZHdfbW1j LmMgPw0KDQpUaGUgcmVhc29uIHdoeSB3ZSB3b3VsZCBsaWtlIHRvIGNvbW1pdCBkd19tbWNfY3Fl LmMgaXMgdGhhdCB3ZSBmb3VuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN5bm9wc3lzJyBkYXRh IGJvb2sgYW5kIHVzZXIgZ3VpZGUuDQoNCkl0IHNlZW1zIHRoYXQgZHdfbW1jLmMgaXMgYmFzZWQg b24gZm9ybWVyIHNwZWMuIEluIG5ldyBzcGVjLCB0aGUgcHJvZ3JhbW1hYmxlIHJlZ2lzdGVycyBv ZiB0aGUgRFdDX21vYmlsZV9zdG9yYWdlIGFyZSBkaWZmZXJlbnQsDQoNCnNvbWUgb3BlcmF0ZSBm bG93IGhhZCBjaGFuZ2VkLCBhbmQgYWxzbyB0aGV5IGFkZCBjbWRxIGZlYXR1cmUuDQoNClRoYW5r cyBhIGxvdC4NCg0KQmVzdCBSZWdhcmRzLA0KSnlhbg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2Ut LS0tLQ0KRnJvbTogQWRyaWFuIEh1bnRlciA8YWRyaWFuLmh1bnRlckBpbnRlbC5jb20+IA0KU2Vu dDogVHVlc2RheSwgSnVuZSAyMCwgMjAyMyAyOjQ2IFBNDQpUbzogSnlhbiBDaG91IFvlkajoirfl roldIDxqeWFuY2hvdUByZWFsdGVrLmNvbT47IGpoODAuY2h1bmdAc2Ftc3VuZy5jb207IHVsZi5o YW5zc29uQGxpbmFyby5vcmcNCkNjOiBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnOyBsaW51eC1r ZXJuZWxAdmdlci5rZXJuZWwub3JnOyBKYW1lcyBUYWkgW+aItOW/l+WzsF0gPGphbWVzLnRhaUBy ZWFsdGVrLmNvbT4NClN1YmplY3Q6IFJlOiBbUEFUQ0hdIENNRFEgZmVhdHVyZSBpcyBpbnRyb2R1 Y2VkIHRvIGVNTUMgc3RhbmRhcmQgaW4gdjUuMSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaW1wcm92 ZSBwZXJmb3JtYW5jZS4NCg0KDQpFeHRlcm5hbCBtYWlsLg0KDQoNCg0KT24gMTYvMDYvMjMgMDk6 MzcsIEp5YW4gQ2hvdSB3cm90ZToNCj4gV2UgYWRkIHRoZSBtbWMgZHJpdmVyIGZvciB0aGUgU3lu b3BzeXMgRGVzaWduV2FyZSBtbWMgaG9zdCBjb250cm9sbGVyDQo+IHdpdGggY21kcSBzdXBwb3J0 IHRoYXQgY2FuIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuDQoNCldoeSBub3QgYWRkIENRSENJIHN1 cHBvcnQgdG8gZHdfbW1jLmMgPw0KDQpJdCBkb2VzIG5vdCB1c3VhbGx5IHJlcXVpcmUgdGhhdCBt YW55IGNoYW5nZXMsIGZvciBleGFtcGxlOg0KDQpjb21taXQgODhiZDY1MmIzYzc0OTk3YmI0MzZh ZGY2MTMxYWNmNDQ1MDY2MjQzZQ0KQXV0aG9yOiBDaHVuLUh1bmcgV3UgPGNodW4taHVuZy53dUBt ZWRpYXRlay5jb20+DQpEYXRlOiAgIE1vbiBKdWwgMjAgMDg6NDI6MzggMjAyMCArMDgwMA0KDQog ICAgbW1jOiBtZWRpYXRlazogY29tbWFuZCBxdWV1ZSBzdXBwb3J0DQoNCiAgICBTdXBwb3J0IGNv bW1hbmQgcXVldWUgZm9yIG10Njc3OSBwbGF0Zm9ybS4NCiAgICBhLiBBZGQgbXNkY19zZXRfYnVz eV90aW1lb3V0KCkgdG8gY2FsY3VsYXRlIGVtbWMgd3JpdGUgdGltZW91dC4NCiAgICBiLiBDb25u ZWN0IG10ayBtc2RjIGRyaXZlciB0byBjcWhjaSBkcml2ZXIgdGhyb3VnaA0KICAgICAgIGhvc3Qt PmNxX2hvc3QtPm9wcyA9ICZtc2RjX2NtZHFfb3BzOw0KICAgIGMuIG1zZGNfY21kcV9pcnEoKSB3 aWxsIGxpbmsgdXAgd2l0aCBjcWNoaV9pcnEoKS4gQmVzaWRlcywgaXQgcHJvdmlkZXMNCiAgICAg ICBtb3JlIGlycSBlcnJvciBtZXNzYWdlcyBsaWtlIFJTUENSQ0VSUi9DTURUTy9EQVRBQ1JDRVJS L0RBVFRNTy4NCiAgICBkLiBTZWxlY3Qga2VybmVsIGNvbmZpZyBNTUNfQ1FIQ0kgZm9yIE1NQ19N VEsNCg0KICAgIFNpZ25lZC1vZmYtYnk6IENodW4tSHVuZyBXdSA8Y2h1bi1odW5nLnd1QG1lZGlh dGVrLmNvbT4NCiAgICBBY2tlZC1ieTogWW9uZyBNYW8gPHlvbmcubWFvQG1lZGlhdGVrLmNvbT4N CiAgICBMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzE1OTUyMDU3NTktNTgyNS00LWdp dC1zZW5kLWVtYWlsLWNodW4taHVuZy53dUBtZWRpYXRlay5jb20NCiAgICBTaWduZWQtb2ZmLWJ5 OiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4NCg0KDQoNCj4NCj4gU2lnbmVk LW9mZi1ieTogSnlhbiBDaG91IDxqeWFuY2hvdUByZWFsdGVrLmNvbT4NCj4gLS0tDQo+ICBkcml2 ZXJzL21tYy9ob3N0L0tjb25maWcgICAgICB8ICAgMTEgKw0KPiAgZHJpdmVycy9tbWMvaG9zdC9N YWtlZmlsZSAgICAgfCAgICAxICsNCj4gIGRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jX2NxZS5jIHwg MTgyMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIGRyaXZlcnMvbW1jL2hv c3QvZHdfbW1jX2NxZS5oIHwgIDQ0NCArKysrKysrKw0KPiAgNCBmaWxlcyBjaGFuZ2VkLCAyMjc5 IGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21tYy9ob3N0L2R3 X21tY19jcWUuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbW1jL2hvc3QvZHdfbW1j X2NxZS5oDQo+DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcgYi9kcml2 ZXJzL21tYy9ob3N0L0tjb25maWcNCj4gaW5kZXggOWY3OTM4OTIxMjNjLi5iOGM3NzI3YjE4OTcg MTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJz L21tYy9ob3N0L0tjb25maWcNCj4gQEAgLTc2Miw2ICs3NjIsMTcgQEAgY29uZmlnIE1NQ19EV19Q TFRGTQ0KPg0KPiAgICAgICAgIElmIHVuc3VyZSwgc2F5IFkuDQo+DQo+ICtjb25maWcgTU1DX0RX X0NRRQ0KPiArICAgICB0cmlzdGF0ZSAiU3lub3BzeXMgRGVzaWduV2FyZSBNZW1vcnkgQ2FyZCB3 aXRoIENRRSBJbnRlcmZhY2UiDQo+ICsgICAgIGRlcGVuZHMgb24gQVJDIHx8IEFSTSB8fCBBUk02 NCB8fCBNSVBTIHx8IENPTVBJTEVfVEVTVA0KPiArICAgICBzZWxlY3QgTU1DX0NRSENJDQo+ICsg ICAgIGhlbHANCj4gKyAgICAgICBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgdGhlIFN5bm9wc3lz IERlc2lnbldhcmUgTW9iaWxlIFN0b3JhZ2UgSVANCj4gKyAgICAgICBibG9jay4gSXQgcHJvdmlk ZXMgaG9zdCBzdXBwb3J0IGZvciBTRCBhbmQgTU1DIGludGVyZmFjZXMsIGFuZCBhZGRzDQo+ICsg ICAgICAgdGhlIHN1cHBvcnQgb2YgY21kcS4NCj4gKw0KPiArICAgICAgIElmIHVuc3VyZSwgc2F5 IE4uDQo+ICsNCj4gIGNvbmZpZyBNTUNfRFdfQkxVRUZJRUxEDQo+ICAgICAgIHRyaXN0YXRlICJC bHVlRmllbGQgc3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3IgU3lub3BzeXMgRFcgTWVtb3J5IENhcmQg SW50ZXJmYWNlIg0KPiAgICAgICBkZXBlbmRzIG9uIE1NQ19EVw0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9tbWMvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUNCj4gaW5k ZXggYTY5M2ZhM2QzZjFjLi43ZmExNDExNjkyZTggMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbW1j L2hvc3QvTWFrZWZpbGUNCj4gKysrIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQ0KPiBAQCAt NTUsNiArNTUsNyBAQCBvYmotJChDT05GSUdfTU1DX0RXX0szKSAgICAgICAgICAgICArPSBkd19t bWMtazMubw0KPiAgb2JqLSQoQ09ORklHX01NQ19EV19QQ0kpICAgICArPSBkd19tbWMtcGNpLm8N Cj4gIG9iai0kKENPTkZJR19NTUNfRFdfUk9DS0NISVApICAgICAgICArPSBkd19tbWMtcm9ja2No aXAubw0KPiAgb2JqLSQoQ09ORklHX01NQ19EV19TVEFSRklWRSkgICAgICAgICs9IGR3X21tYy1z dGFyZml2ZS5vDQo+ICtvYmotJChDT05GSUdfTU1DX0RXX0NRRSkgICAgICAgICAgICAgICAgKz0g ZHdfbW1jX2NxZS5vDQo+ICBvYmotJChDT05GSUdfTU1DX1NIX01NQ0lGKSAgICs9IHNoX21tY2lm Lm8NCj4gIG9iai0kKENPTkZJR19NTUNfSlo0NzQwKSAgICAgKz0gano0NzQwX21tYy5vDQo+ICBv YmotJChDT05GSUdfTU1DX1ZVQjMwMCkgICAgICs9IHZ1YjMwMC5vDQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL21tYy9ob3N0L2R3X21tY19jcWUuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jX2Nx ZS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzUwYTZj NzFhMzYyDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWNf Y3FlLmMNCj4gQEAgLTAsMCArMSwxODIzIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vci1sYXRlcg0KPiArLyoNCj4gKyAqIFN5bm9wc3lzIERlc2lnbldhcmUgTXVs dGltZWRpYSBDYXJkIEludGVyZmFjZSBkcml2ZXIgd2l0aCBDTURRIHN1cHBvcnQNCj4gKyAqICAo QmFzZWQgb24gU3lub3BzeXMgRGVzaWduV2FyZSBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIGRy aXZlcikNCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjMgUmVhbHRlayBTZW1pY29uZHVj dG9yIENvcnANCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+ICsj aW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ICsj aW5jbHVkZSA8bGludXgvZGVidWdmcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBp bmcuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgv aW9wb2xsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvaXJxLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4NCj4gKyNpbmNsdWRlIDxs aW51eC9tbWMvaG9zdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9tbWMvc2QuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpby5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L21tYy9zbG90LWdwaW8uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv b2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1 bWVyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9zaXplcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9zdGF0Lmg+DQo+ICsNCj4gKyNpbmNsdWRlICJkd19tbWNfY3FlLmgiDQo+ICsjaW5jbHVkZSAi Y3FoY2kuaCINCj4gKw0KPiArI2RlZmluZSBEV19NQ0lfRlJFUV9NQVggICAgICAyMDAwMDAwMDAg ICAgICAgLyogdW5pdDogSFogKi8NCj4gKyNkZWZpbmUgRFdfTUNJX0ZSRVFfTUlOICAgICAgMTAw MDAwICAgICAgICAgIC8qIHVuaXQ6IEhaICovDQo+ICsjZGVmaW5lIERXX01DSV9DTURRX0RJU0FC TEVEIDB4MzBmMDAwMQ0KPiArI2RlZmluZSBEV19NQ0lfQ01EUV9FTkFCTEVEICAweDMwZjAxMDEN Cj4gKyNkZWZpbmUgRFdfTUNJX1BPV0VST0ZGICAgICAgICAgICAgICAweDMyMjAzMDENCj4gKyNk ZWZpbmUgRFdfTUNJX0RFU0NfTEVOICAgICAgICAgICAgICAweDEwMDAwMA0KPiArI2RlZmluZSBE V19NQ0lfTUFYX1NDUklQVF9CTEsgICAgICAgIDEyOA0KPiArI2RlZmluZSBEV19NQ0lfVElNRU9V VF9NUyAgICAzMDAwDQo+ICsjZGVmaW5lIERXX01DSV9USU1FT1VUX3VzICAgIDMwMDAwMDANCj4g KyNkZWZpbmUgVFVOSU5HX0VSUiAgICAgICAgICAgNTMxDQo+ICsjZGVmaW5lIERXX01DSV9OT1Rf UkVBRFkgICAgIDk5OTkNCj4gKw0KPiArREVDTEFSRV9DT01QTEVUSU9OKGR3X21jaV93YWl0KTsN Cj4gKw0KPiArDQo+ICsjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpDQo+ICtzdGF0aWMgaW50 IGR3X21jaV9jcWVfcmVxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQ0KPiArew0K PiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBzLT5wcml2YXRlOw0KPiArICAgICBz dHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsNCj4gKyAgICAgc3RydWN0IG1tY19jb21tYW5kICpjbWQ7 DQo+ICsgICAgIHN0cnVjdCBtbWNfY29tbWFuZCAqc3RvcDsNCj4gKyAgICAgc3RydWN0IG1tY19k YXRhICpkYXRhOw0KPiArDQo+ICsgICAgIC8qIE1ha2Ugc3VyZSB3ZSBnZXQgYSBjb25zaXN0ZW50 IHNuYXBzaG90ICovDQo+ICsgICAgIHNwaW5fbG9ja19iaCgmc2xvdC0+aG9zdC0+bG9jayk7DQo+ ICsgICAgIG1ycSA9IHNsb3QtPm1ycTsNCj4gKw0KPiArICAgICBpZiAobXJxKSB7DQo+ICsgICAg ICAgICAgICAgY21kID0gbXJxLT5jbWQ7DQo+ICsgICAgICAgICAgICAgZGF0YSA9IG1ycS0+ZGF0 YTsNCj4gKyAgICAgICAgICAgICBzdG9wID0gbXJxLT5zdG9wOw0KPiArDQo+ICsgICAgICAgICAg ICAgaWYgKGNtZCkNCj4gKyAgICAgICAgICAgICAgICAgICAgIHNlcV9wcmludGYocywNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNNRCV1KDB4JXgpIGZsZyAleCByc3AgJXgg JXggJXggJXggZXJyICVkXG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj bWQtPm9wY29kZSwgY21kLT5hcmcsIGNtZC0+ZmxhZ3MsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNtZC0+cmVzcFswXSwgY21kLT5yZXNwWzFdLCBjbWQtPnJlc3BbMl0sDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC0+cmVzcFsyXSwgY21kLT5lcnJv cik7DQo+ICsgICAgICAgICAgICAgaWYgKGRhdGEpDQo+ICsgICAgICAgICAgICAgICAgICAgICBz ZXFfcHJpbnRmKHMsICJEQVRBICV1IC8gJXUgKiAldSBmbGcgJXggZXJyICVkXG4iLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5ieXRlc194ZmVyZWQsIGRhdGEtPmJs b2NrcywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Ymxrc3osIGRh dGEtPmZsYWdzLCBkYXRhLT5lcnJvcik7DQo+ICsgICAgICAgICAgICAgaWYgKHN0b3ApDQo+ICsg ICAgICAgICAgICAgICAgICAgICBzZXFfcHJpbnRmKHMsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJDTUQldSgweCV4KSBmbGcgJXggcnNwICV4ICV4ICV4ICV4IGVyciAlZFxu IiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcC0+b3Bjb2RlLCBzdG9w LT5hcmcsIHN0b3AtPmZsYWdzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dG9wLT5yZXNwWzBdLCBzdG9wLT5yZXNwWzFdLCBzdG9wLT5yZXNwWzJdLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdG9wLT5yZXNwWzJdLCBzdG9wLT5lcnJvcik7DQo+ICsg ICAgIH0NCj4gKw0KPiArICAgICBzcGluX3VubG9ja19iaCgmc2xvdC0+aG9zdC0+bG9jayk7DQo+ ICsNCj4gKyAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICtERUZJTkVfU0hPV19BVFRSSUJVVEUoZHdf bWNpX2NxZV9yZXEpOw0KPiArI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAqLw0K PiArDQo+ICtzdGF0aWMgaW50IGR3X21jaV9jcWVfcmVnc19zaG93KHN0cnVjdCBkd19tY2kgKmhv c3QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbWNfY29tbWFuZCAq Y21kLCB1MzIgY21kX2ZsYWdzKQ0KPiArew0KPiArICAgICBkZXZfZXJyKGhvc3QtPmRldiwgIm9w Y29kZSA9ICVkLCBhcmcgPSAweCV4LCBjbWRmbGFncyA9IDB4JXhcbiIsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNtZC0+b3Bjb2RlLCBjbWQtPmFyZywgY21kX2ZsYWdzKTsNCj4g KyAgICAgZGV2X2Vycihob3N0LT5kZXYsICJzdGF0dXNfaW50ID0gMHgleFxuIiwgaG9zdC0+bm9y bWFsX2ludGVycnVwdCk7DQo+ICsgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAiZXJyb3JfaW50ID0g MHgleFxuIiwgaG9zdC0+ZXJyb3JfaW50ZXJydXB0KTsNCj4gKyAgICAgZGV2X2Vycihob3N0LT5k ZXYsICJhdXRvX2Vycm9yX2ludCA9IDB4JXhcbiIsIGhvc3QtPmF1dG9fZXJyb3JfaW50ZXJydXB0 KTsNCj4gKyAgICAgZGV2X2Vycihob3N0LT5kZXYsICJwc3RhdGVfcmVnID0gMHgleFxuIiwgbWNp X3JlYWRsKGhvc3QsIFBTVEFURV9SRUcpKTsNCj4gKyAgICAgZGV2X2Vycihob3N0LT5kZXYsICJo b3N0X2N0cmxfMSA9IDB4JXhcbiIsIG1jaV9yZWFkYihob3N0LCBIT1NUX0NUUkwxX1IpKTsNCj4g KyAgICAgZGV2X2Vycihob3N0LT5kZXYsICJ4ZmVyX21vZGVfciA9IDB4JXhcbiIsIG1jaV9yZWFk dyhob3N0LCBYRkVSX01PREVfUikpOw0KPiArDQo+ICsgICAgIHJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX2R1bXByZWdzKHN0cnVjdCBtbWNfaG9zdCAqbW1j KQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBtbWNfcHJpdihtbWMp Ow0KPiArICAgICBzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xvdC0+aG9zdDsNCj4gKw0KPiArICAg ICBkZXZfaW5mbyhob3N0LT5kZXYsICIlczogY21kIGlkeCAweCUwOHhcbiIsIF9fZnVuY19fLCBt Y2lfcmVhZHcoaG9zdCwgQ01EX1IpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHdfbWNp X2NxZV9zZXRfdHJhbl9kZXNjKHU4ICpkZXNjLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRtYV9hZGRyX3QgYWRkciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgbGVuLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJvb2wgZW5kLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgZG1hNjQpDQo+ICt7DQo+ICsgICAgIF9fbGUzMiAqYXR0ciA9IChfX2xlMzIgX19mb3Jj ZSAqKWRlc2M7DQo+ICsNCj4gKyAgICAgKmF0dHIgPSAoQ1FIQ0lfVkFMSUQoMSkgfA0KPiArICAg ICAgICAgICAgICBDUUhDSV9FTkQoZW5kID8gMSA6IDApIHwNCj4gKyAgICAgICAgICAgICAgQ1FI Q0lfSU5UKDApIHwNCj4gKyAgICAgICAgICAgICAgQ1FIQ0lfQUNUKDB4NCkgfA0KPiArICAgICAg ICAgICAgICBDUUhDSV9EQVRfTEVOR1RIKGxlbikpOw0KPiArDQo+ICsgICAgIGlmIChkbWE2NCkg ew0KPiArICAgICAgICAgICAgIF9fbGU2NCAqZGF0YWRkciA9IChfX2xlNjQgX19mb3JjZSAqKShk ZXNjICsgNCk7DQo+ICsNCj4gKyAgICAgICAgICAgICBkYXRhZGRyWzBdID0gY3B1X3RvX2xlNjQo YWRkcik7DQo+ICsgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgX19sZTMyICpkYXRhZGRy ID0gKF9fbGUzMiBfX2ZvcmNlICopKGRlc2MgKyA0KTsNCj4gKw0KPiArICAgICAgICAgICAgIGRh dGFkZHJbMF0gPSBjcHVfdG9fbGUzMihhZGRyKTsNCj4gKyAgICAgfQ0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBkd19tY2lfY3FlX3NldHVwX3RyYW5fZGVzYyhzdHJ1Y3QgbW1jX2RhdGEgKmRh dGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcWhjaV9o b3N0ICpjcV9ob3N0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAq ZGVzYywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNnX2NvdW50 KQ0KPiArew0KPiArICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOw0KPiArICAgICB1MzIgY3Vy X2Jsa19jbnQsIHJlbWFpbl9ibGtfY250Ow0KPiArICAgICB1bnNpZ25lZCBpbnQgYmVnaW4sIGVu ZDsNCj4gKyAgICAgaW50IGksIGxlbjsNCj4gKyAgICAgYm9vbCBsYXN0ID0gZmFsc2U7DQo+ICsg ICAgIGJvb2wgZG1hNjQgPSBjcV9ob3N0LT5kbWE2NDsNCj4gKyAgICAgZG1hX2FkZHJfdCBhZGRy Ow0KPiArDQo+ICsgICAgIGZvcl9lYWNoX3NnKGRhdGEtPnNnLCBzZywgc2dfY291bnQsIGkpIHsN Cj4gKyAgICAgICAgICAgICBhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOw0KPiArICAgICAgICAg ICAgIGxlbiA9IHNnX2RtYV9sZW4oc2cpOw0KPiArICAgICAgICAgICAgIHJlbWFpbl9ibGtfY250 ICA9IGxlbiA+PiA5Ow0KPiArDQo+ICsgICAgICAgICAgICAgd2hpbGUgKHJlbWFpbl9ibGtfY250 KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAvKkRXX01DSV9NQVhfU0NSSVBUX0JMSyBpcyB0 aGEgbWF4IGZvciBlYWNoIGRlc2NyaXB0b3IgcmVjb3JkKi8NCj4gKyAgICAgICAgICAgICAgICAg ICAgIGlmIChyZW1haW5fYmxrX2NudCA+IERXX01DSV9NQVhfU0NSSVBUX0JMSykNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2Jsa19jbnQgPSBEV19NQ0lfTUFYX1NDUklQVF9C TEs7DQo+ICsgICAgICAgICAgICAgICAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN1cl9ibGtfY250ID0gcmVtYWluX2Jsa19jbnQ7DQo+ICsNCj4gKyAgICAgICAg ICAgICAgICAgICAgIC8qIEluIFN5bm9wc3lzIERlc2lnbldhcmUgRGF0YWJvb2sgUGFnZSA4NCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAqIFRoZXkgbWVudGlvbmVkIHRoZSBETUEgMTI4TUIg cmVzdHJpY3Rpb24NCj4gKyAgICAgICAgICAgICAgICAgICAgICAqLw0KPiArICAgICAgICAgICAg ICAgICAgICAgYmVnaW4gPSBhZGRyIC8gU1pfMTI4TTsNCj4gKyAgICAgICAgICAgICAgICAgICAg IGVuZCA9IChhZGRyICsgY3VyX2Jsa19jbnQgKiBTWl81MTIpIC8gU1pfMTI4TTsNCj4gKw0KPiAr ICAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luICE9IGVuZCkNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3VyX2Jsa19jbnQgPSAoZW5kICogU1pfMTI4TSAtIGFkZHIpIC8gU1pf NTEyOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoKGkrMSkgPT0gc2dfY291bnQg JiYgKHJlbWFpbl9ibGtfY250ID09IGN1cl9ibGtfY250KSkNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGFzdCA9IHRydWU7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGR3 X21jaV9jcWVfc2V0X3RyYW5fZGVzYyhkZXNjLCBhZGRyLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChjdXJfYmxrX2NudCA8PCA5KSwgbGFzdCwgZG1hNjQpOw0KPiAr DQo+ICsgICAgICAgICAgICAgICAgICAgICBhZGRyID0gYWRkciArIChjdXJfYmxrX2NudCA8PCA5 KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIHJlbWFpbl9ibGtfY250IC09IGN1cl9ibGtfY250 Ow0KPiArICAgICAgICAgICAgICAgICAgICAgZGVzYyArPSBjcV9ob3N0LT50cmFuc19kZXNjX2xl bjsNCj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgIH0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgZHdfbWNpX2NxZV9lbmFibGUoc3RydWN0IG1tY19ob3N0ICptbWMpDQo+ICt7DQo+ICsgICAg IHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ICsgICAgIHN0cnVj dCBkd19tY2kgKmhvc3QgPSBzbG90LT5ob3N0Ow0KPiArDQo+ICsgICAgIC8qY2xlYXIgZGF0YSBw YXRoIFNXX1JTVF9SLlNXX1JTVF9EQVQgPSAxKi8NCj4gKyAgICAgbWNpX3dyaXRlYihob3N0LCBT V19SU1RfUiwgU0RNTUNfUlNUX0RBVCk7DQo+ICsgICAgIC8qMHg5ODAxMjAwYyovDQo+ICsgICAg IG1jaV93cml0ZXcoaG9zdCwgWEZFUl9NT0RFX1IsDQo+ICsgICAgICAgICAgICAgKCgxIDw8IFNE TU1DX01VTFRJX0JMS19TRUwpIHwgU0RNTUNfQkxPQ0tfQ09VTlRfRU5BQkxFIHwgU0RNTUNfRE1B X0VOQUJMRSkpOw0KPiArDQo+ICsgICAgIC8qU2V0IERNQV9TRUwgdG8gQURNQTIgb25seSBtb2Rl IGluIHRoZSBIT1NUX0NUUkwxX1IqLw0KPiArICAgICBtY2lfd3JpdGViKGhvc3QsIEhPU1RfQ1RS TDFfUiwNCj4gKyAgICAgICAgICAgICAobWNpX3JlYWRiKGhvc3QsIEhPU1RfQ1RSTDFfUikgJiAw eGU3KSB8IChTRE1NQ19BRE1BMl8zMiA8PCBTRE1NQ19ETUFfU0VMKSk7DQo+ICsgICAgIG1jaV93 cml0ZXcoaG9zdCwgQkxPQ0tTSVpFX1IsIDB4MjAwKTsNCj4gKyAgICAgbWNpX3dyaXRldyhob3N0 LCBCTE9DS0NPVU5UX1IsIDApOw0KPiArDQo+ICsgICAgIC8qU2V0IFNETUFTQV9SICh3aGlsZSB1 c2luZyAzMiBiaXRzKSB0byAwKi8NCj4gKyAgICAgbWNpX3dyaXRlbChob3N0LCBTRE1BU0FfUiwg MCk7DQo+ICsgICAgIC8qd2Ugc2V0IHRoaXMgcmVnaXN0ZXIgYWRkaXRpb25hbGx5IHRvIGVuaGFu Y2UgdGhlIElPIHBlcm9mcm1hbmNlKi8NCj4gKw0KPiArICAgICBjcWhjaV93cml0ZWwoaG9zdC0+ Y3FlLCAweDEwLCBDUUhDSV9TU0MxKTsNCj4gKyAgICAgY3FoY2lfd3JpdGVsKGhvc3QtPmNxZSwg MCwgQ1FIQ0lfQ1RMKTsNCj4gKw0KPiArICAgICBpZiAoY3FoY2lfcmVhZGwoaG9zdC0+Y3FlLCBD UUhDSV9DVEwpICYmIENRSENJX0hBTFQpIHsNCj4gKyAgICAgICAgICAgICBkZXZfZXJyKGhvc3Qt PmRldiwgIiVzOiBjcWhjaTogQ1FFIGZhaWxlZCB0byBleGl0IGhhbHQgc3RhdGVcbiIsDQo+ICsg ICAgICAgICAgICAgICAgICAgICBtbWNfaG9zdG5hbWUobW1jKSk7DQo+ICsgICAgIH0NCj4gKw0K PiArICAgICAvKmNtZHEgaW50ZXJydXB0IG1vZGUqLw0KPiArICAgICBkd19tY2lfY2xyX3NpZ25h bF9pbnQoaG9zdCk7DQo+ICsgICAgIGR3X21jaV9lbl9jcWVfaW50KGhvc3QpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNxaGNpX2hvc3Rfb3BzIGR3X21jaV9jcWhjaV9ob3N0 X29wcyA9IHsNCj4gKyAgICAgLmVuYWJsZSA9IGR3X21jaV9jcWVfZW5hYmxlLA0KPiArICAgICAu ZHVtcHJlZ3MgPSBkd19tY2lfY3FlX2R1bXByZWdzLA0KPiArICAgICAuc2V0dXBfdHJhbl9kZXNj ID0gZHdfbWNpX2NxZV9zZXR1cF90cmFuX2Rlc2MsDQo+ICt9Ow0KPiArDQo+ICt2b2lkIGR3X21j aV9jcWVfd2FpdF9kb25lKHN0cnVjdCBkd19tY2kgKmhvc3QsIHUzMiAqYWRkciwNCj4gKyAgICAg ICAgICAgICAgICAgICB1MzIgbWFzaywgdTMyIHZhbHVlKQ0KPiArew0KPiArICAgICBpbnQgbiA9 IDA7DQo+ICsNCj4gKyAgICAgd2hpbGUgKDEpIHsNCj4gKyAgICAgICAgICAgICBpZiAoKCgqYWRk cikgJiBtYXNrKSA9PSB2YWx1ZSkNCj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiAr DQo+ICsgICAgICAgICAgICAgLyplcnJvciBpbnRlcnJ1cHQgZGV0ZWN0ZWQqLw0KPiArICAgICAg ICAgICAgIGlmICgobWNpX3JlYWR3KGhvc3QsIE5PUk1BTF9JTlRfU1RBVF9SKSAmIFNETU1DX0VS Ul9JTlRFUlJVUFQpICE9IDApDQo+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKw0K PiArICAgICAgICAgICAgIGlmIChuKysgPiBEV19NQ0lfVElNRU9VVF91cykgew0KPiArICAgICAg ICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJvcGNvZGUgPSAlZCwgKmFkZHIgPSAw eCV4LCBtYXNrID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBob3N0LT5vcGNvZGUsIHJlYWRsKGFkZHIpLCBtYXNrLCB2YWx1ZSk7DQo+ICsg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgICAg ICAgICAgdWRlbGF5KDEpOw0KPiArICAgICB9DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGR3X21j aV9jcWVfd2FpdF9kb25lKTsNCj4gKw0KPiArc3RhdGljIHZvaWQgZHdfbWNpX2NxZV9yZXNldChz dHJ1Y3QgZHdfbWNpICpob3N0KQ0KPiArew0KPiArICAgICAvKmNoZWNrIHRoZSBjbWQgbGluZSov DQo+ICsgICAgIGlmIChtY2lfcmVhZHcoaG9zdCwgRVJST1JfSU5UX1NUQVRfUikgJiBTRE1NQ19D TURfRVJSKSB7DQo+ICsgICAgICAgICAgICAgLypQZXJmb3JtIGEgc29mdHdhcmUgcmVzZXQqLw0K PiArICAgICAgICAgICAgIG1jaV93cml0ZWIoaG9zdCwgU1dfUlNUX1IsIFNETU1DX1JTVF9DTUQp Ow0KPiArICAgICAgICAgICAgIGR3X21jaV9jcWVfd2FpdF9kb25lKGhvc3QsICh1MzIgKikoaG9z dC0+cmVncyArIFNETU1DX0NMS19DVFJMX1IpLCBCSVQoMjUpLCAwKTsNCj4gKyAgICAgfQ0KPiAr ICAgICAvKmNoZWNrIGRhdGEgbGluZSovDQo+ICsgICAgIGlmIChtY2lfcmVhZHcoaG9zdCwgRVJS T1JfSU5UX1NUQVRfUikgJiBTRE1NQ19EQVRBX0VSUikgew0KPiArICAgICAgICAgICAgIG1jaV93 cml0ZWIoaG9zdCwgU1dfUlNUX1IsIFNETU1DX1JTVF9EQVQpOw0KPiArICAgICAgICAgICAgIGR3 X21jaV9jcWVfd2FpdF9kb25lKGhvc3QsICh1MzIgKikoaG9zdC0+cmVncyArIFNETU1DX0NMS19D VFJMX1IpLCBCSVQoMjYpLCAwKTsNCj4gKyAgICAgfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZCBkd19tY2lfY3FlX3JlYWRfcnNwKHN0cnVjdCBkd19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfY29t bWFuZCAqY21kLCB1MzIgKnJzcCkNCj4gK3sNCj4gKyAgICAgY29uc3Qgc3RydWN0IGR3X21jaV9k cnZfZGF0YSAqZHJ2X2RhdGEgPSBob3N0LT5kcnZfZGF0YTsNCj4gKw0KPiArICAgICBpZiAoY21k LT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgew0KPiArICAgICAgICAgICAgIGlmIChjbWQtPmZs YWdzICYgTU1DX1JTUF8xMzYpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChkcnZfZGF0 YSAmJiBkcnZfZGF0YS0+c2hpZnRfcnNwKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRydl9kYXRhLT5zaGlmdF9yc3AoaG9zdCwgY21kLCBjbWQtPnJlc3ApOw0KPiArICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LypSMiBsb25nIHJlc3BvbnNlKi8NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMy IHJzcF90bXBbNF07DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNwX3Rt cFszXSA9IG1jaV9yZWFkbChob3N0LCBSRVNQMDFfUik7DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJzcF90bXBbMl0gPSBtY2lfcmVhZGwoaG9zdCwgUkVTUDIzX1IpOw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByc3BfdG1wWzFdID0gbWNpX3JlYWRsKGhvc3QsIFJF U1A0NV9SKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNwX3RtcFswXSA9IG1j aV9yZWFkbChob3N0LCBSRVNQNjdfUik7DQo+ICsgICAgICAgICAgICAgICAgICAgICB9DQo+ICsg ICAgICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIC8qU2hvcnQgcmVz cG9uc2UqLw0KPiArICAgICAgICAgICAgICAgICAgICAgcnNwWzBdID0gcnNwWzFdID0gcnNwWzJd ID0gcnNwWzNdID0gMDsNCj4gKyAgICAgICAgICAgICAgICAgICAgIHJzcFswXSA9IG1jaV9yZWFk bChob3N0LCBSRVNQMDFfUik7DQo+ICsgICAgICAgICAgICAgfQ0KPiArICAgICB9DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB1MzIgZHdfbWNpX2NxZV9wcmVwYXJlX2NvbW1hbmQoc3RydWN0IG1tY19o b3N0ICptbWMsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQ0KPiArew0KPiArICAgICBzdHJ1Y3Qg ZHdfbWNpX3Nsb3QgKnNsb3QgPSBtbWNfcHJpdihtbWMpOw0KPiArICAgICBzdHJ1Y3QgZHdfbWNp ICpob3N0ID0gc2xvdC0+aG9zdDsNCj4gKyAgICAgdTMyIGNtZHI7DQo+ICsNCj4gKyAgICAgY21k LT5lcnJvciA9IC1FSU5QUk9HUkVTUzsNCj4gKw0KPiArICAgIC8qIG91ciBpcCBkZXNpZ24gcHV0 cyByZXNwIGluIGJpdCA4LTEzNSwgc28gd2UgbmVlZCB0byBzaGlmdCA4IGJpdHMqLw0KPiArICAg ICBpZiAoaG9zdC0+c2hpZnQpDQo+ICsgICAgICAgICAgICAgY21kciA9IChjbWQtPm9wY29kZSA8 PCA4KTsNCj4gKyAgICAgZWxzZQ0KPiArICAgICAgICAgICAgIGNtZHIgPSBjbWQtPm9wY29kZTsN Cj4gKw0KPiArICAgICBpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgew0KPiArICAg ICAgICAgICAgIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpDQo+ICsgICAgICAgICAgICAg ICAgICAgICBjbWRyIHw9IFNETU1DX1JFU1BfTEVOXzEzNjsNCj4gKyAgICAgICAgICAgICBlbHNl IHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9CVVNZ KQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRyIHw9IFNETU1DX1JFU1BfTEVO XzQ4QjsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY21kciB8PSBTRE1NQ19SRVNQX0xFTl80ODsNCj4gKyAgICAgICAgICAgICB9 DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICBjbWRyIHw9IFNETU1DX0NNRF9DSEtfUkVTUF9DUkM7 DQo+ICsgICAgIGlmIChjbWQtPm9wY29kZSA9PSBNTUNfR09fSURMRV9TVEFURSB8fA0KPiArICAg ICAgICBjbWQtPm9wY29kZSA9PSBNTUNfU0VORF9PUF9DT05EIHx8DQo+ICsgICAgICAgIChjbWQt Pm9wY29kZSA9PSBNTUNfU0VMRUNUX0NBUkQgJiYgY21kLT5mbGFncyA9PSAoTU1DX1JTUF9OT05F IHwgTU1DX0NNRF9BQykpKQ0KPiArICAgICAgICAgICAgIGNtZHIgJj0gflNETU1DX0NNRF9DSEtf UkVTUF9DUkM7DQo+ICsNCj4gKyAgICAgY21kciB8PSBTRE1NQ19DTURfSURYX0NIS19FTkFCTEU7 DQo+ICsgICAgIGlmIChjbWQtPm9wY29kZSA9PSBNTUNfR09fSURMRV9TVEFURSB8fA0KPiArICAg ICAgICBjbWQtPm9wY29kZSA9PSBNTUNfU0VORF9PUF9DT05EIHx8DQo+ICsgICAgICAgIGNtZC0+ b3Bjb2RlID09IE1NQ19TRU5EX0NTRCB8fA0KPiArICAgICAgICBjbWQtPm9wY29kZSA9PSBNTUNf U0VORF9DSUQgfHwNCj4gKyAgICAgICAgY21kLT5vcGNvZGUgPT0gTU1DX0FMTF9TRU5EX0NJRCB8 fA0KPiArICAgICAgICAoY21kLT5vcGNvZGUgPT0gTU1DX1NFTEVDVF9DQVJEICYmIGNtZC0+Zmxh Z3MgPT0gKE1NQ19SU1BfTk9ORSB8IE1NQ19DTURfQUMpKSkNCj4gKyAgICAgICAgICAgICBjbWRy ICY9IH5TRE1NQ19DTURfSURYX0NIS19FTkFCTEU7DQo+ICsNCj4gKyAgICAgaWYgKGNtZC0+ZGF0 YSkNCj4gKyAgICAgICAgICAgICBjbWRyIHw9IFNETU1DX0RBVEE7DQo+ICsNCj4gKyAgICAgaWYg KGNtZC0+b3Bjb2RlID09IE1NQ19TVE9QX1RSQU5TTUlTU0lPTikNCj4gKyAgICAgICAgICAgICBj bWRyIHw9IChTRE1NQ19BQk9SVF9DTUQgPDwgNik7DQo+ICsNCj4gKyAgICAgcmV0dXJuIGNtZHI7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZHdfbWNpX2NxZV9zdGFydF9jb21tYW5kKHN0cnVj dCBkd19tY2kgKmhvc3QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg bW1jX2NvbW1hbmQgKmNtZCwgdTMyIGNtZF9mbGFncykNCj4gK3sNCj4gKyAgICAgaW50IGVyciA9 IDA7DQo+ICsgICAgIHVuc2lnbmVkIGxvbmcgZW5kID0gMDsNCj4gKyAgICAgdW5zaWduZWQgbG9u ZyBmbGFnczsNCj4gKyAgICAgYm9vbCB4ZmVyX2ZsYWcgPSBmYWxzZTsNCj4gKw0KPiArICAgICBo b3N0LT5jbWQgPSBjbWQ7DQo+ICsNCj4gKyAgICAgc3dpdGNoIChjbWQtPm9wY29kZSkgew0KPiAr ICAgICBjYXNlIE1NQ19SRUFEX1NJTkdMRV9CTE9DSzoNCj4gKyAgICAgY2FzZSBNTUNfUkVBRF9N VUxUSVBMRV9CTE9DSzoNCj4gKyAgICAgY2FzZSBNTUNfV1JJVEVfQkxPQ0s6DQo+ICsgICAgIGNh c2UgTU1DX1dSSVRFX01VTFRJUExFX0JMT0NLOg0KPiArICAgICBjYXNlIE1NQ19TRU5EX0VYVF9D U0Q6DQo+ICsgICAgIGNhc2UgTU1DX0dFTl9DTUQ6DQo+ICsgICAgIGNhc2UgTU1DX1NMRUVQX0FX QUtFOg0KPiArICAgICBjYXNlIE1NQ19TV0lUQ0g6DQo+ICsgICAgIGNhc2UgTU1DX1NFVF9XUklU RV9QUk9UOg0KPiArICAgICBjYXNlIE1NQ19DTFJfV1JJVEVfUFJPVDoNCj4gKyAgICAgY2FzZSBN TUNfU0VORF9XUklURV9QUk9UOg0KPiArICAgICBjYXNlIE1NQ19FUkFTRToNCj4gKyAgICAgY2Fz ZSBNTUNfU0VORF9UVU5JTkdfQkxPQ0tfSFMyMDA6DQo+ICsgICAgICAgICAgICAgeGZlcl9mbGFn ID0gdHJ1ZTsNCj4gKyAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgZGVmYXVsdDoNCj4gKyAg ICAgICAgICAgICB4ZmVyX2ZsYWcgPSBmYWxzZTsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGhv c3QtPmludF93YWl0aW5nID0gJmR3X21jaV93YWl0Ow0KPiArICAgICBlbmQgPSBqaWZmaWVzICsg bXNlY3NfdG9famlmZmllcyhEV19NQ0lfVElNRU9VVF9NUyk7DQo+ICsgICAgIG1vZF90aW1lcigm aG9zdC0+dGltZXIsIGVuZCk7DQo+ICsNCj4gKyAgICAgaWYgKGhvc3QtPmludF93YWl0aW5nKSB7 DQo+ICsgICAgICAgICAgICAgZHdfbWNpX2Nscl9zaWduYWxfaW50KGhvc3QpOw0KPiArICAgICAg ICAgICAgIGR3X21jaV9jbHJfaW50KGhvc3QpOw0KPiArDQo+ICsgICAgICAgICAgICAgLypjb21t YW5kIHdpdGggZGF0YSwgcjFiIGNhc2UqLw0KPiArICAgICAgICAgICAgIGlmICh4ZmVyX2ZsYWcg PT0gMSkNCj4gKyAgICAgICAgICAgICAgICAgICAgIGR3X21jaV9lbl94ZmVyX2ludChob3N0KTsN Cj4gKyAgICAgICAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgICAgICAgICBkd19tY2lfZW5f Y2RfaW50KGhvc3QpOw0KPiArDQo+ICsgICAgICAgICAgICAgLypJZiB3ZSB1c2UgY21kMjMsIHdl IGNhbm5vdCBzZW5kIGF1dG8gc3RvcCBjb21tYW5kKi8NCj4gKyAgICAgICAgICAgICBpZiAoY21k LT5vcGNvZGUgPT0gTU1DX1dSSVRFX01VTFRJUExFX0JMT0NLIHx8DQo+ICsgICAgICAgICAgICAg ICAgIGNtZC0+b3Bjb2RlID09IE1NQ19SRUFEX01VTFRJUExFX0JMT0NLKSB7DQo+ICsgICAgICAg ICAgICAgICAgICAgICBpZiAoaG9zdC0+aXNfc2JjKSB7DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgWEZFUl9NT0RFX1IsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWNpX3JlYWR3KGhvc3QsIFhGRVJfTU9ERV9SKSAmIH5C SVQoU0RNTUNfQVVUT19DTURfRU5BQkxFKSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaG9zdC0+aXNfc2JjID0gMDsNCj4gKyAgICAgICAgICAgICAgICAgICAgIH0N Cj4gKyAgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICBob3N0LT5vcGNvZGUgPSBj bWQtPm9wY29kZTsNCj4gKyAgICAgICAgICAgICBob3N0LT5hcmcgPSBjbWQtPmFyZzsNCj4gKw0K PiArICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5pcnFfbG9jaywgZmxhZ3Mp Ow0KPiArICAgICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgQ01EX1IsIGNtZF9mbGFncyk7DQo+ ICsgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+aXJxX2xvY2ssIGZs YWdzKTsNCj4gKw0KPiArICAgICAgICAgICAgIHdhaXRfZm9yX2NvbXBsZXRpb24oaG9zdC0+aW50 X3dhaXRpbmcpOw0KPiArDQo+ICsgICAgICAgICAgICAgaWYgKHhmZXJfZmxhZyA9PSAxKQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgZHdfbWNpX2NxZV93YWl0X2RvbmUoaG9zdCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHUzMiAqKShob3N0LT5yZWdzICsgU0RNTUNfTk9STUFM X0lOVF9TVEFUX1IpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19YRkVS X0NPTVBMRVRFLCBTRE1NQ19YRkVSX0NPTVBMRVRFKTsNCj4gKyAgICAgICAgICAgICBlbHNlDQo+ ICsgICAgICAgICAgICAgICAgICAgICBkd19tY2lfY3FlX3dhaXRfZG9uZShob3N0LA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyICopKGhvc3QtPnJlZ3MgKyBTRE1NQ19OT1JN QUxfSU5UX1NUQVRfUiksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0NN RF9DT01QTEVURSwgU0RNTUNfQ01EX0NPTVBMRVRFKTsNCj4gKw0KPiArICAgICAgICAgICAgIGlm IChob3N0LT5ub3JtYWxfaW50ZXJydXB0ICYgU0RNTUNfRVJSX0lOVEVSUlVQVCkgew0KPiArICAg ICAgICAgICAgICAgICAgICAgaWYgKGhvc3QtPnR1bmluZyA9PSAxKQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZXZfaW5mbyhob3N0LT5kZXYsICJUdW5pbmcgZXJyb3IgLi4uIGtl ZXAgdHVuaW5nXG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZHdfbWNpX2NxZV9yZWdzX3Nob3coaG9zdCwgY21kLCBjbWRf ZmxhZ3MpOw0KPiArICAgICAgICAgICAgICAgICAgICAgZXJyID0gLTE7DQo+ICsgICAgICAgICAg ICAgfQ0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgZHdfbWNpX2NxZV9wcmVwX3N0b3BfYWJvcnQoc3RydWN0IGR3X21jaSAqaG9z dCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQpDQo+ICt7DQo+ICsNCj4gKyAgICAgc3RydWN0IG1t Y19jb21tYW5kIHN0b3A7DQo+ICsgICAgIHUzMiBjbWRyOw0KPiArICAgICAvKlN0b3AgY29tbWFu ZCBvbmx5IHVzZSBhZnRlciBkYXRhIGNvbW1hbmQqLw0KPiArICAgICBpZiAoIWNtZC0+ZGF0YSkN Cj4gKyAgICAgICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgbWVtc2V0KCZzdG9wLCAwLCBz aXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7DQo+ICsNCj4gKyAgICAgaWYgKGNtZC0+b3Bjb2Rl ID09IE1NQ19SRUFEX1NJTkdMRV9CTE9DSyB8fA0KPiArICAgICAgICAgY21kLT5vcGNvZGUgPT0g TU1DX1JFQURfTVVMVElQTEVfQkxPQ0sgfHwNCj4gKyAgICAgICAgIGNtZC0+b3Bjb2RlID09IE1N Q19XUklURV9CTE9DSyB8fA0KPiArICAgICAgICAgY21kLT5vcGNvZGUgPT0gTU1DX1dSSVRFX01V TFRJUExFX0JMT0NLIHx8DQo+ICsgICAgICAgICBjbWQtPm9wY29kZSA9PSBNTUNfU0VORF9UVU5J TkdfQkxPQ0sgfHwNCj4gKyAgICAgICAgIGNtZC0+b3Bjb2RlID09IE1NQ19TRU5EX1RVTklOR19C TE9DS19IUzIwMCkgew0KPiArICAgICAgICAgICAgIHN0b3Aub3Bjb2RlID0gTU1DX1NUT1BfVFJB TlNNSVNTSU9OOw0KPiArICAgICAgICAgICAgIHN0b3AuYXJnID0gMDsNCj4gKyAgICAgICAgICAg ICBzdG9wLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQUM7DQo+ICsgICAgIH0gZWxzZSBp ZiAoY21kLT5vcGNvZGUgPT0gU0RfSU9fUldfRVhURU5ERUQpIHsNCj4gKyAgICAgICAgICAgICBz dG9wLm9wY29kZSA9IFNEX0lPX1JXX0RJUkVDVDsNCj4gKyAgICAgICAgICAgICBzdG9wLmFyZyB8 PSAoMSA8PCAzMSkgfCAoMCA8PCAyOCkgfCAoU0RJT19DQ0NSX0FCT1JUIDw8IDkpIHwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAoKGNtZC0+YXJnID4+IDI4KSAmIDB4Nyk7DQo+ICsgICAg ICAgICAgICAgc3RvcC5mbGFncyA9IE1NQ19SU1BfU1BJX1I1IHwgTU1DX1JTUF9SNSB8IE1NQ19D TURfQUM7DQo+ICsgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPiArICAg ICB9DQo+ICsNCj4gKyAgICAgY21kciA9IChzdG9wLm9wY29kZSA8PCA4KSB8IFNETU1DX1JFU1Bf TEVOXzQ4IHwNCj4gKyAgICAgICAgICAgICBTRE1NQ19DTURfQ0hLX1JFU1BfQ1JDIHwgU0RNTUNf Q01EX0lEWF9DSEtfRU5BQkxFOw0KPiArICAgICBjbWRyIHw9IChTRE1NQ19BQk9SVF9DTUQgPDwg Nik7DQo+ICsgICAgIG1jaV93cml0ZXcoaG9zdCwgWEZFUl9NT0RFX1IsIDApOw0KPiArICAgICBt Y2lfd3JpdGVsKGhvc3QsIEFSR1VNRU5UX1IsIHN0b3AuYXJnKTsNCj4gKyAgICAgZHdfbWNpX2Nx ZV9zdGFydF9jb21tYW5kKGhvc3QsICZzdG9wLCBjbWRyKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBkd19tY2lfY3FlX3dhaXRfd2hpbGVfYnVzeShzdHJ1Y3QgZHdfbWNpICpob3N0LCB1MzIg KnN0YXR1cykNCj4gK3sNCj4gKyAgICAgc3RydWN0IG1tY19jb21tYW5kIGNtZDsNCj4gKyAgICAg dTMyIGNtZHI7DQo+ICsgICAgIHUzMiBjdXJfc3RhdGU7DQo+ICsgICAgIHVuc2lnbmVkIGxvbmcg dGltZWVuZDsNCj4gKyAgICAgaW50IGVyciA9IDA7DQo+ICsNCj4gKyAgICAgbWVtc2V0KCZjbWQs IDAsIHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsNCj4gKw0KPiArICAgICB0aW1lZW5kID0g amlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNjAwKTsNCj4gKw0KPiArICAgICBkbyB7DQo+ICsg ICAgICAgICAgICAgY21kLm9wY29kZSA9IE1NQ19TRU5EX1NUQVRVUzsNCj4gKyAgICAgICAgICAg ICBjbWQuYXJnID0gMSA8PCAxNjsNCj4gKyAgICAgICAgICAgICBjbWQuZmxhZ3MgPSBNTUNfUlNQ X1NQSV9SMiB8IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FDOw0KPiArICAgICAgICAgICAgIGNtZC5k YXRhID0gTlVMTDsNCj4gKw0KPiArICAgICAgICAgICAgIGNtZHIgPSAoY21kLm9wY29kZSA8PCA4 KSB8IFNETU1DX1JFU1BfTEVOXzQ4IHwNCj4gKyAgICAgICAgICAgICAgICAgICAgIFNETU1DX0NN RF9DSEtfUkVTUF9DUkMgfCBTRE1NQ19DTURfSURYX0NIS19FTkFCTEU7DQo+ICsNCj4gKyAgICAg ICAgICAgICBtY2lfd3JpdGV3KGhvc3QsIFhGRVJfTU9ERV9SLCAwKTsNCj4gKyAgICAgICAgICAg ICBtY2lfd3JpdGVsKGhvc3QsIEFSR1VNRU5UX1IsIGNtZC5hcmcpOw0KPiArDQo+ICsgICAgICAg ICAgICAgZXJyID0gZHdfbWNpX2NxZV9zdGFydF9jb21tYW5kKGhvc3QsICZjbWQsIGNtZHIpOw0K PiArICAgICAgICAgICAgIGlmIChlcnIpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGR3X21j aV9jcWVfcmVzZXQoaG9zdCk7DQo+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAg ICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICAgZHdfbWNpX2NxZV9yZWFkX3JzcChob3N0LCAm Y21kLCBjbWQucmVzcCk7DQo+ICsNCj4gKyAgICAgICAgICAgICAqc3RhdHVzID0gY21kLnJlc3Bb MF07DQo+ICsgICAgICAgICAgICAgY3VyX3N0YXRlID0gUjFfQ1VSUkVOVF9TVEFURShjbWQucmVz cFswXSk7DQo+ICsgICAgICAgICAgICAgZXJyID0gLURXX01DSV9OT1RfUkVBRFk7DQo+ICsgICAg ICAgICAgICAgaWYgKGN1cl9zdGF0ZSA9PSBSMV9TVEFURV9UUkFOKSB7DQo+ICsgICAgICAgICAg ICAgICAgICAgICBpZiAoY21kLnJlc3BbMF0gJiBSMV9SRUFEWV9GT1JfREFUQSkgew0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAwOw0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICAg ICAgICB9DQo+ICsgICAgIH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVlbmQpKTsN Cj4gKw0KPiArICAgICByZXR1cm4gZXJyOw0KPiArDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IGR3X21jaV9jcWVfc3RvcF9kbWEoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19kYXRh ICpkYXRhKQ0KPiArew0KPiArICAgICB1MzIgZGlyID0gMDsNCj4gKw0KPiArICAgICBpZiAoZGF0 YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQ0KPiArICAgICAgICAgICAgIGRpciA9IERNQV9GUk9N X0RFVklDRTsNCj4gKyAgICAgZWxzZQ0KPiArICAgICAgICAgICAgIGRpciA9IERNQV9UT19ERVZJ Q0U7DQo+ICsNCj4gKyAgICAgZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+c2xvdC0+bW1jKSwg ZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwgZGlyKTsNCj4gKyAgICAgaG9zdC0+c2cgPSBOVUxMOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX3ByZXBhcmVfZGVzYzY0KHN0cnVj dCBkd19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQ0KPiArew0KPiAr ICAgICBkZXZfaW5mbyhob3N0LT5kZXYsICJDdXJyZW50bHksIHRoZSA2NGJpdCBETUEgbW9kZSBp cyBub3QgaW1wbGVtZW50ZWQgeWV0LlxuIik7DQo+ICt9DQo+ICsNCj4gKw0KPiArc3RhdGljIHZv aWQgZHdfbWNpX2NxZV9wcmVwYXJlX2Rlc2MzMihzdHJ1Y3QgZHdfbWNpICpob3N0LCBzdHJ1Y3Qg bW1jX2RhdGEgKmRhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHNjYXR0ZXJsaXN0ICpzZykNCj4gK3sNCj4gKyAgICAgdTMyICBibGtfY250LCBjdXJf YmxrX2NudCwgcmVtYWluX2Jsa19jbnQ7DQo+ICsgICAgIHUzMiAgdG1wX3ZhbDsNCj4gKyAgICAg dTMyICpkZXNjX2Jhc2UgPSBob3N0LT5zZ19jcHU7DQo+ICsgICAgIHUzMiAgZG1hX2xlbiA9IDA7 DQo+ICsgICAgIHUzMiAgZG1hX2FkZHI7DQo+ICsgICAgIHUzMiAgaTsNCj4gKyAgICAgdW5zaWdu ZWQgaW50IGJlZ2luLCBlbmQ7DQo+ICsNCj4gKyAgICAgZm9yIChpID0gMDsgaSA8IGhvc3QtPmRt YV9uZW50czsgaSsrLCBzZysrKSB7DQo+ICsgICAgICAgICAgICAgZG1hX2xlbiA9IHNnX2RtYV9s ZW4oc2cpOw0KPiArDQo+ICsgICAgICAgICAgICAgLypibGtfY250IG11c3QgYmUgdGhlIG11bHRp cGxlIG9mIDUxMigweDIwMCkqLw0KPiArICAgICAgICAgICAgIGlmIChkbWFfbGVuIDwgU1pfNTEy KQ0KPiArICAgICAgICAgICAgICAgICAgICAgYmxrX2NudCA9IDE7DQo+ICsgICAgICAgICAgICAg ZWxzZQ0KPiArICAgICAgICAgICAgICAgICAgICAgYmxrX2NudCAgPSBkbWFfbGVuID4+IDk7DQo+ ICsNCj4gKyAgICAgICAgICAgICByZW1haW5fYmxrX2NudCAgPSBibGtfY250Ow0KPiArICAgICAg ICAgICAgIGRtYV9hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOw0KPiArDQo+ICsgICAgICAgICAg ICAgd2hpbGUgKHJlbWFpbl9ibGtfY250KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAvKkRX X01DSV9NQVhfU0NSSVBUX0JMSyBpcyB0aGUgbWF4DQo+ICsgICAgICAgICAgICAgICAgICAgICAg KiBmb3IgZWFjaCBkZXNjcmlwdG9yIHJlY29yZA0KPiArICAgICAgICAgICAgICAgICAgICAgICov DQo+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluX2Jsa19jbnQgPiBEV19NQ0lfTUFY X1NDUklQVF9CTEspDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9ibGtfY250 ID0gRFdfTUNJX01BWF9TQ1JJUFRfQkxLOw0KPiArICAgICAgICAgICAgICAgICAgICAgZWxzZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfYmxrX2NudCA9IHJlbWFpbl9ibGtf Y250Ow0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAvKiBJbiBTeW5vcHN5cyBEZXNpZ25X YXJlIERhdGFib29rIFBhZ2UgODQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKiBUaGV5IG1l bnRpb25lZCB0aGUgRE1BIDEyOE1CIHJlc3RyaWN0aW9uDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgKi8NCj4gKyAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gZG1hX2FkZHIgLyBTWl8xMjhN Ow0KPiArICAgICAgICAgICAgICAgICAgICAgZW5kID0gKGRtYV9hZGRyICsgY3VyX2Jsa19jbnQg KiBTWl81MTIpIC8gU1pfMTI4TTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgLypJZiBi ZWdpbiBhbmQgZW5kIGluIHRoZSBkaWZmZXJlbnQgMTI4TUIgbWVtb3J5IHpvbmUqLw0KPiArICAg ICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luICE9IGVuZCkNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3VyX2Jsa19jbnQgPSAoZW5kICogU1pfMTI4TSAtIGRtYV9hZGRyKSAvIFNa XzUxMjsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgaWYgKGRtYV9sZW4gPCBTWl81MTIp DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF92YWwgPSAoKGRtYV9sZW4pIDw8 IDE2KSB8IFZBTElEKDB4MSkgfCBBQ1QoMHg0KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGVs c2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX3ZhbCA9ICgoY3VyX2Jsa19j bnQgJiAweDdmKSA8PCAyNSkgfCBWQUxJRCgweDEpIHwgQUNUKDB4NCk7DQo+ICsNCj4gKyAgICAg ICAgICAgICAgICAgICAgIC8qTGFzdCBkZXNjcmlwdG9yKi8NCj4gKyAgICAgICAgICAgICAgICAg ICAgIGlmIChpID09IGhvc3QtPmRtYV9uZW50cyAtIDEgJiYgcmVtYWluX2Jsa19jbnQgPT0gY3Vy X2Jsa19jbnQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF92YWwgfD0gRU5E KDB4MSk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGRlc2NfYmFzZVswXSA9ICB0bXBf dmFsOw0KPiArICAgICAgICAgICAgICAgICAgICAgZGVzY19iYXNlWzFdID0gIGRtYV9hZGRyOw0K PiArDQo+ICsgICAgICAgICAgICAgICAgICAgICBkbWFfYWRkciA9IGRtYV9hZGRyICsgKGN1cl9i bGtfY250IDw8IDkpOw0KPiArICAgICAgICAgICAgICAgICAgICAgcmVtYWluX2Jsa19jbnQgLT0g Y3VyX2Jsa19jbnQ7DQo+ICsgICAgICAgICAgICAgICAgICAgICBkZXNjX2Jhc2UgKz0gMjsNCj4g KyAgICAgICAgICAgICB9DQo+ICsgICAgIH0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHdf bWNpX2NxZV9wcmVfcmVxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBk d19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ICsgICAgIHN0cnVjdCBkd19tY2kg Kmhvc3QgPSBzbG90LT5ob3N0Ow0KPiArICAgICBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBtcnEt PmRhdGE7DQo+ICsgICAgIHVuc2lnbmVkIGludCBzZ19sZW47DQo+ICsNCj4gKyAgICAgaWYgKCFz bG90LT5ob3N0LT51c2VfZG1hIHx8ICFkYXRhKQ0KPiArICAgICAgICAgICAgIHJldHVybjsNCj4g Kw0KPiArICAgICAvKiBUaGlzIGRhdGEgbWlnaHQgYmUgdW5tYXBwZWQgYXQgdGhpcyB0aW1lICov DQo+ICsgICAgIGRhdGEtPmhvc3RfY29va2llID0gQ09PS0lFX1VOTUFQUEVEOw0KPiArDQo+ICsg ICAgIHNnX2xlbiA9IGRtYV9tYXBfc2coaG9zdC0+ZGV2LA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGEtPnNnLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNnX2xl biwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBtbWNfZ2V0X2RtYV9kaXIoZGF0YSkpOw0K PiArICAgICBpZiAoc2dfbGVuIDwgMCkNCj4gKyAgICAgICAgICAgICBkYXRhLT5ob3N0X2Nvb2tp ZSA9IENPT0tJRV9VTk1BUFBFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHdfbWNpX2Nx ZV9wb3N0X3JlcShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZXJyKQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBtbWNf cHJpdihtbWMpOw0KPiArICAgICBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBtcnEtPmRhdGE7DQo+ ICsNCj4gKyAgICAgaWYgKCFzbG90LT5ob3N0LT51c2VfZG1hIHx8ICFkYXRhKQ0KPiArICAgICAg ICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgICBpZiAoZGF0YS0+aG9zdF9jb29raWUgIT0gQ09P S0lFX1VOTUFQUEVEKQ0KPiArICAgICAgICAgICAgIGRtYV91bm1hcF9zZyhzbG90LT5ob3N0LT5k ZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnNnLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhLT5zZ19sZW4sDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgIG1tY19nZXRfZG1hX2RpcihkYXRhKSk7DQo+ICsgICAgIGRhdGEtPmhvc3RfY29va2llID0g Q09PS0lFX1VOTUFQUEVEOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGR3X21jaV9jcWVfZ2V0 X2NkKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Ns b3QgKnNsb3QgPSBtbWNfcHJpdihtbWMpOw0KPiArICAgICBzdHJ1Y3QgZHdfbWNpICpob3N0ID0g c2xvdC0+aG9zdDsNCj4gKyAgICAgaW50IGdwaW9fY2QgPSBtbWNfZ3Bpb19nZXRfY2QobW1jKTsN Cj4gKyAgICAgaW50IHByZXNlbnQgPSAtMTsNCj4gKw0KPiArICAgICAvKiBVc2UgcGxhdGZvcm0g Z2V0X2NkIGZ1bmN0aW9uLCBlbHNlIHRyeSBvbmJvYXJkIGNhcmQgZGV0ZWN0ICovDQo+ICsgICAg IGlmICgoKG1tYy0+Y2FwcyAmIE1NQ19DQVBfTkVFRFNfUE9MTCkNCj4gKyAgICAgICAgICAgICB8 fCAhbW1jX2NhcmRfaXNfcmVtb3ZhYmxlKG1tYykpKSB7DQo+ICsgICAgICAgICAgICAgcHJlc2Vu dCA9IDE7DQo+ICsNCj4gKyAgICAgICAgICAgICBpZiAoIXRlc3RfYml0KERXX01NQ19DQVJEX1BS RVNFTlQsICZzbG90LT5mbGFncykpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChtbWMt PmNhcHMgJiBNTUNfQ0FQX05FRURTX1BPTEwpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGV2X2luZm8oJm1tYy0+Y2xhc3NfZGV2LA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJjYXJkIGlzIHBvbGxpbmcuXG4iKTsNCj4gKyAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9pbmZv KCZtbWMtPmNsYXNzX2RldiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiY2FyZCBpcyBub24tcmVtb3ZhYmxlLlxuIik7DQo+ICsgICAgICAgICAgICAgICAgICAgICB9 DQo+ICsgICAgICAgICAgICAgICAgICAgICBzZXRfYml0KERXX01NQ19DQVJEX1BSRVNFTlQsICZz bG90LT5mbGFncyk7DQo+ICsgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgcmV0 dXJuIHByZXNlbnQ7DQo+ICsgICAgIH0gZWxzZSBpZiAoZ3Bpb19jZCA+PSAwKSB7DQo+ICsgICAg ICAgICAgICAgcHJlc2VudCA9IGdwaW9fY2Q7DQo+ICsgICAgIH0gZWxzZSB7DQo+ICsgICAgICAg ICAgICAgLypTRCBjYXJkIGRldGVjdCB1c2luZyBJUCByZWdzIGlzIHRvZG8qLw0KPiArICAgICAg ICAgICAgIGRldl9lcnIoJm1tYy0+Y2xhc3NfZGV2LCAiU0QgY2FyZCBkZXRlY3QgdXNpbmcgSVAg cmVncyBpcyBUb0RvLlxuIik7DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICBzcGluX2xvY2tfYmgo Jmhvc3QtPmxvY2spOw0KPiArDQo+ICsgICAgIGlmIChwcmVzZW50ICYmICF0ZXN0X2FuZF9zZXRf Yml0KERXX01NQ19DQVJEX1BSRVNFTlQsICZzbG90LT5mbGFncykpDQo+ICsgICAgICAgICAgICAg ZGV2X2RiZygmbW1jLT5jbGFzc19kZXYsICJjYXJkIGlzIHByZXNlbnRcbiIpOw0KPiArICAgICBl bHNlIGlmICghcHJlc2VudCAmJg0KPiArICAgICAgICAgICAgICF0ZXN0X2FuZF9jbGVhcl9iaXQo RFdfTU1DX0NBUkRfUFJFU0VOVCwgJnNsb3QtPmZsYWdzKSkNCj4gKyAgICAgICAgICAgICBkZXZf ZGJnKCZtbWMtPmNsYXNzX2RldiwgImNhcmQgaXMgbm90IHByZXNlbnRcbiIpOw0KPiArDQo+ICsg ICAgIHNwaW5fdW5sb2NrX2JoKCZob3N0LT5sb2NrKTsNCj4gKw0KPiArICAgICByZXR1cm4gcHJl c2VudDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZHdfbWNpX2NxZV9zdWJtaXRfZGF0YV9k bWEoc3RydWN0IGR3X21jaSAqaG9zdCkNCj4gK3sNCj4gKyAgICAgaWYgKGhvc3QtPmRtYV82NGJp dF9hZGRyZXNzID09IDEpDQo+ICsgICAgICAgICAgICAgZHdfbWNpX2NxZV9wcmVwYXJlX2Rlc2M2 NChob3N0LCBob3N0LT5kYXRhLCBob3N0LT5zZyk7DQo+ICsgICAgIGVsc2UNCj4gKyAgICAgICAg ICAgICBkd19tY2lfY3FlX3ByZXBhcmVfZGVzYzMyKGhvc3QsIGhvc3QtPmRhdGEsIGhvc3QtPnNn KTsNCj4gKw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX3N1Ym1pdF9kYXRh KHN0cnVjdCBkd19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkNCj4gK3sNCj4gKyAg ICAgdTMyIGRpciA9IDA7DQo+ICsNCj4gKyAgICAgaG9zdC0+c2cgPSBOVUxMOw0KPiArICAgICBo b3N0LT5kYXRhID0gZGF0YTsNCj4gKw0KPiArICAgICBpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFU QV9SRUFEKQ0KPiArICAgICAgICAgICAgIGRpciA9IERNQV9GUk9NX0RFVklDRTsNCj4gKyAgICAg ZWxzZQ0KPiArICAgICAgICAgICAgIGRpciA9IERNQV9UT19ERVZJQ0U7DQo+ICsNCj4gKyAgICAg aG9zdC0+ZG1hX25lbnRzID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPnNsb3QtPm1tYyksDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+c2csIGRhdGEtPnNn X2xlbiwgZGlyKTsNCj4gKyAgICAgaG9zdC0+c2cgPSBkYXRhLT5zZzsNCj4gKw0KPiArICAgICBo b3N0LT51c2luZ19kbWEgPSAxOw0KPiArDQo+ICsgICAgIGR3X21jaV9jcWVfc3VibWl0X2RhdGFf ZG1hKGhvc3QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX3NldHVwX2J1 cyhzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QsIGJvb2wgZm9yY2VfY2xraW5pdCkNCj4gK3sNCj4g KyAgICAgc3RydWN0IGR3X21jaSAqaG9zdCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNvbnN0IHN0 cnVjdCBkd19tY2lfZHJ2X2RhdGEgKmRydl9kYXRhID0gaG9zdC0+ZHJ2X2RhdGE7DQo+ICsgICAg IHVuc2lnbmVkIGludCBjbG9jayA9IHNsb3QtPmNsb2NrOw0KPiArICAgICB1MzIgZGl2ID0gMDsN Cj4gKw0KPiArICAgICBzbG90LT5tbWMtPmFjdHVhbF9jbG9jayA9IDA7DQo+ICsNCj4gKyAgICAg aWYgKGNsb2NrICE9IGhvc3QtPmN1cnJlbnRfc3BlZWQgfHwgZm9yY2VfY2xraW5pdCkgew0KPiAr ICAgICAgICAgICAgIGRpdiA9IGhvc3QtPmJ1c19oeiAvIGNsb2NrOw0KPiArICAgICAgICAgICAg IGlmIChob3N0LT5idXNfaHogJSBjbG9jaykNCj4gKyAgICAgICAgICAgICAgICAgICAgIGRpdiAr PSAxOw0KPiArDQo+ICsgICAgICAgICAgICAgaWYgKGNsb2NrICE9IHNsb3QtPl9fY2xrX29sZCkg ew0KPiArICAgICAgICAgICAgICAgICAgICAgLyogU2lsZW50IHRoZSB2ZXJib3NlIGxvZyBpZiBj YWxsaW5nIGZyb20gUE0gY29udGV4dCAqLw0KPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2lu Zm8oJnNsb3QtPm1tYy0+Y2xhc3NfZGV2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiQnVzIHNwZWVkIChzbG90ICVkKSA9ICVkSHogKHNsb3QgcmVxICVkSHosIGFjdHVhbCAlZEha IGRpdiA9ICVkKVxuIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC0+aWQs IGhvc3QtPmJ1c19oeiwgY2xvY2ssIGhvc3QtPmJ1c19oeiAvIGRpdiwgZGl2KTsNCj4gKyAgICAg ICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICBzbG90LT5fX2Nsa19vbGQgPSBjbG9jazsN Cj4gKyAgICAgICAgICAgICBzbG90LT5tbWMtPmFjdHVhbF9jbG9jayA9IGhvc3QtPmJ1c19oeiAv IGRpdjsNCj4gKw0KPiArICAgICAgICAgICAgIGlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+c2V0 X2lvcykNCj4gKyAgICAgICAgICAgICAgICAgICAgIGRydl9kYXRhLT5zZXRfaW9zKHNsb3QsICZz bG90LT5tbWMtPmlvcyk7DQo+ICsgICAgIH0NCj4gK30NCj4gKw0KPiArDQo+ICtzdGF0aWMgdm9p ZCBkd19tY2lfY3FlX2Vycl9oYW5kbGUoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19j b21tYW5kICpjbWQpDQo+ICt7DQo+ICsgICAgIHUzMiBzdGF0dXMgPSAwOw0KPiArICAgICBpbnQg ZXJyID0gMDsNCj4gKyAgICAgaW50IHJ0eV9jbnQgPSAwOw0KPiArICAgICBpbnQgcHN0YXRfcnR5 ID0gMDsNCj4gKw0KPiArICAgICBkbyB7DQo+ICsgICAgICAgICAgICAgbWNpX3dyaXRldyhob3N0 LCBFUlJPUl9JTlRfU1RBVF9SLA0KPiArICAgICAgICAgICAgICAgICAgICAgbWNpX3JlYWR3KGhv c3QsIEVSUk9SX0lOVF9TVEFUX1IpICYgMHhmZmZmKTsNCj4gKyAgICAgICAgICAgICAvKnN5bmNo cm9ub3VzIGFib3J0OiBzdG9wIGhvc3QgZG1hKi8NCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGVi KGhvc3QsIEJHQVBfQ1RSTF9SLCBTRE1NQ19TVE9QX0JHX1JFUSk7DQo+ICsgICAgICAgICAgICAg ZHdfbWNpX2NxZV93YWl0X2RvbmUoaG9zdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICh1MzIg KikoaG9zdC0+cmVncyArIFNETU1DX05PUk1BTF9JTlRfU1RBVF9SKSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU0RNTUNfWEZFUl9DT01QTEVURSwgU0RNTUNfWEZFUl9DT01QTEVU RSk7DQo+ICsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGhvc3QsIE5PUk1BTF9JTlRfU1RB VF9SLCBTRE1NQ19YRkVSX0NPTVBMRVRFKTsNCj4gKw0KPiArICAgICAgICAgICAgIGRvIHsNCj4g KyAgICAgICAgICAgICAgICAgICAgIGlmIChjbWQtPm9wY29kZSAhPSBNTUNfU0VORF9UVU5JTkdf QkxPQ0tfSFMyMDApIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdfbWNpX2Nx ZV9wcmVwX3N0b3BfYWJvcnQoaG9zdCwgY21kKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWRlbGF5KDEpOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVy ciA9IGR3X21jaV9jcWVfd2FpdF93aGlsZV9idXN5KGhvc3QsICZzdGF0dXMpOw0KPiArDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0eV9jbnQrKzsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHJ0eV9jbnQgPiAxMDApIHsNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IC1EV19NQ0lfTk9UX1JFQURZKQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5k ZXYsICJzdGF0dXMgY2hlY2sgZmFpbGVkLCBlcnIgPSAlZCwgc3RhdHVzID0gMHgleFxuIiwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy LCBzdGF0dXMpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KPiArICAgICAgICAgICAgICAgICAgICAgfQ0KPiArICAgICAgICAgICAgIH0gd2hpbGUg KGVycik7DQo+ICsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGViKGhvc3QsIFNXX1JTVF9SLCBT RE1NQ19SU1RfQ01EIHwgU0RNTUNfUlNUX0RBVCk7DQo+ICsgICAgICAgICAgICAgZHdfbWNpX2Nx ZV93YWl0X2RvbmUoaG9zdCwgKHUzMiAqKShob3N0LT5yZWdzICsgU0RNTUNfQ0xLX0NUUkxfUiks DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVQoMjUpfEJJVCgyNikpLCAwKTsN Cj4gKyAgICAgICAgICAgICBkd19tY2lfY3FlX3dhaXRfZG9uZShob3N0LCAodTMyICopKGhvc3Qt PnJlZ3MgKyBTRE1NQ19QU1RBVEVfUkVHKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKFNETU1DX0NNRF9JTkhJQklUIHwgU0RNTUNfQ01EX0lOSElCSVRfREFUKSwgMCk7DQo+ICsg ICAgICAgICAgICAgdWRlbGF5KDQwKTsNCj4gKw0KPiArICAgICAgICAgICAgIHBzdGF0X3J0eSsr Ow0KPiArICAgICAgICAgICAgIGlmIChwc3RhdF9ydHkgPiA1MDAwKSB7DQo+ICsgICAgICAgICAg ICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRldiwgIndhaXQgcHN0YXRlIHJlZ2lzdGVyIGRhdGEg bGluZSByZWFkeSB0aW1lb3V0XG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K PiArICAgICAgICAgICAgIH0NCj4gKyAgICAgfSB3aGlsZSAoKG1jaV9yZWFkbChob3N0LCBQU1RB VEVfUkVHKSAmIDB4ZjAwMDAwKSAhPSAweGYwMDAwMCB8fA0KPiArICAgICAgICAgICAgIChtY2lf cmVhZGwoaG9zdCwgUFNUQVRFX1JFRykgJiAweGYwKSAhPSAweGYwKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgZHdfbWNpX2NxZV9zZW5kX3N0b3BfYWJvcnQoc3RydWN0IGR3X21jaSAqaG9z dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xv dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbWNfY29tbWFuZCAqY21k KQ0KPiArew0KPiArICAgICBkd19tY2lfY3FlX3Jlc2V0KGhvc3QpOw0KPiArDQo+ICsgICAgIGlm IChjbWQtPmRhdGEpDQo+ICsgICAgICAgICAgICAgZHdfbWNpX2NxZV9lcnJfaGFuZGxlKGhvc3Qs IGNtZCk7DQo+ICsgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICByZXR1cm47DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB1MzIgZHdfbWNpX2NxZV9wcmVwYXJlX2RhdGFfZmxhZ3Moc3RydWN0IG1tY19j b21tYW5kICpjbWQpDQo+ICt7DQo+ICsgICAgIHUzMiBkYXRhZmxhZ3M7DQo+ICsgICAgIGludCBy ZWFkX2ZsYWcgPSAxOw0KPiArICAgICBpbnQgbXVsX2Jsa19mbGFnID0gMDsNCj4gKyAgICAgaW50 IGF1dG9fc3RvcF9mbGFnID0gMDsNCj4gKw0KPiArICAgICBpZiAoY21kLT5vcGNvZGUgPT0gTU1D X1dSSVRFX0JMT0NLIHx8DQo+ICsgICAgICAgIGNtZC0+b3Bjb2RlID09IE1NQ19XUklURV9NVUxU SVBMRV9CTE9DSyB8fA0KPiArICAgICAgICBjbWQtPm9wY29kZSA9PSBNTUNfTE9DS19VTkxPQ0sg fHwNCj4gKyAgICAgICAgKGNtZC0+b3Bjb2RlID09IE1NQ19HRU5fQ01EICYmIGNtZC0+YXJnID09 IDApKQ0KPiArICAgICAgICAgICAgIHJlYWRfZmxhZyA9IDA7DQo+ICsNCj4gKyAgICAgaWYgKGNt ZC0+b3Bjb2RlID09IE1NQ19XUklURV9NVUxUSVBMRV9CTE9DSyB8fA0KPiArICAgICAgICBjbWQt Pm9wY29kZSA9PSBNTUNfUkVBRF9NVUxUSVBMRV9CTE9DSykgew0KPiArICAgICAgICAgICAgIG11 bF9ibGtfZmxhZyA9IDE7DQo+ICsgICAgICAgICAgICAgYXV0b19zdG9wX2ZsYWcgPSAxOw0KPiAr ICAgICB9DQo+ICsNCj4gKyAgICAgZGF0YWZsYWdzID0gKG11bF9ibGtfZmxhZyA8PCBTRE1NQ19N VUxUSV9CTEtfU0VMKSB8DQo+ICsgICAgICAgICAgICAgICAgIChyZWFkX2ZsYWcgPDwgU0RNTUNf REFUQV9YRkVSX0RJUikgfA0KPiArICAgICAgICAgICAgICAgICAoYXV0b19zdG9wX2ZsYWcgPDwg U0RNTUNfQVVUT19DTURfRU5BQkxFKSB8DQo+ICsgICAgICAgICAgICAgICAgIChTRE1NQ19CTE9D S19DT1VOVF9FTkFCTEUpIHwNCj4gKyAgICAgICAgICAgICAgICAgKFNETU1DX0RNQV9FTkFCTEUp Ow0KPiArDQo+ICsgICAgIHJldHVybiBkYXRhZmxhZ3M7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQgZHdfbWNpX2NxZV9jb21tYW5kX2NvbXBsZXRlKHN0cnVjdCBkd19tY2kgKmhvc3QsIHUxNiBp bnRlcnJ1cHQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpj bWRfZXJyb3IpDQo+ICt7DQo+ICsgICAgIGlmIChpbnRlcnJ1cHQgJiAoU0RNTUNfQ01EX0lEWF9F UlIgfCBTRE1NQ19DTURfRU5EX0JJVF9FUlINCj4gKyAgICAgICAgICAgICB8IFNETU1DX0NNRF9D UkNfRVJSKSkgew0KPiArICAgICAgICAgICAgIGlmIChob3N0LT50dW5pbmcpDQo+ICsgICAgICAg ICAgICAgICAgICAgICAqY21kX2Vycm9yID0gLVRVTklOR19FUlI7DQo+ICsgICAgICAgICAgICAg ZWxzZQ0KPiArICAgICAgICAgICAgICAgICAgICAgKmNtZF9lcnJvciA9IC1FSUxTRVE7DQo+ICsg ICAgIH0gZWxzZSBpZiAoaW50ZXJydXB0ICYgU0RNTUNfQ01EX1RPVVRfRVJSKSB7DQo+ICsgICAg ICAgICAgICAgaWYgKGhvc3QtPnR1bmluZykNCj4gKyAgICAgICAgICAgICAgICAgICAgICpjbWRf ZXJyb3IgPSAtVFVOSU5HX0VSUjsNCj4gKyAgICAgICAgICAgICBlbHNlDQo+ICsgICAgICAgICAg ICAgICAgICAgICAqY21kX2Vycm9yID0gLUVUSU1FRE9VVDsNCj4gKyAgICAgfSBlbHNlIHsNCj4g KyAgICAgICAgICAgICAqY21kX2Vycm9yID0gMDsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIHJl dHVybiAqY21kX2Vycm9yOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGR3X21jaV9jcWVfZGF0 YV9jb21wbGV0ZShzdHJ1Y3QgZHdfbWNpICpob3N0LCB1MTYgaW50ZXJydXB0LA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZGF0YV9lcnJvcikNCj4gK3sNCj4g KyAgICAgaWYgKGludGVycnVwdCAmIChTRE1NQ19EQVRBX0VORF9CSVRfRVJSIHwgU0RNTUNfREFU QV9DUkNfRVJSKSkgew0KPiArICAgICAgICAgICAgIGlmIChob3N0LT50dW5pbmcpDQo+ICsgICAg ICAgICAgICAgICAgICAgICAqZGF0YV9lcnJvciA9IC1UVU5JTkdfRVJSOw0KPiArICAgICAgICAg ICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICpkYXRhX2Vycm9yID0gLUVJTFNFUTsN Cj4gKyAgICAgfSBlbHNlIGlmIChpbnRlcnJ1cHQgJiBTRE1NQ19EQVRBX1RPVVRfRVJSKSB7DQo+ ICsgICAgICAgICAgICAgaWYgKGhvc3QtPnR1bmluZykNCj4gKyAgICAgICAgICAgICAgICAgICAg ICpkYXRhX2Vycm9yID0gLVRVTklOR19FUlI7DQo+ICsgICAgICAgICAgICAgZWxzZQ0KPiArICAg ICAgICAgICAgICAgICAgICAgKmRhdGFfZXJyb3IgPSAtRVRJTUVET1VUOw0KPiArICAgICB9IGVs c2UgaWYgKGludGVycnVwdCAmIFNETU1DX0FETUFfRVJSKSB7DQo+ICsgICAgICAgICAgICAgKmRh dGFfZXJyb3IgPSAtRUlPOw0KPiArICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICpkYXRh X2Vycm9yID0gMDsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIHJldHVybiAqZGF0YV9lcnJvcjsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgX19kd19tY2lfY3FlX3N0YXJ0X3JlcXVlc3Qoc3Ry dWN0IGR3X21jaSAqaG9zdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGR3X21jaV9zbG90ICpzbG90LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkNCj4gK3sNCj4gKyAgICAgc3RydWN0IG1tY19kYXRh ICpkYXRhOw0KPiArICAgICB1MzIgY21kZmxhZ3M7DQo+ICsgICAgIHUzMiBkYXRhZmxhZ3M7DQo+ ICsgICAgIGludCByZXQgPSAwOw0KPiArDQo+ICsgICAgIGRhdGEgPSBjbWQtPmRhdGE7DQo+ICsN Cj4gKyAgICAgaWYgKGRhdGEpIHsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGhvc3QsIEJM T0NLQ09VTlRfUiwgZGF0YS0+YmxvY2tzKTsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGVsKGhv c3QsIEJMT0NLU0laRV9SLCBkYXRhLT5ibGtzeik7DQo+ICsgICAgICAgICAgICAgbWNpX3dyaXRl bChob3N0LCBBRE1BX1NBX0xPV19SLCBob3N0LT5zZ19kbWEpOw0KPiArDQo+ICsgICAgICAgICAg ICAgZGF0YWZsYWdzID0gZHdfbWNpX2NxZV9wcmVwYXJlX2RhdGFfZmxhZ3MoY21kKTsNCj4gKw0K PiArICAgICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgWEZFUl9NT0RFX1IsIGRhdGFmbGFncyk7 DQo+ICsgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgaWYgKGNtZC0+b3Bjb2RlID09IE1N Q19TRVRfQkxPQ0tfQ09VTlQpDQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5pc19zYmMg PSAxOw0KPiArICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAgICAgIGhvc3Qt PmlzX3NiYyA9IDA7DQo+ICsNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGhvc3QsIFhGRVJf TU9ERV9SLCAwKTsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIG1jaV93cml0ZWwoaG9zdCwgQVJH VU1FTlRfUiwgY21kLT5hcmcpOw0KPiArDQo+ICsgICAgIGNtZGZsYWdzID0gZHdfbWNpX2NxZV9w cmVwYXJlX2NvbW1hbmQoc2xvdC0+bW1jLCBjbWQpOw0KPiArDQo+ICsgICAgIGlmIChkYXRhKSB7 DQo+ICsgICAgICAgICAgICAgZGF0YS0+Ynl0ZXNfeGZlcmVkID0gMDsNCj4gKyAgICAgICAgICAg ICBpZiAoaG9zdC0+dXNlX2RtYSA9PSBUUkFOU19NT0RFX0RNQSkgew0KPiArICAgICAgICAgICAg ICAgICAgICAgZHdfbWNpX2NxZV9zdWJtaXRfZGF0YShob3N0LCBkYXRhKTsNCj4gKyAgICAgICAg ICAgICAgICAgICAgIHdtYigpOyAvKiBkcmFpbiB3cml0ZWJ1ZmZlciAqLw0KPiArICAgICAgICAg ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAvKlVzaW5nIFBJTyBtb2RlKi8N Cj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAicGlvIG1vZGUgaXMg bm90IHN1cHBvcnRlZCBjdXJyZW50bHlcbiIpOw0KPiArICAgICAgICAgICAgIH0NCj4gKyAgICAg fQ0KPiArDQo+ICsgICAgIHJldCA9IGR3X21jaV9jcWVfc3RhcnRfY29tbWFuZChob3N0LCBjbWQs IGNtZGZsYWdzKTsNCj4gKw0KPiArICAgICBpZiAocmV0ID09IDApIHsNCj4gKyAgICAgICAgICAg ICBkd19tY2lfY3FlX3JlYWRfcnNwKGhvc3QsIGNtZCwgY21kLT5yZXNwKTsNCj4gKw0KPiArICAg ICAgICAgICAgIGlmIChkYXRhKQ0KPiArICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Ynl0ZXNf eGZlcmVkICs9IChkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzeik7DQo+ICsgICAgIH0NCj4gKw0K PiArICAgICBkd19tY2lfY3FlX2NvbW1hbmRfY29tcGxldGUoaG9zdCwgaG9zdC0+ZXJyb3JfaW50 ZXJydXB0LCAmY21kLT5lcnJvcik7DQo+ICsgICAgIGlmIChkYXRhKSB7DQo+ICsgICAgICAgICAg ICAgZHdfbWNpX2NxZV9kYXRhX2NvbXBsZXRlKGhvc3QsIGhvc3QtPmVycm9yX2ludGVycnVwdCwg JmRhdGEtPmVycm9yKTsNCj4gKyAgICAgICAgICAgICBpZiAoaG9zdC0+dXNlX2RtYSA9PSBUUkFO U19NT0RFX0RNQSkNCj4gKyAgICAgICAgICAgICAgICAgICAgIGR3X21jaV9jcWVfc3RvcF9kbWEo aG9zdCwgZGF0YSk7DQo+ICsgICAgICAgICAgICAgZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAg ICAgICAvKlVzaW5nIFBJTyBtb2RlKi8NCj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIo aG9zdC0+ZGV2LCAicGlvIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBjdXJyZW50bHlcbiIpOw0KPiAr ICAgICAgICAgICAgIH0NCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGlmIChyZXQgIT0gMCkNCj4g KyAgICAgICAgICAgICBkd19tY2lfY3FlX3NlbmRfc3RvcF9hYm9ydChob3N0LCBzbG90LCBjbWQp Ow0KPiArDQo+ICsgICAgIGlmIChjbWQtPm9wY29kZSA9PSBTRF9TV0lUQ0hfVk9MVEFHRSkgew0K PiArICAgICAgICAgICAgIC8qDQo+ICsgICAgICAgICAgICAgICogSWYgY21kMTEgbmVlZHMgdG8g YmUgZGVhbHQgd2l0aCBzcGVjaWFsbHksIHB1dCBpbiBoZXJlLg0KPiArICAgICAgICAgICAgICAq Lw0KPiArICAgICB9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfc3RhcnRf cmVxdWVzdChzdHJ1Y3QgZHdfbWNpICpob3N0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGR3X21jaV9zbG90ICpzbG90KQ0KPiArew0KPiArICAgICBzdHJ1Y3QgbW1j X3JlcXVlc3QgKm1ycSA9IHNsb3QtPm1ycTsNCj4gKw0KPiArICAgICBpZiAobXJxLT5zYmMpDQo+ ICsgICAgICAgICAgICAgX19kd19tY2lfY3FlX3N0YXJ0X3JlcXVlc3QoaG9zdCwgc2xvdCwgbXJx LT5zYmMpOw0KPiArDQo+ICsgICAgIGlmIChtcnEtPmNtZCkNCj4gKyAgICAgICAgICAgICBfX2R3 X21jaV9jcWVfc3RhcnRfcmVxdWVzdChob3N0LCBzbG90LCBtcnEtPmNtZCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgZHdfbWNpX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywNCj4gKyAg ICAgICAgICAgICAgICAgICAgICB1OCBzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgdTgg aW5kZXgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgdTggdmFsdWUsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpDQo+ICt7DQo+ICsgICAgIHN0cnVj dCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ICsgICAgIHN0cnVjdCBkd19t Y2kgKmhvc3QgPSBzbG90LT5ob3N0Ow0KPiArICAgICBzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOw0K PiArICAgICBpbnQgZXJyID0gMDsNCj4gKyAgICAgdTMyIGNtZHI7DQo+ICsNCj4gKyAgICAgbWVt c2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsNCj4gKw0KPiArICAgICBj bWQub3Bjb2RlICAgICAgICAgICAgICA9IE1NQ19TV0lUQ0g7DQo+ICsgICAgIGNtZC5hcmcgICAg ICAgICAgICAgICAgID0gKE1NQ19TV0lUQ0hfTU9ERV9XUklURV9CWVRFIDw8IDI0KSB8DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleCA8PCAxNikgfA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAodmFsdWUgPDwgOCkgfA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZXQ7DQo+ICsgICAgIGNtZC5mbGFncyAgICAgICAgICAgICAgID0gTU1DX0NN RF9BQ3xNTUNfUlNQX1NQSV9SMUIgfCBNTUNfUlNQX1IxQjsNCj4gKyAgICAgY21kLmRhdGEgICAg ICAgICAgICAgICAgPSBOVUxMOw0KPiArDQo+ICsgICAgIGNtZHIgPSAoY21kLm9wY29kZSA8PCA4 KSB8IFNETU1DX1JFU1BfTEVOXzQ4QiB8DQo+ICsgICAgICAgICAgICAgU0RNTUNfQ01EX0NIS19S RVNQX0NSQyB8IFNETU1DX0NNRF9JRFhfQ0hLX0VOQUJMRTsNCj4gKw0KPiArICAgICBtY2lfd3Jp dGV3KGhvc3QsIFhGRVJfTU9ERV9SLCAwKTsNCj4gKyAgICAgbWNpX3dyaXRlbChob3N0LCBBUkdV TUVOVF9SLCBjbWQuYXJnKTsNCj4gKw0KPiArICAgICBlcnIgPSBkd19tY2lfY3FlX3N0YXJ0X2Nv bW1hbmQoaG9zdCwgJmNtZCwgY21kcik7DQo+ICsNCj4gKyAgICAgaWYgKGVycikgew0KPiArICAg ICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAiaW50ZXJydXB0IHN0YXR1cyByZWcgOjB4JXgs IGVycm9yIHJlZyA6IDB4JXhcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5ub3Jt YWxfaW50ZXJydXB0LCBob3N0LT5lcnJvcl9pbnRlcnJ1cHQpOw0KPiArICAgICB9DQo+ICsNCj4g KyAgICAgcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBkd19tY2lfY3FlX3N3 aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgYm9vbCBlbmFibGUpDQo+ICt7DQo+ICsgICAgIHN0 cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tYy0+Y2FyZDsNCj4gKyAgICAgaW50IHJldCA9IDA7DQo+ ICsgICAgIHU4IHZhbCA9IGVuYWJsZSA/IEVYVF9DU0RfQ01EUV9NT0RFX0VOQUJMRUQgOiAwOw0K PiArDQo+ICsgICAgIGlmICghY2FyZC0+ZXh0X2NzZC5jbWRxX3N1cHBvcnQpIHsNCj4gKyAgICAg ICAgICAgICBkZXZfZXJyKCZtbWMtPmNsYXNzX2RldiwgIlRoZSBkZXZpY2UgY2FyZCBkb2VzIG5v dCBzdXBwb3J0IGNxZSBtb2RlXG4iKTsNCj4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAg ICAgfQ0KPiArDQo+ICsgICAgIHJldCA9IGR3X21jaV9zd2l0Y2gobW1jLCBFWFRfQ1NEX0NNRF9T RVRfTk9STUFMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIEVYVF9DU0RfQ01EUV9NT0RF X0VOLCB2YWwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC0+ZXh0X2NzZC5nZW5l cmljX2NtZDZfdGltZSk7DQo+ICsgICAgIGlmIChyZXQpIHsNCj4gKyAgICAgICAgICAgICBkZXZf ZXJyKCZtbWMtPmNsYXNzX2RldiwgImNtZHEgbW9kZSAlc2FibGUgZmFpbGVkICVkXG4iLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlID8gImVuIiA6ICJkaXMiLCByZXQpOw0KPiArICAg ICAgICAgICAgIGdvdG8gb3V0Ow0KPiArICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgIGNh cmQtPmV4dF9jc2QuY21kcV9lbiA9IGVuYWJsZTsNCj4gKyAgICAgfQ0KPiArDQo+ICtvdXQ6DQo+ ICsgICAgIHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVf cmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpDQo+ ICt7DQo+ICsgICAgIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ ICsgICAgIHN0cnVjdCBkd19tY2kgKmhvc3QgPSBzbG90LT5ob3N0Ow0KPiArICAgICBpbnQgcmV0 Ow0KPiArICAgICB1MzIgc3RhdHVzID0gMDsNCj4gKw0KPiArICAgICBXQVJOX09OKHNsb3QtPm1y cSk7DQo+ICsNCj4gKyAgICAgLyoNCj4gKyAgICAgICogVGhlIGNoZWNrIGZvciBjYXJkIHByZXNl bmNlIGFuZCBxdWV1ZWluZyBvZiB0aGUgcmVxdWVzdCBtdXN0IGJlDQo+ICsgICAgICAqIGF0b21p Yywgb3RoZXJ3aXNlIHRoZSBjYXJkIGNvdWxkIGJlIHJlbW92ZWQgaW4gYmV0d2VlbiBhbmQgdGhl DQo+ICsgICAgICAqIHJlcXVlc3Qgd291bGRuJ3QgZmFpbCB1bnRpbCBhbm90aGVyIGNhcmQgd2Fz IGluc2VydGVkLg0KPiArICAgICAgKi8NCj4gKw0KPiArICAgICBpZiAoIWR3X21jaV9jcWVfZ2V0 X2NkKG1tYykpIHsNCj4gKyAgICAgICAgICAgICBtcnEtPmNtZC0+ZXJyb3IgPSAtRU5PTUVESVVN Ow0KPiArICAgICAgICAgICAgIG1tY19yZXF1ZXN0X2RvbmUobW1jLCBtcnEpOw0KPiArICAgICAg ICAgICAgIHJldHVybjsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGRvd25fd3JpdGUoJmhvc3Qt PmNyX3J3X3NlbSk7DQo+ICsNCj4gKyAgICAgLypjbWRxIGNhc2UgbmVlZHMgZXh0cmEgY2hlY2sq Lw0KPiArICAgICBpZiAoaG9zdC0+cGRhdGEgJiYgKGhvc3QtPnBkYXRhLT5jYXBzMiAmIE1NQ19D QVAyX0NRRSkpIHsNCj4gKyAgICAgICAgICAgICBpZiAoKGhvc3QtPmNxZSkgPT0gTlVMTCkgew0K PiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJkd19tY2lfcmVxdWVz dF9jcWUgbm90IGRvbmUgeWV0XG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIG1kZWxheSgy KTsNCj4gKyAgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICBpZiAobW1jLT5jcWVf b24gPT0gZmFsc2UgJiYgaG9zdC0+Y3FlLT5hY3RpdmF0ZWQgPT0gdHJ1ZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgJiYgc2xvdC0+c3dpdGNoX3BhcnRpdGlvbiA9PSAwKQ0KPiArICAgICAgICAg ICAgICAgICAgICAgY3FoY2lfZGVhY3RpdmF0ZShtbWMpOw0KPiArDQo+ICsgICAgICAgICAgICAg aWYgKG1ycS0+Y21kLT5vcGNvZGUgPT0gTU1DX1NXSVRDSCAmJiBtcnEtPmNtZC0+YXJnID09IERX X01DSV9DTURRX0RJU0FCTEVEKQ0KPiArICAgICAgICAgICAgICAgICAgICAgc2xvdC0+c3dpdGNo X3BhcnRpdGlvbiA9IDE7DQo+ICsNCj4gKyAgICAgICAgICAgICAvKiB3ZSBkbyBub3QgbmVlZCB0 byBkaXNhYmxlIGNtZHEgaWYgaXQgaXMgcnBtYiByZXF1ZXN0DQo+ICsgICAgICAgICAgICAgICog YmVjYXVzZSBycG1iIGhhcyBiZWVuIGNoYW5nZWQgdG8gcnBtYiBwYXJ0aXRpb24gaW4gYmxvY2su Yw0KPiArICAgICAgICAgICAgICAqIEFsc28sIHdlIGRvIG5vdCBuZWVkIHRvIGRpc2FibGUgY21k cSBpZiB0aGlzIGNvbW1hbmQgaXMgZGlzYWJsZS9lbmFibGUgY21kcQ0KPiArICAgICAgICAgICAg ICAqLw0KPiArICAgICAgICAgICAgIGlmIChtbWMtPmNhcmQgJiYgbW1jLT5jYXJkLT5leHRfY3Nk LmNtZHFfZW4gPT0gMQ0KPiArICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+c3dpdGNoX3Bh cnRpdGlvbiA9PSAwDQo+ICsgICAgICAgICAgICAgICAgICAgICAmJiBob3N0LT5jbWRfYXRvbWlj ID09IGZhbHNlKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSBkd19tY2lfY3FlX3N3 aXRjaChtbWMsIGZhbHNlKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgaWYgKG1ycS0+ Y21kLT5vcGNvZGUgPT0gTU1DX1NMRUVQX0FXQUtFIHx8DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChtcnEtPmNtZC0+b3Bjb2RlID09IE1NQ19TRUxFQ1RfQ0FSRA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1ycS0+Y21kLT5hcmcgPT0gMCkgfHwg KG1ycS0+Y21kLT5vcGNvZGUgPT0gTU1DX1NXSVRDSA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYmIG1ycS0+Y21kLT5hcmcgPT0gRFdfTUNJX1BPV0VST0ZGKSkNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC0+Y3FlX3JlZW5hYmxlID0gMDsNCj4g KyAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaG9zdC0+Y3FlX3JlZW5hYmxlID0gMTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAg aWYgKHJldCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5k ZXYsICJkaXNhYmxlIGNtZHEgZmFpbGVkICFcbiIpOw0KPiArDQo+ICsgICAgICAgICAgICAgICAg ICAgICBkd19tY2lfY3FlX3dhaXRfd2hpbGVfYnVzeShob3N0LCAmc3RhdHVzKTsNCj4gKyAgICAg ICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICBpZiAobXJxLT5jbWQtPm9wY29kZSA9PSBN TUNfU1dJVENIDQo+ICsgICAgICAgICAgICAgICAgICAgICAmJiBtcnEtPmNtZC0+YXJnID09IERX X01DSV9DTURRX0VOQUJMRUQpDQo+ICsgICAgICAgICAgICAgICAgICAgICBzbG90LT5zd2l0Y2hf cGFydGl0aW9uID0gMDsNCj4gKw0KPiArICAgICAgICAgICAgIGlmIChtcnEtPmNtZC0+b3Bjb2Rl ID09IE1NQ19FUkFTRV9HUk9VUF9TVEFSVCkgew0KPiArICAgICAgICAgICAgICAgICAgICAgaG9z dC0+Y21kX2F0b21pYyA9IHRydWU7DQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5jcWVf cmVlbmFibGUgPSAwOw0KPiArICAgICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgICAgIGlm IChob3N0LT5jbWRfYXRvbWljID09IHRydWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICYmIG1y cS0+Y21kLT5vcGNvZGUgPT0gTU1DX1NFTkRfU1RBVFVTKSB7DQo+ICsgICAgICAgICAgICAgICAg ICAgICBob3N0LT5jbWRfYXRvbWljID0gZmFsc2U7DQo+ICsgICAgICAgICAgICAgICAgICAgICBo b3N0LT5jcWVfcmVlbmFibGUgPSAxOw0KPiArICAgICAgICAgICAgIH0NCj4gKyAgICAgfQ0KPiAr DQo+ICsgICAgIHNsb3QtPm1ycSA9IG1ycTsNCj4gKyAgICAgaG9zdC0+bXJxID0gbXJxOw0KPiAr DQo+ICsgICAgIGR3X21jaV9jcWVfc3RhcnRfcmVxdWVzdChob3N0LCBzbG90KTsNCj4gKw0KPiAr ICAgICB0YXNrbGV0X3NjaGVkdWxlKCZob3N0LT50YXNrbGV0KTsNCj4gKw0KPiArICAgICAvKmNt ZHEgY2FzZSBuZWVkcyBleHRyYSBjaGVjayovDQo+ICsgICAgIGlmIChob3N0LT5wZGF0YSAmJiAo aG9zdC0+cGRhdGEtPmNhcHMyICYgTU1DX0NBUDJfQ1FFKSAmJg0KPiArICAgICAgICAgICAgIGhv c3QtPmNxZV9yZWVuYWJsZSA9PSAxKSB7DQo+ICsgICAgICAgICAgICAgaWYgKG1tYy0+Y2FyZCAm JiBtbWMtPmNhcmQtPmV4dF9jc2QuY21kcV9lbiA9PSAwKSB7DQo+ICsgICAgICAgICAgICAgICAg ICAgICByZXQgPSBkd19tY2lfY3FlX3N3aXRjaChtbWMsIHRydWUpOw0KPiArICAgICAgICAgICAg ICAgICAgICAgaG9zdC0+Y3FlX3JlZW5hYmxlID0gMDsNCj4gKyAgICAgICAgICAgICAgICAgICAg IGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ ZGV2LCAic3dpdGNoIGNtZHEgZmFpbGVkICFcbiIpOw0KPiArICAgICAgICAgICAgICAgICAgICAg ZHdfbWNpX2NxZV93YWl0X3doaWxlX2J1c3koaG9zdCwgJnN0YXR1cyk7DQo+ICsgICAgICAgICAg ICAgfQ0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgdXBfd3JpdGUoJmhvc3QtPmNyX3J3X3NlbSk7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfc2V0X2lvcyhzdHJ1Y3QgbW1j X2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3 X21jaV9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1jKTsNCj4gKyAgICAgc3RydWN0IGR3X21jaSAq aG9zdCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEg KmRydl9kYXRhID0gc2xvdC0+aG9zdC0+ZHJ2X2RhdGE7DQo+ICsNCj4gKyAgICAgc3dpdGNoIChp b3MtPnRpbWluZykgew0KPiArICAgICBjYXNlIE1NQ19USU1JTkdfTU1DX0hTNDAwOg0KPiArICAg ICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgSE9TVF9DVFJMMl9SLA0KPiArICAgICAgICAgICAg ICAgICAgICAgKG1jaV9yZWFkdyhob3N0LCBIT1NUX0NUUkwyX1IpDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYgU0RNTUNfVUhTX01PREVfU0VMX01BU0spIHwgU0RNTUNfSFM0MDAp Ow0KPiArICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICBjYXNlIE1NQ19USU1JTkdfTU1DX0hT MjAwOg0KPiArICAgICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgSE9TVF9DVFJMMl9SLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgKG1jaV9yZWFkdyhob3N0LCBIT1NUX0NUUkwyX1IpDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgU0RNTUNfVUhTX01PREVfU0VMX01BU0spIHwg U0RNTUNfSFMyMDApOw0KPiArICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICBjYXNlIE1NQ19U SU1JTkdfTU1DX0hTOg0KPiArICAgICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgSE9TVF9DVFJM Ml9SLA0KPiArICAgICAgICAgICAgICAgICAgICAgKG1jaV9yZWFkdyhob3N0LCBIT1NUX0NUUkwy X1IpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgU0RNTUNfVUhTX01PREVfU0VM X01BU0spIHwgU0RNTUNfU0RSKTsNCj4gKyAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgZGVm YXVsdDoNCj4gKyAgICAgICAgICAgICAvKk1NQ19USU1JTkdfTEVHQUNZIGNhc2UqLw0KPiArICAg ICAgICAgICAgIG1jaV93cml0ZXcoaG9zdCwgSE9TVF9DVFJMMl9SLA0KPiArICAgICAgICAgICAg ICAgICAgICAgKG1jaV9yZWFkdyhob3N0LCBIT1NUX0NUUkwyX1IpDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICYgU0RNTUNfVUhTX01PREVfU0VMX01BU0spIHwgU0RNTUNfTEVHQUNZ KTsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIHNsb3QtPmNsb2NrID0gaW9zLT5jbG9jazsNCj4g Kw0KPiArICAgICBpZiAoZHJ2X2RhdGEgJiYgZHJ2X2RhdGEtPnNldF9pb3MpDQo+ICsgICAgICAg ICAgICAgZHJ2X2RhdGEtPnNldF9pb3Moc2xvdCwgaW9zKTsNCj4gKw0KPiArICAgICBzd2l0Y2gg KGlvcy0+YnVzX3dpZHRoKSB7DQo+ICsgICAgIGNhc2UgTU1DX0JVU19XSURUSF80Og0KPiArICAg ICAgICAgICAgIG1jaV93cml0ZWIoaG9zdCwgSE9TVF9DVFJMMV9SLA0KPiArICAgICAgICAgICAg ICAgICAgICAgKG1jaV9yZWFkYihob3N0LCBIT1NUX0NUUkwxX1IpICYNCj4gKyAgICAgICAgICAg ICAgICAgICAgIChTRE1NQ19FWFRfREFUX1hGRVJfTUFTSyAmIFNETU1DX0RBVF9YRkVSX1dJRFRI X01BU0spKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8U0RNTUNfQlVTX1dJRFRI XzQpOw0KPiArICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICBjYXNlIE1NQ19CVVNfV0lEVEhf ODoNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGViKGhvc3QsIEhPU1RfQ1RSTDFfUiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgIChtY2lfcmVhZGIoaG9zdCwgSE9TVF9DVFJMMV9SKSAmDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNETU1DX0VYVF9EQVRfWEZFUl9NQVNLKSB8IFNE TU1DX0JVU19XSURUSF84KTsNCj4gKyAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgZGVmYXVs dDoNCj4gKyAgICAgICAgICAgICAvKiBzZXQgZGVmYXVsdCAxIGJpdCBtb2RlICovDQo+ICsgICAg ICAgICAgICAgbWNpX3dyaXRlYihob3N0LCBIT1NUX0NUUkwxX1IsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAobWNpX3JlYWRiKGhvc3QsIEhPU1RfQ1RSTDFfUikgJg0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoU0RNTUNfRVhUX0RBVF9YRkVSX01BU0sgJg0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTRE1NQ19EQVRfWEZFUl9XSURUSF9NQVNLKSkgfCBTRE1NQ19C VVNfV0lEVEhfMSk7DQo+ICsgICAgIH0NCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBkd19tY2lf Y3FlX3N3aXRjaF92b2x0YWdlKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAq aW9zKQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBtbWNfcHJpdiht bWMpOw0KPiArICAgICBzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xvdC0+aG9zdDsNCj4gKyAgICAg Y29uc3Qgc3RydWN0IGR3X21jaV9kcnZfZGF0YSAqZHJ2X2RhdGEgPSBob3N0LT5kcnZfZGF0YTsN Cj4gKw0KPiArICAgICBpZiAoZHJ2X2RhdGEgJiYgZHJ2X2RhdGEtPnN3aXRjaF92b2x0YWdlKQ0K PiArICAgICAgICAgICAgIHJldHVybiBkcnZfZGF0YS0+c3dpdGNoX3ZvbHRhZ2UobW1jLCBpb3Mp Ow0KPiArDQo+ICsgICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGR3X21j aV9jcWVfZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqbW1jKQ0KPiArew0KPiArICAgICBpbnQgcmVh ZF9vbmx5Ow0KPiArICAgICBpbnQgZ3Bpb19ybyA9IG1tY19ncGlvX2dldF9ybyhtbWMpOw0KPiAr DQo+ICsgICAgIC8qIFVzZSBwbGF0Zm9ybSBnZXRfcm8gZnVuY3Rpb24sIGVsc2UgdHJ5IG9uIGJv YXJkIHdyaXRlIHByb3RlY3QgKi8NCj4gKyAgICAgaWYgKGdwaW9fcm8gPj0gMCkNCj4gKyAgICAg ICAgICAgICByZWFkX29ubHkgPSBncGlvX3JvOw0KPiArICAgICBlbHNlDQo+ICsgICAgICAgICAg ICAgLypOZWVkIHRvIHJlYWQgdGhlIElQIHJlZ2lzdGVyIHRvIGp1ZGdlIGlmIHJvKi8NCj4gKyAg ICAgICAgICAgICBkZXZfZXJyKCZtbWMtPmNsYXNzX2RldiwgIklQIGdldF9ybyBmZWF0dXJlIGlz IG5vdCBpbXBsZW1lbnRlZCBjdXJyZW50bHkuXG4iKTsNCj4gKw0KPiArICAgICBkZXZfZGJnKCZt bWMtPmNsYXNzX2RldiwgImNhcmQgaXMgJXNcbiIsDQo+ICsgICAgICAgICAgICAgcmVhZF9vbmx5 ID8gInJlYWQtb25seSIgOiAicmVhZC13cml0ZSIpOw0KPiArDQo+ICsgICAgIHJldHVybiByZWFk X29ubHk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZHdfbWNpX2NxZV9leGVjdXRlX3R1bmlu ZyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgdTMyIG9wY29kZSkNCj4gK3sNCj4gKyAgICAgc3RydWN0 IGR3X21jaV9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1jKTsNCj4gKyAgICAgc3RydWN0IGR3X21j aSAqaG9zdCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2Rh dGEgKmRydl9kYXRhID0gaG9zdC0+ZHJ2X2RhdGE7DQo+ICsgICAgIGludCBlcnIgPSAtRUlOVkFM Ow0KPiArDQo+ICsgICAgIGlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+ZXhlY3V0ZV90dW5pbmcp DQo+ICsgICAgICAgICAgICAgZXJyID0gZHJ2X2RhdGEtPmV4ZWN1dGVfdHVuaW5nKHNsb3QsIG9w Y29kZSk7DQo+ICsgICAgIHJldHVybiBlcnI7DQo+ICsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBkd19tY2lfY3FlX3ByZXBhcmVfaHM0MDBfdHVuaW5nKHN0cnVjdCBtbWNfaG9zdCAqbW1jLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1tY19pb3MgKmlv cykNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3X21jaV9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1j KTsNCj4gKyAgICAgc3RydWN0IGR3X21jaSAqaG9zdCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNv bnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgKmRydl9kYXRhID0gaG9zdC0+ZHJ2X2RhdGE7DQo+ ICsNCj4gKyAgICAgaWYgKGRydl9kYXRhICYmIGRydl9kYXRhLT5wcmVwYXJlX2hzNDAwX3R1bmlu ZykNCj4gKyAgICAgICAgICAgICByZXR1cm4gZHJ2X2RhdGEtPnByZXBhcmVfaHM0MDBfdHVuaW5n KGhvc3QsIGlvcyk7DQo+ICsNCj4gKyAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGR3X21jaV9jcWVfaHM0MDBfY29tcGxldGUoc3RydWN0IG1tY19ob3N0ICptbWMpDQo+ ICt7DQo+ICsgICAgIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7DQo+ ICsgICAgIHN0cnVjdCBkd19tY2kgKmhvc3QgPSBzbG90LT5ob3N0Ow0KPiArICAgICBjb25zdCBz dHJ1Y3QgZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSA9IGhvc3QtPmRydl9kYXRhOw0KPiArDQo+ ICsgICAgIGlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+aHM0MDBfY29tcGxldGUpDQo+ICsgICAg ICAgICAgICAgZHJ2X2RhdGEtPmhzNDAwX2NvbXBsZXRlKG1tYyk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIGR3X21jaV9jcWVfaW5pdF9jYXJkKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1 Y3QgbW1jX2NhcmQgKmNhcmQpDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBkd19tY2lfc2xvdCAqc2xv dCA9IG1tY19wcml2KG1tYyk7DQo+ICsgICAgIHN0cnVjdCBkd19tY2kgKmhvc3QgPSBzbG90LT5o b3N0Ow0KPiArICAgICBjb25zdCBzdHJ1Y3QgZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSA9IGhv c3QtPmRydl9kYXRhOw0KPiArDQo+ICsgICAgIC8qDQo+ICsgICAgICAqIEFkZCBhbnkgcXVpcmtz IGZvciB0aGlzIHN5bm9wc3lzIElQIGhlcmUgb3INCj4gKyAgICAgICogZGVhbCB3aXRoIHNvbWV0 aGluZyBzcGVjaWFsIGZvciBzb21lIHNwZWNpZmljDQo+ICsgICAgICAqIHZlbmRvcnMnIFNPQyBw bGF0Zm9ybSBieSBjYWxsaW5nIGRydl9kYXRhLT5pbml0X2NhcmQoKS4NCj4gKyAgICAgICovDQo+ ICsgICAgIGlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+aW5pdF9jYXJkKQ0KPiArICAgICAgICAg ICAgIGRydl9kYXRhLT5pbml0X2NhcmQobW1jLCBjYXJkKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgZHdfbWNpX29wcyA9IHsNCj4gKyAgICAgLnJlcXVl c3QgICAgICAgICAgICAgICAgPSBkd19tY2lfY3FlX3JlcXVlc3QsDQo+ICsgICAgIC5wcmVfcmVx ICAgICAgICAgICAgICAgID0gZHdfbWNpX2NxZV9wcmVfcmVxLA0KPiArICAgICAucG9zdF9yZXEg ICAgICAgICAgICAgICA9IGR3X21jaV9jcWVfcG9zdF9yZXEsDQo+ICsgICAgIC5zZXRfaW9zICAg ICAgICAgICAgICAgID0gZHdfbWNpX2NxZV9zZXRfaW9zLA0KPiArICAgICAuZ2V0X3JvICAgICAg ICAgICAgICAgICA9IGR3X21jaV9jcWVfZ2V0X3JvLA0KPiArICAgICAuZ2V0X2NkICAgICAgICAg ICAgICAgICA9IGR3X21jaV9jcWVfZ2V0X2NkLA0KPiArICAgICAuZXhlY3V0ZV90dW5pbmcgICAg ICAgICA9IGR3X21jaV9jcWVfZXhlY3V0ZV90dW5pbmcsDQo+ICsgICAgIC5zdGFydF9zaWduYWxf dm9sdGFnZV9zd2l0Y2ggPSBkd19tY2lfY3FlX3N3aXRjaF92b2x0YWdlLA0KPiArICAgICAuaW5p dF9jYXJkICAgICAgICAgICAgICA9IGR3X21jaV9jcWVfaW5pdF9jYXJkLA0KPiArICAgICAucHJl cGFyZV9oczQwMF90dW5pbmcgICA9IGR3X21jaV9jcWVfcHJlcGFyZV9oczQwMF90dW5pbmcsDQo+ ICsgICAgIC5oczQwMF9jb21wbGV0ZSAgICAgICAgID0gZHdfbWNpX2NxZV9oczQwMF9jb21wbGV0 ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfdGFza2xldF9mdW5jKHVu c2lnbmVkIGxvbmcgcHJpdikNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3X21jaSAqaG9zdCA9IChz dHJ1Y3QgZHdfbWNpICopcHJpdjsNCj4gKyAgICAgc3RydWN0IG1tY19ob3N0ICpwcmV2X21tYyA9 IGhvc3QtPnNsb3QtPm1tYzsNCj4gKyAgICAgc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7DQo+ICsg ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsNCj4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUo Jmhvc3QtPmlycV9sb2NrLCBmbGFncyk7DQo+ICsNCj4gKyAgICAgaG9zdC0+Y21kID0gTlVMTDsN Cj4gKyAgICAgaG9zdC0+ZGF0YSA9IE5VTEw7DQo+ICsgICAgIG1ycSA9IGhvc3QtPm1ycTsNCj4g KyAgICAgaG9zdC0+c2xvdC0+bXJxID0gTlVMTDsNCj4gKyAgICAgaG9zdC0+bXJxID0gTlVMTDsN Cj4gKw0KPiArICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5pcnFfbG9jaywgZmxh Z3MpOw0KPiArDQo+ICsgICAgIG1tY19yZXF1ZXN0X2RvbmUocHJldl9tbWMsIG1ycSk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfY3FlX2ludGVycnVwdChpbnQgaXJx LCB2b2lkICpkZXZfaWQpDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBkd19tY2kgKmhvc3QgPSBkZXZf aWQ7DQo+ICsgICAgIHN0cnVjdCBtbWNfaG9zdCAqbW1jID0gaG9zdC0+c2xvdC0+bW1jOw0KPiAr ICAgICBzdHJ1Y3QgY3FoY2lfaG9zdCAqY3FfaG9zdCA9IE5VTEw7DQo+ICsgICAgIGludCBjbWRf ZXJyb3IgPSAwLCBkYXRhX2Vycm9yID0gMDsNCj4gKw0KPiArICAgICBpZiAoaG9zdC0+cGRhdGEg JiYgKGhvc3QtPnBkYXRhLT5jYXBzMiAmIE1NQ19DQVAyX0NRRSkpDQo+ICsgICAgICAgICAgICAg Y3FfaG9zdCA9IG1tYy0+Y3FlX3ByaXZhdGU7DQo+ICsNCj4gKyAgICAgZHdfbWNpX2dldF9pbnQo aG9zdCk7DQo+ICsNCj4gKyAgICAgaWYgKGhvc3QtPnBkYXRhICYmIChob3N0LT5wZGF0YS0+Y2Fw czIgJiBNTUNfQ0FQMl9DUUUpKSB7DQo+ICsgICAgICAgICAgICAgaWYgKG1tYy0+Y3FlX29uID09 IGZhbHNlICYmIGNxX2hvc3QtPmFjdGl2YXRlZCA9PSBmYWxzZSkNCj4gKyAgICAgICAgICAgICAg ICAgICAgIGR3X21jaV9jbHJfc2lnbmFsX2ludChob3N0KTsNCj4gKyAgICAgfSBlbHNlIHsNCj4g KyAgICAgICAgICAgICBkd19tY2lfY2xyX3NpZ25hbF9pbnQoaG9zdCk7DQo+ICsgICAgIH0NCj4g KyAgICAgLyppZiBydW4gdGhlIGNtZHEgbW9kZSovDQo+ICsgICAgIGlmIChob3N0LT5wZGF0YSAm JiAoaG9zdC0+cGRhdGEtPmNhcHMyICYgTU1DX0NBUDJfQ1FFKSAmJg0KPiArICAgICAgICAgICAg IG1tYy0+Y3FlX29uID09IHRydWUgJiYgY3FfaG9zdC0+YWN0aXZhdGVkID09IHRydWUpIHsNCj4g KyAgICAgICAgICAgICBpZiAoaG9zdC0+bm9ybWFsX2ludGVycnVwdCAmIFNETU1DX0VSUl9JTlRF UlJVUFQpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAiY21k cSBlcnJvcjogaW50ZXJydXB0IHN0YXR1cz0lMDh4LCBlcnJvciBpbnRlcnJ1cHQ9MHglMDh4LCBD UUlTPTB4JXgsIENRVENOPTB4JXhcbiIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhvc3QtPm5vcm1hbF9pbnRlcnJ1cHQsIGhvc3QtPmVycm9yX2ludGVycnVwdCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGwoaG9zdC0+Y3FlLT5tbWlvICsgQ1FIQ0lfSVMp LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkbChob3N0LT5jcWUtPm1taW8g KyBDUUhDSV9UQ04pKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgZHdfbWNpX2NxZV9j b21tYW5kX2NvbXBsZXRlKGhvc3QsIGhvc3QtPmVycm9yX2ludGVycnVwdCwgJmNtZF9lcnJvcik7 DQo+ICsgICAgICAgICAgICAgICAgICAgICBkd19tY2lfY3FlX2RhdGFfY29tcGxldGUoaG9zdCwg aG9zdC0+ZXJyb3JfaW50ZXJydXB0LCAmZGF0YV9lcnJvcik7DQo+ICsgICAgICAgICAgICAgfQ0K PiArICAgICAgICAgICAgIGNxaGNpX2lycShtbWMsICh1MzIpKGhvc3QtPm5vcm1hbF9pbnRlcnJ1 cHQpLCBjbWRfZXJyb3IsIGRhdGFfZXJyb3IpOw0KPiArICAgICAgICAgICAgIGR3X21jaV9jbHJf aW50KGhvc3QpOw0KPiArDQo+ICsgICAgICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOw0KPiAr ICAgICB9DQo+ICsNCj4gKyAgICAgaWYgKGhvc3QtPmludF93YWl0aW5nKSB7DQo+ICsgICAgICAg ICAgICAgZGVsX3RpbWVyKCZob3N0LT50aW1lcik7DQo+ICsgICAgICAgICAgICAgY29tcGxldGUo aG9zdC0+aW50X3dhaXRpbmcpOw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgcmV0dXJuIElSUV9I QU5ETEVEOw0KPiArDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGR3X21jaV9jcWVfc2V0dXAo c3RydWN0IGR3X21jaSAqaG9zdCkNCj4gK3sNCj4gKyAgICAgbWNpX3dyaXRlYihob3N0LCBTV19S U1RfUiwgKFNETU1DX1JTVF9BTEx8U0RNTUNfUlNUX0NNRHxTRE1NQ19SU1RfREFUKSk7DQo+ICsg ICAgIG1jaV93cml0ZWIoaG9zdCwgVE9VVF9DVFJMX1IsIDB4ZSk7DQo+ICsgICAgIG1jaV93cml0 ZXcoaG9zdCwgSE9TVF9DVFJMMl9SLCBTRE1NQ19IT1NUX1ZFUjRfRU5BQkxFfFNETU1DX1NJR05B TElOR19FTik7DQo+ICsgICAgIG1jaV93cml0ZXcoaG9zdCwgTk9STUFMX0lOVF9TVEFUX0VOX1Is IDB4ZmZmZik7DQo+ICsgICAgIG1jaV93cml0ZXcoaG9zdCwgRVJST1JfSU5UX1NUQVRfRU5fUiwg U0RNTUNfQUxMX0VSUl9TVEFUX0VOKTsNCj4gKyAgICAgLypDYXJkIGRldGVjdCB3aWxsIGJlIGVu YWJsZWQgaW4gdGhlIGxhc3QqLw0KPiArICAgICBtY2lfd3JpdGV3KGhvc3QsIE5PUk1BTF9JTlRf U0lHTkFMX0VOX1IsDQo+ICsgICAgICAgICAgICAgKH4oU0RNTUNfQ0FSRF9JTlNFUlRJT05fU0lH TkFMX0VOIHwgU0RNTUNfQ0FSRF9SRU1PVkFMX1NJR05BTF9FTiB8DQo+ICsgICAgICAgICAgICAg ICAgICAgICBTRE1NQ19DQVJEX0lOVEVSUlVQVF9TSUdOQUxfRU4pICYgMHhmZmZmKSk7DQo+ICsg ICAgIG1jaV93cml0ZXcoaG9zdCwgRVJST1JfSU5UX1NJR05BTF9FTl9SLCBTRE1NQ19BTExfRVJS X1NJR05BTF9FTik7DQo+ICsgICAgIG1jaV93cml0ZWIoaG9zdCwgQ1RSTF9SLCBTRE1NQ19SU1Rf Tl9PRXxTRE1NQ19SU1RfTnxTRE1NQ19DQVJEX0lTX0VNTUMpOw0KPiArICAgICBtY2lfd3JpdGVi KGhvc3QsIEhPU1RfQ1RSTDFfUiwNCj4gKyAgICAgICAgICAgICAobWNpX3JlYWRiKGhvc3QsIEhP U1RfQ1RSTDFfUikmMHhlNykgfCAoU0RNTUNfQURNQTJfMzIgPDwgU0RNTUNfRE1BX1NFTCkpOw0K PiArICAgICBtY2lfd3JpdGViKGhvc3QsIE1TSENfQ1RSTF9SLCBtY2lfcmVhZGIoaG9zdCwgTVNI Q19DVFJMX1IpICYgKH5TRE1NQ19DTURfQ09ORkxJQ1RfQ0hFQ0spKTsNCj4gKyAgICAgbWNpX3dy aXRldyhob3N0LCBDTEtfQ1RSTF9SLCBtY2lfcmVhZHcoaG9zdCwgQ0xLX0NUUkxfUil8U0RNTUNf SU5URVJOQUxfQ0xLX0VOKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBkd19tY2lfY3FlX2lu aXRfc2xvdF9jYXBzKHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCkNCj4gK3sNCj4gKyAgICAgc3Ry dWN0IGR3X21jaSAqaG9zdCA9IHNsb3QtPmhvc3Q7DQo+ICsgICAgIGNvbnN0IHN0cnVjdCBkd19t Y2lfZHJ2X2RhdGEgKmRydl9kYXRhID0gaG9zdC0+ZHJ2X2RhdGE7DQo+ICsgICAgIHN0cnVjdCBt bWNfaG9zdCAqbW1jID0gc2xvdC0+bW1jOw0KPiArICAgICBpbnQgY3RybF9pZDsNCj4gKw0KPiAr ICAgICBpZiAoaG9zdC0+cGRhdGEtPmNhcHMpDQo+ICsgICAgICAgICAgICAgbW1jLT5jYXBzID0g aG9zdC0+cGRhdGEtPmNhcHM7DQo+ICsNCj4gKyAgICAgaWYgKGhvc3QtPnBkYXRhLT5wbV9jYXBz KQ0KPiArICAgICAgICAgICAgIG1tYy0+cG1fY2FwcyA9IGhvc3QtPnBkYXRhLT5wbV9jYXBzOw0K PiArDQo+ICsgICAgIGlmIChob3N0LT5kZXYtPm9mX25vZGUpIHsNCj4gKyAgICAgICAgICAgICBj dHJsX2lkID0gb2ZfYWxpYXNfZ2V0X2lkKGhvc3QtPmRldi0+b2Zfbm9kZSwgIm1zaGMiKTsNCj4g KyAgICAgICAgICAgICBpZiAoY3RybF9pZCA8IDApDQo+ICsgICAgICAgICAgICAgICAgICAgICBj dHJsX2lkID0gMDsNCj4gKyAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICBjdHJsX2lkID0g dG9fcGxhdGZvcm1fZGV2aWNlKGhvc3QtPmRldiktPmlkOw0KPiArICAgICB9DQo+ICsNCj4gKyAg ICAgaWYgKGRydl9kYXRhICYmIGRydl9kYXRhLT5jYXBzKSB7DQo+ICsgICAgICAgICAgICAgaWYg KGN0cmxfaWQgPj0gZHJ2X2RhdGEtPm51bV9jYXBzKSB7DQo+ICsgICAgICAgICAgICAgICAgICAg ICBkZXZfZXJyKGhvc3QtPmRldiwgImludmFsaWQgY29udHJvbGxlciBpZCAlZFxuIiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybF9pZCk7DQo+ICsgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICAg bW1jLT5jYXBzIHw9IGRydl9kYXRhLT5jYXBzW2N0cmxfaWRdOw0KPiArICAgICB9DQo+ICsNCj4g KyAgICAgaWYgKGRydl9kYXRhICYmIGRydl9kYXRhLT5zaGlmdF9yc3ApDQo+ICsgICAgICAgICAg ICAgaG9zdC0+c2hpZnQgPSAxOw0KPiArICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgaG9zdC0+ c2hpZnQgPSAwOw0KPiArDQo+ICsgICAgIGlmIChob3N0LT5wZGF0YS0+Y2FwczIpDQo+ICsgICAg ICAgICAgICAgbW1jLT5jYXBzMiA9IGhvc3QtPnBkYXRhLT5jYXBzMjsNCj4gKw0KPiArICAgICBt bWMtPmZfbWluID0gRFdfTUNJX0ZSRVFfTUlOOw0KPiArICAgICBpZiAoIW1tYy0+Zl9tYXgpDQo+ ICsgICAgICAgICAgICAgbW1jLT5mX21heCA9IERXX01DSV9GUkVRX01BWDsNCj4gKw0KPiArICAg ICAvKiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqLw0KPiAr ICAgICBpZiAobW1jLT5jYXBzICYgTU1DX0NBUF9TRElPX0lSUSkNCj4gKyAgICAgICAgICAgICBt bWMtPmNhcHMyIHw9IE1NQ19DQVAyX1NESU9fSVJRX05PVEhSRUFEOw0KPiArDQo+ICsgICAgIHJl dHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGR3X21jaV9jcWVfaW5pdF9zbG90KHN0 cnVjdCBkd19tY2kgKmhvc3QpDQo+ICt7DQo+ICsgICAgIHN0cnVjdCBtbWNfaG9zdCAqbW1jOw0K PiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3Q7DQo+ICsgICAgIGludCByZXQ7DQo+ICsN Cj4gKyAgICAgbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBkd19tY2lfc2xvdCks IGhvc3QtPmRldik7DQo+ICsgICAgIGlmICghbW1jKQ0KPiArICAgICAgICAgICAgIHJldHVybiAt RU5PTUVNOw0KPiArDQo+ICsgICAgIHNsb3QgPSBtbWNfcHJpdihtbWMpOw0KPiArICAgICBzbG90 LT5pZCA9IDA7DQo+ICsgICAgIHNsb3QtPnNkaW9faWQgPSBob3N0LT5zZGlvX2lkMCArIHNsb3Qt PmlkOw0KPiArICAgICBzbG90LT5tbWMgPSBtbWM7DQo+ICsgICAgIHNsb3QtPnN3aXRjaF9wYXJ0 aXRpb24gPSAwOw0KPiArICAgICBzbG90LT5ob3N0ID0gaG9zdDsNCj4gKyAgICAgaG9zdC0+c2xv dCA9IHNsb3Q7DQo+ICsNCj4gKyAgICAgbW1jLT5vcHMgPSAmZHdfbWNpX29wczsNCj4gKw0KPiAr ICAgICAvKmlmIHRoZXJlIGFyZSBleHRlcm5hbCByZWd1bGF0b3JzLCBnZXQgdGhlbSovDQo+ICsg ICAgIHJldCA9IG1tY19yZWd1bGF0b3JfZ2V0X3N1cHBseShtbWMpOw0KPiArICAgICBpZiAocmV0 KQ0KPiArICAgICAgICAgICAgIGdvdG8gZXJyX2hvc3RfYWxsb2NhdGVkOw0KPiArDQo+ICsgICAg IGlmICghbW1jLT5vY3JfYXZhaWwpDQo+ICsgICAgICAgICAgICAgbW1jLT5vY3JfYXZhaWwgPSBN TUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsNCj4gKw0KPiArICAgICBkZXZfaW5mbyhob3N0 LT5kZXYsICJyZWd1bGF0b3Igc3VwcG9ydCB2b2xhZ2Ugb2NyX2F2YWlsPTB4JXhcbiIsDQo+ICsg ICAgICAgICAgICAgICAgICAgICBtbWMtPm9jcl9hdmFpbCk7DQo+ICsNCj4gKyAgICAgcmV0ID0g bW1jX29mX3BhcnNlKG1tYyk7DQo+ICsgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgZ290 byBlcnJfaG9zdF9hbGxvY2F0ZWQ7DQo+ICsNCj4gKyAgICAgcmV0ID0gZHdfbWNpX2NxZV9pbml0 X3Nsb3RfY2FwcyhzbG90KTsNCj4gKyAgICAgaWYgKHJldCkNCj4gKyAgICAgICAgICAgICBnb3Rv IGVycl9ob3N0X2FsbG9jYXRlZDsNCj4gKw0KPiArICAgICAvKiBVc2VmdWwgZGVmYXVsdHMgaWYg cGxhdGZvcm0gZGF0YSBpcyB1bnNldC4gKi8NCj4gKyAgICAgaWYgKGhvc3QtPnVzZV9kbWEgPT0g VFJBTlNfTU9ERV9ETUEpIHsNCj4gKyAgICAgICAgICAgICBtbWMtPm1heF9zZWdzID0gMjU2Ow0K PiArICAgICAgICAgICAgIG1tYy0+bWF4X2Jsa19zaXplID0gNTEyOw0KPiArICAgICAgICAgICAg IG1tYy0+bWF4X3NlZ19zaXplID0gMHgxMDAwOw0KPiArICAgICAgICAgICAgIG1tYy0+bWF4X3Jl cV9zaXplID0gbW1jLT5tYXhfc2VnX3NpemUgKiBtbWMtPm1heF9zZWdzOw0KPiArICAgICAgICAg ICAgIG1tYy0+bWF4X2Jsa19jb3VudCA9IG1tYy0+bWF4X3JlcV9zaXplIC8gNTEyOw0KPiArICAg ICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgIGRldl9pbmZvKGhvc3QtPmRldiwgImR3LW1tYy1j cWUgcGlvIG1vZGUgaXMgVG9Eby5cbiIpOw0KPiArICAgICAgICAgICAgIC8qIFRvIERPLCBUUkFO U19NT0RFX1BJTyAqLw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgZHdfbWNpX2NxZV9nZXRfY2Qo bW1jKTsNCj4gKw0KPiArICAgICByZXQgPSBtbWNfYWRkX2hvc3QobW1jKTsNCj4gKyAgICAgaWYg KHJldCkNCj4gKyAgICAgICAgICAgICBnb3RvIGVycl9ob3N0X2FsbG9jYXRlZDsNCj4gKw0KPiAr ICAgICByZXR1cm4gMDsNCj4gKw0KPiArZXJyX2hvc3RfYWxsb2NhdGVkOg0KPiArICAgICBtbWNf ZnJlZV9ob3N0KG1tYyk7DQo+ICsgICAgIHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGR3X21jaV9jcWVfY2xlYW51cF9zbG90KHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCkN Cj4gK3sNCj4gKyAgICAgLyogRGVidWdmcyBzdHVmZiBpcyBjbGVhbmVkIHVwIGJ5IG1tYyBjb3Jl ICovDQo+ICsgICAgIG1tY19yZW1vdmVfaG9zdChzbG90LT5tbWMpOw0KPiArICAgICBzbG90LT5o b3N0LT5zbG90ID0gTlVMTDsNCj4gKyAgICAgbW1jX2ZyZWVfaG9zdChzbG90LT5tbWMpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX2luaXRfZG1hKHN0cnVjdCBkd19tY2kg Kmhvc3QpDQo+ICt7DQo+ICsgICAgIGhvc3QtPnVzZV9kbWEgPSBUUkFOU19NT0RFX0RNQTsNCj4g Kw0KPiArICAgICAvKiBEZXRlcm1pbmUgd2hpY2ggRE1BIGludGVyZmFjZSB0byB1c2UgKi8NCj4g KyAgICAgLyogdXNpbmcgMzJiaXQgRE1BIGJ5IGRlZmF1bHQsDQo+ICsgICAgICAqIHVzZXIgY2Fu IG1vZGlmeSB0aGlzIHNldHRpbmcgYnkgZHJ2X2RhdGEtPmluaXQoKQ0KPiArICAgICAgKi8NCj4g KyAgICAgaWYgKGhvc3QtPnVzZV9kbWEgPT0gVFJBTlNfTU9ERV9ETUEpIHsNCj4gKyAgICAgICAg ICAgICBob3N0LT5kbWFfNjRiaXRfYWRkcmVzcyA9IDA7DQo+ICsgICAgICAgICAgICAgZGV2X2lu Zm8oaG9zdC0+ZGV2LCAiSURNQUMgc3VwcG9ydHMgMzItYml0IGFkZHJlc3MgbW9kZS5cbiIpOw0K PiArICAgICB9DQo+ICsNCj4gKyAgICAgLyogQWxsb2MgbWVtb3J5IGZvciBzZyB0cmFuc2xhdGlv biAqLw0KPiArICAgICBob3N0LT5zZ19jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoaG9zdC0+ZGV2 LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdfTUNJ X0RFU0NfTEVOLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmhvc3QtPnNnX2RtYSwgR0ZQX0tFUk5FTCk7DQo+ICsgICAgIGlmICghaG9zdC0+c2dfY3B1 KSB7DQo+ICsgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAiJXM6IGNvdWxkIG5vdCBhbGxvYyBETUEgbWVtb3J5XG4iLA0KPiArICAgICAgICAg ICAgICAgICAgICAgX19mdW5jX18pOw0KPiArICAgICAgICAgICAgIGdvdG8gbm9fZG1hOw0KPiAr ICAgICB9DQo+ICsNCj4gKyAgICAgcmV0dXJuOw0KPiArDQo+ICtub19kbWE6DQo+ICsgICAgIGRl dl9pbmZvKGhvc3QtPmRldiwgIlVzaW5nIFBJTyBtb2RlLlxuIik7DQo+ICsgICAgIGhvc3QtPnVz ZV9kbWEgPSBUUkFOU19NT0RFX1BJTzsNCj4gK30NCj4gKw0KPiArI2lmZGVmIENPTkZJR19PRg0K PiArc3RhdGljIHN0cnVjdCBkd19tY2lfYm9hcmQgKmR3X21jaV9jcWVfcGFyc2VfZHQoc3RydWN0 IGR3X21jaSAqaG9zdCkNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3X21jaV9ib2FyZCAqcGRhdGE7 DQo+ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGhvc3QtPmRldjsNCj4gKyAgICAgY29uc3Qg c3RydWN0IGR3X21jaV9kcnZfZGF0YSAqZHJ2X2RhdGEgPSBob3N0LT5kcnZfZGF0YTsNCj4gKyAg ICAgaW50IHJldDsNCj4gKyAgICAgdTMyIGNsb2NrX2ZyZXF1ZW5jeTsNCj4gKw0KPiArICAgICBw ZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsNCj4g KyAgICAgaWYgKCFwZGF0YSkNCj4gKyAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsNCj4gKw0KPiArICAgICAvKiBmaW5kIHJlc2V0IGNvbnRyb2xsZXIgd2hlbiBleGlzdCAqLw0K PiArICAgICBwZGF0YS0+cnN0YyA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0aW9uYWwoZGV2 LCAicmVzZXQiKTsNCj4gKyAgICAgaWYgKElTX0VSUihwZGF0YS0+cnN0YykpIHsNCj4gKyAgICAg ICAgICAgICBpZiAoUFRSX0VSUihwZGF0YS0+cnN0YykgPT0gLUVQUk9CRV9ERUZFUikNCj4gKyAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOw0KPiArICAg ICB9DQo+ICsNCj4gKyAgICAgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImNhcmQtZGV0 ZWN0LWRlbGF5IiwNCj4gKyAgICAgICAgICAgICAmcGRhdGEtPmRldGVjdF9kZWxheV9tcyk7DQo+ ICsNCj4gKyAgICAgaWYgKCFkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAiY2xvY2stZnJl cXVlbmN5IiwgJmNsb2NrX2ZyZXF1ZW5jeSkpDQo+ICsgICAgICAgICAgICAgcGRhdGEtPmJ1c19o eiA9IGNsb2NrX2ZyZXF1ZW5jeTsNCj4gKw0KPiArICAgICBpZiAoZHJ2X2RhdGEgJiYgZHJ2X2Rh dGEtPnBhcnNlX2R0KSB7DQo+ICsgICAgICAgICAgICAgcmV0ID0gZHJ2X2RhdGEtPnBhcnNlX2R0 KGhvc3QpOw0KPiArICAgICAgICAgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gRVJSX1BUUihyZXQpOw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgcmV0dXJuIHBk YXRhOw0KPiArfQ0KPiArDQo+ICsjZWxzZSAvKiBDT05GSUdfT0YgKi8NCj4gK3N0YXRpYyBzdHJ1 Y3QgZHdfbWNpX2JvYXJkICpkd19tY2lfY3FlX3BhcnNlX2R0KHN0cnVjdCBkd19tY2kgKmhvc3Qp DQo+ICt7DQo+ICsgICAgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOw0KPiArfQ0KPiArI2VuZGlm IC8qIENPTkZJR19PRiAqLw0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX2N0b190aW1l cihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkNCj4gK3sNCj4gKyAgICAgc3RydWN0IGR3X21jaSAqaG9z dCA9IGZyb21fdGltZXIoaG9zdCwgdCwgdGltZXIpOw0KPiArDQo+ICsgICAgIGlmIChob3N0LT5p bnRfd2FpdGluZykgew0KPiArICAgICAgICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAiZmlyZWQs IG9wY29kZT0lZCwgYXJnPTB4JXgsIGlycSBzdGF0dXM9MHgleCwgZXJyIGlycT0weCV4LCBhdXRv IGVyciBpcnE9MHgleFxuIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdC0+ b3Bjb2RlLCBob3N0LT5hcmcsDQo+ICsgICAgICAgICAgICAgICAgICAgICBob3N0LT5ub3JtYWxf aW50ZXJydXB0LCBob3N0LT5lcnJvcl9pbnRlcnJ1cHQsDQo+ICsgICAgICAgICAgICAgICAgICAg ICBob3N0LT5hdXRvX2Vycm9yX2ludGVycnVwdCk7DQo+ICsNCj4gKyAgICAgICAgICAgICBkd19t Y2lfY2xyX3NpZ25hbF9pbnQoaG9zdCk7DQo+ICsgICAgICAgICAgICAgZHdfbWNpX2dldF9pbnQo aG9zdCk7DQo+ICsNCj4gKyAgICAgICAgICAgICBjb21wbGV0ZShob3N0LT5pbnRfd2FpdGluZyk7 DQo+ICsgICAgIH0NCj4gK30NCj4gKw0KPiArDQo+ICtzdGF0aWMgdm9pZCBkd19tY2lfY3FlX2Vu YWJsZV9jZChzdHJ1Y3QgZHdfbWNpICpob3N0KQ0KPiArew0KPiArICAgICAvKg0KPiArICAgICAg KiBObyBuZWVkIGZvciBDRCBpZiBhbGwgc2xvdHMgaGF2ZSBhIG5vbi1lcnJvciBHUElPDQo+ICsg ICAgICAqIGFzIHdlbGwgYXMgYnJva2VuIGNhcmQgZGV0ZWN0aW9uIGlzIGZvdW5kLg0KPiArICAg ICAgKi8NCj4gKyAgICAgaWYgKGhvc3QtPnNsb3QtPm1tYy0+Y2FwcyAmIE1NQ19DQVBfTkVFRFNf UE9MTA0KPiArICAgICAgICAgICAgIHx8ICFtbWNfY2FyZF9pc19yZW1vdmFibGUoaG9zdC0+c2xv dC0+bW1jKSkNCj4gKyAgICAgICAgICAgICByZXR1cm47DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGR3X21jaV9jcWhjaV9pbml0KHN0cnVjdCBkd19tY2kgKmhvc3QpDQo+ICt7DQo+ICsgICAg IGlmIChob3N0LT5wZGF0YSAmJiAoaG9zdC0+cGRhdGEtPmNhcHMyICYgTU1DX0NBUDJfQ1FFKSkg ew0KPiArICAgICAgICAgICAgIGhvc3QtPmNxZSA9IGNxaGNpX3BsdGZtX2luaXQoaG9zdC0+cGRl dik7DQo+ICsgICAgICAgICAgICAgaWYgKFBUUl9FUlIoaG9zdC0+Y3FlKSA9PSAtRUlOVkFMIHx8 DQo+ICsgICAgICAgICAgICAgICAgUFRSX0VSUihob3N0LT5jcWUpID09IC1FTk9NRU0gfHwNCj4g KyAgICAgICAgICAgICAgICBQVFJfRVJSKGhvc3QtPmNxZSkgPT0gLUVCVVNZKSB7DQo+ICsgICAg ICAgICAgICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRldiwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlVuYWJsZSB0byBnZXQgdGhlIGNtZHEgcmVsYXRlZCBhdHRyaWJ1dGUsZXJy ID0gJWxkXG4iLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVFJfRVJSKGhvc3Qt PmNxZSkpOw0KPiArICAgICAgICAgICAgICAgICAgICAgaG9zdC0+Y3FlID0gMDsNCj4gKyAgICAg ICAgICAgICAgICAgICAgIGhvc3QtPnBkYXRhLT5jYXBzMiAmPSB+KE1NQ19DQVAyX0NRRXxNTUNf Q0FQMl9DUUVfRENNRCk7DQo+ICsgICAgICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAg ICAgICAgICAgIGhvc3QtPmNxZS0+b3BzID0gJmR3X21jaV9jcWhjaV9ob3N0X29wczsNCj4gKyAg ICAgICAgICAgICAgICAgICAgIGNxaGNpX2luaXQoaG9zdC0+Y3FlLCBob3N0LT5zbG90LT5tbWMs IDApOw0KPiArICAgICAgICAgICAgIH0NCj4gKyAgICAgfQ0KPiArfQ0KPiArDQo+ICtpbnQgZHdf bWNpX2NxZV9wcm9iZShzdHJ1Y3QgZHdfbWNpICpob3N0KQ0KPiArew0KPiArICAgICBjb25zdCBz dHJ1Y3QgZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSA9IGhvc3QtPmRydl9kYXRhOw0KPiArICAg ICBpbnQgcmV0ID0gMDsNCj4gKw0KPiArICAgICBpZiAoIWhvc3QtPnBkYXRhKSB7DQo+ICsgICAg ICAgICAgICAgaG9zdC0+cGRhdGEgPSBkd19tY2lfY3FlX3BhcnNlX2R0KGhvc3QpOw0KPiArICAg ICAgICAgICAgIGlmIChQVFJfRVJSKGhvc3QtPnBkYXRhKSA9PSAtRVBST0JFX0RFRkVSKSB7DQo+ ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQUk9CRV9ERUZFUjsNCj4gKyAgICAgICAg ICAgICB9IGVsc2UgaWYgKElTX0VSUihob3N0LT5wZGF0YSkpIHsNCj4gKyAgICAgICAgICAgICAg ICAgICAgIGRldl9lcnIoaG9zdC0+ZGV2LCAicGxhdGZvcm0gZGF0YSBub3QgYXZhaWxhYmxlXG4i KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiArICAgICAgICAg ICAgIH0NCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGhvc3QtPmJpdV9jbGsgPSBkZXZtX2Nsa19n ZXQoaG9zdC0+ZGV2LCAiYml1Iik7DQo+ICsgICAgIGlmIChJU19FUlIoaG9zdC0+Yml1X2Nsaykp IHsNCj4gKyAgICAgICAgICAgICBkZXZfZGJnKGhvc3QtPmRldiwgImJpdSBjbG9jayBub3QgYXZh aWxhYmxlXG4iKTsNCj4gKyAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICByZXQgPSBjbGtf cHJlcGFyZV9lbmFibGUoaG9zdC0+Yml1X2Nsayk7DQo+ICsgICAgICAgICAgICAgaWYgKHJldCkg ew0KPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJmYWlsZWQgdG8g ZW5hYmxlIGJpdSBjbG9ja1xuIik7DQo+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0 Ow0KPiArICAgICAgICAgICAgIH0NCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIGhvc3QtPmNpdV9j bGsgPSBkZXZtX2Nsa19nZXQoaG9zdC0+ZGV2LCAiY2l1Iik7DQo+ICsgICAgIGlmIChJU19FUlIo aG9zdC0+Y2l1X2NsaykpIHsNCj4gKyAgICAgICAgICAgICBkZXZfZGJnKGhvc3QtPmRldiwgImNp dSBjbG9jayBub3QgYXZhaWxhYmxlXG4iKTsNCj4gKyAgICAgICAgICAgICBob3N0LT5idXNfaHog PSBob3N0LT5wZGF0YS0+YnVzX2h6Ow0KPiArICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAg IHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShob3N0LT5jaXVfY2xrKTsNCj4gKyAgICAgICAgICAg ICBpZiAocmV0KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRldiwg ImZhaWxlZCB0byBlbmFibGUgY2l1IGNsb2NrXG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAg IGdvdG8gZXJyX2Nsa19iaXU7DQo+ICsgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAg ICAgaWYgKGhvc3QtPnBkYXRhLT5idXNfaHopIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgIHJl dCA9IGNsa19zZXRfcmF0ZShob3N0LT5jaXVfY2xrLCBob3N0LT5wZGF0YS0+YnVzX2h6KTsNCj4g KyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRldl93YXJuKGhvc3QtPmRldiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiVW5hYmxlIHRvIHNldCBidXMgcmF0ZSB0byAldUh6XG4iLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LT5wZGF0YS0+YnVzX2h6KTsNCj4g KyAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICAgaG9zdC0+YnVzX2h6ID0gY2xrX2dldF9y YXRlKGhvc3QtPmNpdV9jbGspOw0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgaWYgKCFob3N0LT5i dXNfaHopIHsNCj4gKyAgICAgICAgICAgICBkZXZfZXJyKGhvc3QtPmRldiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICJQbGF0Zm9ybSBkYXRhIG11c3Qgc3VwcGx5IGJ1cyBzcGVlZFxuIik7DQo+ ICsgICAgICAgICAgICAgcmV0ID0gLUVOT0RFVjsNCj4gKyAgICAgICAgICAgICBnb3RvIGVycl9j bGtfY2l1Ow0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgaWYgKCFJU19FUlIoaG9zdC0+cGRhdGEt PnJzdGMpKSB7DQo+ICsgICAgICAgICAgICAgcmVzZXRfY29udHJvbF9hc3NlcnQoaG9zdC0+cGRh dGEtPnJzdGMpOw0KPiArICAgICAgICAgICAgIHVzbGVlcF9yYW5nZSgxMCwgNTApOw0KPiArICAg ICAgICAgICAgIHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoaG9zdC0+cGRhdGEtPnJzdGMpOw0KPiAr ICAgICB9DQo+ICsNCj4gKyAgICAgdGltZXJfc2V0dXAoJmhvc3QtPnRpbWVyLCBkd19tY2lfY3Fl X2N0b190aW1lciwgMCk7DQo+ICsNCj4gKyAgICAgc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2sp Ow0KPiArICAgICBzcGluX2xvY2tfaW5pdCgmaG9zdC0+aXJxX2xvY2spOw0KPiArICAgICBpbml0 X3J3c2VtKCZob3N0LT5jcl9yd19zZW0pOw0KPiArICAgICB0YXNrbGV0X2luaXQoJmhvc3QtPnRh c2tsZXQsIGR3X21jaV9jcWVfdGFza2xldF9mdW5jLCAodW5zaWduZWQgbG9uZylob3N0KTsNCj4g Kw0KPiArICAgICBob3N0LT5jcWVfcmVlbmFibGUgPSAwOw0KPiArICAgICBob3N0LT5jbWRfYXRv bWljID0gZmFsc2U7DQo+ICsNCj4gKyAgICAgLypwaW8gbW9kZSdzIHBhcmFtZXRlcnMgc2hvdWxk IGJlIGluaXRpYWxpemVkIGhlcmUqLw0KPiArDQo+ICsgICAgIC8qSW5pdGlhbGl6ZSB0aGUgZU1N QyBJUCByZWxhdGVkIGF0dHJpYnV0ZSovDQo+ICsgICAgIGR3X21jaV9jcWVfc2V0dXAoaG9zdCk7 DQo+ICsNCj4gKyAgICAgZHdfbWNpX2NxZV9pbml0X2RtYShob3N0KTsNCj4gKw0KPiArICAgICAv KiBUaGlzIGZsYWcgd2lsbCBiZSBzZXQgMSB3aGVuIGRvaW5nIHR1bmluZywNCj4gKyAgICAgICog d2UgYWRkIHRoaXMgZmxhZyBiZWNhdXNlDQo+ICsgICAgICAqIHNvbWUgdmVuZG9ycyBtaWdodCB1 c2Ugb3RoZXIgY21kIGluc3RlYWQgb2YgMjENCj4gKyAgICAgICogdG8gdHVuZSBwaGFzZSB1bmRl ciBoaWdoIHNwZWVkIGludGVyZmFjZS4NCj4gKyAgICAgICogd2UgdXNlIHRoaXMgZmxhZyB0byBy ZWNvZ25pemUgaWYgdGhlIHN5c3RlbSBpcyB1bmRlciB0dW5pbmcgc3RhZ2UuDQo+ICsgICAgICAq Lw0KPiArICAgICBob3N0LT50dW5pbmcgPSAwOw0KPiArDQo+ICsgICAgIC8qVGltaW5nX3NldHRp bmcgaXMgdG8gYXZvaWQgc2VuZGluZyBjb21tYW5kDQo+ICsgICAgICAqYmVmb3JlIHNldHRpbmcg cGhhc2UgaW4gaHMyMDAsIGhzNDAwDQo+ICsgICAgICAqLw0KPiArICAgICBob3N0LT5jdXJyZW50 X3NwZWVkID0gMDsNCj4gKw0KPiArICAgICAvKkRvIHRoZSByZXN0IG9mIGluaXQgZm9yIHNwZWNp ZmljKi8NCj4gKyAgICAgaWYgKGRydl9kYXRhICYmIGRydl9kYXRhLT5pbml0KSB7DQo+ICsgICAg ICAgICAgICAgcmV0ID0gZHJ2X2RhdGEtPmluaXQoaG9zdCk7DQo+ICsgICAgICAgICAgICAgaWYg KHJldCkgew0KPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBpbml0 IGZhaWxlZFxuIik7DQo+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9kbWF1bm1hcDsN Cj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICByZXQgPSBkd19tY2lf Y3FlX2luaXRfc2xvdChob3N0KTsNCj4gKyAgICAgaWYgKHJldCkgew0KPiArICAgICAgICAgICAg IGRldl9lcnIoaG9zdC0+ZGV2LCAic2xvdCAwIGluaXQgZmFpbGVkXG4iKTsNCj4gKyAgICAgICAg ICAgICBnb3RvIGVycl9kbWF1bm1hcDsNCj4gKyAgICAgfQ0KPiArDQo+ICsgICAgIHJldCA9IGRl dm1fcmVxdWVzdF9pcnEoaG9zdC0+ZGV2LCBob3N0LT5pcnEsIGR3X21jaV9jcWVfaW50ZXJydXB0 LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LT5pcnFfZmxhZ3MsICJkdy1t Y2ktY3FlIiwgaG9zdCk7DQo+ICsgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgZ290byBl cnJfZG1hdW5tYXA7DQo+ICsNCj4gKyAgICAgLypBZnRlciB0aGUgc2xvdCBpbml0aWFsaXphdGlv biwNCj4gKyAgICAgICpub3cgd2UgaGF2ZSBtbWMgZGF0YSBhbmQgY2FuIGluaXRpYWxpemUgY21k cSBpZiB1c2VyIGVuYWJsZWQNCj4gKyAgICAgICovDQo+ICsgICAgIGR3X21jaV9jcWhjaV9pbml0 KGhvc3QpOw0KPiArDQo+ICsgICAgIC8qIE5vdyB0aGF0IHNsb3RzIGFyZSBhbGwgc2V0dXAsIHdl IGNhbiBlbmFibGUgY2FyZCBkZXRlY3QgKi8NCj4gKyAgICAgZHdfbWNpX2NxZV9lbmFibGVfY2Qo aG9zdCk7DQo+ICsNCj4gKyAgICAgcmV0dXJuIDA7DQo+ICsNCj4gK2Vycl9kbWF1bm1hcDoNCj4g KyAgICAgaWYgKCFJU19FUlIoaG9zdC0+cGRhdGEtPnJzdGMpKQ0KPiArICAgICAgICAgICAgIHJl c2V0X2NvbnRyb2xfYXNzZXJ0KGhvc3QtPnBkYXRhLT5yc3RjKTsNCj4gK2Vycl9jbGtfY2l1Og0K PiArICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+Y2l1X2Nsayk7DQo+ICsNCj4gK2Vy cl9jbGtfYml1Og0KPiArICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+Yml1X2Nsayk7 DQo+ICsNCj4gKyAgICAgcmV0dXJuIHJldDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHdfbWNp X2NxZV9wcm9iZSk7DQo+ICsNCj4gK3ZvaWQgZHdfbWNpX2NxZV9yZW1vdmUoc3RydWN0IGR3X21j aSAqaG9zdCkNCj4gK3sNCj4gKyAgICAgZGV2X2RiZyhob3N0LT5kZXYsICJyZW1vdmUgc2xvdFxu Iik7DQo+ICsgICAgIGlmIChob3N0LT5zbG90KQ0KPiArICAgICAgICAgICAgIGR3X21jaV9jcWVf Y2xlYW51cF9zbG90KGhvc3QtPnNsb3QpOw0KPiArDQo+ICsgICAgIGlmICghSVNfRVJSKGhvc3Qt PnBkYXRhLT5yc3RjKSkNCj4gKyAgICAgICAgICAgICByZXNldF9jb250cm9sX2Fzc2VydChob3N0 LT5wZGF0YS0+cnN0Yyk7DQo+ICsNCj4gKyAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3Qt PmNpdV9jbGspOw0KPiArICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+Yml1X2Nsayk7 DQo+ICsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHdfbWNpX2NxZV9yZW1vdmUpOw0KPiArDQo+ ICsjaWZkZWYgQ09ORklHX1BNDQo+ICtpbnQgZHdfbWNpX2NxZV9ydW50aW1lX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArICAgICBzdHJ1Y3QgZHdfbWNpICpob3N0ID0gZGV2 X2dldF9kcnZkYXRhKGRldik7DQo+ICsgICAgIGludCByZXQgPSAwOw0KPiArDQo+ICsgICAgIGlm IChob3N0LT5wZGF0YSAmJiAoaG9zdC0+cGRhdGEtPmNhcHMyICYgTU1DX0NBUDJfQ1FFKSkgew0K PiArICAgICAgICAgICAgIGlmIChob3N0LT5zbG90KSB7DQo+ICsgICAgICAgICAgICAgICAgICAg ICBkZXZfaW5mbyhob3N0LT5kZXYsICJjcWUgc3VzcGVuZFxuIik7DQo+ICsgICAgICAgICAgICAg ICAgICAgICByZXQgPSBjcWhjaV9zdXNwZW5kKGhvc3QtPnNsb3QtPm1tYyk7DQo+ICsgICAgICAg ICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRldl9lcnIoaG9zdC0+ZGV2LCAiY3FlIHN1c3BlbmQgZmFpbGVkXG4iKTsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gKyAgICAgICAgICAgICAgICAgICAg IH0NCj4gKyAgICAgICAgICAgICB9DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICByZXQgPSBwbV9y dW50aW1lX2ZvcmNlX3N1c3BlbmQoZGV2KTsNCj4gKw0KPiArICAgICByZXR1cm4gcmV0Ow0KPiAr fQ0KPiArRVhQT1JUX1NZTUJPTChkd19tY2lfY3FlX3J1bnRpbWVfc3VzcGVuZCk7DQo+ICsNCj4g K2ludCBkd19tY2lfY3FlX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gK3sN Cj4gKyAgICAgc3RydWN0IGR3X21jaSAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiAr ICAgICBjb25zdCBzdHJ1Y3QgZHdfbWNpX2Rydl9kYXRhICpkcnZfZGF0YSA9IGhvc3QtPmRydl9k YXRhOw0KPiArICAgICBpbnQgcmV0ID0gMDsNCj4gKw0KPiArICAgICByZXQgPSBwbV9ydW50aW1l X2ZvcmNlX3Jlc3VtZShkZXYpOw0KPiArICAgICBpZiAocmV0KSB7DQo+ICsgICAgICAgICAgICAg ZGV2X2Vycihob3N0LT5kZXYsICJwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSBmYWlsZWRcbiIpOw0K PiArICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ICsgICAgIH0NCj4gKw0KPiArICAgICBkd19t Y2lfY3FlX3NldHVwKGhvc3QpOw0KPiArICAgICBpZiAoZHJ2X2RhdGEgJiYgZHJ2X2RhdGEtPmlu aXQpIHsNCj4gKyAgICAgICAgICAgICByZXQgPSBkcnZfZGF0YS0+aW5pdChob3N0KTsNCj4gKyAg ICAgICAgICAgICBpZiAocmV0KQ0KPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihob3N0 LT5kZXYsICJpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBpbml0IGZhaWxlZFxuIik7DQo+ICsgICAg IH0NCj4gKw0KPiArICAgICBpbml0X2NvbXBsZXRpb24oaG9zdC0+aW50X3dhaXRpbmcpOw0KPiAr DQo+ICsgICAgIGlmIChob3N0LT5wZGF0YSAmJiAoaG9zdC0+cGRhdGEtPmNhcHMyICYgTU1DX0NB UDJfQ1FFKSkgew0KPiArICAgICAgICAgICAgIGlmIChob3N0LT5zbG90KSB7DQo+ICsgICAgICAg ICAgICAgICAgICAgICBkZXZfaW5mbyhob3N0LT5kZXYsICJjcWUgcmVzdW1lXG4iKTsNCj4gKyAg ICAgICAgICAgICAgICAgICAgIHJldCA9IGNxaGNpX3Jlc3VtZShob3N0LT5zbG90LT5tbWMpOw0K PiArICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2X2Vycihob3N0LT5kZXYsICJjcWUgcmVzdW1lIGZhaWxlZFxuIik7DQo+ICsg ICAgICAgICAgICAgfQ0KPiArICAgICB9DQo+ICsNCj4gKyAgICAgZHdfbWNpX2NxZV9zZXR1cF9i dXMoaG9zdC0+c2xvdCwgdHJ1ZSk7DQo+ICsgICAgIGR3X21jaV9jcWVfZW5hYmxlX2NkKGhvc3Qp Ow0KPiArDQo+ICsgICAgIHJldHVybiByZXQ7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGR3X21j aV9jcWVfcnVudGltZV9yZXN1bWUpOw0KPiArI2VuZGlmIC8qIENPTkZJR19QTSAqLw0KPiArDQo+ ICtzdGF0aWMgaW50IF9faW5pdCBkd19tY2lfY3FlX2luaXQodm9pZCkNCj4gK3sNCj4gKyAgICAg cHJfaW5mbygiU3lub3BzeXMgRGVzaWdud2FyZSBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIERy aXZlclxuIik7DQo+ICsgICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBf X2V4aXQgZHdfbWNpX2NxZV9leGl0KHZvaWQpDQo+ICt7DQo+ICt9DQo+ICsNCj4gK21vZHVsZV9p bml0KGR3X21jaV9jcWVfaW5pdCk7DQo+ICttb2R1bGVfZXhpdChkd19tY2lfY3FlX2V4aXQpOw0K PiArDQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkRXIE11bHRpbWVkaWEgQ2FyZCBDTURRIEludGVy ZmFjZSBkcml2ZXIiKTsNCj4gK01PRFVMRV9BVVRIT1IoIjxqeWFuY2hvdUByZWFsdGVrLmNvbT4i KTsNCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1j L2hvc3QvZHdfbW1jX2NxZS5oIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWNfY3FlLmgNCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lZjUyYjY3YWNlYjYNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tY19jcWUuaA0KPiBA QCAtMCwwICsxLDQ0NCBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b3ItbGF0ZXIgKi8NCj4gKy8qDQo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDIzIFJlYWx0ZWsgU2Vt aWNvbmR1Y3RvcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQo+ICsgKg0KPiArICovDQo+ICsNCj4g KyNpZm5kZWYgX19EV19NTUNfQ1FFX0gNCj4gKyNkZWZpbmUgX19EV19NTUNfQ1FFX0gNCj4gKw0K PiArI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVy cnVwdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvcmVzZXQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPg0KPiArDQo+ICtz dHJ1Y3QgZHdfbWNpIHsNCj4gKyAgICAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgbG9jazsNCj4g KyAgICAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgaXJxX2xvY2s7DQo+ICsgICAgIHN0cnVjdCB0 YXNrbGV0X3N0cnVjdCAgIHRhc2tsZXQ7DQo+ICsgICAgIHN0cnVjdCByd19zZW1hcGhvcmUgICAg IGNyX3J3X3NlbTsNCj4gKw0KPiArICAgICB2b2lkIF9faW9tZW0gICAgICAgICAgICAqcmVnczsN Cj4gKyAgICAgcmVzb3VyY2Vfc2l6ZV90ICAgICAgICAgcGh5X3JlZ3M7DQo+ICsNCj4gKyAgICAg c3RydWN0IG1tY19yZXF1ZXN0ICAgICAgKm1ycTsNCj4gKyAgICAgc3RydWN0IG1tY19jb21tYW5k ICAgICAgKmNtZDsNCj4gKyAgICAgc3RydWN0IG1tY19jb21tYW5kICAgICAgc3RvcF9hYm9ydDsN Cj4gKyAgICAgc3RydWN0IG1tY19kYXRhICAgICAgICAgKmRhdGE7DQo+ICsNCj4gKyAgICAgc3Ry dWN0IGNsayAgICAgICAgICAgICAgKmJpdV9jbGs7DQo+ICsgICAgIHN0cnVjdCBjbGsgICAgICAg ICAgICAgICpjaXVfY2xrOw0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX3Nsb3QgICAgICAqc2xvdDsN Cj4gKyAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7DQo+ICsgICAgIHN0cnVjdCBj b21wbGV0aW9uICAgICAgICppbnRfd2FpdGluZzsNCj4gKw0KPiArICAgICB1bnNpZ25lZCBpbnQg ICAgICAgICAgICAqZGVzY192YWRkcjsNCj4gKyAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAg KnNnX2NwdTsNCj4gKyAgICAgZG1hX2FkZHJfdCAgICAgICAgICAgICAgc2dfZG1hOw0KPiArICAg ICBpbnQgICAgICAgICAgICAgICAgICAgICB1c2VfZG1hOw0KPiArDQo+ICsgICAgIHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgICpwZGV2Ow0KPiArICAgICBzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAq ZGV2Ow0KPiArICAgICBzdHJ1Y3QgZHdfbWNpX2JvYXJkICAgICAqcGRhdGE7DQo+ICsgICAgIGNv bnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgICAgKmRydl9kYXRhOw0KPiArICAgICB2b2lkICAg ICAgICAgICAgICAgICAgICAqcHJpdjsNCj4gKw0KPiArICAgICB1MzIgICAgICAgICAgICAgICAg ICAgICBvcGNvZGU7DQo+ICsgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgIGFyZzsNCj4gKyAg ICAgdTE2ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsX2ludGVycnVwdDsNCj4gKyAgICAgdTE2 ICAgICAgICAgICAgICAgICAgICAgZXJyb3JfaW50ZXJydXB0Ow0KPiArICAgICB1MTYgICAgICAg ICAgICAgICAgICAgICBhdXRvX2Vycm9yX2ludGVycnVwdDsNCj4gKw0KPiArICAgICB1MzIgICAg ICAgICAgICAgICAgICAgICBidXNfaHo7DQo+ICsgICAgIHUzMiAgICAgICAgICAgICAgICAgICAg IGN1cnJlbnRfc3BlZWQ7DQo+ICsgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgIHN0b3BfY21k cjsNCj4gKyAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfc2JjOw0KPiArICAgICBpbnQg ICAgICAgICAgICAgICAgICAgICBkbWFfNjRiaXRfYWRkcmVzczsNCj4gKyAgICAgaW50ICAgICAg ICAgICAgICAgICAgICAgdXNpbmdfZG1hOw0KPiArDQo+ICsgICAgIHVuc2lnbmVkIGxvbmcgICAg ICAgICAgIGlycV9mbGFnczsgLyogSVJRIGZsYWdzICovDQo+ICsgICAgIGludCAgICAgICAgICAg ICAgICAgICAgIGlycTsNCj4gKyAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgc2Rpb19pZDA7 DQo+ICsNCj4gKyAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgKnNnOw0KPiArICAgICB1MzIg ICAgICAgICAgICAgICAgICAgICBkbWFfbmVudHM7DQo+ICsNCj4gKyAgICAgdTggICAgICAgICAg ICAgICAgICAgICAgdHVuaW5nOw0KPiArICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBjcWVf cmVlbmFibGU7DQo+ICsgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIGNtZF9hdG9taWM7DQo+ ICsgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ow0KPiArICAgICBzdHJ1Y3QgY3Fo Y2lfaG9zdCAgICAgICAqY3FlOw0KPiArfTsNCj4gKw0KPiArZW51bSB7DQo+ICsgICAgIFRSQU5T X01PREVfUElPID0gMCwNCj4gKyAgICAgVFJBTlNfTU9ERV9ETUEsDQo+ICt9Ow0KPiArDQo+ICtl bnVtIGR3X21jaV9jb29raWUgew0KPiArICAgICBDT09LSUVfVU5NQVBQRUQsDQo+ICsgICAgIENP T0tJRV9QUkVfTUFQUEVELCAgICAgIC8qIG1hcHBlZCBieSBwcmVfcmVxKCkgb2YgZHdtbWMgKi8N Cj4gKyAgICAgQ09PS0lFX01BUFBFRCwgICAgICAgICAgLyogbWFwcGVkIGJ5IHByZXBhcmVfZGF0 YSgpIG9mIGR3bW1jICovDQo+ICt9Ow0KPiArLyogZU1NQyBjb250cm9sIHJlZ2lzdGVyIGRlZmlu aXRpb24gKi8NCj4gKyNkZWZpbmUgU0RNTUNfU0RNQVNBX1IgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHgwMDANCj4gKyNkZWZpbmUgU0RNTUNfQkxPQ0tTSVpFX1IgICAgICAgICAgICAg ICAgICAgIDB4MDA0DQo+ICsjZGVmaW5lIFNETU1DX0JMT0NLQ09VTlRfUiAgICAgICAgICAgICAg ICAgICAweDAwNg0KPiArI2RlZmluZSBTRE1NQ19BUkdVTUVOVF9SICAgICAgICAgICAgICAgICAg ICAgMHgwMDgNCj4gKyNkZWZpbmUgU0RNTUNfWEZFUl9NT0RFX1IgICAgICAgICAgICAgICAgICAg IDB4MDBjDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9SICAgICAgICAgICAgICAgICAgICAgICAgICAw eDAwZQ0KPiArI2RlZmluZSBTRE1NQ19SRVNQMDFfUiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAweDAxMA0KPiArI2RlZmluZSBTRE1NQ19SRVNQMjNfUiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDAxNA0KPiArI2RlZmluZSBTRE1NQ19SRVNQNDVfUiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAxOA0KPiArI2RlZmluZSBTRE1NQ19SRVNQNjdfUiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweDAxYw0KPiArI2RlZmluZSBTRE1NQ19CVUZfREFUQV9S ICAgICAgICAgICAgICAgICAgICAgMHgwMjANCj4gKyNkZWZpbmUgU0RNTUNfUFNUQVRFX1JFRyAg ICAgICAgICAgICAgICAgICAgIDB4MDI0DQo+ICsjZGVmaW5lIFNETU1DX0hPU1RfQ1RSTDFfUiAg ICAgICAgICAgICAgICAgICAweDAyOA0KPiArI2RlZmluZSBTRE1NQ19QV1JfQ1RSTF9SICAgICAg ICAgICAgICAgICAgICAgMHgwMjkNCj4gKyNkZWZpbmUgU0RNTUNfQkdBUF9DVFJMX1IgICAgICAg ICAgICAgICAgICAgIDB4MDJhDQo+ICsjZGVmaW5lIFNETU1DX0NMS19DVFJMX1IgICAgICAgICAg ICAgICAgICAgICAweDAyYw0KPiArI2RlZmluZSBTRE1NQ19UT1VUX0NUUkxfUiAgICAgICAgICAg ICAgICAgICAgMHgwMmUNCj4gKyNkZWZpbmUgU0RNTUNfU1dfUlNUX1IgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwMmYNCj4gKyNkZWZpbmUgU0RNTUNfTk9STUFMX0lOVF9TVEFUX1Ig ICAgICAgICAgICAgICAgICAgICAgMHgwMzANCj4gKyNkZWZpbmUgU0RNTUNfRVJST1JfSU5UX1NU QVRfUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMzINCj4gKyNkZWZpbmUgU0RNTUNfTk9STUFM X0lOVF9TVEFUX0VOX1IgICAgICAgICAgIDB4MDM0DQo+ICsjZGVmaW5lIFNETU1DX0VSUk9SX0lO VF9TVEFUX0VOX1IgICAgICAgICAgICAweDAzNg0KPiArI2RlZmluZSBTRE1NQ19OT1JNQUxfSU5U X1NJR05BTF9FTl9SICAgICAgICAgMHgwMzgNCj4gKyNkZWZpbmUgU0RNTUNfRVJST1JfSU5UX1NJ R05BTF9FTl9SICAgICAgICAgIDB4MDNhDQo+ICsjZGVmaW5lIFNETU1DX0FVVE9fQ01EX1NUQVRf UiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNjDQo+ICsjZGVmaW5lIFNETU1DX0hPU1RfQ1RS TDJfUiAgICAgICAgICAgICAgICAgICAweDAzZQ0KPiArI2RlZmluZSBTRE1NQ19BRE1BX0VSUl9T VEFUX1IgICAgICAgICAgICAgICAgICAgICAgICAweDA1NA0KPiArI2RlZmluZSBTRE1NQ19BRE1B X1NBX0xPV19SICAgICAgICAgICAgICAgICAgMHgwNTgNCj4gKw0KPiArI2RlZmluZSBTRE1NQ19N U0hDX0NUUkxfUiAgICAgICAgICAgICAgICAgICAgMHgyMDgNCj4gKyNkZWZpbmUgU0RNTUNfQ1RS TF9SICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjJjDQo+ICsNCj4gKyNkZWZpbmUgU0RNTUNf Q01EX0NPTkZMSUNUX0NIRUNLICAgICAgICAgICAgIEJJVCgwKQ0KPiArI2RlZmluZSBDTURfSURY X01BU0soeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHggPj4gOCkmMHgzZikNCj4g Kw0KPiArLyoweGMqLw0KPiArI2RlZmluZSBTRE1NQ19NVUxUSV9CTEtfU0VMICAgICAgICAgICAg ICAgICAgNQ0KPiArI2RlZmluZSBTRE1NQ19EQVRBX1hGRVJfRElSICAgICAgICAgICAgICAgICAg NA0KPiArI2RlZmluZSBTRE1NQ19CTE9DS19DT1VOVF9FTkFCTEUgICAgICAgICAgICAgQklUKDEp DQo+ICsjZGVmaW5lIFNETU1DX0RNQV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICBCSVQoMCkN Cj4gKyNkZWZpbmUgU0RNTUNfQVVUT19DTURfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAg Mg0KPiArI2RlZmluZSBTRE1NQ19BVVRPX0NNRF9ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAg ICAweDANCj4gKyNkZWZpbmUgU0RNTUNfQVVUT19DTUQxMl9FTkFCTEVEICAgICAgICAgICAgIDB4 MQ0KPiArI2RlZmluZSBTRE1NQ19BVVRPX0NNRDIzX0VOQUJMRUQgICAgICAgICAgICAgMHgyDQo+ ICsjZGVmaW5lIFNETU1DX0FVVE9fQ01EX1NFTCAgICAgICAgICAgICAgICAgICAweDMNCj4gKw0K PiArLyoweGUqLw0KPiArI2RlZmluZSBTRE1NQ19SRVNQX1RZUEVfU0VMRUNUICAgICAgICAgICAg ICAgICAgICAgICAwDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9UWVBFICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDYNCj4gKyNkZWZpbmUgU0RNTUNfTk9fUkVTUCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgwDQo+ICsjZGVmaW5lIFNETU1DX1JFU1BfTEVOXzEzNiAgICAgICAg ICAgICAgICAgICAweDENCj4gKyNkZWZpbmUgU0RNTUNfUkVTUF9MRU5fNDggICAgICAgICAgICAg ICAgICAgIDB4Mg0KPiArI2RlZmluZSBTRE1NQ19SRVNQX0xFTl80OEIgICAgICAgICAgICAgICAg ICAgMHgzDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9DSEtfUkVTUF9DUkMgICAgICAgICAgICAgICAg ICAgICAgIEJJVCgzKQ0KPiArI2RlZmluZSBTRE1NQ19DTURfSURYX0NIS19FTkFCTEUgICAgICAg ICAgICAgQklUKDQpDQo+ICsjZGVmaW5lIFNETU1DX0RBVEEgICAgICAgICAgICAgICAgICAgICAg ICAgICBCSVQoNSkNCj4gKyNkZWZpbmUgU0RNTUNfQUJPUlRfQ01EICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMHgzDQo+ICsjZGVmaW5lIFNETU1DX1JFU1VNRV9DTUQgICAgICAgICAgICAg ICAgICAgICAweDINCj4gKyNkZWZpbmUgU0RNTUNfU1VTUEVORF9DTUQgICAgICAgICAgICAgICAg ICAgIDB4MQ0KPiArI2RlZmluZSBTRE1NQ19OT1JNQUxfQ01EICAgICAgICAgICAgICAgICAgICAg MHgwDQo+ICsNCj4gKy8qMHgyNCBQU1RBVEUqLw0KPiArI2RlZmluZSBTRE1NQ19DTURfSU5ISUJJ VCAgICAgICAgICAgICAgICAgICAgQklUKDApDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9JTkhJQklU X0RBVCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiArI2RlZmluZSBTRE1NQ19EQVRf M18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhmIDw8IDIwKQ0KPiArI2RlZmlu ZSBTRE1NQ19EQVRfN180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhmIDw8IDQp DQo+ICsNCj4gKy8qMHgyOCovDQo+ICsjZGVmaW5lIFNETU1DX0RNQV9TRUwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDMNCj4gKyNkZWZpbmUgU0RNTUNfU0RNQSAgICAgICAgICAgICAg ICAgICAgICAgICAgICgweDApDQo+ICsjZGVmaW5lIFNETU1DX0FETUEyXzMyICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICgweDIpDQo+ICsjZGVmaW5lIFNETU1DX0FETUEyXzY0ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgweDMpDQo+ICsjZGVmaW5lIFNETU1DX0VYVF9EQVRf WEZFUiAgICAgICAgICAgICAgICAgICBCSVQoNSkNCj4gKyNkZWZpbmUgU0RNTUNfRVhUX0RBVF9Y RkVSX01BU0sgICAgICAgICAgICAgICAgICAgICAgKH5TRE1NQ19FWFRfREFUX1hGRVIgJiAweGZm KQ0KPiArI2RlZmluZSBTRE1NQ19ISUdIX1NQRUVEX0VOICAgICAgICAgICAgICAgICAgQklUKDIp DQo+ICsjZGVmaW5lIFNETU1DX0hJR0hfU1BFRURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAg ICgofkJJVCgyKSkgJiAweGZmKQ0KPiArI2RlZmluZSBTRE1NQ19VSFNfTU9ERV9TRUxfTUFTSyAg ICAgICAgICAgICAgICAgICAgICAoKH4oQklUKDApfEJJVCgxKXxCSVQoMikpKSAmIDB4ZmZmZikN Cj4gKyNkZWZpbmUgU0RNTUNfREFUX1hGRVJfV0lEVEggICAgICAgICAgICAgICAgIEJJVCgxKQ0K PiArI2RlZmluZSBTRE1NQ19EQVRfWEZFUl9XSURUSF9NQVNLICAgICAgICAgICAgKH5TRE1NQ19E QVRfWEZFUl9XSURUSCAmIDB4ZmYpDQo+ICsjZGVmaW5lIFNETU1DX0JVU19XSURUSF84ICAgICAg ICAgICAgICAgICAgICBTRE1NQ19FWFRfREFUX1hGRVINCj4gKyNkZWZpbmUgU0RNTUNfQlVTX1dJ RFRIXzQgICAgICAgICAgICAgICAgICAgIFNETU1DX0RBVF9YRkVSX1dJRFRIDQo+ICsjZGVmaW5l IFNETU1DX0JVU19XSURUSF8xICAgICAgICAgICAgICAgICAgICAwDQo+ICsjZGVmaW5lIFNETU1D X0RNQV9TRUxfQ0xSICAgICAgICAgICAgICAgICAgICAoMHhmZiAmICh+KDB4Mzw8U0RNTUNfRE1B X1NFTCkpKQ0KPiArI2RlZmluZSBTRE1NQ19EQVRBX1hGRVJfQ0xSICAgICAgICAgICAgICAgICAg KCgweGZmICYgKH5TRE1NQ19FWFRfREFUX1hGRVIpKSBcDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmICh+U0RNTUNfREFUX1hGRVJfV0lEVEgpKQ0KPiAr DQo+ICsvKjB4MmEqLw0KPiArI2RlZmluZSBTRE1NQ19TVE9QX0JHX1JFUSAgICAgICAgICAgICAg ICAgICAgQklUKDApDQo+ICsNCj4gKy8qMHgyZiBTV19SU1RfUiovDQo+ICsjZGVmaW5lIFNETU1D X1JTVF9EQVQgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMikNCj4gKyNkZWZpbmUgU0RNTUNf UlNUX0NNRCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiArI2RlZmluZSBTRE1NQ19S U1RfQUxMICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApDQo+ICsNCj4gKy8qMHgzMCBzdGF0 dXMgYml0bWFwKi8NCj4gKyNkZWZpbmUgU0RNTUNfU1RBVFVTX0FMTCAgICAgICAgICAgICAgICAg ICAgIDB4ZmZmZg0KPiArI2RlZmluZSBTRE1NQ19FUlJfSU5URVJSVVBUICAgICAgICAgICAgICAg ICAgQklUKDE1KQ0KPiArI2RlZmluZSBTRE1NQ19DUUVfRVZFTlQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCSVQoMTQpDQo+ICsjZGVmaW5lIFNETU1DX0ZYX0VWRU5UICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJJVCgxMykNCj4gKyNkZWZpbmUgU0RNTUNfUkVfVFVORV9FVkVO VCAgICAgICAgICAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZpbmUgU0RNTUNfSU5UX0MgICAgICAg ICAgICAgICAgICAgICAgICAgIEJJVCgxMSkNCj4gKyNkZWZpbmUgU0RNTUNfSU5UX0IgICAgICAg ICAgICAgICAgICAgICAgICAgIEJJVCgxMCkNCj4gKyNkZWZpbmUgU0RNTUNfSU5UX0EgICAgICAg ICAgICAgICAgICAgICAgICAgIEJJVCg5KQ0KPiArI2RlZmluZSBTRE1NQ19DQVJEX0lOVEVSUlVQ VCAgICAgICAgICAgICAgICAgQklUKDgpDQo+ICsjZGVmaW5lIFNETU1DX0NBUkRfUkVNT1ZBTCAg ICAgICAgICAgICAgICAgICBCSVQoNykNCj4gKyNkZWZpbmUgU0RNTUNfQ0FSRF9JTlNFUlRJT04g ICAgICAgICAgICAgICAgIEJJVCg2KQ0KPiArI2RlZmluZSBTRE1NQ19CVUZfUkRfUkVBRFkgICAg ICAgICAgICAgICAgICAgQklUKDUpDQo+ICsjZGVmaW5lIFNETU1DX0JVRl9XUl9SRUFEWSAgICAg ICAgICAgICAgICAgICBCSVQoNCkNCj4gKyNkZWZpbmUgU0RNTUNfRE1BX0lOVEVSUlBUICAgICAg ICAgICAgICAgICAgIEJJVCgzKQ0KPiArI2RlZmluZSBTRE1NQ19CR0FQX0VWRU5UICAgICAgICAg ICAgICAgICAgICAgQklUKDIpDQo+ICsjZGVmaW5lIFNETU1DX1hGRVJfQ09NUExFVEUgICAgICAg ICAgICAgICAgICBCSVQoMSkNCj4gKyNkZWZpbmUgU0RNTUNfQ01EX0NPTVBMRVRFICAgICAgICAg ICAgICAgICAgIEJJVCgwKQ0KPiArDQo+ICsvKjB4MzIgZXJyb3IgYml0bWFwKi8NCj4gKyNkZWZp bmUgU0RNTUNfVkVORE9SX0VSUjMgICAgICAgICAgICAgICAgICAgIEJJVCgxNSkNCj4gKyNkZWZp bmUgU0RNTUNfVkVORE9SX0VSUjIgICAgICAgICAgICAgICAgICAgIEJJVCgxNCkNCj4gKyNkZWZp bmUgU0RNTUNfVkVORE9SX0VSUjEgICAgICAgICAgICAgICAgICAgIEJJVCgxMykNCj4gKyNkZWZp bmUgU0RNTUNfQk9PVF9BQ0tfRVJSICAgICAgICAgICAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZp bmUgU0RNTUNfUkVTUF9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDExKQ0K PiArI2RlZmluZSBTRE1NQ19UVU5JTkdfRVJSICAgICAgICAgICAgICAgICAgICAgQklUKDEwKQ0K PiArI2RlZmluZSBTRE1NQ19BRE1BX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC SVQoOSkNCj4gKyNkZWZpbmUgU0RNTUNfQVVUT19DTURfRVJSICAgICAgICAgICAgICAgICAgIEJJ VCg4KQ0KPiArI2RlZmluZSBTRE1NQ19DVVJfTE1UX0VSUiAgICAgICAgICAgICAgICAgICAgQklU KDcpDQo+ICsjZGVmaW5lIFNETU1DX0RBVEFfRU5EX0JJVF9FUlIgICAgICAgICAgICAgICAgICAg ICAgIEJJVCg2KQ0KPiArI2RlZmluZSBTRE1NQ19EQVRBX0NSQ19FUlIgICAgICAgICAgICAgICAg ICAgQklUKDUpDQo+ICsjZGVmaW5lIFNETU1DX0RBVEFfVE9VVF9FUlIgICAgICAgICAgICAgICAg ICBCSVQoNCkNCj4gKyNkZWZpbmUgU0RNTUNfQ01EX0lEWF9FUlIgICAgICAgICAgICAgICAgICAg IEJJVCgzKQ0KPiArI2RlZmluZSBTRE1NQ19DTURfRU5EX0JJVF9FUlIgICAgICAgICAgICAgICAg ICAgICAgICBCSVQoMikNCj4gKyNkZWZpbmUgU0RNTUNfQ01EX0NSQ19FUlIgICAgICAgICAgICAg ICAgICAgIEJJVCgxKQ0KPiArI2RlZmluZSBTRE1NQ19DTURfVE9VVF9FUlIgICAgICAgICAgICAg ICAgICAgQklUKDApDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9FUlIgICAgICAgICAgICAgICAgICAg ICAgICAgICAoU0RNTUNfQVVUT19DTURfRVJSfCBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19DTURfSURYX0VSUnxTRE1NQ19DTURfRU5EX0JJ VF9FUlJ8IFwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNETU1DX0NNRF9DUkNfRVJSfFNETU1DX0NNRF9UT1VUX0VSUikNCj4gKyNkZWZpbmUgU0RNTUNf REFUQV9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNETU1DX0FETUFfRVJSfCBc DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRE1NQ19E QVRBX0VORF9CSVRfRVJSfCBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTRE1NQ19EQVRBX0NSQ19FUlJ8U0RNTUNfREFUQV9UT1VUX0VSUikNCj4gKw0K PiArLyoweDM0IHN0YXR1cyBlbmFibGUgYml0bWFwKi8NCj4gKyNkZWZpbmUgU0RNTUNfQ1FFX0VW RU5UX1NUQVRfRU4gICAgICAgICAgICAgICAgICAgICAgQklUKDE0KQ0KPiArI2RlZmluZSBTRE1N Q19GWF9FVkVOVF9TVEFUX0VOICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTMpDQo+ICsjZGVm aW5lIFNETU1DX1JFX1RVTkVfRVZFTlRfU1RBVF9FTiAgICAgICAgICBCSVQoMTIpDQo+ICsjZGVm aW5lIFNETU1DX0lOVF9DX1NUQVRfRU4gICAgICAgICAgICAgICAgICBCSVQoMTEpDQo+ICsjZGVm aW5lIFNETU1DX0lOVF9CX1NUQVRfRU4gICAgICAgICAgICAgICAgICBCSVQoMTApDQo+ICsjZGVm aW5lIFNETU1DX0lOVF9BX1NUQVRfRU4gICAgICAgICAgICAgICAgICBCSVQoOSkNCj4gKyNkZWZp bmUgU0RNTUNfQ0FSRF9JTlRFUlJVUFRfU1RBVF9FTiAgICAgICAgIEJJVCg4KQ0KPiArI2RlZmlu ZSBTRE1NQ19DQVJEX1JFTU9WQUxfU1RBVF9FTiAgICAgICAgICAgQklUKDcpDQo+ICsjZGVmaW5l IFNETU1DX0NBUkRfSU5TRVJUSU9OX1NUQVRfRU4gICAgICAgICBCSVQoNikNCj4gKyNkZWZpbmUg U0RNTUNfQlVGX1JEX1JFQURZX1NUQVRfRU4gICAgICAgICAgIEJJVCg1KQ0KPiArI2RlZmluZSBT RE1NQ19CVUZfV1JfUkVBRFlfU1RBVF9FTiAgICAgICAgICAgQklUKDQpDQo+ICsjZGVmaW5lIFNE TU1DX0RNQV9JTlRFUlJQVF9TVEFUX0VOICAgICAgICAgICBCSVQoMykNCj4gKyNkZWZpbmUgU0RN TUNfQkdBUF9FVkVOVF9TVEFUX0VOICAgICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSBTRE1N Q19YRkVSX0NPTVBMRVRFX1NUQVRfRU4gICAgICAgICAgQklUKDEpDQo+ICsjZGVmaW5lIFNETU1D X0NNRF9DT01QTEVURV9TVEFUX0VOICAgICAgICAgICBCSVQoMCkNCj4gKw0KPiArLyoweDM2IGVy cm9yIHN0YXR1cyBlbmFibGUgYml0bWFwKi8NCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9T VEFUX0VOMyAgICAgICAgICAgIEJJVCgxNSkNCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9T VEFUX0VOMiAgICAgICAgICAgIEJJVCgxNCkNCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9T VEFUX0VOMSAgICAgICAgICAgIEJJVCgxMykNCj4gKyNkZWZpbmUgU0RNTUNfQk9PVF9BQ0tfRVJS X1NUQVRfRU4gICAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZpbmUgU0RNTUNfUkVTUF9FUlJfU1RB VF9FTiAgICAgICAgICAgICAgICAgICAgICAgQklUKDExKQ0KPiArI2RlZmluZSBTRE1NQ19UVU5J TkdfRVJSX1NUQVRfRU4gICAgICAgICAgICAgQklUKDEwKQ0KPiArI2RlZmluZSBTRE1NQ19BRE1B X0VSUl9TVEFUX0VOICAgICAgICAgICAgICAgICAgICAgICBCSVQoOSkNCj4gKyNkZWZpbmUgU0RN TUNfQVVUT19DTURfRVJSX1NUQVRfRU4gICAgICAgICAgIEJJVCg4KQ0KPiArI2RlZmluZSBTRE1N Q19DVVJfTE1UX0VSUl9TVEFUX0VOICAgICAgICAgICAgQklUKDcpDQo+ICsjZGVmaW5lIFNETU1D X0RBVEFfRU5EX0JJVF9FUlJfU1RBVF9FTiAgICAgICAgICAgICAgIEJJVCg2KQ0KPiArI2RlZmlu ZSBTRE1NQ19EQVRBX0NSQ19FUlJfU1RBVF9FTiAgICAgICAgICAgQklUKDUpDQo+ICsjZGVmaW5l IFNETU1DX0RBVEFfVE9VVF9FUlJfU1RBVF9FTiAgICAgICAgICBCSVQoNCkNCj4gKyNkZWZpbmUg U0RNTUNfQ01EX0lEWF9FUlJfU1RBVF9FTiAgICAgICAgICAgIEJJVCgzKQ0KPiArI2RlZmluZSBT RE1NQ19DTURfRU5EX0JJVF9FUlJfU1RBVF9FTiAgICAgICAgICAgICAgICBCSVQoMikNCj4gKyNk ZWZpbmUgU0RNTUNfQ01EX0NSQ19FUlJfU1RBVF9FTiAgICAgICAgICAgIEJJVCgxKQ0KPiArI2Rl ZmluZSBTRE1NQ19DTURfVE9VVF9FUlJfU1RBVF9FTiAgICAgICAgICAgQklUKDApDQo+ICsNCj4g Ky8qMHgzOCBzaWduYWwgaW50ZXJydXB0IGVuYWJsZSovDQo+ICsjZGVmaW5lIFNETU1DX0NRRV9F VkVOVF9TSUdOQUxfRU4gICAgICAgICAgICBCSVQoMTQpDQo+ICsjZGVmaW5lIFNETU1DX0ZYX0VW RU5UX1NJR05BTF9FTiAgICAgICAgICAgICBCSVQoMTMpDQo+ICsjZGVmaW5lIFNETU1DX1JFX1RV TkVfRVZFTlRfU0lHTkFMX0VOICAgICAgICAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZpbmUgU0RN TUNfSU5UX0NfU0lHTkFMX0VOICAgICAgICAgICAgICAgICAgICAgICAgQklUKDExKQ0KPiArI2Rl ZmluZSBTRE1NQ19JTlRfQl9TSUdOQUxfRU4gICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTAp DQo+ICsjZGVmaW5lIFNETU1DX0lOVF9BX1NJR05BTF9FTiAgICAgICAgICAgICAgICAgICAgICAg IEJJVCg5KQ0KPiArI2RlZmluZSBTRE1NQ19DQVJEX0lOVEVSUlVQVF9TSUdOQUxfRU4gICAgICAg ICAgICAgICBCSVQoOCkNCj4gKyNkZWZpbmUgU0RNTUNfQ0FSRF9SRU1PVkFMX1NJR05BTF9FTiAg ICAgICAgIEJJVCg3KQ0KPiArI2RlZmluZSBTRE1NQ19DQVJEX0lOU0VSVElPTl9TSUdOQUxfRU4g ICAgICAgICAgICAgICBCSVQoNikNCj4gKyNkZWZpbmUgU0RNTUNfQlVGX1JEX1JFQURZX1NJR05B TF9FTiAgICAgICAgIEJJVCg1KQ0KPiArI2RlZmluZSBTRE1NQ19CVUZfV1JfUkVBRFlfU0lHTkFM X0VOICAgICAgICAgQklUKDQpDQo+ICsjZGVmaW5lIFNETU1DX0RNQV9JTlRFUlJQVF9TSUdOQUxf RU4gICAgICAgICBCSVQoMykNCj4gKyNkZWZpbmUgU0RNTUNfQkdBUF9FVkVOVF9TSUdOQUxfRU4g ICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSBTRE1NQ19YRkVSX0NPTVBMRVRFX1NJR05BTF9F TiAgICAgICAgICAgICAgICBCSVQoMSkNCj4gKyNkZWZpbmUgU0RNTUNfQ01EX0NPTVBMRVRFX1NJ R05BTF9FTiAgICAgICAgIEJJVCgwKQ0KPiArI2RlZmluZSBTRE1NQ19OT1JNQUxfSU5UX1NJR05B TF9DTURfRU5fUiAgICAgKH4oQklUKDYpIHwgQklUKDcpIHwgQklUKDgpIHwgQklUKDEpKSAmIDB4 ZmZmZikNCj4gKyNkZWZpbmUgU0RNTUNfTk9STUFMX0lOVF9TSUdOQUxfREFUX0VOX1IgICAgICh+ KEJJVCg2KSB8IEJJVCg3KSB8IEJJVCg4KSB8IEJJVCgwKSkgJiAweGZmZmYpDQo+ICsjZGVmaW5l IFNETU1DX05PUk1BTF9JTlRfU0lHTkFMX0NRRV9FTl9SICAgICAofihCSVQoNikgfCBCSVQoNykg fCBCSVQoOCkgfCBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCSVQoMSkgfCBCSVQoMCkpICYgMHhmZmZmKQ0KPiArDQo+ICsvKjB4M2EgZXJyb3Igc3Np Z25hbCBlbmFibGUgYml0bWFwKi8NCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9TSUdOQUxf RU4zICAgICAgICAgIEJJVCgxNSkNCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9TSUdOQUxf RU4yICAgICAgICAgIEJJVCgxNCkNCj4gKyNkZWZpbmUgU0RNTUNfVkVORE9SX0VSUl9TSUdOQUxf RU4xICAgICAgICAgIEJJVCgxMykNCj4gKyNkZWZpbmUgU0RNTUNfQk9PVF9BQ0tfRVJSX1NJR05B TF9FTiAgICAgICAgIEJJVCgxMikNCj4gKyNkZWZpbmUgU0RNTUNfUkVTUF9FUlJfU0lHTkFMX0VO ICAgICAgICAgICAgIEJJVCgxMSkNCj4gKyNkZWZpbmUgU0RNTUNfVFVOSU5HX0VSUl9TSUdOQUxf RU4gICAgICAgICAgIEJJVCgxMCkNCj4gKyNkZWZpbmUgU0RNTUNfQURNQV9FUlJfU0lHTkFMX0VO ICAgICAgICAgICAgIEJJVCg5KQ0KPiArI2RlZmluZSBTRE1NQ19BVVRPX0NNRF9FUlJfU0lHTkFM X0VOICAgICAgICAgQklUKDgpDQo+ICsjZGVmaW5lIFNETU1DX0NVUl9MTVRfRVJSX1NJR05BTF9F TiAgICAgICAgICBCSVQoNykNCj4gKyNkZWZpbmUgU0RNTUNfREFUQV9FTkRfQklUX0VSUl9TSUdO QUxfRU4gICAgIEJJVCg2KQ0KPiArI2RlZmluZSBTRE1NQ19EQVRBX0NSQ19FUlJfU0lHTkFMX0VO ICAgICAgICAgQklUKDUpDQo+ICsjZGVmaW5lIFNETU1DX0RBVEFfVE9VVF9FUlJfU0lHTkFMX0VO ICAgICAgICAgICAgICAgIEJJVCg0KQ0KPiArI2RlZmluZSBTRE1NQ19DTURfSURYX0VSUl9TSUdO QUxfRU4gICAgICAgICAgQklUKDMpDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9FTkRfQklUX0VSUl9T SUdOQUxfRU4gICAgICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSBTRE1NQ19DTURfQ1JDX0VS Ul9TSUdOQUxfRU4gICAgICAgICAgQklUKDEpDQo+ICsjZGVmaW5lIFNETU1DX0NNRF9UT1VUX0VS Ul9TVEFUX0VOICAgICAgICAgICBCSVQoMCkNCj4gKw0KPiArI2RlZmluZSBTRE1NQ19BTExfTk9S TUFMX1NUQVRfRU4gICAgICAgICAgICAgKDB4ZmVmZikNCj4gKyNkZWZpbmUgU0RNTUNfQUxMX0VS Ul9TVEFUX0VOICAgICAgICAgICAgICAgICAgICAgICAgKDB4ZmZmZikNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvKmVuYWJsbGUgYWxsIGVycm9yIGluaXRlcnJ1cHQg aW4gMHgzNiovDQo+ICsjZGVmaW5lIFNETU1DX0FMTF9TSUdOQUxfU1RBVF9FTiAgICAgICAgICAg ICAgICAoMHhmZWZmKQ0KPiArI2RlZmluZSBTRE1NQ19BTExfRVJSX1NJR05BTF9FTiAgICAgICAg ICAgICAgICAgICAgICAoMHhmZmZmKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qZW5hYmxlIGFsbCBzaWduYWwgZXJyb3IgaW50ZXJydXB0IGluIDB4M2EqLw0KPiAr DQo+ICsvKjB4M2UqLw0KPiArI2RlZmluZSBTRE1NQ19MRUdBQ1kgICAgICAgICAgICAgICAgICAg ICAgICAgMHgwDQo+ICsjZGVmaW5lIFNETU1DX1NEUiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDENCj4gKyNkZWZpbmUgU0RNTUNfSFMyMDAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 Mw0KPiArI2RlZmluZSBTRE1NQ19ERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0DQo+ ICsjZGVmaW5lIFNETU1DX0hTNDAwICAgICAgICAgICAgICAgICAgICAgICAgICAweDcNCj4gKyNk ZWZpbmUgU0RNTUNfSE9TVF9WRVI0X0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgQklUKDEy KQ0KPiArI2RlZmluZSBTRE1NQ19TSUdOQUxJTkdfRU4gICAgICAgICAgICAgICAgICAgQklUKDMp DQo+ICsNCj4gKy8qMHgyMmMqLw0KPiArI2RlZmluZSBTRE1NQ19SU1RfTl9PRSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCSVQoMykNCj4gKyNkZWZpbmUgU0RNTUNfUlNUX04gICAgICAg ICAgICAgICAgICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSBTRE1NQ19DQVJEX0lTX0VNTUMg ICAgICAgICAgICAgICAgICAgQklUKDApDQo+ICsNCj4gKyNkZWZpbmUgU0RNTUNfSU5URVJOQUxf Q0xLX0VOICAgICAgICAgICAgICAgICAgICAgICAgQklUKDApDQo+ICsjZGVmaW5lIFNETU1DX1BM TF9VU0FCTEUgICAgICAgICAgICAgICAgICAgICBCSVQoMCkNCj4gKw0KPiArI2RlZmluZSBWQUxJ RCh4KSAgICAgICAgICAgICAgICAgICAgICgoeCAmIDEpIDw8IDApDQo+ICsjZGVmaW5lIEVORCh4 KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHggJiAxKSA8PCAxKQ0KPiArI2RlZmlu ZSBJTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4ICYgMSkgPDwgMikNCj4g KyNkZWZpbmUgQUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCAmIDB4Nykg PDwgMykNCj4gKyNkZWZpbmUgREFUX0xFTkdUSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgo eCAmIDB4RkZGRikgPDwgMTYpDQo+ICsNCj4gKw0KPiArLyogUmVnaXN0ZXIgYWNjZXNzIG1hY3Jv cyAqLw0KPiArI2RlZmluZSBtY2lfcmVhZGwoZGV2LCByZWcpICAgICAgICAgICAgICAgICAgICAg XA0KPiArICAgICByZWFkbF9yZWxheGVkKChkZXYpLT5yZWdzICsgU0RNTUNfIyNyZWcpDQo+ICsj ZGVmaW5lIG1jaV93cml0ZWwoZGV2LCByZWcsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgIFwN Cj4gKyAgICAgd3JpdGVsX3JlbGF4ZWQoKHZhbHVlKSwgKGRldiktPnJlZ3MgKyBTRE1NQ18jI3Jl ZykNCj4gKw0KPiArI2RlZmluZSBtY2lfcmVhZHcoZGV2LCByZWcpICAgICAgICAgICAgICAgICAg ICAgXA0KPiArICAgICByZWFkd19yZWxheGVkKChkZXYpLT5yZWdzICsgU0RNTUNfIyNyZWcpDQo+ ICsjZGVmaW5lIG1jaV93cml0ZXcoZGV2LCByZWcsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAg IFwNCj4gKyAgICAgd3JpdGV3X3JlbGF4ZWQoKHZhbHVlKSwgKGRldiktPnJlZ3MgKyBTRE1NQ18j I3JlZykNCj4gKw0KPiArI2RlZmluZSBtY2lfcmVhZGIoZGV2LCByZWcpICAgICAgICAgICAgICAg ICAgICAgXA0KPiArICAgICByZWFkYl9yZWxheGVkKChkZXYpLT5yZWdzICsgU0RNTUNfIyNyZWcp DQo+ICsjZGVmaW5lIG1jaV93cml0ZWIoZGV2LCByZWcsIHZhbHVlKSAgICAgICAgICAgICAgICAg ICAgIFwNCj4gKyAgICAgd3JpdGViX3JlbGF4ZWQoKHZhbHVlKSwgKGRldiktPnJlZ3MgKyBTRE1N Q18jI3JlZykNCj4gKw0KPiArI2RlZmluZSBkd19tY2lfZ2V0X2ludChkZXYpICAgIFwNCj4gKyAg ICAgZG8geyAgICBcDQo+ICsgICAgICAgICAgICAgZGV2LT5ub3JtYWxfaW50ZXJydXB0ID0gbWNp X3JlYWR3KGRldiwgTk9STUFMX0lOVF9TVEFUX1IpOyAgIFwNCj4gKyAgICAgICAgICAgICBkZXYt PmVycm9yX2ludGVycnVwdCA9IG1jaV9yZWFkdyhkZXYsIEVSUk9SX0lOVF9TVEFUX1IpOyAgIFwN Cj4gKyAgICAgICAgICAgICBkZXYtPmF1dG9fZXJyb3JfaW50ZXJydXB0ID0gbWNpX3JlYWR3KGRl diwgQVVUT19DTURfU1RBVF9SKTsgICAgIFwNCj4gKyAgICAgfSB3aGlsZSAoMCkNCj4gKw0KPiAr LypjbGVhciBzdGF0dXMgcmVnaXN0ZXIsIHdlIGFsd2F5cyBrZWVwIHRoZSBjYXJkIGludGVycnVw dCovDQo+ICsjZGVmaW5lIGR3X21jaV9jbHJfaW50KGRldikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAgIGRvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICsgICAgICAgICAg ICAgbWNpX3dyaXRldyhkZXYsIEVSUk9SX0lOVF9TVEFUX1IsIG1jaV9yZWFkdyhkZXYsIEVSUk9S X0lOVF9TVEFUX1IpICYgMHhmZmZmKTsgXA0KPiArICAgICAgICAgICAgIG1jaV93cml0ZXcoZGV2 LCBOT1JNQUxfSU5UX1NUQVRfUiwgbWNpX3JlYWR3KGRldiwgTk9STUFMX0lOVF9TVEFUX1IpICYg MHhmZmZmKTsgXA0KPiArICAgICB9IHdoaWxlICgwKQ0KPiArDQo+ICsvKm1hc2sgYWxsIGVtbWMg aW50ZXJydXB0cyovDQo+ICsjZGVmaW5lIGR3X21jaV9jbHJfc2lnbmFsX2ludChkZXYpICAgIFwN Cj4gKyAgICAgZG8geyAgICAgIFwNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGRldiwgTk9S TUFMX0lOVF9TSUdOQUxfRU5fUiwgXA0KPiArICAgICAgICAgICAgICAgICAgICAgbWNpX3JlYWR3 KGRldiwgTk9STUFMX0lOVF9TSUdOQUxfRU5fUikgJiAoQklUKDYpfEJJVCg3KSkpOyBcDQo+ICsg ICAgICAgICAgICAgbWNpX3dyaXRldyhkZXYsIEVSUk9SX0lOVF9TSUdOQUxfRU5fUiwgMCk7IFwN Cj4gKyAgICAgfSB3aGlsZSAoMCkNCj4gKw0KPiArLypmb3IgY21kcSwgd2UgZG8gbm90IG5lZWQg Y21kIGFuZCB4ZmVyIGRvbmUsIG9ubHkgY3FlIGV2ZW50Ki8NCj4gKyNkZWZpbmUgZHdfbWNpX2Vu X2NxZV9pbnQoZGV2KSAgXA0KPiArICAgICBkbyB7IFwNCj4gKyAgICAgICAgICAgICBtY2lfd3Jp dGV3KGRldiwgTk9STUFMX0lOVF9TSUdOQUxfRU5fUiwgXA0KPiArICAgICAgICAgICAgICAgICAg ICAgbWNpX3JlYWR3KGRldiwgTk9STUFMX0lOVF9TSUdOQUxfRU5fUil8U0RNTUNfTk9STUFMX0lO VF9TSUdOQUxfQ1FFX0VOX1IpOyBcDQo+ICsgICAgICAgICAgICAgbWNpX3dyaXRldyhkZXYsIEVS Uk9SX0lOVF9TSUdOQUxfRU5fUiwgU0RNTUNfQUxMX0VSUl9TSUdOQUxfRU4pOyBcDQo+ICsgICAg IH0gd2hpbGUgKDApDQo+ICsNCj4gKy8qdXNlZCBmb3IgZGF0YSwgcjFiIGNhc2UsIHdlIG1hc2sg Y21kIGRvbmUgaW50ZXJydXB0Ki8NCj4gKyNkZWZpbmUgZHdfbWNpX2VuX3hmZXJfaW50KGRldikg IFwNCj4gKyAgICAgZG8geyAgXA0KPiArICAgICAgICAgICAgIG1jaV93cml0ZXcoZGV2LCBOT1JN QUxfSU5UX1NJR05BTF9FTl9SLCBcDQo+ICsgICAgICAgICAgICAgICAgICAgICBtY2lfcmVhZHco ZGV2LCBOT1JNQUxfSU5UX1NJR05BTF9FTl9SKXxTRE1NQ19OT1JNQUxfSU5UX1NJR05BTF9EQVRf RU5fUik7IFwNCj4gKyAgICAgICAgICAgICBtY2lfd3JpdGV3KGRldiwgRVJST1JfSU5UX1NJR05B TF9FTl9SLCBTRE1NQ19BTExfRVJSX1NJR05BTF9FTik7IFwNCj4gKyAgICAgfSB3aGlsZSAoMCkN Cj4gKw0KPiArLyp1c2VkIGZvciBub25lLXN0cmVhbSBjYXNlIChjbWQgdy93by8gcmVzcCkqLw0K PiArI2RlZmluZSBkd19tY2lfZW5fY2RfaW50KGRldikgIFwNCj4gKyAgICAgZG8geyAgICBcDQo+ ICsgICAgICAgICAgICAgbWNpX3dyaXRldyhkZXYsIE5PUk1BTF9JTlRfU0lHTkFMX0VOX1IsIFwN Cj4gKyAgICAgICAgICAgICAgICAgICAgIG1jaV9yZWFkdyhkZXYsIE5PUk1BTF9JTlRfU0lHTkFM X0VOX1IpfFNETU1DX05PUk1BTF9JTlRfU0lHTkFMX0NNRF9FTl9SKTsgXA0KPiArICAgICAgICAg ICAgIG1jaV93cml0ZXcoZGV2LCBFUlJPUl9JTlRfU0lHTkFMX0VOX1IsIFNETU1DX0FMTF9FUlJf U0lHTkFMX0VOKTsgXA0KPiArICAgICB9IHdoaWxlICgwKQ0KPiArDQo+ICtleHRlcm4gaW50IGR3 X21jaV9jcWVfcHJvYmUoc3RydWN0IGR3X21jaSAqaG9zdCk7DQo+ICtleHRlcm4gdm9pZCBkd19t Y2lfY3FlX3JlbW92ZShzdHJ1Y3QgZHdfbWNpICpob3N0KTsNCj4gKyNpZmRlZiBDT05GSUdfUE0N Cj4gK2V4dGVybiBpbnQgZHdfbWNpX2NxZV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAq ZGV2aWNlKTsNCj4gK2V4dGVybiBpbnQgZHdfbWNpX2NxZV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3Qg ZGV2aWNlICpkZXZpY2UpOw0KPiArI2VuZGlmDQo+ICtpcnFyZXR1cm5fdCBjcWhjaV9pcnEoc3Ry dWN0IG1tY19ob3N0ICptbWMsIHUzMiBpbnRtYXNrLCBpbnQgY21kX2Vycm9yLCBpbnQgZGF0YV9l cnJvcik7DQo+ICsNCj4gKy8qIEJvYXJkIHBsYXRmb3JtIGRhdGEgKi8NCj4gK3N0cnVjdCBkd19t Y2lfYm9hcmQgew0KPiArICAgICB1bnNpZ25lZCBpbnQgYnVzX2h6OyAvKiBDbG9jayBzcGVlZCBh dCB0aGUgY2Nsa19pbiBwYWQgKi8NCj4gKyAgICAgdTMyIGNhcHM7ICAgICAgIC8qIENhcGFiaWxp dGllcyAqLw0KPiArICAgICB1MzIgY2FwczI7ICAgICAgLyogTW9yZSBjYXBhYmlsaXRpZXMgKi8N Cj4gKyAgICAgdTMyIHBtX2NhcHM7ICAgIC8qIFBNIGNhcGFiaWxpdGllcyAqLw0KPiArDQo+ICsg ICAgIC8qIGRlbGF5IGluIG1TIGJlZm9yZSBkZXRlY3RpbmcgY2FyZHMgYWZ0ZXIgaW50ZXJydXB0 ICovDQo+ICsgICAgIHUzMiBkZXRlY3RfZGVsYXlfbXM7DQo+ICsNCj4gKyAgICAgc3RydWN0IHJl c2V0X2NvbnRyb2wgKnJzdGM7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgZHdfbWNpX3Nsb3Qgew0K PiArICAgICBzdHJ1Y3QgbW1jX2hvc3QgICAgICAgICAqbW1jOw0KPiArICAgICBzdHJ1Y3QgZHdf bWNpICAgICAgICAgICAqaG9zdDsNCj4gKw0KPiArICAgICBzdHJ1Y3QgbW1jX3JlcXVlc3QgICAg ICAqbXJxOw0KPiArDQo+ICsgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIGNsb2NrOw0KPiAr ICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBfX2Nsa19vbGQ7DQo+ICsNCj4gKyAgICAgdW5z aWduZWQgbG9uZyAgICAgICAgICAgZmxhZ3M7DQo+ICsjZGVmaW5lIERXX01NQ19DQVJEX1BSRVNF TlQgICAgIDENCj4gKyAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgaWQ7DQo+ICsgICAgIGlu dCAgICAgICAgICAgICAgICAgICAgIHNkaW9faWQ7DQo+ICsgICAgIHU4ICAgICAgICAgICAgICAg ICAgICAgIHN3aXRjaF9wYXJ0aXRpb247DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgZHdfbWNpX2Ry dl9kYXRhIHsNCj4gKyAgICAgdW5zaWduZWQgbG9uZyAgICpjYXBzOw0KPiArICAgICB1MzIgICAg ICAgICAgICAgbnVtX2NhcHM7DQo+ICsgICAgIGludCAgICAgICAgICAgICAoKmluaXQpKHN0cnVj dCBkd19tY2kgKmhvc3QpOw0KPiArICAgICB2b2lkICAgICAgICAgICAgKCpzZXRfaW9zKShzdHJ1 Y3QgZHdfbWNpX3Nsb3QgKnNsb3QsIHN0cnVjdCBtbWNfaW9zICppb3MpOw0KPiArICAgICBpbnQg ICAgICAgICAgICAgKCpwYXJzZV9kdCkoc3RydWN0IGR3X21jaSAqaG9zdCk7DQo+ICsgICAgIGlu dCAgICAgICAgICAgICAoKmV4ZWN1dGVfdHVuaW5nKShzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3Qs IHUzMiBvcGNvZGUpOw0KPiArICAgICBpbnQgICAgICAgICAgICAgKCpwcmVwYXJlX2hzNDAwX3R1 bmluZykoc3RydWN0IGR3X21jaSAqaG9zdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbW1jX2lvcyAqaW9zKTsNCj4gKyAgICAgaW50ICAgICAgICAgICAg ICgqc3dpdGNoX3ZvbHRhZ2UpKHN0cnVjdCBtbWNfaG9zdCAqbW1jLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtbWNfaW9zICppb3MpOw0KPiArICAgICB2 b2lkICAgICAgICAgICAgKCpoczQwMF9jb21wbGV0ZSkoc3RydWN0IG1tY19ob3N0ICptbWMpOw0K PiArICAgICB2b2lkICAgICAgICAgICAgKCppbml0X2NhcmQpKHN0cnVjdCBtbWNfaG9zdCAqaG9z dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbW1jX2Nh cmQgKmNhcmQpOw0KPiArICAgICB2b2lkICAgICAgICAgICAgKCpzaGlmdF9yc3ApKHN0cnVjdCBk d19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kLCB1MzIgKnJzcCk7DQo+ICt9Ow0K PiArDQo+ICt2b2lkIGR3X21jaV9jcWVfd2FpdF9kb25lKHN0cnVjdCBkd19tY2kgKmhvc3QsIHUz MiAqYWRkciwgdTMyIG1hc2ssIHUzMiB2YWx1ZSk7DQo+ICsjZW5kaWYNCg0KDQotLS0tLS1QbGVh c2UgY29uc2lkZXIgdGhlIGVudmlyb25tZW50IGJlZm9yZSBwcmludGluZyB0aGlzIGUtbWFpbC4N Cg==