Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp331816ybb; Fri, 27 Mar 2020 23:42:58 -0700 (PDT) X-Google-Smtp-Source: ADFU+vsUo+SShvG7B8dOdXrNtjY5ovpp/V8VVPA8cmO1e6LIfi8xp9xJ6W5Whj12y90RoomEduuN X-Received: by 2002:aca:a9d4:: with SMTP id s203mr1725788oie.106.1585377777482; Fri, 27 Mar 2020 23:42:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585377777; cv=none; d=google.com; s=arc-20160816; b=doef9aIkIV1YwmLxYaYlBpS8jV9dEitB4eAYfVkIEkzJaWNq0AZJa0kBdN23fbE+5J LS9MlLxovHdgqL/iiZfYohPZ9cNHIwJ+N5LmR6ScuLU8EXfg1D2nqmPNtwdJ50EliY6y oT5u7ReFQnNMB60Xcu4efZ4TFaylbLiwVEkEsAHfzwGED+MlpAjoRzLaKSqH8TIXEWuE zKiyx35ltudVq4bgfa4ffM3GrHvgt9yDcQAh+mk+1qMFkPI5eNNYAlhCaQJ/JH56sm0F AQz/cfYdwSkWz+yaCzcD+PvtlGoCOWmHkBwjsIPvNzaukkEfuV8E6Yn5Xf1N6Xx0U4tN ebbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :dlp-reaction:dlp-version:dlp-product:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:ironport-sdr:ironport-sdr; bh=zyxoGHeoVZuUXd15+aTwDOtWveL/mG0TqyzHFzFEtxM=; b=MNMpOl7RA6R+egbVDbi2904QwGe+crBn/EvTWkQgmbUGoOXefvwl/LxryauH8gkShI b2R/K8C+YWKsW5oZmfXk03v++qtsvT4oyBOUNbE4lTDByGZJrTW3UP5e7JI0Mx5/0taJ aKsIcPKq1WXri1tErfAg6StFVRvD9DGdtg6MFnpylhUDkwzM0PoU+A1p4QWL4RG06nrv erNWfvLSW9Qw31pdY7QnlgBpC9y6eMH8ZGN8ej7Gz31MItRfyoIwFaXN5JFm+kLmk213 ZNb5tkkVFc69Gitw8eC+r7NOT/O+Na2+wl7L/wmVojMdLVeoOVETskUPI1ODqq/q5ADs Ua2A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z5si3634613otm.267.2020.03.27.23.42.44; Fri, 27 Mar 2020 23:42:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726170AbgC1GlE (ORCPT + 99 others); Sat, 28 Mar 2020 02:41:04 -0400 Received: from mga17.intel.com ([192.55.52.151]:33527 "EHLO mga17.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725845AbgC1GlD (ORCPT ); Sat, 28 Mar 2020 02:41:03 -0400 IronPort-SDR: xQqtQ7QVfmhnGfYr/PoRyJKlW3YvlXBajHUPZeuEpA09xa7JSByvfg76sIdF3BtCBtqPaa9uJr 3wXg5xUU3wcg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Mar 2020 23:41:02 -0700 IronPort-SDR: ANw1M+b8uRaCFqRtoF7+8jRdTzH2ErVYkwc/4IBMjj3fWhBNo7LVkNsipKNjEsywRF260qEMmI LtSk3zK4nkxg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,315,1580803200"; d="scan'208";a="236850149" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga007.jf.intel.com with ESMTP; 27 Mar 2020 23:41:01 -0700 Received: from fmsmsx155.amr.corp.intel.com (10.18.116.71) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 27 Mar 2020 23:41:01 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by FMSMSX155.amr.corp.intel.com (10.18.116.71) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 27 Mar 2020 23:41:00 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.225]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.129]) with mapi id 14.03.0439.000; Sat, 28 Mar 2020 14:40:58 +0800 From: "Tian, Kevin" To: Jacob Pan CC: Joerg Roedel , Alex Williamson , Lu Baolu , "iommu@lists.linux-foundation.org" , LKML , David Woodhouse , Jean-Philippe Brucker , "Liu, Yi L" , "Raj, Ashok" , Christoph Hellwig , Jonathan Cameron , Eric Auger Subject: RE: [PATCH 06/10] iommu/ioasid: Convert to set aware allocations Thread-Topic: [PATCH 06/10] iommu/ioasid: Convert to set aware allocations Thread-Index: AQHWAs3PpkJj4s2MkUShV+sjRp6tC6hcMlSA////3gCAAV4EQA== Date: Sat, 28 Mar 2020 06:40:58 +0000 Message-ID: References: <1585158931-1825-1-git-send-email-jacob.jun.pan@linux.intel.com> <1585158931-1825-7-git-send-email-jacob.jun.pan@linux.intel.com> <20200327104134.5cf18a5d@jacob-builder> In-Reply-To: <20200327104134.5cf18a5d@jacob-builder> 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-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBGcm9tOiBKYWNvYiBQYW4gPGphY29iLmp1bi5wYW5AbGludXguaW50ZWwuY29tPg0KPiBTZW50 OiBTYXR1cmRheSwgTWFyY2ggMjgsIDIwMjAgMTo0MiBBTQ0KPiANCj4gT24gRnJpLCAyNyBNYXIg MjAyMCAwOTo1NDoxMSArMDAwMA0KPiAiVGlhbiwgS2V2aW4iIDxrZXZpbi50aWFuQGludGVsLmNv bT4gd3JvdGU6DQo+IA0KPiA+ID4gRnJvbTogSmFjb2IgUGFuIDxqYWNvYi5qdW4ucGFuQGxpbnV4 LmludGVsLmNvbT4NCj4gPiA+IFNlbnQ6IFRodXJzZGF5LCBNYXJjaCAyNiwgMjAyMCAxOjU1IEFN DQo+ID4gPg0KPiA+ID4gVGhlIGN1cnJlbnQgaW9hc2lkX2FsbG9jIGZ1bmN0aW9uIHRha2VzIGEg dG9rZW4vaW9hc2lkX3NldCB0aGVuDQo+ID4gPiByZWNvcmQgaXQgb24gdGhlIElPQVNJRCBiZWlu ZyBhbGxvY2F0ZWQuIFRoZXJlIGlzIG5vIGFsbG9jL2ZyZWUgb24NCj4gPiA+IHRoZSBpb2FzaWRf c2V0Lg0KPiA+ID4NCj4gPiA+IFdpdGggdGhlIElPQVNJRCBzZXQgQVBJcywgY2FsbGVycyBtdXN0 IGFsbG9jYXRlIGFuIGlvYXNpZF9zZXQgYmVmb3JlDQo+ID4gPiBhbGxvY2F0ZSBJT0FTSURzIHdp dGhpbiB0aGUgc2V0LiBRdW90YSBhbmQgb3RoZXIgaW9hc2lkX3NldCBsZXZlbA0KPiA+ID4gYWN0 aXZpdGllcyBjYW4gdGhlbiBiZSBlbmZvcmNlZC4NCj4gPiA+DQo+ID4gPiBUaGlzIHBhdGNoIGNv bnZlcnRzIGV4aXN0aW5nIEFQSSB0byB0aGUgbmV3IGlvYXNpZF9zZXQgbW9kZWwuDQo+ID4gPg0K PiA+ID4gU2lnbmVkLW9mZi1ieTogTGl1IFlpIEwgPHlpLmwubGl1QGludGVsLmNvbT4NCj4gPiA+ IFNpZ25lZC1vZmYtYnk6IEphY29iIFBhbiA8amFjb2IuanVuLnBhbkBsaW51eC5pbnRlbC5jb20+ DQo+ID4gPiAtLS0NCj4gPiA+ICBkcml2ZXJzL2lvbW11L2ludGVsLWlvbW11LmMgfCAxMCArKyst LS0NCj4gPiA+ICBkcml2ZXJzL2lvbW11L2ludGVsLXN2bS5jICAgfCAxMCArKystLS0NCj4gPiA+ ICBkcml2ZXJzL2lvbW11L2lvYXNpZC5jICAgICAgfCA3OA0KPiA+ID4gKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLSAtLS0tLQ0KPiA+ID4gIGluY2x1ZGUvbGludXgvaW9h c2lkLmggICAgICB8IDExICsrKy0tLS0NCj4gPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDcyIGluc2Vy dGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQ0KPiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2lvbW11L2ludGVsLWlvbW11LmMNCj4gPiA+IGIvZHJpdmVycy9pb21tdS9pbnRlbC1pb21t dS5jIGluZGV4IGFmN2ExZWY3YjMxZS4uYzU3MWNjOGQ5ZTU3DQo+ID4gPiAxMDA2NDQgLS0tIGEv ZHJpdmVycy9pb21tdS9pbnRlbC1pb21tdS5jDQo+ID4gPiArKysgYi9kcml2ZXJzL2lvbW11L2lu dGVsLWlvbW11LmMNCj4gPiA+IEBAIC0zMzIzLDExICszMzIzLDExIEBAIHN0YXRpYyB2b2lkIGlu dGVsX2lvYXNpZF9mcmVlKGlvYXNpZF90DQo+ID4gPiBpb2FzaWQsIHZvaWQgKmRhdGEpDQo+ID4g PiAgCWlmICghaW9tbXUpDQo+ID4gPiAgCQlyZXR1cm47DQo+ID4gPiAgCS8qDQo+ID4gPiAtCSAq IFNhbml0eSBjaGVjayB0aGUgaW9hc2lkIG93bmVyIGlzIGRvbmUgYXQgdXBwZXIgbGF5ZXIsDQo+ ID4gPiBlLmcuIFZGSU8NCj4gPiA+IC0JICogV2UgY2FuIG9ubHkgZnJlZSB0aGUgUEFTSUQgd2hl biBhbGwgdGhlIGRldmljZXMgYXJlDQo+ID4gPiB1bmJvdW5kLg0KPiA+ID4gKwkgKiBJbiB0aGUg Z3Vlc3QsIGFsbCBJT0FTSURzIGJlbG9uZyB0byB0aGUgc3lzdGVtX2lvYXNpZA0KPiA+ID4gc2V0 Lg0KPiA+ID4gKwkgKiBTYW5pdHkgY2hlY2sgYWdhaW5zdCB0aGUgc3lzdGVtIHNldC4NCj4gPg0K PiA+IGJlbG93IGNvZGUgaGFzIG5vdGhpbmcgdG8gZGVhbCB3aXRoIGd1ZXN0LCB0aGVuIHdoeSBw dXR0aW5nIHRoZQ0KPiA+IGNvbW1lbnQgc3BlY2lmaWNhbGx5IGZvciBndWVzdD8NCj4gPg0KPiBp bnRlbF9pb2FzaWRfYWxsb2MvZnJlZSgpIGlzIHRoZSBjdXN0b20gSU9BU0lEIGFsbG9jYXRvciBv bmx5DQo+IHJlZ2lzdGVyZWQgd2hlbiBydW5uaW5nIGluIHRoZSBndWVzdC4NCg0KaW4gdGhhdCBj YXNlIG1heSBiZSByZW5hbWUgdGhlIGZ1bmN0aW9ucyB0byBpbnRlbF9ndWVzdF9pb2FzaWRfYWxs b2MvZnJlZQ0Kd291bGQgYXZvaWQgc2ltaWxhciBjb25mdXNpb24gYXMgSSBoYWQ/DQoNCj4gDQo+ IFRoZSBjdXN0b20gYWxsb2NhdG9yIGNhbGxzIHZpcnR1YWwgY29tbWFuZC4gU2luY2Ugd2UgZG9u J3Qgc3VwcG9ydA0KPiBuZXN0ZWQgZ3Vlc3QsIGFsbCBJT0FTSURzIGJlbG9uZyB0byB0aGUgc3lz dGVtIGlvYXNpZF9zZXQuDQoNCmNvdWxkIHlvdSBwdXQgbm8gc3VwcG9ydCBvZiBuZXN0ZWQgZ3Vl c3QgaW4gdGhlIGNvbW1lbnQsIHNvIGxhdGVyDQp3aGVuIHBlb3BsZSB3YW50IHRvIGFkZCBuZXN0 ZWQgc3VwcG9ydCB0aGV5IHdpbGwga25vdyBzb21lDQphZGRpdGlvbmFsIHdvcmsgcmVxdWlyZWQg aGVyZT8NCg0KPiANCj4gPiA+ICAJICovDQo+ID4gPiAtCWlmIChpb2FzaWRfZmluZChOVUxMLCBp b2FzaWQsIE5VTEwpKSB7DQo+ID4gPiAtCQlwcl9hbGVydCgiQ2Fubm90IGZyZWUgYWN0aXZlIElP QVNJRCAlZFxuIiwgaW9hc2lkKTsNCj4gPiA+ICsJaWYgKElTX0VSUihpb2FzaWRfZmluZChzeXN0 ZW1faW9hc2lkX3NpZCwgaW9hc2lkLCBOVUxMKSkpIHsNCj4gPiA+ICsJCXByX2VycigiQ2Fubm90 IGZyZWUgSU9BU0lEICVkLCBub3QgaW4gc3lzdGVtDQo+ID4gPiBzZXRcbiIsIGlvYXNpZCk7IHJl dHVybjsNCj4gPiA+ICAJfQ0KPiA+ID4gIAl2Y21kX2ZyZWVfcGFzaWQoaW9tbXUsIGlvYXNpZCk7 DQo+ID4gPiBAQCAtNTU0MSw3ICs1NTQxLDcgQEAgc3RhdGljIGludCBhdXhfZG9tYWluX2FkZF9k ZXYoc3RydWN0DQo+ID4gPiBkbWFyX2RvbWFpbiAqZG9tYWluLA0KPiA+ID4gIAkJaW50IHBhc2lk Ow0KPiA+ID4NCj4gPiA+ICAJCS8qIE5vIHByaXZhdGUgZGF0YSBuZWVkZWQgZm9yIHRoZSBkZWZh dWx0IHBhc2lkICovDQo+ID4gPiAtCQlwYXNpZCA9IGlvYXNpZF9hbGxvYyhOVUxMLCBQQVNJRF9N SU4sDQo+ID4gPiArCQlwYXNpZCA9IGlvYXNpZF9hbGxvYyhzeXN0ZW1faW9hc2lkX3NpZCwgUEFT SURfTUlOLA0KPiA+ID4gIAkJCQkgICAgIHBjaV9tYXhfcGFzaWRzKHRvX3BjaV9kZXYoZGV2KSkN Cj4gPiA+IC0gMSwgTlVMTCk7DQo+ID4gPiAgCQlpZiAocGFzaWQgPT0gSU5WQUxJRF9JT0FTSUQp IHsNCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2ludGVsLXN2bS5jIGIvZHJpdmVy cy9pb21tdS9pbnRlbC1zdm0uYw0KPiA+ID4gaW5kZXggMTk5MTU4N2ZkM2ZkLi5mNTExODU1ZDE4 N2IgMTAwNjQ0DQo+ID4gPiAtLS0gYS9kcml2ZXJzL2lvbW11L2ludGVsLXN2bS5jDQo+ID4gPiAr KysgYi9kcml2ZXJzL2lvbW11L2ludGVsLXN2bS5jDQo+ID4gPiBAQCAtMjY4LDcgKzI2OCw3IEBA IGludCBpbnRlbF9zdm1fYmluZF9ncGFzaWQoc3RydWN0IGlvbW11X2RvbWFpbg0KPiA+ID4gKmRv bWFpbiwNCj4gPiA+ICAJfQ0KPiA+ID4NCj4gPiA+ICAJbXV0ZXhfbG9jaygmcGFzaWRfbXV0ZXgp Ow0KPiA+ID4gLQlzdm0gPSBpb2FzaWRfZmluZChOVUxMLCBkYXRhLT5ocGFzaWQsIE5VTEwpOw0K PiA+ID4gKwlzdm0gPSBpb2FzaWRfZmluZChJTlZBTElEX0lPQVNJRF9TRVQsIGRhdGEtPmhwYXNp ZCwgTlVMTCk7DQo+ID4gPiAgCWlmIChJU19FUlIoc3ZtKSkgew0KPiA+ID4gIAkJcmV0ID0gUFRS X0VSUihzdm0pOw0KPiA+ID4gIAkJZ290byBvdXQ7DQo+ID4gPiBAQCAtNDAxLDcgKzQwMSw3IEBA IGludCBpbnRlbF9zdm1fdW5iaW5kX2dwYXNpZChzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gPiBp bnQgcGFzaWQpDQo+ID4gPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+DQo+ID4gPiAgCW11dGV4 X2xvY2soJnBhc2lkX211dGV4KTsNCj4gPiA+IC0Jc3ZtID0gaW9hc2lkX2ZpbmQoTlVMTCwgcGFz aWQsIE5VTEwpOw0KPiA+ID4gKwlzdm0gPSBpb2FzaWRfZmluZChJTlZBTElEX0lPQVNJRF9TRVQs IHBhc2lkLCBOVUxMKTsNCj4gPiA+ICAJaWYgKCFzdm0pIHsNCj4gPiA+ICAJCXJldCA9IC1FSU5W QUw7DQo+ID4gPiAgCQlnb3RvIG91dDsNCj4gPiA+IEBAIC01NTksNyArNTU5LDcgQEAgc3RhdGlj IGludCBpbnRlbF9zdm1fYmluZF9tbShzdHJ1Y3QgZGV2aWNlDQo+ID4gPiAqZGV2LCBpbnQgZmxh Z3MsIHN0cnVjdCBzdm1fZGV2X29wcyAqDQo+ID4gPiAgCQkJcGFzaWRfbWF4ID0gaW50ZWxfcGFz aWRfbWF4X2lkOw0KPiA+ID4NCj4gPiA+ICAJCS8qIERvIG5vdCB1c2UgUEFTSUQgMCwgcmVzZXJ2 ZWQgZm9yIFJJRCB0byBQQVNJRCAqLw0KPiA+ID4gLQkJc3ZtLT5wYXNpZCA9IGlvYXNpZF9hbGxv YyhOVUxMLCBQQVNJRF9NSU4sDQo+ID4gPiArCQlzdm0tPnBhc2lkID0gaW9hc2lkX2FsbG9jKHN5 c3RlbV9pb2FzaWRfc2lkLA0KPiA+ID4gUEFTSURfTUlOLCBwYXNpZF9tYXggLSAxLCBzdm0pOw0K PiA+ID4gIAkJaWYgKHN2bS0+cGFzaWQgPT0gSU5WQUxJRF9JT0FTSUQpIHsNCj4gPiA+ICAJCQlr ZnJlZShzdm0pOw0KPiA+ID4gQEAgLTY0Miw3ICs2NDIsNyBAQCBpbnQgaW50ZWxfc3ZtX3VuYmlu ZF9tbShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludA0KPiA+ID4gcGFzaWQpDQo+ID4gPiAgCWlmICgh aW9tbXUpDQo+ID4gPiAgCQlnb3RvIG91dDsNCj4gPiA+DQo+ID4gPiAtCXN2bSA9IGlvYXNpZF9m aW5kKE5VTEwsIHBhc2lkLCBOVUxMKTsNCj4gPiA+ICsJc3ZtID0gaW9hc2lkX2ZpbmQoc3lzdGVt X2lvYXNpZF9zaWQsIHBhc2lkLCBOVUxMKTsNCj4gPiA+ICAJaWYgKCFzdm0pDQo+ID4gPiAgCQln b3RvIG91dDsNCj4gPiA+DQo+ID4gPiBAQCAtNzc4LDcgKzc3OCw3IEBAIHN0YXRpYyBpcnFyZXR1 cm5fdCBwcnFfZXZlbnRfdGhyZWFkKGludCBpcnEsDQo+ID4gPiB2b2lkICpkKQ0KPiA+ID4NCj4g PiA+ICAJCWlmICghc3ZtIHx8IHN2bS0+cGFzaWQgIT0gcmVxLT5wYXNpZCkgew0KPiA+ID4gIAkJ CXJjdV9yZWFkX2xvY2soKTsNCj4gPiA+IC0JCQlzdm0gPSBpb2FzaWRfZmluZChOVUxMLCByZXEt PnBhc2lkLCBOVUxMKTsNCj4gPiA+ICsJCQlzdm0gPSBpb2FzaWRfZmluZChJTlZBTElEX0lPQVNJ RF9TRVQsDQo+ID4gPiByZXEtPnBhc2lkLCBOVUxMKTsNCj4gPg0KPiA+IGlzIHRoZXJlIGEgY3Jp dGVyaWEgd2hlbiBJTlZBTElEX0lPQVNJRF9TRVQgc2hvdWxkIGJlIHVzZWQ/DQo+ID4NCj4gVHdv IHVzZSBjYXNlcyBmb3IgSU5WQUxJRF9JT0FTSURfU0VUOg0KPiAxLiBhIGhpbnQgdG8gaW9hc2lk X2ZpbmQgdG8gZG8gZ2xvYmFsIHNlYXJjaCwgaWdub3JlIHNldCBvd25lcnNoaXAgY2hlY2sNCj4g Mi4gY2Fubm90IGZpbmQgYSBzZXQgSUQgZm9yIGEgZ2l2ZW4gaW9hc2lkX2ZpbmRfc2lkKCkNCj4g DQo+IFlvdSBicm91Z2h0IHVwIGEgZ29vZCBwb2ludCwgSSBtaXNzZWQgdGhlIHNlY29uZCB1c2Ug Y2FzZS4NCj4gDQo+IA0KPiA+ID4gIAkJCS8qIEl0ICpjYW4ndCogZ28gYXdheSwgYmVjYXVzZSB0 aGUgZHJpdmVyDQo+ID4gPiBpcyBub3QgcGVybWl0dGVkDQo+ID4gPiAgCQkJICogdG8gdW5iaW5k IHRoZSBtbSB3aGlsZSBhbnkgcGFnZSBmYXVsdHMNCj4gPiA+IGFyZSBvdXRzdGFuZGluZy4NCj4g PiA+ICAJCQkgKiBTbyB3ZSBvbmx5IG5lZWQgUkNVIHRvIHByb3RlY3QgdGhlDQo+ID4gPiBpbnRl cm5hbCBpZHIgY29kZS4gKi8NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lvYXNp ZC5jIGIvZHJpdmVycy9pb21tdS9pb2FzaWQuYw0KPiA+ID4gaW5kZXggOTEzNWFmMTcxYTdjLi5m ODlhNTk1ZjY5NzggMTAwNjQ0DQo+ID4gPiAtLS0gYS9kcml2ZXJzL2lvbW11L2lvYXNpZC5jDQo+ ID4gPiArKysgYi9kcml2ZXJzL2lvbW11L2lvYXNpZC5jDQo+ID4gPiBAQCAtMzEsNyArMzEsNyBA QCBzdHJ1Y3QgaW9hc2lkX3NldF9kYXRhIHsNCj4gPiA+DQo+ID4gPiAgc3RydWN0IGlvYXNpZF9k YXRhIHsNCj4gPiA+ICAJaW9hc2lkX3QgaWQ7DQo+ID4gPiAtCXN0cnVjdCBpb2FzaWRfc2V0ICpz ZXQ7DQo+ID4gPiArCXN0cnVjdCBpb2FzaWRfc2V0X2RhdGEgKnNkYXRhOw0KPiA+ID4gIAl2b2lk ICpwcml2YXRlOw0KPiA+ID4gIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1Ow0KPiA+ID4gIH07DQo+ID4g PiBAQCAtMzM0LDcgKzMzNCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGlvYXNpZF9hdHRhY2hfZGF0 YSk7DQo+ID4gPg0KPiA+ID4gIC8qKg0KPiA+ID4gICAqIGlvYXNpZF9hbGxvYyAtIEFsbG9jYXRl IGFuIElPQVNJRA0KPiA+ID4gLSAqIEBzZXQ6IHRoZSBJT0FTSUQgc2V0DQo+ID4gPiArICogQHNp ZDogdGhlIElPQVNJRCBzZXQgSUQNCj4gPiA+ICAgKiBAbWluOiB0aGUgbWluaW11bSBJRCAoaW5j bHVzaXZlKQ0KPiA+ID4gICAqIEBtYXg6IHRoZSBtYXhpbXVtIElEIChpbmNsdXNpdmUpDQo+ID4g PiAgICogQHByaXZhdGU6IGRhdGEgcHJpdmF0ZSB0byB0aGUgY2FsbGVyDQo+ID4gPiBAQCAtMzQ0 LDE4ICszNDQsMzAgQEAgRVhQT1JUX1NZTUJPTF9HUEwoaW9hc2lkX2F0dGFjaF9kYXRhKTsNCj4g PiA+ICAgKg0KPiA+ID4gICAqIFJldHVybjogdGhlIGFsbG9jYXRlZCBJRCBvbiBzdWNjZXNzLCBv ciAlSU5WQUxJRF9JT0FTSUQgb24NCj4gPiA+IGZhaWx1cmUuICovDQo+ID4gPiAtaW9hc2lkX3Qg aW9hc2lkX2FsbG9jKHN0cnVjdCBpb2FzaWRfc2V0ICpzZXQsIGlvYXNpZF90IG1pbiwNCj4gPiA+ IGlvYXNpZF90IG1heCwNCj4gPiA+IC0JCSAgICAgIHZvaWQgKnByaXZhdGUpDQo+ID4gPiAraW9h c2lkX3QgaW9hc2lkX2FsbG9jKGludCBzaWQsIGlvYXNpZF90IG1pbiwgaW9hc2lkX3QgbWF4LCB2 b2lkDQo+ID4gPiAqcHJpdmF0ZSkgew0KPiA+ID4gKwlzdHJ1Y3QgaW9hc2lkX3NldF9kYXRhICpz ZGF0YTsNCj4gPiA+ICAJc3RydWN0IGlvYXNpZF9kYXRhICpkYXRhOw0KPiA+ID4gIAl2b2lkICph ZGF0YTsNCj4gPiA+ICAJaW9hc2lkX3QgaWQ7DQo+ID4gPg0KPiA+ID4gLQlkYXRhID0ga3phbGxv YyhzaXplb2YoKmRhdGEpLCBHRlBfQVRPTUlDKTsNCj4gPiA+ICsJLyogQ2hlY2sgaWYgdGhlIElP QVNJRCBzZXQgaGFzIGJlZW4gYWxsb2NhdGVkIGFuZA0KPiA+ID4gaW5pdGlhbGl6ZWQgKi8NCj4g PiA+ICsJc2RhdGEgPSB4YV9sb2FkKCZpb2FzaWRfc2V0cywgc2lkKTsNCj4gPg0KPiA+IG9rLCB0 aGlzIGNoYW5nZSBhbnN3ZXJzIG15IHByZXZpb3VzIHF1ZXN0aW9uIGluIGxhc3QgcGF0Y2guIPCf mIoNCj4gPg0KPiBJIGd1ZXNzIHlvdSBtZWFudCB0aGUgTlVMTCBzZXQgcXVlc3Rpb24/DQoNCnll cw0KDQo+IA0KPiA+ID4gKwlpZiAoIXNkYXRhKSB7DQo+ID4gPiArCQlwcl9lcnIoIkludmFsaWQg SU9BU0lEIHNldCAlZCB0byBhbGxvY2F0ZSBmcm9tXG4iLA0KPiA+ID4gc2lkKTsNCj4gPiA+ICsJ CXJldHVybiBJTlZBTElEX0lPQVNJRDsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlpZiAo c2RhdGEtPnNpemUgPD0gc2RhdGEtPm5yX2lvYXNpZHMpIHsNCj4gPiA+ICsJCXByX2VycigiSU9B U0lEIHNldCAlZCBvdXQgb2YgcXVvdGFcbiIsIHNpZCk7DQo+ID4gPiArCQlyZXR1cm4gSU5WQUxJ RF9JT0FTSUQ7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJZGF0YSA9IGt6YWxsb2Moc2l6 ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7DQo+ID4gPiAgCWlmICghZGF0YSkNCj4gPiA+ICAJCXJl dHVybiBJTlZBTElEX0lPQVNJRDsNCj4gPiA+DQo+ID4gPiAtCWRhdGEtPnNldCA9IHNldDsNCj4g PiA+ICsJZGF0YS0+c2RhdGEgPSBzZGF0YTsNCj4gPiA+ICAJZGF0YS0+cHJpdmF0ZSA9IHByaXZh dGU7DQo+ID4gPg0KPiA+ID4gIAkvKg0KPiA+ID4gQEAgLTM3OSw2ICszOTEsOSBAQCBpb2FzaWRf dCBpb2FzaWRfYWxsb2Moc3RydWN0IGlvYXNpZF9zZXQgKnNldCwNCj4gPiA+IGlvYXNpZF90IG1p biwgaW9hc2lkX3QgbWF4LA0KPiA+ID4gIAl9DQo+ID4gPiAgCWRhdGEtPmlkID0gaWQ7DQo+ID4g Pg0KPiA+ID4gKwkvKiBTdG9yZSBJT0FTSUQgaW4gdGhlIHBlciBzZXQgZGF0YSAqLw0KPiA+ID4g Kwl4YV9zdG9yZSgmc2RhdGEtPnhhLCBpZCwgZGF0YSwgR0ZQX0tFUk5FTCk7DQo+ID4gPiArCXNk YXRhLT5ucl9pb2FzaWRzKys7DQo+ID4gPiAgCXNwaW5fdW5sb2NrKCZpb2FzaWRfYWxsb2NhdG9y X2xvY2spOw0KPiA+ID4gIAlyZXR1cm4gaWQ7DQo+ID4gPiAgZXhpdF9mcmVlOg0KPiA+ID4gQEAg LTM4OCwxOSArNDAzLDE1IEBAIGlvYXNpZF90IGlvYXNpZF9hbGxvYyhzdHJ1Y3QgaW9hc2lkX3Nl dCAqc2V0LA0KPiA+ID4gaW9hc2lkX3QgbWluLCBpb2FzaWRfdCBtYXgsDQo+ID4gPiAgfQ0KPiA+ ID4gIEVYUE9SVF9TWU1CT0xfR1BMKGlvYXNpZF9hbGxvYyk7DQo+ID4gPg0KPiA+ID4gLS8qKg0K PiA+ID4gLSAqIGlvYXNpZF9mcmVlIC0gRnJlZSBhbiBJT0FTSUQNCj4gPiA+IC0gKiBAaW9hc2lk OiB0aGUgSUQgdG8gcmVtb3ZlDQo+ID4gPiAtICovDQo+ID4gPiAtdm9pZCBpb2FzaWRfZnJlZShp b2FzaWRfdCBpb2FzaWQpDQo+ID4gPiArc3RhdGljIHZvaWQgaW9hc2lkX2ZyZWVfbG9ja2VkKGlv YXNpZF90IGlvYXNpZCkNCj4gPiA+ICB7DQo+ID4gPiAgCXN0cnVjdCBpb2FzaWRfZGF0YSAqaW9h c2lkX2RhdGE7DQo+ID4gPiArCXN0cnVjdCBpb2FzaWRfc2V0X2RhdGEgKnNkYXRhOw0KPiA+ID4N Cj4gPiA+IC0Jc3Bpbl9sb2NrKCZpb2FzaWRfYWxsb2NhdG9yX2xvY2spOw0KPiA+ID4gIAlpb2Fz aWRfZGF0YSA9IHhhX2xvYWQoJmFjdGl2ZV9hbGxvY2F0b3ItPnhhLCBpb2FzaWQpOw0KPiA+ID4g IAlpZiAoIWlvYXNpZF9kYXRhKSB7DQo+ID4gPiAgCQlwcl9lcnIoIlRyeWluZyB0byBmcmVlIHVu a25vd24gSU9BU0lEICV1XG4iLA0KPiA+ID4gaW9hc2lkKTsNCj4gPiA+IC0JCWdvdG8gZXhpdF91 bmxvY2s7DQo+ID4gPiArCQlyZXR1cm47DQo+ID4gPiAgCX0NCj4gPiA+DQo+ID4gPiAgCWFjdGl2 ZV9hbGxvY2F0b3ItPm9wcy0+ZnJlZShpb2FzaWQsDQo+ID4gPiBhY3RpdmVfYWxsb2NhdG9yLT5v cHMtPnBkYXRhKTsgQEAgLTQxMCw3ICs0MjEsMjcgQEAgdm9pZA0KPiA+ID4gaW9hc2lkX2ZyZWUo aW9hc2lkX3QgaW9hc2lkKSBrZnJlZV9yY3UoaW9hc2lkX2RhdGEsIHJjdSk7DQo+ID4gPiAgCX0N Cj4gPiA+DQo+ID4gPiAtZXhpdF91bmxvY2s6DQo+ID4gPiArCXNkYXRhID0geGFfbG9hZCgmaW9h c2lkX3NldHMsIGlvYXNpZF9kYXRhLT5zZGF0YS0+c2lkKTsNCj4gPiA+ICsJaWYgKCFzZGF0YSkg ew0KPiA+ID4gKwkJcHJfZXJyKCJObyBzZXQgJWQgZm9yIElPQVNJRCAlZFxuIiwNCj4gPiA+IGlv YXNpZF9kYXRhLT5zZGF0YS0+c2lkLA0KPiA+ID4gKwkJICAgICAgIGlvYXNpZCk7DQo+ID4gPiAr CQlyZXR1cm47DQo+ID4gPiArCX0NCj4gPiA+ICsJeGFfZXJhc2UoJnNkYXRhLT54YSwgaW9hc2lk KTsNCj4gPiA+ICsJc2RhdGEtPm5yX2lvYXNpZHMtLTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiArLyoqDQo+ID4gPiArICogaW9hc2lkX2ZyZWUgLSBGcmVlIGFuIElPQVNJRCBhbmQgbm90aWZ5 IHVzZXJzIHdobyByZWdpc3RlcmVkIGENCj4gPiA+IG5vdGlmaWVyDQo+ID4gPiArICogICAgICAg ICAgICAgICBvbiB0aGUgSU9BU0lEIHNldC4NCj4gPiA+ICsgKiAgICAgICAgICAgICAgIElPQVNJ RCBjYW4gYmUgcmUtYWxsb2NhdGVkIHVwb24gcmV0dXJuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBA aW9hc2lkOiB0aGUgSUQgdG8gcmVtb3ZlDQo+ID4gPiArICovDQo+ID4gPiArdm9pZCBpb2FzaWRf ZnJlZShpb2FzaWRfdCBpb2FzaWQpDQo+ID4gPiArew0KPiA+ID4gKwlzcGluX2xvY2soJmlvYXNp ZF9hbGxvY2F0b3JfbG9jayk7DQo+ID4gPiArCWlvYXNpZF9mcmVlX2xvY2tlZChpb2FzaWQpOw0K PiA+ID4gIAlzcGluX3VubG9jaygmaW9hc2lkX2FsbG9jYXRvcl9sb2NrKTsNCj4gPiA+ICB9DQo+ ID4gPiAgRVhQT1JUX1NZTUJPTF9HUEwoaW9hc2lkX2ZyZWUpOw0KPiA+ID4gQEAgLTQ5OSw4ICs1 MzAsMTIgQEAgdm9pZCBpb2FzaWRfZnJlZV9zZXQoaW50IHNpZCwgYm9vbCBkZXN0cm95X3NldCkN Cj4gPiA+ICAJCWdvdG8gZG9uZV9kZXN0cm95Ow0KPiA+ID4gIAl9DQo+ID4gPg0KPiA+ID4gLQkv KiBKdXN0IGEgcGxhY2UgaG9sZGVyIGZvciBub3cgKi8NCj4gPiA+ICAJeGFfZm9yX2VhY2goJnNk YXRhLT54YSwgaW5kZXgsIGVudHJ5KSB7DQo+ID4gPiArCQkvKg0KPiA+ID4gKwkJICogRnJlZSBm cm9tIHN5c3RlbS13aWRlIElPQVNJRCBwb29sLCBhbGwNCj4gPiA+IHN1YnNjcmliZXJzIGdldHMN Cj4gPiA+ICsJCSAqIG5vdGlmaWVkIGFuZCBkbyBjbGVhbnVwLg0KPiA+ID4gKwkJICovDQo+ID4N Cj4gPiB0aGlzIGNvbW1lbnQgbWlnaHQgYmUgYWRkZWQgdG9vIGVhcmx5Li4uDQo+IFllcywgSSBz aG91bGQgbW92ZSBpdCB0byBub3RpZmllciBwYXRjaC4NCj4gDQo+ID4NCj4gPiA+ICsJCWlvYXNp ZF9mcmVlX2xvY2tlZChpbmRleCk7DQo+ID4gPiAgCQkvKiBGcmVlIGZyb20gcGVyIHN1Yi1zZXQg cG9vbCAqLw0KPiA+ID4gIAkJeGFfZXJhc2UoJnNkYXRhLT54YSwgaW5kZXgpOw0KPiA+ID4gIAl9 DQo+ID4gPiBAQCAtNTA4LDcgKzU0Myw2IEBAIHZvaWQgaW9hc2lkX2ZyZWVfc2V0KGludCBzaWQs IGJvb2wgZGVzdHJveV9zZXQpDQo+ID4gPiAgZG9uZV9kZXN0cm95Og0KPiA+ID4gIAlpZiAoZGVz dHJveV9zZXQpIHsNCj4gPiA+ICAJCXhhX2VyYXNlKCZpb2FzaWRfc2V0cywgc2lkKTsNCj4gPiA+ IC0NCj4gPiA+ICAJCS8qIFJldHVybiB0aGUgcXVvdGEgYmFjayB0byBzeXN0ZW0gcG9vbCAqLw0K PiA+ID4gIAkJaW9hc2lkX2NhcGFjaXR5X2F2YWlsICs9IHNkYXRhLT5zaXplOw0KPiA+ID4gIAkJ a2ZyZWVfcmN1KHNkYXRhLCByY3UpOw0KPiA+ID4gQEAgLTUyMiw3ICs1NTYsNyBAQCBFWFBPUlRf U1lNQk9MX0dQTChpb2FzaWRfZnJlZV9zZXQpOw0KPiA+ID4NCj4gPiA+ICAvKioNCj4gPiA+ICAg KiBpb2FzaWRfZmluZCAtIEZpbmQgSU9BU0lEIGRhdGENCj4gPiA+IC0gKiBAc2V0OiB0aGUgSU9B U0lEIHNldA0KPiA+ID4gKyAqIEBzaWQ6IHRoZSBJT0FTSUQgc2V0IElEDQo+ID4gPiAgICogQGlv YXNpZDogdGhlIElPQVNJRCB0byBmaW5kDQo+ID4gPiAgICogQGdldHRlcjogZnVuY3Rpb24gdG8g Y2FsbCBvbiB0aGUgZm91bmQgb2JqZWN0DQo+ID4gPiAgICoNCj4gPiA+IEBAIC01MzIsMTAgKzU2 NiwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChpb2FzaWRfZnJlZV9zZXQpOw0KPiA+ID4gICAqDQo+ ID4gPiAgICogSWYgdGhlIElPQVNJRCBleGlzdHMsIHJldHVybiB0aGUgcHJpdmF0ZSBwb2ludGVy IHBhc3NlZCB0bw0KPiA+ID4gaW9hc2lkX2FsbG9jLg0KPiA+ID4gICAqIFByaXZhdGUgZGF0YSBj YW4gYmUgTlVMTCBpZiBub3Qgc2V0LiBSZXR1cm4gYW4gZXJyb3IgaWYgdGhlDQo+ID4gPiBJT0FT SUQgaXMgbm90DQo+ID4gPiAtICogZm91bmQsIG9yIGlmIEBzZXQgaXMgbm90IE5VTEwgYW5kIHRo ZSBJT0FTSUQgZG9lcyBub3QgYmVsb25nIHRvDQo+ID4gPiB0aGUgc2V0Lg0KPiA+ID4gKyAqIGZv dW5kLg0KPiA+ID4gKyAqDQo+ID4gPiArICogSWYgc2lkIGlzIElOVkFMSURfSU9BU0lEX1NFVCwg aXQgd2lsbCBza2lwIHNldCBvd25lcnNoaXANCj4gPiA+IGNoZWNraW5nLiBPdGhlcndpc2UsDQo+ ID4gPiArICogZXJyb3IgaXMgcmV0dXJuZWQgZXZlbiBpZiB0aGUgSU9BU0lEIGlzIGZvdW5kIGJ1 dCBkb2VzIG5vdA0KPiA+ID4gYmVsb25nIHRoZSBzZXQuICovDQo+ID4gPiAtdm9pZCAqaW9hc2lk X2ZpbmQoc3RydWN0IGlvYXNpZF9zZXQgKnNldCwgaW9hc2lkX3QgaW9hc2lkLA0KPiA+ID4gLQkJ ICBib29sICgqZ2V0dGVyKSh2b2lkICopKQ0KPiA+ID4gK3ZvaWQgKmlvYXNpZF9maW5kKGludCBz aWQsIGlvYXNpZF90IGlvYXNpZCwgYm9vbCAoKmdldHRlcikodm9pZCAqKSkNCj4gPiA+ICB7DQo+ ID4gPiAgCXZvaWQgKnByaXY7DQo+ID4gPiAgCXN0cnVjdCBpb2FzaWRfZGF0YSAqaW9hc2lkX2Rh dGE7DQo+ID4gPiBAQCAtNTQ4LDcgKzU4NCw3IEBAIHZvaWQgKmlvYXNpZF9maW5kKHN0cnVjdCBp b2FzaWRfc2V0ICpzZXQsDQo+ID4gPiBpb2FzaWRfdCBpb2FzaWQsDQo+ID4gPiAgCQlwcml2ID0g RVJSX1BUUigtRU5PRU5UKTsNCj4gPiA+ICAJCWdvdG8gdW5sb2NrOw0KPiA+ID4gIAl9DQo+ID4g PiAtCWlmIChzZXQgJiYgaW9hc2lkX2RhdGEtPnNldCAhPSBzZXQpIHsNCj4gPiA+ICsJaWYgKHNp ZCAhPSBJTlZBTElEX0lPQVNJRF9TRVQgJiYNCj4gPiA+IGlvYXNpZF9kYXRhLT5zZGF0YS0+c2lk ICE9IHNpZCkgeyAvKiBkYXRhIGZvdW5kIGJ1dCBkb2VzIG5vdCBiZWxvbmcNCj4gPiA+IHRvIHRo ZSBzZXQgKi8gcHJpdiA9IEVSUl9QVFIoLUVBQ0NFUyk7DQo+ID4gPiAgCQlnb3RvIHVubG9jazsN Cj4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvYXNpZC5oIGIvaW5jbHVkZS9saW51 eC9pb2FzaWQuaA0KPiA+ID4gaW5kZXggMDk3YjFjYzA0M2EzLi5lMTljMGFkOTNiZDcgMTAwNjQ0 DQo+ID4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L2lvYXNpZC5oDQo+ID4gPiArKysgYi9pbmNsdWRl L2xpbnV4L2lvYXNpZC5oDQo+ID4gPiBAQCAtNiw2ICs2LDcgQEANCj4gPiA+ICAjaW5jbHVkZSA8 bGludXgvZXJybm8uaD4NCj4gPiA+DQo+ID4gPiAgI2RlZmluZSBJTlZBTElEX0lPQVNJRCAoKGlv YXNpZF90KS0xKQ0KPiA+ID4gKyNkZWZpbmUgSU5WQUxJRF9JT0FTSURfU0VUICgtMSkNCj4gPiA+ ICB0eXBlZGVmIHVuc2lnbmVkIGludCBpb2FzaWRfdDsNCj4gPiA+ICB0eXBlZGVmIGlvYXNpZF90 ICgqaW9hc2lkX2FsbG9jX2ZuX3QpKGlvYXNpZF90IG1pbiwgaW9hc2lkX3QgbWF4LA0KPiA+ID4g dm9pZCAqZGF0YSk7IHR5cGVkZWYgdm9pZCAoKmlvYXNpZF9mcmVlX2ZuX3QpKGlvYXNpZF90IGlv YXNpZCwgdm9pZA0KPiA+ID4gKmRhdGEpOyBAQCAtMzUsMTEgKzM2LDEwIEBAIGV4dGVybiBpbnQg c3lzdGVtX2lvYXNpZF9zaWQ7DQo+ID4gPiAgI2RlZmluZSBERUNMQVJFX0lPQVNJRF9TRVQobmFt ZSkgc3RydWN0IGlvYXNpZF9zZXQgbmFtZSA9IHsgMCB9DQo+ID4gPg0KPiA+ID4gICNpZiBJU19F TkFCTEVEKENPTkZJR19JT0FTSUQpDQo+ID4gPiAtaW9hc2lkX3QgaW9hc2lkX2FsbG9jKHN0cnVj dCBpb2FzaWRfc2V0ICpzZXQsIGlvYXNpZF90IG1pbiwNCj4gPiA+IGlvYXNpZF90IG1heCwgK2lv YXNpZF90IGlvYXNpZF9hbGxvYyhpbnQgc2lkLCBpb2FzaWRfdCBtaW4sDQo+ID4gPiBpb2FzaWRf dCBtYXgsIHZvaWQgKnByaXZhdGUpOw0KPiA+ID4gIHZvaWQgaW9hc2lkX2ZyZWUoaW9hc2lkX3Qg aW9hc2lkKTsNCj4gPiA+IC12b2lkICppb2FzaWRfZmluZChzdHJ1Y3QgaW9hc2lkX3NldCAqc2V0 LCBpb2FzaWRfdCBpb2FzaWQsDQo+ID4gPiAtCQkgIGJvb2wgKCpnZXR0ZXIpKHZvaWQgKikpOw0K PiA+ID4gK3ZvaWQgKmlvYXNpZF9maW5kKGludCBzaWQsIGlvYXNpZF90IGlvYXNpZCwgYm9vbCAo KmdldHRlcikodm9pZA0KPiA+ID4gKikpOyBpbnQgaW9hc2lkX3JlZ2lzdGVyX2FsbG9jYXRvcihz dHJ1Y3QgaW9hc2lkX2FsbG9jYXRvcl9vcHMNCj4gPiA+ICphbGxvY2F0b3IpOyB2b2lkIGlvYXNp ZF91bnJlZ2lzdGVyX2FsbG9jYXRvcihzdHJ1Y3QNCj4gPiA+IGlvYXNpZF9hbGxvY2F0b3Jfb3Bz ICphbGxvY2F0b3IpOyBpbnQgaW9hc2lkX2F0dGFjaF9kYXRhKGlvYXNpZF90DQo+ID4gPiBpb2Fz aWQsIHZvaWQgKmRhdGEpOyBAQCAtNDksNyArNDksNyBAQCBpbnQgaW9hc2lkX2FsbG9jX3NldChz dHJ1Y3QNCj4gPiA+IGlvYXNpZF9zZXQgKnRva2VuLCBpb2FzaWRfdCBxdW90YSwgaW50ICpzaWQp Ow0KPiA+ID4gIHZvaWQgaW9hc2lkX2ZyZWVfc2V0KGludCBzaWQsIGJvb2wgZGVzdHJveV9zZXQp Ow0KPiA+ID4gIGludCBpb2FzaWRfZmluZF9zaWQoaW9hc2lkX3QgaW9hc2lkKTsNCj4gPiA+ICAj ZWxzZSAvKiAhQ09ORklHX0lPQVNJRCAqLw0KPiA+ID4gLXN0YXRpYyBpbmxpbmUgaW9hc2lkX3Qg aW9hc2lkX2FsbG9jKHN0cnVjdCBpb2FzaWRfc2V0ICpzZXQsDQo+ID4gPiBpb2FzaWRfdCBtaW4s ICtzdGF0aWMgaW5saW5lIGlvYXNpZF90IGlvYXNpZF9hbGxvYyhpbnQgc2lkLA0KPiA+ID4gaW9h c2lkX3QgbWluLCBpb2FzaWRfdCBtYXgsIHZvaWQgKnByaXZhdGUpDQo+ID4gPiAgew0KPiA+ID4g IAlyZXR1cm4gSU5WQUxJRF9JT0FTSUQ7DQo+ID4gPiBAQCAtNjgsOCArNjgsNyBAQCBzdGF0aWMg aW5saW5lIHZvaWQgaW9hc2lkX2ZyZWVfc2V0KGludCBzaWQsIGJvb2wNCj4gPiA+IGRlc3Ryb3lf c2V0KQ0KPiA+ID4gIHsNCj4gPiA+ICB9DQo+ID4gPg0KPiA+ID4gLXN0YXRpYyBpbmxpbmUgdm9p ZCAqaW9hc2lkX2ZpbmQoc3RydWN0IGlvYXNpZF9zZXQgKnNldCwgaW9hc2lkX3QNCj4gPiA+IGlv YXNpZCwNCj4gPiA+IC0JCQkJYm9vbCAoKmdldHRlcikodm9pZCAqKSkNCj4gPiA+ICtzdGF0aWMg aW5saW5lIHZvaWQgKmlvYXNpZF9maW5kKGludCBzaWQsIGlvYXNpZF90IGlvYXNpZCwgYm9vbA0K PiA+ID4gKCpnZXR0ZXIpKHZvaWQgKikpIHsNCj4gPiA+ICAJcmV0dXJuIE5VTEw7DQo+ID4gPiAg fQ0KPiA+ID4gLS0NCj4gPiA+IDIuNy40DQo+ID4NCj4gDQo+IFtKYWNvYiBQYW5dDQo=