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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,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 53751C352A4 for ; Thu, 13 Feb 2020 02:59:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 16E8E2168B for ; Thu, 13 Feb 2020 02:59:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729467AbgBMC7m (ORCPT ); Wed, 12 Feb 2020 21:59:42 -0500 Received: from mga04.intel.com ([192.55.52.120]:22382 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729378AbgBMC7m (ORCPT ); Wed, 12 Feb 2020 21:59:42 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Feb 2020 18:59:41 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,434,1574150400"; d="scan'208";a="237903525" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga006.jf.intel.com with ESMTP; 12 Feb 2020 18:59:40 -0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 12 Feb 2020 18:59:40 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.5]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.196]) with mapi id 14.03.0439.000; Thu, 13 Feb 2020 10:59:38 +0800 From: "Liu, Yi L" To: Peter Xu CC: "qemu-devel@nongnu.org" , "david@gibson.dropbear.id.au" , "pbonzini@redhat.com" , "alex.williamson@redhat.com" , "mst@redhat.com" , "eric.auger@redhat.com" , "Tian, Kevin" , "Tian, Jun J" , "Sun, Yi Y" , "kvm@vger.kernel.org" , "Wu, Hao" , Jacob Pan , Yi Sun , Richard Henderson , "Eduardo Habkost" Subject: RE: [RFC v3 16/25] intel_iommu: add PASID cache management infrastructure Thread-Topic: [RFC v3 16/25] intel_iommu: add PASID cache management infrastructure Thread-Index: AQHV1p1QpD/IVrZuSU6bcoY7cN43AagWNKIAgAEU7GD///SzgIABQpxQ Date: Thu, 13 Feb 2020 02:59:37 +0000 Message-ID: References: <1580300216-86172-1-git-send-email-yi.l.liu@intel.com> <1580300216-86172-17-git-send-email-yi.l.liu@intel.com> <20200211233548.GO984290@xz-x1> <20200212152629.GA1083891@xz-x1> In-Reply-To: <20200212152629.GA1083891@xz-x1> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYzA0ZWYyODQtZDljYi00ZWYwLTliZGEtNzM2OWEzYzdkYmZmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiSlNsQmdXeXpKckkxMEtEV2NnRkxLcGh1V1lkSHhKVTJJNXlBdmlvcW1HWnBGSjFUZXlEY1wvcWI4VEhzY3MrRVgifQ== x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org PiBGcm9tOiBQZXRlciBYdSA8cGV0ZXJ4QHJlZGhhdC5jb20+DQo+IFNlbnQ6IFdlZG5lc2RheSwg RmVicnVhcnkgMTIsIDIwMjAgMTE6MjYgUE0NCj4gVG86IExpdSwgWWkgTCA8eWkubC5saXVAaW50 ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW1JGQyB2MyAxNi8yNV0gaW50ZWxfaW9tbXU6IGFkZCBQ QVNJRCBjYWNoZSBtYW5hZ2VtZW50DQo+IGluZnJhc3RydWN0dXJlDQo+IA0KPiBPbiBXZWQsIEZl YiAxMiwgMjAyMCBhdCAwODozNzozMEFNICswMDAwLCBMaXUsIFlpIEwgd3JvdGU6DQo+ID4gPiBG cm9tOiBQZXRlciBYdSA8cGV0ZXJ4QHJlZGhhdC5jb20+DQo+ID4gPiBTZW50OiBXZWRuZXNkYXks IEZlYnJ1YXJ5IDEyLCAyMDIwIDc6MzYgQU0NCj4gPiA+IFRvOiBMaXUsIFlpIEwgPHlpLmwubGl1 QGludGVsLmNvbT4NCj4gPiA+IFN1YmplY3Q6IFJlOiBbUkZDIHYzIDE2LzI1XSBpbnRlbF9pb21t dTogYWRkIFBBU0lEIGNhY2hlIG1hbmFnZW1lbnQNCj4gPiA+IGluZnJhc3RydWN0dXJlDQo+ID4g Pg0KPiA+ID4gT24gV2VkLCBKYW4gMjksIDIwMjAgYXQgMDQ6MTY6NDdBTSAtMDgwMCwgTGl1LCBZ aSBMIHdyb3RlOg0KPiA+ID4gPiBGcm9tOiBMaXUgWWkgTCA8eWkubC5saXVAaW50ZWwuY29tPg0K PiA+ID4gPg0KPiA+ID4gPiBUaGlzIHBhdGNoIGFkZHMgYSBQQVNJRCBjYWNoZSBtYW5hZ2VtZW50 IGluZnJhc3RydWN0dXJlIGJhc2VkIG9uDQo+ID4gPiA+IG5ldyBhZGRlZCBzdHJ1Y3R1cmUgVlRE UEFTSURBZGRyZXNzU3BhY2UsIHdoaWNoIGlzIHVzZWQgdG8gdHJhY2sNCj4gPiA+ID4gdGhlIFBB U0lEIHVzYWdlIGFuZCBmdXR1cmUgUEFTSUQgdGFnZ2VkIERNQSBhZGRyZXNzIHRyYW5zbGF0aW9u DQo+ID4gPiA+IHN1cHBvcnQgaW4gdklPTU1VLg0KPiA+ID4gPg0KPiA+ID4gPiAgICAgc3RydWN0 IFZURFBBU0lEQWRkcmVzc1NwYWNlIHsNCj4gPiA+ID4gICAgICAgICBWVERCdXMgKnZ0ZF9idXM7 DQo+ID4gPiA+ICAgICAgICAgdWludDhfdCBkZXZmbjsNCj4gPiA+ID4gICAgICAgICBBZGRyZXNz U3BhY2UgYXM7DQo+ID4gPiA+ICAgICAgICAgdWludDMyX3QgcGFzaWQ7DQo+ID4gPiA+ICAgICAg ICAgSW50ZWxJT01NVVN0YXRlICppb21tdV9zdGF0ZTsNCj4gPiA+ID4gICAgICAgICBWVERDb250 ZXh0Q2FjaGVFbnRyeSBjb250ZXh0X2NhY2hlX2VudHJ5Ow0KPiA+ID4gPiAgICAgICAgIFFMSVNU X0VOVFJZKFZURFBBU0lEQWRkcmVzc1NwYWNlKSBuZXh0Ow0KPiA+ID4gPiAgICAgICAgIFZURFBB U0lEQ2FjaGVFbnRyeSBwYXNpZF9jYWNoZV9lbnRyeTsNCj4gPiA+ID4gICAgIH07DQo+ID4gPiA+ DQo+ID4gPiA+IElkZWFsbHksIGEgVlREUEFTSURBZGRyZXNzU3BhY2UgaW5zdGFuY2UgaXMgY3Jl YXRlZCB3aGVuIGEgUEFTSUQNCj4gPiA+ID4gaXMgYm91bmQgd2l0aCBhIERNQSBBZGRyZXNzU3Bh Y2UuIEludGVsIFZULWQgc3BlYyByZXF1aXJlcyBndWVzdA0KPiA+ID4gPiBzb2Z0d2FyZSB0byBp c3N1ZSBwYXNpZCBjYWNoZSBpbnZhbGlkYXRpb24gd2hlbiBiaW5kIG9yIHVuYmluZCBhDQo+ID4g PiA+IHBhc2lkIHdpdGggYW4gYWRkcmVzcyBzcGFjZSB1bmRlciBjYWNoaW5nLW1vZGUuIEhvd2V2 ZXIsIGFzDQo+ID4gPiA+IFZURFBBU0lEQWRkcmVzc1NwYWNlIGluc3RhbmNlcyBhbHNvIGFjdCBh cyBwYXNpZCBjYWNoZSBpbiB0aGlzDQo+ID4gPiA+IGltcGxlbWVudGF0aW9uLCBpdHMgY3JlYXRp b24gYWxzbyBoYXBwZW5zIGR1cmluZyB2SU9NTVUgUEFTSUQNCj4gPiA+ID4gdGFnZ2VkIERNQSB0 cmFuc2xhdGlvbi4gVGhlIGNyZWF0aW9uIGluIHRoaXMgcGF0aCB3aWxsIG5vdCBiZQ0KPiA+ID4g PiBhZGRlZCBpbiB0aGlzIHBhdGNoIHNpbmNlIG5vIFBBU0lELWNhcGFibGUgZW11bGF0ZWQgZGV2 aWNlcyBmb3INCj4gPiA+ID4gbm93Lg0KPiA+ID4gPg0KPiA+ID4gPiBUaGUgaW1wbGVtZW50YXRp b24gaW4gdGhpcyBwYXRjaCBtYW5hZ2VzIFZURFBBU0lEQWRkcmVzc1NwYWNlDQo+ID4gPiA+IGlu c3RhbmNlcyBwZXIgUEFTSUQrQkRGIChsb29rdXAgYW5kIGluc2VydCB3aWxsIHVzZSBQQVNJRCBh bmQNCj4gPiA+ID4gQkRGKSBzaW5jZSBJbnRlbCBWVC1kIHNwZWMgYWxsb3dzIHBlci1CREYgUEFT SUQgVGFibGUuIFdoZW4gYQ0KPiA+ID4gPiBndWVzdCBiaW5kIGEgUEFTSUQgd2l0aCBhbiBBZGRy ZXNzU3BhY2UsIFFFTVUgd2lsbCBjYXB0dXJlIHRoZQ0KPiA+ID4gPiBndWVzdCBwYXNpZCBzZWxl Y3RpdmUgcGFzaWQgY2FjaGUgaW52YWxpZGF0aW9uLCBhbmQgYWxsb2NhdGUNCj4gPiA+ID4gcmVt b3ZlIGEgVlREUEFTSURBZGRyZXNzU3BhY2UgaW5zdGFuY2UgcGVyIHRoZSBpbnZhbGlkYXRpb24N Cj4gPiA+ID4gcmVhc29uczoNCj4gPiA+ID4NCj4gPiA+ID4gICAgICopIGEgcHJlc2VudCBwYXNp ZCBlbnRyeSBtb3ZlZCB0byBub24tcHJlc2VudA0KPiA+ID4gPiAgICAgKikgYSBwcmVzZW50IHBh c2lkIGVudHJ5IHRvIGJlIGEgcHJlc2VudCBlbnRyeQ0KPiA+ID4gPiAgICAgKikgYSBub24tcHJl c2VudCBwYXNpZCBlbnRyeSBtb3ZlZCB0byBwcmVzZW50DQo+ID4gPiA+DQo+ID4gPiA+IHZJT01N VSBlbXVsYXRvciBjb3VsZCBmaWd1cmUgb3V0IHRoZSByZWFzb24gYnkgZmV0Y2hpbmcgbGF0ZXN0 DQo+ID4gPiA+IGd1ZXN0IHBhc2lkIGVudHJ5Lg0KPiA+ID4gPg0KPiA+ID4gPiBDYzogS2V2aW4g VGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+DQo+ID4gPiA+IENjOiBKYWNvYiBQYW4gPGphY29i Lmp1bi5wYW5AbGludXguaW50ZWwuY29tPg0KPiA+ID4gPiBDYzogUGV0ZXIgWHUgPHBldGVyeEBy ZWRoYXQuY29tPg0KPiA+ID4gPiBDYzogWWkgU3VuIDx5aS55LnN1bkBsaW51eC5pbnRlbC5jb20+ DQo+ID4gPiA+IENjOiBQYW9sbyBCb256aW5pIDxwYm9uemluaUByZWRoYXQuY29tPg0KPiA+ID4g PiBDYzogUmljaGFyZCBIZW5kZXJzb24gPHJ0aEB0d2lkZGxlLm5ldD4NCj4gPiA+ID4gQ2M6IEVk dWFyZG8gSGFia29zdCA8ZWhhYmtvc3RAcmVkaGF0LmNvbT4NCj4gPiA+ID4gU2lnbmVkLW9mZi1i eTogTGl1IFlpIEwgPHlpLmwubGl1QGludGVsLmNvbT4NCj4gPiA+ID4gLS0tDQo+ID4gPiA+ICBo dy9pMzg2L2ludGVsX2lvbW11LmMgICAgICAgICAgfCAzNjcNCj4gPiA+ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gPiA+ICBody9pMzg2L2ludGVsX2lvbW11 X2ludGVybmFsLmggfCAgMTQgKysNCj4gPiA+ID4gIGh3L2kzODYvdHJhY2UtZXZlbnRzICAgICAg ICAgICB8ICAgMSArDQo+ID4gPiA+ICBpbmNsdWRlL2h3L2kzODYvaW50ZWxfaW9tbXUuaCAgfCAg MzYgKysrLQ0KPiA+ID4gPiAgNCBmaWxlcyBjaGFuZ2VkLCA0MTcgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQ0KPiA+ID4gPg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaHcvaTM4Ni9pbnRlbF9p b21tdS5jIGIvaHcvaTM4Ni9pbnRlbF9pb21tdS5jIGluZGV4DQo+ID4gPiA+IDU4ZTcyMTMuLmM3 NWNiN2IgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2h3L2kzODYvaW50ZWxfaW9tbXUuYw0KPiA+ID4g PiArKysgYi9ody9pMzg2L2ludGVsX2lvbW11LmMNCj4gPiA+ID4gQEAgLTQwLDYgKzQwLDcgQEAN Cj4gPiA+ID4gICNpbmNsdWRlICJrdm1faTM4Ni5oIg0KPiA+ID4gPiAgI2luY2x1ZGUgIm1pZ3Jh dGlvbi92bXN0YXRlLmgiDQo+ID4gPiA+ICAjaW5jbHVkZSAidHJhY2UuaCINCj4gPiA+ID4gKyNp bmNsdWRlICJxZW11L2poYXNoLmgiDQo+ID4gPiA+DQo+ID4gPiA+ICAvKiBjb250ZXh0IGVudHJ5 IG9wZXJhdGlvbnMgKi8NCj4gPiA+ID4gICNkZWZpbmUgVlREX0NFX0dFVF9SSUQyUEFTSUQoY2Up IFwgQEAgLTY1LDYgKzY2LDggQEAgIHN0YXRpYyB2b2lkDQo+ID4gPiA+IHZ0ZF9hZGRyZXNzX3Nw YWNlX3JlZnJlc2hfYWxsKEludGVsSU9NTVVTdGF0ZSAqcyk7ICBzdGF0aWMgdm9pZA0KPiA+ID4g PiB2dGRfYWRkcmVzc19zcGFjZV91bm1hcChWVERBZGRyZXNzU3BhY2UgKmFzLCBJT01NVU5vdGlm aWVyDQo+ID4gPiAqbik7DQo+ID4gPiA+DQo+ID4gPiA+ICtzdGF0aWMgdm9pZCB2dGRfcGFzaWRf Y2FjaGVfcmVzZXQoSW50ZWxJT01NVVN0YXRlICpzKTsNClsuLi5dDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKy8qKg0KPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIHBhc2lk X2NhY2hlX2dlbiBvZiBjYWNoZWQgcGFzaWQNCj4gPiA+ID4gKyAqIGVudHJ5IGluIHZ0ZF9wYXNp ZF9hcyBpbnN0YW5jZXMuIENhbGxlciBvZiB0aGlzIGZ1bmN0aW9uDQo+ID4gPiA+ICtzaG91bGQN Cj4gPiA+ID4gKyAqIGhvbGQgaW9tbXVfbG9jay4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3Rh dGljIGdib29sZWFuIHZ0ZF9mbHVzaF9wYXNpZChncG9pbnRlciBrZXksIGdwb2ludGVyIHZhbHVl LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2Vy X2RhdGEpIHsNCj4gPiA+ID4gKyAgICBWVERQQVNJRENhY2hlSW5mbyAqcGNfaW5mbyA9IHVzZXJf ZGF0YTsNCj4gPiA+ID4gKyAgICBWVERQQVNJREFkZHJlc3NTcGFjZSAqdnRkX3Bhc2lkX2FzID0g dmFsdWU7DQo+ID4gPiA+ICsgICAgSW50ZWxJT01NVVN0YXRlICpzID0gdnRkX3Bhc2lkX2FzLT5p b21tdV9zdGF0ZTsNCj4gPiA+ID4gKyAgICBWVERQQVNJRENhY2hlRW50cnkgKnBjX2VudHJ5ID0g JnZ0ZF9wYXNpZF9hcy0+cGFzaWRfY2FjaGVfZW50cnk7DQo+ID4gPiA+ICsgICAgVlREQnVzICp2 dGRfYnVzID0gdnRkX3Bhc2lkX2FzLT52dGRfYnVzOw0KPiA+ID4gPiArICAgIFZURFBBU0lERW50 cnkgcGU7DQo+ID4gPiA+ICsgICAgdWludDE2X3QgZGlkOw0KPiA+ID4gPiArICAgIHVpbnQzMl90 IHBhc2lkOw0KPiA+ID4gPiArICAgIHVpbnQxNl90IGRldmZuOw0KPiA+ID4gPiArICAgIGludCBy ZXQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBkaWQgPSB2dGRfcGVfZ2V0X2RvbWFpbl9pZCgm cGNfZW50cnktPnBhc2lkX2VudHJ5KTsNCj4gPiA+ID4gKyAgICBwYXNpZCA9IHZ0ZF9wYXNpZF9h cy0+cGFzaWQ7DQo+ID4gPiA+ICsgICAgZGV2Zm4gPSB2dGRfcGFzaWRfYXMtPmRldmZuOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgaWYgKCEocGNfZW50cnktPnBhc2lkX2NhY2hlX2dlbiA9PSBz LT5wYXNpZF9jYWNoZV9nZW4pKSB7DQo+ID4gPiA+ICsgICAgICAgIHJldHVybiBmYWxzZTsNCj4g PiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBzd2l0Y2ggKHBjX2luZm8tPmZs YWdzICYgVlREX1BBU0lEX0NBQ0hFX0lORk9fTUFTSykgew0KPiA+ID4gPiArICAgIGNhc2UgVlRE X1BBU0lEX0NBQ0hFX1BBU0lEU0k6DQo+ID4gPiA+ICsgICAgICAgIGlmIChwY19pbmZvLT5wYXNp ZCAhPSBwYXNpZCkgew0KPiA+ID4gPiArICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ID4g PiArICAgICAgICB9DQo+ID4gPiA+ICsgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLw0KPiA+ID4N Cj4gPiA+IFdoeSBmYWxsIHRocm91Z2g/DQo+ID4NCj4gPiBGb3IgVlREX1BBU0lEX0NBQ0hFX1BB U0lEU0ksIGl0IGltcGxpZXMgZG9tYWluIHNlbGVjdGl2ZSwgc28gaXQNCj4gPiByZXF1aXJlcyB0 byBjaGVjayBkaWQganVzdCBhcyBWVERfUEFTSURfQ0FDSEVfRE9NU0kuDQo+IA0KPiBBaCByaWdo dC4gOikNCj4gDQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsgICAgY2FzZSBWVERfUEFTSURfQ0FDSEVf RE9NU0k6DQo+ID4gPiA+ICsgICAgICAgIGlmIChwY19pbmZvLT5kb21haW5faWQgIT0gZGlkKSB7 DQo+ID4gPiA+ICsgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gPiA+ICsgICAgICAgIH0N Cj4gPiA+ID4gKyAgICAgICAgLyogRmFsbCB0aHJvdWdoICovDQo+ID4gPg0KPiA+ID4gU2FtZSBo ZXJlLg0KPiA+DQo+ID4gSWYgY29kZSBjb21lcyB0byBoZXJlLCBpdCBtZWFucyB0aGUgbmVjZXNz YXJ5IGNoZWNrcyBhcmUgcGFzc2VkLg0KPiA+IFNob3VsZCBhZGQgYSBicmVhayBoZXJlLiBIb3dl dmVyLCBhcyB0aGUgYmVsb3cgY2FzZSBkb2VzIG5vdGhpbmcgYW5kDQo+ID4ganVzdCBjYWxscyBi cmVhay4gU28gSSBsZXQgdGhlIGNvZGUgZmFsbCB0aHJvdWdoLg0KPiANCj4gWWVzIHRoaXMgaXMg ZmluZSB0b28uDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gPiArICAgIGNhc2UgVlREX1BBU0lEX0NB Q0hFX0dMT0JBTDoNCj4gPiA+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gPiA+ICsgICAgZGVmYXVs dDoNCj4gPiA+DQo+ID4gPiBOZXZlZSByZWFjaCBoZXJlIHJpZ2h0PyAgSWYgc28gd2UgY2FuIGFi b3J0Lg0KPiA+DQo+ID4geWVzLCBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZS4NCj4gPg0KPiA+ID4g PiArICAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgLyoNCj4gPiA+ID4gKyAgICAgKiBwYXNpZCBjYWNoZSBpbnZhbGlkYXRpb24gbWF5 IGluZGljYXRlIGEgcHJlc2VudCBwYXNpZA0KPiA+ID4gPiArICAgICAqIGVudHJ5IHRvIHByZXNl bnQgcGFzaWQgZW50cnkgbW9kaWZpY2F0aW9uLiBUbyBjb3ZlciBzdWNoDQo+ID4gPiA+ICsgICAg ICogY2FzZSwgdklPTU1VIGVtdWxhdG9yIG5lZWRzIHRvIGZldGNoIGxhdGVzdCBndWVzdCBwYXNp ZA0KPiA+ID4gPiArICAgICAqIGVudHJ5IGFuZCBjaGVjayBjYWNoZWQgcGFzaWQgZW50cnksIHRo ZW4gdXBkYXRlIHBhc2lkDQo+ID4gPiA+ICsgICAgICogY2FjaGUgYW5kIHNlbmQgcGFzaWQgYmlu ZC91bmJpbmQgdG8gaG9zdCBwcm9wZXJseS4NCj4gPiA+ID4gKyAgICAgKi8NCj4gPiA+ID4gKyAg ICByZXQgPSB2dGRfZGV2X2dldF9wZV9mcm9tX3Bhc2lkKHMsDQo+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICBwY2lfYnVzX251bSh2dGRfYnVzLT5idXMpLCBkZXZmbiwgcGFzaWQsICZwZSk7DQo+ ID4gPiA+ICsgICAgaWYgKHJldCkgew0KPiA+ID4gPiArICAgICAgICAvKg0KPiA+ID4gPiArICAg ICAgICAgKiBObyB2YWxpZCBwYXNpZCBlbnRyeSBpbiBndWVzdCBtZW1vcnkuIGUuZy4gcGFzaWQg ZW50cnkNCj4gPiA+ID4gKyAgICAgICAgICogd2FzIG1vZGlmaWVkIHRvIGJlIGVpdGhlciBhbGwt emVybyBvciBub24tcHJlc2VudC4gRWl0aGVyDQo+ID4gPiA+ICsgICAgICAgICAqIGNhc2UgbWVh bnMgZXhpc3RpbmcgcGFzaWQgY2FjaGUgc2hvdWxkIGJlIHJlbW92ZWQuDQo+ID4gPiA+ICsgICAg ICAgICAqLw0KPiA+ID4gPiArICAgICAgICBnb3RvIHJlbW92ZTsNCj4gPiA+ID4gKyAgICB9DQo+ ID4gPiA+ICsgICAgLyogQ29tcGFyZSBjYWNoZWQgcGFzaWQgZW50cnkgYW5kIGxhdGVzdCBwYXNp ZCBlbnRyeSAqLw0KPiA+ID4gPiArICAgIGlmICghdnRkX3Bhc2lkX2VudHJ5X2NvbXBhcmUoJnBl LCAmcGNfZW50cnktPnBhc2lkX2VudHJ5KSkgew0KPiA+ID4gPiArICAgICAgICAvKiBwYXNpZCBl bnRyeSB3YXMgdXBkYXRlZCwgdGh1cyB1cGRhdGUgdGhlIHBhc2lkIGNhY2hlICovDQo+ID4gPiA+ ICsgICAgICAgIHBjX2VudHJ5LT5wYXNpZF9lbnRyeSA9IHBlOw0KPiA+ID4gPiArICAgICAgICBw Y19lbnRyeS0+cGFzaWRfY2FjaGVfZ2VuID0gcy0+cGFzaWRfY2FjaGVfZ2VuOw0KPiA+ID4gPiAr ICAgICAgICAvKg0KPiA+ID4gPiArICAgICAgICAgKiBUT0RPOg0KPiA+ID4gPiArICAgICAgICAg KiAtIHNlbmQgcGFzaWQgYmluZCB0byBob3N0IGZvciBwYXNzdGhydSBkZXZpY2VzDQo+ID4gPiA+ ICsgICAgICAgICAqIC0gd2hlbiBwYXNpZC1iYXNlLWlvdGxiKHBpb3RsYikgaW5mcmFzdHJ1Y3R1 cmUgaXMgcmVhZHksDQo+ID4gPiA+ICsgICAgICAgICAqICAgc2hvdWxkIGludmFsaWRhdGUgUUVN VSBwaW90bGIgdG9nZWh0ZXIgd2l0aCB0aGlzIGNoYW5nZS4NCj4gPiA+ID4gKyAgICAgICAgICov DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICAgIHJldHVybiBmYWxzZTsNCj4gPiA+ID4gK3Jl bW92ZToNCj4gPiA+ID4gKyAgICAvKg0KPiA+ID4gPiArICAgICAqIFRPRE86DQo+ID4gPiA+ICsg ICAgICogLSBzZW5kIHBhc2lkIHVuYmluZCB0byBob3N0IGZvciBwYXNzdGhydSBkZXZpY2VzDQo+ ID4gPiA+ICsgICAgICogLSB3aGVuIHBhc2lkLWJhc2UtaW90bGIocGlvdGxiKSBpbmZyYXN0cnVj dHVyZSBpcyByZWFkeSwNCj4gPiA+ID4gKyAgICAgKiAgIHNob3VsZCBpbnZhbGlkYXRlIFFFTVUg cGlvdGxiIHRvZ2VodGVyIHdpdGggdGhpcyBjaGFuZ2UuDQo+ID4gPiA+ICsgICAgICovDQo+ID4g PiA+ICsgICAgcmV0dXJuIHRydWU7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gIHN0 YXRpYyBpbnQgdnRkX3Bhc2lkX2NhY2hlX2RzaShJbnRlbElPTU1VU3RhdGUgKnMsIHVpbnQxNl90 DQo+ID4gPiA+IGRvbWFpbl9pZCkgIHsNCj4gPiA+ID4gKyAgICBWVERQQVNJRENhY2hlSW5mbyBw Y19pbmZvOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgdHJhY2VfdnRkX3Bhc2lkX2NhY2hlX2Rz aShkb21haW5faWQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgcGNfaW5mby5mbGFncyA9IFZU RF9QQVNJRF9DQUNIRV9ET01TSTsNCj4gPiA+ID4gKyAgICBwY19pbmZvLmRvbWFpbl9pZCA9IGRv bWFpbl9pZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ICsgICAgICogTG9v cCBhbGwgZXhpc3RpbmcgcGFzaWQgY2FjaGVzIGFuZCB1cGRhdGUgdGhlbS4NCj4gPiA+ID4gKyAg ICAgKi8NCj4gPiA+ID4gKyAgICB2dGRfaW9tbXVfbG9jayhzKTsNCj4gPiA+ID4gKyAgICBnX2hh c2hfdGFibGVfZm9yZWFjaF9yZW1vdmUocy0+dnRkX3Bhc2lkX2FzLA0KPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRkX2ZsdXNoX3Bhc2lkLCAmcGNfaW5mbyk7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAvKg0KPiA+ID4gPiArICAgICAqIFRPRE86IERvbWFpbiBz ZWxlY3RpdmUgUEFTSUQgY2FjaGUgaW52YWxpZGF0aW9uDQo+ID4gPiA+ICsgICAgICogZmx1c2hl cyBhbGwgdGhlIHBhc2lkIGNhY2hlcyB3aXRoaW4gYSBkb21haW4uIFRvDQo+ID4gPiA+ICsgICAg ICogYmUgc2FmZSwgYWZ0ZXIgaW52YWxpZGF0aW5nIHRoZSBwYXNpZCBjYWNoZXMsIGVtdWxhdG9y DQo+ID4gPiA+ICsgICAgICogbmVlZHMgdG8gcmVwbGF5IHRoZSBwYXNpZCBiaW5kaW5ncyBieSB3 YWxraW5nIGd1ZXN0DQo+ID4gPiA+ICsgICAgICogcGFzaWQgZGlyIGFuZCBwYXNpZCB0YWJsZS4N Cj4gPiA+DQo+ID4gPiBCZXR0ZXIgc3BlbGwgb3V0IG9uIHdoYXQgc3BlY2lhbCBjYXNlIHdlJ3Jl IGhhbmRsaW5nIGhlcmU6IFdoZW4gdGhlDQo+ID4gPiBndWVzdCBzZXR1cCBhIG5ldyBQQVNJRCBl bnRyeSB0aGVuIHNlbmQgYSBQQVNJRCBEU0kuDQo+ID4NCj4gPiBvaCwgeWVzLiAgd2lsbCBhZGQg aXQgaW4gbmV3IHZlcnNpb24uIDotKQ0KPiA+DQo+ID4gPg0KPiA+ID4gPiArICAgICAqLw0KPiA+ ID4gPiArICAgIHZ0ZF9pb21tdV91bmxvY2socyk7DQo+ID4gPiA+ICAgICAgcmV0dXJuIDA7DQo+ ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIFRoaXMgZnVuY3Rp b24gZmluZHMgb3IgYWRkcyBhIFZURFBBU0lEQWRkcmVzc1NwYWNlIGZvciBhDQo+ID4gPiA+ICtk ZXZpY2UNCj4gPiA+ID4gKyAqIHdoZW4gaXQgaXMgYm91bmQgdG8gYSBwYXNpZC4gQ2FsbGVyIG9m IHRoaXMgZnVuY3Rpb24gc2hvdWxkDQo+ID4gPiA+ICtob2xkDQo+ID4gPiA+ICsgKiBpb21tdV9s b2NrLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgVlREUEFTSURBZGRyZXNzU3BhY2Ug KnZ0ZF9hZGRfZmluZF9wYXNpZF9hcyhJbnRlbElPTU1VU3RhdGUNCj4gKnMsDQo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVERCdXMg KnZ0ZF9idXMsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZGV2Zm4sDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwYXNpZCwNCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxs b2NhdGUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgc3RydWN0IHBhc2lkX2tleSBrZXk7DQo+ ID4gPiA+ICsgICAgc3RydWN0IHBhc2lkX2tleSAqbmV3X2tleTsNCj4gPiA+ID4gKyAgICBWVERQ QVNJREFkZHJlc3NTcGFjZSAqdnRkX3Bhc2lkX2FzOw0KPiA+ID4gPiArICAgIHVpbnQxNl90IHNp ZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHNpZCA9IHZ0ZF9tYWtlX3NvdXJjZV9pZChwY2lf YnVzX251bSh2dGRfYnVzLT5idXMpLCBkZXZmbik7DQo+ID4gPiA+ICsgICAgdnRkX2luaXRfcGFz aWRfa2V5KHBhc2lkLCBzaWQsICZrZXkpOw0KPiA+ID4gPiArICAgIHZ0ZF9wYXNpZF9hcyA9IGdf aGFzaF90YWJsZV9sb29rdXAocy0+dnRkX3Bhc2lkX2FzLCAma2V5KTsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArICAgIGlmICghdnRkX3Bhc2lkX2FzICYmIGFsbG9jYXRlKSB7DQo+ID4gPiA+ICsgICAg ICAgIG5ld19rZXkgPSBnX21hbGxvYzAoc2l6ZW9mKCpuZXdfa2V5KSk7DQo+ID4gPiA+ICsgICAg ICAgIHZ0ZF9pbml0X3Bhc2lkX2tleShwYXNpZCwgc2lkLCBuZXdfa2V5KTsNCj4gPiA+ID4gKyAg ICAgICAgLyoNCj4gPiA+ID4gKyAgICAgICAgICogSW5pdGlhdGUgdGhlIHZ0ZF9wYXNpZF9hcyBz dHJ1Y3R1cmUuDQo+ID4gPiA+ICsgICAgICAgICAqDQo+ID4gPiA+ICsgICAgICAgICAqIFRoaXMg c3RydWN0dXJlIGhlcmUgaXMgdXNlZCB0byB0cmFjayB0aGUgZ3Vlc3QgcGFzaWQNCj4gPiA+ID4g KyAgICAgICAgICogYmluZGluZyBhbmQgYWxzbyBzZXJ2ZXMgYXMgcGFzaWQtY2FjaGUgbWFuZ2Vt ZW50IGVudHJ5Lg0KPiA+ID4gPiArICAgICAgICAgKg0KPiA+ID4gPiArICAgICAgICAgKiBUT0RP OiBpbiBmdXR1cmUsIGlmIHdhbnRzIHRvIHN1cHBvcnQgdGhlIFNWQS1hd2FyZSBETUENCj4gPiA+ ID4gKyAgICAgICAgICogICAgICAgZW11bGF0aW9uLCB0aGUgdnRkX3Bhc2lkX2FzIHNob3VsZCBo YXZlIGluY2x1ZGUNCj4gPiA+ID4gKyAgICAgICAgICogICAgICAgQWRkcmVzc1NwYWNlIHRvIHN1 cHBvcnQgRE1BIGVtdWxhdGlvbi4NCj4gPiA+ID4gKyAgICAgICAgICovDQo+ID4gPiA+ICsgICAg ICAgIHZ0ZF9wYXNpZF9hcyA9IGdfbWFsbG9jMChzaXplb2YoVlREUEFTSURBZGRyZXNzU3BhY2Up KTsNCj4gPiA+ID4gKyAgICAgICAgdnRkX3Bhc2lkX2FzLT5pb21tdV9zdGF0ZSA9IHM7DQo+ID4g PiA+ICsgICAgICAgIHZ0ZF9wYXNpZF9hcy0+dnRkX2J1cyA9IHZ0ZF9idXM7DQo+ID4gPiA+ICsg ICAgICAgIHZ0ZF9wYXNpZF9hcy0+ZGV2Zm4gPSBkZXZmbjsNCj4gPiA+ID4gKyAgICAgICAgdnRk X3Bhc2lkX2FzLT5jb250ZXh0X2NhY2hlX2VudHJ5LmNvbnRleHRfY2FjaGVfZ2VuID0gMDsNCj4g PiA+ID4gKyAgICAgICAgdnRkX3Bhc2lkX2FzLT5wYXNpZCA9IHBhc2lkOw0KPiA+ID4gPiArICAg ICAgICB2dGRfcGFzaWRfYXMtPnBhc2lkX2NhY2hlX2VudHJ5LnBhc2lkX2NhY2hlX2dlbiA9IDA7 DQo+ID4gPiA+ICsgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQocy0+dnRkX3Bhc2lkX2FzLCBu ZXdfa2V5LCB2dGRfcGFzaWRfYXMpOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgICByZXR1 cm4gdnRkX3Bhc2lkX2FzOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgLyoqDQo+ ID4gPiA+ICsgICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBwYXNpZCBlbnRyeSBjYWNoZWQg aW4gJnZ0ZF9wYXNpZF9hcy4NCj4gPiA+ID4gKyAgKiBDYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBz aG91bGQgaG9sZCBpb21tdV9sb2NrLg0KPiA+ID4gPiArICAqLw0KPiA+ID4gPiArc3RhdGljIGlu bGluZSB2b2lkIHZ0ZF9maWxsX2luX3BlX2NhY2hlKA0KPiA+ID4gPiArICAgICAgICAgICAgICBW VERQQVNJREFkZHJlc3NTcGFjZSAqdnRkX3Bhc2lkX2FzLCBWVERQQVNJREVudHJ5DQo+ID4gPiA+ ICsqcGUpIHsNCj4gPiA+ID4gKyAgICBJbnRlbElPTU1VU3RhdGUgKnMgPSB2dGRfcGFzaWRfYXMt PmlvbW11X3N0YXRlOw0KPiA+ID4gPiArICAgIFZURFBBU0lEQ2FjaGVFbnRyeSAqcGNfZW50cnkg PQ0KPiA+ID4gPiArJnZ0ZF9wYXNpZF9hcy0+cGFzaWRfY2FjaGVfZW50cnk7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgICBwY19lbnRyeS0+cGFzaWRfZW50cnkgPSAqcGU7DQo+ID4gPiA+ICsgICAg cGNfZW50cnktPnBhc2lkX2NhY2hlX2dlbiA9IHMtPnBhc2lkX2NhY2hlX2dlbjsgfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICBzdGF0aWMgaW50IHZ0ZF9wYXNpZF9jYWNoZV9wc2koSW50ZWxJT01NVVN0 YXRlICpzLA0KPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90 IGRvbWFpbl9pZCwgdWludDMyX3QNCj4gPiA+ID4gcGFzaWQpICB7DQo+ID4gPiA+ICsgICAgVlRE UEFTSURDYWNoZUluZm8gcGNfaW5mbzsNCj4gPiA+ID4gKyAgICBWVERQQVNJREVudHJ5IHBlOw0K PiA+ID4gPiArICAgIFZUREJ1cyAqdnRkX2J1czsNCj4gPiA+ID4gKyAgICBpbnQgYnVzX24sIGRl dmZuOw0KPiA+ID4gPiArICAgIFZURFBBU0lEQWRkcmVzc1NwYWNlICp2dGRfcGFzaWRfYXM7DQo+ ID4gPiA+ICsgICAgVlRESU9NTVVDb250ZXh0ICp2dGRfaWN4Ow0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgLyogUEFTSUQgc2VsZWN0aXZlIGltcGxpZXMgYSBESUQgc2VsZWN0aXZlICovDQo+ID4g PiA+ICsgICAgcGNfaW5mby5mbGFncyA9IFZURF9QQVNJRF9DQUNIRV9QQVNJRFNJOw0KPiA+ID4g PiArICAgIHBjX2luZm8uZG9tYWluX2lkID0gZG9tYWluX2lkOw0KPiA+ID4gPiArICAgIHBjX2lu Zm8ucGFzaWQgPSBwYXNpZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ICsg ICAgICogUmVnYXJkcyB0byBhIHBhc2lkIHNlbGVjdGl2ZSBwYXNpZCBjYWNoZSBpbnZhbGlkYXRp b24gKFBTSSksDQo+ID4gPiA+ICsgICAgICogaXQgY291bGQgYmUgZWl0aGVyIGNhc2VzIG9mIGJl bG93Og0KPiA+ID4gPiArICAgICAqIGEpIGEgcHJlc2VudCBwYXNpZCBlbnRyeSBtb3ZlZCB0byBu b24tcHJlc2VudA0KPiA+ID4gPiArICAgICAqIGIpIGEgcHJlc2VudCBwYXNpZCBlbnRyeSB0byBi ZSBhIHByZXNlbnQgZW50cnkNCj4gPiA+ID4gKyAgICAgKiBjKSBhIG5vbi1wcmVzZW50IHBhc2lk IGVudHJ5IG1vdmVkIHRvIHByZXNlbnQNCj4gPiA+ID4gKyAgICAgKg0KPiA+ID4gPiArICAgICAq IEhlcmUgdGhlIGhhbmRsaW5nIG9mIGEgUFNJIGlzOg0KPiA+ID4gPiArICAgICAqIDEpIGxvb3Ag YWxsIHRoZSBleGlzaXRuZyB2dGRfcGFzaWRfYXMgaW5zdGFuY2VzIHRvIHVwZGF0ZSB0aGVtDQo+ ID4gPiA+ICsgICAgICogICAgYWNjb3JkaW5nIHRvIHRoZSBsYXRlc3QgZ3Vlc3QgcGFzaWQgZW50 cnkgaW4gcGFzaWQgdGFibGUuDQo+ID4gPiA+ICsgICAgICogICAgdGhpcyB3aWxsIG1ha2Ugc3Vy ZSBhZmZlY3RlZCBleGlzdGluZyB2dGRfcGFzaWRfYXMgaW5zdGFuY2VzDQo+ID4gPiA+ICsgICAg ICogICAgY2FjaGVkIHRoZSBsYXRlc3QgcGFzaWQgZW50cmllcy4gQWxzbywgZHVyaW5nIHRoZSBs b29wLCB0aGUNCj4gPiA+ID4gKyAgICAgKiAgICBob3N0IHNob3VsZCBiZSBub3RpZmllZCBpZiBu ZWVkZWQuIGUuZy4gcGFzaWQgdW5iaW5kIG9yIHBhc2lkDQo+ID4gPiA+ICsgICAgICogICAgdXBk YXRlLiBTaG91bGQgYmUgYWJsZSB0byBjb3ZlciBjYXNlIGEpIGFuZCBjYXNlIGIpLg0KPiA+ID4g PiArICAgICAqDQo+ID4gPiA+ICsgICAgICogMikgbG9vcCBhbGwgZGV2aWNlcyB0byBjb3ZlciBj YXNlIGMpDQo+ID4gPiA+ICsgICAgICogICAgSG93ZXZlciwgaXQgaXMgbm90IGdvb2QgdG8gYWx3 YXlzIGxvb3AgYWxsIGRldmljZXMuIEluIHRoaXMNCj4gPiA+ID4gKyAgICAgKiAgICBpbXBsZW1l bnRhdGlvbi4gV2UgZG8gaXQgaW4gdGhpcyB3YXlzOg0KPiA+ID4gPiArICAgICAqICAgIC0gRm9y IGRldmljZXMgd2hpY2ggaGF2ZSBWVERJT01NVUNvbnRleHQgaW5zdGFuY2VzLA0KPiA+ID4gPiAr ICAgICAqICAgICAgd2UgbG9vcCB0aGVtIGFuZCBjaGVjayBpZiBndWVzdCBwYXNpZCBlbnRyeSBl eGlzdHMuIElmIHllcywNCj4gPiA+ID4gKyAgICAgKiAgICAgIGl0IGlzIGNhc2UgYyksIHdlIHVw ZGF0ZSB0aGUgcGFzaWQgY2FjaGUgYW5kIGFsc28gbm90aWZ5DQo+ID4gPiA+ICsgICAgICogICAg ICBob3N0Lg0KPiA+ID4gPiArICAgICAqICAgIC0gRm9yIGRldmljZXMgd2hpY2ggaGF2ZSBubyBW VERJT01NVUNvbnRleHQNCj4gPiA+ID4gKyAgICAgKiAgICAgIGluc3RhbmNlcywgaXQgaXMgbm90 IG5lY2Vzc2FyeSB0byBjcmVhdGUgcGFzaWQgY2FjaGUgYXQNCj4gPiA+ID4gKyAgICAgKiAgICAg IHRoaXMgcGhhc2Ugc2luY2UgaXQgY291bGQgYmUgY3JlYXRlZCB3aGVuIHZJT01NVSBkbyBETUEN Cj4gPiA+ID4gKyAgICAgKiAgICAgIGFkZHJlc3MgdHJhbnNsYXRpb24uIFRoaXMgaXMgbm90IGlt cGxlbWVudGVkIHlldCBzaW5jZQ0KPiA+ID4gPiArICAgICAqICAgICAgbm8gUEFTSUQtY2FwYWJs ZSBlbXVsYXRlZCBkZXZpY2VzIHRvZGF5LiBJZiB3ZSBoYXZlIGl0DQo+ID4gPiA+ICsgICAgICog ICAgICBpbiBmdXR1cmUsIHRoZSBwYXNpZCBjYWNoZSBzaGFsbCBiZSBjcmVhdGVkIHRoZXJlLg0K PiA+ID4gPiArICAgICAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgdnRkX2lvbW11X2xvY2so cyk7DQo+ID4gPiA+ICsgICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVtb3ZlKHMtPnZ0ZF9wYXNp ZF9hcywNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRkX2ZsdXNo X3Bhc2lkLCAmcGNfaW5mbyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBRTElTVF9GT1JFQUNI KHZ0ZF9pY3gsICZzLT52dGRfZGV2X2ljeF9saXN0LCBuZXh0KSB7DQo+ID4gPiA+ICsgICAgICAg IHZ0ZF9idXMgPSB2dGRfaWN4LT52dGRfYnVzOw0KPiA+ID4gPiArICAgICAgICBkZXZmbiA9IHZ0 ZF9pY3gtPmRldmZuOw0KPiA+ID4gPiArICAgICAgICBidXNfbiA9IHBjaV9idXNfbnVtKHZ0ZF9i dXMtPmJ1cyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICAgLyogU3RlcCAxOiBmZXRjaCB2 dGRfcGFzaWRfYXMgYW5kIGNoZWNrIGlmIGl0IGlzIHZhbGlkICovDQo+ID4gPiA+ICsgICAgICAg IHZ0ZF9wYXNpZF9hcyA9IHZ0ZF9hZGRfZmluZF9wYXNpZF9hcyhzLCB2dGRfYnVzLA0KPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmZuLCBwYXNpZCwg dHJ1ZSk7DQo+ID4gPg0KPiA+ID4gSSBmZWVsIGxpa2UgeW91IHdhbnRlZCB0byBwYXNzICJmYWxz ZSIgaGVyZSBmb3IgImFsbG9jYXRlIi4NCj4gPg0KPiA+IGVtbW0sIHllYWguIEl0IHdhcyAiZmFs c2UiIGluIGRyYWZ0IGNvZGUgYXMgc3RlcCAxIGlzIG9ubHkgdG8gY2hlY2sgaWYNCj4gPiBhIHZh bGlkIHZ0ZF9wYXNpZF9hcyBleGlzdHMuIEFuZCBpbiBzdGVwIDMsIGl0IG5lZWRzIHRvIGNhbGwN Cj4gPiB2dGRfYWRkX2ZpbmRfcGFzaWRfYXMoKSB3aXRoICJhbGxvY2F0ZSIgYmUgInRydWUiLiBJ bg0KPiA+IHZ0ZF9hZGRfZmluZF9wYXNpZF9hcygpLCBpdCB3aWxsIHRyeSBzZWFyY2ggdnRkX3Bh c2lkX2FzIGZpcnN0IGFuZA0KPiA+IHRoZW4gYWxsb2NhdGUgYSBuZXcgb25lLiBJbiBzdWNoIGxv Z2ljLCB0aGVyZSB3aWxsIGJlIHR3bw0KPiA+IHZ0ZF9hZGRfZmluZF9wYXNpZF9hcygpIGNhbGxp ZyBhbmQgbWVhbnMgdHdvIGhhc2ggdGFibGUgc2VhcmNoaW5nLg0KPiA+DQo+ID4gU28gSSBtb2Zp ZmllZCBpdCB0byBiZSAidHJ1ZSIgdG8gc2F2ZSBhIHZ0ZF9hZGRfZmluZF9wYXNpZF9hcygpDQo+ ID4gY2FsbGluZy4gSWYgYSB2dGRfcGFzaWRfYXMgaXMgdmFsaWQsIGl0cyBwYXNpZF9jYWNoZV9n ZW4gd2lsbCBiZSBlcXVhbCB0byBzLQ0KPiA+cGFzaWRfY2FjaGVfZ2VuLg0KPiA+IElmIG5vdCwg dGhlIHZ0ZF9wYXNpZF9hcyBpcyBhIG5ld2x5IGFsbG9jYXRlZCBhbmQgbmVlZHMgdG8gZ28gdGhy b3VnaA0KPiA+IHN0ZXAgMiBhbmQgc3RlcCAzIHRvIGZ1bGZpbGwgaXQuIExvb2tzIGxpa2UgSSBt aXNzZWQgdG8gZnJlZSB0aGUNCj4gPiB2dGRfcGFzaWRfYXMgd2hlbiBzdGVwDQo+ID4gMiBmYWls ZWQuIFdpbGwgYWRkIGl0IGlmIHlvdSBhcmUgZmluZSB3aXRoIHRoZSBjdXJyZW50IGxvZ2ljLg0K PiANCj4gSSBzZWUuICBOb3RlIHRoYXQgdnRkX2FkZF9maW5kX3Bhc2lkX2FzKCkgaXMgZmFzdCBm b3Igbm8gYWxsb2NhdGlvbiwgYmVjYXVzZSBoYXNoDQo+IGxvb2t1cCBpcyBPKDEpLiAgSG93ZXZl ciBJIHRoaW5rIGN1cnJlbnQgYXBwcm9hY2ggaXMgb2ssIGJ1dCBpZiB3aXRoIHRoYXQsIHdlIGNh bg0KPiBhbHNvOg0KPiANCj4gLSBSZW1vdmUgdGhlIGFsbG9jYXRlIHBhcmFtZXRlciBmb3IgdnRk X2FkZF9maW5kX3Bhc2lkX2FzKCksIHNpbmNlIGl0J3MNCj4gICBhbHdheXMgdHJ1ZSBldmVuIGlu IGZ1dHVyZSBwYXRjaGVzIHNvIHVzZWxlc3MsDQoNCnJpZ2h0LiA6LSkNCg0KPiAtIFJlbW92ZSB0 aGUgdnRkX3Bhc2lkX2FzIGNoZWNrIHJpZ2h0IGJlbG93IGJlY2F1c2UgaXQncyBub3QgbmVlZGVk Lg0KPiANCj4gPg0KPiA+DQo+ID4gPiA+ICsgICAgICAgIGlmICh2dGRfcGFzaWRfYXMgJiYNCj4g ICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXg0KDQp5ZXMsIGl0IGlzLiBJbiBjdXJyZW50 IHNlcmllcyB2dGRfYWRkX2ZpbmRfcGFzaWRfYXMoKSBkb2VzbuKAmXQgY2hlY2sgdGhlDQpyZXN1 bHQgb2YgdnRkX3Bhc2lkX2FzIG1lbSBhbGxvY2F0aW9uLCBzbyBubyBuZWVkIHRvIGNoZWNrIHZ0 ZF9wYXNpZF9hcw0KaGVyZSBlaXRoZXIuIEhvd2V2ZXIsIGl0IG1pZ2h0IGJlIGJldHRlciB0byBj aGVjayB0aGUgYWxsb2NhdGlvbiByZXN1bHQNCm9yIGl0IHdpbGwgcmVzdWx0IGluIGlzc3VlIGlm IGFsbG9jYXRpb24gZmFpbGVkLiBXaGF0J3MgeW91ciBwcmVmZXJlbmNlDQpoZXJlPw0KDQo+ID4g PiA+ICsgICAgICAgICAgICAocy0+cGFzaWRfY2FjaGVfZ2VuID09DQo+ID4gPiA+ICsgICAgICAg ICAgICAgdnRkX3Bhc2lkX2FzLT5wYXNpZF9jYWNoZV9lbnRyeS5wYXNpZF9jYWNoZV9nZW4pKSB7 DQo+ID4gPiA+ICsgICAgICAgICAgICAvKg0KPiA+ID4gPiArICAgICAgICAgICAgICogcGFzaWRf Y2FjaGVfZ2VuIGVxdWFscyB0byBzLT5wYXNpZF9jYWNoZV9nZW4gbWVhbnMNCj4gPiA+ID4gKyAg ICAgICAgICAgICAqIHZ0ZF9wYXNpZF9hcyBpcyB2YWxpZCBhZnRlciB0aGUgYWJvdmUgcy0+dnRk X3Bhc2lkX2FzDQo+ID4gPiA+ICsgICAgICAgICAgICAgKiB1cGRhdGVzLiBUaHVzIG5vIG5lZWQg Zm9yIHRoZSBiZWxvdyBzdGVwcy4NCj4gPiA+ID4gKyAgICAgICAgICAgICAqLw0KPiA+ID4gPiAr ICAgICAgICAgICAgY29udGludWU7DQo+ID4gPiA+ICsgICAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICAgICAgICAvKg0KPiA+ID4gPiArICAgICAgICAgKiBTdGVwIDI6IHZ0ZF9wYXNpZF9h cyBpcyBub3QgdmFsaWQsIGl0J3MgcG90ZW50YWlsbHkgYQ0KPiA+ID4gPiArICAgICAgICAgKiBu ZXcgcGFzaWQgYmluZC4gRmV0Y2ggZ3Vlc3QgcGFzaWQgZW50cnkuDQo+ID4gPiA+ICsgICAgICAg ICAqLw0KPiA+ID4gPiArICAgICAgICBpZiAodnRkX2Rldl9nZXRfcGVfZnJvbV9wYXNpZChzLCBi dXNfbiwgZGV2Zm4sIHBhc2lkLCAmcGUpKSB7DQo+ID4gPiA+ICsgICAgICAgICAgICBjb250aW51 ZTsNCj4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgIC8qDQo+ ID4gPiA+ICsgICAgICAgICAqIFN0ZXAgMzogcGFzaWQgZW50cnkgZXhpc3RzLCB1cGRhdGUgcGFz aWQgY2FjaGUNCj4gPiA+ID4gKyAgICAgICAgICoNCj4gPiA+ID4gKyAgICAgICAgICogSGVyZSBu ZWVkIHRvIGNoZWNrIGRvbWFpbiBJRCBzaW5jZSBndWVzdCBwYXNpZCBlbnRyeQ0KPiA+ID4gPiAr ICAgICAgICAgKiBleGlzdHMuIFdoYXQgbmVlZHMgdG8gZG8gYXJlOg0KPiA+ID4gPiArICAgICAg ICAgKiAgIC0gdXBkYXRlIHRoZSBwY19lbnRyeSBpbiB0aGUgdnRkX3Bhc2lkX2FzDQo+ID4gPiA+ ICsgICAgICAgICAqICAgLSBzZXQgcHJvcGVyIHBjX2VudHJ5LnBhc2lkX2NhY2hlX2dlbg0KPiA+ ID4gPiArICAgICAgICAgKiAgIC0gcGFzcyBkb3duIHRoZSBsYXRlc3QgZ3Vlc3QgcGFzaWQgZW50 cnkgY29uZmlnIHRvIGhvc3QNCj4gPiA+ID4gKyAgICAgICAgICogICAgICh3aWxsIGJlIGFkZGVk IGluIGxhdGVyIHBhdGNoKQ0KPiA+ID4gPiArICAgICAgICAgKi8NCj4gPiA+ID4gKyAgICAgICAg aWYgKGRvbWFpbl9pZCA9PSB2dGRfcGVfZ2V0X2RvbWFpbl9pZCgmcGUpKSB7DQo+ID4gPiA+ICsg ICAgICAgICAgICB2dGRfZmlsbF9pbl9wZV9jYWNoZSh2dGRfcGFzaWRfYXMsICZwZSk7DQo+ID4g PiA+ICsgICAgICAgIH0NCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsgICAgdnRkX2lvbW11X3Vu bG9jayhzKTsNCj4gPiA+ID4gICAgICByZXR1cm4gMDsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4g PiA+ID4gKy8qKg0KPiA+ID4gPiArICogQ2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhv bGQgaW9tbXVfbG9jayAgKi8gc3RhdGljIHZvaWQNCj4gPiA+ID4gK3Z0ZF9wYXNpZF9jYWNoZV9y ZXNldChJbnRlbElPTU1VU3RhdGUgKnMpIHsNCj4gPiA+ID4gKyAgICBWVERQQVNJRENhY2hlSW5m byBwY19pbmZvOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgdHJhY2VfdnRkX3Bhc2lkX2NhY2hl X3Jlc2V0KCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBwY19pbmZvLmZsYWdzID0gVlREX1BB U0lEX0NBQ0hFX0dMT0JBTDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ICsg ICAgICogUmVzZXQgcGFzaWQgY2FjaGUgaXMgYSBiaWcgaGFtbWVyLCBzbyB1c2UNCj4gPiA+ID4g KyAgICAgKiBnX2hhc2hfdGFibGVfZm9yZWFjaF9yZW1vdmUgd2hpY2ggd2lsbCBmcmVlDQo+ID4g PiA+ICsgICAgICogdGhlIHZ0ZF9wYXNpZF9hcyBpbnN0YW5jZXMuDQo+ID4gPiA+ICsgICAgICov DQo+ID4gPiA+ICsgICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVtb3ZlKHMtPnZ0ZF9wYXNpZF9h cywNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0ZF9mbHVzaF9wYXNpZCwg JnBjX2luZm8pOw0KPiA+ID4gPiArICAgIHMtPnBhc2lkX2NhY2hlX2dlbiA9IDE7DQo+ID4gPiA+ ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gIHN0YXRpYyBpbnQgdnRkX3Bhc2lkX2NhY2hlX2dzaShJ bnRlbElPTU1VU3RhdGUgKnMpICB7DQo+ID4gPiA+ICsgICAgdHJhY2VfdnRkX3Bhc2lkX2NhY2hl X2dzaSgpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgdnRkX2lvbW11X2xvY2socyk7DQo+ID4g PiA+ICsgICAgdnRkX3Bhc2lkX2NhY2hlX3Jlc2V0KHMpOw0KPiA+ID4NCj4gPiA+IFsxXQ0KPiA+ ID4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ICsgICAgICogVE9ETzogR2xv YmFsIFBBU0lEIGNhY2hlIGludmFsaWRhdGlvbiBtYXkgYmUNCj4gPiA+ID4gKyAgICAgKiBmbHVz aGVzIGFsbCB0aGUgcGFzaWQgY2FjaGVzLiBUbyBiZSBzYWZlLCBhZnRlcg0KPiA+ID4gPiArICAg ICAqIGludmFsaWRhdGluZyB0aGUgcGFzaWQgY2FjaGVzLCBlbXVsYXRvciBuZWVkcw0KPiA+ID4g PiArICAgICAqIHRvIHJlcGxheSB0aGUgcGFzaWQgYmluZGluZ3MgYnkgd2Fsa2luZyBndWVzdA0K PiA+ID4gPiArICAgICAqIHBhc2lkIGRpciBhbmQgcGFzaWQgdGFibGUuDQo+ID4gPiA+ICsgICAg ICovDQo+ID4gPiA+ICsgICAgdnRkX2lvbW11X3VubG9jayhzKTsNCj4gPiA+ID4gICAgICByZXR1 cm4gMDsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NClsuLi5dDQo+ID4gPiA+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2h3L2kzODYvaW50ZWxfaW9tbXUuaA0KPiA+ID4gPiBiL2luY2x1ZGUvaHcvaTM4Ni9p bnRlbF9pb21tdS5oIGluZGV4IDQxNTgxMTYuLjNjYzRiNzQgMTAwNjQ0DQo+ID4gPiA+IC0tLSBh L2luY2x1ZGUvaHcvaTM4Ni9pbnRlbF9pb21tdS5oDQo+ID4gPiA+ICsrKyBiL2luY2x1ZGUvaHcv aTM4Ni9pbnRlbF9pb21tdS5oDQo+ID4gPiA+IEBAIC02OSw2ICs2OSw4IEBAIHR5cGVkZWYgdW5p b24gVlREX0lSX01TSUFkZHJlc3MNCj4gPiA+ID4gVlREX0lSX01TSUFkZHJlc3M7ICB0eXBlZGVm IHN0cnVjdCBWVERQQVNJRERpckVudHJ5DQo+ID4gPiA+IFZURFBBU0lERGlyRW50cnk7ICB0eXBl ZGVmIHN0cnVjdCBWVERQQVNJREVudHJ5IFZURFBBU0lERW50cnk7DQo+ID4gPiA+IHR5cGVkZWYg c3RydWN0IFZURElPTU1VQ29udGV4dCBWVERJT01NVUNvbnRleHQ7DQo+ID4gPiA+ICt0eXBlZGVm IHN0cnVjdCBWVERQQVNJRENhY2hlRW50cnkgVlREUEFTSURDYWNoZUVudHJ5OyB0eXBlZGVmDQo+ ID4gPiA+ICtzdHJ1Y3QgVlREUEFTSURBZGRyZXNzU3BhY2UgVlREUEFTSURBZGRyZXNzU3BhY2U7 DQo+ID4gPiA+DQo+ID4gPiA+ICAvKiBDb250ZXh0LUVudHJ5ICovDQo+ID4gPiA+ICBzdHJ1Y3Qg VlREQ29udGV4dEVudHJ5IHsNCj4gPiA+ID4gQEAgLTEwMSw2ICsxMDMsMzEgQEAgc3RydWN0IFZU RFBBU0lERW50cnkgew0KPiA+ID4gPiAgICAgIHVpbnQ2NF90IHZhbFs4XTsNCj4gPiA+ID4gIH07 DQo+ID4gPiA+DQo+ID4gPiA+ICtzdHJ1Y3QgcGFzaWRfa2V5IHsNCj4gPiA+ID4gKyAgICB1aW50 MzJfdCBwYXNpZDsNCj4gPiA+ID4gKyAgICB1aW50MTZfdCBzaWQ7DQo+ID4gPiA+ICt9Ow0KPiA+ ID4gPiArDQo+ID4gPiA+ICtzdHJ1Y3QgVlREUEFTSURDYWNoZUVudHJ5IHsNCj4gPiA+ID4gKyAg ICAvKg0KPiA+ID4gPiArICAgICAqIFRoZSBjYWNoZSBlbnRyeSBpcyBvYnNvbGV0ZSBpZg0KPiA+ ID4gPiArICAgICAqIHBhc2lkX2NhY2hlX2dlbiE9SW50ZWxJT01NVVN0YXRlLnBhc2lkX2NhY2hl X2dlbg0KPiA+ID4gPiArICAgICAqLw0KPiA+ID4gPiArICAgIHVpbnQzMl90IHBhc2lkX2NhY2hl X2dlbjsNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgVlREUEFTSURFbnRyeSBwYXNpZF9lbnRyeTsgfTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArc3RydWN0IFZURFBBU0lEQWRkcmVzc1NwYWNlIHsNCj4gPiA+ ID4gKyAgICBWVERCdXMgKnZ0ZF9idXM7DQo+ID4gPiA+ICsgICAgdWludDhfdCBkZXZmbjsNCj4g PiA+ID4gKyAgICBBZGRyZXNzU3BhY2UgYXM7DQo+ID4gPiA+ICsgICAgdWludDMyX3QgcGFzaWQ7 DQo+ID4gPiA+ICsgICAgSW50ZWxJT01NVVN0YXRlICppb21tdV9zdGF0ZTsNCj4gPiA+ID4gKyAg ICBWVERDb250ZXh0Q2FjaGVFbnRyeSBjb250ZXh0X2NhY2hlX2VudHJ5Ow0KPiA+ID4gPiArICAg IFFMSVNUX0VOVFJZKFZURFBBU0lEQWRkcmVzc1NwYWNlKSBuZXh0Ow0KPiA+ID4gPiArICAgIFZU RFBBU0lEQ2FjaGVFbnRyeSBwYXNpZF9jYWNoZV9lbnRyeTsNCj4gPiA+DQo+ID4gPiBJbiB2dGRf cGFzaWRfY2FjaGVfZ3NpKCkgWzFdLCB5b3UgZGlyZWN0bHkgcmVzZXQgcGFzaWRfY2FjaGVfZ2Vu IGZvcg0KPiA+ID4gZWFjaCBwYXNpZCBhZGRyZXNzIHNwYWNlLiAgWW91IG5ldmVyIGluY3JlYXNl DQo+ID4gPiBwYXNpZF9jYWNoZV9lbnRyeS5wYXNpZF9jYWNoZV9nZW4uICBUaGVuIElJVUMgdGhl IGdlbiB3aWxsIGFsd2F5cyBiZQ0KPiA+ID4gZWl0aGVyIDAgb3IgMS4gIEFuZC4uLg0KPiA+ID4N Cj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gIHN0cnVjdCBWVERBZGRyZXNzU3BhY2Ug ew0KPiA+ID4gPiAgICAgIFBDSUJ1cyAqYnVzOw0KPiA+ID4gPiAgICAgIHVpbnQ4X3QgZGV2Zm47 DQo+ID4gPiA+IEBAIC0xMjIsNiArMTQ5LDcgQEAgc3RydWN0IFZURElPTU1VQ29udGV4dCB7DQo+ ID4gPiA+ICAgICAgdWludDhfdCBkZXZmbjsNCj4gPiA+ID4gICAgICBJT01NVUNvbnRleHQgaW9t bXVfY29udGV4dDsNCj4gPiA+ID4gICAgICBEdWFsU3RhZ2VJT01NVU9iamVjdCAqZHNpX29iajsN Cj4gPiA+ID4gKyAgICBRTElTVF9FTlRSWShWVERJT01NVUNvbnRleHQpIG5leHQ7DQo+ID4gPiA+ ICAgICAgSW50ZWxJT01NVVN0YXRlICppb21tdV9zdGF0ZTsgIH07DQo+ID4gPiA+DQo+ID4gPiA+ IEBAIC0yNzIsOSArMzAwLDE0IEBAIHN0cnVjdCBJbnRlbElPTU1VU3RhdGUgew0KPiA+ID4gPg0K PiA+ID4gPiAgICAgIEdIYXNoVGFibGUgKnZ0ZF9hc19ieV9idXNwdHI7ICAgLyogVlREQnVzIG9i amVjdHMgaW5kZXhlZCBieSBQQ0lCdXMqDQo+ID4gPiByZWZlcmVuY2UgKi8NCj4gPiA+ID4gICAg ICBWVERCdXMgKnZ0ZF9hc19ieV9idXNfbnVtW1ZURF9QQ0lfQlVTX01BWF07IC8qIFZUREJ1cyBv YmplY3RzDQo+ID4gPiBpbmRleGVkIGJ5IGJ1cyBudW1iZXIgKi8NCj4gPiA+ID4gKyAgICBHSGFz aFRhYmxlICp2dGRfcGFzaWRfYXM7ICAgLyogVlREUEFTSURBZGRyZXNzU3BhY2UgaW5zdGFuY2Vz ICovDQo+ID4gPiA+ICsgICAgdWludDMyX3QgcGFzaWRfY2FjaGVfZ2VuOyAgIC8qIFNob3VsZCBi ZSBpbiBbMSxNQVhdICovDQo+ID4gPg0KPiA+ID4gLi4uIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSAx Lg0KPiA+ID4gSUlVQyB5b3UgY2FuIGRyb3AgYm90aCBvZiB0aGUgcGFzaWRfY2FjaGVfZ2VuLCBi ZWNhdXNlIGluIHRoaXMgd2hvbGUNCj4gPiA+IHBhdGNoc2V0IHlvdSdsbCByZW1vdmUgdGhlIHBh c2lkIGhhc2ggZW50cnkgd2hlbiBpdCBpcyBpbnZhbGlkYXRlZCwNCj4gPiA+IHJpZ2h0PyAgVGhl biBpZiB0aGUgaGFzaCBlbnRyeSBpcyB0aGVyZSwgaXQgbXVzdCBiZSB2YWxpZC4gIFdoZW4NCj4g PiA+IGl0J3Mgb3V0LWRhdGVkLCBpdCdsbCBiZSByZW1vdmVkIGZyb20gdGhlIGhhc2guDQo+ID4N Cj4gPiBPaCwgeWVzIGl0IGlzLiBIb3dldmVyLCBpdCdzIG5vdCBteSBpbnRldGlvbi4gSSdkIGxp a2UgdG8gbGV0IFsxXSB0bw0KPiA+IGluY3JlYXNlIHRoZSBzLT5wYXNpZF9jYWNoZV9nZW4gaW5z dGVhZCBvZiBqdXN0aW5nIHplcm8gaXQuIEkgdGhpbmsgaXQNCj4gPiB3aWxsIHNhdmUgc29tZSB0 aW1lIGFzIGxvb3AgaGFzaCB0YWJsZSB0YWtlcyB0aW1lLiBUaGFua3MgZm9yIGNhdGNoaW5nDQo+ ID4gaXQuIDotKQ0KPiANCj4gT0sgdGhhdCdzIGZpbmUgdG9vLiAgVGhlbiByZW1lbWJlciB0byBj b25kaXRpb25hbGx5IHJlc2V0IGl0Og0KPiANCj4gc3RhdGljIGludCB2dGRfcGFzaWRfY2FjaGVf Z3NpKEludGVsSU9NTVVTdGF0ZSAqcykgew0KPiAgICAgdHJhY2VfdnRkX3Bhc2lkX2NhY2hlX2dz aSgpOw0KPiANCj4gICAgIHZ0ZF9pb21tdV9sb2NrKHMpOw0KPiAgICAgcy0+cGFzaWRfY2FjaGVf Z2VuKys7DQo+ICAgICBpZiAocy0+cGFzaWRfY2FjaGVfZ2VuID49IFRIUkVTSE9MRCkgew0KPiAg ICAgICAgIHZ0ZF9wYXNpZF9jYWNoZV9yZXNldChzKTsNCj4gICAgIH0NCj4gICAgIHZ0ZF9pb21t dV91bmxvY2socyk7DQo+IA0KPiAgICAgcmV0dXJuIDA7DQo+IH0NCg0KdGhhbmtzIGZvciB0aGUg cHNldWRvIGNvZGUuIDotKQ0KDQpSZWdhcmRzLA0KWWkgTGl1DQoNCg== 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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=unavailable 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 305D1C3B188 for ; Thu, 13 Feb 2020 03:00:49 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (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 EC66B2168B for ; Thu, 13 Feb 2020 03:00:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org EC66B2168B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:46618 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j24kC-0002XZ-6s for qemu-devel@archiver.kernel.org; Wed, 12 Feb 2020 22:00:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58148) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j24jF-0001pt-VF for qemu-devel@nongnu.org; Wed, 12 Feb 2020 21:59:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j24jC-000057-FG for qemu-devel@nongnu.org; Wed, 12 Feb 2020 21:59:49 -0500 Received: from mga01.intel.com ([192.55.52.88]:16057) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j24jC-0008QT-2l for qemu-devel@nongnu.org; Wed, 12 Feb 2020 21:59:46 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Feb 2020 18:59:40 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,434,1574150400"; d="scan'208";a="237903525" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga006.jf.intel.com with ESMTP; 12 Feb 2020 18:59:40 -0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 12 Feb 2020 18:59:40 -0800 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.5]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.196]) with mapi id 14.03.0439.000; Thu, 13 Feb 2020 10:59:38 +0800 From: "Liu, Yi L" To: Peter Xu Subject: RE: [RFC v3 16/25] intel_iommu: add PASID cache management infrastructure Thread-Topic: [RFC v3 16/25] intel_iommu: add PASID cache management infrastructure Thread-Index: AQHV1p1QpD/IVrZuSU6bcoY7cN43AagWNKIAgAEU7GD///SzgIABQpxQ Date: Thu, 13 Feb 2020 02:59:37 +0000 Message-ID: References: <1580300216-86172-1-git-send-email-yi.l.liu@intel.com> <1580300216-86172-17-git-send-email-yi.l.liu@intel.com> <20200211233548.GO984290@xz-x1> <20200212152629.GA1083891@xz-x1> In-Reply-To: <20200212152629.GA1083891@xz-x1> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYzA0ZWYyODQtZDljYi00ZWYwLTliZGEtNzM2OWEzYzdkYmZmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiSlNsQmdXeXpKckkxMEtEV2NnRkxLcGh1V1lkSHhKVTJJNXlBdmlvcW1HWnBGSjFUZXlEY1wvcWI4VEhzY3MrRVgifQ== x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 192.55.52.88 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Tian, Kevin" , Jacob Pan , Yi Sun , Eduardo Habkost , "kvm@vger.kernel.org" , "mst@redhat.com" , "Tian, Jun J" , "qemu-devel@nongnu.org" , "eric.auger@redhat.com" , "alex.williamson@redhat.com" , "pbonzini@redhat.com" , "Wu, Hao" , "Sun, Yi Y" , Richard Henderson , "david@gibson.dropbear.id.au" Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" PiBGcm9tOiBQZXRlciBYdSA8cGV0ZXJ4QHJlZGhhdC5jb20+DQo+IFNlbnQ6IFdlZG5lc2RheSwg RmVicnVhcnkgMTIsIDIwMjAgMTE6MjYgUE0NCj4gVG86IExpdSwgWWkgTCA8eWkubC5saXVAaW50 ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW1JGQyB2MyAxNi8yNV0gaW50ZWxfaW9tbXU6IGFkZCBQ QVNJRCBjYWNoZSBtYW5hZ2VtZW50DQo+IGluZnJhc3RydWN0dXJlDQo+IA0KPiBPbiBXZWQsIEZl YiAxMiwgMjAyMCBhdCAwODozNzozMEFNICswMDAwLCBMaXUsIFlpIEwgd3JvdGU6DQo+ID4gPiBG cm9tOiBQZXRlciBYdSA8cGV0ZXJ4QHJlZGhhdC5jb20+DQo+ID4gPiBTZW50OiBXZWRuZXNkYXks IEZlYnJ1YXJ5IDEyLCAyMDIwIDc6MzYgQU0NCj4gPiA+IFRvOiBMaXUsIFlpIEwgPHlpLmwubGl1 QGludGVsLmNvbT4NCj4gPiA+IFN1YmplY3Q6IFJlOiBbUkZDIHYzIDE2LzI1XSBpbnRlbF9pb21t dTogYWRkIFBBU0lEIGNhY2hlIG1hbmFnZW1lbnQNCj4gPiA+IGluZnJhc3RydWN0dXJlDQo+ID4g Pg0KPiA+ID4gT24gV2VkLCBKYW4gMjksIDIwMjAgYXQgMDQ6MTY6NDdBTSAtMDgwMCwgTGl1LCBZ aSBMIHdyb3RlOg0KPiA+ID4gPiBGcm9tOiBMaXUgWWkgTCA8eWkubC5saXVAaW50ZWwuY29tPg0K PiA+ID4gPg0KPiA+ID4gPiBUaGlzIHBhdGNoIGFkZHMgYSBQQVNJRCBjYWNoZSBtYW5hZ2VtZW50 IGluZnJhc3RydWN0dXJlIGJhc2VkIG9uDQo+ID4gPiA+IG5ldyBhZGRlZCBzdHJ1Y3R1cmUgVlRE UEFTSURBZGRyZXNzU3BhY2UsIHdoaWNoIGlzIHVzZWQgdG8gdHJhY2sNCj4gPiA+ID4gdGhlIFBB U0lEIHVzYWdlIGFuZCBmdXR1cmUgUEFTSUQgdGFnZ2VkIERNQSBhZGRyZXNzIHRyYW5zbGF0aW9u DQo+ID4gPiA+IHN1cHBvcnQgaW4gdklPTU1VLg0KPiA+ID4gPg0KPiA+ID4gPiAgICAgc3RydWN0 IFZURFBBU0lEQWRkcmVzc1NwYWNlIHsNCj4gPiA+ID4gICAgICAgICBWVERCdXMgKnZ0ZF9idXM7 DQo+ID4gPiA+ICAgICAgICAgdWludDhfdCBkZXZmbjsNCj4gPiA+ID4gICAgICAgICBBZGRyZXNz U3BhY2UgYXM7DQo+ID4gPiA+ICAgICAgICAgdWludDMyX3QgcGFzaWQ7DQo+ID4gPiA+ICAgICAg ICAgSW50ZWxJT01NVVN0YXRlICppb21tdV9zdGF0ZTsNCj4gPiA+ID4gICAgICAgICBWVERDb250 ZXh0Q2FjaGVFbnRyeSBjb250ZXh0X2NhY2hlX2VudHJ5Ow0KPiA+ID4gPiAgICAgICAgIFFMSVNU X0VOVFJZKFZURFBBU0lEQWRkcmVzc1NwYWNlKSBuZXh0Ow0KPiA+ID4gPiAgICAgICAgIFZURFBB U0lEQ2FjaGVFbnRyeSBwYXNpZF9jYWNoZV9lbnRyeTsNCj4gPiA+ID4gICAgIH07DQo+ID4gPiA+ DQo+ID4gPiA+IElkZWFsbHksIGEgVlREUEFTSURBZGRyZXNzU3BhY2UgaW5zdGFuY2UgaXMgY3Jl YXRlZCB3aGVuIGEgUEFTSUQNCj4gPiA+ID4gaXMgYm91bmQgd2l0aCBhIERNQSBBZGRyZXNzU3Bh Y2UuIEludGVsIFZULWQgc3BlYyByZXF1aXJlcyBndWVzdA0KPiA+ID4gPiBzb2Z0d2FyZSB0byBp c3N1ZSBwYXNpZCBjYWNoZSBpbnZhbGlkYXRpb24gd2hlbiBiaW5kIG9yIHVuYmluZCBhDQo+ID4g PiA+IHBhc2lkIHdpdGggYW4gYWRkcmVzcyBzcGFjZSB1bmRlciBjYWNoaW5nLW1vZGUuIEhvd2V2 ZXIsIGFzDQo+ID4gPiA+IFZURFBBU0lEQWRkcmVzc1NwYWNlIGluc3RhbmNlcyBhbHNvIGFjdCBh cyBwYXNpZCBjYWNoZSBpbiB0aGlzDQo+ID4gPiA+IGltcGxlbWVudGF0aW9uLCBpdHMgY3JlYXRp b24gYWxzbyBoYXBwZW5zIGR1cmluZyB2SU9NTVUgUEFTSUQNCj4gPiA+ID4gdGFnZ2VkIERNQSB0 cmFuc2xhdGlvbi4gVGhlIGNyZWF0aW9uIGluIHRoaXMgcGF0aCB3aWxsIG5vdCBiZQ0KPiA+ID4g PiBhZGRlZCBpbiB0aGlzIHBhdGNoIHNpbmNlIG5vIFBBU0lELWNhcGFibGUgZW11bGF0ZWQgZGV2 aWNlcyBmb3INCj4gPiA+ID4gbm93Lg0KPiA+ID4gPg0KPiA+ID4gPiBUaGUgaW1wbGVtZW50YXRp b24gaW4gdGhpcyBwYXRjaCBtYW5hZ2VzIFZURFBBU0lEQWRkcmVzc1NwYWNlDQo+ID4gPiA+IGlu c3RhbmNlcyBwZXIgUEFTSUQrQkRGIChsb29rdXAgYW5kIGluc2VydCB3aWxsIHVzZSBQQVNJRCBh bmQNCj4gPiA+ID4gQkRGKSBzaW5jZSBJbnRlbCBWVC1kIHNwZWMgYWxsb3dzIHBlci1CREYgUEFT SUQgVGFibGUuIFdoZW4gYQ0KPiA+ID4gPiBndWVzdCBiaW5kIGEgUEFTSUQgd2l0aCBhbiBBZGRy ZXNzU3BhY2UsIFFFTVUgd2lsbCBjYXB0dXJlIHRoZQ0KPiA+ID4gPiBndWVzdCBwYXNpZCBzZWxl Y3RpdmUgcGFzaWQgY2FjaGUgaW52YWxpZGF0aW9uLCBhbmQgYWxsb2NhdGUNCj4gPiA+ID4gcmVt b3ZlIGEgVlREUEFTSURBZGRyZXNzU3BhY2UgaW5zdGFuY2UgcGVyIHRoZSBpbnZhbGlkYXRpb24N Cj4gPiA+ID4gcmVhc29uczoNCj4gPiA+ID4NCj4gPiA+ID4gICAgICopIGEgcHJlc2VudCBwYXNp ZCBlbnRyeSBtb3ZlZCB0byBub24tcHJlc2VudA0KPiA+ID4gPiAgICAgKikgYSBwcmVzZW50IHBh c2lkIGVudHJ5IHRvIGJlIGEgcHJlc2VudCBlbnRyeQ0KPiA+ID4gPiAgICAgKikgYSBub24tcHJl c2VudCBwYXNpZCBlbnRyeSBtb3ZlZCB0byBwcmVzZW50DQo+ID4gPiA+DQo+ID4gPiA+IHZJT01N VSBlbXVsYXRvciBjb3VsZCBmaWd1cmUgb3V0IHRoZSByZWFzb24gYnkgZmV0Y2hpbmcgbGF0ZXN0 DQo+ID4gPiA+IGd1ZXN0IHBhc2lkIGVudHJ5Lg0KPiA+ID4gPg0KPiA+ID4gPiBDYzogS2V2aW4g VGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+DQo+ID4gPiA+IENjOiBKYWNvYiBQYW4gPGphY29i Lmp1bi5wYW5AbGludXguaW50ZWwuY29tPg0KPiA+ID4gPiBDYzogUGV0ZXIgWHUgPHBldGVyeEBy ZWRoYXQuY29tPg0KPiA+ID4gPiBDYzogWWkgU3VuIDx5aS55LnN1bkBsaW51eC5pbnRlbC5jb20+ DQo+ID4gPiA+IENjOiBQYW9sbyBCb256aW5pIDxwYm9uemluaUByZWRoYXQuY29tPg0KPiA+ID4g PiBDYzogUmljaGFyZCBIZW5kZXJzb24gPHJ0aEB0d2lkZGxlLm5ldD4NCj4gPiA+ID4gQ2M6IEVk dWFyZG8gSGFia29zdCA8ZWhhYmtvc3RAcmVkaGF0LmNvbT4NCj4gPiA+ID4gU2lnbmVkLW9mZi1i eTogTGl1IFlpIEwgPHlpLmwubGl1QGludGVsLmNvbT4NCj4gPiA+ID4gLS0tDQo+ID4gPiA+ICBo dy9pMzg2L2ludGVsX2lvbW11LmMgICAgICAgICAgfCAzNjcNCj4gPiA+ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gPiA+ICBody9pMzg2L2ludGVsX2lvbW11 X2ludGVybmFsLmggfCAgMTQgKysNCj4gPiA+ID4gIGh3L2kzODYvdHJhY2UtZXZlbnRzICAgICAg ICAgICB8ICAgMSArDQo+ID4gPiA+ICBpbmNsdWRlL2h3L2kzODYvaW50ZWxfaW9tbXUuaCAgfCAg MzYgKysrLQ0KPiA+ID4gPiAgNCBmaWxlcyBjaGFuZ2VkLCA0MTcgaW5zZXJ0aW9ucygrKSwgMSBk ZWxldGlvbigtKQ0KPiA+ID4gPg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaHcvaTM4Ni9pbnRlbF9p b21tdS5jIGIvaHcvaTM4Ni9pbnRlbF9pb21tdS5jIGluZGV4DQo+ID4gPiA+IDU4ZTcyMTMuLmM3 NWNiN2IgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2h3L2kzODYvaW50ZWxfaW9tbXUuYw0KPiA+ID4g PiArKysgYi9ody9pMzg2L2ludGVsX2lvbW11LmMNCj4gPiA+ID4gQEAgLTQwLDYgKzQwLDcgQEAN Cj4gPiA+ID4gICNpbmNsdWRlICJrdm1faTM4Ni5oIg0KPiA+ID4gPiAgI2luY2x1ZGUgIm1pZ3Jh dGlvbi92bXN0YXRlLmgiDQo+ID4gPiA+ICAjaW5jbHVkZSAidHJhY2UuaCINCj4gPiA+ID4gKyNp bmNsdWRlICJxZW11L2poYXNoLmgiDQo+ID4gPiA+DQo+ID4gPiA+ICAvKiBjb250ZXh0IGVudHJ5 IG9wZXJhdGlvbnMgKi8NCj4gPiA+ID4gICNkZWZpbmUgVlREX0NFX0dFVF9SSUQyUEFTSUQoY2Up IFwgQEAgLTY1LDYgKzY2LDggQEAgIHN0YXRpYyB2b2lkDQo+ID4gPiA+IHZ0ZF9hZGRyZXNzX3Nw YWNlX3JlZnJlc2hfYWxsKEludGVsSU9NTVVTdGF0ZSAqcyk7ICBzdGF0aWMgdm9pZA0KPiA+ID4g PiB2dGRfYWRkcmVzc19zcGFjZV91bm1hcChWVERBZGRyZXNzU3BhY2UgKmFzLCBJT01NVU5vdGlm aWVyDQo+ID4gPiAqbik7DQo+ID4gPiA+DQo+ID4gPiA+ICtzdGF0aWMgdm9pZCB2dGRfcGFzaWRf Y2FjaGVfcmVzZXQoSW50ZWxJT01NVVN0YXRlICpzKTsNClsuLi5dDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKy8qKg0KPiA+ID4gPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIHBhc2lk X2NhY2hlX2dlbiBvZiBjYWNoZWQgcGFzaWQNCj4gPiA+ID4gKyAqIGVudHJ5IGluIHZ0ZF9wYXNp ZF9hcyBpbnN0YW5jZXMuIENhbGxlciBvZiB0aGlzIGZ1bmN0aW9uDQo+ID4gPiA+ICtzaG91bGQN Cj4gPiA+ID4gKyAqIGhvbGQgaW9tbXVfbG9jay4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3Rh dGljIGdib29sZWFuIHZ0ZF9mbHVzaF9wYXNpZChncG9pbnRlciBrZXksIGdwb2ludGVyIHZhbHVl LA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2Vy X2RhdGEpIHsNCj4gPiA+ID4gKyAgICBWVERQQVNJRENhY2hlSW5mbyAqcGNfaW5mbyA9IHVzZXJf ZGF0YTsNCj4gPiA+ID4gKyAgICBWVERQQVNJREFkZHJlc3NTcGFjZSAqdnRkX3Bhc2lkX2FzID0g dmFsdWU7DQo+ID4gPiA+ICsgICAgSW50ZWxJT01NVVN0YXRlICpzID0gdnRkX3Bhc2lkX2FzLT5p b21tdV9zdGF0ZTsNCj4gPiA+ID4gKyAgICBWVERQQVNJRENhY2hlRW50cnkgKnBjX2VudHJ5ID0g JnZ0ZF9wYXNpZF9hcy0+cGFzaWRfY2FjaGVfZW50cnk7DQo+ID4gPiA+ICsgICAgVlREQnVzICp2 dGRfYnVzID0gdnRkX3Bhc2lkX2FzLT52dGRfYnVzOw0KPiA+ID4gPiArICAgIFZURFBBU0lERW50 cnkgcGU7DQo+ID4gPiA+ICsgICAgdWludDE2X3QgZGlkOw0KPiA+ID4gPiArICAgIHVpbnQzMl90 IHBhc2lkOw0KPiA+ID4gPiArICAgIHVpbnQxNl90IGRldmZuOw0KPiA+ID4gPiArICAgIGludCBy ZXQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBkaWQgPSB2dGRfcGVfZ2V0X2RvbWFpbl9pZCgm cGNfZW50cnktPnBhc2lkX2VudHJ5KTsNCj4gPiA+ID4gKyAgICBwYXNpZCA9IHZ0ZF9wYXNpZF9h cy0+cGFzaWQ7DQo+ID4gPiA+ICsgICAgZGV2Zm4gPSB2dGRfcGFzaWRfYXMtPmRldmZuOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsgICAgaWYgKCEocGNfZW50cnktPnBhc2lkX2NhY2hlX2dlbiA9PSBz LT5wYXNpZF9jYWNoZV9nZW4pKSB7DQo+ID4gPiA+ICsgICAgICAgIHJldHVybiBmYWxzZTsNCj4g PiA+ID4gKyAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBzd2l0Y2ggKHBjX2luZm8tPmZs YWdzICYgVlREX1BBU0lEX0NBQ0hFX0lORk9fTUFTSykgew0KPiA+ID4gPiArICAgIGNhc2UgVlRE X1BBU0lEX0NBQ0hFX1BBU0lEU0k6DQo+ID4gPiA+ICsgICAgICAgIGlmIChwY19pbmZvLT5wYXNp ZCAhPSBwYXNpZCkgew0KPiA+ID4gPiArICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ID4g PiArICAgICAgICB9DQo+ID4gPiA+ICsgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLw0KPiA+ID4N Cj4gPiA+IFdoeSBmYWxsIHRocm91Z2g/DQo+ID4NCj4gPiBGb3IgVlREX1BBU0lEX0NBQ0hFX1BB U0lEU0ksIGl0IGltcGxpZXMgZG9tYWluIHNlbGVjdGl2ZSwgc28gaXQNCj4gPiByZXF1aXJlcyB0 byBjaGVjayBkaWQganVzdCBhcyBWVERfUEFTSURfQ0FDSEVfRE9NU0kuDQo+IA0KPiBBaCByaWdo dC4gOikNCj4gDQo+ID4NCj4gPiA+DQo+ID4gPiA+ICsgICAgY2FzZSBWVERfUEFTSURfQ0FDSEVf RE9NU0k6DQo+ID4gPiA+ICsgICAgICAgIGlmIChwY19pbmZvLT5kb21haW5faWQgIT0gZGlkKSB7 DQo+ID4gPiA+ICsgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gPiA+ICsgICAgICAgIH0N Cj4gPiA+ID4gKyAgICAgICAgLyogRmFsbCB0aHJvdWdoICovDQo+ID4gPg0KPiA+ID4gU2FtZSBo ZXJlLg0KPiA+DQo+ID4gSWYgY29kZSBjb21lcyB0byBoZXJlLCBpdCBtZWFucyB0aGUgbmVjZXNz YXJ5IGNoZWNrcyBhcmUgcGFzc2VkLg0KPiA+IFNob3VsZCBhZGQgYSBicmVhayBoZXJlLiBIb3dl dmVyLCBhcyB0aGUgYmVsb3cgY2FzZSBkb2VzIG5vdGhpbmcgYW5kDQo+ID4ganVzdCBjYWxscyBi cmVhay4gU28gSSBsZXQgdGhlIGNvZGUgZmFsbCB0aHJvdWdoLg0KPiANCj4gWWVzIHRoaXMgaXMg ZmluZSB0b28uDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gPiArICAgIGNhc2UgVlREX1BBU0lEX0NB Q0hFX0dMT0JBTDoNCj4gPiA+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gPiA+ICsgICAgZGVmYXVs dDoNCj4gPiA+DQo+ID4gPiBOZXZlZSByZWFjaCBoZXJlIHJpZ2h0PyAgSWYgc28gd2UgY2FuIGFi b3J0Lg0KPiA+DQo+ID4geWVzLCBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZS4NCj4gPg0KPiA+ID4g PiArICAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArDQo+ID4g PiA+ICsgICAgLyoNCj4gPiA+ID4gKyAgICAgKiBwYXNpZCBjYWNoZSBpbnZhbGlkYXRpb24gbWF5 IGluZGljYXRlIGEgcHJlc2VudCBwYXNpZA0KPiA+ID4gPiArICAgICAqIGVudHJ5IHRvIHByZXNl bnQgcGFzaWQgZW50cnkgbW9kaWZpY2F0aW9uLiBUbyBjb3ZlciBzdWNoDQo+ID4gPiA+ICsgICAg ICogY2FzZSwgdklPTU1VIGVtdWxhdG9yIG5lZWRzIHRvIGZldGNoIGxhdGVzdCBndWVzdCBwYXNp ZA0KPiA+ID4gPiArICAgICAqIGVudHJ5IGFuZCBjaGVjayBjYWNoZWQgcGFzaWQgZW50cnksIHRo ZW4gdXBkYXRlIHBhc2lkDQo+ID4gPiA+ICsgICAgICogY2FjaGUgYW5kIHNlbmQgcGFzaWQgYmlu ZC91bmJpbmQgdG8gaG9zdCBwcm9wZXJseS4NCj4gPiA+ID4gKyAgICAgKi8NCj4gPiA+ID4gKyAg ICByZXQgPSB2dGRfZGV2X2dldF9wZV9mcm9tX3Bhc2lkKHMsDQo+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICBwY2lfYnVzX251bSh2dGRfYnVzLT5idXMpLCBkZXZmbiwgcGFzaWQsICZwZSk7DQo+ ID4gPiA+ICsgICAgaWYgKHJldCkgew0KPiA+ID4gPiArICAgICAgICAvKg0KPiA+ID4gPiArICAg ICAgICAgKiBObyB2YWxpZCBwYXNpZCBlbnRyeSBpbiBndWVzdCBtZW1vcnkuIGUuZy4gcGFzaWQg ZW50cnkNCj4gPiA+ID4gKyAgICAgICAgICogd2FzIG1vZGlmaWVkIHRvIGJlIGVpdGhlciBhbGwt emVybyBvciBub24tcHJlc2VudC4gRWl0aGVyDQo+ID4gPiA+ICsgICAgICAgICAqIGNhc2UgbWVh bnMgZXhpc3RpbmcgcGFzaWQgY2FjaGUgc2hvdWxkIGJlIHJlbW92ZWQuDQo+ID4gPiA+ICsgICAg ICAgICAqLw0KPiA+ID4gPiArICAgICAgICBnb3RvIHJlbW92ZTsNCj4gPiA+ID4gKyAgICB9DQo+ ID4gPiA+ICsgICAgLyogQ29tcGFyZSBjYWNoZWQgcGFzaWQgZW50cnkgYW5kIGxhdGVzdCBwYXNp ZCBlbnRyeSAqLw0KPiA+ID4gPiArICAgIGlmICghdnRkX3Bhc2lkX2VudHJ5X2NvbXBhcmUoJnBl LCAmcGNfZW50cnktPnBhc2lkX2VudHJ5KSkgew0KPiA+ID4gPiArICAgICAgICAvKiBwYXNpZCBl bnRyeSB3YXMgdXBkYXRlZCwgdGh1cyB1cGRhdGUgdGhlIHBhc2lkIGNhY2hlICovDQo+ID4gPiA+ ICsgICAgICAgIHBjX2VudHJ5LT5wYXNpZF9lbnRyeSA9IHBlOw0KPiA+ID4gPiArICAgICAgICBw Y19lbnRyeS0+cGFzaWRfY2FjaGVfZ2VuID0gcy0+cGFzaWRfY2FjaGVfZ2VuOw0KPiA+ID4gPiAr ICAgICAgICAvKg0KPiA+ID4gPiArICAgICAgICAgKiBUT0RPOg0KPiA+ID4gPiArICAgICAgICAg KiAtIHNlbmQgcGFzaWQgYmluZCB0byBob3N0IGZvciBwYXNzdGhydSBkZXZpY2VzDQo+ID4gPiA+ ICsgICAgICAgICAqIC0gd2hlbiBwYXNpZC1iYXNlLWlvdGxiKHBpb3RsYikgaW5mcmFzdHJ1Y3R1 cmUgaXMgcmVhZHksDQo+ID4gPiA+ICsgICAgICAgICAqICAgc2hvdWxkIGludmFsaWRhdGUgUUVN VSBwaW90bGIgdG9nZWh0ZXIgd2l0aCB0aGlzIGNoYW5nZS4NCj4gPiA+ID4gKyAgICAgICAgICov DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICAgIHJldHVybiBmYWxzZTsNCj4gPiA+ID4gK3Jl bW92ZToNCj4gPiA+ID4gKyAgICAvKg0KPiA+ID4gPiArICAgICAqIFRPRE86DQo+ID4gPiA+ICsg ICAgICogLSBzZW5kIHBhc2lkIHVuYmluZCB0byBob3N0IGZvciBwYXNzdGhydSBkZXZpY2VzDQo+ ID4gPiA+ICsgICAgICogLSB3aGVuIHBhc2lkLWJhc2UtaW90bGIocGlvdGxiKSBpbmZyYXN0cnVj dHVyZSBpcyByZWFkeSwNCj4gPiA+ID4gKyAgICAgKiAgIHNob3VsZCBpbnZhbGlkYXRlIFFFTVUg cGlvdGxiIHRvZ2VodGVyIHdpdGggdGhpcyBjaGFuZ2UuDQo+ID4gPiA+ICsgICAgICovDQo+ID4g PiA+ICsgICAgcmV0dXJuIHRydWU7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gIHN0 YXRpYyBpbnQgdnRkX3Bhc2lkX2NhY2hlX2RzaShJbnRlbElPTU1VU3RhdGUgKnMsIHVpbnQxNl90 DQo+ID4gPiA+IGRvbWFpbl9pZCkgIHsNCj4gPiA+ID4gKyAgICBWVERQQVNJRENhY2hlSW5mbyBw Y19pbmZvOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgdHJhY2VfdnRkX3Bhc2lkX2NhY2hlX2Rz aShkb21haW5faWQpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgcGNfaW5mby5mbGFncyA9IFZU RF9QQVNJRF9DQUNIRV9ET01TSTsNCj4gPiA+ID4gKyAgICBwY19pbmZvLmRvbWFpbl9pZCA9IGRv bWFpbl9pZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ICsgICAgICogTG9v cCBhbGwgZXhpc3RpbmcgcGFzaWQgY2FjaGVzIGFuZCB1cGRhdGUgdGhlbS4NCj4gPiA+ID4gKyAg ICAgKi8NCj4gPiA+ID4gKyAgICB2dGRfaW9tbXVfbG9jayhzKTsNCj4gPiA+ID4gKyAgICBnX2hh c2hfdGFibGVfZm9yZWFjaF9yZW1vdmUocy0+dnRkX3Bhc2lkX2FzLA0KPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRkX2ZsdXNoX3Bhc2lkLCAmcGNfaW5mbyk7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAvKg0KPiA+ID4gPiArICAgICAqIFRPRE86IERvbWFpbiBz ZWxlY3RpdmUgUEFTSUQgY2FjaGUgaW52YWxpZGF0aW9uDQo+ID4gPiA+ICsgICAgICogZmx1c2hl cyBhbGwgdGhlIHBhc2lkIGNhY2hlcyB3aXRoaW4gYSBkb21haW4uIFRvDQo+ID4gPiA+ICsgICAg ICogYmUgc2FmZSwgYWZ0ZXIgaW52YWxpZGF0aW5nIHRoZSBwYXNpZCBjYWNoZXMsIGVtdWxhdG9y DQo+ID4gPiA+ICsgICAgICogbmVlZHMgdG8gcmVwbGF5IHRoZSBwYXNpZCBiaW5kaW5ncyBieSB3 YWxraW5nIGd1ZXN0DQo+ID4gPiA+ICsgICAgICogcGFzaWQgZGlyIGFuZCBwYXNpZCB0YWJsZS4N Cj4gPiA+DQo+ID4gPiBCZXR0ZXIgc3BlbGwgb3V0IG9uIHdoYXQgc3BlY2lhbCBjYXNlIHdlJ3Jl IGhhbmRsaW5nIGhlcmU6IFdoZW4gdGhlDQo+ID4gPiBndWVzdCBzZXR1cCBhIG5ldyBQQVNJRCBl bnRyeSB0aGVuIHNlbmQgYSBQQVNJRCBEU0kuDQo+ID4NCj4gPiBvaCwgeWVzLiAgd2lsbCBhZGQg aXQgaW4gbmV3IHZlcnNpb24uIDotKQ0KPiA+DQo+ID4gPg0KPiA+ID4gPiArICAgICAqLw0KPiA+ ID4gPiArICAgIHZ0ZF9pb21tdV91bmxvY2socyk7DQo+ID4gPiA+ICAgICAgcmV0dXJuIDA7DQo+ ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAqIFRoaXMgZnVuY3Rp b24gZmluZHMgb3IgYWRkcyBhIFZURFBBU0lEQWRkcmVzc1NwYWNlIGZvciBhDQo+ID4gPiA+ICtk ZXZpY2UNCj4gPiA+ID4gKyAqIHdoZW4gaXQgaXMgYm91bmQgdG8gYSBwYXNpZC4gQ2FsbGVyIG9m IHRoaXMgZnVuY3Rpb24gc2hvdWxkDQo+ID4gPiA+ICtob2xkDQo+ID4gPiA+ICsgKiBpb21tdV9s b2NrLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgVlREUEFTSURBZGRyZXNzU3BhY2Ug KnZ0ZF9hZGRfZmluZF9wYXNpZF9hcyhJbnRlbElPTU1VU3RhdGUNCj4gKnMsDQo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWVERCdXMg KnZ0ZF9idXMsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZGV2Zm4sDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwYXNpZCwNCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxs b2NhdGUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgICAgc3RydWN0IHBhc2lkX2tleSBrZXk7DQo+ ID4gPiA+ICsgICAgc3RydWN0IHBhc2lkX2tleSAqbmV3X2tleTsNCj4gPiA+ID4gKyAgICBWVERQ QVNJREFkZHJlc3NTcGFjZSAqdnRkX3Bhc2lkX2FzOw0KPiA+ID4gPiArICAgIHVpbnQxNl90IHNp ZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIHNpZCA9IHZ0ZF9tYWtlX3NvdXJjZV9pZChwY2lf YnVzX251bSh2dGRfYnVzLT5idXMpLCBkZXZmbik7DQo+ID4gPiA+ICsgICAgdnRkX2luaXRfcGFz aWRfa2V5KHBhc2lkLCBzaWQsICZrZXkpOw0KPiA+ID4gPiArICAgIHZ0ZF9wYXNpZF9hcyA9IGdf aGFzaF90YWJsZV9sb29rdXAocy0+dnRkX3Bhc2lkX2FzLCAma2V5KTsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArICAgIGlmICghdnRkX3Bhc2lkX2FzICYmIGFsbG9jYXRlKSB7DQo+ID4gPiA+ICsgICAg ICAgIG5ld19rZXkgPSBnX21hbGxvYzAoc2l6ZW9mKCpuZXdfa2V5KSk7DQo+ID4gPiA+ICsgICAg ICAgIHZ0ZF9pbml0X3Bhc2lkX2tleShwYXNpZCwgc2lkLCBuZXdfa2V5KTsNCj4gPiA+ID4gKyAg ICAgICAgLyoNCj4gPiA+ID4gKyAgICAgICAgICogSW5pdGlhdGUgdGhlIHZ0ZF9wYXNpZF9hcyBz dHJ1Y3R1cmUuDQo+ID4gPiA+ICsgICAgICAgICAqDQo+ID4gPiA+ICsgICAgICAgICAqIFRoaXMg c3RydWN0dXJlIGhlcmUgaXMgdXNlZCB0byB0cmFjayB0aGUgZ3Vlc3QgcGFzaWQNCj4gPiA+ID4g KyAgICAgICAgICogYmluZGluZyBhbmQgYWxzbyBzZXJ2ZXMgYXMgcGFzaWQtY2FjaGUgbWFuZ2Vt ZW50IGVudHJ5Lg0KPiA+ID4gPiArICAgICAgICAgKg0KPiA+ID4gPiArICAgICAgICAgKiBUT0RP OiBpbiBmdXR1cmUsIGlmIHdhbnRzIHRvIHN1cHBvcnQgdGhlIFNWQS1hd2FyZSBETUENCj4gPiA+ ID4gKyAgICAgICAgICogICAgICAgZW11bGF0aW9uLCB0aGUgdnRkX3Bhc2lkX2FzIHNob3VsZCBo YXZlIGluY2x1ZGUNCj4gPiA+ID4gKyAgICAgICAgICogICAgICAgQWRkcmVzc1NwYWNlIHRvIHN1 cHBvcnQgRE1BIGVtdWxhdGlvbi4NCj4gPiA+ID4gKyAgICAgICAgICovDQo+ID4gPiA+ICsgICAg ICAgIHZ0ZF9wYXNpZF9hcyA9IGdfbWFsbG9jMChzaXplb2YoVlREUEFTSURBZGRyZXNzU3BhY2Up KTsNCj4gPiA+ID4gKyAgICAgICAgdnRkX3Bhc2lkX2FzLT5pb21tdV9zdGF0ZSA9IHM7DQo+ID4g PiA+ICsgICAgICAgIHZ0ZF9wYXNpZF9hcy0+dnRkX2J1cyA9IHZ0ZF9idXM7DQo+ID4gPiA+ICsg ICAgICAgIHZ0ZF9wYXNpZF9hcy0+ZGV2Zm4gPSBkZXZmbjsNCj4gPiA+ID4gKyAgICAgICAgdnRk X3Bhc2lkX2FzLT5jb250ZXh0X2NhY2hlX2VudHJ5LmNvbnRleHRfY2FjaGVfZ2VuID0gMDsNCj4g PiA+ID4gKyAgICAgICAgdnRkX3Bhc2lkX2FzLT5wYXNpZCA9IHBhc2lkOw0KPiA+ID4gPiArICAg ICAgICB2dGRfcGFzaWRfYXMtPnBhc2lkX2NhY2hlX2VudHJ5LnBhc2lkX2NhY2hlX2dlbiA9IDA7 DQo+ID4gPiA+ICsgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQocy0+dnRkX3Bhc2lkX2FzLCBu ZXdfa2V5LCB2dGRfcGFzaWRfYXMpOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgICByZXR1 cm4gdnRkX3Bhc2lkX2FzOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgLyoqDQo+ ID4gPiA+ICsgICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBwYXNpZCBlbnRyeSBjYWNoZWQg aW4gJnZ0ZF9wYXNpZF9hcy4NCj4gPiA+ID4gKyAgKiBDYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiBz aG91bGQgaG9sZCBpb21tdV9sb2NrLg0KPiA+ID4gPiArICAqLw0KPiA+ID4gPiArc3RhdGljIGlu bGluZSB2b2lkIHZ0ZF9maWxsX2luX3BlX2NhY2hlKA0KPiA+ID4gPiArICAgICAgICAgICAgICBW VERQQVNJREFkZHJlc3NTcGFjZSAqdnRkX3Bhc2lkX2FzLCBWVERQQVNJREVudHJ5DQo+ID4gPiA+ ICsqcGUpIHsNCj4gPiA+ID4gKyAgICBJbnRlbElPTU1VU3RhdGUgKnMgPSB2dGRfcGFzaWRfYXMt PmlvbW11X3N0YXRlOw0KPiA+ID4gPiArICAgIFZURFBBU0lEQ2FjaGVFbnRyeSAqcGNfZW50cnkg PQ0KPiA+ID4gPiArJnZ0ZF9wYXNpZF9hcy0+cGFzaWRfY2FjaGVfZW50cnk7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgICBwY19lbnRyeS0+cGFzaWRfZW50cnkgPSAqcGU7DQo+ID4gPiA+ICsgICAg cGNfZW50cnktPnBhc2lkX2NhY2hlX2dlbiA9IHMtPnBhc2lkX2NhY2hlX2dlbjsgfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICBzdGF0aWMgaW50IHZ0ZF9wYXNpZF9jYWNoZV9wc2koSW50ZWxJT01NVVN0 YXRlICpzLA0KPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90 IGRvbWFpbl9pZCwgdWludDMyX3QNCj4gPiA+ID4gcGFzaWQpICB7DQo+ID4gPiA+ICsgICAgVlRE UEFTSURDYWNoZUluZm8gcGNfaW5mbzsNCj4gPiA+ID4gKyAgICBWVERQQVNJREVudHJ5IHBlOw0K PiA+ID4gPiArICAgIFZUREJ1cyAqdnRkX2J1czsNCj4gPiA+ID4gKyAgICBpbnQgYnVzX24sIGRl dmZuOw0KPiA+ID4gPiArICAgIFZURFBBU0lEQWRkcmVzc1NwYWNlICp2dGRfcGFzaWRfYXM7DQo+ ID4gPiA+ICsgICAgVlRESU9NTVVDb250ZXh0ICp2dGRfaWN4Ow0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgICAgLyogUEFTSUQgc2VsZWN0aXZlIGltcGxpZXMgYSBESUQgc2VsZWN0aXZlICovDQo+ID4g PiA+ICsgICAgcGNfaW5mby5mbGFncyA9IFZURF9QQVNJRF9DQUNIRV9QQVNJRFNJOw0KPiA+ID4g PiArICAgIHBjX2luZm8uZG9tYWluX2lkID0gZG9tYWluX2lkOw0KPiA+ID4gPiArICAgIHBjX2lu Zm8ucGFzaWQgPSBwYXNpZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ICsg ICAgICogUmVnYXJkcyB0byBhIHBhc2lkIHNlbGVjdGl2ZSBwYXNpZCBjYWNoZSBpbnZhbGlkYXRp b24gKFBTSSksDQo+ID4gPiA+ICsgICAgICogaXQgY291bGQgYmUgZWl0aGVyIGNhc2VzIG9mIGJl bG93Og0KPiA+ID4gPiArICAgICAqIGEpIGEgcHJlc2VudCBwYXNpZCBlbnRyeSBtb3ZlZCB0byBu b24tcHJlc2VudA0KPiA+ID4gPiArICAgICAqIGIpIGEgcHJlc2VudCBwYXNpZCBlbnRyeSB0byBi ZSBhIHByZXNlbnQgZW50cnkNCj4gPiA+ID4gKyAgICAgKiBjKSBhIG5vbi1wcmVzZW50IHBhc2lk IGVudHJ5IG1vdmVkIHRvIHByZXNlbnQNCj4gPiA+ID4gKyAgICAgKg0KPiA+ID4gPiArICAgICAq IEhlcmUgdGhlIGhhbmRsaW5nIG9mIGEgUFNJIGlzOg0KPiA+ID4gPiArICAgICAqIDEpIGxvb3Ag YWxsIHRoZSBleGlzaXRuZyB2dGRfcGFzaWRfYXMgaW5zdGFuY2VzIHRvIHVwZGF0ZSB0aGVtDQo+ ID4gPiA+ICsgICAgICogICAgYWNjb3JkaW5nIHRvIHRoZSBsYXRlc3QgZ3Vlc3QgcGFzaWQgZW50 cnkgaW4gcGFzaWQgdGFibGUuDQo+ID4gPiA+ICsgICAgICogICAgdGhpcyB3aWxsIG1ha2Ugc3Vy ZSBhZmZlY3RlZCBleGlzdGluZyB2dGRfcGFzaWRfYXMgaW5zdGFuY2VzDQo+ID4gPiA+ICsgICAg ICogICAgY2FjaGVkIHRoZSBsYXRlc3QgcGFzaWQgZW50cmllcy4gQWxzbywgZHVyaW5nIHRoZSBs b29wLCB0aGUNCj4gPiA+ID4gKyAgICAgKiAgICBob3N0IHNob3VsZCBiZSBub3RpZmllZCBpZiBu ZWVkZWQuIGUuZy4gcGFzaWQgdW5iaW5kIG9yIHBhc2lkDQo+ID4gPiA+ICsgICAgICogICAgdXBk YXRlLiBTaG91bGQgYmUgYWJsZSB0byBjb3ZlciBjYXNlIGEpIGFuZCBjYXNlIGIpLg0KPiA+ID4g PiArICAgICAqDQo+ID4gPiA+ICsgICAgICogMikgbG9vcCBhbGwgZGV2aWNlcyB0byBjb3ZlciBj YXNlIGMpDQo+ID4gPiA+ICsgICAgICogICAgSG93ZXZlciwgaXQgaXMgbm90IGdvb2QgdG8gYWx3 YXlzIGxvb3AgYWxsIGRldmljZXMuIEluIHRoaXMNCj4gPiA+ID4gKyAgICAgKiAgICBpbXBsZW1l bnRhdGlvbi4gV2UgZG8gaXQgaW4gdGhpcyB3YXlzOg0KPiA+ID4gPiArICAgICAqICAgIC0gRm9y IGRldmljZXMgd2hpY2ggaGF2ZSBWVERJT01NVUNvbnRleHQgaW5zdGFuY2VzLA0KPiA+ID4gPiAr ICAgICAqICAgICAgd2UgbG9vcCB0aGVtIGFuZCBjaGVjayBpZiBndWVzdCBwYXNpZCBlbnRyeSBl eGlzdHMuIElmIHllcywNCj4gPiA+ID4gKyAgICAgKiAgICAgIGl0IGlzIGNhc2UgYyksIHdlIHVw ZGF0ZSB0aGUgcGFzaWQgY2FjaGUgYW5kIGFsc28gbm90aWZ5DQo+ID4gPiA+ICsgICAgICogICAg ICBob3N0Lg0KPiA+ID4gPiArICAgICAqICAgIC0gRm9yIGRldmljZXMgd2hpY2ggaGF2ZSBubyBW VERJT01NVUNvbnRleHQNCj4gPiA+ID4gKyAgICAgKiAgICAgIGluc3RhbmNlcywgaXQgaXMgbm90 IG5lY2Vzc2FyeSB0byBjcmVhdGUgcGFzaWQgY2FjaGUgYXQNCj4gPiA+ID4gKyAgICAgKiAgICAg IHRoaXMgcGhhc2Ugc2luY2UgaXQgY291bGQgYmUgY3JlYXRlZCB3aGVuIHZJT01NVSBkbyBETUEN Cj4gPiA+ID4gKyAgICAgKiAgICAgIGFkZHJlc3MgdHJhbnNsYXRpb24uIFRoaXMgaXMgbm90IGlt cGxlbWVudGVkIHlldCBzaW5jZQ0KPiA+ID4gPiArICAgICAqICAgICAgbm8gUEFTSUQtY2FwYWJs ZSBlbXVsYXRlZCBkZXZpY2VzIHRvZGF5LiBJZiB3ZSBoYXZlIGl0DQo+ID4gPiA+ICsgICAgICog ICAgICBpbiBmdXR1cmUsIHRoZSBwYXNpZCBjYWNoZSBzaGFsbCBiZSBjcmVhdGVkIHRoZXJlLg0K PiA+ID4gPiArICAgICAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgdnRkX2lvbW11X2xvY2so cyk7DQo+ID4gPiA+ICsgICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVtb3ZlKHMtPnZ0ZF9wYXNp ZF9hcywNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnRkX2ZsdXNo X3Bhc2lkLCAmcGNfaW5mbyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBRTElTVF9GT1JFQUNI KHZ0ZF9pY3gsICZzLT52dGRfZGV2X2ljeF9saXN0LCBuZXh0KSB7DQo+ID4gPiA+ICsgICAgICAg IHZ0ZF9idXMgPSB2dGRfaWN4LT52dGRfYnVzOw0KPiA+ID4gPiArICAgICAgICBkZXZmbiA9IHZ0 ZF9pY3gtPmRldmZuOw0KPiA+ID4gPiArICAgICAgICBidXNfbiA9IHBjaV9idXNfbnVtKHZ0ZF9i dXMtPmJ1cyk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICAgLyogU3RlcCAxOiBmZXRjaCB2 dGRfcGFzaWRfYXMgYW5kIGNoZWNrIGlmIGl0IGlzIHZhbGlkICovDQo+ID4gPiA+ICsgICAgICAg IHZ0ZF9wYXNpZF9hcyA9IHZ0ZF9hZGRfZmluZF9wYXNpZF9hcyhzLCB2dGRfYnVzLA0KPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmZuLCBwYXNpZCwg dHJ1ZSk7DQo+ID4gPg0KPiA+ID4gSSBmZWVsIGxpa2UgeW91IHdhbnRlZCB0byBwYXNzICJmYWxz ZSIgaGVyZSBmb3IgImFsbG9jYXRlIi4NCj4gPg0KPiA+IGVtbW0sIHllYWguIEl0IHdhcyAiZmFs c2UiIGluIGRyYWZ0IGNvZGUgYXMgc3RlcCAxIGlzIG9ubHkgdG8gY2hlY2sgaWYNCj4gPiBhIHZh bGlkIHZ0ZF9wYXNpZF9hcyBleGlzdHMuIEFuZCBpbiBzdGVwIDMsIGl0IG5lZWRzIHRvIGNhbGwN Cj4gPiB2dGRfYWRkX2ZpbmRfcGFzaWRfYXMoKSB3aXRoICJhbGxvY2F0ZSIgYmUgInRydWUiLiBJ bg0KPiA+IHZ0ZF9hZGRfZmluZF9wYXNpZF9hcygpLCBpdCB3aWxsIHRyeSBzZWFyY2ggdnRkX3Bh c2lkX2FzIGZpcnN0IGFuZA0KPiA+IHRoZW4gYWxsb2NhdGUgYSBuZXcgb25lLiBJbiBzdWNoIGxv Z2ljLCB0aGVyZSB3aWxsIGJlIHR3bw0KPiA+IHZ0ZF9hZGRfZmluZF9wYXNpZF9hcygpIGNhbGxp ZyBhbmQgbWVhbnMgdHdvIGhhc2ggdGFibGUgc2VhcmNoaW5nLg0KPiA+DQo+ID4gU28gSSBtb2Zp ZmllZCBpdCB0byBiZSAidHJ1ZSIgdG8gc2F2ZSBhIHZ0ZF9hZGRfZmluZF9wYXNpZF9hcygpDQo+ ID4gY2FsbGluZy4gSWYgYSB2dGRfcGFzaWRfYXMgaXMgdmFsaWQsIGl0cyBwYXNpZF9jYWNoZV9n ZW4gd2lsbCBiZSBlcXVhbCB0byBzLQ0KPiA+cGFzaWRfY2FjaGVfZ2VuLg0KPiA+IElmIG5vdCwg dGhlIHZ0ZF9wYXNpZF9hcyBpcyBhIG5ld2x5IGFsbG9jYXRlZCBhbmQgbmVlZHMgdG8gZ28gdGhy b3VnaA0KPiA+IHN0ZXAgMiBhbmQgc3RlcCAzIHRvIGZ1bGZpbGwgaXQuIExvb2tzIGxpa2UgSSBt aXNzZWQgdG8gZnJlZSB0aGUNCj4gPiB2dGRfcGFzaWRfYXMgd2hlbiBzdGVwDQo+ID4gMiBmYWls ZWQuIFdpbGwgYWRkIGl0IGlmIHlvdSBhcmUgZmluZSB3aXRoIHRoZSBjdXJyZW50IGxvZ2ljLg0K PiANCj4gSSBzZWUuICBOb3RlIHRoYXQgdnRkX2FkZF9maW5kX3Bhc2lkX2FzKCkgaXMgZmFzdCBm b3Igbm8gYWxsb2NhdGlvbiwgYmVjYXVzZSBoYXNoDQo+IGxvb2t1cCBpcyBPKDEpLiAgSG93ZXZl ciBJIHRoaW5rIGN1cnJlbnQgYXBwcm9hY2ggaXMgb2ssIGJ1dCBpZiB3aXRoIHRoYXQsIHdlIGNh bg0KPiBhbHNvOg0KPiANCj4gLSBSZW1vdmUgdGhlIGFsbG9jYXRlIHBhcmFtZXRlciBmb3IgdnRk X2FkZF9maW5kX3Bhc2lkX2FzKCksIHNpbmNlIGl0J3MNCj4gICBhbHdheXMgdHJ1ZSBldmVuIGlu IGZ1dHVyZSBwYXRjaGVzIHNvIHVzZWxlc3MsDQoNCnJpZ2h0LiA6LSkNCg0KPiAtIFJlbW92ZSB0 aGUgdnRkX3Bhc2lkX2FzIGNoZWNrIHJpZ2h0IGJlbG93IGJlY2F1c2UgaXQncyBub3QgbmVlZGVk Lg0KPiANCj4gPg0KPiA+DQo+ID4gPiA+ICsgICAgICAgIGlmICh2dGRfcGFzaWRfYXMgJiYNCj4g ICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXg0KDQp5ZXMsIGl0IGlzLiBJbiBjdXJyZW50 IHNlcmllcyB2dGRfYWRkX2ZpbmRfcGFzaWRfYXMoKSBkb2VzbuKAmXQgY2hlY2sgdGhlDQpyZXN1 bHQgb2YgdnRkX3Bhc2lkX2FzIG1lbSBhbGxvY2F0aW9uLCBzbyBubyBuZWVkIHRvIGNoZWNrIHZ0 ZF9wYXNpZF9hcw0KaGVyZSBlaXRoZXIuIEhvd2V2ZXIsIGl0IG1pZ2h0IGJlIGJldHRlciB0byBj aGVjayB0aGUgYWxsb2NhdGlvbiByZXN1bHQNCm9yIGl0IHdpbGwgcmVzdWx0IGluIGlzc3VlIGlm IGFsbG9jYXRpb24gZmFpbGVkLiBXaGF0J3MgeW91ciBwcmVmZXJlbmNlDQpoZXJlPw0KDQo+ID4g PiA+ICsgICAgICAgICAgICAocy0+cGFzaWRfY2FjaGVfZ2VuID09DQo+ID4gPiA+ICsgICAgICAg ICAgICAgdnRkX3Bhc2lkX2FzLT5wYXNpZF9jYWNoZV9lbnRyeS5wYXNpZF9jYWNoZV9nZW4pKSB7 DQo+ID4gPiA+ICsgICAgICAgICAgICAvKg0KPiA+ID4gPiArICAgICAgICAgICAgICogcGFzaWRf Y2FjaGVfZ2VuIGVxdWFscyB0byBzLT5wYXNpZF9jYWNoZV9nZW4gbWVhbnMNCj4gPiA+ID4gKyAg ICAgICAgICAgICAqIHZ0ZF9wYXNpZF9hcyBpcyB2YWxpZCBhZnRlciB0aGUgYWJvdmUgcy0+dnRk X3Bhc2lkX2FzDQo+ID4gPiA+ICsgICAgICAgICAgICAgKiB1cGRhdGVzLiBUaHVzIG5vIG5lZWQg Zm9yIHRoZSBiZWxvdyBzdGVwcy4NCj4gPiA+ID4gKyAgICAgICAgICAgICAqLw0KPiA+ID4gPiAr ICAgICAgICAgICAgY29udGludWU7DQo+ID4gPiA+ICsgICAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ ID4gPiArICAgICAgICAvKg0KPiA+ID4gPiArICAgICAgICAgKiBTdGVwIDI6IHZ0ZF9wYXNpZF9h cyBpcyBub3QgdmFsaWQsIGl0J3MgcG90ZW50YWlsbHkgYQ0KPiA+ID4gPiArICAgICAgICAgKiBu ZXcgcGFzaWQgYmluZC4gRmV0Y2ggZ3Vlc3QgcGFzaWQgZW50cnkuDQo+ID4gPiA+ICsgICAgICAg ICAqLw0KPiA+ID4gPiArICAgICAgICBpZiAodnRkX2Rldl9nZXRfcGVfZnJvbV9wYXNpZChzLCBi dXNfbiwgZGV2Zm4sIHBhc2lkLCAmcGUpKSB7DQo+ID4gPiA+ICsgICAgICAgICAgICBjb250aW51 ZTsNCj4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgIC8qDQo+ ID4gPiA+ICsgICAgICAgICAqIFN0ZXAgMzogcGFzaWQgZW50cnkgZXhpc3RzLCB1cGRhdGUgcGFz aWQgY2FjaGUNCj4gPiA+ID4gKyAgICAgICAgICoNCj4gPiA+ID4gKyAgICAgICAgICogSGVyZSBu ZWVkIHRvIGNoZWNrIGRvbWFpbiBJRCBzaW5jZSBndWVzdCBwYXNpZCBlbnRyeQ0KPiA+ID4gPiAr ICAgICAgICAgKiBleGlzdHMuIFdoYXQgbmVlZHMgdG8gZG8gYXJlOg0KPiA+ID4gPiArICAgICAg ICAgKiAgIC0gdXBkYXRlIHRoZSBwY19lbnRyeSBpbiB0aGUgdnRkX3Bhc2lkX2FzDQo+ID4gPiA+ ICsgICAgICAgICAqICAgLSBzZXQgcHJvcGVyIHBjX2VudHJ5LnBhc2lkX2NhY2hlX2dlbg0KPiA+ ID4gPiArICAgICAgICAgKiAgIC0gcGFzcyBkb3duIHRoZSBsYXRlc3QgZ3Vlc3QgcGFzaWQgZW50 cnkgY29uZmlnIHRvIGhvc3QNCj4gPiA+ID4gKyAgICAgICAgICogICAgICh3aWxsIGJlIGFkZGVk IGluIGxhdGVyIHBhdGNoKQ0KPiA+ID4gPiArICAgICAgICAgKi8NCj4gPiA+ID4gKyAgICAgICAg aWYgKGRvbWFpbl9pZCA9PSB2dGRfcGVfZ2V0X2RvbWFpbl9pZCgmcGUpKSB7DQo+ID4gPiA+ICsg ICAgICAgICAgICB2dGRfZmlsbF9pbl9wZV9jYWNoZSh2dGRfcGFzaWRfYXMsICZwZSk7DQo+ID4g PiA+ICsgICAgICAgIH0NCj4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ICsgICAgdnRkX2lvbW11X3Vu bG9jayhzKTsNCj4gPiA+ID4gICAgICByZXR1cm4gMDsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4g PiA+ID4gKy8qKg0KPiA+ID4gPiArICogQ2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhv bGQgaW9tbXVfbG9jayAgKi8gc3RhdGljIHZvaWQNCj4gPiA+ID4gK3Z0ZF9wYXNpZF9jYWNoZV9y ZXNldChJbnRlbElPTU1VU3RhdGUgKnMpIHsNCj4gPiA+ID4gKyAgICBWVERQQVNJRENhY2hlSW5m byBwY19pbmZvOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgdHJhY2VfdnRkX3Bhc2lkX2NhY2hl X3Jlc2V0KCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICBwY19pbmZvLmZsYWdzID0gVlREX1BB U0lEX0NBQ0hFX0dMT0JBTDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ICsg ICAgICogUmVzZXQgcGFzaWQgY2FjaGUgaXMgYSBiaWcgaGFtbWVyLCBzbyB1c2UNCj4gPiA+ID4g KyAgICAgKiBnX2hhc2hfdGFibGVfZm9yZWFjaF9yZW1vdmUgd2hpY2ggd2lsbCBmcmVlDQo+ID4g PiA+ICsgICAgICogdGhlIHZ0ZF9wYXNpZF9hcyBpbnN0YW5jZXMuDQo+ID4gPiA+ICsgICAgICov DQo+ID4gPiA+ICsgICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVtb3ZlKHMtPnZ0ZF9wYXNpZF9h cywNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0ZF9mbHVzaF9wYXNpZCwg JnBjX2luZm8pOw0KPiA+ID4gPiArICAgIHMtPnBhc2lkX2NhY2hlX2dlbiA9IDE7DQo+ID4gPiA+ ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gIHN0YXRpYyBpbnQgdnRkX3Bhc2lkX2NhY2hlX2dzaShJ bnRlbElPTU1VU3RhdGUgKnMpICB7DQo+ID4gPiA+ICsgICAgdHJhY2VfdnRkX3Bhc2lkX2NhY2hl X2dzaSgpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgdnRkX2lvbW11X2xvY2socyk7DQo+ID4g PiA+ICsgICAgdnRkX3Bhc2lkX2NhY2hlX3Jlc2V0KHMpOw0KPiA+ID4NCj4gPiA+IFsxXQ0KPiA+ ID4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ICsgICAgICogVE9ETzogR2xv YmFsIFBBU0lEIGNhY2hlIGludmFsaWRhdGlvbiBtYXkgYmUNCj4gPiA+ID4gKyAgICAgKiBmbHVz aGVzIGFsbCB0aGUgcGFzaWQgY2FjaGVzLiBUbyBiZSBzYWZlLCBhZnRlcg0KPiA+ID4gPiArICAg ICAqIGludmFsaWRhdGluZyB0aGUgcGFzaWQgY2FjaGVzLCBlbXVsYXRvciBuZWVkcw0KPiA+ID4g PiArICAgICAqIHRvIHJlcGxheSB0aGUgcGFzaWQgYmluZGluZ3MgYnkgd2Fsa2luZyBndWVzdA0K PiA+ID4gPiArICAgICAqIHBhc2lkIGRpciBhbmQgcGFzaWQgdGFibGUuDQo+ID4gPiA+ICsgICAg ICovDQo+ID4gPiA+ICsgICAgdnRkX2lvbW11X3VubG9jayhzKTsNCj4gPiA+ID4gICAgICByZXR1 cm4gMDsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NClsuLi5dDQo+ID4gPiA+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2h3L2kzODYvaW50ZWxfaW9tbXUuaA0KPiA+ID4gPiBiL2luY2x1ZGUvaHcvaTM4Ni9p bnRlbF9pb21tdS5oIGluZGV4IDQxNTgxMTYuLjNjYzRiNzQgMTAwNjQ0DQo+ID4gPiA+IC0tLSBh L2luY2x1ZGUvaHcvaTM4Ni9pbnRlbF9pb21tdS5oDQo+ID4gPiA+ICsrKyBiL2luY2x1ZGUvaHcv aTM4Ni9pbnRlbF9pb21tdS5oDQo+ID4gPiA+IEBAIC02OSw2ICs2OSw4IEBAIHR5cGVkZWYgdW5p b24gVlREX0lSX01TSUFkZHJlc3MNCj4gPiA+ID4gVlREX0lSX01TSUFkZHJlc3M7ICB0eXBlZGVm IHN0cnVjdCBWVERQQVNJRERpckVudHJ5DQo+ID4gPiA+IFZURFBBU0lERGlyRW50cnk7ICB0eXBl ZGVmIHN0cnVjdCBWVERQQVNJREVudHJ5IFZURFBBU0lERW50cnk7DQo+ID4gPiA+IHR5cGVkZWYg c3RydWN0IFZURElPTU1VQ29udGV4dCBWVERJT01NVUNvbnRleHQ7DQo+ID4gPiA+ICt0eXBlZGVm IHN0cnVjdCBWVERQQVNJRENhY2hlRW50cnkgVlREUEFTSURDYWNoZUVudHJ5OyB0eXBlZGVmDQo+ ID4gPiA+ICtzdHJ1Y3QgVlREUEFTSURBZGRyZXNzU3BhY2UgVlREUEFTSURBZGRyZXNzU3BhY2U7 DQo+ID4gPiA+DQo+ID4gPiA+ICAvKiBDb250ZXh0LUVudHJ5ICovDQo+ID4gPiA+ICBzdHJ1Y3Qg VlREQ29udGV4dEVudHJ5IHsNCj4gPiA+ID4gQEAgLTEwMSw2ICsxMDMsMzEgQEAgc3RydWN0IFZU RFBBU0lERW50cnkgew0KPiA+ID4gPiAgICAgIHVpbnQ2NF90IHZhbFs4XTsNCj4gPiA+ID4gIH07 DQo+ID4gPiA+DQo+ID4gPiA+ICtzdHJ1Y3QgcGFzaWRfa2V5IHsNCj4gPiA+ID4gKyAgICB1aW50 MzJfdCBwYXNpZDsNCj4gPiA+ID4gKyAgICB1aW50MTZfdCBzaWQ7DQo+ID4gPiA+ICt9Ow0KPiA+ ID4gPiArDQo+ID4gPiA+ICtzdHJ1Y3QgVlREUEFTSURDYWNoZUVudHJ5IHsNCj4gPiA+ID4gKyAg ICAvKg0KPiA+ID4gPiArICAgICAqIFRoZSBjYWNoZSBlbnRyeSBpcyBvYnNvbGV0ZSBpZg0KPiA+ ID4gPiArICAgICAqIHBhc2lkX2NhY2hlX2dlbiE9SW50ZWxJT01NVVN0YXRlLnBhc2lkX2NhY2hl X2dlbg0KPiA+ID4gPiArICAgICAqLw0KPiA+ID4gPiArICAgIHVpbnQzMl90IHBhc2lkX2NhY2hl X2dlbjsNCj4gPiA+ID4gKyAgICBzdHJ1Y3QgVlREUEFTSURFbnRyeSBwYXNpZF9lbnRyeTsgfTsN Cj4gPiA+ID4gKw0KPiA+ID4gPiArc3RydWN0IFZURFBBU0lEQWRkcmVzc1NwYWNlIHsNCj4gPiA+ ID4gKyAgICBWVERCdXMgKnZ0ZF9idXM7DQo+ID4gPiA+ICsgICAgdWludDhfdCBkZXZmbjsNCj4g PiA+ID4gKyAgICBBZGRyZXNzU3BhY2UgYXM7DQo+ID4gPiA+ICsgICAgdWludDMyX3QgcGFzaWQ7 DQo+ID4gPiA+ICsgICAgSW50ZWxJT01NVVN0YXRlICppb21tdV9zdGF0ZTsNCj4gPiA+ID4gKyAg ICBWVERDb250ZXh0Q2FjaGVFbnRyeSBjb250ZXh0X2NhY2hlX2VudHJ5Ow0KPiA+ID4gPiArICAg IFFMSVNUX0VOVFJZKFZURFBBU0lEQWRkcmVzc1NwYWNlKSBuZXh0Ow0KPiA+ID4gPiArICAgIFZU RFBBU0lEQ2FjaGVFbnRyeSBwYXNpZF9jYWNoZV9lbnRyeTsNCj4gPiA+DQo+ID4gPiBJbiB2dGRf cGFzaWRfY2FjaGVfZ3NpKCkgWzFdLCB5b3UgZGlyZWN0bHkgcmVzZXQgcGFzaWRfY2FjaGVfZ2Vu IGZvcg0KPiA+ID4gZWFjaCBwYXNpZCBhZGRyZXNzIHNwYWNlLiAgWW91IG5ldmVyIGluY3JlYXNl DQo+ID4gPiBwYXNpZF9jYWNoZV9lbnRyeS5wYXNpZF9jYWNoZV9nZW4uICBUaGVuIElJVUMgdGhl IGdlbiB3aWxsIGFsd2F5cyBiZQ0KPiA+ID4gZWl0aGVyIDAgb3IgMS4gIEFuZC4uLg0KPiA+ID4N Cj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gIHN0cnVjdCBWVERBZGRyZXNzU3BhY2Ug ew0KPiA+ID4gPiAgICAgIFBDSUJ1cyAqYnVzOw0KPiA+ID4gPiAgICAgIHVpbnQ4X3QgZGV2Zm47 DQo+ID4gPiA+IEBAIC0xMjIsNiArMTQ5LDcgQEAgc3RydWN0IFZURElPTU1VQ29udGV4dCB7DQo+ ID4gPiA+ICAgICAgdWludDhfdCBkZXZmbjsNCj4gPiA+ID4gICAgICBJT01NVUNvbnRleHQgaW9t bXVfY29udGV4dDsNCj4gPiA+ID4gICAgICBEdWFsU3RhZ2VJT01NVU9iamVjdCAqZHNpX29iajsN Cj4gPiA+ID4gKyAgICBRTElTVF9FTlRSWShWVERJT01NVUNvbnRleHQpIG5leHQ7DQo+ID4gPiA+ ICAgICAgSW50ZWxJT01NVVN0YXRlICppb21tdV9zdGF0ZTsgIH07DQo+ID4gPiA+DQo+ID4gPiA+ IEBAIC0yNzIsOSArMzAwLDE0IEBAIHN0cnVjdCBJbnRlbElPTU1VU3RhdGUgew0KPiA+ID4gPg0K PiA+ID4gPiAgICAgIEdIYXNoVGFibGUgKnZ0ZF9hc19ieV9idXNwdHI7ICAgLyogVlREQnVzIG9i amVjdHMgaW5kZXhlZCBieSBQQ0lCdXMqDQo+ID4gPiByZWZlcmVuY2UgKi8NCj4gPiA+ID4gICAg ICBWVERCdXMgKnZ0ZF9hc19ieV9idXNfbnVtW1ZURF9QQ0lfQlVTX01BWF07IC8qIFZUREJ1cyBv YmplY3RzDQo+ID4gPiBpbmRleGVkIGJ5IGJ1cyBudW1iZXIgKi8NCj4gPiA+ID4gKyAgICBHSGFz aFRhYmxlICp2dGRfcGFzaWRfYXM7ICAgLyogVlREUEFTSURBZGRyZXNzU3BhY2UgaW5zdGFuY2Vz ICovDQo+ID4gPiA+ICsgICAgdWludDMyX3QgcGFzaWRfY2FjaGVfZ2VuOyAgIC8qIFNob3VsZCBi ZSBpbiBbMSxNQVhdICovDQo+ID4gPg0KPiA+ID4gLi4uIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSAx Lg0KPiA+ID4gSUlVQyB5b3UgY2FuIGRyb3AgYm90aCBvZiB0aGUgcGFzaWRfY2FjaGVfZ2VuLCBi ZWNhdXNlIGluIHRoaXMgd2hvbGUNCj4gPiA+IHBhdGNoc2V0IHlvdSdsbCByZW1vdmUgdGhlIHBh c2lkIGhhc2ggZW50cnkgd2hlbiBpdCBpcyBpbnZhbGlkYXRlZCwNCj4gPiA+IHJpZ2h0PyAgVGhl biBpZiB0aGUgaGFzaCBlbnRyeSBpcyB0aGVyZSwgaXQgbXVzdCBiZSB2YWxpZC4gIFdoZW4NCj4g PiA+IGl0J3Mgb3V0LWRhdGVkLCBpdCdsbCBiZSByZW1vdmVkIGZyb20gdGhlIGhhc2guDQo+ID4N Cj4gPiBPaCwgeWVzIGl0IGlzLiBIb3dldmVyLCBpdCdzIG5vdCBteSBpbnRldGlvbi4gSSdkIGxp a2UgdG8gbGV0IFsxXSB0bw0KPiA+IGluY3JlYXNlIHRoZSBzLT5wYXNpZF9jYWNoZV9nZW4gaW5z dGVhZCBvZiBqdXN0aW5nIHplcm8gaXQuIEkgdGhpbmsgaXQNCj4gPiB3aWxsIHNhdmUgc29tZSB0 aW1lIGFzIGxvb3AgaGFzaCB0YWJsZSB0YWtlcyB0aW1lLiBUaGFua3MgZm9yIGNhdGNoaW5nDQo+ ID4gaXQuIDotKQ0KPiANCj4gT0sgdGhhdCdzIGZpbmUgdG9vLiAgVGhlbiByZW1lbWJlciB0byBj b25kaXRpb25hbGx5IHJlc2V0IGl0Og0KPiANCj4gc3RhdGljIGludCB2dGRfcGFzaWRfY2FjaGVf Z3NpKEludGVsSU9NTVVTdGF0ZSAqcykgew0KPiAgICAgdHJhY2VfdnRkX3Bhc2lkX2NhY2hlX2dz aSgpOw0KPiANCj4gICAgIHZ0ZF9pb21tdV9sb2NrKHMpOw0KPiAgICAgcy0+cGFzaWRfY2FjaGVf Z2VuKys7DQo+ICAgICBpZiAocy0+cGFzaWRfY2FjaGVfZ2VuID49IFRIUkVTSE9MRCkgew0KPiAg ICAgICAgIHZ0ZF9wYXNpZF9jYWNoZV9yZXNldChzKTsNCj4gICAgIH0NCj4gICAgIHZ0ZF9pb21t dV91bmxvY2socyk7DQo+IA0KPiAgICAgcmV0dXJuIDA7DQo+IH0NCg0KdGhhbmtzIGZvciB0aGUg cHNldWRvIGNvZGUuIDotKQ0KDQpSZWdhcmRzLA0KWWkgTGl1DQoNCg==