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 ESMTPS id 4E5614CDE9 for ; Wed, 14 May 2025 13:42:40 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B276168C636; Wed, 14 May 2025 16:41:06 +0300 (EEST) Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 52A6A68C5EB for ; Wed, 14 May 2025 16:40:58 +0300 (EEST) Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-74019695377so5061750b3a.3 for ; Wed, 14 May 2025 06:40:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747230056; x=1747834856; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7L+mmFSAJY5uv0nNA0z6o6iHrnQ9kVl6u0ibrqSmM6M=; b=ej0k8nWvtscE9h2KtoWA+O07XHhjdPKk0z/msbd1UNfB0X6jGGVdQYGNBR+xsijT1T BDwRq++EpoXtMET0Fp4jMcDtmnQsu90AXH2ip2mqZsZuNSukuwyYg9Wrj8A7DLXlzI/y zWM4azBKOwEM/+KzKrLMo23dHk5taMMEMZaqwM0QNCwwAvY62UOdBd9fuIpb47/joeDe Rm3B/DYKLshhTgxcQCYvcP6iHL2A05W8MQgu5Rrbp3oFxBcenjdjcXS6qWJtJ5f8akTi Mxb9T6NmtPTZspafW6om3QnngYUEDKhVIXUWlm5VWYZjlWCBmXcQCIyjZml3mQF9NSXS 6nJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747230056; x=1747834856; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7L+mmFSAJY5uv0nNA0z6o6iHrnQ9kVl6u0ibrqSmM6M=; b=ig/wuEt579dBK2c1ZGHCqRSZFIqp3v5iFt1KUlzFzym3pBcRY8u34Jib1XRNN0KIgn 25yuyyXvoFSDfZwaYXQ6bJUPJ8f+1VB82cGhvJIA2y5SVLVj6IZDOpwmKQ7IGczUmQuA FI32drrdYzOyotHGd+hKNXL2jDCgeBGlJZ9/Gxr562ToKQclg9BDEJOHb/iS2xvYH3v9 3KA/w3fhR4Jzhbyonld9KVeZvHRYfoh/aQVge0MTWRqUlvA/rkj3VY7f+cJju0fEhwbs ualuLjx+PnY+qismu6f2ahdt6FuwsphA/NlAl8ckYoj3rg5rpnJ++1oZKfeFBb3TNxMt y5dQ== X-Gm-Message-State: AOJu0YzLn7rm6jD2bsuFIOblFzcV+nrAFCdmnQ6c1W/q/psxNVM9Nz5u dEViS7iHQaOfs8tAY0ka1AWMPLhUu9GuDk7nhKng1leVbLt+2/ru2ZVGfvMd X-Gm-Gg: ASbGncvrVBbTb4V17sIAN8UpmlnAWyPi7+I83Emgu48mJWfc6BUyHrWTvCGiNQWIgNb sX+NB9LDaQM7YHZ+4IArf6X/G86TdDGWVWV4gqSdkwXUv4EpRtrWXOyt40s/26YzmUeqXdM8bYw tkAR0Clagv+9v3aS9dJahVo1/QrqABGh+6tiOmw1a8dRNR+XZhquptvuclYCpygqEKLjY0Ahvyl scCk3LN7I/YoawWS8MuoVuuCrjMzRyhcxzDeXV10FS2PV/Y0OE1sIDibEn6Gx2ZVRGaxcwCie5S 2aQTM76Lp7D7/EagUunLceA0ZtQKJPsCwQzkQDGadbP/lJH+RtBAN8i1OBNrl9jmrvwNzejT X-Google-Smtp-Source: AGHT+IE9EYc4PCkGjYRj3+9lBSiWNdQG/QlTsZE9r3p69gb2GeQj3nMQVLFfJ1lM2HH8SArkmWUmFA== X-Received: by 2002:a05:6a00:1bca:b0:740:6fa3:d323 with SMTP id d2e1a72fcca58-742892bac7emr4871631b3a.11.1747230056307; Wed, 14 May 2025 06:40:56 -0700 (PDT) Received: from localhost.localdomain ([124.79.129.75]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74237a8f7edsm9310669b3a.167.2025.05.14.06.40.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 May 2025 06:40:55 -0700 (PDT) From: toqsxw@gmail.com X-Google-Original-From: toqsxw@outlook.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 14 May 2025 21:40:17 +0800 Message-ID: <20250514134031.1584-10-toqsxw@outlook.com> X-Mailer: git-send-email 2.44.0.windows.1 In-Reply-To: <20250514134031.1584-1-toqsxw@outlook.com> References: <20250514134031.1584-1-toqsxw@outlook.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v1 10/23] avcodec/vvc/ctu: add palette support 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 Cc: Wu Jianhua 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: RnJvbTogV3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPgoKU2lnbmVkLW9mZi1ieTogV3Ug Smlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPgotLS0KIGxpYmF2Y29kZWMvdnZjL2N0dS5jICAg IHwgMzM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIGxpYmF2Y29k ZWMvdnZjL2N0dS5oICAgIHwgIDExICsrCiBsaWJhdmNvZGVjL3Z2Yy9kZWMuYyAgICB8ICAgMyAr CiBsaWJhdmNvZGVjL3Z2Yy9tdnMuYyAgICB8ICAgMyArLQogbGliYXZjb2RlYy92dmMvdGhyZWFk LmMgfCAgIDEgKwogNSBmaWxlcyBjaGFuZ2VkLCAzMjcgaW5zZXJ0aW9ucygrKSwgMzAgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvY3R1LmMgYi9saWJhdmNvZGVjL3Z2 Yy9jdHUuYwppbmRleCBjNWRmODk4ZjdiLi45NzlhMjdjNmFkIDEwMDY0NAotLS0gYS9saWJhdmNv ZGVjL3Z2Yy9jdHUuYworKysgYi9saWJhdmNvZGVjL3Z2Yy9jdHUuYwpAQCAtMjUsNiArMjUsNyBA QAogI2luY2x1ZGUgImNhYmFjLmgiCiAjaW5jbHVkZSAiY3R1LmgiCiAjaW5jbHVkZSAiaW50ZXIu aCIKKyNpbmNsdWRlICJpbnRyYS5oIgogI2luY2x1ZGUgIm12cy5oIgogCiAjZGVmaW5lIFBST0Zf VEVNUF9TSVpFIChQUk9GX0JMT0NLX1NJWkUpICogc2l6ZW9mKGludDE2X3QpCkBAIC0xMDQ2LDEz ICsxMDQ3LDE1IEBAIHN0YXRpYyBQcmVkTW9kZSBwcmVkX21vZGVfZGVjb2RlKFZWQ0xvY2FsQ29u dGV4dCAqbGMsCiAgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9IGxjLT5zYy0+ c2gucjsKICAgICBjb25zdCBpbnQgY2hfdHlwZSAgICAgICAgICAgICAgID0gdHJlZV90eXBlID09 IERVQUxfVFJFRV9DSFJPTUEgPyAxIDogMDsKICAgICBjb25zdCBpbnQgaXNfNHg0ICAgICAgICAg ICAgICAgID0gY3UtPmNiX3dpZHRoID09IDQgJiYgY3UtPmNiX2hlaWdodCA9PSA0OworICAgIGNv bnN0IGludCBpc18xMjggICAgICAgICAgICAgICAgPSBjdS0+Y2Jfd2lkdGggPT0gMTI4IHx8IGN1 LT5jYl9oZWlnaHQgPT0gMTI4OworICAgIGNvbnN0IGludCBocyAgICAgICAgICAgICAgICAgICAg PSBzcHMtPmhzaGlmdFtDSFJPTUFdOworICAgIGNvbnN0IGludCB2cyAgICAgICAgICAgICAgICAg ICAgPSBzcHMtPnZzaGlmdFtDSFJPTUFdOwogICAgIGludCBwcmVkX21vZGVfZmxhZzsKICAgICBp bnQgcHJlZF9tb2RlX2liY19mbGFnOwogICAgIFByZWRNb2RlIHByZWRfbW9kZTsKIAogICAgIGN1 LT5za2lwX2ZsYWcgPSAwOwogICAgIGlmICghSVNfSShyc2gpIHx8IHNwcy0+ci0+c3BzX2liY19l bmFibGVkX2ZsYWcpIHsKLSAgICAgICAgY29uc3QgaW50IGlzXzEyOCA9IGN1LT5jYl93aWR0aCA9 PSAxMjggfHwgY3UtPmNiX2hlaWdodCA9PSAxMjg7CiAgICAgICAgIGlmICh0cmVlX3R5cGUgIT0g RFVBTF9UUkVFX0NIUk9NQSAmJgogICAgICAgICAgICAgKCghaXNfNHg0ICYmIG1vZGVfdHlwZSAh PSBNT0RFX1RZUEVfSU5UUkEpIHx8CiAgICAgICAgICAgICAoc3BzLT5yLT5zcHNfaWJjX2VuYWJs ZWRfZmxhZyAmJiAhaXNfMTI4KSkpIHsKQEAgLTEwODcsNiArMTA5MCwxNCBAQCBzdGF0aWMgUHJl ZE1vZGUgcHJlZF9tb2RlX2RlY29kZShWVkNMb2NhbENvbnRleHQgKmxjLAogICAgICAgICBwcmVk X21vZGUgPSBNT0RFX0lOVFJBOwogICAgIH0KIAorICAgIGlmIChwcmVkX21vZGUgPT0gTU9ERV9J TlRSQSAmJiBzcHMtPnItPnNwc19wYWxldHRlX2VuYWJsZWRfZmxhZyAmJiAhaXNfMTI4ICYmICFj dS0+c2tpcF9mbGFnICYmCisgICAgICAgIG1vZGVfdHlwZSAhPSBNT0RFX1RZUEVfSU5URVIgJiYg KChjdS0+Y2Jfd2lkdGggKiBjdS0+Y2JfaGVpZ2h0KSA+CisgICAgICAgICAgICAodHJlZV90eXBl ICE9IERVQUxfVFJFRV9DSFJPTUEgPyAxNiA6ICgxNiA8PCBocyA8PCB2cykpKSAmJgorICAgICAg ICAobW9kZV90eXBlICE9IE1PREVfVFlQRV9JTlRSQSB8fCB0cmVlX3R5cGUgIT0gRFVBTF9UUkVF X0NIUk9NQSkpIHsKKyAgICAgICAgaWYgKGZmX3Z2Y19wcmVkX21vZGVfcGx0X2ZsYWcobGMpKQor ICAgICAgICAgICAgcHJlZF9tb2RlID0gTU9ERV9QTFQ7CisgICAgfQorCiAgICAgc2V0X2NiX3Rh YihsYywgZmMtPnRhYi5jcG1bY3UtPmNoX3R5cGVdLCBwcmVkX21vZGUpOwogICAgIGlmICh0cmVl X3R5cGUgPT0gU0lOR0xFX1RSRUUpCiAgICAgICAgIHNldF9jYl90YWIobGMsIGZjLT50YWIuY3Bt W0NIUk9NQV0sIHByZWRfbW9kZSk7CkBAIC0xNzU1LDggKzE3NjYsOCBAQCBzdGF0aWMgdm9pZCBm aWxsX2RtdnJfaW5mbyhjb25zdCBWVkNMb2NhbENvbnRleHQgKmxjKQogICAgIGNvbnN0IFZWQ0Zy YW1lQ29udGV4dCAqZmMgPSBsYy0+ZmM7CiAgICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICA9 IGxjLT5jdTsKIAotICAgIGlmIChjdS0+cHJlZF9tb2RlID09IE1PREVfSUJDKSB7Ci0gICAgICAg IGZmX3Z2Y19zZXRfaW50cmFfbXZmKGxjLCB0cnVlLCBQRl9JQkMsIGZhbHNlKTsKKyAgICBpZiAo Y3UtPnByZWRfbW9kZSA9PSBNT0RFX0lCQyB8fCBjdS0+cHJlZF9tb2RlID09IE1PREVfUExUKSB7 CisgICAgICAgIGZmX3Z2Y19zZXRfaW50cmFfbXZmKGxjLCB0cnVlLCBjdS0+cHJlZF9tb2RlID09 IE1PREVfSUJDID8gUEZfSUJDIDogUEZfUExULCBmYWxzZSk7CiAgICAgfSBlbHNlIHsKICAgICAg ICAgY29uc3QgVlZDUFBTICpwcHMgPSBmYy0+cHMucHBzOwogICAgICAgICBjb25zdCBpbnQgdyAg ICAgICA9IGN1LT5jYl93aWR0aCA+PiBNSU5fUFVfTE9HMjsKQEAgLTE4MDUsOSArMTgxNiwyOTEg QEAgc3RhdGljIGludCBpbnRlcl9kYXRhKFZWQ0xvY2FsQ29udGV4dCAqbGMpCiAgICAgcmV0dXJu IHJldDsKIH0KIAorc3RhdGljIFRyYW5zZm9ybVVuaXQqIHBhbGV0dGVfYWRkX3R1KFZWQ0xvY2Fs Q29udGV4dCAqbGMsIGNvbnN0IGludCBzdGFydCwgY29uc3QgaW50IGVuZCwgY29uc3QgVlZDVHJl ZVR5cGUgdHJlZV90eXBlKQoreworICAgIENvZGluZ1VuaXQgICAqY3UgID0gbGMtPmN1OworICAg IGNvbnN0IFZWQ1NQUyAqc3BzID0gbGMtPmZjLT5wcy5zcHM7CisgICAgVHJhbnNmb3JtVW5pdCAq dHUgPSBhZGRfdHUobGMtPmZjLCBjdSwgY3UtPngwLCBjdS0+eTAsIGN1LT5jYl93aWR0aCwgY3Ut PmNiX2hlaWdodCk7CisKKyAgICBpZiAoIXR1KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAg IGZvciAoaW50IGMgPSBzdGFydDsgYyA8IGVuZDsgYysrKSB7CisgICAgICAgIGNvbnN0IGludCB3 ID0gdHUtPndpZHRoID4+IHNwcy0+aHNoaWZ0W2NdOworICAgICAgICBjb25zdCBpbnQgaCA9IHR1 LT5oZWlnaHQgPj4gc3BzLT52c2hpZnRbY107CisgICAgICAgIFRyYW5zZm9ybUJsb2NrICp0YiA9 IGFkZF90Yih0dSwgbGMsIHR1LT54MCwgdHUtPnkwLCB3LCBoLCBjKTsKKyAgICAgICAgaWYgKGMg IT0gQ1IpCisgICAgICAgICAgICBzZXRfdGJfc2l6ZShsYy0+ZmMsIHRiKTsKKyAgICB9CisKKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGN1LT5wbHQpOyBpKyspCisgICAg ICAgIGN1LT5wbHRbaV0uc2l6ZSA9IDA7CisKKyAgICByZXR1cm4gdHU7Cit9CisKK3N0YXRpYyB2 b2lkIHBhbGV0dGVfcHJlZGljdGVkKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGJvb2wgbG9j YWxfZHVhbF90cmVlLCBpbnQgc3RhcnQsIGludCBlbmQsCisgICAgYm9vbCAqcHJlZGljdG9yX3Jl dXNlZCwgY29uc3QgaW50IHByZWRpY3Rvcl9zaXplLCBjb25zdCBpbnQgbWF4X2VudHJpZXMpCit7 CisgICAgQ29kaW5nVW5pdCAgKmN1ICA9IGxjLT5jdTsKKyAgICBpbnQgbmJfcHJlZGljdGVkID0g MDsKKworICAgIGlmIChsb2NhbF9kdWFsX3RyZWUpIHsKKyAgICAgICAgc3RhcnQgPSBMVU1BOwor ICAgICAgICBlbmQgPSBWVkNfTUFYX1NBTVBMRV9BUlJBWVM7CisgICAgfQorCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBwcmVkaWN0b3Jfc2l6ZSAmJiBuYl9wcmVkaWN0ZWQgPCBtYXhfZW50cmll czsgaSsrKSB7CisgICAgICAgIGNvbnN0IGludCBydW4gPSBmZl92dmNfcGFsZXR0ZV9wcmVkaWN0 b3JfcnVuKGxjKTsKKyAgICAgICAgaWYgKHJ1biA9PSAxKQorICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgaWYgKHJ1biA+IDEpCisgICAgICAgICAgICBpICs9IHJ1biAtIDE7CisgICAgICAg IHByZWRpY3Rvcl9yZXVzZWRbaV0gPSB0cnVlOworICAgICAgICBmb3IgKGludCBjID0gc3RhcnQ7 IGMgPCBlbmQ7IGMrKykKKyAgICAgICAgICAgIGN1LT5wbHRbY10uZW50cmllc1tuYl9wcmVkaWN0 ZWRdID0gbGMtPmVwLT5wcFtjXS5lbnRyaWVzW2ldOworICAgICAgICBuYl9wcmVkaWN0ZWQrKzsK KyAgICB9CisKKyAgICBmb3IgKGludCBjID0gc3RhcnQ7IGMgPCBlbmQ7IGMrKykKKyAgICAgICAg Y3UtPnBsdFtjXS5zaXplID0gbmJfcHJlZGljdGVkOworfQorCitzdGF0aWMgdm9pZCBwYWxldHRl X3NpZ25hbGVkKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0IGJvb2wgbG9jYWxfZHVhbF90cmVl LAorICAgIGNvbnN0IGludCBzdGFydCwgY29uc3QgaW50IGVuZCwgY29uc3QgaW50IG1heF9lbnRy aWVzKQoreworICAgIGNvbnN0IFZWQ1NQUyAqc3BzICAgICAgICAgPSBsYy0+ZmMtPnBzLnNwczsK KyAgICBDb2RpbmdVbml0ICAqY3UgICAgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0IGludCBu Yl9wcmVkaWN0ZWQgICAgPSBjdS0+cGx0W3N0YXJ0XS5zaXplOworICAgIGNvbnN0IGludCBuYl9z aWduYWxlZCAgICAgPSBuYl9wcmVkaWN0ZWQgPCBtYXhfZW50cmllcyA/IGZmX3Z2Y19udW1fc2ln bmFsbGVkX3BhbGV0dGVfZW50cmllcyhsYykgOiAwOworICAgIGNvbnN0IGludCBzaXplICAgICAg ICAgICAgPSBuYl9wcmVkaWN0ZWQgKyBuYl9zaWduYWxlZDsKKyAgICBjb25zdCBib29sIGR1YWxf dHJlZV9sdW1hID0gbG9jYWxfZHVhbF90cmVlICYmIGN1LT50cmVlX3R5cGUgPT0gRFVBTF9UUkVF X0xVTUE7CisKKyAgICBmb3IgKGludCBjID0gc3RhcnQ7IGMgPCBlbmQ7IGMrKykgeworICAgICAg ICBQYWxldHRlICpwbHQgPSBjdS0+cGx0ICsgYzsKKyAgICAgICAgZm9yIChpbnQgaSA9IG5iX3By ZWRpY3RlZDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgcGx0LT5lbnRyaWVzW2ldID0g ZmZfdnZjX25ld19wYWxldHRlX2VudHJpZXMobGMsIHNwcy0+Yml0X2RlcHRoKTsKKyAgICAgICAg ICAgIGlmIChkdWFsX3RyZWVfbHVtYSkgeworICAgICAgICAgICAgICAgIHBsdFtDQl0uZW50cmll c1tpXSA9IDEgPDwgKHNwcy0+Yml0X2RlcHRoIC0gMSk7CisgICAgICAgICAgICAgICAgcGx0W0NS XS5lbnRyaWVzW2ldID0gMSA8PCAoc3BzLT5iaXRfZGVwdGggLSAxKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBwbHQtPnNpemUgPSBzaXplOworICAgIH0KK30KKworc3RhdGlj IHZvaWQgcGFsZXR0ZV91cGRhdGVfcHJlZGljdG9yKFZWQ0xvY2FsQ29udGV4dCAqbGMsIGNvbnN0 IGJvb2wgbG9jYWxfZHVhbF90cmVlLCBpbnQgc3RhcnQsIGludCBlbmQsCisgICAgYm9vbCAqcHJl ZGljdG9yX3JldXNlZCwgY29uc3QgaW50IHByZWRpY3Rvcl9zaXplKQoreworICAgIENvZGluZ1Vu aXQgICpjdSAgICAgICAgID0gbGMtPmN1OworICAgIGNvbnN0IGludCBtYXhfcHJlZGljdG9yID0g VlZDX01BWF9OVU1fUEFMRVRURV9QUkVESUNUT1JfU0laRSA+PiAoY3UtPnRyZWVfdHlwZSAhPSBT SU5HTEVfVFJFRSAmJiAhbG9jYWxfZHVhbF90cmVlKTsKKworICAgIGlmIChsb2NhbF9kdWFsX3Ry ZWUpIHsKKyAgICAgICAgc3RhcnQgPSBMVU1BOworICAgICAgICBlbmQgPSBWVkNfTUFYX1NBTVBM RV9BUlJBWVM7CisgICAgfQorCisgICAgZm9yIChpbnQgYyA9IHN0YXJ0OyBjIDwgZW5kOyBjKysp IHsKKyAgICAgICAgUGFsZXR0ZSAqcHAgID0gbGMtPmVwLT5wcCArIGM7CisgICAgICAgIFBhbGV0 dGUgKnBsdCA9IGN1LT5wbHQgKyBjOworICAgICAgICBpbnQgaSA9IGN1LT5wbHRbc3RhcnRdLnNp emU7OworCisgICAgICAgIC8vIGNvcHkgdW51c2VkIHByZWRpY3RvcnMgdG8gdGhlIGVuZCBvZiBw bHQKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwcmVkaWN0b3Jfc2l6ZSAmJiBpIDwgbWF4 X3ByZWRpY3RvcjsgaisrKSB7CisgICAgICAgICAgICBpZiAoIXByZWRpY3Rvcl9yZXVzZWRbal0p IHsKKyAgICAgICAgICAgICAgICBwbHQtPmVudHJpZXNbaV0gPSBwcC0+ZW50cmllc1tqXTsKKyAg ICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBt ZW1jcHkocHAtPmVudHJpZXMsIHBsdC0+ZW50cmllcywgaSAqIHNpemVvZihwcC0+ZW50cmllc1sw XSkpOworICAgICAgICBwcC0+c2l6ZSA9IGk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwYWxl dHRlX3FwKFZWQ0xvY2FsQ29udGV4dCAqbGMsIFZWQ1RyZWVUeXBlIHRyZWVfdHlwZSwgY29uc3Qg Ym9vbCBlc2NhcGVfcHJlc2VudCkKK3sKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAg ICA9IGxjLT5mYzsKKyAgICBjb25zdCBWVkNQUFMgKnBwcyAgICAgICAgICAgICA9IGZjLT5wcy5w cHM7CisgICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggPSBsYy0+c2MtPnNoLnI7Cisg ICAgY29uc3QgQ29kaW5nVW5pdCAqY3UgICAgICAgICAgPSBsYy0+Y3U7CisKKyAgICBpZiAodHJl ZV90eXBlICE9IERVQUxfVFJFRV9DSFJPTUEpIHsKKyAgICAgICAgY29uc3QgYm9vbCBoYXNfcXBf ZGVsdGEgPSBlc2NhcGVfcHJlc2VudCAmJgorICAgICAgICAgICAgcHBzLT5yLT5wcHNfY3VfcXBf ZGVsdGFfZW5hYmxlZF9mbGFnICYmICFsYy0+cGFyc2UuaXNfY3VfcXBfZGVsdGFfY29kZWQ7Cisg ICAgICAgIHNldF9xcF95KGxjLCBjdS0+eDAsIGN1LT55MCwgaGFzX3FwX2RlbHRhKTsKKyAgICB9 CisKKyAgICBpZiAodHJlZV90eXBlICE9IERVQUxfVFJFRV9MVU1BKSB7CisgICAgICAgIGlmIChy c2gtPnNoX2N1X2Nocm9tYV9xcF9vZmZzZXRfZW5hYmxlZF9mbGFnICYmICFsYy0+cGFyc2UuaXNf Y3VfY2hyb21hX3FwX29mZnNldF9jb2RlZCkKKyAgICAgICAgICAgIGNocm9tYV9xcF9vZmZzZXRf ZGVjb2RlKGxjLCAwLCAxKTsKKyAgICAgICAgc2V0X3FwX2MobGMpOworICAgIH0KK30KKworI2Rl ZmluZSBQQUxFVFRFX1NFVF9QSVhFTCh4YywgeWMsIHBpeCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY29uc3QgaW50IG9mZiA9ICgoeGMpID4+ IGhzKSArICgoeWMpID4+IHZzKSAqIHRiLT50Yl93aWR0aDsgXAorICAgICAgICBpZiAoc3BzLT5i aXRfZGVwdGggPT0gOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICB1OFtvZmZdID0gcGl4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdTE2W29mZl0gPSBwaXg7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwor I2RlZmluZSBQQUxFVFRFX0lOREVYKHgsIHkpIGluZGV4Wyh5KSAqIGN1LT5jYl93aWR0aCArICh4 KV0KKworLy8gNi41LjMgSG9yaXpvbnRhbCBhbmQgdmVydGljYWwgdHJhdmVyc2Ugc2NhbiBvcmRl ciBhcnJheSBpbml0aWFsaXphdGlvbiBwcm9jZXNzCisvLyBUaGUgaFRyYXZTY2FuIGFuZCB2VHJh dlNjYW4gdGFibGVzIHJlcXVpcmUgYXBwcm94aW1hdGVseSA1NzYgS0Igb2YgbWVtb3J5LgorLy8g VG8gc2F2ZSBzcGFjZSwgd2UgdXNlIGEgbWFjcm8gdG8gYWNoaWV2ZSB0aGUgc2FtZSBmdW5jdGlv bmFsaXR5LgorI2RlZmluZSBUUkFWX0NPTChwLCB3bG9nLCBtYXNrKSAoKHAgJiBtYXNrKSBeICgt KChwID4+IHdsb2cpICYgMSkgJiBtYXNrKSkKKyNkZWZpbmUgVFJBVl9ST1cocCwgaGxvZykgKHAg Pj4gaGxvZykKKyNkZWZpbmUgVFJBVih0cmFucywgcCwgd2xvZywgaGxvZywgbWFzaykgICh0cmFu cyA/IFRSQVZfUk9XKChwKSwgaGxvZykgOiBUUkFWX0NPTCgocCksIHdsb2csIG1hc2spKQorI2Rl ZmluZSBUUkFWX1gocG9zKSBUUkFWKHRyYW5zcG9zZSwgcG9zLCB3bG9nMiwgaGxvZzIsIHdtYXNr KQorI2RlZmluZSBUUkFWX1kocG9zKSBUUkFWKCF0cmFuc3Bvc2UsIHBvcywgaGxvZzIsIHdsb2cy LCBobWFzaykKKworc3RhdGljIGludCBwYWxldHRlX3N1YmJsb2NrX2RhdGEoVlZDTG9jYWxDb250 ZXh0ICpsYywKKyAgICBjb25zdCBpbnQgbWF4X2luZGV4LCBjb25zdCBpbnQgc3Vic2V0X2lkLCBj b25zdCBib29sIHRyYW5zcG9zZSwKKyAgICB1aW50OF90ICpydW5fdHlwZSwgdWludDhfdCAqaW5k ZXgsIGludCAqcHJldl9ydW5fcG9zLCBib29sICphZGp1c3QpCit7CisgICAgY29uc3QgQ29kaW5n VW5pdCAqY3UgPSBsYy0+Y3U7CisgICAgVHJhbnNmb3JtVW5pdCAqdHUgICAgPSBjdS0+dHVzLmhl YWQ7CisgICAgY29uc3QgVlZDU1BTICpzcHMgICAgPSBsYy0+ZmMtPnBzLnNwczsKKyAgICBjb25z dCBpbnQgbWluX3BvcyAgICA9IHN1YnNldF9pZCA8PCA0OworICAgIGNvbnN0IGludCBtYXhfcG9z ICAgID0gRkZNSU4obWluX3BvcyArIDE2LCBjdS0+Y2Jfd2lkdGggKiBjdS0+Y2JfaGVpZ2h0KTsK KyAgICBjb25zdCBpbnQgd21hc2sgICAgICA9IGN1LT5jYl93aWR0aCAgLSAxOworICAgIGNvbnN0 IGludCBobWFzayAgICAgID0gY3UtPmNiX2hlaWdodCAtIDE7CisgICAgY29uc3QgaW50IHdsb2cy ICAgICAgPSBhdl9sb2cyKGN1LT5jYl93aWR0aCk7CisgICAgY29uc3QgaW50IGhsb2cyICAgICAg PSBhdl9sb2cyKGN1LT5jYl9oZWlnaHQpOworICAgIGNvbnN0IHVpbnQ4X3QgZXNjICAgID0gY3Ut PnBsdFt0dS0+dGJzWzBdLmNfaWR4XS5zaXplOworICAgIHVpbnQ4X3QgcnVuX2NvcHlbMTZdID0g eyAwIH07CisKKyAgICBmb3IgKGludCBpID0gbWluX3BvczsgaSA8IG1heF9wb3M7IGkrKykgewor ICAgICAgICBjb25zdCBpbnQgeGMgPSBUUkFWX1goaSk7CisgICAgICAgIGNvbnN0IGludCB5YyA9 IFRSQVZfWShpKTsKKworICAgICAgICBpZiAoaSA+IDAgJiYgbWF4X2luZGV4ID4gMCkKKyAgICAg ICAgICAgIHJ1bl9jb3B5W2kgLSBtaW5fcG9zXSA9IGZmX3Z2Y19ydW5fY29weV9mbGFnKGxjLCBy dW5fdHlwZVtpIC0gMV0sICpwcmV2X3J1bl9wb3MsIGkpOworCisgICAgICAgIHJ1bl90eXBlW2ld ID0gMDsKKyAgICAgICAgaWYgKG1heF9pbmRleCA+IDAgJiYgIXJ1bl9jb3B5W2kgLSBtaW5fcG9z XSkgeworICAgICAgICAgICAgaWYgKCgoIXRyYW5zcG9zZSAmJiB5YyA+IDApIHx8ICh0cmFuc3Bv c2UgJiYgeGMgPiAwKSkKKyAgICAgICAgICAgICAgICAmJiBpID4gMCAmJiAhcnVuX3R5cGVbaSAt IDFdKSB7CisgICAgICAgICAgICAgICAgcnVuX3R5cGVbaV0gPSBmZl92dmNfY29weV9hYm92ZV9w YWxldHRlX2luZGljZXNfZmxhZyhsYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqcHJl dl9ydW5fcG9zID0gaTsKKyAgICAgICAgfSBlbHNlIGlmIChpID4gMCkgeworICAgICAgICAgICAg cnVuX3R5cGVbaV0gPSBydW5fdHlwZVtpIC0gMV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm b3IgKGludCBpID0gbWluX3BvczsgaSA8IG1heF9wb3M7IGkrKykgeworICAgICAgICBjb25zdCBp bnQgeGMgPSBUUkFWX1goaSk7CisgICAgICAgIGNvbnN0IGludCB5YyA9IFRSQVZfWShpKTsKKyAg ICAgICAgY29uc3QgaW50IHByZXZfeGMgPSBpID4gMCA/IFRSQVZfWChpIC0gMSkgOiAwOworICAg ICAgICBjb25zdCBpbnQgcHJldl95YyA9IGkgPiAwID8gVFJBVl9ZKGkgLSAxKSA6IDA7CisKKyAg ICAgICAgaW50IGlkeCA9IDA7CisgICAgICAgIGlmIChtYXhfaW5kZXggPiAwICYmICFydW5fY29w eVtpIC0gbWluX3Bvc10gJiYgIXJ1bl90eXBlW2ldKSB7CisgICAgICAgICAgICBpZiAobWF4X2lu ZGV4IC0gKmFkanVzdCA+IDApCisgICAgICAgICAgICAgICAgaWR4ID0gZmZfdnZjX3BhbGV0dGVf aWR4X2lkYyhsYywgbWF4X2luZGV4LCAqYWRqdXN0KTsKKyAgICAgICAgICAgIGlmIChpID4gMCkg eworICAgICAgICAgICAgICAgIGNvbnN0IGludCByZWZfaWR4ID0gIXJ1bl90eXBlW2kgLSAxXSA/ CisgICAgICAgICAgICAgICAgICAgIFBBTEVUVEVfSU5ERVgocHJldl94YywgcHJldl95YykgOiBQ QUxFVFRFX0lOREVYKHhjIC0gdHJhbnNwb3NlLCB5YyAtICF0cmFuc3Bvc2UpOworICAgICAgICAg ICAgICAgIGlkeCArPSAoaWR4ID49IHJlZl9pZHgpOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgKmFkanVzdCA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZHggPSBQ QUxFVFRFX0lOREVYKHByZXZfeGMsIHByZXZfeWMpOworICAgICAgICB9CisKKyAgICAgICAgaWYg KCFydW5fdHlwZVtpXSkKKyAgICAgICAgICAgIFBBTEVUVEVfSU5ERVgoeGMsIHljKSA9IGlkeDsK KyAgICAgICAgZWxzZQorICAgICAgICAgICAgUEFMRVRURV9JTkRFWCh4YywgeWMpID0gUEFMRVRU RV9JTkRFWCh4YyAtIHRyYW5zcG9zZSwgeWMgLSAhdHJhbnNwb3NlKTsKKyAgICB9CisKKyAgICBm b3IgKGludCBjID0gMDsgYyA8IHR1LT5uYl90YnM7IGMrKykgeworICAgICAgICBUcmFuc2Zvcm1C bG9jayAqdGIgPSAmdHUtPnRic1tjXTsKKyAgICAgICAgY29uc3QgUGFsZXR0ZSAqcGx0ID0gY3Ut PnBsdCArIHRiLT5jX2lkeDsKKyAgICAgICAgY29uc3QgaW50IHNjYWxlICAgID0gZmZfdnZjX3Bh bGV0dGVfZGVyaXZlX3NjYWxlKGxjLCB0dSwgdGIpOworICAgICAgICBjb25zdCBpbnQgaHMgICAg ICAgPSBzcHMtPmhzaGlmdFtjXTsKKyAgICAgICAgY29uc3QgaW50IHZzICAgICAgID0gc3BzLT52 c2hpZnRbY107CisgICAgICAgIHVpbnQ4X3QgKnU4ICAgICAgICA9ICh1aW50OF90ICopdGItPmNv ZWZmczsKKyAgICAgICAgdWludDE2X3QgKnUxNiAgICAgID0gKHVpbnQxNl90ICopdGItPmNvZWZm czsKKworICAgICAgICBmb3IgKGludCBpID0gbWluX3BvczsgaSA8IG1heF9wb3M7IGkrKykgewor ICAgICAgICAgICAgY29uc3QgaW50IHhjID0gVFJBVl9YKGkpOworICAgICAgICAgICAgY29uc3Qg aW50IHljID0gVFJBVl9ZKGkpOworICAgICAgICAgICAgaWYgKCEoeGMgJiBocykgJiYgISh5YyAm IHZzKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCB2ID0gUEFMRVRURV9JTkRFWCh4Yywg eWMpOworICAgICAgICAgICAgICAgIGlmICh2ID09IGVzYykgeworICAgICAgICAgICAgICAgICAg ICBjb25zdCBpbnQgY29lZmYgPSBmZl92dmNfcGFsZXR0ZV9lc2NhcGVfdmFsKGxjKTsKKyAgICAg ICAgICAgICAgICAgICAgY29uc3QgaW50IHBpeGVsID0gYXZfY2xpcF9pbnRwMihSU0hJRlQoY29l ZmYgKiBzY2FsZSwgNiksIHNwcy0+Yml0X2RlcHRoKTsKKyAgICAgICAgICAgICAgICAgICAgUEFM RVRURV9TRVRfUElYRUwoeGMsIHljLCBwaXhlbCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgUEFMRVRURV9TRVRfUElYRUwoeGMsIHljLCBwbHQtPmVudHJp ZXNbdl0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhsc19wYWxldHRlX2NvZGluZyhW VkNMb2NhbENvbnRleHQgKmxjLCBjb25zdCBWVkNUcmVlVHlwZSB0cmVlX3R5cGUpCit7CisgICAg Y29uc3QgVlZDRnJhbWVDb250ZXh0ICpmYyAgICAgPSBsYy0+ZmM7CisgICAgY29uc3QgVlZDU1BT ICpzcHMgICAgICAgICAgICAgPSBmYy0+cHMuc3BzOworICAgIGNvbnN0IEgyNjZSYXdTbGljZUhl YWRlciAqcnNoID0gbGMtPnNjLT5zaC5yOworICAgIENvZGluZ1VuaXQgKmN1ICAgICAgICAgICAg ICAgID0gbGMtPmN1OworICAgIFBhbGV0dGUgKnBwICAgICAgICAgICAgICAgICAgID0gbGMtPmVw LT5wcDsKKyAgICBjb25zdCBpbnQgbWF4X2VudHJpZXMgICAgICAgICA9IHRyZWVfdHlwZSA9PSBT SU5HTEVfVFJFRSA/IDMxIDogMTU7CisgICAgY29uc3QgYm9vbCBsb2NhbF9kdWFsX3RyZWUgICAg PSB0cmVlX3R5cGUgIT0gU0lOR0xFX1RSRUUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoIUlTX0kocnNoKSB8fCAoSVNfSShyc2gpICYmICFzcHMtPnItPnNwc19x dGJ0dF9kdWFsX3RyZWVfaW50cmFfZmxhZykpOworICAgIGJvb2wgZXNjYXBlX3ByZXNlbnQgICAg ICAgICAgID0gZmFsc2U7CisgICAgYm9vbCB0cmFuc3Bvc2UgICAgICAgICAgICAgICAgPSBmYWxz ZTsKKyAgICBib29sIGFkanVzdCAgICAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgIGludCBt YXhfaW5kZXggICAgICAgICAgICAgICAgID0gMDsKKyAgICBpbnQgcHJldl9ydW5fcG9zICAgICAg ICAgICAgICA9IDA7CisKKyAgICBpbnQgcHJlZGljdG9yX3NpemUsIHN0YXJ0LCBlbmQ7CisgICAg Ym9vbCByZXVzZWRbVlZDX01BWF9OVU1fUEFMRVRURV9QUkVESUNUT1JfU0laRV07CisgICAgdWlu dDhfdCBydW5fdHlwZVtNQVhfUEFMRVRURV9DVV9TSVpFICogTUFYX1BBTEVUVEVfQ1VfU0laRV07 CisgICAgdWludDhfdCBpbmRleFtNQVhfUEFMRVRURV9DVV9TSVpFICogTUFYX1BBTEVUVEVfQ1Vf U0laRV07CisKKyAgICBmZl92dmNfY2hhbm5lbF9yYW5nZSgmc3RhcnQsICZlbmQsIHRyZWVfdHlw ZSwgc3BzLT5yLT5zcHNfY2hyb21hX2Zvcm1hdF9pZGMpOworCisgICAgaWYgKCFwYWxldHRlX2Fk ZF90dShsYywgc3RhcnQsIGVuZCwgdHJlZV90eXBlKSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKKworICAgIHByZWRpY3Rvcl9zaXplID0gcHBbc3RhcnRdLnNpemU7CisgICAgbWVt c2V0KHJldXNlZCwgMCwgc2l6ZW9mKHJldXNlZFswXSkgKiBwcmVkaWN0b3Jfc2l6ZSk7CisgICAg cGFsZXR0ZV9wcmVkaWN0ZWQobGMsIGxvY2FsX2R1YWxfdHJlZSwgc3RhcnQsIGVuZCwgcmV1c2Vk LCBwcmVkaWN0b3Jfc2l6ZSwgbWF4X2VudHJpZXMpOworICAgIHBhbGV0dGVfc2lnbmFsZWQobGMs IGxvY2FsX2R1YWxfdHJlZSwgc3RhcnQsIGVuZCwgbWF4X2VudHJpZXMpOworICAgIHBhbGV0dGVf dXBkYXRlX3ByZWRpY3RvcihsYywgbG9jYWxfZHVhbF90cmVlLCBzdGFydCwgZW5kLCByZXVzZWQs IHByZWRpY3Rvcl9zaXplKTsKKworICAgIGlmIChjdS0+cGx0W3N0YXJ0XS5zaXplID4gMCkKKyAg ICAgICAgZXNjYXBlX3ByZXNlbnQgPSBmZl92dmNfcGFsZXR0ZV9lc2NhcGVfdmFsX3ByZXNlbnRf ZmxhZyhsYyk7CisKKyAgICBtYXhfaW5kZXggPSBjdS0+cGx0W3N0YXJ0XS5zaXplIC0gMSArIGVz Y2FwZV9wcmVzZW50OworICAgIGlmIChtYXhfaW5kZXggPiAwKSB7CisgICAgICAgIGFkanVzdCA9 IGZhbHNlOworICAgICAgICB0cmFuc3Bvc2UgPSBmZl92dmNfcGFsZXR0ZV90cmFuc3Bvc2VfZmxh ZyhsYyk7CisgICAgfQorCisgICAgcGFsZXR0ZV9xcChsYywgdHJlZV90eXBlLCBlc2NhcGVfcHJl c2VudCk7CisKKyAgICBpbmRleFswXSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gKGN1 LT5jYl93aWR0aCAqIGN1LT5jYl9oZWlnaHQgLSAxKSA+PiA0OyBpKyspCisgICAgICAgIHBhbGV0 dGVfc3ViYmxvY2tfZGF0YShsYywgbWF4X2luZGV4LCBpLCB0cmFuc3Bvc2UsCisgICAgICAgICAg ICBydW5fdHlwZSwgaW5kZXgsICZwcmV2X3J1bl9wb3MsICZhZGp1c3QpOworCisgICAgcmV0dXJu IDA7Cit9CisKIHN0YXRpYyBpbnQgaW50cmFfZGF0YShWVkNMb2NhbENvbnRleHQgKmxjKQogewot ICAgIGNvbnN0IFZWQ0ZyYW1lQ29udGV4dCAqZmMgICAgICA9IGxjLT5mYzsKICAgICBjb25zdCBW VkNTUFMgKnNwcyAgICAgICAgICAgICAgPSBsYy0+ZmMtPnBzLnNwczsKICAgICBjb25zdCBDb2Rp bmdVbml0ICpjdSAgICAgICAgICAgPSBsYy0+Y3U7CiAgICAgY29uc3QgVlZDVHJlZVR5cGUgdHJl ZV90eXBlICAgID0gY3UtPnRyZWVfdHlwZTsKQEAgLTE4MTYsOCArMjEwOSw5IEBAIHN0YXRpYyBp bnQgaW50cmFfZGF0YShWVkNMb2NhbENvbnRleHQgKmxjKQogCiAgICAgaWYgKHRyZWVfdHlwZSA9 PSBTSU5HTEVfVFJFRSB8fCB0cmVlX3R5cGUgPT0gRFVBTF9UUkVFX0xVTUEpIHsKICAgICAgICAg aWYgKHByZWRfbW9kZV9wbHRfZmxhZykgewotICAgICAgICAgICAgYXZwcml2X3JlcG9ydF9taXNz aW5nX2ZlYXR1cmUoZmMtPmxvZ19jdHgsICJQYWxldHRlIik7Ci0gICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgICAgICAgICBpZiAoKHJldCA9IGhsc19wYWxldHRl X2NvZGluZyhsYywgdHJlZV90eXBlKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7 CisgICAgICAgICAgICBmZl92dmNfc2V0X2ludHJhX212ZihsYywgZmFsc2UsIFBGX1BMVCwgZmFs c2UpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW50cmFfbHVtYV9wcmVkX21vZGVz KGxjKTsKICAgICAgICAgICAgIGZmX3Z2Y19zZXRfaW50cmFfbXZmKGxjLCBmYWxzZSwgUEZfSU5U UkEsIGN1LT5jaWlwX2ZsYWcpOwpAQCAtMTgyNSw4ICsyMTE5LDggQEAgc3RhdGljIGludCBpbnRy YV9kYXRhKFZWQ0xvY2FsQ29udGV4dCAqbGMpCiAgICAgfQogICAgIGlmICgodHJlZV90eXBlID09 IFNJTkdMRV9UUkVFIHx8IHRyZWVfdHlwZSA9PSBEVUFMX1RSRUVfQ0hST01BKSAmJiBzcHMtPnIt PnNwc19jaHJvbWFfZm9ybWF0X2lkYykgewogICAgICAgICBpZiAocHJlZF9tb2RlX3BsdF9mbGFn ICYmIHRyZWVfdHlwZSA9PSBEVUFMX1RSRUVfQ0hST01BKSB7Ci0gICAgICAgICAgICBhdnByaXZf cmVwb3J0X21pc3NpbmdfZmVhdHVyZShmYy0+bG9nX2N0eCwgIlBhbGV0dGUiKTsKLSAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgICAgICAgIGlmICgocmV0ID0g aGxzX3BhbGV0dGVfY29kaW5nKGxjLCB0cmVlX3R5cGUpKSA8IDApCisgICAgICAgICAgICAgICAg cmV0dXJuIHJldDsKICAgICAgICAgfSBlbHNlIGlmICghcHJlZF9tb2RlX3BsdF9mbGFnKSB7CiAg ICAgICAgICAgICBpZiAoIWN1LT5hY3RfZW5hYmxlZF9mbGFnKQogICAgICAgICAgICAgICAgIGlu dHJhX2Nocm9tYV9wcmVkX21vZGVzKGxjKTsKQEAgLTE4MzksMTQgKzIxMzMsMTEgQEAgc3RhdGlj IGludCBpbnRyYV9kYXRhKFZWQ0xvY2FsQ29udGV4dCAqbGMpCiBzdGF0aWMgaW50IGhsc19jb2Rp bmdfdW5pdChWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCwgaW50IGNiX3dpZHRo LCBpbnQgY2JfaGVpZ2h0LAogICAgIGludCBjcXRfZGVwdGgsIGNvbnN0IFZWQ1RyZWVUeXBlIHRy ZWVfdHlwZSwgVlZDTW9kZVR5cGUgbW9kZV90eXBlKQogewotICAgIGNvbnN0IFZWQ0ZyYW1lQ29u dGV4dCAqZmMgICAgICAgPSBsYy0+ZmM7Ci0gICAgY29uc3QgVlZDU1BTICpzcHMgICAgICAgICAg ICAgICA9IGZjLT5wcy5zcHM7Ci0gICAgY29uc3QgSDI2NlJhd1NsaWNlSGVhZGVyICpyc2ggICA9 IGxjLT5zYy0+c2gucjsKLSAgICBjb25zdCBpbnQgaHMgICAgICAgICAgICAgICAgICAgID0gc3Bz LT5oc2hpZnRbQ0hST01BXTsKLSAgICBjb25zdCBpbnQgdnMgICAgICAgICAgICAgICAgICAgID0g c3BzLT52c2hpZnRbQ0hST01BXTsKLSAgICBjb25zdCBpbnQgaXNfMTI4ICAgICAgICAgICAgICAg ID0gY2Jfd2lkdGggPiA2NCB8fCBjYl9oZWlnaHQgPiA2NDsKLSAgICBpbnQgcHJlZF9tb2RlX3Bs dF9mbGFnICAgICAgICAgID0gMDsKLSAgICBpbnQgcmV0ICAgICAgICAgICAgICAgICAgICAgICAg ID0gMDsKKyAgICBjb25zdCBWVkNGcmFtZUNvbnRleHQgKmZjICAgICA9IGxjLT5mYzsKKyAgICBj b25zdCBWVkNTUFMgKnNwcyAgICAgICAgICAgICA9IGZjLT5wcy5zcHM7CisgICAgY29uc3QgSDI2 NlJhd1NsaWNlSGVhZGVyICpyc2ggPSBsYy0+c2MtPnNoLnI7CisgICAgY29uc3QgaW50IGlzXzEy OCAgICAgICAgICAgICAgPSBjYl93aWR0aCA+IDY0IHx8IGNiX2hlaWdodCA+IDY0OworICAgIGlu dCByZXQgICAgICAgICAgICAgICAgICAgICAgID0gMDsKIAogICAgIENvZGluZ1VuaXQgKmN1ID0g YWRkX2N1KGxjLCB4MCwgeTAsIGNiX3dpZHRoLCBjYl9oZWlnaHQsIGNxdF9kZXB0aCwgdHJlZV90 eXBlKTsKIApAQCAtMTg1OSwxNiArMjE1MCw2IEBAIHN0YXRpYyBpbnQgaGxzX2NvZGluZ191bml0 KFZWQ0xvY2FsQ29udGV4dCAqbGMsIGludCB4MCwgaW50IHkwLCBpbnQgY2Jfd2lkdGgsIGluCiAg ICAgICAgIG1vZGVfdHlwZSA9IE1PREVfVFlQRV9JTlRSQTsKICAgICBjdS0+cHJlZF9tb2RlID0g cHJlZF9tb2RlX2RlY29kZShsYywgdHJlZV90eXBlLCBtb2RlX3R5cGUpOwogCi0gICAgaWYgKGN1 LT5wcmVkX21vZGUgPT0gTU9ERV9JTlRSQSAmJiBzcHMtPnItPnNwc19wYWxldHRlX2VuYWJsZWRf ZmxhZyAmJiAhaXNfMTI4ICYmICFjdS0+c2tpcF9mbGFnICYmCi0gICAgICAgIG1vZGVfdHlwZSAh PSBNT0RFX1RZUEVfSU5URVIgJiYgKChjYl93aWR0aCAqIGNiX2hlaWdodCkgPgotICAgICAgICAo dHJlZV90eXBlICE9IERVQUxfVFJFRV9DSFJPTUEgPyAxNiA6ICgxNiA8PCBocyA8PCB2cykpKSAm JgotICAgICAgICAobW9kZV90eXBlICE9IE1PREVfVFlQRV9JTlRSQSB8fCB0cmVlX3R5cGUgIT0g RFVBTF9UUkVFX0NIUk9NQSkpIHsKLSAgICAgICAgcHJlZF9tb2RlX3BsdF9mbGFnID0gZmZfdnZj X3ByZWRfbW9kZV9wbHRfZmxhZyhsYyk7Ci0gICAgICAgIGlmIChwcmVkX21vZGVfcGx0X2ZsYWcp IHsKLSAgICAgICAgICAgIGF2cHJpdl9yZXBvcnRfbWlzc2luZ19mZWF0dXJlKGZjLT5sb2dfY3R4 LCAiUGFsZXR0ZSIpOwotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwot ICAgICAgICB9Ci0gICAgfQogICAgIGlmIChjdS0+cHJlZF9tb2RlID09IE1PREVfSU5UUkEgJiYg c3BzLT5yLT5zcHNfYWN0X2VuYWJsZWRfZmxhZyAmJiB0cmVlX3R5cGUgPT0gU0lOR0xFX1RSRUUp IHsKICAgICAgICAgYXZwcml2X3JlcG9ydF9taXNzaW5nX2ZlYXR1cmUoZmMtPmxvZ19jdHgsICJB ZGFwdGl2ZSBDb2xvciBUcmFuc2Zvcm0iKTsKICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hX RUxDT01FOwpAQCAtMTg4MSwxMCArMjE2MiwxMCBAQCBzdGF0aWMgaW50IGhsc19jb2RpbmdfdW5p dChWVkNMb2NhbENvbnRleHQgKmxjLCBpbnQgeDAsIGludCB5MCwgaW50IGNiX3dpZHRoLCBpbgog ICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gcmV0OwogCi0gICAgaWYgKGN1LT5wcmVk X21vZGUgIT0gTU9ERV9JTlRSQSAmJiAhcHJlZF9tb2RlX3BsdF9mbGFnICYmICFsYy0+Y3UtPnB1 LmdlbmVyYWxfbWVyZ2VfZmxhZykKKyAgICBpZiAoY3UtPnByZWRfbW9kZSAhPSBNT0RFX0lOVFJB ICYmIGN1LT5wcmVkX21vZGUgIT0gTU9ERV9QTFQgJiYgIWxjLT5jdS0+cHUuZ2VuZXJhbF9tZXJn ZV9mbGFnKQogICAgICAgICBjdS0+Y29kZWRfZmxhZyA9IGZmX3Z2Y19jdV9jb2RlZF9mbGFnKGxj KTsKICAgICBlbHNlCi0gICAgICAgIGN1LT5jb2RlZF9mbGFnID0gIShjdS0+c2tpcF9mbGFnIHx8 IHByZWRfbW9kZV9wbHRfZmxhZyk7CisgICAgICAgIGN1LT5jb2RlZF9mbGFnID0gIShjdS0+c2tp cF9mbGFnIHx8IGN1LT5wcmVkX21vZGUgPT0gTU9ERV9QTFQpOwogCiAgICAgaWYgKGN1LT5jb2Rl ZF9mbGFnKSB7CiAgICAgICAgIHNidF9pbmZvKGxjLCBzcHMpOwpAQCAtMTkwMiw3ICsyMTgzLDcg QEAgc3RhdGljIGludCBobHNfY29kaW5nX3VuaXQoVlZDTG9jYWxDb250ZXh0ICpsYywgaW50IHgw LCBpbnQgeTAsIGludCBjYl93aWR0aCwgaW4KICAgICAgICAgY3UtPmxmbnN0X2lkeCA9IGxmbnN0 X2lkeF9kZWNvZGUobGMpOwogICAgICAgICBjdS0+bXRzX2lkeCA9IG10c19pZHhfZGVjb2RlKGxj KTsKICAgICAgICAgc2V0X3FwX2MobGMpOwotICAgIH0gZWxzZSB7CisgICAgfSBlbHNlIGlmIChj dS0+cHJlZF9tb2RlICE9IE1PREVfUExUKSB7CiAgICAgICAgIHJldCA9IHNraXBwZWRfdHJhbnNm b3JtX3RyZWVfdW5pdChsYyk7CiAgICAgICAgIGlmIChyZXQgPCAwKQogICAgICAgICAgICAgcmV0 dXJuIHJldDsKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL2N0dS5oIGIvbGliYXZjb2RlYy92 dmMvY3R1LmgKaW5kZXggZGFiNmY0NTNmMS4uZTM3YmFjZjlkZCAxMDA2NDQKLS0tIGEvbGliYXZj b2RlYy92dmMvY3R1LmgKKysrIGIvbGliYXZjb2RlYy92dmMvY3R1LmgKQEAgLTM2LDYgKzM2LDcg QEAKICNkZWZpbmUgTUlOX0NVX1NJWkUgICAgICAgICAgICAgNAogI2RlZmluZSBNSU5fQ1VfTE9H MiAgICAgICAgICAgICAyCiAjZGVmaW5lIE1BWF9DVV9ERVBUSCAgICAgICAgICAgIDcKKyNkZWZp bmUgTUFYX1BBTEVUVEVfQ1VfU0laRSAgICAgNjQKIAogI2RlZmluZSBNQVhfUEFSVFNfSU5fQ1RV ICAgICAgICAoKE1BWF9DVFVfU0laRSA+PiBNSU5fQ1VfTE9HMikgKiAoTUFYX0NUVV9TSVpFID4+ IE1JTl9DVV9MT0cyKSkKIApAQCAtMjI0LDYgKzIyNSw3IEBAIHR5cGVkZWYgZW51bSBQcmVkRmxh ZyB7CiAgICAgUEZfTDEgICAgPSAweDIsCiAgICAgUEZfQkkgICAgPSAweDMsCiAgICAgUEZfSUJD ICAgPSBQRl9MMCB8IDB4NCwKKyAgICBQRl9QTFQgICA9IDB4OCwKIH0gUHJlZEZsYWc7CiAKIHR5 cGVkZWYgZW51bSBJbnRyYVByZWRNb2RlIHsKQEAgLTI3Nyw2ICsyNzksMTEgQEAgdHlwZWRlZiBz dHJ1Y3QgUHJlZGljdGlvblVuaXQgewogICAgIGludCBjYl9wcm9mX2ZsYWdbMl07CiB9IFByZWRp Y3Rpb25Vbml0OwogCit0eXBlZGVmIHN0cnVjdCBQYWxldHRlIHsKKyAgICB1aW50OF90IHNpemU7 CisgICAgdWludDE2X3QgZW50cmllc1tWVkNfTUFYX05VTV9QQUxFVFRFX1BSRURJQ1RPUl9TSVpF XTsKK30gUGFsZXR0ZTsKKwogdHlwZWRlZiBzdHJ1Y3QgQ29kaW5nVW5pdCB7CiAgICAgVlZDVHJl ZVR5cGUgdHJlZV90eXBlOwogICAgIGludCB4MDsKQEAgLTMyNiw2ICszMzMsOCBAQCB0eXBlZGVm IHN0cnVjdCBDb2RpbmdVbml0IHsKIAogICAgIGludDhfdCBxcFs0XTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vLzwgUXBZLCBRcOKAskNiLCBRcOKAskNyLCBRcOKAskNiQ3IK IAorICAgIFBhbGV0dGUgcGx0W1ZWQ19NQVhfU0FNUExFX0FSUkFZU107CisKICAgICBQcmVkaWN0 aW9uVW5pdCBwdTsKIAogICAgIHN0cnVjdCBDb2RpbmdVbml0ICpuZXh0OyAgICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgUmVmU3RydWN0IHJlZmVyZW5jZQpAQCAtMzU2LDYgKzM2NSw4IEBAIHR5 cGVkZWYgc3RydWN0IEVudHJ5UG9pbnQgewogCiAgICAgaW50IHN0YXRfY29lZmZbVlZDX01BWF9T QU1QTEVfQVJSQVlTXTsgICAgICAgICAgLy8vPCBTdGF0Q29lZmYKIAorICAgIFBhbGV0dGUgcHBb VlZDX01BWF9TQU1QTEVfQVJSQVlTXTsgICAgICAgICAgICAgIC8vIFBhbGV0dGVQcmVkaWN0b3IK KwogICAgIFZWQ0NhYmFjU3RhdGUgY2FiYWNfc3RhdGVbVlZDX0NPTlRFWFRTXTsKICAgICBDQUJB Q0NvbnRleHQgY2M7CiAKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnZjL2RlYy5jIGIvbGliYXZj b2RlYy92dmMvZGVjLmMKaW5kZXggMDliMDA1MzcwMy4uM2RiMmM5OTU1YyAxMDA2NDQKLS0tIGEv bGliYXZjb2RlYy92dmMvZGVjLmMKKysrIGIvbGliYXZjb2RlYy92dmMvZGVjLmMKQEAgLTU1MSw2 ICs1NTEsOSBAQCBzdGF0aWMgaW50IGVwX2luaXQoRW50cnlQb2ludCAqZXAsIGNvbnN0IGludCBj dHVfYWRkciwgY29uc3QgaW50IGN0dV9lbmQsIEdldEJpdAogICAgIGVwLT5jdHVfc3RhcnQgPSBj dHVfYWRkcjsKICAgICBlcC0+Y3R1X2VuZCAgID0gY3R1X2VuZDsKIAorICAgIGZvciAoaW50IGNf aWR4ID0gTFVNQTsgY19pZHggPD0gQ1I7IGNfaWR4KyspCisgICAgICAgIGVwLT5wcFtjX2lkeF0u c2l6ZSA9IDA7CisKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92 dmMvbXZzLmMgYi9saWJhdmNvZGVjL3Z2Yy9tdnMuYwppbmRleCA4OTQ2YjAwYjViLi4yY2Y2N2Rl ZjdiIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy9tdnMuYworKysgYi9saWJhdmNvZGVjL3Z2 Yy9tdnMuYwpAQCAtMTQ1LDcgKzE0NSw4IEBAIHN0YXRpYyBpbnQgZGVyaXZlX3RlbXBvcmFsX2Nv bG9jYXRlZF9tdnMoY29uc3QgVlZDTG9jYWxDb250ZXh0ICpsYywgTXZGaWVsZCB0ZW1wCiAgICAg UmVmUGljTGlzdCogcmVmUGljTGlzdCAgICAgID0gc2MtPnJwbDsKIAogICAgIGlmICh0ZW1wX2Nv bC5wcmVkX2ZsYWcgPT0gUEZfSU5UUkEgfHwKLSAgICAgICAgdGVtcF9jb2wucHJlZF9mbGFnID09 IFBGX0lCQykKKyAgICAgICAgdGVtcF9jb2wucHJlZF9mbGFnID09IFBGX0lCQyAgIHx8CisgICAg ICAgIHRlbXBfY29sLnByZWRfZmxhZyA9PSBQRl9QTFQpCiAgICAgICAgIHJldHVybiAwOwogCiAg ICAgaWYgKHNiX2ZsYWcpewpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dmMvdGhyZWFkLmMgYi9s aWJhdmNvZGVjL3Z2Yy90aHJlYWQuYwppbmRleCBlMWQ2NGJkM2QyLi4yMTM4MzQxYjBmIDEwMDY0 NAotLS0gYS9saWJhdmNvZGVjL3Z2Yy90aHJlYWQuYworKysgYi9saWJhdmNvZGVjL3Z2Yy90aHJl YWQuYwpAQCAtMjg2LDYgKzI4Niw3IEBAIHN0YXRpYyB2b2lkIGFkZF9wcm9ncmVzc19saXN0ZW5l cihWVkNGcmFtZSAqcmVmLCBQcm9ncmVzc0xpc3RlbmVyICpsLAogc3RhdGljIHZvaWQgZXBfaW5p dF93cHAoRW50cnlQb2ludCAqbmV4dCwgY29uc3QgRW50cnlQb2ludCAqZXAsIGNvbnN0IFZWQ1NQ UyAqc3BzKQogewogICAgIG1lbWNweShuZXh0LT5jYWJhY19zdGF0ZSwgZXAtPmNhYmFjX3N0YXRl LCBzaXplb2YobmV4dC0+Y2FiYWNfc3RhdGUpKTsKKyAgICBtZW1jcHkobmV4dC0+cHAsIGVwLT5w cCwgc2l6ZW9mKG5leHQtPnBwKSk7CiAgICAgZmZfdnZjX2VwX2luaXRfc3RhdF9jb2VmZihuZXh0 LCBzcHMtPmJpdF9kZXB0aCwgc3BzLT5yLT5zcHNfcGVyc2lzdGVudF9yaWNlX2FkYXB0YXRpb25f ZW5hYmxlZF9mbGFnKTsKIH0KIAotLSAKMi40NC4wLndpbmRvd3MuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlz dApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0 aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBl bWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJz Y3JpYmUiLgo=