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 5FC2B41A27 for ; Fri, 14 Jan 2022 16:22:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B6F1568B449; Fri, 14 Jan 2022 18:22:01 +0200 (EET) Received: from shout01.mail.de (shout01.mail.de [62.201.172.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9383768B353 for ; Fri, 14 Jan 2022 18:21:55 +0200 (EET) Received: from postfix01.mail.de (postfix01.bt.mail.de [10.0.121.125]) by shout01.mail.de (Postfix) with ESMTP id 1AEB7A1E5B for ; Fri, 14 Jan 2022 17:21:55 +0100 (CET) Received: from smtp04.mail.de (smtp04.bt.mail.de [10.0.121.214]) by postfix01.mail.de (Postfix) with ESMTP id E977E802BB for ; Fri, 14 Jan 2022 17:21:54 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mail.de; s=mailde202009; t=1642177314; bh=5H2cIkCbEtws3aRXy8XkRm1PBJa+4mZX4DGTvEI7TXo=; h=Subject:To:References:From:Date:In-Reply-To:From; b=ShCosQ8s54g3AMW+U+2ZrSzGr97G+JByZmUK31b61hiVp3rx9f44vus1wDhtVvECb nuEDXcsx6VynZPg2ULjY2AWvfGYvnckJHurTHkISzkTXJNuCGrq4brXKDnJE1M3vMb O1KoM1oJ7hdNzUySxKZ4VekrJzvZk1ZKa+VgfXmzHSC+YJdtYHfiTc9iwjkZfhslId mlvr8oGadNfds/Kf8ee3dW61r2l6ioNn0equnLlWjgG754+hBvQWIv1Wgwp94wMqPj fAlADLoATe9ZwLz8mlj3mJWb/wVLxvpZXNfLgLMhrzWCMHrhjFOnCXtXX1xAV7We20 /hLI4neS92/pA== Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by smtp04.mail.de (Postfix) with ESMTPSA id 80D20C009E for ; Fri, 14 Jan 2022 17:21:54 +0100 (CET) To: ffmpeg-devel@ffmpeg.org References: <20210115045832.76405-1-borbarak@fb.com> From: Thilo Borgmann Message-ID: <3fa8e9b2-6824-eb3a-2390-22fd024efa9f@mail.de> Date: Fri, 14 Jan 2022 17:21:53 +0100 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------DA66AE680F7175F6CE43251B" Content-Language: en-US X-purgate: clean X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate-type: clean X-purgate-Ad: Categorized by eleven eXpurgate (R) http://www.eleven.de X-purgate: This mail is considered clean (visit http://www.eleven.de for further information) X-purgate: clean X-purgate-size: 21892 X-purgate-ID: 154282::1642177314-00007C04-A283F7A0/0/0 Subject: Re: [FFmpeg-devel] [PATCH] avfilter: Added siti filter 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This is a multi-part message in MIME format. --------------DA66AE680F7175F6CE43251B Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi, Am 19.01.21 um 05:49 schrieb Lynne: > Jan 19, 2021, 01:07 by borbarak@fb.com: > >> Calculate Spatial Info (SI) and Temporal Info (TI) scores for a video, as defined >> in ITU-T P.910: Subjective video quality assessment methods for multimedia >> applications. >> >> Update: Fixed bracket style. >> > > Thanks, looks much neater now. > > > >> I'm already adding the data to the frame's metadata, is the suggestion to remove the file option altogether? >> > > Yes. We want to avoid filters having their own file in/out options rather > than using generic ones. Updated the patch to apply to git HEAD. Removed file output. Made printing summary to console optional. >> + >> +#include "libavutil/imgutils.h" >> +#include "libavutil/internal.h" >> +#include "libavutil/opt.h" >> + >> +#include "avfilter.h" >> +#include "formats.h" >> +#include "internal.h" >> +#include "video.h" >> + >> +static const int X_FILTER[9] = { >> + 1, 0, -1, >> + 2, 0, -2, >> + 1, 0, -1 >> +}; >> + >> +static const int Y_FILTER[9] = { >> + 1, 2, 1, >> + 0, 0, 0, >> + -1, -2, -1 >> +}; >> > > We have optimized assembly to apply 3x3 matrices. Check out > libavfilter/x86/vf_convolution.asm:ff_filter_3x3_sse4 > vf_convolution already applies a sobel filter that way. Maybe > look into sharing some DSP code with it? I checked a bit since I also want a common sobel for vf_edgedetect / my patch for vf_blurriness. For sobel, there is no direct asm implementation. We have a generic filter_3x3 with sse4 optimization. To use sobel with that, you'd need to run two times filter_3x3 plus one pass for gradient calculation. As another difference, this filter (SITI) does on-the-fly conversion to full-range pixel values during its sobel. While vf_edgedetect / vf_bluriness use an abbreviation for the gradients during its sobel. Which makes them both distinct enough not to fit into a general filter_3x3 or filter_sobel from vf_convolution easily (and more overhead). So I think it's not worth the effort to force them into a common function? (Especially since we don't have a sobel_sse4 or something) Patch without a common sobel attached. -Thilo --------------DA66AE680F7175F6CE43251B Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0001-lavfilter-Add-SITI-filter.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-lavfilter-Add-SITI-filter.patch" RnJvbSA0NzQ0Y2UyODlmM2RkZmQ3OTc4ODZhNjI0MDk3MWFmZjAzNTliOTM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCb3JpcyBCYXJhY2FsZG8gPGJvcmJhcmFrQGZiLmNv bT4KRGF0ZTogRnJpLCAxNCBKYW4gMjAyMiAxNjoxMTo1NCArMDEwMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBsYXZmaWx0ZXI6IEFkZCBTSVRJIGZpbHRlcgoKQ2FsY3VsYXRlIFNwYXRpYWwg SW5mbyAoU0kpIGFuZCBUZW1wb3JhbCBJbmZvIChUSSkgc2NvcmVzIGZvciBhIHZpZGVvLCBh cyBkZWZpbmVkCmluIElUVS1UIFAuOTEwOiBTdWJqZWN0aXZlIHZpZGVvIHF1YWxpdHkgYXNz ZXNzbWVudCBtZXRob2RzIGZvciBtdWx0aW1lZGlhCmFwcGxpY2F0aW9ucy4KLS0tCiBDaGFu Z2Vsb2cgICAgICAgICAgICAgICAgfCAgIDEgKwogZG9jL2ZpbHRlcnMudGV4aSAgICAgICAg IHwgIDI0ICsrKysKIGxpYmF2ZmlsdGVyL01ha2VmaWxlICAgICB8ICAgMSArCiBsaWJhdmZp bHRlci9hbGxmaWx0ZXJzLmMgfCAgIDEgKwogbGliYXZmaWx0ZXIvdmVyc2lvbi5oICAgIHwg ICAyICstCiBsaWJhdmZpbHRlci92Zl9zaXRpLmMgICAgfCAyOTYgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDMyNCBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIv dmZfc2l0aS5jCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdlbG9nCmluZGV4IDNk ZGUzMzI2YmUuLmRjYjJjMzY4ZDIgMTAwNjQ0Ci0tLSBhL0NoYW5nZWxvZworKysgYi9DaGFu Z2Vsb2cKQEAgLTEzMiw2ICsxMzIsNyBAQCB2ZXJzaW9uIDQuNDoKIC0gbXNhZCB2aWRlbyBm aWx0ZXIKIC0gZ29waGVycyBwcm90b2NvbAogLSBSSVNUIHByb3RvY29sIHZpYSBsaWJyaXN0 CistIHNpdGkgZmlsdGVyCiAKIAogdmVyc2lvbiA0LjM6CmRpZmYgLS1naXQgYS9kb2MvZmls dGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRleCAwNWQ0YjFhNTZlLi5kY2E3MTcx YTk1IDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisrKyBiL2RvYy9maWx0ZXJzLnRl eGkKQEAgLTE5ODc1LDYgKzE5ODc1LDMwIEBAIGZmbXBlZyAtaSBpbnB1dDEubWt2IC1pIGlu cHV0Mi5ta3YgLWZpbHRlcl9jb21wbGV4ICJbMDp2XVsxOnZdIHNpZ25hdHVyZT1uYl9pbnB1 CiAKIEBlbmQgaXRlbWl6ZQogCitAYW5jaG9ye3NpdGl9CitAc2VjdGlvbiBzaXRpCisKK0Nh bGN1bGF0ZSBTcGF0aWFsIEluZm8gKFNJKSBhbmQgVGVtcG9yYWwgSW5mbyAoVEkpIHNjb3Jl cyBmb3IgYSB2aWRlbywgYXMgZGVmaW5lZAoraW4gSVRVLVQgUC45MTA6IFN1YmplY3RpdmUg dmlkZW8gcXVhbGl0eSBhc3Nlc3NtZW50IG1ldGhvZHMgZm9yIG11bHRpbWVkaWEKK2FwcGxp Y2F0aW9ucy4gQXZhaWxhYmxlIFBERiBhdCBAdXJse2h0dHBzOi8vd3d3Lml0dS5pbnQvcmVj L1QtUkVDLVAuOTEwLTE5OTkwOS1TL2VuIH0uCitQZXIgZnJhbWUgbWV0cmljcyBjYW4gYmUg d3JpdHRlbiBpbnRvIGEgZmlsZSBpbiBjc3YgZm9ybWF0LgorCitJdCBhY2NlcHRzIHRoZSBm b2xsb3dpbmcgb3B0aW9uOgorCitAdGFibGUgQG9wdGlvbgorQGl0ZW0gcHJpbnRfc3VtbWFy eQorSWYgc2V0IHRvIDEsIFN1bW1hcnkgc3RhdGlzdGljcyB3aWxsIGJlIHByaW50ZWQgdG8g dGhlIGNvbnNvbGUuIERlZmF1bHQgMC4KK0BlbmQgdGFibGUKKworQHN1YnNlY3Rpb24gRXhh bXBsZXMKK0BpdGVtaXplCitAaXRlbQorVG8gY2FsY3VsYXRlIFNJL1RJIG1ldHJpY3MgYW5k IHByaW50IHN1bW1hcnk6CitAZXhhbXBsZQorZmZtcGVnIC1pIGlucHV0Lm1wNCAtdmYgc2l0 aT1wcmludF9zdW1tYXJ5PTEgLWYgbnVsbCAtCitAZW5kIGV4YW1wbGUKK0BlbmQgaXRlbWl6 ZQorCiBAYW5jaG9ye3NtYXJ0Ymx1cn0KIEBzZWN0aW9uIHNtYXJ0Ymx1cgogCmRpZmYgLS1n aXQgYS9saWJhdmZpbHRlci9NYWtlZmlsZSBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCmluZGV4 IDFhZGJlYTc1YmQuLjMyNjFkMDUzMTEgMTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL01ha2Vm aWxlCisrKyBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCkBAIC00NTQsNiArNDU0LDcgQEAgT0JK Uy0kKENPTkZJR19TTUFSVEJMVVJfRklMVEVSKSAgICAgICAgICAgICAgKz0gdmZfc21hcnRi bHVyLm8KIE9CSlMtJChDT05GSUdfU09CRUxfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9 IHZmX2NvbnZvbHV0aW9uLm8KIE9CSlMtJChDT05GSUdfU09CRUxfT1BFTkNMX0ZJTFRFUikg ICAgICAgICAgICs9IHZmX2NvbnZvbHV0aW9uX29wZW5jbC5vIG9wZW5jbC5vIFwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5jbC9jb252 b2x1dGlvbi5vCitPQkpTLSQoQ09ORklHX1NJVElfRklMVEVSKSAgICAgICAgICAgICAgICAg ICArPSB2Zl9zaXRpLm8KIE9CSlMtJChDT05GSUdfU1BMSVRfRklMVEVSKSAgICAgICAgICAg ICAgICAgICs9IHNwbGl0Lm8KIE9CSlMtJChDT05GSUdfU1BQX0ZJTFRFUikgICAgICAgICAg ICAgICAgICAgICs9IHZmX3NwcC5vIHFwX3RhYmxlLm8KIE9CSlMtJChDT05GSUdfU1JfRklM VEVSKSAgICAgICAgICAgICAgICAgICAgICs9IHZmX3NyLm8KZGlmZiAtLWdpdCBhL2xpYmF2 ZmlsdGVyL2FsbGZpbHRlcnMuYyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwppbmRleCA0 MzI1YTNlNTU3Li44MDhjMTcyYjI4IDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9hbGxmaWx0 ZXJzLmMKKysrIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCkBAIC00MzAsNiArNDMwLDcg QEAgZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3ZmX3NodWZmbGVwbGFuZXM7CiBleHRlcm4g Y29uc3QgQVZGaWx0ZXIgZmZfdmZfc2lkZWRhdGE7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIg ZmZfdmZfc2lnbmFsc3RhdHM7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdmZfc2lnbmF0 dXJlOworZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3ZmX3NpdGk7CiBleHRlcm4gY29uc3Qg QVZGaWx0ZXIgZmZfdmZfc21hcnRibHVyOwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3Zm X3NvYmVsOwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3ZmX3NvYmVsX29wZW5jbDsKZGlm ZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZlcnNpb24uaCBiL2xpYmF2ZmlsdGVyL3ZlcnNpb24u aAppbmRleCAxYTk4NDllZjgyLi44OTcxNGJjZTg0IDEwMDY0NAotLS0gYS9saWJhdmZpbHRl ci92ZXJzaW9uLmgKKysrIGIvbGliYXZmaWx0ZXIvdmVyc2lvbi5oCkBAIC0zMCw3ICszMCw3 IEBACiAjaW5jbHVkZSAibGliYXZ1dGlsL3ZlcnNpb24uaCIKIAogI2RlZmluZSBMSUJBVkZJ TFRFUl9WRVJTSU9OX01BSk9SICAgOAotI2RlZmluZSBMSUJBVkZJTFRFUl9WRVJTSU9OX01J Tk9SICAyNQorI2RlZmluZSBMSUJBVkZJTFRFUl9WRVJTSU9OX01JTk9SICAyNgogI2RlZmlu ZSBMSUJBVkZJTFRFUl9WRVJTSU9OX01JQ1JPIDEwMAogCiAKZGlmZiAtLWdpdCBhL2xpYmF2 ZmlsdGVyL3ZmX3NpdGkuYyBiL2xpYmF2ZmlsdGVyL3ZmX3NpdGkuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5lMmFlNzZmNjc5Ci0tLSAvZGV2L251bGwKKysr IGIvbGliYXZmaWx0ZXIvdmZfc2l0aS5jCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogQ29w eXJpZ2h0IChjKSAyMDIxIEJvcmlzIEJhcmFjYWxkbworICogQ29weXJpZ2h0IChjKSAyMDIy IFRoaWxvIEJvcmdtYW5uIAorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4K KyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisg KiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggRkZt cGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEgVVNBLgorICovCisKKy8qKgorICogQGZpbGUKKyAqIENhbGN1bGF0ZSBTcGF0 aWFsIEluZm8gKFNJKSBhbmQgVGVtcG9yYWwgSW5mbyAoVEkpIHNjb3JlcworICovCisKKyNp bmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW1ndXRpbHMuaCIKKyNp bmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0 LmgiCisKKyNpbmNsdWRlICJhdmZpbHRlci5oIgorI2luY2x1ZGUgImZvcm1hdHMuaCIKKyNp bmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgInZpZGVvLmgiCisKK3N0YXRpYyBjb25z dCBpbnQgWF9GSUxURVJbOV0gPSB7CisgICAgMSwgMCwgLTEsCisgICAgMiwgMCwgLTIsCisg ICAgMSwgMCwgLTEKK307CisKK3N0YXRpYyBjb25zdCBpbnQgWV9GSUxURVJbOV0gPSB7Cisg ICAgMSwgMiwgMSwKKyAgICAwLCAwLCAwLAorICAgIC0xLCAtMiwgLTEKK307CisKK3R5cGVk ZWYgc3RydWN0IFNpVGlDb250ZXh0IHsKKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKKyAg ICBpbnQgcGl4ZWxfZGVwdGg7CisgICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgaW50IG5i X2ZyYW1lczsKKyAgICB1bnNpZ25lZCBjaGFyICpwcmV2X2ZyYW1lOworICAgIGRvdWJsZSBt YXhfc2k7CisgICAgZG91YmxlIG1heF90aTsKKyAgICBkb3VibGUgbWluX3NpOworICAgIGRv dWJsZSBtaW5fdGk7CisgICAgZG91YmxlIHN1bV9zaTsKKyAgICBkb3VibGUgc3VtX3RpOwor ICAgIGludCBmdWxsX3JhbmdlOworICAgIGludCBwcmludF9zdW1tYXJ5OworfSBTaVRpQ29u dGV4dDsKKworc3RhdGljIGNvbnN0IGVudW0gQVZQaXhlbEZvcm1hdCBwaXhfZm10c1tdID0g eworICAgIEFWX1BJWF9GTVRfWVVWNDIwUCwgQVZfUElYX0ZNVF9ZVVY0MjJQLAorICAgIEFW X1BJWF9GTVRfWVVWSjQyMFAsIEFWX1BJWF9GTVRfWVVWSjQyMlAsCisgICAgQVZfUElYX0ZN VF9ZVVY0MjBQMTAsIEFWX1BJWF9GTVRfWVVWNDIyUDEwLAorICAgIEFWX1BJWF9GTVRfTk9O RQorfTsKKworc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgp IHsKKyAgICAvLyBVc2VyIG9wdGlvbnMgYnV0IG5vIGlucHV0IGRhdGEKKyAgICBTaVRpQ29u dGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBzLT5tYXhfc2kgPSAwOworICAgIHMtPm1heF90 aSA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBhdl9jb2xkIHZvaWQgdW5pbml0 KEFWRmlsdGVyQ29udGV4dCAqY3R4KSB7CisgICAgU2lUaUNvbnRleHQgKnMgPSBjdHgtPnBy aXY7CisKKyAgICBpZiAocy0+cHJpbnRfc3VtbWFyeSkgeworICAgICAgICBkb3VibGUgYXZn X3NpID0gcy0+c3VtX3NpIC8gcy0+bmJfZnJhbWVzOworICAgICAgICBkb3VibGUgYXZnX3Rp ID0gcy0+c3VtX3RpIC8gcy0+bmJfZnJhbWVzOworICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfSU5GTywKKyAgICAgICAgICAgICAgICJTSVRJIFN1bW1hcnk6XG5Ub3RhbCBmcmFtZXM6 ICVkXG5cbiIKKyAgICAgICAgICAgICAgICJTcGF0aWFsIEluZm9ybWF0aW9uOlxuQXZlcmFn ZTogJWZcbk1heDogJWZcbk1pbjogJWZcblxuIgorICAgICAgICAgICAgICAgIlRlbXBvcmFs IEluZm9ybWF0aW9uOlxuQXZlcmFnZTogJWZcbk1heDogJWZcbk1pbjogJWZcbiIsCisgICAg ICAgICAgICAgICBzLT5uYl9mcmFtZXMsIGF2Z19zaSwgcy0+bWF4X3NpLCBzLT5taW5fc2ks IGF2Z190aSwgcy0+bWF4X3RpLCBzLT5taW5fdGkKKyAgICAgICAgKTsKKyAgICB9Cit9CisK K3N0YXRpYyBpbnQgY29uZmlnX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKSB7CisgICAg Ly8gVmlkZW8gaW5wdXQgZGF0YSBhdmlsYWJsZQorICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4 ID0gaW5saW5rLT5kc3Q7CisgICAgU2lUaUNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAg aW50IG1heF9waXhzdGVwc1s0XTsKKworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAq ZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoaW5saW5rLT5mb3JtYXQpOworICAgIGF2X2lt YWdlX2ZpbGxfbWF4X3BpeHN0ZXBzKG1heF9waXhzdGVwcywgTlVMTCwgZGVzYyk7CisKKyAg ICBzLT5waXhlbF9kZXB0aCA9IG1heF9waXhzdGVwc1swXTsKKyAgICBzLT53aWR0aCA9IGlu bGluay0+dzsKKyAgICBzLT5oZWlnaHQgPSBpbmxpbmstPmg7CisgICAgc2l6ZV90IHBpeGVs X3N6ID0gcy0+cGl4ZWxfZGVwdGg9PTE/IChzaXplX3QpIHNpemVvZih1aW50OF90KSA6IChz aXplX3QpIHNpemVvZih1aW50MTZfdCk7CisgICAgc2l6ZV90IGRhdGFfc3ogPSAoc2l6ZV90 KSBzLT53aWR0aCAqIHBpeGVsX3N6ICogcy0+aGVpZ2h0OworICAgIHMtPnByZXZfZnJhbWUg PSBhdl9tYWxsb2MoZGF0YV9zeik7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gR2V0IGZy YW1lIGRhdGEgaGFuZGxpbmcgOCBhbmQgMTAgYml0IGZvcm1hdHMKK3N0YXRpYyB1aW50MTZf dCBnZXRfZnJhbWVfZGF0YShjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmMsIGludCBwaXhlbF9k ZXB0aCwgaW50IGluZGV4KSB7CisgICAgY29uc3QgdWludDE2X3QgKnNyYzE2ID0gKGNvbnN0 IHVpbnQxNl90ICopc3JjOworICAgIGlmIChwaXhlbF9kZXB0aCA9PSAyKQorICAgICAgICBy ZXR1cm4gc3JjMTZbaW5kZXhdOworICAgIHJldHVybiAodWludDE2X3QpIHNyY1tpbmRleF07 Cit9CisKKy8vIFNldCBmcmFtZSBkYXRhIGhhbmRsaW5nIDggYW5kIDEwIGJpdCBmb3JtYXRz CitzdGF0aWMgdm9pZCBzZXRfZnJhbWVfZGF0YSh1bnNpZ25lZCBjaGFyKiBkc3QsIGludCBw aXhlbF9kZXB0aCwgaW50IGluZGV4LCB1aW50MTZfdCBkYXRhKSB7CisgICAgdWludDE2X3Qg KmRzdDE2ID0gKHVpbnQxNl90ICopZHN0OworICAgIGlmIChwaXhlbF9kZXB0aCA9PSAyKQor ICAgICAgICBkc3QxNltpbmRleF0gPSBkYXRhOworICAgIGVsc2UKKyAgICAgICAgZHN0W2lu ZGV4XSA9ICh1aW50OF90KSBkYXRhOworfQorCisvLyBEZXRlcm1pbmUgd2hldGhlciB0aGUg dmlkZW8gaXMgaW4gZnVsbCBvciBsaW1pdGVkIHJhbmdlLiBJZiBub3QgZGVmaW5lZCwgYXNz dW1lIGxpbWl0ZWQuCitzdGF0aWMgaW50IGlzX2Z1bGxfcmFuZ2UoQVZGcmFtZSogZnJhbWUp IHsKKyAgICAvLyBJZiBjb2xvciByYW5nZSBub3Qgc3BlY2lmaWVkLCBmYWxsYmFjayB0byBw aXhlbCBmb3JtYXQKKyAgICBpZiAoZnJhbWUtPmNvbG9yX3JhbmdlID09IEFWQ09MX1JBTkdF X1VOU1BFQ0lGSUVEIHx8IGZyYW1lLT5jb2xvcl9yYW5nZSA9PSBBVkNPTF9SQU5HRV9OQikK KyAgICAgICAgcmV0dXJuIGZyYW1lLT5mb3JtYXQgPT0gQVZfUElYX0ZNVF9ZVVZKNDIwUCB8 fCBmcmFtZS0+Zm9ybWF0ID09IEFWX1BJWF9GTVRfWVVWSjQyMlA7CisgICAgcmV0dXJuIGZy YW1lLT5jb2xvcl9yYW5nZSA9PSBBVkNPTF9SQU5HRV9KUEVHOworfQorCisvLyBDaGVjayBm cmFtZSdzIGNvbG9yIHJhbmdlIGFuZCBjb252ZXJ0IHRvIGZ1bGwgcmFuZ2UgaWYgbmVlZGVk CitzdGF0aWMgdWludDE2X3QgY29udmVydF9mdWxsX3JhbmdlKHVpbnQxNl90IHksIFNpVGlD b250ZXh0ICpzKSB7CisgICAgaWYgKHMtPmZ1bGxfcmFuZ2UgPT0gMSkKKyAgICAgICAgcmV0 dXJuIHk7CisKKyAgICAvLyBGb3IgOCBiaXRzLCBsaW1pdGVkIHJhbmdlIGdvZXMgZnJvbSAx NiB0byAyMzUsIGZvciAxMCBiaXRzIHRoZSByYW5nZSBpcyBtdWx0aXBsaWVkIGJ5IDQKKyAg ICBkb3VibGUgZmFjdG9yID0gcy0+cGl4ZWxfZGVwdGggPT0gMT8gMSA6IDQ7CisgICAgZG91 YmxlIHNoaWZ0ID0gMTYgKiBmYWN0b3I7CisgICAgZG91YmxlIGxpbWl0X3VwcGVyID0gMjM1 ICogZmFjdG9yIC0gc2hpZnQ7CisgICAgZG91YmxlIGZ1bGxfdXBwZXIgPSAyNTYgKiBmYWN0 b3IgLSAxOworICAgIGRvdWJsZSBsaW1pdF95ID0gZm1pbihmbWF4KHkgLSBzaGlmdCwgMCks IGxpbWl0X3VwcGVyKTsKKyAgICByZXR1cm4gKHVpbnQxNl90KSAoZnVsbF91cHBlciAqIGxp bWl0X3kgLyBsaW1pdF91cHBlcik7Cit9CisKKy8vIEFwcGxpZXMgc29iZWwgY29udm9sdXRp b24KK3N0YXRpYyB2b2lkIGNvbnZvbHZlX3NvYmVsKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNy YywgZG91YmxlKiBkc3QsIGludCBsaW5lc2l6ZSwgU2lUaUNvbnRleHQgKnMpIHsKKyAgICBp bnQgZmlsdGVyX3dpZHRoID0gMzsKKyAgICBpbnQgZmlsdGVyX3NpemUgPSBmaWx0ZXJfd2lk dGggKiBmaWx0ZXJfd2lkdGg7CisgICAgZm9yIChpbnQgaj0xOyBqPHMtPmhlaWdodC0xOyBq KyspIHsKKyAgICAgICAgZm9yIChpbnQgaT0xOyBpPHMtPndpZHRoLTE7IGkrKykgeworICAg ICAgICAgICAgZG91YmxlIHhfY29udl9zdW0gPSAwLCB5X2NvbnZfc3VtID0gMDsKKyAgICAg ICAgICAgIGZvciAoaW50IGs9MDsgazxmaWx0ZXJfc2l6ZTsgaysrKSB7CisgICAgICAgICAg ICAgICAgaW50IGtpID0gayAlIGZpbHRlcl93aWR0aCAtIDE7CisgICAgICAgICAgICAgICAg aW50IGtqID0gZmxvb3IoayAvIGZpbHRlcl93aWR0aCkgLSAxOworICAgICAgICAgICAgICAg IGludCBpbmRleCA9IChqICsga2opICogKGxpbmVzaXplIC8gcy0+cGl4ZWxfZGVwdGgpICsg KGkgKyBraSk7CisgICAgICAgICAgICAgICAgdWludDE2X3QgZGF0YSA9IGNvbnZlcnRfZnVs bF9yYW5nZShnZXRfZnJhbWVfZGF0YShzcmMsIHMtPnBpeGVsX2RlcHRoLCBpbmRleCksIHMp OworICAgICAgICAgICAgICAgIHhfY29udl9zdW0gKz0gZGF0YSAqIFhfRklMVEVSW2tdOwor ICAgICAgICAgICAgICAgIHlfY29udl9zdW0gKz0gZGF0YSAqIFlfRklMVEVSW2tdOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgZG91YmxlIGdyYWRpZW50ID0gc3FydCh4X2NvbnZf c3VtICogeF9jb252X3N1bSArIHlfY29udl9zdW0gKiB5X2NvbnZfc3VtKTsKKyAgICAgICAg ICAgIC8vIERzdCBtYXRyaXggaXMgc21hbGxlciB0aGFuIHNyYyBzaW5jZSB3ZSBpZ25vcmUg ZWRnZXMgdGhhdCBjYW4ndCBiZSBjb252b2x2ZWQKKyAgICAgICAgICAgIGRzdFsoaiAtIDEp ICogKHMtPndpZHRoIC0gMikgKyAoaSAtIDEpXSA9IGdyYWRpZW50OworICAgICAgICB9Cisg ICAgfQorfQorCisvLyBDYWxjdWxhdGUgcGl4ZWwgZGlmZmVyZW5jZSBiZXR3ZWVuIGN1cnJl bnQgYW5kIHByZXZpb3VzIGZyYW1lLCBhbmQgdXBkYXRlIHByZXZpb3VzCitzdGF0aWMgdm9p ZCBjYWxjdWxhdGVfbW90aW9uKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGN1cnIsIGRvdWJsZSog bW90aW9uX21hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVz aXplLCBTaVRpQ29udGV4dCAqcykgeworICAgIGZvciAoaW50IGo9MDsgajxzLT5oZWlnaHQ7 IGorKykgeworICAgICAgICBmb3IgKGludCBpPTA7IGk8cy0+d2lkdGg7IGkrKykgeworICAg ICAgICAgICAgZG91YmxlIG1vdGlvbiA9IDA7CisgICAgICAgICAgICBpbnQgY3Vycl9pbmRl eCA9IGogKiAobGluZXNpemUgLyBzLT5waXhlbF9kZXB0aCkgKyBpOworICAgICAgICAgICAg aW50IHByZXZfaW5kZXggPSBqICogcy0+d2lkdGggKyBpOworICAgICAgICAgICAgdWludDE2 X3QgY3Vycl9kYXRhID0gY29udmVydF9mdWxsX3JhbmdlKGdldF9mcmFtZV9kYXRhKGN1cnIs IHMtPnBpeGVsX2RlcHRoLCBjdXJyX2luZGV4KSwgcyk7CisKKyAgICAgICAgICAgIC8vIFBy ZXZpb3VzIGZyYW1lIGlzIGFscmVhZHkgY29udmVydGVkIHRvIGZ1bGwgcmFuZ2UKKyAgICAg ICAgICAgIGlmIChzLT5uYl9mcmFtZXMgPiAxKQorICAgICAgICAgICAgICAgIG1vdGlvbiA9 IGN1cnJfZGF0YSAtIGdldF9mcmFtZV9kYXRhKHMtPnByZXZfZnJhbWUsIHMtPnBpeGVsX2Rl cHRoLCBwcmV2X2luZGV4KTsKKyAgICAgICAgICAgIHNldF9mcmFtZV9kYXRhKHMtPnByZXZf ZnJhbWUsIHMtPnBpeGVsX2RlcHRoLCBwcmV2X2luZGV4LCBjdXJyX2RhdGEpOworICAgICAg ICAgICAgbW90aW9uX21hdHJpeFtqICogcy0+d2lkdGggKyBpXSA9IG1vdGlvbjsKKyAgICAg ICAgfQorICAgIH0KK30KKworc3RhdGljIGRvdWJsZSBzdGRfZGV2aWF0aW9uKGRvdWJsZSog aW1nX21ldHJpY3MsIGludCB3aWR0aCwgaW50IGhlaWdodCkgeworICAgIGRvdWJsZSBzaXpl ID0gaGVpZ2h0ICogd2lkdGg7CisgICAgZG91YmxlIG1lYW5fc3VtID0gMDsKKyAgICBmb3Ig KGludCBqPTA7IGo8aGVpZ2h0OyBqKyspCisgICAgICAgIGZvciAoaW50IGk9MDsgaTx3aWR0 aDsgaSsrKQorICAgICAgICAgICAgbWVhbl9zdW0gKz0gaW1nX21ldHJpY3NbaiAqIHdpZHRo ICsgaV07CisKKyAgICBkb3VibGUgbWVhbiA9IG1lYW5fc3VtIC8gc2l6ZTsKKworICAgIGRv dWJsZSBzcXJfZGlmZl9zdW0gPSAwOworICAgIGZvciAoaW50IGo9MDsgajxoZWlnaHQ7IGor KykgeworICAgICAgICBmb3IgKGludCBpPTA7IGk8d2lkdGg7IGkrKykgeworICAgICAgICAg ICAgZG91YmxlIG1lYW5fZGlmZiA9IGltZ19tZXRyaWNzW2ogKiB3aWR0aCArIGldIC0gbWVh bjsKKyAgICAgICAgICAgIHNxcl9kaWZmX3N1bSArPSAobWVhbl9kaWZmICogbWVhbl9kaWZm KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkb3VibGUgdmFyaWFuY2UgPSBzcXJfZGlmZl9z dW0gLyBzaXplOworICAgIHJldHVybiBzcXJ0KHZhcmlhbmNlKTsKK30KKworc3RhdGljIHZv aWQgc2V0X21ldGEoQVZEaWN0aW9uYXJ5ICoqbWV0YWRhdGEsIGNvbnN0IGNoYXIgKmtleSwg ZmxvYXQgZCkgeworICAgIGNoYXIgdmFsdWVbMTI4XTsKKyAgICBzbnByaW50Zih2YWx1ZSwg c2l6ZW9mKHZhbHVlKSwgIiUwLjJmIiwgZCk7CisgICAgYXZfZGljdF9zZXQobWV0YWRhdGEs IGtleSwgdmFsdWUsIDApOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9mcmFtZShBVkZpbHRl ckxpbmsgKmlubGluaywgQVZGcmFtZSAqZnJhbWUpIHsKKyAgICBBVkZpbHRlckNvbnRleHQg KmN0eCA9IGlubGluay0+ZHN0OworICAgIFNpVGlDb250ZXh0ICpzID0gY3R4LT5wcml2Owor CisgICAgLy8gR3JhZGllbnQgbWF0cml4IHdpbGwgbm90IGluY2x1ZGUgdGhlIGlucHV0IGZy YW1lJ3MgZWRnZXMKKyAgICBzaXplX3QgZ3JhZGllbnRfZGF0YV9zeiA9IChzaXplX3QpIChz LT53aWR0aCAtIDIpICogc2l6ZW9mKGRvdWJsZSkgKiAocy0+aGVpZ2h0IC0gMik7CisgICAg ZG91YmxlICpncmFkaWVudF9tYXRyaXggPSBhdl9tYWxsb2MoZ3JhZGllbnRfZGF0YV9zeik7 CisgICAgc2l6ZV90IG1vdGlvbl9kYXRhX3N6ID0gKHNpemVfdCkgcy0+d2lkdGggKiBzaXpl b2YoZG91YmxlKSAqIHMtPmhlaWdodDsKKyAgICBkb3VibGUgKm1vdGlvbl9tYXRyaXggPSBh dl9tYWxsb2MobW90aW9uX2RhdGFfc3opOworICAgIGlmICghZ3JhZGllbnRfbWF0cml4IHx8 ICFtb3Rpb25fbWF0cml4KSB7CisgICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmZyYW1lKTsKKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAgICBzLT5mdWxsX3Jh bmdlID0gaXNfZnVsbF9yYW5nZShmcmFtZSk7CisgICAgcy0+bmJfZnJhbWVzKys7CisKKyAg ICAvLyBDYWxjdWxhdGUgc2kgYW5kIHRpCisgICAgY29udm9sdmVfc29iZWwoZnJhbWUtPmRh dGFbMF0sIGdyYWRpZW50X21hdHJpeCwgZnJhbWUtPmxpbmVzaXplWzBdLCBzKTsKKyAgICBj YWxjdWxhdGVfbW90aW9uKGZyYW1lLT5kYXRhWzBdLCBtb3Rpb25fbWF0cml4LCBmcmFtZS0+ bGluZXNpemVbMF0sIHMpOworICAgIGRvdWJsZSBzaSA9IHN0ZF9kZXZpYXRpb24oZ3JhZGll bnRfbWF0cml4LCBzLT53aWR0aCAtIDIsIHMtPmhlaWdodCAtIDIpOworICAgIGRvdWJsZSB0 aSA9IHN0ZF9kZXZpYXRpb24obW90aW9uX21hdHJpeCwgcy0+d2lkdGgsIHMtPmhlaWdodCk7 CisKKyAgICAvLyBDYWxjdWxhdGUgc3RhdGlzdGljcworICAgIHMtPm1heF9zaSA9IGZtYXgo c2ksIHMtPm1heF9zaSk7CisgICAgcy0+bWF4X3RpID0gZm1heCh0aSwgcy0+bWF4X3RpKTsK KyAgICBzLT5zdW1fc2kgKz0gc2k7CisgICAgcy0+c3VtX3RpICs9IHRpOworICAgIHMtPm1p bl9zaSA9IHMtPm5iX2ZyYW1lcyA9PSAxPyBzaSA6IGZtaW4oc2ksIHMtPm1pbl9zaSk7Cisg ICAgcy0+bWluX3RpID0gcy0+bmJfZnJhbWVzID09IDE/IHRpIDogZm1pbih0aSwgcy0+bWlu X3RpKTsKKworICAgIC8vIFNldCBzaSB0aSBpbmZvcm1hdGlvbiBpbiBmcmFtZSBtZXRhZGF0 YQorICAgIHNldF9tZXRhKCZmcmFtZS0+bWV0YWRhdGEsICJsYXZmaS5zaXRpLnNpIiwgc2kp OworICAgIHNldF9tZXRhKCZmcmFtZS0+bWV0YWRhdGEsICJsYXZmaS5zaXRpLnRpIiwgdGkp OworCisgICAgYXZfZnJlZShncmFkaWVudF9tYXRyaXgpOworICAgIHJldHVybiBmZl9maWx0 ZXJfZnJhbWUoaW5saW5rLT5kc3QtPm91dHB1dHNbMF0sIGZyYW1lKTsKK30KKworI2RlZmlu ZSBPRkZTRVQoeCkgb2Zmc2V0b2YoU2lUaUNvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdTIEFW X09QVF9GTEFHX1ZJREVPX1BBUkFNfEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTQorCitz dGF0aWMgY29uc3QgQVZPcHRpb24gc2l0aV9vcHRpb25zW10gPSB7CisgICAgeyAicHJpbnRf c3VtbWFyeSIsICJQcmludCBzdW1tYXJ5IHNob3dpbmcgYXZlcmFnZSB2YWx1ZXMiLCBPRkZT RVQocHJpbnRfc3VtbWFyeSksIEFWX09QVF9UWVBFX0JPT0wsIHsgLmk2ND0wIH0sIDAsIDEs IEZMQUdTIH0sCisgICAgeyBOVUxMIH0KK307CisKK0FWRklMVEVSX0RFRklORV9DTEFTUyhz aXRpKTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGF2ZmlsdGVyX3ZmX3NpdGlfaW5w dXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAor ICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAu Y29uZmlnX3Byb3BzID0gY29uZmlnX2lucHV0LAorICAgICAgICAuZmlsdGVyX2ZyYW1lID0g ZmlsdGVyX2ZyYW1lLAorICAgIH0sCit9OworCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQg YXZmaWx0ZXJfdmZfc2l0aV9vdXRwdXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSA9 ICJkZWZhdWx0IiwKKyAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVfVklERU8KKyAgICB9 LAorfTsKKworQVZGaWx0ZXIgZmZfdmZfc2l0aSA9IHsKKyAgICAubmFtZSAgICAgICAgICA9 ICJzaXRpIiwKKyAgICAuZGVzY3JpcHRpb24gICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJD YWxjdWxhdGUgc3BhdGlhbCBpbmZvIChTSSkuIiksCisgICAgLnByaXZfc2l6ZSAgICAgPSBz aXplb2YoU2lUaUNvbnRleHQpLAorICAgIC5wcml2X2NsYXNzICAgID0gJnNpdGlfY2xhc3Ms CisgICAgLmluaXQgICAgICAgICAgPSBpbml0LAorICAgIC51bmluaXQgICAgICAgID0gdW5p bml0LAorICAgIEZJTFRFUl9QSVhGTVRTX0FSUkFZKHBpeF9mbXRzKSwKKyAgICBGSUxURVJf SU5QVVRTKGF2ZmlsdGVyX3ZmX3NpdGlfaW5wdXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyhh dmZpbHRlcl92Zl9zaXRpX291dHB1dHMpLAorfTsKLS0gCjIuMjAuMSAoQXBwbGUgR2l0LTEx NykKCg== --------------DA66AE680F7175F6CE43251B Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --------------DA66AE680F7175F6CE43251B--