From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC0CEC433E0 for ; Fri, 29 Jan 2021 07:44:50 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 80D1764E00 for ; Fri, 29 Jan 2021 07:44:50 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 80D1764E00 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9FE4D6E440; Fri, 29 Jan 2021 07:44:49 +0000 (UTC) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 24A6D6E440 for ; Fri, 29 Jan 2021 07:44:48 +0000 (UTC) IronPort-SDR: 3tKxvKZhi0lEK6zBWGEm9Ag9bC1EExBrdTBxSKHVnC+Bo+STrBI9YTKlLKq+UHJMKhKte78vX9 oU2P1GxgG9JQ== X-IronPort-AV: E=McAfee;i="6000,8403,9878"; a="244469344" X-IronPort-AV: E=Sophos;i="5.79,384,1602572400"; d="scan'208";a="244469344" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Jan 2021 23:44:46 -0800 IronPort-SDR: 9O7e/4NBY8g2ISPRU6VoNQH5FFHy2+IwpyDEd+n1V9FZfzdWVVsCv2bOU3k24y/znG67borIMH EwTsxW550aJQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,384,1602572400"; d="scan'208";a="474435559" Received: from irsmsx601.ger.corp.intel.com ([163.33.146.7]) by fmsmga001.fm.intel.com with ESMTP; 28 Jan 2021 23:44:45 -0800 Received: from irsmsx605.ger.corp.intel.com (163.33.146.138) by irsmsx601.ger.corp.intel.com (163.33.146.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 29 Jan 2021 07:44:44 +0000 Received: from irsmsx605.ger.corp.intel.com ([163.33.146.138]) by IRSMSX605.ger.corp.intel.com ([163.33.146.138]) with mapi id 15.01.1713.004; Fri, 29 Jan 2021 07:44:44 +0000 From: "Mun, Gwan-gyeong" To: "intel-gfx@lists.freedesktop.org" , "Souza, Jose" Thread-Topic: [PATCH v13 1/2] drm/i915/display: Support PSR Multiple Instances Thread-Index: AQHW9O0iuhnzf2VLSEq48xWn4PN9Qqo+O1sA Date: Fri, 29 Jan 2021 07:44:43 +0000 Message-ID: <0c97a796fac89583e3f27add4f52aaf4d2faaa03.camel@intel.com> References: <20210127172338.1519034-1-gwan-gyeong.mun@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.253.164] Content-ID: MIME-Version: 1.0 Subject: Re: [Intel-gfx] [PATCH v13 1/2] drm/i915/display: Support PSR Multiple Instances X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Nikula, Jani" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" T24gV2VkLCAyMDIxLTAxLTI3IGF0IDEyOjQzIC0wODAwLCBTb3V6YSwgSm9zZSB3cm90ZToNCj4g T24gV2VkLCAyMDIxLTAxLTI3IGF0IDE5OjIzICswMjAwLCBHd2FuLWd5ZW9uZyBNdW4gd3JvdGU6 DQo+ID4gSXQgaXMgYSBwcmVsaW1pbmFyeSB3b3JrIGZvciBzdXBwb3J0aW5nIG11bHRpcGxlIEVE UCBQU1IgYW5kDQo+ID4gRFAgUGFuZWxSZXBsYXkuIEFuZCBpdCByZWZhY3RvcnMgc2luZ2xldG9u IFBTUiB0byBNdWx0aSBUcmFuc2NvZGVyDQo+ID4gc3VwcG9ydGFibGUgUFNSLg0KPiA+IEFuZCB0 aGlzIG1vdmVzIGFuZCByZW5hbWVzIHRoZSBpOTE1X3BzciBzdHJ1Y3R1cmUgb2YNCj4gPiBkcm1f aTkxNV9wcml2YXRlJ3MgdG8NCj4gPiBpbnRlbF9kcCdzIGludGVsX3BzciBzdHJ1Y3R1cmUuDQo+ ID4gSXQgYWxzbyBjYXVzZXMgY2hhbmdlcyBpbiBQU1IgaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRp bmUgZm9yDQo+ID4gc3VwcG9ydGluZw0KPiA+IG11bHRpcGxlIHRyYW5zY29kZXJzLiBCdXQgaXQg ZG9lcyBub3QgY2hhbmdlIHRoZSBzY2VuYXJpbyBhbmQNCj4gPiB0aW1pbmcgb2YNCj4gPiBlbmFi bGluZyBhbmQgZGlzYWJsaW5nIFBTUi4gQW5kIGl0IG5vdCBzdXBwb3J0IG11bHRpcGxlIHBpcGVz IHdpdGgNCj4gPiBhIHNpbmdsZSB0cmFuc2NvZGVyIFBTUiBjYXNlIHlldC4NCj4gPiANCj4gPiB2 MjogRml4IGluZGVudGF0aW9uIGFuZCBhZGQgY29tbWVudHMNCj4gPiB2MzogUmVtb3ZlIEJsYW5r IGxpbmUNCj4gPiB2NDogUmViYXNlZA0KPiA+IHY1OiBSZWJhc2VkIGFuZCBBZGRyZXNzZWQgQW5z aHVtYW4ncyByZXZpZXcgY29tbWVudC4NCj4gPiDCoMKgwqAgLSBNb3ZlIGNhbGxpbmcgb2YgaW50 ZWxfcHNyX2luaXQoKSB0byBpbnRlbF9kcF9pbml0X2Nvbm5lY3RvcigpDQo+ID4gdjY6IEFkZHJl c3MgQW5zaHVtYW4ncyByZXZpZXcgY29tbWVudHMNCj4gPiDCoMKgIC0gUmVtb3ZlIHdyb25nIGNv bW1lbnRzIGFuZCBhZGQgY29tbWVudHMgZm9yIGEgbGltaXQgb2YNCj4gPiBzdXBwb3J0aW5nIG9m DQo+ID4gwqDCoMKgwqAgYSBzaW5nbGUgcGlwZSBQU1INCj4gPiB2NzogVXBkYXRlIGludGVsX3Bz cl9jb21wdXRlX2NvbmZpZygpIGZvciBzdXBwb3J0aW5nIG11bHRpcGxlDQo+ID4gdHJhbnNjb2Rl cg0KPiA+IMKgwqDCoCBQU1Igb24gQkRXKw0KPiA+IHY4OiBBZGRyZXNzIEFuc2h1bWFuJ3MgcmV2 aWV3IGNvbW1lbnRzDQo+ID4gwqDCoCAtIFJlcGxhY2UgRFJNX0RFQlVHX0tNUyB3aXRoIGRybV9k Ymdfa21zKCkgLyBEUk1fV0FSTiB3aXRoDQo+ID4gZHJtX3dhcm4oKQ0KPiA+IHY5OiBGaXggY29t bWl0IG1lc3NhZ2UNCj4gPiB2MTA6IFJlYmFzZWQNCj4gPiB2MTE6IEFkZHJlc3MgSm9zZSdzIHJl dmlldyBjb21tZW50Lg0KPiA+IMKgIC0gUmVvcmRlciBjYWxsaW5nIG9yZGVyIG9mDQo+ID4gaW50 ZWxfcHNyMl9wcm9ncmFtX3RyYW5zX21hbl90cmtfY3RsKCkuDQo+ID4gwqAgLSBJbiBvcmRlciB0 byByZWR1Y2UgY2hhbmdlcyBrZWVwIHRoZSBvbGQgbmFtZSBmb3INCj4gPiBkcm1faTkxNV9wcml2 YXRlLg0KPiA+IMKgIC0gQ2hhbmdlIHJlc3RyaWN0aW9ucyBvZiBtdWx0aXBsZSBpbnN0YW5jZXMg b2YgUFNSLg0KPiA+IHYxMjogQWRkcmVzcyBKb3NlJ3MgcmV2aWV3IGNvbW1lbnQuDQo+ID4gwqAg LSBDaGFuZ2UgdGhlIGNhbGxpbmcgb2YgaW50ZWxfcHNyMl9wcm9ncmFtX3RyYW5zX21hbl90cmtf Y3RsKCkNCj4gPiBpbnRvDQo+ID4gwqDCoMKgIGNvbW1pdF9waXBlX2NvbmZpZygpLg0KPiA+IMKg IC0gQ2hhbmdlIGEgY2hlY2tpbmcgb3JkZXIgb2YgQ0FOX1BTUigpIGFuZCBjb25uZWN0b3Jfc3Rh dHVzIHRvDQo+ID4gb3JpZ2luYWwNCj4gPiDCoMKgwqAgb24gaTkxNV9wc3Jfc2lua19zdGF0dXNf c2hvdygpLg0KPiA+IMKgIC0gRHJvcCB1bm5lZWRlZCBpbnRlbF9kcF91cGRhdGVfcGlwZSgpIGZ1 bmN0aW9uLg0KPiA+IMKgIC0gSW4gb3JkZXIgdG8gd2FpdCBhIHNwZWNpZmljIGVuY29kZXIgd2hp Y2ggYmVsb25nIHRvIGNydGNfc3RhdGUNCj4gPiBvbg0KPiA+IMKgwqDCoCBpbnRlbF9wc3Jfd2Fp dF9mb3JfaWRsZSgpLCBhZGQgY2hlY2tpbmcgb2YgZW5jb2Rlci4NCj4gPiDCoCAtIEFkZCBhbiB3 aGl0ZXNwYWNlIHRvIGNvbW1lbnRzLg0KPiA+IHYxMzogUmViYXNlZCBhbmQgQWRkcmVzcyBKb3Nl J3MgcmV2aWV3IGNvbW1lbnQuDQo+ID4gwqAgLSBBZGQgYW5kIHVzZSBmb3JfZWFjaF9pbnRlbF9w c3JfZW5hYmxlZF9lbmNvZGVyKCkgbWFjcm8uDQo+ID4gwqAgLSBJbiBvcmRlciB0byB1c2UgY29y cmVjdCBmcm9udGJ1ZmZlcl9iaXQgZm9yIGVhY2ggcGlwZSwNCj4gPiDCoMKgwqAgZml4IGludGVs X3Bzcl9pbnZhbGlkYXRlKCkgYW5kIGludGVsX3Bzcl9mbHVzaCgpLg0KPiA+IMKgIC0gUmVtb3Zl IHJlZHVuZGFudCBvciB1bm5lZWRlZCBjb2Rlcy4NCj4gPiDCoCAtIFVwZGF0ZSBjb21tZW50cy4N Cj4gPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBHd2FuLWd5ZW9uZyBNdW4gPGd3YW4tZ3llb25nLm11 bkBpbnRlbC5jb20+DQo+ID4gQ2M6IEpvc8OpIFJvYmVydG8gZGUgU291emEgPGpvc2Uuc291emFA aW50ZWwuY29tPg0KPiA+IENjOiBKdWhhLVBla2thIEhlaWtraWxhIDxqdWhhcGVra2EuaGVpa2tp bGFAZ21haWwuY29tPg0KPiA+IENjOiBBbnNodW1hbiBHdXB0YSA8YW5zaHVtYW4uZ3VwdGFAaW50 ZWwuY29tPg0KPiA+IFJldmlld2VkLWJ5OiBBbnNodW1hbiBHdXB0YSA8YW5zaHVtYW4uZ3VwdGFA aW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9kaXNwbGF5LmPCoCB8wqDCoCAyIC0NCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5owqAgfMKgwqAgOCArDQo+ID4gwqAuLi4vZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMuY8KgIHwgMTA1ICsrKy0NCj4gPiDCoC4uLi9kcm0v aTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaMKgwqDCoCB8wqAgNDYgKysNCj4gPiDC oGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuY8KgwqDCoMKgwqDCoCB8wqAg MTAgKy0NCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmPCoMKg wqDCoMKgIHwgNTc2ICsrKysrKysrKystLS0tDQo+ID4gLS0tLQ0KPiA+IMKgZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuaMKgwqDCoMKgwqAgfMKgIDExICstDQo+ID4gwqBk cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jwqDCoCB8wqDCoCA2ICst DQo+ID4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5owqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB8wqAgMzggLS0NCj4gPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJx LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA0OCArLQ0KPiA+IMKgMTAgZmlsZXMg Y2hhbmdlZCwgNDg1IGluc2VydGlvbnMoKyksIDM2NSBkZWxldGlvbnMoLSkNCj4gPiANCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMN Cj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jDQo+ID4g aW5kZXggNjY3ZDk0MTg3OGEzLi4yNGRmOWRmYjU3ZmIgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMNCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYw0KPiA+IEBAIC0xNDEzNSw4ICsx NDEzNSw2IEBAIHN0YXRpYyB2b2lkIGludGVsX3NldHVwX291dHB1dHMoc3RydWN0DQo+ID4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpbnRlbF9kdm9faW5pdChkZXZfcHJpdik7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0NCj4g PiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGludGVsX3Bzcl9pbml0KGRldl9wcml2KTsN Cj4gPiAtDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGZvcl9lYWNoX2ludGVsX2VuY29kZXIoJmRldl9w cml2LT5kcm0sIGVuY29kZXIpIHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGVuY29kZXItPmJhc2UucG9zc2libGVfY3J0Y3MgPQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX2VuY29kZXJfcG9zc2libGVfY3J0Y3Mo ZW5jb2Rlcik7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkv aW50ZWxfZGlzcGxheS5oDQo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVs X2Rpc3BsYXkuaA0KPiA+IGluZGV4IDY0ZmZhMzQ1NDRhNy4uZmM0MWQwZDllNWE1IDEwMDY0NA0K PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5oDQo+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmgNCj4g PiBAQCAtNDE3LDYgKzQxNywxNCBAQCBlbnVtIHBoeV9maWEgew0KPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZm9yX2VhY2hfaWYoKGVuY29kZXJfbWFzaykNCj4gPiAmwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcDQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRy bV9lbmNvZGVyX21hc2soJmludGVsX2VuY29kZXItPmJhc2UpKQ0KPiA+IMKgDQo+ID4gDQo+ID4g KyNkZWZpbmUgZm9yX2VhY2hfaW50ZWxfZW5jb2Rlcl9pc19wc3JfZW5hYmxlZChkZXYsIGludGVs X2VuY29kZXIsDQo+ID4gZW5jb2Rlcl9tYXNrKSBcDQo+IA0KPiBJJ20gbm90IGEgbmF0aXZlIHNw ZWFrZXIgYnV0ICJpcyIgc291bmRzIHdyb25nLCBtYXliZQ0KPiBmb3JfZWFjaF9pbnRlbF9lbmNv ZGVyX3dpdGhfcHNyX2VuYWJsZWQoKT8NCj4gDQo+IA0KT2theSwgSSdsbCB1cGRhdGUgaXQuDQpC dXQgdGhlIHByZXZpb3VzIHZlcnNpb24gaGFkIGEgcHJvYmxlbSB0aGF0IGRpZCBub3QgaGFuZGxl IG11dGV4X2xvY2sNCm9mIHBzci4NCkluIG9yZGVyIHRvIGhhbmRsZSBwc3IgbXV0ZXhfbG9jayBp biB0aGUgbG9vcCwgSSdsbCBjaGFuZ2UgaXQgdG8NCmZvcl9lYWNoX2ludGVsX2VuY29kZXJfbWFz a19jYW5fcHNyKCkuDQpJdCdsbCB1c2UgQ0FOX1BTUigpIG1hY3JvLg0KQW5kIEknbGwgYWRkIG5l dyBtYWNybyBmb3JfZWFjaF9pbnRlbF9lbmNvZGVyX2Nhbl9wc3IoKSB0aGF0IHRyYXZlcnNlcw0K YWxsIG9mIERQIGVuY29kZXIgd2l0aCBDQU5fUFNSKCkgdG9vLg0KPiA+ICvCoMKgwqDCoMKgwqDC oGxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZWxfZW5jb2RlcizCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoA0KPiA+IMKgwqDCoMKgwqBcDQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJihkZXYpLQ0K PiA+ID5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QswqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoA0K PiA+IGJhc2UuaGVhZCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZm9yX2VhY2hfaWYoKChlbmNvZGVyX21hc2spDQo+ID4gJsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9lbmNvZGVyX21h c2soJmludGVsX2VuY29kZXItDQo+ID4gPmJhc2UpKSAmJsKgXA0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgDQo+ID4gaW50ZWxfZW5jb2Rl cl9pc19wc3JfZW5hYmxlZChpbnRlbF9lbmNvZGVyKSkNCj4gDQo+IExvb2tzIGxpa2Ugc3R5bGUg aXMgd3JvbmcgaGVyZSBidXQgYm90IHdpbGwgdGVsbCB5b3UgaWYgaXQgaXMuDQo+IA0KPiA+ICsN Cj4gPiDCoCNkZWZpbmUgZm9yX2VhY2hfaW50ZWxfZHAoZGV2LCBpbnRlbF9lbmNvZGVyKcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgZm9y X2VhY2hfaW50ZWxfZW5jb2RlcihkZXYsIGludGVsX2VuY29kZXIpwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvcl9lYWNo X2lmKGludGVsX2VuY29kZXJfaXNfZHAoaW50ZWxfZW5jb2RlcikpDQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMNCj4g PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9kZWJ1Z2ZzLmMN Cj4gPiBpbmRleCBkNjJiMThkNWVjZDguLjk4NjgyNTNkZjYxZiAxMDA2NDQNCj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfZGVidWdmcy5jDQo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X2RlYnVnZnMu Yw0KPiA+IEBAIC0yNDksMTIgKzI0OSwxMSBAQCBzdGF0aWMgaW50IGk5MTVfcHNyX3Npbmtfc3Rh dHVzX3Nob3coc3RydWN0DQo+ID4gc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpDQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAic2luayBpbnRlcm5hbCBlcnJvciIsDQo+ID4gwqDC oMKgwqDCoMKgwqDCoH07DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IgPSBtLT5wcml2YXRlOw0KPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLQ0KPiA+ID5kZXYpOw0K PiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0NCj4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX2F0dGFjaGVkX2RwKHRvX2ludGVsX2Nv bm5lY3Rvcihjb25uZWN0b3IpKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgaW50IHJldDsNCj4gPiDC oA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghQ0FOX1BTUihkZXZfcHJpdikpIHsNCj4g PiArwqDCoMKgwqDCoMKgwqBpZiAoIUNBTl9QU1IoaW50ZWxfZHApKSB7DQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHV0cyhtLCAiUFNSIFVuc3VwcG9ydGVkXG4iKTsN Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREVWOw0KPiA+ IMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gQEAgLTI4MCwxMiArMjc5LDEzIEBAIHN0YXRpYyBpbnQg aTkxNV9wc3Jfc2lua19zdGF0dXNfc2hvdyhzdHJ1Y3QNCj4gPiBzZXFfZmlsZSAqbSwgdm9pZCAq ZGF0YSkNCj4gPiDCoERFRklORV9TSE9XX0FUVFJJQlVURShpOTE1X3Bzcl9zaW5rX3N0YXR1cyk7 DQo+ID4gwqANCj4gPiANCj4gPiDCoHN0YXRpYyB2b2lkDQo+ID4gLXBzcl9zb3VyY2Vfc3RhdHVz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0DQo+ID4gc2VxX2ZpbGUg Km0pDQo+ID4gK3Bzcl9zb3VyY2Vfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHN0 cnVjdCBzZXFfZmlsZSAqbSkNCj4gPiDCoHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgdTMyIHZhbCwg c3RhdHVzX3ZhbDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqc3RhdHVzID0gInVu a25vd24iOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKg wqDCoMKgaWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkKSB7DQo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxpdmVfc3RhdHVzW10g PSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IklETEUiLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCJDQVBUVVJFIiwNCj4gPiBAQCAtMzAwLDcgKzMwMCw3IEBAIHBzcl9zb3VyY2Vfc3RhdHVz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ID4gKmRldl9wcml2LCBzdHJ1Y3Qgc2VxX2ZpbGUg Km0pDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IlRHX09OIg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsNCj4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYs DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEVEUF9QU1IyX1NUQVRVUyhkZXZfcHJpdi0NCj4gPiA+cHNyLnRy YW5zY29kZXIpKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUjJfU1RBVFVTKGludGVsX2RwLQ0K PiA+ID5wc3IudHJhbnNjb2RlcikpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RhdHVzX3ZhbCA9ICh2YWwgJiBFRFBfUFNSMl9TVEFUVVNfU1RBVEVfTUFTSykgPj4NCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEVEUF9QU1IyX1NUQVRVU19TVEFURV9TSElGVDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChzdGF0dXNfdmFsIDwgQVJSQVlfU0laRShsaXZlX3N0YXR1cykpDQo+ ID4gQEAgLTMxNyw3ICszMTcsNyBAQCBwc3Jfc291cmNlX3N0YXR1cyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZQ0KPiA+ICpkZXZfcHJpdiwgc3RydWN0IHNlcV9maWxlICptKQ0KPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJTUkRFTlRfT04iLA0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEVEUF9QU1JfU1RBVFVTKGRldl9wcml2LQ0KPiA+ID5wc3IudHJhbnNjb2RlcikpOw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBFRFBfUFNSX1NUQVRVUyhpbnRlbF9kcC0NCj4gPiA+cHNyLnRyYW5z Y29kZXIpKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0YXR1c192YWwg PSAodmFsICYgRURQX1BTUl9TVEFUVVNfU1RBVEVfTUFTSykgPj4NCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVEUF9QU1JfU1RB VFVTX1NUQVRFX1NISUZUOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KHN0YXR1c192YWwgPCBBUlJBWV9TSVpFKGxpdmVfc3RhdHVzKSkNCj4gPiBAQCAtMzI3LDIxICsz MjcsMTggQEAgcHNyX3NvdXJjZV9zdGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gPiAq ZGV2X3ByaXYsIHN0cnVjdCBzZXFfZmlsZSAqbSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgc2VxX3By aW50ZihtLCAiU291cmNlIFBTUiBzdGF0dXM6ICVzIFsweCUwOHhdXG4iLCBzdGF0dXMsDQo+ID4g dmFsKTsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IC1zdGF0aWMgaW50IGk5MTVfZWRwX3Bz cl9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQ0KPiA+ICtzdGF0aWMgaW50 IGludGVsX3Bzcl9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaW50ZWxfZHANCj4g PiAqaW50ZWxfZHApDQo+ID4gwqB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZV90b19pOTE1KG0tDQo+ID4gPnByaXZhdGUpOw0KPiA+ IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X3BzciAqcHNyID0gJmRldl9wcml2LT5wc3I7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBf dG9faTkxNShpbnRlbF9kcCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX3BzciAq cHNyID0gJmludGVsX2RwLT5wc3I7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGludGVsX3dha2VyZWZf dCB3YWtlcmVmOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBjb25zdCBjaGFyICpzdGF0dXM7DQo+ID4g wqDCoMKgwqDCoMKgwqDCoGJvb2wgZW5hYmxlZDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgdTMyIHZh bDsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghSEFTX1BTUihkZXZfcHJp dikpDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREVWOw0K PiA+IC0NCj4gPiDCoMKgwqDCoMKgwqDCoMKgc2VxX3ByaW50ZihtLCAiU2luayBzdXBwb3J0OiAl cyIsIHllc25vKHBzci0NCj4gPiA+c2lua19zdXBwb3J0KSk7DQo+ID4gLcKgwqDCoMKgwqDCoMKg aWYgKHBzci0+ZHApDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNlcV9wcmlu dGYobSwgIiBbMHglMDJ4XSIsIHBzci0+ZHAtPnBzcl9kcGNkWzBdKTsNCj4gPiArwqDCoMKgwqDC oMKgwqBpZiAocHNyLT5zaW5rX3N1cHBvcnQpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNlcV9wcmludGYobSwgIiBbMHglMDJ4XSIsIGludGVsX2RwLT5wc3JfZHBjZFswXSk7 DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHNlcV9wdXRzKG0sICJcbiIpOw0KPiA+IMKgDQo+ID4gDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoGlmICghcHNyLT5zaW5rX3N1cHBvcnQpDQo+ID4gQEAgLTM2NSwx NiArMzYyLDE2IEBAIHN0YXRpYyBpbnQgaTkxNV9lZHBfcHNyX3N0YXR1cyhzdHJ1Y3QNCj4gPiBz ZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKg wqBpZiAocHNyLT5wc3IyX2VuYWJsZWQpIHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVE UF9QU1IyX0NUTChkZXZfcHJpdi0NCj4gPiA+cHNyLnRyYW5zY29kZXIpKTsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRURQX1BTUjJfQ1RMKGludGVsX2RwLQ0KPiA+ID5wc3IudHJhbnNjb2RlcikpOw0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5hYmxlZCA9IHZhbCAmIEVEUF9QU1Iy X0VOQUJMRTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEVEUF9QU1JfQ1RMKGRldl9wcml2LQ0KPiA+ID5wc3IudHJhbnNjb2RlcikpOw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBFRFBfUFNSX0NUTChpbnRlbF9kcC0NCj4gPiA+cHNyLnRyYW5zY29k ZXIpKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVuYWJsZWQgPSB2YWwg JiBFRFBfUFNSX0VOQUJMRTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IMKgwqDCoMKgwqDC oMKgwqBzZXFfcHJpbnRmKG0sICJTb3VyY2UgUFNSIGN0bDogJXMgWzB4JTA4eF1cbiIsDQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuYWJsZWRkaXNhYmxlZChlbmFi bGVkKSwgdmFsKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqBwc3Jfc291cmNlX3N0YXR1cyhkZXZfcHJp diwgbSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgcHNyX3NvdXJjZV9zdGF0dXMoaW50ZWxfZHAsIG0p Ow0KPiA+IMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKG0sICJCdXN5IGZyb250YnVmZmVyIGJp dHM6IDB4JTA4eFxuIiwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cHNyLT5idXN5X2Zyb250YnVmZmVyX2JpdHMpOw0KPiA+IMKgDQo+ID4gDQo+ID4gQEAgLTM4Myw3 ICszODAsNyBAQCBzdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9zdGF0dXMoc3RydWN0IHNlcV9maWxl DQo+ID4gKm0sIHZvaWQgKmRhdGEpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoCAqLw0KPiA+IMKgwqDC oMKgwqDCoMKgwqBpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9w cml2KSkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0gaW50ZWxf ZGVfcmVhZChkZXZfcHJpdiwNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUl9QRVJGX0NOVChkZXZf cHJpdi0NCj4gPiA+cHNyLnRyYW5zY29kZXIpKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUl9Q RVJGX0NOVChpbnRlbF9kcC0NCj4gPiA+cHNyLnRyYW5zY29kZXIpKTsNCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCAmPSBFRFBfUFNSX1BFUkZfQ05UX01BU0s7DQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHJpbnRmKG0sICJQZXJmb3JtYW5j ZSBjb3VudGVyOiAldVxuIiwgdmFsKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IEBAIC00 MDQsNyArNDAxLDcgQEAgc3RhdGljIGludCBpOTE1X2VkcF9wc3Jfc3RhdHVzKHN0cnVjdCBzZXFf ZmlsZQ0KPiA+ICptLCB2b2lkICpkYXRhKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgKGZyYW1l ID0gMDsgZnJhbWUgPCBQU1IyX1NVX1NUQVRVU19GUkFNRVM7DQo+ID4gZnJhbWUgKz0gMykgew0K PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9 IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oA0KPiA+IFBTUjJfU1VfU1RBVFVTKGRldl9wcml2LT5wc3IudHJhbnNjb2RlciwgZnJhbWUpKTsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgDQo+ID4gUFNSMl9TVV9TVEFUVVMoaW50 ZWxfZHAtPnBzci50cmFuc2NvZGVyLCBmcmFtZSkpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN1X2ZyYW1lc192YWxbZnJhbWUgLyAzXSA9IHZh bDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiDCoA0KPiA+IA0K PiA+IEBAIC00MzAsMjMgKzQyNyw1NyBAQCBzdGF0aWMgaW50IGk5MTVfZWRwX3Bzcl9zdGF0dXMo c3RydWN0DQo+ID4gc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpDQo+ID4gwqDCoMKgwqDCoMKgwqDC oHJldHVybiAwOw0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gK3N0YXRpYyBpbnQgaTkxNV9l ZHBfcHNyX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBub2Rl X3RvX2k5MTUobS0NCj4gPiA+cHJpdmF0ZSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGlu dGVsX2VuY29kZXIgKmVuY29kZXI7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCA9IE5VTEw7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghSEFTX1BT UihkZXZfcHJpdikpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RU5PREVWOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqAvKiBGaW5kIHRoZSBmaXJzdCBFRFAg Ki8NCj4gPiArwqDCoMKgwqDCoMKgwqBmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwg ZW5jb2Rlcikgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZW5jb2Rl ci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNv ZGVyKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDC oMKgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWludGVsX2RwKQ0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGludGVsX3Bzcl9zdGF0dXMobSwgaW50ZWxfZHApOw0K PiA+ICt9DQo+ID4gKw0KPiA+IMKgc3RhdGljIGludA0KPiA+IMKgaTkxNV9lZHBfcHNyX2RlYnVn X3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQ0KPiA+IMKgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkYXRhOw0KPiA+IMKgwqDCoMKgwqDC oMKgwqBpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsNCj4gPiAtwqDCoMKgwqDCoMKgwqBpbnQgcmV0 Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQgPSAtRU5PREVWOw0KPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKg wqDCoMKgwqDCoMKgaWYgKCFDQU5fUFNSKGRldl9wcml2KSkNCj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9ERVY7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFI QVNfUFNSKGRldl9wcml2KSkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIHJldDsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGRybV9kYmdfa21zKCZk ZXZfcHJpdi0+ZHJtLCAiU2V0dGluZyBQU1IgZGVidWcgdG8gJWxseFxuIiwNCj4gPiB2YWwpOw0K PiA+ICvCoMKgwqDCoMKgwqDCoGZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNv ZGVyKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAgPQ0KPiA+IGVuY190b19pbnRlbF9kcChlbmNvZGVyKTsNCj4gPiDCoA0KPiA+ IA0KPiA+IC3CoMKgwqDCoMKgwqDCoHdha2VyZWYgPSBpbnRlbF9ydW50aW1lX3BtX2dldCgmZGV2 X3ByaXYtPnJ1bnRpbWVfcG0pOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp ZiAoIUNBTl9QU1IoaW50ZWxfZHApKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDC oMKgwqByZXQgPSBpbnRlbF9wc3JfZGVidWdfc2V0KGRldl9wcml2LCB2YWwpOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQ VVRfRURQKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlNldHRpbmcgUFNSDQo+ID4gZGVidWcg dG8gJWxseFxuIiwgdmFsKTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGludGVs X3J1bnRpbWVfcG1fcHV0KCZkZXZfcHJpdi0+cnVudGltZV9wbSwgd2FrZXJlZik7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3YWtlcmVmID0gaW50 ZWxfcnVudGltZV9wbV9nZXQoJmRldl9wcml2LQ0KPiA+ID5ydW50aW1lX3BtKTsNCj4gPiArDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvLyBUT0RP OiBzcGxpdCB0byBlYWNoIHRyYW5zY29kZXIncyBQU1INCj4gPiBkZWJ1ZyBzdGF0ZQ0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gaW50ZWxf cHNyX2RlYnVnX3NldChpbnRlbF9kcCwgdmFsKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2 X3ByaXYtPnJ1bnRpbWVfcG0sDQo+ID4gd2FrZXJlZik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gwqANCj4gPiANCj4gPiDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiDCoH0NCj4gPiBAQCAtNDU1LDEyICs0ODYs MjUgQEAgc3RhdGljIGludA0KPiA+IMKgaTkxNV9lZHBfcHNyX2RlYnVnX2dldCh2b2lkICpkYXRh LCB1NjQgKnZhbCkNCj4gPiDCoHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGF0YTsNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqZW5jb2RlcjsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGlm ICghQ0FOX1BTUihkZXZfcHJpdikpDQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFIQVNfUFNSKGRl dl9wcml2KSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5P REVWOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgKnZhbCA9IFJFQURfT05DRShk ZXZfcHJpdi0+cHNyLmRlYnVnKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gPiAr wqDCoMKgwqDCoMKgwqBmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRybSwgZW5jb2Rlcikg ew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwID0NCj4gPiBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7DQo+ID4gKw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIUNBTl9QU1IoaW50ZWxfZHApKQ0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7DQo+ ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvLyBUT0RPOiBzcGxpdCB0 byBlYWNoIHRyYW5zY29kZXIncyBQU1IgZGVidWcgc3RhdGUNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKGVuY29kZXItPnR5cGUgPT0gSU5URUxfT1VUUFVUX0VEUCkgew0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnZhbCA9 IFJFQURfT05DRShpbnRlbF9kcC0+cHNyLmRlYnVnKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVOT0RFVjsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IMKg REVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoaTkxNV9lZHBfcHNyX2RlYnVnX2ZvcHMsDQo+ID4gQEAg LTEyMzMsOSArMTI3Nyw2IEBAIHN0YXRpYyB2b2lkIGRycnNfc3RhdHVzX3Blcl9jcnRjKHN0cnVj dA0KPiA+IHNlcV9maWxlICptLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg LyogZGlzYWJsZV9kcnJzKCkgd2lsbCBtYWtlIGRycnMtPmRwIE5VTEwgKi8NCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghZHJycy0+ZHApIHsNCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzZXFfcHV0cyhtLCAiSWRsZW5l c3MgRFJSUzogRGlzYWJsZWRcbiIpOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKGRldl9wcml2LT5wc3IuZW5hYmxlZCkNCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBz ZXFfcHV0cyhtLA0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJcdEFzIFBTUiBpcyBlbmFibGVkLCBEUlJTIGlzIG5vdA0K PiA+IGVuYWJsZWRcbiIpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmZHJycy0+bXV0ZXgpOw0KPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgNCj4gPiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV90eXBlcy5oDQo+ID4gaW5kZXggMzkzOTc3 NDhiNGIwLi42M2RhZjhiNDU5NDEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3R5cGVzLmgNCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXlfdHlwZXMuaA0KPiA+IEBAIC0xNDE1LDYgKzE0 MTUsNDIgQEAgc3RydWN0IGludGVsX3BwcyB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBl ZHBfcG93ZXJfc2VxIHBwc19kZWxheXM7DQo+ID4gwqB9Ow0KPiA+IMKgDQo+ID4gDQo+ID4gK3N0 cnVjdCBpbnRlbF9wc3Igew0KPiA+ICvCoMKgwqDCoMKgwqDCoC8qIE11dGV4IGZvciBQU1Igc3Rh dGUgb2YgdGhlIHRyYW5zY29kZXIgKi8NCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbXV0ZXgg bG9jazsNCj4gPiArDQo+ID4gKyNkZWZpbmUgSTkxNV9QU1JfREVCVUdfTU9ERV9NQVNLwqDCoMKg wqDCoMKgwqAweDBmDQo+ID4gKyNkZWZpbmUgSTkxNV9QU1JfREVCVUdfREVGQVVMVMKgwqDCoMKg wqDCoMKgwqDCoDB4MDANCj4gPiArI2RlZmluZSBJOTE1X1BTUl9ERUJVR19ESVNBQkxFwqDCoMKg wqDCoMKgwqDCoMKgMHgwMQ0KPiA+ICsjZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0VOQUJMRcKgwqDC oMKgwqDCoMKgwqDCoMKgMHgwMg0KPiA+ICsjZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0ZPUkNFX1BT UjHCoMKgwqDCoMKgwqAweDAzDQo+ID4gKyNkZWZpbmUgSTkxNV9QU1JfREVCVUdfSVJRwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDEwDQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBk ZWJ1ZzsNCj4gPiArwqDCoMKgwqDCoMKgwqBib29sIHNpbmtfc3VwcG9ydDsNCj4gPiArwqDCoMKg wqDCoMKgwqBib29sIGVuYWJsZWQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgZW51bSBwaXBlIHBpcGU7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgZW51bSB0cmFuc2NvZGVyIHRyYW5zY29kZXI7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgYm9vbCBhY3RpdmU7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHdvcmtf c3RydWN0IHdvcms7DQo+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGJ1c3lfZnJvbnRi dWZmZXJfYml0czsNCj4gPiArwqDCoMKgwqDCoMKgwqBib29sIHNpbmtfcHNyMl9zdXBwb3J0Ow0K PiA+ICvCoMKgwqDCoMKgwqDCoGJvb2wgbGlua19zdGFuZGJ5Ow0KPiA+ICvCoMKgwqDCoMKgwqDC oGJvb2wgY29sb3JpbWV0cnlfc3VwcG9ydDsNCj4gPiArwqDCoMKgwqDCoMKgwqBib29sIHBzcjJf ZW5hYmxlZDsNCj4gPiArwqDCoMKgwqDCoMKgwqBib29sIHBzcjJfc2VsX2ZldGNoX2VuYWJsZWQ7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgdTggc2lua19zeW5jX2xhdGVuY3k7DQo+ID4gK8KgwqDCoMKg wqDCoMKga3RpbWVfdCBsYXN0X2VudHJ5X2F0dGVtcHQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKga3Rp bWVfdCBsYXN0X2V4aXQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgYm9vbCBzaW5rX25vdF9yZWxpYWJs ZTsNCj4gPiArwqDCoMKgwqDCoMKgwqBib29sIGlycV9hdXhfZXJyb3I7DQo+ID4gK8KgwqDCoMKg wqDCoMKgdTE2IHN1X3hfZ3JhbnVsYXJpdHk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgYm9vbCBkYzNj b19lbmFibGVkOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBkYzNjb19leGl0X2RlbGF5Ow0KPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZWxheWVkX3dvcmsgZGMzY29fd29yazsNCj4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2RwX3ZzY19zZHAgdnNjOw0KPiA+ICt9Ow0KPiA+ICsNCj4g PiDCoHN0cnVjdCBpbnRlbF9kcCB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGk5MTVfcmVnX3Qgb3V0 cHV0X3JlZzsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgdTMyIERQOw0KPiA+IEBAIC0xNTE3LDYgKzE1 NTMsOCBAQCBzdHJ1Y3QgaW50ZWxfZHAgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqBib29sIGhvYmxf YWN0aXZlOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9k cF9wY29uX2ZybCBmcmw7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9w c3IgcHNyOw0KPiA+IMKgfTsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgZW51bSBsc3Bjb25fdmVuZG9y IHsNCj4gPiBAQCAtMTcyOSw2ICsxNzY3LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbA0KPiA+IGlu dGVsX2VuY29kZXJfaXNfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpDQo+ID4gwqDC oMKgwqDCoMKgwqDCoH0NCj4gPiDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+ICtzdGF0aWMgaW5saW5l IGJvb2wgaW50ZWxfZW5jb2Rlcl9pc19wc3JfZW5hYmxlZChzdHJ1Y3QNCj4gPiBpbnRlbF9lbmNv ZGVyICplbmNvZGVyKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFpbnRlbF9lbmNv ZGVyX2lzX2RwKGVuY29kZXIpKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gZmFsc2U7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBlbmNfdG9faW50 ZWxfZHAoZW5jb2RlciktPnBzci5lbmFibGVkOw0KPiA+ICt9DQo+ID4gKw0KPiA+IMKgc3RhdGlj IGlubGluZSBzdHJ1Y3QgaW50ZWxfbHNwY29uICoNCj4gPiDCoGVuY190b19pbnRlbF9sc3Bjb24o c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpDQo+ID4gwqB7DQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYw0KPiA+IGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jDQo+ID4gaW5kZXggOGMxMmQ1Mzc1NjA3Li5k NTMyYmQ1NjI1MGYgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxh eS9pbnRlbF9kcC5jDQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9kcC5jDQo+ID4gQEAgLTE2NjMsMTIgKzE2NjMsMTAgQEAgdm9pZCBpbnRlbF9kcF9jb21wdXRl X3Bzcl92c2Nfc2RwKHN0cnVjdA0KPiA+IGludGVsX2RwICppbnRlbF9kcCwNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUNCj4gPiAqY29ubl9zdGF0ZSwNCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGRybV9kcF92c2Nfc2RwICp2c2MpDQo+ID4gwqB7DQo+ID4gLcKg wqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkx NShpbnRlbF9kcCk7DQo+ID4gLQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqB2c2MtPnNkcF90eXBlID0g RFBfU0RQX1ZTQzsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChkZXZfcHJp di0+cHNyLnBzcjJfZW5hYmxlZCkgew0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoZGV2X3ByaXYtPnBzci5jb2xvcmltZXRyeV9zdXBwb3J0ICYmDQo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKGludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpbnRlbF9kcC0+cHNyLmNvbG9yaW1ldHJ5X3N1cHBvcnQg JiYNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9kcF9u ZWVkc192c2Nfc2RwKGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpKQ0KPiA+IHsNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBbUFNSMiwgK0NvbG9y aW1ldHJ5XSAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGludGVsX2RwX2NvbXB1dGVfdnNjX2NvbG9yaW1ldHJ5KGNydGNfc3RhdGUNCj4gPiAs IGNvbm5fc3RhdGUsDQo+ID4gQEAgLTIzNTksNyArMjM1Nyw3IEBAIGJvb2wgaW50ZWxfZHBfaW5p dGlhbF9mYXN0c2V0X2NoZWNrKHN0cnVjdA0KPiA+IGludGVsX2VuY29kZXIgKmVuY29kZXIsDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7DQo+ID4gwqDC oMKgwqDCoMKgwqDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChDQU5f UFNSKGk5MTUpICYmIGludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpIHsNCj4gPiArwqDCoMKgwqDC oMKgwqBpZiAoQ0FOX1BTUihpbnRlbF9kcCkgJiYgaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkg ew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2RiZ19rbXMoJmk5MTUt PmRybSwgIkZvcmNpbmcgZnVsbCBtb2Rlc2V0IHRvDQo+ID4gY29tcHV0ZSBQU1Igc3RhdGVcbiIp Ow0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3J0Y19zdGF0ZS0+dWFwaS5t b2RlX2NoYW5nZWQgPSB0cnVlOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIGZhbHNlOw0KPiA+IEBAIC02NjQxLDYgKzY2MzksOCBAQCBpbnRlbF9kcF9pbml0X2Nv bm5lY3RvcihzdHJ1Y3QNCj4gPiBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0LA0KPiA+IMKg wqDCoMKgwqDCoMKgwqBpbnRlbF9kcC0+ZnJsLmlzX3RyYWluZWQgPSBmYWxzZTsNCj4gPiDCoMKg wqDCoMKgwqDCoMKgaW50ZWxfZHAtPmZybC50cmFpbmVkX3JhdGVfZ2JwcyA9IDA7DQo+ID4gwqAN Cj4gPiANCj4gPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9wc3JfaW5pdChpbnRlbF9kcCk7DQo+ID4g Kw0KPiA+IMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsNCj4gPiDCoA0KPiA+IA0KPiA+IMKg ZmFpbDoNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRl bF9wc3IuYw0KPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuYw0K PiA+IGluZGV4IDJjMzY1Yjc3OGY3NC4uOTI1YzBjNmQ5MmNkIDEwMDY0NA0KPiA+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmMNCj4gPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5jDQo+ID4gQEAgLTgwLDkgKzgwLDExIEBA DQo+ID4gwqAgKiB1c2UgcGFnZSBmbGlwcy4NCj4gPiDCoCAqLw0KPiA+IMKgDQo+ID4gDQo+ID4g LXN0YXRpYyBib29sIHBzcl9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq aTkxNSkNCj4gPiArc3RhdGljIGJvb2wgcHNyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApDQo+ID4gwqB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgc3dpdGNoIChpOTE1LT5w c3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0spIHsNCj4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0K PiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGludGVsX2RwLT5wc3IuZGVidWcgJiBJ OTE1X1BTUl9ERUJVR19NT0RFX01BU0spIHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgY2FzZSBJOTE1 X1BTUl9ERUJVR19ERUZBVUxUOg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIGk5MTUtPnBhcmFtcy5lbmFibGVfcHNyOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBjYXNl IEk5MTVfUFNSX0RFQlVHX0RJU0FCTEU6DQo+ID4gQEAgLTkyLDkgKzk0LDkgQEAgc3RhdGljIGJv b2wgcHNyX2dsb2JhbF9lbmFibGVkKHN0cnVjdA0KPiA+IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUp DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IC1zdGF0 aWMgYm9vbCBwc3IyX2dsb2JhbF9lbmFibGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikNCj4gPiArc3RhdGljIGJvb2wgcHNyMl9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKQ0KPiA+IMKgew0KPiA+IC3CoMKgwqDCoMKgwqDCoHN3aXRjaCAoZGV2X3By aXYtPnBzci5kZWJ1ZyAmIEk5MTVfUFNSX0RFQlVHX01PREVfTUFTSykgew0KPiA+ICvCoMKgwqDC oMKgwqDCoHN3aXRjaCAoaW50ZWxfZHAtPnBzci5kZWJ1ZyAmIEk5MTVfUFNSX0RFQlVHX01PREVf TUFTSykgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqBjYXNlIEk5MTVfUFNSX0RFQlVHX0RJU0FCTEU6 DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGNhc2UgSTkxNV9QU1JfREVCVUdfRk9SQ0VfUFNSMToNCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsNCj4gPiBAQCAt MTAzLDExICsxMDUsMTIgQEAgc3RhdGljIGJvb2wgcHNyMl9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QN Cj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfQ0K PiA+IMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gLXN0YXRpYyB2b2lkIHBzcl9pcnFfY29udHJvbChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ID4gK3N0YXRpYyB2b2lkIHBzcl9p cnFfY29udHJvbChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiA+IMKgew0KPiA+IMKgwqDC oMKgwqDCoMKgwqBlbnVtIHRyYW5zY29kZXIgdHJhbnNfc2hpZnQ7DQo+ID4gwqDCoMKgwqDCoMKg wqDCoHUzMiBtYXNrLCB2YWw7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGk5MTVfcmVnX3QgaW1yX3Jl ZzsNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKg wqAvKg0KPiA+IMKgwqDCoMKgwqDCoMKgwqAgKiBnZW4xMisgaGFzIHJlZ2lzdGVycyByZWxhdGl2 ZSB0byB0cmFuc2NvZGVyIGFuZCBvbmUgcGVyDQo+ID4gdHJhbnNjb2Rlcg0KPiA+IEBAIC0xMTYs MTQgKzExOSwxNCBAQCBzdGF0aWMgdm9pZCBwc3JfaXJxX2NvbnRyb2woc3RydWN0DQo+ID4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoCAqLw0KPiA+IMKg wqDCoMKgwqDCoMKgwqBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikgew0KPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHJhbnNfc2hpZnQgPSAwOw0KPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbXJfcmVnID0gVFJBTlNfUFNSX0lNUihkZXZfcHJpdi0+ cHNyLnRyYW5zY29kZXIpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbXJf cmVnID0gVFJBTlNfUFNSX0lNUihpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXIpOw0KPiA+IMKgwqDC oMKgwqDCoMKgwqB9IGVsc2Ugew0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0 cmFuc19zaGlmdCA9IGRldl9wcml2LT5wc3IudHJhbnNjb2RlcjsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgdHJhbnNfc2hpZnQgPSBpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXI7 DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbXJfcmVnID0gRURQX1BTUl9J TVI7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDC oMKgwqBtYXNrID0gRURQX1BTUl9FUlJPUih0cmFuc19zaGlmdCk7DQo+ID4gLcKgwqDCoMKgwqDC oMKgaWYgKGRldl9wcml2LT5wc3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19JUlEpDQo+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKGludGVsX2RwLT5wc3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19JUlEp DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrIHw9IEVEUF9QU1JfUE9T VF9FWElUKHRyYW5zX3NoaWZ0KSB8DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgRURQX1BTUl9QUkVfRU5UUlkodHJhbnNfc2hpZnQpOw0KPiA+IMKg DQo+ID4gDQo+ID4gQEAgLTE3MiwzMCArMTc1LDMxIEBAIHN0YXRpYyB2b2lkIHBzcl9ldmVudF9w cmludChzdHJ1Y3QNCj4gPiBkcm1faTkxNV9wcml2YXRlICppOTE1LA0KPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2RiZ19rbXMoJmk5MTUtPmRybSwgIlx0UFNSIGRpc2Fi bGVkXG4iKTsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IC12b2lkIGludGVsX3Bzcl9pcnFf aGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMg0KPiA+IHBzcl9p aXIpDQo+ID4gK3ZvaWQgaW50ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAsIHUzMiBwc3JfaWlyKQ0KPiA+IMKgew0KPiA+IC3CoMKgwqDCoMKgwqDCoGVudW0gdHJh bnNjb2RlciBjcHVfdHJhbnNjb2RlciA9IGRldl9wcml2LT5wc3IudHJhbnNjb2RlcjsNCj4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19p OTE1KGludGVsX2RwKTsNCj4gPiArwqDCoMKgwqDCoMKgwqBlbnVtIHRyYW5zY29kZXIgY3B1X3Ry YW5zY29kZXIgPSBpbnRlbF9kcC0+cHNyLnRyYW5zY29kZXI7DQo+ID4gwqDCoMKgwqDCoMKgwqDC oGVudW0gdHJhbnNjb2RlciB0cmFuc19zaGlmdDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgaTkxNV9y ZWdfdCBpbXJfcmVnOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBrdGltZV90IHRpbWVfbnMgPcKgIGt0 aW1lX2dldCgpOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDEyKSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB0cmFuc19zaGlmdCA9IDA7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlt cl9yZWcgPSBUUkFOU19QU1JfSU1SKGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcik7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGltcl9yZWcgPSBUUkFOU19QU1JfSU1SKGludGVs X2RwLT5wc3IudHJhbnNjb2Rlcik7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7DQo+ID4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyYW5zX3NoaWZ0ID0gZGV2X3ByaXYtPnBz ci50cmFuc2NvZGVyOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0cmFuc19z aGlmdCA9IGludGVsX2RwLT5wc3IudHJhbnNjb2RlcjsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGltcl9yZWcgPSBFRFBfUFNSX0lNUjsNCj4gPiDCoMKgwqDCoMKgwqDCoMKg fQ0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChwc3JfaWlyICYgRURQX1BT Ul9QUkVfRU5UUlkodHJhbnNfc2hpZnQpKSB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRldl9wcml2LT5wc3IubGFzdF9lbnRyeV9hdHRlbXB0ID0gdGltZV9uczsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZHAtPnBzci5sYXN0X2VudHJ5X2F0 dGVtcHQgPSB0aW1lX25zOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJt X2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJbdHJhbnNjb2RlciAlc10gUFNSIGVudHJ5IGF0 dGVtcHQgaW4gMg0KPiA+IHZibGFua3NcbiIsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRyYW5zY29kZXJfbmFtZShjcHVfdHJhbnNj b2RlcikpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDC oMKgwqDCoMKgaWYgKHBzcl9paXIgJiBFRFBfUFNSX1BPU1RfRVhJVCh0cmFuc19zaGlmdCkpIHsN Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3ByaXYtPnBzci5sYXN0X2V4 aXQgPSB0aW1lX25zOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9k cC0+cHNyLmxhc3RfZXhpdCA9IHRpbWVfbnM7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwNCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlt0cmFuc2NvZGVyICVzXSBQ U1IgZXhpdCBjb21wbGV0ZWRcbiIsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRyYW5zY29kZXJfbmFtZShjcHVfdHJhbnNjb2Rlcikp Ow0KPiA+IEBAIC0yMDMsNyArMjA3LDcgQEAgdm9pZCBpbnRlbF9wc3JfaXJxX2hhbmRsZXIoc3Ry dWN0DQo+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBwc3JfaWlyKQ0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0g OSkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHUzMiB2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoFBTUl9FVkVOVChjcHVfdHJhbnMNCj4gPiBjb2RlcikpOw0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCBw c3IyX2VuYWJsZWQgPSBkZXZfcHJpdi0NCj4gPiA+cHNyLnBzcjJfZW5hYmxlZDsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJvb2wgcHNyMl9lbmFi bGVkID0gaW50ZWxfZHAtDQo+ID4gPnBzci5wc3IyX2VuYWJsZWQ7DQo+ID4gwqANCj4gPiANCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9k ZV93cml0ZShkZXZfcHJpdiwNCj4gPiBQU1JfRVZFTlQoY3B1X3RyYW5zY29kZXIpLA0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdmFsKTsNCj4gPiBAQCAtMjE3LDcgKzIyMSw3IEBAIHZvaWQgaW50 ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdA0KPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LCB1MzIgcHNyX2lpcikNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV93 YXJuKCZkZXZfcHJpdi0+ZHJtLCAiW3RyYW5zY29kZXIgJXNdIFBTUiBhdXgNCj4gPiBlcnJvclxu IiwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dHJhbnNjb2Rlcl9uYW1lKGNwdV90cmFuc2NvZGVyKSk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3ByaXYtPnBzci5pcnFfYXV4X2Vycm9yID0g dHJ1ZTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZHAtPnBzci5p cnFfYXV4X2Vycm9yID0gdHJ1ZTsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLyoNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq IElmIHRoaXMgaW50ZXJydXB0aW9uIGlzIG5vdCBtYXNrZWQgaXQgd2lsbCBrZWVwDQo+ID4gQEAg LTIzMSw3ICsyMzUsNyBAQCB2b2lkIGludGVsX3Bzcl9pcnFfaGFuZGxlcihzdHJ1Y3QNCj4gPiBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBzcl9paXIpDQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgfD0gRURQX1BTUl9FUlJPUih0cmFuc19zaGlmdCk7DQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgaW1yX3JlZywgdmFsKTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzY2hlZHVsZV93b3JrKCZkZXZfcHJpdi0+cHNyLndvcmspOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzY2hlZHVsZV93b3JrKCZpbnRlbF9kcC0+cHNyLndv cmspOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gwqB9DQo+ID4gwqANCj4gPiANCj4gPiBA QCAtMjkyLDEyICsyOTYsNiBAQCB2b2lkIGludGVsX3Bzcl9pbml0X2RwY2Qoc3RydWN0IGludGVs X2RwDQo+ID4gKmludGVsX2RwKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg dG9faTkxNShkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZS5kZXYpOw0KPiA+IMKg DQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKGRldl9wcml2LT5wc3IuZHApIHsNCj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX3dhcm4oJmRldl9wcml2LT5kcm0sDQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIk1vcmUg dGhhbiBvbmUgZURQIHBhbmVsIGZvdW5kLCBQU1INCj4gPiBzdXBwb3J0IHNob3VsZCBiZSBleHRl bmRlZFxuIik7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4g PiAtwqDCoMKgwqDCoMKgwqB9DQo+ID4gLQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqBkcm1fZHBfZHBj ZF9yZWFkKCZpbnRlbF9kcC0+YXV4LCBEUF9QU1JfU1VQUE9SVCwgaW50ZWxfZHAtDQo+ID4gPnBz cl9kcGNkLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzaXplb2YoaW50ZWxfZHAtPnBzcl9kcGNkKSk7DQo+ID4gwqANCj4gPiANCj4gPiBAQCAt MzE4LDEyICszMTYsMTAgQEAgdm9pZCBpbnRlbF9wc3JfaW5pdF9kcGNkKHN0cnVjdCBpbnRlbF9k cA0KPiA+ICppbnRlbF9kcCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybjsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKg wqDCoMKgZGV2X3ByaXYtPnBzci5zaW5rX3N1cHBvcnQgPSB0cnVlOw0KPiA+IC3CoMKgwqDCoMKg wqDCoGRldl9wcml2LT5wc3Iuc2lua19zeW5jX2xhdGVuY3kgPQ0KPiA+ICvCoMKgwqDCoMKgwqDC oGludGVsX2RwLT5wc3Iuc2lua19zdXBwb3J0ID0gdHJ1ZTsNCj4gPiArwqDCoMKgwqDCoMKgwqBp bnRlbF9kcC0+cHNyLnNpbmtfc3luY19sYXRlbmN5ID0NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGludGVsX2RwX2dldF9zaW5rX3N5bmNfbGF0ZW5jeShpbnRlbF9kcCk7DQo+ ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBkZXZfcHJpdi0+cHNyLmRwID0gaW50ZWxf ZHA7DQo+ID4gLQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+ PSA5ICYmDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoaW50ZWxfZHAtPnBzcl9kcGNkWzBd ID09DQo+ID4gRFBfUFNSMl9XSVRIX1lfQ09PUkRfSVNfU1VQUE9SVEVEKSkgew0KPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCB5X3JlcSA9IGludGVsX2RwLT5wc3JfZHBj ZFsxXSAmDQo+ID4gQEAgLTM0MSwxNCArMzM3LDE0IEBAIHZvaWQgaW50ZWxfcHNyX2luaXRfZHBj ZChzdHJ1Y3QgaW50ZWxfZHANCj4gPiAqaW50ZWxfZHApDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBZLWNvb3JkaW5hdGUgcmVxdWlyZW1lbnQgcGFuZWxzIHdlIHdvdWxk IG5lZWQgdG8NCj4gPiBlbmFibGUNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqIEdUQyBmaXJzdC4NCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLw0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfcHJpdi0+cHNyLnNpbmtfcHNy Ml9zdXBwb3J0ID0geV9yZXEgJiYgYWxwbTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaW50ZWxfZHAtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCA9IHlfcmVxICYmIGFscG07DQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmZGV2X3ByaXYt PmRybSwgIlBTUjIgJXNzdXBwb3J0ZWRcbiIsDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X3ByaXYtPnBzci5zaW5rX3BzcjJfc3Vw cG9ydCA/ICIiIDoNCj4gPiAibm90ICIpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludGVsX2RwLT5wc3Iuc2lua19wc3IyX3N1cHBv cnQgPyAiIiA6DQo+ID4gIm5vdCAiKTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAoZGV2X3ByaXYtPnBzci5zaW5rX3BzcjJfc3VwcG9ydCkgew0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3By aXYtPnBzci5jb2xvcmltZXRyeV9zdXBwb3J0ID0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKGludGVsX2RwLT5wc3Iuc2lua19wc3IyX3N1cHBvcnQpIHsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX2RwLT5wc3Iu Y29sb3JpbWV0cnlfc3VwcG9ydCA9DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX2RwX2dldF9jb2xvcmltZXRy eV9zdGF0dXMoaW50DQo+ID4gZWxfZHApOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3ByaXYtPnBzci5zdV94X2dyYW51bGFyaXR5ID0NCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX2Rw LT5wc3Iuc3VfeF9ncmFudWxhcml0eSA9DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX2RwX2dldF9zdV94X2dy YW51bGFydGl5KGludGVsDQo+ID4gX2RwKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoH0NCj4gPiDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IEBAIC0zNzQsNyArMzcwLDcgQEAg c3RhdGljIHZvaWQgaHN3X3Bzcl9zZXR1cF9hdXgoc3RydWN0IGludGVsX2RwDQo+ID4gKmludGVs X2RwKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqBCVUlMRF9CVUdfT04oc2l6ZW9mKGF1eF9tc2cpID4g MjApOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGF1eF9tc2cp OyBpICs9IDQpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9kZV93 cml0ZShkZXZfcHJpdiwNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFRFBfUFNSX0FVWF9EQVRBKGRldl9wcml2LQ0KPiA+ID5w c3IudHJhbnNjb2RlciwgaSA+PiAyKSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBFRFBfUFNSX0FVWF9EQVRBKGludGVsX2Rw LQ0KPiA+ID5wc3IudHJhbnNjb2RlciwgaSA+PiAyKSwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfZHBfcGFja19h dXgoJmF1eF9tc2dbaV0sDQo+ID4gc2l6ZW9mKGF1eF9tc2cpIC0gaSkpOw0KPiA+IMKgDQo+ID4g DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGF1eF9jbG9ja19kaXZpZGVyID0gaW50ZWxfZHAtDQo+ID4g PmdldF9hdXhfY2xvY2tfZGl2aWRlcihpbnRlbF9kcCwgMCk7DQo+ID4gQEAgLTM4NSw3ICszODEs NyBAQCBzdGF0aWMgdm9pZCBoc3dfcHNyX3NldHVwX2F1eChzdHJ1Y3QgaW50ZWxfZHANCj4gPiAq aW50ZWxfZHApDQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgLyogU2VsZWN0IG9u bHkgdmFsaWQgYml0cyBmb3IgU1JEX0FVWF9DVEwgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgYXV4 X2N0bCAmPSBwc3JfYXV4X21hc2s7DQo+ID4gLcKgwqDCoMKgwqDCoMKgaW50ZWxfZGVfd3JpdGUo ZGV2X3ByaXYsIEVEUF9QU1JfQVVYX0NUTChkZXZfcHJpdi0NCj4gPiA+cHNyLnRyYW5zY29kZXIp LA0KPiA+ICvCoMKgwqDCoMKgwqDCoGludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0FV WF9DVEwoaW50ZWxfZHAtDQo+ID4gPnBzci50cmFuc2NvZGVyKSwNCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdXhfY3RsKTsNCj4gPiDCoH0NCj4gPiDC oA0KPiA+IA0KPiA+IEBAIC0zOTUsMTQgKzM5MSwxNCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3Jf ZW5hYmxlX3Npbmsoc3RydWN0DQo+ID4gaW50ZWxfZHAgKmludGVsX2RwKQ0KPiA+IMKgwqDCoMKg wqDCoMKgwqB1OCBkcGNkX3ZhbCA9IERQX1BTUl9FTkFCTEU7DQo+ID4gwqANCj4gPiANCj4gPiDC oMKgwqDCoMKgwqDCoMKgLyogRW5hYmxlIEFMUE0gYXQgc2luayBmb3IgcHNyMiAqLw0KPiA+IC3C oMKgwqDCoMKgwqDCoGlmIChkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgew0KPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkgew0KPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2RwX2RwY2Rfd3JpdGViKCZpbnRlbF9kcC0+YXV4 LA0KPiA+IERQX1JFQ0VJVkVSX0FMUE1fQ09ORklHLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERQX0FMUE1f RU5BQkxFIHwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoA0KPiA+IERQX0FMUE1fTE9DS19FUlJPUl9JUlFfSFBE X0VOQUJMRSk7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRwY2RfdmFsIHw9IERQX1BTUl9FTkFCTEVfUFNSMiB8DQo+ID4gRFBfUFNSX0lSUV9IUERf V0lUSF9DUkNfRVJST1JTOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugew0KPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZGV2X3ByaXYtPnBzci5saW5rX3N0YW5kYnkp DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpbnRlbF9kcC0+cHNyLmxp bmtfc3RhbmRieSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkcGNkX3ZhbCB8PSBEUF9QU1JfTUFJTl9MSU5LX0FDVElWRTsNCj4gPiDCoA0KPiA+ IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElOVEVMX0dFTihkZXZf cHJpdikgPj0gOCkNCj4gPiBAQCAtNDY1LDcgKzQ2MSw3IEBAIHN0YXRpYyB1OCBwc3JfY29tcHV0 ZV9pZGxlX2ZyYW1lcyhzdHJ1Y3QNCj4gPiBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ID4gwqDCoMKg wqDCoMKgwqDCoCAqIG9mZi1ieS1vbmUgaXNzdWUgdGhhdCBIVyBoYXMgaW4gc29tZSBjYXNlcy4N Cj4gPiDCoMKgwqDCoMKgwqDCoMKgICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlkbGVfZnJhbWVz ID0gbWF4KDYsIGRldl9wcml2LT52YnQucHNyLmlkbGVfZnJhbWVzKTsNCj4gPiAtwqDCoMKgwqDC oMKgwqBpZGxlX2ZyYW1lcyA9IG1heChpZGxlX2ZyYW1lcywgZGV2X3ByaXYtDQo+ID4gPnBzci5z aW5rX3N5bmNfbGF0ZW5jeSArIDEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGlkbGVfZnJhbWVzID0g bWF4KGlkbGVfZnJhbWVzLCBpbnRlbF9kcC0NCj4gPiA+cHNyLnNpbmtfc3luY19sYXRlbmN5ICsg MSk7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGRybV9XQVJOX09OKCZk ZXZfcHJpdi0+ZHJtLCBpZGxlX2ZyYW1lcyA+IDB4ZikpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZGxlX2ZyYW1lcyA9IDB4ZjsNCj4gPiBAQCAtNDg1LDcgKzQ4MSw3IEBA IHN0YXRpYyB2b2lkIGhzd19hY3RpdmF0ZV9wc3IxKHN0cnVjdCBpbnRlbF9kcA0KPiA+ICppbnRl bF9kcCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKQ0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsIHw9IEVEUF9QU1JfTUlOX0xJTktf RU5UUllfVElNRV84X0xJTkVTOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYg KGRldl9wcml2LT5wc3IubGlua19zdGFuZGJ5KQ0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChpbnRl bF9kcC0+cHNyLmxpbmtfc3RhbmRieSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHZhbCB8PSBFRFBfUFNSX0xJTktfU1RBTkRCWTsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDC oMKgwqDCoMKgwqB2YWwgfD0gaW50ZWxfcHNyMV9nZXRfdHBfdGltZShpbnRlbF9kcCk7DQo+ID4g QEAgLTQ5Myw5ICs0ODksOSBAQCBzdGF0aWMgdm9pZCBoc3dfYWN0aXZhdGVfcHNyMShzdHJ1Y3Qg aW50ZWxfZHANCj4gPiAqaW50ZWxfZHApDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChJTlRFTF9H RU4oZGV2X3ByaXYpID49IDgpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2 YWwgfD0gRURQX1BTUl9DUkNfRU5BQkxFOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDC oMKgdmFsIHw9IChpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTChkZXZfcHJpdi0N Cj4gPiA+cHNyLnRyYW5zY29kZXIpKSAmDQo+ID4gK8KgwqDCoMKgwqDCoMKgdmFsIHw9IChpbnRl bF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTChpbnRlbF9kcC0NCj4gPiA+cHNyLnRyYW5z Y29kZXIpKSAmDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBFRFBfUFNSX1JF U1RPUkVfUFNSX0FDVElWRV9DVFhfTUFTSyk7DQo+ID4gLcKgwqDCoMKgwqDCoMKgaW50ZWxfZGVf d3JpdGUoZGV2X3ByaXYsIEVEUF9QU1JfQ1RMKGRldl9wcml2LQ0KPiA+ID5wc3IudHJhbnNjb2Rl ciksIHZhbCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVE UF9QU1JfQ1RMKGludGVsX2RwLQ0KPiA+ID5wc3IudHJhbnNjb2RlciksIHZhbCk7DQo+ID4gwqB9 DQo+ID4gwqANCj4gPiANCj4gPiDCoHN0YXRpYyB1MzIgaW50ZWxfcHNyMl9nZXRfdHBfdGltZShz dHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiA+IEBAIC01MzAsNyArNTI2LDcgQEAgc3RhdGlj IHZvaWQgaHN3X2FjdGl2YXRlX3BzcjIoc3RydWN0IGludGVsX2RwDQo+ID4gKmludGVsX2RwKQ0K PiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCB8fCBJU19H RU1JTklMQUtFKGRldl9wcml2KSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHZhbCB8PSBFRFBfWV9DT09SRElOQVRFX0VOQUJMRTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKg wqDCoMKgwqDCoHZhbCB8PSBFRFBfUFNSMl9GUkFNRV9CRUZPUkVfU1UoZGV2X3ByaXYtDQo+ID4g PnBzci5zaW5rX3N5bmNfbGF0ZW5jeSArIDEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCB8PSBF RFBfUFNSMl9GUkFNRV9CRUZPUkVfU1UoaW50ZWxfZHAtDQo+ID4gPnBzci5zaW5rX3N5bmNfbGF0 ZW5jeSArIDEpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB2YWwgfD0gaW50ZWxfcHNyMl9nZXRfdHBf dGltZShpbnRlbF9kcCk7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPj0gMTIpIHsNCj4gPiBAQCAtNTQ5LDcgKzU0NSw3IEBAIHN0YXRp YyB2b2lkIGhzd19hY3RpdmF0ZV9wc3IyKHN0cnVjdCBpbnRlbF9kcA0KPiA+ICppbnRlbF9kcCkN Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCB8PSBFRFBfUFNSMl9GQVNU X1dBS0UoNyk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKg wqDCoMKgwqDCoGlmIChkZXZfcHJpdi0+cHNyLnBzcjJfc2VsX2ZldGNoX2VuYWJsZWQpIHsNCj4g PiArwqDCoMKgwqDCoMKgwqBpZiAoaW50ZWxfZHAtPnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVk KSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBXQSAxNDA4MzMwODQ3 ICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfVEdMX0RJU1Bf U1RFUFBJTkcoZGV2X3ByaXYsIFNURVBfQTAsDQo+ID4gU1RFUF9BMCkgfHwNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBJU19SS0xfUkVWSUQoZGV2X3ByaXYsIFJL TF9SRVZJRF9BMCwNCj4gPiBSS0xfUkVWSURfQTApKQ0KPiA+IEBAIC01NTgsMjAgKzU1NCwyMCBA QCBzdGF0aWMgdm9pZCBoc3dfYWN0aXZhdGVfcHNyMihzdHJ1Y3QgaW50ZWxfZHANCj4gPiAqaW50 ZWxfZHApDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgDQo+ID4gRElTX1JBTV9CWVBBU1NfUFNSMl9NQU5f VFJBQ0spOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQU1IyX01BTl9UUktfQ1RMKGRldl9w cml2LQ0KPiA+ID5wc3IudHJhbnNjb2RlciksDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUFNSMl9NQU5fVFJLX0NUTChpbnRl bF9kcC0NCj4gPiA+cHNyLnRyYW5zY29kZXIpLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQU1IyX01BTl9UUktfQ1RMX0VO QUJMRSk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoSEFTX1BTUjJfU0VMX0ZFVENI KGRldl9wcml2KSkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUFNSMl9NQU5fVFJLX0NUTChkZXZfcHJpdi0NCj4g PiA+cHNyLnRyYW5zY29kZXIpLCAwKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQU1IyX01BTl9UUktfQ1RMKGludGVsX2Rw LQ0KPiA+ID5wc3IudHJhbnNjb2RlciksIDApOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4g wqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgLyoNCj4gPiDCoMKgwqDCoMKgwqDCoMKgICog UFNSMiBIVyBpcyBpbmNvcnJlY3RseSB1c2luZyBFRFBfUFNSX1RQMV9UUDNfU0VMIGFuZA0KPiA+ IEJTcGVjIGlzDQo+ID4gwqDCoMKgwqDCoMKgwqDCoCAqIHJlY29tbWVuZGluZyBrZWVwIHRoaXMg Yml0IHVuc2V0IHdoaWxlIFBTUjIgaXMgZW5hYmxlZC4NCj4gPiDCoMKgwqDCoMKgwqDCoMKgICov DQo+ID4gLcKgwqDCoMKgwqDCoMKgaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1JfQ1RM KGRldl9wcml2LQ0KPiA+ID5wc3IudHJhbnNjb2RlciksIDApOw0KPiA+ICvCoMKgwqDCoMKgwqDC oGludGVsX2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0NUTChpbnRlbF9kcC0NCj4gPiA+cHNy LnRyYW5zY29kZXIpLCAwKTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGludGVs X2RlX3dyaXRlKGRldl9wcml2LCBFRFBfUFNSMl9DVEwoZGV2X3ByaXYtDQo+ID4gPnBzci50cmFu c2NvZGVyKSwgdmFsKTsNCj4gPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9kZV93cml0ZShkZXZfcHJp diwgRURQX1BTUjJfQ1RMKGludGVsX2RwLQ0KPiA+ID5wc3IudHJhbnNjb2RlciksIHZhbCk7DQo+ ID4gwqB9DQo+ID4gwqANCj4gPiANCj4gPiDCoHN0YXRpYyBib29sDQo+ID4gQEAgLTU5NCw1NSAr NTkwLDU4IEBAIHN0YXRpYyB1MzIgaW50ZWxfZ2V0X2ZyYW1lX3RpbWVfdXMoY29uc3QNCj4gPiBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fbW9kZV92cmVmcmVzaCgmY3N0 YXRlLQ0KPiA+ID5ody5hZGp1c3RlZF9tb2RlKSk7DQo+ID4gwqB9DQo+ID4gwqANCj4gPiANCj4g PiAtc3RhdGljIHZvaWQgcHNyMl9wcm9ncmFtX2lkbGVfZnJhbWVzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlDQo+ID4gKmRldl9wcml2LA0KPiA+ICtzdGF0aWMgdm9pZCBwc3IyX3Byb2dyYW1faWRs ZV9mcmFtZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwNCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dTMyIGlkbGVfZnJhbWVzKQ0KPiA+IMKgew0KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiA+IMKgwqDC oMKgwqDCoMKgwqB1MzIgdmFsOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlk bGVfZnJhbWVzIDw8PcKgIEVEUF9QU1IyX0lETEVfRlJBTUVfU0hJRlQ7DQo+ID4gLcKgwqDCoMKg wqDCoMKgdmFsID0gaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRldl9wcml2 LQ0KPiA+ID5wc3IudHJhbnNjb2RlcikpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IGludGVs X2RlX3JlYWQoZGV2X3ByaXYsIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0NCj4gPiA+cHNyLnRyYW5z Y29kZXIpKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgdmFsICY9IH5FRFBfUFNSMl9JRExFX0ZSQU1F X01BU0s7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHZhbCB8PSBpZGxlX2ZyYW1lczsNCj4gPiAtwqDC oMKgwqDCoMKgwqBpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgRURQX1BTUjJfQ1RMKGRldl9wcml2 LQ0KPiA+ID5wc3IudHJhbnNjb2RlciksIHZhbCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9QU1IyX0NUTChpbnRlbF9kcC0NCj4gPiA+cHNyLnRyYW5z Y29kZXIpLCB2YWwpOw0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gLXN0YXRpYyB2b2lkIHRn bF9wc3IyX2VuYWJsZV9kYzNjbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQ0KPiA+ICpkZXZfcHJp dikNCj4gPiArc3RhdGljIHZvaWQgdGdsX3BzcjJfZW5hYmxlX2RjM2NvKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApDQo+ID4gwqB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgcHNyMl9wcm9ncmFtX2lk bGVfZnJhbWVzKGRldl9wcml2LCAwKTsNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gPiArDQo+ID4g K8KgwqDCoMKgwqDCoMKgcHNyMl9wcm9ncmFtX2lkbGVfZnJhbWVzKGludGVsX2RwLCAwKTsNCj4g PiDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZGlzcGxheV9wb3dlcl9zZXRfdGFyZ2V0X2RjX3N0YXRl KGRldl9wcml2LA0KPiA+IERDX1NUQVRFX0VOX0RDM0NPKTsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+ IA0KPiA+IC1zdGF0aWMgdm9pZCB0Z2xfcHNyMl9kaXNhYmxlX2RjM2NvKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlDQo+ID4gKmRldl9wcml2KQ0KPiA+ICtzdGF0aWMgdm9pZCB0Z2xfcHNyMl9kaXNh YmxlX2RjM2NvKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ID4gwqB7DQo+ID4gLcKgwqDC oMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGRldl9wcml2LT5wc3IuZHA7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBf dG9faTkxNShpbnRlbF9kcCk7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgaW50 ZWxfZGlzcGxheV9wb3dlcl9zZXRfdGFyZ2V0X2RjX3N0YXRlKGRldl9wcml2LA0KPiA+IERDX1NU QVRFX0VOX1VQVE9fREM2KTsNCj4gPiAtwqDCoMKgwqDCoMKgwqBwc3IyX3Byb2dyYW1faWRsZV9m cmFtZXMoZGV2X3ByaXYsDQo+ID4gcHNyX2NvbXB1dGVfaWRsZV9mcmFtZXMoaW50ZWxfZHApKTsN Cj4gPiArwqDCoMKgwqDCoMKgwqBwc3IyX3Byb2dyYW1faWRsZV9mcmFtZXMoaW50ZWxfZHAsDQo+ ID4gcHNyX2NvbXB1dGVfaWRsZV9mcmFtZXMoaW50ZWxfZHApKTsNCj4gPiDCoH0NCj4gPiDCoA0K PiA+IA0KPiA+IMKgc3RhdGljIHZvaWQgdGdsX2RjM2NvX2Rpc2FibGVfd29yayhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspDQo+ID4gwqB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0NCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqZGV2X3ByaXYpLA0KPiA+IHBzci5kYzNjb193 b3JrLndvcmspOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAg PQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250YWluZXJfb2Yod29yaywg dHlwZW9mKCppbnRlbF9kcCksDQo+ID4gcHNyLmRjM2NvX3dvcmsud29yayk7DQo+ID4gwqANCj4g PiANCj4gPiAtwqDCoMKgwqDCoMKgwqBtdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0K PiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X2xvY2soJmludGVsX2RwLT5wc3IubG9jayk7DQo+ID4g wqDCoMKgwqDCoMKgwqDCoC8qIElmIGRlbGF5ZWQgd29yayBpcyBwZW5kaW5nLCBpdCBpcyBub3Qg aWRsZSAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChkZWxheWVkX3dvcmtfcGVuZGluZygmZGV2 X3ByaXYtPnBzci5kYzNjb193b3JrKSkNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoZGVsYXllZF93 b3JrX3BlbmRpbmcoJmludGVsX2RwLT5wc3IuZGMzY29fd29yaykpDQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHVubG9jazsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKg wqDCoMKgwqDCoHRnbF9wc3IyX2Rpc2FibGVfZGMzY28oZGV2X3ByaXYpOw0KPiA+ICvCoMKgwqDC oMKgwqDCoHRnbF9wc3IyX2Rpc2FibGVfZGMzY28oaW50ZWxfZHApOw0KPiA+IMKgdW5sb2NrOg0K PiA+IC3CoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4g PiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7DQo+ID4g wqB9DQo+ID4gwqANCj4gPiANCj4gPiAtc3RhdGljIHZvaWQgdGdsX2Rpc2FsbG93X2RjM2NvX29u X3BzcjJfZXhpdChzdHJ1Y3QNCj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gPiAr c3RhdGljIHZvaWQgdGdsX2Rpc2FsbG93X2RjM2NvX29uX3BzcjJfZXhpdChzdHJ1Y3QgaW50ZWxf ZHANCj4gPiAqaW50ZWxfZHApDQo+ID4gwqB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFkZXZf cHJpdi0+cHNyLmRjM2NvX2VuYWJsZWQpDQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFpbnRlbF9k cC0+cHNyLmRjM2NvX2VuYWJsZWQpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm47DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBjYW5jZWxfZGVsYXll ZF93b3JrKCZkZXZfcHJpdi0+cHNyLmRjM2NvX3dvcmspOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGNh bmNlbF9kZWxheWVkX3dvcmsoJmludGVsX2RwLT5wc3IuZGMzY29fd29yayk7DQo+ID4gwqDCoMKg wqDCoMKgwqDCoC8qIEJlZm9yZSBQU1IyIGV4aXQgZGlzYWxsb3cgZGMzY28qLw0KPiA+IC3CoMKg wqDCoMKgwqDCoHRnbF9wc3IyX2Rpc2FibGVfZGMzY28oZGV2X3ByaXYpOw0KPiA+ICvCoMKgwqDC oMKgwqDCoHRnbF9wc3IyX2Rpc2FibGVfZGMzY28oaW50ZWxfZHApOw0KPiA+IMKgfQ0KPiA+IMKg DQo+ID4gDQo+ID4gwqBzdGF0aWMgdm9pZA0KPiA+IEBAIC03MTUsNyArNzE0LDcgQEAgc3RhdGlj IGJvb2wgaW50ZWxfcHNyMl9jb25maWdfdmFsaWQoc3RydWN0DQo+ID4gaW50ZWxfZHAgKmludGVs X2RwLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpbnQgY3J0Y192ZGlzcGxheSA9IGNydGNfc3RhdGUt DQo+ID4gPmh3LmFkanVzdGVkX21vZGUuY3J0Y192ZGlzcGxheTsNCj4gPiDCoMKgwqDCoMKgwqDC oMKgaW50IHBzcl9tYXhfaCA9IDAsIHBzcl9tYXhfdiA9IDAsIG1heF9icHAgPSAwOw0KPiA+IMKg DQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFkZXZfcHJpdi0+cHNyLnNpbmtfcHNyMl9z dXBwb3J0KQ0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghaW50ZWxfZHAtPnBzci5zaW5rX3BzcjJf c3VwcG9ydCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxz ZTsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIXRyYW5zY29kZXJfaGFz X3BzcjIoZGV2X3ByaXYsIGNydGNfc3RhdGUtDQo+ID4gPmNwdV90cmFuc2NvZGVyKSkgew0KPiA+ IEBAIC03MjUsNyArNzI0LDcgQEAgc3RhdGljIGJvb2wgaW50ZWxfcHNyMl9jb25maWdfdmFsaWQo c3RydWN0DQo+ID4gaW50ZWxfZHAgKmludGVsX2RwLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gwqAN Cj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoIXBzcjJfZ2xvYmFsX2VuYWJsZWQoZGV2X3By aXYpKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFwc3IyX2dsb2JhbF9lbmFibGVkKGludGVs X2RwKSkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX2RiZ19rbXMo JmRldl9wcml2LT5kcm0sICJQU1IyIGRpc2FibGVkIGJ5DQo+ID4gZmxhZ1xuIik7DQo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7DQo+ID4gwqDCoMKgwqDC oMKgwqDCoH0NCj4gPiBAQCAtNzc0LDEwICs3NzMsMTAgQEAgc3RhdGljIGJvb2wgaW50ZWxfcHNy Ml9jb25maWdfdmFsaWQoc3RydWN0DQo+ID4gaW50ZWxfZHAgKmludGVsX2RwLA0KPiA+IMKgwqDC oMKgwqDCoMKgwqAgKiBvbmx5IG5lZWQgdG8gdmFsaWRhdGUgdGhlIFNVIGJsb2NrIHdpZHRoIGlz IGEgbXVsdGlwbGUNCj4gPiBvZg0KPiA+IMKgwqDCoMKgwqDCoMKgwqAgKiB4IGdyYW51bGFyaXR5 Lg0KPiA+IMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoY3J0Y19o ZGlzcGxheSAlIGRldl9wcml2LT5wc3Iuc3VfeF9ncmFudWxhcml0eSkgew0KPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChjcnRjX2hkaXNwbGF5ICUgaW50ZWxfZHAtPnBzci5zdV94X2dyYW51bGFyaXR5 KSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmZGV2 X3ByaXYtPmRybSwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgIlBTUjIgbm90IGVuYWJsZWQsIGhkaXNwbGF5KCVkKSBub3QNCj4gPiBt dWx0aXBsZSBvZiAlZFxuIiwNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjcnRjX2hkaXNwbGF5LCBkZXZfcHJpdi0NCj4gPiA+cHNyLnN1 X3hfZ3JhbnVsYXJpdHkpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNydGNfaGRpc3BsYXksIGludGVsX2RwLQ0KPiA+ID5wc3Iuc3Vf eF9ncmFudWxhcml0eSk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gZmFsc2U7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IEBAIC04 MTksMTMgKzgxOCwxMCBAQCB2b2lkIGludGVsX3Bzcl9jb21wdXRlX2NvbmZpZyhzdHJ1Y3QgaW50 ZWxfZHANCj4gPiAqaW50ZWxfZHAsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChjcnRjX3N0YXRl LT52cnIuZW5hYmxlKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu Ow0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFDQU5fUFNSKGRldl9wcml2 KSkNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIUNBTl9QU1IoaW50ZWxfZHApKQ0KPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKg wqDCoMKgwqDCoMKgaWYgKGludGVsX2RwICE9IGRldl9wcml2LT5wc3IuZHApDQo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiAtDQo+ID4gLcKgwqDCoMKgwqDC oMKgaWYgKCFwc3JfZ2xvYmFsX2VuYWJsZWQoZGV2X3ByaXYpKSB7DQo+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKCFwc3JfZ2xvYmFsX2VuYWJsZWQoaW50ZWxfZHApKSB7DQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRybSwgIlBTUiBkaXNh YmxlZCBieQ0KPiA+IGZsYWdcbiIpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gQEAgLTgzMywxNiArODI5LDE5 IEBAIHZvaWQgaW50ZWxfcHNyX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9kcA0KPiA+ICpp bnRlbF9kcCwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgLyoNCj4gPiDCoMKgwqDCoMKgwqDCoMKgICog SFNXIHNwZWMgZXhwbGljaXRseSBzYXlzIFBTUiBpcyB0aWVkIHRvIHBvcnQgQS4NCj4gPiDCoMKg wqDCoMKgwqDCoMKgICogQkRXKyBwbGF0Zm9ybXMgaGF2ZSBhIGluc3RhbmNlIG9mIFBTUiByZWdp c3RlcnMgcGVyDQo+ID4gdHJhbnNjb2RlciBidXQNCj4gPiAtwqDCoMKgwqDCoMKgwqAgKiBmb3Ig bm93IGl0IG9ubHkgc3VwcG9ydHMgb25lIGluc3RhbmNlIG9mIFBTUiwgc28gbGV0cw0KPiA+IGtl ZXAgaXQNCj4gPiAtwqDCoMKgwqDCoMKgwqAgKiBoYXJkY29kZWQgdG8gUE9SVF9BDQo+ID4gK8Kg wqDCoMKgwqDCoMKgICogQkRXLCBHRU45IGFuZCBHRU4xMSBhcmUgbm90IHZhbGlkYXRlZCBieSBI VyB0ZWFtIGluDQo+ID4gb3RoZXIgdHJhbnNjb2Rlcg0KPiA+ICvCoMKgwqDCoMKgwqDCoCAqIHRo YW4gZURQIG9uZS4NCj4gPiArwqDCoMKgwqDCoMKgwqAgKiBGb3Igbm93IGl0IG9ubHkgc3VwcG9y dHMgb25lIGluc3RhbmNlIG9mIFBTUiBmb3IgQkRXLA0KPiA+IEdFTjkgYW5kIEdFTjExLg0KPiA+ ICvCoMKgwqDCoMKgwqDCoCAqIFNvIGxldHMga2VlcCBpdCBoYXJkY29kZWQgdG8gUE9SVF9BIGZv ciBCRFcsIEdFTjkgYW5kDQo+ID4gR0VOMTEuDQo+ID4gK8KgwqDCoMKgwqDCoMKgICogQnV0IEdF TjEyIHN1cHBvcnRzIGEgaW5zdGFuY2Ugb2YgUFNSIHJlZ2lzdGVycyBwZXINCj4gPiB0cmFuc2Nv ZGVyLg0KPiA+IMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gDQo+IEFsbW9zdCB0aGVyZSBidXQgdGhl IGluc3RhbmNlcyBhcmUgdGhlcmUgaW50ZWxfcHNyX2luaXQoKSB3aWxsIGJlDQo+IGV4ZWN1dGVk IGJ1dCBpbnRlbF9wc3JfY29tcHV0ZV9jb25maWcoKSB3aWxsIG5vdCBsZXQgUFNSIHRvIGJlDQo+ IGVuYWJsZWQgaW4gYQ0KPiB0cmFuc2NvZGVyIHRoYXQgaXMgbm90IGVEUC9wb3J0IEEgZm9yIEdF TjExIGFuZCBvbGRlci4NCj4gDQoNCk9rLCBJJ2xsIG1vdmUgdGhpcyBjaGVjayByb3V0aW5lIHRv IGludGVsX3Bzcl9pbml0KCkuIEFuZCBhZnRlcg0KY2hlY2tpbmcgaXQnbGwgc2V0IHNvdXJjZSBz dXBwb3J0cy4NCiAgIEFuZCBJJ2xsIG1ha2UgQ0FOX1BTUigpIHVzZSBpdC4NCg0KPiA+IC3CoMKg wqDCoMKgwqDCoGlmIChkaWdfcG9ydC0+YmFzZS5wb3J0ICE9IFBPUlRfQSkgew0KPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTIgJiYgZGlnX3BvcnQtPmJhc2Uu cG9ydCAhPQ0KPiA+IFBPUlRfQSkgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZHJtX2RiZ19rbXMoJmRldl9wcml2LT5kcm0sDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJQU1IgY29uZGl0aW9uIGZhaWxlZDog UG9ydCBub3QNCj4gPiBzdXBwb3J0ZWRcbiIpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gwqANCj4gPiANCj4g PiAtwqDCoMKgwqDCoMKgwqBpZiAoZGV2X3ByaXYtPnBzci5zaW5rX25vdF9yZWxpYWJsZSkgew0K PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChpbnRlbF9kcC0+cHNyLnNpbmtfbm90X3JlbGlhYmxlKSB7 DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmZGV2X3By aXYtPmRybSwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgIlBTUiBzaW5rIGltcGxlbWVudGF0aW9uIGlzIG5vdA0KPiA+IHJlbGlhYmxl XG4iKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiBA QCAtODc4LDIzICs4NzcsMjQgQEAgdm9pZCBpbnRlbF9wc3JfY29tcHV0ZV9jb25maWcoc3RydWN0 IGludGVsX2RwDQo+ID4gKmludGVsX2RwLA0KPiA+IMKgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Fj dGl2YXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ID4gwqB7DQo+ID4gwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50 ZWxfZHApOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGVudW0gdHJhbnNjb2RlciB0cmFuc2NvZGVyID0g aW50ZWxfZHAtPnBzci50cmFuc2NvZGVyOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDC oMKgaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIoZGV2X3ByaXYsIGRldl9wcml2LQ0KPiA+ID5wc3Iu dHJhbnNjb2RlcikpDQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIo ZGV2X3ByaXYsIHRyYW5zY29kZXIpKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfZGVfcmVhZChkZXZfcHJpdiwN Cj4gPiBFRFBfUFNSMl9DVEwoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKSkgJiBFRFBfUFNSMl9F TkFCTEUpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+ID4gRURQX1BTUjJfQ1RMKHRyYW5z Y29kZXIpKSAmIEVEUF9QU1IyX0VOQUJMRSk7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKg wqDCoMKgZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9kZV9yZWFkKGRldl9wcml2LCBFRFBfUFNSX0NUTChk ZXZfcHJpdi0NCj4gPiA+cHNyLnRyYW5zY29kZXIpKSAmIEVEUF9QU1JfRU5BQkxFKTsNCj4gPiAt wqDCoMKgwqDCoMKgwqBkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZGV2X3ByaXYtPnBzci5h Y3RpdmUpOw0KPiA+IC3CoMKgwqDCoMKgwqDCoGxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2 LT5wc3IubG9jayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiA+IEVEUF9QU1JfQ1RMKHRyYW5zY29kZXIpKSAmIEVE UF9QU1JfRU5BQkxFKTsNCj4gPiArwqDCoMKgwqDCoMKgwqBkcm1fV0FSTl9PTigmZGV2X3ByaXYt PmRybSwgaW50ZWxfZHAtPnBzci5hY3RpdmUpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGxvY2tkZXBf YXNzZXJ0X2hlbGQoJmludGVsX2RwLT5wc3IubG9jayk7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKg wqDCoMKgwqDCoMKgLyogcHNyMSBhbmQgcHNyMiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiovDQo+ ID4gLcKgwqDCoMKgwqDCoMKgaWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkKQ0KPiA+ICvC oMKgwqDCoMKgwqDCoGlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhzd19hY3RpdmF0ZV9wc3IyKGludGVsX2RwKTsNCj4g PiDCoMKgwqDCoMKgwqDCoMKgZWxzZQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaHN3X2FjdGl2YXRlX3BzcjEoaW50ZWxfZHApOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDC oMKgwqDCoMKgZGV2X3ByaXYtPnBzci5hY3RpdmUgPSB0cnVlOw0KPiA+ICvCoMKgwqDCoMKgwqDC oGludGVsX2RwLT5wc3IuYWN0aXZlID0gdHJ1ZTsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+ IMKgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2VuYWJsZV9zb3VyY2Uoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCwNCj4gPiBAQCAtOTEwLDcgKzkxMCw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9l bmFibGVfc291cmNlKHN0cnVjdA0KPiA+IGludGVsX2RwICppbnRlbF9kcCwNCj4gPiDCoMKgwqDC oMKgwqDCoMKgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJp dikpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoc3dfcHNyX3NldHVwX2F1 eChpbnRlbF9kcCk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoZGV2X3By aXYtPnBzci5wc3IyX2VuYWJsZWQgJiYgKElTX0dFTihkZXZfcHJpdiwgOSkgJiYNCj4gPiArwqDC oMKgwqDCoMKgwqBpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQgJiYgKElTX0dFTihkZXZf cHJpdiwgOSkgJiYNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqANCj4gPiAhSVNfR0VN SU5JTEFLRShkZXZfcHJpdikpKSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpOTE1X3JlZ190IHJlZyA9IENISUNLRU5fVFJBTlMoY3B1X3RyYW5zY29kZXIpOw0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIGNoaWNrZW4gPSBpbnRlbF9kZV9yZWFk KGRldl9wcml2LCByZWcpOw0KPiA+IEBAIC05MzQsMTAgKzkzNCwxMCBAQCBzdGF0aWMgdm9pZCBp bnRlbF9wc3JfZW5hYmxlX3NvdXJjZShzdHJ1Y3QNCj4gPiBpbnRlbF9kcCAqaW50ZWxfZHAsDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEpDQo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrIHw9IEVEUF9QU1JfREVCVUdfTUFTS19E SVNQX1JFR19XUklURTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGludGVsX2Rl X3dyaXRlKGRldl9wcml2LCBFRFBfUFNSX0RFQlVHKGRldl9wcml2LQ0KPiA+ID5wc3IudHJhbnNj b2RlciksDQo+ID4gK8KgwqDCoMKgwqDCoMKgaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIEVEUF9Q U1JfREVCVUcoaW50ZWxfZHAtDQo+ID4gPnBzci50cmFuc2NvZGVyKSwNCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtYXNrKTsNCj4gPiDCoA0KPiA+IA0K PiA+IC3CoMKgwqDCoMKgwqDCoHBzcl9pcnFfY29udHJvbChkZXZfcHJpdik7DQo+ID4gK8KgwqDC oMKgwqDCoMKgcHNyX2lycV9jb250cm9sKGludGVsX2RwKTsNCj4gPiDCoA0KPiA+IA0KPiA+IMKg wqDCoMKgwqDCoMKgwqBpZiAoY3J0Y19zdGF0ZS0+ZGMzY29fZXhpdGxpbmUpIHsNCj4gPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiB2YWw7DQo+ID4gQEAgLTk1NSwzMCArOTU1 LDMwIEBAIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVfc291cmNlKHN0cnVjdA0KPiA+IGlu dGVsX2RwICppbnRlbF9kcCwNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAo SEFTX1BTUl9IV19UUkFDS0lORyhkZXZfcHJpdikgJiYNCj4gPiBIQVNfUFNSMl9TRUxfRkVUQ0go ZGV2X3ByaXYpKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZGVf cm13KGRldl9wcml2LCBDSElDS0VOX1BBUjFfMSwNCj4gPiBJR05PUkVfUFNSMl9IV19UUkFDS0lO RywNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGRldl9wcml2LT5wc3IucHNyMl9zZWxfZmV0Y2hfZW5hYmxlZCA/DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnRlbF9k cC0+cHNyLnBzcjJfc2VsX2ZldGNoX2VuYWJsZWQgPw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElHTk9SRV9QU1IyX0hXX1RSQUNL SU5HIDogMCk7DQo+ID4gwqB9DQo+ID4gwqANCj4gPiANCj4gPiAtc3RhdGljIHZvaWQgaW50ZWxf cHNyX2VuYWJsZV9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gPiAqZGV2X3ByaXYs DQo+ID4gK3N0YXRpYyB2b2lkIGludGVsX3Bzcl9lbmFibGVfbG9ja2VkKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19z dGF0ZQ0KPiA+ICpjcnRjX3N0YXRlLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0DQo+ ID4gZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkNCj4gPiDCoHsNCj4gPiAtwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gZGV2X3ByaXYtPnBzci5kcDsNCj4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90 b19pOTE1KGludGVsX2RwKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqZGlnX3BvcnQgPQ0KPiA+IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsNCj4gPiDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIgPSAmZGlnX3BvcnQt PmJhc2U7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHUzMiB2YWw7DQo+ID4gwqANCj4gPiANCj4gPiAt wqDCoMKgwqDCoMKgwqBkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwgZGV2X3ByaXYtPnBzci5l bmFibGVkKTsNCj4gPiArwqDCoMKgwqDCoMKgwqBkcm1fV0FSTl9PTigmZGV2X3ByaXYtPmRybSwg aW50ZWxfZHAtPnBzci5lbmFibGVkKTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDC oGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkID0gY3J0Y19zdGF0ZS0+aGFzX3BzcjI7DQo+ID4g LcKgwqDCoMKgwqDCoMKgZGV2X3ByaXYtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgPSAwOw0K PiA+IC3CoMKgwqDCoMKgwqDCoGRldl9wcml2LT5wc3IucGlwZSA9IHRvX2ludGVsX2NydGMoY3J0 Y19zdGF0ZS0+dWFwaS5jcnRjKS0NCj4gPiA+cGlwZTsNCj4gPiAtwqDCoMKgwqDCoMKgwqBkZXZf cHJpdi0+cHNyLmRjM2NvX2VuYWJsZWQgPSAhIWNydGNfc3RhdGUtPmRjM2NvX2V4aXRsaW5lOw0K PiA+IC3CoMKgwqDCoMKgwqDCoGRldl9wcml2LT5wc3IudHJhbnNjb2RlciA9IGNydGNfc3RhdGUt PmNwdV90cmFuc2NvZGVyOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGludGVsX2RwLT5wc3IucHNyMl9l bmFibGVkID0gY3J0Y19zdGF0ZS0+aGFzX3BzcjI7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaW50ZWxf ZHAtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgPSAwOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGlu dGVsX2RwLT5wc3IucGlwZSA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+dWFwaS5jcnRjKS0N Cj4gPiA+cGlwZTsNCj4gPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9kcC0+cHNyLmRjM2NvX2VuYWJs ZWQgPSAhIWNydGNfc3RhdGUtPmRjM2NvX2V4aXRsaW5lOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGlu dGVsX2RwLT5wc3IudHJhbnNjb2RlciA9IGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyOw0KPiA+ IMKgwqDCoMKgwqDCoMKgwqAvKiBEQzUvREM2IHJlcXVpcmVzIGF0IGxlYXN0IDYgaWRsZSBmcmFt ZXMgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgdmFsID0gdXNlY3NfdG9famlmZmllcyhpbnRlbF9n ZXRfZnJhbWVfdGltZV91cyhjcnRjX3N0YXRlKQ0KPiA+ICogNik7DQo+ID4gLcKgwqDCoMKgwqDC oMKgZGV2X3ByaXYtPnBzci5kYzNjb19leGl0X2RlbGF5ID0gdmFsOw0KPiA+IC3CoMKgwqDCoMKg wqDCoGRldl9wcml2LT5wc3IucHNyMl9zZWxfZmV0Y2hfZW5hYmxlZCA9IGNydGNfc3RhdGUtDQo+ ID4gPmVuYWJsZV9wc3IyX3NlbF9mZXRjaDsNCj4gPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9kcC0+ cHNyLmRjM2NvX2V4aXRfZGVsYXkgPSB2YWw7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaW50ZWxfZHAt PnBzci5wc3IyX3NlbF9mZXRjaF9lbmFibGVkID0gY3J0Y19zdGF0ZS0NCj4gPiA+ZW5hYmxlX3Bz cjJfc2VsX2ZldGNoOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoC8qDQo+ID4g wqDCoMKgwqDCoMKgwqDCoCAqIElmIGEgUFNSIGVycm9yIGhhcHBlbmVkIGFuZCB0aGUgZHJpdmVy IGlzIHJlbG9hZGVkLCB0aGUNCj4gPiBFRFBfUFNSX0lJUg0KPiA+IEBAIC05OTAsMjcgKzk5MCwy NyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZW5hYmxlX2xvY2tlZChzdHJ1Y3QNCj4gPiBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgICovDQo+ID4gwqDC oMKgwqDCoMKgwqDCoGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKSB7DQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0K PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBUUkFOU19QU1JfSUlSKGRldl9wcml2LQ0KPiA+ID5wc3IudHJhbnNj b2RlcikpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUUkFOU19QU1JfSUlSKGludGVsX2RwLQ0KPiA+ID5w c3IudHJhbnNjb2RlcikpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFs ICY9IEVEUF9QU1JfRVJST1IoMCk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7DQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9w cml2LCBFRFBfUFNSX0lJUik7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZh bCAmPSBFRFBfUFNSX0VSUk9SKGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcik7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCAmPSBFRFBfUFNSX0VSUk9SKGludGVsX2RwLT5w c3IudHJhbnNjb2Rlcik7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiDCoMKgwqDCoMKgwqDC oMKgaWYgKHZhbCkgew0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfcHJp di0+cHNyLnNpbmtfbm90X3JlbGlhYmxlID0gdHJ1ZTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaW50ZWxfZHAtPnBzci5zaW5rX25vdF9yZWxpYWJsZSA9IHRydWU7DQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJnX2ttcygmZGV2X3ByaXYtPmRy bSwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIlBTUiBpbnRlcnJ1cHRpb24gZXJyb3Igc2V0LCBub3QNCj4gPiBlbmFibGluZyBQU1Jc biIpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+IMKg wqDCoMKgwqDCoMKgwqB9DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgZHJtX2Ri Z19rbXMoJmRldl9wcml2LT5kcm0sICJFbmFibGluZyBQU1Ilc1xuIiwNCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkID8g IjIiIDogIjEiKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlu dGVsX2RwLT5wc3IucHNyMl9lbmFibGVkID8gIjIiIDogIjEiKTsNCj4gPiDCoMKgwqDCoMKgwqDC oMKgaW50ZWxfZHBfY29tcHV0ZV9wc3JfdnNjX3NkcChpbnRlbF9kcCwgY3J0Y19zdGF0ZSwNCj4g PiBjb25uX3N0YXRlLA0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZkZXZfcHJpdi0+cHNyLnZzYyk7DQo+ ID4gLcKgwqDCoMKgwqDCoMKgaW50ZWxfd3JpdGVfZHBfdnNjX3NkcChlbmNvZGVyLCBjcnRjX3N0 YXRlLCAmZGV2X3ByaXYtDQo+ID4gPnBzci52c2MpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZpbnRl bF9kcC0+cHNyLnZzYyk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaW50ZWxfd3JpdGVfZHBfdnNjX3Nk cChlbmNvZGVyLCBjcnRjX3N0YXRlLCAmaW50ZWxfZHAtDQo+ID4gPnBzci52c2MpOw0KPiA+IMKg wqDCoMKgwqDCoMKgwqBpbnRlbF9wc3JfZW5hYmxlX3NpbmsoaW50ZWxfZHApOw0KPiA+IMKgwqDC oMKgwqDCoMKgwqBpbnRlbF9wc3JfZW5hYmxlX3NvdXJjZShpbnRlbF9kcCwgY3J0Y19zdGF0ZSk7 DQo+ID4gLcKgwqDCoMKgwqDCoMKgZGV2X3ByaXYtPnBzci5lbmFibGVkID0gdHJ1ZTsNCj4gPiAr wqDCoMKgwqDCoMKgwqBpbnRlbF9kcC0+cHNyLmVuYWJsZWQgPSB0cnVlOw0KPiA+IMKgDQo+ID4g DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGludGVsX3Bzcl9hY3RpdmF0ZShpbnRlbF9kcCk7DQo+ID4g wqB9DQo+ID4gQEAgLTEwMjksNyArMTAyOSw3IEBAIHZvaWQgaW50ZWxfcHNyX2VuYWJsZShzdHJ1 Y3QgaW50ZWxfZHANCj4gPiAqaW50ZWxfZHAsDQo+ID4gwqB7DQo+ID4gwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHAp Ow0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFDQU5fUFNSKGRldl9wcml2 KSB8fCBkZXZfcHJpdi0+cHNyLmRwICE9IGludGVsX2RwKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoGlm ICghQ0FOX1BTUihpbnRlbF9kcCkpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm47DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFjcnRjX3N0 YXRlLT5oYXNfcHNyKQ0KPiA+IEBAIC0xMDM3LDQ2ICsxMDM3LDQ3IEBAIHZvaWQgaW50ZWxfcHNy X2VuYWJsZShzdHJ1Y3QgaW50ZWxfZHANCj4gPiAqaW50ZWxfZHAsDQo+ID4gwqANCj4gPiANCj4g PiDCoMKgwqDCoMKgwqDCoMKgZHJtX1dBUk5fT04oJmRldl9wcml2LT5kcm0sIGRldl9wcml2LT5k cnJzLmRwKTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoG11dGV4X2xvY2soJmRl dl9wcml2LT5wc3IubG9jayk7DQo+ID4gLcKgwqDCoMKgwqDCoMKgaW50ZWxfcHNyX2VuYWJsZV9s b2NrZWQoZGV2X3ByaXYsIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOw0KPiA+IC3CoMKgwqDCoMKg wqDCoG11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4gPiArwqDCoMKgwqDCoMKg wqBtdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGlu dGVsX3Bzcl9lbmFibGVfbG9ja2VkKGludGVsX2RwLCBjcnRjX3N0YXRlLCBjb25uX3N0YXRlKTsN Cj4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7DQo+ ID4gwqB9DQo+ID4gwqANCj4gPiANCj4gPiAtc3RhdGljIHZvaWQgaW50ZWxfcHNyX2V4aXQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiA+ICtzdGF0aWMgdm9pZCBpbnRlbF9w c3JfZXhpdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiA+IMKgew0KPiA+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50 ZWxfZHApOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB1MzIgdmFsOw0KPiA+IMKgDQo+ID4gDQo+ID4g LcKgwqDCoMKgwqDCoMKgaWYgKCFkZXZfcHJpdi0+cHNyLmFjdGl2ZSkgew0KPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodHJhbnNjb2Rlcl9oYXNfcHNyMihkZXZfcHJpdiwg ZGV2X3ByaXYtDQo+ID4gPnBzci50cmFuc2NvZGVyKSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoGlm ICghaW50ZWxfZHAtPnBzci5hY3RpdmUpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHRyYW5zY29kZXJfaGFzX3BzcjIoZGV2X3ByaXYsIGludGVsX2RwLQ0KPiA+ID5w c3IudHJhbnNjb2RlcikpIHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUjJfQ1RMKGRldl9wcml2LQ0KPiA+ID5wc3IudHJh bnNjb2RlcikpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUjJfQ1RM KGludGVsX2RwLQ0KPiA+ID5wc3IudHJhbnNjb2RlcikpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJt LCB2YWwgJg0KPiA+IEVEUF9QU1IyX0VOQUJMRSk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVE UF9QU1JfQ1RMKGRldl9wcml2LQ0KPiA+ID5wc3IudHJhbnNjb2RlcikpOw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBFRFBfUFNSX0NUTChpbnRlbF9kcC0NCj4gPiA+cHNyLnRyYW5zY29kZXIpKTsNCj4gPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJt LCB2YWwgJiBFRFBfUFNSX0VOQUJMRSk7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IMKg DQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVk KSB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRnbF9kaXNhbGxvd19kYzNj b19vbl9wc3IyX2V4aXQoZGV2X3ByaXYpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChpbnRlbF9k cC0+cHNyLnBzcjJfZW5hYmxlZCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB0Z2xfZGlzYWxsb3dfZGMzY29fb25fcHNyMl9leGl0KGludGVsX2RwKTsNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IGludGVsX2RlX3JlYWQoZGV2X3ByaXYsDQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEVEUF9QU1IyX0NUTChkZXZfcHJpdi0NCj4gPiA+cHNyLnRyYW5zY29k ZXIpKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUjJfQ1RMKGludGVsX2RwLQ0KPiA+ID5wc3Iu dHJhbnNjb2RlcikpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX1dB Uk5fT04oJmRldl9wcml2LT5kcm0sICEodmFsICYNCj4gPiBFRFBfUFNSMl9FTkFCTEUpKTsNCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCAmPSB+RURQX1BTUjJfRU5BQkxF Ow0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZGVfd3JpdGUoZGV2 X3ByaXYsDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgRURQX1BTUjJfQ1RMKGRldl9wcml2LQ0KPiA+ID5wc3IudHJhbnNjb2Rl ciksIHZhbCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUjJfQ1RMKGludGVsX2RwLQ0KPiA+ID5wc3IudHJhbnNj b2RlciksIHZhbCk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7DQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBpbnRlbF9kZV9yZWFkKGRldl9wcml2LA0KPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBFRFBfUFNSX0NUTChkZXZfcHJpdi0NCj4gPiA+cHNyLnRyYW5zY29kZXIp KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUl9DVEwoaW50ZWxfZHAtDQo+ID4gPnBzci50cmFu c2NvZGVyKSk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1fV0FSTl9P TigmZGV2X3ByaXYtPmRybSwgISh2YWwgJg0KPiA+IEVEUF9QU1JfRU5BQkxFKSk7DQo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgJj0gfkVEUF9QU1JfRU5BQkxFOw0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYs DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgRURQX1BTUl9DVEwoZGV2X3ByaXYtDQo+ID4gPnBzci50cmFuc2NvZGVyKSwgdmFs KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBFRFBfUFNSX0NUTChpbnRlbF9kcC0NCj4gPiA+cHNyLnRyYW5zY29kZXIpLCB2 YWwpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gLcKgwqDCoMKgwqDCoMKgZGV2X3ByaXYt PnBzci5hY3RpdmUgPSBmYWxzZTsNCj4gPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9kcC0+cHNyLmFj dGl2ZSA9IGZhbHNlOw0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gwqBzdGF0aWMgdm9pZCBp bnRlbF9wc3JfZGlzYWJsZV9sb2NrZWQoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gPiBA QCAtMTA4NSwyMSArMTA4NiwyMSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3JfZGlzYWJsZV9sb2Nr ZWQoc3RydWN0DQo+ID4gaW50ZWxfZHAgKmludGVsX2RwKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqBp OTE1X3JlZ190IHBzcl9zdGF0dXM7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHUzMiBwc3Jfc3RhdHVz X21hc2s7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBsb2NrZGVwX2Fzc2VydF9o ZWxkKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGxvY2tkZXBfYXNz ZXJ0X2hlbGQoJmludGVsX2RwLT5wc3IubG9jayk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKg wqDCoMKgwqBpZiAoIWRldl9wcml2LT5wc3IuZW5hYmxlZCkNCj4gPiArwqDCoMKgwqDCoMKgwqBp ZiAoIWludGVsX2RwLT5wc3IuZW5hYmxlZCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybjsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBkcm1fZGJn X2ttcygmZGV2X3ByaXYtPmRybSwgIkRpc2FibGluZyBQU1Ilc1xuIiwNCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkID8g IjIiIDogIjEiKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlu dGVsX2RwLT5wc3IucHNyMl9lbmFibGVkID8gIjIiIDogIjEiKTsNCj4gPiDCoA0KPiA+IA0KPiA+ IC3CoMKgwqDCoMKgwqDCoGludGVsX3Bzcl9leGl0KGRldl9wcml2KTsNCj4gPiArwqDCoMKgwqDC oMKgwqBpbnRlbF9wc3JfZXhpdChpbnRlbF9kcCk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKg wqDCoMKgwqBpZiAoZGV2X3ByaXYtPnBzci5wc3IyX2VuYWJsZWQpIHsNCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcHNyX3N0YXR1cyA9IEVEUF9QU1IyX1NUQVRVUyhkZXZfcHJp di0NCj4gPiA+cHNyLnRyYW5zY29kZXIpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChpbnRlbF9k cC0+cHNyLnBzcjJfZW5hYmxlZCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwc3Jfc3RhdHVzID0gRURQX1BTUjJfU1RBVFVTKGludGVsX2RwLQ0KPiA+ID5wc3IudHJhbnNj b2Rlcik7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwc3Jfc3RhdHVzX21h c2sgPSBFRFBfUFNSMl9TVEFUVVNfU1RBVEVfTUFTSzsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfSBl bHNlIHsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHNyX3N0YXR1cyA9IEVE UF9QU1JfU1RBVFVTKGRldl9wcml2LQ0KPiA+ID5wc3IudHJhbnNjb2Rlcik7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBzcl9zdGF0dXMgPSBFRFBfUFNSX1NUQVRVUyhpbnRl bF9kcC0NCj4gPiA+cHNyLnRyYW5zY29kZXIpOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcHNyX3N0YXR1c19tYXNrID0gRURQX1BTUl9TVEFUVVNfU1RBVEVfTUFTSzsNCj4g PiDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gQEAgLTExMDksNyArMTExMCw3 IEBAIHN0YXRpYyB2b2lkIGludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChzdHJ1Y3QNCj4gPiBpbnRl bF9kcCAqaW50ZWxfZHApDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkcm1f ZXJyKCZkZXZfcHJpdi0+ZHJtLCAiVGltZWQgb3V0IHdhaXRpbmcgUFNSIGlkbGUNCj4gPiBzdGF0 ZVxuIik7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgLyogV0EgMTQwODMzMDg0 NyAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChkZXZfcHJpdi0+cHNyLnBzcjJfc2VsX2ZldGNo X2VuYWJsZWQgJiYNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoaW50ZWxfZHAtPnBzci5wc3IyX3Nl bF9mZXRjaF9lbmFibGVkICYmDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoSVNfVEdMX0RJ U1BfU1RFUFBJTkcoZGV2X3ByaXYsIFNURVBfQTAsIFNURVBfQTApIHx8DQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIElTX1JLTF9SRVZJRChkZXZfcHJpdiwgUktMX1JFVklEX0EwLCBSS0xf UkVWSURfQTApKSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX2Rl X3JtdyhkZXZfcHJpdiwgQ0hJQ0tFTl9QQVIxXzEsDQo+ID4gQEAgLTExMTgsMTAgKzExMTksMTAg QEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKHN0cnVjdA0KPiA+IGludGVs X2RwICppbnRlbF9kcCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgLyogRGlzYWJsZSBQU1Igb24gU2lu ayAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2RwLT5h dXgsIERQX1BTUl9FTl9DRkcsIDApOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKg aWYgKGRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChp bnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxlZCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRybV9kcF9kcGNkX3dyaXRlYigmaW50ZWxfZHAtPmF1eCwNCj4gPiBEUF9SRUNFSVZF Ul9BTFBNX0NPTkZJRywgMCk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBkZXZf cHJpdi0+cHNyLmVuYWJsZWQgPSBmYWxzZTsNCj4gPiArwqDCoMKgwqDCoMKgwqBpbnRlbF9kcC0+ cHNyLmVuYWJsZWQgPSBmYWxzZTsNCj4gPiDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IMKgLyoqDQo+ ID4gQEAgLTExMzksMjAgKzExNDAsMjIgQEAgdm9pZCBpbnRlbF9wc3JfZGlzYWJsZShzdHJ1Y3Qg aW50ZWxfZHANCj4gPiAqaW50ZWxfZHAsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmICghb2xkX2Ny dGNfc3RhdGUtPmhhc19wc3IpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm47DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoZHJtX1dBUk5fT04o JmRldl9wcml2LT5kcm0sICFDQU5fUFNSKGRldl9wcml2KSkpDQo+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKGRybV9XQVJOX09OKCZkZXZfcHJpdi0+ZHJtLCAhQ0FOX1BTUihpbnRlbF9kcCkpKQ0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+IMKgDQo+ID4gDQo+ ID4gLcKgwqDCoMKgwqDCoMKgbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4gPiAr wqDCoMKgwqDCoMKgwqBtdXRleF9sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiA+IMKgDQo+ ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGludGVsX3Bzcl9kaXNhYmxlX2xvY2tlZChpbnRlbF9k cCk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmRldl9w cml2LT5wc3IubG9jayk7DQo+ID4gLcKgwqDCoMKgwqDCoMKgY2FuY2VsX3dvcmtfc3luYygmZGV2 X3ByaXYtPnBzci53b3JrKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqBjYW5jZWxfZGVsYXllZF93b3Jr X3N5bmMoJmRldl9wcml2LT5wc3IuZGMzY29fd29yayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0 ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGNhbmNl bF93b3JrX3N5bmMoJmludGVsX2RwLT5wc3Iud29yayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgY2Fu Y2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpbnRlbF9kcC0+cHNyLmRjM2NvX3dvcmspOw0KPiA+IMKg fQ0KPiA+IMKgDQo+ID4gDQo+ID4gLXN0YXRpYyB2b2lkIHBzcl9mb3JjZV9od190cmFja2luZ19l eGl0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ID4gKmRldl9wcml2KQ0KPiA+ICtzdGF0aWMg dm9pZCBwc3JfZm9yY2VfaHdfdHJhY2tpbmdfZXhpdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw KQ0KPiA+IMKgew0KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiA+ICsNCj4gPiDCoMKgwqDCoMKgwqDC oMKgaWYgKElTX1RJR0VSTEFLRShkZXZfcHJpdikpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogV3Jp dGVzIHRvIENVUlNVUkZMSVZFIGluIFRHTCBhcmUgY2F1c2luZyBJT01NVQ0KPiA+IGVycm9ycyBh bmQNCj4gPiBAQCAtMTE2Niw3ICsxMTY5LDcgQEAgc3RhdGljIHZvaWQgcHNyX2ZvcmNlX2h3X3Ry YWNraW5nX2V4aXQoc3RydWN0DQo+ID4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBTbyB1c2luZyB0aGlzIHdvcmthcm91 bmQgdW50aWwgdGhpcyBpc3N1ZSBpcw0KPiA+IHJvb3QgY2F1c2VkDQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBhbmQgYSBiZXR0ZXIgZml4IGlzIGZvdW5kLg0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGludGVsX3Bzcl9leGl0KGRldl9wcml2KTsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfcHNyX2V4aXQoaW50ZWxfZHApOw0KPiA+IMKgwqDCoMKg wqDCoMKgwqBlbHNlIGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDkpDQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKg0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICogRGlzcGxheSBXQSAjMDg4NDogc2tsKw0KPiA+IEBAIC0xMTc3LDEzICsxMTgwLDEz IEBAIHN0YXRpYyB2b2lkDQo+ID4gcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICogYnV0IGl0IG1ha2VzIG1vcmUgc2Vuc2Ugd3JpdGUgdG8gdGhlIGN1cnJlbnQNCj4g PiBhY3RpdmUNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHBpcGUuDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZGVfd3JpdGUoZGV2X3ByaXYsIENVUlNVUkZMSVZFKGRl dl9wcml2LQ0KPiA+ID5wc3IucGlwZSksIDApOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpbnRlbF9kZV93cml0ZShkZXZfcHJpdiwgQ1VSU1VSRkxJVkUoaW50ZWxfZHAtDQo+ ID4gPnBzci5waXBlKSwgMCk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGVsc2UNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiBBIHdyaXRlIHRvIENVUlNVUkZMSVZFIGRvIG5vdCBjYXVzZSBIVyB0cmFja2lu Zw0KPiA+IHRvIGV4aXQgUFNSDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBvbiBvbGRlciBnZW5zIHNvIGRvaW5nIHRoZSBtYW51YWwgZXhpdCBpbnN0ZWFkLg0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGludGVsX3Bzcl9leGl0KGRldl9wcml2KTsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfcHNyX2V4aXQoaW50ZWxfZHApOw0KPiA+IMKgfQ0KPiA+ IMKgDQo+ID4gDQo+ID4gwqB2b2lkIGludGVsX3BzcjJfcHJvZ3JhbV9wbGFuZV9zZWxfZmV0Y2go c3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwNCj4gPiBAQCAtMTIzMSwxNiArMTIzNCwxOSBAQCB2 b2lkDQo+ID4gaW50ZWxfcHNyMl9wcm9ncmFtX3BsYW5lX3NlbF9mZXRjaChzdHJ1Y3QgaW50ZWxf cGxhbmUgKnBsYW5lLA0KPiA+IMKgDQo+ID4gDQo+ID4gwqB2b2lkIGludGVsX3BzcjJfcHJvZ3Jh bV90cmFuc19tYW5fdHJrX2N0bChjb25zdCBzdHJ1Y3QNCj4gPiBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlKQ0KPiA+IMKgew0KPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLQ0KPiA+ID51YXBpLmNydGMpOw0KPiA+ IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoY3J0Yy0NCj4gPiA+YmFzZS5kZXYpOw0KPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1 X3BzciAqcHNyID0gJmRldl9wcml2LT5wc3I7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjX3N0YXRlLQ0KPiA+ID51YXBp LmNydGMtPmRldik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2VuY29kZXIgKmVu Y29kZXI7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKCFIQVNfUFNSMl9T RUxfRkVUQ0goZGV2X3ByaXYpIHx8DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhY3J0Y19z dGF0ZS0+ZW5hYmxlX3BzcjJfc2VsX2ZldGNoKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaW50ZWxf ZGVfd3JpdGUoZGV2X3ByaXYsIFBTUjJfTUFOX1RSS19DVEwocHNyLT50cmFuc2NvZGVyKSwNCj4g PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNydGNfc3RhdGUt PnBzcjJfbWFuX3RyYWNrX2N0bCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgZm9yX2VhY2hfaW50ZWxf ZW5jb2Rlcl9pc19wc3JfZW5hYmxlZCgmZGV2X3ByaXYtPmRybSwNCj4gPiBlbmNvZGVyLA0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNydGNfc3RhdGUtDQo+ID4gPnVhcGku ZW5jb2Rlcl9tYXNrKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVs X2RlX3dyaXRlKGRldl9wcml2LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBTUjJfTUFOX1RSS19DVEwoY3J0Y19zdGF0ZS0N Cj4gPiA+Y3B1X3RyYW5zY29kZXIpLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNydGNfc3RhdGUtPnBzcjJfbWFuX3RyYWNr X2N0bCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4g wqBzdGF0aWMgdm9pZCBwc3IyX21hbl90cmtfY3RsX2NhbGMoc3RydWN0IGludGVsX2NydGNfc3Rh dGUNCj4gPiAqY3J0Y19zdGF0ZSwNCj4gPiBAQCAtMTQzNSwxMyArMTQ0MSwxMyBAQCB2b2lkIGlu dGVsX3Bzcl91cGRhdGUoc3RydWN0IGludGVsX2RwDQo+ID4gKmludGVsX2RwLA0KPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkNCj4gPiDCoHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7 DQo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGk5MTVfcHNyICpwc3IgPSAmZGV2X3ByaXYtPnBz cjsNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfcHNyICpwc3IgPSAmaW50ZWxfZHAt PnBzcjsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgYm9vbCBlbmFibGUsIHBzcjJfZW5hYmxlOw0KPiA+ IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFDQU5fUFNSKGRldl9wcml2KSB8fCBS RUFEX09OQ0UocHNyLT5kcCkgIT0gaW50ZWxfZHApDQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFD QU5fUFNSKGludGVsX2RwKSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybjsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoG11dGV4X2xvY2soJmRldl9w cml2LT5wc3IubG9jayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfbG9jaygmaW50ZWxfZHAt PnBzci5sb2NrKTsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBlbmFibGUgPSBj cnRjX3N0YXRlLT5oYXNfcHNyOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBwc3IyX2VuYWJsZSA9IGNy dGNfc3RhdGUtPmhhc19wc3IyOw0KPiA+IEBAIC0xNDQ5LDE1ICsxNDU1LDE1IEBAIHZvaWQgaW50 ZWxfcHNyX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfZHANCj4gPiAqaW50ZWxfZHAsDQo+ID4gwqDCoMKg wqDCoMKgwqDCoGlmIChlbmFibGUgPT0gcHNyLT5lbmFibGVkICYmIHBzcjJfZW5hYmxlID09IHBz ci0NCj4gPiA+cHNyMl9lbmFibGVkKSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAvKiBGb3JjZSBhIFBTUiBleGl0IHdoZW4gZW5hYmxpbmcgQ1JDIHRvIGF2b2lkIENSQw0K PiA+IHRpbWVvdXRzICovDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo Y3J0Y19zdGF0ZS0+Y3JjX2VuYWJsZWQgJiYgcHNyLT5lbmFibGVkKQ0KPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHNyX2ZvcmNlX2h3X3RyYWNraW5n X2V4aXQoZGV2X3ByaXYpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcHNyX2ZvcmNlX2h3X3RyYWNraW5nX2V4aXQoaW50ZWxfZHApOw0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA8IDkgJiYgcHNyLT5lbmFibGVkKSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBBY3RpdmF0ZSBQU1IgYWdhaW4gYWZ0ZXIgYSBmb3JjZSBl eGl0DQo+ID4gd2hlbiBlbmFibGluZw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqIENSQyBpbiBvbGRlciBnZW5zDQo+ID4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovDQo+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWRldl9wcml2LT5wc3IuYWN0 aXZlICYmDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgIWRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQ0KPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHNjaGVkdWxlX3dvcmsoJmRldl9wcml2LT5wc3Iud29yayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWludGVsX2RwLT5wc3IuYWN0aXZl ICYmDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgIWludGVsX2RwLT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzKQ0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNj aGVkdWxlX3dvcmsoJmludGVsX2RwLT5wc3Iud29yayk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGdvdG8gdW5sb2NrOw0KPiA+IEBAIC0xNDY3LDM0ICsxNDczLDIzIEBAIHZvaWQg aW50ZWxfcHNyX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfZHANCj4gPiAqaW50ZWxfZHAsDQo+ID4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9wc3JfZGlzYWJsZV9sb2NrZWQoaW50 ZWxfZHApOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChlbmFibGUpDQo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX3Bzcl9lbmFibGVfbG9ja2Vk KGRldl9wcml2LCBjcnRjX3N0YXRlLA0KPiA+IGNvbm5fc3RhdGUpOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9wc3JfZW5hYmxlX2xvY2tlZChpbnRlbF9kcCwgY3J0 Y19zdGF0ZSwNCj4gPiBjb25uX3N0YXRlKTsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgdW5sb2NrOg0K PiA+IC3CoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBzci5sb2NrKTsNCj4g PiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmludGVsX2RwLT5wc3IubG9jayk7DQo+ID4g wqB9DQo+ID4gwqANCj4gPiANCj4gPiDCoC8qKg0KPiA+IC0gKiBpbnRlbF9wc3Jfd2FpdF9mb3Jf aWRsZSAtIHdhaXQgZm9yIFBTUjEgdG8gaWRsZQ0KPiA+IC0gKiBAbmV3X2NydGNfc3RhdGU6IG5l dyBDUlRDIHN0YXRlDQo+ID4gKyAqIHBzcl93YWl0X2Zvcl9pZGxlIC0gd2FpdCBmb3IgUFNSMSB0 byBpZGxlDQo+ID4gKyAqIEBpbnRlbF9kcDogSW50ZWwgRFANCj4gPiDCoCAqIEBvdXRfdmFsdWU6 IFBTUiBzdGF0dXMgaW4gY2FzZSBvZiBmYWlsdXJlDQo+ID4gwqAgKg0KPiA+IC0gKiBUaGlzIGZ1 bmN0aW9uIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBmcm9tIHBpcGVfdXBkYXRlX3N0YXJ0KCkN Cj4gPiB3aGVyZSBpdCBpcw0KPiA+IC0gKiBub3QgZXhwZWN0ZWQgdG8gcmFjZSB3aXRoIFBTUiBl bmFibGUgb3IgZGlzYWJsZS4NCj4gPiAtICoNCj4gPiDCoCAqIFJldHVybnM6IDAgb24gc3VjY2Vz cyBvciAtRVRJTUVPVVQgaWYgUFNSIHN0YXR1cyBkb2VzIG5vdCBpZGxlLg0KPiA+ICsgKg0KPiA+ IMKgICovDQo+ID4gLWludCBpbnRlbF9wc3Jfd2FpdF9mb3JfaWRsZShjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZQ0KPiA+ICpuZXdfY3J0Y19zdGF0ZSwNCj4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgKm91dF92YWx1ZSkNCj4g PiArc3RhdGljIGludCBwc3Jfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2Rw LCB1MzINCj4gPiAqb3V0X3ZhbHVlKQ0KPiA+IMKgew0KPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjID0gdG9faW50ZWxfY3J0YyhuZXdfY3J0Y19zdGF0ZS0NCj4gPiA+ dWFwaS5jcnRjKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtDQo+ID4gPmJhc2UuZGV2KTsNCj4gPiAtDQo+ID4gLcKg wqDCoMKgwqDCoMKgaWYgKCFkZXZfcHJpdi0+cHNyLmVuYWJsZWQgfHwgIW5ld19jcnRjX3N0YXRl LT5oYXNfcHNyKQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsN Cj4gPiAtDQo+ID4gLcKgwqDCoMKgwqDCoMKgLyogRklYTUU6IFVwZGF0ZSB0aGlzIGZvciBQU1Iy IGlmIHdlIG5lZWQgdG8gd2FpdCBmb3IgaWRsZQ0KPiA+ICovDQo+ID4gLcKgwqDCoMKgwqDCoMKg aWYgKFJFQURfT05DRShkZXZfcHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkpDQo+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiA+ IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoC8qDQo+ID4gwqDCoMKgwqDCoMKgwqDCoCAq IEZyb20gYnNwZWM6IFBhbmVsIFNlbGYgUmVmcmVzaCAoQkRXKykNCj4gPiBAQCAtMTUwMiwzMiAr MTQ5Nyw2MyBAQCBpbnQgaW50ZWxfcHNyX3dhaXRfZm9yX2lkbGUoY29uc3Qgc3RydWN0DQo+ID4g aW50ZWxfY3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoCAq IGV4aXQgdHJhaW5pbmcgdGltZSArIDEuNSBtcyBvZiBhdXggY2hhbm5lbCBoYW5kc2hha2UuIDUw DQo+ID4gbXMgaXMNCj4gPiDCoMKgwqDCoMKgwqDCoMKgICogZGVmZW5zaXZlIGVub3VnaCB0byBj b3ZlciBldmVyeXRoaW5nLg0KPiA+IMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gPiAtDQo+ID4gwqDC oMKgwqDCoMKgwqDCoHJldHVybiBfX2ludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKCZkZXZfcHJpdi0+ dW5jb3JlLA0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUl9TVEFUVVMoZGV2X3By aXYtDQo+ID4gPnBzci50cmFuc2NvZGVyKSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEVE UF9QU1JfU1RBVFVTKGludGVsX2RwLQ0KPiA+ID5wc3IudHJhbnNjb2RlciksDQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgRURQX1BTUl9TVEFUVVNfU1RBVEVfTUFTSywNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBFRFBfUFNSX1NUQVRVU19TVEFURV9JRExFLA0KPiA+IDIsIDUwLA0K PiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG91dF92YWx1ZSk7DQo+ID4gwqB9DQo+ID4gwqAN Cj4gPiANCj4gPiAtc3RhdGljIGJvb2wgX19wc3Jfd2FpdF9mb3JfaWRsZV9sb2NrZWQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUNCj4gPiAqZGV2X3ByaXYpDQo+ID4gKy8qKg0KPiA+ICsgKiBpbnRl bF9wc3Jfd2FpdF9mb3JfaWRsZSAtIHdhaXQgZm9yIFBTUjEgdG8gaWRsZQ0KPiA+ICsgKiBAbmV3 X2NydGNfc3RhdGU6IG5ldyBDUlRDIHN0YXRlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rp b24gaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIGZyb20gcGlwZV91cGRhdGVfc3RhcnQoKQ0KPiA+ IHdoZXJlIGl0IGlzDQo+ID4gKyAqIG5vdCBleHBlY3RlZCB0byByYWNlIHdpdGggUFNSIGVuYWJs ZSBvciBkaXNhYmxlLg0KPiA+ICsgKi8NCj4gPiArdm9pZCBpbnRlbF9wc3Jfd2FpdF9mb3JfaWRs ZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQ0KPiA+ICpuZXdfY3J0Y19zdGF0ZSkNCj4g PiArew0KPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IHRvX2k5MTUobmV3X2NydGNfc3RhdGUtDQo+ID4gPnVhcGkuY3J0Yy0+ZGV2KTsNCj4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsNCj4gPiArDQo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKCFuZXdfY3J0Y19zdGF0ZS0+aGFzX3BzcikNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKg wqBmb3JfZWFjaF9pbnRlbF9lbmNvZGVyX2lzX3Bzcl9lbmFibGVkKCZkZXZfcHJpdi0+ZHJtLA0K PiA+IGVuY29kZXIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmV3X2Ny dGNfc3RhdGUtDQo+ID4gPnVhcGkuZW5jb2Rlcl9tYXNrKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPQ0KPiA+IGVuY190b19p bnRlbF9kcChlbmNvZGVyKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoC8qIHdoZW4gdGhlIFBTUjEgaXMgZW5hYmxlZCAqLw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoIWludGVsX2RwLT5wc3IucHNyMl9lbmFibGVkKSB7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1MzIgcHNyX3N0YXR1 czsNCj4gDQo+IEJldHRlciBkbzoNCj4gDQo+IGlmIChpbnRlbF9kcC0+cHNyLnBzcjJfZW5hYmxl ZCkNCj4gwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOw0KPiANCj4gaWYgKHBzcl93YWl0X2Zvcl9p ZGxlKGludGVsX2RwLCAmcHNyX3N0YXR1cykpDQo+IMKgwqDCoMKgwqDCoMKgwqAuLi4NCj4gwqDC oMKgwqDCoMKgwqDCoA0KPiBZb3UgZ2V0IHJpZCBvZiBvbmUgaW5kZW50YXRpb24gYW5kIG1ha2Vz IGVhc2llciB0byByZWFkLg0KPiANCj4gDQpUaGFua3MsIEknbGwgdXBkYXRlIGl0Lg0KPiA+ICsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChw c3Jfd2FpdF9mb3JfaWRsZShpbnRlbF9kcCwNCj4gPiAmcHNyX3N0YXR1cykpDQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZHJtX2VycigmZGV2X3ByaXYtPmRybSwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIlBTUiBp ZGxlIHRpbWVkIG91dCAweCV4LA0KPiA+IGF0b21pYyB1cGRhdGUgbWF5IGZhaWxcbiIsDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBzcl9zdGF0dXMpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgYm9vbCBfX3Bzcl93YWl0X2Zvcl9pZGxlX2xvY2tlZChzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKQ0KPiA+IMKgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpOTE1X3JlZ190IHJlZzsN Cj4gPiDCoMKgwqDCoMKgwqDCoMKgdTMyIG1hc2s7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGludCBl cnI7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKg wqBpZiAoIWRldl9wcml2LT5wc3IuZW5hYmxlZCkNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWlu dGVsX2RwLT5wc3IuZW5hYmxlZCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBmYWxzZTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChkZXZf cHJpdi0+cHNyLnBzcjJfZW5hYmxlZCkgew0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZWcgPSBFRFBfUFNSMl9TVEFUVVMoZGV2X3ByaXYtPnBzci50cmFuc2NvZGVyKTsNCj4g PiArwqDCoMKgwqDCoMKgwqBpZiAoaW50ZWxfZHAtPnBzci5wc3IyX2VuYWJsZWQpIHsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnID0gRURQX1BTUjJfU1RBVFVTKGludGVs X2RwLT5wc3IudHJhbnNjb2Rlcik7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBtYXNrID0gRURQX1BTUjJfU1RBVFVTX1NUQVRFX01BU0s7DQo+ID4gwqDCoMKgwqDCoMKgwqDC oH0gZWxzZSB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZyA9IEVEUF9Q U1JfU1RBVFVTKGRldl9wcml2LT5wc3IudHJhbnNjb2Rlcik7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJlZyA9IEVEUF9QU1JfU1RBVFVTKGludGVsX2RwLT5wc3IudHJhbnNj b2Rlcik7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYXNrID0gRURQX1BT Ul9TVEFUVVNfU1RBVEVfTUFTSzsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+IMKgDQo+ID4g DQo+ID4gLcKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0K PiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4g PiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBlcnIgPSBpbnRlbF9kZV93YWl0X2Zvcl9j bGVhcihkZXZfcHJpdiwgcmVnLCBtYXNrLCA1MCk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChl cnIpDQo+ID4gQEAgLTE1MzUsOCArMTU2MSw4IEBAIHN0YXRpYyBib29sIF9fcHNyX3dhaXRfZm9y X2lkbGVfbG9ja2VkKHN0cnVjdA0KPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJUaW1lZCBv dXQgd2FpdGluZyBmb3IgUFNSIElkbGUgZm9yIHJlLQ0KPiA+IGVuYWJsZVxuIik7DQo+ID4gwqAN Cj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgLyogQWZ0ZXIgdGhlIHVubG9ja2VkIHdhaXQsIHZl cmlmeSB0aGF0IFBTUiBpcyBzdGlsbA0KPiA+IHdhbnRlZCEgKi8NCj4gPiAtwqDCoMKgwqDCoMKg wqBtdXRleF9sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiA+IC3CoMKgwqDCoMKgwqDCoHJl dHVybiBlcnIgPT0gMCAmJiBkZXZfcHJpdi0+cHNyLmVuYWJsZWQ7DQo+ID4gK8KgwqDCoMKgwqDC oMKgbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gZXJyID09IDAgJiYgaW50ZWxfZHAtPnBzci5lbmFibGVkOw0KPiA+IMKgfQ0KPiA+IMKg DQo+ID4gDQo+ID4gwqBzdGF0aWMgaW50IGludGVsX3Bzcl9mYXN0c2V0X2ZvcmNlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlDQo+ID4gKmRldl9wcml2KQ0KPiA+IEBAIC0xNjAyLDExICsxNjI4LDEy IEBAIHN0YXRpYyBpbnQgaW50ZWxfcHNyX2Zhc3RzZXRfZm9yY2Uoc3RydWN0DQo+ID4gZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiBlcnI7DQo+ ID4gwqB9DQo+ID4gwqANCj4gPiANCj4gPiAtaW50IGludGVsX3Bzcl9kZWJ1Z19zZXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1NjQNCj4gPiB2YWwpDQo+ID4gK2ludCBpbnRl bF9wc3JfZGVidWdfc2V0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHU2NCB2YWwpDQo+ID4g wqB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHUzMiBtb2RlID0gdmFsICYgSTkxNV9QU1Jf REVCVUdfTU9ERV9NQVNLOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqB1MzIgb2xkX21vZGU7DQo+ID4g wqDCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZHBfdG9faTkxNShpbnRlbF9kcCk7DQo+IA0KPiBOaXQg cGljayBidXQgaWYgeW91IGNoZWNrIGluIG90aGVyIHBsYWNlcyB3ZSB0cnkgdG8gbGVhdmUgdGhl IGJpZ2dlc3QNCj4gZGVjbGFyYXRpb24gYXQgdGhlIHRvcCBraW5kYSBvZiBmb2xsb3dpbmcgaW52 ZXJ0ZWQgcHlyYW1pZCBzdHlsZSwgeW91DQo+IGFyZSBkb2luZw0KPiB0aGlzIGluIG90aGVyIGZ1 bmN0aW9ucyBhcyB3ZWxsLg0KPiANClRoYW5rcyBmb3IgbGV0dGluZyBtZSBrbm93LCBJJ2xsIHVw ZGF0ZSBpdCAgd2hlcmUgSSBtb2RpZmllZCB0aGUgY29kZQ0KaW4gdGhpcyBwYXRjaC4NCj4gPiDC oA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAodmFsICYgfihJOTE1X1BTUl9ERUJVR19J UlEgfCBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0spDQo+ID4gfHwNCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG1vZGUgPiBJOTE1X1BTUl9ERUJVR19GT1JDRV9QU1IxKSB7DQo+ID4gQEAgLTE2 MTQsMjEgKzE2NDEsMjEgQEAgaW50IGludGVsX3Bzcl9kZWJ1Z19zZXQoc3RydWN0DQo+ID4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHU2NCB2YWwpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4gPiDCoMKgwqDCoMKg wqDCoMKgaWYgKHJldCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBvbGRfbW9kZSA9IGRldl9w cml2LT5wc3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0s7DQo+ID4gLcKgwqDCoMKg wqDCoMKgZGV2X3ByaXYtPnBzci5kZWJ1ZyA9IHZhbDsNCj4gPiArwqDCoMKgwqDCoMKgwqBvbGRf bW9kZSA9IGludGVsX2RwLT5wc3IuZGVidWcgJiBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0s7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgaW50ZWxfZHAtPnBzci5kZWJ1ZyA9IHZhbDsNCj4gPiDCoA0KPiA+ IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqAvKg0KPiA+IMKgwqDCoMKgwqDCoMKgwqAgKiBEbyBpdCBy aWdodCBhd2F5IGlmIGl0J3MgYWxyZWFkeSBlbmFibGVkLCBvdGhlcndpc2UgaXQNCj4gPiB3aWxs IGJlIGRvbmUNCj4gPiDCoMKgwqDCoMKgwqDCoMKgICogd2hlbiBlbmFibGluZyB0aGUgc291cmNl Lg0KPiA+IMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoZGV2X3By aXYtPnBzci5lbmFibGVkKQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwc3Jf aXJxX2NvbnRyb2woZGV2X3ByaXYpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChpbnRlbF9kcC0+ cHNyLmVuYWJsZWQpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBzcl9pcnFf Y29udHJvbChpbnRlbF9kcCk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBtdXRl eF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhf dW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDC oMKgwqDCoGlmIChvbGRfbW9kZSAhPSBtb2RlKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0ID0gaW50ZWxfcHNyX2Zhc3RzZXRfZm9yY2UoZGV2X3ByaXYpOw0KPiA+IEBA IC0xNjM2LDI4ICsxNjYzLDI4IEBAIGludCBpbnRlbF9wc3JfZGVidWdfc2V0KHN0cnVjdA0KPiA+ IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1NjQgdmFsKQ0KPiA+IMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gcmV0Ow0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gLXN0YXRpYyB2b2lkIGlu dGVsX3Bzcl9oYW5kbGVfaXJxKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ID4gKmRldl9wcml2 KQ0KPiA+ICtzdGF0aWMgdm9pZCBpbnRlbF9wc3JfaGFuZGxlX2lycShzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKQ0KPiA+IMKgew0KPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X3BzciAq cHNyID0gJmRldl9wcml2LT5wc3I7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX3Bz ciAqcHNyID0gJmludGVsX2RwLT5wc3I7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKg wqBpbnRlbF9wc3JfZGlzYWJsZV9sb2NrZWQocHNyLT5kcCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKg aW50ZWxfcHNyX2Rpc2FibGVfbG9ja2VkKGludGVsX2RwKTsNCj4gPiDCoMKgwqDCoMKgwqDCoMKg cHNyLT5zaW5rX25vdF9yZWxpYWJsZSA9IHRydWU7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoC8qIGxl dCdzIG1ha2Ugc3VyZSB0aGF0IHNpbmsgaXMgYXdha2VuICovDQo+ID4gLcKgwqDCoMKgwqDCoMKg ZHJtX2RwX2RwY2Rfd3JpdGViKCZwc3ItPmRwLT5hdXgsIERQX1NFVF9QT1dFUiwNCj4gPiBEUF9T RVRfUE9XRVJfRDApOw0KPiA+ICvCoMKgwqDCoMKgwqDCoGRybV9kcF9kcGNkX3dyaXRlYigmaW50 ZWxfZHAtPmF1eCwgRFBfU0VUX1BPV0VSLA0KPiA+IERQX1NFVF9QT1dFUl9EMCk7DQo+ID4gwqB9 DQo+ID4gwqANCj4gPiANCj4gPiDCoHN0YXRpYyB2b2lkIGludGVsX3Bzcl93b3JrKHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykNCj4gPiDCoHsNCj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpkZXZfcHJpdiksIHBzci53b3JrKTsNCj4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0NCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqaW50ZWxf ZHApLCBwc3Iud29yayk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBtdXRleF9s b2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiA+ICvCoMKgwqDCoMKgwqDCoG11dGV4X2xvY2so JmludGVsX2RwLT5wc3IubG9jayk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBp ZiAoIWRldl9wcml2LT5wc3IuZW5hYmxlZCkNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWludGVs X2RwLT5wc3IuZW5hYmxlZCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdv dG8gdW5sb2NrOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKFJFQURfT05D RShkZXZfcHJpdi0+cHNyLmlycV9hdXhfZXJyb3IpKQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpbnRlbF9wc3JfaGFuZGxlX2lycShkZXZfcHJpdik7DQo+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKFJFQURfT05DRShpbnRlbF9kcC0+cHNyLmlycV9hdXhfZXJyb3IpKQ0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9wc3JfaGFuZGxlX2lycShpbnRlbF9k cCk7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgLyoNCj4gPiDCoMKgwqDCoMKg wqDCoMKgICogV2UgaGF2ZSB0byBtYWtlIHN1cmUgUFNSIGlzIHJlYWR5IGZvciByZS1lbmFibGUN Cj4gPiBAQCAtMTY2NSw3ICsxNjkyLDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfcHNyX3dvcmsoc3Ry dWN0IHdvcmtfc3RydWN0DQo+ID4gKndvcmspDQo+ID4gwqDCoMKgwqDCoMKgwqDCoCAqIFBTUiBt aWdodCB0YWtlIHNvbWUgdGltZSB0byBnZXQgZnVsbHkgZGlzYWJsZWQNCj4gPiDCoMKgwqDCoMKg wqDCoMKgICogYW5kIGJlIHJlYWR5IGZvciByZS1lbmFibGUuDQo+ID4gwqDCoMKgwqDCoMKgwqDC oCAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghX19wc3Jfd2FpdF9mb3JfaWRsZV9sb2NrZWQo ZGV2X3ByaXYpKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghX19wc3Jfd2FpdF9mb3JfaWRsZV9s b2NrZWQoaW50ZWxfZHApKQ0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290 byB1bmxvY2s7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgLyoNCj4gPiBAQCAt MTY3MywxMiArMTcwMCwxMiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3Jfd29yayhzdHJ1Y3QNCj4g PiB3b3JrX3N0cnVjdCAqd29yaykNCj4gPiDCoMKgwqDCoMKgwqDCoMKgICogcmVjaGVjay4gU2lu Y2UgcHNyX2ZsdXNoIGZpcnN0IGNsZWFycyB0aGlzIGFuZCB0aGVuDQo+ID4gcmVzY2hlZHVsZXMg d2UNCj4gPiDCoMKgwqDCoMKgwqDCoMKgICogd29uJ3QgZXZlciBtaXNzIGEgZmx1c2ggd2hlbiBi YWlsaW5nIG91dCBoZXJlLg0KPiA+IMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gPiAtwqDCoMKgwqDC oMKgwqBpZiAoZGV2X3ByaXYtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgfHwgZGV2X3ByaXYt DQo+ID4gPnBzci5hY3RpdmUpDQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGludGVsX2RwLT5wc3Iu YnVzeV9mcm9udGJ1ZmZlcl9iaXRzIHx8IGludGVsX2RwLQ0KPiA+ID5wc3IuYWN0aXZlKQ0KPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byB1bmxvY2s7DQo+ID4gwqANCj4g PiANCj4gPiAtwqDCoMKgwqDCoMKgwqBpbnRlbF9wc3JfYWN0aXZhdGUoZGV2X3ByaXYtPnBzci5k cCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgaW50ZWxfcHNyX2FjdGl2YXRlKGludGVsX2RwKTsNCj4g PiDCoHVubG9jazoNCj4gPiAtwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmRldl9wcml2LT5w c3IubG9jayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNy LmxvY2spOw0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gwqAvKioNCj4gPiBAQCAtMTY5Nywy NyArMTcyNCwzNSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9wc3Jfd29yayhzdHJ1Y3QNCj4gPiB3b3Jr X3N0cnVjdCAqd29yaykNCj4gPiDCoHZvaWQgaW50ZWxfcHNyX2ludmFsaWRhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGZyb250YnVmZmVyX2JpdHMsIGVudW0N Cj4gPiBmYl9vcF9vcmlnaW4gb3JpZ2luKQ0KPiA+IMKgew0KPiA+IC3CoMKgwqDCoMKgwqDCoGlm ICghQ0FOX1BTUihkZXZfcHJpdikpDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybjsNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rl cjsNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwOw0KPiA+IMKg DQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKG9yaWdpbiA9PSBPUklHSU5fRkxJUCkNCj4g PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ICvCoMKgwqDCoMKg wqDCoGZvcl9lYWNoX2ludGVsX2RwKCZkZXZfcHJpdi0+ZHJtLCBlbmNvZGVyKSB7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIHBpcGVfZnJvbnRidWZmZXJfYml0 cyA9IGZyb250YnVmZmVyX2JpdHM7DQo+IA0KPiBZb3UgY291bGQgdXNlIGZvcl9lYWNoX2ludGVs X2VuY29kZXJfaXNfcHNyX2VuYWJsZWQoKSwganVzdCBzZXR0aW5nDQo+IGFsbCBiaXRzIG9mIGVu Y29kZXJfbWFzay4NCj4gQ1BVIHRpbWUgd2lsbCBiZSBhbG1vc3QgaWRlbnRpY2FsIGJ1dCB3ZSBj YW4gc2F2ZSBzb21lIGxpbmVzIG9mIGNvZGUNCj4gYW5kIGtlZXAgaXQgY29uc2lzdGVudC4NCj4g DQpUaGUgZm9yX2VhY2hfaW50ZWxfZW5jb2Rlcl9tYXNrX3dpdGhfcHNyX2VuYWJsZWQoKSBtYWNy byBjaGVja3Mgb25seSANCnRoZSBlbmFibGVkIGVuY29kZXJzICh3aGljaCBpcyBjb250YWluZWQg aW4gY3J0YyApLg0KRm9yIHRyYXZlcnNpbmcgYWxsIGludGVsIGVuY29kZXJzIHdoaWNoIGNhbiB1 c2UgcHNyLCBJJ2xsIGFkZCBuZXcNCmZvcl9lYWNoX2ludGVsX2VuY29kZXJfY2FuX3BzcigpIG1h Y3JvLg0KKCBiZWNhdXNlIGluIG9yZGVyIHRvIHNldCBlbmFibGVkIGVuY29kZXIgbWFzaywgd2Ug bmVlZCB0byBhZGQgYW4NCmFkZGl0aW9uYWwgbG9vcCwgSSBwcmVmZXIgdG8gdXNlIG5ldyBmb3Jf ZWFjaF9pbnRlbF9lbmNvZGVyX2Nhbl9wc3IoKQ0KaGVyZS4gDQpjZi4gZHJtIGNvcmUgY29kZSB1 c2VzIHRoZSBmdWxsX2VuY29kZXJfbWFzaygpIGZvciBzZXR0aW5nIGZ1bGwNCmVuY29kZXJfbWFz ay4gZnVsbF9lbmNvZGVyX21hc2soKWZ1bmN0aW9uIHVzZSBsb29wIGZvciBzZXR0aW5nIGZ1bGwN CmVuY29kZXIgbWFzay4pDQoNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoG11dGV4 X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7DQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFkZXZf cHJpdi0+cHNyLmVuYWJsZWQpIHsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ID4gLcKgwqDCoMKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9kcCA9IGVuY190b19pbnRlbF9kcChlbmNvZGVy KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFDQU5fUFNSKGludGVs X2RwKSkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYg KG9yaWdpbiA9PSBPUklHSU5fRkxJUCkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOw0KPiANCj4gDQo+IElmIG9yaWdpbiA9PSBPUklH SU5fRkxJUCB3aHkgd2FzdGVyIHRpbWUgaXRlcmF0aW5nIG92ZXIgYW55IGludGVsX2RwPw0KPiAN CiBpdCdzIGEgd3JvbmcgbW9kaWZpY2F0aW9uIGZyb20gdGhlIHByZXZpb3VzIHZlcnNpb24uIEkn bGwgZml4IGl0Lg0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0 ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWYgKCFpbnRlbF9kcC0+cHNyLmVuYWJsZWQpIHsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmaW50ZWxfZHAt PnBzci5sb2NrKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnRpbnVlOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBmcm9udGJ1ZmZlcl9iaXRzICY9IElOVEVM X0ZST05UQlVGRkVSX0FMTF9NQVNLKGRldl9wcml2LQ0KPiA+ID5wc3IucGlwZSk7DQo+ID4gLcKg wqDCoMKgwqDCoMKgZGV2X3ByaXYtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgfD0gZnJvbnRi dWZmZXJfYml0czsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGlwZV9mcm9u dGJ1ZmZlcl9iaXRzICY9DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhpbnRlbF9kcC0NCj4gPiA+cHNy LnBpcGUpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9kcC0+cHNy LmJ1c3lfZnJvbnRidWZmZXJfYml0cyB8PQ0KPiA+IHBpcGVfZnJvbnRidWZmZXJfYml0czsNCj4g PiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChmcm9udGJ1ZmZlcl9iaXRzKQ0KPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF9wc3JfZXhpdChkZXZfcHJpdik7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChwaXBlX2Zyb250YnVmZmVy X2JpdHMpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpbnRlbF9wc3JfZXhpdChpbnRlbF9kcCk7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDC oMKgwqBtdXRleF91bmxvY2soJmRldl9wcml2LT5wc3IubG9jayk7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4g PiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gwqB9DQo+ID4gLQ0KPiA+IMKgLyoNCj4gPiDCoCAqIFdo ZW4gd2Ugd2lsbCBiZSBjb21wbGV0ZWx5IHJlbHkgb24gUFNSMiBTL1cgdHJhY2tpbmcgaW4gZnV0 dXJlLA0KPiA+IMKgICogaW50ZWxfcHNyX2ZsdXNoKCkgd2lsbCBpbnZhbGlkYXRlIGFuZCBmbHVz aCB0aGUgUFNSIGZvcg0KPiA+IE9SSUdJTl9GTElQDQo+ID4gQEAgLTE3MjUsMTUgKzE3NjAsMTUg QEAgdm9pZCBpbnRlbF9wc3JfaW52YWxpZGF0ZShzdHJ1Y3QNCj4gPiBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwNCj4gPiDCoCAqIGFjY29yZGluZ2x5IGluIGZ1dHVyZS4NCj4gPiDCoCAqLw0K PiA+IMKgc3RhdGljIHZvaWQNCj4gPiAtdGdsX2RjM2NvX2ZsdXNoKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5z aWduZWQgaW50IGZyb250YnVmZmVyX2JpdHMsIGVudW0gZmJfb3Bfb3JpZ2luDQo+ID4gb3JpZ2lu KQ0KPiA+ICt0Z2xfZGMzY29fZmx1c2goc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdW5zaWdu ZWQgaW50DQo+ID4gZnJvbnRidWZmZXJfYml0cywNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZW51bSBmYl9vcF9vcmlnaW4gb3JpZ2luKQ0KPiA+IMKgew0KPiA+IC3CoMKgwqDC oMKgwqDCoG11dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7DQo+ID4gK8KgwqDCoMKgwqDC oMKgbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4gPiDCoA0KPiA+IA0KPiA+IC3C oMKgwqDCoMKgwqDCoGlmICghZGV2X3ByaXYtPnBzci5kYzNjb19lbmFibGVkKQ0KPiA+ICvCoMKg wqDCoMKgwqDCoGlmICghaW50ZWxfZHAtPnBzci5kYzNjb19lbmFibGVkKQ0KPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byB1bmxvY2s7DQo+ID4gwqANCj4gPiANCj4gPiAt wqDCoMKgwqDCoMKgwqBpZiAoIWRldl9wcml2LT5wc3IucHNyMl9lbmFibGVkIHx8ICFkZXZfcHJp di0+cHNyLmFjdGl2ZSkNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWludGVsX2RwLT5wc3IucHNy Ml9lbmFibGVkIHx8ICFpbnRlbF9kcC0+cHNyLmFjdGl2ZSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGdvdG8gdW5sb2NrOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDC oMKgwqDCoC8qDQo+ID4gQEAgLTE3NDEsMTUgKzE3NzYsMTUgQEAgdGdsX2RjM2NvX2ZsdXNoKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlDQo+ID4gKmRldl9wcml2LA0KPiA+IMKgwqDCoMKgwqDCoMKg wqAgKiB3aGVuIGRlbGF5ZWQgd29yayBzY2hlZHVsZXMgdGhhdCBtZWFucyBkaXNwbGF5IGhhcyBi ZWVuDQo+ID4gaWRsZS4NCj4gPiDCoMKgwqDCoMKgwqDCoMKgICovDQo+ID4gwqDCoMKgwqDCoMKg wqDCoGlmICghKGZyb250YnVmZmVyX2JpdHMgJg0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoCBJ TlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhkZXZfcHJpdi0+cHNyLnBpcGUpKSkNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgSU5URUxfRlJPTlRCVUZGRVJfQUxMX01BU0soaW50ZWxfZHAtPnBz ci5waXBlKSkpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHVubG9j azsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoHRnbF9wc3IyX2VuYWJsZV9kYzNj byhkZXZfcHJpdik7DQo+ID4gLcKgwqDCoMKgwqDCoMKgbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1f d3EsICZkZXZfcHJpdi0+cHNyLmRjM2NvX3dvcmssDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X3ByaXYtPnBzci5kYzNjb19leGl0X2RlbGF5 KTsNCj4gPiArwqDCoMKgwqDCoMKgwqB0Z2xfcHNyMl9lbmFibGVfZGMzY28oaW50ZWxfZHApOw0K PiA+ICvCoMKgwqDCoMKgwqDCoG1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmaW50ZWxfZHAt PnBzci5kYzNjb193b3JrLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGludGVsX2RwLT5wc3IuZGMzY29fZXhpdF9kZWxheSk7DQo+ID4gwqANCj4g PiANCj4gPiDCoHVubG9jazoNCj4gPiAtwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmRldl9w cml2LT5wc3IubG9jayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZpbnRlbF9k cC0+cHNyLmxvY2spOw0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gwqAvKioNCj4gPiBAQCAt MTc2OCw0NSArMTgwMyw1NyBAQCB0Z2xfZGMzY29fZmx1c2goc3RydWN0IGRybV9pOTE1X3ByaXZh dGUNCj4gPiAqZGV2X3ByaXYsDQo+ID4gwqB2b2lkIGludGVsX3Bzcl9mbHVzaChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBmcm9udGJ1ZmZlcl9iaXRzLCBlbnVtIGZiX29wX29yaWdp bg0KPiA+IG9yaWdpbikNCj4gPiDCoHsNCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoIUNBTl9QU1Io ZGV2X3ByaXYpKQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRlbF9kcDsNCj4gPiDCoA0KPiA+IA0KPiA+ IC3CoMKgwqDCoMKgwqDCoGlmIChvcmlnaW4gPT0gT1JJR0lOX0ZMSVApIHsNCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGdsX2RjM2NvX2ZsdXNoKGRldl9wcml2LCBmcm9udGJ1 ZmZlcl9iaXRzLA0KPiA+IG9yaWdpbik7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybjsNCj4gPiAtwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKgwqDCoMKgZm9y X2VhY2hfaW50ZWxfZHAoJmRldl9wcml2LT5kcm0sIGVuY29kZXIpIHsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoZW5jb2Rlcik7 DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBtdXRleF9sb2NrKCZkZXZfcHJpdi0+ cHNyLmxvY2spOw0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghZGV2X3ByaXYtPnBzci5lbmFibGVk KSB7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmZGV2 X3ByaXYtPnBzci5sb2NrKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuOw0KPiA+IC3CoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKENBTl9QU1IoaW50ZWxfZHApKSB7DQo+IA0KPiBBZ2FpbiBrZWVwIGl0IGNvbnNp c3RlbnQsIGluIGludGVsX3Bzcl9pbnZhbGlkYXRlKCkgeW91IGFyZSBkb2luZw0KPiBpZiAoQ0FO X1BTUihpbnRlbF9kcCkpDQo+IMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZS4uLi4NCj4gSSBwcmVm ZXIgZG8gdGhhdCBhbmQgc2F2ZSBvbmUgdGFiIGV2ZW4gYmV0dGVyIGlmIHlvdSB1c2UNCj4gZm9y X2VhY2hfaW50ZWxfZW5jb2Rlcl9pc19wc3JfZW5hYmxlZCgpLg0KPiANCndpbGwgdXBkYXRlLg0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWdu ZWQgcGlwZV9mcm9udGJ1ZmZlcl9iaXRzID0NCj4gPiBmcm9udGJ1ZmZlcl9iaXRzOw0KPiA+IMKg DQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgZnJvbnRidWZmZXJfYml0cyAmPSBJTlRFTF9GUk9O VEJVRkZFUl9BTExfTUFTSyhkZXZfcHJpdi0NCj4gPiA+cHNyLnBpcGUpOw0KPiA+IC3CoMKgwqDC oMKgwqDCoGRldl9wcml2LT5wc3IuYnVzeV9mcm9udGJ1ZmZlcl9iaXRzICY9IH5mcm9udGJ1ZmZl cl9iaXRzOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKG9yaWdpbiA9PSBPUklHSU5fRkxJUCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRnbF9kYzNjb19mbHVz aChpbnRlbF9kcCwNCj4gPiBmcm9udGJ1ZmZlcl9iaXRzLCBvcmlnaW4pOw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNv bnRpbnVlOw0KPiANCj4gSGVyZSBtYWtlcyBzZW5zZSBjaGVjayBpZiBvcmlnaW4gPT0gT1JJR0lO X0ZMSVAgaW4gdGhlIGxvb3AgYnV0IHRoYXQNCj4gaXMgbm90IHRoZSBjYXNlIGluIF9pbnZhbGlk YWRlKCkNCj4gDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgbXV0ZXhfbG9jaygmaW50ZWxfZHAtPnBzci5sb2NrKTsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghaW50ZWxfZHAtPnBzci5l bmFibGVkKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNyLmxvY2spOw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNvbnRpbnVlOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgLyogQnkg ZGVmaW5pdGlvbiBmbHVzaCA9IGludmFsaWRhdGUgKyBmbHVzaCAqLw0KPiA+IC3CoMKgwqDCoMKg wqDCoGlmIChmcm9udGJ1ZmZlcl9iaXRzKQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBwc3JfZm9yY2VfaHdfdHJhY2tpbmdfZXhpdChkZXZfcHJpdik7DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwaXBlX2Zyb250YnVmZmVyX2Jp dHMgJj0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBJTlRFTF9GUk9OVEJVRkZFUl9BTExfTUFTSyhpbnRlbF9kcA0KPiA+ IC0+cHNyLnBpcGUpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaW50ZWxfZHAtPnBzci5idXN5X2Zyb250YnVmZmVyX2JpdHMgJj0NCj4gPiB+cGlw ZV9mcm9udGJ1ZmZlcl9iaXRzOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYg KCFkZXZfcHJpdi0+cHNyLmFjdGl2ZSAmJiAhZGV2X3ByaXYtDQo+ID4gPnBzci5idXN5X2Zyb250 YnVmZmVyX2JpdHMpDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNjaGVkdWxl X3dvcmsoJmRldl9wcml2LT5wc3Iud29yayk7DQo+ID4gLcKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5s b2NrKCZkZXZfcHJpdi0+cHNyLmxvY2spOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogQnkgZGVmaW5pdGlvbiBmbHVzaCA9IGludmFsaWRhdGUg KyBmbHVzaA0KPiA+ICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAocGlwZV9mcm9udGJ1ZmZlcl9iaXRzKQ0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBzcl9mb3Jj ZV9od190cmFja2luZ19leGl0KGludGVsX2RwDQo+ID4gKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIWludGVsX2RwLT5wc3Iu YWN0aXZlICYmICFpbnRlbF9kcC0NCj4gPiA+cHNyLmJ1c3lfZnJvbnRidWZmZXJfYml0cykNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBzY2hlZHVsZV93b3JrKCZpbnRlbF9kcC0+cHNyLndvcmspOw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZpbnRl bF9kcC0+cHNyLmxvY2spOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+IMKgfQ0KPiA+IMKgDQo+ID4gDQo+ID4gwqAvKioNCj4g PiDCoCAqIGludGVsX3Bzcl9pbml0IC0gSW5pdCBiYXNpYyBQU1Igd29yayBhbmQgbXV0ZXguDQo+ ID4gLSAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgcHJpdmF0ZQ0KPiA+ICsgKiBAaW50ZWxfZHA6 IEludGVsIERQDQo+ID4gwqAgKg0KPiA+IC0gKiBUaGlzIGZ1bmN0aW9uIGlzwqAgY2FsbGVkIG9u bHkgb25jZSBhdCBkcml2ZXIgbG9hZCB0byBpbml0aWFsaXplDQo+ID4gYmFzaWMNCj4gPiAtICog UFNSIHN0dWZmLg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgaW5p dGlhbGl6aW5nIGNvbm5lY3Rvci4NCj4gPiArICogKHRoZSBpbml0aWFsaXppbmcgb2YgY29ubmVj dG9yIHRyZWF0cyB0aGUgaGFuZGxpbmcgb2YgY29ubmVjdG9yDQo+ID4gY2FwYWJpbGl0aWVzKQ0K PiA+ICsgKiBBbmQgaXQgaW5pdGlhbGl6ZXMgYmFzaWMgUFNSIHN0dWZmIGZvciBlYWNoIERQIEVu Y29kZXIuDQo+ID4gwqAgKi8NCj4gPiAtdm9pZCBpbnRlbF9wc3JfaW5pdChzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ID4gK3ZvaWQgaW50ZWxfcHNyX2luaXQoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkNCj4gPiDCoHsNCj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gPiArDQo+ ID4gwqDCoMKgwqDCoMKgwqDCoGlmICghSEFTX1BTUihkZXZfcHJpdikpDQo+ID4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKg wqDCoMKgwqBpZiAoIWRldl9wcml2LT5wc3Iuc2lua19zdXBwb3J0KQ0KPiA+ICvCoMKgwqDCoMKg wqDCoGlmICghaW50ZWxfZHAtPnBzci5zaW5rX3N1cHBvcnQpDQo+ID4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDC oMKgaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKQ0KPiA+IEBAIC0xODI0LDE0ICsxODcxLDE0IEBA IHZvaWQgaW50ZWxfcHNyX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUNCj4gPiAqZGV2X3By aXYpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoC8qIFNldCBsaW5rX3N0YW5kYnkgeCBsaW5rX29mZiBk ZWZhdWx0cyAqLw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAoSVNfSEFTV0VMTChkZXZfcHJpdikg fHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoC8qIEhTVyBhbmQgQkRXIHJlcXVpcmUgd29ya2Fyb3VuZHMgdGhhdCB3ZSBkb24ndA0K PiA+IGltcGxlbWVudC4gKi8NCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2 X3ByaXYtPnBzci5saW5rX3N0YW5kYnkgPSBmYWxzZTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaW50ZWxfZHAtPnBzci5saW5rX3N0YW5kYnkgPSBmYWxzZTsNCj4gPiDCoMKg wqDCoMKgwqDCoMKgZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDEyKQ0KPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRm9yIG5ldyBwbGF0Zm9ybXMgdXAgdG8gVEdM IGxldCdzIHJlc3BlY3QgVkJUDQo+ID4gYmFjayBhZ2FpbiAqLw0KPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkZXZfcHJpdi0+cHNyLmxpbmtfc3RhbmRieSA9IGRldl9wcml2LQ0K PiA+ID52YnQucHNyLmZ1bGxfbGluazsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaW50ZWxfZHAtPnBzci5saW5rX3N0YW5kYnkgPSBkZXZfcHJpdi0NCj4gPiA+dmJ0LnBzci5m dWxsX2xpbms7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqBJTklUX1dPUksoJmRl dl9wcml2LT5wc3Iud29yaywgaW50ZWxfcHNyX3dvcmspOw0KPiA+IC3CoMKgwqDCoMKgwqDCoElO SVRfREVMQVlFRF9XT1JLKCZkZXZfcHJpdi0+cHNyLmRjM2NvX3dvcmssDQo+ID4gdGdsX2RjM2Nv X2Rpc2FibGVfd29yayk7DQo+ID4gLcKgwqDCoMKgwqDCoMKgbXV0ZXhfaW5pdCgmZGV2X3ByaXYt PnBzci5sb2NrKTsNCj4gPiArwqDCoMKgwqDCoMKgwqBJTklUX1dPUksoJmludGVsX2RwLT5wc3Iu d29yaywgaW50ZWxfcHNyX3dvcmspOw0KPiA+ICvCoMKgwqDCoMKgwqDCoElOSVRfREVMQVlFRF9X T1JLKCZpbnRlbF9kcC0+cHNyLmRjM2NvX3dvcmssDQo+ID4gdGdsX2RjM2NvX2Rpc2FibGVfd29y ayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfaW5pdCgmaW50ZWxfZHAtPnBzci5sb2NrKTsN Cj4gPiDCoH0NCj4gPiDCoA0KPiA+IA0KPiA+IMKgc3RhdGljIGludCBwc3JfZ2V0X3N0YXR1c19h bmRfZXJyb3Jfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcA0KPiA+ICppbnRlbF9kcCwNCj4gPiBAQCAt MTg1Nyw3ICsxOTA0LDcgQEAgc3RhdGljIHZvaWQgcHNyX2FscG1fY2hlY2soc3RydWN0IGludGVs X2RwDQo+ID4gKmludGVsX2RwKQ0KPiA+IMKgew0KPiA+IMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkcF90b19pOTE1KGludGVsX2RwKTsNCj4gPiDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9kcF9hdXggKmF1eCA9ICZpbnRlbF9kcC0+YXV4Ow0K PiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X3BzciAqcHNyID0gJmRldl9wcml2LT5wc3I7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5w c3I7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHU4IHZhbDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgaW50 IHI7DQo+ID4gwqANCj4gPiANCj4gPiBAQCAtMTg4NCw3ICsxOTMxLDcgQEAgc3RhdGljIHZvaWQg cHNyX2FscG1fY2hlY2soc3RydWN0IGludGVsX2RwDQo+ID4gKmludGVsX2RwKQ0KPiA+IMKgc3Rh dGljIHZvaWQgcHNyX2NhcGFiaWxpdHlfY2hhbmdlZF9jaGVjayhzdHJ1Y3QgaW50ZWxfZHANCj4g PiAqaW50ZWxfZHApDQo+ID4gwqB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiA+IC3CoMKgwqDC oMKgwqDCoHN0cnVjdCBpOTE1X3BzciAqcHNyID0gJmRldl9wcml2LT5wc3I7DQo+ID4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5wc3I7DQo+ID4gwqDC oMKgwqDCoMKgwqDCoHU4IHZhbDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgaW50IHI7DQo+ID4gwqAN Cj4gPiANCj4gPiBAQCAtMTkwOCwxOCArMTk1NSwxOCBAQCBzdGF0aWMgdm9pZA0KPiA+IHBzcl9j YXBhYmlsaXR5X2NoYW5nZWRfY2hlY2soc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkNCj4gPiDC oHZvaWQgaW50ZWxfcHNyX3Nob3J0X3B1bHNlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApDQo+ ID4gwqB7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBp OTE1X3BzciAqcHNyID0gJmRldl9wcml2LT5wc3I7DQo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGludGVsX3BzciAqcHNyID0gJmludGVsX2RwLT5wc3I7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoHU4 IHN0YXR1cywgZXJyb3Jfc3RhdHVzOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBjb25zdCB1OCBlcnJv cnMgPSBEUF9QU1JfUkZCX1NUT1JBR0VfRVJST1IgfA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERQX1BTUl9WU0NfU0RQX1VOQ09SUkVDVEFC TEVfRVJST1IgfA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIERQX1BTUl9MSU5LX0NSQ19FUlJPUjsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKg wqDCoMKgwqDCoGlmICghQ0FOX1BTUihkZXZfcHJpdikgfHwgIWludGVsX2RwX2lzX2VkcChpbnRl bF9kcCkpDQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFDQU5fUFNSKGludGVsX2RwKSB8fCAhaW50 ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybjsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBtdXRleF9sb2Nr KCZwc3ItPmxvY2spOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFwc3It PmVuYWJsZWQgfHwgcHNyLT5kcCAhPSBpbnRlbF9kcCkNCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAo IXBzci0+ZW5hYmxlZCkNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8g ZXhpdDsNCj4gPiDCoA0KPiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAocHNyX2dldF9zdGF0 dXNfYW5kX2Vycm9yX3N0YXR1cyhpbnRlbF9kcCwgJnN0YXR1cywNCj4gPiAmZXJyb3Jfc3RhdHVz KSkgew0KPiA+IEBAIC0xOTYyLDE1ICsyMDA5LDE0IEBAIHZvaWQgaW50ZWxfcHNyX3Nob3J0X3B1 bHNlKHN0cnVjdCBpbnRlbF9kcA0KPiA+ICppbnRlbF9kcCkNCj4gPiDCoA0KPiA+IA0KPiA+IMKg Ym9vbCBpbnRlbF9wc3JfZW5hYmxlZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQ0KPiA+IMKg ew0KPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRwX3RvX2k5MTUoaW50ZWxfZHApOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqBib29sIHJldDsNCj4g PiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmICghQ0FOX1BTUihkZXZfcHJpdikgfHwg IWludGVsX2RwX2lzX2VkcChpbnRlbF9kcCkpDQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFDQU5f UFNSKGludGVsX2RwKSB8fCAhaW50ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkNCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsNCj4gPiDCoA0KPiA+IA0KPiA+ IC3CoMKgwqDCoMKgwqDCoG11dGV4X2xvY2soJmRldl9wcml2LT5wc3IubG9jayk7DQo+ID4gLcKg wqDCoMKgwqDCoMKgcmV0ID0gKGRldl9wcml2LT5wc3IuZHAgPT0gaW50ZWxfZHAgJiYgZGV2X3By aXYtDQo+ID4gPnBzci5lbmFibGVkKTsNCj4gPiAtwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2so JmRldl9wcml2LT5wc3IubG9jayk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfbG9jaygmaW50 ZWxfZHAtPnBzci5sb2NrKTsNCj4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBpbnRlbF9kcC0+cHNy LmVuYWJsZWQ7DQo+ID4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZpbnRlbF9kcC0+cHNy LmxvY2spOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ ID4gwqB9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50 ZWxfcHNyLmgNCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfcHNyLmgN Cj4gPiBpbmRleCAwYTUxNzk3OGU4YWYuLjI3NTM5NzZhY2MyNiAxMDA2NDQNCj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Bzci5oDQo+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9wc3IuaA0KPiA+IEBAIC0xOCw3ICsxOCw3IEBA IHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGU7DQo+ID4gwqBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGU7DQo+ID4gwqBzdHJ1Y3QgaW50ZWxfcGxhbmU7DQo+ID4gwqANCj4gPiANCj4gPiAtI2RlZmlu ZSBDQU5fUFNSKGRldl9wcml2KSAoSEFTX1BTUihkZXZfcHJpdikgJiYgZGV2X3ByaXYtDQo+ID4g PnBzci5zaW5rX3N1cHBvcnQpDQo+ID4gKyNkZWZpbmUgQ0FOX1BTUihpbnRlbF9kcCkgKEhBU19Q U1IoZHBfdG9faTkxNShpbnRlbF9kcCkpICYmDQo+ID4gaW50ZWxfZHAtPnBzci5zaW5rX3N1cHBv cnQpDQo+ID4gwqB2b2lkIGludGVsX3Bzcl9pbml0X2RwY2Qoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCk7DQo+ID4gwqB2b2lkIGludGVsX3Bzcl9lbmFibGUoc3RydWN0IGludGVsX2RwICppbnRl bF9kcCwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsDQo+ID4gQEAgLTI4LDIwICsy OCwxOSBAQCB2b2lkIGludGVsX3Bzcl9kaXNhYmxlKHN0cnVjdCBpbnRlbF9kcA0KPiA+ICppbnRl bF9kcCwNCj4gPiDCoHZvaWQgaW50ZWxfcHNyX3VwZGF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVs X2RwLA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUNCj4gPiAqY29ubl9zdGF0ZSk7DQo+ID4gLWludCBpbnRlbF9wc3JfZGVidWdfc2V0KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTY0DQo+ID4gdmFsdWUpOw0KPiA+ICtp bnQgaW50ZWxfcHNyX2RlYnVnX3NldChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCB1NjQgdmFs dWUpOw0KPiA+IMKgdm9pZCBpbnRlbF9wc3JfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cywNCj4gPiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGZiX29wX29yaWdp biBvcmlnaW4pOw0KPiA+IMKgdm9pZCBpbnRlbF9wc3JfZmx1c2goc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LA0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdW5zaWduZWQgZnJvbnRidWZmZXJfYml0cywNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gZmJfb3Bfb3JpZ2luIG9yaWdpbik7DQo+ID4gLXZv aWQgaW50ZWxfcHNyX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsNCj4g PiArdm9pZCBpbnRlbF9wc3JfaW5pdChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKTsNCj4gPiDC oHZvaWQgaW50ZWxfcHNyX2NvbXB1dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAs DQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7DQo+ID4gLXZvaWQg aW50ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwg dTMyDQo+ID4gcHNyX2lpcik7DQo+ID4gK3ZvaWQgaW50ZWxfcHNyX2lycV9oYW5kbGVyKHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHAsIHUzMg0KPiA+IHBzcl9paXIpOw0KPiA+IMKgdm9pZCBpbnRl bF9wc3Jfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCk7DQo+ID4gLWludCBp bnRlbF9wc3Jfd2FpdF9mb3JfaWRsZShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZQ0KPiA+ ICpuZXdfY3J0Y19zdGF0ZSwNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgKm91dF92YWx1ZSk7DQo+ID4gK3ZvaWQgaW50ZWxfcHNy X3dhaXRfZm9yX2lkbGUoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUNCj4gPiAqbmV3X2Ny dGNfc3RhdGUpOw0KPiA+IMKgYm9vbCBpbnRlbF9wc3JfZW5hYmxlZChzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKTsNCj4gPiDCoGludCBpbnRlbF9wc3IyX3NlbF9mZXRjaF91cGRhdGUoc3RydWN0 IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUsDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjKTsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p bnRlbF9zcHJpdGUuYw0KPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9z cHJpdGUuYw0KPiA+IGluZGV4IDUyMTIwZjU2ZGM1NC4uOTg2MDI4ZGVmZmQyIDEwMDY0NA0KPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfc3ByaXRlLmMNCj4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX3Nwcml0ZS5jDQo+ID4gQEAg LTk2LDcgKzk2LDYgQEAgdm9pZCBpbnRlbF9waXBlX3VwZGF0ZV9zdGFydChjb25zdCBzdHJ1Y3QN Cj4gPiBpbnRlbF9jcnRjX3N0YXRlICpuZXdfY3J0Y19zdGF0ZSkNCj4gPiDCoMKgwqDCoMKgwqDC oMKgYm9vbCBuZWVkX3Zsdl9kc2lfd2EgPSAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikgfHwNCj4g PiBJU19DSEVSUllWSUVXKGRldl9wcml2KSkgJiYNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGludGVsX2NydGNfaGFzX3R5cGUobmV3X2NydGNfc3RhdGUsDQo+ID4gSU5URUxf T1VUUFVUX0RTSSk7DQo+ID4gwqDCoMKgwqDCoMKgwqDCoERFRklORV9XQUlUKHdhaXQpOw0KPiA+ IC3CoMKgwqDCoMKgwqDCoHUzMiBwc3Jfc3RhdHVzOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKg wqDCoMKgwqDCoGlmIChuZXdfY3J0Y19zdGF0ZS0+dWFwaS5hc3luY19mbGlwKQ0KPiA+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+IEBAIC0xMjIsMTAgKzEyMSw3 IEBAIHZvaWQgaW50ZWxfcGlwZV91cGRhdGVfc3RhcnQoY29uc3Qgc3RydWN0DQo+ID4gaW50ZWxf Y3J0Y19zdGF0ZSAqbmV3X2NydGNfc3RhdGUpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoCAqIFZCTCBp bnRlcnJ1cHRzIHdpbGwgc3RhcnQgdGhlIFBTUiBleGl0IGFuZCBwcmV2ZW50IGEgUFNSDQo+ID4g wqDCoMKgwqDCoMKgwqDCoCAqIHJlLWVudHJ5IGFzIHdlbGwuDQo+ID4gwqDCoMKgwqDCoMKgwqDC oCAqLw0KPiA+IC3CoMKgwqDCoMKgwqDCoGlmIChpbnRlbF9wc3Jfd2FpdF9mb3JfaWRsZShuZXdf Y3J0Y19zdGF0ZSwgJnBzcl9zdGF0dXMpKQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkcm1fZXJyKCZkZXZfcHJpdi0+ZHJtLA0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIlBTUiBpZGxlIHRpbWVkIG91dCAweCV4LCBhdG9taWMg dXBkYXRlIG1heQ0KPiA+IGZhaWxcbiIsDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwc3Jfc3RhdHVzKTsNCj4gPiArwqDCoMKgwqDCoMKgwqBpbnRl bF9wc3Jfd2FpdF9mb3JfaWRsZShuZXdfY3J0Y19zdGF0ZSk7DQo+ID4gwqANCj4gPiANCj4gPiDC oMKgwqDCoMKgwqDCoMKgbG9jYWxfaXJxX2Rpc2FibGUoKTsNCj4gPiDCoA0KPiA+IA0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oDQo+ID4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oDQo+ID4gaW5kZXggM2VkYzljNGYyZDIxLi4zODE2YjEy YWFjMGMgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0K PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgNCj4gPiBAQCAtNDc4LDQy ICs0NzgsNiBAQCBzdHJ1Y3QgaTkxNV9kcnJzIHsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgZW51bSBk cnJzX3N1cHBvcnRfdHlwZSB0eXBlOw0KPiA+IMKgfTsNCj4gPiDCoA0KPiA+IA0KPiA+IC1zdHJ1 Y3QgaTkxNV9wc3Igew0KPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBtdXRleCBsb2NrOw0KPiA+ IC0NCj4gPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJVR19NT0RFX01BU0vCoMKgwqDCoMKgwqDCoDB4 MGYNCj4gPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJVR19ERUZBVUxUwqDCoMKgwqDCoMKgwqDCoMKg MHgwMA0KPiA+IC0jZGVmaW5lIEk5MTVfUFNSX0RFQlVHX0RJU0FCTEXCoMKgwqDCoMKgwqDCoMKg wqAweDAxDQo+ID4gLSNkZWZpbmUgSTkxNV9QU1JfREVCVUdfRU5BQkxFwqDCoMKgwqDCoMKgwqDC oMKgwqAweDAyDQo+ID4gLSNkZWZpbmUgSTkxNV9QU1JfREVCVUdfRk9SQ0VfUFNSMcKgwqDCoMKg wqDCoDB4MDMNCj4gPiAtI2RlZmluZSBJOTE1X1BTUl9ERUJVR19JUlHCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoDB4MTANCj4gPiAtDQo+ID4gLcKgwqDCoMKgwqDCoMKgdTMyIGRlYnVnOw0KPiA+ IC3CoMKgwqDCoMKgwqDCoGJvb2wgc2lua19zdXBwb3J0Ow0KPiA+IC3CoMKgwqDCoMKgwqDCoGJv b2wgZW5hYmxlZDsNCj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmRwOw0KPiA+ IC3CoMKgwqDCoMKgwqDCoGVudW0gcGlwZSBwaXBlOw0KPiA+IC3CoMKgwqDCoMKgwqDCoGVudW0g dHJhbnNjb2RlciB0cmFuc2NvZGVyOw0KPiA+IC3CoMKgwqDCoMKgwqDCoGJvb2wgYWN0aXZlOw0K PiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOw0KPiA+IC3CoMKgwqDC oMKgwqDCoHVuc2lnbmVkIGJ1c3lfZnJvbnRidWZmZXJfYml0czsNCj4gPiAtwqDCoMKgwqDCoMKg wqBib29sIHNpbmtfcHNyMl9zdXBwb3J0Ow0KPiA+IC3CoMKgwqDCoMKgwqDCoGJvb2wgbGlua19z dGFuZGJ5Ow0KPiA+IC3CoMKgwqDCoMKgwqDCoGJvb2wgY29sb3JpbWV0cnlfc3VwcG9ydDsNCj4g PiAtwqDCoMKgwqDCoMKgwqBib29sIHBzcjJfZW5hYmxlZDsNCj4gPiAtwqDCoMKgwqDCoMKgwqBi b29sIHBzcjJfc2VsX2ZldGNoX2VuYWJsZWQ7DQo+ID4gLcKgwqDCoMKgwqDCoMKgdTggc2lua19z eW5jX2xhdGVuY3k7DQo+ID4gLcKgwqDCoMKgwqDCoMKga3RpbWVfdCBsYXN0X2VudHJ5X2F0dGVt cHQ7DQo+ID4gLcKgwqDCoMKgwqDCoMKga3RpbWVfdCBsYXN0X2V4aXQ7DQo+ID4gLcKgwqDCoMKg wqDCoMKgYm9vbCBzaW5rX25vdF9yZWxpYWJsZTsNCj4gPiAtwqDCoMKgwqDCoMKgwqBib29sIGly cV9hdXhfZXJyb3I7DQo+ID4gLcKgwqDCoMKgwqDCoMKgdTE2IHN1X3hfZ3JhbnVsYXJpdHk7DQo+ ID4gLcKgwqDCoMKgwqDCoMKgYm9vbCBkYzNjb19lbmFibGVkOw0KPiA+IC3CoMKgwqDCoMKgwqDC oHUzMiBkYzNjb19leGl0X2RlbGF5Ow0KPiA+IC3CoMKgwqDCoMKgwqDCoHN0cnVjdCBkZWxheWVk X3dvcmsgZGMzY29fd29yazsNCj4gPiAtwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2RwX3ZzY19z ZHAgdnNjOw0KPiA+IC19Ow0KPiA+IC0NCj4gPiDCoCNkZWZpbmUgUVVJUktfTFZEU19TU0NfRElT QUJMRSAoMTw8MSkNCj4gPiDCoCNkZWZpbmUgUVVJUktfSU5WRVJUX0JSSUdIVE5FU1MgKDE8PDIp DQo+ID4gwqAjZGVmaW5lIFFVSVJLX0JBQ0tMSUdIVF9QUkVTRU5UICgxPDwzKQ0KPiA+IEBAIC0x MDQxLDggKzEwMDUsNiBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7DQo+ID4gwqANCj4gPiAN Cj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGk5MTVfcG93ZXJfZG9tYWlucyBwb3dlcl9kb21h aW5zOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDCoMKgc3RydWN0IGk5MTVfcHNyIHBz cjsNCj4gPiAtDQo+ID4gwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBpOTE1X2dwdV9lcnJvciBncHVf ZXJyb3I7DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKnZsdl9wY3R4Ow0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2lycS5jDQo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jDQo+ ID4gaW5kZXggYTMxOTgwZjY5MTIwLi45MDdhMzY2ZTljMzIgMTAwNjQ0DQo+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYw0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfaXJxLmMNCj4gPiBAQCAtMjA4OCwxMCArMjA4OCwyMiBAQCBzdGF0aWMgdm9pZCBp dmJfZGlzcGxheV9pcnFfaGFuZGxlcihzdHJ1Y3QNCj4gPiBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGl2Yl9lcnJfaW50X2hh bmRsZXIoZGV2X3ByaXYpOw0KPiA+IMKgDQo+ID4gDQo+ID4gwqDCoMKgwqDCoMKgwqDCoGlmIChk ZV9paXIgJiBERV9FRFBfUFNSX0lOVF9IU1cpIHsNCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdTMyIHBzcl9paXIgPSBpbnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtPnVuY29y ZSwNCj4gPiBFRFBfUFNSX0lJUik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX3Bzcl9pcnFfaGFuZGxlcihkZXZfcHJpdiwg cHNyX2lpcik7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX3VuY29y ZV93cml0ZSgmZGV2X3ByaXYtPnVuY29yZSwgRURQX1BTUl9JSVIsDQo+ID4gcHNyX2lpcik7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvcl9lYWNoX2ludGVsX2RwKCZkZXZf cHJpdi0+ZHJtLCBlbmNvZGVyKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0NCj4gPiBlbmNfdG9f aW50ZWxfZHAoZW5jb2Rlcik7DQo+IA0KPiBBbm90aGVyIHBsYWNlIHRoYXQgZm9yX2VhY2hfaW50 ZWxfZW5jb2Rlcl9pc19wc3JfZW5hYmxlZCgpIGNhbiBiZQ0KPiB1c2VkLg0KPiANCj4gPiArDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZW5j b2Rlci0+dHlwZSA9PSBJTlRFTF9PVVRQVVRfRURQICYmDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ0FOX1BTUihpbnRlbF9kcCkpIHsN Cj4gDQo+IEFnYWluIENBTl9QU1IoKSBhbHJlYWR5IHRha2VzIGNhcmUgb2YgPT0gSU5URUxfT1VU UFVUX0VEUC4NCj4gDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdTMyIHBzcl9paXIgPQ0KPiA+IGludGVsX3VuY29yZV9y ZWFkKCZkZXZfcHJpdi0+dW5jb3JlLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBFRFANCj4gPiBfUFNSX0lJ Uik7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX3Bzcl9pcnFfaGFuZGxlcihpbnRlbF9kcCwNCj4g PiBwc3JfaWlyKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlbF91bmNvcmVfd3JpdGUoJmRldl9wcml2LQ0KPiA+ ID51bmNvcmUsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEVEUF9QU1JfSUlSLA0KPiA+IHBzcl9paXIpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiDCoA0K PiA+IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAoZGVfaWlyICYgREVfQVVYX0NIQU5ORUxfQV9J VkIpDQo+ID4gQEAgLTIzMDEsMjEgKzIzMTMsMzMgQEAgZ2VuOF9kZV9taXNjX2lycV9oYW5kbGVy KHN0cnVjdA0KPiA+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgaWlyKQ0KPiA+IMKg wqDCoMKgwqDCoMKgwqB9DQo+ID4gwqANCj4gPiANCj4gPiDCoMKgwqDCoMKgwqDCoMKgaWYgKGlp ciAmIEdFTjhfREVfRURQX1BTUikgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlcjsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHUzMiBwc3JfaWlyOw0KPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaTkxNV9yZWdfdCBpaXJfcmVnOw0KPiA+IMKgDQo+ID4gDQo+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEyKQ0KPiA+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWlyX3JlZyA9IFRS QU5TX1BTUl9JSVIoZGV2X3ByaXYtDQo+ID4gPnBzci50cmFuc2NvZGVyKTsNCj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQ0KPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWlyX3JlZyA9IEVEUF9QU1JfSUlSOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3JfZWFjaF9pbnRlbF9kcCgmZGV2X3ByaXYtPmRy bSwgZW5jb2Rlcikgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9DQo+ID4gZW5jX3RvX2ludGVsX2Rw KGVuY29kZXIpOw0KPiANCj4gQW5vdGhlciBwbGFjZSB0aGF0IGZvcl9lYWNoX2ludGVsX2VuY29k ZXJfaXNfcHNyX2VuYWJsZWQoKSBjYW4gYmUNCj4gdXNlZC4NCj4gDQo+IFdlIGFyZSBhbG1vc3Qg dGhlcmUgOkQNCj4gDQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKCFDQU5fUFNSKGludGVsX2RwKSkNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51 ZTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMikNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpaXJfcmVnID0g VFJBTlNfUFNSX0lJUihpbnRlbF9kcC0NCj4gPiA+cHNyLnRyYW5zY29kZXIpOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQ0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlpcl9yZWcgPSBFRFBfUFNSX0lJUjsNCj4gPiDCoA0KPiA+IA0KPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBwc3JfaWlyID0gaW50ZWxfdW5jb3JlX3JlYWQoJmRldl9wcml2LT51 bmNvcmUsDQo+ID4gaWlyX3JlZyk7DQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGludGVsX3VuY29yZV93cml0ZSgmZGV2X3ByaXYtPnVuY29yZSwgaWlyX3JlZywNCj4gPiBwc3Jf aWlyKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHBzcl9paXIgPSBpbnRlbF91bmNvcmVfcmVhZCgmZGV2X3ByaXYtDQo+ID4gPnVuY29yZSwgaWly X3JlZyk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpbnRlbF91bmNvcmVfd3JpdGUoJmRldl9wcml2LT51bmNvcmUsDQo+ID4gaWlyX3JlZywgcHNy X2lpcik7DQo+ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKHBzcl9paXIpDQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBmb3VuZCA9IHRydWU7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAocHNyX2lpcikNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3VuZCA9IHRydWU7DQo+ ID4gwqANCj4gPiANCj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZWxfcHNy X2lycV9oYW5kbGVyKGRldl9wcml2LCBwc3JfaWlyKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVsX3Bzcl9pcnFfaGFuZGxlcihpbnRlbF9k cCwgcHNyX2lpcik7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgLyogcHJpb3IgR0VOMTIgb25seSBoYXZlIG9uZSBFRFAgUFNSICovDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoSU5U RUxfR0VOKGRldl9wcml2KSA8IDEyKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiDCoA0KPiA+ IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAoIWZvdW5kKQ0KPiANCg0KX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==