From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <ffmpeg-devel-bounces@ffmpeg.org> Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id D9D464D39D for <ffmpegdev@gitmailbox.com>; Thu, 17 Apr 2025 14:40:08 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9E2B168B0EF; Thu, 17 Apr 2025 17:40:03 +0300 (EEST) Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C7E42687C6A for <ffmpeg-devel@ffmpeg.org>; Thu, 17 Apr 2025 17:39:56 +0300 (EEST) Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-39c1ee0fd43so754336f8f.0 for <ffmpeg-devel@ffmpeg.org>; Thu, 17 Apr 2025 07:39:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spectre-music.com; s=google; t=1744900796; x=1745505596; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ncgtg0cUDm+q00r+3NyuDSUfgBR1jRgz2qatNe6M4RY=; b=gQLMP2s6gGOYO0c5acPm8cSVYYPHQgkrxyAcKFczyoddWXOjpnfBPju37M+GkznKCh 3fRcQXzUkNTcuCltAJTRDjWqUkNh96vtrIhBRZUp7nm4fZmj4HLxd/wenX2Ma3QCStqI v/X7kfoPkTeiz5/4Ii2AoBF+0TA/3biCLOHAg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1744900796; x=1745505596; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ncgtg0cUDm+q00r+3NyuDSUfgBR1jRgz2qatNe6M4RY=; b=TpLgRhg/vN/dsi0RVydVvyifeDAGcrx77UEMnd0Fyow4ru3PCSBvkxKgV2+bY929sF x27Ldv3rEwaRadd1uqM8Dda+eZjYrOc5LsSapva6echbbl/BQ5Ke1/0/wYptw8Nj3CTx 3ciDUKnmIGNrJnvjbrkWR3XcmMEhs0Wm26qM0l0k4IcdE9U8X0Jz6cmtw9CvIZSTMeeS s88cWZ6Pv2Xagd1r8wcKRq9BHCUGBILgi6XIWF7CcYNnKlHXuwjrdCG37dVTt/oF1PEN edpeH/PtDXvXwO4gy9BtOEgGFN38g0yQXFIawhnwtswO/YYxBBuvHHfOQ1C+G1BJEEwO RGuw== X-Gm-Message-State: AOJu0YwtIFuKotHkt6rBrp402JBPlHIm2QqNPzZI68rUlIhvVJditwUz ejN/8fktkgtZ9C90n8ZJLLNjI//UiDURBZCW4p/8sOcfvPSdXpzTNrHdUf4d1NLNcwAHppTnKjV c X-Gm-Gg: ASbGncsdsmSGFBMuFg/31+EGbwagiNAEBQWtCsBJ6Ca/M1vZUKQhddLY2a2tPpCP9sY 2Vzj0qBqFXKYxCh5f8wx8TfyBnoNNwYOoxuivG6poL1S0DcVAWme+2MANyondrU2MMqifal602P xBq/XH6uKw+UUtY8U9njkuyt2VOaddbRpeVUXO4ZLQLKUM9bq1BvnJQsIk4r8yK5FdCMmhJbldm soOwgUkZPXOlJabN9NLw478+p9C69GKlFbxbffEDBsiuBurmywEzc8xw/XFej1S0qkoWNYFy7hf 3aLpEeT+HxZl9xzd9iBh7Ij0NOC4XDLgQ3ul7PiHTzI5+ZPlPt+BmhtobUwqIa1/ooXhb1CTolD UfsXU31IYxGoIKrT7hLCKQMj6/Xk79/VLUqET7rT9yvzMpxG1 X-Google-Smtp-Source: AGHT+IGrnl9zpi1qLXWV/ocUPPgGBsFI0rBFLAPbwXazBmjdGYGlQwGv5vaKji9yAhwa5ZKvmt7HZg== X-Received: by 2002:a05:6000:250f:b0:39b:fa24:950a with SMTP id ffacd0b85a97d-39ee5b98d66mr5435560f8f.36.1744900795859; Thu, 17 Apr 2025 07:39:55 -0700 (PDT) Received: from localhost.localdomain (amontsouris-559-1-14-136.w90-24.abo.wanadoo.fr. [90.24.141.136]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-39eae97751fsm20200040f8f.41.2025.04.17.07.39.54 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 17 Apr 2025 07:39:55 -0700 (PDT) From: gkhayat@spectre-music.com To: ffmpeg-devel@ffmpeg.org Date: Thu, 17 Apr 2025 16:33:16 +0200 Message-ID: <20250417143524.48567-3-gkhayat@spectre-music.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] libavfilter/ebur128: SIMD optimization X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org> List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe> List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel> List-Post: <mailto:ffmpeg-devel@ffmpeg.org> List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help> List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>, <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe> Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Cc: Guillaume Khayat <gkhayat@spectre-music.com>, Cesar Matheus <cesar.matheus@telecom-paris.fr> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org> Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250417143524.48567-3-gkhayat@spectre-music.com/> List-Archive: <https://master.gitmailbox.com/ffmpegdev/> List-Post: <mailto:ffmpegdev@gitmailbox.com> RnJvbTogR3VpbGxhdW1lIEtoYXlhdCA8Z2toYXlhdEBzcGVjdHJlLW11c2ljLmNvbT4KCkltcHJv dmUgcGVyZm9ybWFuY2UgKCsxNyUpIG9mIGVidXJfMTI4IGZpbHRlciB1c2luZyBBVlgyIGFuZCBG TUEgaW5zdHJ1Y3Rpb24gaW4gdGhlIGJvZHkgb2YgdGhlIGZpbHRlcl9mcmFtZSBmdW5jdGlvbi4K CiMjIEJlbmNobWFyawoKVGVzdGVkIHdpdGggaHlwZXJmaW5lCgpoeXBlcmZpbmUgLS13YXJtdXAg MiAiLi9mZm1wZWdfcmVmZXJlbmNlIC1pIH4vdGVzdC53YXYgLXZuIC1hZiBlYnVyMTI4PXBlYWs9 bm9uZTpmcmFtZWxvZz1xdWlldCAtZiBudWxsIC0iICIuL2ZmbXBlZ19hdnggLWkgfi90ZXN0Lndh diAtdm4gLWFmIGVidXIxMjg9cGVhaz1ub25lOmZyYW1lbG9nPXF1aWV0IC1mIG51bGwgLSIKQmVu Y2htYXJrIDE6IC4vZmZtcGVnX3JlZmVyZW5jZSAtaSB+L3Rlc3Qud2F2IC12biAtYWYgZWJ1cjEy OD1wZWFrPW5vbmU6ZnJhbWVsb2c9cXVpZXQgLWYgbnVsbCAtCiAgVGltZSAobWVhbiDCsSDPgyk6 ICAgICAgNy4xMTggcyDCsSAgMC4wMzcgcyAgICBbVXNlcjogOS4xMTQgcywgU3lzdGVtOiAxLjAz OCBzXQogIFJhbmdlIChtaW4g4oCmIG1heCk6ICAgIDcuMDczIHMg4oCmICA3LjE3NyBzICAgIDEw IHJ1bnMKIApCZW5jaG1hcmsgMjogLi9mZm1wZWdfYXZ4IC1pIH4vdGVzdC53YXYgLXZuIC1hZiBl YnVyMTI4PXBlYWs9bm9uZTpmcmFtZWxvZz1xdWlldCAtZiBudWxsIC0KICBUaW1lIChtZWFuIMKx IM+DKTogICAgICA2LjA3MyBzIMKxICAwLjEwOCBzICAgIFtVc2VyOiA3LjkwMyBzLCBTeXN0ZW06 IDEuMDU4IHNdCiAgUmFuZ2UgKG1pbiDigKYgbWF4KTogICAgNS45NTUgcyDigKYgIDYuMzI3IHMg ICAgMTAgcnVucwogClN1bW1hcnkKICAuL2ZmbXBlZ19hdnggLWkgfi90ZXN0LndhdiAtdm4gLWFm IGVidXIxMjg9cGVhaz1ub25lOmZyYW1lbG9nPXF1aWV0IC1mIG51bGwgLSByYW4KICAgIDEuMTcg wrEgMC4wMiB0aW1lcyBmYXN0ZXIgdGhhbiAuL2ZmbXBlZ19yZWZlcmVuY2UgLWkgfi90ZXN0Lndh diAtdm4gLWFmIGVidXIxMjg9cGVhaz1ub25lOmZyYW1lbG9nPXF1aWV0IC1mIG51bGwgLQoKIyMg VGVzdHMKCi0gYWxsIEZBVEUgdGVzdHMgcGFzcywgdGVzdGVkIG9uIERhcndpbi9hcm02NCBhbmQg TGludXgveDg2XzY0IHcvIEFWWDIvRk1BIHN1cHBvcnQKLSBPbiBBVlgyL0ZNQS1jYXBhYmxlIHN5 c3RlbSwgYWxsIHRlc3QgZmlsZXMgZnJvbSB0aGUgRUJVIHlpZWxkIHRoZSBleGFjdCBzYW1lIG91 dHB1dCB2YWx1ZXMgKEkvTFJBKSBhZnRlciBhbmQgYmVmb3JlIG9wdGltaXphdGlvbi4gU2VlIGh0 dHBzOi8vdGVjaC5lYnUuY2gvcHVibGljYXRpb25zL2VidV9sb3VkbmVzc190ZXN0X3NldAoKRGlz Y2xhaW1lcjogdGhpcyBpcyBteSBmaXJzdCBldmVyIHBhdGNoIHN1Ym1pc3Npb24gdG8gRkZtcGVn LCBhbmQgZmlyc3QgZXZlciB0aW1lIHVzaW5nIGdpdCBzZW5kLWVtYWlsIHRvIHN1Ym1pdCBhIHBh dGNoIGFueXdoZXJlLgoKU2lnbmVkLW9mZi1ieTogQ2VzYXIgTWF0aGV1cyA8Y2VzYXIubWF0aGV1 c0B0ZWxlY29tLXBhcmlzLmZyPgpTaWduZWQtb2ZmLWJ5OiBHdWlsbGF1bWUgS2hheWF0IDxna2hh eWF0QHNwZWN0cmUtbXVzaWMuY29tPgotLS0KIGxpYmF2ZmlsdGVyL2ZfZWJ1cjEyOC5jIHwgMjQ2 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCAyMTQgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliYXZm aWx0ZXIvZl9lYnVyMTI4LmMgYi9saWJhdmZpbHRlci9mX2VidXIxMjguYwppbmRleCA3NjhmMDYy YmFjLi5lMzA1YjBhM2NlIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9mX2VidXIxMjguYworKysg Yi9saWJhdmZpbHRlci9mX2VidXIxMjguYwpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSA8 ZmxvYXQuaD4KICNpbmNsdWRlIDxtYXRoLmg+Ci0KKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50bWF0 aC5oIgogI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgogI2luY2x1ZGUgImxpYmF2dXRp bC9jaGFubmVsX2xheW91dC5oIgogI2luY2x1ZGUgImxpYmF2dXRpbC9kaWN0LmgiCkBAIC0xOTks NyArMTk5LDcgQEAgc3RhdGljIGNvbnN0IEFWT3B0aW9uIGVidXIxMjhfb3B0aW9uc1tdID0gewog fTsKIAogQVZGSUxURVJfREVGSU5FX0NMQVNTKGVidXIxMjgpOwotCisjZGVmaW5lIE1JTihhLCBi KSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQogc3RhdGljIGNvbnN0IHVpbnQ4X3QgZ3JhcGhfY29s b3JzW10gPSB7CiAgICAgMHhkZCwgMHg2NiwgMHg2NiwgICAvLyB2YWx1ZSBhYm92ZSAxTFUgbm9u IHJlYWNoZWQgYmVsb3cgLTFMVSAoaW1wb3NzaWJsZSkKICAgICAweDY2LCAweDY2LCAweGRkLCAg IC8vIHZhbHVlIGJlbG93IDFMVSBub24gcmVhY2hlZCBiZWxvdyAtMUxVCkBAIC02MjgsMTMgKzYy OCw2MSBAQCBzdGF0aWMgaW50IGdhdGVfdXBkYXRlKHN0cnVjdCBpbnRlZ3JhdG9yICppbnRlZywg ZG91YmxlIHBvd2VyLAogCiBzdGF0aWMgaW50IGZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmlu bGluaywgQVZGcmFtZSAqaW5zYW1wbGVzKQogewotICAgIGludCBpLCBjaCwgaWR4X2luc2FtcGxl LCByZXQ7CisKKyAgICBpbnQgaSwgY2gsIGlkeF9pbnNhbXBsZSwgcmV0LGJpbl9pZF80MDAsYmlu X2lkXzMwMDA7CiAgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBpbmxpbmstPmRzdDsKICAgICBF QlVSMTI4Q29udGV4dCAqZWJ1cjEyOCA9IGN0eC0+cHJpdjsKICAgICBjb25zdCBpbnQgbmJfY2hh bm5lbHMgPSBlYnVyMTI4LT5uYl9jaGFubmVsczsKICAgICBjb25zdCBpbnQgbmJfc2FtcGxlcyAg PSBpbnNhbXBsZXMtPm5iX3NhbXBsZXM7CiAgICAgY29uc3QgZG91YmxlICpzYW1wbGVzID0gKGRv dWJsZSAqKWluc2FtcGxlcy0+ZGF0YVswXTsKICAgICBBVkZyYW1lICpwaWM7CisgICAgICAgIAor I2lmIEhBVkVfQVZYMl9FWFRFUk5BTCAmJiBIQVZFX0FWWDIKKyAgICAgICAgZG91YmxlIGJpbls0 XTsKKyAgICAgICAgX19tMjU2ZCBwcmVfYl8wLHByZV9iXzEscHJlX2JfMixwcmVfYV8xLHByZV9h XzIscmxiX2JfMCxybGJfYl8xLHJsYl9iXzIscmxiX2FfMSxybGJfYV8yLHgxLHgyLHgwLHkxLHky LHkwLHoxLHoyLHowOyAvLworCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgZWFjaCBjb2Vl ZmljaWVudHMgdmFsdWUgb2YgcHJlX2IscHJlX2EscmxiX2IsIHJsYl9hIGFzIHZlY3RvciB2YXJp YWJsZSBvZiBzaXplIDQsIGVhY2ggZWxlbWVudAorICAgICAgICAgKiBvZiB0aGUgdmVjdG9ycyBj b3JyZXNwb25kcyB0byBhIGNoYW5uZWwsIGhlcmUgd2UgY29kZWQgdGhlIGNhc2Ugd2hlcmUgdGhl cmUgaXMgMiBjaGFubmVsIHRvIGRlYWwgd2l0aCwgY2FzZSB3aGVyZSBuYl9jaGFubmVsID0zIG9y IAorICAgICAgICAgKiA0IGNhbiBlYXNpbHkgYmUgaW1wbGVtZW50ZWQgZm9sbG93aW5nIHRoZSBl eGFjdCBzYW1lIG1ldGhvZG9sb2d5CisgICAgICAgICAqLworCisgICAgICAgIC8vIENhc2Ugd2hl cmUgbmJfY2hhbm5lbCA9IDMgOiBwcmVfYl8wID0gX21tMjU2X3NldHJfcHMoZWJ1cjEyOC0+cHJl X2JbMF0sZWJ1cjEyOC0+cHJlX2JbMF0sIGVidXIxMjgtPnByZV9iWzBdLCAwLjApOworICAgICAg ICBiaW5bMF0gPSAwLjA7CisgICAgICAgIGJpblsxXSA9IDAuMDsKKyAgICAgICAgYmluWzJdID0g MC4wOworICAgICAgICBiaW5bM10gPSAwLjA7CisKKyAgICAgICAgLy8gTG9hZCBwcmVfYiBjb2Vm ZmljaWVudHMgaW4gMyA0KjY0IGJpdHMgdmVjdG9yCisgICAgICAgIHByZV9iXzAgPSBfbW0yNTZf c2V0MV9wZChlYnVyMTI4LT5wcmVfYlswXSk7CisgICAgICAgIHByZV9iXzEgPSBfbW0yNTZfc2V0 MV9wZChlYnVyMTI4LT5wcmVfYlsxXSk7CisgICAgICAgIHByZV9iXzIgPSBfbW0yNTZfc2V0MV9w ZChlYnVyMTI4LT5wcmVfYlsyXSk7CisKKyAgICAgICAgLy8gTG9hZCBwcmVfYSBjb2VmZmljaWVu dHMgaW4gMiA0KjY0IGJpdHMgdmVjdG9yIHByZV9hXzAgaXMgbm90IHVzZWQgaGVyZSBzbyBubyBu ZWVkIHRvIGxhZCBpdAorICAgICAgICBwcmVfYV8xID0gX21tMjU2X3NldDFfcGQoZWJ1cjEyOC0+ cHJlX2FbMV0pOworICAgICAgICBwcmVfYV8yID0gX21tMjU2X3NldDFfcGQoZWJ1cjEyOC0+cHJl X2FbMl0pOworCisgICAgICAgIC8vIExvYWQgcmxiX2IgCisgICAgICAgIHJsYl9iXzAgPSBfbW0y NTZfc2V0MV9wZChlYnVyMTI4LT5ybGJfYlswXSk7CisgICAgICAgIHJsYl9iXzEgPSBfbW0yNTZf c2V0MV9wZChlYnVyMTI4LT5ybGJfYlsxXSk7CisgICAgICAgIHJsYl9iXzIgPSBfbW0yNTZfc2V0 MV9wZChlYnVyMTI4LT5ybGJfYlsyXSk7CisKKyAgICAgICAgLy8gTG9hZCBybGJfYQorICAgICAg ICBybGJfYV8xID0gX21tMjU2X3NldDFfcGQoZWJ1cjEyOC0+cmxiX2FbMV0pOworICAgICAgICBy bGJfYV8yID0gX21tMjU2X3NldDFfcGQoZWJ1cjEyOC0+cmxiX2FbMl0pOworCisgICAgICAgIC8v IEF0IHRoZSBzdGFydCBhbGwgdGhlIGJ1ZmZlciBmaWx0ZXIgYXJlIHNldCBhdCAwIGluIHRoZSBz dGFydAorICAgICAgICB4MSA9IF9tbTI1Nl9zZXQxX3BkKDAuMCk7CisgICAgICAgIHgyID0gX21t MjU2X3NldDFfcGQoMC4wKTsKKworICAgICAgICB5MCA9IF9tbTI1Nl9zZXQxX3BkKDAuMCk7Cisg ICAgICAgIHkxID0gX21tMjU2X3NldDFfcGQoMC4wKTsKKyAgICAgICAgeTIgPSBfbW0yNTZfc2V0 MV9wZCgwLjApOworCisgICAgICAgIHowID1fbW0yNTZfc2V0MV9wZCgwLjApOworICAgICAgICB6 MSA9IF9tbTI1Nl9zZXQxX3BkKDAuMCk7CisgICAgICAgIHoyID0gX21tMjU2X3NldDFfcGQoMC4w KTsKKyNlbmRpZgogCiAjaWYgQ09ORklHX1NXUkVTQU1QTEUKICAgICBpZiAoZWJ1cjEyOC0+cGVh a19tb2RlICYgUEVBS19NT0RFX1RSVUVfUEVBS1MgJiYgZWJ1cjEyOC0+aWR4X2luc2FtcGxlID09 IDApIHsKQEAgLTY1Nyw4ICs3MDUsOCBAQCBzdGF0aWMgaW50IGZpbHRlcl9mcmFtZShBVkZpbHRl ckxpbmsgKmlubGluaywgQVZGcmFtZSAqaW5zYW1wbGVzKQogI2VuZGlmCiAKICAgICBmb3IgKGlk eF9pbnNhbXBsZSA9IGVidXIxMjgtPmlkeF9pbnNhbXBsZTsgaWR4X2luc2FtcGxlIDwgbmJfc2Ft cGxlczsgaWR4X2luc2FtcGxlKyspIHsKLSAgICAgICAgY29uc3QgaW50IGJpbl9pZF80MDAgID0g ZWJ1cjEyOC0+aTQwMC5jYWNoZV9wb3M7Ci0gICAgICAgIGNvbnN0IGludCBiaW5faWRfMzAwMCA9 IGVidXIxMjgtPmkzMDAwLmNhY2hlX3BvczsKKyAgICAgICAgYmluX2lkXzQwMCAgPSBlYnVyMTI4 LT5pNDAwLmNhY2hlX3BvczsKKyAgICAgICAgYmluX2lkXzMwMDAgPSBlYnVyMTI4LT5pMzAwMC5j YWNoZV9wb3M7CiAKICNkZWZpbmUgTU9WRV9UT19ORVhUX0NBQ0hFRF9FTlRSWSh0aW1lKSBkbyB7 ICAgICAgICAgICAgICAgIFwKICAgICBlYnVyMTI4LT5pIyN0aW1lLmNhY2hlX3BvcysrOyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTY3MSw0NiArNzE5LDE4MCBAQCBzdGF0aWMgaW50 IGZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmlubGluaywgQVZGcmFtZSAqaW5zYW1wbGVzKQog CiAgICAgICAgIE1PVkVfVE9fTkVYVF9DQUNIRURfRU5UUlkoNDAwKTsKICAgICAgICAgTU9WRV9U T19ORVhUX0NBQ0hFRF9FTlRSWSgzMDAwKTsKKyAgICAgICAgCisjaWYgSEFWRV9BVlgyX0VYVEVS TkFMICYmIEhBVkVfQVZYMgorICAgICAgICAvLyBQZXJmb3JtcyBmaWx0ZXIgY29tcHV0YXRpb24g aW4gcGFyYWxsZWwgZm9yIHRoZSBmaXJzdCA0IGNoYW5uZWxzIG9mIHRoZSBhdWRpbyBmaWxlCisg ICAgICAgIGZvciAoY2ggPSAwOyBjaCA8IE1JTig0LG5iX2NoYW5uZWxzKTsgY2grKykgeworICAg ICAgICAgICAgaWYgKGVidXIxMjgtPnBlYWtfbW9kZSAmIFBFQUtfTU9ERV9TQU1QTEVTX1BFQUtT KXsKKyAgICAgICAgICAgICAgICBlYnVyMTI4LT5zYW1wbGVfcGVha3NbY2hdID0gRkZNQVgoZWJ1 cjEyOC0+c2FtcGxlX3BlYWtzWzBdLCBmYWJzKHNhbXBsZXNbaWR4X2luc2FtcGxlICogbmJfY2hh bm5lbHMgXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJpbltjaF0gPSBzYW1w bGVzW2lkeF9pbnNhbXBsZSAqIG5iX2NoYW5uZWxzICtjaCBdOworICAgICAgICB9CisKKyAgICAg ICAgLy8gSW5pdGlhbGlzZSB4MAorICAgICAgICB4MCA9IF9tbTI1Nl9zZXRyX3BkKGJpblswXSxi aW5bMV0sIGJpblsyXSxiaW5bM10pOyAgCisgICAgICAgIHkyID0geTE7CisgICAgICAgIHkxID0g eTA7CisgICAgICAgIHkwID0gX21tMjU2X2ZtYWRkX3BkKHgwLHByZV9iXzAsX21tMjU2X2ZtYWRk X3BkKHgxLHByZV9iXzEsX21tMjU2X2ZtYWRkX3BkKHgyLHByZV9iXzIsX21tMjU2X2ZubXN1Yl9w ZCh5MSxwcmVfYV8xLF9tbTI1Nl9tdWxfcGQoeTIscHJlX2FfMikpKSkpOworCisKKyAgICAgICAg eDIgPSB4MTsKKyAgICAgICAgeDEgPSB4MDsKKworICAgICAgICB6MiA9IHoxOworICAgICAgICB6 MSA9IHowOworCisgICAgICAgIHowID0gX21tMjU2X2ZtYWRkX3BkKHkwLHJsYl9iXzAsX21tMjU2 X2ZtYWRkX3BkKHkxLHJsYl9iXzEsX21tMjU2X2ZtYWRkX3BkKHkyLHJsYl9iXzIsX21tMjU2X2Zu bXN1Yl9wZCh6MSxybGJfYV8xLF9tbTI1Nl9tdWxfcGQoejIscmxiX2FfMikpKSkpOworICAgICAg ICAgICAKKworICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZmlsdGVyZWQgdmFsdWVzIHN0b3JlZCBp biBaMCwgYmluW2ldIGdldHMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNoYW5uZWwg aSAgICAgIAorICAgICAgICBfbW0yNTZfc3RvcmVfcGQoYmluLCBfbW0yNTZfbXVsX3BkKHowLCB6 MCkpOworCisKKworICAgICAgICAvKioKKyAgICAgICAgICogQWRkIHRoZSBuZXcgdmFsdWUsIGFu ZCBsaW1pdCB0aGUgc3VtIHRvIHRoZSBjYWNoZSBzaXplICg0MDBtcyBvciAzcykKKyAgICAgICAg ICogYnkgcmVtb3ZpbmcgdGhlIG9sZGVzdCBvbmUKKyAgICAgICAgICogdXBkYXRlIHN1bSBhbmQg Y2FjaGUsIGRlbWFuZGluZyBvbiB0aGUgbnVtYmVyIG9mIGNoYW5uZWwKKyAgICAgICAgICovCisg ICAgICAgIHN3aXRjaChuYl9jaGFubmVscyl7CisgICAgICAgICAgICBjYXNlIDE6IAorCisgICAg ICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5zdW0gWzBdID0gZWJ1cjEyOC0+aTQwMC5zdW0gWzBd ICsgYmluWzBdIC0gZWJ1cjEyOC0+aTQwMC5jYWNoZSBbMF1bYmluX2lkXzQwMF07CisgICAgICAg ICAgICAgICAgZWJ1cjEyOC0+aTMwMDAuc3VtWzBdID0gZWJ1cjEyOC0+aTMwMDAuc3VtWzBdICsg YmluWzBdIC0gZWJ1cjEyOC0+aTMwMDAuY2FjaGVbMF1bYmluX2lkXzMwMDBdOworICAgICAgICAg ICAgICAgIGVidXIxMjgtPmk0MDAuY2FjaGUgWzBdW2Jpbl9pZF80MDAgXSA9IGJpblswXTsKKyAg ICAgICAgICAgICAgICBlYnVyMTI4LT5pMzAwMC5jYWNoZVswXVtiaW5faWRfMzAwMF0gPSBiaW5b MF07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IAorCisgICAg ICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5zdW0gWzBdID0gZWJ1cjEyOC0+aTQwMC5zdW0gWzBd ICsgYmluWzBdIC0gZWJ1cjEyOC0+aTQwMC5jYWNoZSBbMF1bYmluX2lkXzQwMF07CisgICAgICAg ICAgICAgICAgZWJ1cjEyOC0+aTMwMDAuc3VtWzBdID0gZWJ1cjEyOC0+aTMwMDAuc3VtWzBdICsg YmluWzBdIC0gZWJ1cjEyOC0+aTMwMDAuY2FjaGVbMF1bYmluX2lkXzMwMDBdOworCisgICAgICAg ICAgICAgICAgZWJ1cjEyOC0+aTQwMC5jYWNoZSBbMF1bYmluX2lkXzQwMCBdID0gYmluWzBdOwor ICAgICAgICAgICAgICAgIGVidXIxMjgtPmkzMDAwLmNhY2hlWzBdW2Jpbl9pZF8zMDAwXSA9IGJp blswXTsKKworICAgICAgICAgICAgICAgIGVidXIxMjgtPmk0MDAuc3VtIFsxXSA9IGVidXIxMjgt Pmk0MDAuc3VtIFsxXSArIGJpblsxXSAtIGVidXIxMjgtPmk0MDAuY2FjaGUgWzFdW2Jpbl9pZF80 MDBdOworICAgICAgICAgICAgICAgIGVidXIxMjgtPmkzMDAwLnN1bVsxXSA9IGVidXIxMjgtPmkz MDAwLnN1bVsxXSArIGJpblsxXSAtIGVidXIxMjgtPmkzMDAwLmNhY2hlWzFdW2Jpbl9pZF8zMDAw XTsKIAotICAgICAgICBmb3IgKGNoID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykgewotICAg ICAgICAgICAgZG91YmxlIGJpbjsKIAorICAgICAgICAgICAgICAgIGVidXIxMjgtPmk0MDAuY2Fj aGUgWzFdW2Jpbl9pZF80MDAgXSA9IGJpblsxXTsKKyAgICAgICAgICAgICAgICBlYnVyMTI4LT5p MzAwMC5jYWNoZVsxXVtiaW5faWRfMzAwMF0gPSBiaW5bMV07CisgICAgICAgICAgICAgICAgYnJl YWs7CisKKyAgICAgICAgICAgIGNhc2UgMzoKKworICAgICAgICAgICAgICAgIGVidXIxMjgtPmk0 MDAuc3VtIFswXSA9IGVidXIxMjgtPmk0MDAuc3VtIFswXSArIGJpblswXSAtIGVidXIxMjgtPmk0 MDAuY2FjaGUgWzBdW2Jpbl9pZF80MDBdOworICAgICAgICAgICAgICAgIGVidXIxMjgtPmkzMDAw LnN1bVswXSA9IGVidXIxMjgtPmkzMDAwLnN1bVswXSArIGJpblswXSAtIGVidXIxMjgtPmkzMDAw LmNhY2hlWzBdW2Jpbl9pZF8zMDAwXTsKKyAgICAgICAgICAgICAgICBlYnVyMTI4LT5pNDAwLmNh Y2hlIFswXVtiaW5faWRfNDAwIF0gPSBiaW5bMF07CisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+ aTMwMDAuY2FjaGVbMF1bYmluX2lkXzMwMDBdID0gYmluWzBdOworCisgICAgICAgICAgICAgICAg ZWJ1cjEyOC0+aTQwMC5zdW0gWzFdID0gZWJ1cjEyOC0+aTQwMC5zdW0gWzFdICsgYmluWzFdIC0g ZWJ1cjEyOC0+aTQwMC5jYWNoZSBbMV1bYmluX2lkXzQwMF07CisgICAgICAgICAgICAgICAgZWJ1 cjEyOC0+aTMwMDAuc3VtWzFdID0gZWJ1cjEyOC0+aTMwMDAuc3VtWzFdICsgYmluWzFdIC0gZWJ1 cjEyOC0+aTMwMDAuY2FjaGVbMV1bYmluX2lkXzMwMDBdOworICAgICAgICAgICAgICAgIGVidXIx MjgtPmk0MDAuY2FjaGUgWzFdW2Jpbl9pZF80MDAgXSA9IGJpblsxXTsKKyAgICAgICAgICAgICAg ICBlYnVyMTI4LT5pMzAwMC5jYWNoZVsxXVtiaW5faWRfMzAwMF0gPSBiaW5bMV07CisKKyAgICAg ICAgICAgICAgICBlYnVyMTI4LT5pNDAwLnN1bSBbMl0gPSBlYnVyMTI4LT5pNDAwLnN1bSBbMl0g KyBiaW5bMl0gLSBlYnVyMTI4LT5pNDAwLmNhY2hlIFsyXVtiaW5faWRfNDAwXTsKKyAgICAgICAg ICAgICAgICBlYnVyMTI4LT5pMzAwMC5zdW1bMl0gPSBlYnVyMTI4LT5pMzAwMC5zdW1bMl0gKyBi aW5bMl0gLSBlYnVyMTI4LT5pMzAwMC5jYWNoZVsyXVtiaW5faWRfMzAwMF07CisgICAgICAgICAg ICAgICAgZWJ1cjEyOC0+aTQwMC5jYWNoZSBbMl1bYmluX2lkXzQwMCBdID0gYmluWzJdOworICAg ICAgICAgICAgICAgIGVidXIxMjgtPmkzMDAwLmNhY2hlWzJdW2Jpbl9pZF8zMDAwXSA9IGJpblsy XTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdCA6CisgICAg ICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5zdW1bMF0gPSBlYnVyMTI4LT5pNDAwLnN1bSBbMF0g KyBiaW5bMF0gLSBlYnVyMTI4LT5pNDAwLmNhY2hlIFswXVtiaW5faWRfNDAwXTsKKyAgICAgICAg ICAgICAgICBlYnVyMTI4LT5pMzAwMC5zdW1bMF0gPSBlYnVyMTI4LT5pMzAwMC5zdW1bMF0gKyBi aW5bMF0gLSBlYnVyMTI4LT5pMzAwMC5jYWNoZVswXVtiaW5faWRfMzAwMF07CisgICAgICAgICAg ICAgICAgZWJ1cjEyOC0+aTQwMC5jYWNoZVswXVtiaW5faWRfNDAwIF0gPSBiaW5bMF07CisgICAg ICAgICAgICAgICAgZWJ1cjEyOC0+aTMwMDAuY2FjaGVbMF1bYmluX2lkXzMwMDBdID0gYmluWzBd OworCisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5zdW1bMV0gPSBlYnVyMTI4LT5pNDAw LnN1bSBbMV0gKyBiaW5bMV0gLSBlYnVyMTI4LT5pNDAwLmNhY2hlIFsxXVtiaW5faWRfNDAwXTsK KyAgICAgICAgICAgICAgICBlYnVyMTI4LT5pMzAwMC5zdW1bMV0gPSBlYnVyMTI4LT5pMzAwMC5z dW1bMV0gKyBiaW5bMV0gLSBlYnVyMTI4LT5pMzAwMC5jYWNoZVsxXVtiaW5faWRfMzAwMF07Cisg ICAgICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5jYWNoZVsxXVtiaW5faWRfNDAwIF0gPSBiaW5b MV07CisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+aTMwMDAuY2FjaGVbMV1bYmluX2lkXzMwMDBd ID0gYmluWzFdOworCisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5zdW1bMl0gPSBlYnVy MTI4LT5pNDAwLnN1bSBbMl0gKyBiaW5bMl0gLSBlYnVyMTI4LT5pNDAwLmNhY2hlIFsyXVtiaW5f aWRfNDAwXTsKKyAgICAgICAgICAgICAgICBlYnVyMTI4LT5pMzAwMC5zdW1bMl0gPSBlYnVyMTI4 LT5pMzAwMC5zdW1bMl0gKyBiaW5bMl0gLSBlYnVyMTI4LT5pMzAwMC5jYWNoZVsyXVtiaW5faWRf MzAwMF07CisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5jYWNoZVsyXVtiaW5faWRfNDAw IF0gPSBiaW5bMl07CisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+aTMwMDAuY2FjaGVbMl1bYmlu X2lkXzMwMDBdID0gYmluWzJdOworCisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5zdW1b M10gPSBlYnVyMTI4LT5pNDAwLnN1bSBbM10gKyBiaW5bM10gLSBlYnVyMTI4LT5pNDAwLmNhY2hl IFszXVtiaW5faWRfNDAwXTsKKyAgICAgICAgICAgICAgICBlYnVyMTI4LT5pMzAwMC5zdW1bM10g PSBlYnVyMTI4LT5pMzAwMC5zdW1bM10gKyBiaW5bM10gLSBlYnVyMTI4LT5pMzAwMC5jYWNoZVsz XVtiaW5faWRfMzAwMF07CisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5jYWNoZSBbM11b YmluX2lkXzQwMCBdID0gYmluWzNdOworICAgICAgICAgICAgICAgIGVidXIxMjgtPmkzMDAwLmNh Y2hlWzNdW2Jpbl9pZF8zMDAwXSA9IGJpblszXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgICAgICAvLyBVc2UgdGhlIGNsYXNzaWMgdmVyc2lvbiB0byBjb21wdXRlIGRh dGEgZnJvbSB0aGUgcmVtYWluaW5ncyBjaGFubmVscworICAgICAgICBmb3IgKGNoID0gNDsgY2gg PCBuYl9jaGFubmVsczsgY2grKykgeworICAgICAgICAgICAgZG91YmxlIGJpbjI7CiAgICAgICAg ICAgICBpZiAoZWJ1cjEyOC0+cGVha19tb2RlICYgUEVBS19NT0RFX1NBTVBMRVNfUEVBS1MpCiAg ICAgICAgICAgICAgICAgZWJ1cjEyOC0+c2FtcGxlX3BlYWtzW2NoXSA9IEZGTUFYKGVidXIxMjgt PnNhbXBsZV9wZWFrc1tjaF0sIGZhYnMoc2FtcGxlc1tpZHhfaW5zYW1wbGUgKiBuYl9jaGFubmVs cyArIGNoXSkpOwogCiAgICAgICAgICAgICBlYnVyMTI4LT54W2NoICogM10gPSBzYW1wbGVzW2lk eF9pbnNhbXBsZSAqIG5iX2NoYW5uZWxzICsgY2hdOyAvLyBzZXQgWFtpXQotCiAgICAgICAgICAg ICBpZiAoIWVidXIxMjgtPmNoX3dlaWdodGluZ1tjaF0pCiAgICAgICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICAgICAgICAgCisgICAgI2RlZmluZSBGSUxURVIoWSwgWCwgTlVNLCBERU4p IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgZG91YmxlICpkc3QgPSBlYnVyMTI4LT5ZICsgY2gqMzsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZG91YmxlICpzcmMgPSBl YnVyMTI4LT5YICsgY2gqMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgICAgICAgICAgZHN0WzJdID0gZHN0WzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZHN0WzFdID0gZHN0 WzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICAgICAgZHN0WzBdID0gc3JjWzBdKk5VTVswXSArIHNyY1sxXSpOVU1bMV0g KyBzcmNbMl0qTlVNWzJdICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtIGRzdFsxXSpERU5bMV0gLSBkc3RbMl0qREVOWzJdOyAgICAgICAgICAg ICBcCisgICAgfSB3aGlsZSAoMCkKKworICAgICAgICAgICAgICAgIC8vIFRPRE86IG1lcmdlIGJv dGggZmlsdGVycyBpbiBvbmU/CisgICAgICAgICAgICAgICAgRklMVEVSKHksIHgsIGVidXIxMjgt PnByZV9iLCBlYnVyMTI4LT5wcmVfYSk7ICAvLyBhcHBseSBwcmUtZmlsdGVyCisgICAgICAgICAg ICAgICAgZWJ1cjEyOC0+eFtjaCAqIDMgKyAyXSA9IGVidXIxMjgtPnhbY2ggKiAzICsgMV07Cisg ICAgICAgICAgICAgICAgZWJ1cjEyOC0+eFtjaCAqIDMgKyAxXSA9IGVidXIxMjgtPnhbY2ggKiAz ICAgIF07CisgICAgICAgICAgICAgICAgRklMVEVSKHosIHksIGVidXIxMjgtPnJsYl9iLCBlYnVy MTI4LT5ybGJfYSk7ICAvLyBhcHBseSBSTEItZmlsdGVyCisKKyAgICAgICAgICAgICAgICBiaW4y ID0gZWJ1cjEyOC0+eltjaCAqIDNdICogZWJ1cjEyOC0+eltjaCAqIDNdOworCisgICAgICAgICAg ICAgICAgLyogQWRkIHRoZSBuZXcgdmFsdWUsIGFuZCBsaW1pdCB0aGUgc3VtIHRvIHRoZSBjYWNo ZSBzaXplICg0MDBtcyBvciAzcykKKyAgICAgICAgICAgICAgICAgKiBieSByZW1vdmluZyB0aGUg b2xkZXN0IG9uZSAqLworICAgICAgICAgICAgICAgIGVidXIxMjgtPmk0MDAuc3VtIFtjaF0gPSBl YnVyMTI4LT5pNDAwLnN1bSBbY2hdICsgYmluMiAtIGVidXIxMjgtPmk0MDAuY2FjaGUgW2NoXVti aW5faWRfNDAwXTsKKyAgICAgICAgICAgICAgICBlYnVyMTI4LT5pMzAwMC5zdW1bY2hdID0gZWJ1 cjEyOC0+aTMwMDAuc3VtW2NoXSArIGJpbjIgLSBlYnVyMTI4LT5pMzAwMC5jYWNoZVtjaF1bYmlu X2lkXzMwMDBdOworCisgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgb2xkIGNhY2hlIGVudHJ5 IHdpdGggdGhlIG5ldyB2YWx1ZQorICAgICAgICAgICAgICAgIGVidXIxMjgtPmk0MDAuY2FjaGUg W2NoXVtiaW5faWRfNDAwIF0gPSBiaW4yOworICAgICAgICAgICAgICAgIGVidXIxMjgtPmkzMDAw LmNhY2hlW2NoXVtiaW5faWRfMzAwMF0gPSBiaW4yOworICAgICAgICB9CiAKLSAgICAgICAgICAg IC8qIFlbaV0gPSBYW2ldKmIwICsgWFtpLTFdKmIxICsgWFtpLTJdKmIyIC0gWVtpLTFdKmExIC0g WVtpLTJdKmEyICovCi0jZGVmaW5lIEZJTFRFUihZLCBYLCBOVU0sIERFTikgZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGRvdWJs ZSAqZHN0ID0gZWJ1cjEyOC0+WSArIGNoKjM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgICAgICAgICAgZG91YmxlICpzcmMgPSBlYnVyMTI4LT5YICsgY2gqMzsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBkc3RbMl0gPSBk c3RbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgIGRzdFsxXSA9IGRzdFswXTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZHN0WzBdID0gc3JjWzBd Kk5VTVswXSArIHNyY1sxXSpOVU1bMV0gKyBzcmNbMl0qTlVNWzJdICAgICAgICAgICAgICBcCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZHN0WzFdKkRFTlsxXSAtIGRzdFsy XSpERU5bMl07ICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0KLSAgICAgICAgICAgIC8vIFRP RE86IG1lcmdlIGJvdGggZmlsdGVycyBpbiBvbmU/Ci0gICAgICAgICAgICBGSUxURVIoeSwgeCwg ZWJ1cjEyOC0+cHJlX2IsIGVidXIxMjgtPnByZV9hKTsgIC8vIGFwcGx5IHByZS1maWx0ZXIKLSAg ICAgICAgICAgIGVidXIxMjgtPnhbY2ggKiAzICsgMl0gPSBlYnVyMTI4LT54W2NoICogMyArIDFd OwotICAgICAgICAgICAgZWJ1cjEyOC0+eFtjaCAqIDMgKyAxXSA9IGVidXIxMjgtPnhbY2ggKiAz ICAgIF07Ci0gICAgICAgICAgICBGSUxURVIoeiwgeSwgZWJ1cjEyOC0+cmxiX2IsIGVidXIxMjgt PnJsYl9hKTsgIC8vIGFwcGx5IFJMQi1maWx0ZXIKKyNlbHNlCiAKLSAgICAgICAgICAgIGJpbiA9 IGVidXIxMjgtPnpbY2ggKiAzXSAqIGVidXIxMjgtPnpbY2ggKiAzXTsKKyAgICAgICAgZm9yIChj aCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAgICAgIGRvdWJsZSBiaW47 CisgICAgICAgICAgICBpZiAoZWJ1cjEyOC0+cGVha19tb2RlICYgUEVBS19NT0RFX1NBTVBMRVNf UEVBS1MpCisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+c2FtcGxlX3BlYWtzW2NoXSA9IEZGTUFY KGVidXIxMjgtPnNhbXBsZV9wZWFrc1tjaF0sIGZhYnMoc2FtcGxlc1tpZHhfaW5zYW1wbGUgKiBu Yl9jaGFubmVscyArIGNoXSkpOwogCi0gICAgICAgICAgICAvKiBhZGQgdGhlIG5ldyB2YWx1ZSwg YW5kIGxpbWl0IHRoZSBzdW0gdG8gdGhlIGNhY2hlIHNpemUgKDQwMG1zIG9yIDNzKQotICAgICAg ICAgICAgICogYnkgcmVtb3ZpbmcgdGhlIG9sZGVzdCBvbmUgKi8KLSAgICAgICAgICAgIGVidXIx MjgtPmk0MDAuc3VtIFtjaF0gPSBlYnVyMTI4LT5pNDAwLnN1bSBbY2hdICsgYmluIC0gZWJ1cjEy OC0+aTQwMC5jYWNoZSBbY2hdW2Jpbl9pZF80MDBdOwotICAgICAgICAgICAgZWJ1cjEyOC0+aTMw MDAuc3VtW2NoXSA9IGVidXIxMjgtPmkzMDAwLnN1bVtjaF0gKyBiaW4gLSBlYnVyMTI4LT5pMzAw MC5jYWNoZVtjaF1bYmluX2lkXzMwMDBdOworICAgICAgICAgICAgZWJ1cjEyOC0+eFtjaCAqIDNd ID0gc2FtcGxlc1tpZHhfaW5zYW1wbGUgKiBuYl9jaGFubmVscyArIGNoXTsgLy8gU2V0IFhbaV0K IAotICAgICAgICAgICAgLyogb3ZlcnJpZGUgb2xkIGNhY2hlIGVudHJ5IHdpdGggdGhlIG5ldyB2 YWx1ZSAqLwotICAgICAgICAgICAgZWJ1cjEyOC0+aTQwMC5jYWNoZSBbY2hdW2Jpbl9pZF80MDAg XSA9IGJpbjsKLSAgICAgICAgICAgIGVidXIxMjgtPmkzMDAwLmNhY2hlW2NoXVtiaW5faWRfMzAw MF0gPSBiaW47CisgICAgICAgICAgICBpZiAoIWVidXIxMjgtPmNoX3dlaWdodGluZ1tjaF0pCisg ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgI2RlZmluZSBG SUxURVIoWSwgWCwgTlVNLCBERU4pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZG91YmxlICpkc3QgPSBlYnVyMTI4LT5Z ICsgY2gqMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg ICAgICAgZG91YmxlICpzcmMgPSBlYnVyMTI4LT5YICsgY2gqMzsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZHN0WzJdID0gZHN0WzFdOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICAgICAgZHN0WzFdID0gZHN0WzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZHN0WzBdID0gc3JjWzBdKk5V TVswXSArIHNyY1sxXSpOVU1bMV0gKyBzcmNbMl0qTlVNWzJdICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGRzdFsxXSpERU5bMV0gLSBkc3Rb Ml0qREVOWzJdOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworICAgICAgICAgICAg ICAgIC8vIFRPRE86IG1lcmdlIGJvdGggZmlsdGVycyBpbiBvbmU/CisgICAgICAgICAgICAgICAg RklMVEVSKHksIHgsIGVidXIxMjgtPnByZV9iLCBlYnVyMTI4LT5wcmVfYSk7ICAvLyBBcHBseSBw cmUtZmlsdGVyCisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+eFtjaCAqIDMgKyAyXSA9IGVidXIx MjgtPnhbY2ggKiAzICsgMV07CisgICAgICAgICAgICAgICAgZWJ1cjEyOC0+eFtjaCAqIDMgKyAx XSA9IGVidXIxMjgtPnhbY2ggKiAzICAgIF07CisgICAgICAgICAgICAgICAgRklMVEVSKHosIHks IGVidXIxMjgtPnJsYl9iLCBlYnVyMTI4LT5ybGJfYSk7ICAvLyBBcHBseSBSTEItZmlsdGVyCisg ICAgICAgICAgICAgICAgYmluID0gZWJ1cjEyOC0+eltjaCAqIDNdICogZWJ1cjEyOC0+eltjaCAq IDNdOworICAgICAgICAgICAgICAgIC8qIEFkZCB0aGUgbmV3IHZhbHVlLCBhbmQgbGltaXQgdGhl IHN1bSB0byB0aGUgY2FjaGUgc2l6ZSAoNDAwbXMgb3IgM3MpCisgICAgICAgICAgICAgICAgICog YnkgcmVtb3ZpbmcgdGhlIG9sZGVzdCBvbmUgKi8KKyAgICAgICAgICAgICAgICBlYnVyMTI4LT5p NDAwLnN1bSBbY2hdID0gZWJ1cjEyOC0+aTQwMC5zdW0gW2NoXSArIGJpbiAtIGVidXIxMjgtPmk0 MDAuY2FjaGUgW2NoXVtiaW5faWRfNDAwXTsKKyAgICAgICAgICAgICAgICBlYnVyMTI4LT5pMzAw MC5zdW1bY2hdID0gZWJ1cjEyOC0+aTMwMDAuc3VtW2NoXSArIGJpbiAtIGVidXIxMjgtPmkzMDAw LmNhY2hlW2NoXVtiaW5faWRfMzAwMF07CisgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgb2xk IGNhY2hlIGVudHJ5IHdpdGggdGhlIG5ldyB2YWx1ZQorICAgICAgICAgICAgICAgIGVidXIxMjgt Pmk0MDAuY2FjaGUgW2NoXVtiaW5faWRfNDAwIF0gPSBiaW47CisgICAgICAgICAgICAgICAgZWJ1 cjEyOC0+aTMwMDAuY2FjaGVbY2hdW2Jpbl9pZF8zMDAwXSA9IGJpbjsKICAgICAgICAgfQotCisj ZW5kaWYKKyAgICAgICAgCiAjZGVmaW5lIEZJTkRfUEVBSyhnbG9iYWwsIHNwLCBwdHlwZSkgZG8g eyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpbnQgY2g7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvdWJsZSBtYXhwZWFr OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0tIAoyLjQ5 LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBl Zy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1w ZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlz aXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3 aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K