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 4EA8F4117B for ; Mon, 3 Jan 2022 22:32:30 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EB07A68B1E4; Tue, 4 Jan 2022 00:32:27 +0200 (EET) Received: from mail-qv1-f54.google.com (mail-qv1-f54.google.com [209.85.219.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D17B868B191 for ; Tue, 4 Jan 2022 00:32:21 +0200 (EET) Received: by mail-qv1-f54.google.com with SMTP id h5so32572552qvh.8 for ; Mon, 03 Jan 2022 14:32:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ylo-ph.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=wanjfVM/1I4rqrcsEQJXPfnNf2j3RD7mygjRKJSLRVg=; b=p+B5FhnIP/AZj6SqDD0BvdCWg0cir7kjHcf7/X983UyaB6r37AF9JHdhA8YNxEgVgH oxFY7bLQJvunOKzvm4KZMtC2Ar0Fd0mMFDsdP8jNVKk4CvF2ialOCpsNKcZNSgmWtA/L nkh4Ir04g8x5/FTGdBNcOsp+8N8ytqGztl4bAYhVl9R9we1ol8PuGzn4Umw8UOwEtdWN eQiV/x3/dp/hbslbH6oFTUC/jDKQwahCAUrUY3NW9z76/YsBShhnCyX9aU9ktObIGJOu iQCqvMQJpsammyiEPCKh/hFax5mzf9rX1Ul5AetBsIfhvuFme5IfTAljycry3JxXdBan Lfcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=wanjfVM/1I4rqrcsEQJXPfnNf2j3RD7mygjRKJSLRVg=; b=e+ToxLyduaJklazvnhaAYsQbkIr4zVswee1TQWVDxtYvJPlann35J0aWCvEm2sKMVm ffXig96H9axnecdWUUMDDolinFsS0sPtHbMaEkFgHNEZjw1eB1LvEAerFv1NdFZr17Gh 58OVOFuJqccS5huB3YT6daXnmsUdsw2nx193Rqi4GwG46sU0a79xhIaXxqVLNBcUqLhJ 8StOZqSiRwDVbwtO3tPYzLOrfsD6bHuG5m4YXtCybG6q2a47fK/AdoPU4ixm/2JtfJJc lC6XCyqCjY3vRGj9Ry3FXpEX96gtCnE0uXRI1Bqc08S5awpM1c9MqhoAK64853uMVeRD V5lg== X-Gm-Message-State: AOAM533KHpvWYDg73aDI6ardWkcFdUvODa4ps0f/ZsUNixwaxZEfxKC5 mlMeZlThnZUmhkMNtHOuOuZQucXgGrF9Sjt/b+viRtfLqbM= X-Google-Smtp-Source: ABdhPJwzWv4RP6EU+Lwnn4uhd3p3W/r5pjmvQKETZ7inkAogUeT9LIRbHnw43/sg2BOP2r9s6Ta0c1i3vELZGWEidrs= X-Received: by 2002:a05:6214:c24:: with SMTP id a4mr44264533qvd.60.1641249140039; Mon, 03 Jan 2022 14:32:20 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Kyle Swanson Date: Mon, 3 Jan 2022 14:32:09 -0800 Message-ID: To: FFmpeg development discussions and patches Content-Type: multipart/mixed; boundary="000000000000fb25cc05d4b5176c" Subject: Re: [FFmpeg-devel] [PATCH] avfilter/vf_libvmaf: update filter for libvmaf v2.0.0 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: --000000000000fb25cc05d4b5176c Content-Type: text/plain; charset="UTF-8" Hi, On Sun, Jan 2, 2022 at 9:21 PM Andreas Rheinhardt wrote: > > > > static const AVOption libvmaf_options[] = { > > - {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/local/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS}, > > - {"log_path", "Set the file path to be used to store logs.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > - {"log_fmt", "Set the format of the log (csv, json or xml).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > - {"enable_transform", "Enables transform for computing vmaf.", OFFSET(enable_transform), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"phone_model", "Invokes the phone model that will generate higher VMAF scores.", OFFSET(phone_model), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"psnr", "Enables computing psnr along with vmaf.", OFFSET(psnr), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"ssim", "Enables computing ssim along with vmaf.", OFFSET(ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"ms_ssim", "Enables computing ms-ssim along with vmaf.", OFFSET(ms_ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > - {"pool", "Set the pool method to be used for computing vmaf.", OFFSET(pool), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > + {"model", "Set the model to be used for computing vmaf.", OFFSET(model_cfg), AV_OPT_TYPE_STRING, {.str="version=vmaf_v0.6.1"}, 0, 1, FLAGS}, > > + {"feature", "Set the feature to be used for computing vmaf.", OFFSET(feature_cfg), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > + {"log_path", "Set the file path to be used to write log.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, > > + {"log_fmt", "Set the format of the log (csv, json, xml, or sub).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str="xml"}, 0, 1, FLAGS}, > > {"n_threads", "Set number of threads to be used when computing vmaf.", OFFSET(n_threads), AV_OPT_TYPE_INT, {.i64=0}, 0, UINT_MAX, FLAGS}, > > {"n_subsample", "Set interval for frame subsampling used when computing vmaf.", OFFSET(n_subsample), AV_OPT_TYPE_INT, {.i64=1}, 1, UINT_MAX, FLAGS}, > > - {"enable_conf_interval", "Enables confidence interval.", OFFSET(enable_conf_interval), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, > > { NULL } > > }; > > You are removing lots of options; removing options is only permissible > during a major break and even then the options need to have been > deprecated before that. Good point, thanks. New patch attached. No more missing options, everything that should be deprecated has been marked as deprecated and appropriate fallback behavior implemented. Thanks, Kyle --000000000000fb25cc05d4b5176c Content-Type: application/octet-stream; name="0001-avfilter-vf_libvmaf-update-filter-for-libvmaf-v2.0.0.patch" Content-Disposition: attachment; filename="0001-avfilter-vf_libvmaf-update-filter-for-libvmaf-v2.0.0.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kxz96n7a0 RnJvbSAzOWI3MWVjOGEyMWNiMmRmOTY3Zjg2YmU0ZTZkYjNkOWE2MTVjZTg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBLeWxlIFN3YW5zb24gPGtzd2Fuc29uQG5ldGZsaXguY29tPgpE YXRlOiBGcmksIDI0IERlYyAyMDIxIDEyOjQzOjUwIC0wODAwClN1YmplY3Q6IFtQQVRDSF0gYXZm aWx0ZXIvdmZfbGlidm1hZjogdXBkYXRlIGZpbHRlciBmb3IgbGlidm1hZiB2Mi4wLjAKCi0tLQog Y29uZmlndXJlICAgICAgICAgICAgICAgIHwgICA0ICstCiBkb2MvZmlsdGVycy50ZXhpICAgICAg ICAgfCAgNzcgKystLS0KIGxpYmF2ZmlsdGVyL3ZlcnNpb24uaCAgICB8ICAgMiArLQogbGliYXZm aWx0ZXIvdmZfbGlidm1hZi5jIHwgNjcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCA1MzMgaW5zZXJ0aW9ucygrKSwgMjIwIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBlMmVhNDczNTY1 Li42NWNhMjZjMmQ2IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0z NzQyLDcgKzM3NDIsNyBAQCB2YWd1ZWRlbm9pc2VyX2ZpbHRlcl9kZXBzPSJncGwiCiB2ZmxpcF92 dWxrYW5fZmlsdGVyX2RlcHM9InZ1bGthbiBzcGlydl9jb21waWxlciIKIHZpZHN0YWJkZXRlY3Rf ZmlsdGVyX2RlcHM9ImxpYnZpZHN0YWIiCiB2aWRzdGFidHJhbnNmb3JtX2ZpbHRlcl9kZXBzPSJs aWJ2aWRzdGFiIgotbGlidm1hZl9maWx0ZXJfZGVwcz0ibGlidm1hZiBwdGhyZWFkcyIKK2xpYnZt YWZfZmlsdGVyX2RlcHM9ImxpYnZtYWYiCiB6bXFfZmlsdGVyX2RlcHM9ImxpYnptcSIKIHpvb21w YW5fZmlsdGVyX2RlcHM9InN3c2NhbGUiCiB6c2NhbGVfZmlsdGVyX2RlcHM9ImxpYnppbWcgY29u c3RfbmFuIgpAQCAtNjYxMCw3ICs2NjEwLDcgQEAgZW5hYmxlZCBsaWJ0d29sYW1lICAgICAgICAm JiByZXF1aXJlIGxpYnR3b2xhbWUgdHdvbGFtZS5oIHR3b2xhbWVfaW5pdCAtbHR3b2xhbWUKIGVu YWJsZWQgbGlidWF2czNkICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnVhdnMzZCAi dWF2czNkID49IDEuMS40MSIgdWF2czNkLmggdWF2czNkX2RlY29kZQogZW5hYmxlZCBsaWJ2NGwy ICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgbGlidjRsMiBsaWJ2NGwyIGxpYnY0bDIu aCB2NGwyX2lvY3RsCiBlbmFibGVkIGxpYnZpZHN0YWIgICAgICAgICYmIHJlcXVpcmVfcGtnX2Nv bmZpZyBsaWJ2aWRzdGFiICJ2aWRzdGFiID49IDAuOTgiIHZpZC5zdGFiL2xpYnZpZHN0YWIuaCB2 c01vdGlvbkRldGVjdEluaXQKLWVuYWJsZWQgbGlidm1hZiAgICAgICAgICAgJiYgcmVxdWlyZV9w a2dfY29uZmlnIGxpYnZtYWYgImxpYnZtYWYgPj0gMS41LjIiIGxpYnZtYWYuaCBjb21wdXRlX3Zt YWYKK2VuYWJsZWQgbGlidm1hZiAgICAgICAgICAgJiYgcmVxdWlyZV9wa2dfY29uZmlnIGxpYnZt YWYgImxpYnZtYWYgPj0gMi4wLjAiIGxpYnZtYWYuaCB2bWFmX2luaXQKIGVuYWJsZWQgbGlidm9f YW1yd2JlbmMgICAgJiYgcmVxdWlyZSBsaWJ2b19hbXJ3YmVuYyB2by1hbXJ3YmVuYy9lbmNfaWYu aCBFX0lGX2luaXQgLWx2by1hbXJ3YmVuYwogZW5hYmxlZCBsaWJ2b3JiaXMgICAgICAgICAmJiBy ZXF1aXJlX3BrZ19jb25maWcgbGlidm9yYmlzIHZvcmJpcyB2b3JiaXMvY29kZWMuaCB2b3JiaXNf aW5mb19pbml0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVfcGtnX2Nv bmZpZyBsaWJ2b3JiaXNlbmMgdm9yYmlzZW5jIHZvcmJpcy92b3JiaXNlbmMuaCB2b3JiaXNfZW5j b2RlX2luaXQKZGlmZiAtLWdpdCBhL2RvYy9maWx0ZXJzLnRleGkgYi9kb2MvZmlsdGVycy50ZXhp CmluZGV4IDA1ZDRiMWE1NmUuLmNhY2FhNmMwODAgMTAwNjQ0Ci0tLSBhL2RvYy9maWx0ZXJzLnRl eGkKKysrIGIvZG9jL2ZpbHRlcnMudGV4aQpAQCAtMTQ2NjYsNjggKzE0NjY2LDM5IEBAIGZmbXBl ZyAtaSBpbnB1dC5tb3YgLXZmIGxlbnNmdW49bWFrZT1DYW5vbjptb2RlbD0iQ2Fub24gRU9TIDEw MEQiOmxlbnNfbW9kZWw9IkNhCiAKIEBzZWN0aW9uIGxpYnZtYWYKIAotT2J0YWluIHRoZSBWTUFG IChWaWRlbyBNdWx0aS1NZXRob2QgQXNzZXNzbWVudCBGdXNpb24pCi1zY29yZSBiZXR3ZWVuIHR3 byBpbnB1dCB2aWRlb3MuCitDYWx1bGF0ZSB0aGUgVk1BRiAoVmlkZW8gTXVsdGktTWV0aG9kIEFz c2Vzc21lbnQgRnVzaW9uKSBzY29yZSBmb3IgYQorcmVmZXJlbmNlL2Rpc3RvcnRlZCBwYWlyIG9m IGlucHV0IHZpZGVvcy4KIAotVGhlIGZpcnN0IGlucHV0IGlzIHRoZSBlbmNvZGVkIHZpZGVvLCBh bmQgdGhlIHNlY29uZCBpbnB1dCBpcyB0aGUgcmVmZXJlbmNlIHZpZGVvLgorVGhlIGZpcnN0IGlu cHV0IGlzIHRoZSBkaXN0b3J0ZWQgdmlkZW8sIGFuZCB0aGUgc2Vjb25kIGlucHV0IGlzIHRoZSBy ZWZlcmVuY2UgdmlkZW8uCiAKIFRoZSBvYnRhaW5lZCBWTUFGIHNjb3JlIGlzIHByaW50ZWQgdGhy b3VnaCB0aGUgbG9nZ2luZyBzeXN0ZW0uCiAKIEl0IHJlcXVpcmVzIE5ldGZsaXgncyB2bWFmIGxp YnJhcnkgKGxpYnZtYWYpIGFzIGEgcHJlLXJlcXVpc2l0ZS4KIEFmdGVyIGluc3RhbGxpbmcgdGhl IGxpYnJhcnkgaXQgY2FuIGJlIGVuYWJsZWQgdXNpbmc6CiBAY29kZXsuL2NvbmZpZ3VyZSAtLWVu YWJsZS1saWJ2bWFmfS4KLUlmIG5vIG1vZGVsIHBhdGggaXMgc3BlY2lmaWVkIGl0IHVzZXMgdGhl IGRlZmF1bHQgbW9kZWw6IEBjb2Rle3ZtYWZfdjAuNi4xLnBrbH0uCiAKIFRoZSBmaWx0ZXIgaGFz IGZvbGxvd2luZyBvcHRpb25zOgogCiBAdGFibGUgQG9wdGlvbgotQGl0ZW0gbW9kZWxfcGF0aAot U2V0IHRoZSBtb2RlbCBwYXRoIHdoaWNoIGlzIHRvIGJlIHVzZWQgZm9yIFNWTS4KLURlZmF1bHQg dmFsdWU6IEBjb2RleyIvdXNyL2xvY2FsL3NoYXJlL21vZGVsL3ZtYWZfdjAuNi4xLnBrbCJ9CitA aXRlbSBtb2RlbAorQSBgfGAgZGVsaW1pdGVkIGxpc3Qgb2Ygdm1hZiBtb2RlbHMuIEVhY2ggbW9k ZWwgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhIG51bWJlciBvZiBwYXJhbWV0ZXJzLgorRGVmYXVs dCB2YWx1ZTogQGNvZGV7InZlcnNpb249dm1hZl92MC42LjEifQorCitAaXRlbSBmZWF0dXJlCitB IGB8YCBkZWxpbWl0ZWQgbGlzdCBvZiBmZWF0dXJlcy4gRWFjaCBmZWF0dXJlIGNhbiBiZSBjb25m aWd1cmVkIHdpdGggYSBudW1iZXIgb2YgcGFyYW1ldGVycy4KIAogQGl0ZW0gbG9nX3BhdGgKLVNl dCB0aGUgZmlsZSBwYXRoIHRvIGJlIHVzZWQgdG8gc3RvcmUgbG9ncy4KK1NldCB0aGUgZmlsZSBw YXRoIHRvIGJlIHVzZWQgdG8gc3RvcmUgbG9nIGZpbGVzLgogCiBAaXRlbSBsb2dfZm10Ci1TZXQg dGhlIGZvcm1hdCBvZiB0aGUgbG9nIGZpbGUgKGNzdiwganNvbiBvciB4bWwpLgotCi1AaXRlbSBl bmFibGVfdHJhbnNmb3JtCi1UaGlzIG9wdGlvbiBjYW4gZW5hYmxlL2Rpc2FibGUgdGhlIEBjb2Rl e3Njb3JlX3RyYW5zZm9ybX0gYXBwbGllZCB0byB0aGUgZmluYWwgcHJlZGljdGVkIFZNQUYgc2Nv cmUsCi1pZiB5b3UgaGF2ZSBzcGVjaWZpZWQgc2NvcmVfdHJhbnNmb3JtIG9wdGlvbiBpbiB0aGUg aW5wdXQgcGFyYW1ldGVyIGZpbGUgcGFzc2VkIHRvIEBjb2Rle3J1bl92bWFmX3RyYWluaW5nLnB5 fQotRGVmYXVsdCB2YWx1ZTogQGNvZGV7ZmFsc2V9Ci0KLUBpdGVtIHBob25lX21vZGVsCi1JbnZv a2VzIHRoZSBwaG9uZSBtb2RlbCB3aGljaCB3aWxsIGdlbmVyYXRlIFZNQUYgc2NvcmVzIGhpZ2hl ciB0aGFuIGluIHRoZQotcmVndWxhciBtb2RlbCwgd2hpY2ggaXMgbW9yZSBzdWl0YWJsZSBmb3Ig bGFwdG9wLCBUViwgZXRjLiB2aWV3aW5nIGNvbmRpdGlvbnMuCi1EZWZhdWx0IHZhbHVlOiBAY29k ZXtmYWxzZX0KLQotQGl0ZW0gcHNucgotRW5hYmxlcyBjb21wdXRpbmcgcHNuciBhbG9uZyB3aXRo IHZtYWYuCi1EZWZhdWx0IHZhbHVlOiBAY29kZXtmYWxzZX0KLQotQGl0ZW0gc3NpbQotRW5hYmxl cyBjb21wdXRpbmcgc3NpbSBhbG9uZyB3aXRoIHZtYWYuCi1EZWZhdWx0IHZhbHVlOiBAY29kZXtm YWxzZX0KLQotQGl0ZW0gbXNfc3NpbQotRW5hYmxlcyBjb21wdXRpbmcgbXNfc3NpbSBhbG9uZyB3 aXRoIHZtYWYuCi1EZWZhdWx0IHZhbHVlOiBAY29kZXtmYWxzZX0KLQotQGl0ZW0gcG9vbAotU2V0 IHRoZSBwb29sIG1ldGhvZCB0byBiZSB1c2VkIGZvciBjb21wdXRpbmcgdm1hZi4KLU9wdGlvbnMg YXJlIEBjb2Rle21pbn0sIEBjb2Rle2hhcm1vbmljX21lYW59IG9yIEBjb2Rle21lYW59IChkZWZh dWx0KS4KK1NldCB0aGUgZm9ybWF0IG9mIHRoZSBsb2cgZmlsZSAoeG1sLCBqc29uLCBjc3YsIG9y IHN1YikuCiAKIEBpdGVtIG5fdGhyZWFkcwotU2V0IG51bWJlciBvZiB0aHJlYWRzIHRvIGJlIHVz ZWQgd2hlbiBjb21wdXRpbmcgdm1hZi4KLURlZmF1bHQgdmFsdWU6IEBjb2RlezB9LCB3aGljaCBt YWtlcyB1c2Ugb2YgYWxsIGF2YWlsYWJsZSBsb2dpY2FsIHByb2Nlc3NvcnMuCitTZXQgbnVtYmVy IG9mIHRocmVhZHMgdG8gYmUgdXNlZCB3aGVuIGluaXRpYWxpemluZyBsaWJ2bWFmLgorRGVmYXVs dCB2YWx1ZTogQGNvZGV7MH0sIG5vIHRocmVhZHMuCiAKIEBpdGVtIG5fc3Vic2FtcGxlCi1TZXQg aW50ZXJ2YWwgZm9yIGZyYW1lIHN1YnNhbXBsaW5nIHVzZWQgd2hlbiBjb21wdXRpbmcgdm1hZi4K LURlZmF1bHQgdmFsdWU6IEBjb2RlezF9Ci0KLUBpdGVtIGVuYWJsZV9jb25mX2ludGVydmFsCi1F bmFibGVzIGNvbmZpZGVuY2UgaW50ZXJ2YWwuCi1EZWZhdWx0IHZhbHVlOiBAY29kZXtmYWxzZX0K K1NldCBmcmFtZSBzdWJzYW1wbGluZyBpbnRlcnZhbCB0byBiZSB1c2VkLgogQGVuZCB0YWJsZQog CiBUaGlzIGZpbHRlciBhbHNvIHN1cHBvcnRzIHRoZSBAcmVme2ZyYW1lc3luY30gb3B0aW9ucy4K QEAgLTE0NzM1LDIzICsxNDcwNiwzMSBAQCBUaGlzIGZpbHRlciBhbHNvIHN1cHBvcnRzIHRoZSBA cmVme2ZyYW1lc3luY30gb3B0aW9ucy4KIEBzdWJzZWN0aW9uIEV4YW1wbGVzCiBAaXRlbWl6ZQog QGl0ZW0KLU9uIHRoZSBiZWxvdyBleGFtcGxlcyB0aGUgaW5wdXQgZmlsZSBAZmlsZXttYWluLm1w Z30gYmVpbmcgcHJvY2Vzc2VkIGlzCi1jb21wYXJlZCB3aXRoIHRoZSByZWZlcmVuY2UgZmlsZSBA ZmlsZXtyZWYubXBnfS4KK0luIHRoZSBleGFtcGxlcyBiZWxvdywgYSBkaXN0b3J0ZWQgdmlkZW8g QGZpbGV7ZGlzdG9ydGVkLm1wZ30gaXMKK2NvbXBhcmVkIHdpdGggYSByZWZlcmVuY2UgZmlsZSBA ZmlsZXtyZWZlcmVuY2UubXBnfS4KIAorQGl0ZW0KK0Jhc2ljIHVzYWdlOgorQGV4YW1wbGUKK2Zm bXBlZyAtaSBkaXN0b3J0ZWQubXBnIC1pIHJlZmVyZW5jZS5tcGcgLWxhdmZpIGxpYnZtYWY9bG9n X3BhdGg9b3V0cHV0LnhtbCAtZiBudWxsIC0KK0BlbmQgZXhhbXBsZQorCitAaXRlbQorRXhhbXBs ZSB3aXRoIG11bHRpcGxlIG1vZGVsczoKIEBleGFtcGxlCi1mZm1wZWcgLWkgbWFpbi5tcGcgLWkg cmVmLm1wZyAtbGF2ZmkgbGlidm1hZiAtZiBudWxsIC0KK2ZmbXBlZyAtaSBkaXN0b3J0ZWQubXBn IC1pIHJlZmVyZW5jZS5tcGcgLWxhdmZpIGxpYnZtYWY9J21vZGVsPXZlcnNpb249dm1hZl92MC42 LjFcXDpuYW1lPXZtYWZ8dmVyc2lvbj12bWFmX3YwLjYuMW5lZ1xcOm5hbWU9dm1hZl9uZWc6bG9n X3BhdGg9b3V0cHV0LnhtbCcgLWYgbnVsbCAtCiBAZW5kIGV4YW1wbGUKIAogQGl0ZW0KLUV4YW1w bGUgd2l0aCBvcHRpb25zOgorRXhhbXBsZSB3aXRoIG11bHRpcGxlIGFkZHRpb25hbCBmZWF0dXJl czoKIEBleGFtcGxlCi1mZm1wZWcgLWkgbWFpbi5tcGcgLWkgcmVmLm1wZyAtbGF2ZmkgbGlidm1h Zj0icHNucj0xOmxvZ19mbXQ9anNvbiIgLWYgbnVsbCAtCitmZm1wZWcgLWkgZGlzdG9ydGVkLm1w ZyAtaSByZWZlcmVuY2UubXBnIC1sYXZmaSBsaWJ2bWFmPSdmZWF0dXJlPW5hbWU9cHNucnxuYW1l PWNpZWRlOmxvZ19wYXRoPW91dHB1dC54bWwnIC1mIG51bGwgLQogQGVuZCBleGFtcGxlCiAKIEBp dGVtCiBFeGFtcGxlIHdpdGggb3B0aW9ucyBhbmQgZGlmZmVyZW50IGNvbnRhaW5lcnM6CiBAZXhh bXBsZQotZmZtcGVnIC1pIG1haW4ubXBnIC1pIHJlZi5ta3YgLWxhdmZpICJbMDp2XXNldHRiPUFW VEIsc2V0cHRzPVBUUy1TVEFSVFBUU1ttYWluXTtbMTp2XXNldHRiPUFWVEIsc2V0cHRzPVBUUy1T VEFSVFBUU1tyZWZdO1ttYWluXVtyZWZdbGlidm1hZj1wc25yPTE6bG9nX2ZtdD1qc29uIiAtZiBu dWxsIC0KK2ZmbXBlZyAtaSBkaXN0b3J0ZWQubXBnIC1pIHJlZmVyZW5jZS5ta3YgLWxhdmZpICJb MDp2XXNldHRiPUFWVEIsc2V0cHRzPVBUUy1TVEFSVFBUU1ttYWluXTtbMTp2XXNldHRiPUFWVEIs c2V0cHRzPVBUUy1TVEFSVFBUU1tyZWZdO1ttYWluXVtyZWZdbGlidm1hZj1sb2dfZm10PWpzb246 bG9nX3BhdGg9b3V0cHV0Lmpzb24iIC1mIG51bGwgLQogQGVuZCBleGFtcGxlCiBAZW5kIGl0ZW1p emUKIApkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmVyc2lvbi5oIGIvbGliYXZmaWx0ZXIvdmVy c2lvbi5oCmluZGV4IGM3NmY2ZDIyZTIuLjkxNTA1MGE1NjIgMTAwNjQ0Ci0tLSBhL2xpYmF2Zmls dGVyL3ZlcnNpb24uaAorKysgYi9saWJhdmZpbHRlci92ZXJzaW9uLmgKQEAgLTMxLDcgKzMxLDcg QEAKIAogI2RlZmluZSBMSUJBVkZJTFRFUl9WRVJTSU9OX01BSk9SICAgOAogI2RlZmluZSBMSUJB VkZJTFRFUl9WRVJTSU9OX01JTk9SICAyMwotI2RlZmluZSBMSUJBVkZJTFRFUl9WRVJTSU9OX01J Q1JPIDEwMAorI2RlZmluZSBMSUJBVkZJTFRFUl9WRVJTSU9OX01JQ1JPIDEwMQogCiAKICNkZWZp bmUgTElCQVZGSUxURVJfVkVSU0lPTl9JTlQgQVZfVkVSU0lPTl9JTlQoTElCQVZGSUxURVJfVkVS U0lPTl9NQUpPUiwgXApkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmZfbGlidm1hZi5jIGIvbGli YXZmaWx0ZXIvdmZfbGlidm1hZi5jCmluZGV4IDVkNDkyMTI2ZWIuLjY2ZGRiNDU0NjEgMTAwNjQ0 Ci0tLSBhL2xpYmF2ZmlsdGVyL3ZmX2xpYnZtYWYuYworKysgYi9saWJhdmZpbHRlci92Zl9saWJ2 bWFmLmMKQEAgLTI0LDggKzI0LDggQEAKICAqIENhbGN1bGF0ZSB0aGUgVk1BRiBiZXR3ZWVuIHR3 byBpbnB1dCB2aWRlb3MuCiAgKi8KIAotI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxs aWJ2bWFmLmg+CisKICNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKICNpbmNsdWRlICJs aWJhdnV0aWwvb3B0LmgiCiAjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKQEAgLTM5LDIz ICszOSw5IEBACiB0eXBlZGVmIHN0cnVjdCBMSUJWTUFGQ29udGV4dCB7CiAgICAgY29uc3QgQVZD bGFzcyAqY2xhc3M7CiAgICAgRkZGcmFtZVN5bmMgZnM7Ci0gICAgY29uc3QgQVZQaXhGbXREZXNj cmlwdG9yICpkZXNjOwotICAgIGludCB3aWR0aDsKLSAgICBpbnQgaGVpZ2h0OwotICAgIGRvdWJs ZSB2bWFmX3Njb3JlOwotICAgIGludCB2bWFmX3RocmVhZF9jcmVhdGVkOwotICAgIHB0aHJlYWRf dCB2bWFmX3RocmVhZDsKLSAgICBwdGhyZWFkX211dGV4X3QgbG9jazsKLSAgICBwdGhyZWFkX2Nv bmRfdCBjb25kOwotICAgIGludCBlb2Y7Ci0gICAgQVZGcmFtZSAqZ21haW47Ci0gICAgQVZGcmFt ZSAqZ3JlZjsKLSAgICBpbnQgZnJhbWVfc2V0OwogICAgIGNoYXIgKm1vZGVsX3BhdGg7CiAgICAg Y2hhciAqbG9nX3BhdGg7CiAgICAgY2hhciAqbG9nX2ZtdDsKLSAgICBpbnQgZGlzYWJsZV9jbGlw OwotICAgIGludCBkaXNhYmxlX2F2eDsKICAgICBpbnQgZW5hYmxlX3RyYW5zZm9ybTsKICAgICBp bnQgcGhvbmVfbW9kZWw7CiAgICAgaW50IHBzbnI7CkBAIC02NSwxODQgKzUxLDQ3NiBAQCB0eXBl ZGVmIHN0cnVjdCBMSUJWTUFGQ29udGV4dCB7CiAgICAgaW50IG5fdGhyZWFkczsKICAgICBpbnQg bl9zdWJzYW1wbGU7CiAgICAgaW50IGVuYWJsZV9jb25mX2ludGVydmFsOwotICAgIGludCBlcnJv cjsKKyAgICBjaGFyICptb2RlbF9jZmc7CisgICAgY2hhciAqZmVhdHVyZV9jZmc7CisgICAgVm1h ZkNvbnRleHQgKnZtYWY7CisgICAgVm1hZk1vZGVsICoqbW9kZWw7CisgICAgdW5zaWduZWQgbW9k ZWxfY250OworICAgIHVuc2lnbmVkIGZyYW1lX2NudDsKKyAgICB1bnNpZ25lZCBicGM7CiB9IExJ QlZNQUZDb250ZXh0OwogCiAjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihMSUJWTUFGQ29udGV4 dCwgeCkKICNkZWZpbmUgRkxBR1MgQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFNfEFWX09QVF9G TEFHX1ZJREVPX1BBUkFNCiAKIHN0YXRpYyBjb25zdCBBVk9wdGlvbiBsaWJ2bWFmX29wdGlvbnNb XSA9IHsKLSAgICB7Im1vZGVsX3BhdGgiLCAgIlNldCB0aGUgbW9kZWwgdG8gYmUgdXNlZCBmb3Ig Y29tcHV0aW5nIHZtYWYuIiwgICAgICAgICAgICAgICAgICAgICBPRkZTRVQobW9kZWxfcGF0aCks IEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9Ii91c3IvbG9jYWwvc2hhcmUvbW9kZWwvdm1hZl92 MC42LjEucGtsIn0sIDAsIDEsIEZMQUdTfSwKLSAgICB7ImxvZ19wYXRoIiwgICJTZXQgdGhlIGZp bGUgcGF0aCB0byBiZSB1c2VkIHRvIHN0b3JlIGxvZ3MuIiwgICAgICAgICAgICAgICAgICAgICAg ICBPRkZTRVQobG9nX3BhdGgpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAwLCAx LCBGTEFHU30sCi0gICAgeyJsb2dfZm10IiwgICJTZXQgdGhlIGZvcm1hdCBvZiB0aGUgbG9nIChj c3YsIGpzb24gb3IgeG1sKS4iLCAgICAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKGxvZ19mbXQp LCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAwLCAxLCBGTEFHU30sCi0gICAgeyJl bmFibGVfdHJhbnNmb3JtIiwgICJFbmFibGVzIHRyYW5zZm9ybSBmb3IgY29tcHV0aW5nIHZtYWYu IiwgICAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKGVuYWJsZV90cmFuc2Zvcm0pLCBBVl9PUFRf VFlQRV9CT09MLCB7Lmk2ND0wfSwgMCwgMSwgRkxBR1N9LAotICAgIHsicGhvbmVfbW9kZWwiLCAg Ikludm9rZXMgdGhlIHBob25lIG1vZGVsIHRoYXQgd2lsbCBnZW5lcmF0ZSBoaWdoZXIgVk1BRiBz Y29yZXMuIiwgIE9GRlNFVChwaG9uZV9tb2RlbCksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9 LCAwLCAxLCBGTEFHU30sCi0gICAgeyJwc25yIiwgICJFbmFibGVzIGNvbXB1dGluZyBwc25yIGFs b25nIHdpdGggdm1hZi4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKHBz bnIpLCBBVl9PUFRfVFlQRV9CT09MLCB7Lmk2ND0wfSwgMCwgMSwgRkxBR1N9LAotICAgIHsic3Np bSIsICAiRW5hYmxlcyBjb21wdXRpbmcgc3NpbSBhbG9uZyB3aXRoIHZtYWYuIiwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE9GRlNFVChzc2ltKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5p NjQ9MH0sIDAsIDEsIEZMQUdTfSwKLSAgICB7Im1zX3NzaW0iLCAgIkVuYWJsZXMgY29tcHV0aW5n IG1zLXNzaW0gYWxvbmcgd2l0aCB2bWFmLiIsICAgICAgICAgICAgICAgICAgICAgICAgICBPRkZT RVQobXNfc3NpbSksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9LCAwLCAxLCBGTEFHU30sCisg ICAgeyJtb2RlbF9wYXRoIiwgICJ1c2UgbW9kZWw9J3BhdGg9Li4uJy4iLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGU0VUKG1vZGVsX3BhdGgpLCBBVl9PUFRf VFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAwLCAxLCBGTEFHU3xBVl9PUFRfRkxBR19ERVBSRUNB VEVEfSwKKyAgICB7ImxvZ19wYXRoIiwgICJTZXQgdGhlIGZpbGUgcGF0aCB0byBiZSB1c2VkIHRv IHdyaXRlIGxvZy4iLCAgICAgICAgICAgICAgICAgICAgICAgICBPRkZTRVQobG9nX3BhdGgpLCBB Vl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyPU5VTEx9LCAwLCAxLCBGTEFHU30sCisgICAgeyJsb2df Zm10IiwgICJTZXQgdGhlIGZvcm1hdCBvZiB0aGUgbG9nIChjc3YsIGpzb24sIHhtbCwgb3Igc3Vi KS4iLCAgICAgICAgICAgICAgICAgT0ZGU0VUKGxvZ19mbXQpLCBBVl9PUFRfVFlQRV9TVFJJTkcs IHsuc3RyPSJ4bWwifSwgMCwgMSwgRkxBR1N9LAorICAgIHsiZW5hYmxlX3RyYW5zZm9ybSIsICAi dXNlIG1vZGVsPSdlbmFibGVfdHJhbnNmb3JtPXRydWUnLiIsICAgICAgICAgICAgICAgICAgICAg ICAgIE9GRlNFVChlbmFibGVfdHJhbnNmb3JtKSwgQVZfT1BUX1RZUEVfQk9PTCwgey5pNjQ9MH0s IDAsIDEsIEZMQUdTfEFWX09QVF9GTEFHX0RFUFJFQ0FURUR9LAorICAgIHsicGhvbmVfbW9kZWwi LCAgInVzZSBtb2RlbD0nZW5hYmxlX3RyYW5zZm9ybT10cnVlJy4iLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE9GRlNFVChwaG9uZV9tb2RlbCksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0 PTB9LCAwLCAxLCBGTEFHU3xBVl9PUFRfRkxBR19ERVBSRUNBVEVEfSwKKyAgICB7InBzbnIiLCAg InVzZSBmZWF0dXJlPSduYW1lPXBzbnInLiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPRkZTRVQocHNuciksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9 LCAwLCAxLCBGTEFHU3xBVl9PUFRfRkxBR19ERVBSRUNBVEVEfSwKKyAgICB7InNzaW0iLCAgInVz ZSBmZWF0dXJlPSduYW1lPXNzaW0nLiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPRkZTRVQoc3NpbSksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9LCAw LCAxLCBGTEFHU3xBVl9PUFRfRkxBR19ERVBSRUNBVEVEfSwKKyAgICB7Im1zX3NzaW0iLCAgInVz ZSBmZWF0dXJlPSduYW1lPW1zX3NzaW0nLiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPRkZTRVQobXNfc3NpbSksIEFWX09QVF9UWVBFX0JPT0wsIHsuaTY0PTB9LCAw LCAxLCBGTEFHU3xBVl9PUFRfRkxBR19ERVBSRUNBVEVEfSwKICAgICB7InBvb2wiLCAgIlNldCB0 aGUgcG9vbCBtZXRob2QgdG8gYmUgdXNlZCBmb3IgY29tcHV0aW5nIHZtYWYuIiwgICAgICAgICAg ICAgICAgICAgICBPRkZTRVQocG9vbCksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHI9TlVMTH0s IDAsIDEsIEZMQUdTfSwKICAgICB7Im5fdGhyZWFkcyIsICJTZXQgbnVtYmVyIG9mIHRocmVhZHMg dG8gYmUgdXNlZCB3aGVuIGNvbXB1dGluZyB2bWFmLiIsICAgICAgICAgICAgICBPRkZTRVQobl90 aHJlYWRzKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND0wfSwgMCwgVUlOVF9NQVgsIEZMQUdTfSwK ICAgICB7Im5fc3Vic2FtcGxlIiwgIlNldCBpbnRlcnZhbCBmb3IgZnJhbWUgc3Vic2FtcGxpbmcg dXNlZCB3aGVuIGNvbXB1dGluZyB2bWFmLiIsICAgICBPRkZTRVQobl9zdWJzYW1wbGUpLCBBVl9P UFRfVFlQRV9JTlQsIHsuaTY0PTF9LCAxLCBVSU5UX01BWCwgRkxBR1N9LAotICAgIHsiZW5hYmxl X2NvbmZfaW50ZXJ2YWwiLCAgIkVuYWJsZXMgY29uZmlkZW5jZSBpbnRlcnZhbC4iLCAgICAgICAg ICAgICAgICAgICAgICAgICAgIE9GRlNFVChlbmFibGVfY29uZl9pbnRlcnZhbCksIEFWX09QVF9U WVBFX0JPT0wsIHsuaTY0PTB9LCAwLCAxLCBGTEFHU30sCisgICAgeyJlbmFibGVfY29uZl9pbnRl cnZhbCIsICAiRW5hYmxlcyBjb25maWRlbmNlIGludGVydmFsLiIsICAgICAgICAgICAgICAgICAg ICAgICAgICAgT0ZGU0VUKGVuYWJsZV9jb25mX2ludGVydmFsKSwgQVZfT1BUX1RZUEVfQk9PTCwg ey5pNjQ9MH0sIDAsIDEsIEZMQUdTfEFWX09QVF9GTEFHX0RFUFJFQ0FURUR9LAorICAgIHsibW9k ZWwiLCAgIlNldCB0aGUgbW9kZWwgdG8gYmUgdXNlZCBmb3IgY29tcHV0aW5nIHZtYWYuIiwgICAg ICAgICAgICAgICAgICAgICAgICAgIE9GRlNFVChtb2RlbF9jZmcpLCBBVl9PUFRfVFlQRV9TVFJJ TkcsIHsuc3RyPSJ2ZXJzaW9uPXZtYWZfdjAuNi4xIn0sIDAsIDEsIEZMQUdTfSwKKyAgICB7ImZl YXR1cmUiLCAgIlNldCB0aGUgZmVhdHVyZSB0byBiZSB1c2VkIGZvciBjb21wdXRpbmcgdm1hZi4i LCAgICAgICAgICAgICAgICAgICAgICBPRkZTRVQoZmVhdHVyZV9jZmcpLCBBVl9PUFRfVFlQRV9T VFJJTkcsIHsuc3RyPU5VTEx9LCAwLCAxLCBGTEFHU30sCiAgICAgeyBOVUxMIH0KIH07CiAKIEZS QU1FU1lOQ19ERUZJTkVfQ0xBU1MobGlidm1hZiwgTElCVk1BRkNvbnRleHQsIGZzKTsKIAotI2Rl ZmluZSByZWFkX2ZyYW1lX2ZuKHR5cGUsIGJpdHMpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RhdGljIGludCByZWFkX2ZyYW1lXyMjYml0cyMj Yml0KGZsb2F0ICpyZWZfZGF0YSwgZmxvYXQgKm1haW5fZGF0YSwgICAgICAgIFwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgKnRlbXBfZGF0YSwgaW50IHN0cmlk ZSwgdm9pZCAqY3R4KSAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTElCVk1BRkNv bnRleHQgKnMgPSAoTElCVk1BRkNvbnRleHQgKikgY3R4OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICBpbnQgcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFwKLSAgICBwdGhyZWFk X211dGV4X2xvY2soJnMtPmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgIFwKLSAgICB3aGlsZSAoIXMtPmZyYW1lX3NldCAmJiAhcy0+ZW9m KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBw dGhyZWFkX2NvbmRfd2FpdCgmcy0+Y29uZCwgJnMtPmxvY2spOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBcCi0gICAgaWYg KHMtPmZyYW1lX3NldCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaW50IHJlZl9zdHJpZGUgPSBzLT5ncmVmLT5saW5l c2l6ZVswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpbnQg bWFpbl9zdHJpZGUgPSBzLT5nbWFpbi0+bGluZXNpemVbMF07ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgIFwKLSAgICAgICAgY29uc3QgdHlwZSAqcmVmX3B0ciA9IChj b25zdCB0eXBlICopIHMtPmdyZWYtPmRhdGFbMF07ICAgICAgICAgICAgICAgICAgXAotICAgICAg ICBjb25zdCB0eXBlICptYWluX3B0ciA9IChjb25zdCB0eXBlICopIHMtPmdtYWluLT5kYXRhWzBd OyAgICAgICAgICAgICAgICBcCi0gICAgICAgIFwKLSAgICAgICAgZmxvYXQgKnB0ciA9IHJlZl9k YXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICBmbG9hdCBmYWN0b3IgPSAxLmYgLyAoMSA8PCAoYml0cyAtIDgpKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFwKLSAgICAgICAgaW50IGggPSBzLT5o ZWlnaHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgICAgICBpbnQgdyA9IHMtPndpZHRoOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFwKLSAgICAgICAgaW50IGks ajsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICBcCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBoOyBpKyspIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg ICAgIGZvciAoIGogPSAwOyBqIDwgdzsgaisrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHB0cltqXSA9IHJlZl9wdHJbal0gKiBm YWN0b3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgIHJlZl9wdHIgKz0gcmVmX3N0cmlkZSAvIHNpemVvZigq cmVmX3B0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcHRyICs9 IHN0cmlkZSAvIHNpemVvZigqcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgXAotICAgICAgICBwdHIg PSBtYWluX2RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgIFwKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGg7IGkrKykg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgZm9yIChqID0gMDsgaiA8IHc7IGorKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgcHRyW2pdID0gbWFpbl9wdHJbal0g KiBmYWN0b3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgbWFpbl9wdHIgKz0gbWFpbl9zdHJpZGUgLyBzaXpl b2YoKm1haW5fcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBwdHIg Kz0gc3RyaWRlIC8gc2l6ZW9mKCpwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgXAotICAgIHJldCA9ICFzLT5mcmFtZV9zZXQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgXAotICAgIGF2X2ZyYW1l X3VucmVmKHMtPmdyZWYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgYXZfZnJhbWVfdW5yZWYocy0+Z21haW4pOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzLT5mcmFtZV9zZXQg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIFwKLSAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZzLT5jb25kKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHB0aHJlYWRfbXV0 ZXhfdW5sb2NrKCZzLT5sb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgXAotICAgIGlmIChyZXQpIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVy biAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFwKLSAgICByZXR1cm4g MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorc3RhdGljIGVudW0gVm1hZlBpeGVsRm9ybWF0IHBpeF9mbXRfbWFwKGVu dW0gQVZQaXhlbEZvcm1hdCBhdl9waXhfZm10KQoreworICAgIHN3aXRjaCAoYXZfcGl4X2ZtdCkg eworICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0 MjBQMTBMRToKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDEyTEU6CisgICAgY2FzZSBBVl9Q SVhfRk1UX1lVVjQyMFAxNkxFOgorICAgICAgICByZXR1cm4gVk1BRl9QSVhfRk1UX1lVVjQyMFA7 CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQy MlAxMExFOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQMTJMRToKKyAgICBjYXNlIEFWX1BJ WF9GTVRfWVVWNDIyUDE2TEU6CisgICAgICAgIHJldHVybiBWTUFGX1BJWF9GTVRfWVVWNDIyUDsK KyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0 UDEwTEU6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMkxFOgorICAgIGNhc2UgQVZfUElY X0ZNVF9ZVVY0NDRQMTZMRToKKyAgICAgICAgcmV0dXJuIFZNQUZfUElYX0ZNVF9ZVVY0NDRQOwor ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBWTUFGX1BJWF9GTVRfVU5LTk9XTjsKKyAgICB9 CiB9CiAKLXJlYWRfZnJhbWVfZm4odWludDhfdCwgOCk7Ci1yZWFkX2ZyYW1lX2ZuKHVpbnQxNl90 LCAxMCk7CitzdGF0aWMgaW50IGNvcHlfcGljdHVyZV9kYXRhKEFWRnJhbWUgKnNyYywgVm1hZlBp Y3R1cmUgKmRzdCwgdW5zaWduZWQgYnBjKQoreworICAgIGludCBlcnIgPSB2bWFmX3BpY3R1cmVf YWxsb2MoZHN0LCBwaXhfZm10X21hcChzcmMtPmZvcm1hdCksIGJwYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNyYy0+d2lkdGgsIHNyYy0+aGVpZ2h0KTsKKyAgICBpZiAoZXJy KQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICB1aW50OF90ICpzcmNfZGF0YSA9IHNyYy0+ZGF0 YVtpXTsKKyAgICAgICAgdWludDhfdCAqZHN0X2RhdGEgPSBkc3QtPmRhdGFbaV07CisgICAgICAg IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBkc3QtPmhbaV07IGorKykgeworICAgICAgICAgICAg bWVtY3B5KGRzdF9kYXRhLCBzcmNfZGF0YSwgc2l6ZW9mKCpkc3RfZGF0YSkgKiBkc3QtPndbaV0p OworICAgICAgICAgICAgc3JjX2RhdGEgKz0gc3JjLT5saW5lc2l6ZVtpXTsKKyAgICAgICAgICAg IGRzdF9kYXRhICs9IGRzdC0+c3RyaWRlW2ldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0 dXJuIDA7Cit9CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVfdm1hZl9zY29yZShMSUJWTUFGQ29udGV4 dCAqcykKK3N0YXRpYyBpbnQgZG9fdm1hZihGRkZyYW1lU3luYyAqZnMpCiB7Ci0gICAgaW50ICgq cmVhZF9mcmFtZSkoZmxvYXQgKnJlZl9kYXRhLCBmbG9hdCAqbWFpbl9kYXRhLCBmbG9hdCAqdGVt cF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJpZGUsIHZvaWQgKmN0eCk7Ci0g ICAgY2hhciAqZm9ybWF0OworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gZnMtPnBhcmVudDsK KyAgICBMSUJWTUFGQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBBVkZyYW1lICpyZWYsICpk aXN0OworICAgIGludCBlcnIgPSAwOwogCi0gICAgaWYgKHMtPmRlc2MtPmNvbXBbMF0uZGVwdGgg PD0gOCkgewotICAgICAgICByZWFkX2ZyYW1lID0gcmVhZF9mcmFtZV84Yml0OwotICAgIH0gZWxz ZSB7Ci0gICAgICAgIHJlYWRfZnJhbWUgPSByZWFkX2ZyYW1lXzEwYml0OworICAgIGludCByZXQg PSBmZl9mcmFtZXN5bmNfZHVhbGlucHV0X2dldChmcywgJmRpc3QsICZyZWYpOworICAgIGlmIChy ZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgIGlmIChjdHgtPmlzX2Rpc2FibGVkIHx8 ICFyZWYpCisgICAgICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUoY3R4LT5vdXRwdXRzWzBdLCBk aXN0KTsKKworICAgIFZtYWZQaWN0dXJlIHBpY19yZWY7CisgICAgZXJyID0gY29weV9waWN0dXJl X2RhdGEocmVmLCAmcGljX3JlZiwgcy0+YnBjKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIGF2 X2xvZyhzLCBBVl9MT0dfRVJST1IsICJwcm9ibGVtIGR1cmluZyB2bWFmX3BpY3R1cmVfYWxsb2Mu XG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKICAgICB9CiAKLSAgICBmb3Jt YXQgPSAoY2hhciAqKSBzLT5kZXNjLT5uYW1lOworICAgIFZtYWZQaWN0dXJlIHBpY19kaXN0Owor ICAgIGVyciA9IGNvcHlfcGljdHVyZV9kYXRhKGRpc3QsICZwaWNfZGlzdCwgcy0+YnBjKTsKKyAg ICBpZiAoZXJyKSB7CisgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJwcm9ibGVtIGR1 cmluZyB2bWFmX3BpY3R1cmVfYWxsb2MuXG4iKTsKKyAgICAgICAgdm1hZl9waWN0dXJlX3VucmVm KCZwaWNfcmVmKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAg ICBlcnIgPSB2bWFmX3JlYWRfcGljdHVyZXMocy0+dm1hZiwgJnBpY19yZWYsICZwaWNfZGlzdCwg cy0+ZnJhbWVfY250KyspOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgYXZfbG9nKHMsIEFWX0xP R19FUlJPUiwgInByb2JsZW0gZHVyaW5nIHZtYWZfcmVhZF9waWN0dXJlcy5cbiIpOworICAgICAg ICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KIAotICAgIHMtPmVycm9yID0gY29tcHV0 ZV92bWFmKCZzLT52bWFmX3Njb3JlLCBmb3JtYXQsIHMtPndpZHRoLCBzLT5oZWlnaHQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9mcmFtZSwgcywgcy0+bW9kZWxfcGF0aCwgcy0+ bG9nX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bG9nX2ZtdCwgMCwgMCwg cy0+ZW5hYmxlX3RyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5waG9u ZV9tb2RlbCwgcy0+cHNuciwgcy0+c3NpbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz LT5tc19zc2ltLCBzLT5wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPm5fdGhy ZWFkcywgcy0+bl9zdWJzYW1wbGUsIHMtPmVuYWJsZV9jb25mX2ludGVydmFsKTsKKyAgICByZXR1 cm4gZmZfZmlsdGVyX2ZyYW1lKGN0eC0+b3V0cHV0c1swXSwgZGlzdCk7CiB9CiAKLXN0YXRpYyB2 b2lkICpjYWxsX3ZtYWYodm9pZCAqY3R4KQorc3RhdGljIEFWRGljdGlvbmFyeSAqKmRlbGltaXRl ZF9kaWN0X3BhcnNlKGNoYXIgKnN0ciwgdW5zaWduZWQgKmNudCkKIHsKLSAgICBMSUJWTUFGQ29u dGV4dCAqcyA9IChMSUJWTUFGQ29udGV4dCAqKSBjdHg7Ci0gICAgY29tcHV0ZV92bWFmX3Njb3Jl KHMpOwotICAgIGlmICghcy0+ZXJyb3IpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lO Rk8sICJWTUFGIHNjb3JlOiAlZlxuIixzLT52bWFmX3Njb3JlKTsKLSAgICB9IGVsc2UgewotICAg ICAgICBwdGhyZWFkX211dGV4X2xvY2soJnMtPmxvY2spOwotICAgICAgICBwdGhyZWFkX2NvbmRf c2lnbmFsKCZzLT5jb25kKTsKLSAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnMtPmxvY2sp OworICAgIGludCBlcnIgPSAwOworICAgIGlmICghc3RyKQorICAgICAgICByZXR1cm4gTlVMTDsK KworICAgICpjbnQgPSAxOworICAgIGZvciAoY2hhciAqcCA9IHN0cjsgKnA7IHArKykgeworICAg ICAgICBpZiAoKnAgPT0gJ3wnKQorICAgICAgICAgICAgKCpjbnQpKys7CiAgICAgfQotICAgIHB0 aHJlYWRfZXhpdChOVUxMKTsKKworICAgIEFWRGljdGlvbmFyeSAqKmRpY3QgPSBhdl9jYWxsb2Mo KmNudCwgc2l6ZW9mKCpkaWN0KSk7CisgICAgaWYgKCFkaWN0KQorICAgICAgICBnb3RvIGZhaWw7 CisKKyAgICBjaGFyICpzdHJfY29weSA9IGF2X3N0cmR1cChzdHIpOworICAgIGlmICghc3RyX2Nv cHkpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGNoYXIgKnNhdmVwdHIgPSBOVUxMOworICAg IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAqY250OyBpKyspIHsKKyAgICAgICAgY2hhciAqcyA9 IGF2X3N0cnRvayhpID09IDAgPyBzdHJfY29weSA6IE5VTEwsICJ8IiwgJnNhdmVwdHIpOworICAg ICAgICBlcnIgPSBhdl9kaWN0X3BhcnNlX3N0cmluZygmZGljdFtpXSwgcywgIj0iLCAiOiIsIDAp OworICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAg IGF2X2ZyZWUoc3RyX2NvcHkpOworICAgIHJldHVybiBkaWN0OworCitmYWlsOgorICAgIGlmIChk aWN0KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAqY250OyBpKyspIHsKKyAg ICAgICAgICAgIGlmIChkaWN0W2ldKQorICAgICAgICAgICAgICAgIGF2X2RpY3RfZnJlZSgmZGlj dFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgYXZfZnJlZShkaWN0KTsKKyAgICB9CisKKyAgICBh dl9mcmVlKHN0cl9jb3B5KTsKKyAgICAqY250ID0gMDsKICAgICByZXR1cm4gTlVMTDsKIH0KIAot c3RhdGljIGludCBkb192bWFmKEZGRnJhbWVTeW5jICpmcykKK3N0YXRpYyBpbnQgcGFyc2VfZmVh dHVyZXMoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCiB7Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICpjdHgg PSBmcy0+cGFyZW50OwogICAgIExJQlZNQUZDb250ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIEFW RnJhbWUgKm1hc3RlciwgKnJlZjsKLSAgICBpbnQgcmV0OworICAgIGlmICghcy0+ZmVhdHVyZV9j ZmcpIHJldHVybiAwOwogCi0gICAgcmV0ID0gZmZfZnJhbWVzeW5jX2R1YWxpbnB1dF9nZXQoZnMs ICZtYXN0ZXIsICZyZWYpOwotICAgIGlmIChyZXQgPCAwKQotICAgICAgICByZXR1cm4gcmV0Owot ICAgIGlmICghcmVmKQotICAgICAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKGN0eC0+b3V0cHV0 c1swXSwgbWFzdGVyKTsKKyAgICBpbnQgZXJyID0gMDsKKworICAgIHVuc2lnbmVkIGRpY3RfY250 ID0gMDsKKyAgICBBVkRpY3Rpb25hcnkgKipkaWN0ID0gZGVsaW1pdGVkX2RpY3RfcGFyc2Uocy0+ ZmVhdHVyZV9jZmcsICZkaWN0X2NudCk7CisgICAgaWYgKCFkaWN0KSB7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJjb3VsZCBub3QgcGFyc2UgZmVh dHVyZSBjb25maWc6ICVzXG4iLCBzLT5mZWF0dXJlX2NmZyk7CisgICAgICAgIHJldHVybiBBVkVS Uk9SKEVJTlZBTCk7CisgICAgfQogCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZzLT5sb2NrKTsK KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGljdF9jbnQ7IGkrKykgeworICAgICAgICBj aGFyICpmZWF0dXJlX25hbWUgPSBOVUxMOworICAgICAgICBWbWFmRmVhdHVyZURpY3Rpb25hcnkg KmZlYXR1cmVfb3B0c19kaWN0ID0gTlVMTDsKKyAgICAgICAgQVZEaWN0aW9uYXJ5RW50cnkgKmUg PSBOVUxMOworCisgICAgICAgIHdoaWxlIChlID0gYXZfZGljdF9nZXQoZGljdFtpXSwgIiIsIGUs IEFWX0RJQ1RfSUdOT1JFX1NVRkZJWCkpIHsKKyAgICAgICAgICAgIGlmIChhdl9zdHJpc3RyKGUt PmtleSwgIm5hbWUiKSkgeworICAgICAgICAgICAgICAgIGZlYXR1cmVfbmFtZSA9IGUtPnZhbHVl OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBlcnIgPSB2bWFmX2ZlYXR1cmVfZGljdGlvbmFyeV9zZXQoJmZlYXR1cmVfb3B0c19kaWN0LCBl LT5rZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS0+ dmFsdWUpOworICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBzZXQg ZmVhdHVyZSBvcHRpb246ICVzLiVzPSVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBmZWF0 dXJlX25hbWUsIGUtPmtleSwgZS0+dmFsdWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGVyciA9IHZtYWZfdXNlX2ZlYXR1 cmUocy0+dm1hZiwgZmVhdHVyZV9uYW1lLCBmZWF0dXJlX29wdHNfZGljdCk7CisgICAgICAgIGlm IChlcnIpIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAg ICAgICAgICAgICAicHJvYmxlbSBkdXJpbmcgdm1hZl91c2VfZmVhdHVyZTogJXNcbiIsIGZlYXR1 cmVfbmFtZSk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CiAKLSAg ICB3aGlsZSAocy0+ZnJhbWVfc2V0ICYmICFzLT5lcnJvcikgewotICAgICAgICBwdGhyZWFkX2Nv bmRfd2FpdCgmcy0+Y29uZCwgJnMtPmxvY2spOworZXhpdDoKKyAgICBmb3IgKHVuc2lnbmVkIGkg PSAwOyBpIDwgZGljdF9jbnQ7IGkrKykgeworICAgICAgICBpZiAoZGljdFtpXSkKKyAgICAgICAg ICAgIGF2X2RpY3RfZnJlZSgmZGljdFtpXSk7CiAgICAgfQorICAgIGF2X2ZyZWUoZGljdCk7Cisg ICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwYXJzZV9tb2RlbHMoQVZGaWx0ZXJDb250 ZXh0ICpjdHgpCit7CisgICAgTElCVk1BRkNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgaWYg KCFzLT5tb2RlbF9jZmcpIHJldHVybiAwOworCisgICAgaW50IGVyciA9IDA7CiAKLSAgICBpZiAo cy0+ZXJyb3IpIHsKKyAgICB1bnNpZ25lZCBkaWN0X2NudCA9IDA7CisgICAgQVZEaWN0aW9uYXJ5 ICoqZGljdCA9IGRlbGltaXRlZF9kaWN0X3BhcnNlKHMtPm1vZGVsX2NmZywgJmRpY3RfY250KTsK KyAgICBpZiAoIWRpY3QpIHsKICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAotICAg ICAgICAgICAgICAgImxpYnZtYWYgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGNoZWNrIGxvZyBmb3Ig ZGV0YWlsc1xuIik7Ci0gICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzLT5sb2NrKTsKKyAg ICAgICAgICAgICAgICJjb3VsZCBub3QgcGFyc2UgbW9kZWwgY29uZmlnOiAlc1xuIiwgcy0+bW9k ZWxfY2ZnKTsKICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKICAgICB9CiAKLSAgICBh dl9mcmFtZV9yZWYocy0+Z3JlZiwgcmVmKTsKLSAgICBhdl9mcmFtZV9yZWYocy0+Z21haW4sIG1h c3Rlcik7CisgICAgcy0+bW9kZWxfY250ID0gZGljdF9jbnQ7CisgICAgcy0+bW9kZWwgPSBhdl9j YWxsb2Mocy0+bW9kZWxfY250LCBzaXplb2YoKnMtPm1vZGVsKSk7CisgICAgaWYgKCFzLT5tb2Rl bCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKIAotICAgIHMtPmZyYW1lX3NldCA9 IDE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRpY3RfY250OyBpKyspIHsKKyAgICAg ICAgVm1hZk1vZGVsQ29uZmlnIG1vZGVsX2NmZyA9IHsgMCB9OworICAgICAgICBBVkRpY3Rpb25h cnlFbnRyeSAqZSA9IE5VTEw7CisgICAgICAgIGNoYXIgKnZlcnNpb24gPSBOVUxMOworICAgICAg ICBjaGFyICAqcGF0aCA9IE5VTEw7CisKKyAgICAgICAgd2hpbGUgKGUgPSBhdl9kaWN0X2dldChk aWN0W2ldLCAiIiwgZSwgQVZfRElDVF9JR05PUkVfU1VGRklYKSkgeworICAgICAgICAgICAgaWYg KGF2X3N0cmlzdHIoZS0+a2V5LCAiZGlzYWJsZV9jbGlwIikpIHsKKyAgICAgICAgICAgICAgICBt b2RlbF9jZmcuZmxhZ3MgfD0gYXZfc3RyaXN0cihlLT52YWx1ZSwgInRydWUiKSA/CisgICAgICAg ICAgICAgICAgICAgIFZNQUZfTU9ERUxfRkxBR19ESVNBQkxFX0NMSVAgOiAwOworICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXZfc3Ry aXN0cihlLT5rZXksICJlbmFibGVfdHJhbnNmb3JtIikpIHsKKyAgICAgICAgICAgICAgICBtb2Rl bF9jZmcuZmxhZ3MgfD0gYXZfc3RyaXN0cihlLT52YWx1ZSwgInRydWUiKSA/CisgICAgICAgICAg ICAgICAgICAgIFZNQUZfTU9ERUxfRkxBR19FTkFCTEVfVFJBTlNGT1JNIDogMDsKKyAgICAgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGF2X3N0 cmlzdHIoZS0+a2V5LCAibmFtZSIpKSB7CisgICAgICAgICAgICAgICAgbW9kZWxfY2ZnLm5hbWUg PSBlLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgaWYgKGF2X3N0cmlzdHIoZS0+a2V5LCAidmVyc2lvbiIpKSB7CisgICAgICAg ICAgICAgICAgdmVyc2lvbiA9IGUtPnZhbHVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXZfc3RyaXN0cihlLT5rZXksICJwYXRo IikpIHsKKyAgICAgICAgICAgICAgICBwYXRoID0gZS0+dmFsdWU7CisgICAgICAgICAgICAgICAg Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyc2lv bikgeworICAgICAgICAgICAgZXJyID0gdm1hZl9tb2RlbF9sb2FkKCZzLT5tb2RlbFtpXSwgJm1v ZGVsX2NmZywgdmVyc2lvbik7CisgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAiY291 bGQgbm90IGxvYWQgbGlidm1hZiBtb2RlbCB3aXRoIHZlcnNpb246ICVzXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICB2ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGF0aCAmJiAhcy0+bW9kZWxbaV0p IHsKKyAgICAgICAgICAgIGVyciA9IHZtYWZfbW9kZWxfbG9hZF9mcm9tX3BhdGgoJnMtPm1vZGVs W2ldLCAmbW9kZWxfY2ZnLCBwYXRoKTsKKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAg ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAg ICJjb3VsZCBub3QgbG9hZCBsaWJ2bWFmIG1vZGVsIHdpdGggcGF0aDogJXNcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgIHBhdGgpOworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghcy0+bW9kZWxbaV0pIHsKKyAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAiY291 bGQgbm90IGxvYWQgbGlidm1hZiBtb2RlbCB3aXRoIGNvbmZpZzogJXNcbiIsCisgICAgICAgICAg ICAgICAgICAgcy0+bW9kZWxfY2ZnKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAg fQorCisgICAgICAgIHdoaWxlIChlID0gYXZfZGljdF9nZXQoZGljdFtpXSwgIiIsIGUsIEFWX0RJ Q1RfSUdOT1JFX1NVRkZJWCkpIHsKKyAgICAgICAgICAgIGNoYXIgKmZlYXR1cmVfb3B0ID0gTlVM TDsKKyAgICAgICAgICAgIGNoYXIgKmZlYXR1cmVfbmFtZSA9IGF2X3N0cnRvayhlLT5rZXksICIu IiwgJmZlYXR1cmVfb3B0KTsKKyAgICAgICAgICAgIGlmICghZmVhdHVyZV9vcHQpCisgICAgICAg ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIFZtYWZGZWF0dXJlRGljdGlvbmFyeSAq ZmVhdHVyZV9vcHRzX2RpY3QgPSBOVUxMOworICAgICAgICAgICAgZXJyID0gdm1hZl9mZWF0dXJl X2RpY3Rpb25hcnlfc2V0KCZmZWF0dXJlX29wdHNfZGljdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX29wdCwgZS0+dmFsdWUpOworICAgICAg ICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBzZXQgZmVhdHVyZSBvcHRpb246 ICVzLiVzPSVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlX25hbWUsIGZlYXR1 cmVfb3B0LCBlLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwp OworICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgZXJyID0gdm1hZl9tb2RlbF9mZWF0dXJlX292ZXJsb2FkKHMtPm1vZGVsW2ldLCBmZWF0dXJl X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVh dHVyZV9vcHRzX2RpY3QpOworICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxk IG5vdCBvdmVybG9hZCBmZWF0dXJlOiAlc1xuIiwgZmVhdHVyZV9uYW1lKTsKKyAgICAgICAgICAg ICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgZ290byBleGl0Owor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IHMtPm1vZGVsX2NudDsgaSsrKSB7CisgICAgICAgIGVyciA9IHZtYWZfdXNlX2ZlYXR1 cmVzX2Zyb21fbW9kZWwocy0+dm1hZiwgcy0+bW9kZWxbaV0pOworICAgICAgICBpZiAoZXJyKSB7 CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAg ICAgInByb2JsZW0gZHVyaW5nIHZtYWZfdXNlX2ZlYXR1cmVzX2Zyb21fbW9kZWxcbiIpOworICAg ICAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAgZ290byBleGl0Owor ICAgICAgICB9CisgICAgfQorCitleGl0OgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk aWN0X2NudDsgaSsrKSB7CisgICAgICAgIGlmIChkaWN0W2ldKQorICAgICAgICAgICAgYXZfZGlj dF9mcmVlKCZkaWN0W2ldKTsKKyAgICB9CisgICAgYXZfZnJlZShkaWN0KTsKKyAgICByZXR1cm4g ZXJyOworfQorCitzdGF0aWMgZW51bSBWbWFmTG9nTGV2ZWwgbG9nX2xldmVsX21hcChpbnQgbG9n X2xldmVsKQoreworICAgIHN3aXRjaCAobG9nX2xldmVsKSB7CisgICAgY2FzZSBBVl9MT0dfUVVJ RVQ6CisgICAgICAgIHJldHVybiBWTUFGX0xPR19MRVZFTF9OT05FOworICAgIGNhc2UgQVZfTE9H X0VSUk9SOgorICAgICAgICByZXR1cm4gVk1BRl9MT0dfTEVWRUxfRVJST1I7CisgICAgY2FzZSBB Vl9MT0dfV0FSTklORzoKKyAgICAgICAgcmV0dXJuIFZNQUZfTE9HX0xFVkVMX1dBUk5JTkc7Cisg ICAgY2FzZSBBVl9MT0dfSU5GTzoKKyAgICAgICAgcmV0dXJuIFZNQUZfTE9HX0xFVkVMX0lORk87 CisgICAgY2FzZSBBVl9MT0dfREVCVUc6CisgICAgICAgIHJldHVybiBWTUFGX0xPR19MRVZFTF9E RUJVRzsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gVk1BRl9MT0dfTEVWRUxfSU5GTzsK KyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGVwcmVjYXRlZF9vcHRpb25zKEFWRmlsdGVy Q29udGV4dCAqY3R4KQoreworICAgIExJQlZNQUZDb250ZXh0ICpzID0gY3R4LT5wcml2OworICAg IGludCBlcnIgPSAwOworCisgICAgaWYgKCFzLT5tb2RlbF9wYXRoKQorICAgICAgICBnb3RvIGV4 dHJhX21ldHJpY3Nfb25seTsKKworICAgIGVudW0gVm1hZk1vZGVsRmxhZ3MgZmxhZ3MgPSBWTUFG X01PREVMX0ZMQUdTX0RFRkFVTFQ7CisgICAgaWYgKHMtPmVuYWJsZV90cmFuc2Zvcm0gfHwgcy0+ cGhvbmVfbW9kZWwpCisgICAgICAgIGZsYWdzIHw9IFZNQUZfTU9ERUxfRkxBR19FTkFCTEVfVFJB TlNGT1JNOworCisgICAgVm1hZk1vZGVsQ29uZmlnIG1vZGVsX2NmZyA9IHsKKyAgICAgICAgLm5h bWUgPSAidm1hZiIsCisgICAgICAgIC5mbGFncyA9IGZsYWdzLAorICAgIH07CisKKyAgICBWbWFm TW9kZWwgKm1vZGVsID0gTlVMTDsKKyAgICBWbWFmTW9kZWxDb2xsZWN0aW9uICptb2RlbF9jb2xs ZWN0aW9uID0gTlVMTDsKKworICAgIGlmIChzLT5lbmFibGVfY29uZl9pbnRlcnZhbCkgeworICAg ICAgICBlcnIgPSB2bWFmX21vZGVsX2NvbGxlY3Rpb25fbG9hZF9mcm9tX3BhdGgoJm1vZGVsLCAm bW9kZWxfY29sbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZtb2RlbF9jZmcsIHMtPm1vZGVsX3BhdGgpOworICAgICAgICBpZiAoZXJy KSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAg ICAgICAgInByb2JsZW0gbG9hZGluZyBtb2RlbCBmaWxlOiAlc1xuIiwgcy0+bW9kZWxfcGF0aCk7 CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBlcnIgPSB2bWFm X3VzZV9mZWF0dXJlc19mcm9tX21vZGVsX2NvbGxlY3Rpb24ocy0+dm1hZiwgbW9kZWxfY29sbGVj dGlvbik7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAicHJvYmxlbSBsb2FkaW5nIGZlYXR1cmUgZXh0 cmFjdG9ycyBmcm9tIG1vZGVsIGZpbGU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIHMtPm1v ZGVsX3BhdGgpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfSBlbHNl IHsKKyAgICAgICAgZXJyID0gdm1hZl9tb2RlbF9sb2FkX2Zyb21fcGF0aCgmbW9kZWwsICZtb2Rl bF9jZmcsIHMtPm1vZGVsX3BhdGgpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICJwcm9i bGVtIGxvYWRpbmcgbW9kZWwgZmlsZTogJXNcbiIsIHMtPm1vZGVsX3BhdGgpOworICAgICAgICAg ICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIGVyciA9IHZtYWZfdXNlX2ZlYXR1cmVz X2Zyb21fbW9kZWwocy0+dm1hZiwgbW9kZWwpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgInByb2Js ZW0gbG9hZGluZyBmZWF0dXJlIGV4dHJhY3RvcnMgZnJvbSBtb2RlbCBmaWxlOiAlc1xuIiwKKyAg ICAgICAgICAgICAgICAgICBzLT5tb2RlbF9wYXRoKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsK KyAgICAgICAgfQorICAgIH0KKworZXh0cmFfbWV0cmljc19vbmx5OgorICAgIGlmIChzLT5wc25y KSB7CisgICAgICAgIFZtYWZGZWF0dXJlRGljdGlvbmFyeSAqZCA9IE5VTEw7CisgICAgICAgIHZt YWZfZmVhdHVyZV9kaWN0aW9uYXJ5X3NldCgmZCwgImVuYWJsZV9jaHJvbWEiLCAiZmFsc2UiKTsK KworICAgICAgICBlcnIgPSB2bWFmX3VzZV9mZWF0dXJlKHMtPnZtYWYsICJwc25yIiwgZCk7Cisg ICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwK KyAgICAgICAgICAgICAgICAgICAicHJvYmxlbSBsb2FkaW5nIGZlYXR1cmUgZXh0cmFjdG9yOiBw c25yXG4iKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAg IGlmIChzLT5zc2ltKSB7CisgICAgICAgIGVyciA9IHZtYWZfdXNlX2ZlYXR1cmUocy0+dm1hZiwg ImZsb2F0X3NzaW0iLCBOVUxMKTsKKyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICJwcm9ibGVtIGxvYWRp bmcgZmVhdHVyZSBleHRyYWN0b3I6IHNzaW1cbiIpOworICAgICAgICAgICAgZ290byBleGl0Owor ICAgICAgICB9CisgICAgfQogCi0gICAgcHRocmVhZF9jb25kX3NpZ25hbCgmcy0+Y29uZCk7Ci0g ICAgcHRocmVhZF9tdXRleF91bmxvY2soJnMtPmxvY2spOworICAgIGlmIChzLT5tc19zc2ltKSB7 CisgICAgICAgIGVyciA9IHZtYWZfdXNlX2ZlYXR1cmUocy0+dm1hZiwgImZsb2F0X21zX3NzaW0i LCBOVUxMKTsKKyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICJwcm9ibGVtIGxvYWRpbmcgZmVhdHVyZSBl eHRyYWN0b3I6IG1zX3NzaW1cbiIpOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9 CisgICAgfQogCi0gICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShjdHgtPm91dHB1dHNbMF0sIG1h c3Rlcik7CitleGl0OgorICAgIHJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBhdl9jb2xkIGludCBp bml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQogewogICAgIExJQlZNQUZDb250ZXh0ICpzID0gY3R4 LT5wcml2OworICAgIGludCBlcnIgPSAwOwogCi0gICAgcy0+Z3JlZiA9IGF2X2ZyYW1lX2FsbG9j KCk7Ci0gICAgcy0+Z21haW4gPSBhdl9mcmFtZV9hbGxvYygpOwotICAgIGlmICghcy0+Z3JlZiB8 fCAhcy0+Z21haW4pCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgVm1hZkNv bmZpZ3VyYXRpb24gY2ZnID0geworICAgICAgICAubG9nX2xldmVsID0gbG9nX2xldmVsX21hcChh dl9sb2dfZ2V0X2xldmVsKCkpLAorICAgICAgICAubl9zdWJzYW1wbGUgPSBzLT5uX3N1YnNhbXBs ZSwKKyAgICAgICAgLm5fdGhyZWFkcyA9IHMtPm5fdGhyZWFkcywKKyAgICB9OworCisgICAgZXJy ID0gdm1hZl9pbml0KCZzLT52bWFmLCBjZmcpOworICAgIGlmIChlcnIpCisgICAgICAgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICBlcnIgPSBwYXJzZV9kZXByZWNhdGVkX29wdGlvbnMo Y3R4KTsKKyAgICBpZiAoZXJyKQorICAgICAgICByZXR1cm4gZXJyOwogCi0gICAgcy0+ZXJyb3Ig PSAwOworICAgIGVyciA9IHBhcnNlX21vZGVscyhjdHgpOworICAgIGlmIChlcnIpCisgICAgICAg IHJldHVybiBlcnI7CiAKLSAgICBzLT52bWFmX3RocmVhZF9jcmVhdGVkID0gMDsKLSAgICBwdGhy ZWFkX211dGV4X2luaXQoJnMtPmxvY2ssIE5VTEwpOwotICAgIHB0aHJlYWRfY29uZF9pbml0ICgm cy0+Y29uZCwgTlVMTCk7CisgICAgZXJyID0gcGFyc2VfZmVhdHVyZXMoY3R4KTsKKyAgICBpZiAo ZXJyKQorICAgICAgICByZXR1cm4gZXJyOwogCiAgICAgcy0+ZnMub25fZXZlbnQgPSBkb192bWFm OwogICAgIHJldHVybiAwOwpAQCAtMjU2LDI2ICs1MzQsMzEgQEAgc3RhdGljIGNvbnN0IGVudW0g QVZQaXhlbEZvcm1hdCBwaXhfZm10c1tdID0gewogCiBzdGF0aWMgaW50IGNvbmZpZ19pbnB1dF9y ZWYoQVZGaWx0ZXJMaW5rICppbmxpbmspCiB7Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggID0g aW5saW5rLT5kc3Q7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBpbmxpbmstPmRzdDsKICAg ICBMSUJWTUFGQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBpbnQgdGg7CiAKLSAgICBpZiAo Y3R4LT5pbnB1dHNbMF0tPncgIT0gY3R4LT5pbnB1dHNbMV0tPncgfHwKLSAgICAgICAgY3R4LT5p bnB1dHNbMF0tPmggIT0gY3R4LT5pbnB1dHNbMV0tPmgpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0VSUk9SLCAiV2lkdGggYW5kIGhlaWdodCBvZiBpbnB1dCB2aWRlb3MgbXVzdCBiZSBz YW1lLlxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgaW50IGVyciA9 IDA7CisKKyAgICBpZiAoY3R4LT5pbnB1dHNbMF0tPncgIT0gY3R4LT5pbnB1dHNbMV0tPncpIHsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiaW5wdXQgd2lkdGggbXVzdCBtYXRj aC5cbiIpOworICAgICAgICBlcnIgfD0gQVZFUlJPUihFSU5WQUwpOwogICAgIH0KIAotICAgIHMt PmRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KGlubGluay0+Zm9ybWF0KTsKLSAgICBzLT53aWR0 aCA9IGN0eC0+aW5wdXRzWzBdLT53OwotICAgIHMtPmhlaWdodCA9IGN0eC0+aW5wdXRzWzBdLT5o OworICAgIGlmIChjdHgtPmlucHV0c1swXS0+aCAhPSBjdHgtPmlucHV0c1sxXS0+aCkgeworICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJpbnB1dCBoZWlnaHQgbXVzdCBtYXRjaC5c biIpOworICAgICAgICBlcnIgfD0gQVZFUlJPUihFSU5WQUwpOworICAgIH0KIAotICAgIHRoID0g cHRocmVhZF9jcmVhdGUoJnMtPnZtYWZfdGhyZWFkLCBOVUxMLCBjYWxsX3ZtYWYsICh2b2lkICop IHMpOwotICAgIGlmICh0aCkgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJU aHJlYWQgY3JlYXRpb24gZmFpbGVkLlxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7CisgICAgaWYgKGN0eC0+aW5wdXRzWzBdLT5mb3JtYXQgIT0gY3R4LT5pbnB1dHNbMV0tPmZv cm1hdCkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJpbnB1dCBwaXhfZm10 IG11c3QgbWF0Y2guXG4iKTsKKyAgICAgICAgZXJyIHw9IEFWRVJST1IoRUlOVkFMKTsKICAgICB9 Ci0gICAgcy0+dm1hZl90aHJlYWRfY3JlYXRlZCA9IDE7CisKKyAgICBpZiAoZXJyKQorICAgICAg ICByZXR1cm4gZXJyOworCisgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjID0gYXZf cGl4X2ZtdF9kZXNjX2dldChpbmxpbmstPmZvcm1hdCk7CisgICAgcy0+YnBjID0gZGVzYy0+Y29t cFswXS5kZXB0aDsKIAogICAgIHJldHVybiAwOwogfQpAQCAtMzA3LDI4ICs1OTAsNzkgQEAgc3Rh dGljIGludCBhY3RpdmF0ZShBVkZpbHRlckNvbnRleHQgKmN0eCkKICAgICByZXR1cm4gZmZfZnJh bWVzeW5jX2FjdGl2YXRlKCZzLT5mcyk7CiB9CiAKK3N0YXRpYyBlbnVtIFZtYWZPdXRwdXRGb3Jt YXQgbG9nX2ZtdF9tYXAoY29uc3QgY2hhciAqbG9nX2ZtdCkKK3sKKyAgICBpZiAoYXZfc3RyaXN0 cihsb2dfZm10LCAieG1sIikpCisgICAgICAgIHJldHVybiBWTUFGX09VVFBVVF9GT1JNQVRfWE1M OworICAgIGlmIChhdl9zdHJpc3RyKGxvZ19mbXQsICJqc29uIikpCisgICAgICAgIHJldHVybiBW TUFGX09VVFBVVF9GT1JNQVRfSlNPTjsKKyAgICBpZiAoYXZfc3RyaXN0cihsb2dfZm10LCAiY3N2 IikpCisgICAgICAgIHJldHVybiBWTUFGX09VVFBVVF9GT1JNQVRfQ1NWOworICAgIGlmIChhdl9z dHJpc3RyKGxvZ19mbXQsICJzdWIiKSkKKyAgICAgICAgcmV0dXJuIFZNQUZfT1VUUFVUX0ZPUk1B VF9TVUI7CisKKyAgICByZXR1cm4gVk1BRl9PVVRQVVRfRk9STUFUX1hNTDsKK30KKworc3RhdGlj IGVudW0gVm1hZlBvb2xpbmdNZXRob2QgcG9vbF9tZXRob2RfbWFwKGNvbnN0IGNoYXIgKnBvb2xf bWV0aG9kKQoreworICAgIGlmIChwb29sX21ldGhvZCkgeworICAgICAgICBpZiAoYXZfc3RyaXN0 cihwb29sX21ldGhvZCwgIm1pbiIpKQorICAgICAgICAgICAgcmV0dXJuIFZNQUZfUE9PTF9NRVRI T0RfTUlOOworICAgICAgICBpZiAoYXZfc3RyaXN0cihwb29sX21ldGhvZCwgIm1lYW4iKSkKKyAg ICAgICAgICAgIHJldHVybiBWTUFGX1BPT0xfTUVUSE9EX01FQU47CisgICAgICAgIGlmIChhdl9z dHJpc3RyKHBvb2xfbWV0aG9kLCAiaGFybW9uaWNfbWVhbiIpKQorICAgICAgICAgICAgcmV0dXJu IFZNQUZfUE9PTF9NRVRIT0RfSEFSTU9OSUNfTUVBTjsKKyAgICB9CisKKyAgICByZXR1cm4gVk1B Rl9QT09MX01FVEhPRF9NRUFOOworfQorCiBzdGF0aWMgYXZfY29sZCB2b2lkIHVuaW5pdChBVkZp bHRlckNvbnRleHQgKmN0eCkKIHsKICAgICBMSUJWTUFGQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsK IAorICAgIGludCBlcnIgPSAwOworCiAgICAgZmZfZnJhbWVzeW5jX3VuaW5pdCgmcy0+ZnMpOwog Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZzLT5sb2NrKTsKLSAgICBzLT5lb2YgPSAxOwotICAg IHB0aHJlYWRfY29uZF9zaWduYWwoJnMtPmNvbmQpOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZzLT5sb2NrKTsKKyAgICBpZiAoIXMtPmZyYW1lX2NudCkKKyAgICAgICAgZ290byBjbGVhbl91 cDsKIAotICAgIGlmIChzLT52bWFmX3RocmVhZF9jcmVhdGVkKQotICAgIHsKLSAgICAgICAgcHRo cmVhZF9qb2luKHMtPnZtYWZfdGhyZWFkLCBOVUxMKTsKLSAgICAgICAgcy0+dm1hZl90aHJlYWRf Y3JlYXRlZCA9IDA7CisgICAgZXJyID0gdm1hZl9yZWFkX3BpY3R1cmVzKHMtPnZtYWYsIE5VTEws IE5VTEwsIDApOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLAorICAgICAgICAgICAgICAgInByb2JsZW0gZmx1c2hpbmcgbGlidm1hZiBjb250ZXh0Llxu Iik7CiAgICAgfQogCi0gICAgYXZfZnJhbWVfZnJlZSgmcy0+Z3JlZik7Ci0gICAgYXZfZnJhbWVf ZnJlZSgmcy0+Z21haW4pOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzLT5tb2RlbF9j bnQ7IGkrKykgeworICAgICAgICBkb3VibGUgdm1hZl9zY29yZTsKKyAgICAgICAgZXJyID0gdm1h Zl9zY29yZV9wb29sZWQocy0+dm1hZiwgcy0+bW9kZWxbaV0sIHBvb2xfbWV0aG9kX21hcChzLT5w b29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZtYWZfc2NvcmUsIDAsIHMt PmZyYW1lX2NudCAtIDEpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgInByb2JsZW0gZ2V0dGluZyBw b29sZWQgdm1hZiBzY29yZS5cbiIpOworICAgICAgICB9CisKKyAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0lORk8sICJWTUFGIHNjb3JlOiAlZlxuIiwgdm1hZl9zY29yZSk7CisgICAgfQorCisg ICAgaWYgKHMtPnZtYWYpIHsKKyAgICAgICAgaWYgKHMtPmxvZ19wYXRoICYmICFlcnIpCisgICAg ICAgICAgICB2bWFmX3dyaXRlX291dHB1dChzLT52bWFmLCBzLT5sb2dfcGF0aCwgbG9nX2ZtdF9t YXAocy0+bG9nX2ZtdCkpOworICAgIH0KKworY2xlYW5fdXA6CisgICAgaWYgKHMtPm1vZGVsKSB7 CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzLT5tb2RlbF9jbnQ7IGkrKykgewor ICAgICAgICAgICAgaWYgKHMtPm1vZGVsW2ldKQorICAgICAgICAgICAgICAgIHZtYWZfbW9kZWxf ZGVzdHJveShzLT5tb2RlbFtpXSk7CisgICAgICAgIH0KKyAgICAgICAgYXZfZnJlZShzLT5tb2Rl bCk7CisgICAgfQogCi0gICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZzLT5sb2NrKTsKLSAgICBw dGhyZWFkX2NvbmRfZGVzdHJveSgmcy0+Y29uZCk7CisgICAgaWYgKHMtPnZtYWYpCisgICAgICAg IHZtYWZfY2xvc2Uocy0+dm1hZik7CiB9CiAKIHN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBsaWJ2 bWFmX2lucHV0c1tdID0gewotLSAKMi4yNC4zIChBcHBsZSBHaXQtMTI4KQoK --000000000000fb25cc05d4b5176c 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". --000000000000fb25cc05d4b5176c--