From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 157DC42509 for ; Thu, 23 Jun 2022 12:27:16 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8F1DC68B6F6; Thu, 23 Jun 2022 15:26:50 +0300 (EEST) Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9AAF168B6DD for ; Thu, 23 Jun 2022 15:26:42 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 440BE24017E for ; Thu, 23 Jun 2022 14:26:42 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id 8kdGKq_3-Rjk for ; Thu, 23 Jun 2022 14:26:40 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id C7C0B24017C for ; Thu, 23 Jun 2022 14:26:39 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id A70FE3A073B; Thu, 23 Jun 2022 14:26:39 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Jun 2022 14:26:35 +0200 Message-Id: <20220623122636.24732-3-anton@khirnov.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220623122636.24732-1-anton@khirnov.net> References: <20220623122636.24732-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] lavc/bitstream: templatize for BE/LE X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: QWxsb3dzIHVzaW5nIGJvdGggQkUgYW5kIExFIGJpdHN0cmVhbSByZWFkZXJzIGluIHRoZSBzYW1l IGZpbGUuCi0tLQogbGliYXZjb2RlYy9iaXRzdHJlYW0uaCAgICAgICAgICB8IDM3OSArKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYmF2Y29kZWMvYml0c3RyZWFtX3RlbXBsYXRlLmgg fCAzOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL3JlZi9mYXRlL3Nv dXJjZSAgICAgICAgICAgfCAgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCA0MTUgaW5zZXJ0aW9ucygr KSwgMzU3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvYml0c3Ry ZWFtX3RlbXBsYXRlLmgKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2JpdHN0cmVhbS5oIGIvbGli YXZjb2RlYy9iaXRzdHJlYW0uaAppbmRleCA4YTcxMGJjZWNjLi4zZmE2MzY5NWQzIDEwMDY0NAot LS0gYS9saWJhdmNvZGVjL2JpdHN0cmVhbS5oCisrKyBiL2xpYmF2Y29kZWMvYml0c3RyZWFtLmgK QEAgLTQ5LDg4ICs0OSw2IEBAIHR5cGVkZWYgc3RydWN0IEJpdHN0cmVhbUNvbnRleHQgewogICAg IHVuc2lnbmVkIHNpemVfaW5fYml0czsKIH0gQml0c3RyZWFtQ29udGV4dDsKIAotc3RhdGljIGlu bGluZSB2b2lkIHJlZmlsbF82NChCaXRzdHJlYW1Db250ZXh0ICpiYykKLXsKLSNpZiAhVU5DSEVD S0VEX0JJVFNUUkVBTV9SRUFERVIKLSAgICBpZiAoYmMtPnB0ciA+PSBiYy0+YnVmZmVyX2VuZCkK LSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCi0g ICAgYmMtPmJpdHMgICAgICAgPSBBVl9STDY0KGJjLT5wdHIpOwotI2Vsc2UKLSAgICBiYy0+Yml0 cyAgICAgICA9IEFWX1JCNjQoYmMtPnB0cik7Ci0jZW5kaWYKLSAgICBiYy0+cHRyICAgICAgICs9 IDg7Ci0gICAgYmMtPmJpdHNfbGVmdCAgPSA2NDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJl ZmlsbF8zMihCaXRzdHJlYW1Db250ZXh0ICpiYykKLXsKLSNpZiAhVU5DSEVDS0VEX0JJVFNUUkVB TV9SRUFERVIKLSAgICBpZiAoYmMtPnB0ciA+PSBiYy0+YnVmZmVyX2VuZCkKLSAgICAgICAgcmV0 dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCi0gICAgYmMtPmJpdHMg ICAgICAgPSAodWludDY0X3QpQVZfUkwzMihiYy0+cHRyKSA8PCBiYy0+Yml0c19sZWZ0IHwgYmMt PmJpdHM7Ci0jZWxzZQotICAgIGJjLT5iaXRzICAgICAgID0gYmMtPmJpdHMgfCAodWludDY0X3Qp QVZfUkIzMihiYy0+cHRyKSA8PCAoMzIgLSBiYy0+Yml0c19sZWZ0KTsKLSNlbmRpZgotICAgIGJj LT5wdHIgICAgICAgKz0gNDsKLSAgICBiYy0+Yml0c19sZWZ0ICs9IDMyOwotfQotCi0vKioKLSAq IEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KLSAqIEBwYXJhbSBidWZmZXIgYml0c3RyZWFt IGJ1ZmZlciwgbXVzdCBiZSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFIGJ5dGVzCi0gKiAg ICAgICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJpdHMgYmVjYXVzZSBzb21lIG9wdGlt aXplZCBiaXRzdHJlYW0KLSAqICAgICAgICByZWFkZXJzIHJlYWQgMzIgb3IgNjQgYml0cyBhdCBv bmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAotICogQHBhcmFtIGJpdF9zaXplIHRoZSBz aXplIG9mIHRoZSBidWZmZXIgaW4gYml0cwotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEFWRVJS T1JfSU5WQUxJRERBVEEgaWYgdGhlIGJ1ZmZlcl9zaXplIHdvdWxkIG92ZXJmbG93LgotICovCi1z dGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1faW5pdChCaXRzdHJlYW1Db250ZXh0ICpiYywgY29u c3QgdWludDhfdCAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IGJpdF9zaXplKQotewotICAgIHVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsKLQot ICAgIGlmIChiaXRfc2l6ZSA+IElOVF9NQVggLSA3IHx8ICFidWZmZXIpIHsKLSAgICAgICAgYmMt PmJ1ZmZlciAgICA9IE5VTEw7Ci0gICAgICAgIGJjLT5wdHIgICAgICAgPSBOVUxMOwotICAgICAg ICBiYy0+Yml0c19sZWZ0ID0gMDsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Ci0gICAgfQotCi0gICAgYnVmZmVyX3NpemUgPSAoYml0X3NpemUgKyA3KSA+PiAzOwotCi0gICAg YmMtPmJ1ZmZlciAgICAgICA9IGJ1ZmZlcjsKLSAgICBiYy0+YnVmZmVyX2VuZCAgID0gYnVmZmVy ICsgYnVmZmVyX3NpemU7Ci0gICAgYmMtPnB0ciAgICAgICAgICA9IGJjLT5idWZmZXI7Ci0gICAg YmMtPnNpemVfaW5fYml0cyA9IGJpdF9zaXplOwotICAgIGJjLT5iaXRzX2xlZnQgICAgPSAwOwot ICAgIGJjLT5iaXRzICAgICAgICAgPSAwOwotCi0gICAgcmVmaWxsXzY0KGJjKTsKLQotICAgIHJl dHVybiAwOwotfQotCi0vKioKLSAqIEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KLSAqIEBw YXJhbSBidWZmZXIgYml0c3RyZWFtIGJ1ZmZlciwgbXVzdCBiZSBBVl9JTlBVVF9CVUZGRVJfUEFE RElOR19TSVpFIGJ5dGVzCi0gKiAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJp dHMgYmVjYXVzZSBzb21lIG9wdGltaXplZCBiaXRzdHJlYW0KLSAqICAgICAgICByZWFkZXJzIHJl YWQgMzIgb3IgNjQgYml0cyBhdCBvbmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAotICog QHBhcmFtIGJ5dGVfc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzCi0gKiBAcmV0 dXJuIDAgb24gc3VjY2VzcywgQVZFUlJPUl9JTlZBTElEREFUQSBpZiB0aGUgYnVmZmVyX3NpemUg d291bGQgb3ZlcmZsb3cKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYml0c3RyZWFtX2luaXQ4KEJp dHN0cmVhbUNvbnRleHQgKmJjLCBjb25zdCB1aW50OF90ICpidWZmZXIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVfc2l6ZSkKLXsKLSAgICBpZiAo Ynl0ZV9zaXplID4gSU5UX01BWCAvIDgpCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwotICAgIHJldHVybiBiaXRzdHJlYW1faW5pdChiYywgYnVmZmVyLCBieXRlX3NpemUgKiA4 KTsKLX0KLQogLyoqCiAgKiBSZXR1cm4gbnVtYmVyIG9mIGJpdHMgYWxyZWFkeSByZWFkLgogICov CkBAIC0xNTUsMjM1ICs3Myw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV9iaXRzX2xl ZnQoY29uc3QgQml0c3RyZWFtQ29udGV4dCAqYmMpCiAgICAgcmV0dXJuIChiYy0+YnVmZmVyIC0g YmMtPnB0cikgKiA4ICsgYmMtPnNpemVfaW5fYml0cyArIGJjLT5iaXRzX2xlZnQ7CiB9CiAKLXN0 YXRpYyBpbmxpbmUgdWludDY0X3QgZ2V0X3ZhbChCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWdu ZWQgaW50IG4pCi17Ci0gICAgdWludDY0X3QgcmV0OwotCi0jaWZkZWYgQklUU1RSRUFNX1JFQURF Ul9MRQotICAgIHJldCA9IGJjLT5iaXRzICYgKChVSU5UNjRfQygxKSA8PCBuKSAtIDEpOwotICAg IGJjLT5iaXRzID4+PSBuOwotI2Vsc2UKLSAgICByZXQgPSBiYy0+Yml0cyA+PiAoNjQgLSBuKTsK LSAgICBiYy0+Yml0cyA8PD0gbjsKLSNlbmRpZgotICAgIGJjLT5iaXRzX2xlZnQgLT0gbjsKLQot ICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogUmV0dXJuIG9uZSBiaXQgZnJvbSB0aGUgYnVm ZmVyLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiaXRzdHJlYW1fcmVhZF9iaXQo Qml0c3RyZWFtQ29udGV4dCAqYmMpCi17Ci0gICAgaWYgKCFiYy0+Yml0c19sZWZ0KQotICAgICAg ICByZWZpbGxfNjQoYmMpOwotCi0gICAgcmV0dXJuIGdldF92YWwoYmMsIDEpOwotfQotCi0vKioK LSAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUgMC02 MyByYW5nZS4KLSAqLwotc3RhdGljIGlubGluZSB1aW50NjRfdCBiaXRzdHJlYW1fcmVhZF82MyhC aXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCi17Ci0gICAgdWludDY0X3QgcmV0 ID0gMDsKLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCi0gICAgdWludDY0X3QgbGVmdCA9IDA7 Ci0jZW5kaWYKLQotICAgIGlmICghbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobiA+ IGJjLT5iaXRzX2xlZnQpIHsKLSAgICAgICAgbiAtPSBiYy0+Yml0c19sZWZ0OwotI2lmZGVmIEJJ VFNUUkVBTV9SRUFERVJfTEUKLSAgICAgICAgbGVmdCA9IGJjLT5iaXRzX2xlZnQ7Ci0jZW5kaWYK LSAgICAgICAgcmV0ID0gZ2V0X3ZhbChiYywgYmMtPmJpdHNfbGVmdCk7Ci0gICAgICAgIHJlZmls bF82NChiYyk7Ci0gICAgfQotCi0jaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQotICAgIHJldCA9 IGdldF92YWwoYmMsIG4pIDw8IGxlZnQgfCByZXQ7Ci0jZWxzZQotICAgIHJldCA9IGdldF92YWwo YmMsIG4pIHwgcmV0IDw8IG47Ci0jZW5kaWYKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qKgot ICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIsIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMy ICByYW5nZS4KLSAqLwotc3RhdGljIGlubGluZSB1aW50MzJfdCBiaXRzdHJlYW1fcmVhZChCaXRz dHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCi17Ci0gICAgaWYgKCFuKQotICAgICAg ICByZXR1cm4gMDsKLQotICAgIGlmIChuID4gYmMtPmJpdHNfbGVmdCkgewotICAgICAgICByZWZp bGxfMzIoYmMpOwotICAgICAgICBpZiAoYmMtPmJpdHNfbGVmdCA8IDMyKQotICAgICAgICAgICAg YmMtPmJpdHNfbGVmdCA9IG47Ci0gICAgfQotCi0gICAgcmV0dXJuIGdldF92YWwoYmMsIG4pOwot fQotCi0vKioKLSAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyIGFzIGEgc2lnbmVkIGlu dGVnZXIuCi0gKiBuIGhhcyB0byBiZSBpbiB0aGUgMC0zMiByYW5nZS4KLSAqLwotc3RhdGljIGlu bGluZSBpbnQzMl90IGJpdHN0cmVhbV9yZWFkX3NpZ25lZChCaXRzdHJlYW1Db250ZXh0ICpiYywg dW5zaWduZWQgaW50IG4pCi17Ci0gICAgcmV0dXJuIHNpZ25fZXh0ZW5kKGJpdHN0cmVhbV9yZWFk KGJjLCBuKSwgbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNob3dfdmFsKEJp dHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKLXsKLSNpZmRlZiBCSVRTVFJFQU1f UkVBREVSX0xFCi0gICAgcmV0dXJuIGJjLT5iaXRzICYgKChVSU5UNjRfQygxKSA8PCBuKSAtIDEp OwotI2Vsc2UKLSAgICByZXR1cm4gYmMtPmJpdHMgPj4gKDY0IC0gbik7Ci0jZW5kaWYKLX0KLQot LyoqCi0gKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciBidXQgZG8gbm90IGNoYW5nZSB0 aGUgYnVmZmVyIHN0YXRlLgotICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2UuCi0gKi8K LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJpdHN0cmVhbV9wZWVrKEJpdHN0cmVhbUNvbnRl eHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKLXsKLSAgICBpZiAobiA+IGJjLT5iaXRzX2xlZnQpCi0g ICAgICAgIHJlZmlsbF8zMihiYyk7Ci0KLSAgICByZXR1cm4gc2hvd192YWwoYmMsIG4pOwotfQot Ci0vKioKLSAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyIGFzIGEgc2lnbmVkIGludGVn ZXIsCi0gKiBkbyBub3QgY2hhbmdlIHRoZSBidWZmZXIgc3RhdGUuCi0gKiBuIGhhcyB0byBiZSBp biB0aGUgMC0zMiByYW5nZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYml0c3RyZWFtX3BlZWtf c2lnbmVkKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKLXsKLSAgICByZXR1 cm4gc2lnbl9leHRlbmQoYml0c3RyZWFtX3BlZWsoYmMsIG4pLCBuKTsKLX0KLQotc3RhdGljIGlu bGluZSB2b2lkIHNraXBfcmVtYWluaW5nKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBp bnQgbikKLXsKLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCi0gICAgYmMtPmJpdHMgPj49IG47 Ci0jZWxzZQotICAgIGJjLT5iaXRzIDw8PSBuOwotI2VuZGlmCi0gICAgYmMtPmJpdHNfbGVmdCAt PSBuOwotfQotCi0vKioKLSAqIFNraXAgbiBiaXRzIGluIHRoZSBidWZmZXIuCi0gKi8KLXN0YXRp YyBpbmxpbmUgdm9pZCBiaXRzdHJlYW1fc2tpcChCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWdu ZWQgaW50IG4pCi17Ci0gICAgaWYgKG4gPCBiYy0+Yml0c19sZWZ0KQotICAgICAgICBza2lwX3Jl bWFpbmluZyhiYywgbik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG4gLT0gYmMtPmJpdHNfbGVmdDsK LSAgICAgICAgYmMtPmJpdHMgICAgICA9IDA7Ci0gICAgICAgIGJjLT5iaXRzX2xlZnQgPSAwOwot Ci0gICAgICAgIGlmIChuID49IDY0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2tpcCA9 IG4gLyA4OwotCi0gICAgICAgICAgICBuIC09IHNraXAgKiA4OwotICAgICAgICAgICAgYmMtPnB0 ciArPSBza2lwOwotICAgICAgICB9Ci0gICAgICAgIHJlZmlsbF82NChiYyk7Ci0gICAgICAgIGlm IChuKQotICAgICAgICAgICAgc2tpcF9yZW1haW5pbmcoYmMsIG4pOwotICAgIH0KLX0KLQotLyoq Ci0gKiBTZWVrIHRvIHRoZSBnaXZlbiBiaXQgcG9zaXRpb24uCi0gKi8KLXN0YXRpYyBpbmxpbmUg dm9pZCBiaXRzdHJlYW1fc2VlayhCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgcG9zKQot ewotICAgIGJjLT5wdHIgICAgICAgPSBiYy0+YnVmZmVyOwotICAgIGJjLT5iaXRzICAgICAgPSAw OwotICAgIGJjLT5iaXRzX2xlZnQgPSAwOwotCi0gICAgYml0c3RyZWFtX3NraXAoYmMsIHBvcyk7 Ci19Ci0KLS8qKgotICogU2tpcCBiaXRzIHRvIGEgYnl0ZSBib3VuZGFyeS4KLSAqLwotc3RhdGlj IGlubGluZSBjb25zdCB1aW50OF90ICpiaXRzdHJlYW1fYWxpZ24oQml0c3RyZWFtQ29udGV4dCAq YmMpCi17Ci0gICAgdW5zaWduZWQgaW50IG4gPSAtYml0c3RyZWFtX3RlbGwoYmMpICYgNzsKLSAg ICBpZiAobikKLSAgICAgICAgYml0c3RyZWFtX3NraXAoYmMsIG4pOwotICAgIHJldHVybiBiYy0+ YnVmZmVyICsgKGJpdHN0cmVhbV90ZWxsKGJjKSA+PiAzKTsKLX0KLQotLyoqCi0gKiBSZWFkIE1Q RUctMSBkYy1zdHlsZSBWTEMgKHNpZ24gYml0ICsgbWFudGlzc2Egd2l0aCBubyBNU0IpLgotICog SWYgTVNCIG5vdCBzZXQgaXQgaXMgbmVnYXRpdmUuCi0gKiBAcGFyYW0gbiBsZW5ndGggaW4gYml0 cwotICovCi1zdGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1fcmVhZF94Yml0cyhCaXRzdHJlYW1D b250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCi17Ci0gICAgaW50MzJfdCBjYWNoZSA9IGJpdHN0 cmVhbV9wZWVrKGJjLCAzMik7Ci0gICAgaW50IHNpZ24gPSB+Y2FjaGUgPj4gMzE7Ci0gICAgc2tp cF9yZW1haW5pbmcoYmMsIG4pOwotCi0gICAgcmV0dXJuICgoKCh1aW50MzJfdCkoc2lnbiBeIGNh Y2hlKSkgPj4gKDMyIC0gbikpIF4gc2lnbikgLSBzaWduOwotfQotCi0vKioKLSAqIFJldHVybiBk ZWNvZGVkIHRydW5jYXRlZCB1bmFyeSBjb2RlIGZvciB0aGUgdmFsdWVzIDAsIDEsIDIuCi0gKi8K LXN0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV9kZWNvZGUwMTIoQml0c3RyZWFtQ29udGV4dCAq YmMpCi17Ci0gICAgaWYgKCFiaXRzdHJlYW1fcmVhZF9iaXQoYmMpKQotICAgICAgICByZXR1cm4g MDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBiaXRzdHJlYW1fcmVhZF9iaXQoYmMpICsgMTsK LX0KLQotLyoqCi0gKiBSZXR1cm4gZGVjb2RlZCB0cnVuY2F0ZWQgdW5hcnkgY29kZSBmb3IgdGhl IHZhbHVlcyAyLCAxLCAwLgotICovCi1zdGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1fZGVjb2Rl MjEwKEJpdHN0cmVhbUNvbnRleHQgKmJjKQotewotICAgIGlmIChiaXRzdHJlYW1fcmVhZF9iaXQo YmMpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAyIC0gYml0 c3RyZWFtX3JlYWRfYml0KGJjKTsKLX0KLQotLyogUmVhZCBzaWduIGJpdCBhbmQgZmxpcCB0aGUg c2lnbiBvZiB0aGUgcHJvdmlkZWQgdmFsdWUgYWNjb3JkaW5nbHkuICovCi1zdGF0aWMgaW5saW5l IGludCBiaXRzdHJlYW1fYXBwbHlfc2lnbihCaXRzdHJlYW1Db250ZXh0ICpiYywgaW50IHZhbCkK LXsKLSAgICBpbnQgc2lnbiA9IGJpdHN0cmVhbV9yZWFkX3NpZ25lZChiYywgMSk7Ci0gICAgcmV0 dXJuICh2YWwgXiBzaWduKSAtIHNpZ247Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVh bV9za2lwXzFzdG9wXzhkYXRhKEJpdHN0cmVhbUNvbnRleHQgKnMpCi17Ci0gICAgaWYgKGJpdHN0 cmVhbV9iaXRzX2xlZnQocykgPD0gMCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Ci0KLSAgICB3aGlsZSAoYml0c3RyZWFtX3JlYWQocywgMSkpIHsKLSAgICAgICAgYml0c3Ry ZWFtX3NraXAocywgOCk7Ci0gICAgICAgIGlmIChiaXRzdHJlYW1fYml0c19sZWZ0KHMpIDw9IDAp Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB9Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQogLyogVW53aW5kIHRoZSBjYWNoZSBzbyBhIHJlZmlsbF8zMiBjYW4gZmls bCBpdCBhZ2Fpbi4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBiaXRzdHJlYW1fdW53aW5kKEJpdHN0 cmVhbUNvbnRleHQgKmJjKQogewpAQCAtNDEyLDUyICsxMDEsMjggQEAgc3RhdGljIGlubGluZSB2 b2lkIGJpdHN0cmVhbV91bmdldChCaXRzdHJlYW1Db250ZXh0ICpiYywgdWludDY0X3QgdmFsdWUs CiAgICAgYmMtPmJpdHNfbGVmdCArPSBhbW91bnQ7CiB9CiAKLS8qKgotICogUmV0dXJuIHRoZSBM VVQgZWxlbWVudCBmb3IgdGhlIGdpdmVuIGJpdHN0cmVhbSBjb25maWd1cmF0aW9uLgotICovCi1z dGF0aWMgaW5saW5lIGludCBzZXRfaWR4KEJpdHN0cmVhbUNvbnRleHQgKmJjLCBpbnQgY29kZSwg aW50ICpuLCBpbnQgKm5iX2JpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZM Q0VsZW0gKnRhYmxlKQotewotICAgIHVuc2lnbmVkIGlkeDsKLQotICAgICpuYl9iaXRzID0gLSpu OwotICAgIGlkeCA9IGJpdHN0cmVhbV9wZWVrKGJjLCAqbmJfYml0cykgKyBjb2RlOwotICAgICpu ID0gdGFibGVbaWR4XS5sZW47Ci0KLSAgICByZXR1cm4gdGFibGVbaWR4XS5zeW07Ci19Ci0KLS8q KgotICogUGFyc2UgYSB2bGMgY29kZS4KLSAqIEBwYXJhbSBiaXRzIGlzIHRoZSBudW1iZXIgb2Yg Yml0cyB3aGljaCB3aWxsIGJlIHJlYWQgYXQgb25jZSwgbXVzdCBiZQotICogICAgICAgICAgICAg aWRlbnRpY2FsIHRvIG5iX2JpdHMgaW4gaW5pdF92bGMoKQotICogQHBhcmFtIG1heF9kZXB0aCBp cyB0aGUgbnVtYmVyIG9mIHRpbWVzIGJpdHMgYml0cyBtdXN0IGJlIHJlYWQgdG8gY29tcGxldGVs eQotICogICAgICAgICAgICAgICAgICByZWFkIHRoZSBsb25nZXN0IHZsYyBjb2RlCi0gKiAgICAg ICAgICAgICAgICAgID0gKG1heF92bGNfbGVuZ3RoICsgYml0cyAtIDEpIC8gYml0cwotICogSWYg dGhlIHZsYyBjb2RlIGlzIGludmFsaWQgYW5kIG1heF9kZXB0aD0xLCB0aGVuIG5vIGJpdHMgd2ls bCBiZSByZW1vdmVkLgotICogSWYgdGhlIHZsYyBjb2RlIGlzIGludmFsaWQgYW5kIG1heF9kZXB0 aD4xLCB0aGVuIHRoZSBudW1iZXIgb2YgYml0cyByZW1vdmVkCi0gKiBpcyB1bmRlZmluZWQuCi0g Ki8KLXN0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV9yZWFkX3ZsYyhCaXRzdHJlYW1Db250ZXh0 ICpiYywgY29uc3QgVkxDRWxlbSAqdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGJpdHMsIGludCBtYXhfZGVwdGgpCi17Ci0gICAgaW50IG5iX2JpdHM7Ci0g ICAgdW5zaWduZWQgaWR4ID0gYml0c3RyZWFtX3BlZWsoYmMsIGJpdHMpOwotICAgIGludCBjb2Rl ICAgICA9IHRhYmxlW2lkeF0uc3ltOwotICAgIGludCBuICAgICAgICA9IHRhYmxlW2lkeF0ubGVu OwotCi0gICAgaWYgKG1heF9kZXB0aCA+IDEgJiYgbiA8IDApIHsKLSAgICAgICAgc2tpcF9yZW1h aW5pbmcoYmMsIGJpdHMpOwotICAgICAgICBjb2RlID0gc2V0X2lkeChiYywgY29kZSwgJm4sICZu Yl9iaXRzLCB0YWJsZSk7Ci0gICAgICAgIGlmIChtYXhfZGVwdGggPiAyICYmIG4gPCAwKSB7Ci0g ICAgICAgICAgICBza2lwX3JlbWFpbmluZyhiYywgbmJfYml0cyk7Ci0gICAgICAgICAgICBjb2Rl ID0gc2V0X2lkeChiYywgY29kZSwgJm4sICZuYl9iaXRzLCB0YWJsZSk7Ci0gICAgICAgIH0KLSAg ICB9Ci0gICAgc2tpcF9yZW1haW5pbmcoYmMsIG4pOwotCi0gICAgcmV0dXJuIGNvZGU7Ci19Cisj ZGVmaW5lIEJJVFNUUkVBTV9MRQorI2luY2x1ZGUgImJpdHN0cmVhbV90ZW1wbGF0ZS5oIgorCisj dW5kZWYgQklUU1RSRUFNX0xFCisjaW5jbHVkZSAiYml0c3RyZWFtX3RlbXBsYXRlLmgiCisKKyNk ZWZpbmUgYml0c3RyZWFtX2luaXQgICAgICAgICAgYml0c3RyZWFtX2luaXRfYmUKKyNkZWZpbmUg Yml0c3RyZWFtX2luaXQ4ICAgICAgICAgYml0c3RyZWFtX2luaXQ4X2JlCisjZGVmaW5lIGJpdHN0 cmVhbV9yZWFkX2JpdCAgICAgIGJpdHN0cmVhbV9yZWFkX2JpdF9iZQorI2RlZmluZSBiaXRzdHJl YW1fcmVhZF82MyAgICAgICBiaXRzdHJlYW1fcmVhZF82M19iZQorI2RlZmluZSBiaXRzdHJlYW1f cmVhZCAgICAgICAgICBiaXRzdHJlYW1fcmVhZF9iZQorI2RlZmluZSBiaXRzdHJlYW1fcmVhZF9z aWduZWQgICBiaXRzdHJlYW1fcmVhZF9zaWduZWRfYmUKKyNkZWZpbmUgYml0c3RyZWFtX3BlZWsg ICAgICAgICAgYml0c3RyZWFtX3BlZWtfYmUKKyNkZWZpbmUgYml0c3RyZWFtX3BlZWtfc2lnbmVk ICAgYml0c3RyZWFtX3BlZWtfc2lnbmVkX2JlCisjZGVmaW5lIGJpdHN0cmVhbV9za2lwICAgICAg ICAgIGJpdHN0cmVhbV9za2lwX2JlCisjZGVmaW5lIGJpdHN0cmVhbV9zZWVrICAgICAgICAgIGJp dHN0cmVhbV9zZWVrX2JlCisjZGVmaW5lIGJpdHN0cmVhbV9hbGlnbiAgICAgICAgIGJpdHN0cmVh bV9hbGlnbl9iZQorI2RlZmluZSBiaXRzdHJlYW1fcmVhZF94Yml0cyAgICBiaXRzdHJlYW1fcmVh ZF94Yml0c19iZQorI2RlZmluZSBiaXRzdHJlYW1fZGVjb2RlMDEyICAgICBiaXRzdHJlYW1fZGVj b2RlMDEyX2JlCisjZGVmaW5lIGJpdHN0cmVhbV9kZWNvZGUyMTAgICAgIGJpdHN0cmVhbV9kZWNv ZGUyMTBfYmUKKyNkZWZpbmUgYml0c3RyZWFtX2FwcGx5X3NpZ24gICAgYml0c3RyZWFtX2FwcGx5 X3NpZ25fYmUKKyNkZWZpbmUgYml0c3RyZWFtX3JlYWRfdmxjICAgICAgYml0c3RyZWFtX3JlYWRf dmxjX2JlCiAKICNkZWZpbmUgQklUU1RSRUFNX1JMX1ZMQyhsZXZlbCwgcnVuLCBiYywgdGFibGUs IGJpdHMsIG1heF9kZXB0aCkgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2Jp dHN0cmVhbV90ZW1wbGF0ZS5oIGIvbGliYXZjb2RlYy9iaXRzdHJlYW1fdGVtcGxhdGUuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi42YjMxYmM1M2EyCi0tLSAvZGV2L251 bGwKKysrIGIvbGliYXZjb2RlYy9iaXRzdHJlYW1fdGVtcGxhdGUuaApAQCAtMCwwICsxLDM5MiBA QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNiBBbGV4YW5kcmEgSMOhamtvdsOhCisgKgorICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZmRlZiBCSVRTVFJFQU1fTEUKKyMg ICBkZWZpbmUgQlNfU1VGRklYIGxlCisjZWxzZQorIyAgIGRlZmluZSBCU19TVUZGSVggYmUKKyNl bmRpZgorCisjZGVmaW5lIEJTX0pPSU4oeCwgeSkgeCAjIyBfICMjIHkKKyNkZWZpbmUgQlNfRlVO QzIoeCwgeSkgQlNfSk9JTih4LCB5KQorI2RlZmluZSBCU19GVU5DKHgpIEJTX0ZVTkMyKHgsIEJT X1NVRkZJWCkKKworc3RhdGljIGlubGluZSB2b2lkIEJTX0ZVTkMocmVmaWxsXzY0KShCaXRzdHJl YW1Db250ZXh0ICpiYykKK3sKKyNpZiAhVU5DSEVDS0VEX0JJVFNUUkVBTV9SRUFERVIKKyAgICBp ZiAoYmMtPnB0ciA+PSBiYy0+YnVmZmVyX2VuZCkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisK KyNpZmRlZiBCSVRTVFJFQU1fTEUKKyAgICBiYy0+Yml0cyAgICAgICA9IEFWX1JMNjQoYmMtPnB0 cik7CisjZWxzZQorICAgIGJjLT5iaXRzICAgICAgID0gQVZfUkI2NChiYy0+cHRyKTsKKyNlbmRp ZgorICAgIGJjLT5wdHIgICAgICAgKz0gODsKKyAgICBiYy0+Yml0c19sZWZ0ICA9IDY0OworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgQlNfRlVOQyhyZWZpbGxfMzIpKEJpdHN0cmVhbUNvbnRleHQg KmJjKQoreworI2lmICFVTkNIRUNLRURfQklUU1RSRUFNX1JFQURFUgorICAgIGlmIChiYy0+cHRy ID49IGJjLT5idWZmZXJfZW5kKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKworI2lmZGVmIEJJ VFNUUkVBTV9MRQorICAgIGJjLT5iaXRzICAgICAgID0gKHVpbnQ2NF90KUFWX1JMMzIoYmMtPnB0 cikgPDwgYmMtPmJpdHNfbGVmdCB8IGJjLT5iaXRzOworI2Vsc2UKKyAgICBiYy0+Yml0cyAgICAg ICA9IGJjLT5iaXRzIHwgKHVpbnQ2NF90KUFWX1JCMzIoYmMtPnB0cikgPDwgKDMyIC0gYmMtPmJp dHNfbGVmdCk7CisjZW5kaWYKKyAgICBiYy0+cHRyICAgICAgICs9IDQ7CisgICAgYmMtPmJpdHNf bGVmdCArPSAzMjsKK30KKworLyoqCisgKiBJbml0aWFsaXplIEJpdHN0cmVhbUNvbnRleHQuCisg KiBAcGFyYW0gYnVmZmVyIGJpdHN0cmVhbSBidWZmZXIsIG11c3QgYmUgQVZfSU5QVVRfQlVGRkVS X1BBRERJTkdfU0laRSBieXRlcworICogICAgICAgIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgcmVh ZCBiaXRzIGJlY2F1c2Ugc29tZSBvcHRpbWl6ZWQgYml0c3RyZWFtCisgKiAgICAgICAgcmVhZGVy cyByZWFkIDMyIG9yIDY0IGJpdHMgYXQgb25jZSBhbmQgY291bGQgcmVhZCBvdmVyIHRoZSBlbmQK KyAqIEBwYXJhbSBiaXRfc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJpdHMKKyAqIEBy ZXR1cm4gMCBvbiBzdWNjZXNzLCBBVkVSUk9SX0lOVkFMSUREQVRBIGlmIHRoZSBidWZmZXJfc2l6 ZSB3b3VsZCBvdmVyZmxvdy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgQlNfRlVOQyhiaXRzdHJl YW1faW5pdCkoQml0c3RyZWFtQ29udGV4dCAqYmMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaXRf c2l6ZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYnVmZmVyX3NpemU7CisKKyAgICBpZiAoYml0X3Np emUgPiBJTlRfTUFYIC0gNyB8fCAhYnVmZmVyKSB7CisgICAgICAgIGJjLT5idWZmZXIgICAgPSBO VUxMOworICAgICAgICBiYy0+cHRyICAgICAgID0gTlVMTDsKKyAgICAgICAgYmMtPmJpdHNfbGVm dCA9IDA7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KKworICAg IGJ1ZmZlcl9zaXplID0gKGJpdF9zaXplICsgNykgPj4gMzsKKworICAgIGJjLT5idWZmZXIgICAg ICAgPSBidWZmZXI7CisgICAgYmMtPmJ1ZmZlcl9lbmQgICA9IGJ1ZmZlciArIGJ1ZmZlcl9zaXpl OworICAgIGJjLT5wdHIgICAgICAgICAgPSBiYy0+YnVmZmVyOworICAgIGJjLT5zaXplX2luX2Jp dHMgPSBiaXRfc2l6ZTsKKyAgICBiYy0+Yml0c19sZWZ0ICAgID0gMDsKKyAgICBiYy0+Yml0cyAg ICAgICAgID0gMDsKKworICAgIEJTX0ZVTkMocmVmaWxsXzY0KShiYyk7CisKKyAgICByZXR1cm4g MDsKK30KKworLyoqCisgKiBJbml0aWFsaXplIEJpdHN0cmVhbUNvbnRleHQuCisgKiBAcGFyYW0g YnVmZmVyIGJpdHN0cmVhbSBidWZmZXIsIG11c3QgYmUgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdf U0laRSBieXRlcworICogICAgICAgIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgcmVhZCBiaXRzIGJl Y2F1c2Ugc29tZSBvcHRpbWl6ZWQgYml0c3RyZWFtCisgKiAgICAgICAgcmVhZGVycyByZWFkIDMy IG9yIDY0IGJpdHMgYXQgb25jZSBhbmQgY291bGQgcmVhZCBvdmVyIHRoZSBlbmQKKyAqIEBwYXJh bSBieXRlX3NpemUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBieXRlcworICogQHJldHVybiAw IG9uIHN1Y2Nlc3MsIEFWRVJST1JfSU5WQUxJRERBVEEgaWYgdGhlIGJ1ZmZlcl9zaXplIHdvdWxk IG92ZXJmbG93CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoYml0c3RyZWFtX2luaXQ4 KShCaXRzdHJlYW1Db250ZXh0ICpiYywgY29uc3QgdWludDhfdCAqYnVmZmVyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlX3NpemUp Cit7CisgICAgaWYgKGJ5dGVfc2l6ZSA+IElOVF9NQVggLyA4KQorICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICByZXR1cm4gQlNfRlVOQyhiaXRzdHJlYW1faW5pdCkoYmMs IGJ1ZmZlciwgYnl0ZV9zaXplICogOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgQlNf RlVOQyhnZXRfdmFsKShCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCit7Cisg ICAgdWludDY0X3QgcmV0OworCisjaWZkZWYgQklUU1RSRUFNX0xFCisgICAgcmV0ID0gYmMtPmJp dHMgJiAoKFVJTlQ2NF9DKDEpIDw8IG4pIC0gMSk7CisgICAgYmMtPmJpdHMgPj49IG47CisjZWxz ZQorICAgIHJldCA9IGJjLT5iaXRzID4+ICg2NCAtIG4pOworICAgIGJjLT5iaXRzIDw8PSBuOwor I2VuZGlmCisgICAgYmMtPmJpdHNfbGVmdCAtPSBuOworCisgICAgcmV0dXJuIHJldDsKK30KKwor LyoqCisgKiBSZXR1cm4gb25lIGJpdCBmcm9tIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxp bmUgdW5zaWduZWQgaW50IEJTX0ZVTkMoYml0c3RyZWFtX3JlYWRfYml0KShCaXRzdHJlYW1Db250 ZXh0ICpiYykKK3sKKyAgICBpZiAoIWJjLT5iaXRzX2xlZnQpCisgICAgICAgIEJTX0ZVTkMocmVm aWxsXzY0KShiYyk7CisKKyAgICByZXR1cm4gQlNfRlVOQyhnZXRfdmFsKShiYywgMSk7Cit9CisK Ky8qKgorICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIsIG4gaGFzIHRvIGJlIGluIHRo ZSAwLTYzIHJhbmdlLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IEJTX0ZVTkMoYml0c3Ry ZWFtX3JlYWRfNjMpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAg ICB1aW50NjRfdCByZXQgPSAwOworI2lmZGVmIEJJVFNUUkVBTV9MRQorICAgIHVpbnQ2NF90IGxl ZnQgPSAwOworI2VuZGlmCisKKyAgICBpZiAoIW4pCisgICAgICAgIHJldHVybiAwOworCisgICAg aWYgKG4gPiBiYy0+Yml0c19sZWZ0KSB7CisgICAgICAgIG4gLT0gYmMtPmJpdHNfbGVmdDsKKyNp ZmRlZiBCSVRTVFJFQU1fTEUKKyAgICAgICAgbGVmdCA9IGJjLT5iaXRzX2xlZnQ7CisjZW5kaWYK KyAgICAgICAgcmV0ID0gQlNfRlVOQyhnZXRfdmFsKShiYywgYmMtPmJpdHNfbGVmdCk7CisgICAg ICAgIEJTX0ZVTkMocmVmaWxsXzY0KShiYyk7CisgICAgfQorCisjaWZkZWYgQklUU1RSRUFNX0xF CisgICAgcmV0ID0gZ2V0X3ZhbF9sZShiYywgbikgPDwgbGVmdCB8IHJldDsKKyNlbHNlCisgICAg cmV0ID0gZ2V0X3ZhbF9iZShiYywgbikgfCByZXQgPDwgbjsKKyNlbmRpZgorCisgICAgcmV0dXJu IHJldDsKK30KKworLyoqCisgKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciwgbiBoYXMg dG8gYmUgaW4gdGhlIDAtMzIgIHJhbmdlLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IEJT X0ZVTkMoYml0c3RyZWFtX3JlYWQpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQg bikKK3sKKyAgICBpZiAoIW4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG4gPiBiYy0+ Yml0c19sZWZ0KSB7CisgICAgICAgIEJTX0ZVTkMocmVmaWxsXzMyKShiYyk7CisgICAgICAgIGlm IChiYy0+Yml0c19sZWZ0IDwgMzIpCisgICAgICAgICAgICBiYy0+Yml0c19sZWZ0ID0gbjsKKyAg ICB9CisKKyAgICByZXR1cm4gQlNfRlVOQyhnZXRfdmFsKShiYywgbik7Cit9CisKKy8qKgorICog UmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIgYXMgYSBzaWduZWQgaW50ZWdlci4KKyAqIG4g aGFzIHRvIGJlIGluIHRoZSAwLTMyIHJhbmdlLgorICovCitzdGF0aWMgaW5saW5lIGludDMyX3Qg QlNfRlVOQyhiaXRzdHJlYW1fcmVhZF9zaWduZWQpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNp Z25lZCBpbnQgbikKK3sKKyAgICByZXR1cm4gc2lnbl9leHRlbmQoQlNfRlVOQyhiaXRzdHJlYW1f cmVhZCkoYmMsIG4pLCBuKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgQlNfRlVO QyhzaG93X3ZhbCkoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQoreworI2lm ZGVmIEJJVFNUUkVBTV9MRQorICAgIHJldHVybiBiYy0+Yml0cyAmICgoVUlOVDY0X0MoMSkgPDwg bikgLSAxKTsKKyNlbHNlCisgICAgcmV0dXJuIGJjLT5iaXRzID4+ICg2NCAtIG4pOworI2VuZGlm Cit9CisKKy8qKgorICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIgYnV0IGRvIG5vdCBj aGFuZ2UgdGhlIGJ1ZmZlciBzdGF0ZS4KKyAqIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMyIHJhbmdl LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBCU19GVU5DKGJpdHN0cmVhbV9wZWVr KShCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCit7CisgICAgaWYgKG4gPiBi Yy0+Yml0c19sZWZ0KQorICAgICAgICBCU19GVU5DKHJlZmlsbF8zMikoYmMpOworCisgICAgcmV0 dXJuIEJTX0ZVTkMoc2hvd192YWwpKGJjLCBuKTsKK30KKworLyoqCisgKiBSZXR1cm4gbiBiaXRz IGZyb20gdGhlIGJ1ZmZlciBhcyBhIHNpZ25lZCBpbnRlZ2VyLAorICogZG8gbm90IGNoYW5nZSB0 aGUgYnVmZmVyIHN0YXRlLgorICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2UuCisgKi8K K3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoYml0c3RyZWFtX3BlZWtfc2lnbmVkKShCaXRzdHJl YW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCit7CisgICAgcmV0dXJuIHNpZ25fZXh0ZW5k KEJTX0ZVTkMoYml0c3RyZWFtX3BlZWspKGJjLCBuKSwgbik7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBCU19GVU5DKHNraXBfcmVtYWluaW5nKShCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWdu ZWQgaW50IG4pCit7CisjaWZkZWYgQklUU1RSRUFNX0xFCisgICAgYmMtPmJpdHMgPj49IG47Cisj ZWxzZQorICAgIGJjLT5iaXRzIDw8PSBuOworI2VuZGlmCisgICAgYmMtPmJpdHNfbGVmdCAtPSBu OworfQorCisvKioKKyAqIFNraXAgbiBiaXRzIGluIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyBp bmxpbmUgdm9pZCBCU19GVU5DKGJpdHN0cmVhbV9za2lwKShCaXRzdHJlYW1Db250ZXh0ICpiYywg dW5zaWduZWQgaW50IG4pCit7CisgICAgaWYgKG4gPCBiYy0+Yml0c19sZWZ0KQorICAgICAgICBC U19GVU5DKHNraXBfcmVtYWluaW5nKShiYywgbik7CisgICAgZWxzZSB7CisgICAgICAgIG4gLT0g YmMtPmJpdHNfbGVmdDsKKyAgICAgICAgYmMtPmJpdHMgICAgICA9IDA7CisgICAgICAgIGJjLT5i aXRzX2xlZnQgPSAwOworCisgICAgICAgIGlmIChuID49IDY0KSB7CisgICAgICAgICAgICB1bnNp Z25lZCBpbnQgc2tpcCA9IG4gLyA4OworCisgICAgICAgICAgICBuIC09IHNraXAgKiA4OworICAg ICAgICAgICAgYmMtPnB0ciArPSBza2lwOworICAgICAgICB9CisgICAgICAgIEJTX0ZVTkMocmVm aWxsXzY0KShiYyk7CisgICAgICAgIGlmIChuKQorICAgICAgICAgICAgQlNfRlVOQyhza2lwX3Jl bWFpbmluZykoYmMsIG4pOworICAgIH0KK30KKworLyoqCisgKiBTZWVrIHRvIHRoZSBnaXZlbiBi aXQgcG9zaXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBCU19GVU5DKGJpdHN0cmVhbV9z ZWVrKShCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgcG9zKQoreworICAgIGJjLT5wdHIg ICAgICAgPSBiYy0+YnVmZmVyOworICAgIGJjLT5iaXRzICAgICAgPSAwOworICAgIGJjLT5iaXRz X2xlZnQgPSAwOworCisgICAgQlNfRlVOQyhiaXRzdHJlYW1fc2tpcCkoYmMsIHBvcyk7Cit9CisK Ky8qKgorICogU2tpcCBiaXRzIHRvIGEgYnl0ZSBib3VuZGFyeS4KKyAqLworc3RhdGljIGlubGlu ZSBjb25zdCB1aW50OF90ICpCU19GVU5DKGJpdHN0cmVhbV9hbGlnbikoQml0c3RyZWFtQ29udGV4 dCAqYmMpCit7CisgICAgdW5zaWduZWQgaW50IG4gPSAtYml0c3RyZWFtX3RlbGwoYmMpICYgNzsK KyAgICBpZiAobikKKyAgICAgICAgQlNfRlVOQyhiaXRzdHJlYW1fc2tpcCkoYmMsIG4pOworICAg IHJldHVybiBiYy0+YnVmZmVyICsgKGJpdHN0cmVhbV90ZWxsKGJjKSA+PiAzKTsKK30KKworLyoq CisgKiBSZWFkIE1QRUctMSBkYy1zdHlsZSBWTEMgKHNpZ24gYml0ICsgbWFudGlzc2Egd2l0aCBu byBNU0IpLgorICogSWYgTVNCIG5vdCBzZXQgaXQgaXMgbmVnYXRpdmUuCisgKiBAcGFyYW0gbiBs ZW5ndGggaW4gYml0cworICovCitzdGF0aWMgaW5saW5lIGludCBCU19GVU5DKGJpdHN0cmVhbV9y ZWFkX3hiaXRzKShCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCit7CisgICAg aW50MzJfdCBjYWNoZSA9IEJTX0ZVTkMoYml0c3RyZWFtX3BlZWspKGJjLCAzMik7CisgICAgaW50 IHNpZ24gPSB+Y2FjaGUgPj4gMzE7CisgICAgQlNfRlVOQyhza2lwX3JlbWFpbmluZykoYmMsIG4p OworCisgICAgcmV0dXJuICgoKCh1aW50MzJfdCkoc2lnbiBeIGNhY2hlKSkgPj4gKDMyIC0gbikp IF4gc2lnbikgLSBzaWduOworfQorCisvKioKKyAqIFJldHVybiBkZWNvZGVkIHRydW5jYXRlZCB1 bmFyeSBjb2RlIGZvciB0aGUgdmFsdWVzIDAsIDEsIDIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50 IEJTX0ZVTkMoYml0c3RyZWFtX2RlY29kZTAxMikoQml0c3RyZWFtQ29udGV4dCAqYmMpCit7Cisg ICAgaWYgKCFCU19GVU5DKGJpdHN0cmVhbV9yZWFkX2JpdCkoYmMpKQorICAgICAgICByZXR1cm4g MDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBCU19GVU5DKGJpdHN0cmVhbV9yZWFkX2JpdCko YmMpICsgMTsKK30KKworLyoqCisgKiBSZXR1cm4gZGVjb2RlZCB0cnVuY2F0ZWQgdW5hcnkgY29k ZSBmb3IgdGhlIHZhbHVlcyAyLCAxLCAwLgorICovCitzdGF0aWMgaW5saW5lIGludCBCU19GVU5D KGJpdHN0cmVhbV9kZWNvZGUyMTApKEJpdHN0cmVhbUNvbnRleHQgKmJjKQoreworICAgIGlmIChC U19GVU5DKGJpdHN0cmVhbV9yZWFkX2JpdCkoYmMpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBl bHNlCisgICAgICAgIHJldHVybiAyIC0gQlNfRlVOQyhiaXRzdHJlYW1fcmVhZF9iaXQpKGJjKTsK K30KKworLyogUmVhZCBzaWduIGJpdCBhbmQgZmxpcCB0aGUgc2lnbiBvZiB0aGUgcHJvdmlkZWQg dmFsdWUgYWNjb3JkaW5nbHkuICovCitzdGF0aWMgaW5saW5lIGludCBCU19GVU5DKGJpdHN0cmVh bV9hcHBseV9zaWduKShCaXRzdHJlYW1Db250ZXh0ICpiYywgaW50IHZhbCkKK3sKKyAgICBpbnQg c2lnbiA9IEJTX0ZVTkMoYml0c3RyZWFtX3JlYWRfc2lnbmVkKShiYywgMSk7CisgICAgcmV0dXJu ICh2YWwgXiBzaWduKSAtIHNpZ247Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoYml0 c3RyZWFtX3NraXBfMXN0b3BfOGRhdGEpKEJpdHN0cmVhbUNvbnRleHQgKnMpCit7CisgICAgaWYg KGJpdHN0cmVhbV9iaXRzX2xlZnQocykgPD0gMCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisKKyAgICB3aGlsZSAoQlNfRlVOQyhiaXRzdHJlYW1fcmVhZCkocywgMSkpIHsK KyAgICAgICAgQlNfRlVOQyhiaXRzdHJlYW1fc2tpcCkocywgOCk7CisgICAgICAgIGlmIChiaXRz dHJlYW1fYml0c19sZWZ0KHMpIDw9IDApCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoqCisgKiBSZXR1cm4gdGhl IExVVCBlbGVtZW50IGZvciB0aGUgZ2l2ZW4gYml0c3RyZWFtIGNvbmZpZ3VyYXRpb24uCisgKi8K K3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoc2V0X2lkeCkoQml0c3RyZWFtQ29udGV4dCAqYmMs IGludCBjb2RlLCBpbnQgKm4sIGludCAqbmJfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgVkxDRWxlbSAqdGFibGUpCit7CisgICAgdW5zaWduZWQgaWR4OworCisgICAgKm5i X2JpdHMgPSAtKm47CisgICAgaWR4ID0gQlNfRlVOQyhiaXRzdHJlYW1fcGVlaykoYmMsICpuYl9i aXRzKSArIGNvZGU7CisgICAgKm4gPSB0YWJsZVtpZHhdLmxlbjsKKworICAgIHJldHVybiB0YWJs ZVtpZHhdLnN5bTsKK30KKworLyoqCisgKiBQYXJzZSBhIHZsYyBjb2RlLgorICogQHBhcmFtIGJp dHMgaXMgdGhlIG51bWJlciBvZiBiaXRzIHdoaWNoIHdpbGwgYmUgcmVhZCBhdCBvbmNlLCBtdXN0 IGJlCisgKiAgICAgICAgICAgICBpZGVudGljYWwgdG8gbmJfYml0cyBpbiBpbml0X3ZsYygpCisg KiBAcGFyYW0gbWF4X2RlcHRoIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgYml0cyBiaXRzIG11c3Qg YmUgcmVhZCB0byBjb21wbGV0ZWx5CisgKiAgICAgICAgICAgICAgICAgIHJlYWQgdGhlIGxvbmdl c3QgdmxjIGNvZGUKKyAqICAgICAgICAgICAgICAgICAgPSAobWF4X3ZsY19sZW5ndGggKyBiaXRz IC0gMSkgLyBiaXRzCisgKiBJZiB0aGUgdmxjIGNvZGUgaXMgaW52YWxpZCBhbmQgbWF4X2RlcHRo PTEsIHRoZW4gbm8gYml0cyB3aWxsIGJlIHJlbW92ZWQuCisgKiBJZiB0aGUgdmxjIGNvZGUgaXMg aW52YWxpZCBhbmQgbWF4X2RlcHRoPjEsIHRoZW4gdGhlIG51bWJlciBvZiBiaXRzIHJlbW92ZWQK KyAqIGlzIHVuZGVmaW5lZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgQlNfRlVOQyhiaXRzdHJl YW1fcmVhZF92bGMpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCBjb25zdCBWTENFbGVtICp0YWJsZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0cywg aW50IG1heF9kZXB0aCkKK3sKKyAgICBpbnQgbmJfYml0czsKKyAgICB1bnNpZ25lZCBpZHggPSBC U19GVU5DKGJpdHN0cmVhbV9wZWVrKShiYywgYml0cyk7CisgICAgaW50IGNvZGUgICAgID0gdGFi bGVbaWR4XS5zeW07CisgICAgaW50IG4gICAgICAgID0gdGFibGVbaWR4XS5sZW47CisKKyAgICBp ZiAobWF4X2RlcHRoID4gMSAmJiBuIDwgMCkgeworICAgICAgICBCU19GVU5DKHNraXBfcmVtYWlu aW5nKShiYywgYml0cyk7CisgICAgICAgIGNvZGUgPSBCU19GVU5DKHNldF9pZHgpKGJjLCBjb2Rl LCAmbiwgJm5iX2JpdHMsIHRhYmxlKTsKKyAgICAgICAgaWYgKG1heF9kZXB0aCA+IDIgJiYgbiA8 IDApIHsKKyAgICAgICAgICAgIEJTX0ZVTkMoc2tpcF9yZW1haW5pbmcpKGJjLCBuYl9iaXRzKTsK KyAgICAgICAgICAgIGNvZGUgPSBCU19GVU5DKHNldF9pZHgpKGJjLCBjb2RlLCAmbiwgJm5iX2Jp dHMsIHRhYmxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBCU19GVU5DKHNraXBfcmVtYWluaW5n KShiYywgbik7CisKKyAgICByZXR1cm4gY29kZTsKK30KKworI3VuZGVmIEJTX0ZVTkMKKyN1bmRl ZiBCU19GVU5DMgorI3VuZGVmIEJTX0pPSU4KKyN1bmRlZiBCU19TVUZGSVgKZGlmZiAtLWdpdCBh L3Rlc3RzL3JlZi9mYXRlL3NvdXJjZSBiL3Rlc3RzL3JlZi9mYXRlL3NvdXJjZQppbmRleCAxNmVh N2VmOWMxLi4zYjdlYTljMzc5IDEwMDY0NAotLS0gYS90ZXN0cy9yZWYvZmF0ZS9zb3VyY2UKKysr IGIvdGVzdHMvcmVmL2ZhdGUvc291cmNlCkBAIC0yMSw2ICsyMSw3IEBAIEhlYWRlcnMgd2l0aG91 dCBzdGFuZGFyZCBpbmNsdXNpb24gZ3VhcmRzOgogY29tcGF0L2RqZ3BwL21hdGguaAogY29tcGF0 L2Zsb2F0L2Zsb2F0LmgKIGNvbXBhdC9mbG9hdC9saW1pdHMuaAorbGliYXZjb2RlYy9iaXRzdHJl YW1fdGVtcGxhdGUuaAogdG9vbHMvZGVjb2RlX3NpbXBsZS5oCiBVc2Ugb2YgYXZfY2xpcCgpIHdo ZXJlIGF2X2NsaXBfdWludHAyKCkgY291bGQgYmUgdXNlZDoKIFVzZSBvZiBhdl9jbGlwKCkgd2hl cmUgYXZfY2xpcF9pbnRwMigpIGNvdWxkIGJlIHVzZWQ6Ci0tIAoyLjM0LjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5n IGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4v bGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwg b3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVu c3Vic2NyaWJlIi4K