From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5C687A034F; Mon, 17 Jan 2022 06:40:03 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D60A8410FB; Mon, 17 Jan 2022 06:40:02 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 6B51E410F7 for ; Mon, 17 Jan 2022 06:40:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642398000; x=1673934000; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=xEn1PCDNBlBKBIkKaV933xZR7eHvMN1Hs955bkTk2Es=; b=ZDBVy4S4hOgtpnWNwaJCT4b13WGSSrPKgUtagXHyuvAVleb1eN6GSzBa 5TYSt+jMERuPW7SddiyeUua4LyRWb78hnhPkDgNEAYyTf3SjXaf4mmT0C Txqiiq4Phyi8Q8Sq48IFme1HSxZDwR3jdljTCyJ3JqZARnW132WqtKDCH 8//sfWxxzhoX9M7RYwQPfoanqrYZvgKbPdm4rH5l45nqsiPwTxRkDJ8t/ D+I0JPI9DqgAx0FrjEgfqaUbWuBRzahVbrLnBhhhRcZHlHoSkHTF1MqwS sgOhMnKtNJQfiwg6ejxDvdwtzGYklsV8G1I9fI6EHdqUeOUlJMR+eyffs Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10229"; a="242114458" X-IronPort-AV: E=Sophos;i="5.88,294,1635231600"; d="scan'208";a="242114458" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jan 2022 21:39:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,294,1635231600"; d="scan'208";a="492258045" Received: from irsmsx604.ger.corp.intel.com ([163.33.146.137]) by orsmga002.jf.intel.com with ESMTP; 16 Jan 2022 21:39:57 -0800 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by IRSMSX604.ger.corp.intel.com (163.33.146.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Mon, 17 Jan 2022 05:39:54 +0000 Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.2308.020; Mon, 17 Jan 2022 13:39:52 +0800 From: "Hu, Jiayu" To: "Xia, Chenbo" , "dev@dpdk.org" CC: "maxime.coquelin@redhat.com" , "i.maximets@ovn.org" , "Richardson, Bruce" , "Van Haaren, Harry" , "Pai G, Sunil" , "Mcnamara, John" , "Ding, Xuan" , "Jiang, Cheng1" , "liangma@liangbit.com" Subject: RE: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Topic: [PATCH v1 1/1] vhost: integrate dmadev in asynchronous datapath Thread-Index: AQHX/YRLKQmFmmnxdUWszaUEZw5AFqxhn2eAgAO9DQA= Date: Mon, 17 Jan 2022 05:39:52 +0000 Message-ID: <337c9259fe3d4419bf921bd984c34572@intel.com> References: <20211122105437.3534231-1-jiayu.hu@intel.com> <20211230215505.329674-1-jiayu.hu@intel.com> <20211230215505.329674-2-jiayu.hu@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.200.16 dlp-product: dlpe-windows x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgQ2hlbmJvLA0KDQpQbGVhc2Ugc2VlIHJlcGxpZXMgaW5saW5lLg0KDQpUaGFua3MsDQpKaWF5 dQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFhpYSwgQ2hlbmJvIDxj aGVuYm8ueGlhQGludGVsLmNvbT4NCj4gPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvdmhvc3QvbWFp bi5jIGIvZXhhbXBsZXMvdmhvc3QvbWFpbi5jDQo+ID4gaW5kZXggMzNkMDIzYWEzOS4uNDQwNzM0 OTliYyAxMDA2NDQNCj4gPiAtLS0gYS9leGFtcGxlcy92aG9zdC9tYWluLmMNCj4gPiArKysgYi9l eGFtcGxlcy92aG9zdC9tYWluLmMNCj4gPiBAQCAtMjQsOCArMjQsOSBAQA0KPiA+ICAjaW5jbHVk ZSA8cnRlX2lwLmg+DQo+ID4gICNpbmNsdWRlIDxydGVfdGNwLmg+DQo+ID4gICNpbmNsdWRlIDxy dGVfcGF1c2UuaD4NCj4gPiArI2luY2x1ZGUgPHJ0ZV9kbWFkZXYuaD4NCj4gPiArI2luY2x1ZGUg PHJ0ZV92aG9zdF9hc3luYy5oPg0KPiA+DQo+ID4gLSNpbmNsdWRlICJpb2F0LmgiDQo+ID4gICNp bmNsdWRlICJtYWluLmgiDQo+ID4NCj4gPiAgI2lmbmRlZiBNQVhfUVVFVUVTDQo+ID4gQEAgLTU2 LDYgKzU3LDE0IEBADQo+ID4gICNkZWZpbmUgUlRFX1RFU1RfVFhfREVTQ19ERUZBVUxUIDUxMg0K PiA+DQo+ID4gICNkZWZpbmUgSU5WQUxJRF9QT1JUX0lEIDB4RkYNCj4gPiArI2RlZmluZSBJTlZB TElEX0RNQV9JRCAtMQ0KPiA+ICsNCj4gPiArI2RlZmluZSBNQVhfVkhPU1RfREVWSUNFIDEwMjQN Cj4gPiArI2RlZmluZSBETUFfUklOR19TSVpFIDQwOTYNCj4gPiArDQo+ID4gK3N0cnVjdCBkbWFf Zm9yX3Zob3N0IGRtYV9iaW5kW01BWF9WSE9TVF9ERVZJQ0VdOw0KPiA+ICtzdHJ1Y3QgcnRlX3Zo b3N0X2FzeW5jX2RtYV9pbmZvDQo+IGRtYV9jb25maWdbUlRFX0RNQURFVl9ERUZBVUxUX01BWF07 DQo+ID4gK3N0YXRpYyBpbnQgZG1hX2NvdW50Ow0KPiA+DQo+ID4gIC8qIG1hc2sgb2YgZW5hYmxl ZCBwb3J0cyAqLw0KPiA+ICBzdGF0aWMgdWludDMyX3QgZW5hYmxlZF9wb3J0X21hc2sgPSAwOw0K PiA+IEBAIC05Niw4ICsxMDUsNiBAQCBzdGF0aWMgaW50IGJ1aWx0aW5fbmV0X2RyaXZlcjsNCj4g Pg0KPiA+ICBzdGF0aWMgaW50IGFzeW5jX3Zob3N0X2RyaXZlcjsNCj4gPg0KPiA+IC1zdGF0aWMg Y2hhciAqZG1hX3R5cGU7DQo+ID4gLQ0KPiA+ICAvKiBTcGVjaWZ5IHRpbWVvdXQgKGluIHVzZWNv bmRzKSBiZXR3ZWVuIHJldHJpZXMgb24gUlguICovDQo+ID4gIHN0YXRpYyB1aW50MzJfdCBidXJz dF9yeF9kZWxheV90aW1lID0gQlVSU1RfUlhfV0FJVF9VUzsNCj4gPiAgLyogU3BlY2lmeSB0aGUg bnVtYmVyIG9mIHJldHJpZXMgb24gUlguICovDQo+ID4gQEAgLTE5NiwxMyArMjAzLDEzNCBAQCBz dHJ1Y3Qgdmhvc3RfYnVmZnRhYmxlDQo+ICp2aG9zdF90eGJ1ZmZbUlRFX01BWF9MQ09SRSAqDQo+ ID4gTUFYX1ZIT1NUX0RFVklDRV07DQo+ID4gICNkZWZpbmUgTUJVRl9UQUJMRV9EUkFJTl9UU0MJ KChydGVfZ2V0X3RzY19oeigpICsgVVNfUEVSX1MgLSAxKSBcDQo+ID4gIAkJCQkgLyBVU19QRVJf UyAqIEJVUlNUX1RYX0RSQUlOX1VTKQ0KPiA+DQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbA0KPiA+ ICtpc19kbWFfY29uZmlndXJlZChpbnQxNl90IGRldl9pZCkNCj4gPiArew0KPiA+ICsJaW50IGk7 DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGRtYV9jb3VudDsgaSsrKSB7DQo+ID4gKwkJ aWYgKGRtYV9jb25maWdbaV0uZGV2X2lkID09IGRldl9pZCkgew0KPiA+ICsJCQlyZXR1cm4gdHJ1 ZTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiAr DQo+ID4gIHN0YXRpYyBpbmxpbmUgaW50DQo+ID4gIG9wZW5fZG1hKGNvbnN0IGNoYXIgKnZhbHVl KQ0KPiA+ICB7DQo+ID4gLQlpZiAoZG1hX3R5cGUgIT0gTlVMTCAmJiBzdHJuY21wKGRtYV90eXBl LCAiaW9hdCIsIDQpID09IDApDQo+ID4gLQkJcmV0dXJuIG9wZW5faW9hdCh2YWx1ZSk7DQo+ID4g KwlzdHJ1Y3QgZG1hX2Zvcl92aG9zdCAqZG1hX2luZm8gPSBkbWFfYmluZDsNCj4gPiArCWNoYXIg KmlucHV0ID0gc3RybmR1cCh2YWx1ZSwgc3RybGVuKHZhbHVlKSArIDEpOw0KPiA+ICsJY2hhciAq YWRkcnMgPSBpbnB1dDsNCj4gPiArCWNoYXIgKnB0cnNbMl07DQo+ID4gKwljaGFyICpzdGFydCwg KmVuZCwgKnN1YnN0cjsNCj4gPiArCWludDY0X3QgdmlkLCB2cmluZ19pZDsNCj4gPiArDQo+ID4g KwlzdHJ1Y3QgcnRlX2RtYV9pbmZvIGluZm87DQo+ID4gKwlzdHJ1Y3QgcnRlX2RtYV9jb25mIGRl dl9jb25maWcgPSB7IC5uYl92Y2hhbnMgPSAxIH07DQo+ID4gKwlzdHJ1Y3QgcnRlX2RtYV92Y2hh bl9jb25mIHFjb25mID0gew0KPiA+ICsJCS5kaXJlY3Rpb24gPSBSVEVfRE1BX0RJUl9NRU1fVE9f TUVNLA0KPiA+ICsJCS5uYl9kZXNjID0gRE1BX1JJTkdfU0laRQ0KPiA+ICsJfTsNCj4gPiArDQo+ ID4gKwlpbnQgZGV2X2lkOw0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKwl1aW50MTZfdCBpID0g MDsNCj4gPiArCWNoYXIgKmRtYV9hcmdbTUFYX1ZIT1NUX0RFVklDRV07DQo+ID4gKwlpbnQgYXJn c19ucjsNCj4gPiArDQo+ID4gKwl3aGlsZSAoaXNibGFuaygqYWRkcnMpKQ0KPiA+ICsJCWFkZHJz Kys7DQo+ID4gKwlpZiAoKmFkZHJzID09ICdcMCcpIHsNCj4gPiArCQlyZXQgPSAtMTsNCj4gPiAr CQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBwcm9jZXNzIERNQSBkZXZpY2Vz IHdpdGhpbiBicmFja2V0LiAqLw0KPiA+ICsJYWRkcnMrKzsNCj4gPiArCXN1YnN0ciA9IHN0cnRv ayhhZGRycywgIjtdIik7DQo+ID4gKwlpZiAoIXN1YnN0cikgew0KPiA+ICsJCXJldCA9IC0xOw0K PiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWFyZ3NfbnIgPSBydGVfc3Ry c3BsaXQoc3Vic3RyLCBzdHJsZW4oc3Vic3RyKSwNCj4gPiArCQkJZG1hX2FyZywgTUFYX1ZIT1NU X0RFVklDRSwgJywnKTsNCj4gPiArCWlmIChhcmdzX25yIDw9IDApIHsNCj4gPiArCQlyZXQgPSAt MTsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl3aGlsZSAoaSA8IGFy Z3NfbnIpIHsNCj4gPiArCQljaGFyICphcmdfdGVtcCA9IGRtYV9hcmdbaV07DQo+ID4gKwkJdWlu dDhfdCBzdWJfbnI7DQo+ID4gKw0KPiA+ICsJCXN1Yl9uciA9IHJ0ZV9zdHJzcGxpdChhcmdfdGVt cCwgc3RybGVuKGFyZ190ZW1wKSwgcHRycywgMiwgJ0AnKTsNCj4gPiArCQlpZiAoc3ViX25yICE9 IDIpIHsNCj4gPiArCQkJcmV0ID0gLTE7DQo+ID4gKwkJCWdvdG8gb3V0Ow0KPiA+ICsJCX0NCj4g PiArDQo+ID4gKwkJc3RhcnQgPSBzdHJzdHIocHRyc1swXSwgInR4ZCIpOw0KPiA+ICsJCWlmIChz dGFydCA9PSBOVUxMKSB7DQo+ID4gKwkJCXJldCA9IC0xOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4g PiArCQl9DQo+ID4gKw0KPiA+ICsJCXN0YXJ0ICs9IDM7DQo+ID4gKwkJdmlkID0gc3RydG9sKHN0 YXJ0LCAmZW5kLCAwKTsNCj4gPiArCQlpZiAoZW5kID09IHN0YXJ0KSB7DQo+ID4gKwkJCXJldCA9 IC0xOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXZyaW5nX2lk ID0gMCArIFZJUlRJT19SWFE7DQo+IA0KPiBObyBuZWVkIHRvIGludHJvZHVjZSB2cmluZ19pZCwg aXQncyBhbHdheXMgVklSVElPX1JYUQ0KDQpJIHdpbGwgcmVtb3ZlIGl0IGxhdGVyLg0KDQo+IA0K PiA+ICsNCj4gPiArCQlkZXZfaWQgPSBydGVfZG1hX2dldF9kZXZfaWRfYnlfbmFtZShwdHJzWzFd KTsNCj4gPiArCQlpZiAoZGV2X2lkIDwgMCkgew0KPiA+ICsJCQlSVEVfTE9HKEVSUiwgVkhPU1Rf Q09ORklHLCAiRmFpbCB0byBmaW5kDQo+IERNQSAlcy5cbiIsDQo+ID4gcHRyc1sxXSk7DQo+ID4g KwkJCXJldCA9IC0xOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9IGVsc2UgaWYgKGlzX2Rt YV9jb25maWd1cmVkKGRldl9pZCkpIHsNCj4gPiArCQkJZ290byBkb25lOw0KPiA+ICsJCX0NCj4g PiArDQo+IA0KPiBQbGVhc2UgY2FsbCBydGVfZG1hX2luZm9fZ2V0IGJlZm9yZSBjb25maWd1cmUg dG8gbWFrZSBzdXJlDQo+IGluZm8ubWF4X3ZjaGFucyA+PTENCg0KRG8geW91IHN1Z2dlc3QgdG8g dXNlICJydGVfZG1hX2luZm9fZ2V0KCkgYW5kIGluZm8ubWF4X3ZjaGFucz0wIiB0byBpbmRpY2F0 ZQ0KdGhlIGRldmljZSBpcyBub3QgY29uZmlndXJlZCwgcmF0aGVyIHRoYW4gdXNpbmcgaXNfZG1h X2NvbmZpZ3VyZSgpPw0KDQo+IA0KPiA+ICsJCWlmIChydGVfZG1hX2NvbmZpZ3VyZShkZXZfaWQs ICZkZXZfY29uZmlnKSAhPSAwKSB7DQo+ID4gKwkJCVJURV9MT0coRVJSLCBWSE9TVF9DT05GSUcs ICJGYWlsIHRvIGNvbmZpZ3VyZQ0KPiBETUEgJWQuXG4iLA0KPiA+IGRldl9pZCk7DQo+ID4gKwkJ CXJldCA9IC0xOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlm IChydGVfZG1hX3ZjaGFuX3NldHVwKGRldl9pZCwgMCwgJnFjb25mKSAhPSAwKSB7DQo+ID4gKwkJ CVJURV9MT0coRVJSLCBWSE9TVF9DT05GSUcsICJGYWlsIHRvIHNldCB1cA0KPiBETUEgJWQuXG4i LA0KPiA+IGRldl9pZCk7DQo+ID4gKwkJCXJldCA9IC0xOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4g PiArCQl9DQo+ID4NCj4gPiAtCXJldHVybiAtMTsNCj4gPiArCQlydGVfZG1hX2luZm9fZ2V0KGRl dl9pZCwgJmluZm8pOw0KPiA+ICsJCWlmIChpbmZvLm5iX3ZjaGFucyAhPSAxKSB7DQo+ID4gKwkJ CVJURV9MT0coRVJSLCBWSE9TVF9DT05GSUcsICJETUEgJWQgaGFzIG5vDQo+IHF1ZXVlcy5cbiIs DQo+ID4gZGV2X2lkKTsNCj4gDQo+IFRoZW4gdGhlIGFib3ZlIG1lYW5zIHRoZSBudW1iZXIgb2Yg dmNoYW4gaXMgbm90IGNvbmZpZ3VyZWQuDQo+IA0KPiA+ICsJCQlyZXQgPSAtMTsNCj4gPiArCQkJ Z290byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZiAocnRlX2RtYV9zdGFydChkZXZf aWQpICE9IDApIHsNCj4gPiArCQkJUlRFX0xPRyhFUlIsIFZIT1NUX0NPTkZJRywgIkZhaWwgdG8g c3RhcnQNCj4gRE1BICV1LlxuIiwNCj4gPiBkZXZfaWQpOw0KPiA+ICsJCQlyZXQgPSAtMTsNCj4g PiArCQkJZ290byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlkbWFfY29uZmlnW2RtYV9j b3VudF0uZGV2X2lkID0gZGV2X2lkOw0KPiA+ICsJCWRtYV9jb25maWdbZG1hX2NvdW50XS5tYXhf dmNoYW5zID0gMTsNCj4gPiArCQlkbWFfY29uZmlnW2RtYV9jb3VudCsrXS5tYXhfZGVzYyA9IERN QV9SSU5HX1NJWkU7DQo+ID4gKw0KPiA+ICtkb25lOg0KPiA+ICsJCShkbWFfaW5mbyArIHZpZCkt PmRtYXNbdnJpbmdfaWRdLmRldl9pZCA9IGRldl9pZDsNCj4gPiArCQlpKys7DQo+ID4gKwl9DQo+ ID4gK291dDoNCj4gPiArCWZyZWUoaW5wdXQpOw0KPiA+ICsJcmV0dXJuIHJldDsNCj4gPiAgfQ0K PiA+DQo+ID4gIC8qDQo+ID4gQEAgLTUwMCw4ICs2MjgsNiBAQCBlbnVtIHsNCj4gPiAgCU9QVF9D TElFTlRfTlVNLA0KPiA+ICAjZGVmaW5lIE9QVF9CVUlMVElOX05FVF9EUklWRVIgICJidWlsdGlu LW5ldC1kcml2ZXIiDQo+ID4gIAlPUFRfQlVJTFRJTl9ORVRfRFJJVkVSX05VTSwNCj4gPiAtI2Rl ZmluZSBPUFRfRE1BX1RZUEUgICAgICAgICAgICAiZG1hLXR5cGUiDQo+ID4gLQlPUFRfRE1BX1RZ UEVfTlVNLA0KPiA+ICAjZGVmaW5lIE9QVF9ETUFTICAgICAgICAgICAgICAgICJkbWFzIg0KPiA+ ICAJT1BUX0RNQVNfTlVNLA0KPiA+ICB9Ow0KPiA+IEBAIC01MzksOCArNjY1LDYgQEAgdXNfdmhv c3RfcGFyc2VfYXJncyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQo+ID4gIAkJCQlOVUxMLCBPUFRf Q0xJRU5UX05VTX0sDQo+ID4gIAkJe09QVF9CVUlMVElOX05FVF9EUklWRVIsIG5vX2FyZ3VtZW50 LA0KPiA+ICAJCQkJTlVMTCwgT1BUX0JVSUxUSU5fTkVUX0RSSVZFUl9OVU19LA0KPiA+IC0JCXtP UFRfRE1BX1RZUEUsIHJlcXVpcmVkX2FyZ3VtZW50LA0KPiA+IC0JCQkJTlVMTCwgT1BUX0RNQV9U WVBFX05VTX0sDQo+ID4gIAkJe09QVF9ETUFTLCByZXF1aXJlZF9hcmd1bWVudCwNCj4gPiAgCQkJ CU5VTEwsIE9QVF9ETUFTX05VTX0sDQo+ID4gIAkJe05VTEwsIDAsIDAsIDB9LA0KPiA+IEBAIC02 NjEsMTAgKzc4NSw2IEBAIHVzX3Zob3N0X3BhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQ0KPiA+ICAJCQl9DQo+ID4gIAkJCWJyZWFrOw0KPiA+DQo+ID4gLQkJY2FzZSBPUFRfRE1BX1RZ UEVfTlVNOg0KPiA+IC0JCQlkbWFfdHlwZSA9IG9wdGFyZzsNCj4gPiAtCQkJYnJlYWs7DQo+ID4g LQ0KPiA+ICAJCWNhc2UgT1BUX0RNQVNfTlVNOg0KPiA+ICAJCQlpZiAob3Blbl9kbWEob3B0YXJn KSA9PSAtMSkgew0KPiA+ICAJCQkJUlRFX0xPRyhJTkZPLCBWSE9TVF9DT05GSUcsDQo+ID4gQEAg LTg0MSw5ICs5NjEsMTAgQEAgY29tcGxldGVfYXN5bmNfcGt0cyhzdHJ1Y3Qgdmhvc3RfZGV2ICp2 ZGV2KQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgcnRlX21idWYgKnBfY3BsW01BWF9QS1RfQlVSU1Rd Ow0KPiA+ICAJdWludDE2X3QgY29tcGxldGVfY291bnQ7DQo+ID4gKwlpbnQxNl90IGRtYV9pZCA9 IGRtYV9iaW5kW3ZkZXYtPnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQ7DQo+ID4NCj4gPiAg CWNvbXBsZXRlX2NvdW50ID0gcnRlX3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQodmRldi0+ dmlkLA0KPiA+IC0JCQkJCVZJUlRJT19SWFEsIHBfY3BsLA0KPiBNQVhfUEtUX0JVUlNUKTsNCj4g PiArCQkJCQlWSVJUSU9fUlhRLCBwX2NwbCwgTUFYX1BLVF9CVVJTVCwNCj4gZG1hX2lkLCAwKTsN Cj4gPiAgCWlmIChjb21wbGV0ZV9jb3VudCkgew0KPiA+ICAJCWZyZWVfcGt0cyhwX2NwbCwgY29t cGxldGVfY291bnQpOw0KPiA+ICAJCV9fYXRvbWljX3N1Yl9mZXRjaCgmdmRldi0+cGt0c19pbmZs aWdodCwgY29tcGxldGVfY291bnQsDQo+ID4gX19BVE9NSUNfU0VRX0NTVCk7DQo+ID4gQEAgLTg4 MywxMSArMTAwNCwxMiBAQCBkcmFpbl92aG9zdChzdHJ1Y3Qgdmhvc3RfZGV2ICp2ZGV2KQ0KPiA+ DQo+ID4gIAlpZiAoYnVpbHRpbl9uZXRfZHJpdmVyKSB7DQo+ID4gIAkJcmV0ID0gdnNfZW5xdWV1 ZV9wa3RzKHZkZXYsIFZJUlRJT19SWFEsIG0sIG5yX3htaXQpOw0KPiA+IC0JfSBlbHNlIGlmIChh c3luY192aG9zdF9kcml2ZXIpIHsNCj4gPiArCX0gZWxzZSBpZiAoZG1hX2JpbmRbdmRldi0+dmlk XS5kbWFzW1ZJUlRJT19SWFFdLmFzeW5jX2VuYWJsZWQpIHsNCj4gPiAgCQl1aW50MTZfdCBlbnF1 ZXVlX2ZhaWwgPSAwOw0KPiA+ICsJCWludDE2X3QgZG1hX2lkID0gZG1hX2JpbmRbdmRldi0NCj4g PnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5kZXZfaWQ7DQo+ID4NCj4gPiAgCQljb21wbGV0ZV9hc3lu Y19wa3RzKHZkZXYpOw0KPiA+IC0JCXJldCA9IHJ0ZV92aG9zdF9zdWJtaXRfZW5xdWV1ZV9idXJz dCh2ZGV2LT52aWQsDQo+IFZJUlRJT19SWFEsIG0sDQo+ID4gbnJfeG1pdCk7DQo+ID4gKwkJcmV0 ID0gcnRlX3Zob3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHZkZXYtPnZpZCwNCj4gVklSVElPX1JY USwgbSwNCj4gPiBucl94bWl0LCBkbWFfaWQsIDApOw0KPiA+ICAJCV9fYXRvbWljX2FkZF9mZXRj aCgmdmRldi0+cGt0c19pbmZsaWdodCwgcmV0LA0KPiBfX0FUT01JQ19TRVFfQ1NUKTsNCj4gPg0K PiA+ICAJCWVucXVldWVfZmFpbCA9IG5yX3htaXQgLSByZXQ7DQo+ID4gQEAgLTkwNSw3ICsxMDI3 LDcgQEAgZHJhaW5fdmhvc3Qoc3RydWN0IHZob3N0X2RldiAqdmRldikNCj4gPiAgCQkJCV9fQVRP TUlDX1NFUV9DU1QpOw0KPiA+ICAJfQ0KPiA+DQo+ID4gLQlpZiAoIWFzeW5jX3Zob3N0X2RyaXZl cikNCj4gPiArCWlmICghZG1hX2JpbmRbdmRldi0+dmlkXS5kbWFzW1ZJUlRJT19SWFFdLmFzeW5j X2VuYWJsZWQpDQo+ID4gIAkJZnJlZV9wa3RzKG0sIG5yX3htaXQpOw0KPiA+ICB9DQo+ID4NCj4g PiBAQCAtMTIxMSwxMiArMTMzMywxMyBAQCBkcmFpbl9ldGhfcngoc3RydWN0IHZob3N0X2RldiAq dmRldikNCj4gPiAgCWlmIChidWlsdGluX25ldF9kcml2ZXIpIHsNCj4gPiAgCQllbnF1ZXVlX2Nv dW50ID0gdnNfZW5xdWV1ZV9wa3RzKHZkZXYsIFZJUlRJT19SWFEsDQo+ID4gIAkJCQkJCXBrdHMs IHJ4X2NvdW50KTsNCj4gPiAtCX0gZWxzZSBpZiAoYXN5bmNfdmhvc3RfZHJpdmVyKSB7DQo+ID4g Kwl9IGVsc2UgaWYgKGRtYV9iaW5kW3ZkZXYtPnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5hc3luY19l bmFibGVkKSB7DQo+ID4gIAkJdWludDE2X3QgZW5xdWV1ZV9mYWlsID0gMDsNCj4gPiArCQlpbnQx Nl90IGRtYV9pZCA9IGRtYV9iaW5kW3ZkZXYtDQo+ID52aWRdLmRtYXNbVklSVElPX1JYUV0uZGV2 X2lkOw0KPiA+DQo+ID4gIAkJY29tcGxldGVfYXN5bmNfcGt0cyh2ZGV2KTsNCj4gPiAgCQllbnF1 ZXVlX2NvdW50ID0gcnRlX3Zob3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHZkZXYtDQo+ID52aWQs DQo+ID4gLQkJCQkJVklSVElPX1JYUSwgcGt0cywgcnhfY291bnQpOw0KPiA+ICsJCQkJCVZJUlRJ T19SWFEsIHBrdHMsIHJ4X2NvdW50LCBkbWFfaWQsDQo+IDApOw0KPiA+ICAJCV9fYXRvbWljX2Fk ZF9mZXRjaCgmdmRldi0+cGt0c19pbmZsaWdodCwgZW5xdWV1ZV9jb3VudCwNCj4gPiBfX0FUT01J Q19TRVFfQ1NUKTsNCj4gPg0KPiA+ICAJCWVucXVldWVfZmFpbCA9IHJ4X2NvdW50IC0gZW5xdWV1 ZV9jb3VudDsNCj4gPiBAQCAtMTIzNSw3ICsxMzU4LDcgQEAgZHJhaW5fZXRoX3J4KHN0cnVjdCB2 aG9zdF9kZXYgKnZkZXYpDQo+ID4gIAkJCQlfX0FUT01JQ19TRVFfQ1NUKTsNCj4gPiAgCX0NCj4g Pg0KPiA+IC0JaWYgKCFhc3luY192aG9zdF9kcml2ZXIpDQo+ID4gKwlpZiAoIWRtYV9iaW5kW3Zk ZXYtPnZpZF0uZG1hc1tWSVJUSU9fUlhRXS5hc3luY19lbmFibGVkKQ0KPiA+ICAJCWZyZWVfcGt0 cyhwa3RzLCByeF9jb3VudCk7DQo+ID4gIH0NCj4gPg0KPiA+IEBAIC0xMzg3LDE4ICsxNTEwLDIw IEBAIGRlc3Ryb3lfZGV2aWNlKGludCB2aWQpDQo+ID4gIAkJIiglZCkgZGV2aWNlIGhhcyBiZWVu IHJlbW92ZWQgZnJvbSBkYXRhIGNvcmVcbiIsDQo+ID4gIAkJdmRldi0+dmlkKTsNCj4gPg0KPiA+ IC0JaWYgKGFzeW5jX3Zob3N0X2RyaXZlcikgew0KPiA+ICsJaWYgKGRtYV9iaW5kW3ZpZF0uZG1h c1tWSVJUSU9fUlhRXS5hc3luY19lbmFibGVkKSB7DQo+ID4gIAkJdWludDE2X3Qgbl9wa3QgPSAw Ow0KPiA+ICsJCWludDE2X3QgZG1hX2lkID0gZG1hX2JpbmRbdmlkXS5kbWFzW1ZJUlRJT19SWFFd LmRldl9pZDsNCj4gPiAgCQlzdHJ1Y3QgcnRlX21idWYgKm1fY3BsW3ZkZXYtPnBrdHNfaW5mbGln aHRdOw0KPiA+DQo+ID4gIAkJd2hpbGUgKHZkZXYtPnBrdHNfaW5mbGlnaHQpIHsNCj4gPiAgCQkJ bl9wa3QgPSBydGVfdmhvc3RfY2xlYXJfcXVldWVfdGhyZWFkX3Vuc2FmZSh2aWQsDQo+IFZJUlRJ T19SWFEsDQo+ID4gLQkJCQkJCW1fY3BsLCB2ZGV2LT5wa3RzX2luZmxpZ2h0KTsNCj4gPiArCQkJ CQkJbV9jcGwsIHZkZXYtPnBrdHNfaW5mbGlnaHQsDQo+IGRtYV9pZCwgMCk7DQo+ID4gIAkJCWZy ZWVfcGt0cyhtX2NwbCwgbl9wa3QpOw0KPiA+ICAJCQlfX2F0b21pY19zdWJfZmV0Y2goJnZkZXYt PnBrdHNfaW5mbGlnaHQsIG5fcGt0LA0KPiA+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+ICAJCX0N Cj4gPg0KPiA+ICAJCXJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3VucmVnaXN0ZXIodmlkLCBWSVJU SU9fUlhRKTsNCj4gPiArCQlkbWFfYmluZFt2aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5bmNfZW5h YmxlZCA9IGZhbHNlOw0KPiA+ICAJfQ0KPiA+DQo+ID4gIAlydGVfZnJlZSh2ZGV2KTsNCj4gPiBA QCAtMTQ2OCwyMCArMTU5MywxNCBAQCBuZXdfZGV2aWNlKGludCB2aWQpDQo+ID4gIAkJIiglZCkg ZGV2aWNlIGhhcyBiZWVuIGFkZGVkIHRvIGRhdGEgY29yZSAlZFxuIiwNCj4gPiAgCQl2aWQsIHZk ZXYtPmNvcmVpZCk7DQo+ID4NCj4gPiAtCWlmIChhc3luY192aG9zdF9kcml2ZXIpIHsNCj4gPiAt CQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NvbmZpZyBjb25maWcgPSB7MH07DQo+ID4gLQkJc3Ry dWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyBjaGFubmVsX29wczsNCj4gPiAtDQo+ID4g LQkJaWYgKGRtYV90eXBlICE9IE5VTEwgJiYgc3RybmNtcChkbWFfdHlwZSwgImlvYXQiLCA0KSA9 PSAwKSB7DQo+ID4gLQkJCWNoYW5uZWxfb3BzLnRyYW5zZmVyX2RhdGEgPSBpb2F0X3RyYW5zZmVy X2RhdGFfY2I7DQo+ID4gLQkJCWNoYW5uZWxfb3BzLmNoZWNrX2NvbXBsZXRlZF9jb3BpZXMgPQ0K PiA+IC0JCQkJaW9hdF9jaGVja19jb21wbGV0ZWRfY29waWVzX2NiOw0KPiA+IC0NCj4gPiAtCQkJ Y29uZmlnLmZlYXR1cmVzID0gUlRFX1ZIT1NUX0FTWU5DX0lOT1JERVI7DQo+ID4gKwlpZiAoZG1h X2JpbmRbdmlkXS5kbWFzW1ZJUlRJT19SWFFdLmRldl9pZCAhPSBJTlZBTElEX0RNQV9JRCkgew0K PiA+ICsJCWludCByZXQ7DQo+ID4NCj4gPiAtCQkJcmV0dXJuIHJ0ZV92aG9zdF9hc3luY19jaGFu bmVsX3JlZ2lzdGVyKHZpZCwNCj4gVklSVElPX1JYUSwNCj4gPiAtCQkJCWNvbmZpZywgJmNoYW5u ZWxfb3BzKTsNCj4gPiArCQlyZXQgPSBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcih2 aWQsIFZJUlRJT19SWFEpOw0KPiA+ICsJCWlmIChyZXQgPT0gMCkgew0KPiA+ICsJCQlkbWFfYmlu ZFt2aWRdLmRtYXNbVklSVElPX1JYUV0uYXN5bmNfZW5hYmxlZCA9DQo+IHRydWU7DQo+ID4gIAkJ fQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gIAl9DQo+ID4NCj4gPiAgCXJldHVybiAwOw0KPiA+ IEBAIC0xNTAyLDE0ICsxNjIxLDE1IEBAIHZyaW5nX3N0YXRlX2NoYW5nZWQoaW50IHZpZCwgdWlu dDE2X3QNCj4gcXVldWVfaWQsIGludA0KPiA+IGVuYWJsZSkNCj4gPiAgCWlmIChxdWV1ZV9pZCAh PSBWSVJUSU9fUlhRKQ0KPiA+ICAJCXJldHVybiAwOw0KPiA+DQo+ID4gLQlpZiAoYXN5bmNfdmhv c3RfZHJpdmVyKSB7DQo+ID4gKwlpZiAoZG1hX2JpbmRbdmlkXS5kbWFzW3F1ZXVlX2lkXS5hc3lu Y19lbmFibGVkKSB7DQo+ID4gIAkJaWYgKCFlbmFibGUpIHsNCj4gPiAgCQkJdWludDE2X3Qgbl9w a3QgPSAwOw0KPiA+ICsJCQlpbnQxNl90IGRtYV9pZCA9DQo+IGRtYV9iaW5kW3ZpZF0uZG1hc1tW SVJUSU9fUlhRXS5kZXZfaWQ7DQo+ID4gIAkJCXN0cnVjdCBydGVfbWJ1ZiAqbV9jcGxbdmRldi0+ cGt0c19pbmZsaWdodF07DQo+ID4NCj4gPiAgCQkJd2hpbGUgKHZkZXYtPnBrdHNfaW5mbGlnaHQp IHsNCj4gPiAgCQkJCW5fcGt0ID0NCj4gcnRlX3Zob3N0X2NsZWFyX3F1ZXVlX3RocmVhZF91bnNh ZmUodmlkLA0KPiA+IHF1ZXVlX2lkLA0KPiA+IC0JCQkJCQkJbV9jcGwsIHZkZXYtDQo+ID5wa3Rz X2luZmxpZ2h0KTsNCj4gPiArCQkJCQkJCW1fY3BsLCB2ZGV2LQ0KPiA+cGt0c19pbmZsaWdodCwg ZG1hX2lkLA0KPiA+IDApOw0KPiA+ICAJCQkJZnJlZV9wa3RzKG1fY3BsLCBuX3BrdCk7DQo+ID4g IAkJCQlfX2F0b21pY19zdWJfZmV0Y2goJnZkZXYtPnBrdHNfaW5mbGlnaHQsDQo+IG5fcGt0LA0K PiA+IF9fQVRPTUlDX1NFUV9DU1QpOw0KPiA+ICAJCQl9DQo+ID4gQEAgLTE2NTcsNiArMTc3Nywy NSBAQCBjcmVhdGVfbWJ1Zl9wb29sKHVpbnQxNl90IG5yX3BvcnQsIHVpbnQzMl90DQo+ID4gbnJf c3dpdGNoX2NvcmUsIHVpbnQzMl90IG1idWZfc2l6ZSwNCj4gPiAgCQlydGVfZXhpdChFWElUX0ZB SUxVUkUsICJDYW5ub3QgY3JlYXRlIG1idWYgcG9vbFxuIik7DQo+ID4gIH0NCj4gPg0KPiA+ICtz dGF0aWMgdm9pZA0KPiA+ICtpbml0X2RtYSh2b2lkKQ0KPiA+ICt7DQo+ID4gKwlpbnQgaTsNCj4g PiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1ZIT1NUX0RFVklDRTsgaSsrKSB7DQo+ID4g KwkJaW50IGo7DQo+ID4gKw0KPiA+ICsJCWZvciAoaiA9IDA7IGogPCBSVEVfTUFYX1FVRVVFU19Q RVJfUE9SVCAqIDI7IGorKykgew0KPiA+ICsJCQlkbWFfYmluZFtpXS5kbWFzW2pdLmRldl9pZCA9 IElOVkFMSURfRE1BX0lEOw0KPiA+ICsJCQlkbWFfYmluZFtpXS5kbWFzW2pdLmFzeW5jX2VuYWJs ZWQgPSBmYWxzZTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsg aSA8IFJURV9ETUFERVZfREVGQVVMVF9NQVg7IGkrKykgew0KPiA+ICsJCWRtYV9jb25maWdbaV0u ZGV2X2lkID0gSU5WQUxJRF9ETUFfSUQ7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gIC8q DQo+ID4gICAqIE1haW4gZnVuY3Rpb24sIGRvZXMgaW5pdGlhbGlzYXRpb24gYW5kIGNhbGxzIHRo ZSBwZXItbGNvcmUgZnVuY3Rpb25zLg0KPiA+ICAgKi8NCj4gPiBAQCAtMTY3OSw2ICsxODE4LDkg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPiA+ICAJYXJnYyAtPSByZXQ7DQo+ID4g IAlhcmd2ICs9IHJldDsNCj4gPg0KPiA+ICsJLyogaW5pdGlhbGl6ZSBkbWEgc3RydWN0dXJlcyAq Lw0KPiA+ICsJaW5pdF9kbWEoKTsNCj4gPiArDQo+ID4gIAkvKiBwYXJzZSBhcHAgYXJndW1lbnRz ICovDQo+ID4gIAlyZXQgPSB1c192aG9zdF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpOw0KPiA+ICAJ aWYgKHJldCA8IDApDQo+ID4gQEAgLTE3NTQsNiArMTg5NiwyMCBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pDQo+ID4gIAlpZiAoY2xpZW50X21vZGUpDQo+ID4gIAkJZmxhZ3MgfD0gUlRF X1ZIT1NUX1VTRVJfQ0xJRU5UOw0KPiA+DQo+ID4gKwlpZiAoYXN5bmNfdmhvc3RfZHJpdmVyKSB7 DQo+ID4gKwkJaWYgKHJ0ZV92aG9zdF9hc3luY19kbWFfY29uZmlndXJlKGRtYV9jb25maWcsIGRt YV9jb3VudCkNCj4gPCAwKSB7DQo+ID4gKwkJCVJURV9MT0coRVJSLCBWSE9TVF9QT1JULCAiRmFp bGVkIHRvIGNvbmZpZ3VyZQ0KPiBETUEgaW4NCj4gPiB2aG9zdC5cbiIpOw0KPiA+ICsJCQlmb3Ig KGkgPSAwOyBpIDwgZG1hX2NvdW50OyBpKyspIHsNCj4gPiArCQkJCWlmIChkbWFfY29uZmlnW2ld LmRldl9pZCAhPSBJTlZBTElEX0RNQV9JRCkNCj4gew0KPiA+ICsJCQkJCXJ0ZV9kbWFfc3RvcChk bWFfY29uZmlnW2ldLmRldl9pZCk7DQo+ID4gKwkJCQkJZG1hX2NvbmZpZ1tpXS5kZXZfaWQgPQ0K PiBJTlZBTElEX0RNQV9JRDsNCj4gPiArCQkJCX0NCj4gPiArCQkJfQ0KPiA+ICsJCQlkbWFfY291 bnQgPSAwOw0KPiA+ICsJCQlhc3luY192aG9zdF9kcml2ZXIgPSBmYWxzZTsNCj4gPiArCQl9DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICAJLyogUmVnaXN0ZXIgdmhvc3QgdXNlciBkcml2ZXIgdG8gaGFu ZGxlIHZob3N0IG1lc3NhZ2VzLiAqLw0KPiA+ICAJZm9yIChpID0gMDsgaSA8IG5iX3NvY2tldHM7 IGkrKykgew0KPiA+ICAJCWNoYXIgKmZpbGUgPSBzb2NrZXRfZmlsZXMgKyBpICogUEFUSF9NQVg7 DQo+ID4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3Zob3N0L21haW4uaCBiL2V4YW1wbGVzL3Zob3N0 L21haW4uaA0KPiA+IGluZGV4IGU3YjFhYzYwYTYuLmI0YTQ1M2U3N2UgMTAwNjQ0DQo+ID4gLS0t IGEvZXhhbXBsZXMvdmhvc3QvbWFpbi5oDQo+ID4gKysrIGIvZXhhbXBsZXMvdmhvc3QvbWFpbi5o DQo+ID4gQEAgLTgsNiArOCw3IEBADQo+ID4gICNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCj4gPg0K PiA+ICAjaW5jbHVkZSA8cnRlX2V0aGVyLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfcGNpLmg+DQo+ ID4NCj4gPiAgLyogTWFjcm9zIGZvciBwcmludGluZyB1c2luZyBSVEVfTE9HICovDQo+ID4gICNk ZWZpbmUgUlRFX0xPR1RZUEVfVkhPU1RfQ09ORklHIFJURV9MT0dUWVBFX1VTRVIxDQo+ID4gQEAg LTc5LDYgKzgwLDE2IEBAIHN0cnVjdCBsY29yZV9pbmZvIHsNCj4gPiAgCXN0cnVjdCB2aG9zdF9k ZXZfdGFpbHFfbGlzdCB2ZGV2X2xpc3Q7DQo+ID4gIH07DQo+ID4NCj4gPiArc3RydWN0IGRtYV9p bmZvIHsNCj4gPiArCXN0cnVjdCBydGVfcGNpX2FkZHIgYWRkcjsNCj4gPiArCWludDE2X3QgZGV2 X2lkOw0KPiA+ICsJYm9vbCBhc3luY19lbmFibGVkOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3Ry dWN0IGRtYV9mb3Jfdmhvc3Qgew0KPiA+ICsJc3RydWN0IGRtYV9pbmZvIGRtYXNbUlRFX01BWF9R VUVVRVNfUEVSX1BPUlQgKiAyXTsNCj4gPiArfTsNCj4gPiArDQo+ID4gIC8qIHdlIGltcGxlbWVu dCBub24tZXh0cmEgdmlydGlvIG5ldCBmZWF0dXJlcyAqLw0KPiA+ICAjZGVmaW5lIFZJUlRJT19O RVRfRkVBVFVSRVMJMA0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3Zob3N0L21lc29u LmJ1aWxkIGIvZXhhbXBsZXMvdmhvc3QvbWVzb24uYnVpbGQNCj4gPiBpbmRleCAzZWZkNWU2NTQw Li44N2E2MzdmODNmIDEwMDY0NA0KPiA+IC0tLSBhL2V4YW1wbGVzL3Zob3N0L21lc29uLmJ1aWxk DQo+ID4gKysrIGIvZXhhbXBsZXMvdmhvc3QvbWVzb24uYnVpbGQNCj4gPiBAQCAtMTIsMTMgKzEy LDkgQEAgaWYgbm90IGlzX2xpbnV4DQo+ID4gIGVuZGlmDQo+ID4NCj4gPiAgZGVwcyArPSAndmhv c3QnDQo+ID4gK2RlcHMgKz0gJ2RtYWRldicNCj4gPiAgYWxsb3dfZXhwZXJpbWVudGFsX2FwaXMg PSB0cnVlDQo+ID4gIHNvdXJjZXMgPSBmaWxlcygNCj4gPiAgICAgICAgICAnbWFpbi5jJywNCj4g PiAgICAgICAgICAndmlydGlvX25ldC5jJywNCj4gPiAgKQ0KPiA+IC0NCj4gPiAtaWYgZHBka19j b25mLmhhcygnUlRFX1JBV19JT0FUJykNCj4gPiAtICAgIGRlcHMgKz0gJ3Jhd19pb2F0Jw0KPiA+ IC0gICAgc291cmNlcyArPSBmaWxlcygnaW9hdC5jJykNCj4gPiAtZW5kaWYNCj4gPiBkaWZmIC0t Z2l0IGEvbGliL3Zob3N0L21lc29uLmJ1aWxkIGIvbGliL3Zob3N0L21lc29uLmJ1aWxkDQo+ID4g aW5kZXggY2RiMzdhNDgxNC4uODEwNzMyOTQwMCAxMDA2NDQNCj4gPiAtLS0gYS9saWIvdmhvc3Qv bWVzb24uYnVpbGQNCj4gPiArKysgYi9saWIvdmhvc3QvbWVzb24uYnVpbGQNCj4gPiBAQCAtMzMs NyArMzMsOCBAQCBoZWFkZXJzID0gZmlsZXMoDQo+ID4gICAgICAgICAgJ3J0ZV92aG9zdF9hc3lu Yy5oJywNCj4gPiAgICAgICAgICAncnRlX3Zob3N0X2NyeXB0by5oJywNCj4gPiAgKQ0KPiA+ICsN Cj4gPiAgZHJpdmVyX3Nka19oZWFkZXJzID0gZmlsZXMoDQo+ID4gICAgICAgICAgJ3ZkcGFfZHJp dmVyLmgnLA0KPiA+ICApDQo+ID4gLWRlcHMgKz0gWydldGhkZXYnLCAnY3J5cHRvZGV2JywgJ2hh c2gnLCAncGNpJ10NCj4gPiArZGVwcyArPSBbJ2V0aGRldicsICdjcnlwdG9kZXYnLCAnaGFzaCcs ICdwY2knLCAnZG1hZGV2J10NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3J0ZV92aG9zdF9h c3luYy5oIGIvbGliL3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oDQo+ID4gaW5kZXggYTg3ZWE2YmEz Ny4uMjNhN2EyZDhiMyAxMDA2NDQNCj4gPiAtLS0gYS9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5j LmgNCj4gPiArKysgYi9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5jLmgNCj4gPiBAQCAtMjcsNzAg KzI3LDEyIEBAIHN0cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgew0KPiA+ICB9Ow0KPiA+DQo+ID4g IC8qKg0KPiA+IC0gKiBkbWEgdHJhbnNmZXIgc3RhdHVzDQo+ID4gKyAqIERNQSBkZXZpY2UgaW5m b3JtYXRpb24NCj4gPiAgICovDQo+ID4gLXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfc3RhdHVzIHsN Cj4gPiAtCS8qKiBBbiBhcnJheSBvZiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBkYXRhIGZvciBzb3Vy Y2UgbWVtb3J5ICovDQo+ID4gLQl1aW50cHRyX3QgKnNyY19vcGFxdWVfZGF0YTsNCj4gPiAtCS8q KiBBbiBhcnJheSBvZiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBkYXRhIGZvciBkZXN0aW5hdGlvbiBt ZW1vcnkgKi8NCj4gPiAtCXVpbnRwdHJfdCAqZHN0X29wYXF1ZV9kYXRhOw0KPiA+IC19Ow0KPiA+ IC0NCj4gPiAtLyoqDQo+ID4gLSAqIGRtYSBvcGVyYXRpb24gY2FsbGJhY2tzIHRvIGJlIGltcGxl bWVudGVkIGJ5IGFwcGxpY2F0aW9ucw0KPiA+IC0gKi8NCj4gPiAtc3RydWN0IHJ0ZV92aG9zdF9h c3luY19jaGFubmVsX29wcyB7DQo+ID4gLQkvKioNCj4gPiAtCSAqIGluc3RydWN0IGFzeW5jIGVu Z2luZXMgdG8gcGVyZm9ybSBjb3BpZXMgZm9yIGEgYmF0Y2ggb2YgcGFja2V0cw0KPiA+IC0JICoN Cj4gPiAtCSAqIEBwYXJhbSB2aWQNCj4gPiAtCSAqICBpZCBvZiB2aG9zdCBkZXZpY2UgdG8gcGVy Zm9ybSBkYXRhIGNvcGllcw0KPiA+IC0JICogQHBhcmFtIHF1ZXVlX2lkDQo+ID4gLQkgKiAgcXVl dWUgaWQgdG8gcGVyZm9ybSBkYXRhIGNvcGllcw0KPiA+IC0JICogQHBhcmFtIGlvdl9pdGVyDQo+ ID4gLQkgKiAgYW4gYXJyYXkgb2YgSU9WIGl0ZXJhdG9ycw0KPiA+IC0JICogQHBhcmFtIG9wYXF1 ZV9kYXRhDQo+ID4gLQkgKiAgb3BhcXVlIGRhdGEgcGFpciBzZW5kaW5nIHRvIERNQSBlbmdpbmUN Cj4gPiAtCSAqIEBwYXJhbSBjb3VudA0KPiA+IC0JICogIG51bWJlciBvZiBlbGVtZW50cyBpbiB0 aGUgImRlc2NzIiBhcnJheQ0KPiA+IC0JICogQHJldHVybg0KPiA+IC0JICogIG51bWJlciBvZiBJ T1YgaXRlcmF0b3JzIHByb2Nlc3NlZCwgbmVnYXRpdmUgdmFsdWUgbWVhbnMgZXJyb3INCj4gPiAt CSAqLw0KPiA+IC0JaW50MzJfdCAoKnRyYW5zZmVyX2RhdGEpKGludCB2aWQsIHVpbnQxNl90IHF1 ZXVlX2lkLA0KPiA+IC0JCXN0cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgKmlvdl9pdGVyLA0KPiA+ IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfc3RhdHVzICpvcGFxdWVfZGF0YSwNCj4gPiAtCQl1 aW50MTZfdCBjb3VudCk7DQo+ID4gLQkvKioNCj4gPiAtCSAqIGNoZWNrIGNvcHktY29tcGxldGVk IHBhY2tldHMgZnJvbSB0aGUgYXN5bmMgZW5naW5lDQo+ID4gLQkgKiBAcGFyYW0gdmlkDQo+ID4g LQkgKiAgaWQgb2Ygdmhvc3QgZGV2aWNlIHRvIGNoZWNrIGNvcHkgY29tcGxldGlvbg0KPiA+IC0J ICogQHBhcmFtIHF1ZXVlX2lkDQo+ID4gLQkgKiAgcXVldWUgaWQgdG8gY2hlY2sgY29weSBjb21w bGV0aW9uDQo+ID4gLQkgKiBAcGFyYW0gb3BhcXVlX2RhdGENCj4gPiAtCSAqICBidWZmZXIgdG8g cmVjZWl2ZSB0aGUgb3BhcXVlIGRhdGEgcGFpciBmcm9tIERNQSBlbmdpbmUNCj4gPiAtCSAqIEBw YXJhbSBtYXhfcGFja2V0cw0KPiA+IC0JICogIG1heCBudW1iZXIgb2YgcGFja2V0cyBjb3VsZCBi ZSBjb21wbGV0ZWQNCj4gPiAtCSAqIEByZXR1cm4NCj4gPiAtCSAqICBudW1iZXIgb2YgYXN5bmMg ZGVzY3MgY29tcGxldGVkLCBuZWdhdGl2ZSB2YWx1ZSBtZWFucyBlcnJvcg0KPiA+IC0JICovDQo+ ID4gLQlpbnQzMl90ICgqY2hlY2tfY29tcGxldGVkX2NvcGllcykoaW50IHZpZCwgdWludDE2X3Qg cXVldWVfaWQsDQo+ID4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19zdGF0dXMgKm9wYXF1ZV9k YXRhLA0KPiA+IC0JCXVpbnQxNl90IG1heF9wYWNrZXRzKTsNCj4gPiAtfTsNCj4gPiAtDQo+ID4g LS8qKg0KPiA+IC0gKiAgYXN5bmMgY2hhbm5lbCBmZWF0dXJlcw0KPiA+IC0gKi8NCj4gPiAtZW51 bSB7DQo+ID4gLQlSVEVfVkhPU1RfQVNZTkNfSU5PUkRFUiA9IDFVIDw8IDAsDQo+ID4gLX07DQo+ ID4gLQ0KPiA+IC0vKioNCj4gPiAtICogIGFzeW5jIGNoYW5uZWwgY29uZmlndXJhdGlvbg0KPiA+ IC0gKi8NCj4gPiAtc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgew0KPiA+IC0JdWludDMy X3QgZmVhdHVyZXM7DQo+ID4gLQl1aW50MzJfdCByc3ZkWzJdOw0KPiA+ICtzdHJ1Y3QgcnRlX3Zo b3N0X2FzeW5jX2RtYV9pbmZvIHsNCj4gPiArCWludDE2X3QgZGV2X2lkOwkvKiBETUEgZGV2aWNl IElEICovDQo+ID4gKwl1aW50MTZfdCBtYXhfdmNoYW5zOwkvKiBtYXggbnVtYmVyIG9mIHZjaGFu ICovDQo+ID4gKwl1aW50MTZfdCBtYXhfZGVzYzsJLyogbWF4IGRlc2MgbnVtYmVyIG9mIHZjaGFu ICovDQo+ID4gIH07DQo+ID4NCj4gPiAgLyoqDQo+ID4gQEAgLTEwMCwxNyArNDIsMTEgQEAgc3Ry dWN0IHJ0ZV92aG9zdF9hc3luY19jb25maWcgew0KPiA+ICAgKiAgdmhvc3QgZGV2aWNlIGlkIGFz eW5jIGNoYW5uZWwgdG8gYmUgYXR0YWNoZWQgdG8NCj4gPiAgICogQHBhcmFtIHF1ZXVlX2lkDQo+ ID4gICAqICB2aG9zdCBxdWV1ZSBpZCBhc3luYyBjaGFubmVsIHRvIGJlIGF0dGFjaGVkIHRvDQo+ ID4gLSAqIEBwYXJhbSBjb25maWcNCj4gPiAtICogIEFzeW5jIGNoYW5uZWwgY29uZmlndXJhdGlv biBzdHJ1Y3R1cmUNCj4gPiAtICogQHBhcmFtIG9wcw0KPiA+IC0gKiAgQXN5bmMgY2hhbm5lbCBv cGVyYXRpb24gY2FsbGJhY2tzDQo+ID4gICAqIEByZXR1cm4NCj4gPiAgICogIDAgb24gc3VjY2Vz cywgLTEgb24gZmFpbHVyZXMNCj4gPiAgICovDQo+ID4gIF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ IC1pbnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2X3Qg cXVldWVfaWQsDQo+ID4gLQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NvbmZpZyBjb25maWcsDQo+ ID4gLQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzICpvcHMpOw0KPiA+ICtpbnQg cnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2X3QgcXVldWVf aWQpOw0KPiA+DQo+ID4gIC8qKg0KPiA+ICAgKiBVbnJlZ2lzdGVyIGFuIGFzeW5jIGNoYW5uZWwg Zm9yIGEgdmhvc3QgcXVldWUNCj4gPiBAQCAtMTM2LDE3ICs3MiwxMSBAQCBpbnQgcnRlX3Zob3N0 X2FzeW5jX2NoYW5uZWxfdW5yZWdpc3RlcihpbnQgdmlkLA0KPiB1aW50MTZfdA0KPiA+IHF1ZXVl X2lkKTsNCj4gPiAgICogIHZob3N0IGRldmljZSBpZCBhc3luYyBjaGFubmVsIHRvIGJlIGF0dGFj aGVkIHRvDQo+ID4gICAqIEBwYXJhbSBxdWV1ZV9pZA0KPiA+ICAgKiAgdmhvc3QgcXVldWUgaWQg YXN5bmMgY2hhbm5lbCB0byBiZSBhdHRhY2hlZCB0bw0KPiA+IC0gKiBAcGFyYW0gY29uZmlnDQo+ ID4gLSAqICBBc3luYyBjaGFubmVsIGNvbmZpZ3VyYXRpb24NCj4gPiAtICogQHBhcmFtIG9wcw0K PiA+IC0gKiAgQXN5bmMgY2hhbm5lbCBvcGVyYXRpb24gY2FsbGJhY2tzDQo+ID4gICAqIEByZXR1 cm4NCj4gPiAgICogIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZXMNCj4gPiAgICovDQo+ID4g IF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+IC1pbnQgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVn aXN0ZXJfdGhyZWFkX3Vuc2FmZShpbnQgdmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwNCj4gPiAt CXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY29uZmlnIGNvbmZpZywNCj4gPiAtCXN0cnVjdCBydGVf dmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMgKm9wcyk7DQo+ID4gK2ludCBydGVfdmhvc3RfYXN5bmNf Y2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVpbnQxNl90DQo+ID4gcXVl dWVfaWQpOw0KPiA+DQo+ID4gIC8qKg0KPiA+ICAgKiBVbnJlZ2lzdGVyIGFuIGFzeW5jIGNoYW5u ZWwgZm9yIGEgdmhvc3QgcXVldWUgd2l0aG91dCBwZXJmb3JtaW5nIGFueQ0KPiA+IEBAIC0xNzks MTIgKzEwOSwxNyBAQCBpbnQNCj4gcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfdW5yZWdpc3Rlcl90 aHJlYWRfdW5zYWZlKGludA0KPiA+IHZpZCwNCj4gPiAgICogIGFycmF5IG9mIHBhY2tldHMgdG8g YmUgZW5xdWV1ZWQNCj4gPiAgICogQHBhcmFtIGNvdW50DQo+ID4gICAqICBwYWNrZXRzIG51bSB0 byBiZSBlbnF1ZXVlZA0KPiA+ICsgKiBAcGFyYW0gZG1hX2lkDQo+ID4gKyAqICB0aGUgaWRlbnRp ZmllciBvZiB0aGUgRE1BIGRldmljZQ0KPiA+ICsgKiBAcGFyYW0gdmNoYW4NCj4gPiArICogIHRo ZSBpZGVudGlmaWVyIG9mIHZpcnR1YWwgRE1BIGNoYW5uZWwNCj4gPiAgICogQHJldHVybg0KPiA+ ICAgKiAgbnVtIG9mIHBhY2tldHMgZW5xdWV1ZWQNCj4gPiAgICovDQo+ID4gIF9fcnRlX2V4cGVy aW1lbnRhbA0KPiA+ICB1aW50MTZfdCBydGVfdmhvc3Rfc3VibWl0X2VucXVldWVfYnVyc3QoaW50 IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gLQkJc3RydWN0IHJ0ZV9tYnVmICoqcGt0cywg dWludDE2X3QgY291bnQpOw0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90 IGNvdW50LCBpbnQxNl90IGRtYV9pZCwNCj4gPiArCQl1aW50MTZfdCB2Y2hhbik7DQo+IA0KPiBB bGwgZG1hX2lkIGluIHRoZSBBUEkgc2hvdWxkIGJlIHVpbnQxNl90LiBPdGhlcndpc2UgeW91IG5l ZWQgdG8gY2hlY2sgaWYgdmFsaWQuDQoNClllcywgeW91IGFyZSByaWdodC4gQWx0aG91Z2ggZG1h X2lkIGlzIGRlZmluZWQgYXMgaW50MTZfdCBhbmQgRE1BIGxpYnJhcnkgY2hlY2tzDQppZiBpdCBp cyB2YWxpZCwgdmhvc3QgZG9lc24ndCBoYW5kbGUgRE1BIGZhaWx1cmUgYW5kIHdlIG5lZWQgdG8g bWFrZSBzdXJlIGRtYV9pZA0KaXMgdmFsaWQgYmVmb3JlIHVzaW5nIGl0LiBBbmQgZXZlbiBpZiB2 aG9zdCBoYW5kbGVzIERNQSBlcnJvciwgYSBiZXR0ZXIgcGxhY2UgdG8gY2hlY2sNCmludmFsaWQg ZG1hX2lkIGlzIGJlZm9yZSBwYXNzaW5nIGl0IHRvIERNQSBsaWJyYXJ5IHRvby4gSSB3aWxsIGFk ZCB0aGUgY2hlY2sgbGF0ZXIuDQoNCj4gDQo+ID4NCj4gPiAgLyoqDQo+ID4gICAqIFRoaXMgZnVu Y3Rpb24gY2hlY2tzIGFzeW5jIGNvbXBsZXRpb24gc3RhdHVzIGZvciBhIHNwZWNpZmljIHZob3N0 DQo+ID4gQEAgLTE5OSwxMiArMTM0LDE3IEBAIHVpbnQxNl90IHJ0ZV92aG9zdF9zdWJtaXRfZW5x dWV1ZV9idXJzdChpbnQNCj4gdmlkLA0KPiA+IHVpbnQxNl90IHF1ZXVlX2lkLA0KPiA+ICAgKiAg YmxhbmsgYXJyYXkgdG8gZ2V0IHJldHVybiBwYWNrZXQgcG9pbnRlcg0KPiA+ICAgKiBAcGFyYW0g Y291bnQNCj4gPiAgICogIHNpemUgb2YgdGhlIHBhY2tldCBhcnJheQ0KPiA+ICsgKiBAcGFyYW0g ZG1hX2lkDQo+ID4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB0aGUgRE1BIGRldmljZQ0KPiA+ICsg KiBAcGFyYW0gdmNoYW4NCj4gPiArICogIHRoZSBpZGVudGlmaWVyIG9mIHZpcnR1YWwgRE1BIGNo YW5uZWwNCj4gPiAgICogQHJldHVybg0KPiA+ICAgKiAgbnVtIG9mIHBhY2tldHMgcmV0dXJuZWQN Cj4gPiAgICovDQo+ID4gIF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ICB1aW50MTZfdCBydGVfdmhv c3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZChpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4g PiAtCQlzdHJ1Y3QgcnRlX21idWYgKipwa3RzLCB1aW50MTZfdCBjb3VudCk7DQo+ID4gKwkJc3Ry dWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291bnQsIGludDE2X3QgZG1hX2lkLA0KPiA+ ICsJCXVpbnQxNl90IHZjaGFuKTsNCj4gPg0KPiA+ICAvKioNCj4gPiAgICogVGhpcyBmdW5jdGlv biByZXR1cm5zIHRoZSBhbW91bnQgb2YgaW4tZmxpZ2h0IHBhY2tldHMgZm9yIHRoZSB2aG9zdA0K PiA+IEBAIC0yMzUsMTEgKzE3NSwzMiBAQCBpbnQgcnRlX3Zob3N0X2FzeW5jX2dldF9pbmZsaWdo dChpbnQgdmlkLCB1aW50MTZfdA0KPiA+IHF1ZXVlX2lkKTsNCj4gPiAgICogIEJsYW5rIGFycmF5 IHRvIGdldCByZXR1cm4gcGFja2V0IHBvaW50ZXINCj4gPiAgICogQHBhcmFtIGNvdW50DQo+ID4g ICAqICBTaXplIG9mIHRoZSBwYWNrZXQgYXJyYXkNCj4gPiArICogQHBhcmFtIGRtYV9pZA0KPiA+ ICsgKiAgdGhlIGlkZW50aWZpZXIgb2YgdGhlIERNQSBkZXZpY2UNCj4gPiArICogQHBhcmFtIHZj aGFuDQo+ID4gKyAqICB0aGUgaWRlbnRpZmllciBvZiB2aXJ0dWFsIERNQSBjaGFubmVsDQo+ID4g ICAqIEByZXR1cm4NCj4gPiAgICogIE51bWJlciBvZiBwYWNrZXRzIHJldHVybmVkDQo+ID4gICAq Lw0KPiA+ICBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAgdWludDE2X3QgcnRlX3Zob3N0X2NsZWFy X3F1ZXVlX3RocmVhZF91bnNhZmUoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQsDQo+ID4gLQkJ c3RydWN0IHJ0ZV9tYnVmICoqcGt0cywgdWludDE2X3QgY291bnQpOw0KPiA+ICsJCXN0cnVjdCBy dGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50LCBpbnQxNl90IGRtYV9pZCwNCj4gPiArCQl1 aW50MTZfdCB2Y2hhbik7DQo+ID4gKy8qKg0KPiA+ICsgKiBUaGUgRE1BIHZDaGFubmVscyB1c2Vk IGluIGFzeW5jaHJvbm91cyBkYXRhIHBhdGggbXVzdCBiZQ0KPiBjb25maWd1cmVkDQo+ID4gKyAq IGZpcnN0LiBTbyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgZW5hYmxp bmcgRE1BDQo+ID4gKyAqIGFjY2VsZXJhdGlvbiBmb3IgdnJpbmcuIElmIHRoaXMgZnVuY3Rpb24g ZmFpbHMsIGFzeW5jaHJvbm91cyBkYXRhIHBhdGgNCj4gPiArICogY2Fubm90IGJlIGVuYWJsZWQg Zm9yIGFueSB2cmluZyBmdXJ0aGVyLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gZG1hcw0KPiA+ ICsgKiAgRE1BIGluZm9ybWF0aW9uDQo+ID4gKyAqIEBwYXJhbSBjb3VudA0KPiA+ICsgKiAgRWxl bWVudCBudW1iZXIgb2YgJ2RtYXMnDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogIDAgb24gc3Vj Y2VzcywgYW5kIC0xIG9uIGZhaWx1cmUNCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRh bA0KPiA+ICtpbnQgcnRlX3Zob3N0X2FzeW5jX2RtYV9jb25maWd1cmUoc3RydWN0IHJ0ZV92aG9z dF9hc3luY19kbWFfaW5mbw0KPiAqZG1hcywNCj4gPiArCQl1aW50MTZfdCBjb3VudCk7DQo+IA0K PiBJIHRoaW5rIGJhc2VkIG9uIGN1cnJlbnQgZGVzaWduLCB2aG9zdCBjYW4gdXNlIGV2ZXJ5IHZj aGFuIGlmIHVzZXIgYXBwIGxldCBpdC4NCj4gU28gdGhlIG1heF9kZXNjIGFuZCBtYXhfdmNoYW5z IGNhbiBqdXN0IGJlIGdvdCBmcm9tIGRtYWRldiBBUElzPyBUaGVuDQo+IHRoZXJlJ3MNCj4gbm8g bmVlZCB0byBpbnRyb2R1Y2UgdGhlIG5ldyBBQkkgc3RydWN0IHJ0ZV92aG9zdF9hc3luY19kbWFf aW5mby4NCg0KWWVzLCBubyBuZWVkIHRvIGludHJvZHVjZSBzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5j X2RtYV9pbmZvLiBXZSBjYW4gZWl0aGVyIHVzZQ0Kc3RydWN0IHJ0ZV9kbWFfaW5mbyB3aGljaCBp cyBzdWdnZXN0ZWQgYnkgTWF4aW1lLCBvciBxdWVyeSBmcm9tIGRtYSBsaWJyYXJ5DQp2aWEgZGV2 aWNlIGlkLiBTaW5jZSBkbWEgZGV2aWNlIGNvbmZpZ3VyYXRpb24gaXMgbGVmdCB0byBhcHBsaWNh dGlvbnMsIEkgcHJlZmVyIHRvDQp1c2UgcnRlX2RtYV9pbmZvIGRpcmVjdGx5LiBIb3cgZG8geW91 IHRoaW5rPw0KDQo+IA0KPiBBbmQgYWJvdXQgbWF4X2Rlc2MsIEkgc2VlIHRoZSBkbWFkZXYgbGli LCB5b3UgY2FuIGdldCB2Y2hhbidzIG1heF9kZXNjDQo+IGJ1dCB5b3UNCj4gbWF5IHVzZSBhIG5i X2Rlc2MgKDw9IG1heF9kZXNjKSB0byBjb25maWd1cmUgdmNoYW5sLiBBbmQgSUlVQywgdmhvc3Qg d2FudHMNCj4gdG8NCj4ga25vdyB0aGUgbmJfZGVzYyBpbnN0ZWFkIG9mIG1heF9kZXNjPw0KDQpU cnVlLCBuYl9kZXNjIGlzIGJldHRlciB0aGFuIG1heF9kZXNjLiBCdXQgZG1hIGxpYnJhcnkgZG9l c27igJl0IHByb3ZpZGUgZnVuY3Rpb24NCnRvIHF1ZXJ5IG5iX2Rlc2MgZm9yIGV2ZXJ5IHZjaGFu bmVsLiBBbmQgcnRlX2RtYV9pbmZvIGNhbm5vdCBiZSB1c2VkIGluDQpydGVfdmhvc3RfYXN5bmNf ZG1hX2NvbmZpZ3VyZSgpLCBpZiB2aG9zdCB1c2VzIG5iX2Rlc2MuIFNvIHRoZSBvbmx5IHdheSBp cw0KdG8gcmVxdWlyZSB1c2VycyB0byBwcm92aWRlIG5iX2Rlc2MgZm9yIGV2ZXJ5IHZjaGFubmVs LCBhbmQgaXQgd2lsbCBpbnRyb2R1Y2UNCmEgbmV3IHN0cnVjdC4gSXMgaXQgcmVhbGx5IG5lZWRl ZD8NCg0KPiANCj4gPg0KPiA+ICAjZW5kaWYgLyogX1JURV9WSE9TVF9BU1lOQ19IXyAqLw0KPiA+ IGRpZmYgLS1naXQgYS9saWIvdmhvc3QvdmVyc2lvbi5tYXAgYi9saWIvdmhvc3QvdmVyc2lvbi5t YXANCj4gPiBpbmRleCBhN2VmN2YxOTc2Li4xMjAyYmE5YzFhIDEwMDY0NA0KPiA+IC0tLSBhL2xp Yi92aG9zdC92ZXJzaW9uLm1hcA0KPiA+ICsrKyBiL2xpYi92aG9zdC92ZXJzaW9uLm1hcA0KPiA+ IEBAIC04NCw2ICs4NCw5IEBAIEVYUEVSSU1FTlRBTCB7DQo+ID4NCj4gPiAgCSMgYWRkZWQgaW4g MjEuMTENCj4gPiAgCXJ0ZV92aG9zdF9nZXRfbW9uaXRvcl9hZGRyOw0KPiA+ICsNCj4gPiArCSMg YWRkZWQgaW4gMjIuMDMNCj4gPiArCXJ0ZV92aG9zdF9hc3luY19kbWFfY29uZmlndXJlOw0KPiA+ ICB9Ow0KPiA+DQo+ID4gIElOVEVSTkFMIHsNCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3Zo b3N0LmMgYi9saWIvdmhvc3Qvdmhvc3QuYw0KPiA+IGluZGV4IDEzYTliYjlkZDEuLjMyZjM3ZjQ4 NTEgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL3Zob3N0L3Zob3N0LmMNCj4gPiArKysgYi9saWIvdmhv c3Qvdmhvc3QuYw0KPiA+IEBAIC0zNDQsNiArMzQ0LDcgQEAgdmhvc3RfZnJlZV9hc3luY19tZW0o c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEpDQo+ID4gIAkJcmV0dXJuOw0KPiA+DQo+ID4gIAly dGVfZnJlZSh2cS0+YXN5bmMtPnBrdHNfaW5mbyk7DQo+ID4gKwlydGVfZnJlZSh2cS0+YXN5bmMt PnBrdHNfY21wbF9mbGFnKTsNCj4gPg0KPiA+ICAJcnRlX2ZyZWUodnEtPmFzeW5jLT5idWZmZXJz X3BhY2tlZCk7DQo+ID4gIAl2cS0+YXN5bmMtPmJ1ZmZlcnNfcGFja2VkID0gTlVMTDsNCj4gPiBA QCAtMTYyNiw4ICsxNjI3LDcgQEAgcnRlX3Zob3N0X2V4dGVybl9jYWxsYmFja19yZWdpc3Rlcihp bnQgdmlkLA0KPiA+ICB9DQo+ID4NCj4gPiAgc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50 DQo+ID4gLWFzeW5jX2NoYW5uZWxfcmVnaXN0ZXIoaW50IHZpZCwgdWludDE2X3QgcXVldWVfaWQs DQo+ID4gLQkJc3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyAqb3BzKQ0KPiA+ICth c3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkKQ0KPiA+ICB7 DQo+ID4gIAlzdHJ1Y3QgdmlydGlvX25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiA+ICAJ c3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkZXYtPnZpcnRxdWV1ZVtxdWV1ZV9pZF07DQo+ ID4gQEAgLTE2NTYsNiArMTY1NiwxNCBAQCBhc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQs IHVpbnQxNl90DQo+IHF1ZXVlX2lkLA0KPiA+ICAJCWdvdG8gb3V0X2ZyZWVfYXN5bmM7DQo+ID4g IAl9DQo+ID4NCj4gPiArCWFzeW5jLT5wa3RzX2NtcGxfZmxhZyA9IHJ0ZV96bWFsbG9jX3NvY2tl dChOVUxMLCB2cS0+c2l6ZSAqDQo+IHNpemVvZihib29sKSwNCj4gPiArCQkJUlRFX0NBQ0hFX0xJ TkVfU0laRSwgbm9kZSk7DQo+ID4gKwlpZiAoIWFzeW5jLT5wa3RzX2NtcGxfZmxhZykgew0KPiA+ ICsJCVZIT1NUX0xPR19DT05GSUcoRVJSLCAiZmFpbGVkIHRvIGFsbG9jYXRlIGFzeW5jDQo+IHBr dHNfY21wbF9mbGFnDQo+ID4gKHZpZCAlZCwgcWlkOiAlZClcbiIsDQo+ID4gKwkJCQl2aWQsIHF1 ZXVlX2lkKTsNCj4gDQo+IHFpZDogJXUNCj4gDQo+ID4gKwkJZ290byBvdXRfZnJlZV9hc3luYzsN Cj4gPiArCX0NCj4gPiArDQo+ID4gIAlpZiAodnFfaXNfcGFja2VkKGRldikpIHsNCj4gPiAgCQlh c3luYy0+YnVmZmVyc19wYWNrZWQgPSBydGVfbWFsbG9jX3NvY2tldChOVUxMLA0KPiA+ICAJCQkJ dnEtPnNpemUgKiBzaXplb2Yoc3RydWN0DQo+IHZyaW5nX3VzZWRfZWxlbV9wYWNrZWQpLA0KPiA+ IEBAIC0xNjc2LDkgKzE2ODQsNiBAQCBhc3luY19jaGFubmVsX3JlZ2lzdGVyKGludCB2aWQsIHVp bnQxNl90DQo+IHF1ZXVlX2lkLA0KPiA+ICAJCX0NCj4gPiAgCX0NCj4gPg0KPiA+IC0JYXN5bmMt Pm9wcy5jaGVja19jb21wbGV0ZWRfY29waWVzID0gb3BzLQ0KPiA+Y2hlY2tfY29tcGxldGVkX2Nv cGllczsNCj4gPiAtCWFzeW5jLT5vcHMudHJhbnNmZXJfZGF0YSA9IG9wcy0+dHJhbnNmZXJfZGF0 YTsNCj4gPiAtDQo+ID4gIAl2cS0+YXN5bmMgPSBhc3luYzsNCj4gPg0KPiA+ICAJcmV0dXJuIDA7 DQo+ID4gQEAgLTE2OTEsMTUgKzE2OTYsMTMgQEAgYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQg dmlkLCB1aW50MTZfdA0KPiBxdWV1ZV9pZCwNCj4gPiAgfQ0KPiA+DQo+ID4gIGludA0KPiA+IC1y dGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9p ZCwNCj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NvbmZpZyBjb25maWcsDQo+ID4gLQkJ c3RydWN0IHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX29wcyAqb3BzKQ0KPiA+ICtydGVfdmhvc3Rf YXN5bmNfY2hhbm5lbF9yZWdpc3RlcihpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCkNCj4gPiAg ew0KPiA+ICAJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnE7DQo+ID4gIAlzdHJ1Y3QgdmlydGlv X25ldCAqZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiA+ICAJaW50IHJldDsNCj4gPg0KPiA+IC0J aWYgKGRldiA9PSBOVUxMIHx8IG9wcyA9PSBOVUxMKQ0KPiA+ICsJaWYgKGRldiA9PSBOVUxMKQ0K PiA+ICAJCXJldHVybiAtMTsNCj4gPg0KPiA+ICAJaWYgKHF1ZXVlX2lkID49IFZIT1NUX01BWF9W UklORykNCj4gPiBAQCAtMTcxMCwzMyArMTcxMywyMCBAQCBydGVfdmhvc3RfYXN5bmNfY2hhbm5l bF9yZWdpc3RlcihpbnQgdmlkLA0KPiB1aW50MTZfdA0KPiA+IHF1ZXVlX2lkLA0KPiA+ICAJaWYg KHVubGlrZWx5KHZxID09IE5VTEwgfHwgIWRldi0+YXN5bmNfY29weSkpDQo+ID4gIAkJcmV0dXJu IC0xOw0KPiA+DQo+ID4gLQlpZiAodW5saWtlbHkoIShjb25maWcuZmVhdHVyZXMgJiBSVEVfVkhP U1RfQVNZTkNfSU5PUkRFUikpKSB7DQo+ID4gLQkJVkhPU1RfTE9HX0NPTkZJRyhFUlIsDQo+ID4g LQkJCSJhc3luYyBjb3B5IGlzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLWlub3JkZXIgbW9kZSAiDQo+ ID4gLQkJCSIodmlkICVkLCBxaWQ6ICVkKVxuIiwgdmlkLCBxdWV1ZV9pZCk7DQo+ID4gLQkJcmV0 dXJuIC0xOw0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCWlmICh1bmxpa2VseShvcHMtPmNoZWNrX2Nv bXBsZXRlZF9jb3BpZXMgPT0gTlVMTCB8fA0KPiA+IC0JCW9wcy0+dHJhbnNmZXJfZGF0YSA9PSBO VUxMKSkNCj4gPiAtCQlyZXR1cm4gLTE7DQo+ID4gLQ0KPiA+ICAJcnRlX3NwaW5sb2NrX2xvY2so JnZxLT5hY2Nlc3NfbG9jayk7DQo+ID4gLQlyZXQgPSBhc3luY19jaGFubmVsX3JlZ2lzdGVyKHZp ZCwgcXVldWVfaWQsIG9wcyk7DQo+ID4gKwlyZXQgPSBhc3luY19jaGFubmVsX3JlZ2lzdGVyKHZp ZCwgcXVldWVfaWQpOw0KPiA+ICAJcnRlX3NwaW5sb2NrX3VubG9jaygmdnEtPmFjY2Vzc19sb2Nr KTsNCj4gPg0KPiA+ICAJcmV0dXJuIHJldDsNCj4gPiAgfQ0KPiA+DQo+ID4gIGludA0KPiA+IC1y dGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludCB2aWQsIHVp bnQxNl90DQo+IHF1ZXVlX2lkLA0KPiA+IC0JCXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY29uZmln IGNvbmZpZywNCj4gPiAtCQlzdHJ1Y3QgcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfb3BzICpvcHMp DQo+ID4gK3J0ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3RocmVhZF91bnNhZmUoaW50 IHZpZCwgdWludDE2X3QNCj4gcXVldWVfaWQpDQo+ID4gIHsNCj4gPiAgCXN0cnVjdCB2aG9zdF92 aXJ0cXVldWUgKnZxOw0KPiA+ICAJc3RydWN0IHZpcnRpb19uZXQgKmRldiA9IGdldF9kZXZpY2Uo dmlkKTsNCj4gPg0KPiA+IC0JaWYgKGRldiA9PSBOVUxMIHx8IG9wcyA9PSBOVUxMKQ0KPiA+ICsJ aWYgKGRldiA9PSBOVUxMKQ0KPiA+ICAJCXJldHVybiAtMTsNCj4gPg0KPiA+ICAJaWYgKHF1ZXVl X2lkID49IFZIT1NUX01BWF9WUklORykNCj4gPiBAQCAtMTc0NywxOCArMTczNyw3IEBADQo+IHJ0 ZV92aG9zdF9hc3luY19jaGFubmVsX3JlZ2lzdGVyX3RocmVhZF91bnNhZmUoaW50IHZpZCwNCj4g PiB1aW50MTZfdCBxdWV1ZV9pZCwNCj4gPiAgCWlmICh1bmxpa2VseSh2cSA9PSBOVUxMIHx8ICFk ZXYtPmFzeW5jX2NvcHkpKQ0KPiA+ICAJCXJldHVybiAtMTsNCj4gPg0KPiA+IC0JaWYgKHVubGlr ZWx5KCEoY29uZmlnLmZlYXR1cmVzICYgUlRFX1ZIT1NUX0FTWU5DX0lOT1JERVIpKSkgew0KPiA+ IC0JCVZIT1NUX0xPR19DT05GSUcoRVJSLA0KPiA+IC0JCQkiYXN5bmMgY29weSBpcyBub3Qgc3Vw cG9ydGVkIG9uIG5vbi1pbm9yZGVyIG1vZGUgIg0KPiA+IC0JCQkiKHZpZCAlZCwgcWlkOiAlZClc biIsIHZpZCwgcXVldWVfaWQpOw0KPiA+IC0JCXJldHVybiAtMTsNCj4gPiAtCX0NCj4gPiAtDQo+ ID4gLQlpZiAodW5saWtlbHkob3BzLT5jaGVja19jb21wbGV0ZWRfY29waWVzID09IE5VTEwgfHwN Cj4gPiAtCQlvcHMtPnRyYW5zZmVyX2RhdGEgPT0gTlVMTCkpDQo+ID4gLQkJcmV0dXJuIC0xOw0K PiA+IC0NCj4gPiAtCXJldHVybiBhc3luY19jaGFubmVsX3JlZ2lzdGVyKHZpZCwgcXVldWVfaWQs IG9wcyk7DQo+ID4gKwlyZXR1cm4gYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcih2aWQsIHF1ZXVlX2lk KTsNCj4gPiAgfQ0KPiA+DQo+ID4gIGludA0KPiA+IEBAIC0xODM1LDYgKzE4MTQsODMgQEANCj4g cnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfdW5yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKGludA0KPiA+ IHZpZCwgdWludDE2X3QgcXVldWVfaWQpDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+DQo+ ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiArdmhvc3RfZnJlZV9hc3lu Y19kbWFfbWVtKHZvaWQpDQo+ID4gK3sNCj4gPiArCXVpbnQxNl90IGk7DQo+ID4gKw0KPiA+ICsJ Zm9yIChpID0gMDsgaSA8IFJURV9ETUFERVZfREVGQVVMVF9NQVg7IGkrKykgew0KPiA+ICsJCXN0 cnVjdCBhc3luY19kbWFfaW5mbyAqZG1hID0gJmRtYV9jb3B5X3RyYWNrW2ldOw0KPiA+ICsJCWlu dDE2X3QgajsNCj4gPiArDQo+ID4gKwkJaWYgKGRtYS0+bWF4X3ZjaGFucyA9PSAwKSB7DQo+ID4g KwkJCWNvbnRpbnVlOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJZm9yIChqID0gMDsgaiA8IGRt YS0+bWF4X3ZjaGFuczsgaisrKSB7DQo+ID4gKwkJCXJ0ZV9mcmVlKGRtYS0+dmNoYW5zW2pdLm1l dGFkYXRhKTsNCj4gPiArCQl9DQo+ID4gKwkJcnRlX2ZyZWUoZG1hLT52Y2hhbnMpOw0KPiA+ICsJ CWRtYS0+dmNoYW5zID0gTlVMTDsNCj4gPiArCQlkbWEtPm1heF92Y2hhbnMgPSAwOw0KPiA+ICsJ fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQNCj4gPiArcnRlX3Zob3N0X2FzeW5jX2RtYV9jb25m aWd1cmUoc3RydWN0IHJ0ZV92aG9zdF9hc3luY19kbWFfaW5mbyAqZG1hcywNCj4gdWludDE2X3QN Cj4gPiBjb3VudCkNCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArDQo+ID4gKwlpZiAo IWRtYXMpIHsNCj4gPiArCQlWSE9TVF9MT0dfQ09ORklHKEVSUiwgIkludmFsaWQgRE1BIGNvbmZp Z3VyYXRpb24NCj4gcGFyYW1ldGVyLlxuIik7DQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQo+ID4gKwkJc3RydWN0 IGFzeW5jX2RtYV92Y2hhbl9pbmZvICp2Y2hhbnM7DQo+ID4gKwkJaW50MTZfdCBkZXZfaWQ7DQo+ ID4gKwkJdWludDE2X3QgbWF4X3ZjaGFuczsNCj4gPiArCQl1aW50MTZfdCBtYXhfZGVzYzsNCj4g PiArCQl1aW50MTZfdCBqOw0KPiA+ICsNCj4gPiArCQlkZXZfaWQgPSBkbWFzW2ldLmRldl9pZDsN Cj4gPiArCQltYXhfdmNoYW5zID0gZG1hc1tpXS5tYXhfdmNoYW5zOw0KPiA+ICsJCW1heF9kZXNj ID0gZG1hc1tpXS5tYXhfZGVzYzsNCj4gPiArDQo+ID4gKwkJaWYgKCFydGVfaXNfcG93ZXJfb2Zf MihtYXhfZGVzYykpIHsNCj4gPiArCQkJbWF4X2Rlc2MgPSBydGVfYWxpZ24zMnBvdzIobWF4X2Rl c2MpOw0KPiA+ICsJCX0NCj4gDQo+IEkgdGhpbmsgd2hlbiBhbGlnbmluZyB0byBwb3dlciBvZiAy LCBpdCBzaG91bGQgZXhjZWVkIG5vdCBtYXhfZGVzYz8NCg0KQWxpZ25lZCBtYXhfZGVzYyBpcyB1 c2VkIHRvIGFsbG9jYXRlIGNvbnRleHQgdHJhY2tpbmcgYXJyYXkuIFdlIG9ubHkgbmVlZA0KdG8g Z3VhcmFudGVlIHRoZSBzaXplIG9mIHRoZSBhcnJheSBmb3IgZXZlcnkgdmNoYW5uZWwgaXMgPj0g bWF4X2Rlc2MuIFNvIGl0J3MNCk9LIHRvIGhhdmUgZ3JlYXRlciBhcnJheSBzaXplIHRoYW4gbWF4 X2Rlc2MuDQoNCj4gQW5kIGJhc2VkIG9uIGFib3ZlIGNvbW1lbnQsIGlmIHRoaXMgbWF4X2Rlc2Mg aXMgbmJfZGVzYyBjb25maWd1cmVkIGZvcg0KPiB2Y2hhbmwsIHlvdSBzaG91bGQganVzdCBtYWtl IHN1cmUgdGhlIG5iX2Rlc2MgYmUgcG93ZXItb2YtMi4NCj4gDQo+ID4gKw0KPiA+ICsJCXZjaGFu cyA9IHJ0ZV96bWFsbG9jKE5VTEwsIHNpemVvZihzdHJ1Y3QNCj4gYXN5bmNfZG1hX3ZjaGFuX2lu Zm8pICoNCj4gPiBtYXhfdmNoYW5zLA0KPiA+ICsJCQkJUlRFX0NBQ0hFX0xJTkVfU0laRSk7DQo+ ID4gKwkJaWYgKHZjaGFucyA9PSBOVUxMKSB7DQo+ID4gKwkJCVZIT1NUX0xPR19DT05GSUcoRVJS LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHZjaGFucw0KPiBmb3IgZG1hLQ0KPiA+ICVkLiINCj4gPiAr CQkJCQkiIENhbm5vdCBlbmFibGUgYXN5bmMgZGF0YS1wYXRoLlxuIiwNCj4gZGV2X2lkKTsNCj4g PiArCQkJdmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKCk7DQo+ID4gKwkJCXJldHVybiAtMTsNCj4g PiArCQl9DQo+ID4gKw0KPiA+ICsJCWZvciAoaiA9IDA7IGogPCBtYXhfdmNoYW5zOyBqKyspIHsN Cj4gPiArCQkJdmNoYW5zW2pdLm1ldGFkYXRhID0gcnRlX3ptYWxsb2MoTlVMTCwgc2l6ZW9mKGJv b2wgKikNCj4gKg0KPiA+IG1heF9kZXNjLA0KPiA+ICsJCQkJCVJURV9DQUNIRV9MSU5FX1NJWkUp Ow0KPiA+ICsJCQlpZiAoIXZjaGFuc1tqXS5tZXRhZGF0YSkgew0KPiA+ICsJCQkJVkhPU1RfTE9H X0NPTkZJRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUNCj4gbWV0YWRhdGEgZm9yDQo+ID4gIg0K PiA+ICsJCQkJCQkiZG1hLSVkIHZjaGFuLSV1XG4iLA0KPiBkZXZfaWQsIGopOw0KPiA+ICsJCQkJ dmhvc3RfZnJlZV9hc3luY19kbWFfbWVtKCk7DQo+ID4gKwkJCQlyZXR1cm4gLTE7DQo+ID4gKwkJ CX0NCj4gPiArDQo+ID4gKwkJCXZjaGFuc1tqXS5yaW5nX3NpemUgPSBtYXhfZGVzYzsNCj4gPiAr CQkJdmNoYW5zW2pdLnJpbmdfbWFzayA9IG1heF9kZXNjIC0gMTsNCj4gPiArCQl9DQo+ID4gKw0K PiA+ICsJCWRtYV9jb3B5X3RyYWNrW2Rldl9pZF0udmNoYW5zID0gdmNoYW5zOw0KPiA+ICsJCWRt YV9jb3B5X3RyYWNrW2Rldl9pZF0ubWF4X3ZjaGFucyA9IG1heF92Y2hhbnM7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gIGludA0KPiA+ICBydGVf dmhvc3RfYXN5bmNfZ2V0X2luZmxpZ2h0KGludCB2aWQsIHVpbnQxNl90IHF1ZXVlX2lkKQ0KPiA+ ICB7DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi92aG9zdC92aG9zdC5oIGIvbGliL3Zob3N0L3Zob3N0 LmgNCj4gPiBpbmRleCA3MDg1ZTA4ODVjLi5kOWJkYTM0ZTExIDEwMDY0NA0KPiA+IC0tLSBhL2xp Yi92aG9zdC92aG9zdC5oDQo+ID4gKysrIGIvbGliL3Zob3N0L3Zob3N0LmgNCj4gPiBAQCAtMTks NiArMTksNyBAQA0KPiA+ICAjaW5jbHVkZSA8cnRlX2V0aGVyLmg+DQo+ID4gICNpbmNsdWRlIDxy dGVfcndsb2NrLmg+DQo+ID4gICNpbmNsdWRlIDxydGVfbWFsbG9jLmg+DQo+ID4gKyNpbmNsdWRl IDxydGVfZG1hZGV2Lmg+DQo+ID4NCj4gPiAgI2luY2x1ZGUgInJ0ZV92aG9zdC5oIg0KPiA+ICAj aW5jbHVkZSAicnRlX3ZkcGEuaCINCj4gPiBAQCAtNTAsNiArNTEsNyBAQA0KPiA+DQo+ID4gICNk ZWZpbmUgVkhPU1RfTUFYX0FTWU5DX0lUIChNQVhfUEtUX0JVUlNUKQ0KPiA+ICAjZGVmaW5lIFZI T1NUX01BWF9BU1lOQ19WRUMgMjA0OA0KPiA+ICsjZGVmaW5lIFZIT1NUX0FTWU5DX0RNQV9CQVRD SElOR19TSVpFIDMyDQo+ID4NCj4gPiAgI2RlZmluZSBQQUNLRURfREVTQ19FTlFVRVVFX1VTRURf RkxBRyh3KQlcDQo+ID4gIAkoKHcpID8gKFZSSU5HX0RFU0NfRl9BVkFJTCB8IFZSSU5HX0RFU0Nf Rl9VU0VEIHwNCj4gVlJJTkdfREVTQ19GX1dSSVRFKSA6IFwNCj4gPiBAQCAtMTE5LDYgKzEyMSw0 MSBAQCBzdHJ1Y3QgdnJpbmdfdXNlZF9lbGVtX3BhY2tlZCB7DQo+ID4gIAl1aW50MzJfdCBjb3Vu dDsNCj4gPiAgfTsNCj4gPg0KPiA+ICtzdHJ1Y3QgYXN5bmNfZG1hX3ZjaGFuX2luZm8gew0KPiA+ ICsJLyogY2lyY3VsYXIgYXJyYXkgdG8gdHJhY2sgY29weSBtZXRhZGF0YSAqLw0KPiA+ICsJYm9v bCAqKm1ldGFkYXRhOw0KPiANCj4gSWYgdGhlIG1ldGFkYXRhIHdpbGwgb25seSBiZSBmbGFncywg bWF5YmUganVzdCB1c2Ugc29tZQ0KPiBuYW1lIGNhbGxlZCBYWFhfZmxhZw0KDQpTdXJlLCBJIHdp bGwgcmVuYW1lIGl0Lg0KDQo+IA0KPiA+ICsNCj4gPiArCS8qIG1heCBlbGVtZW50cyBpbiAnbWV0 YWRhdGEnICovDQo+ID4gKwl1aW50MTZfdCByaW5nX3NpemU7DQo+ID4gKwkvKiByaW5nIGluZGV4 IG1hc2sgZm9yICdtZXRhZGF0YScgKi8NCj4gPiArCXVpbnQxNl90IHJpbmdfbWFzazsNCj4gPiAr DQo+ID4gKwkvKiBiYXRjaGluZyBjb3BpZXMgYmVmb3JlIGEgRE1BIGRvb3JiZWxsICovDQo+ID4g Kwl1aW50MTZfdCBucl9iYXRjaGluZzsNCj4gPiArDQo+ID4gKwkvKioNCj4gPiArCSAqIERNQSB2 aXJ0dWFsIGNoYW5uZWwgbG9jay4gQWx0aG91Z2ggaXQgaXMgYWJsZSB0byBiaW5kIERNQQ0KPiA+ ICsJICogdmlydHVhbCBjaGFubmVscyB0byBkYXRhIHBsYW5lIHRocmVhZHMsIHZob3N0IGNvbnRy b2wgcGxhbmUNCj4gPiArCSAqIHRocmVhZCBjb3VsZCBjYWxsIGRhdGEgcGxhbmUgZnVuY3Rpb25z IHRvbywgdGh1cyBjYXVzaW5nDQo+ID4gKwkgKiBETUEgZGV2aWNlIGNvbnRlbnRpb24uDQo+ID4g KwkgKg0KPiA+ICsJICogRm9yIGV4YW1wbGUsIGluIFZNIGV4aXQgY2FzZSwgdmhvc3QgY29udHJv bCBwbGFuZSB0aHJlYWQgbmVlZHMNCj4gPiArCSAqIHRvIGNsZWFyIGluLWZsaWdodCBwYWNrZXRz IGJlZm9yZSBkaXNhYmxlIHZyaW5nLCBidXQgdGhlcmUgY291bGQNCj4gPiArCSAqIGJlIGFub3R0 aGVyIGRhdGEgcGxhbmUgdGhyZWFkIGlzIGVucXVldWluZyBwYWNrZXRzIHRvIHRoZSBzYW1lDQo+ ID4gKwkgKiB2cmluZyB3aXRoIHRoZSBzYW1lIERNQSB2aXJ0dWFsIGNoYW5uZWwuIEJ1dCBkbWFk ZXYgUE1EDQo+IGZ1bmN0aW9ucw0KPiA+ICsJICogYXJlIGxvY2stZnJlZSwgc28gdGhlIGNvbnRy b2wgcGxhbmUgYW5kIGRhdGEgcGxhbmUgdGhyZWFkcw0KPiA+ICsJICogY291bGQgb3BlcmF0ZSB0 aGUgc2FtZSBETUEgdmlydHVhbCBjaGFubmVsIGF0IHRoZSBzYW1lIHRpbWUuDQo+ID4gKwkgKi8N Cj4gPiArCXJ0ZV9zcGlubG9ja190IGRtYV9sb2NrOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3Ry dWN0IGFzeW5jX2RtYV9pbmZvIHsNCj4gPiArCXVpbnQxNl90IG1heF92Y2hhbnM7DQo+ID4gKwlz dHJ1Y3QgYXN5bmNfZG1hX3ZjaGFuX2luZm8gKnZjaGFuczsNCj4gPiArfTsNCj4gPiArDQo+ID4g K2V4dGVybiBzdHJ1Y3QgYXN5bmNfZG1hX2luZm8NCj4gZG1hX2NvcHlfdHJhY2tbUlRFX0RNQURF Vl9ERUZBVUxUX01BWF07DQo+ID4gKw0KPiA+ICAvKioNCj4gPiAgICogaW5mbGlnaHQgYXN5bmMg cGFja2V0IGluZm9ybWF0aW9uDQo+ID4gICAqLw0KPiA+IEBAIC0xMjksOSArMTY2LDYgQEAgc3Ry dWN0IGFzeW5jX2luZmxpZ2h0X2luZm8gew0KPiA+ICB9Ow0KPiA+DQo+ID4gIHN0cnVjdCB2aG9z dF9hc3luYyB7DQo+ID4gLQkvKiBvcGVyYXRpb24gY2FsbGJhY2tzIGZvciBETUEgKi8NCj4gPiAt CXN0cnVjdCBydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF9vcHMgb3BzOw0KPiA+IC0NCj4gPiAgCXN0 cnVjdCBydGVfdmhvc3RfaW92X2l0ZXIgaW92X2l0ZXJbVkhPU1RfTUFYX0FTWU5DX0lUXTsNCj4g PiAgCXN0cnVjdCBydGVfdmhvc3RfaW92ZWMgaW92ZWNbVkhPU1RfTUFYX0FTWU5DX1ZFQ107DQo+ ID4gIAl1aW50MTZfdCBpdGVyX2lkeDsNCj4gPiBAQCAtMTM5LDYgKzE3MywxOSBAQCBzdHJ1Y3Qg dmhvc3RfYXN5bmMgew0KPiA+DQo+ID4gIAkvKiBkYXRhIHRyYW5zZmVyIHN0YXR1cyAqLw0KPiA+ ICAJc3RydWN0IGFzeW5jX2luZmxpZ2h0X2luZm8gKnBrdHNfaW5mbzsNCj4gPiArCS8qKg0KPiA+ ICsJICogcGFja2V0IHJlb3JkZXIgYXJyYXkuICJ0cnVlIiBpbmRpY2F0ZXMgdGhhdCBETUENCj4g PiArCSAqIGRldmljZSBjb21wbGV0ZXMgYWxsIGNvcGllcyBmb3IgdGhlIHBhY2tldC4NCj4gPiAr CSAqDQo+ID4gKwkgKiBOb3RlIHRoYXQgdGhpcyBhcnJheSBjb3VsZCBiZSB3cml0dGVuIGJ5IG11 bHRpcGxlDQo+ID4gKwkgKiB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUuIEZvciBleGFtcGxlLCB0 d28gdGhyZWFkcw0KPiA+ICsJICogZW5xdWV1ZSBwYWNrZXRzIHRvIHRoZSBzYW1lIHZpcnRxdWV1 ZSB3aXRoIHRoZWlyDQo+ID4gKwkgKiBvd24gRE1BIGRldmljZXMuIEhvd2V2ZXIsIHNpbmNlIG9m ZmxvYWRpbmcgaXMNCj4gPiArCSAqIHBlci1wYWNrZXQgYmFzaXMsIGVhY2ggcGFja2V0IGZsYWcg d2lsbCBvbmx5IGJlDQo+ID4gKwkgKiB3cml0dGVuIGJ5IG9uZSB0aHJlYWQuIEFuZCBzaW5nbGUg Ynl0ZSB3cml0ZSBpcw0KPiA+ICsJICogYXRvbWljLCBzbyBubyBsb2NrIGlzIG5lZWRlZC4NCj4g PiArCSAqLw0KPiA+ICsJYm9vbCAqcGt0c19jbXBsX2ZsYWc7DQo+ID4gIAl1aW50MTZfdCBwa3Rz X2lkeDsNCj4gPiAgCXVpbnQxNl90IHBrdHNfaW5mbGlnaHRfbjsNCj4gPiAgCXVuaW9uIHsNCj4g PiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3ZpcnRpb19uZXQuYyBiL2xpYi92aG9zdC92aXJ0aW9f bmV0LmMNCj4gPiBpbmRleCBiM2Q5NTRhYWI0Li45ZjgxZmM5NzMzIDEwMDY0NA0KPiA+IC0tLSBh L2xpYi92aG9zdC92aXJ0aW9fbmV0LmMNCj4gPiArKysgYi9saWIvdmhvc3QvdmlydGlvX25ldC5j DQo+ID4gQEAgLTExLDYgKzExLDcgQEANCj4gPiAgI2luY2x1ZGUgPHJ0ZV9uZXQuaD4NCj4gPiAg I2luY2x1ZGUgPHJ0ZV9ldGhlci5oPg0KPiA+ICAjaW5jbHVkZSA8cnRlX2lwLmg+DQo+ID4gKyNp bmNsdWRlIDxydGVfZG1hZGV2Lmg+DQo+ID4gICNpbmNsdWRlIDxydGVfdmhvc3QuaD4NCj4gPiAg I2luY2x1ZGUgPHJ0ZV90Y3AuaD4NCj4gPiAgI2luY2x1ZGUgPHJ0ZV91ZHAuaD4NCj4gPiBAQCAt MjUsNiArMjYsOSBAQA0KPiA+DQo+ID4gICNkZWZpbmUgTUFYX0JBVENIX0xFTiAyNTYNCj4gPg0K PiA+ICsvKiBETUEgZGV2aWNlIGNvcHkgb3BlcmF0aW9uIHRyYWNraW5nIGFycmF5LiAqLw0KPiA+ ICtzdHJ1Y3QgYXN5bmNfZG1hX2luZm8gZG1hX2NvcHlfdHJhY2tbUlRFX0RNQURFVl9ERUZBVUxU X01BWF07DQo+ID4gKw0KPiA+ICBzdGF0aWMgIF9fcnRlX2Fsd2F5c19pbmxpbmUgYm9vbA0KPiA+ ICByeHZxX2lzX21lcmdlYWJsZShzdHJ1Y3QgdmlydGlvX25ldCAqZGV2KQ0KPiA+ICB7DQo+ID4g QEAgLTQzLDYgKzQ3LDEwOCBAQCBpc192YWxpZF92aXJ0X3F1ZXVlX2lkeCh1aW50MzJfdCBpZHgs IGludCBpc190eCwNCj4gdWludDMyX3QNCj4gPiBucl92cmluZykNCj4gPiAgCXJldHVybiAoaXNf dHggXiAoaWR4ICYgMSkpID09IDAgJiYgaWR4IDwgbnJfdnJpbmc7DQo+ID4gIH0NCj4gPg0KPiA+ ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50MTZfdA0KPiA+ICt2aG9zdF9hc3luY19k bWFfdHJhbnNmZXIoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIGludDE2X3QgZG1hX2lkLA0K PiA+ICsJCXVpbnQxNl90IHZjaGFuLCB1aW50MTZfdCBoZWFkX2lkeCwNCj4gPiArCQlzdHJ1Y3Qg cnRlX3Zob3N0X2lvdl9pdGVyICpwa3RzLCB1aW50MTZfdCBucl9wa3RzKQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgYXN5bmNfZG1hX3ZjaGFuX2luZm8gKmRtYV9pbmZvID0NCj4gPiAmZG1hX2NvcHlf dHJhY2tbZG1hX2lkXS52Y2hhbnNbdmNoYW5dOw0KPiA+ICsJdWludDE2X3QgcmluZ19tYXNrID0g ZG1hX2luZm8tPnJpbmdfbWFzazsNCj4gPiArCXVpbnQxNl90IHBrdF9pZHg7DQo+ID4gKw0KPiA+ ICsJcnRlX3NwaW5sb2NrX2xvY2soJmRtYV9pbmZvLT5kbWFfbG9jayk7DQo+ID4gKw0KPiA+ICsJ Zm9yIChwa3RfaWR4ID0gMDsgcGt0X2lkeCA8IG5yX3BrdHM7IHBrdF9pZHgrKykgew0KPiA+ICsJ CXN0cnVjdCBydGVfdmhvc3RfaW92ZWMgKmlvdiA9IHBrdHNbcGt0X2lkeF0uaW92Ow0KPiA+ICsJ CWludCBjb3B5X2lkeCA9IDA7DQo+ID4gKwkJdWludDE2X3QgbnJfc2VncyA9IHBrdHNbcGt0X2lk eF0ubnJfc2VnczsNCj4gPiArCQl1aW50MTZfdCBpOw0KPiA+ICsNCj4gPiArCQlpZiAocnRlX2Rt YV9idXJzdF9jYXBhY2l0eShkbWFfaWQsIHZjaGFuKSA8IG5yX3NlZ3MpIHsNCj4gPiArCQkJZ290 byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgbnJfc2Vnczsg aSsrKSB7DQo+ID4gKwkJCS8qKg0KPiA+ICsJCQkgKiBXZSBoYXZlIGNoZWNrZWQgdGhlIGF2YWls YWJsZSBzcGFjZSBiZWZvcmUNCj4gc3VibWl0IGNvcGllcw0KPiA+IHRvIERNQQ0KPiA+ICsJCQkg KiB2Q2hhbm5lbCwgc28gd2UgZG9uJ3QgaGFuZGxlIGVycm9yIGhlcmUuDQo+ID4gKwkJCSAqLw0K PiA+ICsJCQljb3B5X2lkeCA9IHJ0ZV9kbWFfY29weShkbWFfaWQsIHZjaGFuLA0KPiA+IChydGVf aW92YV90KWlvdltpXS5zcmNfYWRkciwNCj4gPiArCQkJCQkocnRlX2lvdmFfdClpb3ZbaV0uZHN0 X2FkZHIsIGlvdltpXS5sZW4sDQo+ID4gKwkJCQkJUlRFX0RNQV9PUF9GTEFHX0xMQyk7DQo+IA0K PiBUaGlzIGFzc3VtZXMgcnRlX2RtYV9jb3B5IHdpbGwgYWx3YXlzIHN1Y2NlZWQgaWYgdGhlcmUn cyBhdmFpbGFibGUgc3BhY2UuDQo+IA0KPiBCdXQgdGhlIEFQSSBkb3h5Z2VuIHNheXM6DQo+IA0K PiAqIEByZXR1cm4NCj4gICogICAtIDAuLlVJTlQxNl9NQVg6IGluZGV4IG9mIGVucXVldWVkIGpv Yi4NCj4gICogICAtIC1FTk9TUEM6IGlmIG5vIHNwYWNlIGxlZnQgdG8gZW5xdWV1ZS4NCj4gICog ICAtIG90aGVyIHZhbHVlcyA8IDAgb24gZmFpbHVyZS4NCj4gDQo+IFNvIGl0IHNob3VsZCBjb25z aWRlciBvdGhlciB2ZW5kb3Itc3BlY2lmaWMgZXJyb3JzLg0KDQpFcnJvciBoYW5kbGluZyBpcyBu b3QgZnJlZSBoZXJlLiBTcGVjaWZpY2FsbHksIFNXIGZhbGxiYWNrIGlzIGEgd2F5IHRvIGhhbmRs ZSBmYWlsZWQNCmNvcHkgb3BlcmF0aW9ucy4gQnV0IGl0IHJlcXVpcmVzIHZob3N0IHRvIHRyYWNr IFZBIGZvciBldmVyeSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uDQpidWZmZXIgZm9yIGV2ZXJ5IGNv cHkuIERNQSBsaWJyYXJ5IHVzZXMgSU9WQSwgc28gdmhvc3Qgb25seSBwcmVwYXJlcyBJT1ZBIGZv ciBjb3BpZXMgb2YNCmV2ZXJ5IHBhY2tldCBpbiBhc3luYyBkYXRhLXBhdGguIEluIHRoZSBjYXNl IG9mIElPVkEgYXMgUEEsIHRoZSBwcmVwYXJlZCBJT1ZBcyBjYW5ub3QNCmJlIHVzZWQgYXMgU1cg ZmFsbGJhY2ssIHdoaWNoIG1lYW5zIHZob3N0IG5lZWRzIHRvIHN0b3JlIFZBIGZvciBldmVyeSBj b3B5IG9mIGV2ZXJ5DQpwYWNrZXQgdG9vLCBldmVuIGlmIHRoZXJlIG5vIGVycm9ycyB3aWxsIGhh cHBlbiBvciBJT1ZBIGlzIFZBLg0KDQpJIGFtIHRoaW5raW5nIHRoYXQgdGhlIG9ubHkgdXNhYmxl IERNQSBlbmdpbmVzIGluIHZob3N0IGFyZSBDQkRNQSBhbmQgRFNBLCBpcyBpdCB3b3J0aA0KdGhl IGNvc3QgZm9yICJmdXR1cmUgSFciPyBJZiB0aGVyZSB3aWxsIGJlIG90aGVyIHZlbmRvcidzIEhX IGluIGZ1dHVyZSwgaXMgaXQgT0sgdG8gYWRkIHRoZQ0Kc3VwcG9ydCBsYXRlcj8gT3IgaXMgdGhl cmUgYW55IHdheSB0byBnZXQgVkEgZnJvbSBJT1ZBPw0KDQpUaGFua3MsDQpKaWF5dQ0KPiANCj4g VGhhbmtzLA0KPiBDaGVuYm8NCj4gDQo+IA0KDQo=