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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 23105C433F5 for ; Wed, 4 May 2022 09:37:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345803AbiEDJl0 (ORCPT ); Wed, 4 May 2022 05:41:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49278 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347705AbiEDJlP (ORCPT ); Wed, 4 May 2022 05:41:15 -0400 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D7622A26A for ; Wed, 4 May 2022 02:37:33 -0700 (PDT) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 19E411F745; Wed, 4 May 2022 09:37:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1651657052; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=DHlQhYavWrqs+HH9+yW0itm4afWVYNsjSbbiRiVHqvk=; b=Y+XNcWe+EAKq7tDkdjbrpdW6RBJZ6VHtNTqJ05/36Af5FLbADoOETQBMWFwFf9DgsqPSE4 0A0XsFNWhMLI4MaTBR/jqa0bK9pLGb6vntAYgsqaYPPM2EHcmniuJb06uHPYOyS7PtW818 o/e1gzMRzX4ywCeFLPHnVjDi/ebBjWs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1651657052; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=DHlQhYavWrqs+HH9+yW0itm4afWVYNsjSbbiRiVHqvk=; b=7x/jop66uoKTNquNYgfEBCoLbIIGJK+bqP3MsY1/iqiijnWvkhW0M7hGQIz6L6v0ExTvzA o8RbfJEP3imw9QBg== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id D3266131BD; Wed, 4 May 2022 09:37:31 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 41xnMltJcmJDDQAAMHmgww (envelope-from ); Wed, 04 May 2022 09:37:31 +0000 Message-ID: <68670a17-e882-18a2-200f-af00b52e9708@suse.de> Date: Wed, 4 May 2022 11:37:31 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: Re: [PATCH v4] drm/ast: Create the driver for ASPEED proprietory Display-Port Content-Language: en-US To: Kuo-Hsiang Chou , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" Cc: Hungju Huang , "airlied@linux.ie" , Tommy Huang , "airlied@redhat.com" , Arc Sung , Luke Chen References: <872e0d4b-411a-594f-a194-428986e18c3d@suse.de> <20220428075603.20904-1-kuohsiang_chou@aspeedtech.com> From: Thomas Zimmermann In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------s2h0kNd6tXOeTD9njpqCWjEn" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------s2h0kNd6tXOeTD9njpqCWjEn Content-Type: multipart/mixed; boundary="------------CsIWa0zcf0JfF3JvYnwCXlrC"; protected-headers="v1" From: Thomas Zimmermann To: Kuo-Hsiang Chou , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" Cc: Hungju Huang , "airlied@linux.ie" , Tommy Huang , "airlied@redhat.com" , Arc Sung , Luke Chen Message-ID: <68670a17-e882-18a2-200f-af00b52e9708@suse.de> Subject: Re: [PATCH v4] drm/ast: Create the driver for ASPEED proprietory Display-Port References: <872e0d4b-411a-594f-a194-428986e18c3d@suse.de> <20220428075603.20904-1-kuohsiang_chou@aspeedtech.com> In-Reply-To: --------------CsIWa0zcf0JfF3JvYnwCXlrC Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkNCg0KQW0gMDQuMDUuMjIgdW0gMTA6NDkgc2NocmllYiBLdW8tSHNpYW5nIENob3U6DQo+ IEhpIFRob21hcywNCj4gDQo+IFRoYW5rcyBmb3IgeW91ciBlZmZvcnRzIHRvIHJldmlldyB0 aGlzIHBhdGNoLg0KPiANCj4gTm93LCBJIG9ic2VydmUgYSBjaGFuZ2UgdGhhdCBhZnRlciBE UCB1bnBsdWdnZWQgYW5kIHRoZW4gdGhlIHN5c3RlbSBpcyANCj4gdW5hYmxlIHRvIGdldCBF RElEIGZyb20gRC1zdWIgY29ubmVjdGluZy4NCj4gDQo+IFRoZSByZWFzb24gc2VlbXMgdGhh dCBUWHMgYXJlIG1lcmdlZCBpbnRvIHVuaW9uIHN0cnVjdHVyZSBpbiANCj4gL2RyaXZlcnMv Z3B1L2RybS9hc3QvYXN0X2Rydi5oIA0KPiAgwqAoYTU5YjAyNjQxOWYzMzA0MGQ3ZDI4Yjhl M2IxY2VhNjgxYjljZTdhNyANCj4gPGh0dHBzOi8vY2dpdC5mcmVlZGVza3RvcC5vcmcvZHJt L2RybS1taXNjL2NvbW1pdC8/aWQ9YTU5YjAyNjQxOWYzMzA0MGQ3ZDI4YjhlM2IxY2VhNjgx YjljZTdhNz4pDQoNClRoZSB0ZXN0IHN5c3RlbSBoYXMgYSBEUCBhbmQgYSBWR0EgYWRhcHRl cj8gIFdlIG5lZWQgY3JlYXRlIHR3byBzZXBhcmF0ZSANCmNvbm5lY3RvcnMgYW5kIGVuY29k ZXJzIGluIHRoYXQgY2FzZS4gIEknbGwgdHJ5IHRvIHByb3ZpZGUgYSBwYXRjaCBpbiANCnRo ZSBuZXh0IGRheXMuDQoNCj4gDQo+IEFub3RoZXIsIGRvIHlvdSBuZWVkIHRoZSBhc3QyNjAw IEVWQiB0byBlYXNlIHZlcmlmaWNhdGlvbiBvbiAiZHJtL2FzdCIgPw0KDQpUaGUgRVZCIGlz IGFuIGV2YWx1YXRpb24gYm9hcmQ/ICBJJ2QgYmUgaGFwcHkgdG8gaGF2ZSBvbmUgb2YgdGhl c2UuIEhvdyANCmNhbiBJIGdldCBvbmU/DQoNCkJlc3QgcmVnYXJkcw0KVGhvbWFzDQoNCj4g DQo+IFJlZ2FyZHMsDQo+IA0KPiAgwqDCoMKgwqDCoMKgwqAgS3VvLUhzaWFuZyBDaG91DQo+ IA0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBUaG9tYXMgWmltbWVy bWFubiBbbWFpbHRvOnR6aW1tZXJtYW5uQHN1c2UuZGVdDQo+IFNlbnQ6IFdlZG5lc2RheSwg TWF5IDA0LCAyMDIyIDM6MjggUE0NCj4gVG86IEt1by1Ic2lhbmcgQ2hvdSA8a3VvaHNpYW5n X2Nob3VAYXNwZWVkdGVjaC5jb20+OyANCj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZw0KPiBTdWJqZWN0OiBSZTogW1BB VENIIHY0XSBkcm0vYXN0OiBDcmVhdGUgdGhlIGRyaXZlciBmb3IgQVNQRUVEIA0KPiBwcm9w cmlldG9yeSBEaXNwbGF5LVBvcnQNCj4gDQo+IEhpDQo+IA0KPiBBbSAyOC4wNC4yMiB1bSAw OTo1NiBzY2hyaWViIEt1b0hzaWFuZyBDaG91Og0KPiANCj4+IFYxOg0KPiANCj4+IDEuIFRo ZSBNQ1UgRlcgY29udHJvbGluZyBBU1BFRUQgRFAgaXMgbG9hZGVkIGJ5IEJNQyBib290IGxv YWRlci4NCj4gDQo+PiAyLiBEcml2ZXIgc3RhcnRzIGFmdGVyIENSWzM6MV0gPT0gMTExYiB0 aGF0IGluZGljYXRlcyBUeCBpcyBBU1REUCwNCj4gDQo+PsKgwqDCoMKgIGFuZCBDUkQxWzVd IGhhcyBiZWVuIGFzc2VydGVkIGJ5IEJNVkMgYm9vdCBsb2FkZXIuDQo+IA0KPj4gMy4gRURJ RCBpcyBwcmlvcml0aXplZCBieSBEUCBtb25pdG9yLg0KPiANCj4+IDQuIERQJ3MgRURJRCBo YXMgaGlnaCBwcmlvcml0eSB0byBkZWNpZGUgcmVzb2x1dGlvbiBzdXBwb3J0aW5nLg0KPiAN Cj4+IA0KPiANCj4+IFYyOg0KPiANCj4+IE1vZHVsZXMgZGVzY3JpcHRpb246DQo+IA0KPj4g MS4gQVNURFAgKEFTUEVFRCBEaXNwbGF5UG9ydCkgaXMgY29udHJvbGxlZCBieSBkZWRpY2F0 ZWQNCj4gDQo+PsKgwqDCoMKgIEFTVC1NQ1UgKEFTUEVFRCBwcm9wcmlhdGFyeSBNQ1UpLg0K PiANCj4+IDIuIE1DVSBpcyBsb29waW5nIGluIGNoYXJnZWQgb2YgSFBELCBSZWFkIEVESUQs IExpbmsgVHJhaW5pbmcgd2l0aA0KPiANCj4+wqDCoMKgwqAgRFAgc2luay4NCj4gDQo+PiAz LiBBU1REUCBhbmQgQVNULU1VQyByZXNpZGUgaW4gQk1DIChCYXNlYm9hcmQgTWFuYWdlbWVu dCBjb250cm9sbGVyKQ0KPiANCj4+wqDCoMKgwqAgYWRkcmVzc2luZy1zcGFjZS4NCj4gDQo+ PiA0LiBBU1BFRUQgRFJNIGRyaXZlciByZXF1ZXN0cyBNQ1UgdG8gZ2V0IEhQRCBhbmQgRURJ RCBieSBDUi1zY3JhdGNoZWQNCj4gDQo+PsKgwqDCoMKgIHJlZ2lzdGVyLg0KPiANCj4+IA0K PiANCj4+IEJvb3Rpbmcgc2VxdWVuY2U6DQo+IA0KPj4gMS4gQ2hlY2sgaWYgVFggaXMgQVNU RFDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLy8gYXN0X2RwX2xhdW5jaCgpDQo+IA0KPj4g Mi4gQ2hlY2sgaWYgRFAtTUNVIEZXIGhhcyBsb2FkZWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIGFz dF9kcF9sYXVuY2goKQ0KPiANCj4+IDMuIFJlYWQgRURJRMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAvLyBhc3RfZHBfcmVhZF9lZGlkKCkNCj4gDQo+PiA0LiBSZXNvbHV0aW9uIHN3aXRj aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAvLyBhc3RfZHBfU2V0T3V0cHV0KCkNCj4gDQo+PiANCj4g DQo+PiBWMzoNCj4gDQo+PiAxLiBSZW1vdmUgdW5uZWVkZWQgc2VtaWNvbG9uLg0KPiANCj4+ IDIuIEFwcGx5IHRvIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2RybS9kcm0sIGlu c3RlYWQgb2YNCj4gDQo+PsKgwqDCoMKgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3Jn L2RybS9kcm0tbWlzYw0KPiANCj4+IDMuIFJlc29sdmUgYXV0byBidWlsZCB0ZXN0IFdBUk5J TkdzIG9uIFYxIHBhdGNoLg0KPiANCj4+IA0KPiANCj4+IFY0Og0KPiANCj4+IDEuIFN5bmMg Y29kZS1iYXNlIHdpdGgga2VybmVsIDUuMTdfcmM2IDIuIFJlbW92ZSB0aGUgZGVmaW5lIG9m DQo+IA0KPj4gRFBDb250cm9sUG93ZXIsIGJlY2F1c2UgRFAgY2hpcHMgbmVlZCB0byBiZQ0K PiANCj4+wqDCoMKgwqAgcG93ZXJlZCBvbiB0byBiZSB1c2VkLg0KPiANCj4+IDMuIFJlbW92 ZSB0aGUgc3dpdGNoZXMgb2YgUEhZIGFuZCBEaXNwbGF5IGZyb20gRURJRCBwcm9jZWR1cmUu DQo+IA0KPj4gNC4gUmV2aXNlIGluY3JlYWluZyBkZWxheSB0byBmaXhlZCBkZWxheSwgYmVj YXVzZSB0aGlzIHZlcnNpb24ga2VybmVsDQo+IA0KPj7CoMKgwqDCoCBkb2Vzbid0IGRldGVj dCBtaW5pdG9yIGNvbnNpc3Rlbm50bHkuDQo+IA0KPj4gNS4gQ3JlYXRlIGNsZWFuLXVwIGNv ZGUgdXNlZCBmb3IgcmVzZXQgb2YgcG93ZXIgc3RhdGUgb24gZXJyb3JzIHdpdGgNCj4gDQo+ PsKgwqDCoMKgIC1FSU8gbWFubmVyLg0KPiANCj4+IDYuIFJldmlzZSB0aGUgRFAgZGV0ZWN0 aW9uIGJ5IFRYIHR5cGUgYW5kIGl0cyBEUC1GVyBzdGF0dXMgZHVyaW5nDQo+IA0KPj7CoMKg wqDCoCBib290aW5nIGFuZCByZXN1bWUuDQo+IA0KPj4gNy4gQ29ycmVjdCB0aGUgQ2FtZWxD YXNlIFN0eWxlLg0KPiANCj4+IDguIFVzZSByZWdpc3RlciByZWFkaW5nIHdoaWxlIG5lZWRp bmcsIGFuZCByZW1vdmUgdG8gaG9sZCBmdWxsDQo+IA0KPj7CoMKgwqDCoCByZWdpc3Rlci4N Cj4gDQo+PiA5LiBJbnN0ZWFkIG9mICd1OCcsIHJldmlzZSB0byAnYm9vbCcgb24gc3d3aXRj aCBvZiBQSFkgYW5kIHZpZGVvLg0KPiANCj4+IDEwLkNvcnJlY3QgdHlwbw0KPiANCj4+IDEx LlJlbW92ZSB0aGUgZHVwbGljYXRlZCBjb3B5IG9mIFRYIGRlZmluaXRpb24uDQo+IA0KPj4g MTIuVXNlIEVESURfTEVOR1RIIGFzIHRoZSBjb25zdGFudCBvZiAxMjguDQo+IA0KPj4gDQo+ IA0KPj4gU2lnbmVkLW9mZi1ieTogS3VvSHNpYW5nIENob3UgPGt1b2hzaWFuZ19jaG91QGFz cGVlZHRlY2guY29tIDxtYWlsdG86a3VvaHNpYW5nX2Nob3VAYXNwZWVkdGVjaC5jb20+Pg0K PiANCj4gUmV2aWV3ZWQtYnk6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNl LmRlIA0KPiA8bWFpbHRvOnR6aW1tZXJtYW5uQHN1c2UuZGU+Pg0KPiANCj4gSSd2ZSBtZWFu d2hpbGUgYWRkZWQgeW91ciBwYXRjaCB0byBkcm0tbWlzYy1uZXh0LiBJdCBzaG91bGQgc2hv dyB1cCBpbiANCj4gb25lIG9mIHRoZSBuZXh0IGtlcm5lbCByZWxlYXNlcy7CoCBUaGFua3Mg YSBsb3QuDQo+IA0KPiBCZXN0IHJlZ2FyZHMNCj4gDQo+IFRob21hcw0KPiANCj4+IC0tLQ0K PiANCj4+wqDCoCBkcml2ZXJzL2dwdS9kcm0vYXN0L01ha2VmaWxlwqDCoCB8wqDCoCAyICst DQo+IA0KPj7CoMKgIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2RwLmPCoMKgIHwgMjgyICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiANCj4+wqDCoCBkcml2ZXJzL2dw dS9kcm0vYXN0L2FzdF9kcnYuaMKgIHwgMTE1ICsrKysrKysrKysrKysrDQo+IA0KPj7CoMKg IGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X21haW4uYyB8wqDCoCA1ICstDQo+IA0KPj7CoMKg IGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X21vZGUuYyB8IDEyNCArKysrKysrKysrKysrKy0N Cj4gDQo+PsKgwqAgZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfcG9zdC5jIHzCoMKgIDQgKy0N Cj4gDQo+PsKgwqAgNiBmaWxlcyBjaGFuZ2VkLCA1MjQgaW5zZXJ0aW9ucygrKSwgOCBkZWxl dGlvbnMoLSkNCj4gDQo+PsKgwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9hc3QvYXN0X2RwLmMNCj4gDQo+PiANCj4gDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2FzdC9NYWtlZmlsZQ0KPiANCj4+IGIvZHJpdmVycy9ncHUvZHJtL2FzdC9NYWtl ZmlsZSBpbmRleCAyMWY3MTE2MGIuLjVhNTNjZTUxZiAxMDA2NDQNCj4gDQo+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vYXN0L01ha2VmaWxlDQo+IA0KPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FzdC9NYWtlZmlsZQ0KPiANCj4+IEBAIC0zLDYgKzMsNiBAQA0KPiANCj4+wqDCoCAj IE1ha2VmaWxlIGZvciB0aGUgZHJtIGRldmljZSBkcml2ZXIuwqAgVGhpcyBkcml2ZXIgcHJv dmlkZXMgc3VwcG9ydCBmb3IgdGhlDQo+IA0KPj7CoMKgICMgRGlyZWN0IFJlbmRlcmluZyBJ bmZyYXN0cnVjdHVyZSAoRFJJKSBpbiBYRnJlZTg2IDQuMS4wIGFuZCBoaWdoZXIuDQo+IA0K Pj4gDQo+IA0KPj4gLWFzdC15IDo9IGFzdF9kcnYubyBhc3RfaTJjLm8gYXN0X21haW4ubyBh c3RfbW0ubyBhc3RfbW9kZS5vDQo+IA0KPj4gYXN0X3Bvc3QubyBhc3RfZHA1MDEubw0KPiAN Cj4+ICthc3QteSA6PSBhc3RfZHJ2Lm8gYXN0X2kyYy5vIGFzdF9tYWluLm8gYXN0X21tLm8g YXN0X21vZGUubw0KPiANCj4+ICthc3RfcG9zdC5vIGFzdF9kcDUwMS5vIGFzdF9kcC5vDQo+ IA0KPj4gDQo+IA0KPj7CoMKgIG9iai0kKENPTkZJR19EUk1fQVNUKSA6PSBhc3Qubw0KPiAN Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcC5jDQo+IA0KPj4g Yi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcC5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGlu ZGV4DQo+IA0KPj4gMDAwMDAwMDAwLi40NTUxYmM4YTMNCj4gDQo+PiAtLS0gL2Rldi9udWxs DQo+IA0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHAuYw0KPiANCj4+IEBA IC0wLDAgKzEsMjgyIEBADQo+IA0KPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wDQo+IA0KPj4gKy8vIENvcHlyaWdodCAoYykgMjAyMSwgQVNQRUVEIFRlY2hub2xv Z3kgSW5jLg0KPiANCj4+ICsvLyBBdXRob3JzOiBLdW9Ic2lhbmcgQ2hvdSA8a3VvaHNpYW5n X2Nob3VAYXNwZWVkdGVjaC5jb20gPG1haWx0bzprdW9oc2lhbmdfY2hvdUBhc3BlZWR0ZWNo LmNvbT4+DQo+IA0KPj4gKw0KPiANCj4+ICsjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4N Cj4gDQo+PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+IA0KPj4gKyNpbmNsdWRlIDxk cm0vZHJtX3ByaW50Lmg+DQo+IA0KPj4gKyNpbmNsdWRlICJhc3RfZHJ2LmgiDQo+IA0KPj4g Kw0KPiANCj4+ICtpbnQgYXN0X2FzdGRwX3JlYWRfZWRpZChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1OCAqZWRpZGRhdGEpIHsNCj4gDQo+PiArwqDCoCBzdHJ1Y3QgYXN0X3ByaXZhdGUg KmFzdCA9IHRvX2FzdF9wcml2YXRlKGRldik7DQo+IA0KPj4gK8KgwqAgdTggaSA9IDAsIGog PSAwOw0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCAvKg0KPiANCj4+ICvCoMKgICogQ1JEMVti NV06IERQIE1DVSBGVyBpcyBleGVjdXRpbmcNCj4gDQo+PiArwqDCoCAqIENSRENbYjBdOiBE UCBsaW5rIHN1Y2Nlc3MNCj4gDQo+PiArwqDCoCAqIENSREZbYjBdOiBEUCBIUEQNCj4gDQo+ PiArwqDCoCAqIENSRTVbYjBdOiBIb3N0IHJlYWRpbmcgRURJRCBwcm9jZXNzIGlzIGRvbmUN Cj4gDQo+PiArwqDCoCAqLw0KPiANCj4+ICvCoMKgIGlmICghKGFzdF9nZXRfaW5kZXhfcmVn X21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweEQxLCBBU1REUF9NQ1VfRldfRVhFQ1VU SU5HKSAmJg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3RfZ2V0X2luZGV4X3Jl Z19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhEQywgQVNURFBfTElOS19TVUNDRVNT KSAmJg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3RfZ2V0X2luZGV4X3JlZ19t YXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhERiwgQVNURFBfSFBEKSAmJg0KPiANCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNU X0lPX0NSVENfUE9SVCwgMHhFNSwNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVNURFBfSE9TVF9FRElE X1JFQURfRE9ORV9NQVNLKSkpIHsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290 byBlcnJfYXN0ZHBfZWRpZF9ub3RfcmVhZHk7DQo+IA0KPj4gK8KgwqAgfQ0KPiANCj4+ICsN Cj4gDQo+PiArwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENf UE9SVCwgMHhFNSwgKHU4KSB+QVNURFBfSE9TVF9FRElEX1JFQURfRE9ORV9NQVNLLA0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4 MDApOw0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykg ew0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKg0KPiANCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCAqIENSRTRbNzowXTogUmVhZC1Qb2ludGVyIGZvciBFRElEIChVbml0OiA0 Ynl0ZXMpOyB2YWxpZCByYW5nZTogMH42NA0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCAqLw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19t YXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhFNCwNCj4gDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKHU4KSB+QVNURFBfRURJRF9SRUFEX1BPSU5URVJfTUFTSywgKHU4KSBpKTsNCj4gDQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgaiA9IDA7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoCAvKg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIENS RDdbYjBdOiB2YWxpZCBmbGFnIGZvciBFRElEDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgICogQ1JENltiMF06IG1pcnJvciByZWFkIHBvaW50ZXIgZm9yIEVESUQNCj4gDQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg d2hpbGUgKChhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwg MHhENywNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBBU1REUF9FRElEX1ZBTElEX0ZMQUdfTUFTSykgIT0gMHgwMSkgfHwN Cj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChhc3RfZ2V0 X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhENiwNCj4gDQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFTVERQX0VESURfUkVBRF9QT0lOVEVS X01BU0spICE9IGkpKSB7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAvKg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiBEZWxheSBhcmUgZ2V0dGluZyBsb25nZXIgd2l0aCBlYWNoIHJldHJ5Lg0KPiANCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiAxLiBUaGUgRGVsYXlz IGFyZSBvZnRlbiAyIGxvb3BzIHdoZW4gdXNlcnMgcmVxdWVzdCAiRGlzcGxheSBTZXR0aW5n cyINCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrCoMKg wqAgwqAgb2YgcmlnaHQtY2xpY2sgb2YgbW91c2UuDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIDIuIFRoZSBEZWxheXMgYXJlIG9mdGVuIGxvbmdl ciBhIGxvdCB3aGVuIHN5c3RlbSByZXN1bWUgZnJvbSBTMy9TNC4NCj4gDQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovDQo+IA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZGVsYXkoaisxKTsNCj4gDQo+PiArDQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIShhc3RfZ2V0 X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhEMSwNCj4gDQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBU1REUF9N Q1VfRldfRVhFQ1VUSU5HKSAmJg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9nZXRfaW5kZXhfcmVnX21hc2soYXN0 LCBBU1RfSU9fQ1JUQ19QT1JULCAweERDLA0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFTVERQX0xJTktfU1VDQ0VTUykgJiYNCj4g DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhE RiwgQVNURFBfSFBEKSkpIHsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9hc3RkcF9qdW1wX291dF9sb29w X29mX2VkaWQ7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB9DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaisrOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKGogPiAyMDApDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfYXN0ZHBfanVtcF9vdXRfbG9vcF9v Zl9lZGlkOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCB9DQo+IA0KPj4gKw0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAqKGVkaWRkYXRhKSA9IGFzdF9nZXRfaW5kZXhf cmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULA0KPiANCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4RDgsIEFTVERQX0VESURfUkVB RF9EQVRBX01BU0spOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCAqKGVkaWRkYXRh ICsgMSkgPSBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwg MHhEOSwNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVNURFBfRURJRF9SRUFEX0RBVEFfTUFTSyk7DQo+ IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICooZWRpZGRhdGEgKyAyKSA9IGFzdF9nZXRf aW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweERBLA0KPiANCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBBU1REUF9FRElEX1JFQURfREFUQV9NQVNLKTsNCj4gDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgKihlZGlkZGF0YSArIDMpID0gYXN0X2dldF9pbmRleF9yZWdfbWFzayhh c3QsIEFTVF9JT19DUlRDX1BPUlQsIDB4REIsDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFTVERQX0VE SURfUkVBRF9EQVRBX01BU0spOw0KPiANCj4+ICsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKGkgPT0gMzEpIHsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC8qDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAqIEZvciAxMjgtYnl0ZXMgRURJRF8xLjMsDQo+IA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIDEuIEFkZCB0aGUgdmFsdWUgb2YgQnl0ZXMt MTI2IHRvIEJ5dGVzLTEyNy4NCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoZSBCeXRlcy0xMjcgaXMgQ2hl Y2tzdW0uIFN1bSBvZiBhbGwgMTI4Ynl0ZXMgc2hvdWxkDQo+IA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcXVh bCAwwqDCoMKgIChtb2QgMjU2KS4NCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICogMi4gTW9kaWZ5IEJ5dGVzLTEyNiB0byBiZSAwLg0KPiANCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgVGhlIEJ5dGVzLTEyNiBpbmRpY2F0ZXMgdGhlIE51bWJlciBvZiBleHRlbnNpb25z IHRvDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBmb2xsb3cuIDAgcmVwcmVzZW50cyBub2V4dGVuc2lvbnMu DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLw0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKihlZGlkZGF0YSAr IDMpID0gKihlZGlkZGF0YSArIDMpICsgKihlZGlkZGF0YSArIDIpOw0KPiANCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKihlZGlkZGF0YSArIDIpID0gMDsN Cj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPiANCj4+ICsNCj4gDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgZWRpZGRhdGEgKz0gNDsNCj4gDQo+PiArwqDCoCB9DQo+IA0K Pj4gKw0KPiANCj4+ICvCoMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9f Q1JUQ19QT1JULCAweEU1LCAodTgpIH5BU1REUF9IT1NUX0VESURfUkVBRF9ET05FX01BU0ss DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgQVNURFBfSE9TVF9FRElEX1JFQURfRE9ORSk7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKg IHJldHVybiAwOw0KPiANCj4+ICsNCj4gDQo+PiArZXJyX2FzdGRwX2p1bXBfb3V0X2xvb3Bf b2ZfZWRpZDoNCj4gDQo+PiArwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNU X0lPX0NSVENfUE9SVCwgMHhFNSwNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodTgpIH5BU1REUF9IT1NUX0VESURfUkVBRF9ET05F X01BU0ssDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQVNURFBfSE9TVF9FRElEX1JFQURfRE9ORSk7DQo+IA0KPj4gK8KgwqAgcmV0 dXJuICh+KGorMjU2KSArIDEpOw0KPiANCj4+ICsNCj4gDQo+PiArZXJyX2FzdGRwX2VkaWRf bm90X3JlYWR5Og0KPiANCj4+ICvCoMKgIGlmICghKGFzdF9nZXRfaW5kZXhfcmVnX21hc2so YXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweEQxLCBBU1REUF9NQ1VfRldfRVhFQ1VUSU5HKSkp DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAofjB4RDEgKyAxKTsNCj4g DQo+PiArwqDCoCBpZiAoIShhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NS VENfUE9SVCwgMHhEQywgQVNURFBfTElOS19TVUNDRVNTKSkpDQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiAofjB4REMgKyAxKTsNCj4gDQo+PiArwqDCoCBpZiAoIShh c3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhERiwgQVNU RFBfSFBEKSkpDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAofjB4REYg KyAxKTsNCj4gDQo+PiArwqDCoCBpZiAoIShhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwg QVNUX0lPX0NSVENfUE9SVCwgMHhFNSwgQVNURFBfSE9TVF9FRElEX1JFQURfRE9ORV9NQVNL KSkpDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAofjB4RTUgKyAxKTsN Cj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgcmV0dXJuwqDCoMKgwqDCoCAwOw0KPiANCj4+ICt9 DQo+IA0KPj4gKw0KPiANCj4+ICsvKg0KPiANCj4+ICsgKiBMYXVuY2ggQXNwZWVkIERQDQo+ IA0KPj4gKyAqLw0KPiANCj4+ICt2b2lkIGFzdF9kcF9sYXVuY2goc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdTggYlBvd2VyKSB7DQo+IA0KPj4gK8KgwqAgdTMyIGkgPSAwLCBqID0gMCwg V2FpdENvdW50ID0gMTsNCj4gDQo+PiArwqDCoCB1OCBiRFBUWCA9IDA7DQo+IA0KPj4gK8Kg wqAgdTggYkRQRXhlY3V0ZSA9IDE7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIHN0cnVjdCBh c3RfcHJpdmF0ZSAqYXN0ID0gdG9fYXN0X3ByaXZhdGUoZGV2KTsNCj4gDQo+PiArwqDCoCAv LyBTMyBjb21lIGJhY2ssIG5lZWQgbW9yZSB0aW1lIHRvIHdhaXQgQk1DIHJlYWR5Lg0KPiAN Cj4+ICvCoMKgIGlmIChiUG93ZXIpDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIFdh aXRDb3VudCA9IDMwMDsNCj4gDQo+PiArDQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIC8vIFdh aXQgdG90YWwgY291bnQgYnkgZGlmZmVyZW50IGNvbmRpdGlvbi4NCj4gDQo+PiArwqDCoCBm b3IgKGogPSAwOyBqIDwgV2FpdENvdW50OyBqKyspIHsNCj4gDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgYkRQVFggPSBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NS VENfUE9SVCwgMHhEMSwNCj4gDQo+PiArVFhfVFlQRV9NQVNLKTsNCj4gDQo+PiArDQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChiRFBUWCkNCj4gDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ICsNCj4gDQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqAgbXNsZWVwKDEwMCk7DQo+IA0KPj4gK8KgwqAgfQ0KPiAN Cj4+ICsNCj4gDQo+PiArwqDCoCAvLyAweEUgOiBBU1REUCB3aXRoIERQTUNVIEZXIGhhbmRs aW5nDQo+IA0KPj4gK8KgwqAgaWYgKGJEUFRYID09IEFTVERQX0RQTUNVX1RYKSB7DQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIFdhaXQgb25lIHNlY29uZCB0aGVuIHRpbWVv dXQuDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGkgPSAwOw0KPiANCj4+ICsNCj4g DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2hpbGUgKGFzdF9nZXRfaW5kZXhfcmVnX21h c2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweEQxLCBDT1BST0NFU1NPUl9MQVVOQ0gpICE9 DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDT1BST0NF U1NPUl9MQVVOQ0gpIHsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGkrKzsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC8vIHdhaXQgMTAwIG1zDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBtc2xlZXAoMTAwKTsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaSA+PSAxMCkgew0KPiANCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8vIERQ IHdvdWxkIG5vdCBiZSByZWFkeS4NCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBiRFBFeGVjdXRlID0gMDsNCj4gDQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0N Cj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPiANCj4+ICsNCj4gDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKGJEUEV4ZWN1dGUpDQo+IA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3QtPnR4X2NoaXBfdHlwZSA9IEFTVF9UWF9B U1REUDsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9zZXRf aW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweEU1LA0KPiANCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1OCkgfkFT VERQX0hPU1RfRURJRF9SRUFEX0RPTkVfTUFTSywNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBU1REUF9IT1NUX0VESURfUkVBRF9E T05FKTsNCj4gDQo+PiArwqDCoCB9IGVsc2UNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXN0LT50eF9jaGlwX3R5cGUgPSBBU1RfVFhfTk9ORTsNCj4gDQo+PiArfQ0KPiANCj4+ ICsNCj4gDQo+PiArDQo+IA0KPj4gKw0KPiANCj4+ICt2b2lkIGFzdF9kcF9wb3dlcl9vbl9v ZmYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBvbikgew0KPiANCj4+ICvCoMKgIHN0 cnVjdCBhc3RfcHJpdmF0ZSAqYXN0ID0gdG9fYXN0X3ByaXZhdGUoZGV2KTsNCj4gDQo+PiAr wqDCoCAvLyBSZWFkIGFuZCBUdXJuIG9mZiBEUCBQSFkgc2xlZXANCj4gDQo+PiArwqDCoCB1 OCBiRTMgPSBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwg MHhFMywNCj4gDQo+PiArQVNUX0RQX1ZJREVPX0VOQUJMRSk7DQo+IA0KPj4gKw0KPiANCj4+ ICvCoMKgIC8vIFR1cm4gb24gRFAgUEhZIHNsZWVwDQo+IA0KPj4gK8KgwqAgaWYgKCFvbikN Cj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYkUzIHw9IEFTVF9EUF9QSFlfU0xFRVA7 DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIC8vIERQIFBvd2VyIG9uL29mZg0KPiANCj4+ICvC oMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweEUz LCAodTgpDQo+IA0KPj4gK35BU1RfRFBfUEhZX1NMRUVQLCBiRTMpOyB9DQo+IA0KPj4gKw0K PiANCj4+ICsNCj4gDQo+PiArDQo+IA0KPj4gK3ZvaWQgYXN0X2RwX3NldF9vbl9vZmYoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBvbikgew0KPiANCj4+ICvCoMKgIHN0cnVjdCBh c3RfcHJpdmF0ZSAqYXN0ID0gdG9fYXN0X3ByaXZhdGUoZGV2KTsNCj4gDQo+PiArwqDCoCB1 OCB2aWRlb19vbl9vZmYgPSBvbjsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgLy8gVmlkZW8g T24vT2ZmDQo+IA0KPj4gK8KgwqAgYXN0X3NldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9J T19DUlRDX1BPUlQsIDB4RTMsICh1OCkNCj4gDQo+PiArfkFTVF9EUF9WSURFT19FTkFCTEUs IG9uKTsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgLy8gSWYgRFAgcGx1ZyBpbiBhbmQgbGlu ayBzdWNjZXNzZnVsIHRoZW4gY2hlY2sgdmlkZW8gb24gLyBvZmYgc3RhdHVzDQo+IA0KPj4g K8KgwqAgaWYgKGFzdF9nZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JU LCAweERDLCBBU1REUF9MSU5LX1NVQ0NFU1MpICYmDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIGFzdF9nZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAw eERGLCBBU1REUF9IUEQpKSB7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHZpZGVv X29uX29mZiA8PD0gNDsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2hpbGUgKGFz dF9nZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweERGLA0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVNURFBfTUlSUk9SX1ZJREVP X0VOQUJMRSkgIT0gdmlkZW9fb25fb2ZmKSB7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAvLyB3YWl0IDEgbXMNCj4gDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1kZWxheSgxKTsNCj4gDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgfQ0KPiANCj4+ICvCoMKgIH0NCj4gDQo+PiArfQ0KPiANCj4+ICsNCj4g DQo+PiArdm9pZCBhc3RfZHBfc2V0X21vZGUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1 Y3QNCj4gDQo+PiArYXN0X3ZiaW9zX21vZGVfaW5mbyAqdmJpb3NfbW9kZSkgew0KPiANCj4+ ICvCoMKgIHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0ID0gdG9fYXN0X3ByaXZhdGUoY3J0Yy0+ ZGV2KTsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgdTMyIHVsUmVmcmVzaFJhdGVJbmRleDsN Cj4gDQo+PiArwqDCoCB1OCBNb2RlSWR4Ow0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCB1bFJl ZnJlc2hSYXRlSW5kZXggPSB2Ymlvc19tb2RlLT5lbmhfdGFibGUtPnJlZnJlc2hfcmF0ZV9p bmRleCAtIDE7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIHN3aXRjaCAoY3J0Yy0+bW9kZS5j cnRjX2hkaXNwbGF5KSB7DQo+IA0KPj4gK8KgwqAgY2FzZSAzMjA6DQo+IA0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIE1vZGVJZHggPSBBU1REUF8zMjB4MjQwXzYwOw0KPiANCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4gDQo+PiArwqDCoCBjYXNlIDQwMDoNCj4g DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlkeCA9IEFTVERQXzQwMHgzMDBfNjA7 DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ICvCoMKgIGNh c2UgNTEyOg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBNb2RlSWR4ID0gQVNURFBf NTEyeDM4NF82MDsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0K Pj4gK8KgwqAgY2FzZSA2NDA6DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJ ZHggPSAoQVNURFBfNjQweDQ4MF82MCArICh1OCkgdWxSZWZyZXNoUmF0ZUluZGV4KTsNCj4g DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0KPj4gK8KgwqAgY2FzZSA4 MDA6DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJZHggPSAoQVNURFBfODAw eDYwMF81NiArICh1OCkgdWxSZWZyZXNoUmF0ZUluZGV4KTsNCj4gDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0KPj4gK8KgwqAgY2FzZSAxMDI0Og0KPiANCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCBNb2RlSWR4ID0gKEFTVERQXzEwMjR4NzY4XzYwICsgKHU4 KSB1bFJlZnJlc2hSYXRlSW5kZXgpOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsNCj4gDQo+PiArwqDCoCBjYXNlIDExNTI6DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIE1vZGVJZHggPSBBU1REUF8xMTUyeDg2NF83NTsNCj4gDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0KPj4gK8KgwqAgY2FzZSAxMjgwOg0KPiANCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoY3J0Yy0+bW9kZS5jcnRjX3ZkaXNwbGF5ID09IDgw MCkNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJ ZHggPSAoQVNURFBfMTI4MHg4MDBfNjBfUkIgLSAodTgpIHVsUmVmcmVzaFJhdGVJbmRleCk7 DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2XCoMKgwqDCoMKgwqDCoMKgwqAg Ly8gMTAyNA0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg TW9kZUlkeCA9IChBU1REUF8xMjgweDEwMjRfNjAgKyAodTgpIHVsUmVmcmVzaFJhdGVJbmRl eCk7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ICvCoMKg IGNhc2UgMTM2MDoNCj4gDQo+PiArwqDCoCBjYXNlIDEzNjY6DQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIE1vZGVJZHggPSBBU1REUF8xMzY2eDc2OF82MDsNCj4gDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0KPj4gK8KgwqAgY2FzZSAxNDQwOg0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBNb2RlSWR4ID0gKEFTVERQXzE0NDB4OTAwXzYw X1JCIC0gKHU4KSB1bFJlZnJlc2hSYXRlSW5kZXgpOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCBicmVhazsNCj4gDQo+PiArwqDCoCBjYXNlIDE2MDA6DQo+IA0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChjcnRjLT5tb2RlLmNydGNfdmRpc3BsYXkgPT0gOTAwKQ0K PiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlkeCA9 IChBU1REUF8xNjAweDkwMF82MF9SQiAtICh1OCkgdWxSZWZyZXNoUmF0ZUluZGV4KTsNCj4g DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZcKgwqDCoMKgwqDCoMKgwqDCoCAvLzEy MDANCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE1vZGVJ ZHggPSBBU1REUF8xNjAweDEyMDBfNjA7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg IGJyZWFrOw0KPiANCj4+ICvCoMKgIGNhc2UgMTY4MDoNCj4gDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgTW9kZUlkeCA9IChBU1REUF8xNjgweDEwNTBfNjBfUkIgLSAodTgpIHVsUmVm cmVzaFJhdGVJbmRleCk7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0K PiANCj4+ICvCoMKgIGNhc2UgMTkyMDoNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGNydGMtPm1vZGUuY3J0Y192ZGlzcGxheSA9PSAxMDgwKQ0KPiANCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTW9kZUlkeCA9IEFTVERQXzE5MjB4MTA4 MF82MDsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZcKgwqDCoMKgwqDCoMKg wqDCoCAvLzEyMDANCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIE1vZGVJZHggPSBBU1REUF8xOTIweDEyMDBfNjA7DQo+IA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ICvCoMKgIGRlZmF1bHQ6DQo+IA0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybjsNCj4gDQo+PiArwqDCoCB9DQo+IA0KPj4gKw0KPiAN Cj4+ICvCoMKgIC8qDQo+IA0KPj4gK8KgwqAgKiBDUkUwWzc6MF06IE1JU0MwICgoMHgwMDog MTgtYnBwKSBvciAoMHgyMDogMjQtYnBwKQ0KPiANCj4+ICvCoMKgICogQ1JFMVs3OjBdOiBN SVNDMSAoZGVmYXVsdDogMHgwMCkNCj4gDQo+PiArwqDCoCAqIENSRTJbNzowXTogdmlkZW8g Zm9ybWF0IGluZGV4ICgweDAwIH4gMHgyMCBvciAweDQwIH4gMHg1MCkNCj4gDQo+PiArwqDC oCAqLw0KPiANCj4+ICvCoMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9f Q1JUQ19QT1JULCAweEUwLCAodTgpIH5BU1REUF9DTEVBUl9NQVNLLA0KPiANCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFTVERQ X01JU0MwXzI0YnBwKTsNCj4gDQo+PiArwqDCoCBhc3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFz dCwgQVNUX0lPX0NSVENfUE9SVCwgMHhFMSwgKHU4KSB+QVNURFBfQ0xFQVJfTUFTSywgQVNU RFBfTUlTQzEpOw0KPiANCj4+ICvCoMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBB U1RfSU9fQ1JUQ19QT1JULCAweEUyLCAodTgpDQo+IA0KPj4gK35BU1REUF9DTEVBUl9NQVNL LCBNb2RlSWR4KTsgfQ0KPiANCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0 L2FzdF9kcnYuaA0KPiANCj4+IGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHJ2LmggaW5k ZXggYTE5MzE1YjJmLi5mZjFhZTMxNGIgMTAwNjQ0DQo+IA0KPj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2FzdC9hc3RfZHJ2LmgNCj4gDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXN0 L2FzdF9kcnYuaA0KPiANCj4+IEBAIC03MCw2ICs3MCw3IEBAIGVudW0gYXN0X3R4X2NoaXAg ew0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCBBU1RfVFhfTk9ORSwNCj4gDQo+PsKgwqAg wqDCoMKgwqDCoMKgwqAgQVNUX1RYX1NJTDE2NCwNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKg wqAgQVNUX1RYX0RQNTAxLA0KPiANCj4+ICvCoMKgIEFTVF9UWF9BU1REUCwNCj4gDQo+PsKg wqAgfTsNCj4gDQo+PiANCj4gDQo+PsKgwqAgI2RlZmluZSBBU1RfRFJBTV81MTJNeDE2IDAN Cj4gDQo+PiBAQCAtMTg0LDYgKzE4NSwxMCBAQCBzdHJ1Y3QgYXN0X3ByaXZhdGUgew0KPiAN Cj4+wqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOw0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fY29ubmVjdG9y IGNvbm5lY3RvcjsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0gZHA1MDE7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB7DQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2Vu Y29kZXIgZW5jb2RlcjsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsNCj4gDQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqAgfSBhc3RkcDsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgfSBv dXRwdXQ7DQo+IA0KPj4gDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIGJvb2wgc3VwcG9y dF93aWRlX3NjcmVlbjsNCj4gDQo+PiBAQCAtMzU3LDEwICszNjIsMTEzIEBAIGludCBhc3Rf bW9kZV9jb25maWdfaW5pdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCk7DQo+IA0KPj7CoMKg ICNkZWZpbmUgQVNUX0RQNTAxX0VESURfREFUQcKgwqDCoCAweGYwMjANCj4gDQo+PiANCj4g DQo+PsKgwqAgLyogRGVmaW5lIGZvciBTb2Mgc2NyYXRjaGVkIHJlZyAqLw0KPiANCj4+ICsj ZGVmaW5lIENPUFJPQ0VTU09SX0xBVU5DSMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgQklUKDUpDQo+IA0KPj4gKw0KPiANCj4+ICsvKg0KPiANCj4+ICsgKiBE aXNwbGF5IFRyYW5zbWl0dGVyIFR5cGU6DQo+IA0KPj4gKyAqLw0KPiANCj4+ICsjZGVmaW5l IFRYX1RZUEVfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBHRU5NQVNLKDMsIDEpDQo+IA0KPj4gKyNkZWZpbmUgTk9fVFjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKDAgPDwgMSkNCj4gDQo+PiArI2RlZmluZSBJ VEU2NjEyMV9WQklPU19UWMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKDEgPDwgMSkNCj4gDQo+PiArI2RlZmluZSBTSTE2NF9WQklPU19UWMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKDIgPDwgMSkNCj4g DQo+PiArI2RlZmluZSBDSDcwMDNfVkJJT1NfVFjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAoMyA8PCAxKQ0KPiANCj4+ICsjZGVmaW5lIERQNTAxX1ZC SU9TX1RYwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICg0IDw8IDEpDQo+IA0KPj4gKyNkZWZpbmUgQU5YOTgwN19WQklPU19UWMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKDUgPDwgMSkNCj4gDQo+PiArI2RlZmlu ZSBUWF9GV19FTUJFRERFRF9GV19UWMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAo NiA8PCAxKQ0KPiANCj4+ICsjZGVmaW5lIEFTVERQX0RQTUNVX1RYwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICg3IDw8IDEp DQo+IA0KPj4gKw0KPiANCj4+wqDCoCAjZGVmaW5lIEFTVF9WUkFNX0lOSVRfU1RBVFVTX01B U0vCoMKgwqDCoMKgwqAgR0VOTUFTSyg3LCA2KQ0KPiANCj4+wqDCoCAvLyNkZWZpbmUgQVNU X1ZSQU1fSU5JVF9CWV9CTUPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDcpDQo+IA0K Pj7CoMKgIC8vI2RlZmluZSBBU1RfVlJBTV9JTklUX1JFQURZwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIEJJVCg2KQ0KPiANCj4+IA0KPiANCj4+ICsvKiBEZWZpbmUgZm9yIFNv YyBzY3JhdGNoZWQgcmVnIHVzZWQgb24gQVNURFAgKi8NCj4gDQo+PiArI2RlZmluZSBBU1Rf RFBfUEhZX1NMRUVQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBC SVQoNCkNCj4gDQo+PiArI2RlZmluZSBBU1RfRFBfVklERU9fRU5BQkxFwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgQklUKDApDQo+IA0KPj4gKw0KPiANCj4+ICsjZGVmaW5lIEFTVF9E UF9QT1dFUl9PTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRydWUN Cj4gDQo+PiArI2RlZmluZSBBU1RfRFBfUE9XRVJfT0ZGwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGZhbHNlDQo+IA0KPj4gKw0KPiANCj4+ICsvKg0KPiANCj4+ICsg KiBDUkQxW2I1XTogRFAgTUNVIEZXIGlzIGV4ZWN1dGluZw0KPiANCj4+ICsgKiBDUkRDW2Iw XTogRFAgbGluayBzdWNjZXNzDQo+IA0KPj4gKyAqIENSREZbYjBdOiBEUCBIUEQNCj4gDQo+ PiArICogQ1JFNVtiMF06IEhvc3QgcmVhZGluZyBFRElEIHByb2Nlc3MgaXMgZG9uZcKgICov DQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfTUNVX0ZXX0VYRUNVVElOR8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDUpDQo+IA0KPj4gKyNkZWZpbmUgQVNU RFBfTElOS19TVUNDRVNTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgQklUKDApDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfSFBEwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMCkNCj4gDQo+PiArI2RlZmluZSBBU1REUF9IT1NU X0VESURfUkVBRF9ET05FwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgwKQ0K PiANCj4+ICsjZGVmaW5lIEFTVERQX0hPU1RfRURJRF9SRUFEX0RPTkVfTUFTS8KgwqDCoCBH RU5NQVNLKDAsIDApDQo+IA0KPj4gKw0KPiANCj4+ICsvKg0KPiANCj4+ICsgKiBDUkI4W2Ix XTogRW5hYmxlIFZTWU5DIG9mZg0KPiANCj4+ICsgKiBDUkI4W2IwXTogRW5hYmxlIEhTWU5D IG9mZg0KPiANCj4+ICsgKi8NCj4gDQo+PiArI2RlZmluZSBBU1RfRFBNU19WU1lOQ19PRkbC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQklUKDEpDQo+IA0KPj4gKyNkZWZpbmUgQVNUX0RQTVNfSFNZTkNfT0ZGwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEJJVCgwKQ0KPiANCj4+ICsNCj4gDQo+PiArLyoNCj4gDQo+PiArICogQ1JERltiNF06IE1p cnJvciBvZiBBU1RfRFBfVklERU9fRU5BQkxFDQo+IA0KPj4gKyAqIFByZWNvbmRpdGlvbjrC oCBBLiB+QVNUX0RQX1BIWV9TTEVFUMKgICYmDQo+IA0KPj4gKyAqwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCLiBEUF9IUEQgJiYNCj4gDQo+PiAr ICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEMuIERQ X0xJTktfU1VDQ0VTUw0KPiANCj4+ICsgKi8NCj4gDQo+PiArI2RlZmluZSBBU1REUF9NSVJS T1JfVklERU9fRU5BQkxFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCg0KQ0K PiANCj4+ICsNCj4gDQo+PiArI2RlZmluZSBBU1REUF9FRElEX1JFQURfUE9JTlRFUl9NQVNL wqAgR0VOTUFTSyg3LCAwKQ0KPiANCj4+ICsjZGVmaW5lIEFTVERQX0VESURfVkFMSURfRkxB R19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soMCwgMCkNCj4g DQo+PiArI2RlZmluZSBBU1REUF9FRElEX1JFQURfREFUQV9NQVNLwqDCoMKgwqDCoMKgwqAg R0VOTUFTSyg3LCAwKQ0KPiANCj4+ICsNCj4gDQo+PiArLyoNCj4gDQo+PiArICogQVNURFAg c2V0bW9kZSByZWdpc3RlcnM6DQo+IA0KPj4gKyAqIENSRTBbNzowXTogTUlTQzAgKCgweDAw OiAxOC1icHApIG9yICgweDIwOiAyNC1icHApDQo+IA0KPj4gKyAqIENSRTFbNzowXTogTUlT QzEgKGRlZmF1bHQ6IDB4MDApDQo+IA0KPj4gKyAqIENSRTJbNzowXTogdmlkZW8gZm9ybWF0 IGluZGV4ICgweDAwIH4gMHgyMCBvciAweDQwIH4gMHg1MCnCoCAqLw0KPiANCj4+ICsjZGVm aW5lIEFTVERQX01JU0MwXzI0YnBwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEJJVCg1KQ0KPiANCj4+ICsjZGVmaW5lIEFTVERQX01JU0MxwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDANCj4gDQo+ PiArI2RlZmluZSBBU1REUF9DTEVBUl9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIEdFTk1BU0soNywgMCkNCj4gDQo+PiArDQo+IA0KPj4gKy8qDQo+IA0KPj4g KyAqIEFTVERQIHJlc291bHRpb24gdGFibGU6DQo+IA0KPj4gKyAqIEVYOsKgIEFTVERQX0Ff Ql9DOg0KPiANCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBBOiBSZXNv bHV0aW9uDQo+IA0KPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEI6IFJl ZnJlc2ggUmF0ZQ0KPiANCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBD OiBNaXNjIGluZm9ybWF0aW9uLCBzdWNoIGFzIENWVCwgUmVkdWNlIEJsYW5rZWQNCj4gDQo+ PiArICovDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfNjQweDQ4MF82MMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDB4MDANCj4gDQo+PiArI2RlZmluZSBBU1REUF82NDB4NDgwXzcywqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwMQ0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzY0 MHg0ODBfNzXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDAyDQo+IA0KPj4gKyNkZWZp bmUgQVNURFBfNjQweDQ4MF84NcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDMNCj4g DQo+PiArI2RlZmluZSBBU1REUF84MDB4NjAwXzU2wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgMHgwNA0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzgwMHg2MDBfNjDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAweDA1DQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfODAweDYwMF83MsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MDYNCj4gDQo+PiArI2RlZmluZSBBU1REUF84 MDB4NjAwXzc1wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwNw0KPiANCj4+ICsjZGVm aW5lIEFTVERQXzgwMHg2MDBfODXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDA4DQo+ IA0KPj4gKyNkZWZpbmUgQVNURFBfMTAyNHg3NjhfNjDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDB4MDkNCj4gDQo+PiArI2RlZmluZSBBU1REUF8xMDI0eDc2OF83MMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMHgwQQ0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzEwMjR4NzY4Xzc1wqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAweDBCDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfMTAyNHg3Njhf ODXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MEMNCj4gDQo+PiArI2RlZmluZSBBU1REUF8x MjgweDEwMjRfNjDCoMKgwqDCoMKgwqDCoMKgwqAgMHgwRA0KPiANCj4+ICsjZGVmaW5lIEFT VERQXzEyODB4MTAyNF83NcKgwqDCoMKgwqDCoMKgwqDCoCAweDBFDQo+IA0KPj4gKyNkZWZp bmUgQVNURFBfMTI4MHgxMDI0Xzg1wqDCoMKgwqDCoMKgwqDCoMKgIDB4MEYNCj4gDQo+PiAr I2RlZmluZSBBU1REUF8xNjAweDEyMDBfNjDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxMA0KPiAN Cj4+ICsjZGVmaW5lIEFTVERQXzMyMHgyNDBfNjDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAweDExDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfNDAweDMwMF82MMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDB4MTINCj4gDQo+PiArI2RlZmluZSBBU1REUF81MTJ4Mzg0XzYwwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxMw0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzE5 MjB4MTIwMF82MMKgwqDCoMKgwqDCoMKgwqDCoCAweDE0DQo+IA0KPj4gKyNkZWZpbmUgQVNU RFBfMTkyMHgxMDgwXzYwwqDCoMKgwqDCoMKgwqDCoMKgIDB4MTUNCj4gDQo+PiArI2RlZmlu ZSBBU1REUF8xMjgweDgwMF82MMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxNg0KPiANCj4+ ICsjZGVmaW5lIEFTVERQXzEyODB4ODAwXzYwX1JCwqDCoMKgwqAgMHgxNw0KPiANCj4+ICsj ZGVmaW5lIEFTVERQXzE0NDB4OTAwXzYwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDE4DQo+ IA0KPj4gKyNkZWZpbmUgQVNURFBfMTQ0MHg5MDBfNjBfUkLCoMKgwqDCoCAweDE5DQo+IA0K Pj4gKyNkZWZpbmUgQVNURFBfMTY4MHgxMDUwXzYwwqDCoMKgwqDCoMKgwqDCoMKgIDB4MUEN Cj4gDQo+PiArI2RlZmluZSBBU1REUF8xNjgweDEwNTBfNjBfUkLCoMKgIDB4MUINCj4gDQo+ PiArI2RlZmluZSBBU1REUF8xNjAweDkwMF82MMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgx Qw0KPiANCj4+ICsjZGVmaW5lIEFTVERQXzE2MDB4OTAwXzYwX1JCwqDCoMKgwqAgMHgxRA0K PiANCj4+ICsjZGVmaW5lIEFTVERQXzEzNjZ4NzY4XzYwwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAweDFFDQo+IA0KPj4gKyNkZWZpbmUgQVNURFBfMTE1Mng4NjRfNzXCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIDB4MUYNCj4gDQo+PiArDQo+IA0KPj7CoMKgIGludCBhc3RfbW1faW5pdChz dHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCk7DQo+IA0KPj4gDQo+IA0KPj7CoMKgIC8qIGFzdCBw b3N0ICovDQo+IA0KPj4gQEAgLTM4MSw0ICs0ODksMTEgQEAgdm9pZCBhc3RfaW5pdF8zcmR0 eChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsNCj4gDQo+PsKgwqAgLyogYXN0X2kyYy5jICov DQo+IA0KPj4gwqDCoHN0cnVjdCBhc3RfaTJjX2NoYW4gKmFzdF9pMmNfY3JlYXRlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOw0KPiANCj4+IA0KPiANCj4+ICsvKiBhc3BlZWQgRFAgKi8N Cj4gDQo+PiAraW50IGFzdF9hc3RkcF9yZWFkX2VkaWQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdTggKmVkaWRkYXRhKTsgdm9pZA0KPiANCj4+ICthc3RfZHBfbGF1bmNoKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHU4IGJQb3dlcik7IHZvaWQNCj4gDQo+PiArYXN0X2RwX3Bvd2Vy X29uX29mZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIG5vKTsgdm9pZA0KPiANCj4+ ICthc3RfZHBfc2V0X29uX29mZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIG5vKTsg dm9pZA0KPiANCj4+ICthc3RfZHBfc2V0X21vZGUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBz dHJ1Y3QgYXN0X3ZiaW9zX21vZGVfaW5mbw0KPiANCj4+ICsqdmJpb3NfbW9kZSk7DQo+IA0K Pj4gKw0KPiANCj4+wqDCoCAjZW5kaWYNCj4gDQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2FzdC9hc3RfbWFpbi5jDQo+IA0KPj4gYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2Fz dF9tYWluLmMgaW5kZXggMjJlOWUyZDNjLi4xMTEzZWUxY2IgMTAwNjQ0DQo+IA0KPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jDQo+IA0KPj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jDQo+IA0KPj4gQEAgLTIzMiw3ICsyMzIsNyBAQCBz dGF0aWMgaW50IGFzdF9kZXRlY3RfY2hpcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29s ICpuZWVkX3Bvc3QpDQo+IA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYXN0LT50eF9jaGlwX3R5cGUgPSBBU1RfVFhfU0lMMTY0Ow0K PiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCB9DQo+IA0KPj4gDQo+IA0KPj4gLcKgwqDCoCBp ZiAoKGFzdC0+Y2hpcCA9PSBBU1QyMzAwKSB8fCAoYXN0LT5jaGlwID09IEFTVDI0MDApKSB7 DQo+IA0KPj4gK8KgwqAgaWYgKChhc3QtPmNoaXAgPT0gQVNUMjMwMCkgfHwgKGFzdC0+Y2hp cCA9PSBBU1QyNDAwKSB8fCAoYXN0LT5jaGlwDQo+IA0KPj4gKz09IEFTVDI1MDApKSB7DQo+ IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKg0KPiANCj4+wqDC oCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgwqAqIE9uIEFTVDIzMDAgYW5kIDI0 MDAsIGxvb2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IGJ5IHRoZSBTb0MgaW4NCj4gDQo+PsKg wqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIMKgKiB0aGUgU09DIHNjcmF0Y2gg cmVnaXN0ZXIgIzEgYml0cyAxMTo4IChpbnRlcmVzdGluZ2x5IG1hcmtlZCBAQA0KPiANCj4+ IC0yNTYsNyArMjU2LDggQEAgc3RhdGljIGludCBhc3RfZGV0ZWN0X2NoaXAoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgYm9vbCAqbmVlZF9wb3N0KQ0KPiANCj4+wqDCoCDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY2FzZSAweDBjOg0KPiANCj4+wqDCoCDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdC0+dHhfY2hpcF90eXBl ID0gQVNUX1RYX0RQNTAxOw0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfQ0KPiANCj4+IC3CoMKgwqAgfQ0KPiANCj4+ICvCoMKgIH0gZWxzZSBpZiAoYXN0 LT5jaGlwID09IEFTVDI2MDApDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9k cF9sYXVuY2goJmFzdC0+YmFzZSwgMCk7DQo+IA0KPj4gDQo+IA0KPj7CoMKgIMKgwqDCoMKg wqDCoMKgIC8qIFByaW50IHN0dWZmIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzICovDQo+IA0K Pj7CoMKgIMKgwqDCoMKgwqDCoMKgIHN3aXRjaChhc3QtPnR4X2NoaXBfdHlwZSkgew0KPiAN Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tb2RlLmMNCj4gDQo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X21vZGUuYyBpbmRleCA0NWI1NmIzOWEuLjQ3 Mjg4MjViNyAxMDA2NDQNCj4gDQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9t b2RlLmMNCj4gDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tb2RlLmMNCj4g DQo+PiBAQCAtOTg4LDIxICs5ODgsNDEgQEAgc3RhdGljIGludCBhc3RfY3Vyc29yX3BsYW5l X2luaXQoc3RydWN0IGFzdF9wcml2YXRlICphc3QpDQo+IA0KPj7CoMKgIHN0YXRpYyB2b2lk IGFzdF9jcnRjX2RwbXMoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgbW9kZSkNCj4gDQo+ PsKgwqAgew0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYXN0X3ByaXZhdGUg KmFzdCA9IHRvX2FzdF9wcml2YXRlKGNydGMtPmRldik7DQo+IA0KPj4gK8KgwqAgdTggY2gg PSBBU1RfRFBNU19WU1lOQ19PRkYgfCBBU1RfRFBNU19IU1lOQ19PRkY7DQo+IA0KPj4gDQo+ IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIC8qIFRPRE86IE1heWJlIGNvbnRyb2wgZGlzcGxh eSBzaWduYWwgZ2VuZXJhdGlvbiB3aXRoDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIMKg KsKgwqDCoMKgwqDCoCBTeW5jIEVuYWJsZSAoYml0IENSMTcuNykuDQo+IA0KPj7CoMKgIMKg wqDCoMKgwqDCoMKgIMKgKi8NCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgc3dpdGNoICht b2RlKSB7DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIGNhc2UgRFJNX01PREVfRFBNU19P TjoNCj4gDQo+PiAtwqDCoMKgIGNhc2UgRFJNX01PREVfRFBNU19TVEFOREJZOg0KPiANCj4+ IC3CoMKgwqAgY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6DQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIGFzdF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fU0VRX1BP UlQswqAgMHgwMSwgMHhkZiwgMCk7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGFz dF9zZXRfaW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweGI2LCAweGZj LCAwKTsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChh c3QtPnR4X2NoaXBfdHlwZSA9PSBBU1RfVFhfRFA1MDEpDQo+IA0KPj7CoMKgIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X3NldF9kcDUwMV92 aWRlb19vdXRwdXQoY3J0Yy0+ZGV2LCAxKTsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChhc3QtPnR4X2NoaXBfdHlwZSA9PSBBU1RfVFhfQVNURFApIHsN Cj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFzdF9kcF9w b3dlcl9vbl9vZmYoY3J0Yy0+ZGV2LCBBU1RfRFBfUE9XRVJfT04pOw0KPiANCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X3dhaXRfZm9yX3ZyZXRyYWNl KGFzdCk7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBh c3RfZHBfc2V0X29uX29mZihjcnRjLT5kZXYsIDEpOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoCB9DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3Rf Y3J0Y19sb2FkX2x1dChhc3QsIGNydGMpOw0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+IA0KPj4gK8KgwqAgY2FzZSBEUk1fTU9ERV9EUE1T X1NUQU5EQlk6DQo+IA0KPj4gK8KgwqAgY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6DQo+ IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIGNhc2UgRFJNX01PREVfRFBNU19PRkY6DQo+IA0K Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGNoID0gbW9kZTsNCj4gDQo+PsKgwqAgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChhc3QtPnR4X2NoaXBfdHlwZSA9PSBBU1Rf VFhfRFA1MDEpDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXN0X3NldF9kcDUwMV92aWRlb19vdXRwdXQoY3J0Yy0+ZGV2LCAw KTsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+ IA0KPj4gKw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXN0LT50eF9jaGlw X3R5cGUgPT0gQVNUX1RYX0FTVERQKSB7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhc3RfZHBfc2V0X29uX29mZihjcnRjLT5kZXYsIDApOw0KPiAN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2RwX3Bvd2Vy X29uX29mZihjcnRjLT5kZXYsIEFTVF9EUF9QT1dFUl9PRkYpOw0KPiANCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCB9DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCBhc3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX1NFUV9QT1JULMKgIDB4MDEs IDB4ZGYsIDB4MjApOw0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3Rfc2V0X2lu ZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhiNiwgMHhmYywgY2gpOw0K PiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCB9DQo+IA0KPj7CoMKgIH0NCj4gDQo+PiANCj4g DQo+PiBAQCAtMTAyNyw3ICsxMDQ3LDcgQEAgYXN0X2NydGNfaGVscGVyX21vZGVfdmFsaWQo c3RydWN0IGRybV9jcnRjDQo+IA0KPj4gKmNydGMsIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlDQo+IA0KPj4gDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoKGFzdC0+Y2hpcCA9PSBBU1QyMTAwKSB8fCAoYXN0LT5jaGlwID09IEFTVDIy MDApIHx8DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDCoMKg wqDCoChhc3QtPmNoaXAgPT0gQVNUMjMwMCkgfHwgKGFzdC0+Y2hpcCA9PSBBU1QyNDAwKSB8 fA0KPiANCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIMKgwqDCoCAoYXN0LT5jaGlwID09 IEFTVDI1MDApKSB7DQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIMKgwqDCoCAoYXN0 LT5jaGlwID09IEFTVDI1MDApIHx8IChhc3QtPmNoaXAgPT0gQVNUMjYwMCkpIHsNCj4gDQo+ PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoKG1vZGUtPmhkaXNwbGF5ID09IDE5MjApICYmIChtb2RlLT52ZGlzcGxheSA9PSAxMDgw KSkNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE1PREVfT0s7DQo+IA0KPj4gDQo+IA0K Pj4gQEAgLTExMTAsNiArMTEzMCw3IEBAIGFzdF9jcnRjX2hlbHBlcl9hdG9taWNfZmx1c2go c3RydWN0IGRybV9jcnRjICpjcnRjLA0KPiANCj4+wqDCoCDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgYXN0X3ByaXZhdGUgKmFzdCA9IHRvX2FzdF9wcml2YXRlKGNydGMtPmRldik7DQo+IA0K Pj7CoMKgIMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhc3RfY3J0Y19zdGF0ZSAqYXN0X2NydGNf c3RhdGUgPSB0b19hc3RfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKTsNCj4gDQo+PsKgwqAgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGFzdF9jcnRjX3N0YXRlICpvbGRfYXN0X2NydGNfc3RhdGUg PQ0KPiANCj4+IHRvX2FzdF9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRlKTsNCj4gDQo+PiAr wqDCoCBzdHJ1Y3QgYXN0X3ZiaW9zX21vZGVfaW5mbyAqdmJpb3NfbW9kZV9pbmZvID0NCj4g DQo+PiArJmFzdF9jcnRjX3N0YXRlLT52Ymlvc19tb2RlX2luZm87DQo+IA0KPj4gDQo+IA0K Pj7CoMKgIMKgwqDCoMKgwqDCoMKgIC8qDQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIMKg KiBUaGUgZ2FtbWEgTFVUIGhhcyB0byBiZSByZWxvYWRlZCBhZnRlciBjaGFuZ2luZyB0aGUg cHJpbWFyeSBAQA0KPiANCj4+IC0xMTE3LDYgKzExMzgsMTAgQEAgYXN0X2NydGNfaGVscGVy X2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsDQo+IA0KPj7CoMKgIMKgwqDC oMKgwqDCoMKgIMKgKi8NCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqAgaWYgKG9sZF9hc3Rf Y3J0Y19zdGF0ZS0+Zm9ybWF0ICE9IGFzdF9jcnRjX3N0YXRlLT5mb3JtYXQpDQo+IA0KPj7C oMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhc3RfY3J0Y19sb2FkX2x1dChh c3QsIGNydGMpOw0KPiANCj4+ICsNCj4gDQo+PiArwqDCoCAvL1NldCBBc3BlZWQgRGlzcGxh eS1Qb3J0DQo+IA0KPj4gK8KgwqAgaWYgKGFzdC0+dHhfY2hpcF90eXBlID09IEFTVF9UWF9B U1REUCkNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXN0X2RwX3NldF9tb2RlKGNy dGMsIHZiaW9zX21vZGVfaW5mbyk7DQo+IA0KPj7CoMKgIH0NCj4gDQo+PiANCj4gDQo+PsKg wqAgc3RhdGljIHZvaWQNCj4gDQo+PiBAQCAtMTUyNyw2ICsxNTUyLDkzIEBAIHN0YXRpYyBp bnQgYXN0X2RwNTAxX291dHB1dF9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQ0KPiAN Cj4+wqDCoCDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4gDQo+PsKgwqAgfQ0KPiANCj4+ IA0KPiANCj4+ICsvKg0KPiANCj4+ICsgKiBBU1BFRUQgRGlzcGxheS1Qb3J0IENvbm5lY3Rv cg0KPiANCj4+ICsgKi8NCj4gDQo+PiArDQo+IA0KPj4gK3N0YXRpYyBpbnQgYXN0X2FzdGRw X2Nvbm5lY3Rvcl9oZWxwZXJfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yDQo+IA0K Pj4gKypjb25uZWN0b3IpIHsNCj4gDQo+PiArwqDCoCB2b2lkICplZGlkOw0KPiANCj4+ICsN Cj4gDQo+PiArwqDCoCBpbnQgc3VjYzsNCj4gDQo+PiArwqDCoCBpbnQgY291bnQ7DQo+IA0K Pj4gKw0KPiANCj4+ICvCoMKgIGVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VS TkVMKTsNCj4gDQo+PiArwqDCoCBpZiAoIWVkaWQpDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gZXJyX2RybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHk7DQo+ IA0KPj4gKw0KPiANCj4+ICvCoMKgIHN1Y2MgPSBhc3RfYXN0ZHBfcmVhZF9lZGlkKGNvbm5l Y3Rvci0+ZGV2LCBlZGlkKTsNCj4gDQo+PiArwqDCoCBpZiAoc3VjYyA8IDApDQo+IA0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2tmcmVlOw0KPiANCj4+ICsNCj4gDQo+ PiArwqDCoCBkcm1fY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3Rvciwg ZWRpZCk7DQo+IA0KPj4gK8KgwqAgY291bnQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVj dG9yLCBlZGlkKTsNCj4gDQo+PiArwqDCoCBrZnJlZShlZGlkKTsNCj4gDQo+PiArDQo+IA0K Pj4gK8KgwqAgcmV0dXJuIGNvdW50Ow0KPiANCj4+ICsNCj4gDQo+PiArZXJyX2tmcmVlOg0K PiANCj4+ICvCoMKgIGtmcmVlKGVkaWQpOw0KPiANCj4+ICtlcnJfZHJtX2Nvbm5lY3Rvcl91 cGRhdGVfZWRpZF9wcm9wZXJ0eToNCj4gDQo+PiArwqDCoCBkcm1fY29ubmVjdG9yX3VwZGF0 ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgTlVMTCk7DQo+IA0KPj4gK8KgwqAgcmV0dXJu IDA7DQo+IA0KPj4gK30NCj4gDQo+PiArDQo+IA0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgYXN0X2FzdGRwX2Nvbm5lY3Rvcl9oZWxwZXJf ZnVuY3MgPSB7DQo+IA0KPj4gK8KgwqAgLmdldF9tb2RlcyA9IGFzdF9hc3RkcF9jb25uZWN0 b3JfaGVscGVyX2dldF9tb2RlcywNCj4gDQo+PiArfTsNCj4gDQo+PiArDQo+IA0KPj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBhc3RfYXN0ZHBfY29ubmVj dG9yX2Z1bmNzID0gew0KPiANCj4+ICvCoMKgIC5yZXNldCA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9yZXNldCwNCj4gDQo+PiArwqDCoCAuZmlsbF9tb2RlcyA9IGRybV9oZWxw ZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywNCj4gDQo+PiArwqDCoCAuZGVzdHJv eSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwNCj4gDQo+PiArwqDCoCAuYXRvbWljX2R1cGxp Y2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3Rh dGUsDQo+IA0KPj4gK8KgwqAgLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsDQo+IA0KPj4gK307DQo+IA0KPj4gKw0K PiANCj4+ICtzdGF0aWMgaW50IGFzdF9hc3RkcF9jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QNCj4gDQo+PiArZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KSB7DQo+IA0KPj4gK8KgwqAgaW50IHJldDsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgcmV0 ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAmYXN0X2FzdGRwX2Nvbm5l Y3Rvcl9mdW5jcywNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOw0K PiANCj4+ICvCoMKgIGlmIChyZXQpDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIGRybV9jb25uZWN0b3JfaGVscGVy X2FkZChjb25uZWN0b3IsDQo+IA0KPj4gKyZhc3RfYXN0ZHBfY29ubmVjdG9yX2hlbHBlcl9m dW5jcyk7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIGNvbm5lY3Rvci0+aW50ZXJsYWNlX2Fs bG93ZWQgPSAwOw0KPiANCj4+ICvCoMKgIGNvbm5lY3Rvci0+ZG91Ymxlc2Nhbl9hbGxvd2Vk ID0gMDsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1f Q09OTkVDVE9SX1BPTExfQ09OTkVDVDsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgcmV0dXJu IDA7DQo+IA0KPj4gK30NCj4gDQo+PiArDQo+IA0KPj4gK3N0YXRpYyBpbnQgYXN0X2FzdGRw X291dHB1dF9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KSB7DQo+IA0KPj4gK8KgwqAg c3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZhc3QtPmJhc2U7DQo+IA0KPj4gK8KgwqAgc3Ry dWN0IGRybV9jcnRjICpjcnRjID0gJmFzdC0+Y3J0YzsNCj4gDQo+PiArwqDCoCBzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmYXN0LT5vdXRwdXQuYXN0ZHAuZW5jb2RlcjsNCj4g DQo+PiArwqDCoCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gJmFzdC0+b3V0 cHV0LmFzdGRwLmNvbm5lY3RvcjsNCj4gDQo+PiArwqDCoCBpbnQgcmV0Ow0KPiANCj4+ICsN Cj4gDQo+PiArwqDCoCByZXQgPSBkcm1fc2ltcGxlX2VuY29kZXJfaW5pdChkZXYsIGVuY29k ZXIsIERSTV9NT0RFX0VOQ09ERVJfVE1EUyk7DQo+IA0KPj4gK8KgwqAgaWYgKHJldCkNCj4g DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4gDQo+PiArwqDCoCBl bmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IGRybV9jcnRjX21hc2soY3J0Yyk7DQo+IA0KPj4g Kw0KPiANCj4+ICvCoMKgIHJldCA9IGFzdF9hc3RkcF9jb25uZWN0b3JfaW5pdChkZXYsIGNv bm5lY3Rvcik7DQo+IA0KPj4gK8KgwqAgaWYgKHJldCkNCj4gDQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIHJldDsNCj4gDQo+PiArDQo+IA0KPj4gK8KgwqAgcmV0ID0gZHJt X2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOw0KPiANCj4+ ICvCoMKgIGlmIChyZXQpDQo+IA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7DQo+IA0KPj4gKw0KPiANCj4+ICvCoMKgIHJldHVybiAwOw0KPiANCj4+ICt9DQo+IA0K Pj4gKw0KPiANCj4+wqDCoCAvKg0KPiANCj4+wqDCoMKgICogTW9kZSBjb25maWcNCj4gDQo+ PsKgwqDCoCAqLw0KPiANCj4+IEBAIC0xNTYzLDcgKzE2NzUsOCBAQCBpbnQgYXN0X21vZGVf Y29uZmlnX2luaXQoc3RydWN0IGFzdF9wcml2YXRlICphc3QpDQo+IA0KPj7CoMKgIMKgwqDC oMKgwqDCoMKgIMKgwqDCoMKgYXN0LT5jaGlwID09IEFTVDIyMDAgfHwNCj4gDQo+PsKgwqAg wqDCoMKgwqDCoMKgwqAgwqDCoMKgwqBhc3QtPmNoaXAgPT0gQVNUMjMwMCB8fA0KPiANCj4+ wqDCoCDCoMKgwqDCoMKgwqDCoCDCoMKgwqDCoGFzdC0+Y2hpcCA9PSBBU1QyNDAwIHx8DQo+ IA0KPj4gLcKgwqDCoCDCoMKgwqAgYXN0LT5jaGlwID09IEFTVDI1MDApIHsNCj4gDQo+PiAr wqDCoCDCoMKgwqAgYXN0LT5jaGlwID09IEFTVDI1MDAgfHwNCj4gDQo+PiArwqDCoCDCoMKg wqAgYXN0LT5jaGlwID09IEFTVDI2MDApIHsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gMTkyMDsNCj4g DQo+PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldi0+bW9kZV9jb25m aWcubWF4X2hlaWdodCA9IDIwNDg7DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIH0gZWxz ZSB7DQo+IA0KPj4gQEAgLTE1OTQsNiArMTcwNyw5IEBAIGludCBhc3RfbW9kZV9jb25maWdf aW5pdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCkNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKg wqAgY2FzZSBBU1RfVFhfRFA1MDE6DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSBhc3RfZHA1MDFfb3V0cHV0X2luaXQoYXN0KTsNCj4gDQo+PsKg wqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOw0KPiANCj4+ICvCoMKg IGNhc2UgQVNUX1RYX0FTVERQOg0KPiANCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQg PSBhc3RfYXN0ZHBfb3V0cHV0X2luaXQoYXN0KTsNCj4gDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqAgYnJlYWs7DQo+IA0KPj7CoMKgIMKgwqDCoMKgwqDCoMKgIH0NCj4gDQo+PsKgwqAg wqDCoMKgwqDCoMKgwqAgaWYgKHJldCkNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+IA0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hc3QvYXN0X3Bvc3QuYw0KPiANCj4+IGIvZHJpdmVycy9ncHUvZHJtL2FzdC9h c3RfcG9zdC5jIGluZGV4IGI1ZDkyZjY1Mi4uMGFhOWNmMGZiIDEwMDY0NA0KPiANCj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X3Bvc3QuYw0KPiANCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hc3QvYXN0X3Bvc3QuYw0KPiANCj4+IEBAIC0zNzksNyArMzc5LDkgQEAg dm9pZCBhc3RfcG9zdF9ncHUoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCj4gDQo+PsKgwqAg wqDCoMKgwqDCoMKgwqAgYXN0X2VuYWJsZV9tbWlvKGRldik7DQo+IA0KPj7CoMKgIMKgwqDC oMKgwqDCoMKgIGFzdF9zZXRfZGVmX2V4dF9yZWcoZGV2KTsNCj4gDQo+PiANCj4gDQo+PiAt wqDCoMKgIGlmIChhc3QtPmNvbmZpZ19tb2RlID09IGFzdF91c2VfcDJhKSB7DQo+IA0KPj4g K8KgwqAgaWYgKGFzdC0+Y2hpcCA9PSBBU1QyNjAwKSB7DQo+IA0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgIGFzdF9kcF9sYXVuY2goZGV2LCAxKTsNCj4gDQo+PiArwqDCoCB9IGVsc2Ug aWYgKGFzdC0+Y29uZmlnX21vZGUgPT0gYXN0X3VzZV9wMmEpIHsNCj4gDQo+PsKgwqAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChhc3QtPmNoaXAgPT0gQVNUMjUwMCkN Cj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBhc3RfcG9zdF9jaGlwXzI1MDAoZGV2KTsNCj4gDQo+PsKgwqAgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKGFzdC0+Y2hpcCA9PSBBU1QyMzAwIHx8IGFz dC0+Y2hpcCA9PSBBU1QyNDAwKQ0KPiANCj4+IA0KPiANCj4+IGJhc2UtY29tbWl0OiBjNTRi MzlhNTY1MjI3NTM4YzUyZWFkMjM0OWViMTdkNTRhYWRkNmY3DQo+IA0KPj4gLS0NCj4gDQo+ PiAyLjI3LjANCj4gDQo+PiANCj4gDQo+IC0tDQo+IA0KPiBUaG9tYXMgWmltbWVybWFubg0K PiANCj4gR3JhcGhpY3MgRHJpdmVyIERldmVsb3Blcg0KPiANCj4gU1VTRSBTb2Z0d2FyZSBT b2x1dGlvbnMgR2VybWFueSBHbWJIDQo+IA0KPiBNYXhmZWxkc3RyLiA1LCA5MDQwOSBOw7xy bmJlcmcsIEdlcm1hbnkNCj4gDQo+IChIUkIgMzY4MDksIEFHIE7DvHJuYmVyZykNCj4gDQo+ IEdlc2Now6RmdHNmw7xocmVyOiBJdm8gVG90ZXYNCj4gDQoNCi0tIA0KVGhvbWFzIFppbW1l cm1hbm4NCkdyYXBoaWNzIERyaXZlciBEZXZlbG9wZXINClNVU0UgU29mdHdhcmUgU29sdXRp b25zIEdlcm1hbnkgR21iSA0KTWF4ZmVsZHN0ci4gNSwgOTA0MDkgTsO8cm5iZXJnLCBHZXJt YW55DQooSFJCIDM2ODA5LCBBRyBOw7xybmJlcmcpDQpHZXNjaMOkZnRzZsO8aHJlcjogSXZv IFRvdGV2DQo= --------------CsIWa0zcf0JfF3JvYnwCXlrC-- --------------s2h0kNd6tXOeTD9njpqCWjEn Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEExndm/fpuMUdwYFFolh/E3EQov+AFAmJySVsFAwAAAAAACgkQlh/E3EQov+DT AhAAugjFwfs51LiG3do4yN154T2QcxfE8t6Ezv00/LrdYd/cTI34fs+Ggq3/9oxGN0dIYo6aWXcb jqwXioZYQhvBde2FNuQEDxVEUrsxX4TbaYFJKdJyBHKzZd5uNNIbAUa/uTg9FZC/0Ro+wd36P6tI 6hhwZiJsZTgpWjnQYyaw7o14DqRBRr3lPGoHLOnt6xg1lcCZXMUXWxbYUOwYOssmRJmaSZZoL0IO Ld5PCm86BMgRz1Leyv7CSVuM1zdwWk3yVVZNtriDjXj0bhPzLjn4Kqw3XahqRf2rdjLruSAu9rr4 lc/a6aVJJksnqO/D7ttWqWipRTLsXQG7NM/v60u6d2nR/MKivOGu43I76vbRsV4/L2T2vaGZYENT bQQBj1TurWg2WVfKAWfsO6vsbVgQGqQ6tZCvasgo9qtOH6XkpioHIixk+//qLE8DxF61+nndBFPM 7gojfadkOKpAKKpOKCFmrtLgKl5lif3sVAwS6Uunrj2BmtoF6XU+mNrn3BWPmm5ORyzT53WJ8xX0 NzKCYgFRslQhfP9CN/VFjZoRoQ3Qd/L0yt6+4oKefu2k0PSx2IBluZcZZMsIr6joMFx4T/fJHfDL UgITaUmAci5/Y+t6tWHESewYyYdP4maBfbp6UpgCMaSF7+PGKk0fmEAH8yYex4LD+yDvunoKD7fe br4= =V/Fl -----END PGP SIGNATURE----- --------------s2h0kNd6tXOeTD9njpqCWjEn--