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 B6F7C4371A for ; Sun, 26 Jun 2022 16:37:50 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8AC1268B866; Sun, 26 Jun 2022 19:35:46 +0300 (EEST) Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 08A7368B84B for ; Sun, 26 Jun 2022 19:35:39 +0300 (EEST) Received: by mail-pg1-f172.google.com with SMTP id 23so6948428pgc.8 for ; Sun, 26 Jun 2022 09:35:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:message-id:in-reply-to:references:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=xpyUAz8Q7vEI2BSrprkI5z1Srlkx9YCbDoT86cBgDXs=; b=el/+gzwQhiFvbuQ+ckq56fLJ1upD3RbHy25Je2obIsdaX8qrW7PcKXKOESh5ayCr1l Sg3kYxkDlu1/Jbzvgcnp3nQPExN57gvMjsRlwgjQf0ThH2bapJW6lxH/yYLf1WaHMBq2 kB063RS9TZjrGE/BkbhNypRKYwFaCtx2FTW9MsmF9wxbzqXcWse0UfxP7y9GPS9fHz26 sBjKUiRJeivcVYI/n5hq6I8R6VQTeMblSpuNPYGDyKH5MnjipHbSjMdkT/X9wlF0ZQ7l sAwr6Q16DHb3an76uPpzNIoV6CR6oZZ/Bd4hVrEOQvR35P47UTaZOwDScUCU3pSwPRp4 Ao5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:message-id:in-reply-to:references:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=xpyUAz8Q7vEI2BSrprkI5z1Srlkx9YCbDoT86cBgDXs=; b=UhLMIuUByxiVZ7/slHLFU22LK9hkfvZu47UgyXeA7g3kH2TlH7oxLEIEdrzpYh54hf lm6Jn8XGRI0pULUFPR2vvHROsIrh2z8KH4O4UrUkFq5IDql2CuUbK/5FK5dzLNscaI2K ufX3M/a9sSrDkt/h/Bj27JVGyVBldmITrIyDsCwM7AmoKfaKqefCVeCQwByrzMFVJtE/ g1e6E6WEuFOdoiGN/qFiMlB4KeSWLYN/fgT680PQqbNdIzAspYRt75oWtx8BOuK91Uxd dTXRzxRz90xFbfICsQ7eQNkNj8Qu6gX/IiBE9hxlNHG9UdDfCLaCMFoOarmd8B+QisFY R2Yw== X-Gm-Message-State: AJIora93oE67/MN/wZBaIFzDyAhEiOgD54xRghfHk4/Hu4pnkSmuDVx5 88cVlRbUH5ltjWvpaAhTD8gE40VWZJyUpw== X-Google-Smtp-Source: AGRyM1sNdNzC1YJv36pxUKjS03Da34syDsddhE9d2BIeSzwHfxgaZCPeALTJtns0hMCXjgmeWct6DA== X-Received: by 2002:a63:458:0:b0:40d:d763:3905 with SMTP id 85-20020a630458000000b0040dd7633905mr4204646pge.349.1656261339234; Sun, 26 Jun 2022 09:35:39 -0700 (PDT) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id d9-20020a170902654900b0016357fd0fd1sm5431732pln.69.2022.06.26.09.35.38 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 26 Jun 2022 09:35:38 -0700 (PDT) From: softworkz X-Google-Original-From: softworkz Message-Id: <6330a337b21ca736fd88c60bc211a4b916112853.1656261322.git.ffmpegagent@gmail.com> In-Reply-To: References: Date: Sun, 26 Jun 2022 16:35:12 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v6 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: Michael Niedermayer , softworkz , Andriy Gelman , Andreas Rheinhardt 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 eCBiNzNhMzgwNTE1Li4wZDA3OGUyNTczIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisr KyBiL2RvYy9maWx0ZXJzLnRleGkKQEAgLTI2OTk4LDYgKzI2OTk4LDE0NSBAQCBleGlzdGluZyBm 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 aXRsZXMgYXMgdmlkZW8gZnJhbWVzLgpAQCAtMjcxNjUsNiArMjczMDQsNzMgQEAgZmZtcGVnIC1p 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 ZmlsZSBiL2xpYmF2ZmlsdGVyL01ha2VmaWxlCmluZGV4IDc0ODJkZjdhMmEuLjZhNjhjNDRlMWMg MTAwNjQ0Ci0tLSBhL2xpYmF2ZmlsdGVyL01ha2VmaWxlCisrKyBiL2xpYmF2ZmlsdGVyL01ha2Vm aWxlCkBAIC01NzcsNiArNTc3LDExIEBAIE9CSlMtJChDT05GSUdfWVVWVEVTVFNSQ19GSUxURVIp ICAgICAgICAgICAgICs9IHZzcmNfdGVzdHNyYy5vCiAKIE9CSlMtJChDT05GSUdfTlVMTFNJTktf RklMVEVSKSAgICAgICAgICAgICAgICs9IHZzaW5rX251bGxzaW5rLm8KIAorIyBzdWJ0aXRsZSBm aWx0ZXJzCitPQkpTLSQoQ09ORklHX0NFTlNPUl9GSUxURVIpICAgICAgICAgICAgICAgICArPSBz Zl90ZXh0bW9kLm8KK09CSlMtJChDT05GSUdfU0hPV19TUEVBS0VSX0ZJTFRFUikgICAgICAgICAg ICs9IHNmX3RleHRtb2QubworT0JKUy0kKENPTkZJR19URVhUTU9EX0ZJTFRFUikgICAgICAgICAg ICAgICAgKz0gc2ZfdGV4dG1vZC5vCisKICMgbXVsdGltZWRpYSBmaWx0ZXJzCiBPQkpTLSQoQ09O RklHX0FCSVRTQ09QRV9GSUxURVIpICAgICAgICAgICAgICArPSBhdmZfYWJpdHNjb3BlLm8KIE9C SlMtJChDT05GSUdfQURSQVdHUkFQSF9GSUxURVIpICAgICAgICAgICAgICs9IGZfZHJhd2dyYXBo Lm8KZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYyBiL2xpYmF2ZmlsdGVyL2Fs bGZpbHRlcnMuYwppbmRleCBlNTQwZWMzNDlmLi4yMjI4ZTQxNGRiIDEwMDY0NAotLS0gYS9saWJh dmZpbHRlci9hbGxmaWx0ZXJzLmMKKysrIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCkBAIC01 NjksNiArNTY5LDExIEBAIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hdnNyY19hdnN5bmN0ZXN0 OwogZXh0ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX2F2c3JjX2Ftb3ZpZTsKIGV4dGVybiBjb25zdCBB VkZpbHRlciBmZl9hdnNyY19tb3ZpZTsKIAorLyogc3VidGl0bGUgZmlsdGVycyAqLworZXh0ZXJu IGNvbnN0IEFWRmlsdGVyIGZmX3NmX2NlbnNvcjsKK2V4dGVybiBjb25zdCBBVkZpbHRlciBmZl9z Zl9zaG93c3BlYWtlcjsKK2V4dGVybiBjb25zdCBBVkZpbHRlciBmZl9zZl90ZXh0bW9kOworCiAv KiB0aG9zZSBmaWx0ZXJzIGFyZSBwYXJ0IG9mIHB1YmxpYyBvciBpbnRlcm5hbCBBUEksCiAgKiB0 aGV5IGFyZSBmb3JtYXR0ZWQgdG8gbm90IGJlIGZvdW5kIGJ5IHRoZSBncmVwCiAgKiBhcyB0aGV5 IGFyZSBtYW51YWxseSBhZGRlZCBhZ2FpbiAoZHVlIHRvIHRoZWlyICduYW1lcycKZGlmZiAtLWdp dCBhL2xpYmF2ZmlsdGVyL3NmX3RleHRtb2QuYyBiL2xpYmF2ZmlsdGVyL3NmX3RleHRtb2QuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45NjUxZTA3YzY1Ci0tLSAvZGV2 L251bGwKKysrIGIvbGliYXZmaWx0ZXIvc2ZfdGV4dG1vZC5jCkBAIC0wLDAgKzEsNzEwIEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDIxIHNvZnR3b3JregorICoKKyAqIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiB0ZXh0IHN1YnRpdGxlIGZpbHRl ciB3aGljaCBhbGxvd3MgdG8gbW9kaWZ5IHN1YnRpdGxlIHRleHQgaW4gc2V2ZXJhbCB3YXlzCisg Ki8KKworI2luY2x1ZGUgPGxpYmF2dXRpbC9hc3NfaW50ZXJuYWwuaD4KKworI2luY2x1ZGUgImxp YmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImxpYmF2dXRp bC9hc3Nfc3BsaXRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYnByaW50LmgiCisj aW5jbHVkZSAibGliYXZ1dGlsL2ZpbGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIqIGxlZXRfc3Jj ID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoi Oworc3RhdGljIGNvbnN0IGNoYXIqIGxlZXRfZHN0ID0gImFiY2QzZjYjMWprbG1uMHBxMjU3dXZ3 eHl6QUIoRDNGNiMxSktMTU4wUFEyNTdVVldYWVoiOworCitlbnVtIFRleHRNb2RGaWx0ZXJUeXBl IHsKKyAgICBUTV9URVhUTU9ELAorICAgIFRNX0NFTlNPUiwKKyAgICBUTV9TSE9XX1NQRUFLRVIs Cit9OworCitlbnVtIFRleHRNb2RPcGVyYXRpb24geworICAgIE9QX0xFRVQsCisgICAgT1BfVE9f VVBQRVIsCisgICAgT1BfVE9fTE9XRVIsCisgICAgT1BfUkVQTEFDRV9DSEFSUywKKyAgICBPUF9S RU1PVkVfQ0hBUlMsCisgICAgT1BfUkVQTEFDRV9XT1JEUywKKyAgICBPUF9SRU1PVkVfV09SRFMs CisgICAgTkJfT1BTLAorfTsKKworZW51bSBDZW5zb3JNb2RlIHsKKyAgICBDTV9LRUVQX0ZJUlNU X0xBU1QsCisgICAgQ01fS0VFUF9GSVJTVCwKKyAgICBDTV9BTEwsCit9OworCitlbnVtIFNob3dT cGVha2VyTW9kZSB7CisgICAgU01fU1FVQVJFX0JSQUNLRVRTLAorICAgIFNNX1JPVU5EX0JSQUNL RVRTLAorICAgIFNNX0NPTE9OLAorICAgIFNNX1BMQUlOLAorfTsKKwordHlwZWRlZiBzdHJ1Y3Qg VGV4dE1vZENvbnRleHQgeworICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOworICAgIGVudW0gQVZT dWJ0aXRsZVR5cGUgZm9ybWF0OworICAgIGVudW0gVGV4dE1vZEZpbHRlclR5cGUgZmlsdGVyX3R5 cGU7CisgICAgZW51bSBUZXh0TW9kT3BlcmF0aW9uIG9wZXJhdGlvbjsKKyAgICBlbnVtIENlbnNv ck1vZGUgY2Vuc29yX21vZGU7CisgICAgZW51bSBTaG93U3BlYWtlck1vZGUgc3BlYWtlcl9tb2Rl OworICAgIGNoYXIgKmZpbmQ7CisgICAgY2hhciAqZmluZF9maWxlOworICAgIGNoYXIgKnN0eWxl OworICAgIGNoYXIgKnJlcGxhY2U7CisgICAgY2hhciAqcmVwbGFjZV9maWxlOworICAgIGNoYXIg KnNlcGFyYXRvcjsKKyAgICBjaGFyICpjZW5zb3JfY2hhcjsKKyAgICBjaGFyICoqZmluZF9saXN0 OworICAgIGludCAgbGluZV9icmVhazsKKyAgICBpbnQgIG5iX2ZpbmRfbGlzdDsKKyAgICBjaGFy ICoqcmVwbGFjZV9saXN0OworICAgIGludCAgbmJfcmVwbGFjZV9saXN0OworfSBUZXh0TW9kQ29u dGV4dDsKKworc3RhdGljIGNoYXIgKipzcGxpdF9zdHJpbmcoY2hhciAqc291cmNlLCBpbnQgKm5i X2VsZW1zLCBjb25zdCBjaGFyICpkZWxpbSkKK3sKKyAgICBjaGFyICoqbGlzdCA9IE5VTEw7Cisg ICAgY2hhciAqdGVtcCA9IE5VTEw7CisgICAgY2hhciAqcHRyID0gYXZfc3RydG9rKHNvdXJjZSwg ZGVsaW0sICZ0ZW1wKTsKKworICAgIHdoaWxlIChwdHIpIHsKKyAgICAgICAgaWYgKHN0cmxlbihw dHIpKSB7CisgICAgICAgICAgICBhdl9keW5hcnJheV9hZGQoJmxpc3QsIG5iX2VsZW1zLCBwdHIp OworICAgICAgICAgICAgaWYgKCFsaXN0KQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwor ICAgICAgICB9CisKKyAgICAgICAgcHRyID0gYXZfc3RydG9rKE5VTEwsIGRlbGltLCAmdGVtcCk7 CisgICAgfQorCisgICAgaWYgKCFsaXN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgKm5iX2VsZW1zOyBpKyspIHsKKyAgICAgICAgbGlzdFtpXSA9IGF2 X3N0cmR1cChsaXN0W2ldKTsKKyAgICAgICAgaWYgKCFsaXN0W2ldKSB7CisgICAgICAgICAgICBm b3IgKGludCBuID0gMDsgbiA8IGk7IG4rKykKKyAgICAgICAgICAgICAgICBhdl9mcmVlKGxpc3Rb bl0pOworICAgICAgICAgICAgYXZfZnJlZShsaXN0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxM OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBpbnQg bG9hZF90ZXh0X2Zyb21fZmlsZShBVkZpbHRlckNvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqZmls ZV9uYW1lLCBjaGFyICoqdGV4dCwgY2hhciBzZXBhcmF0b3IpCit7CisgICAgaW50IGVycjsKKyAg ICB1aW50OF90ICp0ZXh0YnVmOworICAgIGNoYXIgKnRtcDsKKyAgICBzaXplX3QgdGV4dGJ1Zl9z aXplOworICAgIGludCBvZmZzZXQgPSAwOworCisgICAgaWYgKChlcnIgPSBhdl9maWxlX21hcChm aWxlX25hbWUsICZ0ZXh0YnVmLCAmdGV4dGJ1Zl9zaXplLCAwLCBjdHgpKSA8IDApIHsKKyAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVGhlIHRleHQgZmlsZSAnJXMnIGNvdWxkIG5v dCBiZSByZWFkIG9yIGlzIGVtcHR5XG4iLCBmaWxlX25hbWUpOworICAgICAgICByZXR1cm4gZXJy OworICAgIH0KKworICAgIGlmICh0ZXh0YnVmX3NpemUgPiAxICYmCisgICAgICAgICh0ZXh0YnVm WzBdID09IDB4RkYgJiYgdGV4dGJ1ZlsxXSA9PSAweEZFCisgICAgICAgIHx8IHRleHRidWZbMF0g PT0gMHhGRSAmJiB0ZXh0YnVmWzFdID09IDB4RkYpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIlVURiB0ZXh0IGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkLiBGaWxlOiAlc1xu IiwgZmlsZV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisK KyAgICBpZiAodGV4dGJ1Zl9zaXplID4gMiAmJiB0ZXh0YnVmWzBdID09IDB4RUYgJiYgdGV4dGJ1 ZlsxXSA9PSAweEJCICYmIHRleHRidWZbMl0gPT0gMHhCRikKKyAgICAgICAgb2Zmc2V0ID0gMzsg Ly8gVVRGLTgKKworICAgIGlmICh0ZXh0YnVmX3NpemUgPiBTSVpFX01BWCAtIDEgfHwgISgodG1w ID0gYXZfc3RybmR1cCgoY2hhciAqKXRleHRidWYgKyBvZmZzZXQsIHRleHRidWZfc2l6ZSAtIG9m ZnNldCkpKSkgeworICAgICAgICBhdl9maWxlX3VubWFwKHRleHRidWYsIHRleHRidWZfc2l6ZSk7 CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgYXZfZmlsZV91 bm1hcCh0ZXh0YnVmLCB0ZXh0YnVmX3NpemUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg PCBzdHJsZW4odG1wKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAodG1wW2ldKSB7CisgICAgICAg IGNhc2UgJ1xuJzoKKyAgICAgICAgY2FzZSAnXHInOgorICAgICAgICBjYXNlICdcZic6CisgICAg ICAgIGNhc2UgJ1x2JzoKKyAgICAgICAgICAgIHRtcFtpXSA9IHNlcGFyYXRvcjsKKyAgICAgICAg fQorICAgIH0KKworICAgICp0ZXh0ID0gdG1wOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgbG9hZF9maWxlcyhBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBUZXh0TW9kQ29u dGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBpbnQgcmV0OworCisgICAgaWYgKCFzLT5zZXBhcmF0 b3IgfHwgc3RybGVuKHMtPnNlcGFyYXRvcikgIT0gMSkgeworICAgICAgICBhdl9sb2coY3R4LCBB Vl9MT0dfRVJST1IsICJBIHNpbmdsZSBjaGFyYWN0ZXIgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIGZv ciB0aGUgc2VwYXJhdG9yIHBhcmFtZXRlci5cbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihF SU5WQUwpOworICAgIH0KKworICAgIGlmIChzLT5maW5kX2ZpbGUgJiYgc3RybGVuKHMtPmZpbmRf ZmlsZSkpIHsKKyAgICAgICAgcmV0ID0gbG9hZF90ZXh0X2Zyb21fZmlsZShjdHgsIHMtPmZpbmRf ZmlsZSwgJnMtPmZpbmQsIHMtPnNlcGFyYXRvclswXSk7CisgICAgICAgIGlmIChyZXQgPCAwICkK KyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgaWYgKHMtPnJlcGxhY2VfZmls ZSAmJiBzdHJsZW4ocy0+cmVwbGFjZV9maWxlKSkgeworICAgICAgICByZXQgPSBsb2FkX3RleHRf ZnJvbV9maWxlKGN0eCwgcy0+cmVwbGFjZV9maWxlLCAmcy0+cmVwbGFjZSwgcy0+c2VwYXJhdG9y WzBdKTsKKyAgICAgICAgaWYgKHJldCA8IDAgKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAg ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X2NlbnNvcihBVkZpbHRl ckNvbnRleHQgKmN0eCkKK3sKKyAgICBUZXh0TW9kQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAg ICBpbnQgcmV0OworCisgICAgcy0+ZmlsdGVyX3R5cGUgPSBUTV9DRU5TT1I7CisgICAgcy0+b3Bl cmF0aW9uID0gT1BfUkVQTEFDRV9XT1JEUzsKKworICAgIHJldCA9IGxvYWRfZmlsZXMoY3R4KTsK KyAgICBpZiAocmV0IDwgMCApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBpZiAoIXMtPmZp bmQgfHwgIXN0cmxlbihzLT5maW5kKSkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsICJFaXRoZXIgdGhlICd3b3Jkcycgb3IgdGhlICd3b3Jkc19maWxlJyBwYXJhbWV0ZXIgbmVl ZHMgdG8gYmUgc3BlY2lmaWVkXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsK KyAgICB9CisKKyAgICBpZiAoIXMtPmNlbnNvcl9jaGFyIHx8IHN0cmxlbihzLT5jZW5zb3JfY2hh cikgIT0gMSkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJBIHNpbmdsZSBj aGFyYWN0ZXIgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIGZvciB0aGUgY2Vuc29yX2NoYXIgcGFyYW1l dGVyXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBz LT5maW5kX2xpc3QgPSBzcGxpdF9zdHJpbmcocy0+ZmluZCwgJnMtPm5iX2ZpbmRfbGlzdCwgcy0+ c2VwYXJhdG9yKTsKKyAgICBpZiAoIXMtPmZpbmRfbGlzdCkKKyAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PTUVNKTsKKworICAgIHMtPnJlcGxhY2VfbGlzdCA9IGF2X2NhbGxvYyhzLT5uYl9maW5k X2xpc3QsIHNpemVvZihjaGFyICopKTsKKyAgICBpZiAoIXMtPnJlcGxhY2VfbGlzdCkKKyAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+ bmJfZmluZF9saXN0OyBpKyspIHsKKyAgICAgICAgc2l6ZV90IGxlbiwgc3RhcnQgPSAwLCBlbmQ7 CisgICAgICAgIGNoYXIgKml0ZW0gPSBhdl9zdHJkdXAocy0+ZmluZF9saXN0W2ldKTsKKyAgICAg ICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAg ICAgICBsZW4gPSBlbmQgPSBzdHJsZW4oaXRlbSk7CisKKyAgICAgICAgc3dpdGNoIChzLT5jZW5z b3JfbW9kZSkgeworICAgICAgICBjYXNlIENNX0tFRVBfRklSU1RfTEFTVDoKKworICAgICAgICAg ICAgaWYgKGxlbiA+IDIpCisgICAgICAgICAgICAgICAgc3RhcnQgPSAxOworICAgICAgICAgICAg aWYgKGxlbiA+IDMpCisgICAgICAgICAgICAgICAgZW5kLS07CisKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICBjYXNlIENNX0tFRVBfRklSU1Q6CisKKyAgICAgICAgICAgIGlmIChsZW4gPiAy KQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gMTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBuID0gc3RhcnQ7IG4gPCBlbmQ7IG4rKykKKyAg ICAgICAgICAgIGl0ZW1bbl0gPSBzLT5jZW5zb3JfY2hhclswXTsKKworICAgICAgICBzLT5yZXBs YWNlX2xpc3RbaV0gPSBpdGVtOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IGluaXRfc2hvd3NwZWFrZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgVGV4dE1v ZENvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgcy0+ZmlsdGVyX3R5cGUgPSBUTV9TSE9XX1NQ RUFLRVI7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0KEFWRmlsdGVyQ29u dGV4dCAqY3R4KQoreworICAgIFRleHRNb2RDb250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGlu dCByZXQ7CisKKyAgICByZXQgPSBsb2FkX2ZpbGVzKGN0eCk7CisgICAgaWYgKHJldCA8IDAgKQor ICAgICAgICByZXR1cm4gcmV0OworCisgICAgc3dpdGNoIChzLT5vcGVyYXRpb24pIHsKKyAgICBj YXNlIE9QX1JFUExBQ0VfQ0hBUlM6CisgICAgY2FzZSBPUF9SRU1PVkVfQ0hBUlM6CisgICAgY2Fz ZSBPUF9SRVBMQUNFX1dPUkRTOgorICAgIGNhc2UgT1BfUkVNT1ZFX1dPUkRTOgorICAgICAgICBp ZiAoIXMtPmZpbmQgfHwgIXN0cmxlbihzLT5maW5kKSkgeworICAgICAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiU2VsZWN0ZWQgbW9kZSByZXF1aXJlcyB0aGUgJ2ZpbmQnIHBhcmFt ZXRlciB0byBiZSBzcGVjaWZpZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHMt Pm9wZXJhdGlvbikgeworICAgIGNhc2UgT1BfUkVQTEFDRV9DSEFSUzoKKyAgICBjYXNlIE9QX1JF UExBQ0VfV09SRFM6CisgICAgICAgIGlmICghcy0+cmVwbGFjZSB8fCAhc3RybGVuKHMtPnJlcGxh Y2UpKSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJTZWxlY3RlZCBt b2RlIHJlcXVpcmVzIHRoZSAncmVwbGFjZScgcGFyYW1ldGVyIHRvIGJlIHNwZWNpZmllZFxuIik7 CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICB9CisgICAgICAg IGJyZWFrOworICAgIH0KKworICAgIGlmIChzLT5vcGVyYXRpb24gPT0gT1BfUkVQTEFDRV9DSEFS UyAmJiBzdHJsZW4ocy0+ZmluZCkgIT0gc3RybGVuKHMtPnJlcGxhY2UpKSB7CisgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlNlbGVjdGVkIG1vZGUgcmVxdWlyZXMgdGhlICdmaW5k JyBhbmQgJ3JlcGxhY2UnIHBhcmFtZXRlcnMgdG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGhcbiIpOwor ICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGlmIChzLT5vcGVy YXRpb24gPT0gT1BfUkVQTEFDRV9XT1JEUyB8fCBzLT5vcGVyYXRpb24gPT0gT1BfUkVNT1ZFX1dP UkRTKSB7CisgICAgICAgIGlmICghcy0+c2VwYXJhdG9yIHx8IHN0cmxlbihzLT5zZXBhcmF0b3Ip ICE9IDEpIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlNlbGVjdGVk IG1vZGUgcmVxdWlyZXMgYSBzaW5nbGUgc2VwYXJhdG9yIGNoYXIgdG8gYmUgc3BlY2lmaWVkXG4i KTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIH0KKworICAg ICAgICBzLT5maW5kX2xpc3QgPSBzcGxpdF9zdHJpbmcocy0+ZmluZCwgJnMtPm5iX2ZpbmRfbGlz dCwgcy0+c2VwYXJhdG9yKTsKKyAgICAgICAgaWYgKCFzLT5maW5kX2xpc3QpCisgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgICAgIGlmIChzLT5vcGVyYXRpb24gPT0g T1BfUkVQTEFDRV9XT1JEUykgeworCisgICAgICAgICAgICBzLT5yZXBsYWNlX2xpc3QgPSBzcGxp dF9zdHJpbmcocy0+cmVwbGFjZSwgJnMtPm5iX3JlcGxhY2VfbGlzdCwgcy0+c2VwYXJhdG9yKTsK KyAgICAgICAgICAgIGlmICghcy0+cmVwbGFjZV9saXN0KQorICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgICAgIGlmIChzLT5uYl9maW5kX2xpc3QgIT0g cy0+bmJfcmVwbGFjZV9saXN0KSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiVGhlIG51bWJlciBvZiB3b3JkcyBpbiAnZmluZCcgYW5kICdyZXBsYWNlJyBuZWVk cyB0byBiZSBlcXVhbFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFM KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgdm9pZCB1bmluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgVGV4dE1v ZENvbnRleHQgKnMgPSBjdHgtPnByaXY7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMtPm5i X2ZpbmRfbGlzdDsgaSsrKQorICAgICAgICBhdl9mcmVlcCgmcy0+ZmluZF9saXN0W2ldKTsKKwor ICAgIHMtPm5iX2ZpbmRfbGlzdCA9IDA7CisgICAgYXZfZnJlZXAoJnMtPmZpbmRfbGlzdCk7CisK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMtPm5iX3JlcGxhY2VfbGlzdDsgaSsrKQorICAgICAg ICBhdl9mcmVlcCgmcy0+cmVwbGFjZV9saXN0W2ldKTsKKworICAgIHMtPm5iX3JlcGxhY2VfbGlz dCA9IDA7CisgICAgYXZfZnJlZXAoJnMtPnJlcGxhY2VfbGlzdCk7Cit9CisKK3N0YXRpYyBjaGFy ICpwcm9jZXNzX3RleHQoVGV4dE1vZENvbnRleHQgKnMsIGNoYXIgKnRleHQpCit7CisgICAgY29u c3QgY2hhciAqY2hhcl9zcmMgPSBzLT5maW5kOworICAgIGNvbnN0IGNoYXIgKmNoYXJfZHN0ID0g cy0+cmVwbGFjZTsKKyAgICBjaGFyICpyZXN1bHQgICAgICAgICA9IE5VTEw7CisgICAgaW50IGVz Y2FwZV9sZXZlbCAgICAgPSAwLCBrID0gMDsKKworICAgIHN3aXRjaCAocy0+b3BlcmF0aW9uKSB7 CisgICAgY2FzZSBPUF9MRUVUOgorICAgIGNhc2UgT1BfUkVQTEFDRV9DSEFSUzoKKworICAgICAg ICBpZiAocy0+b3BlcmF0aW9uID09IE9QX0xFRVQpIHsKKyAgICAgICAgICAgIGNoYXJfc3JjID0g bGVldF9zcmM7CisgICAgICAgICAgICBjaGFyX2RzdCA9IGxlZXRfZHN0OworICAgICAgICB9CisK KyAgICAgICAgcmVzdWx0ID0gYXZfc3RyZHVwKHRleHQpOworICAgICAgICBpZiAoIXJlc3VsdCkK KyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGZvciAoc2l6ZV90IG4gPSAwOyBu IDwgc3RybGVuKHJlc3VsdCk7IG4rKykgeworICAgICAgICAgICAgaWYgKHJlc3VsdFtuXSA9PSAn eycpCisgICAgICAgICAgICAgICAgZXNjYXBlX2xldmVsKys7CisKKyAgICAgICAgICAgIGlmICgh ZXNjYXBlX2xldmVsKSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihjaGFy X3NyYyk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgdCA9IDA7IHQgPCBsZW47IHQrKykg eworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W25dID09IGNoYXJfc3JjW3RdKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbl0gPSBjaGFyX2RzdFt0XTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVzdWx0W25dID09ICd9 JykKKyAgICAgICAgICAgICAgICBlc2NhcGVfbGV2ZWwtLTsKKyAgICAgICAgfQorCisgICAgICAg IGJyZWFrOworICAgIGNhc2UgT1BfVE9fVVBQRVI6CisgICAgY2FzZSBPUF9UT19MT1dFUjoKKwor ICAgICAgICByZXN1bHQgPSBhdl9zdHJkdXAodGV4dCk7CisgICAgICAgIGlmICghcmVzdWx0KQor ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgZm9yIChzaXplX3QgbiA9IDA7IG4g PCBzdHJsZW4ocmVzdWx0KTsgbisrKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0W25dID09ICd7 JykKKyAgICAgICAgICAgICAgICBlc2NhcGVfbGV2ZWwrKzsKKyAgICAgICAgICAgIGlmICghZXNj YXBlX2xldmVsKQorICAgICAgICAgICAgICAgIHJlc3VsdFtuXSA9IHMtPm9wZXJhdGlvbiA9PSBP UF9UT19MT1dFUiA/IGF2X3RvbG93ZXIocmVzdWx0W25dKSA6IGF2X3RvdXBwZXIocmVzdWx0W25d KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHRbbl0gPT0gJ30nKQorICAgICAgICAgICAgICAgIGVz Y2FwZV9sZXZlbC0tOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9S RU1PVkVfQ0hBUlM6CisKKyAgICAgICAgcmVzdWx0ID0gYXZfc3RyZHVwKHRleHQpOworICAgICAg ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGZvciAo c2l6ZV90IG4gPSAwOyBuIDwgc3RybGVuKHJlc3VsdCk7IG4rKykgeworICAgICAgICAgICAgaW50 IHNraXBfY2hhciA9IDA7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHRbbl0gPT0gJ3snKQorICAg ICAgICAgICAgICAgIGVzY2FwZV9sZXZlbCsrOworCisgICAgICAgICAgICBpZiAoIWVzY2FwZV9s ZXZlbCkgeworICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oY2hhcl9zcmMpOwor ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IHQgPSAwOyB0IDwgbGVuOyB0KyspIHsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuXSA9PSBjaGFyX3NyY1t0XSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgc2tpcF9jaGFyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorCisgICAgICAgICAgICBpZiAoIXNraXBfY2hhcikKKyAgICAgICAgICAgICAgICByZXN1 bHRbaysrXSA9IHJlc3VsdFtuXTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdFtuXSA9PSAnfScp CisgICAgICAgICAgICAgICAgZXNjYXBlX2xldmVsLS07CisgICAgICAgIH0KKworICAgICAgICBy ZXN1bHRba10gPSAwOworCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfUkVQTEFDRV9XT1JE UzoKKyAgICBjYXNlIE9QX1JFTU9WRV9XT1JEUzoKKworICAgICAgICByZXN1bHQgPSBhdl9zdHJk dXAodGV4dCk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7 CisKKyAgICAgICAgZm9yIChpbnQgbiA9IDA7IG4gPCBzLT5uYl9maW5kX2xpc3Q7IG4rKykgewor ICAgICAgICAgICAgY2hhciAqdG1wICAgICAgICAgICA9IHJlc3VsdDsKKyAgICAgICAgICAgIGNv bnN0IGNoYXIgKnJlcGxhY2UgPSAocy0+b3BlcmF0aW9uID09IE9QX1JFUExBQ0VfV09SRFMpID8g cy0+cmVwbGFjZV9saXN0W25dIDogIiI7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGF2X3N0cmly ZXBsYWNlKHJlc3VsdCwgcy0+ZmluZF9saXN0W25dLCByZXBsYWNlKTsKKyAgICAgICAgICAgIGlm ICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgICAgICBh dl9mcmVlKHRtcCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy ZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY2hhciAqcHJvY2Vzc19kaWFsb2dfc2hvd19zcGVh a2VyKFRleHRNb2RDb250ZXh0ICpzLCBjaGFyICphc3NfbGluZSkKK3sKKyAgICBBU1NEaWFsb2cg KmRpYWxvZyA9IGF2cHJpdl9hc3Nfc3BsaXRfZGlhbG9nKE5VTEwsIGFzc19saW5lKTsKKyAgICBp bnQgZXNjYXBlX2xldmVsID0gMDsKKyAgICB1bnNpZ25lZCBwb3MgPSAwLCBsZW47CisgICAgY2hh ciAqcmVzdWx0LCAqdGV4dDsKKyAgICBBVkJQcmludCBwYnVmOworCisgICAgaWYgKCFkaWFsb2cp CisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdGV4dCA9IHByb2Nlc3NfdGV4dChzLCBkaWFs b2ctPnRleHQpOworICAgIGlmICghdGV4dCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBp ZiAoIWRpYWxvZy0+bmFtZSB8fCAhc3RybGVuKGRpYWxvZy0+bmFtZSkgfHwgIWRpYWxvZy0+dGV4 dCB8fCAhc3RybGVuKGRpYWxvZy0+dGV4dCkpCisgICAgICAgIHJldHVybiBhdl9zdHJkdXAoYXNz X2xpbmUpOworCisgICAgLy8gRmluZCBpbnNlcnRpb24gcG9pbnQgaW4gY2FzZSB0aGUgbGluZSBz dGFydHMgd2l0aCBzdHlsZSBjb2RlcworICAgIGxlbiA9ICh1bnNpZ25lZClzdHJsZW4oZGlhbG9n LT50ZXh0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKworICAg ICAgICBpZiAoZGlhbG9nLT50ZXh0W2ldID09ICd7JykKKyAgICAgICAgICAgIGVzY2FwZV9sZXZl bCsrOworCisgICAgICAgIGlmIChkaWFsb2ctPnRleHRbaV0gPT0gJ30nKQorICAgICAgICAgICAg ZXNjYXBlX2xldmVsLS07CisKKyAgICAgICAgaWYgKGVzY2FwZV9sZXZlbCA9PSAwKSB7CisgICAg ICAgICAgICBwb3MgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK KyAgICBpZiAocy0+c3R5bGUgJiYgc3RybGVuKHMtPnN0eWxlKSkKKyAgICAgICAgLy8gV2hlbiBh IHN0eWxlIGlzIHNwZWNpZmllZCByZXNldCB0aGUgaW5zZXJ0aW9uIHBvaW50CisgICAgICAgIC8v IChhbHdheXMgYWRkIHNwZWFrZXIgcGx1cyBzdHlsZSBhdCB0aGUgc3RhcnQgaW4gdGhhdCBjYXNl KQorICAgICAgICBwb3MgPSAwOworCisgICAgaWYgKHBvcyA+PSBsZW4gLSAxKQorICAgICAgICBy ZXR1cm4gYXZfc3RyZHVwKGFzc19saW5lKTsKKworICAgIGF2X2JwcmludF9pbml0KCZwYnVmLCAx LCBBVl9CUFJJTlRfU0laRV9VTkxJTUlURUQpOworCisgICAgaWYgKHBvcyA+IDApIHsKKyAgICAg ICAgYXZfYnByaW50X2FwcGVuZF9kYXRhKCZwYnVmLCBkaWFsb2ctPnRleHQsIHBvcyk7CisgICAg fQorCisgICAgaWYgKHMtPnN0eWxlICYmIHN0cmxlbihzLT5zdHlsZSkpIHsKKyAgICAgICAgaWYg KHMtPnN0eWxlWzBdID09ICd7JykKKyAgICAgICAgICAgIC8vIEFzc3VtZSBjb21wbGV0ZSBhbmQg dmFsaWQgc3R5bGUgY29kZSwgZS5nLiB7XGMmSEZGMDAwMCZ9CisgICAgICAgICAgICBhdl9icHJp bnRmKCZwYnVmLCAiJXMiLCBzLT5zdHlsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8v IE90aGVyd2lzZSBpdCBtdXN0IGJlIGEgc3R5bGUgbmFtZQorICAgICAgICAgICAgYXZfYnByaW50 ZigmcGJ1ZiwgIntcXHIlc30iLCBzLT5zdHlsZSk7CisgICAgfQorCisgICAgc3dpdGNoIChzLT5z cGVha2VyX21vZGUpIHsKKyAgICBjYXNlIFNNX1NRVUFSRV9CUkFDS0VUUzoKKyAgICAgICAgYXZf YnByaW50ZigmcGJ1ZiwgIlslc10iLCBkaWFsb2ctPm5hbWUpOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIFNNX1JPVU5EX0JSQUNLRVRTOgorICAgICAgICBhdl9icHJpbnRmKCZwYnVmLCAiKCVz KSIsIGRpYWxvZy0+bmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU01fQ09MT046Cisg ICAgICAgIGF2X2JwcmludGYoJnBidWYsICIlczoiLCBkaWFsb2ctPm5hbWUpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIFNNX1BMQUlOOgorICAgICAgICBhdl9icHJpbnRmKCZwYnVmLCAiJXMi LCBkaWFsb2ctPm5hbWUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocy0+c3R5 bGUgJiYgc3RybGVuKHMtPnN0eWxlKSkgeworICAgICAgICAvLyBSZXNldCBsaW5lIHN0eWxlCisg ICAgICAgIGlmIChkaWFsb2ctPnN0eWxlICYmIHN0cmxlbihkaWFsb2ctPnN0eWxlKSAmJiAhYXZf c3RyY2FzZWNtcChkaWFsb2ctPnN0eWxlLCAiZGVmYXVsdCIpKQorICAgICAgICAgICAgYXZfYnBy aW50ZigmcGJ1ZiwgIntcXHIlc30iLCBkaWFsb2ctPnN0eWxlKTsKKyAgICAgICAgZWxzZQorICAg ICAgICAgICAgYXZfYnByaW50ZigmcGJ1ZiwgIntcXHJ9Iik7CisgICAgfQorCisgICAgaWYgKHMt PmxpbmVfYnJlYWspCisgICAgICAgIGF2X2JwcmludGYoJnBidWYsICJcXE4iKTsKKyAgICBlbHNl CisgICAgICAgIGF2X2JwcmludGYoJnBidWYsICIgIik7CisKKyAgICBhdl9icHJpbnRfYXBwZW5k X2RhdGEoJnBidWYsIGRpYWxvZy0+dGV4dCArIHBvcywgbGVuIC0gcG9zKTsKKworICAgIGF2X2Jw cmludF9maW5hbGl6ZSgmcGJ1ZiwgJnRleHQpOworCisgICAgcmVzdWx0ID0gYXZwcml2X2Fzc19n ZXRfZGlhbG9nX2V4KGRpYWxvZy0+cmVhZG9yZGVyLCBkaWFsb2ctPmxheWVyLCBkaWFsb2ctPnN0 eWxlLCBkaWFsb2ctPm5hbWUsIGRpYWxvZy0+bWFyZ2luX2wsIGRpYWxvZy0+bWFyZ2luX3IsIGRp YWxvZy0+bWFyZ2luX3YsIGRpYWxvZy0+ZWZmZWN0LCB0ZXh0KTsKKworICAgIGF2X2ZyZWUodGV4 dCk7CisgICAgYXZwcml2X2Fzc19mcmVlX2RpYWxvZygmZGlhbG9nKTsKKyAgICByZXR1cm4gcmVz dWx0OworfQorCitzdGF0aWMgY2hhciAqcHJvY2Vzc19kaWFsb2coVGV4dE1vZENvbnRleHQgKnMs IGNoYXIgKmFzc19saW5lKQoreworICAgIEFTU0RpYWxvZyAqZGlhbG9nOworICAgIGNoYXIgKnJl c3VsdCwgKnRleHQ7CisKKyAgICBpZiAocy0+ZmlsdGVyX3R5cGUgPT0gVE1fU0hPV19TUEVBS0VS KQorICAgICAgICByZXR1cm4gcHJvY2Vzc19kaWFsb2dfc2hvd19zcGVha2VyKHMsIGFzc19saW5l KTsKKworICAgIGRpYWxvZyA9IGF2cHJpdl9hc3Nfc3BsaXRfZGlhbG9nKE5VTEwsIGFzc19saW5l KTsKKyAgICBpZiAoIWRpYWxvZykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0ZXh0ID0g cHJvY2Vzc190ZXh0KHMsIGRpYWxvZy0+dGV4dCk7CisgICAgaWYgKCF0ZXh0KQorICAgICAgICBy ZXR1cm4gTlVMTDsKKworICAgIHJlc3VsdCA9IGF2cHJpdl9hc3NfZ2V0X2RpYWxvZ19leChkaWFs b2ctPnJlYWRvcmRlciwgZGlhbG9nLT5sYXllciwgZGlhbG9nLT5zdHlsZSwgZGlhbG9nLT5uYW1l LCBkaWFsb2ctPm1hcmdpbl9sLCBkaWFsb2ctPm1hcmdpbl9yLCBkaWFsb2ctPm1hcmdpbl92LCBk aWFsb2ctPmVmZmVjdCwgdGV4dCk7CisKKyAgICBhdl9mcmVlKHRleHQpOworICAgIGF2cHJpdl9h c3NfZnJlZV9kaWFsb2coJmRpYWxvZyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj IGludCBjb25maWdfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBBVkZpbHRl ckxpbmsgKmlubGluayA9IG91dGxpbmstPnNyYy0+aW5wdXRzWzBdOworCisgICAgb3V0bGluay0+ dyA9IGlubGluay0+dzsKKyAgICBvdXRsaW5rLT5oID0gaW5saW5rLT5oOworICAgIG91dGxpbmst PnRpbWVfYmFzZSA9IGlubGluay0+dGltZV9iYXNlOworICAgIG91dGxpbmstPmZyYW1lX3JhdGUg PSBpbmxpbmstPmZyYW1lX3JhdGU7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBm aWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFWRnJhbWUgKmZyYW1lKQoreworICAg IFRleHRNb2RDb250ZXh0ICpzID0gaW5saW5rLT5kc3QtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5r ICpvdXRsaW5rID0gaW5saW5rLT5kc3QtPm91dHB1dHNbMF07CisgICAgaW50IHJldDsKKworICAg IG91dGxpbmstPmZvcm1hdCA9IGlubGluay0+Zm9ybWF0OworCisgICAgcmV0ID0gYXZfZnJhbWVf bWFrZV93cml0YWJsZShmcmFtZSk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiBy ZXQ7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWUtPm51bV9zdWJ0aXRsZV9h cmVhczsgaSsrKSB7CisKKyAgICAgICAgQVZTdWJ0aXRsZUFyZWEgKmFyZWEgPSBmcmFtZS0+c3Vi dGl0bGVfYXJlYXNbaV07CisKKyAgICAgICAgaWYgKGFyZWEtPmFzcykgeworICAgICAgICAgICAg Y2hhciAqdG1wID0gYXJlYS0+YXNzOworICAgICAgICAgICAgYXJlYS0+YXNzID0gcHJvY2Vzc19k aWFsb2cocywgYXJlYS0+YXNzKTsKKyAgICAgICAgICAgIGF2X2ZyZWUodG1wKTsKKyAgICAgICAg ICAgIGlmICghYXJlYS0+YXNzKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxp bmssIGZyYW1lKTsKK30KKworI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVGV4dE1vZENvbnRl eHQsIHgpCisjZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19TVUJUSVRMRV9QQVJBTSB8IEFWX09Q VF9GTEFHX0ZJTFRFUklOR19QQVJBTSkKKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIHRleHRtb2Rf b3B0aW9uc1tdID0geworICAgIHsgIm1vZGUiLCAgICAgICAgICAgICAic2V0IG9wZXJhdGlvbiBt b2RlIiwgICAgICAgICAgICAgIE9GRlNFVChvcGVyYXRpb24pLCAgICBBVl9PUFRfVFlQRV9JTlQs ICAgIHsuaTY0PU9QX0xFRVR9LCAgICAgICAgICBPUF9MRUVULCBOQl9PUFMtMSwgRkxBR1MsICJt b2RlIiB9LAorICAgIHsgICAibGVldCIsICAgICAgICAgICAiY29udmVydCB0ZXh0IHRvICdsZWV0 IHNwZWFrJyIsICAgIDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsu aTY0PU9QX0xFRVR9LCAgICAgICAgICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsICJtb2RlIiB9 LAorICAgIHsgICAidG9fdXBwZXIiLCAgICAgICAiY2hhbmdlIHRvIHVwcGVyIGNhc2UiLCAgICAg ICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PU9Q X1RPX1VQUEVSfSwgICAgICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsICJtb2RlIiB9LAorICAg IHsgICAidG9fbG93ZXIiLCAgICAgICAiY2hhbmdlIHRvIGxvd2VyIGNhc2UiLCAgICAgICAgICAg IDAsICAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PU9QX1RPX0xP V0VSfSwgICAgICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAi cmVwbGFjZV9jaGFycyIsICAicmVwbGFjZSBjaGFyYWN0ZXJzIiwgICAgICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PU9QX1JFUExBQ0VfQ0hB UlN9LCAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAicmVtb3Zl X2NoYXJzIiwgICAicmVtb3ZlIGNoYXJhY3RlcnMiLCAgICAgICAgICAgICAgIDAsICAgICAgICAg ICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PU9QX1JFTU9WRV9DSEFSU30sICAw LCAgICAgICAwLCAgICAgICAgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAicmVwbGFjZV93b3Jk cyIsICAicmVwbGFjZSB3b3JkcyIsICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAg ICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PU9QX1JFUExBQ0VfV09SRFN9LCAwLCAgICAg ICAwLCAgICAgICAgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAicmVtb3ZlX3dvcmRzIiwgICAi cmVtb3ZlIHdvcmRzIiwgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICBB Vl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PU9QX1JFTU9WRV9XT1JEU30sICAwLCAgICAgICAwLCAg ICAgICAgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgImZpbmQiLCAgICAgICAgICAgICAiY2hhcnMv d29yZHMgdG8gZmluZCBvciByZW1vdmUiLCAgIE9GRlNFVChmaW5kKSwgICAgICAgICBBVl9PUFRf VFlQRV9TVFJJTkcsIHsuc3RyID0gTlVMTH0sICAgICAgICAgICAwLCAgICAgICAwLCAgICAgICAg RkxBR1MsIE5VTEwgICB9LAorICAgIHsgImZpbmRfZmlsZSIsICAgICAgICAibG9hZCBmaW5kIHBh cmFtIGZyb20gZmlsZSIsICAgICAgIE9GRlNFVChmaW5kX2ZpbGUpLCAgICBBVl9PUFRfVFlQRV9T VFJJTkcsIHsuc3RyID0gTlVMTH0sICAgICAgICAgICAwLCAgICAgICAwLCAgICAgICAgRkxBR1Ms IE5VTEwgICB9LAorICAgIHsgInJlcGxhY2UiLCAgICAgICAgICAiY2hhcnMvd29yZHMgdG8gcmVw bGFjZSIsICAgICAgICAgIE9GRlNFVChyZXBsYWNlKSwgICAgICBBVl9PUFRfVFlQRV9TVFJJTkcs IHsuc3RyID0gTlVMTH0sICAgICAgICAgICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsIE5VTEwg ICB9LAorICAgIHsgInJlcGxhY2VfZmlsZSIsICAgICAibG9hZCByZXBsYWNlIHBhcmFtIGZyb20g ZmlsZSIsICAgIE9GRlNFVChyZXBsYWNlX2ZpbGUpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3Ry ID0gTlVMTH0sICAgICAgICAgICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsIE5VTEwgICB9LAor ICAgIHsgInNlcGFyYXRvciIsICAgICAgICAid29yZCBzZXBhcmF0b3IiLCAgICAgICAgICAgICAg ICAgIE9GRlNFVChzZXBhcmF0b3IpLCAgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gIiwi fSwgICAgICAgICAgICAwLCAgICAgICAwLCAgICAgICAgRkxBR1MsIE5VTEwgICB9LAorICAgIHsg TlVMTCB9LAorfTsKKworCitzdGF0aWMgY29uc3QgQVZPcHRpb24gY2Vuc29yX29wdGlvbnNbXSA9 IHsKKyAgICB7ICJtb2RlIiwgICAgICAgICAgICAgICAic2V0IGNlbnNvcmluZyBtb2RlIiwgICAg ICAgIE9GRlNFVChjZW5zb3JfbW9kZSksIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9Q01fS0VF UF9GSVJTVF9MQVNUfSwgMCwgMiwgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgICAia2VlcF9maXJz dF9sYXN0IiwgICJjZW5zb3IgaW5uZXIgY2hhcnMiLCAgICAgICAgMCwgICAgICAgICAgICAgICAg ICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1DTV9LRUVQX0ZJUlNUX0xBU1R9LCAwLCAwLCBG TEFHUywgIm1vZGUiIH0sCisgICAgeyAgICJrZWVwX2ZpcnN0IiwgICAgICAgImNlbnNvciBhbGwg YnV0IGZpcnN0IGNoYXIiLCAwLCAgICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwg IHsuaTY0PUNNX0tFRVBfRklSU1R9LCAgICAgIDAsIDAsIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7 ICAgImFsbCIsICAgICAgICAgICAgICAiY2Vuc29yIGFsbCBjaGFycyIsICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCAgey5pNjQ9Q01fQUxMfSwgICAgICAg ICAgICAgMCwgMCwgRkxBR1MsICJtb2RlIiB9LAorICAgIHsgIndvcmRzIiwgICAgICAgICAgICAg ICJsaXN0IG9mIHdvcmRzIHRvIGNlbnNvciIsICAgT0ZGU0VUKGZpbmQpLCAgICAgICAgQVZfT1BU X1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAgICAgICAgICAgICAwLCAwLCBGTEFHUywgTlVM TCAgIH0sCisgICAgeyAid29yZHNfZmlsZSIsICAgICAgICAgInBhdGggdG8gd29yZCBsaXN0IGZp bGUiLCAgICBPRkZTRVQoZmluZF9maWxlKSwgICBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0g TlVMTH0sICAgICAgICAgICAgIDAsIDAsIEZMQUdTLCBOVUxMICAgfSwKKyAgICB7ICJzZXBhcmF0 b3IiLCAgICAgICAgICAid29yZCBzZXBhcmF0b3IiLCAgICAgICAgICAgIE9GRlNFVChzZXBhcmF0 b3IpLCAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSAiLCJ9LCAgICAgICAgICAgICAgMCwg MCwgRkxBR1MsIE5VTEwgICB9LAorICAgIHsgImNlbnNvcl9jaGFyIiwgICAgICAgICJyZXBsYWNl bWVudCBjaGFyYWN0ZXIiLCAgICAgT0ZGU0VUKGNlbnNvcl9jaGFyKSwgQVZfT1BUX1RZUEVfU1RS SU5HLCB7LnN0ciA9ICIqIn0sICAgICAgICAgICAgICAwLCAwLCBGTEFHUywgTlVMTCAgIH0sCisg ICAgeyBOVUxMIH0sCit9OworCitzdGF0aWMgY29uc3QgQVZPcHRpb24gc2hvd3NwZWFrZXJfb3B0 aW9uc1tdID0geworICAgIHsgImZvcm1hdCIsICAgICAgICAgICAgICJzcGVha2VyIG5hbWUgZm9y bWF0dGluZyIsICAgICAgICBPRkZTRVQoc3BlYWtlcl9tb2RlKSwgQVZfT1BUX1RZUEVfSU5ULCAg ICB7Lmk2ND1TTV9TUVVBUkVfQlJBQ0tFVFN9LCAwLCAyLCBGTEFHUywgImZvcm1hdCIgfSwKKyAg ICB7ICAgInNxdWFyZV9icmFja2V0cyIsICAiW3NwZWFrZXJdIHRleHQiLCAgICAgICAgICAgICAg ICAgMCwgICAgICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCAgey5pNjQ9U01fU1FV QVJFX0JSQUNLRVRTfSwgMCwgMCwgRkxBR1MsICJmb3JtYXQiIH0sCisgICAgeyAgICJyb3VuZF9i cmFja2V0cyIsICAgIihzcGVha2VyKSB0ZXh0IiwgICAgICAgICAgICAgICAgIDAsICAgICAgICAg ICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PVNNX1JPVU5EX0JSQUNLRVRTfSwg IDAsIDAsIEZMQUdTLCAiZm9ybWF0IiB9LAorICAgIHsgICAiY29sb24iLCAgICAgICAgICAgICJz cGVha2VyOiB0ZXh0IiwgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgQVZf T1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1TTV9DT0xPTn0sICAgICAgICAgICAwLCAwLCBGTEFHUywg ImZvcm1hdCIgfSwKKyAgICB7ICAgInBsYWluIiwgICAgICAgICAgICAic3BlYWtlciB0ZXh0Iiwg ICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNU LCAgey5pNjQ9U01fUExBSU59LCAgICAgICAgICAgMCwgMCwgRkxBR1MsICJmb3JtYXQiIH0sCisg ICAgeyAibGluZV9icmVhayIsICAgICAgICAgImluc2VydCBsaW5lIGJyZWFrIiwgICAgICAgICAg ICAgIE9GRlNFVChsaW5lX2JyZWFrKSwgICBBVl9PUFRfVFlQRV9CT09MLCAgIHsuaTY0PTB9LCAg ICAgICAgICAgICAgICAgIDAsIDEsIEZMQUdTLCBOVUxMICAgICB9LAorICAgIHsgInN0eWxlIiwg ICAgICAgICAgICAgICJhc3MgdHlwZSBuYW1lIG9yIHN0eWxlIGNvZGUiLCAgICBPRkZTRVQoc3R5 bGUpLCAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAgICAgICAgICAg ICAwLCAwLCBGTEFHUywgTlVMTCAgICAgfSwKKyAgICB7IE5VTEwgfSwKK307CisKK0FWRklMVEVS X0RFRklORV9DTEFTUyh0ZXh0bW9kKTsKK0FWRklMVEVSX0RFRklORV9DTEFTUyhjZW5zb3IpOwor QVZGSUxURVJfREVGSU5FX0NMQVNTKHNob3dzcGVha2VyKTsKKworc3RhdGljIGNvbnN0IEFWRmls dGVyUGFkIGlucHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZh dWx0IiwKKyAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9TVUJUSVRMRSwKKyAg ICAgICAgLmZpbHRlcl9mcmFtZSA9IGZpbHRlcl9mcmFtZSwKKyAgICB9LAorfTsKKworc3RhdGlj IGNvbnN0IEFWRmlsdGVyUGFkIG91dHB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAg ICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSAgICAgICAgICA9IEFWTUVESUFfVFlQ RV9TVUJUSVRMRSwKKyAgICAgICAgLmNvbmZpZ19wcm9wcyAgPSBjb25maWdfb3V0cHV0LAorICAg IH0sCit9OworCitjb25zdCBBVkZpbHRlciBmZl9zZl90ZXh0bW9kID0geworICAgIC5uYW1lICAg ICAgICAgID0gInRleHRtb2QiLAorICAgIC5kZXNjcmlwdGlvbiAgID0gTlVMTF9JRl9DT05GSUdf U01BTEwoIk1vZGlmeSBzdWJ0aXRsZSB0ZXh0IGluIHNldmVyYWwgd2F5cyIpLAorICAgIC5pbml0 ICAgICAgICAgID0gaW5pdCwKKyAgICAudW5pbml0ICAgICAgICA9IHVuaW5pdCwKKyAgICAucHJp dl9zaXplICAgICA9IHNpemVvZihUZXh0TW9kQ29udGV4dCksCisgICAgLnByaXZfY2xhc3MgICAg PSAmdGV4dG1vZF9jbGFzcywKKyAgICBGSUxURVJfSU5QVVRTKGlucHV0cyksCisgICAgRklMVEVS X09VVFBVVFMob3V0cHV0cyksCisgICAgRklMVEVSX1NJTkdMRV9TVUJGTVQoQVZfU1VCVElUTEVf Rk1UX0FTUyksCit9OworCitjb25zdCBBVkZpbHRlciBmZl9zZl9jZW5zb3IgPSB7CisgICAgLm5h bWUgICAgICAgICAgPSAiY2Vuc29yIiwKKyAgICAuZGVzY3JpcHRpb24gICA9IE5VTExfSUZfQ09O RklHX1NNQUxMKCJDZW5zb3Igd29yZHMgaW4gc3VidGl0bGUgdGV4dCIpLAorICAgIC5pbml0ICAg ICAgICAgID0gaW5pdF9jZW5zb3IsCisgICAgLnVuaW5pdCAgICAgICAgPSB1bmluaXQsCisgICAg LnByaXZfc2l6ZSAgICAgPSBzaXplb2YoVGV4dE1vZENvbnRleHQpLAorICAgIC5wcml2X2NsYXNz ICAgID0gJmNlbnNvcl9jbGFzcywKKyAgICBGSUxURVJfSU5QVVRTKGlucHV0cyksCisgICAgRklM VEVSX09VVFBVVFMob3V0cHV0cyksCisgICAgRklMVEVSX1NJTkdMRV9TVUJGTVQoQVZfU1VCVElU TEVfRk1UX0FTUyksCit9OworCitjb25zdCBBVkZpbHRlciBmZl9zZl9zaG93c3BlYWtlciA9IHsK KyAgICAubmFtZSAgICAgICAgICA9ICJzaG93c3BlYWtlciIsCisgICAgLmRlc2NyaXB0aW9uICAg PSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiUHJlcGVuZCBzcGVha2VyIG5hbWVzIHRvIHRleHQgc3Vi dGl0bGVzICh3aGVuIGF2YWlsYWJsZSkiKSwKKyAgICAuaW5pdCAgICAgICAgICA9IGluaXRfc2hv d3NwZWFrZXIsCisgICAgLnVuaW5pdCAgICAgICAgPSB1bmluaXQsCisgICAgLnByaXZfc2l6ZSAg ICAgPSBzaXplb2YoVGV4dE1vZENvbnRleHQpLAorICAgIC5wcml2X2NsYXNzICAgID0gJnNob3dz cGVha2VyX2NsYXNzLAorICAgIEZJTFRFUl9JTlBVVFMoaW5wdXRzKSwKKyAgICBGSUxURVJfT1VU UFVUUyhvdXRwdXRzKSwKKyAgICBGSUxURVJfU0lOR0xFX1NVQkZNVChBVl9TVUJUSVRMRV9GTVRf QVNTKSwKK307Ci0tIApmZm1wZWctY29kZWJvdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2 ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWct ZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWct ZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=