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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AFA9BEDB7DF for ; Tue, 7 Apr 2026 09:26:13 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1422B10E38D; Tue, 7 Apr 2026 09:26:13 +0000 (UTC) Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3739810E38D for ; Tue, 7 Apr 2026 09:26:11 +0000 (UTC) Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 17F405BDCF; Tue, 7 Apr 2026 09:26:03 +0000 (UTC) Authentication-Results: smtp-out2.suse.de; none Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id C4FFE4A0B2; Tue, 7 Apr 2026 09:26:02 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id WG7nLqrN1GmDVwAAD6G6ig (envelope-from ); Tue, 07 Apr 2026 09:26:02 +0000 From: Thomas Zimmermann To: deller@gmx.de, gregkh@linuxfoundation.org, jirislaby@kernel.org, geert@linux-m68k.org, simona@ffwll.ch, sam@ravnborg.org Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Thomas Zimmermann Subject: [PATCH v2 08/10] lib/fonts: Implement font rotation Date: Tue, 7 Apr 2026 11:23:19 +0200 Message-ID: <20260407092555.58816-9-tzimmermann@suse.de> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260407092555.58816-1-tzimmermann@suse.de> References: <20260407092555.58816-1-tzimmermann@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-4.00 / 50.00]; REPLY(-4.00)[] X-Rspamd-Queue-Id: 17F405BDCF X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Rspamd-Action: no action X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" TW92ZSB0aGUgY29yZSBvZiBmYmNvbidzIGZvbnQtcm90YXRpb24gY29kZSB0byB0aGUgZm9udCBs aWJyYXJ5IGFzCnRoZSBuZXcgaGVscGVyIGZvbnRfZGF0YV9yb3RhdGUoKS4gVGhlIGNvZGUgY2Fu IHJvdGF0ZSBpbiBzdGVwcyBvZgo5MMKwLiBGb3IgY29tcGxldGVuZXNzLCBpdCBhbHNvIGNvcGll cyB0aGUgZ2x5cGggZGF0YSBmb3IgbXVsdGlwbGVzCm9mIDM2MMKwLgoKQnJpbmcgYmFjayB0aGUg bWVtc2V0IG9wdGltaXphdGlvbi4gQSBtZW1zZXQgdG8gMCBhZ2FpbiBjbGVhcnMgdGhlCndob2xl IGdseXBoIG91dHB1dCBidWZmZXIuIFRoZW4gdXNlIHRoZSBpbnRlcm5hbCByb3RhdGlvbiBoZWxw ZXJzIG9uCnRoZSBjbGVhcmVkIG91dHB1dC4gRmJjb24ncyBvcmlnaW5hbCBpbXBsZW1lbnRhdGlv biB3b3JrZWQgbGlrZSB0aGlzLApidXQgbG9zdCBpdCBkdXJpbmcgcmVmYWN0b3JpbmcuCgpSZXBs YWNlIGZiY29uJ3MgZm9udC1yb3RhdGlvbiBjb2RlIHdpdGggdGhlIG5ldyBpbXBsZW1lbnRhdGlv bnMuCkFsbCB0aGF0J3MgbGVmdCB0byBkbyBmb3IgZmJjb24gaXMgdG8gbWFpbnRhaW4gaXRzIGlu dGVybmFsIGZiY29uCnN0YXRlLgoKdjI6Ci0gZml4IHR5cG9zCgpTaWduZWQtb2ZmLWJ5OiBUaG9t YXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KLS0tCiBkcml2ZXJzL3ZpZGVvL2Zi ZGV2L2NvcmUvZmJjb24uaCAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvdmlkZW8vZmJkZXYvY29y ZS9mYmNvbl9yb3RhdGUuYyB8ICA3OCArKysrKy0tLS0tLS0tLS0tLS0KIGluY2x1ZGUvbGludXgv Zm9udC5oICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBsaWIvZm9udHMvZm9udF9yb3RhdGUu YyAgICAgICAgICAgICAgICAgfCAxMDMgKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVz IGNoYW5nZWQsIDEyNiBpbnNlcnRpb25zKCspLCA2MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaCBiL2RyaXZlcnMvdmlkZW8vZmJkZXYv Y29yZS9mYmNvbi5oCmluZGV4IDFlM2MxZWY4NDc2Mi4uMTc5M2YzNGE2Yzg0IDEwMDY0NAotLS0g YS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjb24uaAorKysgYi9kcml2ZXJzL3ZpZGVvL2Zi ZGV2L2NvcmUvZmJjb24uaApAQCAtODYsNyArODYsNyBAQCBzdHJ1Y3QgZmJjb25fcGFyIHsKIAlj b25zdCB1OCAgICAqZm9udGRhdGE7CiAJdTggICAgKmN1cnNvcl9zcmM7CiAJdTMyICAgIGN1cnNv cl9zaXplOwotCXUzMiAgICBmZF9zaXplOworCXNpemVfdCBmZF9zaXplOwogCiAJY29uc3Qgc3Ry dWN0IGZiY29uX2JpdG9wcyAqYml0b3BzOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8v ZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmNv bl9yb3RhdGUuYwppbmRleCA1ODhkYzlkNjc1OGEuLjc0MjA2ZjVhNmU5OCAxMDA2NDQKLS0tIGEv ZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2ZiY29uX3JvdGF0ZS5jCisrKyBiL2RyaXZlcnMvdmlk ZW8vZmJkZXYvY29yZS9mYmNvbl9yb3RhdGUuYwpAQCAtOCw4NCArOCw0NCBAQAogICogIG1vcmUg ZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vy cm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9mb250Lmg+Ci0j aW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNp bmNsdWRlIDxhc20vdHlwZXMuaD4KKwogI2luY2x1ZGUgImZiY29uLmgiCiAjaW5jbHVkZSAiZmJj b25fcm90YXRlLmgiCiAKIGludCBmYmNvbl9yb3RhdGVfZm9udChzdHJ1Y3QgZmJfaW5mbyAqaW5m bywgc3RydWN0IHZjX2RhdGEgKnZjKQogewogCXN0cnVjdCBmYmNvbl9wYXIgKnBhciA9IGluZm8t PmZiY29uX3BhcjsKLQlpbnQgbGVuLCBlcnIgPSAwOwotCWludCBzX2NlbGxzaXplLCBkX2NlbGxz aXplLCBpOwotCWNvbnN0IHU4ICpzcmM7Ci0JdTggKmRzdDsKKwl1bnNpZ25lZCBjaGFyICpmb250 YnVmZmVyOworCWludCByZXQ7CiAKIAlpZiAodmMtPnZjX2ZvbnQuZGF0YSA9PSBwYXItPmZvbnRk YXRhICYmCiAJICAgIHBhci0+cC0+Y29uX3JvdGF0ZSA9PSBwYXItPmN1cl9yb3RhdGUpCi0JCWdv dG8gZmluaXNoZWQ7CisJCXJldHVybiAwOwogCi0Jc3JjID0gcGFyLT5mb250ZGF0YSA9IHZjLT52 Y19mb250LmRhdGE7CisJcGFyLT5mb250ZGF0YSA9IHZjLT52Y19mb250LmRhdGE7CiAJcGFyLT5j dXJfcm90YXRlID0gcGFyLT5wLT5jb25fcm90YXRlOwotCWxlbiA9IHZjLT52Y19mb250LmNoYXJj b3VudDsKLQlzX2NlbGxzaXplID0gZm9udF9nbHlwaF9zaXplKHZjLT52Y19mb250LndpZHRoLCB2 Yy0+dmNfZm9udC5oZWlnaHQpOwotCWRfY2VsbHNpemUgPSBzX2NlbGxzaXplOwotCi0JaWYgKHBh ci0+cm90YXRlID09IEZCX1JPVEFURV9DVyB8fAotCSAgICBwYXItPnJvdGF0ZSA9PSBGQl9ST1RB VEVfQ0NXKQotCQlkX2NlbGxzaXplID0gZm9udF9nbHlwaF9zaXplKHZjLT52Y19mb250LmhlaWdo dCwgdmMtPnZjX2ZvbnQud2lkdGgpOwogCiAJaWYgKGluZm8tPmZib3BzLT5mYl9zeW5jKQogCQlp bmZvLT5mYm9wcy0+ZmJfc3luYyhpbmZvKTsKIAotCWlmIChwYXItPmZkX3NpemUgPCBkX2NlbGxz aXplICogbGVuKSB7Ci0JCWtmcmVlKHBhci0+Zm9udGJ1ZmZlcik7Ci0JCXBhci0+Zm9udGJ1ZmZl ciA9IE5VTEw7Ci0JCXBhci0+ZmRfc2l6ZSA9IDA7Ci0KLQkJZHN0ID0ga21hbGxvY19hcnJheShs ZW4sIGRfY2VsbHNpemUsIEdGUF9LRVJORUwpOwotCi0JCWlmIChkc3QgPT0gTlVMTCkgewotCQkJ ZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gZmluaXNoZWQ7Ci0JCX0KLQotCQlwYXItPmZkX3NpemUg PSBkX2NlbGxzaXplICogbGVuOwotCQlwYXItPmZvbnRidWZmZXIgPSBkc3Q7CisJZm9udGJ1ZmZl ciA9IGZvbnRfZGF0YV9yb3RhdGUocGFyLT5wLT5mb250ZGF0YSwgdmMtPnZjX2ZvbnQud2lkdGgs CisJCQkJICAgICAgdmMtPnZjX2ZvbnQuaGVpZ2h0LCB2Yy0+dmNfZm9udC5jaGFyY291bnQsCisJ CQkJICAgICAgcGFyLT5yb3RhdGUsIHBhci0+Zm9udGJ1ZmZlciwgJnBhci0+ZmRfc2l6ZSk7CisJ aWYgKElTX0VSUihmb250YnVmZmVyKSkgeworCQlyZXQgPSBQVFJfRVJSKGZvbnRidWZmZXIpOwor CQlnb3RvIGVycl9rZnJlZTsKIAl9CiAKLQlkc3QgPSBwYXItPmZvbnRidWZmZXI7CisJcGFyLT5m b250YnVmZmVyID0gZm9udGJ1ZmZlcjsKIAotCXN3aXRjaCAocGFyLT5yb3RhdGUpIHsKLQljYXNl IEZCX1JPVEFURV9VRDoKLQkJZm9yIChpID0gbGVuOyBpLS07ICkgewotCQkJZm9udF9nbHlwaF9y b3RhdGVfMTgwKHNyYywgdmMtPnZjX2ZvbnQud2lkdGgsIHZjLT52Y19mb250LmhlaWdodCwgZHN0 KTsKLQkJCXNyYyArPSBzX2NlbGxzaXplOwotCQkJZHN0ICs9IGRfY2VsbHNpemU7Ci0JCX0KLQkJ YnJlYWs7Ci0JY2FzZSBGQl9ST1RBVEVfQ1c6Ci0JCWZvciAoaSA9IGxlbjsgaS0tOyApIHsKLQkJ CWZvbnRfZ2x5cGhfcm90YXRlXzkwKHNyYywgdmMtPnZjX2ZvbnQud2lkdGgsIHZjLT52Y19mb250 LmhlaWdodCwgZHN0KTsKLQkJCXNyYyArPSBzX2NlbGxzaXplOwotCQkJZHN0ICs9IGRfY2VsbHNp emU7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBGQl9ST1RBVEVfQ0NXOgotCQlmb3IgKGkgPSBsZW47 IGktLTsgKSB7Ci0JCQlmb250X2dseXBoX3JvdGF0ZV8yNzAoc3JjLCB2Yy0+dmNfZm9udC53aWR0 aCwgdmMtPnZjX2ZvbnQuaGVpZ2h0LCBkc3QpOwotCQkJc3JjICs9IHNfY2VsbHNpemU7Ci0JCQlk c3QgKz0gZF9jZWxsc2l6ZTsKLQkJfQotCQlicmVhazsKLQl9CisJcmV0dXJuIDA7CisKK2Vycl9r ZnJlZToKKwlrZnJlZShwYXItPmZvbnRidWZmZXIpOworCXBhci0+Zm9udGJ1ZmZlciA9IE5VTEw7 IC8qIGNsZWFyIGhlcmUgdG8gYXZvaWQgb3V0cHV0ICovCiAKLWZpbmlzaGVkOgotCXJldHVybiBl cnI7CisJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZm9udC5oIGIv aW5jbHVkZS9saW51eC9mb250LmgKaW5kZXggMGEyNDBkZDcwNDIyLi42ODQ1ZjAyZDczOWEgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZm9udC5oCisrKyBiL2luY2x1ZGUvbGludXgvZm9udC5o CkBAIC0xMTEsNiArMTExLDkgQEAgdm9pZCBmb250X2dseXBoX3JvdGF0ZV8xODAoY29uc3QgdW5z aWduZWQgY2hhciAqZ2x5cGgsIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWcKIAkJCSAgIHVuc2ln bmVkIGNoYXIgKm91dCk7CiB2b2lkIGZvbnRfZ2x5cGhfcm90YXRlXzI3MChjb25zdCB1bnNpZ25l ZCBjaGFyICpnbHlwaCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAog CQkJICAgdW5zaWduZWQgY2hhciAqb3V0KTsKK3Vuc2lnbmVkIGNoYXIgKmZvbnRfZGF0YV9yb3Rh dGUoZm9udF9kYXRhX3QgKmZkLCB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWln aHQsCisJCQkJdW5zaWduZWQgaW50IGNoYXJjb3VudCwgdW5zaWduZWQgaW50IHN0ZXBzLAorCQkJ CXVuc2lnbmVkIGNoYXIgKmJ1Ziwgc2l6ZV90ICpidWZzaXplKTsKIAogLyoKICAqIEZvbnQgZGVz Y3JpcHRpb24KZGlmZiAtLWdpdCBhL2xpYi9mb250cy9mb250X3JvdGF0ZS5jIGIvbGliL2ZvbnRz L2ZvbnRfcm90YXRlLmMKaW5kZXggMDlmNjIxOGUwMzZmLi4wNjVlMGZjMDY2N2IgMTAwNjQ0Ci0t LSBhL2xpYi9mb250cy9mb250X3JvdGF0ZS5jCisrKyBiL2xpYi9mb250cy9mb250X3JvdGF0ZS5j CkBAIC05LDggKzksMTEgQEAKICAqIG1vcmUgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8bGlu dXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9t YXRoLmg+CisjaW5jbHVkZSA8bGludXgvb3ZlcmZsb3cuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKICNpbmNsdWRlICJmb250LmgiCkBAIC0x NzAsMyArMTczLDEwMyBAQCB2b2lkIGZvbnRfZ2x5cGhfcm90YXRlXzI3MChjb25zdCB1bnNpZ25l ZCBjaGFyICpnbHlwaCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZwogCV9fZm9udF9nbHlwaF9y b3RhdGVfMjcwKGdseXBoLCB3aWR0aCwgaGVpZ2h0LCBvdXQpOwogfQogRVhQT1JUX1NZTUJPTF9H UEwoZm9udF9nbHlwaF9yb3RhdGVfMjcwKTsKKworLyoqCisgKiBmb250X2RhdGFfcm90YXRlIC0g Um90YXRlIGZvbnQgZGF0YSBieSBtdWx0aXBsZXMgb2YgOTDCsAorICogQGZkOiBUaGUgZm9udCBk YXRhIHRvIHJvdGF0ZQorICogQHdpZHRoOiBUaGUgZ2x5cGggd2lkdGggaW4gYml0cyBwZXIgc2Nh bmxpbmUKKyAqIEBoZWlnaHQ6IFRoZSBudW1iZXIgb2Ygc2NhbmxpbmVzIGluIHRoZSBnbHlwaAor ICogQGNoYXJjb3VudDogVGhlIG51bWJlciBvZiBnbHlwaHMgaW4gdGhlIGZvbnQKKyAqIEBzdGVw czogTnVtYmVyIG9mIHJvdGF0aW9uIHN0ZXBzIG9mIDkwwrAKKyAqIEBidWY6IFByZWFsbG9jYXRl ZCBvdXRwdXQgYnVmZmVyOyBjYW4gYmUgTlVMTAorICogQGJ1ZnNpemU6IFRoZSBzaXplIG9mIEBi dWYgaW4gYnl0ZXM7IGNhbiBiZSBOVUxMCisgKgorICogVGhlIHBhcmFtZXRlcnMgQHdpZHRoIGFu ZCBAaGVpZ2h0IHJlZmVyIHRvIHRoZSB2aXNpYmxlIG51bWJlciBvZiBwaXhlbHMKKyAqIGFuZCBz Y2FubGluZXMgaW4gYSBzaW5nbGUgZ2x5cGguIFRoZSBudW1iZXIgb2YgZ2x5cGhzIGlzIGdpdmVu IGluIEBjaGFyY291bnQuCisgKiBSb3RhdGlvbiBoYXBwZW5zIGluIHN0ZXBzIG9mIDkwwrAuIFRo ZSBAc3RlcHMgcGFyYW1ldGVyIGNhbiBoYXZlIGFueSB2YWx1ZSwKKyAqIGJ1dCBvbmx5IDAgdG8g MyBwcm9kdWNlIGRpc3RpbmN0IHJlc3VsdHMuIFdpdGggNCBvciBoaWdoZXIsIGEgZnVsbCByb3Rh dGlvbgorICogaGFzIGJlZW4gcGVyZm9ybWVkLiBZb3UgY2FuIHBhc3MgYW55IHZhbHVlIGZvciBA c3RlcHMgYW5kIHRoZSBoZWxwZXIgd2lsbAorICogcGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUgcm90 YXRpb24uIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgYnVmZmVyIGlzIG5vdAorICogY29tcGF0aWJs ZSB3aXRoIGZvbnRfZGF0YV90LiBJdCBvbmx5IGNvbnRhaW5zIGdseXBoIGRhdGEgaW4gdGhlIHNh bWUgZm9ybWF0CisgKiBhcyByZXR1cm5lZCBieSBmb250X2RhdGFfYnVmKCkuIENhbGxlcnMgYXJl IHJlc3BvbnNpYmxlIHRvIGZyZWUgdGhlIHJldHVybmVkCisgKiBidWZmZXIgd2l0aCBrZnJlZSgp LiBGb250IHJvdGF0aW9uIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gZGlzcGxheXMgZ2V0CisgKiBy ZS1vcmllbnRlZC4gVG8gYXZvaWQgdW5uZWNlc3NhcnkgcmUtYWxsb2NhdGlvbiBvZiB0aGUgbWVt b3J5IGJ1ZmZlciwgdGhlCisgKiBjYWxsZXIgY2FuIHBhc3MgaW4gYW4gZWFybGllciByZXN1bHQg YnVmZmVyIGluIEBidWYgZm9yIHJldXNlLiBUaGUgb2xkIGFuZAorICogbmV3IGJ1ZmZlciBzaXpl cyBhcmUgZ2l2ZW4gYW5kIHJldHJpZXZlZCBieSB0aGUgY2FsbGVyIGluIEBidWZzaXplLiBUaGUK KyAqIGFsbG9jYXRpb24gc2VtYW50aWNzIGFyZSBjb21wYXRpYmxlIHdpdGgga3JlYWxsb2MoKS4K KyAqCisgKiBSZXR1cm5zOgorICogQSBidWZmZXIgd2l0aCByb3RhdGVkIGdseXBocyBvbiBzdWNj ZXNzLCBvciBhbiBlcnJvciBwb2ludGVyIG90aGVyd2lzZQorICovCit1bnNpZ25lZCBjaGFyICpm b250X2RhdGFfcm90YXRlKGZvbnRfZGF0YV90ICpmZCwgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNp Z25lZCBpbnQgaGVpZ2h0LAorCQkJCXVuc2lnbmVkIGludCBjaGFyY291bnQsIHVuc2lnbmVkIGlu dCBzdGVwcywKKwkJCQl1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCAqYnVmc2l6ZSkKK3sKKwlj b25zdCB1bnNpZ25lZCBjaGFyICpzcmMgPSBmb250X2RhdGFfYnVmKGZkKTsKKwl1bnNpZ25lZCBp bnQgc19jZWxsc2l6ZSA9IGZvbnRfZ2x5cGhfc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwl1bnNpZ25l ZCBpbnQgZF9jZWxsc2l6ZSwgaTsKKwl1bnNpZ25lZCBjaGFyICpkc3Q7CisJc2l6ZV90IHNpemU7 CisKKwlzdGVwcyAlPSA0OworCisJc3dpdGNoIChzdGVwcykgeworCWNhc2UgMDoKKwljYXNlIDI6 CisJCWRfY2VsbHNpemUgPSBzX2NlbGxzaXplOworCQlicmVhazsKKwljYXNlIDE6CisJY2FzZSAz OgorCQlkX2NlbGxzaXplID0gZm9udF9nbHlwaF9zaXplKGhlaWdodCwgd2lkdGgpOyAvKiBmbGlw IHdpZHRoL2hlaWdodCAqLworCQlicmVhazsKKwl9CisKKwlpZiAoY2hlY2tfbXVsX292ZXJmbG93 KGNoYXJjb3VudCwgZF9jZWxsc2l6ZSwgJnNpemUpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFM KTsKKworCWlmICghYnVmIHx8ICFidWZzaXplIHx8IHNpemUgPiAqYnVmc2l6ZSkgeworCQlkc3Qg PSBrbWFsbG9jX2FycmF5KGNoYXJjb3VudCwgZF9jZWxsc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlm ICghZHN0KQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkJa2ZyZWUoYnVmKTsKKwkJ YnVmID0gZHN0OworCQlpZiAoYnVmc2l6ZSkKKwkJCSpidWZzaXplID0gc2l6ZTsKKwl9IGVsc2Ug eworCQlkc3QgPSBidWY7CisJfQorCisJc3dpdGNoIChzdGVwcykgeworCWNhc2UgMDoKKwkJbWVt Y3B5KGRzdCwgc3JjLCBzaXplKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltZW1zZXQoZHN0LCAw LCBzaXplKTsKKwkJZm9yIChpID0gMDsgaSA8IGNoYXJjb3VudDsgKytpKSB7CisJCQlfX2ZvbnRf Z2x5cGhfcm90YXRlXzkwKHNyYywgd2lkdGgsIGhlaWdodCwgZHN0KTsKKwkJCXNyYyArPSBzX2Nl bGxzaXplOworCQkJZHN0ICs9IGRfY2VsbHNpemU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAyOgor CQltZW1zZXQoZHN0LCAwLCBzaXplKTsKKwkJZm9yIChpID0gMDsgaSA8IGNoYXJjb3VudDsgKytp KSB7CisJCQlfX2ZvbnRfZ2x5cGhfcm90YXRlXzE4MChzcmMsIHdpZHRoLCBoZWlnaHQsIGRzdCk7 CisJCQlzcmMgKz0gc19jZWxsc2l6ZTsKKwkJCWRzdCArPSBkX2NlbGxzaXplOworCQl9CisJCWJy ZWFrOworCWNhc2UgMzoKKwkJbWVtc2V0KGRzdCwgMCwgc2l6ZSk7CisJCWZvciAoaSA9IDA7IGkg PCBjaGFyY291bnQ7ICsraSkgeworCQkJX19mb250X2dseXBoX3JvdGF0ZV8yNzAoc3JjLCB3aWR0 aCwgaGVpZ2h0LCBkc3QpOworCQkJc3JjICs9IHNfY2VsbHNpemU7CisJCQlkc3QgKz0gZF9jZWxs c2l6ZTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYnVmOworfQorRVhQT1JUX1NZTUJP TF9HUEwoZm9udF9kYXRhX3JvdGF0ZSk7Ci0tIAoyLjUzLjAKCg==