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 8D57A44700 for ; Tue, 25 Oct 2022 09:16:13 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6050A68BCCC; Tue, 25 Oct 2022 12:14:13 +0300 (EEST) Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1D58668BCBF for ; Tue, 25 Oct 2022 12:14:08 +0300 (EEST) Received: by mail-pj1-f50.google.com with SMTP id ez6so10205004pjb.1 for ; Tue, 25 Oct 2022 02:14:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date :references:in-reply-to:message-id:from:from:to:cc:subject:date :message-id:reply-to; bh=Xu643Do27z44rGh1wB3KblUYi4v435td9SJ7hMC5b9k=; b=TNpFIsDY4ZWLAxJXIGLAk9DNdt6guPDZHDmyqwkUVZxfChfCqTvNauU7mmIa3U2Dpb 5o3o+rZIbnpjvAb2d8XmOJQboopGQGEz+1UNIgmeNDA1gUJ3bgZfDBSF3M88irBY1OPs Ye4hk9QfPjEAf4HJ+llhrqv7h+oeajl/DnubsE91vAe8elSA57XMFwF2qYY96B7C6eAW 3bxRJ3n4thmfmapkbIhCKsI9JIT34sDQt1LJtmRHJQZVlbxodyW1sd1OcXys4zwxZpFX H/x8MRxpjWyv/UR2N5w4ykHV2f1W2EiqMTZXtip6nGpgQQx18UsOqzmDmJgRQ/C3b82E Y4cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date :references:in-reply-to:message-id:from:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Xu643Do27z44rGh1wB3KblUYi4v435td9SJ7hMC5b9k=; b=oY363ognx6/FidMuFAD4t7OnUadFzmgXoQHE5p7SuS4f2ZCW3M7H31cWfLWF3UmcHb GyFRGVwdmqw8/V6d+1mTbs5/Hk7FG+MGh1HuvgQbIoekQLqK+RQW92+JSsl1RdAj54S/ oBDSLYEguwloOZbo96bKTpl5U4cnFq5vfNEBbnTaBqlmbMU95TQAzi+QlFf7EdMVR5N+ kmzyllbU4SxFmeCICC2G1NrgDDrfim9HLJ56/RYGUFpemQfSiZoDs5JvYU6gD0JtAvEn /G/tKZY8mfCFkgFjoAQZmrPZufUnK8BChkrblfM/BvFR7CoUmBq9nxttgL+7zkxQn3e2 kJ7w== X-Gm-Message-State: ACrzQf1TZSJz68ANgo/gECbb+B5LVzWJAEJs8cY2DqzogWGGq4AmkKiR +R2uIFrdfXM9yXyprrUMoXzXALJGkMg= X-Google-Smtp-Source: AMsMyM4jSYInKmKRO9AHVWqIzLmVRTIQfD6OnRpllQTHS1ysAINoBcw6y8gxU1iRb1QMIgJIXQ9Ekg== X-Received: by 2002:a17:902:b907:b0:178:9d11:c978 with SMTP id bf7-20020a170902b90700b001789d11c978mr37775089plb.90.1666689247022; Tue, 25 Oct 2022 02:14:07 -0700 (PDT) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id cp9-20020a170902e78900b001865e69b4d7sm862900plb.264.2022.10.25.02.14.06 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 25 Oct 2022 02:14:06 -0700 (PDT) From: softworkz X-Google-Original-From: softworkz Message-Id: <15a8984fb7de42cecf341d5e184ee47ffc1f9681.1666689226.git.ffmpegagent@gmail.com> In-Reply-To: References: Date: Tue, 25 Oct 2022 09:13:36 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v9 15/25] avfilter/textmod: Add textmod, censor and show_speaker filters X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: softworkz Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: RnJvbTogc29mdHdvcmt6IDxzb2Z0d29ya3pAaG90bWFpbC5jb20+CgotIHRleHRtb2Qge1MgLT4g UykKICBNb2RpZnkgc3VidGl0bGUgdGV4dCBpbiBhIG51bWJlciBvZiB3YXlzCgotIGNlbnNvciB7 UyAtPiBTKQogIENlbnNvciBzdWJ0aXRsZXMgdXNpbmcgYSB3b3JkIGxpc3QKCi0gc2hvd19zcGVh a2VyIHtTIC0+IFMpCiAgUHJlcGVuZCBzcGVha2VyIG5hbWVzIGZyb20gQVNTIHN1YnRpdGxlcyB0 byB0aGUgdmlzaWJsZSB0ZXh0IGxpbmVzCgpTaWduZWQtb2ZmLWJ5OiBzb2Z0d29ya3ogPHNvZnR3 b3JrekBob3RtYWlsLmNvbT4KLS0tCiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgfCAyMDYgKysr KysrKysrKysrCiBsaWJhdmZpbHRlci9NYWtlZmlsZSAgICAgfCAgIDUgKwogbGliYXZmaWx0ZXIv YWxsZmlsdGVycy5jIHwgICA1ICsKIGxpYmF2ZmlsdGVyL3NmX3RleHRtb2QuYyB8IDcxMCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgOTI2 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9zZl90ZXh0bW9k LmMKCmRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRl eCBmYTZmZDU3Y2RjLi4xZjc5ODllOTJmIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisr KyBiL2RvYy9maWx0ZXJzLnRleGkKQEAgLTI3MzcyLDYgKzI3MzcyLDE0NSBAQCBleGlzdGluZyBm aWx0ZXJzIHVzaW5nIEBjb2Rley0tZGlzYWJsZS1maWx0ZXJzfS4KIAogQmVsb3cgaXMgYSBkZXNj cmlwdGlvbiBvZiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBzdWJ0aXRsZSBmaWx0ZXJzLgogCisK K0BzZWN0aW9uIGNlbnNvcgorCitDZW5zb3Igc2VsZWN0ZWQgd29yZHMgaW4gdGV4dCBzdWJ0aXRs ZXMuCisKK0lucHV0czoKK0BpdGVtaXplCitAaXRlbSAwOiBTdWJ0aXRsZXNbVEVYVF0KK0BlbmQg aXRlbWl6ZQorCitPdXRwdXRzOgorQGl0ZW1pemUKK0BpdGVtIDA6IFN1YnRpdGxlc1tURVhUXQor QGVuZCBpdGVtaXplCisKK0l0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCitA dGFibGUgQG9wdGlvbgorQGl0ZW0gbW9kZQorVGhlIGNlbnNvcmluZyBtb2RlIHRvIGFwcGx5Lgor CitTdXBwb3J0ZWQgY2Vuc29yaW5nIG1vZGVzIGFyZToKKworQHRhYmxlIEB2YXIKK0BpdGVtIDAs IGtlZXBfZmlyc3RfbGFzdAorUmVwbGFjZSBhbGwgY2hhcmFjdGVycyB3aXRoIHRoZSAnY2Vuc29y X2NoYXInIGV4Y2VwdCB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIHdvcmQu CitGb3Igd29yZHMgd2l0aCBsZXNzIHRoYW4gNCBjaGFyYWN0ZXJzLCB0aGUgbGFzdCBjaGFyYWN0 ZXIgd2lsbCBiZSByZXBsYWNlZCBhcyB3ZWxsLgorRm9yIHdvcmRzIHdpdGggbGVzcyB0aGFuIDMg Y2hhcmFjdGVycywgdGhlIGZpcnN0IGNoYXJhY3RlciB3aWxsIGJlIHJlcGxhY2VkIGFzIHdlbGwu CitAaXRlbSAxLCBrZWVwX2ZpcnN0CitSZXBsYWNlIGFsbCBjaGFyYWN0ZXJzIHdpdGggdGhlICdj ZW5zb3JfY2hhcicgZXhjZXB0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSB3b3JkLgorRm9yIHdv cmRzIHdpdGggbGVzcyB0aGFuIDMgY2hhcmFjdGVycywgdGhlIGZpcnN0IGNoYXJhY3RlciB3aWxs IGJlIHJlcGxhY2VkIGFzIHdlbGwuCitAaXRlbSAyLCBhbGwKK1JlcGxhY2UgYWxsIGNoYXJhY3Rl cnMgd2l0aCB0aGUgJ2NlbnNvcl9jaGFyJy4KK0BlbmQgdGFibGUKKworQGl0ZW0gd29yZHMKK0Eg bGlzdCBvZiB3b3JkcyB0byBjZW5zb3IsIHNlcGFyYXRlZCBieSAnc2VwYXJhdG9yJy4KKworQGl0 ZW0gd29yZHNfZmlsZQorU3BlY2lmeSBhIGZpbGUgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBjb250 ZW50cyBmb3IgdGhlICd3b3JkcycgcGFyYW1ldGVyLgorCitAaXRlbSBjZW5zb3JfY2hhcgorU2lu Z2xlIGNoYXJhY3RlciB1c2VkIGFzIHJlcGxhY2VtZW50IGZvciBjZW5zb3JpbmcuCisKK0BpdGVt IHNlcGFyYXRvcgorRGVsaW1pdGVyIGNoYXJhY3RlciBmb3Igd29yZHMuIFVzZWQgd2l0aCByZXBs YWNlX3dvcmRzIGFuZCByZW1vdmVfd29yZHMtIE11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyLgor VGhlIGRlZmF1bHQgaXMgJy4nLgorCitAZW5kIHRhYmxlCisKK0BzdWJzZWN0aW9uIEV4YW1wbGVz CisKK0BpdGVtaXplCitAaXRlbQorQ2Vuc29yIGEgZmV3IGdpdmVuIHdvcmRzIHdpdGggYSBwb3Vu ZCBjaGFyYWN0ZXIuCitAZXhhbXBsZQorZmZtcGVnIC1pICJodHRwOi8vc3RyZWFtcy52aWRlb2xh bi5vcmcvc2FtcGxlcy9zdWIvU1NBL3N1YnRpdGxlX3Rlc3RpbmdfY29tcGxleC5ta3YiIC1maWx0 ZXJfY29tcGxleCAiWzA6MV1jZW5zb3I9d29yZHM9J2Rpc3MsbG91ZGVyLGhvcGUsYmVhbSx3b3Jk JzpjZW5zb3JfY2hhcj0nIyciIC1tYXAgMCAteSBvdXRwdXQubWt2CitAZW5kIGV4YW1wbGUKK0Bl bmQgaXRlbWl6ZQorCisKK0BzZWN0aW9uIHRleHRtb2QKKworTW9kaWZ5IHN1YnRpdGxlIHRleHQg aW4gYSBudW1iZXIgb2Ygd2F5cy4KKworSW5wdXRzOgorQGl0ZW1pemUKK0BpdGVtIDA6IFN1YnRp dGxlc1tURVhUXQorQGVuZCBpdGVtaXplCisKK091dHB1dHM6CitAaXRlbWl6ZQorQGl0ZW0gMDog U3VidGl0bGVzW1RFWFRdCitAZW5kIGl0ZW1pemUKKworSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5n IHBhcmFtZXRlcnM6CisKK0B0YWJsZSBAb3B0aW9uCitAaXRlbSBtb2RlCitUaGUga2luZCBvZiB0 ZXh0IG1vZGlmaWNhdGlvbiB0byBhcHBseQorCitTdXBwb3J0ZWQgb3BlcmF0aW9uIG1vZGVzIGFy ZToKKworQHRhYmxlIEB2YXIKK0BpdGVtIDAsIGxlZXQKK0NvbnZlcnQgc3VidGl0bGUgdGV4dCB0 byAnbGVldCBzcGVhaycuIEl0J3MgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyBhcyB0aGUg bW9kaWZpY2F0aW9uIHdpbGwgYmUgdmlzaWJsZSB3aXRoIGFsbW9zdCBhbGwgdGV4dCBsaW5lcy4K K0BpdGVtIDEsIHRvX3VwcGVyCitDaGFuZ2UgYWxsIHRleHQgdG8gdXBwZXIgY2FzZS4gTWlnaHQg aW1wcm92ZSByZWFkYWJpbGl0eS4KK0BpdGVtIDIsIHRvX2xvd2VyCitDaGFuZ2UgYWxsIHRleHQg dG8gbG93ZXIgY2FzZS4KK0BpdGVtIDMsIHJlcGxhY2VfY2hhcnMKK1JlcGxhY2Ugb25lIG9yIG1v cmUgY2hhcmFjdGVycy4gUmVxdWlyZXMgdGhlIGZpbmQgYW5kIHJlcGxhY2UgcGFyYW1ldGVycyB0 byBiZSBzcGVjaWZpZWQuCitCb3RoIG5lZWQgdG8gYmUgZXF1YWwgaW4gbGVuZ3RoLgorVGhlIGZp cnN0IGNoYXIgaW4gZmluZCBpcyByZXBsYWNlZCBieSB0aGUgZmlyc3QgY2hhciBpbiByZXBsYWNl LCBzYW1lIGZvciBhbGwgc3Vic2VxdWVudCBjaGFycy4KK0BpdGVtIDQsIHJlbW92ZV9jaGFycwor UmVtb3ZlIGNlcnRhaW4gY2hhcmFjdGVycy4gUmVxdWlyZXMgdGhlIGZpbmQgcGFyYW1ldGVyIHRv IGJlIHNwZWNpZmllZC4KK0FsbCBjaGFycyBpbiB0aGUgZmluZCBwYXJhbWV0ZXIgc3RyaW5nIHdp bGwgYmUgcmVtb3ZlZCBmcm9tIGFsbCBzdWJ0aXRsZSB0ZXh0LgorQGl0ZW0gNSwgcmVwbGFjZV93 b3JkcworUmVwbGFjZSBvbmUgb3IgbW9yZSB3b3Jkcy4gUmVxdWlyZXMgdGhlIGZpbmQgYW5kIHJl cGxhY2UgcGFyYW1ldGVycyB0byBiZSBzcGVjaWZpZWQuIE11bHRpcGxlIHdvcmRzIG11c3QgYmUg c2VwYXJhdGVkIGJ5IHRoZSBkZWxpbWl0ZXIgY2hhciBzcGVjaWZpZWQgdmllIHRoZSBzZXBhcmF0 b3IgcGFyYW1ldGVyIChkZWZhdWx0OiAnLCcpLgorVGhlIG51bWJlciBvZiB3b3JkcyBpbiB0aGUg ZmluZCBhbmQgcmVwbGFjZSBwYXJhbWV0ZXJzIG5lZWRzIHRvIGJlIGVxdWFsLgorVGhlIGZpcnN0 IHdvcmQgaW4gZmluZCBpcyByZXBsYWNlZCBieSB0aGUgZmlyc3Qgd29yZCBpbiByZXBsYWNlLCBz YW1lIGZvciBhbGwgc3Vic2VxdWVudCB3b3JkcworQGl0ZW0gNiwgcmVtb3ZlX3dvcmRzCitSZW1v dmUgY2VydGFpbiB3b3Jkcy4gUmVxdWlyZXMgdGhlIGZpbmQgcGFyYW1ldGVyIHRvIGJlIHNwZWNp ZmllZC4gTXVsdGlwbGUgd29yZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgdGhlIGRlbGltaXRlciBj aGFyIHNwZWNpZmllZCB2aWUgdGhlIHNlcGFyYXRvciBwYXJhbWV0ZXIgKGRlZmF1bHQ6ICcsJyku CitBbGwgd29yZHMgaW4gdGhlIGZpbmQgcGFyYW1ldGVyIHN0cmluZyB3aWxsIGJlIHJlbW92ZWQg ZnJvbSBhbGwgc3VidGl0bGUgdGV4dC4KK0BlbmQgdGFibGUKKworQGl0ZW0gZmluZAorUmVxdWly ZWQgZm9yIHJlcGxhY2VfY2hhcnMsIHJlbW92ZV9jaGFycywgcmVwbGFjZV93b3JkcyBhbmQgcmVt b3ZlX3dvcmRzLgorCitAaXRlbSBmaW5kX2ZpbGUKK1NwZWNpZnkgYSBmaWxlIGZyb20gd2hpY2gg dG8gbG9hZCB0aGUgY29udGVudHMgZm9yIHRoZSAnZmluZCcgcGFyYW1ldGVyLgorCitAaXRlbSBy ZXBsYWNlCitSZXF1aXJlZCBmb3IgcmVwbGFjZV9jaGFycyBhbmQgcmVwbGFjZV93b3Jkcy4KKwor QGl0ZW0gcmVwbGFjZV9maWxlCitTcGVjaWZ5IGEgZmlsZSBmcm9tIHdoaWNoIHRvIGxvYWQgdGhl IGNvbnRlbnRzIGZvciB0aGUgJ3JlcGxhY2UnIHBhcmFtZXRlci4KKworQGl0ZW0gc2VwYXJhdG9y CitEZWxpbWl0ZXIgY2hhcmFjdGVyIGZvciB3b3Jkcy4gVXNlZCB3aXRoIHJlcGxhY2Vfd29yZHMg YW5kIHJlbW92ZV93b3Jkcy0gTXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIuCitUaGUgZGVmYXVs dCBpcyAnLicuCisKK0BlbmQgdGFibGUKKworQHN1YnNlY3Rpb24gRXhhbXBsZXMKKworQGl0ZW1p emUKK0BpdGVtCitDaGFuZ2UgYWxsIGNoYXJhY3RlcnMgdG8gdXBwZXIgY2FzZSB3aGlsZSBrZWVw aW5nIGFsbCBzdHlsZXMgYW5kIGFuaW1hdGlvbnM6CitAZXhhbXBsZQorZmZtcGVnIC1pICJodHRw czovL3N0cmVhbXMudmlkZW9sYW4ub3JnL2ZmbXBlZy9ta3Zfc3VidGl0bGVzLm1rdiIgLWZpbHRl cl9jb21wbGV4ICJbMDpzXXRleHRtb2Q9bW9kZT10b191cHBlciIgLW1hcCAwIC15IG91dC5ta3YK K0BlbmQgZXhhbXBsZQorQGl0ZW0KK1JlbW92ZSBhIHNldCBvZiBzeW1ib2wgY2hhcmFjdGVycyBm b3IgYW0gaW1wcm92ZWQgYW5kIHNtb290aGVyIHZpc3VhbCBhcHBlcmFuY2U6CitAZXhhbXBsZQor ZmZtcGVnIC1pICJodHRwczovL3N0cmVhbXMudmlkZW9sYW4ub3JnL2ZmbXBlZy9ta3Zfc3VidGl0 bGVzLm1rdiIgLWZpbHRlcl9jb21wbGV4ICJbMDpzXXRleHRtb2Q9bW9kZT1yZW1vdmVfY2hhcnM6 ZmluZD0nJCYjQCrCpyciIC1tYXAgMCAteSBvdXQubWt2CitAZW5kIGV4YW1wbGUKK0BlbmQgaXRl bWl6ZQorCiBAc2VjdGlvbiBncmFwaGljc3ViMnZpZGVvCiAKIFJlbmRlcnMgZ3JhcGhpYyBzdWJ0 aXRsZXMgYXMgdmlkZW8gZnJhbWVzLgpAQCAtMjc1MzksNiArMjc2NzgsNzMgQEAgZmZtcGVnIC1p ICJodHRwOi8vc3RyZWFtcy52aWRlb2xhbi5vcmcvc2FtcGxlcy9zdWIvU1NBL3N1YnRpdGxlX3Rl c3RpbmdfY29tcGxleC4KIEBlbmQgZXhhbXBsZQogQGVuZCBpdGVtaXplCiAKK0BzZWN0aW9uIHNo b3dzcGVha2VyCisKK1ByZXBlbmQgc3BlYWtlciBuYW1lcyB0byBzdWJ0aXRsZSBsaW5lcyAod2hl biBhdmFpbGFibGUpLgorCitTdWJ0aXRsZXMgaW4gQVNTL1NTQSBmb3JtYXQgYXJlIG9mdGVuIGlu Y2x1ZGluZyB0aGUgbmFtZXMgb2YgdGhlIHBlcnNvbnMKK29yIGNoYXJhY3RlciBmb3IgZWFjaCBz dWJ0aXRsZSBsaW5lLiBUaGUgc2hvd3NwZWFrZXIgZmlsdGVyIGFkZHMgdGhvc2UgbmFtZXMKK3Rv IHRoZSBhY3R1YWwgc3VidGl0bGUgdGV4dCB0byBtYWtlIGl0IHZpc2libGUgb24gcGxheWJhY2su CisKK0lucHV0czoKK0BpdGVtaXplCitAaXRlbSAwOiBTdWJ0aXRsZXNbVEVYVF0KK0BlbmQgaXRl bWl6ZQorCitPdXRwdXRzOgorQGl0ZW1pemUKK0BpdGVtIDA6IFN1YnRpdGxlc1tURVhUXQorQGVu ZCBpdGVtaXplCisKK0l0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCitAdGFi bGUgQG9wdGlvbgorQGl0ZW0gZm9ybWF0CitUaGUgZm9ybWF0IGZvciBwcmVwZW5kaW5nIHNwZWFr ZXIgbmFtZXMuIERlZmF1bHQgaXMgJ3NxdWFyZV9icmFja2V0cycuCisKK1N1cHBvcnRlZCBvcGVy YXRpb24gbW9kZXMgYXJlOgorCitAdGFibGUgQHZhcgorQGl0ZW0gMCwgc3F1YXJlX2JyYWNrZXRz CitFbmNsb3NlIHRoZSBzcGVha2VyIG5hbWUgaW4gc3F1YXJlIGJyYWNrZXRzLCBmb2xsb3dlZCBi eSBzcGFjZSAoJ1tzcGVha2VyXSB0ZXh0JykuCitAaXRlbSAxLCByb3VuZF9icmFja2V0cworRW5j bG9zZSB0aGUgc3BlYWtlciBuYW1lIGluIHJvdW5kIGJyYWNrZXRzLCBmb2xsb3dlZCBieSBzcGFj ZSAoJyhzcGVha2VyKSB0ZXh0JykuCitAaXRlbSAyLCBjb2xvbgorU2VwYXJhdGUgdGhlIHNwZWFr ZXIgbmFtZSB3aXRoIGEgY29sb24gYW5kIHNwYWNlICgnc3BlYWtlcjogdGV4dCcpLgorQGl0ZW0g MywgcGxhaW4KK1NlcGFyYXRlIHRoZSBzcGVha2VyIG5hbWUgd2l0aCBhIHNwYWNlIG9ubHkgKCdz cGVha2VyIHRleHQnKS4KK0BlbmQgdGFibGUKKworQGl0ZW0gbGluZV9icmVhaworU2V0IHRow61z IHBhcmFtZXRlciB0byBpbnNlcnQgYSBsaW5lIGJyZWFrIGJldHdlZW4gc3BlYWtlciBuYW1lIGFu ZCB0ZXh0IGluc3RlYWQgb2YgdGhlIHNwYWNlIGNoYXJhY3Rlci4KKworQGl0ZW0gc3R5bGUKK0Fs bG93cyB0byBzZXQgYSBzcGVjaWZpYyBzdHlsZSBmb3IgdGhlIHNwZWFrZXIgbmFtZSB0ZXh0Lgor CitUaGlzIGNhbiBiZSBlaXRoZXIgYSBuYW1lZCBzdHlsZSB0aGF0IGV4aXN0cyBpbiB0aGUgYXNz IHN1YnRpdGxlIGhlYWRlciBzY3JpcHQgKGUuZy4gJ0RlZmF1bHQnKSBvciBhbiBhc3Mgc3R5bGUg b3ZlcnJpZGUgY29kZS4KK0V4YW1wbGU6ICBAe1xcYyZIREQwMDAwJlxcYmUxXFxpMVxcYm9yZDEw QH0KK1RoaXMgc2V0cyB0aGUgY29sb3IgdG8gYmx1ZSwgZW5hYmxlcyBlZGdlIGJsdXJyaW5nLCBp dGFsaWMgZm9udCBhbmQgYSBib3JkZXIgb2Ygc2l6ZSAxMC4KKworVGhlIGJlaGF2aW9yIGlzIGFz IGZvbGxvd3M6CisKKy0gV2hlbiB0aGUgc3R5bGUgcGFyYW1ldGVyIGlzIG5vdCBwcm92aWRlZCwg dGhlIGZpbHRlciB3aWxsIGZpbmQgdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBldmVudCBzdHJp bmcgdGhhdCBpcyBhY3R1YWwgdGV4dC4KKyAgVGhlIHNwZWFrZXIgbmFtZSB3aWxsIGJlIGluc2Vy dGVkIGF0IHRoaXMgcG9zaXRpb24uIFRoaXMgYWxsb3dzIHRvIGhhdmUgdGhlIHNwZWFrZXIgbmFt ZSBzaG93biBpbiB0aGUgc2FtZSBzdHlsZSBsaWtlIHRoZQorICByZWd1bGFyIHRleHQsIGluIGNh c2UgdGhlIHN0cmluZyB3b3VsZCBzdGFydCB3aXRoIGEgc2VxdWVuY2Ugb2Ygc3R5bGUgY29kZXMu CistIFdoZW4gdGhlIHN0eWxlIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgZXZlcnl0aGluZyB3aWxs IGJlIHByZXBlbmRlZCB0byB0aGUgb3JpZ2luYWwgdGV4dDoKKyAgU3R5bGUgQ29kZSBvciBTdHls ZSBuYW1lID4+IFNwZWFrZXIgTmFtZSA+PiBTdHlsZSBSZXNldCBDb2RlID4+IE9yaWdpbmFsIFRl eHQKKworQGVuZCB0YWJsZQorCitAc3Vic2VjdGlvbiBFeGFtcGxlcworCitAaXRlbWl6ZQorQGl0 ZW0KK1ByZXBlbmQgc3BlYWtlciBuYW1lcyB3aXRoIGJsdWUgdGV4dCwgc21vb3RoIGVkZ2VzIGFu ZCBibGVuZC9vdmVybGF5IHRoYXQgb250byB0aGUgdmlkZW8uCitAZXhhbXBsZQorZmZtcGVnIC1p IElOUFVUIC1maWx0ZXJfY29tcGxleCAic2hvd3NwZWFrZXI9Zm9ybWF0PWNvbG9uOnN0eWxlPSdA e1xcYyZIREQwMDAwJlxcYmUxQH0nLFswOnZdb3ZlcmxheXRleHRzdWJzIgorQGVuZCBleGFtcGxl CitAZW5kIGl0ZW1pemUKKwogQHNlY3Rpb24gdGV4dHN1YjJ2aWRlbwogCiBDb252ZXJ0cyB0ZXh0 IHN1YnRpdGxlcyB0byB2aWRlbyBmcmFtZXMuCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9NYWtl ZmlsZSBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCmluZGV4IDIzMmQzY2MwZjguLjVkODJiM2U4YzQg MTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlCisrKyBiL2xpYmF2ZmlsdGVyL01ha2Vm aWxlCkBAIC01ODcsNiArNTg3LDExIEBAIE9CSlMtJChDT05GSUdfWVVWVEVTVFNSQ19GSUxURVIp ICAgICAgICAgICAgICs9IHZzcmNfdGVzdHNyYy5vCiAKIE9CSlMtJChDT05GSUdfTlVMTFNJTktf RklMVEVSKSAgICAgICAgICAgICAgICs9IHZzaW5rX251bGxzaW5rLm8KIAorIyBzdWJ0aXRsZSBm aWx0ZXJzCitPQkpTLSQoQ09ORklHX0NFTlNPUl9GSUxURVIpICAgICAgICAgICAgICAgICArPSBz Zl90ZXh0bW9kLm8KK09CSlMtJChDT05GSUdfU0hPV19TUEVBS0VSX0ZJTFRFUikgICAgICAgICAg ICs9IHNmX3RleHRtb2QubworT0JKUy0kKENPTkZJR19URVhUTU9EX0ZJTFRFUikgICAgICAgICAg ICAgICAgKz0gc2ZfdGV4dG1vZC5vCisKICMgbXVsdGltZWRpYSBmaWx0ZXJzCiBPQkpTLSQoQ09O RklHX0EzRFNDT1BFX0ZJTFRFUikgICAgICAgICAgICAgICArPSBhdmZfYTNkc2NvcGUubwogT0JK Uy0kKENPTkZJR19BQklUU0NPUEVfRklMVEVSKSAgICAgICAgICAgICAgKz0gYXZmX2FiaXRzY29w ZS5vCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgYi9saWJhdmZpbHRlci9h bGxmaWx0ZXJzLmMKaW5kZXggYTA0YWYwODY5YS4uZDdmMjRhYjdkYiAxMDA2NDQKLS0tIGEvbGli YXZmaWx0ZXIvYWxsZmlsdGVycy5jCisrKyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwpAQCAt NTc1LDYgKzU3NSwxMSBAQCBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfYXZzcmNfYXZzeW5jdGVz dDsKIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hdnNyY19hbW92aWU7CiBleHRlcm4gY29uc3Qg QVZGaWx0ZXIgZmZfYXZzcmNfbW92aWU7CiAKKy8qIHN1YnRpdGxlIGZpbHRlcnMgKi8KK2V4dGVy biBjb25zdCBBVkZpbHRlciBmZl9zZl9jZW5zb3I7CitleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZf c2Zfc2hvd3NwZWFrZXI7CitleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfc2ZfdGV4dG1vZDsKKwog LyogdGhvc2UgZmlsdGVycyBhcmUgcGFydCBvZiBwdWJsaWMgb3IgaW50ZXJuYWwgQVBJLAogICog dGhleSBhcmUgZm9ybWF0dGVkIHRvIG5vdCBiZSBmb3VuZCBieSB0aGUgZ3JlcAogICogYXMgdGhl eSBhcmUgbWFudWFsbHkgYWRkZWQgYWdhaW4gKGR1ZSB0byB0aGVpciAnbmFtZXMnCmRpZmYgLS1n aXQgYS9saWJhdmZpbHRlci9zZl90ZXh0bW9kLmMgYi9saWJhdmZpbHRlci9zZl90ZXh0bW9kLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOTY1MWUwN2M2NQotLS0gL2Rl di9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL3NmX3RleHRtb2QuYwpAQCAtMCwwICsxLDcxMCBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAyMSBzb2Z0d29ya3oKKyAqCisgKiBUaGlzIGZpbGUgaXMg cGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg KiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdp dGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmlsZQorICogdGV4dCBzdWJ0aXRsZSBmaWx0 ZXIgd2hpY2ggYWxsb3dzIHRvIG1vZGlmeSBzdWJ0aXRsZSB0ZXh0IGluIHNldmVyYWwgd2F5cwor ICovCisKKyNpbmNsdWRlIDxsaWJhdnV0aWwvYXNzX2ludGVybmFsLmg+CisKKyNpbmNsdWRlICJs aWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJhdnV0 aWwvYXNzX3NwbGl0X2ludGVybmFsLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2JwcmludC5oIgor I2luY2x1ZGUgImxpYmF2dXRpbC9maWxlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyKiBsZWV0X3Ny YyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBsZWV0X2RzdCA9ICJhYmNkM2Y2IzFqa2xtbjBwcTI1N3V2 d3h5ekFCKEQzRjYjMUpLTE1OMFBRMjU3VVZXWFlaIjsKKworZW51bSBUZXh0TW9kRmlsdGVyVHlw ZSB7CisgICAgVE1fVEVYVE1PRCwKKyAgICBUTV9DRU5TT1IsCisgICAgVE1fU0hPV19TUEVBS0VS LAorfTsKKworZW51bSBUZXh0TW9kT3BlcmF0aW9uIHsKKyAgICBPUF9MRUVULAorICAgIE9QX1RP X1VQUEVSLAorICAgIE9QX1RPX0xPV0VSLAorICAgIE9QX1JFUExBQ0VfQ0hBUlMsCisgICAgT1Bf UkVNT1ZFX0NIQVJTLAorICAgIE9QX1JFUExBQ0VfV09SRFMsCisgICAgT1BfUkVNT1ZFX1dPUkRT LAorICAgIE5CX09QUywKK307CisKK2VudW0gQ2Vuc29yTW9kZSB7CisgICAgQ01fS0VFUF9GSVJT VF9MQVNULAorICAgIENNX0tFRVBfRklSU1QsCisgICAgQ01fQUxMLAorfTsKKworZW51bSBTaG93 U3BlYWtlck1vZGUgeworICAgIFNNX1NRVUFSRV9CUkFDS0VUUywKKyAgICBTTV9ST1VORF9CUkFD S0VUUywKKyAgICBTTV9DT0xPTiwKKyAgICBTTV9QTEFJTiwKK307CisKK3R5cGVkZWYgc3RydWN0 IFRleHRNb2RDb250ZXh0IHsKKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsKKyAgICBlbnVtIEFW U3VidGl0bGVUeXBlIGZvcm1hdDsKKyAgICBlbnVtIFRleHRNb2RGaWx0ZXJUeXBlIGZpbHRlcl90 eXBlOworICAgIGVudW0gVGV4dE1vZE9wZXJhdGlvbiBvcGVyYXRpb247CisgICAgZW51bSBDZW5z b3JNb2RlIGNlbnNvcl9tb2RlOworICAgIGVudW0gU2hvd1NwZWFrZXJNb2RlIHNwZWFrZXJfbW9k ZTsKKyAgICBjaGFyICpmaW5kOworICAgIGNoYXIgKmZpbmRfZmlsZTsKKyAgICBjaGFyICpzdHls ZTsKKyAgICBjaGFyICpyZXBsYWNlOworICAgIGNoYXIgKnJlcGxhY2VfZmlsZTsKKyAgICBjaGFy ICpzZXBhcmF0b3I7CisgICAgY2hhciAqY2Vuc29yX2NoYXI7CisgICAgY2hhciAqKmZpbmRfbGlz dDsKKyAgICBpbnQgIGxpbmVfYnJlYWs7CisgICAgaW50ICBuYl9maW5kX2xpc3Q7CisgICAgY2hh ciAqKnJlcGxhY2VfbGlzdDsKKyAgICBpbnQgIG5iX3JlcGxhY2VfbGlzdDsKK30gVGV4dE1vZENv bnRleHQ7CisKK3N0YXRpYyBjaGFyICoqc3BsaXRfc3RyaW5nKGNoYXIgKnNvdXJjZSwgaW50ICpu Yl9lbGVtcywgY29uc3QgY2hhciAqZGVsaW0pCit7CisgICAgY2hhciAqKmxpc3QgPSBOVUxMOwor ICAgIGNoYXIgKnRlbXAgPSBOVUxMOworICAgIGNoYXIgKnB0ciA9IGF2X3N0cnRvayhzb3VyY2Us IGRlbGltLCAmdGVtcCk7CisKKyAgICB3aGlsZSAocHRyKSB7CisgICAgICAgIGlmIChzdHJsZW4o cHRyKSkgeworICAgICAgICAgICAgYXZfZHluYXJyYXlfYWRkKCZsaXN0LCBuYl9lbGVtcywgcHRy KTsKKyAgICAgICAgICAgIGlmICghbGlzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK KyAgICAgICAgfQorCisgICAgICAgIHB0ciA9IGF2X3N0cnRvayhOVUxMLCBkZWxpbSwgJnRlbXAp OworICAgIH0KKworICAgIGlmICghbGlzdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBm b3IgKGludCBpID0gMDsgaSA8ICpuYl9lbGVtczsgaSsrKSB7CisgICAgICAgIGxpc3RbaV0gPSBh dl9zdHJkdXAobGlzdFtpXSk7CisgICAgICAgIGlmICghbGlzdFtpXSkgeworICAgICAgICAgICAg Zm9yIChpbnQgbiA9IDA7IG4gPCBpOyBuKyspCisgICAgICAgICAgICAgICAgYXZfZnJlZShsaXN0 W25dKTsKKyAgICAgICAgICAgIGF2X2ZyZWUobGlzdCk7CisgICAgICAgICAgICByZXR1cm4gTlVM TDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBsaXN0OworfQorCitzdGF0aWMgaW50 IGxvYWRfdGV4dF9mcm9tX2ZpbGUoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmZp bGVfbmFtZSwgY2hhciAqKnRleHQsIGNoYXIgc2VwYXJhdG9yKQoreworICAgIGludCBlcnI7Cisg ICAgdWludDhfdCAqdGV4dGJ1ZjsKKyAgICBjaGFyICp0bXA7CisgICAgc2l6ZV90IHRleHRidWZf c2l6ZTsKKyAgICBpbnQgb2Zmc2V0ID0gMDsKKworICAgIGlmICgoZXJyID0gYXZfZmlsZV9tYXAo ZmlsZV9uYW1lLCAmdGV4dGJ1ZiwgJnRleHRidWZfc2l6ZSwgMCwgY3R4KSkgPCAwKSB7CisgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlRoZSB0ZXh0IGZpbGUgJyVzJyBjb3VsZCBu b3QgYmUgcmVhZCBvciBpcyBlbXB0eVxuIiwgZmlsZV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIGVy cjsKKyAgICB9CisKKyAgICBpZiAodGV4dGJ1Zl9zaXplID4gMSAmJgorICAgICAgICAodGV4dGJ1 ZlswXSA9PSAweEZGICYmIHRleHRidWZbMV0gPT0gMHhGRQorICAgICAgICB8fCB0ZXh0YnVmWzBd ID09IDB4RkUgJiYgdGV4dGJ1ZlsxXSA9PSAweEZGKSkgeworICAgICAgICBhdl9sb2coY3R4LCBB Vl9MT0dfRVJST1IsICJVVEYgdGV4dCBmaWxlcyBhcmUgbm90IHN1cHBvcnRlZC4gRmlsZTogJXNc biIsIGZpbGVfbmFtZSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQor CisgICAgaWYgKHRleHRidWZfc2l6ZSA+IDIgJiYgdGV4dGJ1ZlswXSA9PSAweEVGICYmIHRleHRi dWZbMV0gPT0gMHhCQiAmJiB0ZXh0YnVmWzJdID09IDB4QkYpCisgICAgICAgIG9mZnNldCA9IDM7 IC8vIFVURi04CisKKyAgICBpZiAodGV4dGJ1Zl9zaXplID4gU0laRV9NQVggLSAxIHx8ICEoKHRt cCA9IGF2X3N0cm5kdXAoKGNoYXIgKil0ZXh0YnVmICsgb2Zmc2V0LCB0ZXh0YnVmX3NpemUgLSBv ZmZzZXQpKSkpIHsKKyAgICAgICAgYXZfZmlsZV91bm1hcCh0ZXh0YnVmLCB0ZXh0YnVmX3NpemUp OworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgIGF2X2ZpbGVf dW5tYXAodGV4dGJ1ZiwgdGV4dGJ1Zl9zaXplKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp IDwgc3RybGVuKHRtcCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHRtcFtpXSkgeworICAgICAg ICBjYXNlICdcbic6CisgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgY2FzZSAnXGYnOgorICAg ICAgICBjYXNlICdcdic6CisgICAgICAgICAgICB0bXBbaV0gPSBzZXBhcmF0b3I7CisgICAgICAg IH0KKyAgICB9CisKKyAgICAqdGV4dCA9IHRtcDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGxvYWRfZmlsZXMoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgVGV4dE1vZENv bnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgaW50IHJldDsKKworICAgIGlmICghcy0+c2VwYXJh dG9yIHx8IHN0cmxlbihzLT5zZXBhcmF0b3IpICE9IDEpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0VSUk9SLCAiQSBzaW5nbGUgY2hhcmFjdGVyIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBm b3IgdGhlIHNlcGFyYXRvciBwYXJhbWV0ZXIuXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKKyAgICB9CisKKyAgICBpZiAocy0+ZmluZF9maWxlICYmIHN0cmxlbihzLT5maW5k X2ZpbGUpKSB7CisgICAgICAgIHJldCA9IGxvYWRfdGV4dF9mcm9tX2ZpbGUoY3R4LCBzLT5maW5k X2ZpbGUsICZzLT5maW5kLCBzLT5zZXBhcmF0b3JbMF0pOworICAgICAgICBpZiAocmV0IDwgMCAp CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGlmIChzLT5yZXBsYWNlX2Zp bGUgJiYgc3RybGVuKHMtPnJlcGxhY2VfZmlsZSkpIHsKKyAgICAgICAgcmV0ID0gbG9hZF90ZXh0 X2Zyb21fZmlsZShjdHgsIHMtPnJlcGxhY2VfZmlsZSwgJnMtPnJlcGxhY2UsIHMtPnNlcGFyYXRv clswXSk7CisgICAgICAgIGlmIChyZXQgPCAwICkKKyAgICAgICAgICAgIHJldHVybiByZXQ7Cisg ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jZW5zb3IoQVZGaWx0 ZXJDb250ZXh0ICpjdHgpCit7CisgICAgVGV4dE1vZENvbnRleHQgKnMgPSBjdHgtPnByaXY7Cisg ICAgaW50IHJldDsKKworICAgIHMtPmZpbHRlcl90eXBlID0gVE1fQ0VOU09SOworICAgIHMtPm9w ZXJhdGlvbiA9IE9QX1JFUExBQ0VfV09SRFM7CisKKyAgICByZXQgPSBsb2FkX2ZpbGVzKGN0eCk7 CisgICAgaWYgKHJldCA8IDAgKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgaWYgKCFzLT5m aW5kIHx8ICFzdHJsZW4ocy0+ZmluZCkpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiRWl0aGVyIHRoZSAnd29yZHMnIG9yIHRoZSAnd29yZHNfZmlsZScgcGFyYW1ldGVyIG5l ZWRzIHRvIGJlIHNwZWNpZmllZFxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 CisgICAgfQorCisgICAgaWYgKCFzLT5jZW5zb3JfY2hhciB8fCBzdHJsZW4ocy0+Y2Vuc29yX2No YXIpICE9IDEpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiQSBzaW5nbGUg Y2hhcmFjdGVyIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBmb3IgdGhlIGNlbnNvcl9jaGFyIHBhcmFt ZXRlclxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfQorCisgICAg cy0+ZmluZF9saXN0ID0gc3BsaXRfc3RyaW5nKHMtPmZpbmQsICZzLT5uYl9maW5kX2xpc3QsIHMt PnNlcGFyYXRvcik7CisgICAgaWYgKCFzLT5maW5kX2xpc3QpCisgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7CisKKyAgICBzLT5yZXBsYWNlX2xpc3QgPSBhdl9jYWxsb2Mocy0+bmJfZmlu ZF9saXN0LCBzaXplb2YoY2hhciAqKSk7CisgICAgaWYgKCFzLT5yZXBsYWNlX2xpc3QpCisgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMt Pm5iX2ZpbmRfbGlzdDsgaSsrKSB7CisgICAgICAgIHNpemVfdCBsZW4sIHN0YXJ0ID0gMCwgZW5k OworICAgICAgICBjaGFyICppdGVtID0gYXZfc3RyZHVwKHMtPmZpbmRfbGlzdFtpXSk7CisgICAg ICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICAgICAgbGVuID0gZW5kID0gc3RybGVuKGl0ZW0pOworCisgICAgICAgIHN3aXRjaCAocy0+Y2Vu c29yX21vZGUpIHsKKyAgICAgICAgY2FzZSBDTV9LRUVQX0ZJUlNUX0xBU1Q6CisKKyAgICAgICAg ICAgIGlmIChsZW4gPiAyKQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gMTsKKyAgICAgICAgICAg IGlmIChsZW4gPiAzKQorICAgICAgICAgICAgICAgIGVuZC0tOworCisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgY2FzZSBDTV9LRUVQX0ZJUlNUOgorCisgICAgICAgICAgICBpZiAobGVuID4g MikKKyAgICAgICAgICAgICAgICBzdGFydCA9IDE7CisKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgbiA9IHN0YXJ0OyBuIDwgZW5kOyBuKyspCisg ICAgICAgICAgICBpdGVtW25dID0gcy0+Y2Vuc29yX2NoYXJbMF07CisKKyAgICAgICAgcy0+cmVw bGFjZV9saXN0W2ldID0gaXRlbTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBpbml0X3Nob3dzcGVha2VyKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIFRleHRN b2RDb250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIHMtPmZpbHRlcl90eXBlID0gVE1fU0hPV19T UEVBS0VSOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdChBVkZpbHRlckNv bnRleHQgKmN0eCkKK3sKKyAgICBUZXh0TW9kQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBp bnQgcmV0OworCisgICAgcmV0ID0gbG9hZF9maWxlcyhjdHgpOworICAgIGlmIChyZXQgPCAwICkK KyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHN3aXRjaCAocy0+b3BlcmF0aW9uKSB7CisgICAg Y2FzZSBPUF9SRVBMQUNFX0NIQVJTOgorICAgIGNhc2UgT1BfUkVNT1ZFX0NIQVJTOgorICAgIGNh c2UgT1BfUkVQTEFDRV9XT1JEUzoKKyAgICBjYXNlIE9QX1JFTU9WRV9XT1JEUzoKKyAgICAgICAg aWYgKCFzLT5maW5kIHx8ICFzdHJsZW4ocy0+ZmluZCkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgIlNlbGVjdGVkIG1vZGUgcmVxdWlyZXMgdGhlICdmaW5kJyBwYXJh bWV0ZXIgdG8gYmUgc3BlY2lmaWVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChz LT5vcGVyYXRpb24pIHsKKyAgICBjYXNlIE9QX1JFUExBQ0VfQ0hBUlM6CisgICAgY2FzZSBPUF9S RVBMQUNFX1dPUkRTOgorICAgICAgICBpZiAoIXMtPnJlcGxhY2UgfHwgIXN0cmxlbihzLT5yZXBs YWNlKSkgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiU2VsZWN0ZWQg bW9kZSByZXF1aXJlcyB0aGUgJ3JlcGxhY2UnIHBhcmFtZXRlciB0byBiZSBzcGVjaWZpZWRcbiIp OworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgfQorICAgICAg ICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocy0+b3BlcmF0aW9uID09IE9QX1JFUExBQ0VfQ0hB UlMgJiYgc3RybGVuKHMtPmZpbmQpICE9IHN0cmxlbihzLT5yZXBsYWNlKSkgeworICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJTZWxlY3RlZCBtb2RlIHJlcXVpcmVzIHRoZSAnZmlu ZCcgYW5kICdyZXBsYWNlJyBwYXJhbWV0ZXJzIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoXG4iKTsK KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBpZiAocy0+b3Bl cmF0aW9uID09IE9QX1JFUExBQ0VfV09SRFMgfHwgcy0+b3BlcmF0aW9uID09IE9QX1JFTU9WRV9X T1JEUykgeworICAgICAgICBpZiAoIXMtPnNlcGFyYXRvciB8fCBzdHJsZW4ocy0+c2VwYXJhdG9y KSAhPSAxKSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJTZWxlY3Rl ZCBtb2RlIHJlcXVpcmVzIGEgc2luZ2xlIHNlcGFyYXRvciBjaGFyIHRvIGJlIHNwZWNpZmllZFxu Iik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICB9CisKKyAg ICAgICAgcy0+ZmluZF9saXN0ID0gc3BsaXRfc3RyaW5nKHMtPmZpbmQsICZzLT5uYl9maW5kX2xp c3QsIHMtPnNlcGFyYXRvcik7CisgICAgICAgIGlmICghcy0+ZmluZF9saXN0KQorICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgICAgICBpZiAocy0+b3BlcmF0aW9uID09 IE9QX1JFUExBQ0VfV09SRFMpIHsKKworICAgICAgICAgICAgcy0+cmVwbGFjZV9saXN0ID0gc3Bs aXRfc3RyaW5nKHMtPnJlcGxhY2UsICZzLT5uYl9yZXBsYWNlX2xpc3QsIHMtPnNlcGFyYXRvcik7 CisgICAgICAgICAgICBpZiAoIXMtPnJlcGxhY2VfbGlzdCkKKyAgICAgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgICAgICAgICBpZiAocy0+bmJfZmluZF9saXN0ICE9 IHMtPm5iX3JlcGxhY2VfbGlzdCkgeworICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIlRoZSBudW1iZXIgb2Ygd29yZHMgaW4gJ2ZpbmQnIGFuZCAncmVwbGFjZScgbmVl ZHMgdG8gYmUgZXF1YWxcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIFRleHRN b2RDb250ZXh0ICpzID0gY3R4LT5wcml2OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLT5u Yl9maW5kX2xpc3Q7IGkrKykKKyAgICAgICAgYXZfZnJlZXAoJnMtPmZpbmRfbGlzdFtpXSk7CisK KyAgICBzLT5uYl9maW5kX2xpc3QgPSAwOworICAgIGF2X2ZyZWVwKCZzLT5maW5kX2xpc3QpOwor CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLT5uYl9yZXBsYWNlX2xpc3Q7IGkrKykKKyAgICAg ICAgYXZfZnJlZXAoJnMtPnJlcGxhY2VfbGlzdFtpXSk7CisKKyAgICBzLT5uYl9yZXBsYWNlX2xp c3QgPSAwOworICAgIGF2X2ZyZWVwKCZzLT5yZXBsYWNlX2xpc3QpOworfQorCitzdGF0aWMgY2hh ciAqcHJvY2Vzc190ZXh0KFRleHRNb2RDb250ZXh0ICpzLCBjaGFyICp0ZXh0KQoreworICAgIGNv bnN0IGNoYXIgKmNoYXJfc3JjID0gcy0+ZmluZDsKKyAgICBjb25zdCBjaGFyICpjaGFyX2RzdCA9 IHMtPnJlcGxhY2U7CisgICAgY2hhciAqcmVzdWx0ICAgICAgICAgPSBOVUxMOworICAgIGludCBl c2NhcGVfbGV2ZWwgICAgID0gMCwgayA9IDA7CisKKyAgICBzd2l0Y2ggKHMtPm9wZXJhdGlvbikg eworICAgIGNhc2UgT1BfTEVFVDoKKyAgICBjYXNlIE9QX1JFUExBQ0VfQ0hBUlM6CisKKyAgICAg ICAgaWYgKHMtPm9wZXJhdGlvbiA9PSBPUF9MRUVUKSB7CisgICAgICAgICAgICBjaGFyX3NyYyA9 IGxlZXRfc3JjOworICAgICAgICAgICAgY2hhcl9kc3QgPSBsZWV0X2RzdDsKKyAgICAgICAgfQor CisgICAgICAgIHJlc3VsdCA9IGF2X3N0cmR1cCh0ZXh0KTsKKyAgICAgICAgaWYgKCFyZXN1bHQp CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBmb3IgKHNpemVfdCBuID0gMDsg biA8IHN0cmxlbihyZXN1bHQpOyBuKyspIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHRbbl0gPT0g J3snKQorICAgICAgICAgICAgICAgIGVzY2FwZV9sZXZlbCsrOworCisgICAgICAgICAgICBpZiAo IWVzY2FwZV9sZXZlbCkgeworICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oY2hh cl9zcmMpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IHQgPSAwOyB0IDwgbGVuOyB0Kysp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuXSA9PSBjaGFyX3NyY1t0XSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25dID0gY2hhcl9kc3RbdF07CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlc3VsdFtuXSA9PSAn fScpCisgICAgICAgICAgICAgICAgZXNjYXBlX2xldmVsLS07CisgICAgICAgIH0KKworICAgICAg ICBicmVhazsKKyAgICBjYXNlIE9QX1RPX1VQUEVSOgorICAgIGNhc2UgT1BfVE9fTE9XRVI6CisK KyAgICAgICAgcmVzdWx0ID0gYXZfc3RyZHVwKHRleHQpOworICAgICAgICBpZiAoIXJlc3VsdCkK KyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGZvciAoc2l6ZV90IG4gPSAwOyBu IDwgc3RybGVuKHJlc3VsdCk7IG4rKykgeworICAgICAgICAgICAgaWYgKHJlc3VsdFtuXSA9PSAn eycpCisgICAgICAgICAgICAgICAgZXNjYXBlX2xldmVsKys7CisgICAgICAgICAgICBpZiAoIWVz Y2FwZV9sZXZlbCkKKyAgICAgICAgICAgICAgICByZXN1bHRbbl0gPSBzLT5vcGVyYXRpb24gPT0g T1BfVE9fTE9XRVIgPyBhdl90b2xvd2VyKHJlc3VsdFtuXSkgOiBhdl90b3VwcGVyKHJlc3VsdFtu XSk7CisgICAgICAgICAgICBpZiAocmVzdWx0W25dID09ICd9JykKKyAgICAgICAgICAgICAgICBl c2NhcGVfbGV2ZWwtLTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1Bf UkVNT1ZFX0NIQVJTOgorCisgICAgICAgIHJlc3VsdCA9IGF2X3N0cmR1cCh0ZXh0KTsKKyAgICAg ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBmb3Ig KHNpemVfdCBuID0gMDsgbiA8IHN0cmxlbihyZXN1bHQpOyBuKyspIHsKKyAgICAgICAgICAgIGlu dCBza2lwX2NoYXIgPSAwOworCisgICAgICAgICAgICBpZiAocmVzdWx0W25dID09ICd7JykKKyAg ICAgICAgICAgICAgICBlc2NhcGVfbGV2ZWwrKzsKKworICAgICAgICAgICAgaWYgKCFlc2NhcGVf bGV2ZWwpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKGNoYXJfc3JjKTsK KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCB0ID0gMDsgdCA8IGxlbjsgdCsrKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbbl0gPT0gY2hhcl9zcmNbdF0pIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHNraXBfY2hhciA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgaWYgKCFza2lwX2NoYXIpCisgICAgICAgICAgICAgICAgcmVz dWx0W2srK10gPSByZXN1bHRbbl07CisKKyAgICAgICAgICAgIGlmIChyZXN1bHRbbl0gPT0gJ30n KQorICAgICAgICAgICAgICAgIGVzY2FwZV9sZXZlbC0tOworICAgICAgICB9CisKKyAgICAgICAg cmVzdWx0W2tdID0gMDsKKworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9QX1JFUExBQ0VfV09S RFM6CisgICAgY2FzZSBPUF9SRU1PVkVfV09SRFM6CisKKyAgICAgICAgcmVzdWx0ID0gYXZfc3Ry ZHVwKHRleHQpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBOVUxM OworCisgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDwgcy0+bmJfZmluZF9saXN0OyBuKyspIHsK KyAgICAgICAgICAgIGNoYXIgKnRtcCAgICAgICAgICAgPSByZXN1bHQ7CisgICAgICAgICAgICBj b25zdCBjaGFyICpyZXBsYWNlID0gKHMtPm9wZXJhdGlvbiA9PSBPUF9SRVBMQUNFX1dPUkRTKSA/ IHMtPnJlcGxhY2VfbGlzdFtuXSA6ICIiOworCisgICAgICAgICAgICByZXN1bHQgPSBhdl9zdHJp cmVwbGFjZShyZXN1bHQsIHMtPmZpbmRfbGlzdFtuXSwgcmVwbGFjZSk7CisgICAgICAgICAgICBp ZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAg YXZfZnJlZSh0bXApOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGNoYXIgKnByb2Nlc3NfZGlhbG9nX3Nob3dfc3Bl YWtlcihUZXh0TW9kQ29udGV4dCAqcywgY2hhciAqYXNzX2xpbmUpCit7CisgICAgQVNTRGlhbG9n ICpkaWFsb2cgPSBhdnByaXZfYXNzX3NwbGl0X2RpYWxvZyhOVUxMLCBhc3NfbGluZSk7CisgICAg aW50IGVzY2FwZV9sZXZlbCA9IDA7CisgICAgdW5zaWduZWQgcG9zID0gMCwgbGVuOworICAgIGNo YXIgKnJlc3VsdCwgKnRleHQ7CisgICAgQVZCUHJpbnQgcGJ1ZjsKKworICAgIGlmICghZGlhbG9n KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHRleHQgPSBwcm9jZXNzX3RleHQocywgZGlh bG9nLT50ZXh0KTsKKyAgICBpZiAoIXRleHQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAg aWYgKCFkaWFsb2ctPm5hbWUgfHwgIXN0cmxlbihkaWFsb2ctPm5hbWUpIHx8ICFkaWFsb2ctPnRl eHQgfHwgIXN0cmxlbihkaWFsb2ctPnRleHQpKQorICAgICAgICByZXR1cm4gYXZfc3RyZHVwKGFz c19saW5lKTsKKworICAgIC8vIEZpbmQgaW5zZXJ0aW9uIHBvaW50IGluIGNhc2UgdGhlIGxpbmUg c3RhcnRzIHdpdGggc3R5bGUgY29kZXMKKyAgICBsZW4gPSAodW5zaWduZWQpc3RybGVuKGRpYWxv Zy0+dGV4dCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisKKyAg ICAgICAgaWYgKGRpYWxvZy0+dGV4dFtpXSA9PSAneycpCisgICAgICAgICAgICBlc2NhcGVfbGV2 ZWwrKzsKKworICAgICAgICBpZiAoZGlhbG9nLT50ZXh0W2ldID09ICd9JykKKyAgICAgICAgICAg IGVzY2FwZV9sZXZlbC0tOworCisgICAgICAgIGlmIChlc2NhcGVfbGV2ZWwgPT0gMCkgeworICAg ICAgICAgICAgcG9zID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor CisgICAgaWYgKHMtPnN0eWxlICYmIHN0cmxlbihzLT5zdHlsZSkpCisgICAgICAgIC8vIFdoZW4g YSBzdHlsZSBpcyBzcGVjaWZpZWQgcmVzZXQgdGhlIGluc2VydGlvbiBwb2ludAorICAgICAgICAv LyAoYWx3YXlzIGFkZCBzcGVha2VyIHBsdXMgc3R5bGUgYXQgdGhlIHN0YXJ0IGluIHRoYXQgY2Fz ZSkKKyAgICAgICAgcG9zID0gMDsKKworICAgIGlmIChwb3MgPj0gbGVuIC0gMSkKKyAgICAgICAg cmV0dXJuIGF2X3N0cmR1cChhc3NfbGluZSk7CisKKyAgICBhdl9icHJpbnRfaW5pdCgmcGJ1Ziwg MSwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsKKworICAgIGlmIChwb3MgPiAwKSB7CisgICAg ICAgIGF2X2JwcmludF9hcHBlbmRfZGF0YSgmcGJ1ZiwgZGlhbG9nLT50ZXh0LCBwb3MpOworICAg IH0KKworICAgIGlmIChzLT5zdHlsZSAmJiBzdHJsZW4ocy0+c3R5bGUpKSB7CisgICAgICAgIGlm IChzLT5zdHlsZVswXSA9PSAneycpCisgICAgICAgICAgICAvLyBBc3N1bWUgY29tcGxldGUgYW5k IHZhbGlkIHN0eWxlIGNvZGUsIGUuZy4ge1xjJkhGRjAwMDAmfQorICAgICAgICAgICAgYXZfYnBy aW50ZigmcGJ1ZiwgIiVzIiwgcy0+c3R5bGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAv LyBPdGhlcndpc2UgaXQgbXVzdCBiZSBhIHN0eWxlIG5hbWUKKyAgICAgICAgICAgIGF2X2Jwcmlu dGYoJnBidWYsICJ7XFxyJXN9Iiwgcy0+c3R5bGUpOworICAgIH0KKworICAgIHN3aXRjaCAocy0+ c3BlYWtlcl9tb2RlKSB7CisgICAgY2FzZSBTTV9TUVVBUkVfQlJBQ0tFVFM6CisgICAgICAgIGF2 X2JwcmludGYoJnBidWYsICJbJXNdIiwgZGlhbG9nLT5uYW1lKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBTTV9ST1VORF9CUkFDS0VUUzoKKyAgICAgICAgYXZfYnByaW50ZigmcGJ1ZiwgIigl cykiLCBkaWFsb2ctPm5hbWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNNX0NPTE9OOgor ICAgICAgICBhdl9icHJpbnRmKCZwYnVmLCAiJXM6IiwgZGlhbG9nLT5uYW1lKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBTTV9QTEFJTjoKKyAgICAgICAgYXZfYnByaW50ZigmcGJ1ZiwgIiVz IiwgZGlhbG9nLT5uYW1lKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHMtPnN0 eWxlICYmIHN0cmxlbihzLT5zdHlsZSkpIHsKKyAgICAgICAgLy8gUmVzZXQgbGluZSBzdHlsZQor ICAgICAgICBpZiAoZGlhbG9nLT5zdHlsZSAmJiBzdHJsZW4oZGlhbG9nLT5zdHlsZSkgJiYgIWF2 X3N0cmNhc2VjbXAoZGlhbG9nLT5zdHlsZSwgImRlZmF1bHQiKSkKKyAgICAgICAgICAgIGF2X2Jw cmludGYoJnBidWYsICJ7XFxyJXN9IiwgZGlhbG9nLT5zdHlsZSk7CisgICAgICAgIGVsc2UKKyAg ICAgICAgICAgIGF2X2JwcmludGYoJnBidWYsICJ7XFxyfSIpOworICAgIH0KKworICAgIGlmIChz LT5saW5lX2JyZWFrKQorICAgICAgICBhdl9icHJpbnRmKCZwYnVmLCAiXFxOIik7CisgICAgZWxz ZQorICAgICAgICBhdl9icHJpbnRmKCZwYnVmLCAiICIpOworCisgICAgYXZfYnByaW50X2FwcGVu ZF9kYXRhKCZwYnVmLCBkaWFsb2ctPnRleHQgKyBwb3MsIGxlbiAtIHBvcyk7CisKKyAgICBhdl9i cHJpbnRfZmluYWxpemUoJnBidWYsICZ0ZXh0KTsKKworICAgIHJlc3VsdCA9IGF2cHJpdl9hc3Nf Z2V0X2RpYWxvZ19leChkaWFsb2ctPnJlYWRvcmRlciwgZGlhbG9nLT5sYXllciwgZGlhbG9nLT5z dHlsZSwgZGlhbG9nLT5uYW1lLCBkaWFsb2ctPm1hcmdpbl9sLCBkaWFsb2ctPm1hcmdpbl9yLCBk aWFsb2ctPm1hcmdpbl92LCBkaWFsb2ctPmVmZmVjdCwgdGV4dCk7CisKKyAgICBhdl9mcmVlKHRl eHQpOworICAgIGF2cHJpdl9hc3NfZnJlZV9kaWFsb2coJmRpYWxvZyk7CisgICAgcmV0dXJuIHJl c3VsdDsKK30KKworc3RhdGljIGNoYXIgKnByb2Nlc3NfZGlhbG9nKFRleHRNb2RDb250ZXh0ICpz LCBjaGFyICphc3NfbGluZSkKK3sKKyAgICBBU1NEaWFsb2cgKmRpYWxvZzsKKyAgICBjaGFyICpy ZXN1bHQsICp0ZXh0OworCisgICAgaWYgKHMtPmZpbHRlcl90eXBlID09IFRNX1NIT1dfU1BFQUtF UikKKyAgICAgICAgcmV0dXJuIHByb2Nlc3NfZGlhbG9nX3Nob3dfc3BlYWtlcihzLCBhc3NfbGlu ZSk7CisKKyAgICBkaWFsb2cgPSBhdnByaXZfYXNzX3NwbGl0X2RpYWxvZyhOVUxMLCBhc3NfbGlu ZSk7CisgICAgaWYgKCFkaWFsb2cpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdGV4dCA9 IHByb2Nlc3NfdGV4dChzLCBkaWFsb2ctPnRleHQpOworICAgIGlmICghdGV4dCkKKyAgICAgICAg cmV0dXJuIE5VTEw7CisKKyAgICByZXN1bHQgPSBhdnByaXZfYXNzX2dldF9kaWFsb2dfZXgoZGlh bG9nLT5yZWFkb3JkZXIsIGRpYWxvZy0+bGF5ZXIsIGRpYWxvZy0+c3R5bGUsIGRpYWxvZy0+bmFt ZSwgZGlhbG9nLT5tYXJnaW5fbCwgZGlhbG9nLT5tYXJnaW5fciwgZGlhbG9nLT5tYXJnaW5fdiwg ZGlhbG9nLT5lZmZlY3QsIHRleHQpOworCisgICAgYXZfZnJlZSh0ZXh0KTsKKyAgICBhdnByaXZf YXNzX2ZyZWVfZGlhbG9nKCZkaWFsb2cpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp YyBpbnQgY29uZmlnX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0 ZXJMaW5rICppbmxpbmsgPSBvdXRsaW5rLT5zcmMtPmlucHV0c1swXTsKKworICAgIG91dGxpbmst PncgPSBpbmxpbmstPnc7CisgICAgb3V0bGluay0+aCA9IGlubGluay0+aDsKKyAgICBvdXRsaW5r LT50aW1lX2Jhc2UgPSBpbmxpbmstPnRpbWVfYmFzZTsKKyAgICBvdXRsaW5rLT5mcmFtZV9yYXRl ID0gaW5saW5rLT5mcmFtZV9yYXRlOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg ZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1lICpmcmFtZSkKK3sKKyAg ICBUZXh0TW9kQ29udGV4dCAqcyA9IGlubGluay0+ZHN0LT5wcml2OworICAgIEFWRmlsdGVyTGlu ayAqb3V0bGluayA9IGlubGluay0+ZHN0LT5vdXRwdXRzWzBdOworICAgIGludCByZXQ7CisKKyAg ICBvdXRsaW5rLT5mb3JtYXQgPSBpbmxpbmstPmZvcm1hdDsKKworICAgIHJldCA9IGF2X2ZyYW1l X21ha2Vfd3JpdGFibGUoZnJhbWUpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4g cmV0OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1lLT5udW1fc3VidGl0bGVf YXJlYXM7IGkrKykgeworCisgICAgICAgIEFWU3VidGl0bGVBcmVhICphcmVhID0gZnJhbWUtPnN1 YnRpdGxlX2FyZWFzW2ldOworCisgICAgICAgIGlmIChhcmVhLT5hc3MpIHsKKyAgICAgICAgICAg IGNoYXIgKnRtcCA9IGFyZWEtPmFzczsKKyAgICAgICAgICAgIGFyZWEtPmFzcyA9IHByb2Nlc3Nf ZGlhbG9nKHMsIGFyZWEtPmFzcyk7CisgICAgICAgICAgICBhdl9mcmVlKHRtcCk7CisgICAgICAg ICAgICBpZiAoIWFyZWEtPmFzcykKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRs aW5rLCBmcmFtZSk7Cit9CisKKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFRleHRNb2RDb250 ZXh0LCB4KQorI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfU1VCVElUTEVfUEFSQU0gfCBBVl9P UFRfRkxBR19GSUxURVJJTkdfUEFSQU0pCisKK3N0YXRpYyBjb25zdCBBVk9wdGlvbiB0ZXh0bW9k X29wdGlvbnNbXSA9IHsKKyAgICB7ICJtb2RlIiwgICAgICAgICAgICAgInNldCBvcGVyYXRpb24g bW9kZSIsICAgICAgICAgICAgICBPRkZTRVQob3BlcmF0aW9uKSwgICAgQVZfT1BUX1RZUEVfSU5U LCAgICB7Lmk2ND1PUF9MRUVUfSwgICAgICAgICAgT1BfTEVFVCwgTkJfT1BTLTEsIEZMQUdTLCAi bW9kZSIgfSwKKyAgICB7ICAgImxlZXQiLCAgICAgICAgICAgImNvbnZlcnQgdGV4dCB0byAnbGVl dCBzcGVhayciLCAgICAwLCAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7 Lmk2ND1PUF9MRUVUfSwgICAgICAgICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCAibW9kZSIg fSwKKyAgICB7ICAgInRvX3VwcGVyIiwgICAgICAgImNoYW5nZSB0byB1cHBlciBjYXNlIiwgICAg ICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1P UF9UT19VUFBFUn0sICAgICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCAibW9kZSIgfSwKKyAg ICB7ICAgInRvX2xvd2VyIiwgICAgICAgImNoYW5nZSB0byBsb3dlciBjYXNlIiwgICAgICAgICAg ICAwLCAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1PUF9UT19M T1dFUn0sICAgICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAg InJlcGxhY2VfY2hhcnMiLCAgInJlcGxhY2UgY2hhcmFjdGVycyIsICAgICAgICAgICAgICAwLCAg ICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1PUF9SRVBMQUNFX0NI QVJTfSwgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgInJlbW92 ZV9jaGFycyIsICAgInJlbW92ZSBjaGFyYWN0ZXJzIiwgICAgICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1PUF9SRU1PVkVfQ0hBUlN9LCAg MCwgICAgICAgMCwgICAgICAgIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgInJlcGxhY2Vfd29y ZHMiLCAgInJlcGxhY2Ugd29yZHMiLCAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1PUF9SRVBMQUNFX1dPUkRTfSwgMCwgICAg ICAgMCwgICAgICAgIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgInJlbW92ZV93b3JkcyIsICAg InJlbW92ZSB3b3JkcyIsICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg QVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1PUF9SRU1PVkVfV09SRFN9LCAgMCwgICAgICAgMCwg ICAgICAgIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICJmaW5kIiwgICAgICAgICAgICAgImNoYXJz L3dvcmRzIHRvIGZpbmQgb3IgcmVtb3ZlIiwgICBPRkZTRVQoZmluZCksICAgICAgICAgQVZfT1BU X1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAgICAgICAgICAgMCwgICAgICAgMCwgICAgICAg IEZMQUdTLCBOVUxMICAgfSwKKyAgICB7ICJmaW5kX2ZpbGUiLCAgICAgICAgImxvYWQgZmluZCBw YXJhbSBmcm9tIGZpbGUiLCAgICAgICBPRkZTRVQoZmluZF9maWxlKSwgICAgQVZfT1BUX1RZUEVf U1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAgICAgICAgICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdT LCBOVUxMICAgfSwKKyAgICB7ICJyZXBsYWNlIiwgICAgICAgICAgImNoYXJzL3dvcmRzIHRvIHJl cGxhY2UiLCAgICAgICAgICBPRkZTRVQocmVwbGFjZSksICAgICAgQVZfT1BUX1RZUEVfU1RSSU5H LCB7LnN0ciA9IE5VTEx9LCAgICAgICAgICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCBOVUxM ICAgfSwKKyAgICB7ICJyZXBsYWNlX2ZpbGUiLCAgICAgImxvYWQgcmVwbGFjZSBwYXJhbSBmcm9t IGZpbGUiLCAgICBPRkZTRVQocmVwbGFjZV9maWxlKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0 ciA9IE5VTEx9LCAgICAgICAgICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCBOVUxMICAgfSwK KyAgICB7ICJzZXBhcmF0b3IiLCAgICAgICAgIndvcmQgc2VwYXJhdG9yIiwgICAgICAgICAgICAg ICAgICBPRkZTRVQoc2VwYXJhdG9yKSwgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9ICIs In0sICAgICAgICAgICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCBOVUxMICAgfSwKKyAgICB7 IE5VTEwgfSwKK307CisKKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIGNlbnNvcl9vcHRpb25zW10g PSB7CisgICAgeyAibW9kZSIsICAgICAgICAgICAgICAgInNldCBjZW5zb3JpbmcgbW9kZSIsICAg ICAgICBPRkZTRVQoY2Vuc29yX21vZGUpLCBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0PUNNX0tF RVBfRklSU1RfTEFTVH0sIDAsIDIsIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgImtlZXBfZmly c3RfbGFzdCIsICAiY2Vuc29yIGlubmVyIGNoYXJzIiwgICAgICAgIDAsICAgICAgICAgICAgICAg ICAgIEFWX09QVF9UWVBFX0NPTlNULCAgey5pNjQ9Q01fS0VFUF9GSVJTVF9MQVNUfSwgMCwgMCwg RkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAia2VlcF9maXJzdCIsICAgICAgICJjZW5zb3IgYWxs IGJ1dCBmaXJzdCBjaGFyIiwgMCwgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1Qs ICB7Lmk2ND1DTV9LRUVQX0ZJUlNUfSwgICAgICAwLCAwLCBGTEFHUywgIm1vZGUiIH0sCisgICAg eyAgICJhbGwiLCAgICAgICAgICAgICAgImNlbnNvciBhbGwgY2hhcnMiLCAgICAgICAgICAwLCAg ICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PUNNX0FMTH0sICAgICAg ICAgICAgIDAsIDAsIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICJ3b3JkcyIsICAgICAgICAgICAg ICAibGlzdCBvZiB3b3JkcyB0byBjZW5zb3IiLCAgIE9GRlNFVChmaW5kKSwgICAgICAgIEFWX09Q VF9UWVBFX1NUUklORywgey5zdHIgPSBOVUxMfSwgICAgICAgICAgICAgMCwgMCwgRkxBR1MsIE5V TEwgICB9LAorICAgIHsgIndvcmRzX2ZpbGUiLCAgICAgICAgICJwYXRoIHRvIHdvcmQgbGlzdCBm aWxlIiwgICAgT0ZGU0VUKGZpbmRfZmlsZSksICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9 IE5VTEx9LCAgICAgICAgICAgICAwLCAwLCBGTEFHUywgTlVMTCAgIH0sCisgICAgeyAic2VwYXJh dG9yIiwgICAgICAgICAgIndvcmQgc2VwYXJhdG9yIiwgICAgICAgICAgICBPRkZTRVQoc2VwYXJh dG9yKSwgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gIiwifSwgICAgICAgICAgICAgIDAs IDAsIEZMQUdTLCBOVUxMICAgfSwKKyAgICB7ICJjZW5zb3JfY2hhciIsICAgICAgICAicmVwbGFj ZW1lbnQgY2hhcmFjdGVyIiwgICAgIE9GRlNFVChjZW5zb3JfY2hhciksIEFWX09QVF9UWVBFX1NU UklORywgey5zdHIgPSAiKiJ9LCAgICAgICAgICAgICAgMCwgMCwgRkxBR1MsIE5VTEwgICB9LAor ICAgIHsgTlVMTCB9LAorfTsKKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIHNob3dzcGVha2VyX29w dGlvbnNbXSA9IHsKKyAgICB7ICJmb3JtYXQiLCAgICAgICAgICAgICAic3BlYWtlciBuYW1lIGZv cm1hdHRpbmciLCAgICAgICAgT0ZGU0VUKHNwZWFrZXJfbW9kZSksIEFWX09QVF9UWVBFX0lOVCwg ICAgey5pNjQ9U01fU1FVQVJFX0JSQUNLRVRTfSwgMCwgMiwgRkxBR1MsICJmb3JtYXQiIH0sCisg ICAgeyAgICJzcXVhcmVfYnJhY2tldHMiLCAgIltzcGVha2VyXSB0ZXh0IiwgICAgICAgICAgICAg ICAgIDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PVNNX1NR VUFSRV9CUkFDS0VUU30sIDAsIDAsIEZMQUdTLCAiZm9ybWF0IiB9LAorICAgIHsgICAicm91bmRf YnJhY2tldHMiLCAgICIoc3BlYWtlcikgdGV4dCIsICAgICAgICAgICAgICAgICAwLCAgICAgICAg ICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1TTV9ST1VORF9CUkFDS0VUU30s ICAwLCAwLCBGTEFHUywgImZvcm1hdCIgfSwKKyAgICB7ICAgImNvbG9uIiwgICAgICAgICAgICAi c3BlYWtlcjogdGV4dCIsICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgIEFW X09QVF9UWVBFX0NPTlNULCAgey5pNjQ9U01fQ09MT059LCAgICAgICAgICAgMCwgMCwgRkxBR1Ms ICJmb3JtYXQiIH0sCisgICAgeyAgICJwbGFpbiIsICAgICAgICAgICAgInNwZWFrZXIgdGV4dCIs ICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05T VCwgIHsuaTY0PVNNX1BMQUlOfSwgICAgICAgICAgIDAsIDAsIEZMQUdTLCAiZm9ybWF0IiB9LAor ICAgIHsgImxpbmVfYnJlYWsiLCAgICAgICAgICJpbnNlcnQgbGluZSBicmVhayIsICAgICAgICAg ICAgICBPRkZTRVQobGluZV9icmVhayksICAgQVZfT1BUX1RZUEVfQk9PTCwgICB7Lmk2ND0wfSwg ICAgICAgICAgICAgICAgICAwLCAxLCBGTEFHUywgTlVMTCAgICAgfSwKKyAgICB7ICJzdHlsZSIs ICAgICAgICAgICAgICAiYXNzIHR5cGUgbmFtZSBvciBzdHlsZSBjb2RlIiwgICAgT0ZGU0VUKHN0 eWxlKSwgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSBOVUxMfSwgICAgICAgICAg ICAgMCwgMCwgRkxBR1MsIE5VTEwgICAgIH0sCisgICAgeyBOVUxMIH0sCit9OworCitBVkZJTFRF Ul9ERUZJTkVfQ0xBU1ModGV4dG1vZCk7CitBVkZJTFRFUl9ERUZJTkVfQ0xBU1MoY2Vuc29yKTsK K0FWRklMVEVSX0RFRklORV9DTEFTUyhzaG93c3BlYWtlcik7CisKK3N0YXRpYyBjb25zdCBBVkZp bHRlclBhZCBpbnB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVm YXVsdCIsCisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfU1VCVElUTEUsCisg ICAgICAgIC5maWx0ZXJfZnJhbWUgPSBmaWx0ZXJfZnJhbWUsCisgICAgfSwKK307CisKK3N0YXRp YyBjb25zdCBBVkZpbHRlclBhZCBvdXRwdXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSAg ICAgICAgICA9ICJkZWZhdWx0IiwKKyAgICAgICAgLnR5cGUgICAgICAgICAgPSBBVk1FRElBX1RZ UEVfU1VCVElUTEUsCisgICAgICAgIC5jb25maWdfcHJvcHMgID0gY29uZmlnX291dHB1dCwKKyAg ICB9LAorfTsKKworY29uc3QgQVZGaWx0ZXIgZmZfc2ZfdGV4dG1vZCA9IHsKKyAgICAubmFtZSAg ICAgICAgICA9ICJ0ZXh0bW9kIiwKKyAgICAuZGVzY3JpcHRpb24gICA9IE5VTExfSUZfQ09ORklH X1NNQUxMKCJNb2RpZnkgc3VidGl0bGUgdGV4dCBpbiBzZXZlcmFsIHdheXMiKSwKKyAgICAuaW5p dCAgICAgICAgICA9IGluaXQsCisgICAgLnVuaW5pdCAgICAgICAgPSB1bmluaXQsCisgICAgLnBy aXZfc2l6ZSAgICAgPSBzaXplb2YoVGV4dE1vZENvbnRleHQpLAorICAgIC5wcml2X2NsYXNzICAg ID0gJnRleHRtb2RfY2xhc3MsCisgICAgRklMVEVSX0lOUFVUUyhpbnB1dHMpLAorICAgIEZJTFRF Ul9PVVRQVVRTKG91dHB1dHMpLAorICAgIEZJTFRFUl9TSU5HTEVfU1VCRk1UKEFWX1NVQlRJVExF X0ZNVF9BU1MpLAorfTsKKworY29uc3QgQVZGaWx0ZXIgZmZfc2ZfY2Vuc29yID0geworICAgIC5u YW1lICAgICAgICAgID0gImNlbnNvciIsCisgICAgLmRlc2NyaXB0aW9uICAgPSBOVUxMX0lGX0NP TkZJR19TTUFMTCgiQ2Vuc29yIHdvcmRzIGluIHN1YnRpdGxlIHRleHQiKSwKKyAgICAuaW5pdCAg ICAgICAgICA9IGluaXRfY2Vuc29yLAorICAgIC51bmluaXQgICAgICAgID0gdW5pbml0LAorICAg IC5wcml2X3NpemUgICAgID0gc2l6ZW9mKFRleHRNb2RDb250ZXh0KSwKKyAgICAucHJpdl9jbGFz cyAgICA9ICZjZW5zb3JfY2xhc3MsCisgICAgRklMVEVSX0lOUFVUUyhpbnB1dHMpLAorICAgIEZJ TFRFUl9PVVRQVVRTKG91dHB1dHMpLAorICAgIEZJTFRFUl9TSU5HTEVfU1VCRk1UKEFWX1NVQlRJ VExFX0ZNVF9BU1MpLAorfTsKKworY29uc3QgQVZGaWx0ZXIgZmZfc2Zfc2hvd3NwZWFrZXIgPSB7 CisgICAgLm5hbWUgICAgICAgICAgPSAic2hvd3NwZWFrZXIiLAorICAgIC5kZXNjcmlwdGlvbiAg ID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIlByZXBlbmQgc3BlYWtlciBuYW1lcyB0byB0ZXh0IHN1 YnRpdGxlcyAod2hlbiBhdmFpbGFibGUpIiksCisgICAgLmluaXQgICAgICAgICAgPSBpbml0X3No b3dzcGVha2VyLAorICAgIC51bmluaXQgICAgICAgID0gdW5pbml0LAorICAgIC5wcml2X3NpemUg ICAgID0gc2l6ZW9mKFRleHRNb2RDb250ZXh0KSwKKyAgICAucHJpdl9jbGFzcyAgICA9ICZzaG93 c3BlYWtlcl9jbGFzcywKKyAgICBGSUxURVJfSU5QVVRTKGlucHV0cyksCisgICAgRklMVEVSX09V VFBVVFMob3V0cHV0cyksCisgICAgRklMVEVSX1NJTkdMRV9TVUJGTVQoQVZfU1VCVElUTEVfRk1U X0FTUyksCit9OwotLSAKZmZtcGVnLWNvZGVib3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRl dmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVn LWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVn LWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K