Received: by 2002:a05:6358:1087:b0:cb:c9d3:cd90 with SMTP id j7csp595323rwi; Thu, 20 Oct 2022 02:49:54 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4Es+hfDSbWLCmj4vChGnbbhsIGa7EppMj62idKDeOnYVZ3wt+VuNIsOrbhpY+J7pxNhyNi X-Received: by 2002:a17:903:1250:b0:185:40c6:3c2c with SMTP id u16-20020a170903125000b0018540c63c2cmr13348759plh.64.1666259394322; Thu, 20 Oct 2022 02:49:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666259394; cv=none; d=google.com; s=arc-20160816; b=cQTKH5F7vAlJ/uw2UIxwz/XryL0xaNHJkUYnv14pzFwgzn1BEmdN7NXeMwOB3d7JtU C4YnrdHw45J2jnDmLbBSN1eDtCU5WgSJ0+mPhrxHUO0GSQ/ugfMOdkh4dfRAkqQQ4KDx tkANqC09em9r0QVXYrPzGNyNvZ8ocWnhO8Atz9nUzt74DZr54Pze9M3TWWhsf6thh4gv 35diBQWtGd6oS1em41Xq7Ah2buIIUm/zWkZI8J1SJt0q91Ch9vNq1xwm1Uc/LXlvh7JB znnEtlYORQDhmj7/4TDuRQntOpFY1vlbcowQVC23Z5TlRY5suN5tQINvOQpHQ79Y1Tyx C0MQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent :content-transfer-encoding:references:in-reply-to:date:cc:to:from :subject:message-id:dkim-signature; bh=k/TG6BC7A6D4tKLlDjzRKDhkpK1HZayJXpCC1owJWnM=; b=h4MAI88U+z4Q3gPqvV4jb53phCnLULyQdPZEfIEcekoMe4BdOwEIR0fNxSGxkiuMXf qgq28QP3Bjkw7fPgV7LPrQ6EG7v6OHxhdELv5HAYvbAb85Jg/CMsVq3fMi9HMXlCYlxe 8GcWsMKhUFQPeHVa14c/aJsRcFlzWiVFeljSe2CeWjUVtKc4kCge3xik0/jBu+9Ann99 0wDBnQOf+juHRdhsTfasNyP17vjaTANGe3XGW6U5tMoXr4h0L73WKOBnn6fwCc0UnCI3 Y+eY0BWUKMtGOKCwn6pE7ioj+WsaTC7kUKBft5SnKEpqSbmEspXEJ2ny3JeD4BI6ySuz nKOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=cFqZPHgK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c14-20020a170903234e00b0018661a75a4fsi2133945plh.238.2022.10.20.02.49.42; Thu, 20 Oct 2022 02:49:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microchip.com header.s=mchp header.b=cFqZPHgK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230183AbiJTJKT (ORCPT + 99 others); Thu, 20 Oct 2022 05:10:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50828 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229751AbiJTJKQ (ORCPT ); Thu, 20 Oct 2022 05:10:16 -0400 Received: from esa.microchip.iphmx.com (esa.microchip.iphmx.com [68.232.153.233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D0AEA8359; Thu, 20 Oct 2022 02:10:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1666257007; x=1697793007; h=message-id:subject:from:to:cc:date:in-reply-to: references:content-transfer-encoding:mime-version; bh=k/TG6BC7A6D4tKLlDjzRKDhkpK1HZayJXpCC1owJWnM=; b=cFqZPHgKA7ehxj5jIuHiKUYhEMFZwG+n+WvPuLh74l1SD6mLdWunt2gk DeJN7a56UIa/NsvgpoI35cq6MWWA3j5UNbP6Sq5wpltVqEwKSfNCmWSPD TCmht9w5ShOLIZcSoiHJzhyoJGczxbavuWWhJhptTca/3Fh4uUJ4EGHSb NMc5cu5Hbyxk5fR/masOr9zMdW1dXxj38FSj6rZ1Eja6ecx7NIco0cMiQ LjISkJuC7+bowaNv7nTQBtrAqGGoZbWT2XJbHjBnK1qUdamygcZw+VCJp k9gL5SEpIdhGRSnUsSTN/tXzmi+BRaDukyToL+8c6hg8AjDLaIsJ+4gOa Q==; X-IronPort-AV: E=Sophos;i="5.95,198,1661842800"; d="scan'208";a="196270292" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa1.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 20 Oct 2022 02:10:05 -0700 Received: from chn-vm-ex01.mchp-main.com (10.10.85.143) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Thu, 20 Oct 2022 02:10:06 -0700 Received: from den-dk-m31857.microchip.com (10.10.115.15) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server id 15.1.2507.12 via Frontend Transport; Thu, 20 Oct 2022 02:10:03 -0700 Message-ID: <200aaa2a6e0957b88a80f3b3db08c52462e2abbc.camel@microchip.com> Subject: Re: [PATCH net-next v2 5/9] net: microchip: sparx5: Adding port keyset config and callback interface From: Steen Hegelund To: Casper Andersson CC: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , , Randy Dunlap , Russell King , "Wan Jiabing" , Nathan Huckleberry , , , Date: Thu, 20 Oct 2022 11:10:02 +0200 In-Reply-To: <20221020073325.hr33d5mck7vlwxh6@wse-c0155> References: <20221019114215.620969-1-steen.hegelund@microchip.com> <20221019114215.620969-6-steen.hegelund@microchip.com> <20221020073325.hr33d5mck7vlwxh6@wse-c0155> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.44.4 MIME-Version: 1.0 X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgQ2FzcGVyLAoKT24gVGh1LCAyMDIyLTEwLTIwIGF0IDA5OjMzICswMjAwLCBDYXNwZXIgQW5k ZXJzc29uIHdyb3RlOgo+IEVYVEVSTkFMIEVNQUlMOiBEbyBub3QgY2xpY2sgbGlua3Mgb3Igb3Bl biBhdHRhY2htZW50cyB1bmxlc3MgeW91IGtub3cgdGhlIGNvbnRlbnQgaXMgc2FmZQo+IAo+IEhp IFN0ZWVuLAo+IAo+IE9uIDIwMjItMTAtMTkgMTM6NDIsIFN0ZWVuIEhlZ2VsdW5kIHdyb3RlOgo+ ID4gVGhpcyBwcm92aWRlcyBhIGRlZmF1bHQgcG9ydCBrZXlzZXQgY29uZmlndXJhdGlvbiBmb3Ig dGhlIFNwYXJ4NSBJUzIgVkNBUAo+ID4gd2hlcmUgYWxsIHBvcnRzIGFuZCBhbGwgbG9va3VwcyBp biBJUzIgdXNlIHRoZSBzYW1lIGtleXNldCAoTUFDX0VUWVBFKSBmb3IKPiA+IGFsbCB0eXBlcyBv ZiB0cmFmZmljLgo+ID4gCj4gPiBUaGlzIG1lYW5zIHRoYXQgbm8gbWF0dGVyIHdoYXQgZnJhbWUg dHlwZSBpcyByZWNlaXZlZCBvbiBhbnkgZnJvbnQgcG9ydCBpdAo+ID4gd2lsbCBnZW5lcmF0ZSB0 aGUgTUFDX0VUWVBFIGtleXNldCBpbiB0aGUgSVMgVkNBUCBhbmQgYW55IHJ1bGUgaW4gdGhlIElT Mgo+ID4gVkNBUCB0aGF0IHVzZXMgdGhpcyBrZXlzZXQgd2lsbCBiZSBtYXRjaGVkIGFnYWluc3Qg dGhlIGtleXMgaW4gdGhlCj4gPiBNQUNfRVRZUEUga2V5c2V0Lgo+ID4gCj4gPiBUaGUgY2FsbGJh Y2sgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIFZDQVAgQVBJIGlzIHBvcHVsYXRlZCB3aXRoIFNwYXJ4 NQo+ID4gc3BlY2lmaWMgaGFuZGxlciBmdW5jdGlvbnMgdGhhdCB0YWtlcyBjYXJlIG9mIHRoZSBh Y3R1YWwgcmVhZGluZyBhbmQKPiA+IHdyaXRpbmcgdG8gZGF0YSB0byB0aGUgU3Bhcng1IElTMiBW Q0FQIGluc3RhbmNlLgo+ID4gCj4gPiBBIGZldyBmdW5jdGlvbnMgYXJlIGFsc28gYWRkZWQgdG8g dGhlIFZDQVAgQVBJIHRvIHN1cHBvcnQgYWRkaXRpb24gb2YgcnVsZQo+ID4gZmllbGRzIHN1Y2gg YXMgdGhlIGluZ3Jlc3MgcG9ydCBtYXNrIGFuZCB0aGUgbG9va3VwIGJpdC4KPiA+IAo+ID4gVGhl IElTMiBWQ0FQIGluIFNwYXJ4NSBpcyByZWFsbHkgZGl2aWRlZCBpbiB0d28gaW5zdGFuY2VzIHdp dGggbG9va3VwIDAKPiA+IGFuZCAxIGluIHRoZSBmaXJzdCBpbnN0YW5jZSBhbmQgbG9va3VwIDIg YW5kIDMgaW4gdGhlIHNlY29uZCBpbnN0YW5jZS4KPiA+IFRoZSBsb29rdXAgYml0IHNlbGVjdHMg bG9va3VwIDAgb3IgMyBpbiB0aGUgcmVzcGVjdGl2ZSBpbnN0YW5jZSB3aGVuIGl0IGlzCj4gPiBz ZXQuCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IFN0ZWVuIEhlZ2VsdW5kIDxzdGVlbi5oZWdlbHVu ZEBtaWNyb2NoaXAuY29tPgo+ID4gLS0tCj4gPiDCoC4uLi9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4 NV92Y2FwX2ltcGwuY8KgwqDCoMKgwqDCoCB8IDM0NSArKysrKysrKysrKysrKysrKysKPiA+IMKg Li4uL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvdmNhcC92Y2FwX2FwaS5jwqDCoMKgIHzCoCA4MSAr KysrCj4gPiDCoC4uLi9ldGhlcm5ldC9taWNyb2NoaXAvdmNhcC92Y2FwX2FwaV9jbGllbnQuaCB8 wqDCoCA1ICsKPiA+IMKgMyBmaWxlcyBjaGFuZ2VkLCA0MzEgaW5zZXJ0aW9ucygrKQo+ID4gCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFy eDVfdmNhcF9pbXBsLmMKPiA+IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4 NS9zcGFyeDVfdmNhcF9pbXBsLmMKPiA+IGluZGV4IDVlYzAwNWU2MzZhYS4uZGJkMmMyYzRkMzQ2 IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9z cGFyeDVfdmNhcF9pbXBsLmMKPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hp cC9zcGFyeDUvc3Bhcng1X3ZjYXBfaW1wbC5jCj4gPiBAQCAtMjIsNiArMjIsNTQgQEAKPiA+IAo+ ID4gwqAjZGVmaW5lIFNQQVJYNV9JUzJfTE9PS1VQUyA0Cj4gPiAKPiA+ICsvKiBJUzIgcG9ydCBr ZXlzZXQgc2VsZWN0aW9uIGNvbnRyb2wgKi8KPiA+ICsKPiA+ICsvKiBJUzIgbm9uLWV0aGVybmV0 IHRyYWZmaWMgdHlwZSBrZXlzZXQgZ2VuZXJhdGlvbiAqLwo+ID4gK2VudW0gdmNhcF9pczJfcG9y dF9zZWxfbm9uZXRoIHsKPiA+ICvCoMKgwqDCoCBWQ0FQX0lTMl9QU19OT05FVEhfTUFDX0VUWVBF LAo+ID4gK8KgwqDCoMKgIFZDQVBfSVMyX1BTX05PTkVUSF9DVVNUT01fMSwKPiA+ICvCoMKgwqDC oCBWQ0FQX0lTMl9QU19OT05FVEhfQ1VTVE9NXzIsCj4gPiArwqDCoMKgwqAgVkNBUF9JUzJfUFNf Tk9ORVRIX05PX0xPT0tVUAo+ID4gK307Cj4gPiArCj4gPiArLyogSVMyIElQdjQgdW5pY2FzdCB0 cmFmZmljIHR5cGUga2V5c2V0IGdlbmVyYXRpb24gKi8KPiA+ICtlbnVtIHZjYXBfaXMyX3BvcnRf c2VsX2lwdjRfdWMgewo+ID4gK8KgwqDCoMKgIFZDQVBfSVMyX1BTX0lQVjRfVUNfTUFDX0VUWVBF LAo+ID4gK8KgwqDCoMKgIFZDQVBfSVMyX1BTX0lQVjRfVUNfSVA0X1RDUF9VRFBfT1RIRVIsCj4g PiArwqDCoMKgwqAgVkNBUF9JUzJfUFNfSVBWNF9VQ19JUF83VFVQTEUsCj4gPiArfTsKPiA+ICsK PiA+ICsvKiBJUzIgSVB2NCBtdWx0aWNhc3QgdHJhZmZpYyB0eXBlIGtleXNldCBnZW5lcmF0aW9u ICovCj4gPiArZW51bSB2Y2FwX2lzMl9wb3J0X3NlbF9pcHY0X21jIHsKPiA+ICvCoMKgwqDCoCBW Q0FQX0lTMl9QU19JUFY0X01DX01BQ19FVFlQRSwKPiA+ICvCoMKgwqDCoCBWQ0FQX0lTMl9QU19J UFY0X01DX0lQNF9UQ1BfVURQX09USEVSLAo+ID4gK8KgwqDCoMKgIFZDQVBfSVMyX1BTX0lQVjRf TUNfSVBfN1RVUExFLAo+ID4gK8KgwqDCoMKgIFZDQVBfSVMyX1BTX0lQVjRfTUNfSVA0X1ZJRCwK PiA+ICt9Owo+ID4gKwo+ID4gKy8qIElTMiBJUHY2IHVuaWNhc3QgdHJhZmZpYyB0eXBlIGtleXNl dCBnZW5lcmF0aW9uICovCj4gPiArZW51bSB2Y2FwX2lzMl9wb3J0X3NlbF9pcHY2X3VjIHsKPiA+ ICvCoMKgwqDCoCBWQ0FQX0lTMl9QU19JUFY2X1VDX01BQ19FVFlQRSwKPiA+ICvCoMKgwqDCoCBW Q0FQX0lTMl9QU19JUFY2X1VDX0lQXzdUVVBMRSwKPiA+ICvCoMKgwqDCoCBWQ0FQX0lTMl9QU19J UFY2X1VDX0lQNl9TVEQsCj4gPiArwqDCoMKgwqAgVkNBUF9JUzJfUFNfSVBWNl9VQ19JUDRfVENQ X1VEUF9PVEhFUiwKPiA+ICt9Owo+ID4gKwo+ID4gKy8qIElTMiBJUHY2IG11bHRpY2FzdCB0cmFm ZmljIHR5cGUga2V5c2V0IGdlbmVyYXRpb24gKi8KPiA+ICtlbnVtIHZjYXBfaXMyX3BvcnRfc2Vs X2lwdjZfbWMgewo+ID4gK8KgwqDCoMKgIFZDQVBfSVMyX1BTX0lQVjZfTUNfTUFDX0VUWVBFLAo+ ID4gK8KgwqDCoMKgIFZDQVBfSVMyX1BTX0lQVjZfTUNfSVBfN1RVUExFLAo+ID4gK8KgwqDCoMKg IFZDQVBfSVMyX1BTX0lQVjZfTUNfSVA2X1ZJRCwKPiA+ICvCoMKgwqDCoCBWQ0FQX0lTMl9QU19J UFY2X01DX0lQNl9TVEQsCj4gPiArwqDCoMKgwqAgVkNBUF9JUzJfUFNfSVBWNl9NQ19JUDRfVENQ X1VEUF9PVEhFUiwKPiA+ICt9Owo+ID4gKwo+ID4gKy8qIElTMiBBUlAgdHJhZmZpYyB0eXBlIGtl eXNldCBnZW5lcmF0aW9uICovCj4gPiArZW51bSB2Y2FwX2lzMl9wb3J0X3NlbF9hcnAgewo+ID4g K8KgwqDCoMKgIFZDQVBfSVMyX1BTX0FSUF9NQUNfRVRZUEUsCj4gPiArwqDCoMKgwqAgVkNBUF9J UzJfUFNfQVJQX0FSUCwKPiA+ICt9Owo+ID4gKwo+ID4gwqBzdGF0aWMgc3RydWN0IHNwYXJ4NV92 Y2FwX2luc3Qgewo+ID4gwqDCoMKgwqDCoCBlbnVtIHZjYXBfdHlwZSB2dHlwZTsgLyogdHlwZSBv ZiB2Y2FwICovCj4gPiDCoMKgwqDCoMKgIGludCB2aW5zdDsgLyogaW5zdGFuY2UgbnVtYmVyIHdp dGhpbiB0aGUgc2FtZSB0eXBlICovCj4gPiBAQCAtNTgsNiArMTA2LDI5NiBAQCBzdGF0aWMgc3Ry dWN0IHNwYXJ4NV92Y2FwX2luc3Qgewo+ID4gwqDCoMKgwqDCoCB9LAo+ID4gwqB9Owo+ID4gCj4g PiArLyogQXdhaXQgdGhlIHN1cGVyIFZDQVAgY29tcGxldGlvbiBvZiB0aGUgY3VycmVudCBvcGVy YXRpb24gKi8KPiA+ICtzdGF0aWMgdm9pZCBzcGFyeDVfdmNhcF93YWl0X3N1cGVyX3VwZGF0ZShz dHJ1Y3Qgc3Bhcng1ICpzcGFyeDUpCj4gPiArewo+ID4gK8KgwqDCoMKgIHUzMiB2YWx1ZTsKPiA+ ICsKPiA+ICvCoMKgwqDCoCByZWFkX3BvbGxfdGltZW91dChzcHg1X3JkLCB2YWx1ZSwKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhVkNBUF9TVVBFUl9D VFJMX1VQREFURV9TSE9UX0dFVCh2YWx1ZSksIDUwMCwgMTAwMDAsCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmFsc2UsIHNwYXJ4NSwgVkNBUF9TVVBF Ul9DVFJMKTsKPiA+ICt9Cj4gPiArCj4gPiArLyogSW5pdGlhbGl6aW5nIGEgVkNBUCBhZGRyZXNz IHJhbmdlOiBvbmx5IElTMiBmb3Igbm93ICovCj4gPiArc3RhdGljIHZvaWQgX3NwYXJ4NV92Y2Fw X3JhbmdlX2luaXQoc3RydWN0IHNwYXJ4NSAqc3Bhcng1LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZj YXBfYWRtaW4gKmFkbWluLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGFkZHIsIHUzMiBjb3VudCkKPiA+ICt7 Cj4gPiArwqDCoMKgwqAgdTMyIHNpemUgPSBjb3VudCAtIDE7Cj4gPiArCj4gPiArwqDCoMKgwqAg c3B4NV93cihWQ0FQX1NVUEVSX0NGR19NVl9OVU1fUE9TX1NFVCgwKSB8Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIFZDQVBfU1VQRVJfQ0ZHX01WX1NJWkVfU0VUKHNpemUpLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGFyeDUsIFZDQVBfU1VQRVJfQ0ZHKTsKPiA+ICvCoMKg wqDCoCBzcHg1X3dyKFZDQVBfU1VQRVJfQ1RSTF9VUERBVEVfQ01EX1NFVChWQ0FQX0NNRF9JTklU SUFMSVpFKSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZDQVBfU1VQRVJfQ1RSTF9V UERBVEVfRU5UUllfRElTX1NFVCgwKSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZD QVBfU1VQRVJfQ1RSTF9VUERBVEVfQUNUSU9OX0RJU19TRVQoMCkgfAo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBWQ0FQX1NVUEVSX0NUUkxfVVBEQVRFX0NOVF9ESVNfU0VUKDApIHwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkNBUF9TVVBFUl9DVFJMX1VQREFURV9BRERSX1NF VChhZGRyKSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZDQVBfU1VQRVJfQ1RSTF9D TEVBUl9DQUNIRV9TRVQodHJ1ZSkgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQ0FQ X1NVUEVSX0NUUkxfVVBEQVRFX1NIT1RfU0VUKHRydWUpLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzcGFyeDUsIFZDQVBfU1VQRVJfQ1RSTCk7Cj4gPiArwqDCoMKgwqAgc3Bhcng1X3Zj YXBfd2FpdF9zdXBlcl91cGRhdGUoc3Bhcng1KTsKPiA+ICt9Cj4gPiArCj4gPiArLyogSW5pdGlh bGl6aW5nIFZDQVAgcnVsZSBkYXRhIGFyZWEgKi8KPiA+ICtzdGF0aWMgdm9pZCBzcGFyeDVfdmNh cF9ibG9ja19pbml0KHN0cnVjdCBzcGFyeDUgKnNwYXJ4NSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgdmNh cF9hZG1pbiAqYWRtaW4pCj4gPiArewo+ID4gK8KgwqDCoMKgIF9zcGFyeDVfdmNhcF9yYW5nZV9p bml0KHNwYXJ4NSwgYWRtaW4sIGFkbWluLT5maXJzdF92YWxpZF9hZGRyLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkbWluLT5s YXN0X3ZhbGlkX2FkZHIgLQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZG1pbi0+Zmlyc3RfdmFsaWRf YWRkcik7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIEdldCB0aGUga2V5c2V0IG5hbWUgZnJvbSB0aGUg c3Bhcng1IFZDQVAgbW9kZWwgKi8KPiA+ICtzdGF0aWMgY29uc3QgY2hhciAqc3Bhcng1X3ZjYXBf a2V5c2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGVudW0gdmNhcF9rZXlmaWVsZF9zZXQga2V5c2V0KQo+ID4gK3sKPiA+ICvCoMKgwqDC oCBzdHJ1Y3Qgc3Bhcng1X3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihuZGV2KTsKPiA+ICsKPiA+ ICvCoMKgwqDCoCByZXR1cm4gcG9ydC0+c3Bhcng1LT52Y2FwX2N0cmwtPnN0YXRzLT5rZXlmaWVs ZF9zZXRfbmFtZXNba2V5c2V0XTsKPiA+ICt9Cj4gPiArCj4gPiArLyogQ2hlY2sgaWYgdGhpcyBp cyB0aGUgZmlyc3QgbG9va3VwIG9mIElTMiAqLwo+ID4gK3N0YXRpYyBib29sIHNwYXJ4NV92Y2Fw X2lzMl9pc19maXJzdF9jaGFpbihzdHJ1Y3QgdmNhcF9ydWxlICpydWxlKQo+ID4gK3sKPiA+ICvC oMKgwqDCoCByZXR1cm4gKHJ1bGUtPnZjYXBfY2hhaW5faWQgPj0gU1BBUlg1X1ZDQVBfQ0lEX0lT Ml9MMCAmJgo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBydWxlLT52Y2FwX2NoYWluX2lk IDwgU1BBUlg1X1ZDQVBfQ0lEX0lTMl9MMSkgfHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKChydWxlLT52Y2FwX2NoYWluX2lkID49IFNQQVJYNV9WQ0FQX0NJRF9JUzJfTDIgJiYKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJ1bGUtPnZjYXBfY2hhaW5faWQgPCBTUEFS WDVfVkNBUF9DSURfSVMyX0wzKSk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIFNldCB0aGUgbmFycm93 IHJhbmdlIGluZ3Jlc3MgcG9ydCBtYXNrIG9uIGEgcnVsZSAqLwo+ID4gK3N0YXRpYyB2b2lkIHNw YXJ4NV92Y2FwX2FkZF9yYW5nZV9wb3J0X21hc2soc3RydWN0IHZjYXBfcnVsZSAqcnVsZSwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKPiA+ICt7 Cj4gPiArwqDCoMKgwqAgc3RydWN0IHNwYXJ4NV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYobmRl dik7Cj4gPiArwqDCoMKgwqAgdTMyIHBvcnRfbWFzazsKPiA+ICvCoMKgwqDCoCB1MzIgcmFuZ2U7 Cj4gPiArCj4gPiArwqDCoMKgwqAgcmFuZ2UgPSBwb3J0LT5wb3J0bm8gLyBCSVRTX1BFUl9UWVBF KHUzMik7Cj4gPiArwqDCoMKgwqAgLyogUG9ydCBiaXQgc2V0IHRvIG1hdGNoLWFueSAqLwo+ID4g K8KgwqDCoMKgIHBvcnRfbWFzayA9IH5CSVQocG9ydC0+cG9ydG5vICUgQklUU19QRVJfVFlQRSh1 MzIpKTsKPiA+ICvCoMKgwqDCoCB2Y2FwX3J1bGVfYWRkX2tleV91MzIocnVsZSwgVkNBUF9LRl9J Rl9JR1JfUE9SVF9NQVNLX1NFTCwgMCwgMHhmKTsKPiA+ICvCoMKgwqDCoCB2Y2FwX3J1bGVfYWRk X2tleV91MzIocnVsZSwgVkNBUF9LRl9JRl9JR1JfUE9SVF9NQVNLX1JORywgcmFuZ2UsIDB4Zik7 Cj4gPiArwqDCoMKgwqAgdmNhcF9ydWxlX2FkZF9rZXlfdTMyKHJ1bGUsIFZDQVBfS0ZfSUZfSUdS X1BPUlRfTUFTSywgMCwgcG9ydF9tYXNrKTsKPiA+ICt9Cj4gPiArCj4gPiArLyogU2V0IHRoZSB3 aWRlIHJhbmdlIGluZ3Jlc3MgcG9ydCBtYXNrIG9uIGEgcnVsZSAqLwo+ID4gK3N0YXRpYyB2b2lk IHNwYXJ4NV92Y2FwX2FkZF93aWRlX3BvcnRfbWFzayhzdHJ1Y3QgdmNhcF9ydWxlICpydWxlLAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKPiA+ICt7 Cj4gPiArwqDCoMKgwqAgc3RydWN0IHNwYXJ4NV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYobmRl dik7Cj4gPiArwqDCoMKgwqAgc3RydWN0IHZjYXBfdTcyX2tleSBwb3J0X21hc2s7Cj4gPiArwqDC oMKgwqAgdTMyIHJhbmdlOwo+ID4gKwo+ID4gK8KgwqDCoMKgIC8qIFBvcnQgYml0IHNldCB0byBt YXRjaC1hbnkgKi8KPiA+ICvCoMKgwqDCoCBtZW1zZXQocG9ydF9tYXNrLnZhbHVlLCAwLCBzaXpl b2YocG9ydF9tYXNrLnZhbHVlKSk7Cj4gPiArwqDCoMKgwqAgbWVtc2V0KHBvcnRfbWFzay5tYXNr LCAweGZmLCBzaXplb2YocG9ydF9tYXNrLm1hc2spKTsKPiA+ICvCoMKgwqDCoCByYW5nZSA9IHBv cnQtPnBvcnRubyAvIEJJVFNfUEVSX0JZVEU7Cj4gPiArwqDCoMKgwqAgcG9ydF9tYXNrLm1hc2tb cmFuZ2VdID0gfkJJVChwb3J0LT5wb3J0bm8gJSBCSVRTX1BFUl9CWVRFKTsKPiA+ICvCoMKgwqDC oCB2Y2FwX3J1bGVfYWRkX2tleV91NzIocnVsZSwgVkNBUF9LRl9JRl9JR1JfUE9SVF9NQVNLLCAm cG9ydF9tYXNrKTsKPiA+ICt9Cj4gPiArCj4gPiArLyogQVBJIGNhbGxiYWNrIHVzZWQgZm9yIHZh bGlkYXRpbmcgYSBmaWVsZCBrZXlzZXQgKGNoZWNrIHRoZSBwb3J0IGtleXNldHMpICovCj4gPiAr c3RhdGljIGVudW0gdmNhcF9rZXlmaWVsZF9zZXQKPiA+ICtzcGFyeDVfdmNhcF92YWxpZGF0ZV9r ZXlzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2Y2FwX2FkbWluICphZG1pbiwKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IHZjYXBfcnVsZSAqcnVsZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IHZjYXBfa2V5c2V0X2xpc3QgKmtzbGlzdCwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTE2IGwzX3Byb3Rv KQo+ID4gK3sKPiA+ICvCoMKgwqDCoCBpZiAoIWtzbGlzdCB8fCBrc2xpc3QtPmNudCA9PSAwKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gVkNBUF9LRlNfTk9fVkFMVUU7Cj4g PiArwqDCoMKgwqAgLyogZm9yIG5vdyBqdXN0IHJldHVybiB3aGF0ZXZlciB0aGUgQVBJIHN1Z2dl c3RzICovCj4gPiArwqDCoMKgwqAgcmV0dXJuIGtzbGlzdC0+a2V5c2V0c1swXTsKPiA+ICt9Cj4g PiArCj4gPiArLyogQVBJIGNhbGxiYWNrIHVzZWQgZm9yIGFkZGluZyBkZWZhdWx0IGZpZWxkcyB0 byBhIHJ1bGUgKi8KPiA+ICtzdGF0aWMgdm9pZCBzcGFyeDVfdmNhcF9hZGRfZGVmYXVsdF9maWVs ZHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0 cnVjdCB2Y2FwX2FkbWluICphZG1pbiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IHZjYXBfcnVsZSAqcnVsZSkKPiA+ICt7Cj4gPiArwqDCoMKgwqAgY29uc3Qgc3RydWN0IHZjYXBf ZmllbGQgKmZpZWxkOwo+ID4gKwo+ID4gK8KgwqDCoMKgIGZpZWxkID0gdmNhcF9sb29rdXBfa2V5 ZmllbGQocnVsZSwgVkNBUF9LRl9JRl9JR1JfUE9SVF9NQVNLKTsKPiA+ICvCoMKgwqDCoCBpZiAo ZmllbGQgJiYgZmllbGQtPndpZHRoID09IFNQWDVfUE9SVFMpCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNwYXJ4NV92Y2FwX2FkZF93aWRlX3BvcnRfbWFzayhydWxlLCBuZGV2KTsKPiA+ ICvCoMKgwqDCoCBlbHNlIGlmIChmaWVsZCAmJiBmaWVsZC0+d2lkdGggPT0gQklUU19QRVJfVFlQ RSh1MzIpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGFyeDVfdmNhcF9hZGRfcmFu Z2VfcG9ydF9tYXNrKHJ1bGUsIG5kZXYpOwo+ID4gK8KgwqDCoMKgIGVsc2UKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlczolZDogJXM6IGNvdWxkIG5vdCBhZGQgYW4gaW5n cmVzcyBwb3J0IG1hc2sgZm9yOiAlc1xuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgX19MSU5FX18sIG5ldGRldl9uYW1lKG5kZXYpLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwYXJ4NV92Y2FwX2tleXNl dF9uYW1lKG5kZXYsIHJ1bGUtPmtleXNldCkpOwo+ID4gK8KgwqDCoMKgIC8qIGFkZCB0aGUgbG9v a3VwIGJpdCAqLwo+ID4gK8KgwqDCoMKgIGlmIChzcGFyeDVfdmNhcF9pczJfaXNfZmlyc3RfY2hh aW4ocnVsZSkpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZjYXBfcnVsZV9hZGRfa2V5 X2JpdChydWxlLCBWQ0FQX0tGX0xPT0tVUF9GSVJTVF9JUywgVkNBUF9CSVRfMSk7Cj4gPiArwqDC oMKgwqAgZWxzZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2Y2FwX3J1bGVfYWRkX2tl eV9iaXQocnVsZSwgVkNBUF9LRl9MT09LVVBfRklSU1RfSVMsIFZDQVBfQklUXzApOwo+ID4gK30K PiA+ICsKPiA+ICsvKiBBUEkgY2FsbGJhY2sgdXNlZCBmb3IgZXJhc2luZyB0aGUgdmNhcCBjYWNo ZSBhcmVhIChub3QgdGhlIHJlZ2lzdGVyIGFyZWEpICovCj4gPiArc3RhdGljIHZvaWQgc3Bhcng1 X3ZjYXBfY2FjaGVfZXJhc2Uoc3RydWN0IHZjYXBfYWRtaW4gKmFkbWluKQo+ID4gK3sKPiA+ICvC oMKgwqDCoCBtZW1zZXQoYWRtaW4tPmNhY2hlLmtleXN0cmVhbSwgMCwgU1RSRUFNU0laRSk7Cj4g PiArwqDCoMKgwqAgbWVtc2V0KGFkbWluLT5jYWNoZS5tYXNrc3RyZWFtLCAwLCBTVFJFQU1TSVpF KTsKPiA+ICvCoMKgwqDCoCBtZW1zZXQoYWRtaW4tPmNhY2hlLmFjdGlvbnN0cmVhbSwgMCwgU1RS RUFNU0laRSk7Cj4gPiArwqDCoMKgwqAgbWVtc2V0KCZhZG1pbi0+Y2FjaGUuY291bnRlciwgMCwg c2l6ZW9mKGFkbWluLT5jYWNoZS5jb3VudGVyKSk7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIEFQSSBj YWxsYmFjayB1c2VkIGZvciB3cml0aW5nIHRvIHRoZSBWQ0FQIGNhY2hlICovCj4gPiArc3RhdGlj IHZvaWQgc3Bhcng1X3ZjYXBfY2FjaGVfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgdmNhcF9hZG1pbiAqYWRtaW4sCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIHZj YXBfc2VsZWN0aW9uIHNlbCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBzdGFydCwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUz MiBjb3VudCkKPiA+ICt7Cj4gPiArwqDCoMKgwqAgc3RydWN0IHNwYXJ4NV9wb3J0ICpwb3J0ID0g bmV0ZGV2X3ByaXYobmRldik7Cj4gPiArwqDCoMKgwqAgc3RydWN0IHNwYXJ4NSAqc3Bhcng1ID0g cG9ydC0+c3Bhcng1Owo+ID4gK8KgwqDCoMKgIHUzMiAqa2V5c3RyLCAqbXNrc3RyLCAqYWN0c3Ry Owo+ID4gK8KgwqDCoMKgIGludCBpZHg7Cj4gPiArCj4gPiArwqDCoMKgwqAga2V5c3RyID0gJmFk bWluLT5jYWNoZS5rZXlzdHJlYW1bc3RhcnRdOwo+ID4gK8KgwqDCoMKgIG1za3N0ciA9ICZhZG1p bi0+Y2FjaGUubWFza3N0cmVhbVtzdGFydF07Cj4gPiArwqDCoMKgwqAgYWN0c3RyID0gJmFkbWlu LT5jYWNoZS5hY3Rpb25zdHJlYW1bc3RhcnRdOwo+ID4gK8KgwqDCoMKgIHN3aXRjaCAoc2VsKSB7 Cj4gPiArwqDCoMKgwqAgY2FzZSBWQ0FQX1NFTF9FTlRSWToKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZm9yIChpZHggPSAwOyBpZHggPCBjb3VudDsgKytpZHgpIHsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIEF2b2lkICdtYXRjaC1vZmYnIGJ5 IHNldHRpbmcgdmFsdWUgJiBtYXNrICovCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzcHg1X3dyKGtleXN0cltpZHhdICYgbXNrc3RyW2lkeF0sIHNwYXJ4NSwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBWQ0FQX1NVUEVSX1ZDQVBfRU5UUllfREFUKGlkeCkpOwo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3B4NV93cih+bXNrc3RyW2lkeF0sIHNwYXJ4NSwK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBWQ0FQX1NVUEVSX1ZDQVBfTUFTS19EQVQoaWR4KSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIH0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiArwqDC oMKgwqAgY2FzZSBWQ0FQX1NFTF9BQ1RJT046Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGZvciAoaWR4ID0gMDsgaWR4IDwgY291bnQ7ICsraWR4KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3B4NV93cihhY3RzdHJbaWR4XSwgc3Bhcng1LAo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IFZDQVBfU1VQRVJfVkNBUF9BQ1RJT05fREFUKGlkeCkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBicmVhazsKPiA+ICvCoMKgwqDCoCBjYXNlIFZDQVBfU0VMX0FMTDoKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJfZXJyKCIlczolZDogY2Fubm90IHdyaXRlIGFsbCBzdHJl YW1zIGF0IG9uY2VcbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgX19mdW5jX18sIF9fTElORV9fKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4gPiArwqDCoMKgwqAgZGVmYXVsdDoKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4gPiArwqDCoMKgwqAgfQo+ID4gK30KPiA+ICsKPiA+ICsvKiBBUEkgY2FsbGJhY2sg dXNlZCBmb3IgcmVhZGluZyBmcm9tIHRoZSBWQ0FQIGludG8gdGhlIFZDQVAgY2FjaGUgKi8KPiA+ ICtzdGF0aWMgdm9pZCBzcGFyeDVfdmNhcF9jYWNoZV9yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpu ZGV2LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2Y2FwX2FkbWluICphZG1pbiwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVt IHZjYXBfc2VsZWN0aW9uIHNlbCwgdTMyIHN0YXJ0LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBjb3VudCkKPiA+ ICt7Cj4gPiArwqDCoMKgwqAgLyogdGhpcyB3aWxsIGJlIGFkZGVkIGxhdGVyICovCj4gPiArfQo+ ID4gKwo+ID4gKy8qIEFQSSBjYWxsYmFjayB1c2VkIGZvciBpbml0aWFsaXppbmcgYSBWQ0FQIGFk ZHJlc3MgcmFuZ2UgKi8KPiA+ICtzdGF0aWMgdm9pZCBzcGFyeDVfdmNhcF9yYW5nZV9pbml0KHN0 cnVjdCBuZXRfZGV2aWNlICpuZGV2LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2Y2FwX2FkbWluICphZG1p biwgdTMyIGFkZHIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGNvdW50KQo+ID4gK3sKPiA+ICvCoMKgwqDCoCBz dHJ1Y3Qgc3Bhcng1X3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihuZGV2KTsKPiA+ICvCoMKgwqDC oCBzdHJ1Y3Qgc3Bhcng1ICpzcGFyeDUgPSBwb3J0LT5zcGFyeDU7Cj4gPiArCj4gPiArwqDCoMKg wqAgX3NwYXJ4NV92Y2FwX3JhbmdlX2luaXQoc3Bhcng1LCBhZG1pbiwgYWRkciwgY291bnQpOwo+ ID4gK30KPiA+ICsKPiA+ICsvKiBBUEkgY2FsbGJhY2sgdXNlZCBmb3IgdXBkYXRpbmcgdGhlIFZD QVAgY2FjaGUgKi8KPiA+ICtzdGF0aWMgdm9pZCBzcGFyeDVfdmNhcF91cGRhdGUoc3RydWN0IG5l dF9kZXZpY2UgKm5kZXYsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2Y2FwX2FkbWluICphZG1pbiwgZW51bSB2Y2FwX2Nv bW1hbmQgY21kLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBlbnVtIHZjYXBfc2VsZWN0aW9uIHNlbCwgdTMyIGFkZHIpCj4gPiArewo+ ID4gK8KgwqDCoMKgIHN0cnVjdCBzcGFyeDVfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KG5kZXYp Owo+ID4gK8KgwqDCoMKgIHN0cnVjdCBzcGFyeDUgKnNwYXJ4NSA9IHBvcnQtPnNwYXJ4NTsKPiA+ ICvCoMKgwqDCoCBib29sIGNsZWFyOwo+ID4gKwo+ID4gK8KgwqDCoMKgIGNsZWFyID0gKGNtZCA9 PSBWQ0FQX0NNRF9JTklUSUFMSVpFKTsKPiA+ICvCoMKgwqDCoCBzcHg1X3dyKFZDQVBfU1VQRVJf Q0ZHX01WX05VTV9QT1NfU0VUKDApIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVkNB UF9TVVBFUl9DRkdfTVZfU0laRV9TRVQoMCksIHNwYXJ4NSwgVkNBUF9TVVBFUl9DRkcpOwo+ID4g K8KgwqDCoMKgIHNweDVfd3IoVkNBUF9TVVBFUl9DVFJMX1VQREFURV9DTURfU0VUKGNtZCkgfAo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQ0FQX1NVUEVSX0NUUkxfVVBEQVRFX0VOVFJZ X0RJU19TRVQoKFZDQVBfU0VMX0VOVFJZICYgc2VsKSA9PSAwKSB8Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIFZDQVBfU1VQRVJfQ1RSTF9VUERBVEVfQUNUSU9OX0RJU19TRVQoKFZDQVBf U0VMX0FDVElPTiAmIHNlbCkgPT0gMCkgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBW Q0FQX1NVUEVSX0NUUkxfVVBEQVRFX0NOVF9ESVNfU0VUKChWQ0FQX1NFTF9DT1VOVEVSICYgc2Vs KSA9PSAwKSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFZDQVBfU1VQRVJfQ1RSTF9V UERBVEVfQUREUl9TRVQoYWRkcikgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBWQ0FQ X1NVUEVSX0NUUkxfQ0xFQVJfQ0FDSEVfU0VUKGNsZWFyKSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFZDQVBfU1VQRVJfQ1RSTF9VUERBVEVfU0hPVF9TRVQodHJ1ZSksCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwYXJ4NSwgVkNBUF9TVVBFUl9DVFJMKTsKPiA+ICvCoMKg wqDCoCBzcGFyeDVfdmNhcF93YWl0X3N1cGVyX3VwZGF0ZShzcGFyeDUpOwo+ID4gK30KPiA+ICsK PiA+ICsvKiBBUEkgY2FsbGJhY2sgdXNlZCBmb3IgbW92aW5nIGEgYmxvY2sgb2YgcnVsZXMgaW4g dGhlIFZDQVAgKi8KPiA+ICtzdGF0aWMgdm9pZCBzcGFyeDVfdmNhcF9tb3ZlKHN0cnVjdCBuZXRf ZGV2aWNlICpuZGV2LCBzdHJ1Y3QgdmNhcF9hZG1pbiAqYWRtaW4sCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGFkZHIsIGludCBvZmZz ZXQsIGludCBjb3VudCkKPiA+ICt7Cj4gPiArwqDCoMKgwqAgLyogdGhpcyB3aWxsIGJlIGFkZGVk IGxhdGVyICovCj4gPiArfQo+ID4gKwo+ID4gKy8qIFByb3ZpZGUgcG9ydCBpbmZvcm1hdGlvbiB2 aWEgYSBjYWxsYmFjayBpbnRlcmZhY2UgKi8KPiA+ICtzdGF0aWMgaW50IHNwYXJ4NV9wb3J0X2lu Zm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gdmNhcF90eXBlIHZ0eXBlLAo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgKCpwZiko dm9pZCAqb3V0LCBpbnQgYXJnLCBjb25zdCBjaGFyICpmbXQsIC4uLiksCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZvaWQgKm91dCwgaW50IGFy ZykKPiA+ICt7Cj4gPiArwqDCoMKgwqAgLyogdGhpcyB3aWxsIGJlIGFkZGVkIGxhdGVyICovCj4g PiArwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gKy8qIEFQSSBjYWxsYmFjayBv cGVyYXRpb25zOiBvbmx5IElTMiBpcyBzdXBwb3J0ZWQgZm9yIG5vdyAqLwo+ID4gK3N0YXRpYyBz dHJ1Y3QgdmNhcF9vcGVyYXRpb25zIHNwYXJ4NV92Y2FwX29wcyA9IHsKPiA+ICvCoMKgwqDCoCAu dmFsaWRhdGVfa2V5c2V0ID0gc3Bhcng1X3ZjYXBfdmFsaWRhdGVfa2V5c2V0LAo+ID4gK8KgwqDC oMKgIC5hZGRfZGVmYXVsdF9maWVsZHMgPSBzcGFyeDVfdmNhcF9hZGRfZGVmYXVsdF9maWVsZHMs Cj4gPiArwqDCoMKgwqAgLmNhY2hlX2VyYXNlID0gc3Bhcng1X3ZjYXBfY2FjaGVfZXJhc2UsCj4g PiArwqDCoMKgwqAgLmNhY2hlX3dyaXRlID0gc3Bhcng1X3ZjYXBfY2FjaGVfd3JpdGUsCj4gPiAr wqDCoMKgwqAgLmNhY2hlX3JlYWQgPSBzcGFyeDVfdmNhcF9jYWNoZV9yZWFkLAo+ID4gK8KgwqDC oMKgIC5pbml0ID0gc3Bhcng1X3ZjYXBfcmFuZ2VfaW5pdCwKPiA+ICvCoMKgwqDCoCAudXBkYXRl ID0gc3Bhcng1X3ZjYXBfdXBkYXRlLAo+ID4gK8KgwqDCoMKgIC5tb3ZlID0gc3Bhcng1X3ZjYXBf bW92ZSwKPiA+ICvCoMKgwqDCoCAucG9ydF9pbmZvID0gc3Bhcng1X3BvcnRfaW5mbywKPiA+ICt9 Owo+ID4gKwo+ID4gKy8qIEVuYWJsZSBsb29rdXBzIHBlciBwb3J0IGFuZCBzZXQgdGhlIGtleXNl dCBnZW5lcmF0aW9uOiBvbmx5IElTMiBmb3Igbm93ICovCj4gPiArc3RhdGljIHZvaWQgc3Bhcng1 X3ZjYXBfcG9ydF9rZXlfc2VsZWN0aW9uKHN0cnVjdCBzcGFyeDUgKnNwYXJ4NSwKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZjYXBfYWRtaW4gKmFkbWluKQo+ID4gK3sKPiA+ICvC oMKgwqDCoCBpbnQgcG9ydG5vLCBsb29rdXA7Cj4gPiArwqDCoMKgwqAgdTMyIGtleXNlbDsKPiA+ ICsKPiA+ICvCoMKgwqDCoCAvKiBlbmFibGUgYWxsIDQgbG9va3VwcyBvbiBhbGwgcG9ydHMgKi8K PiA+ICvCoMKgwqDCoCBmb3IgKHBvcnRubyA9IDA7IHBvcnRubyA8IFNQWDVfUE9SVFM7ICsrcG9y dG5vKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcHg1X3dyKEFOQV9BQ0xfVkNBUF9T Ml9DRkdfU0VDX0VOQV9TRVQoMHhmKSwgc3Bhcng1LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgQU5BX0FDTF9WQ0FQX1MyX0NGRyhwb3J0bm8pKTsKPiA+ICsK PiA+ICvCoMKgwqDCoCAvKiBhbGwgdHJhZmZpYyB0eXBlcyBnZW5lcmF0ZSB0aGUgTUFDX0VUWVBF IGtleXNldCBmb3Igbm93IGluIGFsbAo+ID4gK8KgwqDCoMKgwqAgKiBsb29rdXBzIG9uIGFsbCBw b3J0cwo+ID4gK8KgwqDCoMKgwqAgKi8KPiA+ICvCoMKgwqDCoCBrZXlzZWwgPSBBTkFfQUNMX1ZD QVBfUzJfS0VZX1NFTF9LRVlfU0VMX0VOQV9TRVQodHJ1ZSkgfAo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBBTkFfQUNMX1ZDQVBfUzJfS0VZX1NFTF9OT05fRVRIX0tFWV9TRUxfU0VUKFZD QVBfSVMyX1BTX05PTkVUSF9NQUNfRVRZUEUpIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgQU5BX0FDTF9WQ0FQX1MyX0tFWV9TRUxfSVA0X01DX0tFWV9TRUxfU0VUKFZDQVBfSVMyX1BT X0lQVjRfTUNfTUFDX0VUWVBFKSB8Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFOQV9B Q0xfVkNBUF9TMl9LRVlfU0VMX0lQNF9VQ19LRVlfU0VMX1NFVChWQ0FQX0lTMl9QU19JUFY0X1VD X01BQ19FVFlQRSkgfAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBTkFfQUNMX1ZDQVBf UzJfS0VZX1NFTF9JUDZfTUNfS0VZX1NFTF9TRVQoVkNBUF9JUzJfUFNfSVBWNl9NQ19NQUNfRVRZ UEUpIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQU5BX0FDTF9WQ0FQX1MyX0tFWV9T RUxfSVA2X1VDX0tFWV9TRUxfU0VUKFZDQVBfSVMyX1BTX0lQVjZfVUNfTUFDX0VUWVBFKSB8Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFOQV9BQ0xfVkNBUF9TMl9LRVlfU0VMX0FSUF9L RVlfU0VMX1NFVChWQ0FQX0lTMl9QU19BUlBfTUFDX0VUWVBFKTsKPiA+ICvCoMKgwqDCoCBmb3Ig KGxvb2t1cCA9IDA7IGxvb2t1cCA8IGFkbWluLT5sb29rdXBzOyArK2xvb2t1cCkgewo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3IgKHBvcnRubyA9IDA7IHBvcnRubyA8IFNQWDVfUE9S VFM7ICsrcG9ydG5vKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzcHg1X3dyKGtleXNlbCwgc3Bhcng1LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFOQV9BQ0xfVkNBUF9TMl9LRVlfU0VM KHBvcnRubywgbG9va3VwKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+ICvC oMKgwqDCoCB9Cj4gPiArfQo+ID4gKwo+ID4gKy8qIERpc2FibGUgbG9va3VwcyBwZXIgcG9ydCBh bmQgc2V0IHRoZSBrZXlzZXQgZ2VuZXJhdGlvbjogb25seSBJUzIgZm9yIG5vdyAqLwo+ID4gK3N0 YXRpYyB2b2lkIHNwYXJ4NV92Y2FwX3BvcnRfa2V5X2Rlc2VsZWN0aW9uKHN0cnVjdCBzcGFyeDUg KnNwYXJ4NSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB2Y2FwX2FkbWlu ICphZG1pbikKPiA+ICt7Cj4gPiArwqDCoMKgwqAgaW50IHBvcnRubzsKPiA+ICsKPiA+ICvCoMKg wqDCoCBmb3IgKHBvcnRubyA9IDA7IHBvcnRubyA8IFNQWDVfUE9SVFM7ICsrcG9ydG5vKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcHg1X3JtdyhBTkFfQUNMX1ZDQVBfUzJfQ0ZHX1NF Q19FTkFfU0VUKDApLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBBTkFfQUNMX1ZDQVBfUzJfQ0ZHX1NFQ19FTkEsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwYXJ4NSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQU5BX0FDTF9WQ0FQX1MyX0NGRyhwb3J0bm8pKTsKPiA+ ICt9Cj4gPiArCj4gPiDCoHN0YXRpYyB2b2lkIHNwYXJ4NV92Y2FwX2FkbWluX2ZyZWUoc3RydWN0 IHZjYXBfYWRtaW4gKmFkbWluKQo+ID4gwqB7Cj4gPiDCoMKgwqDCoMKgIGlmICghYWRtaW4pCj4g PiBAQCAtMTM4LDYgKzQ3Niw3IEBAIGludCBzcGFyeDVfdmNhcF9pbml0KHN0cnVjdCBzcGFyeDUg KnNwYXJ4NSkKPiA+IMKgwqDCoMKgwqDCoCAqwqDCoCAtIExpc3RzIG9mIHJ1bGVzCj4gPiDCoMKg wqDCoMKgwqAgKsKgwqAgLSBBZGRyZXNzIGluZm9ybWF0aW9uCj4gPiDCoMKgwqDCoMKgwqAgKsKg wqAgLSBJbml0aWFsaXplIFZDQVAgYmxvY2tzCj4gPiArwqDCoMKgwqDCoCAqwqDCoCAtIENvbmZp Z3VyZSBwb3J0IGtleXNldHMKPiA+IMKgwqDCoMKgwqDCoCAqLwo+ID4gwqDCoMKgwqDCoCBjdHJs ID0ga3phbGxvYyhzaXplb2YoKmN0cmwpLCBHRlBfS0VSTkVMKTsKPiA+IMKgwqDCoMKgwqAgaWYg KCFjdHJsKQo+ID4gQEAgLTE0Nyw2ICs0ODYsOCBAQCBpbnQgc3Bhcng1X3ZjYXBfaW5pdChzdHJ1 Y3Qgc3Bhcng1ICpzcGFyeDUpCj4gPiDCoMKgwqDCoMKgIC8qIHNlbGVjdCB0aGUgc3Bhcng1IFZD QVAgbW9kZWwgKi8KPiA+IMKgwqDCoMKgwqAgY3RybC0+dmNhcHMgPSBzcGFyeDVfdmNhcHM7Cj4g PiDCoMKgwqDCoMKgIGN0cmwtPnN0YXRzID0gJnNwYXJ4NV92Y2FwX3N0YXRzOwo+ID4gK8KgwqDC oMKgIC8qIFNldHVwIGNhbGxiYWNrcyB0byBhbGxvdyB0aGUgQVBJIHRvIHVzZSB0aGUgVkNBUCBI VyAqLwo+ID4gK8KgwqDCoMKgIGN0cmwtPm9wcyA9ICZzcGFyeDVfdmNhcF9vcHM7Cj4gPiAKPiA+ IMKgwqDCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmN0cmwtPmxpc3QpOwo+ID4gwqDCoMKgwqDCoCBm b3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoc3Bhcng1X3ZjYXBfaW5zdF9jZmcpOyArK2lk eCkgewo+ID4gQEAgLTE1OSw2ICs1MDAsOSBAQCBpbnQgc3Bhcng1X3ZjYXBfaW5pdChzdHJ1Y3Qg c3Bhcng1ICpzcGFyeDUpCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIGVycjsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwYXJ4NV92Y2FwX2Jsb2NrX2FsbG9jKHNwYXJ4NSwg YWRtaW4sIGNmZyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwYXJ4NV92Y2FwX2Js b2NrX2luaXQoc3Bhcng1LCBhZG1pbik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlm IChjZmctPnZpbnN0ID09IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzcGFyeDVfdmNhcF9wb3J0X2tleV9zZWxlY3Rpb24oc3Bhcng1LCBhZG1pbik7Cj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaXN0X2FkZF90YWlsKCZhZG1pbi0+bGlzdCwg JmN0cmwtPmxpc3QpOwo+ID4gwqDCoMKgwqDCoCB9Cj4gPiAKPiA+IEBAIC0xNzQsNiArNTE4LDcg QEAgdm9pZCBzcGFyeDVfdmNhcF9kZXN0cm95KHN0cnVjdCBzcGFyeDUgKnNwYXJ4NSkKPiA+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPiA+IAo+ID4gwqDCoMKgwqDCoCBsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWRtaW4sIGFkbWluX25leHQsICZjdHJsLT5saXN0LCBsaXN0 KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwYXJ4NV92Y2FwX3BvcnRfa2V5X2Rl c2VsZWN0aW9uKHNwYXJ4NSwgYWRtaW4pOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bGlzdF9kZWwoJmFkbWluLT5saXN0KTsKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNw YXJ4NV92Y2FwX2FkbWluX2ZyZWUoYWRtaW4pOwo+ID4gwqDCoMKgwqDCoCB9Cj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3ZjYXAvdmNhcF9hcGkuYwo+ID4g Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvdmNhcC92Y2FwX2FwaS5jCj4gPiBpbmRl eCBhYTZiNDUxZDc5YTYuLmQ5MjlkMmQwMGI2YyAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvbmV0 L2V0aGVybmV0L21pY3JvY2hpcC92Y2FwL3ZjYXBfYXBpLmMKPiA+ICsrKyBiL2RyaXZlcnMvbmV0 L2V0aGVybmV0L21pY3JvY2hpcC92Y2FwL3ZjYXBfYXBpLmMKPiA+IEBAIC0yMSw2ICsyMSwxNyBA QCBzdHJ1Y3QgdmNhcF9ydWxlX2ludGVybmFsIHsKPiA+IMKgwqDCoMKgwqAgdTMyIGFkZHI7IC8q IGFkZHJlc3MgaW4gdGhlIFZDQVAgYXQgaW5zZXJ0aW9uICovCj4gPiDCoH07Cj4gPiAKPiA+ICsv KiBSZXR1cm4gdGhlIGxpc3Qgb2Yga2V5ZmllbGRzIGZvciB0aGUga2V5c2V0ICovCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCB2Y2FwX2ZpZWxkICp2Y2FwX2tleWZpZWxkcyhzdHJ1Y3QgdmNhcF9j b250cm9sICp2Y3RybCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIHZj YXBfdHlwZSB2dCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIHZjYXBf a2V5ZmllbGRfc2V0IGtleXNldCkKPiA+ICt7Cj4gPiArwqDCoMKgwqAgLyogQ2hlY2sgdGhhdCB0 aGUga2V5c2V0IGV4aXN0cyBpbiB0aGUgdmNhcCBrZXlzZXQgbGlzdCAqLwo+ID4gK8KgwqDCoMKg IGlmIChrZXlzZXQgPj0gdmN0cmwtPnZjYXBzW3Z0XS5rZXlmaWVsZF9zZXRfc2l6ZSkKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4gPiArwqDCoMKgwqAgcmV0dXJu IHZjdHJsLT52Y2Fwc1t2dF0ua2V5ZmllbGRfc2V0X21hcFtrZXlzZXRdOwo+ID4gK30KPiA+ICsK PiA+IMKgLyogVXBkYXRlIHRoZSBrZXlzZXQgZm9yIHRoZSBydWxlICovCj4gPiDCoGludCB2Y2Fw X3NldF9ydWxlX3NldF9rZXlzZXQoc3RydWN0IHZjYXBfcnVsZSAqcnVsZSwKPiA+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51bSB2Y2FwX2tl eWZpZWxkX3NldCBrZXlzZXQpCj4gPiBAQCAtMjI3LDYgKzIzOCwyNCBAQCBpbnQgdmNhcF9kZWxf cnVsZShzdHJ1Y3QgdmNhcF9jb250cm9sICp2Y3RybCwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYs IHUzMgo+ID4gaWQpCj4gPiDCoH0KPiA+IMKgRVhQT1JUX1NZTUJPTF9HUEwodmNhcF9kZWxfcnVs ZSk7Cj4gPiAKPiA+ICsvKiBGaW5kIGluZm9ybWF0aW9uIG9uIGEga2V5IGZpZWxkIGluIGEgcnVs ZSAqLwo+ID4gK2NvbnN0IHN0cnVjdCB2Y2FwX2ZpZWxkICp2Y2FwX2xvb2t1cF9rZXlmaWVsZChz dHJ1Y3QgdmNhcF9ydWxlICpydWxlLAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl bnVtIHZjYXBfa2V5X2ZpZWxkIGtleSkKPiA+ICt7Cj4gPiArwqDCoMKgwqAgc3RydWN0IHZjYXBf cnVsZV9pbnRlcm5hbCAqcmkgPSAoc3RydWN0IHZjYXBfcnVsZV9pbnRlcm5hbCAqKXJ1bGU7Cj4g PiArwqDCoMKgwqAgZW51bSB2Y2FwX2tleWZpZWxkX3NldCBrZXlzZXQgPSBydWxlLT5rZXlzZXQ7 Cj4gPiArwqDCoMKgwqAgZW51bSB2Y2FwX3R5cGUgdnQgPSByaS0+YWRtaW4tPnZ0eXBlOwo+ID4g K8KgwqDCoMKgIGNvbnN0IHN0cnVjdCB2Y2FwX2ZpZWxkICpmaWVsZHM7Cj4gPiArCj4gPiArwqDC oMKgwqAgaWYgKGtleXNldCA9PSBWQ0FQX0tGU19OT19WQUxVRSkKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4gPiArwqDCoMKgwqAgZmllbGRzID0gdmNhcF9rZXlm aWVsZHMocmktPnZjdHJsLCB2dCwga2V5c2V0KTsKPiA+ICvCoMKgwqDCoCBpZiAoIWZpZWxkcykK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4gPiArwqDCoMKgwqAg cmV0dXJuICZmaWVsZHNba2V5XTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTF9HUEwodmNhcF9s b29rdXBfa2V5ZmllbGQpOwo+ID4gKwo+ID4gwqBzdGF0aWMgdm9pZCB2Y2FwX2NvcHlfZnJvbV9j bGllbnRfa2V5ZmllbGQoc3RydWN0IHZjYXBfcnVsZSAqcnVsZSwKPiA+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCB2Y2FwX2NsaWVudF9rZXlmaWVsZCAqZmllbGQsCj4gPiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgdmNhcF9jbGllbnRfa2V5ZmllbGRfZGF0YSAqZGF0YSkK PiA+IEBAIC0yNTMsNiArMjgyLDQ3IEBAIHN0YXRpYyBpbnQgdmNhcF9ydWxlX2FkZF9rZXkoc3Ry dWN0IHZjYXBfcnVsZSAqcnVsZSwKPiA+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiDCoH0KPiA+ IAo+ID4gK3N0YXRpYyB2b2lkIHZjYXBfcnVsZV9zZXRfa2V5X2JpdHNpemUoc3RydWN0IHZjYXBf dTFfa2V5ICp1MSwgZW51bSB2Y2FwX2JpdCB2YWwpCj4gPiArewo+ID4gK8KgwqDCoMKgIHN3aXRj aCAodmFsKSB7Cj4gPiArwqDCoMKgwqAgY2FzZSBWQ0FQX0JJVF8wOgo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB1MS0+dmFsdWUgPSAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1MS0+bWFzayA9IDE7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ID4g K8KgwqDCoMKgIGNhc2UgVkNBUF9CSVRfMToKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dTEtPnZhbHVlID0gMTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTEtPm1hc2sgPSAx Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ICvCoMKgwqDCoCBjYXNl IFZDQVBfQklUX0FOWToKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTEtPnZhbHVlID0g MDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTEtPm1hc2sgPSAwOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ICvCoMKgwqDCoCB9Cj4gPiArfQo+ID4gKwo+ ID4gKy8qIEFkZCBhIGJpdCBrZXkgd2l0aCB2YWx1ZSBhbmQgbWFzayB0byB0aGUgcnVsZSAqLwo+ ID4gK2ludCB2Y2FwX3J1bGVfYWRkX2tleV9iaXQoc3RydWN0IHZjYXBfcnVsZSAqcnVsZSwgZW51 bSB2Y2FwX2tleV9maWVsZCBrZXksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZW51bSB2Y2FwX2JpdCB2YWwpCj4gPiArewo+ID4gK8KgwqDCoMKgIHN0 cnVjdCB2Y2FwX2NsaWVudF9rZXlmaWVsZF9kYXRhIGRhdGE7Cj4gPiArCj4gPiArwqDCoMKgwqAg dmNhcF9ydWxlX3NldF9rZXlfYml0c2l6ZSgmZGF0YS51MSwgdmFsKTsKPiA+ICvCoMKgwqDCoCBy ZXR1cm4gdmNhcF9ydWxlX2FkZF9rZXkocnVsZSwga2V5LCBWQ0FQX0ZJRUxEX0JJVCwgJmRhdGEp Owo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTCh2Y2FwX3J1bGVfYWRkX2tleV9iaXQpOwo+ ID4gKwo+ID4gKy8qIEFkZCBhIDMyIGJpdCBrZXkgZmllbGQgd2l0aCB2YWx1ZSBhbmQgbWFzayB0 byB0aGUgcnVsZSAqLwo+ID4gK2ludCB2Y2FwX3J1bGVfYWRkX2tleV91MzIoc3RydWN0IHZjYXBf cnVsZSAqcnVsZSwgZW51bSB2Y2FwX2tleV9maWVsZCBrZXksCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIHZhbHVlLCB1MzIgbWFzaykKPiA+ICt7 Cj4gPiArwqDCoMKgwqAgc3RydWN0IHZjYXBfY2xpZW50X2tleWZpZWxkX2RhdGEgZGF0YTsKPiA+ ICsKPiA+ICvCoMKgwqDCoCBkYXRhLnUzMi52YWx1ZSA9IHZhbHVlOwo+ID4gK8KgwqDCoMKgIGRh dGEudTMyLm1hc2sgPSBtYXNrOwo+ID4gK8KgwqDCoMKgIHJldHVybiB2Y2FwX3J1bGVfYWRkX2tl eShydWxlLCBrZXksIFZDQVBfRklFTERfVTMyLCAmZGF0YSk7Cj4gPiArfQo+ID4gK0VYUE9SVF9T WU1CT0xfR1BMKHZjYXBfcnVsZV9hZGRfa2V5X3UzMik7Cj4gPiArCj4gPiDCoC8qIEFkZCBhIDQ4 IGJpdCBrZXkgd2l0aCB2YWx1ZSBhbmQgbWFzayB0byB0aGUgcnVsZSAqLwo+ID4gwqBpbnQgdmNh cF9ydWxlX2FkZF9rZXlfdTQ4KHN0cnVjdCB2Y2FwX3J1bGUgKnJ1bGUsIGVudW0gdmNhcF9rZXlf ZmllbGQga2V5LAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgdmNhcF91NDhfa2V5ICpmaWVsZHZhbCkKPiA+IEBAIC0yNjQsNiArMzM0LDE3 IEBAIGludCB2Y2FwX3J1bGVfYWRkX2tleV91NDgoc3RydWN0IHZjYXBfcnVsZSAqcnVsZSwgZW51 bSB2Y2FwX2tleV9maWVsZCBrZXksCj4gPiDCoH0KPiA+IMKgRVhQT1JUX1NZTUJPTF9HUEwodmNh cF9ydWxlX2FkZF9rZXlfdTQ4KTsKPiA+IAo+ID4gKy8qIEFkZCBhIDcyIGJpdCBrZXkgd2l0aCB2 YWx1ZSBhbmQgbWFzayB0byB0aGUgcnVsZSAqLwo+ID4gK2ludCB2Y2FwX3J1bGVfYWRkX2tleV91 NzIoc3RydWN0IHZjYXBfcnVsZSAqcnVsZSwgZW51bSB2Y2FwX2tleV9maWVsZCBrZXksCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZjYXBf dTcyX2tleSAqZmllbGR2YWwpCj4gPiArewo+ID4gK8KgwqDCoMKgIHN0cnVjdCB2Y2FwX2NsaWVu dF9rZXlmaWVsZF9kYXRhIGRhdGE7Cj4gPiArCj4gPiArwqDCoMKgwqAgbWVtY3B5KCZkYXRhLnU3 MiwgZmllbGR2YWwsIHNpemVvZihkYXRhLnU3MikpOwo+ID4gK8KgwqDCoMKgIHJldHVybiB2Y2Fw X3J1bGVfYWRkX2tleShydWxlLCBrZXksIFZDQVBfRklFTERfVTcyLCAmZGF0YSk7Cj4gPiArfQo+ ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHZjYXBfcnVsZV9hZGRfa2V5X3U3Mik7Cj4gPiArCj4gPiDC oHN0YXRpYyB2b2lkIHZjYXBfY29weV9mcm9tX2NsaWVudF9hY3Rpb25maWVsZChzdHJ1Y3QgdmNh cF9ydWxlICpydWxlLAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZj YXBfY2xpZW50X2FjdGlvbmZpZWxkICpmaWVsZCwKPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCB2Y2FwX2NsaWVudF9hY3Rpb25maWVsZF9kYXRhICpkYXRhKQo+ID4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC92Y2FwL3ZjYXBfYXBpX2Ns aWVudC5oCj4gPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC92Y2FwL3ZjYXBfYXBp X2NsaWVudC5oCj4gPiBpbmRleCAyYzRmZDlkMDIyZjkuLmIwYTJlYWU4MWRiZSAxMDA2NDQKPiA+ IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC92Y2FwL3ZjYXBfYXBpX2NsaWVu dC5oCj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvdmNhcC92Y2FwX2Fw aV9jbGllbnQuaAo+ID4gQEAgLTE3Myw2ICsxNzMsOCBAQCBpbnQgdmNhcF9ydWxlX2FkZF9rZXlf dTMyKHN0cnVjdCB2Y2FwX3J1bGUgKnJ1bGUsIGVudW0gdmNhcF9rZXlfZmllbGQga2V5LAo+ID4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgdmFsdWUs IHUzMiBtYXNrKTsKPiA+IMKgaW50IHZjYXBfcnVsZV9hZGRfa2V5X3U0OChzdHJ1Y3QgdmNhcF9y dWxlICpydWxlLCBlbnVtIHZjYXBfa2V5X2ZpZWxkIGtleSwKPiA+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZjYXBfdTQ4X2tleSAqZmllbGR2 YWwpOwo+ID4gK2ludCB2Y2FwX3J1bGVfYWRkX2tleV91NzIoc3RydWN0IHZjYXBfcnVsZSAqcnVs ZSwgZW51bSB2Y2FwX2tleV9maWVsZCBrZXksCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHZjYXBfdTcyX2tleSAqZmllbGR2YWwpOwo+ID4g wqBpbnQgdmNhcF9ydWxlX2FkZF9hY3Rpb25fYml0KHN0cnVjdCB2Y2FwX3J1bGUgKnJ1bGUsCj4g PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVu dW0gdmNhcF9hY3Rpb25fZmllbGQgYWN0aW9uLCBlbnVtIHZjYXBfYml0IHZhbCk7Cj4gPiDCoGlu dCB2Y2FwX3J1bGVfYWRkX2FjdGlvbl91MzIoc3RydWN0IHZjYXBfcnVsZSAqcnVsZSwKPiA+IEBA IC0xODEsNiArMTgzLDkgQEAgaW50IHZjYXBfcnVsZV9hZGRfYWN0aW9uX3UzMihzdHJ1Y3QgdmNh cF9ydWxlICpydWxlLAo+ID4gwqAvKiBWQ0FQIGxvb2t1cCBvcGVyYXRpb25zICovCj4gPiDCoC8q IExvb2t1cCBhIHZjYXAgaW5zdGFuY2UgdXNpbmcgY2hhaW4gaWQgKi8KPiA+IMKgc3RydWN0IHZj YXBfYWRtaW4gKnZjYXBfZmluZF9hZG1pbihzdHJ1Y3QgdmNhcF9jb250cm9sICp2Y3RybCwgaW50 IGNpZCk7Cj4gPiArLyogRmluZCBpbmZvcm1hdGlvbiBvbiBhIGtleSBmaWVsZCBpbiBhIHJ1bGUg Ki8KPiA+ICtjb25zdCBzdHJ1Y3QgdmNhcF9maWVsZCAqdmNhcF9sb29rdXBfa2V5ZmllbGQoc3Ry dWN0IHZjYXBfcnVsZSAqcnVsZSwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW51 bSB2Y2FwX2tleV9maWVsZCBrZXkpOwo+ID4gwqAvKiBGaW5kIGEgcnVsZSBpZCB3aXRoIGEgcHJv dmlkZWQgY29va2llICovCj4gPiDCoGludCB2Y2FwX2xvb2t1cF9ydWxlX2J5X2Nvb2tpZShzdHJ1 Y3QgdmNhcF9jb250cm9sICp2Y3RybCwgdTY0IGNvb2tpZSk7Cj4gPiAKPiA+IC0tCj4gPiAyLjM4 LjEKPiA+IAo+IAo+IFRlc3RlZCBvbiBNaWNyb2NoaXAgUENCMTM1IHN3aXRjaC4KPiAKPiBUZXN0 ZWQtYnk6IENhc3BlciBBbmRlcnNzb24gPGNhc3Blci5jYXNhbkBnbWFpbC5jb20+Cj4gUmV2aWV3 ZWQtYnk6IENhc3BlciBBbmRlcnNzb24gPGNhc3Blci5jYXNhbkBnbWFpbC5jb20+Cj4gCgpHcmVh dCB0aGF0IHlvdSBkaWQgYSB0ZXN0IHJvdW5kIHRoaXMgZWFybHkuCgpCUgpTdGVlbgo=