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 BCCD0C83005 for ; Mon, 12 Jun 2023 10:51:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235723AbjFLKvu (ORCPT ); Mon, 12 Jun 2023 06:51:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235719AbjFLKv3 (ORCPT ); Mon, 12 Jun 2023 06:51:29 -0400 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 45C9A8A7F; Mon, 12 Jun 2023 03:35:50 -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-out1.suse.de (Postfix) with ESMTPS id D926522707; Mon, 12 Jun 2023 10:35:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1686566136; 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=qb5PFNJwNy5jnbAJ4Knmsfg/tTqKwwr/OAafhHT/2wE=; b=IoqqnjktGdmlJ02BwLa3e6myxUKrLia5Zbl3GBTTYevQ+/ve4pMk2ipPfPF5Ni/m9oty8Y 3xvNl/CTyaql/qoINl8j9iF4ChrYpozEUYUdJabEoeEtv85jgPB4VsPzYvgEoKqgdl9kYj hfoq0Ur/TQAeLV6ckGJfQy6e8a4D1Uo= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1686566136; 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=qb5PFNJwNy5jnbAJ4Knmsfg/tTqKwwr/OAafhHT/2wE=; b=BCy2rTiFsQ6pp6BI18fe6j+7nwHmwSvLV1FebzcWMnh2yLOYqajCFjHk0eueEp6BSlwfwf wgzI1Mejay4/fyAQ== 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 929A3138EC; Mon, 12 Jun 2023 10:35:36 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id JaDJIvj0hmSaLgAAMHmgww (envelope-from ); Mon, 12 Jun 2023 10:35:36 +0000 Message-ID: <0091f47e-a35e-d16d-87b7-db254fc5cc48@suse.de> Date: Mon, 12 Jun 2023 12:35:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.2 Subject: Re: [PATCH 28/30] fbdev/core: Move file-I/O code into separate file Content-Language: en-US To: Sam Ravnborg Cc: daniel.thompson@linaro.org, linux-staging@lists.linux.dev, geert+renesas@glider.be, linux-sh@vger.kernel.org, jingoohan1@gmail.com, deller@gmx.de, lee@kernel.org, javierm@redhat.com, dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-omap@vger.kernel.org References: <20230605144812.15241-1-tzimmermann@suse.de> <20230605144812.15241-29-tzimmermann@suse.de> <20230607204813.GE670717@ravnborg.org> From: Thomas Zimmermann In-Reply-To: <20230607204813.GE670717@ravnborg.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------S3i0E4Q7SQ6N0iK9JHkRmR1S" Precedence: bulk List-ID: X-Mailing-List: linux-fbdev@vger.kernel.org This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------S3i0E4Q7SQ6N0iK9JHkRmR1S Content-Type: multipart/mixed; boundary="------------yYH4hnHFTuw0DUAZegK8xm0Q"; protected-headers="v1" From: Thomas Zimmermann To: Sam Ravnborg Cc: daniel.thompson@linaro.org, linux-staging@lists.linux.dev, geert+renesas@glider.be, linux-sh@vger.kernel.org, jingoohan1@gmail.com, deller@gmx.de, lee@kernel.org, javierm@redhat.com, dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, linux-omap@vger.kernel.org Message-ID: <0091f47e-a35e-d16d-87b7-db254fc5cc48@suse.de> Subject: Re: [PATCH 28/30] fbdev/core: Move file-I/O code into separate file References: <20230605144812.15241-1-tzimmermann@suse.de> <20230605144812.15241-29-tzimmermann@suse.de> <20230607204813.GE670717@ravnborg.org> In-Reply-To: <20230607204813.GE670717@ravnborg.org> --------------yYH4hnHFTuw0DUAZegK8xm0Q Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SGkNCg0KQW0gMDcuMDYuMjMgdW0gMjI6NDggc2NocmllYiBTYW0gUmF2bmJvcmc6DQo+IEhp IFRob21hcy4NCj4gDQo+IE9uIE1vbiwgSnVuIDA1LCAyMDIzIGF0IDA0OjQ4OjEwUE0gKzAy MDAsIFRob21hcyBaaW1tZXJtYW5uIHdyb3RlOg0KPj4gTW92ZSBmYmRldidzIGZpbGUtSS9P IGNvZGUgaW50byBhIHNlcGFyYXRlIGZpbGUgYW5kIGNvbnRhaW4gaXQgaW4NCj4+IGluaXQg YW5kIGNsZWFudXAgaGVscGVycy4gTm8gZnVuY3Rpb25hbCBjaGFuZ2VzLg0KPj4NCj4+IFNp Z25lZC1vZmYtYnk6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPg0K PiBDb25zaWRlciBtb3ZpbmcgdGhlIHR3byBoZWxwcyBhcyBub3RlZCBiZWxvdy4NCj4gV2l0 aCBvciB3aXRob3V0IHRoaXMgbW92ZToNCj4gUmV2aWV3ZWQtYnk6IFNhbSBSYXZuYm9yZyA8 c2FtQHJhdm5ib3JnLm9yZz4NCj4gDQo+PiAtLS0NCj4+ICAgZHJpdmVycy92aWRlby9mYmRl di9jb3JlL01ha2VmaWxlICAgICAgfCAgIDEgKw0KPj4gICBkcml2ZXJzL3ZpZGVvL2ZiZGV2 L2NvcmUvZmJfZGV2ZnMuYyAgICB8IDQ4NCArKysrKysrKysrKysrKysrKysrKysrKysrDQo+ PiAgIGRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pbnRlcm5hbC5oIHwgICA2ICsNCj4+ ICAgZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZibWVtLmMgICAgICAgfCA0NzggKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo+PiAgIDQgZmlsZXMgY2hhbmdlZCwgNDk3IGluc2VydGlv bnMoKyksIDQ3MiBkZWxldGlvbnMoLSkNCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdmlkZW8vZmJkZXYvY29yZS9mYl9kZXZmcy5jDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdmlkZW8vZmJkZXYvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vZmJkZXYv Y29yZS9NYWtlZmlsZQ0KPj4gaW5kZXggNjY1MzIwMTYwZjcwLi4xMjVkMjRmNTBjMzYgMTAw NjQ0DQo+PiAtLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvTWFrZWZpbGUNCj4+ICsr KyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9NYWtlZmlsZQ0KPj4gQEAgLTIsNiArMiw3 IEBADQo+PiAgIG9iai0kKENPTkZJR19GQl9OT1RJRlkpICAgICAgICAgICArPSBmYl9ub3Rp Znkubw0KPj4gICBvYmotJChDT05GSUdfRkIpICAgICAgICAgICAgICAgICAgKz0gZmIubw0K Pj4gICBmYi15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOj0gZmJfYmFja2xpZ2h0 Lm8gXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYl9kZXZm cy5vIFwNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiX2lu Zm8ubyBcDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYl9w cm9jZnMubyBcDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm Ym1lbS5vIGZibW9uLm8gZmJjbWFwLm8gZmJzeXNmcy5vIFwNCj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfZGV2ZnMuYyBiL2RyaXZlcnMvdmlkZW8vZmJk ZXYvY29yZS9mYl9kZXZmcy5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXgg MDAwMDAwMDAwMDAwLi41YWIxNmNiMjQ1MjQNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBi L2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9kZXZmcy5jDQo+IGRldmZzIGdpdmVzIG1l IGFub3RoZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHRoaXMgZmlsZSBpcyB1c2VkIGZvci4N Cj4gZmJfaW9jdGwuYz8NCg0KSSB0aGluayBmYl9jaHJkZXYuYyB3b3VsZCBiZSBhcHByb3By aWF0ZS4NCg0KQmVzdCByZWdhcmRzDQpUaG9tYXMNCg0KPiANCj4+IEBAIC0wLDAgKzEsNDg0 IEBADQo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4+ICsNCj4+ ICsjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9mYi5o Pg0KPj4gKyNpbmNsdWRlIDxsaW51eC9mYmNvbi5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9t YWpvci5oPg0KPj4gKw0KPj4gKyNpbmNsdWRlICJmYl9pbnRlcm5hbC5oIg0KPj4gKw0KPj4g Ky8qDQo+PiArICogV2UgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgZmJfaW5mbyBpbiBmaWxl LT5wcml2YXRlX2RhdGEsDQo+PiArICogYnV0IGlmIHRoZSBjdXJyZW50IHJlZ2lzdGVyZWQg ZmIgaGFzIGNoYW5nZWQsIHdlIGRvbid0DQo+PiArICogYWN0dWFsbHkgd2FudCB0byB1c2Ug aXQuDQo+PiArICoNCj4+ICsgKiBTbyBsb29rIHVwIHRoZSBmYl9pbmZvIHVzaW5nIHRoZSBp bm9kZSBtaW5vciBudW1iZXIsDQo+PiArICogYW5kIGp1c3QgdmVyaWZ5IGl0IGFnYWluc3Qg dGhlIHJlZmVyZW5jZSB3ZSBoYXZlLg0KPj4gKyAqLw0KPj4gK3N0YXRpYyBzdHJ1Y3QgZmJf aW5mbyAqZmlsZV9mYl9pbmZvKHN0cnVjdCBmaWxlICpmaWxlKQ0KPj4gK3sNCj4+ICsJc3Ry dWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7DQo+PiArCWludCBmYmlkeCA9 IGltaW5vcihpbm9kZSk7DQo+PiArCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJl ZF9mYltmYmlkeF07DQo+PiArDQo+PiArCWlmIChpbmZvICE9IGZpbGUtPnByaXZhdGVfZGF0 YSkNCj4+ICsJCWluZm8gPSBOVUxMOw0KPj4gKwlyZXR1cm4gaW5mbzsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIHNzaXplX3QgZmJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBf X3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpDQo+PiArew0KPj4gKwlz dHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZpbGVfZmJfaW5mbyhmaWxlKTsNCj4+ICsNCj4+ICsJ aWYgKCFpbmZvKQ0KPj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+PiArDQo+PiArCWlmIChpbmZv LT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykNCj4+ICsJCXJldHVybiAtRVBFUk07 DQo+PiArDQo+PiArCWlmIChpbmZvLT5mYm9wcy0+ZmJfcmVhZCkNCj4+ICsJCXJldHVybiBp bmZvLT5mYm9wcy0+ZmJfcmVhZChpbmZvLCBidWYsIGNvdW50LCBwcG9zKTsNCj4+ICsNCj4+ ICsJcmV0dXJuIGZiX2lvX3JlYWQoaW5mbywgYnVmLCBjb3VudCwgcHBvcyk7DQo+PiArfQ0K Pj4gKw0KPj4gK3N0YXRpYyBzc2l6ZV90IGZiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBj b25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykNCj4+ ICt7DQo+PiArCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOw0K Pj4gKw0KPj4gKwlpZiAoIWluZm8pDQo+PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4+ICsNCj4+ ICsJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQ0KPj4gKwkJcmV0 dXJuIC1FUEVSTTsNCj4+ICsNCj4+ICsJaWYgKGluZm8tPmZib3BzLT5mYl93cml0ZSkNCj4+ ICsJCXJldHVybiBpbmZvLT5mYm9wcy0+ZmJfd3JpdGUoaW5mbywgYnVmLCBjb3VudCwgcHBv cyk7DQo+PiArDQo+PiArCXJldHVybiBmYl9pb193cml0ZShpbmZvLCBidWYsIGNvdW50LCBw cG9zKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGxvbmcgZG9fZmJfaW9jdGwoc3RydWN0 IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsDQo+PiArCQkJdW5zaWduZWQgbG9u ZyBhcmcpDQo+PiArew0KPj4gKwljb25zdCBzdHJ1Y3QgZmJfb3BzICpmYjsNCj4+ICsJc3Ry dWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsNCj4+ICsJc3RydWN0IGZiX2ZpeF9zY3JlZW5p bmZvIGZpeDsNCj4+ICsJc3RydWN0IGZiX2NtYXAgY21hcF9mcm9tOw0KPj4gKwlzdHJ1Y3Qg ZmJfY21hcF91c2VyIGNtYXA7DQo+PiArCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191 c2VyICopYXJnOw0KPj4gKwlsb25nIHJldCA9IDA7DQo+PiArDQo+PiArCXN3aXRjaCAoY21k KSB7DQo+PiArCWNhc2UgRkJJT0dFVF9WU0NSRUVOSU5GTzoNCj4+ICsJCWxvY2tfZmJfaW5m byhpbmZvKTsNCj4+ICsJCXZhciA9IGluZm8tPnZhcjsNCj4+ICsJCXVubG9ja19mYl9pbmZv KGluZm8pOw0KPj4gKw0KPj4gKwkJcmV0ID0gY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNp emVvZih2YXIpKSA/IC1FRkFVTFQgOiAwOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgRkJJ T1BVVF9WU0NSRUVOSU5GTzoNCj4+ICsJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFyLCBhcmdw LCBzaXplb2YodmFyKSkpDQo+PiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+PiArCQkvKiBvbmx5 IGZvciBrZXJuZWwtaW50ZXJuYWwgdXNlICovDQo+PiArCQl2YXIuYWN0aXZhdGUgJj0gfkZC X0FDVElWQVRFX0tEX1RFWFQ7DQo+PiArCQljb25zb2xlX2xvY2soKTsNCj4+ICsJCWxvY2tf ZmJfaW5mbyhpbmZvKTsNCj4+ICsJCXJldCA9IGZiY29uX21vZGVjaGFuZ2VfcG9zc2libGUo aW5mbywgJnZhcik7DQo+PiArCQlpZiAoIXJldCkNCj4+ICsJCQlyZXQgPSBmYl9zZXRfdmFy KGluZm8sICZ2YXIpOw0KPj4gKwkJaWYgKCFyZXQpDQo+PiArCQkJZmJjb25fdXBkYXRlX3Zj cyhpbmZvLCB2YXIuYWN0aXZhdGUgJiBGQl9BQ1RJVkFURV9BTEwpOw0KPj4gKwkJdW5sb2Nr X2ZiX2luZm8oaW5mbyk7DQo+PiArCQljb25zb2xlX3VubG9jaygpOw0KPj4gKwkJaWYgKCFy ZXQgJiYgY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVvZih2YXIpKSkNCj4+ICsJCQly ZXQgPSAtRUZBVUxUOw0KPj4gKwkJYnJlYWs7DQo+PiArCWNhc2UgRkJJT0dFVF9GU0NSRUVO SU5GTzoNCj4+ICsJCWxvY2tfZmJfaW5mbyhpbmZvKTsNCj4+ICsJCW1lbWNweSgmZml4LCAm aW5mby0+Zml4LCBzaXplb2YoZml4KSk7DQo+PiArCQlpZiAoaW5mby0+ZmxhZ3MgJiBGQklO Rk9fSElERV9TTUVNX1NUQVJUKQ0KPj4gKwkJCWZpeC5zbWVtX3N0YXJ0ID0gMDsNCj4+ICsJ CXVubG9ja19mYl9pbmZvKGluZm8pOw0KPj4gKw0KPj4gKwkJcmV0ID0gY29weV90b191c2Vy KGFyZ3AsICZmaXgsIHNpemVvZihmaXgpKSA/IC1FRkFVTFQgOiAwOw0KPj4gKwkJYnJlYWs7 DQo+PiArCWNhc2UgRkJJT1BVVENNQVA6DQo+PiArCQlpZiAoY29weV9mcm9tX3VzZXIoJmNt YXAsIGFyZ3AsIHNpemVvZihjbWFwKSkpDQo+PiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+PiAr CQlyZXQgPSBmYl9zZXRfdXNlcl9jbWFwKCZjbWFwLCBpbmZvKTsNCj4+ICsJCWJyZWFrOw0K Pj4gKwljYXNlIEZCSU9HRVRDTUFQOg0KPj4gKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWFw LCBhcmdwLCBzaXplb2YoY21hcCkpKQ0KPj4gKwkJCXJldHVybiAtRUZBVUxUOw0KPj4gKwkJ bG9ja19mYl9pbmZvKGluZm8pOw0KPj4gKwkJY21hcF9mcm9tID0gaW5mby0+Y21hcDsNCj4+ ICsJCXVubG9ja19mYl9pbmZvKGluZm8pOw0KPj4gKwkJcmV0ID0gZmJfY21hcF90b191c2Vy KCZjbWFwX2Zyb20sICZjbWFwKTsNCj4+ICsJCWJyZWFrOw0KPj4gKwljYXNlIEZCSU9QQU5f RElTUExBWToNCj4+ICsJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFyLCBhcmdwLCBzaXplb2Yo dmFyKSkpDQo+PiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+PiArCQljb25zb2xlX2xvY2soKTsN Cj4+ICsJCWxvY2tfZmJfaW5mbyhpbmZvKTsNCj4+ICsJCXJldCA9IGZiX3Bhbl9kaXNwbGF5 KGluZm8sICZ2YXIpOw0KPj4gKwkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7DQo+PiArCQljb25z b2xlX3VubG9jaygpOw0KPj4gKwkJaWYgKHJldCA9PSAwICYmIGNvcHlfdG9fdXNlcihhcmdw LCAmdmFyLCBzaXplb2YodmFyKSkpDQo+PiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+PiArCQli cmVhazsNCj4+ICsJY2FzZSBGQklPX0NVUlNPUjoNCj4+ICsJCXJldCA9IC1FSU5WQUw7DQo+ PiArCQlicmVhazsNCj4+ICsJY2FzZSBGQklPR0VUX0NPTjJGQk1BUDoNCj4+ICsJCXJldCA9 IGZiY29uX2dldF9jb24yZmJfbWFwX2lvY3RsKGFyZ3ApOw0KPj4gKwkJYnJlYWs7DQo+PiAr CWNhc2UgRkJJT1BVVF9DT04yRkJNQVA6DQo+PiArCQlyZXQgPSBmYmNvbl9zZXRfY29uMmZi X21hcF9pb2N0bChhcmdwKTsNCj4+ICsJCWJyZWFrOw0KPj4gKwljYXNlIEZCSU9CTEFOSzoN Cj4+ICsJCWlmIChhcmcgPiBGQl9CTEFOS19QT1dFUkRPV04pDQo+PiArCQkJcmV0dXJuIC1F SU5WQUw7DQo+PiArCQljb25zb2xlX2xvY2soKTsNCj4+ICsJCWxvY2tfZmJfaW5mbyhpbmZv KTsNCj4+ICsJCXJldCA9IGZiX2JsYW5rKGluZm8sIGFyZyk7DQo+PiArCQkvKiBtaWdodCBh Z2FpbiBjYWxsIGludG8gZmJfYmxhbmsgKi8NCj4+ICsJCWZiY29uX2ZiX2JsYW5rZWQoaW5m bywgYXJnKTsNCj4+ICsJCXVubG9ja19mYl9pbmZvKGluZm8pOw0KPj4gKwkJY29uc29sZV91 bmxvY2soKTsNCj4+ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJbG9ja19mYl9p bmZvKGluZm8pOw0KPj4gKwkJZmIgPSBpbmZvLT5mYm9wczsNCj4+ICsJCWlmIChmYi0+ZmJf aW9jdGwpDQo+PiArCQkJcmV0ID0gZmItPmZiX2lvY3RsKGluZm8sIGNtZCwgYXJnKTsNCj4+ ICsJCWVsc2UNCj4+ICsJCQlyZXQgPSAtRU5PVFRZOw0KPj4gKwkJdW5sb2NrX2ZiX2luZm8o aW5mbyk7DQo+PiArCX0NCj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIGxvbmcgZmJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQs IHVuc2lnbmVkIGxvbmcgYXJnKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGZiX2luZm8gKmluZm8g PSBmaWxlX2ZiX2luZm8oZmlsZSk7DQo+PiArDQo+PiArCWlmICghaW5mbykNCj4+ICsJCXJl dHVybiAtRU5PREVWOw0KPj4gKwlyZXR1cm4gZG9fZmJfaW9jdGwoaW5mbywgY21kLCBhcmcp Ow0KPj4gK30NCj4+ICsNCj4+ICsjaWZkZWYgQ09ORklHX0NPTVBBVA0KPj4gK3N0cnVjdCBm Yl9maXhfc2NyZWVuaW5mbzMyIHsNCj4+ICsJY2hhcgkJCWlkWzE2XTsNCj4+ICsJY29tcGF0 X2NhZGRyX3QJCXNtZW1fc3RhcnQ7DQo+PiArCXUzMgkJCXNtZW1fbGVuOw0KPj4gKwl1MzIJ CQl0eXBlOw0KPj4gKwl1MzIJCQl0eXBlX2F1eDsNCj4+ICsJdTMyCQkJdmlzdWFsOw0KPj4g Kwl1MTYJCQl4cGFuc3RlcDsNCj4+ICsJdTE2CQkJeXBhbnN0ZXA7DQo+PiArCXUxNgkJCXl3 cmFwc3RlcDsNCj4+ICsJdTMyCQkJbGluZV9sZW5ndGg7DQo+PiArCWNvbXBhdF9jYWRkcl90 CQltbWlvX3N0YXJ0Ow0KPj4gKwl1MzIJCQltbWlvX2xlbjsNCj4+ICsJdTMyCQkJYWNjZWw7 DQo+PiArCXUxNgkJCXJlc2VydmVkWzNdOw0KPj4gK307DQo+PiArDQo+PiArc3RydWN0IGZi X2NtYXAzMiB7DQo+PiArCXUzMgkJCXN0YXJ0Ow0KPj4gKwl1MzIJCQlsZW47DQo+PiArCWNv bXBhdF9jYWRkcl90CXJlZDsNCj4+ICsJY29tcGF0X2NhZGRyX3QJZ3JlZW47DQo+PiArCWNv bXBhdF9jYWRkcl90CWJsdWU7DQo+PiArCWNvbXBhdF9jYWRkcl90CXRyYW5zcDsNCj4+ICt9 Ow0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZmJfZ2V0cHV0X2NtYXAoc3RydWN0IGZiX2luZm8g KmluZm8sIHVuc2lnbmVkIGludCBjbWQsDQo+PiArCQkJICB1bnNpZ25lZCBsb25nIGFyZykN Cj4+ICt7DQo+PiArCXN0cnVjdCBmYl9jbWFwMzIgY21hcDMyOw0KPj4gKwlzdHJ1Y3QgZmJf Y21hcCBjbWFwX2Zyb207DQo+PiArCXN0cnVjdCBmYl9jbWFwX3VzZXIgY21hcDsNCj4+ICsN Cj4+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWFwMzIsIGNvbXBhdF9wdHIoYXJnKSwgc2l6 ZW9mKGNtYXAzMikpKQ0KPj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+PiArDQo+PiArCWNtYXAg PSAoc3RydWN0IGZiX2NtYXBfdXNlcikgew0KPj4gKwkJLnN0YXJ0CT0gY21hcDMyLnN0YXJ0 LA0KPj4gKwkJLmxlbgk9IGNtYXAzMi5sZW4sDQo+PiArCQkucmVkCT0gY29tcGF0X3B0cihj bWFwMzIucmVkKSwNCj4+ICsJCS5ncmVlbgk9IGNvbXBhdF9wdHIoY21hcDMyLmdyZWVuKSwN Cj4+ICsJCS5ibHVlCT0gY29tcGF0X3B0cihjbWFwMzIuYmx1ZSksDQo+PiArCQkudHJhbnNw CT0gY29tcGF0X3B0cihjbWFwMzIudHJhbnNwKSwNCj4+ICsJfTsNCj4+ICsNCj4+ICsJaWYg KGNtZCA9PSBGQklPUFVUQ01BUCkNCj4+ICsJCXJldHVybiBmYl9zZXRfdXNlcl9jbWFwKCZj bWFwLCBpbmZvKTsNCj4+ICsNCj4+ICsJbG9ja19mYl9pbmZvKGluZm8pOw0KPj4gKwljbWFw X2Zyb20gPSBpbmZvLT5jbWFwOw0KPj4gKwl1bmxvY2tfZmJfaW5mbyhpbmZvKTsNCj4+ICsN Cj4+ICsJcmV0dXJuIGZiX2NtYXBfdG9fdXNlcigmY21hcF9mcm9tLCAmY21hcCk7DQo+PiAr fQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZG9fZnNjcmVlbmluZm9fdG9fdXNlcihzdHJ1Y3Qg ZmJfZml4X3NjcmVlbmluZm8gKmZpeCwNCj4+ICsJCQkJICBzdHJ1Y3QgZmJfZml4X3NjcmVl bmluZm8zMiBfX3VzZXIgKmZpeDMyKQ0KPj4gK3sNCj4+ICsJX191MzIgZGF0YTsNCj4+ICsJ aW50IGVycjsNCj4+ICsNCj4+ICsJZXJyID0gY29weV90b191c2VyKCZmaXgzMi0+aWQsICZm aXgtPmlkLCBzaXplb2YoZml4MzItPmlkKSk7DQo+PiArDQo+PiArCWRhdGEgPSAoX191MzIp ICh1bnNpZ25lZCBsb25nKSBmaXgtPnNtZW1fc3RhcnQ7DQo+PiArCWVyciB8PSBwdXRfdXNl cihkYXRhLCAmZml4MzItPnNtZW1fc3RhcnQpOw0KPj4gKw0KPj4gKwllcnIgfD0gcHV0X3Vz ZXIoZml4LT5zbWVtX2xlbiwgJmZpeDMyLT5zbWVtX2xlbik7DQo+PiArCWVyciB8PSBwdXRf dXNlcihmaXgtPnR5cGUsICZmaXgzMi0+dHlwZSk7DQo+PiArCWVyciB8PSBwdXRfdXNlcihm aXgtPnR5cGVfYXV4LCAmZml4MzItPnR5cGVfYXV4KTsNCj4+ICsJZXJyIHw9IHB1dF91c2Vy KGZpeC0+dmlzdWFsLCAmZml4MzItPnZpc3VhbCk7DQo+PiArCWVyciB8PSBwdXRfdXNlcihm aXgtPnhwYW5zdGVwLCAmZml4MzItPnhwYW5zdGVwKTsNCj4+ICsJZXJyIHw9IHB1dF91c2Vy KGZpeC0+eXBhbnN0ZXAsICZmaXgzMi0+eXBhbnN0ZXApOw0KPj4gKwllcnIgfD0gcHV0X3Vz ZXIoZml4LT55d3JhcHN0ZXAsICZmaXgzMi0+eXdyYXBzdGVwKTsNCj4+ICsJZXJyIHw9IHB1 dF91c2VyKGZpeC0+bGluZV9sZW5ndGgsICZmaXgzMi0+bGluZV9sZW5ndGgpOw0KPj4gKw0K Pj4gKwlkYXRhID0gKF9fdTMyKSAodW5zaWduZWQgbG9uZykgZml4LT5tbWlvX3N0YXJ0Ow0K Pj4gKwllcnIgfD0gcHV0X3VzZXIoZGF0YSwgJmZpeDMyLT5tbWlvX3N0YXJ0KTsNCj4+ICsN Cj4+ICsJZXJyIHw9IHB1dF91c2VyKGZpeC0+bW1pb19sZW4sICZmaXgzMi0+bW1pb19sZW4p Ow0KPj4gKwllcnIgfD0gcHV0X3VzZXIoZml4LT5hY2NlbCwgJmZpeDMyLT5hY2NlbCk7DQo+ PiArCWVyciB8PSBjb3B5X3RvX3VzZXIoZml4MzItPnJlc2VydmVkLCBmaXgtPnJlc2VydmVk LA0KPj4gKwkJCSAgICBzaXplb2YoZml4LT5yZXNlcnZlZCkpOw0KPj4gKw0KPj4gKwlpZiAo ZXJyKQ0KPj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ ICsNCj4+ICtzdGF0aWMgaW50IGZiX2dldF9mc2NyZWVuaW5mbyhzdHJ1Y3QgZmJfaW5mbyAq aW5mbywgdW5zaWduZWQgaW50IGNtZCwNCj4+ICsJCQkgICAgICB1bnNpZ25lZCBsb25nIGFy ZykNCj4+ICt7DQo+PiArCXN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBmaXg7DQo+PiArDQo+ PiArCWxvY2tfZmJfaW5mbyhpbmZvKTsNCj4+ICsJZml4ID0gaW5mby0+Zml4Ow0KPj4gKwlp ZiAoaW5mby0+ZmxhZ3MgJiBGQklORk9fSElERV9TTUVNX1NUQVJUKQ0KPj4gKwkJZml4LnNt ZW1fc3RhcnQgPSAwOw0KPj4gKwl1bmxvY2tfZmJfaW5mbyhpbmZvKTsNCj4+ICsJcmV0dXJu IGRvX2ZzY3JlZW5pbmZvX3RvX3VzZXIoJmZpeCwgY29tcGF0X3B0cihhcmcpKTsNCj4+ICt9 DQo+PiArDQo+PiArc3RhdGljIGxvbmcgZmJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpm aWxlLCB1bnNpZ25lZCBpbnQgY21kLA0KPj4gKwkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykN Cj4+ICt7DQo+PiArCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUp Ow0KPj4gKwljb25zdCBzdHJ1Y3QgZmJfb3BzICpmYjsNCj4+ICsJbG9uZyByZXQgPSAtRU5P SU9DVExDTUQ7DQo+PiArDQo+PiArCWlmICghaW5mbykNCj4+ICsJCXJldHVybiAtRU5PREVW Ow0KPj4gKwlmYiA9IGluZm8tPmZib3BzOw0KPj4gKwlzd2l0Y2ggKGNtZCkgew0KPj4gKwlj YXNlIEZCSU9HRVRfVlNDUkVFTklORk86DQo+PiArCWNhc2UgRkJJT1BVVF9WU0NSRUVOSU5G TzoNCj4+ICsJY2FzZSBGQklPUEFOX0RJU1BMQVk6DQo+PiArCWNhc2UgRkJJT0dFVF9DT04y RkJNQVA6DQo+PiArCWNhc2UgRkJJT1BVVF9DT04yRkJNQVA6DQo+PiArCQlhcmcgPSAodW5z aWduZWQgbG9uZykgY29tcGF0X3B0cihhcmcpOw0KPj4gKwkJZmFsbHRocm91Z2g7DQo+PiAr CWNhc2UgRkJJT0JMQU5LOg0KPj4gKwkJcmV0ID0gZG9fZmJfaW9jdGwoaW5mbywgY21kLCBh cmcpOw0KPj4gKwkJYnJlYWs7DQo+PiArDQo+PiArCWNhc2UgRkJJT0dFVF9GU0NSRUVOSU5G TzoNCj4+ICsJCXJldCA9IGZiX2dldF9mc2NyZWVuaW5mbyhpbmZvLCBjbWQsIGFyZyk7DQo+ PiArCQlicmVhazsNCj4+ICsNCj4+ICsJY2FzZSBGQklPR0VUQ01BUDoNCj4+ICsJY2FzZSBG QklPUFVUQ01BUDoNCj4+ICsJCXJldCA9IGZiX2dldHB1dF9jbWFwKGluZm8sIGNtZCwgYXJn KTsNCj4+ICsJCWJyZWFrOw0KPj4gKw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJaWYgKGZiLT5m Yl9jb21wYXRfaW9jdGwpDQo+PiArCQkJcmV0ID0gZmItPmZiX2NvbXBhdF9pb2N0bChpbmZv LCBjbWQsIGFyZyk7DQo+PiArCQlicmVhazsNCj4+ICsJfQ0KPj4gKwlyZXR1cm4gcmV0Ow0K Pj4gK30NCj4+ICsjZW5kaWYNCj4+ICsNCj4+ICtzdGF0aWMgaW50IGZiX21tYXAoc3RydWN0 IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQ0KPj4gK3sNCj4+ICsJ c3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7DQo+PiArCXVuc2ln bmVkIGxvbmcgbW1pb19wZ29mZjsNCj4+ICsJdW5zaWduZWQgbG9uZyBzdGFydDsNCj4+ICsJ dTMyIGxlbjsNCj4+ICsNCj4+ICsJaWYgKCFpbmZvKQ0KPj4gKwkJcmV0dXJuIC1FTk9ERVY7 DQo+PiArCW11dGV4X2xvY2soJmluZm8tPm1tX2xvY2spOw0KPj4gKw0KPj4gKwlpZiAoaW5m by0+ZmJvcHMtPmZiX21tYXApIHsNCj4+ICsJCWludCByZXM7DQo+PiArDQo+PiArCQkvKg0K Pj4gKwkJICogVGhlIGZyYW1lYnVmZmVyIG5lZWRzIHRvIGJlIGFjY2Vzc2VkIGRlY3J5cHRl ZCwgYmUgc3VyZQ0KPj4gKwkJICogU01FIHByb3RlY3Rpb24gaXMgcmVtb3ZlZCBhaGVhZCBv ZiB0aGUgY2FsbA0KPj4gKwkJICovDQo+PiArCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJv dF9kZWNyeXB0ZWQodm1hLT52bV9wYWdlX3Byb3QpOw0KPj4gKwkJcmVzID0gaW5mby0+ZmJv cHMtPmZiX21tYXAoaW5mbywgdm1hKTsNCj4+ICsJCW11dGV4X3VubG9jaygmaW5mby0+bW1f bG9jayk7DQo+PiArCQlyZXR1cm4gcmVzOw0KPj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19G Ql9ERUZFUlJFRF9JTykNCj4+ICsJfSBlbHNlIGlmIChpbmZvLT5mYmRlZmlvKSB7DQo+PiAr CQkvKg0KPj4gKwkJICogRkIgZGVmZXJyZWQgSS9PIHdhbnRzIHlvdSB0byBoYW5kbGUgbW1h cCBpbiB5b3VyIGRyaXZlcnMuIEF0IGENCj4+ICsJCSAqIG1pbmltdW0sIHBvaW50IHN0cnVj dCBmYl9vcHMuZmJfbW1hcCB0byBmYl9kZWZlcnJlZF9pb19tbWFwKCkuDQo+PiArCQkgKi8N Cj4+ICsJCWRldl93YXJuX29uY2UoaW5mby0+ZGV2LCAiZmJkZXYgbW1hcCBub3Qgc2V0IHVw IGZvciBkZWZlcnJlZCBJL08uXG4iKTsNCj4+ICsJCW11dGV4X3VubG9jaygmaW5mby0+bW1f bG9jayk7DQo+PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4+ICsjZW5kaWYNCj4+ICsJfQ0KPj4g Kw0KPj4gKwkvKg0KPj4gKwkgKiBVZ2guIFRoaXMgY2FuIGJlIGVpdGhlciB0aGUgZnJhbWUg YnVmZmVyIG1hcHBpbmcsIG9yDQo+PiArCSAqIGlmIHBnb2ZmIHBvaW50cyBwYXN0IGl0LCB0 aGUgbW1pbyBtYXBwaW5nLg0KPj4gKwkgKi8NCj4+ICsJc3RhcnQgPSBpbmZvLT5maXguc21l bV9zdGFydDsNCj4+ICsJbGVuID0gaW5mby0+Zml4LnNtZW1fbGVuOw0KPj4gKwltbWlvX3Bn b2ZmID0gUEFHRV9BTElHTigoc3RhcnQgJiB+UEFHRV9NQVNLKSArIGxlbikgPj4gUEFHRV9T SElGVDsNCj4+ICsJaWYgKHZtYS0+dm1fcGdvZmYgPj0gbW1pb19wZ29mZikgew0KPj4gKwkJ aWYgKGluZm8tPnZhci5hY2NlbF9mbGFncykgew0KPj4gKwkJCW11dGV4X3VubG9jaygmaW5m by0+bW1fbG9jayk7DQo+PiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCQl9DQo+PiArDQo+ PiArCQl2bWEtPnZtX3Bnb2ZmIC09IG1taW9fcGdvZmY7DQo+PiArCQlzdGFydCA9IGluZm8t PmZpeC5tbWlvX3N0YXJ0Ow0KPj4gKwkJbGVuID0gaW5mby0+Zml4Lm1taW9fbGVuOw0KPj4g Kwl9DQo+PiArCW11dGV4X3VubG9jaygmaW5mby0+bW1fbG9jayk7DQo+PiArDQo+PiArCXZt YS0+dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKTsNCj4+ ICsJZmJfcGdwcm90ZWN0KGZpbGUsIHZtYSwgc3RhcnQpOw0KPj4gKw0KPj4gKwlyZXR1cm4g dm1faW9tYXBfbWVtb3J5KHZtYSwgc3RhcnQsIGxlbik7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgZmJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmls ZSkNCj4+ICtfX2FjcXVpcmVzKCZpbmZvLT5sb2NrKQ0KPj4gK19fcmVsZWFzZXMoJmluZm8t PmxvY2spDQo+PiArew0KPj4gKwlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOw0KPj4gKwlz dHJ1Y3QgZmJfaW5mbyAqaW5mbzsNCj4+ICsJaW50IHJlcyA9IDA7DQo+PiArDQo+PiArCWlu Zm8gPSBnZXRfZmJfaW5mbyhmYmlkeCk7DQo+PiArCWlmICghaW5mbykgew0KPj4gKwkJcmVx dWVzdF9tb2R1bGUoImZiJWQiLCBmYmlkeCk7DQo+PiArCQlpbmZvID0gZ2V0X2ZiX2luZm8o ZmJpZHgpOw0KPj4gKwkJaWYgKCFpbmZvKQ0KPj4gKwkJCXJldHVybiAtRU5PREVWOw0KPj4g Kwl9DQo+PiArCWlmIChJU19FUlIoaW5mbykpDQo+PiArCQlyZXR1cm4gUFRSX0VSUihpbmZv KTsNCj4+ICsNCj4+ICsJbG9ja19mYl9pbmZvKGluZm8pOw0KPj4gKwlpZiAoIXRyeV9tb2R1 bGVfZ2V0KGluZm8tPmZib3BzLT5vd25lcikpIHsNCj4+ICsJCXJlcyA9IC1FTk9ERVY7DQo+ PiArCQlnb3RvIG91dDsNCj4+ICsJfQ0KPj4gKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbmZv Ow0KPj4gKwlpZiAoaW5mby0+ZmJvcHMtPmZiX29wZW4pIHsNCj4+ICsJCXJlcyA9IGluZm8t PmZib3BzLT5mYl9vcGVuKGluZm8sIDEpOw0KPj4gKwkJaWYgKHJlcykNCj4+ICsJCQltb2R1 bGVfcHV0KGluZm8tPmZib3BzLT5vd25lcik7DQo+PiArCX0NCj4+ICsjaWZkZWYgQ09ORklH X0ZCX0RFRkVSUkVEX0lPDQo+PiArCWlmIChpbmZvLT5mYmRlZmlvKQ0KPj4gKwkJZmJfZGVm ZXJyZWRfaW9fb3BlbihpbmZvLCBpbm9kZSwgZmlsZSk7DQo+PiArI2VuZGlmDQo+PiArb3V0 Og0KPj4gKwl1bmxvY2tfZmJfaW5mbyhpbmZvKTsNCj4+ICsJaWYgKHJlcykNCj4+ICsJCXB1 dF9mYl9pbmZvKGluZm8pOw0KPj4gKwlyZXR1cm4gcmVzOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgaW50IGZiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUg KmZpbGUpDQo+PiArX19hY3F1aXJlcygmaW5mby0+bG9jaykNCj4+ICtfX3JlbGVhc2VzKCZp bmZvLT5sb2NrKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGZiX2luZm8gKiBjb25zdCBpbmZvID0g ZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPj4gKw0KPj4gKwlsb2NrX2ZiX2luZm8oaW5mbyk7DQo+ PiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0ZCX0RFRkVSUkVEX0lPKQ0KPj4gKwlpZiAoaW5m by0+ZmJkZWZpbykNCj4+ICsJCWZiX2RlZmVycmVkX2lvX3JlbGVhc2UoaW5mbyk7DQo+PiAr I2VuZGlmDQo+PiArCWlmIChpbmZvLT5mYm9wcy0+ZmJfcmVsZWFzZSkNCj4+ICsJCWluZm8t PmZib3BzLT5mYl9yZWxlYXNlKGluZm8sIDEpOw0KPj4gKwltb2R1bGVfcHV0KGluZm8tPmZi b3BzLT5vd25lcik7DQo+PiArCXVubG9ja19mYl9pbmZvKGluZm8pOw0KPj4gKwlwdXRfZmJf aW5mbyhpbmZvKTsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gKyNpZiBkZWZp bmVkKENPTkZJR19GQl9QUk9WSURFX0dFVF9GQl9VTk1BUFBFRF9BUkVBKSAmJiAhZGVmaW5l ZChDT05GSUdfTU1VKQ0KPj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9mYl91bm1hcHBl ZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLA0KPj4gKwkJCQkgICB1bnNpZ25lZCBsb25nIGFk ZHIsIHVuc2lnbmVkIGxvbmcgbGVuLA0KPj4gKwkJCQkgICB1bnNpZ25lZCBsb25nIHBnb2Zm LCB1bnNpZ25lZCBsb25nIGZsYWdzKQ0KPj4gK3sNCj4+ICsJc3RydWN0IGZiX2luZm8gKiBj b25zdCBpbmZvID0gZmlscC0+cHJpdmF0ZV9kYXRhOw0KPj4gKwl1bnNpZ25lZCBsb25nIGZi X3NpemUgPSBQQUdFX0FMSUdOKGluZm8tPmZpeC5zbWVtX2xlbik7DQo+PiArDQo+PiArCWlm IChwZ29mZiA+IGZiX3NpemUgfHwgbGVuID4gZmJfc2l6ZSAtIHBnb2ZmKQ0KPj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArCXJldHVybiAodW5zaWduZWQgbG9uZylpbmZvLT5z Y3JlZW5fYmFzZSArIHBnb2ZmOw0KPj4gK30NCj4+ICsjZW5kaWYNCj4+ICsNCj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYl9mb3BzID0gew0KPj4gKwkub3du ZXIgPSBUSElTX01PRFVMRSwNCj4+ICsJLnJlYWQgPSBmYl9yZWFkLA0KPj4gKwkud3JpdGUg PSBmYl93cml0ZSwNCj4+ICsJLnVubG9ja2VkX2lvY3RsID0gZmJfaW9jdGwsDQo+PiArI2lm ZGVmIENPTkZJR19DT01QQVQNCj4+ICsJLmNvbXBhdF9pb2N0bCA9IGZiX2NvbXBhdF9pb2N0 bCwNCj4+ICsjZW5kaWYNCj4+ICsJLm1tYXAgPSBmYl9tbWFwLA0KPj4gKwkub3BlbiA9IGZi X29wZW4sDQo+PiArCS5yZWxlYXNlID0gZmJfcmVsZWFzZSwNCj4+ICsjaWYgZGVmaW5lZChI QVZFX0FSQ0hfRkJfVU5NQVBQRURfQVJFQSkgfHwgXA0KPj4gKwkoZGVmaW5lZChDT05GSUdf RkJfUFJPVklERV9HRVRfRkJfVU5NQVBQRURfQVJFQSkgJiYgXA0KPj4gKwkgIWRlZmluZWQo Q09ORklHX01NVSkpDQo+PiArCS5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF9mYl91bm1hcHBl ZF9hcmVhLA0KPj4gKyNlbmRpZg0KPj4gKyNpZmRlZiBDT05GSUdfRkJfREVGRVJSRURfSU8N Cj4+ICsJLmZzeW5jID0gZmJfZGVmZXJyZWRfaW9fZnN5bmMsDQo+PiArI2VuZGlmDQo+PiAr CS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywNCj4+ICt9Ow0KPj4gKw0KPj4gK2ludCBmYl9y ZWdpc3Rlcl9jaHJkZXYodm9pZCkNCj4+ICt7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiAr CXJldCA9IHJlZ2lzdGVyX2NocmRldihGQl9NQUpPUiwgImZiIiwgJmZiX2ZvcHMpOw0KPj4g KwlpZiAocmV0KSB7DQo+PiArCQlwcl9lcnIoIlVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9y IGZiIGRldnNcbiIsIEZCX01BSk9SKTsNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArCX0NCj4+ ICsNCj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArdm9pZCBmYl91bnJlZ2lz dGVyX2NocmRldih2b2lkKQ0KPj4gK3sNCj4+ICsJdW5yZWdpc3Rlcl9jaHJkZXYoRkJfTUFK T1IsICJmYiIpOw0KPj4gK30NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2 L2NvcmUvZmJfaW50ZXJuYWwuaCBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pbnRl cm5hbC5oDQo+PiBpbmRleCA1MWY3YzlmMDRlNDUuLmFiZTA2YzlkYTM2ZSAxMDA2NDQNCj4+ IC0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYl9pbnRlcm5hbC5oDQo+PiArKysg Yi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJfaW50ZXJuYWwuaA0KPj4gQEAgLTYsMTAg KzYsMTYgQEANCj4+ICAgI2luY2x1ZGUgPGxpbnV4L2ZiLmg+DQo+PiAgICNpbmNsdWRlIDxs aW51eC9tdXRleC5oPg0KPj4gICANCj4+ICsvKiBmYl9kZXZmcy5jICovDQo+PiAraW50IGZi X3JlZ2lzdGVyX2NocmRldih2b2lkKTsNCj4+ICt2b2lkIGZiX3VucmVnaXN0ZXJfY2hyZGV2 KHZvaWQpOw0KPj4gKw0KPj4gICAvKiBmYm1lbS5jICovDQo+PiAgIGV4dGVybiBzdHJ1Y3Qg bXV0ZXggcmVnaXN0cmF0aW9uX2xvY2s7DQo+PiAgIGV4dGVybiBzdHJ1Y3QgZmJfaW5mbyAq cmVnaXN0ZXJlZF9mYltGQl9NQVhdOw0KPj4gICBleHRlcm4gaW50IG51bV9yZWdpc3RlcmVk X2ZiOw0KPj4gK3N0cnVjdCBmYl9pbmZvICpnZXRfZmJfaW5mbyh1bnNpZ25lZCBpbnQgaWR4 KTsNCj4+ICt2b2lkIHB1dF9mYl9pbmZvKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsNCj4g VGhlIG9ubHkgdXNlcnMgb2YgZ2V0X2ZiX2luZm8oKSBhbmQgcHV0X2ZiX2luZm8oKSBhcmUg bm93IGluIGZiX2RldmZzLg0KPiBTbyBjb25zaWRlciBtb3ZpbmcgdGhlc2UgdHdvIGhlbHBl cnMgdG9vLg0KPiANCj4+ICAgDQo+PiAgIC8qIGZiX3Byb2Nmcy5jICovDQo+PiAgIGludCBm Yl9pbml0X3Byb2Nmcyh2b2lkKTsNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Zi ZGV2L2NvcmUvZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYm1lbS5jDQo+ PiBpbmRleCBkZTFlNDUyNDAxNjEuLjJkMjZhYzQ2MzM3YiAxMDA2NDQNCj4+IC0tLSBhL2Ry aXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYm1lbS5jDQo+PiArKysgYi9kcml2ZXJzL3ZpZGVv L2ZiZGV2L2NvcmUvZmJtZW0uYw0KPj4gQEAgLTE3LDcgKzE3LDYgQEANCj4+ICAgI2luY2x1 ZGUgPGxpbnV4L3R5cGVzLmg+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPg0KPj4g ICAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+PiAtI2luY2x1ZGUgPGxpbnV4L21ham9y Lmg+DQo+PiAgICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+PiAgICNpbmNsdWRlIDxsaW51 eC9tbS5oPg0KPj4gICAjaW5jbHVkZSA8bGludXgvbW1hbi5oPg0KPj4gQEAgLTU0LDcgKzUz LDcgQEAgYm9vbCBmYl9jZW50ZXJfbG9nbyBfX3JlYWRfbW9zdGx5Ow0KPj4gICANCj4+ICAg aW50IGZiX2xvZ29fY291bnQgX19yZWFkX21vc3RseSA9IC0xOw0KPj4gICANCj4+IC1zdGF0 aWMgc3RydWN0IGZiX2luZm8gKmdldF9mYl9pbmZvKHVuc2lnbmVkIGludCBpZHgpDQo+PiAr c3RydWN0IGZiX2luZm8gKmdldF9mYl9pbmZvKHVuc2lnbmVkIGludCBpZHgpDQo+PiAgIHsN Cj4+ICAgCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvOw0KPj4gICANCj4+IEBAIC03MCw3ICs2 OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZmJfaW5mbyAqZ2V0X2ZiX2luZm8odW5zaWduZWQgaW50 IGlkeCkNCj4+ICAgCXJldHVybiBmYl9pbmZvOw0KPj4gICB9DQo+PiAgIA0KPj4gLXN0YXRp YyB2b2lkIHB1dF9mYl9pbmZvKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQ0KPj4gK3ZvaWQg cHV0X2ZiX2luZm8oc3RydWN0IGZiX2luZm8gKmZiX2luZm8pDQo+PiAgIHsNCj4+ICAgCWlm ICghcmVmY291bnRfZGVjX2FuZF90ZXN0KCZmYl9pbmZvLT5jb3VudCkpDQo+PiAgIAkJcmV0 dXJuOw0KPj4gQEAgLTY5OSw1OSArNjk4LDYgQEAgaW50IGZiX3Nob3dfbG9nbyhzdHJ1Y3Qg ZmJfaW5mbyAqaW5mbywgaW50IHJvdGF0ZSkgeyByZXR1cm4gMDsgfQ0KPj4gICBFWFBPUlRf U1lNQk9MKGZiX3ByZXBhcmVfbG9nbyk7DQo+PiAgIEVYUE9SVF9TWU1CT0woZmJfc2hvd19s b2dvKTsNCj4gDQo+IFJlbWluZHMgbWUgLSBjb25zaWRlciBtb3ZpbmcgbG9nbyBzdHVmZiB0 byBhIGZiX2xvZ28gZmlsZS4NCj4gVGhpcyB3b3VsZCByZWR1Y2UgZmJtZW0gd2l0aCBhIGxv dCBvZiBsaW5lcywgYW5kIGl0IGlzIHNlcGFyYXRlLg0KPiBCdXQgaXQgaXMgb3V0c2lkZSB0 aGUgZ29hbCBvZiB0aGlzIHBhdGNoc2V0Lg0KPiANCj4+ICAgDQo+PiAtLyoNCj4+IC0gKiBX ZSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBmYl9pbmZvIGluIGZpbGUtPnByaXZhdGVfZGF0 YSwNCj4+IC0gKiBidXQgaWYgdGhlIGN1cnJlbnQgcmVnaXN0ZXJlZCBmYiBoYXMgY2hhbmdl ZCwgd2UgZG9uJ3QNCj4+IC0gKiBhY3R1YWxseSB3YW50IHRvIHVzZSBpdC4NCj4+IC0gKg0K Pj4gLSAqIFNvIGxvb2sgdXAgdGhlIGZiX2luZm8gdXNpbmcgdGhlIGlub2RlIG1pbm9yIG51 bWJlciwNCj4+IC0gKiBhbmQganVzdCB2ZXJpZnkgaXQgYWdhaW5zdCB0aGUgcmVmZXJlbmNl IHdlIGhhdmUuDQo+PiAtICovDQo+PiAtc3RhdGljIHN0cnVjdCBmYl9pbmZvICpmaWxlX2Zi X2luZm8oc3RydWN0IGZpbGUgKmZpbGUpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgaW5vZGUgKmlu b2RlID0gZmlsZV9pbm9kZShmaWxlKTsNCj4+IC0JaW50IGZiaWR4ID0gaW1pbm9yKGlub2Rl KTsNCj4+IC0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsN Cj4+IC0NCj4+IC0JaWYgKGluZm8gIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKQ0KPj4gLQkJaW5m byA9IE5VTEw7DQo+PiAtCXJldHVybiBpbmZvOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMg c3NpemVfdA0KPj4gLWZiX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpi dWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGZi X2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7DQo+PiAtDQo+PiAtCWlmICghaW5m bykNCj4+IC0JCXJldHVybiAtRU5PREVWOw0KPj4gLQ0KPj4gLQlpZiAoaW5mby0+c3RhdGUg IT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpDQo+PiAtCQlyZXR1cm4gLUVQRVJNOw0KPj4gLQ0K Pj4gLQlpZiAoaW5mby0+ZmJvcHMtPmZiX3JlYWQpDQo+PiAtCQlyZXR1cm4gaW5mby0+ZmJv cHMtPmZiX3JlYWQoaW5mbywgYnVmLCBjb3VudCwgcHBvcyk7DQo+PiAtDQo+PiAtCXJldHVy biBmYl9pb19yZWFkKGluZm8sIGJ1ZiwgY291bnQsIHBwb3MpOw0KPj4gLX0NCj4+IC0NCj4+ IC1zdGF0aWMgc3NpemVfdA0KPj4gLWZiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25z dCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykNCj4+IC17 DQo+PiAtCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOw0KPj4g LQ0KPj4gLQlpZiAoIWluZm8pDQo+PiAtCQlyZXR1cm4gLUVOT0RFVjsNCj4+IC0NCj4+IC0J aWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQ0KPj4gLQkJcmV0dXJu IC1FUEVSTTsNCj4+IC0NCj4+IC0JaWYgKGluZm8tPmZib3BzLT5mYl93cml0ZSkNCj4+IC0J CXJldHVybiBpbmZvLT5mYm9wcy0+ZmJfd3JpdGUoaW5mbywgYnVmLCBjb3VudCwgcHBvcyk7 DQo+PiAtDQo+PiAtCXJldHVybiBmYl9pb193cml0ZShpbmZvLCBidWYsIGNvdW50LCBwcG9z KTsNCj4+IC19DQo+PiAtDQo+PiAgIGludA0KPj4gICBmYl9wYW5fZGlzcGxheShzdHJ1Y3Qg ZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpDQo+PiAgIHsN Cj4+IEBAIC05NTEsNDE2ICs4OTcsNiBAQCBmYl9ibGFuayhzdHJ1Y3QgZmJfaW5mbyAqaW5m bywgaW50IGJsYW5rKQ0KPj4gICB9DQo+PiAgIEVYUE9SVF9TWU1CT0woZmJfYmxhbmspOw0K Pj4gICANCj4+IC1zdGF0aWMgbG9uZyBkb19mYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5m bywgdW5zaWduZWQgaW50IGNtZCwNCj4+IC0JCQl1bnNpZ25lZCBsb25nIGFyZykNCj4+IC17 DQo+PiAtCWNvbnN0IHN0cnVjdCBmYl9vcHMgKmZiOw0KPj4gLQlzdHJ1Y3QgZmJfdmFyX3Nj cmVlbmluZm8gdmFyOw0KPj4gLQlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZml4Ow0KPj4g LQlzdHJ1Y3QgZmJfY21hcCBjbWFwX2Zyb207DQo+PiAtCXN0cnVjdCBmYl9jbWFwX3VzZXIg Y21hcDsNCj4+IC0Jdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7DQo+ PiAtCWxvbmcgcmV0ID0gMDsNCj4+IC0NCj4+IC0Jc3dpdGNoIChjbWQpIHsNCj4+IC0JY2Fz ZSBGQklPR0VUX1ZTQ1JFRU5JTkZPOg0KPj4gLQkJbG9ja19mYl9pbmZvKGluZm8pOw0KPj4g LQkJdmFyID0gaW5mby0+dmFyOw0KPj4gLQkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7DQo+PiAt DQo+PiAtCQlyZXQgPSBjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpID8g LUVGQVVMVCA6IDA7DQo+PiAtCQlicmVhazsNCj4+IC0JY2FzZSBGQklPUFVUX1ZTQ1JFRU5J TkZPOg0KPj4gLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YXIsIGFyZ3AsIHNpemVvZih2YXIp KSkNCj4+IC0JCQlyZXR1cm4gLUVGQVVMVDsNCj4+IC0JCS8qIG9ubHkgZm9yIGtlcm5lbC1p bnRlcm5hbCB1c2UgKi8NCj4+IC0JCXZhci5hY3RpdmF0ZSAmPSB+RkJfQUNUSVZBVEVfS0Rf VEVYVDsNCj4+IC0JCWNvbnNvbGVfbG9jaygpOw0KPj4gLQkJbG9ja19mYl9pbmZvKGluZm8p Ow0KPj4gLQkJcmV0ID0gZmJjb25fbW9kZWNoYW5nZV9wb3NzaWJsZShpbmZvLCAmdmFyKTsN Cj4+IC0JCWlmICghcmV0KQ0KPj4gLQkJCXJldCA9IGZiX3NldF92YXIoaW5mbywgJnZhcik7 DQo+PiAtCQlpZiAoIXJldCkNCj4+IC0JCQlmYmNvbl91cGRhdGVfdmNzKGluZm8sIHZhci5h Y3RpdmF0ZSAmIEZCX0FDVElWQVRFX0FMTCk7DQo+PiAtCQl1bmxvY2tfZmJfaW5mbyhpbmZv KTsNCj4+IC0JCWNvbnNvbGVfdW5sb2NrKCk7DQo+PiAtCQlpZiAoIXJldCAmJiBjb3B5X3Rv X3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQ0KPj4gLQkJCXJldCA9IC1FRkFVTFQ7 DQo+PiAtCQlicmVhazsNCj4+IC0JY2FzZSBGQklPR0VUX0ZTQ1JFRU5JTkZPOg0KPj4gLQkJ bG9ja19mYl9pbmZvKGluZm8pOw0KPj4gLQkJbWVtY3B5KCZmaXgsICZpbmZvLT5maXgsIHNp emVvZihmaXgpKTsNCj4+IC0JCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19ISURFX1NNRU1f U1RBUlQpDQo+PiAtCQkJZml4LnNtZW1fc3RhcnQgPSAwOw0KPj4gLQkJdW5sb2NrX2ZiX2lu Zm8oaW5mbyk7DQo+PiAtDQo+PiAtCQlyZXQgPSBjb3B5X3RvX3VzZXIoYXJncCwgJmZpeCwg c2l6ZW9mKGZpeCkpID8gLUVGQVVMVCA6IDA7DQo+PiAtCQlicmVhazsNCj4+IC0JY2FzZSBG QklPUFVUQ01BUDoNCj4+IC0JCWlmIChjb3B5X2Zyb21fdXNlcigmY21hcCwgYXJncCwgc2l6 ZW9mKGNtYXApKSkNCj4+IC0JCQlyZXR1cm4gLUVGQVVMVDsNCj4+IC0JCXJldCA9IGZiX3Nl dF91c2VyX2NtYXAoJmNtYXAsIGluZm8pOw0KPj4gLQkJYnJlYWs7DQo+PiAtCWNhc2UgRkJJ T0dFVENNQVA6DQo+PiAtCQlpZiAoY29weV9mcm9tX3VzZXIoJmNtYXAsIGFyZ3AsIHNpemVv ZihjbWFwKSkpDQo+PiAtCQkJcmV0dXJuIC1FRkFVTFQ7DQo+PiAtCQlsb2NrX2ZiX2luZm8o aW5mbyk7DQo+PiAtCQljbWFwX2Zyb20gPSBpbmZvLT5jbWFwOw0KPj4gLQkJdW5sb2NrX2Zi X2luZm8oaW5mbyk7DQo+PiAtCQlyZXQgPSBmYl9jbWFwX3RvX3VzZXIoJmNtYXBfZnJvbSwg JmNtYXApOw0KPj4gLQkJYnJlYWs7DQo+PiAtCWNhc2UgRkJJT1BBTl9ESVNQTEFZOg0KPj4g LQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YXIsIGFyZ3AsIHNpemVvZih2YXIpKSkNCj4+IC0J CQlyZXR1cm4gLUVGQVVMVDsNCj4+IC0JCWNvbnNvbGVfbG9jaygpOw0KPj4gLQkJbG9ja19m Yl9pbmZvKGluZm8pOw0KPj4gLQkJcmV0ID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJnZhcik7 DQo+PiAtCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsNCj4+IC0JCWNvbnNvbGVfdW5sb2NrKCk7 DQo+PiAtCQlpZiAocmV0ID09IDAgJiYgY29weV90b191c2VyKGFyZ3AsICZ2YXIsIHNpemVv Zih2YXIpKSkNCj4+IC0JCQlyZXR1cm4gLUVGQVVMVDsNCj4+IC0JCWJyZWFrOw0KPj4gLQlj YXNlIEZCSU9fQ1VSU09SOg0KPj4gLQkJcmV0ID0gLUVJTlZBTDsNCj4+IC0JCWJyZWFrOw0K Pj4gLQljYXNlIEZCSU9HRVRfQ09OMkZCTUFQOg0KPj4gLQkJcmV0ID0gZmJjb25fZ2V0X2Nv bjJmYl9tYXBfaW9jdGwoYXJncCk7DQo+PiAtCQlicmVhazsNCj4+IC0JY2FzZSBGQklPUFVU X0NPTjJGQk1BUDoNCj4+IC0JCXJldCA9IGZiY29uX3NldF9jb24yZmJfbWFwX2lvY3RsKGFy Z3ApOw0KPj4gLQkJYnJlYWs7DQo+PiAtCWNhc2UgRkJJT0JMQU5LOg0KPj4gLQkJaWYgKGFy ZyA+IEZCX0JMQU5LX1BPV0VSRE9XTikNCj4+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4+IC0J CWNvbnNvbGVfbG9jaygpOw0KPj4gLQkJbG9ja19mYl9pbmZvKGluZm8pOw0KPj4gLQkJcmV0 ID0gZmJfYmxhbmsoaW5mbywgYXJnKTsNCj4+IC0JCS8qIG1pZ2h0IGFnYWluIGNhbGwgaW50 byBmYl9ibGFuayAqLw0KPj4gLQkJZmJjb25fZmJfYmxhbmtlZChpbmZvLCBhcmcpOw0KPj4g LQkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7DQo+PiAtCQljb25zb2xlX3VubG9jaygpOw0KPj4g LQkJYnJlYWs7DQo+PiAtCWRlZmF1bHQ6DQo+PiAtCQlsb2NrX2ZiX2luZm8oaW5mbyk7DQo+ PiAtCQlmYiA9IGluZm8tPmZib3BzOw0KPj4gLQkJaWYgKGZiLT5mYl9pb2N0bCkNCj4+IC0J CQlyZXQgPSBmYi0+ZmJfaW9jdGwoaW5mbywgY21kLCBhcmcpOw0KPj4gLQkJZWxzZQ0KPj4g LQkJCXJldCA9IC1FTk9UVFk7DQo+PiAtCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsNCj4+IC0J fQ0KPj4gLQlyZXR1cm4gcmV0Ow0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgbG9uZyBmYl9p b2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9u ZyBhcmcpDQo+PiAtew0KPj4gLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZpbGVfZmJfaW5m byhmaWxlKTsNCj4+IC0NCj4+IC0JaWYgKCFpbmZvKQ0KPj4gLQkJcmV0dXJuIC1FTk9ERVY7 DQo+PiAtCXJldHVybiBkb19mYl9pb2N0bChpbmZvLCBjbWQsIGFyZyk7DQo+PiAtfQ0KPj4g LQ0KPj4gLSNpZmRlZiBDT05GSUdfQ09NUEFUDQo+PiAtc3RydWN0IGZiX2ZpeF9zY3JlZW5p bmZvMzIgew0KPj4gLQljaGFyCQkJaWRbMTZdOw0KPj4gLQljb21wYXRfY2FkZHJfdAkJc21l bV9zdGFydDsNCj4+IC0JdTMyCQkJc21lbV9sZW47DQo+PiAtCXUzMgkJCXR5cGU7DQo+PiAt CXUzMgkJCXR5cGVfYXV4Ow0KPj4gLQl1MzIJCQl2aXN1YWw7DQo+PiAtCXUxNgkJCXhwYW5z dGVwOw0KPj4gLQl1MTYJCQl5cGFuc3RlcDsNCj4+IC0JdTE2CQkJeXdyYXBzdGVwOw0KPj4g LQl1MzIJCQlsaW5lX2xlbmd0aDsNCj4+IC0JY29tcGF0X2NhZGRyX3QJCW1taW9fc3RhcnQ7 DQo+PiAtCXUzMgkJCW1taW9fbGVuOw0KPj4gLQl1MzIJCQlhY2NlbDsNCj4+IC0JdTE2CQkJ cmVzZXJ2ZWRbM107DQo+PiAtfTsNCj4+IC0NCj4+IC1zdHJ1Y3QgZmJfY21hcDMyIHsNCj4+ IC0JdTMyCQkJc3RhcnQ7DQo+PiAtCXUzMgkJCWxlbjsNCj4+IC0JY29tcGF0X2NhZGRyX3QJ cmVkOw0KPj4gLQljb21wYXRfY2FkZHJfdAlncmVlbjsNCj4+IC0JY29tcGF0X2NhZGRyX3QJ Ymx1ZTsNCj4+IC0JY29tcGF0X2NhZGRyX3QJdHJhbnNwOw0KPj4gLX07DQo+PiAtDQo+PiAt c3RhdGljIGludCBmYl9nZXRwdXRfY21hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWdu ZWQgaW50IGNtZCwNCj4+IC0JCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQ0KPj4gLXsNCj4+IC0J c3RydWN0IGZiX2NtYXAzMiBjbWFwMzI7DQo+PiAtCXN0cnVjdCBmYl9jbWFwIGNtYXBfZnJv bTsNCj4+IC0Jc3RydWN0IGZiX2NtYXBfdXNlciBjbWFwOw0KPj4gLQ0KPj4gLQlpZiAoY29w eV9mcm9tX3VzZXIoJmNtYXAzMiwgY29tcGF0X3B0cihhcmcpLCBzaXplb2YoY21hcDMyKSkp DQo+PiAtCQlyZXR1cm4gLUVGQVVMVDsNCj4+IC0NCj4+IC0JY21hcCA9IChzdHJ1Y3QgZmJf Y21hcF91c2VyKSB7DQo+PiAtCQkuc3RhcnQJPSBjbWFwMzIuc3RhcnQsDQo+PiAtCQkubGVu CT0gY21hcDMyLmxlbiwNCj4+IC0JCS5yZWQJPSBjb21wYXRfcHRyKGNtYXAzMi5yZWQpLA0K Pj4gLQkJLmdyZWVuCT0gY29tcGF0X3B0cihjbWFwMzIuZ3JlZW4pLA0KPj4gLQkJLmJsdWUJ PSBjb21wYXRfcHRyKGNtYXAzMi5ibHVlKSwNCj4+IC0JCS50cmFuc3AJPSBjb21wYXRfcHRy KGNtYXAzMi50cmFuc3ApLA0KPj4gLQl9Ow0KPj4gLQ0KPj4gLQlpZiAoY21kID09IEZCSU9Q VVRDTUFQKQ0KPj4gLQkJcmV0dXJuIGZiX3NldF91c2VyX2NtYXAoJmNtYXAsIGluZm8pOw0K Pj4gLQ0KPj4gLQlsb2NrX2ZiX2luZm8oaW5mbyk7DQo+PiAtCWNtYXBfZnJvbSA9IGluZm8t PmNtYXA7DQo+PiAtCXVubG9ja19mYl9pbmZvKGluZm8pOw0KPj4gLQ0KPj4gLQlyZXR1cm4g ZmJfY21hcF90b191c2VyKCZjbWFwX2Zyb20sICZjbWFwKTsNCj4+IC19DQo+PiAtDQo+PiAt c3RhdGljIGludCBkb19mc2NyZWVuaW5mb190b191c2VyKHN0cnVjdCBmYl9maXhfc2NyZWVu aW5mbyAqZml4LA0KPj4gLQkJCQkgIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbzMyIF9fdXNl ciAqZml4MzIpDQo+PiAtew0KPj4gLQlfX3UzMiBkYXRhOw0KPj4gLQlpbnQgZXJyOw0KPj4g LQ0KPj4gLQllcnIgPSBjb3B5X3RvX3VzZXIoJmZpeDMyLT5pZCwgJmZpeC0+aWQsIHNpemVv ZihmaXgzMi0+aWQpKTsNCj4+IC0NCj4+IC0JZGF0YSA9IChfX3UzMikgKHVuc2lnbmVkIGxv bmcpIGZpeC0+c21lbV9zdGFydDsNCj4+IC0JZXJyIHw9IHB1dF91c2VyKGRhdGEsICZmaXgz Mi0+c21lbV9zdGFydCk7DQo+PiAtDQo+PiAtCWVyciB8PSBwdXRfdXNlcihmaXgtPnNtZW1f bGVuLCAmZml4MzItPnNtZW1fbGVuKTsNCj4+IC0JZXJyIHw9IHB1dF91c2VyKGZpeC0+dHlw ZSwgJmZpeDMyLT50eXBlKTsNCj4+IC0JZXJyIHw9IHB1dF91c2VyKGZpeC0+dHlwZV9hdXgs ICZmaXgzMi0+dHlwZV9hdXgpOw0KPj4gLQllcnIgfD0gcHV0X3VzZXIoZml4LT52aXN1YWws ICZmaXgzMi0+dmlzdWFsKTsNCj4+IC0JZXJyIHw9IHB1dF91c2VyKGZpeC0+eHBhbnN0ZXAs ICZmaXgzMi0+eHBhbnN0ZXApOw0KPj4gLQllcnIgfD0gcHV0X3VzZXIoZml4LT55cGFuc3Rl cCwgJmZpeDMyLT55cGFuc3RlcCk7DQo+PiAtCWVyciB8PSBwdXRfdXNlcihmaXgtPnl3cmFw c3RlcCwgJmZpeDMyLT55d3JhcHN0ZXApOw0KPj4gLQllcnIgfD0gcHV0X3VzZXIoZml4LT5s aW5lX2xlbmd0aCwgJmZpeDMyLT5saW5lX2xlbmd0aCk7DQo+PiAtDQo+PiAtCWRhdGEgPSAo X191MzIpICh1bnNpZ25lZCBsb25nKSBmaXgtPm1taW9fc3RhcnQ7DQo+PiAtCWVyciB8PSBw dXRfdXNlcihkYXRhLCAmZml4MzItPm1taW9fc3RhcnQpOw0KPj4gLQ0KPj4gLQllcnIgfD0g cHV0X3VzZXIoZml4LT5tbWlvX2xlbiwgJmZpeDMyLT5tbWlvX2xlbik7DQo+PiAtCWVyciB8 PSBwdXRfdXNlcihmaXgtPmFjY2VsLCAmZml4MzItPmFjY2VsKTsNCj4+IC0JZXJyIHw9IGNv cHlfdG9fdXNlcihmaXgzMi0+cmVzZXJ2ZWQsIGZpeC0+cmVzZXJ2ZWQsDQo+PiAtCQkJICAg IHNpemVvZihmaXgtPnJlc2VydmVkKSk7DQo+PiAtDQo+PiAtCWlmIChlcnIpDQo+PiAtCQly ZXR1cm4gLUVGQVVMVDsNCj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRp YyBpbnQgZmJfZ2V0X2ZzY3JlZW5pbmZvKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25l ZCBpbnQgY21kLA0KPj4gLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQ0KPj4gLXsNCj4+ IC0Jc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGZpeDsNCj4+IC0NCj4+IC0JbG9ja19mYl9p bmZvKGluZm8pOw0KPj4gLQlmaXggPSBpbmZvLT5maXg7DQo+PiAtCWlmIChpbmZvLT5mbGFn cyAmIEZCSU5GT19ISURFX1NNRU1fU1RBUlQpDQo+PiAtCQlmaXguc21lbV9zdGFydCA9IDA7 DQo+PiAtCXVubG9ja19mYl9pbmZvKGluZm8pOw0KPj4gLQlyZXR1cm4gZG9fZnNjcmVlbmlu Zm9fdG9fdXNlcigmZml4LCBjb21wYXRfcHRyKGFyZykpOw0KPj4gLX0NCj4+IC0NCj4+IC1z dGF0aWMgbG9uZyBmYl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVk IGludCBjbWQsDQo+PiAtCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQ0KPj4gLXsNCj4+IC0J c3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7DQo+PiAtCWNvbnN0 IHN0cnVjdCBmYl9vcHMgKmZiOw0KPj4gLQlsb25nIHJldCA9IC1FTk9JT0NUTENNRDsNCj4+ IC0NCj4+IC0JaWYgKCFpbmZvKQ0KPj4gLQkJcmV0dXJuIC1FTk9ERVY7DQo+PiAtCWZiID0g aW5mby0+ZmJvcHM7DQo+PiAtCXN3aXRjaChjbWQpIHsNCj4+IC0JY2FzZSBGQklPR0VUX1ZT Q1JFRU5JTkZPOg0KPj4gLQljYXNlIEZCSU9QVVRfVlNDUkVFTklORk86DQo+PiAtCWNhc2Ug RkJJT1BBTl9ESVNQTEFZOg0KPj4gLQljYXNlIEZCSU9HRVRfQ09OMkZCTUFQOg0KPj4gLQlj YXNlIEZCSU9QVVRfQ09OMkZCTUFQOg0KPj4gLQkJYXJnID0gKHVuc2lnbmVkIGxvbmcpIGNv bXBhdF9wdHIoYXJnKTsNCj4+IC0JCWZhbGx0aHJvdWdoOw0KPj4gLQljYXNlIEZCSU9CTEFO SzoNCj4+IC0JCXJldCA9IGRvX2ZiX2lvY3RsKGluZm8sIGNtZCwgYXJnKTsNCj4+IC0JCWJy ZWFrOw0KPj4gLQ0KPj4gLQljYXNlIEZCSU9HRVRfRlNDUkVFTklORk86DQo+PiAtCQlyZXQg PSBmYl9nZXRfZnNjcmVlbmluZm8oaW5mbywgY21kLCBhcmcpOw0KPj4gLQkJYnJlYWs7DQo+ PiAtDQo+PiAtCWNhc2UgRkJJT0dFVENNQVA6DQo+PiAtCWNhc2UgRkJJT1BVVENNQVA6DQo+ PiAtCQlyZXQgPSBmYl9nZXRwdXRfY21hcChpbmZvLCBjbWQsIGFyZyk7DQo+PiAtCQlicmVh azsNCj4+IC0NCj4+IC0JZGVmYXVsdDoNCj4+IC0JCWlmIChmYi0+ZmJfY29tcGF0X2lvY3Rs KQ0KPj4gLQkJCXJldCA9IGZiLT5mYl9jb21wYXRfaW9jdGwoaW5mbywgY21kLCBhcmcpOw0K Pj4gLQkJYnJlYWs7DQo+PiAtCX0NCj4+IC0JcmV0dXJuIHJldDsNCj4+IC19DQo+PiAtI2Vu ZGlmDQo+PiAtDQo+PiAtc3RhdGljIGludA0KPj4gLWZiX21tYXAoc3RydWN0IGZpbGUgKmZp bGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkNCj4+IC17DQo+PiAtCXN0cnVjdCBm Yl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOw0KPj4gLQl1bnNpZ25lZCBsb25n IG1taW9fcGdvZmY7DQo+PiAtCXVuc2lnbmVkIGxvbmcgc3RhcnQ7DQo+PiAtCXUzMiBsZW47 DQo+PiAtDQo+PiAtCWlmICghaW5mbykNCj4+IC0JCXJldHVybiAtRU5PREVWOw0KPj4gLQlt dXRleF9sb2NrKCZpbmZvLT5tbV9sb2NrKTsNCj4+IC0NCj4+IC0JaWYgKGluZm8tPmZib3Bz LT5mYl9tbWFwKSB7DQo+PiAtCQlpbnQgcmVzOw0KPj4gLQ0KPj4gLQkJLyoNCj4+IC0JCSAq IFRoZSBmcmFtZWJ1ZmZlciBuZWVkcyB0byBiZSBhY2Nlc3NlZCBkZWNyeXB0ZWQsIGJlIHN1 cmUNCj4+IC0JCSAqIFNNRSBwcm90ZWN0aW9uIGlzIHJlbW92ZWQgYWhlYWQgb2YgdGhlIGNh bGwNCj4+IC0JCSAqLw0KPj4gLQkJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlw dGVkKHZtYS0+dm1fcGFnZV9wcm90KTsNCj4+IC0JCXJlcyA9IGluZm8tPmZib3BzLT5mYl9t bWFwKGluZm8sIHZtYSk7DQo+PiAtCQltdXRleF91bmxvY2soJmluZm8tPm1tX2xvY2spOw0K Pj4gLQkJcmV0dXJuIHJlczsNCj4+IC0jaWYgSVNfRU5BQkxFRChDT05GSUdfRkJfREVGRVJS RURfSU8pDQo+PiAtCX0gZWxzZSBpZiAoaW5mby0+ZmJkZWZpbykgew0KPj4gLQkJLyoNCj4+ IC0JCSAqIEZCIGRlZmVycmVkIEkvTyB3YW50cyB5b3UgdG8gaGFuZGxlIG1tYXAgaW4geW91 ciBkcml2ZXJzLiBBdCBhDQo+PiAtCQkgKiBtaW5pbXVtLCBwb2ludCBzdHJ1Y3QgZmJfb3Bz LmZiX21tYXAgdG8gZmJfZGVmZXJyZWRfaW9fbW1hcCgpLg0KPj4gLQkJICovDQo+PiAtCQlk ZXZfd2Fybl9vbmNlKGluZm8tPmRldiwgImZiZGV2IG1tYXAgbm90IHNldCB1cCBmb3IgZGVm ZXJyZWQgSS9PLlxuIik7DQo+PiAtCQltdXRleF91bmxvY2soJmluZm8tPm1tX2xvY2spOw0K Pj4gLQkJcmV0dXJuIC1FTk9ERVY7DQo+PiAtI2VuZGlmDQo+PiAtCX0NCj4+IC0NCj4+IC0J LyoNCj4+IC0JICogVWdoLiBUaGlzIGNhbiBiZSBlaXRoZXIgdGhlIGZyYW1lIGJ1ZmZlciBt YXBwaW5nLCBvcg0KPj4gLQkgKiBpZiBwZ29mZiBwb2ludHMgcGFzdCBpdCwgdGhlIG1taW8g bWFwcGluZy4NCj4+IC0JICovDQo+PiAtCXN0YXJ0ID0gaW5mby0+Zml4LnNtZW1fc3RhcnQ7 DQo+PiAtCWxlbiA9IGluZm8tPmZpeC5zbWVtX2xlbjsNCj4+IC0JbW1pb19wZ29mZiA9IFBB R0VfQUxJR04oKHN0YXJ0ICYgflBBR0VfTUFTSykgKyBsZW4pID4+IFBBR0VfU0hJRlQ7DQo+ PiAtCWlmICh2bWEtPnZtX3Bnb2ZmID49IG1taW9fcGdvZmYpIHsNCj4+IC0JCWlmIChpbmZv LT52YXIuYWNjZWxfZmxhZ3MpIHsNCj4+IC0JCQltdXRleF91bmxvY2soJmluZm8tPm1tX2xv Y2spOw0KPj4gLQkJCXJldHVybiAtRUlOVkFMOw0KPj4gLQkJfQ0KPj4gLQ0KPj4gLQkJdm1h LT52bV9wZ29mZiAtPSBtbWlvX3Bnb2ZmOw0KPj4gLQkJc3RhcnQgPSBpbmZvLT5maXgubW1p b19zdGFydDsNCj4+IC0JCWxlbiA9IGluZm8tPmZpeC5tbWlvX2xlbjsNCj4+IC0JfQ0KPj4g LQltdXRleF91bmxvY2soJmluZm8tPm1tX2xvY2spOw0KPj4gLQ0KPj4gLQl2bWEtPnZtX3Bh Z2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncyk7DQo+PiAtCWZiX3Bn cHJvdGVjdChmaWxlLCB2bWEsIHN0YXJ0KTsNCj4+IC0NCj4+IC0JcmV0dXJuIHZtX2lvbWFw X21lbW9yeSh2bWEsIHN0YXJ0LCBsZW4pOw0KPj4gLX0NCj4+IC0NCj4+IC1zdGF0aWMgaW50 DQo+PiAtZmJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkN Cj4+IC1fX2FjcXVpcmVzKCZpbmZvLT5sb2NrKQ0KPj4gLV9fcmVsZWFzZXMoJmluZm8tPmxv Y2spDQo+PiAtew0KPj4gLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOw0KPj4gLQlzdHJ1 Y3QgZmJfaW5mbyAqaW5mbzsNCj4+IC0JaW50IHJlcyA9IDA7DQo+PiAtDQo+PiAtCWluZm8g PSBnZXRfZmJfaW5mbyhmYmlkeCk7DQo+PiAtCWlmICghaW5mbykgew0KPj4gLQkJcmVxdWVz dF9tb2R1bGUoImZiJWQiLCBmYmlkeCk7DQo+PiAtCQlpbmZvID0gZ2V0X2ZiX2luZm8oZmJp ZHgpOw0KPj4gLQkJaWYgKCFpbmZvKQ0KPj4gLQkJCXJldHVybiAtRU5PREVWOw0KPj4gLQl9 DQo+PiAtCWlmIChJU19FUlIoaW5mbykpDQo+PiAtCQlyZXR1cm4gUFRSX0VSUihpbmZvKTsN Cj4+IC0NCj4+IC0JbG9ja19mYl9pbmZvKGluZm8pOw0KPj4gLQlpZiAoIXRyeV9tb2R1bGVf Z2V0KGluZm8tPmZib3BzLT5vd25lcikpIHsNCj4+IC0JCXJlcyA9IC1FTk9ERVY7DQo+PiAt CQlnb3RvIG91dDsNCj4+IC0JfQ0KPj4gLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbmZvOw0K Pj4gLQlpZiAoaW5mby0+ZmJvcHMtPmZiX29wZW4pIHsNCj4+IC0JCXJlcyA9IGluZm8tPmZi b3BzLT5mYl9vcGVuKGluZm8sMSk7DQo+PiAtCQlpZiAocmVzKQ0KPj4gLQkJCW1vZHVsZV9w dXQoaW5mby0+ZmJvcHMtPm93bmVyKTsNCj4+IC0JfQ0KPj4gLSNpZmRlZiBDT05GSUdfRkJf REVGRVJSRURfSU8NCj4+IC0JaWYgKGluZm8tPmZiZGVmaW8pDQo+PiAtCQlmYl9kZWZlcnJl ZF9pb19vcGVuKGluZm8sIGlub2RlLCBmaWxlKTsNCj4+IC0jZW5kaWYNCj4+IC1vdXQ6DQo+ PiAtCXVubG9ja19mYl9pbmZvKGluZm8pOw0KPj4gLQlpZiAocmVzKQ0KPj4gLQkJcHV0X2Zi X2luZm8oaW5mbyk7DQo+PiAtCXJldHVybiByZXM7DQo+PiAtfQ0KPj4gLQ0KPj4gLXN0YXRp YyBpbnQNCj4+IC1mYl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxl ICpmaWxlKQ0KPj4gLV9fYWNxdWlyZXMoJmluZm8tPmxvY2spDQo+PiAtX19yZWxlYXNlcygm aW5mby0+bG9jaykNCj4+IC17DQo+PiAtCXN0cnVjdCBmYl9pbmZvICogY29uc3QgaW5mbyA9 IGZpbGUtPnByaXZhdGVfZGF0YTsNCj4+IC0NCj4+IC0JbG9ja19mYl9pbmZvKGluZm8pOw0K Pj4gLSNpZiBJU19FTkFCTEVEKENPTkZJR19GQl9ERUZFUlJFRF9JTykNCj4+IC0JaWYgKGlu Zm8tPmZiZGVmaW8pDQo+PiAtCQlmYl9kZWZlcnJlZF9pb19yZWxlYXNlKGluZm8pOw0KPj4g LSNlbmRpZg0KPj4gLQlpZiAoaW5mby0+ZmJvcHMtPmZiX3JlbGVhc2UpDQo+PiAtCQlpbmZv LT5mYm9wcy0+ZmJfcmVsZWFzZShpbmZvLDEpOw0KPj4gLQltb2R1bGVfcHV0KGluZm8tPmZi b3BzLT5vd25lcik7DQo+PiAtCXVubG9ja19mYl9pbmZvKGluZm8pOw0KPj4gLQlwdXRfZmJf aW5mbyhpbmZvKTsNCj4+IC0JcmV0dXJuIDA7DQo+PiAtfQ0KPj4gLQ0KPj4gLSNpZiBkZWZp bmVkKENPTkZJR19GQl9QUk9WSURFX0dFVF9GQl9VTk1BUFBFRF9BUkVBKSAmJiAhZGVmaW5l ZChDT05GSUdfTU1VKQ0KPj4gLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9mYl91bm1hcHBl ZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLA0KPj4gLQkJCQkgICB1bnNpZ25lZCBsb25nIGFk ZHIsIHVuc2lnbmVkIGxvbmcgbGVuLA0KPj4gLQkJCQkgICB1bnNpZ25lZCBsb25nIHBnb2Zm LCB1bnNpZ25lZCBsb25nIGZsYWdzKQ0KPj4gLXsNCj4+IC0Jc3RydWN0IGZiX2luZm8gKiBj b25zdCBpbmZvID0gZmlscC0+cHJpdmF0ZV9kYXRhOw0KPj4gLQl1bnNpZ25lZCBsb25nIGZi X3NpemUgPSBQQUdFX0FMSUdOKGluZm8tPmZpeC5zbWVtX2xlbik7DQo+PiAtDQo+PiAtCWlm IChwZ29mZiA+IGZiX3NpemUgfHwgbGVuID4gZmJfc2l6ZSAtIHBnb2ZmKQ0KPj4gLQkJcmV0 dXJuIC1FSU5WQUw7DQo+PiAtDQo+PiAtCXJldHVybiAodW5zaWduZWQgbG9uZylpbmZvLT5z Y3JlZW5fYmFzZSArIHBnb2ZmOw0KPj4gLX0NCj4+IC0jZW5kaWYNCj4+IC0NCj4+IC1zdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYl9mb3BzID0gew0KPj4gLQkub3du ZXIgPQlUSElTX01PRFVMRSwNCj4+IC0JLnJlYWQgPQkJZmJfcmVhZCwNCj4+IC0JLndyaXRl ID0JZmJfd3JpdGUsDQo+PiAtCS51bmxvY2tlZF9pb2N0bCA9IGZiX2lvY3RsLA0KPj4gLSNp ZmRlZiBDT05GSUdfQ09NUEFUDQo+PiAtCS5jb21wYXRfaW9jdGwgPSBmYl9jb21wYXRfaW9j dGwsDQo+PiAtI2VuZGlmDQo+PiAtCS5tbWFwID0JCWZiX21tYXAsDQo+PiAtCS5vcGVuID0J CWZiX29wZW4sDQo+PiAtCS5yZWxlYXNlID0JZmJfcmVsZWFzZSwNCj4+IC0jaWYgZGVmaW5l ZChIQVZFX0FSQ0hfRkJfVU5NQVBQRURfQVJFQSkgfHwgXA0KPj4gLQkoZGVmaW5lZChDT05G SUdfRkJfUFJPVklERV9HRVRfRkJfVU5NQVBQRURfQVJFQSkgJiYgXA0KPj4gLQkgIWRlZmlu ZWQoQ09ORklHX01NVSkpDQo+PiAtCS5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF9mYl91bm1h cHBlZF9hcmVhLA0KPj4gLSNlbmRpZg0KPj4gLSNpZmRlZiBDT05GSUdfRkJfREVGRVJSRURf SU8NCj4+IC0JLmZzeW5jID0JZmJfZGVmZXJyZWRfaW9fZnN5bmMsDQo+PiAtI2VuZGlmDQo+ PiAtCS5sbHNlZWsgPQlkZWZhdWx0X2xsc2VlaywNCj4+IC19Ow0KPj4gLQ0KPj4gICBzdHJ1 Y3QgY2xhc3MgKmZiX2NsYXNzOw0KPj4gICBFWFBPUlRfU1lNQk9MKGZiX2NsYXNzKTsNCj4+ ICAgDQo+PiBAQCAtMTU4OCwxMSArMTEyNCw5IEBAIGZibWVtX2luaXQodm9pZCkNCj4+ICAg CWlmIChyZXQpDQo+PiAgIAkJcmV0dXJuIHJldDsNCj4+ICAgDQo+PiAtCXJldCA9IHJlZ2lz dGVyX2NocmRldihGQl9NQUpPUiwgImZiIiwgJmZiX2ZvcHMpOw0KPj4gLQlpZiAocmV0KSB7 DQo+PiAtCQlwcmludGsoInVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIGZiIGRldnNcbiIs IEZCX01BSk9SKTsNCj4+ICsJcmV0ID0gZmJfcmVnaXN0ZXJfY2hyZGV2KCk7DQo+PiArCWlm IChyZXQpDQo+PiAgIAkJZ290byBlcnJfY2hyZGV2Ow0KPj4gLQl9DQo+PiAgIA0KPj4gICAJ ZmJfY2xhc3MgPSBjbGFzc19jcmVhdGUoImdyYXBoaWNzIik7DQo+PiAgIAlpZiAoSVNfRVJS KGZiX2NsYXNzKSkgew0KPj4gQEAgLTE2MDcsNyArMTE0MSw3IEBAIGZibWVtX2luaXQodm9p ZCkNCj4+ICAgCXJldHVybiAwOw0KPj4gICANCj4+ICAgZXJyX2NsYXNzOg0KPj4gLQl1bnJl Z2lzdGVyX2NocmRldihGQl9NQUpPUiwgImZiIik7DQo+PiArCWZiX3VucmVnaXN0ZXJfY2hy ZGV2KCk7DQo+PiAgIGVycl9jaHJkZXY6DQo+PiAgIAlmYl9jbGVhbnVwX3Byb2NmcygpOw0K Pj4gICAJcmV0dXJuIHJldDsNCj4+IEBAIC0xNjIyLDcgKzExNTYsNyBAQCBmYm1lbV9leGl0 KHZvaWQpDQo+PiAgIA0KPj4gICAJZmJfY2xlYW51cF9wcm9jZnMoKTsNCj4+ICAgCWNsYXNz X2Rlc3Ryb3koZmJfY2xhc3MpOw0KPj4gLQl1bnJlZ2lzdGVyX2NocmRldihGQl9NQUpPUiwg ImZiIik7DQo+PiArCWZiX3VucmVnaXN0ZXJfY2hyZGV2KCk7DQo+PiAgIH0NCj4+ICAgDQo+ PiAgIG1vZHVsZV9leGl0KGZibWVtX2V4aXQpOw0KPj4gLS0gDQo+PiAyLjQwLjENCg0KLS0g DQpUaG9tYXMgWmltbWVybWFubg0KR3JhcGhpY3MgRHJpdmVyIERldmVsb3Blcg0KU1VTRSBT b2Z0d2FyZSBTb2x1dGlvbnMgR2VybWFueSBHbWJIDQpGcmFua2Vuc3RyYXNzZSAxNDYsIDkw NDYxIE51ZXJuYmVyZywgR2VybWFueQ0KR0Y6IEl2byBUb3RldiwgQW5kcmV3IE15ZXJzLCBB bmRyZXcgTWNEb25hbGQsIEJvdWRpZW4gTW9lcm1hbg0KSFJCIDM2ODA5IChBRyBOdWVybmJl cmcpDQo= --------------yYH4hnHFTuw0DUAZegK8xm0Q-- --------------S3i0E4Q7SQ6N0iK9JHkRmR1S 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+AFAmSG9PcFAwAAAAAACgkQlh/E3EQov+CT cRAAmDbkIo9gNFiWn87ZD91pBGGDR0j7qJf3i8ftL8xgMc/cThHNc2A409RrWM+tUb4W8mMkXmXT IeaRHrWpH3nmI0UbT0JRuSnr33JFcOJ7whfm/vEU+eaUSINIqXpOVhJfIiSyrNYPn7NsevtBRCSX 8FGvlGMvIGr+yRyIHKOMNBt0tr39nRq1e4x2qFhoGPBAFHqGx0TiJuxDzd+1S6A8ORWeV/3M3XvU aJQOvyimSkE4HU2X9uttI6DJ5Q6qriei+8erKgPS5++ClHHTDM++QjQ9jWqah8HaJTlGHf63Q8T2 DjlzVDFXaTFApfkPlZoLcEwAFOE6sFT5T+5a5ljTiq7y/zM35w/jjzCAK32ZfI7efTkA7HLXGA8l 4TdaWzJvv2mfJ93RjZUbRR+rpbSGuGgV0ihqKi8pQTvXetiJ1XAQxrz/SBK0yMkRNmQp3iYSZLCN V15aK9/VZXa0nnQA3vIkMGGSz2PnuCWG878HHlPEGZByChoQR2qWh0tT8eAj58ACU+tNOqLMjETF v/12uvRO8iXSb86TES3pxARAQRjdjZuk7t4ZQUyiT0cYIy1UDCqTag8/Cfk4R/ai/wMQ4uQ0elsi g0DxaU8yeTreZjzYFJLHAX16WIZXNqMLTmoEnqPjO7HqX4hx8oHAd9mBNMSWdJk+LxNuGdZUA5tJ kw0= =bkCs -----END PGP SIGNATURE----- --------------S3i0E4Q7SQ6N0iK9JHkRmR1S--